summaryrefslogtreecommitdiffstats
path: root/binutils-2.21/ld
diff options
context:
space:
mode:
authorJing Yu <jingyu@google.com>2011-12-20 10:27:58 -0800
committerJing Yu <jingyu@google.com>2011-12-20 10:27:58 -0800
commitcf3cdbf8b3cda61a619299e7966a83df66244036 (patch)
tree201e2bcfc955f16802d3257112d29736cb3a3ce8 /binutils-2.21/ld
parente4df3e0a5bb640ccfa2f30ee67fe9b3146b152d6 (diff)
downloadtoolchain_binutils-cf3cdbf8b3cda61a619299e7966a83df66244036.zip
toolchain_binutils-cf3cdbf8b3cda61a619299e7966a83df66244036.tar.gz
toolchain_binutils-cf3cdbf8b3cda61a619299e7966a83df66244036.tar.bz2
Add binutils-2.21.
Use --enable-gold=default for dual linker support. Change-Id: Id1a744c7db58a0b5e7a3be174cdfa875f2f86e49
Diffstat (limited to 'binutils-2.21/ld')
-rw-r--r--binutils-2.21/ld/ChangeLog1130
-rw-r--r--binutils-2.21/ld/ChangeLog-00013376
-rw-r--r--binutils-2.21/ld/ChangeLog-02033580
-rw-r--r--binutils-2.21/ld/ChangeLog-20041442
-rw-r--r--binutils-2.21/ld/ChangeLog-20051842
-rw-r--r--binutils-2.21/ld/ChangeLog-20061364
-rw-r--r--binutils-2.21/ld/ChangeLog-20071187
-rwxr-xr-xbinutils-2.21/ld/ChangeLog-20081099
-rw-r--r--binutils-2.21/ld/ChangeLog-20091643
-rw-r--r--binutils-2.21/ld/ChangeLog-91977601
-rw-r--r--binutils-2.21/ld/ChangeLog-98992108
-rw-r--r--binutils-2.21/ld/MAINTAINERS1
-rw-r--r--binutils-2.21/ld/Makefile.am2083
-rw-r--r--binutils-2.21/ld/Makefile.in3426
-rw-r--r--binutils-2.21/ld/NEWS527
-rw-r--r--binutils-2.21/ld/README67
-rw-r--r--binutils-2.21/ld/TODO9
-rw-r--r--binutils-2.21/ld/aclocal.m41008
-rw-r--r--binutils-2.21/ld/config.in215
-rw-r--r--binutils-2.21/ld/configdoc.texi26
-rwxr-xr-xbinutils-2.21/ld/configure15806
-rw-r--r--binutils-2.21/ld/configure.host210
-rw-r--r--binutils-2.21/ld/configure.in351
-rw-r--r--binutils-2.21/ld/configure.tgt719
-rw-r--r--binutils-2.21/ld/deffile.h118
-rw-r--r--binutils-2.21/ld/deffilep.c3008
-rw-r--r--binutils-2.21/ld/deffilep.h122
-rw-r--r--binutils-2.21/ld/deffilep.y1180
-rw-r--r--binutils-2.21/ld/dep-in.sed20
-rw-r--r--binutils-2.21/ld/elf-hints-local.h46
-rw-r--r--binutils-2.21/ld/emulparams/README2
-rw-r--r--binutils-2.21/ld/emulparams/aix5ppc.sh6
-rw-r--r--binutils-2.21/ld/emulparams/aix5rs6.sh6
-rw-r--r--binutils-2.21/ld/emulparams/aixppc.sh7
-rw-r--r--binutils-2.21/ld/emulparams/aixrs6.sh7
-rw-r--r--binutils-2.21/ld/emulparams/alpha.sh3
-rw-r--r--binutils-2.21/ld/emulparams/alphavms.sh7
-rw-r--r--binutils-2.21/ld/emulparams/arcelf.sh12
-rw-r--r--binutils-2.21/ld/emulparams/arm_epoc_pe.sh9
-rw-r--r--binutils-2.21/ld/emulparams/arm_wince_pe.sh13
-rw-r--r--binutils-2.21/ld/emulparams/armaoutb.sh6
-rw-r--r--binutils-2.21/ld/emulparams/armaoutl.sh6
-rw-r--r--binutils-2.21/ld/emulparams/armcoff.sh6
-rw-r--r--binutils-2.21/ld/emulparams/armelf.sh35
-rw-r--r--binutils-2.21/ld/emulparams/armelf_fbsd.sh3
-rw-r--r--binutils-2.21/ld/emulparams/armelf_linux.sh24
-rw-r--r--binutils-2.21/ld/emulparams/armelf_linux_eabi.sh9
-rw-r--r--binutils-2.21/ld/emulparams/armelf_nbsd.sh7
-rw-r--r--binutils-2.21/ld/emulparams/armelf_vxworks.sh6
-rw-r--r--binutils-2.21/ld/emulparams/armelfb.sh2
-rw-r--r--binutils-2.21/ld/emulparams/armelfb_linux.sh2
-rw-r--r--binutils-2.21/ld/emulparams/armelfb_linux_eabi.sh2
-rw-r--r--binutils-2.21/ld/emulparams/armelfb_nbsd.sh2
-rw-r--r--binutils-2.21/ld/emulparams/armnbsd.sh9
-rw-r--r--binutils-2.21/ld/emulparams/armnto.sh28
-rw-r--r--binutils-2.21/ld/emulparams/armpe.sh14
-rw-r--r--binutils-2.21/ld/emulparams/armsymbian.sh22
-rw-r--r--binutils-2.21/ld/emulparams/avr1.sh12
-rw-r--r--binutils-2.21/ld/emulparams/avr2.sh12
-rw-r--r--binutils-2.21/ld/emulparams/avr25.sh12
-rw-r--r--binutils-2.21/ld/emulparams/avr3.sh12
-rw-r--r--binutils-2.21/ld/emulparams/avr31.sh12
-rw-r--r--binutils-2.21/ld/emulparams/avr35.sh12
-rw-r--r--binutils-2.21/ld/emulparams/avr4.sh12
-rw-r--r--binutils-2.21/ld/emulparams/avr5.sh12
-rw-r--r--binutils-2.21/ld/emulparams/avr51.sh12
-rw-r--r--binutils-2.21/ld/emulparams/avr6.sh12
-rwxr-xr-xbinutils-2.21/ld/emulparams/bfin.sh11
-rw-r--r--binutils-2.21/ld/emulparams/coff_i860.sh5
-rw-r--r--binutils-2.21/ld/emulparams/coff_sparc.sh9
-rw-r--r--binutils-2.21/ld/emulparams/crisaout.sh6
-rw-r--r--binutils-2.21/ld/emulparams/criself.sh104
-rw-r--r--binutils-2.21/ld/emulparams/crislinux.sh40
-rw-r--r--binutils-2.21/ld/emulparams/d10velf.sh9
-rw-r--r--binutils-2.21/ld/emulparams/d30v_e.sh22
-rw-r--r--binutils-2.21/ld/emulparams/d30v_o.sh22
-rw-r--r--binutils-2.21/ld/emulparams/d30velf.sh22
-rw-r--r--binutils-2.21/ld/emulparams/delta68.sh5
-rw-r--r--binutils-2.21/ld/emulparams/elf32_dlx.sh10
-rw-r--r--binutils-2.21/ld/emulparams/elf32_i860.sh12
-rw-r--r--binutils-2.21/ld/emulparams/elf32_i960.sh10
-rw-r--r--binutils-2.21/ld/emulparams/elf32_sparc.sh18
-rw-r--r--binutils-2.21/ld/emulparams/elf32_sparc_sol2.sh4
-rw-r--r--binutils-2.21/ld/emulparams/elf32_sparc_vxworks.sh4
-rw-r--r--binutils-2.21/ld/emulparams/elf32_spu.sh27
-rw-r--r--binutils-2.21/ld/emulparams/elf32_tic6x_be.sh2
-rw-r--r--binutils-2.21/ld/emulparams/elf32_tic6x_le.sh40
-rw-r--r--binutils-2.21/ld/emulparams/elf32am33lin.sh11
-rw-r--r--binutils-2.21/ld/emulparams/elf32b4300.sh9
-rw-r--r--binutils-2.21/ld/emulparams/elf32bfinfd.sh45
-rw-r--r--binutils-2.21/ld/emulparams/elf32bmip.sh81
-rw-r--r--binutils-2.21/ld/emulparams/elf32bmipn32-defs.sh96
-rwxr-xr-xbinutils-2.21/ld/emulparams/elf32bmipn32.sh22
-rw-r--r--binutils-2.21/ld/emulparams/elf32bsmip.sh3
-rw-r--r--binutils-2.21/ld/emulparams/elf32btsmip.sh10
-rw-r--r--binutils-2.21/ld/emulparams/elf32btsmipn32.sh15
-rw-r--r--binutils-2.21/ld/emulparams/elf32cr16.sh7
-rw-r--r--binutils-2.21/ld/emulparams/elf32cr16c.sh5
-rw-r--r--binutils-2.21/ld/emulparams/elf32crx.sh6
-rw-r--r--binutils-2.21/ld/emulparams/elf32ebmip.sh2
-rw-r--r--binutils-2.21/ld/emulparams/elf32ebmipvxworks.sh20
-rw-r--r--binutils-2.21/ld/emulparams/elf32elmip.sh2
-rw-r--r--binutils-2.21/ld/emulparams/elf32elmipvxworks.sh11
-rwxr-xr-xbinutils-2.21/ld/emulparams/elf32fr30.sh13
-rwxr-xr-xbinutils-2.21/ld/emulparams/elf32frv.sh21
-rw-r--r--binutils-2.21/ld/emulparams/elf32frvfd.sh17
-rw-r--r--binutils-2.21/ld/emulparams/elf32i370.sh8
-rw-r--r--binutils-2.21/ld/emulparams/elf32ip2k.sh21
-rwxr-xr-xbinutils-2.21/ld/emulparams/elf32iq10.sh13
-rwxr-xr-xbinutils-2.21/ld/emulparams/elf32iq2000.sh16
-rw-r--r--binutils-2.21/ld/emulparams/elf32l4300.sh4
-rw-r--r--binutils-2.21/ld/emulparams/elf32lm32.sh10
-rw-r--r--binutils-2.21/ld/emulparams/elf32lm32fd.sh16
-rw-r--r--binutils-2.21/ld/emulparams/elf32lmip.sh7
-rw-r--r--binutils-2.21/ld/emulparams/elf32lppc.sh5
-rw-r--r--binutils-2.21/ld/emulparams/elf32lppcnto.sh5
-rw-r--r--binutils-2.21/ld/emulparams/elf32lppcsim.sh2
-rw-r--r--binutils-2.21/ld/emulparams/elf32lsmip.sh2
-rw-r--r--binutils-2.21/ld/emulparams/elf32ltsmip.sh2
-rw-r--r--binutils-2.21/ld/emulparams/elf32ltsmipn32.sh4
-rw-r--r--binutils-2.21/ld/emulparams/elf32m32c.sh26
-rw-r--r--binutils-2.21/ld/emulparams/elf32mb_linux.sh17
-rw-r--r--binutils-2.21/ld/emulparams/elf32mcore.sh59
-rwxr-xr-xbinutils-2.21/ld/emulparams/elf32mep.sh55
-rw-r--r--binutils-2.21/ld/emulparams/elf32microblaze.sh23
-rw-r--r--binutils-2.21/ld/emulparams/elf32mipswindiss.sh27
-rw-r--r--binutils-2.21/ld/emulparams/elf32moxie.sh8
-rw-r--r--binutils-2.21/ld/emulparams/elf32mt.sh26
-rwxr-xr-xbinutils-2.21/ld/emulparams/elf32openrisc.sh11
-rw-r--r--binutils-2.21/ld/emulparams/elf32ppc.sh25
-rw-r--r--binutils-2.21/ld/emulparams/elf32ppc_fbsd.sh2
-rw-r--r--binutils-2.21/ld/emulparams/elf32ppccommon.sh50
-rw-r--r--binutils-2.21/ld/emulparams/elf32ppclinux.sh8
-rw-r--r--binutils-2.21/ld/emulparams/elf32ppcnto.sh4
-rw-r--r--binutils-2.21/ld/emulparams/elf32ppcsim.sh2
-rw-r--r--binutils-2.21/ld/emulparams/elf32ppcvxworks.sh3
-rw-r--r--binutils-2.21/ld/emulparams/elf32ppcwindiss.sh24
-rw-r--r--binutils-2.21/ld/emulparams/elf32rx.sh32
-rw-r--r--binutils-2.21/ld/emulparams/elf32vax.sh14
-rw-r--r--binutils-2.21/ld/emulparams/elf32xc16x.sh8
-rw-r--r--binutils-2.21/ld/emulparams/elf32xc16xl.sh8
-rw-r--r--binutils-2.21/ld/emulparams/elf32xc16xs.sh8
-rw-r--r--binutils-2.21/ld/emulparams/elf32xstormy16.sh13
-rw-r--r--binutils-2.21/ld/emulparams/elf32xtensa.sh45
-rw-r--r--binutils-2.21/ld/emulparams/elf64_aix.sh21
-rw-r--r--binutils-2.21/ld/emulparams/elf64_ia64.sh39
-rw-r--r--binutils-2.21/ld/emulparams/elf64_ia64_fbsd.sh6
-rw-r--r--binutils-2.21/ld/emulparams/elf64_s390.sh35
-rw-r--r--binutils-2.21/ld/emulparams/elf64_sparc.sh50
-rw-r--r--binutils-2.21/ld/emulparams/elf64_sparc_fbsd.sh4
-rw-r--r--binutils-2.21/ld/emulparams/elf64_sparc_sol2.sh4
-rw-r--r--binutils-2.21/ld/emulparams/elf64alpha.sh27
-rw-r--r--binutils-2.21/ld/emulparams/elf64alpha_fbsd.sh3
-rw-r--r--binutils-2.21/ld/emulparams/elf64alpha_nbsd.sh2
-rw-r--r--binutils-2.21/ld/emulparams/elf64bmip-defs.sh3
-rwxr-xr-xbinutils-2.21/ld/emulparams/elf64bmip.sh23
-rw-r--r--binutils-2.21/ld/emulparams/elf64btsmip.sh16
-rwxr-xr-xbinutils-2.21/ld/emulparams/elf64hppa.sh76
-rw-r--r--binutils-2.21/ld/emulparams/elf64lppc.sh3
-rw-r--r--binutils-2.21/ld/emulparams/elf64ltsmip.sh4
-rw-r--r--binutils-2.21/ld/emulparams/elf64mmix.sh61
-rw-r--r--binutils-2.21/ld/emulparams/elf64ppc.sh55
-rw-r--r--binutils-2.21/ld/emulparams/elf_fbsd.sh1
-rw-r--r--binutils-2.21/ld/emulparams/elf_i386.sh15
-rw-r--r--binutils-2.21/ld/emulparams/elf_i386_be.sh11
-rw-r--r--binutils-2.21/ld/emulparams/elf_i386_chaos.sh10
-rw-r--r--binutils-2.21/ld/emulparams/elf_i386_fbsd.sh3
-rw-r--r--binutils-2.21/ld/emulparams/elf_i386_ldso.sh12
-rw-r--r--binutils-2.21/ld/emulparams/elf_i386_sol2.sh4
-rw-r--r--binutils-2.21/ld/emulparams/elf_i386_vxworks.sh14
-rw-r--r--binutils-2.21/ld/emulparams/elf_l1om.sh68
-rw-r--r--binutils-2.21/ld/emulparams/elf_l1om_fbsd.sh3
-rw-r--r--binutils-2.21/ld/emulparams/elf_s390.sh13
-rw-r--r--binutils-2.21/ld/emulparams/elf_x86_64.sh38
-rw-r--r--binutils-2.21/ld/emulparams/elf_x86_64_fbsd.sh3
-rw-r--r--binutils-2.21/ld/emulparams/elf_x86_64_sol2.sh4
-rw-r--r--binutils-2.21/ld/emulparams/gld960.sh7
-rw-r--r--binutils-2.21/ld/emulparams/gld960coff.sh19
-rw-r--r--binutils-2.21/ld/emulparams/h8300.sh18
-rw-r--r--binutils-2.21/ld/emulparams/h8300elf.sh26
-rw-r--r--binutils-2.21/ld/emulparams/h8300h.sh5
-rw-r--r--binutils-2.21/ld/emulparams/h8300helf.sh3
-rw-r--r--binutils-2.21/ld/emulparams/h8300hn.sh5
-rw-r--r--binutils-2.21/ld/emulparams/h8300hnelf.sh2
-rw-r--r--binutils-2.21/ld/emulparams/h8300s.sh5
-rw-r--r--binutils-2.21/ld/emulparams/h8300self.sh3
-rw-r--r--binutils-2.21/ld/emulparams/h8300sn.sh5
-rw-r--r--binutils-2.21/ld/emulparams/h8300snelf.sh2
-rw-r--r--binutils-2.21/ld/emulparams/h8300sx.sh5
-rw-r--r--binutils-2.21/ld/emulparams/h8300sxelf.sh16
-rw-r--r--binutils-2.21/ld/emulparams/h8300sxn.sh5
-rw-r--r--binutils-2.21/ld/emulparams/h8300sxnelf.sh2
-rw-r--r--binutils-2.21/ld/emulparams/h8500.sh5
-rw-r--r--binutils-2.21/ld/emulparams/h8500b.sh5
-rw-r--r--binutils-2.21/ld/emulparams/h8500c.sh5
-rw-r--r--binutils-2.21/ld/emulparams/h8500m.sh5
-rw-r--r--binutils-2.21/ld/emulparams/h8500s.sh5
-rw-r--r--binutils-2.21/ld/emulparams/hp300bsd.sh5
-rw-r--r--binutils-2.21/ld/emulparams/hp3hpux.sh8
-rw-r--r--binutils-2.21/ld/emulparams/hppa64linux.sh52
-rw-r--r--binutils-2.21/ld/emulparams/hppaelf.sh9
-rw-r--r--binutils-2.21/ld/emulparams/hppalinux.sh23
-rw-r--r--binutils-2.21/ld/emulparams/hppanbsd.sh6
-rw-r--r--binutils-2.21/ld/emulparams/hppaobsd.sh6
-rw-r--r--binutils-2.21/ld/emulparams/i386aout.sh8
-rwxr-xr-xbinutils-2.21/ld/emulparams/i386beos.sh5
-rw-r--r--binutils-2.21/ld/emulparams/i386bsd.sh8
-rw-r--r--binutils-2.21/ld/emulparams/i386coff.sh5
-rw-r--r--binutils-2.21/ld/emulparams/i386go32.sh10
-rw-r--r--binutils-2.21/ld/emulparams/i386linux.sh9
-rw-r--r--binutils-2.21/ld/emulparams/i386lynx.sh20
-rw-r--r--binutils-2.21/ld/emulparams/i386mach.sh9
-rw-r--r--binutils-2.21/ld/emulparams/i386moss.sh10
-rw-r--r--binutils-2.21/ld/emulparams/i386msdos.sh6
-rw-r--r--binutils-2.21/ld/emulparams/i386nbsd.sh6
-rw-r--r--binutils-2.21/ld/emulparams/i386nto.sh11
-rw-r--r--binutils-2.21/ld/emulparams/i386nw.sh8
-rw-r--r--binutils-2.21/ld/emulparams/i386pe.sh9
-rw-r--r--binutils-2.21/ld/emulparams/i386pe_posix.sh10
-rw-r--r--binutils-2.21/ld/emulparams/i386pep.sh9
-rw-r--r--binutils-2.21/ld/emulparams/lnk960.sh6
-rw-r--r--binutils-2.21/ld/emulparams/m32relf.sh12
-rw-r--r--binutils-2.21/ld/emulparams/m32relf_linux.sh14
-rw-r--r--binutils-2.21/ld/emulparams/m32rlelf.sh2
-rw-r--r--binutils-2.21/ld/emulparams/m32rlelf_linux.sh2
-rw-r--r--binutils-2.21/ld/emulparams/m68hc11elf.sh18
-rw-r--r--binutils-2.21/ld/emulparams/m68hc11elfb.sh12
-rw-r--r--binutils-2.21/ld/emulparams/m68hc12elf.sh18
-rw-r--r--binutils-2.21/ld/emulparams/m68hc12elfb.sh12
-rw-r--r--binutils-2.21/ld/emulparams/m68k4knbsd.sh9
-rw-r--r--binutils-2.21/ld/emulparams/m68kaout.sh6
-rw-r--r--binutils-2.21/ld/emulparams/m68kaux.sh8
-rw-r--r--binutils-2.21/ld/emulparams/m68kcoff.sh6
-rw-r--r--binutils-2.21/ld/emulparams/m68kelf.sh14
-rw-r--r--binutils-2.21/ld/emulparams/m68kelfnbsd.sh4
-rw-r--r--binutils-2.21/ld/emulparams/m68klinux.sh9
-rw-r--r--binutils-2.21/ld/emulparams/m68knbsd.sh9
-rw-r--r--binutils-2.21/ld/emulparams/m68kpsos.sh6
-rw-r--r--binutils-2.21/ld/emulparams/m88kbcs.sh5
-rw-r--r--binutils-2.21/ld/emulparams/mcorepe.sh9
-rw-r--r--binutils-2.21/ld/emulparams/mipsbig.sh6
-rw-r--r--binutils-2.21/ld/emulparams/mipsbsd.sh7
-rw-r--r--binutils-2.21/ld/emulparams/mipsidt.sh12
-rw-r--r--binutils-2.21/ld/emulparams/mipsidtl.sh12
-rw-r--r--binutils-2.21/ld/emulparams/mipslit.sh6
-rw-r--r--binutils-2.21/ld/emulparams/mipslnews.sh9
-rw-r--r--binutils-2.21/ld/emulparams/mipspe.sh9
-rw-r--r--binutils-2.21/ld/emulparams/mmo.sh11
-rw-r--r--binutils-2.21/ld/emulparams/mn10200.sh24
-rw-r--r--binutils-2.21/ld/emulparams/mn10300.sh6
-rw-r--r--binutils-2.21/ld/emulparams/msp430all.sh553
-rw-r--r--binutils-2.21/ld/emulparams/news.sh5
-rw-r--r--binutils-2.21/ld/emulparams/ns32knbsd.sh10
-rw-r--r--binutils-2.21/ld/emulparams/or32.sh5
-rw-r--r--binutils-2.21/ld/emulparams/or32elf.sh9
-rw-r--r--binutils-2.21/ld/emulparams/pc532macha.sh8
-rw-r--r--binutils-2.21/ld/emulparams/pdp11.sh5
-rw-r--r--binutils-2.21/ld/emulparams/pjelf.sh8
-rw-r--r--binutils-2.21/ld/emulparams/pjlelf.sh2
-rw-r--r--binutils-2.21/ld/emulparams/ppclynx.sh23
-rw-r--r--binutils-2.21/ld/emulparams/ppcmacos.sh6
-rw-r--r--binutils-2.21/ld/emulparams/ppcnw.sh6
-rw-r--r--binutils-2.21/ld/emulparams/ppcpe.sh7
-rw-r--r--binutils-2.21/ld/emulparams/riscix.sh5
-rw-r--r--binutils-2.21/ld/emulparams/scoreelf.sh41
-rw-r--r--binutils-2.21/ld/emulparams/sh.sh8
-rw-r--r--binutils-2.21/ld/emulparams/shelf.sh34
-rw-r--r--binutils-2.21/ld/emulparams/shelf32.sh59
-rw-r--r--binutils-2.21/ld/emulparams/shelf32_linux.sh2
-rw-r--r--binutils-2.21/ld/emulparams/shelf32_nbsd.sh17
-rw-r--r--binutils-2.21/ld/emulparams/shelf64.sh18
-rw-r--r--binutils-2.21/ld/emulparams/shelf64_nbsd.sh8
-rw-r--r--binutils-2.21/ld/emulparams/shelf_fd.sh2
-rw-r--r--binutils-2.21/ld/emulparams/shelf_linux.sh2
-rw-r--r--binutils-2.21/ld/emulparams/shelf_nbsd.sh15
-rw-r--r--binutils-2.21/ld/emulparams/shelf_nto.sh11
-rw-r--r--binutils-2.21/ld/emulparams/shelf_uclinux.sh4
-rw-r--r--binutils-2.21/ld/emulparams/shelf_vxworks.sh20
-rw-r--r--binutils-2.21/ld/emulparams/shl.sh2
-rw-r--r--binutils-2.21/ld/emulparams/shlelf.sh2
-rw-r--r--binutils-2.21/ld/emulparams/shlelf32.sh2
-rw-r--r--binutils-2.21/ld/emulparams/shlelf32_linux.sh44
-rw-r--r--binutils-2.21/ld/emulparams/shlelf32_nbsd.sh3
-rw-r--r--binutils-2.21/ld/emulparams/shlelf64.sh2
-rw-r--r--binutils-2.21/ld/emulparams/shlelf64_nbsd.sh3
-rw-r--r--binutils-2.21/ld/emulparams/shlelf_fd.sh16
-rw-r--r--binutils-2.21/ld/emulparams/shlelf_linux.sh19
-rw-r--r--binutils-2.21/ld/emulparams/shlelf_nbsd.sh3
-rw-r--r--binutils-2.21/ld/emulparams/shlelf_nto.sh11
-rw-r--r--binutils-2.21/ld/emulparams/shlelf_vxworks.sh2
-rw-r--r--binutils-2.21/ld/emulparams/shlsymbian.sh17
-rw-r--r--binutils-2.21/ld/emulparams/shpe.sh7
-rw-r--r--binutils-2.21/ld/emulparams/solaris2.sh10
-rw-r--r--binutils-2.21/ld/emulparams/sparcaout.sh10
-rw-r--r--binutils-2.21/ld/emulparams/sparclinux.sh9
-rw-r--r--binutils-2.21/ld/emulparams/sparcnbsd.sh5
-rw-r--r--binutils-2.21/ld/emulparams/st2000.sh5
-rw-r--r--binutils-2.21/ld/emulparams/sun3.sh10
-rw-r--r--binutils-2.21/ld/emulparams/sun4.sh7
-rw-r--r--binutils-2.21/ld/emulparams/tic30aout.sh7
-rw-r--r--binutils-2.21/ld/emulparams/tic30coff.sh7
-rw-r--r--binutils-2.21/ld/emulparams/tic3xcoff.sh6
-rw-r--r--binutils-2.21/ld/emulparams/tic3xcoff_onchip.sh8
-rw-r--r--binutils-2.21/ld/emulparams/tic4xcoff.sh6
-rw-r--r--binutils-2.21/ld/emulparams/tic54xcoff.sh8
-rw-r--r--binutils-2.21/ld/emulparams/tic80coff.sh50
-rw-r--r--binutils-2.21/ld/emulparams/v850.sh15
-rw-r--r--binutils-2.21/ld/emulparams/vanilla.sh5
-rw-r--r--binutils-2.21/ld/emulparams/vax.sh5
-rw-r--r--binutils-2.21/ld/emulparams/vaxnbsd.sh6
-rw-r--r--binutils-2.21/ld/emulparams/vsta.sh10
-rw-r--r--binutils-2.21/ld/emulparams/vxworks.sh48
-rw-r--r--binutils-2.21/ld/emulparams/w65.sh5
-rw-r--r--binutils-2.21/ld/emulparams/z80.sh6
-rw-r--r--binutils-2.21/ld/emulparams/z8001.sh7
-rw-r--r--binutils-2.21/ld/emulparams/z8002.sh6
-rw-r--r--binutils-2.21/ld/emultempl/README3
-rw-r--r--binutils-2.21/ld/emultempl/aix.em1472
-rw-r--r--binutils-2.21/ld/emultempl/alphaelf.em148
-rw-r--r--binutils-2.21/ld/emultempl/armcoff.em283
-rw-r--r--binutils-2.21/ld/emultempl/armelf.em684
-rw-r--r--binutils-2.21/ld/emultempl/astring.sed13
-rw-r--r--binutils-2.21/ld/emultempl/avrelf.em265
-rw-r--r--binutils-2.21/ld/emultempl/beos.em783
-rw-r--r--binutils-2.21/ld/emultempl/cr16elf.em183
-rw-r--r--binutils-2.21/ld/emultempl/crxelf.em71
-rw-r--r--binutils-2.21/ld/emultempl/elf-generic.em73
-rw-r--r--binutils-2.21/ld/emultempl/elf32.em2495
-rw-r--r--binutils-2.21/ld/emultempl/genelf.em69
-rw-r--r--binutils-2.21/ld/emultempl/generic.em149
-rw-r--r--binutils-2.21/ld/emultempl/gld960.em154
-rw-r--r--binutils-2.21/ld/emultempl/gld960c.em167
-rw-r--r--binutils-2.21/ld/emultempl/hppaelf.em380
-rw-r--r--binutils-2.21/ld/emultempl/ia64elf.em65
-rw-r--r--binutils-2.21/ld/emultempl/irix.em44
-rw-r--r--binutils-2.21/ld/emultempl/linux.em211
-rw-r--r--binutils-2.21/ld/emultempl/lnk960.em290
-rw-r--r--binutils-2.21/ld/emultempl/m68hc1xelf.em373
-rw-r--r--binutils-2.21/ld/emultempl/m68kcoff.em243
-rw-r--r--binutils-2.21/ld/emultempl/m68kelf.em250
-rw-r--r--binutils-2.21/ld/emultempl/mipsecoff.em38
-rw-r--r--binutils-2.21/ld/emultempl/mipself.em241
-rw-r--r--binutils-2.21/ld/emultempl/mmix-elfnmmo.em116
-rw-r--r--binutils-2.21/ld/emultempl/mmixelf.em44
-rw-r--r--binutils-2.21/ld/emultempl/mmo.em158
-rw-r--r--binutils-2.21/ld/emultempl/needrelax.em39
-rw-r--r--binutils-2.21/ld/emultempl/netbsd.em34
-rw-r--r--binutils-2.21/ld/emultempl/ostring.sed4
-rw-r--r--binutils-2.21/ld/emultempl/pe.em2217
-rw-r--r--binutils-2.21/ld/emultempl/pep.em1955
-rw-r--r--binutils-2.21/ld/emultempl/ppc32elf.em244
-rw-r--r--binutils-2.21/ld/emultempl/ppc64elf.em791
-rw-r--r--binutils-2.21/ld/emultempl/rxelf.em64
-rw-r--r--binutils-2.21/ld/emultempl/scoreelf.em77
-rw-r--r--binutils-2.21/ld/emultempl/sh64elf.em561
-rw-r--r--binutils-2.21/ld/emultempl/solaris2.em154
-rw-r--r--binutils-2.21/ld/emultempl/spu_icache.S7
-rw-r--r--binutils-2.21/ld/emultempl/spu_icache.o_c33
-rw-r--r--binutils-2.21/ld/emultempl/spu_ovl.S471
-rw-r--r--binutils-2.21/ld/emultempl/spu_ovl.o_c101
-rw-r--r--binutils-2.21/ld/emultempl/spuelf.em824
-rw-r--r--binutils-2.21/ld/emultempl/sunos.em1037
-rw-r--r--binutils-2.21/ld/emultempl/ticoff.em186
-rw-r--r--binutils-2.21/ld/emultempl/vanilla.em87
-rw-r--r--binutils-2.21/ld/emultempl/vms.em126
-rw-r--r--binutils-2.21/ld/emultempl/vxworks.em102
-rw-r--r--binutils-2.21/ld/emultempl/xtensaelf.em1960
-rw-r--r--binutils-2.21/ld/emultempl/z80.em102
-rw-r--r--binutils-2.21/ld/fdl.texi505
-rw-r--r--binutils-2.21/ld/gen-doc.texi26
-rw-r--r--binutils-2.21/ld/genscrba.sh16
-rwxr-xr-xbinutils-2.21/ld/genscripts.sh451
-rw-r--r--binutils-2.21/ld/h8-doc.texi14
-rw-r--r--binutils-2.21/ld/ld.h338
-rw-r--r--binutils-2.21/ld/ld.texinfo7699
-rw-r--r--binutils-2.21/ld/ldcref.c691
-rw-r--r--binutils-2.21/ld/ldctor.c376
-rw-r--r--binutils-2.21/ld/ldctor.h60
-rw-r--r--binutils-2.21/ld/ldemul.c352
-rw-r--r--binutils-2.21/ld/ldemul.h209
-rw-r--r--binutils-2.21/ld/ldexp.c1218
-rw-r--r--binutils-2.21/ld/ldexp.h201
-rw-r--r--binutils-2.21/ld/ldfile.c723
-rw-r--r--binutils-2.21/ld/ldfile.h65
-rw-r--r--binutils-2.21/ld/ldgram.c4495
-rw-r--r--binutils-2.21/ld/ldgram.h331
-rw-r--r--binutils-2.21/ld/ldgram.y1357
-rw-r--r--binutils-2.21/ld/ldint.texinfo704
-rw-r--r--binutils-2.21/ld/ldlang.c7855
-rw-r--r--binutils-2.21/ld/ldlang.h653
-rw-r--r--binutils-2.21/ld/ldlex-wrapper.c6
-rw-r--r--binutils-2.21/ld/ldlex.c4215
-rw-r--r--binutils-2.21/ld/ldlex.h64
-rw-r--r--binutils-2.21/ld/ldlex.l693
-rw-r--r--binutils-2.21/ld/ldmain.c1485
-rw-r--r--binutils-2.21/ld/ldmain.h49
-rw-r--r--binutils-2.21/ld/ldmisc.c507
-rw-r--r--binutils-2.21/ld/ldmisc.h45
-rw-r--r--binutils-2.21/ld/ldver.c61
-rw-r--r--binutils-2.21/ld/ldver.h22
-rw-r--r--binutils-2.21/ld/ldwrite.c592
-rw-r--r--binutils-2.21/ld/ldwrite.h21
-rw-r--r--binutils-2.21/ld/lexsup.c1734
-rw-r--r--binutils-2.21/ld/mri.c317
-rw-r--r--binutils-2.21/ld/mri.h38
-rw-r--r--binutils-2.21/ld/pe-dll.c3272
-rw-r--r--binutils-2.21/ld/pe-dll.h74
-rw-r--r--binutils-2.21/ld/pep-dll.c66
-rw-r--r--binutils-2.21/ld/pep-dll.h61
-rw-r--r--binutils-2.21/ld/plugin.c889
-rw-r--r--binutils-2.21/ld/plugin.h74
-rw-r--r--binutils-2.21/ld/po/Make-in258
-rw-r--r--binutils-2.21/ld/po/POTFILES.in35
-rw-r--r--binutils-2.21/ld/po/bg.gmobin0 -> 71843 bytes
-rw-r--r--binutils-2.21/ld/po/bg.po2231
-rw-r--r--binutils-2.21/ld/po/da.gmobin0 -> 40607 bytes
-rw-r--r--binutils-2.21/ld/po/da.po1702
-rw-r--r--binutils-2.21/ld/po/es.gmobin0 -> 57540 bytes
-rw-r--r--binutils-2.21/ld/po/es.po2354
-rw-r--r--binutils-2.21/ld/po/fi.gmobin0 -> 57441 bytes
-rw-r--r--binutils-2.21/ld/po/fi.po2268
-rw-r--r--binutils-2.21/ld/po/fr.gmobin0 -> 51807 bytes
-rw-r--r--binutils-2.21/ld/po/fr.po2071
-rw-r--r--binutils-2.21/ld/po/ga.gmobin0 -> 48922 bytes
-rw-r--r--binutils-2.21/ld/po/ga.po1998
-rw-r--r--binutils-2.21/ld/po/id.gmobin0 -> 53562 bytes
-rw-r--r--binutils-2.21/ld/po/id.po2155
-rw-r--r--binutils-2.21/ld/po/ja.gmobin0 -> 32271 bytes
-rw-r--r--binutils-2.21/ld/po/ja.po2209
-rw-r--r--binutils-2.21/ld/po/ld.pot2231
-rw-r--r--binutils-2.21/ld/po/sv.gmobin0 -> 43131 bytes
-rw-r--r--binutils-2.21/ld/po/sv.po1815
-rw-r--r--binutils-2.21/ld/po/tr.gmobin0 -> 41339 bytes
-rw-r--r--binutils-2.21/ld/po/tr.po2001
-rw-r--r--binutils-2.21/ld/po/vi.gmobin0 -> 59341 bytes
-rw-r--r--binutils-2.21/ld/po/vi.po2154
-rw-r--r--binutils-2.21/ld/po/zh_CN.gmobin0 -> 24785 bytes
-rw-r--r--binutils-2.21/ld/po/zh_CN.po1942
-rw-r--r--binutils-2.21/ld/po/zh_TW.gmobin0 -> 44839 bytes
-rw-r--r--binutils-2.21/ld/po/zh_TW.po1913
-rw-r--r--binutils-2.21/ld/scripttempl/README4
-rw-r--r--binutils-2.21/ld/scripttempl/aix.sc62
-rw-r--r--binutils-2.21/ld/scripttempl/alpha.sc74
-rw-r--r--binutils-2.21/ld/scripttempl/alphavms.sc49
-rw-r--r--binutils-2.21/ld/scripttempl/aout.sc57
-rw-r--r--binutils-2.21/ld/scripttempl/armaout.sc35
-rw-r--r--binutils-2.21/ld/scripttempl/armbpabi.sc430
-rw-r--r--binutils-2.21/ld/scripttempl/armcoff.sc84
-rw-r--r--binutils-2.21/ld/scripttempl/avr.sc234
-rw-r--r--binutils-2.21/ld/scripttempl/crisaout.sc133
-rw-r--r--binutils-2.21/ld/scripttempl/delta68.sc49
-rw-r--r--binutils-2.21/ld/scripttempl/dlx.sc30
-rw-r--r--binutils-2.21/ld/scripttempl/elf.sc613
-rw-r--r--binutils-2.21/ld/scripttempl/elf32cr16.sc169
-rw-r--r--binutils-2.21/ld/scripttempl/elf32cr16c.sc45
-rw-r--r--binutils-2.21/ld/scripttempl/elf32crx.sc171
-rw-r--r--binutils-2.21/ld/scripttempl/elf32msp430.sc249
-rw-r--r--binutils-2.21/ld/scripttempl/elf32msp430_3.sc192
-rw-r--r--binutils-2.21/ld/scripttempl/elf32sh-symbian.sc387
-rw-r--r--binutils-2.21/ld/scripttempl/elf32xc16x.sc61
-rw-r--r--binutils-2.21/ld/scripttempl/elf32xc16xl.sc64
-rw-r--r--binutils-2.21/ld/scripttempl/elf32xc16xs.sc64
-rw-r--r--binutils-2.21/ld/scripttempl/elf64hppa.sc576
-rw-r--r--binutils-2.21/ld/scripttempl/elf_chaos.sc358
-rw-r--r--binutils-2.21/ld/scripttempl/elfd10v.sc198
-rw-r--r--binutils-2.21/ld/scripttempl/elfd30v.sc225
-rw-r--r--binutils-2.21/ld/scripttempl/elfi370.sc220
-rw-r--r--binutils-2.21/ld/scripttempl/elfm68hc11.sc460
-rw-r--r--binutils-2.21/ld/scripttempl/elfm68hc12.sc463
-rw-r--r--binutils-2.21/ld/scripttempl/elfmicroblaze.sc222
-rw-r--r--binutils-2.21/ld/scripttempl/elfxtensa.sc586
-rw-r--r--binutils-2.21/ld/scripttempl/epocpe.sc152
-rw-r--r--binutils-2.21/ld/scripttempl/h8300.sc94
-rw-r--r--binutils-2.21/ld/scripttempl/h8300h.sc97
-rw-r--r--binutils-2.21/ld/scripttempl/h8300hn.sc87
-rw-r--r--binutils-2.21/ld/scripttempl/h8300s.sc97
-rw-r--r--binutils-2.21/ld/scripttempl/h8300sn.sc87
-rw-r--r--binutils-2.21/ld/scripttempl/h8300sx.sc97
-rw-r--r--binutils-2.21/ld/scripttempl/h8300sxn.sc87
-rw-r--r--binutils-2.21/ld/scripttempl/h8500.sc61
-rw-r--r--binutils-2.21/ld/scripttempl/h8500b.sc61
-rw-r--r--binutils-2.21/ld/scripttempl/h8500c.sc61
-rw-r--r--binutils-2.21/ld/scripttempl/h8500m.sc61
-rw-r--r--binutils-2.21/ld/scripttempl/h8500s.sc61
-rw-r--r--binutils-2.21/ld/scripttempl/hppaelf.sc38
-rw-r--r--binutils-2.21/ld/scripttempl/i386beos.sc194
-rw-r--r--binutils-2.21/ld/scripttempl/i386coff.sc43
-rw-r--r--binutils-2.21/ld/scripttempl/i386go32.sc79
-rw-r--r--binutils-2.21/ld/scripttempl/i386msdos.sc38
-rw-r--r--binutils-2.21/ld/scripttempl/i860coff.sc42
-rw-r--r--binutils-2.21/ld/scripttempl/i960.sc25
-rw-r--r--binutils-2.21/ld/scripttempl/ip2k.sc150
-rw-r--r--binutils-2.21/ld/scripttempl/iq2000.sc444
-rw-r--r--binutils-2.21/ld/scripttempl/m68kaux.sc46
-rw-r--r--binutils-2.21/ld/scripttempl/m68kcoff.sc42
-rw-r--r--binutils-2.21/ld/scripttempl/m88kbcs.sc49
-rw-r--r--binutils-2.21/ld/scripttempl/mcorepe.sc163
-rw-r--r--binutils-2.21/ld/scripttempl/mep.sc444
-rw-r--r--binutils-2.21/ld/scripttempl/mips.sc69
-rw-r--r--binutils-2.21/ld/scripttempl/mipsbsd.sc30
-rw-r--r--binutils-2.21/ld/scripttempl/mmo.sc137
-rw-r--r--binutils-2.21/ld/scripttempl/moxie.sc52
-rw-r--r--binutils-2.21/ld/scripttempl/nw.sc130
-rw-r--r--binutils-2.21/ld/scripttempl/or32.sc37
-rw-r--r--binutils-2.21/ld/scripttempl/pe.sc304
-rw-r--r--binutils-2.21/ld/scripttempl/pep.sc310
-rw-r--r--binutils-2.21/ld/scripttempl/pj.sc55
-rw-r--r--binutils-2.21/ld/scripttempl/ppcpe.sc199
-rw-r--r--binutils-2.21/ld/scripttempl/psos.sc61
-rw-r--r--binutils-2.21/ld/scripttempl/riscix.sc35
-rw-r--r--binutils-2.21/ld/scripttempl/sh.sc64
-rw-r--r--binutils-2.21/ld/scripttempl/sparccoff.sc48
-rw-r--r--binutils-2.21/ld/scripttempl/st2000.sc26
-rw-r--r--binutils-2.21/ld/scripttempl/tic30aout.sc34
-rw-r--r--binutils-2.21/ld/scripttempl/tic30coff.sc58
-rw-r--r--binutils-2.21/ld/scripttempl/tic4xcoff.sc151
-rw-r--r--binutils-2.21/ld/scripttempl/tic54xcoff.sc52
-rw-r--r--binutils-2.21/ld/scripttempl/tic80coff.sc74
-rw-r--r--binutils-2.21/ld/scripttempl/v850.sc231
-rw-r--r--binutils-2.21/ld/scripttempl/vanilla.sc1
-rw-r--r--binutils-2.21/ld/scripttempl/w65.sc65
-rw-r--r--binutils-2.21/ld/scripttempl/xstormy16.sc241
-rw-r--r--binutils-2.21/ld/scripttempl/z80.sc35
-rw-r--r--binutils-2.21/ld/scripttempl/z8000.sc57
-rw-r--r--binutils-2.21/ld/stamp-h.in1
-rw-r--r--binutils-2.21/ld/sysdep.h140
-rw-r--r--binutils-2.21/ld/testplug.c617
-rw-r--r--binutils-2.21/ld/testsuite/ChangeLog1101
-rw-r--r--binutils-2.21/ld/testsuite/ChangeLog-20041085
-rw-r--r--binutils-2.21/ld/testsuite/ChangeLog-20051189
-rw-r--r--binutils-2.21/ld/testsuite/ChangeLog-20061285
-rw-r--r--binutils-2.21/ld/testsuite/ChangeLog-20071206
-rw-r--r--binutils-2.21/ld/testsuite/ChangeLog-20081010
-rw-r--r--binutils-2.21/ld/testsuite/ChangeLog-20091743
-rw-r--r--binutils-2.21/ld/testsuite/ChangeLog-93033376
-rw-r--r--binutils-2.21/ld/testsuite/config/default.exp278
-rw-r--r--binutils-2.21/ld/testsuite/ld-alpha/align.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-alpha/alpha.exp64
-rw-r--r--binutils-2.21/ld/testsuite/ld-alpha/tlsbin.dd62
-rw-r--r--binutils-2.21/ld/testsuite/ld-alpha/tlsbin.rd133
-rw-r--r--binutils-2.21/ld/testsuite/ld-alpha/tlsbin.s46
-rw-r--r--binutils-2.21/ld/testsuite/ld-alpha/tlsbin.sd17
-rw-r--r--binutils-2.21/ld/testsuite/ld-alpha/tlsbin.td17
-rw-r--r--binutils-2.21/ld/testsuite/ld-alpha/tlsbinpic.s74
-rw-r--r--binutils-2.21/ld/testsuite/ld-alpha/tlsbinr.dd62
-rw-r--r--binutils-2.21/ld/testsuite/ld-alpha/tlsbinr.rd128
-rw-r--r--binutils-2.21/ld/testsuite/ld-alpha/tlsbinr.sd12
-rw-r--r--binutils-2.21/ld/testsuite/ld-alpha/tlsg.s14
-rw-r--r--binutils-2.21/ld/testsuite/ld-alpha/tlsg.sd10
-rw-r--r--binutils-2.21/ld/testsuite/ld-alpha/tlslib.s19
-rw-r--r--binutils-2.21/ld/testsuite/ld-alpha/tlspic.dd56
-rw-r--r--binutils-2.21/ld/testsuite/ld-alpha/tlspic.rd128
-rw-r--r--binutils-2.21/ld/testsuite/ld-alpha/tlspic.sd17
-rw-r--r--binutils-2.21/ld/testsuite/ld-alpha/tlspic.td17
-rw-r--r--binutils-2.21/ld/testsuite/ld-alpha/tlspic1.s87
-rw-r--r--binutils-2.21/ld/testsuite/ld-alpha/tlspic2.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arch-v6.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arch-v6k.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arch-v6t2.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-app-abs32.d29
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-app-abs32.r8
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-app-abs32.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-app-movw.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-app.d35
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-app.r9
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-app.s23
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-be8.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-be8.s14
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-call.d58
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-call1.s30
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-call2.s24
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-dyn.ld194
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-elf.exp547
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-lib-plt32.d28
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-lib-plt32.r8
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-lib-plt32.s17
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-lib.d28
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-lib.ld187
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-lib.r8
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-lib.s24
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-movwt.d39
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-movwt.s44
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-pic-veneer.d17
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-pic-veneer.s14
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-rel31.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-rel31.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-static-app.d24
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-static-app.r3
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-static-app.s20
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-target1-abs.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-target1-rel.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-target1.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-target2-abs.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-target2-got-rel.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-target2-rel.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm-target2.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/arm.ld23
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/armthumb-lib.d44
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/armthumb-lib.sym15
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/armv4-bx.d19
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/armv4-bx.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-2.attr15
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-2a.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-2b.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-3.attr31
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-3a.s39
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-3b.s39
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-4.attr9
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-4a.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-4b.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-5.attr6
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-5.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-6.attr10
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-6a.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-6b.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-7.attr10
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-7a.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-7b.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-arch-1.attr7
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-arch-2.attr8
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-incompatible.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-incompatiblea.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-incompatibleb.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-unknown-1.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-unknown-1.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-unknown-2.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-unknown-2.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-unknown-2r.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-unknown-3.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-1.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-1r.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-2.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-2.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-2r.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-3-d16.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-3.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-3.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-3r.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-4-d16.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-4.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-4.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-4r.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-5.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-5r.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-6.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-6r.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfpv3xd.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-0.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-00-nowarn.d22
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-00.d22
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-02-nowarn.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-02.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-04-nowarn.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-04.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-2.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-20-nowarn.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-20.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-22-nowarn.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-22.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-24-nowarn.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-24.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-4.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-40-nowarn.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-40.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-42-nowarn.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-42.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-44-nowarn.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-44.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge.attr15
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/attr-merge.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/blank.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/callweak-2.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/callweak-2.s17
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/callweak.d17
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/callweak.s17
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-arm-target.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-far-1.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-far-2.s20
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-far.d40
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b-plt.d30
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b-plt.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b-rel-arm.d83
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b-rel-thumb.d80
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b-rel.s41
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b.d75
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b.s39
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bcc-plt.d32
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bcc-plt.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bcc-rel-thumb.d82
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bcc-rel.s38
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bcc.d77
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bcc.s39
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl-plt.d28
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl-plt.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl-rel-arm.d79
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl-rel-plt.d92
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl-rel-thumb.d80
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl-rel.s40
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl.d75
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl.s39
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-bcond.d1107
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-bcond.s81
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-plt.d28
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-plt.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-rel-arm.d79
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-rel-thumb.d80
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-rel.s38
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx.d79
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx.s44
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-hdr.d24
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-hdr.s14
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-hdr.t10
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-plt.ld18
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/cortex-a8-thumb-target.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/data-only-map.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/data-only-map.ld16
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/data-only-map.s20
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/discard-unwind.ld19
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/emit-relocs1-vxworks.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/emit-relocs1.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/emit-relocs1.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-arm-arm-pic-veneer.d17
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-arm-arm.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-arm-arm.s20
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-arm-thumb-blx-pic-veneer.d17
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-arm-thumb-blx.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-arm-thumb-pic-veneer.d17
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-arm-thumb.d17
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-arm-thumb.s20
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-data.d19
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-data.s14
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-group-limit.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-group-size2.d57
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-group.d56
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-group.s44
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-group2.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-group3.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-group4.s13
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-mix.d51
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-mix.s46
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-mix2.d56
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-mix2.s51
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-app-v5.d85
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-app.d90
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-app.r10
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-app.s61
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-app.sym15
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-lib-v4t.d123
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-lib.d92
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-lib.r8
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-lib1.s34
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-lib2.s18
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-section.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-section.s20
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm-blx-pic-veneer.d18
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm-blx.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm-pic-veneer.d20
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm-short.d17
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm-short.s21
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm.s27
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb-blx-pic-veneer.d18
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb-blx.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb-m-pic-veneer.d22
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb-m.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb-pic-veneer.d22
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb.d19
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb.s19
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/gc-unwind.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/gc-unwind.s38
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/group-relocs-alu-bad.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/group-relocs-alu-bad.s20
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/group-relocs-ldc-bad.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/group-relocs-ldc-bad.s19
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/group-relocs-ldr-bad.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/group-relocs-ldr-bad.s18
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/group-relocs-ldrs-bad.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/group-relocs-ldrs-bad.s17
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/group-relocs.d69
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/group-relocs.s156
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/jump-reloc-veneers-long.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/jump-reloc-veneers-short1.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/jump-reloc-veneers-short2.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/jump-reloc-veneers.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/jump19.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/jump19.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/mixed-app-v5.d56
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/mixed-app.d58
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/mixed-app.r10
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/mixed-app.s39
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/mixed-app.sym15
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/mixed-lib.d38
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/mixed-lib.r8
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/mixed-lib.s28
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/mixed-lib.sym15
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/movw-merge.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/movw-merge.s20
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/movw-shared-1.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/movw-shared-1.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/movw-shared-2.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/movw-shared-2.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/movw-shared-3.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/movw-shared-3.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/movw-shared-4.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/movw-shared-4.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/preempt-app.s27
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/preempt-app.sym14
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/reloc-boundaries.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/reloc-boundaries.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/script-type.ld9
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/script-type.s20
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/script-type.sym16
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/symbian-seg1.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/symbian-seg1.s13
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/thumb-entry.d3
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/thumb-entry.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/thumb-rel32.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/thumb-rel32.s18
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/thumb1-bl.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/thumb1-bl.s22
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/thumb2-b-interwork.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/thumb2-b-interwork.s20
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-as-thumb1-bad-noeabi.d22
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-as-thumb1-bad.d17
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-as-thumb1-bad.s22
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-bad-noeabi.d22
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-bad.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-bad.s22
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-blx-interwork.d71
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-blx-interwork.s87
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-undefweak.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-undefweak.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-undefweak1.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-undefweak1.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/thumb2-bl.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/thumb2-bl.s23
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/tls-app.d18
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/tls-app.r10
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/tls-app.s34
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/tls-lib.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/tls-lib.r10
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/tls-lib.s22
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/unwind-1.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/unwind-1.s19
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/unwind-2.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/unwind-2.s19
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/unwind-3.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/unwind-3.s29
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/unwind-4.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/unwind-4.s49
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/unwind-5.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/unwind-5.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/use-thumb-lib.s25
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/use-thumb-lib.sym4
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/vfp11-fix-none.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/vfp11-fix-none.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/vfp11-fix-scalar.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/vfp11-fix-scalar.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/vfp11-fix-vector.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/vfp11-fix-vector.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/vxworks1-lib.dd41
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/vxworks1-lib.nd9
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/vxworks1-lib.rd12
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/vxworks1-lib.s36
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/vxworks1-lib.td3
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/vxworks1-static.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/vxworks1.dd37
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/vxworks1.ld30
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/vxworks1.rd19
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/vxworks1.s14
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/vxworks2-static.sd9
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/vxworks2.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-arm/vxworks2.sd13
-rw-r--r--binutils-2.21/ld/testsuite/ld-auto-import/auto-import.exp177
-rw-r--r--binutils-2.21/ld/testsuite/ld-auto-import/client.c60
-rw-r--r--binutils-2.21/ld/testsuite/ld-auto-import/dll.c20
-rw-r--r--binutils-2.21/ld/testsuite/ld-bootstrap/bootstrap.exp210
-rw-r--r--binutils-2.21/ld/testsuite/ld-cdtest/cdtest-bar.cc17
-rw-r--r--binutils-2.21/ld/testsuite/ld-cdtest/cdtest-foo.cc89
-rw-r--r--binutils-2.21/ld/testsuite/ld-cdtest/cdtest-foo.h24
-rw-r--r--binutils-2.21/ld/testsuite/ld-cdtest/cdtest-main.cc40
-rw-r--r--binutils-2.21/ld/testsuite/ld-cdtest/cdtest-nrv.dat13
-rw-r--r--binutils-2.21/ld/testsuite/ld-cdtest/cdtest.dat15
-rw-r--r--binutils-2.21/ld/testsuite/ld-cdtest/cdtest.exp127
-rw-r--r--binutils-2.21/ld/testsuite/ld-checks/asm.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-checks/checks.exp81
-rw-r--r--binutils-2.21/ld/testsuite/ld-checks/script6
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/badgotr1.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/comref1.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/cris.exp56
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/def2.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/def3.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/dso-1.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/dso-1b.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/dso-2.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/dso-3.s20
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/dso12-pltdis.d54
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/dsofnf.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/dsofnf2.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/dsov32-1.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/dsov32-2.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/dsov32-3.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/dsov32-4.s14
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/euwref1.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/expalltst31
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/expdref1.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/expdref2.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/expdref3.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/expdref4.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/expdyn1.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/expdyn1.s18
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/expdyn1w.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/expdyn2.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/expdyn2.s21
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/expdyn3.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/expdyn4.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/expdyn5.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/expdyn6.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/expdyn7.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/globsym1ref.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/globsymw1.s15
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/globsymw2.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/got7.s21
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/gotplt1.d48
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/gotplt2.d37
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/gotplt3.d35
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/gotrel1.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/gotrel2.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/hiddef1.d28
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/hiddef1.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/hide11
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/hidedsofns24681
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/hidrefgotplt1.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/init.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/ldsym1.d20
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/libdso-1.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/libdso-10.d37
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/libdso-11.d27
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/libdso-12.d51
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/libdso-12b.d50
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/libdso-12c.d41
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/libdso-13.d30
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/libdso-13b.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/libdso-14.d19
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/libdso-15.d24
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/libdso-15b.d38
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/libdso-1b.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/libdso-1c.d35
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/libdso-1d.d36
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/libdso-2.d58
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/libdso-3.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/libdso-4.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/locref1.d22
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/locref1.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/locref2.d22
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/locref2.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/move-1.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/nodyn4.d19
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/nodyn5.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/noglob1.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/noglob1.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/noov.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/noov.s14
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/pcrelcp-1.d34
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/pcrelcp-1.s50
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/pic-gc-72.d28
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/pic-gc-72.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/pic-gc-73.d26
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/pic-gc-73.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/pv32-1.d40
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/pv32.s24
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/stabs1.s26
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/start1.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-commx.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-dso-dtpoffd2.d37
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-dso-dtpoffd4.d37
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-dso-x1x2-1.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-dso-xz-1.d18
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-dtpoffdx.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-dtprelm.s26
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-e-20.d71
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-e-20a.d110
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-e-21.d39
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-e-22.d39
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-e-23.d38
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-e-66.d37
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-e-80.d88
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-e-dtpoffd1.d32
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-e-dtpoffd3.d32
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-e-tpoffcomm1.d45
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-e-tpoffcomm1.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-20x.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-24.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-25.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-26.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-27.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-28.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-29.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-31.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-33.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-35.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-37.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-39.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-40.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-41.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-43.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-44.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-45.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-47.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-48.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-49.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-51.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-52.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-53.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-55.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-55.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-56.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-56.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-62.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-62.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-65.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-67.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-err-77.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-gc-68.d33
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-gc-69.d34
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-gc-70.d34
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-gc-71.d32
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-gc-71.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-gc-75.d36
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-gc-76.d38
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-gc-76.s23
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-gc-79.d34
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-gd-1.d54
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-gd-1.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-gd-1h.d50
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-gd-2.d54
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-gd-2.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-gd-2h.d50
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-gd-3.d39
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-gd-3.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-gd-3h.d39
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-gdgotrelm.s28
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-global-74.d28
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-gottprelm.s28
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-hx.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-hx1x2.s15
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ie-10.d54
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ie-10.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ie-11.d60
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ie-11.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ie-78.d44
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ie-8.d54
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ie-8.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ie-8e.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ie-8e1.d42
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ie-9.d60
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ie-9.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-js1.d32
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ld-4.d50
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ld-4.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ld-5.d51
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ld-5.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ld-6.d50
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ld-6.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ld-7.d51
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ld-7.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ldgd-14.d71
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ldgd-14.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ldgd-15.d72
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ldgd-15.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ldgde-14.d61
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ldgde-15.d61
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ldgdex-14.d54
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ldgdex-15.d54
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ldgdx-14.d55
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ldgdx-15.d56
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-le-12.d38
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-le-12.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-le-12s.d38
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-le-12s.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-le-13.d41
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-le-13.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-le-13s.d40
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-le-13s.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-legd-16.d59
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-legd-16.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-legd-17.d58
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-legdx-16.d52
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-legdx-17.d54
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-leie-18.d47
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-leie-19.d58
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-leie-19.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-local-54.d27
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-local-54.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-local-57.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-local-57.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-local-58.d24
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-local-58.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-local-59.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-local-59.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-local-60.d33
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-local-61.d32
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-local-63.d31
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-local-64.d37
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ok-30.d29
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ok-32.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ok-34.d28
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-ok-36.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-tbss64.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-tprelm.s26
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-und-38.d27
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-und-42.d26
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-und-46.d27
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-und-50.d26
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-x.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-x1x2.s13
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls-z.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls128.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/tls128g.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/undef1.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/undef2.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/undef3.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/v10-v32.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/v10-va.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/v32-ba-1.d20
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/v32-ba-1.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/v32-bin-1.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/v32-bin-1.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/v32-v10.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/v32-va.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/va-v10.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/va-v32.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/warn1.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/warn2.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/warn3.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/warn4.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/weakhid.s13
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/weakhiddso.d31
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/weakref1.d17
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/weakref2.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/weakref3.d36
-rw-r--r--binutils-2.21/ld/testsuite/ld-cris/weakref4.d32
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/crx.exp35
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/crx.ld84
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-abs32.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-abs32.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-imm16.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-imm16.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-imm32.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-imm32.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-num16.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-num16.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-num32.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-num32.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-num8.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-num8.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-regrel12.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-regrel12.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-regrel22.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-regrel22.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-regrel28.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-regrel28.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-regrel32.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-regrel32.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-rel16.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-rel16.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-rel24.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-rel24.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-rel32.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-rel32.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-rel4.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-rel4.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-rel8-cmp.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-rel8-cmp.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-rel8.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-crx/reloc-rel8.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-cygwin/exe-export.exp154
-rw-r--r--binutils-2.21/ld/testsuite/ld-cygwin/testdll.c14
-rw-r--r--binutils-2.21/ld/testsuite/ld-cygwin/testdll.def4
-rw-r--r--binutils-2.21/ld/testsuite/ld-cygwin/testexe.c31
-rw-r--r--binutils-2.21/ld/testsuite/ld-cygwin/testexe.def5
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/d10v.exp253
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/default_layout.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/linktest-001.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/linktest-002.lt2
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/linktest-002.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/regression-001.lt3
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/regression-001.s14
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-001.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-001.ld10
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-001.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-002.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-002.ld10
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-003.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-003.ld10
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-004.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-004.ld10
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-005.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-005.ld10
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-005.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-006.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-006.ld8
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-007.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-007.ld8
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-008.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-008.ld8
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-009.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-009.ld11
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-009.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-010.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-010.ld11
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-011.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-011.ld11
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-012.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-012.ld11
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-013.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-013.ld12
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-014.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-014.ld12
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-015.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-015.ld12
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-016.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/reloc-016.ld12
-rw-r--r--binutils-2.21/ld/testsuite/ld-d10v/simple.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-discard/discard.exp47
-rw-r--r--binutils-2.21/ld/testsuite/ld-discard/discard.ld9
-rw-r--r--binutils-2.21/ld/testsuite/ld-discard/exit.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-discard/extern.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-discard/extern.s13
-rw-r--r--binutils-2.21/ld/testsuite/ld-discard/start.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-discard/start.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-discard/static.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-discard/static.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-discard/zero-range.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-discard/zero-range.s13
-rw-r--r--binutils-2.21/ld/testsuite/ld-discard/zero-rel.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-discard/zero-rel.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/audit.exp65
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/audit.rd3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/begin.c5
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/beginwarn.c9
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/binutils.exp154
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/comm1.c17
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/commonpage1.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/commonpage2.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/compress.exp59
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/compress1.s216
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/compress1a.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/compress1b.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/compress1c.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/data1.c6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/data1.h9
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/del.cc29
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/depaudit.rd3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/depaudit2.rd3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/discard.ld3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/discard1.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/discard1.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/discard2.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/discard2.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/discard3.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl1.c10
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl1.list6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl1.out1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl1main.c33
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl2.c16
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl2.list3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl2a.list3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl2a.out3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl2b.out3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl2main.c22
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl2xxx.c7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl2xxx.list3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl3.cc7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl3.list6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl3a.out1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl3b.out1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl3header.h5
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl3main.cc25
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl4.c24
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl4.list4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl4a.out6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl4b.out6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl4main.c34
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl4xxx.c13
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl4xxx.list4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl5.cc61
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl5.out1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl6.c14
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl6a.out1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl6amain.c33
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl6b.out1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl6bmain.c33
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl6cmain.c33
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dl6dmain.c33
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dummy.c1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dwarf.exp114
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dwarf1.c10
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dwarf1.h6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dwarf1.out1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dwarf1main.c10
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dynbss1.c20
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/dynsym1.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/eh-frame-hdr.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/eh-frame-hdr.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/eh-group.exp72
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/eh-group1.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/eh-group2.s15
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/eh1.d33
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/eh1.s47
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/eh1a.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/eh2.d33
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/eh2a.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/eh3.d33
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/eh3.s48
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/eh3a.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/eh4.d32
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/eh4.s92
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/eh4a.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/eh5.d162
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/eh5.s29
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/eh5a.s27
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/eh5b.s35
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/eh6.d17
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/eh6.s17
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/elf.exp84
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/empty.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/empty.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/empty2.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/empty2.s18
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/end.c7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/endhidden.c8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/endprotected.c8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/exclude.exp140
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/exclude1.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/exclude2.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/exclude3.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/exclude3a.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/exclude3b.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/exclude3c.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/exclude3d.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/expr1.d2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/expr1.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/expr1.t6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/extract-symbol-1.ld18
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/extract-symbol-1.s15
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/extract-symbol-1sec.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/extract-symbol-1sym.d17
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/fini.c34
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/fini.out3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/flags1.d22
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/flags1.ld12
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/flags1.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/foo.c11
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/foo.map4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/frame.exp82
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/frame.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/func1.c2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/group.ld6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/group1.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/group10.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/group10.s14
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/group1a.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/group1b.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/group2.d20
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/group3a.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/group3a.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/group3b.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/group3b.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/group4.d20
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/group5.d20
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/group6.d20
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/group7.d31
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/group8.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/group8a.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/group8b.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/group9.s15
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/group9a.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/group9b.d18
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/hash.d17
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/header.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/header.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/header.t8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/hidden.out3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/init-fini-arrays.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/init-fini-arrays.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/init.c34
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/init.out3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/linkonce1.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/linkonce1a.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/linkonce1b.s17
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/linkonce2.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/linkoncerdiff.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/linkoncerdiff1.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/linkoncerdiff2.s22
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/lma.lnk6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/lma.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/loadaddr.s20
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/loadaddr.t10
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/loadaddr1.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/loadaddr1.t7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/loadaddr2.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/loadaddr2.t7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/loadaddr3.t16
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/loadaddr3a.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/loadaddr3b.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/local1.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/local1.map6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/local1.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/main.c8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/maxpage1.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/maxpage1.s13
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/maxpage2.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/maxpage3.t7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/maxpage3a.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/maxpage3b.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/maxpage3c.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/maxpage4.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/maxpage4.t9
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/merge.d17
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/merge.ld7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/merge.s14
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/merge2.d17
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/merge2.s58
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/multibss1.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/multibss1.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/new.cc48
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/nobits-1.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/nobits-1.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/nobits-1.t13
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/noload-1.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/noload-1.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/noload-1.t8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/noload-2.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/noload-3.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/noload-3.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/noload-3.t7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/normal.out3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/note-1.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/note-1.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/note-1.t14
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/note-2.d17
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/note-2.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/note-2.t13
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/orphan-region.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/orphan-region.ld11
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/orphan-region.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/orphan.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/orphan.ld8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/orphan.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/orphan2.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/orphan2.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/orphan3.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/orphan3a.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/orphan3b.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/orphan3c.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/orphan3d.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/orphan3e.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/orphan3f.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/orphan4.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/orphan4.ld13
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/orphan4.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/overlay.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/overlay.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/overlay.t10
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/pass.out1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/pr11138-1.c13
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/pr11138-1.map4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/pr11138-2.c17
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/pr11138-2.map4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/pr11138.out2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/pr11304.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/pr11304a.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/pr11304b.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/pr349-1.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/pr349-2.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/pr349.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/pr9676-1.c15
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/pr9676-2.c14
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/pr9676-3.c7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/pr9676-4.c9
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/pr9676.rd5
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/pr9679-1.c5
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/pr9679-2.c13
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/pr9679.rd5
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/preinit.c34
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/preinit.out3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/relocatable.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/relocatable.t8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/relro1.s14
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/relro2.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/sec-to-seg-script-adjoining-pages.t11
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/sec-to-seg-script-disjoint-pages.t11
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/sec-to-seg-script-same-page.t10
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/sec-to-seg.exp102
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/sec-to-seg1.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/sec-to-seg2.s13
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/sec64k.exp206
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/seg.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/seg.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/seg.t16
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/shared.exp330
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/simple.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/stab.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/start.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/symbol1ref.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/symbol1w.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/symbol2ref.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/symbol2w.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/table.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/tbss.s15
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/tbss1.s24
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/tbss2.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/tdata1.s24
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/tdata2.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/textaddr1.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/textaddr2.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/textaddr3.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/textaddr4.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/textaddr5.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/textaddr6.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/textaddr7.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/tls_common.exp72
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/tls_common.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/tls_gc.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/unknown.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/unknown2.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/unknown2.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/warn.out3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/warn1.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/warn2.d17
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/weak-dyn-1.ld8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/weak-dyn-1.rd3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/weak-dyn-1a.s13
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/weak-dyn-1b.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/wrap.exp57
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/wrap1.c8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/wrap1.out3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/wrap1a.c6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elf/wrap1b.c16
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfcomm/common1a.c2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfcomm/common1b.c7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfcomm/elfcomm.exp269
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfcomm/sort-common.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers.exp1002
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers1.c101
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers1.dsym9
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers1.map13
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers1.sym4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers1.ver8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers13.asym10
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers15.c36
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers15.dsym5
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers15.sym3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers15.ver5
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers16.c10
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers16.dsym2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers16.map3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers16a.c8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers16a.dsym3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers16a.ver3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers17.c5
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers17.dsym2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers17.map4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers17.ver3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers18.c42
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers18.dsym7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers18.map12
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers18.sym4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers18.ver7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers19.c10
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers19.dsym1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers19.ver3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers2.c13
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers2.dsym3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers2.map4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers2.ver8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers20.c1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers20.dsym2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers20.map7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers20.ver4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers20a.ver4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers21.c32
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers21.dsym4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers21.map8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers21.sym3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers21.ver4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers22.c7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers22.dsym1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers22.map4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers22.ver4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers22a.c6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers22a.dsym2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers22a.sym1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers22a.ver4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers22b.c4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers22b.dsym2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers22b.ver4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers23.c10
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers23.dsym1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers23.ver4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers23a.c11
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers23a.dsym3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers23a.map5
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers23a.sym1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers23a.ver4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers23b.c4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers23b.dsym2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers23b.map4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers23b.ver4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers23c.ver4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers23d.dsym2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers24.map4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers24.rd15
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers24a.c5
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers24b.c5
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers24c.c9
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers25a.c1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers25a.dsym2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers25a.map5
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers25a.ver4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers25b.c1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers25b.dsym1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers25b.ver1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers26a.c4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers26a.dsym2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers26a.map5
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers26a.ver4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers26b.c10
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers26b.dsym1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers26b.ver1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers27a.c1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers27a.dsym2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers27a.map5
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers27a.ver4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers27b.c2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers27b.dsym1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers27b.ver1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers27c.c1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers27c.dsym1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers27c.ver1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers27d.dsym2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers27d.sym1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers27d.ver4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers27d1.c6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers27d2.c7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers27d3.c21
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers27d4.dsym1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers27d4.ver3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers28a.c1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers28a.dsym1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers28a.ver1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers28b.c3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers28b.dsym2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers28b.map5
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers28b.ver4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers28c.c7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers28c.dsym1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers28c.ver4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers29.c5
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers29.dsym1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers29.ver3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers3.c13
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers3.dsym1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers3.ver4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers30.c7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers30.dsym5
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers30.map6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers30.ver4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers31.c6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers31.dsym2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers31.map5
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers31.ver3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers32.map1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers32a.c1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers32a.dsym2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers32a.ver4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers32b.c1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers32b.dsym2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers32b.ver4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers4.c31
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers4.sym1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers4a.dsym2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers4a.sym1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers4a.ver4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers5.c51
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers6.c25
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers6.dsym4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers6.sym4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers6.ver6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers7.c13
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers7.map6
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers7a.c18
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers7a.dsym2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers7a.sym2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers7a.ver4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers8.c5
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers8.map15
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers8.ver8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers9.c47
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers9.dsym4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers9.sym4
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvers/vers9.ver5
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvsb/common.c14
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvsb/define.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvsb/elf-offset.ld173
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvsb/elfvsb.dat26
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvsb/elfvsb.exp508
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvsb/hidden0.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvsb/hidden1.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvsb/hidden2.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvsb/hidden2.ld7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvsb/hidden2.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvsb/internal0.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvsb/internal1.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvsb/main.c306
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvsb/protected0.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvsb/protected1.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvsb/sh1.c421
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvsb/sh2.c61
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvsb/sh3.c7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvsb/test.c26
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfvsb/undef.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/bar.c16
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/bar1a.c26
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/bar1b.c7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/bar1c.c7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/dso.dsym1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/dsodata.dsym2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/dsow.dsym1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/dsowdata.dsym1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/elfweak.exp501
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/foo.c8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/foo1a.c7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/foo1b.c7
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/main.c19
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/main1.c11
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/size.dat3
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/size2.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/size2a.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/size2b.s18
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/size_bar.c11
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/size_foo.c9
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/size_main.c8
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/strong.dat1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/strong.sym1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/strongcomm.sym2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/strongdata.dat1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/strongdata.sym2
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/weak.dat1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/weak.dsym1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/weakdata.dat1
-rw-r--r--binutils-2.21/ld/testsuite/ld-elfweak/weakdata.dsym1
-rw-r--r--binutils-2.21/ld/testsuite/ld-fastcall/export.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-fastcall/fastcall.exp52
-rw-r--r--binutils-2.21/ld/testsuite/ld-fastcall/import.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-1.d57
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-2.d71
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-5.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-6-fail.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-6.d73
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-7.d57
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-8.d71
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-1.d57
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-2-fail.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-2.d80
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-3.d83
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-4.d71
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-5.d82
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-6-fail.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-6.d73
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-7.d57
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-8-fail.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-8.d83
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-local-2.d83
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-local-8.d83
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic-static-1.d62
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic-static-2.d94
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic-static-5.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic-static-6.d43
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic-static-7.d62
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic-static-8.d94
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic.exp69
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic1.s64
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic2.ldv1
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic2.s81
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic2min.ldv1
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic3.s99
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic4.s99
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic5.s38
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic6.ldv1
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic6.s55
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic7.s63
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic8.ldv1
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic8.s81
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fdpic8min.ldv1
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fr450-link.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fr450-linka.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fr450-linkb.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/fr450-linkc.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/frv-elf.exp23
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-1-dep.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-1-shared.lds3
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-1.s85
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-2.s183
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-3.s20
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-dynamic-1.d71
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-dynamic-2.d200
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-dynamic-3.d27
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-initial-shared-2.d235
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-pie-1.d71
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-pie-3.d27
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-relax-dynamic-1.d67
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-relax-dynamic-2.d149
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-relax-dynamic-3.d27
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-relax-initial-shared-2.d214
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-relax-pie-1.d67
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-relax-pie-3.d27
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-relax-shared-1.d73
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-relax-shared-2.d264
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-relax-shared-3.d27
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-relax-static-1.d62
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-relax-static-3.d26
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-shared-1-fail.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-shared-1.d73
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-shared-2.d264
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-shared-3.d27
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-static-1.d70
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls-static-3.d26
-rw-r--r--binutils-2.21/ld/testsuite/ld-frv/tls.exp65
-rw-r--r--binutils-2.21/ld/testsuite/ld-gc/abi-note.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-gc/abi-note.s15
-rw-r--r--binutils-2.21/ld/testsuite/ld-gc/dummy.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-gc/gc.c41
-rw-r--r--binutils-2.21/ld/testsuite/ld-gc/gc.exp102
-rw-r--r--binutils-2.21/ld/testsuite/ld-gc/noent.d3
-rw-r--r--binutils-2.21/ld/testsuite/ld-gc/noent.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-gc/pr11218-1.c5
-rw-r--r--binutils-2.21/ld/testsuite/ld-gc/pr11218-2.c13
-rw-r--r--binutils-2.21/ld/testsuite/ld-gc/pr11218.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-gc/start.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-gc/start.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-h8300/gcsection.d27
-rw-r--r--binutils-2.21/ld/testsuite/ld-h8300/gcsection.s43
-rw-r--r--binutils-2.21/ld/testsuite/ld-h8300/h8300.exp44
-rw-r--r--binutils-2.21/ld/testsuite/ld-h8300/relax-2.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-h8300/relax-2.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-h8300/relax-3-coff.d36
-rw-r--r--binutils-2.21/ld/testsuite/ld-h8300/relax-3.d35
-rw-r--r--binutils-2.21/ld/testsuite/ld-h8300/relax-3.s32
-rw-r--r--binutils-2.21/ld/testsuite/ld-h8300/relax-4-coff.d76
-rw-r--r--binutils-2.21/ld/testsuite/ld-h8300/relax-4.d51
-rw-r--r--binutils-2.21/ld/testsuite/ld-h8300/relax-4.s72
-rw-r--r--binutils-2.21/ld/testsuite/ld-h8300/relax-5-coff.d50
-rw-r--r--binutils-2.21/ld/testsuite/ld-h8300/relax-5.d50
-rw-r--r--binutils-2.21/ld/testsuite/ld-h8300/relax-5.s66
-rw-r--r--binutils-2.21/ld/testsuite/ld-h8300/relax-6-coff.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-h8300/relax-6.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-h8300/relax-6.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-h8300/relax.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-h8300/relax.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/abs.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/abs.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/alloc.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/alloc.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/alloc.t13
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/combreloc.d17
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/combreloc.s22
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/compressed1.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/compressed1.s186
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/discarded1.d3
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/discarded1.s13
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/discarded1.t7
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/emit-relocs.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/emit-relocs.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/hidden1.d3
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/hidden1.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/hidden2.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/hidden2.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/hidden3.d3
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/hidden3.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/i386.exp201
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/nogot1.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/nogot1.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/nogot2.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/nogot2.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/pcrel16.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/pcrel16.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/pcrel16abs.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/pcrel16abs.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/pcrel8.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/pcrel8.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/protected1.d3
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/protected1.s13
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/protected2.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/protected2.s13
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/protected3.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/protected3.s15
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/reloc.d17
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/reloc.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsbin.dd464
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsbin.rd160
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsbin.s165
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsbin.sd13
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsbin.td16
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsbindesc.dd456
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsbindesc.rd151
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsbindesc.s167
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsbindesc.sd13
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsbindesc.td16
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsbinpic.s172
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsdesc.dd391
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsdesc.rd149
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsdesc.s276
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsdesc.sd20
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsdesc.td16
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsg.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsg.sd10
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsgd1.dd16
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsgd1.s15
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsgd2.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsgd2.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsgdesc.dd156
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsgdesc.rd103
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsgdesc.s100
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsie1.dd18
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsie1.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsie2.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsie2.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsie3.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsie3.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsie4.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsie4.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsie5.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsie5.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsindntpoff.dd16
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsindntpoff.s19
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsld1.dd15
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsld1.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlslib.s17
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsnopic.dd161
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsnopic.rd116
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsnopic.sd12
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsnopic1.s107
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlsnopic2.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlspic.dd411
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlspic.rd154
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlspic.sd18
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlspic.td16
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlspic1.s282
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlspic2.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlspie1.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/tlspie1.s64
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/vxworks1-lib.dd41
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/vxworks1-lib.nd9
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/vxworks1-lib.rd12
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/vxworks1-lib.s31
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/vxworks1-lib.td3
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/vxworks1-static.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/vxworks1.dd38
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/vxworks1.ld30
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/vxworks1.rd20
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/vxworks1.s14
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/vxworks2-static.sd9
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/vxworks2.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/vxworks2.sd13
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/warn1.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/warn1.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-i386/zero.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/ia64.exp64
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/line.exp57
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/link-order.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/local1.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/local1.map6
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/local1.s21
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/merge1.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/merge1.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/merge2.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/merge2.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/merge3.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/merge3.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/merge4.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/merge4.s21
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/merge5.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/merge5.s24
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/tlsbin.dd74
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/tlsbin.rd136
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/tlsbin.s54
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/tlsbin.sd15
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/tlsbin.td16
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/tlsbinpic.s97
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/tlsg.s14
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/tlsg.sd10
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/tlslib.s18
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/tlspic.dd64
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/tlspic.rd131
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/tlspic.sd15
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/tlspic.td16
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/tlspic1.s114
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/tlspic2.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-ia64/undefined.s152
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/binutils.exp101
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-1-local-x86.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-1-local-x86.s13
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-1-x86.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-1-x86.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-10-i386.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-10-i386.s20
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-10-x86-64.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-10-x86-64.s20
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-11-i386.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-11-i386.s21
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-11-x86-64.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-11-x86-64.s21
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-i386.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-i386.s21
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-local-i386.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-local-i386.s18
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-local-x86-64.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-local-x86-64.s17
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-x86-64.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-x86-64.s17
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-3-x86.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-3a-x86.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-3b-x86.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-4-local-x86.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-4-local-x86.s18
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-4-x86.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-4-x86.s19
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-4a-x86.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5-i386.s23
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5-local-i386.s22
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5-local-x86-64.s18
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5-x86-64.s19
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5a-i386.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5a-local-i386.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5a-local-x86-64.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5a-x86-64.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5b-i386.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5b-local-i386.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5b-local-x86-64.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5b-x86-64.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5r-local-i386.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5r-local-x86-64.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-6-i386.s24
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-6-x86-64.s20
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-6a-i386.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-6a-x86-64.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-6b-i386.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-6b-x86-64.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-7-i386.s24
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-7-x86-64.s20
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-7a-i386.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-7a-x86-64.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-7b-i386.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-7b-x86-64.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-8-i386.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-8-x86-64.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-8a-i386.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-8a-x86-64.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-8b-i386.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-8b-x86-64.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-9-x86.d3
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc-9-x86.s18
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/ifunc.exp353
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/lib.c39
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/prog.c46
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/test-1.c3
-rw-r--r--binutils-2.21/ld/testsuite/ld-ifunc/test-2.c3
-rw-r--r--binutils-2.21/ld/testsuite/ld-libs/lib-1.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-libs/lib-2.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-libs/lib-2.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-libs/libs.exp30
-rw-r--r--binutils-2.21/ld/testsuite/ld-linkonce/linkonce.exp46
-rw-r--r--binutils-2.21/ld/testsuite/ld-linkonce/x.s47
-rw-r--r--binutils-2.21/ld/testsuite/ld-linkonce/y.s64
-rw-r--r--binutils-2.21/ld/testsuite/ld-linkonce/zeroeh.ld5
-rw-r--r--binutils-2.21/ld/testsuite/ld-linkonce/zeroehl32.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68hc11/adj-brset.d32
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68hc11/adj-brset.s51
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68hc11/adj-jump.d60
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68hc11/adj-jump.s74
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68hc11/bug-1403.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68hc11/bug-1403.s20
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68hc11/bug-1417.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68hc11/bug-1417.s21
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68hc11/bug-3331.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68hc11/bug-3331.s23
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68hc11/far-hc11.d73
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68hc11/far-hc11.s105
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68hc11/far-hc12.d55
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68hc11/far-hc12.ld18
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68hc11/far-hc12.s83
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68hc11/link-hc12.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68hc11/link-hcs12.d24
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68hc11/link-hcs12.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68hc11/m68hc11.exp34
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68hc11/relax-direct.d63
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68hc11/relax-direct.s84
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68hc11/relax-group.d63
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68hc11/relax-group.s161
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/got-1.d19
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/got-1.s18
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/got-multigot-12-13-14-34-35-ok.d18
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/got-multigot-14-ok.d18
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/got-multigot-15-er.d3
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/got-negative-12-13-14-34-ok.d18
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/got-negative-12-13-14-35-er.d3
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/got-negative-14-ok.d18
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/got-negative-15-er.d3
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/got-single-12-ok.d18
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/got-single-13-er.d3
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/got-xgot-12-13-14-15-34-35-ok.d18
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/got-xgot-15-ok.d18
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/isaa-mac.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/isaa-mac.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/isaa-nodiv.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/isaa.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/isaa.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/isaaplus.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/isaaplus.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/isab-float.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/isab-float.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/isab-nousp.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/isab.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/isab.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/m68k-got.exp250
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/m68k.exp93
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/merge-error-1a.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/merge-error-1a.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/merge-error-1b.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/merge-error-1b.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/merge-error-1c.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/merge-error-1d.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/merge-error-1e.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/merge-ok-1a.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/merge-ok-1b.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/merge-ok-1c.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/merge.ld9
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/plt1-68020.d35
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/plt1-cpu32.d43
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/plt1-empty.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/plt1-isab.d44
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/plt1-isac.d44
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/plt1.ld23
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/plt1.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/tls-def-1.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/tls-def-1.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/tls-gd-1.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/tls-gd-1.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/tls-gd-1.d313
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/tls-gd-1.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/tls-gd-2.d24
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/tls-gd-2.s24
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/tls-gd-ie-1.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/tls-gd-ie-1.s23
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/tls-ie-1.d22
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/tls-ie-1.s20
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/tls-ld-1.d22
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/tls-ld-1.s21
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/tls-ld-2.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/tls-ld-2.s19
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/tls-le-1.s20
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/tls-main-1.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/tls-main-1.s19
-rw-r--r--binutils-2.21/ld/testsuite/ld-m68k/tls-no-1.s18
-rw-r--r--binutils-2.21/ld/testsuite/ld-mep/mep.exp38
-rw-r--r--binutils-2.21/ld/testsuite/ld-mep/mep1.ld8
-rw-r--r--binutils-2.21/ld/testsuite/ld-mep/mep1.s13
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-0.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-00.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-01.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-02.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-03.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-04.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-05.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-1.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-10.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-11.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-12.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-13.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-14.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-15.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-2.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-20.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-21.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-22.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-23.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-24.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-25.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-3.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-30.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-31.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-32.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-33.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-34.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-35.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-4.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-40.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-41.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-42.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-43.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-44.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-45.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-5.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-51.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/branch-misc-1.d30
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/dyn-sec64.d30
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/dyn-sec64.ld23
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/dyn-sec64.s19
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame1-n32.d202
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame1-n64.d338
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame1.ld19
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame1.s152
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame2-n32.d198
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame2-n64.d330
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame3.d281
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame4.d208
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame5.d279
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame5.ld18
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame5.s107
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/elf-rel-got-n32.d311
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/elf-rel-got-n64-linux.d326
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/elf-rel-got-n64.d332
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/elf-rel-xgot-n32.d431
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64-linux.d441
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64.d436
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/emit-relocs-1.d37
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/emit-relocs-1.ld20
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/emit-relocs-1a.s22
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/emit-relocs-1b.s17
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/got-dump-1.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/got-dump-1.ld19
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/got-dump-1.s22
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/got-dump-2.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/got-dump-2.ld18
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/got-dump-2.s22
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/got-page-1.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/got-page-1.ld31
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/got-page-1.s46
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/got-page-2.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/got-page-2.s46
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/got-page-3.d26
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/got-page-3a.s58
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/got-page-3b.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/got-page-3c.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/got-vers-1.dd6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/got-vers-1.rd6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/got-vers-1.sd6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/got-vers-1.ver1
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/got-vers-1a.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/got-vers-1b.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/hash1.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/hash1a.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/hash1b.d3
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/hash1c.d3
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/jalbal.d24
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/jalbal.s18
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/jaloverflow-2.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/jaloverflow-2.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/jaloverflow.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/jaloverflow.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/jr-to-b-1.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/jr-to-b-1.s42
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/jr-to-b-2.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/jr-to-b-2.s42
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/jr.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips-dyn.ld223
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips-elf-flags.exp166
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips-elf.exp532
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips-lib.ld218
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-1.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-1a.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-1b.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-call-global-1.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-call-global-2.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-call-global-3.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-call-global.d39
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-hilo-n32.d338
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-hilo.d337
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-hilo.ld12
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-hilo.s14
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-intermix-1.s104
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-intermix-2.s2631
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-intermix.d126
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-local-stubs-1.d107
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-local-stubs-1.s49
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1-dummy.s15
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1.dd1227
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1.gd64
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1.inc147
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1.ld22
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1a.s144
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1b.s19
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2.ad6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2.dd208
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2.gd26
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2.nd10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2.rd9
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2a.s63
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2b.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-3.dd265
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-3.gd23
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-3.inc59
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-3.rd7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-3a.s59
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-3b.s14
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4.ver8
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4a.dd23
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4a.gd13
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4a.nd10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4a.s33
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4b.dd35
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4b.s15
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4c.s38
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mode-change-error-1.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mode-change-error-1a.s17
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/mode-change-error-1b.s18
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-1-1.s16384
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-1-2.s16384
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-1.d8222
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-hidden-1.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-hidden-1.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-hidden-2.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-hidden-2.s16389
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-no-shared-1.s29
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-no-shared-2.s27
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-no-shared.d18
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/no-shared-1-n32.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/no-shared-1-n64.d26
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/no-shared-1-n64.s13
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/no-shared-1-o32.d24
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/no-shared-1-o32.s13
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/no-shared-1.ld11
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1-rel.dd46
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1-rel.nd5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1.dd46
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1.ld9
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1.nd9
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1a.s31
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1b.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-2.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-2a.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-2b.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3-error.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.dd39
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.gd18
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.ld23
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.s29
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.sd20
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.ad27
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.dd52
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.gd28
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.ld35
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.nd9
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.pd5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.rd4
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.s22
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.sd27
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4-error.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4a.s22
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.ad26
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.dd10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.gd7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.ld33
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.nd12
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.rd7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.s13
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.sd27
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5a.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.ad32
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.dd34
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.gd26
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.ld38
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.nd10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.pd7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.rd13
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.sd27
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.ad27
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.dd101
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.gd32
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.nd17
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.pd6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.rd14
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.sd27
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32a.s48
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32b.s39
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32c.s25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.ad27
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.dd101
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.gd32
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.nd17
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.pd7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.rd30
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.sd25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64a.s48
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64b.s39
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64c.s25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.ad27
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.dd101
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.gd32
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.nd17
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.pd6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.rd14
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.sd27
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32a.s48
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32b.s37
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32c.s25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6.ld40
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/region1.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/region1.t12
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/region1a.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/region1b.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/rel32-n32.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/rel32-o32.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/rel32.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/rel64.d19
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/rel64.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/relax-jalr-n32-shared.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/relax-jalr-n32.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/relax-jalr-n64-shared.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/relax-jalr-n64.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/relax-jalr.s15
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/reloc-1-n32.d199
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/reloc-1-n64.d459
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/reloc-1-rel.d356
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/reloc-1a.s100
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/reloc-1b.s95
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/reloc-2.d169
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/reloc-2.ld9
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/reloc-2a.s78
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/reloc-2b.s73
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/reloc-3-n32.d18
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/reloc-3.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/reloc-4.d3
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/reloc-4.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/reloc-5.d3
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/reloc-5.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/reloc-estimate-1.d18
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/reloc-estimate-1.ld29
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/reloc-estimate-1a.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/reloc-estimate-1b.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/reloc-merge-lo16.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/reloc-merge-lo16.ld9
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/reloc-merge-lo16.s28
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1-10000.d18
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1-2fe80.d18
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1-7fff.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1-8000.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1-fff0.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1.ld17
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/textrel-1.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/textrel-1.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden2-got.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden2.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden2a.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden2b.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden3.d24
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden3.got23
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden3.ld28
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden3.r13
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden3a.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden3b.s18
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden4.got29
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden4.r19
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden4a.s18
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden4b.s27
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tls-multi-got-1-1.s39
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tls-multi-got-1-2.s20
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tls-multi-got-1.d20
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tls-multi-got-1.got36
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tls-multi-got-1.r38
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tlsbin-o32.d43
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tlsbin-o32.got6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tlsbin-o32.s89
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.d100
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.got18
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.d100
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got19
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.s64
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.d100
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got19
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32.d54
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32.got18
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32.s96
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tlslib-hidden.ver3
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tlslib-o32-hidden.got14
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tlslib-o32-ver.got15
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tlslib-o32.d45
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tlslib-o32.got15
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tlslib-o32.s70
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/tlslib.ver3
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/undefined.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/undefined.s24
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/vxworks-forced-local-1.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/vxworks-forced-local-1.s13
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/vxworks-forced-local-1.ver1
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1-lib.dd50
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1-lib.nd9
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1-lib.rd17
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1-lib.s52
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1-lib.td3
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1-static.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1.dd51
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1.ld32
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1.rd32
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1.s27
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/vxworks2-static.sd9
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/vxworks2.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mips-elf/vxworks2.sd13
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/a.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/areg-256.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/areg-t.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/aregm.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-badfil1.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-badfil1.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-badfil2.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-badfil2.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-badfixo.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-badfixo.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-badloc.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-badloc.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-badlop.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-badlop.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-badm.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-badm2.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-badmain.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-badquot.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-badquot.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-badrx1.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-badrx1.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-badrx2.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-badrx2.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-badrx3.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-badrx3.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-bend.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-bend1.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-bend2.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-bend3.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-bstab1.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-bstab1.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-fixo2.d27
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-fixo2.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-goodmain.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-loc64k.d24
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-loc64k.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-nosym.d18
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-nosym.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-offloc.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-post1.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-twoinsn.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-widec.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-widec1.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-widec2.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-widec2.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-widec3.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/b-widec3.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-1.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-1.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-10.d22
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-10.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-11.d31
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-11.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-12.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-12m.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-13.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-13m.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-14.d22
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-14m.d20
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-15.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-15m.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-16.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-16m.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-17.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-17m.d22
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-18.d29
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-18m.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-19.d33
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-19m.d30
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-1m.d18
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-2.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-2.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-20.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-20m.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-21.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-21m.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-22.d22
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-2m.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-3.d24
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-3.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-3m.d20
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-4.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-4.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-4m.d22
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-5.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-5.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-5m.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-6.d30
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-6.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-6m.d27
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-7.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-7.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-7m.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-8.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-8.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-8m.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-9.d26
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-9.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo-9m.d22
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bpo64addr.ld13
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bspec1.d41
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bspec1.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bspec1m.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bspec2.d51
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bspec2.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bspec2m.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bspec801.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bspec802.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bspec803.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bspec804.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bspec805.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bspec806.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bspec807.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bspec808.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bza-1b.d26
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bza-1f.d26
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bza-2b.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bza-2f.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bza-7b.d26
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bza-7f.d26
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bza-8b.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bza-8f.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/bza.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/data1.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/dloc1.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/dloc2.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/ext1-254.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/ext1.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/ext1g.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/ext1l.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/getaa-1b.d24
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/getaa-1f.d24
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/getaa-2b.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/getaa-2f.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/getaa-4b.d26
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/getaa-4f.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/getaa-6b.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/getaa-6f.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/getaa-7b.d24
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/getaa-7f.d24
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/getaa-8b.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/getaa-8f.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/getaa.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/getaa12b.d26
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/getaa12f.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/getaa14b.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/getaa14f.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-1.d27
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-1.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-10.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-11.d39
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-11b.d32
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-12.d34
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-13.d33
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-14.d32
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-14s.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-15.d59
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-16.d59
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-17.d37
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-18.d39
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-19.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-2.d41
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-2.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-20.d18
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-3.d36
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-3.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-4.d35
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-4.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-5.d34
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-5.s20
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-5s.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-6.d286
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-7.d286
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-8.d37
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/greg-9.d39
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/gregbza1.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/gregget1.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/gregget2.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/gregldo1.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/gregpsj1.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/hdr-1.d19
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/jumpa-1b.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/jumpa-1f.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/jumpa-2b.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/jumpa-2f.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/jumpa-3b.d30
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/jumpa-3f.d28
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/jumpa-4b.d26
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/jumpa-4f.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/jumpa-5b.d31
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/jumpa-5f.d29
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/jumpa-6b.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/jumpa-6f.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/jumpa-7b.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/jumpa-7f.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/jumpa-8b.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/jumpa-8f.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/jumpa-9b.d30
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/jumpa-9f.d28
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/jumpa.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/jumpa12b.d26
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/jumpa12f.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/jumpa13b.d31
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/jumpa13f.d29
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/jumpa14b.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/jumpa14f.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/loc1.d19
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/loc1.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/loc10.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/loc10.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/loc10m.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/loc1m.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/loc2.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/loc2.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/loc2m.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/loc3.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/loc3m.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/loc4.d28
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/loc4m.d17
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/loc5.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/loc5m.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/loc6.d24
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/loc6m.d18
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/loc7.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/loc7m.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/loc8.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/loc8.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/loc8m.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/loc9.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/loc9.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/loc9m.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/local1.d48
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/local1.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/local10.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/local10m.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/local11.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/local11m.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/local12.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/local12m.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/local1m.d19
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/local2.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/local2.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/local2m.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/local3.d46
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/local3m.d19
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/local4.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/local4m.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/local5.d47
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/local5m.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/local6.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/local6m.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/local7.d48
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/local7m.d20
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/local8.d28
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/local8m.d28
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/local9.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/local9m.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/locdo-1.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/locdo.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/loct-1.d19
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/loct.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/locto-1.d19
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/locto.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/main1.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/mmix.exp35
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/mmohdr1.ld11
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/mmosec1.ld16
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/mmosec2.ld13
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/nop123.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pad16.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pad2p18m32.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pad2p26m32.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pad4.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushja.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushja1b-s.d19
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushja1b.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushja1f-s.d19
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushja1f.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushja2b.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushja2f.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushja7b-s.d19
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushja7b.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushja7f-s.d19
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushja7f.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushja8b.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushja8f.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushjs1.d27
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushjs1b.d31
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushjs1bm.d29
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushjs1m.d26
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushjs1r.d22
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushjs2.d29
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushjs2b.d33
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushjs2bm.d31
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushjs2m.d28
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushjs2r.d27
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushjs3.d29
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushjs3b.d30
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushjs3bm.d28
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushjs3m.d28
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushjs3r.d32
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushjs4.d34
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushjs4b.d35
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushjs4bm.d33
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushjs4m.d33
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/pushjs4r.d29
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/reg-1.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/reg-1m.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/reg-2.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/reg-2m.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/regext1.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/sec-1.d35
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/sec-1.s14
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/sec-2.d26
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/sec-2.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/sec-3.d36
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/sec-4.d22
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/sec-5.d28
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/sec-6.d37
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/sec-6.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/sec-6m.d32
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/sec-7a.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/sec-7b.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/sec-7c.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/sec-7d.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/sec-7e.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/sec-7m.d38
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/sec-8a.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/sec-8b.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/sec-8d.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/sec-8m.d30
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/sec-8m.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/sec-9.d19
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/spec801.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/spec802.d24
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/spec803.d24
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/spec804.d24
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/spec805.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/spec806.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/spec807.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/spec808.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/start-1.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/start-2.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/start.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/start2.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/start3.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/start4.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/sym-1.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/sym-2.d142
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/sym-2.s130
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/undef-1.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/undef-1.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/undef-1m.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/undef-2.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/undef-2.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/undef-2m.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/undef-3.d32
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/undef-3m.d18
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/x.s29
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/y.s33
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/zeroeh.ld4
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/zeroehelf.d17
-rw-r--r--binutils-2.21/ld/testsuite/ld-mmix/zeroehmmo.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i112045-1.d22
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i112045-1.s14
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i112045-2.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i112045-2.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i112045-3.d17
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i112045-3.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i126256-1.c7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i126256-2.c5
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i127740.d17
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i127740.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i135409-1.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i135409-1.s29
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i135409-2.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i135409-2.s23
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i135409-3.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i135409-3.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i135409-4.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i135409-4.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i135409-4.t23
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i135409-5.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i135409-5.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i135409-5.t23
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i143317.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i143317.s36
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i143317.t31
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i36434-2.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i36434.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/i36434.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-mn10300/mn10300.exp163
-rwxr-xr-xbinutils-2.21/ld/testsuite/ld-pe/aligncomm-1.c26
-rwxr-xr-xbinutils-2.21/ld/testsuite/ld-pe/aligncomm-2.c27
-rwxr-xr-xbinutils-2.21/ld/testsuite/ld-pe/aligncomm-3.c28
-rwxr-xr-xbinutils-2.21/ld/testsuite/ld-pe/aligncomm-4.c29
-rwxr-xr-xbinutils-2.21/ld/testsuite/ld-pe/aligncomm.d3
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/basefile1.s18
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/direct2_client.c47
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/direct2_dll.c20
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/direct2_dll.def6
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/direct_client.c8
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/direct_dll.c5
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/export_dynamic_warning.d5
-rwxr-xr-xbinutils-2.21/ld/testsuite/ld-pe/export_dynamic_warning.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/exports.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/exports.s2
-rwxr-xr-xbinutils-2.21/ld/testsuite/ld-pe/exports64.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/image_size.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/image_size.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/image_size.t15
-rwxr-xr-xbinutils-2.21/ld/testsuite/ld-pe/longsecn-1.d22
-rwxr-xr-xbinutils-2.21/ld/testsuite/ld-pe/longsecn-2.d21
-rwxr-xr-xbinutils-2.21/ld/testsuite/ld-pe/longsecn-3.d41
-rwxr-xr-xbinutils-2.21/ld/testsuite/ld-pe/longsecn-4.d41
-rwxr-xr-xbinutils-2.21/ld/testsuite/ld-pe/longsecn-5.d41
-rwxr-xr-xbinutils-2.21/ld/testsuite/ld-pe/longsecn.d22
-rwxr-xr-xbinutils-2.21/ld/testsuite/ld-pe/longsecn.s44
-rwxr-xr-xbinutils-2.21/ld/testsuite/ld-pe/non-c-lang-syms.d10
-rwxr-xr-xbinutils-2.21/ld/testsuite/ld-pe/non-c-lang-syms.s15
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/orphan.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/orphan_nu.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/orphana.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/orphana_nu.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/orphanb.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/orphand.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/orphane.s2
-rwxr-xr-xbinutils-2.21/ld/testsuite/ld-pe/pe-compile.exp143
-rwxr-xr-xbinutils-2.21/ld/testsuite/ld-pe/pe-run.exp149
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/pe-run2.exp151
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/pe.exp79
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/secrel.d27
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/secrel1.s79
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/secrel2.s14
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/secrel_64.d28
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/vers-script-1.d153
-rwxr-xr-xbinutils-2.21/ld/testsuite/ld-pe/vers-script-1.ver5
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/vers-script-2.d0
-rwxr-xr-xbinutils-2.21/ld/testsuite/ld-pe/vers-script-2.ver5
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/vers-script-3.d77
-rwxr-xr-xbinutils-2.21/ld/testsuite/ld-pe/vers-script-3.ver7
-rw-r--r--binutils-2.21/ld/testsuite/ld-pe/vers-script-4.d77
-rwxr-xr-xbinutils-2.21/ld/testsuite/ld-pe/vers-script-4.ver10
-rwxr-xr-xbinutils-2.21/ld/testsuite/ld-pe/vers-script-dll.c156
-rw-r--r--binutils-2.21/ld/testsuite/ld-pie/pie.c5
-rw-r--r--binutils-2.21/ld/testsuite/ld-pie/pie.exp50
-rw-r--r--binutils-2.21/ld/testsuite/ld-pie/start.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-pie/start.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-pie/weakundef-data.c15
-rw-r--r--binutils-2.21/ld/testsuite/ld-pie/weakundef.c15
-rw-r--r--binutils-2.21/ld/testsuite/ld-pie/weakundef.out1
-rw-r--r--binutils-2.21/ld/testsuite/ld-plugin/func.c7
-rw-r--r--binutils-2.21/ld/testsuite/ld-plugin/main.c13
-rw-r--r--binutils-2.21/ld/testsuite/ld-plugin/plugin-1.d18
-rw-r--r--binutils-2.21/ld/testsuite/ld-plugin/plugin-10.d36
-rw-r--r--binutils-2.21/ld/testsuite/ld-plugin/plugin-11.d40
-rw-r--r--binutils-2.21/ld/testsuite/ld-plugin/plugin-2.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-plugin/plugin-3.d22
-rw-r--r--binutils-2.21/ld/testsuite/ld-plugin/plugin-4.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-plugin/plugin-5.d29
-rw-r--r--binutils-2.21/ld/testsuite/ld-plugin/plugin-6.d31
-rw-r--r--binutils-2.21/ld/testsuite/ld-plugin/plugin-7.d30
-rw-r--r--binutils-2.21/ld/testsuite/ld-plugin/plugin-8.d34
-rw-r--r--binutils-2.21/ld/testsuite/ld-plugin/plugin-9.d35
-rw-r--r--binutils-2.21/ld/testsuite/ld-plugin/plugin-ignore.d1
-rw-r--r--binutils-2.21/ld/testsuite/ld-plugin/plugin-vis-1.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-plugin/plugin.exp193
-rw-r--r--binutils-2.21/ld/testsuite/ld-plugin/text.c3
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-branch-1.dd14
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-branch-1.ex1
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-branch-1.im1
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-branch-1.nd3
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-branch-1.s14
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-reloc-1.ex1
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-reloc-1.im1
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-reloc-1.nd3
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-reloc-1.od7
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-reloc-1.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-1.ex1
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-1.hd11
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-1.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-2.ex1
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-2.hd11
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-2.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-3.ex1
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-3.hd11
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-3.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-export-1-all.dd11
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-export-1-full.dd21
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-export-1a.s14
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-export-1b.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-export-2.nd1
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-export-2.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-gc-1-32.dd67
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-gc-1-64.dd81
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-gc-1.ex1
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-gc-1.nd3
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-gc-1.s55
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-1-32.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-1-32.dd44
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-1-64.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-1-64.dd49
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-1.ex2
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-1.s21
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2-32.dd69
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2-64.dd73
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2a.ex9
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2a.s41
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2b.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2c.ex6
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2c.s33
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2d.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-3-32.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-3-64.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-3.dd14
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-3.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-3a.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-3b.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-lineno-1.s25
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-lineno-1.txt8
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-lineno-1a.dd24
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-lineno-1a.nd8
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-lineno-1b.dd16
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-lineno-1b.nd3
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1-dso.dnd4
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1-dso.drd9
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1-dso.nd8
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1-dso.rd9
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1-rel.nd8
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1-rel.rd9
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1.ex3
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1.im1
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1a.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1b.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-ref-1-32.od30
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-ref-1-64.od30
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-ref-1.s57
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-rel-1.od22
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-rel-1.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-toc-1-32.dd12
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-toc-1-64.dd12
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-toc-1.ex2
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-toc-1a.s23
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-toc-1b.s23
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-dso.dnd17
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-dso.hd12
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-dso.nd25
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-gcdso.dnd17
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-gcdso.hd12
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-gcdso.nd22
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-rel.hd12
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-rel.nd25
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1.ex8
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1a.s24
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1b.s24
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2a.ex8
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2a.nd8
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2a.s21
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2b.nd8
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2b.s21
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2c.ex1
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2c.nd10
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2c.od13
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2c.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3-32.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3-32.dd24
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3-64.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3-64.dd26
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3a.ex3
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3a.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3b.ex1
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3b.s30
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/aix52.exp265
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/apuinfo-nul.rd9
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/apuinfo-nul.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/apuinfo-nul1.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/apuinfo.rd11
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/apuinfo1.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/apuinfo2.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-12-1.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-12-11.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-12-2.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-12-21.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-0.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-00.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-01.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-02.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-03.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-1.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-10.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-11.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-12.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-13.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-14.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-2.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-20.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-21.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-22.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-23.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-24.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-3.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-31.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-32.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-33.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-34.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-4.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-41.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-8-1.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-8-11.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-8-2.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-8-23.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-8-3.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-8-31.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/oldtlslib.s29
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/plt1.d20
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/plt1.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/powerpc.exp220
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/relax.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/relax.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/relaxr.d26
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/relbrlt.d60
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/relbrlt.s34
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/reloc.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/reloc.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/sdadyn.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/sdadyn.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/sdalib.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/symtocbase-1.s18
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/symtocbase-2.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/symtocbase.d24
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tls.d53
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tls.g12
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tls.s92
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tls.t14
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tls32.d50
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tls32.g11
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tls32.s80
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tls32.t12
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlsexe.d90
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlsexe.g12
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlsexe.r115
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlsexe.t13
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlsexe32.d47
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlsexe32.g11
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlsexe32.r111
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlsexe32.t11
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlsexetoc.d74
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlsexetoc.g15
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlsexetoc.r115
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlsexetoc.t13
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlslib.s24
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlslib32.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlsmark.d42
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlsmark.s55
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlsmark32.d29
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlsmark32.s27
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlsso.d76
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlsso.g15
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlsso.r129
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlsso.t13
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlsso32.d46
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlsso32.g13
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlsso32.r129
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlsso32.t11
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlstoc.d37
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlstoc.g15
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlstoc.s88
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlstoc.t14
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlstocso.d60
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlstocso.g15
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlstocso.r125
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tlstocso.t13
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tocopt.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/tocopt.s51
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/vxworks-relax-2.rd11
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/vxworks-relax-2.s15
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/vxworks-relax.rd9
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/vxworks-relax.s14
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-lib.dd56
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-lib.nd9
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-lib.rd13
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-lib.s38
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-lib.sd12
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-lib.td3
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-static.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/vxworks1.dd48
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/vxworks1.ld30
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/vxworks1.rd22
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/vxworks1.s14
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/vxworks2-static.sd9
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/vxworks2.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-powerpc/vxworks2.sd13
-rw-r--r--binutils-2.21/ld/testsuite/ld-s390/s390.exp75
-rw-r--r--binutils-2.21/ld/testsuite/ld-s390/tlsbin.dd193
-rw-r--r--binutils-2.21/ld/testsuite/ld-s390/tlsbin.rd145
-rw-r--r--binutils-2.21/ld/testsuite/ld-s390/tlsbin.s73
-rw-r--r--binutils-2.21/ld/testsuite/ld-s390/tlsbin.sd13
-rw-r--r--binutils-2.21/ld/testsuite/ld-s390/tlsbin.td16
-rw-r--r--binutils-2.21/ld/testsuite/ld-s390/tlsbin_64.dd223
-rw-r--r--binutils-2.21/ld/testsuite/ld-s390/tlsbin_64.rd145
-rw-r--r--binutils-2.21/ld/testsuite/ld-s390/tlsbin_64.s75
-rw-r--r--binutils-2.21/ld/testsuite/ld-s390/tlsbin_64.sd18
-rw-r--r--binutils-2.21/ld/testsuite/ld-s390/tlsbin_64.td16
-rw-r--r--binutils-2.21/ld/testsuite/ld-s390/tlsbinpic.s170
-rw-r--r--binutils-2.21/ld/testsuite/ld-s390/tlsbinpic_64.s186
-rw-r--r--binutils-2.21/ld/testsuite/ld-s390/tlslib.s17
-rw-r--r--binutils-2.21/ld/testsuite/ld-s390/tlslib_64.s17
-rw-r--r--binutils-2.21/ld/testsuite/ld-s390/tlspic.dd189
-rw-r--r--binutils-2.21/ld/testsuite/ld-s390/tlspic.rd142
-rw-r--r--binutils-2.21/ld/testsuite/ld-s390/tlspic.sd16
-rw-r--r--binutils-2.21/ld/testsuite/ld-s390/tlspic.td16
-rw-r--r--binutils-2.21/ld/testsuite/ld-s390/tlspic1.s208
-rw-r--r--binutils-2.21/ld/testsuite/ld-s390/tlspic1_64.s224
-rw-r--r--binutils-2.21/ld/testsuite/ld-s390/tlspic2.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-s390/tlspic2_64.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-s390/tlspic_64.dd202
-rw-r--r--binutils-2.21/ld/testsuite/ld-s390/tlspic_64.rd142
-rw-r--r--binutils-2.21/ld/testsuite/ld-s390/tlspic_64.sd21
-rw-r--r--binutils-2.21/ld/testsuite/ld-s390/tlspic_64.td16
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/align.exp53
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/align.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/align.t8
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/align2.t7
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/align2a.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/align2a.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/align2b.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/align2b.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/align2c.d2
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/align2c.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/alignof.exp67
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/alignof.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/alignof.t15
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/assert.exp34
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/assert.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/assert.t10
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/cross1.c6
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/cross1.t10
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/cross2.c5
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/cross2.t6
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/cross3.c7
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/cross3.t10
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/cross4.c7
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/crossref.exp134
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/data.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/data.exp30
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/data.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/data.t11
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/default-script.exp34
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/default-script.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/default-script.t7
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/default-script1.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/default-script2.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/default-script3.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/default-script4.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/defined.exp69
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/defined.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/defined.t7
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/defined2.d22
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/defined2.t9
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/defined3.d35
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/defined3.t15
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/dynamic-sections-1.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/dynamic-sections-2.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/dynamic-sections.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/dynamic-sections.exp27
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/dynamic-sections.t11
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/empty-address-1.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/empty-address-1.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/empty-address-1.t11
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/empty-address-2.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/empty-address-2a.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/empty-address-2a.t7
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/empty-address-2b.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/empty-address-2b.t11
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/empty-address-3.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/empty-address-3a.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/empty-address-3a.t10
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/empty-address-3b.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/empty-address-3b.t11
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/empty-address-3c.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/empty-address-3c.t11
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/empty-address.exp32
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/empty-aligned.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/empty-aligned.exp29
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/empty-aligned.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/empty-aligned.t29
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/empty-orphan.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/empty-orphan.exp37
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/empty-orphan.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/empty-orphan.t22
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/expr.exp23
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/expr1.d2
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/expr1.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/expr1.t12
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/extern.exp71
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/extern.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/extern.t14
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/include-1.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/include-1.t4
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/include-data.t4
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/include-mem.t5
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/include-ram.t1
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/include-sections.t5
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/include-subdata.t2
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/include.exp40
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/include.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/map-address.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/map-address.exp47
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/map-address.t11
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/memory.t33
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/overlay-size-map.d29
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/overlay-size.d32
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/overlay-size.exp34
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/overlay-size.s25
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/overlay-size.t64
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/phdrs.exp68
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/phdrs.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/phdrs.t16
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/phdrs2.exp74
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/phdrs2.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/phdrs2.t23
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/phdrs3.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/phdrs3.exp39
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/phdrs3.t16
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/phdrs3a.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/phdrs3a.t15
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/provide-1.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/provide-1.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/provide-1.t12
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/provide-2.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/provide-2.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/provide-2.t10
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/provide-3.d3
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/provide-3.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/provide-3.t11
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/provide.exp45
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/region-alias-1.t7
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/region-alias-2.t6
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/region-alias-3.t6
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/region-alias-4.t6
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-at.exp33
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-at.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-at1.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-at1.t13
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-at2.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-at2.t14
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-at3.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-at3.t13
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-at4.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-at4.t14
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-at5.d20
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-at5.s14
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-at5.t26
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-over.exp54
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-over.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-over1.d35
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-over1.t13
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-over2.d35
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-over2.t14
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-over3.d36
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-over3.t15
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-over4.d36
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-over4.t14
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-over5.d36
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-over5.t14
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-over6.d36
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-over6.t14
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-over7.d36
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-over7.t14
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-over8-ok.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-over8.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/rgn-over8.t13
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/script.exp138
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/script.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/script.t16
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/scriptm.t10
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/section-match-1.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/section-match-1.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/section-match-1.t16
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/section-match.exp22
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/size-1.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/size-1.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/size-1.t10
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/size-2.d18
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/size-2.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/size-2.t21
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/size.exp41
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sizeof.exp74
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sizeof.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sizeof.t17
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort.exp40
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort.t5
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_b_a-1.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_b_a-1.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_b_a.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_b_a.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_b_a.t5
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_a-1.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_a-2.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_a-3.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_a.t5
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_n-1.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_n-2.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_n-3.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_n.t5
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_b_n-1.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_b_n-1.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_b_n.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_b_n.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_b_n.t5
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_a-1.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_a-2.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_a-3.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_a.t5
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_n-1.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_n-2.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_n-3.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_n.t5
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_n_a-a.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_n_a-b.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_no-1.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_no-2.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/sort_no.t5
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/weak.exp81
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/weak.t12
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/weak1.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-scripts/weak2.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-selective/1.c12
-rw-r--r--binutils-2.21/ld/testsuite/ld-selective/2.c19
-rw-r--r--binutils-2.21/ld/testsuite/ld-selective/3.cc46
-rw-r--r--binutils-2.21/ld/testsuite/ld-selective/4.cc34
-rw-r--r--binutils-2.21/ld/testsuite/ld-selective/5.cc38
-rw-r--r--binutils-2.21/ld/testsuite/ld-selective/keepdot.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-selective/keepdot.ld5
-rw-r--r--binutils-2.21/ld/testsuite/ld-selective/keepdot.s17
-rw-r--r--binutils-2.21/ld/testsuite/ld-selective/keepdot0.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-selective/keepdot0.ld6
-rw-r--r--binutils-2.21/ld/testsuite/ld-selective/sel-dump.exp35
-rw-r--r--binutils-2.21/ld/testsuite/ld-selective/selective.exp239
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/arch/arch.exp257
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/arch/arch_expected.txt453
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/arch/sh-dsp.s272
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/arch/sh.s155
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/arch/sh2.s166
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/arch/sh2a-nofpu-or-sh3-nommu.s168
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/arch/sh2a-nofpu-or-sh4-nommu-nofpu.s169
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/arch/sh2a-nofpu.s221
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/arch/sh2a-or-sh3e.s205
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/arch/sh2a-or-sh4.s233
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/arch/sh2a.s289
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/arch/sh2e.s202
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/arch/sh3-dsp.s287
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/arch/sh3-nommu.s180
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/arch/sh3.s181
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/arch/sh3e.s218
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/arch/sh4-nofpu.s194
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/arch/sh4-nommu-nofpu.s193
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/arch/sh4.s263
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/arch/sh4a-nofpu.s201
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/arch/sh4a.s271
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/arch/sh4al-dsp.s343
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-funcdesc-shared.d32
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-funcdesc-shared.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-funcdesc-static.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-funcdesc-static.s14
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesc-shared.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesc-shared.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesc-static.d26
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesc-static.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesci20-shared.d24
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesci20-shared.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesci20-static.d24
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesci20-static.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-goti20-shared.d24
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-goti20-shared.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-goti20-static.d22
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-goti20-static.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesc-shared.d32
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesc-shared.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesc-static.d27
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesc-static.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesci20-shared.d29
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesci20-shared.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesci20-static.d24
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesci20-static.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-gotoffi20-shared.d30
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-gotoffi20-shared.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-gotoffi20-static.d22
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-gotoffi20-static.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-plt-be.d75
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-plt-le.d74
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-plt.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-plti20-be.d63
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-plti20-le.d63
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-stack-default.d19
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-stack-size.d19
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/fdpic-stack.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/ld-r-1.d24
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/ldr1.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/ldr2.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/rd-sh.exp71
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/refdbg-0-dso.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/refdbg-1.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/refdbg.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/refdbglib.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/reloc1.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/reloc1.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh-vxworks.exp62
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh.exp168
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh1.s13
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh2.c120
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/abi32.sd16
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/abi32.xd45
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/abi64.sd20
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/abi64.xd44
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/abixx-noexp.sd12
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/cmpct1.sd9
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/cmpct1.xd36
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/crange-1.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2a.s22
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2b.s39
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2c.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2d.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2e.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2f.s21
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2g.s26
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2h.s17
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2i.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/crange1.rd46
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/crange2.rd54
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/crange3-cmpct.rd77
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/crange3-media.rd77
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/crange3.dd80
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/crange3.rd58
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/crangerel1.rd44
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/crangerel2.rd59
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/dlsection-1.s17
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/dlsection.sd9
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/endian.dbd11
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/endian.dld11
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/endian.ld6
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/endian.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/endian.sbd5
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/endian.sld6
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/gotplt.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/gotplt.map4
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/gotplt.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/init-cmpct.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/init-media.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/init.s18
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/init64.d14
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/mix1-noexp.sd14
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/mix1.sd16
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/mix1.xd42
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/mix2-noexp.sd16
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/mix2.sd17
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/mix2.xd52
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/rd-sh64.exp44
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/rel-1.s48
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/rel-2.s46
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/rel32.xd92
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/rel64.xd92
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/relax.exp155
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/relax1.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/relax2.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/relax3.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/relax4.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/reldl-1.s171
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/reldl-2.s156
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/reldl32.rd358
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/reldl64.rd360
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/relfail.exp219
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/relfail.s36
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/sh64-1.s20
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/sh64-2.s27
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/sh64.exp137
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/shcmp-1.s15
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/shdl-1.s359
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/shdl-2.s286
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/shdl32.xd123
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/shdl64.sd87
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/shdl64.xd123
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/shmix-1.s33
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/shmix-2.s28
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/shmix-3.s32
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/stobin-0-dso.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/stobin-1.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/stobin.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sh64/stolib.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/shared-1.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/shared-2.d20
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/start.s27
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sub2l-1.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/sub2l.s26
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/textrel1.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/textrel2.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/tlsbin-0-dso.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/tlsbin-1.d308
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/tlsbin-2.d79
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/tlsbin-3.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/tlsbin-4.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/tlsbin.s90
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/tlsbinpic.s206
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/tlslib.s20
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/tlspic-1.d292
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/tlspic-2.d79
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/tlspic-3.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/tlspic-4.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/tlspic1.s267
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/tlspic2.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/tlstpoff-1.d31
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/tlstpoff-2.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/tlstpoff1.s23
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/tlstpoff2.s26
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/vxworks1-le.dd73
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/vxworks1-lib-le.dd76
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/vxworks1-lib.dd76
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/vxworks1-lib.nd9
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/vxworks1-lib.rd12
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/vxworks1-lib.s61
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/vxworks1-lib.td3
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/vxworks1-static.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/vxworks1.dd73
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/vxworks1.ld30
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/vxworks1.rd19
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/vxworks1.s32
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/vxworks2-static.sd9
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/vxworks2.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/vxworks2.sd13
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/vxworks3-le.dd34
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/vxworks3-lib-le.dd12
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/vxworks3-lib.dd12
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/vxworks3-lib.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/vxworks3.dd34
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/vxworks3.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/vxworks4.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/vxworks4a.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/vxworks4b.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/weak1.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-sh/weak1.s19
-rw-r--r--binutils-2.21/ld/testsuite/ld-shared/elf-offset.ld170
-rw-r--r--binutils-2.21/ld/testsuite/ld-shared/main.c90
-rw-r--r--binutils-2.21/ld/testsuite/ld-shared/sh1.c160
-rw-r--r--binutils-2.21/ld/testsuite/ld-shared/sh2.c22
-rw-r--r--binutils-2.21/ld/testsuite/ld-shared/shared.dat16
-rw-r--r--binutils-2.21/ld/testsuite/ld-shared/shared.exp337
-rw-r--r--binutils-2.21/ld/testsuite/ld-shared/sun4.dat16
-rw-r--r--binutils-2.21/ld/testsuite/ld-shared/symbolic.dat8
-rw-r--r--binutils-2.21/ld/testsuite/ld-shared/xcoff.dat10
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/gotop32.dd34
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/gotop32.rd71
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/gotop32.s37
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/gotop32.sd10
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/gotop32.td12
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/gotop64.dd34
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/gotop64.rd71
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/gotop64.s37
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/gotop64.sd10
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/gotop64.td12
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/sparc.exp135
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlsg32.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlsg32.sd10
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlsg64.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlsg64.sd10
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlslib.s20
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlsnopic.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlspic.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunbin32.dd273
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunbin32.rd126
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunbin32.s114
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunbin32.sd11
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunbin32.td19
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunbin64.dd277
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunbin64.rd126
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunbin64.s118
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunbin64.sd12
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunbin64.td15
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunbinpic32.s183
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunbinpic64.s182
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic32.dd84
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic32.rd93
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic32.s77
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic32.sd12
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic64.dd88
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic64.rd95
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic64.s81
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic64.sd14
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunpic32.dd220
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunpic32.rd135
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunpic32.s228
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunpic32.sd15
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunpic32.td16
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunpic64.dd220
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunpic64.rd135
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunpic64.s228
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunpic64.sd20
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/tlssunpic64.td16
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/vxworks1-lib.dd45
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/vxworks1-lib.nd9
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/vxworks1-lib.rd12
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/vxworks1-lib.s44
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/vxworks1-lib.td3
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/vxworks1-static.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/vxworks1.dd52
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/vxworks1.ld30
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/vxworks1.rd22
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/vxworks1.s25
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/vxworks2-static.sd9
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/vxworks2.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-sparc/vxworks2.sd13
-rw-r--r--binutils-2.21/ld/testsuite/ld-spu/ear.d30
-rw-r--r--binutils-2.21/ld/testsuite/ld-spu/ear.s28
-rw-r--r--binutils-2.21/ld/testsuite/ld-spu/embed.rd16
-rw-r--r--binutils-2.21/ld/testsuite/ld-spu/fixup.d20
-rw-r--r--binutils-2.21/ld/testsuite/ld-spu/fixup.s24
-rw-r--r--binutils-2.21/ld/testsuite/ld-spu/icache1.d193
-rw-r--r--binutils-2.21/ld/testsuite/ld-spu/icache1.s111
-rw-r--r--binutils-2.21/ld/testsuite/ld-spu/ovl.d179
-rw-r--r--binutils-2.21/ld/testsuite/ld-spu/ovl.lnk7
-rw-r--r--binutils-2.21/ld/testsuite/ld-spu/ovl.s82
-rw-r--r--binutils-2.21/ld/testsuite/ld-spu/ovl1.lnk9
-rw-r--r--binutils-2.21/ld/testsuite/ld-spu/ovl2.d145
-rw-r--r--binutils-2.21/ld/testsuite/ld-spu/ovl2.lnk10
-rw-r--r--binutils-2.21/ld/testsuite/ld-spu/ovl2.s52
-rw-r--r--binutils-2.21/ld/testsuite/ld-spu/pic.d105
-rw-r--r--binutils-2.21/ld/testsuite/ld-spu/pic.s68
-rw-r--r--binutils-2.21/ld/testsuite/ld-spu/picdef.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-spu/spu.exp94
-rw-r--r--binutils-2.21/ld/testsuite/ld-srec/sr1.c25
-rw-r--r--binutils-2.21/ld/testsuite/ld-srec/sr2.c18
-rw-r--r--binutils-2.21/ld/testsuite/ld-srec/sr3.cc127
-rw-r--r--binutils-2.21/ld/testsuite/ld-srec/srec.exp405
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x-c62x.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x-c64x+.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x-c64x.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x-c674x.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x-c67x+.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x-c67x.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+-c62x.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+-c64x+.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+-c64x.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+-c674x.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+-c67x+.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+-c67x.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x-c62x.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x-c64x+.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x-c64x.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x-c674x.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x-c67x+.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x-c67x.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x-c62x.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x-c64x+.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x-c64x.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x-c674x.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x-c67x+.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x-c67x.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+-c62x.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+-c64x+.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+-c64x.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+-c674x.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+-c67x+.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+-c67x.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x-c62x.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x-c64x+.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x-c64x.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x-c674x.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x-c67x+.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x-c67x.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16-16.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16-4.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16-416.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16-48.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16-8.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16-816.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4-16.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4-4.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4-416.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4-48.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4-8.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4-816.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416-16.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416-4.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416-416.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416-48.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416-8.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416-816.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48-16.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48-4.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48-416.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48-48.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48-8.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48-816.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8-16.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8-4.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8-416.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8-48.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8-8.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8-816.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816-16.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816-4.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816-416.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816-48.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816-8.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816-816.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-compatibility-gnu-gnu.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-compatibility-gnu-other.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-compatibility-gnu.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-compatibility-other-gnu.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-compatibility-other-other.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-compatibility-other.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-10-10.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-10-11.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-10-none.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-10.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-11-10.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-11-11.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-11-none.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-11.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-none-10.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-none-11.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-none-none.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-none.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-dsbt-0.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-dsbt-00.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-dsbt-01.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-dsbt-1.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-dsbt-10.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-dsbt-11.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-pic-0.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-pic-00.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-pic-01.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-pic-1.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-pic-10.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-pic-11.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-0.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-00.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-01.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-02.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-1.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-10.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-11.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-12.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-2.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-20.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-21.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-22.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-16-16.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-16-8.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-16-816.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-16.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-8-16.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-8-8.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-8-816.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-8.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-816-16.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-816-8.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-816-816.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-816.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-0.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-00.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-01.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-02.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-1.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-10.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-11.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-12.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-2.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-20.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-21.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-22.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-global-rel.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-global-rel.s21
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-global.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-global.s23
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-local-1.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-local-2.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-local-r-rel.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-local-r.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-local-rel.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-local.d12
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/generic.ld8
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-global-rel.d20
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-global-rel.s14
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-global.d26
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-global.s20
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-1-rel.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-1.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-2-rel.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-2.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-r-rel.d23
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-r.d27
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-rel.d19
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local.d21
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-global-rel.d20
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-global.d20
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-global.s18
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local-1.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local-2.s16
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local-r-rel-rela.d62
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local-r-rel.d62
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local-r.d62
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local-rel.d44
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local.d44
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs-s16-1.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs-s16-2.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs-s16.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs16-1.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs16-2.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs16.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs8-1.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs8-2.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs8.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s10-1.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s10-2.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s10.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s12-1.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s12-2.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s12.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s21-1.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s21-2.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s21.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s7-1.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s7-2.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s7.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-s16-1.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-s16-2.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-s16.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-b-1.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-b-2.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-b.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-h-1.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-h-2.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-h.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-w-1.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-w-2.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-w.s3
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-global-rel.d24
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-global-rel.s24
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-global.d27
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-global.s27
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-1-rel.s21
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-1.s24
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-2-rel.s21
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-2.s24
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-r-rel.d55
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-r.d67
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-rel.d35
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local.d41
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/sbr.ld9
-rw-r--r--binutils-2.21/ld/testsuite/ld-tic6x/tic6x.exp7
-rw-r--r--binutils-2.21/ld/testsuite/ld-undefined/dummy.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-undefined/entry-1.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-undefined/entry-2.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-undefined/entry-3.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-undefined/entry-4.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-undefined/entry-5.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-undefined/entry-6.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-undefined/entry-7.d5
-rw-r--r--binutils-2.21/ld/testsuite/ld-undefined/entry.exp35
-rw-r--r--binutils-2.21/ld/testsuite/ld-undefined/entry.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-undefined/undefined.c10
-rw-r--r--binutils-2.21/ld/testsuite/ld-undefined/undefined.exp144
-rw-r--r--binutils-2.21/ld/testsuite/ld-undefined/weak-undef.exp83
-rw-r--r--binutils-2.21/ld/testsuite/ld-undefined/weak-undef.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-undefined/weak-undef.t9
-rw-r--r--binutils-2.21/ld/testsuite/ld-v850/split-lo16.d26
-rw-r--r--binutils-2.21/ld/testsuite/ld-v850/split-lo16.ld11
-rw-r--r--binutils-2.21/ld/testsuite/ld-v850/split-lo16.s20
-rw-r--r--binutils-2.21/ld/testsuite/ld-v850/v850.exp21
-rw-r--r--binutils-2.21/ld/testsuite/ld-versados/t1-1.robin0 -> 3840 bytes
-rw-r--r--binutils-2.21/ld/testsuite/ld-versados/t1-2.robin0 -> 256 bytes
-rw-r--r--binutils-2.21/ld/testsuite/ld-versados/t1.ld281
-rw-r--r--binutils-2.21/ld/testsuite/ld-versados/t1.ook133
-rw-r--r--binutils-2.21/ld/testsuite/ld-versados/t2-1.robin0 -> 256 bytes
-rw-r--r--binutils-2.21/ld/testsuite/ld-versados/t2-2.robin0 -> 2304 bytes
-rw-r--r--binutils-2.21/ld/testsuite/ld-versados/t2-3.robin0 -> 1024 bytes
-rw-r--r--binutils-2.21/ld/testsuite/ld-versados/t2.ld281
-rw-r--r--binutils-2.21/ld/testsuite/ld-versados/t2.ook99
-rw-r--r--binutils-2.21/ld/testsuite/ld-versados/versados.exp102
-rw-r--r--binutils-2.21/ld/testsuite/ld-vxworks/plt-mips1.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-vxworks/plt-mips1.s1
-rw-r--r--binutils-2.21/ld/testsuite/ld-vxworks/rpath-1.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-vxworks/rpath-1.s2
-rw-r--r--binutils-2.21/ld/testsuite/ld-vxworks/tls-1.d25
-rw-r--r--binutils-2.21/ld/testsuite/ld-vxworks/tls-1.s19
-rw-r--r--binutils-2.21/ld/testsuite/ld-vxworks/tls-2.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-vxworks/tls-2.s19
-rw-r--r--binutils-2.21/ld/testsuite/ld-vxworks/tls-3.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-vxworks/tls-3.s34
-rw-r--r--binutils-2.21/ld/testsuite/ld-vxworks/vxworks.exp27
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/abs-l1om.d11
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/abs.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/compressed1.d9
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/compressed1.s176
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/discarded1.d3
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/discarded1.s13
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/discarded1.t7
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/dwarfreloc.exp86
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/dwarfreloc.rd17
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/dwarfreloc1.s101
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/dwarfreloc2.s94
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/hidden1.d3
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/hidden1.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/hidden2.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/hidden2.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/hidden3.d3
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/hidden3.s8
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/line.exp57
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/mixed1a.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/mixed1b.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/mixed2a.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/mixed2b.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/nogot1.d8
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/nogot1.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/nogot2.d7
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/nogot2.s4
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/pcrel16.d15
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/pcrel8.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/protected1.d3
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/protected1.s13
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/protected2-l1om.d17
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/protected2.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/protected2.s13
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/protected3-l1om.d16
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/protected3.d13
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/protected3.s15
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/split-by-file.rd17
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/split-by-file1.s7
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/split-by-file2.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsbin.dd310
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsbin.rd147
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsbin.s97
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsbin.sd12
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsbin.td16
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsbindesc.dd301
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsbindesc.rd138
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsbindesc.s128
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsbindesc.sd12
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsbindesc.td16
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsbinpic.s146
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsdesc.dd200
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsdesc.pd20
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsdesc.rd160
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsdesc.s157
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsdesc.sd23
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsdesc.td16
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsg.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsg.sd10
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsgd1.dd14
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsgd1.s15
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsgd2.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsgd2.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsgd3.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsgd3.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsgdesc.dd163
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsgdesc.rd104
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsgdesc.s106
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsie1.dd16
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsie1.s14
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsie2.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsie2.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsie3.d4
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsie3.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsld1.dd13
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsld1.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsle1.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlsle1.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlslib.s18
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlspic.dd230
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlspic.rd144
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlspic.sd19
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlspic.td16
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlspic1.s187
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlspic2.s11
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlspie1.d6
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/tlspie1.s58
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/undefined.s154
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/unique1.d10
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/unique1.s9
-rw-r--r--binutils-2.21/ld/testsuite/ld-x86-64/x86-64.exp143
-rw-r--r--binutils-2.21/ld/testsuite/ld-xc16x/absrel.d28
-rw-r--r--binutils-2.21/ld/testsuite/ld-xc16x/absrel.s31
-rw-r--r--binutils-2.21/ld/testsuite/ld-xc16x/offset.d18
-rw-r--r--binutils-2.21/ld/testsuite/ld-xc16x/offset.s13
-rw-r--r--binutils-2.21/ld/testsuite/ld-xc16x/pcreloc.d34
-rw-r--r--binutils-2.21/ld/testsuite/ld-xc16x/pcreloc.s27
-rw-r--r--binutils-2.21/ld/testsuite/ld-xc16x/pcrelocl.d34
-rw-r--r--binutils-2.21/ld/testsuite/ld-xc16x/xc16x.exp68
-rw-r--r--binutils-2.21/ld/testsuite/ld-xstormy16/external.s5
-rw-r--r--binutils-2.21/ld/testsuite/ld-xstormy16/pcrel.d33
-rw-r--r--binutils-2.21/ld/testsuite/ld-xstormy16/pcrel.s31
-rw-r--r--binutils-2.21/ld/testsuite/ld-xstormy16/xstormy16.exp41
-rw-r--r--binutils-2.21/ld/testsuite/ld-xtensa/coalesce.exp100
-rw-r--r--binutils-2.21/ld/testsuite/ld-xtensa/coalesce.t6
-rw-r--r--binutils-2.21/ld/testsuite/ld-xtensa/coalesce1.s15
-rw-r--r--binutils-2.21/ld/testsuite/ld-xtensa/coalesce2.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-xtensa/lcall.exp114
-rw-r--r--binutils-2.21/ld/testsuite/ld-xtensa/lcall.t6
-rw-r--r--binutils-2.21/ld/testsuite/ld-xtensa/lcall1.s10
-rw-r--r--binutils-2.21/ld/testsuite/ld-xtensa/lcall2.s6
-rw-r--r--binutils-2.21/ld/testsuite/ld-xtensa/tlsbin.dd65
-rw-r--r--binutils-2.21/ld/testsuite/ld-xtensa/tlsbin.rd118
-rw-r--r--binutils-2.21/ld/testsuite/ld-xtensa/tlsbin.s98
-rw-r--r--binutils-2.21/ld/testsuite/ld-xtensa/tlsbin.sd14
-rw-r--r--binutils-2.21/ld/testsuite/ld-xtensa/tlsbin.td14
-rw-r--r--binutils-2.21/ld/testsuite/ld-xtensa/tlslib.s18
-rw-r--r--binutils-2.21/ld/testsuite/ld-xtensa/tlspic.dd81
-rw-r--r--binutils-2.21/ld/testsuite/ld-xtensa/tlspic.rd142
-rw-r--r--binutils-2.21/ld/testsuite/ld-xtensa/tlspic.sd17
-rw-r--r--binutils-2.21/ld/testsuite/ld-xtensa/tlspic.td16
-rw-r--r--binutils-2.21/ld/testsuite/ld-xtensa/tlspic1.s120
-rw-r--r--binutils-2.21/ld/testsuite/ld-xtensa/tlspic2.s12
-rw-r--r--binutils-2.21/ld/testsuite/ld-xtensa/xtensa.exp54
-rw-r--r--binutils-2.21/ld/testsuite/lib/ld-lib.exp1808
4138 files changed, 350240 insertions, 0 deletions
diff --git a/binutils-2.21/ld/ChangeLog b/binutils-2.21/ld/ChangeLog
new file mode 100644
index 0000000..baeed00
--- /dev/null
+++ b/binutils-2.21/ld/ChangeLog
@@ -0,0 +1,1130 @@
+2010-11-30 Joel Sherrill <joel.sherrill@oarcorp.com>
+
+ * configure.tgt: Add sparc64-rtems.
+
+2010-11-26 Alan Modra <amodra@gmail.com>
+
+ * po/ja.po: Update.
+
+2010-11-25 Alan Modra <amodra@gmail.com>
+
+ * po/bg.po: Update.
+ * po/es.po: Update.
+ * po/fi.po: Update.
+ * po/ja.po: New.
+ * po/zh_CN.po: Update.
+
+2010-11-25 Jan Hubicka <hubicka@ucw.cz>
+
+ * scripttempl/elf.sc: Group .text.exit, text.startup and .text.hot
+ sections.
+
+2010-11-23 Matthias Klose <doko@ubuntu.com>
+
+ * configure.ac: For --enable-gold, handle value `default' instead of
+ `both*'. Always install ld as ld.gold, install as ld if gold is
+ the default.
+ * configure: Regenerate.
+
+2010-11-19 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * plugin.c (is_visible_from_outside): New function.
+ (get_symbols): Use it.
+
+2010-11-05 Tristan Gingold <gingold@adacore.com>
+
+ * po/ld.pot: Regenerate
+ * po/POTFILES.in: Regenerate
+
+2010-11-05 Tristan Gingold <gingold@adacore.com>
+
+ * NEWS: Add marker for 2.21.
+
+2010-11-05 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * plugin.h (plugin_active_plugins_p): New prototype.
+ (is_ir_dummy_bfd): Delete prototype.
+ * plugin.c: Fix formatting issues.
+ (is_ir_dummy_bfd): Make static.
+ (plugin_active_plugins_p): New function.
+ * ldfile.c (ldfile_try_open_bfd): Use it to save work if no plugins
+ are loaded. Always close file descriptor after claim handler returns.
+ * ldmain.c (add_archive_element): Likewise.
+
+2010-11-05 Alan Modra <amodra@gmail.com>
+
+ * ldlang.c (lang_add_section): Distinguish ELF treatment of NOLOAD.
+ (map_input_to_output_sections): Likewise.
+ (lang_size_sections_1): Likewise.
+ (IGNORE_SECTION): Don't test SEC_NEVER_LOAD.
+ (lang_check_section_addresses): Likewise.
+
+2010-11-04 Kai Tietz <kai.tietz@onevision.com>
+
+ * scripttempl/pe.sc (.debug_types): New.
+ * scripttempl/pep.sc: Likewise.
+
+2010-11-04 Alan Modra <amodra@gmail.com>
+
+ * plugin.c (is_ir_dummy_bfd): Don't segfault on NULL abfd.
+
+2010-11-03 Nick Clifton <nickc@redhat.com>
+
+ PR ld/12001
+ * ldlang.c (ldlang_def_chain_list): New variable. Contains a list
+ of symbols defined via the --defsym command line option and
+ currently waiting assignment.
+ (insert_defined): Add a defined symbol to the symbol table.
+ (ldlang_add_def): Add a entry to the ldlang_def_chain_list.
+ (lang_place_defineds): Walk ldlang_def_chain_list defining the
+ symbols.
+ (lang_process): Call lang_place_defineds.
+ (lang_add_assignment): If the assignment has come from a --defsym
+ command line option then call lang_add_def.
+
+2010-11-03 Alan Modra <amodra@gmail.com>
+
+ * Makefile.am (eelf64hppa.c): Correct dependencies.
+ * Makefile.in: Regenerate.
+
+2010-11-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ * scripttempl/armbpabi.sc: Include compressed DWARF debug
+ sections.
+ * scripttempl/avr.sc: Likewise.
+ * scripttempl/elf32cr16.sc: Likewise.
+ * scripttempl/elf32crx.sc: Likewise.
+ * scripttempl/elf32msp430.sc: Likewise.
+ * scripttempl/elf32msp430_3.sc: Likewise.
+ * scripttempl/elf32sh-symbian.sc: Likewise.
+ * scripttempl/elf64hppa.sc: Likewise.
+ * scripttempl/elf_chaos.sc: Likewise.
+ * scripttempl/elfd10v.sc: Likewise.
+ * scripttempl/elfd30v.sc: Likewise.
+ * scripttempl/elfi370.sc: Likewise.
+ * scripttempl/elfm68hc11.sc: Likewise.
+ * scripttempl/elfm68hc12.sc: Likewise.
+ * scripttempl/elfxtensa.sc: Likewise.
+ * scripttempl/ip2k.sc: Likewise.
+ * scripttempl/iq2000.sc: Likewise.
+ * scripttempl/mep.sc: Likewise.
+ * scripttempl/mmo.sc: Likewise.
+ * scripttempl/v850.sc: Likewise.
+ * scripttempl/xstormy16.sc: Likewise.
+
+2010-10-29 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ldfile.c (ldfile_try_open_bfd): Set BFD_DECOMPRESS after
+ bfd_openr returns.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_try_needed): Likewise.
+
+ * scripttempl/elf.sc: Include compressed DWARF debug sections.
+
+2010-10-28 Alan Modra <amodra@gmail.com>
+
+ * ldfile.c (find_scripts_dir): Don't look in absolute SCRIPTDIR.
+
+2010-10-28 Matthias Klose <doko@ubuntu.com>
+
+ * ld.texinfo: Add directory section for info document.
+ * ldint.texinfo: Likewise.
+
+2010-10-28 Alan Modra <amodra@gmail.com>
+
+ * emultempl/ppc64elf.em (gld${EMULATION_NAME}_new_vers_pattern): For
+ --no-undefined-version, don't report dot sym versions added by ld.
+
+2010-10-28 Alan Modra <amodra@gmail.com>
+
+ * ldlang.h (ldlang_add_undef): Add cmdline param.
+ * ldlang.c (undef_from_cmdline): New var.
+ (ldlang_add_undef): Add cmdline param. Set undef_from_cmdline.
+ (lang_end): Really require -e or -u from command line on
+ relocatable --gc-sections.
+ * ldemul.c (after_parse_default): Adjust ldlang_add_undef call.
+ * ldgram.y (extern_name_list_body): Likewise.
+ * lexsup.c (parse_args): Likewise.
+ * emultempl/aix.em (gld${EMULATION_NAME}_read_file): Likewise.
+
+2010-10-25 Alan Modra <amodra@gmail.com>
+
+ * plugin.c (plugin_get_ir_dummy_bfd): Set bfd_use_reserved_id.
+ Formatting.
+
+2010-10-22 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * emulparams/elf32_sparc_sol2.sh (OUTPUT_FORMAT): Set to
+ elf32-sparc-sol2.
+ * emulparams/elf64_sparc_sol2.sh (OUTPUT_FORMAT): Set to
+ elf64-sparc-sol2.
+
+2010-10-22 Alan Modra <amodra@gmail.com>
+
+ * ldwrite.c (build_link_order <lang_data_statement_enum>): Don't
+ output when section has no contents.
+ (build_link_order <lang_reloc_statement_enum>): Likewise.
+
+2010-10-21 Joseph Myers <joseph@codesourcery.com>
+
+ * emulparams/elf32_tic6x_le.sh (ATTRS_SECTIONS): Use
+ .c6xabi.attributes, not __TI_build_attributes.
+
+2010-10-20 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * plugin.c (get_symbols): Check symbol type correctly.
+
+2010-10-15 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * configure.in: If <dlfcn.h> can't be found, try for <Windows.h>
+ * configure: Regenerate.
+ * config.in: Likewise.
+ * plugin.c [!HAVE_DLFCN_H && HAVE_WINDOWS_H] (dlopen): Provide
+ trival LoadLibrary-based replacement for Windows systems.
+ [!HAVE_DLFCN_H && HAVE_WINDOWS_H] (dlsym): Likewise trivial
+ replacement based on GetProcAddress.
+ [!HAVE_DLFCN_H && HAVE_WINDOWS_H] (dlsym): Likewise FreeLibrary.
+ * sysdep.h: Don't infer presence of <dlfcn.h> from ENABLE_PLUGINS
+ anymore, use its own guard.
+
+2010-10-15 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * plugin.c (add_input_file): Take copy of input string.
+ (add_input_library): Likewise.
+ (set_extra_library_path): Likewise.
+
+2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ Apply LD plugin patch series (part 6/6).
+ * ldlang.c (load_symbols): Handle bfd subsitution when calling the
+ add_archive_element callback.
+ * ldmain.c (add_archive_element)[ENABLE_PLUGINS]: Offer the archive
+ member to the plugins and if claimed set "subsbfd" output parameter to
+ point to the dummy IR-only BFD.
+
+2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ Apply LD plugin patch series (part 5/6).
+ * plugin.c (asymbol_from_plugin_symbol): If the bfd is an ELF bfd,
+ find the elf symbol data and set the visibility in the st_other field.
+
+2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ Apply LD plugin patch series (part 4/6).
+ * ldlang.c (lang_process)[ENABLE_PLUGINS]: Move invocation of
+ plugin_call_all_symbols_read to before setting of gc_sym_list, and
+ open any new input files that may have been added during it.
+ * ldmain.c (multiple_definition)[ENABLE_PLUGINS]: Call out to
+ plugin_multiple_definition and let it have first say over what to do
+ with the clashing definitions.
+ * plugin.c (no_more_claiming): New boolean variable.
+ (plugin_cached_allow_multiple_defs): Likewise.
+ (add_input_file): Implement.
+ (add_input_library): Likewise.
+ (set_extra_library_path): Likewise.
+ (plugin_call_claim_file): Don't do anything when no_more_claiming set.
+ (plugin_call_all_symbols_read): Set it. Disable link info
+ "allow_multiple_definition" flag, but cache its value.
+ (plugin_multiple_definition): New function.
+ * plugin.h (plugin_multiple_definition): Add prototype.
+ * testplug.c (addfile_enum_t): New enumerated typedef.
+ (add_file_t): New struct typedef.
+ (addfiles_list): New variable.
+ (addfiles_tail_chain_ptr): Likewise.
+ (record_add_file): New function.
+ (parse_option): Parse "add:", "lib:" and "dir:" options and call it.
+ (onall_symbols_read): Iterate the list of new files, libs and dirs,
+ adding them.
+
+2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ Apply LD plugin patch series (part 3/6).
+ * ldmain.c (notice)[ENABLE_PLUGINS]: Call plugin_notice.
+ * plugin.c (non_ironly_hash): Add new bfd hash table.
+ (plugin_load_plugins): Exit early if no plugins to load. If plugins
+ do load successfully, set notice_all flag in link info.
+ (get_symbols): Implement.
+ (plugin_load_plugins): Exit early if no plugins to load, else after
+ loading plugins successfully enable notice_all mode.
+ (init_non_ironly_hash): Lazily init non_ironly_hash table.
+ (plugin_notice): Record symbols referenced from non-IR files in the
+ non_ironly_hash. Suppress tracing, cref generation and nocrossrefs
+ tracking for symbols from dummy IR bfds.
+ * plugin.h: Fix formatting.
+ (plugin_notice): Add prototype.
+ * testplug.c (dumpresolutions): New global var.
+ (parse_options): Accept "dumpresolutions".
+ (onall_symbols_read): Get syms and dump resolutions if it was given.
+
+2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ Apply LD plugin patch series (part 2/6).
+ * ldfile.c (ldfile_try_open_bfd)[ENABLE_PLUGINS]: Don't return early
+ during compat checks if they pass, instead offer any successfully
+ opened and accepted file to the plugin claim file hooks chain. Create
+ a dummy bfd to accept symbols added by the plugin, if the plugin
+ claims the file.
+ * ldlang.c (lang_process)[ENABLE_PLUGINS]: Call plugin all symbols
+ read hook chain before ldemul_after_open.
+ * ldlang.h (struct lang_input_statement_struct): Add new single-bit
+ 'claimed' flag.
+ * plugin.c (IRONLY_SUFFIX): New macro for dummy bfd file suffix.
+ (IRONLY_SUFFIX_LEN): Length of the above string.
+ (plugin_get_ir_dummy_bfd): New function to create the dummy bfd used
+ to store symbols for ir-only files.
+ (is_ir_dummy_bfd): New function to check if a bfd is ir-only.
+ (asymbol_from_plugin_symbol): New function converts symbol formats.
+ (add_symbols): Call it to convert plugin syms to bfd syms and add
+ them to the dummy bfd.
+ * plugin.h: Add missing include guards.
+ (plugin_get_ir_dummy_bfd): Add prototype.
+ (is_ir_dummy_bfd): Likewise.
+ * testplug.c (TV_MESSAGE): New helper macro.
+ (struct claim_file): New struct.
+ (claim_file_t): New typedef.
+ (tag_names[]): Make static and const.
+ (claimfiles_list): New variable.
+ (claimfiles_tail_chain_ptr): Likewise.
+ (last_claimfile): Likewise.
+ (record_claim_file): Record a file to claim on a singly-linked list.
+ (parse_symdefstr): Parse an ASCII representation of a symbol from a
+ plugin option into the fields of a struct ld_plugin_symbol.
+ (record_claimed_file_symbol): Use it to parse plugin option for
+ adding a symbol.
+ (parse_option): Parse claim file and add symbol options.
+ (dump_tv_tag): Use TV_MESSAGE.
+ (onload): Likewise.
+ (onclaim_file): Make static. Use TV_MESSAGE. Scan list of files to
+ claim and claim this file if required, adding any symbols specified.
+ (onall_symbols_read): Make static and use TV_MESSAGE.
+ (oncleanup): Likewise.
+
+2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ Apply LD plugin patch series (part 1/6).
+ * configure.in: Add AC_CHECKs for file io and dlfcn headers and
+ functions and AC_SEARCH for -ldl.
+ (enable_plugins): New shell variable set if above tests find dlopen
+ functionality.
+ (ENABLE_PLUGINS): Add related automake conditional.
+ * configure: Regenerate.
+ * config.in: Likewise.
+ * Makefile.am (PLUGIN_C): Declare plugin C source file, conditional
+ on ENABLE_PLUGINS being defined.
+ (PLUGIN_H): Likewise for header file.
+ (PLUGIN_OBJECT): Likewise for object file.
+ (PLUGIN_CFLAGS): Likewise -D flag required to compile plugin support.
+ (AM_CPPFLAGS): Use PLUGIN_CFLAGS.
+ (CFILES): Use PLUGIN_C.
+ (HFILES): Use PLUGIN_H.
+ (OFILES): Use PLUGIN_OBJECT.
+ (ld_new_SOURCES): Use PLUGIN_C.
+ (noinst_LTLIBRARIES)[ENABLE_PLUGINS]: Declare test plugin.
+ (libldtestplug_la_SOURCES)[ENABLE_PLUGINS]: Add automake definition
+ for test plugin.
+ (libldtestplug_la_CFLAGS)[ENABLE_PLUGINS]: Likewise.
+ (libldtestplug_la_LDFLAGS)[ENABLE_PLUGINS]: Likewise.
+ * Makefile.in: Regenerate.
+ * sysdep.h: Include stdarg.h, unistd.h and one of fcntl.h or
+ sys/file.h where available. Include dlfcn.h when ENABLE_PLUGINS.
+ (O_RDONLY): Supply default definition likewise to bfd's sysdep.h
+ (O_WRONLY): Likewise.
+ (O_RDWR): Likewise.
+ (O_ACCMODE): Likewise.
+ (O_BINARY): Likewise.
+ (SEEK_SET): Likewise.
+ (SEEK_CUR): Likewise.
+ (SEEK_END): Likewise.
+ * ldmisc.c (vfinfo): Make non-static. Add %p format char.
+ * ldmisc.h (vfinfo): Declare extern prototype.
+ * lexsup.c (enum option_values)[ENABLE_PLUGINS]: Add new entries for
+ OPTION_PLUGIN and OPTION_PLUGIN_OPT.
+ (ld_options[])[ENABLE_PLUGINS]: Add option data for the above two.
+ (parse_args)[ENABLE_PLUGINS]: Handle them, and load all plugins once
+ option parsing is complete.
+ * ldmain.c (main)[ENABLE_PLUGINS]: Call plugin cleanup hooks just
+ after lang_finish.
+ * plugin.c: New source file.
+ * plugin.h: Likewise new header.
+ * testplug.c: New source file.
+
+2010-10-12 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * emultempl/solaris2.em (elf_solaris2_before_allocation): Renamed
+ basever_syms to global_syms.
+ Emit global_syms into .dynamic section for all executables and
+ shared objects.
+ (elf_solaris2_after_allocation): New function.
+ (LDEMUL_AFTER_ALLOCATION): Use it.
+ * emulparams/solaris2.sh: New file.
+ * emulparams/elf32_sparc_sol2.sh: Use it.
+ * emulparams/elf64_sparc_sol2.sh: Likewise.
+ * emulparams/elf_i386_sol2.sh: Likewise.
+ * emulparams/elf_x86_64_sol2.sh: Likewise.
+ * Makefile.am (eelf32_sparc_sol2.c): Depend on
+ $(srcdir)/emulparams/solaris2.sh.
+ (eelf64_sparc_sol2.c): Likewise.
+ (eelf_x86_64_sol2.c): Likewise.
+ (eelf_i386_sol2.c): Likewise.
+ * Makefile.in: Regenerate.
+
+2010-10-06 Nick Clifton <nickc@redhat.com>
+
+ * ld.texinfo: Update description of computation of VMA and LMA
+ addresses for output sections.
+
+2010-10-06 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * Makefile.am (ALL_64_EMULATIONS): Fix typo in last commit.
+ * Makefile.in: Regenerate.
+
+ * Makefile.am (ALL_EMULATIONS): Rewrite in terms of ...
+ (ALL_EMULATION_SOURCES): ... this new variable.
+ (ALL_64_EMULATIONS): Rewrite in terms of ...
+ (ALL_64_EMULATION_SOURCES): ... this new variable.
+ (EXTRA_ld_new_SOURCES): Rewrite in terms of the _SOURCES
+ variables.
+ (eelf32microblaze.c): Fix indentation.
+ * Makefile.in: Regenerate.
+
+2010-10-04 Bernd Schmidt <bernds@codesourcery.com>
+
+ * emultempl/xtensaelf.em (replace_insn_sec_with_prop_sec): Use
+ _bfd_elf_single_rel_hdr.
+
+2010-10-01 Alan Modra <amodra@gmail.com>
+
+ PR ld/12066
+ * ldexp.c (fold_name): Treat absolute symbols as plain numbers.
+ * ld.texinfo (Expression Section): Don't say absolute symbols
+ are addresses.
+
+2010-09-29 Alan Modra <amodra@gmail.com>
+
+ * ldlang.c (lang_place_orphans): Zero vma when relocatable or non-load
+ section for orphans handled here.
+
+2010-09-27 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * configure: Regenerate.
+
+2010-09-23 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * scripttempl/armcoff.sc: Revert 2010-09-22 change.
+
+2010-09-23 Alan Modra <amodra@gmail.com>
+
+ * ldlang.c (lang_add_section): Don't copy SEC_RELOC from input
+ to output section on a final link.
+
+2010-09-22 Kai Tietz <kai.tietz@onevision.com>
+
+ * ldlang.c (lang_add_section): Allow for debugging
+ section to be marked as noload but to keep content.
+ (IGNORE_SECTION): Likewise.
+ (lang_check_section_addresses): Likewise.
+ * ldwrite.c (build_link_order): Likewise.
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_place_orphan): Add
+ idata to orphan set.
+ * emultempl/pep.em: Likewise.
+ * scripttempl/armcoff.sc: Separate idata
+ and add __IAT_start__ and __IAT_end__ labels.
+ * scripttempl/pe.sc: Likewise.
+ * scripttempl/pep.sc: Likewise.
+
+2010-09-20 David S. Miller <davem@davemloft.net>
+
+ * emulparams/elf32_sparc.sh: Set NOP to 0x01000000
+
+2010-09-16 Alan Modra <amodra@gmail.com>
+
+ * ld.texinfo (NOLOAD): Do not erroneously state that contents will
+ appear in output file.
+ * ldlang.c (lang_add_section): Clear SEC_HAS_CONTENTS on noload
+ unless SEC_COFF_SHARED_LIBRARY.
+ (map_input_to_output_sections): Don't set SEC_HAS_CONTENTS for noload
+ output sections.
+ (lang_size_sections_1): Don't test SEC_NEVER_LOAD when deciding
+ to update dot in region. Ditto when setting SEC_ALLOC if dot
+ advanced due to assignment.
+ * ldwrite.c (build_link_order): Don't test SEC_NEVER_LOAD.
+
+2010-09-15 Kai Tietz <kai.tietz@onevision.com>
+
+ * scripttempl/pep.sc: Add .xdata segment and
+ put into .pdata all segments beginning with .pdata.
+
+2010-09-10 Alan Modra <amodra@gmail.com>
+
+ PR ld/11931
+ * ldlang.h (lang_for_each_statement_worker): Declare.
+ * ldlang.c (lang_for_each_statement_worker): Make global. Don't
+ recurse into children of output_section_statement with constraint
+ set to -1.
+ (print_assignment): Handle NULL output_section->bfd_section.
+ (lang_size_sections_1): Ignore output section statement address
+ when constraint is -1.
+ * emultempl/xtensaelf.em (lang_for_each_statement_worker): Delete.
+
+2010-09-09 Tristan Gingold <gingold@adacore.com>
+
+ * NEWS: Add a entry for alpha-vms.
+
+2010-09-07 Andrew Burgess <aburgess@broadcom.com>
+
+ * ldwrite.c (clone_section): Call bfd_copy_private_section_data on
+ newly cloned section.
+
+2010-09-02 Richard Henderson <rth@redhat.com>
+
+ * configure.tgt (x86_64-*-mingw*): Add 32-bit pe emulations too.
+
+2010-08-31 Nick Clifton <nickc@redhat.com>
+
+ * ldlex.l (WILDCHAR): Add the caret and exclamation point
+ characters, so that they can be used inside globs.
+
+2010-08-31 Nick Clifton <nickc@redhat.com>
+
+ * ld.texinfo (MEMORY): Clarify the behaviour of the ! character in
+ a region's attributes.
+
+2010-08-31 Alan Modra <amodra@gmail.com>
+
+ * scripttempl/mmo.sc: Move assignment to "Main" inside .text
+ output section statement.
+
+2010-08-25 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/11946
+ * emultempl/elf32.em (_before_allocation): Check audit entry
+ only on ELF input.
+
+2010-08-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/11937
+ * emultempl/elf32.em (_after_open): Find one .eh_frame section
+ for --eh-frame-hdr.
+
+2010-08-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/11937
+ * emultempl/elf32.em (_after_open): Find an ELF input for
+ --build-id and --eh-frame-hdr.
+
+2010-08-20 Maciej W. Rozycki <macro@codesourcery.com>
+
+ * Makefile.am (eshlelf_fd.c): Correct the name of the tool
+ directory.
+ * Makefile.in: Regenerate.
+
+2010-08-20 Nick Clifton <nickc@redhat.com>
+
+ * emultempl/elf32.em (_after_open): Check for get_elf_backend_data
+ returning NULL.
+
+2010-08-19 Alan Modra <amodra@gmail.com>
+
+ * NEWS: Mention change in linker script expression evaluation.
+
+2010-08-19 Alan Modra <amodra@gmail.com>
+
+ * ld.texinfo (Expression Section): Detail expression evaluation.
+ (Builtin Functions <ADDR>): Correct.
+ (Builtin Functions <LOADADDR>): Don't mention LOADADDR normally
+ the same as ADDR.
+ (Builtin Functions <SEGMENT_START>): Typo fix.
+ * ldexp.c (new_number): New function.
+ (make_abs, exp_get_abs_int): Cope with NULL expld.result.section.
+ (fold_unary <'~', '!', '-'>): Don't make_abs.
+ (fold_binary): Simplify result section logic. Return NULL section
+ for logical ops.
+ (fold_binary <SEGMENT_START>): Use new_rel_from_abs to set value to
+ a consistent result.
+ (fold_name <SIZEOF_HEADERS>): Return new_number, not new_abs.
+ (fold_name <DEFINED, SIZEOF, ALIGNOF, LENGTH, CONSTANT>): Likewise.
+ (fold_name <NAME>): No need to handle absolute symbols differently
+ from relative ones.
+ (fold_name <ORIGIN>): Don't return valid result when
+ lang_first_phase_enum. Return new_rel_from_abs, not new_abs.
+ (exp_fold_tree_1 <etree_value>): Return new_number, not new_rel.
+ (exp_fold_tree_1): Ajust for NULL expld.result.section. When assigning
+ a plain number to dot, assume the value is relative to expld.section.
+ Make terms not in an output section, absolute.
+ * ldlang.c (print_assignment): Fix style nit.
+ (lang_size_sections_1): Cope with NULL expld.result.section.
+ (lang_do_assignments_1): Likewise.
+
+2010-08-12 Alan Modra <amodra@gmail.com>
+
+ * ldexp.c (new_rel): Remove "str". Update all call sites.
+ (exp_fold_tree_1): When assigning to dot, calculate nextdot
+ using expld.result.section rather than expld.section.
+
+2010-08-06 Alan Modra <amodra@gmail.com>
+
+ PR ld/11887
+ * ldlang.c (lang_add_vers_depend): Don't leave version_needed
+ uninitialised.
+
+2010-07-28 Alan Modra <amodra@gmail.com>
+
+ * ldexp.c (exp_print_tree): Print function-like binary nodes as
+ functions rather than in-fix operators. Use fputs and fputc
+ where appropriate.
+
+2010-07-23 Naveen.H.S <naveen.S@kpitcummins.com>
+ Ina Pandit <ina.pandit@kpitcummins.com>
+
+ * configure.tgt: Match all v850 targets.
+
+2010-07-20 Mike Frysinger <vapier@gentoo.org>
+
+ * ld.texinfo (VERSION): Remove "int" from example script and add ";".
+ Declare the default language as C.
+
+2010-07-17 Alan Modra <amodra@gmail.com>
+
+ * ldlang.c (lang_check_section_addresses): Catch overlap for
+ sections that wrap around the address space.
+
+2010-06-29 Nick Clifton <nickc@redhat.com>
+
+ * scripttempl/xstormy16.sc (.gcc_except_table): Include sections
+ with the .gcc_except_table. prefix.
+
+2010-06-29 Alan Modra <amodra@gmail.com>
+
+ * emulparams/maxqcoff.sh: Delete file.
+ * scripttempl/maxqcoff.sc: Delete file.
+ * Makefile.am: Remove references to maxq.
+ * configure.tgt: Likewise.
+ * Makefile.in: Regenerate.
+ * configure: Regenerate.
+ * po/POTFILES.in: Regenerate.
+
+2010-06-27 Alan Modra <amodra@gmail.com>
+
+ * pe-dll.c (fill_edata): Avoid set but unused warning.
+ (pe_walk_relocs_of_symbol): Delete set but unused variables.
+ (generate_reloc, pe_implied_import_dll): Likewise.
+ * emultempl/aix.em (open_dynamic_archive): Likewise.
+ * emultempl/xtensaelf.em (replace_insn_sec_with_prop_sec): Likewise.
+ (xtensa_layout_wild): Likewise.
+ (xtensa_colocate_output_literals_callback): Likewise.
+
+2010-06-25 Alan Modra <amodra@gmail.com>
+
+ * emultempl/ppc64elf.em (prelim_size_sections): New function.
+ (ppc_before_allocation): Use it. Size sections before toc edit too.
+
+2010-06-25 Alan Modra <amodra@gmail.com>
+
+ * emultempl/elf32.em (find_exp_assignment): Handle etree_provided.
+
+2010-06-20 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_before_parse): Make
+ auto-import and merge-rdata defaults same for i[3-7]86 and
+ x86_64 mingw.
+
+2010-06-15 Joseph Myers <joseph@codesourcery.com>
+
+ * emulparams/elf32_tic6x_le.sh (ATTRS_SECTIONS): Define.
+
+2010-06-09 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ PR ld/11603
+ * pe-dll.c (process_def_file_and_drectve): Reorder check for
+ forwarded export name after check for ordinary export.
+
+2010-06-08 Bernd Schmidt <bernds@codesourcery.com>
+
+ * emulparams/elf32_tic6x_le.sh (OTHER_BSS_SECTIONS): New.
+
+2010-06-08 Nick Clifton <nickc@redhat.com>
+
+ * fdl.texi: Replace with v1.3 text.
+ * ld.texinfo: Replace abbreviated 20th century year numbers with
+ full versions.
+ * ldint.texinfo: Likewise.
+ Relicense under GFDL v1.3. Replace text of v1.1 FDL with an
+ include of the fdl.texi file.
+
+2010-06-01 Tristan Gingold <gingold@adacore.com>
+
+ * scripttempl/alphavms.sc: Add comments. Move $LINK$ to the
+ readonly output-section. Handle LIB$INITIALIZE and sections
+ created by gcc.
+ * emultempl/vms.em (vms_place_orphan): Add comments.
+
+2010-05-28 Nick Clifton <nickc@redhat.com>
+
+ * Makefile.am (eshlelf_fd.c): Fix typo in rule.
+ * Makefile.in: Regenerate.
+
+2010-05-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/11628
+ * ldexp.c (fold_binary): Warn if value of SEGMENT_START isn't
+ multiple of maximum page size.
+
+2010-05-25 Nick Clifton <nickc@redhat.com>
+
+ * Makefile.am: Fix typo.
+ * Makefile.in: Regenerate.
+
+2010-05-25 Daniel Jacobowitz <dan@codesourcery.com>
+ Joseph Myers <joseph@codesourcery.com>
+ Andrew Stubbs <ams@codesourcery.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add eshelf_fd.o and eshlelf_fd.o.
+ (eshelf_fd.c, eshlelf_fd.c): New rules.
+ * Makefile.in: Regenerate.
+ * configure.tgt (sh-*-uclinux*): Add shelf_fd and shlelf_fd
+ emulations.
+ * emulparams/shelf_fd.sh: New file.
+ * emulparams/shlelf_fd.sh: New file.
+ * emulparams/shlelf_linux.sh: Update comment.
+
+2010-05-25 Jay Krell <jay.krell@cornell.edu>
+
+ PR ld/11621
+ * Makefile.am: Replace all occurences of .o with .@OBJEXT@
+ * Makefile.in: Regenerate.
+
+2010-05-25 Kai Tietz <kai.tietz@onevision.com>
+
+ * deffilep.y (opt_name): Allow leading dot.
+ (dot_name): Likewise.
+ (anylang_id): Likewise.
+ * emultempl/pep.em (gld_${EMULATION_NAME}_before_parse): Enable by
+ default auto_import.
+ (gld${EMULATION_NAME}_handle_option): Warn about v1.
+ (pep_find_data_imports): Remove superflous warnings about
+ auto-import.
+ (gld_${EMULATION_NAME}_get_script): Don't merge for auto-import
+ and active pseudo-relocation-v2 rdata into data section.
+ * emultempl/pe.em (default_merge_rdata): New shell variable.
+ (MERGE_RDATA_V2): New macro.
+ (gld_${EMULATION_NAME}_get_script): Adjust rule for auto-import
+ selected script.
+
+2010-05-15 Kai Tietz <kai.tietz@onevision.com>
+
+ * emultempl/pe.em (is_underscoring): New helper function.
+ (gld_${EMULATION_NAME}_before_parse): Replace code
+ for pe(p)_leading_underscore detection by is_underscoring.
+ (U): Likewise.
+ (GET_INIT_SYMBOL_NAME): Likewise.
+ (U_SIZE): Likewise.
+ (set_pe_name):
+ (set_entry_point):
+ (gld_${EMULATION_NAME}_set_symbols):
+ * emultempl/pep.em: Likewise.
+ * pe-dll.c (pe_detail_list): Set default
+ underscoring for x64 target.
+ (pe_dll_id_target): Add initialization of
+ pe(p)_leading_underscore.
+
+2010-05-15 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * pe-dll.c: Removed trailing whitespaces.
+
+2010-05-14 Alan Modra <amodra@gmail.com>
+
+ PR ld/11583
+ * ldexp.c (exp_fold_tree_1): If assignment source expression is
+ invalid, make the destination symbol undefined.
+
+2010-05-11 Kai Tietz <kai.tietz@onevision.com>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_before_parse):
+ Initialize pe(p)_leading_underscore variable.
+ (set_pe_name): Likewise.
+ * emultempl/pep.em: Likewise.
+ Additional change default to non-underscore for
+ pep_leading_underscore equal to -1.
+
+2010-05-07 Tristan Gingold <gingold@adacore.com>
+
+ * Makefile.in: Regenerate with automake 1.11.1.
+ * aclocal.m4: Ditto.
+
+2010-05-05 Nick Clifton <nickc@redhat.com>
+
+ * po/es.po: Updated Spanish translation.
+
+2010-04-27 Kai Tietz <kai.tietz@onevision.com>
+
+ * pe-dll.c (_nm_-symbols): Use always underscored variant
+ for symbols.
+ (__imp_-symbols): Likewise.
+ (___imp_-symbols): Likewise.
+ * NEWS: Mention ABI change for x64 PE-COFF.
+
+2010-04-27 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makefile.am (install-exec-local): Properly install ld as
+ default cross linker.
+ * Makefile.in: Regenerated.
+
+2010-04-27 H.J. Lu <hongjiu.lu@intel.com>
+ Nick Clifton <nickc@redhat.com>
+
+ * configure.in (install_as_default): Define and set to true
+ unless --enable-gold=both/gold has been specified.
+ * configure: Regenerate.
+
+ * Makefile.am (transform): Use ld.bfd as the default name of
+ the linker.
+ (install-exec-local): Also install the executable as a binary
+ named 'ld' if install_as_default is true.
+ * Makefile.in: Regenerate.
+
+2010-04-22 Nick Clifton <nickc@redhat.com>
+
+ * po/ld.pot: Updated by the Translation project.
+ * po/vi.po: Updated Vietnamese translation.
+ * po/bg.po: Updated Bulgarian translation.
+
+2010-04-15 Andrew Haley <aph@redhat.com>
+
+ * emultempl/armelf.em (merge_exidx_entries): New variable.
+ (OPTION_NO_MERGE_EXIDX_ENTRIES): New definition.
+ ("no-merge-exidx-entries"): New option.
+ * ld.texinfo (merge-exidx-entries): Document this option.
+
+2010-04-14 Tristan Gingold <gingold@adacore.com>
+
+ * emulparams/alphavms.sh: New file.
+ * emultempl/vms.em: New file.
+ * scripttempl/alphavms.sc: New file.
+ * configure.tgt (alpha*-*-*vms*): Added.
+ * Makefile.am (ALL_EMULATIONS): Add ealphavms.o
+ (ealphavms.c): New target.
+ * Makefile.in: Regenerate.
+
+2010-04-09 Nick Clifton <nickc@redhat.com>
+
+ * ldlang.c (wild_sort): Remove unused variable section_name.
+
+2010-04-07 Alan Modra <amodra@gmail.com>
+
+ * configure: Regenerate.
+
+2010-04-06 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/11434
+ * ld/testsuite/ld-x86-64/unique1.d: New.
+ * ld/testsuite/ld-x86-64/unique1.s: Likewise.
+
+ * ld-x86-64/x86-64.exp: Run unique1.
+
+2010-04-05 Kai Tietz <kai.tietz@onevision.com>
+
+ * emultempl/pep.em (U): Macro modified.
+ (U_SIZE): New helper macro.
+ (GET_INIT_SYMBOL_NAME): Likewise.
+ (enum options): Add OPTION_NO_LEADING_UNDERSCORE
+ and OPTION_LEADING_UNDERSCORE enumerator-values.
+ (gld${EMULATION_NAME}_add_options): Add --(no-)leading-underscore
+ option.
+ (definfo): Add new member is_c_symbol.
+ (D): Add to macro underscore mode parameter.
+ (init): Add definition for is_c_symbol.
+ (gld_${EMULATION_NAME}_list_options): Display new options.
+ (set_pep_name): Adjust underscoring dependent fixed
+ symbol handling.
+ (gld_${EMULATION_NAME}_set_symbols): Likewise.
+ (saw_option): Likewise.
+ (gld_${EMULATION_NAME}_unrecognized_file): Likewise.
+ (set_entry_point): Initial initial_symbol_char dependent to
+ target's default and new option flag pep_leading_underscore.
+ * emultempl/pe.em (U): Macro modified.
+ (U_SIZE): New helper macro.
+ (GET_INIT_SYMBOL_NAME): Likewise.
+ (OPTION_LEADING_UNDERSCORE): Add new option define.
+ (OPTION_NO_LEADING_UNDERSCORE): Likewise.
+ (gld${EMULATION_NAME}_add_options): Add --(no-)leading-underscore
+ option.
+ (definfo): Add new member is_c_symbol.
+ (D): Add to macro underscore mode parameter.
+ (init): Add definition for is_c_symbol.
+ (gld_${EMULATION_NAME}_list_options): Display new options.
+ (set_pep_name): Adjust underscoring dependent fixed
+ symbol handling.
+ (gld_${EMULATION_NAME}_set_symbols): Likewise.
+ (saw_option): Likewise.
+ (gld_${EMULATION_NAME}_unrecognized_file): Likewise.
+ (set_entry_point): Initial initial_symbol_char dependent to
+ target's default and new option flag pep_leading_underscore.
+ * pe-dll.c (pe_leading_underscore): New flag variable.
+ (pe_detail_list): Remove const to allow modify of
+ member underscore.
+ (pe_dll_id_target): Initialize pe_details' underscore variable
+ dependent to target's default and flag pe_leading_underscore.
+ * pe-dll.h (pe_leading_underscore): Add extern declaration of
+ option flag.
+ * pep-dll.c (pe_leading_underscore): Add alias define for
+ pep_leading_underscore.
+ * pep-dll.h (pep_leading_underscore) Add extern declaration of
+ option flag.
+ * ld.texinfo: Add documentation for --(no-)leading-underscore
+ option.
+
+2010-03-26 Alan Modra <amodra@gmail.com>
+
+ PR ld/11426
+ * configure.host (many linux targets <HOSTING_CRT0>): Remove edits.
+ (m68*-motorola-sysv <HOSTING_LIBS>): Use here doc, not echo.
+
+2010-03-25 Joseph Myers <joseph@codesourcery.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add eelf32_tic6x_be.o and
+ eelf32_tic6x_le.o.
+ (eelf32_tic6x_be.c, eelf32_tic6x_le.c): New.
+ * NEWS: Add news entry for TI C6X support.
+ * configure.tgt (tic6x-*-*): New.
+ * emulparams/elf32_tic6x_be.sh, emulparams/elf32_tic6x_le.sh: New.
+
+2010-03-23 Joseph Myers <joseph@codesourcery.com>
+
+ * scripttempl/elf.sc (RODATA_NAME, SDATA_NAME, SBSS_NAME,
+ BSS_NAME): Define if not already defined. Use in place of some
+ hardcoded section names.
+
+2010-03-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ * scripttempl/elf.sc (INIT_ARRAY): Re-indent.
+
+2010-03-18 Aymeric Vincent <vincent@labri.fr>
+
+ PR ld/11384
+ * emultempl/sh64elf.em: Add missing EOF.
+
+2010-03-18 Doug Semler <dougsemler@gmail.com>
+
+ * pe-dll.c (make_one): Make text section readonly.
+ (make_one): Add *ABS* symbol @feat.00 with value 1 to tag
+ the jump stub on X86 as /SAFESEH compatible for
+ native toolchains.
+
+2010-03-17 Alan Modra <amodra@gmail.com>
+
+ * ldlang.c (lang_size_sections_1): Remove "s" param. Set "s" from
+ *prev instead. Update all callers.
+
+2010-03-15 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ldlang.c (lang_insert_orphan): Place loadable orphans in the same
+ region and phdrs as their placement section.
+
+2010-03-15 Alan Modra <amodra@gmail.com>
+
+ * emultempl/ppc64elf.em (move_input_section, sort_toc_sections): New.
+ (ppc_before_allocation): Call sort_toc_sections.
+ (no_toc_sort, OPTION_NO_TOC_SORT): New.
+ (PARSE_AND_LIST_PROLOGUE, PARSE_AND_LIST_LONGOPTS,
+ PARSE_AND_LIST_OPTIONS): Handle --no-toc-sort.
+
+2010-03-14 Alan Modra <amodra@gmail.com>
+
+ PR ld/11378
+ * emultempl/ppc64elf.em (gld${EMULATION_NAME}_after_allocation): Call
+ ppc64_elf_check_init_fini and warn if .init/.fini use different TOCs.
+
+2010-03-11 George Gensure <werkt0@gmail.com>
+
+ PR ld/11367
+ * ldcref.c (handle_asneeded_cref): Correct copying of refs.
+
+2010-03-05 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * Makefile.am (ALL_EMULATIONS): Add eelf32_sparc_sol2.o,
+ eelf_i386_sol2.o.
+ (ALL_64_EMULATIONS): Add eelf_x86_64_sol2.o, eelf64_sparc_sol2.o.
+ (eelf32_sparc_sol2.c): New rule.
+ (eelf64_sparc_sol2.c): Likewise.
+ (eelf_x86_64_sol2.c): Likewise.
+ (eelf_i386_sol2.c): Likewise.
+ * Makefile.in: Regenerate.
+ * configure.tgt (i[3-7]86-*-solaris2*): Change targ_emul to
+ elf_i386_sol2.
+ Add elf_i386_ldso, elf_x86_64_sol2 to targ_extra_emuls.
+ (x86_64-*-solaris2*): Change targ_emul to elf_x86_64_sol2.
+ Add elf_x86_64, elf_i386_sol2, elf_i386 to targ_extra_emuls.
+ (sparc-*-solaris2.[0-6]*): Change targ_emul to elf32_sparc_sol2.
+ Add target_extra_emuls.
+ (sparc-*-solaris2*): Change targ_emul to elf32_sparc_sol2.
+ Add elf32_sparc, elf64_sparc_sol2 to targ_extra_emuls.
+ (sparcv9-*-solaris2*): Change targ_emul to elf64_sparc_sol2.
+ Add elf64_sparc, elf32_sparc_sol2 to target_extra_emuls.
+ * emulparams/elf32_sparc_sol2.sh: New file.
+ * emulparams/elf64_sparc_sol2.sh: New file.
+ * emulparams/elf_i386_sol2.sh: New file.
+ * emulparams/elf_x86_64_sol2.sh: New file.
+ * emultempl/solaris2.em: New file.
+
+2010-02-27 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/11330
+ * ld.texinfo: Replace explicitely with explicitly.
+
+2010-02-27 Jie Zhang <jie@codesourcery.com>
+
+ * scripttempl/armbpabi.sc: Don't combine .init_array.* or
+ .fini_array.* when do relocatable linking.
+ * scripttempl/elf.sc: Likewise.
+ * scripttempl/elf32sh-symbian.sc: Likewise.
+ * scripttempl/elf64hppa.sc: Likewise.
+ * scripttempl/elfxtensa.sc: Likewise.
+
+2010-02-26 Alan Modra <amodra@gmail.com>
+
+ * scripttempl/elf.sc (.fini_array): Place input .fini_array after
+ .fini_array.*.
+ * scripttempl/armbpabi.sc: Likewise.
+ * scripttempl/elf32sh-symbian.sc: Likewise.
+ * scripttempl/elf64hppa.sc: Likewise.
+ * scripttempl/elfxtensa.sc: Likewise.
+
+2010-02-25 Alan Modra <amodra@gmail.com>
+
+ PR ld/11304
+ * ldlang.c (init_os): Remove isec param. Don't check for
+ bfd_section already set or call bfd_init_private_section_data
+ here.
+ (exp_init_os): Update init_os call.
+ (lang_add_section): Tidy. Really don't set SEC_LINK_ONCE
+ flags. Call bfd_init_private_section_data here.
+ (map_input_to_output_sections): Tidy. Update init_os calls.
+ Use os->sectype to select sec flags for lang_data_statement.
+
+2010-02-23 Alan Modra <amodra@gmail.com>
+
+ PR ld/11304
+ * ldlang.c: Revert last patch.
+
+2010-02-23 Nick Clifton <nickc@redhat.com>
+
+ * po/bg.po: Updated Bulgarian translation.
+
+2010-02-22 Alan Modra <amodra@gmail.com>
+
+ PR ld/11304
+ * ldlang.c (exp_init_os): Delete forward declaration.
+ (init_os): Don't check for bfd_section already created and don't
+ init addr_tree and load_base expressions here.
+ (map_input_to_output_sections): Only map input to output sections
+ and set constraints here, and as an exception, create output
+ sections which have their address set. Move all the other code to..
+ (create_other_output_sections): ..here. New function. Handle init
+ of addr_tree and load_base here too.
+ (lang_process): Call create_other_output_sections.
+
+2010-02-19 Alan Modra <amodra@gmail.com>
+
+ * Makefile.am (eelf32_i960.c): Depend on ELF_GEN_DEPS, not ELF_DEPS.
+ * Makefile.in: Regenerate.
+
+2010-02-19 Alan Modra <amodra@gmail.com>
+
+ * ldlang.c (unique_section_p): Add os param. Allow group
+ sections to match /DISCARD/. Update all callers.
+ * emultempl/genelf.em (gld${EMULATION_NAME}_before_allocation): New.
+ (LDEMUL_BEFORE_ALLOCATION): Define.
+
+2010-02-15 Nick Clifton <nickc@redhat.com>
+
+ * po/vi.po: Updated Vietnamese translation.
+
+2010-02-10 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * Makefile.am (CFILES): Add ldlex-wrapper.c.
+ (OFILES): Replace ldlex.c with ldlex-wrapper.c.
+ (ldlex.o): Replace with...
+ (ldlex-wrapper.o): ...this new rule.
+ (EXTRA_ld_new_SOURCES): Add ldlex.l.
+ (ld_new_SOURCES): Replace ldlex.l with ldlex-wrapper.c.
+ * Makefile.in: Regenerate.
+ * ldlex.l (sysdep.h): Don't include here.
+ * ldlex-wrapper.c: New file.
+
+2010-02-09 Alan Modra <amodra@gmail.com>
+
+ * emultempl/ppc64elf.em (ppc_before_allocation): Update for changed
+ function parameters.
+
+2010-02-05 Nick Clifton <nickc@redhat.com>
+
+ * configure.in (ALL_LIBGUAS): Add bg.
+ * configure: Regenerate.
+ * po/bg.po: New Bulgarian translation.
+
+2010-02-05 Ryan Mansfield <rmansfield@qnx.com>
+
+ * emultempl/armelf.em (PARSE_AND_LIST_OPTIONS): Fix help for
+ --target1-abs and --target1-rel options.
+
+2010-02-03 Nick Clifton <nickc@redhat.com>
+
+ * emultempl/alphaelf.em: Update value expected from elf_object_id.
+ * emultempl/hppaelf.em: Likewise.
+ * emultempl/mipself.em: Likewise.
+ * emultempl/ppc32elf.em: Likewise.
+ * emultempl/ppc64elf.em: Likewise.
+
+2010-02-03 Alan Modra <amodra@gmail.com>
+
+ * emultempl/ppc64elf.em (build_toc_list): Report errors from
+ ppc64_elf_next_toc_section.
+ (after_allocation): Update for changed function names and params.
+ Run second pass of multitoc partitioning.
+
+2010-01-21 Jon Grant <jg@jguk.org>
+ Nick Clifton <nickc@redhat.com>
+
+ PR 4437
+ * ldfile.c: (ldfile_open_file): Do not stop link upon encountering
+ a missing file or library. Instead mark the entry as missing and
+ set the global flag to indicate that missing files were
+ encountered.
+ * ldlang.c (missing_files): New exported variable.
+ (load_symbols): Skip loading if the file is missing.
+ (open_input_bfds): Terminate link if any input files were
+ missing.
+ * ldlang.h (struct lang_input_statement_struct): Add missing_file
+ field.
+ Add export of missing_file variable.
+
+2010-01-13 DJ Delorie <dj@redhat.com>
+
+ * emultempl/elf32.em (_place_orphan): If an input section doesn't
+ match an existing output section, but an unused output section
+ statement does match, use it.
+ * emultempl/pe.em (_place_orphan): Likewise.
+ * emultempl/pep.em (_place_orphan): Likewise.
+
+2010-01-09 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * configure: Regenerate.
+ * Makefile.in: Regenerate.
+
+2010-01-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ldver.c (ldversion): Change to "Copyright 2010".
+
+2010-01-08 Alan Modra <amodra@gmail.com>
+
+ PR 11107
+ * emultempl/vxworks.em: Expand tr arguments to suit non-GNU tr.
+
+For older changes see ChangeLog-2009
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/binutils-2.21/ld/ChangeLog-0001 b/binutils-2.21/ld/ChangeLog-0001
new file mode 100644
index 0000000..9183afe
--- /dev/null
+++ b/binutils-2.21/ld/ChangeLog-0001
@@ -0,0 +1,3376 @@
+2001-12-21 Tom Rix <trix@redhat.com>
+
+ (gld*_create_output_section_statements): New function.
+ For -binitfini support.
+ * emultempl/aix.em (gld*_before_parse): Fix comment.
+ * emultempl/aix.em (gld*_parse_args): Fix comment.
+
+2001-12-20 Jason Thorpe <thorpej@wasabisystems.com>
+
+ * configure.tgt (mips*-dec-netbsd*): Delete alias for
+ mips*el-*-netbsd*.
+ (sparc64-*-netbsd*): Add elf32_sparc to targ_extra_emuls.
+
+ * configure.tgt (arm-*-netbsdelf*): Add target.
+ (arm-*-netbsd*): Add armelf and armelf_nbsd to targ_extra_emuls.
+ * emulparams/armelf_nbsd.sh: Added.
+ * Makefile.am: Add rules for earmelf_nbsd.
+ * Makefile.in: Regenerate.
+
+2001-12-19 Andreas Jaeger <aj@suse.de>,
+ Susanne Oberhauser <froh@suse.de>
+
+ * configure.host: Add rules for x86_64-*linux-gnu. Change
+ s390x-linux entry to use gcc to report configuration, replace gcc
+ with $CC in s390-linux
+
+2001-12-19 Andreas Jaeger <aj@suse.de>
+
+ * ld.texinfo (VERSION): Fix markup.
+
+2001-12-18 matthew green <mrg@eterna.com.au>
+
+ * Makefile.am (ALL_EMULATIONS): Add m68kelfnbsd.o.
+ (m68kelfnbsd.c): New rule.
+ * Makefile.in: Regenerate.
+ * configure.tgt (m68*-hp-netbsd*): Renamed to ..
+ (m68*-*-netbsd*4k*): .. this.
+ (m68*-*-netbsdelf*): New target.
+ (m68*-*-netbsd*): Also include ELF support.
+ (m68*-*-netbsdaout*): New alias for m68*-*-netbsd*.
+ * emulparams/m68kelfnbsd.sh: New emulation.
+
+2001-12-18 Jakub Jelinek <jakub@redhat.com>
+
+ * ldgram.y (vers_node): Support anonymous version tags.
+ * ldlang.c (lang_register_vers_node): Ensure anonymous version
+ tag is not defined together with non-anonymous versions.
+ * ld.texinfo: Document it.
+
+2001-12-18 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * po/tr.po: New file: Turkish translation.
+ * configure.in (ALL_LINGUAS): Add tr.
+ * configure: Regenerate.
+
+2001-12-17 Jason Thorpe <thorpej@wasabisystems.com>
+
+ * Makefile.am: Add rules for eelf64alpha_nbsd.
+ * Makefile.in: Regenerate.
+ * configure.tgt (alpha*-*-netbsd*): Set
+ targ_emul to elf64alpha_nbsd.
+ * emulparams/elf64alpha_nbsd.sh: Added.
+
+2001-12-17 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Adjust
+ section_tail when fiddling with section list.
+ (gld${EMULATION_NAME}_list_options): Ensure sentences aren't
+ broken into separate strings to make translation easier.
+ * emultempl/mmo.em (mmo_place_orphan): Adjust section_tail when
+ fiddling with section list.
+ * emultempl/pe.em (gld_${EMULATION_NAME}_place_orphan): Likewise.
+
+2001-12-16 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * scripttempl/mmo.sc: Add .debug_ranges to listed sections.
+
+2001-12-15 Alan Modra <amodra@bigpond.net.au>
+
+ * ldmain.c (main): Initialise link_info.eh_frame_hdr.
+
+2001-12-13 Jakub Jelinek <jakub@redhat.com>
+
+ * emultempl/elf32.em (finish): Supply output_bfd
+ to bfd_elf*_discard_info.
+ (OPTION_EH_FRAME_HDR): Define.
+ (longopts): Add --eh-frame-hdr.
+ (parse_args): Handle it.
+ (list_options): Add --eh-frame-hdr to help.
+ * emultempl/hppaelf.em (finish): Supply output_bfd
+ to bfd_elf*_discard_info.
+ * scripttempl/elf.sc (.eh_frame_hdr): Add.
+
+2001-12-13 Alan Modra <amodra@bigpond.net.au>
+
+ * lexsup.c (parse_args): Don't pass shortopts to second call to
+ getopt functions. Restore optind rather than decrementing before
+ second call. Remove errind as it now duplicates last_optind.
+
+2001-12-11 Christopher Faylor <cgf@redhat.com>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_list_options): Fix typo.
+
+2001-12-07 Geoffrey Keating <geoffk@redhat.com>
+ Richard Henderson <rth@redhat.com>
+
+ * Makefile.am: Add support for xstormy16.
+ * configure.tgt: Add support for xstormy16.
+ * Makefile.in: Regenerate.
+ * emulparams/elf32xstormy16.sh: New file.
+ * scripttempl/xstormy16.sc: New file.
+
+2001-10-01 Christopher Faylor <cgf@cygnus.com>
+
+ * Makefile.in (LIB_PATH): Make configurable.
+ (GENSCRIPTS): Set LIB_PATH in environment.
+ * configure.in: Substitute LIB_PATH.
+ * configure: Regenerate.
+ * configure.tgt (*cygwin): Set LIB_PATH for cross build.
+ * configure.host (*cygwin): Add /usr/lib/w32api to NATIVE_LIB_DIRS.
+
+2001-12-07 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * lexsup.c (ld_options): Insert 'PROGRAM' into the text string
+ describing the -N option so that it is easier to translate into
+ foreign languages.
+
+2001-12-05 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * emultempl/pe.em (..._list_options): Replace multiple fprintf
+ statements describing a single option with a single, newline
+ escaped fprintf. This allows better translation into other
+ languages.
+
+ * ldmain.c (add_archive_element): Combine multiple strings
+ into a single string to permit better translation into other
+ languages.
+
+2001-12-05 Tom Rix <trix@redhat.com>
+
+ * Makefile.am: Remove eaixppc64.
+ * Makefile.in: Regenerate.
+
+2001-12-04 Tom Rix <trix@redhat.com>
+
+ * emultempl/aix.em (choose_target): Change default target to
+ OUTPUT_FORMAT for ppcmacos. Add braces to remove compiler
+ warning.
+ (gld*_read_file): Fix typo.
+ (change_symbol_mode): Add prototype.
+ (is_syscall): Same.
+
+ * emulparams/aixppc.sh (SYSCALL_MASK, SYMBOL_MODE_MASK): Delete.
+ * emulparams/aixrs6.sh : Same.
+ * emulparams/ppcmacos.sh : Same.
+ * emulparams/aixppc64.sh : Delete file.
+ * emultempl/aix.em : Formatting changes.
+
+2001-12-04 Hans-Peter Nilsson <hp@axis.com>
+
+ * emulparams/criself.sh (NO_SMALL_DATA): Set, to yes.
+ (OTHER_BSS_END_SYMBOLS): Don't refer to .sbss when setting
+ __Sbss.
+ (OTHER_END_SYMBOLS): Fix formatting.
+ * emulparams/crislinux.sh (NO_SMALL_DATA): Set, to yes.
+ (OTHER_END_SYMBOLS): Fix formatting.
+
+2001-12-04 Alan Modra <amodra@bigpond.net.au>
+
+ * ldexp.c (exp_print_token): Correct "table" entry for RSHIFT.
+
+2001-12-02 Tom Rix <trix@redhat.com>
+
+ * configure.tgt : Remove eaixppc64 emulations.
+ * Makefile.in : Remove eaixppc64.c
+ * ldemul.c (ldemul_choose_target): New parameters argc, argv.
+ (ldemul_default_target): Same.
+ * emultempl/gld960.em (gld960_choose_target): Same.
+ * emultempl/gld960c.em (gld960_choose_target): Same.
+ * scripttempl/aix.sc: Remove OUTPUT_FORMAT.
+ * emultempl/aix.em (is_syscall): syscall_mask now a variable.
+ * emultempl/aix.em (gld*_read_file): symbol_mode_mask now a variable.
+ * emultempl/aix.em (gld*_parse_args): Handle -b32 -b64 emulation.
+ * emultempl/aix.em (choose_target): New function. Handle emulation of
+ -b32 and -b64.
+
+2001-11-27 H.J. Lu <hjl@gnu.org>
+
+ * emulparams/elf_i386.sh (NO_SMALL_DATA): Set to yes.
+ * emulparams/elf_i386_be.sh (NO_SMALL_DATA): Likewise.
+ * emulparams/elf_i386_chaos.sh (NO_SMALL_DATA): Likewise.
+ * emulparams/elf_i386_ldso.sh (NO_SMALL_DATA): Likewise.
+ * emulparams/elf_x86_64.sh (NO_SMALL_DATA): Likewise.
+ * emulparams/m68kelf.sh (NO_SMALL_DATA): Likewise.
+ * emulparams/elf32_sparc.sh (NO_SMALL_DATA): Likewise.
+ * emulparams/elf64_sparc.sh (NO_SMALL_DATA): Likewise.
+
+ * scripttempl/elf.sc (SBSS): New. Define if ${NO_SMALL_DATA}
+ is not empty.
+ (SDATA): Likewise.
+ (REL_SDATA): Likewise.
+ (REL_SBSS): Likewise.
+ (REL_SDATA2): Likewise.
+ (REL_SBSS2): Likewise.
+ (SBSS2): Define if ${NO_SMALL_DATA} is not empty.
+ (SDATA2): Likewise.
+
+2001-11-25 Stephane Carrez <Stephane.Carrez@worldnet.fr>
+
+ * scripttempl/elfm68hc11.sc (CTOR, DTOR): Put constructor and
+ destructor in rom.
+ * scripttempl/elfm68hc12.sc (CTOR, DTOR): Likewise.
+
+2001-11-22 H.J. Lu <hjl@gnu.org>
+
+ * Makefile.in: Regenerated with automake based on automake
+ 1.4-8 in RedHat 7.1.
+
+2001-11-22 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am (CONFIG_STATUS_DEPENDENCIES): Define.
+ (config.status): Delete rule.
+ Add extra dependencies to cover sourced emulparams files.
+ * Makefile.in: Regenerate.
+
+ * scripttempl/elf.sc: Order <section>, <section>.* and
+ corresponding linkonce sections as seen in input files.
+ Formatting fixes. Zero vma of all sections if not relocating.
+ (STACK): Define and insert if STACK_ADDR defined.
+ (OTHER_RELOCATING_SECTIONS): Delete.
+ (OTHER_END_SYMBOLS): Define.
+ (OTHER_READONLY_SECTIONS): Always insert, not just when relocating.
+ (OTHER_READWRITE_SECTIONS): Likewise.
+ (OTHER_GOT_SECTIONS): Likewise.
+ (OTHER_SDATA_SECTIONS): Likewise.
+ (OTHER_BSS_SECTIONS): Likewise.
+ * scripttempl/elfi370.sc (OTHER_READONLY_SECTIONS): Likewise.
+ (OTHER_READWRITE_SECTIONS): Likewise.
+ * scripttempl/nw.sc (OTHER_READONLY_SECTIONS): Likewise.
+ (OTHER_READWRITE_SECTIONS): Likewise.
+
+ * emulparams/armelf.sh (OTHER_RELOCATING_SECTIONS): Delete.
+ (STACK_ADDR): Define.
+ * emulparams/armelf_oabi.sh: As for armelf.sh.
+ * emulparams/elf32mcore.sh: As for armelf.sh.
+ * emulparams/h8300elf.sh: As for armelf.sh.
+ * emulparams/mn10200.sh: As for armelf.sh.
+ * emulparams/shelf.sh: As for armelf.sh.
+
+ * emulparams/elf32fr30.sh (OTHER_RELOCATING_SECTIONS): Delete.
+ (OTHER_END_SYMBOLS): Define.
+ * emulparams/m32relf.sh: As for elf32fr30.sh.
+ * emulparams/h8300helf.sh: As for elf32fr30.sh.
+ * emulparams/h8300self.sh: As for elf32fr30.sh.
+
+ * emulparams/criself.sh (OTHER_READONLY_SECTIONS): Protect symbol
+ defines with RELOCATING test.
+ (OTHER_SDATA_SECTIONS): Likewise.
+ (OTHER_RELOCATING_SECTIONS): Delete, replacing with..
+ (OTHER_END_SYMBOLS): ..this.
+ * emulparams/crislinux.sh: As for criself.sh.
+
+ * emulparams/elf32bmipn32.sh (OTHER_SDATA_SECTIONS): Zero vma
+ if not relocating.
+ (OTHER_RELOCATING_SECTIONS): Delete, replacing with..
+ (OTHER_SECTIONS): ..this. Zero vma if not relocating. Order
+ normal and linkonce sections as seen in input files.
+ * emulparams/elf32bmip.sh (DATA_ADDR): Don't define if EMBEDDED.
+ (TEXT_DYNAMIC): Likewise.
+ (INITIAL_READONLY_SECTIONS): Zero vma if not relocating.
+ (OTHER_SDATA_SECTIONS): Likewise.
+ * emulparams/elf32ppc.sh (OTHER_READWRITE_SECTIONS): Likewise.
+ * emulparams/shlelf_linux.sh (OTHER_READWRITE_SECTIONS): Likewise.
+ * emulparams/elf64alpha.sh (OTHER_READONLY_SECTIONS): Likewise.
+ * emulparams/hppalinux.sh (OTHER_READONLY_SECTIONS): Likewise.
+ * emulparams/elf64_aix.sh (OTHER_GOT_SECTIONS): Likewise.
+ (OTHER_PLT_RELOC_SECTIONS): Likewise.
+ (OTHER_READONLY_SECTIONS): Likewise. Order normal and linkonce
+ sections as seen in input files.
+ * emulparams/elf64_ia64.sh: As for emulparams/elf64_aix.sh.
+ * emulparams/hppa64linux.sh (OTHER_READONLY_SECTIONS): Zero vma
+ if not relocating.
+ (OTHER_READWRITE_SECTIONS, OTHER_BSS_SECTIONS): Likewise.
+ (OTHER_BSS_END_SYMBOLS): Merge from elf64hppa.sh.
+ * emulparams/elf64mmix.sh (OTHER_RELOCATING_SECTIONS): Delete.
+ (OTHER_SECTIONS): Instead, use this..
+ (OTHER_END_SYMBOLS): ..and this.
+
+ * emulparams/elf32b4300.sh: Source elf32bmip.sh, remove duplicates.
+ * emulparams/elf32bsmip.sh: Likewise.
+ * emulparams/elf32btsmip.sh: Likewise.
+ * emulparams/elf32ebmip.sh: Likewise.
+ * emulparams/elf32lmip.sh: Likewise.
+ * emulparams/elf32elmip.sh: Source elf32lmip.sh, remove duplicates.
+ * emulparams/elf32lsmip.sh: Likewise.
+ * emulparams/elf32ltsmip.sh: Source elf32btsmip.sh, remove duplicates.
+ * emulparams/elf32l4300.sh: Source elf32b4300.sh, remove duplicates.
+ * emulparams/elf64bmip.sh: Source elf32bmipn32.sh, remove duplicates.
+ * emulparams/elf64btsmip.sh: Likewise.
+ * emulparams/elf64ltsmip.sh: Source elf64btsmip.sh, remove duplicates.
+ * emulparams/elf32lppc.sh: Source elf32ppc.sh, remove duplicates.
+ * emulparams/elf32ppclinux.sh: Likewise.
+ * emulparams/elf32ppcsim.sh: Likewise.
+ * emulparams/elf32lppcsim.sh: Source elf32lppc.sh, remove duplicates.
+ * emulparams/elf64hppa.sh: Source hppa64linux.sh, remove duplicates.
+ * emulparams/h8300helf.sh: Source h8300elf.sh, remove duplicates.
+ * emulparams/h8300self.sh: Likewise.
+ * emulparams/mn10300.sh: Source mn10200.sh, remove duplicates.
+ * emulparams/sh.sh: Comment.
+ * emulparams/shl.sh: Source sh.sh, remove duplicates.
+ * emulparams/shlelf.sh: Source shelf.sh, remove duplicates.
+ * emulparams/shelf_linux.sh: Source shlelf_linux.sh, remove duplicates.
+
+2001-11-21 David Heine <dlheine@tensilica.com>
+ Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (map_input_to_output_sections): Replace "break"
+ accidentally removed with 2001-08-03 change.
+ (lang_gc_sections_1): Likewise.
+
+2001-11-21 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (walk_wild_section): Move sec == NULL case out of loop.
+
+2001-11-20 Angela Marie Thomas <angela@redhat.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_finish): Use NULL instead
+ of false when calling lang_size_sections.
+ * emultempl/hppaelf.em (hppaelf_layout_sections_again): Likewise.
+
+2001-11-15 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_finish): Only emit this
+ function when LDEMUL_FINISH isn't set to the same name. Don't
+ call ${LDEMUL_FINISH}.
+ (ld_${EMULATION_NAME}_emulation): Call $LDEMUL_FINISH if defined.
+ * emultempl/armelf.em (arm_elf_finish): Call
+ gld${EMULATION_NAME}_finish.
+ * emultempl/hppaelf.em (hppaelf_finish): Rename to
+ gld${EMULATION_NAME}_finish. Call bfd_elf32_discard_info and
+ hppaelf_layout_sections_again if necessary.
+ (need_laying_out): New var.
+ (hppaelf_layaout_sections_again): Rename to
+ hppaelf_layout_sections_again. Clear need_laying_out.
+ (PARSE_AND_LIST_OPTIONS): Format text.
+
+2001-11-14 H.J. Lu <hjl@gnu.org>
+
+ * emultempl/armelf.em (arm_elf_finish): Renamed from
+ gld${EMULATION_NAME}_finish.
+ (LDEMUL_FINISH): Set to arm_elf_finish.
+
+2001-11-14 Daniel Jacobowitz <drow@mvista.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_finish): New.
+ (struct ld_emulation_xfer_struct): Use it.
+
+2001-11-13 Ross Alexander <ross.alexander@uk.neceur.com>
+
+ * emulparams/elf64hppa.sh (OTHER_BSS_END_SYMBOLS): Add
+ additional symbols referenced by newer crt0.o files from HP.
+
+2001-11-12 Anthony Green <green@redhat.com>
+
+ * emulparams/armelf.sh (DATA_START_SYMBOLS): New symbol.
+
+2001-11-12 Alfred M. Szmidt <ams@kemisten.nu>
+
+ * Makefile.am (GENSCRIPTS): Quote ${exec_prefix}.
+ * Makefile.in: Regenerate.
+
+2001-11-02 Stephane Carrez <Stephane.Carrez@worldnet.fr>
+
+ * ld.texinfo: Use @command for commands, @option for options.
+ * Makefile.am (POD2MAN): Use 'GNU Development Tools' for
+ the page man title.
+ * Makefile.in: Rebuild.
+
+2001-11-04 Chris Demetriou <cgd@broadcom.com>
+
+ * configure.tgt (mips*el-*-netbsd*, mips*-*-netbsd*):
+ Add support for targets.
+
+2001-11-02 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * configure.in (ALL_LINGUAS): Add "fr" and "sv"
+ * configure: Regernate.
+ * po/fr.po: New file.
+ * po/sv.po: New file.
+
+2001-11-01 NIIBE Yutaka <gniibe@m17n.org>
+
+ * configure.tgt (sh-*-linux): Set targ_emul, targ_extra_emuls
+ as little endian default and to support big endian.
+
+2001-11-01 Chris Demetriou <cgd@broadcom.com>
+
+ * ld.texinfo (Options): Document new option, -nostdlib.
+ * lexsup.c (OPTION_NOSTDLIB): New definition.
+ (ld_options): Add entry for "nostdlib".
+ (parse_args): Handle OPTIONS_NOSTDLIB.
+ * ldfile.c (ldfile_add_library_path): Don't add directories
+ to the search path if they weren't specified on the command line
+ and -nostdlib was specified.
+ * ld.h (ld_config_type): New member only_cmd_line_lib_dirs.
+
+2001-10-31 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * lexsup.c (parse_args): Prevent infinite parsing loop when
+ "-rpath.a" is specified on the command line.
+ Replace calls to fprintf with calls to einfo.
+
+2001-10-31 John Marshall <jmarshall@acm.org>
+
+ * ld.texinfo: A historical requirement that MEMORY and SECTIONS
+ appear only once across all the linker scripts involved in a link
+ invocation no longer applies. Make the documentation reflect
+ that.
+
+2001-10-31 NIIBE Yutaka <gniibe@m17n.org>
+
+ * configure.tgt: Supports sh3/sh4/sh3eb/sh4eb-unknown-linux-gnu
+ targets.
+ (sh-*-linux*): Added targ_extra_libpath.
+
+2001-10-31 David Heine <dlheine@tensilica.com>
+
+ * ldlang.c (lang_size_sections): Keep a valid output_offset field
+ for padding statements.
+
+2001-10-30 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * configure.tgt (mmix-*-*): New target.
+ * Makefile.am (ALL_EMULATIONS): Add eelf64mmix.o and emmo.o.
+ Add dependencies to match.
+ * emulparams/mmo.sh, emulparams/elf64mmix.sh, emultempl/mmo.em,
+ emultempl/mmix-elfnmmo.em, emultempl/mmixelf.em,
+ scripttempl/mmo.sc: New files.
+ * gen-doc.texi: @set MMIX.
+ * ld.texinfo: Ditto.
+ [MMIX] Add MMIX node.
+ * Makefile.in: Regenerate.
+
+2001-10-29 Kazu Hirata <kazu@hxi.com>
+
+ * ldlang.c: Fix a comment typo.
+
+2001-10-23 Alan Modra <amodra@bigpond.net.au>
+
+ * configure.host: Move alpha*-*-linux-gnu* entry to generic
+ entries, and match *-*-linux*.
+
+2001-10-20 Alan Modra <amodra@bigpond.net.au>
+
+ * ldgram.y (mri_script_command): Surround processing of INCLUDE
+ with ldlex_script, ldlex_popstate.
+ (ifile_p1): Likewise.
+ * ldlex.l (EOF): Don't BEGIN(SCRIPT). Restore lineno from the
+ correct slot.
+ (lex_push_file): Save current lineno to lineno_stack. Set lineno
+ to 1. Don't BEGIN(SCRIPT).
+ (lex_redirect): Similarly.
+ * ldmain.c (main): Set yydebug non-zero if YYDEBUG.
+
+2001-10-20 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * scripttempl/armcoff.sc: Define __EH_FRAME_BEGIN__ and
+ __EH_FRAME_END__ and accept eh frames into data section.
+ Add ctor and dtor sections.
+
+2001-10-19 Danny Smith <danny_r_smith_2001@yahoo.co.nz>
+
+ * pe-dll.c (autofilter_objectlist): Add gcrt0.o.
+ (auto-export): Fix indentation.
+
+2001-10-18 Danny Smith <danny_r_smith_2001@yahoo.co.nz>
+
+ * pe-dll.c (autofilter_objectlist): Add startup objects
+ for profiling.
+ (auto-export): Constify char * p.
+ Extract file basename and use strcmp rather than ststr
+ for object lookup.
+
+2001-10-18 Chris Demetriou <cgd@broadcom.com>
+
+ * ldmain.c (get_emulation): Improve comment about the handling
+ of -mipsN options.
+
+2001-10-17 Alan Modra <amodra@bigpond.net.au>
+
+ * po/POTFILES.in: Regenerate.
+
+2001-10-16 Vassili Karpov <malc@pulsesoft.com>
+
+ * emultempl/elf32.em (gld*_list_options): Remove extra '\t' from
+ -z nocopyreloc and -z nocombreloc usage strings.
+
+2001-10-12 Vassili Karpov <malc@pulsesoft.com>
+
+ * emultempl/elf32.em (gld*_list_options): Include -z nocopyreloc
+ in usage.
+
+2001-10-11 Aleksey Romanov <aromanov@ennovatenetworks.com>
+
+ * scripttempl/armaout.sc: Place .bss section after end of aligned
+ data section to match behaviour of aout code in constructrion of
+ header.
+
+2001-10-11 Danny Smith <danny_r_smith_2001@yahoo.co.nz>
+
+ * pe-dll.c (autofilter_entry_type autofilter_liblist: Add
+ startup files for mingw32 dlls to list.
+
+2001-10-10 Chris Demetriou <cgd@broadcom.com>
+
+ * emultempl/elf32.em: Fix shell 'if' usage for portability.
+
+2001-10-08 Aldy Hernandez <aldyh@redhat.com>
+
+ * configure.tgt (targ): Add arm9e-*-elf.
+
+2001-10-05 H.J. Lu <hjl@gnu.org>
+
+ * genscripts.sh: Fix a typo in the last change.
+
+2001-10-05 Jakub Jelinek <jakub@redhat.com>
+
+ * emultempl/elf32.em (gld_*_list_options): Include -z combreloc and
+ -z nocombreloc in usage.
+
+2001-10-03 Jim Blandy <jimb@redhat.com>
+
+ * genscripts.sh: Include a comment at the top of each generated
+ script, explaining its purpose.
+
+2001-10-03 Vassili Karpov <malc@pulsesoft.com>
+
+ * emultempl/elf32.em (parse_args): Handle -z nocopyreloc.
+ * NEWS: Mention -z nocopyreloc.
+ * ld.texinfo (Options): Describe nocopyreloc.
+
+2001-10-03 Alan Modra <amodra@bigpond.net.au>
+
+ * configure: Regenerate.
+
+2001-10-02 Alan Modra <amodra@bigpond.net.au>
+
+ * ldver.h (ld_program_version): Remove declaration.
+ * lexsup.c (parse_args): Move printing of copyright message..
+ * ldver.c (ldversion): .. to here.
+ Use BFD_VERSION_STRING in place of BFD_VERSION.
+ (ld_program_version): Remove.
+ * Makefile.am (Makefile): Depend on bfd/configure.in.
+ Run "make dep-am".
+ * Makefile.in: Regenerate.
+
+2001-09-30 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * Makefile.am: Update dependencies with "make dep-am".
+ * Makefile.in: Regenerate.
+
+2001-09-29 John Reiser <jreiser@BitWagon.com>
+
+ * ldlang.c (lang_common): Conditionally inhibit Common allocation.
+ * lexsup.c: Add --no-define-common commandline option.
+ * ldgram.y: Add INHIBIT_COMMON_ALLOCATION script command.
+ * ldlex.l: Likewise.
+ * ld.h: Add command_line.inhibit_common_definition.
+ * ldmain.c (main): Initialize.
+ * ld.texinfo: Document.
+
+2001-09-29 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (section_already_linked): Remove assignment to kept_section.
+
+2001-09-26 Alan Modra <amodra@bigpond.net.au>
+
+ * ldmisc.c (USE_STDARG): Remove.
+ (info_msg): Define using VPARAMS, VA_OPEN, VA_FIXEDARG, VA_CLOSE.
+ (einfo): Likewise.
+ (minfo): Likewise.
+ (lfinfo): Likewise.
+
+ * ldmisc.h: Remove #ifdef ANSI_PROTOTYPES and non-ansi
+ declarations. Update copyright.
+
+2001-09-24 Charles Wilson <cwilson@ece.gatech.edu>
+
+ * pe-dll.c: Remove obsoleted declaration of
+ pe_get_data_import_dll_name.
+ (pe_create_import_fixup): Fix thinko.
+
+ * ld.texinfo(enable-auto-import): Clarify the explanation.
+
+2001-09-24 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * pe-dll.c (pe_create_import_fixup): Revert previous patch.
+ * emultemp/pe.em (pe_data_import_dll): Move definition outside of
+ DLL_SUPPORT controlled code.
+
+2001-09-24 Charles Wilson <cwilson@ece.gatech.edu>
+
+ * emultempl/pe.em(pe_data_import_dll): Make static.
+ (pe_get_data_import_dll_name): New accessor function.
+ * pe-dll.c(pe_create_import_fixup): call
+ pe_get_data_import_dll_name() from pe.em, instead of
+ directly accessing pe_data_import_dll variable from pe.em.
+
+2001-09-18 Bruno Haible <haible@clisp.cons.org>
+
+ * deffilep.y: Include "safe-ctype.h" instead of <ctype.h>.
+ (def_file_add_directive): Use ISSPACE instead of isspace.
+ (def_lex): Use ISDIGIT/ISXDIGIT/ISALPHA/ISALNUM instead of
+ isdigit/isxdigit/isalpha/isalnum.
+ * emultempl/aix.em: Include "safe-ctype.h" instead of <ctype.h>.
+ (gld${EMULATION_NAME}_read_file): Use ISSPACE instead of isspace.
+ * emultempl/elf32.em: Include "safe-ctype.h" instead of <ctype.h>.
+ (gld${EMULATION_NAME}_place_orphan): Use ISALNUM instead of
+ isalnum.
+ * emultempl/gld960c.em: Include "safe-ctype.h" instead of <ctype.h>.
+ (gld960_set_output_arch): Use ISUPPER/TOLOWER instead of
+ isupper/tolower.
+ * emultempl/sunos.em: Include "safe-ctype.h" instead of <ctype.h>.
+ (gld${EMULATION_NAME}_search_dir): Use ISDIGIT instead of isdigit.
+ * ldctor.c: Include "safe-ctype.h" instead of <ctype.h>.
+ (ctor_prio): Use ISDIGIT instead of isdigit.
+ * ldfile.c: Include "safe-ctype.h" instead of <ctype.h>.
+ (ldfile_open_file_search): Use ISALPHA instead of isalpha.
+ (ldfile_add_arch): Use ISUPPER/TOLOWER instead of
+ isupper/tolower.
+ * ldlang.c: Include "safe-ctype.h" instead of <ctype.h>.
+ (stricpy): Use TOLOWER instead of isupper/tolower.
+ (lang_leave_overlay_section): Use ISALNUM instead of isalnum.
+ * ldlex.l: Include "safe-ctype.h" instead of <ctype.h>.
+ (lex_warn_invalid): Use ISPRINT instead of isprint.
+ * ldmain.c: Include "safe-ctype.h" instead of <ctype.h>.
+ (main): For gettext, also set the LC_CTYPE locate facet.
+ (add_keepsyms_file): Use ISSPACE instead of isspace.
+ * lexsup.c: Include "safe-ctype.h" instead of <ctype.h>.
+ (is_num, parse_args): Use ISDIGIT instead of isdigit.
+ * mpw-elfmips.c: Include "safe-ctype.h" instead of <ctype.h>.
+ (gldelf32ebmip_place_orphan): Use ISALNUM instead of isalnum.
+ * mpw-eppcmac.c: Include "safe-ctype.h" instead of <ctype.h>.
+ (gldppcmacos_read_file): Use ISSPACE instead of isspace.
+ * pe-dll.c: Include "safe-ctype.h" instead of <ctype.h>.
+ (quoteput): Use ISSPACE instead of isspace.
+ (pe_dll_generate_implib, pe_process_import_defs): Use ISALNUM
+ instead of isalnum.
+
+2001-09-18 Alan Modra <amodra@bigpond.net.au>
+
+ * deffilep.y (def_stash_module): Constify "name" param.
+
+ * pe-dll.c: Replace CONST with const throughout.
+ (quick_symbol): Constify "n1", "n2", "n3" params.
+ (make_singleton_name_thunk): Constify "import" param. Make
+ "buffer_len" a size_t.
+ (make_import_fixup_entry): Constify "name", "fixup_name",
+ "dll_symname" params.
+ (pe_get16): Cast args of bfd_seek. Replace bfd_read with bfd_bread.
+ (pe_get32): Likewise.
+ (pe_implied_import_dll): Likewise.
+
+ * emultempl/beos.em (sort_by_file_name): Constify "ra", "rb".
+ (sort_by_section_name): Likewise.
+
+ * emultempl/pe.em: Move defines for arm_epoc_pe before bfd.h included.
+ (make_import_fixup): Cast printf arg, rel->address to long rather
+ than int.
+ (gld_${EMULATION_NAME}_after_open): Don't compare NULL against int.
+
+2001-09-15 Alan Modra <amodra@bigpond.net.au>
+
+ * ldmain.c (main): Rename BufferSize to ld_bufsz because HPUX
+ defines BufferSize. Increase buffer size by one.
+
+2001-09-14 Ralf Habacker <Ralf.Habacker@freenet.de>
+
+ * pe-dll.c (pe_walk_relocs_of_symbol): Fix memory leak.
+
+2001-09-14 Kevin Lo <kevlo@openbsd.org>
+
+ * configure.tgt: Add arm-openbsd target.
+
+2001-09-12 H.J. Lu <hjl@gnu.org>
+
+ * Makefile.am (ALL_EMULATIONS): Move eelf64ppc.o and
+ eelf64lppc.o to ...
+ (ALL_64_EMULATIONS): Here.
+ * Makefile.in: Regenerated.
+
+2001-09-12 Paul Sokolovsky <Paul.Sokolovsky@technologist.com>
+
+ * emultempl/pe.em(make_import_fixup): change signature to
+ take asection as well as arelec; we need this for proper
+ error reporting. Only call pe_create_import_fixup() if
+ there is no attempt to add a constant addend to the reloc;
+ otherwise, report error condition.
+ * pe-dll.c(pe_walk_relocs_of_symbol): change signature,
+ since final argument is a pointer to make_import_fixup().
+ Change call to cb() to match make_import_fixup() signature.
+ (make_import_fixup_mark): make buffer_len unsigned.
+ * pe-dll.h: change signature of pe_walk_relocs_of_symbol.
+
+2001-09-12 Charles Wilson <cwilson@ece.gatech.edu>
+
+ * ld.texinfo: add verbose documentation for auto-import
+ direct-addressing workaround, to compliment the terse
+ error message.
+
+2001-09-12 Andrew MacLeod <amacleod@redhat.com>
+
+ * scripttempl/v850.sc: Add gcc_except_table sections.
+
+2001-09-11 Jeffrey A Law (law@cygnus.com)
+
+ * emulparams/h8300helf.sh: Move stack to a much higher memory address.
+ * emulparams/h8300self.sh: Similarly.
+
+2001-09-05 Danny Smith <dannysmith@users.souceforge.net>
+
+ * ld.texinfo (Options, --stack): Correct default value for stack
+ reserve.
+
+2001-09-05 Tom Rix <trix@redhat.com>
+
+ * emultempl/aix.em : Handle import file XMC_XO and syscall symbols.
+
+2001-09-03 Andreas Jaeger <aj@suse.de>
+
+ * emultempl/beos.em: Declare prototypes for comparions functions,
+ adjust definitions.
+
+2001-09-02 Andreas Jaeger <aj@suse.de>
+
+ * emultempl/aix.em: Add missing prototype.
+ * emultempl/lnk960.em: Likewise.
+ * emultempl/vanilla.em: Likewise.
+ * emultempl/armcoff.em: Likewise.
+ * emultempl/armelf_oabi.em: Likewise.
+ * emultempl/beos.em: Likewise.
+ * emultempl/gld960c.em: Likewise.
+ * emultempl/gld960.em: Likewise.
+
+ * emulparams/elf64alpha.sh (PARSE_AND_LIST_PROLOGUE): Add parameter
+ for prototype declaration.
+
+2001-08-31 Eric Christopher <echristo@redhat.com>
+ Jason Eckhardt <jle@redhat.com>
+
+ * ldmain.c (get_emulation): Add support for -mips32 and -mips64.
+
+2001-08-31 Andreas Jaeger <aj@suse.de>
+
+ * emultempl/pe.em: Add missing prototypes.
+ (gld_${EMULATION_NAME}_after_open): Remove extra args to
+ pe_find_data_imports.
+ (pr_sym): Add unused attribute.
+
+2001-08-29 Joel Sherrill <joel@OARcorp.com>
+
+ * configure.tgt (i[3456]86-*-rtems*, m68*-*-rtems*): Change
+ default from coff to elf.
+
+2001-08-29 Jeff Law <law@redhat.com>
+
+ * emulparams/h8300helf.sh: Resync with h8300elf.sh. Update
+ ARCH specification.
+ * emulparams/h8300self.sh: Similarly.
+
+2001-08-28 J"orn Rennecke <amylaar@redhat.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add eh8300elf.o, eh8300elf.o and
+ eh8300self.o .
+ (eh8300elf.c, eh8300helf.c, eh8300self.c): New targets.
+ * configure.tgt (h8300-*-elf*): New case.
+ * emulparams/h8300elf.sh, emulparams/h8300helf.sh: New files.
+ * emulparams/h8300self.sh: New file.
+ * Makefile.in: Regenerated.
+
+2001-08-28 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * ldmain.c (main): Rename BSIZE to BufferSize to avoid collision
+ with macro name.
+
+2001-08-27 Linus Nordberg <linus@swox.com>
+ Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am (ALL_EMULATIONS): Add eelf64ppc.o and eelf64lppc.o.
+ (eelf64ppc.c, eelf64lppc.c): Add make targets.
+ Run "make dep-am"
+ * Makefile.in: Regenerate.
+ * configure.tgt: Add powerpc64 support. Move pdp11, pjl, pj
+ entries to correct alphabetical position.
+ * emulparams/elf64ppc.sh: New.
+ * emulparams/elf64lppc.sh: New.
+
+2001-08-27 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * ldmain.c (main): Declare BSIZE as static.
+
+2001-08-23 Jakub Jelinek <jakub@redhat.com>
+
+ * emultempl/elf32.em (place_orphan): Place orphan .rel* sections
+ into .rel.dyn resp. .rela.dyn if combreloc.
+ (get_script): If .x linker script is equal to .xn, only put it
+ once into the binary.
+ Add .xc and .xsc scripts.
+ (parse_args): Handle -z combreloc and -z nocombreloc.
+ * scripttempl/elf.sc (.rela.sbss): Fix a typo.
+ For .xc and .xsc scripts put all .rel* or .rela* input sections
+ but .rel*.plt and PLT-like sections into .rel.dyn resp. .rela.dyn.
+ * genscripts.sh (GENERATE_COMBRELOC_SCRIPT): Set if SCRIPT_NAME
+ is elf.
+ Strip trailing whitespace from script.
+ Generate .xc and .xsc scripts if requested.
+ * ldmain.c (main): Initialize link_info.combreloc and
+ link_info.spare_dynamic_tags.
+ * lexsup.c (OPTION_SPARE_DYNAMIC_TAGS): Define.
+ (ld_options): Add --spare-dynamic-tags option.
+ (parse_args): Likewise.
+ * ld.texinfo: Document -z combreloc and -z nocombreloc.
+ * ldint.texinfo: Document .xc and .xsc linker scripts.
+ * NEWS: Add notes about -z combreloc and SHF_MERGE.
+
+2001-08-22 H.J. Lu <hjl@gnu.org>
+
+ * emulparams/elf32fr30.sh: Add a newline.
+
+2001-08-21 Andreas Jaeger <aj@suse.de>
+
+ * deffilep.y: Add missing prototypes.
+ * pe-dll.c: Likewise.
+
+2001-08-20 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (insert_pad): Fix typos in last patch.
+
+ * ldlang.c: When traversing lang_statement_union_type lists,
+ consistently use "header.next" rather than "next".
+ * mpw-eppcmac.c: Likewise.
+ * emultempl/beos.em: Likewise.
+ * emultempl/hppaelf.em: Likewise.
+ * emultempl/pe.em: Likewise.
+ * ldlang.h (union lang_statement_union): Remove "next" field.
+
+ * ldlang.c (insert_pad): Use offsetof macro.
+ (lang_size_sections): Always neuter padding statements.
+ * emultempl/hppaelf.em (hppaelf_delete_padding_statements): Delete.
+
+ * pe-dll.c (pe_dll_fill_sections): Correct type of "relax" param
+ passed to lang_size_sections.
+ (pe_exe_fill_sections): Likewise.
+ * emultempl/pe.em (output_prev_sec_find): Copied from elf32.em.
+ (gld_${EMULATION_NAME}_place_orphan): Merge from elf32.em.
+
+2001-08-18 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/aix.em: Formatting fixes.
+
+2001-08-18 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (insert_pad): Make use of an existing pad statement if
+ available. Move code calculating alignment, adjusting section
+ alignment power, and adjusting dot to ..
+ (size_input_section): .. here. Remove unused relax param.
+ (lang_size_sections): Change boolean `relax' param to boolean *.
+ Adjust call to size_input_section. Make use of insert_pad to
+ place pad after the assignment statement. If relaxing, zap
+ padding statements.
+ (reset_memory_regions): Reset output_bfd section sizes too.
+ (relax_again): Move to..
+ (lang_process): ..here. Adjust call to lang_size_sections, and
+ remove duplicated code.
+ * ldlang.h (lang_size_sections): Change `relax' param to boolean *.
+
+2001-08-17 Alan Modra <amodra@bigpond.net.au>
+
+ * ld.texinfo: Document that fill values now use the four least
+ significant bytes.
+ * emulparams/elf32fr30.sh (NOP): Update.
+ * emulparams/elf32mcore.sh: Likewise.
+ * emulparams/elf64_s390.sh: Likewise.
+ * emulparams/elf_i386.sh: Likewise.
+ * emulparams/elf_i386_be.sh: Likewise.
+ * emulparams/elf_i386_chaos.sh: Likewise.
+ * emulparams/elf_i386_ldso.sh: Likewise.
+ * emulparams/elf_s390.sh: Likewise.
+ * emulparams/elf_x86_64.sh: Likewise.
+ * emulparams/i386moss.sh: Likewise.
+ * emulparams/i386nw.sh: Likewise.
+ * emulparams/m68kelf.sh: Likewise.
+ * scripttempl/elf.sc: Update NOP comment.
+ * scripttempl/elfi370.sc: Likewise.
+ * scripttempl/elfm68hc11.sc: Likewise.
+ * scripttempl/elfm68hc12.sc: Likewise.
+ * scripttempl/nw.sc: Likewise.
+
+2001-08-15 Tom Rix <trix@redhat.com>
+
+ * ldgram.y (saved_script_handle): Initialize to NULL.
+ * ldmain.c (main): Change check on saved_script_handle.
+
+2001-08-14 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf32.em: Formatting fixes.
+ (output_prev_sec_find): Test for bfd_ind_section too; do so by
+ looking at sec->owner.
+ (output_rel_find): Move function inside LDEMUL_PLACE_ORPHAN test.
+ (gld${EMULATION_NAME}_place_orphan): Add a few comments. Remove
+ unused code, and reorganize orphan section placement code.
+
+ * ldlang.c (wild_doit): Rename to lang_add_section.
+ * ldlang.h: Here too.
+ * mpw-elfmips.c: And here.
+ * emultempl/beos.em: And here.
+ * emultempl/elf32.em: And here.
+ * emultempl/hppaelf.em: And here.
+ * emultempl/pe.em: And here.
+
+2001-08-13 Richard Henderson <rth@redhat.com>
+
+ * emultempl/needrelax.em: New file.
+ * emulparams/elf64_ia64.sh (EXTRA_EM_FILE): Reference it.
+ * Makefile.am (eelf64_ia64.c): Depend on it.
+ * Makefile.in: Rebuild.
+
+2001-08-13 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf32.em: For SEC_EXCLUDE sections, ensure that
+ output_section is set non-NULL.
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Return
+ `true' for SEC_EXCLUDE sections so that the generic code doesn't
+ needlessly create an output_section_statement. Treat a correctly
+ named output_section_statement with NULL bfd_section as compatible.
+
+2001-08-13 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * emultempl/generic.em: Support EXTRA_EM_FILE.
+ (ld_${EMULATION_NAME}_emulation): Support emulation parameters
+ LDEMUL_BEFORE_PARSE, LDEMUL_SYSLIB, LDEMUL_HLL,
+ LDEMUL_AFTER_PARSE, LDEMUL_AFTER_OPEN, LDEMUL_AFTER_ALLOCATION,
+ LDEMUL_SET_OUTPUT_ARCH, LDEMUL_CHOOSE_TARGET,
+ LDEMUL_BEFORE_ALLOCATION, LDEMUL_GET_SCRIPT, LDEMUL_FINISH,
+ LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS,
+ LDEMUL_OPEN_DYNAMIC_ARCHIVE, LDEMUL_PLACE_ORPHAN,
+ LDEMUL_SET_SYMBOLS, LDEMUL_PARSE_ARGS, LDEMUL_UNRECOGNIZED_FILE,
+ LDEMUL_LIST_OPTIONS, LDEMUL_RECOGNIZED_FILE,
+ LDEMUL_FIND_POTENTIAL_LIBRARIES.
+
+2001-08-12 Richard Henderson <rth@redhat.com>
+
+ * scripttempl/elf.sc, scripttempl/elfd30v.sc,
+ scripttempl/elfm68hc11.sc, scripttempl/elfm68hc12.sc,
+ scripttempl/v850.sc: Keep .jcr data.
+
+2001-08-12 H.J. Lu <hjl@gnu.org>
+ Andrew Haley <aph@cambridge.redhat.com>
+ Nick Clifton <nickc@redhat.com>
+
+ * ldgram.y (had_script): Change name to saved_script_handle.
+ Change type to file handle.
+ * ld.h (had_script): Rename and retype.
+ * ldfile.c (ldfile_open_command_file): Save the file handle
+ used in saved_script_handle.
+ * lexsup.c (parse_args): Do not allow -c option to alter
+ saved_script_handle.
+ * ldmain.c (main): Print out the linker script used if
+ --verbose is given. Check saved_script_handle to obtain the
+ external linker script used, or if NULL, dump the builtin
+ script.
+ * ld.texinfo: Document that --verbose now dumps the linker
+ script used, regardless of whether it was an internal or an
+ external script.
+
+2001-08-10 Andreas Jaeger <aj@suse.de>
+
+ * configure.in: Add -Wstrict-prototypes and -Wmissing-prototypes
+ to build warnings.
+ * configure: Regenerate.
+
+2001-08-09 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf32.em (output_prev_sec_find): Add missing prototype.
+
+ * scripttempl/elf.sc: Move non-text .dynamic section before
+ .plt/.got/.sdata* group.
+ (OTHER_GOT_SECTIONS): Move to immediately after .got.
+ (OTHER_SDATA_SECTIONS): Add.
+ * emulparams/criself.sh: Use OTHER_SDATA_SECTIONS rather than
+ OTHER_GOT_SECTIONS.
+ * emulparams/crislinux.sh: Likewise.
+ * emulparams/elf32b4300.sh: Likewise.
+ * emulparams/elf32bmip.sh: Likewise.
+ * emulparams/elf32bmipn32.sh: Likewise.
+ * emulparams/elf32bsmip.sh: Likewise.
+ * emulparams/elf32btsmip.sh: Likewise.
+ * emulparams/elf32ebmip.sh: Likewise.
+ * emulparams/elf32elmip.sh: Likewise.
+ * emulparams/elf32l4300.sh: Likewise.
+ * emulparams/elf32lmip.sh: Likewise.
+ * emulparams/elf32lsmip.sh: Likewise.
+ * emulparams/elf32ltsmip.sh: Likewise.
+ * emulparams/elf64bmip.sh: Likewise.
+ * emulparams/elf64btsmip.sh: Likewise.
+ * emulparams/elf64ltsmip.sh: Likewise.
+
+2001-08-08 Alan Modra <amodra@bigpond.net.au>
+
+ * genscripts.sh: Source the emulparams script before each output
+ script is generated so that variables like `RELOCATING' may affect
+ variables defined in the emulparams script.
+
+2001-08-04 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/aix.em: ldexp.h,ldlang.h,ldfile.h,ldemul.h go in this
+ order.
+
+ * emultempl/beos.em (sort_sections): Modify for 2001-08-03 change,
+ ie. iterate over wild_statement.section_list.
+ (gld${EMULATION_NAME}_place_orphan): Likewise.
+
+2001-08-03 Stephane Carrez <Stephane.Carrez@worldnet.fr>
+
+ * scripttempl/elfm68hc12.sc (FINISH_CODE, FINISH_RELOC): New to handle
+ .fini[0-4] sections used by _exit
+ (CTOR, DTOR): Export ctor/dtor symbols; move them to ROM.
+ (*.text,*.data,*.bss): Take into account .text.*, .data.*, .bss.*.
+ * scripttempl/elfm68hc11.sc: Likewise.
+
+2001-08-03 H.J. Lu <hjl@gnu.org>
+
+ * emultempl/beos.em (init): Add the missing initialization.
+
+2001-08-03 Alan Modra <amodra@bigpond.net.au>
+
+ * ld.texinfo (Input Section Basics): Clarify ordering of output
+ sections.
+ * ldlang.c (callback_t): Add wildcard_list param.
+ (walk_wild_section): Remove "section" param. Rewrite for
+ lang_wild_statement_type change. Remove unique_section_p test.
+ (walk_wild_file): Remove "section" param.
+ (walk_wild): Remove "section" and "file" params.
+ (lang_gc_wild): Likewise.
+ (wild): Likewise. Modify for lang_wild_statement_type change.
+ (wild_sort): Likewise. Add "sec" param.
+ (gc_section_callback): Likewise.
+ (output_section_callback): Likewise. Do unique_section_p test.
+ (map_input_to_output_sections): Modify call to wild.
+ (lang_gc_sections_1): Likewise.
+ (print_wild_statement): Modify for lang_wild_statement_type
+ change.
+ (lang_add_wild): Replace filename, filenames_sorted param with
+ filespec. Replace section_name, sections_sorted,
+ exclude_filename_list with section_list.
+ * ldlang.h (lang_add_wild): Here too.
+ (lang_wild_statement_type): Replace section_name, sections_sorted,
+ and exclude_filename_list with section_list.
+ * ldgram.y (current_file): Delete.
+ (%union): Add wildcard_list.
+ (file_NAME_list): Set type to wildcard_list. Build a linked list
+ rather than calling lang_add_wild for each entry.
+ (input_section_spec_no_keep): Call lang_add_wild here instead.
+ * ld.h (struct wildcard_list): Declare.
+ * mri.c (mri_draw_tree): Modify to suit new lang_add_wild.
+
+2001-08-02 Charles Wilson <cwilson@ece.gatech.edu>
+
+ * ldmain.c (main): initialize link_info.pei386_auto_import
+ * pe-dll.c: new tables for auto-export filtering
+ (auto_export): change API, pass abfd for contextual filtering.
+ Loop thru tables of excluded symbols instead of comparing
+ "by hand".
+
+2001-08-02 Paul Sokolovsky <paul.sokolovsky@technologist.com>
+
+ * pe-dll.c: new variable pe_dll_enable_extra_debug. New
+ static variable current_sec (static struct sec *). Add
+ forward declaration for add_bfd_to_link.
+ (process_def_file): Don't export undefined symbols. Do not
+ export symbols starting with "_imp__". Call auto_export()
+ with new API.
+ (pe_walk_relocs_of_symbol): New function.
+ (generate_reloc): add optional extra debugging
+ (pe_dll_generate_def_file): eliminate extraneous initial blank
+ line in output
+ (make_one): enlarge symtab to make room for __nm__ symbols
+ (DATA auto-import support).
+ (make_singleton_name_thunk): New function.
+ (make_import_fixup_mark): New function.
+ (make_import_fixup_entry): New function.
+ (pe_create_import_fixup): New function.
+ (add_bfd_to_link): Specify that 'name' argument is a CONST
+ char *.
+ * pe-dll.h: declare new variable pe_dll_extra_pe_debug;
+ declare new functions pe_walk_relocs_of_symbol and
+ pe_create_import_fixup.
+ * emultempl/pe.em: add new options --enable-auto-import,
+ --disable-auto-import, and --enable-extra-pe-debug.
+ (make_import_fixup): New function.
+ (pe_find_data_imports): New function.
+ (pr_sym): New function.
+ (gld_${EMULATION_NAME}_after_open): Add optional extra pe
+ debugging. Call pe_find_data_imports. Mark .idata as DATA, not
+ CODE.
+
+2001-08-02 Charles Wilson <cwilson@ece.gatech.edu>
+
+ * ld.texinfo: add additional documentation for
+ --export-all-symbols. Document --out-implib,
+ --enable-auto-image-base, --disable-auto-image-base,
+ --dll-search-prefix, --enable-auto-import, and
+ --disable-auto-import.
+ * ldint.texinfo: Add detailed documentation on auto-import
+ implementation.
+
+2001-07-30 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * ld.texinfo (Simple Assignments): Fix computation in SECTIONS
+ example.
+
+2001-07-24 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am: Update dependencies with "make dep-am".
+ * Makefile.in: Regenerate
+
+2001-07-23 Alan Modra <amodra@bigpond.net.au>
+
+ * ldcref.c (check_section_sym_xref): New function.
+ (check_nocrossrefs): Call it.
+ (check_nocrossref): Interate over h->refs here instead of..
+ (check_refs): ..here. Pass in the symbol name, section, and bfd
+ rather than hash_entry pointers.
+ (struct check_refs_info): Keep symbol name rather than hash entry.
+ Remove "same".
+ (check_reloc_refs): Tweak for above changes in check_refs_info.
+ Only report references to section syms when symname is NULL to
+ prevent duplicate messages for the same reloc.
+
+2001-07-19 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * ldexp.c (exp_print_tree): Use stderr if config.map_file is not
+ available. Do not print NULL trees.
+ (exp_print_token): Print unknown tokens with values > 126 as
+ decimal values not ASCII characters.
+
+ * ldlang.c (lang_leave_overlay): If a region is specified assign
+ it to all sections inside the overlay unless they have been
+ assigned to the own, non-default, memory region.
+
+ * README: Add header for consistency with other README files.
+
+2001-07-14 H.J. Lu <hjl@gnu.org>
+
+ * emultempl/elf32.em (output_prev_sec_find): Never return
+ bfd_abs_section_ptr, bfd_com_section_ptr nor
+ bfd_und_section_ptr.
+
+2001-07-14 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * Makefile.am (em32relf.c): Change dependency from generic.em to
+ elf32.em.
+ * Makefile.in: Regenerate.
+
+2001-07-14 matthew green <mrg@eterna.com.au>
+
+ * configure.tgt (i386-*-netbsdelf*): New target.
+ (i386-*-netbsd*): Set targ_extra_emuls to `elf_i386'
+
+2001-07-13 Jakub Jelinek <jakub@redhat.com>
+
+ * emultempl/elf32.em (output_prev_sec_find): New.
+ (place_orphan): Use it.
+
+2001-07-11 H.J. Lu <hjl@gnu.org>
+
+ * ldmain.c (main): Fix typos in the last change.
+
+2001-07-11 Jakub Jelinek <jakub@redhat.com>
+
+ * ldmain.c (main): Disallow -F and -f without -shared.
+
+2001-07-11 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * emultempl/pe.em (after_open): Check for the output_bfd not
+ having any coff_data structure allocated to it.
+
+2001-07-09 David O'Brien <obrien@FreeBSD.org>
+
+ * emultempl/elf32.em: Do not assuming that contents of the buffer
+ returned from basename function will remain unchanged accross other
+ function calls.
+
+2001-07-03 H.J. Lu <hjl@gnu.org>
+
+ * scripttempl/elf.sc (DYNAMIC_PAD): Revert the change made on
+ 2001-07-03. It creates dynamic entries even for static binaries.
+
+2001-07-03 Jakub Jelinek <jakub@redhat.com>
+
+ * scripttempl/elf.sc (DYNAMIC_PAD): New variable.
+ (DYNAMIC): Use it to reserve few dynamic entries for
+ post-linking tools.
+
+2001-06-27 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/hppa64linux.sh: New file.
+ * configure.tgt: hppa*64*-*-linux* uses hppa64linux.sh
+ * Makefile.am (ALL_64_EMULATIONS): Add ehppa64linux.o
+ (ehppa64linux.c): Add rule to make it.
+ Run "make dep-am".
+ * Makefile.in: Regenerate.
+
+2001-06-21 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld.texinfo (Options, -r): Mention restrictions when using
+ different object formats.
+
+2001-06-19 Hans-Peter Nilsson <hp@axis.com>
+
+ * ldlang.c (lang_check): Emit fatal error if relocatable link
+ between different object flavours with relocations in input.
+
+2001-06-19 H.J. Lu <hjl@gnu.org>
+
+ * ld.texinfo (-E, --export-dynamic): Mention --version-script.
+ (--version-script): Mention the language support.
+
+2001-06-19 H.J. Lu <hjl@gnu.org>
+
+ * ldlang.c (lang_check): Revert the change mode on 2001-06-15.
+
+2001-06-18 H.J. Lu <hjl@gnu.org>
+
+ * Makefile.am (ld.1): Remove the prefix `$(srcdir)/'.
+ (diststuff): Add $(MANS).
+ * Makefile.in: Regenerated.
+
+ * ld.1: Removed.
+
+2001-06-18 Hans-Peter Nilsson <hp@axis.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation):
+ Update for API change in bfd_elf${ELFSIZE}_size_dynamic_sections.
+ * mpw-elfmips.c (gldelf32ebmip_before_allocation): Ditto.
+ * ld.h (args_type): Remove member export_dynamic. All users
+ changed to use struct bfd_link_info member.
+
+ * Makefile.am (ecriself.c, ed10velf.c, ei386moss.c): Depend on
+ $(srcdir)/emultempl/elf32.em, not $(srcdir)/emultempl/generic.em.
+ * Makefile.in: Regenerate.
+
+2001-06-18 H.J. Lu <hjl@gnu.org>
+
+ * ldlang.c (init_os): Add the newline to the einfo call.
+ (lang_check): Likewise.
+ (lang_do_version_exports_section): Likewise.
+
+2001-06-15 H.J. Lu <hjl@gnu.org>
+
+ * lexsup.c (parse_args); Save optind to report unrecognized
+ option.
+
+2001-06-15 Hans-Peter Nilsson <hp@axis.com>
+
+ * ldlang.c (lang_check): Emit fatal error if relocatable link
+ between different object flavours.
+
+ * lexsup.c (parse_args) <case OPTION_EXPORT_DYNAMIC, case 'E'>:
+ Set new link_info member export_dynamic.
+ * ldmain.c (main): Initialize new link_info member export_dynamic.
+
+2001-06-12 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * ldlang.c (walk_wild): Only call walk_wild_file if
+ lookup_name returns something.
+ (lookup_name): If load_symbols fails, return NULL.
+ (load_symbols): Change to a boolean function.
+ (open_input_bfds): If load_symbols fails then do not make the
+ executable.
+
+2001-06-08 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (record_bfd_errors): Remove.
+
+ * emultempl/aix.em: Fix copyright dates.
+
+2001-06-07 Andreas Jaeger <aj@suse.de>
+
+ * elf_x86_64.sh (NONPAGED_TEXT_START_ADDR): Increase.
+ (TEXT_START_ADDR): Likewise.
+
+2001-06-06 Martin Schwidefsky <schwidefsky@de.ibm.com>
+
+ * configure.host: Set HOSTING_CRT0/HOSTING_LIBS correctly for s/390.
+
+2001-06-05 Danny Smith <danny_r_smith_2001@yahoo.co.nz>
+
+ * emultempl/pe.em (init): Reduce default stack reserve to 0x200000.
+
+2001-05-31 H.J. Lu <hjl@gnu.org>
+
+ * ldlang.c (open_input_bfds): Don't change the bfd error
+ handler whilst loading symbols.
+
+2001-05-28 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * configure.tgt: Remove i370-mvs architecture, it is not currently
+ supported.
+
+2001-05-25 H.J. Lu <hjl@gnu.org>
+
+ * emulparams/ppcmacos.sh: Add SYSCALL_MASK and SYMBOL_MODE_MASK
+ like emulparams/aixppc.sh.
+
+2001-05-25 H.J. Lu <hjl@gnu.org>
+
+ * emultempl/beos.em (gld${EMULATION_NAME}_before_parse): Move
+ setting of output_filename after bfd_scan_arch.
+ * emultempl/pe.em: Likewise.
+
+2001-05-25 H.J. Lu <hjl@gnu.org>
+
+ * emulparams/aixrs6.sh: Add SYSCALL_MASK and SYMBOL_MODE_MASK
+ like emulparams/aixppc.sh.
+
+ * emultempl/aix.em (sc): Use ${srcdir}/emultempl/ostring.sed
+ instead of ${srcdir}/emultempl/stringify.sed.
+
+2001-05-25 Timothy Wall <twall@oculustech.com>
+
+ * emulparams/elf64_aix.sh: Change settings to match IBM linker
+ output.
+
+2001-05-25 Alan Modra <amodra@one.net.au>
+
+ * configure.host: Replace linuxoldld with linux*oldld.
+ * configure.tgt: Likewise.
+
+2001-05-24 H.J. Lu <hjl@gnu.org>
+
+ * emultempl/stringify.sed: Removed again.
+
+2001-05-24 H.J. Lu <hjl@gnu.org>
+
+ * emultempl/aix.em (OUTPUT_ARCH): Defined.
+ (gld${EMULATION_NAME}_before_parse): Initialize
+ ldfile_output_architecture, ldfile_output_machine and
+ ldfile_output_machine_name from ${OUTPUT_ARCH} if possible.
+ * emultempl/beos.em: Likewise.
+ * emultempl/elf32.em: Likewise.
+ * emultempl/linux.em: Likewise.
+ * emultempl/mipsecoff.em: Likewise.
+ * emultempl/pe.em: Likewise.
+ * emultempl/sunos.em: Likewise.
+
+2001-05-24 Tom Rix <trix@redhat.com>
+
+ * emultempl/aix.em : (gld${EMULATION_NAME}_read_file)
+ udate import file format.
+ (change_symbol_mode) New, same
+ (is_syscall) New, same
+ * emulparams/aixppc.sh : add SYSCALL_MASK and SYMBOL_MODE_MASK
+ * emulparams/aixppc64.sh : same
+ * emulparams/aixrs6.sh : same
+ * emulparams/ppcmacos.sh : same
+ * emultempl/aix.em : use strtoull to parse options
+ * Makefile.am : add eaixppc64 emulation for xcoff64
+ * Makefile.in : same
+ * configure.tgt : same
+
+ * scripttempl/aix.sc : default text section offset to 0x10000000
+ default data section offset to 0x20000000
+ add .sv3264 and .sv64 pseudo sections
+ loader and debug sections use the currect section offset.
+
+ * emultempl/aix.em : Add xcoff64 support
+ Add -binitfini support
+ (gld${EMULATION_NAME}_before_parse) -binitfini
+ (gld${EMULATION_NAME}_parse_args) same
+ (gld${EMULATION_NAME}_before_allocation) format change for special
+ sections
+
+ * emulparams/aixppc64.sh : New file for xcoff64 support
+
+2001-05-23 Alexandre Oliva <aoliva@redhat.com>
+
+ * emultempl/elf32.em (ELF_INTERPRETER_SET_DEFAULT): Use this new
+ variable to avoid non-portable shell construct.
+
+2001-05-23 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
+
+ * ldmain.c (get_emulation): Add -mips5 command line argument.
+
+2001-05-22 Alexandre Oliva <aoliva@redhat.com>
+
+ * emulparams/elf_i386_ldso.sh: New, copied from elf_i386.sh.
+ (ELF_INTERPRETER_NAME): Define it.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): Use
+ it.
+ * configure.tgt (targ_emul, targ_extra_emuls)
+ [i[3456]86-*-solaris2*, i[3456]86-*-solaris*]: Use elf_i386_ldso
+ as primary, elf_i386 as extra.
+ * Makefile.am (ALL_EMULATIONS): Added eelf_i386_ldso.o.
+ (eelf_i386_ldso.c): New rule.
+ * Makefile.in: Rebuilt.
+
+2001-05-22 Nick Clifton <nickc@redhat.com>
+
+ * lexsup.c (ld_options): Allow -I to be an alias for
+ --dynamic-linker. This is for Solaris compatability.
+ * ld.texinfo: Document that -I can be used.
+ * ld.1: Regenerate.
+
+2001-05-16 Alan Modra <amodra@one.net.au>
+
+ * ldlang.c (wild_doit): Use linker_has_input to reliably determine
+ whether an input section is the first one assigned to an output
+ section.
+ Assorted formatting fixes.
+
+2001-05-14 DJ Delorie <dj@delorie.com>
+
+ * Makefile.am (ld.dvi): Search bfd/doc for texinfo files.
+ * Makefile.in: Ditto.
+
+2001-05-11 Jakub Jelinek <jakub@redhat.com>
+
+ * emulparams/elf64_ia64.sh (OTHER_READONLY_SECTIONS): Put
+ .gnu.linkonce.ia64unw{,i} sections into corresponding .IA_64.unwind*
+ output sections.
+ * emulparams/elf64_aix.sh (OTHER_READONLY_SECTIONS): Likewise.
+
+2001-05-11 Jakub Jelinek <jakub@redhat.com>
+
+ * ldlang.c (lang_process): Call bfd_merge_sections.
+
+2001-05-07 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
+
+ * ldgram.y: Fix typo.
+
+2001-05-03 H.J. Lu <hjl@gnu.org>
+
+ * emultempl/elf32.em: Include "libiberty.h".
+ (gld${EMULATION_NAME}_vercheck): Call basename () to get the
+ basename of the bfd filename.
+ (gld${EMULATION_NAME}_stat_needed): Likewise.
+ (gld${EMULATION_NAME}_try_needed): Likewise.
+ (gld${EMULATION_NAME}_open_dynamic_archive): Likewise.
+
+2001-05-02 H.J. Lu <hjl@gnu.org>
+
+ * emultempl/pe.em: Include <ctype.h>.
+
+2001-05-02 Johan Rydberg <jrydberg@opencores.org>
+
+ * emulparams/elf32openrisc.sh: New file.
+
+ * Makefile.am: Add OpenRISC target.
+ * Makefile.in: Regenerated.
+
+ * configure.tgt: Add openrisc-*-* mapping.
+
+2001-05-02 Nick Clifton <nickc@redhat.com>
+
+ * emultempl/aix.em: Replace buystring with xstrdup.
+ * emultempl/beos.em: Replace buystring with xstrdup.
+
+2001-05-02 H.J. Lu <hjl@gnu.org>
+
+ * ldfile.c: Include "libiberty.h".
+ * ldlex.l: Likewise.
+
+ * ldmisc.c (buystring): Removed.
+ * ldmisc.h: Likewise.
+
+ * ldfile.c: Replace buystring with xstrdup.
+ * ldlang.c: Likewise.
+ * ldlex.l: Likewise.
+ * ldmain.c: Likewise.
+ * ldmisc.c: Likewise.
+ * lexsup.c: Likewise.
+ * mpw-eppcmac.c: Likewise.
+
+2001-04-30 Andreas Jaeger <aj@suse.de>
+
+ * emulparms/elf_x86_64.sh (MAXPAGESIZE): Fix value.
+
+2001-04-28 Paul Sokolovsky <Paul.Sokolovsky@technologist.com>
+
+ * ldlang.c (load_symbols): Give emulation a chance
+ to process unrecognized file before fatal error is
+ reported, not after.
+
+2001-04-27 Sean McNeil <sean@mcneil.com>
+
+ * configure.tgt: Add arm-vxworks target.
+ * scripttempl/armcoff.sc: Support .text or .data as a section name
+ prefix.
+ Define _etext.
+
+2001-04-13 J.T. Conklin <jtc@redback.com>
+
+ * ld.texinfo: Document --fatal-warnings.
+ * ld.1: Regenerate.
+
+ * ldmisc.c (vfinfo): Set flag to inhibit making executable if
+ warnings have been turned into errors.
+ * lexsup.c (OPTION_WARN_FATAL): Define.
+ (ld_options): Entry for --fatal-warnings.
+ (parse_args): Handle OPTION_WARN_FATAL.
+ * ld.h (ld_config_type): Add fatal_warnings field.
+
+2001-04-13 Jakub Jelinek <jakub@redhat.com>
+
+ * ldmain.c (main): Default to discard_sec_merge.
+ * lexsup.c (OPTION_DISCARD_NONE): Define.
+ (ld_options): Add --discard-none.
+ (parse_args): Handle OPTION_DISCARD_NONE.
+ * ldlang.c (wild_doit): SEC_MERGE should be set in the output
+ section only if SEC_MERGE and SEC_STRINGS flags and entsize of
+ all its input sections match.
+
+2001-04-05 Steven J. Hill <sjhill@cotw.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add eelf32ltsmip.o.
+ (ALL_64_EMULATIONS): Add eelf64btsmip.o and eelf64ltsmip.o.
+ (eelf32ltsmip.c): New target.
+ (eelf64btsmip.c): Likewise.
+ (eelf64ltsmip.c): Likewise.
+ * Makefile.in: Regenerated.
+
+ * configure.tgt (mips*el-*-linux-gnu): Uses traditional MIPS
+ target.
+ (mips*-*-linux-gnu*): Likewise.
+
+ * emulparams/elf32ltsmip.sh: New. Traditional little endian
+ MIPS taget.
+ * emulparams/elf64btsmip.sh: New. Traditional 64bit big endian
+ target.
+ * emulparams/elf64ltsmip.sh: New. Traditional 64bit little
+ endian target.
+
+2001-04-05 Hans-Peter Nilsson <hp@axis.com>
+
+ * emulparams/criself.sh (EXECUTABLE_SYMBOLS): Cannot provide
+ correct value of __Stext here.
+ (TEXT_START_SYMBOLS): Define; always define __Stext, to start of
+ .startup section.
+
+ * emulparams/crislinux.sh: Remove FIXME.
+
+2001-04-02 Alan Modra <alan@linuxcare.com.au>
+
+ * emulparams/hppalinux.sh (MAXPAGESIZE): Set to 64k.
+ (TEXT_START_ADDR, TARGET_PAGE_SIZE): Likewise.
+
+2001-03-27 Hans-Peter Nilsson <hp@axis.com>
+
+ * configure.tgt (cris-*-*): Change default emulation to criself.
+ (cris-*-*aout*): New rule.
+
+2001-03-27 Matthew Wilcox <willy@ldl.fc.hp.com>
+
+ * emulparams/hppalinux.sh (MAXPAGESIZE): Set to 0x4000.
+ (TEXT_START_ADDR, TARGET_PAGE_SIZE): Ditto.
+
+2001-03-26 Andreas Jaeger <aj@suse.de>
+
+ * ld.texinfo (Overview): Fix syntax in texi code.
+
+2001-03-25 Stephane Carrez <Stephane.Carrez@worldnet.fr>
+
+ * ld.texinfo: Put @c man indications to generate the ld man page.
+ When generating man, define all the variables. Define SEEALSO
+ and SYNOPSIS. Re-organize some lines to avoid the cross references.
+ * Makefile.am (MANCONF, TEXI2POD, POD2MAN): New variables.
+ (ld.1): Generate from ld.texinfo.
+ * Makefile.in: Regenerate.
+
+2001-03-23 Mark Elbrecht <snowball3@bigfoot.com>
+
+ * scripttempl/i386go32.sc: Support the GCC flags '-ffunction-sections'
+ and '-fdata-sections'. Set the VMA of STABS sections to zero.
+
+2001-03-17 Ulrich Drepper <drepper@redhat.com>
+
+ * emultmpl/elf32.em (gld${EMULATION_NAME}_search_needed): If NAME
+ is an absolute path look only for this file and not along the path.
+
+2001-03-17 Ulrich Drepper <drepper@redhat.com>
+
+ * emultempl/elf32.em (OPTION_GROUP): New macro.
+ Add new option Bgroup to longopts.
+ (gld*_parse_args): Handle GROUP_OPTION and recognize -z defs.
+ (gld*_list_options): Add -Bgroup and -z defs.
+ * ld.1: Document -Bgroup and -z defs.
+ * ld.texinfo: Likewise.
+
+2001-03-07 Michael Meissner <meissner@redhat.com>
+
+ * scripttempl/elfd10v.sc (.rodata,.rodata1,.data1,.sdata): Deal
+ with sections created by -fdata-sections.
+ (.dynbss,.bss): Ditto.
+
+2001-03-05 Alan Modra <alan@linuxcare.com.au>
+
+ * emultempl/m68kelf.em (m68k_elf_after_allocation): Call
+ after_allocation_default, not gld..._before_allocation.
+
+2001-02-27 Alan Modra <alan@linuxcare.com.au>
+
+ * configure.in (BFD_VERSION): New.
+ (AM_INIT_AUTOMAKE): Use $BFD_VERSION.
+ * configure: Regenerate.
+ * Makefile.am: Run "make dep-am"
+ * Makefile.in: Regenerate.
+
+2001-02-26 Timothy Wall <twall@cygnus.com>
+
+ * emulparams/elf64_aix.sh: Add additional read-only sections;
+ uncomment lines which are now required.
+
+2001-02-26 H.J. Lu <hjl@gnu.org>
+
+ * ldlang.c (open_input_bfds): Set the bfd error handler so
+ that problems can be caught whilst loading symbols.
+ (record_bfd_errors): New function: Report BFD errors and mark
+ the executable output as being invalid.
+
+2001-02-22 Timothy Wall <twall@cygnus.com>
+
+ * configure.host: Add configuration for ia64-*-aix*.
+ * Makefile.am (ALL_64_EMULATIONS): Add emulation for ia64-*-aix*.
+ Add dependencies for eelf64_aix.c.
+ * Makefile.in: Regenerate.
+ * configure.tgt: Add ia64-*-aix* mapping.
+ * emulparams/elf64_aix.sh: Add settings for elf64 on aix5.
+
+2001-02-20 H.J. Lu <hjl@gnu.org>
+
+ * ldfile.c (ldfile_open_file): Set entry->search_dirs_flag to
+ false if we found the file.
+
+2001-02-18 David O'Brien <obrien@FreeBSD.org>
+
+ * configure.tgt: Add FreeBSD/Alpha, FreeBSD/x86-64, FreeBSD/ia64,
+ FreeBSD/PowerPC, FreeBSD/arm, and FreeBSD/sparc64 entries.
+
+2001-02-18 lars brinkhoff <lars@nocrew.org>
+
+ * Makefile.am: Add PDP-11 target.
+ * configure.tgt: Likewise.
+ * emulparams/pdp11.sh: New file.
+
+2001-02-17 David O'Brien <obrien@FreeBSD.org>
+
+ * configure.host: Add a generic FreeBSD configuration entry such that
+ all [modern] FreeBSD systems on all platforms will look the same.
+
+2001-02-14 H.J. Lu <hjl@gnu.org>
+
+ * configure.tgt: Remove mention of earmelf_linux26.
+
+2001-02-13 Richard Henderson <rth@redhat.com>
+
+ * emulparams/elf64_ia64.sh (OTHER_GOT_SYMBOLS): Remove.
+
+2001-02-13 H.J. Lu <hjl@gnu.org>
+
+ * ldexp.h (node_type): Add etree_provided.
+ * ldexp.c (exp_fold_tree): Handle etree_provided. Set the node
+ type to etree_provided if defined by PROVIDE. Allow updating
+ for etree_provided.
+ (exp_print_tree): Handle etree_provided.
+ * mpw-elfmips.c (gldelf32ebmip_find_exp_assignment): Handle
+ etree_provided.
+
+2001-02-09 David Mosberger <davidm@hpl.hp.com>
+
+ * emulparams/elf64_ia64.sh (OTHER_READONLY_SECTIONS): Add
+ .IA_64.unwind.* pattern to unwind table section and
+ .IA_64.unwind_info* pattern to unwind info section.
+
+2001-02-09 Martin Schwidefsky <schwidefsky@de.ibm.com>
+
+ * Makefile.am: Add linux target for S/390.
+ * Makefile.in: Likewise.
+ * configure.host: Likewise.
+ * configure.tgt: Likewise.
+ * emulparams/elf64_s390.sh: New file.
+ * emulparams/elf_s390.sh: New file.
+
+2001-02-09 Jakub Jelinek <jakub@redhat.com>
+
+ * configure.tgt (sparc64-*-linux-gnu*): Add elf32_sparc into
+ targ_extra_libpath.
+ (sparc-*-linux-gnu*): Add elf64_sparc into targ_extra_libpath.
+
+2001-02-06 Philip Blundell <philb@gnu.org>
+
+ * Makefile.am: Remove mention of earmelf_linux26.
+ * Makefile.in: Regenerate.
+
+2001-02-04 Philip Blundell <philb@gnu.org>
+
+ * emulparams/armelf_linux.sh (TEXT_START_ADDR): Set to 0x8000.
+ * emulparams/armelf_linux26.sh: Delete.
+ * configure.tgt: Remove mention of armelf_linux26 emulation.
+
+2001-02-01 Nick Clifton <nickc@redhat.com>
+
+ * ld.1: Replace occurances of -oformat with --oformat.
+
+2001-01-25 Jim Driftmyer <jdrift@stny.rr.com>
+
+ * ldlang.c (lang_leave_overlay): Don't set lma_region when
+ load_base is specified.
+
+2001-01-24 Hans-Peter Nilsson <hp@axis.com>
+
+ * emultempl/elf32.em: Correct spelling in comments and listed
+ options.
+
+2001-01-23 Alan Modra <alan@linuxcare.com.au>
+
+ * ldlang.c (lang_leave_overlay): Only set lma_region from the
+ default for the first section of a group of overlay sections.
+
+2001-01-22 Alan Modra <alan@linuxcare.com.au>
+
+ * Makefile.am (GENSCRIPTS): Pass exec_prefix.
+ * Makefile.in: Regenerate.
+ * genscripts.sh: Use exec_prefix parameter to specify tool lib.
+ Check for null tool_dir.
+
+2001-01-16 Jim Wilson <wilson@redhat.com>
+
+ * emulparams/elf64_ia64.sh (OTHER_READONLY_SECTIONS): Add IA_64.unwind
+ and IA_64.unwind.info.
+
+2001-01-16 H.J. Lu <hjl@gnu.org>
+
+ * ldlang.c (lang_check): Merge the private data only if the
+ input file has contents.
+
+2001-01-14 Alan Modra <alan@linuxcare.com.au>
+
+ * emulparams/hppalinux.sh (OUTPUT_FORMAT): Set to elf32-hppa-linux.
+
+ * emultempl/hppaelf.em (hppaelf_after_parse): New function,
+ enabling search for libmilli. On a relocatable link, make .text
+ sections unique.
+ (LDEMUL_AFTER_PARSE): Define.
+ (hppaelf_finish): Correct spelling of relocatable in comments.
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Don't
+ rummage through the script for sections on the unique list.
+ Correct length of strncmp for ".note".
+ (gld${EMULATION_NAME}_check_needed): Rearrange function.
+
+ * ldlang.c (unique_section_list): New var.
+ (unique_section_p): New function.
+ (walk_wild_section): Don't match sections on unique_section_list.
+ (lang_add_unique): New function.
+ Correct spelling of relocatable in comments.
+
+ * ldlang.h (struct unique_sections): Declare.
+ (unique_section_list): Declare.
+ (unique_section_p): Declare.
+ (lang_add_unique): Declare.
+
+ * lexsup.c (ld_options): Allow --unique to take an optional arg.
+ (parse_args [OPTION_UNIQUE]): Call lang_add_unique.
+
+ * ld.texinfo (--unique): Update.
+
+2001-01-13 Nick Clifton <nickc@redhat.com>
+
+ * lexsup.c (parse_args): Remove spurious white space.
+
+2001-01-12 Nick Clifton <nickc@redhat.com>
+
+ * lexsup.c (parse_args): Update copyright date.
+
+2001-01-12 Philip Blundell <pb@futuretv.com>
+
+ * configure.host: Set HOSTING_LIBS appropriately for ix86-cygwin.
+
+2001-01-10 Kazu Hirata <kazu@hxi.com>
+
+ * scripttempl/h8300.sc: Fix formatting. Fix a comment typo.
+ * scripttempl/h8300h.sc: Fix formatting.
+ * scripttempl/h8300s.sc: Likewise.
+ * scripttempl/h8500.sc: Likewise.
+ * scripttempl/h8500b.sc: Likewise.
+ * scripttempl/h8500c.sc: Likewise.
+ * scripttempl/h8500m.sc: Likewise.
+ * scripttempl/h8500s.sc: Likewise.
+
+2000-01-07 David O'Brien <obrien@BSDi.com>
+
+ * emultempl/elf32.em: Only perform Linux ld hints processing when
+ targeting Linux.
+
+2001-01-07 Philip Blundell <philb@gnu.org>
+
+ * ld.texinfo (Bug Reporting): Update email address for reports.
+
+2000-12-31 Nick Clifton <nickc@redhat.com>
+
+ * lexsup.c (parse_args): Set opterr to 0 and detect unparsed long
+ options by checking for a return value of '?' not -1.
+
+2000-12-28 Nick Clifton <nickc@redhat.com>
+
+ * lexsup.c (struct ld_option): Add new enum value:
+ EXACTLY_TWO_DASHES.
+ (ld_options[]): Change -omagic, -output and -oformat options
+ to be EXACTLY_TWO_DASHES.
+ (OUTPUT_COUNT): Use ARRAY_SIZE.
+ (parse_args): Change parameter 'argc' to unsigned.
+ Place EXACTLY_TWO_DASHES options into new really_longopts
+ array.
+ If getopt_long_only fails, try calling getopt_long using the
+ really_longopts array.
+ (help): Print a double dash for both EXACTLY_TWO_DASHES and
+ TWO_DASHES options.
+
+ * ldlex.h: Fix prototype of parse_args.
+
+ * ld.texinfo: Document that long options starting with 'o'
+ must be preceeded by two dashes. Change example of a single
+ dashed long option from -oformat to -trace-symbol.
+
+2000-12-26 Danny Smith <danny_r_smith_2001@yahoo.co.nz>
+
+ * emultempl/pe.em (OPTION_NO_DEFAULT_EXCLUDES): Define.
+ (longopts[]): New --no-default-excludes option.
+ (gld_${EMULATION_NAME}_list_options): Document.
+ (gld_${EMULATION_NAME}_parse_args): Handle.
+
+2000-12-13 Michael Sokolov <msokolov@ivan.Harhan.ORG>
+
+ * ldlang.c (new_stat): Revert the last beautification with "innocent"
+ whitespace, it breaks the K&R C preprocessor.
+
+2000-12-11 DJ Delorie <dj@redhat.com>
+
+ * ld.texinfo: Add notes about --whole-archive and gcc.
+
+2000-11-18 Fred Fish <fnf@be.com>
+
+ * lexsup.c (OPTION_ALLOW_SHLIB_UNDEFINED): Define.
+ (ld_options): Entry for --allow-shlib-undefined.
+ (parse_args): Handle OPTION_ALLOW_SHLIB_UNDEFINED.
+ * ldmain.c (main): Initialize link_info.allow_shlib_undefined
+ to false.
+ * ld.texinfo: Document new command line switch.
+
+2000-12-12 Geoffrey Keating <geoffk@redhat.com>
+
+ * emulparams/elf32ppc.sh (OTHER_READWRITE_SECTIONS):
+ .fixup is actually read/write.
+ * emulparams/elf32lppc.sh (OTHER_READWRITE_SECTIONS): Likewise.
+ * emulparams/elf32ppcsim.sh (OTHER_READWRITE_SECTIONS): Likewise.
+ * emulparams/elf32lppcsim.sh (OTHER_READWRITE_SECTIONS): Likewise.
+
+2000-12-11 Jan Hubicka <jh@suse.cz>
+
+ * NEWS: Add note about x86_64 architecture.
+
+2000-12-06 Mark Elbrecht <snowball3@bigfoot.com>
+
+ * scripttempl/i386go32.sc: Use PROVIDE with _etext, _edata, _end.
+ Set DWARF2 sections to a VMA of zero.
+
+2000-12-01 Joel Sherrill <joel@OARcorp.com>
+
+ * configure.tgt (arm-*-rtems*, a29k-*rtems*, h8300-*-rtems*):
+ New targets.
+ (sparc*-*-rtemself*, sparc*-*-rtemsaout*): New targets.
+ (sparc*-*-rtems*): Switched from a.out to ELF.
+
+2000-11-30 Jan Hubicka <jh@suse.cz>
+
+ * Makefile.am (ALL_EMULATIONS): Add eelf_x86_64.o
+ (eelf_x86_64.c): New.
+ * Makefile.in: Regenerate.
+ * configure.tgt: Add support for x86_64-*-linux-gnu*.
+ * emulparams/elf_x86_64.sh: New.
+
+2000-11-30 Hans-Peter Nilsson <hp@axis.com>
+
+ * emulparams/crislinux.sh (ENTRY): Change back to _start.
+ (TEXT_START_SYMBOLS): Remove conditional setting of __start.
+
+ * scripttempl/crisaout.sc: Change all RELOCATING not related to
+ merging non-a.out sections into CONSTRUCTING.
+
+2000-11-28 Nick Clifton <nickc@redhat.com>
+
+ * ld.1 (COPYING): Mention that the GNU Free Documentation
+ License is present in the sources, but not the output, and
+ also available from the GNU website.
+ (GNU Free Documentation License): Comment out this section.
+
+2000-11-28 David O'Brien <obrien@dragon.nuxi.com>
+
+ * emulparams/elf64alpha.sh (ENTRY): Remove leading underscore as ELF
+ does not use them.
+
+2000-11-25 David O'Brien <obrien@FreeBSD.org>
+
+ * ld.1: Remove old date so it does not give the impression the manpage
+ is way out of date.
+
+2000-11-24 Nick Clifton <nickc@redhat.com>
+
+ * configure.tgt (xscale-coff): Add target.
+ (xscale-elf): Add target.
+
+2000-11-24 Fred Fish <fnf@be.com>
+
+ * ldmain.c (main): Remove redundant init of config.make_executable
+ to true.
+
+2000-11-15 Richard Henderson <rth@redhat.com>
+
+ * emulparams/elf64alpha.sh (MAXPAGESIZE): Typo -- 64k, not 1M.
+
+2000-11-14 Kazu Hirata <kazu@hxi.com>
+
+ * scripttempl/h8300.sc: Fix formatting.
+ * scripttempl/h8300h.sc: Likewise.
+ * scripttempl/h8300s.sc: Likewise.
+
+2000-11-14 Denis Chertykov <denisc@overta.ru>
+
+ * scripttempl/elf32avr.sc: Fix bug in .eeprom segment.
+
+2000-11-09 Philip Blundell <pb@futuretv.com>
+
+ * emultempl/pe.em: Define ___start_SECNAME and ___stop_SECNAME
+ around orphan sections whose names can be represented in C.
+
+2000-11-07 Jim Wilson <wilson@redhat.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): New local
+ hold_sdata. If SEC_SMALL_DATA set, set place to hold_sdata.
+
+2000-11-06 Nick Clifton <nickc@redhat.com>
+
+ * ld.texinfo: Add GNU Free Documentation License.
+ * ldint.texinfo: Add GNU Free Documentation License.
+ * ld.1: Add GNU Free Documentation License.
+
+2000-11-05 Alan Modra <alan@linuxcare.com.au>
+
+ * ldlex.l (yy_create_string_buffer): Init yy_is_our_buffer,
+ yy_is_interactive, yy_at_bol, and yy_fill_buffer.
+
+ * Makefile.am (DISTCLEANFILES): Add stringify.sed.
+ Move 2000-11-02 Makefile.in changes to this file.
+ * Makefile.in: Regenerate.
+
+2000-11-03 Nick Clifton <nickc@redhat.com>
+
+ * scripttempl/h8300.sc: Use ${CONSTRUCTING...} to enclose
+ constructors and destructors.
+ * scripttempl/h8300h.sc: Ditto.
+ * scripttempl/h8300s.sc: Ditto.
+ * scripttempl/h8500.sc: Ditto.
+ * scripttempl/h8500b.sc: Ditto.
+ * scripttempl/h8500c.sc: Ditto.
+ * scripttempl/h8500m.sc: Ditto.
+ * scripttempl/h8500s.sc: Ditto.
+ * scripttempl/v850.sc: Ditto.
+ * scripttempl/w65.sc: Ditto.
+ * scripttempl/z8000.sc: Ditto.
+
+2000-11-02 Per Lundberg <plundis@chaosdev.org>
+
+ * Makefile.in (e_i386_chaos.c): New rule.
+ (ALL_EMULATIONS): Added e_i386_chaos.o.
+ * emulparams/elf_i386_chaos.sh: New file.
+ * configure.tgt: Recognise i[3456]86-chaosdev-storm-chaos.
+
+2000-10-20 Jakub Jelinek <jakub@redhat.com>
+
+ * emulparams/elf64_sparc.sh (TEXT_START_ADDR,
+ NONPAGED_TEXT_START_ADDR): Set to 4GB for Solaris targets.
+ Fix sed invocation, so that it coped with '/' in Solaris 64bit
+ library path suffix.
+ Based on patch by Andrew Macleod <amacleod@cygnus.com>.
+
+2000-10-18 Hans-Peter Nilsson <hp@axis.com>
+
+ * scripttempl/crisaout.sc (.text, .data): Pad, with ALIGN (32),
+ for consecutive sections.
+
+2000-10-17 Chandrakala Chavva <cchavva@redhat.com>
+
+ * lexsup.c: New option OPTION_TARGET_HELP. Prints all target specific
+ options.
+ * ld.texinfo: Added notes about this new option.
+
+2000-10-16 Nick Clifton <nickc@redhat.com>
+
+ * emultempl/pe.em (_after_open): Add tests of return values from
+ bfd functions. Emit appropriate error messages if necessary.
+
+2000-10-13 Nick Clifton <nickc@redhat.com>
+
+ * emultempl/pe.em (_after_open): Delete 'is2' and 'nsyms'
+ local variables - they are not used, but leave in the call to
+ bfd_canonicalize_symtab.
+ (_open_dynamic_archive): Add #ifdef DLL_SUPPORT around use of
+ pe_dll_search_prefix.
+
+2000-10-12 Charles Wilson <cwilson@ece.gatech.edu>
+
+ * emultempl/pe.em (pe_dll_search_prefix): New variable,
+ (longopts): New --dll-search-prefix option.
+ (gld_${EMULATION_NAME}_list_options): Document.
+ (gld_${EMULATION_NAME}_parse_args): Handle.
+ (gld_${EMULATION_NAME}_open_dynamic_archive): When linking
+ dynamically, search for a dll named '<prefix><basename>.dll'
+ in preference to 'lib<basename>.dll' if --dll-search-prefix
+ is specified.
+
+2000-10-12 Alan Modra <alan@linuxcare.com.au>
+
+ * ldlang.c (section_already_linked): Set kept_section instead of
+ sec->comdat->sec.
+
+2000-10-10 Kazu Hirata <kazu@hxi.com>
+
+ * deffile.h: Fix formatting.
+ * lexsup.c: Likewise.
+ * mri.c: Likewise.
+
+2000-10-09 Paul Sokolovsky <Paul.Sokolovsky@technologist.com>
+
+ * pe-dll.c (make_one): Do not generate code thunk for DATA
+ exports.
+ (process_def_file): deduce DATA flag for auto-export sumbols.
+
+2000-10-09 Kazu Hirata <kazu@hxi.com>
+
+ * ld.h: Fix formatting.
+ * ldcref.c: Likewise.
+ * ldctor.h: Likewise.
+ * ldemul.c: Likewise.
+ * ldemul.h: Likewise.
+ * ldexp.c: Likewise.
+ * ldexp.h: Likewise.
+ * ldfile.c: Likewise.
+ * ldfile.h: Likewise.
+ * ldlang.c: Likewise.
+ * ldlang.h: Likewise.
+ * ldmain.c: Likewise.
+ * pe-dll.c: Likewise.
+
+ * pe-dll.c: Revert some formatting fixes.
+
+2000-10-08 Kazu Hirata <kazu@hxi.com>
+
+ * pe-dll.c: Fix formatting.
+
+2000-10-05 Kazu Hirata <kazu@hxi.com>
+
+ * ldlang.c: Fix formatting.
+
+2000-10-03 DJ Delorie <dj@redhat.com>
+
+ * pe-dll.c (fill_edata): initialize entire block
+ (make_one): fill in correct section.
+
+2000-10-03 Kazu Hirata <kazu@hxi.com>
+
+ * ldexp.c: Fix formatting.
+
+2000-10-02 DJ Delorie <dj@redhat.com>
+
+ * emultempl/pe.em (gld_*_after_open): detect case where there two
+ import libraries for same dll; rename one to ensure proper link
+ order.
+
+ * pe-dll.c (process_def_file): compare ordinals to -1, not 0; fix
+ typo
+ (generate_edata): fix typo
+
+2000-09-29 Hans-Peter Nilsson <hp@axis.com>
+
+ * scripttempl/crisaout.sc (ENTRY): Now __start.
+ (.text): Add default setting for __start.
+ Remove CONSTRUCTORS handling.
+ (/DISCARD/): Add .gnu.warning.*.
+ * emulparams/crislinux.sh (ENTRY): Now __start.
+ (TEXT_START_SYMBOLS): New; provide __Stext and __start default.
+ * emulparams/criself.sh (OUTPUT_FORMAT): Now elf32-us-cris.
+ (ENTRY): Now __start.
+ (INITIAL_READONLY_SECTIONS): Add KEEP for .startup.
+ (EXECUTABLE_SYMBOLS): Add default setting for __start.
+
+2000-09-29 Kazu Hirata <kazu@hxi.com>
+
+ * deffile.h: Fix formatting.
+ * ld.h: Likewise.
+ * ldcref.c: Likewise.
+ * ldctor.c: Likewise.
+ * ldctor.h: Likewise.
+ * ldemul.c: Likewise.
+ * ldemul.h: Likewise.
+ * ldexp.c: Likewise.
+ * ldexp.h: Likewise.
+ * ldfile.c: Likewise.
+ * ldfile.h: Likewise.
+ * ldlang.c: Likewise.
+ * ldlang.h: Likewise.
+ * lexsup.c: Likewise.
+ * mri.c: Likewise.
+ * pe-dll.c: Likewise.
+
+2000-09-28 Paul Sokolovsky <Paul.Sokolovsky@technologist.com>
+
+ * pe-dll.c (process_def_file): Uninitialized data wasn't
+ exported with --export-all-symbols switch.
+
+2000-09-28 DJ Delorie <dj@redhat.com>
+
+ * pe-dll.c (fill_edata): rearrange the data so that ordinals and
+ noname work properly.
+
+2000-09-28 Alan Modra <alan@linuxcare.com.au>
+
+ * ld.texinfo (HPPA ELF32): New section.
+
+ * emultempl/hppaelf.em (group_size): New.
+ (hppaelf_finish): Pass group_size to elf32_hppa_size_stubs.
+ (PARSE_AND_LIST_PROLOGUE): Add OPTION_STUBGROUP_SIZE.
+ (PARSE_AND_LIST_LONGOPTS): Add --stub-group-size. Duplicate
+ options to prevent abbreviations matching.
+ (PARSE_AND_LIST_OPTIONS): Describe the above. Reformat.
+ (PARSE_AND_LIST_ARGS_CASES): Handle it.
+
+2000-09-21 Michael Sokolov <msokolov@ivan.Harhan.ORG>
+
+ * emultempl/m68kelf.em: Conditionalise the embedded relocs feature
+ on the m68*-*-elf target. Make it support COFF input objects.
+
+2000-09-21 Kazu Hirata <kazu@hxi.com>
+
+ * ldmain.c: Fix formatting.
+ * ldmisc.c: Likewise.
+ * ldver.c: Likewise.
+ * ldwrite.c: Likewise.
+
+2000-09-21 Alan Modra <alan@linuxcare.com.au>
+
+ * ldwrite.c (clone_section): Silence gcc warnings.
+
+2000-09-20 Alan Modra <alan@linuxcare.com.au>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Handle
+ out of memory failure.
+
+ * ldwrite.c (ldwrite): Remove unnecessary einfo arg.
+ (clone_section): Handle out of memory failures. Rename var to
+ avoid c++ reserved word.
+
+2000-09-18 Alan Modra <alan@linuxcare.com.au>
+
+ * emultempl/hppaelf.em (hppaelf_add_stub_section): Rename
+ stub_name param to stub_sec_name.
+ (hppaelf_finish): Modify call to elf32_hppa_size_stubs.
+
+2000-09-10 Michael Sokolov <msokolov@ivan.Harhan.ORG>
+
+ * emultempl/m68kelf.em: New file.
+ * emulparams/m68kelf.sh (EXTRA_EM_FILE): Use it.
+ * Makefile.am (em68kelf.c): Add dependency on m68kelf.em.
+ * Makefile.in: Regenerate.
+
+2000-09-15 Alan Modra <alan@linuxcare.com.au>
+
+ * emulparams/hppalinux.sh (DATA_START_SYMBOLS): Provide $global$
+ only as needed.
+
+2000-09-13 Nick Clifton <nickc@redhat.com>
+
+ * ldmain.c (multiple_definition): Disable relaxation if
+ multiple symbol definitions are encountered - otherwise the
+ linker could abort with an assertion failure.
+
+2000-09-10 Nick Clifton <nickc@redhat.com>
+
+ * mri.c: Fix formatting.
+
+2000-09-07 H.J. Lu <hjl@gnu.org>
+
+ * configure.in (AC_ISC_POSIX): Put after AC_CANONICAL_SYSTEM.
+ * configure: Rebuild.
+
+2000-09-07 H.J. Lu <hjl@gnu.org>
+
+ * Makefile.am (lexsup.o): Also depend on $(INCDIR)/demangle.h.
+ * Makefile.in: Rebuild.
+
+2000-09-07 Alan Modra <alan@linuxcare.com.au>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Fix
+ broken list handling. Create __start_SECNAME and __stop_SECNAME
+ when no place-holder. Add some comments. Test both SEC_CODE and
+ SEC_READONLY for hold_text to prevent .rodata orphan poisoning.
+ Handle case where no output section statement created.
+
+2000-09-07 Niibe Yutaka <gniibe@m17n.org>, Kaz Kojima <kkojima@rr.iij4u.or.jp>, Alexandre Oliva <aoliva@redhat.com>
+
+ * configure.tgt (sh-*-linux*): Added.
+ * Makefile.am: Added eshelf_linux and eshlelf_linux.
+ * Makefile.in: Rebuilt.
+ * emulparams/shelf_linux.sh: New file.
+ * emulparams/shlelf_linux.sh: New file.
+
+2000-09-06 Alan Modra <alan@linuxcare.com.au>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Don't
+ try shuffling sections when the orphan happens to be the place
+ holder. Keep count of unique section names generated so we speed
+ the search for a new name.
+
+2000-09-06 Alexandre Oliva <aoliva@redhat.com>
+
+ * configure: Rebuilt with new libtool.m4.
+
+2000-09-05 Nick Clifton <nickc@redhat.com>
+
+ * Makefile.in: Regenerate.
+ * aclocal.m4: Regenerate.
+ * configure: Regenerate.
+ * config.in: Regenerate.
+ * po/ld.pot: Regenerate.
+
+ * ldint.texinfo: Remove CVS revision marker - it foils local
+ comparisons.
+
+ * emultempl/ticoff.em: Remove extraneous comma.
+
+2000-09-05 Alan Modra <alan@linuxcare.com.au>
+
+ * emultempl/hppaelf.em (hppaelf_add_stub_section): Add SEC_RELOC
+ to stub section flags.
+ (hppa_for_each_input_file_wrapper): New.
+ (hppa_lang_for_each_input_file): New.
+ (lang_for_each_input_file): Define to call above.
+ (multi_subspace): New.
+ (hppaelf_finish): Pass multi_subspace to elf32_hppa_size_stubs.
+ (PARSE_AND_LIST_PROLOGUE): Define.
+ (PARSE_AND_LIST_LONGOPTS): Define.
+ (PARSE_AND_LIST_OPTIONS): Define.
+ (PARSE_AND_LIST_ARGS_CASES): Define.
+ (hppaelf_finish): Call elf32_hppa_set_gp.
+ (hppaelf_set_output_arch): Remove.
+ (LDEMUL_SET_OUTPUT_ARCH): Remove.
+
+ * emulparams/hppalinux.sh (ELFSIZE): Define.
+ (MACHINE): Define.
+ (OTHER_READONLY_SECTIONS): Define.
+ (DATA_PLT): Define.
+ (GENERATE_SHLIB_SCRIPT): Define.
+
+ * ldlang.c: Add missing prototypes, and tidy others. Change CONST
+ to const throughout. Change `void *' to `PTR' throughout.
+ (lang_memory_default): Function is local to file, add `static'.
+
+ * Makefile.am (ehppaelf.c): Depend on emultempl/elf32.em.
+ (ehppalinux.c): Likewise.
+ (earmelf.c): Likewise.
+ (earmelf_linux.c): Likewise.
+ (earmelf_linux26.c): Likewise.
+ * Makefile.in: Regenerate.
+
+ * ld.h (ld_config_type): Add unique_orphan_sections.
+ * lexsup.c (OPTION_UNIQUE): Define.
+ (ld_options): Add "--unique".
+ (parse_args): Handle it.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Don't
+ search for an existing output section if unique_orphan_sections is
+ set. Make use of bfd_get_unique_section_name rather than
+ duplicating code here.
+ * ld.texinfo: Describe --unique.
+
+ * lexsup.c (ld_options): Make split-by-reloc arg optional. Add
+ optional arg to split-by-file.
+ (parse_args): Handle them.
+ * ld.texinfo: Update description of these options.
+ * ldwrite.c (clone_section): Pass in the section name. Replace
+ local code with bfd_get_unique_section_name.
+ (split_sections): Tidy code and comments. Use a list traversal
+ more appropriate to the list construction. Handle cooked section
+ sizes. Split when split_by_reloc reached rather than exceeded.
+ Track section size and split when split_by_file reached. Fix
+ link_order_tail (even though it's not used).
+ (ldwrite): Modify condition for calling split_sections to suit
+ changed split_by_reloc and split_by_file.
+ * ldmain.c (main): Init config.split_by_reloc and
+ config.split_by_file to -1.
+ * ld.h (ld_config_type): Change split_by_reloc to unsigned.
+ Change split_by_file to bfd_size_type.
+
+2000-09-02 Nick Clifton <nickc@redhat.com>
+
+ * configure.in: Increase version number to 2.10.91.
+ * NEWS: Mention new ability to support removal of duplicate DWARF2
+ debug information.
+ * configure: Regenerate.
+ * aclocal.m4: Regenerate.
+ * config.in: Regenerate.
+
+2000-09-02 Daniel Berlin <dberlin@redhat.com>
+
+ * scripttempl/elf.sc: Add .gnu.linkonce.wi.* to .debug_info
+ sections.
+ * scripttempl/elf32avr.sc: Ditto.
+ * scripttempl/elfd10v.sc: Ditto.
+ * scripttempl/elfd30v.sc: Ditto.
+ * scripttempl/elfi370.sc: Ditto.
+ * scripttempl/elfm68hc11.sc: Ditto.
+ * scripttempl/elfm68hc12.sc: Ditto.
+ * scripttempl/elfi386beos.sc: Ditto.
+ * scripttempl/v850.sc: Ditto.
+
+2000-08-31 Alexandre Oliva <aoliva@redhat.com>
+
+ * acinclude.m4: Include libtool and gettext macros from the
+ top level.
+ * aclocal.m4, configure: Rebuilt.
+
+2000-08-25 Nick Clifton <nickc@redhat.com>
+
+ * ldlang.c (open_output): When choosing the target for a
+ particular endianness, do nothing if the target is not
+ supported.
+
+2000-08-25 H.J. Lu <hjl@gnu.org>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_after_open): Don't
+ check -rpath nor LD_RUN_PATH for cross link.
+ * ld.texinfo: Document the change.
+
+2000-08-24 Hans-Peter Nilsson <hp@axis.com>
+
+ * NEWS: Mention support for CRIS.
+
+2000-08-23 H.J. Lu <hjl@gnu.org>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_after_open): Get
+ the current runpath list from bfd_elf_get_runpath_list ()
+ before search.
+
+2000-08-22 H.J. Lu <hjl@gnu.org>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_after_open): Search
+ the DT_RPATH/DT_RUNPATH entries for DT_NEEDED after
+ LD_LIBRARY_PATH for native linker. Display the needed DSO if
+ trace_file_tries is non-zero.
+ (gld${EMULATION_NAME}_try_needed): Report the needed DSO found
+ if trace_file_tries is non-zero.
+
+ * ld.texinfo: Document the usage of DT_RPATH/DT_RUNPATH.
+ * NEWS: Mention it.
+
+2000-08-14 Jason Eckhardt <jle@cygnus.com>
+
+ * NEWS: Mention i860 support.
+
+2000-08-14 Andreas Schwab <schwab@suse.de>
+
+ * scripttempl/elf.sc: Fix last change to use correct comment
+ syntax.
+
+2000-08-10 Geoff Keating <geoffk@cygnus.com>
+
+ * scripttempl/elf.sc: Add a comment giving the correspondence
+ between sections, per-datum sections, and linkonce sections. Make
+ the comment true even for .bss, .sdata, .sdata2, .sbss, and
+ .sbss2.
+
+2000-08-10 Jason Eckhardt <jle@cygnus.com>
+
+ * emulparams/elf32_i860.sh: New file.
+ * configure.tgt: Recognize new target i860-stardent-{sysv4*|elf*}.
+ * Makefile.am (ALL_EMULATIONS): Add eelf32_i860.o.
+ (eelf32_i860.c): New rule.
+ * Makefile.in: Regenerate.
+
+2000-08-10 Nick Clifton <nickc@cygnus.com>
+
+ * emulparams/mipspe.sh (ENTRY): Add definition.
+
+2000-08-08 Peter Jeremy <peter.jeremy@alcatel.com.au>
+
+ * emultempl/elf32.em (_after_close): Refer to -rpath not --rpath
+ in error message.
+
+2000-08-08 Stephane Carrez <Stephane.Carrez@worldnet.fr>
+
+ * scripttempl/elfm68hc11.sc: Define __bss_size symbol to indicate
+ the final size of .bss section.
+ * scripttempl/elfm68hc12.sc: Likewise.
+
+2000-08-04 Alan Modra <alan@linuxcare.com.au>
+
+ * emultempl/elf32.em (gld_${EMULATION_NAME}_parse_args): Rename to
+ gld${EMULATION_NAME}_parse_args for consistency. Combine
+ lastoptind and prevoptind vars, and keep track of last optind.
+ (gld_${EMULATION_NAME}_list_options): Rename to
+ gld${EMULATION_NAME}_list_options.
+
+2000-08-03 Rodney Brown <RodneyBrown@pmsc.com>
+
+ * configure.tgt: Select targ_emul=elf_i386 for Unixware 7
+ (i586-sco-sysv5uw7.1.0).
+
+2000-07-27 H.J. Lu <hjl@gnu.org>
+
+ * emulparams/elf64alpha.sh (PARSE_AND_LIST_ARGS): Removed.
+ (PARSE_AND_LIST_PROLOGUE): New.
+ (PARSE_AND_LIST_LONGOPTS): Likewise.
+ (PARSE_AND_LIST_OPTIONS): Likewise.
+ (PARSE_AND_LIST_ARGS_CASES): Likewise.
+ (PARSE_AND_LIST_EPILOGUE): Likewise.
+
+2000-07-28 Alan Modra <alan@linuxcare.com.au>
+
+ * emultempl/armelf.em: Elide functions common to elf32.em,
+ ie. most of the file.
+ (arm_elf_after_open): New. Do arm specific things then call
+ gld${EMULATION_NAME}_after_open.
+ (arm_elf_before_allocation): New. Call
+ gld${EMULATION_NAME}_before_allocation then do arm specifics.
+ (PARSE_AND_LIST_PROLOGUE): Define.
+ (PARSE_AND_LIST_SHORTOPTS): Define.
+ (PARSE_AND_LIST_LONGOPTS): Define.
+ (PARSE_AND_LIST_OPTIONS): Define.
+ (PARSE_AND_LIST_ARGS_CASES): Define.
+ (LDEMUL_AFTER_OPEN): Define.
+ (LDEMUL_BEFORE_ALLOCATION): Define.
+ (LDEMUL_BEFORE_PARSE): Define.
+ (LDEMUL_FINISH): Define.
+
+ * emultempl/hppaelf.em: Similarly zap most of this file.
+ (hppaelf_add_stub_section): Prototype.
+ (hppaelf_layaout_sections_again): Prototype.
+ (hook_in_stub): Prototype.
+ (LDEMUL_SET_OUTPUT_ARCH): Define.
+ (LDEMUL_FINISH): Define.
+ (LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS): Define.
+
+ * emulparams/armelf.sh (TEMPLATE_NAME): Use elf32.
+ (EXTRA_EM_FILE): New.
+ * emulparams/armelf_linux.sh: Likewise.
+ * emulparams/armelf_linux26.sh: Likewise.
+ * emulparams/hppalinux.sh: Likewise.
+ * emulparams/hppaelf.sh: Likewise.
+ (NOP): Define.
+
+ * emultempl/elf32.em: Fix formatting.
+ (EXTRA_EM_FILE): Source it.
+ (LDEMUL_BEFORE_PARSE, LDEMUL_SYSLIB, LDEMUL_HLL,
+ LDEMUL_AFTER_PARSE, LDEMUL_AFTER_OPEN, LDEMUL_AFTER_ALLOCATION,
+ LDEMUL_SET_OUTPUT_ARCH, LDEMUL_CHOOSE_TARGET,
+ LDEMUL_BEFORE_ALLOCATION, LDEMUL_GET_SCRIPT, LDEMUL_FINISH,
+ LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS,
+ LDEMUL_OPEN_DYNAMIC_ARCHIVE, LDEMUL_PLACE_ORPHAN,
+ LDEMUL_SET_SYMBOLS, LDEMUL_PARSE_ARGS, LDEMUL_UNRECOGNIZED_FILE,
+ LDEMUL_LIST_OPTIONS, LDEMUL_RECOGNIZED_FILE,
+ LDEMUL_FIND_POTENTIAL_LIBRARIES): New shell vars. Add code to
+ allow functions in this file to be overridden.
+ (PARSE_AND_LIST_SHORTOPTS): Handle it.
+
+ * emultempl/m68kcoff.em: Include ldfile.h before ldemul.h.
+
+ * emultempl/elf32.em: Reorganize file.
+
+2000-07-27 Ivan Kokshaysky <ink@jurassic.park.msu.ru>
+
+ * emulparams/elf64alpha.sh: Implement "-taso" emulation
+ specific option to fit 64-bit executable in the lower
+ 31-bit address range. This is done by changing start
+ address of .interp (the very first section of executable)
+ and then setting EF_ALPHA_32BIT elf header flag.
+
+2000-07-21 Michael Sokolov <msokolov@ivan.Harhan.ORG>
+
+ * emultempl/m68kcoff.em: New file.
+ * emulparams/m68kcoff.sh (TEMPLATE_NAME): Use m68kcoff template.
+ * Makefile.am (em68kcoff.c): Depend on m68kcoff.em rather than
+ generic.em.
+ * Makefile.in: Regenerate.
+
+2000-07-20 H.J. Lu <hjl@gnu.org>
+
+ * emultempl/elf32.em (longopts): Duplicate "disable-new-dtags"
+ and "disable-new-dtags" to stop getopt from treating -d/-e as
+ abbreviations for these options.
+
+2000-07-20 H.J. Lu <hjl@gnu.org>
+
+ * ld.texinfo: Add documentation for --disable-new-dtags and
+ --enable-new-dtags.
+
+ * ldmain.c (main): Initialize link_info.new_dtags to false.
+
+ * emultempl/elf32.em (gld_${EMULATION_NAME}_parse_args): Add
+ --disable-new-dtags and --enable-new-dtags.
+ (gld_${EMULATION_NAME}_list_options): Likewise.
+
+2000-07-05 Kenneth Block <krblock@computer.org>
+
+ * lexsup.c: Add optional style to demangle switch
+ * ld.texinfo: Document optional style to demangle switch.
+
+2000-07-20 Hans-Peter Nilsson <hp@axis.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add ecrisaout.o, ecriself.o,
+ ecrislinux.o.
+ (ecrisaout.c, ecriself.c, ecrislinux.c): New rules.
+ Regenerate dependencies.
+ * Makefile.in: Rebuild.
+ * configure.tgt (cris-*-*): New target.
+ * emulparams/crisaout.sh, emulparams/criself.sh,
+ emulparams/crislinux.sh, scripttempl/crisaout.sc: New files.
+ * po/POTFILES.in, po/ld.pot: Regenerate.
+
+2000-07-20 H.J. Lu <hjl@gnu.org>
+
+ * emultempl/elf32.em (gld_${EMULATION_NAME}_list_options):
+ Print out ignored -z options.
+
+2000-07-19 H.J. Lu <hjl@gnu.org>
+
+ * emulparams/elf32mcore.sh (PARSE_AND_LIST_ARGS): Removed.
+ (PARSE_AND_LIST_PROLOGUE): New.
+ (PARSE_AND_LIST_LONGOPTS): Likewise.
+ (PARSE_AND_LIST_OPTIONS): Likewise.
+ (PARSE_AND_LIST_ARGS_CASES): Likewise.
+
+ * ldmain.c (main): Clear link_info.flags and link_info.flags_1.
+
+ * lexsup.c (ld_options): Comment out 'z'.
+ (parse_args): Likewise.
+
+ * emultempl/elf32.em: Include "elf/common.h".
+ (gld_${EMULATION_NAME}_parse_args): Defined. Handle some -z
+ options.
+ (gld_${EMULATION_NAME}_list_options): Likewise.
+
+ * ld.texinfo: Add documentation for the recognized -z options.
+
+2000-07-19 H.J. Lu <hjl@gnu.org>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_try_needed): Call
+ bfd_elf_set_dt_needed_soname ().
+
+2000-07-18 DJ Delorie <dj@cygnus.com>
+
+ * pe-dll.c (pe_dll_id_target): check object target name also
+
+2000-07-18 Hans-Peter Nilsson <hp@axis.com>
+
+ * scripttempl/elf.sc (.init): Only do ${INIT_START} and
+ ${INIT_END} if relocating.
+ (.fini): Likewise ${FINI_START} and ${FINI_END}.
+
+2000-07-16 Charles Wilson <cwilson@ece.gatech.edu>
+
+ * emultempl/pe.em (gld_*_open_dynamic_archive): New search
+ order for dynamic library '-lfoo' on pei386: libfoo.dll.a,
+ foo.dll.a, libfoo.a, libfoo.dll, foo.dll. This fixes compatibility
+ errors introduced by the old dynamic lib search order.
+
+2000-07-17 DJ Delorie <dj@cygnus.com>
+
+ * pe-dll.c (process_def_file): auto-export data items also
+ (pe_process_import_defs): also see if _imp_ form needed
+
+2000-07-12 Charles Wilson <cwilson@ece.gatech.edu>
+
+ * pe-dll.c (make_one): fix a typo in the __imp_ name decoration
+ for dll import libraries
+
+2000-07-12 Mark Elbrecht <snowball3@bigfoot.com>
+
+ * scripttempl/i386go32.sc: Support the g++ attribute init_priority in
+ gcc 2.95.2 and later.
+
+2000-07-11 Kazu Hirata <kazu@hxi.com>
+
+ * ldfile.c (ldfile_try_open_bfd): Output '\n' after an error
+ message.
+
+2000-07-10 Alan Modra <alan@linuxcare.com.au>
+
+ * ldemul.h (struct lang_input_statement_struct): Remove forward
+ declaration.
+ (struct search_dirs): Likewise.
+ * ldfile.h (struct lang_input_statement_struct): Likewise.
+ Protect file from multiple inclusion.
+ * ldlang.h (LANG_FOR_EACH_INPUT_STATEMENT): Move file_chain
+ declaration from macro to file scope.
+
+ * ldemul.c: ldexp.h,ldlang.h,ldfile.h,ldemul.h go in this order.
+ * ldgram.y: Likewise here.
+ * ldlang.c: And here.
+ * ldmain.c: And here.
+ * mpw-elfmips.c: And here.
+ * mpw-eppcmac.c: And here.
+ * emultempl/aix.em: And here.
+ * emultempl/armcoff.em: And here.
+ * emultempl/armelf.em: And here.
+ * emultempl/armelf_oabi.em: And here.
+ * emultempl/beos.em: And here.
+ * emultempl/elf32.em: And here.
+ * emultempl/hppaelf.em: And here.
+ * emultempl/linux.em: And here.
+ * emultempl/lnk960.em: And here.
+ * emultempl/pe.em: And here.
+ * emultempl/sunos.em: And here.
+ * mpw-esh.c: And here. Include ldexp.h and ldlang.h too.
+ * mpw-idtmips.c: Ditto.
+ * emultempl/generic.em: Ditto.
+ * emultempl/gld960.em: Ditto.
+ * emultempl/gld960c.em: Ditto.
+ * emultempl/mipsecoff.em: Ditto.
+ * emultempl/ticoff.em: Ditto.
+ * emultempl/vanilla.em: Ditto.
+
+ * pe-dll.c: Include ldfile.h
+ * ldver.c: Include ldexp.h, ldlang.h, ldfile.h
+
+ * mpw-elfmips.c: (gldelf32ebmip_before_allocation): Add missing
+ arguments to bfd_elf32_size_dynamic_sections call.
+ (gldelf32ebmip_place_orphan): Add missing arguments to
+ lang_leave_output_section_statement call.
+
+2000-07-10 H.J. Lu <hjl@gnu.org>
+
+ * emultempl/pe.em (pe_enable_stdcall_fixup): Protect with
+ DLL_SUPPORT.
+ (strhash): Likewise.
+ (compute_dll_image_base): Likewise.
+ (pe_undef_found_sym): Likewise.
+ (pe_undef_cdecl_match): Likewise.
+ (gld_${EMULATION_NAME}_open_dynamic_archive): Mark the
+ argument "arch" with ATTRIBUTE_UNUSED.
+
+2000-07-10 Alan Modra <alan@linuxcare.com.au>
+
+ * configure.tgt: Remove extraneous hppa*-*-linux-gnu*.
+
+ From Ryan Bradetich <rbradetich@uswest.net>
+ * ldwrite.c (SSIZE): Remove to cure macro redefinition warning.
+
+2000-07-09 Alan Modra <alan@linuxcare.com.au>
+
+ Changes to create multiple linker stubs, positioned immediately
+ before the section where they are required.
+ * emultempl/hppaelf.em: Include elf32-hppa.h.
+ (stub_sec, file_chain): Delete.
+ (hppaelf_create_output_section_statements): Don't make a stub
+ section here.
+ (hook_stub_info): New struct.
+ (hook_in_stub): New function.
+ (hppaelf_add_stub_section): New function.
+ (hppaelf_finish): Do nothing for relocateable links. Modify the
+ call to elf32_hppa_size_stubs. Move code for updating section
+ layout from here...
+ (hppaelf_layaout_sections_again): ..to here, a new function.
+
+ * emultempl/hppaelf.em (hppaelf_delete_padding_statements): Fix
+ broken list handling. Pass in a pointer to the list.
+ (hppaelf_finish): Update call to hppaelf_delete_padding_statements
+ for above changes.
+ (hppaelf_before_parse): Prototype.
+ (hppaelf_set_output_arch): Prototype.
+ (hppaelf_create_output_section_statements): Prototype.
+ (hppaelf_delete_padding_statements): Prototype.
+ (hppaelf_finish): Prototype.
+
+ Merge from elf32.em
+ * emultempl/hppaelf.em: Include ctype.h.
+ (struct orphan_save): New.
+ (gld${EMULATION_NAME}_place_orphan): New.
+ (output_rel_find): New.
+ (hppaelf_get_script): Update from elf32.em.
+ (ld_hppaelf_emulation): Rename to ld_${EMULATION_NAME}_emulation.
+ Change emulation_name field to "${EMULATION_NAME}". Add
+ gld${EMULATION_NAME}_place_orphan.
+
+ * Makefile.am (ALL_EMULATIONS): Reinstate ehppaelf.o, add
+ ehppalinux.o, sort it. Regenerate dependencies.
+ (ehppalinux.c): Depend on hppaelf.em
+ * Makefile.in: Regenerate.
+
+ * configure.tgt: targ_emul=hppalinux for hppa*linux
+
+ * emulparams/hppalinux.sh: New.
+ * emulparams/hppaelf.sh (TARGET_PAGE_SIZE): Write in hex.
+
+2000-07-08 Alan Modra <alan@linuxcare.com.au>
+
+ * lexsup.c (parse_args): Copy section name.
+
+2000-07-07 Charles Wilson <cwilson@ece.gatech.edu>
+
+ * emultempl/pe.em: institute the following search order for
+ dynamic libraries on pei386: libfoo.dll.a, foo.dll.a (import
+ libs), libfoo.dll, foo.dll (link direct to dll). Fall back to
+ static lib (libfoo.a) if none of the above are found.
+
+2000-07-07 Mumit Khan <khan@xraylith.wisc.edu>
+
+ * emultempl/pe.em (pe_enable_auto_image_base): New variable.
+ (longopts): New --{enable,disable}-auto-image-base options.
+ (gld_${EMULATION_NAME}_list_options): Document.
+ (gld_${EMULATION_NAME}_parse): Handle.
+ (strhash): New static function.
+ (compute_dll_image_base): New static function.
+ (gld_${EMULATION_NAME}_set_symbols): Use.
+
+2000-07-05 DJ Delorie <dj@redhat.com>
+
+ * MAINTAINERS: new
+
+2000-07-01 Koundinya K <kk@ddeorg.soft.net>
+
+ * configure.tgt: Add traditional mips (mips*-*-sysv4*) target.
+ * emulparams/elf32btsmip.sh: New file.
+ * Makefile.am: Add traditional mips target.
+ * Makefile.in: Rebuild.
+
+2000-07-01 H.J. Lu <hjl@gnu.org>
+
+ * Makefile.am (EXTRA_ld_new_SOURCES): Set to deffilep.y for
+ automake to use YLWRAP.
+ * Makefile.in: Rebuild.
+
+2000-07-01 Alan Modra <alan@linuxcare.com.au>
+
+ * Makefile.am (DEP): Fix 2000-06-22. grep after running dep.sed
+ (CLEANFILES): Add DEPA.
+ * Makefile.in: Regenerate.
+
+2000-06-30 Timothy Wall <twall@ppc>
+
+ * scripttempl/tic54xcoff.sc: PAGE N is not implemented, so encode
+ the page in the upper octet of the address.
+
+2000-06-26 Marek Michalkiewicz <marekm@linux.org.pl>
+
+ * emulparams/avrmega161.sh (ARCH): Change to avr:5.
+
+2000-06-24 Alan Modra <alan@linuxcare.com.au>
+
+ * NEWS: arm-elf does --gc-sections too.
+
+2000-06-22 Alan Modra <alan@linuxcare.com.au>
+
+ * Makefile.am (DEP): grep for leading `/' in DEP1, and fail if we
+ find one.
+ * Makefile.in: Regenerate.
+
+2000-06-21 H.J. Lu <hjl@gnu.org>
+
+ * Makefile.am: Rebuild dependency.
+ * Makefile.in: Rebuild.
+
+2000-06-20 H.J. Lu <hjl@gnu.org>
+
+ * Makefile.am: Rebuild dependency.
+ * Makefile.in: Rebuild.
+
+2000-06-20 Timothy Wall <twall@cygnus.com>
+
+ * scripttempl/tic54xcoff.sc: New.
+ * ldlang.c (wild_doit): Propagate SEC_BLOCK flag.
+ * gen-doc.texi: Add flag for TI COFF.
+ * ld.texinfo: Add documentation for TI COFF handling switches.
+ * emultempl/ticoff.em: New. TI COFF handling.
+ * configure.tgt: Add tic54x target.
+ * Makefile.am: Add tic54x target.
+ * Makefile.in: Ditto.
+
+2000-06-20 Alan Modra <alan@linuxcare.com.au>
+
+ * ldmain.c (set_scripts_dir): Correct pointer comparison when
+ checking for backslashes.
+
+2000-06-19 Alan Modra <alan@linuxcare.com.au>
+
+ * NEWS: Move entries not in 2.10 above "Changes in version 2.10".
+
+2000-06-18 Alan Modra <alan@linuxcare.com.au>
+
+ * NEWS: Update list of targets supporting --gc-sections.
+
+ * scripttempl/elf.sc: KEEP .eh_frame contents.
+ * scripttempl/elfd30v.sc: Same here.
+
+2000-06-18 Stephane Carrez <stcarrez@worldnet.fr>
+
+ * Makefile.am (ALL_EMULATIONS): Added new emulation for m68hc12
+ and m68hc11 (elf).
+ * Makefile.in: Rebuild.
+ * configure.tgt: Recognize m68hc12 and m68hc11.
+ * scripttempl/elfm68hc12.sc: New file.
+ * emulparams/m68hc12elfb: New emulation.
+ * emulparams/m68hc12elf: New emulation.
+ * emulparams/m68hc11elfb.sh: New file. User configurable emulation
+ (includes a memory.x script to define the ROM and RAM banks).
+ * scripttempl/elfm68hc11.sc, emulparams/m68hc11elf.sh:
+ New configuration files for support of Motorola 68hc11
+
+2000-06-15 Alan Modra <alan@linuxcare.com.au>
+
+ * ldmain.c (main): Only change SEC_READONLY for final link.
+
+2000-06-13 H.J. Lu <hjl@gnu.org>
+
+ * configure: Regenerate.
+
+2000-06-08 David O'Brien <obrien@FreeBSD.org>
+
+ * configure.in (VERSION): Update to show this is the CVS mainline.
+
+2000-06-07 Michael Sokolov <msokolov@ivan.Harhan.ORG>
+
+ * emultempl/mipsecoff.em (gld{EMULATION_NAME}_after_open): Require all
+ input objects to be ECOFF.
+ (check_sections): einfo takes %B, not %P, to print a BFD name.
+
+2000-06-05 Michael Matz <matz@ifh.de>
+
+ * ldgram.y (vers_defns): Handle 'extern "C++" { ... }' in
+ version scripts.
+
+ * ldlex.l (V_IDENTIFIER): Accept `::' in symbols.
+
+2000-05-23 Marek Michalkiewicz <marekm@linux.org.pl>
+
+ * emulparams/avr1200.sh (STACK): Define as 0.
+ * emulparams/avr23xx.sh (STACK): Define as last internal SRAM address.
+ * emulparams/avr4433.sh (STACK): Likewise.
+ * emulparams/avr44x4.sh (STACK): Likewise.
+ * emulparams/avr85xx.sh (STACK): Likewise.
+ * emulparams/avrmega103.sh (STACK): Likewise.
+ * emulparams/avrmega161.sh (STACK): Likewise.
+ * emulparams/avrmega603.sh (STACK): Likewise.
+ * scripttempl/elf32avr.sc (__data_start): Define for gcrt1.
+ (__stack): Define from ${STACK} for main().
+
+2000-05-26 Alan Modra <alan@linuxcare.com.au>
+
+ * Makefile.am: Update dependencies with "make dep-am"
+ * Makefile.in: Regenerate.
+
+2000-05-26 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * ldmain.c: Include filenames.h.
+ (set_scripts_dir): Support backslashes in program name.
+
+2000-05-22 Igor Shevlyakov <igor@windriver.com>
+
+ * ldmain.c (main): When deciding if ".text" section should be
+ read-only, don't forget to reset SEC_READONLY because it
+ could be already set.
+
+2000-05-22 Thomas de Lellis <tdel@windriver.com>
+
+ * ld.1: Add documentation for new command line option:
+ --section-start <sectionname>=<sectionorg>
+ This is a generic version of -Ttext etc. which accepts
+ any section name as a parameter instead of just text/data/
+ bss.
+ * ld.texinfo: More docs.
+ * NEWS: More docs.
+ * lexsup.c: (parse_args): Recognize new command line option.
+ (ld_options): Add new option.
+
+2000-05-18 H.J. Lu <hjl@gnu.org>
+
+ * lexsup.c (parse_args): `i' == `r', not `q'.
+
+2000-05-18 Jeffrey A Law (law@cygnus.com)
+
+ * configure.tgt (hppa*64*-*-*): Enable PA64 target.
+
+2000-05-17 S. Bharadwaj Yadavalli <sby@scrugs.lkg.dec.com>
+ Rick Gorton <gorton@scrugs.lkg.dec.com>
+
+ Add support for '-q' == '--emit-relocs' switch.
+ * ldmain.c (main): Default to false.
+ * lexsup.c (parse_args): Turn on emitrelocations flag if set.
+ * NEWS: Describe the emitrelocations switch.
+ * ld.texinfo: Describe the emitrelocations switch.
+
+2000-05-16 Charles Wilson <cwilson@ece.gatech.edu>
+
+ * emultempl/pe.em (_open_dynamic_archive): New function: Search
+ the library path for "foo.dll" and "libfoo.dll" dynamic libraries
+ before searching for 'libfoo.a' in response to a '-Bdynamic -lfoo'
+ link options.
+
+2000-05-15 David O'Brien <obrien@FreeBSD.org>
+
+ * lexsup.c (parse_args): Update the year in the copyright notice.
+
+2000-05-13 Alan Modra <alan@linuxcare.com.au>
+
+ * ld.h (gettext, dgettext, dcgettext, textdomain, bindtextdomain):
+ Replace defines with those from intl/libgettext.h to quieten gcc
+ warnings.
+
+2000-05-10 H.J. Lu <hjl@gnu.org>
+
+ * ldlang.c (open_input_bfds): Don't load the same file within
+ a group again if the whole archive has been loaded already.
+
+2000-05-03 Alan Modra <alan@linuxcare.com.au>
+
+ From Ulf Carlsson <ulfc@engr.sgi.com> and Andreas Jaeger <aj@suse.de>
+ * lexsup.c (set_section_start): Use bfd_scan_vma rather than
+ strtoul.
+
+2000-05-01 Jim Wilson <wilson@cygnus.com>
+
+ * configure.host (ia64-*-linux-gnu*): Change gcc to ${CC}.
+
+ * configure.host: Added HOSTING_CRT0, HOSTING_LIBS for
+ host "ia64-*-linux-gnu*".
+
+2000-04-29 Andreas Jaeger <aj@suse.de>
+
+ * ld.h: Correctly check GCC version.
+
+2000-04-25 Jeffrey A Law (law@cygnus.com)
+
+ * Makefile.am: Add PA64 support. Add missing dependencies for
+ PA32 elf support.
+ * Makefile.in: Rebuilt.
+ * configure.tgt: Add PA64 support (currently disabled).
+
+2000-04-25 Alan Modra <alan@linuxcare.com.au>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_section): Delete.
+ (output_rel_find): New function.
+ (hold_section, hold_use): Delete.
+ (hold_text, hold_rodata, hold_data, hold_bss, hold_rel,
+ hold_interp): Make local to place_orphan.
+ (gld${EMULATION_NAME}_place_orphan): Use lang_output_section_find
+ rather than place_section to find possible previous use of orphan.
+ Similarly find the place-holder output sections. Use returned
+ value from lang_enter_output_section_statement rather than calling
+ lang_output_section_statement_lookup.
+ * emultempl/armelf.em: Same here.
+ * emultempl/pe.em: Similar to above, but no need for output_rel_find.
+
+ * ldlang.c (lang_enter_output_section_statement): Return output
+ section statement.
+ * ldlang.h (lang_enter_output_section_statement): Change
+ declaration too.
+
+ * ldlang.h (lang_output_section_statement): Export it.
+ * ldlang.c (lang_output_section_statement): Ditto.
+
+2000-04-24 Nick Clifton <nickc@cygnus.com>
+
+ * ld.texinfo (Output Section Data): Add note that section data
+ commands cannot appear outside of section directives.
+
+2000-04-2 Matthew Green <mrg@cygnus.com>
+
+ * configure.tgt: Add NetBSD/sparc ELF, and NetBSD/sparc64 support.
+
+2000-04-21 Richard Henderson <rth@cygnus.com>
+ David Mosberger <davidm@hpl.hp.com>
+
+ * Makefile.am (ALL_64_EMULATIONS): Add eelf64_ia64.o.
+ (eelf64_ia64.c): New rule.
+ * Makefile.in: Rebuild.
+ * configure.tgt (ia64-*-elf*, ia64-*-linux*): New targets.
+ * emulparams/elf64_ia64.sh: New file.
+
+2000-04-21 Richard Henderson <rth@cygnus.com>
+
+ * scripttempl/elfd30v.sc: Place .gcc_except_table.
+
+2000-04-19 Alan Modra <alan@linuxcare.com.au>
+
+ * dep-in.sed: Match space at start of file name, not at end.
+
+2000-04-18 H.J. Lu <hjl@gnu.org>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Call
+ lang_leave_output_section_statement () after calling
+ lang_enter_output_section_statement ().
+ * emultempl/armelf.em: Likewise.
+
+2000-04-18 Alan Modra <alan@linuxcare.com.au>
+
+ * emultempl/elf32.em (struct orphan_save): Add section field.
+ (gld${EMULATION_NAME}_place_orphan): Use above to keep sections in
+ better order, and place first orphan section as we did before the
+ 2000-04-12 patch. Ignore ~SEC_ALLOC sections when choosing place.
+ Don't call make_bfd_section here, let wild_doit do the job for us.
+ Don't build a statement list when we'll only throw it away.
+ * emultempl/armelf.em: Ditto.
+ * emultempl/pe.em: Similarly.
+
+2000-04-14 Geoff Keating <geoffk@cygnus.com>
+
+ * scripttempl/elfppc.sc: Remove.
+ * emulparams/elf32ppc.sh: Use elf.sc.
+ * emulparams/elf32lppc.sh: Use elf.sc.
+ * emulparams/elf32ppclinux.sh: Use elf.sc.
+ * emulparams/elf32ppcsim.sh: New file.
+ * emulparams/elf32lppcsim.sh: New file.
+ * Makefile.am: Update dependencies. Add elf32ppcsim ad elf32lppcsim.
+ (ALL_EMULATIONS): Add elf32ppcsim ad elf32lppcsim.
+ * Makefile.in: Regenerate.
+ * configure.tgt (powerpc-*): Add elf32ppcsim and elf32lppcsim.
+
+2000-04-14 Alan Modra <alan@linuxcare.com.au>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Process
+ ~SEC_ALLOC sections too. Init start address of debug sections.
+ * emultempl/armelf.em (gld${EMULATION_NAME}_place_orphan): Ditto.
+ * emultempl/pe.em (gld${EMULATION_NAME}_place_orphan): Ditto.
+ Also set all relocateable section start addresses.
+
+2000-04-13 Geoff Keating <geoffk@cygnus.com>
+
+ * scripttempl/elf.sc: Add support for .sbss2 and .sdata2 sections.
+ Add new BSS_PLT variable for when .plt need not be contained in
+ the file. Move _etext so that it is also after .fini, and provide
+ both etext and _etext with a leading underscore. Mark the start
+ and end of .sbss.
+
+2000-04-12 Alan Modra <alan@linuxcare.com.au>
+
+ * emultempl/elf32.em (struct orphan_save): New.
+ (hold_text, hold_rodata, hold_data, hold_bss, hold_rel,
+ hold_interp): Make them struct orphan_save.
+ (gld${EMULATION_NAME}_place_section): Modify for new hold_*.
+ (gld${EMULATION_NAME}_place_orphan): Add new orphan sections to
+ the end of the relevant section list. Also add associated section
+ statements to the end of any previous orphan statements.
+ * emultempl/armelf.em: Similarly.
+ * emultempl/pe.em: Similarly.
+
+2000-04-11 Alan Modra <alan@linuxcare.com.au>
+
+ * ld.texinfo (Simple Example): Remove extraneous paragraph.
+
+2000-04-07 Andrew Cagney <cagney@b1.cygnus.com>
+
+ * configure.in (WARN_CFLAGS): Set to -W -Wall by default. Add
+ --enable-build-warnings option.
+ * Makefile.am (AM_CFLAGS, WARN_CFLAGS): Add definitions.
+ * Makefile.in, configure: Re-generate.
+
+2000-04-04 Alan Modra <alan@linuxcare.com.au>
+
+ * po/ld.pot: Regenerate.
+
+ * lexsup.c (help): Restore translated part of bug string.
+
+ * Makefile.am (MKDEP): Use gcc -MM rather than mkdep.
+ (DEP): Quote when passing vars to sub-make. Add warning message
+ to end.
+ (DEP1): Rewrite for "gcc -MM".
+ (CLEANFILES): Add DEP2.
+ Update dependencies.
+ * Makefile.in: Regenerate.
+
+2000-04-03 Alan Modra <alan@linuxcare.com.au>
+
+ * ld.h: #include "bin-bugs.h"
+ * lexsup.c (help): Use REPORT_BUGS_TO.
+
+2000-03-27 Denis Chertykov <denisc@overta.ru>
+
+ * configure.tgt (avr-*-*): New target support.
+ * Makefile.am: Likewise.
+ * scripttempl/elf32avr.sc: New script file.
+ * emulparams/avr1200.sh: New file.
+ * emulparams/avr23xx.sh: New file.
+ * emulparams/avr4433.sh New file.
+ * emulparams/avr44x4.sh New file.
+ * emulparams/avr85xx.sh New file.
+ * emulparams/avrmega103.sh New file.
+ * emulparams/avrmega161.sh New file.
+ * emulparams/avrmega603.sh New file.
+ * Makefile.in: Regenerate.
+
+2000-03-09 Andreas Jaeger <aj@suse.de>
+
+ * Makefile.am (check-DEJAGNU): Also unset LANG.
+ * Makefile.in: Rebuild.
+
+2000-03-06 Ian Lance Taylor <ian@zembu.com>
+
+ * ldfile.c (ldfile_try_open_bfd): Don't crash if we see an empty
+ archive.
+
+2000-03-02 H.J. Lu <hjl@gnu.org>
+
+ * emulparams/elf32mcore.sh: Include "getopt.h".
+
+2000-03-01 Ian Lance Taylor <ian@zembu.com>
+
+ * configure.tgt: Remove *-*-aout, *-*-coff, and *-*-netware.
+
+2000-03-01 H.J. Lu <hjl@gnu.org>
+
+ * emulparams/mipspe.sh: Add SUBSYSTEM and INITIAL_SYMBOL_CHAR.
+ * emulparams/shpe.sh: Likewise.
+
+2000-03-01 Nick Clifton <nickc@cygnus.com>
+
+ * pe-dll.c: Remove unused variables and add ATTRIBUTE_UNUSED
+ to unused parameters.
+
+ * emultempl/pe.em: Add "#ifdef DLL_SUPPORT" around static
+ functions only used by DLL code.
+ (_place_orphan): Initialise 'dollar'.
+
+2000-03-01 H.J. Lu <hjl@gnu.org>
+
+ * ldmain.c (undefined_symbol): Take one more arg, fatal, to
+ indicate if the undefined symbol is a fatal error or not.
+ Don't delete the output file if "fatal" is false.
+
+2000-02-29 H.J. Lu <hjl@gnu.org>
+
+ * Makefile.am (check-DEJAGNU): Also pass LIBS="$(LIBS)".
+ Set LC_COLLATE and LC_ALL to null and export them. It is for
+ sort which expects the C locale.
+ Add $(LIBS) to all $(HOSTING_LIBS).
+ * Makefile.in: Rebuild.
+
+2000-02-29 Alan Modra <alan@spri.levels.unisa.edu.au>
+
+ * emultempl/{aix.em, armcoff.em, armelf.em, armelf_oabi.em,
+ beos.em, elf32.em, generic.em, gld960.em, gld960c.em, hppaelf.em,
+ linux.em, lnk960.em, mipsecoff.em, sunos.em, vanilla.em}
+ (ld_emulation_xfer_struct): Add missing NULL initialiser for
+ find_potential_libraries.
+
+2000-02-28 Jim Blandy <jimb@redhat.com>
+
+ * ldgram.y (exclude_name_list): Don't require a comma to separate
+ list entries; the lexer considers commas to be valid part of a
+ filename, so in something like `foo, bar' the comma is considered
+ part of the first filename, `foo,'.
+ * ld.texinfo: Update section on EXCLUDE_FILE lists.
+
+2000-02-27 Loren J. Rittle <ljrittle@acm.org>
+
+ * configure.host: Added HOSTING_CRT0, HOSTING_LIBS for
+ host "i[3456]86-*-freebsdelf*".
+
+2000-02-27 Mark Elbrecht <snowball3@bigfoot.com>
+
+ * scripttempl/i386go32.sc: Move misplaced semicolons.
+
+2000-02-25 Ian Lance Taylor <ian@zembu.com>
+
+ * Makefile.am (ALL_EMULATIONS): Remove ehppaelf.o.
+ (ALL_64_EMULATIONS): Remove eelf64hppa.o.
+ (eelf64hppa.c, ehppaelf.c): Remove targets.
+ * Makefile.in: Rebuild.
+
+2000-02-25 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+
+ * configure.tgt (targ_extra_ofiles): Enable elf64_sparc on
+ GNU/Linux/sparc, but keep the default as 32.
+
+ * configure.tgt: Enable elf64_sparc on Solaris7+/sparc. And make
+ it default if sparcv9 or sparc64.
+
+2000-02-24 Nick Clifton <nickc@cygnus.com>
+
+ * Makefile.am: Add rules to build emipspe.o and earmpe.o.
+ * Makefile.in: Regenerate.
+ * configure.tgt: Add targets for arm-wince, sh-pe and mips-pe.
+
+ * ldemul.h (ld_emulation_xfer_struct): Add new field:
+ find_potential_libraries.
+ * ldemul.c (ldemul_find_potential_libraries): New function.
+
+ * ldfile.c (ldfile_open_file_search): Allow function to be
+ exported.
+ (ldfile_open_file): Call ldemul_find_potential_libraries.
+ * ldfile.h: Add prototype for ldfile_open_file_search.
+
+ * pe-dll.c: Add support for ARM, MIPS and SH targets.
+
+ * emulparams/mipspe.sh: New file. Parameters for mips-pe target.
+ * emulparams/shpe.sh: New file. Parameters for sh-pe target.
+
+ * emultempl/pe.em: Add support for ARM, MIPS and SH DLLs.
+ (gld_X_find_potential_libraries): New function. Search for
+ libraries called "*.lib".
+
+ * scripttempl/pe.sc: Add .pdata section.
+
+2000-02-23 Richard Henderson <rth@cygnus.com>
+
+ * scripttempl/elfd10v.sc: Remove dynamic linking hooks.
+ Add and use memory regions.
+
+2000-02-23 Linas Vepstas (linas@linas.org)
+
+ * emulparams/elf32i370.sh, scripttempl/elfi370.sc: New.
+
+ * Makefile.am: Add support for Linux/IBM 370.
+ * configure.tgt: Likewise.
+
+ * Makefile.in: Regenerate.
+
+2000-02-21 Alan Modra <alan@spri.levels.unisa.edu.au>
+
+ * ldlang.c (print_input_section, print_data_statement,
+ print_reloc_statement, print_padding_statement, insert_pad,
+ size_input_section, lang_check_section_addresses,
+ lang_size_sections, lang_do_assignments, lang_set_startof,
+ lang_one_common): Change `opb' to unsigned.
+ (lang_do_assignments): Also change `size' to unsigned.
+
+2000-02-16 Richard Henderson <rth@cygnus.com>
+
+ * scripttempl/elf.sc: Place OTHER_PLT_RELOC_SECTION.
+
+2000-02-16 Timothy Wall <twall@cygnus.com>
+
+ * mri.c (mri_draw_tree): Add default LMA region argument to call
+ to lang_leave_output_section_statement.
+ * ldlang.h: Update prototypes with LMA region arguments.
+ * ldlang.c (lang_size_sections): Encapsulate region bounds
+ checking in os_check_region call.
+ (os_check_region): New function.
+ (lang_output_section_statement_lookup): Initialize lma_region.
+ (lang_leave_output_section_statement): Add LMA region argument.
+ (lang_leave_overlay): Ditto.
+ * ldgram.y: Handle LMA region syntax.
+ * ld.texinfo (Output Section Description): Describe LMA region usage.
+ * emultempl/armelf.em (gld$place_orphan): Add default value for
+ lma region in call to lang_leave_output_section_statement.
+ * emultempl/elf32.em (gld$place_orphan): Add default value for
+ lma region in call to lang_leave_output_section_statement.
+ * emultempl/pe.em (gld$place_orphan): Add default value for
+ lma region in call to lang_leave_output_section_statement.
+
+
+2000-02-04 Timothy Wall <twall@redhat.com>
+
+ * ldlang.c (lang_check_section_addresses): Use bytes instead of
+ octets when calculating section end addresses.
+
+2000-02-04 Timothy Wall <twall@redhat.com>
+
+ * ldlang.c (lang_size_sections): Fix typo in ALIGN_N invocation.
+
+2000-02-03 Timothy Wall <twall@redhat.com>
+
+ * ldexp.c (fold_name): Make SIZEOF operator return byte count, not
+ octet count.
+ * ldlang.c (print_input_section, print_data_statement,
+ print_reloc_statement, print_padding_statement): Print target
+ address values and section sizes as bytes, not octets.
+ (insert_pad) Calculate padding size in octets, and adjust "dot"
+ by bytes.
+ (size_input_section) Always adjust "dot" by bytes, not octets.
+ (lang_check_section_addresses, lang_do_assignments) Adjust
+ "dot" by bytes, not octets. Use the larger of the directive size
+ or octets_per_byte for the number of octets actually allocated in
+ the output section.
+ (lang_set_startof) Make sure STARTOF returns a target address.
+ (lang_one_common) Record size changes in octets.
+ (lang_abs_symbol_at_end_of) Section end symbol's value is
+ recorded in target bytes.
+ * ld.texinfo: Updated description of BYTE, SHORT, LONG, etc.
+ to be clear about behavior when an octet is smaller than one byte.
+
+2000-01-27 Alan Modra <alan@spri.levels.unisa.edu.au>
+
+ * ldcref.c (output_cref): Don't pass message strings to printf
+ as format arg.
+ Update copyright.
+
+ * ldmisc.c (vfinfo): Same here.
+ Update copyright.
+
+2000-01-23 Alan Modra <alan@spri.levels.unisa.edu.au>
+
+ * emultempl/{armcoff.em,armelf.em,armelf_oabi.em,beos.em,
+ generic.em,gld960.em,gld960c.em,hppaelf.em,linux.em,lnk960.em,
+ mipsecoff.em,sunos.em,vanilla.em} (ld_emulation_xfer_struct):
+ Add missing NULL initialisers, and comments.
+
+2000-01-21 Nick Clifton <nickc@cygnus.com>
+
+ * ldlang.c (lang_size_sections): Fix typo in comment.
+
+2000-01-18 H.J. Lu <hjl@gnu.org>
+
+ * ldlang.c (lang_size_sections): Also update the current
+ address of a region if the SEC_NEVER_LOAD bit is not set.
+
+2000-01-10 Philip Blundell <pb@futuretv.com>
+
+ * configure.tgt (arm*-*-conix*): New target.
+
+2000-01-07 Nick Clifton <nickc@cygnus.com>
+
+ * ld.texinfo (Options): Remind users to preceed linker command
+ line switches with -Wl, (or whatever is appropriate) if it is
+ being invoked by a comnpiler driver program.
+ Fix description of the behaviour of the -n command line switch.
+
+2000-01-05 Catherine Moore <clm@cygnus.com>
+
+ * ld.h (wildcard_spec): Change exclude_name to exclude_name_list.
+ (name_list): New.
+ * ld.texinfo (EXCLUDE_FILE): Update documentation.
+ * ldgram.y (wildcard_spec): Support a list of excluded_files.
+ (exclude_name_list): New.
+ ldlang.c (walk_wild_section): Support list of excluded files.
+ (print_wild_statement): Likewise.
+ (lang_add_wild): Likewise.
+ * ldlang.h (lang_wild_statement_type): Likewise.
+ * scripttempl/elf.sc (OTHER_EXCLUDE_FILES): Support.
+
+2000-01-04 Mumit Khan <khan@xraylith.wisc.edu>
+
+ * pe-dll.c (pe_dll_warn_dup_exports): New variable.
+ (process_def_file): Use.
+ (pe_dll_compat_implib): New variable.
+ (make_one): Use.
+
+ * pe-dll.h: Add exports of pe_dll_warn_dup_exports and
+ pe_dll_compat_implib.
+
+ * emultempl/pe.em (longopts): Add warn-duplicate-exports and
+ compat-implib options.
+ (gld_${EMULATION_NAME}_list_options): List new options.
+ (gld_${EMULATION_NAME}_parse_args): Handle.
+
+ * pe-dll.c (pe_dll_generate_implib): Use the correct name for output
+ dll.
+
+ * deffilep.y (opt_name): Allow "." in name.
+
+For older changes see ChangeLog-9899
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/binutils-2.21/ld/ChangeLog-0203 b/binutils-2.21/ld/ChangeLog-0203
new file mode 100644
index 0000000..ee5354d
--- /dev/null
+++ b/binutils-2.21/ld/ChangeLog-0203
@@ -0,0 +1,3580 @@
+2003-12-19 Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com>
+
+ Add m32r-linux and PIC support. Add new ABI that uses RELA.
+ * Makefile.am: Added em32rlelf.c, em32relf_linux.c,
+ em32rlelf_linux.c.
+ * Makefile.in: Regenerate.
+ * configure.tgt (m32r*-*-linux*, m32r*le-*-linux*, m32r*le-*-*):Added.
+ * emulparams/m32relf_linux.sh: Added.
+ * emulparams/m32rlelf.sh: Ditto.
+ * emulparams/m32rlelf_linux.sh: Ditto.
+ * NEWS: Mention support m32r Linux.
+
+2003-12-18 Eric Youngdale <eric@mkssoftware.com>
+ Nick Clifton <nickc@redhat.com>
+
+ * emultempl/pe.em (_after_open): When scanning MS import
+ libraries allow for the possible presence of static objects.
+
+2003-12-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ldlang.c (lang_vers_match): Pass "DMGL_PARAMS | DMGL_ANSI" to
+ cplus_demangle.
+
+2003-12-07 Kazu Hirata <kazu@cs.umass.edu>
+
+ * ldemul.c: Convert to ISO-C.
+ * ldver.c: Likewise.
+
+2003-12-06 Kazu Hirata <kazu@cs.umass.edu>
+
+ * lexsup.c (is_num): Remove.
+
+2003-12-05 Dmitry Semyonov <Dmitry.Semyonov@oktet.ru>
+
+ * pe-dll.c (generate_reloc): Remap ARM_26D relocation from 5 to
+ 0. This fixes "bad fixup" error generated by MS linker.
+
+2003-12-04 H.J. Lu <hongjiu.lu@intel.com>
+
+ * emultempl/ia64elf.em (gld${EMULATION_NAME}_after_parse): Set
+ link_info.need_relax_finalize to TRUE.
+
+ * ldlang.c (lang_process): Use link_info.need_relax_finalize
+ instead of link_info.relax_finalizing.
+ * ldmain.c (main): Likewise.
+
+2003-12-04 Dmitry Semyonov <Dmitry.Semyonov@oktet.ru>
+
+ * armpe.sh (RELOCATEABLE_OUTPUT_FORMAT): Define.
+
+2003-12-04 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_do_assignments): Function return is void.
+ * ldlang.h (lang_do_assignments): Ditto.
+ * emultempl/netbsd.em (gld${EMULATION_NAME}_before_parse): Declare.
+ * Makefile.am (ens32knbsd.c): Depend on netbsd.em.
+ * Makefile.in: Regenerate.
+
+2003-12-03 Dave Airlie <airlied@linux.ie>
+
+ * configure.tgt: Add vax-linux-gnu target.
+
+2003-12-03 Dmitry Diky <diwil@mail.ru>
+
+ * scripttempl/elf32msp430.sc (HEAP_SECTION_MSP430): New section for
+ forthcoming devices.
+ (_etext): provide this defenition for all scripts.
+
+2003-12-02 Kazu Hirata <kazu@cs.umass.edu>
+
+ * emultempl/beos.em: Remove ARGSUSED.
+
+2003-12-03 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/pe.em (pe_fixup_stdcalls): Update for renamed
+ bfd_link_hash_entry field "next" -> "und_next".
+ (pe_find_data_imports): Likewise.
+ (gld_${EMULATION_NAME}_after_open): Likewise.
+ * emultempl/sunos.em (before_allocation): Likewise.
+
+2003-12-02 Nick Clifton <nickc@redhat.com>
+
+ * ld.texinfo (Options): --ignore-all is no longer the default
+ behaviour for shared libraries and dynamic executables.
+
+2003-12-02 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+
+2003-12-02 Alan Modra <amodra@bigpond.net.au>
+
+ * ldmain.c (main): Remove mpc860c0 code.
+ * lexsup.c (enum option_values): Delete OPTION_MPC860C0.
+ (ld_options): Delete mpc860c0 entry.
+ (parse_args): Likewise.
+
+2003-12-01 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): Test
+ hash table type rather than testing creator flavour.
+ * emultempl/hppaelf.em (hppaelf_create_output_section_statements):
+ Only create stub_file bfd if hash table creator is as expected.
+ (gld${EMULATION_NAME}_finish): Test stub_file.
+
+2003-11-28 Marcel Moolenaar <marcel@xcllnt.net>
+
+ * emulparams/elf64_ia64_fbsd.sh (TEXT_START_ADDR): Define.
+ (DATA_ADDR): Unset.
+
+2003-11-18 James E Wilson <wilson@specifixinc.com>
+
+ * ldlang.c (lang_process): Move lang_reset_memory_regions call after
+ lang_do_assignments call.
+
+ * emulparams/elf64_ia64.sh (OTHER_PLT_RELOC_SECTIONS): Include
+ .rela.opd if -pie.
+
+2003-11-10 Jonathan Wilson <jonwil@tpgi.com.au>
+
+ * scripttempl/pe.sc: Add support for TLS sections.
+
+2003-11-09 Alan Modra <amodra@bigpond.net.au>
+
+ * configure.host (HOSTING_LIBS): Group libgcc and libc with
+ --start-group, --end-group pair.
+ (*-*-netbsd*, am33_2.0-*-linux*): Use the default HOSTING_LIBS.
+ (am33_2.0-*-linux*): Edit default HOSTING_CRT0.
+ (arm*-*-linux-gnu*): Remove extraneous '*' in sed expression.
+ (hppa*64*-*-linux*, hppa*-*-linux*): Remove target specific case.
+
+2003-11-07 Jonathan R. Grant <jg-binutils@jguk.org>
+
+ * ldfile.c (ldfile_open_file): Use "No such file" error message.
+
+2003-11-06 Bruno Rohee <bruno@rohee.com>
+
+ * ls.texinfo: Fix "the the" typo.
+
+2003-11-05 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_after_open): Only do
+ pe_dll_extra_pe_debug stuff when DLL_SUPPORT defined.
+ (pr_sym): Move inside #ifdef DLL_SUPPORT.
+
+ * emultempl/ppc64elf.em (gld${EMULATION_NAME}_new_vers_pattern): Zap
+ unused variable.
+
+ * emulparams/elf32_i860.sh (TEXT_START_ADDR): Define.
+
+2003-11-04 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): Call
+ _bfd_elf_tls_setup.
+
+2003-10-31 Nick Clifton <nickc@redhat.com>
+
+ * ldlang.c (lookup_name): When looking for a previously loaded
+ file compare the local_sym_name not the filename, as the
+ filename might have been transformed via the search directory
+ path lookup.
+ If the sought-for file has not been found in the input file
+ chain then create a new node with the search_dirs_flag set so
+ that the entire set of directory paths will be scanned for it.
+
+2003-10-30 Andrew Cagney <cagney@redhat.com>
+
+ * emultempl/pe.em, pe-dll.c: Replace "struct symbol_cache_entry"
+ with "struct bfd_symbol".
+
+2003-10-30 Phil Edwards <phil@codesourcery.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add elf32mipswindiss.o.
+ (eelf32mipswindiss.c): New target.
+ * Makefile.in: Regenerated.
+ * emulparams/elf32mipswindiss.sh: New file.
+ * configure.tgt (i[3-7]86-*-vxworks*, arm-*-vxworks, sh-*-vxworks,
+ mips*-*-vxworks*): Use ELF now.
+ (mips*-*-windiss): New stanza, use elf32mipswindiss.
+
+2003-10-27 Stephane Carrez <stcarrez@nerim.fr>
+
+ * scripttempl/elfm68hc12.sc: Define eeprom memory region.
+
+2003-10-25 Kazu Hirata <kazu@cs.umass.edu>
+
+ * ChangeLog-9197: Fix typos.
+ * NEWS: Likewise.
+ * ld.texinfo: Likewise.
+ * ldlang.c: Fix comment typos.
+
+2003-10-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ldlang.c (lang_vers_match): Fix a typo.
+
+2003-10-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ldlang.c (lang_vers_match): Check demangled symbols.
+
+2003-10-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ldlang.c (lang_vers_match): Check "symbol" instead of
+ "wildcard" and "pattern". Fix a typo.
+ (lang_finalize_version_expr_head): Likewise.
+ (lang_register_vers_node): Likewise.
+ (realsymbol): New function.
+ (lang_new_vers_pattern): Set "symbol" and remove "wildcard".
+
+ * ldlex.l (V_IDENTIFIER): Allow '\\'.
+
+2003-10-24 Nick Clifton <nickc@redhat.com>
+
+ * emultempl/m68hc1xelf.em (before_allocation): Add missing second
+ parameter to lang_memory_region_lookup.
+
+2003-10-22 Jakub Jelinek <jakub@redhat.com>
+
+ * ldlang.c: Include hashtab.h.
+ (lang_vers_match_lang_c, lang_vers_match_lang_cplusplus,
+ lang_vers_match_lang_java): Remove.
+ (lang_vers_match): New function.
+ (lang_new_vers_pattern): Initialize wildcard and mask
+ fields, don't initialize match.
+ (lang_new_vers_node): Use xcalloc. Adjust for globals and
+ locals field type changes. Set match field.
+ (version_expr_head_hash, version_expr_head_eq): New functions.
+ (lang_finalize_version_expr_head): New function.
+ (lang_register_vers_node): Call lang_finalize_version_expr_head.
+ Search in hash table if not wildcard when looking for duplicates.
+ * emultempl/ppc64elf.em (new_vers_pattern): Don't bother with
+ duplicate checking. Initialize all fields of dot_entry from entry
+ with the exception of pattern and next.
+
+2003-10-21 Nick Clifton <nickc@redhat.com>
+
+ * ldlang.c (lang_memory_region_lookup): Add second parameter -
+ create - which is true if the region is being created. Issue
+ appropriate warning messages for finding and not finding
+ already created regions.
+ (lang_memory_default): Use DEFAULT_MEMORY_REGION.
+ (lang_leave_overlay_section): Likewise.
+ (lang_size_sections_1): Likewise.
+ Pass second parameter to lang_memory_region_lookup.
+ (lang_get_regions): Likewise.
+ * ldlang.h (DEFAULT_MEMORY_REGION): Define.
+ Update prototype for lang_memory_region_lookup.
+ * ldgram.y: Pass second parameter to lang_memory_region_lookup.
+ Use DEFAULT_MEMORY_REGION instead of "*default".
+
+2003-10-20 Andrew Cagney <cagney@redhat.com>
+
+ * pe-dll.c: Replace "struct sec" with "struct bfd_section".
+
+2003-10-19 Marek Michalkiewicz <marekm@amelek.gda.pl>
+
+ * Makefile.am: Remove old (before GCC 3.3) emulations for AVR
+ target: avr1200, avr23xx, avr4433, avr44x4, avr85xx, avrmega103,
+ avrmega161, avrmega603. Default to avr2.
+ * Makefile.in: Regenerate.
+ * configure.tgt: Likewise.
+ * emulparams/avr1200.sh: Remove.
+ * emulparams/avr23xx.sh: Remove.
+ * emulparams/avr4433.sh: Remove.
+ * emulparams/avr44x4.sh: Remove.
+ * emulparams/avr85xx.sh: Remove.
+ * emulparams/avrmega103.sh: Remove.
+ * emulparams/avrmega161.sh: Remove.
+ * emulparams/avrmega603.sh: Remove.
+ * scripttempl/elf32avr.sc: Remove.
+
+2003-10-19 Andreas Schwab <schwab@suse.de>
+
+ * emultempl/ticoff.em (gld_${EMULATION_NAME}_list_options): Add
+ newline to message.
+
+ * deffilep.y: Remove commas from %token lines.
+
+2003-10-18 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * emultempl/mmix-elfnmmo.em (mmix_before_allocation): Force linker
+ relaxation always; don't exclude relocatable linking. Adjust for
+ _bfd_mmix_prepare_linker_allocated_gregs renamed to
+ _bfd_mmix_before_linker_allocation.
+ (mmix_after_allocation): Adjust for
+ _bfd_mmix_finalize_linker_allocated_gregs renamed to
+ _bfd_mmix_after_linker_allocation.
+ * scripttempl/mmo.sc: Use ADDR (.text), not . - SIZEOF (.text).
+
+ * ldlang.c (lang_size_sections): Last, set _cooked_size for output
+ sections.
+
+2003-10-16 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am (GENSCRIPTS_EXTRA, GEN_EXTRA_DEPENDS): Remove. Use
+ GENSCRIPTS and GEN_DEPENDS in place of these.
+ * Makefile.in: Regenerate.
+ * genscripts_extra.sh: Delete. Merge extra functionality to..
+ * genscripts.sh: ..here.
+
+ * emulparams/gld960.sh (TEXT_START_ADDR, TARGET_PAGE_SIZE): Define.
+ * emulparams/gld960coff.sh (TEXT_START_ADDR, TARGET_PAGE_SIZE): Ditto.
+ * emulparams/lnk960.sh (TEXT_START_ADDR, TARGET_PAGE_SIZE): Ditto.
+ * emulparams/m88kbcs.sh (TEXT_START_ADDR, TARGET_PAGE_SIZE): Ditto.
+ * emulparams/vanilla.sh (TEXT_START_ADDR, TARGET_PAGE_SIZE): Ditto.
+
+2003-10-16 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ia64elf.em (gld${EMULATION_NAME}_after_parse): Don't
+ use $EMULATION_NAME to call bfd function.
+
+2003-10-14 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * pe-dll.c (pe_implied_import_dll): Also scan .rdata sections
+ to identify data symbols.
+
+2003-10-13 Richard Sandiford <rsandifo@redhat.com>
+
+ * emulparams/elf32bmipn32-defs.sh (INITIAL_READONLY_SECTIONS): Move
+ definition from elf64btsmip.sh.
+ (TEXT_DYNAMIC): Likewise elf32btsmipn32.sh.
+ * emulparams/elf32btsmipn32.sh (TEXT_DYNAMIC): Remove.
+ * emulparams/elf64btsmip.sh (INITIAL_READONLY_SECTIONS): Remove.
+ * emulparams/elf64bmip.sh (SHLIB_TEXT_START_ADDR): Define.
+ (EXECUTABLE_SYMBOLS): Set __elf_header correctly for shared objects.
+ Define __program_header_table in terms of __elf_header.
+
+2003-10-10 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makefile.am (eelf64_ia64.c): Also depend on
+ $(srcdir)/emultempl/ia64elf.em.
+ * Makefile.in: Regenerated.
+
+ * emulparams/elf64_ia64.sh (EXTRA_EM_FILE): Set to ia64elf.
+
+ * emultempl/ia64elf.em: New.
+
+2003-10-12 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * emulparams/shelf32_nbsd.sh (OTHER_SECTIONS): Redefine.
+
+2003-10-11 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld.texinfo (Builtin Functions) <DEFINED>: Say that only symbols
+ defined before the statement using DEFINED yield 1.
+ * ldexp.c (fold_name) <case DEFINED>: In lang_first_phase_enum,
+ call lang_track_definedness on symbol. In subsequent phases, use
+ lang_symbol_definition_iteration and lang_statement_iteration to
+ check whether the symbol was defined before the current statement.
+ (exp_fold_tree) <case etree_assign et al>: Call
+ lang_update_definedness before updating symbol type when setting
+ symbol.
+ * ldlang.c (lang_definedness_table): New variable.
+ (lang_definedness_newfunc, lang_track_definedness)
+ (lang_symbol_definition_iteration, lang_update_definedness): New
+ functions.
+ (lang_init): Initialize lang_definedness_table and
+ lang_statement_iteration.
+ (lang_finish): Destroy bfd_hash_table_free.
+ (lang_size_sections): Increment lang_statement_iteration.
+ (lang_do_assignments_1): New function with former
+ lang_do_assignments contents. Change recursive calls to call this
+ function.
+ (lang_do_assignments): Evacuate contents. Increment
+ lang_statement_iteration, then just call lang_do_assignments_1.
+ * ldlang.h (struct lang_definedness_hash_entry)
+ (lang_statement_iteration, lang_track_definedness)
+ (lang_symbol_definition_iteration, lang_update_definedness):
+ Declare.
+
+2003-10-09 H.J. Lu <hongjiu.lu@intel.com>
+
+ * scripttempl/elf.sc (__executable_start): Provide.
+
+2003-10-09 Daniel Jacobowitz <drow@mvista.com>
+
+ * emulparams/armelf.sh: Define NO_SMALL_DATA.
+ * emulparams/armelf_linux.sh, emulparams/armelf_oabi.sh,
+ emulparams/armnto.sh: Likewise.
+
+2003-10-08 Alexandre Oliva <aoliva@redhat.com>
+
+ * ldlang.c (lang_size_sections_1): Use IGNORE_SECTION to tell
+ whether to skip test for no memory region.
+
+2003-10-08 Nick Clifton <nickc@redhat.com>
+
+ * lexsup.c (parse_args: OPTION_CALL_SHARED): Revise comment
+ describing defaults. Change default to report unresolved symbols
+ in object files as well.
+
+2003-10-08 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ldexp.c (fold_name) <case DEFINED>: Set section of result to
+ abs_output_section.
+
+2003-10-07 Bob Wilson <bob.wilson@acm.org>
+
+ * emulparams/elf32xtensa.sh (OTHER_READONLY_SECTIONS,
+ OTHER_READWRITE_SECTIONS, OTHER_SECTIONS): Set section addresses to
+ zero for relocatable links.
+
+2003-10-07 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ * configure.host (HOSTING_LIBS): Define for hppa*-*-linux*.
+
+2003-10-07 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ldwrite.c (unsplittable_name): New.
+ (clone_section): Strip existing numeric suffix. Only truncate names
+ for coff targets.
+ (split_sections): Use unsplittable_name.
+
+2003-10-06 Nick Clifton <nickc@redhat.com>
+
+ * lexsup.c (parse_args): Report unresolved symbols in shared
+ libraries when creating a dynamic executable. This is a
+ restoration of the default behaviour for previous versions of
+ the linker.
+
+2003-10-06 Matt Thomas <matt@3am-software.com>
+
+ * emulparams/hppanbsd.sh: Remove OUTPUT_FORMAT.
+ * emulparams/hppaobsd.sh: Add OUTPUT_FORMAT="elf32-hppa".
+
+2003-10-06 Robert Millan <robertmh@gnu.org>
+
+ * configure.tgt: Match GNU/KNetBSD with new knetbsd*-gnu triplet.
+
+2003-10-02 Ivan Warren <ivan@vmfacility.fr>
+
+ * pe-dll.c (make_one): Correct sym def order & pick right sym for
+ .idata$7 reloc.
+
+2003-09-30 Chris Demetriou <cgd@broadcom.com>
+
+ * NEWS: Add an indication of the cutoff for 2.14.
+
+2003-09-30 Chris Demetriou <cgd@broadcom.com>
+
+ * ldmain.c (get_emulation): Ignore "-mips64r2".
+
+2003-09-03 Robert Millan <robertmh@gnu.org>
+
+ * configure.host: Match GNU/KFreeBSD with new kfreebsd*-gnu
+ triplet.
+ * configure.tgt: Likewise.
+
+2003-08-29 Jafa <jafa@silicondust.com>
+
+ * emulparams/elf32ip2k.sh (TEMPLATE_NAME): Define.
+
+2003-08-21 Nick Clifton <nickc@redhat.com>
+
+ * po/tr.po: Updated Turkish translation.
+
+2003-08-20 Nick Clifton <nickc@redhat.com>
+
+ * ldmain.c: Initialise the new fields in bfd_link_info to
+ NOT_YET_SET.
+ * lexsup.c (enum option_values): New enum. Use this to
+ replace the hand coded values for the long switch options.
+ (ld_options): Add 'unresolved-symbols',
+ 'warn-unresolved-symbols' and 'error-unresolved-symbols'.
+ (parse_args): Handle the new switches. Set the values of
+ unresolved_symbols_in_objects and
+ unresolved_symbols_in_shared_libs appropriately. If they were
+ not initialised by the command line, install default values.
+ * emultempl/elf32.em (handle_option): Update OPTION_GROUP and
+ -z defs to use the new fields in bfd_link_info.
+ * ld.texinfo: Document the new switches.
+ * NEWS: Mention this feature.
+
+2003-08-15 Dmitry Diky <diwil@mail.ru>
+
+ * Makefile.am (GENSCRIPTS_EXTRA): New script definition which
+ calls genscripts_extra.sh.
+ Rearrange all msp430 depends using this script.
+ * Makefile.in: Regenerate.
+ * genscripts_extra.sh: New file: Similar to genscripts.sh, except
+ that the script to be run to generate the emulations can be passed
+ as an optional parameter instead of being computed from the
+ emulation name.
+ * emulparams/msp430all.sh: New file: Combine all msp430 subdevice
+ definitions into one file.
+ * emulparams/msp430x*.sh: Removed.
+
+2003-08-15 Nick Clifton <nickc@redhat.com>
+
+ * ld.texinfo (Options): Put keywords for the -z option into a
+ table. Add more text describing what the -z now option does.
+
+2003-08-14 Alan Modra <amodra@bigpond.net.au>
+
+ * dep-in.sed: Remove libintl.h.
+ * Makefile.am (POTFILES.in): Unset LC_COLLATE.
+ * Makefile.in: Regenerate.
+
+2003-08-13 Alan Modra <amodra@bigpond.net.au>
+
+ * genscripts.sh (libpath.exp): Only generate for first emulation.
+ (LIB_PATH): Correct order of paths. Don't add $tool_lib when
+ already present or when LIB_PATH is set to ":".
+
+2003-08-12 Ian Lance Taylor <ian@airs.com>
+
+ * ldmain.c (undefined_symbol): Change parameter name from `fatal'
+ to `error'. If only a warning, put warning in the reported
+ string. Consistently set failure flag when not a warning.
+
+2003-08-08 Dmitry Diky <diwil@mail.ru>
+
+ * Makefile.am: Add xW42 and xE42 parts. Sort MPU list according to
+ gcc order.
+ * Makefile.in: Regenerate.
+ * configure.tgt: Add extra emulations.
+ * emulparams/msp430xE423.sh: New file.
+ * emulparams/msp430xE427.sh: New file.
+ * emulparams/msp430xW425.sh: New file.
+ * emulparams/msp430xE425.sh: New file.
+ * emulparams/msp430xW423.sh: New file.
+ * emulparams/msp430xW427.sh: New file.
+
+2003-08-07 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_before_parse):
+ Change second (cmdline) arg to lang_add_entry to FALSE.
+ (set_pe_subsystem): Change second arg to lang_add_entry to TRUE.
+
+2003-08-05 Christian Groessler <chris@groessler.org>
+ Jason Eckhardt <jle@rice.edu>
+
+ * configure.tgt: Recognize new target i860-*-coff.
+ * Makefile.am (ALL_EMULATIONS): Add ecoff_i860.o.
+ (ecoff_i860.c): New rule.
+ * emulparams/coff_i860.sh: New file.
+ * scripttempl/i860coff.sc: New file.
+ * Makefile.in: Regenerate.
+
+2003-08-04 Nick Clifton <nickc@redhat.com>
+
+ * emultempl/elf32.em (before_allocation): Prepend "warning: "
+ to messages produced for .gnu.warning.SYMBOL sections.
+
+2003-08-04 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf32.em (output_rel_find): Add "isdyn" param. Put
+ .rel.dyn before other reloc sections. Don't stop looking for reloc
+ sections on finding one that isn't allocated. Match .rel even when
+ placing .rela and vice versa, when setting last_rel and
+ last_rel_alloc for the first time. If no reloc sections in script,
+ prefer allocated section over non-alloc.
+ (gld${EMULATION_NAME}_place_orphan): Handle orphan .rel.dyn.
+
+2003-07-29 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * emulparams/shelf.sh (OTHER_SECTIONS): Don't include .stack
+ section for shared library.
+ * emulparams/shelf32.sh (OTHER_SECTIONS): Likewise.
+ * emulparams/shelf64.sh (OTHER_SECTIONS): Likewise.
+
+2003-07-29 Stephane Carrez <stcarrez@nerim.fr>
+
+ * scripttempl/elfm68hc12.sc: Add gcc_except_table.
+ * scripttempl/elfm68hc11.sc: Likewise.
+
+2003-07-28 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/elf64ppc.sh (GOT): Fix for shell brace matching.
+
+ * emulparams/elf64ppc.sh (GOT): Don't merge .toc into .got for ld -r.
+
+2003-07-27 Alan Modra <amodra@bigpond.net.au>
+
+ * ld.texinfo: Typo fixes. Document SUBALIGN.
+ * ldgram.y (opt_subalign): Add.
+ * ldlex.l (SUBALIGN): Recognize.
+ * ldlang.c (overlay_subalign): New var.
+ (lang_enter_overlay): Add subalign param.
+ (lang_enter_overlay_section): Pass overlay_subalign to
+ lang_enter_output_section_statement.
+ * ldlang.h (lang_enter_overlay): Update.
+
+2003-07-24 Nick Clifton <nickc@redhat.com>
+
+ * po/fr.po: Updated French translation.
+
+2003-07-23 Stephane Carrez <stcarrez@nerim.fr>
+
+ * scripttempl/elfm68hc11.sc: Keep ctor/dtor sections; Take into
+ account .tramp sections;
+ * scripttempl/elfm68hc12.sc: Likewise.
+
+2003-07-17 Charles Wilson <cwilson@ece.gatech.edu>
+
+ * ld/pe-dll.c: Add libcygwin to autofilter_liblist[]
+
+2003-07-17 Nick Clifton <nickc@redhat.com>
+
+ * po/es.po: New Spanish translation.
+
+2003-07-11 Alan Modra <amodra@bigpond.net.au>
+
+ * po/ld.pot: Regenerate.
+
+2003-07-10 Bob Wilson <bob.wilson@acm.org>
+
+ * emulparams/elf32xtensa.sh (OTHER_READONLY_SECTIONS): Replace .xt.lit
+ with new .got.loc section.
+ (OTHER_READWRITE_SECTIONS): Do not combine linkonce sections for
+ non-relocating links.
+ (OTHER_SECTIONS): Add .xt.lit here. Change it to keep linkonce
+ sections separate for non-relocating links; likewise for .xt.insn.
+
+2003-07-10 Alexandre Oliva <aoliva@redhat.com>
+
+ 2001-08-22 Alexandre Oliva <aoliva@redhat.com>
+ * emulparams/elf32am33lin.sh: Adjust to match kernel parameters.
+ 2001-05-09 Alexandre Oliva <aoliva@redhat.com>
+ * configure.host (am33_2.0-*-linux*): Added.
+ * configure.tgt (am33_2.0-*-linux*): Likewise.
+ * emulparams/elf32am33lin.sh: New.
+ * Makefile.am (eelf32am33lin.c): New rule.
+ * Makefile.in: Rebuilt.
+
+2003-07-09 Alexandre Oliva <aoliva@redhat.com>
+
+ 2001-04-17 Alexandre Oliva <aoliva@redhat.com>
+ * emulparams/mn10300.sh (TEMPLATE_NAME): Define.
+ (GENERATE_SHLIB_SCRIPT): Likewise.
+
+2003-07-10 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/elf64ppc.sh (OTHER_GOT_SECTIONS): Don't define.
+ (GOT): Define.
+ * emultempl/ppc64elf.em (stub_added): New static var.
+ (ppc_create_output_section_statements): Call ppc64_elf_init_stub_bfd.
+ (ppc_add_stub_section): Set stub_added.
+ (gld${EMULATION_NAME}_finish): Look for .got rather than .toc. Adjust
+ ppc64_elf_size_stubs call and test for stubs.
+ * scripttempl/elf.sc (GOT): Define and use.
+
+2003-07-08 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * emultempl/sh64elf.em (sh64_elf_${EMULATION_NAME}_after_allocation):
+ Allow second call from ldemul_finish.
+
+2003-07-04 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * emulparams/shelf32.sh (STACK_ADDR): Don't define.
+ (OTHER_SECTIONS): Include .stack.
+ * emulparams/shelf64.sh (OTHER_SECTIONS): Likewise.
+
+2003-07-02 Jakub Jelinek <jakub@redhat.com>
+
+ * emulparams/elf64_ia64.sh (OTHER_READONLY_SECTIONS): Don't include
+ .opd if -pie.
+ (OTHER_READWRITE_SECTIONS): Include .opd if -pie.
+ * scripttempl/elf.sc: Use SHLIB_DATA_ADDR instead of DATA_ADDR
+ if -pie.
+
+2003-06-28 Alan Modra <amodra@bigpond.net.au>
+
+ * ld.h: Convert to C90, remove unnecessary prototypes and casts.
+ Replace PTR with void *. Formatting.
+ * ldcref.c: Likewise.
+ * ldctor.c: Likewise.
+ * ldctor.h: Likewise.
+ * ldemul.h: Likewise.
+ * ldexp.c: Likewise.
+ * ldexp.h: Likewise.
+ * ldfile.c: Likewise.
+ * ldfile.h: Likewise.
+ * ldlang.c: Likewise.
+ * ldlang.h: Likewise.
+ * ldlex.h: Likewise.
+ * ldlex.l: Likewise.
+ * ldmain.c: Likewise.
+ * ldmain.h: Likewise.
+ * ldmisc.c: Likewise.
+ * ldmisc.h: Likewise.
+ * ldver.h: Likewise.
+ * ldwrite.c: Likewise.
+ * ldwrite.h: Likewise.
+ * lexsup.c: Likewise.
+ * mri.c: Likewise.
+ * mri.h: Likewise.
+ * pe-dll.c: Likewise.
+ * pe-dll.h: Likewise.
+ * deffilep.y: Likewise.
+ * deffile.h: Likewise. Don't include ansidecl.h.
+ * emulparams/elf32mcore.sh: Remove unnecessary cast.
+ * emultempl/m68kcoff.em: Likewise.
+ * emultempl/m68kelf.em: Likewise.
+ * emultempl/ticoff.em: Remove lang_add_output_format declaration.
+ * sysdep.h: Don't include ansidecl.h.
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+
+2003-06-27 Nick Clifton <nickc@redhat.com>
+
+ * deffilep.y (def_file_add_directive): Cope with NUL seperated
+ directives. Fix reporting of unparseable directives.
+ (def_error): Check for a NULL def_filename.
+
+2003-06-27 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/aix.em: Convert to C90, remove unnecessary prototypes
+ and casts. Replace PTR with void *. Formatting.
+ * emultempl/alphaelf.em: Likewise.
+ * emultempl/armcoff.em: Likewise.
+ * emultempl/armelf.em: Likewise.
+ * emultempl/armelf_oabi.em: Likewise.
+ * emultempl/beos.em: Likewise.
+ * emultempl/elf32.em: Likewise.
+ * emultempl/generic.em: Likewise.
+ * emultempl/gld960.em: Likewise.
+ * emultempl/gld960c.em: Likewise.
+ * emultempl/hppaelf.em: Likewise.
+ * emultempl/linux.em: Likewise.
+ * emultempl/lnk960.em: Likewise.
+ * emultempl/m68hc1xelf.em: Likewise.
+ * emultempl/m68kcoff.em: Likewise.
+ * emultempl/m68kelf.em: Likewise.
+ * emultempl/mipsecoff.em: Likewise.
+ * emultempl/mipself.em: Likewise.
+ * emultempl/mmix-elfnmmo.em: Likewise.
+ * emultempl/mmixelf.em: Likewise.
+ * emultempl/mmo.em: Likewise.
+ * emultempl/needrelax.em: Likewise.
+ * emultempl/netbsd.em: Likewise.
+ * emultempl/pe.em: Likewise.
+ * emultempl/sh64elf.em: Likewise.
+ * emultempl/sunos.em: Likewise.
+ * emultempl/ticoff.em: Likewise.
+ * emultempl/vanilla.em: Likewise.
+ * emultempl/xtensaelf.em: Likewise.
+ * Makefile.am: Correct dependencies.
+ * Makefile.in: Regenerate.
+
+2003-06-25 Alan Modra <amodra@bigpond.net.au>
+
+ * ld.texinfo: Correct spelling of "relocatable".
+ * ldctor.c: Likewise.
+ * ldexp.c: Likewise.
+ * ldfile.c: Likewise.
+ * ldint.texinfo: Likewise.
+ * ldlang.c: Likewise.
+ * ldmain.c: Likewise.
+ * ldwrite.c: Likewise.
+ * lexsup.c: Likewise.
+ * emultempl/aix.em: Likewise.
+ * emultempl/alphaelf.em: Likewise.
+ * emultempl/armcoff.em: Likewise.
+ * emultempl/armelf_oabi.em: Likewise.
+ * emultempl/beos.em: Likewise.
+ * emultempl/elf32.em: Likewise.
+ * emultempl/generic.em: Likewise.
+ * emultempl/gld960.em: Likewise.
+ * emultempl/gld960c.em: Likewise.
+ * emultempl/hppaelf.em: Likewise.
+ * emultempl/linux.em: Likewise.
+ * emultempl/lnk960.em: Likewise.
+ * emultempl/m68hc1xelf.em: Likewise.
+ * emultempl/m68kcoff.em: Likewise.
+ * emultempl/m68kelf.em: Likewise.
+ * emultempl/mipsecoff.em: Likewise.
+ * emultempl/mipself.em: Likewise.
+ * emultempl/mmix-elfnmmo.em: Likewise.
+ * emultempl/mmo.em: Likewise.
+ * emultempl/needrelax.em: Likewise.
+ * emultempl/pe.em: Likewise.
+ * emultempl/ppc64elf.em: Likewise.
+ * emultempl/sh64elf.em: Likewise.
+ * emultempl/sunos.em: Likewise.
+ * emultempl/ticoff.em: Likewise.
+ * emultempl/xtensaelf.em: Likewise.
+
+2003-06-24 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc32elf.em: Convert to C90.
+
+2003-06-20 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc64elf.em: Convert to C90 function definitions, remove
+ unnecessary prototypes and casts.
+
+2003-06-19 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc64elf.em (gld${EMULATION_NAME}_finish): Dump out
+ statistics from ppc64_elf_build_stubs.
+
+2003-06-19 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc64elf.em (build_section_lists): Check return status
+ from ppc64_elf_next_input_section.
+
+2003-06-17 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ldlang.c (section_already_linked): Put back assignment of
+ kept_section.
+
+2003-06-17 Rainer Keuchel <rkeuchel@allgeier.com>
+
+ * pe-dll.c (generate_reloc): Catch and ignore an ARM_26D
+ reloc.
+
+2003-06-17 Loren James Rittle <rittle@latour.rsch.comm.mot.com>
+
+ * configure.host (*-*-freebsd*): Add known path for ld-elf.so.1
+ if not produced by gcc.
+
+2003-06-16 Hans-Peter Nilsson <hp@axis.com>
+
+ * configure.tgt: Add specific case for cris-*-linux-gnu*
+ with crislinux emulation only.
+
+2003-06-13 Robert Millan <zeratul2@wanadoo.es>
+
+ * configure.tgt: Add i386-netbsd-gnu target.
+
+2003-06-12 Richard Sandiford <rsandifo@redhat.com>
+
+ * configure.tgt (mips*-sgi-irix6*): Add the o32 and n64 emulations
+ to $targ_extra_libpath.
+
+2003-06-11 H.J. Lu <hongjiu.lu@intel.com>
+
+ * po/Make-in (DESTDIR): New.
+ (install-data-yes): Support $(DESTDIR).
+ (uninstall): Likewise.
+
+2003-06-10 Doug Evans <dje@sebabeach.org>
+
+ * Makefile.am (ALL_EMULATIONS): Add em32relf.o.
+ * Makefile.in: Regenerate.
+
+2003-06-10 Richard Sandiford <rsandifo@redhat.com>
+
+ * configure.tgt (h8300*): Add h8300sxn emulations.
+ * Makefile.am (ALL_EMULATIONS): Add eh8300sxn.o and eh8300sxnelf.o.
+ (eh8300sxn.c, eh8300sxnelf.c): New rules.
+ * Makefile.in: Regenerate.
+ * emulparams/h8300sxnelf.sh, emulparams/h8300sxn.sh: New files.
+ * scripttempl/h8300sxn.sc: New file.
+
+2003-06-10 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/elf64ppc.sh (EXECUTABLE_SYMBOLS, OTHER_BSS_END_SYMBOLS,
+ CTOR_START, CTOR_END, DTOR_START, DTOR_END): Don't define.
+
+2003-06-08 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc64elf.em (emit_stub_syms, toc_section): New vars.
+ (build_toc_list): New function.
+ (gld${EMULATION_NAME}_finish): Call build_toc_list and
+ ppc64_elf_reinit_toc. Adjust ppc64_elf_build_stubs call.
+ (OPTION_STUBSYMS): Define.
+ (PARSE_AND_LIST_LONGOPTS): Add emit-stub-syms.
+ (PARSE_AND_LIST_OPTIONS): Document.
+ (PARSE_AND_LIST_ARGS_CASES): Handle.
+
+2003-06-05 Roland McGrath <roland@redhat.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_list_options): Remove
+ extra \t in -z noexecstack line.
+
+2003-05-23 Jakub Jelinek <jakub@redhat.com>
+
+ * ldgram.y (phdr_type): Grok PT_GNU_STACK.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_handle_option): Add
+ -z execstack and -z noexecstack.
+ (gld${EMULATION_NAME}_list_options): Likewise.
+ * scripttempl/elf.sc: If not -r, discard .note.GNU-stack section.
+
+2003-06-03 Michael Snyder <msnyder@redhat.com>
+ and Bernd Schmidt <bernds@redhat.com>
+ and Alexandre Oliva <aoliva@redhat.com>
+
+ * Makefile.am: Add new emulations for h8300sx.
+ * Makefile.in: Regenerate.
+ * configure.tgt: Add new emulations.
+ * emulparams/h8300sx.sh: New emulation.
+ * emulparams/h8300sxelf.sh: Ditto.
+ * scripttempl/h8300sx.sc: Ditto.
+
+2003-06-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ldmisc.c: Include "bfdlink.h".
+ (error_handler): Handle LD_DEFINITION_IN_DISCARDED_SECTION
+ and -LD_DEFINITION_IN_DISCARDED_SECTION.
+
+ * Makefile.am: Rebuild dependency.
+ * Makefile.in: Regenerated.
+
+2003-06-03 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * emulparams/shlelf_linux.sh (GENERATE_PIE_SCRIPT): Set to yes.
+ * emulparams/shlelf32_linux.sh (GENERATE_PIE_SCRIPT): Likewize.
+
+2003-06-02 Fabrizio Gennari <fabrizio.ge@tiscalinet.it>
+
+ * pe-dll.c (fill_edata): Scan table pe_dll->exports, which is
+ sorted alphabetically, instead of exported_symbols, which is
+ sorted by ordinal.
+
+2003-05-30 Ulrich Drepper <drepper@redhat.com>
+ Jakub Jelinek <jakub@redhat.com>
+
+ * lexsup.c (OPTION_PIE): Define.
+ (ld_options): Add -pie and --pic-executable options.
+ (parse_args): Handle OPTION_PIE.
+ * ldmain.c (main): Initialize link_info.pie and
+ link_info.executable.
+ * genscripts.sh: Generate PIE scripts.
+ * ld.texinfo: Document -pie and --pic-executable options.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_after_open):
+ (gld${EMULATION_NAME}_place_orphan): Likewise.
+ (gld${EMULATION_NAME}_get_script): Include PIE scripts.
+ * scripttempl/elf.sc: In PIE scripts set . the same way as in
+ shared scripts.
+ * emulparams/elf_i386.sh (GENERATE_PIE_SCRIPT): Set to yes.
+ * emulparams/elf64_ia64.sh (GENERATE_PIE_SCRIPT): Likewise.
+ * emulparams/elf32ppc.sh (GENERATE_PIE_SCRIPT): Likewise.
+ * emulparams/elf64ppc.sh (GENERATE_PIE_SCRIPT): Likewise.
+ * emulparams/elf_x86_64.sh (GENERATE_PIE_SCRIPT): Likewise.
+ * emulparams/elf_s390.sh (GENERATE_PIE_SCRIPT): Likewise.
+ * emulparams/elf32_sparc.sh (GENERATE_PIE_SCRIPT): Likewise.
+ * emulparams/elf64_sparc.sh (GENERATE_PIE_SCRIPT): Likewise.
+ * emulparams/elf64alpha.sh (GENERATE_PIE_SCRIPT): Likewise.
+ * emulparams/elf64_s390.sh (GENERATE_PIE_SCRIPT): Likewise.
+ * emulparams/elf_i386.sh (GENERATE_PIE_SCRIPT): Likewise.
+
+2003-05-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * genscripts.sh: Create tmpdir/libpath.exp.
+
+2003-05-30 Nick Clifton <nickc@redhat.com>
+
+ * emultempl/armelf.em (arm_elf_before_allocation): Replace ASSERT
+ with a test for a NULL bfd_for_interworking.
+
+2003-05-29 Jason Thorpe <thorpej@wasabisystems.com>
+
+ * configure.host (*-*-netbsd*): Set HOSTING_CRT0 and HOSTING_LIBS
+ correctly for more recent versions of NetBSD.
+ (alpha*-*-netbsd*): Remove.
+ (i[3-7]86-*-netbsd*): Remove.
+
+2003-05-29 Nick Clifton <nickc@redhat.com>
+
+ * emultempl/pe.em: Include "safe-ctype.h" instead of <ctype.h>.
+
+2003-05-26 Maciej W. Rozycki <macro@ds2.pg.gda.pl>
+
+ * emulparams/elf64btsmip.sh: Set TEXT_START_ADDR to 0x120000000 to
+ trap on pointer crops.
+
+2003-05-21 Marcus Comstedt <marcus@mc.pp.se>
+
+ * configure.tgt: Check for a target triplet of shl-...-netbsdelf
+ as well as shle-...-netbsdelf.
+
+2003-05-16 Kelley Cook <kelleycook@wideopenwest.com>
+
+ * configure.host: Accept i[3-7]86 variants.
+ * configure.tgt: Likewise.
+
+2003-05-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * emulparams/elf64_ia64.sh: Don't set COMMONPAGESIZE for now.
+
+2003-05-09 Daniel Jacobowitz <drow@mvista.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add earmelfb.o and earmelfb_linux.o.
+ (earmelfb.c, earmelfb_linux.c): New rules.
+ * Makefile.in: Regenerated.
+ * emulparams/armelfb.sh, emulparams/armelfb_linux.sh: New files.
+ * configure.tgt: Add armeb-elf and arm*b-*-linux-gnu.
+
+2003-05-09 Nick Clifton <nickc@redhat.com>
+
+ * ldlang.c (lang_size_sections_1): Default to generating a
+ fatal error message if a loadable section is not allocated
+ to a memory region when regions are defined.
+
+2003-05-09 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am (em68hc11elf.c): Correct dependencies.
+ (em68hc11elfb.c, em68hc12elf.c, em68hc12elfb.c): Likewise.
+ * Makefile.in: Regenerate.
+ * emultempl/elf32.em (find_exp_assignment): Adjust for changed
+ bfd_elf_record_link_assignment name.
+
+2003-05-07 Alexandre Oliva <aoliva@redhat.com>
+
+ * ldmain.h (overflow_cutoff_limit): Declare.
+ * ldmain.c (overflow_cutoff_limit): Define, initialized to 10.
+ (reloc_overflow): Limit error messages based on it.
+ * lexsup.c (parse_args) <OPTION_VERBOSE>: Set cutoff to
+ unlimited.
+
+2003-05-05 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlex.l: Accept C style comments in version scripts.
+
+2003-04-28 H.J. Lu <hjl@gnu.org>
+
+ * ldlang.c (lang_process): Add the relax finalize pass.
+
+ * ldmain.c (main): Initialize link_info.relax_finalizing to
+ FALSE.
+
+2003-04-24 Roland McGrath <roland@redhat.com>
+
+ * ldgram.y (phdr_type): Grok PT_TLS and PT_GNU_EH_FRAME names.
+ If a name string is unknown, give an error rather than crashing later.
+
+2003-04-23 Dhananjay Deshpande <dhananjayd@kpitcummins.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add eh8300hn.o, eh8300sn.o,
+ eh8300hnelf.o, eh8300snelf.o and respective rules.
+ * Makefile.in: Regenerate.
+ * configure.tgt: Add h8300hn, h8300sn, h8300hnelf, h8300snelf
+ * emulparams/h8300hn.sh: New
+ * emulparams/h8300sn.sh: New
+ * emulparams/h8300hnelf.sh: New
+ * emulparams/h8300snelf.sh: New
+ * scripttempl/h8300hn.sc: new
+ * scripttempl/h8300sn.sc: new
+
+2003-04-23 H.J. Lu <hjl@gnu.org>
+
+ * ldmain.c (link_callbacks): Initialize error_handler.
+
+ * ldmisc.c (error_handler): New function.
+
+ * ldmisc.h (error_handler): New prototype.
+
+2003-04-21 Stephane Carrez <stcarrez@nerim.fr>
+
+ * emulparams/m68hc11elf.sh: Use m68hc1xelf.em extra.
+ * emulparams/m68hc11elfb.sh: Likewise.
+ * emulparams/m68hc12elf.sh: Likewise.
+ * emulparams/m68hc12elfb.sh: Likewise.
+
+2003-04-19 Stephane Carrez <stcarrez@nerim.fr>
+
+ * emultempl/m68hc1xelf.em: New file to generate far trampolines on
+ 68HC11 and 68HC12.
+ (LDEMUL_BEFORE_ALLOCATION): Override to gather the trampolines to
+ generate.
+ (LDEMUL_FINISH): Override to generate the trampolines after gc and
+ linker relaxation.
+ (LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS): Override to create the
+ stub file for trampolines.
+ (PARSE_AND_LIST_OPTIONS, PARSE_AND_LIST_LONGOPTS): New options
+ --no-trampoline and --bank-window to control the memory bank window.
+
+2003-04-18 H.J. Lu <hjl@gnu.org>
+
+ * ldfile.c (ldfile_add_library_path): Remove the unused
+ variable.
+
+2003-04-18 Andrew Haley <aph@cambridge.redhat.com>
+
+ * scripttempl/xstormy16.sc (__data, __rdata): New.
+
+2003-04-16 Nick Clifton <nickc@redhat.com>
+
+ * scripttempl/xstormy16.sc: Add .jcr section mapping.
+
+2003-04-15 H.J. Lu <hjl@gnu.org>
+
+ From Debian by Jack Howarth <howarth@nitro.med.uc.edu>:
+
+ * ldlex.l: Use YY_CURRENT_BUFFER instead of yy_current_buffer.
+
+2003-04-15 Rohit Kumar Srivastava <rohits@kpitcummins.com>
+
+ * h8-doc.texi: Replace occurrances of 'Hitachi' with 'Renesas'.
+ * ld.texinfo: Likewise.
+
+2003-04-14 Alan Modra <amodra@bigpond.net.au>
+
+ From Prashanth Tamraparni <prashanth_t@in.ibm.com>
+ * scripttempl/elf.sc (CTOR): Handle crtbeginS.o, crtendS.o and
+ other variants of crtbegin.o, crtend.o.
+ (DTOR): Likewise.
+ * scripttempl/crisaout.sc (ctors, dtors): Likewise.
+ * scripttempl/elf_chaos.sc (CTOR, DTOR): Likewise.
+ * scripttempl/elfd10v.sc (CTOR, DTOR): Likewise.
+ * scripttempl/elfd30v.sc (CTOR, DTOR): Likewise.
+ * scripttempl/elfxtensa.sc (CTOR, DTOR): Likewise.
+ * scripttempl/iq2000.sc (CTOR, DTOR): Likewise.
+ * scripttempl/mmo.sc (ctors, dtors): Likewise.
+ * scripttempl/xstormy16.sc (CTOR, DTOR): Likewise.
+
+2003-04-09 Dmitry Diky <diwil@mail.ru>
+
+ * scripttempl/elf32msp430.sc: Add initX, finiX, ctors, dtors
+ sections to respect C++ constructor/destructor. Add ctors/dtors
+ start/stop definitions.
+ * scripttempl/elf32msp430_3.sc: Likewise.
+
+2003-04-06 Nick Clifton <nickc@redhat.com>
+
+ * ld.texinfo (Options): Add a reminder of the target specific
+ nature to the description of the i386 PE specific options, for
+ readers who have not read all the way through the manual.
+
+2003-04-04 Svein E. Seldal <Svein.Seldal@solidas.com>
+
+ * configure.tgt: Fixed bug in list of targ_extra_emuls.
+ * emulparams/tic3xcoff.sh (SCRIPT_NAME): Namespace
+ cleanup. Replace s/c4x/tic4x and s/c3x/tic3x/
+ * emulparams/tic3xcoff_onchip.sh: Ditto
+ * emulparams/tic4xcoff.sh: Ditto
+ * scripttempl/tic4xcoff.sc: Ditto
+
+2003-04-03 Nick Clifton <nickc@redhat.com>
+
+ * NEWS: Mention support for Xtensa architecture.
+
+2003-04-02 Nick Clifton <nickc@redhat.com>
+
+ * pe-dll.c (pe_detail_list): arm-pe targets use underscores.
+
+2003-04-01 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_after_open):
+ Don't call pe_dll_build_section() if link_info.relocateable.
+ (gld_${EMULATION_NAME}_finish): Don't call pe_dll_fill_sections()
+ if link_info.relocateable.
+
+2003-04-01 Fabrizio Gennari <fabrizio.ge@tiscalinet.it>
+
+ * pe-dll.c (process_def_file): Don't create an export
+ section if there are no exports and we're building an exe
+ (pe_dll_build_sections): Ditto
+ (pe_dll_fill_sections): Conditionalize setting
+ abfd->dll true on info->shared
+ * emultempl/pe.em (gld_${EMULATION_NAME}_after_open):
+ If i386pe or armpe, call pe_dll_build_section()
+ for both exe's and dll's, not just dll's.
+ (gld_${EMULATION_NAME}_finish): For all targets except
+ shpe and mipspe, call pe_dll_fill_sections() for both
+ exe's and dll's, not just dll's.
+
+2003-04-02 Bob Wilson <bob.wilson@acm.org>
+
+ * emulparams/xtensa-config.sh: Remove comment indicating that this is
+ a generated file.
+
+2003-04-01 Bob Wilson <bob.wilson@acm.org>
+
+ * Makefile.am (ALL_EMULATIONS): Add eelf32xtensa.o.
+ (eelf32xtensa.c): New target.
+ * Makefile.in: Regenerate.
+ * configure.tgt: Handle xtensa-*-*.
+ * gen-doc.texi: Set XTENSA variable.
+ * ld.texinfo: Set XTENSA variable. Add new Xtensa node.
+ * emulparams/elf32xtensa.sh: New file.
+ * emulparams/xtensa-config.sh: Likewise.
+ * emultempl/xtensaelf.em: Likewise.
+ * scripttempl/elfxtensa.sc: Likewise.
+
+2003-04-01 Jakub Jelinek <jakub@redhat.com>
+
+ * configure.tgt (powerpc*-*-linux*): Add elf32ppc to ppc64
+ targ_extra_libpath. Add elf64ppc to ppc targ_extra_libpath
+ if --enable-64-bit-bfd.
+
+2003-04-01 Nick Clifton <nickc@redhat.com>
+
+ * emulparams/armelf.sh (OTHER_READONLY_SECTIONS): Change name of
+ note section.
+ * emulparams/armelf_linux.sh (OTHER_READONLY_SECTIONS): Change
+ name of note section.
+
+2003-03-31 Alexandre Oliva <aoliva@redhat.com>
+
+ * ld.texinfo (-Tbss, -Tdata, -Ttext): Document in terms of
+ --section-start.
+
+2003-03-31 David Heine <dlheine@suif.stanford.edu>
+
+ * ldfile.c (ldfile_add_library_path): Always allocate space for
+ the filename.
+ * ldlang.c (lang_register_vers_node): Free the node if it cannot
+ be used.
+ * ldmain.c (set_scripts_dir): Always free the constructed
+ directory name.
+ (add_keepsyms_file): Fix memory leak.
+ * ldmisc.c (vfinfo): Likewise.
+ * lexsup.c (parse_args): Likewise.
+
+2003-03-25 Stan Cox <scox@redhat.com>
+ Nick Clifton <nickc@redhat.com>
+
+ Contribute support for Intel's iWMMXt chip - an ARM variant:
+
+ * emulparams/armelf.sh (OTHER_READONLY_SECTIONS): Define.
+ * emulparams/armelf_linux.sh (OTHER_READONLY_SECTIONS): Define.
+ * scripttempl/armcoff.sc (.data): Ensure 8 byte alignment.
+ (.bss): Likewise.
+
+2003-03-25 Alexandre Oliva <aoliva@redhat.com>
+
+ * ldmain.h (ld_canon_sysroot, ld_canon_sysroot_len): Declare.
+ * ldmain.c (ld_canon_sysroot, ld_canon_sysroot_len): Define.
+ (main): Initialize them.
+ * ldfile.c: Include pathnames.h.
+ (is_sysrooted_pathname): New.
+ (ldfile_add_library_path): Use it.
+ (ldfile_open_file_search): Likewise. Use IS_ABSOLUTE_PATH. Don't
+ search_dirs if given an absolute pathname.
+ (ldfile_open_file): Issue error message for sysrooted
+ absolute pathnames.
+ * Makefile.am: Updated dependencies.
+ * Makefile.in: Rebuild.
+
+2003-03-24 Daniel Néri <dne@mayonnaise.net>
+
+ * ld.texinfo: Rename all occurances of C54X to TIC54X.
+
+2003-03-19 Andreas Schwab <schwab@suse.de>
+
+ * ldfile.c (ldfile_try_open_bfd): Pop lexer start condition after
+ eof.
+
+2003-03-18 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * deffilep.y (opt_base): If no number given, set to default
+ (-1), not 0.
+
+2003-03-13 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * deffilep.y (def_import): Use default extension of "dll"
+ if no extension provided in parsed IMPORT definition.
+
+ * deffilep.y (def_lex): Revert 2003-03-12 change.
+ (dot_name): New id type and rule.
+ (expline): Use instead of ID.
+ (opt_equal_name): Likewise.
+
+2003-03-12 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * deffilep.y (def_lex): Accept '.' as valid non-lead char.
+
+2003-03-07 Christopher Faylor <cgf@redhat.com>
+
+ * configure.tgt: Add NATIVE_LIB_DIRS for cygwin target back after
+ apparent accidental removal on 2003-01-06.
+
+2003-03-04 Dmitry Diky <diwil@mail.ru>
+
+ * Makefile.am: Add new devices x1122 x1132 emulation
+ * configure.tgt: Likewise.
+ * Makefile.in: Regenerate.
+ * emulparams/msp430x1122.sh: New file.
+ * emulparams/msp430x1132.sh: New file.
+
+2003-03-03 Alexandre Oliva <aoliva@redhat.com>
+
+ * ldmain.c (set_scripts_dir): Look for relative to TOOLBINDIR as
+ well.
+
+ * ldfile.h (struct search_dirs): Added sysrooted field.
+ * ldlang.h (struct lang_input_statement_struct): Likewise.
+ * ldfile.c (ldfile_add_library_path): Mark sysrooted paths.
+ (ldfile_open_file_search): Look for sysrooted filename starting
+ with / in ld_sysroot instead of in the current directory. Clear
+ sysrooted flag if it's found in the current directory. Set it
+ from the search directory's sysrooted flag where it is found
+ otherwise.
+ * ldlang.c (ldlang_sysrooted_script): New static variable.
+ (new_afile): Mark search_file_enums as sysrooted if
+ ldlang_sysrooted_script.
+ (load_symbols): Set ldlang_sysrooted_script according to the
+ script's sysrooted field while processing it.
+ * ld.texinfo: Document INPUT behavior in sysroot.
+
+2003-03-02 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * scripttempl/pe.sc: Use PROVIDE with etext, end, _end,
+
+2003-03-03 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/elf64alpha.sh (EXTRA_EM_FILE): Define.
+ (PARSE_AND_LIST_PROLOGUE, PARSE_AND_LIST_LONGOPTS,
+ PARSE_AND_LIST_OPTIONS, PARSE_AND_LIST_ARGS_CASES,
+ PARSE_AND_LIST_EPILOGUE): Don't define.
+ * emultempl/alphaelf.em: New file.
+
+2003-03-01 Alan Modra <amodra@bigpond.net.au>
+
+ * ldemul.c: Include getopt.h.
+ * emultempl/elf32.em: Include getopt.h earlier.
+ * emultempl/ticoff.em: Likewise.
+
+2003-02-28 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_get_script): Add combreloc
+ support when scripts read from files.
+
+2003-02-28 Alan Modra <amodra@bigpond.net.au>
+
+ * ldemul.c (ldemul_parse_args): Return FALSE by default.
+ * ldemul.h (struct ld_emulation_xfer_struct): Update parse_args
+ comment.
+
+ * ldemul.c (ldemul_add_options, ldemul_handle_option): New functions.
+ (ldemul_parse_args): Return bfd_boolean. Formatting.
+ * ldemul.h (ldemul_add_options, ldemul_handle_option): Declare.
+ (ldemul_parse_args): Adjust.
+ (struct ld_emulation_xfer_struct): Add add_options and handle_option.
+ Return bfd_boolean from parse_args.
+ * lexsup.c (parse_args): Malloc shortopts, longopts and
+ really_longopts. Call ldemul_add_options and ldemul_handle_option.
+ * emultempl/aix.em (gld${EMULATION_NAME}_add_options): Split out from
+ gld${EMULATION_NAME}_parse_args.
+ (gld${EMULATION_NAME}_handle_option): Likewise.
+ (ld_${EMULATION_NAME}_emulation): Adjust initializer.
+ * emultempl/armcoff.em: As for aix.em, but remove parse_args.
+ * emultempl/beos.em: Likewise.
+ * emultempl/pe.em: Likewise.
+ * emultempl/ticoff.em: Likewise.
+ * emultempl/elf32.em: Likewise. Don't duplicate long options either.
+ (gld${EMULATION_NAME}_add_sysroot): Prototype.
+ * emultempl/armelf.em (PARSE_AND_LIST_LONGOPTS): Don't duplicate
+ options.
+ * emultempl/hppaelf.em (PARSE_AND_LIST_LONGOPTS): Likewise.
+ * emultempl/ppc32elf.em (PARSE_AND_LIST_LONGOPTS): Likewise.
+ * emultempl/ppc64elf.em (PARSE_AND_LIST_LONGOPTS): Likewise.
+ * emultempl/armelf_oabi.em (ld_${EMULATION_NAME}_emulation): Adjust
+ initializer.
+ * emultempl/generic.em: Likewise.
+ * emultempl/gld960.em: Likewise.
+ * emultempl/gld960c.em: Likewise.
+ * emultempl/linux.em: Likewise.
+ * emultempl/lnk960.em: Likewise.
+ * emultempl/m68kcoff.em: Likewise.
+ * emultempl/mipsecoff.em: Likewise.
+ * emultempl/sunos.em: Likewise.
+ * emultempl/vanilla.em: Likewise.
+ * emultempl/netbsd.em (gldnetbsd_before_parse): Prototype.
+
+2003-02-25 Alexandre Oliva <aoliva@redhat.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_add_sysroot): Fix
+ memory allocation error.
+
+ * Makefile.am (ldmain.o): Define TOOLBINDIR.
+ * Makefile.in: Rebuilt.
+ * ldmain.c (ld_sysroot): Try to set from TOOLBINDIR too.
+
+2003-02-21 Bob Wilson <bob.wilson@acm.org>
+
+ * ldlang.c (lang_size_sections_1): Add CHECK_REGIONS argument and only
+ call os_region_check when it is set.
+ (lang_size_sections): Add CHECK_REGIONS argument and pass it through to
+ lang_size_sections_1.
+ (lang_process): Change lang_size_sections calls to set CHECK_REGIONS
+ only for the last call, not on every relaxation iteration.
+ * ldlang.h (lang_size_sections): Update prototype.
+ * pe-dll.c (pe_dll_fill_sections): Set CHECK_REGIONS argument in calls
+ to lang_size_sections.
+ (pe_exe_fill_sections): Likewise.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_finish): Likewise.
+ * emultempl/hppaelf.em (hppaelf_layout_sections_again): Likewise.
+ * emultempl/ppc64elf.em (ppc_before_allocation): Likewise.
+ (ppc_layout_sections_again): Likewise.
+
+2003-02-21 Bob Wilson <bob.wilson@acm.org>
+
+ * gen-doc.texi: Set ARM and HPPA variables.
+ * ld.texinfo: Fix typos and obvious texinfo mistakes. Make section
+ title capitalization more consistent. Add missing menu entries for
+ machine-specific sections and conditionalize them consistently.
+ Conditionalize text that is irrelevant when SingleFormat is set.
+ Add @group divisions to improve page breaks in long examples.
+ Use @iftex/@ifnottex instead of @iftex/@ifinfo so that HTML output
+ is correct. Remove "FIXME" comment about not using
+ @raisesections/@lowersections. Use @raisesections/@lowersections
+ consistently for machine-specific sections. Change to be more polite
+ about poor bug reports. Replace FDL appendix with include of fdl.texi.
+ Move WIN32 node to match its order in the menus.
+ * fdl.texi: New file.
+
+2003-02-20 Alexandre Oliva <aoliva@redhat.com>
+
+ * configure.in (TARGET_SYSTEM_ROOT): Set default to
+ ${exec_prefix}/${target_alias}/sys-root. Match explicit
+ '${exec_prefix}' (in addition to the expansion thereof) as
+ relocatable.
+ * configure: Rebuilt.
+
+2003-02-20 Phil Edwards <pme@gcc.gnu.org>
+
+ * ldgram.y (vers_defns): Also recurse with 'EXTERN NAME' patterns.
+
+2003-02-20 Harri Porten <porten@kde.org>
+
+ * ldgram.y (vers_defns): Allow optional trailing semicolon in
+ EXTERN NAME block;
+
+2003-02-18 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc32elf.em: New file.
+ * emulparams/elf32ppc.sh (EXTRA_EM_FILE): Define.
+ * Makefile.am (eelf32lppc.c): Depend on emultempl/ppc32elf.em.
+ (eelf32lppcnto.c): Likewise.
+ (eelf32lppcsim.c): Likewise.
+ (eelf32ppcnto.c): Likewise.
+ (eelf32ppc.c): Likewise.
+ (eelf32ppc_fbsd.c): Likewise.
+ (eelf32ppcsim.c): Likewise.
+ (eelf32ppclinux.c): Likewise.
+ * Makefile.in: Regenerate.
+
+2003-02-18 Alan Modra <amodra@bigpond.net.au>
+
+ * ld.texinfo: Remove spaces between @samp and opening brace.
+
+2003-02-18 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc64elf.em (ppc_create_output_section_statements): Check
+ hash creator.
+ (ppc_before_allocation): Don't do optimizations if wrong hash table.
+ (gld${EMULATION_NAME}_finish): Ditto.
+
+2003-02-17 Nick Clifton <nickc@redhat.com>
+
+ * ldmain.c (main) Default allow_shlib_undefined to true.
+ * lexsup.c (ld_options): Add --no-allow-shlib-undefined.
+ (parse_args): Parse the new switch.
+ * ld.texinfo: Document new switch and default behaviour of
+ allowing undefined symbols in shared libraries.
+
+2003-02-11 Dmitry Diky <diwil@mail.ru>
+
+ * scripttempl/elf32msp430.sc: Add new data anchors definitions.
+ * scripttempl/elf32msp430_3.sc: Likewise.
+
+2003-02-11 Uwe Stieber <uwe@wwws.de>
+
+ * configure.tgt: Add support for kaOS as cross build target
+ system.
+
+2003-02-10 John Daivid Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ * hppaelf.em (group_size): Change default back to 1.
+
+2003-02-09 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc64elf.em: Add "no-tls-optimize" option and support code.
+
+2003-02-07 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ * hppaelf.em (group_size): Change default to -1.
+
+2003-02-07 Nick Clifton <nickc@redhat.com>
+
+ * emultempl/armelf.em (PARSE_AND_LIST_SHORTOPTS): Remove 'n' short
+ opt.
+ (PARSE_AND_LIST_LONGOPTS): Add duplicate entry for
+ no-pipeline-knowledge. This will prevent the getopt package from
+ thinking that there are any shorter abbreviations for
+ --no-pipeline-knowledge.
+
+2003-02-07 Jakub Jelinek <jakub@redhat.com>
+
+ * genscripts.sh (LIB_PATH): Don't append LIBPATH_SUFFIX to paths
+ which already have it. Avoid duplicates.
+
+2003-02-06 Jakub Jelinek <jakub@redhat.com>
+
+ * emulparams/elf64_s390.sh (LIBPATH_SUFFIX): Set to 64.
+ * emulparams/elf_x86_64.sh (LIBPATH_SUFFIX): Likewise.
+ * emulparams/elf64_sparc.sh (LIBPATH_SUFFIX): Set instead of suffix.
+
+2003-02-05 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc64elf.em (ppc_before_allocation): Size sections then
+ call ppc64_elf_tls_optimize.
+
+2003-02-03 Daniel Jacobowitz <drow@mvista.com>
+
+ * emultempl/elf32.em: Move gld${EMULATION_NAME}_add_sysroot
+ outside of GNU/Linux conditional.
+
+2003-01-28 Ralf Habacker <ralf.habacker@freenet.de>
+
+ * deffilep.y (def_get_module): New function: locate an already
+ added module.
+ * deffile.h (def_get_module): New prototype.
+ * pe-dll.c (pe_implied_import_dll): Add code to prevent importing
+ a dll multiple times.
+
+2003-01-23 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/sh64elf.em: Include elf32-sh64.h.
+ (sh64_elf_${EMULATION_NAME}_before_allocation): Adjust for changed
+ sh64_elf_section_data.
+ (sh64_elf_${EMULATION_NAME}_after_allocation): Likewise.
+
+2003-01-23 Wu Yongwei <adah@netstd.com>
+
+ * ld.texinfo: Remove an extra "i" in --dll-search-prefix.
+ * emultempl/pe.em (gld_${EMULATION_NAME}_list_options): Move a
+ cross-80th-column-margin "an" to the next line.
+
+2003-01-21 Nick Clifton <nickc@redhat.com>
+
+ * emulparams/tic3xcoff-onchip.sh: Rename to ...z
+ * emulparams/tic3xcoff_onchip.sh: ...this.
+ * Makefile.am (etic3xcoff_onchip.c): Fix name of generated C file.
+ * Makefile.in: Regenerate.
+
+2003-01-21 Fabio Alemagna <falemagn@aros.org>
+
+ * configure.tgt: Handle i[3456]86-*-aros*
+
+2003-01-19 Svein E. Seldal <Svein.Seldal@solidas.com>
+
+ * Makefile.am: Added etic3xcoff.o and etic4xcoff_onchip.o
+ * Makefile.in: Regenerate
+ * configure.tgt: Added extra target emulations
+ * emulparams/tic3xcoff.sh: Remove old settings
+ * emulparams/tic4xcoff.sh: Ditto
+ * emulparams/tic3xcoff-onchip.sh: Added new
+ * scripttempl/tic4xcoff.sc: Revise and combine both c3x and c4x
+ * scripttempl/tic3xcoff.sc: Remove
+
+2003-01-17 Andreas Jaeger <aj@suse.de>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_add_sysroot): Do not
+ skip ':'.
+
+2003-01-16 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.in: Regenerate.
+
+2003-01-14 Charles Wilson <cwilson@ece.gatech.edu>
+
+ * ld.texinfo (node WIN32): Some clarifications
+ and formatting fixups.
+
+2003-01-09 Chris Demetriou <cgd@broadcom.com>
+
+ * ldmain.c (get_emulation): Sort -mipsNN checks in the usual
+ order, and handle (ignore) -mips32r2.
+
+2003-01-09 Daniel Jacobowitz <drow@mvista.com>
+
+ * ldmain.c (main): Make sure ld_sysroot is initialized.
+
+2003-01-06 Daniel Jacobowitz <drow@mvista.com>
+
+ * Makefile.am (eelf32iq10.c): Fix tab/whitespace mixup.
+
+ * Makefile.am (ldmain.o): Add @TARGET_SYSTEM_ROOT_DEFINE@.
+ (GENSCRIPTS): Add @use_sysroot@.
+ * Makefile.in: Regenerated.
+ * configure.host: Move setting of NATIVE_LIB_DIRS to...
+ * configure.tgt: ... here. Use ${target} instead of ${host}
+ for NATIVE_LIB_DIRS.
+ * configure.in: Add --with-sysroot.
+ * configure: Regenerated.
+ * genscripts.sh: Accept use_sysroot option. Set new variables
+ NATIVE and USE_LIBPATH. Prepend "=" to directory names if
+ $use_sysroot. Don't search $tool_lib if $use_sysroot.
+ * ldfile.c (ldfile_add_library_path): Handle leading '='.
+ * ldmain.c (TARGET_SYSTEM_ROOT): Define if not defined.
+ (ld_sysroot): New variable.
+ (main): Initialize ld_sysroot.
+ * ldmain.h (ld_sysroot): New extern.
+ * emultempl/elf32.em: Use NATIVE and USE_LIBPATH instead of
+ searching $EMULATION_LIBPATH.
+ (gld${EMULATION_NAME}_add_sysroot): New function.
+ (gld${EMULATION_NAME}_check_ld_so_conf): Use it. Honor ld_sysroot.
+ (gld${EMULATION_NAME}_after_open): Likewise. Only search
+ environment variables if $NATIVE.
+ * ld.texinfo (Options): Mention "=" prefix in the description of -L.
+ * NEWS: Mention --with-sysroot.
+
+ * emulparams/elf32bmipn32-defs.sh: Set NATIVE and LIBPATH_SUFFIX
+ instead of setting LIB_PATH.
+ * emulparams/elf32ppc.sh: Likewise.
+ * emulparams/elf64_s390.sh: Likewise.
+ * emulparams/elf64_sparc.sh: Likewise.
+ * emulparams/elf64ppc.sh: Likewise.
+ * emulparams/elf_x86_64.sh: Likewise.
+
+ * emulparams/elf64_aix.sh: Add "=" prefixes to LIB_PATH.
+ * emulparams/elf64hppa.sh: Add "=" prefixes to LIB_PATH.
+
+2003-01-03 Charles Wilson <cwilson@ece.gatech.edu>
+
+ * pe-dll.c (autofilter_symbollist): Add cygwin_crt0.
+
+2003-01-04 Daniel Jacobowitz <drow@mvista.com>
+
+ * Makefile.am (ldmain.o): Pass BINDIR.
+ * Makefile.in: Regenerated.
+ * ldmain.c (set_scripts_dir): Use make_relative_prefix for the first
+ search path.
+
+2003-01-02 Ben Elliston <bje@redhat.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add eelf32iq2000.o.
+ (eelf32iq2000.c): New target.
+ * Makefile.in: Regenerate.
+ * configure.tgt: Handle iq2000-*-elf.
+ * emulparams/elf32iq10.sh: New file.
+ * emulparams/elf32iq2000.sh: New file.
+ * scripttempl/iq2000.sc: New file.
+
+2003-01-02 Charles Wilson <cwilson@ece.gatech.edu>
+
+ * pe-dll.c (autofilter_symbollist): Add do_pseudo_reloc
+ and _pei386_runtime_relocator to the exclude list.
+
+2003-01-01 Kazu Hirata <kazu@cs.umass.edu>
+
+ * ldfile.c: Fix comment typos.
+ * ldlang.c: Likewise.
+ * mri.c: Likewise.
+ * pe-dll.c: Likewise.
+
+2003-01-01 Daniel Jacobowitz <drow@mvista.com>
+
+ Suggested by Manfred Hollstein <manfred.h@gmx.net>:
+ * Makefile.am (ld.1): Depend on configdoc.texi
+ and ldver.texi.
+ * Makefile.in: Regenerated.
+
+2002-12-24 Dmitry Diky <diwil@mail.ru>
+
+ * Makefile.am: Add msp430 target.
+ * configure.tgt: Likewise.
+ * Makefile.in: Regenerate.
+ * emulparams/msp430x???.sh: New files. Linker script parameters
+ for various msp430 configurations.
+ * gen-doc.texi: Enable msp430 documenation.
+ * ld.texinfo: Document msp430 sections.
+ * scripttempl/elf32msp430.sc: New file. Linker script for msp430.
+ * scripttempl/elf32msp430_3.sc: New file. Linker script for msp430.
+
+2002-12-30 Ralf Habacker <Ralf.Habacker@freenet.de>
+ Charles Wilson <cwilson@ece.gatech.edu>
+
+ * config.in (HAVE_REALPATH): New entry.
+ (HAVE_SYS_STAT_H, HAVE_SYS_TYPES_H): Removed: obsolete.
+
+2002-12-30 Ralf Habacker <ralf.habacker@freenet.de>
+
+ * ld.texinfo: New win32 topics: 'symbol aliasing' and 'export dll
+ symbols'.
+
+2002-12-23 Alan Modra <amodra@bigpond.net.au>
+
+ * ldmain.c (main): Init "strip_discarded".
+ * lexsup.c (OPTION_STRIP_DISCARDED): Define.
+ (OPTION_NO_STRIP_DISCARDED): Define.
+ (ld_options): Add "strip-discarded" and "no-strip-discarded".
+ (parse_args): Handle them.
+
+2002-12-23 Nick Clifton <nickc@redhat.com>
+
+ * ld.h (struct args_type): Add new field
+ 'accept_unknown_input_architecture'.
+ * ldmain.c (main): Initialise 'accept_unknown_input_architecture'
+ to false.
+ * ldlang.c (lang_check): Pass accept_unknown_input_architecture to
+ bfd_arch_get_compatible.
+ * ldfile.c (ldfile_try_open_bfd): Likewise.
+ * lexsup.c (ld_options): Add new command line switch
+ --accept-unknown-input-architecture and its inverse.
+ (parse_args): Handle --accept-unknown-input-architecture.
+ * ld.texinfo: Document new linker option.
+ * NEWS: Mention new linker option.
+
+2002-12-20 Alan Modra <amodra@bigpond.net.au>
+
+ * ldmain.c (main): Re-order link_info initialization. Init all
+ fields.
+
+2002-12-19 Charles Wilson <cwilson@ece.gatech.edu>
+
+ * ld.texinfo: Clarify and extend the documentation
+ in the Machine Dependent, WIN32 section.
+
+2002-12-18 Ralf Habacker <ralf.habacker@freenet.de>
+
+ * ld.texinfo: Add win32 machine depending section.
+ * gen-doc.texi: Enable win32 machine depending section.
+
+ * configure.host: Add win32 library search path.
+
+2002-12-17 Ralf Habacker <ralf.habacker@freenet.de>
+
+ * emultempl/pe.em (pe_find_data_imports): Don't search for data
+ import when auto-import is disabled.
+
+2002-12-17 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * emultempl/pe.em (..._recognized_file): Use LD_PATHMAX+1 to
+ account for trailing '\0'.
+
+2002-12-17 Nick Clifton <nickc@redhat.com>
+
+ * emultempl/pe.em (longopts): Duplicate entry for --compact-implib
+ so that it is not confused with -c.
+
+2002-12-13 Ralf Habacker <Ralf.Habacker@freenet.de>
+ Charles Wilson <cwilson@ece.gatech.edu>
+
+ * configure.in: Add check for realpath function.
+ * configure: Regenerate.
+ * config.in: Regenerate.
+ * aclocal.m4: Regenerate.
+ * deffile.h: Add .data field to def_file_import
+ structure.
+ * pe-dll.c (pe_proces_import_defs): Use .data field of
+ def_file_import structure to initialize flag_data field of
+ def_file_export structure.
+ (pe_implied_import_dll): New variables exp_funcbase and
+ [data|bss]_[start|end]. Use DLL's internal name to set dll_name,
+ not filename (which may be a symlink). Scan the sections and
+ initialize [data|bss]_[start|end]. When scanning the export
+ table, skip _nm_ symbols, and mark any symbols whose rva indicates
+ that it is in the .bss or .data sections as data.
+ * sysdep.h: Include limits.h and sys/param.h, and define
+ LD_PATHMAX as appropriate. Also define REALPATH as realpath if it
+ exists, NULL otherwise.
+ * emultempl/pe.em (gld_${EMULATION_NAME}_after_open): Call
+ pe_process_import_defs before pe_find_data_imports, so that
+ auto-import will check the virtual implib as well as "real"
+ implibs.
+ (gld_${EMULATION_NAME}_recognized_file): Use REALPATH to follow
+ symlinks to their target; check that the target's extension is
+ .dll before calling pe_implied_import_dll(), not the filename
+ itself (which may be a symlink).
+
+2002-12-10 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf32.em (struct orphan_save): Add os_tail field.
+ (gld${EMULATION_NAME}_place_orphan): Re-order output_section_statement
+ list too.
+
+2002-12-08 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.h: Formatting.
+
+2002-12-07 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (init_os): Ensure sections mentioned in load_base
+ are initialized.
+
+2002-12-05 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Set
+ load_base for orphans that follow a section with load_base set.
+
+2002-12-01 H.J. Lu <hjl@gnu.org>
+
+ * ld.texinfo: Remove the extra `;' in sample version script.
+
+2002-11-30 Alan Modra <amodra@bigpond.net.au>
+
+ * configure.host: Correct dynamic-linker for powerpc64 hosts.
+
+ * Makefile.am (eelf32ppcwindiss.c): Correct dependencies.
+ * Makefile.in: Regenerate.
+
+ * ld.h, ldcref.c, ldctor.c, ldctor.h, ldemul.c, ldemul.h, ldexp.c,
+ ldexp.h, ldfile.c, ldfile.h, ldgram.y, ldlang.c, ldlang.h, ldmain.c,
+ ldmain.h, ldmisc.c, ldwrite.c, lexsup.c, mri.c, pe-dll.c, pe-dll.h,
+ emulparams/elf32b4300.sh, emultempl/aix.em, emultempl/armcoff.em,
+ emultempl/armelf.em, emultempl/armelf_oabi.em, emultempl/beos.em,
+ emultempl/elf32.em, emultempl/generic.em, emultempl/gld960.em,
+ emultempl/gld960c.em, emultempl/hppaelf.em, emultempl/linux.em,
+ emultempl/lnk960.em, emultempl/m68kcoff.em, emultempl/mipsecoff.em,
+ emultempl/mmix-elfnmmo.em, emultempl/mmixelf.em, emultempl/mmo.em,
+ emultempl/needrelax.em, emultempl/pe.em, emultempl/ppc64elf.em,
+ emultempl/sh64elf.em, emultempl/sunos.em, emultempl/ticoff.em: Replace
+ boolean with bfd_boolean, true with TRUE, false with FALSE. Simplify
+ comparisons of bfd_boolean vars with TRUE/FALSE. Formatting.
+
+2002-11-27 David O'Brien <obrien@FreeBSD.org>
+
+ * configure.host: Fix generic FreeBSD configuration entry.
+
+2002-11-27 H.J. Lu <hjl@gnu.org>
+
+ * ld.texinfo: Add the missing `;' to sample version scripts.
+
+2002-11-20 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/elf64ppc.sh (SEGMENT_SIZE): Don't define.
+
+2002-11-14 Egor Duda <deo@logos-m.ru>
+
+ * ldmain.c (main): Make runtime relocs disabled by default. Remove
+ assignment which has no effect.
+ * pe-dll.h (pe_create_import_fixup): Change prototype.
+ * pe-dll.c (make_runtime_pseudo_reloc): New function.
+ (pe_create_runtime_relocator_reference): Ditto.
+ (pe_create_import_fixup): Handle relocations with non-zero addends.
+ * emultempl/pe.em: Add options --enable-runtime-pseudo-reloc and
+ --disable-runtime-pseudo-reloc.
+ (make_import_fixup): Handle relocations with non-zero addends. Create
+ an external reference to _pei386_runtime_relocator symbol if at least
+ one pseudo reloc was created.
+ * ld.texinfo: Document --enable-runtime-pseudo-reloc and
+ --disable-runtime-pseudo-reloc options.
+
+2002-11-12 Earl Chew <earl_chew@agilent.com>
+
+ * ldlang.c (lang_add_section): Discard debugging sections that have
+ been marked SEC_EXCLUDE.
+
+2002-11-12 Nick Clifton <nickc@redhat.com>
+
+ * configure.in (ALL_LINGUAS): Add da.
+ * configure: Regenerate.
+ * po/da.po: New Danish translation.
+
+2002-11-12 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc64elf.em (ppc_before_allocation): New function.
+ (LDEMUL_BEFORE_ALLOCATION): Define.
+ (gld${EMULATION_NAME}_finish): Run discard_info for relocatable
+ linking.
+ * emultemp/hppaelf.em ((gld${EMULATION_NAME}_finish): Likewise.
+
+2002-11-11 Christopher Faylor <cgf@redhat.com>
+
+ * configure.tgt (LIB_PATH): Default to searching w32api directory under
+ cygwin.
+
+2002-11-11 Charles Wilson <cwilson@ece.gatech.edu>
+
+ * pe-dll.c (autofilter_liblist): add libmingwex and libgcj to the list
+ of restricted auto-export libs.
+
+2002-11-11 Charles Wilson <cwilson@ece.gatech.edu>
+
+ * pe-dll.c (autofilter_liblist): Generalize library names to catch more
+ creative library naming instances like, e.g., libstdc++-2.a.
+
+2002-11-06 Alexandre Oliva <aoliva@redhat.com>
+
+ * emulparams/elf32btsmipn32.sh (TEXT_DYNAMIC): Define.
+ * emulparams/elf64btsmip.sh (TEXT_DYNAMIC): Likewise.
+
+2002-11-07 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * deffilep.y (def_lex): Handle '@' as first character of an ID.
+ * pe-dll.c (auto-export): Filter on "_imp_" prefix, not "_imp__".
+ (make_one): Don't prefix decorated fastcall symbols with '_'.
+ (pe_process_import_defs): Likewise.
+ * emultempl/pe.em (pe_fixup_stdcalls): Don't fixup fastcall
+ symbols to cdecl names or vise-versa.
+
+2002-10-13 Eric Kohl <ekohl@rz-online.de>
+
+ * pe-dll.c (process_def_file): Handle fastcall symbols when
+ generating undecorated aliases. Don't prefix decorated fastcall
+ symbols with '_'.
+ (fill_exported_offsets): Don't prefix decorated fastcall symbols
+ with '_'.
+
+2002-10-29 Daniel Jacobowitz <drow@mvista.com>
+
+ * emultempl/aix.em: Use include <> for generated headers.
+ * emultempl/beos.em: Likewise.
+ * emultempl/elf32.em: Likewise.
+ * emultempl/pe.em: Likewise.
+ * ldctor.c: Likewise.
+ * ldexp.c: Likewise.
+ * ldfile.c: Likewise.
+ * ldlang.c: Likewise.
+ * ldlex.c: Likewise.
+ * ldlex.l: Likewise.
+ * ldmain.c: Likewise.
+ * ldmisc.c: Likewise.
+ * ldwrite.c: Likewise.
+ * lexsup.c: Likewise.
+ * mri.c: Likewise.
+ * pe-dll.c: Likewise.
+
+2002-10-23 Jakub Jelinek <jakub@redhat.com>
+
+ * emultempl/elf32.em (place_orphan): Don't put non-allocated .rel*
+ sections into .rel{,a}.dyn.
+
+2002-10-23 Nick Clifton <nickc@redhat.com>
+
+ * lexsup.c (OPTION_NO_OMAGIC): Define.
+ (ld_options): Add "no-omagic" option.
+ (parse_args): Parse --no-omagic.
+ * ld.texinfo: Document --no-omagic.
+ * NEWS: Mention new option.
+
+2002-10-21 Danny Smith <dannysmith@users.sourceforeg.net>
+
+ * scripttempl/pe.sc (__RUNTIME_PSEUDO_RELOC_LIST__,
+ __RUNTIME_PSEUDO_RELOC_LIST_END__): Add only when relocating.
+
+2002-10-22 Alexandre Oliva <aoliva@redhat.com>
+
+ * emulparams/elf32bmipn32-defs.sh: Set ELFSIZE according to
+ emulation name. Set LIB_PATH only for native tools, and
+ search the ABI-specific versions of NATIVE_LIB_DIRS before the
+ .../lib variants, not instead of them. Mostly copied from...
+ * emulparams/elf32ppc.sh: ... here. Fixed typo.
+ * emulparams/elf64bmip-defs.sh: Backed out.
+ * emulparams/elf64bmip.sh: Import elf32bmipn32-defs.sh again.
+ * emulparams/elf64btsmip.sh: Likewise.
+ (DATA_ADDR, NONPAGED_TEXT_START_ADDR, SHLIB_TEXT_START_ADDR,
+ TEXT_DYNAMIC): Removed.
+
+2002-10-17 Alexandre Oliva <aoliva@redhat.com>
+
+ * emulparams/elf32bmipn32-defs.sh (LIB_PATH): Set to /usr/lib32.
+ (GENERATE_SHLIB_SCRIPT): Set to yes.
+ (EXECUTABLE_SYMBOLS, WRITABLE_RODATA): Moved to...
+ * emulparams/elf32bmipn32.sh: here.
+ (GENERATE_SHLIB_SCRIPT): Deleted as redundant.
+ * emulparams/elf32btsmipn32.sh: Delete redundant unsets.
+ * emulparams/elf64bmip-defs.sh: New file. Extend
+ elf32bmipn32-defs.sh by overiding ELFSIZE and LIB_PATH.
+ * emulparams/elf64bmip.sh: Bring in definitions from
+ elf64bmip-defs.sh.
+ (ELFSIZE, GENERATE_SHLIB_SCRIPT, LIB_PATH): Delete redundant
+ settings.
+ (WRITABLE_RODATA): Moved from elf32bmipn32-defs.sh.
+ * emulparams/elf64btsmip.sh: Bring in definitions from
+ elf64bmip-defs.sh.
+ (ELFSIZE, GENERATE_SHLIB_SCRIPT): Delete, redundant.
+ (EXECUTABLE_SYMBOLS, WRITABLE_RODATA): Delete redundant unsets.
+
+2002-10-16 Jakub Jelinek <jakub@redhat.com>
+
+ * configure.tgt (s390x-*-linux*): Add elf_s390 emulation.
+ (s390-*-linux*): Add elf64_s390 emulation if want64.
+ * emulparams/elf64_sparc.sh (LIB_PATH): Update to match 2002-05-22
+ genscript.sh changes.
+ * emulparams/elf_x86_64.sh (LIB_PATH): Likewise.
+ * emulparams/elf64_s390.sh (LIB_PATH): Set up native 64 bit dirs.
+
+2002-10-15 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (load_symbols): Revert last change.
+
+2002-10-14 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (load_symbols): Don't call bfd_link_add_symbols when
+ just_syms_flag.
+ (lang_reasonable_defaults): Don't compare against false.
+ (size_input_section): Likewise.
+ (lang_size_sections_1): Likewise.
+ (lang_do_assignments): Likewise.
+ (lang_add_output): Likewise.
+
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+ * ldver.c: #include "bfdver.h".
+
+2002-10-13 Stephane Carrez <stcarrez@nerim.fr>
+
+ * scripttempl/elfm68hc11.sc: Use KEEP for .vectors, .installN,
+ .finiN section.
+ * scripttempl/elfm68hc12.sc: Likewise.
+
+2002-10-11 Alan Modra <amodra@bigpond.net.au>
+
+ * pe-dll.c (make_import_fixup_mark): Avoid type-punned pointer.
+
+ * ldgram.y (memory_spec): Provide empty action.
+ (section <NAME>): Likewise.
+
+2002-10-10 Jakub Jelinek <jakub@redhat.com>
+
+ * ldfile.c (ldfile_try_open_bfd): When searching skip linker scripts if
+ they have OUTPUT_FORMAT not matching actual output format.
+ * ldlang.c (lang_get_output_target): New function.
+ (open_output): Use it.
+ * ldlang.h (lang_get_output_target): New prototype.
+
+2002-10-10 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf32.em (output_rel_find): Prefer .rel script sections
+ when orphan is .rel, .rela when orphan is .rela.
+ (gld${EMULATION_NAME}_place_orphan): Handle combreloc .rel* case
+ first. Remove outsecname var.
+
+2002-10-09 Richard Shann <richard.shann@superh.com>
+ Stephen Clarke <stephen.clarke@superh.com>
+
+ * Makefile.am: Add eshelf32_linux.o and
+ eshlelf32_linux.o, new emulations for sh64 Linux.
+ * Makefile.in: Regenerate.
+ * configure.tgt: Add sh64eb-*-linux* and sh64-*-linux* emulations.
+ * emulparams/shelf32_linux.sh: New file.
+ * emulparams/shlelf32_linux.sh: New file.
+
+2002-10-08 H.J. Lu <hjl@gnu.org>
+
+ * ldlang.c (lang_file_exist): Removed.
+ (new_afile): Revert the last change.
+ * ldlang.h (lang_file_exist): Removed.
+ * lexsup.c (parse_args): Revert the last change.
+
+2002-10-07 Ralf Habacker <Ralf.Habacker@freenet.de>
+
+ * pe-dll.cc (autofilter_symbolprefixlist): Don't re-export
+ auto-import symbols.
+ (make_one): Create _nm_<symbol> for data only.
+
+2002-10-05 Elias Athanasopoulos <eathan@otenet.gr>
+
+ * ldlang.c (lang_file_exist): New function.
+ (new_afile): Abort if the filename to be added matches the linker
+ output filename.
+ * ldlang.h: Add prototype for lang_file_exist.
+ * lexsup.c (parse_args): Abort if the output filename matches
+ one of the input filenames.
+
+2002-10-02 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/elf64ppc.sh (MAXPAGESIZE): Set to 0x10000.
+
+2002-09-30 Alan Modra <amodra@bigpond.net.au>
+
+ * scripttempl/elfd30v.sc: Order reloc sections placing .plt last.
+ * scripttempl/elfm68hc11.sc: Likewise.
+ * scripttempl/elfm68hc12.sc: Likewise.
+
+ * emultempl/elf32.em (output_rel_find): Always place orphan loadable
+ reloc sections just before .rel.plt/.rela.plt.
+ (gld${EMULATION_NAME}_place_orphan <.rel>): Remove combreloc code.
+ Only put loadable reloc sections in hold_rel.
+
+2002-09-29 H.J. Lu <hjl@gnu.org>
+
+ * emulparams/elf32ppc.sh (OTHER_GOT_RELOC_SECTIONS): New.
+
+2002-09-25 Daniel Jacobowitz <drow@mvista.com>
+
+ From "Anita Kulkarni" <AnitaK@kpit.com>
+ * scripttempl/sh.sc: Handle .eh_frame* and .gcc_exc*
+ sections.
+
+2002-09-25 Alan Modra <amodra@bigpond.net.au>
+
+ * genscripts.sh (SEGMENT_SIZE): Use MAXPAGESIZE before
+ TARGET_PAGE_SIZE.
+ * scripttempl/elf.sc (DATA_SEGMENT_ALIGN): Incorporate
+ SEGMENT_SIZE alignment.
+ * emulparams/elf64ppc.sh (DATA_ADDR): Delete.
+ (SEGMENT_SIZE): Define.
+
+ * ldexp.c (fold_unary): New. Split out from exp_fold_tree.
+ (fold_binary): Correct abs - non-abs case.
+ (fold_trinary): New. Split out from exp_fold_tree.
+
+2002-09-24 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/elf64ppc.sh (DATA_ADDR): Define.
+ * emulparams/elf64_aix.sh (DATA_ADDR): Don't use a fixed address
+ for start of .data, instead align up to 256M boundary.
+ * scripttempl/aix.sc: Likewise.
+
+2002-09-22 Mark Elbrecht <snowball3@softhome.net>
+
+ * scripttempl/i386go32.sc: Handle bss unique sections.
+
+2002-09-21 Alan Modra <amodra@bigpond.net.au>
+
+ * ldmisc.c (vfinfo <%C,%D,%G>): Always output bfd, section and offset.
+
+2002-09-17 Stan Cox <scox@redhat.com>
+
+ * emulparams/elf32bmipn32-defs.sh: New file.
+ * emulparams/elf32bmipn32.sh: Use elf32bmipn32-defs.sh.
+ * emulparams/elf32btsmipn32.sh: Likewise.
+ * emulparams/elf64bmip.sh: Likewise.
+ * emulparams/elf64btsmip.sh: Likewise.
+
+2002-09-16 Bruno Haible <bruno@clisp.org>
+
+ * emulparams/elf_i386_fbsd.sh: Set OUTPUT_FORMAT to
+ elf32-i386-freebsd.
+ * emulparams/elf64alpha_fbsd.sh: Set OUTPUT_FORMAT to
+ elf64-alpha-freebsd.
+
+2002-09-11 Nick Clifton <nickc@redhat.com>
+
+ * NEWS: New TI port supports both C4x and C3x series of DSPs.
+
+ * po/tr.po: Updated Turkish translation.
+
+2002-09-06 Jeffrey A Law (law@redhat.com)
+
+ * configure.tgt (h8300-*-hms*, h8500-*-hms*): Restore.
+
+2002-09-02 Nick Clifton <nickc@redhat.com>
+
+ * scripttempl/v850.sc: Add EXTERN references to __ctbpm __gp and
+ __ep.
+ * emulparams/v850.sh (TEMPLATE_NAME): Define.
+
+2002-08-30 Nick Clifton <nickc@redhat.com>
+
+ * scripttempl/elfd10v.sc (MEMORY): Remove UNIFIED, it is not
+ used. Change INSN to start at 0x01000000 and extend for
+ 256K (ignoring holes). Start the STACK on a word aligned
+ boundary.
+ (.rodata): Start it at the READONLY_START_ADDR.
+
+2002-08-30 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/elf32ppc.sh (ARCH): Set to "powerpc:common".
+
+2002-08-28 Svein E. Seldal <Svein.Seldal@solidas.com>
+
+ * Makefile.am: Add etic4xcoff.o in ALL_EMULATIONS list and
+ added makefile targets for this file.
+ * Makefile.in: Regenerate.
+ * configure.tgt: Added tic4x-coff and c4x-coff emulations.
+ * NEWS: Mention new port.
+
+2002-08-28 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
+
+ * emulparams/tic3xcoff.sh: New file.
+ * emulparams/tic4xcoff.sh: New file.
+ * scripttempl/tic3xcoff.sc: New file.
+ * scripttempl/tic4xcoff.sc: New file.
+
+2002-08-28 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/aix.em (gld${EMULATION_NAME}_parse_args): Replace strtoll,
+ strtoul and strtoull with bfd_scan_vma.
+ (gld${EMULATION_NAME}_read_file): Likewise.
+
+2002-08-28 Alan Modra <amodra@bigpond.net.au>
+
+ * configure.tgt: Remove h8[35]00-*-hms*. Add h8500-*-rtems*.
+
+2002-08-27 Egor Duda <deo@logos-m.ru>
+
+ * scripttempl/pe.sc: Handle .rdata_runtime_pseudo_reloc sections.
+ Add symbols for application to access them.
+
+2002-08-27 Nick Clifton <nickc@redhat.com>
+
+ * emultempl/armelf.em: Revert this patch, it is not needed.
+
+ 2002-08-22 Adam Nemet <anemet@lnxw.com>
+
+2002-08-20 Dan Kegel <dank@kegel.com>
+
+ * configure.in: added --with-lib-path argument to ld's configure
+ to set LIB_PATH.
+ * NEWS: Document new switch.
+ * README: Mention new switch.
+ * configure: Regenerate.
+ * Makefile.in: Regenerate.
+
+ Based on this patch:
+ 2001-04-25 Christopher Faylor <cgf@cygnus.com>
+
+ * Makefile.in (LIB_PATH): Make configurable.
+ (GENSCRIPTS): Set LIB_PATH in environment.
+ * configure.in: Substitute LIB_PATH.
+
+2002-08-22 Adam Nemet <anemet@lnxw.com>
+
+ * emultempl/armelf.em: Include elf-bfd.h and elf/arm.h.
+ (arm_elf_finish): Set the last bit of DT_INIT and DT_FINI
+ depending on the type of the function.
+ (arm_elf_convert_thumb_symbol_to_address): New function.
+
+2002-08-22 Graeme Peterson <gp@qnx.com>
+
+ * Makefile.am: Add esh{l}elf_nto.o files.
+ * Makefile.in: Regenerate.
+ * configure.tgt: Add support for sh-**-nto* targets.
+ * emulparams/shelf_nto.sh: New file.
+ * emulparams/shlelf_nto.sh: New file.
+
+2002-08-21 John David Anglin <dave@hiauly1.hia.nrc.ca>
+
+ * ldlang.c (offsetof): Define if not defined.
+
+2002-08-14 H.J. Lu <hjl@gnu.org>
+
+ * configure.tgt: Always enable 64bit emulations for 32bit
+ Linux/mips.
+
+2002-08-13 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/elf32_dlx.sh (TARGET_PAGE_SIZE): Set to 1.
+ (MAXPAGESIZE): Set to 1.
+
+ * ld.h (ALIGN_N): Delete.
+ * ldexp.h (align_n): Declare.
+ * ldexp.c (align_n): New function.
+ (fold_binary): Use align_n instead of ALIGN_N.
+ (exp_fold_tree): Likewise.
+ * ldlang.c (lang_size_sections_1): Likewise.
+ (lang_one_common): Likewise.
+ * ld.texinfo (ALIGN): Remove power of 2 restriction.
+
+2002-07-31 Graeme Peterson <gp@qnx.com>
+
+ * configure.tgt: Add support for powerpc{le}-*-nto* targets.
+ * Makefile.am: Add eelf32{l}ppcnto.o files.
+ * Makefile.in: Regenerate.
+ * emulparams/elf32lppcnto.sh: New file.
+ * emulparams/elf32ppcnto.sh: New file.
+
+2002-08-07 H.J. Lu <hjl@gnu.org>
+
+ * ld.texinfo: Document --no-undefined-version.
+
+ * ldlang.c (lang_new_vers_pattern): Set the `symver' and
+ `script.' fields to 0.
+
+ * ldmain.c (main): Initialize the allow_undefined_version to
+ true.
+
+ * lexsup.c (OPTION_NO_UNDEFINED_VERSION): New.
+ (ld_options): Add --no-undefined-version.
+ (parse_args): Support OPTION_NO_UNDEFINED_VERSION.
+
+2002-08-07 Nick Clifton <nickc@redhat.com>
+
+ * emultempl/armelf.em (arm_elf_before_allocation): Only search for
+ an interworking bfd if there are input bfds. (107501)
+
+2002-08-06 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/aix.em (gld*_before_parse): Set default arch. Reverts
+ 2002-05-10 change.
+
+2002-08-01 Nick Clifton <nickc@redhat.com>
+
+ * emulparams/armelf.sh: Revert previous delta.
+ * scripttempl/elf.sc: Revert previous delta.
+
+2002-07-31 H.J. Lu <hjl@gnu.org>
+
+ * configure.tgt (powerpc*-*-linux*): Enable elf64ppc for
+ --enable-64-bit-bfd.
+
+2002-07-31 H.J. Lu <hjl@gnu.org>
+
+ * configure.tgt: Enable x86-64 emulation for Linux/i386 if
+ 64bit BFD is selected.
+
+2002-07-31 H.J. Lu <hjl@gnu.org>
+
+ * configure.tgt: Enable 64bit emulations for 32bit Linux/mips
+ if 64bit BFD is selected.
+
+2002-07-31 Ian Dall <ian@sibyl.beware.dropbear.id.au>
+
+ * emultempl/netbsd.em (LDEMUL_BEFORE_PARSE): New file to custom set
+ link_info.common_skip_ar_aymbols.
+ * emulparams/ns32knbsd.sh (EXTRA_EM_FILE): Refer to extra file.
+
+ * ldmain.c (main): Initialize new field
+ link_info.common_skip_ar_aymbols.
+
+2002-07-31 Adam Nemet <anemet@lnxw.com>
+
+ * emulparams/armelf.sh (OTHER_PLT_SECTIONS): New variable. Set it
+ to .plt.thumb.
+ * scripttempl/elf.sc: Comment it. Use the same way as ${PLT} is
+ used.
+
+2002-07-31 Nick Clifton <nickc@redhat.com>
+
+ * NEWS: Retroactively add entry for Lars Brinkhoff's contribution
+ of the PDP-11 and 2.11BSD a.out support.
+
+2002-07-31 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
+
+ * Makefile.am (eelf32btsmipn32.o, eelf32ltsmipn32.o): New emulations
+ for n32 ABI support.
+ * Makefile.in: Regenerate.
+ * configure.tgt (mips64*el-*-linux-gnu*,mips64*-*-linux-gnu*): Add
+ n32 ABI emulations for these 64 bit targets.
+ * emulparams/elf32bmipn32.sh: Expand comment.
+ * emulparams/elf32btsmipn32.sh: New file, for traditional big endian
+ n32 ABI.
+ * emulparams/elf32ltsmipn32.sh: Likewise for little endian.
+
+2002-07-30 Graeme Peterson <gp@qnx.com>
+
+ * configure.tgt: Add support for arm-*-nto target.
+ * Makefile.am: Add earmnto.o file.
+ * Makefile.in: Regenerate.
+ * NEWS: Mention port of ARM support to QNX.
+ * emulparams/armnto.sh: New file.
+
+2002-07-30 Jakub Jelinek <jakub@redhat.com>
+
+ * ldlang.c (lang_add_section): Don't turn .tbss into normal sections
+ for relocatable link.
+ (lang_size_sections_1): Don't make .tbss zero size for relocatable
+ link.
+
+2002-07-26 Bernd Schmidt <bernds@redhat.com>
+
+ * emulparams/elf32frv.sh (OTHER_RELOCATING_SECTIONS): Delete.
+ (STACK_ADDR): New.
+
+2002-07-25 Nick Clifton <nickc@redhat.com>
+
+ * po/sv.po: Updated Swedish translation.
+ * po/es.po: Updated Spanish translation.
+ * po/fr.po: Updated French translation.
+
+2002-07-24 Nick Clifton <nickc@redhat.com>
+
+ * po/sv.po: Updated Swedish translation.
+ * po/es.po: Updated Spanish translation.
+
+2002-07-23 Nick Clifton <nickc@redhat.com>
+
+ * po/fr.po: Updated French translation.
+
+2002-07-20 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Don't
+ bomb on /DISCARD/ input section.
+ * emultempl/pe.em (gld_${EMULATION_NAME}_place_orphan): Likewise.
+ * emultempl/mmo.em (mmo_place_orphan): Likewise.
+
+2002-07-19 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * emultempl/mmo.em (mmo_place_orphan): Handle case of no .text
+ output section.
+
+2002-07-16 Denis Chertykov <denisc@overta.ru>
+ Nick Clifton <nickc@redhat.com>
+ Frank Ch. Eigler <fche@redhat.com>
+ John Healy <jhealy@redhat.com>
+
+ * configure.tgt: Add support for ip2k-elf.
+ * Makefile.am: Add support for ip2k-elf.
+ * Makefile.in: Regenerate.
+ * emulparams/elf32ip2k.sh: New file.
+ * scripttempl/ip2k.sc: New file
+ * NEWS: Mention support for new port.
+
+2002-07-16 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * NEWS: Add 'Changes in 2.13'.
+
+2002-07-14 H.J. Lu <hjl@gnu.org>
+
+ * ld.texinfo: Document a .symver takes precedence over a
+ version script.
+
+2002-07-12 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/elf64ppc.sh (ARCH): Set to powerpc:common64.
+ (COMMONPAGESIZE): Define.
+
+2002-07-09 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/hppanbsd.sh: Remark that hppaobsd.sh references this file.
+
+2002-07-09 Federico G. Schwindt <fgsch@olimpo.com.br>
+
+ * configure.tgt: Add support for alpha-*-openbsd*, hppa-*-openbsd*,
+ powerpc-*-openbsd* and sparc64-*-openbsd*.
+ * Makefile.am (ALL_EMULATIONS): Add ehppaobsd.o.
+ * Makefile.in: Regenerate.
+ * emulparams/hppaobsd.sh: New file.
+
+2002-07-05 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (print_wild_statement): Fix output formatting.
+
+2002-07-04 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c: (strip_excluded_output_sections): New function.
+ (lang_process): Call it.
+ (lang_size_sections_1): Revert 2002-06-10 change.
+
+2002-07-03 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am (check-DEJAGNU): Revert 2002-06-25 change.
+ Run "make dep-am".
+ * Makefile.in: Regenerate.
+
+2002-07-02 Alan Modra <amodra@bigpond.net.au>
+
+ * ldfile.c (ldfile_try_open_bfd): Formatting.
+
+ * ldmisc.c (demangle): Move so that it doesn't intrude between
+ vfinfo comment and body. Add comment.
+
+2002-07-01 John David Anglin <dave@hiauly1.hia.nrc.ca>
+
+ * emulparams/vax.sh (OUTPUT_FORMAT): Use a.out-vax-bsd format.
+
+2002-07-01 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.h (entry_sym): Make it a struct bfd_sym_chain.
+ * ldlang.c (entry_sym): Likewise.
+ (ldlang_undef_chain_list_type): Likewise.
+ (lang_finish): Adjust references to entry_symbol.
+ (lang_add_entry): Likewise.
+ (lang_gc_sections): Use link_info.gc_sym_list.
+ (lang_process): Set link_info.gc_sym_list.
+ * ldlex.l: Include bfdlink.h.
+ * ldmain.c (main): Init link_info.gc_sym_list.
+ * emultempl/aix.em: Adjust references to entry_symbol.
+ * emultempl/armcoff.em: Likewise.
+ * emultempl/armelf.em: Likewise.
+ * emultempl/pe.em: Likewise.
+ * emultempl/ppc64elf.em (ppc_after_open): New function.
+ (LDEMUL_AFTER_OPEN): Define.
+ * emulparams/elf64ppc.sh: KEEP .opd sections.
+
+2002-06-29 Stephane Carrez <stcarrez@nerim.fr>
+
+ * emulparams/m68hc12elfb.sh (EEPROM_MEMORY): Define.
+ * emulparams/m68hc11elfb.sh (EEPROM_MEMORY): Define.
+ * emulparams/m68hc11elf.sh (EEPROM_SIZE): Define.
+ (EEPROM_START_ADDR): Define.
+ (EEPROM_MEMORY): Define.
+ * emulparams/m68hc12elf.sh: Likewise.
+ * scripttempl/elfm68hc11.sc: Handle .eeprom section; handle .softregs
+ section to put soft registers in .page0.
+ * scripttempl/elfm68hc12.sc: Likewise but put soft registers in bss.
+
+2002-06-26 John David Anglin <dave@hiauly1.hia.nrc.ca>
+
+ * emulparams/hppa64linux.sh (OTHER_GOT_RELOC_SECTIONS): Add rela.opd
+ section. Add ${RELOCATING-0}.
+
+2002-06-26 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * emulparams/shelf.sh (STACK_ADDR): Don't define.
+ (OTHER_SECTIONS): Define.
+ * emulparams/shelf_nbsd.sh ((STACK_ADDR): Don't undef.
+ (OTHER_SECTIONS): Undef.
+
+2002-06-26 Alan Modra <amodra@bigpond.net.au>
+
+ * ldmisc.c (demangle): Restore dots stripped from sym name.
+
+2002-06-25 H.J. Lu <hjl@gnu.org>
+
+ * Makefile.am (check-DEJAGNU): Set LC_ALL=C and export it.
+ * Makefile.in: Regenerated.
+
+2002-06-20 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * ld.texinfo (Bug Reporting): Update text to suggest a limit on
+ the size of attached object files, to allow make the object files
+ available via FTP or HTTP and to mention that the mail will be
+ sent to a mailing list.
+
+2002-06-20 Nathanael Nerode <neroden@twcny.rr.com>
+
+ * configure.host (romp): Drop support.
+
+2002-06-18 Chris Demetriou <cgd@broadcom.com>
+
+ * emultempl/mipself.em (mips_elf${ELFSIZE}_check_sections): Check
+ section flags for SEC_DATA, rather than for SEC_CODE being unset.
+
+2002-06-18 Chris Demetriou <cgd@broadcom.com>
+
+ * emultempl/mipself.em (mips_elf${ELFSIZE}_check_sections): Fix
+ format specifier used to print BFD name.
+
+2002-06-18 Dave Brolley <brolley@redhat.com>
+
+ From Catherine Moore, Michael Meissner, Jim Blandy:
+ * emulparams/elf32frv.sh: New file.
+ * configure.tgt: Support frv-*-*.
+ * Makefile.am (ALL_EMULATIONS): Add eelf32frv.o.
+ (eelf32frv.c): New target.
+
+2002-06-17 Tom Rix <trix@redhat.com>
+
+ * emultempl/elf32.em: gld*_get_script: Check for
+ GENERATE_COMBRELOC_SCRIPT.
+ * scripttempl/elfd10v.sc : Fix STACK and INSN.
+ * emulparams/d10velf.sh : Fix TEXT_START_ADDR.
+
+2002-06-13 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * configure.tgt: Add support for sh[1234]*le*-*-elf, sh[1234]*-*-elf.
+
+2002-06-12 H.J. Lu <hjl@gnu.org>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_try_needed): Return
+ false if xvec doesn't match.
+
+2002-06-10 Richard Sandiford <rsandifo@redhat.com>
+
+ * ldlang.c (lang_size_sections_1): Skip removed output sections.
+
+2002-06-08 Alan Modra <amodra@bigpond.net.au>
+
+ * ldexp.c: Replace CONST with const.
+ * ldfile.c: Likewise.
+ * ldfile.h: Likewise.
+ * ldlex.l: Likewise.
+ * mri.c: Likewise.
+ * pe-dll.h: Likewise.
+
+2002-06-07 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc64elf.em (new_vers_pattern): Warning fix.
+
+2002-06-07 Charles Wilson <cwilson@ece.gatech.edu>
+
+ * ldmain.c (main): initialize link_info.pei386_auto_import
+ to -1 == implicit enable.
+ * emultempl/pe.em (gld_${EMULATION_NAME}_before_parse):
+ initialize link_info.pei386_auto_import to -1 == implicit
+ enable.
+ (gld_${EMULATION_NAME}_parse_args): When processing
+ --enable-auto-import and --disable-auto-import options, use
+ '1' and '0' instead of 'true' and 'false'.
+ (pe_find_data_imports): Only issue message about auto-import
+ when the feature is implicitly enabled. Downgrade message to
+ informational instead of warning.
+
+2002-06-07 Alan Modra <amodra@bigpond.net.au>
+
+ * scripttempl/elf.sc (.tbss): Fix mismatched parentheses/braces.
+
+2002-06-06 John David Anglin <dave@hiauly1.hia.nrc.ca>
+
+ * configure.host (hppa*64*-*-hpux11*): Define NATIVE_LIB_DIRS,
+ HOSTING_CRT0 and HOSTING_LIBS.
+
+2002-06-05 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * configure.tgt (shle*-*-elf*, sh64le-*-elf*): New configurations.
+
+2002-06-05 Jason Thorpe <thorpej@wasabisystems.com>
+
+ * emulparams/ns32knbsd.sh (EXECUTABLE_SYMBOLS): Set _DYNAMIC to 0.
+ (NONPAGED_TEXT_START_ADDR): Set to 0x1000.
+
+2002-06-05 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Place
+ SEC_EXCLUDE sections when doing a relocatable link.
+
+2002-06-04 Jason Thorpe <thorpej@wasabisystems.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add eshelf32_nbsd.o,
+ eshlelf32_nbsd.o, eshelf64_nbsd.o, and eshlelf64_nbsd.o.
+ (eshelf32_nbsd.c, eshelf64_nbsd.c, eshlelf32_nbsd.c)
+ (eshlelf64_nbsd.c): New rules.
+ * Makefile.in: Regenerate.
+ * configure.tgt (sh5le-*-netbsd*, sh5-*-netbsd*, sh64le-*-netbsd*)
+ (sh64-*-netbsd*): New targets.
+ * emulparams/shelf32_nbsd.sh: New file.
+ * emulparams/shelf64_nbsd.sh: New file.
+ * emulparams/shlelf32_nbsd.sh: New file.
+ * emulparams/shlelf64_nbsd.sh: New file.
+
+2002-06-04 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (section_already_linked): Call bfd_discard_group. Typo fix.
+
+2002-06-02 Marek Michalkiewicz <marekm@amelek.gda.pl>
+
+ * scripttempl/avr.sc: Changes to support current GCC and avr-libc,
+ C++ constructors/destructors, loosely based on the m68hc11 port.
+
+2002-05-31 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.in: Regenerate.
+ * aclocal.m4: Regenerate.
+ * config.in: Regenerate.
+ * configure: Regenerate.
+
+2002-05-31 Graeme Peterson <gp@qnx.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add ei386nto.o.
+ (ei386nto.c): Add rule.
+ * Makefile.in: Regenerate.
+ * configure.tgt: Add i[3456]86-*-nto-qnx*.
+ * emulparams/i386nto.sh: New file.
+
+2002-05-29 Jason Thorpe <thorpej@wasabisystems.com>
+
+ * NEWS: Add entry for VAX ELF support.
+
+2002-05-29 Matt Thomas <matt@3am-software.com>
+ Jason Thorpe <thorpej@wasabisystems.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add eelf32vax.o and evaxnbsd.o.
+ (eelf32vax.c)
+ (evaxnbsd.c): New rules.
+ * Makefile.in: Regenerate.
+ * configure.tgt (vax-*-netbsdelf*)
+ (vax-*-netbsdaout*)
+ (vax-*-netbsd*): New targets.
+ * emulparams/elf32vax.sh: New file.
+ * emulparams/vaxnbsd.sh: New file.
+
+2002-05-29 Adam Nemet <anemet@lnxw.com>
+
+ * emultempl/armelf.em (arm_elf_after_open): Don't determine
+ bfd_for_interwork, instead add glue sections to each input bfd.
+ (bfd_for_interwork): New global.
+ (arm_elf_set_bfd_for_interworking): New function.
+ (arm_elf_before_allocation): Use it.
+
+2002-05-28 Kuang Hwa Lin <kuang@sbcglobal.net>
+
+ * Makefile.am: Add DLX make target.
+ * configure.tgt: Add DLX configuration.
+ * Makefile.in: Regenerate.
+ * emulparams/elf32_dlx.sh: New file
+ * scripttempl/dlx.sc: New file
+
+2002-05-27 Per Lundberg <per@caleb.dnsalias.org>
+
+ * Makefile.am (eelf_i386_chaos): Use elf_chaos.sc script.
+ * Makefile.in: Regenerate.
+ * emulparams/elf_chaos.sh: Use elf_chaos script.
+ * scripttempl/elf_chaos.sc: New file.
+
+2002-05-27 Richard Sandiford <rsandifo@redhat.com>
+
+ * ldlang.c (lang_size_sections_1): Move check for conflicting load
+ addresses and regions from here...
+ (lang_get_regions): ...to this new function.
+ (lang_leave_output_section_statement): Use lang_get_regions.
+ (lang_leave_overlay): Likewise.
+ * mri.c (mri_draw_tree): Pass null as last argument to
+ lang_leave_output_section_statement.
+ * emultempl/elf32.em (gld*_place_orphan): Likewise.
+ * emultempl/mmo.em (mmo_place_orphan): Likewise.
+ * emultempl/pe.em (gld*_place_orphan): Likewise.
+
+2002-05-26 Jason Thorpe <thorpej@wasabisystems.com>
+
+ * configure.tgt: Use ns32k-*-netbsd* instead of ns32k-pc532-netbsd*.
+
+2002-05-25 Kazu Hirata <kazu@cs.umass.edu>
+
+ * ldemul.c: Fix formatting.
+ * ldfile.c: Likewise.
+ * pe-dll.c: Likewise.
+ * pe-dll.h: Likewise.
+
+2002-05-25 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_process): Formatting, grammar.
+
+ * ldlex.l: Use #include "" instead of <> for local header files.
+
+2002-05-24 TAMURA Kent <kent@netbsd.org>
+
+ * configure.tgt: Add a target for i386-netbsdpe.
+
+2002-05-23 Jakub Jelinek <jakub@redhat.com>
+
+ * scripttempl/elf.sc: Add .rel{,a}.t{bss,data}, .tdata and .tbss.
+ * ldlang.c (lang_add_section): Set SEC_THREAD_LOCAL for
+ output section if necessary. Handle .tbss.
+ (lang_size_sections): Clear _raw_size for .tbss section
+ (it allocates space in PT_TLS segment only).
+ * ldwrite.c (build_link_order): Build link order for .tbss too.
+
+2002-05-23 Alan Modra <amodra@bigpond.net.au>
+
+ * configure.in: Correct spelling of AC_PREREQ.
+
+2002-05-21 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * pe-dll.c (autofilter_liblist): Add more system libs excluded by
+ default.
+ (autofilter_objlist): Add crtbegin.o, crtend.o.
+
+2002-05-21 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * emultempl/pe.em (OPTION_EXCLUDE_LIBS): Add new define.
+ (longopts): Add new option --exclude-libs.
+ (gld_${EMULATION_NAME}_list_options): Give quick help about it.
+ (gld_${EMULATION_NAME}_parse_args): Use it.
+ * pe-dll.h (pe_dll_add_excludes): Add second param to prototype.
+ * pe-dll.c (exclude_list_struct): Add field type to distinguish symbols
+ from whole archives.
+ (pe_dll_add_excludes): Set excludes->type.
+ (auto_export): Add new variable libname and set to archive basename if
+ abfd. Use it when filtering default and user-specified libarary
+ excludes. Let string "ALL" mean all libs when filtering user-specified
+ libs.
+ * ld.texinfo: Document --exclude-libs.
+
+2002-05-22 Alan Modra <amodra@bigpond.net.au>
+
+ * ldemul.c (ldemul_new_vers_pattern): New function.
+ * ldemul.h (ldemul_new_vers_pattern): Declare.
+ (struct ld_emulation_xfer_struct): Add new_vers_pattern.
+ * ldlang.c (lang_new_vers_pattern): Call ldemul_new_vers_pattern.
+ * emultempl/ppc64elf.em (dotsyms): New static var.
+ (gld${EMULATION_NAME}_new_vers_pattern): New function.
+ (LDEMUL_NEW_VERS_PATTERN): Define.
+ (PARSE_AND_LIST_PROLOGUE): Add OPTION_DOTSYMS, OPTION_NO_DOTSYMS.
+ (PARSE_AND_LIST_LONGOPTS): Likewise.
+ (PARSE_AND_LIST_ARGS_CASES): Handle them.
+ * emultempl/aix.em (ld_${EMULATION_NAME}_emulation): Update
+ initialiser.
+ * emultempl/armcoff.em: Likewise.
+ * emultempl/armelf_oabi.em: Likewise.
+ * emultempl/beos.em: Likewise.
+ * emultempl/elf32.em: Likewise.
+ * emultempl/generic.em: Likewise.
+ * emultempl/gld960.em: Likewise.
+ * emultempl/gld960c.em: Likewise.
+ * emultempl/linux.em: Likewise.
+ * emultempl/lnk960.em: Likewise.
+ * emultempl/m68kcoff.em: Likewise.
+ * emultempl/mipsecoff.em: Likewise.
+ * emultempl/pe.em: Likewise.
+ * emultempl/sunos.em: Likewise.
+ * emultempl/ticoff.em: Likewise.
+ * emultempl/vanilla.em: Likewise.
+
+2002-05-22 Alan Modra <amodra@bigpond.net.au>
+
+ * genscripts.sh (LIB_PATH): For native targets, concatenate $libdir
+ and $NATIVE_LIB_DIRS. Add $tool_lib before other libs.
+ (LIB_SEARCH_DIRS): No need to use "tr".
+ (COMPILE_IN): Only set for native targets.
+ * configure.host (NATIVE_LIB_DIRS): Specify all native search dirs
+ here, rather than adding lib:/usr/lib:/usr/local/lib in genscripts.sh.
+ * configure.tgt (powerpc*): Set tdir_*.
+ (powerpcle*): Correct targ_extra_emuls.
+ * emulparams/elf32ppc.sh (LIB_PATH): Set up native 64 bit dirs.
+ * emulparams/elf64ppc.sh (LIB_PATH): Likewise.
+
+2002-05-22 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/pe.em (set_pe_subsystem): Don't set "cmdline" when
+ calling lang_add_entry.
+
+2002-05-21 H.J. Lu (hjl@gnu.org)
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_parse_args): Handle
+ "-z muldefs".
+ (gld${EMULATION_NAME}_list_options): Add "-z muldefs".
+
+ * ld.texinfo: Updated for --allow-multiple-definition and
+ "-z muldefs".
+
+ * ldmain.c (main): Initialize the allow_multiple_definition
+ field to false.
+
+ * lexsup.c (OPTION_ALLOW_MULTIPLE_DEFINITION): New.
+ (ld_options): Add --allow-multiple-definition.
+ (parse_args): Support OPTION_ALLOW_MULTIPLE_DEFINITION.
+
+2002-05-21 Jason Thorpe <thorpej@wasabisystems.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add earmelfb_nbsd.o.
+ (earmelfb_nbsd.c): New rule.
+ * Makefile.in: Regenerate.
+ * configure.tgt (armeb-*-netbsdelf*): New target.
+ (arm-*-netbsdelf*): Add armelfb_nbsd to targ_extra_emuls.
+ (arm-*-netbsd*): Likewise.
+ * emulparams/armelfb_nbsd.sh: New file.
+
+2002-05-18 Tom Rix <trix@redhat.com>
+
+ * emultempl/aix.em (gld*_parse_args): Add -bnortl and -bnortllib
+ support.
+
+2002-05-17 Marek Michalkiewicz <marekm@amelek.gda.pl>
+
+ * Makefile.am: Add new emulations avr1, avr2, avr3, avr4, avr5.
+ * Makefile.in: Regenerate.
+ * configure.tgt (avr-*-*): Add avr[1-5] to targ_extra_emuls.
+
+2002-05-16 Marek Michalkiewicz <marekm@amelek.gda.pl>
+
+ * emulparams/avr1.sh: New file.
+ * emulparams/avr2.sh: New file.
+ * emulparams/avr3.sh: New file.
+ * emulparams/avr4.sh: New file.
+ * emulparams/avr5.sh: New file.
+ * scripttempl/avr.sc: New file.
+
+2002-05-15 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (section_already_linked): Call bfd_link_just_syms.
+ (lang_place_orphans): Abort if just_syms_flag.
+
+2002-05-10 Tom Rix <trix@redhat.com>
+
+ * emultempl/aix.em: (gld*_set_output_arch): New function. Use
+ architecture and machine information in the output bfd.
+ (gld*_before_parse): Remove old arch and machine code.
+ (choose_target): Rename to gld*_choose_target.
+ (rtld): Change type to int.
+ * ldfile.c (ldfile_try_open_bfd): Disable compatiblity check for
+ objects in XCOFF archives.
+ * ldfile.h: Update copyright date.
+
+2002-05-10 Jakub Jelinek <jakub@redhat.com>
+
+ * ldmain.c (main): Enable -z combreloc by default.
+
+2002-05-07 Federico G. Schwindt <fgsch@olimpo.com.br>
+
+ * Makefile.am: Honour DESTDIR.
+ * Makefile.in: Regenerate.
+
+2002-05-07 Richard Sandiford <rsandifo@redhat.com>
+
+ * ldlang.h (lang_output_section_statement_type): Add update_dot_tree.
+ (lang_enter_overlay): Remove the last two parameters.
+ (lang_leave_overlay): Take them here instead.
+ * ldgram.y (memspec_at_opt): Set $$ to null if no region is given.
+ (section): Pass LMA and crossref flag to lang_leave_overlay rather
+ than lang_enter_overlay.
+ * ldlang.c (lang_memory_region_lookup): Return null for null names.
+ (lang_output_section_statement_lookup): Initialize update_dot_tree.
+ (lang_size_sections_1): Evaluate it.
+ (lang_leave_output_section_statement): Rework LMA lookup.
+ (overlay_lma, overlay_nocrossrefs): Remove.
+ (lang_enter_overlay): Remove LMA and crossref arguments.
+ (lang_enter_overlay_section): Don't set the LMA here.
+ (lang_leave_overlay): Take LMA and crossref arguments. Move the '.'
+ assignment to the last section's update_dot_tree. Unconditionally
+ use the load and run-time regions specified in the OVERLAY statement.
+ Likewise the first section's LMA. Only set the other sections' LMAs
+ when no load region is given.
+
+2002-05-06 Nick Clifton <nickc@redhat.com>
+
+ * po/sv.po: New translation.
+
+2002-05-04 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/hppaelf.em (build_section_lists): New function.
+ (gld${EMULATION_NAME}_finish): Call elf32_hppa_setup_section_lists
+ and build_section_lists.
+
+2002-05-03 Kazu Hirata <kazu@cs.umass.edu>
+
+ * ld.h: Fix formatting.
+ * ldexp.c: Likewise.
+ * ldfile.c: Likewise.
+ * ldlang.c: Likewise.
+ * ldmain.c: Likewise.
+ * lexsup.c: Likewise.
+ * pe-dll.c: Likewise.
+
+2002-05-02 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc64elf.em (gld${EMULATION_NAME}_after_allocation):
+ Adjust for ppc64_elf_set_toc change. #include libbfd.h.
+ (build_section_lists): Do output_section tests here.
+
+2002-04-30 Tom Rix <trix@redhat.com>
+
+ * emultempl/aix.em : (gld*_parse_arge): Formatting changes.
+
+2002-05-01 Alan Modra <amodra@bigpond.net.au>
+
+ Long branch stubs, multiple stub sections.
+ * emultempl/ppc64elf.em: Include ldctor.h.
+ (stub_file): New var.
+ (group_size): New var.
+ (ppc_create_output_section_statements): New function.
+ (struct hook_stub_info): New.
+ (hook_in_stub): New function.
+ (ppc_add_stub_section): New function.
+ (ppc_layout_sections_again): New function.
+ (build_section_lists): New function.
+ (gld${EMULATION_NAME}_finish): Rewrite.
+ (real_func): New var.
+ (ppc_for_each_input_file_wrapper): New function.
+ (ppc_lang_for_each_input_file): New function.
+ (lang_for_each_input_file): Define.
+ (PARSE_AND_LIST_PROLOGUE): Define.
+ (PARSE_AND_LIST_LONGOPTS): Define.
+ (PARSE_AND_LIST_OPTIONS): Define.
+ (PARSE_AND_LIST_ARGS_CASES): Define.
+ (LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS): Define.
+
+2002-04-30 Tom Rix <trix@redhat.com>
+
+ * emultempl/aix.em (gld*_parse_arge, gld*_before_allocation): Add
+ -blibpath, -bnolibpath support.
+
+2002-04-30 Mark Mitchell <mark@codesourcery.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add elf32ppcwindiss.o.
+ (eelf32ppcwindiss.c): New target.
+ * Makefile.in: Regenerated.
+ * configure.tgt: Add support for powerpc-*-windiss.
+ * emulparams/elf32ppcwindiss.sh: New file.
+
+2002-04-30 Richard Sandiford <rsandifo@redhat.com>
+
+ * ldlang.c (print_assignment): Update print_dot for assignments to ".".
+ * ldexp.c (exp_print_token): Add "infix_p" argument.
+ (exp_print_tree): Update accordingly.
+
+2002-04-28 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am (mpw): New maintainer mode rule to make mpw-*.c files.
+ * Makefile.in: Regenerate.
+ * mpw-elfmips.c: Delete.
+ * mpw-eppcmac.c: Delete.
+ * mpw-esh.c: Delete.
+ * mpw-idtmips.c: Delete.
+
+2002-04-17 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * emulparams/shelf32.sh (MACHINE): Now sh5.
+
+2002-04-17 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
+
+ * ldgram.y: Fix syntax warning.
+
+2002-04-11 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * emultempl/armelf.em (PARSE_AND_LIST_SHORTOPTS): Add 'n' in order
+ to prevent "-n" from being taken as an abbreviation for
+ "--no-pipeline-knowledge".
+
+2002-04-08 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_size_sections_1): Don't complain about
+ SEC_NEVER_LOAD sections having no memory region specified.
+
+ * ld.texinfo (Format Commands <OUTPUT_FORMAT>): Typo fix.
+
+2002-04-07 matthew green <mrg@redhat.com>
+
+ * configure.host (*-*-netbsd*): Add support for NetBSD/ELF.
+
+2002-04-04 Alan Modra <amodra@bigpond.net.au>
+
+ * dep-in.sed: Cope with absolute paths.
+ * Makefile.am (dep.sed): Subst TOPDIR and BFDDIR.
+ Run "make dep-am".
+ * Makefile.in: Regenerate.
+
+2002-04-04 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
+
+ * emulparams/elf64btsmip.sh: n64 replaces .reginfo with .MIPS.options.
+
+2002-04-03 Jakub Jelinek <jakub@redhat.com>
+
+ * ldexp.c (fold_binary) [DATA_SEGMENT_ALIGN]: If common page size
+ is smaller than maximum, round dot up to common page boundary.
+
+2002-03-28 Alan Modra <amodra@bigpond.net.au>
+
+ * configure.host: Set up for generic hosts first, then tweak as
+ necessary in more specific targets.
+ (HOSTING_LIBS): Include libgcc_eh.a if found.
+
+2002-03-23 Andreas Jaeger <aj@suse.de>
+
+ * emulparams/elf_x86_64.sh (COMMONPAGESIZE): Set it.
+
+2002-03-21 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+
+2002-03-21 Albert Chin-A-Young <china@thewrittenword.com>
+
+ * genscripts.sh (LIB_SEARCH_DIRS): Quote path.
+
+2002-03-20 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (ldlang_add_undef): If the output bfd has been opened,
+ add the symbol to the linker hash table immediately.
+ (lang_place_undefineds): Split symbol creation out..
+ (insert_undefined): ..to here.
+
+2002-03-18 David O'Brien <obrien@FreeBSD.org>
+
+ * emultempl/elf32.em: Use lbasename vs. basename to fix problem where
+ the contents of the buffer returned from basename function will are
+ getting overwritten while still being used.
+
+2002-03-18 Jan Hubicka <jh@suse.cz>
+ Andreas Jaeger <aj@suse.de>
+ Andreas Schwab <schwab@suse.de>
+
+ * configure.tgt (x86_64-*-linux-gnu*): Configure i386 as native.
+ * elf_x86_64.sh (ARCH): Set to i386:x86-64
+ set libraries to default to lib64 paths.
+
+2002-03-18 Tom Rix <trix@redhat.com>
+
+ * Makefile.am : Add eaix5ppc and eaix5rs6, AIX 5 support.
+ * configure.tgt : Same.
+ * emulparms/aix5ppc.sh : New file. For eaix5ppc.
+ * emulparms/aix5rs6.sh : New file. For eaix5rs6.
+ * emulparms/aixppc.sh : OUPUT_FORMAT_32BIT and OUTPUT_FORMAT_64BIT
+ emulation parameters for better -b32, -b64 support.
+ * emulparms/aixrs6.sh : Same.
+ * emulparms/ppcmacos.sh : Same.
+ * emultempl/aix.em (choose_target) : Use new emulation parameters
+ OUTPUT_FORMAT_32BIT and OUTPUT_FORMAT_64BIT.
+ * Makefile.in : Regenerate.
+
+2002-03-18 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * po/fr.po: Updated version.
+
+2002-03-18 Alan Modra <amodra@bigpond.net.au>
+
+ * ldmain.c (main): Move .text readonly flag fudges from here..
+ * ldlang.c (lang_process): ..to here.
+
+2002-03-14 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_check): Remove the word size check added in last
+ change. Treat emitrelocations case as for relocatable links.
+
+2002-03-13 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * po/fr.po: Updated version.
+
+2002-03-13 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_check): Do relocatable link checks first, so that
+ warn_mismatch can't override. Check compatible and word size too.
+
+2002-03-07 Daniel Jacobowitz <drow@mvista.com>
+
+ * ld.texinfo: Wrap @menu in @ifnottex, not @ifinfo.
+
+2002-03-05 Jakub Jelinek <jakub@redhat.com>
+
+ * scripttempl/elf.sc: Only use DATA_SEGMENT_END() together with
+ DATA_SEGMENT_ALIGN.
+
+2002-03-04 H.J. Lu <hjl@gnu.org>
+
+ * scripttempl/elf.sc: Put .preinit_array, .init_array and
+ .fini_array in the data segment.
+
+2002-03-04 Alan Modra <amodra@bigpond.net.au>
+
+ * scripttempl/elf.sc: Correct syntax errors in 2002-03-01 commit.
+
+2002-03-01 David Mosberger <davidm@hpl.hp.com>
+
+ * scripttempl/elf.sc (SECTIONS): Add entries for .preinit_array,
+ .init_array, and .fini_array.
+
+2002-02-20 Andreas Schwab <schwab@suse.de>
+
+ * emulparams/elf64_ia64.sh (OTHER_READONLY_SECTIONS): Don't fold
+ .IA64_unwind* in a relocatable link.
+
+2002-02-20 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * NEWS: Mark 2.12 branch.
+
+2002-02-19 Martin Schwidefsky <schwidefsky@de.ibm.com>
+
+ * emulparams/elf64_s390.sh (ARCH): Change to "s390:64-bit".
+ * emulparams/elf_s390.sh (ARCH): Change to "s390:31-bit".
+
+2002-02-18 Tom Rix <trix@redhat.com>
+
+ * emultempl/aix.em (gld*_parse_args): Add -brtl support.
+ (gld*_before_allocation): Same.
+ (gld*_create_output_section_statements): Generate
+ __rtinit if run time linking. Add librtl.a to the link.
+ (gld*_read_file): Clean.
+
+2002-02-18 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/elf64ppc.sh (OTHER_TEXT_SECTIONS): Define.
+
+2002-02-18 David O'Brien <obrien@FreeBSD.org>
+
+ * Makefile.am: Add new files earmelf_fbsd, eelf32ppc_fbsd,
+ eelf_i386_fbsd, eelf64_ia64_fbsd, eelf_x86_64_fbsd, eelf64_sparc_fbsd,
+ and eelf64alpha_fbsd.
+ * Makefile.in: Regenerate.
+ * configure.tgt(sparc64-*-freebsd, ia64-*-freebsd, i[3456]86-*-freebsd,
+ x86_64-*-freebsd, arm-*-freebsd, alpha*-*-freebsd, powerpc-*-freebsd):
+ use a FreeBSD-specific emulation rather than the psABI one.
+ * emulparams/elf_fbsd.sh (ELF_INTERPRETER_NAME): Set appropriate value
+ for all FreeBSD ELF systems.
+ * emulparams/armelf_fbsd.sh: Bridge elf_fbsd.sh and the "native" psABI
+ emulation.
+ * emulparams/elf32ppc_fbsd.sh: Likewise.
+ * emulparams/elf64_ia64_fbsd.sh: Likewise.
+ * emulparams/elf64_sparc_fbsd.sh: Likewise.
+ * emulparams/elf64alpha_fbsd.sh: Likewise.
+ * emulparams/elf_i386_fbsd.sh: Likewise.
+ * emulparams/elf_x86_64_fbsd.sh: Likewise.
+
+2002-02-18 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * po/tr.po: Updated version.
+
+2002-02-18 Alan Modra <amodra@bigpond.net.au>
+
+ * ld.texinfo (Output Section Fill): Fix amateur texinfo.
+ (FILL): Likewise.
+
+2002-02-17 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * emultempl/mmo.em (mmo_after_open): Don't call
+ _bfd_mmix_check_all_relocs when producing ELF output.
+
+2002-02-15 Richard Henderson <rth@redhat.com>
+
+ * emulparams/elf64alpha.sh (NOP): Adjust for big-endian
+ definition. Emit a unop+nop pair.
+
+2002-02-15 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * emultempl/mmix-elfnmmo.em (mmix_after_allocation): Also check
+ for presence of .MMIX.reg_contents.linker_allocated before early
+ exit.
+
+ * NEWS: Mention support for MMIX.
+
+2002-02-15 Alan Modra <amodra@bigpond.net.au>
+
+ Support arbitrary length fill patterns.
+ * ld.texinfo (Output Section Fill): Describe fill expressions.
+ (FILL): Refer to the above.
+ * ldexp.h (etree_value_type): Add "str" field.
+ (union etree_union): Add "str" to "value" struct.
+ (exp_bigintop): Declare.
+ (exp_get_fill): Declare.
+ * ldexp.c: Include "safe-ctype.h".
+ (exp_intop): Set value.str to NULL.
+ (exp_bigintop): New function.
+ (new_rel): Pass in "str", and set new.str from it.
+ (new_rel_from_section): Set new.str to NULL.
+ (fold_name): Adjust calls to new_rel.
+ (exp_fold_tree): Likewise.
+ (exp_get_fill): New function.
+ * ldgram.y (struct big_int bigint, fill_type *fill): New.
+ (INT): Returns a "bigint". Adjust all code handling INTs.
+ (fill_opt): Returns a "fill".
+ (fill_exp): Split out of fill_opt, use for FILL.
+ * ldlang.h (struct _fill_type): New.
+ (fill_type): Move typedef to ldexp.h.
+ (lang_output_section_statement_type): "fill" is now a pointer.
+ (lang_fill_statement_type): Likewise.
+ (lang_padding_statement_type): Likewise.
+ (lang_add_fill): Now takes a "fill_type *" param.
+ (lang_leave_output_section_statement): Likewise.
+ (lang_do_assignments): Likewise.
+ (lang_size_sections): Likewise.
+ (lang_leave_overlay_section): Likewise.
+ (lang_leave_overlay): Likewise.
+ * ldlang.c: Include ldgram.h after ldexp.h.
+ (lang_output_section_statement_lookup): Adjust for fill_type change.
+ (print_fill_statement): Likewise.
+ (print_padding_statement): Likewise.
+ (insert_pad): Now takes a "fill_type *" arg.
+ (size_input_section): Likewise.
+ (lang_size_sections_1): Likewise.
+ (lang_size_sections): Likewise.
+ (lang_do_assignments): Likewise.
+ (lang_add_fill): Likewise.
+ (lang_leave_output_section_statement): Likewise.
+ (lang_leave_overlay_section): Likewise.
+ (lang_leave_overlay): Likewise.
+ Adjust all callers of the above function.
+ * ldlex.l: Include ldgram.h after ldexp.h. Allow hex numbers
+ starting with "0X" as well as "0x". Return bigint.str for hex
+ numbers starting with "0x" or "0X", zero bigint.str otherwise.
+ Always use base 16 for numbers starting with "$".
+ * ldmain.c: Include ldgram.h after ldexp.h.
+ * ldwrite.c (build_link_order): Use bfd_data_link_order in place
+ of bfd_fill_link_order.
+ * pe-dll.c: Adjust lang_do_assignments calls.
+ * emultempl/elf32.em: Likewise.
+ * emultempl/hppaelf.em: Likewise.
+ * emultempl/ppc64elf.em: Likewise.
+ * emultempl/beos.em: Include ldgram.h after ldexp.h, adjust
+ lang_add_assignment call.
+ * emultempl/pe.em: Likewise.
+
+2002-02-14 Phil Edwards <pme@gcc.gnu.org>
+
+ * ld.texinfo (VERSION scripts): Symbol names are globbing patterns.
+ * ldgram.y (lang_new_vers_regex): Rename to lang_new_vers_pattern;
+ the pattern in question is not a regexp.
+ * ldlang.c: Likewise.
+ * ldlang.h: Likewise.
+ * ldlex.l (V_IDENTIFIER): Allow '[', ']', '-', '!', and '^' also.
+
+2002-02-12 Jakub Jelinek <jakub@redhat.com>
+
+ * ldlex.l (DATA_SEGMENT_ALIGN, DATA_SEGMENT_END): New tokens.
+ * ldgram.y (DATA_SEGMENT_ALIGN, DATA_SEGMENT_END): New tokens.
+ (exp): Add DATA_SEGMENT_ALIGN (exp, exp) and DATA_SEGMENT_END (exp).
+ * ldexp.c (exp_data_seg): New variable.
+ (exp_print_token): Handle DATA_SEGMENT_ALIGN and DATA_SEGMENT_END.
+ (fold_binary): Handle DATA_SEGMENT_ALIGN.
+ (exp_fold_tree): Handle DATA_SEGMENT_END.
+ Pass allocation_done when recursing instead of hardcoding
+ lang_allocating_phase_enum.
+ * ldexp.h (exp_data_seg): New.
+ * ldlang.c (lang_size_sections_1): Renamed from lang_size_sections.
+ (lang_size_sections): New.
+ * ld.texinfo (DATA_SEGMENT_ALIGN, DATA_SEGMENT_END): Document.
+ * scripttempl/elf.sc: Use DATA_SEGMENT_ALIGN and DATA_SEGMENT_END
+ if COMMONPAGESIZE is defined.
+ * emulparams/elf_i386.sh (COMMONPAGESIZE): Set to 4K.
+ * emulparams/elf32_sparc.sh (COMMONPAGESIZE): Set to 8K.
+ * emulparams/elf64_sparc.sh (COMMONPAGESIZE): Set to 8K.
+ * emulparams/elf64alpha.sh (COMMONPAGESIZE): Set to 8K.
+ * emulparams/elf64_ia64.sh (COMMONPAGESIZE): Set to 16K for shared
+ libraries only.
+
+2002-02-11 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.in: Regenerate.
+
+2002-02-10 Daniel Jacobowitz <drow@mvista.com>
+
+ * lexsup.c: Remove strtoul declaration.
+
+2002-02-10 Daniel Jacobowitz <drow@mvista.com>
+
+ * ldmain.c: Add prototype for main ().
+ * lexsup.c: Guard declaration of strtoul with HAVE_STDLIB_H.
+ * emultempl/lnk960.em (lnk960_choose_target): Function should
+ take two arguments.
+
+2002-02-10 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (entry_section): New initialised variable.
+ (lang_finish): Use it.
+ * ldlang.h (entry_section): Declare.
+ * emultempl/ppc64elf.em (gld${EMULATION_NAME}_finish): Set
+ entry_section to ".opd".
+
+2002-02-09 Chris Demetriou <cgd@broadcom.com>
+
+ * ld.texinfo (Options): Add back in -nostdlib documentation,
+ which had been inadvertently removed.
+
+2002-02-09 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * emultempl/mmix-elfnmmo.em (mmix_after_allocation): Adjust
+ register section vma to a sane value after emitting error. Make
+ fatal conditions cause program exit when emitting message.
+
+2002-02-08 Ivan Guzvinec <ivang@opencores.org>
+
+ * configure.tgt: Add or32-*-rtems target.
+
+2002-02-08 Alexandre Oliva <aoliva@redhat.com>
+
+ Contribute sh64-elf.
+ 2002-01-24 Alexandre Oliva <aoliva@redhat.com>
+ * emulparams/shelf32.sh (STACK_ADDR): Define as formerly defined
+ in OTHER_RELOCATABLE_SECTIONS.
+ 2002-01-18 Alexandre Oliva <aoliva@redhat.com>
+ * emulparams/shelf32.sh (STACK_ADDR): Define.
+ (OTHER_RELOCATABLE_SECTIONS): Renamed to...
+ (OTHER_SECTIONS): this. Removed stack settings.
+ * emulparams/shelf64.sh (OTHER_RELOCATABLE_SECTIONS): Do not set.
+ (OTHER_SECTIONS): Reset after sourcing shelf32.sh.
+ 2001-03-12 DJ Delorie <dj@redhat.com>
+ * emultempl/sh64elf.em (sh64_elf_$_before_allocation): Disable
+ relaxing if any shmedia or mixed sections are found.
+ 2001-03-07 DJ Delorie <dj@redhat.com>
+ * emultempl/sh64elf.em (sh64_elf_before_allocation): Pass f to
+ einfo. Gracefully decline to output to non-elf formats.
+ 2001-03-06 Hans-Peter Nilsson <hpn@redhat.com>
+ * emulparams/shelf64.sh (OTHER_RELOCATING_SECTIONS) <.stack>:
+ Default to _end aligned to next multiple of 0x40000, plus 0x40000.
+ * emulparams/shelf32.sh: Ditto.
+ 2001-01-14 Hans-Peter Nilsson <hpn@cygnus.com>
+ * emulparams/shelf32.sh (OTHER_RELOCATING_SECTIONS): Tweak
+ comment.
+ 2001-01-10 Ben Elliston <bje@redhat.com>
+ * emulparams/shelf32.sh (OTHER_RELOCATING_SECTIONS): Avoid
+ non-portable shell constructs. From Hans-Peter Nilsson.
+ 2001-01-09 Hans-Peter Nilsson <hpn@cygnus.com>
+ * emulparams/shelf64.sh (EXTRA_EM_FILE): Define empty.
+ * Makefile.am (eshelf64.c, eshlelf64.c, eshlelf32.c): Adjust
+ dependencies to the shell script include chain.
+ * Makefile.in: Regenerate.
+ 2001-01-06 Hans-Peter Nilsson <hpn@cygnus.com>
+ * emultempl/sh64elf.em: Update and tweak comments.
+ (sh64_elf_${EMULATION_NAME}_after_allocation): Always allocate and
+ make a .cranges section SEC_IN_MEMORY.
+ 2000-12-30 Hans-Peter Nilsson <hpn@cygnus.com>
+ * emultempl/sh64elf.em
+ (sh64_elf_${EMULATION_NAME}_before_allocation): Don't stop when
+ .cranges section found to be necessary; continue and set stored
+ section contents flags for sections with non-mixed contents.
+ Use a struct sh64_section_data container and sh64_elf_section_data
+ to store contents-type flags.
+ Remove unused update of "isec".
+ (sh64_elf_${EMULATION_NAME}_after_allocation): Only process
+ sections marked SHF_SH5_ISA32_MIXED. Use sh64_elf_section_data to
+ access contents-type flags. Assert that the associated container
+ is initialized. Use that container, not elf_gp_size, to hold size
+ of linker-generated cranges contents.
+ 2000-12-18 Hans-Peter Nilsson <hpn@cygnus.com>
+ * emultempl/sh64elf.em
+ (sh64_elf_${EMULATION_NAME}_before_allocation): Exit early if
+ there's already a .cranges section. When section flag difference
+ is found, don't NULL-check cranges a second time. Tweak comments.
+ (sh64_elf_${EMULATION_NAME}_after_allocation): Use size after
+ merging, not max size, as size of ld-generated .cranges contents.
+ Don't set ELF section flags in output section. When checking for
+ needed .cranges descriptors, don't use a variable; compare
+ incoming ELF section flags directly to SHF_SH5_ISA32_MIXED. Tweak
+ comments.
+ 2000-12-18 Hans-Peter Nilsson <hpn@cygnus.com>
+ * emultempl/sh64elf.em: New file.
+ * Makefile.am (eshelf32.c, eshlelf32.c): Adjust dependencies.
+ * Makefile.in: Regenerate.
+ * emulparams/shelf32.sh (OUTPUT_FORMAT): Only set if not set.
+ (OTHER_RELOCATING_SECTIONS): Ditto.
+ (EXTRA_EM_FILE): New, set to sh64elf if not set.
+ * emulparams/shlelf32.sh: Stub out all settings except
+ OUTPUT_FORMAT. Source shelf32.sh.
+ * emulparams/shelf64.sh: Similar, but also keep ELF_SIZE and
+ OTHER_RELOCATING_SECTIONS.
+ (OTHER_RELOCATING_SECTIONS): Remove .cranges.
+ * emulparams/shlelf64.sh: Stub out all settings except
+ OUTPUT_FORMAT. Source shelf64.sh.
+ 2000-12-15 Hans-Peter Nilsson <hpn@cygnus.com>
+ * emulparams/shelf64.sh (OTHER_RELOCATING_SECTIONS): Include
+ .cranges section.
+ (DATA_START_SYMBOLS): Define, provide ___data.
+ (OTHER_READONLY_SYMBOLS): Define, provide ___rodata and align to 8
+ for consecutive .data section.
+ (OTHER_GOT_SECTIONS): Define, align to 8 for consecutive .bss
+ section after .data section.
+ * emulparams/shlelf64.sh: Ditto.
+ * emulparams/shelf32.sh: Ditto.
+ (ALIGNMENT): Define to 8.
+ * emulparams/shelf32.sh: Ditto.
+ 2000-12-12 Hans-Peter Nilsson <hpn@cygnus.com>
+ * configure.tgt (sh64-*-elf*): Assign targ_extra_libpath to get
+ built-in linker scripts.
+ 2000-11-30 Hans-Peter Nilsson <hpn@cygnus.com>
+ * emulparams/shlelf64.sh: New.
+ * emulparams/shelf64.sh: New.
+ * configure.tgt (sh64-*-elf*): Add shelf64 and shlelf64 to
+ targ_extra_emuls.
+ * Makefile.am: Add support for shlelf64 and shelf64.
+ * Makefile.in: Regenerate.
+ 2000-11-29 Hans-Peter Nilsson <hpn@cygnus.com>
+ * configure.tgt (sh64-*-elf*): Add shelf as default.
+ Add shlelf to targ_extra_emuls.
+ 2000-11-24 Hans-Peter Nilsson <hpn@cygnus.com>
+ * emulparams/shelf32.sh: New file.
+ * emulparams/shlelf32.sh: New file.
+ * Makefile.am: Add support for shlelf32 and shelf32.
+ * configure.tgt: Map sh64-*-elf* to shlelf32 and shelf32.
+ * Makefile.in: Regenerate.
+
+2002-02-05 Hans-Peter Nilsson <hp@axis.com>
+
+ * ldlang.c (lang_reset_memory_regions): Rename from
+ reset_memory_regions. Change all callers. Make public.
+ * ldlang.h (lang_reset_memory_regions): Prototype.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_finish): Call
+ lang_reset_memory_regions before lang_size_sections.
+ * emultempl/hppaelf.em (hppaelf_layout_sections_again): Likewise.
+ * emultempl/ppc64elf.em (gld${EMULATION_NAME}_finish): Likewise.
+
+2002-02-04 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * emultempl/mmix-elfnmmo.em (mmix_after_allocation): Use signed
+ arithmetic when checking for too many global registers.
+
+2002-02-02 Jason Thorpe <thorpej@wasabisystems.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add ehppanbsd.o.
+ (ehppanbsd.c): New rule.
+ * Makefile.in: Regenerate.
+ * configure.tgt (hppa*-*-netbsd*): New target.
+ * emulparams/hppalinux.sh: Add comment to check other files
+ that source this file it is modified, and list which
+ files that do.
+ * emulparams/hppanbsd.sh: New file.
+
+2002-02-01 Geoffrey Keating <geoffk@redhat.com>
+
+ * scripttempl/xstormy16.sc: Don't allocate extra space for the
+ stack.
+
+2002-02-01 Hans-Peter Nilsson <hp@bitrange.com>
+
+ Support on-demand global register allocation from
+ R_MMIX_BASE_PLUS_OFFSET relocs.
+ * emultempl/mmix-elfnmmo.em (mmix_after_allocation): Rename from
+ mmix_set_reg_section_vma. Call
+ _bfd_mmix_finalize_linker_allocated_gregs.
+ (mmix_before_allocation): New function.
+ (LDEMUL_AFTER_ALLOCATION): Set to mmix_after_allocation.
+ (LDEMUL_BEFORE_ALLOCATION): Define to mmix_before_allocation.
+ * scripttempl/mmo.sc (.text): Mark .init, .fini as KEEP.
+ (.MMIX.reg_contents): Add .MMIX.reg_contents.linker_allocated
+ before .MMIX.reg_contents.
+ * emultempl/mmo.em (gldmmo_before_allocation): Define to default.
+ (mmo_after_open): New function.
+ (LDEMUL_AFTER_OPEN): Define to mmo_after_open.
+ * emulparams/elf64mmix.sh (OTHER_SECTIONS): Tweak formatting. Add
+ .MMIX.reg_contents.linker_allocated before .MMIX.reg_contents.
+
+2002-01-31 Ivan Guzvinec <ivang@opencores.org>
+
+ * emulparams/or32.sh: New file.
+ * emulparams/or32elf.sh: New file.
+ * scripttempl/or32.sc: New file.
+ * configure.tgt : Add support for or32.
+ * configure: Regenerate
+ * Makefile.am: Add support for or32.
+ * Makefile.in: Regenerate.
+ * NEWS: Mention support for or32.
+ * po/ld.pot: Regenerate.
+
+2002-01-29 Chris Demetriou <cgd@broadcom.com>
+ Mitch Lichtenberg <mpl@broadcom.com>
+
+ * emulparams/elf32bmip.sh (EXTRA_EM_FILE): Define to be mipself.
+ * emultempl/mipself.em: New file to handle MIPS ELF embedded
+ reloc creation (ld --embedded-relocs).
+
+2002-01-27 Daniel Jacobowitz <drow@mvista.com>
+
+ * configure: Regenerated.
+
+2002-01-26 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * Makefile.am (install): Depend on install-info.
+ * Makefile.in: Regenerate.
+
+2002-01-26 Christian Rose <menthos@menthos.com>
+
+ * ldmain.c (main): Use full sentences to ease translation.
+
+2002-01-26 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * po/fr.po: Updated version.
+
+2002-01-25 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * po/es.po: Updated version.
+
+2002-01-25 Andreas Jaeger <aj@suse.de>
+
+ * ldlex.l (yy_input): Correct error check.
+
+2002-01-25 Alan Modra <amodra@bigpond.net.au>
+
+ * ldmisc.c (demangle): Put back dots when string not demangled.
+
+2002-01-22 Richard Henderson <rth@redhat.com>
+
+ * emulparams/elf64alpha.sh (NOP): Use unop.
+
+2002-01-21 Andreas Jaeger <aj@suse.de>
+
+ * ldlex.l: Use fread instead of read.
+
+2002-01-21 Jason Thorpe <thorpej@wasabisystems.com>
+
+ * configure.tgt (ia64-*-netbsd*): New target.
+
+2002-01-21 H.J. Lu <hjl@gnu.org>
+
+ * emulparams/elf32btsmip.sh (SHLIB_TEXT_START_ADDR): Change to
+ 0.
+ * emulparams/elf64btsmip.sh (SHLIB_TEXT_START_ADDR): Likewise.
+
+2002-01-18 Andreas Jaeger <aj@suse.de>
+
+ * ldver.c (ldversion): Update year.
+
+2002-01-17 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * po/ld.pot: Regenerate.
+
+2002-01-16 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am (eelf64ppc.c, eelf64lppc.c): Depend on ppc64elf.em.
+ * Makefile.in: Regenerate.
+ * emulparams/elf64ppc.sh (EXTRA_EM_FILE): Define.
+ * emultempl/ppc64elf.em: New file.
+
+2002-01-15 DJ Delorie <dj@redhat.com>
+
+ * scripttempl/pe.sc: Add support for constructor priorities.
+
+2002-01-07 Marek Michalkiewicz <marekm@amelek.gda.pl>
+
+ * emulparams/avr1200.sh (DATA_START): Define as 0x60.
+ * emulparams/avr23xx.sh: Likewise.
+ * emulparams/avr4433.sh: Likewise.
+ * emulparams/avr44x4.sh: Likewise.
+ * emulparams/avr85xx.sh: Likewise.
+ * emulparams/avrmega103.sh: Likewise.
+ * emulparams/avrmega161.sh: Likewise.
+ * emulparams/avrmega603.sh: Likewise.
+ * scripttempl/elf32avr.sc: Use DATA_START instead of 0x60.
+
+2002-01-08 Alexandre Oliva <aoliva@redhat.com>
+
+ * ldlang.c (walk_wild_section): Exclude object file if enclosing
+ archive is excluded.
+
+2002-01-07 Jason Thorpe <thorpej@wasabisystems.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add eshelf_nbsd.o and eshlelf_nbsd.o.
+ (eshelf_nbsd.c): New rule.
+ (eshlelf_nbsd.c): New rule.
+ * Makefile.in: Regenerate.
+ * configure.tgt (sh*le-*-netbsdelf*): New target.
+ (sh*-*-netbsdelf*): New target.
+ * emulparams/shelf.sh: Document that shelf_nbsd.sh sources this file.
+ * emulparams/shelf_nbsd.sh: New emulation.
+ * emulparams/shlelf_nbsd.sh: New emulation.
+
+2002-01-07 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * po/es.po: New file: Spanish translation.
+ * configure.in (ALL_LINGUAS): Add es.
+ * configure: Regenerate.
+
+2002-01-06 John Marshall <jmarshall@acm.org>
+
+ * ld.texinfo: Note that --emit-relocs is currently only
+ implemented for ELF.
+
+2002-01-05 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Make use
+ of bfd_section_list_remove and bfd_section_list_insert macros.
+ * emultempl/pe.em (gld_${EMULATION_NAME}_place_orphan): Likewise.
+ * emultempl/mmo.em (mmo_place_orphan): Likewise.
+
+2002-01-04 Jason Thorpe <thorpej@wasabisystems.com>
+
+ * configure.tgt (x86_64-*-netbsd*): New target.
+
+For older changes see ChangeLog-0001
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/binutils-2.21/ld/ChangeLog-2004 b/binutils-2.21/ld/ChangeLog-2004
new file mode 100644
index 0000000..25a63a5
--- /dev/null
+++ b/binutils-2.21/ld/ChangeLog-2004
@@ -0,0 +1,1442 @@
+2004-12-28 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * emultempl/pe.em (set_pe_subsystem): Change second arg to
+ lang_add_entry to FALSE.
+
+2004-12-23 Nick Clifton <nickc@redhat.com>
+
+ PR 600
+ * emulparams/shelf.sh (.stack): Increase stack start address to
+ 0x300000.
+
+2004-12-20 Nick Clifton <nickc@redhat.com>
+
+ * ldmain.c (main): Issue an error message if -static and -shared
+ are used together.
+
+2004-12-17 Jakub Jelinek <jakub@redhat.com>
+
+ * ldexp.h (exp_data_seg): Add min_base and maxpagesize fields.
+ * ldexp.c (fold_binary) <case DATA_SEGMENT_ALIGN>: Initialize them.
+ * ldlang.c (lang_size_sections): Use them to avoid wasting virtual
+ address space at DATA_SEGMENT_ALIGN. Fix computation of expected
+ PT_GNU_RELRO segment end.
+
+2004-12-14 P.J. Darcy <darcypj@us.ibm.com>
+
+ * configure.tgt: Add s390x-ibm-tpf support.
+
+2004-12-16 Martin Kögler <mkoegler@auto.tuwien.ac.at>
+
+ * ldmisc.c (vfinfo): Handle the case where %B is passed a NULL
+ BFD.
+
+2004-12-07 Ben Elliston <bje@gnu.org>
+
+ * ldemul.h: Forward declare struct option.
+
+2004-12-01 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * scripttempl/pe.sc (.data): Add .jcr subsection.
+
+2004-11-30 Paul Brook <paul@codesourcery.com>
+
+ * emultempl/armelf.em: Ignore -p and -no-pipeline-knowledge.
+
+2004-11-30 Tero Niemela <tero_niemela@yahoo.com>
+
+ * Makefile.am: Change LOCALEDIR to $(datadir)/share.
+ * Makefile.in: Regenerate.
+
+2004-11-26 Melissa Mears <asterisk@graces.dricas.com>
+
+ * emultempl/pe.em: Add --subsystem:xbox as well as
+ --subsystem:%d.
+ * ld.texinfo: (ld_options): Document acceptance of subsystem xbox
+ and numeric subsystems.
+
+2004-11-24 Alan Modra <amodra@bigpond.net.au>
+
+ * ldexp.c (fold_name): Correct PR 338 fix.
+
+2004-11-19 Mark Mitchell <mark@codesourcery.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add earmelf_linux_eabi.o.
+ (earmelf_linux_eabi.c): New target.
+ * configure.tgt (arm*-*-linux-gnueabi): Handle it.
+ * emulparams/armelf_linux_eabi.sh: New file.
+ * Makefile.in: Regenerated.
+
+2004-11-19 Nick Clifton <nickc@redhat.com>
+
+ PR 518
+ * ld.texinfo (MEMORY): Update the descriptions of the ORIGIN and
+ LENGTH fields in the MEMORY command, to explicitly state that
+ symbols cannot be used in their expressions.
+
+2004-11-19 Jon Beniston <jon@beniston.com>
+
+ * ld/ldlex.l: Allow ORIGIN and LENGTH in EXPRESSION.
+ * ld/ldgram.y: Add ORIGIN and LENGTH expressions.
+ * ld/ldexp.c (fold_name): Implement LENGTH() and ORIGIN() functions
+ which return the length and origin of a memory.
+ * ld/ld.texinfo: Document LENGTH() and ORIGIN() functions.
+ * NEWS: Mention support for ORIGIN and LENGTH operators.
+
+2004-11-17 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * emultempl/armelf.em (arm_elf_set_bfd_for_interworking): Don't use
+ a dynamic object for stubs.
+
+2004-11-04 Paul Brook <paul@codesourcery.com>
+
+ * ld.texinfo: Document --default-imported-symver.
+ * ldmain.c (main): Set link_info.default_imported_symver.
+ * lexsup.c (option_values): Add OPTION_DEFAULT_IMPORTED_SYMVER.
+ (ld_options): Add --default-imported-symver.
+ (parse_args): Handle OPTION_DEFAULT_IMPORTED_SYMVER.
+
+2004-11-08 Inderpreet Singh <inderpreetb@nioda.hcltech.com>
+ Vineet Sharma <vineets@noida.hcltech.com>
+
+ * Makefile.am: Add entries for new maxq-coff target.
+ * Makefile.in: Regenerate.
+ * configure.tgt: Add support for maxq.
+ * emulparams/maxqcoff.sh: New File.
+ * scripttempl/maxqcoff.sc: New linker script for target maxq.
+ * NEWS: Mention the new target.
+
+2004-11-04 Daniel Jacobowitz <dan@debian.org>
+
+ * Makefile.am (ALL_EMULATIONS): Remove earmelf_oabi.o.
+ (earmelf_oabi.c): Remove rule.
+ * configure.tgt: Remove arm-*-oabi and thumb-*-oabi.
+ * emulparams/armelf_oabi.sh, emultempl/armelf_oabi.em: Delete files.
+ * Makefile.in: Regenerated.
+
+2004-11-04 Hans-Peter Nilsson <hp@axis.com>
+
+ * configure.tgt (crisv32-*-*): Handle like cris-*-* for non-aout.
+ * emulparams/criself.sh (INIT_START): Remove emitted "push srp".
+ (FINI_START): Ditto.
+ (INIT_END): Remove emitted "jump [sp+]".
+ (FINI_END): Ditto.
+
+2004-11-04 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc64elf.em (no_tls_opt): Rename from notlsopt.
+ (no_opd_opt, no_toc_opt): New static vars.
+ (ppc_before_allocation): Don't edit opt if no_opd_opt. Call
+ ppc64_elf_edit_toc.
+ (OPTION_NO_OPD_OPT, OPTION_NO_TOC_OPT): Define.
+ (PARSE_AND_LIST_LONGOPTS): Add no-opd-optimize and no-toc-optimize.
+ (PARSE_AND_LIST_OPTIONS): Describe new options.
+ (PARSE_AND_LIST_ARGS_CASES): Handle them.
+
+2004-10-27 Nick Clifton <nickc@redhat.com>
+
+ * emultempl/alphaelf.em (alpha_after_parse): Add extra, NULL,
+ parameter to invocation of lang_section_start.
+ * emultempl/aix.em (_handle_option): Likewise.
+
+ * Makefile.am (eelf64alpha.c, eelf64alpha_fbsd.c,
+ eelf64alpha_nbsd.c): Add dependency upon emultempl/alphaelf.em.
+ * Makefile.in: Regenerate.
+
+2004-10-26 Mark Mitchell <mark@codesourcery.com>
+
+ * emulparams/armelf.sh (OTHER_READONLY_SECTIONS): Do not emit
+ __exidx_{start,end} when not relocating.
+
+2004-10-25 Mark Mitchell <mark@codesourcery.com>
+
+ * Makefile.in (earmsymbian.c): Depend on armbpabi.sc, not elf.sc.
+ * ldexp.h (segment_type): New type.
+ (segments): New variable.
+ * ldexp.c (segments): New variable.
+ (exp_print_token): Handle SEGMENT_START.
+ (fold_binary): Likewise.
+ * ldgram.y (SEGMENT_START): Declare it as a token.
+ (exp): Handle SEGMENT_START.
+ * ldlang.h (lang_address_statement_type): Add segment field.
+ (lang_section_start): Change prototype.
+ * ldlang.c (map_input_to_output_sections): Do not process section
+ assignments if a corresponding SEGMENT_START has already been
+ seen.
+ (lang_section_start): Add segment parameter.
+ * ldlex.l (SEGMENT_START): Add it.
+ * lexsup.c (set_segment_start): New function.
+ (parse_args): Use it for -Tbss, -Tdata, and -Ttext.
+ * ld.texinfo (SEGMENT_START): Document it.
+ * emulparams/armsymbian.sh (EMBEDDED): Set it.
+ * scripttempl/armbpabi.sc: Use SEGMENT_START to control segment
+ base addresses. Do not map relocations.
+ * NEWS: Mention SEGMENT_START.
+
+2004-10-26 Paul Brook <paul@codesourcery.com>
+
+ * ld.texinfo: Document --default-symver.
+ * ldmain.c (main): Set link_info.create_default_symver.
+ * lexsup.c (enum option_values): Add OPTION_DEFAULT_SYMVER.
+ (ld_options): Add default-symver.
+ (parse_args): Handle OPTION_DEFAULT_SYMVER.
+
+2004-10-24 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * pe-dll.c (process_def_file): Don't export all symbols by default if
+ building a position-independent executable.
+
+2004-10-21 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR 463
+ * ldmain.c (reloc_overflow): Accept a pointer to struct
+ bfd_link_hash_entry. Report symbol location for relocation
+ overflow.
+
+2004-10-21 H.J. Lu <hongjiu.lu@intel.com>
+
+ * genscripts.sh (libpath.exp): Really generate for first
+ emulation only.
+
+2004-10-19 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_after_open): Simplify
+ comparison and replacement of filenames.
+
+2004-10-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR 459
+ * ldlang.c (load_symbols): Use the same -Bdynamic/-Bstatic
+ option on linker script as the one for linker script.
+
+2004-10-16 Daniel Jacobowitz <dan@debian.org>
+
+ * ldlang.c (struct excluded_lib, excluded_libs, add_excluded_libs)
+ (check_excluded_libs): New.
+ (load_symbols): Call check_excluded_libs.
+ * ldlang.h (add_excluded_libs): New prototype.
+ * emultempl/elf32.em (OPTION_EXCLUDED_LIBS): Define.
+ (gld${EMULATION_NAME}_add_options): Add --exclude-libs.
+ (gld${EMULATION_NAME}_handle_option): Handle --exclude-libs.
+ * ld.texinfo (Command Line Variables): Document --exclude-libs.
+ (Options Specific to i386 PE Targets): Remove --exclude-libs.
+
+2004-10-15 Alan Modra <amodra@bigpond.net.au>
+
+ * ldexp.c (exp_fold_tree): Don't immediately exit ld on a
+ failing link script assert.
+
+ * ldctor.c (ldctor_add_set_entry): Fix comment typo.
+
+2004-10-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR 445
+ * emulparams/elf64_ia64.sh (SMALL_DATA_CTOR): Set.
+ (SMALL_DATA_DTOR): Set.
+ * emulparams/elf64_ia64_fbsd.sh (SMALL_DATA_CTOR): Unset.
+ (SMALL_DATA_DTOR): Unset.
+ * scripttempl/elf.sc: If SMALL_DATA_CTOR is set, move .ctors
+ after .data. If SMALL_DATA_DTOR is set, move .dtors after
+ .data.
+
+2004-10-14 Alan Modra <amodra@bigpond.net.au>
+
+ PR 63
+ * ldlang.h (lang_output_section_statement_type): Make "next" a
+ struct lang_output_section_statement_struct *.
+ (struct orphan_save): Move from elf32.em. Add "name" and "flags".
+ (lang_output_section_find_by_flags, lang_insert_orphan): Declare.
+ * ldlang.c (lang_output_section_find_1): Adjust for changed
+ output_section_statement "next".
+ (strip_excluded_output_sections): Likewise.
+ (lang_record_phdrs): Likewise.
+ (lang_output_section_find_by_flags): New function.
+ (output_prev_sec_find): Move from pe.em. Adjust iterator.
+ (lang_insert_orphan): New function. Tail end of elf32.em's
+ place_orphan merged with that from pe.em. Allow bfd_section to
+ be placed first. New heuristic for placing new output section
+ statement in existing script, and accompanying split of __start
+ symbol alignment into a separate assignment to dot.
+ (lang_add_section): Consistently use output->bfd_section rather than
+ an alias, section->output_section.
+ (map_input_to_output_sections): Rename overly long arg. Move
+ initialization of data_statement output section to here..
+ (lang_check_section_addresses): ..from here.
+ (print_assignment): Correct printing of etree_assert.
+ (print_all_symbols): Don't bomb if userdata is NULL.
+ (IGNORE_SECTION): Rearrange.
+ * emultempl/elf32.em (output_rel_find): Adjust interator.
+ (output_prev_sec_find): Delete.
+ (struct orphan_save): Delete.
+ (gld${EMULATION_NAME}_place_orphan): Cater for zero bfd_section
+ flags without creating a duplicate output section statement.
+ Revise code holding history of various orphan section placements.
+ Allow orphan sections to place before script specified output
+ sections. Call lang_output_section_find_by_flags when placement
+ by name fails. Use lang_insert_orphan.
+ * emultempl/mmo.em (output_prev_sec_find): Delete.
+ (struct orphan_save): Delete.
+ (mmo_place_orphan): Revise code holding history of orphan placement.
+ Allow orphans to place before existing output sections. Use
+ lang_insert_orphan.
+ * emultempl/pe.em (output_prev_sec_find): Delete.
+ (struct orphan_save): Delete.
+ (gld_${EMULATION_NAME}_place_orphan): Revise to suit use of
+ lang_insert_orphan.
+
+2004-10-13 Mark Mitchell <mark@codesourcery.com>
+
+ * scripttempl/armbpabi.sc: Do not put .gnu.version.* into a
+ loadable segment.
+
+2004-10-13 Alan Modra <amodra@bigpond.net.au>
+
+ PR 44
+ * ldcref.c (check_section_sym_xref): Delete.
+ (check_local_sym_xref): New function.
+ (check_nocrossrefs): Adjust call.
+ * emultempl/pe.em (struct orphan_save): Add os_tail.
+ (place_orphan): Backport assorted fixes from elf32.em.
+
+2004-10-12 Bob Wilson <bob.wilson@acm.org>
+
+ * emultempl/xtensaelf.em: Use ISO C90 formatting.
+
+2004-10-11 Jakub Jelinek <jakub@redhat.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_parse_ld_so_conf): Avoid
+ getline for portability.
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_ld_so_conf): New structure.
+ (gld${EMULATION_NAME}_parse_ld_so_conf,
+ gld${EMULATION_NAME}_parse_ld_so_conf_include): New functions.
+ (gld${EMULATION_NAME}_check_ld_so_conf): Use them.
+
+2004-10-11 Alan Modra <amodra@bigpond.net.au>
+
+ PR 423
+ * ldfile.c (ldfile_try_open_bfd): Ensure dynamic objects are
+ rejected when linking statically.
+
+2004-10-08 Daniel Jacobowitz <dan@debian.org>
+
+ * configure.tgt: Include elf_x86_64 for i[3-7]86-*-solaris2*.
+
+2004-10-07 Bob Wilson <bob.wilson@acm.org>
+
+ * ld.texinfo (Xtensa): Describe new linker relaxation to optimize
+ assembler-generated longcall sequences. Describe new --size-opt
+ option.
+ * emulparams/elf32xtensa.sh (OTHER_SECTIONS): Add .xt.prop section.
+ * emultempl/xtensaelf.em (remove_section,
+ replace_insn_sec_with_prop_sec, replace_instruction_table_sections,
+ elf_xtensa_after_open): New.
+ (OPTION_OPT_SIZEOPT, OPTION_LITERAL_MOVEMENT,
+ OPTION_NO_LITERAL_MOVEMENT): Define.
+ (elf32xtensa_size_opt, elf32xtensa_no_literal_movement): New globals.
+ (PARSE_AND_LIST_LONGOPTS): Add size-opt and [no-]literal-movement.
+ (PARSE_AND_LIST_OPTIONS): Add --size-opt.
+ (PARSE_AND_LIST_ARGS_CASES): Handle OPTION_OPT_SIZEOPT,
+ OPTION_LITERAL_MOVEMENT, and OPTION_NO_LITERAL_MOVEMENT.
+ (LDEMUL_AFTER_OPEN): Set to elf_xtensa_after_open.
+ * scripttempl/elfxtensa.sc: Update with changes from elf.sc.
+ * Makefile.am (eelf32xtensa.c): Update dependencies.
+ * Makefile.in: Regenerate.
+
+2004-10-07 Jeff Baker <jbaker@qnx.com>
+
+ * lexsup.c: Handle --warn-shared-textrel option.
+ (ld_options): Restore alpha sorting of options.
+ * ldmain.c (main): Initialise warn_shared_info field to FALSE.
+ * ld.texinfo: Add documentation for --warn-shared-textrel.
+ * NEWS: Added mention of --warn-shared-textrel option.
+
+2004-10-05 Tomer Levi <Tomer.Levi@nsc.com>
+
+ * emultempl/crxelf.em (disable_relaxation): Add.
+ (crxelf_before_allocation): Enable --relax option by default.
+ (PARSE_AND_LIST_PROLOGUE): Add OPTION_NO_RELAX.
+ (PARSE_AND_LIST_LONGOPTS, PARSE_AND_LIST_OPTIONS): Add --no-relax.
+ (PARSE_AND_LIST_ARGS_CASES): Handle OPTION_NO_RELAX.
+
+2004-10-04 H.J. Lu <hongjiu.lu@intel.com>
+
+ * NEWS: Mention SORT_BY_NAME, SORT_BY_ALIGNMENT and
+ --sort-section name|alignment.
+
+ * ld.texinfo: Document SORT_BY_NAME, SORT_BY_ALIGNMENT and
+ --sort-section name|alignment.
+
+ * ld.h (sort_type): New enum.
+ (wildcard_spec): Change the type of `sorted' to sort_type.
+
+ * ldgram.y (SORT): Removed.
+ (SORT_BY_NAME): Added.
+ (SORT_BY_ALIGNMENT): Added.
+ (wildcard_spec): Updated `sorted'. Handle SORT_BY_NAME and
+ SORT_BY_ALIGNMENT.
+ (input_section_spec_no_keep): Updated `sorted'.
+ (statement): Replace SORT with SORT_BY_NAME.
+
+ * ldlang.c (compare_section): New function to compare 2
+ sections with different sorting schemes.
+ (wild_sort): Updated. Use compare_section.
+ (update_wild_statements): New function.
+ (lang_process): Call update_wild_statements before
+ map_input_to_output_sections.
+
+ * ldlex.l (SORT_BY_NAME): New.
+ (SORT_BY_ALIGNMENT): New.
+ (SORT): Return SORT_BY_NAME.
+
+ * ldmain.c (sort_section): New. Defined.
+ (main): Initialize it to none.
+
+ * lexsup.c (option_values): Add OPTION_SORT_SECTION.
+ (ld_options): Add an entry for OPTION_SORT_SECTION.
+ (parse_args): Handle OPTION_SORT_SECTION.
+
+ * mri.c (mri_draw_tree): Updated `sorted'.
+
+2004-10-04 Jakub Jelinek <jakub@redhat.com>
+
+ * ldgram.y (DATA_SEGMENT_RELRO_END): Add one argument.
+ * scripttempl/elf.sc (DATA_SEGMENT_RELRO_END): Add 0 as first
+ argument.
+ (DATA_SEGMENT_RELRO_GOTPLT_END): Pass $SEPARATE_GOTPLT as first
+ and . as second argument.
+ (GOTPLT): Move $DATA_SEGMENT_RELRO_GOTPLT_END before the section.
+ * ldexp.c (fold_unary): Remove DATA_SEGMENT_RELRO_END handling here.
+ (fold_binary): Add it here. Insert padding to make relro_end
+ COMMONPAGESIZE bytes aligned. For DATA_SEGMENT_ALIGN in
+ exp_dataseg_relro_adjust phase just use previously computed
+ exp_data_seg.base.
+ * ldlang.c (lang_size_sections): Set exp_data_seg.base for
+ relro_adjust here. Call lang_size_sections_1 once more if there
+ was too big padding at DATA_SEGMENT_RELRO_END.
+ * ld.texinfo (DATA_SEGMENT_RELRO_END): Add documentation.
+
+2004-10-01 Paul Brook <paul@codesourcery.com>
+
+ * emulparams/armelf.sh: Add unwinding table sections.
+
+2004-09-30 Filip Navara <navaraf@reactos.com>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_set_symbols): Generate
+ correct base address for position independant executables.
+ * pe-dll.c (pe_dll_fill_sections): Don't mark position independant
+ executables as DLLs.
+
+2004-09-30 Paul Brook <paul@codesourcery.com>
+
+ * ld.texinfo: Document --target2=abs.
+ * emulparms/armsymbian.sh (TARGET2_TYPE): Set.
+
+2004-09-29 Nick Clifton <nickc@redhat.com>
+
+ * scripttempl/xstormy16.sc: Only perform the assignments to the
+ ROM region when not performing a relocatable link. The ROM region
+ does not start at address 0, but the sections will.
+ * Makefile.am: Fix linker script dependency for the generation of
+ eelf32xstormy16.c.
+ * Makefile.in: Regenerate.
+
+2004-09-18 Filip Navara <navaraf@reactos.com>
+
+ * emulparams/arm_epoc_pe.sh, emulparams/armpe.sh, emulparams/i386pe.sh,
+ emulparams/i386pe_posix.sh, emulparams/mcorepe.sh,
+ emulparams/mipspe.sh, emulparams/ppcpe.sh, scripttempl/pe.sc: Define
+ TARGET_PAGE_SIZE.
+ * scripttempl/pe.sc: Make the virtual address and file offset synced if
+ the alignment is lower than the target page size.
+
+2004-09-27 Filip Navara <navaraf@reactos.com>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_unrecognized_file): Allow
+ def_file_parse to handle pe_def_file if NULL and prevent crash with
+ invalid .def files.
+
+2004-09-27 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc64elf.em (gld${EMULATION_NAME}_finish): Enable
+ --emit-stub-syms automatically when --emit-relocs.
+
+2004-09-24 Paul Brook <paul@codeosurcery.com>
+
+ * scripttempl/elf.sc: Keep .preinit_array, .init_array and
+ .fini_array sections.
+
+2004-09-19 Andreas Schwab <schwab@suse.de>
+
+ * ldexp.c (fold_binary) [DATA_SEGMENT_ALIGN]: Adjust data segment
+ base so that relro end is suitably aligned.
+
+2004-09-17 Paul Brook <paul@codesourcery.com>
+
+ * ld.texinfo: Rename arm-specific section. Document --target*
+ * emulparams/armelf_fbsd.sh: Set TARGET2_TYPE.
+ * emulparams/armelf_linux.sh: Ditto.
+ * emulparams/armelf_nbsd.sh: Ditto.
+ * emultempl/armelf.em: Set default for TARGET2_TYPE.
+ (target2_type): New variable.
+ (arm_elf_before_allocation): Don't pass target1_type.
+ (arm_elf_create_output_section_statements): New function.
+ (PARSE_AND_LIST_PROLOGUE): Add OPTION_TARGET2.
+ (PARSE_AND_LIST_LONGOPTS, PARSE_AND_LIST_OPTIONS): Add --target=.
+ (PARSE_AND_LIST_ARGS_CASES): Handle OPTION_TARGET2.
+ (LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS): Set.
+ * emultempl/armelf_oabi.em (_before_allocation): Remove extra
+ argument to bfd_elf32_arm_process_before_allocation.
+
+2004-09-17 Alan Modra <amodra@bigpond.net.au>
+
+ * ldexp.c (fold_name): Update u.undef.next refs.
+ * emultempl/pe.em: Likewise.
+ * emultempl/sunos.em: Likewise.
+
+2004-09-17 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+ * config.in: Regenerate.
+ * configure: Regenerate.
+ * aclocal.m4: Regenerate.
+ * po/ld.pot: Regenerate.
+
+2004-09-16 Tomer Levi <Tomer.Levi@nsc.com>
+
+ * scripttempl/elf32crx.sc (.init): Add KEEP for section's *personality*.
+ (.fini): Likewise.
+ (.jcr): Likewise.
+
+2004-09-16 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/armelf_oabi.em (before_allocation): Add extra zero param
+ to bfd_elf32_arm_process_before_allocation call.
+
+2004-09-13 Paul Brook <paul@codesourcery.com>
+
+ * emulparams/armsymbian.sh: Set TARGET1_IS_REL.
+ * emultempl/armelf.em: Use TARGET1_IS_REL. Add --target1-{rel,abs}.
+
+2004-09-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ * configure: Regenerated with autconfig 2.13.
+
+2004-09-07 Andreas Schwab <schwab@suse.de>
+
+ * ldexp.c (fold_binary) [DATA_SEGMENT_ALIGN]: Apply data segment
+ alignment before adjusting DATA_SEGMENT_RELRO_END.
+
+2004-09-06 Mark Mitchell <mark@codesourcery.com>
+
+ * emulparams/armsymbian.sh: Use armbpabi script.
+ * scripttempl/armbpabi.sc: New script.
+
+2004-09-02 Mark Mitchell <mark@codesourcery.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add earmsymbian.o.
+ (earmsymbian.c): New target.
+ * configure.tgt: Use armsymbian emulation for arm*-*-symbianelf*.
+ * Makefile.in: Regenerated.
+ * aclocal.m4: Likewise.
+ * configure: Likewise.
+ * emulparams/armsymbian.sh: New file.
+
+2004-09-03 Tomer Levi <Tomer.Levi@nsc.com>
+
+ * scripttempl/elf32crx.sc: Edit file with comments.
+ (.init): Add new section.
+ (.fini): Likewise.
+ (.ctor): Control the linkage order.
+ (.dtor): Likewise.
+
+2004-08-27 Nick Clifton <nickc@redhat.com>
+
+ * emultempl/pe.em (after_open): Do not assume that either bfd is
+ an archive.
+
+2004-08-26 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_init): Don't compare with TRUE.
+
+2004-08-25 Dmitry Diky <diwil@spec.ru>
+
+ * emulparams/msp430all.sh: Fix RAM sizes for all targets.
+ * scripttempl/elf32msp430.sc: Add .profiler section definition.
+
+2004-08-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ldlang.c (wildcardp): Defined as a macro with strpbrk.
+
+2004-08-19 Mark Mitchell <mark@codesourcery.com>
+
+ * configure.tgt (arm*-*-symbianelf*): New target.
+ (arm*-*-eabi*): Likewise.
+
+2004-08-19 Jakub Jelinek <jakub@redhat.com>
+
+ * emultempl/ppc64elf.em (non_overlapping_opd): New variable.
+ (ppc_before_allocation): Pass it to ppc64_elf_edit_opd).
+ (OPTION_NON_OVERLAPPING_OPD): Define.
+ (PARSE_AND_LIST_OPTIONS, PARSE_AND_LIST_ARGS_CASES): Add
+ --non-overlapping-opd option.
+
+2004-08-18 Alan Modra <amodra@bigpond.net.au>
+
+ PR 338
+ * ldexp.c (fold_name): Don't call bfd_link_add_undef if the symbol
+ was already on the undefs list.
+
+2004-08-17 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc64elf.em (gld${EMULATION_NAME}_new_vers_pattern): Dot
+ prefix the symbol field too.
+
+2004-08-13 Alan Modra <amodra@bigpond.net.au>
+
+ * ldmain.c (link_callbacks): Remove "error_handler".
+ * ldmisc.c: Include elf-bfd.h.
+ (vfinfo): Sort comment. Handle %A. Use %A instead of
+ bfd_get_section_indent.
+ (error_handler): Delete.
+ * ldmisc.h (error_handler): Delete declaration.
+
+2004-08-10 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc64elf.em (gld${EMULATION_NAME}_finish): Call
+ ppc64_elf_restore_symbols.
+
+2004-08-09 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc64elf.em (gld${EMULATION_NAME}_finish): Error if
+ .toc is too large on relocatable linking.
+
+2004-08-09 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc64elf.em (ppc_after_open): Delete.
+ (LDEMUL_AFTER_OPEN): Don't define.
+
+2004-08-02 Stephane Carrez <stcarrez@nerim.fr>
+
+ * ld.texinfo (Top): Document specific options of 68HC11 and 68HC12.
+
+2004-08-01 Stephane Carrez <stcarrez@nerim.fr>
+
+ * scripttempl/elfm68hc12.sc: Align text, rodata and data section
+ on power of 2.
+
+2004-07-27 Jason Thorpe <thorpej@wasabisystems.com>
+
+ * emulparams/hppanbsd.sh (OUTPUT_FORMAT): Set to "elf32-hppa-netbsd".
+
+2004-07-26 Dmitry Diky <diwil@spec.ru>
+
+ * Makefile.am: Add new subtargets: msp430x1610, msp430x1611,
+ msp430x1612, msp430x415, msp430x417, msp430xG437, msp430xG438,
+ msp430xG439.
+ * configure.tgt: Likewise.
+ * emulparams/msp430all.sh: Likewise.
+ * Makefile.in: Regenerate.
+
+2004-07-23 Nick Clifton <nickc@redhat.com>
+
+ * emultempl/elf32.em (_place_orphan): Use an already existing
+ section name if that section does not have any flags set.
+
+2004-07-21 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ldlang.c (already_linked_hash_entry): Removed.
+ (already_linked): Likewise.
+ (already_linked_table): Likewise.
+ (section_already_linked): Call bfd_section_already_linked.
+ (lang_process): Replace already_linked_table_init with
+ bfd_section_already_linked_table_init and check return. Replace
+ already_linked_table_free with bfd_section_already_linked_table_free.
+
+2004-07-21 Nick Clifton <nickc@redhat.com>
+
+ * ldlang.c (init_os): Make sure that the newly allocated userdata
+ structure is zeroed out.
+
+2004-07-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * NEWS: Mention the new --add-needed/--no-add-needed and
+ --as-needed/--no-as-needed options.
+
+2004-07-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_load_symbols): Also
+ check the add_needed field.
+ (dt_needed): New struct.
+ (gld${EMULATION_NAME}_try_needed): Change the first argument
+ to a pointer to struct dt_needed. Check the DYN_NO_ADD_NEEDED
+ bit in the file where the DT_NEEDED entry comes from.
+ (gld${EMULATION_NAME}_search_needed): Change the second
+ argument to a pointer to struct dt_needed.
+ (gld${EMULATION_NAME}_check_ld_so_conf): Updated.
+ (gld${EMULATION_NAME}_after_open): Likewise.
+
+ * ld.texinfo: Add --add-needed document.
+ * ldlang.c (new_afile): Set p->add_needed.
+ * ldlang.h (lang_input_statement_type): Add add_needed field.
+ * ldmain.h (add_needed): Declare.
+ * ldmain.c (add_needed): New global var.
+ * lexsup.c (option_values): Add OPTION_ADD_NEEDED and
+ OPTION_NO_ADD_NEEDED.
+ (ld_options): Likewise.
+ (parse_args): Handle them.
+
+2004-07-13 Christof Petig <christof@petig-baender.de>
+
+ * emultempl/pe.em (make_import_fixup): Use bfd_get_32 to correct
+ for endian-ness of extracted addend.
+
+2004-07-13 Danny Smith <dannysmith@usesr.sourceforge.net>
+
+ * pe-dll.c (auto_export): Filter on just the import prefix,
+ "_imp_", not "_imp__".
+
+2004-07-09 Nick Clifton <nickc@redhat.com>
+
+ * configure.tgt: Change sh-sybmian-elf to sh-*-symbianelf.
+
+2004-07-06 Tomer Levi <Tomer.Levi@nsc.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add eelf32crx.o.
+ (eelf32crx.c): New target.
+ * Makefile.in: Regenerate.
+ * configure.tgt: Handle crx-*-elf*.
+ * emulparams/elf32crx.sh: New file.
+ * emultempl/crxelf.em: New file.
+ * scripttempl/elf32crx.sc: New file.
+ * NEWS: Mention new target.
+
+2004-07-06 Nick Clifton <nickc@redhat.com>
+
+ * Makefile.am: Add eshlsymbian.c.
+ * Makefile.in: Regenerate.
+ * configure.tgt: Add sh*-symbian-elf target.
+ * emulparams/shlsymbian.sh: New file. Configure the
+ sh-symbian-elf linker scripts.
+ * scripttemp/elf32sh-symbian.sc: New file. Linker script
+ template for the sh-symbian-elf target.
+
+2004-07-05 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ * emulparams/hppa64linux.sh: Define PLT_BEFORE_GOT.
+ * emulparams/hppalinux.sh: Likewise.
+ * scripttempl/elf.sc: Place .plt just before .got when .plt is in
+ data segment and PLT_BEFORE_GOT is defined.
+
+2004-07-03 Aaron W. LaFramboise <aaron98wiridge9@aaronwl.com>
+
+ * ld.texinfo (WIN32): Document PE weak symbols.
+
+2004-07-02 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * emulparams/shlelf32_linux.sh (COMMONPAGESIZE): Set to 4KB.
+
+2004-07-01 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ldmisc.c (vfinfo): Call bfd_get_section_ident to identify
+ the section.
+
+2004-06-29 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_reset_memory_regions): Save last relax pass section
+ size in rawsize.
+
+2004-06-24 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (print_output_section_statement): Don't print size before
+ relaxation.
+ (IGNORE_SECTION): Remove bfd arg. Update all callers.
+
+ * ldexp.c (fold_name): .. See below.
+ * ldlang.c (section_already_linked, print_output_section_statement,
+ print_input_section, insert_pad, size_input_section,
+ lang_check_section_addresses, lang_size_sections_1,
+ lang_size_sections, lang_do_assignments_1, lang_set_startof,
+ lang_one_common, lang_reset_memory_regions, lang_process,
+ lang_abs_symbol_at_end_of, lang_do_version_exports_section): ..
+ * ldwrite.c (build_link_order, clone_section, ds, split_sections): ..
+ * pe-dll.c (process_def_file, generate_reloc): ..
+ * emultempl/elf32.em (gld${EMULATION_NAME}_find_statement_assignment,
+ gld${EMULATION_NAME}_before_allocation): ..
+ * emultempl/mmix-elfnmmo.em (mmix_after_allocation): ..
+ * emultempl/sh64elf.em (sh64_elf_${EMULATION_NAME}_before_allocation,
+ sh64_elf_${EMULATION_NAME}_after_allocation): ..
+ * emultempl/sunos.em (gld${EMULATION_NAME}_before_allocation): ..
+ * emultempl/xtensaelf.em (ld_assign_relative_paged_dot,
+ ld_local_file_relocations_fit, ld_xtensa_insert_page_offsets): Use
+ "size" instead of "_raw_size" and "_cooked_size". Expand
+ bfd_section_size macro invocations.
+
+2004-06-22 Aaron W. LaFramboise <aaron98wiridge9@aaronwl.com>
+
+ * ld/scripttemp/pe.sc (.CRT): Define ___crt_xc_start__,
+ ___crt_xc_end__, ___crt_xi_start__, ___crt_xi_end__, ___crt_xl_start__,
+ ___crt_xp_start__, ___crt_xp_end__, ___crt_xt_start__ and
+ ___crt_xt_end__.
+ (.tls): Define ___tls_start__ and ___tls_end__.
+
+2004-06-21 Alexandre Oliva <aoliva@redhat.com>
+
+ * emulparams/elf32frvfd.sh (GENERATE_PIE_SCRIPT): Set to yes.
+
+2004-06-18 Adam Nemet <anemet@lnxw.com>
+
+ * configure.in: Set EXTRA_SHLIB_EXTENSION to .a for LynxOS.
+ * configure: Regenerate.
+
+2004-06-15 Jakub Jelinek <jakub@redhat.com>
+
+ * scripttempl/elf.sc: Readd KEEP and .gcc_except_table.* to
+ .gcc_except_table output sections lost accidentally with
+ -z relro patch.
+
+2004-06-15 Alan Modra <amodra@bigpond.net.au>
+
+ * ldwrite.c (build_link_order): Use bfd_get_section_size
+ instead of bfd_get_section_size_before_reloc or _raw_size.
+ * pe-dll.c (process_def_file): Likewise.
+
+2004-06-14 Alan Modra <amodra@bigpond.net.au>
+
+ From Richard Wirth <r.wirth@wirthware.de>
+ * ldlang.c (lang_finish): Don't free lang_definedness_table.
+
+2004-05-29 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (gc_section_callback): Move SEC_EXCLUDE twiddles..
+ (lang_gc_sections): .. to a LANG_FOR_EACH_INPUT_STATEMENT loop here.
+
+2004-05-28 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c: Formatting. Wrap long lines, expand bfd_get_section_flags
+ throughout file.
+ * lexsup.c: Formatting. Wrap long lines.
+ * ldwrite.c: Update copyright date.
+
+ * ldlang.c (lang_add_section): Don't twidlle SEC_EXCLUDE here.
+ (output_section_callback): Nor SEC_KEEP here.
+ (gc_section_callback): Twiddle SEC_EXCLUDE here.
+ (lang_gc_wild): Delete. Fold into..
+ (lang_gc_sections_1): ..here. Only call bfd_gc_sections when garbage
+ collecting.
+ (lang_process): Always call lang_gc_sections.
+ (lang_place_orphans): Handle SEC_EXCLUDE sections.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Remove
+ SEC_EXCLUDE code.
+
+2004-05-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Clear
+ SEC_EXCLUDE on non-SEC_DEBUGGING sections for relocatable link.
+ * ldlang.c (lang_add_section): Likewise.
+
+2004-05-26 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_add_section): Set SEC_EXCLUDE for SEC_GROUP
+ sections when doing a final link. Clear SEC_EXCLUDE when doing
+ a relocable link, except for SEC_DEBUGGING sections.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Use the
+ same condition here to drop SEC_EXCLUDE orphan sections.
+
+2004-05-25 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_process): Call bfd_merge_sections later, and
+ only when not a relocatable link.
+ (print_input_section): Handle SEC_EXCLUDE sections.
+ (size_input_section): Don't update dot on SEC_EXCLUDE sections.
+ (lang_do_assignments_1): Likewise.
+ * ldwrite.c (build_link_order): Ignore SEC_EXCLUDE input sections.
+ * emultempl/armelf.em (arm_elf_set_bfd_for_interworking): Likewise.
+ * emultempl/hppaelf.em (build_section_lists): Likewise.
+ * emultempl/ppc64elf.em (build_toc_list): Likewise.
+ (build_section_lists): Likewise.
+
+2004-05-23 Andreas Schwab <schwab@suse.de>
+
+ * ld.texinfo (Options): Fix typo in last change.
+
+2004-05-21 Andy Chittenden <achittenden@bluearc.com>
+
+ * ld.h (ld_config_type): Add new field: hash_table_size.
+ * ldmain.c: Initialise the new field to zero. If it is non-zero
+ after parsing the linker's command line call
+ bfd_hash_set_default_size.
+ * lexsup.c (option_values): Add OPTION_HASH_SIZE.
+ (ld_options): Add hash-size.
+ (parse_args): Parse --hash-size option. Allow
+ --reduce-memory-overheads to set the default hash table size as
+ well.
+ * ld.texinfo: Document the new switch. Also mention that
+ --reduce-memory-overheads can affect the hash table size.
+ * NEWS: Mention the new feature.
+
+2004-05-19 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * NEWS: Mention new linker map file generation and the
+ --reduce-memory-overheads option.
+ * ld.texinfo: Document --reduce-memory-overheads option.
+ * ld.h (map_symbol_def): New struct.
+ (struct user_section_struct, section_userdata_type): Rename to:
+ (struct lean_user_section_struct, lean_section_userdata_type).
+ (struct fat_user_section_struct, fat_section_userdata_type): New.
+ (SECTION_USERDATA_SIZE): Define.
+ (args_type): New member reduce_memory_overheads.
+ * ldlang.c (map_obstack): New static variable.
+ (init_map_userdata, print_all_symbols, sort_def_symbol): New functions.
+ (lang_map): Unless command_line.reduce_memory_overheads is set,
+ initialize lists of defined symbols for each section.
+ (print_input_section): Unless command_line.reduce_memory_overheads
+ is set, use print_all_symbols.
+ (init_os): Use lean_section_userdata_type / SECTION_USERDATA_SIZE.
+ * ldmain.c (main): Initialize command_line.reduce_memory_overheads.
+ * lexsup.c (enum option_values): Add OPTION_REDUCE_MEMORY_OVERHEADS.
+ (ld_options): Add entry for --reduce-memory-overheads.
+ (parse_args): Handle OPTION_REDUCE_MEMORY_OVERHEADS.
+
+2004-05-19 Jakub Jelinek <jakub@redhat.com>
+
+ * ldgram.y (sect_constraint): New.
+ (ONLY_IF_RO, ONLY_IF_RW): New tokens.
+ (section): Add sect_constraint. Pass additional argument
+ to lang_enter_output_section_statement.
+ * mri.c (mri_draw_tree): Pass additional argument to
+ lang_enter_output_section_statement.
+ * emultempl/pe.em (place_orphan): Likewise.
+ (output_prev_sec_find): Disregard output section statements with
+ constraint == -1.
+ * emultempl/mmo.em (output_prev_sec_find): Likewise.
+ (mmo_place_orphan): Pass additional argument to
+ lang_enter_output_section_statement.
+ * emultempl/elf32.em (output_prev_sec_find): Disregard output section
+ statements with constraint == -1.
+ (place_orphan): Pass additional argument to
+ lang_enter_output_section_statement.
+ * ldlang.c (lang_enter_overlay_section): Likewise.
+ (lang_output_section_find_1): New.
+ (lang_output_section_find): Use it.
+ (lang_output_section_statement_lookup_1): New.
+ (lang_output_section_statement_lookup): Use it.
+ (check_section_callback, check_input_sections): New.
+ (map_input_to_output_sections): Check if all input sections
+ are readonly if ONLY_IF_RO or ONLY_IF_RW was seen.
+ (strip_excluded_output_sections): Disregard output section statements
+ with constraint == -1.
+ (lang_record_phdrs): Likewise.
+ (lang_enter_output_section_statement): Add constraint argument.
+ Use lang_output_section_statement_lookup_1.
+ * ldlang.h (lang_output_section_statement_type): Add constraint
+ and all_input_readonly fields.
+ (lang_enter_output_section_statement): Adjust prototype.
+ * ldlex.l (ONLY_IF_RO, ONLY_IF_RW): New tokens.
+ * scripttempl/elf.sc (.eh_frame, .gcc_except_table): Move into text
+ segment if all input sections are readonly.
+
+2004-05-19 Adam Nemet <anemet@lnxw.com>
+
+ * scripttempl/i386lynx.sc: Remove file.
+
+2004-05-17 Bob Wilson <bob.wilson@acm.org>
+
+ * ld.texinfo (Output Section Address): Correct subsection name.
+
+2004-05-17 Adam Nemet <anemet@lnxw.com>
+
+ * configure.tgt (powerpc-*-lynxos* case): New case.
+ * configure.host (i[3-7]86-*-lynxos* case): Remove case.
+ * emulparams/ppclynx.sh: New file.
+ * emulparams/i386lynx.sh (SCRIPT_NAME): Update to LynxOS 4.0.
+ * Makefile.am (ALL_EMULATIONS): Add eppclynx.o
+ (ei386lynx.c): Update rule to LynxOS 4.0 ELF.
+ (eppclynx.c): New rule.
+ * Makefile.in: Regenerate.
+
+2004-05-13 Joel Sherrill <joel@oarcorp.com>
+
+ * configure.tgt (or32-*-rtems*): Switch to elf and
+ support versioned targets.
+
+2004-05-13 Nick Clifton <nickc@redhat.com>
+
+ * po/fr.po: Updated French translation.
+
+2004-05-11 Jakub Jelinek <jakub@redhat.com>
+
+ * genscripts.sh: Generate -z combreloc -z now -z relro scripts
+ for binaries, -shared and -pie.
+ * emulparams/elf_i386.sh (SEPARATE_GOTPLT): Set.
+ * emulparams/elf_x86_64.sh (SEPARATE_GOTPLT): Set.
+ * emulparams/elf32ppc.sh (OTHER_READWRITE_SECTIONS): Rename to...
+ (OTHER_RELRO_SECTIONS): ... this.
+ * ldlex.l (DATA_SEGMENT_RELRO_END): Add.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_handle_option): Handle
+ -z relro and -z norelro.
+ (gld${EMULATION_NAME}_list_options): Add it to usage.
+ (gld${EMULATION_NAME}_get_script): Return -z combreloc -z now
+ -z relro scripts when appropriate.
+ * scripttempl/elf.sc: Unset SEPARATE_GOTPLT if RELRO_NOW is set.
+ Create separate .got.plt section if SEPARATE_GOTPLT.
+ Move sections which are only written during relocation handling
+ to the beginning of RW segment. If NO_SMALL_DATA, move .got
+ before .data. Add DATA_SEGMENT_RELRO_END directive.
+ Include OTHER_RELRO_SECTIONS.
+ * ldgram.y (DATA_SEGMENT_RELRO_END): Add.
+ * ldexp.c (exp_print_token): Handle DATA_SEGMENT_RELRO_END.
+ (fold_unary): Likewise.
+ (fold_binary): Handle -z relro.
+ * ldexp.h (struct exp_data_seg): Add exp_dataseg_relro_seen and
+ exp_dataseg_relro_adjust phases. Add relro_end field.
+ * ldmain.c (main): Initialize link_info.relro to FALSE.
+ * ldlang.c (lang_size_sections): Handle -z relro.
+
+2004-05-08 Marek Michalkiewicz <marekm@amelek.gda.pl>
+
+ * scripttempl/avr.sc: Do not set LMA for "eeprom" section.
+
+2004-05-07 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * ldlang.c (print_padding_statement): Cast size_t to bfd_vma
+ before printing it with %W.
+
+2004-05-07 Brian Ford <ford@vss.fsi.com>
+ DJ Delorie <dj@redhat.com>
+
+ * emultempl/pe.em (real_flags): New static.
+ (OPTION_LARGE_ADDRESS_AWARE): New define.
+ (gld${EMULATION_NAME}_add_options): Add --large-address-aware option.
+ (gld_${EMULATION_NAME}_list_options): Likewise.
+ (gld${EMULATION_NAME}_handle_option): Likewise.
+ (gld_${EMULATION_NAME}_after_open): Pass real_flags to PE private data.
+ * ld.texinfo: Document it.
+ * NEWS: Mention it.
+
+2004-05-07 Brian Ford <ford@vss.fsi.com>
+
+ * NEWS: Mention DWARF 2 support for i386pe.
+
+2004-05-05 Alexandre Oliva <aoliva@redhat.com>
+
+ * emulparams/elf32frvfd.sh (OUTPUT_FORMAT): Switch to new
+ elf32-frvfdpic.
+
+2004-04-30 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (unique_section_p): Pass section parm, return true on
+ group sections.
+ (output_section_callback): Adjust.
+ * ldlang.h (unique_section_p): Update prototype.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Adjust.
+
+2004-04-30 Eric Botcazou <ebotcazou@act-europe.fr>
+
+ * ld.texinfo (--gc-sections): Remove restriction for
+ dynamic linking.
+
+2004-04-29 Brian Ford <ford@vss.fsi.com>
+
+ * scripttempl/pe.sc: Handle .debug* and .gnu.linkonce.wi.* sections
+ for DWARF 2/3. Update stab section's syntax.
+
+2004-04-29 Alan Modra <amodra@bigpond.net.au>
+
+ * pe-dll.c: Revert changes accidentally committed 2004-03-08.
+ (fill_edata): Correct pointer arithmetic.
+
+2004-04-21 Chris Demetriou <cgd@broadcom.com>
+
+ * ld.texinfo: Remove MIPS --embedded-relocs documentation.
+ * emulparams/elf32bmip.sh (EXTRA_EM_FILE): Remove definition.
+ * emulparams/mipsidt.sh (TEMPLATE_NAME): Use generic.em.
+ (EXTRA_EM_FILE): Use mipsecoff.em
+ * emulparams/mipsidtl.sh (TEMPLATE_NAME): Use generic.em.
+ (EXTRA_EM_FILE): Use mipsecoff.em
+ * emultempl/mipsecoff.em: Restructure to be included as an
+ extra emulation file.
+ (check_sections, gld${EMULATION_NAME}_after_open)
+ (gld${EMULATION_NAME}_after_allocation)
+ (gld${EMULATION_NAME}_get_script)
+ (ld_${EMULATION_NAME}_emulation): Remove
+ (gld${EMULATION_NAME}_before_parse): Rename to...
+ (mipsecoff_before_parse): This.
+ (LDEMUL_BEFORE_PARSE): Define.
+ * emultempl/mipself.em: Remove file.
+ * scripttempl/mips.sc (.rel.sdata): Do not include in output.
+ (__runtime_reloc_start, __runtime_reloc_stop): Stop providing
+ these symbols.
+ * Makefile.am: Remove dependencies on emultempl/mipself.em.
+ * Makefile.in: Regenerate.
+
+2004-04-21 Anil Paranjpe <anilp1@kpitcummins.com>
+
+ * ld.texinfo (synthesizing on H8/300): Information about linker
+ relaxation support for bit manipulation instructions and system
+ control instructions is added.
+
+2004-04-21 Hans-Peter Nilsson <hp@axis.com>
+
+ * NEWS: Mention change in DEFINED semantics.
+
+2004-04-21 Eric Botcazou <ebotcazou@act-europe.fr>
+
+ * scripttempl/elf.sc (.text): Add KEEP for .text.*personality*.
+ (.data): Add KEEP for .gnu.linkonce.d.*personality*.
+ (.gcc_except_table): Add KEEP for self and accept .gcc_except_table.*.
+
+2004-04-21 Ben Elliston <bje@au.ibm.com>
+
+ * ld.texinfo (Simple Example): Add missing punctuation.
+
+2004-04-20 Chris Demetriou <cgd@broadcom.com>
+
+ * NEWS: Note that MIPS --embedded-relocs option is deprecated.
+
+2004-04-19 Jakub Jelinek <jakub@redhat.com>
+
+ * ldlang.c (lang_do_assignments_1): Handle .tbss output section
+ specially.
+
+2004-04-18 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * scriptempl/pe.sc: Put numbered .ctors.* after .ctors
+ with default priority. Likewise for dtors.
+
+2004-04-11 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
+
+ * configure.host: Remove mips*-dec-bsd* target.
+ * configure.tgt: Likewise.
+
+2004-04-08 Richard Sandiford <rsandifo@redhat.com>
+
+ * emulparams/elf32bsmip.sh (EXTRA_EM_FILE): Define to irix.
+ * emulparams/elf64bmip.sh (EXTRA_EM_FILE): Likewise.
+ * emulparams/elf32bmipn32.sh (EXTRA_EM_FILE): Likewise.
+ * emultempl/irix.em: New file.
+ * Makefile.am (eelf32bsmip.c, eelf32bmipn32.c, eelf64bmip.c): Update
+ dependencies.
+ * Makefile.in: Regenerate.
+
+2004-04-01 Paul Brook <paul@codesourcery.com>
+
+ * emultempl/armelf.em (byteswap_code): Add.
+ (arm_elf_before_allocation): Pass extra parameter.
+ (PARSE_AND_LIST_PROLOGUE): Add OPTION_BE8.
+ (PARSE_AND_LIST_LONGOPTS, PARSE_AND_LIST_OPTIONS): Add be8.
+ (PARSE_AND_LIST_ARGS_CASES): Handle OPTION_BE8.
+ * emultempl/armelf_oabi.em: Pass extra parameter.
+ * ld.texinfo: Document --be8.
+
+2004-03-30 Stan Shebs <shebs@apple.com>
+
+ Remove long-obsolete MPW support.
+ * mpw-config.in, mpw-make.sed, mac-ld.r: Remove files.
+ * Makefile.am (mpw): Remove file-presynthesizing actions.
+ * Makefile.in: Likewise.
+ * ldfile.c (slash): Remove MPW case.
+ * ldlex.l [MPW]: Remove unused definition.
+
+2004-03-30 Galit Heller <Galit.Heller@nsc.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add eelf32cr16c.o.
+ (eelf32cr16c.c): New target.
+ * Makefile.in: Regenerate.
+ * configure.tgt: Handle cr16c-*-elf*.
+ * emulparams/elf32cr16c.sh: New file.
+ * scripttempl/elfcr16c.sc: Likewise
+ * NEWS: Mention support for new target.
+
+2004-03-30 Nick Clifton <nickc@redhat.com>
+
+ * po/sv.po: Updated Swedish translation.
+
+2004-03-27 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf32.em: Update new bfd_elf_discard_info name.
+ * emultempl/hppaelf.em: Likewise.
+ * emultempl/ppc64elf.em: Likewise.
+ * emultempl/sh64elf.em: Likewise.
+
+2004-03-25 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): Update
+ size_dynamic_sections call.
+
+2004-03-23 Alan Modra <amodra@bigpond.net.au>
+
+ PR 51.
+ * emultempl/ppc64elf.em (ppc_create_output_section_statements): Set
+ link_info.wrap_char.
+
+2004-03-20 H.J. Lu <hongjiu.lu@intel.com>
+
+ * lexsup.c (parse_args): Don't set unresolved_syms_in_objects
+ or unresolved_syms_in_shared_libs for -Bdynamic and -Bstatic.
+
+2004-03-20 Alexandre Oliva <aoliva@redhat.com>
+
+ * emulparams/elf32frvfd.sh (MAXPAGESIZE): Change to 16Kb.
+
+2004-03-19 Alan Modra <amodra@bigpond.net.au>
+
+ * config.in: Regenerate.
+ * po/ld.pot: Regenerate.
+
+2004-03-18 Alan Modra <amodra@bigpond.net.au>
+
+ * ld.texinfo: Add --as-needed doco.
+ * ldmain.c (as_needed): New global var.
+ * ldmain.h (as_needed): Declare.
+ * lexsup.c (option_values): Add OPTION_AS_NEEDED and
+ OPTION_NO_AS_NEEDED.
+ (ld_options): Likewise.
+ (parse_args): Handle them.
+ * ldlang.h (lang_input_statement_type): Add as_needed field.
+ * ldlang.c (new_afile): Set p->as_needed.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_load_symbols): New function.
+ (gld${EMULATION_NAME}_try_needed): Use bfd_elf_set_dyn_lib_class.
+ (ld_${EMULATION_NAME}_emulation): Set LDEMUL_RECOGNIZED_FILE entry.
+
+ * ldlang.c (open_input_bfds): Remove useless cast.
+ (lang_do_assignments_1): Likewise.
+ (lang_for_each_input_section): Delete.
+
+2004-03-17 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
+
+ * configure.tgt: Switch sh-*-rtems* to ELF. Add sh-*-rtemscoff*.
+
+2004-03-08 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * pe-dll.c (pe_dll_generate_implib): Skip sections marked as
+ private when building implib.
+
+2004-03-05 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ldlang.c (lang_add_section): Don't force SEC_LOAD on
+ SEC_THREAD_LOCAL.
+ (IGNORE_SECTION): Ignore .tbss sections too.
+ (lang_size_sections_1): .tbss sections do not advance dot.
+
+2004-03-01 Andreas Schwab <schwab@suse.de>
+
+ * ld.texinfo (Options): Fix example for --wrap.
+
+2004-02-25 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * pe-dll.c (fill_edata): Check that exported_symbol_sections is
+ not NULL.
+
+2004-02-23 Ian Lance Taylor <ian@wasabisystems.com>
+
+ * ldlang.c (lang_check): Use %P, not %E, in error message.
+
+2004-02-23 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ldlang.h (struct lang_output_section_state): Change processed
+ field's type.
+ * ldexp.c (check, invalid): Remove.
+ (fold_name): Move valid_p assignments. Create undefined symbol
+ when needed. Directly exampine section's processd flag.
+ * ldlang.c (lang_output_section_statement_lookup): Adjust
+ processed field init.
+ (lang_size_sections_1): Allow LOADADDR when determining section's
+ VMA. Adjust error message. Fold data statement's expr.
+ (lang_size_sections): Correctly increment lang_statement_iteration.
+
+2004-02-23 Alan Modra <amodra@bigpond.net.au>
+
+ * ldexp.c (fold_tree): Follow indirect symbols.
+
+2004-02-20 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ldgram.y (exp): Add two operand ALIGN.
+ * ldexp.c (fold_binary): Add ALIGN_K case.
+ * ld.texinfo (ALIGN): Document two operand version.
+
+2004-02-19 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ldlang.c (map_input_to_output_sections): Initialize sections
+ mentioned in a data statement expression.
+ (lang_do_assignments_1): Add data statement's expression's
+ section's vma.
+
+2004-02-18 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ldgram.y (statement_anywhere): Add assert rule.
+ * ldlang.c (exp_init_os): Add assert case.
+
+2004-02-14 Andrew Cagney <cagney@redhat.com>
+
+ * ldmain.c (remove_output): Call bfd_cache_close.
+
+2004-02-14 Richard Sandiford <rsandifo@redhat.com>
+
+ * emulparams/elf32bmipn32-defs.sh (OTHER_SECTIONS): Discard
+ .MIPS.content* and .MIPS.events* sections.
+
+2004-02-09 Daniel Jacobowitz <drow@mvista.com>
+
+ * emulparams/armelf.sh, emulparams/armelf_linux.sh: Move
+ .note.gnu.arm.ident to after allocated sections. Mark its
+ address as 0.
+
+2004-02-09 Daniel Jacobowitz <drow@mvista.com>
+
+ * emulparams/armelf_linux.sh (COMMONPAGESIZE): Set to 4KB.
+ * emulparams/elf32bmip.sh (COMMONPAGESIZE): Likewise.
+ * emulparams/elf32bmipn32.sh (COMMONPAGESIZE): Likewise.
+ * emulparams/elf32btsmipn32.sh (COMMONPAGESIZE): Likewise.
+ * emulparams/shlelf_linux.sh (COMMONPAGESIZE): Likewise.
+
+2004-02-05 Nick Clifton <nickc@redhat.com>
+
+ * emultempl/pe.em (_after_open): Fix typo in previous delta.
+
+2004-02-04 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * emultempl/pe.em (_after_open): Fix thinko in 2003-12-18 patch.
+
+2004-01-28 Alan Modra <amodra@bigpond.net.au>
+
+ * genscripts.sh: Fix typo.
+
+ * genscripts.sh: Apply $LIBPATH_SUFFIX to $tool_lib and $libdir too.
+
+2004-01-24 Jakub Jelinek <jakub@redhat.com>
+
+ * emulparams/elf64_ia64.sh: Put .rela.opd into
+ OTHER_GOT_RELOC_SECTIONS instead of OTHER_PLT_RELOC_SECTIONS.
+
+2004-01-20 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * pe-dll.c (pe_create_import_fixup): Clear WP_TEXT flag.
+ * ld.texinfo (--omagic): Note that writable text section
+ does not conform to published PE-COFF specs.
+ (--enable-auto-import): Likewise.
+
+2004-01-15 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/elf32ppc.sh (COMMONPAGESIZE): Define.
+
+2004-01-13 Nick Clifton <nickc@redhat.com>
+
+ * ldlang.c (lang_get_regions): Add extra parameter 'have_vma'
+ which if true will prevent the LMA region being used as a
+ replacement for a default VMA region.
+ (lang_leave_output_section_statement): Pass extra parameter.
+ (lang_leave_overlay): Likewise.
+ * ld.texinfo (Output Section LMA): Document that the LMA
+ region can be set to the VMA region if no VMA has been set.
+ * ldlang.h (struct lang_output_section_phdr_list): Create a
+ typedef for this type. Minor formatting fixes.
+
+2004-01-13 Nick Clifton <nickc@redhat.com>
+
+ * ldlang.c (lang_size_sections_1): If dot is advanced, then
+ assume that the section should be allocated.
+
+2004-01-13 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (IGNORE_SECTION): Don't ignore SEC_ALLOC && !SEC_LOAD
+ sections. Do ignore SEC_NEVER_LOAD sections.
+ (lang_size_sections_1): Remove test made redundant with the above.
+
+2004-01-09 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc64elf.em (ppc_before_allocation): Clear cached
+ program_header_size.
+
+2004-01-06 Alexandre Oliva <aoliva@redhat.com>
+
+ 2003-11-28 Alexandre Oliva <aoliva@redhat.com>
+ * emulparams/elf32frvfd.sh (EMBEDDED): Clear.
+ 2003-11-05 Alexandre Oliva <aoliva@redhat.com>
+ * emulparams/elf32frvfd.sh (STACK_ADDR): Unset.
+ (MAXPAGESIZE): Set to 64Kb.
+ (OTHER_READONLY_SECTIONS): Define __ROFIXUP_LIST__ and
+ __ROFIXUP_END__. Don't map .rofixup.got any more.
+ * emulparams/elf32frv.sh (NOP): Set.
+ 2003-10-31 Alexandre Oliva <aoliva@redhat.com>
+ * configure.tgt: Add frv-*-*linux*.
+ 2003-09-30 Alexandre Oliva <aoliva@redhat.com>
+ * Makefile.am (ALL_EMULATIONS): Added eelf32frvfd.o.
+ (eelf32frvfd.c): New.
+ * configure.tgt <frv-*-*>: Added it to targ_extra_emuls.
+ * emulparams/elf32frv.sh: Reverted previous two patches.
+ * emulparams/elf32frvfd.sh: New.
+ * Makefile.in: Rebuilt.
+ 2003-09-18 Alexandre Oliva <aoliva@redhat.com>
+ * emulparams/elf32frv.sh (OTHER_READONLY_SECTIONS): Added
+ .rofixup.got to .rofixup.
+ 2003-09-15 Alexandre Oliva <aoliva@redhat.com>
+ * emulparams/elf32frv.sh (MAXPAGESIZE): Make it 256KiB, not 256B.
+ (TEMPLATE_NAME, GENERATE_SHLIB_SCRIPT): Set.
+
+2004-01-05 Jakub Jelinek <jakub@redhat.com>
+
+ * emulparams/elf_s390.sh (NO_SMALL_DATA): Set to yes.
+ * emulparams/elf64_s390.sh (NO_SMALL_DATA): Set to yes.
+
+2004-01-03 Alan Modra <amodra@bigpond.net.au>
+
+ * ldexp.c (align_n): Make static.
+ * ldexp.h (align_n): Delete declaration.
+ * ldlang.h (lang_enter_output_section_statement): Remove
+ block_value param.
+ * ldlang.c (lang_enter_output_section_statement): Likewise.
+ (TO_ADDR, TO_SIZE): Define.
+ (opb_shift): New var.
+ (init_opb): New function.
+ (print_input_section): Call init_opb and use TO_ADDR.
+ (print_data_statement, print_reloc_statement): Likewise.
+ (print_padding_statement): Likewise.
+ (size_input_section): Use TO_SIZE and TO_ADDR, and global opb_shift.
+ (lang_check_section_addresses): Likewise.
+ (lang_size_sections_1): Likewise.
+ (lang_do_assignments_1): Likewise.
+ (lang_set_startof): Likewise.
+ (lang_one_common): Likewise. Combine power_of_two and opb_shift align.
+ (lang_process): Call init_opb.
+ (lang_abs_symbol_at_end_of): Use TO_ADDR and global opb_shift.
+ (lang_enter_overlay_section): Adjust
+ lang_enter_output_section_statement call.
+ * ldgram.y: Likewise.
+ * mri.c (mri_draw_tree): Likewise.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Likewise.
+ * emultempl/mmo.em (mmo_place_orphan): Likewise.
+ * emultempl/pe.em (gld${EMULATION_NAME}_place_orphan): Likewise.
+
+ * ldfile.c (ldfile_set_output_arch): Add defarch param.
+ * ldfile.h (ldfile_set_output_arch): Ditto.
+ * emultempl/aix.em (gld${EMULATION_NAME}_before_parse): Use
+ ldfile_set_output_arch.
+ * emultempl/beos.em (gld${EMULATION_NAME}_before_parse): Ditto.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_before_parse): Ditto.
+ * emultempl/linux.em (gld${EMULATION_NAME}_before_parse): Ditto.
+ * emultempl/mipsecoff.em (gld${EMULATION_NAME}_before_parse): Ditto.
+ * emultempl/pe.em (gld${EMULATION_NAME}_before_parse): Ditto.
+ * emultempl/sunos.em (gld${EMULATION_NAME}_before_parse): Ditto.
+ * ldgram.y: Adjust ldfile_set_output_arch call.
+ * emultempl/armcoff.em (gld${EMULATION_NAME}_before_parse): Ditto.
+ * emultempl/armelf.em (gld${EMULATION_NAME}_before_parse): Ditto.
+ * emultempl/armelf_oabi.em (gld${EMULATION_NAME}_before_parse): Ditto.
+ * emultempl/generic.em (gld${EMULATION_NAME}_before_parse): Ditto.
+ * emultempl/gld960c.em (gld960_set_output_arch): Ditto.
+ * emultempl/m68kcoff.em (gld${EMULATION_NAME}_before_parse): Ditto.
+ * emultempl/ticoff.em (gld${EMULATION_NAME}_before_parse): Ditto.
+
+2004-01-02 Bernardo Innocenti <bernie@develer.com>
+
+ * configure.tgt: Add m68k-uClinux target.
+
+For older changes see ChangeLog-0203
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/binutils-2.21/ld/ChangeLog-2005 b/binutils-2.21/ld/ChangeLog-2005
new file mode 100644
index 0000000..1d3db9e
--- /dev/null
+++ b/binutils-2.21/ld/ChangeLog-2005
@@ -0,0 +1,1842 @@
+2005-12-28 Jie Zhang <jie.zhang@analog.com>
+
+ * emulparams/bfin.sh: Define DATA_END_SYMBOLS and END_SYMBOLS.
+ And add a prefix '_' to ENTRY.
+ * scripttempl/elf.sc: Add END_SYMBOLS.
+
+2005-12-27 H.J. Lu <hongjiu.lu@intel.com>
+
+ * emultempl/xtensaelf.em (elf_xtensa_place_orphan): Delete.
+ (LDEMUL_PLACE_ORPHAN): Delete.
+
+2005-12-27 Leif Ekblad <leif@rdos.net>
+
+ * configure.tgt: Add support for RDOS targets.
+
+2005-12-27 Nick Clifton <nickc@redhat.com>
+
+ * po/vi.po: New Vietnamese translation.
+ * configure.in (ALL_LINGUAS): Add vi.
+ * configure: Regenerate.
+
+2005-12-27 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+
+2005-12-24 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.h (lang_output_section_statement_type): Add prev.
+ * ldlang.c (output_statement_newfunc): Set os.prev.
+ (lang_insert_orphan): Likewise.
+ (output_prev_sec_find): Use os.prev.
+
+2005-12-22 Santosh Raktawan <santoshr2@kpitcummins.com>
+
+ * ld/emulparms/h8300helf.sh (TINY_READONLY_SECTION,
+ TINY_DATA_SECTION, TINY_BSS_SECTION): Define.
+ * ld/emulparms/h8300self.sh: Likewise.
+ * ld/emulparms/h8300sxelf.sh: Likewise.
+ * ld/scripttempl/elf.sc: Add TINY_READONLY_SECTION,
+ TINY_DATA_SECTION, TINY_BSS_SECTION.
+
+2005-12-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/2065
+ * ldlang.c (output_statement_newfunc): Revert the change made on
+ 2005-11-16.
+ (output_prev_sec_find): Likewise.
+ * ldlang.h (lang_statement_list_type): Likewise.
+
+2005-12-16 Nathan Sidwell <nathan@codesourcery.com>
+
+ Second part of ms1 to mt renaming.
+ * emulparams/elf32mt.sh (ARCH, OUTPUT_FORMAT): Adjust.
+
+2005-12-14 Jakub Jelinek <jakub@redhat.com>
+
+ * scripttempl/elf.sc: Put .gnu.linkonce.d.rel.ro.* sections into
+ .data.rel.ro output section. Fix a pasto for -z nocombreloc
+ .rela.data.rel.ro section content.
+
+2005-12-12 Nathan Sidwell <nathan@codesourcery.com>
+
+ * Makefile.am (ALL_EMULATIONS): Replace ms1 files with mt files.
+ (eelf32mt.c): Update target name and dependencies.
+ * Makefile.in: Rebuilt.
+ * configure.tgt: Replace ms1 arch with mt arch.
+ * emulparams/elf32mt.sh: Renamed from elf32ms1.sh. Update
+ comment.
+
+2005-12-11 Bernhard Fischer <aldot@gcc.gnu.org>
+
+ * scripttempl/armbpabi.sc: Fix typo in comment for .ctors.
+ * scripttempl/elf.sc: Ditto.
+ * scripttempl/elf32sh-symbian.sc: Ditto.
+ * scripttempl/elf_chaos.sc: Ditto.
+ * scripttempl/elfd10v.sc: Ditto.
+ * scripttempl/elfd30v.sc: Ditto.
+ * scripttempl/elfxtensa.sc: Ditto.
+ * scripttempl/iq2000.sc: Ditto.
+ * scripttempl/xstormy16.sc: Ditto.
+
+2005-12-08 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc32elf.em (emit_stub_syms): New var.
+ (ppc_after_open): Pass it to ppc_elf_select_plt_layout.
+ (PARSE_AND_LIST_PROLOGUE <OPTION_STUBSYMS>): Define.
+ (PARSE_AND_LIST_LONGOPTS): Add emit-stub-syms.
+ (PARSE_AND_LIST_OPTIONS): Describe emit-stub-syms.
+ (PARSE_AND_LIST_OPTIONS): Handle it.
+
+2005-12-08 Alan Modra <amodra@bigpond.net.au>
+
+ * pe-dll.c (build_filler_bfd): Conform error message to standard.
+ (pe_dll_generate_implib): Use %E in error message.
+ (add_bfd_to_link): Likewise.
+ (pe_implied_import_dll): Likewise.
+
+2005-12-07 Thiemo Seufer <ths@networkno.de>
+ H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/1932
+ * emultempl/elf32.em (gld${EMULATION_NAME}_find_exp_assignment):
+ Adjust bfd_elf_record_link_assignment call.
+
+ * ldexp.c (exp_fold_tree_1): Remove call to bfd_hide_symbol.
+
+2005-11-25 Jan Beulich <jbeulich@novell.com>
+
+ * Makefile.am: Make configdoc.texi writeable before trying
+ to write to it.
+ * Makefile.in: Refresh.
+
+2005-11-24 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_output_section_find_by_flags): Add match_type param.
+ Run two passes, first using match_type, second without.
+ * ldlang.h (lang_match_sec_type_func): New typedef.
+ (lang_output_section_find_by_flags): Update prototype.
+ bfd_match_sections_by_type and lang_output_section_find_by_flags.
+ * emultempl/pe.em (place_orphan): Likewise.
+
+2005-11-24 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_insert_orphan): Skip first assignment to dot
+ in script when looking for place to insert orphan statements.
+
+2005-11-18 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/elf64ppc.sh (.tocbss): Use new section alignment scheme.
+ (.got, .toc1, .opd): Likewise.
+
+2005-11-18 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_size_sections_1): Revert 2005-11-16 functional
+ changes to section alignment.
+ * ldmisc.c (vfinfo): Handle %ld and %lu.
+
+2005-11-16 Mark Mitchell <mark@codesourcery.com>
+
+ * Makefile.am (configdoc.texi): Set top_srcdir in configdoc.texi..
+ * Makefile.in: Regenerated.
+ * ld.texinfo: Include configdoc.texi and ldver.texi in man pages.
+ Add @file documentation.
+
+2005-11-17 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.h (lang_input_section_type): Remove "ifile" field.
+ (lang_insert_orphan, lang_add_section): Update prototypes.
+ * ldlang.c (lang_insert_orphan): Remove "file" param.
+ (lang_add_section): Likewise. Update all callers.
+ (wild_sort): Get an input section's bfd via "section->owner".
+ (size_input_section): Access just_syms_flag via bfd usrdata.
+ (lang_place_orphans): Update ldemul_place_orphan call.
+ * ldemul.h (ldemul_place_orphan): Remove input_statement param.
+ (struct ld_emulation_xfer_struct <place_orphan>): Likewise.
+ * ldemul.c (ldemul_place_orphan): Likewise.
+ * ldwrite.c (build_link_order): Access just_syms_flag via bfd usrdata.
+ * emultempl/armelf.em (arm_elf_set_bfd_for_interworking): Likewise.
+ * emultempl/beos.em (sort_by_file_name): Access bfd by section->owner.
+ (sort_sections): Likewise.
+ (place_orphan): Remove "file" param. Adjust lang_add_section call.
+ * emultempl/elf32.em (place_orphan): Remove "file" param. Adjust
+ lang_add_section and lang_insert_orphan calls.
+ * emultempl/hppaelf.em (hppaelf_add_stub_section): Adjust
+ lang_add_section call.
+ (build_section_lists): Access just_syms_flag via bfd usrdata.
+ * emultempl/m68hc1xelf.em (m68hc11elf_add_stub_section): Adjust
+ lang_add_section call.
+ * emultempl/mmo.em (mmo_place_orphan): Remove "file" param. Adjust
+ lang_add_section and lang_insert_orphan calls.
+ * emultempl/pe.em (place_orphan): Likewise. Access bfd via section
+ owner.
+ * emultempl/ppc64elf.em (ppc_add_stub_section): Adjust
+ lang_add_section call.
+ (build_toc_list): Access just_syms_flag via bfd usrdata.
+ (build_section_lists): Likewise.
+ * emultempl/xtensaelf.em (elf_xtensa_place_orphan): Remove "file"
+ param. Adjust place_orphan call.
+ (ld_build_required_section_dependence): Access bfd via section owner.
+
+2005-11-16 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.h (lang_output_section_statement_type): Add prev.
+ * ldlang.c (new_afile): Always init header.type.
+ (output_statement_newfunc): Set os.prev.
+ (output_prev_sec_find): Use os.prev.
+ (lang_enter_output_section_statement): Formatting.
+ (lang_final, lang_add_target, lang_add_fill): Likewise.
+ (lang_add_data, lang_add_reloc): Likewise.
+ (lang_add_attribute): Only alloc the header.
+
+2005-11-16 Alan Modra <amodra@bigpond.net.au>
+
+ * ld.texinfo (Forced Output Alignment): Specify that this is an
+ alignment increase, not an override.
+ * ldlang.c (init_os): Set output section alignment here..
+ (lang_add_section): ..rather than here.
+ (lang_size_sections_1): Consolidate alignment code. Warn if section
+ alignment affects start address when explicit address given.
+
+2005-11-07 Steve Ellcey <sje@cup.hp.com>
+
+ * configure: Regenerate after modifying bfd/warning.m4.
+
+2005-11-07 Olaf Hering <olh@suse.de>
+
+ * ldmain.c (main): Add \n to error message.
+
+2005-11-04 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (struct output_statement_hash_entry): Don't indirect to os.
+ (output_statement_newfunc): Rewrite.
+ (lang_output_section_find_1): Merge into..
+ (lang_output_section_find): ..here.
+ (lang_output_section_statement_lookup_1): Rewrite to handle
+ multiple sections with the same name.
+ (output_statement_table_init): Commonise error message.
+ (lang_init, open_output): Likewise.
+
+2005-11-03 Paul Brook <paul@codesourcery.com>
+
+ * scripttempl/elf.sc: Add .init_array.* and .fini_array.*.
+ * scripttempl/armbpabi.sc: Make init/fini array consistent with
+ elf.sc.
+ * scripttempl/elf32sh-symbian.sc: Ditto.
+ * scripttempl/elfxtensa.sc: Ditto.
+
+2005-11-03 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.h (lang_output_section_statement_type): Rearrange. Remove
+ memspec. Make "processed" a bitfield.
+ (lang_data_statement_type, lang_reloc_statement_type): Rename
+ output_vma to output_offset.
+ * ldlang.c (lang_output_section_statement_lookup_1): Init
+ all_input_readonly. Don't init memspec.
+ (init_os): Remove incorrect comment.
+ (print_data_statement, print_reloc_statement): Adjust for
+ lang_data_statement_type and lang_reloc_statement_type change.
+ (lang_size_sections_1, lang_add_reloc): Likewise.
+ * ldwrite.c (build_link_order): Likewise.
+
+2005-10-30 Mark Mitchell <mark@codesourcery.com>
+
+ * lexsup.c (help): Document "@FILE".
+
+2005-10-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerated.
+
+ * dep-in.sed: Replace " ./" with " ".
+
+2005-10-25 Arnold Metselaar <arnold.metselaar@planet.nl>
+
+ * Makefile.am: Add support for Z80
+ * Makefile.in: Regenerated
+ * configure.tgt: Add z80-*-coff
+ * emulparams/z80.sh: New file.
+ * emultempl/z80.em: New file.
+ * scripttempl/z80.sc New file.
+ * NEWS: Mention this new support.
+
+2005-10-25 Alan Modra <amodra@bigpond.net.au>
+
+ * po/ld.pot: Regenerate.
+
+2005-10-25 Chris Metcalf <cdmetcalf@comcast.net>
+
+ * ld.texinfo (--reduce-memory-overheads): Fix typo.
+
+2005-10-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/1487
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Call
+ bfd_match_sections_by_type to match section types.
+
+ * ldlang.c (init_os): Take the input section. Call
+ bfd_init_private_section_data if the input section isn't NULL.
+ (exp_init_os): Pass NULL to init_os.
+ (map_input_to_output_sections): Likewise.
+ (lang_add_section): Pass the input section to init_os.
+
+2005-10-19 Paul Brook <paul@codesourcery.com>
+
+ * emulparams/armelf.sh: Add .ARM.attributes to OTHER_SECTIONS.
+
+2005-10-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/1467
+ * emultempl/elf32.em: Include "elf-bfd.h".
+ (gld${EMULATION_NAME}_place_orphan): Check section type and
+ don't use section name for ELF input sections.
+
+ * ld.texinfo: Document orphan section processing.
+
+ * ldlang.c (lang_output_section_find_by_flags): Match section
+ types by calling bfd_match_sections_by_type.
+
+2005-10-13 Mark Mitchell <mark@codesourcery.com>
+
+ * ld.texino: Describe double-quoted string syntax for version
+ nodes.
+ * ldlang.h (lang_new_vers_pattern): Add literal_p parameter.
+ * ldgram.y (vers_defns): Allow NAME as well as VERS_IDENTIFIER.
+ Adjust calls to lang_new_vers_pattern to pass literal_p argument.
+ * ldlang.c (lang_vers_match): Fix indentation. Do not glob-match
+ version nodes without a pattern.
+ (lang_new_vers_pattern): Add literal_p parameter.
+ (lang_do_version_exports_section): Pass it.
+
+2005-10-12 Mark Mitchell <mark@codesourcery.com>
+
+ * NEWS: Mention @file.
+
+2005-10-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/1396
+ * ldcref.c (check_refs): Accept bfd_boolean.
+ (check_local_sym_xref): Pass FALSE to check_refs.
+ (check_nocrossref): Pass TRUE to check_refs.
+ (check_refs_info): Add bfd_boolean.
+ (check_refs): Add bfd_boolean to check_refs_info.
+ (check_reloc_refs): Match relocations with proper symbols.
+
+ * ldmisc.c (vfinfo): Don't add extra ":\n".
+
+2005-10-05 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_before_parse): Set
+ default entry symbol to ENTRY here.
+ * scripttempl/pe.sc: Not here.
+
+2005-09-30 James E Wilson <wilson@specifix.com>
+
+ * ldlang.c (lang_startup): Add missing ": " to einfo call.
+
+2005-09-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerated.
+ * aclocal.m4: Likewise.
+
+2005-09-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ldlang.c (output_statement_hash_entry): New type.
+ (output_statement_table): New variable for hash table.
+ (output_statement_newfunc): New function.
+ (output_statement_table_init): Likewise.
+ (output_statement_table_free): Likewise.
+ (lang_init): Call output_statement_table_init.
+ (lang_finish): Renamed to ...
+ (lang_end): This.
+ (lang_process): Updated.
+ (lang_finish): New function.
+ (lang_output_section_find_1): Use hash table.
+ (lang_output_section_statement_lookup_1): Likewise.
+
+ * ldlang.h (lang_finish): New.
+
+ * ldmain.c (main): Call lang_finish.
+
+2005-09-30 Mark Mitchell <mark@codesourcery.com>
+
+ * ldmain.c (main): Use expandargv.
+
+2005-09-30 Catherine Moore <clm@cm00re.com>
+
+ * Makefile.am: Bfin support.
+ * Makefile.in: Regenerated.
+ * aclocal.m4: Regenerated.
+ * configure.tgt: Bfin support.
+ * emulparams/bfin.sh: New file.
+ * emultempl/bfin.em: New file.
+
+2005-09-30 Matthias Kurz <mk@baerlap.north.de>
+
+ * ld.h: Prevent the inclusion of <libintl.h> from the Solaris
+ version of <locale.h> when ENABLE_NLS is not defined.
+
+2005-09-27 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld.texinfo (ALIGN): Document it as forcing output section
+ alignment.
+
+ * ldgram.y (ALIGN): Support it for forcing output section
+ alignment.
+
+2005-09-20 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.h (lang_output_section_statement_struct): Change type of
+ "processed" to bfd_boolean.
+ * ldexp.c (fold_name): Update references to os->processed.
+ * ldlang.c (lang_output_section_statement_lookup_1): Likewise.
+ (lang_size_sections_1): Likewise.
+ (lang_reset_memory_regions): Likewise.
+
+ PR ld/1353
+ * ldlang.c (lang_size_sections_1): Process addr_tree earlier,
+ so that unused output section statements affect dot.
+
+2005-09-08 Jakub Jelinek <jakub@redhat.com>
+
+ * ld.texinfo: Document -z {no,}execstack, -z {no,}relro
+ and --eh-frame-hdr options.
+
+2005-09-07 Alan Modra <amodra@bigpond.net.au>
+
+ * ldexp.c (fold_name <SIZEOF>): Return 0 for non-existent section.
+ (exp_fold_tree_1): Print assert message only in final stage of
+ linking. Trigger assertion failure if expression cannot be
+ evaluated.
+
+2005-09-06 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/1263
+ * emultempl/elf32.em (gld${EMULATION_NAME}_load_symbols): Check
+ --just-symbols on DSO.
+
+2005-08-18 Alan Modra <amodra@bigpond.net.au>
+
+ * scripttempl/elf.sc: Remove commented out defines.
+
+2005-08-18 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/a29k.sh: Delete.
+ * emulparams/ebmon29k.sh: Delete.
+ * emulparams/sa29200.sh: Delete.
+ * Makefile.am: Remove a29k support.
+ * configure.tgt: Likewise.
+ * ld.texinfo: Likewise.
+ * Makefile.in: Regenerate.
+
+2005-08-17 Jakub Jelinek <jakub@redhat.com>
+
+ * ldgram.y (vers_defns): Don't lose pattern list before
+ extern NAME {}. Handle global, local and extern symbol names.
+
+2005-08-17 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * emultempl/sh64elf.em (sh64_elf_${EMULATION_NAME}_after_allocation):
+ Don't increment rel_count of .cranges here. Set rawsize of .cranges.
+
+2005-08-10 Nick Clifton <nickc@redhat.com>
+
+ * pe-dll.c (pe_exe_fill_sections): Call lang_reset_memory_regions
+ before lang_size_sections.
+
+2005-08-09 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/hppa64linux.sh (LARGE_SECTIONS): Remove .tbss.
+
+2005-08-08 Eric Doenges <Eric.Doenges@betty-tv.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add msp430x21xx variants.
+ Add rules to build these emulations.
+ * Makefile.in: Regenerate.
+ * configure.tgt (msp430): Add the new variants to the
+ targ_extra_emuls list.
+ * emulparams/msp430all.sh: Add entries for the msp430x21xx
+ variants.
+
+2005-08-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld.texinfo: Document PROVIDE_HIDDEN.
+
+ * ldexp.c (exp_fold_tree_1): Hide a provided symbol if asked.
+ (exp_provide): Add and set hidden.
+
+ * ldexp.h (etree_type): Add hidden to assign.
+
+ * ldgram.y (PROVIDE_HIDDEN): New.
+ * ldlex.l (PROVIDE_HIDDEN): Likewise.
+
+ * scripttempl/elf.sc: Use PROVIDE_HIDDEN on array bound
+ symbols.
+
+2005-08-05 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/elf_x86_64.sh: Revert last change.
+ * scripttempl/elf.sc (REL_LARGE, LARGE_SECTIONS): Define here.
+
+2005-08-05 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/armelf.sh (OTHER_BSS_END_SYMBOLS): Split out from
+ OTHER_END_SYMBOLS.
+ * emulparams/armelf_linux.sh: Likewise.
+ * emulparams/armnto.sh: Likewise.
+ * emulparams/criself.sh: Likewise.
+ * emulparams/elf32mcore.sh: Likewise.
+ * emulparams/criself.sh (OTHER_SYMBOLS): Define.
+ * emulparams/crislinux.sh (OTHER_SYMBOLS): Define.
+ (OTHER_END_SYMBOLS): Don't define.
+ * emulparams/elf32fr30.sh: Likewise.
+ * emulparams/elf64mmix.sh: Likewise.
+ * emulparams/hppa64linux.sh: Likewise.
+ * emulparams/m32relf.sh: Likewise.
+ * emulparams/vxworks.sh: Likewise.
+ * scripttempl/armbpabi.sc (OTHER_BSS_SECTIONS): Delete.
+ (OTHER_BSS_END_SYMBOLS): Add.
+ (OTHER_END_SYMBOLS): Move before current end sym definitions.
+ (OTHER_SYMBOLS): Replace OTHER_END_SYMBOLS near end of script.
+ * scripttempl/elf.sc: Likewise.
+ * scripttempl/elf32sh-symbian.sc: Likewise.
+ * scripttempl/elf_chaos.sc: Likewise.
+ * scripttempl/elfxtensa.sc: Likewise.
+ * scripttempl/iq2000.sc: Likewise.
+ * scripttempl/xstormy16.sc: Likewise.
+
+ * scripttempl/elf.sc (LBSS, LARGE_SECTIONS): Delete.
+ (REL_LDATA, REL_LBSS, REL_LRODATA): Delete.
+ (REL_LARGE, LARGE_SECTIONS): Add.
+ * emulparams/elf_x86_64.sh (LARGE_SECTIONS): Define as script text.
+ (REL_LARGE): Define.
+ * emulparams/hppa64linux.sh (OTHER_BSS_SECTIONS): Don't define.
+ (LARGE_SECTIONS): Define.
+ * emulparams/hppa64linux.sh (OTHER_BSS_SECTIONS): Don't define.
+ (LARGE_SECTIONS): Define.
+
+2005-08-04 Alan Modra <amodra@bigpond.net.au>
+
+ * ldemul.c (ldemul_do_assignments, do_assignments_default): Delete.
+ * ldemul.h (ldemul_do_assignments, do_assignments_default): Delete.
+ (struct ld_emulation_xfer_struct): Remove do_assignments field.
+ * ldlang.c (lang_do_assignments): Don't call ldemul_do_assignments.
+ * emulparams/elf32ppc.sh (SDATA_START_SYMBOLS): New.
+ (SDATA2_START_SYMBOLS, SBSS_START_SYMBOLS, SBSS_END_SYMBOLS): New.
+ * emultempl/aix.em (ld_*_emulation): Delete do_assignments init.
+ * emultempl/armcoff.em: Likewise.
+ * emultempl/beos.em: Likewise.
+ * emultempl/generic.em: Likewise.
+ * emultempl/gld960.em: Likewise.
+ * emultempl/gld960c.em: Likewise.
+ * emultempl/linux.em: Likewise.
+ * emultempl/lnk960.em: Likewise.
+ * emultempl/m68kcoff.em: Likewise.
+ * emultempl/pe.em: Likewise.
+ * emultempl/sunos.em: Likewise.
+ * emultempl/ticoff.em: Likewise.
+ * emultempl/vanilla.em: Likewise.
+ * emultempl/elf32.em: Likewise.
+ (gld*_provide_bound_symbols): Delete.
+ (gld*_provide_init_fini_syms): Delete.
+ (gld*_before_allocation): Don't call ldemul_do_assignments.
+ * emultempl/ppc32elf.em (ppc_do_assignments): Delete.
+ (LDEMUL_DO_ASSIGNMENTS): Delete.
+ * scripttempl/elf.sc: Provide init/fini syms. Add SBSS_START_SYMBOLS,
+ SBSS_END_SYMBOLS, SDATA2_START_SYMBOLS.
+
+2005-08-04 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am (eelf32m32c.c): Fix dependencies.
+ * Makefile.in: Regenerate.
+
+2005-08-04 Alan Modra <amodra@bigpond.net.au>
+
+ * ldemul.c (ldemul_finish): Call ld_emulation->finish unconditionally.
+ (finish_default): New function.
+ * ldemul.h (finish_default): Declare.
+ * emultempl/aix.em (gld*_before_allocation): Call
+ before_allocation_default rather than strip_excluded_output_sections.
+ (ld_*_emulation): Init finish field to finish_default.
+ * emultempl/armcoff.em: Likewise.
+ * emultempl/beos.em: Likewise.
+ * emultempl/elf32.em: Likewise.
+ * emultempl/generic.em: Likewise.
+ * emultempl/gld960.em: Likewise.
+ * emultempl/gld960c.em: Likewise.
+ * emultempl/hppaelf.em: Likewise.
+ * emultempl/linux.em: Likewise.
+ * emultempl/lnk960.em: Likewise.
+ * emultempl/m68kcoff.em: Likewise.
+ * emultempl/mmo.em: Likewise.
+ * emultempl/pe.em: Likewise.
+ * emultempl/ppc64elf.em: Likewise.
+ * emultempl/sunos.em: Likewise.
+ * emultempl/ticoff.em: Likewise.
+ * emultempl/vanilla.em: Likewise.
+
+2005-08-03 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (exp_init_os): Handle etree_provide.
+ * emulparams/armelf.sh (OTHER_END_SYMBOLS): Rename from..
+ (OTHER_BSS_END_SYMBOLS): ..this.
+ * emulparams/armelf_linux.sh: Likewise.
+ * emulparams/armnto.sh: Likewise.
+ * emulparams/criself.sh: Likewise.
+ * emulparams/crislinux.sh: Likewise.
+ * emulparams/elf32frv.sh: Likewise.
+ * emulparams/elf32mcore.sh: Likewise.
+ * emulparams/elf32ppc.sh: Likewise.
+ * emulparams/elf32ppclinux.sh: Likewise.
+ * emulparams/hppa64linux.sh: Likewise.
+ * scripttempl/armbpabi.sc: Substitute $OTHER_END_SYMBOLS, not
+ $OTHER_BSS_END_SYMBOLS.
+ * scripttempl/elf32sh-symbian.sc: Likewise.
+ * scripttempl/elf_chaos.sc: Likewise.
+ * scripttempl/iq2000.sc: Likewise.
+ * scripttempl/xstormy16.sc: Likewise.
+ * scripttempl/elf.sc: Likewise. Delete __bss_start comment.
+ * scripttempl/elfxtensa.sc: Likewise.
+
+2005-07-29 Nick Clifton <nickc@redhat.com>
+
+ * ldmain.c (main): Allow -shared and -static to be used together.
+ * ld.texinfo (-static): Mention that it is allowed with -shared.
+
+2005-07-28 DJ Delorie <dj@redhat.com>
+
+ * ldlang.c (lang_output_section_statement_lookup_1): Don't cast a
+ unary & address operator, as that breaks GCC's strict aliasing
+ rules.
+
+2005-07-25 Jan Hubicka <jh@suse.cz>
+ H.J. Lu <hongjiu.lu@intel.com>
+
+ * emulparams/elf_x86_64.sh (LARGE_SECTIONS): New.
+
+ * scripttempl/elf.sc: Updated for large section support.
+
+2005-07-21 Ralf Corsepius <ralf.corsepius@rtems.org>
+
+ * configure.tgt: Remove i[3-7]86-*-rtemself*.
+ Remove sparc-*-rtemself*.
+
+2005-07-21 Ben Elliston <bje@gnu.org>
+
+ * ldgram.y (ldgram_want_filename): Remove unused static.
+
+2005-07-20 DJ Delorie <dj@redhat.com>
+
+ * emulparams/elf32m32c.sh (TEMPLATE_NAME): New.
+ (EXTRA_EM_FILE): New.
+
+2005-07-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ldmain.c (main): Reindent.
+
+2005-07-19 Paul Brook <paul@codesourcery.com>
+
+ * configure.host (HOSTING_CRT0): Parse output of gcc --help --verbose
+ to determine dynamic linker name.
+
+2005-07-18 Nick Clifton <nickc@redhat.com>
+
+ * configure.tgt: Restore alpha ordering to list of arches.
+
+2005-07-16 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf32.em (gld*_provide_init_fini_syms): Prototype.
+ (gld*_before_allocation): Call ldemul_do_assignments rather than
+ gld*_provide_init_fini_syms directly.
+ * emultempl/ppc32elf.em (gld*_after_allocation): Delete.
+ (ppc_do_assignments): New function.
+ (LDEMUL_AFTER_ALLOCATION): Don't define.
+ (LDEMUL_DO_ASSIGNMENTS): Define.
+
+2005-07-16 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am: Run "make dep-am".
+ (emipsidt.c, emipsidtl.c): Depend on generic.em.
+ * Makefile.in: Regenerate.
+
+2005-07-15 Alan Modra <amodra@bigpond.net.au>
+
+ * ldemul.c (ldemul_do_assignments): New function.
+ (do_assignments_default): New function.
+ * ldemul.h (ldemul_do_assignments): Declare.
+ (do_assignments_default): Declare.
+ (struct ld_emulation_xfer_struct): Add do_assignments.
+ * ldlang.c (lang_do_assignments) Call ldemul_do_assignments.
+ * emultempl/aix.em (ld_*_emulation): Init do_assignments field.
+ * emultempl/armcoff.em: Likewise.
+ * emultempl/beos.em: Likewise.
+ * emultempl/generic.em: Likewise.
+ * emultempl/gld960.em: Likewise.
+ * emultempl/gld960c.em: Likewise.
+ * emultempl/linux.em: Likewise.
+ * emultempl/lnk960.em: Likewise.
+ * emultempl/m68kcoff.em: Likewise.
+ * emultempl/pe.em: Likewise.
+ * emultempl/sunos.em: Likewise.
+ * emultempl/ticoff.em: Likewise.
+ * emultempl/vanilla.em: Likewise.
+ * emultempl/elf32.em: Likewise, to call gld*_provide_init_fini_syms.
+ (gld*_find_exp_assignment): Adjust bfd_elf_record_link_assignment call.
+
+2005-07-14 Jim Blandy <jimb@redhat.com>
+
+ Add support for the Renesas M32C and M16C.
+ * Makefile.am (ALL_EMULATIONS): Add eelf32m32c.o.
+ (eelf32m32c.c): New target.
+ * Makefile.in: Regenerated.
+ * configure.tgt: Add case for m32c-*-elf.
+ * emulparams/elf32m32c.sh: New file.
+
+2005-07-14 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (strip_excluded_output_sections): Don't call
+ bfd_gc_sections.
+ * emultempl/elf32.em (gld*_provide_bound_symbols): Move.
+ (gld*_provide_init_fini_syms): Move.
+ (gld*_before_allocation): Call the above from here..
+ (gld*_finish): ..not here. Call _bfd_elf_fix_excluded_sec_syms.
+ * emultempl/hppaelf.em (hppaelf_finish): Likewise.
+ * emultempl/ppc64elf.em (ppc_finish): Likewise.
+
+2005-07-10 Ralf Corsepius <ralf.corsepius@rtems.org>
+
+ * configure.tgt: Remove sparc*-*-rtemsaout*, i[3-7]86-go32-rtems*,
+ i[3-7]86-*-rtemscoff*, hppa*-*-rtems*, mips*el-*-rtems*,
+ powerpcle-*-rtems*.
+
+2005-07-09 Christopher Faylor <cgf@timesys.com>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_before_parse): Enable runtime
+ relocation by default.
+ (compute_dll_image_base): Avoid linking into cygwin dll address space.
+
+2005-07-08 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (wild_sort): Formatting.
+ (strip_excluded_output_sections): Strip zero size sections here.
+ * emultempl/elf32.em (gld*_strip_empty_sections): Delete.
+ (gld*_finish): Don't call the above.
+ * emultempl/hppaelf.em (hppaelf_finish): Likewise.
+ * emultempl/ppc64elf.em (ppc_finish): Likewise.
+
+2005-07-05 Paul Brook <paul@codesourcery.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add eelf32ppcvxworks.o.
+ (eelf32ppcvxworks.o): Add dependencies.
+ * Makefile.in: Regenerate.
+ * configure.tgt: Add entry for powerpc-vxworks.
+ * emulparams/elf32-ppc.c: Mention elf32ppcvxworks.sh in comment.
+ * emulparams/elf32ppcvxworks.sh: New file.
+ * emultempl/ppc32elf.em (bfd_elf32_powerpc_vxworks_vec): Declare.
+ (is_ppc_elf32_vec): New function.
+ (ppc_after_open, ppc_before_allocation,
+ gld${EMULATION_NAME}_after_allocation): Use it.
+
+2005-07-05 Peter S. Mazinger" <ps.m@gmx.net>
+
+ * emulparams/elf32bmip.sh (GENERATE_PIE_SCRIPT): Define as "yes".
+ * emulparams/elf32bmipn32-defs.sh (GENERATE_PIE_SCRIPT): Define as "yes".
+
+2005-07-04 Mike Frysinger <vapier@gentoo.org>
+
+ * emulparams/hppalinux.sh (GENERATE_PIE_SCRIPT): Fix typo in
+ name.
+
+2005-07-04 Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com>
+
+ * emulparams/m32relf_linux.sh (GENERATE_PIE_SCRIPT): Set to yes.
+
+2005-07-04 Aurelien Jarno <aurel32@debian.org>
+
+ * emultempl/elf32.em: Enable use of ld.so.conf for *-*-k*bsd-*.
+
+2005-07-01 Alan Modra <amodra@bigpond.net.au>
+
+ * scripttempl/elf.sc (.gcc_except_table): Don't KEEP.
+
+2005-06-30 Ben Elliston <bje@gnu.org>
+
+ * Makefile.am (check-DEJAGNU): Don't search for expect.
+ * Makefile.in: Regenerate.
+
+2005-06-30 Ben Elliston <bje@gnu.org>
+
+ * Makefile.am (EXPECT): Set to expect.
+ (RUNTEST): Likewise, set to runtest.
+ * Makefile.in: Regenerate.
+
+2005-06-16 Alexander Klimov <alserkli@inbox.ru>
+
+ * emultempl/armelf.em: Add quotes to avoid a null test
+ expression.
+
+2005-06-12 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld.texinfo (Command Line Options): Add @item for --hash-size.
+
+2005-06-10 Alan Modra <amodra@bigpond.net.au>
+
+ * scripttempt/elf.sc (.bss): Align tail in a way that allows
+ empty section pruning.
+
+2005-06-09 Steve Ellcey <sje@cup.hp.com>
+
+ * configure.in (AM_BINUTILS_WARNINGS): Add.
+ (BFD_NEED_DECLARATION) Replace with AC_CHECK_DECLS.
+ * config.in: Regenerate.
+ * configure: Regenerate.
+ * sysdep.h (NEED_DECLARATION_*): Replace with HAVE_DECL_*
+ * ldmain.c: Ditto.
+
+2005-06-09 Alan Modra <amodra@bigpond.net.au>
+
+ * ldexp.c (fold_unary <ALIGN_K>): Revert last change.
+
+2005-06-09 Alan Modra <amodra@bigpond.net.au>
+
+ * ld.h (lang_phase_type): Move to..
+ * ldexp.h: ..here. Add lang_mark_phase_enum.
+ (node_type): Remove etree_undef and etree_unspec.
+ (exp_data_seg): Delete.
+ (struct ldexp_control, expld): New.
+ (invalid, exp_mark_used_section): Delete.
+ (exp_fold_tree, exp_get_vma, exp_get_value_int, exp_get_fill,
+ exp_get_abs_int): Update prototypes.
+ * ldexp.c (assigning_to_dot): Delete.
+ (expld): Define.
+ (make_abs): Operate directly on expld.result. Update all callers.
+ (new_abs): Likewise. Return void.
+ (new_rel_from_abs): Rename from new_rel_from_section.
+ (new_rel, new_rel_from_abs): Operate on expld.result and return void.
+ Update all callers.
+ (fold_unary): Operate on expld.result and return void. Remove
+ "current_section", "allocation_done", "dot", "dotp" and "mark_used"
+ params. Update all callers.
+ (fold_binary, fold_trinary, fold_name, exp_fold_tree_1): Likewise.
+ (fold_unary <ALIGN_K>): Ensure alignment is absolute.
+ (fold_unary <ABSOLUTE>): Use make_abs.
+ (fold_unary <DATA_SEGMENT_END>): Evaluate mark_phase as for
+ allocating_phase.
+ (fold_binary <DATA_SEGMENT_ALIGN, DATA_SEGMENT_RELRO_END, >): Ditto.
+ (fold_binary <'%','/'>): Don't error if marking.
+ (fold_name <SIZEOF_HEADERS>): Don't call bfd_sizeof_headers when
+ marking.
+ (fold_name <NAME>): Remove FIXME; -R is handled correctly. Don't
+ error when marking.
+ (fold_name <ADDR, LOADADDR, SIZEOF>): Don't set SEC_KEEP.
+ (exp_fold_tree_1): Don't error when marking.
+ (exp_fold_tree_1 <etree_rel>): Evaluate in all phases except first.
+ (exp_fold_tree_1 <etree_assign to dot>): Don't check for NULL
+ current section, instead check for NULL dotp.
+ (exp_fold_tree_1 <etree_provide>): Don't evaluate the assignment
+ source unless the symbol is referenced and undefined.
+ (exp_fold_tree): Remove "allocation_done" and "dot" params. Save
+ params to expld.
+ (exp_fold_tree_no_dot): Remove "current_section", "allocation_done
+ and "mark_used" params. Save params to expld. Update all callers.
+ (exp_assop): Do without temp var.
+ (exp_print_tree <etree_undef>): Delete code.
+ (exp_get_vma): Remove "allocation_done" param. Correct error return.
+ (exp_get_fill, exp_get_abs_int): Likewise.
+ (exp_get_value_int): Remove "allocation_done" param.
+ (exp_mark_used_section): Delete.
+ * ldgram.y (fill_exp): Update exp_get_fill call.
+ (origin_spec, length_spec): Update exp_get_vma call.
+ * ldlang.c (lang_init): Don't bother clearing lang_statement_iteration.
+ (lang_mark_used_section_1, lang_mark_used_section): Delete.
+ (strip_excluded_output_sections): Call one_lang_size_sections_pass in
+ marking mode. Merge old lang_mark_used_section code. Correct handling
+ of output sections with excluded input sections and data statements.
+ Don't drop non-zero sized sections. Don't zap os->bfd_section.
+ Do set SEC_EXCLUDE when appropriate.
+ (print_output_section_statement): Update for changed ldexp.c
+ interface.
+ (print_assignment, lang_size_sections_1): Likewise.
+ (lang_do_assignments_1, lang_enter_output_section_statement): Likewise.
+ (lang_new_phdr, lang_record_phdrs): Likewise.
+ (lang_size_sections): Likewise.
+ (insert_pad): Use following statement if it is a pad, rather than
+ creating a new one.
+ (lang_size_sections_1 <lang_output_section_statement_enum>): Do
+ process ignored output section to set vma and lma, but don't
+ update dot for these sections. Don't error if marking.
+ (lang_size_sections_1 <lang_assignment_statement_enum>): Don't
+ update dot for ignored sections.
+ (lang_size_sections_1 <lang_data_statement_enum>): Don't mark absolute
+ section with SEC_ALLOC.
+ (one_lang_size_sections_pass): New function.
+ (lang_size_sections): Remove first five params. Set expld.phase on
+ entry and exit. Use one_lang_size_sections_pass.
+ (lang_do_assignments): Remove all params. Update all callers.
+ (lang_reset_memory_regions): Clear os->processed for all output
+ section statements.
+ * ldlang.h (lang_do_assignments): Update prototype.
+ (lang_size_sections): Likewise.
+ (one_lang_size_sections_pass): Declare.
+ * pe-dll.c (pe_dll_fill_sections, pe_exe_fill_sections): Update
+ lang_size_sections and lang_do_assignments calls.
+ * emultempl/elf32.em (layout_sections_again): Likewise.
+ * emultempl/ppc64elf.em (ppc_before_allocation): Use
+ one_lang_size_sections_pass.
+
+2005-06-08 Aldy Hernandez <aldyh@redhat.com>
+
+ * emulparams/elf32ms1.sh: New.
+
+2005-06-07 Eric Christopher <echristo@redhat.com>
+
+ * Makefile.am (eelf32ms1.c): Use tab.
+ * Makefile.in: Regenerate.
+
+2005-06-07 Aldy Hernandez <aldyh@redhat.com>
+ Michael Snyder <msnyder@redhat.com>
+ Stan Cox <scox@redhat.com>
+
+ * configure.tgt: Same.
+
+ * Makefile.am (ALL_EMULATIONS): Depend on eelf32ms1.o.
+ (eelf32ms1.c): Add eelf32ms1.c rule.
+
+ * Makefile.in: Regenerate.
+
+2005-06-06 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc64elf.em (ppc_before_allocation): Always run
+ ppc64_elf_edit_opd.
+
+2005-06-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ldexp.c (exp_mark_used_section): Set SEC_KEEP on current
+ section only if the symbol will be defined.
+
+2005-06-04 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR 992
+ * ldexp.c (exp_mark_used_section): Set SEC_KEEP on current
+ section for etree_assign, etree_provide and etree_provided.
+ Call fold_binary on etree_binary.
+
+ * ldlang.c (lang_mark_used_section_1): Handle load base.
+
+2005-06-03 Alan Modra <amodra@bigpond.net.au>
+
+ * ldmain.c (link_callbacks): Add einfo.
+ (add_archive_element): Use passed info, not link_info.
+ (constructor_callback): Likewise.
+ (reloc_overflow): Don't handle null bfd specially.
+ (reloc_dangerous, unattached_reloc): Likewise.
+ * ldmisc.c (vfinfo <B>): Print "ld generated" for null bfd.
+ (vfinfo <C, D, G>): Handle null bfd. Wrap comments.
+
+2005-06-02 Alan Modra <amodra@bigpond.net.au>
+
+ * ldexp.h (etree_value_type): Use "asection *" in place of
+ "struct lang_output_section_statement_struct *" for "section".
+ (exp_fold_tree): Likewise.
+ (exp_mark_used_section): Likewise.
+ * ldexp.c (new_rel, new_rel_from_section, fold_unary, fold_binary,
+ fold_trinary, fold_name, exp_fold_tree_1, exp_fold_tree,
+ exp_mark_used_section): Likewise for "current_section" param.
+ (make_abs, new_abs, exp_binop, exp_unop, exp_get_vma, exp_get_fill,
+ exp_get_abs_int): Adjust for above changes.
+ * ldlang.c (lang_mark_used_section_1, print_assignment,
+ lang_size_sections_1, lang_do_assignments_1): Likewise.
+ * ldexp.c (fold_name): Init entire result struct.
+
+2005-06-01 Maciej W. Rozycki <macro@linux-mips.org>
+
+ * emulparams/elf32btsmip.sh: Unset DATA_ADDR.
+
+2005-05-31 Zack Weinberg <zack@codesourcery.com>
+
+ * ldlang.c (entry_symbol_default): New file-scope global.
+ (lang_finish): Use it, not a hardwired "start".
+ (lang_default_entry): Set it.
+ * ldlang.h: Declare lang_default_entry.
+ * emultempl/beos.em, emultempl/pe.em: Use lang_default_entry,
+ not lang_add_entry, to override default entry point symbol.
+
+2005-05-29 Richard Henderson <rth@redhat.com>
+
+ * emulparams/elf64alpha.sh (PLT): New.
+ (TEXT_PLT): New.
+ * emultempl/alphaelf.em (disable_relaxation): New.
+ (limit_32bit): Rename from elf64alpha_32bit; update all users.
+ (elf64_alpha_use_secureplt): Declare.
+ (bfd_elf64_alpha_vec, bfd_elf64_alpha_freebsd_vec): Declare.
+ (alpha_after_open): New.
+ (alpha_before_allocation): New.
+ (OPTION_NO_RELAX, OPTION_SECUREPLT, OPTION_NO_SECUREPLT): New.
+ (PARSE_AND_LIST_LONGOPTS): Include them.
+ (PARSE_AND_LIST_OPTIONS): Likewise.
+ (PARSE_AND_LIST_ARGS_CASES): Likewise.
+ (LDEMUL_AFTER_OPEN, LDEMUL_BEFORE_ALLOCATION): New.
+ * scripttempl/elf.sc (TEXT_PLT): New.
+ (PLT): Use it.
+
+2005-05-27 Andreas Schwab <schwab@suse.de>
+
+ * configure.host (HOSTING_LIBS): Add libunwind.a if it exists.
+
+2005-05-24 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc32elf.em (after_allocation): Don't call
+ ppc_elf_set_sdata_syms when relocatable.
+
+2005-05-21 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makefile.am (ld.1): Revert the last 2 changes.
+ (info-recursive): Depend on ld.1.
+ * Makefile.in: Regenerated.
+
+2005-05-21 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makefile.am (ld.1): Depend on "info" instead of
+ "configdoc.texi ldver.texi".
+ * Makefile.in: Regenerated.
+
+2005-05-21 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makefile.am (ld.1): Depend on "info".
+ * Makefile.in: Regenerated.
+
+2005-05-19 Zack Weinberg <zack@codesourcery.com>
+
+ * Makefile.am: Have 'all' depend on 'info' and 'ld.1'.
+ * Makefile.in: Regenerate.
+
+2005-05-17 Zack Weinberg <zack@codesourcery.com>
+
+ * ld-arm/mixed-app.d: Adjust expected disassembly a little.
+
+2005-05-17 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * Makefile.am (ldver.texi): Don't use $<.
+ * Makefile.in: Regenerated.
+
+2005-05-17 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * Makefile.am (AM_MAKEINFOFLAGS, TEXI2DVI): Explicitly include
+ $(srcdir) before $(BFDDIR)/doc.
+ * Makefile.in: Regenerated.
+
+2005-05-17 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR 797
+ * ldexp.c (exp_fold_tree_1): Renamed from exp_fold_tree and
+ take take a bfd_boolean, mark_used. Ignore assert failure if
+ mark_used is TRUE.
+ (exp_fold_tree) Call exp_fold_tree_1 with mark_used == FALSE.
+ (exp_fold_tree_no_dot): Updated to take a bfd_boolean,
+ mark_used and pass down.
+ (fold_unary): Likewise.
+ (fold_binary): Likewise.
+ (fold_trinary): Likewise.
+ (exp_binop): Add FALSE to call to exp_fold_tree_no_dot.
+ (exp_trinop): Likewise.
+ (exp_unop): Likewise.
+ (exp_nameop): Likewise.
+ (exp_get_vma): Likewise.
+ (exp_get_fill): Likewise.
+ (exp_get_abs_int): Likewise.
+ (fold_name): Likewise. Set SEC_KEEP in output section flags.
+ (exp_mark_used_section): New.
+
+ * ldexp.h (exp_mark_used_section): New.
+
+ * ldlang.c (lang_output_section_statement_lookup_1): Set the
+ ignored field to FALSE.
+ (lang_mark_used_section_1): New.
+ (lang_mark_used_section): Call lang_mark_used_section_1.
+ (strip_excluded_output_sections): Call lang_mark_used_section
+ and check for unused sections.
+ (lang_size_sections_1): Skip an output section if it should
+ be ignored.
+ (lang_do_assignments_1): Likewise.
+ (lang_process): Don't call lang_mark_used_section here.
+
+ * ldlang.h (lang_output_section_statement_type): Change
+ all_input_readonly to bitfield. Add ignored.
+
+2005-05-17 Lennert Buytenhek <buytenh@wantstofly.org>
+ Peter S. Mazinger" <ps.m@gmx.net>
+
+ * emulparams/armelf_linux.sh (GENERATE_PIE_SCRIPT): Define as "yes".
+ * emulparams/hppalinux.sh (GENERATE_PIE_SCRIPT): Define as "yes".
+
+2005-05-17 Julian Brown <julian@codesourcery.com>
+
+ * ldlang.c (print_assignment): Do not rely upon a valid result
+ having a section associated with it.
+
+2005-05-17 Nick Clifton <nickc@redhat.com>
+
+ * ldlang.c (Scan_for_self_assignment): Check an assignment tree to
+ see if the same value is being used on the rhs as on the lhs.
+ (print_assignment): Call scan_for_self_assignment and if it
+ returns true, do no display the result of the computation but
+ instead just the final value of the symbol on the lhs.
+ * ld.texinfo: Document this behaviour and provide an example of
+ when it will happen.
+
+2005-05-15 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * Makefile.am (AM_MAKEINFOFLAGS): Define.
+ (TEXI2DVI): Define.
+ (ldver.texi): Depend on distributed files instead of built files.
+ (ld.info): Include $(srcdir) in the rule target. Remove actions.
+ (ld.dvi): Remove actions.
+ (MAINTAINERCLEANFILES): Add configdoc.texi.
+ (CONFIG_STATUS_DEPENDENCIES): Add bfd/configure.in.
+ (install-data-local): Renamed from install.
+ (Makefile): Remove explicit dependency.
+ * acinclude.m4: Remove obsolete code.
+ * configure.in: Update AC_PREREQ. Remove extra $CONFIG_SHELL.
+ * Makefile.in, aclocal.m4, config.in, configure: Regenerated.
+
+2005-05-11 Bob Wilson <bob.wilson@acm.org>
+
+ * scripttempl/elfxtensa.sc: Sync up with elf.sc.
+ * emulparams/elf32xtensa.sh (PLT, GOT): Define.
+
+2005-05-11 Alan Modra <amodra@bigpond.net.au>
+
+ * ldgram.y: Add SPECIAL token.
+ (sect_constraint): Handle SPECIAL.
+ * ldlang.c (lang_output_section_find_1): Don't match SPECIAL.
+ (map_input_to_output_sections): Likewise.
+ * ldlex.l (SPECIAL): Define.
+ * emulparams/elf32ppc.sh (DATA_GOT, SDATA_GOT, SEPARATE_GOTPLT,
+ GOT, PLT, GOTPLT): Define.
+ * emultempl/ppc32elf.em (old_plt, old_got): New static vars.
+ (ppc_after_open): New function.
+ (PARSE_AND_LIST_PROLOGUE): Define OPTION_OLD_LPT and OPTION_OLD_GOT.
+ (PARSE_AND_LIST_LONGOPTS): Add "bss-plt" and "sdata-got".
+ (PARSE_AND_LIST_OPTIONS): Document them.
+ (PARSE_AND_LIST_ARGS_CASES): Handle them.
+ (LDEMUL_AFTER_OPEN): Define.
+ * scripttempl/elf.sc (PLT): Don't override existing define.
+ (DATA_GOT, SDATA_GOT): Define and use to enable alternate got
+ placement rather than using NO_SMALL_DATA. Emit GOTPLT for RELRO_NOW.
+
+2005-05-10 Alan Modra <amodra@bigpond.net.au>
+
+ * scripttempl/elf.sc (DATA_SEGMENT_RELRO_GOTPLT_END): Delete.
+ (DATA_SEGMENT_RELRO_END): Use SEPARATE_GOTPLT value.
+ (GOTPLT): Remove DATA_SEGMENT_RELRO_GOTPLT_END. Place after
+ DATA_SEGMENT_RELRO_END in script.
+
+2005-05-09 H.J. Lu <hongjiu.lu@intel.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_provide_bound_symbols):
+ Don't use a removed section.
+
+2005-05-09 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ldmain.c (reloc_overflow): Use output_bfd if the symbol
+ is defined in the ABS section.
+
+2005-05-06 H.J. Lu <hongjiu.lu@intel.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_provide_init_fini_syms):
+ Put back !link_info.relocatable.
+
+2005-05-06 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR 878
+ * emultempl/elf32.em (gld${EMULATION_NAME}_provide_init_fini_syms):
+ Just check link_info.executable.
+
+2005-05-06 Nick Clifton <nickc@redhat.com>
+
+ * Update the address and phone number of the FSF organization in
+ the GPL notices in the following files:
+ aclocal.m4, deffile.h, deffilep.y, fdl.texi, ld.h, ldcref.c,
+ ldctor.c, ldctor.h, ldemul.c, ldexp.c, ldexp.h, ldfile.c,
+ ldfile.h, 20ldgram.y, ldint.texinfo, ldlang.c, ldlang.h, ldlex.h,
+ ldlex.l, ldmain.c, ldmain.h, ldmisc.c, ldmisc.h, ldver.c, ldver.h,
+ ldwrite.c, ldwrite.h, lexsup.c, mri.c, mri.h, pe-dll.c, pe-dll.h,
+ sysdep.h, emultempl/aix.em, emultempl/alphaelf.em,
+ emultempl/armcoff.em, emultempl/armelf.em, emultempl/beos.em,
+ emultempl/crxelf.em, emultempl/elf32.em, emultempl/generic.em,
+ emultempl/gld960.em, emultempl/gld960c.em, emultempl/hppaelf.em,
+ emultempl/ia64elf.em, emultempl/irix.em, emultempl/linux.em,
+ emultempl/lnk960.em, emultempl/m68hc1xelf.em,
+ emultempl/m68kcoff.em, emultempl/m68kelf.em,
+ emultempl/mipsecoff.em, emultempl/mmix-elfnmmo.em,
+ emultempl/mmixelf.em, emultempl/mmo.em, emultempl/needrelax.em,
+ emultempl/pe.em, emultempl/ppc32elf.em, emultempl/ppc64elf.em,
+ emultempl/sh64elf.em, emultempl/sunos.em, emultempl/ticoff.em,
+ emultempl/vanilla.em, emultempl/xtensaelf.em
+
+2005-05-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ * scripttempl/elf.sc: Document the usage of __bss_start.
+
+2005-05-05 Paul Brook <paul@codesourcery.com>
+
+ * Makefile.am: Add eelf_i386_vxworks.
+ * Makefile.in: Regenerate.
+ * configure.tgt: Make i?86-*-vxworks use targ_emul=elf_i386_vxworks.
+ * emulparams/elf_i386_vxworks.sh: New file.
+ * emulparams/vxworks.sh: New file.
+ * scripttempl/elf.sc: Add DATA_END_SYMBOLS and ETEXT_NAME.
+
+2005-05-04 H.J. Lu <hongjiu.lu@intel.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_provide_bound_symbols):
+ Call _bfd_elf_provide_section_bound_symbols.
+
+2005-05-04 Alan Modra <amodra@bigpond.net.au>
+
+ * ldemul.c: Include bfdlink.h.
+ (ldemul_before_allocation): Assume before_allocation is non-zero.
+ (before_allocation_default): Call strip_excluded_output_sections.
+ * ldlang.c (stripped_excluded_sections): New variable.
+ (lang_add_section): Build input section list for each output
+ section, attached via map_head and map_tail pointers.
+ (strip_excluded_output_sections): Make global. Traverse the
+ input section lists to find which output sections can go. Clear
+ link_order pointers and set stripped_excluded_sections.
+ (lang_process): Call strip_excluded_output_sections.
+ * ldlang.h (strip_excluded_output_sections): Declare.
+ * ldwrite.c: Update throuhout for link_order_head -> map_head change.
+ * emultempl/aix.em (before_allocation): Call
+ strip_excluded_output_sections.
+ * emultempl/armcoff.em (before_allocation): Likewise.
+ * emultempl/beos.em (before_allocation): Likewise.
+ * emultempl/linux.em (before_allocation): Likewise.
+ * emultempl/pe.em (before_allocation): Likewise.
+ * emultempl/sunos.em (before_allocation): Likewise.
+ * emultempl/elf32.em (before_allocation): Likewise. Call
+ bfd_elf_size_dynsym_hash_dynstr too.
+ * emultempl/lnk960.em (lnk960_before_allocation): Delete.
+ (ld_lnk960): Use before_allocation_default.
+
+2005-05-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_strip_empty_section):
+ Updated for bfd_section_list_remove change.
+ * ldlang.c (lang_insert_orphan): Likewise.
+ (strip_excluded_output_sections): Likewise.
+ (sort_sections_by_lma): New.
+ (lang_check_section_addresses): Sort the sections before
+ checking addresses.
+
+2005-04-29 Ralf Corsepius <ralf.corsepius@rtems.org>
+
+ * configure.tgt: Add h8300*-*-rtemscoff.
+ Switch h8300*-*-rtems* to elf.
+
+2005-04-29 Ben Elliston <bje@au.ibm.com>
+
+ * ldgram.y (lang_memory_region_type): Make static.
+ (ldgram_want_filename): Likewise.
+ * ldemul.c (ld_emulation): Make static.
+ * ldfile.h (ldfile_find_command_file): Remove extern.
+ * ldfile.c (ldfile_find_command_file): Make static.
+ * ldlang.h (unique_section_list): Remove extern declaration.
+ * ldlang.c (unique_section_list): Make static.
+ * mri.h (symbol_truncate): Remove extern declaration.
+ * mri.c (symbol_truncate): Make static.
+ (order, only_load, address, alias): Likewise.
+ (alignment, subalignment): Likewise.
+
+2005-04-27 H.J. Lu <hongjiu.lu@intel.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_provide_bound_symbols):
+ Use the first SEC_ALLOC section which isn't SEC_READONLY or the
+ last SEC_ALLOC section if such a section doesn't exist.
+
+2005-04-24 Mark Kettenis <kettenis@gnu.org>
+
+ * configure.host: Add *-*-openbsd support.
+
+2005-04-15 Julian Brown <julian@codesourcery.com>
+
+ * ld.texinfo: Document --use-blx.
+ * emultempl/armelf.em (use_blx): New variable.
+ (arm_elf_create_output_section_statements): Communicate value of
+ use_blx to bfd.
+ (PARSE_AND_LIST_PROLOGUE): Add OPTION_USE_BLX.
+ (PARSE_AND_LIST_OPTIONS): Add --use-blx option.
+ (PARSE_AND_LIST_ARGS_CASES): Add OPTION_USE_BLX case.
+
+2005-04-14 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am (NO_WERROR): Define. Use instead of -Wno-error.
+ * configure.in: Include ../bfd/warning.m4 contents.
+ * Makefile.in: Regenerate.
+ * configure: Regenerate.
+
+2005-04-12 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am: Run "make dep-am".
+ (ldgram.o, ldlex.o, deffilep.o): Add -Wno-error to command.
+ * Makefile.in: Regenerate.
+ * config.in: Regenerate.
+
+2005-04-11 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_stat_needed): Ignore
+ as_needed libs that were not needed.
+ (gld${EMULATION_NAME}_check_needed): Likewise.
+
+2005-04-07 Nick Clifton <nickc@redhat.com>
+
+ * emultempl/m68kcoff.em: Include ldexp.h and ldlang.h so that
+ ldfile.h can use the lang_input_statement type.
+
+2005-04-06 Jakub Jelinek <jakub@redhat.com>
+
+ * ldlang.c: Formatting.
+ (walk_wild_consider_section): Remember return value from wildcardp.
+ (is_simple_wild): Use strcspn instead of 2 strpbrk calls and strlen.
+ (wild_spec_can_overlap): Use strcspn instead of strpbrk and strlen.
+
+2005-04-06 Robert O'Callahan <rocallahan@novell.com>
+
+ * ld.h (lean_section_userdata_type): Remove.
+ (fat_section_userdata_type): Remove file field.
+ (SECTION_USERDATA_SIZE): Remove.
+ * ldlang.c (init_os): Eliminate initialization of unused
+ lean_section_userdata_type.
+
+ * ldlang.h (callback_t, walk_wild_section_handler_t): New
+ typedefs.
+ (struct lang_wild_statement_struct): Add walk_wild_section_handler
+ and handler_data fields.
+ * ldlang.c (callback_t): Removed.
+ (walk_wild_consider_section, walk_wild_section_general,
+ section_iterator_callback, find_section, is_simple_wild,
+ match_simple_wild, walk_wild_section_specs1_wild0,
+ walk_wild_section_specs1_wild1, walk_wild_section_specs2_wild1,
+ walk_wild_section_specs3_wild2, walk_wild_section_specs4_wild2,
+ wild_spec_can_overlap, analyze_walk_wild_section_handler): New
+ functions.
+ (lang_add_wild): Call analyze_walk_wild_section_handler.
+ (walk_wild_section): Renamed to walk_wild_section_general and
+ created a wrapper function.
+ (section_iterator_callback_data): New typedef.
+
+2005-04-04 Nick Clifton <nickc@redhat.com>
+
+ * configure.in: Add a check for <unistd.h> providing a prototype
+ for getopt() which is compatible with the one in
+ include/getopt.h. If so then define HAVE_DECL_GETOPT.
+ * configure: Regenerate.
+ * config.in (HAVE_DECL_GETOPT): Add.
+ * ldemul.c: Include config.h
+ * lexsup.c: Likewise.
+ * emultempl/elf32.sc: Likewise.
+
+2005-03-29 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_layout_sections_again):
+ New function, extracted from static void gld${EMULATION_NAME}_finish.
+ (gld${EMULATION_NAME}_strip_empty_sections): Likewise.
+ (gld${EMULATION_NAME}_provide_init_fini_syms): Likewise.
+ * emultempl/ppc64elf.em: Revert last change.
+ (ppc_layout_sections_again): Use
+ gld${EMULATION_NAME}_layout_sections_again.
+ (ppc_finish): Don't call gld${EMULATION_NAME}_finish. Instead call
+ gld${EMULATION_NAME}_strip_empty_sections and
+ gld${EMULATION_NAME}_provide_init_fini_syms.
+ * emultempl/hppaelf.em: Similarly.
+
+2005-03-29 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc64elf.em (need_laying_out): Delete. Remove all refs.
+ (ppc_finish): Don't call bfd_elf_discard_info.
+ * emultempl/hppaelf.em: Similarly.
+
+2005-03-24 Nick Clifton <nickc@redhat.com>
+
+ * po/fr.po: Updated French translation.
+
+2005-03-23 Mike Frysinger <vapier@gentoo.org>
+ Nick Clifton <nickc@redhat.com>
+
+ * configure.host: Accept any C library to accompany a GNU Linux
+ implementation, not just the GNU C library.
+ * configure.tgt: Likewise.
+ * emultempl/elf32.em: Likewise.
+
+2005-03-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_provide_bound_symbols): New
+ (gld${EMULATION_NAME}_finish): Call
+ gld${EMULATION_NAME}_provide_bound_symbols to provide
+ __preinit_array_start, __preinit_array_end, __init_array_start,
+ __init_array_end, __fini_array_start and __fini_array_end.
+
+ * scripttempl/elf.sc: Don't provide __preinit_array_start,
+ __preinit_array_end, __init_array_start, __init_array_end,
+ __fini_array_start nor __fini_array_end.
+
+2005-03-23 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): Set
+ SEC_EXCLUDE on .gnu.warning sections.
+
+2005-03-22 Alan Modra <amodra@bigpond.net.au>
+
+ * scripttempl/elf.sc (SBSS): Don't provide sbss start and end syms.
+
+2005-03-21 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc32elf.em (gld${EMULATION_NAME}_after_allocation): New
+ function.
+ (LDEMUL_AFTER_ALLOCATION): Define.
+
+2005-03-21 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc64elf.em (ppc_finish): Rename from
+ gld${EMULATION_NAME}_finish. Call gld${EMULATION_NAME}_finish.
+ (LDEMUL_FINISH): Update.
+ * emultempl/hppaelf.em (hppaelf_finish, LDEMUL_FINISH): Likewise.
+ * emultempl/m68hc1xelf.em (m68hc11elf_finish, LDEMUL_FINISH): Likewise.
+
+2005-03-18 Julian Brown <julian@codesourcery.com>
+
+ * scripttempl/armbpapi.sc (.rel.dyn): Add .rel.init_array,
+ .rel.fini_array.
+ (.rela.dyn): Add .rela.init_array, .rela.fini_array.
+ (SECTIONS): Add .rel.other, .rela.other, .reli.other after PLT relocs.
+
+2005-03-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_finish): Don't set
+ bfd_section when removing unused empty output sections for
+ non-relocatable link.
+
+2005-03-19 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_insert_orphan): Use old section_tail rather than
+ traversing the bfd section list to find pointer to new section.
+
+2005-03-18 Alan Modra <amodra@bigpond.net.au>
+
+ * scripttempl/elf.sc: When CREATE_SHLIB, put .sdata2 and .sbss2
+ input sections into .sdata and .sbss output respectively.
+
+2005-03-16 David Heine <dlheine@tensilica.com>
+ Bob Wilson <bob.wilson@acm.org>
+
+ * ldlang.c (IGNORE_SECTION): Remove check for zero size.
+ (lang_check_section_addresses): Ignore zero size sections here.
+
+2005-03-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_finish): Remove
+ unused empty output sections for non-relocatable link.
+
+ * ld.h (args_type): Remove gc_sections.
+
+ * ldlang.c (lang_mark_used_section): New.
+ (lang_gc_sections): Use link_info.gc_sections instead of
+ command_line.gc_sections.
+ * ldmain.c (main): Likewise.
+ * lexsup.c (parse_args): Likewise.
+ * ldlang.c (lang_process): Call lang_mark_used_section.
+
+ * ldmain.c (main): Initialize link_info.gc_sections to FALSE.
+
+2005-03-16 Nick Clifton <nickc@redhat.com>
+ Ben Elliston <bje@au.ibm.com>
+
+ * configure.in (werror): New switch: Add -Werror to the
+ compiler command line. Enabled by default. Disable via
+ --disable-werror.
+ * configure: Regenerate.
+
+2005-03-16 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/elf32ppclinux.sh (OTHER_READWRITE_SECTION): Delete.
+ (OTHER_RELRO_SECTIONS): Set this instead.
+
+2005-03-15 Nick Clifton <nickc@redhat.com>
+
+ * NEWS: Add cutoff for changes in 2.16 release.
+
+2005-03-15 Mikkel Krautz <krautz@gmail.com>
+
+ * configure.tgt (x86_64-elf): Add target.
+
+2005-03-15 Alan Modra <amodra@bigpond.net.au>
+
+ * po/es.po: Commit new Spanish translation.
+
+2005-03-14 Alan Modra <amodra@bigpond.net.au>
+
+ * ldexp.c (exp_fold_tree): Ensure return value is initialized.
+ Tidy etree_assert case.
+
+2005-03-14 Alan Modra <amodra@bigpond.net.au>
+
+ * po/tr.po: Commit new Turkish translation.
+
+2005-03-11 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * Makefile.am: Remove references to em68klynx.o and esparclynx.o.
+ * Makefile.in: Regenerated.
+ * emulparams/m68klynx.sh, emulparams/sparclynx.sh: Remove.
+
+2005-03-07 Nick Clifton <nickc@redhat.com>
+
+ * po/fr.po: Updated translation.
+
+2005-03-05 Alan Modra <amodra@bigpond.net.au>
+
+ * po/ld.pot: Regenerate.
+
+2005-03-02 Jan Beulich <jbeulich@novell.com>
+
+ * ldmain.c (remove_output): Use unlink_if_ordinary instead of unlink.
+ * pe-dll.c (pe_dll_generate_implib): Likewise.
+
+2005-02-24 Ben Elliston <bje@au.ibm.com>
+
+ * ldfile.c: Remove GNU960 conditional code.
+ * emultempl/gld960.em: Likewise.
+ * emultempl/gld960c.em: Likewise.
+ * emultempl/lnk960.em: Likewise.
+
+2005-02-24 Nick Clifton <nickc@redhat.com>
+
+ * emultempl/lnk960.em (lnk960_before_parse): Remove redundant
+ empty string from calls to concat.
+
+2005-02-23 Nick Clifton <nickc@redhat.com>
+
+ * emultempl/lnk960.em (lnk960_before_parse): Terminate list of
+ arguments passed to concat() with a NULL.
+
+ * emultempl/m68kcoff.em: Include ldexp.h and ldlang.h because they
+ define types needed by ldfile.h
+
+2005-02-23 Alan Modra <amodra@bigpond.net.au>
+
+ * pe-dll.c: Warning fixes.
+ * emultempl/sunos.em: Likewise.
+
+2005-02-22 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ldlang.c (section_already_linked): Don't call
+ bfd_section_already_linked for dynamic objects.
+
+2005-02-22 Alan Modra <amodra@bigpond.net.au>
+
+ * ldexp.c: Warning fixes.
+ * ldwrite.c: Likewise.
+ * emultempl/elf32.em: Likewise.
+
+2005-02-21 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ldlang.c (lang_add_section): Check SEC_TIC54X_BLOCK for TI
+ tic54x input only.
+ (lang_size_sections_1): Check SEC_COFF_SHARED_LIBRARY for COFF
+ and ECOFF output only.
+
+2005-02-21 Alan Modra <amodra@bigpond.net.au>
+
+ * config.in: Regenerate.
+ * configure: Regenerate.
+
+2005-02-17 Zack Weinberg <zack@codesourcery.com>
+
+ * ldexp.c (assigning_to_dot): New global flag.
+ (fold_name): If assigning_to_dot is true, object immediately to
+ an undefined symbol.
+ (exp_fold_tree): Set and clear assigning_to_dot around the
+ recursive call to exp_fold_tree to process the right-hand side
+ of an assignment to the location counter.
+
+2005-02-17 Paul Brook <paul@codesourcery.com>
+
+ * scripttempl/armbpabi.sc: Add dummy name to version block.
+
+2005-02-17 Alan Modra <amodra@bigpond.net.au>
+
+ * ldexp.c (new_abs): Init new.str.
+
+2005-02-15 Mark Mitchell <mark@codesourcery.com>
+
+ * configure.in (AC_CHECK_FUNCS): Add glob.
+ * configure: Regenerated.
+ * emultempl/elf32.em (<glob.h>): Do not include if HAVE_GLOB is
+ not defined.
+ (gld${EMULATION_NAME}_parse_ld_so_conf_include): Do not use glob
+ if HAVE_GLOB is not defined.
+
+2005-02-16 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_after_open): Define
+ lib_path if NATIVE is yes.
+
+2005-02-16 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc64elf.em (ppc_create_output_section_statements): Make
+ an error creating fake bfd fatal.
+ (ppc_before_allocation): Continue on after errors.
+ (gld${EMULATION_NAME}_finish): Likewise.
+
+2005-02-15 Nick Clifton <nickc@redhat.com>
+
+ * ldlex.l (YY_NO_UNPUT): Define so that the yy_unput function is
+ not declared. It is not used and its presence causes a compile
+ time warning.
+
+2005-02-11 Zack Weinberg <zack@codesourcery.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_stat_needed):
+ If st.st_ino is zero, do not treat the library as a duplicate.
+
+2005-02-10 Jakub Jelinek <jakub@redhat.com>
+
+ * emultempl/hppaelf.em (hppaelf_create_output_section_statements):
+ Set BFD_LINKER_CREATED on the stubs bfd.
+ * emultempl/ppc64elf.em (ppc_create_output_section_statements):
+ Likewise.
+
+2005-02-08 Mark Mitchell <mark@codesourcery.com>
+
+ * scripttempl/armbpabi.sc (VERSION): Make special section symbols
+ local.
+ (Image$$ER_RO$$Base): Define whenever RELOCATING.
+ (Image$$ER_RO$$Limit): Likewise.
+ (SHT$$INIT_ARRAY$$Base): Likewise.
+ (SHT$$INIT_ARRAY$$Limit): Likeise.
+
+2005-02-10 Ben Elliston <bje@au.ibm.com>
+
+ * emultempl/beos.em: Remove #if 0 and #if 1 blocks.
+
+2005-02-08 Richard Sandiford <rsandifo@redhat.com>
+
+ * configure.tgt (mips64*el-*-linux-gnu*): Define targ_extra_libpath
+ to include o32 and n64 emulations.
+ (mips64*-*-linux-gnu*): Likewise.
+
+2005-02-08 Hans-Peter Nilsson <hp@axis.com>
+
+ * ldmain.c (warning_callback, warning_find_reloc): Prepend
+ "warning: " to warning messages.
+
+2005-02-04 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_find_exp_assignment): Don't
+ look up symbol for etree_provide here.
+
+2005-02-02 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * emulparams/elf32bmip.sh (TEXT_DYNAMIC): Always set.
+
+2005-02-01 Edward Welbourne <eddy@opera.com>
+ Nick Clifton <nickc@redhat.com>
+
+ * ld.texinfo (Source Code Reference): New node describing how to
+ access linker script defined variables from source code.
+
+2005-02-01 Alan Modra <amodra@bigpond.net.au>
+
+ * ld.texinfo: Clarify --as-needed operation.
+
+2005-01-31 Andrew Cagney <cagney@gnu.org>
+
+ * configure: Regenerate to track ../gettext.m4.
+
+2005-01-31 Nick Clifton <nickc@redhat.com>
+
+ * ldver.c (ldversion): Bump reported copyright date to 2005.
+
+2005-01-31 Nick Clifton <nickc@redhat.com>
+
+ * configure.tgt: Remove obsolete targets m68k-lynxos and
+ sparc-lynxos.
+
+2005-01-28 Julian Brown <julian@codesourcery.com>
+
+ * emultempl/armelf.em (fix_v4bx): New variable.
+ (arm_elf_create_output_section_statements): Communicate fix_v4bx flag
+ value to bfd.
+ (PARSE_AND_LIST_PROLOGUE): Add option token OPTION_FIX_V4BX.
+ (PARSE_AND_LIST_LONGOPTS): Add option --fix-v4bx.
+ (PARSE_AND_LIST_OPTIONS): Add option --fix-v4bx.
+ (PARSE_AND_LIST_ARGS_CASES): Add option OPTION_FIX_V4BX.
+ * NEWS: Mention --fix-v4bx.
+ * ld.texinfo: Document --fix-v4bx.
+
+2005-01-25 Mark Mitchell <mark@codesourcery.com>
+
+ * emulparams/armsymbian.sh (OTHER_READONLY_SECTIONS): Define, so
+ as to include .ARM.exidx$${Base,Limit}.
+ * ld/scripttempl/armbpabi.sc: Move .plt to end of text segment.
+ Define IMAGE$$ER_RO$${Base,Limit} and SHT$$INIT_ARRAY$${Base,Limit}.
+ Put .init_array, .fini_array, etc. into the read-only data
+ segment.
+
+2005-01-25 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_try_needed): Formatting.
+ (gld${EMULATION_NAME}_after_open): Ignore needed libs if they were
+ only needed by an as-needed lib that didn't get linked.
+
+2005-01-23 Alan Modra <amodra@bigpond.net.au>
+
+ * ld.texinfo (Output Section Keywords <CONSTRUCTORS>): Correct
+ __DTOR_LIST__ description.
+
+2005-01-23 Alan Modra <amodra@bigpond.net.au>
+
+ * ld.texinfo (Location Counter <dot outside sections>): Document
+ effects of orphan section placement, and ". = ." workaround.
+ * Makefile.in: Regenerate.
+
+2005-01-22 Richard Sandiford <rsandifo@redhat.com>
+
+ * emulparams/elf32bmip.sh (OTHER_GOT_SECTIONS): Add ". = .;".
+ * emulparams/elf32bmipn32-defs.sh (OTHER_GOT_SECTIONS): Likewise.
+
+2005-01-21 Jakub Jelinek <jakub@redhat.com>
+
+ * ldgram.y (AS_NEEDED): New token.
+ (input_list): Handle AS_NEEDED ( input_list ).
+ * ldlex.l (AS_NEEDED): Add.
+ * ld.texinfo: Document AS_NEEDED ().
+ * NEWS: Mention AS_NEEDED ().
+
+2005-01-21 Ben Elliston <bje@au.ibm.com>
+
+ * ldlang.c (lang_reasonable_defaults): Remove.
+ (lang_process): Don't call lang_reasonable_defaults.
+
+ * ldexp.c (exp_assop): Remove #if 0'd code.
+ (exp_print_tree): Likewise.
+ * ldlang.c (lang_memory_region_lookup): Likewise.
+ (open_output): Likewise.
+ (lang_do_assignments_1): Likewise.
+ (lang_place_orphans): Likewise.
+ (lang_enter_output_section_statement): Likewise.
+ (lang_reasonable_defaults): Likewise.
+ * ldlang.h (struct lang_input_statement_struct): Likewise.
+ * mri.c (mri_draw_tree): Likewise.
+ (mri_load): Likewise.
+ * pe-dll.c (generate_reloc): Likewise.
+ (make_import_fixup_entry): Likewise.
+ (pe_as16): Likewise.
+ * emultempl/beos.em (set_pe_subsystem): Likewise.
+ * emultempl/hppaelf.em (hppaelf_after_parse): Likewise.
+ * emultempl/pe.em: Likewise.
+ * emultempl/xtensaelf.em (xtensa_colocate_literals): Likewise.
+
+2005-01-20 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add earmelfb_linux_eabi.o.
+ (earmelfb_linux_eabi.c): New target.
+ * Makefile.in: Regenerated.
+ * configure.tgt (arm*b-*-linux-gnueabi): New target.
+ * emulparams/armelfb_linux_eabi.sh: New file.
+
+2005-01-20 Nick Hudson <skrll@netbsd.org>
+
+ PR ld/676
+ * emultempl/hppaelf.em (hppaelf_create_output_section_statements):
+ Handle bfd_elf32_hppa_nbsd_vec.
+
+2005-01-19 Richard Sandiford <rsandifo@redhat.com>
+
+ * ldmain.h (ld_sysroot): Change type to a constant string.
+ * ldmain.c (ld_sysroot): Likewise.
+ (get_relative_sysroot, get_sysroot): New functions, adding command-line
+ support for changing the sysroot.
+ (main): Call the new functions.
+ * lexsup.c (OPTION_SYSROOT): New.
+ (ld_options): Add --sysroot.
+ (parse_args): Add a dummy handler for it.
+ * ld.texinfo (--sysroot): Document.
+ * NEWS: Mention the new --sysroot option.
+
+2005-01-18 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (section_already_linked): Adjust bfd_link_just_syms call.
+ (lang_place_orphans): Don't abort on just_syms_flag, instead call
+ bfd_link_just_syms.
+
+2005-01-16 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * defilep.y (def_name, def_library): Combine into...
+ (def_image_name): New function. Strip name to basename,
+ with warning.
+
+2005-01-12 Mark Kettenis <kettenis@gnu.org>
+
+ * configure.in: Be sure to invoke config.sub using the shell.
+ * configure: Regenerate.
+
+2005-01-11 Alan Modra <amodra@bigpond.net.au>
+
+ * configure.host: Correct sed patterns for last change.
+
+2005-01-10 Nick Clifton <nickc@redhat.com>
+
+ PR binutils/609
+ * ldmisc.c (vfinfo): Add an extra argument: is_warning. Use this
+ to determine whether config.make_executable should be set to FALSE in
+ conjunction with config.fatal_warnings.
+ (info_msg, minfo, lfinof): Pass FALSE as the extra argument.
+ (einfo): Pass TRUE as the extra argument.
+
+2005-01-10 Greg Schaffer <gschafer@zip.com.au>
+
+ * configure.host (linux targets): Use "${CC} -dumpspecs" instead
+ of "${CC} --print-file-name=specs" to appease GCC versions >= 4.0.
+ (ia64-*-aix): Delete - this target is obsolete, and would be
+ broken by this patch.
+
+2005-01-06 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * configure.host (sparc*-*-solaris2*): Rename into sparc-*-solaris2*.
+ (sparc64-sun-solaris2*): New host.
+
+2005-01-06 Paul Brook <paul@codesourcery.com>
+
+ * Makefie.am: Add earmelf_vxworks.
+ * Makefile.in: Regenerate.
+ * configure.tgt: Make arm-*-vxworks a separate case.
+ * emulparams/armelf_vxworks.sh: New function.
+
+2005-01-06 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc64elf.em (no_multi_toc): New var.
+ (gld${EMULATION_NAME}_finish): Pass to ppc64_elf_setup_section_lists.
+ (OPTION_NO_MULTI_TOC): Define.
+ (PARSE_AND_LIST_LONGOPTS): Add --no-multi-toc support.
+ (PARSE_AND_LIST_OPTIONS, PARSE_AND_LIST_ARGS_CASES): Likewise.
+
+2005-01-05 Nick Clifton <nickc@redhat.com>
+
+ PR binutils/614
+ * ldmisc.c (vfinfo): Alter output to conform to the GNU Coding
+ Standard's specification for parsable error messages.
+
+2005-01-04 Paul Brook <paul@codesourcery.com>
+
+ * Makefile.am: Correct dependency for earmsymbian.c.
+ * Makefile.in: Regenerate.
+
+For older changes see ChangeLog-2004
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/binutils-2.21/ld/ChangeLog-2006 b/binutils-2.21/ld/ChangeLog-2006
new file mode 100644
index 0000000..c28addf
--- /dev/null
+++ b/binutils-2.21/ld/ChangeLog-2006
@@ -0,0 +1,1364 @@
+2006-12-23 Kazu Hirata <kazu@codesourcery.com>
+
+ * configure.tgt: Recognize fido.
+
+2006-12-18 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * pe-dll.c (pe_bfd_is_dll): New function.
+ * pe-dll.h (pe_bfd_is_dll): Declare.
+ * emultempl/pe.em (gld_${EMULATION_NAME}_recognized_file): Recognize
+ dlls using pe_bfd_is_dll instead of using the filename extension.
+
+2006-12-15 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * configure.tgt (NATIVE_LIB_DIRS): Specify for spu-*-elf*.
+
+2006-12-12 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * Makefile.am (ld_TEXINFOS): Set.
+ (ld.info ld.dvi ld.html): Delete rule.
+ * Makefile.in: Regenerated.
+
+2006-12-12 Ina Pandit <inap@kpitcummins.com>
+
+ * ldlang.c (print_output_section_statement): Print load address
+ when lma differs from vma.
+
+2006-12-11 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * configure.in: Define GENINSRC_NEVER.
+ * doc/Makefile.am (ld.info): Remove srcdir prefix.
+ (MAINTAINERCLEANFILES): Add info file.
+ (DISTCLEANFILES): Pretend to add info file.
+ * po/Make-in (.po.gmo): Put gmo files in objdir.
+ * configure, Makefile.in: Regenerated.
+
+2006-12-04 Jan Beulich <jbeulich@novell.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_after_open): Create
+ .eh_frame_hdr section here.
+
+2006-11-27 Ian Lance Taylor <ian@airs.com>
+
+ * Makefile.am (EXTRA_DIST): Put spu_ovl.o in the emultempl
+ subdirectory.
+ * Makefile.in: Regenerate.
+
+2006-11-27 Bob Wilson <bob.wilson@acm.org>
+
+ * emultempl/xtensaelf.em (XSHAL_ABI): Add default definition.
+ (replace_insn_sec_with_prop_sec): Use bfd_make_section_with_flags.
+ Delete redundant code to set sections flags and alignment.
+ (xt_config_info_unpack_and_check, check_xtensa_info): New.
+ (elf_xtensa_after_open): Iterate over input statements instead of
+ link_info.input_bfds.
+ (elf_xtensa_before_allocation): Likewise. Call check_xtensa_info for
+ each input, and write a new .xtensa.info section in the output.
+
+2006-11-22 Nick Clifton <nickc@redhat.com>
+
+ * configure.in (LINGUAS): Add ga.
+ * po/ga.po: New Irish translation.
+
+2006-11-20 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld.texinfo: Fix a typo.
+
+2006-11-20 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/elf32_spu.sh (OTHER_SECTIONS): Define.
+
+2006-11-13 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * emultempl/armelf.em (arm_elf_before_allocation): Only call
+ bfd_elf32_arm_process_before_allocation if no dynamic sections.
+
+2006-11-08 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf32.em (gld*_before_allocation): Adjust output section
+ size for warning sections.
+
+2006-11-06 Vladimir Prus <vladimir@codesourcery.com>
+
+ * emultempl/elf32.em (gld*_before_allocation): Don't prepend
+ "warning" to the message.
+
+2006-10-31 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * pe-dll.c (autofilter_entry_type): Change name to const.
+ (pe_details_type) : Change target_name, object_target and
+ autofilter_symbollist to const.
+ (autofilter_symbollist_generic): Change to const.
+ (autofilter_symbollist_i386, pe_detail_list, pe_details,
+ autofilter_liblist, autofilter_objlist autofilter_symbolprefixlist,
+ autofilter_symbolsuffixlist): Likewise.
+ (is_import): Fix indentation.
+ (auto_export): Change afptr to const. Move name declaration to
+ beginning of scope.
+ (make_tail): Clear undefined byte.
+ (jmp_ix86_bytes, jmp_sh_bytes, jmp_mips_bytes, jmp_arm_bytes): Change
+ to const.
+ (make_one): Change jmp_bytes to const. Make idata$6 member size
+ arithmetic explicit and add comment.
+
+2006-10-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3111
+ * ld.h (args_type): Remove reduce_memory_overheads.
+
+ * ldlang.c (lang_map): Updated.
+ (section_already_linked): Likewise.
+ (print_input_section): Likewise.
+ * ldmain.c (main): Likewise.
+ * lexsup.c (parse_args): Likewise.
+
+2006-10-29 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * pe-dll.c (make_singleton_name_thunk): Re-add the NULL terminator.
+
+2006-10-27 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_map): Don't say SEC_LINKER_CREATED and SEC_KEEP
+ sections have been discarded.
+ (lang_do_version_exports_section): Set SEC_KEEP on export section.
+ * emultempl/elf32.em (before_allocation): Set SEC_KEEP on warning
+ sections.
+
+2006-10-26 Joseph S. Myers <joseph@codesourcery.com>
+ Mark Mitchell <mark@codesourcery.com>
+
+ * configure.tgt (arm*linux*): Support both big- and little-endian.
+
+2006-10-25 H.J. Lu <hongjiu.lu@intel.com>
+
+ * emulparams/hppa64linux.sh (LARGE_SECTIONS): Renamed to ...
+ (OTHER_BSS_SECTIONS): This.
+ * scripttempl/elf.sc (OTHER_BSS_SECTIONS): Support LARGE_SECTIONS.
+ (LARGE_SECTIONS): Move .lbss sections to OTHER_BSS_SECTIONS.
+
+2006-10-25 Alan Modra <amodra@bigpond.net.au>
+ Trevor Smigiel <Trevor_Smigiel@playstation.sony.com>
+ Yukishige Shibata <shibata@rd.scei.sony.co.jp>
+ Nobuhisa Fujinami <fnami@rd.scei.sony.co.jp>
+ Takeaki Fukuoka <fukuoka@rd.scei.sony.co.jp>
+
+ * emulparams/elf32_spu.sh: New file.
+ * emultempl/spu_inc.s: New file.
+ * emultempl/spu_ovl.S: New file.
+ * emultempl/spu_ovl.o: New file.
+ * emultempl/spuelf.em: New file.
+ * Makefile.am: Add SPU support.
+ * configure.tgt: Likewise.
+ * ldlang.c (load_symbols): Make global.
+ * ldlang.h (load_symbols): Declare.
+ * scripttempl/elf.sc (OTHER_BSS_SECTIONS): Add.
+ * Makefile.in: Regenerate.
+
+2006-10-24 Ben Elliston <bje@au.ibm.com>
+
+ * lexsup.c (parse_args): Add a comment noting a fall-through.
+
+2006-10-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ * configure.in (AC_CHECK_HEADERS): Add limits.h and sys/param.h.
+ * configure: Regenerated.
+ * config.in: Likewise.
+
+2006-10-23 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/h8300elf.sh (TINY_DATA_SECTION, TINY_BSS_SECTION): Don't
+ set section address on a relocatable link.
+
+ * ld.texinfo (Output Section Discarding): Fix xref.
+
+2006-10-21 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * emulparams/shelf32.sh: Set default stack to 0x80000.
+ * emulparams/shelf64.sh: Likewise.
+
+2006-10-20 Richard Sandiford <richard@codesourcery.com>
+
+ * emulparams/elf32bmip.sh (OTHER_GOT_RELOC_SECTIONS): Define.
+ * emulparams/elf32bmipn32-defs.sh (OTHER_GOT_RELOC_SECTIONS): Likewise.
+
+2006-10-19 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/armelf.em (arm_elf_before_allocation): Run
+ gld${EMULATION_NAME}_before_allocation later.
+ * ldlang.c (lang_size_sections_1): Revert 2006-09-15 change.
+
+2006-10-18 Roy Marples <uberlord@gentoo.org>
+
+ * emulparams/elf64_sparc_fbsd.sh (OUTPUT_FORMAT): Define as
+ elf64-sparc-freebsd.
+
+2006-10-18 Joseph Myers <joseph@codesourcery.com>
+
+ * configure.tgt (i[3-7]86-*-linux-*): Also define
+ targ_extra_libpath in want64 case.
+ * emulparams/elf_x86_64.sh: Handle i[3-7]86-*-linux-* the same as
+ x86_64*-linux*.
+
+2006-10-17 Alan Modra <amodra@bigpond.net.au>
+
+ * scripttempl/elf.sc (INTERP): Delete. Move definition to..
+ (INITIAL_READONLY_SECTIONS): ..here.
+ * emulparams/criself.sh (INITIAL_READONLY_SECTIONS): Include .interp.
+ * emulparams/elf32bmip.sh (INITIAL_READONLY_SECTIONS): Ditto.
+ * emulparams/elf32bmipn32-defs.sh (INITIAL_READONLY_SECTIONS): Ditto.
+
+2006-10-17 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (strip_excluded_output_sections): Do strip sections
+ that define syms, but don't ignore them.
+ * ld.texinfo (Output Section Discarding): Revise.
+ * emultempl/armcoff.em (gld${EMULATION_NAME}_finish): Always call
+ finish_default.
+
+2006-10-16 Richard Sandiford <richard@codesourcery.com>
+
+ * Makefile.am (eelf64bmip.c): Depend on emulparams/elf64bmip-defs.sh.
+ (eelf64btsmip.c, eelf64ltsmip.c): Likewise.
+ * Makefile.in: Regenerate.
+ * emulparams/elf32bmipn32-defs.sh (INITIAL_READONLY_SECTIONS): Include
+ .reginfo rather than .MIPS.options.
+ * emulparams/elf64bmip-defs.sh: New file.
+ * emulparams/elf64bmip.sh: Include it.
+ (COMMONPAGESIZE): Delete.
+ * emulparams/elf64btsmip.sh: As for elf64bmip.sh.
+
+2006-10-12 Bob Wilson <bob.wilson@acm.org>
+
+ * emultempl/xtensaelf.em (is_inconsistent_linkonce_section): Check
+ for linkonce XCC exception tables (".e" and ".h").
+
+2006-10-11 Bob Wilson <bob.wilson@acm.org>
+
+ * emulparams/elf32xtensa.sh (TEXT_PLT): Enable.
+ (OTHER_READONLY_SECTIONS): Add linkonce .xt_except_table sections.
+ (OTHER_READWRITE_SECTIONS): Add linkonce .xt_except_desc sections.
+ (OTHER_SDATA_SECTIONS): New.
+ * scripttempl/elfxtensa.sc: Import changes from elf.sc.
+
+2006-10-11 Jakub Jelinek <jakub@redhat.com>
+
+ * ldlang.c (lang_append_dynamic_list): When appending, add all elements
+ of the dynamic list rather than just the first entry.
+
+2006-10-10 Bob Wilson <bob.wilson@acm.org>
+
+ * emulparams/elf32xtensa.sh (GENERATE_PIE_SCRIPT): Enable.
+
+2006-10-06 Mike Frysinger <vapier@gentoo.org>
+
+ * genscripts.sh: Respect LIBPATH_SUFFIX when not using sysroot.
+
+2006-10-04 Bob Wilson <bob.wilson@acm.org>
+
+ * emulparams/xtensa-config.sh: Delete file.
+ * emulparams/elf32xtensa.sh: Set MAXPAGESIZE here instead of including
+ xtensa-config.sh.
+ * Makefile.am (eelf32xtensa.c): Remove dependency on xtensa-config.sh.
+ * Makefile.in: Regenerate.
+
+2006-10-03 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * pe-dll.c : Fix typo.
+ (autofilter_symbolprefixlist) : Remove __imp_.
+ (is_import) : New.
+ (auto-export) : Remove re-import check. Moved to callers.
+ (process_def_file) : Check is symbol is an import. Always
+ underscore __imp_.
+ Only skip underscore on underscored targets.
+ (make_one) : Always underscore __imp_.
+ (pe_create_runtime_relocator_reference) : Only underscore
+ _pei386_runtime_relocator on underscored targets.
+ (pe_process_import_defs) : Always underscore __imp_.
+ * pe.em (U) : New macro.
+ (set_pe_subsystem) : Remove underscore from _WinMainCRTStartup
+ on wince subsystem case.
+ (pe_find_data_imports) : Use U on "_head_".
+ (gld_${EMULATION_NAME}_unrecognized_file) : Use U.
+
+2006-09-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3223
+ PR ld/3267
+ * ld.texinfo: Updated Output Section Discarding.
+
+ * ldlang.h (lang_output_section_statement_type): Add
+ section_relative_symbol.
+ * ldlang.c (strip_excluded_output_sections): Don't strip a
+ section with a symbol relative to it.
+ (lang_size_sections_1): Mark if an output section has a symbol
+ symbol relative to it.
+
+2006-09-25 Bob Wilson <bob.wilson@acm.org>
+
+ * ld.texinfo (Options): Update description of local symbols for -X.
+
+2006-09-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3249
+ * scripttempl/elf.sc: Don't combine .gnu.linkonce.d.*personality*
+ and .gnu.linkonce.wi.* sections with .data and .debug_info for
+ relocatable link.
+
+2006-09-20 Kai Tietz <Kai.Tietz@onevision.com>
+
+ * configure.in: Add new target x86_64-pc-mingw64.
+ * configure: Regenerate.
+ * configure.tgt: Add definition of target emulation i386pep.
+ * Makefile.am: Add new target files for target-all.
+ * Makefile.in: Regenerate.
+ * pe-dll.c: Adjust to be inheritable by pep_dll.c as include.
+ Fix memory out of bounds excess for idata relocation section data.
+ * pep-dll.c: Add target specific shared object handling.
+ * pep-dll.h: Add target specific definitions for shared object handling.
+ * emulparams/i386pep.sh: Add new emulation params for target x86_64 coff.
+ * emultempl/pep.em: Add new emulation file for target x86_64 coff.
+ * po/POTFILES.in: Regenerate.
+ * scripttempl/pep.sc: Add linker script template for target x86_64 coff.
+ * NEWS: Mention new target.
+
+2006-09-18 Thiemo Seufer <ths@networkno.de>
+
+ * configure.tgt: Add mips*el-sde-elf* and mips*-sde-elf*
+ configurations.
+
+2006-09-17 Mei Ligang <ligang@sunnorth.com.cn>
+
+ * emulparams/scoreelf.sh: New file.
+ * emultempl/scoreelf.em: New file.
+ * Makefile.am: Add Score files.
+ * Makefile.in: Regenerate.
+ * configure.tgt: Add Score target.
+ * NEWS: Mention new target support.
+
+2006-09-16 Nick Clifton <nickc@redhat.com>
+ Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * ldctor.c: Make use of new STRING_COMMA_LEN and CONST_STRNEQ
+ macros defined in bfd.h.
+ * ldmain.c: Likewise.
+ * ldwrite.c: Likewise.
+ * lexsup.c: Likewise.
+ * pe-dll.c: Likewise.
+ * emultempl/aix.em: Likewise.
+ * emultempl/beos.em: Likewise.
+ * emultempl/elf32.em: Likewise.
+ * emultempl/pe.em: Likewise.
+ * emultempl/sunos.em: Likewise.
+ * emultempl/xtensaelf.em: Likewise.
+
+2006-09-15 Nick Clifton <nickc@redhat.com>
+
+ PR ld/3107
+ * ldlang.c (lang_size_sections_1): Do not abort when encountering
+ a non-empty section that is ignored. Instead produce a warning
+ message.
+
+2006-09-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld.texinfo: Document --dynamic-list-cpp-typeinfo.
+
+2006-09-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makefile.am (CXX): Set to g++.
+ (CXX_FOR_TARGET): Likewise.
+ * Makefile.in: Regenerated.
+
+ * NEWS: Mention --dynamic-list.
+
+ * ld.texinfo: Document --dynamic-list.
+
+ * ldgram.y: Support dynamic list.
+
+ * ldlang.c (lang_process): Call lang_finalize_version_expr_head
+ on link_info.dynamic if needed.
+ (lang_append_dynamic_list): New.
+ (lang_append_dynamic_list_cpp_typeinfo): New.
+ * ldlang.h (lang_append_dynamic_list): Likewise.
+ * ldlang.h (lang_append_dynamic_list_cpp_typeinfo): Likewise.
+
+ * ldlex.h (input_enum): Add input_dynamic_list.
+ * ldlex.l: Handle it.
+
+ * ldmain.c (main): Initialize link_info.dynamic.
+
+ * lexsup.c (option_values): Add OPTION_DYNAMIC_LIST and
+ OPTION_DYNAMIC_LIST_CPP_TYPEINFO.
+ (ld_options): Add entries for OPTION_DYNAMIC_LIST and
+ OPTION_DYNAMIC_LIST_CPP_TYPEINFO.
+ (parse_args): Handle OPTION_DYNAMIC_LIST and
+ OPTION_DYNAMIC_LIST_CPP_TYPEINFO.
+
+2006-09-07 Joel Sherrill <joel.sherrill@oarcorp.com>
+
+ * emulparams/h8300elf.sh: _tinydata should not be placed in
+ relocatables.
+ * emulparams/h8300.sh: Likewise.
+ * emulparams/h8300sxelf.sh: Likewise.
+
+2006-09-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3015
+ * emultempl/elf32.em: Enable "-z relro" only if $COMMONPAGESIZE
+ is defined.
+
+2006-08-29 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ldlang.c (walk_wild): Allow * to glob '/' in wildcarded match.
+
+2006-08-28 Alan Modra <amodra@bigpond.net.au>
+
+ * scripttempl/elf.sc: Ensure that crtbegin and crtend entries will
+ not match random object files in a path containing "crtbegin" or
+ "crtend" as part of a directory name.
+ * scripttempl/armbpabi.sc: Likewise.
+ * scripttempl/crisaout.sc: Likewise.
+ * scripttempl/elf32crx.sc: Likewise.
+ * scripttempl/elf32sh-symbian.sc: Likewise.
+ * scripttempl/elf_chaos.sc: Likewise.
+ * scripttempl/elfd10v.sc: Likewise.
+ * scripttempl/elfd30v.sc: Likewise.
+ * scripttempl/elfxtensa.sc: Likewise.
+ * scripttempl/iq2000.sc: Likewise.
+ * scripttempl/mmo.sc: Likewise.
+ * scripttempl/xstormy16.sc: Likewise.
+
+2006-08-24 Bob Wilson <bob.wilson@acm.org>
+
+ * emulparams/elf32xtensa.sh (.xt.prop): Add .xt.prop.*.
+ * scripttempl/elfxtensa.sc (.text): Add .literal.*.
+
+2006-08-24 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * ldlang.c (lang_size_sections_1, lang_assignment_statement_enum):
+ Adjust the current address of DEFAULT_MEMORY_REGION even
+ when dot hasn't changed.
+
+2006-08-23 Alan Modra <amodra@bigpond.net.au>
+
+ * ldexp.c (fold_name <LOADADDR>): Return an absolute value
+ rather than a section relative value.
+
+2006-08-22 Alan Modra <amodra@bigpond.net.au>
+
+ * NEWS: Mention LMA default change.
+ * ld.texinfo (Output Section LMA): Update default description.
+ (Location Counter): Clarify backward movement.
+ * ldlang.c (lang_size_sections_1): Leave non-alloc sections with
+ default lma equal to vma. Warn on backward movement of dot.
+
+2006-08-22 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * configure.tgt: Set targ_emul to arm_wince_pe for ARM
+ Windows CE targets.
+
+2006-08-22 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * Makefile.am: Split arm-wince into its own emulation.
+ * Makefile.in: Regenerate.
+ * pe-dll.c : Define PE_ARCH_arm_wince.
+ (pe_detail_list): Add PE_ARCH_arm_wince case.
+ (make_one): Handle PE_ARCH_arm_epoc and PE_ARCH_arm_wince cases.
+ * emulparams/arm_wince_pe.sh: New file.
+ * emultempl/pe.em: Handle new TARGET_IS_arm_wince_pe define.
+ Remap bfd_arm_allocate_interworking_sections,
+ bfd_arm_get_bfd_for_interworking and
+ bfd_arm_process_before_allocation for arm-pe and arm-wince-pe
+ targets too.
+ (gld_${EMULATION_NAME}_recognized_file): Handle arm-wince and
+ arm-epoc bfd format names.
+
+2006-08-18 Paul Brook <paul@codesourcery.com>
+
+ * emultempl/armelf.em (arm_elf_before_allocation): Call
+ gld${EMULATION_NAME}_before_allocation after setting interworking bfd.
+
+2006-08-17 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * pe-dll.c (autofilter_symbolprefixlist): Remove .idata$.
+ (generate_reloc): Revert to skipping sections without a SEC_LOAD flag,
+ and to not skipping .idata* sections.
+
+2006-08-16 Alan Modra <amodra@bigpond.net.au>
+
+ PR 3052
+ * ldlang.h (lang_output_section_statement_type): Replace
+ "processed" field with "processed_vma" and "processed_lma".
+ * ldlang.c (lang_do_assignments_1): Move lma setting code..
+ (lang_size_sections_1): ..to here.
+ (lang_reset_memory_regions): Adjust for
+ lang_output_section_statement_type change.
+ * ldexp.c (fold_name): Likewise.
+
+2006-08-08 Peter S. Mazinger <ps.m@gmx.net>
+
+ * emulparams/armelf.sh (MAXPAGESIZE): Changed to
+ "CONSTANT (MAXPAGESIZE)".
+
+2006-08-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3006
+ * ldlang.c (lang_section_bst_type): Moved to ...
+ * ldlang.h: Here.
+
+ * ldlang.h (lang_wild_statement_struct): Add a tree field.
+
+ * ldlang.c (wild_sort_fast): Use the tree field for BST.
+ (wild): Likeise.
+ (analyze_walk_wild_section_handler): Initialize the tree field.
+
+2006-08-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3009
+ * ldlang.c (update_wild_statements): Update the whole wild
+ section list.
+
+2006-08-04 Nick Clifton <nickc@redhat.com>
+ Mike Frysinger <michael.frysinger@analog.com>
+
+ * scripttempl/elf.sc (USER_LABEL_PREFIX): Define.
+ (__preinit_array_start, __preinit_array_end, __init_array_start,
+ __init_array_end, __fini_array_start, __fini_array_end, edata, end):
+ Use ${USER_LABEL_PREFIX}.
+ * emulparams/bfin.sh (DATA_END_SYMBOLS,END_SYMBOLS): Unset.
+ (USER_LABEL_PREFIX): Set.
+
+2006-08-04 Marcelo Tosatti <marcelo@kvack.org>
+
+ * ldmain.c (main): Initialise print_gc_sections field of link_info
+ structure.
+ * lexsup.c: Add --print-gc-sections and --no-print-gc-sections
+ switches.
+ * ld.texinfo: Document new switches.
+ * NEWS: Mention new switches.
+
+2006-08-04 Richard Sandiford <richard@codesourcery.com>
+ Kazu Hirata <kazu@codesourcery.com>
+ Phil Edwards <phil@codesourcery.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add eshelf_vxworks.o and
+ eshlelf_vxworks.o.
+ (eshelf_vxworks.c, eshlelf_vxworks.c): New rules.
+ * Makefile.in: Regenerate.
+ * configure.tgt (sh-*-vxworks): Use shelf_vxworks and
+ shlelf_vxworks.
+ * emulparams/shelf_vxworks.sh: New file.
+ * emulparams/shlelf_vxworks.sh: Likewise.
+ * emulparams/vxworks.sh (FINI): Prefix _etext with ${SYMPREFIX}.
+ (OTHER_END_SYMBOLS): Likewise _ehdr.
+ (DATA_END_SYMBOLS): Likewise _edata.
+ * emultempl/vxworks.em (vxworks_after_open): Check whether output_bfd
+ is indeed an ELF file before dealing with --force-dynamic.
+
+2006-08-02 Petr Salinger <Petr.Salinger@seznam.cz>
+
+ PR binutils/2983
+ * emulparams/elf_x86_64_fbsd.sh (OUTPUT_FORMAT): Define as
+ elf64-x86-64-freebsd.
+
+2006-08-01 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ldlang.c (init_os): Add flags. Replace bfd_make_section with
+ bfd_make_section_with_flags.
+ (exp_init_os): Updated.
+ (lang_add_section): Call init_os with flags.
+ (map_input_to_output_sections): Likewise.
+
+2006-07-29 Richard Sandiford <richard@codesourcery.com>
+
+ * Makefile.am (eelf32b4300.c): Update dependencies.
+ (eelf32bmip.c): Likewise.
+ (eelf32bsmip.c): Likewise.
+ (eelf32btsmip.c): Likewise.
+ (eelf32btsmipn32.c): Likewise.
+ (eelf32ltsmip.c): Likewise.
+ (eelf32ltsmipn32.c): Likewise.
+ (eelf32ebmip.c): Likewise.
+ (eelf32ebmipvxworks.c): Likewise.
+ (eelf32elmip.c): Likewise.
+ (eelf32elmipvxworks.c): Likewise.
+ (eelf32bmipn32.c): Likewise.
+ (eelf32lmip.c): Likewise.
+ (eelf32mipswindiss.c): Likewise.
+ (eelf32lsmip.c): Likewise.
+ (eelf64bmip.c): Likewise.
+ (eelf64btsmip.c): Likewise.
+ (eelf64ltsmip.c): Likewise.
+ (emipsbig.c): Likewise. Canonicalize ${GENSCRIPTS} line.
+ (emipsbsd.c): Likewise.
+ (emipsidt.c): Update dependencies.
+ (emipsidtl.c): Likewise.
+ (emipslit.c): Likewise.
+ (emipslnews.c): Likewise.
+ (emipspe.c): Likewise. Fix ${GENSCRIPTS} invocation.
+ * Makefile.in: Regenerate.
+ * emulparams/elf32bmip.sh (EXTRA_EM_FILE): Define.
+ * emulparams/elf32bmipn32-defs.sh (EXTRA_EM_FILE): Likewise.
+ * emultempl/irix.em: Include emultempl/mipself.em.
+ * emultempl/mipself.em: New file.
+
+2006-07-26 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf-generic.em (map_segments): Reorganise loop so that
+ layout happens before segment map. Don't do segment map on
+ relocatable link.
+
+2006-07-26 Alan Modra <amodra@bigpond.net.au>
+
+ * ldexp.c (fold_name <LOADADDR>): Use the lma.
+ * ldlang.h (lang_memory_region_type): Delete old_length. Add
+ last_os.
+ * ldlang.c (lang_memory_region_lookup): Init new field.
+ (lang_reset_memory_regions): Reset new field.
+ (lang_insert_orphan): Don't set load_base.
+ (lang_leave_overlay): Likewise.
+ (lang_size_sections_1): Delete unnecessary code setting lma_region
+ to region. Correct lma region check.
+ (lang_do_assignments_1): Rename output_section_statement parm
+ to current_os. Set lma from previous section in region.
+
+ * ldlang.c: Formatting.
+
+2006-07-25 Bob Wilson <bob.wilson@acm.org>
+
+ * emultempl/xtensaelf.em (xtensa_strip_inconsistent_linkonce_sections):
+ Set discarded section's output_section to bfd_abs_section_ptr.
+
+2006-07-26 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (analyze_walk_wild_section_handler): Init handler_data
+ earlier.
+
+2006-07-24 Bob Wilson <bob.wilson@acm.org>
+
+ * emultempl/xtensaelf.em (is_inconsistent_linkonce_section): Add space
+ in dep_sec_name for null terminator. Make sure dep_sec_name has a
+ ".t" linkonce tag.
+
+2006-07-14 Michael Wetherell <mike.wetherell@ntlworld.com>
+
+ * emulparams/elf_x86_64.sh (LIBPATH_SUFFIX, ELF_INTERPRETER_NAME):
+ Set for *-*-solaris2*.
+
+2006-07-24 Ralk Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * ld.texinfo: Fix spelling mistakes.
+ * ldint.texinfo: Likewise.
+
+2006-07-23 Sonal Santan <sonal.santan@xilinx.com>
+
+ * ldlang.c (lang_section_bst): New structure for sorting sections
+ by name.
+ (wild_sort_fast): New function: Insert a section into a binary
+ search tree.
+ (output_section_callback_fast): New function: Store a section in
+ BST.
+ (output_section_callback_tree_to_list): New function: Convert a
+ BST into a list.
+ (analyze_walk_wild_section_handler): Initialize handler_data
+ elements.
+ (wild): If the data is sorted by name use the BST method to sort
+ the names.
+
+2006-07-19 Alan Modra <amodra@bigpond.net.au>
+
+ * ld.h (handle_asneeded_cref): Declare.
+ * ldcref.c: Include objalloc.h.
+ (old_table, old_count, old_tab, alloc_mark): New variables.
+ (tabsize, entsize, refsize, old_symcount): Likewise.
+ (add_cref): Use bfd_hash_allocate for refs.
+ (handle_asneeded_cref): New function.
+ * ldmain.c (notice): Call handle_asneeded_cref for NULL name.
+
+2006-07-14 Michael Wetherell <mike.wetherell@ntlworld.com>
+
+ * configure.tgt (i[3-7]86-*-solaris2*, i[3-7]86-*-solaris*): Correct
+ typo setting targ_extra_libpath.
+
+2006-07-10 Jakub Jelinek <jakub@redhat.com>
+
+ * scripttempl/elf.sc: Add .gnu.hash section.
+ * emultempl/elf32.em (OPTION_HASH_STYLE): Define.
+ (gld${EMULATION_NAME}_add_options): Register --hash-style option.
+ (gld${EMULATION_NAME}_handle_option): Handle it.
+ (gld${EMULATION_NAME}_list_options): Document it.
+ * ldmain.c (main): Initialize emit_hash and emit_gnu_hash.
+ * ld.texinfo: Document --hash-style option.
+
+2006-07-10 Nick Clifton <nickc@redhat.com>
+
+ * po/zh_TW.po: New Chinese (traditional) translation.
+ * configure.in (ALL_LINGUAS): Add zh_TW.
+ * configure: Regenerate.
+
+2006-07-07 Nick Clifton <nickc@redhat.com>
+
+ PR ld/2874
+ * ld.texinfo: Remove "Using LD" from the title since it is
+ redundant.
+
+2006-07-06 Mohammed Adnène Trojette <adn@diwi.org>
+
+ PR ld/2877
+ * ld.texinfo: Fix spelling mistakes.
+
+2006-06-27 Pedro Alves <pedro_alves@portugalmail.pt>
+ Nick Clifton <nickc@redhat.com>
+
+ * emultempl/pe.em (gld_$_open_dynamic_archive): Compute maximum
+ length of format strings in the libname_fmt[] array, rather than
+ relying upon a statically chosen value. Adjust xmalloc call to
+ use this longest length.
+
+2006-06-27 Nick Clifton <nickc@redhat.com>
+
+ * ld.texinfo (-rpath-link): Clarify distinction between -rpath and
+ -rpath-link.
+
+2006-06-23 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * configure.tgt (i[3-7]86-*-solaris2*, i[3-7]86-*-solaris*): Set
+ targ_extra_libpath.
+
+2006-06-23 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * pe-dll.c (pe_details_type): Add new pointer for symbols list
+ autofilter.
+ (autofilter_symbollist): Split into autofilter_symbollist_generic
+ and autofilter_symbollist_i386.
+ (pe_detail_list): Add autofilter_symbollist_i386 to i386 case and
+ autofilter_symbollist_generic for all the others.
+ (autofilter_symbolprefixlist): Moved _fmode, _impure_ptr, cygwin_attach_dll,
+ cygwin_premain0, cygwin_premain1, cygwin_premain2, cygwin_premain3, environ,
+ into autofilter_symbollist_i386.
+ (auto_export): Get autofilter_symbollist from pe_details.
+
+2006-06-22 Nick Clifton <nickc@redhat.com>
+
+ PR ld/2757
+ * emultempl/pe.em (gld_$_after_open): When reporting non PE format
+ output files mention the file name and the fact that it is an
+ output file.
+
+2006-06-22 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_open_dynamic_archive):
+ Restructure. Add native "%s.lib" format to search list
+ * ld.texinfo (node WIN32): Update documentation on dynamic lib
+ search order. Add another reason for using import libs.
+
+2006-06-21 Mark Shinwell <shinwell@codesourcery.com>
+
+ * ldlang.c (lang_insert_orphan): Correctly handle the case where
+ the section is to end up after the section currently at the end
+ of the list in output_bfd.
+
+2006-06-21 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * emultempl/mmo.em: Improve comments. Explain why there's
+ ELF-stuff here.
+
+2006-06-21 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf-generic.em (gld${EMULATION_NAME}_map_segments): Limit
+ loop to ten iterations. Throw away any previous linker generated
+ segment map.
+ * ldlang.c (lang_phdr_list): Make global.
+ * ldlang.h (lang_phdr_list): Declare.
+ * Makefile.am (ELF_GEN_DEPS): Define. Use in emul deps.
+ * Makefile.in: Regenerate.
+
+2006-06-20 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am (ELF_DEPS): Define. Use in emul file deps. Fix
+ many ELF emul file deps that incorrectly said they needed elf32.em
+ instead of generic.em. Add genelf.em as required.
+ * Makefile.in: Regenerate.
+ * ldlang.c (lang_process): Call ldemul_finish before
+ lang_check_section_addresses.
+ * emulparams/arcelf.sh: Generic elf target needs genelf.
+ * emulparams/d30v_e.sh: Likewise.
+ * emulparams/d30v_o.sh: Likewise.
+ * emulparams/d30velf.sh: Likewise.
+ * emulparams/elf32_dlx.sh: Likewise.
+ * emulparams/elf32_i860.sh: Likewise.
+ * emulparams/elf32fr30.sh: Likewise.
+ * emulparams/elf32frv.sh: Likewise.
+ * emulparams/elf32iq10.sh: Likewise.
+ * emulparams/elf32iq2000.sh: Likewise.
+ * emulparams/elf32mt.sh: Likewise.
+ * emulparams/mn10200.sh: Likewise.
+ * emulparams/or32.sh: Likewise.
+ * emulparams/or32elf.sh: Likewise.
+ * emulparams/pjelf.sh: Likewise.
+ * emulparams/msp430all.sh: Likewise. Extract common entries.
+ * emulparams/pjlelf.sh: Include pjelf.sh.
+ * emulparams/elf32frvfd.sh (EXTRA_EM_FILE): Unset.
+ * emulparams/mn10300.sh (EXTRA_EM_FILE): Unset.
+ * emultempl/elf-generic.em: New file.
+ * emultempl/genelf.em: New file.
+ * emultempl/elf32.em: Include elf-generic.em.
+ (gld${EMULATION_NAME}_layout_sections_again): Delete.
+ (gld${EMULATION_NAME}_finish): Call gld${EMULATION_NAME}_map_segments.
+ * emultempl/hppaelf.em (hppaelf_layout_sections_again): Likewise.
+ (gld${EMULATION_NAME}_finish): Rename from hppaelf_finish. Call
+ gld${EMULATION_NAME}_map_segments.
+ (LDEMUL_FINISH): Update.
+ * emultempl/mmo.em: Correct comment. Include elf-bfd.h and
+ source elf-generic.em.
+ (mmo_finish): Call gld${EMULATION_NAME}_map_segments.
+ * emultempl/ppc64elf.em (ppc_layout_sections_again): Likewise.
+ (gld${EMULATION_NAME}_finish): Rename from ppc_finish. Call
+ gld${EMULATION_NAME}_map_segments.
+ (LDEMUL_FINISH): Update.
+
+2006-06-19 Alan Modra <amodra@bigpond.net.au>
+
+ * ldexp.c (fold_name): Adjust bfd_sizeof_headers call.
+
+2006-06-14 Kevin F. Quinn <kevquinn@gentoo.org>
+
+ * ld.texinfo: Document new -z lazy option.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_handle_option): Handle
+ new option.
+ (gld${EMULATION_NAME}_list_options): Update help text.
+
+2006-06-12 Fred Fish <fnf@specifix.com>
+
+ * emulparams/elf32bmip.sh (OTHER_SECTIONS): Keep the
+ ".mdebug.<abi>" and ".gcc_compiled_long<size>" sections
+ generated by mips gcc.
+
+2006-06-12 Thiemo Seufer <ths@mips.com>
+
+ * emulparams/elf64bmip.sh, emulparams/elf64btsmip.sh (COMMONPAGESIZE):
+ Define.
+
+2006-06-09 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.h (lang_input_statement_type): Use bitfields for booleans.
+ * ldlang.c (struct out_section_hash_entry): Rename from
+ output_statement_hash_entry. Delete output_section_statement_type
+ entry. Add statement_union_type entry. Adjust all users.
+ (output_section_statement_table): Rename from output_statement_table.
+ Adjust all users.
+ (output_section_statement_newfunc): Rename from
+ output_statement_newfunc. Adjust all users.
+ (output_section_statement_table_init): Rename from
+ output_statement_table_init. Adjust all users.
+ (output_section_statement_table_free): Rename from
+ output_statement_table_free. Adjust all users.
+
+2006-06-07 Joseph S. Myers <joseph@codesourcery.com>
+
+ * po/Make-in (pdf, ps): New dummy targets.
+
+2006-06-07 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.h (enum section_type): Delete dsect_section, copy_section,
+ info_section and overlay_section. Add noalloc_section.
+ * ldlang.c (lang_add_section): Adjust.
+ * ldgram.y (type): Adjust.
+
+2006-06-06 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (init_os): Whitespace.
+ (map_input_to_output_sections): Don't init_os for lang_input_section.
+ (print_all_symbols): Remove forward declaration. Convert to ISO C.
+
+2006-06-05 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * po/Make-in (top_builddir): Define.
+
+2006-06-05 Alan Modra <amodra@bigpond.net.au>
+
+ * ldexp.c (exp_get_abs_int): Make error message the same as
+ others emitted in this file.
+
+2006-06-05 Alan Modra <amodra@bigpond.net.au>
+
+ * config.in: Regenerate.
+
+2006-06-05 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lookup_name): Delete dead code. Remove FIXMEs.
+
+2006-06-03 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf32.em (global_found): Make it a pointer.
+ (stat_needed, try_needed): Adjust.
+ (check_needed): Don't skip non-loaded as-needed entries. Only
+ consider entries with both filename and the_bfd non-null.
+ (after_open): Try loading non-loaded as-needed libs to satisfy
+ DT_NEEDED libs.
+
+2006-06-02 Joseph S. Myers <joseph@codesourcery.com>
+
+ * Makefile.am (TEXI2DVI): Add -I $(top_srcdir)/../libiberty.
+ * Makefile.in: Regenerate.
+
+2006-05-31 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * Makefile.am: Replace INTLLIBS and INTLDEPS with LIBINTL
+ and LIBINTL_DEP everywhere.
+ (INTLLIBS): Remove.
+ (INCLUDES): Use @INCINTL@.
+ * configure.in: Use ZW_GNU_GETTEXT_SISTER_DIR and AM_PO_SUBDIRS.
+ Remove local code for po/Makefile.
+ * Makefile.in, configure: Regenerated.
+
+2006-05-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * emulparams/arcelf.sh (MAXPAGESIZE): Changed to
+ "CONSTANT (MAXPAGESIZE)".
+ * emulparams/armelf_nbsd.sh: Likewise.
+ * emulparams/armelf_vxworks.sh: Likewise.
+ * emulparams/armnto.sh: Likewise.
+ * emulparams/armsymbian.sh: Likewise.
+ * emulparams/crislinux.sh: Likewise.
+ * emulparams/elf32_i860.sh: Likewise.
+ * emulparams/elf32_i960.sh: Likewise.
+ * emulparams/elf32am33lin.sh: Likewise.
+ * emulparams/elf32bfinfd.sh: Likewise.
+ * emulparams/elf32bmipn32-defs.sh: Likewise.
+ * emulparams/elf32frvfd.sh: Likewise.
+ * emulparams/elf32i370.sh: Likewise.
+ * emulparams/elf32lppcnto.sh: Likewise.
+ * emulparams/elf32mcore.sh: Likewise.
+ * emulparams/elf32openrisc.sh: Likewise.
+ * emulparams/elf32ppcnto.sh: Likewise.
+ * emulparams/elf32ppcwindiss.sh: Likewise.
+ * emulparams/elf32vax.sh: Likewise.
+ * emulparams/elf32xc16x.sh: Likewise.
+ * emulparams/elf32xc16xl.sh: Likewise.
+ * emulparams/elf32xc16xs.sh: Likewise.
+ * emulparams/elf64_aix.sh: Likewise.
+ * emulparams/elf64hppa.sh: Likewise.
+ * emulparams/elf64mmix.sh: Likewise.
+ * emulparams/elf_i386_be.sh: Likewise.
+ * emulparams/elf_i386_chaos.sh: Likewise.
+ * emulparams/elf_i386_ldso.sh: Likewise.
+ * emulparams/hppa64linux.sh: Likewise.
+ * emulparams/hppalinux.sh: Likewise.
+ * emulparams/hppaobsd.sh: Likewise.
+ * emulparams/i386lynx.sh: Likewise.
+ * emulparams/i386moss.sh: Likewise.
+ * emulparams/i386nto.sh: Likewise.
+ * emulparams/i386nw.sh: Likewise.
+ * emulparams/m32relf_linux.sh: Likewise.
+ * emulparams/m68kpsos.sh: Likewise.
+ * emulparams/or32elf.sh: Likewise.
+ * emulparams/pjelf.sh: Likewise.
+ * emulparams/pjlelf.sh: Likewise.
+ * emulparams/ppclynx.sh: Likewise.
+ * emulparams/ppcnw.sh: Likewise.
+ * emulparams/shelf32_nbsd.sh : Likewise.
+ * emulparams/shelf_nbsd.sh: Likewise.
+ * emulparams/shelf_nto.sh: Likewise.
+ * emulparams/shlelf_nto.sh: Likewise.
+ * emulparams/xtensa-config.sh: Likewise.
+
+ * emulparams/armelf_linux.sh (MAXPAGESIZE): Changed to
+ "CONSTANT (MAXPAGESIZE)".
+ (COMMONPAGESIZE): Changed to "CONSTANT (COMMONPAGESIZE)".
+ * emulparams/elf32_sparc.sh: Likewise.
+ * emulparams/elf32bmip.sh: Likewise.
+ * emulparams/elf32ppccommon.sh: Likewise.
+ * emulparams/elf64_ia64.sh: Likewise.
+ * emulparams/elf64_s390.sh: Likewise.
+ * emulparams/elf64_sparc.sh: Likewise.
+ * emulparams/elf64alpha.sh: Likewise.
+ * emulparams/elf64ppc.sh: Likewise.
+ * emulparams/elf_i386.sh: Likewise.
+ * emulparams/elf_i386_vxworks.sh: Likewise.
+ * emulparams/elf_s390.sh: Likewise.
+ * emulparams/elf_x86_64.sh: Likewise.
+ * emulparams/shlelf32_linux.sh: Likewise.
+ * emulparams/shlelf_linux.sh: Likewise.
+
+ * emulparams/elf32bmipn32.sh (COMMONPAGESIZE): Changed to
+ "CONSTANT (COMMONPAGESIZE)".
+ * emulparams/elf32btsmipn32.sh: Likewise.
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_handle_option): Add
+ "-z max-page-size=" and "-z common-page-size=".
+ (gld${EMULATION_NAME}_list_options): Likewise.
+
+ * ld.h (ld_config_type): Add maxpagesize and commonpagesize.
+
+ * ld.texinfo: Document "-z max-page-size=" and
+ "-z common-page-size=".
+
+ * ldexp.c (exp_print_token): Handle CONSTANT.
+ (fold_name): Likewise.
+ * ldgram.y: Likewise.
+ * ldlex.l: Likewise.
+
+ * ldmain.c (main): Initiliaze config.maxpagesize and
+ config.commonpagesize. Call bfd_emul_set_maxpagesize if
+ config.maxpagesize isn't 0. Call bfd_emul_set_commonpagesize if
+ config.commonpagesize config.maxpagesize isn't 0.
+
+2006-05-30 Nick Clifton <nickc@redhat.com>
+
+ * po/es.po: Updated Spanish translation.
+
+2006-05-25 H.J. Lu <hongjiu.lu@intel.com>
+
+ * emulparams/elf_x86_64.sh (MAXPAGESIZE): Updated to 0x200000.
+
+2006-05-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/1485
+ * configure.in: Use ${srcdir}/../bfd/config.bfd to check 64bit
+ bfd. Support 64bit host for --enable-targets=all.
+ * configure: Regenerated.
+
+2006-05-24 Nick Clifton <nickc@redhat.com>
+
+ * po/vi.po: Updated Vietnamese translation.
+
+2006-05-24 Bjoern Haase <bjoern.m.haase@web.de>
+
+ * configure.tgt: Add avr6 to emulation list.
+ * Makefile.am: Add eavr6.o and corresponding rule.
+ * Makefile.in: Regenerate.
+ * emulparams/avr6.sh: New file.
+ * emulparams/avrX.sh (TEMPLATE_NAME): Use elf32 instead of generic
+ for target option support.
+ (EXTRA_EM_FILE): Add reference to new em template file avrelf.
+ * scripttempl/avr.sc: Add ".trampolines" section.
+ * emultempl/avrelf.em: Add new file for target specific options.
+
+2006-05-22 Nick Clifton <nickc@redhat.com>
+
+ * scripttempl/elf32crx.sc (.rdata): Add .rodata.*.
+
+2006-05-19 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_size_sections_1): Don't check mem regions for
+ os->ignored sections.
+
+2005-05-17 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ldlang.c (lang_size_sections): Call lang_reset_memory_regions
+ before redoing one_lang_size_sections_pass.
+
+2006-05-11 Carlos O'Donell <carlos@codesourcery.com>
+
+ * ld.texinfo: Rename "Index" to "LD Index"
+
+2006-05-11 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * pe-dll.c (autofilter_symbollist): Add Dllmain,
+ DllMainCRTStartup, _DllMainCRTStartup and .text.
+ (autofilter_liblist): Add libcegcc.
+ (autofilter_symbolprefixlist): Add __imp_ and .idata$.
+ (generate_reloc): Do not skip sections without a SEC_LOAD flag,
+ they can still contain relocs that need processing.
+ Skip the .idata$6 section.
+ (jmp_arm_bytes): New array: Contains byte codes for an ARM jump.
+ (make_one): Use the new array.
+ (make_import_fixup_entry): Use .idata$2 instead of .idata$3.
+ * emultempl/pe.em (MajorSubsystemVersion): Set to 3 for armpe.
+
+2006-05-05 Alan Modra <amodra@bigpond.net.au>
+
+ * ld.texinfo: Document PowerPC and PowerPC64 options.
+ * gen-doc.texi: Enable.
+
+2006-05-02 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * Makefile.am (AM_MAKEINFOFLAGS): Add libiberty.
+ (TEXI2POD): Use AM_MAKEINFOFLAGS.
+ (configdoc.texi): Don't set top_srcdir.
+ * ld.texinfo: Don't use top_srcdir.
+ * aclocal.m4, Makefile.in: Regenerated.
+
+2006-04-19 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (wild): Tidy default_common_section loop.
+ (print_input_section): Format.
+
+ * configure: Regenerate.
+
+2006-04-16 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * po/POTFILES.in: Regenerated.
+
+2006-04-16 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * config.in: Regenerated.
+
+2006-04-14 David Heine <dlheine@tensilica.com>
+ Bob Wilson <bob.wilson@acm.org>
+
+ * emultempl/xtensaelf.em (elf_xtensa_before_allocation): Call new
+ function to strip inconsistent linkonce sections.
+ (input_section_linked_worker, input_section_linked): New.
+ (is_inconsistent_linkonce_section): New.
+ (xtensa_strip_inconsistent_linkonce_sections): New.
+
+2006-04-11 Diego Pettenò <flameeyes@gentoo.org>
+
+ * emultempl/elf32.em: Add support for elf-hints.h on FreeBSD
+ and Dragonfly targets.
+ * configure.in (AC_CHECK_HEADERS): Add elf-hints.h.
+ * Makefile.am (HFILES): Add elf-hints-local.h.
+ * elf-hints-local.h: New file.
+ * Makefile.in: Regenerate.
+ * configure: Regenerate.
+
+2006-04-07 Bernhard Fischer <aldot@gcc.gnu.org>
+
+ * ld.texinfo: Fix typo in documentation of --check-sections.
+
+2006-04-07 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ldlang.c (load_symbols): Set as_needed and add_needed according
+ to the corresponding script's fields while processing it.
+
+2006-04-06 Carlos O'Donell <carlos@codesourcery.com>
+
+ * Makefile.am: Add install-html, install-html-am, and
+ install-html-recursive targets.
+ * Makefile.in: Regenerate.
+ * configure.in: AC_SUBST datarootdir, docdir, htmldir.
+ * configure: Regenerate.
+ * po/Make-in: Add install-html target.
+
+2006-04-06 H.J. Lu <hongjiu.lu@intel.com>
+
+ * emultempl/ia64elf.em: Set link_info.relax_pass to 2. Remove
+ link_info.need_relax_finalize.
+
+ * ldlang.c (relax_sections): New.
+ (lang_process): Use. Call relax_sections link_info.relax_pass
+ times.
+
+ * ldmain.c (main): Set link_info.relax_pass to 1. Remove
+ link_info.need_relax_finalize.
+
+2006-04-05 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am (GENSCRIPTS): Pass prefix.
+ * Makefile.in: Regenerate.
+ * genscripts.sh: Adjust for extra parameter.
+ * emultempl/elf32.em (parse_ld_so_conf): Return true iff file
+ exists.
+ (check_ld_so_conf): Use ${prefix}/etc/ld.so.conf if it exists.
+ * NEWS: Update.
+
+2006-04-05 Richard Sandiford <richard@codesourcery.com>
+ Daniel Jacobowitz <dan@codesourcery.com>
+
+ * configure.tgt (sparc*-*-vxworks*): New stanza.
+ * emulparams/elf32_sparc_vxworks.sh: New file.
+ * Makefile.am (ALL_EMULATIONS): Add eelf32_sparc_vxworks.o.
+ (eelf32_sparc_vxworks.c): New rule.
+ * Makefile.in: Regenerate.
+
+2006-04-04 Eric Botcazou <ebotcazou@adacore.com>
+
+ * ldlang.c (lang_map): Print the list of discarded input sections.
+ (print_input_section): Change parameter and print zero-sized sections.
+ (print_statement): Adjust call to print_input_section.
+
+2006-04-01 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * deffilep.y (def_image_name): If LIBRARY or NAME statement
+ specifies an empty string, retain the name specified on command
+ line.
+ * ld.texinfo: Document above.
+
+2006-03-31 Jakub Jelinek <jakub@redhat.com>
+
+ * ldmisc.c (vfinfo): Revert 2005-10-05 changes. If
+ bfd_find_nearest_line succeeded for %C or %D, but filename
+ is NULL, print section+offset at the end.
+
+2006-03-25 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * emulparams/elf32bfinfd.sh: New file.
+ * emultempl/bfin.em: Delete.
+ * emulparams/bfin.sh: Lose reference to bfin.em.
+ * Makefile.am (eelf32bfin.c): Likewise.
+ (eelf32bfinfd.c): New.
+ * Makefile.in: Regenerate.
+ * configure.tgt (bfin-*-elf, bfin-*-uclinux): Add elf32bfinfd to
+ targ_extra_emuls.
+
+2006-03-22 Richard Sandiford <richard@codesourcery.com>
+ Daniel Jacobowitz <dan@codesourcery.com>
+ Phil Edwards <phil@codesourcery.com>
+ Zack Weinberg <zack@codesourcery.com>
+ Mark Mitchell <mark@codesourcery.com>
+ Nathan Sidwell <nathan@codesourcery.com>
+
+ * configure.tgt (mips*el-*-vxworks*, mips*-*-vxworks*): Use
+ separate VxWorks emulations.
+ * emulparams/elf32ebmipvxworks.sh: New file.
+ * emulparams/elf32elmipvxworks.sh: New file.
+ * Makefile.am (ALL_EMULATIONS): Add eelf32ebmipvxworks.o and
+ eelf32elmipvxworks.o.
+ (eelf32ebmipvxworks.c, eelf32elmipvxworks.c): New rules.
+ * Makefile.in: Regenerate.
+
+2006-03-16 Alan Modra <amodra@bigpond.net.au>
+
+ PR 2434
+ * ldcref.c (add_cref): Adjust bfd_hash_table_init calls.
+ * ldlang.c (output_statement_table_init, lang_init): Likewise.
+ * ldmain.c (add_ysym, add_wrap, add_keepsyms_file): Likewise.
+ (undefined_symbol): Likewise.
+
+2006-03-07 Richard Sandiford <richard@codesourcery.com>
+ Daniel Jacobowitz <dan@codesourcery.com>
+ Zack Weinberg <zack@codesourcery.com>
+ Nathan Sidwell <nathan@codesourcery.com>
+ Paul Brook <paul@codesourcery.com>
+ Ricardo Anguiano <anguiano@codesourcery.com>
+ Phil Edwards <phil@codesourcery.com>
+
+ * emulparams/armelf_vxworks.sh: Include vxworks.sh.
+ (MAXPAGESIZE): Define.
+ * emulparams/vxworks.sh: Undefine EMBEDDED.
+ * Makefile.am (earmelf_vxworks.c): Depend on vxworks.sh and vxworks.em.
+ * Makefile.in: Regenerate.
+
+2006-03-03 Bjoern Haase <bjoern.m.haase@web.de>
+
+ * scripttempl/avr.sc: Add *(.jumptables) *(.lowtext) sections.
+ Add KEEP() directives.
+ Add *(.data*) *(.rodata) and *(.rodata*) and *(.bss*) to .data and
+ .bss output sections.
+
+2006-03-03 Richard Sandiford <richard@codesourcery.com>
+
+ * emulparams/vxworks.sh (VXWORKS_BASE_EM_FILE): New variable.
+ (EXTRA_EM_FILE): Define.
+ * emultempl/vxworks.em: New file.
+ * ld.texinfo (--force-dynamic): Document.
+ * Makefile.am (eelf32ppcvxworks.cm, eelf_i386_vxworks.c): Depend
+ on vxworks.em.
+ * Makefile.in: Regenerate.
+
+2006-03-02 Richard Sandiford <richard@codesourcery.com>
+
+ * emulparams/elf32ppccommon.sh: New file, extracted from...
+ * emulparams/elf32ppc.sh: ...here.
+ * emulparams/elf32ppcvxworks.sh: Include elf32ppccommon.sh
+ instead of elf32ppc.sh.
+ (BSS_PLT): Remove override.
+ * Makefile.am (eelf32lppc.c): Depend on elf32ppccommons.h.
+ (eelf32lppcnto.c, eelf32lppcsim.c, eelf32ppcnto.c): Likewise.
+ (eelf32ppc.c, eelf32ppc_fbsd.c, eelf32ppcsimm): Likewise.
+ (eelf32ppclinux.c): Likewise.
+ (eelf32ppcvxworks.c): Likewise. Add missing vxworks.sh dependency.
+ * Makefile.in: Regenerate.
+
+2006-02-27 Carlos O'Donell <carlos@codesourcery.com>
+
+ * Makefile.am: Add html target.
+ * Makefile.in: Regenerate.
+ * po/Make-in: Add html target.
+
+2006-02-17 Shrirang Khisti <shrirangk@kpitcummins.com>
+ Anil Paranjape <anilp1@kpitcummins.com>
+ Shilin Shakti <shilins@kpitcummins.com>
+
+ * scripttemp/elf32xc16x.sc: Default linker script for tiny model.
+ * scripttemp/elf32xc16xl.sc: Default linker script for large model.
+ * scripttemp/elf32xc16xs.sc: Default linker script for small model.
+ * emulparams/elf32xc16x.sh: Emulation script for tiny model.
+ * emulparams/elf32xc16xl.sh: Emulation script for large model.
+ * emulparams/elf32xc16xs.sh: Emulation script for small model.
+ * Makefile.am: Add entry to make xc16x target.
+ * Makefile.in: Regenerate.
+ * configure.tgt: Specify default and other emulation parameters
+ for xc16x.
+ * NEWS: Announce the support for the new target.
+
+2006-02-16 Nick Hudson <nick.hudson@dsl.pipex.com>
+
+ * configure.tgt (mips*el-*-netbsd*, mips*-*-netbsd*):
+ Use the traditional target.
+
+2006-02-13 Joseph S. Myers <joseph@codesourcery.com>
+
+ * configure.tgt (arm*b-*-linux-gnueabi): Change to
+ arm*b-*-linux-*eabi.
+ (arm*-*-linux-gnueabi): Change to arm*-*-linux-*eabi.
+
+2006-02-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/2290
+ * NEWS: Updated for the Linux linker search order change.
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_after_open): Call
+ gld${EMULATION_NAME}_check_ld_so_conf before checking default
+ search directories for DT_NEEDED entries.
+
+2006-02-07 Paul Brook <paul@codesourcery.com>
+
+ * emultempl/armelf.em: Include elf/arm.h.
+ (arm_elf_finish): Set low address bit if enty point is a Thumb
+ function.
+
+2006-02-01 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * deffilep.y (def_image_name): If the image name does not have
+ a suffix, append the default.
+ * ld.texinfo: Document NAME, LIBRARY usage in PE-COFF .def files.
+
+2006-01-31 Danny Smith dannysmith@users.sourceforge.net
+
+ * NEWS: Mention support for forward exports in PE-COFF dll's.
+ * ld.texinfo: Expand documentation of EXPORT statements in
+ PE-COFF .def files.
+
+2006-01-31 Filip Navara <navaraf@reactos.com>
+
+ * deffile.h (struct def_file_export): Add field flag_forward.
+ * pe-dll.c (process_def_file): Check for forward exports.
+ (generate_edata): Generate forward export symbols.
+ (fill_edata): Emit them.
+
+ * pe-dll.c (process_def_file): Don't crash on malformed
+ fastcall symbol names in .def file.
+
+2006-01-30 Nick Clifton <nickc@redhat.com>
+
+ * po/vi.po: Updated Vietnamese translation.
+
+2006-01-27 Yitzchak Scott-Thoennes <sthoenna@efn.org>
+
+ * pe-dll.c (pe_dll_generate_implib): Issue "Creating library
+ file:" as informational message, not a warning.
+
+2006-01-18 Roger Sayle <roger@eyesopen.com>
+
+ * emultempl/irix.em: Use lbasename instead of basename.
+
+2006-01-16 Nick Clifton <nickc@redhat.com>
+
+ * po/zh_CN.po: New Chinese (simplified) translation.
+ * configure.in (ALL_LINGUAS): Add "zh_CH".
+ * configure: Regenerate.
+
+2006-01-16 Bernhard Fischer <aldot@gcc.gnu.org>
+
+ * ld.texinfo (Options): Fix typo.
+
+For older changes see ChangeLog-2005
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/binutils-2.21/ld/ChangeLog-2007 b/binutils-2.21/ld/ChangeLog-2007
new file mode 100644
index 0000000..658e9cd
--- /dev/null
+++ b/binutils-2.21/ld/ChangeLog-2007
@@ -0,0 +1,1187 @@
+2007-12-24 Hector Oron <hector.oron@gmail.com>
+
+ * genscripts.sh (LIB_PATH): Include both {target_alias} and
+ {TOOL_LIB} in the search paths for multilibbed targets.
+
+2007-12-15 Richard Sandiford <rsandifo@nildram.co.uk>
+
+ * scripttempl/armbpabi.sc (.text): Don't KEEP (*(.text.*personality*)).
+ (.data): Don't KEEP (*(.gnu.linkonce.d.*personality*)).
+ * scripttempl/elf.sc: As for armbpabi.sc.
+ * scripttempl/elfxtensa.sc: Likewise.
+ * scripttempl/mep.sc: Likewise.
+
+2007-11-07 Nathan Sidwell <nathan@codesourcery.com>
+
+ * emulparams/vxworks.sh (OTHER_READONLY_SECTIONS,
+ OTHER_READWRITE_SECTIONS): Add TLS sections.
+
+2007-11-06 Kai Tietz <kai.tietz@onevision.com>
+
+ * emultempl/pe.em: (init): Add __ImageBase symbol.
+ (MSIMAGEBASEOFF): New.
+ (set_pe_name): Keep __image_base and __ImageBase value synch.
+ (_set_symbols): Likewise.
+ * emultempl/pep.em: Likewise.
+
+2007-10-26 Alan Modra <amodra@bigpond.net.au>
+
+ PR 5215
+ * genscripts.sh: Move bash script to..
+ * genscrba.sh: ..here.
+
+2007-10-25 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * pe-dll.c (autofilter_symbollist_generic)
+ (autofilter_symbollist_i386, autofilter_liblist)
+ (autofilter_objlist, autofilter_symbolprefixlist)
+ (autofilter_symbolsuffixlist): Don't use STRING_COMMA_LEN with
+ NULL.
+
+2007-10-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ * configure.in: Move AM_PROG_LIBTOOL after AC_GNU_SOURCE.
+ * configure: Regenerated.
+
+2007-10-24 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am (INCLUDES): Remove -D_GNU_SOURCE.
+ * configure.in: Invoke AC_GNU_SOURCE.
+ * Makefile.in: Regenerate.
+ * config.in: Regenerate.
+ * configure: Regenerate.
+ * po/POTFILES.in: Regenerate.
+
+2007-10-19 Nick Clifton <nickc@redhat.com>
+
+ * configure.tgt: Add support for am34-linux-gnu target.
+
+2007-10-17 Zack Weinberg <zack@codesourcery.com>
+
+ * ldlang.c (lang_check_section_addresses): Also report size of
+ overflow for any overflowed memory regions.
+ (os_region_check): Diagnose an overflowed region only once per
+ region. Do not reset region->current on overflow.
+
+2007-10-04 Nick Clifton <nickc@redhat.com>
+
+ PR linker/4844
+ * emultempl/pep.em (pep_find_data_imports): Issue a warning
+ message if auto importing is triggered without
+ --enable-auto-import having been specified on the command line.
+ * emultempl/pe.em (pe_find_data_imports): Likewise.
+
+ PR linker/5097
+ * emultempl/armelf.em (arm_elf_finish): Fix spelling typo.
+
+2007-10-01 Nick Clifton <nickc@redhat.com>
+
+ PR linker/4844
+ * genscripts.sh: Add support for generating a .xa script for use
+ with the --auto-import option.
+ * ld.texinfo: Document the new behaviour of the --auto-import
+ option.
+ * ldint.texinfo: Document new script generation.
+ * emulparams/i386pe.sh (GENERATE_AUTO_IMPORT): Define.
+ * emulparams/i386pe_posix.sh (GENERATE_AUTO_IMPORT): Define.
+ * emulparams/i386pep.sh (GENERATE_AUTO_IMPORT): Define.
+ * emultemp/pe.em (..._get_script): Support the use of the auto
+ import script.
+ * scripttempl/pe.sc: Put the .rdata input sections into the .data
+ output section when creating an auto import script.
+ * scripttempl/pep.sc: Likewise.
+
+2007-09-26 Brian Watt <bwatt@us.ibm.com>
+
+ * emultempl/spu_ovl.S: Add debug printf code.
+
+2007-09-17 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/3281
+ PR binutils/5037
+ * ldexp.h (ldexp_control): Add relro, relro_start_stat and
+ relro_end_stat.
+
+ * ldexp.c (fold_binary): Set expld.dataseg.relro to
+ exp_dataseg_relro_start or exp_dataseg_relro_end when
+ seeing DATA_SEGMENT_ALIGN or DATA_SEGMENT_RELRO_END,
+ respectively.
+
+ * ldlang.c (lang_size_sections_1): Properly set
+ expld.dataseg.relro_start_stat and
+ expld.dataseg.relro_end_stat.
+ (find_relro_section_callback): New function.
+ (lang_find_relro_sections_1): Likewise.
+ (lang_find_relro_sections): Likewise.
+ (lang_process): Call lang_find_relro_sections for
+ non-relocatable link.
+
+2007-09-17 Nick Clifton <nickc@redhat.com>
+
+ * po/es.po: Updated Spanish translation.
+
+2007-09-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * emultempl/elf32.em: Check DF_BIND_NOW instead of DT_BIND_NOW.
+
+2007-09-15 Alan Modra <amodra@bigpond.net.au>
+
+ PR ld/5025
+ * emultempl/elf32.em (write_build_id_section): Correct test for
+ "missing" .note.gnu.build-id. Downgrade error to a warning if
+ it has been discarded.
+
+2007-09-08 Alan Modra <amodra@bigpond.net.au>
+
+ * ldwrite.c (build_link_order <lang_padding_statement_enum>): Correct
+ condition under which we build a bfd_data_link_order.
+
+2007-08-31 Tristan Gingold <gingold@adacore.com>
+
+ * ldlang.c (lang_map): Increment lang_statement_iteration so that
+ DEFINED() expressions are correctly computed.
+
+2007-08-31 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_record_phdrs): Give a fatal error if no sections
+ assigned to phdrs. Avoid multiple forward scans for a section
+ with phdr assignment.
+
+2007-08-28 Mark Shinwell <shinwell@codesourcery.com>
+ Joseph Myers <joseph@codesourcery.com>
+
+ * ldlang.c (sort_sections_by_lma): Sort by internal id after lma
+ for stable sort.
+
+2007-08-28 Robert Sebastian Gerus <arachnist@gmail.com>
+
+ * configure.host: Add support for i[3-7]86-*-dragonfly*.
+ * configure.tgt: Likewise.
+
+2007-08-18 Alan Modra <amodra@bigpond.net.au>
+
+ * ld.texinfo (Input Section Basics): Correct EXCLUDE_FILE example.
+
+2007-08-17 Jakub Jelinek <jakub@redhat.com>
+
+ * configure.host: Handle sparcv*-*-linux-* the same as
+ sparc-*-linux-*. Change sparc64-*-linux-* to sparc64*-*-linux-*.
+
+2007-08-17 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/alphaelf.em: Format option help.
+ * emultempl/armcoff.em: Likewise.
+ * emultempl/armelf.em: Likewise.
+ * emultempl/avrelf.em: Likewise.
+ * emultempl/elf32.em: Likewise.
+ * emultempl/hppaelf.em: Likewise.
+ * emultempl/ia64elf.em: Likewise.
+ * emultempl/m68hc1xelf.em: Likewise.
+ * emultempl/ppc32elf.em: Likewise.
+ * emultempl/ppc64elf.em: Likewise.
+ * emultempl/scoreelf.em: Likewise.
+ * emultempl/spuelf.em: Likewise.
+ * emultempl/ticoff.em: Likewise.
+ * emultempl/vxworks.em: Likewise.
+ * emultempl/xtensaelf.em: Likewise.
+
+2007-08-17 Alan Modra <amodra@bigpond.net.au>
+
+ * ldexp.c (exp_get_vma, exp_get_fill): Canonicalise error messages.
+ * lexsup.c (ld_options): Don't use tabs in help text.
+ * emultempl/armcoff.em (gld${EMULATION_NAME}_finish): Fix typo.
+ * emultempl/pe.em (gld${EMULATION_NAME}_finish): Fix typo.
+
+2007-08-17 Alan Modra <amodra@bigpond.net.au>
+
+ * po/Make-in: Add --msgid-bugs-address to xgettext invocation.
+
+2007-08-15 Alan Modra <amodra@bigpond.net.au>
+
+ PR 4923
+ * emultempl/elf32.em (after_open): Return immediately when
+ non-ELF output.
+
+2007-08-12 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * configure.in (ALL_LINGUAS): Add fi.
+ * po/fi.po: New file.
+ * configure: Regenerated.
+
+2007-08-10 Nick Clifton <nickc@redhat.com>
+
+ * NEWS: Add a marker for the 2.18 features.
+
+2007-08-10 Nick Clifton <nickc@redhat.com>
+
+ * po/ga.po: Updated Irish translation.
+ * po/vi.po: Updated Vietnamese translation.
+
+2007-08-10 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+
+2007-08-10 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/4875
+ * elf-hints-local.h: Include bfd_stdint.h. Use uint32_t
+ instead of u_int32_t.
+
+ * sha1.h: Include bfd_stdint.h instead of <stdint.h>.
+
+2007-08-09 Alan Modra <amodra@bigpond.net.au>
+
+ PR 4515
+ * genscripts.sh: Delete all references to NONPAGED_TEXT_START_ADDR.
+ * ldint.texinfo: Likewise.
+ * emulparams/armaoutb.sh (NONPAGED_TEXT_START_ADDRESS): Delete.
+ * emulparams/armaoutl.sh: Likewise.
+ * emulparams/arcelf.sh (NONPAGED_TEXT_START_ADDR): Delete.
+ * emulparams/bfin.sh: Likewise
+ * emulparams/crisaout.sh: Likewise
+ * emulparams/elf32_sparc.sh: Likewise
+ * emulparams/elf32am33lin.sh: Likewise
+ * emulparams/elf32b4300.sh: Likewise
+ * emulparams/elf32bmip.sh: Likewise
+ * emulparams/elf32mcore.sh: Likewise
+ * emulparams/elf32xtensa.sh: Likewise
+ * emulparams/elf64_s390.sh: Likewise
+ * emulparams/elf64_sparc.sh: Likewise
+ * emulparams/elf64alpha.sh: Likewise
+ * emulparams/elf_i386.sh: Likewise
+ * emulparams/elf_i386_be.sh: Likewise
+ * emulparams/elf_i386_chaos.sh: Likewise
+ * emulparams/elf_i386_ldso.sh: Likewise
+ * emulparams/elf_i386_vxworks.sh: Likewise
+ * emulparams/elf_s390.sh: Likewise
+ * emulparams/elf_x86_64.sh: Likewise
+ * emulparams/i386aout.sh: Likewise
+ * emulparams/i386moss.sh: Likewise
+ * emulparams/i386msdos.sh: Likewise
+ * emulparams/i386nto.sh: Likewise
+ * emulparams/i386nw.sh: Likewise
+ * emulparams/m68kaout.sh: Likewise
+ * emulparams/m68kelf.sh: Likewise
+ * emulparams/ppcnw.sh: Likewise
+ * emulparams/sun4.sh: Likewise
+ * emulparams/tic80coff.sh: Likewise
+ * emulparams/vaxnbsd.sh: Likewise
+ * emulparams/armnbsd.sh (NONPAGED_TEXT_START_ADDR): Delete.
+ (TEXT_START_ADDR): Set for -n, -N.
+ * emulparams/coff_sparc.sh: Likewise
+ * emulparams/elf32vax.sh: Likewise
+ * emulparams/i386bsd.sh: Likewise
+ * emulparams/i386go32.sh: Likewise
+ * emulparams/i386linux.sh: Likewise
+ * emulparams/i386lynx.sh: Likewise
+ * emulparams/i386mach.sh: Likewise
+ * emulparams/m68k4knbsd.sh: Likewise
+ * emulparams/m68klinux.sh: Likewise
+ * emulparams/m68knbsd.sh: Likewise
+ * emulparams/ns32knbsd.sh: Likewise
+ * emulparams/pc532macha.sh: Likewise
+ * emulparams/ppclynx.sh: Likewise
+ * emulparams/scoreelf.sh: Likewise
+ * emulparams/sparcaout.sh: Likewise
+ * emulparams/sparclinux.sh: Likewise
+ * emulparams/sun3.sh: Likewise
+ * emulparams/vsta.sh: Likewise
+
+2007-08-07 Ralf Corsépius <ralf.corsepius@rtems.org>
+
+ * configure.tgt: Add bfin-*rtems*.
+
+2007-08-06 Kai Tietz <kai.tietz@onevision.com>
+
+ * emultempl/pep.em: (pep_enable_stdcall_fixup): Set to value 1.
+ (gld_xxx_recognized_file): Use pep_bfd_is_dll for detection of
+ shared objects.
+ * pe-dll.c: (autofilter_symbollist_i386): Define set for amd64
+ mingw target.
+
+2007-08-01 Nick Clifton <nickc@redhat.com>
+
+ * po/ga.po: Updated Irish translation.
+
+2007-07-29 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_insert_orphan): When searching through linker
+ script to place an orphan, don't stop on statements that appear
+ outside of SECTIONS.
+ * emultempl/elf32.em (output_rel_find): Prefer read-only alloc
+ sections over read/write alloc sections.
+
+2007-07-28 Jakub Jelinek <jakub@redhat.com>
+
+ * scripttempl/elf.sc: Add .note.gnu.build-id.
+
+2007-07-25 Nick Clifton <nickc@redhat.com>
+
+ PR 4824
+ * ld.texinfo (Options): Extend the description of the -O command
+ line option.
+
+2007-07-24 Kai Tietz <kai.tietz@onevision.com>
+
+ * pep.sc: Correct ctor/dtor sentinels for 64-bit targets.
+
+2007-07-21 Nick Clifton <nickc@redhat.com>
+
+ * sha1.h: Change to use version 3 of the GNU General Public
+ License and tidy up formatting.
+ * sha1.c: Likewise.
+
+2007-07-19 Roland McGrath <roland@redhat.com>
+
+ * genscripts.sh (source_em, fragment): New sh functions.
+ Truncate e${EMULATION_NAME}.c file before .em script fills it.
+ Use source_em in place of . for the .em script.
+ * emultempl/generic.em: Use fragment and source_em functions.
+ * emultempl/aix.em: Likewise.
+ * emultempl/alphaelf.em: Likewise.
+ * emultempl/armcoff.em: Likewise.
+ * emultempl/armelf.em: Likewise.
+ * emultempl/avrelf.em: Likewise.
+ * emultempl/beos.em: Likewise.
+ * emultempl/cr16elf.em: Likewise.
+ * emultempl/crxelf.em: Likewise.
+ * emultempl/elf-generic.em: Likewise.
+ * emultempl/elf32.em: Likewise.
+ * emultempl/genelf.em: Likewise.
+ * emultempl/gld960.em: Likewise.
+ * emultempl/gld960c.em: Likewise.
+ * emultempl/hppaelf.em: Likewise.
+ * emultempl/ia64elf.em: Likewise.
+ * emultempl/irix.em: Likewise.
+ * emultempl/linux.em: Likewise.
+ * emultempl/lnk960.em: Likewise.
+ * emultempl/m68hc1xelf.em: Likewise.
+ * emultempl/m68kcoff.em: Likewise.
+ * emultempl/m68kelf.em: Likewise.
+ * emultempl/mipsecoff.em: Likewise.
+ * emultempl/mipself.em: Likewise.
+ * emultempl/mmix-elfnmmo.em: Likewise.
+ * emultempl/mmixelf.em: Likewise.
+ * emultempl/mmo.em: Likewise.
+ * emultempl/needrelax.em: Likewise.
+ * emultempl/netbsd.em: Likewise.
+ * emultempl/pe.em: Likewise.
+ * emultempl/pep.em: Likewise.
+ * emultempl/ppc32elf.em: Likewise.
+ * emultempl/ppc64elf.em: Likewise.
+ * emultempl/scoreelf.em: Likewise.
+ * emultempl/sh64elf.em: Likewise.
+ * emultempl/spuelf.em: Likewise.
+ * emultempl/sunos.em: Likewise.
+ * emultempl/ticoff.em: Likewise.
+ * emultempl/vanilla.em: Likewise.
+ * emultempl/vxworks.em: Likewise.
+ * emultempl/xtensaelf.em: Likewise.
+ * emultempl/z80.em: Likewise.
+
+2007-07-18 Roland McGrath <roland@redhat.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_write_build_id_section):
+ Use ASEC->contents for CONTENTS when missing, and allocate
+ ASEC->size if needed.
+
+2007-07-13 Roland McGrath <roland@redhat.com>
+
+ * emultempl/elf32.em (struct build_id_info): New type.
+ (gld${EMULATION_NAME}_id_note_section_size): New function.
+ (gld${EMULATION_NAME}_write_build_id_section): New function.
+ (gld${EMULATION_NAME}_after_open): Use them.
+ (DEFAULT_BUILD_ID_STYLE): Change to "sha1".
+ * ld.texinfo (Options): Mention --build-id=sha1.
+
+ * sha1.h: New file (from gnulib).
+ * sha1.c: New file (from gnulib).
+ * Makefile.am (CFILES, HFILES, OFILES, ld_new_SOURCES): Add them.
+ (sha1.o): New target.
+ * Makefile.in: Regenerated.
+
+2007-07-13 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (strip_excluded_output_sections): Don't ignore sections
+ with update_dot_tree.
+
+2007-07-12 Nathan Sidwell <nathan@codesourcery.com>
+
+ * scripttempl/pe.sc: Don't include .gcc_except_table and
+ .eh_frame on partial links.
+ * scripttempl/pep.sc: Likewise.
+
+2007-07-12 Alan Modra <amodra@bigpond.net.au>
+
+ PR 4782
+ * ldlang.c (lang_size_sections_1 <output_section_statement>): Only
+ use expld.result when valid.
+
+2007-07-12 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/spuelf.em (embedded_spu_file): Test for NULL path
+ before calling base_name, not after.
+
+2007-07-10 Alan Modra <amodra@bigpond.net.au>
+
+ * scripttempl/elf.sc (DISCARDED): Renamed from STACKNOTE. Add
+ .gnu.debuglink.
+ * scripttempl/armbpabi.sc: Likewise.
+ * scripttempl/elf32sh-symbian.sc: Likewise.
+ * scripttempl/elfxtensa.sc: Likewise.
+ * scripttempl/mep.sc: Likewise.
+
+2007-07-09 Roland McGrath <roland@redhat.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_add_option): Add --build-id.
+ (gld${EMULATION_NAME}_handle_option): Handle --build-id.
+ (gld${EMULATION_NAME}_list_options): List --build-id.
+ (gld${EMULATION_NAME}_after_open): If --build-id was given,
+ synthesize a ".note.gnu.build-id" section and cache it in elf_tdata.
+ * ld.texinfo (Options): Describe --build-id.
+ * NEWS: Mention --build-id.
+
+2007-07-06 Nick Clifton <nickc@redhat.com>
+
+ * deffile.h: Update copyright notice to refer to GPLv3.
+ * deffilep.y, ldcref.c, ldctor.c, ldctor.h, ldemul.c, ldemul.h,
+ ldexp.c, ldexp.h, ldfile.c, ldfile.h, ldgram.y, ld.h, ldlang.c,
+ ldlang.h, ldlex.h, ldlex.l, ldmain.c, ldmain.h, ldmisc.c,
+ ldmisc.h, ldver.c, ldver.h, ldwrite.c, ldwrite.h, lexsup.c, mri.c,
+ mri.h, pe-dll.c, pe-dll.h, pep-dll.c, pep-dll.h, stamp-h.in,
+ sysdep.h, emultempl/aix.em, emultempl/alphaelf.em,
+ emultempl/armcoff.em, emultempl/armelf.em, emultempl/avrelf.em,
+ emultempl/beos.em, emultempl/cr16elf.em, emultempl/crxelf.em,
+ emultempl/elf32.em, emultempl/elf-generic.em, emultempl/genelf.em,
+ emultempl/generic.em, emultempl/gld960c.em, emultempl/gld960.em,
+ emultempl/hppaelf.em, emultempl/ia64elf.em, emultempl/irix.em,
+ emultempl/linux.em, emultempl/lnk960.em, emultempl/m68hc1xelf.em,
+ emultempl/m68kcoff.em, emultempl/m68kelf.em,
+ emultempl/mipsecoff.em, emultempl/mipself.em,
+ emultempl/mmixelf.em, emultempl/mmix-elfnmmo.em, emultempl/mmo.em,
+ emultempl/needrelax.em, emultempl/pe.em, emultempl/pep.em,
+ emultempl/ppc32elf.em, emultempl/ppc64elf.em,
+ emultempl/scoreelf.em, emultempl/sh64elf.em, emultempl/spuelf.em,
+ emultempl/spu_ovl.S, emultempl/sunos.em, emultempl/ticoff.em,
+ emultempl/vanilla.em, emultempl/xtensaelf.em: Likewise.
+ * genscripts.sh: Add copyright notice.
+ * emultempl/netbsd.em, emultempl/vxworks.em, emultempl/z80.em:
+ Likewise.
+ * NEWS: Mention that the sources are now under GPLv3.
+ * configure: Regenerate.
+
+2007-07-05 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * ld.texinfo (--heap): Replace 'amount' with 'number of bytes'.
+ (--stack): Likewise.
+
+2007-07-03 Matthias Klose <doko@ubuntu.com>
+
+ * emultempl/spuelf.em (base_name): Correct backslash quoting.
+
+2007-07-02 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.in: Regenerate.
+ * aclocal.m4: Regenerate.
+ * config.in: Regenerate.
+ * po/ld.pot: Regenerate.
+
+2007-06-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * aclocal.m4: Regenerated.
+ * Makefile.in: Likewise.
+
+2007-06-29 H.J. Lu <hongjiu.lu@intel.com>
+
+ * NEWS: Remove a line with '*' only.
+
+2007-06-29 Joseph Myers <joseph@codesourcery.com>
+
+ * emulparams/armelf.sh (OTHER_SECTIONS): Remove .ARM.attributes.
+ (ATTRS_SECTIONS): Define.
+ * scripttempl/elf.sc, scripttempl/elf32sh-symbian.sc,
+ scripttempl/elf_chaos.sc, scripttempl/elfi370.sc,
+ scripttempl/elfxtensa.sc: Handle ATTRS_SECTIONS.
+
+2007-06-29 M R Swami Reddy <MR.Swami.Reddy@nsc.com>
+
+ * scripttemp/elf32cr16.sc: Default linker script.
+ * emulparams/elf32cr16.sh: Emulation script.
+ * emultempl/cr16elf.em: Emulation script.
+ * Makefile.am: Add entry to make cr16 target.
+ * Makefile.in: Regenerate.
+ * configure.tgt: Specify default and other emulation parameters
+ for cr16.
+ * ChangeLog: Added CR16 target entry.
+ * NEWS: Announce the support for the CR16 new target.
+
+2007-06-27 Alan Modra <amodra@bigpond.net.au>
+
+ * pe-dll.c: Rename uses of bfd.next to bfd.archive_next throughout.
+
+2007-06-20 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/elf32_spu.sh (OTHER_SECTIONS): KEEP .note.spu_name.
+
+2007-06-18 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ldlex.l, ldgram.y: Add ALIGNOF.
+ * ldexp.c (exp_print_token, foldname): Likewise.
+ * ld.texinfo: Likewise.
+
+2007-06-18 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am: Add eelf32_spu.o rule.
+ * Makefile.in: Regenerate.
+ * emultempl/spuelf.em: Revert last change. Instead use EMBEDSPU
+ defined in Makefile for embedspu name.
+
+2007-06-18 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/spuelf.em (embedded_spu_file): Deduce embedspu program
+ name prefix from that of ld.
+
+2007-06-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makefile.am (ACLOCAL_AMFLAGS): Add -I ../config -I ../bfd.
+
+ * acinclude.m4: Removed.
+
+ * Makefile.in: Regenerated.
+ * aclocal.m4: Likewise.
+ * configure: Likewise.
+
+2007-06-14 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/spu_ovl.S: Don't trash lr on tail call from one
+ overlay to another.
+ * emultempl/spu_ovl.o: Regenerate.
+
+2007-06-11 Bob Wilson <bob.wilson@acm.org>
+
+ * emulparams/elf32xtensa.sh (OTHER_READONLY_SECTIONS): Add ONLY_IF_RO
+ for .xt_except_table.
+ (OTHER_RELRO_SECTIONS): New.
+
+2007-06-11 Sterling Augustine <sterling@tensilica.com>
+ Bob Wilson <bob.wilson@acm.org>
+
+ * emultempl/xtensaelf.em (replace_insn_sec_with_prop_sec): Use renamed
+ XTENSA_PROP_NO_TRANSFORM flag instead of XTENSA_PROP_INSN_NO_TRANSFORM.
+
+2007-06-01 Noah Misch <noah@cs.caltech.edu>
+ Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (ldlang_add_file): Use input_bfds_tail.
+ * ldmain.c (main): Init input_bfds_tail. Sort link_info
+ initialization.
+
+2007-05-29 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/spuelf.em (base_name): New function, split out from..
+ (embedded_spu_file) ..here. Pass -fPIC or -fpie to embedspu
+ invocation if we deduce a shared lib or position independent
+ executable build by looking at ctrbegin* linker input files.
+
+2007-05-29 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/spu_ovl.S (__rv_pattern, __cg_pattern): Set symbol
+ types and sizes.
+ * emultempl/spu_ovl.o: Regenerate.
+
+2007-05-24 Steve Ellcey <sje@cup.hp.com>
+
+ * Makefile.in: Regnerate.
+ * configure: Regenerate.
+ * aclocal.m4: Regenerate.
+
+2007-05-24 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ldlex.l: ASSERT is recognized in SCRIPT env. NAMES cannot
+ contain commas in EXP env.
+ * ldgram.y (extern_name_list): Push to EXP env, move body to ...
+ (extern_name_list_body): ... here.
+ (script_file, ifile_list): Reformat.
+ (statement): Add ASSERT.
+
+2007-05-22 Nick Clifton <nickc@redhat.com>
+
+ * ld.texinfo: Use @copying around the copyright notice.
+ * ldint.texinfo: Likewise.
+
+2007-05-18 Richard Sandiford <richard@codesourcery.com>
+
+ * emulparams/elf32ebmipvxworks.sh (OTHER_READONLY_SECTIONS)
+ (OTHER_READWRITE_SECTIONS): Define. Add .rdata sections.
+
+2007-05-16 Richard Sandiford <richard@codesourcery.com>
+
+ * configure.in: Allow sysroots to be relocated under $prefix as
+ well as $exec_prefix.
+ * configure: Regenerate.
+
+2007-05-14 Andreas Schwab <schwab@suse.de>
+
+ * emultempl/ppc64elf.em (gld${EMULATION_NAME}_new_vers_pattern):
+ Handle null pattern.
+
+2007-05-11 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc32elf.em (plt_style): New variable.
+ (old_plt): Delete.
+ (ppc_after_open): Adjust ppc_elf_select_plt_layout call.
+ (PARSE_AND_LIST_PROLOGUE): Define OPTION_NEW_PLT, renumber
+ OPTION_OLD_PLT, OPTION_OLD_GOT and OPTION_STUBSYMS.
+ (PARSE_AND_LIST_LONGOPTS, PARSE_AND_LIST_OPTIONS): Add secure-plt.
+ (PARSE_AND_LIST_ARGS_CASES): Handle OPTION_NEW_PLT.
+ * ld.texinfo (--secure-plt): Document.
+
+2007-05-08 Alan Modra <amodra@bigpond.net.au>
+
+ * ld.h (args_type, ld_config_type): Reorder fields.
+ * ldmain.c (main): Don't initialise a bunch of vars we know are
+ zero already.
+
+2007-05-05 Anatoly Sokolov <aesok@post.ru>
+
+ * multempl/avrelf.em (PARSE_AND_LIST_ARGS_CASES): Add new value for
+ "--pmem-wrap-around".
+ (PARSE_AND_LIST_OPTIONS): Describe new value for "--pmem-wrap-around".
+
+2007-05-03 Bob Wilson <bob.wilson@acm.org>
+
+ * scripttempl/elfxtensa.sc: Merge changes from elf.sc.
+
+2007-05-03 Alan Modra <amodra@bigpond.net.au>
+
+ * ld.texinfo (--no-warn-search-mismatch): Document.
+ * ldfile.c (ldfile_try_open_bfd): Don't warn about skipping
+ incompatible libraries if --no-warn-search-mismatch.
+ * ld.h (args_type): Add warn_search_mismatch.
+ * ldmain.c (main): Init it.
+ * lexsup.c (enum option_values): Add OPTION_NO_WARN_SEARCH_MISMATCH.
+ (ld_options): Add entry for --no-warn-search-mismatch.
+ (parse_args): Handle OPTION_NO_WARN_SEARCH_MISMATCH.
+
+2007-05-03 Alan Modra <amodra@bigpond.net.au>
+
+ * scripttempl/elf.sc: Add .debug_pubtypes and .debug_ranges.
+
+2007-05-01 Robert Millan <rmh@aybabtu.com>
+
+ * ldlang.c (lang_check): Error on architecture mismatch.
+
+2007-04-30 Alan Modra <amodra@bigpond.net.au>
+
+ * ldmain.c (link_callbacks): Init info and minfo fields.
+ * ldmisc.c (minfo): Do nothing if no map file.
+ * emultempl/spuelf.em (stack_analysis, emit_stack_syms): New vars.
+ (spu_after_open): Adjust spu_elf_create_sections call.
+ (spu_before_allocation): Likewise for spu_elf_size_stubs.
+ (OPTION_SPU_STACK_ANALYSIS, OPTION_SPU_STACK_SYMS): Define.
+ (PARSE_AND_LIST_LONGOPTS): Add new entries.
+ (PARSE_AND_LIST_OPTIONS, PARSE_AND_LIST_ARGS_CASES): Likewise.
+ * gen-doc.texi: Add @set for SPU and other missing targets.
+ * ld.texinfo: Update man page selection to match gen-doc.texi.
+ Document SPU features.
+
+2007-04-28 Alan Modra <amodra@bigpond.net.au>
+
+ * ldcref.c (struct cref_hash_entry): Make "demangled" const.
+ (cref_fill_array): Adjust for changed demangler.
+ * ldlang.c (lang_one_common): Likewise.
+
+2007-04-27 Nathan Froyd <froydnj@codesourcery.com>
+
+ * emulparams/elf32_sparc.sh: Update comments.
+ * emulparams/elf32bmip.sh: Likewise.
+ * emulparams/elf32ppc.sh: Likewise.
+ * emulparams/vxworks.sh: Likewise.
+
+2007-04-27 Alan Modra <amodra@bigpond.net.au>
+
+ Many files: Include sysdep.h first. Remove duplicate headers.
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+
+2007-04-24 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.in: Regenerate.
+
+2007-04-19 Alan Modra <amodra@bigpond.net.au>
+
+ * ldcref.c (cref_fill_array): Call bfd_demangle rather than demangle.
+ * ldlang.c (lang_one_common): Likewise.
+ * ldmisc.c (vfinfo): Likewise.
+ (demangle): Delete.
+ * ldmisc.h (demangle): Delete.
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+
+2007-04-18 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.h (enum section_type): Add overlay_section.
+ * ldlang.c (lang_add_section): Handle flags for overlay_section
+ as per normal_section.
+ (lang_size_sections_1): When setting lma, detect overlays by
+ os->sectype rather than by looking for overlapping vmas.
+ (lang_enter_overlay_section): Use overlay_section type.
+ (lang_leave_overlay): Set first overlay section to normal.
+
+2007-04-14 Steve Ellcey <sje@cup.hp.com>
+
+ * Makefile.am: Add ACLOCAL_AMFLAGS.
+ * Makefile.in: Regenerate.
+
+2007-04-12 Bob Wilson <bob.wilson@acm.org>
+
+ * emulparams/elf32xtensa.sh (OTHER_SECTIONS): KEEP property sections.
+
+2007-04-10 Richard Henderson <rth@redhat.com>
+
+ * ldlang.c (relax_sections): Initialize and increment
+ link_info.relax_trip.
+
+2007-04-04 Paul Brook <paul@codesourcery.com>
+
+ * configure.tgt: Loosen checks for arm uclinux eabi targets.
+
+2007-04-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/4090
+ * ldexp.h (node_type): Add lineno.
+ * ldexp.c: Include "ldlex.h".
+ (exp_intop): Set the lineno field from lineno.
+ (exp_bigintop): Likewise.
+ (exp_relop): Likewise.
+ (exp_nameop): Likewise.
+ (exp_binop): Set the lineno field from lineno of lhs.
+ (exp_trinop): Likewise.
+ (exp_unop): Set the lineno field from lineno of child.
+ (exp_assop): Set the lineno field from lineno of src.
+ (exp_provide): Likewise.
+ (exp_assert): Set the lineno field from lineno of exp.
+ (exp_get_abs_int): Set lineno from lineno of nonconstant
+ expression when report problem.
+
+2007-03-29 Richard Sandiford <richard@codesourcery.com>
+ Daniel Jacobowitz <dan@codesourcery.com>
+
+ * NEWS: Mention -l:foo.
+ * ld.texinfo: Document it.
+ * ldlang.c (new_afile): If a lang_input_file_is_l_enum
+ entry as a name beginning with a coloh, convert it to a
+ lang_input_file_is_search_file_enum entry without the colon.
+
+2007-03-28 Richard Sandiford <richard@codesourcery.com>
+
+ * ld.h (ld_config_type): Add rpath_separator.
+ * ldmain.c (main): Initialize it.
+ * lexsup.c (parse_args): Honor config.rpath_separator.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_search_needed): Likewise.
+ (gld${EMULATION_NAME}_add_sysroot): Likewise.
+ (gld${EMULATION_NAME}_parse_ld_so_conf): Use config.rpath_separator
+ rather than ':' when building the path.
+ * emultempl/vxworks.em (vxworks_before_parse): New function.
+ Override config.rpath_separator.
+ (LDEMUL_AFTER_OPEN): Do not change if EXTRA_EM_FILE has been
+ set to gld${EMULATION_NAME}_after_open; #define that identifier
+ to vxworks_foo instead.
+ (LDEMUL_BEFORE_PARSE): Override in the same way as LDEMUL_AFTER_OPEN.
+
+2007-03-28 Richard Sandiford <richard@codesourcery.com>
+ Phil Edwards <phil@codesourcery.com>
+
+ * ld.texinfo: Put the contents after the title page rather
+ than at the end of the document.
+
+2007-03-26 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am: Add dependency on ldemul-list.h for powerpc and
+ spu target emul files.
+ * configure.in: Check for mkstemp and waitpid.
+ * Makefile.in: Regenerate.
+ * configure: Regenerate.
+ * config.in: Regenerate.
+ * ldlang.c (input_file_chain): Make global.
+ (lang_add_input_file): Don't set lang_has_input_file here.
+ * ldlang.h (input_file_chain): Declare.
+ * emultempl/ppc32elf.em (ppc_recognized_file): New function.
+ (LDEMUL_RECOGNIZED_FILE): Define.
+ * emultempl/ppc64elf.em (ppc64_recognized_file): New function.
+ (LDEMUL_RECOGNIZED_FILE): Define.
+ * emultempl/spuelf.em (struct tflist): New.
+ (tmp_file_list): New var.
+ (clean_tmp, embedded_spu_file): New functions.
+
+2007-03-24 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_insert_orphan): Provide start/stop loadaddr syms
+ rather than defining unconditionally.
+ (lang_leave_overlay_section): Likewise.
+ * ld.texinfo (Overlay Description): Update description and examples
+ for start/stop syms.
+
+2007-03-22 Joseph Myers <joseph@codesourcery.com>
+
+ * ld.texinfo: Include VERSION_PACKAGE when reporting version.
+
+2007-03-20 Paul Brook <paul@codesourcery.com>
+
+ * emultempl/armelf.em (pic_veneer): New variable.
+ (PARSE_AND_LIST_PROLOGUE): Add OPTION_PIC_VENEER.
+ (PARSE_AND_LIST_ARGS_CASES): Ditto.
+ (PARSE_AND_LIST_LONGOPTS): Add "pic-veneer".
+ (PARSE_AND_LIST_OPTIONS): Ditto.
+ * ld.texinfo: Document --pic-veneer.
+
+2007-03-18 Mark Shinwell <shinwell@codesourcery.com>
+
+ * ld.texinfo: Document --no-enum-size-warning.
+ * emultempl/armelf.em (no_enum_size_warning): New.
+ (arm_elf_create_output_section_statements): Correct typo
+ in comment. Pass no_enum_size_warning to
+ bfd_elf32_arm_set_target_relocs.
+ (PARSE_AND_LIST_PROLOGUE): Define OPTION_NO_ENUM_SIZE_WARNING.
+ (PARSE_AND_LIST_OPTIONS): Document --no-enum-size-warning.
+ (PARSE_AND_LIST_ARGS_CASES): Add OPTION_NO_ENUM_SIZE_WARNING
+ case.
+
+2007-03-19 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * configure.tgt (bfin-*-elf, bfin-*-uclinux*): Add targ_extra_libpath.
+ (bfin-*-linux-uclibc*): New target.
+
+2007-03-16 Kai Tietz <Kai.Tietz@onevision.com>
+
+ * pe-dll.c (make_one): Use pc-relative relocation instead of an
+ absolute relocation for x86_64-pc-mingw32 target.
+
+2007-03-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makefile.am (ld_TEXINFOS): Remove ldver.texi.
+ (AM_MAKEINFOFLAGS): Add -I ../../bfd/doc.
+ (TEXI2DVI): Likewise.
+ (REPORT_BUGS_TO): Removed.
+ (INCLUDES): Remove -DREPORT_BUGS_TO.
+ (ldver.texi): Likewise.
+ (ld.1): Don't depend on ldver.texi.
+ (MOSTLYCLEANFILES): Remove ldver.texi.
+ * Makefile.in: Regenerated.
+
+ * configure.in (--with-bugurl): Removed.
+ * configure: Regenerated.
+
+ * lexsup.c: Include bfdver.h.
+
+ * ld.texinfo: Include bfdver.texi instead of ldver.texi.
+
+2007-03-11 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * emultempl/mmixelf.em: Remove incorrect '#line' directive.
+
+2007-03-08 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_size_sections_1): Correct backwards dot move
+ test to not trigger on overlays. Only warn on backwards move
+ if non-default lma.
+
+2007-03-07 Joseph Myers <joseph@codesourcery.com>
+
+ * configure.in (REPORT_BUGS_TEXI): Define to Texinfo version of
+ bug-reporting URL.
+ * Makefile.am (ldver.texi): Define BUGURL.
+ * ld.texinfo: Use BUGURL.
+ * Makefile.in, configure: Regenerate.
+
+2007-03-07 Nick Clifton <nickc@redhat.com>
+
+ PR ld/4023
+ * emultempl/aix.em (..._before_allocation): Strip sysroot prefix
+ from any paths being inserted into the output binary's DT_RPATH.
+
+2007-03-02 Nathan Sidwell <nathan@codesourcery.com>
+
+ * emulparams/shelf_uclinux.sh: New. Missed in 2007-02-28 commit.
+
+2007-03-01 Joseph Myers <joseph@codesourcery.com>
+
+ * ldver.c (ldversion): Remove word "version" from output. Update
+ copyright date.
+
+2007-02-28 Nathan Sidwell <nathan@codesourcery.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add eshelf_uclinux.o
+ (eshelf_uclinux.c): New target.
+ * Makefile.in: Rebuilt.
+ * configure.tgt (sh-*-uclinux* | sh[12]-*-uclinux*): New stanza.
+ * emulparams/shelf_uclinux.sh: New.
+
+2007-02-28 Alan Modra <amodra@bigpond.net.au>
+
+ * configure.tgt: Fix type last change.
+ * configure.tgt (spu-*-elf*): Delete targ_extra_ofiles.
+
+2007-02-27 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am (ALL_EMUL_EXTRA_OFILES): Remove spu_inc.o.
+ (eelf32_spu.c): Adjust dependencies.
+ * Makefile.in: Regenerate.
+ * emultempl/spuelf.em (ovl_mgr): New array. Insert spu_ovl.o
+ code using bin2c.
+ (_binary_spu_ovl_o_start, _binary_spu_ovl_o_end): Delete.
+ (ovl_mgr_stream): Update.
+ * emultempl/spu_inc.s: Delete.
+ * emultempl/spu_none.s: Delete.
+
+2007-02-26 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/spuelf.em (_binary_builtin_ovl_mgr_start): Rename
+ to _binary_spu_ovl_o_start.
+ (_binary_builtin_ovl_mgr_end): Rename to _binary_spu_ovl_o_end.
+ (spu_elf_load_ovl_mgr): Fatal error on missing overlay manager.
+ * emultempl/spu_inc.s: Rename symbols.
+ * emultempl/spu_none.s: New file.
+ * emultempl/spu_ovl.S: Update copyright.
+ * Makefile.am (spu_inc.o): Try building with ld -r first, then
+ gas incbin, then build without overlay manager.
+ * Makefile.in: Regenerate.
+
+2007-02-22 Joseph Myers <joseph@codesourcery.com>
+
+ * configure.tgt (mips64*el-*-linux-*, mips64*-*-linux-*,
+ mips*el-*-linux-*, mips*-*-linux-*): Set
+ targ_extra_libpath=$targ_extra_emuls.
+
+2007-02-21 Nick Clifton <nickc@redhat.com>
+
+ * ldlang.c (ldlang_override_segment_assignment): New function.
+ * ldlang.h (ldlang_override_segment_assignment): Prototype.
+ * ldmain.c (link_callbacks): Add
+ ldlang_override_segment_assignment.
+
+2007-02-20 Alan Modra <amodra@bigpond.net.au>
+
+ * ldexp.c (fold_name <LOADADDR>): Ensure result is always absolute.
+
+2007-02-17 Mark Mitchell <mark@codesourcery.com>
+ Nathan Sidwell <nathan@codesourcery.com>
+ Vladimir Prus <vladimir@codesourcery.com
+ Joseph Myers <joseph@codesourcery.com>
+
+ * configure.in (--with-bugurl): New option.
+ * configure: Regenerate.
+ * Makefile.am (REPORT_BUGS_TO): Define.
+ (INCLUDES): Define REPORT_BUGS_TO.
+ Regenerate dependencies.
+ * Makefile.in: Regenerate.
+ * ld.h: Remove include of bin-bugs.h.
+ * lexsup.c (help): Don't print empty REPORT_BUGS_TO.
+
+2007-02-17 Alan Modra <amodra@bigpond.net.au>
+
+ * ldcref.c (check_reloc_refs): Compare section for local syms.
+
+2007-02-13 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/spu_ovl.S (__ovly_return, __ovly_load): Set sym size.
+ (__ovly_load_event): Define.
+ (size): Rename to osize.
+ * emultempl/spu_ovl.o: Regenerate.
+
+2007-02-13 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/elf64ppc.sh (OTHER_READWRITE_SECTIONS): Add ".branch_lt".
+ * emultempl/ppc64elf.em (ppc_add_stub_section): Create without
+ SEC_RELOC flag set.
+
+2007-02-09 H.J. Lu <hongjiu.lu@intel.com>
+
+ * configure.in (targ_extra_emuls): Add $targ64_extra_emuls if
+ want64 is true.
+ (targ_extra_libpath): Add $targ64_extra_libpath if want64 is
+ true
+ * configure: Regenerated.
+
+ * configure.tgt (targ_extra_libpath): Initialize.
+ (targ64_extra_emuls): New. Document. Initialize.
+ (targ64_extra_libpath): Likewise.
+ (i[3-7]86-*-linux-*): Set targ64_extra_emuls and
+ targ64_extra_libpath.
+ (powerpc*-*-linux*): Likewise.
+ (s390-*-linux*): Likewise.
+
+2007-02-07 Paul Brook <paul@codesourcery.com>
+
+ * configure.tgt: Add arm*-*-uclinux-*eabi.
+
+2007-02-06 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ldlang.c (lang_size_sections_1): Add a missing `)'.
+
+2007-02-06 Alan Modra <amodra@bigpond.net.au>
+
+ PR ld/3966
+ * ldlang.c (lang_size_sections_1): Don't warn on backwards dot
+ move unless section size is non-zero.
+
+2007-02-05 Dave Brolley <brolley@redhat.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add support for Toshiba MeP.
+ * configure.tgt: Likewise.
+ * scripttempl/mep.sc: New file.
+ * emulparams/elf32mep.sh: New file.
+ * Makefile.in: Regenerate.
+
+2006-01-29 Julian Brown <julian@codesourcery.com>
+
+ * NEWS: Mention --vfp11-denorm-fix option.
+ * ld.texinfo: Document above.
+ * emulparams/armelf_linux.sh (OTHER_TEXT_SECTIONS): Add
+ .vfp11_veneer section.
+ * emulparams/armelf.sh (OTHER_TEXT_SECTIONS): Likewise.
+ * emultempl/armelf.em (vfp11_denorm_fix): New static variable.
+ (arm_elf_before_allocation): Call bfd_elf32_arm_set_vfp11_fix,
+ bfd_elf32_arm_init_maps and bfd_elf32_arm_vfp11_erratum_scan.
+ (arm_elf_after_allocation): New function. Call
+ bfd_elf32_arm_vfp11_fix_veneer_locations for all input statements.
+ (arm_elf_create_output_section_statements): Pass vfp11 fix command
+ line option to BFD.
+ (OPTION_VFP11_DENORM_FIX): New option.
+ (PARSE_AND_LIST_LONGOPTS): Handle new option.
+ (PARSE_AND_LIST_OPTIONS): Likewise.
+ (PARSE_AND_LIST_ARGS_CASES): Likewise.
+ (LDEMUL_AFTER_ALLOCATION): Define.
+
+2007-01-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ldgram.y (SIZEOF_HEADERS): Remove duplicated one.
+ (DEFSYMEND): Likewise.
+ (NAME): Likewise.
+ (LNAME): Likewise.
+
+2007-01-19 Murali Vemulapati <murali.vemulapati@gmail.com>
+
+ * pe-dll.c: (make_one) Conditionally include jump stubs.
+ * emultempl/pe.em (gld_${EMULATION_NAME}_after_open): Identify
+ redundant jump stubs from import libraries and exclude them from
+ link.
+
+2007-01-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld.h (args_type): Add new symbolic and dynamic_list fields.
+
+ * ld.texinfo: Update -Bsymbolic-functions.
+
+ * ldmain.c (main): Initialize command_line.symbolic to
+ symbolic_unset and command_line.dynamic_list to
+ dynamic_list_unset. Check -Bsymbolic, -Bsymbolic-functions and
+ --dynamic-list* before setting link_info.symbolic,
+ link_info.dynamic and link_info.dynamic_data.
+
+ * lexsup.c (option_values): Add OPTION_SYMBOLIC_FUNCTIONS.
+ (ld_options): Use OPTION_SYMBOLIC_FUNCTIONS with
+ -Bsymbolic-functions.
+ (parse_args): Handle -Bsymbolic-functions. Don't set
+ link_info.dynamic, link_info.dynamic_data and link_info.symbolic
+ here. Set command_line.symbolic for -Bsymbolic. Set
+ command_line.dynamic_list and command_line.symbolic for
+ --dynamic-list-data, --dynamic-list-cpp-new,
+ --dynamic-list-cpp-typeinfo and --dynamic-list.
+
+2007-01-19 Jakub Jelinek <jakub@redhat.com>
+ H.J. Lu <hongjiu.lu@intel.com>
+
+ * emultempl/elf32.em (handle_option): Make sure -z max-page-size
+ or -z common-page-size argument is a power of 2. Call
+ bfd_emul_set_maxpagesize and bfd_emul_set_commonpagesize.
+
+2007-01-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ldmain.c (main): Don't call bfd_emul_set_maxpagesize nor
+ bfd_emul_set_commonpagesize.
+
+2007-01-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * NEWS: Mention --default-script/-dT.
+
+ * ld.h (args_type): Add a default_script field.
+
+ * ld.texinfo: Document --default-script/-dT.
+
+ * ldmain.c (main): Handle command_line.default_script.
+
+ * lexsup.c (option_values): Add OPTION_DEFAULT_SCRIPT.
+ (ld_options): Add entries for --default-script and -dT.
+ (parse_args): Handle --default-script/-dT.
+
+2007-01-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3831
+ * NEWS: Mention -Bsymbolic-functions, --dynamic-list-data and
+ --dynamic-list-cpp-new.
+
+ * ld.texinfo: Document -Bsymbolic-functions, --dynamic-list-data
+ and --dynamic-list-cpp-new.
+
+ * ldlang.c (lang_append_dynamic_list_cpp_new): New.
+ (lang_process): Change link_info.dynamic to
+ link_info.dynamic_list.
+ (lang_append_dynamic_list): Likewise.
+ * ldmain.c (main): Likewise. Initialize link_info.dynamic and
+ link_info.dynamic_data to FALSE.
+
+ * ldlang.h (lang_append_dynamic_list_cpp_new): New.
+
+ * lexsup.c (option_values): Add OPTION_DYNAMIC_LIST_DATA and
+ OPTION_DYNAMIC_LIST_CPP_NEW.
+ (ld_options): Add entries for -Bsymbolic-functions,
+ --dynamic-list-data and --dynamic-list-cpp-new. Make
+ -Bsymbolic-functions an alias of --dynamic-list-data.
+ (parse_args): Change link_info.dynamic to link_info.dynamic_list.
+ Set link_info.dynamic to TRUE for --dynamic-list and
+ --dynamic-list-cpp-typeinfo. Handle --dynamic-list-data and
+ --dynamic-list-cpp-new.
+
+2007-01-11 Nathan Sidwell <nathan@codesourcery.com>
+
+ * emultempl/elf-generic.em (gdl_map_segments): Only allow header
+ shrinkage for the first few iterations.
+
+2007-01-08 Kai Tietz <kai.tietz@onevision.com>
+
+ * configure.tgt: Renamed target x86_64-*-mingw64 to
+ x86_64-*-mingw*.
+
+2007-01-08 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * configure.host: Add i[3-7]86-*-mingw* case.
+
+2007-01-08 Nick Clifton <nickc@redhat.com>
+
+ * pep-dll.h (pep_bfd_is_dll): Add prototype.
+
+2007-01-08 Aurelien Jarno <aurelien@aurel32.net>
+
+ PR ld/3843
+ * configure.tgt (x86_64_[k]freebsd*): Add targ_extra_libpath and
+ tdir_elf_i386_fbsd.
+
+2007-01-06 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ldexp.c (fold_name): Issue error on undefined sections.
+
+2007-01-02 Alan Modra <amodra@bigpond.net.au>
+
+ * pe-dll.c: Include pe-dll.h.
+ * pep-dll.c (pe_bfd_is_dll): Define.
+
+For older changes see ChangeLog-2006
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/binutils-2.21/ld/ChangeLog-2008 b/binutils-2.21/ld/ChangeLog-2008
new file mode 100755
index 0000000..fece723
--- /dev/null
+++ b/binutils-2.21/ld/ChangeLog-2008
@@ -0,0 +1,1099 @@
+2008-12-23 Jon Beniston <jon@beniston.com>
+
+ * Makefile.am: Add LM32 object files and dependencies.
+ * Makefile.in: Regenate.
+ * NEWS: Record that support for LM32 has been added.
+ * configure.tgt: Add LM32 targets.
+ * emulparams/elf32lm32.sh: New file.
+ * emulparams/elf32lm32fd.sh: New file.
+
+2008-12-23 Tristan Gingold <gingold@adacore.com>
+
+ * Makefile.am (EXTRA_DIST): Add deffilep.c and deffilep.h
+ * Makefile.in: Regenerate.
+
+2008-12-23 Nick Clifton <nickc@redhat.com>
+
+ * NEWS: Remove mention of support for STT_IFUNC.
+
+2008-12-18 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * configure: Regenerate.
+
+2008-12-10 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/spuelf.em (params): Init new field.
+ (OPTION_SPU_NUM_REGIONS): Define.
+ (PARSE_AND_LIST_LONGOPTS, PARSE_AND_LIST_OPTIONS): Add --num-regions.
+ (PARSE_AND_LIST_ARGS_CASES): Handle --num-regions.
+
+2008-12-10 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/spuelf.em (params): New var, used instead of various others.
+ Adjust use throughout file.
+ (spu_after_open): Call spu_elf_setup.
+ (spu_place_special_section): Tidy.
+ (spu_elf_load_ovl_mgr): Return total size of sections loaded. Move
+ code setting overlay section alignment to..
+ (spu_before_allocation): ..here.
+
+2008-12-03 Nick Clifton <nickc@redhat.com>
+
+ * NEWS: Mention new feature.
+ * pe-dll.c (process_def_file): Replace use of redundant
+ BFD_FORT_COMM_DEFAULT_VALUE with 0.
+ * scripttempl/elf.sc: Add .rel.ifunc.dyn and .rela.ifunc.dyn
+ sections.
+
+2008-12-02 Kai Tietz <kai.tietz@onevision.com>
+
+ * pe-dll.c (make_runtime_pseudo_reloc): Make symtab big enough to
+ hold relocations.
+
+2008-11-27 M R Swami Reddy <MR.Swami.Reddy@nsc.com>
+
+ * emultempl/cr16elf.em (cr16_after_open): New function to handle
+ CR16 ELF embedded reloc creation (ld --embedded-relocs).
+ (check_sections): New function.
+ (LDEMUL_AFTER_OPEN): Define.
+ * emulparams/elf32cr16.sh (EMBEDDED): Define.
+
+2008-11-26 Alan Modra <amodra@bigpond.net.au>
+
+ PR 7047
+ * emultempl/ppc64elf.em (gld${EMULATION_NAME}_new_vers_pattern): Update
+ for changes to struct bfd_elf_version_expr.
+ * ldlang.c (lang_vers_match, version_expr_head_hash): Likewise.
+ (version_expr_head_eq, lang_finalize_version_expr_head): Likewise.
+ (lang_register_vers_node): Likewise.
+ (lang_new_vers_pattern): Likewise. Ensure "literal" is set when
+ no glob chars found in "pattern".
+ (realsymbol): Correct backslash quote logic.
+ * ld.texinfo (VERSION): Warn about global wildcards.
+
+2008-11-24 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_record_phdrs): Don't add orphans to PT_INTERP header.
+
+2008-11-19 Nick Clifton <nickc@redhat.com>
+
+ * fdl.texi: Update to v1.3
+ * ld.texinfo: Change license to v1.3.
+
+2008-11-17 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * configure.tgt [spu-*-elf*]: Set NATIVE_LIB_DIRS to '/lib'.
+
+2008-11-17 Nick Clifton <nickc@redhat.com>
+
+ * ldver.c: Update copyright year.
+
+2008-11-14 Kai Tietz <kai.tietz@onevision.com>
+
+ * emultempl/pep.em (..._before_parse): initialize
+ pei386_runtime_pseudo_reloc by version 2.
+ (OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V1): New option.
+ (OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V2): New option.
+ (make_import_fixup): Use relocation size to read addend.
+ * emultempl/pe.em (..._before_parse): initialize
+ pei386_runtime_pseudo_reloc by version 1.
+ (OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V1): New option.
+ (OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V2): New option.
+ * pe-dll.c (pe-dll.h): Remove useless include.
+ (make_runtime_pseudo_reloc): Change addend to use bfd_vma.
+ Handle the two variants of pseudo-relocation.
+ (pe_create_import_fixup): Change addend to type bfd_vma.
+ Modify for the two pseudo_relocation variants.
+ (runtime_pseudp_reloc_v2_init): New static variable.
+ * pe-dll.h (pe_create_import_fixup): Change addend argument type
+ to bfd_vma.
+ * pep-dll.h (pep_create_import_fixup): Likewise.
+ * NEWS: Add comment.
+
+2008-11-14 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am (spu_ovl.o_c): Add missing line continuations.
+ * Makefile.in: Regenerate.
+
+2008-11-06 Joel Sherrill <joel.sherrill@oarcorp.com>
+
+ * configure.tgt: Add m32c-*-rtems* and m32r-*-rtems*.
+
+2008-11-03 Bob Wilson <bob.wilson@acm.org>
+
+ * emulparams/elf32xtensa.sh (NO_REL_RELOCS): Set.
+ * scripttempl/elfxtensa.sc (NO_REL_RELOCS, NO_RELA_RELOCS)
+ (NON_ALLOC_DYN): Import changes from elf.sc.
+
+2008-10-25 Nick Clifton <nickc@redhat.com>
+
+ PR 6945
+ * ldlang.c (lang_size_sections_1): Do not update the VMAs of
+ output sections when performing a relocatable link on COFF
+ objects.
+
+2008-10-22 Nick Clifton <nickc@redhat.com>
+
+ * emultempl/armelf.em (arm_elf_after_open): Move check for using a
+ non-arm output target from here...
+ (arm_elf_create_output_section_statements): ... to here, so that
+ the check is made at the earliest possible opportunity.
+
+2008-10-22 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/elf32_i960.sh (TEMPLATE_NAME): "generic", not "elf32".
+ (EXTRA_EM_FILE): Define.
+
+2008-10-22 Alan Modra <amodra@bigpond.net.au>
+
+ * scripttempl/elf.sc (NO_REL_RELOCS, NO_RELA_RELOCS, NON_ALLOC_DYN):
+ Handle these defines.
+ * emulparams/criself.sh, * emulparams/crislinux.sh,
+ * emulparams/elf32am33lin.sh, * emulparams/elf32fr30.sh,
+ * emulparams/elf32_i860.sh, * emulparams/elf32ip2k.sh,
+ * emulparams/elf32mcore.sh, * emulparams/elf32ppccommon.sh,
+ * emulparams/elf32ppcwindiss.sh, * emulparams/elf32_sparc.sh,
+ * emulparams/elf32_spu.sh, * emulparams/elf32vax.sh,
+ * emulparams/elf64alpha.sh, * emulparams/elf64mmix.sh,
+ * emulparams/elf64ppc.sh, * emulparams/elf64_s390.sh,
+ * emulparams/elf64_sparc.sh, * emulparams/elf_s390.sh,
+ * emulparams/elf_x86_64.sh, * emulparams/h8300elf.sh,
+ * emulparams/hppa64linux.sh, * emulparams/hppalinux.sh,
+ * emulparams/m68kelf.sh, * emulparams/mn10200.sh,
+ * emulparams/pjelf.sh, * emulparams/ppclynx.sh,
+ * emulparams/shelf32.sh, * emulparams/shelf_nto.sh,
+ * emulparams/shelf.sh, * emulparams/shelf_vxworks.sh,
+ * emulparams/shlelf32_linux.sh, * emulparams/shlelf_linux.sh,
+ * emulparams/shlelf_nto.sh (NO_REL_RELOCS): Set.
+ * emulparams/arcelf.sh, * emulparams/elf32_i960.sh,
+ * emulparams/elf32openrisc.sh, * emulparams/elf_i386_be.sh,
+ * emulparams/elf_i386_ldso.sh, * emulparams/elf_i386.sh,
+ * emulparams/elf_i386_vxworks.sh, * emulparams/i386lynx.sh,
+ * emulparams/i386moss.sh, * emulparams/i386nto.sh,
+ * emulparams/or32elf.sh, * emulparams/scoreelf.sh (NO_RELA_RELOCS): Set.
+
+2008-10-22 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_output_section_find_by_flags): Handle non-alloc
+ sections.
+ * emultempl/elf32.em (enum orphan_save_index): Add orphan_nonalloc.
+ (hold): Likewise.
+ (gld${EMULATION_NAME}_place_orphan): Handle non-alloc orphans.
+
+2008-10-22 Bernhard Reutner-Fischer <aldot@gcc.gnu.org>
+
+ * emultempl/armelf.em (PARSE_AND_LIST_OPTIONS): Correct typo in
+ help text of --be8.
+
+2008-10-20 Alan Modra <amodra@bigpond.net.au>
+
+ * ldemul.h (ldemul_place_orphan): Update prototype.
+ (struct ld_emulation_xfer_struct <place_orphan>): Likewise.
+ * ldemul.c (ldemul_place_orphan): Return pointer to output
+ section statement.
+ * emultempl/beos.em (gld${EMULATION_NAME}_place_orphan): Likewise.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Likewise.
+ * emultempl/mmo.em (mmo_place_orphan): Likewise.
+ * emultempl/pe.em (gld_${EMULATION_NAME}_place_orphan): Likewise.
+ * emultempl/pep.em (gld_${EMULATION_NAME}_place_orphan): Likewise.
+
+2008-10-08 Nick Clifton <nickc@redhat.com>
+
+ * configure.in (ALL_LINGUAS): Add "id".
+ * configure: Regenerate.
+ * po/id.po: New Indonesian translation.
+
+2008-10-05 Alan Modra <amodra@bigpond.net.au>
+
+ PR 6943
+ * scripttempl/avr.sc (.bss): Set lma when relocating.
+ (.bss, .noinit): No need to set vma when relocating.
+ (.text, .bss, ,noinit): Set vma to zero when not relocating.
+
+2008-10-04 Alan Modra <amodra@bigpond.net.au>
+
+ PR 6931
+ * ldemul.c (ldemul_place_orphan): Add "constraint" param.
+ * ldemul.h (ldemul_place_orphan): Update prototype.
+ (struct ld_emulation_xfer_struct <place_orphan>): Likewise add param.
+ * ldlang.c (unique_section_p): Make static.
+ (lang_output_section_statement_lookup): Optimise creation of SPECIAL
+ sections.
+ (lang_insert_orphan): Add "constraint" param. Pass to
+ lang_enter_output_section_statement.
+ (init_os): Don't use an existing bfd section for SPECIAL sections.
+ (lang_place_orphans): Don't rename unique output sections, instead
+ mark their output section statements SPECIAL.
+ * ldlang.h (lang_insert_orphan): Update prototype.
+ (unique_section_p): Delete.
+ * emultempl/beos.em (place_orphan): Add "constraint" param.
+ * emultempl/elf32.em (place_orphan): Likewise. Don't match existing
+ output sections if set.
+ * emultempl/pe.em (place_orphan): Likewise.
+ * emultempl/pep.em (place_orphan): Likewise.
+ * emultempl/mmo.em (mmo_place_orphan): Update.
+ * emultempl/spuelf.em (spu_place_special_section): Update.
+
+2008-10-03 Alan Modra <amodra@bigpond.net.au>
+
+ PR 6931
+ * ldemul.c (ldemul_place_orphan): Add "name" param.
+ * ldemul.h (ldemul_place_orphan): Update prototype.
+ (struct ld_emulation_xfer_struct <place_orphan>): Likewise.
+ * ldlang.c (lang_place_orphans): Generate unique section names here..
+ * emultempl/elf32.em (place_orphan): ..rather than here. Don't
+ directly use an existing output section statement that has no
+ bfd section.
+ * emultempl/pe.em (place_orphan): Likewise.
+ * emultempl/pep.em (place_orphan): Likewise.
+ * emultempl/beos.em (place_orphan): Adjust.
+ * emultempl/spuelf.em (spu_place_special_section): Adjust
+ place_orphan call.
+ * emultempl/genelf.em (gld${EMULATION_NAME}_after_open): New function.
+ (LDEMUL_AFTER_OPEN): Define.
+
+2008-09-30 Joseph Myers <joseph@codesourcery.com>
+
+ * emulparams/elf64ppc.sh (OTHER_GOT_RELOC_SECTIONS): Add .rela.opd
+ and .rela.branch_lt.
+
+2008-09-30 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+
+2008-09-29 Peter O'Gorman <pogma@thewrittenword.com>
+ Steve Ellcey <sje@cup.hp.com>
+
+ * configure: Regenerate for new libtool.
+ * aclocal.m4: Ditto.
+ * Makefile.in: Ditto.
+
+2008-09-29 Kai Tietz <kai.tietz@onevision.com>
+
+ * pe-dll.c (make_import_fixup_entry): Make sure reloc is addend.
+
+2008-09-29 Nick Clifton <nickc@redhat.com>
+
+ * po/vi.po: Updated Vietnamese translation.
+
+2008-09-25 Alan Modra <amodra@bigpond.net.au>
+
+ * ldexp.c (fold_binary): Evaluate rhs when lhs not valid.
+
+2008-09-11 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * configure.in: Call AC_SYS_LARGEFILE.
+ * config.in: Regenerate.
+ * configure: Regenerate.
+
+2008-09-09 Peter Rosin <peda@lysator.liu.se> (tiny change)
+
+ * emultempl/pe.em (pe_find_data_imports): Add trailing newline
+ to warning message.
+ * emultempl/pep.em (pep_find_data_imports): Likewise.
+
+2008-09-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ 2008-09-07 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/beos.em (gld${EMULATION_NAME}_place_orphan): Updated.
+ * emultempl/sunos.em (gld${EMULATION_NAME}_before_allocation): Likewise.
+
+2008-09-08 Tristan Gingold <gingold@adacore.com>
+
+ * NEWS: Add a marker for the 2.19 features.
+
+2008-09-07 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.h (lang_output_section_find): Define.
+ (lang_output_section_statement_lookup): Update prototype.
+ * ldlang.c (lang_output_section_find,
+ lang_output_section_statement_lookup_1): Merge into..
+ (lang_output_section_statement_lookup): ..here. Update all callers.
+ (process_insert_statements): Set constraint negative
+ for output section statements we might be inserting. Make error
+ fatal on not finding insertion section.
+ (lang_output_section_find): Rather than comparing
+ output_section_statement.constraint against -1, test whether
+ it is postive.
+ (lang_output_section_statement_lookup_1): Likewise.
+ (output_prev_sec_find, strip_excluded_output_sections): Likewise.
+ (lang_record_phdrs): Likewise.
+ * emultempl/elf32.em (output_rel_find): Likewise.
+ * NEWS: Mention INSERT.
+
+2008-08-26 Nick Clifton <nickc@redhat.com>
+
+ PR 6727
+ * emultempl/armelf.em (arm_elf_set_bfd_for_interworking): Scan all
+ input sections in all input bfds and always select the last
+ suitable one, so that interworking stubs are always processed
+ after all other input sections.
+ (arm_elf_before_allocation): Remove redundant use of
+ output_has_begun flag.
+
+2008-08-24 Alan Modra <amodra@bigpond.net.au>
+
+ * configure.in: Update a number of obsolete autoconf macros.
+ * configure: Regenerate.
+ * aclocal.m4: Regenerate.
+
+2008-08-21 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ PR ld/6833
+ * ldexp.c (fold_binary <DATA_SEGMENT_ALIGN>): Do not align
+ EXPLD.DATASEG.MIN_BASE.
+ * ldlang.c (lang_size_sections): New variable OLD_BASE. Rename
+ OLD_MIN_BASE to MIN_BASE with the former alignment from `ldexp.c'.
+ Use OLD_BASE now for the minimal base check after the base decrease by
+ the maximum alignment found.
+
+2008-08-17 Alan Modra <amodra@bigpond.net.au>
+
+ PR 6478
+ * ldcref.c (check_local_sym_xref): Use bfd_generic_link_read_symbols.
+ Don't free symbol pointer array.
+ (check_refs): Likewise.
+ * ldmain.c (warning_callback): Likewise.
+ * ldmisc.c (vfinfo): Likewise.
+ * pe-dll.c (process_def_file): Likewise.
+ (pe_walk_relocs_of_symbol, generate_reloc): Likewise.
+ * emultempl/pe.em (pe_find_data_imports): Likewise.
+ (gld_${EMULATION_NAME}_after_open): Likewise.
+ * emultempl/pep.em (pep_find_data_imports): Likewise.
+ (gld_${EMULATION_NAME}_after_open): Likewise.
+ * ldlang.h (lang_input_statement_type): Delete asymbols, symbol_count,
+ passive_position, closed.
+ * ldlang.c (new_afile): Don't set asymbols and symbol_count.
+ * ldmain.c (add_archive_element): xcalloc lang_input_statement_type.
+
+2008-08-15 Alan Modra <amodra@bigpond.net.au>
+
+ PR 6526
+ * configure.in: Invoke AC_USE_SYSTEM_EXTENSIONS.
+ * Makefile.in: Regenerate.
+ * aclocal.m4: Regenerate.
+ * config.in: Regenerate.
+ * configure: Regenerate.
+
+2008-08-09 Alan Modra <amodra@bigpond.net.au>
+
+ PR 6753
+ * ldmain.c (check_for_scripts_dir, set_scripts_dir): Delete.
+ (main): Don't set_scripts_dir here.
+ * ldfile.c (check_for_scripts_dir, find_scripts_dir): New functions,
+ largely based on ldmain.c versions.
+ (ldfile_find_command_file): Set up search in script dir here without
+ affecting library search.
+ * Makefile.am (ldmain.o): No need to define SCRIPTDIR.
+ (ldfile.o): New rule.
+ * Makefile.in: Regenerate.
+
+2008-08-08 Anatoly Sokolov <aesok@post.ru>
+
+ * Makefile.am (ALL_EMULATIONS): Add eavr25.o, eavr31.o, eavr35.o,
+ and eavr51.o.
+ Add rules for eavr25.c, eavr31.c, eavr35.c, eavr51.c.
+ * Makefile.in: Regenerate.
+ * configure.tgt (avr-*-*, targ_extra_emuls): Add avr25, avr31, avr35
+ and avr51.
+ * emulparams/avr25.sh: New file.
+ * emulparams/avr31.sh: New file.
+ * emulparams/avr35.sh: New file.
+ * emulparams/avr51.sh: New file.
+
+2008-08-08 Richard Sandiford <rdsandiford@googlemail.com>
+ Daniel Jacobowitz <dan@codesourcery.com>
+
+ * emulparams/elf32bmip.sh (GOT): Define, moving .got.plt to...
+ (OTHER_RELRO_SECTIONS, OTHER_READWRITE_SECTIONS): ...one of these
+ two variables.
+ * emulparams/elf32bmipn32-defs.sh: Likewise.
+ * emultempl/mipself.em: Include ldctor.h, elf/mips.h and elfxx-mips.h.
+ (is_mips_elf): New macro.
+ (stub_file, stub_bfd): New variables.
+ (hook_stub_info): New structure.
+ (hook_in_stub): New function.
+ (mips_add_stub_section): Likewise.
+ (mips_create_output_section_statements): Likewise.
+ (mips_before_allocation): Likewise.
+ (real_func): New variable.
+ (mips_for_each_input_file_wrapper): New function.
+ (mips_lang_for_each_input_file): Likewise.
+ (lang_for_each_input_file): Define.
+ (LDEMUL_BEFORE_ALLOCATION): Likewise.
+ (LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS): Likewise.
+
+2008-08-08 Alan Modra <amodra@bigpond.net.au>
+
+ * ldfile.c (ldfile_open_file_search): Use concat.
+ (try_open): Don't use a fixed size pathname buffer.
+ (ldfile_find_command_file): Likewise.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_open_dynamic_archive): If
+ using EXTRA_SHLIB_EXTENSION, don't open twice.
+
+2008-08-04 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am (POTFILES.in): Set LC_ALL=C.
+ * Makefile.in: Regenerate.
+ * po/POTFILES.in: Regenerate.
+
+2008-08-03 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am (spu_ovl.o): Merge rule into..
+ (spu_ovl.o_c): ..this one. Only run cpp for spu target.
+ * Makefile.in: Regenerate.
+
+2008-08-02 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Include the spu_ovl ASCII form in the repository files.
+ * emultempl/spuelf.em: No longer use `bin2c', use now `spu_ovl.o_c'.
+ * Makefile.am (eelf32_spu.c): Depend now on `spu_ovl.o_c'.
+ ($(srcdir)/emultempl/spu_ovl.o_c): New target.
+ ($(srcdir)/emultempl/spu_ovl.o): Rename to...
+ (spu_ovl.o): ...this one.
+ * Makefile.in: Regenerate.
+ * emultempl/spu_ovl.o_c: New file.
+ * emultempl/spu_ovl.o: File removed.
+
+2008-07-31 Takashi Ono <t_ono@hkfreak.net>
+
+ * pe-dll.c (generate_relocs): Don't generate relocs for
+ undefined weak symbols.
+
+2008-07-31 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * emultempl/spuelf.em: Abort on the missing required `spu_ovl.o'.
+
+2008-07-30 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/pe.em, emultempl/pep.em: Silence gcc warnings.
+
+2008-07-18 Joseph Myers <joseph@codesourcery.com>
+
+ * ld.texinfo (--no-wchar-size-warning): Document new ARM option.
+ * emultempl/armelf.em (no_wchar_size_warning): New.
+ (arm_elf_create_output_section_statements): Pass
+ no_wchar_size_warning to arm_elf_create_output_section_statements.
+ (OPTION_NO_WCHAR_SIZE_WARNING): New.
+ (PARSE_AND_LIST_LONGOPTS): Add no-wchar-size-warning.
+ (PARSE_AND_LIST_OPTIONS): List --no-wchar-size-warning.
+ (PARSE_AND_LIST_ARGS_CASES): Handle --no-wchar-size-warning.
+
+2008-07-15 Jie Zhang <jie.zhang@analog.com>
+
+ * emulparams/elf32bfinfd.sh (OTHER_SECTIONS): Define.
+
+2008-07-12 Craig Silverstein <csilvers@google.com>
+
+ PR ld/6741
+ * configure.in: Check for, and include, libz.a if it is present.
+ * configure: Regenerate.
+ * config.in: Regenerate.
+
+2008-07-12 Jie Zhang <jie.zhang@analog.com>
+
+ Revert
+ 2008-07-12 Jie Zhang <jie.zhang@analog.com>
+ * Makefile.am (eelf32bfin.c): Depend on bfin.em.
+ (eelf32bfinfd.c): Likewise.
+ * Makefile.in: Regenerate.
+ * gen-doc.texi: Set Blackfin.
+ * ld.texinfo: Document --sep-code and Blackfin specific
+ options.
+ * ldmain.c (main): Initialize link_info.sep_code.
+ * lexsup.c (enum option_values): Add OPTION_SEP_CODE.
+ (ld_options[]): Add --sep-code.
+ (parse_args): Deal with --sep-code.
+ * emulparams/bfin.sh (EXTRA_EM_FILE): Define.
+ * emulparams/elf32bfinfd.sh (OTHER_SECTIONS): Define.
+ * emultempl/bfin.em: New file.
+
+2008-07-12 Jie Zhang <jie.zhang@analog.com>
+
+ * Makefile.am (eelf32bfin.c): Depend on bfin.em.
+ (eelf32bfinfd.c): Likewise.
+ * Makefile.in: Regenerate.
+ * gen-doc.texi: Set Blackfin.
+ * ld.texinfo: Document --sep-code and Blackfin specific
+ options.
+ * ldmain.c (main): Initialize link_info.sep_code.
+ * lexsup.c (enum option_values): Add OPTION_SEP_CODE.
+ (ld_options[]): Add --sep-code.
+ (parse_args): Deal with --sep-code.
+ * emulparams/bfin.sh (EXTRA_EM_FILE): Define.
+ * emulparams/elf32bfinfd.sh (OTHER_SECTIONS): Define.
+ * emultempl/bfin.em: New file.
+
+2008-07-09 Danny Smith <dannysmith@users.sourceforge.net>
+
+ *pe-dll.c (autofilter_symbolprefixlist): Excude all symbols
+ starting with ".".
+ Exclude "_IMPORT_DESCRIPTOR_".
+ (autofilter_symbolsuffixlist): Exclude "_NULL_THUNK_DATA".
+ (autofilter_symbollist_generic): Don't check for ".text".
+ Exclude "_NULL_IMPORT_DESCRIPTOR".
+ (autofilter_symbollist_i386): Likewise.
+
+2008-07-07 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/armelf.em (elf32_arm_add_stub_section): Use
+ bfd_make_section_with_flags.
+ * emultempl/avrelf.em (avr_elf_create_output_section_statements):
+ Likewise.
+ * emultempl/hppaelf.em (hppaelf_add_stub_section): Likewise.
+ * emultempl/m68hc1xelf.em (m68hc11elf_add_stub_section): Likewise.
+ * emultempl/m68kcoff.em (gld${EMULATION_NAME}_after_open): Likewise.
+ * emultempl/m68kelf.em (m68k_elf_after_open): Likewise.
+ * emultempl/ppc64elf.em (ppc_add_stub_section): Likewise.
+ * emultempl/sh64elf.em (sh64_elf_${EMULATION_NAME}_before_allocation):
+ Likewise.
+
+2008-07-06 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld.texinfo (File Commands): Document that INCLUDE can be used in
+ several different places.
+ * ldgram.y (statement, memory_spec, section): Allow INCLUDE.
+ (memory, memory_spec_list): Simplify BNF
+ (memory_spec_list_opt): New rule.
+ * ldlex.l (INCLUDE): Recognize in EXPRESSION.
+
+2008-06-20 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/spuelf.em (gld${EMULATION_NAME}_finish): Make "can not
+ build overlay stubs" a fatal error.
+
+2008-06-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * config.in: Regenerate.
+ * configure: Regenerate.
+
+2008-06-17 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/spuelf.em (extra_stack_space): New variable.
+ (gld${EMULATION_NAME}_finish): Pass it to spu_elf_check_vma.
+ (PARSE_AND_LIST_LONGOPTS, PARSE_AND_LIST_OPTIONS,
+ PARSE_AND_LIST_ARGS_CASES): Handle --extra-stack-space.
+ * emultempl/spu_ovl.S: Mask interrupts during dma and update of
+ overlay manager structures.
+ * emultempl/spu_ovl.o: Regenerate.
+
+2008-06-16 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld.texinfo (@node MMIX): For the __.MMIX.start. prefix, only
+ mention it as being special for global symbols.
+
+2008-06-12 Nick Clifton <nickc@redhat.com>
+
+ * ldlang.c (print_output_section_statement): If the output section
+ statement has an update_dot_tree expression, apply it to
+ print_dot.
+ (print_input_section): Do not update print_dot if it would move
+ print_dot backwards.
+ (lang_do_assignments_1): If the output section statement has an
+ update_dot_tree expression apply it to dot.
+
+2008-06-07 Alan Modra <amodra@bigpond.net.au>
+
+ * NEWS: Mention archive:path patterns.
+ * ld.texinfo: Likewise.
+ * ldlang.c: Formatting throughout.
+ (archive_path): Only assume "[A-Za-z]:" is a dos drive.
+ (input_statement_is_archive_path): New function, extracted from..
+ (walk_wild): ..here.
+ (walk_wild_consider_section): Match archive:path here too.
+ (init_map_userdata, sort_def_symbol): Convert to ISO C.
+ * ldmain.c (main): Set link_info.path_separator.
+ * emultempl/spuelf.em (choose_target): Don't set it here.
+
+2008-06-06 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (name_match): New function.
+ (unique_section_p, walk_wild_consider_section): Use it here.
+ (walk_wild_section_general): And here.
+ (archive_path): New function.
+ (walk_wild): Match archive:path filespecs.
+ (open_input_bfds): Don't load archive:path files.
+ * emultempl/spuelf.em (choose_target): Set path_separator.
+ * emulparams/elf32_spu.sh: Add ._ea.* sections to ._ea output.
+
+2008-06-04 Nick Clifton <nickc@redhat.com>
+
+ * ld.texinfo (Orphan Sections): Fix texi typo.
+
+2008-06-04 Chris Metcalf <cmetcalf@tilera.com>
+
+ * lexsup.c (option_values): Add OPTION_NO_WARN_FATAL.
+ (ld_options): Add entry for --no-fatal-warnings.
+ (parse_args): Handle OPTION_NO_WARN_FATAL.
+ * ld.texinfo (Options): Document new command line switch.
+
+2008-06-04 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/spuelf.em (spu_elf_relink): Correct --no-auto-overlay arg.
+
+2008-06-02 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ldlang.c (closest_target_match): Skip generic big and little
+ endian ELF targets.
+
+2008-05-31 Evandro Menezes <evandro@yahoo.com>
+
+ PR ld/6430
+ * ld.h (enum sort_order): New.
+ * ldlang.c (lang_check: Fix comment.
+ (lang_common): Sort commons in ascending or descending order.
+ (lang_one_common): Likewise.
+ * lexsup.c (ld_options): Have --sort-common take an option
+ argument.
+ (parse_args): Handle argument to --sort-common.
+ * ld.texinfo (--sort-common): Document new optional argument.
+ * NEWS: Mention new feature.
+
+2008-05-28 Christophe Lyon <christophe.lyon@st.com>
+
+ * ld.texinfo: State that farcalls stubs are supported for ARM-EABI
+ only.
+
+2008-05-27 Kai Tietz <kai.tietz@onevision.com>
+
+ * pe-dll.c (fill_edata): Make sure we calculate vma's in
+ type bfd_vma.
+ (generate_reloc): Likewise.
+ (pe_implied_import_dll): Likewise.
+
+2008-05-21 Nick Clifton <nickc@redhat.com>
+
+ PR ld/6519
+ * ld.texinfo (Orphan Sections): Mention that the linker will
+ provide start and stop symbols for orphaned sections if their
+ names are valid C identifiers.
+ * NEWS: Add an addendum to the description of the linker feature
+ for providing orphan section start and end symbols.
+
+2008-05-21 Maxim Kuvyrkov <maxim@codesourcery.com>
+
+ * configure.in (--enable-got): New option. Handle it.
+ * configure: Regenerate.
+ * config.in: Regenerate.
+ * emultempl/m68kelf.em: (got_handling_target_default): New shell
+ variable.
+ (GOT_HANDLING_TARGET_DEFAULT): New macro.
+ (GOT_HANDLING_DEFAULT): New macro. Initialize it from configure
+ option if one was given.
+ (got_handling): New static variable.
+ (elf_m68k_create_output_section_statements): New static function
+ implementing hook.
+ (PARSE_AND_LIST_PROLOGUE): Define shell variable.
+ (OPTION_GOT): New macro.
+ (PARSE_AND_LIST_LONGOPTS): Define shell variable. Specify
+ --got option.
+ (got): New linker option.
+ (PARSE_AND_LIST_OPTIONS): Define shell variable. Print help string
+ for --got option.
+ (PARSE_AND_LIST_ARGS_CASES): Define shell variable. Handle --got
+ option.
+ * ld.texinfo: Document --got=<type> option.
+ * gen-doc.texi: Add M68K.
+ * NEWS: Mention the new feature.
+
+2008-05-21 Evandro Menezes <evandro@yahoo.com>
+
+ PR ld/6430
+ * ld.texinfo (--sort-common): Correct documentation to indicate
+ that sorting is performed by alignment, not size, biggest
+ alignment first.
+
+2008-05-21 Christophe Lyon <christophe.lyon@st.com>
+ Nick Clifton <nickc@redhat.com>
+
+ * ld.texinfo (ARM): Document --stub-group-size=N option.
+ Move description of --pic-veneer option into the ARM section.
+ * NEWS: Mention the support for long function calls.
+
+2008-05-15 Christophe Lyon <christophe.lyon@st.com>
+
+ * emultempl/armelf.em (build_section_lists): New function.
+ (stub_file): Define.
+ (need_laying_out): Define.
+ (group_size): Define.
+ (hook_stub_info): Define.
+ (hook_in_stub): New function.
+ (elf32_arm_add_stub_section): New function.
+ (gldarm_layout_sections_again): New function.
+ (gld${EMULATION_NAME}_finish): Replace arm_elf_finish(). Generate
+ stubs for long calls if needed.
+ (arm_elf_create_output_section_statements): create stub_file bfd.
+ (arm_for_each_input_file_wrapper): New function.
+ (arm_lang_for_each_input_file): New function.
+ (lang_for_each_input_file): Define.
+ (PARSE_AND_LIST_PROLOGUE): Add option token OPTION_STUBGROUP_SIZE.
+ (PARSE_AND_LIST_LONGOPTS): Add option stub-group-size.
+ (PARSE_AND_LIST_OPTIONS): Add option stub-group-size.
+ (PARSE_AND_LIST_ARGS_CASES): Add OPTION_STUBGROUP_SIZE case.
+ (LDEMUL_FINISH): Update to gld${EMULATION_NAME}_finish.
+ * lang.c (print_input_statement): Skip if bfd has
+ BFD_LINKER_CREATED.
+
+2008-05-14 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.in: Regenerate.
+
+2008-05-09 Kai Tietz <kai.tietz@onevision.com>
+
+ ld/PR6502
+ * emultempl/pep.em (compute_dll_image_base): Use bfd_vma instead
+ of long and change return type to bfd_vma.
+ (definfo): Change type of address from long to bfd_vma.
+ (set_pep_value): Replace strtoul to strtoull.
+ (gld_${EMULATION_NAME}_set_symbols): use bfd_vma instead of long..
+ * pe-dll.c (pe_dll_generate_def_file): Use fprintf_vma to print
+ ImageBase.
+ (quick_reloc): Change argument address from int to bfd_size_type.
+
+2008-05-08 Tom Tromey <tromey@redhat.com>
+
+ * ld.texinfo (PowerPC64 ELF64): Fix typo.
+
+2008-05-08 Alan Modra <amodra@bigpond.net.au>
+
+ * elf32_spu.sh (OTHER_SECTIONS): Add "._ea".
+ * elf32ppc.sh: If building with spu support, put ".data.spehandle"
+ sections at the start of ".data" and provide a symbol to locate
+ the directory of embedded spe programs.
+
+2008-05-08 Alan Modra <amodra@bigpond.net.au>
+
+ * ldexp.c (exp_print_token): Add ABSOLUTE, MIN_K, ASSERT_K. Correct
+ MAX_K.
+ (fold_binary <SEGMENT_START>): Set expld.result.section to
+ current section. Expand comment. Formatting.
+ (fold_name <DEFINED>): Set expld.result.section to current section.
+
+2008-04-28 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ldlang.c (lang_size_sections_1): Don't check LMA overflow on
+ non-load sections.
+
+2008-04-25 Michael Frysinger <vapier@gentoo.org>
+
+ * configure.tgt (bfin-*-linux-uclibc*): Set targ_emul to elf32bfinfd
+ and targ_extra_emuls to elf32bfin.
+
+2008-04-23 Paolo Bonzini <bonzini@gnu.org>
+
+ * aclocal.m4: Regenerate.
+ * configure: Regenerate.
+
+2008-04-03 Kai Tietz <kai.tietz@onevision.com>
+
+ * scripttempl/pep.sc: Align start of symbol __CTOR_LIST__.
+
+2008-04-08 Alan Modra <amodra@bigpond.net.au>
+
+ * po/POTFILES.in: Regenerate.
+
+2008-04-08 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/spuelf.em (auto_overlay, auto_overlay_file,
+ auto_overlay_fixed, auto_overlay_reserved, my_argc, my_argv): New vars.
+ (spu_before_allocation): Warn on --auto-overlay and existing overlays.
+ (struct tflist, clean_tmp): Move.
+ (new_tmp_file): New function, extracted from..
+ (embedded_spu_file): ..here.
+ (spu_elf_open_overlay_script, spu_elf_relink): New function.
+ (gld${EMULATION_NAME}_finish): Pass a bunch of --auto-overlay params.
+ Warn on --auto-overlay and zero local store.
+ (gld${EMULATION_NAME}_choose_target): New function to stash argv.
+ (OPTION_SPU_AUTO_OVERLAY, OPTION_SPU_AUTO_RELINK,
+ OPTION_SPU_OVERLAY_RODATA, OPTION_SPU_FIXED_SPACE,
+ OPTION_SPU_RESERVED_SPACE, OPTION_SPU_NO_AUTO_OVERLAY): Define.
+ (PARSE_AND_LIST_LONGOPTS): Add entries for new options.
+ (PARSE_AND_LIST_OPTIONS): Likewise.
+ (PARSE_AND_LIST_ARGS_CASES): Likewise.
+ (LDEMUL_CHOOSE_TARGET): Define.
+
+2008-04-03 Kai Tietz <kai.tietz@onevision.com>
+
+ PR ld/6026
+ * pe-dll.c (make_head): Fix iat and thunk addend offset.
+
+2008-03-31 Nick Clifton <nickc@redhat.com>
+
+ * po/fr.po: Updated French translation.
+
+2008-03-24 Ian Lance Taylor <iant@google.com>
+
+ The sha1 code is now in libiberty.
+ * sha1.c: Remove.
+ * sha1.h: Remove.
+ * Makefile.am (CFILES): Remove sha1.c.
+ (HFILES): Remove sha1.h.
+ (OFILES): Remove sha1.o.
+ (ld_new_SOURCES): Remove sha1.c.
+ (sha1.o): Remove target.
+ * Makefile.in: Rebuild.
+
+2008-03-20 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/spuelf.em: Update calls to elf32-spu.c funcs.
+
+2008-03-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * aclocal.m4: Regenerate.
+ * configure: Likewise.
+ * Makefile.in: Likewise.
+
+2008-03-14 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/spuelf.em (gld${EMULATION_NAME}_finish): Protect
+ spu_elf_build_stubs with is_spu_target.
+
+2008-03-13 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+ * configure: Regenerate.
+
+2008-03-06 Joseph Myers <joseph@codesourcery.com>
+ Roman Zippel <zippel@linux-m68k.org>
+
+ * emulparams/m68kelf.sh (GENERATE_PIE_SCRIPT): Define.
+ (COMMONPAGESIZE): Define.
+
+2008-02-22 Nick Clifton <nickc@redhat.com>
+
+ PR ld/5785
+ * ldlang.c (lang_size_sections_1): Honour the setting of an
+ lma_region even if there is no vma region set, or the vma region
+ is the same as the lma region.
+
+2008-02-18 Nick Clifton <nickc@redhat.com>
+
+ * scripttempl/armbpabi.sc (ENTRY): Do not define when performing a
+ relocatable link.
+ * scripttempl/elf32cr16.sc: Likewise.
+ * scripttempl/elf32cr16c.sc: Likewise.
+ * scripttempl/elf32crx.sc: Likewise.
+ * scripttempl/elf32sh-symbian.sc: Likewise.
+ * scripttempl/elf_chaos.sc: Likewise.
+ * scripttempl/elfd10v.sc: Likewise.
+ * scripttempl/elfi370.sc: Likewise.
+ * scripttempl/elfm68hc11.sc: Likewise.
+ * scripttempl/elfm68hc12.sc: Likewise.
+ * scripttempl/ip2k.sc: Likewise.
+ * scripttempl/iq2000.sc: Likewise.
+ * scripttempl/mep.sc: Likewise.
+ * scripttempl/v850.sc: Likewise.
+ * scripttempl/xstormy16.sc: Likewise.
+
+2008-02-16 Alan Modra <amodra@bigpond.net.au>
+
+ PR ld/5761
+ * ldexp.c (fold_name <LOADADDR>): Check result of evaluating
+ load_base before calling make_abs.
+
+2008-02-15 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/alphaelf.em (alpha_after_open): Use elf_object_id.
+ * emultempl/hppaelf.em (hppaelf_create_output_section_statements):
+ Likewise.
+ * emultempl/ppc64elf.em (ppc_create_output_section_statements):
+ Likewise.
+ * emultempl/ppc32elf.em (is_ppc_elf32_vec): Delete. Replace all
+ uses with..
+ (is_ppc_elf): ..this new macro.
+
+2008-02-15 Alan Modra <amodra@bigpond.net.au>
+
+ * ldmain.h (output_bfd): Delete.
+ * ldmain.c (output_bfd): Delete.
+ Replace all occurrences of output_bfd with link_info.output_bfd.
+ * ldcref.c: Likewise.
+ * ldctor.c: Likewise.
+ * ldemul.c: Likewise.
+ * ldexp.c: Likewise.
+ * ldfile.c: Likewise.
+ * ldlang.c: Likewise.
+ * ldmisc.c: Likewise.
+ * ldwrite.c: Likewise.
+ * pe-dll.c: Likewise.
+ * emultempl/aix.em: Likewise.
+ * emultempl/alphaelf.em: Likewise.
+ * emultempl/armcoff.em: Likewise.
+ * emultempl/armelf.em: Likewise.
+ * emultempl/avrelf.em: Likewise.
+ * emultempl/beos.em: Likewise.
+ * emultempl/elf-generic.em: Likewise.
+ * emultempl/elf32.em: Likewise.
+ * emultempl/gld960.em: Likewise.
+ * emultempl/hppaelf.em: Likewise.
+ * emultempl/irix.em: Likewise.
+ * emultempl/linux.em: Likewise.
+ * emultempl/lnk960.em: Likewise.
+ * emultempl/m68hc1xelf.em: Likewise.
+ * emultempl/mmix-elfnmmo.em: Likewise.
+ * emultempl/mmo.em: Likewise.
+ * emultempl/pe.em: Likewise.
+ * emultempl/pep.em: Likewise.
+ * emultempl/ppc32elf.em: Likewise.
+ * emultempl/ppc64elf.em: Likewise.
+ * emultempl/scoreelf.em: Likewise.
+ * emultempl/sh64elf.em: Likewise.
+ * emultempl/spuelf.em: Likewise.
+ * emultempl/sunos.em: Likewise.
+ * emultempl/vanilla.em: Likewise.
+ * emultempl/vxworks.em: Likewise.
+ * emultempl/xtensaelf.em: Likewise.
+ * emultempl/z80.em: Likewise.
+ * ldlang.c (open_output): Don't return output, instead write
+ link_info_output_bfd directly.
+ * emultempl/alphaelf.em: Replace occurrences of link_info.hash->creator
+ with link_info.output_bfd->xvec.
+ * emultempl/hppaelf.em: Likewise.
+ * emultempl/ppc32elf.em: Likewise.
+ * emultempl/ppc64elf.em: Likewise.
+ * emultempl/spuelf.em: Likewise.
+
+2008-02-07 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (new_afile): Don't pass unadorned NULL to concat.
+ * ldfile.c (ldfile_add_library_path): Likewise.
+ * emultempl/elf32.em (check_ld_elf_hints, check_ld_so_conf): Likewise.
+ * emultempl/lnk960.em (lnk960_before_parse): Likewise.
+ * emultempl/spuelf.em (embedded_spu_file): Likewise.
+
+2008-02-07 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/spu_ovl.S: Use low bit of _ovly_table.size as
+ a "present" bit rather than low bit of .buf. Correct indexing
+ into _ovly_buf_table. Use relative loads and stores to access
+ overlay manager local vars.
+ * emultempl/spu_ovl.o: Regenerate.
+
+2008-02-04 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR 5715
+ * configure: Regenerated.
+
+2008-01-31 Marc Gauthier <marc@tensilica.com>
+
+ * configure.tgt (xtensa*-*-*): Recognize processor variants.
+
+2008-01-28 Fabian Groffen <grobian@gentoo.org>
+
+ * configure.tgt (x86_64-*-solaris2): Add support for this target.
+
+2008-01-28 Vincent Riviere <vincent.riviere@freesbee.fr>
+
+ PR ld/5652
+ * genscripts.sh: Check for the existence of BASH_LINENO not just
+ the BASH shell before generating line numbers in the emulation
+ file.
+
+2008-01-28 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/spu_ovl.S: Rewrite.
+ * emultempl/spu_ovl.o: Regenerate.
+ * emultempl/spuelf.em (toe): Delete.
+ (spu_place_special_section): Add param to control section placement.
+ Adjust callers.
+ (spu_elf_load_ovl_mgr): Adjust for struct _spu_elf_section_data
+ changes.
+ (spu_before_allocation): Adjust spu_elf_size_stubs call.
+ (gld${EMULATION_NAME}_finish): Adjust spu_elf_build_stubs call.
+
+2008-01-25 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/5670
+ * ldlang.c (process_insert_statements): Silence gcc 4.1 alias
+ warning.
+
+2008-01-25 Alan Modra <amodra@bigpond.net.au>
+
+ * ld.texinfo (INSERT): Describe.
+ * ldgram.y (ldgram_in_script, ldgram_had_equals): Delete.
+ (INSERT_K, AFTER, BEFORE): Add as tokens.
+ (ifile_p1): Handle INSERT statements.
+ (saved_script_handle, force_make_executable): Move to..
+ * ldmain.c: ..here.
+ (previous_script_handle): New global var.
+ * ldmain.h (saved_script_handle, force_make_executable): Declare.
+ (previous_script_handle): Likewise.
+ * ldlex.l (INSERT_K, AFTER, BEFORE): Add tokens.
+ * lexsup.c (parge_args <-T>): Set previous_script_handle.
+ * ldlang.c (lang_for_each_statement_worker): Handle insert statement.
+ (map_input_to_output_sections, print_statement): Likewise.
+ (lang_size_sections_1, lang_do_assignments_1): Likewise.
+ (insert_os_after): New function, extracted from..
+ (lang_insert_orphan): ..here.
+ (process_insert_statements): New function.
+ (lang_process): Call it.
+ (lang_add_insert): New function.
+ * ldlang.h (lang_insert_statement_enum): New.
+ (lang_insert_statement_type): New.
+ (lang_statement_union_type): Add insert_statement.
+ (lang_add_insert): Declare.
+
+2008-01-18 Bob Wilson <bob.wilson@acm.org>
+
+ * scripttempl/elfxtensa.sc: Merge ENTRY and .note.gnu.build-id
+ changes from elf.sc.
+
+2008-01-16 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_size_sections_1): Simplify SEC_NEVER_LOAD test.
+
+2008-01-16 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.h (lang_afile_asection_pair_statement_enum): Delete.
+ (lang_afile_asection_pair_statement_type): Delete.
+ (lang_statement_union_type): Delete afile_asection_pair_statement.
+ * ldlang.c (lang_insert_orphan): Delete case handling the above.
+ (map_input_to_output_sections, print_statement): Likewise.
+
+2008-01-15 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * emulparams/shlelf_linux.sh (DATA_START_SYMBOLS): Use PROVIDE
+ with __data_start.
+ * emulparams/shelf_nbsd.sh (DATA_START_SYMBOLS): Likewise.
+
+2008-01-15 Alan Modra <amodra@bigpond.net.au>
+
+ PR 5604
+ * ldlang.c (lang_gc_sections): Move code to set SEC_KEEP on entry
+ syms to _bfd_elf_gc_keep.
+ * emultempl/ppc64elf.em (ppc_before_allocation): Don't call
+ ppc64_elf_edit_opd if no_opd_opt.
+
+2008-01-11 Tristan Gingold <gingold@adacore.com>
+ Eric Botcazou <ebotcazou@adacore.com>
+
+ * ldlang.c (lang_end): Warns if the entry point is not found when
+ --gc-sections.
+ Emit an error if no root is specified when --gc-sections -r.
+ * ld.texinfo (Options): Document that --gc-sections is compatible
+ with -r and -q.
+ * ldmain.c (main): Do not error out if -r and --gc-sections.
+ * scripttempl/elf.sc: Emit ENTRY command only if relocating.
+
+2008-01-10 Daniel Jacobowitz <drow@sources.redhat.com>
+
+ PR ld/5533
+ * ldlang.c (lang_end): Issue a warning for a missing start symbol
+ of a shared library if the symbol was specified on the command
+ line.
+
+2008-01-10 Alan Modra <amodra@bigpond.net.au>
+
+ * ld.texinfo (--gc-sections): Describe linker behaviour.
+
+For older changes see ChangeLog-2007
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/binutils-2.21/ld/ChangeLog-2009 b/binutils-2.21/ld/ChangeLog-2009
new file mode 100644
index 0000000..00df796
--- /dev/null
+++ b/binutils-2.21/ld/ChangeLog-2009
@@ -0,0 +1,1643 @@
+2009-12-17 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * pe-dll.c (generate_reloc): Take account of wrapper options when
+ testing if a weak symbol is defined or not, and when it is not,
+ consider whether the default value requires a base reloc anyway.
+
+2009-12-17 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * deffilep.y (def_file_free): Add missing shadow parameter renaming.
+ (def_file_print): Likewise.
+ (def_stash_module): Likewise.
+ (def_file_add_import): Likewise.
+
+2009-12-11 Nick Clifton <nickc@redhat.com>
+
+ * Makefile.in: Regenerate.
+ * configure: Regenerate.
+ * deffilep.y: Fix shadowed variable warnings.
+ * ldlang.c: Likewise.
+ * ldmain.c: Likewise.
+ * pe-dll.c: Likewise.
+ * emultempl/elf32.em: Likewise.
+
+2009-12-09 Alan Modra <amodra@bigpond.net.au>
+
+ PR ld/11012
+ * emulparams/elf64ppc.sh (OTHER_GOT_RELOC_SECTIONS): Move .rela.opd ..
+ (INITIAL_RELOC_SECTIONS): .. to here. New define.
+ * scripttempl/elf.sc: Expand INITIAL_RELOC_SECTIONS.
+
+2009-12-04 Jie Zhang <jie.zhang@analog.com>
+
+ * ld.texinfo: Make it clear that --nmagic disables linking
+ against shared libraries.
+
+2009-11-30 Joseph Myers <joseph@codesourcery.com>
+
+ * configure: Regenerate.
+
+2009-11-30 Alan Modra <amodra@bigpond.net.au>
+
+ PR ld/11006
+ * lexsup.c (parse_args): Allow nested --start-group, --end-group.
+
+2009-11-27 Tristan Gingold <gingold@adacore.com>
+
+ * pe-dll.c (pe_implied_import_dll): Return early if there is no
+ export entries.
+
+2009-11-26 Nick Clifton <nickc@redhat.com>
+
+ PR ld/10956
+ * ld.h (struct args_type): Rename 'relax' field to
+ 'disable_target_specific_optimizations' and turn it into a
+ tri-state variable.
+ (RELAXATION_DISABLED_BY_DEFAULT): New macro.
+ (RELAXATION_DISABLED_BY_USER): New macro.
+ (RELAXATION_ENABLED): New macro.
+ (DISABLE_RELAXATION): New macro.
+ (ENABLE_RELAXATION): New macro.
+ * lexsup (enum option_values): Add OPTION_NO_RELAX.
+ (struct ld_options): Add --no-relax.
+ (parse_args): Handle OPTION_NO_RELAX. Use DISABLE_RELAXATION and
+ ENABLE_RELAXATION macros.
+ * ldlang.c (lang_relax_sections): Use RELAXATION_ENABLED macro.
+ (lang_process): Likewise.
+ * ldmain.c (main): Initialise
+ disable_target_specific_optimizations field.
+ (multiple_definition): Use RELAXATION_ENABLED macro.
+ * ld.texinfo: Document new command line option.
+ * emultempl/alphaelf.em: Remove --no-relax option.
+ (before_allocation): Test RELAXATION_DISABLED_BY_USER macro.
+ Use ENABLE_RELAXATION macro.
+ * emultempl/avrelf.em: (after_allocation): Test RELAXATION_ENABLED
+ macro.
+ * emultempl/cr16elf.em: Remove --no-relax option.
+ (before_allocation): Test RELAXATION_DISABLED_BY_USER macro.
+ Use ENABLE_RELAXATION macro.
+ * emultempl/crxelf.em: Remove --no-relax option.
+ (before_allocation): Test RELAXATION_DISABLED_BY_USER macro.
+ Use ENABLE_RELAXATION macro.
+ * emultempl/mmix-elfnmmo.em: (before_allocation): Use
+ ENABLE_RELAXATION macro.
+ * emultempl/needrelax.em: (before_allocation): Use
+ ENABLE_RELAXATION macro.
+ * emultempl/ppc32elf.em: (before_allocation): Test
+ RELAXATION_DISABLED_BY_DEFAULT macro. Use
+ ENABLE_RELAXATION macro.
+ * emultempl/sh64elf.em: (before_allocation): Test
+ RELAXATION_ENABLED macro. Use DISABLE_RELAXATION macro.
+ * emultempl/xtensaelf.em: Remove --no-relax option.
+ (before_allocation): Test RELAXATION_ENABLED macro.
+ Use ENABLE_RELAXATION macro.
+
+2009-11-25 Kai Tietz <kai.tietz@onevision.com>
+
+ * scripttempl/pe.sc: (.note.GNU-stack): Mark as discardable.
+ (.gnu.lto_*): Likewise.
+ * scripttempl/pep.sc: (.note.GNU-stack): Mark as discardable.
+ (.gnu.lto_*): Likewise.
+
+2009-11-23 Paul Brook <paul@codesourcery.com>
+
+ * ldexp.c: Copy symbol type for simple assignments.
+
+2009-11-20 Thomas Schwinge <thomas@codesourcery.com>
+
+ * emulparams/armelf.sh (OTHER_READONLY_SECTIONS)
+ <__exidx_start, __exidx_end>: Use PROVIDE_HIDDEN.
+ * emulparams/armelf_linux_eabi.sh (OTHER_READONLY_SECTIONS)
+ <__exidx_start, __exidx_end>: Likewise.
+ * emulparams/armsymbian.sh (OTHER_READONLY_SECTIONS)
+ <.ARM.exidx$$Base, __exidx_start, __exidx_end, .ARM.exidx$$Limit>:
+ Likewise.
+
+2009-11-19 Matthias Klose <doko@ubuntu.com>
+
+ PR ld/9863
+ * emulparams/armelf_linux.sh (DATA_START_SYMBOLS): Use PROVIDE
+ with __data_start.
+
+2009-11-19 Ben Elliston <bje@au.ibm.com>
+
+ * ldlex.l: Enable nounput flex option.
+
+2009-11-15 Kai Tietz <kai.tietz@onevision.com>
+
+ * pe-dll.c (pe_undef_alias_cdecl_match): New function.
+ (pe_find_cdecl_alias_match): New function.
+ (pe_process_import_defs): Add matching for import symbols
+ declared as cdecl for fastcall/stdcall.
+ * emultempl/pe.em (pe_undef_cdecl_match): Treat fastcall
+ symbols, too.
+ (pe_fixup_stdcalls): Likewise.
+ (gld_XXX_after_open): Redo scanning for imported
+ fastcall/stdcall symbols as cdecl one.
+ * emultempl/pep.em (pep_undef_cdecl_match): Treat fastcall
+ symbols, too.
+ (pep_fixup_stdcalls): Likewise.
+ (gld_XXX_after_open): Redo scanning for imported
+ fastcall/stdcall symbols as cdecl one.
+
+2009-11-11 Nick Clifton <nickc@redhat.com>
+
+ * po/id.po: Updated Indonesian translation.
+
+2009-11-11 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * configure.in: Call ACX_LARGEFILE. Stop calling AC_SYS_LARGEFILE.
+ * aclocal.m4: Regenerate.
+ * configure: Regenerate.
+
+2009-11-10 Nick Clifton <nickc@redhat.com>
+
+ PR ld/10864
+ * ld.texinfo (Entry Point): Mention that the default entry symbol
+ is not 'start' on some targets.
+
+2009-11-06 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/10912
+ * ldmain.c (add_DT_NEEDED_for_dynamic): Default to TRUE.
+
+2009-11-06 Kai Tietz <kai.tietz@onevision.com>
+
+ * pe.em (DEFAULT_PSEUDO_RELOC_VERSION): New macro.
+ (gld_XXX_before_parse): Set pseudo-relocation default
+ version to DEFAULT_PSEUDO_RELOC_VERSION.
+ (gldXXX_handle_option): Likewise.
+
+
+2009-11-05 Nick Clifton <nickc@redhat.com>
+
+ * lexsup.c: Rename --add-needed to --copy-dt-needed-entries.
+ * ldlang.h (struct lang_input_statement_struct): Rename add_needed
+ to add_DT_NEEDED_for_dynamic. Rename as_needed to
+ add_DT_NEEDED_for_regular.
+ * ldlang.c: Likewise.
+ * ldlang.h: Likewise.
+ * ldlang.c: Use the new variable names.
+ * ldgram.y: Likewise.
+ * emultempl/elf32.em: Likewise.
+ * ld.texinfo: Document the renamed option. Also mention its
+ affect on the resolution of dynamic symbols.
+ * NEWS: Mention the changed option name.
+
+2009-11-04 Kai Tietz <kai.tietz@onevision.com>
+
+ * emulparams/arm_epoc_pe.sh: Remove ENTRY.
+ * emulparams/arm_wince_pe.sh: Likewise.
+ * emulparams/i386pe.sh: Likewise.
+ * emulparams/i386pe_posix.sh: Likewise.
+ * emulparams/mcorepe.sh: Likewise.
+ * emulparams/mipspe.sh: Likewise.
+ * emulparams/ppcpe.sh: Likewise.
+ * emulparams/armpe.sh: Likewise.
+ * emulparams/i386pep.sh: Likewise.
+ * emulparams/shpe.sh: Likewise.
+ Additionally cleaned up double-defined
+ variables SUBSYSTEM and INITIAL_SYMBOL_CHAR.
+ * emultempl/pe.em: Remove use of ENTRY.
+ (pe_subsystem): New local variable.
+ (gld_XXX_before_parse): Don't set default
+ entry point here.
+ (set_entry_point): New function to set entry
+ point.
+ (set_pe_subsystem): Remove code for entry point.
+ (gld_XXX_after_parse): Use set_entry_point here.
+ * emultempl/pep.em: Likewise.
+
+2009-10-29 Nathan Sidwell <nathan@codesourcery.com>
+
+ * emulparams/vxworks.sh (OTHER_READONLY_SECTIONS): Move into ...
+ (OTHER_READWRITE_SECTIONS): ... here.
+
+2009-10-28 Kai Tietz <kai.tietz@onevision.com>
+
+ * emultempl/pep.em (U): Define underscore macro.
+ (init): Use for __ImageBase U macro.
+
+2009-10-23 Kai Tietz <kai.tietz@onevision.com>
+
+ * deffile.h (def_file_export): New member its_name.
+ (def_file_import): Likewise.
+ (def_file_add_export): Add argument its_name.
+ (def_file_add_import): Likewise.
+ * deffilep.y (def_exports): Add argument its_name.
+ (def_import): Likewise.
+ (EQUAL): Add new token for '=='.
+ (opt_equalequal_name): New rule.
+ (expline): Add rule opt_equalequal_name.
+ (impline): Likewise.
+ (def_file_free): Free for exports and imports
+ the optional member its_name.
+ (def_lex): Add scan of '==' as EQUAL.
+ * pe-dll.c (pe_export_sort): Sort for its_name too.
+ (process_def_file_and_drectve): Adjust calls to
+ def_file_add_export.
+ (generate_edata): Take its_name in account.
+ (make_one): Likewise.
+ (pe_process_import_defs): Likewise.
+ (pe_dll_generate_def_file): Add print of new '==' option.
+ * ld.texinfo: Extend documentation about .def file syntax.
+ * NEWS: Mention new feature.
+
+2009-10-23 Kai Tietz <kai.tietz@onevision.com>
+
+ * deffilep.y (def_lex): Allow '<' and '>' characters in identifier
+ strings.
+
+2009-10-23 Ryan Mansfield <rmansfield@qnx.com>
+
+ PR ld/10489
+ * emultempl/elf32.em (gld${EMULATION_NAME}_search_needed): Handle
+ drive specifiers for DOS based filesystems in rpath-link strings.
+
+2009-10-19 Nick Clifton <nickc@redhat.com>
+
+ * Makefile.am: Remove spurious sanitization marker.
+ * Makefile.in: Regenerate.
+
+2009-10-16 Dmitry Gorbachev <d.g.gorbachev@gmail.com>
+
+ * emultempl/pe.em (OPTION_EXCLUDE_ALL_SYMBOLS): New macro.
+ (gld${EMULATION_NAME}_add_options): Add new --exclude-all-symbols option
+ to exclude all symbols from automatic export.
+ (gld_${EMULATION_NAME}_list_options): Describe it.
+ (gld${EMULATION_NAME}_handle_option): Handle it.
+ * emultempl/pep.em: Likewise to all the above.
+ * pe-dll.c (pe_dll_exclude_all_symbols): New variable.
+ (process_def_file_and_drectve): Use it.
+ * pe-dll.h (pe_dll_exclude_all_symbols): Declare.
+ * pep-dll.c (pep_dll_exclude_all_symbols): Define pep_ alias.
+ * pep-dll.h (pe_dll_exclude_all_symbols): Declare.
+ * NEWS: Mention the new feature.
+ * ld.texinfo: Document the new command line switch.
+
+2009-10-14 Andreas Schwab <schwab@linux-m68k.org>
+
+ * ldlex.l (yy_input): Remove second argument and return the value
+ instead.
+ (YY_INPUT): Adjust.
+
+2009-10-14 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/netbsd.em (gldnetbsd_before_parse): Typo fix.
+
+2009-10-14 Ryan Mansfield <rmansfield@qnx.com>
+
+ * ldlang.c (load_symbols): Set whole_archive from entry when
+ parsing a linker script.
+
+2009-10-10 Alan Modra <amodra@bigpond.net.au>
+
+ * scripttempl/elf32cr16.sc: Revert 2009-09-28 changes.
+ * scripttempl/elf32cr16c.sc: Likewise.
+ * scripttempl/elf32crx.sc: Likewise.
+ * scripttempl/tic54xcoff.sc: Likewise.
+ * scripttempl/aix.sc: Likewise.
+ * scripttempl/avr.sc: Likewise.
+ * scripttempl/elf32msp430.sc: Likewise.
+ * scripttempl/elf32msp430_3.sc: Likewise.
+ * scripttempl/elf32sh-symbian.sc: Likewise.
+ * scripttempl/elf_chaos.sc: Likewise.
+ * scripttempl/elfi370.sc: Likewise.
+ * scripttempl/nw.sc: Likewise.
+ * scripttempl/psos.sc: Likewise.
+ * scripttempl/armbpabi.sc: Likewise.
+ * scripttempl/elf.sc: Likewise.
+ * scripttempl/elf64hppa.sc: Likewise.
+ * scripttempl/elfd10v.sc: Likewise.
+ * scripttempl/elfd30v.sc: Likewise.
+ * scripttempl/elfm68hc11.sc: Likewise.
+ * scripttempl/elfm68hc12.sc: Likewise.
+ * scripttempl/elfmicroblaze.sc: Likewise.
+ * scripttempl/elfxtensa.sc: Likewise.
+ * scripttempl/iq2000.sc: Likewise.
+ * scripttempl/mep.sc: Likewise.
+ * scripttempl/xstormy16.sc: Likewise.
+
+2009-10-09 Alan Modra <amodra@bigpond.net.au>
+
+ PR ld/10749
+ * ldlang.c (lang_size_sections_1): Zero section vmas only for COFF.
+
+2009-10-08 Alan Modra <amodra@bigpond.net.au>
+
+ PR ld/10744
+ * ldlang.c (lang_new_phdr): Allow FILEHDR/PHDRS on more than the
+ first PT_LOAD header.
+ * ld.texinfo: Update.
+
+2009-10-06 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ldlang.c (lang_new_phdr): Check PHDRS and FILEHDR in loadable
+ segments do not appear after a different loadable segment.
+ * ld.texinfo (PHDRS): Document order of processing segments.
+ Document where PHDRS and FILEHDR may appear.
+
+2009-10-03 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc32elf.em (emit_stub_syms): Init to -1.
+ (ppc_after_open): Set emit_stubs_syms by default when shared.
+ (OPTION_NO_STUBSYMS): Define.
+ (PARSE_AND_LIST_LONGOPTS, PARSE_AND_LIST_OPTIONS,
+ PARSE_AND_LIST_ARGS_CASES): Handle --no-emit-stub-syms.
+ * emultempl/ppc64elf.em (emit_stub_syms): Init to -1.
+ (gld${EMULATION_NAME}_finish): Set emit_stubs_syms by default.
+ (OPTION_NO_STUBSYMS): Define.
+ (PARSE_AND_LIST_LONGOPTS, PARSE_AND_LIST_OPTIONS,
+ PARSE_AND_LIST_ARGS_CASES): Handle --no-emit-stub-syms.
+
+2009-09-29 Joel Sherrill <joel.sherrill@oarcorp.com>
+
+ * emulparams/m68kelf.sh (NOP): Use 0x4e71 (nop) rather than 0x4e75
+ (rts).
+
+2009-09-29 DJ Delorie <dj@redhat.com>
+
+ * Makefile.am: Add rules to build RX emulation.
+ * configure.tgt: Likewise.
+ * NEWS: Mention support for RX architecture.
+ * Makefile.in: Regenerate.
+ * emulparams/elf32rx.sh: New file.
+ * emultempl/rxelf.em: New file.
+
+2009-09-29 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_size_sections_1): Allow scripts to specify a
+ non-zero vma even when relocatable.
+
+2009-09-28 Alan Modra <amodra@bigpond.net.au>
+
+ * scripttempl/elf32cr16.sc: Emit empty script for ld -r and ld -Ur.
+ * scripttempl/elf32cr16c.sc: Likewise.
+ * scripttempl/elf32crx.sc: Likewise.
+ * scripttempl/tic54xcoff.sc: Likewise.
+ * scripttempl/aix.sc: Delete ${RELOCATING-0}.
+ * scripttempl/avr.sc: Likewise.
+ * scripttempl/elf32msp430.sc: Likewise.
+ * scripttempl/elf32msp430_3.sc: Likewise.
+ * scripttempl/elf32sh-symbian.sc: Likewise.
+ * scripttempl/elf_chaos.sc: Likewise.
+ * scripttempl/elfi370.sc: Likewise.
+ * scripttempl/nw.sc: Likewise.
+ * scripttempl/psos.sc: Likewise.
+ * scripttempl/armbpabi.sc: Delete ${RELOCATING-0} and ${CONSTRUCTING-0}.
+ * scripttempl/elf.sc: Likewise.
+ * scripttempl/elf64hppa.sc: Likewise.
+ * scripttempl/elfd10v.sc: Likewise.
+ * scripttempl/elfd30v.sc: Likewise.
+ * scripttempl/elfm68hc11.sc: Likewise.
+ * scripttempl/elfm68hc12.sc: Likewise.
+ * scripttempl/elfmicroblaze.sc: Likewise.
+ * scripttempl/elfxtensa.sc: Likewise.
+ * scripttempl/iq2000.sc: Likewise.
+ * scripttempl/mep.sc: Likewise.
+ * scripttempl/xstormy16.sc: Likewise.
+
+2009-09-27 Christopher Faylor <me+cygwin@cgf.cx>
+
+ PR ld/10634
+ * ldlang.c (lang_size_sections_1): Always force output vma to zero for
+ relocatable sections.
+ (lang_size_sections_1): Revert previous COFF-only accommodation for
+ relocatable sections.
+
+2009-09-25 Martin Thuresson <martint@google.com>
+
+ Update sources to make arm targets compile cleanly with
+ -Wc++-compat:
+ * emultempl/armelf.em: Add casts.
+
+2009-09-23 Matt Rice <ratmice@gmail.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_add_options): Add --audit,
+ --depaudit, and -P options.
+ (gld${EULATION_NAME}_handle_options): Ditto.
+ (gld${EULATION_NAME}_list_options): Ditto.
+ (gld${EMULATION_NAME}_append_to_separated_string): New function for
+ handling rpath-like colon separated strings.
+ (gld${EMULATION_NAME}_before_allocation): Pass the audit and depaudit
+ libs to bfd. Propagate DT_AUDIT from needed libs to depaudit.
+ * ld.texinfo: Document new options.
+
+2009-09-23 Nick Clifton <nickc@redhat.com>
+
+ * po/vi.po: Updated Vietnamese translation.
+
+2009-09-22 Alan Modra <amodra@bigpond.net.au>
+
+ * scripttempl/a29k.sc: Delete.
+ * scripttempl/ebmon29k.sc: Delete.
+ * scripttempl/m68klynx.sc: Delete.
+ * scripttempl/sa29200.sc: Delete.
+ * scripttempl/sparclynx.sc: Delete.
+
+2009-09-21 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc32elf.em (no_tls_get_addr_opt): New var.
+ (ppc_before_allocation): Pass to ppc_elf_tls_setup.
+ (OPTION_NO_TLS_GET_ADDR_OPT): Define. Redefine other options in
+ terms of previous option.
+ (PARSE_AND_LIST_LONGOPTS, PARSE_AND_LIST_OPTIONS): Add
+ --no-tls-get-addr-optimize.
+ (PARSE_AND_LIST_ARGS_CASES): Handle it.
+ * emultempl/ppc64elf.em (no_tls_get_addr_opt): New var.
+ (ppc_before_allocation): Pass to ppc64_elf_tls_setup.
+ (OPTION_NO_TLS_GET_ADDR_OPT): Define.
+ (PARSE_AND_LIST_LONGOPTS, PARSE_AND_LIST_OPTIONS): Add
+ --no-tls-get-addr-optimize.
+ (PARSE_AND_LIST_ARGS_CASES): Handle it.
+
+2009-09-18 Nick Clifton <nickc@redhat.com>
+
+ * po/es.po: Updated Spanish translation.
+
+2009-09-13 Alan Modra <amodra@bigpond.net.au>
+
+ PR ld/6766
+ * lexsup.c (parse_args <-e>): Revert 2009-03-18 change.
+ * ldemul.c (after_parse_default): Add entry symbol as undef.
+ * emultempl/alphaelf.em (alpha_after_parse): Call after_parse_default.
+ * emultempl/cr16elf.em (cr16elf_after_parse): Likewise.
+ * emultempl/crxelf.em (crxelf_after_parse): Likewise.
+ * emultempl/hppaelf.em (hppaelf_after_parse): Likewise.
+ * emultempl/ia64elf.em (gld${EMULATION_NAME}_after_parse): Likewise.
+ * emultempl/pe.em (gld_${EMULATION_NAME}_after_parse): Call
+ after_parse_default and delete now duplicate code.
+ * emultempl/pep.em (gld_${EMULATION_NAME}_after_parse): Likewise.
+ * scripttempl/elf32cr16.sc: No need to make entry extern.
+ * scripttempl/elf32cr16c.sc: Likewise.
+ * scripttempl/elf32crx.sc: Likewise.
+ * scripttempl/elf32xc16xs.sc: Only provide ENTRY on final link.
+
+2009-09-11 Nick Clifton <nickc@redhat.com>
+
+ * po/ld.pot: Updated by the Translation project.
+ * po/fi.po: Updated Finnish translation.
+
+2009-09-11 Martin Thuresson <martint@google.com>
+
+ Updated sources to compile cleanly with -Wc++-compat:
+ * ld.h (enum endian_enum,enum symbolic_enum,enum
+ dynamic_list_enum): Move to top level.
+ * ldcref.c: Add casts.
+ * ldctor.c: Add casts.
+ * ldexp.c
+ * ldexp.h (enum node_tree_enum,enum phase_enum): Move to top level.
+ * ldlang.c: Add casts. (lang_insert_orphan): Use enum name instead
+ of integer.
+ * ldlang.h (enum statement_enum): Move to top level.
+ * ldmain.c: Add casts.
+ * ldwrite.c: Add casts.
+ * lexsup.c: Add casts. (enum control_enum): Move to top level.
+ * mri.c: Add casts. (mri_draw_tree): Use enum name instead of
+ integer.
+
+2009-09-09 Alan Modra <amodra@bigpond.net.au>
+
+ * scripttempl/aix.sc: Only provide ENTRY on final link.
+ * scripttempl/alpha.sc: Likewise.
+ * scripttempl/armcoff.sc: Likewise.
+ * scripttempl/crisaout.sc: Likewise.
+ * scripttempl/delta68.sc: Likewise.
+ * scripttempl/ebmon29k.sc: Likewise.
+ * scripttempl/elf32xc16x.sc: Likewise.
+ * scripttempl/elf32xc16xl.sc: Likewise.
+ * scripttempl/elfmicroblaze.sc: Likewise.
+ * scripttempl/epocpe.sc: Likewise.
+ * scripttempl/h8300.sc: Likewise.
+ * scripttempl/h8300h.sc: Likewise.
+ * scripttempl/h8300hn.sc: Likewise.
+ * scripttempl/h8300s.sc: Likewise.
+ * scripttempl/h8300sn.sc: Likewise.
+ * scripttempl/h8300sx.sc: Likewise.
+ * scripttempl/h8300sxn.sc: Likewise.
+ * scripttempl/hppaelf.sc: Likewise.
+ * scripttempl/i386beos.sc: Likewise.
+ * scripttempl/i386coff.sc: Likewise.
+ * scripttempl/i386go32.sc: Likewise.
+ * scripttempl/m68kaux.sc: Likewise.
+ * scripttempl/m68klynx.sc: Likewise.
+ * scripttempl/m88kbcs.sc: Likewise.
+ * scripttempl/maxqcoff.sc: Likewise.
+ * scripttempl/mcorepe.sc: Likewise.
+ * scripttempl/mips.sc: Likewise.
+ * scripttempl/ppcpe.sc: Likewise.
+ * scripttempl/sa29200.sc: Likewise.
+ * scripttempl/sparccoff.sc: Likewise.
+ * scripttempl/sparclynx.sc: Likewise.
+ * scripttempl/tic4xcoff.sc: Likewise.
+ * scripttempl/tic54xcoff.sc: Likewise.
+ * scripttempl/tic80coff.sc: Likewise.
+ * scripttempl/z8000.sc: Likewise.
+
+2009-09-07 Tristan Gingold <gingold@adacore.com>
+
+ * po/ld.pot: Regenerate.
+
+2009-09-05 Martin Thuresson <martin@mtme.org>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_load_symbols,
+ gld${EMULATION_NAME}_try_needed): Rename variable class to
+ link_class.
+
+2009-09-04 Tristan Gingold <gingold@adacore.com>
+
+ * NEWS: Add marker for 2.20.
+
+2009-09-04 Alan Modra <amodra@bigpond.net.au>
+
+ * scripttempl/elf.sc (.text): Add cold text sections.
+
+2009-09-04 Jie Zhang <jie.zhang@analog.com>
+
+ * emulparams/elf32bfinfd.sh (OTHER_SECTIONS): Add .l2.text
+ and .l2.data.
+
+2009-09-03 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * scripttempl/pe.sc (.text): Add "*(.text.*)" in order to catch
+ new GCC hot/cold/unlikely partitions.
+ * scripttempl/pep.sc: Likewise.
+ * scripttempl/epocpe.sc: Likewise.
+ * scripttempl/mcorepe.sc: Likewise.
+ * scripttempl/ppcpe.sc: Likewise.
+
+2009-09-01 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * Makefile.am (ldgram.o, ldlex.o, deffilep.o): Supply correct
+ source file name for generated files which may be in $(srcdir).
+ * Makefile.in: Regenerate.
+
+2009-09-01 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ldver.c (ldversion): Change to "Copyright 2009".
+
+2009-09-01 Jie Zhang <jie.zhang@analog.com>
+
+ * scripttempl/elf.sc: Add ${USER_LABEL_PREFIX} to _start, etext,
+ _stack and __bss_start.
+ * emulparams/bfin.sh (ENTRY): Remove.
+
+2009-08-30 Alan Modra <amodra@bigpond.net.au>
+
+ PR ld/10569
+ * ldexp.c (fold_name <MAXPAGESIZE>): Return config.maxpagesize.
+ (fold_name <COMMONPAGESIZE>): Similarly.
+ * ldlang.c (output_target): Make global.
+ * ldlang.h (output_target): Declare.
+ * ldmain.c (main): Set config.maxpagesize from bfd_emul_get_maxpagesize.
+ Similarly for config.commonpagesize.
+ * ldemul.c (set_output_arch_default): Call bfd_emul_set_maxpagesize
+ and bfd_emul_set_commonpagesize.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_handle_option): Don't call
+ bfd_emul_set_maxpagesize or bfd_emul_set_commonpagesize here.
+
+2009-08-29 Martin Thuresson <martin@mtme.org>
+
+ * ldexp.c (exp_intop, exp_bigintop, exp_relop, exp_binop)
+ (exp_trinop, exp_unop, exp_nameop, exp_assop): Rename variable new
+ to new_e.
+ * ldfile.c (ldfile_add_library_path): Rename variable new to
+ new_dirs. (ldfile_add_arch): Rename variable new to new_arch.
+ * ldlang.c (new_statement, lang_final, lang_add_wild)
+ (lang_target, lang_add_fill, lang_add_data, lang_add_assignment)
+ (lang_add_insert): Rename variable new to new_stmt. (new_afile):
+ Added missing cast. (lang_memory_region_lookup): Rename variable
+ new to new_region. (init_os): Rename variable new to
+ new_userdata. (lang_add_section): Rename variable new to
+ new_section. (ldlang_add_undef): Rename variable new to
+ new_undef. (realsymbol): Rename variable new to new_name.
+
+2009-08-26 Nick Clifton <nickc@redhat.com>
+
+ PR ld/10555
+ * emultempl/elf32.em (_after_open): Do not create a
+ .note.gnu-build-id section if there are no input files.
+
+2009-08-24 Nick Clifton <nickc@redhat.com>
+
+ * scripttempl/elfxtensa.sc (DISCARDED): Discard sections with
+ .gnu.lto_ prefix.
+ * scripttempl/armbpabi.sc: Likewise.
+ * scripttempl/elf32sh-symbian.sc: Likewise.
+ * scripttempl/elf64hppa.sc: Likewise.
+ * scripttempl/mep.sc: Likewise.
+
+2009-08-24 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * Makefile.am (ldmain.o, ldfile.o): Fix typos in non-fastdep
+ rules.
+ (eelf32_spu.o): Add dependency tracking.
+ * Makefile.in: Regenerate.
+
+ * Makefile.am (am__skiplex, am__skipyacc): New.
+ * Makefile.in: Regenerate.
+
+2009-08-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * Makefile.am (bin_PROGRAMS): Renamed from ...
+ (noinst_PROGRAMS): ... this.
+ (transform): Override, including the renaming of ld-new to ld.
+ (install-exec-local): Installation of ld in $(bindir) not needed
+ here any more.
+ (AM_CPPFLAGS): Renamed from ...
+ (INCLUDES): ... this.
+ (MAINTAINERCLEANFILES): Add ld.1.
+ * Makefile.in: Regenerate.
+
+ * Makefile.am (AUTOMAKE_OPTIONS): Remove cygnus. Add
+ no-texinfo.tex, no-dist, foreign.
+ (TEXINFO_TEX): New variable.
+ (install-data-local): Removed, not needed any more.
+ (all): Dependencies upon info and ld.1 not needed any more.
+ (MKDEP, DEP, DEP1, dep.sed, dep, dep-in, dep-am): Removed.
+ (mkdep generated section): Removed.
+ (ldgram.o, ldlex.o, deffilep.o, ldmain.o, ldfile.o): Rewrite to
+ use automake dependency tracking mechanism.
+ (EXTRA_ld_new_SOURCES): Add pep-dll.c, pe-dll.c, and
+ $(ALL_EMULATIONS:.o=.c) $(ALL_64_EMULATIONS:.o=.c) so their
+ dependencies are tracked too.
+ (BUILT_SOURCES): New, list $(GENERATED_HFILES) to ensure they
+ are built early.
+ * configure.in: Use AM_MAINTAINER_MODE.
+ * aclocal.m4, configure, Makefile.in: Regenerate.
+
+ * Makefile.am (pdf__strip_dir, install-pdf, install-pdf-am)
+ (install-pdf-recursive, html__strip_dir, install-html)
+ (install-html-am, install-html-recursive): Remove.
+ * Makefile.in: Regenerate.
+
+ * Makefile.in: Regenerate.
+ * aclocal.m4: Likewise.
+ * config.in: Likewise.
+ * configure: Likewise.
+
+2009-08-21 Richard Guenther <rguenther@suse.de>
+
+ * scripttempl/elf.sc: Discard sections with .gnu.lto_ prefix.
+
+2009-08-12 Tristan Gingold <gingold@adacore.com>
+
+ * ld.h (fat_user_section_struct): Add map_symbol_def_count field.
+ * ldlang.c (hash_entry_addr_cmp): New function.
+ (print_all_symbols): Sort the symbols by address before printing them.
+
+2009-08-10 Alan Modra <amodra@bigpond.net.au>
+
+ PR 10474
+ * ldemul.c (after_allocation_default): Run lang_relax_sections.
+ * ldlang.h (lang_relax_sections): Declare.
+ * ldlang.c (relax_sections): Delete.
+ (lang_relax_sections): New function.
+ (lang_process): Don't relax directly from here.
+ * emultempl/alphaelf.em (alpha_finish): Call finish_default.
+ * emultempl/armelf.em (arm_elf_after_allocation): Delete. Move body..
+ (gld${EMULATION_NAME}_finish): ..to here. Move existing code..
+ (gld${EMULATION_NAME}_after_allocation): ..to here. New function.
+ (LDEMUL_AFTER_ALLOCATION): Update.
+ * emultempl/avrelf.em (avr_elf_finish, LDEMUL_FINISH): Delete.
+ (avr_elf_after_allocation): New function.
+ (LDEMUL_AFTER_ALLOCATION): Define.
+ * emultempl/elf-generic.em (gld${EMULATION_NAME}_map_segments): Call
+ lang_relax_sections.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_finish): Delete. Move..
+ (gld${EMULATION_NAME}_after_allocation): ..code to here. New function.
+ (LDEMUL_AFTER_ALLOCATION, LDEMUL_FINISH): Update.
+ * emultempl/genelf.em (gld${EMULATION_NAME}_finish): Delete. Move..
+ (gld${EMULATION_NAME}_after_allocation): ..code to here. New function.
+ (LDEMUL_FINISH): Delete.
+ (LDEMUL_AFTER_ALLOCATION): Define.
+ * emultempl/hppaelf.em (gld${EMULATION_NAME}_finish): Delete. Move..
+ (gld${EMULATION_NAME}_after_allocation): ..to here. New function.
+ (LDEMUL_FINISH): Delete.
+ (LDEMUL_AFTER_ALLOCATION): Define.
+ * emultempl/m68hc1xelf.em (m68hc11elf_finish): Delete. Move..
+ (m68hc11elf_after_allocation): ..to here. New function.
+ (LDEMUL_FINISH): Delete.
+ (LDEMUL_AFTER_ALLOCATION): Define.
+ * emultempl/m68kelf.em (m68k_elf_after_allocation): Call
+ gld${EMULATION_NAME}_after_allocation.
+ * emultempl/mmix-elfnmmo.em (mmix_after_allocation): Call
+ gld${EMULATION_NAME}_after_allocation.
+ * emultempl/mmo.em (mmo_finish): Delete. Move body..
+ (gld${EMULATION_NAME}_after_allocation): ..to here. New function.
+ (LDEMUL_FINISH): Define.
+ * emultempl/ppc64elf.em (ppc_layout_sections_again): Set elf_gp.
+ (gld${EMULATION_NAME}_finish): Move code sizing sections..
+ (gld${EMULATION_NAME}_after_allocation): ..to here.
+ * emultempl/sh64elf.em (sh64_elf_${EMULATION_NAME}_after_allocation):
+ Call gld${EMULATION_NAME}_after_allocation.
+ * emultempl/spuelf.em (gld${EMULATION_NAME}_finish): Delete
+ bfd_elf_discard_info and map_segments call.
+
+2009-08-06 Michael Eager <eager@eagercon.com>
+
+ * Makefile.am: Add eelf32mb_linux.o, eelf32microblaze.o to
+ ALL_EMULATIONS, targets.
+ * Makefile.in: Regenerate.
+ * configure.tgt: Add microblaze*-linux*, microblaze* targets.
+ * emulparams/elf32mb_linux.sh: New.
+ * emulparams/elf32microblaze.sh. New.
+ * scripttempl/elfmicroblaze.sc: New.
+
+2009-08-05 Trevor Smigiel <Trevor_Smigiel@playstation.sony.com>
+
+ * emulparams/elf32_spu.sh (OTHER_READONLY_SECTIONS): Add .fixup
+ section and __fixup_start symbol.
+ * emultempl/spuelf.em (params): Initialize emit_fixups member.
+ (spu_before_allocation): Call spu_elf_size_sections.
+ (OPTION_SPU_EMIT_FIXUPS): Define.
+ (PARSE_AND_LIST_LONGOPTS): Add --emit-fixups.
+ (PARSE_AND_LIST_ARGS_CASES): Handle --emit-fixups.
+ * ld.texinfo (--emit-fixups): Document.
+
+2009-08-04 Alan Modra <amodra@bigpond.net.au>
+
+ PR 10474
+ * emultempl/ppc32elf.em (ppc_before_allocation): Test rawsize,
+ not size, after lang_reset_memory_regions.
+
+2009-07-30 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/elf32ppc.sh (PLT): Don't include ".iplt".
+ * emulparams/elf_i386.sh (IREL_IN_PLT): Define.
+ * emulparams/elf_x86_64.sh (IREL_IN_PLT): Define.
+ * scripttempl/elf.sc: Create separate .iplt and .rela.iplt sections
+ when !IREL_IN_PLT.
+
+2009-07-29 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * scripttempl/mmo.sc: For relocateable links, set $OUTPUT_FORMAT to
+ the new $RELOCATEABLE_OUTPUT_FORMAT, if set.
+ (OUTPUT_FORMAT): Use the variable $OUTPUT_FORMAT.
+ (ENTRY): Don't emit for relocateable links.
+ (/DISCARD/): Don't discard .gnu.warning.* for relocateable links.
+ * emulparams/mmo.sh (RELOCATEABLE_OUTPUT_FORMAT): Set, to
+ elf64-mmix.
+ * emulparams/elf64mmix.sh (OTHER_TEXT_SECTIONS): Empty, don't
+ provide "Main" or set "_start.", for relocateable links.
+
+2009-07-27 Nick Clifton <nickc@redhat.com>
+
+ * (po/fi.po): Updated Finnish translation.
+
+2009-07-25 H.J. Lu <hongjiu.lu@intel.com>
+
+ * configure.tgt (targ64_extra_emuls): Add elf_l1om if elf_x86_64
+ is supported. Add elf_l1om_fbsd if elf_x86_64_fbsd is supported.
+ (targ_extra_emuls): Likewise.
+
+ * Makefile.am (ALL_64_EMULATIONS): Add eelf_l1om.o and
+ eelf_l1om_fbsd.o
+ (eelf_l1om.c): New.
+ (eelf_l1om_fbsd.c): Likewise.
+ * Makefile.in: Regenerated.
+
+ * emulparams/elf_l1om.sh: New.
+ * emulparams/elf_l1om_fbsd.sh: Likewise.
+
+2009-07-23 Ulrich Drepper <drepper@redhat.com>
+
+ * NEWS: Mention the linker's support for symbols with a binding of
+ STB_GNU_UNIQUE.
+
+2009-07-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/10429
+ * ldlang.c (insert_os_after): Tie assignments to non-alloc
+ output sections if there is no-input section.
+
+2009-07-11 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (insert_os_after): Don't tie assignments to non-alloc
+ output sections.
+
+2009-07-10 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/ppc32elf.em (ppc_before_allocation): Turn on
+ linker relaxation if it might be necessary.
+
+2009-07-10 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/elf32ppc.sh (GOTPLT, PLT): Handle .iplt.
+
+2009-07-06 Matthias Klose <doko@ubuntu.com>
+
+ * ld.texinfo: Fix typo.
+
+2009-07-03 Tristan Gingold <gingold@adacore.com>
+
+ * scripttempl/pep.sc: Put .eh_frame in its own section.
+ * scripttempl/pe.sc: Ditto.
+
+2009-06-26 Kai Tietz <kai.tietz@onevision.com>
+
+ * scripttempl/pe.sc (.debug_pubtypes): Added section rule.
+ * scripttempl/pep.sc: Likewise.
+
+2009-06-25 Tristan Gingold <gingold@adacore.com>
+
+ * ldlang.c (print_input_section): Add is_discarded parameter. Adjust
+ prototype.
+ (lang_map): Print the size of discarded sections.
+ (print_statement): Adjust call to print_input_section.
+
+2009-06-18 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ Merge cegcc and mingw32ce target name changes from CeGCC project:
+
+ 2008-09-24 Pedro Alves <pedroalves@users.sourceforge.net>
+
+ * configure.tgt (arm*-*-cegcc*): Set LIB_PATH to
+ ${tooldir}/lib/w32api.
+
+ 2007-12-25 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * configure.tgt: Add arm*-*-cegcc* target.
+
+ 2007-12-17 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * configure.tgt: Add arm-*-mingw32ce* target.
+
+2009-06-10 Philip Blundell <philb@gnu.org>
+
+ * emultempl/armelf.em (gld${EMULATION_NAME}_finish): Avoid crash
+ if section has no ELF data.
+
+2009-06-06 H.J. Lu <hongjiu.lu@intel.com>
+
+ * scripttempl/elf.sc: Add .rel.ifunc and .rela.ifunc.
+
+2009-06-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ * scripttempl/elf.sc: Remove .rel.ifunc.dyn and .rela.ifunc.dyn.
+
+2009-06-04 Alan Modra <amodra@bigpond.net.au>
+
+ * dep-in.sed: Don't use \n in replacement part of s command.
+ * Makefile.am (DEP1): LC_ALL for uniq.
+ * Makefile.in: Regenerate.
+
+2009-06-01 H.J. Lu <hongjiu.lu@intel.com>
+
+ * scripttempl/elf.sc (PLT): Add "*(.iplt)".
+ (GOT): Add "*(.igot.plt)a" and "*(.igot)".
+ (GOTPLT): Add "*(.igot)".
+ (__rel_iplt_start): New.
+ (__rel_iplt_end): Likewise.
+ (__rela_iplt_start): Likewise.
+ (__rela_iplt_end): Likewise.
+
+2009-05-27 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * deffilep.y (%union): Add new string-type semantic value 'digits'.
+ (%token): Remove NUMBER as token, add DIGITS.
+ (%type): Add NUMBER as type. Add new id types anylang_id, opt_id.
+ (ALIGNCOMM): Parse an anylang_id instead of a plain ID.
+ (anylang_id): New production.
+ (opt_digits): Likewise.
+ (opt_id): Likewise.
+ (NUMBER): Likewise.
+ (def_lex): Return strings of digits in raw string form as DIGITS
+ token, instead of converting to numeric integer type.
+
+2009-05-26 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ldmain.c (main): Don't reject --relax -r.
+ * ld.texinfo (PowerPC ELF32): Document behaviour of relaxing
+ partial links.
+
+2009-05-26 Nick Clifton <nickc@redhat.com>
+
+ * po/id.po: Updated Indonesian translation.
+ * po/ld.pot: Updated template file.
+
+2009-05-26 Alan Modra <amodra@bigpond.net.au>
+
+ * dep-in.sed: Output one filename per line with all lines having
+ continuation backslash. Prefix first line with "A", following
+ lines with "B".
+ * Makefile.am (DEP): Don't use dep.sed here.
+ (DEP1): Run $MKDEP on single files, use dep.sed here on dependencies,
+ sort and uniq.
+ * Makefile.in: Regenerate.
+
+2009-05-26 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_check_section_addresses): Ignore non-alloc sections.
+
+2009-05-22 Julian Brown <julian@codesourcery.com>
+
+ * emultempl/armelf.em (fix_cortex_a8): New.
+ (arm_elf_before_allocation): Call bfd_elf32_arm_set_cortex_a8_fix.
+ (arm_elf_create_output_section_statements): Add fix_cortex_a8 to
+ bfd_elf32_arm_set_target_relocs.
+ (OPTION_FIX_CORTEX_A8, OPTION_NO_FIX_CORTEX_A8): New.
+ (PARSE_AND_LIST_LONGOPTS): Add [no-]fix-cortex-a8 options.
+ (PARSE_AND_LIST_OPTIONS): Add [no-]fix-cortex-a8 options.
+ (PARSE_AND_LIST_ARGS_CASES): Handle OPTION_[NO_]FIX_CORTEX_A8.
+ * ld.texinfo (--[no-]fix-cortex-a8): Briefly document new options.
+
+2009-05-22 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ldlang.c (lang_check_section_addresses): Ignore non-loadable
+ sections when checking for overlap. Clarify error message
+ concerns load address.
+
+2009-05-22 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+
+2009-05-19 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * NEWS: Mention new feature.
+ * deffile.h (def_file_aligncomm): Add new struct definition.
+ (def_file): Add new def_file_aligncomm member.
+ * deffilep.y (%token): Add new ALIGNCOMM token.
+ (command): Add production rule for ALIGNCOMM.
+ (def_file_free): Free any chained def_file_aligncomm structs.
+ (diropts[]): Add entry for '-aligncomm' .drectve command.
+ (def_aligncomm): New grammar function.
+ * ld.texinfo: Document new feature.
+ * pe-dll.c (process_def_file): Rename from this ...
+ (process_def_file_and_drectve): ... to this, updating all callers,
+ and process any aligncomms chained to the def file after scanning
+ all .drectve sections.
+ (generate_edata): Updated to match.
+ (pe_dll_build_sections): Likewise.
+
+2009-05-17 Aaron W. LaFramboise <aaron98wiridge9@aaronwl.com>
+
+ * pe-dll.c (process_def_file): Do not create empty export table.
+
+2009-05-15 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_output_section_statement_lookup): Add function
+ comment. Make "name" non-const. Ensure duplicate entries use
+ the same string, allowing simple comparison in hash bucket loop.
+ Tweak constraint check.
+ (next_matching_output_section_statement): New function.
+ * ldlang.h (lang_output_section_statement_lookup): Update.
+ (next_matching_output_section_statement): Declare.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Don't
+ combine orphan sections when input sections flags differ in
+ alloc or load.
+ * emultempl/pe.em: Formatting throughout.
+ (gld${EMULATION_NAME}_place_orphan): As for elf32.em.
+ * emultempl/pep.em: Formatting throughout.
+ (gld${EMULATION_NAME}_place_orphan): As for elf32.em.
+
+2009-05-14 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * emultempl/spuelf.em (PARSE_AND_LIST_ARGS_CASES): Always use
+ compact stubs with software i-cache.
+
+2009-05-14 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/spuelf.em (spu_before_allocation): Call
+ spu_elf_place_overlay_data.
+
+2009-05-14 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_insert_orphan): Add __start_<section> symbol
+ assignment inside output section statement. Ensure only one
+ set of symbols per output section.
+ * emultempl/pe.em (gld_${EMULATION_NAME}_place_orphan): Add non-
+ dollar sections before dollar sections. Correct add_child
+ list insertion.
+ * emultempl/pep.em (gld_${EMULATION_NAME}_place_orphan): Likewise.
+
+2009-05-05 Paul Brook <paul@codesourcery.com>
+
+ * emultempl/armelf.em (compare_output_sec_vma): New function.
+ (gld${EMULATION_NAME}_finish): Add exidx munging code.
+
+2009-05-05 Anatoly Sokolov <aesok@post.ru>
+
+ * scripttempl/avr.sc (MEMORY): Use DATA_ORIGIN.
+ * emulparams/avr1.sh (DATA_ORIGIN): Add.
+ * emulparams/avr2.sh (DATA_ORIGIN): Add.
+ * emulparams/avr25.sh (DATA_ORIGIN): Add.
+ * emulparams/avr3.sh (DATA_ORIGIN): Add.
+ * emulparams/avr31.sh (DATA_ORIGIN): Add.
+ * emulparams/avr35.sh (DATA_ORIGIN): Add.
+ * emulparams/avr4.sh (DATA_ORIGIN): Add.
+ * emulparams/avr5.sh (DATA_ORIGIN): Add.
+ * emulparams/avr51.sh (DATA_ORIGIN): Add.
+ (DATA_LENGTH): Update.
+ * emulparams/avr6.sh (DATA_ORIGIN): Add.
+ (DATA_LENGTH): Update.
+
+2009-05-04 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * NEWS: Mention new feature.
+ * ld.texinfo (--version-script): Document extent of PE support.
+ (WIN32): Mention --version-script. Extend auto-export description.
+ * pe-dll.c (process_def_file): Use version script info to filter
+ symbols from auto-export.
+ * testsuite/ld-pe/vers-script-1.d: New file.
+ * testsuite/ld-pe/vers-script-2.d: New file.
+ * testsuite/ld-pe/vers-script-3.d: New file.
+ * testsuite/ld-pe/vers-script-4.d: New file.
+ * testsuite/ld-pe/vers-script-1.ver: New file.
+ * testsuite/ld-pe/vers-script-2.ver: New file.
+ * testsuite/ld-pe/vers-script-3.ver: New file.
+ * testsuite/ld-pe/vers-script-4.ver: New file.
+ * testsuite/ld-pe/vers-script-dll.c: New file.
+ * testsuite/ld-pe/vers-script.exp: New test script.
+
+2009-05-01 Nathan Sidwell <nathan@codesourcery.com>
+
+ * emulparams/vxworks.sh (TEXT_START_ADDR): Override.
+
+2009-04-30 Nick Clifton <nickc@redhat.com>
+
+ * NEWS: Mention support for IFUNC symbols.
+
+2009-04-29 Anthony Green <green@moxielogic.com>
+
+ * emulparams/elf32moxie.sh (STACK_ADDR): Move default stack
+ position out to accommodate larger programs.
+
+2009-04-29 Chris Demetriou <cgd@google.com>
+
+ * lexsup.c (option_values): Add OPTION_NO_EXPORT_DYNAMIC.
+ (ld_options): Likewise.
+ (parse_args): Likewise.
+ * ld.texinfo: Document --no-export-dynamic.
+ * NEWS: Mention --no-export-dynamic.
+
+2009-04-29 Alan Modra <amodra@bigpond.net.au>
+
+ * deffilep.y (STACKSIZE_K): Rename from STACKSIZE.
+
+2009-04-25 Alan Modra <amodra@bigpond.net.au>
+
+ PR 10061
+ * genscripts.sh: Don't pass $EMULATION_NAME as $CUSTOMIZER_SCRIPT
+ param.
+
+2009-04-21 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * emultempl/armelf.em (bfd_for_interwork, arm_elf_after_open)
+ (arm_elf_set_bfd_for_interworking): Delete.
+ (arm_elf_before_allocation): Do not set the interworking BFD.
+ Move allocation inside not-dynamic block.
+ (arm_elf_create_output_section_statements): Create glue sections
+ and set the interworking BFD here.
+ (LDEMUL_AFTER_OPEN): Delete.
+
+2009-04-16 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * ldlang.c (lang_one_common): Use bfd_define_common_symbol.
+
+2009-04-15 Anthony Green <green@moxielogic.com>
+
+ * configure.tgt: Add moxie support.
+ * Makefile.am: Add moxie files.
+ * Makefile.in: Rebuilt.
+ * emulparams/elf32moxie.sh: New file.
+ * scripttempl/moxie.sc: New file.
+
+2009-04-15 Kazu Hirata <kazu@codesourcery.com>
+
+ * ldlang.c: Do not include limits.h.
+
+2009-04-14 Alan Modra <amodra@bigpond.net.au>
+
+ PR ld/10047
+ * ldfile.c (find_scripts_dir): Use make_relative_prefix to find
+ ldscripts in build tree. Don't repeat search for ../lib/ldscripts.
+
+2009-04-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ldfile.c (ldfile_find_command_file): Revert the last change.
+
+2009-04-11 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/10047
+ * ldfile.c (ldfile_find_command_file): First try raw name.
+
+2009-04-09 Nick Clifton <nickc@redhat.com>
+
+ PR 9824
+ * ld.texinfo (Output Section Constraint): New node. Documents the
+ ONLY_IF_RO and ONLY_IF_RW constraints.
+ (Symbolic Constants): New node. Documents the CONSTANT operator.
+
+2009-04-09 Thilo Fischer <thilo.fischer@uni-muenster.de>
+
+ * emultempl/spuelf.em (embedded_spu_file): Use pex_one in place
+ of fork/execvp.
+
+2009-04-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ * lexsup.c (option_values): Add OPTION_WARN_ALTERNATE_EM.
+ (ld_options): Likewise.
+ (parse_args): Likewise.
+
+ * ld.texinfo: Document --warn-alternate-em.
+
+ * NEWS: Mention --warn-alternate-em.
+
+2009-04-07 DJ Delorie <dj@redhat.com>
+
+ * emulparams/elf32mep.sh: Change default endian to little.
+
+2009-04-07 Nick Clifton <nickc@redhat.com>
+
+ * ld.texinfo (Output Section Address): Note that specifying an
+ address for an output section will only change the location
+ counter if the output section is used.
+
+2009-04-06 Kazu Hirata <kazu@codesourcery.com>
+
+ * ldfile.c (ldfile_find_command_file): Initialize result.
+
+2009-04-06 Kazu Hirata <kazu@codesourcery.com>
+
+ * ld.texinfo (-L): Mention that -L options do not affect how ld
+ searches for a linker script unless -T option is specified.
+ * ldfile.c (ldfile_find_command_file): Append the path obtained
+ from the program name to the search path instead of
+ prepending. Add a new parameter "default_only". Restrict the
+ search to the default script location if the new parameter is
+ true.
+ (ldfile_open_command_file_1): New.
+ (ldfile_open_command_file): Call ldfile_open_command_file_1.
+ (ldfile_open_default_command_file): New.
+
+2009-04-03 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ldlang.c (lang_leave_output_section_statement): Set lma_region
+ if it is not overridden and section is for the same vma region as
+ the previous section.
+
+2009-04-02 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ PR ld/6744
+ * ld.texinfo (--export-dynamic): Mention --export-all-symbols.
+ * emultempl/pe.em (gld_${EMULATION_NAME}_after_parse): Issue
+ warning if --export-dynamic was passed on command-line.
+ * emultempl/pep.em (gld_${EMULATION_NAME}_after_parse): Likewise.
+
+2009-04-01 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * emultempl/aix.em (gld${EMULATION_NAME}_open_dynamic_archive): New
+ function.
+ (ld_${EMULATION_NAME}_emulation): Use it.
+
+2009-03-20 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/9970
+ * ldlang.c (lang_end): Warn missing entry symbol for -pie.
+
+2009-03-19 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/spuelf.em (spu_before_allocation): Report errors from
+ spu_elf_find_overlays.
+
+2009-03-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/6766
+ * lexsup.c (parse_args): Call ldlang_add_undef for -e.
+
+2009-03-18 Alan Modra <amodra@bigpond.net.au>
+
+ * ld.h: Remove alloca handling.
+
+2009-03-17 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/spu_icache.S: Add new entry to dummy handler.
+ * emultempl/spu_icache.o_c: Regenerate.
+ * emultempl/spuelf.em (params): Init new field.
+ (no_overlays): New static var.
+ (spu_before_allocation): Use it.
+ (OPTION_SPU_COMPACT_STUBS): Define.
+ (PARSE_AND_LIST_LONGOPTS, PARSE_AND_LIST_OPTIONS): Add compact-stubs.
+ (PARSE_AND_LIST_ARGS_CASES): Handle compact-stubs. Adjust no-overlays
+ handling.
+
+2009-03-17 Alan Modra <amodra@bigpond.net.au>
+
+ * configure.host (HOSTING_LIBS): Two dollars on shell variable
+ expansion to suit make.
+
+2009-03-17 Alan Modra <amodra@bigpond.net.au>
+
+ * configure.in: Invoke ACX_PROG_CMP_IGNORE_INITIAL.
+ * Makefile.am (check-DEJAGNU): Set DO_COMPARE.
+ * aclocal.m4: Regenerate.
+ * configure: Regenerate.
+ * Makefile.in: Regenerate.
+
+2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * emultempl/aix.em (auto_export_flags): New variable.
+ (explicit_auto_export_flags): Likewise.
+ (OPTION_EXPALL, OPTION_EXPFULL): New enum values.
+ (OPTION_NOEXPALL, OPTION_NOEXPFULL): Likewise.
+ (gld${EMULATION_NAME}_add_options): Add -bexpall, -bexpfull,
+ -bnoexpall and -bnoexpfull.
+ (gld${EMULATION_NAME}_handle_option): Handle them.
+ (gld${EMULATION_NAME}_before_allocation): Update the call to
+ bfd_size_dynamic_sections.
+
+2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * emultempl/aix.em (gld${EMULATION_NAME}_handle_option): Make
+ -berok and -bernotok control link_info.unresolved_syms_in_objects
+ and link_info.unresolved_syms_in_shared_libs instead of
+ force_make_executable.
+
+2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * emultempl/aix.em (gld${EMULATION_NAME}_before_parse): Set
+ config.dynamic_link to TRUE.
+
+2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * emultempl/aix.em (gld${EMULATION_NAME}_before_allocation): Mark
+ .text, .data and .bss output sections as SEC_KEEP.
+
+2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * configure.tgt: Extend AIX 5 behavior to AIX 6 and above.
+
+2009-03-14 Dave Korn <dave.korn.cygwin@gmail.com>
+ Danny Smith <dannysmith@users.sourceforge.net>
+
+ * emultmpl/pe.em (pe_dll_characteristics): New variable.
+ (OPTION_DYNAMIC_BASE, OPTION_FORCE_INTEGRITY, OPTION_NX_COMPAT,
+ OPTION_NO_ISOLATION. OPTION_NO_SEH, OPTION_NO_BIND,
+ OPTION_WDM_DRIVER, OPTION_TERMINAL_SERVER_AWARE):
+ New macros for options to set DllCharacteristics flag bits.
+ (gld${EMULATION_NAME}_add_options): Add dynamicbase, forceinteg,
+ nxcompat, no-isolation, no-seh, no-bind, wdmdriver, tsaware options.
+ (init): Add DllCharacteristics field.
+ (gld_${EMULATION_NAME}_list_options): List new options.
+ (gld${EMULATION_NAME}_handle_option): Handle new options.
+ * emultmpl/pep.em (pe_dll_characteristics): New variable.
+ (OPTION_DYNAMIC_BASE, OPTION_FORCE_INTEGRITY, OPTION_NX_COMPAT,
+ OPTION_NO_ISOLATION. OPTION_NO_SEH, OPTION_NO_BIND,
+ OPTION_WDM_DRIVER, OPTION_TERMINAL_SERVER_AWARE):
+ New macros for options to set DllCharacteristics flags.
+ (gld${EMULATION_NAME}_add_options): Add dynamicbase, forceinteg,
+ nxcompat,no-isolation, no-seh, no-bind, wdmdriver, tsaware options.
+ (init): Add DllCharacteristics field.
+ (gld_${EMULATION_NAME}_list_options): List new options.
+ (gld${EMULATION_NAME}_handle_option): Handle new options.
+ * ldtexinfo : Document dynamicbase, forceinteg, nxcompat,
+ no-isolation, no-seh, no-bind, wdmdriver, tsaware options.
+
+2009-03-06 Nick Clifton <nickc@redhat.com>
+
+ * po/es.po: Updated Spanish translation.
+
+2009-03-03 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * emultempl/pe.em (debug_section_p): New bfd_map_over_sections hook.
+ (gld_${EMULATION_NAME}_after_open): Use it to iterate all sections
+ of all input BFDs, looking for debug info. Enable long section names
+ if any found.
+ * emultempl/pe.em (debug_section_p): Likewise.
+ (gld_${EMULATION_NAME}_after_open): Likewise.
+ * NEWS: Retrospectively adjust news announcement.
+ * ld.texinfo: Update documentation to mention new behaviour.
+
+2009-03-03 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+
+2009-03-02 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+ * ldgram.y: Add support for REGION_ALIAS operator.
+ * ldlang.c: Likewise.
+ * ldlang.h: Likewise.
+ * ldlex.l: Likewise.
+ * NEWS: Mention the new feature.
+ * ld.texinfo: Document the new feature.
+
+2009-03-02 Qinwei <qinwei@sunnorth.com.cn>
+
+ * Makefile.am: Replace score elf emulation with score3 and score7
+ emulations.
+ * Makefile.in: Regenerate,
+ * NEWS: Mention support for Score7 architecture.
+ * configure.tgt: Add score7 emulation to score-elf target.
+ * emulparams/scoreelf.sh: Add score7 support.
+ * emultempl/scoreelf.em: Likewise.
+
+2009-03-01 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ * configure.tgt: Only use elf64hppa target emulation for hpux.
+ * emulparams/elf64hppa.sh: Don't include hppa64linux.sh.
+ (SCRIPT_NAME): Use new script elf64hppa.
+ (SCRIPT_NAME, ELFSIZE, NO_REL_RELOCS, ARCH, MACHINE, ENTRY,
+ TEMPLATE_NAME, GENERATE_SHLIB_SCRIPT, OTHER_READONLY_SECTIONS,
+ OTHER_READWRITE_SECTIONS, OTHER_BSS_SECTIONS, OTHER_GOT_RELOC_SECTIONS,
+ DATA_START_SYMBOLS, OTHER_SYMBOLS, DATA_PLT, PLT_BEFORE_GOT,
+ TEXT_DYNAMIC): Define.
+ * emulparams/hppa64linux.sh: Adjust comments.
+ * scripttempl/elf64hppa.sc: New file.
+
+2009-03-01 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * configure: Regenerate.
+
+2009-02-27 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_before_parse): Set
+ default state of auto-import flag based on $target.
+
+2009-02-24 Joseph Myers <joseph@codesourcery.com>
+
+ * ld.texinfo (ARM): Document changed meaning of --stub-group-size.
+ * emultempl/armelf.em (hook_in_stub): Insert after the input section.
+ (elf32_arm_add_stub_section): Update comment.
+ (PARSE_AND_LIST_OPTIONS): Update help for --stub-group-size.
+
+2009-02-24 Sandra Loosemore <sandra@codesourcery.com>
+
+ * ld.texinfo (Options): Correct typos in example. Recommend
+ using joined forms of syntax for passing options with arguments
+ from a driver.
+ (-a): Use consistent syntax for documenting option arguments.
+ Clean up indexing and markup.
+ (-A/--architecture): Likewise.
+ (-f/--auxiliary): Likewise.
+ (-F/--filter): Likewise.
+ (-fini): Likewise.
+ (-G/--gpsize): Likewise.
+ (-h/-soname):Likewise.
+ (-init): Likewise.
+ (-l/--library): Likewise.
+ (-L/--library-path): Likewise.
+ (-m): Likewise.
+ (--defsym): Likewise.
+ (-I/--dynamic-linker): Likewise.
+ (-Map): Likewise.
+ (--oformat): Likewise.
+ (--retain-symbols-file): Likewise.
+ (-rpath): Likewise.
+ (-rpath-link): Likewise.
+ (--sort-common): Likewise.
+ (--sort-section): Likewise.
+ (--split-by-file): Likewise.
+ (--split-by-reloc): Likewise.
+ (--sysroot): Likewise.
+ (--section-start): Likewise.
+ (-Tbss, -Tdata, -Ttext): Likewise.
+ (-Ttext-segment): Likewise.
+ (--version-script): Likewise.
+ (--wrap): Likewise.
+
+2009-02-18 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * ld.texinfo: Update to mention long section name options.
+ * NEWS: Mention new behaviour and command-line options.
+ * pe-dll.c (pe_use_coff_long_section_names): New global variable.
+ (pe_output_file_set_long_section_names): New function.
+ (pe_dll_build_sections): Call it on output BFDs.
+ (pe_exe_build_sections): Likewise.
+ (pe_dll_fill_sections): Likewise.
+ (pe_exe_fill_sections): Likewise.
+ * pe-dll.h (pe_use_coff_long_section_names): Declare extern.
+ (pe_output_file_set_long_section_names): Add prototype.
+ * pep-dll.c (pe_use_coff_long_section_names): Define pep_ alias.
+ (pe_output_file_set_long_section_names): Likewise.
+ * pep-dll.h (pep_use_coff_long_section_names): Declare extern.
+ (pep_output_file_set_long_section_names): Add prototype.
+ * pe.em (OPTION_ENABLE_LONG_SECTION_NAMES): New getopt value macro.
+ (OPTION_DISABLE_LONG_SECTION_NAMES): Likewise.
+ (gld${EMULATION_NAME}_add_options): Add new options to xtra_long[].
+ (gld_${EMULATION_NAME}_list_options): Describe them.
+ (gld${EMULATION_NAME}_handle_option): Set or clear global
+ pe_use_coff_long_section_names flag when options recognised.
+ (gld_${EMULATION_NAME}_after_open): En/disable long section names
+ for main output bfd by calling pe_output_file_set_long_section_names.
+ * pep.em (enum options): Extend enum with new getopt option values.
+ (gld${EMULATION_NAME}_add_options): Add new options to xtra_long[].
+ (gld_${EMULATION_NAME}_list_options): Describe them.
+ (gld${EMULATION_NAME}_handle_option): Set or clear global
+ pe_use_coff_long_section_names flag when options recognised.
+ (gld_${EMULATION_NAME}_after_open): En/disable long section names
+ for main output bfd by calling pep_output_file_set_long_section_names.
+
+2009-02-16 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_after_open): Don't emit
+ inadvertent .reloc sections caused by refactoring accident.
+
+2009-02-16 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (process_insert_statements): ASSERT that output section
+ statements are in order.
+
+2009-02-16 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (push_stat_ptr, pop_stat_ptr): New functions.
+ (stat_save, stat_save_ptr): New variables.
+ (lang_insert_orphan): Use push_stat_ptr and pop_stat_ptr.
+ (load_symbols): Likewise. Delete dead "bad_load" code.
+ (open_input_bfds): Warn on script containing output sections.
+ (lang_enter_output_section_statement): Use push_stat_ptr.
+ (lang_enter_group): Likewise.
+ (lang_leave_output_section_statement): Use pop_stat_ptr.
+ (lang_leave_group): Likewise.
+ * ldlang.h (push_stat_ptr, pop_stat_ptr): Declare.
+ * ldctor.c (ldctor_build_sets): Use push_stat_ptr and pop_stat_ptr.
+ * emultempl/beos.em (gld_${EMULATION_NAME}_set_symbols): Likewise.
+ * emultempl/pe.em (gld_${EMULATION_NAME}_set_symbols): Likewise.
+ * emultempl/pep.em (gld_${EMULATION_NAME}_set_symbols): Likewise.
+ * emultempl/spuelf.em (spu_place_special_section): Likewise.
+ * emultempl/xtensaelf.em (ld_xtensa_insert_page_offsets): Likewise.
+
+2009-02-09 Nathan Sidwell <nathan@codesourcery.com>
+
+ Missing piece of 2009-01-26 commit
+ * ldlang.c (lang_process): Don't consider relocatable flag when
+ checking for overlap.
+
+2009-02-05 Joseph Myers <joseph@codesourcery.com>
+
+ * emulparams/m68kelf.sh: Add newline at end of file.
+
+2009-02-04 Nick Clifton <nickc@redhat.com>
+
+ PR 9805
+ * ld.texinfo (--allow-shlib-undefined): Correct description of
+ default settings and tidy up the rest of the entry.
+
+2009-02-04 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/spuelf.em (spu_after_open): Don't combine .text.ia.*
+ during relocatable link.
+
+2009-02-03 Nick Clifton <nickc@redhat.com>
+
+ PR 9797
+ * ld.texinfo (Constants): Document the base-encoding suffixes
+ supported in linker scripts.
+
+2009-02-03 Alan Modra <amodra@bigpond.net.au>
+
+ * NEWS: Mention --as-needed change.
+
+2009-02-03 Carlos O'Donell <carlos@codesourcery.com>
+
+ * configure.in: AC_SUBST pdfdir.
+ * Makefile.am: Add install-pdf, install-pdf-am,
+ and install-pdf-recursive targets. Define pdf__strip_dir.
+ * po/Make-in: Add install-pdf target.
+ * configure: Regenerate.
+ * Makefile.in: Regenerate.
+
+2009-01-31 Alan Modra <amodra@bigpond.net.au>
+
+ * ld.texinfo (--as-needed): Update.
+
+2009-01-29 Andrew Jenner <andrew@codesourcery.com>
+
+ * emultempl/armelf.em: Correct formatting of help text for
+ --no-enum-size-warning option.
+
+2009-01-26 Nathan Sidwell <nathan@codesourcery.com>
+
+ * lexsup.c (parse_args): Set check_section_addresses to 1 or 0.
+ * ld.h (args_type): Make check_section_addresses a char.
+ * ldmain.c (main): Default check_section_addresses to -1. Check it
+ for relocatable links.
+ * ld.texinfo (--check-sections): Update documentation.
+
+2009-01-26 Kai Tietz <kai.tietz@onevision.com>
+
+ * pe-dll.c (tmp_seq2): New static variable.
+ (make_singleton_name_imp): New.
+ (make_import_fixup_entry): Use for v2 the _imp_<name> symbol and
+ avoid duplicate import table generation for same symbol.
+ (pe_create_runtime_relocator_reference): Make reference for
+ 64-bit 8 bytes.
+
+2009-01-21 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/spuelf.em (params): Init new field.
+ (OPTION_SPU_NON_IA_TEXT): Define.
+ (PARSE_AND_LIST_LONGOPTS, PARSE_AND_LIST_OPTIONS): Add --non-ia-text.
+ (PARSE_AND_LIST_ARGS_CASES): Handle OPTION_SPU_NON_IA_TEXT.
+
+2009-01-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * lexsup.c (option_values): Add OPTION_TTEXT_SEGMENT.
+ (ld_options): Add -Ttext-segment.
+ (parse_args): Handle OPTION_TTEXT_SEGMENT.
+
+ * ld.texinfo: Document -Ttext-segment.
+
+ * NEWS: Mention -Ttext-segment.
+
+ * scripttempl/elf.sc (TEXT_START_ADDR): Use SEGMENT_START.
+ (SHLIB_TEXT_START_ADDR): Likewise.
+
+2009-01-13 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/spu_icache.o_c: Regenerate.
+
+2009-01-12 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/spuelf.em (params): Init new fields.
+ (num_lines_set, line_size_set, icache_mgr, icache_mgr_stream): New vars.
+ (spu_place_special_section): Adjust placement for soft-icache. Pad
+ soft-icache section to a fixed size. Clear addr_tree.
+ (spu_elf_load_ovl_mgr): Support soft-icache. Map overlay manager
+ sections a little more intelligently.
+ (gld${EMULATION_NAME}_finish): Don't call spu_elf_build_stubs.
+ (OPTION_SPU_NUM_LINES): Rename from OPTION_SPU_NUM_REGIONS.
+ (OPTION_SPU_SOFT_ICACHE, OPTION_SPU_LINE_SIZE): Define.
+ (OPTION_SPU_LRLIVE): Define.
+ (PARSE_AND_LIST_LONGOPTS): Add new soft-icache options.
+ (PARSE_AND_LIST_OPTIONS): Likewise.
+ (PARSE_AND_LIST_ARGS_CASES): Handle them.
+ * emultempl/spu_icache.S: Dummy file.
+ * emultempl/spu_icache.o_c: Regenerate.
+ * Makefile.am (eelf32_spu.c): Depend on spu_icache.o_c.
+ (spu_icache.o_c): Add rule to build.
+ (CLEANFILES): Zap temp files.
+ (EXTRA_DIST): Add spu_icache.o_c.
+ * Makefile.in: Regenerate.
+
+2009-01-08 Kai Tietz <kai.tietz@onevision.com>
+
+ * pe.em (OPTION_USE_NUL_PREFIXED_IMPORT_TABLES): New.
+ (gld..._add_options): Add new option
+ --use-nul-prefixed-import-tables.
+ (gld..._handle_option): Likewise.
+ * pep.em: Same as for pe.em.
+ * ld.texinfo: Add new option documentation for
+ --use-nul-prefixed-import-tables.
+ * pe-dll.c (pe_use_nul_prefixed_import_tables): New.
+ (make_head): Make prefix leading zero prefix element for
+ idata$4 and idata$5 dependent to new flag.
+ (make_import_fixup_entry): Remove idata4/5 prefix.
+ * pe-dll.h (pe_use_nul_prefixed_import_tables): New.
+ * pep-dll.c (pe_use_nul_prefixed_import_tables): New.
+ * pep-dll.h (pep_use_nul_prefixed_import_tables): New.
+ * NEWS: Add new option.
+
+2009-01-05 Kai Tietz <kai.tietz@onevision.com>
+
+ * emultempl/pe.em: Prefix dollar characters to be outputed in
+ generated C file.
+ * emultempl/pep.em: Likewise.
+
+2009-01-03 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * NEWS: Mention new feature --exclude-modules-for-implib.
+ * ld.texinfo: Document new --exclude-modules-for-implib option.
+ * pe-dll.c (exclude_list_struct): Change type member from int to
+ new enumeration exclude_type.
+ (pe_dll_add_excludes): Accept exclude_type instead of int param.
+ (auto_export): Replace magic constants by exclude_type values and
+ handle new choice EXCLUDEFORIMPLIB.
+ (pe_dll_generate_implib): Accept a pointer to the link_info and
+ iterate all input BFDs looking for EXCLUDEFORIMPLIB modules; re-open
+ fresh BFDs for any found and link into import lib archive chain.
+ * pe-dll.h (exclude_type): Add new enumerated type to replace magic
+ constants previously used for exclude_list_struct type member.
+ (pe_dll_add_excludes, pe_dll_generate_implib): Update prototypes.
+ * pep-dll.h (exclude_type, pe_dll_add_excludes,
+ pe_dll_generate_implib): Likewise to all the above.
+ * emultempl/pe.em (OPTION_EXCLUDE_MODULES_FOR_IMPLIB): Define new
+ getopts long option code for new --exclude-modules-for-implib option.
+ (gld${EMULATION_NAME}_add_options): Add new entry to xtra_long[].
+ (gld_${EMULATION_NAME}_list_options): List usage for it.
+ (gld${EMULATION_NAME}_handle_option): Use exclude_type enumerated
+ values when calling pe_dll_add_excludes, and handle EXCLUDEFORIMPLIB.
+ (gld_${EMULATION_NAME}_finish): Pass pointer to link_info when
+ calling pe_dll_generate_implib.
+ * emultempl/pep.em (options): Define new enumerated value for getopts
+ long option code for new --exclude-modules-for-implib option.
+ (gld${EMULATION_NAME}_add_options, gld_${EMULATION_NAME}_list_options,
+ gld${EMULATION_NAME}_handle_option, gld_${EMULATION_NAME}_finish):
+ Again, likewise to all the above.
+
+2009-01-03 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * pe-dll.c (autofilter_liblist): Add entry for shared libgcc.
+ (libnamencmp): New function.
+ (auto_export): Use it in place of strncmp when filtering libraries.
+
+For older changes see ChangeLog-2008
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/binutils-2.21/ld/ChangeLog-9197 b/binutils-2.21/ld/ChangeLog-9197
new file mode 100644
index 0000000..9307f33
--- /dev/null
+++ b/binutils-2.21/ld/ChangeLog-9197
@@ -0,0 +1,7601 @@
+Sun Dec 21 12:51:49 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldexp.c (fold_name): Don't crash if the symbol is defined in a
+ section with no output section, such as a shared library section.
+
+Wed Dec 17 12:14:11 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * lexsup.c (parse_args): Keep track of where we are in the option
+ parsing before calling ldemul_parse_args, so that we don't call it
+ multiple times on the same argument and confuse the getopt
+ internals.
+
+Thu Dec 11 09:00:15 1997 Michael Meissner <meissner@cygnus.com>
+
+ * configure.tgt (d30v-elf-*): Rename d30velf_e to d30v_e and
+ d30velf_o to d30v_o to work in DOS environments.
+ * Makefile.{am,in}: Ditto.
+
+ * emulparams/d30v_{o,e}.sh: Rename from d30velf_{o,e}.
+ * emulparams/d30velf_{o,e}.sh: Deleted.
+
+Wed Dec 10 17:40:08 1997 Nick Clifton <nickc@cygnus.com>
+
+ * scripttempl/armcoff.sc: Add glue sections (code taken from Arm
+ branch).
+
+ * emulparams/armcoff.sh (TEMPLATE_NAME): Set to armcoff.
+
+ * emultempl/armcoff.em: New file, imported from Arm branch.
+
+Wed Dec 10 14:10:44 1997 Michael Meissner <meissner@cygnus.com>
+
+ * scripttempl/elfd30v.sc: Add .rel and .rela sections for all
+ defined sections. Set up __{D,C}TOR_{LIST,END}__. Add onchip and
+ external memory sections for rodata. Delete .string, .rodata1,
+ and .data1 sections.
+
+Tue Dec 9 15:28:17 1997 Michael Meissner <meissner@cygnus.com>
+
+ * Makefile.am: Add Oct 23 changes to Makefile.in here.
+
+ * Makefile.{am,in}: (ALL_EMULATIONS): Add ed10velf.o.
+
+ * Makefile.{am,in}: (ALL_EMULATIONS): Add etic80coff.o.
+
+ * Makefile.{am,in}: (ALL_EMULATIONS): Add ed30velf{,_e,_o}.o.
+ (ed30velf_e.c): Like d30velf, except .text/.data/etc always go in
+ external memory.
+ (ed30velf_o.c): Like d30velf, except .text/.data/etc always go in
+ onchip memory.
+
+ * emulparams/d30velf.sh (STACK_START_ADDR): Top of default
+ stack.
+ ({TEXT,DATA,EMEM}_SIZE): Sizes of the 3 memory areas.
+ ({TEXT,DATA,BSS}_MEMORY): Which memory region .text, .data, and
+ .bss should go in.
+
+ * emulparams/d30velf_{e,o}.sh: New files to be explicit whether
+ .text, .data, etc go in external memory or onchip memory.
+
+ * configure.tgt (d30v-*-*ext*): New configuration to default
+ .text, .data, etc. in external memory.
+ (d30v-*-*onchip*): New configuration to default .text, .data,
+ etc. in onchip memory.
+ (d30v-*-*): Add d30velf_{e,o} emulations.
+
+ * scripttempl/elfd30v.sc: Allow .text, .data, .bss to be put in
+ either the onchip text/data areas or the external memory area.
+ (MEMORY): Get sizes from d30velf.sh.
+ (.e{data,text,bss}): Put sections in the external memory region.
+ (.stext): Put section in the onchip text region.
+ (.s{data,bss}): Put sections in the onchip data region.
+ (__stack): Assign from ${STACK_START_ADDR}.
+ (.text): Put in ${TEXT_MEMORY} memory region.
+ (.data{,1}/.strings/.rodata{,1}): Put in ${DATA_MEMORY} memory
+ region.
+ (.bss): Put in ${BSS_MEMORY} memory region.
+
+Tue Dec 2 10:14:47 1997 Nick Clifton <nickc@cygnus.com>
+
+ * configure.tgt (targ_extra_emuls): Add support for Thumb target.
+
+Sat Nov 22 15:23:19 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlex.l: Don't define hex_mode. Correct number regexp to not
+ accept hex digits without a leading $ or 0x. Handle leading $
+ correctly. Pass 0 rather than hex_mode to bfd_scan_vma.
+ * ldlex.h (hex_mode): Don't declare.
+
+Sun Nov 16 20:16:45 1997 Michael Meissner <meissner@cygnus.com>
+
+ * emulparams/d30velf.sh ({DATA,EMEM}_START_ADDR): Define as start
+ of internal data area and external memory on chip.
+
+ * scripttempl/elfd30v.sc: Define a MEMORY region that describes
+ the 3 regions of memory on the chip. Put .text/.init/.fini into
+ the text memory region, put other segments into the data memory
+ region. Add more of the standard elf sections. Default __stack
+ to be 0x20008000, which is 1 byte beyond end of the internal data
+ region.
+
+Thu Nov 13 13:45:00 1997 Andrew Cagney <cagney@b1.cygnus.com>
+
+ * configure.tgt (targ_extra_emuls): Make FreeBSD a i386bsd
+ variant.
+
+Sun Nov 2 14:51:36 1997 H.J. Lu <hjl@gnu.ai.mit.edu>
+
+ * configure.host (alpha*-*-linux*): Correct HOSTING_CRT0. Set
+ HOSTING_LIBS.
+
+Thu Oct 30 12:25:55 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld.h (args_type): Add warn_mismatch field.
+ * ldmain.c (main): Initialize warn_mismatch field.
+ * lexsup.c (parse_args): Handle --no-warn-mismatch option.
+ * ldlang.c (ignore_bfd_error): New static function.
+ (lang_check): If warn_mismatch is false, don't warn about
+ mismatched input files.
+ * ld.texinfo, ld.1: Document new option.
+
+Thu Oct 23 14:38:18 1997 Nick Clifton <nickc@cygnus.com>
+
+ * scripttempl/v850.sc: Rename linker symbol '_stack' to '__stack'
+ to avoid conflicts with C code which is defining a variable called
+ 'stack'.
+
+Thu Oct 23 00:57:45 1997 Richard Henderson <rth@dot.cygnus.com>
+
+ * Makefile.in (ALL_EMULATIONS): Move eelf64_sparc.o ...
+ (ALL_64_EMULATIONS): ... here.
+ (eelf64_sparc.c): Template should be elf32 not generic.
+ * emulparams/elf64_sparc.sh (TEMPLATE_NAME): New definition.
+
+Thu Oct 23 00:44:20 1997 Richard Henderson <rth@dot.cygnus.com>
+
+ * configure.tgt: Add sparc64-*-linux*.
+ * emulparams/elf64_sparc.sh (GENERATE_SHLIB_SCRIPT, NOP): New.
+
+Wed Oct 22 11:29:25 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * scripttempl/pe.sc: Put .eh_frame in .rdata.
+
+Fri Oct 17 00:00:13 1997 Richard Henderson <rth@cygnus.com>
+
+ * ldlang.c (lang_register_vers_node): Only check globals<=>locals,
+ since we need to be able to export different versions of the same
+ symbol.
+
+Wed Oct 15 14:52:36 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * scripttempl/pe.sc: Put .stab and .stabstr sections at end.
+
+Wed Oct 8 12:37:05 1997 Richard Henderson <rth@cygnus.com>
+
+ * configure.tgt, configure.host: Change alpha-*-* to alpha*-*-*;
+ config.guess now recognizes alphaev5 etc.
+
+Fri Oct 3 14:23:02 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/aix.em (gld${EMULATION_NAME}_parse_args): Don't treat
+ -s and -u as -static and -unix.
+
+Thu Oct 2 18:40:28 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlang.c (wild_doit): Rewrite flag handling for clarity. If we
+ are not adding the first input section, and SEC_READONLY is clear
+ on the output section, then don't copy it from the input section.
+ If SEC_READONLY is not set on the input section, then clear it on
+ the output section.
+
+ * configure.tgt (mips*-sgi-irix[56]*): Use elf32bsmip rather than
+ elf32bmip.
+ (mips*el-*-linux*): Change elf32lmip to elf32lsmip and elf32bmip
+ to elf32bsmip.
+ (mips*-*-linux*): Likewise.
+ * emulparams/elf32bsmip.sh: New file; just like elf32bmip.sh, but
+ setting ENTRY to __start.
+ * emulparams/elf32lsmip.sh: New file; just like elf32lmip.sh, but
+ setting ENTRY to __start.
+ * scripttempl/elf.sc: Always set ENTRY to _start if it was not
+ already set.
+
+Wed Oct 1 16:41:00 1997 Nick Clifton <nickc@cygnus.com>
+
+ * emulparams/v850.sh (ROZDATA_START_ADDR, ROSDATA_START_ADDR): New
+ Variables.
+
+ * scripttempl/v850.sc: Move read only areas out of zero and small
+ data sections and into their own sections.
+
+Wed Sep 24 16:59:15 1997 Joel Sherrill <joel@oarcorp.com>
+
+ * configure.tgt (sh*-*-rtems*): New target, like sh-*-elf*.
+
+Wed Sep 24 11:33:14 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld.texinfo (Section Options): Improve documentation of NOLOAD
+ directive.
+
+ * aclocal.m4: Rebuild with new libtool.
+ * configure: Rebuild.
+
+Mon Sep 22 17:24:06 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlang.c (wild_doit): Revert patch of September 3.
+
+Wed Sep 17 16:45:34 1997 Nick Clifton <nickc@cygnus.com>
+
+ * Makefile.am, Makefile.in: Add rule for ev850.c
+ * configure.tgt (targ_extra_emuls): Add v850 target.
+
+Wed Sep 17 16:43:39 1997 Nick Clifton <nickc@cygnus.com>
+
+ * emulparams/v850.sh (CALL_TABLE_START_ADDR): New entry.
+ * scripttempl/v850.sc: Add call table data area
+
+Mon Sep 15 11:29:13 1997 Ken Raeburn <raeburn@cygnus.com>
+
+ Merge change from Martin Hunt:
+
+ * scripttempl/elfd30v.sc: Put .rodata in the .text section.
+
+Tue Sep 9 07:49:56 1997 Fred Fish <fnf@ninemoons.com>
+
+ * ldlang.c (lang_memory_region_lookup): Remove extraneous
+ initialization of p.
+
+Thu Sep 4 09:03:33 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/aix.em (gld${EMULATION_NAME}_parse_args): In
+ expression produced for -bpT and -bpD options, align to a 32 byte
+ boundary rather than an 8 byte boundary.
+ * scripttempl/aix.sc: Put .tocbss at start of .bss section.
+
+ * ldmisc.h, ldmisc.c, ldcref.c: Rename finfo to lfinfo, to avoid
+ function name conflict with AIX 4.2 unistd.h header file.
+
+Wed Sep 3 15:12:32 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlang.c (wild_doit): Clear SEC_HAS_CONTENTS from a
+ noload_section.
+
+Fri Aug 29 00:32:31 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.am (ld_new_DEPENDENCIES): Remove @LEXLIB@.
+ * Makefile.in: Rebuild.
+
+Thu Aug 28 10:12:10 1997 Doug Evans <dje@canuck.cygnus.com>
+
+ * configure.tgt (arc-*-elf*): Recognize.
+ * Makefile.am (ALL_EMULATIONS): Add earcelf.o.
+ * Makefile.in: Regenerate.
+ * emulparams/arcelf.sh: New file.
+
+Wed Aug 20 11:14:13 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlang.c (wildcardp): Don't let a backslash by itself cause a
+ pattern to be treated as a wildcard pattern.
+
+ * ldgram.y (atype): Accept parentheses with no type.
+
+ * ld.texinfo (Section Definition): Clarify use of whitespace.
+ (Section Placement): Likewise.
+
+Mon Aug 18 11:12:03 1997 Nick Clifton <nickc@cygnus.com>
+
+ * configure.tgt (targ_extra_emuls): Add support for v850e target.
+
+Mon Aug 18 11:12:03 1997 Nick Clifton <nickc@cygnus.com>
+
+ * configure.tgt (targ_extra_emuls): Add support for v850e target.
+
+Sat Aug 9 00:42:27 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.am (ld.info): Change dependency from
+ $(BFDDIR)/doc/bfdsumm.texi to bfdsumm.texi.
+ (ld.dvi): Likewise.
+ (bfdsumm.texi): New target.
+ (CLEANFILES): Add bfdsumm.texi.
+ * Makefile.in: Rebuild.
+
+ * Makefile.am: New file, based on old Makefile.in.
+ * acinclude.m4: New file, from old aclocal.m4.
+ * configure.in: Call AM_INIT_AUTOMAKE and AM_PROG_LIBTOOL. Remove
+ shared library handling; now handled by libtool. Replace
+ AC_CONFIG_HEADER with AM_CONFIG_HEADER. Call AC_PROG_YACC,
+ AC_PROG_LEX, and AC_DECL_YYTEXT. Call AM_MAINTAINER_MODE,
+ AM_CYGWIN32, and AM_EXEEXT. Don't call CY_CYGWIN32 or CY_EXEEXT.
+ * configure.host: Don't set HLDFLAGS, HLDENV, or RPATH_ENVVAR.
+ * acconfig.h: Mention PACKAGE and VERSION.
+ * stamp-h.in: New file.
+ * ldver.c (ld_program_version): Set ld_program_version from
+ VERSION.
+ * ldgram.y, ldlex.l: Replace VERSION with VERSIONK.
+ * Makefile.in: Now built with automake.
+ * aclocal.m4: Now built with aclocal.
+ * configure, config.in: Rebuild.
+
+Mon Jul 28 19:04:50 1997 Rob Savoye <rob@chinadoll.cygnus.com>
+
+ * configure.in: Use CYGWIN and EXEEXT autoconf macro to look for
+ win32 dependencies.
+ * configure: Regenerated with autoconf 2.12.
+ * Makefile.in: Add $(EXEEXT) to executable.
+
+Tue Jul 22 18:50:38 1997 Robert Hoehne <robert.hoehne@Mathematik.TU-Chemnitz.DE>
+
+ * emulparams/i386go32.sh (OUTPUT_FORMAT): Set to "coff-go32".
+ (SEGMENT_SIZE): Set to 0x200.
+ * scripttempl/i386go32.sc: Rewrite.
+ * configure.tgt (i[3456]86-*-msdosdjgpp*): New target.
+
+Mon Jul 7 12:39:42 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ From Manfred Hollstein <manfred@s-direktnet.de>:
+ * configure.host (i[3456]86-*-linux*libc1*): Renamed from
+ i[3456]86-*-linux*.
+ (i[3456]86-*-linux*): New host.
+
+Thu Jun 26 13:54:03 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * scripttempl/pe.sc: Put .rsrc after .reloc. Put input .rsrc
+ sections in the output .rsrc section.
+
+Wed Jun 25 12:48:41 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * configure.host (m68*-*-linux*libc1*): Renamed from
+ `m68*-*-linux*'.
+ (m68*-*-linux*): New configuration for use with GNU libc 2.
+
+Mon Jun 16 19:18:21 1997 Geoff Keating <geoffk@ozemail.com.au>
+
+ * scripttempl/elfppc.sc: Correct .rela.sdata entries.
+
+ * scripttempl/elfppc.sc: Put the PLT between the small and large
+ BSS segments.
+ * emulparams/elf32ppc.sh (TEXT_START_ADDR): The ABI says `A
+ program base of 0x02000000 is recommended...' because otherwise
+ shared libraries are less efficient. We use 0x01800000 because
+ otherwise it's impossible to branch to location 0, for instance if
+ you have an undefined weak symbol.
+
+Mon Jun 16 12:49:36 1997 H.J. Lu <hjl@gnu.ai.mit.edu>
+
+ * ldlang.c (lang_place_undefineds): Add \n in einfo call.
+ (lang_size_sections): Likewise.
+ * ldlex.l: Likewise.
+ * emultempl/aix.em (gld${EMULATION_NAME}_read_file): Likewise.
+ * emultempl/mipsecoff.em (gld${EMULATION_NAME}_after_open):
+ Likewise.
+ (check_sections): Likewise.
+ (gld${EMULATION_NAME}_after_allocation): Likewise.
+ * emultempl/pe.em (gld_$${EMULATION_NAME}_before_allocation):
+ Likewise.
+ * mpw-eppcmac.c (gldppcmacos_read_file): Likewise.
+ * mpw-idtmips.c (gldmipsidt_after_open): Likewise.
+ (check_sections): Likewise.
+ (gldmipsidt_after_allocation): Likewise.
+
+ * ldemul.c (ldemul_choose_mode): Remove unused einfo argument.
+
+Fri Jun 6 23:47:42 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * scripttempl/pe.sc: Add zeroes after .idata$3 to mark the end of
+ the import list.
+
+Thu May 29 13:13:22 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_section): Don't
+ crash if an output section has no BFD section.
+
+Fri May 23 15:23:25 1997 Fred Fish <fnf@cygnus.com>
+
+ * lexsup.c (ld_options): Add entry for the new "task-link" option.
+ (parse_args): Handle the "task-link" option.
+ (OPTION_TASK_LINK): Add define.
+
+Wed May 21 17:44:15 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldmain.c (main): Correct check of fclose return value when
+ handling --force-exe-suffix.
+
+Thu May 15 11:35:29 1997 Nick Clifton <nickc@cygnus.com>
+
+ * ldlang.c (lang_check): Add test of the return value from the
+ call to bfd_merge_private_bfd_data().
+
+Mon May 12 23:22:58 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * scripttempl/elfmips.sc: Remove.
+ * scripttempl/elf.sc: Set ENTRY based on target. Permit
+ TEXT_DYNAMIC to control .dynamic segment. Permit
+ SHLIB_TEXT_START_ADDR to set start of shared object. Support
+ INITIAL_READONLY_SECTIONS. Put .stub in .text. Only put
+ .gnu.linkonce.t* in .text when relocating. Support
+ OTHER_TEXT_SECTIONS. Support SHLIB_DATA_ADDR as well as
+ DATA_ADDR. Support OTHER_GOT_SYMBOLS and OTHER_GOT_SECTIONS.
+ * emulparams/elf32b4300.sh (SCRIPT_NAME): Set to elf.
+ (DATA_ADDR): Don't set.
+ (INITIAL_READONLY_SECTIONS): Rename from OTHER_READONLY_SECTIONS.
+ (OTHER_TEXT_SECTIONS): Set.
+ (OTHER_GOT_SECTIONS): Rename from OTHER_READWRITE_SECTIONS.
+ (MACHINE): Set to empty string.
+ * emulparams/elf32l4300.sh: Likewise.
+ * emulparams/elf32ebmip.sh: Likewise.
+ * emulparams/elf32elmip.sh: Likewise.
+ * emulparams/elf32bmip.sh: Likewise. Also:
+ (TEXT_DYNAMIC): Set.
+ * emulparams/elf32lmips.sh: Likewise.
+ * Makefile.in (eelf32bmips.c): Depend upon elf.sc rather than
+ elfmips.sc.
+ (eelf32ebmips.c, eelf32elmips.c, eelf32lmip.c): Likewise.
+
+Mon May 12 11:11:06 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * scripttempl/elf.sc: Don't align the data segment on the next 8
+ byte boundary, instead let the linker use whatever the individual
+ sections require.
+
+Fri May 9 17:45:46 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.tgt (i[3456]86-*-gnu*): Don't include Mach support.
+
+Tue May 6 13:21:19 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ From Sean McNeil <sean@mcneil.com>:
+ * emultempl/pe.em (sort_by_file_name): Sort by archive name
+ first.
+ (sort_sections): Sort all sections, not just sections in the same
+ archive.
+
+Mon May 5 18:19:55 1997 Philip Blundell <pjb27@cam.ac.uk>
+
+ * configure.tgt, configure.host: cope with '*-*-linux-gnuaout'
+ targets.
+
+Fri May 2 15:54:28 1997 Mike Meissner <meissner@cygnus.com>
+
+ * scripttempl/tic80coff.sc (.text): Add a leading underscore to
+ __{D,C}TOR_{LIST,END}__ definations. Rearrange the order of items
+ in the .text section. Move .const, .ctors, .dtors into separate
+ sections.
+
+Wed Apr 30 12:23:21 1997 Manfred Hollstein <manfred@s-direktnet.de>
+
+ * scripttempl/m88kbcs.sc (__.initp.end, _etext): Added whitespace
+ around assignment of current location pointer.
+
+Thu Apr 17 13:07:18 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldctor.c (ldctor_build_sets): Make sure the set is aligned
+ appropriately.
+
+Tue Apr 15 13:19:26 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.in (INSTALL): Set to @INSTALL@.
+ (INSTALL_XFORM, INSTALL_XFORM1): Remove.
+ (install): Depend upon ld.new and installdirs. Use
+ $(program_transform_name) directly, rather than using
+ $(INSTALL_XFORM) and $(INSTALL_XFORM1).
+ (installdirs): New target.
+ (install-info): Run mkinstalldirs.
+
+Mon Apr 14 12:06:15 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.in (INSTALL): Change install.sh to install-sh.
+
+ From Thomas Graichen <graichen@rzpd.de>:
+ * configure.in: Use ${CONFIG_SHELL} when running $ac_config_sub.
+ * configure: Rebuild.
+
+Fri Apr 4 11:42:41 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/pe.em: Include "libiberty.h".
+ (sort_sections_1): Use xmalloc rather than alloca.
+
+ * ldlex.l: Recognize SQUAD.
+ * ldgram.y (length): Add SQUAD.
+ * ldctor.c (ldctor_build_sets): Use SQUAD for a signed 8 byte
+ reloc.
+ * ldlang.c (print_data_statement): Handle SQUAD.
+ (lang_size_sections, lang_do_assignments): Likewise.
+ * ldexp.c (exp_print_token): Add SQUAD to table.
+ * ldwrite.c (build_link_order): Handle SQUAD.
+ * ld.texinfo (Section Data Expressions): Document SQUAD.
+
+Thu Apr 3 13:19:40 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldver.c (ld_program_version): Set to 2.8.1.
+
+ * Branched binutils 2.8.
+
+Wed Apr 2 11:55:27 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * mpw-idtmips.c: Rename from mpw-emipsidt.c.
+ * mpw-elfmips.c: Rename from mpw-emipself.c.
+ * mpw-config.in: Update accordingly.
+
+ * ldlang.c (lang_process): Call lang_check immediately after
+ opening the input files, rather than at the end of the link.
+
+Mon Mar 31 23:44:00 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/pe.em (init): Fully bracket initializer.
+ (set_pe_stack_heap): Remove locals begin_commit and end.
+ (gld_${EMULATION_NAME}_after_open): Remove unused local i.
+ (gld${EMULATION_NAME}_place_orphan): Remove unused local ptr.
+
+Mon Mar 31 16:35:51 1997 Joel Sherrill <joel@oarcorp.com>
+
+ * configure.tgt (hppa*-*-rtems*): New target, like hppa-*-*elf*.
+
+Fri Mar 28 15:29:23 1997 H.J. Lu <hjl@gnu.ai.mit.edu>
+
+ Contributed by David S. Miller <davem@caip.rutgers.edu>:
+ * configure.tgt (sparc*-*-linuxaout*): New target.
+ (sparc*-*-linux*): New target.
+ * emulparams/sparclinux.sh: New file.
+ * Makefile.in (ALL_EMULATIONS): Add esparclinux.o.
+ (esparclinux.c): New target.
+
+Fri Mar 28 14:30:12 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ From Ralf Baechle <ralf@gnu.ai.mit.edu>:
+ * configure.tgt: Set targ_extra_emuls for mips*el-*-linux* and
+ mips*-*-linux*. Use elf32bmip and elf32lmip, not elf32ebmip and
+ elf32elmip.
+
+Thu Mar 27 17:14:32 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * lexsup.c (parse_args): Update copyright date in version
+ message.
+
+Fri Mar 21 12:28:41 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
+
+ * emulparams/delta68.sh (OUTPUT_FORMAT): Set to "coff-m68k-sysv".
+
+Tue Mar 18 11:16:23 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.in: Rebuild dependencies.
+
+ * emultempl/aix.em: Include "obstack.h".
+
+Mon Mar 17 19:26:06 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlang.c: Include "obstack.h".
+
+Sat Mar 15 23:23:46 1997 Fred Fish <fnf@cygnus.com>
+
+ * configure.tgt (powerpc-*-beos*): Use aixppc for targ_emul.
+
+Sat Mar 15 18:10:38 1997 H.J. Lu <hjl@lucon.org>
+
+ * ldemul.h (ldemul_list_emulations): Use full prototype.
+ * ldlang.c (print_one_symbol): Add declaration.
+ * ldlang.h (dprint_statements): Declare.
+ * ldmain.c (remove_output): Declare.
+ * ldmisc.c (vfinfo): Declare.
+ * ldwrite.c (clone_section): Declare.
+ (split_sections): Make static. Declare.
+ * mri.c: Include libiberty.h.
+ (strdup): Don't declare.
+ (mri_alias): Use xstrdup rather than strdup.
+
+Fri Mar 14 21:30:06 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * scripttempl/elfmips.sc: Change handling of data area when
+ generating a shared library to not skip a large block of memory.
+ From Per Fogelstrom <pefo@cvs.openbsd.org>.
+
+Wed Mar 12 21:33:09 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldmain.c (multiple_definition): Only skip the warning if the
+ output section is absolute when the input section is not
+ absolute.
+
+ * ldlex.l: Accept whitespace in VERS_START state. Warn about
+ invalid characters in VERS_* states.
+
+Tue Mar 11 13:51:31 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/aix.em (gld${EMULATION_NAME}_read_file): Don't let a
+ trailing space lead us to think that there is a zero address.
+
+Sun Mar 9 23:06:35 1997 Eric Youngdale <eric@andante.jic.com>
+
+ * ldgram.y (vers_node): Correct typo of '(' for '{'.
+
+Fri Mar 7 18:40:12 1997 Fred Fish <fnf@cygnus.com>
+
+ * scripttempl/tic80coff.sc (ENTRY): Entry symbol is __start
+ rather than _start.
+ (__edata): Define this rather than "edata".
+ (__end): Define this rather than "end".
+
+Tue Mar 4 17:18:35 1997 Michael Meissner <meissner@cygnus.com>
+
+ * configure.tgt (tic80-*-*): Allow dropping of -coff.
+
+Sun Mar 2 22:59:49 1997 Fred Fish <fnf@cygnus.com>
+
+ * Makefile.in (ld.dvi): Set MAKEINFO environment variable as well
+ as TEXINPUTS. Needed for building in separate build dir.
+ * ldint.texinfo (SCRIPT_NAME): Fix typo.
+ * emulparams/tic80coff.sh: Rewrite to include internal documentation
+ about each shell variable that is set (or not set).
+ * scripttempl/tic80coff.sc: Complete rewrite.
+
+Fri Feb 28 17:42:27 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldmain.c (main): Call bfd_set_default_target.
+ * Makefile.in (ldmain.o): Define TARGET when compiling.
+
+Thu Feb 27 11:41:03 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldmain.c (main): Don't initialize link_info.lprefix or
+ link_info.lprefix_len.
+ * emultempl/hppaelf.em (hppaelf_before_parse): Likewise.
+
+ * emultempl/m88kbcs.em: Remove.
+ * emulparams/m88kbcs.sh (TEMPLATE_NAME): Don't set.
+ * Makefile.in (em88kbcs.c): Depend upon generic.em rather than
+ m88kbcs.em.
+
+ * mri.c (mri_draw_tree): Pass noload_section, not SEC_NEVER_LOAD,
+ to lang_enter_output_section_statement. From Mark Rasin
+ <mark.rasin@telrad.co.il>.
+
+Wed Feb 26 11:51:44 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlang.c (lang_one_common): Clear SEC_IS_COMMON from common
+ section.
+
+Tue Feb 25 20:38:11 1997 Stan Shebs <shebs@andros.cygnus.com>
+
+ * configure.tgt (mips*-*-lnews*): New target.
+ * Makefile.in (emipslnews.c): New target.
+ * emulparams/mipslnews.sh: New file.
+
+Tue Feb 25 16:04:09 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/elf32.em (hold_interp): New static variable.
+ (gld${EMULATION_NAME}_place_orphan): Put loadable .note sections
+ after hold_interp. Choose a unique output section name.
+ (gld${EMULATION_NAME}_place_section): Don't set hold_use if the
+ SEC_LOAD or SEC_ALLOC flags differ. Set hold_interp.
+
+Mon Feb 24 18:16:09 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ From Eric Youngdale <eric@andante.jic.com>:
+ * ldlex.l (V_TAG, V_IDENTIFIER): New macros.
+ (VERS_START, VERS_SCRIPT, VERS_NODE): New states to parse version
+ information.
+ (ldlex_version_script, ldlex_version_file): New functions.
+ * ldlex.h (enum input_enum): Add input_version_script.
+ (ldlex_version_script): Declare.
+ (ldlex_version_file): Declare.
+ * ldgram.y (%union): Add deflist, versyms, and versnode.
+ (VERS_TAG, VERS_IDENTIFIER): New terminals.
+ (GLOBAL, LOCAL, VERSION, INPUT_VERSION_SCRIPT): New terminals.
+ (file): Accept INPUT_VERSION_SCRIPT.
+ (ifile_p1): Accept version.
+ (version_script_file): New nonterminal.
+ (version, vers_nodes, vers_node): Likewise.
+ (verdep, vers_tag, ver_defns): Likewise.
+ * ldlang.c (lang_elf_version_info): New global variable.
+ (lang_new_vers_regex): New function.
+ (lang_new_vers_node): New function.
+ (version_index): New static variable.
+ (lang_register_vers_node): New function.
+ (lang_add_vers_depend): New function.
+ * ldlang.h (lang_elf_version_info): Declare.
+ (lang_new_vers_regex, lang_new_vers_node): Declare.
+ (lang_add_vers_depend, lang_register_vers_node): Declare.
+ * lexsup.c (OPTION_VERSION_SCRIPT): Define.
+ (ld_options): Add "version-script".
+ (parse_args): Handle OPTION_VERSION_SCRIPT.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation):
+ Pass lang_elf_version_info to size_dynamic_sections.
+ * scripttempl/elf.sc: Add .gnu.version sections.
+ * ld.texinfo: Document symbol versioning.
+
+Fri Feb 21 17:37:51 1997 Martin M. Hunt <hunt@pizza.cygnus.com>
+
+ * Makefile.in (ed30velf.c): New target.
+ * configure.tgt (d30v-*-*): New target.
+ * emulparams/d30velf.sh: New file.
+ * scripttempl/elfd30v.sc: New file.
+
+Fri Feb 14 18:28:31 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld.texinfo (Option Commands): Document the INCLUDE command.
+
+Thu Feb 13 20:31:37 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
+
+ * configure.in: Call BFD_NEED_DECLARATION on getenv.
+ * acconfig.h (NEED_DECLARATION_GETENV): New macro.
+ * sysdep.h (getenv): Declare if NEED_DECLARATION_GETENV.
+ * ldemul.c (ld_emul_default_target): Do not cast getenv return
+ value.
+ * ldmain.c (get_emulation): Likewise.
+ * configure, config.in: Rebuild.
+
+Tue Feb 11 15:34:26 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * scripttempl/elfmips.sc: When relocating, put .mips16.fn.* and
+ .mips16.call.* in .text.
+
+Sun Feb 9 18:09:13 1997 Fred Fish <fnf@cygnus.com>
+
+ * emulparams/tic80coff.sh: New (dummy) file for TIc80.
+ * scripttempl/tic80coff.sc: New (dummy) file for TIc80.
+ * Makefile.in (etic80coff.c): Add target and rule to build it.
+ * configure.tgt (tic80-*-coff): Set targ_emul to tic80coff.
+
+Fri Jan 31 13:16:53 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/sunos.em (gld${EMULATION_NAME}_find_so): Search for
+ ".so" in the name, not ".so.".
+ (gld${EMULATION_NAME}_search_dir): Accept a plain .so file.
+
+ * Makefile.in (ld.info): Add -I$(srcdir). From Alan Modra
+ <alan@spri.levels.unisa.edu.au>.
+
+Thu Jan 30 11:31:52 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/sunos.em: Include <ctype.h>.
+ (gld${EMULATION_NAME}_find_so): Skip the directory name when
+ searching for ".so.".
+ (gld${EMULATION_NAME}_search_dir): Make sure that the library name
+ has a version number, and that only version numbers follow .so.
+
+Wed Jan 29 18:15:00 1997 Geoffrey Noer <noer@cygnus.com>
+
+ * scripttempl/pe.sc:
+ * scripttempl/ppcpe.sc: add *(.gcc_except_table) to the text
+ section so Win32 executables are valid.
+
+Mon Jan 27 12:28:43 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * scripttempl/elf.sc: Put linkonce reloc section in other
+ appropriate reloc sections.
+ * scripttempl/elfmips.sc: Add linkonce support.
+ * scripttempl/elfppc.sc: Likewise.
+
+Fri Jan 24 10:44:09 1997 Jeffrey A Law (law@cygnus.com)
+
+ * emulparms/mn10200.sh (OTHER_RELOCATING_SECTIONS): Move the
+ stack up to 0x80000.
+ * emulparms/mn10300.sh (OTHER_RELOCATING_SECTIONS): Likewise.
+
+Tue Jan 21 12:11:10 1997 Doug Evans <dje@seba.cygnus.com>
+
+ * emulparams/m32relf.sh (OTHER_RELOCATING_SECTIONS): Use PROVIDE
+ to define `_stack'.
+
+Thu Jan 16 17:07:52 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld.h (args_type): Rename auxiliary_filter_shlib to
+ auxiliary_filters, and make it char **.
+ * lexsup.c (parse_args): Handle -f by setting up an array.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): Use
+ new name of auxiliary_filters.
+
+ * ld.texinfo (Options): Improve documentation of --filter and
+ --auxiliary.
+
+Tue Jan 14 15:44:28 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld.texinfo (Options): Clarify that the normal usage is -T.
+ (Commands): Likewise.
+
+Thu Jan 9 11:26:27 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * scripttempl/armcoff.sc: Correct mask used for .data address.
+
+Wed Jan 8 15:14:59 1997 Geoffrey Noer <noer@cygnus.com>
+
+ * emultempl/pe.em: make default executable a.exe instead of
+ a.out
+
+Fri Jan 3 17:33:34 1997 Richard Henderson <rth@tamu.edu>
+
+ * scripttempl/elf.sc: Move .got closer to .sdata and .sbss by
+ shifting .plt back. Rumour has it that the NetBSD ld.so depends
+ on .dynamic being after .got, so we leave that.
+
+Fri Jan 3 14:04:40 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.in (clean): Don't remove configdoc.texi.
+ (maintainer-clean): Do remove configdoc.texi.
+
+ * ld.texinfo (Operators): Remove '@' from @smallexmple in comment
+ to avoid confusing texi2roff.
+
+Fri Jan 3 11:27:02 1997 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * scripttempl/v850.sc (.zdata): Add .zcommon section.
+ (.tdata): Add .tcommon and .tcommon_byte sections.
+
+Thu Jan 2 18:14:32 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.tgt (mips*el-*-linux*, mips*-*-linux*): New targets.
+ * scripttempl/elfmips.sc: Use __start as the entry address for
+ mips*-*-linux*.
+
+Tue Dec 31 14:48:30 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.in (ALL_CFLAGS): Add -D_GNU_SOURCE.
+
+ * ld.h (args_type): Add filter_shlib and auxiliary_filter_shlib
+ fields.
+ * lexsup.c (parse_args): Recognize --auxiliary/-f and
+ --filter/-F.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation):
+ Pass filter_shlib and auxiliary_filter_shlib to
+ size_dynamic_sections.
+ * ld.texinfo, ld.1: Document --filter/-F and --auxiliary/-f.
+
+Mon Dec 30 13:55:57 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * scripttempl/v850.sc (.tdata) Add .tbss and .tbyte sections.
+
+Wed Dec 18 22:57:35 1996 Stan Shebs <shebs@andros.cygnus.com>
+
+ * mpw-make.sed: Use NewFolderRecursive for installation.
+
+Fri Dec 13 14:08:50 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * scripttempl/v850.sc: Make sure __{e,g}p start relative to the
+ {s,t}data sections. Do not emit any linker generated symbols if
+ -r. Use {TEXT,{Z,S,T}DATA}_START_ADDR variables to initialize
+ where the different sections go. Change some whitespace.
+
+ * emulparams/v850.sh ({TEXT,{Z,S,T}DATA}_START_ADDR): Define
+ appropriately. Remove crud not used anymore.
+
+Fri Dec 13 10:19:57 1996 Jeffrey A Law (law@cygnus.com)
+
+ * Makefile.in (emn10200.c): Add dependencies.
+ * configure.tgt: Handle mn10200.
+ * emulparms/mn10200.sh: New file.
+
+Thu Dec 12 17:04:55 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/gld960c.em: Include <ctype.h>.
+ (gld960_set_output_arch): Get the machine type from the -A option
+ if there is one, rather than always using core.
+
+Sat Dec 7 10:07:51 1996 Jeffrey A Law (law@cygnus.com)
+
+ * emulparms/mn10300.sh: Handle leading underscores.
+
+Thu Dec 5 13:45:58 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_section): Only
+ set hold_rel if SEC_ALLOC is set.
+
+Tue Dec 3 11:29:20 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlang.c (section_already_linked): Set the output_offset as well
+ as the output_section when only reading symbols from a file.
+
+Mon Dec 2 11:43:50 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * emulparams/*.sh: Make sure that each set of parameters which
+ uses the elf.sc script sets MACHINE.
+
+Wed Nov 27 03:22:05 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * scripttempl/elf{,mips,ppc}.sc: Add the remaining DWARF sections.
+ * scripttempl/elfd10v.sc: Likewise.
+ * scripttempl/v850.sc: Likewise.
+
+Tue Nov 26 16:58:33 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure: Rebuild with autoconf 2.12.
+
+Mon Nov 25 12:17:55 1996 Jim Wilson <wilson@cygnus.com>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_set_symbols): Add case
+ for bfd_vma to init loop.
+
+Mon Nov 25 09:55:07 1996 Jeffrey A Law (law@cygnus.com)
+
+ * emulparms/mn10300.sh: Remove bogus '_' prefix for
+ entry symbol and ctor/dtor stuff.
+
+Fri Nov 15 13:00:18 1996 Jeffrey A Law (law@cygnus.com)
+
+ * Makefile.in (emn10300.c): Add dependencies.
+ * configure.tgt: Handle mn10300.
+ * emulparms/mn10300.sh: New file.
+
+Tue Nov 5 10:57:50 1996 Martin M. Hunt <hunt@pizza.cygnus.com>
+
+ * emulparams/d10velf.sh (READONLY_START_ADDR): Changed to 0x2000004.
+ (EMBEDDED): Define.
+
+Fri Nov 1 10:01:27 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld.texinfo: Add section on reporting bugs.
+
+ * scripttempl/m68kcoff.sc: Make sure the etext and __CTOR_LIST__
+ symbols are correctly aligned.
+
+Thu Oct 31 09:28:59 1996 Jeffrey A Law (law@cygnus.com)
+
+ * scripttempl/v850.sc (zdata): Handle reszdata, romzdata and
+ romzbss too.
+
+Tue Oct 29 12:33:05 1996 Martin M. Hunt <hunt@pizza.cygnus.com>
+
+ * emulparams/d10velf.sh: Changes needed for D10V-EVA board.
+ Set TEXT_START_ADDR to 0x1000000. Set READONLY_START_ADDR to
+ 0x2000000.
+
+ * scripttempl/elfd10v.sc: Fix calculation of .text. Change
+ .stack to start at 0x2007ffe.
+
+Mon Oct 28 15:37:00 1996 Doug Evans <dje@canuck.cygnus.com>
+
+ * configure.tgt (sparclet*-*-aout*): Delete, use sparc*-*-aout*.
+
+Wed Oct 23 16:17:22 1996 Jeffrey A Law (law@cygnus.com)
+
+ * scripttempl/v850.sc (zdata): Fix typo "zrodata" -> "rozdata".
+
+ * scripttempl/v850.sc (zdata): Make sure this stays
+ in lo-memory.
+
+Tue Oct 22 11:36:47 1996 Jeffrey A Law (law@cygnus.com)
+
+ * scripttempl/v850.sc (__ep): Put it at the start
+ of the tda section.
+
+ * scripttempl/v850.sc: Move all "normal" sections into
+ the external memory region (0x100000 - 0x200000).
+
+Mon Oct 21 17:16:59 1996 Michael Meissner <meissner@wogglebug.tiac.net>
+
+ * scripttempl/elfd10v.sc: Clone from elf.sc, move .text to
+ 0x10000, so that is more room for data.
+
+ * emulparams/d10velf.sh (TEXT_START_ADDR): Now 0x100000.
+ (READONLY_START_ADDR): Now 0x0.
+ (SCRIPT_NAME): Now elfd10v.
+
+ * Makefile.in (ed10velf.c): Depend on elfd10v.sc, not elf.sc.
+
+Fri Oct 18 22:12:49 1996 Doug Evans <dje@canuck.cygnus.com>
+
+ * emulparams/m32relf.sh (TEXT_START_ADDR): Change from 0 to 0x100.
+
+Fri Oct 18 15:43:38 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.in (ALL_EMULATIONS): Remove eelf64alpha.o.
+ (ALL_64_EMULATIONS): New variable.
+ * configure.in: Accept --enable-64-bit-bfd option. If it is set
+ with --enable-targets=all, include ALL_64_EMULATIONS in
+ EMULATION_OFILES.
+ * configure: Rebuild.
+
+Fri Oct 18 12:58:35 1996 Jeffrey A Law (law@cygnus.com)
+
+ * scripttempl/v850.sc (__gp, __ep): Define.
+
+Thu Oct 17 18:14:07 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld.texinfo: Try to consistently use a single or a double dash
+ for each option.
+
+Thu Oct 17 10:17:20 1996 Doug Evans <dje@canuck.cygnus.com>
+
+ * emulparams/m32relf.sh (EMBEDDED): Define.
+
+Thu Oct 17 10:56:49 1996 Jeffrey A Law (law@cygnus.com)
+
+ * scripttempl/v850.sc (.zdata): Add this before .text.
+ (.sdata): Also include .rosdata as part of the .sdata.
+ (.tdata): Include this just before .sdata.
+
+ * emulparms/v850.sh (SCRIPT_NAME): Use "v850" not "elf".
+ * scripttempl/v850.sc: Wrap script with a "cat << EOF".
+
+Wed Oct 16 23:10:01 1996 Jeffrey A Law (law@cygnus.com)
+
+ * scripttempl/v850.sc: New linker script for the V850.
+ * Makefile.in: Use it.
+
+Thu Oct 10 17:57:00 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * emulparams/elf32b4300.sh: Define _gp in OTHER_GOT_SYMBOLS, not
+ OTHER_READWRITE_SECTIONS.
+ * emulparams/elf32l4300.sh: Likewise.
+
+Wed Oct 9 14:36:18 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld.h (ld_config_type): Add warn_section_align field.
+ * lexsup.c (OPTION_WARN_SECTION_ALIGN): Define.
+ (ld_options): Add --warn-section-align.
+ (parse_args): Handle --warn-section-align.
+ * ldlang.c (lang_size_sections): If warn_section_align, warn if
+ the start of a section changes due to alignment.
+ * ld.texinfo, ld.1: Document --warn-section-align.
+ * ld.texinfo: Change some single dashes to double dashes.
+
+ * emultempl/pe.em (set_pe_subsystem): Record entry symbol for each
+ subsystem type. Ifdef out os2 type. Recognize a version number.
+
+Tue Oct 8 12:07:13 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/pe.em (set_pe_subsystem): When setting the subsystem
+ to windows, set the entry point.
+
+ * Makefile.in (ldlex.c): Don't pass any options to $(LEX).
+
+Mon Oct 7 17:29:05 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld.texinfo (Options): Mention .so extensions for shared
+ libraries.
+
+Sun Oct 6 22:35:36 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * scripttempl/elf{,mips,ppc}.sc: Add DWARF 2 sections.
+
+Fri Oct 4 18:49:31 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * scripttempl/m68kcoff.sc: Only set the address of .text if
+ RELOCATING.
+
+Fri Oct 4 10:59:52 1996 Doug Evans <dje@canuck.cygnus.com>
+
+ * emulparams/sparcaout.sh ({BIG,LITTLE}_OUTPUT_FORMAT): Define.
+ * scripttempl/aout.sc ({BIG,LITTLE}_OUTPUT_FORMAT): Provide default.
+ (OUTPUT_FORMAT): Support bi-endian targets.
+
+Thu Oct 3 13:52:03 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * fnmatch.h, fnmatch.c: Remove (now in libiberty).
+ * Makefile.in: Rebuild dependencies.
+ (CFILES): Remove fnmatch.c.
+ (HFILES): Remove fnmatch.h.
+ (OFILES): Remove fnmatch.o.
+
+Thu Oct 3 15:41:24 1996 Jason Molenda (crash@godzilla.cygnus.co.jp)
+
+ * Makefile.in (mostlyclean): Move config.log to distclean.
+
+Wed Oct 2 23:45:25 1996 Geoffrey Noer <noer@cygnus.com>
+
+ * emultempl/pe.em: increase size of stack reserve to 0x2000000
+ (necessary in order to compile parse.c in gcc sources under NT)
+
+Wed Oct 2 14:49:10 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * lexsup.c (ld_options): Fix typo in --rpath-link description.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_after_open): Suggest
+ --rpath if a needed library is not found.
+
+Tue Oct 1 16:17:33 1996 Joel Sherrill <joel@oarcorp.com>
+
+ * configure.tgt (mips*-*-rtems*): New target, like mips*-*-elf*.
+
+Tue Oct 1 15:50:34 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld.texinfo (Options): Give more detail on -l option.
+
+ * scripttempl/elfmips.sc: Handle CREATE_SHLIB the same way that
+ elf.sc does, so that glibc works better.
+
+ * ldver.c (ld_program_version): New variable.
+ (ldversion): Use it.
+ * ldver.h (ld_program_version): Declare.
+ * lexsup.c (ld_options): Handle --dll-verbose like --verbose, not
+ --version. Change --version handling to match current GNU
+ standards.
+ (help): Print bug report address.
+
+Mon Sep 30 12:14:43 1996 Doug Evans <dje@canuck.cygnus.com>
+
+ * Makefile.in (em32relf.c): Add rule for.
+ * configure.tgt (m32r-*-*): Recognize.
+ * emulparams/m32relf.sh: New file.
+
+Thu Sep 26 13:58:47 1996 Stan Shebs <shebs@andros.cygnus.com>
+
+ * mpw-make.sed: Add symbolic doublequoting to ldmain compile edit.
+ * mpw-config.in: Add mips-*-* case as mips-elf, and use more
+ wildcards in matching.
+ * mpw-emipself.c: New file, pregenerated mips elf emulation.
+
+Tue Sep 17 12:18:21 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldint.texinfo: Rewrote.
+
+ * configure.tgt: Add cases for MIPS 5000 like MIPS 4300.
+
+Mon Sep 16 17:55:21 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * scripttempl/armcoff.sc: Only define symbols if RELOCATING. Fix
+ syntax error on __end__ line.
+
+ * scripttempl/armcoff.sc: For -N or -n, don't align .data. From
+ Chris Hadley <Christopher.Hadley@cl.cam.ac.uk>
+
+Sun Sep 15 22:09:56 1996 Jeffrey A Law (law@cygnus.com)
+
+ * emulparms/v850.sh: Fix OTHER_RELOCATING_SECTIONS.
+
+Sun Sep 15 10:38:16 1996 Mark Alexander <marka@cygnus.com>
+
+ * emulparms/d10v.sh: Set OTHER_RELOCATING_SECTIONS to put
+ stack at top of simulator memory.
+
+Fri Sep 13 15:49:45 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlex.l (SYMBOLCHARN): Add $, _, and ~.
+
+Wed Sep 11 23:30:42 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldmain.c (get_emulation): Check for -mips4 like -mips1, et. al.
+
+Thu Sep 5 15:24:12 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlang.c (section_already_linked): Accept a lang_input_statement
+ as the PTR argument. If the file is symbols only, discard all
+ input sections.
+ (ldlang_add_file): Pass entry to bfd_map_over_sections.
+
+Wed Sep 4 15:53:43 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.tgt (alpha-*-gnu*): New target. From Fila Kolodny
+ <fila@ibi.com>.
+
+Tue Sep 3 00:52:54 1996 Jeffrey A Law (law@cygnus.com)
+
+ * emulparms/v850.sh: Set OTHER_RELOCATING_SECTIONS
+
+Sun Sep 1 21:48:58 1996 Jeffrey A Law (law@cygnus.com)
+
+ * emulparms/v850.sh: Set EMBEDDED.
+
+Fri Aug 30 22:30:30 1996 Jeffrey A Law (law@cygnus.com)
+
+ * emulparms/v850.sh: Entry symbol is "_start", tweak
+ ctor/dtor support.
+
+Fri Aug 30 18:32:31 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.tgt (sh-*-elf*): New target.
+ * emulparams/shelf.sh: New file.
+ * emulparams/shlelf.sh: New file.
+ * Makefile.in (ALL_EMULATIONS): Add eshelf.o and eshlelf.o.
+ (eshelf.c, eshlelf.c): New targets.
+ * scripttempl/elf.sc: If EMBEDDED is defined, then don't add
+ SIZEOF_HEADERS to TEXT_START_ADDR. Expand CTOR_START and CTOR_END
+ around .ctors, and DTOR_START and DTOR_END around .dtors. Expand
+ OTHER_RELOCATING_SECTIONS if RELOCATING.
+
+Thu Aug 29 16:57:46 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * configure.{host,tgt} (i[345]86-*-*): Recognize i686 for pentium
+ pro.
+
+Mon Aug 26 12:58:11 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldgram.y (section): Add opt_nocrossrefs; pass value to
+ lang_enter_overlay.
+ (opt_nocrossrefs): New nonterminal.
+ * ldlex.l: Recognize NOCROSSREFS keyword in EXPRESSION mode.
+ * ldlang.c (overlay_nocrossrefs): New static variable.
+ (lang_enter_overlay): Add nocrossrefs parameter.
+ (lang_leave_overlay): Only add nocrossrefs if overlay_nocrossrefs
+ is set. Initialize overlay_nocrossrefs.
+ * ldlang.h (lang_enter_overlay): Update declaration.
+ * ld.texinfo (Overlays): Update documentation.
+
+ * ldver.c (ldversion): Print GNU ld in the version message.
+
+Thu Aug 22 17:10:40 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.host: Set HLDENV.
+ * configure.in: Substitute HLDENV.
+ * configure: Rebuild.
+ * Makefile.in (HLDENV): New variable.
+ ($(LD_PROG)): Use $(HLDENV).
+
+Thu Aug 22 16:29:28 1996 Jeffrey A Law (law@cygnus.com)
+
+ * Makefile.in (ev850.c): New target.
+ * configure.tgt (v850-*-*): New target.
+ * emulparams/v850.sh: New file.
+
+Thu Aug 22 11:16:02 1996 Stan Shebs <shebs@andros.cygnus.com>
+
+ * mpw-make.sed: Add @DASH_C_FLAG@ to compiler edit.
+
+Wed Aug 21 11:26:37 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * scripttempl/elf.sc: Put .gnu.linkonce* sections in appropriate
+ containing sections.
+
+Mon Aug 19 13:01:42 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * fnmatch.c: Include sysdep.h.
+
+Mon Aug 19 11:28:29 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * genscripts.sh: Undo 8/16 change.
+
+ * emulparams/d10velf.sh (MACHINE): Explicitly set to nothing.
+
+Fri Aug 16 19:18:08 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * genscripts.sh: Explicitly reset any shell variables set or used
+ by the various .sc scripts to allow inadvertant use of these
+ names as normal environment variables by the person running
+ configure.
+
+ * Makefile.in (ed10velf.c): Use tdir_d10v, not tdir_arcelf.
+
+Fri Aug 16 14:15:41 1996 James G. Smith <jsmith@cygnus.co.uk>
+
+ * scripttempl/armcoff.sc (__bss_start__, __bss_end__,
+ __data_start__, __data_end__): Added to keep in sync. with the
+ default ARM crt0.s. Added __CTOR_LIST__ and __DTOR_LIST__ support.
+
+Thu Aug 8 14:24:56 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldcref.c (check_reloc_refs): If info->same, look for any symbol
+ defined in info->defsec, not just the section symbol.
+
+Wed Aug 7 14:40:48 1996 Philippe De Muyter <phdm@info.ucl.ac.be>
+
+ * configure.in: Call BFD_NEED_DECLARATION on strstr and sbrk.
+ * acconfig.h (NEED_DECLARATION_STRSTR): New macro.
+ (NEED_DECLARATION_SBRK): New macro.
+ * configure, config.in: Rebuild.
+ * sysdep.h (strstr): Declare if NEED_DECLARATION_STRSTR.
+ * ldmain.c (sbrk): Declare if HAVE_SBRK and
+ NEED_DECLARATION_SBRK.
+
+ * ldlang.c (lang_record_phdrs): Cast xmalloc and xrealloc return.
+
+Mon Aug 5 16:26:14 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlex.l: Recognize OVERLAY.
+ * ldgram.y: Add section_phdr field to %union.
+ (section): Handle phdr_opt result. Add OVERLAY case.
+ (opt_exp_without_type): New nonterminal.
+ (phdr_opt): Return list of phdrs.
+ (overlay_section): New nonterminal.
+ * ldlang.c: Include <ctype.h>.
+ (lang_leave_output_section_statement): Add phdrs parameter.
+ Change all callers.
+ (lang_section_in_phdr): Remove.
+ (overlay_vma, overlay_lmn, overlay_max): New static variables.
+ (struct overlay_list): Define.
+ (overlay_list): New static variable.
+ (lang_enter_overlay, lang_enter_overlay_section): New functions.
+ (lang_leave_overlay_section, lang_leave_overlay): New functions.
+ * ldlang.h (lang_leave_output_section_statement): Update
+ declaration for new parameter.
+ (lang_section_in_phdr): Don't declare.
+ (lang_enter_overlay, lang_enter_overlay_section): Declare.
+ (lang_leave_overlay_section, lang_leave_overlay): Declare.
+ * ld.texinfo (Overlays): New node under SECTIONS, documenting
+ overlays.
+
+ * ldlex.l: Recognize MAX and MIN.
+ * ldgram.y (MAX, MIN): New terminals.
+ (exp): Recognize MAX and MIN.
+ * ldexp.c (fold_binary): Handle MAX and MIN.
+ * ld.texinfo (Arithmetic Functions): Document MAX and MIN.
+
+ * ld.texinfo (PHDRS): Use @cindex, not @kindex, for program header
+ index entries.
+
+ * ldgram.y (SIZEOF, ADDR): Do not specify type.
+
+ * ldcref.c (check_nocrossref): Skip symbols with no output
+ sections.
+
+Fri Aug 2 14:57:49 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldgram.y (LOADADDR): New terminal.
+ (exp): Handle LOADADDR.
+ * ldlex.l: Recognize LOADADDR.
+ * ldexp.c (exp_print_token): Add LOADADDR.
+ (fold_name): Implement LOADADDR.
+ * ldlang.c (exp_init_os): Treat LOADADDR like ADDR.
+ * ld.texinfo (Arithmetic Functions): Document LOADADDR.
+
+Thu Aug 1 12:52:19 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld.h (check_nocrossrefs): Declare.
+ * ldlang.h (struct lang_nocrossref): Define.
+ (struct lang_nocrossrefs): Define.
+ (nocrossref_list): Declare.
+ (lang_add_nocrossref): Declare.
+ * ldlex.l: Recognize NOCROSSREFS keyword.
+ * ldgram.y (%union): Add nocrossref field.
+ (NOCROSSREFS): New terminal.
+ (ifile_p1): Recognize NOCROSSREFS.
+ (nocrossref_list): New nonterminal.
+ * ldlang.c (nocrossref_list): Define.
+ (lang_add_nocrossref): New function.
+ * ldmain.c (main): If nocrossref_list is not NULL, call
+ check_nocrossrefs.
+ (warning_callback): Free symbols if there is no place to store
+ them.
+ (notice): Call add_cref if nocrossref_list is not NULL.
+ * ldcref.c: Include "ldexp.h" and "ldlang.h".
+ (check_nocrossrefs): New function.
+ (check_nocrossref): New static function.
+ (struct check_refs_info): Define.
+ (check_refs, check_reloc_refs): New static functions.
+ * Makefile.in: Rebuild dependencies.
+ * ld.texinfo (Option Commands): Document NOCROSSREFS.
+
+ * ld.texinfo (Section Placement): Improve the wording of the
+ wildcard documentation. Mention that wildcards are only searched
+ for on the command line, not in the file system.
+
+ * emultempl/sunos.em (gld${EMULATION_NAME}_after_open): Move
+ definition of lib_path inside condition where it is used.
+
+Wed Jul 31 13:17:10 1996 Martin M. Hunt <hunt@pizza.cygnus.com>
+
+ * emulparams/d10velf.sh: Now works with elf.sc.
+
+Wed Jul 31 11:52:03 1996 Martin M. Hunt <hunt@pizza.cygnus.com>
+
+ * emulparams/d10velf.sh (SCRIPT_NAME): Change to vanilla.
+
+Tue Jul 30 14:46:42 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlang.c (lang_size_sections): Add the section VMA to the result
+ value when computing the address of a section.
+
+ * ld.h (args_type): Add cref field.
+ * lexsup.c (parse_args): Set command_line.cref.
+ * ldmain.c (main): Check command_line.cref rather than
+ link_info.notice_all.
+ (notice): Likewise.
+
+ * ldcref.c (output_one_cref): Don't crash if a symbol is defined
+ in a section without an owner.
+
+Mon Jul 29 17:23:33 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * fnmatch.h, fnmatch.c: New files.
+ * ldlex.l: Remove unused definition of FILENAME. Add definition
+ of WILDCHAR. In SCRIPT mode, accept any sequence of WILDCHAR as a
+ NAME.
+ * ldgram.y (file_NAME_list): Accept '*' and '?' specially.
+ (input_section_spec): Accept '?' specially.
+ (statement): Change exp to mustbe_exp in length and FILL cases.
+ (section): Call ldlex_script before section statements, and call
+ ldlex_popstate after them.
+ * ldlang.c: Include "fnmatch.h".
+ (wildcardp): New static function.
+ (wild_section): Permit the section name to be a wildcard.
+ (wild_file): New static function, broken out of wild.
+ (wild): Call wild_file. Permit the file name to be a wildcard.
+ (open_input_bfds): Don't call lookup_name for a wildcard pattern.
+ * Makefile.in: Rebuild dependencies.
+ (CFILES): Add fnmatch.c.
+ (HFILES): Add fnmatch.h.
+ (OFILES): Add fnmatch.o.
+ * ld.texinfo: Document that file and section names can now be
+ wildcard patterns.
+
+ * ldlang.c (lang_place_orphans): Correct condition: place a common
+ section if not relocateable or if common definitions are forced.
+
+Wed Jul 24 12:16:38 1996 Martin M. Hunt <hunt@pizza.cygnus.com>
+
+ * emulparams/d10velf.sh (SCRIPT_NAME): Change to elf.
+
+Wed Jul 24 13:38:22 1996 Michael Meissner <meissner@wogglebug.tiac.net>
+
+ * configure.tgt (d10v-*-*): Don't require the -elf, allow plain d10v.
+
+Tue Jul 23 10:36:19 1996 Martin M. Hunt <hunt@pizza.cygnus.com>
+
+ * Makefile.in (ed10velf.c): New target.
+ * configure.tgt (d10v-*-elf*): New target.
+ * emulparams/d10velf.sh: New file.
+
+Thu Jul 18 16:25:39 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.tgt (sparc*-*-sysv4*): New target. From Andrew Gierth
+ <ANDREWG@microlise.co.uk>.
+
+ * configure.host: Change irix5 to irix[56]*.
+ * configure.tgt: Likewise.
+
+Wed Jul 17 10:52:46 1996 Kim Knuttila <krk@cygnus.com>
+
+ * emultempl/pe.em (sort_sections): Pay attention to return code.
+
+ * ldmisc.c (demangle): Remove all prefix '.'s from a name.
+
+Mon Jul 15 11:49:49 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Round
+ the value of __start_SECNAME to the alignment required by the
+ section to be placed.
+
+Tue Jul 9 12:09:02 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.tgt (mips*el-*-elf*): Use elf32elmip.
+ (mips*-*-elf*): Use elf32ebmip.
+ * emulparams/elf32bmip.sh (EMBEDDED): Don't define.
+ * emulparams/elf32lmip.sh (EMBEDDED): Don't define.
+ * emulparams/elf32elmip.sh: New file; copy of elf32lmip.sh with
+ EMBEDDED defined.
+ * emulparams/elf32ebmip.sh: New file; copy of elf32bmip.sh with
+ EMBEDDED defined.
+ * emulparams/elf32b4300.sh (EMBEDDED): Define.
+ * emulparams/elf32l4300.sh (EMBEDDED): Define.
+ * Makefile.in (ALL_EMULATIONS): Add eelf32ebmip.o eelf32elmip.o.
+ (eelf32ebmip.c, eelf32elmip.c): New targets.
+
+Thu Jul 4 12:01:03 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldver.c (ldversion): Set version to cygnus-2.7.1.
+
+ * Released binutils 2.7.
+
+ * emulparams/pc532macha.sh: Rename from pc532machaout.sh to avoid
+ System V file name limitations.
+ * configure.tgt (nc32k-pc532-mach*, ns32k-pc532-ux*): Use
+ pc532macha rather than pc532machaout.
+ * Makefile.in (ALL_EMULATIONS): Change epc532machaout.o to
+ epc532macha.o.
+ (epc532macha.c): Rename target from epc532machaout.c.
+
+Wed Jul 3 11:40:10 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlang.c (print_padding_statement): Use %u, not %x, to print
+ fill value.
+
+Sun Jun 30 11:16:43 1996 Stan Shebs <shebs@andros.cygnus.com>
+
+ * mpw-eppcmac.c: Update to reflect May 23 change to aix.em.
+
+Thu Jun 27 14:03:42 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/sunos.em (gld${EMULATION_NAME}_find_so): Put the .sa
+ file just before the .so file, rather than just after.
+
+ * configure.host: Use -print-file-name=FILE rather than piping
+ -print-libgcc-file-name through sed.
+ (i[345]86*-*-sco*, i[345]86-*-isc*): Create crtbegin.o and
+ crtend.o files, in case gcc doesn't use them.
+ * Makefile.in (mostlyclean): Remove crtbegin.o and crtend.o.
+
+Wed Jun 26 15:57:21 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.tgt (mips*-dec-osf*): New target.
+
+Tue Jun 25 22:15:29 1996 Jason Molenda (crash@godzilla.cygnus.co.jp)
+
+ * Makefile.in (bindir, libdir, datadir, mandir, infodir, includedir,
+ INSTALL_PROGRAM, INSTALL_DATA): Use autoconf-set values.
+ (docdir): Removed.
+ * configure.in (AC_PREREQ): autoconf 2.5 or higher.
+ (AC_PROG_INSTALL): Added.
+ * configure: Rebuilt.
+
+Mon Jun 24 18:48:16 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * scripttempl/elfppc.sc (_GLOBAL_OFFSET_TABLE_): Don't do a
+ PROVIDE of _GLOBAL_OFFSET_TABLE_, since it needs to be at a
+ non-fixed location.
+
+Mon Jun 24 17:55:31 1996 Jouke Numan <jnuman@bazis.nl>
+
+ * ldlang.h (enum section_type): Define.
+ (lang_output_section_statement_type): Remove loadable field. Add
+ sectype field.
+ (lang_enter_output_section_statement): Change flags parameter in
+ prototype to sectype.
+ * ldgram.y (typebits): Remove.
+ (sectype): New static variable.
+ (opt_at): Use sectype rather than typebits.
+ (type): Set sectype rather than typebits.
+ (atype): Likewise.
+ * ldlex.l: Recognize DSECT, COPY, INFO, and OVERLAY in
+ EXPRESSION mode.
+ * ldlang.c (lang_output_section_statement_lookup): Set sectype
+ field rather than loadable field.
+ (wild_doit): Check sectype rather than loadable.
+ (lang_record_phdrs): Likewise.
+ (lang_enter_output_section_statement): Rename flags parameter to
+ sectype. Set sectype field rather than loadable field. Set flags
+ field based on sectype.
+
+Mon Jun 24 12:00:32 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * scripttempl/elf.sc: Force .stab* and .comment sections to start
+ at 0.
+
+ * configure.in: On alpha*-*-osf*, link against libbfd.a if not
+ using shared libraries.
+ * configure: Rebuild with autoconf 2.10.
+
+Fri Jun 21 17:40:56 1996 Joel Sherrill <joel@merlin.gcs.redstone.army.mil>
+
+ * configure.tgt: Add support for *-*-rtems* configurations.
+
+Fri Jun 21 13:05:51 1996 Richard Henderson <rth@tamu.edu>
+
+ * configure.tgt (alpha-*-linuxecoff*): New target.
+ (alpha-*-linux*): Use elf64alpha.
+ * emulparams/elf64alpha.sh: New file.
+ * emultempl/elf32.em: If ELFSIZE is not set, set it to 32. Use
+ ${ELFSIZE} rather than 32 when calling BFD routines.
+ (hold_rodata): New static variable.
+ (gld${EMULATION_NAME}_place_orphan): Use hold_rodata for a
+ readonly section that is not code.
+ (gld${EMULATION_NAME}_place_section): Set hold_rodata. Don't use
+ a .rel section unless its bfd_section field is not NULL.
+ * Makefile.in (ALL_EMULATIONS): Add eelf64alpha.o.
+ (eelf64alpha.c): New target.
+
+Fri Jun 21 12:45:46 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldmisc.c (vfinfo): Correct handling of 0 in %W case.
+
+Thu Jun 20 13:55:28 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ Add enough support to understand the gcc svr3.ifile script:
+ * ldlex.l: Recognize BLOCK and GROUP in EXPRESSION context. Add
+ BIND keyword.
+ * ldgram.y: Add BIND token.
+ (section): Recognize GROUP.
+ (opt_ext_with_type): Recognize a couple of cases of BIND.
+ * ldlang.c (init_os): Don't do anything if section is already
+ initialized. Call exp_init_os on addr_tree field.
+ (exp_init_os): New static function.
+ (map_input_to_output_sections): Call exp_init_os on assignment
+ expression.
+ (lang_place_orphans): Check for common sections by name COMMON
+ rather than by common_section field. Don't warn about absence of
+ [COMMON] command.
+
+ * ldlang.h (lang_input_statement_type): Remove useless fields
+ common_section, common_output_section, and complained, as well as
+ all references to them.
+
+ * ldexp.c: Reindent a lot of code.
+ (exp_fold_tree): Call FAIL rather than einfo in default case.
+
+Wed Jun 19 11:40:14 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.host (m88*-*-dgux*): Quote HOSTING_CRT0. From
+ <randall.hron@medaphis.com>.
+
+Tue Jun 18 15:53:09 1996 Jeffrey A. Law <law@rtl.cygnus.com>
+
+ * scripttempl/h8300s.sc: New file for H8/S.
+ * emulpararms/h8300s.sh: New file for H8/S.
+ * Makefile.in (ALL_EMULATIONS): Add H8/S.
+ (e_h8300s.c): Add dependencies.
+ * configure.tgt: Add H8/S to targ_extra_emuls.
+
+Tue Jun 18 17:55:39 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.tgt (i[345]86*-*-isc*): New target. From
+ <uddeborg@carmen.se>.
+
+Wed Jun 12 12:46:21 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * lexsup.c: Include "libiberty.h".
+ (parse_args): Copy the -Y argument into memory.
+ (set_default_dirlist): Don't put the ':' back into the directory
+ list.
+
+Fri Jun 7 11:27:42 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/sunos.em: Include libiberty.h.
+ (gld${EMULATION_NAME}_set_symbols): New static function to add
+ LD_LIBRARY_PATH to the list of search directories.
+ (ld_${EMULATION_NAME}_emulation): Add new set_symbols routine.
+
+Thu Jun 6 11:50:31 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * emulparams/elf32bmip.sh (OTHER_GOT_SYMBOLS): Use ALIGN(16)
+ rather than . when computing _gp value. From Per Fogelstrom.
+ * emulparams/elf32lmip.sh (OTHER_GOT_SYMBOLS): Likewise.
+
+ * ldmain.c (main): Don't close and unlink the file on error, since
+ remove_output will do it anyhow.
+ * ldlang.c (open_output): Set boolean variable to true, not 1.
+
+Wed Jun 5 18:34:14 1996 James G. Smith <jsmith@cygnus.co.uk>
+
+ * emulparams/{elf32b4300.sh,elf32l4300.sh} (SCRIPT_NAME): Use
+ elfmips instead of elf.
+
+Tue Jun 4 18:43:07 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldcref.c: New file.
+ * ld.h (add_cref, output_cref): Declare.
+ * ldmain.c (main): Initialize notice_all field. If it is set at
+ end of link, call output_cref.
+ (notice): Rename from notice_ysym. Check notice_all.
+ * ldmisc.c (finfo): Make globally visible.
+ * ldmisc.h (finfo): Declare.
+ * lexsup.c (OPTION_CREF): Define.
+ (ld_options): Add "cref".
+ (parse_args): Handle OPTION_CREF.
+ * Makefile.in: Rebuild dependencies.
+ (CFILES): Add ldcref.c.
+ (OFILES): Add ldcref.o.
+ * ld.texinfo, ld.1: Document --cref.
+
+Tue Jun 4 12:12:25 1996 Tom Tromey <tromey@csk3.cygnus.com>
+
+ * Makefile.in (install): Make $(tooldir) and $(tooldir)/bin.
+
+Fri May 31 12:40:55 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/pe.em (sort_sections): Don't assume that a
+ wild_statement has a section name.
+
+Wed May 29 13:13:35 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * scripttempl/elfmips.sc: Quote test -z argument.
+
+ * ld.texinfo: Clarify the CONSTRUCTORS command.
+
+Thu May 23 16:07:44 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/aix.em (gld${EMULATION_NAME}_read_file): Initialize
+ file, not impfile.
+
+Wed May 22 11:31:30 1996 Doug Evans <dje@seba.cygnus.com>
+
+ * ldlang.c (wild_doit): Don't copy over SEC_LINK_{ONCE,DUPLICATES}
+ if final link.
+ * emultempl/pe.em (sfunc): Renamed to sort_by_file_name.
+ (sort_by_section_name, sort_sections_1): New functions.
+ (sort_sections): Only sort by file name sections in .idata.
+ Add "Grouped Sections" support.
+ (gld${EMULATION_NAME}_place_orphan): Rewrite to support Grouped
+ Sections.
+ (gld${EMULATION_NAME}_place_section): Delete.
+ * scripttempl/pe.sc (.text,.data,.rdata): Add *(.foo\$).
+ (.CRT,.rsrc): Rewrite to use Grouped Section support.
+
+Tue May 21 14:31:48 1996 Stan Shebs <shebs@andros.cygnus.com>
+
+ * mpw-eppcmac.c: Update to reflect changes to aix.em.
+
+Sun May 19 16:59:44 1996 Doug Evans <dje@seba.cygnus.com>
+
+ * ldlang.c (dprint_statement): Stop printing at end of list.
+
+Sat May 18 13:12:05 1996 Steve Chamberlain <sac@slash.cygnus.com>
+
+ Support for --force-exe-suffix
+ * ld.h (args_type): Add force_exe_suffix.
+ * ld.texinfo: Add documentation.
+ * ldmain.c (main): Add support for option.
+ * lexsup.c (OPTION_FORCE_EXE_SUFFIX): New.
+ (ld_options, parse_args): Add support for option.
+
+Wed May 15 12:50:25 1996 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * emultempl/pe.em (set_pe_value): Pass 0 not 16 to strtoul call.
+
+Fri May 10 16:28:44 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * scripttempl/elfppc.sc (__stack): Make __stack 0 if it was
+ referenced but not defined.
+
+Thu May 9 08:52:23 1996 Rob Savoye <rob@chinadoll.cygnus.com>
+
+ * emulparams/{elf32bmip.sh,elf32lmip.sh,mipsidt.sh,mipsidtl.sh}:
+ Set a new variable to signify if the final target is an embedded
+ system.
+ * scripttempl/{mips.sc,elfmips.sc}: Don't add SIZEOF_HEADERS to
+ .text for an embedded system.
+
+Tue May 7 10:56:11 1996 Doug Evans <dje@canuck.cygnus.com>
+
+ * emultempl/pe.em (gld${EMULATION_NAME}_place_orphan): New function.
+ (gld${EMULATION_NAME}_place_section): New function.
+ (hold_{section,use,text,rdata,data}): New static locals.
+ (ld_${EMULATION_NAME}_emulation): Update orphan field.
+ * scripttempl/pe.sc: Whitespace cleanup. Semicolon usage cleanup.
+ (INIT,FINI): Delete, unused.
+ (.text): Document orphan .text.foo sections.
+ (.rdata): Document orphan .rdata.foo sections.
+ (.data): Document orphan .data.foo sections.
+
+Tue May 7 11:35:46 1996 Jeffrey A Law (law@cygnus.com)
+
+ * scripttempl/h8300.sc: Place ".tiny" sections right
+ after ".data" sections.
+ * scripttempl/h8300h.sc: Place ".tiny" sections into
+ the "tiny" memory region, 0xff8000 through 0xffff00.
+
+ * scripttempl/h8300.sc: Set the entry point to the value of
+ "_start" rather than the start of the text segment.
+ * scripttempl/h8300h.sc: Likewise.
+
+ * scripttempl/h8300.sc: Place .rodata sections before .text
+ sections in main ram.
+ * scripttempl/h8300h.sc: Likewise.
+
+Mon May 6 23:32:30 1996 Jeffrey A Law (law@cygnus.com)
+
+ * scripttempl/h8300h.sc: Use "eight", not "eightbit" for the
+ 8-bit region and 8-bit sections.
+
+Wed May 1 17:50:06 1996 Doug Evans <dje@canuck.cygnus.com>
+
+ * ldlang.c (section_already_linked): Fix typos.
+
+Mon Apr 29 20:31:06 1996 Doug Evans <dje@canuck.cygnus.com>
+
+ * scripttempl/pe.sc (.endjunk): Define __end__.
+
+Mon Apr 29 17:05:13 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlang.c (longest_section_name): Remove.
+ (SECTION_NAME_MAP_LENGTH): Define.
+ (print_size, print_alignment, print_fill, print_section): Remove.
+ (print_flags): Remove.
+ (lang_map): Rewrite.
+ (print_output_section_statement): Rewrite.
+ (print_assignment): Rewrite.
+ (print_one_symbol): Rewrite.
+ (print_input_section): Rewrite.
+ (print_fill_statement): Rewrite.
+ (print_data_statement): Rewrite.
+ (print_address_statement): New static function.
+ (print_reloc_statement): Rewrite.
+ (print_padding_statement): Rewrite.
+ (print_wild_statement): Rewrite.
+ (print_statement_list): Clean up.
+ (print_statement): Clean up. Some minor output changes.
+ (print_statements): Clean up.
+ (load_symbols): Put another - before -whole-archive.
+ * ldexp.c (exp_print_tree): Change etree_value and etree_rel to
+ print 0x and to omit leading zeroes. For etree_rel, use %B to
+ print the BFD. For etree_assign, remove the space after the
+ destination name.
+ * ldwrite.c: Include "libiberty.h".
+ (clone_section): Call xstrdup, not strdup.
+ (ldwrite): Don't print any map information.
+ (print_symbol_table, print_file_stuff, print_symbol): Remove.
+ * ldmain.c (main): Call lang_map when appropriate.
+ * ldmisc.c (vfinfo): Add support for %W.
+ (print_address): Remove.
+ * ldmisc.h (print_address): Don't declare.
+ * Makefile.in: Rebuild dependencies.
+
+Mon Apr 29 10:29:07 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * configure.host (m68*-*-linux*): Add -dynamic-linker to
+ HOSTING_CRT0. Search -lgcc both before and after -lc in
+ HOSTING_LIBS. Look for crt{begin,end}.o in the compiler directory
+ at first.
+ (i[345]86-*-linux*): Look for crt{begin,end}.o in the compiler
+ directory at first.
+
+Fri Apr 26 14:42:27 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldmisc.h (demangle): Declare.
+ * ldmisc.c: Include "libiberty.h". Include demangle.h with "",
+ not <>.
+ (demangle): Make non-static. Remove remove_underscore paramter.
+ Always return an allocated string.
+ (vfinfo): Free result of demangle. Add case 'G'. Use %T to print
+ functionname, rather than calling demangle. Print a colon between
+ the BFD(section+offset) and the line number.
+ * ldmain.c (add_archive_element): Improve format of archive
+ information in map file.
+ (constructor_callback): Don't print anything to the map file.
+ * ldlang.c (lang_one_common): Improve format of common symbol
+ information in map file.
+ * ldctor.c (ldctor_build_sets): If producing a map file, print set
+ information.
+ * ldwrite.c (print_symbol_table): Print a newline before the
+ header in the map file.
+ * Makefile.in: Rebuild dependencies.
+
+ * ldmisc.c (vfinfo): Reindent.
+
+Mon Apr 22 12:07:32 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlang.c (lang_size_sections): If _cooked_size is not 0, then
+ don't clobber it when not relaxing.
+
+ * ld.h (ld_config_type): Remove traditional_format field.
+ * ldmain.c (main): Use link_info.traditional_format rather than
+ config.traditional_format.
+ * ldlang.c (ldlang_open_output): Likewise.
+ * lexsup.c (parse_args): Likewise.
+ * emultempl/aix.em (gld${EMULATION_NAME}_parse_args): Likewise.
+ * mpw-eppcmac.c (gldppcmacos_parse_args): Likewise.
+
+ * ldlang.c (wild_doit): Discard debugging sections if we are
+ stripping debugging information.
+
+ * emulparams/z8002.sh (ARCH): Set to z8002, not z8k.
+
+Tue Apr 16 16:38:32 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldexp.c (fold_binary): Correct handling of subtraction with
+ absolute values.
+ (fold_name): Permit symbols in lang_allocating_phase_enum.
+
+ * scripttempl/aout.sc: Only PROVIDE __stack when RELOCATING. Undo
+ accidental changes in last patch.
+
+Tue Apr 16 10:25:42 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * configure.tgt (powerpc*-*-{sysv,linux}): Add aliases.
+ (powerpcle*-*-{sysv,solaris}): Ditto.
+
+Mon Apr 15 14:50:56 1996 Rob Savoye <rob@chinadoll.cygnus.com>
+
+ * scripttempl/aout.sc: Add PROVIDE (__stack = 0) so I can use it
+ in m68k/crt0.S without things blowing up.
+
+Fri Apr 12 16:40:56 1996 Rob Savoye <rob@chinadoll.cygnus.com>
+
+ * scripttempl/m68kcoff.sc: Remove default address for .data so
+ .text, .data, and .bss are all sequential.
+
+Thu Apr 11 12:05:35 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * scripttempl/m68kcoff.sc: Remove regions and simplify.
+
+Wed Apr 10 14:41:53 1996 Jeffrey A Law (law@cygnus.com)
+
+ * scripttempl/h8300.sc: Add the "8-bit area" in the upper 256
+ bytes of the address space. Put data from the ".eight" sections
+ into the 8-bit area.
+ * scripttempl/h8300h.sc: Likewise.
+
+Tue Apr 9 14:10:42 1996 Doug Evans <dje@canuck.cygnus.com>
+
+ * emultempl/generic.em (gld${EMULATION_NAME}_before_parse):
+ Pass $ARCH to ldfile_set_output_arch instead of setting
+ ldfile_output_architecture directly.
+
+Tue Apr 9 14:22:15 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * scripttempl/elfppc.sc (.init,.fini): Put .init, .fini section
+ next to .text. Put _etext after .text, .init, .fini, and
+ .rodata{,2} sections.
+
+Tue Apr 9 12:18:57 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld.texinfo: Rearrange option documentation.
+
+ * lexsup.c (ld_options): New static array.
+ (parse_args): Build shortopts and longopts from ld_options array.
+ (help): New static function.
+ * ldver.h (help): Don't declare.
+ * ldver.c (ldversion): Reindent.
+ (help): Remove.
+
+ * ld.texinfo, ld.1: Mention -E as a synonym for -export-dynamic.
+
+Mon Apr 8 11:56:23 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/elf32.em: When checking for a native emulation, check
+ that the current emulation is the default emulation.
+ * emultempl/sunos.em: Likewise.
+
+ * configure.in: Permit --enable-shared to specify a list of
+ directories.
+ * configure: Rebuild.
+
+ * lexsup.c (parse_args): Add -E as a synonym for -export-dynamic,
+ for HP/UX compatibility.
+
+Fri Apr 5 14:30:14 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_check_ld_so_conf): New
+ static function, if ${host} = ${target}.
+ (gld${EMULATION_NAME}_after_open): Call check_ld_so_conf to find a
+ needed shared library if ${host} = $[target}.
+
+ * configure.host (i[345]86-*-linux*): Add -dynamic-linker to
+ HOSTING_CRT0. Search -lgcc both before and after -lc in
+ HOSTING_LIBS.
+
+ * configure.tgt: Add i[345]86-*-freebsdelf* target; from John
+ Polstra <jdp@polstra.com>.
+
+Fri Apr 5 18:11:25 1996 James G. Smith <jsmith@cygnus.co.uk>
+
+ * emulparams/elf32{b,l}4300.sh (MACHINE): Add explicit
+ architecture number.
+ * scripttempl/elf.sc: Use $MACHINE definition if present.
+ * configure.tgt (targ_extra_emuls): Force 4100 build to use same
+ template as 4300.
+
+Mon Apr 1 17:35:40 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlang.c (lang_size_sections): Change region check to handle
+ regions which end at the highest possible address correctly.
+ From Roland Weber <roweber@ira.uka.de>.
+
+ * ldlang.c (section_already_linked): New static function.
+ (wild_doit): Discard sections with SEC_EXCLUDE set if not doing a
+ relocateable link. Don't worry about section being NULL, since it
+ never should be. Don't call init_os unless the section is going
+ to be added.
+ (ldlang_add_file): Call section_already_linked for each section.
+ * ldmain.c (multiple_definition): Don't warn about multiple
+ definitions in sections which are being discarded.
+
+Sun Mar 31 00:30:47 1996 steve chamberlain <sac@slash.cygnus.com>
+
+ * scripttempl/{ppcpe.sc, pe.sc} (.junk): Remove and use /DISCARD/.
+ * emultempl/pe.em (init): Remove special case PPC code.
+
+Fri Mar 29 00:01:29 1996 Jeffrey A Law (law@cygnus.com)
+
+ * scripttempl/h8300.sc: Make vectors section 0xc4 bytes long
+ so as not to overwrite the magic syscall entry at 0xc4.
+ * scripttempl/h8300h.sc: Likewise.
+
+Thu Mar 28 11:05:47 1996 Doug Evans <dje@canuck.cygnus.com>
+
+ * configure.tgt (sparc64-*-solaris2*): Delete.
+ Stick with sparc-*-solaris2*.
+
+Wed Mar 27 12:33:24 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld.h (DISCARD_SECTION_NAME): Define to "/DISCARD/".
+ * ldlang.c (init_os): Fail on an attempt to initialize any section
+ named DISCARD_SECTION_NAME.
+ (wild_doit): Discard input sections assigned to an output section
+ named DISCARD_SECTION_NAME.
+ * ld.texinfo: Document use of /DISCARD/.
+
+ * ldlang.c: Fix some indentation and comments.
+
+Tue Mar 26 18:14:49 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldmain.c (main): Call bfd_set_error_program_name.
+
+Thu Mar 21 13:17:34 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld.texinfo: Fix a couple of indexing entries. Mention that
+ --verbose displays builtin linker scripts.
+
+ * ldmisc.c (vfinfo): case 'I': If the file is not in an archive,
+ and the local symbol name does not match the filename, print the
+ filename as well.
+
+ Patches from John Polstra <jdp@polstra.com> for FreeBSD ELF:
+ * lexsup.c (parse_args): -Bshareable is a synonym for -shared.
+ * emulparams/elf_i386.sh (NONPAGED_TEXT_START_ADDR): Make the same
+ as TEXT_START_ADDR.
+
+Wed Mar 20 18:18:25 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * ld.texinfo: Fix typos. Use @pxref only inside parentheses.
+
+Wed Mar 20 16:56:15 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldmain.c (add_wrap): New function.
+ * ldmain.h (add_wrap): Declare.
+ * lexsup.c (parse_args): Call add_wrap.
+
+Tue Mar 19 16:44:20 1996 Doug Evans <dje@canuck.cygnus.com>
+
+ * configure.host (sparc*-*-solaris2* host): Accept any sparc variant.
+
+Wed Mar 13 17:47:31 1996 Jeffrey A Law (law@cygnus.com)
+
+ * scripttempl/h8300.sc: Change name of page zero memory
+ from "null" to "vectors". Create an output section for
+ vectors. Add comments on how to explicitly place items
+ in the vector table.
+ * scripttempl/h8300h.sc: Likewise.
+
+Wed Mar 13 12:40:18 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/lnk960.em (machine_table): Add jx and hx.
+
+ * genscripts.sh: Don't use ${9:-xx}, since Ultrix /bin/sh doesn't
+ support it.
+
+Tue Mar 12 12:43:59 1996 David Mosberger-Tang <davidm@koala.azstarnet.com>
+
+ * ld.h (ld_config_type): Add warn_multiple_gp field.
+ * lexsup.c (parse_args): Handle --warn-multiple-gp.
+ * ldmain.c (warning_callback): Suppress multiple gp values warning
+ if --warn_multiple_gp was not used.
+ * ld.texinfo, ld.1: Document --warn-multiple-gp.
+
+Tue Mar 12 12:02:21 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * lexsup.c (parse_args): Handle --wrap.
+ * ldmain.c (main): Initialize link_info.wrap_hash.
+ * ldexp.c (fold_name): Use bfd_wrapped_link_hash_lookup in DEFINED
+ and NAME cases.
+ * ld.texinfo, ld.1: Document --wrap.
+
+ * configure: Rebuild with autoconf 2.8.
+
+ Don't do SunOS style dynamic linking for sparc-aout:
+ * configure.tgt (sparc64-*-aout*): Use sparcaout, not sun4.
+ (sparclite*-fujitsu-*, sparc*-*-aout): Likewise.
+ (sparc*-wrs-vxworks*): Likewise.
+ * emulparams/sparcaout.sh: New file.
+ * Makefile.in (ALL_EMULATIONS): Add esparcaout.o.
+ (esparcaout.c): New target.
+
+Wed Mar 6 16:06:52 1996 J.T. Conklin <jtc@rtl.cygnus.com>
+
+ * scripttempl/elfppc.sc (.sdata2, .sbss2): Implement Feb 2 change
+ in a different manner to work around differences in shell variable
+ expansion.
+
+Wed Mar 6 18:08:18 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldemul.h (ldemul_unrecognized_file): Declare.
+ (ldemulation_xfer_type): Add unrecognized_file field.
+ * ldemul.c (ldemul_unrecognized_file): New function.
+ * ldlang.c (load_symbols): If a file can not be recognized, call
+ ldemul_unrecognized_file before trying it as a linker script.
+ * emultempl/aix.em (gld${EMULATION_NAME}_unrecognized_file): New
+ static function.
+ (gld${EMULATION_NAME}_read_file): Use FOPEN_RT, not "r".
+ (ld_${EMULATION_NAME}_emulation): Initialize unrecognized_file.
+
+Mon Mar 4 14:11:17 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlang.c (wild): Handle foo.a(.text) by mapping each included
+ member of foo.a separately. From Jouke Numan <jnuman@bazis.nl>.
+
+Fri Mar 1 10:24:59 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_find_exp_assignment):
+ Search trinary.cond rather than searching trinary.lhs twice.
+
+Tue Feb 27 15:08:43 1996 Stan Shebs <shebs@andros.cygnus.com>
+
+ * mpw-make.sed: Edit out shared library support.
+ (@TDIRS@): Edit out, can't use genscripts.
+
+Tue Feb 27 15:09:21 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * configure.tgt (m68k-*-linuxaout*, m68k-*-linux*): New targets.
+ * emulparams/m68klinux.sh: New file.
+ * emultempl/linux.em (gld${EMULATION_NAME}_before_allocation):
+ Call bfd_${EMULATION_NAME}_size_dynamic_sections instead of
+ bfd_linux_size_dynamic_sections.
+ * Makefile.in (ALL_EMULATIONS): Add em68klinux.o.
+ (em68klinux.c): New target.
+ * configure.host (m68*-*-linuxaout*, m68*-*-linux*): New hosts.
+
+Tue Feb 27 12:55:46 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.in (ALL_EMULATIONS): Sort into alphabetical order.
+ Fill in missing entries.
+
+ * lexsup.c (parse_args): Recognize --no-whole-archive.
+ * ldlang.h (lang_input_statement_type): Add whole_archive field.
+ * ldlang.c (new_afile): Set whole_archive field.
+ (load_symbols): Check input file specific whole_archive field
+ rather than global variable.
+ * ld.texinfo, ld.1: Document --no-whole-archive.
+
+Tue Feb 20 16:07:00 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.tgt: Correct gldi960 to gld960.
+
+Mon Feb 19 11:16:44 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_check_needed): Check
+ the SONAME if it is available.
+ (gld${EMULATION_NAME}_stat_needed): Use the SONAME, not the
+ filename, when checking for conflicting library versions. Don't
+ assume that the suffix is only numbers and dots.
+
+ * ld.texinfo: Mention that -R can be used for -rpath.
+
+Sun Feb 18 15:05:17 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.host: Check for 'do not mix' from native linker before
+ trying to use -rpath.
+
+Thu Feb 15 13:58:06 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.in: Remove explicit substitution of CFLAGS; autoconf
+ does it anyhow.
+ * configure: Rebuild.
+ * Makefile.in (LDFLAGS): Set to @LDFLAGS@.
+
+ * configure.in: Call AC_PROG_CC before configure.host.
+ * configure: Rebuild.
+ * configure.host: Remove go32 host, since it should no longer be
+ necessary. Don't set CC for romp host.
+
+ * scripttempl/elf.sc: Don't skip a page in virtual memory space if
+ the text segment ends exactly on a page boundary.
+
+ * configure.in: Substitute RPATH_ENVVAR.
+ * configure: Rebuild.
+ * configure.host: Set RPATH_ENVVAR.
+ * Makefile.in (RPATH_ENVVAR): New variable.
+ (check): Use $(RPATH_ENVVAR) rather than LD_LIBRARY_PATH.
+
+Wed Feb 14 18:49:01 1996 Alan Modra <alan@spri.levels.unisa.edu.au>
+
+ * configure.in: Redo emulation handling so that each emulation
+ searches the correct tool directory, based on the target alias.
+ For example, "configure --enable-targets=m68k-coff i386-linux"
+ will search /usr/local/i386-linux/lib for linux and
+ /usr/local/m68k-coff/lib for m68k-coff.
+ * configure: Rebuild.
+ * configure.tgt: Add special tdir settings for Linux.
+ * Makefile.in: Add @TDIRS@. Pass "$(tdir_EMUL)" to ${GENSCRIPTS}
+ for each eEMUL.c target.
+ * genscripts.sh: Accept specific alias as 9th argument, and use it
+ in LIB_PATH.
+
+Wed Feb 14 16:38:36 1996 Martin Anantharaman <martin@mail.imech.uni-duisburg.de>
+
+ * ldlang.c (lang_set_startof): Don't do anything for a
+ relocateable link.
+
+ * ldgram.y (mri_script_file): Call mri_draw_tree.
+ * mri.c (mri_draw_tree): Make globally visible. Don't bother to
+ create memory regions.
+ (mri_load): Don't call mri_draw_tree.
+ * mri.h (mri_draw_tree): Declare.
+
+ * configure.tgt (m68*-*-psos): New target.
+ * emulparams/m68kpsos.sh: New file.
+ * scripttempl/psos.sc: New file.
+ * Makefile.in (ALL_EMULATIONS): Add em68kpsos.o.
+ (em68kpsos.c): New target.
+
+Wed Feb 14 11:09:25 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.tgt (*-*-ieee*): New target; use vanilla.
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_before_parse): Strip
+ `:foo' from ${ARCH}.
+
+Tue Feb 13 15:58:58 1996 Bryan Ford <baford@snake.cs.utah.edu>
+
+ * scripttempl/i386msdos.sc: Don't pad the .text section. Put
+ .rodata in .data.
+
+Tue Feb 13 14:04:19 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.host: Set HDLFLAGS for *-*-hpux with --enable-shared.
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_stat_needed): Warn if
+ it looks like we might be linking in two different versions of the
+ same shared library. Based on a patch from H J Lu <hjl@zoom.com>.
+
+Thu Feb 8 19:25:54 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlang.c (lang_size_sections): Increment the section size when a
+ padding statement is encountered.
+
+Wed Feb 7 14:01:33 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.in: Look for --enable-shared. Change the value of
+ BFDLIB when linking against a shared library on SunOS.
+ * configure: Rebuild.
+ * configure.host: If using a shared BFD library, try to pass a
+ reasonable -rpath option when linking.
+ * Makefile.in (BFDLIB): Set to @BFDLIB@.
+
+Tue Feb 6 12:29:14 1996 Doug Evans <dje@charmed.cygnus.com>
+
+ * emulparams/elf64_sparc.sh (ARCH): Change to `sparc:v9'.
+ * emultempl/generic.em: Strip `:foo' from ${ARCH}.
+
+Mon Feb 5 16:25:30 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ Support for building bfd and opcodes as shared libraries, based on
+ patches from Alan Modra <alan@spri.levels.unisa.edu.au>:
+ * configure.in (HLDFLAGS): New substitution.
+ * configure: Rebuild.
+ * configure.host: Set HLDFLAGS on SunOS.
+ * Makefile.in (HLDFLAGS): New variable.
+ (BFDDEP): New variable.
+ (BFDLIB): Change to -L../bfd -lbfd.
+ ($(LD_PROG)): Depend upon $(BFDDEP) rathern than $(BFDLIB). Use
+ $(HLDFLAGS) in link.
+ (check): Set LD_LIBRARY_PATH in the environment.
+
+Fri Feb 2 19:26:25 1996 Michael Meissner <meissner@wogglebug.tiac.net>
+
+ * scripttempl/elfppc.sc (.sdata2, .sbss2): Put .sdata2 and .sbss
+ in the read-only section, not read/write unless we are making a
+ shared library.
+ (.debug*): Add dwarf debug sections.
+ (.rela.{sdata*,sbss*}): Add sections.
+
+Fri Feb 2 16:50:21 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure: Regenerate.
+
+Thu Feb 1 10:50:46 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * emulparams/elf_i386.sh (TEXT_START_ADDR): Change to 0x8048000,
+ for SVR4 compatibility.
+
+ * ldexp.c (exp_fold_tree): Correct handling of ABSOLUTE.
+
+Wed Jan 31 17:30:19 1996 Steve Chamberlain <sac@slash.cygnus.com>
+
+ * configure.tgt (i[345]86-*-cygwin32, powerpcle-*-cygwin32): New.
+ * emultempl/pe.em (definfo init): Make the default stack reserve
+ of a PPC larger.
+
+Wed Jan 31 14:34:23 1996 Richard Henderson <rth@tamu.edu>
+
+ * configure.tgt (m68*-apple-aux*): New target.
+ * emulparams/m68kaux.sh: New file.
+ * scripttempl/m68kaux.sc: New file.
+ * Makefile.in (ALL_EMULATIONS): Add em68kaux.o.
+ (em68kaux.c): New target.
+
+Tue Jan 30 13:18:56 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/aix.em (gld${EMULATION_NAME}_parse_args): Ignore
+ -bnoentry, since the right thing tends to happen anyhow.
+
+Mon Jan 29 12:29:26 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld.texinfo, ld.1: Document -export-dynamic.
+
+Fri Jan 26 11:11:55 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * emultempl/sunos.em: Check for native compile by comparing
+ ${target} and ${host}.
+
+Thu Jan 25 16:46:58 1996 James G. Smith <jsmith@cygnus.co.uk>
+
+ * emulparams/{elf32b4300.sh, elf32l4300.sh}: Changed
+ TEXT_START_ADDR to allow use on IDT and PMON systems.
+
+Wed Jan 24 20:59:40 1996 Steve Chamberlain <sac@slash.cygnus.com>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_parse_args):
+ correct spelling.
+
+Wed Jan 24 16:59:19 1996 Doug Evans <dje@charmed.cygnus.com>
+
+ * configure.tgt (sparc64-*-solaris2*): New configuration.
+ (sparc64-*-aout*): Renamed from sparc64*.
+
+Mon Jan 22 13:01:35 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * Makefile.in (GENSCRIPTS): Pass @host@ @target@ @target_alias@.
+ * genscripts.sh: Set host, target and target_alias variables.
+ Check for native compile by comparing ${target} and ${host}.
+ * emultempl/elf32.em: Likewise.
+ * scripttempl/elfmips.sc: Test ${target}, not ${target_alias}.
+
+Mon Jan 22 11:03:23 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * scripttempl/elfppc.sc: Refine eabi support to better support
+ .sdata, .sdata2, .sbss, etc. sections.
+
+Tue Jan 16 15:16:58 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldgram.y (%union): Add phdr field.
+ (phdr): Use phdr_qualifiers rather than opt_hdrs and opt_at.
+ (phdr_qualifiers): New nonterminal. Add support for FLAGS.
+ (opt_hdrs, hdr): Remove.
+ (phdr_val): New nonterminal.
+ * ldlang.c (lang_new_phdr): Replace hdrs parameter with filehdr
+ and phdrs parameters. Add flags parameter.
+ (lang_record_phdrs): Update for changes to lang_phdr. Pass flags
+ to bfd_record_phdr.
+ * ldlang.h (struct lang_phdr): Replace hdrs field with filehdr and
+ phdrs fields. Add flags field.
+ (LANG_PHDR_FILEHDR, LANG_PHDR_PHDRS): Remove.
+ (lang_new_phdr): Update declaration.
+ * ld.texinfo: Document FLAGS.
+
+Mon Jan 15 15:07:19 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/sunos.em (gld${EMULATION_NAME}_before_allocation):
+ Don't make a shared library because of an undefined reference to
+ __GLOBAL_OFFSET_TABLE_.
+
+ Add some Irix 5 support, mostly from Kazumoto Kojima
+ <kkojima@info.kanagawa-u.ac.jp>:
+ * emulparams/elf32bmip.sh (SCRIPT_NAME): Change to elfmips.
+ (SHLIB_TEXT_START_ADDR): Define.
+ (OTHER_GOT_SYMBOLS): Define.
+ (OTHER_READWRITE_SECTIONS): Remove initialization of _gp.
+ (EXECUTABLE_SYMBOLS): Don't define.
+ (DYNAMIC_LINK): Don't define.
+ * emulparams/elf32lmip.sh: Same changes as elf32bmip.sh.
+ * scripttempl/elfmips.sc: New file.
+ * configure.host (mips*-dec-bsd*): Change mips to mips*.
+ (mips*-sgi-irix4*): Likewise.
+ (mips*-sgi-irix5*): New entry.
+ * Makefile.in (eelf32bmip.c): Depend upon elfmips.sc rather than
+ elf.sc.
+ (eelf32lmip.c): Likewise.
+
+Sat Jan 13 09:41:43 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * scripttempl/elfppc.sc: Remove support for .rel.* sections. Add
+ .rela.got.neg section.
+
+Fri Jan 12 14:56:19 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * scripttempl/sh.sc: Only build constructors when CONSTRUCTING.
+
+ * ldmisc.c: Include <stdarg.h> rather than <varargs.h> if
+ ANSI_PROTOTYPES is defined. Remove special handling of
+ WINDOWS_NT. Various indendation fixes.
+ (vfinfo): Change fmt parameter to const char *.
+ (info_msg): Write <stdarg.h> version.
+ (einfo, minfo, finfo): Likewise.
+ (info_assert): Change file parameter to const char *.
+ * ldmisc.h (einfo, minfo, info_msg): If ANSI_PROTOTYPES is
+ defined, use a real prototype.
+ (info_assert): Change first parameter to be const char *.
+
+Fri Jan 12 13:29:55 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * scripttempl/elfppc.sc: Add support for .sdata2/.sbss2, etc. Add
+ in old support that 2.7.2 needs, but the current compiler does
+ not.
+
+ * Makefile.in (eelf32{,l}ppc.c): Fix up dependencies to use the
+ correct Linker script template.
+
+ * emulparams/elf32{,l}ppc.sh (TEXT_START_ADDR): Set to 0x40000,
+ not 0x400000.
+ (DATA_ADDR,NONPAGED_TEXT_START_ADDR): Delete.
+
+Tue Jan 9 15:53:02 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * scripttempl/alpha.sc: Put .rconst right after .rdata.
+
+Fri Jan 5 14:07:45 1996 Steve Chamberlain <sac@slash.cygnus.com>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_before_allocation):
+ sort using right pointer.
+
+Fri Jan 5 12:25:47 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * scripttempl/elfppc.sc: Remove support for creating special
+ labels for eabi section begin/end here. The compiler now uses
+ crt{i,n}.o to create these symbols.
+
+Thu Jan 4 17:08:58 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.host: Change existing Linux HOSTING_CRT0 to be used
+ for a.out only, and put in appropriate HOSTING_CRT0 and
+ HOSTING_LIBS values for Linux ELF.
+
+Thu Jan 4 12:02:05 1996 Doug Evans <dje@canuck.cygnus.com>
+
+ * scripttempl/h8300.sc: Use all 64K for ram.
+ * scripttempl/h8300h.sc: Define 256K ram size.
+
+Thu Dec 21 15:57:18 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/aix.em (gld${EMULATION_NAME}_before_allocation): Pass
+ export_defines as true to bfd_xcoff_size_dynamic_sections if -unix
+ was used, regardless of whether -bE was used.
+
+Tue Dec 19 17:35:38 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/aix.em (gld${EMULATION_NAME}_after_open): Only set
+ relocateable before calling ldctor_build_sets if the output file
+ is in an XCOFF format.
+
+Fri Dec 15 16:34:36 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldwrite.c (build_link_order): When handling a data statement, if
+ the endianness of the output file is unknown, use the endianness
+ of the input file.
+
+Tue Dec 12 13:55:41 1995 Stan Shebs <shebs@andros.cygnus.com>
+
+ * mpw-config.in: Recognize mips-*-* as equivalent to
+ mips-idt-ecoff.
+ * mpw-eppcmacos.c: Rename to shorter mpw-eppcmac.c.
+ * mpw-ld.r: Add version resources.
+ (cfrg): Use symbolic instead of literal name for executable.
+
+Mon Dec 11 15:13:41 1995 Kim Knuttila <krk@cygnus.com>
+
+ * scripttempl/ppcpe.sc (FINI): Moved the .reloc section.
+
+Wed Dec 6 14:33:50 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * ldlang.c (print_statement{,s}): Delete duplicate prototype.
+ (print_statement_list): Renamed from print_statement. All callers
+ updated.
+ (print_statement): New function to print just one statement.
+ (print_{data,reloc,padding}_statement): Don't crash if
+ output_section == NULL.
+ (dprint_statement): New function.
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_before_allocation): Fix
+ call to sort_sections.
+
+Wed Dec 6 14:59:06 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/aix.em (unix_ld): New static variable.
+ (gld${EMULATION_NAME}_parse_args): Handle -unix.
+ (gld${EMULATION_NAME}_before_allocation): If unix_ld, pass
+ gc as false and export_defineds as true to size_dynamic_sections.
+
+ * ldexp.c (exp_fold_tree): Permit assignments to dot in the final
+ phase if the current section is abs_output_section.
+
+
+Tue Dec 5 09:49:39 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_before_allocation): Fix call
+ to sort_sections.
+
+Fri Dec 1 16:48:36 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldgram.y (PHDRS): New token.
+ (ifile_p1): Accept phdrs.
+ (section): Accept phdr_opt at the end of the section definition.
+ (phdr_op): New nonterminal.
+ (phdrs, phdr_list, phdr, phdr_type, opt_hdrs, hdr): Likewise.
+ * ldlex.l: Accept PHDRS.
+ * ldlang.h (struct lang_output_section_phdr_list): Define.
+ (lang_output_section_statement_type): Add phdrs field.
+ (struct lang_phdr): Define.
+ (LANG_PHDR_FILEHDR, LANG_PHDR_PHDRS): Define.
+ (lang_new_phdr): Declare.
+ * ldlang.c (lang_phdr_list): New static variable.
+ (lang_output_section_statement_lookup): Initialize phdrs field.
+ (lang_process): Call lang_record_phdrs.
+ (lang_new_phdr): New function.
+ (lang_section_in_phdr): New function.
+ (lang_record_phdrs): New static function.
+ * ld.texinfo: Document PHDRS.
+
+Thu Nov 30 13:14:30 1995 Kim Knuttila <krk@cygnus.com>
+
+ * scripttempl/ppcpe.sc: Moved .edata into its own section to
+ expose it.
+
+Thu Nov 30 11:32:34 1995 Manfred Hollstein KS/EF4A 60/1F/110 #40283 <manfred@lts.sel.alcatel.de>
+
+ * configure.host (m68*-motorola-sysv): Define HOSTING_CRT0 and
+ HOSTING_LIBS for testing.
+ (m88*-motorola-sysv3): Define HOSTING_CRT0 and HOSTING_LIBS for
+ testing.
+
+Tue Nov 28 12:14:53 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * lexsup.c (parse_args): Set config.dynamic_link to false for -N
+ and -n.
+
+Mon Nov 27 13:12:09 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure: Rebuild with autoconf 2.7.
+
+Fri Nov 24 18:35:35 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * scripttempl/pe.sc: Two .junk's is too much junk.
+
+Tue Nov 21 16:14:32 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.in: Use BFD_NEED_DECLARATION.
+ * acconfig.h: Put NEED_DECLARATION_FREE in @TOP@ section.
+ * configure, config.in: Rebuild with autoconf 2.6.
+
+ * ldmain.c (constructor_callback): Don't warn about BFD_RELOC_CTOR
+ being unsupported if this is not a relocateable link and the input
+ BFD supports it, since ldctor_build_sets can cope with that case.
+
+Fri Nov 17 16:23:15 1995 Stan Shebs <shebs@andros.cygnus.com>
+
+ * configure.tgt (powerpc-*-macos*): New target.
+ * emulparams/ppcmacos.sh: New file, PowerMac emulation.
+ * Makefile.in (ALL_EMULATIONS): Add eppcmacos.o.
+ (eppcmacos.c): New target.
+ * mpw-eppcmacos.c: Update.
+ * mpw-make.sed: Edit out attempts to use {GENSCRIPTS}.
+
+Fri Nov 17 10:37:27 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.in (CC_FOR_TARGET): Use @host@ and @target@, not
+ $(host_canonical) and $(target_canonical).
+ (CXX_FOR_TARGET): Likewise.
+
+Thu Nov 16 11:23:42 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * scripttempl/pe.sc (.endjunk): Move definition of `end' to here
+ so the malloc heap begins at a sane place.
+
+Thu Nov 16 03:09:32 1995 Ken Raeburn <raeburn@cygnus.com>
+
+ Version 2.6 released.
+ * ldver.c (ldversion): Update to 2.6.
+
+ * Makefile.in (mostlyclean): Delete ldemul-list.h here, but not
+ $(GENERATED_*FILES), since they need to be retained by distclean.
+ (maintainer-clean, realclean): Delete them here.
+
+Tue Nov 14 17:08:06 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_parse_args): Open the
+ base file with FOPEN_WB, not "w".
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_after_open): Use the
+ environment variable LD_RUN_PATH if neither -rpath nor -rpath-link
+ were used.
+ (gld${EMULATION_NAME}_before_allocation): Use the environment
+ variable LD_RUN_PATH if -rpath was not used.
+ * ld.texinfo, ld.1: Document LD_RUN_PATH.
+
+Thu Nov 9 13:09:29 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/aix.em (gld${EMULATION_NAME}_parse_args): Recognize
+ -bl and -bloadmap options.
+
+ * ldfile.c (ldfile_try_open_bfd): If bfd_error_invalid_target,
+ report a better error.
+
+ * emultempl/aix.em (gld${EMULATION_NAME}_before_allocation): Add
+ new local variable special_sections, and pass it to
+ size_dynamic_sections. Look through the results, and move the
+ sections around in the mapping so that they are defined correctly.
+
+Wed Nov 8 11:40:59 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldemul.c (ldemul_default_target): Cast getenv return value.
+
+Tue Nov 7 11:15:36 1995 Kim Knuttila <krk@cygnus.com>
+
+ * emulparams/ppcpe.sh (ARCH): New file for PowerPC Portable
+ Executable support.
+ * scripttempl/ppcpe.sc: New file for PowerPC Portable Executable
+ support.
+
+ * configure.tgt (targ_extra_emuls): Added powerpcle-pe target.
+ * Makefile.in (ALL_EMULATIONS): Added eppcpe.o target.
+
+ * emultempl/pe.em (TARGET_IS_ppcpe): file tailoring macro
+ (gld_$_before_allocation): added hooks for toc construction based
+ on the above macro.
+
+Tue Nov 7 11:47:23 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld.texinfo: The linker does not use _main as an entry point.
+
+Tue Nov 7 11:46:11 1995 Manfred Hollstein KS/EF4A 60/1F/110 #40283 <manfred@lts.sel.alcatel.de>
+
+ * scripttempl/m88kbcs.sc (.data): Calculate next boundary modulo
+ 0x2000 not 0x200.
+
+Mon Nov 6 10:59:21 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.in: Add test for whether free must be declared.
+ * sysdep.h: Declare free if necessary. Include "ansidecl.h".
+ * acconfig.h: Explain NEED_DECLARATION_FREE.
+ * configure, config.in: Rebuild.
+
+ * lexsup.c (parse_args): Take B:: out of shortopts.
+
+Sun Nov 5 03:08:28 1995 Ken Raeburn <raeburn@cygnus.com>
+
+ * emulparams/i386nbsd.sh (EXECUTABLE_SYMBOLS): Set __DYNAMIC to 0
+ for now, as with m68k4kbsd, until shared library support gets
+ done.
+
+ * configure.host: For i386 BSD variants, crt0.o lives in
+ /usr/lib. (True for NetBSD at least, unconfirmed for others.)
+
+Wed Nov 1 15:42:45 1995 Manfred Hollstein KS/EF4A 60/1F/110 #40283 <manfred@lts.sel.alcatel.de>
+
+ * Makefile.in (ALL_EMULATIONS): Add edelta68.o.
+ (edelta68.c): New target.
+ * configure.tgt (m68*-motorola-sysv*): New target.
+ * emulparams/delta68.sh: New file.
+ * scripttempl/delta68.sc: New file.
+
+ * scripttempl/m88kbcs.sc: Handle .init and .fini. Change section
+ addresses.
+
+Wed Nov 1 11:41:56 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldgram.y (mri_script_command): Accept ',' as well as '=' in
+ ALIGN and ALIGNMOD statements.
+
+ * emultempl/aix.em: Include ldgram.h.
+ (gld${EMULATION_NAME}_parse_args): Handle -pD and -pT, as used on
+ AIX 4.1.
+ * Makefile.in ($(EMULATION_OFILES)): Depend upon ldgram.h.
+
+Tue Oct 31 18:22:24 1995 David Mosberger-Tang <davidm@azstarnet.com>
+
+ * configure.host (alpha-*-linux*): New host.
+ * configure.tgt (alpha-*-linux*): New target.
+
+Tue Oct 31 12:36:52 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/aix.em (export_files): Remove.
+ (import_files): Make static.
+ (struct export_symbol_list): Define.
+ (export_symbols): New static variable.
+ (gld${EMULATION_NAME}_parse_args): Handle an initial -b option
+ correctly. Call read_file for an export file.
+ (gld${EMULATION_NAME}_before_allocation): Call
+ bfd_xcoff_export_symbol for each export symbol, rather than
+ calling read_file for each export file.
+ (gld${EMULATION_NAME}_read_file): For an export file, make the
+ exported symbols undefined, and store them on the export_symbols
+ list.
+
+Sat Oct 28 00:10:03 1995 steve chamberlain <sac@slash.cygnus.com>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_parse_args):
+ Don't hang if last option is unrecognised.
+ (gld_${EMULATION_NAME}_set_symbols): Insert created
+ symbols into ABS output section.
+
+Fri Oct 27 18:03:17 1995 Niklas Hallqvist <niklas@appli.se>
+
+ * Makefile.in (ALL_EMULATIONS): Added support for the NetBSD
+ m68k4k arch.
+ (em68k4knbsd.c): New rule.
+
+ * configure.tgt: Added support for the NetBSD m68k4k arch.
+
+ * genscripts.sh, ldint.texinfo,
+ emulparams/{a29k,armaoutb,armaoutl,coff_sparc,ebmon29k,gld960,
+ gld960coff,go32,h8300,h8300h,h8500,h8500b,h8500c,h8500m,h8500s,
+ hp300bsd,hp3hpux,hppaelf.sh,i386aout,i386bsd,i386coff,i386go32,
+ i386linux,i386lynx,i386nbsd,lnk960,m68kaout,m68kcoff,m68klynx,
+ m88kbcs,mipsbig,mipsbsd,mipsidt,mipsidtl,mipslit,news,ns32knbsd,
+ pc532machaout,riscix,sa29200,sh,shl,sparclynx,sparcnbsd,
+ st2000,sun3,sun4,vanilla,vax,vsta,w65,z8001,z8002}.sh: Changed
+ PAGE_SIZE to TARGET_PAGE_SIZE.
+
+ * emulparams/m68knbsd.h: Ditto.
+ (TEXT_START_ADDR, NONPAGED_TEXT_START_ADDR): We have 8K pagesize.
+ (EXECUTABLE_SYMBOLS): Hardcode __DYNAMIC to zero for the time
+ being.
+
+ * emulparams/m68k4knbsd.sh: New file.
+
+ * scripttempl/aout.sc: Expand EXECUTABLE_SYMBOLS if relocating.
+
+Fri Oct 27 17:59:09 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/aix.em: Include ldctor.h.
+ (gld${EMULATION_NAME}_after_open): New static function.
+ (gld${EMULATION_NAME}_before_allocation): Call find_relocs.
+ (gld${EMULATION_NAME}_find_relocs): New static function.
+ (gld${EMULATION_NAME}_find_exp_assignment): New static function.
+ (ld_${EMULATION_NAME}_emulation): Use new after_open function.
+ * scripttempl/aix.sc: Use CONSTRUCTORS in .data.
+ * ldctor.c (struct set_info): Move definition into ldctor.h.
+ (struct set_element): Likewise.
+ (sets): Make non-static.
+ (ldctor_add_set_entry): Add name parameter. Save it in the new
+ set element.
+ (ldctor_build_sets): Avoid being called twice. Pass set element
+ name to lang_add_reloc.
+ * ldctor.h (struct set_info): Move definition here from ldctor.c.
+ (struct set_element): Likewise. Add new field name.
+ (sets): Declare.
+ (ldctor_add_set_entry): Declare new name parameter.
+ * ldwrite.c (build_link_order): Don't insist that either name or
+ section be NULL in a lang_reloc_statement.
+ * ldmain.c (add_to_set): Pass NULL to ldctor_add_new_set_entry for
+ new name parameter.
+ (constructor_callback): Pass name to ldctor_add_new_set_entry for
+ new name parameter.
+
+ * ldmisc.c (demangle): Fix indentation. Remove a leading period.
+
+Thu Oct 26 22:22:49 1995 Stan Shebs <shebs@andros.cygnus.com>
+
+ * mpw-config.in: Add PowerMac target support, generate config.h.
+ * mac-ld.r: New file, Mac resources.
+ * mpw-make.sed: New file, edits Makefile.in into MPW syntax.
+ * mpw-make.in: Remove.
+ * mpw-eppcmacos.c: Prebuilt version of PowerMac linking script.
+
+Thu Oct 26 14:11:26 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/aix.em (gld${EMULATION_NAME}_parse_args): Treat
+ -static as a synonym for -bnso.
+
+ * scripttempl/aix.sc: Move special symbols inside sections.
+ Always start .data at 0.
+
+Wed Oct 25 11:52:12 1995 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * Makefile.in (diststuff): Also make info.
+ (maintainer-clean realclean): Also delete *.info*.
+
+Wed Oct 25 11:27:25 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/aix.em: Add support for various AIX linker options,
+ for AIX import and export files, and for AIX shared objects.
+ * scripttempl/aix.sc: Add .pad. Put .ds just before the TOC.
+
+ * ldmain.c (main): Initialize new field link_info.static_link.
+
+ * ldmain.c (add_keepsyms_file): Add \n at end of einfo calls.
+ (constructor_callback): Likewise.
+ * ldmisc.c (vfinfo): Likewise.
+ * ldwrite.c (build_link_order): Likewise.
+
+ * ld.texinfo: The MRI ALIGN directive is supported.
+
+Mon Oct 23 11:46:43 1995 James G. Smith <jsmith@pasanda.cygnus.co.uk>
+
+ * emulparams/elf32vr4300.sh: Deleted.
+ * emulparams/elf32vr4300el.sh: Deleted.
+ * emulparams/elf32b4300.sh: Added.
+ * emulparams/elf32l4300.sh: Added.
+ * configure.tgt, Makefile.in: Updated the build to use the
+ new 8.3 unique names.
+
+Thu Oct 19 17:41:46 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlang.c (entry_symbol): Make non-static.
+ * ldlang.h (entry_symbol): Declare.
+
+ * ldlex.l: Treat PROVIDE as a keyword in expression state.
+
+Wed Oct 18 17:34:06 1995 steve chamberlain <sac@slash.cygnus.com>
+
+ * scripttempl/pe.sc (.bss): Move to be after .text
+
+Tue Oct 17 12:22:05 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/sunos.em (gld${EMULATION_NAME}_find_exp_assignment):
+ Search trinary.cond rather than searching trinary.lhs twice. From
+ linli@ihp.PHys.ethz.CH.
+
+ * emultempl/sunos.em (gld${EMULATION_NAME}_find_so): Move
+ directory searching code into gld${EMULATION_NAME}_search_dir.
+ (gld${EMULATION_NAME}_search_dir): New static function, extracted
+ from gld${EMULATION_NAME}_find_so.
+ (global_needed, global_found): New static variables.
+ (gld${EMULATION_NAME}_after_open): New static function.
+ (gld${EMULATION_NAME}_search_needed): New static function.
+ (gld${EMULATION_NAME}_try_needed): New static function.
+ (gld${EMULATION_NAME}_check_needed): New static function.
+ (ld_${EMULATION_NAME}_emulation): Use new after_open function.
+ * ld.texinfo, ld.1: Mention -rpath-link on SunOS.
+
+ * Makefile.in (eelf32ppc.c): Depend upon elf32.em, not generic.em.
+ (eelf32lppc.c): Likewise.
+ * emulparams/elf32lppc.sh (TEMPLATE_NAME): Define as elf32.
+ (GENERATE_SHLIB_SCRIPT): Define as yes.
+
+Mon Oct 16 19:11:13 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/elf32.em: Struct bfd_elf_link_needed_list is now named
+ bfd_link_needed-list; make appropriate changes.
+
+ * configure.tgt (powerpc-*-aix*): New target; use aixppc.
+ (rs6000-*-aix*): New target; use aixrs6.
+ * emulparams/aixppc.sh, emulparams/aixrs6.sh: New files.
+ * emultempl/aix.em: New file.
+ * scripttempl/aix.sc: New file.
+ * Makefile.in (ALL_EMULATIONS): Add eaixppc.o and eaixrs6.o.
+ (eaixppc.c, eaixrs6.c): New targets.
+
+Fri Oct 13 14:00:37 1995 Steve Chamberlain <sac@slash.cygnus.com>
+
+ * scripttempl/pe.sc (.reloc): Move to the end.
+
+Tue Oct 10 17:53:22 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlang.c (lang_finish): Don't try to use an entry_symbol from a
+ section which was not linked into the final output.
+
+Tue Oct 10 10:17:22 1995 steve chamberlain <sac@slash.cygnus.com>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_parse_args): Fix
+ fatal typos.
+
+Tue Oct 10 01:01:51 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld.h (args_type): Add rpath_link field.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_after_open): Search for
+ required dependencies in rpath_link path. Only search
+ LD_LIBRARY_PATH when configured native.
+ * lexsup.c (parse_args): Recognize -rpath-link.
+ * ld.1, ld.texinfo: Document -rpath-link.
+
+Sat Oct 7 17:07:17 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_after_open): Don't
+ bother searching for needed libraries unless doing a final link.
+
+Fri Oct 6 16:26:16 1995 Ken Raeburn <raeburn@cygnus.com>
+
+ Mon Sep 25 22:49:32 1995 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * ld.1: Fix formatting bugs.
+
+Wed Oct 4 17:37:46 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldexp.c (exp_get_abs_int): Return bfd_vma, not int.
+ * ldexp.h (exp_get_abs_int): Update declaration.
+ * ldlang.c (print_output_section_statement): Use fprintf_vma to
+ print return value of exp_get_abs_int.
+
+Mon Oct 2 13:56:09 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/elf32.em (global_stat): New file static variable.
+ (gld${EMULATION_NAME}_try_needed): Call stat_needed to make sure
+ that the file has not already been included under another name.
+ (gld${EMULATION_NAME}_stat_needed): New static function.
+
+Fri Sep 29 12:00:18 1995 Doug Evans <dje@deneb.cygnus.com>
+
+ * scripttempl/armcoff.sc: Start .text at 0x8000.
+ Start .data at 0x40000.
+
+Fri Sep 29 11:09:46 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/sunos.em (gld${EMULATION_NAME}_before_allocation): If
+ command_line.rpath is set, use it, rather than the -L options, to
+ build the rules section.
+ * ld.texinfo: Document this use of -rpath.
+
+ * lexsup.c (parse_args): Don't set link_info.shared for -assert
+ pure-text. Pass true, not 1, to lang_add_entry.
+ * emultempl/sunos.em (find_assign): New static variable.
+ (found_assign): New static variable.
+ (gld${EMULATION_NAME}_before_allocation): Rename local h to hdyn.
+ If not a relocateable link, and no start symbol was specified on
+ the command line, and there are any undefined symbols, set
+ link_info.shared. If link_info.shared is set, set the address of
+ the .text section to 0x20.
+ (gld${EMULATION_NAME}_find_assignment): Rename from
+ gld${EMULATION_NAME}_find_statement_assignment. If find_assign is
+ set, then just set found_assign based on whether an assignment is
+ found to find_assign.
+ (gld${EMULATION_NAME}_get_script): Don't use a special script when
+ producing a shared library.
+ * emulparams/sun4.sh (GENERATE_SHLIB_SCRIPT): Remove.
+ * scripttempl/aout.sc: Remove CREATE_SHLIB tests.
+ * ldlang.c (entry_from_cmdline): New global variable.
+ (lang_add_entry): Change cmdline parameter from int to boolean.
+ Use global entry_from_cmdline rather than function static
+ from_cmdline.
+ * ldlang.h (entry_from_cmdline): Declare.
+ (lang_add_entry): Change declaration of second parameter from int
+ to boolean.
+ * ldgram.y: Pass false, not 0, to lang_add_entry.
+
+Thu Sep 28 12:34:13 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld.h (parsing_defsym): Declare.
+ * ldlex.h (lex_string): Declare.
+ * ldlex.l (lex_string): Define.
+ * lexsup.c (parsing_defsym): Define.
+ (parse_args): In OPTION_DEFSYM case, set lex_string before calling
+ lex_redirect, and clear it after calling yyparse. Set
+ parsing_defsym around call to yyparse.
+ * ldmain.c (main): Set lex_string before calling lex_redirect, and
+ clear it after calling yyparse.
+ * ldmisc.c (vfinfo): For %S, handle --defsym arguments and built
+ in linker scripts correctly.
+
+ * scripttempl/sparccoff.sc: Add .ctors/.dtors handling like other
+ COFF targets, allowing for the leading underscore used on SPARC
+ COFF.
+
+ * lexsup.c (parse_args): Handle -assert.
+ * emulparams/sun4.sh (GENERATE_SHLIB_SCRIPT): Define.
+ * emultempl/sunos.em (gld${EMULATION_NAME}_get_script): Use the
+ shared library script when appropriate.
+ * scripttempl/aout.sc: If CREATE_SHLIB is set, start the .text
+ section at SIZEOF_HEADERS.
+
+Thu Sep 28 01:40:37 1995 Doug Evans <dje@deneb.cygnus.com>
+
+ * Makefile.in (earmcoff.c): Build.
+ * configure.tgt (arm-*-coff): New target
+ * emulparms/armcoff.sh: New file.
+ * scripttempl/armcoff.sc: New file.
+
+Tue Sep 26 10:59:32 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * scripttempl/i386coff.sc: Remove .data2; no longer needed.
+
+Fri Sep 22 18:09:02 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldfile.c (ldfile_set_output_arch): Make arch const.
+
+Thu Sep 21 17:55:24 1995 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * scripttempl/elfppc.sc: Correctly locate __bss_start at the
+ beginning of the .bss area, not at the end of data. Add
+ __sbss_{start,end} symbols.
+
+Wed Sep 20 12:29:36 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.in (CC_FOR_TARGET): Quote $(program_transform_name).
+ (CXX_FOR_TARGET, install): Likewise.
+
+Mon Sep 18 14:53:22 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ Based on patches by Alan Modra <alan@spri.levels.unisa.edu.au>:
+ * Makefile.in (CC_FOR_TARGET): Remove brokensed stuff.
+ (CXX_FOR_TARGET): Likewise.
+ (install): Likewise.
+ (GENERATED_HFILES): Remove config.h.
+ (.dep): Depend upon config.h.
+
+Mon Sep 18 14:39:38 1995 Arne H. Juul <arnej@pvv.unit.no>
+
+ * configure.tgt (mips*-dec-netbsd*): New target.
+
+Fri Sep 15 20:01:52 1995 Ken Raeburn <raeburn@cygnus.com>
+
+ * configure.host (m88*-*-dgux*): Fix another shell syntax error.
+
+Fri Sep 15 23:28:05 1995 Andrew Cagney <cagney@highland.com.au>
+
+ * configure.host (i[345]86-*-bsd*): Fix shell syntax error.
+
+Thu Sep 12 12:50:49 1995 steve chamberlain <sac@slash.cygnus.com>
+
+ * scripttempl/pe.sc: Allow both spellings of .ctors/.dtors.
+ Start .text section on the right boundary. Always align
+ stabs.
+
+Tue Sep 12 12:24:17 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.in (maintainer-clean): New target.
+
+ * ldmain.c (struct warning_callback_info): Define.
+ (warning_callback): Add new parameter symbol. Call
+ warning_find_reloc to try to find the section and VMA.
+ (warning_find_reloc): New static function.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation):
+ Pass NULL as symbol parameter to warning callback.
+
+ * ld.texinfo: Clarify -L option.
+
+ * ldlang.c (lang_one_common): Add cast to avoid warning.
+ (topower): Likewise. Also, reindent.
+ * ldwrite.c (clone_section): Change i to unsigned int.
+ * emultempl/sunos.em (gld${EMULATION_NAME}_before_allocation): Add
+ cast to avoid warning.
+
+Fri Sep 8 16:32:43 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.in (config.status): Depend upon configure.tgt.
+
+ * ldemul.h (ldemul_set_symbols): Declare.
+ (ldemul_parse_args): Declare.
+ * ldemul.c (ldemul_parse_args): Fix indentation.
+
+ * configure.in: Call AC_HEADER_DIRENT.
+ * configure, config.in: Rebuild.
+ * emultempl/sunos.em: Use autoconf recommend mechanism to define
+ DIR and struct dirent.
+
+ * configure.tgt (mips*-*-bsd*): New case.
+
+ * configure.host (i[345]86-sequent-ptx* | i[345]86-sequent-sysv*)
+ New case.
+ * configure.tgt (i[345]86-*-ptx*): New case.
+
+Thu Sep 7 10:48:26 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * config.in: Rename from config.h.in.
+ * configure.in: Call AC_CONFIG_HEADER with config.h:config.in.
+ Check for config.h:config.in when creating stamp-h.
+ * configure: Rebuild.
+ * Makefile.in (stamp-h): Depend upon config.in rather than
+ config.h.in. Set CONFIG_HEADERS to config.h:config.in when
+ calling config.status.
+
+ * Makefile.in (distclean): Remove config.h and stamp-h.
+
+ * configure.host (sparc-*-sunos64*): Remove.
+ * ldlang.c (lang_map): Check BFD64, not HOST_64_BIT.
+
+ * ldexp.c (exp_fold_tree): Don't warn about moving the location
+ counter backward in the absolute section.
+
+Wed Sep 6 14:42:11 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.in: Rewrite to use autoconf.
+ * configure.host: New file.
+ * configure.tgt: New file.
+ * aclocal.m4: New file.
+ * configure: New file, built by autoconf.
+ * acconfig.h: New file.
+ * config.h.in: New file, built by autoheader.
+ * sysdep.h: New file.
+ * ld.h: Incorporate old contents of config.h.
+ * config.h: Remove.
+ * Makefile.in: Various changes for new configure script. Also:
+ (CC_FOR_BUILD): Remove.
+ (ldmain.o): Don't bother to ensure that EMUL is non-empty.
+ (dep.sed): Use @SRCDIR@, not @srcdir@.
+ * dep-in.sed: Use @SRCDIR@, not @srcdir@.
+ * genscripts.sh: Create ldscripts if it does not exist.
+ * ldemul.c, lexsup.c, mpw-emipsidt.c: Don't include "config.h".
+ * mpw-esh.c, emultempl/*.em: Likewise.
+ * ldmain.c: Likewise. Include <ctype.h>. Don't try to set
+ HAVE_SBRK here.
+ * config/*.mt, config/*.mh: Remove.
+
+Tue Sep 5 14:55:24 1995 Ken Raeburn <raeburn@cygnus.com>
+
+ * configure.in: Treat ns32k-pc532-ux* like ns32k-pc532-mach*, and
+ ns32k-pc532-lites* like ns32k-pc532-netbsd*. From Ian Dall.
+
+Fri Sep 1 22:29:52 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * scripttempl/pe.sc: Fix typo in spelling of .ctors/.dtors.
+
+Fri Sep 1 13:13:29 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldmain.c (warning_callback): Add abfd, section, and address
+ parameters.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation):
+ Change call to warning accordingly.
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): If not
+ relocateable and not shared, put .gnu.warning.SYMBOL sections into
+ the .text section.
+
+Fri Sep 1 08:35:16 1995 James G. Smith <jsmith@beauty.cygnus.com>
+
+ * configure.in: Added mips*vr4300-idt-elf* and
+ mips*vr4300el-idt-elf* targets.
+ * Makefile.in: Added eelf32vr4300* targets.
+ * emulparams/{elf32vr4300.sh, elf32vr4300el.sh}: Added.
+ * config/{mips-vr4300.mt, mips-vr4300el.mt}: Added.
+
+Fri Sep 1 10:51:45 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * scripttempl/a29k.sc: Fix to be reasonable. From Brendan Kehoe
+ <brendan@cygnus.com>.
+
+Thu Aug 31 16:37:07 1995 steve chamberlain <sac@slash.cygnus.com>
+
+ * ldemul.c (ldemul_parse_args): New.
+ * ldemul.h (ld_emulation_xfer_struct): Add parse_args.
+ * lexsup.c (all pe stuff): Moved into pe.em
+ (parse_args): Call emulation arg parser.
+ * emultempl/pe.em (parse_args): handle PE specfic args.
+
+Thu Aug 31 17:01:37 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlang.c (lang_memory_region_lookup): Don't use the first region
+ as the default region. Create a new region instead.
+
+Tue Aug 29 14:21:41 1995 steve chamberlain <sac@slash.cygnus.com>
+
+ * ldemul.c (ldemul_set_symbols): New function.
+ * ldemul.h (ld_emulation_xfer_struct): Add set_symbols.
+ * ldmain.c (main): Add call to ldemul_set_symbols.
+ * lexsup.c (set_pe_value): New args.
+ (set_pe_name): New.
+ (parse_args): Cope with new set_pe_value args.
+ * emultempl/pe.em (set_symbols): New function.
+ (ld_emulation_xfer_struct): Add set_symbols.
+ * scripttempl/pe.sc: Use new symbols.
+
+Thu Aug 24 18:12:18 1995 Ian Lance Taylor (ian@cygnus.com)
+
+ * lexsup.c (parse_args): Don't call set_default_dirlist for -O.
+ For -Y, ignore a leading `P,', and only call set_default_dirlist
+ after processing all the other arguments.
+
+Tue Aug 22 07:36:58 1995 steve chamberlain <sac@slash.cygnus.com>
+
+ * scripttempl/pe.sc: Keep .edata, don't base stabs at 0.
+ * emulparams/armpe.sh: Run PE script.
+
+Mon Aug 21 18:30:42 1995 steve chamberlain <sac@slash.cygnus.com>
+
+ * ldmain.c (main): Remove PE stuff.
+ * lexsup.c (options): Load more PE options.
+ (set_pe_value): New function.
+
+Thu Aug 17 13:35:49 1995 steve chamberlain <sac@slash.cygnus.com>
+
+
+ * emultempl/{armpe.sc, i386pe.sc}: Deleted.
+ * emultempl/pe.sc: New file performs generic PE support and sorts
+ archive members.
+ * emulparams/{armpe.sh,i386pe.sh}: Use new file.
+ * scripttempl/{armpe.sc, i386pe.sc}: Deleted
+ * scripttempl/pe.sc: New.
+ * Makefile.in: Use new files.
+
+Thu Aug 17 14:46:34 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * scripttempl/h8500s.sc (.rdata): All data must go in data segment.
+ (.strings,.ctors,.dtors): Likewise.
+
+Wed Aug 16 11:38:59 1995 steve chamberlain <sac@slash.cygnus.com>
+
+ * scripttempl/armpe.sc: Always start code at 0x401000, even
+ if -r.
+ * ldwrite.c (strdup): New extern declaration.
+ * ldgram.y (atype): New rule to clarify type parsing.
+ * ldlang.c (init_os): Remove commented out code.
+ (lang_size_sections): Set SEC_ALLOC and SEC_LOAD bits
+ unless told not to by the link script.
+
+Wed Aug 16 11:45:11 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlang.c (lang_set_startof): New static function.
+ (lang_process): Call it.
+
+ * ldgram.y: Tweak casesymlist to avoid bison errors.
+
+ * lexsup.c (parse_args): Accept -h as a synonym for --soname, for
+ Solaris compatibility.
+
+Tue Aug 15 17:31:16 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldgram.y (YYDEBUG): If not defined, define as 1.
+ (CASE, EXTERN, START): New tokens.
+ (mri_script_command): Handle CASE, EXTERN, INCLUDE, START.
+ (casesymlist): New nonterminal.
+ (extern_name_list): New nonterminal.
+ * ldlex.l: Accept lower case trailing base specifiers. Don't
+ ignore the first digit when the base is a suffix. Accept many
+ EXPRESSION state tokens in MRI state. Support MRI continuation
+ lines and MRI semicolon comments. Accept all MRI keywords in
+ lower case. Add CASE, EXTERN, and START MRI keywords.
+
+Tue Aug 8 19:14:58 1995 Ken Raeburn <raeburn@kr-laptop.cygnus.com>
+
+ * emultempl/sunos.em (gld${EMULATION_NAME}_find_so): Use xmalloc
+ instead of alloca.
+
+Tue Aug 8 15:24:05 1995 J.T. Conklin <jtc@rtl.cygnus.com>
+
+ * Makefile.in (CC_FOR_TARGET, CXX_FOR_TARGET): Don't use
+ $r/../gcc/xgcc unless it is present.
+
+Thu Aug 3 11:56:22 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * scripttempl/m68kcoff.sc: Only put .ctors and .dtors in .text
+ when CONSTRUCTING.
+ * scripttempl/m68klynx.sc: Likewise.
+ * scripttempl/nw.sc: Likewise.
+ * scripttempl/sa29200.sc: Likewise.
+ * scripttempl/sparclynx.sc: Likewise.
+
+Fri Jul 28 12:02:23 1995 steve chamberlain <sac@slash.cygnus.com>
+
+ * emulparams/{z8001.sh, z8002.sh}: Fix typo.
+
+Thu Jul 27 21:06:21 1995 Ken Raeburn <raeburn@cygnus.com>
+
+ * configure.in (i[345]86-*-linuxoldld): Treat like linuxaout*.
+
+Thu Jul 27 15:26:28 1995 steve chamberlain <sac@slash.cygnus.com>
+
+ * scripttempl/i386pe.sc: Cope with constructors.
+ * scripttempl/z8ksim.sc: Deleted.
+ * scripttempl/z8000.sc: Resurrected as this, but
+ can handle z8001 and z8002 formats.
+ * emulparams/z8ksim.sh: Deleted.
+ * emulparams/{z8001.sh, z8002.sh}: New files.
+ * config/z8ksim.mt: Deleted
+ * config/z8k-coff.mt: New, generates both emulations.
+
+Tue Jul 25 14:53:02 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldmisc.c (vfinfo): In %C and %D case, always print the BFD using
+ %B, in case it is in an archive.
+
+Mon Jul 24 15:23:39 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlang.c (lang_process): Call reset_memory_regions for each
+ relaxation pass.
+
+Fri Jul 21 22:49:44 1995 Michael Meissner <meissner@cygnus.com>
+
+ * scripttempl/elfppc.sc: Add support for .sdata, .sbss, and
+ _SDA_BASE.
+
+Thu Jul 20 16:26:55 1995 Ken Raeburn <raeburn@cygnus.com>
+
+ * ldmain.c (constructor_callback): Allocate set_name in stack
+ frame, rather than always calling alloca with a fixed size.
+
+Wed Jul 19 16:21:43 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * emulparams/armpe.sh (OUTPUT_FORMAT): Change to pei-arm-little.
+ (LITTLE_OUTPUT_FORMAT, BIG_OUTPUT_FORMAT): Define.
+
+Mon Jul 17 13:57:00 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldwrite.c (clone_section): Set the alignment of the clone
+ section to that of the section being cloned.
+
+ * ldwrite.c (split_sections): Don't split the first input section
+ into a new output section.
+
+Sat Jul 15 00:26:35 1995 Michael Meissner <meissner@cygnus.com>
+
+ * emulparams/elf32ppc.sh (TEMPLATE_NAME): Define as elf32.
+ (GENERATE_SHLIB_SCRIPT): Define as yes.
+
+Fri Jul 14 12:11:46 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/mipsecoff.em (check_sections): Use %P, not %F.
+
+ * ldver.c (help): Update list of options to match currently
+ supported list.
+
+Thu Jul 13 13:52:10 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/lnk960.em (ld_lnk960_emulation): Initialize
+ after_open field.
+
+ * ldexp.c (exp_intop): Don't cast stat_alloc arg to bfd_size_type;
+ it takes a size_t anyhow.
+ (exp_binop): Likewise.
+ (exp_trinop): Likewise.
+ (exp_unop): Likewise.
+ (exp_nameop): Likewise.
+ (exp_assop): Likewise.
+ * ldlang.c (lang_memory_region_lookup): Likewise.
+ (init_os): Likewise.
+ (ldlang_add_undef): Likewise.
+ (insert_pad): Likewise.
+ * ldfile.c (ldfile_add_arch): Don't cast xmalloc arg to
+ bfd_size_type.
+
+ * Makefile.in (ALL_EMULATIONS): It's earmaoutb.o, not earmoutb.o.
+
+Wed Jul 12 11:32:22 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldemul.h (ldemul_open_dynamic_archive): Add search parameter to
+ declaration.
+ (ld_emulation_xfer_type): Add search parameter to
+ open_dynamic_archive entry point.
+ * ldemul.c (ldemul_open_dynamic_archive): Add search parameter.
+ * ldfile.c (ldfile_try_open_bfd): Rename from try_open_bfd, and
+ make non-static. Change all callers to use new name.
+ (ldfile_open_file_search): Make static. If entry is dynamic, call
+ ldemul_open_dynamic_archive.
+ (ldfile_open_file): Don't call ldemul_open_dynamic_archive.
+ * ldfile.h (ldfile_open_file_search): Don't declare.
+ (ldfile_try_open_bfd): Declare.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_open_dynamic_archive):
+ Accept search parameter. Don't search for a library, just look in
+ a single place.
+ * emultempl/linux.em (gld${EMULATION_NAME}_open_dynamic_archive):
+ Likewise.
+
+Tue Jul 11 16:44:21 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldmain.c (set_scripts_dir): Don't base script directory on
+ current directory.
+
+Tue Jul 11 12:29:02 1995 Rick Sladkey <jrs@world.std.com>
+
+ * ldmisc.c (vfinfo): Don't print the line number if it isn't
+ meaningful.
+
+Mon Jul 10 13:38:28 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld.h (ld_config_type): Add field warn_constructors.
+ * ldmain.c (add_to_set): Warn if config.warn_constructors.
+ (constructor_callback): Likewise.
+ * lexsup.c (parse_args): Handle -warn-constructors.
+ * ld.texinfo, ld.1: Document -warn-constructors.
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_check_needed): Don't
+ get confused by directory names if we searched for the file.
+
+ Based on patches from H.J. Lu <hjl@nynexst.com>:
+ * ldlang.h (lang_input_statement_type): Add new field dynamic.
+ * ldlang.c (new_afile): Set dynamic from config.dynamic_link.
+ * ldfile.c: Include bfdlink.h.
+ (ldfile_open_file): Check dynamic field of entry, not global
+ dynamic_link field. Don't do a dynamic search when doing a
+ relocateable link.
+ * ldmain.c (main): Don't warn about dynamic_link for a
+ relocateable link.
+ * emultempl/sunos.em (gld${EMULATION_NAME}_find_so): Skip file if
+ dynamic is false.
+ (gld${EMULATION_NAME}_create_output_section_statements): Always
+ loop over input files.
+ * Makefile.in: Rebuild dependencies.
+
+ * ld.texinfo, ld.1: Document -Bstatic, -Bdynamic, -Bshared, and
+ -shared.
+
+Mon Jul 10 13:29:43 1995 Eric Youngdale <eric@aib.com>
+
+ * ldmain.c (main): Set link_info.symbolic to false.
+ * lexsup.c (parse_args): Handle -Bsymbolic.
+
+Wed Jul 5 00:12:11 1995 Fred Fish (fnf@cygnus.com)
+
+ * ldmain.c (HAVE_SBRK): Define for everything except
+ specific systems that are known to not support sbrk.
+ (main): Use HAVE_SBRK to decide whether or not to use sbrk.
+
+Tue Jul 4 12:55:48 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_find_exp_assignment):
+ Handle etree_provide.
+
+ * emultempl/elf32.em (global_needed): New static variable.
+ (global_found): Likewise.
+ (gld${EMULATION_NAME}_after_open): New static function.
+ (gld${EMULATION_NAME}_search_needed): Likewise.
+ (gld${EMULATION_NAME}_try_needed): Likewise.
+ (gld${EMULATION_NAME}_check_needed): Likewise.
+ (ld_${EMULATION_NAME}_emulation): Replace after_open_default with
+ gld${EMULATION_NAME}_after_open.
+
+Mon Jul 3 14:26:37 1995 Steve Chamberlain <sac@slash.cygnus.com>
+
+ * configure.in (i386-*-win32): New target.
+
+Mon Jul 3 14:39:22 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * lexsup.c (parse_args): Let -G either set the small data size or
+ be equivalent to --shared, depending on the next argument. Accept
+ and ignore -z for Solaris compatibility.
+
+Sun Jul 2 17:52:34 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * lexsup.c (parse_args): Cast fopen result to PTR before storing
+ it in link_info.base_file. Fix indentation.
+
+Wed Jun 28 17:11:25 1995 Steve Chamberlain <sac@slash.cygnus.com>
+
+ * ldmain.c (main): Always initialize PE info in link_info.
+ * lexsup.c (OPTION_BASE_FILE): New option.
+ (parse_args): Handle new option.
+ * emulparams/armpe.sh: Output pei.
+ * emultempl/i386pe.em: Add newline to end.
+ * scripttempl/armpe.sc: Change output and quote the $s.
+ * scripttempl/i386pe.sc: Change output and quote the $s.
+
+Thu Jun 22 19:55:41 1995 Ken Raeburn <raeburn@cujo.cygnus.com>
+
+ Sun May 7 11:53:41 MDT 1995 Bryan Ford <baford@cs.utah.edu>
+
+ * configure.in (i386-*-msdos*, i386-*-moss*): New targets.
+ * Makefile.in (ALL_EMULATIONS): Added i386msdos.o.
+ (i386msdos.o): New target.
+ * config/i386-msdos.mt: Created.
+ * emulparams/i386msdos.sh: Created.
+ * scripttempl/i386msdos.sc: Created.
+
+Thu Jun 22 15:06:35 1995 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * scripttempl/elfppc.sc (.fixup): Add support for a .fixup section
+ that contains pointers to be relocated.
+
+Tue Jun 20 17:47:20 1995 Stan Shebs <shebs@andros.cygnus.com>
+
+ * mpw-esh.c: New file, modified for MPW from esh.c.
+ * scripttempl/sh.sc: Reformatted to simplify MPWification,
+ use *() to concat stab sections instead of [].
+
+Thu Jun 15 08:48:16 1995 Steve Chamberlain <sac@slash.cygnus.com>
+
+ * scripttempl/armpe.sc: Add constructor support.
+
+Tue Jun 13 09:11:20 1995 Steve Chamberlain <sac@slash.cygnus.com>
+
+ * ldlang.c (lang_size_sections): Any section with a DATA
+ statement has contents.
+
+Sun Jun 11 15:20:46 1995 Ken Raeburn <raeburn@cujo.cygnus.com>
+
+ * emulparams/m68kelf.sh (NOP): Define.
+ (DYNAMIC_LINK): Don't define.
+ (TEXT_START_ADDR): Set to 0x80000000; the extra 0x100 for headers
+ will come from the linker script.
+
+Thu Jun 8 14:17:33 1995 Steve Chamberlain <sac@slash.cygnus.com>
+
+ * emulparams/armpe.sh, scripttempl/armpe.sc: Add end and stack.
+
+Mon Jun 5 02:16:24 1995 Ken Raeburn <raeburn@kr-laptop.cygnus.com>
+
+ * configure.in (i[345]86-*-gnu*): Use GNU elf config.
+
+Thu May 25 11:49:28 1995 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ From Andrew Cagney <cagney@highland.com.au>
+ * Makefile.in: Fixup more gotchas from renaming elf32ppcle to
+ elf32lppc.
+
+Wed May 24 11:23:21 1995 Steve Chamberlain <sac@slash.cygnus.com>
+
+ Add support for ARM-PE.
+ * Makefile.in (ALL_EMULATIONS): Add armpe.o
+ * configure.in: Recognize armpe.
+ * config/arm-pe.mt: New file.
+ * emulparams/armpe.sh: New file.
+ * scripttempl/armpe.sc: New file.
+
+
+Mon May 22 15:19:26 1995 Doug Evans <dje@chestnut.cygnus.com>
+
+ * configure.in (h8300h-*-hms): Deleted
+ * config/cf-h8300h.mt: Deleted.
+
+Thu May 18 04:26:10 1995 Ken Raeburn <raeburn@kr-laptop.cygnus.com>
+
+ Wed May 10 14:28:16 1995 Richard Earnshaw (rearnsha@armltd.co.uk)
+
+ From David Taylor (dtaylor@armltd.co.uk)
+ * Makefile.in (ALL_EMULATIONS): Add earmout[lb].o
+ * configure.in: Recognize arm{,e[lb]-*-aout.
+ * config/arm[lb]-aout.mt: New files.
+ * emulparams/armaout[lb].sh: New files.
+ * scripttempl/armaout.sc: New file.
+
+Tue May 16 18:27:11 1995 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * config/ppcle-elf32.mt (EMUL): Use elf32lppc, not elf32ppcle, to
+ be unique in 8 characters for DOS.
+
+ * emulparams/elf32lppc.sh: New file, renamed from elf32ppcle.sh.
+ * emulparams/elf32ppcle.sh: Deleted.
+
+Fri May 12 11:03:55 1995 Steve Chamberlain <sac@slash.cygnus.com>
+ Tom Griest <griest@cs.yale.edu>
+
+ Initial support for PE executables (eg NT, win32)
+
+ * Makefile.in (configure.in, ei386pe): Add support.
+ * ldmain.c (main): Initialize PE argument info.
+ * ldwrite.c (print_file_stuff): Don't print out .drectve
+ and .debug section info.
+ * lexsup.c (set_subsystem, set_stack_heap, OPTION_HEAP,
+ OPTION_SUBSYSTEM, parse_argsm set_subsystem, set_stack_heap):
+ Handle new arguments.
+ * config/i386-pe.mt, emultempl/i386pe.em, scripttempl/i386pe.sc:
+ New files
+
+Wed May 10 18:37:59 1995 Stu Grossman (grossman@andros.cygnus.com)
+
+ * scripttempl/hppaelf.sc: Remove .PARISC.unwind section from text
+ segment. This allows ld -r to preserve unwind sections.
+
+Tue May 9 17:19:57 1995 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * configure.in: Add little endian PowerPC support.
+
+ * Makefile.in (ALL_EMULATIONS): Add eelf32ppcle.o.
+ (eelf32ppcle.c): Support for little endian PowerPC.
+
+ * config/ppcle-elf32.mt: New file for little endian PowerPC.
+ * emulparams/elf32ppcle.sh: Ditto.
+
+Wed May 3 12:56:32 1995 Ken Raeburn <raeburn@cujo.cygnus.com>
+
+ * ldlang.c (print_output_section_statement): Check
+ subsection_alignment, instead of checking section_alignment twice.
+ Noticed by Alan Modra <alan@spri.levels.unisa.edu.au>.
+
+Tue May 2 16:36:07 1995 Jeff Law (law@snake.cs.utah.edu)
+
+ * configure.in (hppa*-*-lites*): Handle like hppa*-*-*elf*.
+
+Mon Apr 24 19:21:02 1995 Michael Meissner <meissner@cygnus.com>
+
+ * ldwrite.c (ldwrite): Before doing anything, reset the error
+ code. If bfd_final_link returns an error, but the error code is
+ unset, don't issue an extra message. Assume a correct error
+ message was already set.
+
+Fri Apr 14 16:31:24 1995 Ken Raeburn <raeburn@cujo.cygnus.com>
+
+ * Makefile.in (ALL_EMULATIONS): Added em68kelf.o.
+ (em68kelf.o): New target.
+ * config/m68k-elf.mt, emulparams/m68kelf.sh: New files.
+ * configure.in: Use them for m68*-*-elf.
+
+Tue Apr 11 12:02:03 1995 Stan Shebs <shebs@andros.cygnus.com>
+
+ Merge in support for Mac MPW as a host.
+ (Old change descriptions retained for informational value.)
+
+ * mpw-config.in (i386-unknown-aout): Change to i386-unknown-go32.
+ (i386-unknown-coff): Remove.
+ (sh-hitachi-hms): New target.
+ (emulation_ofiles): Set correctly for each target.
+ (version, TDEFINES): Add to makefile fragment.
+ * mpw-make.in (BISON): Use byacc instead of bison.
+ (em_*.c): Replace with e*.c everywhere.
+ (ldgram.h): Separate action from ldgram.c generation.
+ (LD_PROG): Depend on Version.r.
+ (Version.r): generate from version info.
+ * mpw-emipsidt.c: New file, modified for MPW from emipsidt.c.
+
+ * mpw-config.in (m68k-apple-macos, ppc-apple-macos,
+ i386-unknown-aout, i386-unknown-coff): New targets.
+ (m68k-aout, m68k-coff): Remove targets.
+ (mk.tmp): Add definition of EMUL.
+
+ * mpw-config.in (emulname): Set based on target.
+ (ldemul-list.h): Construct.
+ * mpw-make.in (install-only): New target.
+ (install): Depend on install-only.
+
+ * mpw-make.in (bindir): Fix pathname.
+ (install): Move here from mpw-build.in.
+
+ * mpw-config.in: New file, MPW configuration fragment.
+ * mpw-make.in: New file, MPW makefile fragment.
+ (This file is semi-automatically generated from Makefile.in.)
+ * ldfile.c (slash): If MPW, set to `:'.
+ * ldlex.l (TRUE_FALSE_ALREADY_DEFINED): If MPW, set this to
+ prevent redefinition errors.
+
+Tue Apr 4 17:55:18 1995 Steve Chamberlain <sac@bang.hack.com>
+
+ * ldwrite.c (clone_section): Align clone sections on even
+ boundaries.
+
+Thu Mar 30 14:32:26 1995 H.J. Lu (hjl@nynexst.com)
+
+ * configure.in: Change linux to default to elf. Using
+ i[345]86-*-linuxaout will build a linker which defaults to a.out.
+ * config/i386-laout.mt: Rename from old config/i386-linux.mt.
+ * config/i386-linux.mt: Rename from old config/i386-lelf.mt.
+ * config/i386-lelf.mt: Remove.
+
+Thu Mar 30 13:09:46 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldmain.c (main): If opening the map file fails, call
+ bfd_set_error before calling einfo.
+
+ * ld.texinfo, ld.1: Document the -no-keep-memory option.
+
+Mon Mar 27 11:10:08 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldmain.c (main): Revert patch of March 10, since the SVR4 linker
+ does mark shared libraries as executable.
+
+Tue Mar 21 15:15:38 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlang.c (lang_common): Change power to int. Pass larger values
+ before smaller values.
+ (lang_one_common): Treat info as int *. Don't bother to check for
+ last value, since it is now zero.
+
+Sat Mar 18 01:49:14 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlang.c (load_symbols): An empty archive is OK.
+
+Fri Mar 17 16:15:31 1995 Stan Shebs <shebs@andros.cygnus.com>
+
+ * ldmain.c (progress.h): Include.
+ (main): Call START_PROGRESS and END_PROGRESS.
+
+Thu Mar 16 17:17:33 1995 Michael Meissner <meissner@cygnus.com>
+
+ * scripttempl/elfppc.sc: Move _GOT2_END_ after the .ctors and
+ .dtors sections, so that these pointers get relocated also.
+ Define the symbols __{C,D}TOR_{LIST,END}__ to mark the beginning
+ and end of the constructors/destructors.
+
+Thu Mar 16 13:59:14 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * ldlang.c (load_symbols): If whole_archive is true and ENTRY
+ describes an archive, call bfd_link_add_symbols on each member.
+ * ldmain.c (whole_archive): New variable.
+ (main): Initialize it to false.
+ * ldmain.h: Declare whole_archive.
+ * lexsup.c (parse_args): Grok --whole-archive switch.
+ * ld.texinfo, ld.1: Document --whole-archive.
+
+Thu Mar 16 11:38:48 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * genscripts.sh (EMULATION_NAME): Set LIB_PATH to empty when not
+ using the default emulation.
+
+ * config/dgux.mh (HOSTING_EMU): Use -m rather than trying to set
+ LDEMULATION.
+ * config/hppaelf.mh (HOSTING_EMU): Likewise.
+
+Tue Mar 14 12:28:03 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/sunos.em (gld${EMULATION_NAME}_find_so): Set force_maj
+ for -lc.N. From H.J. Lu <hjl@nynexst.com>.
+
+Fri Mar 10 14:43:48 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldmain.c (main): Don't set EXEC_P if link_info.shared is set.
+
+ * ldlex.l: Return -lFILENAME as the token LNAME.
+ * ldgram.y: Add token LNAME.
+ (input_list): Treat LNAME like NAME, but pass it to
+ lang_add_input_file as lang_input_file_is_l_enum.
+ * ld.texinfo: Document using -lFILENAME in INPUT.
+
+Thu Mar 9 12:21:51 1995 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * ldlang.c (lang_check): If the architectures are compatible call
+ bfd_merge_private_bfd_data to let the backend do additional
+ checks.
+
+Tue Mar 7 00:53:08 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldemul.c (ldemul_choose_mode): If emulation not recognized, list
+ all supported emulations.
+
+Mon Mar 6 14:03:50 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldemul.c (ldemul_list_emulations): New function.
+ * ldemul.h (ldemul_list_emulations): Declare.
+ * ldver.c (help): List supported targets and emulations.
+
+Fri Mar 3 15:40:36 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * scripttempl/elf.sc (.debug): Relocate to address 0.
+ (.debug_srcinfo, .debug_aranges, .debug_pubnames,
+ .debug_sfnames, .line): Likewise.
+
+Fri Mar 3 17:07:14 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/elf32.em (hold_rel): New static variable.
+ (gld${EMULATION_NAME}_place_orphan): Place readonly sections with
+ contents whose names begin with ".rel" after hold_rel. Remove the
+ assertion which checked for unplaced .rel sections. Don't try to
+ sort the section into place if place->bfd_section is NULL.
+ (gld${EMULATION_NAME}_place_section): Set hold_rel to the first
+ section beginning with ".rel".
+
+Thu Mar 2 14:34:43 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ Doc note from pierre@phi.la.tce.com (Pierre Willard):
+ * ld.texinfo: -X and -x work even if -s or -S are not specified.
+ * ld.1: Similar change.
+
+Wed Mar 1 13:51:16 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * emulparams/gld960coff.sh (COFF_CTORS): Define.
+ * scripttempl/i960.sc: Use COFF_CTORS if CONSTRUCTING.
+
+Tue Feb 28 12:42:56 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.in (i[345]86-*-linuxelf*): New target. Use i386-lelf.
+ (i[345]86-*-gnuelf*): New target. Use i386-gelf.
+ * config/i386-lelf.mt: New file.
+ * config/i386-gelf.mt: New file.
+
+Tue Feb 28 10:27:54 1995 Rob Savoye <rob@darkstar.cygnus.com>
+
+ * configure.in: Match on mips-ecoff, and default to the IDT
+ configuration.
+
+Fri Feb 17 13:06:47 1995 Michael Meissner <meissner@cygnus.com>
+
+ * scripttempl/elfppc.sc: Add support for .got1 and .got2 sections.
+ Offset _GLOBAL_OFFSET_TABLE_ 32768 from the start of the GOT area
+ to double the size of the table.
+
+Thu Feb 9 18:29:43 1995 Ken Raeburn <raeburn@cujo.cygnus.com>
+
+ * Makefile.in (distclean): Do recursive deletion, since ldscripts
+ is a directory.
+
+Thu Feb 9 11:38:22 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldmain.c (main): If trace_file_tries is true, and we are using
+ an internal linker script, print out the script.
+ * ldfile.c (try_open): Reindent function. Make the messages about
+ opening script files more informative.
+
+ * lexsup.c (parse_args): For -V, call ldversion with 1, not 0.
+ * ld.texinfo, ld.1: Update accordingly.
+
+Wed Feb 8 17:34:45 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlang.c (lang_one_common): Adjust references to common symbol
+ information for new structure.
+
+Mon Feb 6 12:17:24 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldmain.c (undefined_symbol): Handle section being NULL.
+
+ * ldctor.c (ldctor_build_sets): Handle bfd_link_hash_defweak.
+ * ldexp.c (fold_name): Likewise.
+ * ldlang.c (print_one_symbol): Likewise.
+ (lang_finish): Likewise.
+ * ldmain.c (multiple_common): Likewise.
+ * ldwrite.c (print_symbol): Likewise. Also, bfd_link_hash_weak
+ renamed to bfd_link_hash_undefweak.
+
+ * scripttempl/alpha.sc: Set address of .data section correctly
+ when -n or -N is used. Patch from Chris G Demetriou
+ <Chris_G_Demetriou@LAGAVULIN.PDL.CS.CMU.EDU>.
+ * scripttempl/mips.sc: Similar change.
+
+Tue Jan 31 16:20:52 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * ldlang.c (lang_size_sections): Clarify error message when user
+ specified start addr conflicts with region. Fix resetting of
+ region pointer.
+
+Tue Jan 31 12:37:09 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldexp.c (fold_name): In case NAME, permit an absolute symbol
+ in lang_allocating_phase_enum.
+
+Mon Jan 30 11:33:25 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.in (distclean): Depend upon clean. Don't bother to
+ remove files which will be removed by clean. From patch by
+ alan@SPRI.Levels.UniSA.Edu.Au (Alan Modra).
+
+Fri Jan 27 16:27:34 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): For
+ a MIPS target, clobber the size of all but the first input
+ .reginfo section to be 0, so that lang_size_sections sets the
+ correct size for the output .reginfo section.
+
+Thu Jan 26 19:53:37 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation):
+ Remove unused variable is.
+
+Thu Jan 26 12:33:05 1995 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * configure.in: Add support for powerpc-*-eabi.
+
+ * scripttempl/elfppc.sc: New file for PowerPC embedded ABI
+ support.
+
+ * emulparams/elf32ppc.sh (SCRIPT_NAME): Use elfppc.sc instead of
+ elf.sc, which defines some new symbols PowerPC elf needs.
+
+Tue Jan 24 10:32:15 1995 Ian Lance Taylor <ian@sanguine.cygnus.com>
+
+ * ldctor.c (ldctor_add_set_entry): Don't dump core if a
+ constructor entry is in the absolute section.
+
+Mon Jan 23 13:58:13 1995 Ian Lance Taylor <ian@sanguine.cygnus.com>
+
+ * configure.in (i[345]86-*-gnu*): Set ld_target to i386-gnu.
+ * config/i386-gnu.mt: New file. Include ELF support.
+
+Thu Jan 19 16:22:11 1995 Ian Lance Taylor <ian@sanguine.cygnus.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): If
+ there are any input sections named .gnu.warning, treat them as
+ containing a warning message to be printed by the linker, and
+ clobber the size so that the message is not copied into the output
+ file.
+ * scripttempl/elf.sc: Put .gnu.warning sections into the .text
+ section.
+
+Sun Jan 15 16:45:00 1995 Steve Chamberlain <sac@splat>
+
+ * configure.in (w65-*-*): New target.
+ * Makefile.in: Update.
+ * scripttempl/w65.sc: New.
+ * config/coff-w65.mt: New.
+
+Thu Jan 12 01:32:25 1995 Ian Lance Taylor <ian@tweedledumb.cygnus.com>
+
+ * ldlang.c (lang_place_orphans): Don't ignore files with
+ just_syms_flag set. Instead, put all their sections in
+ bfd_abs_section_ptr, using the section VMA as the output_offset.
+
+Wed Jan 11 22:59:09 1995 Ken Raeburn <raeburn@cujo.cygnus.com>
+
+ * ldctor.c (ldctor_build_sets): Don't use `const' with typedef
+ name `reloc_howto_type', since it's now defined to be const.
+ * ldlang.c (lang_add_reloc): Ditto.
+ * ldlang.h (lang_reloc_statement_type, lang_add_reloc): Ditto.
+
+Wed Jan 11 11:24:45 1995 Ian Lance Taylor <ian@sanguine.cygnus.com>
+
+ * ldexp.c (fold_binary): Adding or subtracting an absolute value
+ to a relative value does not require forcing the relative value to
+ be absolute. Also, reindent function.
+
+Wed Dec 28 22:05:52 1994 Steve Chamberlain (sac@jonny.cygnus.com)
+
+ * ldwrite.c (clone_section): Create a symbol with the
+ same name as the section.
+
+Mon Dec 19 14:02:13 1994 Steve Chamberlain (sac@jonny.cygnus.com)
+
+ * ld.h (split_by_reloc, split_by_file): New flags.
+ * ldwrite.c (clone_section, split_sections): New functions.
+ * lexsup.c (parse_args): Understand new split options.
+
+Fri Dec 9 17:22:55 1994 Ian Lance Taylor <ian@sanguine.cygnus.com>
+
+ * scripttempl/elf.sc: Move .ctors and .dtors from .text segment to
+ .data segment. They must be writable when creating a shared
+ library. From H.J. Lu <hjl@nynexst.com>.
+
+Fri Dec 2 14:09:00 1994 Ian Lance Taylor <ian@rtl.cygnus.com>
+
+ * emultempl/miposecoff.em: New file.
+ * emulparams/mipsidt.sh (TEMPLATE_NAME): Set to mipsecoff.
+ * emulparams/mipsidtl.sh (TEMPLATE_NAME): Likewise.
+ * scripttempl/mips.sc: Put .rel.sdata sections in .text, and
+ provide __runtime_reloc_start and __runtime_reloc_stop if they are
+ used. Align _fdata to a 16 byte boundary.
+ * Makefile.in (emipsidt.c): Depend upon mipsecoff.em rather than
+ generic.em.
+ (emipsidtl.c): Likewise.
+ (check): Pass CC_FOR_HOST and CFLAGS_FOR_HOST to runtest.
+
+ * ld.h (args_type): Add new field embedded_relocs.
+ * ldemul.h (ldemul_after_open, after_open_default): Declare.
+ (ld_emulation_xfer_struct): Add new field after_open.
+ * ldemul.c (ldemul_after_open): New function.
+ (after_open_default): New function.
+ * ldlang.c (lang_process): Call ldemul_after_open.
+ * lexsup.c (parse_args): Handle --embedded-relocs.
+ * emultempl/elf32.em (ld_${EMULATION_NAME}_emulation): Initialize
+ new after_open field to after_open_default.
+ * emultempl/generic.em, emultempl/gld960.em: Likewise.
+ * emultempl/gld960c.em, emultempl/hppaelf.em: Likewise.
+ * emultempl/linux.em, emultempl/m88kbcs.em: Likewise.
+ * emultempl/sunos.em, emultempl/vanilla.em: Likewise.
+ * ld.texinfo, ld.1: Mention -embedded-relocs.
+
+Wed Nov 23 22:04:47 1994 Steve Chamberlain (sac@jonny.cygnus.com)
+
+ * Makefile.in: Add eshl.o.
+ * config/coff-sh.mt: Add shl emulation.
+
+Tue Nov 22 11:55:37 1994 Ian Lance Taylor <ian@sanguine.cygnus.com>
+
+ * scripttempl/elf.sc: Fill .text section with NOPS. From Eric
+ Youngdale <eric@aib.com>.
+
+Thu Nov 17 14:39:48 1994 Ian Lance Taylor <ian@sanguine.cygnus.com>
+
+ Patches from pirker@eiunix.tuwien.ac.at (Martin Pirker).
+ * config/i386linux.mh: New file; set HOSTING_CRT0.
+ * genscripts.sh: Don't put ${libdir} in LIB_PATH if it is
+ /usr/lib, since that is already in LIB_PATH.
+
+Wed Nov 16 10:03:03 1994 Jeff Law (law@snake.cs.utah.edu)
+
+ * scripttempl/hppaelf.sc (.text): Handle a use rdefined text start
+ address.
+ (.data, .bss): If "-N", then place the data/bss just after the end
+ of the .text section rather than at the default 0x40000000.
+
+ * scripttempl/hppaelf.sc (.text): Place unwind descriptors in the
+ text segment.
+
+Sat Nov 12 15:55:56 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ Patches from Eric Youngdale <eric@aib.com>:
+ * ldlang.c (lang_finish): Don't warn if entry symbol not found
+ when generating a shared library.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Warn if
+ attempting to place an orphaned relocation section when generating
+ a dynamically linked object.
+
+ * scripttempl/elf.sc: Add ENTRY(${ENTRY}), and default ${ENTRY} to
+ _start.
+
+Fri Nov 11 14:27:23 1994 Ian Lance Taylor <ian@sanguine.cygnus.com>
+
+ * ld.h (args_type): Add field export_dynamic.
+ * lexsup.c (parse_args): Recognize --export-dynamic.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation):
+ Pass export_dynamic argument to bfd_elf32_size_dynamic_sections.
+
+Wed Nov 9 12:47:11 1994 Ian Lance Taylor <ian@sanguine.cygnus.com>
+
+ * ldlang.c (lang_one_common): Set SEC_ALLOC in any section where
+ we allocate common symbols.
+
+Tue Nov 8 17:50:43 1994 Eric Youngdale (eric@aib.com)
+
+ * scripttempl/elf.sc: Add .rel.init, .rela.init, .rel.fini, and
+ .rela.fini to the list of .rel* sections.
+
+Tue Nov 8 17:47:45 1994 Ian Lance Taylor <ian@sanguine.cygnus.com>
+
+ * ldlang.c (load_symbols): Add new argument place. Only accept
+ linker scripts if place is not NULL. Put commands found in an
+ assumed linker script into place.
+ (lookup_name): Pass NULL as place argument to load_symbols.
+ (open_input_bfds): In lang_input_statement_enum case, pass a place
+ argument to load_symbols, and store any new statements after the
+ current one.
+
+Mon Nov 7 15:53:02 1994 Ken Raeburn <raeburn@cujo.cygnus.com>
+
+ * ldver.c (ldversion): Bump to 2.5.3.
+
+Fri Nov 4 15:11:26 1994 Ken Raeburn <raeburn@cujo.cygnus.com>
+
+ * Makefile.in (e*nbsd.c): Fix typo in dependencies.
+
+Thu Nov 3 19:35:44 1994 Ken Raeburn <raeburn@cujo.cygnus.com>
+
+ * Makefile.in (check): Add missing "else true" clause.
+
+ * emulparams/vax.sh (OUTPUT_FORMAT): Use "a.out".
+
+ * scripttempl/go32coff.sc: Changes from DJ Delorie: Change default
+ entry point to "start". Align at end of each section to 0x200.
+ Start .text section 0x1000 later. Add _etext, _edata, _end
+ symbols.
+
+Wed Nov 2 12:17:49 1994 Ian Lance Taylor <ian@sanguine.cygnus.com>
+
+ * ldctor.c (ldctor_add_set_entry): Don't permit a set to be
+ composed of different object file formats.
+ (ldctor_build_sets): If the output format does not support the
+ reloc, and we are not generating a relocateable link, try getting
+ the reloc from the input format.
+
+Tue Nov 1 10:30:19 1994 J.T. Conklin (jtc@rtl.cygnus.com)
+
+ * Makefile.in (ALL_EMULATIONS): Added em68knbsd.o.
+ (em68knbsd.c): New target.
+
+ * config/m68k-nbsd.mt: New file.
+ * emulparams/m68knbsd.sh: New file.
+ * configure.in (m68*-*-netbsd*): Use above configs.
+
+Mon Oct 31 19:35:17 1994 Ian Lance Taylor <ian@sanguine.cygnus.com>
+
+ * emultempl/sunos.em (gld${EMULATION_NAME}_find_so): If we find an
+ appropriately named static library, stop the search at that
+ directory.
+
+Wed Oct 26 13:59:12 1994 J.T. Conklin (jtc@phishhead.cygnus.com)
+
+ * Makefile.in (ALL_EMULATIONS): Added ei386nbsd.o, ens32knbsd.o
+ and esparcnbsd.o; sorted entries.
+ (ei386nbsd.c,ens32knbsd.c,esparcnbsd.c): New targets.
+
+ * config/netbsd532.mt: Removed.
+ * emulparams/netbsd532.sh: Removed.
+
+ * config/{i386-nbsd.mt,ns32k-nbsd.mt,sparc-nbsd.mt}: New files.
+ * emulparams/{i386nbsd.sh,ns32knbsd.sh,sparcnbsd.sh}: New files.
+ * configure.in (i[345]86-*-netbsd*, ns32k-pc532-netbsd*,
+ sparc*-*-netbsd*): Use above configs.
+
+Tue Oct 25 11:47:10 1994 Ian Lance Taylor <ian@sanguine.cygnus.com>
+
+ * ldmain.c (multiple_common): One of the types may now be
+ bfd_link_hash_indirect. The old BFD argument may be NULL.
+
+Thu Oct 20 22:01:39 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * configure.in: Add * at the end of m68k-hp-hpux.
+
+Tue Oct 18 15:58:39 1994 Ian Lance Taylor <ian@sanguine.cygnus.com>
+
+ * ldlex.l: Cast assignment to yy_ch_buf field to char *, not to
+ YY_CHAR *.
+
+Mon Oct 17 14:53:16 1994 J.T. Conklin (jtc@phishhead.cygnus.com)
+
+ * scripttempl/nw.sc: Gather constructors and destructors and
+ define __CTOR__LIST__ and __DTOR_LIST__ appropriately.
+
+Fri Oct 14 14:35:38 1994 J.T. Conklin (jtc@rtl.cygnus.com)
+
+ * Makefile.in (ALL_EMULATIONS): Add ei386nw.o and eppcnw.o.
+ (ei386nw.c, eppcnw.c): New targets.
+
+ * config/{i386,ppc}-nw.mt, emulparams/{i386,ppc}nw.sh,
+ scripttempl/nw.sc: New files, for i386 and powerpc netware.
+
+ * configure.in: Changed netware ld_target name to be {i386,ppc}-nw
+ instead of {i386,ppc}-elf.
+
+ * configure.in (sparc*-*-netware): Removed. There is no such
+ thing anymore.
+
+ * ldint.texinfo: Move misplaced `@end iftex'.
+
+Fri Oct 14 12:02:18 1994 Eric Youngdale (eric@aib.com)
+
+ * scripttempl/elf.sc: Add .rel.ctors, .rela.ctors, .rel.dtors, and
+ .rela.dtors to the list of .rel* sections.
+
+Thu Oct 13 14:16:27 1994 Ken Raeburn <raeburn@cujo.cygnus.com>
+
+ * ldver.c (ldversion): Update to version 2.5.
+ * Version 2.5 released.
+
+ * configure.in (all_targets): Handle i386-linux*.
+
+Thu Oct 13 11:24:33 1994 Ian Lance Taylor <ian@sanguine.cygnus.com>
+
+ * scripttempl/aout.sc: Set _etext and __etext to ., not
+ ${DATA_ALIGNMENT}. This is compatible with SunOS, and, with luck,
+ will not break any other system. From Eric Valette
+ <ev@chorus.fr>.
+
+Wed Oct 12 16:22:58 1994 Ian Lance Taylor <ian@sanguine.cygnus.com>
+
+ * lexsup.c (parse_args): Change -V to be a synonym for -v. Add
+ --verbose to get the old -V behaviour.
+ * ld.1, ld.texinfo: Document this change.
+
+Tue Sep 27 14:56:20 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Remove
+ assertion, since it could fail with a user defined linker script.
+
+ * ldexp.c (fold_name): For DEFINED case, don't try to look up the
+ name in the hash table during the first phase--the hash table does
+ not even exist at that point, much less have the right value.
+
+ * Makefile.in (CC): Define.
+ (CXX): Move definition, change from g++ to gcc.
+ (EXPECT, RUNTEST): Copy definitions from top level Makefile.in.
+ (RUNTEST_CC, RUNTEST_CFLAGS): Remove.
+ (RUNTEST_CXX, RUNTEST_CXXFLAGS): Remove.
+ (CC_FOR_TARGET, CXX_FOR_TARGET): Copy from top level Makefile.in.
+ (.cc.o): Comment out.
+ (testdir): Remove.
+ (site.exp): Don't create testdir or set tmpdir.
+ (check): Run checks even if not running native. Use CC_FOR_TARGET
+ instead of RUNTEST_CC, and likewise for CXX.
+ (cdtest targets): Comment out.
+ * config/solaris2.mh (HOSTING_LIBS): Only mention crtend.o once.
+ * testsuite/ld-cdtest/cdtest-bar.cc,
+ testsuite/ld-cdtest/cdtest-foo.cc,
+ testsuite/ld-cdtest/cdtest-foo.h,
+ testsuite/ld-cdtest/cdtest-main.cc,
+ testsuite/ld-cdtest/cdtest.exp: Remove.
+
+Mon Sep 26 11:40:30 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ * emulparams/elf32bmip.sh: Rename from elf32mipb.sh to avoid DOS
+ file naming problems.
+ * emulparams/elf32lmip.sh: Rename from elf32mipl.sh.
+ * Makefile.in (ALL_EMULATIONS): Rename eelf32mipb.o to
+ eelf32bmip.o and eelf32mipl.o to eelf32lmip.o.
+ (eelf32bmip.c): Rename from eelf32mipb.c. Use elf32bmip.sh.
+ (eelf32lmip.c): Rename from eelf32mipl.c. Use elf32lmip.sh.
+ * config/mipsb-elf32.mt (EMUL): Use elf32bmip, not elf32mipb.
+ * config/mipsl-elf32.mt (EMUL): Use elf32lmip, not elf32mipl.
+
+ * genscripts.sh: Always search /usr/local/TARGET/lib.
+
+ * scripttempl/elf.sc: If -N is set, force DATA_ADDR to be ".".
+
+Fri Sep 23 15:05:49 1994 Ken Raeburn <raeburn@cujo.cygnus.com>
+
+ * configure.in: Handle i386-bsdi* targets like i386-bsd.
+
+Fri Sep 23 00:06:59 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * lexsup.c (parse_args): Add support for -a for HP/UX
+ compatibility.
+
+ * lexsup.c (parse_args): -c takes an argument.
+
+Tue Sep 20 14:35:27 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ * ld.h (args_type): Add new field endian.
+ * lexsup.c (parse_args): Handle -EB and -EL by setting
+ command_line.endian.
+ * ldgram.y (ifile_p1): Accept OUTPUT_FORMAT with three arguments.
+ * ldlang.c (lang_add_output_format): Add arguments big and little.
+ If command_line.endian is set, use it to select big or little
+ rather than the default. Changed all callers.
+ * ldlang.h (lang_add_output_format): Update declaration.
+ * emulparams/elf32mipb.sh: Define BIG_OUTPUT_FORMAT and
+ LITTLE_OUTPUT_FORMAT.
+ * emulparams/elf32mipl.sh: Likewise.
+ * emulparams/mipsbig.sh: Likewise.
+ * emulparams/mipsbsd.sh: Likewise.
+ * emulparams/mipsidt.sh: Likewise.
+ * emulparams/mipsidtl.sh: Likewise.
+ * emulparams/mipslit.sh: Likewise.
+ * scripttempl/elf.sc: Define BIG_OUTPUT_FORMAT and
+ LITTLE_OUTPUT_FORMAT if not already defined. Pass them to
+ OUTPUT_FORMAT.
+ * scripttempl/mips.sc: Pass BIG_OUTPUT_FORMAT and
+ LITTLE_OUTPUT_FORMAT to OUTPUT_FORMAT.
+ * scripttempl/mipsbsd.sc: Likewise.
+
+ * Makefile.in (ldgram.h): Make separate target from ldgram.c,
+ depending upon ldgram.c, so that a parallel make does not try to
+ build both at once.
+
+ * configure.in (mips*el-elf*): New target.
+ * Makefile.in (ALL_EMULATIONS): Add eelf32mipb.o and eelf32mipl.o.
+ (eelf32mipl.c): New target.
+
+ * config/mipsl-elf32.mt: New file.
+ * emulparams/elf32mipl.sh: New file.
+
+Fri Sep 16 12:16:20 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ * ldmain.c (main): Rather than prohibiting ld -r -s, treat it as
+ ld -r -S -x.
+
+Thu Sep 15 13:05:44 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ * ldmisc.c (vfinfo): Print BFD file name as well as file name
+ returned by find_nearest_line, in case the file name is something
+ unhelpful such as a .h file. Handle %u.
+
+Wed Sep 14 12:49:12 1994 Steve Chamberlain (sac@jonny.cygnus.com)
+
+ * ldlang.c (lang_do_assignments): Make sure output statement
+ has an attached bfd_section before trying to dereference it.
+
+Wed Sep 14 12:48:09 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ * ld.h (ld_config_type): Add new field warn_once.
+ * ldmain.c (undefined_symbol): Handle -warn-once.
+ * lexsup.c (parse_args): Recognize -warn-once.
+ * ld.texinfo (Options): Document -warn-once.
+ * ld.1: Likewise.
+
+ * ldmisc.c (vfinfo): Handle %D as %C, but never print the function
+ name. For %C, print the function name on a separate line, to keep
+ the length of error messages under control.
+ * ldmain.c (multiple_definition): Use %D for ``first defined
+ here.''
+ (undefined_symbol): Use %D for ``more undefined references
+ follow''.
+
+ * ldmisc.c (multiple_warn): Remove; no longer used.
+ * ldmisc.h (multiple_warn): Don't declare.
+
+Tue Sep 13 20:47:58 1994 Steve Chamberlain (sac@jonny.cygnus.com)
+
+ * ldlang.c (print_output_section_statement): Print all lines
+ to the map file.
+
+Tue Sep 13 16:30:11 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ * ldlang.c (load_symbols): Check for archive before object. Use
+ bfd_check_format_matches, and, if ambiguous, print a list of
+ matching formats. If file format is not recognized, treat file as
+ a linker script.
+ * ldgram.y (yyerror): If assuming an object file is a script,
+ mention that. Tweak the format of the error messages.
+ * ldlex.l (lex_warn_invalid): If assuming an object is a script,
+ guess that this is not actually a script, and just report that the
+ file format was not recognized.
+ * ld.texinfo (Options): Admit that -( may be used more than once.
+ Add note that unrecognized object files are now treated as linker
+ scripts.
+
+ * ldfile.c (ldfile_input_filename): Make const.
+ (ldfile_assumed_script): New variable.
+ (try_open): Change arguments types to const.
+ (ldfile_find_command_file): Likewise.
+ (ldfile_open_command_file): Likewise. Also, set lineno to 1.
+ * ldfile.h: Update declarations for ldfile.c changes.
+ * ldlex.l: Include <ctype.h>.
+ (file_name_stack): Change to be const char *.
+ (lineno_stack): New static variable.
+ (<<EOF>>): Set lineno as well as ldfile_input_filename.
+ (lex_push_file): Make name argument const. Initialize
+ lineno_stack entry.
+ (lex_redirect): Initialize lineno_stack entry.
+ (lex_warn_invalid): Handle non printable characters nicely.
+ * ldlex.h (lex_push_file): Declare second argument as const.
+
+ * ldgram.y (ifile_p1): Recognize GROUP.
+ * ldlex.l: Recognize GROUP.
+ * ld.texinfo (Option Commands): Document GROUP.
+
+Mon Sep 12 17:04:27 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ * config/m68klynx.mh: New file.
+
+Mon Sep 12 01:50:03 1994 Jeff Law (law@snake.cs.utah.edu)
+
+ * emultempl/hppaelf.em: Add newlines to the error messages.
+
+Sat Sep 10 16:05:38 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * config/i386lynx.mh: New file.
+ * scripttempl/i386lynx.sc: Don't put .ctors and .dtors in .text
+ unless CONSTRUCTING.
+
+Thu Sep 8 13:25:24 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ * emulparams/elf32mipb.sh (TEMPLATE_NAME): Define as elf32.
+ (GENERATE_SHLIB_SCRIPT): Define as yes.
+ (DYNAMIC_LINK): Define as false.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_before_parse):
+ Initialize config.dynamic_link to DYNAMIC_LINK if it is defined.
+ (gld${EMULATION_NAME}_place_orphan): Reset stat_ptr at end.
+ * Makefile.in (eelf32mipb.c): Depend upon elf32.em rather than
+ generic.em.
+
+Thu Sep 8 16:30:37 1994 Steve Chamberlain (sac@jonny.cygnus.com)
+
+ * scripttempl/h8500b.sc: Put rdata stuff into own segment.
+
+Thu Sep 8 13:25:24 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ * emulparams/elf32ppc.sh (OTHER_READWRITE_SECTIONS): Don't define;
+ .got section is now explicitly handled in elf.sc.
+
+Wed Sep 7 13:08:34 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ * scripttempl/alpha.sc: Redo script to set . outside of sections
+ and not bother to explicitly specify section addresses.
+ Explicitly place .sdata section.
+
+Tue Sep 6 23:51:45 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * scripttempl/m68kcoff.sc: Put .bss in data segment.
+
+ * scripttempl/h8300.sc: Change .stab and .stabstr to use a VMA of
+ 0, and to only be marked as NOLOAD if relocating.
+ * scripttempl/h8500.sc, scripttempl/h8500b.sc: Likewise.
+ * scripttempl/h8500c.sc, scripttempl/h8500m.sc: Likewise.
+ * scripttempl/h8500s.sc, scripttempl/i386coff.sc: Likewise.
+ * scripttempl/i386go32.sc, scripttempl/i386lynx.sc: Likewise.
+ * scripttempl/m68kcoff.sc, scripttempl/m68klynx.sc: Likewise.
+ * scripttempl/sh.sc, scripttempl/sparccoff.sc: Likewise.
+ * scripttempl/sparclynx.sc: Likewise.
+
+Sun Sep 04 17:58:10 1994 Richard Earnshaw (rwe@pegasus.esprit.ec.org)
+
+ * Makefile.in, configure.in: Add support (disabled) the ARM/RISCiX.
+ * config/riscix.mt, emulparams/riscix.sh, scripttempl/riscix.sc:
+ New files.
+
+Tue Aug 30 11:48:08 1994 Eric Youngdale (ericy@cais.cais.com)
+
+ * ld.h (args_type): Add field soname.
+ * lexsup.c (parse_args): Handle -soname argument.
+ * emultempl/elf32.em: In call to bfd_elf32_size_dynamic_sections,
+ pass soname.
+ * ld.texinfo: Document -soname.
+
+Mon Aug 29 15:21:50 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ * ldlang.c (lang_check): Don't try to set the architecture if the
+ input and output files are incompatible. Just warn.
+
+Wed Aug 24 12:52:30 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ * configure.in: Change i[34]86 to i[345]86.
+
+Sun Aug 21 16:17:19 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * emulparams/hp3hpux.sh: Define __DYNAMIC to be 0.
+
+Thu Aug 18 15:37:45 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ Make the ELF linker handle orphaned sections reasonably. Also,
+ define __start_SECNAME and __stop_SECNAME around sections whose
+ names can be represented in C, for the benefit of symbol sets in
+ glibc.
+ * ldemul.h (ldemul_place_orphan): Declare.
+ (ld_emulation_xfer_type): Add place_orphan field.
+ * ldemul.c (ldemul_place_orphan): New function.
+ * ldlang.h (wild_doit): Declare.
+ * ldlang.c (wild_doit): Make nonstatic.
+ (lang_place_orphans): Call ldemul_place_orphan.
+ * emultempl/elf32.em: Include <ctype.h> and "ldgram.h".
+ (hold_section, hold_use, hold_text, hold_data, hold_bss): New
+ static variables.
+ (gld${EMULATION_NAME}_place_orphan): New static function.
+ (gld${EMULATION_NAME}_place_section): New static function.
+ (ld_${EMULATION_NAME}_emulation): Initialize place_orphan field.
+
+Tue Aug 16 00:17:20 1994 Eric Youngdale (ericy@cais.cais.com)
+
+ * scripttempl/aout.sc: Add .linux-dynamic after .data.
+
+Tue Aug 16 00:08:22 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * lexsup.c (parse_args) Treat --dll-verbose as --version, for
+ Linux compatibility. From hjl@nynexst.com (H.J. Lu).
+
+Mon Aug 15 17:17:33 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ * ldexp.h (exp_get_abs_int): Declare.
+
+Sat Aug 6 01:45:39 1994 Steve Chamberlain (sac@jonny.cygnus.com)
+
+ * ldlang.c (lang_do_assignments): Handle complex AT's better.
+ * ldexp.c (exp_get_abs_int): New function.
+
+Fri Aug 5 20:55:55 1994 Jason Molenda (crash@phydeaux.cygnus.com)
+
+ * configure.in: add i960-nindy-coff support.
+
+Thu Aug 4 14:45:50 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ * ldlex.l (yy_create_string_buffer): Handle change to internal
+ interface in flex 2.4.7.
+
+Tue Aug 2 11:52:06 1994 Eric Youngdale (ericy@cais.cais.com)
+
+ * emultempl/linux.em (gld${EMULATION_NAME}_find_address_statement):
+ New function; add 0x20 to any use of -Ttext.
+ (gld${EMULATION_NAME}_create_output_section_statements): New
+ function.
+ (ld_${EMULATION_NAME}_emulation): Use the new function
+ gld${EMULATION_NAME}_create_output_section_statements.
+
+Mon Aug 1 15:50:44 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ * scripttempl/mips.sc: Redo script to set . outside of sections
+ and not bother to explicitly specify section addresses.
+
+Tue Jul 26 11:02:35 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ * scripttempl/elf.sc: Copy several more relocation sections into
+ the output. Put .got.plt sections into .got.
+
+Fri Jul 22 12:15:36 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ * scripttempl/elf.sc: Use PROVIDE to define etext, edata, and end.
+
+ Add a new script operator, PROVIDE, to define a symbol only if it
+ is needed.
+ * ldgram.y (PROVIDE): New token.
+ (assignment): Accept PROVIDE.
+ * ldlex.l (PROVIDE): New token.
+ * ldexp.h (node_type): Add etree_provide to node_class enum.
+ (exp_provide): Declare.
+ * ldexp.c (exp_fold_tree): Handle etree_provide.
+ (exp_provide): New function.
+ (exp_print_tree): Handle etree_provide.
+ * ld.texinfo: Document PROVIDE.
+
+ * ldlang.c (lang_common): Pass desired alignment to
+ lang_one_common as power of two.
+ (lang_one_common): Get common symbol alignment from linker hash
+ table entry. Treat desired alignment as a power of two.
+
+ * ldlang.c (wild_section): Attach all section with the given name,
+ not just the first one. If there is no name, attach all sections
+ even if the SEC_IS_COMMON flag is set.
+
+Wed Jul 20 15:49:27 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ * ld.h (args_type): Add field rpath.
+ * lexsup.c (S_ISDIR): Define if not already defined.
+ (parse_args): Add support for -rpath. If -R is used to name a
+ directory, treat it as -rpath for Solaris compatibility.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation):
+ Pass command_line.rpath to bfd_elf32_size_dynamic_sections.
+ * ldmain.c (main): Initialize command_line.rpath to NULL.
+ * ld.texinfo: Document -rpath option.
+
+Sun Jul 10 00:33:24 1994 Ian Dall (dall@hfrd.dsto.gov.au)
+
+ * emulparams/pc532machaout.sh: New file. Pc532 mach script
+ parameters.
+
+ * emulparams/netbsd532.sh: New file. Netbsd 532 script parameters.
+
+ * config/pc532mach.mt: New file. Pc532 mach target support.
+
+ * config/pc532mach.mh: New file. Pc532 mach host support.
+
+ * config/netbsd532.mt: New file. Netbsd 532 target support.
+
+ * configure.in: Add ns32k-pc532-mach and ns32k-pc532-netbsd support.
+
+ * Makefile.in: Add epcmachaout.c dependency and enetbsd532.c
+ dependency.
+
+Fri Jul 8 10:57:02 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ * emultempl/sunos.em (gld${EMULATION_NAME}_before_allocation): Use
+ bfd_abs_section_ptr, not &bfd_abs_section.
+
+ * lexsup.c (parse_args): Changed "retain-symbols-file" from
+ no_argument to required_argument. From djm.
+
+Thu Jul 7 12:29:53 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ * scripttempl/elf.sc: Explicitly mention .stab and .stabstr
+ sections to force a VMA of 0; needed for ELF backends which have
+ not been converted to the new linker style.
+
+Mon Jul 4 19:35:45 1994 Jeff Law (law@snake.cs.utah.edu)
+
+ * scripttempl/hppaelf.sc (__stack_zero): Don't define this name,
+ it was for the HPUX dynamic loader's use and it creates problems
+ with ELF GDB.
+
+Fri Jul 1 12:53:47 1994 Jeff Law (law@snake.cs.utah.edu)
+
+ * ldlang.c (lang_do_assignments): No longer static. Delete decl.
+ * ldlang.h (lang_do_assignments): Put external decl here.
+ * emultempl/hppaelf.em: Minor cleanups throughout file.
+ (hppa_elf_create_output_section_statements): Rewrite.
+ (hppaelf_finish): Rewrite.
+
+Wed Jun 29 16:50:00 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ * config/solaris2.mh (NATIVE_LIB_DIRS): Define as /usr/ccs/lib.
+
+ * lexsup.c (parse_args): Accept -Bstatic and -Bdynamic. Do not
+ accept plain -B.
+ * ld.texinfo: -Bstatic is not ignored.
+
+Tue Jun 28 12:13:34 1994 Stan Shebs (shebs@andros.cygnus.com)
+
+ * ldlex.l: Recognize \r the same as \n.
+
+Thu Jun 23 17:53:04 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ Preliminary support for generating shared libraries, from Eric
+ Youngdale <ericy@cais.cais.com>.
+ * genscripts.sh: If the emulation parameter file sets
+ GENERATE_SHLIB_SCRIPT, generate a .xs script file with
+ CREATE_SHLIB defined.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_get_script): If
+ link_info.shared is set, use the .xs script file.
+ * scripttempl/elf.sc: If CREATE_SHLIB is set, don't create a
+ .interp section, and don't include TEXT_START_ADDR in the starting
+ address of the first section.
+ * emulparams/elf_i386.sh (GENERATE_SHLIB_SCRIPT): Likewise.
+ * emulparams/elf32_sparc.sh (GENERATE_SHLIB_SCRIPT): Define.
+
+Thu Jun 23 12:52:22 1994 David J. Mackenzie (djm@rtl.cygnus.com)
+
+ * configure.in: Change --with-targets to --enable-targets.
+
+Wed Jun 22 13:42:14 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ * lexsup.c (parse_args): Add support for new options -( -) with
+ synonyms --start-group --end-group.
+ * ldlang.h (enum statement_enum): Add lang_group_statement_enum.
+ (lang_group_statement_type): Define new struct.
+ (lang_statement_union_type): Add group_statement field.
+ (lang_enter_group, lang_leave_group): Declare.
+ * ldlang.c (lang_for_each_statement_worker): Handle
+ lang_group_statement_enum.
+ (map_input_to_output_sections, print_statement): Likewise.
+ (lang_size_sections, lang_do_assignments): Likewise.
+ (open_input_bfds): Completely rewrite. Now does its own looping,
+ rather than using lang_for_each_statement. Handle groups.
+ (lang_process): Update call to open_input_bfds.
+ (print_group): New static function.
+ (lang_enter_group, lang_leave_group): New static functions.
+ * ldfile.c (ldfile_open_file): If the file has already been
+ opened, just return rather than taking an assertion failure.
+ * ldver.c (help): Mention new options.
+ * ld.texinfo: Document new options.
+
+ * ldlang.c (end_of_data_section_statement_list): Don't define.
+ (lang_leave_output_section_statement): Don't set obsolete variable
+ end_of_data_section_statement_list.
+
+ * scripttempl/go32coff.sc: Don't put ${DATA_ALIGNMENT} inside an
+ ALIGN.
+
+ * ldlang.c (lang_size_sections): Adjust current region address
+ even for sections with an explicit address. From
+ ralphc@pyramid.com (Ralph Campbell).
+
+ * emulparams/i386linux.sh (NONPAGED_TEXT_START_ADDR): Set to 0.
+ From jrs@world.std.com (Rick Sladkey).
+
+ * scripttempl/mipsbsd.sc: Let sections align to their natural
+ boundaries.
+
+Tue Jun 21 11:27:04 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ * ldlang.c (lang_init): Use new bfd_abs_section_ptr, not
+ &bfd_abs_section.
+ (lang_abs_symbol_at_beginning_of): Likewise.
+ (lang_abs_symbol_at_end_of): Likewise.
+ (lang_size_sections): Use bfd_is_abs_section to check for the
+ absolute section. Don't try to set the VMA or output_offset or
+ size of the absolute section.
+ * ldmain.c (notice_ysym): Use bfd_is_und_section to check for the
+ undefined section.
+
+Thu Jun 16 22:48:41 1994 Jeff Law (law@snake.cs.utah.edu)
+
+ * scripttempl/hppaelf.sc: Place .data and .bss at 0x40000000
+ when generating relocatable objects.
+
+Thu Jun 16 14:25:22 1994 Eric Youngdale (ericy@cais.cais.com)
+
+ * emultempl/linux.em: New file providing support for linking
+ against Linux shared libraries.
+ * config/i386-linux.mt (ei386linux.c): Depend upon linux.em.
+ * emulparams/i386linux.sh (TEMPLATE_NAME): Define as linux.
+
+Thu Jun 16 12:22:01 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * lexsup.c (parse_args): Add -shared to longopts, and handle it.
+ * ldmain.c (main): Initialize link_info.shared to false. Give
+ error if link_info.relocateable and link_info.shared are both set.
+
+ * configure.in: If EMUL_EXTRA* is defined in a config file, treat
+ it as naming an emulation to be added to EMULATION_OFILES.
+ * config/i386-linux.mt (EMUL_EXTRA1): Define as elf_i386.
+
+ * Makefile.in: Rebuilt dependencies.
+ (ALL_EMULATIONS): Add ei386linux.o, eelf32_sparc.o,
+ eelf64_sparc.o. Remove $(OTHER_EMULATIONS).
+ (ei386linux.c, eelf32_sparc.c, eelf64_sparc.c): New targets.
+ * config/i386-linux.mt (OTHER_EMULATIONS): Don't define.
+ (ei386linux.c): Remove; now in Makefile.in.
+ * config/i386-lynx.mt (OTHER_EMULATIONS): Don't define.
+ * config/m68k-lynx.mt (OTHER_EMULATIONS): Don't define.
+ * config/sparc-lynx.mt (OTHER_EMULATIONS): Don't define.
+ * config/sparc64-elf.mt (OTHER_EMULATIONS): Don't define.
+ (eelf64_sparc.c): Remove; now in Makefile.in.
+ * config/sun4sol2.mt (OTHER_EMULATIONS): Don't define.
+ (eelf32_sparc.c): Remove; now in Makefile.in.
+
+ * ldexp.c (exp_print_tree): Don't crash if etree_rel section has
+ no owner--it might be bfd_abs_section. From Eric Youngdale
+ <ericy@cais.cais.com>.
+
+ * scripttempl/aout.sc: Let sections align to their natural
+ boundaries.
+
+Wed Jun 15 01:54:54 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldemul.h (ldemul_open_dynamic_archive): Declare.
+ (ld_emulation_xfer_type): Add new field open_dynamic_archive.
+ * ldemul.c: Include ldexp.h and ldlang.h.
+ (ldemul_open_dynamic_archive): New function.
+ * ldfile.h (ldfile_open_file_search): Declare.
+ * ldfile.c: Include ldemul.h.
+ (try_open_bfd): Rename from cache_bfd_openr. Return boolean
+ argument, not bfd *. Change all callers.
+ (ldfile_open_file_search): Rename from open_a. Return boolean
+ argument, not bfd *. Clean up. Change all callers.
+ (ldfile_open_file): If doing a dynamic link, call
+ ldemul_open_dynamic_archive rather than assuming the extension of
+ a dynamic object is ".so".
+ * emultempl/elf32.em (gld${EMULATION_NAME}_open_dynamic_archive):
+ New function.
+ (ld_${EMULATION_NAME}_emulation): Initialize open_dynamic_archive
+ field.
+ * emultempl/sunos.em (ld_${EMULATION_NAME}_emulation): Likewise.
+
+ * ldmain.c (get_emulation): Ignore -m486 for Linux compatibility.
+ * lexsup.c (parse_args): Ignore -qmagic for Linux compatibility.
+ Accept -static as a synonym for -non_shared.
+
+ Let the user change the dynamic linker used by ELF code.
+ * ld.h (args_type): Add new field interpreter.
+ * lexsup.c (parse_args): Add dynamic-linker to longopts, and
+ handle it.
+ * ldmain.c (main): Initialize command_line.interpreter to NULL.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): Get
+ the ELF backend to return the .interp section. If
+ command_line.interpreter is not NULL, set the contents of .interp
+ to it.
+ * ld.texinfo: Mention -dynamic-linker.
+
+ * config/sun4sol2.mt (eelf32_sparc.c): Depend upon elf32.em, not
+ generic.em.
+
+ * lexsup.c (parse_args): Sort out the option macros and change the
+ definitions to make it easier to add a new option.
+
+ * scripttempl/aout.sc: Define __etext and __edata to go along with
+ _etext and _edata.
+
+ * ld.h (ld_config_type): Add new field traditional_format.
+ * lexsup.c (parse_args): Add traditional-format to longopts, and
+ handle it.
+ * ldmain.c (main): Initialize config.traditional_format to false.
+ * ldlang.c (ldlang_open_output): Set BFD_TRADITIONAL_FORMAT in BFD
+ flags of output_bfd according to config.traditional_format.
+ * ldver.c (help): Mention -traditional-format.
+ * ld.texinfo: Document -traditional-format.
+
+Tue Jun 14 23:10:07 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldctor.c (ldctor_add_entry): Add entries to a set in the order
+ they are encountered.
+
+Tue Jun 14 18:05:09 1994 Eric Youngdale (ericy@cais.cais.com)
+
+ * emulparams/i386linux.sh (TEXT_START_ADDR): Define as 0x1000.
+ (NONPAGED_TEXT_START_ADDR): Define as 0x20.
+
+Mon Jun 13 15:46:09 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * scripttempl/alpha.sc: Define _ftext, _etext and _fdata insted of
+ _FTEXT, _ETEXT and _FDATA. Dont define _END.
+
+ * ldfile.c (open_a): If this is not an archive, try to open it in
+ the current directory before searching for it.
+
+ * lexsup.c (parse_args): Treat -i as a synonym for -r.
+
+ * ldgram.y (exp): Treat BLOCK as a synonym for ALIGN, so that
+ BLOCK works in a section address as documented.
+
+ * ldgram.y (YYDEBUG): Don't define.
+
+Fri Jun 10 16:45:39 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * emultempl/gld960.em: Pass false for new argument to
+ ldfile_add_library_path.
+ * emultempl/gld960c.em, emultempl/lnk960.em: Likewise.
+
+ * emultempl/sunos.em: Only look for .so files if doing a dynamic
+ link.
+
+Thu Jun 9 08:35:17 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * scripttempl/i960.sc: Add CONSTRUCTORS to .data.
+
+Thu Jun 9 06:52:29 1994 Bill Cox (bill@rtl.cygnus.com)
+
+ * Makefile.in (check): Delete ld.new dependency so that a regression
+ test doesn't trigger a rebuild of the linker.
+
+Thu Jun 9 00:17:20 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldlang.c (map_input_to_output_sections): For lang_address, call
+ init_os if it hasn't already been called.
+
+Thu Jun 2 17:24:08 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ Add support for SunOS shared libraries.
+ * scripttempl/aout.sc: Don't define __DYNAMIC here. Add new
+ sections used by shared library support code.
+ * emultempl/sunos.em: New file.
+ * emulparams/sun4.sh (TEMPLATE_NAME): Define as sunos.
+ * emulparams/sun3.sh (TEMPLATE_NAME): Likewise.
+ * Makefile.in (esun4.c): Depend upon sunos.em, not generic.em.
+ (esun3.c): Likewise.
+
+ * ldlang.c: Minor formatting cleanups.
+ (lang_for_each_input_file): New function.
+ * ldlang.h (lang_for_each_input_file): Declare.
+
+ * ldfile.h (search_dirs_type): Move from ldfile.c, and add cmdline
+ field.
+ (search_head): Declare.
+ (ldfile_add_library_path): Add new cmdline argument in prototype.
+ * ldfile.c (search_head): Make non-static.
+ (search_dirs_type): Move to ldfile.h.
+ (ldfile_add_library_path): Accept cmdline argument, and save it.
+ * lexsup.c (parse_args): Pass true for new cmdline argument of
+ ldfile_add_library_path.
+ (set_default_dirlist): Likewise.
+ * ldmain.c (check_for_scripts_dir): Pass false for new cmdline
+ argument of ldfile_add_library_path.
+ * ldgram.y (ifile_p1): Likewise.
+
+Wed Jun 1 14:24:08 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldlang.h (lang_input_statement_type): Remove fields subfiles,
+ total_size, superfile and chain.
+ * ldfile.c (open_a): Don't clear search_dirs_flag.
+ (ldfile_open_file): Don't try to open superfile. Assert that file
+ has not already been opened.
+ * ldlang.c (new_afile): Don't initialize superfile.
+ * ldmain.c (add_archive_element): Don't initialize subfiles or
+ chain or superfile. Initialize search_dirs_flag to false.
+
+Fri May 27 12:25:33 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
+
+ * ldver.c (ldversion): Changed version to "cygnus-2.4.1".
+
+ Changes from binutils-2.4 release:
+
+ * genscripts.sh (RELOCATING, CONSTRUCTING): When setting
+ variables, use whitespace, so scripts don't break.
+
+ * config/alphaosf.mh (HDEFINES, CFLAGS): Deleted.
+
+ * emultempl/generic.em: Find emultempl/stringify.sed in ${srcdir}.
+
+ * testsuite/ld-cdtest/cdtest-bar.cc: Renamed from cdtest-func.cc.
+ * Makefile.in: Noted change.
+
+ * scripttempl/a29k.sc: Don't include /lab3/u3/..../segments.o; I
+ don't know where that's supposed to come from, or why it's
+ necessary.
+
+ Wed May 11 22:32:00 1994 DJ Delorie (dj@ctron.com)
+
+ * configure.bat: update to latest Makefile.in
+ * emulparams/go32.sh: set to coff-go32 not aout
+ * emultempl/generic.em: strength-reduce the structure of
+ this shell script, since the only available shell for
+ DOS can't handle complex syntax.
+ * emultempl/stringify.sed: for "sed -f" instead of inline.
+ * Makefile.in: depend on stringify.sed as well as genscripts.sh
+ * scripttempl/go32coff.sc: correct for djgpp 1.11's COFF format
+ * genscripts.sh: empty variables aren't always considered "set",
+ so set them to "y" instead.
+
+Fri May 27 01:08:14 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldlang.c (entry_symbol): Make static.
+ (lang_add_entry): Add cmdline argument.
+ * ldlang.h (lang_add_entry): Change prototype.
+ * ldgram.y (statement_anywhere): Change lang_add_entry call.
+ * lexsup.c (parse_args): Likewise.
+
+Tue May 24 16:13:43 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * emulparams/elf32mipb.sh (OTHER_READONLY_SECTIONS): Don't give
+ .reginfo an address.
+ (OTHER_READWRITE_SECTIONS): Don't give .lit4 or .lit8 an address.
+ (OTHER_SECTIONS): Define for .gptab.sdata and .gptab.sbss.
+ * scripttempl/elf.sc: Use OTHER_SECTIONS at end of script.
+
+Thu May 19 13:31:33 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ Add support for ELF shared libraries.
+ * ld.h (ld_config_type): Add field dynamic_link.
+ * ldmain.c (main): Initialize config.dynamic_link to false. Warn
+ on attempts to use -r with -relax, -call_shared or -s.
+ * lexsup.c (longopts): Separate OPTION_CALL_SHARED from
+ OPTION_NON_SHARED. Add OPTION_IGNORE. Adjust macro values
+ accordingly. Add "dy" and "non_shared" options. Change "Qy" to
+ OPTION_IGNORE for now. Handle OPTION_CALL_SHARED and
+ OPTION_NON_SHARED by setting dynamic_link field accordingly.
+ Handle OPTION_IGNORE by ignoring it. Clear dynamic_link field for
+ -r and -Ur.
+ * ldfile.c (ldfile_open_file): If config.dynamic_link is true, try
+ opening a file with a .so extension first.
+ * emultempl/elf32.em: New file.
+ * emulparams/elf32_sparc.sh (TEXT_START_ADDR): Change to 0x10000.
+ (NONPAGED_TEXT_START_ADDR): Likewise.
+ (TEMPLATE_NAME): Define as elf32.
+ (DATA_PLT): Define.
+ * emulparams/elf_i386.sh (TEMPLATE_NAME): Define as elf32.
+ * scripttempl/elf.sc: Add placement for new dynamic sections.
+ Don't use CREATE_OBJECT_SYMBOLS. Define _etext, _edata and _end
+ outside of any section. Don't use ALIGN(8); just let one section
+ VMA follow another. Put .dynbss in .bss. Don't mention debugging
+ sections; they'll be handled correctly anyhow.
+ * Makefile.in (eelf_i386.c): Depend upon elf32.em, not generic.em.
+
+Wed May 18 10:15:39 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * Makefile.in (install): Redirect output of ln to /dev/null.
+
+Mon May 16 13:35:08 1994 Jeff Law (law@snake.cs.utah.edu)
+
+ * emultempl/hppaelf.em: Change all references of
+ .hppa_linker_stubs to .PARISC.stubs.
+ * scripttempl/hppaelf.sc: Likewise.
+
+Fri May 13 13:00:38 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldlang.c (print_output_section_statement): Change ``no attached
+ output section'' message slightly.
+ (lang_do_assignments): Don't recurse down if there is no real
+ section.
+
+ * config/i386-linux.mt (OTHER_EMULATIONS): Change em_ to e to
+ match corresponding change in emulation templates.
+ * config/i386-lynx.mt, config/m68k-lynx.mt: Likewise.
+ * config/sparc-lynx.mt, config/sun4sol2.mt: Likewise.
+
+Wed May 11 18:16:46 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
+
+ * ldver.c (ldversion): Updated version number.
+
+ * testsuite/ld-cdtest/cdtest-foo.cc: Use explicit "#pragma
+ implementation".
+ * testsuite/ld-cdtest/cdtest-bar.cc: Renamed from cdtest-func.cc.
+ * Makefile.in: References to cdtest-func.o changed to
+ cdtest-bar.o.
+
+Wed May 11 16:24:19 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ Don't create unnecessary output sections.
+ * ldlang.c (out_bfd_get_section_by_name): Remove.
+ (wild_section): Call bfd_get_section_by_name rather than
+ our_bfd_get_section_by_name. Don't call wild_doit if there is no
+ section.
+ (lang_create_output_section_statements): Remove.
+ (map_input_to_output_sections): For several cases, call init_os if
+ it has not already been called.
+ (lang_size_sections): If output section was not created, skip it.
+ (lang_process): Don't call lan_create_output_section_statements.
+ (lang_place_orphans): Skip files with just_syms_flags set to true.
+ * ld.texinfo: Document change.
+
+Tue May 10 14:31:16 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldlang.c (wild_doit): Don't bother initializing the vma and
+ section size. Don't special case SEC_SHARED_LIBRARY.
+ (lang_size_sections): Handle SEC_COFF_SHARED_LIBRARY sections
+ specially.
+
+Fri May 6 12:24:27 1994 Steve Chamberlain (sac@cygnus.com)
+
+ * config/go32.mh : New file for Xgo32X.
+
+Fri May 6 15:15:35 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldfile.c (ldfile_open_command_file): Set bfd_error_system_call
+ before calling einfo, since we are reporting an fopen failure.
+ From jrs@world.std.com (Rick Sladkey).
+
+ * configure.in: Use "e" rather than "em_" as prefix for
+ emulations.
+
+Fri May 6 01:08:14 1994 Ken Raeburn (raeburn@kr-pc.cygnus.com)
+
+ * emultempl/generic.em: Use "e" rather than "em_" as prefix for
+ filename.
+ * emultempl/gld960.em, emultempl/gld960c.em, emultempl/lnk960.em,
+ emultempl/hppaelf.em, emultempl/m88kbcs.em, emultempl/vanilla.em:
+ Ditto.
+ * Makefile.in: Changed all generated file names.
+ (ldemul-list.h): Depend on Makefile, not config.status. Changed
+ sed patterns to handle new filenames.
+
+ * config/mipsl-idt.mt: Renamed from mips-idtl.mt.
+ * configure.in: Adjusted.
+
+Thu May 5 15:07:32 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
+
+ * Makefile.in (install-info): Don't use "$<*", it doesn't always
+ work. Instead, check build dir and $srcdir explicitly, and use
+ `echo' to get all the filenames.
+
+ * configure.in (h8300h-*-hms): Changed ld_target name to
+ cf-h8300h.
+ * config/cf-h8300h.mt: Renamed from coff-h8300h.mt, to make it
+ unique in 8.3.
+
+ * config/i960coff.mt: New file.
+ * emulparams/gld960coff.sh: New file.
+ * emultempl/gld960c.em: New file.
+ * configure.in (i960-*-vxworks5* except -vxworks5.0*): Use
+ i960coff configuration.
+ * Makefile.in (em_gld960coff.c): Added dependencies, build rule.
+
+ * Makefile.in (ALL_EMULATIONS): Remove em_delta68.o, since the
+ code isn't included in FSF releases, and it can still be
+ explicitly selected.
+ (distclean): Remove site.bak and tmpdir.
+ (STAGESTUFF): Removed $(GENERATED_CFILES) $(GENERATED_HFILES).
+ (mostlyclean): Delete them explicitly here. Also remove tmpdir.
+
+ Patches from Ralph Campbell:
+ * config/mipsbsd.mh: New file.
+ * Makefile.in (em_mipsbsd.c): Use mipsbsd.sc, not aout.sc.
+ * scripttempl/mipsbsd.sc: Don't define __DYNAMIC.
+ * emulparams/mipsbsd.sh (OUTPUT_FORMAT): Fix name to have `a.out'
+ instead of `aout'.
+
+ * configure.in (i386-*-gnu*): Treat like i386-*-mach*.
+
+Wed May 4 11:59:40 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * config/m68k.mt (EMUL): Set to m68kaout.
+ * emulparams/m68kaout.sh: New file.
+ * Makefile.in (ALL_EMULATIONS): Add em_m68kaout.o.
+ (em_m68kaout.c): New target.
+
+ * ldlang.c (lang_size_sections): If dot moves because of an
+ assignment, don't try to insert a pad into the absolute output
+ section, just change the address of the default memory region
+ instead.
+
+ * Makefile.in (mostlyclean): Remove cdtest.tmp, cdtest-ur,
+ cdtest-ur.out, and cdtest-ur.tmp.
+
+Wed Apr 27 16:03:37 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * scripttempl/sa29200.sc: Align all sections to four byte
+ boundaries.
+
+Wed Apr 27 10:48:03 1994 Steve Chamberlain (sac@cygnus.com)
+
+ * Makefile.in, configure.in: Support for go32 coff.
+ * config/i386-go32.mt: New file
+ * emulparams/i386go32.sh: New file
+ * scripttempl/i386go32.sc: New file
+
+Tue Apr 26 17:20:03 1994 Stan Shebs (shebs@andros.cygnus.com)
+
+ * Makefile.in (em_m68klynx.c, em_i386lynx.c, em_sparclynx.c): Use
+ Lynx-specific script templates.
+ * configure.in (sparclite*-*-coff): Use coff-sparc.
+ * emulparams/i386lynx.sh (SCRIPT_NAME): Set to i386lynx.
+ * emulparams/sparclynx.sh (SCRIPT_NAME): Set to sparclynx.
+ (ENTRY): Set to __main.
+ * scripttempl/i386lynx.sc: New file, script for I386 Lynx.
+ * scripttempl/m68klynx.sc: Add insertion of ctor/dtor sections.
+ * scripttempl/sparclynx.sc: New file, script for uSparc Lynx.
+
+Tue Apr 26 12:41:03 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * scripttempl/mips.sc: Force _gp and .lit8 to be aligned to a 16
+ byte boundary, in case the global constructors do not take up an
+ even 16 bytes.
+
+ * config/i386v4.mh (HOSTING_CRT0): If ../gcc/crtbegin.o does not
+ exist, get crtbegin based on gcc -print-libgcc-file-name.
+ (HOSTING_LIBS): Similar change for ../gcc/crtend.o.
+
+Mon Apr 25 15:27:52 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldlang.c (lang_size_sections): When no address is given for a
+ section, align it according to its requirements.
+
+Thu Apr 21 17:24:24 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * Makefile.in (clean, distclean): Remove configdoc.texi.
+
+Tue Apr 19 12:12:15 1994 Bill Cox (bill@rtl.cygnus.com)
+
+ * configure.in: Add i[34]86-*-bsd386 to the patterns recognized.
+
+Fri Apr 15 14:35:42 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldlang.c (lang_size_sections): When relaxing, adjust the
+ position of a padding statement, and adjust dot accordingly.
+
+Mon Apr 11 17:37:09 1994 Bill Cox (bill@rtl.cygnus.com)
+
+ * Makefile.in (EXPECT, RUNTEST): Set these for the check goal.
+
+Mon Apr 11 12:32:57 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * scripttempl/i386coff.sc: If relocating, don't put .init and
+ .fini sections into .text; keep them separate.
+ * config/i386sco.mh (HOSTING_CRT0): If ../gcc/crtbegin.o does not
+ exist, get crtbegin based on gcc -print-libgcc-file-name.
+ (HOSTING_LIBS): Similar change for ../gcc/crtend.o.
+
+Mon Apr 11 10:31:00 1994 Bill Cox (bill@rtl.cygnus.com)
+
+ * Makefile.in (check): Set TCL_LIBRARY for runtest.
+
+Wed Apr 6 00:09:37 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * configure.in (hppa*-*-*elf*): Don't require "-hp-" for the
+ manufacturer.
+
+ * emultempl/hppaelf.em (hppaelf_finish): Only resize sections
+ if building a final executable.
+
+Tue Apr 5 12:17:30 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldmain.c (main): Check the return value of bfd_close.
+
+Thu Mar 31 18:07:06 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * scripttempl/alpha.sc: Clean up section alignment to ensure that
+ sections never overlap when using -r.
+
+Wed Mar 30 15:51:15 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldmisc.c (vfinfo): Change symbol reading slightly for recent BFD
+ changes: get_symtab_upper_bound renamed and returns long,
+ bfd_canonicalize_symtab returns long, check for error indications.
+
+Fri Mar 25 17:20:01 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldlang.c (print_input_section): For section size, use
+ _cooked_size if it is non-zero, size otherwise.
+ (size_input_section): Likewise.
+ (lang_do_assignments): Likewise (case lang_input_section_enum).
+
+Thu Mar 24 15:20:47 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldlang.c (new_afile): Add new argument add_to_list. Don't set
+ real to true for lang_input_file_is_marker_enum. Clear the_bfd.
+ (lang_add_input_file): Pass true to new_afile for add_to_list.
+ (lookup_name): Remove force_load argument. Changed all callers.
+ Pass false to new_afile for add_to_list. Split loading of symbols
+ out into separate function.
+ (load_symbols): New function split out of lookup_name. Don't load
+ the symbols if they are already loaded.
+ (open_input_bfds): For lang_input_statement_enum call load_symbols
+ rather than lookup_name.
+ (lang_process): Pass abs_output_section rather than NULL to
+ lang_size_sections.
+ (lang_startup): Set real field of first_file to true.
+
+Wed Mar 23 14:15:44 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldlang.c (had_relax): Removed.
+ (relax_again): New static variable.
+ (lang_size_sections): Change call to bfd_relax_section to
+ correspond to BFD changes. Set relax_again appropriately.
+ (lang_process): Remove #if 0 code. When relaxing, keep calling
+ lang_do_assignments and lang_size_sections until relax_again
+ becomes false.
+
+ * emultempl/gld960.em: Include libiberty.h
+ (gld960_before_parse): Pass NULL as final argument to concat.
+
+Tue Mar 22 13:08:28 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * scripttempl/aout.sc: Force _end and __end to be aligned to a
+ four byte boundary.
+
+ * ldwrite.c (build_link_order): Handle lang_data_statement_enum by
+ building a bfd_data_link_order, rather than by setting the section
+ contents immediately.
+
+Mon Mar 21 18:28:37 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ Changes to make -Ur work again.
+ * ldmain.c (add_to_set): Now takes reloc argument rather than
+ bitsize. Check config.build_constructors here. If an new hash
+ table entry is created, mark it as undefined.
+ (constructor_callback): No longer takes bitsize argument. Pass
+ BFD_RELOC_CTOR to ldctor_add_set_entry, but first make sure the
+ BFD backend supports it.
+ (reloc_overflow): Handle a NULL abfd argument.
+ (reloc_dangerous, unattached_reloc): Likewise.
+ * ldctor.c: Include ldmain.h.
+ (struct set_info): Change bitsize field to reloc.
+ (ldctor_add_set_entry): Now takes reloc argument rather than
+ bitsize. Don't bother to check config.build_constructors here.
+ (ldctor_build_sets): Get the size from the reloc howto. If
+ generating relocateable output, call lang_add_reloc rather than
+ lang_add_data.
+ * ldctor.h (ldctor_add_set_entry): Change declaration to use reloc
+ instead of bitsize.
+ * ldlang.h (statement_enum): Add lang_reloc_statement_enum.
+ (lang_reloc_statement_type): New structure.
+ (lang_statement_union_type): Add reloc_statement field.
+ (lang_add_reloc): Declare new function.
+ * ldlang.c (lang_for_each_statement_worker): Handle
+ lang_reloc_statement_enum.
+ (map_input_to_output_sections, print_statement): Likewise.
+ (lang_size_sections, lang_do_assignments): Likewise.
+ (print_reloc_statement): New function.
+ (lang_add_reloc): New function.
+ * ldwrite.c (build_link_order): Handle lang_reloc_statement_enum.
+
+ * Makefile.in (cdtest.out, cdtest-ur.o): New targets.
+ (cdtest-ur, cdtest-ur.out): New targets.
+ (check-cdtest): Now also check that -Ur works correctly.
+
+ * scripttempl/alpha.sc: Align all sections to 16 byte boundaries.
+
+Thu Mar 17 12:45:41 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldlang.c (lang_process): Move lang_common call before
+ map_input_to_output_sections, to ensure that any alignment
+ constraints set by common symbols are copied over to the output
+ sections.
+
+Fri Mar 11 22:17:34 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * emulparams/elf32ppc.sh (TEMPLATE_NAME): Don't define.
+ (OTHER_READWRITE_SECTIONS): Rename .toc to .got.
+ * Makefile.in (em_elf32ppc.c): Depend upon generic.em, not ppc.em.
+ * emultempl/ppc.em: Remove ugly stub code; turns out not to be
+ needed for ELF.
+
+Tue Mar 8 04:22:27 1994 David J. Mackenzie (djm@rtl.cygnus.com)
+
+ * config/i386bsd.mh: New file.
+
+Mon Mar 7 15:23:24 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * scripttempl/elf.sc: Permit TEXT_START_SYMBOLS and
+ DATA_START_SYMBOLS to be defined.
+ * emulparams/elf32mipb.s (TEXT_START_SYMBOLS): Define _ftext.
+ (DATA_START_SYMBOLS): Define _fdata.
+
+Mon Feb 28 10:59:14 1994 Stan Shebs (shebs@andros.cygnus.com)
+
+ * ldlang.c (cat): Define using ANSI style if ALMOST_STDC defined.
+
+Sun Feb 27 16:29:38 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * emultempl/hppaelf.em (hppaelf_finish): Update comments. This
+ works again. Attach some output symbols to the stub file bfd.
+
+ * emultempl/hppaelf.em: Include elf32-hppa.h.
+ (file_chain): Add decl.
+ (hppa_look_for_stubs_in_section): Delete decl.
+ (hppaelf_finish): Reenable code. Do not pass symbols
+ down to hppa_look_for_stubs_in_section.
+
+Sat Feb 26 10:58:25 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * ldmain.c (write_map): Don't define. Removed all references.
+ Just use map_file or map_filename instead.
+ (add_archive_element): Use minfo to write map information, not
+ info_msg.
+ (constructor_callback): Use fprintf to write map information, not
+ info_msg.
+ * ldmain.h (write_map): Don't declare.
+ * ldgram.y (mri_script_command): Removed reference to write_map.
+ * ldlang.c (lang_one_common): Likewise.
+ * lexsup.c (parse_args): Likewise.
+
+Fri Feb 25 19:12:03 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * scripttempl/elf.sc: Force all sections to be aligned.
+
+ * ldgram.y (section): Reverse the order of memspec_opt and
+ fill_opt to avoid an ambiguity when both are used.
+ * ld.texinfo: Changed accordingly.
+
+ * ldgram.y: Move include of ldlex.h back with other includes.
+ * ldlex.h (input_type): Don't initialize enum constants to
+ particular values.
+ * ldlex.l: Use a switch to return the right token based on
+ input_type, rather than knowing that input_type has a value based
+ on a token type.
+
+ * ldgram.y (dirlist_ptr): Removed; not used.
+ * lexsup.c: Include ldver.h.
+ * Makefile.in: Rebuilt dependencies.
+
+Fri Feb 25 18:55:54 1994 Ted Lemon (mellon@pepper.ncd.com)
+
+ * ldlang.c (lookup_name): don't call bfd_set_gp_size.
+ (ldlang_add_file): call it here instead.
+
+Fri Feb 25 18:13:46 1994 David J. Mackenzie (djm@rtl.cygnus.com)
+
+ * ldgram.y: Include ldlex.h after %token decls, for byacc.
+
+Fri Feb 25 10:47:25 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * emultempl/hppaelf.em: First attempt to clean this file up.
+ Add comments in several functions as to their purpose and
+ how they function (or my current best guess). Clean up horrible
+ spacing and indention that never should have been accepted in the
+ first place. Add FIXMEs for issues which need to be resolved.
+ Disable linker-stub generation until it gets fixed. This allows
+ the linker to at least work on simple code for testing purposes.
+
+ * ldlang.c (lang_size_sections): No longer static (PA ELF calls
+ it via hppaelf_finish). Prototype moved into ldlang.h.
+ (lang_process): Move problematic extra call to lang_size_sections
+ into the PA ELF specific code.
+ * emultempl/hppaelf.em (hppaelf_finish): Extra call to
+ lang_size_sections moved here.
+
+Thu Feb 24 16:47:33 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * configure.in (powerpc-*-elf*): New target; use ppc-elf32.
+ * config/ppc-elf32.mt: New file.
+ * emulparams/elf32ppc.sh: New file.
+ * emultempl/ppc.em: New file.
+ * Makefile.in (ALL_EMULATIONS): Added em_elf32ppc.o.
+ (em_elf32ppc.c): New target; uses elf32ppc.sh, ppc.em and elf.sc.
+ (EMULATION_OFILES): Added dependencies on ldexp.h and ldlang.h.
+
+Thu Feb 24 12:27:07 1994 David J. Mackenzie (djm@rtl.cygnus.com)
+
+ * lexsup.c (parse_args): Use symbolic numbers for long options.
+ Fix misunderstanding in -Y and -call_shared et al.
+
+ Use getopt instead of lex and yacc to parse the command line.
+
+ * ld.texinfo (Options): Document changes to option syntax.
+ * Makefile.in: Update dependencies.
+ * ldver.c (help): Tweak dashes in usage message.
+ * ldgram.y (%union): Remove unused members.
+ Remove %tokens for command line options; add ones for input types.
+ (command_line): Rules removed.
+ (file): Instead of command line, recognize an
+ input type indicator, then use the nonterminal for that type.
+ (defsym_expr): New nonterminal from code formerly in command_line.
+ * ldlex.h: Declare parser input type enum and variable.
+ Don't declare parse_line.
+ * ldlex.l: Remove unused variables. Make some used ones static
+ and comment them.
+ (COMMAND): Start state and its rules removed.
+ At start of yylex, return input state token if at start of input.
+ (lex_redirect): Don't need to set yyout.
+ (ldlex_command): Function removed.
+ * ldmain.c (main): Instead of calling parse_line, set up the
+ redirections and call yyparse directly.
+ * ldmisc.c (vfinfo): If there's no input filename, print nothing, not
+ "command line".
+ * lexsup.c: Remove #if 0'd code.
+ (parse_line): Function removed.
+ (parse_args): Rewrite to use getopt_long_only.
+ (set_default_dirlist): New function from code formerly in
+ ldgram.y:command_line.
+ (set_section_start): New function.
+ * emultempl/generic.em, emultempl/gld960.em, emultempl/hppaelf.em,
+ emultempl/lnk960.em, emultempl/m88kbcs.em: Don't enclose
+ compiled-in link scripts in "{" and "}", as the grammar no longer
+ wants them to be.
+
+Thu Feb 24 08:43:26 1994 Ken Raeburn (raeburn@rtl.cygnus.com)
+
+ * Makefile.in (ld.dvi): Depend on configdoc.texi, but don't
+ require that it be in $(srcdir).
+
+Tue Feb 22 09:21:18 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * ldlang.c (lang_size_sections): Only align section to alignment
+ required by linker script, not to maximum alignment of input
+ sections.
+
+ * ldlang.h (largest_section): Don't declare.
+ * ldlang.c (largest_section): Don't define.
+ (size_input_section): Don't set largest_section; not used.
+
+Mon Feb 21 15:15:29 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * ldlang.c (new_afile): Pass NULL as last argument to concat.
+
+Thu Feb 17 15:51:23 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldlang.c, ldmain.c: Include libiberty.h.
+
+ * ldmisc.h (concat): Don't declare.
+ * ldmisc.c (concat): Don't define; just use the one in libiberty.
+
+ * ld.h (as_output_section_statement): Removed; not used.
+
+Thu Feb 17 09:32:14 1994 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * ldlang.c, ldmain.c, ldmisc.c: Use bfd_get_error and
+ bfd_set_error and new error names.
+
+Tue Feb 15 20:14:53 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
+
+ * ldwrite.c (build_link_order): If the cooked size of the section
+ has been set, use it, for determining link_order size.
+ (ldwrite): In the error message displayed if bfd_final_link fails,
+ indicate that it was in fact the final link step that failed.
+
+ * ldlang.c (lang_size_sections): Clear bfd_error before calling
+ bfd_relax_section, in case it returns false but doesn't flag an
+ error. If an error is returned, indicate which one it is in the
+ error message.
+
+ * Makefile.in (install-info): Depend on ld.info, and use "$<*" so
+ it'll get picked up from $(srcdir) if appropriate.
+
+Tue Feb 15 16:32:04 1994 David J. Mackenzie (djm@rtl.cygnus.com)
+
+ * scripttempl/aout.sc: Only pad .text if PAD_TEXT is set.
+ * emulparams/i386mach.sh (PAD_TEXT): Set PAD_TEXT.
+
+Fri Feb 11 17:02:49 1994 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * ldlex.l (comment): Increment line number when newline is read.
+
+Fri Feb 11 17:36:20 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldlang.c (lookup_name): Take new argument, force_load. If true,
+ reload the file even if it is already loaded.
+ (wild): Call lookup_name with force_load argument of 0.
+ (open_input_bfds): Call lookup_name with force_load argument of 1.
+ (print_symbol): Remove declaration of non-existent function.
+ (print_one_symbol): Return true rather than falling off end.
+
+Thu Feb 10 11:52:38 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldmain.c (main): Use %ld when printing long values.
+
+ * scripttempl/elf.sc: Move _edata after the .sdata section.
+ Permit OTHER_BSS_SYMBOLS to be defined.
+ * emulparams/elf32mipb.s (OTHER_BSS_SYMBOLS): Define _fbss.
+
+Mon Feb 7 16:31:15 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * Rename all "hppaosf" files to "hppaelf".
+ * Change all "osf" references to "elf" in hppaelf files.
+ * Makefile.in: Likewise.
+ * configure.in: Likewise.
+
+Sun Feb 6 20:31:56 1994 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * ldmain.c (main): Call xatexit, not atexit.
+ Call xmalloc_set_program_name.
+
+ * ldlang.c (lang_size_sections): Check if bfd_relax_section set
+ bfd_errno.
+
+Sat Feb 5 03:54:34 1994 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * emultempl/lnk960.em (append), emultempl/hppaosf.em
+ (hppaosf_finish): Call xmalloc, not ldmalloc.
+ * ldmain.c (preserve_output): Function removed.
+ (main): Do it here instead.
+
+Fri Feb 4 23:02:19 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * ldlang.h (LANG_FOR_EACH_{INPUT,OUTPUT}_SECTION): Delete (unused)
+ GNU C specific macros.
+
+ * emultempl/hppaosf.em (hppaosf_finish): Expand the only remaining
+ call to LANG_FOR_EACH_INPUT_SECTION.
+
+Fri Feb 4 16:26:08 1994 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * ldmisc.c (ldmalloc, xmalloc, ldrealloc, xrealloc): Functions
+ deleted; will use libiberty versions instead.
+ * ldctor.c ldfile.c ldlang.c ldmain.c ldmisc.c ldmisc.h lexsup.c
+ mri.c Makefile.in: Change callers.
+
+ * ldmisc.c (vfinfo): Remove cleanup code.
+ * ldmain.c (remove_output): Put it here (new function).
+ (preserve_output): New function.
+ (main): Register remove_output and preserve_output with atexit.
+ * ldmain.c ldgram.y: Call xexit instead of exit.
+ * ldmisc.h: Declare xexit.
+
+Fri Feb 4 15:19:01 1994 Steve Chamberlain (sac@cygnus.com)
+
+ * Makefile.in: Lots of new H8/500 memory models.
+
+Sun Jan 30 14:33:40 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
+
+ * ldlex.l: Removed duplicate rules.
+ (yywrap): Provide default definition, needed with some versions of
+ flex.
+
+Fri Jan 28 09:12:56 1994 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * ldmisc.c (vfinfo): For `%I', if the file is in an archive, print
+ the archive filename too.
+
+ * ldlex.l: Add rule to catch invalid input characters instead of
+ printing them. Include "ldmain.h" for program_name decl.
+ (lex_warn_invalid): New function.
+ * Makefile.in: Add dependency.
+
+Fri Jan 28 12:58:45 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
+
+ * Makefile.in (check): Don't bother running any tests of
+ cross-linker until the test suite no longer assumes native mode.
+
+Thu Jan 27 17:19:54 1994 Steve Chamberlain (sac@jonny.cygnus.com)
+
+ * ldlang.c (print_one_symbol, print_input_section): Print
+ global symbols in symbol table again.
+
+Thu Jan 27 12:35:01 1994 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * ldmain.c ldmain.h ldgram.y: If -v -V or --version was given,
+ exit successfully instead of complaining if no input files are
+ given.
+
+Tue Jan 25 13:19:41 1994 Stan Shebs (shebs@andros.cygnus.com)
+
+ * Makefile.in: Format variable definitions consistently.
+ (LD_PROG): Remove unnecessary variables from link command,
+ change variable LOADLIBES to EXTRALIBS.
+
+ * ldmain.c (main): Compute and display total execution time.
+ * ld.texinfo (-stats): Document the option.
+
+Mon Jan 24 12:56:37 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldmain.c (reloc_overflow): Added name, reloc_name and addend
+ arguments.
+
+ * ldlang.c (lookup_name): Set BFD GP size to -G argument value
+ after opening BFD.
+
+ * ldlang.c (relaxing): Removed global variable.
+ (lang_size_sections): If the canonical symbols have not already
+ been read in, read them in before relaxing.
+ * ldlang.h (relaxing): Removed declaration.
+
+Fri Jan 21 00:44:44 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldlang.c (new_afile): Initialize loaded field to false.
+ (lookup_name): If file was already loaded, don't call the
+ add_symbols entry point again.
+
+Wed Jan 19 13:57:00 1994 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * ld.texinfo: Clarify what -T option does.
+
+Tue Jan 18 16:18:15 1994 Steve Chamberlain (sac@jonny.cygnus.com)
+
+ * scripttempl/m88kbcs.sc: Don't use CREATE_OBJECT_SYMBOLS, that's
+ for a.out.
+
+Tue Jan 11 13:22:04 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldmain.c (add_archive_element): If trace_files or
+ trace_file_tries, print file name.
+ * ldlang.c (lookup_name): Likewise.
+ (ldlang_add_file): Don't put files on input_bfds list in reverse
+ order.
+
+ * scripttempl/elf.sc: Correct typo.
+
+Mon Jan 10 19:49:05 1994 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * ldgram.y, ldlex.l: Make the space between -e, -u, and -y and
+ their arguments optional, for compatibility with the old GNU ld.
+
+Fri Jan 7 20:00:24 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * scripttempl/elf.sc: Define __bss_start before the .sbss section.
+
+Thu Jan 6 00:13:10 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldmain.c (add_to_set): Add bitsize argument.
+ (constructor_callback): New function.
+ (link_callbacks): Add constructor_callback.
+ * ldctor.c (struct set_info): Add bitsize field.
+ (ldctor_add_set_entry): Add bitsize argument.
+ (ldctor_build_sets): Base the size of the elements of the set on
+ the bitsize, rather than always using LONG.
+ * ldctor.h (ldctor_add_set_entry): Add bitsize to declaration.
+
+ * ld.h (QUAD_SIZE): Define.
+ * ldgram.y (QUAD): New token.
+ (length): Handle it.
+ * ldlex.l: Return QUAD.
+ * lexsup.c (keywords): Add QUAD.
+ * ldwrite.c (build_link_order): Handle QUAD.
+ * ldlang.c (print_data_statement): Handle QUAD.
+ (lang_size_sections): Likewise.
+ (lang_do_assignments): Likewise.
+ * ldexp.c (exp_print_token): Add QUAD to table.
+ * ld.texinfo: Describe QUAD.
+
+ * scripttempl/alpha.sc: Don't create .lit4 or .sdata sections,
+ since the Alpha doesn't use them.
+
+Wed Jan 5 17:42:16 1994 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * ldemul.h (ld_emulation_xfer_struct): Comment the members.
+
+Sat Jan 1 13:39:31 1994 Rob Savoye (rob@darkstar.cygnus.com)
+
+ * Makefile.in, configure.in: Add support for VSTa micro-kernel.
+ * config/vsta.mt, emulparams/vsta.sh: New files for VSTa.
+
+Sat Jan 1 10:53:35 1994 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * scripttempl/aout.sc: Pad .text to DATA_ALIGNMENT if relocating;
+ needed for i386mach. (Should be a no-op on other systems.)
+
+ * emulparams/i386mach.sh (SEGMENT_SIZE): Fix again.
+ (PAGE_SIZE): Don't define; not used.
+
+Fri Dec 31 16:12:06 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldgram.y (yyerror): Make argument const char *, and actually
+ print it out rather than assuming it is a syntax error.
+ * ldmisc.h: Change declaration of yyerror.
+ * ldemul.c, ldwrite.c: Add /*ARGSUSED*/ as appropriate.
+
+Fri Dec 31 11:37:28 1993 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * emulparams/i386mach.sh (NONPAGED_TEXT_START_ADDR): Don't include
+ exec header offset, since the exec header isn't loaded.
+ (PAGE_SIZE, SEGMENT_SIZE): Agree with bfd/i386mach3.c.
+
+Thu Dec 30 13:01:43 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ A major rewrite to move the bulk of the linker into BFD so that
+ more efficient backend code can be written for specific object
+ files.
+ * lderror.c, lderror.h, ldindr.c, ldindr.h, ldsym.c, ldsym.h,
+ ldwarn.c, ldwarn.h, relax.c, relax.h: Removed.
+ * ldctor.c, ldctor.h: Complete rewrite.
+ * ldwrite.c, ldwrite.h: Complete rewrite.
+ * ld.h (strip_symbols_type, strip_symbols): Removed. Use
+ link_info.strip instead. Changed all uses.
+ (discard_locals_type, discard_locals): Removed. Use
+ link_info.discard instead. Changed all uses.
+ (ld_config_type): Removed relocateable_output field; use
+ link_info.relocateable instead; changed all uses. Added stats
+ field.
+ (set_asymbol_chain, get_asymbol_chain, get_loader_symbol,
+ set_loader_symbol): Removed.
+ * ldexp.h (node_class): Added etree_rel.
+ (etree_type): Added rel field.
+ * ldexp.c (exp_print_token): Bracketed table initialization.
+ (exp_relop): New function.
+ (fold_name): Use linker hash table rather than ldsym functions.
+ (exp_fold_tree): Likewise. Also, handle etree_rel case.
+ (exp_print_tree): Handle etree_rel.
+ * ldgram.y (strip_symbols, discard_locals): Removed.
+ (OPTION_stats, OPTION_no_keep_memory): New tokens. Handle them.
+ (REL): New token. Does not appear in grammar, but needed for
+ expression code.
+ (file): Don't call lang_final; it's called by main anyhow.
+ * ldlex.l: Accept -stats and -no-keep-memory options.
+ * ldlang.h (fill_type): Make unsigned int, not unsigned short.
+ * ldlang.c: Consistently use fill_type for fill argument.
+ (lang_init_script_file, script_file): Removed.
+ (create_object_symbols): Removed. Use
+ link_info.create_object_symbols_section instead. Changed all
+ uses.
+ (lang_add_keepsyms_file): Removed.
+ (lookup_name): Call bfd_link_add_symbols instead of
+ ldmain_open_file_read_symbol.
+ (wild): Don't iterate over script_file.
+ (open_output): Create link hash table.
+ (lang_place_undefineds): Rewrote.
+ (lang_size_sections): Handle relaxing (doesn't work yet).
+ (lang_relocate_globals): Removed.
+ (lang_finish): Use link hash table rather than ldsym functions.
+ (lang_common): Rewrote.
+ (lang_one_common): New function.
+ (ldlang_add_file): Add file to link_info.input_bfds list. Set
+ usrdata.
+ (create_symbol): Removed.
+ (lang_process): Don't call lang_init_script_file. Call
+ ldctor_build_sets rather than find_constructors. Don't call
+ lang_relocate_globals.
+ (lang_abs_symbol_at_beginning_of): Rewrote.
+ (lang_abs_symbol_at_end_of): Rewrote.
+ * ldmain.c (had_y): Removed.
+ (lprefix, lprefix_len): Removed; use link_info fields instead.
+ Changed all uses.
+ (multiple_def_count, commons_pending, undefined_global_sym_count,
+ total_symbols_seen, total_files_seen): Removed.
+ (link_callbacks, link_info): New variables.
+ (main): Initialize link_info. Don't call init_bfd_error_vector or
+ ldsym_init. Don't set now unused variables. Handle -stats.
+ (get_emulation): Removed obsolete and nonfunctional GNU960 code.
+ (add_ysym): Rewrote.
+ (read_entry_symbols, refize, enter_global_ref, enter_file_symbols,
+ search_library, gnu960_check_format, decode_library_subfile,
+ linear_library, symdef_library, clear_syms, subfile_wanted_p):
+ Removed.
+ (add_keepsyms_file, add_archive_element, multiple_definition,
+ multiple_common, add_to_set, warning_callback, undefined_symbol,
+ reloc_overflow, reloc_dangerous, unattached_reloc, notice_ysym):
+ New functions.
+ * ldmisc.c (vfinfo): Accept a string for %T, not a symbol. Don't
+ require symbols for %C; look them up instead.
+ * emultempl/hppaosf.em: Pass link_info to
+ hppa_look_for_stubs_in_section.
+ * Makefile.in: Rebuilt dependencies.
+ (CFILES): Removed lderror.c, ldindr.c, ldsym.c, ldwarn.c, and
+ relax.c.
+ (HFILES): Removed lderror.h, ldindr.h, ldsym.h, ldwarn.h, and
+ relax.h.
+ (EMULATION_OFILES): Depend on bfdlink.h, ldmain.h, ldexp.h,
+ ldlang.h and ldctor.h.
+
+ * Makefile.in (ldlex.c): Don't depend on ldgram.h. Remove
+ declarations of free and malloc from flex output. Change malloc
+ to ldmalloc in flex output.
+
+Thu Dec 16 21:19:57 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * ldmain.c (lprefix): Change default from a char to a string
+ with only one character.
+ (lprefix_len): Set default to one.
+
+ * ldmain.h (lprefix_len): Declare.
+
+ * ldsym.c (write_file_locals): Use strncmp rather than a character
+ comparison for lprefix.
+
+ * emultempl/m88kbcs.em (before_parse): Set lprefix and lprefix_len
+ correctly.
+
+ * emultempl/hppaosf.em: Include ldexp.h.
+ (before_parse): Set lprefix and lprefix_len correctly.
+
+Tue Dec 14 17:19:03 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldlex.h: Don't declare yywrap if it is a macro.
+ * ldlex.l: Include sysdep.h.
+ * ldlang.c (lang_for_each_statement_worker,
+ lang_for_each_statement): Forgot to use PARAMS.
+
+Mon Dec 13 14:30:03 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * Makefile.in: Added .PHONY targets where appropriate. Added some
+ comments. Also:
+ (gcclibdir, version): Removed unused variables.
+ (DEP): New variable, set to mkdep.
+ (ALL_CFLAGS): New variable. Used in .c.o target.
+ (CFILES, HFILES, GENERATED_CFILES, GENERATED_HFILES): New
+ variables.
+ (HEADERS, MANSOURCES, LDCSOURCES, GENERATED_SOURCES,
+ GENERATED_HEADERS, LDSOURCES, BFD_SOURCES, SOURCES): Removed
+ mostly obsolete variables. Adjusted remaining uses.
+ (DEF_EMUL): Removed variable.
+ (ldmain.o): Handle undefined EMUL error correctly.
+ (ldemul-list.h): Depend on config.status rather than Makefile.
+ Create via temporary file.
+ (ver960.c, roll, make): Removed obsolete targets.
+ (.dep, .dep1, dep.sed, dep, dep-in): New targets. Used to rebuild
+ dependencies.
+ * dep-in.sed: New file, used when rebuilding dependencies.
+
+Sat Dec 11 14:43:44 1993 Ian Lance Taylor (ian@deneb.cygnus.com)
+
+ Made many changes to eliminate gcc warnings. Made various
+ cosmetic changes, declared various things in header files, removed
+ various extern declarations from .c files. No substantive
+ changes.
+
+ * ldlang.c (lang_process): Ifdef out final call to
+ lang_size_sections again (reverting change of Nove 2), since it
+ breaks the Sun4 linker.
+
+Thu Dec 2 16:31:47 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * configure.in (alpha-*-netware*): New target; use alpha.
+
+Wed Dec 1 14:04:20 1993 Ken Raeburn (raeburn@cygnus.com)
+
+ * configure.in: Group targets by CPU. Merge some m68k target
+ entries with different CPU specs that use the same ld_target
+ values.
+
+ * configure.in: Add sparc*-*-coff.
+ * config/coff-sparc.mt, emulparams/coff_sparc.sh: New files.
+ * Makefile.in (ALL_EMULATIONS): Add em_coff_sparc.o.
+ (em_coff_sparc.c): Add dependencies and build rules.
+
+ * ldmisc.c (errno, sys_nerr, sys_errlist): Don't declare.
+
+Wed Dec 1 12:19:55 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldgram.y (OPTION_call_shared, OPTION_non_shared, OPTION_Oval):
+ New tokens.
+ (command_line_option): Accept and ignore them (for now).
+ * ldlex.l (<COMMAND>): Handle -non_shared, -call_shared, and -On
+ where n is a number.
+
+Mon Nov 22 14:14:29 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldmain.c (subfile_wanted_p): If merging a common symbol which is
+ not in bfd_com_section, create the section in the BFD so that it
+ can be placed in the right output section.
+
+Fri Nov 19 14:12:39 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * configure.in (mips*-sgi-irix5*): New target. Use mipsb-elf32.
+ * emulparams/elf32mipsb.sh (DATA_ADDR): Define.
+ (OTHER_READONLY_SECTIONS): Define for .reginfo.
+ (EXECUTABLE_SYMBOLS): Define for _DYNAMIC_LINK.
+ * scripttempl/elf.sc: Use EXECUTABLE_SYMBOLS when not relocating.
+ Move OTHER_READONLY_SECTIONS after all the other readonly
+ sections. Don't use DATA_ADDR twice.
+
+ * ldmain.c (enter_file_symbols): Removed duplicate tests of p. If
+ p is in a common section, make sure the BFD has a section of that
+ name.
+
+ * ldlang.c (lang_common): Add newline to error message.
+
+Thu Nov 11 15:54:41 1993 Stan Shebs (shebs@rtl.cygnus.com)
+
+ * emulparams/m68klynx.sh (SCRIPT_NAME): Define to use a
+ Lynx-specific script instead of m68kcoff.
+ (OUTPUT_FORMAT): Define as "coff-m68k-lynx".
+ (ENTRY): Define as __main.
+ (TEXT_START_ADDR): Define as 0.
+ (PAGE_SIZE): Define as 0x1000.
+ * emulparams/i386lynx.sh, emulparams/sparclynx.sh: Fix comment.
+ * scripttempl/m68klynx.sc: New file.
+
+Mon Nov 8 12:00:16 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldmain.c (get_emulation): Ignore -mips1, -mips2 and -mips3
+ arguments rather than treating them as emulation names.
+
+Fri Nov 5 09:02:52 1993 D. V. Henkel-Wallace (gumby@blues.cygnus.com)
+
+ * configure.in: Support x86 unixware and netware plus generic netware.
+
+Fri Nov 5 21:47:55 1993 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * emulparams/i386mach.sh (TEXT_START_ADDR, NONPAGED_TEXT_START_ADDR):
+ Correct values (?).
+
+Wed Nov 3 15:10:15 1993 Ken Raeburn (raeburn@rover.cygnus.com)
+
+ * Makefile.in (distclean): Don't delete dvi or info files.
+ (ld.info): Update dependency list.
+ (ld.dvi): Ditto. Extend TEXINPUTS to get bfdsumm.texi.
+
+Wed Nov 3 12:07:39 1993 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * ldlang.c (lang_add_output): Take new arg, FROM_SCRIPT.
+ Set output_filename instead of creating a new node.
+ (open_output): Don't set output_filename.
+ (lang_final): Create the new node here.
+ * ldlang.c, ldlang.h, ldgram.y, mri.c: pass FROM_SCRIPT.
+
+Tue Nov 2 15:45:51 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ From Pete Hoogenboom (hoogen@cs.utah.edu):
+
+ * scripttempl/hppaosf.sc: (___stack_zero, etext, _etext,
+ edata, _edata, end): Add definitions of these symbols.
+ (__end): Remove definition of this symbol.
+ (__data_start): Move definition of this symbol.
+
+ * emultempl/hppaosf.em: Various fixes and support for linker stub
+ generation.
+ (hppaosf_finish, hppaosf_search_for_padding_statements,
+ hppaosf_create_output_section_statements): New functions in
+ support of linker stub generation.
+ (ld_hppaosf_emulation): Redefine to include new
+ emulation-specific routines.
+
+ * ldlang.c (lang_process): Re-enable last call lang_size_sections.
+ Pass abs_output_section rather than NULL to avoid invalidating
+ absolute symbols.
+
+Thu Oct 28 21:16:42 1993 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * Makefile.in (ALL_EMULATIONS): Add em_i386mach.o.
+ (em_i386mach.c): New rule.
+ * configure.in (i[34]86-*-mach*): New case.
+ * config/i386-mach.mt: New file.
+ * emulparams/i386mach.sh: New file.
+
+Fri Oct 29 14:55:05 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ld.h (flag_is_*): Removed macros.
+ * ldmain.c (enter_global_ref), ldsym.c (write_file_locals):
+ Consistently check the BFD symbol flags directly, rather than
+ using file_is_* macros.
+
+Thu Oct 28 19:08:42 1993 Stan Shebs (shebs@rtl.cygnus.com)
+
+ * configure.in (sparc*-*-lynxos*): New target.
+ * Makefile.in: Add rule for em_sparclynx.c.
+ (ALL_EMULATIONS): Add Lynx emulations.
+ * config/sparc-lynx.mt: New file.
+ * emulparams/sparclynx.sh: New file.
+ * scripttempl/sparccoff.sc: New file.
+
+Thu Oct 28 13:50:25 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * Makefile.in: Add dependency for $(EMULATION_OFILES).
+
+Mon Oct 25 16:09:24 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * relax.c (write_relax): Check return value of bfd_seclet_link.
+
+Mon Oct 25 09:31:21 1993 Ken Raeburn (raeburn@cygnus.com)
+
+ * ldlang.c (delete_output_file_on_failure): New variable.
+ (open_output): Set it after bfd open succeeds.
+ * ldmisc.c (vfinfo): Test it.
+
+ Changes from Peter Hoogenboom, hoogen@cs.utah.edu:
+
+ * ldsym.c (write_file_locals): Set the BSF_FILE flag for object
+ symbols.
+
+ * ldemul.c: Support was added to allow emulation-specific
+ processing to occur. This support was added primarily for linker
+ stub generation in the elf32-hppa gld.
+ (ldemul_finish, ldemul_create_output_section_statements): New
+ functions.
+ * ldemul.h: Support was added to allow emulation-specific
+ processing to occur. (As described above.) Added finish and
+ create_output_section_statements fields to
+ ld_emulation_xfer_struct structure.
+ * ldlang.c: Add calls to emulation-specific routines.
+ (lang_process): Add call to
+ ldemul_create_output_section_statements function.
+ (lang_process): Add call to a emulation-specific routine (and
+ some processing after the call).
+
+Fri Oct 22 20:54:13 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
+
+ * configure.in: mips*- instead of mips-, mips*el changes
+
+Tue Oct 19 15:46:28 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * configure.in (alpha-*-osf*): New target; use alpha.mt.
+ * Makefile.in (ALL_EMULATIONS): Added em_alpha.o.
+ (em_alpha.c): New target; use alpha.sh and alpha.sc.
+ * config/alphaosf.mh (NATIVE_LIB_DIRS, HOSTING_CRT0): Define.
+ * config/alpha.mt: New file.
+ * emulparams/alpha.sh: New file.
+ * scripttempl/alpha.sc: New file.
+
+Fri Oct 15 02:20:04 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * ldlang.c (lang_size_sections, lang_common): ALIGN_N can't handle
+ types of different sizes (eg: 64 and 32 bits), so coerce.
+ * ld.h (ALIGN_N): Add warning about usage.
+
+Wed Oct 13 16:02:39 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldmain.c (enter_global_ref): Just ignore any weak symbol for
+ which we already have a definition, rather than checking in
+ several different places whether the symbol is weak.
+
+Tue Oct 12 17:30:51 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * configure.in (mips-*-elf*): New target; use mipsb-elf32.
+ * scripttempl/elf.sc: Only use OTHER_READONLY_SECTIONS and
+ OTHER_READWRITE_SECTIONS if relocating. Shell variables are not
+ expanded within them.
+ * config/mipsb-elf32.mt: New file.
+ * emulparams/elf32mipb.sh: New file.
+ * Makefile.in (em_elf32mipb.c): New target.
+
+Thu Sep 30 17:00:36 1993 Rob Savoye (rob@darkstar.cygnus.com)
+
+ * ldgram.y: In input_list, change lang_input_file_is_file_enum to
+ lang_input_file_is_search_file_enum so objects brought in using
+ INPUT() do a path lookup.
+
+Tue Sep 28 13:31:23 1993 Stan Shebs (shebs@rtl.cygnus.com)
+
+ * configure.in: Change Lynx ld_target to be {i386,m68k}-lynx
+ instead of {i386,m68k}-coff.
+ * Makefile.in (em_i386lynx.c, em_m68klynx.c): New targets.
+ * config/i386-lynx.mt: New file.
+ * config/m68k-lynx.mt: New file.
+ * emulparams/i386lynx.sh: New file.
+ * emulparams/m68klynx.sh: New file.
+
+ * scripttempl/i386coff.sc: Make ENTRY get its value from ${ENTRY},
+ but defaulting to _start.
+
+ * ldemul.c, ldfile.c, ldlang.c, ldmain.c, ldmisc.c, ldmisc.h,
+ ldsym.c, ldwarn.c: Rename info to info_msg, to avoid conflict with
+ LynxOS libc.
+
+Thu Sep 23 14:51:03 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * config/solaris2.mh: New file. Define HOSTING_CRT0 and
+ HOSTING_LIBS for testing.
+
+Fri Sep 17 17:52:24 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ Finish up support for i386-sysv4 (without shared libraries):
+ * ld.h (flag_is_weak): Define.
+ * ldlang.c (print_symbol): Mention whether symbol is weak.
+ (print_input_section): Print weak symbols as globals.
+ * ldmain.c (refize): Do not zero out BSF_WEAK flag.
+ (enter_global_ref): Do not warn if a weak symbol redefines a
+ global symbol. Do not let a weak symbol redefine a common symbol.
+ (enter_file_symbols): Treat weak symbols as global symbols.
+ (subfile_wanted_p): Do not pull in an object file from a archive
+ just to resolve an undefined weak symbol.
+ * ldmisc.c (vfinfo): Don't needlessly malloc space after a fatal
+ error; the error might be that malloc has run out of space.
+ * ldsym.c (write_file_locals): Treat weak symbols as global.
+ * configure.in (i[34]86-*-sysv4*, i[34]86-*-elf*): New targets;
+ use i386-elf.
+ * config/i386v4.mh: New file; set NATIVE_LIB_DIRS to /usr/ccs/lib.
+ * config/i386-elf.mt: New file; set EMUL to elf_i386.
+ * emulparams/elf_i386.sh: New file.
+ * scripttempl/elf.sc: Use ${NOP} as filler (defaults to 0).
+ * Makefile.in (NATIVE_LIB_DIRS): Define to be empty.
+ (ALL_EMULATIONS): Add em_elf_i386.o.
+ (GENSCRIPTS): Pass NATIVE_LIB_DIRS as sixth argument.
+ (em_elf_i386.c): New target, like other em_*.c targets.
+ ($(LD_PROG)): Pass $(CFLAGS) to $(CC).
+ * genscripts.sh: Accept NATIVE_LIB_DIRS as sixth argument. If
+ nonempty, and configured for native, add it to LIB_PATH.
+
+Fri Sep 17 13:07:39 1993 Stan Shebs (shebs@rtl.cygnus.com)
+
+ * scripttempl/{h8300.sc,h8500.sc,i386coff.sc,m68kcoff.sc,sh.sc}:
+ Added statements to pass stab and stabstr sections through and
+ mark them as NOLOAD, which makes GDB happier.
+
+Wed Sep 15 16:02:29 1993 Stan Shebs (shebs@rtl.cygnus.com)
+
+ * configure.in: Accept m68k-lynx-lynxos config.
+
+ * Makefile.in: Use $(SHELL) to run genscripts.sh.
+
+Sun Sep 12 16:04:40 1993 Doug Evans (dje@cygnus.com)
+
+ * config/coff-h8300.mt: Add EMUL=h8300h.
+
+ * ldmain.c (main): Call set_scripts_dir after argv has been processed.
+
+Fri Sep 10 09:36:29 1993 Jeffrey Wheat (cassidy@cygnus.com)
+
+ * Makefile.in: Changed CXX back to g++.
+
+Fri Sep 10 09:34:29 1993 Jeffrey Wheat (cassidy@cygnus.com)
+
+ * Makefile.in: Fixed RUNTEST* CXX CXXFLAGS macros and check rule.
+
+Fri Sep 10 07:26:57 1993 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * Makefile.in (TAGS): Use shell wildcards.
+
+Tue Sep 7 18:04:54 1993 Jeffrey Osier (jeffrey@cygnus.com)
+
+ * Makefile.in: add TEXINPUTS variable and use it in ld.dvi target
+
+Fri Sep 3 16:46:41 1993 Roland H. Pesch (pesch@fowanton.cygnus.com)
+
+ * ld.texinfo: re-enable included config file; conditionalize doc
+ for -oformat to interact properly with SingleFormat doc config
+ var; rename @up/@down to @raisesections/@lowersections.
+
+Wed Aug 25 16:29:56 1993 K. Richard Pixley (rich@sendai.cygnus.com)
+
+ * configure.in: recognize m88110.
+
+Tue Aug 24 18:49:40 1993 Ken Raeburn (raeburn@cambridge.cygnus.com)
+
+ From Peter Hoogenboom <hoogen@shafer.cs.utah.edu>:
+ * emultempl/hppaosf.em (ld_hppaosf_emulation): Correct name for PA
+ ELF emulation is "elf32-hppa" not "elf-big".
+ (hppaosf_before_parse): Remove unneeded processing of environment
+ variables.
+ * scripttempl/hppaosf.sc: Include .hppa_linker_stubs sections in
+ .text segment of output file.
+ * emulparams/hppaosf.sh (OUTPUT_FORMAT): Use elf32-hppa.
+
+Tue Aug 24 16:17:00 1993 K. Richard Pixley (rich@sendai.cygnus.com)
+
+ * ld.h: define BYTE_SIZE, SHORT_SIZE, and LONG_SIZE which are no
+ longer in bfd.h.
+
+ * ldlang.c, ld.h: updated copyright.
+
+Tue Aug 17 15:22:03 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldlang.c (open_output, lang_check): Check return value of
+ bfd_set_arch_mach.
+
+Tue Aug 17 07:02:19 1993 Steve Chamberlain (sac@phydeaux.cygnus.com)
+
+ * scripttempl/h8500.sc: Start all sections in a different segment.
+ * scripttempl/z8ksim.sc: Handle constructors
+
+Thu Aug 12 16:05:37 1993 Jeffrey Wheat (cassidy@cygnus.com)
+
+ * Makefile.in: revert earlier changes back to execute runtest
+ with make check. cdtest and bootstrap now function as they
+ did within the Makefile.
+
+Thu Aug 12 10:20:05 1993 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * Makefile.in: Update dependencies.
+
+ * configure.in: Set EMULATION_OFILES in Makefile based on
+ --with-targets option.
+
+Thu Aug 12 08:52:29 1993 Jeffrey Wheat (cassidy@cygnus.com)
+
+ * Makefile.in: check targets reimplemented to old way.
+
+Wed Aug 11 08:26:11 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * config/i386v.mh, config/irix4.mh: Use gcc
+ -print-libgcc-file-name rather than $(libdir)/libgcc.a.
+ * config/i386sco.mh: New file; copy of i386v.mh to correspond to
+ bfd/configure.host change.
+
+Mon Aug 9 14:25:35 1993 Ken Raeburn (raeburn@cambridge.cygnus.com)
+
+ * scripttempl/elf.sc: Handle .line and .debug* sections.
+
+ * ldlex.l: Use bfd_scan_vma, not strtoul.
+
+Fri Aug 6 08:57:39 1993 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * ldexp.c, ldfile.c, ldlang.c, lexsup.c, ldmain.c, ldemul.c:
+ Remove inital caps in some error messages, change "can't" to
+ "cannot", add missing colons.
+ * ldmisc.c (vfinfo): Print "%%" as a single %.
+ For '%' followed by unrecognized character, print them both
+ verbatim instead of expecting a char * arg.
+ For '%C', don't put the function name in parens.
+
+ * ldexp.c (invalid): Pass "%%", not "% ".
+
+Fri Aug 6 14:31:22 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * scripttempl/mips.sc: Always define _ftext, _fdata, _fbss.
+ (BSS_VAR): Removed; now always define _fbss.
+ * emulparams/mipsidt.sh, emulparams/mipsidtl.sh (BSS_VAR):
+ Removed.
+
+Thu Aug 5 15:55:19 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
+
+ * configure.in: z8k-coff is the same as z8k-sim
+
+Wed Aug 4 21:00:18 1993 Jeffrey Wheat (cassidy@cygnus.com)
+
+ * testsuite/lib/ld.exp: new file
+ * testsuite/config/unix-ld.exp: new file
+ * testsuite/ld.bootstrap/bootstrap.exp: new file
+ * Makefile.in: add dejagnu support for make check
+
+Wed Aug 4 17:52:32 1993 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * ldlex.l (comment): Add missing newline in message.
+ * ldindr.c (add_indirect): Ditto.
+ * ldexp.c (exp_fold_tree): Ditto.
+
+Tue Aug 3 10:57:41 1993 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * ldgram.y, ldlex.l, mri.c, ldwrite.c: Change multiple commons
+ into externs.
+
+ * ldmisc.c (multiple_warn): New function.
+ * ldmisc.h: Declare it.
+ * ldmain.c (enter_global_ref): Call it.
+ * ld.h (ld_config_type): Add warn_common.
+ * ldlex.l, ldgram.y: Set it with -warn-common option.
+ * ldver.c (help): Document it.
+
+Mon Aug 2 12:04:36 1993 Ken Raeburn (raeburn@cambridge.cygnus.com)
+
+ * scripttempl/elf.sc: Add hooks for .sdata, .sbss, and
+ target-specific sections, and for changing data section vma.
+
+Mon Jul 26 14:00:02 1993 Ken Raeburn (raeburn@deneb.cygnus.com)
+
+ * ldgram.y (OPTION_Qy, OPTION_Y, OPTION_dn, OPTION_YP): New
+ terminals, for Solaris.
+ (dirlist_ptr): New static variable.
+ (command_line_option): Accept new options.
+
+ * ldlex.l: Accept command-line options "-Qy", "-dn", "-Y", and
+ "-YP,...".
+
+ * config/sun4sol2.mt: Pass emulation name without ".sh".
+
+ * emulparams/elf32_sparc.c: Renamed from elf32-sparc.c.
+ * config/sun4sol2.mt (em_elf32_sparc.c): Adjusted accordingly.
+
+Fri Jul 23 13:51:09 1993 Ken Raeburn (raeburn@cambridge.cygnus.com)
+
+ * scripttempl/elf.sc: Add support for .init, .fini, .ctors,
+ .dtors, .data1, .rodata1 sections, instead of combining them into
+ other sections. For `-r', set all section start addresses to
+ zero.
+
+ * emulparams/elf32-sparc.sh (TEXT_START_ADDR,
+ NONPAGED_TEXT_START_ADDR): Value should be 0x10100.
+ (MAXPAGESIZE): Renamed from PAGE_SIZE.
+
+Wed Jul 21 14:28:42 1993 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * genscripts.sh: If this is the default emulation, set
+ COMPILE_IN.
+ * emultempl/*.em: Use it to determine whether to compile in the
+ scripts.
+
+ * Makefile.in (GENSCRIPTS): Pass the default emulation name to
+ genscripts.sh. Pass the current emulation name without ".sh" on
+ the end.
+ * genscripts.sh: Take an default emulation arg.
+ Use the current emulation name as EMULATION_NAME.
+ Make default lib path for cross-compiling ':', not null.
+ * emulparams/*.sh: Don't set EMULATION_NAME.
+ * ldemul.c (ldemul_get_script): Take isfile arg.
+ Pass it to emulation's get_script function.
+ * ldemul.h: Adjust get_script prototypes.
+ * ldfile.c (ldfile_find_command_file): Renamed from find_a_name.
+ No longer static.
+ * ldfile.h: Declare it.
+ * ldgram.y: Accept a script on the command line again,
+ for parsing compiled-in scripts.
+ * ldmain.c (main): If ld script is a file, parse it as a -T
+ option, otherwise parse it directly.
+ * emultempl/*.em (*get_script): Return the scripts themselves if
+ this is the default emulation; otherwise return their file names.
+ * emultempl/m88kbcs.em: New file, to take m88kbcs #ifdef out of
+ generic.em.
+ * emulparams/m88kbcs.sh: Use it.
+
+ * ld.h (ld_config_type::unix_relocate): Remove unused element.
+
+Tue Jul 20 12:01:49 1993 Ken Raeburn (raeburn@cambridge.cygnus.com)
+
+ * Makefile.in (ALL_EMULATIONS): Delete em_i386linux.o (for which
+ there's no change log entry yet, tsk tsk) from the list of
+ emulations compiled in until Mark gets around to checking in
+ emulparams/i386linux.sh.
+ (ldemul-list.h): Depend on Makefile, so if EMULATION_OFILES is
+ changed, this file gets updated.
+
+Fri Jul 16 14:14:32 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * ldgram.y (OPTION_Lfile): New token.
+ (command_line_option): Accept OPTION_L NAME (whitespace after -L).
+ * ldlex.l (<COMMAND>): Accept -L without FILENAME.
+
+Fri Jul 16 13:44:26 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * configure.in: h8/300h support needs own .mt file.
+ config/coff-h8300h.mt: New file.
+
+Thu Jul 15 12:44:35 1993 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * ldmain.c: Don't include sys/stat.h; it already got included
+ somewhere along the way.
+
+Thu Jul 15 14:43:34 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * Makefile.in: Add h8300h support.
+ emulparams/h8300h.sh: New file.
+ scripttempl/h8300h.sc: New file.
+
+Thu Jul 15 12:44:35 1993 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * ldfile.c (ldfile_open_file): In error message, use the name the
+ user gave (e.g., "-lc"), rather than the base file name.
+
+ * ldexp.c (exp_fold_tree): Don't assign an int to an enum.
+
+ * ldmain.[ch]: Remove initial Q_ from function names.
+ * ldexp.c, ldindr.c, ldlang.c: Change callers.
+
+ * ldfile.c, ldmain.c, ldgram.y: Rename option_v to trace_file_tries.
+
+ * ldlang.c (lang_process): Move loading of default script from
+ here to main. Add a "/" to start of script name to prevent
+ finding it in "." first.
+
+ * ldmain.c (set_scripts_dir): Don't look in "." first.
+
+ * ldgram.y, ldlang.c, ldsym.c: Remove traces of unused var
+ option_longmap.
+
+Thu Jul 15 10:55:59 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * Makefile.in (em_m88kbcs.c): Correct dependency.
+ * scripttempl/m88kbcs.sc: It's ARCH, not arch. Removed TARGET
+ statement. Changed OUTPUT_FORMAT to use ${OUTPUT_FORMAT}.
+ * emulparams/m88kbcs.sh: It's coff-m88kbcs, not m88kbcs.
+
+Wed Jul 14 21:42:53 1993 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * ldfile.c (ldlang_open_file, ldfile_open_command_file),
+ main.c (main): Print the errno string in the error message.
+
+Tue Jul 13 20:00:30 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * configure.in: Accept h8300h for target cpu.
+
+ * ldmisc.c (vfinfo): Have demangle remove leading underscore if
+ present (demangle is smart enough to know whether to do it or not).
+
+Mon Jul 12 11:45:48 1993 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * ldmain.c (set_scripts_dir): Check . and <ld bin dir>/../lib for
+ ldscripts, as well as <ld bin dir> and SCRIPTDIR.
+
+ * ldlang.c (lang_process): Use sizeof instead of magic constant.
+
+ * ldmain.c (get_emulation, check_for_scripts_dir,
+ set_scripts_dir): New functions.
+ (main): Call them.
+
+Mon Jul 12 10:57:03 1993 Ken Raeburn (raeburn@deneb.cygnus.com)
+
+ * scripttempl/elf.sc: Include .init, .fini, .rodata sections.
+ Create symbol "end" instead of "__end". Comment out some parts
+ that may not be needed (yet) for elf.
+
+ * configure.in: Accept sparc-elf and sparc-solaris2 configs.
+
+Thu Jul 8 15:33:32 1993 Ken Raeburn (raeburn@cambridge.cygnus.com)
+
+ * Makefile.in (ALL_EMULATIONS): Include $(OTHER_EMULATIONS).
+
+ * ldmisc.h (einfo, minfo, info): Don't bother with PARAMS macro
+ when no prototype is being supplied.
+ (ldmalloc, ldrealloc): Size argument is now size_t.
+
+ * ldmisc.c (finfo): New function, accepts FILE* argument.
+ (vfinfo, case 'v'): New format character; displays bfd_vma in hex
+ without leading zeros.
+ (vfinfo, cases 'R' and 'C'): Use finfo(%v) when displaying a
+ bfd_vma value, instead of fprintf(%x) which won't hold a long long
+ value.
+ (concat, buystring): String lengths are size_t.
+ (ldmalloc, ldrealloc, xrealloc): Size argument is now size_t.
+
+ * ldlang.c (new_statement): Size argument is now size_t. Added
+ forward declaration with prototype.
+
+Thu Jul 8 10:53:47 1993 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * ldgram.y (OPTION_v): Don't turn on verbose output.
+
+Wed Jul 7 17:10:45 1993 Ken Raeburn (raeburn@cambridge.cygnus.com)
+
+ * ldlex.l: Get rid of local typedef for bfd_vma! Get it from
+ bfd.h instead.
+
+Wed Jul 7 11:33:12 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * Makefile.in (install): Don't install as $(tooldir)/bin/gld;
+ collect2 doesn't look for gld any more anyhow.
+
+Mon Jul 5 14:29:48 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * ldlang.c (lang_relocate_globals): Skip indirect symbols, which
+ now have a non NULL srefs_chain.
+
+ * config/hp300hpux.mt: Use emulation hp3hpux rather than
+ hp300hpux, since the latter does not exist.
+
+Fri Jul 2 18:06:05 1993 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * genscripts.sh: Put the scripts in the ldscripts directory, not
+ emulations.
+ * configure.in (ldscripts): Make, instead of emulations.
+ * Makefile.in (scriptdir): Take off the "ld" part.
+ (install, clean, distclean): Use ldscripts, not emulations.
+ In tests, don't pass -Lemulations.
+ Don't pass tooldir/lib to genscripts.sh.
+ * genscripts.sh: Don't take tooldir/lib arg.
+ * ldlang.c (lang_process): Add "ldscripts/" to the name of the
+ default script file.
+
+Fri Jul 2 17:13:35 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * scripttempl/h8300.sc: Add .tors section for constructor/destructors.
+
+Thu Jul 1 16:38:45 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * config/coff-h8300.mt: EMUL=h8300hms -> h8300.
+
+Wed Jun 30 15:45:55 1993 K. Richard Pixley (rich@sendai.cygnus.com)
+
+ * Makefile.in (.y.c): skip default .y.c rules. gnu make can now
+ run in parallel without colliding on yacc's static file names.
+ Without the stub rule, make will try to start two yacc's
+ concurrently which fails because of yacc's static file names.
+
+Tue Jun 29 12:20:36 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * ldmain.c (subfile_wanted_p): Don't dump core if there are no
+ symbols.
+
+Mon Jun 28 12:22:11 1993 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * genscripts.sh (LIB_PATH): Only add /usr/local/lib if it's
+ different from libdir.
+
+ * Makefile.in (scriptdir): Base on tooldir, not datadir.
+
+Sat Jun 26 12:03:57 1993 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * ldver.c (help): New function.
+ * ldver.h: Declare it.
+ * ldlex.l, ldgram.y: Recognize new options --help and --version.
+
+Mon Jun 21 20:39:48 1993 Ken Raeburn (raeburn@poseidon.cygnus.com)
+
+ * Makefile.in (INCLUDES): Don't need ../include any more.
+
+Mon Jun 21 16:38:35 1993 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * ldlex.l, ldgram.y: Support new -oformat option.
+ Remove attempt at supporting script fragments on the command line.
+ * ldlang.c (lang_add_output_format): Take new arg, FROM_SCRIPT.
+ * mri.c (mri_format), ldgram.y: Change callers.
+ * ldlang.h: Change prototype.
+
+Thu Jun 17 16:53:56 1993 david d `zoo' zuhn (zoo@cygnus.com)
+
+ * Makefile.in: canonicalize install.sh; for use within
+ this directory (and subdirs)
+
+Thu Jun 17 14:33:09 1993 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * ldgram.y: Tweak grammar to make reporting of invalid options work.
+
+ * Makefile.in (.cc.o): Restore .SUFFIXES entry for .cc
+ and .cc.o rule.
+
+Wed Jun 16 11:45:32 1993 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * ldfile.c (ldfile_open_command): Don't try .ld extension.
+ It wasn't documented (or likely used) and wastes time.
+ (try_open): If EXTEN is empty, don't try it.
+
+ * ldctor.c, lderror.c, ldexp.c, ldfile.c, ldindr.c, ldlang.c,
+ ldlex.l, ldmain.c, ldmisc.c, ldsym.c, ldver.c, ldwarn.c,
+ ldwrite.c, lexsup.c, mri.c, relax.c: Replace DEFUN macro calls
+ with normal function declarations.
+
+ * Move *.em to emultempl/*.em. Move *.sh to emulparams/*.sh.
+ Move *.sc-sh to scripttempl/*.sc.
+ * {emultempl,emulparams,scripttempl}/README: New files.
+ * emultempl/sh.em, emultempl/st2000.em, emultempl/z8ksim.em,
+ emultempl/h8300hms.em, emultempl/h8500hms.em: Files removed,
+ replaced with generic.em.
+ * emulparams/h8300.sh, emulparams/h8500.sh, scripttempl/h8300.sc,
+ scripttempl/h8500.sc: Renamed from h8[35]00hms.s[ch]. Change
+ their contents to omit the "hms".
+
+ * *.em (*_get_script): Return script name instead of script contents.
+ * ldlang.c (lang_process): Change caller.
+
+ * ldlex.l, ldgram.y: Recognize -m option.
+ Check for input files after *all* options in grammar.
+ * ldmain.c (main): Check for -m options. Add default directory
+ for -m.
+
+ * mkscript.c: File removed.
+ * genscripts.sh: Take two more parameters, tooldirlib and libdir,
+ to add to the default LIB_PATH.
+ Look for input files in the new subdirectories.
+ Create the scripts in emulations subdirectory and don't filter
+ them through mkscript.
+ * configure.in: Make the emulations subdirectory.
+
+ * Makefile.in: Account for all of the above changes.
+ Remove unused .SUFFIXES. Get libgcc.a path with gcc
+ -print-libgcc-file-name instead of $(libdir)/libgcc.a.
+ Put CFLAGS last in the compilation rules.
+ Add -I../bfd to INCLUDES so sysdep.h is found.
+
+Tue Jun 15 23:04:46 1993 Ken Raeburn (raeburn@cambridge.cygnus.com)
+
+ * Makefile.in (INCLUDES): Look in ../include, not ../bfd.
+
+ * scripttempl/aout.sc, emulparams/aout.sh: Add SHLIB_PATH like
+ STACKZERO. Make STACKZERO dependent on RELOCATING, not
+ RELOCATION.
+ * emulparams/hp3hpux.sh (SHLIB_PATH): Define it.
+
+Mon Jun 14 19:06:15 1993 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * ldfile.c (try_open): If opening without the extension fails,
+ try with the extension even if -v or -V was given.
+ had_script is imported (from ldgram.y), not exported.
+
+Mon Jun 14 16:26:10 1993 david d `zoo' zuhn (zoo at rtl.cygnus.com)
+
+ * Makefile.in: remove parentdir support, use INSTALL_XFORM
+
+Thu Jun 10 14:00:06 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * ldexp.c (exp_fold_tree): Don't lose the old flag bits.
+ * ldgram.y (statement_list_opt): New nonterminal, either empty or
+ statement_list.
+ (section): Use statement_list_opt, not statement_list.
+ * scripttempl/m68kcoff.sc, emulparams/m68kcoff.sh: Gather
+ constructors and destructors and define __CTOR_LIST__ and
+ __DTOR_LIST__ appropriately.
+ * scripttempl/sa29200.sc, emulparams/sa29200.sh: Gather
+ constructors and destructors and define ___CTOR_LIST__ and
+ ___DTOR_LIST__ appropriately.
+
+Mon Jun 7 12:53:28 1993 Per Bothner (bothner@rtl.cygnus.com)
+
+ * Makefile.in (INCLUDES): Add -I../bfd for sysdep.h and bfd.h.
+ * configure.in: No longer need to configure to get sysdep.h.
+
+Fri Jun 4 16:18:24 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
+
+ * Makefile.in: remove install:all and install-info:info
+ dependencies (these cause some spurious rebuilds at 'make install'
+ time)
+
+Fri Jun 4 08:50:14 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * configure.in (mips-idt-ecoffl*): New target; use mips-idtl.
+ (mips-idt-ecoff*): Added trailing '*'.
+ * config/mips-idtl.mt: New file; use EMUL of mipsidtl.
+ * emulparams/mipsidtl.sh: New file; like mipsidt.sh, but little
+ endian.
+ * Makefile.in (ALL_EMULATIONS): Added em_mipsidtl.o.
+
+ * config/sun3.mh (HOSTING_LIBS, HOSTING_EMU): Removed obsolete and
+ incorrect definitions.
+
+Tue Jun 1 14:56:10 1993 Per Bothner (bothner@rtl.cygnus.com)
+
+ * ldsym.c (write_file_locals): Write BSF_CONSTRUCTOR
+ symbols, unless stripping.
+
+Tue May 25 15:34:25 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * Makefile.in: configure looks for ####, so remove lines with many
+ '#' characters.
+ * config/irix4.mh, config/i386v.mh: New files; set HOSTING_CRT0
+ and HOSTING_LIBS correctly so that ``make check'' will work.
+
+Thu May 20 13:56:16 1993 Per Bothner (bothner@deneb.cygnus.com)
+
+ * scripttempl/mips.sc, emulparams/mips.sh: Define _etext, _edata,
+ and _end, in addition to etext, edata, and end. Needed for IRIX
+ 4.0.5F. Patch from mwp@iconix.oz.au (Michael Paddon).
+
+ * Version 2.2.1 released.
+
+Thu May 20 11:42:06 1993 Ken Raeburn (raeburn@cambridge.cygnus.com)
+
+ * scripttempl/mipsbsd.sc, emulparams/mipsbsd.sh: Renamed from
+ aout-mipsbsd.sc-sh.
+ * emulparams/mipsbsd.sh (EMULATION_NAME): Use new file name.
+
+Tue May 18 17:10:24 1993 Ken Raeburn (raeburn@cambridge.cygnus.com)
+
+ * Makefile.in (LDDISTSTUFF): Remove ld.mm since we can't build it
+ properly right now.
+
+ * Version 2.2 released.
+
+Mon May 17 15:37:28 1993 Ken Raeburn (raeburn@deneb.cygnus.com)
+
+ * ldver.c (ldversion): Bump version number to 2.2.
+
+Mon May 17 12:44:31 1993 Per Bothner (bothner@cygnus.com)
+
+ * NEWS: New file.
+
+Fri May 14 11:26:24 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * scripttempl/mips.sc, emulparams/mips.sh: Don't define BSS_VAR
+ unless relocating.
+
+Wed May 12 13:33:29 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * Makefile.in (mkscript.o, mkscript): Build mkscript via
+ mkscript.o, rather than directly from mkscript.c.
+
+Tue May 4 21:58:56 1993 Ken Raeburn (raeburn@cambridge.cygnus.com)
+
+ * configure.in: Look for ${target_makefile_frag} relative to
+ ${srcdir}, not relative to build directory.
+
+ * emultempl/hppaosf.em, scripttempl/hppaosf.sc,
+ emulparams/hppaosf.sh: New files.
+ * configure.in: Recognize hppa*-hp-osf.
+ * Makefile.in (ALL_EMULATIONS): Include hppaosf emulation.
+ (em_hppaosf.c): Build it.
+ * config/hppaosf.mh, config/hppaosf.mt: New files.
+
+ * ld.h (ALIGN_N): Renamed from ALIGN, because that conflicted with
+ some system header files. All uses changed.
+
+ * configure.in: Recognize i386-aix configurations as i386-coff
+ targets.
+
+ * configure.in: Recognize m68*-*-hpux.
+ * scripttempl/aout.sc: If STACKZERO and RELOCATING are both defined, output
+ the value of STACKZERO.
+ * Makefile.in (ALL_EMULATIONS): Include hp300-hpux emulation.
+ (em_hp3hpux.c): Build it.
+ * emulparams/hp3hpux.sh, config/hp300hpux.mt: New files.
+
+Tue May 4 12:37:35 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * scripttempl/mips.sc: Put constructors in the .data section.
+ * Makefile.in (cdtest): Added dependency on ld.new.
+
+Mon May 3 19:43:39 1993 Per Bothner (bothner@cygnus.com)
+
+ * Makefile.in: Change definition of $(tooldir) to match FSF.
+ * emulparams/vax.sh, config/vax.mt, configure.in, Makefile.in:
+ Support VAX Ultrix and BSD.
+
+Mon Apr 26 18:35:47 1993 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * emultempl/sh.em, emulparams/sh.sh, scripttempl/sh.sc: New
+ files supporting Hitachi SH.
+
+Wed Apr 14 21:01:51 1993 John Gilmore (gnu@cygnus.com)
+
+ * ldlang.h (struct memory_region): Change `length' and
+ `old_length' fields to bfd_size_type. Eliminate use of bfd_offset.
+ * ldlang.c, mri.c: Corresponding changes, plus lint.
+
+Thu Apr 8 22:08:18 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * configure.in: For all i386 targets, accept i486 as well.
+
+Mon Apr 5 17:33:39 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * ldlang.c (wild_doit): Preserve all flags for a
+ SEC_SHARED_LIBRARY section.
+ (size_input_section): Consider any SEC_HAS_CONTENTS section when
+ computing largest_section.
+
+Fri Apr 2 14:33:52 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * ldlang.c (lang_output_section_statement_lookup): Initialize all
+ fields of newly created structure.
+
+Wed Mar 31 18:19:15 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * ldmain.c (g_switch_value): New variable.
+ * ldgram.y (OPTION_G, OPTION_Gval): New tokens.
+ (command_line_option): Accept -G and set g_switch_value.
+ * ldlex.l (COMMAND): Accept -G.
+ * ldlang.c (open_output): Call bfd_set_gp_size on new BFD.
+
+Tue Mar 30 09:40:25 1993 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ Support for linking and loading at different places:
+
+ * ldlex.l: Add "AT" keyword.
+ * ldgram.y: Cleanup, and parse AT.
+ * ldlang.c (print_output_section_statement): Print output address
+ of section in map. (lang_size_sections): Fill sections' lma with
+ load address.
+ * ldlang.h (lang_output_section_statement_type): Add load_base
+ information.
+
+ * ldindr.c (add_indirect): Keep more information in the alias
+ symbol chain.
+ * ldlang.c (wild_doit): Don't inherit NEVER_LOAD section
+ attribute from an input section.
+ * ldmain.c (Q_enter_file_symbols): Common section is NEVER_LOAD by
+ default. (Q_enter_file_symbos): Indirect symbols now are known by
+ their section, not a special symbol flag.
+ * ldsym.c (write_file_locals): Indirect symbols aren't local.
+ (write_file_globals): Write the mapping for an indirect symbol.
+ * relax.c (build_it): When forced to write a NEVER_LOAD section,
+ fill it with zeros.
+
+Tue Mar 23 13:24:10 1993 Jeffrey Osier (jeffrey@fowanton.cygnus.com)
+
+ * ld.texinfo: changes for q1
+
+Tue Mar 23 00:13:29 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
+
+ * Makefile.in: add dvi target, define & use TEXI2DVI, add installcheck
+
+Mon Mar 8 20:30:35 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
+
+ * Makefile.in: rename HOST_CC to CC_FOR_BUILD
+
+Thu Mar 4 12:44:33 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * mips.sc-sh: Added variables which may be overridden by a
+ specific emulation.
+ * emulparams/mipsidt.sh: New file; emulation for IDT MIPS board.
+ * Makefile.in (ALL_EMULATIONS): Added em_mipsidt.o.
+ (em_mipsidt.c): New target. Uses mipsidt.sh and mips.sc-sh.
+ * config/mips-idt.mt: New file; sets EMUL to mipsidt.
+ * configure.in (mips-idt-ecoff): New target; uses mips-idt.
+
+Sat Feb 27 00:00:14 1993 Ken Raeburn (raeburn@cambridge.cygnus.com)
+
+ * aout-mipsbsd.sc-sh, emulparams/mipsbsd.sh: New files from Ralph
+ Campbell, ralphc@pyramid.com.
+ * emulparams/i386bsd.sh, config/i386bsd.mt: New files.
+ * configure.in, Makefile.in: Added support for mipsbsd and 386bsd.
+
+Thu Feb 25 15:33:10 1993 Per Bothner (bothner@rtl.cygnus.com)
+
+ * mri.c: Add extern declaration of strdup.
+ * ldsym.c (KEEP macro): Add spaces around '=' for the
+ sake of old (e.g. PCC) compilers.
+
+Wed Feb 24 19:49:31 1993 Per Bothner (bothner@rtl.cygnus.com)
+
+ * ldver.c: Bump to version 2.1.
+
+Fri Feb 12 08:09:11 1993 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * ldgram.y: allow section types without address expressions.
+ * ldlang.c (lang_relocate_globals): avoid possible hang with
+ undefined but unreferenced symbols.
+ * relax.c (relax_section): don't complain if the script file isn't
+ relaxable but -relax is set
+
+Thu Feb 18 17:58:45 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
+
+ * configure.in: go32 is the 3rd part of the triple, not the 2nd
+
+Wed Feb 3 09:05:56 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * emulparams/mipsbig.sh: New file. Big endian MIPS emulation.
+ * config/mips-big.mt: New file. Use mipsbig emulation.
+ * configure.in (mips-sgi-irix*): Use target mips-big.
+ * Makefile.in (ALL_EMULATIONS): Added em_mipsbig.o.
+ (em_mipsbig.c): New target. Uses mipsbig.sh.
+
+Tue Feb 2 11:32:27 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * mips.sc-sh: Put .scommon sections into .sbss section.
+
+ * ldmain.c (subfile_wanted_p): Preserve section of common symbols,
+ rather than always putting them in bfd_com_section.
+ * ldlang.c (lang_common): If a common symbol is not in
+ bfd_com_section, put in a section of the same name, rather than
+ always putting it in section COMMON.
+
+Fri Jan 29 09:57:58 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * ldmain.c (subfile_wanted_p): If we already have a common
+ definition of a symbol, don't necessarily pull in an object file
+ that provides a non-common definition.
+
+ * ldlex.l (COMMAND): Accept -EB and -EL command line arguments,
+ returning OPTION_EB and OPTION_EL. gcc passes these to a MIPS
+ linker.
+ * ldgram.y (OPTION_EB, OPTION_EL): New tokens.
+ (command_line_option): Accept and ignore OPTION_EB and OPTION_EL.
+
+Thu Jan 28 15:12:04 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * Makefile.in (install): Remove $(tooldir)/bin/gld before creating
+ the link to it.
+
+Tue Jan 26 11:49:50 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * ldmain.c, ldsym.c: Use new bfd_is_com_section macro rather than
+ checking for equality to bfd_com_section.
+
+Fri Jan 22 14:22:44 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * mips.sc-sh: New file. Ultrix, and hopefully other MIPS ECOFF
+ targets, linker script.
+ * emulparams/mipslit.sh: New file. Little endian MIPS emulation.
+ * config/mips-lit.mt: New file. Use mipslit emulation.
+ * configure.in (mips-dec-ultrix*): Use target mips-lit.
+ * Makefile.in (ALL_EMULATIONS): Added em_mipslit.o.
+ (em_mipslit.c): New target. Uses mipslit.sh.
+
+Thu Jan 14 15:30:27 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * Makefile.in (install): Install ld as both $(tooldir)/bin/ld and
+ $(tooldir)/bin/gld, so that gcc can find it with or without
+ collect2.
+
+Mon Jan 11 18:50:07 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * ldwrite.c: Removed perform_relocation, copy_and_relocate, and
+ write_norel. All linking is now done via write_relax. Call
+ ldsym_write before calling write_relax.
+ * relax.c: Added copyright.
+ (write_relax): Renamed from write_relaxnorel. Added relocateable
+ argument. seclet_dump renamed to bfd_seclet_link.
+ * relax.h: Added copyright.
+
+Mon Jan 11 15:41:56 1993 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * ldmain.c (decode_library_subfile): Patch from
+ hoogen@shafer.cs.utah.edu, don't reread library symbol tables.
+
+Fri Jan 8 18:04:33 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
+
+ * config/vxworks960.mt renamed to config/i960.mt
+
+ * configure.in: sparc-aout emulates a sun4, as does
+ sparc*-vxworks, i960-nindy uses gld960 emulation
+
+Fri Jan 8 14:39:07 1993 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ Fix support for NOLOAD, add INCLUDE
+ * ldfile.c (ldfile_open_command_file): pass file name to
+ lex_push_file.
+ * ldlex.l, ldgram.y: tidy up, parse INCLUDE and NOLOAD
+ * ldlang.c (wild_doit): make output sections inherit NEVER_LOAD
+ attribute.
+
+Thu Jan 7 10:22:19 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
+
+ * Makefile.in, config.h: no more default emulation. Make the lack
+ of emulation a compile time error
+
+Wed Jan 6 01:08:37 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
+
+ * configure.in: recognise all sparclite variants, not just 'sparclite'
+
+Mon Dec 28 11:15:35 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * scripttempl/m68kcoff.sc, emulparams/m68kcoff.sh: define _end as
+ well as end, for consistency with aout.sc-sh.
+
+ * configure.in: accept *-ericsson-ose for any m68k CPU.
+
+ * ldwrite.c (write_rel): don't always set SEC_HAS_CONTENTS flag
+ for each output section.
+
+Mon Dec 21 16:06:59 1992 Per Bothner (bothner@rtl.cygnus.com)
+
+ * ldexp.c, ldlang.c, ldmain.c, ldsym.c, ldwarn.c: Use new
+ macro bfd_asymbol_bfd as appropriate.
+ * Makefile.in: Un-duplicate ldlex.c dependency.
+ * configure.in: Replace my_host case table by sourcing
+ ../bfd/configure.host. Allow std-host as the default.
+ * ldmisc.c: Change logic for C++ name demangling: There is
+ no initial '_' to remove from stab-derived function names.
+
+Sun Dec 13 16:31:26 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * ldlang.c (lang_init_script_file): don't attach the output file
+ sections to the script file.
+
+Wed Dec 9 08:38:05 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+ * ldlang.c (wild): run expansion loop over command line bfd too.
+ (lang_ini_script_file): initialize more parts of the command line
+ bfd.
+ * ldlex.l: fix DEFINED start states.
+
+Mon Dec 7 08:43:41 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+ -y support
+ * ld.texinfo: new doc.
+ * ldgram.y, ldlex.l: understand -y<symbol>
+ * ldmain.c (Q_enter_file_symbols): if had -y, lookup symbol and
+ print info. (add_ysym): new function.
+ * ldsym.h: (ldsym_type): new define SYM_Y.
+
+Sat Nov 21 03:15:27 1992 John Gilmore (gnu@cygnus.com)
+
+ * ldctor.h, lderror.h, ldexp.h, ldfile.h, ldindr.h, ldlang.c,
+ ldlang.h, ldlex.h, ldmain.h, ldmisc.h, ldsym.h, ldver.h, ldwarn.h,
+ ldwrite.h, relax.h: Replace all uses of EXFUN and PROTO ansi-glue
+ macros with PARAMS. Recreational cleanup. Update copyrights.
+
+Tue Nov 10 00:23:37 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
+
+ * Makefile.in: pass down the bfd source directory for includes
+
+Thu Nov 5 15:41:55 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * ldlang.c (lang_size_sections): don't change size and address for
+ SEC_SHARED_LIBRARY sections rather than for SEC_NEVER_LOAD
+ sections.
+
+Thu Nov 5 11:33:57 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * relax.c (build_it): re-enable the processing of data_statements
+ in scripts, makes counted contructor lists work again.
+
+Thu Nov 5 05:43:01 1992 John Gilmore (gnu@cygnus.com)
+
+ * ldemul.h: Remove uses of SDEF and PROTO macros (use PARAMS).
+
+Tue Oct 20 10:56:06 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * scripttempl/m68kcoff.sc, emulparams/m68kcoff.sh: don't use
+ initial underscores for etext, edata and end.
+
+Mon Oct 19 09:45:38 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * Support for i386-sysv.
+ configure.in: check for i386-*-sysv* and i386-*-sco*.
+ i386coff.sc-sh: rewrote to support SVR3 by default.
+ ldctor.c (find_constructors): preserve stat_ptr.
+ ldlang.c (wild_doit): initialize vma and size of new output
+ section to corresponding input section. This is required for
+ shared library support.
+ (lang_size_sections): don't modify vma and size of sections which
+ are never loaded (for shared libraries).
+ ldwrite.c (copy_and_relocate): copy the contents of any section
+ which has contents, not just sections which are loaded (for shared
+ libraries).
+
+Thu Oct 15 15:20:26 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * ldlang.c (size_input_section): count the sizes of all sections
+ we allocate.
+
+Thu Oct 8 09:05:25 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * ldmisc.c (demangle,vfinfo): use the new underscore in bfd to
+ to demangle symbols better
+
+Tue Oct 6 13:08:54 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * ldlang.c (lang_finish): don't warn if -e start symbol does not
+ exist when linking with -r.
+
+Mon Oct 5 14:07:37 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * scripttempl/aout.sc, emulparams/aout.sh,
+ scripttempl/m68kcoff.sc, emulparams/m68kcoff.sh: set __bss_start
+ to the start of the .bss segment.
+
+Mon Oct 5 08:55:14 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * ldmain.c (linear_library): don't even think about processing
+ an object file if it's already been done
+
+Thu Oct 1 23:14:59 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
+
+ * configure.in: the hp9000/300 config file is now hp300
+
+Wed Sep 30 07:34:09 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * config/z8ksim.mt: new file
+
+Fri Sep 25 13:49:52 1992 Ken Raeburn (raeburn@kyriath.cygnus.com)
+
+ * Makefile.in (ldexp.o, ldctor.o, ldlang.o, ldmain.o, ldwrite.o,
+ lexsup.o, mri.o, relax.o): Indicate dependence on ldgram.h.
+
+ * ld.h (strip_symbols_type): Add value STRIP_SOME.
+ * ldgram.y (OPTION_RETAIN_SYMBOLS_FILE): New terminal token.
+ * ldlang.c (lang_add_keepsyms_file): New function.
+ * ldlex.l: Handle "-retain-symbols-file".
+ * ldsym.c (keepsyms_file, kept_syms): New vars.
+ (process_keepsyms): New functihon; reads file, marks symbols for
+ saving.
+ (write_file_locals): File symbols should always be kept.
+ (ldsym_write): Warn about "-retain-symbols-file" overriding "-S"
+ and "-s". Process retain-symbols file before setting symtab.
+ * ldsym.h (SYM_KEEP): New flag for ldsym_type flags.
+ (keepsyms_file, kept_syms): Declare them.
+
+ * ldmain.c (main): Non-fatal errors should still cause non-zero
+ exit status even with -r.
+
+Fri Sep 25 11:08:01 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ Added initial support for the z8k
+ * emultempl/z8ksim.em, z8ksim.sc-sh, emulparams/z8ksim.sh: new
+ files.
+ * configure.in, Makefile.in: modified to reflect above
+
+ * ldlang.c (lang_check): when linking conflicting architectures,
+ make the output file reflect at least one of the bad inputs.
+
+Tue Sep 15 15:35:38 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * Makefile.in (install): if $(tooldir) exists, install ld in
+ $(tooldir)/bin.
+
+Fri Sep 11 10:24:22 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * Makefile.in, configure.in: modified to support i386-coff
+ * i386coff.sh: new file
+
+Wed Sep 9 11:52:58 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * Makefile.in, emulparams/m68kcoff.sh, scripttempl/m68kcoff.sc,
+ emulparmas/m68kcoff.sh, config/m68k-coff.mt: added m68k-coff
+ emulation mode, stolen from a29k emulation. Almost certainly
+ wrong, but perhaps better than sun3.
+
+Thu Sep 3 14:19:30 1992 Per Bothner (bothner@rtl.cygnus.com)
+
+ * Makefile.in, Makefile.dos, emultempl/generic.em, genscripts.sh,
+ emultempl/gld960.em, emultempl/h8300hms.em,
+ emultempl/h8300xray.em, emultempl/lnk960.em, emultempl/st2000.em,
+ emultempl/vanilla.em: Rename all (generated) ld__*.c files to
+ em_.c. This is one character shorter, and lets people build on
+ SVR3 system. (ld__h8300xray.[co] was the killer there;
+ h8300xray.sc-sh is also overlong, but seems harmless.)
+ Based on a patch from Jonathan Ryshpan <hitachi!amito!jon>.
+ * Makefile.in (clean): Fix typo mostclean -> mostlyclean.
+ * configure.in: Add host isc.
+
+ * ldver.c: Call it version 2.0.
+
+Wed Sep 2 00:21:33 1992 Per Bothner (bothner@rtl.cygnus.com)
+
+ * ldver.c: Bump to version 0.98.
+ * TODO: New file.
+
+ * Makefile.in: Added mostlyclean, distclean, realclean rules.
+
+Tue Sep 1 23:42:16 1992 Per Bothner (bothner@rtl.cygnus.com)
+
+ * ldmisc.c (xrealloc): New (needed by ../libiberty/cplus.dem.c).
+ * ldlex.l: Moved comment() to end, since some compilers
+ otherwise have problems with input() used before it is defined.
+
+Tue Sep 1 17:45:51 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
+
+ * configure.in: added Solaris 2 and Irix 4 host support.
+
+Mon Aug 31 19:27:11 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
+
+ * Makefile.in: remove -S flag from the FLEX definition
+
+ * configure.in: rewrote, using new style case statement. use
+ m68k.mt for m68k-aout systems
+
+Sun Aug 30 21:38:53 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * Makefile.in: map "ld" through program_transform_name when
+ installing.
+
+Sun Aug 30 18:12:13 1992 Per Bothner (bothner@rtl.cygnus.com)
+
+ * cplus-dem.c: Removed. Use the version in libiberty now.
+ * ldmisc.c: Use new libiberty version of cplus_demangle().
+
+Thu Aug 27 16:38:42 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * emultempl/gld960.em (gld960_choose_target): default to little
+ endian, not big endian.
+
+Wed Aug 26 17:28:51 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * ldlang.c (lang_process): don't pass null pointers when
+ abs_output_section is what is required.
+ * ldwrite.c (ldwrite): use malloc to allocate the largest space
+ used, and pass that down.
+ * relax.c, relax.h (write_relaxnorel): use the passed malloc area rather
+ than alloca.
+
+Mon Aug 24 14:42:06 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * configure.in, config/ose68.mt: renamed OSE to ose.
+
+Thu Aug 20 19:55:22 1992 Ken Raeburn (raeburn@cygnus.com)
+
+ * ldsym.c (write_file_locals): Reorder check for common or
+ undefined symbols so that it works.
+
+Tue Aug 18 13:41:36 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * configure.in: accept all m68K family members.
+
+ * Makefile.in: always create installation directories.
+
+Thu Aug 13 11:49:34 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * ldlex.l: now parses comment correctly, added ~ to acceptable
+ chars in filenames
+
+ * ldexp.c (exp_unop): pass down abs_output_section - now can have
+ unary -ve constants.
+
+ * ldlang.c (lang_finish): warn when an entry symbol supplied on
+ the command line can't be found.
+
+Fri Aug 7 12:31:10 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * ldlang.h: add new field "loadable" to output_section_statement.
+ * ldlang.c (lang_output_section_statement_lookup): initilize new
+ field. (wild_doit): if new field is not set, then stop output
+ section from being loadable.
+ (lang_enter_output_section_statement): set the field from the
+ NOLOAD keyword
+ * ldgram.y: new synax for NOLOAD. Removes a shift/reduce too.
+ * scripttempl/h8300hms.sc, emulparams/h8300.sh,
+ emultempl/h8300hms.em: get -r right.
+
+Thu Aug 6 18:35:21 1992 Per Bothner (bothner@rtl.cygnus.com)
+
+ * ldint.texinfo: New internals manual (beginnings thereof).
+ * PORTING: Removed, merged into ldint.texinfo.
+
+Tue Aug 4 21:12:29 1992 Per Bothner (bothner@rtl.cygnus.com)
+
+ * testsuite/ld-cdtest/cdtest-main.cc,
+ testsuite/ld-cdtest/cdtest-func.cc,
+ testsuite/ld-cdtest/cdtest-foo.h,
+ testsuite/ld-cdtest/cdtest-foo.cc,
+ testsuite/ld-cdtest/cdtest.exp: A test program (copied from
+ libg++/test-install) that tests that constructor and destructors
+ are handled corrrectly.
+
+Mon Aug 3 14:58:19 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
+
+ * Makefile.in (install): install from ld.new, renaming during the
+ copy, or else the next 'make install' needs to re-link ld.
+
+Mon Jul 20 03:37:06 1992 D. V. Henkel-Wallace (gumby@cygnus.com)
+
+ * configure.in: generalise hp recognition (from sef).
+
+Sat Jul 18 14:46:04 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
+
+ * configure.in: recognize bsd and hpux hppa configurations.
+ error messages echo to stderr, not stdout
+
+Fri Jul 17 22:06:11 1992 K. Richard Pixley (rich@rtl.cygnus.com)
+
+ * Makefile.dos, gld.1, ld.texinfo, ldemul.c, ldfile.c, ldlang.c,
+ ldmisc.c: removed rcsid's.
+
+Tue Jul 14 08:34:34 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * ldlang.c (lang_map): print changes in sizes due to relaxing
+ (size_input_section): maintain the delta information.
+ * ldlang.h: add new field to struct to contain delta info.
+ * relax.c (relax_section): complain if input not relaxable.
+ * ldlex.l : add '_', ',' and '$' to chars which can appear at the
+ start of a filename
+
+Mon Jul 13 17:33:00 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * ldmain.c(main): prevent -r and -relax from being on at the same
+ time.
+
+Wed Jul 1 17:51:19 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * ldmain.c (Q_enter_global_ref), ldindr.c (add_indirect): fix for
+ aliasing problems
+
+
+Thu Jun 18 09:38:56 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * emultempl/h8300hms.em, scripttempl/h8300hms.sc,
+ emulparams/h83000.sh: do the right thing for -r
+ * ldexp.c: lint
+ * ldlang.c(open_output): set the target arch and machine as soon
+ as we can. (lang_size_sections): use new macros for setting vma
+ * ldwrite.c: lint
+
+Mon Jun 15 08:47:43 1992 Michael Tiemann (tiemann@rtl.cygnus.com)
+
+ * configure.in (my_target): Accept m680?0 for wrs as vxworks68.
+ Also deleted an unreachable path to wrs.
+
+Wed May 27 23:24:19 1992 Michael Tiemann (tiemann@rtl.cygnus.com)
+
+ * Makefile.in (install): use -d test for $tooldir before
+ installing ld there so that $tooldir can be inherited from
+ top-level Makefile.
+
+Wed May 27 16:56:48 1992 Per Bothner (bothner@rtl.cygnus.com)
+
+ * ldlang.c: Two non-substantial changes for the sake of
+ the old Portable C Compiler.
+
+Wed May 27 15:15:58 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * ldgram.y, ldlex.l: parse ABSOLUTE
+ * ldexp.c: add support for ABSOLUTE
+
+Wed May 27 13:07:20 1992 Per Bothner (bothner@rtl.cygnus.com)
+
+ * Makefile.in: Added default definitions for HOSTING_CRT0,
+ HOSTING_LIBS, and HOSTING_EMU, based on those in config/*.mh.
+ * config/*.mh: Miscellaneous clean-up: Removed definitions
+ of YACC (since it is not longer used in the Makefile).
+ Remove HOSTING_* definitions that are subsumed by the
+ ones added to Makefile.in. Removed most definitions of CC.
+ * config/{sparc,news,hp300bsd,decstation}.mh: Removed;
+ These are no longer needed.
+
+Fri May 22 13:47:19 1992 Per Bothner (bothner@cygnus.com)
+
+ * Makefile.in: Use srcdir instead of VPATH in ldgram/ldlex
+ rules, since these are used when building a distribution.
+ * Makefile.in (ldlex.c): Don't re-direct output, since that
+ leaves a bogus output files if it fails.
+
+ * config/sparc.mh: Fix HOSTING_LIBS so it has a chance of working.
+ * ldlex.c: Fix some unnecessary flex-specific-isms.
+
+Fri May 8 11:49:43 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * ldgram.y: move spurious semicolon
+ * ldexp.h: fix prototype
+
+Thu May 7 17:01:12 1992 Roland H. Pesch (pesch@fowanton.cygnus.com)
+
+ * ld.texinfo: references to linker now say "ld" not "gld".
+
+Wed May 6 13:26:19 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ changed calling convention for Q_enter_global_ref
+ * ldexp.c, ldlang.c, ldmain.c: reflect this
+ * ldver.c: bump version to 1.97.1
+ * ldindr.c (add_indirect): when an edict declaring an indirect
+ symbol is found, make sure that any ideas about the symbol being
+ common are changed if it now known to be defined.
+ * ldmain.c (linear_library): complain once if archive isn't
+ ranlibbed.
+ * ldlang.h, ldlang.c: make room for and initialize the complain
+ once field.
+
+Wed May 6 11:07:35 1992 K. Richard Pixley (rich@rtl.cygnus.com)
+
+ * Makefile.in: use flex & bison from ../ if they exist.
+
+Tue May 5 17:47:33 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * relax.c (build_it): don't allocate space in the output file for
+ stuff if -R flag applys to it.
+ * ldfile.c: merge in VMS filename support
+ * ldmain.c (main): take out ./ from library path, and close file
+ before unlinking. Make multiple defs of a symbol create an
+ unexecable file.
+ * ldmisc.c: fatal errosrs delete output file
+
+Tue May 5 14:05:05 1992 Per Bothner (bothner@rtl.cygnus.com)
+
+ * ldver.c: Increase version number to 1.97, for consistency
+ with ../binutils.
+
+Tue May 5 12:12:24 1992 K. Richard Pixley (rich@cygnus.com)
+
+ * Makefile.in: FLEX -> LEX.
+
+ * ld.texinfo: {} -> @{@}.
+
+Mon May 4 17:52:41 1992 Roland H. Pesch (pesch@fowanton.cygnus.com)
+
+ * ld.texinfo: describe alternate, MRI-compatible linker scripts
+ (and associated change in -c option, now used for these scripts)
+
+Mon May 4 16:10:10 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * ldver.c: Bumped version to 1.96 - new release, resync with the
+ bfd too #.
+ * ldexp.c, ldlang.c: now build memory shape tree in obstacks
+ rather than with raw malloc, makes it easier to track where memory
+ is going.
+ * ldsym.h, ldsym.c: create obstack for all global symbols too.
+ * ldwrite.c (ldwrite): moved malloc so only used when needed.
+ * sa29200-sc.sh: added support for .lit, data1 and data2 sections.
+
+
+Fri May 1 18:17:52 1992 K. Richard Pixley (rich@cygnus.com)
+
+ * config/sparc.mh: use ../gcc/libgcc.a on check if it exists.
+
+ * Makefile.in: use bootstrap for check.
+
+Fri May 1 13:03:41 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * ldgram.y, ldlex.c, mri.c: added more compatible words; BASE, ALIAS and
+ PUBLIC.
+ * Makefile.in: now use flex, not lex
+ * ldlex.l, ldlang.c, ldctor.c: lint
+
+Wed Apr 22 12:48:42 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * ldlex.l: added CMDFILENAMECHAR state so that you can lex
+ different sorts of filenames on the command line than in a script.
+
+Mon Apr 20 22:37:04 1992 K. Richard Pixley (rich@rtl.cygnus.com)
+
+ * Makefile.in: rework CFLAGS so that they can be passed on the
+ make command line. Remove MINUS_G. Default CFLAGS to -g.
+
+Fri Apr 17 08:57:17 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * relax.c: added handling for new "padding" seclet type, used to
+ fill out gaps between section.
+ * ldgram.y, ldlex.l: now -defsym on the command line is done
+ properly.
+
+Wed Apr 15 21:20:07 1992 K. Richard Pixley (rich@rtl.cygnus.com)
+
+ * Makefile.in: the tooldir copy of ld goes directly in tooldir.
+
+Wed Apr 15 16:09:33 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * mri.c, ldgram.y, ldlex.l: added support for minimal strange link
+ scripts.
+
+Thu Apr 9 05:52:02 1992 Ken Raeburn (Raeburn@Cygnus.COM)
+
+ * Makefile.in (install): Install second copy in $(tooldir)/bin
+ without $(program_prefix), since that's what gcc expects.
+
+Sat Apr 4 17:44:06 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * ldlex.l, ldgram.y, ldlex.h: Rewrote lexer. Now it's much nicer.
+ * h8300*: fix bit rot and add support for h8300xray target
+ * emulparams/go32.sh: target emulation for go32.
+
+Mon Mar 16 14:53:29 1992 Steve Chamberlain (sac@rtl.cygnus.com)
+
+ * emultempl/gld960.em, scripttempl/i960.sc,
+ emulparamns/i960.sh. Fix i960 bit rot
+
+Fri Mar 13 19:47:22 1992 K. Richard Pixley (rich@cygnus.com)
+
+ * Makefile.in: install man page.
+
+Fri Mar 13 08:23:59 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * config/mt-<foo> renamed to <foo>.mt
+ * config/mh-<foo> renamed to <foo>.mt
+ * configure.in changed to reflect this
+ * genscripts.sh now make .xbn files rather than .xN files
+
+Sat Mar 7 03:40:40 1992 K. Richard Pixley (rich@cygnus.com)
+
+ * ldver.h: fix decl of ldversion.
+
+Fri Mar 6 22:00:35 1992 K. Richard Pixley (rich@cygnus.com)
+
+ * Makefile.in: added check target.
+
+Fri Mar 6 06:59:04 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * ldmain.c (Q_enter_file_symbols): now aliases work again
+
+Thu Mar 5 21:39:29 1992 K. Richard Pixley (rich@cygnus.com)
+
+ * Makefile.in: added clean-info target.
+
+Thu Mar 5 16:55:56 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * ldexp.c (exp_print_tree): don't try and follow null pointers
+ around.
+ * ldgram.y: remove 11 shift reduce errors
+
+Tue Mar 3 15:46:39 1992 K. Richard Pixley (rich@rtl.cygnus.com)
+
+ * Makefile.in: added tooldir and program_prefix.
+
+Fri Feb 28 08:17:45 1992 Steve Chamberlain (sac at thepub.cygnus.com)
+
+ * ldlang.c (size_input_section): don't move absolute sections
+ around!
+
+
+Thu Feb 27 09:20:41 1992 Steve Chamberlain (sac at thepub.cygnus.com)
+
+ * cplus-dem.c: yet another copy of this - maybe it should go into
+ libiberty ?
+ * ldgram.y: now -V and -v have different actions
+ * ldver.c: if -V, prints list of emulations compiled in
+ * ldmisc.c: support for cplus demangling
+
+
+Wed Feb 26 18:04:40 1992 K. Richard Pixley (rich@cygnus.com)
+
+ * Makefile.in, configure.in: removed traces of namesubdir,
+ -subdirs, $(subdir), $(unsubdir), some rcs triggers. Forced
+ copyrights to '92, changed some from Cygnus to FSF.
+
+Thu Feb 20 17:43:46 1992 Per Bothner (bothner at cygnus.com)
+
+ * Makefile.in: Change mkscript rule into one for ./mkscript
+ (for the sake of makes that don't realize they're the same).
+ * PORTING: Add more details.
+ * genscripts.sh: Add more tailorability of DATA_ALIGNMENT.
+
+Mon Feb 17 12:04:36 1992 Per Bothner (bothner at cygnus.com)
+
+ * Makefile.in, and new files hp300bsd.sh, config/mh-hp300bsd,
+ config/mt-hp300bsd: New port to hp300 running BSD.
+
+Sat Feb 15 13:59:54 1992 Per Bothner (bothner at cygnus.com)
+
+ Major rewrite of how ld is configured. The major idea
+ is to use shell scripts to generate everything.
+ * generic.em replaces ldtemplate.
+ * Other *.em files replace various *.c files.
+ A *.em file is a shell script that generates the corresponding
+ ld__*.c file that implements an emulation. This is usually
+ a straight 'cat' of a here-document, possibly with substitutions.
+ * Script files (*.sc) are places by *.sc-sh scripts.
+ Again, these are simple shell scripts that 'cat'
+ here-documents, usually with some substitutions.
+ The output a *.sc-sh is a script file.
+ * Each emulation is defined by a short shell script with
+ extension *.sh that specifies the emulation-specific
+ parameters (such as the name of the *.sh-sc and *.em
+ files to use).
+ * genscript.sh is the master shell script used to generate
+ an emulation. It is passed various argument, including
+ the name a the emulation-speciic *.sh file that it
+ "sources" to set variables to emulation-specifc parameters.
+ * config/mt-foo: Changed EMUL=GLDFOO_EMULATION_NAME
+ to EMUL=foo. (The GLDFOO_EMULATION_NAMEs have bee removed.)
+ * config/mh-foo: Rename LDEMULATION names as appropriate
+ (usually 'gldfoo' -> plain 'foo').
+ * ldwrite.c: Fixed a typo in a comment.
+ * Makefile.in: Major changes. Removed some the sed
+ magic to converts scripts, since that is now handled
+ by genscripts.sh and the *.sc-sh scipt generators.
+ * config.h: Remove a bunch of macros defining emulations
+ and targets. This becomes one less file to edit when
+ adding emulations or targets.
+ * ldemul.h (struct ld_emulation_xfer_struct): Add
+ emulation_name and target_name fields.
+ * ldemul.c, ldemul.h: Define some default functions used
+ by most emulations (and remove from the *.em scripts).
+ * ldemul.c (ldemul_choose_target): Search the new
+ ld_emulations array using a loop (instead of a hardwired
+ nested if statement).
+ Define the ld_emulation from the automatically-geenrated
+ ldemul-list.h. This means you no longer have to edit ldemul.c
+ to add a new emulation.
+ * ldmain.c: Replace {GLD,LNK}960_EMULATION_NAME by
+ their expansions, since the former no longer exist.
+ * PORTING: A very rough first draft of a porting guide.
+
+ * ldgram.y, ldlex.l, lexsup.c: Changes to allow an assignment
+ to be terminated by a new-line (instead of requiring a semicolon).
+
+Mon Feb 10 16:21:02 1992 Steve Chamberlain (sac at rtl.cygnus.com)
+
+ * ldexp.c, ldlang.c: added new idea "abs_output_section", removes
+ tests for NULL pointers all over the place.
+ * ldlang.c (lang_process): remember to relocate global symbols
+ *after* relaxing has done it stuff.
+
+Thu Feb 6 11:40:15 1992 Steve Chamberlain (sac at rtl.cygnus.com)
+
+ * config/mt-coff-h8300: use EMUL like everything else
+ * ldlang.c: (print_padding_statement): print the right address.
+ * Makefile.in, config.h, ldemul.c: renamed h8300hds to h8300hms
+
+
+Tue Feb 4 15:28:01 1992 Steve Chamberlain (sac at rtl.cygnus.com)
+
+ * ldlex.l: Put pack -noinhibit-exec and -sort-common
+ * ldlang.c (print_data_statement): print the right address.
+
+Thu Jan 30 17:51:53 1992 Per Bothner (bothner at cygnus.com)
+
+ * Makefile.in: The rule for testing ld by re-linking itself
+ via an intermediate -r link was moved to the ld1 rule
+ instead of the ld2 rule. This allows ld2 and ld3 to be identical,
+ which allows the bootstrap rule to work.
+ * ldctor.c (find_constructors): Don't create a constructor
+ list if it is already defined (as would happen if ld is
+ invoked by collect).
+
+Wed Jan 29 08:35:39 1992 Steve Chamberlain (sac at rtl.cygnus.com)
+
+ * config/mh-sparc.h: now uses libgcc.a
+ * ldmain.c: quit using exit
+ * *sc: use *(COMMON) rather than [COMMON]
+ * ldlex.l, lexsup.c: much thinking moved from .l and put into .c,
+ to allow preprocessing of .l file.
+ * Makefile.in: New ldlex.l mangling
+ * ldexp.c (fold_binary): perform expressions with % and / in
+ integer.
+ * ldfile.c (open_a): open archives on VMS in a special way
+
+
+Tue Jan 28 10:18:16 1992 Steve Chamberlain (sac at rtl.cygnus.com)
+
+ * ldgram.y: map -M behave in the same way as -Map (sets file name
+ to be "-".
+ * ldsym.c, ldlang.c: remember that size of a section is dependent on
+ whether or not relaxing has been done.
+ * ldmain.c: don't open a map file if it doesn't have a name
+ * relax.c: all the brains have moved into bfd.
+ * ldwrite.c: ammend comment
+
+Fri Jan 24 14:23:46 1992 Steve Chamberlain (sac at rtl.cygnus.com)
+
+ * Makefile.in: added relax, also made three stage go through a
+ partial link stage.
+ * relax.c : added
+ * config.h: if GNU960 defined, then default emulation mode is
+ GLD960
+ * ldexp.h, ldexp.c: map to file hooks
+ * ldlang.c: map to file hooks
+ * ldgram.y: added -Map -relax
+ * ldlex.l: added -relax, -Map
+ * ldmain.c: open map file
+ * ldmisc.c: support for map file
+ * ldwrite.c: new relax magic
+
+Thu Dec 19 18:49:51 1991 John Gilmore (gnu at cygnus.com)
+
+ * Makefile.in, config/tm-*.h: Clean up make output, only
+ pass DEFAULT_EMULATION to ldmain.c.
+
+Wed Dec 18 15:02:47 1991 Per Bothner (bothner at cygnus.com)
+
+ * ldver.c: Bump to version 1.94.
+
+Tue Dec 10 04:07:23 1991 K. Richard Pixley (rich at rtl.cygnus.com)
+
+ * Makefile.in: infodir belongs in datadir.
+
+Mon Dec 9 16:26:43 1991 Per Bothner (bothner at cygnus.com)
+
+ * Makefile.in: Pass -y to bison. (Again;
+ accidentally deleted by Rich.)
+ * scripttempl/news.sc, scripttempl/ldgld68k.sc: Define __end as
+ well as _end.
+
+Sat Dec 7 17:19:26 1991 Steve Chamberlain (sac at rtl.cygnus.com)
+
+ * ldindr.h: added to contain prototypes of ldindr.c
+ * ldfile.c: include ctype.h
+ * ldmain.c: include the requried prototype headers
+ * ldwrite.c: get_reloc_upper_bound has been renamed
+ bfd_get_reloc_upper_bound
+
+Fri Dec 6 23:29:26 1991 K. Richard Pixley (rich at rtl.cygnus.com)
+
+ * Makefile.in: punt "fundamental" mode because it breaks my emacs
+ macros. install using INSTALL_PROGRAM and INSTALL_DATA. remove
+ spaces following hyphens, bsd make can't cope. added
+ standards.text support and made it look like all the other
+ makefiles.
+
+ * configure.in: configure now runs entirely in objdir so make file
+ existence checks against ${srcdir}. Mark this directory as
+ target dependent.
+
+Thu Dec 5 22:46:16 1991 K. Richard Pixley (rich at rtl.cygnus.com)
+
+ * Makefile.in: idestdir and ddestdir go away. Added copyrights
+ and shift gpl to v2. Added ChangeLog if it didn't exist. docdir
+ and mandir now keyed off datadir by default.
+
+Wed Dec 4 23:36:55 1991 Per Bothner (bothner at cygnus.com)
+
+ * ldver.c: Bumped version to 1.93.
+ * Makefile.in: Pass -y to bison.
+
+Mon Nov 25 18:28:40 1991 Steve Chamberlain (sac at cygnus.com)
+
+ * config.h: h8 is now coff, not ieee
+ * h8300hds.sc: reflect the same
+
+Thu Nov 14 19:55:09 1991 Per Bothner (bothner at cygnus.com)
+
+ * ldver.c (ldversion()): Update to 1.92.
+ * ldctor.c: There are two places constructor sets
+ can be defined. One of them checked for an existing
+ duplicate, the other didn't. Unfortunately, the latter
+ was called after the former ...
+ So, factor out code for inserting a new element into
+ constructor_name_list (after checking for a duplicate)
+ into a new function add_constructor_name, and call
+ it from both aforementioned places (ldlang_add_constructor
+ and ldlang_check_for_constructors).
+
+Wed Nov 13 15:17:43 1991 Per Bothner (bothner at cygnus.com)
+
+ * Makefile.in: Rename .c files generated from ldtemplate
+ to have names starting with ld__. This helps 'make clean'.
+
+Tue Nov 12 18:36:50 1991 Steve Chamberlain (sac at cygnus.com)
+
+ * Makefile.in: Take out the version number for install
+ * scripttempl/m88kbcs.sc: put in contructor blocks.
+
+Mon Nov 11 18:47:33 1991 Per Bothner (bothner at cygnus.com)
+
+ * ldmisc.c, ldmisc.h: Re-write info() to take a filename
+ parameter, a format, and an arg pointer, and rename it to
+ vfinfo(). Write info() in terms of new vfinfo().
+ New einfo() is the same as info(), except it writes to stderr.
+ * ldemul.c, ldexp.c, ldlang.c, ldlnk960.c, ldmain.c, ldwrite.c,
+ ldmisc.c: Replace "error" calls to info() by new einfo().
+
+Mon Nov 11 09:57:32 1991 Steve Chamberlain (steve at cygnus.com)
+
+ * ldlex.l ldgram.y: made -V option do same as -v
+ * Makefile.in: Added $(MINUS_G) flag so debugging can be
+ turned off
+
+Sun Nov 3 16:37:37 1991 Steve Chamberlain (steve at cygnus.com)
+ i386 aout changes from Bob Kukura
+ * Makefile.in, config.h: added i386aout support
+ * configure.in: fixed /h-{myhost} typo
+ * ldgram.y: -MM now gives more boring map.
+ * ldlang.c: now does D_PAGED flag the right way.
+ * ldsym.c: -MM flags does the right thing.
+
+Sun Nov 3 15:00:03 1991 Per Bothner (bothner at cygnus.com)
+
+ * configure.in: Fixed typo. Also, a fix for hp300bsd.
+ * ldlang.c (init_os): Compensate for BFD change,
+ where bfd_make_section now returns NULL for a duplicate
+ section request, instead of the old section.
+
+Thu Oct 17 15:27:13 1991 Per Bothner (bothner at cygnus.com)
+
+ * ldver.c: Bump to version 1.91 (consistent with binutils).
+
+Wed Oct 16 12:27:08 1991 Per Bothner (bothner at cygnus.com)
+
+ * Makefile.in, config.h, ld.h, ldemul.c, ldexp.c, ldexp.h,
+ ldgram.y, ldlex.l, ldlnk960.c, ldmain.c, ldmisc.c, ldmisc.h,
+ ldsym.c, ldsym.h, ldtemplate, ldvanilla.c, ldver.c, ldver.h,
+ ldwarn.c, ldwarn.h, ldwrite.c, ldwrite.h, mkscript.c:
+ Add or update copyright notices.
+
+Mon Oct 14 23:55:27 1991 Per Bothner (bothner at cygnus.com)
+
+ * README: New file.
+ * Makefile.in: Changed installation directory name scheme
+ to be consistent with gcc. Also changed 'install'.
+
+Mon Oct 14 17:30:02 1991 Roland H. Pesch (pesch at cygnus.com)
+
+ * Makefile.in: new targets ld.mm, ld.me
+
+Mon Oct 14 17:27:24 1991 Per Bothner (bothner at cygnus.com)
+
+ * Makefile.in, ldtemplate: Need to use separate scripts
+ for -n and -N options. Yet more complication.
+
+Fri Oct 11 22:40:46 1991 John Gilmore (gnu at cygnus.com)
+
+ * Makefile.in: Avoid using $< in explicit Make rules (it doesn't
+ work). Add some lines to avoid Sun Make VPATH bugs.
+
+Fri Oct 11 16:42:22 1991 Per Bothner (bothner at cygnus.com)
+
+ * scripttempl/news.sc: Add alignment for data segment.
+ * ldtemplate: Add (yet another) script to get for -n or -N
+ options. (These need different alignment than ZMAGIC files.)
+ * Makefile.in: Add stuff for new foo.xn scripts.
+ These are generated by replacing "ALIGN(0x...00)" by ".".
+
+Fri Oct 11 15:43:04 1991 Roland H. Pesch (pesch at cygnus.com)
+
+ * Makefile.in: new targets ld.ms, ld-index.ms
+ ld.texinfo: remove tabs, other cleanups for texi2roff
+
+Fri Oct 11 13:51:54 1991 Per Bothner (bothner at cygnus.com)
+
+ * ldmain.c (main): Make config.magic_demand_paged be true
+ by default. Don't set the WP_TEXT and D_PAGED flags of
+ output_bfd here; it's too late, so set it when output_bfd
+ is created (in ldlang.c). Also fix setting of EXEC_P flag
+ * ldlang.c (ldlang_open_output): Set output_bfd->flags here.
+ * ldlang.c: Remove some duplicate extern declarations.
+ * ldgram.y: Fixes to -N and -n options.
+ * Makefile.in: Recognize upper case letters in sed script
+ to remove assignments from script files.
+ * ldtemplate: Don't assukme that -N or -n options
+ imply use of -r script.
+ * mkscript.c: Tweaking to correctly handle \n and \\ in input.
+
+Fri Oct 11 10:29:27 1991 Steve Chamberlain (steve at cygnus.com)
+
+ * ldtemplate: include bfd.h before sysdep.h.
+
+Fri Oct 11 04:24:45 1991 John Gilmore (gnu at cygnus.com)
+
+ Restructure configuration scheme for bfd, binutils, ld.
+
+ * configure.in: Revise to symlink sysdep.h to ../bfd/hosts/h-xxx.h.
+ Change some config names to match other dirs.
+ * *.c: Include bfd.h before sysdep.h, so ansidecl and PROTO()
+ get defined first.
+ * config/: Rename some config files to match up h-*.h names.
+ Remove all the HOST_SYS definitions from the config files.
+
+Tue Oct 8 16:00:57 1991 Per Bothner (bothner at cygnus.com)
+
+ * ldexp.h, ldlang.h: Change enum boolean -> enum bfd_boolean.
+ * ldtemplate: Remove ldfile_add_library_path calls;
+ just use the SEARCH_DIR commands in the script files.
+ * Makefile.in: Add LIB_PATH macro, which if set is used to replace
+ the SEARCH_DIR commands in the scripts (using ugly sed magic).
+ This is primarily intended for cross-linking, where you would
+ place libraries in a different place than native libraries.
+ Also, emulations made from ldtemplate now use $(srcdir).
+ * scripttempl/ldglda29k.sc: Change SEARCH_DIR commands to a
+ conventional form; people can use the Makefile's LIB_PATH to
+ override.
+
+Tue Oct 8 14:51:21 1991 Roland H. Pesch (pesch at cygnus.com)
+
+ * Makefile.in: fix target ld.dvi, add target ld.info
+ ld.texinfo: make info filename ld.info
+
+Fri Oct 4 21:51:58 1991 John Gilmore (gnu at cygnus.com)
+
+ * Makefile.in: Avoid using $< in non-suffix rules (breaks on Sun
+ Make).
+ * ldfile.c, ldlang.c, ldmain.c, ldwrite.c: Cope with renames of a
+ few BFD types & enums.
+
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/binutils-2.21/ld/ChangeLog-9899 b/binutils-2.21/ld/ChangeLog-9899
new file mode 100644
index 0000000..866e4a0
--- /dev/null
+++ b/binutils-2.21/ld/ChangeLog-9899
@@ -0,0 +1,2108 @@
+1999-12-02 Nick Clifton <nickc@cygnus.com>
+
+ * Makefile.am: Fix arm-epoc-pe dependencies.
+ * Makefile.in: Regenerate.
+
+ * emulparams/arm_epoc_pe.sh (SCRIPT_NAME): Set to epocpe.
+
+ * scripttempl/epocpe.sc: New file: copy of pe.sc, customised for
+ EPOC by placing .rdata into .text.
+
+1999-11-26 Andreas Schwab <schwab@suse.de>
+
+ * configure.in: Put AC_MSG_CHECKING/AC_MSG_RESULT around check for
+ STRINGIFY. Use yes/no instead of true/false as value for cache
+ variable.
+ * configure: Regenerate.
+
+1999-11-24 Nick Clifton <nickc@cygnus.com>
+
+ * ldlang.c (IGNORE_SECTION): Section must have both ALLOC and LOAD
+ attributes in order to be checked.
+
+1999-11-22 Nick Clifton <nickc@cygnus.com>
+
+ * ldlang.c (lang_check_section_addresses): Fix test to determine
+ if a section should be tested.
+ (IGNORE_SECTION): New macro.
+
+Wed Nov 3 23:31:19 1999 Jeffrey A Law (law@cygnus.com)
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_open_dynamic_archive):
+ Clean up code to use EXTRA_SHLIB_EXTENSION.
+
+1999-11-03 Nick Clifton <nickc@cygnus.com>
+
+ * emulparams/elf32mcore.sh (OUTPUT_FORMAT): Change to little endian.
+ * emulparams/mcorepe.sh (OUTPUT_FORMAT): Change to little endian.
+
+1999-11-01 Steve Chamberlain <sac@pobox.com>
+
+ * ldlang.c (section_already_linked): Rework to use hash table.
+ (already_linked_newfunc): New function.
+ (already_linked_table_init): New function.
+ (already_linked_table_free): New function.
+ (lang_process): Initialize and free the already_linked hash table.
+
+1999-10-27 Andreas Jaeger <aj@suse.de>
+
+ * configure.host: Added HOSTING_CRT0, HOSTING_LIBS for
+ target "mips*-*-linux-gnu*".
+
+1999-10-27 Scott Bambrough <scottb@netwinder.org>
+
+ * emultempl/armelf.em: Include ctype.h to prevent compile time
+ warnings.
+
+1999-10-26 Nick Clifton <nickc@cygnus.com>
+
+ * emultempl/armcoff.em (gld{}_finish): Remove extraneous
+ underscore from prototype.
+ * emultempl/armelf.em (gld{}_finish): Remove extraneous
+ underscore from prototype.
+
+1999-10-07 Geoffrey Keating <geoffk@cygnus.com>
+
+ * scripttempl/elf.sc (.rel.sdata): Combine all the sdata relocs
+ being .rel.sdata, .rel.sdata.*, .rel.gnu.linkonce.s*.
+ (.rela.sdata): Likewise for .rela.sdata.* and .rela.gnu.linkonce.s*.
+ (.rel.sbss): Make like .rel.bss.
+ (.rela.sbss): Make like .rel.bss.
+ (.sdata): Don't include .gnu.linkonce.s.* or .sdata.* when
+ ld -r.
+ (.sbss): Do the same things as for .bss: include SDATA_START_SYMBOLS,
+ .dynsbss.
+
+1999-09-29 Andrew Haley <aph@cygnus.com>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_place_orphan): Defer
+ merging sections when not relocating.
+
+1999-09-28 Mumit Khan <khan@xraylith.wisc.edu>
+
+ * pe-dll.c (process_def_file): Move the offset lookup from here to
+ (fill_exported_offsets): here. New static function.
+ (fill_edata): Use.
+
+1999-09-28 Mumit Khan <khan@xraylith.wisc.edu>
+
+ * deffilep.y (tokens): Add upper and lower case versions of DATA,
+ CONSTANT, NONAME and PRIVATE tokens.
+ (command): Use DATAU.
+ (expline): Allow for drectve syntax as well.
+ (exp_opt_list): Likewise.
+ (exp_opt): Likewise.
+ * pe-dll.c (make_one): Only generate the idata entries for data
+ symbols.
+
+1999-09-28 Geoffrey Keating <geoffk@cygnus.com>
+
+ * scripttempl/elf.sc (.sdata): Include .gnu.linkonce.s.* sections
+ in .sdata too.
+
+1999-09-26 Nick Clifton <nickc@cygnus.com>
+
+ * scripttempl/elf.sc (.bss): Accept sections named .bss.*
+ (.sbss): Accept sections names .sbss.*
+
+1999-09-22 Nick Clifton <nickc@cygnus.com>
+
+ * Makefile.am: Add earm_epoc_pe.c build target.
+
+Sat Sep 18 07:57:10 1999 Jeffrey A Law (law@cygnus.com)
+
+ * emulparms/elf64hppa.sh (OTHER_READONLY_SYMBOLS): Remove ".stubs",
+ they've been renamed to ".stub", which is handled automatically
+ by elf.sc.
+
+Fri Sep 17 11:00:33 1999 Jeffrey A Law (law@cygnus.com)
+
+ * emulparms/elf64hppa.sh (TEXT_START_SYMBOLS): Kill completely.
+ (DATA_START_SYMBOLS): Kill __hp_load_map definition
+
+Thu Sep 16 10:59:56 1999 Jeffrey A Law (law@cygnus.com)
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_open_dynamic_archive):
+ Use the same filename extension for the bfd_elf_dt_needed_name call
+ as we did for finding the library.
+
+ * emulparms/elf64hppa.sh (DATA_START_SYMBOLS): Define.
+ (OTHER_READWRITE_SECTIONS): No longer define __hp_load_map.
+
+ * emulparms/elf64hppa.sh (TEXT_START_SYMBOLS): Define.
+
+Wed Sep 15 02:47:43 1999 Jeffrey A Law (law@cygnus.com)
+
+ * emulparms/elf64hppa.sh (SHLIB_TEXT_START_ADDR): Define.
+ (SHLIB_DATA_ADDR): Likewise.
+
+ * emulparms/elf64hppa.sh (TEXT_DYNAMIC): Define.
+
+ * emulparms/elf64hppa.sh (OTHER_READWRITE_SECTIONS): No longer combine
+ the .plt, .dlt, .opd into a single output section. Provide values
+ for __gp and __hp_load_map.
+
+1999-09-14 Michael Meissner <meissner@cygnus.com>
+
+ * configure.in (Canonicalization of target names): Remove adding
+ ${CONFIG_SHELL} in front of $ac_config_sub, since autoconfig 2.14
+ generates $ac_config_sub with a ${CONFIG_SHELL} already.
+ * configure: Regenerate.
+
+1999-09-14 Donn Terry <donn@interix.com>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_after_open): allow for
+ terminating null.
+
+1999-09-14 Ulrich Drepper <drepper@cygnus.com>
+
+ * configure.in: Define EXTRA_SHLIB_EXTENSION to ".sl" for HP target.
+ * config.in: Add EXTRA_SHLIB_EXTENSION.
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_open_dynamic_archive):
+ Search for second shared lib extension only if EXTRA_SHLIB_EXTENSION
+ is defined.
+
+1999-09-14 Nick Clifton <nickc@cygnus.com>
+
+ * Makefile.in: Add earm_epoc_pe.c build target.
+
+Tue Sep 14 05:26:34 1999 Jeffrey A Law (law@cygnus.com)
+
+ * emulparms/elf64hppa.sh (OTHER_GOT_RELOC_SECTIONS): Add .rela.dlt.
+
+1999-09-13 Donn Terry <donn@interix.com>
+
+ * emultempl/pe.em: Remove the output file at the start, in case it
+ is not writable.
+
+Mon Sep 13 00:17:18 1999 Jeffrey A Law (law@cygnus.com)
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_open_dynamic_archive):
+ Search for file with .sl extension if no file with a .so extension
+ is found.
+
+ * emulparms/elf64hppa.sh (OTHER_READWRITE_SECTIONS): Put .plt
+ at the start of the .dlt output section.
+
+1999-09-12 Ian Lance Taylor <ian@zembu.com>
+
+ * emultempl/pe.em: Don't include "../bfd/libbfd.h".
+ (gld_${EMULATION_NAME}_after_open): Use xmalloc rather than
+ bfd_alloc.
+
+ * pe-dll.h: New file.
+ * pe-dll.c: Include "pe-dll.h". Mark unused arguments as needed
+ to avoid warnings.
+ (edata_sz, reloc_sz): Change from int to size_t.
+ (pe_details_type): Change type of imagebase_reloc from int to
+ unsigned int.
+ (pe_detail_list): Fully initialize last entry.
+ (pe_dll_id_target): Change parameter to const.
+ (pe_dll_generate_def_file): Likewise.
+ (pe_dll_generate_implib): Likewise.
+ (pe_implied_import_dll): Likewise. Change dll_name to const.
+ * emultempl/pe.em: Include "pe-dll.h". Remove declarations now in
+ pe-dll.h.
+ (init): Fully initialize __dll__ entry.
+ (gld_${EMULATION_NAME}_after_open): Remove unused variables
+ sequence, elt, and i.
+ * deffile.h: Add preprocessor guard.
+ * deffilep.y (def_debug): Remove.
+ * Makefile.am: Rebuild dependencies.
+ (HFILES): Add pe-dll.h.
+
+1999-09-12 Donn Terry <donn@interix.com>
+
+ * ld.h (ld_abort): Declare.
+ (abort): Define.
+ * ldmisc.c (ld_abort): Define.
+
+ * scripttempl/pe.sc: Use ${ENTRY} rather than _mainCRTStartup.
+ Move .bss section after .rdata. Move .reloc section after .rsrc.
+
+ * lexsup.c (parse_args): Use strtoul for --split-by-reloc
+ argument.
+
+ * lexsup.c (parse_args): If we get an unrecognized argument,
+ mention --help.
+
+ * ldlang.c (section_already_linked): Use comdat information if it
+ is available.
+
+ * emultempl/pe.em (PE_DEF_SECTION_ALIGNMENT): If
+ OVERRIDE_SECTION_ALIGNMENT is defined, change to that.
+ (gld_${EMULATION_NAME}_before_parse): Use EXECUTABLE_NAME if it is
+ defined, rather than a.exe.
+ (init): Define __subsystem__ as ${SUBSYSTEM}.
+ (set_pe_subsystem): Add ${INITIAL_SYMBOL_CHAR} before entry symbol
+ name.
+
+1999-09-12 Ian Lance Taylor <ian@zembu.com>
+
+ * ldlang.c (open_output): Change local variable desired_endian
+ from int to enum bfd_endian.
+
+ * emulparams/arm_epoc_pe.sh: Define ENTRY, SUBSYSTEM and
+ INITIAL_SYMBOL_CHAR.
+ * emulparams/armpe.sh: Likewise.
+ * emulparams/morepe.sh: Likewise.
+ * emulparams/ppcpe.sh: Likewise.
+ * emulparams/i386pe.sh (ENTRY): Define as _mainCRTStartup.
+ (SUBSYSTEM): Define as PE_DEF_SUBSYSTEM.
+
+Fri Sep 10 00:22:50 1999 Jeffrey A Law (law@cygnus.com)
+
+ * emulparms/elf64hppa.sh (LIB_PATH): Define.
+
+ * emulparms/elf64hppa.sh (OTHER_READONLY_SECTIONS): Put stubs before
+ unwinders so that they are closer to the text section.
+ (OTHER_BSS_SECTIONS): Define.
+ (EXECUTABLE_SYMBOLS): Provide __SYSTEM_ID and _FPU_STATUS.
+ (INIT_START, INIT_END): Define.
+ (FINI_START, FINI_END): Define.
+ * scripttempl/elf.sc: Add support for INIT_START, INIT_END,
+ FINI_START, FINI_END and OTHER_BSS_SECTIONS.
+
+Thu Sep 9 21:43:58 1999 Jeffrey A Law (law@cygnus.com)
+
+ * emulparms/elf64hppa.sh (TEXT_START_ADDR): Move up one page.
+ (DATA_ADDR): Define.
+
+1999-09-09 Stan Shebs <shebs@andros.cygnus.com>
+
+ * emulparams/d10velf.sh (READONLY_START_ADDR): Set to 0x2000004.
+
+1999-09-09 Andreas Schwab <schwab@suse.de>
+
+ * ld.texinfo: Fix arguments of @var to not contain punctuation.
+
+Thu Sep 9 05:52:34 1999 Jeffrey A Law (law@cygnus.com)
+
+ * emulparms/elf64hppa.sh (OTHER_READWRITE_SECTIONS): Define.
+
+1999-09-08 Ulrich Drepper <drepper@cygnus.com>
+
+ * emulparams/elf64hppa.sh (ELFSIZE): New. Set to 64.
+
+Wed Sep 8 00:07:39 1999 Jeffrey A Law (law@cygnus.com)
+
+ * emulparms/elf64hppa.sh (ENTRY): Define to main.
+
+1999-09-03 Scott Bambrough <scottb@netwinder.org>
+
+ * configure.host: Added HOSTING_CRT0, HOSTING_LIBS for
+ target "arm*-*-linux-gnu*"
+
+1999-09-04 Steve Chamberlain <sac@pobox.com>
+
+ * configure.tgt (pjl-*-*, pj-*-*): New targets.
+ * emulparams/pjelf.sh: New file.
+ * emulparams/pjlelf.sh: New file.
+ * scripttempl/pj.sc: New file.
+ * Makefile.am (ALL_EMULATIONS): Add epjelf.o and epjlelf.o.
+ (epjelf.o, epjlelf.o): New targets.
+ * Makefile.in: Rebuild.
+
+Fri Sep 3 20:17:08 1999 Jeffrey A Law (law@cygnus.com)
+
+ * emulparams/elf64hppa.sh (MAXPAGESIZE): Define.
+ (OTHER_READONLY_SECTIONS, DATA_PLT): Likewise.
+
+Thu Sep 2 14:32:03 1999 Jeffrey A Law (law@cygnus.com)
+
+ * emulparams/elf64hppa.sh: New file.
+ * configure.tgt (hppa*w-*-*): Use elf64hppa emulation.
+ * Makefile.am (ALL_64_EMULATIONS): Add eelf64hppa.o
+ (eelf64hppa.c): Add dependencies.
+ * Makefile.in: Rebuilt.
+
+1999-08-25 Philip Blundell <pb@nexus.co.uk>
+
+ * emulparams/armelf.sh (OTHER_BSS_SYMBOLS): Add __end__.
+ * emulparams/armelf_linux.sh: Likewise.
+ * emulparams/armelf_linux26.sh: Likewise.
+
+1999-08-24 Nick Clifton <nickc@cygnus.com>
+
+ From a patch submitted by Roland McGrath <roland@baalperazim.frob.com>
+
+ * configure.tgt (arm-*-netbsd*): New target.
+ * Makefile.am (ALL_EMULATIONS): Add earmnbsd.o.
+ (earmnbsd.c): New rule with deps.
+ * Makefile.in: Regenerate.
+ * emulparams/armnbsd.sh: New file.
+
+1999-08-23 Nick Clifton <nickc@cygnus.com>
+
+ * emulparams/elf32mcore.sh (PARSE_AND_LIST_ARGS): Define.
+ Implement --base-file command line switch.
+
+ * emultempl/elf32.em: Add ability for individual targets to have
+ their own command line switches by defining PARSE_AND_LIST_ARGS.
+
+1999-08-19 Andreas Schwab <schwab@suse.de>
+
+ * configure.host: Use ${CC} instead of gcc for finding compiler
+ related files.
+
+1999-08-11 Nick Clifton <nickc@cygnus.com>
+
+ * scripttempl/mcorepe.sc (OUTPUT_FORMAT): Fix typo.
+
+1999-08-09 Mark Elbrecht <snowball3@bigfoot.com>
+
+ * scripttempl/i386go32.sc: Handle g++ exception sections.
+
+1999-08-09 Ian Lance Taylor <ian@zembu.com>
+
+ From Wally Iimura <iimura@microunity.com>:
+ * ldlang.c (lang_size_sections): When checking whether an address
+ is within a region, don't get confused by wrapping around at the
+ end of the address space.
+
+1999-08-08 Ian Lance Taylor <ian@zembu.com>
+
+ * ldlang.c (wild_doit): Update for renaming of SEC_SHORT to
+ SEC_SMALL_DATA.
+
+ * Makefile.am: Rename .dep* files to DEP*. Change DEP variable to
+ MKDEP. Rebuild dependencies.
+ * Makefile.in: Rebuild.
+
+1999-08-08 Jakub Jelinek <jj@ultra.linux.cz>
+
+ * configure.host (sparc-*-linux-gnu*): New host.
+ (sparc64-*-linux-gnu*): New host.
+
+1999-08-06 Ian Lance Taylor <ian@zembu.com>
+
+ * lexsup.c (is_num): Reindent.
+ (parse_args): Mention program name in error message.
+
+ * emultempl/ostring.sed: Rename from stringify.sed.
+ * emultempl/astring.sed: New file.
+ * Makefile.am (stringify.sed): New target.
+ (GEN_DEPENDS): Change $(srcdir)/emultempl/stringify.sed to
+ stringify.sed.
+ * configure.in: Define and substitute STRINGIFY.
+ * emultempl/*.em: Use stringify.sed from build directory rather
+ than source directory.
+ * emultempl/elf32.em: Use stringify.sed rather than inline sed
+ script.
+ * emultempl/gld960.em, emultempl/gld960c.em: Likewise.
+ * emultempl/hppaelf.em, emultempl/linux.em: Likewise.
+ * emultempl/lnk960.em, emultempl/sunos.em: Likewise.
+ * configure, Makefile.in: Rebuild.
+
+1999-08-05 Donn Terry <donn@interix.com>
+
+ * emulparams/i386pe.sh: Define ENTRY, SUBSYSTEM, and
+ INITIAL_SYMBOL_CHAR.
+ * emulparams/i386pe_posix.sh: New file.
+ * Makefile.am (YACC): If bison is not in the source tree, use
+ @YACC@ rather than bison -y.
+ (LEX): If flex is not in the source tree, use @LEX@ rather than
+ flex.
+ (ALL_EMULATIONS): Add ei386pe_posix.o.
+ (ei386pe_posix.c): New target.
+ * configure.tgt (i[3456]86-*-interix*): New target.
+ * configure.host (i[3456]86-pc-interix*): New host.
+ * Makefile.in: Rebuild.
+
+1999-08-03 Ian Lance Taylor <ian@zembu.com>
+
+ * emulparams/elf32ppc.sh (MAXPAGESIZE): Change to 0x10000.
+ * emulparams/elf32ppclinux.sh (MAXPAGESIZE): Likewise.
+
+1999-08-03 H.J. Lu <hjl@gnu.org>
+
+ * Makefile.am (ALL_EMULATIONS): Remove ego32.o.
+ (ego32.c): Remove.
+ * Makefile.in: Rebuild.
+
+1999-07-22 Philip Blundell <pb@nexus.co.uk>
+
+ * emulparams/armelf_linux26.sh (DATA_START_SYMBOLS): Define.
+ (OTHER_BSS_SYMBOLS, OTHER_BSS_END_SYMBOLS): Likewise.
+ * emulparams/armelf_linux.sh (DATA_START_SYMBOLS): Define.
+
+ * configure.tgt (arm*-*-uclinux*, thumb-*-uclinux*,
+ thumb-*-linux-gnu*): New targets.
+
+1999-07-21 Mark Elbrecht <snowball3@bigfoot.com>
+
+ * scripttempl/i386go32.sc: Add handling of linkonce sections.
+
+ * configure.bat: Remove; obsolete.
+ * emulparams/go32.sh: Remove; obsolete.
+ * scripttempl/go32coff.sc: Remove; obsolete.
+
+1999-07-21 H.J. Lu <hjl@gnu.org>
+
+ * configure.tgt (mips*el-*-vxworks*): New target.
+
+1999-07-21 Brad M. Garcia <bgarcia@fore.com>
+
+ * configure.tgt (i[3456]86-*-vxworks*): New target.
+
+Tue Jul 20 15:18:46 1999 Bob Manson <manson@charmed.cygnus.com>
+
+ * ldlang.c (lang_gc_sections): Only handle the start symbol
+ specially if there is one.
+
+Mon Jul 19 14:19:14 1999 Mark P. Mitchell <mark@codesourcery.com>
+
+ * emulparams/elf32bmipn32.sh (OTHER_RELOCATING_SECTIONS): Add
+ .MIPS.events and .MIPS.content handling.
+ * emulparams/elf64bmip.sh (OTHER_RELOCATING_SECTIONS): Likewise.
+
+1999-07-17 Nick Clifton <nickc@cygnus.com>
+
+ * ldlang.c (get_target): New function: Return true iff the
+ given target is the target being sought.
+ (stricpy): New function: Like strcpy but convert to lower
+ case as well.
+ (strcut): New function: Like strstr but remove the located
+ substring as well.
+ (name_compare): New function: Compute a compatability rating
+ for two target names.
+ (winner): New variable: Best target found by
+ closest_target_match() so far.
+ (closest_target_match): New function: Find the target which is
+ the closest match to the original target.
+ (get_first_input_target): New function: Find the target format
+ of the first of the linker's input file.
+ (open_output): Be more clever about deciding the output target
+ format.
+
+1999-07-16 Jakub Jelinek <jj@ultra.linux.cz>
+
+ * emulparams/elf64_sparc.sh: Add 64-bit directories to native LIB_PATH.
+
+Thu Jul 15 15:55:15 1999 Mark P. Mitchell <mark@codesourcery.com>
+
+ * configure.host: Set up HOSTING_CRT0 and HOSTING_LIBS for IRIX6.
+
+1999-07-15 Ian Lance Taylor <ian@zembu.com>
+
+ * configure.in: Bump version number to 2.9.5.
+ * configure: Rebuild.
+
+1999-07-14 Richard Henderson <rth@cygnus.com>
+
+ * ldlang.c (wild_doit): Copy SEC_SHORT to output section.
+
+ * scripttempl/elf.sc: Re-order .rel[a].foo outputs to the
+ same order seen for the main sections. Add
+ OTHER_READONLY_RELOC_SECTIONS and OTHER_GOT_RELOC_SECTIONS.
+
+1999-07-12 Andreas Schwab <schwab@suse.de>
+
+ * emultempl/linux.em (ld_${EMULATION_NAME}_emulation): Fill in
+ structure initializations.
+
+ * emultempl/elf32.em (ld_${EMULATION_NAME}_emulation): Add missing
+ comma in initializer.
+
+1999-07-11 Ian Lance Taylor <ian@zembu.com>
+
+ * Many files: Changes to avoid gcc warnings: Add ATTRIBUTE_UNUSED
+ as appropriate. Fill in structure initializations.
+
+1999-07-10 Ian Lance Taylor <ian@zembu.com>
+
+ * ldfile.c: Revert patch of 1999-07-08.
+ (ldfile_try_open_bfd): If we are searching for the file, skip
+ files with an incompatible architecture.
+
+1999-07-09 Nick Clifton <nickc@cygnus.com>
+
+ * scripttempl/armcoff.sc (OUTPUT_FORMAT): Include big endian and
+ little endian formats.
+
+1999-07-08 Felix Lee <flee@cygnus.com>
+
+ * scripttempl/mcorepe.sc: fix quoting problem, for bash 2.x
+
+1999-07-08 Jakub Jelinek <jj@ultra.linux.cz>
+
+ * ldfile.c (ldfile_open_file_search): Skip libraries made for
+ incompatible architectures in the search path. Let the user know
+ about any such skips.
+
+Thu Jul 8 12:32:23 1999 John David Anglin <dave@hiauly1.hia.nrc.ca>
+
+ * configure.tgt (hppa*-linux-gnu*): New target.
+
+1999-07-07 Mark Mitchell <mark@codesourcery.com>
+
+ * Makefile.am (ALL_64_EMULATIONS): Add eelf64bmip.
+ (eelf64bmip): New target.
+ * Makefile.in: Regenerated.
+ * configure.tgt (mips-sgi-irix6*): Add 64-bit emulation.
+ * emulparams/elf64bmip.sh: New file.
+
+1999-07-05 Nick Clifton <nickc@cygnus.com>
+
+ * emultempl/pe.em (after_open): Abort if input format is ARM and
+ output format is not.
+ * emultempl/armcoff.em (after_open): Abort if input format is ARM
+ and output format is not.
+ * emultempl/armelf.em (after_open): Abort if input format is ARM
+ and output format is not.
+
+1999-07-02 Ian Lance Taylor <ian@zembu.com>
+
+ * ldlang.c: Revert change of 1999-06-23.
+
+1999-06-30 Mark Mitchell <mark@codesourcery.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add eelf32bmipn32.o.
+ (eelf32bmipn32.c): New target.
+ * Makefile.in: Regenerated.
+ * configure.tgt (mips-sgi-irix6*): Make n32 the default
+ emulation.
+ * emulparams/elf32bmipn32.sh: New file.
+
+1999-06-28 Jim Pick <jim@jimpick.com>
+
+ * emultempl/armelf.em: Added code so that .xs linker scripts are
+ called so that ARM shared libraries are built correctly.
+
+1999-06-22 Mark Mitchell <mark@codesourcery.com>
+
+ * ldmain.c (main): Initialize link_info.init_function and
+ link_info.fini_function.
+ * lexsup.c (OPTION_INIT): New macro.
+ (OPTION_FINI): Likewise.
+ (ld_options): Add descriptions for them.
+ (parse_args): Handle them.
+
+1999-06-23 Ian Lance Taylor <ian@zembu.com>
+
+ * ldlang.c (section_already_linked): Only discard link once
+ sections if we are building constructors.
+
+1999-06-22 Nick Clifton <nickc@cygnus.com>
+
+ * ld.texinfo (Location Counter): Describe behaviour of
+ location counter inside section statements.
+
+1999-06-20 Mark Mitchell <mark@codesourcery.com>
+
+ * scripttempl/elf.sc (WRITABLE_RODATA): New variable for
+ controlling whether or not .rodata is in the data segment or the
+ text segment.
+
+1999-06-18 Nick Clifton <nickc@cygnus.com>
+
+ * emultempl/pe.em: Add new command line switch --thumb-entry.
+ * emultempl/armelf.em: Add new command line switch --thumb-entry.
+ * emultempl/armcoff.em: Add new command line switch --thumb-entry.
+ * ld.texinfo: Document new ARM command line switch: --thumb-entry.
+
+1999-06-20 H.J. Lu <hjl@gnu.org>
+
+ * configure.in (all_libpath): Accumulate across all enabled targets.
+
+Sun Jun 20 14:10:33 1999 Richard Henderson <rth@cygnus.com>
+
+ * emultempl/armelf.em: Watch EMULATION_LIBPATH instead of
+ DEFAULT_EMULATION.
+ * emultempl/elf32.em: Likewise.
+ * emultempl/sunos.em: Likewise.
+
+Fri Jun 18 15:24:48 1999 Richard Henderson <rth@cygnus.com>
+
+ * Makefile.am (GENSCRIPTS): Pass EMULATION_LIBPATH, not EMUL.
+ * configure.in (all_emuls): Add targ_extra_libpath.
+ (all_libpath, EMULATION_LIBPATH): Define.
+ * configure.tgt (powerpc-*-linux-gnu*): Define targ_extra_libpath.
+ * genscripts.sh (LIB_PATH): Define if emulation in EMULATION_LIBPATH.
+
+Mon Jun 14 10:38:36 1999 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
+
+ * ld.texinfo: Fix use of @item vs. @itemx.
+
+1999-06-13 Ian Lance Taylor <ian@zembu.com>
+
+ From Thomas Zenker <thz@lennartz-electronic.de>:
+ * ldgram.y (attributes_opt): Use attributes_list instead of NAME.
+ (attributes_list, attributes_string): New nonterminals.
+ * ldlang.c (lang_set_flags): Add invert parameter. Don't handle
+ '!'.
+ * ldlang.c (lang_set_flags): Update declaration.
+
+1999-06-12 Ian Lance Taylor <ian@zembu.com>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_after_parse): Don't add
+ entry_symbol as an undefined symbol when doing a relocateable
+ link. From <jeffdb@goodnet.com>.
+
+1999-06-12 David O'Brien <obrien@freebsd.org>
+
+ * configure.tgt: (i[3456]86-*-freebsd*): Now defaults to ELF.
+
+1999-06-09 Nick Clifton <nickc@cygnus.com>
+
+ * lexsup.c (help): Restore previous format of output.
+
+1999-06-04 Nick Clifton <nickc@cygnus.com>
+
+ * emultempl/pe.em: If compiling for arm_epoc_pe rename
+ interworking functions to avoid a name space clash.
+
+1999-06-02 Jason Merrill <jason@yorick.cygnus.com>
+
+ * scripttempl/v850.sc: Add initp support.
+
+1999-06-02 Nick Clifton <nickc@cygnus.com>
+
+ * emultempl/pe.em: Rename global arm interworking functions to
+ avoid name collision when all targets BFD is built.
+
+1999-05-30 Cort Dougan <cort@attis.cs.nmt.edu>
+
+ * Makefile.am (ALL_EMULATIONS): Add eelf32ppclinux.o.
+ * configure.tgt (powerpc-*-linux-gnu): Use it.
+ * emulparams/elf32ppclinux.sh: New file.
+
+1999-05-29 Ian Lance Taylor <ian@zembu.com>
+
+ * ld.texinfo (Options): Clarify that options which refer to files
+ must be properly ordered.
+
+1999-05-29 Nick Clifton <nickc@cygnus.com>
+
+ * emultempl/armelf.em (..._parse_args): New function: Parse
+ command line option. Accept arm-elf specific command line option
+ '-p' or '--no-pipeline-knowledge'.
+ (..._list_options): New function: Describe the new command line
+ option.
+ (..._before_allocation): Pass the value of the new variable
+ no_pipeline_knowledge to bfd_elf32_arm_process_before_allocation.
+
+ * emultempl/armelf_oabi.em (..._before_allocation): Pass zero as
+ the third parameter to bfd_elf32_arm_process_before_allocation.
+
+1999-05-28 Nick Clifton <nickc@cygnus.com>
+
+ * lexsup.c (help): Minor formatting changes.
+
+1999-05-28 Martin Dorey <mdorey@madge.com>
+
+ * configure.tgt (i960-*-elf*): New target.
+ * emulparams/elf32_i960.sh: New file.
+ * Makefile.am (ALL_EMULATIONS): Add eelf32_i960.o.
+ (eelf32_i960.c): New target.
+ * Makefile.in: Rebuild.
+
+1999-05-26 Nick Clifton <nickc@cygnus.com>
+
+ * emulparams/armelf_oabi.sh (TEMPLATE_NAME): Set to armelf_oabi.
+
+1999-05-24 Philip Blundell <philb@gnu.org>
+
+ * emultempl/armelf.em (before_parse): Set config.dynamic_link and
+ config.has_shared.
+ * emulparams/armelf.sh (GENERATE_SHLIB_SCRIPT): Define.
+ * emulparams/armelf_linux.sh (GENERATE_SHLIB_SCRIPT): Likewise.
+
+1999-04-13 Philip Blundell <philb@gnu.org>
+
+ * emultempl/armelf.em: Add definitions related to shared objects
+ (copied from elf32.em).
+
+Wed May 19 12:44:26 1999 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
+
+ * Makefile.am (ALL_EMULATIONS): Remove earmlinux.o and
+ earm26linux.o, add earmelf_linux.o and earmelf_linux26.o.
+ * Makefile.in: Regenerated.
+
+1999-05-16 Nick Clifton <nickc@cygnus.com>
+
+ * emulparams/elf32mcore.sh (GENERATE_SHLIB_SCRIPT): Define.
+ (TEMPLATE_NAME): Define.
+
+Thu May 13 09:48:09 1999 Joel Sherrill (joel@OARcorp.com)
+
+ * configure.tgt (i386-*-rtemself*, sh-*-rtemself*): New targets.
+ (mips*el-*-rtems*, powerpcle-*-rtems*): New targets.
+
+1999-05-10 DJ Delorie <dj@cygnus.com>
+
+ * scripttempl/pe.sc: Specify the output arch, which Ian says is
+ the Right Thing to do.
+
+ * emultempl/pe.em: various changes to parameterize the
+ target-specific information.
+ (gld_i386pe_after_open): Detect and fix MS import libraries
+ by renaming the member objects (which are all named the same).
+
+ * pe-dll.c: various changes to parameterize the target-specific
+ information.
+ (generate_reloc): support relocs more generically to allow for
+ expansion.
+ (pe_exe_build_sections): new; used to add .relocs to .exes
+ (pe_exe_fill_sections): ditto
+
+1999-05-10 Catherine Moore <clm@cygnus.com>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_after_open):
+ Check for TARGET_IS_arm_epoc_pe.
+ (gld_${EMULATION_NAME}_before_allocation): Likewise.
+
+1999-05-12 Anthony Green <green@cygnus.com>
+
+ * ldlang.c (walk_wild, walk_wild_file, walk_wild_section,
+ output_section_callback, gc_section_callback): New functions for
+ generic section walks.
+ (wild, lang_gc_wild): Use walk_wild.
+ (wild_file, lang_gc_wild_file): Deleted. Common logic moved to
+ walk_wild_file.
+ (wild_section, lang_gc_wild_section): Deleted. Common logic moved
+ to walk_fild_section. Unique logic moved into callbacks
+ output_section_callback and gc_section_callback.
+
+1999-04-26 Tom Tromey <tromey@cygnus.com>
+
+ * aclocal.m4, configure: Updated for new version of libtool.
+
+1999-04-12 Philip Blundell <pb@nexus.co.uk>
+
+ * emulparams/armelf_linux.sh: New file. Support for ARM
+ GNU/Linux ELF ABI.
+ * emulparams/armelf_linux26.sh: New file. APCS-26 version of above.
+ * configure.tgt: For arm*-*-linux-gnu*, set default emulation to
+ `armelf_linux', and also include `armelf_linux26' and `armelf'.
+ * Makefile.am: Add rules to make earmlinux.c and earmlinux26.c.
+ (ALL_EMULATIONS): Add earmlinux.o and earmlinux26.o.
+ * Makefile.in: Regenerate.
+
+1999-04-11 Richard Henderson <rth@cygnus.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add elf_i386_be.o.
+ * configure.tgt (i[3456]86-*-beos*): Use it.
+ * emulparams/elf_i386_be.sh: New file.
+ * Makefile.in: Rebuild.
+
+ * configure.in (environ): Detect declaration.
+ * ldmain.c (main): Don't declare environ.
+ * sysdep.h (environ): Declare if needed.
+ * configure, config.in: Rebuild.
+
+1999-04-11 Richard Henderson <rth@cygnus.com>
+
+ * ldgram.y (ldgram_vers_current_lang): New.
+ (vers_defns): Accept `extern "lang" { }' syntax.
+ * ldlex.l (vers_node_nesting): New.
+ (V_IDENTIFIER): Accept . and $ in symbols.
+ (VERS_NODE): Accept `extern "lang" { }' tokens. Nest VERS_NODE states.
+ * ldlang.c (lang_new_vers_regex): New `lang' argument. Update callers.
+ (lang_vers_match_lang_c): New function.
+ (lang_vers_match_lang_cplusplus): New function.
+ (lang_vers_match_lang_java): New function.
+ (lang_do_version_exports_section): Fix iteration. Don't free
+ section contents, as it is still in use by the patterns.
+
+1999-04-10 Richard Henderson <rth@cygnus.com>
+
+ * ldmain.c (main): Init link_info.no_undefined.
+ * lexsup.c: Add command-line option --no-undefined.
+
+1999-04-06 Ian Lance Taylor <ian@zembu.com>
+
+ * ld.h (LC_MESSAGES): Never define.
+ * ldmain.c (main): Don't pass LC_MESSAGES to setlocale if the
+ system does not define it.
+
+1999-04-06 H.J. Lu <hjl@gnu.org>
+
+ * ldmain.h (demangling): Declare.
+ * ldmain.c (demangling): New global variable.
+ (main): Initialize demangling.
+ * ldmisc.c (vfinfo): Don't demangle symbol if ! demangling.
+ * lexsup.c (ld_options, parse_args): Handle --demangle and
+ --no-demangle.
+ * ld.texinfo, ld.1: Document --demangle/--no-demangle.
+
+ * ldlex.l (V_IDENTIFIER): Allow '.' in symbol.
+
+1999-04-05 Chris Torek <torek@BSDI.COM>
+
+ * emultempl/sunos.em (gld${EMULATION_NAME}_search_dir): Check that
+ a shared library really exists, avoiding broken symlinks.
+
+ * ldfile.c (ldfile_open_file): Generate a better error message if
+ we can't find a -l file.
+
+1999-04-05 DJ Delorie <dj@cygnus.com>
+
+ * configure.tgt (i386-*-pe): add targ_extra_ofiles for other PE
+ targets (i386-pe and i386-winnt)
+
+1999-04-04 Ian Lance Taylor <ian@zembu.com>
+
+ * deffilep.y: Include "sysdep.h" and "ldmisc.h".
+ (def_file_add_directive): Change return type to void. Remove
+ unused locals sh_reserve, sh_commit, and j.
+ (def_ungetc): Always return a value.
+ (def_lex): Correct parenthesization of || within &&.
+ * deffile.h (def_file_add_directive): Update declaration.
+ * pe-dll.c: Include <time.h>, <ctype.h>, and "ldemul.h".
+ (generate_edata): Remove unused local i.
+ (quoteput): Add cast to avoid warning.
+ (pe_dll_generate_def_file): Fix type in format string.
+ (quick_symbol): Remove unused local blhe.
+ (pe_dll_generate_implib): Add cast to avoid warning.
+ (pe_process_import_defs): Remove unused locals ar_head, ar_tail,
+ and n.
+ (pe_as16): Comment out.
+
+1999-04-04 Don Bowman <don@pixsci.com>
+
+ * configure.tgt: Add mips*-*-vxworks* target.
+
+1999-03-31 Nick Clifton <nickc@cygnus.com>
+
+ * Makefile.in (ALL_EMULATIONS): Add earm_epoc_pe.o
+ Add build rule and dependencies for earm_epoc_pe.c.
+
+ * emulparams/arm_epoc_pe.sh: New file.
+
+ * configure.tgt: Add 'targ_extra_ofiles' for ARM based PE
+ targets.
+
+1999-03-31 Philip Blundell <pb@nexus.co.uk>
+
+ * configure.tgt: Match `arm*-*-linux-gnu*' not
+ `armv*-*-linux-gnu'.
+
+1999-03-26 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
+
+ * scripttempl/elf.sc: Put the .eh_frame and .gcc_except_table
+ sections in the data segment.
+
+Fri Mar 26 12:05:51 1999 Catherine Moore <clm@cygnus.com>
+
+ * ld.h (wildcard_spec): Add exclude_name.
+ * ldgram.y (EXCLUDE_FILE): New token.
+ (wildcard_spec): Set exclude_name.
+ (file_NAME_list): Recognize EXCLUDE_FILE.
+ * ldlang.c (wild_section): Check for excluded files.
+ (print_wild_statement): Print excluded files.
+ (lang_add_wild): New argument exclude_filename.
+ Set exclude_filename.
+ * ldlang.h (lang_wild_statement_type): Add exclude_filename.
+ * ldlex.l: New token EXCLUDE_FILE.
+ * mri.c (mri_draw_tree): Add argument to lang_add_wild.
+ * scripttempl/elf.sc (CTOR, DTOR): Exclude crtend.o from ctor wildcard.
+ Reorder sorted and unsorted ctors.
+ * scripttempl/elfd10v.sc (CTOR, DTOR): Likewise.
+ * scripttempl/elfd30v.sc (CTOR, DTOR): Likewise.
+ * scripttempl/elfppc.sc (CTOR, DTOR): Likewise.
+
+1999-03-26 Nick Clifton <nickc@cygnus.com>
+
+ * ldlang.c (lang_gc_sections): If entry_symbol is not defined,
+ default to "start".
+
+1999-03-03 Nick Clifton <nickc@cygnus.com>
+
+ * scripttempl/elf.sc: Add explicit placements for the .eh_frame
+ and .gcc_except_table sections.
+
+Wed Mar 3 09:13:34 1999 Catherine Moore <clm@cygnus.clm>
+
+ * scripttempl/elf.sc: Remove .end.ctors and .end.dtors
+ sections. Reorder .ctors section entries.
+ * scripttempl/elfd10v.sc: Likewise.
+ * scripttempl/elfd30v.sc: Likewise.
+ * scripttempl/elfppc.sc: Likewise.
+
+1999-02-26 Jim Lemke <jlemke@cygnus.com>
+
+ * ldmain.c (main): Wrong error msg for -r and --mpc860c0.
+
+1999-02-25 Nick Clifton <nickc@cygnus.com>
+
+ * ldlang.c (lang_check_section_addresses): Remove extraneous
+ backslash.
+
+Thu Feb 25 15:07:24 1999 Catherine Moore <clm@cygnus.com>
+
+ * scripttempl/elf.sc: Don't gather .ctor and .dtor sections
+ for relocateable links.
+ * scripttempl/elfd10v.sc: Likewise.
+ * scripttempl/elfd30v.sc: Likewise.
+ * scripttempl/elfppc.sc: Likewise.
+
+1999-02-22 Jim Lemke <jlemke@cygnus.com>
+
+ * ldint.texinfo: remove extraneous right brace.
+ * ldmain.c (main): initialize and check option "mpc860c0".
+ * lexsup.c (ld_options, parse_args): add option "mpc860c0".
+
+Wed Feb 17 12:10:06 1999 Stan Cox <scox@cygnus.com>
+
+ * mpw-elfmips.c (gldelf32ebmip_before_allocation): Remove special
+ .reginfo section handling.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): Likewise.
+ * emulparams/elf32elmip.sh (INITIAL_READONLY_SECTIONS): Removed
+ * emulparams/elf32ebmip.sh (INITIAL_READONLY_SECTIONS): Removed
+
+1999-02-17 Nick Clifton <nickc@cygnus.com>
+
+ Patch from: Scott Bambrough <scottb@corelcomputer.com>
+
+ * configure.tgt: Added armv*-*-linux-gnu to $targ_emul
+ recognition.
+
+Wed Feb 17 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
+
+ * emultempl/armelf_oabi.em
+ (bfd_elf32_arm_allocate_interworking_sections,
+ bfd_elf32_arm_get_bfd_for_interworking,
+ bfd_elf32_arm_process_before_allocation): Define them to use the
+ old ABI versions of the functions.
+
+Tue Feb 16 16:48:19 1999 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.in: Change AC_PREREQ to 2.13. Change AM_PROG_INSTALL
+ to AC_PROG_INSTALL. Change AM_EXEEXT to AC_EXEEXT.
+ * Makefile.am (earmelf_oabi.c): Changes spaces to tab.
+ * acconfig.h: Remove.
+ * aclocal.m4: Rebuild.
+ * configure: Rebuild.
+ * Makefile.in: Rebuild.
+
+Mon Feb 15 18:21:48 1999 Vladimir N. Makarov <vmakarov@cygnus.com>
+
+ * ldexp.h (struct etree_value_type): Change valid onto valid_p.
+
+ * ldexp.c (new_abs): Ditto.
+ (new_rel, new_rel_from_section, fold_binary, invalid, fold_name,
+ exp_fold_tree, exp_binop, exp_trinop, stat_alloc,
+ exp_get_abs_int): Ditto
+
+ * ldlang.c (print_assignment, lang_size_sections,
+ lang_do_assignments): Ditto.
+
+1999-02-11 Nick Clifton <nickc@cygnus.com>
+
+ * ldlang.c (lang_check_section_addresses): New function: Check
+ addresses assigned to section for overlaps.
+ (lang_process): Call lang_check_section_addresses if suitable.
+
+ * ld.h: Add new boolean field to args_type structure:
+ 'check_section_addresses'.
+
+ * ldmain.c: Initialise check_section_addresses field to true.
+
+ * lexsup.c: Add new command line options '--no-check-sections' and
+ '--check-sections'.
+
+ * ld.texinfo: Document new command line options '--check-sections'
+ and '--no-check-sections'.
+
+1999-02-08 Nick Clifton <nickc@cygnus.com>
+
+ * configure.tgt: Add support for StrongARM target.
+
+Wed Feb 3 19:41:01 1999 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldctor.c (ldctor_build_sets): Just set SEC_KEEP once. Check for
+ an owner of a section before using it to look up a reloc type.
+ Don't set SEC_KEEP for the absolute section.
+
+Mon Feb 1 11:39:46 1999 Catherine Moore <clm@cygnus.com>
+
+ * Makefile.am (earmelf_oabi.o): New.
+ * Makefile.in: Regenerate.
+ * configure.tgt (arm-*-oabi): New.
+ (thumb-*-oabi): New.
+ * emulparams/armelf_oabi.sh: New.
+ * emultempl/armelf_oabi.em: New.
+
+1999-01-31 17:57:31 1998 Michael Meissner <meissner@cygnus.com>
+
+ * scripttempl/elfppc.sc: Add support for -fleading-underscores
+ switch in all linker generated symbols.
+
+ * configure.tgt (powerpc{,le}*-*-vxworks): Add as aliases for
+ powerpc{,le}-*-eabi.
+
+Wed Jan 20 17:01:48 1999 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.tgt (i[3456]86-*-solaris2*): New target. From Pavel
+ Roskin <pavel_roskin@geocities.com>.
+
+1999-01-19 Nick Clifton <nickc@cygnus.com>
+
+ * ldlang.c (lang_size_sections): Count loadable sections as
+ contributing to the size of the current segment.
+
+1999-01-15 Nick Clifton <nickc@cygnus.com>
+
+ * ldlang.c (lang_size_sections): Only update the current
+ address of a region if the section just placed into it is an
+ allocated section.
+
+1999-01-12 Nick Clifton <nickc@cygnus.com>
+
+ * Makefile.am: Replace efr30.o with eelf32fr30.o.
+ * Makefile.in: Regenerate.
+
+ * configure.tgt: Replace fr30 with elf32fr30.
+
+ * emulparams/elf32fr30.sh: New file: Replaces fr30.sh, and uses
+ generic elf.sc script. Also replaces the .stack section with a
+ user definable symbol __stack.
+
+1999-01-11 Nick Clifton <nickc@cygnus.com>
+
+ * scripttempl/fr30.sc: Fill .init and .fini sections with NOP
+ pattern.
+
+1999-01-03 Ken Raeburn <raeburn@cygnus.com>
+
+ * Makefile.am (check-DEJAGNU): No longer provide HOSTING_EMU,
+ HOSTING_CRT0, HOSTING_LIBS; the test suite can extract them from
+ configure.host and configure.tgt now.
+ * Makefile.in: Rebuild.
+
+1998-12-27 Ulrich Drepper <drepper@cygnus.com>
+
+ * lexsup.c (parse_args, case OPTION_RPATH): Avoid adding duplicate
+ elements to rpath.
+
+Thu Dec 10 11:12:28 1998 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
+
+ * Makefile.am (ALL_EMULATIONS): Remove pe-dll.o and deffilep.o.
+ (ALL_EMUL_EXTRA_OFILES): New variable. Put them here instead.
+ * configure.in: Set EMUL_EXTRA_OFILES to $(ALL_EMUL_EXTRA_OFILES)
+ if configuring with all targets.
+ * configure, Makefile.in, aclocal.m4: Rebuild.
+
+ * emultempl/pe.em (pe_enable_stdcall_fixup): Make static.
+ (pe_dll_do_default_excludes): Removed, unused.
+ (pe_def_file, pe_dll_export_everything, pe_dll_kill_ats,
+ pe_dll_stdcall_aliases): Don't initialize them, this file may be
+ compiled more than once.
+ * pe-dll.c (pe_def_file, pe_dll_export_everything,
+ pe_dll_do_default_excludes, pe_dll_kill_ats,
+ pe_dll_stdcall_aliases): Define and initialize them here instead.
+ (generate_reloc): Fix allocation of reloc_addresses array to use
+ bfd_vma instead of unsigned long. Fix element size in qsort call.
+ (reloc_sort): Compare pointers to bfd_vma instead of unsigned
+ long.
+
+Mon Dec 7 21:10:09 1998 J.J. van der Heijden <j.j.vanderheijden@student.utwente.nl>
+
+ * configure.tgt (i[3456]86-*-mingw32*): Add cygwin target specific
+ files.
+
+Sun Dec 6 16:33:33 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.tgt (m68*-*-gnu*): New target. From Aymeric Vincent
+ <aymeric.vincent@emi.u-bordeaux.fr>.
+
+1998-12-04 Nick Clifton <nickc@cygnus.com>
+
+ * emulparams/fr30.sh (TEXT_START_ADDR): Change TEXT_START_ADDR
+ from 0x100000 to 0x10000 so that it fits in 20 bits.
+
+Sat Nov 28 22:32:20 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldemul.h (ldemul_recognized_file): Declare.
+
+Sat Nov 28 22:30:55 1998 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
+
+ * ldlang.c (lang_add_wild): Don't pretend that there is an input
+ file if the filename is a wildcard pattern.
+
+1998-11-25 DJ Delorie <dj@cygnus.com>
+
+ * ldemul.h (ld_emulation_xfer_struct): new hook "recognized_file"
+ * ldemul.c (ldemul_recognized_file): new function, new hook
+ * ldint.texinfo: document new hook.
+ * ldlang.c (load_symbols): call recognized_hook for all objects we
+ do recognize, in case the emulation needs to handle them
+ specially. PE DLLs use this.
+ * pe-dll.c (pe_dll_generate_def_file): take out hack and debug
+ printfs
+ * emultempl/pe.em (gld_i386_recognized_file): new function
+ (gld_i486_unrecognized_file): take out hack
+
+1998-11-23 DJ Delorie <dj@cygnus.com>
+
+ * pe-dll.c (fill_edata): fill in timestamp
+ (make_head): name object files sequentially to ensure
+ they link in the right order.
+ (make_tail): same here
+ (pe_process_import_defs): use sequential names for bfds to ensure
+ proper link order.
+ (pe_implied_import_dll): new function; handles linking directly
+ against DLLs by simulating IMPORTS directives. * emultempl/pe.em
+ (gld_i386pe_before_parse): hack bfd to not recognize .dll files
+ via bfd_pe_dll_not_recognized_hack
+
+1998-11-23 DJ Delorie <dj@cygnus.com>
+
+ * emultempl/pe.em (gld_i386pe_parse_args): Conditionalize call to
+ pe_dll_add_excludes
+
+Mon Nov 23 14:36:18 1998 Nick Clifton <nickc@cygnus.com>
+
+ * emultempl/pe.em (after_parse): Only create an undefined entry
+ symbol if one has been specified.
+
+1998-11-23 DJ Delorie <dj@cygnus.com>
+
+ * emultempl/pe.em (gld_i386pe_after_open): call
+ pe_process_import_defs
+ * pe-dll.c (pe_dll_generate_def_file): calculate BASE from
+ pe_data, only print if actually set. Print version only if
+ set.
+ (save_relocs): save relocs for both input and output.
+ (make_one): support internal/external different names.
+ (pe_dll_generate_implib): support new make_one
+ (pe_process_import_defs): new function; handles IMPORT
+ directives in .def files.
+
+Fri Nov 20 13:06:49 1998 Nick Clifton <nickc@cygnus.com>
+
+ * ldmisc.c (vfinfo): Cope with empty symbol names.
+
+Thu Nov 19 13:31:15 1998 Nick Clifton <nickc@cygnus.com>
+
+ * scripttempl/pe.sc: Add provision of '_end' symbol.
+
+Wed Nov 18 18:18:43 1998 Geoffrey Noer <noer@cygnus.com>
+
+ * configure.tgt: change refs from cygwin32* to cygwin*.
+ * aclocal.m4: regenerate
+ * configure.in: don't need to call AM_CYGWIN32.
+ * configure: regenerate
+
+Mon Nov 16 22:14:07 1998 DJ Delorie <dj@cygnus.com>
+
+ * emultempl/pe.em (gld_i386_finish): generate import library
+ * deffile.h: add hint member.
+ * pe-dll.c (pe_dll_generate_implib): New function with helpers;
+ generates the import library directly from the export table.
+ (fill_edata): remember the actual hint for the import library.
+
+Sat Nov 14 14:36:24 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld.1: Some cleanups from NOKUBI Hirotaka <hnokubi@yyy.or.jp>.
+
+Thu Nov 12 19:21:57 1998 Dave Brolley <brolley@cygnus.com>
+
+ * po/ld.pot: Regenerated.
+ * po/POTFILES.in: Regenerated.
+ * configure: Regenerated.
+ * aclocal.m4: Regenerated.
+ * Makefile.in: Regenerated.
+
+Wed Nov 11 18:10:15 1998 DJ Delorie <dj@cygnus.com>
+
+ * pe-dll.c (generate_reloc): don't output PE relocs for sections
+ that won't be loaded.
+
+Wed Nov 11 13:44:54 1998 DJ Delorie <dj@cygnus.com>
+
+ * pe-dll.c (fill_edata): don't strip underscores
+
+Tue Nov 10 21:28:19 1998 DJ Delorie <dj@cygnus.com>
+
+ * ld.texinfo: added i386pe option summary
+
+Tue Nov 10 17:53:17 1998 DJ Delorie <dj@cygnus.com>
+
+ * pe-dll.c (process_def_file): properly note undefined exported
+ symbols, clean up old code.
+ (pe_dll_generate_def_file): don't crash if pe_def_file is NULL
+ * emultempl/pe.em (gld_i386_parse_args): add
+ (en/dis)able-stdcall-fixups
+ (pe_fixup_stdcalls): warn about stdcall fixups
+ (gld_i386_unrecognized_file): make exported symbols undefs so that
+ archive members get pulled in
+
+Tue Nov 10 14:50:51 1998 Catherine Moore <clm@cygnus.com>
+
+ * scripttempl/elfd10v.sc: Add KEEP attribute to .init,
+ .fini, .dtors and .ctors. Add .data and .text
+ wildcards to support section garbage collection.
+
+Mon Nov 9 22:52:50 1998 DJ Delorie <dj@indy.delorie.com>
+
+ * deffilep.y: properly handle relocs with multiple def_files,
+ cache import module names
+
+Mon Nov 9 22:44:58 1998 DJ Delorie <dj@cygnus.com>
+
+ * pe-dll.c (process_def_file): don't assume exports won't move
+ during a realloc
+
+Mon Nov 9 16:41:30 1998 DJ Delorie <dj@cygnus.com>
+
+ * pe-dll.c: New file; direct support for PE DLLs
+ * deffile.h: New file; direct support for PE DLLs
+ * deffilep.y: New file; direct support for PE DLLs
+ * emultempl/pe.em: add direct support for PE DLLs
+ * configure.tgt: allow target-specific extra files
+ * configure.in: allow target-specific extra files
+ * ldlang.c (lang_add_assignment): return the assignment so that
+ one can change the value later based on the object files (pe-dll
+ DEF files do this)
+ * ldint.texinfo: add section for emulation walkthrough
+ * Makefile.am: add new files and target-specific extra files
+ * emultempl/pe.em (gld_i386_list_options): list dll-specific
+ options.
+ * pe-dll.c (process_def_file): auto-export everything if
+ nothing is otherwise exported.
+
+Wed Nov 4 16:39:18 1998 Nick Clifton <nickc@cygnus.com>
+
+ * Makefile.am: Add support for FR30 target.
+ * configure.tgt: Add support for FR30 target.
+ * Makefile.in: Regenerate.
+ * emulparams/fr30.sh: New file.
+ * scripttempl/fr30.sc: New file.
+
+Mon Nov 2 14:47:15 1998 Catherine Moore <clm@cygnus.com>
+
+ * ldmain.c (main): Don't report error for dynamic links and
+ --gc-sections.
+
+1998-10-26 16:05 Ulrich Drepper <drepper@cygnus.com>
+
+ * lexsup.c (ld_options): Change text of -O to Optimize output file".
+ (parse_args): Set link_info.optimize based on -O argument.
+ * ldmain.c (main): Initialize link_info.optimze to false.
+ * ld.texinfo: Describe -O option.
+ * ld.1: Likewise.
+
+Mon Oct 12 14:29:56 1998 Nick Clifton <nickc@cygnus.com>
+
+ * scripttempl/v850.sc: Move .sbss and .scommon sections into their
+ own segment, so that they can be next to the .bss section and so
+ initialised by the same piece of code.
+
+Fri Oct 9 15:59:52 1998 Catherine Moore <clm@cygnus.com>
+
+ * scripttempl/elf.sc: Merge .sdata.* etc sections.
+ * ldctor.c (ldctor_build_sets): Set SEC_KEEP for
+ ctor sections.
+
+Mon Oct 5 09:40:43 1998 Catherine Moore <clm@cygnus.com>
+
+ * ldmain.c (main): Error if --gc-sections and
+ dyanmic linking.
+ * scripttempl/v850.sc: Add KEEP attribute to .init,
+ .fini, .dtors and .ctors. Add .data and .text
+ wildcards to support section garbage collection.
+
+Wed Sep 30 11:19:15 1998 Nick Clifton <nickc@cygnus.com>
+
+ * scripttempl/v850.sc: Rename .call_table section to
+ .call_table_data and create a new section called
+ .call_table_text.
+
+Sun Sep 20 00:43:26 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * scripttempl/elf.sc: Add alignment at the end of the .bss
+ section, so that it is included in the memsize of the segment.
+
+Fri Sep 18 13:42:42 1998 Catherine Moore <clm@cygnus.com>
+
+ * emultempl/elf32.em (gld_place_orphan): Don't process for
+ sections with SEC_EXCLUDE flag.
+
+Fri Sep 4 09:24:02 1998 Nick Clifton <nickc@cygnus.com>
+
+ * emulparams/d30velf.sh (TEXT_SIZE): Increased to 2000K.
+ (DATA_SIZE): Increased to 2000K.
+
+Thu Sep 3 17:30:58 1998 Richard Henderson <rth@cygnus.com>
+
+ * emulparams/d10velf.sh (TEMPLATE_NAME): Use elf32.
+
+Mon Aug 31 01:06:00 1998 Catherine Moore <clm@cygnus.com>
+
+ * Makefile.am: Change armelf.sc to elf.sc
+ * Makefile.in: Regenerate.
+
+Mon Aug 31 11:12:04 1998 Catherine Moore <clm@cygnus.com>
+
+ * emulparams/armelf.sh: Change SCRIPT_NAME to
+ elf. Change TEXT_START_ADDR to 0x8000. Define
+ OTHER_TEXT_SECTIONS, OTHER_BSS_SYMBOLS and
+ OTHER_BSS_END_SYMBOLS.
+ * scripttempl/elf.sc: Modify to use
+ OTHER_BSS_END_SYMBOLS.
+ * scripttempl/elfarm.sc: Remove file.
+
+Tue Aug 18 12:05:34 1998 Catherine Moore <clm@cygnus.com>
+
+ * emultempl/armelf.em (gld_armelf_before_allocation):
+ Add bfd_ prefix to elf32_arm_process_before_allocation
+ and elf32_arm_allocate_interworking_sections.
+ (gld_armelf_after_open): Add bfd_ prefix to
+ elf32_arm_get_bfd_for_interworking.
+
+Fri Aug 14 15:34:29 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.am: Rebuild dependencies.
+ * Makefile.in: Rebuild.
+
+ * ldgram.y: Include "ldctor.h".
+ (statement): Accept SORT around CONSTRUCTORS.
+ * ldctor.c: Include <ctype.h>.
+ (constructors_sorted): New global variable.
+ (ctor_prio, ctor_cmp): New static functions.
+ (ldctor_build_sets): Sort constructors if requested.
+ * ldctor.h (constructors_sorted): Declare.
+ * ldlang.c (print_statement): Print sorted CONSTRUCTORS
+ correctly.
+ * scripttempl/elf.sc: Add sort around CONSTRUCTORS.
+ * ld.texinfo (Output Section Keywords): Document SORT
+ (CONSTRUCTORS).
+
+Thu Aug 13 12:20:39 1998 Catherine Moore <clm@cygnus.com>
+
+ * emulparams/armelf.sh: Define TEMPLATE_NAME to armelf.
+ * scripttempl/elfarm.sc: Include .glue_7t and .glue7
+ sections.
+ * emultempl/armelf.em: New file.
+
+Thu Aug 13 12:52:45 1998 H.J. Lu <hjl@gnu.org>
+
+ * Makefile.am (ld.dvi): Use " instead of ' for MAKEINFO.
+ * Makefile.in: Rebuild.
+
+Tue Aug 11 16:17:01 1998 Catherine Moore <clm@cygnus.com>
+
+ * scripttempl/elfarm.sc: Change text start address
+ back to zero.
+
+Tue Aug 11 10:01:12 1998 Jeffrey A Law (law@cygnus.com)
+
+ * emulparms/mn10200.sh (MAX_PAGESIZE): Define to 1.
+ * emulparms/mn10300.sh (MAX_PAGESIZE): Define to 1.
+
+Sun Aug 9 20:31:27 1998 Catherine Moore <clm@cygnus.com>
+
+ * scripttempl/elfarm.sc: Set text start address to
+ 0x8000. Add __bss_end definition.
+
+Sat Aug 1 11:47:37 1998 Catherine Moore <clm@cygnus.com>
+
+ * scripttempl/elfarm.sc: New file.
+ * emulparams/armelf.sh: Set SCRIPT_NAME to elfarm.
+
+Fri Jul 31 15:56:16 1998 Catherine Moore <clm@cygnus.com>
+
+ * emulparams/armelf.sh: New file.
+ * configure.tgt: Recognize thumb-elf and arm-elf.
+ * Makefile.am (earmelf.o): New.
+ * Makefile.in: Rebuild.
+
+Fri Jul 24 12:00:57 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.am (install-exec-local): Don't remove the file before
+ checking whether $(bindir) == $(tooldir)/bin. From Maciej
+ W. Rozycki <macro@ds2.pg.gda.pl>.
+ * Makefile.in: Rebuild.
+
+ * configure.tgt: Recognize h8[35]00*-coff* as well as -hms*.
+
+Thu Jul 23 11:15:12 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * scripttempl/aout.sc: If ALIGNMENT is defined, use it to set
+ alignment of end symbol.
+ * scripttempl/elf.sc: Likewise.
+ * emulparams/sun4.sh (ALIGNMENT): Define.
+ * emulparams/elf32_sparc.sh (ALIGNMENT): Define.
+ * ldint.texinfo (emulation parameters): Document ALIGNMENT.
+
+ * lexsup.c (parse_args): Add missing break statement.
+
+ * ldlang.c (lang_gc_sections_1): Add default case to switch to
+ avoid warnings.
+
+Tue Jul 14 15:42:17 1998 Richard Henderson <rth@cygnus.com>
+
+ * configure.tgt (i?86-*-beos{pe,elf,}*): Recognize.
+ * Makefile.am (ei386beos.o): New.
+ * emulparams/i386beos.sh: New file.
+ * emultempl/beos.em, scripttempl/i386beos.sc: New file.
+
+Tue Jul 14 15:35:42 1998 Richard Henderson <rth@cygnus.com>
+
+ * lexsup.c: New option --version-exports-section.
+ * ld.h (struct args_type): Add version_exports_section.
+ * ldlang.c (lang_do_version_exports_section): New function.
+ (lang_process): Call it.
+
+Mon Jul 13 13:20:23 1998 Steve Chamberlain <sac@transmeta.com>
+
+ * ldlex.l: Accept ASSERT.
+ * ldgram.y (exp): Add ASSERT_K case.
+ * ldexp.h (node_type): Add etree_assert to node_class enum.
+ (etree_type): Add assert_s field.
+ (exp_assert): Declare.
+ * ldexp.c (exp_fold_tree): Handle etree_assert.
+ (exp_assert): New function.
+ (exp_print_tree): Handle etree_assert.
+ * ld.texinfo (Miscellaneous Commands): Document ASSERT.
+
+Wed Jul 8 14:03:12 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldgram.y: Change MAX to MAX_K and MIN to MIN_K, to avoid
+ conflicts with system header files. Change all uses.
+
+ * Makefile.am (MAINTAINERCLEANFILES): Define.
+ * Makefile.in: Rebuild.
+
+Tue Jul 7 18:03:22 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.am (ldver.texi): New target.
+ (ld.info, ld.dvi): Depend upon ldver.texi.
+ * ld.texinfo: Include ldver.texi. Mention version number on title
+ page and in top node.
+ * Makefile.in: Rebuild.
+
+Mon Jul 6 14:55:13 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.tgt (i[3456]86-*-solaris*): New target.
+
+Fri Jul 3 14:19:06 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlang.c (wild_section): Don't get an assertion failure if the
+ section is discarded.
+
+ * scripttempl/pe.sc: Use SORT to sort sections appropriately.
+ * emultempl/pe.em (sort_by_file_name): Remove.
+ (sort_by_section_name): Remove.
+ (sort_sections_1, sort_sections): Remove.
+ (gld_${EMULATION_NAME}_before_allocation): Don't call
+ sort_sections.
+ (hold_section, hold_section_name): New static variables.
+ (hold_use, hold_text, hold_rdata, hold_data, hold_bss): Likewise.
+ (gld_${EMULATION_NAME}_place_orphan): Rewrite. Look for a good
+ place to put the section. Align the section. Sort the input
+ sections by name.
+ (gld_${EMULATION_NAME}_place_section): New static function.
+
+ * ldlang.c (wild_sort): When sorting by file name, sort by archive
+ name first.
+
+ * emultempl/pe.em (set_pe_subsystem): Don't call
+ ldlang_add_undef.
+ (gld_${EMULATION_NAME}_after_parse): New static function.
+ (ld_${EMULATION_NAME}_emulation): Use new after_parse function
+ rather than after_parse_default.
+
+ * ldgram.y (extern_name_list): Do not require symbols to be
+ separated by commas.
+ (ifile_p1): Add EXTERN.
+ * ldlex.l: Accept EXTERN in BOTH and SCRIPT mode as well as MRI
+ mode.
+ * ld.texinfo (Options): Mention that EXTERN is equivalent to -u.
+ (Miscellaneous Commands): Document EXTERN.
+
+Wed Jul 1 19:40:34 1998 Richard Henderson <rth@cygnus.com>
+
+ * ld.h (args_type): Add gc_sections.
+ * ldgram.y (ldgram_had_keep, KEEP): New.
+ (input_section_spec_no_keep): Rename from old input_section_spec.
+ (input_section_spec): New. Recognize KEEP.
+ * ldlang.c (wild_section): Handle keep sections.
+ (lang_gc_wild_section, lang_gc_wild_file, lang_gc_wild): New.
+ (lang_gc_sections_1, lang_gc_sections): New.
+ (lang_process): Invoke lang_gc_sections.
+ (lang_add_wild): Add keep argument. Update all callers.
+ * ldlang.h (lang_wild_statement_struct): Add keep_sections.
+ * ldlex.l (KEEP): Match it.
+ * ldmain.c (main): Error on -r and --gc-sections.
+ * lexsup.c: Add --gc-sections.
+
+ * scripttempl/elf.sc: Merge .text.* etc sections appropriately.
+ Mark startup sections with KEEP.
+ * scripttempl/elfppc.sc: Likewise.
+
+ * ld.texinfo: Update for --gc-sections and KEEP.
+
+Wed Jul 1 15:21:20 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ From Peter Jordan <pjordan@chla.usc.edu>:
+ * scripttempl/i386go32.sc: Correct constructor handling for -u.
+
+Tue Jun 23 15:17:27 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.am (install-data-local): Make ldscripts subdirectory.
+ * Makefile.in: Rebuild.
+
+Tue Jun 23 15:17:04 1998 Mike Stump <mrs@wrs.com>
+
+ * Makefile.am (install-exec-local): Don't let EXEEXT interfere
+ with the program transform name.
+ * Makefile.in: Rebuild.
+
+Sun Jun 21 23:55:16 1998 Jeffrey A Law (law@cygnus.com)
+
+ * ld.texinfo: Note that -relax may make symbolic debugging
+ impossible on some platforms.
+
+Tue Jun 16 12:51:13 1998 Geoff Keating <geoffk@ozemail.com.au>
+
+ * Makefile.am (Makefile): Remove target.
+ (config.status): New target.
+ * Makefile.in: Rebuild.
+
+ * configure.host (powerpc*-*-linux-gnu*): New host.
+
+Fri Jun 12 17:38:07 1998 Doug Evans <devans@seba.cygnus.com>
+
+ * scripttempl/elf.sc (INPUT_FILES): Optional INPUT spec.
+
+ * emulparams/m32relf.sh (OTHER_RELOCATING_SECTIONS): Change top of
+ stack to 8MB.
+
+Fri Jun 12 19:33:17 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.am (HFILES): Remove config.h.
+ (EMULATION_OFILES, POTFILES): Move patch of May 14 from
+ Makefile.in to Makefile.am.
+ (earmcoff.c): Depend upon armcoff.em, not generic.em.
+ * po/Make-in (all-yes): Correct misspelling in $(PACKAGE).
+ ($(srcdir)/$(PACKAGE).pot): Pass -C to $(XGETTEXT).
+ * Makefile.in, po/POTFILES.in, po/ld.pot: Rebuild.
+
+Fri Jun 12 13:43:17 1998 Tom Tromey <tromey@cygnus.com>
+
+ * po/Make-in (all-yes): If maintainer mode, depend on .pot file.
+ ($(PACKAGE).pot): Unconditionally depend on POTFILES.
+
+Tue Jun 9 09:36:48 1998 Nick Clifton <nickc@cygnus.com>
+
+ * ldlang.c (lang_finish): Add CONST type modifier to declaration
+ of 'send'.
+
+Fri Jun 5 18:19:59 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/aix.em (gld${EMULATION_NAME}_before_parse): Set
+ config.has_shared to true.
+ * emultempl/linux.em (gld${EMULATION_NAME}_before_parse):
+ Likewise.
+ * emultempl/sunos.em (gld${EMULATION_NAME}_before_parse):
+ Likewise.
+
+Tue Jun 2 12:55:03 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlang.c (lang_finish): If the entry symbol is not found, try
+ parsing it as a number.
+ * ld.texinfo (Options): Document this.
+
+Mon Jun 1 14:01:20 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld.texinfo (Input Section Wildcards): Document SORT keyword.
+
+Mon May 18 12:42:53 1998 Doug Evans <devans@canuck.cygnus.com>
+
+ * ld.h (ld_config_type): New member has_shared.
+ * ldmain.c (main): Initialize it.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_before_parse): Set it.
+ * lexsup.c (parse_args): Treat -shared as error if not supported.
+
+Mon May 18 13:14:43 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ From Jason Merrill <jason@cygnus.com>:
+ * ldlang.c (wild_sort): Correct order of sort.
+ * scripttempl/elf.sc: Put *crtbegin.o before other .ctors and
+ .dtors.
+ * scripttempl/elfd10v.sc: Likewise.
+ * scripttempl/elfd30v.sc: Likewise.
+ * scripttempl/elfppc.sc: Likewise.
+
+Fri May 15 00:22:35 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlex.l: Recognize keyword SORT.
+ * ldgram.y (current_file): Change to struct wildcard_spec.
+ (%union): Add new fields cname and wildcard.
+ (wildcard_name, wildcard_spec): New nonterminals.
+ (file_NAME_list): Use wildcard_spec.
+ (input_section_spec): Change current_file usage.
+ * ld.h (struct wildcard_spec): Define.
+ * ldlang.h (lang_wild_statement_struct): Add new fields
+ sections_sorted and filenames_sorted.
+ (lang_add_wild): Update declaration.
+ * ldlang.c (wild_sort): New static function.
+ (wild_section): Use wild_sort.
+ (print_wild_statement): Print sorting information.
+ (lang_add_wild): Add new parameters sections_sorted and
+ filenames_sorted. Change all callers.
+ * mri.c (mri_draw_tree): Update calls to lang_add_wild.
+ * scripttempl/elf.sc: Sort .ctors.* and .dtors.* by section name.
+ * scripttempl/elfd10v.sc: Likewise.
+ * scripttempl/elfd30v.sc: Likewise.
+ * scripttempl/elfppc.sc: Likewise.
+
+Thu May 14 18:39:16 1998 Richard Henderson <rth@cygnus.com>
+
+ * emulparams/m32relf.sh (TEMPLATE_NAME): Define.
+
+Thu May 14 14:51:24 1998 Nick Clifton <nickc@cygnus.com>
+
+ * ldemul.h: Add new prototype: ldemul_list_emulation_options.
+ (ld_emulation_xfer_struct): Add new field: list_options.
+ * ldemul.c (ldemul_list_options): New function. Call the
+ list_options field of the ld_emulation_xfer_struct for each
+ supported emulation, if such a function is present.
+ * lexsup.c (help): Call ldemul_list_emulation_options.
+ * emultempl/pe.em (gld_<>_list_options): New function. Describe
+ the pe emulation specific command line options.
+ * emultempl/armcoff.em (gld<>_list_options): New function.
+ Describe the armcoff emulation specific command line options.
+
+ * emultempl/pe.em: Add a new command line option:
+ --support-old-code.
+ * emultempl/armcoff.em: Ditto.
+ * ld.texinfo: Document the --support-old-code option.
+
+ * Makefile.in: Add emulation files for POTFILES.in target.
+ * emultempl/pe.em: Internationalise suitable strings.
+ * emultempl/armcoff.em: Internationalise suitable strings.
+ * po/POTFILES.in: Rebuilt.
+
+Sun May 10 22:36:30 1998 Jeffrey A Law (law@cygnus.com)
+
+ * po/Make-in (install-info): New target.
+
+Tue Apr 28 19:18:30 1998 Tom Tromey <tromey@cygnus.com>
+
+ * ldmain.c (main): Conditionally call setlocale.
+ * ld.h: Include <locale.h> if HAVE_LOCALE_H.
+ (LC_MESSAGES): Now can be defined even when ENABLE_NLS.
+
+Mon Apr 27 11:56:21 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.in: Change version number to 2.9.4
+ * configure: Rebuild.
+
+ * ld.texinfo (Options) [-rpath-link]: Mention ld.so.conf.
+
+ Based on patch from H.J. Lu <hjl@gnu.org>:
+ * emultempl/elf32.em (global_vercheck_needed): New file static
+ variable.
+ (global_vercheck_failed): New file static variable.
+ (gld${EMULATION_NAME}_after_open): Check for shared libraries
+ twice, once with force set to 0 and once with it set to 1.
+ (gld${EMULATION_NAME}_check_ld_so_conf): Add force parameter.
+ Change all callers.
+ (gld${EMULATION_NAME}_search_needed): Likewise.
+ (gld${EMULATION_NAME}_try_needed): Likewise. If not force, check
+ whether the libraries needs any incompatible versions.
+ (gld${EMULATION_NAME}_vercheck): New static function.
+
+Wed Apr 22 16:01:35 1998 Tom Tromey <tromey@cygnus.com>
+
+ * po/Make-in (MKINSTALLDIRS): Don't look in $(top_srcdir).
+
+Wed Apr 22 12:40:56 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.am (check-DEJAGNU): Add $(INTLLIBS) to LIBIBERTY when
+ invoking runtest.
+ * Makefile.in: Rebuild.
+
+ * lexsup.c (parse_args): Change -l options into --library options
+ to avoid confusion between -li and -library.
+
+ * ld.texinfo (MEMORY): Clarify use of >REGION.
+
+Tue Apr 21 23:12:40 1998 Tom Tromey <tromey@scribbles.cygnus.com>
+
+ * Many files: Added gettext invocations around user-visible
+ strings.
+ * ld.h: Added gettext-related includes and defines.
+ * ldmain.c: Call setlocale, bindtextdomain, textdomain.
+ * acconfig.h (ENABLE_NLS, HAVE_CATGETS, HAVE_GETTEXT, HAVE_STPCPY,
+ HAVE_LC_MESSAGES): Define.
+ * configure.in: Call CY_GNU_GETTEXT. Create po/Makefile.in and
+ po/Makefile. Use AM_PROG_LEX.
+ (TDIRS): AC_SUBST early on, to avoid having value split when it
+ happens to cross line 90 of the generated sed script.
+ * Makefile.am (SUBDIRS): New macro.
+ (POTFILES): Likewise.
+ (po/POTFILES.in): New target.
+ (ld_new_LDADD): Added INTLLIBS.
+ (ld_new_DEPENDENCIES): Added INTLDEPS.
+ * po/Make-in, po/POTFILES.in, po/ld.pot: New files.
+
+Tue Apr 21 23:07:07 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld.texinfo (Simple Example): Rewrite a few things as suggested
+ by Nick Clifton <nickc@cygnus.com>.
+ (PROVIDE): Likewise.
+
+Tue Apr 21 09:55:06 1998 Nick Clifton <nickc@cygnus.com>
+
+ * emultempl/pe.em: Rename external arm interworking functions
+ to conform to BFD naming conventions. Add code to _after_open()
+ function to obtain a bfd for use by the interworking code.
+
+ * emultempl/armcoff.em: Rename external arm interworking functions
+ to conform to BFD naming conventions. Add new _after_open()
+ function to obtain a bfd for use by the interworking code.
+
+Sun Apr 19 19:23:09 1998 Richard Henderson <rth@cygnus.com>
+
+ * ldlang.c (lang_size_sections) [case lang_assignment_statement_enum]:
+ Update dot and the default memory section even when relaxing.
+
+Sat Apr 18 18:41:12 1998 Richard Henderson <rth@cygnus.com>
+
+ * ldlang.c (lang_one_common): Manipulate the section's cooked size
+ rather than its raw size.
+
+Tue Apr 7 13:35:29 1998 H.J. Lu <hjl@gnu.org>
+
+ * configure.in (TESTBFDLIB): New. Defined and substituted.
+ * Makefile.am (TESTBFDLIB): Changed to @TESTBFDLIB@.
+ * configure, Makefile.in: Rebuild.
+
+Mon Apr 6 15:33:39 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.am (ld.info): Invoke makeinfo with -I options directly
+ rather than relying on default rule. Don't depend upon
+ bfdsumm.texi.
+ (ld.dvi): Likewise.
+ (bfdsumm.texi): Remove target.
+ (CLEANFILES): Take bfdsumm.texi out of value.
+ * Makefile.in: Rebuild.
+
+Sun Apr 5 13:07:57 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * scripttempl/pe.sc: Use shell variables to avoid depending upon
+ how $ is handled when expanding a shell substitution.
+
+Fri Apr 3 00:56:50 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.am (MOSTLYCLEANFILES): Add ld.log and ld.sum.
+ (DISTCLEANFILES): Add site.exp and site.bak.
+ * Makefile.in: Rebuild.
+
+ * configure.in: Put the tdirs in a file and use AC_SUBST_FILE,
+ rather than in a shell variable and using AC_SUBST.
+ * Makefile.am (DISTCLEANFILES): Remove ldscripts. Add tdirs.
+ (distclean-local): New target.
+ * configure, Makefile.in: Rebuild.
+
+ * ld.texinfo: Completely rewrite linker script documentation.
+
+Mon Mar 30 12:47:33 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.in: Set version to 2.9.1.
+ * configure: Rebuild.
+
+ * Branched binutils 2.9.
+
+Sat Mar 28 16:48:19 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.am (MOSTLYCLEANFILES): Remove tmpdir.
+ (mostlyclean-local): New target to remove tmpdir.
+ * Makefile.in: Rebuild.
+
+ Fix some gcc -Wall warnings:
+ * ldcref.c (output_cref): Add casts to avoid warnings.
+ * ldfile.c (ldfile_add_arch): Likewise.
+ * ldlang.c (lang_leave_overlay_section): Likewise.
+ * lexsup.c (OPTION_COUNT): Likewise.
+ (parse_args): Likewise.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan):
+ Likewise.
+ * emultempl/sunos.em (gld${EMULATION_NAME}_search_dir): Likewise.
+ * ldlang.c (lang_check): Initialize variables to avoid warnings.
+ * ldwrite.c (build_link_order): Likewise.
+ * emultempl/sunos.em (gld${EMULATION_NAME}_find_so): Likewise.
+ * emultempl/armcoff.em (gld${EMULATION_NAME}_before_allocation):
+ Remove unused variables.
+
+ * Makefile.am (MOSTLYCLEANFILES): Correct name (was
+ MOSTCLEANFILES).
+ * Makefile.in: Rebuild.
+
+Fri Mar 27 16:39:25 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_before_allocation): Put
+ ARM code inside ifdef TARGET_IS_armpe.
+
+Wed Mar 25 11:34:13 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ Based on patch from H.J. Lu <hjl@gnu.org>:
+ * Makefile.am (LDDISTSTUFF): New variable.
+ (diststuff): New target.
+ * Makefile.in: Rebuild.
+
+ * scripttempl/pe.sc: Only include .idata\$[0-7] in .idata when
+ relocating.
+
+Tue Mar 24 15:59:29 1998 Nick Clifton <nickc@cygnus.com>
+
+ * scripttempl/pe.sc (.text): Add .glue_7 and .glue_7t sections to
+ hold Arm/Thumb stubs.
+
+ * emultempl/pe.em (gld_pe_before_allocation): Call
+ arm_process_before_allocation (for ARM/Thumb targets) in order to
+ gather interworking stb information.
+
+Mon Mar 23 18:54:15 1998 Joel Sherrill <joel@OARcorp.com>
+
+ * configure.tgt: (sh*-*-rtems*): Switched from ELF to COFF.
+
+Fri Mar 20 19:17:13 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * aclocal.m4, configure: Rebuild with libtool 1.2.
+
+Thu Mar 19 14:54:45 1998 Geoffrey Noer <noer@cygnus.com>
+
+ * scripttempl/pe.sc: The Cygwin32 library uses a .data$nocopy
+ section to avoid copying certain data on fork. The linker used to
+ include this between __data_start__ and __data_end__, but that
+ breaks building the cygwin32 dll. The fix is to rename the
+ section ".data_cygwin_nocopy" and explictly include it after
+ __data_end__.
+
+Wed Mar 18 09:42:24 1998 Nick Clifton <nickc@cygnus.com>
+
+ * configure.tgt (targ_extra_emuls): Add thumb-pe target.
+
+Sun Mar 8 23:34:14 1998 Stan Cox <scox@equinox.cygnus.com>
+
+ * configure.tgt (sparclite*-*-elf): Added.
+
+Mon Mar 2 19:24:08 1998 Michael Meissner <meissner@cygnus.com>
+
+ * ldlang.c (lang_size_sections): If the default memory region is
+ *default*, see if there is a memory region that could be used.
+
+Thu Feb 26 17:09:53 1998 Michael Meissner <meissner@cygnus.com>
+
+ * scripttempl/elfd30v.sc: Add support for .eit_v section and put
+ it at 0xfffff020.
+ * emulparams/d30v{elf,_o,_e}.sh: Ditto.
+
+Mon Feb 23 17:46:51 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/pe.em (sort_sections): Permit the wildcard to include
+ a trailing '*' when sorting grouped sections.
+ * scripttempl/pe.sc: Include grouped sections using NAME\$*. Only
+ include them when relocating.
+
+Wed Feb 18 23:39:46 1998 Richard Henderson <rth@cygnus.com>
+
+ * Makefile.am (install-exec-local): Install properly when ln
+ fails or tooldir == prefix.
+
+Fri Feb 13 15:24:06 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.am (AUTOMAKE_OPTIONS): Define.
+ * configure, Makefile.in, aclocal.m4: Rebuild with automake 1.2e.
+
+Thu Feb 12 14:10:44 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * scripttempl/elf.sc: Align the _end symbol according to the ELF
+ format size. From Gordon W. Ross <gwr@mc.com>.
+
+ NetBSD patches from Gordon W. Ross <gwr@mc.com>:
+ * configure.host (alpha*-*-netbsd*): New host.
+ * configure.tgt (alpha*-*-netbsd*, powerpc-*-netbsd*): New
+ targets.
+
+ * lexsup.c (help): Update bug-gnu-utils address.
+ * ld.texinfo (Bug Reporting): Likewise.
+
+Tue Feb 10 18:05:56 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * ldlang.c (lang_size_sections): Warn if some memory regions were
+ defined, but a loadable section is going into the default memory
+ region.
+
+Tue Feb 10 16:17:20 1998 H.J. Lu <hjl@gnu.org>
+
+ * ldlex.l (V_IDENTIFIER): Allow '.' as symbol prefix.
+
+Tue Feb 10 15:09:45 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.am (Makefile): Add target, for dependencies on
+ configure.host and configure.tgt.
+ * configure.host, configure.tgt: Change -linux* to -linux-gnu*.
+ * Makefile.in: Rebuild.
+
+Mon Feb 9 13:44:40 1998 Andrew Cagney <cagney@b1.cygnus.com>
+
+ * scripttempl/elfd10v.sc (.stack): Move stack to 0x00..7FFE.
+
+ * emulparams/d10velf.sh (READONLY_START_ADDR): Read only section
+ moved to 0x00.....4.
+
+Sat Feb 7 15:41:26 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure, aclocal.m4: Rebuild with new libtool.
+
+Thu Feb 5 12:16:11 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * scripttempl/pe.sc: Remove ${RELOCATING-0} from all sections.
+ From Thomas de Lellis <tdel@wrs.com>.
+
+ * configure, Makefile.in, aclocal.m4: Rebuild with new libtool.
+
+Wed Feb 4 13:02:32 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.am (ld_new_LDADD): Remove @LEXLIB@.
+ * Makefile.in: Rebuild.
+
+Mon Feb 2 19:34:54 1998 Steve Haworth <steve@pm.cse.rmit.EDU.AU>
+
+ Add tms320c30 support:
+ * configure.tgt (tic30-*-*aout*, tic30-*-*coff*): New targets.
+ * emulparams/tic30aout.sh: New file.
+ * emulparams/tic30coff.sh: New file.
+ * scripttempl/tic30aout.sc: New file.
+ * scripttempl/tic30coff.sc: New file.
+ * Makefile.am (ALL_EMULATIONS): Add etic30aout.o and
+ etic30coff.o.
+ (etic30aout.c, etic30coff.c): New targets.
+ * Makefile.in: Rebuild.
+
+Mon Feb 2 14:10:59 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure.host: Correct HOSTING_CRT0 in alpha*-*-linux* case to
+ accept either ld.so or ld-linux.so.
+
+Fri Jan 30 19:16:28 1998 Doug Evans <devans@canuck.cygnus.com>
+
+ * Makefile.am ({CC,CXX}_FOR_TARGET): Change program_transform_name
+ to transform.
+ * Makefile.in: Regenerate.
+
+Fri Jan 30 19:15:17 1998 Geoff Keating <geoffk@ozemail.com.au>
+
+ * scripttempl/elfppc.sc: Put .dynsbss in .sbss.
+
+Fri Jan 30 11:43:49 1998 H.J. Lu <hjl@gnu.ai.mit.edu>
+
+ * Makefile.am (eelf32bsmip.c, eelf32lsmip.c): New targets.
+ * Makefile.in: Rebuild.
+
+Thu Jan 29 16:04:21 1998 Mumit Khan <khan@xraylith.wisc.edu>
+
+ * ldfile.c (slash): Set to backslash if _WIN32 but not
+ __CYGWIN32__.
+ (ldfile_open_file_search): If __MSDOS__ or _WIN32, accept a
+ leading backslash or a leading x: as an absolute path.
+ (ldfile_find_command_file): Use slash rather than / when
+ generating name to try.
+ * lexsup.c (PATH_SEPARATOR): Define.
+ (set_default_dirlist): Use PATH_SEPARATOR rather than ':'.
+
+Wed Jan 28 14:06:30 1998 Richard Henderson <rth@cygnus.com>
+
+ * emulparams/elf64_sparc.sh (ELFSIZE): 64
+ (TEXT_START_ADDR): Round off, since SIZEOF_HEADERS is added later.
+ (DATA_PLT): Needed by v9 abi.
+
+Wed Jan 28 16:37:27 1998 J.J. van der Heijden <J.J.vanderHeijden@student.utwente.nl>
+
+ * configure.tgt (i[3456]86-*-mingw32*): New entry.
+
+Wed Jan 28 15:51:58 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * scripttempl/elf.sc: Only include linkonce sections in final
+ sections when relocating.
+
+Wed Jan 28 14:10:01 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld.texinfo (Options): Add a brief description of the types of
+ information included in a link map.
+
+ * ld.texinfo (Options): Mention LDEMULATION in description of -m.
+ (Environment): Mention LDEMULATION.
+
+ * ld.texinfo (Options): Clarify --export-dynamic a bit.
+
+Thu Jan 22 16:07:23 1998 Richard Henderson <rth@cygnus.com>
+
+ * ldlex.l (<SCRIPT>{WILDCHAR}*): Take care for the comments this
+ pattern could match.
+
+Wed Jan 21 22:26:46 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_set_symbols): When doing
+ a relocateable link, set the image base to 0, and don't define the
+ various symbols.
+ * emulparams/i386pe.sh (RELOCATEABLE_OUTPUT_FORMAT): Define.
+ * scripttempl/pe.sc: Swap the .data and .bss sections so that
+ .data comes first. If doing a relocateable link, use
+ RELOCATEABLE_OUTPUT_FORMAT if it is defined, and start the
+ sections at 0, and don't define any symbols.
+
+ * ldlang.c (lang_memory_default): Correct parenthisization of
+ expression.
+
+Wed Jan 21 21:20:32 1998 Manfred Hollstein <manfred@s-direktnet.de>
+
+ * emultempl/sunos.em: Don't include sys/types.h and sys/stat.h
+ here; they are included already via sysdep.h.
+
+Tue Jan 6 13:40:02 1998 Richard Henderson <rth@cygnus.com>
+
+ * scripttempl/i960.sc: Don't explicitly set .data and .bss start.
+
+Fri Jan 2 20:15:37 1998 Michael Meissner <meissner@cygnus.com>
+
+ * ldgram.y (attributes_opt): Pass region pointer to
+ lang_set_flags, not &region->flags.
+
+ * ldlang.c (lang_memory_default): New function to figure out a
+ default memory region for a section if it was not specified.
+ (lang_memory_region_lookup): Zero flags, not_flags field.
+ (lang_map{,_flags}): Print attribute flags in memory map.
+ (lang_size_sections): Call lang_memory_default to get default
+ memory region.
+ (lang_set_flags): Implement attribute flags for real. Take new
+ argument to give the flags we are to skip for this region.
+
+ * ldlang.h (memory_region_struct): Add not_flags field, make both
+ flags fields flagword type.
+ (lang_output_section_state): Make flags field flagword type.
+ (lang_set_flags): Update prototype to match new calling sequence.
+ (lang_memory_region_default): Add prototype.
+
+ * emulparams/d30v{_e,_o,elf}.sh ({TEXT,DATA,EMEM}_DEF_SECTION):
+ Define whether or not the region gets default sections, and if so,
+ what sections.
+
+ * scripttempl/elfd30v.sc (MEMORY): Set up which of the regions get
+ default sections.
+
+Thu Jan 1 22:58:04 1998 Michael Meissner <meissner@cygnus.com>
+
+ * scripttempl/elfd30v.sc (.eh_frame): Link into the data section.
+
+Thu Jan 1 18:04:51 1998 Jeffrey A Law (law@cygnus.com)
+
+ * scripttempl/h8300h.sc: Fix typo.
+ * scripttempl/h8300s.sc: Likewise.
+
+For older changes see ChangeLog-9197
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/binutils-2.21/ld/MAINTAINERS b/binutils-2.21/ld/MAINTAINERS
new file mode 100644
index 0000000..d59a3bd
--- /dev/null
+++ b/binutils-2.21/ld/MAINTAINERS
@@ -0,0 +1 @@
+See ../binutils/MAINTAINERS
diff --git a/binutils-2.21/ld/Makefile.am b/binutils-2.21/ld/Makefile.am
new file mode 100644
index 0000000..c0497cf
--- /dev/null
+++ b/binutils-2.21/ld/Makefile.am
@@ -0,0 +1,2083 @@
+## Process this file with automake to generate Makefile.in
+
+AUTOMAKE_OPTIONS = dejagnu no-texinfo.tex no-dist foreign
+ACLOCAL_AMFLAGS = -I .. -I ../config -I ../bfd
+TEXINFO_TEX = $(top_srcdir)/../texinfo/texinfo.tex
+
+SUBDIRS = po
+
+tooldir = $(exec_prefix)/$(target_alias)
+
+YACC = `if [ -f ../bison/bison ]; then echo ../bison/bison -y -L$(srcdir)/../bison/; else echo @YACC@; fi`
+YFLAGS = -d
+LEX = `if [ -f ../flex/flex ]; then echo ../flex/flex; else echo @LEX@; fi`
+
+# Automake 1.10+ disables lex and yacc output file regeneration if
+# maintainer mode is disabled. Avoid this.
+am__skiplex =
+am__skipyacc =
+
+WARN_CFLAGS = @WARN_CFLAGS@
+NO_WERROR = @NO_WERROR@
+AM_CFLAGS = $(WARN_CFLAGS)
+
+# Conditionally enable the plugin interface.
+if ENABLE_PLUGINS
+PLUGIN_C = plugin.c
+PLUGIN_H = plugin.h
+PLUGIN_OBJECT = plugin.@OBJEXT@
+PLUGIN_CFLAGS = -DENABLE_PLUGINS
+else
+PLUGIN_C =
+PLUGIN_H =
+PLUGIN_OBJECT =
+PLUGIN_CFLAGS =
+endif
+
+# We put the scripts in the directory $(scriptdir)/ldscripts.
+# We can't put the scripts in $(datadir) because the SEARCH_DIR
+# directives need to be different for native and cross linkers.
+scriptdir = $(tooldir)/lib
+
+EMUL = @EMUL@
+EMULATION_OFILES = @EMULATION_OFILES@
+EMUL_EXTRA_OFILES = @EMUL_EXTRA_OFILES@
+
+# Search path to override the default search path for -lfoo libraries.
+# If LIB_PATH is empty, the ones in the script (if any) are left alone.
+# (The default is usually /lib:/usr/lib:/usr/local/lib, unless building
+# a cross-linker, in which case the default is empty. See genscripts.sh.)
+# Otherwise, they are replaced with the ones given in LIB_PATH,
+# which may have the form: LIB_PATH=/lib:/usr/local/lib. This can be set
+# when the linker is configured via the --with-lib-path configure switch.
+LIB_PATH = @LIB_PATH@
+
+BASEDIR = $(srcdir)/..
+BFDDIR = $(BASEDIR)/bfd
+INCDIR = $(BASEDIR)/include
+
+# What version of the manual to build
+DOCVER = gen
+
+# Options to extract the man page from ld.texinfo
+MANCONF = -Dman
+
+TEXI2POD = perl $(BASEDIR)/etc/texi2pod.pl $(AM_MAKEINFOFLAGS)
+
+POD2MAN = pod2man --center="GNU Development Tools" \
+ --release="binutils-$(VERSION)" --section=1 --date=" "
+
+#stuff for self hosting (can be overridden in config file).
+HOSTING_CRT0 = @HOSTING_CRT0@
+HOSTING_LIBS = @HOSTING_LIBS@
+HOSTING_EMU = -m $(EMUL)
+
+# Setup the testing framework, if you have one
+EXPECT = expect
+RUNTEST = runtest
+RUNTESTFLAGS =
+
+CC_FOR_TARGET = ` \
+ if [ -f $$r/../gcc/xgcc ] ; then \
+ if [ -f $$r/../newlib/Makefile ] ; then \
+ echo $$r/../gcc/xgcc -B$$r/../gcc/ -idirafter $$r/../newlib/targ-include -idirafter $${srcroot}/../newlib/libc/include -nostdinc; \
+ else \
+ echo $$r/../gcc/xgcc -B$$r/../gcc/; \
+ fi; \
+ else \
+ if [ "@host@" = "@target@" ] ; then \
+ echo $(CC); \
+ else \
+ echo gcc | sed '$(transform)'; \
+ fi; \
+ fi`
+
+CXX = g++
+CXX_FOR_TARGET = ` \
+ if [ -f $$r/../gcc/g++ ] ; then \
+ if [ -f $$r/../newlib/Makefile ] ; then \
+ echo $$r/../gcc/g++ -B$$r/../gcc/ -idirafter $$r/../newlib/targ-include -idirafter $${srcroot}/../newlib/libc/include -nostdinc; \
+ else \
+ echo $$r/../gcc/g++ -B$$r/../gcc/; \
+ fi; \
+ else \
+ if [ "@host@" = "@target@" ] ; then \
+ echo $(CXX); \
+ else \
+ echo g++ | sed '$(transform)'; \
+ fi; \
+ fi`
+
+transform = s/^ld-new$$/$(installed_linker)/;@program_transform_name@
+bin_PROGRAMS = ld-new
+info_TEXINFOS = ld.texinfo
+ld_TEXINFOS = configdoc.texi
+noinst_TEXINFOS = ldint.texinfo
+man_MANS = ld.1
+
+AM_MAKEINFOFLAGS = -I $(srcdir) -I $(BFDDIR)/doc -I ../bfd/doc \
+ -I $(top_srcdir)/../libiberty
+TEXI2DVI = texi2dvi -I $(srcdir) -I $(BFDDIR)/doc -I ../bfd/doc \
+ -I $(top_srcdir)/../libiberty
+
+AM_CPPFLAGS = -I. -I$(srcdir) -I../bfd -I$(BFDDIR) -I$(INCDIR) \
+ @INCINTL@ $(HDEFINES) $(CFLAGS) $(PLUGIN_CFLAGS) \
+ -DLOCALEDIR="\"$(datadir)/locale\""
+
+BFDLIB = ../bfd/libbfd.la
+LIBIBERTY = ../libiberty/libiberty.a
+
+ALL_EMULATION_SOURCES = \
+ eaixppc.c \
+ eaixrs6.c \
+ ealpha.c \
+ ealphavms.c \
+ earcelf.c \
+ earm_epoc_pe.c \
+ earm_wince_pe.c \
+ earmaoutb.c \
+ earmaoutl.c \
+ earmcoff.c \
+ earmelf.c \
+ earmelfb.c \
+ earmelf_fbsd.c \
+ earmelf_linux.c \
+ earmelf_linux_eabi.c \
+ earmelfb_linux.c \
+ earmelfb_linux_eabi.c \
+ earmelf_nbsd.c \
+ earmelfb_nbsd.c \
+ earmelf_vxworks.c \
+ earmnto.c \
+ earmnbsd.c \
+ earmpe.c \
+ earmsymbian.c \
+ eavr2.c \
+ eavr1.c \
+ eavr25.c \
+ eavr3.c \
+ eavr31.c \
+ eavr35.c \
+ eavr4.c \
+ eavr5.c \
+ eavr51.c \
+ eavr6.c \
+ ecoff_i860.c \
+ ecoff_sparc.c \
+ eelf32_spu.c \
+ ecrisaout.c \
+ ecriself.c \
+ ecrislinux.c \
+ ed10velf.c \
+ ed30v_e.c \
+ ed30v_o.c \
+ ed30velf.c \
+ edelta68.c \
+ eelf32_dlx.c \
+ eelf32_i960.c \
+ eelf32_i860.c \
+ eelf32_sparc.c \
+ eelf32_sparc_sol2.c \
+ eelf32_sparc_vxworks.c \
+ eelf32_tic6x_be.c \
+ eelf32_tic6x_le.c \
+ eelf32b4300.c \
+ eelf32bfin.c \
+ eelf32bfinfd.c \
+ eelf32cr16.c \
+ eelf32cr16c.c \
+ eelf32bmip.c \
+ eelf32bmipn32.c \
+ eelf32btsmip.c \
+ eelf32crx.c \
+ eelf32btsmipn32.c \
+ eelf32ltsmip.c \
+ eelf32ltsmipn32.c \
+ eelf32ebmip.c \
+ eelf32ebmipvxworks.c \
+ eelf32elmip.c \
+ eelf32elmipvxworks.c \
+ eelf32fr30.c \
+ eelf32frv.c \
+ eelf32moxie.c \
+ eelf32i370.c \
+ eelf32ip2k.c \
+ eelf32iq2000.c \
+ eelf32iq10.c \
+ eelf32lm32.c \
+ eelf32lm32fd.c \
+ eelf32l4300.c \
+ eelf32lmip.c \
+ eelf32lppc.c \
+ eelf32lppcnto.c \
+ eelf32lppcsim.c \
+ eelf32m32c.c \
+ eelf32mcore.c \
+ eelf32mep.c \
+ eelf32mb_linux.c \
+ eelf32microblaze.c \
+ eelf32mipswindiss.c \
+ eelf32mt.c \
+ eelf32openrisc.c \
+ eelf32ppc.c \
+ eelf32ppc_fbsd.c \
+ eelf32ppclinux.c \
+ eelf32ppcnto.c \
+ eelf32ppcsim.c \
+ eelf32ppcwindiss.c \
+ eelf32ppcvxworks.c \
+ eelf32rx.c \
+ eelf32vax.c \
+ eelf32xc16x.c \
+ eelf32xc16xl.c \
+ eelf32xc16xs.c \
+ eelf32xstormy16.c \
+ eelf32xtensa.c \
+ eelf_i386.c \
+ eelf_i386_be.c \
+ eelf_i386_chaos.c \
+ eelf_i386_fbsd.c \
+ eelf_i386_ldso.c \
+ eelf_i386_sol2.c \
+ eelf_i386_vxworks.c \
+ eelf_s390.c \
+ egld960.c \
+ egld960coff.c \
+ eh8300.c \
+ eh8300h.c \
+ eh8300s.c \
+ eh8300elf.c \
+ eh8300hn.c \
+ eh8300sn.c \
+ eh8300sx.c \
+ eh8300helf.c \
+ eh8300self.c \
+ eh8300hnelf.c \
+ eh8300snelf.c \
+ eh8300sxelf.c \
+ eh8300sxn.c \
+ eh8300sxnelf.c \
+ eh8500.c \
+ eh8500b.c \
+ eh8500c.c \
+ eh8500m.c \
+ eh8500s.c \
+ ehp300bsd.c \
+ ehp3hpux.c \
+ ehppaelf.c \
+ ehppalinux.c \
+ ehppanbsd.c \
+ ehppaobsd.c \
+ ei386aout.c \
+ ei386beos.c \
+ ei386bsd.c \
+ ei386coff.c \
+ ei386go32.c \
+ ei386linux.c \
+ ei386lynx.c \
+ ei386mach.c \
+ ei386moss.c \
+ ei386msdos.c \
+ ei386nbsd.c \
+ ei386nto.c \
+ ei386nw.c \
+ ei386pe.c \
+ ei386pe_posix.c \
+ ei386pep.c \
+ elnk960.c \
+ em32relf.c \
+ em32rlelf.c \
+ em32relf_linux.c \
+ em32rlelf_linux.c \
+ em68hc11elf.c \
+ em68hc11elfb.c \
+ em68hc12elf.c \
+ em68hc12elfb.c \
+ em68k4knbsd.c \
+ em68kaout.c \
+ em68kaux.c \
+ em68kcoff.c \
+ em68kelf.c \
+ em68kelfnbsd.c \
+ em68klinux.c \
+ em68knbsd.c \
+ em68kpsos.c \
+ em88kbcs.c \
+ emcorepe.c \
+ emipsbig.c \
+ emipsbsd.c \
+ emipsidt.c \
+ emipsidtl.c \
+ emipslit.c \
+ emipslnews.c \
+ emipspe.c \
+ emsp430x110.c \
+ emsp430x112.c \
+ emsp430x1101.c \
+ emsp430x1111.c \
+ emsp430x1121.c \
+ emsp430x1122.c \
+ emsp430x1132.c \
+ emsp430x122.c \
+ emsp430x123.c \
+ emsp430x1222.c \
+ emsp430x1232.c \
+ emsp430x133.c \
+ emsp430x135.c \
+ emsp430x1331.c \
+ emsp430x1351.c \
+ emsp430x147.c \
+ emsp430x148.c \
+ emsp430x149.c \
+ emsp430x155.c \
+ emsp430x156.c \
+ emsp430x157.c \
+ emsp430x167.c \
+ emsp430x168.c \
+ emsp430x169.c \
+ emsp430x1610.c \
+ emsp430x1611.c \
+ emsp430x1612.c \
+ emsp430x2101.c \
+ emsp430x2111.c \
+ emsp430x2121.c \
+ emsp430x2131.c \
+ emsp430x311.c \
+ emsp430x312.c \
+ emsp430x313.c \
+ emsp430x314.c \
+ emsp430x315.c \
+ emsp430x323.c \
+ emsp430x325.c \
+ emsp430x336.c \
+ emsp430x337.c \
+ emsp430x412.c \
+ emsp430x413.c \
+ emsp430x415.c \
+ emsp430x417.c \
+ emsp430xE423.c \
+ emsp430xE425.c \
+ emsp430xE427.c \
+ emsp430xW423.c \
+ emsp430xW425.c \
+ emsp430xW427.c \
+ emsp430xG437.c \
+ emsp430xG438.c \
+ emsp430xG439.c \
+ emsp430x435.c \
+ emsp430x436.c \
+ emsp430x437.c \
+ emsp430x447.c \
+ emsp430x448.c \
+ emsp430x449.c \
+ enews.c \
+ ens32knbsd.c \
+ eor32.c \
+ eor32elf.c \
+ epc532macha.c \
+ epdp11.c \
+ epjelf.c \
+ epjlelf.c \
+ eppcmacos.c \
+ eppcnw.c \
+ eppcpe.c \
+ eppclynx.c \
+ eriscix.c \
+ escore3_elf.c \
+ escore7_elf.c \
+ esh.c \
+ eshelf32.c \
+ eshlelf32.c \
+ eshelf32_linux.c \
+ eshlelf32_linux.c \
+ eshelf32_nbsd.c \
+ eshlelf32_nbsd.c \
+ eshelf.c \
+ eshelf_fd.c \
+ eshlelf_fd.c \
+ eshelf_linux.c \
+ eshlelf_linux.c \
+ eshelf_nbsd.c \
+ eshlelf_nbsd.c \
+ eshelf_nto.c \
+ eshlelf_nto.c \
+ eshelf_uclinux.c \
+ eshelf_vxworks.c \
+ eshlelf_vxworks.c \
+ eshl.c \
+ eshlelf.c \
+ eshlsymbian.c \
+ eshpe.c \
+ esparcaout.c \
+ esparclinux.c \
+ esparcnbsd.c \
+ est2000.c \
+ esun3.c \
+ esun4.c \
+ etic30aout.c \
+ etic30coff.c \
+ etic3xcoff.c \
+ etic3xcoff_onchip.c \
+ etic4xcoff.c \
+ etic54xcoff.c \
+ etic80coff.c \
+ evanilla.c \
+ evax.c \
+ evaxnbsd.c \
+ evsta.c \
+ ew65.c \
+ ez8001.c \
+ eelf32frvfd.c \
+ ez80.c \
+ ez8002.c
+
+ALL_EMULATIONS = $(ALL_EMULATION_SOURCES:.c=.@OBJEXT@)
+
+ALL_64_EMULATION_SOURCES = \
+ eelf64_aix.c \
+ eelf64_ia64.c \
+ eelf64_ia64_fbsd.c \
+ eshelf64.c \
+ eshlelf64.c \
+ eshelf64_nbsd.c \
+ eshlelf64_nbsd.c \
+ eelf_x86_64.c \
+ eelf_x86_64_fbsd.c \
+ eelf_x86_64_sol2.c \
+ eelf_l1om.c \
+ eelf_l1om_fbsd.c \
+ eelf64_s390.c \
+ eelf64_sparc.c \
+ eelf64_sparc_fbsd.c \
+ eelf64_sparc_sol2.c \
+ eelf64alpha.c \
+ eelf64alpha_fbsd.c \
+ eelf64alpha_nbsd.c \
+ eelf64bmip.c \
+ eelf64btsmip.c \
+ eelf64ltsmip.c \
+ eelf64hppa.c \
+ eelf64mmix.c \
+ emmo.c \
+ eelf64ppc.c \
+ eelf64lppc.c \
+ ehppa64linux.c
+
+ALL_64_EMULATIONS = $(ALL_64_EMULATION_SOURCES:.c=.@OBJEXT@)
+
+ALL_EMUL_EXTRA_OFILES = \
+ deffilep.@OBJEXT@ \
+ pe-dll.@OBJEXT@ \
+ pep-dll.@OBJEXT@
+
+CFILES = ldctor.c ldemul.c ldexp.c ldfile.c ldlang.c \
+ ldmain.c ldmisc.c ldver.c ldwrite.c lexsup.c \
+ mri.c ldcref.c pe-dll.c pep-dll.c ldlex-wrapper.c \
+ $(PLUGIN_C)
+
+HFILES = ld.h ldctor.h ldemul.h ldexp.h ldfile.h \
+ ldlang.h ldlex.h ldmain.h ldmisc.h ldver.h \
+ ldwrite.h mri.h deffile.h pe-dll.h pep-dll.h \
+ elf-hints-local.h $(PLUGIN_H)
+
+GENERATED_CFILES = ldgram.c ldlex.c deffilep.c
+GENERATED_HFILES = ldgram.h ldemul-list.h deffilep.h
+
+# Require an early dependency on the generated headers, as the dependency
+# tracking will not cause them to be built beforehand.
+BUILT_SOURCES = $(GENERATED_HFILES)
+
+OFILES = ldgram.@OBJEXT@ ldlex-wrapper.@OBJEXT@ lexsup.@OBJEXT@ ldlang.@OBJEXT@ \
+ mri.@OBJEXT@ ldctor.@OBJEXT@ ldmain.@OBJEXT@ $(PLUGIN_OBJECT) \
+ ldwrite.@OBJEXT@ ldexp.@OBJEXT@ ldemul.@OBJEXT@ ldver.@OBJEXT@ ldmisc.@OBJEXT@ \
+ ldfile.@OBJEXT@ ldcref.@OBJEXT@ ${EMULATION_OFILES} ${EMUL_EXTRA_OFILES}
+
+STAGESTUFF = *.@OBJEXT@ ldscripts/* e*.c
+
+# Disable -Werror, if it has been enabled, since old versions of bison/
+# yacc will produce working code which contain compile time warnings.
+ldgram.@OBJEXT@: ldgram.c
+if am__fastdepCC
+ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f ldgram.c || echo $(srcdir)/`ldgram.c $(NO_WERROR)
+ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+else
+if AMDEP
+ source='ldgram.c' object='$@' libtool=no @AMDEPBACKSLASH@
+ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+endif
+ $(COMPILE) -c `test -f ldgram.c || echo $(srcdir)/`ldgram.c $(NO_WERROR)
+endif
+
+ldlex-wrapper.@OBJEXT@: ldlex-wrapper.c ldlex.c
+if am__fastdepCC
+ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $(srcdir)/ldlex-wrapper.c $(NO_WERROR)
+ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+else
+if AMDEP
+ source='ldlex-wrapper.c' object='$@' libtool=no @AMDEPBACKSLASH@
+ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+endif
+ $(COMPILE) -c $(srcdir)/ldlex-wrapper.c $(NO_WERROR)
+endif
+
+deffilep.@OBJEXT@: deffilep.c
+if am__fastdepCC
+ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f deffilep.c || echo $(srcdir)/`deffilep.c $(NO_WERROR)
+ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+else
+if AMDEP
+ source='deffilep.c' object='$@' libtool=no @AMDEPBACKSLASH@
+ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+endif
+ $(COMPILE) -c `test -f deffilep.c || echo $(srcdir)/`deffilep.c $(NO_WERROR)
+endif
+
+# At the moment this is just a list of those emulation template files
+# that contain internationalised strings.
+EMULATION_FILES = emultempl/pe.em emultempl/armcoff.em
+
+POTFILES = $(CFILES) $(HFILES) $(EMULATION_FILES)
+
+po/POTFILES.in: @MAINT@ Makefile
+ for f in $(POTFILES); do echo $$f; done | LC_ALL=C sort > tmp \
+ && mv tmp $(srcdir)/po/POTFILES.in
+
+ldmain.@OBJEXT@: ldmain.c config.status
+if am__fastdepCC
+ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ \
+ -DDEFAULT_EMULATION='"$(EMUL)"' \
+ -DBINDIR='"$(bindir)"' -DTOOLBINDIR='"$(tooldir)/bin"' \
+ -DTARGET='"@target@"' @TARGET_SYSTEM_ROOT_DEFINE@ \
+ $(srcdir)/ldmain.c
+ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+else
+if AMDEP
+ source='ldmain.c' object='$@' libtool=no @AMDEPBACKSLASH@
+ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+endif
+ $(COMPILE) -c -DDEFAULT_EMULATION='"$(EMUL)"' \
+ -DBINDIR='"$(bindir)"' -DTOOLBINDIR='"$(tooldir)/bin"' \
+ -DTARGET='"@target@"' @TARGET_SYSTEM_ROOT_DEFINE@ \
+ $(srcdir)/ldmain.c
+endif
+
+ldfile.@OBJEXT@: ldfile.c config.status
+if am__fastdepCC
+ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ \
+ -DSCRIPTDIR='"$(scriptdir)"' -DBINDIR='"$(bindir)"' -DTOOLBINDIR='"$(tooldir)/bin"' \
+ $(srcdir)/ldfile.c
+ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+else
+if AMDEP
+ source='ldfile.c' object='$@' libtool=no @AMDEPBACKSLASH@
+ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+endif
+ $(COMPILE) -c -DSCRIPTDIR='"$(scriptdir)"' -DBINDIR='"$(bindir)"' \
+ -DTOOLBINDIR='"$(tooldir)/bin"' \
+ $(srcdir)/ldfile.c
+endif
+
+eelf32_spu.@OBJEXT@: eelf32_spu.c
+if am__fastdepCC
+ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ \
+ -DEMBEDSPU="\"`echo embedspu | sed '$(transform)'`\"" eelf32_spu.c
+ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+else
+if AMDEP
+ source='eelf32_spu.c' object='$@' libtool=no @AMDEPBACKSLASH@
+ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+endif
+ $(COMPILE) -c -DEMBEDSPU="\"`echo embedspu | sed '$(transform)'`\"" \
+ eelf32_spu.c
+endif
+
+ldemul-list.h: Makefile
+ (echo "/* This file is automatically generated. DO NOT EDIT! */";\
+ for f in `echo " " ${EMULATION_OFILES} "" \
+ | sed -e 's/ e/ ld/g' -e 's/ ld/ /g' -e 's/[.]o//g'`; do \
+ echo "extern ld_emulation_xfer_type ld_$${f}_emulation;"; \
+ done;\
+ echo "";\
+ echo "#define EMULATION_LIST \\";\
+ for f in `echo " " ${EMULATION_OFILES} "" \
+ | sed -e 's/ e/ ld/g' -e 's/ ld/ /g' -e 's/[.]o//g'`; do \
+ echo " &ld_$${f}_emulation, \\"; \
+ done;\
+ echo " 0") >ldemul-tmp.h
+ mv ldemul-tmp.h ldemul-list.h
+
+stringify.sed: ${srcdir}/emultempl/$(STRINGIFY)
+ cp ${srcdir}/emultempl/$(STRINGIFY) stringify.sed
+
+# These all start with e so 'make clean' can find them.
+
+GENSCRIPTS = LIB_PATH='${LIB_PATH}' $(SHELL) $(srcdir)/genscripts.sh "${srcdir}" "${libdir}" "${prefix}" "${exec_prefix}" @host@ @target@ @target_alias@ "@EMULATION_LIBPATH@" "@NATIVE_LIB_DIRS@" @use_sysroot@
+GEN_DEPENDS = $(srcdir)/genscripts.sh stringify.sed
+ELF_DEPS = $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/elf-generic.em
+ELF_GEN_DEPS = $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/elf-generic.em $(srcdir)/emultempl/genelf.em
+
+@TDIRS@
+
+eaix5ppc.c: $(srcdir)/emulparams/aix5ppc.sh \
+ $(srcdir)/emultempl/aix.em $(srcdir)/scripttempl/aix.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} aix5ppc "$(tdir_aixppc)"
+eaix5rs6.c: $(srcdir)/emulparams/aix5rs6.sh \
+ $(srcdir)/emultempl/aix.em $(srcdir)/scripttempl/aix.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} aix5rs6 "$(tdir_aixrs6)"
+eaixppc.c: $(srcdir)/emulparams/aixppc.sh \
+ $(srcdir)/emultempl/aix.em $(srcdir)/scripttempl/aix.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} aixppc "$(tdir_aixppc)"
+eaixrs6.c: $(srcdir)/emulparams/aixrs6.sh \
+ $(srcdir)/emultempl/aix.em $(srcdir)/scripttempl/aix.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} aixrs6 "$(tdir_aixrs6)"
+ealpha.c: $(srcdir)/emulparams/alpha.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/alpha.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} alpha "$(tdir_alpha)"
+ealphavms.c: $(srcdir)/emulparams/alphavms.sh \
+ $(srcdir)/emultempl/vms.em $(srcdir)/scripttempl/alphavms.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} alphavms "$(tdir_alphavms)"
+earcelf.c: $(srcdir)/emulparams/arcelf.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} arcelf "$(tdir_arcelf)"
+earmelf.c: $(srcdir)/emulparams/armelf.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armelf "$(tdir_armelf)"
+earmelfb.c: $(srcdir)/emulparams/armelfb.sh $(srcdir)/emulparams/armelf.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armelfb "$(tdir_armelfb)"
+earmelf_fbsd.c: $(srcdir)/emulparams/armelf_fbsd.sh \
+ $(srcdir)/emulparams/armelf.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armelf_fbsd "$(tdir_armelf_fbsd)"
+earmelf_linux.c: $(srcdir)/emulparams/armelf_linux.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armelf_linux "$(tdir_armelf_linux)"
+earmelf_linux_eabi.c: $(srcdir)/emulparams/armelf_linux_eabi.sh \
+ $(srcdir)/emulparams/armelf_linux.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armelf_linux_eabi "$(tdir_armelf_linux_abi)"
+earmelfb_linux.c: $(srcdir)/emulparams/armelfb_linux.sh \
+ $(srcdir)/emulparams/armelf_linux.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armelfb_linux "$(tdir_armelfb_linux)"
+earmelfb_linux_eabi.c: $(srcdir)/emulparams/armelfb_linux_eabi.sh \
+ $(srcdir)/emulparams/armelf_linux_eabi.sh \
+ $(srcdir)/emulparams/armelf_linux.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armelfb_linux_eabi "$(tdir_armelfb_linux_abi)"
+earmelf_nbsd.c: $(srcdir)/emulparams/armelf_nbsd.sh \
+ $(srcdir)/emulparams/armelf.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armelf_nbsd "$(tdir_armelf_nbsd)"
+earmelfb_nbsd.c: $(srcdir)/emulparams/armelfb_nbsd.sh \
+ $(srcdir)/emulparams/armelf_nbsd.sh \
+ $(srcdir)/emulparams/armelf.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armelfb_nbsd "$(tdir_armelfb_nbsd)"
+earmelf_vxworks.c: $(srcdir)/emulparams/armelf_vxworks.sh \
+ $(srcdir)/emulparams/vxworks.sh $(srcdir)/emulparams/armelf.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/vxworks.em \
+ $(srcdir)/emultempl/armelf.em $(srcdir)/scripttempl/elf.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} armelf_vxworks "$(tdir_armelf)"
+earmaoutb.c: $(srcdir)/emulparams/armaoutb.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/armaout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armaoutb "$(tdir_armaoutb)"
+earmaoutl.c: $(srcdir)/emulparams/armaoutl.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/armaout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armaoutl "$(tdir_armaoutl)"
+earmcoff.c: $(srcdir)/emulparams/armcoff.sh \
+ $(srcdir)/emultempl/armcoff.em $(srcdir)/scripttempl/armcoff.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armcoff "$(tdir_armcoff)"
+earmnbsd.c: $(srcdir)/emulparams/armnbsd.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armnbsd "$(tdir_armnbsd)"
+earmnto.c: $(srcdir)/emulparams/armnto.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armnto "$(tdir_armnto)"
+earm_epoc_pe.c: $(srcdir)/emulparams/arm_epoc_pe.sh \
+ $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/epocpe.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} arm_epoc_pe "$(tdir_armpe)"
+earm_wince_pe.c: $(srcdir)/emulparams/arm_wince_pe.sh \
+ $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} arm_wince_pe "$(tdir_armpe)"
+earmpe.c: $(srcdir)/emulparams/armpe.sh \
+ $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armpe "$(tdir_armpe)"
+earmsymbian.c: $(srcdir)/emulparams/armsymbian.sh \
+ $(srcdir)/emulparams/armelf.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/armelf.em $(srcdir)/scripttempl/armbpabi.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} armsymbian "$(tdir_armelf)"
+eavr2.c: $(srcdir)/emulparams/avr2.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr2 "$(tdir_avr2)"
+eavr1.c: $(srcdir)/emulparams/avr1.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr1 "$(tdir_avr2)"
+eavr25.c: $(srcdir)/emulparams/avr25.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr25 "$(tdir_avr2)"
+eavr3.c: $(srcdir)/emulparams/avr3.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr3 "$(tdir_avr2)"
+eavr31.c: $(srcdir)/emulparams/avr31.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr31 "$(tdir_avr2)"
+eavr35.c: $(srcdir)/emulparams/avr35.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr35 "$(tdir_avr2)"
+eavr4.c: $(srcdir)/emulparams/avr4.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr4 "$(tdir_avr2)"
+eavr5.c: $(srcdir)/emulparams/avr5.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr5 "$(tdir_avr2)"
+eavr51.c: $(srcdir)/emulparams/avr51.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr51 "$(tdir_avr2)"
+eavr6.c: $(srcdir)/emulparams/avr6.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr6 "$(tdir_avr2)"
+ecoff_i860.c: $(srcdir)/emulparams/coff_i860.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i860coff.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} coff_i860 "$(tdir_coff_i860)"
+ecoff_sparc.c: $(srcdir)/emulparams/coff_sparc.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/sparccoff.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} coff_sparc "$(tdir_coff_sparc)"
+ecrisaout.c: $(srcdir)/emulparams/crisaout.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/crisaout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} crisaout "$(tdir_cris)"
+ecriself.c: $(srcdir)/emulparams/criself.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} criself "$(tdir_cris)"
+ecrislinux.c: $(srcdir)/emulparams/crislinux.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} crislinux "$(tdir_cris)"
+ed10velf.c: $(srcdir)/emulparams/d10velf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elfd10v.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} d10velf "$(tdir_d10v)"
+ed30velf.c: $(srcdir)/emulparams/d30velf.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elfd30v.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} d30velf "$(tdir_d30v)"
+ed30v_o.c: $(srcdir)/emulparams/d30v_o.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elfd30v.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} d30v_o "$(tdir_d30v)"
+ed30v_e.c: $(srcdir)/emulparams/d30v_e.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elfd30v.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} d30v_e "$(tdir_d30v)"
+edelta68.c: $(srcdir)/emulparams/delta68.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/delta68.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} delta68 "$(tdir_delta68)"
+eelf32bfin.c: $(srcdir)/emulparams/bfin.sh \
+ $(ELF_DEPS) \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32bfin "$(tdir_elf32bfin)" bfin
+eelf32bfinfd.c: $(srcdir)/emulparams/elf32bfinfd.sh $(srcdir)/emulparams/bfin.sh \
+ $(ELF_DEPS) \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32bfinfd "$(tdir_elf32bfinfd)" elf32bfinfd
+eelf32_dlx.c: $(srcdir)/emulparams/elf32_dlx.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/dlx.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_dlx "$(tdir_elf32_dlx)"
+eelf32_tic6x_be.c: $(srcdir)/emulparams/elf32_tic6x_be.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_tic6x_be "$(tdir_elf32_tic6x_be)"
+eelf32_tic6x_le.c: $(srcdir)/emulparams/elf32_tic6x_le.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_tic6x_le "$(tdir_elf32_tic6x_le)"
+eelf32xc16x.c: $(srcdir)/emulparams/elf32xc16x.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/needrelax.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32xc16x "$(tdir_xc16x)"
+eelf32xc16xl.c: $(srcdir)/emulparams/elf32xc16xl.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/needrelax.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32xc16xl "$(tdir_xc16xl)"
+eelf32xc16xs.c: $(srcdir)/emulparams/elf32xc16xs.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/needrelax.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32xc16xs "$(tdir_xc16xs)"
+eelf32xstormy16.c: $(srcdir)/emulparams/elf32xstormy16.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/needrelax.em \
+ $(srcdir)/scripttempl/xstormy16.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32xstormy16 "$(tdir_xstormy16)"
+eelf32am33lin.c: $(srcdir)/emulparams/elf32am33lin.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32am33lin "$(tdir_mn10300)"
+eelf32rx.c: $(srcdir)/emulparams/elf32rx.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32rx "$(tdir_elf32rx)"
+eelf32vax.c: $(srcdir)/emulparams/elf32vax.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32vax "$(tdir_elf32vax)"
+eelf32xtensa.c: $(srcdir)/emulparams/elf32xtensa.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/xtensaelf.em $(INCDIR)/xtensa-config.h \
+ $(BFDDIR)/elf-bfd.h $(BFDDIR)/libbfd.h $(INCDIR)/elf/xtensa.h \
+ $(srcdir)/scripttempl/elfxtensa.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32xtensa "$(tdir_elf32xtensa)"
+eelf32fr30.c: $(srcdir)/emulparams/elf32fr30.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32fr30 "$(tdir_fr30)"
+eelf32frv.c: $(srcdir)/emulparams/elf32frv.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32frv "$(tdir_frv)"
+eelf32frvfd.c: $(srcdir)/emulparams/elf32frvfd.sh \
+ $(srcdir)/emulparams/elf32frv.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32frvfd "$(tdir_frv)"
+eelf32moxie.c: $(srcdir)/emulparams/elf32moxie.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32moxie "$(tdir_moxie)"
+eelf32mcore.c: $(srcdir)/emulparams/elf32mcore.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32mcore "$(tdir_mcore)"
+eelf32mep.c: $(srcdir)/emulparams/elf32mep.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/mep.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32mep "$(tdir_mep)"
+em32relf.c: $(srcdir)/emulparams/m32relf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m32relf "$(tdir_m32r)"
+em32rlelf.c: $(srcdir)/emulparams/m32rlelf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m32rlelf "$(tdir_m32rlelf)"
+em32relf_linux.c: $(srcdir)/emulparams/m32relf_linux.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m32relf_linux "$(tdir_m32relf_linux)"
+em32rlelf_linux.c: $(srcdir)/emulparams/m32rlelf_linux.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m32rlelf_linux "$(tdir_m32rlelf_linux)"
+eelf32_sparc.c: $(srcdir)/emulparams/elf32_sparc.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_sparc "$(tdir_elf32_sparc)"
+eelf32_sparc_sol2.c: $(srcdir)/emulparams/elf32_sparc_sol2.sh \
+ $(srcdir)/emulparams/elf32_sparc.sh \
+ $(srcdir)/emulparams/solaris2.sh \
+ $(srcdir)/emultempl/solaris2.em $(ELF_DEPS) \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_sparc_sol2 "$(tdir_elf32_sparc_sol2)"
+eelf32_sparc_vxworks.c: $(srcdir)/emulparams/elf32_sparc_vxworks.sh \
+ $(srcdir)/emulparams/vxworks.sh $(srcdir)/emulparams/elf32_sparc.sh \
+ $(srcdir)/emultempl/vxworks.em $(ELF_DEPS) \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_sparc_vxworks "$(tdir_elf32_sparc_vxworks)"
+eelf32_spu.c: $(srcdir)/emulparams/elf32_spu.sh $(srcdir)/emultempl/spuelf.em \
+ $(srcdir)/emultempl/spu_ovl.@OBJEXT@_c $(srcdir)/emultempl/spu_icache.@OBJEXT@_c \
+ ldemul-list.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_spu "$(tdir_elf32_spu)"
+$(srcdir)/emultempl/spu_ovl.@OBJEXT@_c: @MAINT@ $(srcdir)/emultempl/spu_ovl.S
+ if ../gas/as-new --version \
+ | grep 'target.*spu' >/dev/null 2>/dev/null; then \
+ cpp -DOVLY_IRQ_SAVE $(srcdir)/emultempl/spu_ovl.S spu_ovl.s; \
+ ../gas/as-new -o spu_ovl.@OBJEXT@ spu_ovl.s; \
+ ../binutils/bin2c <spu_ovl.@OBJEXT@ >$@; \
+ fi
+$(srcdir)/emultempl/spu_icache.@OBJEXT@_c: @MAINT@ $(srcdir)/emultempl/spu_icache.S
+ if ../gas/as-new --version \
+ | grep 'target.*spu' >/dev/null 2>/dev/null; then \
+ cpp -DOVLY_IRQ_SAVE $(srcdir)/emultempl/spu_icache.S spu_icache.s; \
+ ../gas/as-new -o spu_icache.@OBJEXT@ spu_icache.s; \
+ ../binutils/bin2c <spu_icache.@OBJEXT@ >$@; \
+ fi
+eelf32_i860.c: $(srcdir)/emulparams/elf32_i860.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_i860 "$(tdir_elf32_i860)"
+eelf32_i960.c: $(srcdir)/emulparams/elf32_i960.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_i960 "$(tdir_elf32_i960)"
+eelf32b4300.c: $(srcdir)/emulparams/elf32b4300.sh \
+ $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32b4300 "$(tdir_elf32b4300)"
+eelf32cr16.c: $(srcdir)/emulparams/elf32cr16.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/cr16elf.em \
+ $(srcdir)/scripttempl/elf32cr16.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32cr16 "$(tdir_elf32crx)"
+eelf32cr16c.c: $(srcdir)/emulparams/elf32cr16c.sh \
+ $(ELF_DEPS) \
+ $(srcdir)/scripttempl/elf32cr16c.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32cr16c "$(tdir_elf32cr16c)"
+eelf32bmip.c: $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32bmip "$(tdir_elf32bmip)"
+eelf32bsmip.c: $(srcdir)/emulparams/elf32bsmip.sh \
+ $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) $(srcdir)/emultempl/irix.em \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32bsmip "$(tdir_elf32bsmip)"
+eelf32btsmip.c: $(srcdir)/emulparams/elf32btsmip.sh \
+ $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32btsmip "$(tdir_elf32btsmip)"
+eelf32crx.c: $(srcdir)/emulparams/elf32crx.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/crxelf.em \
+ $(srcdir)/scripttempl/elf32crx.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32crx "$(tdir_elf32crx)"
+eelf32btsmipn32.c: $(srcdir)/emulparams/elf32btsmipn32.sh \
+ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32btsmipn32 "$(tdir_elf32btsmipn32)"
+eelf32ltsmip.c: $(srcdir)/emulparams/elf32ltsmip.sh \
+ $(srcdir)/emulparams/elf32btsmip.sh $(srcdir)/emulparams/elf32bmip.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ltsmip "$(tdir_elf32ltsmip)"
+eelf32ltsmipn32.c: $(srcdir)/emulparams/elf32ltsmipn32.sh \
+ $(srcdir)/emulparams/elf32btsmipn32.sh \
+ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ltsmipn32 "$(tdir_elf32ltsmipn32)"
+eelf32ebmip.c: $(srcdir)/emulparams/elf32ebmip.sh \
+ $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ebmip "$(tdir_elf32ebmip)"
+eelf32ebmipvxworks.c: $(srcdir)/emulparams/elf32ebmipvxworks.sh \
+ $(srcdir)/emulparams/elf32bmip.sh $(srcdir)/emulparams/vxworks.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/mipself.em \
+ $(srcdir)/emultempl/vxworks.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ebmipvxworks "$(tdir_elf32ebmipvxworks)"
+eelf32elmip.c: $(srcdir)/emulparams/elf32elmip.sh \
+ $(srcdir)/emulparams/elf32lmip.sh $(srcdir)/emulparams/elf32bmip.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32elmip "$(tdir_elf32elmip)"
+eelf32elmipvxworks.c: $(srcdir)/emulparams/elf32elmipvxworks.sh \
+ $(srcdir)/emulparams/elf32bmip.sh $(srcdir)/emulparams/vxworks.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/mipself.em \
+ $(srcdir)/emultempl/vxworks.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32elmipvxworks "$(tdir_elf32elmipvxworks)"
+eelf32bmipn32.c: $(srcdir)/emulparams/elf32bmipn32.sh \
+ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/irix.em $(srcdir)/emultempl/mipself.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32bmipn32 "$(tdir_elf32bmipn32)"
+eelf32l4300.c: $(srcdir)/emulparams/elf32l4300.sh \
+ $(srcdir)/emulparams/elf32b4300.sh $(srcdir)/emulparams/elf32bmip.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32l4300 "$(tdir_elf32l4300)"
+eelf32lmip.c: $(srcdir)/emulparams/elf32lmip.sh \
+ $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32lmip "$(tdir_elf32lmip)"
+eelf32mb_linux.c: $(srcdir)/emulparams/elf32mb_linux.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32mb_linux "$(tdir_microblaze)"
+eelf32microblaze.c: $(srcdir)/emulparams/elf32microblaze.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elfmicroblaze.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32microblaze "$(tdir_microblaze)"
+eelf32mipswindiss.c: $(srcdir)/emulparams/elf32mipswindiss.sh $(ELF_DEPS) \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32mipswindiss "$(tdir_elf32mipswindiss)"
+eelf32m32c.c: $(srcdir)/emulparams/elf32m32c.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/needrelax.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32m32c "$(tdir_m32c)"
+eelf32mt.c: $(srcdir)/emulparams/elf32mt.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32mt "$(tdir_mt)"
+eelf32lppc.c: $(srcdir)/emulparams/elf32lppc.sh \
+ $(srcdir)/emulparams/elf32ppccommon.sh \
+ $(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emultempl/ppc32elf.em \
+ ldemul-list.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32lppc "$(tdir_elf32lppc)"
+eelf32lppcnto.c: $(srcdir)/emulparams/elf32lppcnto.sh \
+ $(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emulparams/elf32ppccommon.sh \
+ $(srcdir)/emultempl/ppc32elf.em $(ELF_DEPS) \
+ ldemul-list.h \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32lppcnto "$(tdir_elf32lppcnto)"
+eelf32lppcsim.c: $(srcdir)/emulparams/elf32lppcsim.sh \
+ $(srcdir)/emulparams/elf32lppc.sh $(srcdir)/emulparams/elf32ppc.sh \
+ $(srcdir)/emulparams/elf32ppccommon.sh $(srcdir)/emultempl/ppc32elf.em \
+ ldemul-list.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32lppcsim "$(tdir_elf32lppcsim)"
+eelf32ppcnto.c: $(srcdir)/emulparams/elf32ppcnto.sh \
+ $(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emulparams/elf32ppccommon.sh \
+ $(srcdir)/emultempl/ppc32elf.em $(ELF_DEPS) \
+ ldemul-list.h \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ppcnto "$(tdir_elf32ppcnto)"
+eelf32ppcwindiss.c: $(srcdir)/emulparams/elf32ppcwindiss.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ppcwindiss "$(tdir_elf32ppcwindiss)"
+eelf32ppcvxworks.c: $(srcdir)/emulparams/elf32ppcvxworks.sh \
+ $(srcdir)/emulparams/elf32ppccommon.sh $(srcdir)/emulparams/vxworks.sh \
+ $(srcdir)/emultempl/vxworks.em $(ELF_DEPS) \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ppcvxworks "$(tdir_elf32ppcvxworks)"
+eelf32lsmip.c: $(srcdir)/emulparams/elf32lsmip.sh \
+ $(srcdir)/emulparams/elf32lmip.sh $(srcdir)/emulparams/elf32bmip.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32lsmip "$(tdir_elf32lsmip)"
+eelf32openrisc.c: $(srcdir)/emulparams/elf32openrisc.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32openrisc "$(tdir_openrisc)"
+eelf32ppc.c: $(srcdir)/emulparams/elf32ppc.sh \
+ $(srcdir)/emulparams/elf32ppccommon.sh $(srcdir)/emultempl/ppc32elf.em \
+ ldemul-list.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ppc "$(tdir_elf32ppc)"
+eelf32ppc_fbsd.c: $(srcdir)/emulparams/elf32ppc_fbsd.sh \
+ $(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emulparams/elf32ppccommon.sh \
+ $(srcdir)/emultempl/ppc32elf.em $(ELF_DEPS) \
+ ldemul-list.h \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ppc_fbsd "$(tdir_elf32ppc_fbsd)"
+eelf32ppcsim.c: $(srcdir)/emulparams/elf32ppcsim.sh \
+ $(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emulparams/elf32ppccommon.sh \
+ $(srcdir)/emultempl/ppc32elf.em $(ELF_DEPS) \
+ ldemul-list.h \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ppcsim "$(tdir_elf32ppcsim)"
+eelf32ppclinux.c: $(srcdir)/emulparams/elf32ppclinux.sh \
+ $(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emulparams/elf32ppccommon.sh \
+ $(srcdir)/emultempl/ppc32elf.em $(ELF_DEPS) \
+ ldemul-list.h \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ppclinux "$(tdir_elf32ppclinux)"
+eelf64ppc.c: $(srcdir)/emulparams/elf64ppc.sh $(srcdir)/emultempl/ppc64elf.em \
+ ldemul-list.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64ppc "$(tdir_elf64ppc)"
+eelf64lppc.c: $(srcdir)/emulparams/elf64lppc.sh \
+ $(srcdir)/emulparams/elf64ppc.sh $(srcdir)/emultempl/ppc64elf.em \
+ ldemul-list.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64lppc "$(tdir_elf64lppc)"
+eelf32i370.c: $(srcdir)/emulparams/elf32i370.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elfi370.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32i370 "$(tdir_elf32i370)"
+eelf32ip2k.c: $(srcdir)/emulparams/elf32ip2k.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ip2k "$(tdir_ip2k)"
+eelf32iq2000.c: $(srcdir)/emulparams/elf32iq2000.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/iq2000.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32iq2000 "$(tdir_iq2000)"
+eelf32iq10.c: $(srcdir)/emulparams/elf32iq10.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/iq2000.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32iq10 "$(tdir_iq10)"
+eelf32lm32.c: $(srcdir)/emulparams/elf32lm32.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32lm32 "$(tdir_elf32lm32)"
+eelf32lm32fd.c: $(srcdir)/emulparams/elf32lm32fd.sh \
+ $(srcdir)/emulparams/elf32lm32.sh $(ELF_DEPS) \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32lm32fd "$(tdir_elf32lm32fd)"
+eelf64alpha.c: $(srcdir)/emulparams/elf64alpha.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/alphaelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64alpha "$(tdir_elf64alpha)"
+eelf64alpha_fbsd.c: $(srcdir)/emulparams/elf64alpha_fbsd.sh \
+ $(srcdir)/emulparams/elf64alpha.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/alphaelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64alpha_fbsd "$(tdir_elf64alpha_fbsd)"
+eelf64alpha_nbsd.c: $(srcdir)/emulparams/elf64alpha_nbsd.sh \
+ $(srcdir)/emulparams/elf64alpha.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/alphaelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64alpha_nbsd "$(tdir_elf64alpha_nbsd)"
+eelf64hppa.c: $(srcdir)/emulparams/elf64hppa.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf64hppa.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64hppa "$(tdir_elf64hppa)"
+eelf64_aix.c: $(srcdir)/emulparams/elf64_aix.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64_aix "$(tdir_elf64_aix)"
+eelf64_ia64.c: $(srcdir)/emulparams/elf64_ia64.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/ia64elf.em \
+ $(srcdir)/emultempl/needrelax.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64_ia64 "$(tdir_elf64_ia64)"
+eelf64_ia64_fbsd.c: $(srcdir)/emulparams/elf64_ia64_fbsd.sh \
+ $(srcdir)/emulparams/elf64_ia64.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/ia64elf.em \
+ $(srcdir)/emultempl/needrelax.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64_ia64_fbsd "$(tdir_elf64_ia64_fbsd)"
+eelf64_s390.c: $(srcdir)/emulparams/elf64_s390.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64_s390 "$(tdir_elf64_s390)"
+eelf64_sparc.c: $(srcdir)/emulparams/elf64_sparc.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64_sparc "$(tdir_elf64_sparc)"
+eelf64_sparc_fbsd.c: $(srcdir)/emulparams/elf64_sparc_fbsd.sh \
+ $(srcdir)/emulparams/elf64_sparc.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64_sparc_fbsd "$(tdir_elf64_sparc_fbsd)"
+eelf64_sparc_sol2.c: $(srcdir)/emulparams/elf64_sparc_sol2.sh \
+ $(srcdir)/emulparams/elf64_sparc.sh \
+ $(srcdir)/emulparams/solaris2.sh \
+ $(srcdir)/emultempl/solaris2.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64_sparc_sol2 "$(tdir_elf64_sparc_sol2)"
+eelf64bmip.c: $(srcdir)/emulparams/elf64bmip.sh \
+ $(srcdir)/emulparams/elf64bmip-defs.sh \
+ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/irix.em $(srcdir)/emultempl/mipself.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64bmip "$(tdir_elf64bmip)"
+eelf64mmix.c: $(srcdir)/emulparams/elf64mmix.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/mmix-elfnmmo.em \
+ $(srcdir)/emultempl/mmixelf.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64mmix "$(tdir_elf64mmix)"
+emmo.c: $(srcdir)/emulparams/mmo.sh $(srcdir)/emultempl/mmix-elfnmmo.em \
+ $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/elf-generic.em \
+ $(srcdir)/emultempl/mmo.em \
+ $(srcdir)/scripttempl/mmo.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mmo "$(tdir_mmo)"
+eelf64btsmip.c: $(srcdir)/emulparams/elf64btsmip.sh \
+ $(srcdir)/emulparams/elf64bmip-defs.sh \
+ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64btsmip "$(tdir_elf64btsmip)"
+eelf64ltsmip.c: $(srcdir)/emulparams/elf64ltsmip.sh \
+ $(srcdir)/emulparams/elf64btsmip.sh $(srcdir)/emulparams/elf64bmip-defs.sh \
+ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64ltsmip "$(tdir_elf64ltsmip)"
+eelf_i386.c: $(srcdir)/emulparams/elf_i386.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_i386 "$(tdir_elf_i386)"
+eelf_x86_64.c: $(srcdir)/emulparams/elf_x86_64.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_x86_64 "$(tdir_elf_x86_64)"
+eelf_x86_64_fbsd.c: $(srcdir)/emulparams/elf_x86_64_fbsd.sh \
+ $(srcdir)/emulparams/elf_x86_64.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_x86_64_fbsd "$(tdir_elf_x86_64_fbsd)"
+eelf_x86_64_sol2.c: $(srcdir)/emulparams/elf_x86_64_sol2.sh \
+ $(srcdir)/emulparams/elf_x86_64.sh \
+ $(srcdir)/emulparams/solaris2.sh \
+ $(srcdir)/emultempl/solaris2.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_x86_64_sol2 "$(tdir_elf_x86_64_sol2)"
+eelf_l1om.c: $(srcdir)/emulparams/elf_l1om.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_l1om "$(tdir_elf_l1om)"
+eelf_l1om_fbsd.c: $(srcdir)/emulparams/elf_l1om_fbsd.sh \
+ $(srcdir)/emulparams/elf_l1om.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_l1om_fbsd "$(tdir_elf_l1om_fbsd)"
+eelf_i386_be.c: $(srcdir)/emulparams/elf_i386_be.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_i386_be "$(tdir_elf_i386_be)"
+eelf_i386_chaos.c: $(srcdir)/emulparams/elf_i386_chaos.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf_chaos.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_i386_chaos "$(tdir_elf_i386_chaos)"
+eelf_i386_fbsd.c: $(srcdir)/emulparams/elf_i386_fbsd.sh \
+ $(srcdir)/emulparams/elf_i386.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_i386_fbsd "$(tdir_elf_i386_fbsd)"
+eelf_i386_ldso.c: $(srcdir)/emulparams/elf_i386_ldso.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_i386_ldso "$(tdir_elf_i386_ldso)"
+eelf_i386_sol2.c: $(srcdir)/emulparams/elf_i386_sol2.sh \
+ $(srcdir)/emulparams/solaris2.sh \
+ $(srcdir)/emultempl/solaris2.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_i386_sol2 "$(tdir_elf_i386_sol2)"
+eelf_i386_vxworks.c: $(srcdir)/emulparams/elf_i386_vxworks.sh \
+ $(srcdir)/emulparams/vxworks.sh $(srcdir)/emultempl/vxworks.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_i386_vxworks "$(tdir_elf_i386_vxworks)"
+eelf_s390.c: $(srcdir)/emulparams/elf_s390.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_s390 "$(tdir_elf_s390)"
+egld960.c: $(srcdir)/emulparams/gld960.sh \
+ $(srcdir)/emultempl/gld960.em $(srcdir)/scripttempl/i960.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} gld960 "$(tdir_gld960)"
+egld960coff.c: $(srcdir)/emulparams/gld960coff.sh \
+ $(srcdir)/emultempl/gld960c.em $(srcdir)/scripttempl/i960.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} gld960coff "$(tdir_gld960coff)"
+eh8300.c: $(srcdir)/emulparams/h8300.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300 "$(tdir_h8300)"
+eh8300h.c: $(srcdir)/emulparams/h8300h.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300h.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300h "$(tdir_h8300h)"
+eh8300s.c: $(srcdir)/emulparams/h8300s.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300s.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300s "$(tdir_h8300s)"
+eh8300hn.c: $(srcdir)/emulparams/h8300hn.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300hn.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300hn "$(tdir_h8300hn)"
+eh8300sn.c: $(srcdir)/emulparams/h8300sn.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300sn.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300sn "$(tdir_h8300sn)"
+eh8300sx.c: $(srcdir)/emulparams/h8300sx.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300sx.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300sx "$(tdir_h8300sx)"
+eh8300sxn.c: $(srcdir)/emulparams/h8300sxn.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300sxn.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300sxn "$(tdir_h8300sxn)"
+eh8300elf.c: $(srcdir)/emulparams/h8300elf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300elf "$(tdir_h8300elf)"
+eh8300helf.c: $(srcdir)/emulparams/h8300helf.sh \
+ $(srcdir)/emulparams/h8300elf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300helf "$(tdir_h8300helf)"
+eh8300self.c: $(srcdir)/emulparams/h8300self.sh \
+ $(srcdir)/emulparams/h8300elf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300self "$(tdir_h8300self)"
+eh8300hnelf.c: $(srcdir)/emulparams/h8300hnelf.sh \
+ $(srcdir)/emulparams/h8300elf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300hnelf "$(tdir_h8300hnelf)"
+eh8300snelf.c: $(srcdir)/emulparams/h8300snelf.sh \
+ $(srcdir)/emulparams/h8300elf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300snelf "$(tdir_h8300snelf)"
+eh8300sxelf.c: $(srcdir)/emulparams/h8300sxelf.sh \
+ $(srcdir)/emulparams/h8300elf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300sxelf "$(tdir_h8300sxelf)"
+eh8300sxnelf.c: $(srcdir)/emulparams/h8300sxnelf.sh \
+ $(srcdir)/emulparams/h8300elf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300sxnelf "$(tdir_h8300sxnelf)"
+eh8500.c: $(srcdir)/emulparams/h8500.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8500.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8500 "$(tdir_h8500)"
+eh8500b.c: $(srcdir)/emulparams/h8500b.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8500b.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8500b "$(tdir_h8500b)"
+eh8500c.c: $(srcdir)/emulparams/h8500c.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8500c.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8500c "$(tdir_h8500c)"
+eh8500m.c: $(srcdir)/emulparams/h8500m.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8500m.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8500m "$(tdir_h8500m)"
+eh8500s.c: $(srcdir)/emulparams/h8500s.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8500s.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8500s "$(tdir_h8500s)"
+ehp300bsd.c: $(srcdir)/emulparams/hp300bsd.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} hp300bsd "$(tdir_hp300bsd)"
+ehp3hpux.c: $(srcdir)/emulparams/hp3hpux.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} hp3hpux "$(tdir_hp3hpux)"
+ehppaelf.c: $(srcdir)/emulparams/hppaelf.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/hppaelf.em \
+ $(srcdir)/scripttempl/hppaelf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} hppaelf "$(tdir_hppaelf)"
+ehppalinux.c: $(srcdir)/emulparams/hppalinux.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/hppaelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} hppalinux "$(tdir_hppalinux)"
+ehppanbsd.c: $(srcdir)/emulparams/hppanbsd.sh \
+ $(srcdir)/emulparams/hppaelf.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/hppaelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} hppanbsd "$(tdir_hppanbsd)"
+ehppaobsd.c: $(srcdir)/emulparams/hppaobsd.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/hppaelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} hppaobsd "$(tdir_hppaobsd)"
+ehppa64linux.c: $(srcdir)/emulparams/hppa64linux.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} hppa64linux "$(tdir_hppa64linux)"
+ei386aout.c: $(srcdir)/emulparams/i386aout.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386aout "$(tdir_i386aout)"
+ei386beos.c: $(srcdir)/emulparams/i386beos.sh \
+ $(srcdir)/emultempl/beos.em $(srcdir)/scripttempl/i386beos.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386beos "$(tdir_i386beos)"
+ei386bsd.c: $(srcdir)/emulparams/i386bsd.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386bsd "$(tdir_i386bsd)"
+ei386coff.c: $(srcdir)/emulparams/i386coff.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i386coff.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386coff "$(tdir_i386coff)"
+ei386go32.c: $(srcdir)/emulparams/i386go32.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i386go32.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386go32 "$(tdir_i386go32)"
+ei386linux.c: $(srcdir)/emulparams/i386linux.sh \
+ $(srcdir)/emultempl/linux.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386linux "$(tdir_i386linux)"
+ei386lynx.c: $(srcdir)/emulparams/i386lynx.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386lynx "$(tdir_i386lynx)"
+ei386mach.c: $(srcdir)/emulparams/i386mach.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386mach "$(tdir_i386mach)"
+ei386moss.c: $(srcdir)/emulparams/i386moss.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386moss "$(tdir_i386moss)"
+ei386msdos.c: $(srcdir)/emulparams/i386msdos.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i386msdos.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386msdos "$(tdir_i386msdos)"
+ei386nbsd.c: $(srcdir)/emulparams/i386nbsd.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386nbsd "$(tdir_i386nbsd)"
+ei386nto.c: $(srcdir)/emulparams/i386nto.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386nto "$(tdir_i386nto)"
+ei386nw.c: $(srcdir)/emulparams/i386nw.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/nw.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386nw "$(tdir_i386nw)"
+ei386pe.c: $(srcdir)/emulparams/i386pe.sh \
+ $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386pe "$(tdir_i386pe)"
+ei386pe_posix.c: $(srcdir)/emulparams/i386pe_posix.sh \
+ $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386pe_posix "$(tdir_i386pe_posix)"
+ei386pep.c: $(srcdir)/emulparams/i386pep.sh \
+ $(srcdir)/emultempl/pep.em $(srcdir)/scripttempl/pep.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386pep "$(tdir_i386pe)"
+elnk960.c: $(srcdir)/emulparams/lnk960.sh \
+ $(srcdir)/emultempl/lnk960.em $(srcdir)/scripttempl/i960.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} lnk960 "$(tdir_lnk960)"
+em68hc11elf.c: $(srcdir)/emulparams/m68hc11elf.sh \
+ $(srcdir)/emultempl/m68hc1xelf.em $(ELF_DEPS) \
+ $(srcdir)/scripttempl/elfm68hc11.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68hc11elf "$(tdir_m68hc11)"
+em68hc11elfb.c: $(srcdir)/emulparams/m68hc11elfb.sh \
+ $(srcdir)/emultempl/m68hc1xelf.em $(ELF_DEPS) \
+ $(srcdir)/scripttempl/elfm68hc11.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68hc11elfb "$(tdir_m68hc11b)"
+em68hc12elf.c: $(srcdir)/emulparams/m68hc12elf.sh \
+ $(srcdir)/emultempl/m68hc1xelf.em $(ELF_DEPS) \
+ $(srcdir)/scripttempl/elfm68hc12.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68hc12elf "$(tdir_m68hc12)"
+em68hc12elfb.c: $(srcdir)/emulparams/m68hc12elfb.sh \
+ $(srcdir)/emultempl/m68hc1xelf.em $(ELF_DEPS) \
+ $(srcdir)/scripttempl/elfm68hc12.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68hc12elfb "$(tdir_m68hc12b)"
+em68k4knbsd.c: $(srcdir)/emulparams/m68k4knbsd.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68k4knbsd "$(tdir_m68k4knbsd)"
+em68kaout.c: $(srcdir)/emulparams/m68kaout.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68kaout "$(tdir_m68kaout)"
+em68kaux.c: $(srcdir)/emulparams/m68kaux.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/m68kaux.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68kaux "$(tdir_m68kaux)"
+em68kcoff.c: $(srcdir)/emulparams/m68kcoff.sh \
+ $(srcdir)/emultempl/m68kcoff.em $(srcdir)/scripttempl/m68kcoff.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68kcoff "$(tdir_m68kcoff)"
+em68kelf.c: $(srcdir)/emulparams/m68kelf.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/m68kelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68kelf "$(tdir_m68kelf)"
+em68kelfnbsd.c: $(srcdir)/emulparams/m68kelfnbsd.sh \
+ $(srcdir)/emulparams/m68kelf.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/m68kelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68kelfnbsd "$(tdir_m68kelfnbsd)"
+em68klinux.c: $(srcdir)/emulparams/m68klinux.sh \
+ $(srcdir)/emultempl/linux.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68klinux "$(tdir_m68klinux)"
+em68knbsd.c: $(srcdir)/emulparams/m68knbsd.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68knbsd "$(tdir_m68knbsd)"
+em68kpsos.c: $(srcdir)/emulparams/m68kpsos.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/psos.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68kpsos "$(tdir_m68kpsos)"
+em88kbcs.c: $(srcdir)/emulparams/m88kbcs.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/m88kbcs.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m88kbcs "$(tdir_m88kbcs)"
+emcorepe.c: $(srcdir)/emulparams/mcorepe.sh \
+ $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mcorepe "$(tdir_mcorepe)"
+emipsbig.c: $(srcdir)/emulparams/mipsbig.sh $(srcdir)/emultempl/generic.em \
+ $(srcdir)/scripttempl/mips.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mipsbig "$(tdir_mipsbig)"
+emipsbsd.c: $(srcdir)/emulparams/mipsbsd.sh $(srcdir)/emultempl/generic.em \
+ $(srcdir)/scripttempl/mipsbsd.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mipsbsd "$(tdir_mipsbsd)"
+emipsidt.c: $(srcdir)/emulparams/mipsidt.sh $(srcdir)/emultempl/generic.em \
+ $(srcdir)/emultempl/mipsecoff.em $(srcdir)/scripttempl/mips.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} mipsidt "$(tdir_mipsidt)"
+emipsidtl.c: $(srcdir)/emulparams/mipsidtl.sh $(srcdir)/emultempl/generic.em \
+ $(srcdir)/emultempl/mipsecoff.em $(srcdir)/scripttempl/mips.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} mipsidtl "$(tdir_mipsidtl)"
+emipslit.c: $(srcdir)/emulparams/mipslit.sh $(srcdir)/emultempl/generic.em \
+ $(srcdir)/scripttempl/mips.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mipslit "$(tdir_mipslit)"
+emipslnews.c: $(srcdir)/emulparams/mipslnews.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/mips.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mipslnews "$(tdir_mipslnews)"
+emipspe.c: $(srcdir)/emulparams/mipspe.sh $(srcdir)/emultempl/pe.em \
+ $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mipspe "$(tdir_mipspe)"
+emn10300.c: $(srcdir)/emulparams/mn10300.sh \
+ $(srcdir)/emulparams/mn10200.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mn10300 "$(tdir_mn10300)"
+emn10200.c: $(srcdir)/emulparams/mn10200.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mn10200 "$(tdir_mn10200)"
+emsp430x110.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x110 "$(tdir_msp430x110)" msp430all
+emsp430x112.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x112 "$(tdir_msp430x112)" msp430all
+emsp430x1101.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1101 "$(tdir_msp430x1101)" msp430all
+emsp430x1111.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1111 "$(tdir_msp430x1111)" msp430all
+emsp430x1121.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1121 "$(tdir_msp430x1121)" msp430all
+emsp430x1122.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1122 "$(tdir_msp430x1122)" msp430all
+emsp430x1132.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1132 "$(tdir_msp430x1132)" msp430all
+emsp430x122.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x122 "$(tdir_msp430x122)" msp430all
+emsp430x123.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x123 "$(tdir_msp430x123)" msp430all
+emsp430x1222.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1222 "$(tdir_msp430x1222)" msp430all
+emsp430x1232.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1232 "$(tdir_msp430x1232)" msp430all
+emsp430x133.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x133 "$(tdir_msp430x133)" msp430all
+emsp430x135.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x135 "$(tdir_msp430x135)" msp430all
+emsp430x1331.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1331 "$(tdir_msp430x1331)" msp430all
+emsp430x1351.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1351 "$(tdir_msp430x1351)" msp430all
+emsp430x147.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x147 "$(tdir_msp430x147)" msp430all
+emsp430x148.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x148 "$(tdir_msp430x148)" msp430all
+emsp430x149.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x149 "$(tdir_msp430x149)" msp430all
+emsp430x155.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x155 "$(tdir_msp430x155)" msp430all
+emsp430x156.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x156 "$(tdir_msp430x156)" msp430all
+emsp430x157.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x157 "$(tdir_msp430x157)" msp430all
+emsp430x167.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x167 "$(tdir_msp430x167)" msp430all
+emsp430x168.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x168 "$(tdir_msp430x168)" msp430all
+emsp430x169.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x169 "$(tdir_msp430x169)" msp430all
+emsp430x1610.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1610 "$(tdir_msp430x1610)" msp430all
+emsp430x1611.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1611 "$(tdir_msp430x1611)" msp430all
+emsp430x1612.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1612 "$(tdir_msp430x1612)" msp430all
+emsp430x2101.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x2101 "$(tdir_msp430x2101)" msp430all
+emsp430x2111.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x2111 "$(tdir_msp430x2111)" msp430all
+emsp430x2121.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x2121 "$(tdir_msp430x2121)" msp430all
+emsp430x2131.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x2131 "$(tdir_msp430x2131)" msp430all
+emsp430x311.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x311 "$(tdir_msp430x311)" msp430all
+emsp430x312.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x312 "$(tdir_msp430x312)" msp430all
+emsp430x313.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x313 "$(tdir_msp430x313)" msp430all
+emsp430x314.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x314 "$(tdir_msp430x314)" msp430all
+emsp430x315.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x315 "$(tdir_msp430x315)" msp430all
+emsp430x323.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x323 "$(tdir_msp430x323)" msp430all
+emsp430x325.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x325 "$(tdir_msp430x325)" msp430all
+emsp430x336.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x336 "$(tdir_msp430x336)" msp430all
+emsp430x337.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x337 "$(tdir_msp430x337)" msp430all
+emsp430x412.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x412 "$(tdir_msp430x412)" msp430all
+emsp430x413.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x413 "$(tdir_msp430x413)" msp430all
+emsp430x415.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x415 "$(tdir_msp430x415)" msp430all
+emsp430x417.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x417 "$(tdir_msp430x417)" msp430all
+emsp430xE423.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xE423 "$(tdir_msp430xE423)" msp430all
+emsp430xE425.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xE425 "$(tdir_msp430xE425)" msp430all
+emsp430xE427.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xE427 "$(tdir_msp430xE427)" msp430all
+emsp430xW423.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xW423 "$(tdir_msp430xW423)" msp430all
+emsp430xW425.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xW425 "$(tdir_msp430xW425)" msp430all
+emsp430xW427.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xW427 "$(tdir_msp430xW427)" msp430all
+emsp430xG437.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xG437 "$(tdir_msp430xG437)" msp430all
+emsp430xG438.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xG438 "$(tdir_msp430xG438)" msp430all
+emsp430xG439.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xG439 "$(tdir_msp430xG439)" msp430all
+emsp430x435.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x435 "$(tdir_msp430x435)" msp430all
+emsp430x436.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x436 "$(tdir_msp430x436)" msp430all
+emsp430x437.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x437 "$(tdir_msp430x437)" msp430all
+emsp430x447.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x447 "$(tdir_msp430x447)" msp430all
+emsp430x448.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x448 "$(tdir_msp430x448)" msp430all
+emsp430x449.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x449 "$(tdir_msp430x449)" msp430all
+enews.c: $(srcdir)/emulparams/news.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} news "$(tdir_news)"
+ens32knbsd.c: $(srcdir)/emulparams/ns32knbsd.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/netbsd.em \
+ $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} ns32knbsd "$(tdir_ns32knbsd)"
+eor32.c: $(srcdir)/emulparams/or32.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/or32.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} or32 "$(tdir_or32)"
+eor32elf.c: $(srcdir)/emulparams/or32elf.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} or32elf "$(tdir_or32elf)"
+epc532macha.c: $(srcdir)/emulparams/pc532macha.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} pc532macha "$(tdir_pc532macha)"
+epdp11.c: $(srcdir)/emulparams/pdp11.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} pdp11 "$(tdir_pdp11)"
+epjelf.c: $(srcdir)/emulparams/pjelf.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} pjelf "$(tdir_pjelf)"
+epjlelf.c: $(srcdir)/emulparams/pjlelf.sh $(srcdir)/emulparams/pjelf.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} pjlelf "$(tdir_pjlelf)"
+eppcmacos.c: $(srcdir)/emulparams/ppcmacos.sh \
+ $(srcdir)/emultempl/aix.em $(srcdir)/scripttempl/aix.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} ppcmacos "$(tdir_ppcmacos)"
+eppcnw.c: $(srcdir)/emulparams/ppcnw.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/nw.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} ppcnw "$(tdir_ppcnw)"
+eppcpe.c: $(srcdir)/emulparams/ppcpe.sh \
+ $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/ppcpe.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} ppcpe "$(tdir_ppcpe)"
+eppclynx.c: $(srcdir)/emulparams/ppclynx.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} ppclynx "$(tdir_ppclynx)"
+eriscix.c: $(srcdir)/emulparams/riscix.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} riscix "$(tdir_riscix)"
+escore3_elf.c: $(srcdir)/emulparams/scoreelf.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/scoreelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} score3_elf "$(tdir_score3_elf)" scoreelf
+escore7_elf.c: $(srcdir)/emulparams/scoreelf.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/scoreelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} score7_elf "$(tdir_score7_elf)" scoreelf
+esh.c: $(srcdir)/emulparams/sh.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/sh.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} sh "$(tdir_sh)"
+eshelf.c: $(srcdir)/emulparams/shelf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf "$(tdir_shelf)"
+eshelf32.c: $(srcdir)/emulparams/shelf32.sh \
+ $(BFDDIR)/libbfd.h $(INCDIR)/libiberty.h \
+ $(srcdir)/emultempl/sh64elf.em $(INCDIR)/elf/sh.h $(BFDDIR)/elf-bfd.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf32 "$(tdir_shelf32)"
+eshelf32_linux.c: $(srcdir)/emulparams/shelf32_linux.sh \
+ $(srcdir)/emulparams/shelf32.sh \
+ $(BFDDIR)/libbfd.h $(INCDIR)/libiberty.h \
+ $(srcdir)/emultempl/sh64elf.em $(INCDIR)/elf/sh.h $(BFDDIR)/elf-bfd.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf32_linux "$(tdir_shelf32_linux)"
+eshelf32_nbsd.c: $(srcdir)/emulparams/shelf32_nbsd.sh \
+ $(srcdir)/emulparams/shelf32.sh \
+ $(BFDDIR)/libbfd.h $(INCDIR)/libiberty.h \
+ $(srcdir)/emultempl/sh64elf.em $(INCDIR)/elf/sh.h $(BFDDIR)/elf-bfd.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf32_nbsd "$(tdir_shelf32_nbsd)"
+eshelf64.c: $(srcdir)/emulparams/shelf64.sh $(srcdir)/emulparams/shelf32.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf64 "$(tdir_shelf64)"
+eshelf64_nbsd.c: $(srcdir)/emulparams/shelf64_nbsd.sh \
+ $(srcdir)/emulparams/shelf32_nbsd.sh $(srcdir)/emulparams/shelf32.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf64_nbsd "$(tdir_shelf64_nbsd)"
+eshelf_fd.c: $(srcdir)/emulparams/shelf_fd.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf_fd "$(tdir_shelf_fd)"
+eshlelf_fd.c: $(srcdir)/emulparams/shlelf_fd.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf_fd "$(tdir_shlelf_fd)"
+eshelf_linux.c: $(srcdir)/emulparams/shelf_linux.sh \
+ $(srcdir)/emulparams/shlelf_linux.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf_linux "$(tdir_shelf_linux)"
+eshlelf_linux.c: $(srcdir)/emulparams/shlelf_linux.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf_linux "$(tdir_shlelf_linux)"
+eshelf_nbsd.c: $(srcdir)/emulparams/shelf_nbsd.sh \
+ $(srcdir)/emulparams/shelf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf_nbsd "$(tdir_shelf_nbsd)"
+eshelf_nto.c: $(srcdir)/emulparams/shelf_nto.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf_nto "$(tdir_shelf_nto)"
+eshelf_vxworks.c: $(srcdir)/emulparams/shelf_vxworks.sh \
+ $(srcdir)/emulparams/vxworks.sh $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc \
+ $(srcdir)/emultempl/vxworks.em ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf_vxworks "$(tdir_shelf_vxworks)"
+eshlelf_nbsd.c: $(srcdir)/emulparams/shlelf_nbsd.sh \
+ $(srcdir)/emulparams/shelf_nbsd.sh \
+ $(srcdir)/emulparams/shelf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf_nbsd "$(tdir_shlelf_nbsd)"
+eshlelf_nto.c: $(srcdir)/emulparams/shlelf_nto.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf_nto "$(tdir_shlelf_nto)"
+eshlelf_vxworks.c: $(srcdir)/emulparams/shlelf_vxworks.sh \
+ $(srcdir)/emulparams/shelf_vxworks.sh $(srcdir)/emulparams/vxworks.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc $(srcdir)/emultempl/vxworks.em \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf_vxworks "$(tdir_shlelf_vxworks)"
+eshelf_uclinux.c: $(srcdir)/emulparams/shelf_uclinux.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf_uclinux "$(tdir_shelf_uclinux)"
+eshlelf.c: $(srcdir)/emulparams/shlelf.sh \
+ $(srcdir)/emulparams/shelf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf "$(tdir_shlelf)"
+eshlsymbian.c: $(srcdir)/emulparams/shlsymbian.sh \
+ $(srcdir)/emulparams/shelf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf32sh-symbian.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlsymbian "$(tdir_shlelf)"
+eshlelf32.c: $(srcdir)/emulparams/shlelf32.sh \
+ $(BFDDIR)/libbfd.h $(INCDIR)/libiberty.h $(srcdir)/emulparams/shelf32.sh \
+ $(srcdir)/emultempl/sh64elf.em $(INCDIR)/elf/sh.h $(BFDDIR)/elf-bfd.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf32 "$(tdir_shlelf32)"
+eshlelf32_linux.c: $(srcdir)/emulparams/shlelf32_linux.sh \
+ $(srcdir)/emulparams/shelf32_linux.sh $(srcdir)/emulparams/shelf32.sh \
+ $(BFDDIR)/libbfd.h $(INCDIR)/libiberty.h \
+ $(srcdir)/emultempl/sh64elf.em $(INCDIR)/elf/sh.h $(BFDDIR)/elf-bfd.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf32_linux "$(tdir_shlelf32_linux)"
+eshlelf32_nbsd.c: $(srcdir)/emulparams/shlelf32_nbsd.sh \
+ $(srcdir)/emulparams/shelf32_nbsd.sh $(srcdir)/emulparams/shelf32.sh \
+ $(BFDDIR)/libbfd.h $(INCDIR)/libiberty.h \
+ $(srcdir)/emultempl/sh64elf.em $(INCDIR)/elf/sh.h $(BFDDIR)/elf-bfd.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf32_nbsd "$(tdir_shlelf32_nbsd)"
+eshlelf64.c: $(srcdir)/emulparams/shlelf64.sh \
+ $(srcdir)/emulparams/shelf64.sh $(srcdir)/emulparams/shelf32.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf64 "$(tdir_shlelf64)"
+eshlelf64_nbsd.c: $(srcdir)/emulparams/shlelf64_nbsd.sh \
+ $(srcdir)/emulparams/shelf64_nbsd.sh \
+ $(srcdir)/emulparams/shelf32_nbsd.sh $(srcdir)/emulparams/shelf32.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf64_nbsd "$(tdir_shlelf64_nbsd)"
+eshl.c: $(srcdir)/emulparams/shl.sh \
+ $(srcdir)/emulparams/sh.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/sh.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shl "$(tdir_shl)"
+eshpe.c: $(srcdir)/emulparams/shpe.sh \
+ $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shpe "$(tdir_shl)"
+esparcaout.c: $(srcdir)/emulparams/sparcaout.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} sparcaout "$(tdir_sparcaout)"
+esparclinux.c: $(srcdir)/emulparams/sparclinux.sh \
+ $(srcdir)/emultempl/linux.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} sparclinux "$(tdir_sparclinux)"
+esparcnbsd.c: $(srcdir)/emulparams/sparcnbsd.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} sparcnbsd "$(tdir_sparcnbsd)"
+est2000.c: $(srcdir)/emulparams/st2000.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/st2000.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} st2000 "$(tdir_st2000)"
+esun3.c: $(srcdir)/emulparams/sun3.sh \
+ $(srcdir)/emultempl/sunos.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} sun3 "$(tdir_sun3)"
+esun4.c: $(srcdir)/emulparams/sun4.sh \
+ $(srcdir)/emultempl/sunos.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} sun4 "$(tdir_sun4)"
+etic30aout.c: $(srcdir)/emulparams/tic30aout.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/tic30aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} tic30aout "$(tdir_tic30aout)"
+etic30coff.c: $(srcdir)/emulparams/tic30coff.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/tic30coff.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} tic30coff "$(tdir_tic30coff)"
+etic3xcoff.c: $(srcdir)/emulparams/tic3xcoff.sh \
+ $(srcdir)/emultempl/ticoff.em $(srcdir)/scripttempl/tic4xcoff.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} tic3xcoff "$(tdir_tic4xcoff)"
+etic3xcoff_onchip.c: $(srcdir)/emulparams/tic3xcoff_onchip.sh \
+ $(srcdir)/emultempl/ticoff.em $(srcdir)/scripttempl/tic4xcoff.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} tic3xcoff_onchip "$(tdir_tic4xcoff)"
+etic4xcoff.c: $(srcdir)/emulparams/tic4xcoff.sh \
+ $(srcdir)/emultempl/ticoff.em $(srcdir)/scripttempl/tic4xcoff.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} tic4xcoff "$(tdir_tic4xcoff)"
+etic54xcoff.c: $(srcdir)/emulparams/tic54xcoff.sh \
+ $(srcdir)/emultempl/ticoff.em $(srcdir)/scripttempl/tic54xcoff.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} tic54xcoff "$(tdir_tic54xcoff)"
+etic80coff.c: $(srcdir)/emulparams/tic80coff.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/tic80coff.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} tic80coff "$(tdir_tic80coff)"
+evanilla.c: $(srcdir)/emulparams/vanilla.sh \
+ $(srcdir)/emultempl/vanilla.em $(srcdir)/scripttempl/vanilla.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} vanilla "$(tdir_vanilla)"
+evax.c: $(srcdir)/emulparams/vax.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} vax "$(tdir_vax)"
+evaxnbsd.c: $(srcdir)/emulparams/vaxnbsd.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} vaxnbsd "$(tdir_vaxnbsd)"
+evsta.c: $(srcdir)/emulparams/vsta.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} vsta "$(tdir_vsta)"
+ev850.c: $(srcdir)/emulparams/v850.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/v850.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} v850 "$(tdir_v850)"
+ew65.c: $(srcdir)/emulparams/w65.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/w65.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} w65 "$(tdir_w65)"
+ez80.c: $(srcdir)/emulparams/z80.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/z80.em \
+ $(srcdir)/scripttempl/z80.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} z80 "$(tdir_z80)"
+ez8001.c: $(srcdir)/emulparams/z8001.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/z8000.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} z8001 "$(tdir_z8001)"
+ez8002.c: $(srcdir)/emulparams/z8002.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/z8000.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} z8002 "$(tdir_z8002)"
+
+# We need this for automake to use YLWRAP.
+EXTRA_ld_new_SOURCES = deffilep.y ldlex.l
+# Allow dependency tracking to work for these files, too.
+EXTRA_ld_new_SOURCES += pep-dll.c pe-dll.c
+
+ld_new_SOURCES = ldgram.y ldlex-wrapper.c lexsup.c ldlang.c mri.c ldctor.c ldmain.c \
+ ldwrite.c ldexp.c ldemul.c ldver.c ldmisc.c ldfile.c ldcref.c $(PLUGIN_C)
+ld_new_DEPENDENCIES = $(EMULATION_OFILES) $(EMUL_EXTRA_OFILES) $(BFDLIB) $(LIBIBERTY) $(LIBINTL_DEP)
+ld_new_LDADD = $(EMULATION_OFILES) $(EMUL_EXTRA_OFILES) $(BFDLIB) $(LIBIBERTY) $(LIBINTL)
+
+# Dependency tracking for the generated emulation files.
+EXTRA_ld_new_SOURCES += $(ALL_EMULATION_SOURCES) $(ALL_64_EMULATION_SOURCES)
+
+# This is the real libbfd.a created by libtool.
+TESTBFDLIB = @TESTBFDLIB@
+
+check-DEJAGNU: site.exp
+ srcroot=`cd $(srcdir) && pwd`; export srcroot; \
+ r=`pwd`; export r; \
+ LC_COLLATE=; LC_ALL=; LANG=; export LC_COLLATE LC_ALL LANG; \
+ EXPECT=$(EXPECT); export EXPECT; \
+ runtest=$(RUNTEST); \
+ if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
+ $$runtest --tool $(DEJATOOL) --srcdir $${srcroot}/testsuite \
+ CC="$(CC_FOR_TARGET)" CFLAGS="$(CFLAGS)" \
+ CXX="$(CXX_FOR_TARGET)" CXXFLAGS="$(CXXFLAGS)" \
+ CC_FOR_HOST="$(CC)" CFLAGS_FOR_HOST="$(CFLAGS)" \
+ OFILES="$(OFILES)" BFDLIB="$(TESTBFDLIB)" \
+ LIBIBERTY="$(LIBIBERTY) $(LIBINTL)" LIBS="$(LIBS)" \
+ DO_COMPARE="`echo '$(do_compare)' | sed -e 's,\\$$,,g'`" \
+ $(RUNTESTFLAGS); \
+ else echo "WARNING: could not find \`runtest'" 1>&2; :;\
+ fi
+
+# Rules for testing by relinking ld itself.
+# A similar test is in the testsuite. This target is for ease of use
+# when porting ld.
+
+ld-partial.@OBJEXT@: ld-new$(EXEEXT)
+ ./ld-new$(EXEEXT) $(HOSTING_EMU) -o ld-partial.@OBJEXT@ -r $(OFILES)
+ld1$(EXEEXT): ld-partial.@OBJEXT@
+ ./ld-new$(EXEEXT) $(HOSTING_EMU) -o ld1$(EXEEXT) $(HOSTING_CRT0) ld-partial.@OBJEXT@ $(TESTBFDLIB) $(LIBIBERTY) $(HOSTING_LIBS) $(LIBS)
+
+ld1-full$(EXEEXT): ld-new
+ ./ld-new$(EXEEXT) $(HOSTING_EMU) -o ld1-full$(EXEEXT) $(HOSTING_CRT0) $(OFILES) $(TESTBFDLIB) $(LIBIBERTY) $(HOSTING_LIBS) $(LIBS)
+
+ld2$(EXEEXT): ld1$(EXEEXT)
+ ./ld1$(EXEEXT) $(HOSTING_EMU) -o ld2$(EXEEXT) $(HOSTING_CRT0) $(OFILES) $(TESTBFDLIB) $(LIBIBERTY) $(HOSTING_LIBS) $(LIBS)
+
+ld3$(EXEEXT): ld2$(EXEEXT)
+ ./ld2$(EXEEXT) $(HOSTING_EMU) -o ld3$(EXEEXT) $(HOSTING_CRT0) $(OFILES) $(TESTBFDLIB) $(LIBIBERTY) $(HOSTING_LIBS) $(LIBS)
+
+bootstrap: ld3$(EXEEXT)
+ cmp ld2$(EXEEXT) ld3$(EXEEXT)
+
+.PHONY: bootstrap
+
+# A test program for C++ constructors and destructors.
+# This test is now in the testsuite.
+#
+#cdtest: cdtest-main.@OBJEXT@ cdtest-bar.@OBJEXT@ cdtest-foo.@OBJEXT@ ld.new
+# ./ld.new $(HOSTING_EMU) -o cdtest $(HOSTING_CRT0) \
+# cdtest-main.@OBJEXT@ cdtest-bar.@OBJEXT@ cdtest-foo.@OBJEXT@ $(HOSTING_LIBS)
+#
+#cdtest.out: cdtest
+# ./cdtest > cdtest.tmp
+# mv cdtest.tmp cdtest.out
+#
+#cdtest-ur.@OBJEXT@: cdtest-main.@OBJEXT@ cdtest-bar.@OBJEXT@ cdtest-foo.@OBJEXT@ ld.new
+# ./ld.new $(HOSTING_EMU) -o cdtest-ur.@OBJEXT@ -Ur cdtest-main.@OBJEXT@ \
+# cdtest-bar.@OBJEXT@ cdtest-foo.@OBJEXT@
+#
+#cdtest-ur: cdtest-ur.@OBJEXT@
+# ./ld.new $(HOSTING_EMU) -o cdtest-ur $(HOSTING_CRT0) cdtest-ur.@OBJEXT@ \
+# $(HOSTING_LIBS)
+#
+#cdtest-ur.out: cdtest-ur
+# ./cdtest-ur > cdtest-ur.tmp
+# mv cdtest-ur.tmp cdtest-ur.out
+#
+#check-cdtest: cdtest.out cdtest-ur.out $(srcdir)/cdtest.exp
+# diff $(srcdir)/cdtest.exp cdtest.out
+# diff $(srcdir)/cdtest.exp cdtest-ur.out
+#
+#.PHONY: check-cdtest
+
+# END OF CHECK TARGETS
+
+#
+# Build a dummy plugin using libtool.
+#
+if ENABLE_PLUGINS
+noinst_LTLIBRARIES = libldtestplug.la
+libldtestplug_la_SOURCES = testplug.c
+libldtestplug_la_CFLAGS= -g -O2
+libldtestplug_la_LDFLAGS = -no-undefined -rpath /nowhere
+endif
+
+# DOCUMENTATION TARGETS
+# Manual configuration file; not usually attached to normal configuration,
+# because almost all configs use "gen" version of manual.
+# Set DOCVER above to change.
+configdoc.texi: ${DOCVER}-doc.texi
+ cp ${srcdir}/${DOCVER}-doc.texi ./configdoc.texi
+ chmod u+w ./configdoc.texi
+
+# Build the man page from the texinfo file
+# The sed command removes the no-adjust Nroff command so that
+# the man output looks standard.
+ld.1: $(srcdir)/ld.texinfo configdoc.texi
+ touch $@
+ -$(TEXI2POD) $(MANCONF) < $(srcdir)/ld.texinfo > ld.pod
+ -($(POD2MAN) ld.pod | \
+ sed -e '/^.if n .na/d' > $@.T$$$$ && \
+ mv -f $@.T$$$$ $@) || \
+ (rm -f $@.T$$$$ && exit 1)
+ rm -f ld.pod
+
+MAINTAINERCLEANFILES = configdoc.texi ld.1
+
+# We want to reconfigure if configure.host or configure.tgt changes. We
+# extract version from bfd/configure.in, so we must depend on that also.
+CONFIG_STATUS_DEPENDENCIES = $(srcdir)/configure.host $(srcdir)/configure.tgt \
+ $(srcdir)/../bfd/configure.in
+
+MOSTLYCLEANFILES = $(STAGESTUFF) ld1$(EXEEXT) ld2$(EXEEXT) ld3$(EXEEXT) \
+ ldemul-list.h crtbegin.@OBJEXT@ crtend.@OBJEXT@ ld.log ld.sum
+mostlyclean-local:
+ -rm -rf tmpdir
+CLEANFILES = dep.sed DEP DEPA DEP1 DEP2 spu_ovl.s spu_ovl.@OBJEXT@ spu_icache.s spu_icache.@OBJEXT@
+
+.PHONY: install-exec-local install-data-local
+
+install-exec-local: ld-new$(EXEEXT) install-binPROGRAMS
+ $(mkinstalldirs) $(DESTDIR)$(tooldir)/bin
+ n=`echo $(installed_linker) | sed '$(transform)'`; \
+ if test "$(bindir)" != "$(tooldir)/bin"; then \
+ rm -f $(DESTDIR)$(tooldir)/bin/$(installed_linker)$(EXEEXT); \
+ ln $(DESTDIR)$(bindir)/$$n$(EXEEXT) $(DESTDIR)$(tooldir)/bin/$(installed_linker)$(EXEEXT) >/dev/null 2>/dev/null \
+ || $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) ld-new$(EXEEXT) $(DESTDIR)$(tooldir)/bin/$(installed_linker)$(EXEEXT); \
+ fi; \
+ if test "x$(install_as_default)" = "xyes"; then \
+ ld=`echo ld | sed '$(transform)'`; \
+ rm -f $(DESTDIR)$(bindir)/$$ld$(EXEEXT); \
+ ln $(DESTDIR)$(bindir)/$$n$(EXEEXT) $(DESTDIR)$(bindir)/$$ld$(EXEEXT) >/dev/null 2>/dev/null \
+ || $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) ld-new$(EXEEXT) $(DESTDIR)$(bindir)/$$ld$(EXEEXT); \
+ if test "$(bindir)" != "$(tooldir)/bin"; then \
+ rm -f $(DESTDIR)$(tooldir)/bin/ld$(EXEEXT); \
+ ln $(DESTDIR)$(bindir)/$$n$(EXEEXT) $(DESTDIR)$(tooldir)/bin/ld$(EXEEXT) >/dev/null 2>/dev/null \
+ || $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) ld-new$(EXEEXT) $(DESTDIR)$(tooldir)/bin/ld$(EXEEXT); \
+ fi; \
+ fi
+
+install-data-local:
+ $(mkinstalldirs) $(DESTDIR)$(scriptdir)/ldscripts
+ for f in ldscripts/*; do \
+ $(INSTALL_DATA) $$f $(DESTDIR)$(scriptdir)/$$f ; \
+ done
+
+# Stuff that should be included in a distribution. The diststuff
+# target is run by the taz target in ../Makefile.in.
+EXTRA_DIST = ldgram.c ldgram.h ldlex.c emultempl/spu_ovl.@OBJEXT@_c \
+ emultempl/spu_icache.@OBJEXT@_c deffilep.c deffilep.h $(man_MANS)
+diststuff: info $(EXTRA_DIST)
+
+# Both info (ld.info) and ld.1 depend on configdoc.texi.
+# But info isn't a direct target. Make info-recursive to depend on
+# ld.1 to support parallel build.
+info-recursive: ld.1
+
+DISTCLEANFILES = tdirs site.exp site.bak stringify.sed
+distclean-local:
+ rm -rf ldscripts
+
+MAINTAINERCLEANFILES += ld.info
+
+# Automake 1.9 will only build info files in the objdir if they are
+# mentioned in DISTCLEANFILES. It doesn't have to be unconditional,
+# though, so we use a bogus condition.
+if GENINSRC_NEVER
+DISTCLEANFILES += ld.info
+endif
diff --git a/binutils-2.21/ld/Makefile.in b/binutils-2.21/ld/Makefile.in
new file mode 100644
index 0000000..129dd54
--- /dev/null
+++ b/binutils-2.21/ld/Makefile.in
@@ -0,0 +1,3426 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+bin_PROGRAMS = ld-new$(EXEEXT)
+
+# Automake 1.9 will only build info files in the objdir if they are
+# mentioned in DISTCLEANFILES. It doesn't have to be unconditional,
+# though, so we use a bogus condition.
+@GENINSRC_NEVER_TRUE@am__append_1 = ld.info
+subdir = .
+DIST_COMMON = NEWS README ChangeLog $(srcdir)/Makefile.in \
+ $(srcdir)/Makefile.am $(top_srcdir)/configure \
+ $(am__configure_deps) $(srcdir)/config.in \
+ $(srcdir)/../mkinstalldirs $(top_srcdir)/po/Make-in ldgram.h \
+ ldgram.c deffilep.h deffilep.c ldlex.c $(srcdir)/../depcomp \
+ $(srcdir)/../ylwrap $(ld_TEXINFOS)
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/../bfd/acinclude.m4 \
+ $(top_srcdir)/../config/zlib.m4 \
+ $(top_srcdir)/../bfd/warning.m4 $(top_srcdir)/../config/acx.m4 \
+ $(top_srcdir)/../config/depstand.m4 \
+ $(top_srcdir)/../config/gettext-sister.m4 \
+ $(top_srcdir)/../config/largefile.m4 \
+ $(top_srcdir)/../config/lead-dot.m4 \
+ $(top_srcdir)/../config/nls.m4 \
+ $(top_srcdir)/../config/override.m4 \
+ $(top_srcdir)/../config/plugins.m4 \
+ $(top_srcdir)/../config/po.m4 \
+ $(top_srcdir)/../config/progtest.m4 \
+ $(top_srcdir)/../libtool.m4 $(top_srcdir)/../ltoptions.m4 \
+ $(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \
+ $(top_srcdir)/../lt~obsolete.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = po/Makefile.in
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libldtestplug_la_LIBADD =
+@ENABLE_PLUGINS_TRUE@am_libldtestplug_la_OBJECTS = \
+@ENABLE_PLUGINS_TRUE@ libldtestplug_la-testplug.lo
+libldtestplug_la_OBJECTS = $(am_libldtestplug_la_OBJECTS)
+libldtestplug_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libldtestplug_la_CFLAGS) \
+ $(CFLAGS) $(libldtestplug_la_LDFLAGS) $(LDFLAGS) -o $@
+@ENABLE_PLUGINS_TRUE@am_libldtestplug_la_rpath =
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(infodir)" \
+ "$(DESTDIR)$(man1dir)"
+PROGRAMS = $(bin_PROGRAMS)
+@ENABLE_PLUGINS_TRUE@am__objects_1 = plugin.$(OBJEXT)
+am_ld_new_OBJECTS = ldgram.$(OBJEXT) ldlex-wrapper.$(OBJEXT) \
+ lexsup.$(OBJEXT) ldlang.$(OBJEXT) mri.$(OBJEXT) \
+ ldctor.$(OBJEXT) ldmain.$(OBJEXT) ldwrite.$(OBJEXT) \
+ ldexp.$(OBJEXT) ldemul.$(OBJEXT) ldver.$(OBJEXT) \
+ ldmisc.$(OBJEXT) ldfile.$(OBJEXT) ldcref.$(OBJEXT) \
+ $(am__objects_1)
+ld_new_OBJECTS = $(am_ld_new_OBJECTS)
+am__DEPENDENCIES_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/../depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+@MAINTAINER_MODE_FALSE@am__skiplex = test -f $@ ||
+LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS)
+LTLEXCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(LEX) $(LFLAGS) $(AM_LFLAGS)
+YLWRAP = $(top_srcdir)/../ylwrap
+@MAINTAINER_MODE_FALSE@am__skipyacc = test -f $@ ||
+YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
+LTYACCCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(YACC) $(YFLAGS) $(AM_YFLAGS)
+SOURCES = $(libldtestplug_la_SOURCES) $(ld_new_SOURCES) \
+ $(EXTRA_ld_new_SOURCES)
+INFO_DEPS = ld.info
+am__TEXINFO_TEX_DIR = $(srcdir)/$(top_srcdir)/../texinfo
+DVIS = ld.dvi
+PDFS = ld.pdf
+PSS = ld.ps
+HTMLS = ld.html
+TEXINFOS = ld.texinfo
+TEXI2PDF = $(TEXI2DVI) --pdf --batch
+MAKEINFOHTML = $(MAKEINFO) --html
+AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
+DVIPS = dvips
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+man1dir = $(mandir)/man1
+NROFF = nroff
+MANS = $(man_MANS)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS
+ETAGS = etags
+CTAGS = ctags
+DEJATOOL = $(PACKAGE)
+RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir
+DIST_SUBDIRS = $(SUBDIRS)
+transform = s/^ld-new$$/$(installed_linker)/;@program_transform_name@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMUL = @EMUL@
+EMULATION_LIBPATH = @EMULATION_LIBPATH@
+EMULATION_OFILES = @EMULATION_OFILES@
+EMUL_EXTRA_OFILES = @EMUL_EXTRA_OFILES@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GENCAT = @GENCAT@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+HDEFINES = @HDEFINES@
+
+#stuff for self hosting (can be overridden in config file).
+HOSTING_CRT0 = @HOSTING_CRT0@
+HOSTING_LIBS = @HOSTING_LIBS@
+INCINTL = @INCINTL@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LEX = `if [ -f ../flex/flex ]; then echo ../flex/flex; else echo @LEX@; fi`
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBINTL = @LIBINTL@
+LIBINTL_DEP = @LIBINTL_DEP@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+
+# Search path to override the default search path for -lfoo libraries.
+# If LIB_PATH is empty, the ones in the script (if any) are left alone.
+# (The default is usually /lib:/usr/lib:/usr/local/lib, unless building
+# a cross-linker, in which case the default is empty. See genscripts.sh.)
+# Otherwise, they are replaced with the ones given in LIB_PATH,
+# which may have the form: LIB_PATH=/lib:/usr/local/lib. This can be set
+# when the linker is configured via the --with-lib-path configure switch.
+LIB_PATH = @LIB_PATH@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+NATIVE_LIB_DIRS = @NATIVE_LIB_DIRS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NO_WERROR = @NO_WERROR@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRINGIFY = @STRINGIFY@
+STRIP = @STRIP@
+TARGET_SYSTEM_ROOT = @TARGET_SYSTEM_ROOT@
+TARGET_SYSTEM_ROOT_DEFINE = @TARGET_SYSTEM_ROOT_DEFINE@
+
+# This is the real libbfd.a created by libtool.
+TESTBFDLIB = @TESTBFDLIB@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+YACC = `if [ -f ../bison/bison ]; then echo ../bison/bison -y -L$(srcdir)/../bison/; else echo @YACC@; fi`
+YFLAGS = -d
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+do_compare = @do_compare@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_as_default = @install_as_default@
+install_sh = @install_sh@
+installed_linker = @installed_linker@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+use_sysroot = @use_sysroot@
+AUTOMAKE_OPTIONS = dejagnu no-texinfo.tex no-dist foreign
+ACLOCAL_AMFLAGS = -I .. -I ../config -I ../bfd
+TEXINFO_TEX = $(top_srcdir)/../texinfo/texinfo.tex
+SUBDIRS = po
+tooldir = $(exec_prefix)/$(target_alias)
+
+# Automake 1.10+ disables lex and yacc output file regeneration if
+# maintainer mode is disabled. Avoid this.
+am__skiplex =
+am__skipyacc =
+AM_CFLAGS = $(WARN_CFLAGS)
+@ENABLE_PLUGINS_FALSE@PLUGIN_C =
+
+# Conditionally enable the plugin interface.
+@ENABLE_PLUGINS_TRUE@PLUGIN_C = plugin.c
+@ENABLE_PLUGINS_FALSE@PLUGIN_H =
+@ENABLE_PLUGINS_TRUE@PLUGIN_H = plugin.h
+@ENABLE_PLUGINS_FALSE@PLUGIN_OBJECT =
+@ENABLE_PLUGINS_TRUE@PLUGIN_OBJECT = plugin.@OBJEXT@
+@ENABLE_PLUGINS_FALSE@PLUGIN_CFLAGS =
+@ENABLE_PLUGINS_TRUE@PLUGIN_CFLAGS = -DENABLE_PLUGINS
+
+# We put the scripts in the directory $(scriptdir)/ldscripts.
+# We can't put the scripts in $(datadir) because the SEARCH_DIR
+# directives need to be different for native and cross linkers.
+scriptdir = $(tooldir)/lib
+BASEDIR = $(srcdir)/..
+BFDDIR = $(BASEDIR)/bfd
+INCDIR = $(BASEDIR)/include
+
+# What version of the manual to build
+DOCVER = gen
+
+# Options to extract the man page from ld.texinfo
+MANCONF = -Dman
+TEXI2POD = perl $(BASEDIR)/etc/texi2pod.pl $(AM_MAKEINFOFLAGS)
+POD2MAN = pod2man --center="GNU Development Tools" \
+ --release="binutils-$(VERSION)" --section=1 --date=" "
+
+HOSTING_EMU = -m $(EMUL)
+
+# Setup the testing framework, if you have one
+EXPECT = expect
+RUNTEST = runtest
+RUNTESTFLAGS =
+CC_FOR_TARGET = ` \
+ if [ -f $$r/../gcc/xgcc ] ; then \
+ if [ -f $$r/../newlib/Makefile ] ; then \
+ echo $$r/../gcc/xgcc -B$$r/../gcc/ -idirafter $$r/../newlib/targ-include -idirafter $${srcroot}/../newlib/libc/include -nostdinc; \
+ else \
+ echo $$r/../gcc/xgcc -B$$r/../gcc/; \
+ fi; \
+ else \
+ if [ "@host@" = "@target@" ] ; then \
+ echo $(CC); \
+ else \
+ echo gcc | sed '$(transform)'; \
+ fi; \
+ fi`
+
+CXX = g++
+CXX_FOR_TARGET = ` \
+ if [ -f $$r/../gcc/g++ ] ; then \
+ if [ -f $$r/../newlib/Makefile ] ; then \
+ echo $$r/../gcc/g++ -B$$r/../gcc/ -idirafter $$r/../newlib/targ-include -idirafter $${srcroot}/../newlib/libc/include -nostdinc; \
+ else \
+ echo $$r/../gcc/g++ -B$$r/../gcc/; \
+ fi; \
+ else \
+ if [ "@host@" = "@target@" ] ; then \
+ echo $(CXX); \
+ else \
+ echo g++ | sed '$(transform)'; \
+ fi; \
+ fi`
+
+info_TEXINFOS = ld.texinfo
+ld_TEXINFOS = configdoc.texi
+noinst_TEXINFOS = ldint.texinfo
+man_MANS = ld.1
+AM_MAKEINFOFLAGS = -I $(srcdir) -I $(BFDDIR)/doc -I ../bfd/doc \
+ -I $(top_srcdir)/../libiberty
+
+TEXI2DVI = texi2dvi -I $(srcdir) -I $(BFDDIR)/doc -I ../bfd/doc \
+ -I $(top_srcdir)/../libiberty
+
+AM_CPPFLAGS = -I. -I$(srcdir) -I../bfd -I$(BFDDIR) -I$(INCDIR) \
+ @INCINTL@ $(HDEFINES) $(CFLAGS) $(PLUGIN_CFLAGS) \
+ -DLOCALEDIR="\"$(datadir)/locale\""
+
+BFDLIB = ../bfd/libbfd.la
+LIBIBERTY = ../libiberty/libiberty.a
+ALL_EMULATION_SOURCES = \
+ eaixppc.c \
+ eaixrs6.c \
+ ealpha.c \
+ ealphavms.c \
+ earcelf.c \
+ earm_epoc_pe.c \
+ earm_wince_pe.c \
+ earmaoutb.c \
+ earmaoutl.c \
+ earmcoff.c \
+ earmelf.c \
+ earmelfb.c \
+ earmelf_fbsd.c \
+ earmelf_linux.c \
+ earmelf_linux_eabi.c \
+ earmelfb_linux.c \
+ earmelfb_linux_eabi.c \
+ earmelf_nbsd.c \
+ earmelfb_nbsd.c \
+ earmelf_vxworks.c \
+ earmnto.c \
+ earmnbsd.c \
+ earmpe.c \
+ earmsymbian.c \
+ eavr2.c \
+ eavr1.c \
+ eavr25.c \
+ eavr3.c \
+ eavr31.c \
+ eavr35.c \
+ eavr4.c \
+ eavr5.c \
+ eavr51.c \
+ eavr6.c \
+ ecoff_i860.c \
+ ecoff_sparc.c \
+ eelf32_spu.c \
+ ecrisaout.c \
+ ecriself.c \
+ ecrislinux.c \
+ ed10velf.c \
+ ed30v_e.c \
+ ed30v_o.c \
+ ed30velf.c \
+ edelta68.c \
+ eelf32_dlx.c \
+ eelf32_i960.c \
+ eelf32_i860.c \
+ eelf32_sparc.c \
+ eelf32_sparc_sol2.c \
+ eelf32_sparc_vxworks.c \
+ eelf32_tic6x_be.c \
+ eelf32_tic6x_le.c \
+ eelf32b4300.c \
+ eelf32bfin.c \
+ eelf32bfinfd.c \
+ eelf32cr16.c \
+ eelf32cr16c.c \
+ eelf32bmip.c \
+ eelf32bmipn32.c \
+ eelf32btsmip.c \
+ eelf32crx.c \
+ eelf32btsmipn32.c \
+ eelf32ltsmip.c \
+ eelf32ltsmipn32.c \
+ eelf32ebmip.c \
+ eelf32ebmipvxworks.c \
+ eelf32elmip.c \
+ eelf32elmipvxworks.c \
+ eelf32fr30.c \
+ eelf32frv.c \
+ eelf32moxie.c \
+ eelf32i370.c \
+ eelf32ip2k.c \
+ eelf32iq2000.c \
+ eelf32iq10.c \
+ eelf32lm32.c \
+ eelf32lm32fd.c \
+ eelf32l4300.c \
+ eelf32lmip.c \
+ eelf32lppc.c \
+ eelf32lppcnto.c \
+ eelf32lppcsim.c \
+ eelf32m32c.c \
+ eelf32mcore.c \
+ eelf32mep.c \
+ eelf32mb_linux.c \
+ eelf32microblaze.c \
+ eelf32mipswindiss.c \
+ eelf32mt.c \
+ eelf32openrisc.c \
+ eelf32ppc.c \
+ eelf32ppc_fbsd.c \
+ eelf32ppclinux.c \
+ eelf32ppcnto.c \
+ eelf32ppcsim.c \
+ eelf32ppcwindiss.c \
+ eelf32ppcvxworks.c \
+ eelf32rx.c \
+ eelf32vax.c \
+ eelf32xc16x.c \
+ eelf32xc16xl.c \
+ eelf32xc16xs.c \
+ eelf32xstormy16.c \
+ eelf32xtensa.c \
+ eelf_i386.c \
+ eelf_i386_be.c \
+ eelf_i386_chaos.c \
+ eelf_i386_fbsd.c \
+ eelf_i386_ldso.c \
+ eelf_i386_sol2.c \
+ eelf_i386_vxworks.c \
+ eelf_s390.c \
+ egld960.c \
+ egld960coff.c \
+ eh8300.c \
+ eh8300h.c \
+ eh8300s.c \
+ eh8300elf.c \
+ eh8300hn.c \
+ eh8300sn.c \
+ eh8300sx.c \
+ eh8300helf.c \
+ eh8300self.c \
+ eh8300hnelf.c \
+ eh8300snelf.c \
+ eh8300sxelf.c \
+ eh8300sxn.c \
+ eh8300sxnelf.c \
+ eh8500.c \
+ eh8500b.c \
+ eh8500c.c \
+ eh8500m.c \
+ eh8500s.c \
+ ehp300bsd.c \
+ ehp3hpux.c \
+ ehppaelf.c \
+ ehppalinux.c \
+ ehppanbsd.c \
+ ehppaobsd.c \
+ ei386aout.c \
+ ei386beos.c \
+ ei386bsd.c \
+ ei386coff.c \
+ ei386go32.c \
+ ei386linux.c \
+ ei386lynx.c \
+ ei386mach.c \
+ ei386moss.c \
+ ei386msdos.c \
+ ei386nbsd.c \
+ ei386nto.c \
+ ei386nw.c \
+ ei386pe.c \
+ ei386pe_posix.c \
+ ei386pep.c \
+ elnk960.c \
+ em32relf.c \
+ em32rlelf.c \
+ em32relf_linux.c \
+ em32rlelf_linux.c \
+ em68hc11elf.c \
+ em68hc11elfb.c \
+ em68hc12elf.c \
+ em68hc12elfb.c \
+ em68k4knbsd.c \
+ em68kaout.c \
+ em68kaux.c \
+ em68kcoff.c \
+ em68kelf.c \
+ em68kelfnbsd.c \
+ em68klinux.c \
+ em68knbsd.c \
+ em68kpsos.c \
+ em88kbcs.c \
+ emcorepe.c \
+ emipsbig.c \
+ emipsbsd.c \
+ emipsidt.c \
+ emipsidtl.c \
+ emipslit.c \
+ emipslnews.c \
+ emipspe.c \
+ emsp430x110.c \
+ emsp430x112.c \
+ emsp430x1101.c \
+ emsp430x1111.c \
+ emsp430x1121.c \
+ emsp430x1122.c \
+ emsp430x1132.c \
+ emsp430x122.c \
+ emsp430x123.c \
+ emsp430x1222.c \
+ emsp430x1232.c \
+ emsp430x133.c \
+ emsp430x135.c \
+ emsp430x1331.c \
+ emsp430x1351.c \
+ emsp430x147.c \
+ emsp430x148.c \
+ emsp430x149.c \
+ emsp430x155.c \
+ emsp430x156.c \
+ emsp430x157.c \
+ emsp430x167.c \
+ emsp430x168.c \
+ emsp430x169.c \
+ emsp430x1610.c \
+ emsp430x1611.c \
+ emsp430x1612.c \
+ emsp430x2101.c \
+ emsp430x2111.c \
+ emsp430x2121.c \
+ emsp430x2131.c \
+ emsp430x311.c \
+ emsp430x312.c \
+ emsp430x313.c \
+ emsp430x314.c \
+ emsp430x315.c \
+ emsp430x323.c \
+ emsp430x325.c \
+ emsp430x336.c \
+ emsp430x337.c \
+ emsp430x412.c \
+ emsp430x413.c \
+ emsp430x415.c \
+ emsp430x417.c \
+ emsp430xE423.c \
+ emsp430xE425.c \
+ emsp430xE427.c \
+ emsp430xW423.c \
+ emsp430xW425.c \
+ emsp430xW427.c \
+ emsp430xG437.c \
+ emsp430xG438.c \
+ emsp430xG439.c \
+ emsp430x435.c \
+ emsp430x436.c \
+ emsp430x437.c \
+ emsp430x447.c \
+ emsp430x448.c \
+ emsp430x449.c \
+ enews.c \
+ ens32knbsd.c \
+ eor32.c \
+ eor32elf.c \
+ epc532macha.c \
+ epdp11.c \
+ epjelf.c \
+ epjlelf.c \
+ eppcmacos.c \
+ eppcnw.c \
+ eppcpe.c \
+ eppclynx.c \
+ eriscix.c \
+ escore3_elf.c \
+ escore7_elf.c \
+ esh.c \
+ eshelf32.c \
+ eshlelf32.c \
+ eshelf32_linux.c \
+ eshlelf32_linux.c \
+ eshelf32_nbsd.c \
+ eshlelf32_nbsd.c \
+ eshelf.c \
+ eshelf_fd.c \
+ eshlelf_fd.c \
+ eshelf_linux.c \
+ eshlelf_linux.c \
+ eshelf_nbsd.c \
+ eshlelf_nbsd.c \
+ eshelf_nto.c \
+ eshlelf_nto.c \
+ eshelf_uclinux.c \
+ eshelf_vxworks.c \
+ eshlelf_vxworks.c \
+ eshl.c \
+ eshlelf.c \
+ eshlsymbian.c \
+ eshpe.c \
+ esparcaout.c \
+ esparclinux.c \
+ esparcnbsd.c \
+ est2000.c \
+ esun3.c \
+ esun4.c \
+ etic30aout.c \
+ etic30coff.c \
+ etic3xcoff.c \
+ etic3xcoff_onchip.c \
+ etic4xcoff.c \
+ etic54xcoff.c \
+ etic80coff.c \
+ evanilla.c \
+ evax.c \
+ evaxnbsd.c \
+ evsta.c \
+ ew65.c \
+ ez8001.c \
+ eelf32frvfd.c \
+ ez80.c \
+ ez8002.c
+
+ALL_EMULATIONS = $(ALL_EMULATION_SOURCES:.c=.@OBJEXT@)
+ALL_64_EMULATION_SOURCES = \
+ eelf64_aix.c \
+ eelf64_ia64.c \
+ eelf64_ia64_fbsd.c \
+ eshelf64.c \
+ eshlelf64.c \
+ eshelf64_nbsd.c \
+ eshlelf64_nbsd.c \
+ eelf_x86_64.c \
+ eelf_x86_64_fbsd.c \
+ eelf_x86_64_sol2.c \
+ eelf_l1om.c \
+ eelf_l1om_fbsd.c \
+ eelf64_s390.c \
+ eelf64_sparc.c \
+ eelf64_sparc_fbsd.c \
+ eelf64_sparc_sol2.c \
+ eelf64alpha.c \
+ eelf64alpha_fbsd.c \
+ eelf64alpha_nbsd.c \
+ eelf64bmip.c \
+ eelf64btsmip.c \
+ eelf64ltsmip.c \
+ eelf64hppa.c \
+ eelf64mmix.c \
+ emmo.c \
+ eelf64ppc.c \
+ eelf64lppc.c \
+ ehppa64linux.c
+
+ALL_64_EMULATIONS = $(ALL_64_EMULATION_SOURCES:.c=.@OBJEXT@)
+ALL_EMUL_EXTRA_OFILES = \
+ deffilep.@OBJEXT@ \
+ pe-dll.@OBJEXT@ \
+ pep-dll.@OBJEXT@
+
+CFILES = ldctor.c ldemul.c ldexp.c ldfile.c ldlang.c \
+ ldmain.c ldmisc.c ldver.c ldwrite.c lexsup.c \
+ mri.c ldcref.c pe-dll.c pep-dll.c ldlex-wrapper.c \
+ $(PLUGIN_C)
+
+HFILES = ld.h ldctor.h ldemul.h ldexp.h ldfile.h \
+ ldlang.h ldlex.h ldmain.h ldmisc.h ldver.h \
+ ldwrite.h mri.h deffile.h pe-dll.h pep-dll.h \
+ elf-hints-local.h $(PLUGIN_H)
+
+GENERATED_CFILES = ldgram.c ldlex.c deffilep.c
+GENERATED_HFILES = ldgram.h ldemul-list.h deffilep.h
+
+# Require an early dependency on the generated headers, as the dependency
+# tracking will not cause them to be built beforehand.
+BUILT_SOURCES = $(GENERATED_HFILES)
+OFILES = ldgram.@OBJEXT@ ldlex-wrapper.@OBJEXT@ lexsup.@OBJEXT@ ldlang.@OBJEXT@ \
+ mri.@OBJEXT@ ldctor.@OBJEXT@ ldmain.@OBJEXT@ $(PLUGIN_OBJECT) \
+ ldwrite.@OBJEXT@ ldexp.@OBJEXT@ ldemul.@OBJEXT@ ldver.@OBJEXT@ ldmisc.@OBJEXT@ \
+ ldfile.@OBJEXT@ ldcref.@OBJEXT@ ${EMULATION_OFILES} ${EMUL_EXTRA_OFILES}
+
+STAGESTUFF = *.@OBJEXT@ ldscripts/* e*.c
+
+# At the moment this is just a list of those emulation template files
+# that contain internationalised strings.
+EMULATION_FILES = emultempl/pe.em emultempl/armcoff.em
+POTFILES = $(CFILES) $(HFILES) $(EMULATION_FILES)
+
+# These all start with e so 'make clean' can find them.
+GENSCRIPTS = LIB_PATH='${LIB_PATH}' $(SHELL) $(srcdir)/genscripts.sh "${srcdir}" "${libdir}" "${prefix}" "${exec_prefix}" @host@ @target@ @target_alias@ "@EMULATION_LIBPATH@" "@NATIVE_LIB_DIRS@" @use_sysroot@
+GEN_DEPENDS = $(srcdir)/genscripts.sh stringify.sed
+ELF_DEPS = $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/elf-generic.em
+ELF_GEN_DEPS = $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/elf-generic.em $(srcdir)/emultempl/genelf.em
+
+# We need this for automake to use YLWRAP.
+# Allow dependency tracking to work for these files, too.
+
+# Dependency tracking for the generated emulation files.
+EXTRA_ld_new_SOURCES = deffilep.y ldlex.l pep-dll.c pe-dll.c \
+ $(ALL_EMULATION_SOURCES) $(ALL_64_EMULATION_SOURCES)
+ld_new_SOURCES = ldgram.y ldlex-wrapper.c lexsup.c ldlang.c mri.c ldctor.c ldmain.c \
+ ldwrite.c ldexp.c ldemul.c ldver.c ldmisc.c ldfile.c ldcref.c $(PLUGIN_C)
+
+ld_new_DEPENDENCIES = $(EMULATION_OFILES) $(EMUL_EXTRA_OFILES) $(BFDLIB) $(LIBIBERTY) $(LIBINTL_DEP)
+ld_new_LDADD = $(EMULATION_OFILES) $(EMUL_EXTRA_OFILES) $(BFDLIB) $(LIBIBERTY) $(LIBINTL)
+
+# A test program for C++ constructors and destructors.
+# This test is now in the testsuite.
+#
+#cdtest: cdtest-main.@OBJEXT@ cdtest-bar.@OBJEXT@ cdtest-foo.@OBJEXT@ ld.new
+# ./ld.new $(HOSTING_EMU) -o cdtest $(HOSTING_CRT0) \
+# cdtest-main.@OBJEXT@ cdtest-bar.@OBJEXT@ cdtest-foo.@OBJEXT@ $(HOSTING_LIBS)
+#
+#cdtest.out: cdtest
+# ./cdtest > cdtest.tmp
+# mv cdtest.tmp cdtest.out
+#
+#cdtest-ur.@OBJEXT@: cdtest-main.@OBJEXT@ cdtest-bar.@OBJEXT@ cdtest-foo.@OBJEXT@ ld.new
+# ./ld.new $(HOSTING_EMU) -o cdtest-ur.@OBJEXT@ -Ur cdtest-main.@OBJEXT@ \
+# cdtest-bar.@OBJEXT@ cdtest-foo.@OBJEXT@
+#
+#cdtest-ur: cdtest-ur.@OBJEXT@
+# ./ld.new $(HOSTING_EMU) -o cdtest-ur $(HOSTING_CRT0) cdtest-ur.@OBJEXT@ \
+# $(HOSTING_LIBS)
+#
+#cdtest-ur.out: cdtest-ur
+# ./cdtest-ur > cdtest-ur.tmp
+# mv cdtest-ur.tmp cdtest-ur.out
+#
+#check-cdtest: cdtest.out cdtest-ur.out $(srcdir)/cdtest.exp
+# diff $(srcdir)/cdtest.exp cdtest.out
+# diff $(srcdir)/cdtest.exp cdtest-ur.out
+#
+#.PHONY: check-cdtest
+
+# END OF CHECK TARGETS
+
+#
+# Build a dummy plugin using libtool.
+#
+@ENABLE_PLUGINS_TRUE@noinst_LTLIBRARIES = libldtestplug.la
+@ENABLE_PLUGINS_TRUE@libldtestplug_la_SOURCES = testplug.c
+@ENABLE_PLUGINS_TRUE@libldtestplug_la_CFLAGS = -g -O2
+@ENABLE_PLUGINS_TRUE@libldtestplug_la_LDFLAGS = -no-undefined -rpath /nowhere
+MAINTAINERCLEANFILES = configdoc.texi ld.1 ld.info
+
+# We want to reconfigure if configure.host or configure.tgt changes. We
+# extract version from bfd/configure.in, so we must depend on that also.
+CONFIG_STATUS_DEPENDENCIES = $(srcdir)/configure.host $(srcdir)/configure.tgt \
+ $(srcdir)/../bfd/configure.in
+
+MOSTLYCLEANFILES = $(STAGESTUFF) ld1$(EXEEXT) ld2$(EXEEXT) ld3$(EXEEXT) \
+ ldemul-list.h crtbegin.@OBJEXT@ crtend.@OBJEXT@ ld.log ld.sum
+
+CLEANFILES = dep.sed DEP DEPA DEP1 DEP2 spu_ovl.s spu_ovl.@OBJEXT@ spu_icache.s spu_icache.@OBJEXT@
+
+# Stuff that should be included in a distribution. The diststuff
+# target is run by the taz target in ../Makefile.in.
+EXTRA_DIST = ldgram.c ldgram.h ldlex.c emultempl/spu_ovl.@OBJEXT@_c \
+ emultempl/spu_icache.@OBJEXT@_c deffilep.c deffilep.h $(man_MANS)
+
+DISTCLEANFILES = tdirs site.exp site.bak stringify.sed $(am__append_1)
+all: $(BUILT_SOURCES) config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .dvi .l .lo .o .obj .ps .y
+am--refresh:
+ @:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
+ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+ @if test ! -f $@; then \
+ rm -f stamp-h1; \
+ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
+ else :; fi
+
+stamp-h1: $(srcdir)/config.in $(top_builddir)/config.status
+ @rm -f stamp-h1
+ cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(srcdir)/config.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+ rm -f stamp-h1
+ touch $@
+
+distclean-hdr:
+ -rm -f config.h stamp-h1
+po/Makefile.in: $(top_builddir)/config.status $(top_srcdir)/po/Make-in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libldtestplug.la: $(libldtestplug_la_OBJECTS) $(libldtestplug_la_DEPENDENCIES)
+ $(libldtestplug_la_LINK) $(am_libldtestplug_la_rpath) $(libldtestplug_la_OBJECTS) $(libldtestplug_la_LIBADD) $(LIBS)
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p || test -f $$p1; \
+ then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+ldgram.h: ldgram.c
+ @if test ! -f $@; then \
+ rm -f ldgram.c; \
+ $(MAKE) $(AM_MAKEFLAGS) ldgram.c; \
+ else :; fi
+deffilep.h: deffilep.c
+ @if test ! -f $@; then \
+ rm -f deffilep.c; \
+ $(MAKE) $(AM_MAKEFLAGS) deffilep.c; \
+ else :; fi
+ld-new$(EXEEXT): $(ld_new_OBJECTS) $(ld_new_DEPENDENCIES)
+ @rm -f ld-new$(EXEEXT)
+ $(LINK) $(ld_new_OBJECTS) $(ld_new_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/deffilep.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaixppc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaixrs6.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ealpha.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ealphavms.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earcelf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earm_epoc_pe.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earm_wince_pe.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmaoutb.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmaoutl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmcoff.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmelf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmelf_fbsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmelf_linux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmelf_linux_eabi.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmelf_nbsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmelf_vxworks.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmelfb.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmelfb_linux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmelfb_linux_eabi.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmelfb_nbsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmnbsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmnto.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmpe.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmsymbian.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eavr1.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eavr2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eavr25.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eavr3.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eavr31.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eavr35.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eavr4.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eavr5.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eavr51.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eavr6.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecoff_i860.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecoff_sparc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecrisaout.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecriself.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecrislinux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ed10velf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ed30v_e.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ed30v_o.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ed30velf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/edelta68.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32_dlx.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32_i860.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32_i960.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32_sparc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32_sparc_sol2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32_sparc_vxworks.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32_spu.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32_tic6x_be.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32_tic6x_le.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32b4300.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32bfin.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32bfinfd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32bmip.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32bmipn32.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32btsmip.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32btsmipn32.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32cr16.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32cr16c.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32crx.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32ebmip.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32ebmipvxworks.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32elmip.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32elmipvxworks.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32fr30.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32frv.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32frvfd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32i370.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32ip2k.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32iq10.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32iq2000.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32l4300.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32lm32.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32lm32fd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32lmip.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32lppc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32lppcnto.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32lppcsim.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32ltsmip.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32ltsmipn32.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32m32c.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32mb_linux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32mcore.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32mep.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32microblaze.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32mipswindiss.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32moxie.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32mt.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32openrisc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32ppc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32ppc_fbsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32ppclinux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32ppcnto.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32ppcsim.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32ppcvxworks.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32ppcwindiss.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32rx.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32vax.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32xc16x.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32xc16xl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32xc16xs.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32xstormy16.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32xtensa.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64_aix.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64_ia64.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64_ia64_fbsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64_s390.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64_sparc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64_sparc_fbsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64_sparc_sol2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64alpha.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64alpha_fbsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64alpha_nbsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64bmip.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64btsmip.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64hppa.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64lppc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64ltsmip.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64mmix.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64ppc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_i386.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_i386_be.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_i386_chaos.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_i386_fbsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_i386_ldso.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_i386_sol2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_i386_vxworks.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_l1om.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_l1om_fbsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_s390.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_x86_64.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_x86_64_fbsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_x86_64_sol2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/egld960.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/egld960coff.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300elf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300h.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300helf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300hn.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300hnelf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300s.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300self.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300sn.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300snelf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300sx.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300sxelf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300sxn.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300sxnelf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8500.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8500b.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8500c.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8500m.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8500s.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ehp300bsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ehp3hpux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ehppa64linux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ehppaelf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ehppalinux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ehppanbsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ehppaobsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ei386aout.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ei386beos.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ei386bsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ei386coff.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ei386go32.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ei386linux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ei386lynx.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ei386mach.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ei386moss.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ei386msdos.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ei386nbsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ei386nto.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ei386nw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ei386pe.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ei386pe_posix.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ei386pep.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elnk960.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/em32relf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/em32relf_linux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/em32rlelf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/em32rlelf_linux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/em68hc11elf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/em68hc11elfb.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/em68hc12elf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/em68hc12elfb.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/em68k4knbsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/em68kaout.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/em68kaux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/em68kcoff.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/em68kelf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/em68kelfnbsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/em68klinux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/em68knbsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/em68kpsos.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/em88kbcs.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emcorepe.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emipsbig.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emipsbsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emipsidt.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emipsidtl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emipslit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emipslnews.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emipspe.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emmo.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x110.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x1101.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x1111.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x112.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x1121.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x1122.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x1132.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x122.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x1222.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x123.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x1232.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x133.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x1331.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x135.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x1351.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x147.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x148.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x149.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x155.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x156.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x157.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x1610.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x1611.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x1612.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x167.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x168.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x169.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x2101.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x2111.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x2121.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x2131.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x311.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x312.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x313.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x314.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x315.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x323.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x325.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x336.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x337.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x412.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x413.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x415.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x417.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x435.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x436.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x437.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x447.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x448.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430x449.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430xE423.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430xE425.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430xE427.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430xG437.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430xG438.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430xG439.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430xW423.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430xW425.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emsp430xW427.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/enews.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ens32knbsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eor32.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eor32elf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/epc532macha.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/epdp11.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/epjelf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/epjlelf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eppclynx.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eppcmacos.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eppcnw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eppcpe.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eriscix.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/escore3_elf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/escore7_elf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/esh.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eshelf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eshelf32.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eshelf32_linux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eshelf32_nbsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eshelf64.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eshelf64_nbsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eshelf_fd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eshelf_linux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eshelf_nbsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eshelf_nto.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eshelf_uclinux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eshelf_vxworks.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eshl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eshlelf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eshlelf32.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eshlelf32_linux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eshlelf32_nbsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eshlelf64.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eshlelf64_nbsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eshlelf_fd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eshlelf_linux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eshlelf_nbsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eshlelf_nto.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eshlelf_vxworks.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eshlsymbian.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eshpe.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/esparcaout.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/esparclinux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/esparcnbsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/est2000.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/esun3.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/esun4.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/etic30aout.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/etic30coff.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/etic3xcoff.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/etic3xcoff_onchip.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/etic4xcoff.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/etic54xcoff.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/etic80coff.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evanilla.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evax.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evaxnbsd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evsta.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ew65.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ez80.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ez8001.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ez8002.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ldcref.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ldctor.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ldemul.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ldexp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ldfile.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ldgram.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ldlang.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ldlex-wrapper.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ldlex.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ldmain.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ldmisc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ldver.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ldwrite.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lexsup.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libldtestplug_la-testplug.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mri.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-dll.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pep-dll.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plugin.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+libldtestplug_la-testplug.lo: testplug.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libldtestplug_la_CFLAGS) $(CFLAGS) -MT libldtestplug_la-testplug.lo -MD -MP -MF $(DEPDIR)/libldtestplug_la-testplug.Tpo -c -o libldtestplug_la-testplug.lo `test -f 'testplug.c' || echo '$(srcdir)/'`testplug.c
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libldtestplug_la-testplug.Tpo $(DEPDIR)/libldtestplug_la-testplug.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='testplug.c' object='libldtestplug_la-testplug.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libldtestplug_la_CFLAGS) $(CFLAGS) -c -o libldtestplug_la-testplug.lo `test -f 'testplug.c' || echo '$(srcdir)/'`testplug.c
+
+.l.c:
+ $(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE)
+
+.y.c:
+ $(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE)
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool config.lt
+
+ld.info: ld.texinfo $(ld_TEXINFOS)
+ restore=: && backupdir="$(am__leading_dot)am$$$$" && \
+ rm -rf $$backupdir && mkdir $$backupdir && \
+ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
+ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
+ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
+ done; \
+ else :; fi && \
+ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+ -o $@ `test -f 'ld.texinfo' || echo '$(srcdir)/'`ld.texinfo; \
+ then \
+ rc=0; \
+ else \
+ rc=$$?; \
+ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
+ fi; \
+ rm -rf $$backupdir; exit $$rc
+
+ld.dvi: ld.texinfo $(ld_TEXINFOS)
+ TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+ $(TEXI2DVI) -o $@ `test -f 'ld.texinfo' || echo '$(srcdir)/'`ld.texinfo
+
+ld.pdf: ld.texinfo $(ld_TEXINFOS)
+ TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+ $(TEXI2PDF) -o $@ `test -f 'ld.texinfo' || echo '$(srcdir)/'`ld.texinfo
+
+ld.html: ld.texinfo $(ld_TEXINFOS)
+ rm -rf $(@:.html=.htp)
+ if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+ -o $(@:.html=.htp) `test -f 'ld.texinfo' || echo '$(srcdir)/'`ld.texinfo; \
+ then \
+ rm -rf $@; \
+ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+ mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
+ else \
+ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+ rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
+ exit 1; \
+ fi
+.dvi.ps:
+ TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ $(DVIPS) -o $@ $<
+
+uninstall-dvi-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \
+ rm -f "$(DESTDIR)$(dvidir)/$$f"; \
+ done
+
+uninstall-html-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \
+ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \
+ done
+
+uninstall-info-am:
+ @$(PRE_UNINSTALL)
+ @if test -d '$(DESTDIR)$(infodir)' && \
+ (install-info --version && \
+ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
+ list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
+ if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
+ then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \
+ done; \
+ else :; fi
+ @$(NORMAL_UNINSTALL)
+ @list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
+ (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \
+ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \
+ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
+ else :; fi); \
+ done
+
+uninstall-pdf-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \
+ done
+
+uninstall-ps-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(PSS)'; test -n "$(psdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(psdir)/$$f"; \
+ done
+
+dist-info: $(INFO_DEPS)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ list='$(INFO_DEPS)'; \
+ for base in $$list; do \
+ case $$base in \
+ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
+ esac; \
+ if test -f $$base; then d=.; else d=$(srcdir); fi; \
+ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \
+ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \
+ if test -f $$file; then \
+ relfile=`expr "$$file" : "$$d/\(.*\)"`; \
+ test -f "$(distdir)/$$relfile" || \
+ cp -p $$file "$(distdir)/$$relfile"; \
+ else :; fi; \
+ done; \
+ done
+
+mostlyclean-aminfo:
+ -rm -rf ld.aux ld.cp ld.cps ld.fn ld.fns ld.ky ld.log ld.pg ld.pgs ld.tmp \
+ ld.toc ld.tp ld.tps ld.vr ld.vrs
+
+clean-aminfo:
+ -test -z "ld.dvi ld.pdf ld.ps ld.html" \
+ || rm -rf ld.dvi ld.pdf ld.ps ld.html
+
+maintainer-clean-aminfo:
+ @list='$(INFO_DEPS)'; for i in $$list; do \
+ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \
+ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
+ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
+ done
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ { for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ test -z "$$files" || { \
+ echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(man1dir)" && rm -f $$files; }
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) config.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) config.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+site.exp: Makefile
+ @echo 'Making a new site.exp file...'
+ @echo '## these variables are automatically generated by make ##' >site.tmp
+ @echo '# Do not edit here. If you wish to override these values' >>site.tmp
+ @echo '# edit the last section' >>site.tmp
+ @echo 'set srcdir $(srcdir)' >>site.tmp
+ @echo "set objdir `pwd`" >>site.tmp
+ @echo 'set build_alias "$(build_alias)"' >>site.tmp
+ @echo 'set build_triplet $(build_triplet)' >>site.tmp
+ @echo 'set host_alias "$(host_alias)"' >>site.tmp
+ @echo 'set host_triplet $(host_triplet)' >>site.tmp
+ @echo 'set target_alias "$(target_alias)"' >>site.tmp
+ @echo 'set target_triplet $(target_triplet)' >>site.tmp
+ @echo '## All variables above are generated by configure. Do Not Edit ##' >>site.tmp
+ @test ! -f site.exp || \
+ sed '1,/^## All variables above are.*##/ d' site.exp >> site.tmp
+ @-rm -f site.bak
+ @test ! -f site.exp || mv site.exp site.bak
+ @mv site.tmp site.exp
+
+distclean-DEJAGNU:
+ -rm -f site.exp site.bak
+ -l='$(DEJATOOL)'; for tool in $$l; do \
+ rm -f $$tool.sum $$tool.log; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-recursive
+all-am: Makefile $(INFO_DEPS) $(LTLIBRARIES) $(PROGRAMS) $(MANS) \
+ config.h
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+ -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -rm -f deffilep.c
+ -rm -f deffilep.h
+ -rm -f ldgram.c
+ -rm -f ldgram.h
+ -rm -f ldlex.c
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-aminfo clean-binPROGRAMS clean-generic clean-libtool \
+ clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-DEJAGNU distclean-compile \
+ distclean-generic distclean-hdr distclean-libtool \
+ distclean-local distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am: $(DVIS)
+
+html: html-recursive
+
+html-am: $(HTMLS)
+
+info: info-recursive
+
+info-am: $(INFO_DEPS)
+
+install-data-am: install-data-local install-info-am install-man
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am: $(DVIS)
+ @$(NORMAL_INSTALL)
+ test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)"
+ @list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \
+ done
+install-exec-am: install-binPROGRAMS install-exec-local
+
+install-html: install-html-recursive
+
+install-html-am: $(HTMLS)
+ @$(NORMAL_INSTALL)
+ test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)"
+ @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ $(am__strip_dir) \
+ if test -d "$$d$$p"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \
+ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
+ echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \
+ $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \
+ else \
+ list2="$$list2 $$d$$p"; \
+ fi; \
+ done; \
+ test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \
+ done; }
+install-info: install-info-recursive
+
+install-info-am: $(INFO_DEPS)
+ @$(NORMAL_INSTALL)
+ test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
+ for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ esac; \
+ if test -f $$file; then d=.; else d=$(srcdir); fi; \
+ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
+ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
+ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
+ if test -f $$ifile; then \
+ echo "$$ifile"; \
+ else : ; fi; \
+ done; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done
+ @$(POST_INSTALL)
+ @if (install-info --version && \
+ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
+ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
+ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
+ done; \
+ else : ; fi
+install-man: install-man1
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am: $(PDFS)
+ @$(NORMAL_INSTALL)
+ test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)"
+ @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done
+install-ps: install-ps-recursive
+
+install-ps-am: $(PSS)
+ @$(NORMAL_INSTALL)
+ test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)"
+ @list='$(PSS)'; test -n "$(psdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-aminfo \
+ maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-aminfo mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool mostlyclean-local
+
+pdf: pdf-recursive
+
+pdf-am: $(PDFS)
+
+ps: ps-recursive
+
+ps-am: $(PSS)
+
+uninstall-am: uninstall-binPROGRAMS uninstall-dvi-am uninstall-html-am \
+ uninstall-info-am uninstall-man uninstall-pdf-am \
+ uninstall-ps-am
+
+uninstall-man: uninstall-man1
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \
+ check-am ctags-recursive install install-am install-strip \
+ tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am am--refresh check check-DEJAGNU check-am clean \
+ clean-aminfo clean-binPROGRAMS clean-generic clean-libtool \
+ clean-noinstLTLIBRARIES ctags ctags-recursive dist-info \
+ distclean distclean-DEJAGNU distclean-compile \
+ distclean-generic distclean-hdr distclean-libtool \
+ distclean-local distclean-tags dvi dvi-am html html-am info \
+ info-am install install-am install-binPROGRAMS install-data \
+ install-data-am install-data-local install-dvi install-dvi-am \
+ install-exec install-exec-am install-exec-local install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs installdirs-am maintainer-clean \
+ maintainer-clean-aminfo maintainer-clean-generic mostlyclean \
+ mostlyclean-aminfo mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool mostlyclean-local pdf pdf-am ps ps-am tags \
+ tags-recursive uninstall uninstall-am uninstall-binPROGRAMS \
+ uninstall-dvi-am uninstall-html-am uninstall-info-am \
+ uninstall-man uninstall-man1 uninstall-pdf-am uninstall-ps-am
+
+
+# Disable -Werror, if it has been enabled, since old versions of bison/
+# yacc will produce working code which contain compile time warnings.
+ldgram.@OBJEXT@: ldgram.c
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f ldgram.c || echo $(srcdir)/`ldgram.c $(NO_WERROR)
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ldgram.c' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f ldgram.c || echo $(srcdir)/`ldgram.c $(NO_WERROR)
+
+ldlex-wrapper.@OBJEXT@: ldlex-wrapper.c ldlex.c
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $(srcdir)/ldlex-wrapper.c $(NO_WERROR)
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ldlex-wrapper.c' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $(srcdir)/ldlex-wrapper.c $(NO_WERROR)
+
+deffilep.@OBJEXT@: deffilep.c
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f deffilep.c || echo $(srcdir)/`deffilep.c $(NO_WERROR)
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='deffilep.c' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f deffilep.c || echo $(srcdir)/`deffilep.c $(NO_WERROR)
+
+po/POTFILES.in: @MAINT@ Makefile
+ for f in $(POTFILES); do echo $$f; done | LC_ALL=C sort > tmp \
+ && mv tmp $(srcdir)/po/POTFILES.in
+
+ldmain.@OBJEXT@: ldmain.c config.status
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ \
+@am__fastdepCC_TRUE@ -DDEFAULT_EMULATION='"$(EMUL)"' \
+@am__fastdepCC_TRUE@ -DBINDIR='"$(bindir)"' -DTOOLBINDIR='"$(tooldir)/bin"' \
+@am__fastdepCC_TRUE@ -DTARGET='"@target@"' @TARGET_SYSTEM_ROOT_DEFINE@ \
+@am__fastdepCC_TRUE@ $(srcdir)/ldmain.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ldmain.c' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c -DDEFAULT_EMULATION='"$(EMUL)"' \
+@am__fastdepCC_FALSE@ -DBINDIR='"$(bindir)"' -DTOOLBINDIR='"$(tooldir)/bin"' \
+@am__fastdepCC_FALSE@ -DTARGET='"@target@"' @TARGET_SYSTEM_ROOT_DEFINE@ \
+@am__fastdepCC_FALSE@ $(srcdir)/ldmain.c
+
+ldfile.@OBJEXT@: ldfile.c config.status
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ \
+@am__fastdepCC_TRUE@ -DSCRIPTDIR='"$(scriptdir)"' -DBINDIR='"$(bindir)"' -DTOOLBINDIR='"$(tooldir)/bin"' \
+@am__fastdepCC_TRUE@ $(srcdir)/ldfile.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ldfile.c' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c -DSCRIPTDIR='"$(scriptdir)"' -DBINDIR='"$(bindir)"' \
+@am__fastdepCC_FALSE@ -DTOOLBINDIR='"$(tooldir)/bin"' \
+@am__fastdepCC_FALSE@ $(srcdir)/ldfile.c
+
+eelf32_spu.@OBJEXT@: eelf32_spu.c
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ \
+@am__fastdepCC_TRUE@ -DEMBEDSPU="\"`echo embedspu | sed '$(transform)'`\"" eelf32_spu.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eelf32_spu.c' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c -DEMBEDSPU="\"`echo embedspu | sed '$(transform)'`\"" \
+@am__fastdepCC_FALSE@ eelf32_spu.c
+
+ldemul-list.h: Makefile
+ (echo "/* This file is automatically generated. DO NOT EDIT! */";\
+ for f in `echo " " ${EMULATION_OFILES} "" \
+ | sed -e 's/ e/ ld/g' -e 's/ ld/ /g' -e 's/[.]o//g'`; do \
+ echo "extern ld_emulation_xfer_type ld_$${f}_emulation;"; \
+ done;\
+ echo "";\
+ echo "#define EMULATION_LIST \\";\
+ for f in `echo " " ${EMULATION_OFILES} "" \
+ | sed -e 's/ e/ ld/g' -e 's/ ld/ /g' -e 's/[.]o//g'`; do \
+ echo " &ld_$${f}_emulation, \\"; \
+ done;\
+ echo " 0") >ldemul-tmp.h
+ mv ldemul-tmp.h ldemul-list.h
+
+stringify.sed: ${srcdir}/emultempl/$(STRINGIFY)
+ cp ${srcdir}/emultempl/$(STRINGIFY) stringify.sed
+
+@TDIRS@
+
+eaix5ppc.c: $(srcdir)/emulparams/aix5ppc.sh \
+ $(srcdir)/emultempl/aix.em $(srcdir)/scripttempl/aix.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} aix5ppc "$(tdir_aixppc)"
+eaix5rs6.c: $(srcdir)/emulparams/aix5rs6.sh \
+ $(srcdir)/emultempl/aix.em $(srcdir)/scripttempl/aix.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} aix5rs6 "$(tdir_aixrs6)"
+eaixppc.c: $(srcdir)/emulparams/aixppc.sh \
+ $(srcdir)/emultempl/aix.em $(srcdir)/scripttempl/aix.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} aixppc "$(tdir_aixppc)"
+eaixrs6.c: $(srcdir)/emulparams/aixrs6.sh \
+ $(srcdir)/emultempl/aix.em $(srcdir)/scripttempl/aix.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} aixrs6 "$(tdir_aixrs6)"
+ealpha.c: $(srcdir)/emulparams/alpha.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/alpha.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} alpha "$(tdir_alpha)"
+ealphavms.c: $(srcdir)/emulparams/alphavms.sh \
+ $(srcdir)/emultempl/vms.em $(srcdir)/scripttempl/alphavms.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} alphavms "$(tdir_alphavms)"
+earcelf.c: $(srcdir)/emulparams/arcelf.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} arcelf "$(tdir_arcelf)"
+earmelf.c: $(srcdir)/emulparams/armelf.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armelf "$(tdir_armelf)"
+earmelfb.c: $(srcdir)/emulparams/armelfb.sh $(srcdir)/emulparams/armelf.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armelfb "$(tdir_armelfb)"
+earmelf_fbsd.c: $(srcdir)/emulparams/armelf_fbsd.sh \
+ $(srcdir)/emulparams/armelf.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armelf_fbsd "$(tdir_armelf_fbsd)"
+earmelf_linux.c: $(srcdir)/emulparams/armelf_linux.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armelf_linux "$(tdir_armelf_linux)"
+earmelf_linux_eabi.c: $(srcdir)/emulparams/armelf_linux_eabi.sh \
+ $(srcdir)/emulparams/armelf_linux.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armelf_linux_eabi "$(tdir_armelf_linux_abi)"
+earmelfb_linux.c: $(srcdir)/emulparams/armelfb_linux.sh \
+ $(srcdir)/emulparams/armelf_linux.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armelfb_linux "$(tdir_armelfb_linux)"
+earmelfb_linux_eabi.c: $(srcdir)/emulparams/armelfb_linux_eabi.sh \
+ $(srcdir)/emulparams/armelf_linux_eabi.sh \
+ $(srcdir)/emulparams/armelf_linux.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armelfb_linux_eabi "$(tdir_armelfb_linux_abi)"
+earmelf_nbsd.c: $(srcdir)/emulparams/armelf_nbsd.sh \
+ $(srcdir)/emulparams/armelf.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armelf_nbsd "$(tdir_armelf_nbsd)"
+earmelfb_nbsd.c: $(srcdir)/emulparams/armelfb_nbsd.sh \
+ $(srcdir)/emulparams/armelf_nbsd.sh \
+ $(srcdir)/emulparams/armelf.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armelfb_nbsd "$(tdir_armelfb_nbsd)"
+earmelf_vxworks.c: $(srcdir)/emulparams/armelf_vxworks.sh \
+ $(srcdir)/emulparams/vxworks.sh $(srcdir)/emulparams/armelf.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/vxworks.em \
+ $(srcdir)/emultempl/armelf.em $(srcdir)/scripttempl/elf.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} armelf_vxworks "$(tdir_armelf)"
+earmaoutb.c: $(srcdir)/emulparams/armaoutb.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/armaout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armaoutb "$(tdir_armaoutb)"
+earmaoutl.c: $(srcdir)/emulparams/armaoutl.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/armaout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armaoutl "$(tdir_armaoutl)"
+earmcoff.c: $(srcdir)/emulparams/armcoff.sh \
+ $(srcdir)/emultempl/armcoff.em $(srcdir)/scripttempl/armcoff.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armcoff "$(tdir_armcoff)"
+earmnbsd.c: $(srcdir)/emulparams/armnbsd.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armnbsd "$(tdir_armnbsd)"
+earmnto.c: $(srcdir)/emulparams/armnto.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armnto "$(tdir_armnto)"
+earm_epoc_pe.c: $(srcdir)/emulparams/arm_epoc_pe.sh \
+ $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/epocpe.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} arm_epoc_pe "$(tdir_armpe)"
+earm_wince_pe.c: $(srcdir)/emulparams/arm_wince_pe.sh \
+ $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} arm_wince_pe "$(tdir_armpe)"
+earmpe.c: $(srcdir)/emulparams/armpe.sh \
+ $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armpe "$(tdir_armpe)"
+earmsymbian.c: $(srcdir)/emulparams/armsymbian.sh \
+ $(srcdir)/emulparams/armelf.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/armelf.em $(srcdir)/scripttempl/armbpabi.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} armsymbian "$(tdir_armelf)"
+eavr2.c: $(srcdir)/emulparams/avr2.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr2 "$(tdir_avr2)"
+eavr1.c: $(srcdir)/emulparams/avr1.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr1 "$(tdir_avr2)"
+eavr25.c: $(srcdir)/emulparams/avr25.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr25 "$(tdir_avr2)"
+eavr3.c: $(srcdir)/emulparams/avr3.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr3 "$(tdir_avr2)"
+eavr31.c: $(srcdir)/emulparams/avr31.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr31 "$(tdir_avr2)"
+eavr35.c: $(srcdir)/emulparams/avr35.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr35 "$(tdir_avr2)"
+eavr4.c: $(srcdir)/emulparams/avr4.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr4 "$(tdir_avr2)"
+eavr5.c: $(srcdir)/emulparams/avr5.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr5 "$(tdir_avr2)"
+eavr51.c: $(srcdir)/emulparams/avr51.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr51 "$(tdir_avr2)"
+eavr6.c: $(srcdir)/emulparams/avr6.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr6 "$(tdir_avr2)"
+ecoff_i860.c: $(srcdir)/emulparams/coff_i860.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i860coff.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} coff_i860 "$(tdir_coff_i860)"
+ecoff_sparc.c: $(srcdir)/emulparams/coff_sparc.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/sparccoff.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} coff_sparc "$(tdir_coff_sparc)"
+ecrisaout.c: $(srcdir)/emulparams/crisaout.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/crisaout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} crisaout "$(tdir_cris)"
+ecriself.c: $(srcdir)/emulparams/criself.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} criself "$(tdir_cris)"
+ecrislinux.c: $(srcdir)/emulparams/crislinux.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} crislinux "$(tdir_cris)"
+ed10velf.c: $(srcdir)/emulparams/d10velf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elfd10v.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} d10velf "$(tdir_d10v)"
+ed30velf.c: $(srcdir)/emulparams/d30velf.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elfd30v.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} d30velf "$(tdir_d30v)"
+ed30v_o.c: $(srcdir)/emulparams/d30v_o.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elfd30v.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} d30v_o "$(tdir_d30v)"
+ed30v_e.c: $(srcdir)/emulparams/d30v_e.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elfd30v.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} d30v_e "$(tdir_d30v)"
+edelta68.c: $(srcdir)/emulparams/delta68.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/delta68.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} delta68 "$(tdir_delta68)"
+eelf32bfin.c: $(srcdir)/emulparams/bfin.sh \
+ $(ELF_DEPS) \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32bfin "$(tdir_elf32bfin)" bfin
+eelf32bfinfd.c: $(srcdir)/emulparams/elf32bfinfd.sh $(srcdir)/emulparams/bfin.sh \
+ $(ELF_DEPS) \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32bfinfd "$(tdir_elf32bfinfd)" elf32bfinfd
+eelf32_dlx.c: $(srcdir)/emulparams/elf32_dlx.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/dlx.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_dlx "$(tdir_elf32_dlx)"
+eelf32_tic6x_be.c: $(srcdir)/emulparams/elf32_tic6x_be.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_tic6x_be "$(tdir_elf32_tic6x_be)"
+eelf32_tic6x_le.c: $(srcdir)/emulparams/elf32_tic6x_le.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_tic6x_le "$(tdir_elf32_tic6x_le)"
+eelf32xc16x.c: $(srcdir)/emulparams/elf32xc16x.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/needrelax.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32xc16x "$(tdir_xc16x)"
+eelf32xc16xl.c: $(srcdir)/emulparams/elf32xc16xl.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/needrelax.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32xc16xl "$(tdir_xc16xl)"
+eelf32xc16xs.c: $(srcdir)/emulparams/elf32xc16xs.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/needrelax.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32xc16xs "$(tdir_xc16xs)"
+eelf32xstormy16.c: $(srcdir)/emulparams/elf32xstormy16.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/needrelax.em \
+ $(srcdir)/scripttempl/xstormy16.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32xstormy16 "$(tdir_xstormy16)"
+eelf32am33lin.c: $(srcdir)/emulparams/elf32am33lin.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32am33lin "$(tdir_mn10300)"
+eelf32rx.c: $(srcdir)/emulparams/elf32rx.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32rx "$(tdir_elf32rx)"
+eelf32vax.c: $(srcdir)/emulparams/elf32vax.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32vax "$(tdir_elf32vax)"
+eelf32xtensa.c: $(srcdir)/emulparams/elf32xtensa.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/xtensaelf.em $(INCDIR)/xtensa-config.h \
+ $(BFDDIR)/elf-bfd.h $(BFDDIR)/libbfd.h $(INCDIR)/elf/xtensa.h \
+ $(srcdir)/scripttempl/elfxtensa.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32xtensa "$(tdir_elf32xtensa)"
+eelf32fr30.c: $(srcdir)/emulparams/elf32fr30.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32fr30 "$(tdir_fr30)"
+eelf32frv.c: $(srcdir)/emulparams/elf32frv.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32frv "$(tdir_frv)"
+eelf32frvfd.c: $(srcdir)/emulparams/elf32frvfd.sh \
+ $(srcdir)/emulparams/elf32frv.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32frvfd "$(tdir_frv)"
+eelf32moxie.c: $(srcdir)/emulparams/elf32moxie.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32moxie "$(tdir_moxie)"
+eelf32mcore.c: $(srcdir)/emulparams/elf32mcore.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32mcore "$(tdir_mcore)"
+eelf32mep.c: $(srcdir)/emulparams/elf32mep.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/mep.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32mep "$(tdir_mep)"
+em32relf.c: $(srcdir)/emulparams/m32relf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m32relf "$(tdir_m32r)"
+em32rlelf.c: $(srcdir)/emulparams/m32rlelf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m32rlelf "$(tdir_m32rlelf)"
+em32relf_linux.c: $(srcdir)/emulparams/m32relf_linux.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m32relf_linux "$(tdir_m32relf_linux)"
+em32rlelf_linux.c: $(srcdir)/emulparams/m32rlelf_linux.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m32rlelf_linux "$(tdir_m32rlelf_linux)"
+eelf32_sparc.c: $(srcdir)/emulparams/elf32_sparc.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_sparc "$(tdir_elf32_sparc)"
+eelf32_sparc_sol2.c: $(srcdir)/emulparams/elf32_sparc_sol2.sh \
+ $(srcdir)/emulparams/elf32_sparc.sh \
+ $(srcdir)/emulparams/solaris2.sh \
+ $(srcdir)/emultempl/solaris2.em $(ELF_DEPS) \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_sparc_sol2 "$(tdir_elf32_sparc_sol2)"
+eelf32_sparc_vxworks.c: $(srcdir)/emulparams/elf32_sparc_vxworks.sh \
+ $(srcdir)/emulparams/vxworks.sh $(srcdir)/emulparams/elf32_sparc.sh \
+ $(srcdir)/emultempl/vxworks.em $(ELF_DEPS) \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_sparc_vxworks "$(tdir_elf32_sparc_vxworks)"
+eelf32_spu.c: $(srcdir)/emulparams/elf32_spu.sh $(srcdir)/emultempl/spuelf.em \
+ $(srcdir)/emultempl/spu_ovl.@OBJEXT@_c $(srcdir)/emultempl/spu_icache.@OBJEXT@_c \
+ ldemul-list.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_spu "$(tdir_elf32_spu)"
+$(srcdir)/emultempl/spu_ovl.@OBJEXT@_c: @MAINT@ $(srcdir)/emultempl/spu_ovl.S
+ if ../gas/as-new --version \
+ | grep 'target.*spu' >/dev/null 2>/dev/null; then \
+ cpp -DOVLY_IRQ_SAVE $(srcdir)/emultempl/spu_ovl.S spu_ovl.s; \
+ ../gas/as-new -o spu_ovl.@OBJEXT@ spu_ovl.s; \
+ ../binutils/bin2c <spu_ovl.@OBJEXT@ >$@; \
+ fi
+$(srcdir)/emultempl/spu_icache.@OBJEXT@_c: @MAINT@ $(srcdir)/emultempl/spu_icache.S
+ if ../gas/as-new --version \
+ | grep 'target.*spu' >/dev/null 2>/dev/null; then \
+ cpp -DOVLY_IRQ_SAVE $(srcdir)/emultempl/spu_icache.S spu_icache.s; \
+ ../gas/as-new -o spu_icache.@OBJEXT@ spu_icache.s; \
+ ../binutils/bin2c <spu_icache.@OBJEXT@ >$@; \
+ fi
+eelf32_i860.c: $(srcdir)/emulparams/elf32_i860.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_i860 "$(tdir_elf32_i860)"
+eelf32_i960.c: $(srcdir)/emulparams/elf32_i960.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_i960 "$(tdir_elf32_i960)"
+eelf32b4300.c: $(srcdir)/emulparams/elf32b4300.sh \
+ $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32b4300 "$(tdir_elf32b4300)"
+eelf32cr16.c: $(srcdir)/emulparams/elf32cr16.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/cr16elf.em \
+ $(srcdir)/scripttempl/elf32cr16.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32cr16 "$(tdir_elf32crx)"
+eelf32cr16c.c: $(srcdir)/emulparams/elf32cr16c.sh \
+ $(ELF_DEPS) \
+ $(srcdir)/scripttempl/elf32cr16c.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32cr16c "$(tdir_elf32cr16c)"
+eelf32bmip.c: $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32bmip "$(tdir_elf32bmip)"
+eelf32bsmip.c: $(srcdir)/emulparams/elf32bsmip.sh \
+ $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) $(srcdir)/emultempl/irix.em \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32bsmip "$(tdir_elf32bsmip)"
+eelf32btsmip.c: $(srcdir)/emulparams/elf32btsmip.sh \
+ $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32btsmip "$(tdir_elf32btsmip)"
+eelf32crx.c: $(srcdir)/emulparams/elf32crx.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/crxelf.em \
+ $(srcdir)/scripttempl/elf32crx.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32crx "$(tdir_elf32crx)"
+eelf32btsmipn32.c: $(srcdir)/emulparams/elf32btsmipn32.sh \
+ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32btsmipn32 "$(tdir_elf32btsmipn32)"
+eelf32ltsmip.c: $(srcdir)/emulparams/elf32ltsmip.sh \
+ $(srcdir)/emulparams/elf32btsmip.sh $(srcdir)/emulparams/elf32bmip.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ltsmip "$(tdir_elf32ltsmip)"
+eelf32ltsmipn32.c: $(srcdir)/emulparams/elf32ltsmipn32.sh \
+ $(srcdir)/emulparams/elf32btsmipn32.sh \
+ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ltsmipn32 "$(tdir_elf32ltsmipn32)"
+eelf32ebmip.c: $(srcdir)/emulparams/elf32ebmip.sh \
+ $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ebmip "$(tdir_elf32ebmip)"
+eelf32ebmipvxworks.c: $(srcdir)/emulparams/elf32ebmipvxworks.sh \
+ $(srcdir)/emulparams/elf32bmip.sh $(srcdir)/emulparams/vxworks.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/mipself.em \
+ $(srcdir)/emultempl/vxworks.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ebmipvxworks "$(tdir_elf32ebmipvxworks)"
+eelf32elmip.c: $(srcdir)/emulparams/elf32elmip.sh \
+ $(srcdir)/emulparams/elf32lmip.sh $(srcdir)/emulparams/elf32bmip.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32elmip "$(tdir_elf32elmip)"
+eelf32elmipvxworks.c: $(srcdir)/emulparams/elf32elmipvxworks.sh \
+ $(srcdir)/emulparams/elf32bmip.sh $(srcdir)/emulparams/vxworks.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/mipself.em \
+ $(srcdir)/emultempl/vxworks.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32elmipvxworks "$(tdir_elf32elmipvxworks)"
+eelf32bmipn32.c: $(srcdir)/emulparams/elf32bmipn32.sh \
+ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/irix.em $(srcdir)/emultempl/mipself.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32bmipn32 "$(tdir_elf32bmipn32)"
+eelf32l4300.c: $(srcdir)/emulparams/elf32l4300.sh \
+ $(srcdir)/emulparams/elf32b4300.sh $(srcdir)/emulparams/elf32bmip.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32l4300 "$(tdir_elf32l4300)"
+eelf32lmip.c: $(srcdir)/emulparams/elf32lmip.sh \
+ $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32lmip "$(tdir_elf32lmip)"
+eelf32mb_linux.c: $(srcdir)/emulparams/elf32mb_linux.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32mb_linux "$(tdir_microblaze)"
+eelf32microblaze.c: $(srcdir)/emulparams/elf32microblaze.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elfmicroblaze.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32microblaze "$(tdir_microblaze)"
+eelf32mipswindiss.c: $(srcdir)/emulparams/elf32mipswindiss.sh $(ELF_DEPS) \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32mipswindiss "$(tdir_elf32mipswindiss)"
+eelf32m32c.c: $(srcdir)/emulparams/elf32m32c.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/needrelax.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32m32c "$(tdir_m32c)"
+eelf32mt.c: $(srcdir)/emulparams/elf32mt.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32mt "$(tdir_mt)"
+eelf32lppc.c: $(srcdir)/emulparams/elf32lppc.sh \
+ $(srcdir)/emulparams/elf32ppccommon.sh \
+ $(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emultempl/ppc32elf.em \
+ ldemul-list.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32lppc "$(tdir_elf32lppc)"
+eelf32lppcnto.c: $(srcdir)/emulparams/elf32lppcnto.sh \
+ $(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emulparams/elf32ppccommon.sh \
+ $(srcdir)/emultempl/ppc32elf.em $(ELF_DEPS) \
+ ldemul-list.h \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32lppcnto "$(tdir_elf32lppcnto)"
+eelf32lppcsim.c: $(srcdir)/emulparams/elf32lppcsim.sh \
+ $(srcdir)/emulparams/elf32lppc.sh $(srcdir)/emulparams/elf32ppc.sh \
+ $(srcdir)/emulparams/elf32ppccommon.sh $(srcdir)/emultempl/ppc32elf.em \
+ ldemul-list.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32lppcsim "$(tdir_elf32lppcsim)"
+eelf32ppcnto.c: $(srcdir)/emulparams/elf32ppcnto.sh \
+ $(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emulparams/elf32ppccommon.sh \
+ $(srcdir)/emultempl/ppc32elf.em $(ELF_DEPS) \
+ ldemul-list.h \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ppcnto "$(tdir_elf32ppcnto)"
+eelf32ppcwindiss.c: $(srcdir)/emulparams/elf32ppcwindiss.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ppcwindiss "$(tdir_elf32ppcwindiss)"
+eelf32ppcvxworks.c: $(srcdir)/emulparams/elf32ppcvxworks.sh \
+ $(srcdir)/emulparams/elf32ppccommon.sh $(srcdir)/emulparams/vxworks.sh \
+ $(srcdir)/emultempl/vxworks.em $(ELF_DEPS) \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ppcvxworks "$(tdir_elf32ppcvxworks)"
+eelf32lsmip.c: $(srcdir)/emulparams/elf32lsmip.sh \
+ $(srcdir)/emulparams/elf32lmip.sh $(srcdir)/emulparams/elf32bmip.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32lsmip "$(tdir_elf32lsmip)"
+eelf32openrisc.c: $(srcdir)/emulparams/elf32openrisc.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32openrisc "$(tdir_openrisc)"
+eelf32ppc.c: $(srcdir)/emulparams/elf32ppc.sh \
+ $(srcdir)/emulparams/elf32ppccommon.sh $(srcdir)/emultempl/ppc32elf.em \
+ ldemul-list.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ppc "$(tdir_elf32ppc)"
+eelf32ppc_fbsd.c: $(srcdir)/emulparams/elf32ppc_fbsd.sh \
+ $(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emulparams/elf32ppccommon.sh \
+ $(srcdir)/emultempl/ppc32elf.em $(ELF_DEPS) \
+ ldemul-list.h \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ppc_fbsd "$(tdir_elf32ppc_fbsd)"
+eelf32ppcsim.c: $(srcdir)/emulparams/elf32ppcsim.sh \
+ $(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emulparams/elf32ppccommon.sh \
+ $(srcdir)/emultempl/ppc32elf.em $(ELF_DEPS) \
+ ldemul-list.h \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ppcsim "$(tdir_elf32ppcsim)"
+eelf32ppclinux.c: $(srcdir)/emulparams/elf32ppclinux.sh \
+ $(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emulparams/elf32ppccommon.sh \
+ $(srcdir)/emultempl/ppc32elf.em $(ELF_DEPS) \
+ ldemul-list.h \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ppclinux "$(tdir_elf32ppclinux)"
+eelf64ppc.c: $(srcdir)/emulparams/elf64ppc.sh $(srcdir)/emultempl/ppc64elf.em \
+ ldemul-list.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64ppc "$(tdir_elf64ppc)"
+eelf64lppc.c: $(srcdir)/emulparams/elf64lppc.sh \
+ $(srcdir)/emulparams/elf64ppc.sh $(srcdir)/emultempl/ppc64elf.em \
+ ldemul-list.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64lppc "$(tdir_elf64lppc)"
+eelf32i370.c: $(srcdir)/emulparams/elf32i370.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elfi370.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32i370 "$(tdir_elf32i370)"
+eelf32ip2k.c: $(srcdir)/emulparams/elf32ip2k.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ip2k "$(tdir_ip2k)"
+eelf32iq2000.c: $(srcdir)/emulparams/elf32iq2000.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/iq2000.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32iq2000 "$(tdir_iq2000)"
+eelf32iq10.c: $(srcdir)/emulparams/elf32iq10.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/iq2000.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32iq10 "$(tdir_iq10)"
+eelf32lm32.c: $(srcdir)/emulparams/elf32lm32.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32lm32 "$(tdir_elf32lm32)"
+eelf32lm32fd.c: $(srcdir)/emulparams/elf32lm32fd.sh \
+ $(srcdir)/emulparams/elf32lm32.sh $(ELF_DEPS) \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32lm32fd "$(tdir_elf32lm32fd)"
+eelf64alpha.c: $(srcdir)/emulparams/elf64alpha.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/alphaelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64alpha "$(tdir_elf64alpha)"
+eelf64alpha_fbsd.c: $(srcdir)/emulparams/elf64alpha_fbsd.sh \
+ $(srcdir)/emulparams/elf64alpha.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/alphaelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64alpha_fbsd "$(tdir_elf64alpha_fbsd)"
+eelf64alpha_nbsd.c: $(srcdir)/emulparams/elf64alpha_nbsd.sh \
+ $(srcdir)/emulparams/elf64alpha.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/alphaelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64alpha_nbsd "$(tdir_elf64alpha_nbsd)"
+eelf64hppa.c: $(srcdir)/emulparams/elf64hppa.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf64hppa.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64hppa "$(tdir_elf64hppa)"
+eelf64_aix.c: $(srcdir)/emulparams/elf64_aix.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64_aix "$(tdir_elf64_aix)"
+eelf64_ia64.c: $(srcdir)/emulparams/elf64_ia64.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/ia64elf.em \
+ $(srcdir)/emultempl/needrelax.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64_ia64 "$(tdir_elf64_ia64)"
+eelf64_ia64_fbsd.c: $(srcdir)/emulparams/elf64_ia64_fbsd.sh \
+ $(srcdir)/emulparams/elf64_ia64.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/ia64elf.em \
+ $(srcdir)/emultempl/needrelax.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64_ia64_fbsd "$(tdir_elf64_ia64_fbsd)"
+eelf64_s390.c: $(srcdir)/emulparams/elf64_s390.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64_s390 "$(tdir_elf64_s390)"
+eelf64_sparc.c: $(srcdir)/emulparams/elf64_sparc.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64_sparc "$(tdir_elf64_sparc)"
+eelf64_sparc_fbsd.c: $(srcdir)/emulparams/elf64_sparc_fbsd.sh \
+ $(srcdir)/emulparams/elf64_sparc.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64_sparc_fbsd "$(tdir_elf64_sparc_fbsd)"
+eelf64_sparc_sol2.c: $(srcdir)/emulparams/elf64_sparc_sol2.sh \
+ $(srcdir)/emulparams/elf64_sparc.sh \
+ $(srcdir)/emulparams/solaris2.sh \
+ $(srcdir)/emultempl/solaris2.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64_sparc_sol2 "$(tdir_elf64_sparc_sol2)"
+eelf64bmip.c: $(srcdir)/emulparams/elf64bmip.sh \
+ $(srcdir)/emulparams/elf64bmip-defs.sh \
+ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/irix.em $(srcdir)/emultempl/mipself.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64bmip "$(tdir_elf64bmip)"
+eelf64mmix.c: $(srcdir)/emulparams/elf64mmix.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/mmix-elfnmmo.em \
+ $(srcdir)/emultempl/mmixelf.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64mmix "$(tdir_elf64mmix)"
+emmo.c: $(srcdir)/emulparams/mmo.sh $(srcdir)/emultempl/mmix-elfnmmo.em \
+ $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/elf-generic.em \
+ $(srcdir)/emultempl/mmo.em \
+ $(srcdir)/scripttempl/mmo.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mmo "$(tdir_mmo)"
+eelf64btsmip.c: $(srcdir)/emulparams/elf64btsmip.sh \
+ $(srcdir)/emulparams/elf64bmip-defs.sh \
+ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64btsmip "$(tdir_elf64btsmip)"
+eelf64ltsmip.c: $(srcdir)/emulparams/elf64ltsmip.sh \
+ $(srcdir)/emulparams/elf64btsmip.sh $(srcdir)/emulparams/elf64bmip-defs.sh \
+ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64ltsmip "$(tdir_elf64ltsmip)"
+eelf_i386.c: $(srcdir)/emulparams/elf_i386.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_i386 "$(tdir_elf_i386)"
+eelf_x86_64.c: $(srcdir)/emulparams/elf_x86_64.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_x86_64 "$(tdir_elf_x86_64)"
+eelf_x86_64_fbsd.c: $(srcdir)/emulparams/elf_x86_64_fbsd.sh \
+ $(srcdir)/emulparams/elf_x86_64.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_x86_64_fbsd "$(tdir_elf_x86_64_fbsd)"
+eelf_x86_64_sol2.c: $(srcdir)/emulparams/elf_x86_64_sol2.sh \
+ $(srcdir)/emulparams/elf_x86_64.sh \
+ $(srcdir)/emulparams/solaris2.sh \
+ $(srcdir)/emultempl/solaris2.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_x86_64_sol2 "$(tdir_elf_x86_64_sol2)"
+eelf_l1om.c: $(srcdir)/emulparams/elf_l1om.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_l1om "$(tdir_elf_l1om)"
+eelf_l1om_fbsd.c: $(srcdir)/emulparams/elf_l1om_fbsd.sh \
+ $(srcdir)/emulparams/elf_l1om.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_l1om_fbsd "$(tdir_elf_l1om_fbsd)"
+eelf_i386_be.c: $(srcdir)/emulparams/elf_i386_be.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_i386_be "$(tdir_elf_i386_be)"
+eelf_i386_chaos.c: $(srcdir)/emulparams/elf_i386_chaos.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf_chaos.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_i386_chaos "$(tdir_elf_i386_chaos)"
+eelf_i386_fbsd.c: $(srcdir)/emulparams/elf_i386_fbsd.sh \
+ $(srcdir)/emulparams/elf_i386.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_i386_fbsd "$(tdir_elf_i386_fbsd)"
+eelf_i386_ldso.c: $(srcdir)/emulparams/elf_i386_ldso.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_i386_ldso "$(tdir_elf_i386_ldso)"
+eelf_i386_sol2.c: $(srcdir)/emulparams/elf_i386_sol2.sh \
+ $(srcdir)/emulparams/solaris2.sh \
+ $(srcdir)/emultempl/solaris2.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_i386_sol2 "$(tdir_elf_i386_sol2)"
+eelf_i386_vxworks.c: $(srcdir)/emulparams/elf_i386_vxworks.sh \
+ $(srcdir)/emulparams/vxworks.sh $(srcdir)/emultempl/vxworks.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_i386_vxworks "$(tdir_elf_i386_vxworks)"
+eelf_s390.c: $(srcdir)/emulparams/elf_s390.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_s390 "$(tdir_elf_s390)"
+egld960.c: $(srcdir)/emulparams/gld960.sh \
+ $(srcdir)/emultempl/gld960.em $(srcdir)/scripttempl/i960.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} gld960 "$(tdir_gld960)"
+egld960coff.c: $(srcdir)/emulparams/gld960coff.sh \
+ $(srcdir)/emultempl/gld960c.em $(srcdir)/scripttempl/i960.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} gld960coff "$(tdir_gld960coff)"
+eh8300.c: $(srcdir)/emulparams/h8300.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300 "$(tdir_h8300)"
+eh8300h.c: $(srcdir)/emulparams/h8300h.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300h.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300h "$(tdir_h8300h)"
+eh8300s.c: $(srcdir)/emulparams/h8300s.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300s.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300s "$(tdir_h8300s)"
+eh8300hn.c: $(srcdir)/emulparams/h8300hn.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300hn.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300hn "$(tdir_h8300hn)"
+eh8300sn.c: $(srcdir)/emulparams/h8300sn.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300sn.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300sn "$(tdir_h8300sn)"
+eh8300sx.c: $(srcdir)/emulparams/h8300sx.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300sx.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300sx "$(tdir_h8300sx)"
+eh8300sxn.c: $(srcdir)/emulparams/h8300sxn.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300sxn.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300sxn "$(tdir_h8300sxn)"
+eh8300elf.c: $(srcdir)/emulparams/h8300elf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300elf "$(tdir_h8300elf)"
+eh8300helf.c: $(srcdir)/emulparams/h8300helf.sh \
+ $(srcdir)/emulparams/h8300elf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300helf "$(tdir_h8300helf)"
+eh8300self.c: $(srcdir)/emulparams/h8300self.sh \
+ $(srcdir)/emulparams/h8300elf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300self "$(tdir_h8300self)"
+eh8300hnelf.c: $(srcdir)/emulparams/h8300hnelf.sh \
+ $(srcdir)/emulparams/h8300elf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300hnelf "$(tdir_h8300hnelf)"
+eh8300snelf.c: $(srcdir)/emulparams/h8300snelf.sh \
+ $(srcdir)/emulparams/h8300elf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300snelf "$(tdir_h8300snelf)"
+eh8300sxelf.c: $(srcdir)/emulparams/h8300sxelf.sh \
+ $(srcdir)/emulparams/h8300elf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300sxelf "$(tdir_h8300sxelf)"
+eh8300sxnelf.c: $(srcdir)/emulparams/h8300sxnelf.sh \
+ $(srcdir)/emulparams/h8300elf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300sxnelf "$(tdir_h8300sxnelf)"
+eh8500.c: $(srcdir)/emulparams/h8500.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8500.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8500 "$(tdir_h8500)"
+eh8500b.c: $(srcdir)/emulparams/h8500b.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8500b.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8500b "$(tdir_h8500b)"
+eh8500c.c: $(srcdir)/emulparams/h8500c.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8500c.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8500c "$(tdir_h8500c)"
+eh8500m.c: $(srcdir)/emulparams/h8500m.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8500m.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8500m "$(tdir_h8500m)"
+eh8500s.c: $(srcdir)/emulparams/h8500s.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8500s.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8500s "$(tdir_h8500s)"
+ehp300bsd.c: $(srcdir)/emulparams/hp300bsd.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} hp300bsd "$(tdir_hp300bsd)"
+ehp3hpux.c: $(srcdir)/emulparams/hp3hpux.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} hp3hpux "$(tdir_hp3hpux)"
+ehppaelf.c: $(srcdir)/emulparams/hppaelf.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/hppaelf.em \
+ $(srcdir)/scripttempl/hppaelf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} hppaelf "$(tdir_hppaelf)"
+ehppalinux.c: $(srcdir)/emulparams/hppalinux.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/hppaelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} hppalinux "$(tdir_hppalinux)"
+ehppanbsd.c: $(srcdir)/emulparams/hppanbsd.sh \
+ $(srcdir)/emulparams/hppaelf.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/hppaelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} hppanbsd "$(tdir_hppanbsd)"
+ehppaobsd.c: $(srcdir)/emulparams/hppaobsd.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/hppaelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} hppaobsd "$(tdir_hppaobsd)"
+ehppa64linux.c: $(srcdir)/emulparams/hppa64linux.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} hppa64linux "$(tdir_hppa64linux)"
+ei386aout.c: $(srcdir)/emulparams/i386aout.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386aout "$(tdir_i386aout)"
+ei386beos.c: $(srcdir)/emulparams/i386beos.sh \
+ $(srcdir)/emultempl/beos.em $(srcdir)/scripttempl/i386beos.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386beos "$(tdir_i386beos)"
+ei386bsd.c: $(srcdir)/emulparams/i386bsd.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386bsd "$(tdir_i386bsd)"
+ei386coff.c: $(srcdir)/emulparams/i386coff.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i386coff.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386coff "$(tdir_i386coff)"
+ei386go32.c: $(srcdir)/emulparams/i386go32.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i386go32.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386go32 "$(tdir_i386go32)"
+ei386linux.c: $(srcdir)/emulparams/i386linux.sh \
+ $(srcdir)/emultempl/linux.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386linux "$(tdir_i386linux)"
+ei386lynx.c: $(srcdir)/emulparams/i386lynx.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386lynx "$(tdir_i386lynx)"
+ei386mach.c: $(srcdir)/emulparams/i386mach.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386mach "$(tdir_i386mach)"
+ei386moss.c: $(srcdir)/emulparams/i386moss.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386moss "$(tdir_i386moss)"
+ei386msdos.c: $(srcdir)/emulparams/i386msdos.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i386msdos.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386msdos "$(tdir_i386msdos)"
+ei386nbsd.c: $(srcdir)/emulparams/i386nbsd.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386nbsd "$(tdir_i386nbsd)"
+ei386nto.c: $(srcdir)/emulparams/i386nto.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386nto "$(tdir_i386nto)"
+ei386nw.c: $(srcdir)/emulparams/i386nw.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/nw.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386nw "$(tdir_i386nw)"
+ei386pe.c: $(srcdir)/emulparams/i386pe.sh \
+ $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386pe "$(tdir_i386pe)"
+ei386pe_posix.c: $(srcdir)/emulparams/i386pe_posix.sh \
+ $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386pe_posix "$(tdir_i386pe_posix)"
+ei386pep.c: $(srcdir)/emulparams/i386pep.sh \
+ $(srcdir)/emultempl/pep.em $(srcdir)/scripttempl/pep.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386pep "$(tdir_i386pe)"
+elnk960.c: $(srcdir)/emulparams/lnk960.sh \
+ $(srcdir)/emultempl/lnk960.em $(srcdir)/scripttempl/i960.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} lnk960 "$(tdir_lnk960)"
+em68hc11elf.c: $(srcdir)/emulparams/m68hc11elf.sh \
+ $(srcdir)/emultempl/m68hc1xelf.em $(ELF_DEPS) \
+ $(srcdir)/scripttempl/elfm68hc11.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68hc11elf "$(tdir_m68hc11)"
+em68hc11elfb.c: $(srcdir)/emulparams/m68hc11elfb.sh \
+ $(srcdir)/emultempl/m68hc1xelf.em $(ELF_DEPS) \
+ $(srcdir)/scripttempl/elfm68hc11.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68hc11elfb "$(tdir_m68hc11b)"
+em68hc12elf.c: $(srcdir)/emulparams/m68hc12elf.sh \
+ $(srcdir)/emultempl/m68hc1xelf.em $(ELF_DEPS) \
+ $(srcdir)/scripttempl/elfm68hc12.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68hc12elf "$(tdir_m68hc12)"
+em68hc12elfb.c: $(srcdir)/emulparams/m68hc12elfb.sh \
+ $(srcdir)/emultempl/m68hc1xelf.em $(ELF_DEPS) \
+ $(srcdir)/scripttempl/elfm68hc12.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68hc12elfb "$(tdir_m68hc12b)"
+em68k4knbsd.c: $(srcdir)/emulparams/m68k4knbsd.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68k4knbsd "$(tdir_m68k4knbsd)"
+em68kaout.c: $(srcdir)/emulparams/m68kaout.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68kaout "$(tdir_m68kaout)"
+em68kaux.c: $(srcdir)/emulparams/m68kaux.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/m68kaux.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68kaux "$(tdir_m68kaux)"
+em68kcoff.c: $(srcdir)/emulparams/m68kcoff.sh \
+ $(srcdir)/emultempl/m68kcoff.em $(srcdir)/scripttempl/m68kcoff.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68kcoff "$(tdir_m68kcoff)"
+em68kelf.c: $(srcdir)/emulparams/m68kelf.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/m68kelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68kelf "$(tdir_m68kelf)"
+em68kelfnbsd.c: $(srcdir)/emulparams/m68kelfnbsd.sh \
+ $(srcdir)/emulparams/m68kelf.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/m68kelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68kelfnbsd "$(tdir_m68kelfnbsd)"
+em68klinux.c: $(srcdir)/emulparams/m68klinux.sh \
+ $(srcdir)/emultempl/linux.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68klinux "$(tdir_m68klinux)"
+em68knbsd.c: $(srcdir)/emulparams/m68knbsd.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68knbsd "$(tdir_m68knbsd)"
+em68kpsos.c: $(srcdir)/emulparams/m68kpsos.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/psos.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68kpsos "$(tdir_m68kpsos)"
+em88kbcs.c: $(srcdir)/emulparams/m88kbcs.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/m88kbcs.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m88kbcs "$(tdir_m88kbcs)"
+emcorepe.c: $(srcdir)/emulparams/mcorepe.sh \
+ $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mcorepe "$(tdir_mcorepe)"
+emipsbig.c: $(srcdir)/emulparams/mipsbig.sh $(srcdir)/emultempl/generic.em \
+ $(srcdir)/scripttempl/mips.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mipsbig "$(tdir_mipsbig)"
+emipsbsd.c: $(srcdir)/emulparams/mipsbsd.sh $(srcdir)/emultempl/generic.em \
+ $(srcdir)/scripttempl/mipsbsd.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mipsbsd "$(tdir_mipsbsd)"
+emipsidt.c: $(srcdir)/emulparams/mipsidt.sh $(srcdir)/emultempl/generic.em \
+ $(srcdir)/emultempl/mipsecoff.em $(srcdir)/scripttempl/mips.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} mipsidt "$(tdir_mipsidt)"
+emipsidtl.c: $(srcdir)/emulparams/mipsidtl.sh $(srcdir)/emultempl/generic.em \
+ $(srcdir)/emultempl/mipsecoff.em $(srcdir)/scripttempl/mips.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} mipsidtl "$(tdir_mipsidtl)"
+emipslit.c: $(srcdir)/emulparams/mipslit.sh $(srcdir)/emultempl/generic.em \
+ $(srcdir)/scripttempl/mips.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mipslit "$(tdir_mipslit)"
+emipslnews.c: $(srcdir)/emulparams/mipslnews.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/mips.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mipslnews "$(tdir_mipslnews)"
+emipspe.c: $(srcdir)/emulparams/mipspe.sh $(srcdir)/emultempl/pe.em \
+ $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mipspe "$(tdir_mipspe)"
+emn10300.c: $(srcdir)/emulparams/mn10300.sh \
+ $(srcdir)/emulparams/mn10200.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mn10300 "$(tdir_mn10300)"
+emn10200.c: $(srcdir)/emulparams/mn10200.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mn10200 "$(tdir_mn10200)"
+emsp430x110.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x110 "$(tdir_msp430x110)" msp430all
+emsp430x112.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x112 "$(tdir_msp430x112)" msp430all
+emsp430x1101.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1101 "$(tdir_msp430x1101)" msp430all
+emsp430x1111.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1111 "$(tdir_msp430x1111)" msp430all
+emsp430x1121.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1121 "$(tdir_msp430x1121)" msp430all
+emsp430x1122.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1122 "$(tdir_msp430x1122)" msp430all
+emsp430x1132.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1132 "$(tdir_msp430x1132)" msp430all
+emsp430x122.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x122 "$(tdir_msp430x122)" msp430all
+emsp430x123.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x123 "$(tdir_msp430x123)" msp430all
+emsp430x1222.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1222 "$(tdir_msp430x1222)" msp430all
+emsp430x1232.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1232 "$(tdir_msp430x1232)" msp430all
+emsp430x133.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x133 "$(tdir_msp430x133)" msp430all
+emsp430x135.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x135 "$(tdir_msp430x135)" msp430all
+emsp430x1331.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1331 "$(tdir_msp430x1331)" msp430all
+emsp430x1351.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1351 "$(tdir_msp430x1351)" msp430all
+emsp430x147.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x147 "$(tdir_msp430x147)" msp430all
+emsp430x148.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x148 "$(tdir_msp430x148)" msp430all
+emsp430x149.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x149 "$(tdir_msp430x149)" msp430all
+emsp430x155.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x155 "$(tdir_msp430x155)" msp430all
+emsp430x156.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x156 "$(tdir_msp430x156)" msp430all
+emsp430x157.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x157 "$(tdir_msp430x157)" msp430all
+emsp430x167.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x167 "$(tdir_msp430x167)" msp430all
+emsp430x168.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x168 "$(tdir_msp430x168)" msp430all
+emsp430x169.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x169 "$(tdir_msp430x169)" msp430all
+emsp430x1610.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1610 "$(tdir_msp430x1610)" msp430all
+emsp430x1611.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1611 "$(tdir_msp430x1611)" msp430all
+emsp430x1612.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1612 "$(tdir_msp430x1612)" msp430all
+emsp430x2101.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x2101 "$(tdir_msp430x2101)" msp430all
+emsp430x2111.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x2111 "$(tdir_msp430x2111)" msp430all
+emsp430x2121.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x2121 "$(tdir_msp430x2121)" msp430all
+emsp430x2131.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x2131 "$(tdir_msp430x2131)" msp430all
+emsp430x311.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x311 "$(tdir_msp430x311)" msp430all
+emsp430x312.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x312 "$(tdir_msp430x312)" msp430all
+emsp430x313.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x313 "$(tdir_msp430x313)" msp430all
+emsp430x314.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x314 "$(tdir_msp430x314)" msp430all
+emsp430x315.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x315 "$(tdir_msp430x315)" msp430all
+emsp430x323.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x323 "$(tdir_msp430x323)" msp430all
+emsp430x325.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x325 "$(tdir_msp430x325)" msp430all
+emsp430x336.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x336 "$(tdir_msp430x336)" msp430all
+emsp430x337.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x337 "$(tdir_msp430x337)" msp430all
+emsp430x412.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x412 "$(tdir_msp430x412)" msp430all
+emsp430x413.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x413 "$(tdir_msp430x413)" msp430all
+emsp430x415.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x415 "$(tdir_msp430x415)" msp430all
+emsp430x417.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x417 "$(tdir_msp430x417)" msp430all
+emsp430xE423.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xE423 "$(tdir_msp430xE423)" msp430all
+emsp430xE425.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xE425 "$(tdir_msp430xE425)" msp430all
+emsp430xE427.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xE427 "$(tdir_msp430xE427)" msp430all
+emsp430xW423.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xW423 "$(tdir_msp430xW423)" msp430all
+emsp430xW425.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xW425 "$(tdir_msp430xW425)" msp430all
+emsp430xW427.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xW427 "$(tdir_msp430xW427)" msp430all
+emsp430xG437.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xG437 "$(tdir_msp430xG437)" msp430all
+emsp430xG438.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xG438 "$(tdir_msp430xG438)" msp430all
+emsp430xG439.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xG439 "$(tdir_msp430xG439)" msp430all
+emsp430x435.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x435 "$(tdir_msp430x435)" msp430all
+emsp430x436.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x436 "$(tdir_msp430x436)" msp430all
+emsp430x437.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x437 "$(tdir_msp430x437)" msp430all
+emsp430x447.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x447 "$(tdir_msp430x447)" msp430all
+emsp430x448.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x448 "$(tdir_msp430x448)" msp430all
+emsp430x449.c: $(srcdir)/emulparams/msp430all.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x449 "$(tdir_msp430x449)" msp430all
+enews.c: $(srcdir)/emulparams/news.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} news "$(tdir_news)"
+ens32knbsd.c: $(srcdir)/emulparams/ns32knbsd.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/netbsd.em \
+ $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} ns32knbsd "$(tdir_ns32knbsd)"
+eor32.c: $(srcdir)/emulparams/or32.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/or32.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} or32 "$(tdir_or32)"
+eor32elf.c: $(srcdir)/emulparams/or32elf.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} or32elf "$(tdir_or32elf)"
+epc532macha.c: $(srcdir)/emulparams/pc532macha.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} pc532macha "$(tdir_pc532macha)"
+epdp11.c: $(srcdir)/emulparams/pdp11.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} pdp11 "$(tdir_pdp11)"
+epjelf.c: $(srcdir)/emulparams/pjelf.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} pjelf "$(tdir_pjelf)"
+epjlelf.c: $(srcdir)/emulparams/pjlelf.sh $(srcdir)/emulparams/pjelf.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} pjlelf "$(tdir_pjlelf)"
+eppcmacos.c: $(srcdir)/emulparams/ppcmacos.sh \
+ $(srcdir)/emultempl/aix.em $(srcdir)/scripttempl/aix.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} ppcmacos "$(tdir_ppcmacos)"
+eppcnw.c: $(srcdir)/emulparams/ppcnw.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/nw.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} ppcnw "$(tdir_ppcnw)"
+eppcpe.c: $(srcdir)/emulparams/ppcpe.sh \
+ $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/ppcpe.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} ppcpe "$(tdir_ppcpe)"
+eppclynx.c: $(srcdir)/emulparams/ppclynx.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} ppclynx "$(tdir_ppclynx)"
+eriscix.c: $(srcdir)/emulparams/riscix.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} riscix "$(tdir_riscix)"
+escore3_elf.c: $(srcdir)/emulparams/scoreelf.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/scoreelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} score3_elf "$(tdir_score3_elf)" scoreelf
+escore7_elf.c: $(srcdir)/emulparams/scoreelf.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/scoreelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} score7_elf "$(tdir_score7_elf)" scoreelf
+esh.c: $(srcdir)/emulparams/sh.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/sh.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} sh "$(tdir_sh)"
+eshelf.c: $(srcdir)/emulparams/shelf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf "$(tdir_shelf)"
+eshelf32.c: $(srcdir)/emulparams/shelf32.sh \
+ $(BFDDIR)/libbfd.h $(INCDIR)/libiberty.h \
+ $(srcdir)/emultempl/sh64elf.em $(INCDIR)/elf/sh.h $(BFDDIR)/elf-bfd.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf32 "$(tdir_shelf32)"
+eshelf32_linux.c: $(srcdir)/emulparams/shelf32_linux.sh \
+ $(srcdir)/emulparams/shelf32.sh \
+ $(BFDDIR)/libbfd.h $(INCDIR)/libiberty.h \
+ $(srcdir)/emultempl/sh64elf.em $(INCDIR)/elf/sh.h $(BFDDIR)/elf-bfd.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf32_linux "$(tdir_shelf32_linux)"
+eshelf32_nbsd.c: $(srcdir)/emulparams/shelf32_nbsd.sh \
+ $(srcdir)/emulparams/shelf32.sh \
+ $(BFDDIR)/libbfd.h $(INCDIR)/libiberty.h \
+ $(srcdir)/emultempl/sh64elf.em $(INCDIR)/elf/sh.h $(BFDDIR)/elf-bfd.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf32_nbsd "$(tdir_shelf32_nbsd)"
+eshelf64.c: $(srcdir)/emulparams/shelf64.sh $(srcdir)/emulparams/shelf32.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf64 "$(tdir_shelf64)"
+eshelf64_nbsd.c: $(srcdir)/emulparams/shelf64_nbsd.sh \
+ $(srcdir)/emulparams/shelf32_nbsd.sh $(srcdir)/emulparams/shelf32.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf64_nbsd "$(tdir_shelf64_nbsd)"
+eshelf_fd.c: $(srcdir)/emulparams/shelf_fd.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf_fd "$(tdir_shelf_fd)"
+eshlelf_fd.c: $(srcdir)/emulparams/shlelf_fd.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf_fd "$(tdir_shlelf_fd)"
+eshelf_linux.c: $(srcdir)/emulparams/shelf_linux.sh \
+ $(srcdir)/emulparams/shlelf_linux.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf_linux "$(tdir_shelf_linux)"
+eshlelf_linux.c: $(srcdir)/emulparams/shlelf_linux.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf_linux "$(tdir_shlelf_linux)"
+eshelf_nbsd.c: $(srcdir)/emulparams/shelf_nbsd.sh \
+ $(srcdir)/emulparams/shelf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf_nbsd "$(tdir_shelf_nbsd)"
+eshelf_nto.c: $(srcdir)/emulparams/shelf_nto.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf_nto "$(tdir_shelf_nto)"
+eshelf_vxworks.c: $(srcdir)/emulparams/shelf_vxworks.sh \
+ $(srcdir)/emulparams/vxworks.sh $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc \
+ $(srcdir)/emultempl/vxworks.em ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf_vxworks "$(tdir_shelf_vxworks)"
+eshlelf_nbsd.c: $(srcdir)/emulparams/shlelf_nbsd.sh \
+ $(srcdir)/emulparams/shelf_nbsd.sh \
+ $(srcdir)/emulparams/shelf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf_nbsd "$(tdir_shlelf_nbsd)"
+eshlelf_nto.c: $(srcdir)/emulparams/shlelf_nto.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf_nto "$(tdir_shlelf_nto)"
+eshlelf_vxworks.c: $(srcdir)/emulparams/shlelf_vxworks.sh \
+ $(srcdir)/emulparams/shelf_vxworks.sh $(srcdir)/emulparams/vxworks.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc $(srcdir)/emultempl/vxworks.em \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf_vxworks "$(tdir_shlelf_vxworks)"
+eshelf_uclinux.c: $(srcdir)/emulparams/shelf_uclinux.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf_uclinux "$(tdir_shelf_uclinux)"
+eshlelf.c: $(srcdir)/emulparams/shlelf.sh \
+ $(srcdir)/emulparams/shelf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf "$(tdir_shlelf)"
+eshlsymbian.c: $(srcdir)/emulparams/shlsymbian.sh \
+ $(srcdir)/emulparams/shelf.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf32sh-symbian.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlsymbian "$(tdir_shlelf)"
+eshlelf32.c: $(srcdir)/emulparams/shlelf32.sh \
+ $(BFDDIR)/libbfd.h $(INCDIR)/libiberty.h $(srcdir)/emulparams/shelf32.sh \
+ $(srcdir)/emultempl/sh64elf.em $(INCDIR)/elf/sh.h $(BFDDIR)/elf-bfd.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf32 "$(tdir_shlelf32)"
+eshlelf32_linux.c: $(srcdir)/emulparams/shlelf32_linux.sh \
+ $(srcdir)/emulparams/shelf32_linux.sh $(srcdir)/emulparams/shelf32.sh \
+ $(BFDDIR)/libbfd.h $(INCDIR)/libiberty.h \
+ $(srcdir)/emultempl/sh64elf.em $(INCDIR)/elf/sh.h $(BFDDIR)/elf-bfd.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf32_linux "$(tdir_shlelf32_linux)"
+eshlelf32_nbsd.c: $(srcdir)/emulparams/shlelf32_nbsd.sh \
+ $(srcdir)/emulparams/shelf32_nbsd.sh $(srcdir)/emulparams/shelf32.sh \
+ $(BFDDIR)/libbfd.h $(INCDIR)/libiberty.h \
+ $(srcdir)/emultempl/sh64elf.em $(INCDIR)/elf/sh.h $(BFDDIR)/elf-bfd.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf32_nbsd "$(tdir_shlelf32_nbsd)"
+eshlelf64.c: $(srcdir)/emulparams/shlelf64.sh \
+ $(srcdir)/emulparams/shelf64.sh $(srcdir)/emulparams/shelf32.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf64 "$(tdir_shlelf64)"
+eshlelf64_nbsd.c: $(srcdir)/emulparams/shlelf64_nbsd.sh \
+ $(srcdir)/emulparams/shelf64_nbsd.sh \
+ $(srcdir)/emulparams/shelf32_nbsd.sh $(srcdir)/emulparams/shelf32.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf64_nbsd "$(tdir_shlelf64_nbsd)"
+eshl.c: $(srcdir)/emulparams/shl.sh \
+ $(srcdir)/emulparams/sh.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/sh.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shl "$(tdir_shl)"
+eshpe.c: $(srcdir)/emulparams/shpe.sh \
+ $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shpe "$(tdir_shl)"
+esparcaout.c: $(srcdir)/emulparams/sparcaout.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} sparcaout "$(tdir_sparcaout)"
+esparclinux.c: $(srcdir)/emulparams/sparclinux.sh \
+ $(srcdir)/emultempl/linux.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} sparclinux "$(tdir_sparclinux)"
+esparcnbsd.c: $(srcdir)/emulparams/sparcnbsd.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} sparcnbsd "$(tdir_sparcnbsd)"
+est2000.c: $(srcdir)/emulparams/st2000.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/st2000.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} st2000 "$(tdir_st2000)"
+esun3.c: $(srcdir)/emulparams/sun3.sh \
+ $(srcdir)/emultempl/sunos.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} sun3 "$(tdir_sun3)"
+esun4.c: $(srcdir)/emulparams/sun4.sh \
+ $(srcdir)/emultempl/sunos.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} sun4 "$(tdir_sun4)"
+etic30aout.c: $(srcdir)/emulparams/tic30aout.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/tic30aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} tic30aout "$(tdir_tic30aout)"
+etic30coff.c: $(srcdir)/emulparams/tic30coff.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/tic30coff.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} tic30coff "$(tdir_tic30coff)"
+etic3xcoff.c: $(srcdir)/emulparams/tic3xcoff.sh \
+ $(srcdir)/emultempl/ticoff.em $(srcdir)/scripttempl/tic4xcoff.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} tic3xcoff "$(tdir_tic4xcoff)"
+etic3xcoff_onchip.c: $(srcdir)/emulparams/tic3xcoff_onchip.sh \
+ $(srcdir)/emultempl/ticoff.em $(srcdir)/scripttempl/tic4xcoff.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} tic3xcoff_onchip "$(tdir_tic4xcoff)"
+etic4xcoff.c: $(srcdir)/emulparams/tic4xcoff.sh \
+ $(srcdir)/emultempl/ticoff.em $(srcdir)/scripttempl/tic4xcoff.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} tic4xcoff "$(tdir_tic4xcoff)"
+etic54xcoff.c: $(srcdir)/emulparams/tic54xcoff.sh \
+ $(srcdir)/emultempl/ticoff.em $(srcdir)/scripttempl/tic54xcoff.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} tic54xcoff "$(tdir_tic54xcoff)"
+etic80coff.c: $(srcdir)/emulparams/tic80coff.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/tic80coff.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} tic80coff "$(tdir_tic80coff)"
+evanilla.c: $(srcdir)/emulparams/vanilla.sh \
+ $(srcdir)/emultempl/vanilla.em $(srcdir)/scripttempl/vanilla.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} vanilla "$(tdir_vanilla)"
+evax.c: $(srcdir)/emulparams/vax.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} vax "$(tdir_vax)"
+evaxnbsd.c: $(srcdir)/emulparams/vaxnbsd.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} vaxnbsd "$(tdir_vaxnbsd)"
+evsta.c: $(srcdir)/emulparams/vsta.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} vsta "$(tdir_vsta)"
+ev850.c: $(srcdir)/emulparams/v850.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/v850.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} v850 "$(tdir_v850)"
+ew65.c: $(srcdir)/emulparams/w65.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/w65.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} w65 "$(tdir_w65)"
+ez80.c: $(srcdir)/emulparams/z80.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/z80.em \
+ $(srcdir)/scripttempl/z80.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} z80 "$(tdir_z80)"
+ez8001.c: $(srcdir)/emulparams/z8001.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/z8000.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} z8001 "$(tdir_z8001)"
+ez8002.c: $(srcdir)/emulparams/z8002.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/z8000.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} z8002 "$(tdir_z8002)"
+
+check-DEJAGNU: site.exp
+ srcroot=`cd $(srcdir) && pwd`; export srcroot; \
+ r=`pwd`; export r; \
+ LC_COLLATE=; LC_ALL=; LANG=; export LC_COLLATE LC_ALL LANG; \
+ EXPECT=$(EXPECT); export EXPECT; \
+ runtest=$(RUNTEST); \
+ if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
+ $$runtest --tool $(DEJATOOL) --srcdir $${srcroot}/testsuite \
+ CC="$(CC_FOR_TARGET)" CFLAGS="$(CFLAGS)" \
+ CXX="$(CXX_FOR_TARGET)" CXXFLAGS="$(CXXFLAGS)" \
+ CC_FOR_HOST="$(CC)" CFLAGS_FOR_HOST="$(CFLAGS)" \
+ OFILES="$(OFILES)" BFDLIB="$(TESTBFDLIB)" \
+ LIBIBERTY="$(LIBIBERTY) $(LIBINTL)" LIBS="$(LIBS)" \
+ DO_COMPARE="`echo '$(do_compare)' | sed -e 's,\\$$,,g'`" \
+ $(RUNTESTFLAGS); \
+ else echo "WARNING: could not find \`runtest'" 1>&2; :;\
+ fi
+
+# Rules for testing by relinking ld itself.
+# A similar test is in the testsuite. This target is for ease of use
+# when porting ld.
+
+ld-partial.@OBJEXT@: ld-new$(EXEEXT)
+ ./ld-new$(EXEEXT) $(HOSTING_EMU) -o ld-partial.@OBJEXT@ -r $(OFILES)
+ld1$(EXEEXT): ld-partial.@OBJEXT@
+ ./ld-new$(EXEEXT) $(HOSTING_EMU) -o ld1$(EXEEXT) $(HOSTING_CRT0) ld-partial.@OBJEXT@ $(TESTBFDLIB) $(LIBIBERTY) $(HOSTING_LIBS) $(LIBS)
+
+ld1-full$(EXEEXT): ld-new
+ ./ld-new$(EXEEXT) $(HOSTING_EMU) -o ld1-full$(EXEEXT) $(HOSTING_CRT0) $(OFILES) $(TESTBFDLIB) $(LIBIBERTY) $(HOSTING_LIBS) $(LIBS)
+
+ld2$(EXEEXT): ld1$(EXEEXT)
+ ./ld1$(EXEEXT) $(HOSTING_EMU) -o ld2$(EXEEXT) $(HOSTING_CRT0) $(OFILES) $(TESTBFDLIB) $(LIBIBERTY) $(HOSTING_LIBS) $(LIBS)
+
+ld3$(EXEEXT): ld2$(EXEEXT)
+ ./ld2$(EXEEXT) $(HOSTING_EMU) -o ld3$(EXEEXT) $(HOSTING_CRT0) $(OFILES) $(TESTBFDLIB) $(LIBIBERTY) $(HOSTING_LIBS) $(LIBS)
+
+bootstrap: ld3$(EXEEXT)
+ cmp ld2$(EXEEXT) ld3$(EXEEXT)
+
+.PHONY: bootstrap
+
+# DOCUMENTATION TARGETS
+# Manual configuration file; not usually attached to normal configuration,
+# because almost all configs use "gen" version of manual.
+# Set DOCVER above to change.
+configdoc.texi: ${DOCVER}-doc.texi
+ cp ${srcdir}/${DOCVER}-doc.texi ./configdoc.texi
+ chmod u+w ./configdoc.texi
+
+# Build the man page from the texinfo file
+# The sed command removes the no-adjust Nroff command so that
+# the man output looks standard.
+ld.1: $(srcdir)/ld.texinfo configdoc.texi
+ touch $@
+ -$(TEXI2POD) $(MANCONF) < $(srcdir)/ld.texinfo > ld.pod
+ -($(POD2MAN) ld.pod | \
+ sed -e '/^.if n .na/d' > $@.T$$$$ && \
+ mv -f $@.T$$$$ $@) || \
+ (rm -f $@.T$$$$ && exit 1)
+ rm -f ld.pod
+mostlyclean-local:
+ -rm -rf tmpdir
+
+.PHONY: install-exec-local install-data-local
+
+install-exec-local: ld-new$(EXEEXT) install-binPROGRAMS
+ $(mkinstalldirs) $(DESTDIR)$(tooldir)/bin
+ n=`echo $(installed_linker) | sed '$(transform)'`; \
+ if test "$(bindir)" != "$(tooldir)/bin"; then \
+ rm -f $(DESTDIR)$(tooldir)/bin/$(installed_linker)$(EXEEXT); \
+ ln $(DESTDIR)$(bindir)/$$n$(EXEEXT) $(DESTDIR)$(tooldir)/bin/$(installed_linker)$(EXEEXT) >/dev/null 2>/dev/null \
+ || $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) ld-new$(EXEEXT) $(DESTDIR)$(tooldir)/bin/$(installed_linker)$(EXEEXT); \
+ fi; \
+ if test "x$(install_as_default)" = "xyes"; then \
+ ld=`echo ld | sed '$(transform)'`; \
+ rm -f $(DESTDIR)$(bindir)/$$ld$(EXEEXT); \
+ ln $(DESTDIR)$(bindir)/$$n$(EXEEXT) $(DESTDIR)$(bindir)/$$ld$(EXEEXT) >/dev/null 2>/dev/null \
+ || $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) ld-new$(EXEEXT) $(DESTDIR)$(bindir)/$$ld$(EXEEXT); \
+ if test "$(bindir)" != "$(tooldir)/bin"; then \
+ rm -f $(DESTDIR)$(tooldir)/bin/ld$(EXEEXT); \
+ ln $(DESTDIR)$(bindir)/$$n$(EXEEXT) $(DESTDIR)$(tooldir)/bin/ld$(EXEEXT) >/dev/null 2>/dev/null \
+ || $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) ld-new$(EXEEXT) $(DESTDIR)$(tooldir)/bin/ld$(EXEEXT); \
+ fi; \
+ fi
+
+install-data-local:
+ $(mkinstalldirs) $(DESTDIR)$(scriptdir)/ldscripts
+ for f in ldscripts/*; do \
+ $(INSTALL_DATA) $$f $(DESTDIR)$(scriptdir)/$$f ; \
+ done
+diststuff: info $(EXTRA_DIST)
+
+# Both info (ld.info) and ld.1 depend on configdoc.texi.
+# But info isn't a direct target. Make info-recursive to depend on
+# ld.1 to support parallel build.
+info-recursive: ld.1
+distclean-local:
+ rm -rf ldscripts
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/binutils-2.21/ld/NEWS b/binutils-2.21/ld/NEWS
new file mode 100644
index 0000000..eaa5b0b
--- /dev/null
+++ b/binutils-2.21/ld/NEWS
@@ -0,0 +1,527 @@
+-*- text -*-
+
+Changes in 2.21:
+
+
+* Linker script expression evaluation is somewhat more sane. This may
+ break scripts that depend on quirks of the old expression evaluation.
+
+* Turn off underscoring for x86_64 PE+-COFF targets. For old behavior the
+ option --enable-leading-mingw64-underscores can be used on configure of
+ bfd.
+
+* Add support for the TMS320C6000 (TI C6X) processor family.
+
+* --add-needed renamed to --copy-dt-needed-entries in order to avoid confusion
+ with --as-needed option.
+
+* Extend .def file syntax by '== <ID>' for imports and exports. This allows
+ to alias the import/export table name written in PE image.
+
+* Add --exlcude-all-symbols option to PE based linkers. This prevents all
+ symbols from automatically being exported.
+
+* Add support for the Renesas RX processor.
+
+* Add support for alpha-vms target.
+
+Changes in 2.20:
+
+* GNU/Linux targets now support the STB_GNU_UNIQUE symbol binding. This is a
+ GNU extension to the standard set of ELF symbol bindings. The binding will
+ be passed on to the dynamic linker which will make sure that in the entire
+ process there is just one symbol with the given name and type in use.
+
+* PE targets now support a GNU extension to allow the alignment of common
+ common symbols to be specified. This support uses custom options in
+ the .drectve section, which will be disregarded by the native tools.
+
+* PE targets now add primitive support for ELF version scripts; symbols
+ are not versioned, but the local and global symbol visibility directives
+ are respected when filtering symbols in auto-export mode.
+
+* New option --no-export-dynamic to undo the effect of the -E and
+ --export-dynamic options.
+
+* ELF: --warn-alternate-em option to warn if an object has alternate
+ ELF machine code.
+
+* New script function REGION_ALIAS to add alias names to memory regions.
+
+* PE targets no longer make use of the long section names PE extension to
+ the COFF format when generating executable images, by default. The old
+ (slightly non-conformant) behaviour can still be invoked by using the
+ new '--enable-long-section-names' command-line option. It is also enabled
+ automatically in the presence of un-stripped debug information, as GDB
+ needs to be able to find the debug info sections by their full names.
+
+* For GNU/Linux systems the linker will now avoid processing any relocations
+ made against symbols of the STT_GNU_IFUNC type and instead emit them into
+ the resulting binary for processing by the loader.
+
+* --as-needed now links in a dynamic library if it satisfies undefined
+ symbols in regular objects, or in other dynamic libraries. In the
+ latter case the library is not linked if it is found in a DT_NEEDED
+ entry of one of the libraries already linked.
+
+* Add a new command line option, -Ttext-segment ADDR, for ELF targets
+ to set the address of the first byte of the text segment.
+
+* Add support for Sunplus score architecture.
+
+* Add new option --use-nul-prefixed-import-tables to ld for PE targets to
+ allow fallback to old import table generation with null element prefix.
+
+* Windows PE systems now support a new --exclude-modules-for-implib option,
+ allowing users to partition object files and archive members between a DLL
+ and its associated import library as they are generated during linking.
+
+* Add support for Lattice Mico32 (lm32) architecture.
+
+* Add CR16 ELF --embedded-relocs (used to embedded relocations into binaries
+ for Embedded-PIC code) option.
+
+* Add to the PE/PE+ targets the support of two different kinds of
+ pseudo-relocations. They can be selected by the switches
+ --enable-runtime-pseudo-reloc-v1 and --enable-runtime-pseudo-reloc-v2.
+ For the switch --enable-runtime-pseudo-reloc it uses for 32-bit
+ runtime pseudo relocation version one, for 64-bit the version two.
+
+Changes in 2.19:
+
+* Linker scripts support a new INSERT command that makes it easier to
+ augment the default script.
+
+* Linker script input section filespecs may now specify a file within an
+ archive by writing "archive:file".
+
+* The --sort-common switch now has an optional argument which specifies the
+ direction of sorting.
+
+* The M68K linker now supports multiple GOT generation schemes controlled via
+ the --got=<type> command line option.
+
+* The ARM EABI linker will now generate stubs for function calls to symbols
+ that are too far away. The placement of the stubs is controlled by a new
+ linker command line option: --stub-group-size=N.
+
+Changes in 2.18:
+
+* Linker sources now released under version 3 of the GNU General Public
+ License.
+
+* ELF: New --build-id option to generate a unique per-binary identifier
+ embedded in a note section.
+
+* Added support for National Semicondutor CompactRISC (ie CR16) target.
+
+* -l:foo now searches the library path for a filename called foo,
+ without converting it to libfoo.a or libfoo.so.
+
+* Add a new command line option '--default-script=FILE' or '-dT FILE'
+ which specifies a replacement for the built in, default linker
+ script.
+
+* ELF: Add -Bsymbolic-functions, --dynamic-list-cpp-new, which puts C++
+ operator new and delete on the dynamic list, and --dynamic-list-data,
+ builtin list for --dynamic-list, which puts global data symbols on the
+ dynamic list.
+
+* Add support for x86_64 PE+ target.
+
+* Add support for Score target.
+
+* ELF: Add --dynamic-list option to specify a list of global symbols
+ whose references shouldn't be bound to the definition within the
+ shared library, or a list of symbols which should be added to the
+ symbol table in the executable.
+
+* The default output section LMA has changed for allocatable sections from
+ being equal to VMA, to keeping the difference between LMA and VMA the same as
+ the previous output section in the same region. This is a more useful
+ default when using overlays and other cases where you specify an LMA
+ differing from the VMA for some sections.
+
+* New switch: --print-gc-sections to list any sections removed by garabge
+ collection.
+
+* ARM: Added --vfp11-denorm-fix option to work around an erratum in current
+ VFP11 coprocessors.
+
+Changes in 2.17:
+
+* Support for the Infineon XC16X has been added by KPIT Cummins Infosystems.
+
+* Modify the Linux linker search order to better match ld.so search order.
+ Look for DT_NEEDED libraries in paths specified by ld.so.conf before
+ searching the default directories, rather than vice versa.
+ Use $prefix/etc/ld.so.conf if it exists, otherwise /etc/ld.so.conf.
+
+* PE-COFF: Forward exports from DLL's can now be specified in .def files
+ passed directly to ld.
+
+* Support for the Z80 processor family has been added.
+
+* Add support for the "@<file>" syntax to the command line, so that extra
+ switches can be read from <file>.
+
+Changes in 2.16:
+
+* Support for the R_ARM_V4BX relocation as defined in the ARM AAELF
+ specification has been added via the --fix-v4bx command-line option.
+
+* New linker script construct AS_NEEDED(), which sets the --as-needed flag
+ for input files listed inside of it.
+
+* A new command-line option, --sysroot, can be used to override the
+ default sysroot location. It only applies to toolchains that were
+ configured using --with-sysroot.
+
+* New linker script functions: ORIGIN() and LENGTH() which return information
+ about a specified memory region.
+
+* Port to MAXQ processor contributed by HCL Tech.
+
+* Added SEGMENT_START to the linker script language to permit the user to
+ override the base address for a segment from the command-line.
+
+* ELF: --warn-shared-textrel option to warn if adding a DT_TEXTREL to a shared
+ object.
+
+* Added SORT_BY_NAME and SORT_BY_ALIGNMENT to the linker script
+ language to permit sorting sections by section name or section
+ maximum alignment.
+
+* Added a new linker command line switch, --sort-section name|alignment,
+ to sort sections by section name or maximum alignment.
+
+* ELF: --add-needed/--no-add-needed options to control if a DT_NEEDED tag
+ should be added when a shared library comes from DT_NEEDED tags.
+
+* Support for the crx-elf target added.
+
+* Support for the sh-symbianelf target added.
+
+* A new linker command line switch has been added which allows the hash table
+ size to be set to a suitable prime value near to its argument. This switch
+ is --hash-size=<NUMBER>. Also if the switch --reduce-memory-overheads is
+ used, and --hash-size has not been used, then the default value will be set
+ to 1021.
+
+* Linker map files are now generated with an O(N) algorithm for finding symbols
+ that are defined in each section. This uses about 40% more memory for
+ symbols than the old O(N^2) algorithm. You can use the new
+ --reduce-memory-overheads option to select the old algorithm; this option
+ might also be used in the future to select similar tradeoffs.
+
+Changes in 2.15:
+
+* ELF: --as-needed/--no-as-needed options to control if a DT_NEEDED tag should
+ be added only when a shared library is referenced.
+
+* PE: --large-address-aware option to indicate executables support virtual
+ addresses greater than 2 gigabytes.
+
+* DWARF 2 support for i386pe added.
+
+* The linker script operator DEFINED() will now yield 1 only for a symbol that
+ is defined before the statement where DEFINED is used.
+
+* The MIPS --embedded-relocs (used to embed relocations into binaries for
+ Embedded-PIC code) is deprecated and will be removed in a future release.
+
+* cr16c support added by NSC.
+
+* m32r Linux (ELF) support added by Renesas.
+
+* Improved linker's handling of unresolved symbols. The switch
+ --unresolved-symbols=<method> has been added to tell the linker when it
+ should report them and the switch --warn-unresolved-symbols has been added to
+ make reports be issued as warning messages rather than errors.
+
+Changes in 2.14:
+
+* Added support for Xtensa architecture.
+
+* Added --with-sysroot configure switch to specify a target system root, for
+ linking against a target filesystem image.
+
+* Added --accept-unknown-linker-format to restore old linker behaviour (pre
+ 2.14) of silently accepting and linking in any files in an unknown binary
+ file format.
+
+* Added --no-omagic to undo the effects of the -N option.
+
+* Support for Texas Instruments TMS320C4x and TMS320C3x series of
+ DSP's contributed by Michael Hayes and Svein E. Seldal.
+
+* Added --with-lib-path configure switch to specify default value for
+ LIB_PATH.
+
+* ARM port to QNX operating system added by Graeme Peterson.
+
+* IP2K support added by Denis Chertykov.
+
+Changes in 2.13:
+
+* Support for the Fujitsu FRV architecture added by Red Hat. Models for FR400
+ and FR500 included.
+
+Changes in version 2.13:
+
+* DEC VAX ELF support, by Matt Thomas.
+
+Changes in version 2.12:
+
+* Support for Don Knuth's MMIX, by Hans-Peter Nilsson.
+
+* Support for the OpenRISC 32-bit embedded processor by OpenCores.
+
+* Support for -z nocopyreloc in the x86 ELF linker, which disables
+ production of copy relocs. Warning: using this option may result in
+ non-sharable applications.
+
+* Support for -z combreloc in the ELF linker, which puts dynamic
+ relocations against the same symbol together, so that dynamic linker
+ can use an one-entry symbol lookup cache.
+
+* Support for ELF SHF_MERGE section merging, by Jakub Jelinek.
+
+Changes in version 2.11:
+
+* Support for AMD x86-64 architecture, by Jan Hubicka, SuSE Labs.
+
+* Support added for eliminating duplicate DWARF2 debug information by
+ having the compiler generate the information in sections called
+ .gnu.linkonce.wi.XXXX where XXXX is a checksum for the contents. The
+ linker then merges these sections together into the normal .debug_info
+ section.
+
+* The native ELF linker now searches the directories in DT_RUNPATH or
+ DT_RPATH of a shared library for shared libraries needed by it.
+
+* TI C54x support, by Timothy Wall.
+
+* Added command line switch --section-start to set the start address of any
+ specified section.
+
+* Added ability to emit full relocation information in linked executables,
+ enabled by --emit-relocs. Some post-linkage optimization tools need
+ this information in order to be able to correctly identify and perform
+ symbol relative addressing in the event of changes in section contents
+ (instructions being added or deleted, extending data sections, etc.)
+
+* Support for i860, by Jason Eckhardt (preliminary, alpha quality).
+
+* Support for CRIS (Axis Communications ETRAX series).
+
+* Support for PDP-11 and 2.11BSD a.out format, by Lars Brinkhoff.
+
+Changes in version 2.10:
+
+* Added AT> to the linker script language to allow load-time allocation of
+ sections into regions.
+
+* Added garbage collection of unused sections, enabled by --gc-sections.
+ It does require a bit of backend support; currently implemented are
+ arm-elf, avr-elf, d10v-elf, fr30-elf, i386-elf, m32r-elf, m68k-elf,
+ mcore-elf, mips-elf, mn10300-elf, ppc-elf, sh-elf, sparc-elf, and v850-elf.
+ Others will ignore the option.
+
+* Added SORT to the linker script language to permit sorting sections by file
+ name or section name.
+
+* Added EXTERN to the linker script language as an equivalent to the -u
+ command-line option.
+
+* Added ASSERT to the linker script language.
+
+* Added EXCLUDE_FILE to the linker script language for further control over
+ wildcard file names.
+
+* Added -O option to optimize linker output (as of this writing, this only
+ affects ELF shared library generation).
+
+* The -e option now accepts a number as well as a symbol name.
+
+* Added --no-undefined option to disallow undefined symbols when creating a
+ shared library.
+
+* The linker now issues a warning, not an error, for an undefined symbol when
+ using -Bsymbolic; use the new --no-undefined option to get the old
+ behaviour.
+
+* Added --demangle and --no-demangle options.
+
+Changes in version 2.9:
+
+* Added SQUAD to the linker script language.
+
+* New option --no-warn-mismatch.
+
+* The MEMORY command now parses the attributes to determine where sections that
+ are not placed in a specific memory region are placed.
+
+Changes in version 2.8:
+
+* Linker scripts may now contain shell wildcard characters for file and section
+ names.
+
+* The linker now supports symbol versions in ELF.
+
+* The NOCROSSREFS command was added to the linker script language.
+
+* The LOADADDR expression was added to the linker script language.
+
+* MAX and MIN functions were added to the linker script language.
+
+* The OVERLAY construct was added to the linker script language.
+
+* New option --warn-section-align to warn when the address of an output section
+ changes due to alignment of an input section.
+
+* New options --filter/-F and --auxiliary/-f.
+
+Changes in version 2.7:
+
+* New option --cref to print out a cross reference table.
+
+* New option --wrap SYMBOL.
+
+* New option --no-whole-archive, to turn off the effect of --whole-archive.
+
+* Input sections assigned to the output section /DISCARD/ in the linker script
+ are not included in the output file.
+
+* The SunOS and ELF linkers now merge stabs debugging information which uses
+ the N_BINCL and N_EINCL stab types. This reduces the amount of debugging
+ information generated.
+
+Changes in version 2.6:
+
+* When an ELF section name is representable as a C identifier (this is not true
+of most ELF section names), the linker will automatically define symbols
+__start_SECNAME and __stop_SECNAME, where SECNAME is the section name, at the
+beginning and the end of the section. This is used by glibc.
+
+ Addendum: Current versions of the linker (at least for version 2.18 onwards
+and possibly much earlier as well) place two restrictions on this feature: The
+symbols are only implemented for orphaned sections, not for explicitly placed
+sections and they are PROVIDEd rather than being defined.
+
+* When an ELF section named .gnu.warning is encountered in an input file, the
+contents of the section are displayed as an error message, and the section is
+not copied into the output file. This is used by glibc.
+
+* When an ELF section named .gnu.warning.SYMBOL is encountered in an input
+file, and the symbol SYMBOL is referenced by some object file, the contents of
+the section are displayed as an error message. The section is not copied into
+the output file, unless doing a relocatable or shared link. This is used by
+glibc.
+
+* New options -split-by-reloc and -split-by-file.
+
+* The linker now supports linking PIC compiled code on SPARC SunOS. It can
+also create SPARC SunOS shared libraries, and, like the native SunOS linker,
+will do so whenever there is an undefined symbol in the link and neither the -e
+nor the -r option was used.
+
+* The -rpath option may be used on SunOS to set the list of directories to be
+searched at run time. This overrides the default of building the list from the
+-L options.
+
+* The COFF linker now combines debugging information for structs, unions, and
+enums, so that even if the same type is defined in multiple input files it will
+only be defined once in the output file. The --traditional-format switch will
+prevent this optimization.
+
+Changes in version 2.5:
+
+* The linker now supports linking against SunOS shared libraries. It still can
+not link SunOS PIC (Position Independent Code) files, so it can not be used to
+generate shared libraries.
+
+* The linker now supports linking against ELF shared libraries for the i386
+(UnixWare) and SPARC (Solaris). It can also link ELF PIC files, and can be
+used to generate shared libraries. Shared library generation is not well
+tested; please report any problems encountered. The linker is now enabled for
+Solaris again.
+
+* Eric Youngdale has contributed Linux support code, including linking against
+Linux a.out shared libraries. The linker produces Linux QMAGIC binaries.
+
+* The ELF backend has been converted to the new linker code. To use the new
+ELF linker, each particular target requires a relocation function. So far,
+this function has been written for i386 (UnixWare), SPARC (Solaris) MIPS (Irix
+5), and HPPA ELF targets.
+
+* The -( (--start-group) and -) (--end-group) options have been added to
+support searching a group of archives as though they were a single archive.
+This can also be used in a linker script, as GROUP ( files ).
+
+* When a file is named on the command line, and the linker does not recognize
+it as an object file, the linker will now treat the file as a linker script
+file. A linker script named in this way augments, but does not replace, the
+default linker script.
+
+* The -warn-once option was added. It causes the linker to only warn once per
+undefined symbol, rather than once per reference.
+
+* The COFF backend has been converted to the new linker code. As with ELF, to
+use the new linker, each particular target requires a relocation function. So
+far, this function has been written for the i386, m68k, a29k and SH targets.
+
+* The -V flag was made a synonym for -v, for SVR4 compatibility. The old -V
+behaviour is available via --verbose.
+
+Changes in version 2.4:
+
+* New linker code, by Steve Chamberlain and Ian Taylor. For a.out and ecoff
+ formats (so far), this should result in considerable savings in time
+ and memory used while linking; slightly poorer performance than
+ before for formats not converted yet.
+
+* Command-line parsing is no longer done with flex. This means
+ oddball characters in filenames won't get treated as argument
+ separators.
+
+* HP-PA ELF support, by Jeff Law. (No SOM support yet.)
+
+* Mach i386 support, by David Mackenzie.
+
+* Irix 4 shared libraries are now supported (Irix 5 uses ELF, and ELF shared
+ libraries are not yet supported).
+
+* COFF shared libraries (as on SCO) should work as well.
+
+* The linker is disabled for Solaris. (Actually, it was in 2.3 also, I just
+ forgot to note it.) Some of their C library routines don't work when
+ statically linked, and the GNU linker doesn't support dynamic linking yet.
+
+Changes in version 2.3:
+
+* Weak symbols are now supported.
+
+* ELF support has been added. The linker has been bootstrapped on
+ UnixWare and Solaris.
+
+* Alpha OSF/1 support has been added (non dynamic linking only).
+
+Changes in version 2.2:
+
+* The `bfd' library has been updated to reduce a.out-format string
+ table size. The effect of this is that files linked from many input
+ files with duplicate symbols (`-g' debugging records, or identical
+ static symbols) should be much smaller.
+
+Changes in version 2.1:
+
+* The ld -ySYMBOL flag (to trace references to SYMBOL) is now implemented.
+
+* There is now support for writing ECOFF files, so ld and the
+ other utilities should work on Risc/Ultrix and Irix.
+
+
+Local variables:
+fill-column: 79
+End:
diff --git a/binutils-2.21/ld/README b/binutils-2.21/ld/README
new file mode 100644
index 0000000..a953e42
--- /dev/null
+++ b/binutils-2.21/ld/README
@@ -0,0 +1,67 @@
+ README for LD
+
+This is the GNU linker. It is distributed with other "binary
+utilities" which should be in ../binutils. See ../binutils/README for
+more general notes, including where to send bug reports.
+
+There are many features of the linker:
+
+* The linker uses a Binary File Descriptor library (../bfd)
+ that it uses to read and write object files. This helps
+ insulate the linker itself from the format of object files.
+
+* The linker supports a number of different object file
+ formats. It can even handle multiple formats at once:
+ Read two input formats and write a third.
+
+* The linker can be configured for cross-linking.
+
+* The linker supports a control language.
+
+* There is a user manual (ld.texinfo), as well as the
+ beginnings of an internals manual (ldint.texinfo).
+
+Installation
+============
+
+See ../binutils/README.
+
+If you want to make a cross-linker, you may want to specify
+a different search path of -lfoo libraries than the default.
+You can do this by setting the LIB_PATH variable in ./Makefile
+or using the --with-lib-path configure switch.
+
+To build just the linker, make the target all-ld from the top level
+directory (one directory above this one).
+
+Porting to a new target
+=======================
+
+See the ldint.texinfo manual.
+
+Reporting bugs etc
+===========================
+
+See ../binutils/README.
+
+Known problems
+==============
+
+The Solaris linker normally exports all dynamic symbols from an
+executable. The GNU linker does not do this by default. This is
+because the GNU linker tries to present the same interface for all
+similar targets (in this case, all native ELF targets). This does not
+matter for normal programs, but it can make a difference for programs
+which try to dlopen an executable, such as PERL or Tcl. You can make
+the GNU linker export all dynamic symbols with the -E or
+--export-dynamic command line option.
+
+HP/UX 9.01 has a shell bug that causes the linker scripts to be
+generated incorrectly. The symptom of this appears to be "fatal error
+- scanner input buffer overflow" error messages. There are various
+workarounds to this:
+ * Build and install bash, and build with "make SHELL=bash".
+ * Update to a version of HP/UX with a working shell (e.g., 9.05).
+ * Replace "(. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc)" in
+ genscripts.sh with "sh ${srcdir}..." (no parens) and make sure the
+ emulparams script used exports any shell variables it sets.
diff --git a/binutils-2.21/ld/TODO b/binutils-2.21/ld/TODO
new file mode 100644
index 0000000..31cd98b
--- /dev/null
+++ b/binutils-2.21/ld/TODO
@@ -0,0 +1,9 @@
+Volunteers to tackle some of the following would be welcome:
+
+Support the "traditional" BSD -A flag (incremental loading).
+(There is a -A flag in ld now, but it is used to specify the
+architecture. That should probably be changed.)
+
+Support for dynamic loading (a la dld, but bfd-based) would be nice.
+
+Avoid re-open (and re-seeking) output bfd and archives.
diff --git a/binutils-2.21/ld/aclocal.m4 b/binutils-2.21/ld/aclocal.m4
new file mode 100644
index 0000000..2f88266
--- /dev/null
+++ b/binutils-2.21/ld/aclocal.m4
@@ -0,0 +1,1008 @@
+# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.64],,
+[m4_warning([this file was generated for autoconf 2.64.
+You have another version of autoconf. It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
+
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.11'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version. Point them to the right macro.
+m4_if([$1], [1.11.1], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.11.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 10
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
+ [$1], CXX, [depcc="$CXX" am_compiler_list=],
+ [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], UPC, [depcc="$UPC" am_compiler_list=],
+ [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ am__universal=false
+ m4_case([$1], [CC],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac],
+ [CXX],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac])
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+ # Solaris 8's {/usr,}/bin/sh.
+ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvisualcpp | msvcmsys)
+ # This compiler won't grok `-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+#serial 5
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+ # Autoconf 2.62 quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named `Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`AS_DIRNAME("$mf")`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running `make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n 's/^U = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`AS_DIRNAME(["$file"])`
+ AS_MKDIR_P([$dirpart/$fdir])
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled. FIXME. This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 16
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.62])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES(CC)],
+ [define([AC_PROG_CC],
+ defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES(CXX)],
+ [define([AC_PROG_CXX],
+ defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES(OBJC)],
+ [define([AC_PROG_OBJC],
+ defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
+dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+ [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+])
+
+dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+AC_SUBST(install_sh)])
+
+# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_PROG_LEX
+# -----------
+# Autoconf leaves LEX=: if lex or flex can't be found. Change that to a
+# "missing" invocation, for better error output.
+AC_DEFUN([AM_PROG_LEX],
+[AC_PREREQ(2.50)dnl
+AC_REQUIRE([AM_MISSING_HAS_RUN])dnl
+AC_REQUIRE([AC_PROG_LEX])dnl
+if test "$LEX" = :; then
+ LEX=${am_missing_run}flex
+fi])
+
+# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_MAINTAINER_MODE([DEFAULT-MODE])
+# ----------------------------------
+# Control maintainer-specific portions of Makefiles.
+# Default is to disable them, unless `enable' is passed literally.
+# For symmetry, `disable' may be passed as well. Anyway, the user
+# can override the default with the --enable/--disable switch.
+AC_DEFUN([AM_MAINTAINER_MODE],
+[m4_case(m4_default([$1], [disable]),
+ [enable], [m4_define([am_maintainer_other], [disable])],
+ [disable], [m4_define([am_maintainer_other], [enable])],
+ [m4_define([am_maintainer_other], [enable])
+ m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])])
+AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles])
+ dnl maintainer-mode's default is 'disable' unless 'enable' is passed
+ AC_ARG_ENABLE([maintainer-mode],
+[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer],
+ [USE_MAINTAINER_MODE=$enableval],
+ [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
+ AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+ AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
+ MAINT=$MAINTAINER_MODE_TRUE
+ AC_SUBST([MAINT])dnl
+]
+)
+
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+ [[\\/$]]* | ?:[[\\/]]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[[\\\"\#\$\&\'\`$am_lf]]*)
+ AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+ *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
+ AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+alias in your environment])
+ fi
+
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+ [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+ [m4_case([$1], [ustar],, [pax],,
+ [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar;
+ do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([../bfd/acinclude.m4])
+m4_include([../bfd/warning.m4])
+m4_include([../config/acx.m4])
+m4_include([../config/depstand.m4])
+m4_include([../config/gettext-sister.m4])
+m4_include([../config/largefile.m4])
+m4_include([../config/lead-dot.m4])
+m4_include([../config/nls.m4])
+m4_include([../config/override.m4])
+m4_include([../config/plugins.m4])
+m4_include([../config/po.m4])
+m4_include([../config/progtest.m4])
+m4_include([../libtool.m4])
+m4_include([../ltoptions.m4])
+m4_include([../ltsugar.m4])
+m4_include([../ltversion.m4])
+m4_include([../lt~obsolete.m4])
diff --git a/binutils-2.21/ld/config.in b/binutils-2.21/ld/config.in
new file mode 100644
index 0000000..f49327c
--- /dev/null
+++ b/binutils-2.21/ld/config.in
@@ -0,0 +1,215 @@
+/* config.in. Generated from configure.in by autoheader. */
+
+/* Define to 1 if translation of program messages to the user's native
+ language is requested. */
+#undef ENABLE_NLS
+
+/* Additional extension a shared object might have. */
+#undef EXTRA_SHLIB_EXTENSION
+
+/* Define to choose default GOT handling scheme */
+#undef GOT_HANDLING_DEFAULT
+
+/* Define to 1 if you have the `close' function. */
+#undef HAVE_CLOSE
+
+/* Define to 1 if you have the declaration of `environ', and to 0 if you
+ don't. */
+#undef HAVE_DECL_ENVIRON
+
+/* Define to 1 if you have the declaration of `free', and to 0 if you don't.
+ */
+#undef HAVE_DECL_FREE
+
+/* Define to 1 if you have the declaration of `getenv', and to 0 if you don't.
+ */
+#undef HAVE_DECL_GETENV
+
+/* Is the prototype for getopt in <unistd.h> in the expected format? */
+#undef HAVE_DECL_GETOPT
+
+/* Define to 1 if you have the declaration of `sbrk', and to 0 if you don't.
+ */
+#undef HAVE_DECL_SBRK
+
+/* Define to 1 if you have the declaration of `strstr', and to 0 if you don't.
+ */
+#undef HAVE_DECL_STRSTR
+
+/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
+ */
+#undef HAVE_DIRENT_H
+
+/* Define to 1 if you have the `dlclose' function. */
+#undef HAVE_DLCLOSE
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the `dlopen' function. */
+#undef HAVE_DLOPEN
+
+/* Define to 1 if you have the `dlsym' function. */
+#undef HAVE_DLSYM
+
+/* Define to 1 if you have the <elf-hints.h> header file. */
+#undef HAVE_ELF_HINTS_H
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
+/* Define to 1 if you have the `glob' function. */
+#undef HAVE_GLOB
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the <limits.h> header file. */
+#undef HAVE_LIMITS_H
+
+/* Define to 1 if you have the `lseek' function. */
+#undef HAVE_LSEEK
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `mkstemp' function. */
+#undef HAVE_MKSTEMP
+
+/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
+#undef HAVE_NDIR_H
+
+/* Define to 1 if you have the `open' function. */
+#undef HAVE_OPEN
+
+/* Define to 1 if you have the `realpath' function. */
+#undef HAVE_REALPATH
+
+/* Define to 1 if you have the `sbrk' function. */
+#undef HAVE_SBRK
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
+ */
+#undef HAVE_SYS_DIR_H
+
+/* Define to 1 if you have the <sys/file.h> header file. */
+#undef HAVE_SYS_FILE_H
+
+/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
+ */
+#undef HAVE_SYS_NDIR_H
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#undef HAVE_SYS_PARAM_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the `waitpid' function. */
+#undef HAVE_WAITPID
+
+/* Define to 1 if you have the <Windows.h> header file. */
+#undef HAVE_WINDOWS_H
+
+/* Define to 1 if you have the <zlib.h> header file. */
+#undef HAVE_ZLIB_H
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+ */
+#undef LT_OBJDIR
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* The size of `long', as computed by sizeof. */
+#undef SIZEOF_LONG
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Use b modifier when opening binary files? */
+#undef USE_BINARY_FOPEN
+
+/* Enable extensions on AIX 3, Interix. */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them. */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris. */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop. */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris. */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
+/* Version number of package */
+#undef VERSION
+
+/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
+ `char[]'. */
+#undef YYTEXT_POINTER
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#undef _FILE_OFFSET_BITS
+
+/* Define for large files, on AIX-style hosts. */
+#undef _LARGE_FILES
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+ this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
diff --git a/binutils-2.21/ld/configdoc.texi b/binutils-2.21/ld/configdoc.texi
new file mode 100644
index 0000000..7434edb
--- /dev/null
+++ b/binutils-2.21/ld/configdoc.texi
@@ -0,0 +1,26 @@
+@c ------------------------------ CONFIGURATION VARS:
+@c 1. Inclusiveness of this manual
+@set GENERIC
+
+@c 2. Specific target machines
+@set ARM
+@set H8300
+@set HPPA
+@set I960
+@set M68HC11
+@set M68K
+@set MMIX
+@set MSP430
+@set POWERPC
+@set POWERPC64
+@set Renesas
+@set SPU
+@set TICOFF
+@set WIN32
+@set XTENSA
+
+@c 3. Properties of this configuration
+@clear SingleFormat
+@set UsesEnvVars
+@c ------------------------------ end CONFIGURATION VARS
+
diff --git a/binutils-2.21/ld/configure b/binutils-2.21/ld/configure
new file mode 100755
index 0000000..088c721
--- /dev/null
+++ b/binutils-2.21/ld/configure
@@ -0,0 +1,15806 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.64.
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software
+# Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+ exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1
+
+ test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
+ ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+ ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+ PATH=/empty FPATH=/empty; export PATH FPATH
+ test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
+ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1"
+ if (eval "$as_required") 2>/dev/null; then :
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ as_found=:
+ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir/$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ break 2
+fi
+fi
+ done;;
+ esac
+ as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+ if test "x$CONFIG_SHELL" != x; then :
+ # We cannot yet assume a decent shell, so we have to provide a
+ # neutralization value for shells without unset; and this also
+ # works around shells that cannot unset nonexistent variables.
+ BASH_ENV=/dev/null
+ ENV=/dev/null
+ (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+ if test x$as_have_required = xno; then :
+ $as_echo "$0: This script requires a shell more modern than all"
+ $as_echo "$0: the shells that I found on your system."
+ if test x${ZSH_VERSION+set} = xset ; then
+ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+$0: including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
+ fi
+ exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+# as_fn_error ERROR [LINENO LOG_FD]
+# ---------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with status $?, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$?; test $as_status -eq 0 && as_status=1
+ if test "$3"; then
+ as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+ fi
+ $as_echo "$as_me: error: $1" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in #(
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+
+exec 7<&0 </dev/null 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME=
+PACKAGE_TARNAME=
+PACKAGE_VERSION=
+PACKAGE_STRING=
+PACKAGE_BUGREPORT=
+PACKAGE_URL=
+
+ac_unique_file="ldmain.c"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+LIBOBJS
+TESTBFDLIB
+EMULATION_LIBPATH
+LIB_PATH
+EMUL_EXTRA_OFILES
+EMULATION_OFILES
+EMUL
+STRINGIFY
+ENABLE_PLUGINS_FALSE
+ENABLE_PLUGINS_TRUE
+NATIVE_LIB_DIRS
+HOSTING_LIBS
+HOSTING_CRT0
+HDEFINES
+do_compare
+GENINSRC_NEVER_FALSE
+GENINSRC_NEVER_TRUE
+LEXLIB
+LEX_OUTPUT_ROOT
+LEX
+YFLAGS
+YACC
+MSGMERGE
+MSGFMT
+MKINSTALLDIRS
+CATOBJEXT
+GENCAT
+INSTOBJEXT
+DATADIRNAME
+CATALOGS
+POSUB
+GMSGFMT
+XGETTEXT
+INCINTL
+LIBINTL_DEP
+LIBINTL
+USE_NLS
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+RANLIB
+AR
+OBJDUMP
+LN_S
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+SED
+LIBTOOL
+NO_WERROR
+WARN_CFLAGS
+EGREP
+GREP
+CPP
+installed_linker
+install_as_default
+TARGET_SYSTEM_ROOT_DEFINE
+TARGET_SYSTEM_ROOT
+use_sysroot
+MAINT
+MAINTAINER_MODE_FALSE
+MAINTAINER_MODE_TRUE
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+target_os
+target_vendor
+target_cpu
+target
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files='TDIRS'
+ac_user_opts='
+enable_option_checking
+enable_dependency_tracking
+enable_maintainer_mode
+with_lib_path
+enable_targets
+enable_64_bit_bfd
+with_sysroot
+enable_gold
+enable_got
+enable_werror
+enable_build_warnings
+enable_plugins
+enable_largefile
+enable_shared
+enable_static
+with_pic
+enable_fast_install
+with_gnu_ld
+enable_libtool_lock
+enable_nls
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP
+YACC
+YFLAGS'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) as_fn_error "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information."
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $ac_envvar in #(
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error "invalid variable name: \`$ac_envvar'" ;;
+ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ as_fn_error "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;;
+ *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ as_fn_error "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used." >&2
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ as_fn_error "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ as_fn_error "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ as_fn_error "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg"
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures this package to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+
+System types:
+ --build=BUILD configure for building on BUILD [guessed]
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
+ --target=TARGET configure for building compilers for TARGET [HOST]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors
+ --enable-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer
+ --enable-targets alternative target configurations
+ --enable-64-bit-bfd 64-bit support (on hosts with narrower word sizes)
+ --enable-gold[=ARG] build gold [ARG={default,yes,no}]
+ --enable-got=<type> GOT handling scheme (target, single, negative,
+ multigot)
+ --enable-werror treat compile warnings as errors
+ --enable-build-warnings enable build-time compiler warnings
+ --enable-plugins Enable support for plugins (defaults no)
+ --disable-largefile omit support for large files
+ --enable-shared[=PKGS] build shared libraries [default=yes]
+ --enable-static[=PKGS] build static libraries [default=yes]
+ --enable-fast-install[=PKGS]
+ optimize for fast installation [default=yes]
+ --disable-libtool-lock avoid locking (might break parallel builds)
+ --disable-nls do not use Native Language Support
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-lib-path=dir1:dir2... set default LIB_PATH
+ --with-sysroot=DIR Search for usr/lib et al within DIR.
+ --with-pic try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ CPP C preprocessor
+ YACC The `Yet Another C Compiler' implementation to use. Defaults to
+ the first program found out of: `bison -y', `byacc', `yacc'.
+ YFLAGS The list of arguments that will be passed by default to $YACC.
+ This script will default YFLAGS to the empty string to avoid a
+ default value of `-d' given by some make applications.
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to the package provider.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+configure
+generated by GNU Autoconf 2.64
+
+Copyright (C) 2009 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ return $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ return $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ return $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+ $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_header_compiler=yes
+else
+ ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ ac_header_preproc=yes
+else
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+ yes:no: )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+ ;;
+esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+ $as_echo_n "(cached) " >&6
+else
+ eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: program exited with status $ac_status" >&5
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=$ac_status
+fi
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ return $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $2 (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_func
+
+# ac_fn_c_check_decl LINENO SYMBOL VAR
+# ------------------------------------
+# Tests whether SYMBOL is declared, setting cache variable VAR accordingly.
+ac_fn_c_check_decl ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ as_decl_name=`echo $2|sed 's/ *(.*//'`
+ as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+#ifndef $as_decl_name
+#ifdef __cplusplus
+ (void) $as_decl_use;
+#else
+ (void) $as_decl_name;
+#endif
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_decl
+
+# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
+# --------------------------------------------
+# Tries to find the compile-time value of EXPR in a program that includes
+# INCLUDES, setting VAR accordingly. Returns whether the value could be
+# computed
+ac_fn_c_compute_int ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_hi=$ac_mid; break
+else
+ as_fn_arith $ac_mid + 1 && ac_lo=$as_val
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_lo=$ac_mid; break
+else
+ as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ ac_lo= ac_hi=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_hi=$ac_mid
+else
+ as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in #((
+?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
+'') ac_retval=1 ;;
+esac
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+static long int longval () { return $2; }
+static unsigned long int ulongval () { return $2; }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ return 1;
+ if (($2) < 0)
+ {
+ long int i = longval ();
+ if (i != ($2))
+ return 1;
+ fprintf (f, "%ld", i);
+ }
+ else
+ {
+ unsigned long int i = ulongval ();
+ if (i != ($2))
+ return 1;
+ fprintf (f, "%lu", i);
+ }
+ /* Do not output a trailing newline, as this causes \r\n confusion
+ on some platforms. */
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ echo >>conftest.val; read $3 <conftest.val; ac_retval=0
+else
+ ac_retval=1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f conftest.val
+
+ fi
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ return $ac_retval
+
+} # ac_fn_c_compute_int
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by $as_me, which was
+generated by GNU Autoconf 2.64. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ $as_echo "PATH: $as_dir"
+ done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+ 2)
+ as_fn_append ac_configure_args1 " '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ as_fn_append ac_configure_args " '$ac_arg'"
+ ;;
+ esac
+ done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ cat <<\_ASBOX
+## ------------------- ##
+## File substitutions. ##
+## ------------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ $as_echo "$as_me: caught signal $ac_signal"
+ $as_echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+ ac_site_file1=$CONFIG_SITE
+elif test "x$prefix" != xNONE; then
+ ac_site_file1=$prefix/share/config.site
+ ac_site_file2=$prefix/etc/config.site
+else
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+ test "x$ac_site_file" = xNONE && continue
+ if test -r "$ac_site_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file"
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special
+ # files actually), so we avoid doing that.
+ if test -f "$cache_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+ for ac_t in install-sh install.sh shtool; do
+ if test -f "$ac_dir/$ac_t"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/$ac_t -c"
+ break 2
+ fi
+ done
+done
+if test -z "$ac_aux_dir"; then
+ as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if test "${ac_cv_build+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+ as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+ as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if test "${ac_cv_host+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "x$host_alias" = x; then
+ ac_cv_host=$ac_cv_build
+else
+ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+ as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
+$as_echo_n "checking target system type... " >&6; }
+if test "${ac_cv_target+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "x$target_alias" = x; then
+ ac_cv_target=$ac_cv_host
+else
+ ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
+ as_fn_error "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
+$as_echo "$ac_cv_target" >&6; }
+case $ac_cv_target in
+*-*-*) ;;
+*) as_fn_error "invalid value of canonical target" "$LINENO" 5;;
+esac
+target=$ac_cv_target
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_target
+shift
+target_cpu=$1
+target_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+target_os=$*
+IFS=$ac_save_IFS
+case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
+
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+test -n "$target_alias" &&
+ test "$program_prefix$program_suffix$program_transform_name" = \
+ NONENONEs,x,x, &&
+ program_prefix=${target_alias}-
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "no acceptable C compiler found in \$PATH
+See \`config.log' for more details." "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ rm -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+ ac_file=''
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+if test -z "$ac_file"; then :
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ as_fn_set_status 77
+as_fn_error "C compiler cannot create executables
+See \`config.log' for more details." "$LINENO" 5; }; }
+fi
+ac_exeext=$ac_cv_exeext
+
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+ if { ac_try='./$ac_file'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." "$LINENO" 5; }
+ fi
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out
+ac_clean_files=$ac_clean_files_save
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." "$LINENO" 5; }
+fi
+rm -f conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if test "${ac_cv_objext+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+else
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5
+$as_echo_n "checking for library containing strerror... " >&6; }
+if test "${ac_cv_search_strerror+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char strerror ();
+int
+main ()
+{
+return strerror ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' cposix; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_strerror=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if test "${ac_cv_search_strerror+set}" = set; then :
+ break
+fi
+done
+if test "${ac_cv_search_strerror+set}" = set; then :
+
+else
+ ac_cv_search_strerror=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5
+$as_echo "$ac_cv_search_strerror" >&6; }
+ac_res=$ac_cv_search_strerror
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+
+BFD_VERSION=`sed -n -e 's/^.._INIT_AUTOMAKE.*,[ ]*\([^ ]*\)[ ]*).*/\1/p' < ${srcdir}/../bfd/configure.in`
+am__api_version='1.11'
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+ ./ | .// | /[cC]/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+
+ done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[\\\"\#\$\&\'\`$am_lf]*)
+ as_fn_error "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+ *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
+ as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ as_fn_error "ls -t appears to fail. Make sure there is not a broken
+alias in your environment" "$LINENO" 5
+ fi
+
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ as_fn_error "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+test "$program_prefix" != NONE &&
+ program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+ if test "${ac_cv_path_mkdir+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+ case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+ 'mkdir (GNU coreutils) '* | \
+ 'mkdir (coreutils) '* | \
+ 'mkdir (fileutils) '4.1*)
+ ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+ break 3;;
+ esac
+ done
+ done
+ done
+IFS=$as_save_IFS
+
+fi
+
+ if test "${ac_cv_path_mkdir+set}" = set; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ test -d ./--version && rmdir ./--version
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+ [\\/$]* | ?:[\\/]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AWK+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_AWK="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ SET_MAKE=
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+ enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+ AMDEP_TRUE=
+ AMDEP_FALSE='#'
+else
+ AMDEP_TRUE='#'
+ AMDEP_FALSE=
+fi
+
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ am__isrc=' -I$(srcdir)'
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE=ld
+ VERSION=${BFD_VERSION}
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+depcc="$CC" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+ # Solaris 8's {/usr,}/bin/sh.
+ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvisualcpp | msvcmsys)
+ # This compiler won't grok `-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+ # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then :
+ enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+ USE_MAINTAINER_MODE=no
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
+$as_echo "$USE_MAINTAINER_MODE" >&6; }
+ if test $USE_MAINTAINER_MODE = yes; then
+ MAINTAINER_MODE_TRUE=
+ MAINTAINER_MODE_FALSE='#'
+else
+ MAINTAINER_MODE_TRUE='#'
+ MAINTAINER_MODE_FALSE=
+fi
+
+ MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+
+# Check whether --with-lib-path was given.
+if test "${with_lib_path+set}" = set; then :
+ withval=$with_lib_path; LIB_PATH=$withval
+fi
+
+# Check whether --enable-targets was given.
+if test "${enable_targets+set}" = set; then :
+ enableval=$enable_targets; case "${enableval}" in
+ yes | "") as_fn_error "enable-targets option must specify target names or 'all'" "$LINENO" 5
+ ;;
+ no) enable_targets= ;;
+ *) enable_targets=$enableval ;;
+esac
+fi
+# Check whether --enable-64-bit-bfd was given.
+if test "${enable_64_bit_bfd+set}" = set; then :
+ enableval=$enable_64_bit_bfd; case "${enableval}" in
+ yes) want64=true ;;
+ no) want64=false ;;
+ *) as_fn_error "bad value ${enableval} for 64-bit-bfd option" "$LINENO" 5 ;;
+esac
+else
+ want64=false
+fi
+
+
+# Check whether --with-sysroot was given.
+if test "${with_sysroot+set}" = set; then :
+ withval=$with_sysroot;
+ case ${with_sysroot} in
+ yes) TARGET_SYSTEM_ROOT='${exec_prefix}/${target_alias}/sys-root' ;;
+ *) TARGET_SYSTEM_ROOT=$with_sysroot ;;
+ esac
+
+ TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
+ use_sysroot=yes
+
+ if test "x$prefix" = xNONE; then
+ test_prefix=/usr/local
+ else
+ test_prefix=$prefix
+ fi
+ if test "x$exec_prefix" = xNONE; then
+ test_exec_prefix=$test_prefix
+ else
+ test_exec_prefix=$exec_prefix
+ fi
+ case ${TARGET_SYSTEM_ROOT} in
+ "${test_prefix}"|"${test_prefix}/"*|\
+ "${test_exec_prefix}"|"${test_exec_prefix}/"*|\
+ '${prefix}'|'${prefix}/'*|\
+ '${exec_prefix}'|'${exec_prefix}/'*)
+ t="$TARGET_SYSTEM_ROOT_DEFINE -DTARGET_SYSTEM_ROOT_RELOCATABLE"
+ TARGET_SYSTEM_ROOT_DEFINE="$t"
+ ;;
+ esac
+
+else
+
+ use_sysroot=no
+ TARGET_SYSTEM_ROOT=
+ TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"\"'
+
+fi
+
+
+
+
+
+# Check whether --enable-gold was given.
+if test "${enable_gold+set}" = set; then :
+ enableval=$enable_gold; case "${enableval}" in
+ default)
+ install_as_default=no
+ installed_linker=ld.bfd
+ ;;
+ yes|no)
+ install_as_default=yes
+ installed_linker=ld.bfd
+ ;;
+ *)
+ as_fn_error "invalid --enable-gold argument" "$LINENO" 5
+ ;;
+ esac
+else
+ install_as_default=yes
+ installed_linker=ld.bfd
+fi
+
+
+
+
+# Check whether --enable-got was given.
+if test "${enable_got+set}" = set; then :
+ enableval=$enable_got; case "${enableval}" in
+ target | single | negative | multigot) got_handling=$enableval ;;
+ *) as_fn_error "bad value ${enableval} for --enable-got option" "$LINENO" 5 ;;
+esac
+else
+ got_handling=target
+fi
+
+
+case "${got_handling}" in
+ target)
+
+$as_echo "#define GOT_HANDLING_DEFAULT GOT_HANDLING_TARGET_DEFAULT" >>confdefs.h
+ ;;
+ single)
+
+$as_echo "#define GOT_HANDLING_DEFAULT GOT_HANDLING_SINGLE" >>confdefs.h
+ ;;
+ negative)
+
+$as_echo "#define GOT_HANDLING_DEFAULT GOT_HANDLING_NEGATIVE" >>confdefs.h
+ ;;
+ multigot)
+
+$as_echo "#define GOT_HANDLING_DEFAULT GOT_HANDLING_MULTIGOT" >>confdefs.h
+ ;;
+ *) as_fn_error "bad value ${got_handling} for --enable-got option" "$LINENO" 5 ;;
+esac
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if test "${ac_cv_prog_CPP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$GREP"; then
+ ac_path_GREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in grep ggrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_GREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+ as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ if test -z "$EGREP"; then
+ ac_path_EGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in egrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_EGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_EGREP"; then
+ as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+
+GCC_WARN_CFLAGS="-W -Wall -Wstrict-prototypes -Wmissing-prototypes"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+__GNUC__
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "^[0-3]$" >/dev/null 2>&1; then :
+
+else
+ GCC_WARN_CFLAGS="$GCC_WARN_CFLAGS -Wshadow"
+fi
+rm -f conftest*
+
+
+# Check whether --enable-werror was given.
+if test "${enable_werror+set}" = set; then :
+ enableval=$enable_werror; case "${enableval}" in
+ yes | y) ERROR_ON_WARNING="yes" ;;
+ no | n) ERROR_ON_WARNING="no" ;;
+ *) as_fn_error "bad value ${enableval} for --enable-werror" "$LINENO" 5 ;;
+ esac
+fi
+
+
+# Disable -Wformat by default when using gcc on mingw
+case "${host}" in
+ *-*-mingw32*)
+ if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then
+ GCC_WARN_CFLAGS="$GCC_WARN_CFLAGS -Wno-format"
+ fi
+ ;;
+ *) ;;
+esac
+
+# Enable -Werror by default when using gcc
+if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then
+ ERROR_ON_WARNING=yes
+fi
+
+NO_WERROR=
+if test "${ERROR_ON_WARNING}" = yes ; then
+ GCC_WARN_CFLAGS="$GCC_WARN_CFLAGS -Werror"
+ NO_WERROR="-Wno-error"
+fi
+
+if test "${GCC}" = yes ; then
+ WARN_CFLAGS="${GCC_WARN_CFLAGS}"
+fi
+
+# Check whether --enable-build-warnings was given.
+if test "${enable_build_warnings+set}" = set; then :
+ enableval=$enable_build_warnings; case "${enableval}" in
+ yes) WARN_CFLAGS="${GCC_WARN_CFLAGS}";;
+ no) if test "${GCC}" = yes ; then
+ WARN_CFLAGS="-w"
+ fi;;
+ ,*) t=`echo "${enableval}" | sed -e "s/,/ /g"`
+ WARN_CFLAGS="${GCC_WARN_CFLAGS} ${t}";;
+ *,) t=`echo "${enableval}" | sed -e "s/,/ /g"`
+ WARN_CFLAGS="${t} ${GCC_WARN_CFLAGS}";;
+ *) WARN_CFLAGS=`echo "${enableval}" | sed -e "s/,/ /g"`;;
+esac
+fi
+
+
+if test x"$silent" != x"yes" && test x"$WARN_CFLAGS" != x""; then
+ echo "Setting warning flags = $WARN_CFLAGS" 6>&1
+fi
+
+
+
+
+
+ac_config_headers="$ac_config_headers config.h:config.in"
+
+
+if test -z "$target" ; then
+ as_fn_error "Unrecognized target system type; please check config.sub." "$LINENO" 5
+fi
+if test -z "$host" ; then
+ as_fn_error "Unrecognized host system type; please check config.sub." "$LINENO" 5
+fi
+
+# host-specific stuff:
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "no acceptable C compiler found in \$PATH
+See \`config.log' for more details." "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ rm -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+else
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_header_stdc=yes
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then :
+ :
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ return 2;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+eval as_val=\$$as_ac_Header
+ if test "x$as_val" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+ ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+ MINIX=yes
+else
+ MINIX=
+fi
+
+
+ if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+ fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+# define __EXTENSIONS__ 1
+ $ac_includes_default
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_safe_to_define___extensions__=yes
+else
+ ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+ test $ac_cv_safe_to_define___extensions__ = yes &&
+ $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+ $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+ $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+ $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+ $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+
+
+
+# The tests for host and target for $enable_largefile require
+# canonical names.
+
+
+
+# As the $enable_largefile decision depends on --enable-plugins we must set it
+# even in directories otherwise not depending on the $plugins option.
+
+
+# Check whether --enable-plugins was given.
+if test "${enable_plugins+set}" = set; then :
+ enableval=$enable_plugins; case "${enableval}" in
+ yes | "") plugins=yes ;;
+ no) plugins=no ;;
+ *) plugins=yes ;;
+ esac
+else
+ plugins=no
+fi
+
+
+
+case "${host}" in
+ sparc-*-solaris*|i[3-7]86-*-solaris*)
+ # On native 32bit sparc and ia32 solaris, large-file and procfs support
+ # are mutually exclusive; and without procfs support, the bfd/ elf module
+ # cannot provide certain routines such as elfcore_write_prpsinfo
+ # or elfcore_write_prstatus. So unless the user explicitly requested
+ # large-file support through the --enable-largefile switch, disable
+ # large-file support in favor of procfs support.
+ test "${target}" = "${host}" -a "x$plugins" = xno \
+ && : ${enable_largefile="no"}
+ ;;
+esac
+
+# Check whether --enable-largefile was given.
+if test "${enable_largefile+set}" = set; then :
+ enableval=$enable_largefile;
+fi
+
+if test "$enable_largefile" != no; then
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
+$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
+if test "${ac_cv_sys_largefile_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_sys_largefile_CC=no
+ if test "$GCC" != yes; then
+ ac_save_CC=$CC
+ while :; do
+ # IRIX 6.2 and later do not support large files by default,
+ # so use the C compiler's -n32 option if that helps.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ if ac_fn_c_try_compile "$LINENO"; then :
+ break
+fi
+rm -f core conftest.err conftest.$ac_objext
+ CC="$CC -n32"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_largefile_CC=' -n32'; break
+fi
+rm -f core conftest.err conftest.$ac_objext
+ break
+ done
+ CC=$ac_save_CC
+ rm -f conftest.$ac_ext
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
+$as_echo "$ac_cv_sys_largefile_CC" >&6; }
+ if test "$ac_cv_sys_largefile_CC" != no; then
+ CC=$CC$ac_cv_sys_largefile_CC
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
+if test "${ac_cv_sys_file_offset_bits+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_file_offset_bits=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#define _FILE_OFFSET_BITS 64
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_file_offset_bits=64; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cv_sys_file_offset_bits=unknown
+ break
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
+$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
+case $ac_cv_sys_file_offset_bits in #(
+ no | unknown) ;;
+ *)
+cat >>confdefs.h <<_ACEOF
+#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
+_ACEOF
+;;
+esac
+rm -rf conftest*
+ if test $ac_cv_sys_file_offset_bits = unknown; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
+$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
+if test "${ac_cv_sys_large_files+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_large_files=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#define _LARGE_FILES 1
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_large_files=1; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cv_sys_large_files=unknown
+ break
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
+$as_echo "$ac_cv_sys_large_files" >&6; }
+case $ac_cv_sys_large_files in #(
+ no | unknown) ;;
+ *)
+cat >>confdefs.h <<_ACEOF
+#define _LARGE_FILES $ac_cv_sys_large_files
+_ACEOF
+;;
+esac
+rm -rf conftest*
+ fi
+fi
+
+
+
+
+case `pwd` in
+ *\ * | *\ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.2.7a'
+macro_revision='1.3134'
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+$as_echo_n "checking how to print strings... " >&6; }
+# Test print first, because it will be a builtin if present.
+if test "X`print -r -- -n 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='printf %s\n'
+else
+ # Use this function as a fallback that always works.
+ func_fallback_echo ()
+ {
+ eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+ }
+ ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+ $ECHO ""
+}
+
+case "$ECHO" in
+ printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+$as_echo "printf" >&6; } ;;
+ print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+$as_echo "print -r" >&6; } ;;
+ *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+$as_echo "cat" >&6; } ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if test "${ac_cv_path_SED+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+ for ac_i in 1 2 3 4 5 6 7; do
+ ac_script="$ac_script$as_nl$ac_script"
+ done
+ echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+ { ac_script=; unset ac_script;}
+ if test -z "$SED"; then
+ ac_path_SED_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
+# Check for GNU ac_path_SED and select it if it is found.
+ # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+ ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo '' >> "conftest.nl"
+ "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_SED_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_SED="$ac_path_SED"
+ ac_path_SED_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_SED_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_SED"; then
+ as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5
+ fi
+else
+ ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+ rm -f conftest.sed
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if test "${ac_cv_path_FGREP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+ then ac_cv_path_FGREP="$GREP -F"
+ else
+ if test -z "$FGREP"; then
+ ac_path_FGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in fgrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+ # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'FGREP' >> "conftest.nl"
+ "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_FGREP="$ac_path_FGREP"
+ ac_path_FGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_FGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_FGREP"; then
+ as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_FGREP=$FGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+ with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [\\/]* | ?:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if test "${lt_cv_path_LD+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$LD"; then
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if test "${lt_cv_prog_gnu_ld+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if test "${lt_cv_path_NM+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM="$NM"
+else
+ lt_nm_to_check="${ac_tool_prefix}nm"
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/$lt_tmp_nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+ done
+ : ${lt_cv_path_NM=no}
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
+if test "$lt_cv_path_NM" != "no"; then
+ NM="$lt_cv_path_NM"
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ if test -n "$DUMPBIN"; then :
+ # Let the user override the test.
+ else
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in dumpbin "link -dump"
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_DUMPBIN+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$DUMPBIN"; then
+ ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$DUMPBIN" && break
+ done
+fi
+if test -z "$DUMPBIN"; then
+ ac_ct_DUMPBIN=$DUMPBIN
+ for ac_prog in dumpbin "link -dump"
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_DUMPBIN"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_DUMPBIN" && break
+done
+
+ if test "x$ac_ct_DUMPBIN" = x; then
+ DUMPBIN=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DUMPBIN=$ac_ct_DUMPBIN
+ fi
+fi
+
+ case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+ *COFF*)
+ DUMPBIN="$DUMPBIN -symbols"
+ ;;
+ *)
+ DUMPBIN=:
+ ;;
+ esac
+ fi
+
+ if test "$DUMPBIN" != ":"; then
+ NM="$DUMPBIN"
+ fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if test "${lt_cv_nm_interface+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:$LINENO: output\"" >&5)
+ cat conftest.out >&5
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+# find the maximum length of command line arguments
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if test "${lt_cv_sys_max_cmd_len+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ i=0
+ teststring="ABCD"
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw* | cegcc*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ mint*)
+ # On MiNT this can take a long time and run out of memory.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ amigaos*)
+ # On AmigaOS with pdksh, this test takes hours, literally.
+ # So we just punt and use a minimum line length of 8192.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+ # This has been around since 386BSD, at least. Likely further.
+ if test -x /sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+ elif test -x /usr/sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+ else
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+ if test -n "$lt_cv_sys_max_cmd_len"; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8 ; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \
+ = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
+$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+ test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+ = c,a/b,, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
+$as_echo "$xsi_shell" >&6; }
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
+$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+ >/dev/null 2>&1 \
+ && lt_shell_append=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
+$as_echo "$lt_shell_append" >&6; }
+
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if test "${lt_cv_ld_reload_flag+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_ld_reload_flag='-r'
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OBJDUMP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OBJDUMP"; then
+ ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+ ac_ct_OBJDUMP=$OBJDUMP
+ # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OBJDUMP"; then
+ ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_OBJDUMP="objdump"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OBJDUMP" = x; then
+ OBJDUMP="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OBJDUMP=$ac_ct_OBJDUMP
+ fi
+else
+ OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if test "${lt_cv_deplibs_check_method+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi[45]*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+ if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+
+cegcc*)
+ # use the weaker test based on 'objdump'. See mingw*.
+ lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | dragonfly*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+haiku*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case $host_cpu in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+interix[3-9]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+rdos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.3*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AR+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_AR="${ac_tool_prefix}ar"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+ ac_ct_AR=$AR
+ # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_AR="ar"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ AR=$ac_ct_AR
+ fi
+else
+ AR="$ac_cv_prog_AR"
+fi
+
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+test -z "$STRIP" && STRIP=:
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_RANLIB" = x; then
+ RANLIB=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ RANLIB=$ac_ct_RANLIB
+ fi
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+case $host_os in
+ darwin*)
+ lock_old_archive_extraction=yes ;;
+ *)
+ lock_old_archive_extraction=no ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[BCDT]'
+ ;;
+cygwin* | mingw* | pw32* | cegcc*)
+ symcode='[ABCDGISTW]'
+ ;;
+hpux*)
+ if test "$host_cpu" = ia64; then
+ symcode='[ABCDEGRST]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[BCDEGRST]'
+ ;;
+osf*)
+ symcode='[BCDEGQRST]'
+ ;;
+solaris*)
+ symcode='[BDRT]'
+ ;;
+sco3.2v5*)
+ symcode='[DT]'
+ ;;
+sysv4.2uw2*)
+ symcode='[DT]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[ABDT]'
+ ;;
+sysv4)
+ symcode='[DFNSTU]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function
+ # and D for any global variable.
+ # Also find C++ and __fastcall symbols from MSVC++,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK '"\
+" {last_section=section; section=\$ 3};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+" s[1]~/^[@?]/{print s[1], s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx"
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
+ (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_save_LIBS="$LIBS"
+ lt_save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS="$lt_save_LIBS"
+ CFLAGS="$lt_save_CFLAGS"
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&5
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+ fi
+ else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ fi
+ rm -rf conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then :
+ enableval=$enable_libtool_lock;
+fi
+
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ ppc64-*linux*|powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if test "${lt_cv_cc_needs_belf+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ lt_cv_cc_needs_belf=yes
+else
+ lt_cv_cc_needs_belf=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
+ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS="$SAVE_CFLAGS"
+ fi
+ ;;
+sparc*-*solaris*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.o` in
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*) LD="${LD-ld} -m elf64_sparc" ;;
+ *)
+ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+ LD="${LD-ld} -64"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
+
+need_locks="$enable_libtool_lock"
+
+
+ case $host_os in
+ rhapsody* | darwin*)
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_DSYMUTIL+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$DSYMUTIL"; then
+ ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+ ac_ct_DSYMUTIL=$DSYMUTIL
+ # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_DSYMUTIL"; then
+ ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_DSYMUTIL" = x; then
+ DSYMUTIL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DSYMUTIL=$ac_ct_DSYMUTIL
+ fi
+else
+ DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_NMEDIT+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$NMEDIT"; then
+ ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+ ac_ct_NMEDIT=$NMEDIT
+ # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_NMEDIT"; then
+ ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_NMEDIT="nmedit"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_NMEDIT" = x; then
+ NMEDIT=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ NMEDIT=$ac_ct_NMEDIT
+ fi
+else
+ NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_LIPO+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$LIPO"; then
+ ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+ ac_ct_LIPO=$LIPO
+ # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_LIPO"; then
+ ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_LIPO="lipo"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_LIPO" = x; then
+ LIPO=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ LIPO=$ac_ct_LIPO
+ fi
+else
+ LIPO="$ac_cv_prog_LIPO"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OTOOL+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OTOOL"; then
+ ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+ ac_ct_OTOOL=$OTOOL
+ # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OTOOL"; then
+ ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_OTOOL="otool"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OTOOL" = x; then
+ OTOOL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OTOOL=$ac_ct_OTOOL
+ fi
+else
+ OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OTOOL64+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OTOOL64"; then
+ ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+ ac_ct_OTOOL64=$OTOOL64
+ # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OTOOL64"; then
+ ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_OTOOL64="otool64"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OTOOL64" = x; then
+ OTOOL64=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OTOOL64=$ac_ct_OTOOL64
+ fi
+else
+ OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if test "${lt_cv_apple_cc_single_mod+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_apple_cc_single_mod=no
+ if test -z "${LT_MULTI_MODULE}"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi_module to the
+ # link flags.
+ rm -rf libconftest.dylib*
+ echo "int foo(void){return 1;}" > conftest.c
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+ _lt_result=$?
+ if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+ lt_cv_apple_cc_single_mod=yes
+ else
+ cat conftest.err >&5
+ fi
+ rm -rf libconftest.dylib*
+ rm -f conftest.*
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if test "${lt_cv_ld_exported_symbols_list+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_ld_exported_symbols_list=no
+ save_LDFLAGS=$LDFLAGS
+ echo "_main" > conftest.sym
+ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ lt_cv_ld_exported_symbols_list=yes
+else
+ lt_cv_ld_exported_symbols_list=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
+$as_echo_n "checking for -force_load linker flag... " >&6; }
+if test "${lt_cv_ld_force_load+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_ld_force_load=no
+ cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+ echo "$AR cru libconftest.a conftest.o" >&5
+ $AR cru libconftest.a conftest.o 2>&5
+ cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
+ $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+ _lt_result=$?
+ if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then
+ lt_cv_ld_force_load=yes
+ else
+ cat conftest.err >&5
+ fi
+ rm -f conftest.err libconftest.a conftest conftest.c
+ rm -rf conftest.dSYM
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
+$as_echo "$lt_cv_ld_force_load" >&6; }
+ case $host_os in
+ rhapsody* | darwin1.[012])
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+ darwin1.*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ darwin*) # darwin 5.x on
+ # if running on 10.5 or later, the deployment target defaults
+ # to the OS version, if on x86, and 10.4, the deployment
+ # target defaults to 10.4. Don't you love it?
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+ 10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ 10.[012]*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ 10.*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ esac
+ ;;
+ esac
+ if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+ _lt_dar_single_mod='$single_module'
+ fi
+ if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+ _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+ else
+ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+ _lt_dsymutil='~$DSYMUTIL $lib || :'
+ else
+ _lt_dsymutil=
+ fi
+ ;;
+ esac
+
+for ac_header in dlfcn.h
+do :
+ ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DLFCN_H 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+# Set options
+
+
+
+ enable_dlopen=no
+
+
+ enable_win32_dll=no
+
+
+ # Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then :
+ enableval=$enable_shared; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_shared=yes
+fi
+
+
+
+
+
+
+
+
+
+ # Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then :
+ enableval=$enable_static; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_static=yes
+fi
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then :
+ withval=$with_pic; pic_mode="$withval"
+else
+ pic_mode=default
+fi
+
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
+ # Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then :
+ enableval=$enable_fast_install; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_fast_install=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if test "${lt_cv_objdir+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/${ac_tool_prefix}file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ else
+ MAGIC_CMD=:
+ fi
+fi
+
+ fi
+ ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+ case $cc_basename in
+ nvcc*)
+ lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
+ *)
+ lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
+ esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_rtti_exceptions=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="-fno-rtti -fno-exceptions"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_rtti_exceptions=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+ lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+ :
+fi
+
+fi
+
+
+
+
+
+
+ lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_static='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic='-fno-common'
+ ;;
+
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ lt_prog_compiler_static=
+ ;;
+
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[3-9]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ lt_prog_compiler_can_build_shared=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+
+ case $cc_basename in
+ nvcc*) # Cuda Compiler Driver 2.2
+ lt_prog_compiler_wl='-Xlinker '
+ lt_prog_compiler_pic='-Xcompiler -fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ lt_prog_compiler_wl='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ else
+ lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ lt_prog_compiler_static='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC (with -KPIC) is the default.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ # old Intel for x86_64 which still supported -KPIC.
+ ecc*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ # icc used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ icc* | ifort*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ # Lahey Fortran 8.1.
+ lf95*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='--shared'
+ lt_prog_compiler_static='--static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fpic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ ccc*)
+ lt_prog_compiler_wl='-Wl,'
+ # All Alpha code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+ xl* | bgxl* | bgf* | mpixl*)
+ # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-qpic'
+ lt_prog_compiler_static='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ F* | *Sun*Fortran*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl=''
+ ;;
+ *Sun\ C*)
+ # Sun C 5.9
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl='-Wl,'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ lt_prog_compiler_wl='-Wl,'
+ # All OSF/1 code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ rdos*)
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ solaris*)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ lt_prog_compiler_wl='-Qoption ld '
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ lt_prog_compiler_pic='-Kconform_pic'
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ unicos*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_can_build_shared=no
+ ;;
+
+ uts4*)
+ lt_prog_compiler_pic='-pic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *)
+ lt_prog_compiler_can_build_shared=no
+ ;;
+ esac
+ fi
+
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic=
+ ;;
+ *)
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
+$as_echo "$lt_prog_compiler_pic" >&6; }
+
+
+
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if test "${lt_cv_prog_compiler_pic_works+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_pic_works=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_pic_works=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
+ case $lt_prog_compiler_pic in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+ esac
+else
+ lt_prog_compiler_pic=
+ lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if test "${lt_cv_prog_compiler_static_works+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_static_works=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_static_works=yes
+ fi
+ else
+ lt_cv_prog_compiler_static_works=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works" = xyes; then
+ :
+else
+ lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+ if test "$hard_links" = no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+ runpath_var=
+ allow_undefined_flag=
+ always_export_symbols=no
+ archive_cmds=
+ archive_expsym_cmds=
+ compiler_needs_object=no
+ enable_shared_with_static_runtimes=no
+ export_dynamic_flag_spec=
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ hardcode_automatic=no
+ hardcode_direct=no
+ hardcode_direct_absolute=no
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld=
+ hardcode_libdir_separator=
+ hardcode_minus_L=no
+ hardcode_shlibpath_var=unsupported
+ inherit_rpath=no
+ link_all_deplibs=unknown
+ module_cmds=
+ module_expsym_cmds=
+ old_archive_from_new_cmds=
+ old_archive_from_expsyms_cmds=
+ thread_safe_flag_spec=
+ whole_archive_flag_spec=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ include_expsyms=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ # Exclude shared library initialization/finalization symbols.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ ld_shlibs=yes
+
+ # On some targets, GNU ld is compatible enough with the native linker
+ # that we're better off using the native interface for both.
+ lt_use_gnu_ld_interface=no
+ if test "$with_gnu_ld" = yes; then
+ case $host_os in
+ aix*)
+ # The AIX port of GNU ld has always aspired to compatibility
+ # with the native linker. However, as the warning in the GNU ld
+ # block says, versions before 2.19.5* couldn't really create working
+ # shared libraries, regardless of the interface used.
+ case `$LD -v 2>&1` in
+ *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+ *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+ *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ fi
+
+ if test "$lt_use_gnu_ld_interface" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ export_dynamic_flag_spec='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>&1` in
+ *GNU\ gold*) supports_anon_versioning=yes ;;
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix[3-9]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds=''
+ ;;
+ m68k)
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ export_dynamic_flag_spec='${wl}--export-all-symbols'
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ haiku*)
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ link_all_deplibs=yes
+ ;;
+
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+ tmp_diet=no
+ if test "$host_os" = linux-dietlibc; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test "$tmp_diet" = no
+ then
+ tmp_addflag=
+ tmp_sharedflag='-shared'
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group f77 and f90 compilers
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ lf95*) # Lahey Fortran 8.1
+ whole_archive_flag_spec=
+ tmp_sharedflag='--shared' ;;
+ xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+ nvcc*) # Cuda Compiler Driver 2.2
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ compiler_needs_object=yes
+ ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ compiler_needs_object=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ esac
+ archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+
+ case $cc_basename in
+ xlf* | bgf* | bgxlf* | mpixlf*)
+ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+ whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld='-rpath $libdir'
+ archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+
+ if test "$ld_shlibs" = no; then
+ runpath_var=
+ hardcode_libdir_flag_spec=
+ export_dynamic_flag_spec=
+ whole_archive_flag_spec=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+
+ aix[4-9]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ # Also, AIX nm treats weak defined symbols like other global
+ # defined symbols, whereas GNU nm marks them as "W".
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds=''
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ file_list_spec='${wl}-f,'
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ export_dynamic_flag_spec='${wl}-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag="-z nodefs"
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag=' ${wl}-bernotok'
+ allow_undefined_flag=' ${wl}-berok'
+ if test "$with_gnu_ld" = yes; then
+ # We only use this code for GNU lds that support --whole-archive.
+ whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec='$convenience'
+ fi
+ archive_cmds_need_lc=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds=''
+ ;;
+ m68k)
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+
+ bsdi[45]*)
+ export_dynamic_flag_spec=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_from_new_cmds='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
+ enable_shared_with_static_runtimes=yes
+ ;;
+
+ darwin* | rhapsody*)
+
+
+ archive_cmds_need_lc=no
+ hardcode_direct=no
+ hardcode_automatic=yes
+ hardcode_shlibpath_var=unsupported
+ if test "$lt_cv_ld_force_load" = "yes"; then
+ whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+ else
+ whole_archive_flag_spec=''
+ fi
+ link_all_deplibs=yes
+ allow_undefined_flag="$_lt_dar_allow_undefined"
+ case $cc_basename in
+ ifort*) _lt_dar_can_shared=yes ;;
+ *) _lt_dar_can_shared=$GCC ;;
+ esac
+ if test "$_lt_dar_can_shared" = "yes"; then
+ output_verbose_link_cmd=func_echo_all
+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+ module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+ archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+ module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+
+ else
+ ld_shlibs=no
+ fi
+
+ ;;
+
+ dgux*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ freebsd1*)
+ ld_shlibs=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ export_dynamic_flag_spec='${wl}-E'
+ ;;
+
+ hpux10*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_flag_spec_ld='+b $libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+
+ # Older versions of the 11.00 compiler do not understand -b yet
+ # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
+$as_echo_n "checking if $CC understands -b... " >&6; }
+if test "${lt_cv_prog_compiler__b+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler__b=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -b"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler__b=yes
+ fi
+ else
+ lt_cv_prog_compiler__b=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
+$as_echo "$lt_cv_prog_compiler__b" >&6; }
+
+if test x"$lt_cv_prog_compiler__b" = xyes; then
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+fi
+
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ ;;
+ *)
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int foo(void) {}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS="$save_LDFLAGS"
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ inherit_rpath=yes
+ link_all_deplibs=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ newsos6)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_shlibpath_var=no
+ ;;
+
+ *nto* | *qnx*)
+ ;;
+
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ hardcode_direct_absolute=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ else
+ case $host_os in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_separator=:
+ ;;
+
+ solaris*)
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='${wl}'
+ archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_shlibpath_var=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'. GCC discards it without `$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test "$GCC" = yes; then
+ whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ else
+ whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ link_all_deplibs=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ reload_cmds='$CC -r -o $output$reload_objs'
+ hardcode_direct=no
+ ;;
+ motorola)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4.3*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ export_dynamic_flag_spec='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ no_undefined_flag='${wl}-z,text'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ no_undefined_flag='${wl}-z,text'
+ allow_undefined_flag='${wl}-z,nodefs'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-R,$libdir'
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ export_dynamic_flag_spec='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+
+ if test x$host_vendor = xsni; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if test "${lt_cv_archive_cmds_need_lc+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ $RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl
+ pic_flag=$lt_prog_compiler_pic
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag
+ allow_undefined_flag=
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+ (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ then
+ lt_cv_archive_cmds_need_lc=no
+ else
+ lt_cv_archive_cmds_need_lc=yes
+ fi
+ allow_undefined_flag=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
+ archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+if test "$GCC" = yes; then
+ case $host_os in
+ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+ *) lt_awk_arg="/^libraries:/" ;;
+ esac
+ case $host_os in
+ mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;;
+ *) lt_sed_strip_eq="s,=/,/,g" ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+ case $lt_search_path_spec in
+ *\;*)
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+ ;;
+ *)
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ esac
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary.
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+ else
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+ lt_foo="";
+ lt_count=0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo="/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[lt_foo]++; }
+ if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+ # AWK program above erroneously prepends '/' to C:/dos/paths
+ # for these hosts.
+ case $host_os in
+ mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+ $SED 's,/\([A-Za-z]:\),\1,g'` ;;
+ esac
+ sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix[4-9]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ case $host_cpu in
+ powerpc)
+ # Since July 2007 AmigaOS4 officially supports .so libraries.
+ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ ;;
+ m68k)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+ esac
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[45]*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
+ ;;
+ mingw* | cegcc*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[123]*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+haiku*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ dynamic_linker="$host_os runtime_loader"
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/beos/system/lib'
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+ postinstall_cmds='chmod 555 $lib'
+ # or fails outright, so override atomically:
+ install_override_mode=555
+ ;;
+
+interix[3-9]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+
+ # Some binutils ld are patched to set DT_RUNPATH
+ if test "${lt_cv_shlibpath_overrides_runpath+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_shlibpath_overrides_runpath=no
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+ lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+
+fi
+
+ shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[89] | openbsd2.[89].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+ sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+ sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+ test -n "$runpath_var" ||
+ test "X$hardcode_automatic" = "Xyes" ; then
+
+ # We can hardcode non-existent directories.
+ if test "$hardcode_direct" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+ test "$hardcode_minus_L" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
+
+if test "$hardcode_action" = relink ||
+ test "$inherit_rpath" = yes; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+
+
+
+
+
+ if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32* | cegcc*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dl_dlopen=yes
+else
+ ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+
+fi
+
+ ;;
+
+ *)
+ ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+if test "x$ac_cv_func_shl_load" = x""yes; then :
+ lt_cv_dlopen="shl_load"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+int
+main ()
+{
+return shl_load ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dld_shl_load=yes
+else
+ ac_cv_lib_dld_shl_load=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = x""yes; then :
+ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+else
+ ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = x""yes; then :
+ lt_cv_dlopen="dlopen"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dl_dlopen=yes
+else
+ ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_svld_dlopen=yes
+else
+ ac_cv_lib_svld_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = x""yes; then :
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link ();
+int
+main ()
+{
+return dld_link ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dld_dld_link=yes
+else
+ ac_cv_lib_dld_dld_link=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = x""yes; then :
+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if test "${lt_cv_dlopen_self+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line 11625 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+void fnord () __attribute__((visibility("default")));
+#endif
+
+void fnord () { int i=42; }
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}
+_LT_EOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if test "${lt_cv_dlopen_self_static+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self_static=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line 11731 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+void fnord () __attribute__((visibility("default")));
+#endif
+
+void fnord () { int i=42; }
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}
+_LT_EOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self_static=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+ ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+ # Report which library types will actually be built
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix[4-9]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+ALL_LINGUAS="fr sv tr es da vi zh_CN zh_TW ga fi id bg"
+# If we haven't got the data from the intl directory,
+# assume NLS is disabled.
+USE_NLS=no
+LIBINTL=
+LIBINTL_DEP=
+INCINTL=
+XGETTEXT=
+GMSGFMT=
+POSUB=
+
+if test -f ../intl/config.intl; then
+ . ../intl/config.intl
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
+$as_echo_n "checking whether NLS is requested... " >&6; }
+if test x"$USE_NLS" != xyes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define ENABLE_NLS 1" >>confdefs.h
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5
+$as_echo_n "checking for catalogs to be installed... " >&6; }
+ # Look for .po and .gmo files in the source directory.
+ CATALOGS=
+ XLINGUAS=
+ for cat in $srcdir/po/*.gmo $srcdir/po/*.po; do
+ # If there aren't any .gmo files the shell will give us the
+ # literal string "../path/to/srcdir/po/*.gmo" which has to be
+ # weeded out.
+ case "$cat" in *\**)
+ continue;;
+ esac
+ # The quadruple backslash is collapsed to a double backslash
+ # by the backticks, then collapsed again by the double quotes,
+ # leaving us with one backslash in the sed expression (right
+ # before the dot that mustn't act as a wildcard).
+ cat=`echo $cat | sed -e "s!$srcdir/po/!!" -e "s!\\\\.po!.gmo!"`
+ lang=`echo $cat | sed -e "s!\\\\.gmo!!"`
+ # The user is allowed to set LINGUAS to a list of languages to
+ # install catalogs for. If it's empty that means "all of them."
+ if test "x$LINGUAS" = x; then
+ CATALOGS="$CATALOGS $cat"
+ XLINGUAS="$XLINGUAS $lang"
+ else
+ case "$LINGUAS" in *$lang*)
+ CATALOGS="$CATALOGS $cat"
+ XLINGUAS="$XLINGUAS $lang"
+ ;;
+ esac
+ fi
+ done
+ LINGUAS="$XLINGUAS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5
+$as_echo "$LINGUAS" >&6; }
+
+
+ DATADIRNAME=share
+
+ INSTOBJEXT=.mo
+
+ GENCAT=gencat
+
+ CATOBJEXT=.gmo
+
+fi
+
+ MKINSTALLDIRS=
+ if test -n "$ac_aux_dir"; then
+ case "$ac_aux_dir" in
+ /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
+ *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
+ esac
+ fi
+ if test -z "$MKINSTALLDIRS"; then
+ MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+ fi
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
+$as_echo_n "checking whether NLS is requested... " >&6; }
+ # Check whether --enable-nls was given.
+if test "${enable_nls+set}" = set; then :
+ enableval=$enable_nls; USE_NLS=$enableval
+else
+ USE_NLS=yes
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+$as_echo "$USE_NLS" >&6; }
+
+
+
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MSGFMT+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case "$MSGFMT" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 &&
+ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
+ ;;
+esac
+fi
+MSGFMT="$ac_cv_path_MSGFMT"
+if test "$MSGFMT" != ":"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5
+$as_echo "$MSGFMT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ # Extract the first word of "gmsgfmt", so it can be a program name with args.
+set dummy gmsgfmt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_GMSGFMT+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $GMSGFMT in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
+ ;;
+esac
+fi
+GMSGFMT=$ac_cv_path_GMSGFMT
+if test -n "$GMSGFMT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5
+$as_echo "$GMSGFMT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_XGETTEXT+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case "$XGETTEXT" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+ (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
+ ;;
+esac
+fi
+XGETTEXT="$ac_cv_path_XGETTEXT"
+if test "$XGETTEXT" != ":"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5
+$as_echo "$XGETTEXT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ rm -f messages.po
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgmerge", so it can be a program name with args.
+set dummy msgmerge; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MSGMERGE+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case "$MSGMERGE" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ if $ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1; then
+ ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":"
+ ;;
+esac
+fi
+MSGMERGE="$ac_cv_path_MSGMERGE"
+if test "$MSGMERGE" != ":"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5
+$as_echo "$MSGMERGE" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test "$GMSGFMT" != ":"; then
+ if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
+ (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ : ;
+ else
+ GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5
+$as_echo "found $GMSGFMT program is not GNU msgfmt; ignore it" >&6; }
+ GMSGFMT=":"
+ fi
+ fi
+
+ if test "$XGETTEXT" != ":"; then
+ if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+ (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ : ;
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5
+$as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; }
+ XGETTEXT=":"
+ fi
+ rm -f messages.po
+ fi
+
+ ac_config_commands="$ac_config_commands default-1"
+
+
+
+
+
+for ac_prog in 'bison -y' byacc
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_YACC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$YACC"; then
+ ac_cv_prog_YACC="$YACC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_YACC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+YACC=$ac_cv_prog_YACC
+if test -n "$YACC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5
+$as_echo "$YACC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$YACC" && break
+done
+test -n "$YACC" || YACC="yacc"
+
+for ac_prog in flex lex
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_LEX+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$LEX"; then
+ ac_cv_prog_LEX="$LEX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_LEX="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+LEX=$ac_cv_prog_LEX
+if test -n "$LEX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5
+$as_echo "$LEX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$LEX" && break
+done
+test -n "$LEX" || LEX=":"
+
+if test "x$LEX" != "x:"; then
+ cat >conftest.l <<_ACEOF
+%%
+a { ECHO; }
+b { REJECT; }
+c { yymore (); }
+d { yyless (1); }
+e { yyless (input () != 0); }
+f { unput (yytext[0]); }
+. { BEGIN INITIAL; }
+%%
+#ifdef YYTEXT_POINTER
+extern char *yytext;
+#endif
+int
+main (void)
+{
+ return ! yylex () + ! yywrap ();
+}
+_ACEOF
+{ { ac_try="$LEX conftest.l"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$LEX conftest.l") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking lex output file root" >&5
+$as_echo_n "checking lex output file root... " >&6; }
+if test "${ac_cv_prog_lex_root+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+if test -f lex.yy.c; then
+ ac_cv_prog_lex_root=lex.yy
+elif test -f lexyy.c; then
+ ac_cv_prog_lex_root=lexyy
+else
+ as_fn_error "cannot find output from $LEX; giving up" "$LINENO" 5
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5
+$as_echo "$ac_cv_prog_lex_root" >&6; }
+LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root
+
+if test -z "${LEXLIB+set}"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex library" >&5
+$as_echo_n "checking lex library... " >&6; }
+if test "${ac_cv_lib_lex+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ ac_save_LIBS=$LIBS
+ ac_cv_lib_lex='none needed'
+ for ac_lib in '' -lfl -ll; do
+ LIBS="$ac_lib $ac_save_LIBS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+`cat $LEX_OUTPUT_ROOT.c`
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_lex=$ac_lib
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ test "$ac_cv_lib_lex" != 'none needed' && break
+ done
+ LIBS=$ac_save_LIBS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5
+$as_echo "$ac_cv_lib_lex" >&6; }
+ test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5
+$as_echo_n "checking whether yytext is a pointer... " >&6; }
+if test "${ac_cv_prog_lex_yytext_pointer+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ # POSIX says lex can declare yytext either as a pointer or an array; the
+# default is implementation-dependent. Figure out which it is, since
+# not all implementations provide the %pointer and %array declarations.
+ac_cv_prog_lex_yytext_pointer=no
+ac_save_LIBS=$LIBS
+LIBS="$LEXLIB $ac_save_LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#define YYTEXT_POINTER 1
+`cat $LEX_OUTPUT_ROOT.c`
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_prog_lex_yytext_pointer=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_save_LIBS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5
+$as_echo "$ac_cv_prog_lex_yytext_pointer" >&6; }
+if test $ac_cv_prog_lex_yytext_pointer = yes; then
+
+$as_echo "#define YYTEXT_POINTER 1" >>confdefs.h
+
+fi
+rm -f conftest.l $LEX_OUTPUT_ROOT.c
+
+fi
+if test "$LEX" = :; then
+ LEX=${am_missing_run}flex
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+ # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then :
+ enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+ USE_MAINTAINER_MODE=no
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
+$as_echo "$USE_MAINTAINER_MODE" >&6; }
+ if test $USE_MAINTAINER_MODE = yes; then
+ MAINTAINER_MODE_TRUE=
+ MAINTAINER_MODE_FALSE='#'
+else
+ MAINTAINER_MODE_TRUE='#'
+ MAINTAINER_MODE_FALSE=
+fi
+
+ MAINT=$MAINTAINER_MODE_TRUE
+
+
+ if false; then
+ GENINSRC_NEVER_TRUE=
+ GENINSRC_NEVER_FALSE='#'
+else
+ GENINSRC_NEVER_TRUE='#'
+ GENINSRC_NEVER_FALSE=
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to compare bootstrapped objects" >&5
+$as_echo_n "checking how to compare bootstrapped objects... " >&6; }
+if test "${gcc_cv_prog_cmp_skip+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ echo abfoo >t1
+ echo cdfoo >t2
+ gcc_cv_prog_cmp_skip='tail +16c $$f1 > tmp-foo1; tail +16c $$f2 > tmp-foo2; cmp tmp-foo1 tmp-foo2'
+ if cmp t1 t2 2 2 > /dev/null 2>&1; then
+ if cmp t1 t2 1 1 > /dev/null 2>&1; then
+ :
+ else
+ gcc_cv_prog_cmp_skip='cmp $$f1 $$f2 16 16'
+ fi
+ fi
+ if cmp --ignore-initial=2 t1 t2 > /dev/null 2>&1; then
+ if cmp --ignore-initial=1 t1 t2 > /dev/null 2>&1; then
+ :
+ else
+ gcc_cv_prog_cmp_skip='cmp --ignore-initial=16 $$f1 $$f2'
+ fi
+ fi
+ rm t1 t2
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_prog_cmp_skip" >&5
+$as_echo "$gcc_cv_prog_cmp_skip" >&6; }
+do_compare="$gcc_cv_prog_cmp_skip"
+
+
+
+. ${srcdir}/configure.host
+
+
+
+
+
+
+for ac_header in string.h strings.h stdlib.h unistd.h elf-hints.h limits.h sys/param.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+eval as_val=\$$as_ac_Header
+ if test "x$as_val" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+for ac_header in fcntl.h sys/file.h sys/time.h sys/stat.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+eval as_val=\$$as_ac_Header
+ if test "x$as_val" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+for ac_func in glob mkstemp realpath sbrk waitpid
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+eval as_val=\$$as_ac_var
+ if test "x$as_val" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+for ac_func in open lseek close
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+eval as_val=\$$as_ac_var
+ if test "x$as_val" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+ac_header_dirent=no
+for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
+ as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5
+$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <$ac_hdr>
+
+int
+main ()
+{
+if ((DIR *) 0)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$as_ac_Header=yes"
+else
+ eval "$as_ac_Header=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_ac_Header
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+eval as_val=\$$as_ac_Header
+ if test "x$as_val" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
+_ACEOF
+
+ac_header_dirent=$ac_hdr; break
+fi
+
+done
+# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
+if test $ac_header_dirent = dirent.h; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
+$as_echo_n "checking for library containing opendir... " >&6; }
+if test "${ac_cv_search_opendir+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char opendir ();
+int
+main ()
+{
+return opendir ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' dir; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_opendir=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if test "${ac_cv_search_opendir+set}" = set; then :
+ break
+fi
+done
+if test "${ac_cv_search_opendir+set}" = set; then :
+
+else
+ ac_cv_search_opendir=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
+$as_echo "$ac_cv_search_opendir" >&6; }
+ac_res=$ac_cv_search_opendir
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
+$as_echo_n "checking for library containing opendir... " >&6; }
+if test "${ac_cv_search_opendir+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char opendir ();
+int
+main ()
+{
+return opendir ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' x; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_opendir=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if test "${ac_cv_search_opendir+set}" = set; then :
+ break
+fi
+done
+if test "${ac_cv_search_opendir+set}" = set; then :
+
+else
+ ac_cv_search_opendir=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
+$as_echo "$ac_cv_search_opendir" >&6; }
+ac_res=$ac_cv_search_opendir
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+fi
+
+
+# Check for dlopen support and enable plugins if possible.
+enable_plugins=yes
+ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = x""yes; then :
+
+else
+ enable_plugins=no
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5
+$as_echo_n "checking for library containing dlopen... " >&6; }
+if test "${ac_cv_search_dlopen+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' dl; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_dlopen=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if test "${ac_cv_search_dlopen+set}" = set; then :
+ break
+fi
+done
+if test "${ac_cv_search_dlopen+set}" = set; then :
+
+else
+ ac_cv_search_dlopen=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5
+$as_echo "$ac_cv_search_dlopen" >&6; }
+ac_res=$ac_cv_search_dlopen
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+else
+ enable_plugins=no
+fi
+
+for ac_func in dlopen dlsym dlclose
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+eval as_val=\$$as_ac_var
+ if test "x$as_val" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ enable_plugins=no
+fi
+done
+
+# We also support plugins on Windows (MinGW).
+if test x$enable_plugins = xno ; then
+ for ac_header in Windows.h
+do :
+ ac_fn_c_check_header_compile "$LINENO" "Windows.h" "ac_cv_header_Windows_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_Windows_h" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_WINDOWS_H 1
+_ACEOF
+ enable_plugins=yes
+fi
+
+done
+
+fi
+ if test x$enable_plugins = xyes; then
+ ENABLE_PLUGINS_TRUE=
+ ENABLE_PLUGINS_FALSE='#'
+else
+ ENABLE_PLUGINS_TRUE='#'
+ ENABLE_PLUGINS_FALSE=
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a known getopt prototype in unistd.h" >&5
+$as_echo_n "checking for a known getopt prototype in unistd.h... " >&6; }
+if test "${ld_cv_decl_getopt_unistd_h+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <unistd.h>
+int
+main ()
+{
+extern int getopt (int, char *const*, const char *);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ld_cv_decl_getopt_unistd_h=yes
+else
+ ld_cv_decl_getopt_unistd_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_cv_decl_getopt_unistd_h" >&5
+$as_echo "$ld_cv_decl_getopt_unistd_h" >&6; }
+if test $ld_cv_decl_getopt_unistd_h = yes; then
+
+$as_echo "#define HAVE_DECL_GETOPT 1" >>confdefs.h
+
+fi
+
+
+case "${host}" in
+*-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
+
+$as_echo "#define USE_BINARY_FOPEN 1" >>confdefs.h
+ ;;
+esac
+
+ac_fn_c_check_decl "$LINENO" "strstr" "ac_cv_have_decl_strstr" "$ac_includes_default"
+if test "x$ac_cv_have_decl_strstr" = x""yes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRSTR $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "free" "ac_cv_have_decl_free" "$ac_includes_default"
+if test "x$ac_cv_have_decl_free" = x""yes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FREE $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "sbrk" "ac_cv_have_decl_sbrk" "$ac_includes_default"
+if test "x$ac_cv_have_decl_sbrk" = x""yes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SBRK $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "getenv" "ac_cv_have_decl_getenv" "$ac_includes_default"
+if test "x$ac_cv_have_decl_getenv" = x""yes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETENV $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "environ" "ac_cv_have_decl_environ" "$ac_includes_default"
+if test "x$ac_cv_have_decl_environ" = x""yes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ENVIRON $ac_have_decl
+_ACEOF
+
+
+# Link in zlib if we can. This is needed only for the bootstrap tests
+# right now, since those tests use libbfd, which depends on zlib.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing zlibVersion" >&5
+$as_echo_n "checking for library containing zlibVersion... " >&6; }
+if test "${ac_cv_search_zlibVersion+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char zlibVersion ();
+int
+main ()
+{
+return zlibVersion ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' z; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_zlibVersion=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if test "${ac_cv_search_zlibVersion+set}" = set; then :
+ break
+fi
+done
+if test "${ac_cv_search_zlibVersion+set}" = set; then :
+
+else
+ ac_cv_search_zlibVersion=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_zlibVersion" >&5
+$as_echo "$ac_cv_search_zlibVersion" >&6; }
+ac_res=$ac_cv_search_zlibVersion
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+ for ac_header in zlib.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_zlib_h" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_ZLIB_H 1
+_ACEOF
+
+fi
+
+done
+
+fi
+
+
+# When converting linker scripts into strings for use in emulation
+# files, use astring.sed if the compiler supports ANSI string
+# concatenation, or ostring.sed otherwise. This is to support the
+# broken Microsoft MSVC compiler, which limits the length of string
+# constants, while still supporting pre-ANSI compilers which do not
+# support string concatenation.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ANSI C string concatenation works" >&5
+$as_echo_n "checking whether ANSI C string concatenation works... " >&6; }
+if test "${ld_cv_string_concatenation+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+char *a = "a" "a";
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ld_cv_string_concatenation=yes
+else
+ ld_cv_string_concatenation=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_cv_string_concatenation" >&5
+$as_echo "$ld_cv_string_concatenation" >&6; }
+if test "$ld_cv_string_concatenation" = "yes"; then
+ STRINGIFY=astring.sed
+else
+ STRINGIFY=ostring.sed
+fi
+
+
+# target-specific stuff:
+
+all_targets=
+EMUL=
+all_emuls=
+all_emul_extras=
+all_libpath=
+
+rm -f tdirs
+
+for targ_alias in `echo $target_alias $enable_targets | sed 's/,/ /g'`
+do
+ if test "$targ_alias" = "all"; then
+ all_targets=true
+ else
+ # Canonicalize the secondary target names.
+ result=`$ac_config_sub $targ_alias 2>/dev/null`
+ if test -n "$result"; then
+ targ=$result
+ else
+ targ=$targ_alias
+ fi
+
+ . ${srcdir}/configure.tgt
+
+ if test "$targ" = "$target"; then
+ EMUL=$targ_emul
+ fi
+
+ if test x${want64} = xfalse; then
+ . ${srcdir}/../bfd/config.bfd
+ fi
+
+ if test x${want64} = xtrue; then
+ targ_extra_emuls="$targ_extra_emuls $targ64_extra_emuls"
+ targ_extra_libpath="$targ_extra_libpath $targ64_extra_libpath"
+ fi
+
+ for i in $targ_emul $targ_extra_emuls $targ_extra_libpath; do
+ case " $all_emuls " in
+ *" e${i}.o "*) ;;
+ *)
+ all_emuls="$all_emuls e${i}.o"
+ eval result=\$tdir_$i
+ test -z "$result" && result=$targ_alias
+ echo tdir_$i=$result >> tdirs
+ ;;
+ esac
+ done
+
+ for i in $targ_emul $targ_extra_libpath; do
+ case " $all_libpath " in
+ *" ${i} "*) ;;
+ *)
+ if test -z "$all_libpath"; then
+ all_libpath=${i}
+ else
+ all_libpath="$all_libpath ${i}"
+ fi
+ ;;
+ esac
+ done
+
+ for i in $targ_extra_ofiles; do
+ case " $all_emul_extras " in
+ *" ${i} "*) ;;
+ *)
+ all_emul_extras="$all_emul_extras ${i}"
+ ;;
+ esac
+ done
+ fi
+done
+
+
+
+TDIRS=tdirs
+
+
+if test x${all_targets} = xtrue; then
+ if test x${want64} = xfalse; then
+ # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
+$as_echo_n "checking size of long... " >&6; }
+if test "${ac_cv_sizeof_long+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_long" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ as_fn_set_status 77
+as_fn_error "cannot compute sizeof (long)
+See \`config.log' for more details." "$LINENO" 5; }; }
+ else
+ ac_cv_sizeof_long=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
+$as_echo "$ac_cv_sizeof_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG $ac_cv_sizeof_long
+_ACEOF
+
+
+ if test "x${ac_cv_sizeof_long}" = "x8"; then
+ want64=true
+ fi
+ fi
+ if test x${want64} = xtrue; then
+ EMULATION_OFILES='$(ALL_EMULATIONS) $(ALL_64_EMULATIONS)'
+ else
+ EMULATION_OFILES='$(ALL_EMULATIONS)'
+ fi
+ EMUL_EXTRA_OFILES='$(ALL_EMUL_EXTRA_OFILES)'
+else
+ EMULATION_OFILES=$all_emuls
+ EMUL_EXTRA_OFILES=$all_emul_extras
+fi
+
+
+
+
+EMULATION_LIBPATH=$all_libpath
+
+
+if test x${enable_static} = xno; then
+ TESTBFDLIB="--rpath ../bfd/.libs ../bfd/.libs/libbfd.so"
+else
+ TESTBFDLIB="../bfd/.libs/libbfd.a"
+fi
+
+
+target_vendor=${target_vendor=$host_vendor}
+case "$target_vendor" in
+ hp) EXTRA_SHLIB_EXTENSION=".sl" ;;
+ *) EXTRA_SHLIB_EXTENSION= ;;
+esac
+
+case "$target_os" in
+ lynxos) EXTRA_SHLIB_EXTENSION=".a" ;;
+esac
+
+if test x${EXTRA_SHLIB_EXTENSION} != x ; then
+
+cat >>confdefs.h <<_ACEOF
+#define EXTRA_SHLIB_EXTENSION "$EXTRA_SHLIB_EXTENSION"
+_ACEOF
+
+fi
+
+
+
+
+
+
+ac_config_files="$ac_config_files Makefile po/Makefile.in:po/Make-in"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes: double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \.
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ test "x$cache_file" != "x/dev/null" &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+ cat confcache >$cache_file
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+ as_fn_error "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+ if test -n "$EXEEXT"; then
+ am__EXEEXT_TRUE=
+ am__EXEEXT_FALSE='#'
+else
+ am__EXEEXT_TRUE='#'
+ am__EXEEXT_FALSE=
+fi
+
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+ as_fn_error "conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+ as_fn_error "conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GENINSRC_NEVER_TRUE}" && test -z "${GENINSRC_NEVER_FALSE}"; then
+ as_fn_error "conditional \"GENINSRC_NEVER\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_PLUGINS_TRUE}" && test -z "${ENABLE_PLUGINS_FALSE}"; then
+ as_fn_error "conditional \"ENABLE_PLUGINS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error ERROR [LINENO LOG_FD]
+# ---------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with status $?, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$?; test $as_status -eq 0 && as_status=1
+ if test "$3"; then
+ as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+ fi
+ $as_echo "$as_me: error: $1" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in #(
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by $as_me, which was
+generated by GNU Autoconf 2.64. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ -q, --quiet, --silent
+ do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to the package provider."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_version="\\
+config.status
+configured by $0, generated by GNU Autoconf 2.64,
+ with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2009 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ $as_echo "$ac_cs_version"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append CONFIG_FILES " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h)
+ # Conflict between --help and --header
+ as_fn_error "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+ --help | --hel | -h )
+ $as_echo "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) as_fn_error "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+ *) as_fn_append ac_config_targets " $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+ set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
+ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
+host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
+host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
+build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
+build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
+build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
+SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
+Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
+GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
+EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
+FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
+LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
+NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
+LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
+exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
+AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
+STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
+lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
+CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
+compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
+GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
+libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
+version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
+install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
+striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in SHELL \
+ECHO \
+SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+OBJDUMP \
+deplibs_check_method \
+file_magic_cmd \
+AR \
+AR_FLAGS \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_wl \
+lt_prog_compiler_pic \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_flag_spec_ld \
+hardcode_libdir_separator \
+fix_srcfile_path \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+install_override_mode \
+finish_eval \
+old_striplib \
+striplib; do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec; do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ TIMESTAMP='$TIMESTAMP'
+ RM='$RM'
+ ofile='$ofile'
+
+
+
+# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+ # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it
+ # from automake.
+ eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+ # Capture the value of LINGUAS because we need it to compute CATALOGS.
+ LINGUAS="${LINGUAS-%UNSET%}"
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;;
+ "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+ "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in:po/Make-in" ;;
+
+ *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp=
+ trap 'exit_status=$?
+ { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
+ trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+if $AWK 'BEGIN { getline <"/dev/null" }' </dev/null 2>/dev/null; then
+ ac_cs_awk_getline=:
+ ac_cs_awk_pipe_init=
+ ac_cs_awk_read_file='
+ while ((getline aline < (F[key])) > 0)
+ print(aline)
+ close(F[key])'
+ ac_cs_awk_pipe_fini=
+else
+ ac_cs_awk_getline=false
+ ac_cs_awk_pipe_init="print \"cat <<'|#_!!_#|' &&\""
+ ac_cs_awk_read_file='
+ print "|#_!!_#|"
+ print "cat " F[key] " &&"
+ '$ac_cs_awk_pipe_init
+ # The final `:' finishes the AND list.
+ ac_cs_awk_pipe_fini='END { print "|#_!!_#|"; print ":" }'
+fi
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$tmp/subs1.awk" &&
+_ACEOF
+
+# Create commands to substitute file output variables.
+{
+ echo "cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1" &&
+ echo 'cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&' &&
+ echo "$ac_subst_files" | sed 's/.*/F["&"]="$&"/' &&
+ echo "_ACAWK" &&
+ echo "_ACEOF"
+} >conf$$files.sh &&
+. ./conf$$files.sh ||
+ as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+rm -f conf$$files.sh
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\).*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\).*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+ \$ac_cs_awk_pipe_init
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+ if (nfields == 3 && !substed) {
+ key = field[2]
+ if (F[key] != "" && line ~ /^[ ]*@.*@[ ]*$/) {
+ \$ac_cs_awk_read_file
+ next
+ }
+ }
+ print line
+}
+\$ac_cs_awk_pipe_fini
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+ || as_fn_error "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=/{
+s/:*\$(srcdir):*/:/
+s/:*\${srcdir}:*/:/
+s/:*@srcdir@:*/:/
+s/^\([^=]*=[ ]*\):*/\1/
+s/:*$//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+ ac_t=`sed -n "/$ac_delim/p" confdefs.h`
+ if test -z "$ac_t"; then
+ break
+ elif $ac_last_try; then
+ as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any. Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[ ]*#[ ]*define[ ][ ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ for (key in D) D_is_set[key] = 1
+ FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+ line = \$ 0
+ split(line, arg, " ")
+ if (arg[1] == "#") {
+ defundef = arg[2]
+ mac1 = arg[3]
+ } else {
+ defundef = substr(arg[1], 2)
+ mac1 = arg[2]
+ }
+ split(mac1, mac2, "(") #)
+ macro = mac2[1]
+ prefix = substr(line, 1, index(line, defundef) - 1)
+ if (D_is_set[macro]) {
+ # Preserve the white space surrounding the "#".
+ print prefix "define", macro P[macro] D[macro]
+ next
+ } else {
+ # Replace #undef with comments. This is necessary, for example,
+ # in the case of _POSIX_SOURCE, which is predefined and required
+ # on some systems where configure will not decide to define it.
+ if (defundef == "undef") {
+ print "/*", prefix defundef, macro, "*/"
+ next
+ }
+ }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ as_fn_error "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ esac
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ as_fn_append ac_file_inputs " '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`$as_echo "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$tmp/stdin" \
+ || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
+ ac_MKDIR_P=$MKDIR_P
+ case $MKDIR_P in
+ [\\/$]* | ?:[\\/]* ) ;;
+ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" |
+if $ac_cs_awk_getline; then
+ $AWK -f "$tmp/subs.awk"
+else
+ $AWK -f "$tmp/subs.awk" | $SHELL
+fi >$tmp/out \
+ || as_fn_error "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined." >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined." >&2;}
+
+ rm -f "$tmp/stdin"
+ case $ac_file in
+ -) cat "$tmp/out" && rm -f "$tmp/out";;
+ *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+ esac \
+ || as_fn_error "could not create $ac_file" "$LINENO" 5
+ ;;
+ :H)
+ #
+ # CONFIG_HEADER
+ #
+ if test x"$ac_file" != x-; then
+ {
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
+ } >"$tmp/config.h" \
+ || as_fn_error "could not create $ac_file" "$LINENO" 5
+ if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ rm -f "$ac_file"
+ mv "$tmp/config.h" "$ac_file" \
+ || as_fn_error "could not create $ac_file" "$LINENO" 5
+ fi
+ else
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+ || as_fn_error "could not create -" "$LINENO" 5
+ fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$_am_arg" : 'X\(//\)[^/]' \| \
+ X"$_am_arg" : 'X\(//\)$' \| \
+ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+ :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+ esac
+
+
+ case $ac_file$ac_mode in
+ "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+ # Autoconf 2.62 quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named `Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$mf" : 'X\(//\)[^/]' \| \
+ X"$mf" : 'X\(//\)$' \| \
+ X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running `make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n 's/^U = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$file" : 'X\(//\)[^/]' \| \
+ X"$file" : 'X\(//\)$' \| \
+ X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir=$dirpart/$fdir; as_fn_mkdir_p
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+ ;;
+ "libtool":C)
+
+ # See if we are running on zsh, and set the options which allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile="${ofile}T"
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+# Written by Gordon Matzigkeit, 1996
+#
+# This file is part of GNU Libtool.
+#
+# GNU Libtool 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.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags=""
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# An object symbol dumper.
+OBJDUMP=$lt_OBJDUMP
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking. This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ case $xsi_shell in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+# dirname: Compute the dirname of FILE. If nonempty,
+# add APPEND to the result, otherwise set result
+# to NONDIR_REPLACEMENT.
+# value returned in "$func_dirname_result"
+# basename: Compute filename of FILE.
+# value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+ func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+ # positional parameters, so assign one to ordinary parameter first.
+ func_stripname_result=${3}
+ func_stripname_result=${func_stripname_result#"${1}"}
+ func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=${1%%=*}
+ func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ case ${1} in
+ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+ *) func_lo2o_result=${1} ;;
+ esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+ func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+ func_arith_result=$(( $* ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+ func_len_result=${#1}
+}
+
+_LT_EOF
+ ;;
+ *) # Bourne compatible functions.
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ # Extract subdirectory from the argument.
+ func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+ if test "X$func_dirname_result" = "X${1}"; then
+ func_dirname_result="${3}"
+ else
+ func_dirname_result="$func_dirname_result${2}"
+ fi
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+}
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+ case ${2} in
+ .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+ *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+ esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[^=]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
+ func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+ func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+ func_arith_result=`expr "$@"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+ func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$1+=\$2"
+}
+_LT_EOF
+ ;;
+ *)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$1=\$$1\$2"
+}
+
+_LT_EOF
+ ;;
+ esac
+
+
+ sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+ ;;
+ "default-1":C)
+ for ac_file in $CONFIG_FILES; do
+ # Support "outfile[:infile[:infile...]]"
+ case "$ac_file" in
+ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ esac
+ # PO directories have a Makefile.in generated from Makefile.in.in.
+ case "$ac_file" in */Makefile.in)
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'`
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+ rm -f "$ac_dir/POTFILES"
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+ cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+ POMAKEFILEDEPS="POTFILES.in"
+ # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend
+ # on $ac_dir but don't depend on user-specified configuration
+ # parameters.
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assigment from automake.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # The set of available languages was given in configure.in.
+ eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+ fi
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ GMOFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ done
+ fi
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+ for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+ if test -f "$f"; then
+ case "$f" in
+ *.orig | *.bak | *~) ;;
+ *) cat "$f" >> "$ac_dir/Makefile" ;;
+ esac
+ fi
+ done
+ fi
+ ;;
+ esac
+ done ;;
+
+ esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || as_fn_exit $?
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
diff --git a/binutils-2.21/ld/configure.host b/binutils-2.21/ld/configure.host
new file mode 100644
index 0000000..3e88c27
--- /dev/null
+++ b/binutils-2.21/ld/configure.host
@@ -0,0 +1,210 @@
+# This is the linker host specific file. This is invoked by the
+# autoconf generated configure script. Putting it in a separate shell
+# file lets us skip running autoconf when modifying host specific
+# information.
+
+# This file sets the following shell variables:
+# HDEFINES host specific compiler flags
+# HOSTING_CRT0 crt0.o file used for bootstrapping
+# HOSTING_LIBS libraries used for bootstrapping
+
+HDEFINES=
+HOSTING_CRT0=/lib/crt0.o
+HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ]; then libgcc=../gcc/libgcc.a; else libgcc=\`${CC} -print-libgcc-file-name\`; fi; if [ -f ../gcc/libgcc_eh.a ]; then libgcc="$$libgcc ../gcc/libgcc_eh.a"; else libgcc_eh=\`${CC} -print-file-name=libgcc_eh.a\`; if [ x"$$libgcc_eh" != xlibgcc_eh.a ]; then libgcc="$$libgcc $$libgcc_eh"; fi; fi; if [ -f ../gcc/libunwind.a ]; then libgcc="$$libgcc ../gcc/libunwind.a"; else libunwind=\`${CC} -print-file-name=libunwind.a\`; if [ x"$$libunwind" != xlibunwind.a ]; then libgcc="$$libgcc $$libunwind"; fi; fi; echo --start-group $$libgcc -lc --end-group`'
+
+#
+# Generic configurations:
+#
+
+case "${host}" in
+
+*-*-freebsd* | *-*-kfreebsd*-gnu | *-*-dragonfly*)
+ HOSTING_CRT0='-dynamic-linker `[ -f \`${CC} --print-prog-name=ld-elf.so.1\` ] || echo /usr/libexec/``${CC} --print-prog-name=ld-elf.so.1` `${CC} --print-file-name=crt1.o` `${CC} --print-file-name=crti.o` `${CC} --print-file-name=crtbegin.o`'
+ HOSTING_LIBS='-L`dirname \`${CC} --print-file-name=libc.so\`` '"$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} --print-file-name=crtend.o; fi` `${CC} --print-file-name=crtn.o`'
+ ;;
+
+*-*-linux*aout* | *-*-linux*oldld)
+ HOSTING_CRT0=/usr/lib/crt0.o
+ ;;
+
+*-*-linux*libc1*)
+ HOSTING_CRT0='-dynamic-linker /lib/ld-linux.so.1 /usr/lib/crt1.o /usr/lib/crti.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; elif [ -f /usr/lib/crtbegin.o ]; then echo /usr/lib/crtbegin.o; else ${CC} --print-file-name=crtbegin.o; fi`'
+ HOSTING_LIBS="$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; elif [ -f /usr/lib/crtend.o ]; then echo /usr/lib/crtend.o; else ${CC} --print-file-name=crtend.o; fi` /usr/lib/crtn.o'
+ ;;
+
+*-*-linux*)
+ HOSTING_CRT0='-dynamic-linker `${CC} --help --verbose 2>&1 | egrep "ld[^ ]*\.so" | sed -e "s,.*-dynamic-linker[ ][ ]*\(.*/ld[^ ]*\.so..\).*,\1,"` `${CC} --print-file-name=crt1.o` `${CC} --print-file-name=crti.o` `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else ${CC} --print-file-name=crtbegin.o; fi`'
+ HOSTING_LIBS='-L`dirname \`${CC} --print-file-name=libc.so\`` '"$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} --print-file-name=crtend.o; fi` `${CC} --print-file-name=crtn.o`'
+ ;;
+
+*-*-netbsd*)
+ # Different versions of NetBSD with the ELF object format use different
+ # sets of start/end files.
+ HOSTING_CRT0='-dynamic-linker /usr/libexec/ld.elf_so /usr/lib/crt0.o'
+ if [ -f `${CC} --print-file-name=crti.o` ]; then
+ # Support for GCC's crtstuff present.
+ HOSTING_CRT0="$HOSTING_CRT0 `${CC} --print-file-name=crti.o`"
+ if [ -f ../gcc/crtbegin.o ]; then
+ HOSTING_CRT0="$HOSTING_CRT0 ../gcc/crtbegin.o"
+ else
+ HOSTING_CRT0="$HOSTING_CRT0 `${CC} --print-file-name=crtbegin.o`"
+ fi
+ else
+ # Support for GCC's crtstuff not present.
+ HOSTING_CRT0="$HOSTING_CRT0 `${CC} --print-file-name=crtbegin.o`"
+ fi
+ if [ -f `${CC} --print-file-name=crtn.o` ]; then
+ # Support for GCC's crtstuff present.
+ if [ -f ../gcc/crtbegin.o ]; then
+ HOSTING_LIBS="$HOSTING_LIBS ../gcc/crtend.o"
+ else
+ HOSTING_LIBS="$HOSTING_LIBS `${CC} --print-file-name=crtend.o`"
+ fi
+ HOSTING_LIBS="$HOSTING_LIBS `${CC} --print-file-name=crtn.o`"
+ else
+ # Support for GCC's crtstuff not present.
+ HOSTING_LIBS="$HOSTING_LIBS `${CC} --print-file-name=crtend.o`"
+ fi
+ ;;
+
+*-*-openbsd*)
+ HOSTING_CRT0="-dynamic-linker /usr/libexec/ld.so /usr/lib/crt0.o"
+ HOSTING_CRT0="$HOSTING_CRT0 /usr/lib/crtbegin.o"
+ HOSTING_LIBS="$HOSTING_LIBS /usr/lib/crtend.o"
+ ;;
+
+esac
+
+#
+# Now more specific configurations
+#
+
+case "${host}" in
+
+*-*-linux*aout* | *-*-linux*oldld | *-*-linux*libc1*)
+ # No further tweaking needed
+ ;;
+
+arm*-*-linux-*)
+ HOSTING_CRT0='-p '"$HOSTING_CRT0"
+ ;;
+
+hppa*64*-*-hpux11*)
+ HOSTING_CRT0=/usr/ccs/lib/pa20_64/crt0.o
+ # Even if CC is not gcc, the tests use gcc.
+ HOSTING_LIBS='--start-group `if [ -f ../gcc/libgcc.a ]; then echo ../gcc/libgcc.a; else if test "$GCC" = yes; then ${CC} --print-libgcc-file-name; else gcc --print-libgcc-file-name; fi fi` -lc --end-group /usr/lib/pa20_64/milli.a'
+ ;;
+
+i[3-7]86-*-bsd* | i[3-7]86-*-freebsd[12] | i[3-7]86-*-freebsd[12]\.* | i[3-7]86-*-freebsd*aout*)
+ HOSTING_CRT0=/usr/lib/crt0.o
+ ;;
+
+i[3-7]86-*-sysv4*)
+ HOSTING_CRT0='/usr/ccs/lib/crt1.o /usr/ccs/lib/crti.o /usr/ccs/lib/values-Xa.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else ${CC} -print-file-name=crtbegin.o; fi`'
+ HOSTING_LIBS="$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} -print-file-name=crtend.o; fi` /usr/ccs/lib/crtn.o'
+ ;;
+
+i[3-7]86-sequent-ptx* | i[3-7]86-sequent-sysv*)
+ HOSTING_CRT0='/lib/crt0.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else ${CC} -print-file-name=crtbegin.o; fi`'
+ HOSTING_LIBS="$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} -print-file-name=crtend.o; fi`'
+ ;;
+
+i[3-7]86-*-sysv*)
+ HOSTING_CRT0='/lib/crt1.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; fi`'
+ HOSTING_LIBS="$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; fi` /lib/crtn.o'
+ ;;
+
+i[3-7]86-*-solaris*)
+ HOSTING_CRT0='`if [ -f ../gcc/crt1.o ]; then echo ../gcc/crt1.o; else ${CC} -print-file-name=crt1.o; fi` `if [ -f ../gcc/crti.o ]; then echo ../gcc/crti.o; else ${CC} -print-file-name=crti.o; fi` /usr/ccs/lib/values-Xa.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else ${CC} -print-file-name=crtbegin.o; fi`'
+ HOSTING_LIBS="$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} -print-file-name=crtend.o; fi` `if [ -f ../gcc/crtn.o ]; then echo ../gcc/crtn.o; else ${CC} -print-file-name=crtn.o; fi`'
+ ;;
+
+i[3-7]86-*-sco* | i[3-7]86-*-isc*)
+ # In some configurations gcc does not use crtbegin.o and crtend.o.
+ # In that case gcc -print-file-name=crtbegin.o will simply print
+ # crtbegin.o. We create dummy crtbegin.o and crtend.o files to
+ # handle this.
+ echo "int dummy_crtbegin () { return 0; }" > crtbegin.c
+ ${CC} -c crtbegin.c -o crtbegin.o
+ rm -f crtbegin.c
+ echo "int dummy_crteng () { return 0; }" > crtend.c
+ ${CC} -c crtend.c -o crtend.o
+ rm -f crtend.c
+ HOSTING_CRT0='/lib/crt1.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else ${CC} -print-file-name=crtbegin.o; fi`'
+ HOSTING_LIBS="$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} -print-file-name=crtend.o; fi` /lib/crtn.o'
+ ;;
+
+i[3-7]86-pc-interix*)
+ HOSTING_CRT0='$$INTERIX_ROOT/usr/lib/crt0.o'
+ HOSTING_LIBS='-L $$X/local_bin -L $$INTERIX_ROOT/usr/lib '"$HOSTING_LIBS"' -lcpsx -lc -lcpsx $$INTERIX_ROOT/usr/lib/psxdll.a $$INTERIX_ROOT/usr/lib/psxdll2.a'
+ ;;
+
+i[3-7]86-*-cygwin*)
+ HOSTING_LIBS="$HOSTING_LIBS"' -lcygwin -L/usr/lib/w32api -luser32 -lkernel32 -ladvapi32 -lshell32 `if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else ${CC} -print-libgcc-file-name; fi`'
+ ;;
+
+i[3-7]86-*-mingw*)
+ #We only support msvcrt.dll, crtid == 2.
+ HOSTING_CRT0='/mingw/lib/crt2.o'
+ HOSTING_LIBS='-L/mingw/lib -lmingw32 -lmoldname -lmingwex -lmsvcrt -luser32 -lkernel32 -ladvapi32 -lshell32 -lmingw32 -lmoldname -lmingwex -lmsvcrt `if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else ${CC} -print-libgcc-file-name; fi`'
+ ;;
+
+mips*-sgi-irix4* | mips*-sgi-irix5*)
+ HOSTING_CRT0=/usr/lib/crt1.o
+ HOSTING_LIBS="$HOSTING_LIBS"' /usr/lib/crtn.o'
+ ;;
+
+mips*-sgi-irix6*)
+ HOSTING_CRT0='/usr/lib32/crt1.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o ; else ${CC} -print-file-name=crtbegin.o; fi`'
+ HOSTING_LIBS='-L/usr/lib32 '"$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o ; else ${CC} -print-file-name=crtend.o; fi` /usr/lib32/crtn.o -init __do_global_ctors -fini __do_global_dtors'
+ ;;
+
+m68*-motorola-sysv)
+ HOSTING_CRT0='`if [ -f ../gcc/crt0.o ]; then echo ../gcc/crt0.o; elif [ -f \`${CC} -print-file-name=\`crt0.o ]; then echo \`${CC} -print-file-name=\`crt0.o; else echo /lib/crt0.o; fi`'
+ HOSTING_LIBS=`sed -e 's,-lc,-lc881,' <<EOF
+$HOSTING_LIBS
+EOF`
+ ;;
+
+m68*-sun-*)
+ HOSTING_CRT0='/usr/lib/crt0.o /usr/lib/Fcrt1.o -L/usr/lib/fsoft.o'
+ ;;
+
+m88*-*-dgux*)
+ HDEFINES=-D__using_DGUX
+ HOSTING_CRT0='/lib/crt0.o -X'
+ HOSTING_LIBS=/usr/sde/m88kbcs/lib/libc.a
+ ;;
+
+m88*-motorola-sysv3)
+ HOSTING_CRT0='/lib/crt0.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else ${CC} -print-file-name=crtbegin.o; fi`'
+ HOSTING_LIBS="$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} -print-file-name=crtend.o; fi`'
+ ;;
+
+sparc-*-solaris2*)
+ HOSTING_CRT0='`if [ -f ../gcc/crt1.o ]; then echo ../gcc/crt1.o; else ${CC} -print-file-name=crt1.o; fi` `if [ -f ../gcc/crti.o ]; then echo ../gcc/crti.o; else ${CC} -print-file-name=crti.o; fi` /usr/ccs/lib/values-Xa.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else ${CC} -print-file-name=crtbegin.o; fi`'
+ HOSTING_LIBS="$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} -print-file-name=crtend.o; fi` `if [ -f ../gcc/crtn.o ]; then echo ../gcc/crtn.o; else ${CC} -print-file-name=crtn.o; fi`'
+ ;;
+
+sparc64-*-solaris2* | sparcv9-*-solaris2*)
+ HOSTING_CRT0='`if [ -f ../gcc/crt1.o ]; then echo ../gcc/crt1.o; else ${CC} -print-file-name=crt1.o; fi` `if [ -f ../gcc/crti.o ]; then echo ../gcc/crti.o; else ${CC} -print-file-name=crti.o; fi` /usr/ccs/lib/sparcv9/values-Xa.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else ${CC} -print-file-name=crtbegin.o; fi`'
+ HOSTING_LIBS="$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} -print-file-name=crtend.o; fi` `if [ -f ../gcc/crtn.o ]; then echo ../gcc/crtn.o; else ${CC} -print-file-name=crtn.o; fi`'
+ ;;
+
+*-*-freebsd* | *-*-kfreebsd*-gnu | *-*-dragonfly*)
+ ;;
+
+*-*-linux*)
+ ;;
+
+*-*-netbsd*)
+ ;;
+
+*-*-openbsd*)
+ ;;
+
+alpha*-*-*)
+ HOSTING_CRT0=/usr/ccs/lib/crt0.o
+ ;;
+
+esac
diff --git a/binutils-2.21/ld/configure.in b/binutils-2.21/ld/configure.in
new file mode 100644
index 0000000..85fe903
--- /dev/null
+++ b/binutils-2.21/ld/configure.in
@@ -0,0 +1,351 @@
+dnl Process this file with autoconf to produce a configure script
+dnl
+AC_PREREQ(2.59)
+AC_INIT
+AC_CONFIG_SRCDIR(ldmain.c)
+
+AC_CANONICAL_TARGET
+AC_ISC_POSIX
+
+changequote(,)dnl
+BFD_VERSION=`sed -n -e 's/^.._INIT_AUTOMAKE.*,[ ]*\([^ ]*\)[ ]*).*/\1/p' < ${srcdir}/../bfd/configure.in`
+changequote([,])dnl
+AM_INIT_AUTOMAKE(ld, ${BFD_VERSION})
+AM_MAINTAINER_MODE
+
+AC_ARG_WITH(lib-path, [ --with-lib-path=dir1:dir2... set default LIB_PATH],LIB_PATH=$withval)
+AC_ARG_ENABLE(targets,
+[ --enable-targets alternative target configurations],
+[case "${enableval}" in
+ yes | "") AC_MSG_ERROR(enable-targets option must specify target names or 'all')
+ ;;
+ no) enable_targets= ;;
+ *) enable_targets=$enableval ;;
+esac])dnl
+AC_ARG_ENABLE(64-bit-bfd,
+[ --enable-64-bit-bfd 64-bit support (on hosts with narrower word sizes)],
+[case "${enableval}" in
+ yes) want64=true ;;
+ no) want64=false ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for 64-bit-bfd option) ;;
+esac],[want64=false])dnl
+
+AC_ARG_WITH(sysroot,
+[ --with-sysroot[=DIR] Search for usr/lib et al within DIR.],
+[
+ case ${with_sysroot} in
+ yes) TARGET_SYSTEM_ROOT='${exec_prefix}/${target_alias}/sys-root' ;;
+ *) TARGET_SYSTEM_ROOT=$with_sysroot ;;
+ esac
+
+ TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
+ use_sysroot=yes
+
+ if test "x$prefix" = xNONE; then
+ test_prefix=/usr/local
+ else
+ test_prefix=$prefix
+ fi
+ if test "x$exec_prefix" = xNONE; then
+ test_exec_prefix=$test_prefix
+ else
+ test_exec_prefix=$exec_prefix
+ fi
+ case ${TARGET_SYSTEM_ROOT} in
+ "${test_prefix}"|"${test_prefix}/"*|\
+ "${test_exec_prefix}"|"${test_exec_prefix}/"*|\
+ '${prefix}'|'${prefix}/'*|\
+ '${exec_prefix}'|'${exec_prefix}/'*)
+ t="$TARGET_SYSTEM_ROOT_DEFINE -DTARGET_SYSTEM_ROOT_RELOCATABLE"
+ TARGET_SYSTEM_ROOT_DEFINE="$t"
+ ;;
+ esac
+], [
+ use_sysroot=no
+ TARGET_SYSTEM_ROOT=
+ TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"\"'
+])
+AC_SUBST(use_sysroot)
+AC_SUBST(TARGET_SYSTEM_ROOT)
+AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE)
+
+dnl Use --enable-gold to decide if this linker should be the default.
+dnl "install_as_default" is set to false if gold is the default linker.
+dnl "installed_linker" is the installed BFD linker name.
+AC_ARG_ENABLE(gold,
+[[ --enable-gold[=ARG] build gold [ARG={default,yes,no}]]],
+[case "${enableval}" in
+ default)
+ install_as_default=no
+ installed_linker=ld.bfd
+ ;;
+ yes|no)
+ install_as_default=yes
+ installed_linker=ld.bfd
+ ;;
+ *)
+ AC_MSG_ERROR([invalid --enable-gold argument])
+ ;;
+ esac],
+[install_as_default=yes
+ installed_linker=ld.bfd])
+AC_SUBST(install_as_default)
+AC_SUBST(installed_linker)
+
+AC_ARG_ENABLE([got],
+AS_HELP_STRING([--enable-got=<type>],
+ [GOT handling scheme (target, single, negative, multigot)]),
+[case "${enableval}" in
+ target | single | negative | multigot) got_handling=$enableval ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for --enable-got option) ;;
+esac],
+[got_handling=target])
+
+case "${got_handling}" in
+ target)
+ AC_DEFINE([GOT_HANDLING_DEFAULT], [GOT_HANDLING_TARGET_DEFAULT],
+ [Define to choose default GOT handling scheme]) ;;
+ single)
+ AC_DEFINE([GOT_HANDLING_DEFAULT], [GOT_HANDLING_SINGLE],
+ [Define to choose default GOT handling scheme]) ;;
+ negative)
+ AC_DEFINE([GOT_HANDLING_DEFAULT], [GOT_HANDLING_NEGATIVE],
+ [Define to choose default GOT handling scheme]) ;;
+ multigot)
+ AC_DEFINE([GOT_HANDLING_DEFAULT], [GOT_HANDLING_MULTIGOT],
+ [Define to choose default GOT handling scheme]) ;;
+ *) AC_MSG_ERROR(bad value ${got_handling} for --enable-got option) ;;
+esac
+
+AM_BINUTILS_WARNINGS
+
+AC_CONFIG_HEADERS([config.h:config.in])
+
+if test -z "$target" ; then
+ AC_MSG_ERROR(Unrecognized target system type; please check config.sub.)
+fi
+if test -z "$host" ; then
+ AC_MSG_ERROR(Unrecognized host system type; please check config.sub.)
+fi
+
+# host-specific stuff:
+
+AC_PROG_CC
+AC_GNU_SOURCE
+AC_USE_SYSTEM_EXTENSIONS
+ACX_LARGEFILE
+AC_PROG_INSTALL
+
+LT_INIT
+
+ALL_LINGUAS="fr sv tr es da vi zh_CN zh_TW ga fi id bg"
+ZW_GNU_GETTEXT_SISTER_DIR
+AM_PO_SUBDIRS
+
+AC_EXEEXT
+
+AC_PROG_YACC
+AM_PROG_LEX
+
+AM_MAINTAINER_MODE
+AM_CONDITIONAL(GENINSRC_NEVER, false)
+ACX_PROG_CMP_IGNORE_INITIAL
+
+. ${srcdir}/configure.host
+
+AC_SUBST(HDEFINES)
+AC_SUBST(HOSTING_CRT0)
+AC_SUBST(HOSTING_LIBS)
+AC_SUBST(NATIVE_LIB_DIRS)
+
+AC_CHECK_HEADERS(string.h strings.h stdlib.h unistd.h elf-hints.h limits.h sys/param.h)
+AC_CHECK_HEADERS(fcntl.h sys/file.h sys/time.h sys/stat.h)
+AC_CHECK_FUNCS(glob mkstemp realpath sbrk waitpid)
+AC_CHECK_FUNCS(open lseek close)
+AC_HEADER_DIRENT
+
+# Check for dlopen support and enable plugins if possible.
+enable_plugins=yes
+AC_CHECK_HEADER([dlfcn.h],[],[enable_plugins=no],[AC_INCLUDES_DEFAULT])
+AC_SEARCH_LIBS([dlopen],[dl],[],[enable_plugins=no],[])
+AC_CHECK_FUNCS([dlopen dlsym dlclose],[],[enable_plugins=no])
+# We also support plugins on Windows (MinGW).
+if test x$enable_plugins = xno ; then
+ AC_CHECK_HEADERS([Windows.h],[enable_plugins=yes],[],[AC_INCLUDES_DEFAULT])
+fi
+AM_CONDITIONAL([ENABLE_PLUGINS], [test x$enable_plugins = xyes])
+
+AC_MSG_CHECKING(for a known getopt prototype in unistd.h)
+AC_CACHE_VAL(ld_cv_decl_getopt_unistd_h,
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <unistd.h>], [extern int getopt (int, char *const*, const char *);])],
+ld_cv_decl_getopt_unistd_h=yes, ld_cv_decl_getopt_unistd_h=no)])
+AC_MSG_RESULT($ld_cv_decl_getopt_unistd_h)
+if test $ld_cv_decl_getopt_unistd_h = yes; then
+ AC_DEFINE([HAVE_DECL_GETOPT], 1,
+ [Is the prototype for getopt in <unistd.h> in the expected format?])
+fi
+
+BFD_BINARY_FOPEN
+
+AC_CHECK_DECLS([strstr, free, sbrk, getenv, environ])
+
+# Link in zlib if we can. This is needed only for the bootstrap tests
+# right now, since those tests use libbfd, which depends on zlib.
+AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)])
+
+# When converting linker scripts into strings for use in emulation
+# files, use astring.sed if the compiler supports ANSI string
+# concatenation, or ostring.sed otherwise. This is to support the
+# broken Microsoft MSVC compiler, which limits the length of string
+# constants, while still supporting pre-ANSI compilers which do not
+# support string concatenation.
+AC_MSG_CHECKING([whether ANSI C string concatenation works])
+AC_CACHE_VAL(ld_cv_string_concatenation,
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [char *a = "a" "a";])],
+ ld_cv_string_concatenation=yes,
+ ld_cv_string_concatenation=no)])
+AC_MSG_RESULT($ld_cv_string_concatenation)
+if test "$ld_cv_string_concatenation" = "yes"; then
+ STRINGIFY=astring.sed
+else
+ STRINGIFY=ostring.sed
+fi
+AC_SUBST(STRINGIFY)
+
+# target-specific stuff:
+
+all_targets=
+EMUL=
+all_emuls=
+all_emul_extras=
+all_libpath=
+
+dnl We need to get an arbitrary number of tdir definitions into
+dnl Makefile. We can't do it using AC_SUBST, because autoconf does
+dnl not permit literal newlines in an AC_SUBST variables. So we use a
+dnl file.
+rm -f tdirs
+
+for targ_alias in `echo $target_alias $enable_targets | sed 's/,/ /g'`
+do
+ if test "$targ_alias" = "all"; then
+ all_targets=true
+ else
+ # Canonicalize the secondary target names.
+ result=`$ac_config_sub $targ_alias 2>/dev/null`
+ if test -n "$result"; then
+ targ=$result
+ else
+ targ=$targ_alias
+ fi
+
+ . ${srcdir}/configure.tgt
+
+ if test "$targ" = "$target"; then
+ EMUL=$targ_emul
+ fi
+
+ if test x${want64} = xfalse; then
+ . ${srcdir}/../bfd/config.bfd
+ fi
+
+ if test x${want64} = xtrue; then
+ targ_extra_emuls="$targ_extra_emuls $targ64_extra_emuls"
+ targ_extra_libpath="$targ_extra_libpath $targ64_extra_libpath"
+ fi
+
+ for i in $targ_emul $targ_extra_emuls $targ_extra_libpath; do
+ case " $all_emuls " in
+ *" e${i}.o "*) ;;
+ *)
+ all_emuls="$all_emuls e${i}.o"
+ eval result=\$tdir_$i
+ test -z "$result" && result=$targ_alias
+ echo tdir_$i=$result >> tdirs
+ ;;
+ esac
+ done
+
+ for i in $targ_emul $targ_extra_libpath; do
+ case " $all_libpath " in
+ *" ${i} "*) ;;
+ *)
+ if test -z "$all_libpath"; then
+ all_libpath=${i}
+ else
+ all_libpath="$all_libpath ${i}"
+ fi
+ ;;
+ esac
+ done
+
+ for i in $targ_extra_ofiles; do
+ case " $all_emul_extras " in
+ *" ${i} "*) ;;
+ *)
+ all_emul_extras="$all_emul_extras ${i}"
+ ;;
+ esac
+ done
+ fi
+done
+
+AC_SUBST(EMUL)
+
+TDIRS=tdirs
+AC_SUBST_FILE(TDIRS)
+
+if test x${all_targets} = xtrue; then
+ if test x${want64} = xfalse; then
+ AC_CHECK_SIZEOF(long)
+ if test "x${ac_cv_sizeof_long}" = "x8"; then
+ want64=true
+ fi
+ fi
+ if test x${want64} = xtrue; then
+ EMULATION_OFILES='$(ALL_EMULATIONS) $(ALL_64_EMULATIONS)'
+ else
+ EMULATION_OFILES='$(ALL_EMULATIONS)'
+ fi
+ EMUL_EXTRA_OFILES='$(ALL_EMUL_EXTRA_OFILES)'
+else
+ EMULATION_OFILES=$all_emuls
+ EMUL_EXTRA_OFILES=$all_emul_extras
+fi
+AC_SUBST(EMULATION_OFILES)
+AC_SUBST(EMUL_EXTRA_OFILES)
+AC_SUBST(LIB_PATH)
+
+EMULATION_LIBPATH=$all_libpath
+AC_SUBST(EMULATION_LIBPATH)
+
+if test x${enable_static} = xno; then
+ TESTBFDLIB="--rpath ../bfd/.libs ../bfd/.libs/libbfd.so"
+else
+ TESTBFDLIB="../bfd/.libs/libbfd.a"
+fi
+AC_SUBST(TESTBFDLIB)
+
+target_vendor=${target_vendor=$host_vendor}
+case "$target_vendor" in
+ hp) EXTRA_SHLIB_EXTENSION=".sl" ;;
+ *) EXTRA_SHLIB_EXTENSION= ;;
+esac
+
+case "$target_os" in
+ lynxos) EXTRA_SHLIB_EXTENSION=".a" ;;
+esac
+
+if test x${EXTRA_SHLIB_EXTENSION} != x ; then
+ AC_DEFINE_UNQUOTED(EXTRA_SHLIB_EXTENSION, "$EXTRA_SHLIB_EXTENSION",
+ [Additional extension a shared object might have.])
+fi
+
+dnl Required by html, pdf, install-pdf and install-html
+AC_SUBST(datarootdir)
+AC_SUBST(docdir)
+AC_SUBST(htmldir)
+AC_SUBST(pdfdir)
+
+AC_CONFIG_FILES(Makefile po/Makefile.in:po/Make-in)
+AC_OUTPUT
diff --git a/binutils-2.21/ld/configure.tgt b/binutils-2.21/ld/configure.tgt
new file mode 100644
index 0000000..4e90739
--- /dev/null
+++ b/binutils-2.21/ld/configure.tgt
@@ -0,0 +1,719 @@
+# This is the linker target specific file. This is invoked by the
+# autoconf generated configure script. Putting it in a separate shell
+# file lets us skip running autoconf when modifying target specific
+# information.
+
+# This file switches on the shell variable ${targ}, and sets the
+# following shell variables:
+# targ_emul name of linker emulation to use
+# targ_extra_emuls additional linker emulations to provide
+# targ_extra_libpath additional linker emulations using LIB_PATH
+# targ_extra_ofiles additional objects needed by the emulation
+# targ64_extra_emuls additional linker emulations to provide if
+# --enable-64-bit-bfd is given or if host is 64 bit.
+# targ64_extra_libpath additional linker emulations using LIB_PATH if
+# --enable-64-bit-bfd is given or if host is 64 bit.
+# NATIVE_LIB_DIRS library directories to search on this host
+# (if we are a native or sysrooted linker)
+
+targ_extra_emuls=
+targ_extra_libpath=
+targ_extra_ofiles=
+targ64_extra_emuls=
+targ64_extra_libpath=
+
+# Please try to keep this table in alphabetic order - it makes it
+# much easier to lookup a specific archictecture. Naturally any
+# architecture variants should be kept together even if their names
+# break the alpha sorting.
+case "${targ}" in
+alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ targ_emul=elf64alpha_fbsd
+ targ_extra_emuls="elf64alpha alpha"
+ tdir_alpha=`echo ${targ_alias} | sed -e 's/freebsd/freebsdecoff/'` ;;
+alpha*-*-linuxecoff*) targ_emul=alpha targ_extra_emuls=elf64alpha
+ tdir_elf64alpha=`echo ${targ_alias} | sed -e 's/ecoff//'` ;;
+alpha*-*-linux-*) targ_emul=elf64alpha targ_extra_emuls=alpha
+ tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'` ;;
+alpha*-*-osf*) targ_emul=alpha ;;
+alpha*-*-gnu*) targ_emul=elf64alpha ;;
+alpha*-*-netware*) targ_emul=alpha ;;
+alpha*-*-netbsd*) targ_emul=elf64alpha_nbsd ;;
+alpha*-*-openbsd*) targ_emul=elf64alpha ;;
+alpha*-*-*vms*) targ_emul=alphavms
+ ;;
+arc-*-elf*) targ_emul=arcelf
+ ;;
+arm-epoc-pe) targ_emul=arm_epoc_pe ; targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+arm*-*-cegcc*) targ_emul=arm_wince_pe ; targ_extra_ofiles="deffilep.o pe-dll.o"
+ LIB_PATH='${tooldir}/lib/w32api' ;;
+arm-wince-pe | arm-*-wince | arm*-*-mingw32ce*)
+ targ_emul=arm_wince_pe ; targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+arm-*-pe) targ_emul=armpe ; targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+arm-*-aout | armel-*-aout) targ_emul=armaoutl ;;
+armeb-*-aout) targ_emul=armaoutb ;;
+arm-*-coff) targ_emul=armcoff ;;
+arm-*-freebsd* | arm-*-kfreebsd*-gnu)
+ targ_emul=armelf_fbsd
+ targ_extra_emuls="armelf" ;;
+armeb-*-netbsdelf*) targ_emul=armelfb_nbsd;
+ targ_extra_emuls="armelf_nbsd armelf armnbsd" ;;
+arm-*-netbsdelf*) targ_emul=armelf_nbsd;
+ targ_extra_emuls="armelfb_nbsd armelf armnbsd" ;;
+arm-*-netbsd*) targ_emul=armnbsd;
+ targ_extra_emuls="armelf armelf_nbsd armelfb_nbsd" ;;
+arm-*-nto*) targ_emul=armnto ;;
+arm-*-openbsd*) targ_emul=armnbsd ;;
+arm-*-rtems*) targ_emul=armelf ;;
+armeb-*-elf) targ_emul=armelfb ;;
+arm-*-elf | arm*-*-eabi*)
+ targ_emul=armelf ;;
+arm*-*-symbianelf*) targ_emul=armsymbian;;
+arm-*-kaos*) targ_emul=armelf ;;
+arm9e-*-elf) targ_emul=armelf ;;
+arm*b-*-linux-*eabi) targ_emul=armelfb_linux_eabi
+ targ_extra_emuls=armelf_linux_eabi
+ targ_extra_libpath=$targ_extra_emuls
+ ;;
+arm*b-*-linux-*) targ_emul=armelfb_linux
+ targ_extra_emuls="armelfb armelf armelf_linux"
+ targ_extra_libpath="armelf_linux"
+ ;;
+arm*-*-linux-*eabi) targ_emul=armelf_linux_eabi
+ targ_extra_emuls=armelfb_linux_eabi
+ targ_extra_libpath=$targ_extra_emuls
+ ;;
+arm*-*-linux-*) targ_emul=armelf_linux
+ targ_extra_emuls="armelf armelfb armelfb_linux"
+ targ_extra_libpath="armelfb_linux"
+ ;;
+arm*-*-uclinux*eabi) targ_emul=armelf_linux_eabi
+ targ_extra_emuls=armelfb_linux_eabi
+ targ_extra_libpath=$targ_extra_emuls
+ ;;
+arm*-*-uclinux*) targ_emul=armelf_linux
+ targ_extra_emuls="armelf armelfb armelfb_linux"
+ targ_extra_libpath="armelfb_linux"
+ ;;
+arm-*-vxworks) targ_emul=armelf_vxworks ;;
+arm*-*-conix*) targ_emul=armelf ;;
+thumb-*-linux-* | thumb-*-uclinux*) targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+strongarm-*-coff) targ_emul=armcoff ;;
+strongarm-*-elf) targ_emul=armelf ;;
+strongarm-*-kaos*) targ_emul=armelf ;;
+thumb-*-coff) targ_emul=armcoff ;;
+thumb-*-elf) targ_emul=armelf ;;
+thumb-epoc-pe) targ_emul=arm_epoc_pe ;
+ targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+thumb-*-pe) targ_emul=armpe ;
+ targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+xscale-*-coff) targ_emul=armcoff ;;
+xscale-*-elf) targ_emul=armelf
+ ;;
+avr-*-*) targ_emul=avr2
+ targ_extra_emuls="avr1 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6"
+ ;;
+bfin-*-elf) targ_emul=elf32bfin;
+ targ_extra_emuls="elf32bfinfd"
+ targ_extra_libpath=$targ_extra_emuls
+ ;;
+bfin-*-rtems*) targ_emul=elf32bfin;
+ targ_extra_emuls="elf32bfinfd"
+ targ_extra_libpath=$targ_extra_emuls
+ ;;
+bfin-*-uclinux*) targ_emul=elf32bfin;
+ targ_extra_emuls="elf32bfinfd"
+ targ_extra_libpath=$targ_extra_emuls
+ ;;
+bfin-*-linux-uclibc*) targ_emul=elf32bfinfd;
+ targ_extra_emuls="elf32bfin"
+ targ_extra_libpath=$targ_extra_emuls
+ ;;
+cr16-*-elf*) targ_emul=elf32cr16 ;;
+cr16c-*-elf*) targ_emul=elf32cr16c
+ ;;
+cris-*-*aout*) targ_emul=crisaout
+ targ_extra_emuls="criself crislinux"
+ targ_extra_libpath=$targ_extra_emuls ;;
+cris-*-linux-* | crisv32-*-linux-*)
+ targ_emul=crislinux ;;
+cris-*-* | crisv32-*-*) targ_emul=criself
+ targ_extra_emuls="crisaout crislinux"
+ targ_extra_libpath=$targ_extra_emuls
+ ;;
+crx-*-elf*) targ_emul=elf32crx
+ ;;
+d10v-*-*) targ_emul=d10velf ;;
+d30v-*-*ext*) targ_emul=d30v_e; targ_extra_emuls="d30velf d30v_o" ;;
+d30v-*-*onchip*) targ_emul=d30v_o; targ_extra_emuls="d30velf d30v_e" ;;
+d30v-*-*) targ_emul=d30velf; targ_extra_emuls="d30v_e d30v_o"
+ ;;
+dlx-*-elf*) targ_emul=elf32_dlx
+ ;;
+fido*-*-elf*) targ_emul=m68kelf ;;
+fr30-*-*) targ_emul=elf32fr30
+ ;;
+frv-*-*linux*) targ_emul=elf32frvfd ;;
+frv-*-*) targ_emul=elf32frv ; targ_extra_emuls="elf32frvfd"
+ ;;
+moxie-*-*) targ_emul=elf32moxie
+ ;;
+h8300-*-hms* | h8300-*-coff* | h8300-*-rtemscoff*)
+ targ_emul=h8300; targ_extra_emuls="h8300h h8300s h8300hn h8300sn h8300sx h8300sxn" ;;
+h8300-*-elf* | h8300-*-rtems*)
+ targ_emul=h8300elf;
+ targ_extra_emuls="h8300helf h8300self h8300hnelf h8300snelf h8300sxelf h8300sxnelf" ;;
+h8500-*-hms* | h8500-*-coff* | h8500-*-rtems*)
+ targ_emul=h8500
+ targ_extra_emuls="h8500s h8500b h8500m h8500c"
+ ;;
+hppa*64*-*-linux-*) targ_emul=hppa64linux ;;
+hppa*64*-hpux*) targ_emul=elf64hppa ;;
+hppa*-*-linux-*) targ_emul=hppalinux ;;
+hppa*-*-*elf*) targ_emul=hppaelf ;;
+hppa*-*-lites*) targ_emul=hppaelf ;;
+hppa*-*-netbsd*) targ_emul=hppanbsd ;;
+hppa*-*-openbsd*) targ_emul=hppaobsd
+ ;;
+i370-*-elf* | i370-*-linux-*) targ_emul=elf32i370
+ ;;
+i[3-7]86-*-nto-qnx*) targ_emul=i386nto ;;
+i[3-7]86-*-vsta) targ_emul=vsta ;;
+i[3-7]86-*-go32) targ_emul=i386go32 ;;
+i[3-7]86-*-msdosdjgpp*) targ_emul=i386go32 ;;
+i[3-7]86-*-aix*) targ_emul=i386coff ;;
+i[3-7]86-*-sco*) targ_emul=i386coff ;;
+i[3-7]86-*-isc*) targ_emul=i386coff ;;
+i[3-7]86-*-lynxos*) targ_emul=i386lynx ;;
+i[3-7]86-*-coff) targ_emul=i386coff ;;
+i[3-7]86-*-rtems*) targ_emul=elf_i386 ;;
+i[3-7]86-*-aros*) targ_emul=elf_i386 ;;
+i[3-7]86-*-rdos*) targ_emul=elf_i386 ;;
+i[3-7]86-*-bsd) targ_emul=i386bsd ;;
+i[3-7]86-*-bsd386) targ_emul=i386bsd ;;
+i[3-7]86-*-bsdi*) targ_emul=i386bsd ;;
+i[3-7]86-*-aout) targ_emul=i386aout ;;
+i[3-7]86-*-linux*aout*) targ_emul=i386linux
+ targ_extra_emuls=elf_i386
+ tdir_elf_i386=`echo ${targ_alias} | sed -e 's/aout//'` ;;
+i[3-7]86-*-linux*oldld) targ_emul=i386linux; targ_extra_emuls=elf_i386 ;;
+i[3-7]86-*-linux-*) targ_emul=elf_i386
+ targ_extra_emuls=i386linux
+ targ64_extra_emuls="elf_x86_64 elf_l1om"
+ targ64_extra_libpath=elf_x86_64
+ tdir_i386linux=${targ_alias}aout ;;
+x86_64-*-linux-*) targ_emul=elf_x86_64
+ targ_extra_emuls="elf_i386 i386linux elf_l1om"
+ targ_extra_libpath=elf_i386
+ tdir_i386linux=`echo ${targ_alias}aout | sed -e 's/x86_64/i386/'`
+ tdir_elf_i386=`echo ${targ_alias} | sed -e 's/x86_64/i386/'` ;;
+i[3-7]86-*-sysv[45]*) targ_emul=elf_i386 ;;
+i[3-7]86-*-solaris2*) targ_emul=elf_i386_sol2
+ targ_extra_emuls="elf_i386_ldso elf_i386 elf_x86_64_sol2 elf_x86_64 elf_l1om"
+ targ_extra_libpath=$targ_extra_emuls
+ ;;
+x86_64-*-solaris2*)
+ targ_emul=elf_x86_64_sol2
+ targ_extra_emuls="elf_x86_64 elf_i386_sol2 elf_i386_ldso elf_i386 elf_l1om"
+ targ_extra_libpath=elf_i386
+ tdir_elf_i386=`echo ${targ_alias} | sed -e 's/x86_64/i386/'` ;;
+i[3-7]86-*-unixware) targ_emul=elf_i386 ;;
+i[3-7]86-*-solaris*) targ_emul=elf_i386_ldso
+ targ_extra_emuls="elf_i386"
+ targ_extra_libpath=$targ_extra_emuls
+ ;;
+i[3-7]86-*-netbsdelf* | \
+i[3-7]86-*-netbsd*-gnu* | \
+i[3-7]86-*-knetbsd*-gnu)
+ targ_emul=elf_i386
+ targ_extra_emuls=i386nbsd ;;
+i[3-7]86-*-netbsdpe*) targ_emul=i386pe
+ targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+i[3-7]86-*-netbsd*) targ_emul=i386nbsd
+ targ_extra_emuls=elf_i386 ;;
+x86_64-*-netbsd*) targ_emul=elf_x86_64
+ targ_extra_emuls="elf_i386 i386nbsd elf_l1om"
+ tdir_elf_i386=`echo ${targ_alias} | \
+ sed -e 's/x86_64/i386/'`
+ case "${tdir_elf_i386}" in
+ *-netbsdelf*) ;;
+ *) tdir_elf_i386=`echo ${tdir_elf_i386} | \
+ sed -e 's/netbsd/netbsdelf/'`;;
+ esac ;;
+i[3-7]86-*-netware) targ_emul=i386nw ;;
+i[3-7]86-*-elf*) targ_emul=elf_i386 ;;
+x86_64-*-elf*) targ_emul=elf_x86_64
+ targ_extra_emuls="elf_i386 elf_l1om"
+ ;;
+i[3-7]86-*-kaos*) targ_emul=elf_i386 ;;
+i[3-7]86-*-freebsdaout* | i[3-7]86-*-freebsd[12].* | i[3-7]86-*-freebsd[12])
+ targ_emul=i386bsd ;;
+i[3-7]86-*-freebsd* | i[3-7]86-*-kfreebsd*-gnu | i[3-7]86-*-dragonfly*)
+ targ_emul=elf_i386_fbsd
+ targ_extra_emuls="elf_i386 i386bsd" ;;
+x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu)
+ targ_emul=elf_x86_64_fbsd
+ targ_extra_emuls="elf_i386_fbsd elf_x86_64 elf_i386 elf_l1om elf_l1om_fbsd"
+ targ_extra_libpath="elf_i386_fbsd"
+ tdir_elf_i386_fbsd=`echo ${targ_alias} \
+ | sed -e 's/x86_64/i386/'`
+ tdir_elf_i386=`echo ${targ_alias} \
+ | sed -e 's/x86_64/i386/'` ;;
+i[3-7]86-*-sysv*) targ_emul=i386coff ;;
+i[3-7]86-*-ptx*) targ_emul=i386coff ;;
+i[3-7]86-*-mach*) targ_emul=i386mach ;;
+i[3-7]86-*-gnu*) targ_emul=elf_i386 ;;
+i[3-7]86-*-msdos*) targ_emul=i386msdos; targ_extra_emuls=i386aout ;;
+i[3-7]86-*-moss*) targ_emul=i386moss; targ_extra_emuls=i386msdos ;;
+i[3-7]86-*-winnt*) targ_emul=i386pe ;
+ targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+i[3-7]86-*-pe) targ_emul=i386pe ;
+ targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+i[3-7]86-*-cygwin*) targ_emul=i386pe ;
+ targ_extra_ofiles="deffilep.o pe-dll.o"
+ test "$targ" != "$host" && LIB_PATH='${tooldir}/lib/w32api' ;;
+i[3-7]86-*-mingw32*) targ_emul=i386pe ;
+ targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+x86_64-*-mingw*) targ_emul=i386pep ;
+ targ_extra_emuls=i386pe
+ targ_extra_ofiles="deffilep.o pep-dll.o pe-dll.o" ;;
+i[3-7]86-*-interix*) targ_emul=i386pe_posix;
+ targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+i[3-7]86-*-beospe*) targ_emul=i386beos ;;
+i[3-7]86-*-beos*) targ_emul=elf_i386_be ;;
+i[3-7]86-*-vxworks*) targ_emul=elf_i386_vxworks ;;
+i[3-7]86-*-chaos) targ_emul=elf_i386_chaos
+ ;;
+i860-*-coff) targ_emul=coff_i860 ;;
+i860-stardent-sysv4* | i860-stardent-elf*)
+ targ_emul=elf32_i860
+ ;;
+i960-wrs-vxworks5.0*) targ_emul=gld960 ;;
+i960-wrs-vxworks5*) targ_emul=gld960coff ;;
+i960-wrs-vxworks*) targ_emul=gld960 ;;
+i960-*-coff) targ_emul=gld960coff ;;
+i960-intel-nindy) targ_emul=gld960 ;;
+i960-*-rtems*) targ_emul=gld960coff ;;
+i960-*-elf*) targ_emul=elf32_i960
+ ;;
+ia64-*-elf*) targ_emul=elf64_ia64 ;;
+ia64-*-freebsd* | ia64-*-kfreebsd*-gnu)
+ targ_emul=elf64_ia64_fbsd
+ targ_extra_emuls="elf64_ia64" ;;
+ia64-*-netbsd*) targ_emul=elf64_ia64 ;;
+ia64-*-linux*) targ_emul=elf64_ia64 ;;
+ia64-*-aix*) targ_emul=elf64_aix
+ ;;
+ip2k-*-elf) targ_emul=elf32ip2k
+ ;;
+iq2000-*-elf) targ_emul=elf32iq2000 ; targ_extra_emuls="elf32iq10"
+ ;;
+lm32-*-*linux*) targ_emul=elf32lm32fd ;;
+lm32-*-*) targ_emul=elf32lm32 ; targ_extra_emuls="elf32lm32fd"
+ ;;
+m32c-*-elf | m32c-*-rtems*)
+ targ_emul=elf32m32c
+ ;;
+m32r*le-*-elf*) targ_emul=m32rlelf ;;
+m32r*-*-elf* | m32r*-*-rtems*)
+ targ_emul=m32relf ;;
+m32r*le-*-linux-*) targ_emul=m32rlelf_linux ;;
+m32r*-*-linux-*) targ_emul=m32relf_linux
+ ;;
+m68hc11-*-*|m6811-*-*) targ_emul=m68hc11elf
+ targ_extra_emuls="m68hc11elfb m68hc12elf m68hc12elfb" ;;
+m68hc12-*-*|m6812-*-*) targ_emul=m68hc12elf
+ targ_extra_emuls="m68hc12elfb m68hc11elf m68hc11elfb" ;;
+m68*-sun-sunos[34]*) targ_emul=sun3 ;;
+m68*-wrs-vxworks*) targ_emul=sun3 ;;
+m68*-ericsson-ose) targ_emul=sun3 ;;
+m68*-apple-aux*) targ_emul=m68kaux ;;
+m68k-sony-*) targ_emul=news ;;
+m68k-hp-bsd*) targ_emul=hp300bsd ;;
+m68*-motorola-sysv*) targ_emul=delta68 ;;
+m68*-*-aout) targ_emul=m68kaout ;;
+m68*-*-coff) targ_emul=m68kcoff ;;
+m68*-*-elf) targ_emul=m68kelf ;;
+m68*-*-hpux*) targ_emul=hp3hpux ;;
+m68k-*-linux*aout*) targ_emul=m68klinux
+ targ_extra_emuls=m68kelf
+ tdir_m68kelf=`echo ${targ_alias} | sed -e 's/aout//'` ;;
+m68k-*-linux-*) targ_emul=m68kelf
+ targ_extra_emuls=m68klinux
+ tdir_m68klinux=`echo ${targ_alias} | sed -e 's/linux/linuxaout/'` ;;
+m68k-*-uclinux*) targ_emul=m68kelf ;;
+m68*-*-gnu*) targ_emul=m68kelf ;;
+m68*-*-netbsd*4k*) targ_emul=m68k4knbsd
+ targ_extra_emuls="m68knbsd m68kelfnbsd" ;;
+m68*-*-netbsdelf*) targ_emul=m68kelfnbsd
+ targ_extra_emuls="m68knbsd m68k4knbsd" ;;
+m68*-*-netbsdaout* | m68*-*-netbsd*)
+ targ_emul=m68knbsd
+ targ_extra_emuls="m68kelfnbsd m68k4knbsd" ;;
+m68*-*-psos*) targ_emul=m68kpsos ;;
+m68*-*-rtemscoff*) targ_emul=m68kcoff ;;
+m68*-*-rtems*) targ_emul=m68kelf
+ ;;
+m8*-*-*) targ_emul=m88kbcs
+ ;;
+mcore-*-pe) targ_emul=mcorepe ;
+ targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+mcore-*-elf) targ_emul=elf32mcore
+ ;;
+mep-*-elf) targ_emul=elf32mep ;;
+microblaze*-linux*)
+ targ_emul="elf32mb_linux" ;;
+microblaze*) targ_emul=elf32microblaze ;;
+mips*-*-pe) targ_emul=mipspe ;
+ targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+mips*-dec-ultrix*) targ_emul=mipslit ;;
+mips*-dec-osf*) targ_emul=mipslit ;;
+mips*-sgi-irix5*) targ_emul=elf32bsmip ;;
+mips*-sgi-irix6*) targ_emul=elf32bmipn32
+ targ_extra_emuls="elf32bsmip elf64bmip"
+ targ_extra_libpath=$targ_extra_emuls ;;
+mips*-sgi-irix*) targ_emul=mipsbig ;;
+mips*el-*-ecoff*) targ_emul=mipsidtl ;;
+mips*-*-ecoff*) targ_emul=mipsidt ;;
+mips*el-*-netbsd*) targ_emul=elf32ltsmip
+ targ_extra_emuls="elf32btsmip elf64ltsmip elf64btsmip"
+ ;;
+mips*-*-netbsd*) targ_emul=elf32btsmip
+ targ_extra_emuls="elf32ltsmip elf64btsmip elf64ltsmip"
+ ;;
+mips*-*-bsd*) targ_emul=mipsbig ;;
+mips*vr4300el-*-elf*) targ_emul=elf32l4300 ;;
+mips*vr4300-*-elf*) targ_emul=elf32b4300 ;;
+mips*vr4100el-*-elf*) targ_emul=elf32l4300 ;;
+mips*vr4100-*-elf*) targ_emul=elf32b4300 ;;
+mips*vr5000el-*-elf*) targ_emul=elf32l4300 ;;
+mips*vr5000-*-elf*) targ_emul=elf32b4300 ;;
+mips*el-sde-elf*) targ_emul=elf32ltsmip
+ targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip" ;;
+mips*-sde-elf*) targ_emul=elf32btsmip
+ targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip" ;;
+mips*el-*-elf*) targ_emul=elf32elmip ;;
+mips*-*-elf*) targ_emul=elf32ebmip ;;
+mips*-*-rtems*) targ_emul=elf32ebmip ;;
+mips*el-*-vxworks*) targ_emul=elf32elmipvxworks
+ targ_extra_emuls="elf32ebmipvxworks" ;;
+mips*-*-vxworks*) targ_emul=elf32ebmipvxworks
+ targ_extra_emuls="elf32elmipvxworks" ;;
+mips*-*-windiss) targ_emul=elf32mipswindiss ;;
+mips64*el-*-linux-*) targ_emul=elf32ltsmipn32
+ targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
+ targ_extra_libpath=$targ_extra_emuls ;;
+mips64*-*-linux-*) targ_emul=elf32btsmipn32
+ targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
+ targ_extra_libpath=$targ_extra_emuls ;;
+mips*el-*-linux-*) targ_emul=elf32ltsmip
+ targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip"
+ targ_extra_libpath=$targ_extra_emuls ;;
+mips*-*-linux-*) targ_emul=elf32btsmip
+ targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip"
+ targ_extra_libpath=$targ_extra_emuls ;;
+mips*-*-lnews*) targ_emul=mipslnews ;;
+mips*-*-sysv4*) targ_emul=elf32btsmip
+ ;;
+mmix-*-*) targ_emul=mmo
+ targ_extra_emuls=elf64mmix
+ ;;
+am34-*-linux*) targ_emul=elf32am33lin ;;
+am33_2.0-*-linux*) targ_emul=elf32am33lin ;;
+mn10200-*-*) targ_emul=mn10200 ;;
+mn10300-*-*) targ_emul=mn10300
+ ;;
+mt-*elf) targ_emul=elf32mt
+ ;;
+msp430-*-*) targ_emul=msp430x110
+ targ_extra_emuls="msp430x112 msp430x1101 msp430x1111 msp430x1121 msp430x1122 msp430x1132 msp430x122 msp430x123 msp430x1222 msp430x1232 msp430x133 msp430x135 msp430x1331 msp430x1351 msp430x147 msp430x148 msp430x149 msp430x155 msp430x156 msp430x157 msp430x167 msp430x168 msp430x169 msp430x1610 msp430x1611 msp430x1612 msp430x2101 msp430x2111 msp430x2121 msp430x2131 msp430x311 msp430x312 msp430x313 msp430x314 msp430x315 msp430x323 msp430x325 msp430x336 msp430x337 msp430x412 msp430x413 msp430x415 msp430x417 msp430xE423 msp430xE425 msp430xE427 msp430xW423 msp430xW425 msp430xW427 msp430xG437 msp430xG438 msp430xG439 msp430x435 msp430x436 msp430x437 msp430x447 msp430x448 msp430x449"
+ ;;
+ns32k-pc532-mach* | ns32k-pc532-ux*) targ_emul=pc532macha ;;
+ns32k-*-netbsd* | ns32k-pc532-lites*) targ_emul=ns32knbsd
+ ;;
+openrisc-*-*) targ_emul=elf32openrisc ;;
+or32-*-coff) targ_emul=or32 ;;
+or32-*-elf) targ_emul=or32elf ;;
+or32-*-rtems*) targ_emul=or32elf
+ ;;
+pdp11-*-*) targ_emul=pdp11
+ ;;
+pjl*-*-*) targ_emul=pjlelf ; targ_extra_emuls="elf_i386" ;;
+pj*-*-*) targ_emul=pjelf
+ ;;
+powerpc-*-freebsd* | powerpc-*-kfreebsd*-gnu)
+ targ_emul=elf32ppc_fbsd;
+ targ_extra_emuls="elf32ppc elf32ppcsim";
+ targ_extra_libpath=elf32ppc;
+ tdir_elf32ppcsim=`echo ${targ_alias} | sed -e 's/ppc/ppcsim/'` ;;
+powerpc*-*-linux*) case "${targ}" in
+ *64*) targ_emul=elf64ppc
+ targ_extra_emuls="elf32ppclinux elf32ppc elf32ppcsim"
+ targ_extra_libpath="elf32ppclinux elf32ppc"
+ tdir_elf32ppc=`echo "${targ_alias}" | sed -e 's/64//'`
+ tdir_elf32ppclinux=$tdir_elf32ppc
+ tdir_elf32ppcsim=$tdir_elf32ppc
+ ;;
+ *) targ_emul=elf32ppclinux
+ targ_extra_emuls="elf32ppc elf32ppcsim"
+ targ_extra_libpath=elf32ppc
+ targ64_extra_emuls=elf64ppc
+ targ64_extra_libpath=elf64ppc
+ ;;
+ esac ;;
+powerpc*le-*-elf* | powerpc*le-*-eabi* | powerpc*le-*-solaris* \
+ | powerpc*le-*-sysv* | powerpc*le-*-vxworks*)
+ case "${targ}" in
+ *64*) targ_emul=elf64lppc
+ targ_extra_emuls="elf32lppc elf32lppcsim"
+ tdir_elf32lppc=`echo "${targ_alias}" | sed -e 's/64//'`
+ tdir_elf32lppcsim=$tdir_elf32lppc
+ ;;
+ *) targ_emul=elf32lppc
+ targ_extra_emuls="elf32ppcsim" ;;
+ esac ;;
+powerpc*-*-elf* | powerpc*-*-eabi* | powerpc*-*-sysv* \
+ | powerpc*-*-netbsd* | powerpc-*-openbsd* | powerpc*-*-kaos*)
+ case "${targ}" in
+ *64*) targ_emul=elf64ppc
+ targ_extra_emuls="elf32ppc elf32ppclinux elf32ppcsim"
+ tdir_elf32ppc=`echo "${targ_alias}" | sed -e 's/64//'`
+ tdir_elf32ppclinux=$tdir_elf32ppc
+ tdir_elf32ppcsim=$tdir_elf32ppc
+ ;;
+ *) targ_emul=elf32ppc
+ targ_extra_emuls="elf32ppclinux elf32ppcsim" ;;
+ esac ;;
+powerpc-*-vxworks*)
+ targ_emul=elf32ppcvxworks
+ targ_extra_emuls="elf32ppc elf32ppclinux elf32ppcsim" ;;
+powerpc-*-nto*) targ_emul=elf32ppcnto ;;
+powerpcle-*-nto*) targ_emul=elf32lppcnto ;;
+powerpc-*-rtems*) targ_emul=elf32ppc ;;
+powerpc-*-macos*) targ_emul=ppcmacos ;;
+powerpc-*-netware*) targ_emul=ppcnw ;;
+powerpcle-*-pe) targ_emul=ppcpe ;;
+powerpcle-*-winnt*) targ_emul=ppcpe ;;
+powerpcle-*-cygwin*) targ_emul=ppcpe ;;
+powerpc-*-aix[5-9]*) targ_emul=aix5ppc ;;
+powerpc-*-aix*) targ_emul=aixppc ;;
+powerpc-*-beos*) targ_emul=aixppc ;;
+powerpc-*-windiss*) targ_emul=elf32ppcwindiss ;;
+powerpc-*-lynxos*) targ_emul=ppclynx ;;
+rs6000-*-aix[5-9]*) targ_emul=aix5rs6 ;;
+rs6000-*-aix*) targ_emul=aixrs6
+ ;;
+rx-*-*) targ_emul=elf32rx ;;
+s390x-*-linux*) targ_emul=elf64_s390
+ targ_extra_emuls=elf_s390
+ targ_extra_libpath=$targ_extra_emuls
+ tdir_elf_s390=`echo ${targ_alias} | sed -e 's/s390x/s390/'` ;;
+s390x-*-tpf*) targ_emul=elf64_s390
+ tdir_elf_s390=`echo ${targ_alias} | sed -e 's/s390x/s390/'` ;;
+s390-*-linux*) targ_emul=elf_s390
+ targ64_extra_emuls=elf64_s390
+ targ64_extra_libpath=elf64_s390
+ tdir_elf64_s390=`echo ${targ_alias} | sed -e 's/s390/s390x/'`
+ ;;
+score-*-elf) targ_emul=score7_elf
+ targ_extra_emuls=score3_elf ;;
+sh-*-linux*) targ_emul=shlelf_linux
+ targ_extra_emuls=shelf_linux
+ targ_extra_libpath=shelf_linux ;;
+sh64eb-*-linux*) targ_emul=shelf32_linux
+ targ_extra_emuls="shlelf32_linux" ;;
+sh64-*-linux*) targ_emul=shlelf32_linux
+ targ_extra_emuls="shelf32_linux"
+ targ_extra_libpath=shelf32_linux ;;
+sh*eb-*-linux*) targ_emul=shelf_linux ;;
+sh*-*-linux*) targ_emul=shlelf_linux ;;
+sh5le-*-netbsd*) targ_emul=shlelf32_nbsd
+ targ_extra_emuls="shelf32_nbsd shelf64_nbsd shlelf64_nbsd shelf_nbsd shlelf_nbsd" ;;
+sh5-*-netbsd*) targ_emul=shelf32_nbsd
+ targ_extra_emuls="shlelf32_nbsd shelf64_nbsd shlelf64_nbsd shelf_nbsd shlelf_nbsd" ;;
+sh64le-*-netbsd*) targ_emul=shlelf64_nbsd
+ targ_extra_emuls="shelf64_nbsd shelf32_nbsd shlelf32_nbsd shelf_nbsd shlelf_nbsd" ;;
+sh64-*-netbsd*) targ_emul=shelf64_nbsd
+ targ_extra_emuls="shlelf64_nbsd shelf32_nbsd shlelf32_nbsd shelf_nbsd shlelf_nbsd" ;;
+sh*l*-*-netbsdelf*) targ_emul=shlelf_nbsd
+ targ_extra_emuls=shelf_nbsd ;;
+sh*-*-netbsdelf*) targ_emul=shelf_nbsd
+ targ_extra_emuls=shlelf_nbsd ;;
+sh*-*-symbianelf*) targ_emul=shlsymbian ;;
+shle*-*-elf* | sh[1234]*le*-*-elf | shle*-*-kaos*)
+ targ_emul=shlelf
+ targ_extra_emuls="shelf shl sh" ;;
+sh-*-rtemscoff*) targ_emul=sh; targ_extra_emuls=shl ;;
+sh-*-elf* | sh[1234]*-*-elf | sh-*-rtems* | sh-*-kaos*)
+ targ_emul=shelf
+ targ_extra_emuls="shlelf sh shl" ;;
+sh-*-uclinux* | sh[12]-*-uclinux*)
+ targ_emul=shelf_uclinux
+ targ_extra_emuls="shelf shlelf sh shl shelf_fd shlelf_fd" ;;
+sh-*-vxworks) targ_emul=shelf_vxworks
+ targ_extra_emuls=shlelf_vxworks ;;
+sh-*-nto*) targ_emul=shelf_nto
+ targ_extra_emuls=shlelf_nto ;;
+sh-*-pe) targ_emul=shpe ;
+ targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+sh-*-*) targ_emul=sh; targ_extra_emuls=shl ;;
+sh64le-*-elf*) targ_emul=shlelf
+ targ_extra_emuls="shelf shlelf32 shelf32 shlelf64 shelf64"
+ targ_extra_libpath=$targ_extra_emuls ;;
+sh64-*-elf*) targ_emul=shelf
+ targ_extra_emuls="shlelf shelf32 shlelf32 shelf64 shlelf64"
+ targ_extra_libpath=$targ_extra_emuls ;;
+sparc64-*-aout*) targ_emul=sparcaout ;;
+sparc64-*-elf*) targ_emul=elf64_sparc ;;
+sparc64-*-rtems*) targ_emul=elf64_sparc ;;
+sparc-sun-sunos4*) targ_emul=sun4 ;;
+sparclite*-*-elf) targ_emul=elf32_sparc ;;
+sparclite*-*-coff) targ_emul=coff_sparc ;;
+sparclite*-fujitsu-*) targ_emul=sparcaout ;;
+sparc*-*-aout) targ_emul=sparcaout ;;
+sparc*-*-coff) targ_emul=coff_sparc ;;
+sparc*-*-elf) targ_emul=elf32_sparc ;;
+sparc*-*-sysv4*) targ_emul=elf32_sparc ;;
+sparc*-*-vxworks*) targ_emul=elf32_sparc_vxworks ;;
+sparc64-*-freebsd* | sparcv9-*-freebsd* | sparc64-*-kfreebsd*-gnu | sparcv9-*-kfreebsd*-gnu)
+ targ_emul=elf64_sparc_fbsd
+ targ_extra_emuls="elf64_sparc elf32_sparc"
+ targ_extra_libpath=$targ_extra_emuls
+ tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/64//'` ;;
+sparc*-*-linux*aout*) targ_emul=sparclinux
+ targ_extra_emuls="elf32_sparc sun4"
+ tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/aout//'`
+ tdir_sun4=sparc-sun-sunos4 ;;
+sparc64-*-linux-*) targ_emul=elf64_sparc
+ targ_extra_emuls="elf32_sparc sparclinux sun4"
+ targ_extra_libpath=elf32_sparc
+ tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/64//'`
+ tdir_sparclinux=${tdir_elf32_sparc}aout
+ tdir_sun4=sparc-sun-sunos4 ;;
+sparc*-*-linux-*) targ_emul=elf32_sparc
+ targ_extra_emuls="sparclinux elf64_sparc sun4"
+ targ_extra_libpath=elf64_sparc
+ tdir_sparclinux=${targ_alias}aout
+ tdir_elf64_sparc=`echo ${targ_alias} | sed -e 's/32//'`
+ tdir_sun4=sparc-sun-sunos4 ;;
+sparc64-*-netbsd* | sparc64-*-openbsd*)
+ targ_emul=elf64_sparc
+ targ_extra_emuls="elf32_sparc" ;;
+sparc*-*-netbsd*elf*) targ_emul=elf32_sparc ;;
+sparc*-*-netbsd*) targ_emul=sparcnbsd ;;
+sparc-*-solaris2.[0-6] | sparc-*-solaris2.[0-6].*)
+ targ_emul=elf32_sparc_sol2
+ targ_extra_emuls=elf32_sparc ;;
+sparc-*-solaris2*) targ_emul=elf32_sparc_sol2
+ targ_extra_emuls="elf32_sparc elf64_sparc_sol2 elf64_sparc"
+ targ_extra_libpath=$targ_extra_emuls
+ tdir_elf64_sparc=`echo ${targ_alias} | sed -e 's/32//'` ;;
+sparcv9-*-solaris2* | sparc64-*-solaris2*)
+ targ_emul=elf64_sparc_sol2
+ targ_extra_emuls="elf64_sparc elf32_sparc_sol2 elf32_sparc"
+ targ_extra_libpath=$targ_extra_emuls
+ tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/64//'` ;;
+sparc*-*-solaris2*) targ_emul=elf32_sparc ;;
+sparc*-wrs-vxworks*) targ_emul=sparcaout ;;
+sparc-*-rtems*) targ_emul=elf32_sparc
+ ;;
+spu-*-elf*) targ_emul=elf32_spu ;;
+tic30-*-*aout*) targ_emul=tic30aout ;;
+tic30-*-*coff*) targ_emul=tic30coff ;;
+tic4x-*-* | c4x-*-*) targ_emul=tic4xcoff ; targ_extra_emuls="tic3xcoff tic3xcoff_onchip" ;;
+tic54x-*-* | c54x*-*-*) targ_emul=tic54xcoff ;;
+tic6x-*-*) targ_emul=elf32_tic6x_le
+ targ_extra_emuls="elf32_tic6x_be"
+ ;;
+tic80-*-*) targ_emul=tic80coff
+ ;;
+v850-*-*) targ_emul=v850 ;;
+v850e-*-*) targ_emul=v850 ;;
+v850ea-*-*) targ_emul=v850
+ ;;
+vax-dec-ultrix* | vax-dec-bsd*) targ_emul=vax ;;
+vax-*-netbsdelf*) targ_emul=elf32vax
+ targ_extra_emuls=vaxnbsd ;;
+vax-*-netbsdaout* | vax-*-netbsd*)
+ targ_emul=vaxnbsd
+ targ_extra_emuls=elf32vax ;;
+vax-*-linux-*) targ_emul=elf32vax
+ ;;
+w65-*-*) targ_emul=w65
+ ;;
+xc16x-*-elf) targ_emul=elf32xc16x
+ targ_extra_emuls="elf32xc16xl elf32xc16xs"
+ ;;
+xstormy16-*-*) targ_emul=elf32xstormy16
+ ;;
+xtensa*-*-*) targ_emul=elf32xtensa
+ ;;
+z80-*-coff) targ_emul=z80
+ ;;
+z8k-*-coff) targ_emul=z8002; targ_extra_emuls=z8001
+ ;;
+*-*-ieee*) targ_emul=vanilla
+ ;;
+*-tandem-none) targ_emul=st2000
+ ;;
+*)
+ echo 2>&1 "*** ld does not support target ${targ}"
+ echo 2>&1 "*** see ld/configure.tgt for supported targets"
+ exit 1
+
+esac
+
+NATIVE_LIB_DIRS='/usr/local/lib /lib /usr/lib'
+case "${target}" in
+
+*-*-freebsd* | *-*-dragonfly*)
+ NATIVE_LIB_DIRS='/lib /usr/lib /usr/local/lib'
+ ;;
+
+hppa*64*-*-hpux11*)
+ NATIVE_LIB_DIRS=/usr/lib/pa20_64
+ ;;
+
+i[3-7]86-*-sysv4*)
+ NATIVE_LIB_DIRS='/usr/local/lib /usr/ccs/lib /lib /usr/lib'
+ ;;
+
+i[3-7]86-*-solaris*)
+ NATIVE_LIB_DIRS='/usr/local/lib /usr/ccs/lib /lib /usr/lib'
+ ;;
+
+i[3-7]86-pc-interix*)
+ NATIVE_LIB_DIRS='/usr/local/lib $$INTERIX_ROOT/usr/lib /lib /usr/lib'
+ ;;
+
+ia64-*-aix*)
+ NATIVE_LIB_DIRS='/usr/local/lib /usr/lib/ia64l64 /lib /usr/lib'
+ ;;
+
+sparc*-*-solaris2*)
+ NATIVE_LIB_DIRS='/usr/local/lib /usr/ccs/lib /lib /usr/lib'
+ ;;
+
+spu-*-elf*)
+ # This allows to build a pair of PPU/SPU toolchains with common sysroot.
+ NATIVE_LIB_DIRS='/lib'
+ ;;
+
+i[03-9x]86-*-cygwin*)
+ NATIVE_LIB_DIRS='/usr/lib /usr/lib/w32api'
+ ;;
+
+*-*-linux*)
+ ;;
+
+*-*-freebsd* | *-*-dragonfly*)
+ ;;
+
+*-*-netbsd*)
+ ;;
+
+alpha*-*-*)
+ NATIVE_LIB_DIRS='/usr/local/lib /usr/ccs/lib /lib /usr/lib'
+ ;;
+
+esac
diff --git a/binutils-2.21/ld/deffile.h b/binutils-2.21/ld/deffile.h
new file mode 100644
index 0000000..8ddd070
--- /dev/null
+++ b/binutils-2.21/ld/deffile.h
@@ -0,0 +1,118 @@
+/* deffile.h - header for .DEF file parser
+ Copyright 1998, 1999, 2000, 2002, 2003, 2005, 2006, 2007, 2009
+ Free Software Foundation, Inc.
+ Written by DJ Delorie dj@cygnus.com
+
+ This file is part of the GNU Binutils.
+
+ 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 3, or (at your option)
+ any later version.
+
+ The 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 GLD; see the file COPYING. If not, write to the Free
+ Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
+ 02110-1301, USA. */
+
+#ifndef DEFFILE_H
+#define DEFFILE_H
+
+/* DEF storage definitions. Note that any ordinal may be zero, and
+ any pointer may be NULL, if not defined by the DEF file. */
+
+typedef struct def_file_section {
+ char *name; /* always set */
+ char *class; /* may be NULL */
+ char flag_read, flag_write, flag_execute, flag_shared;
+} def_file_section;
+
+typedef struct def_file_export {
+ char *name; /* always set */
+ char *internal_name; /* always set, may == name */
+ char *its_name; /* optional export table name refered to. */
+ int ordinal; /* -1 if not specified */
+ int hint;
+ char flag_private, flag_constant, flag_noname, flag_data, flag_forward;
+} def_file_export;
+
+typedef struct def_file_module {
+ struct def_file_module *next;
+ void *user_data;
+ char name[1]; /* extended via malloc */
+} def_file_module;
+
+typedef struct def_file_import {
+ char *internal_name; /* always set */
+ def_file_module *module; /* always set */
+ char *name; /* may be NULL; either this or ordinal will be set */
+ char *its_name; /* optional import table name refered to. */
+ int ordinal; /* may be -1 */
+ int data; /* = 1 if data */
+} def_file_import;
+
+typedef struct def_file_aligncomm {
+ struct def_file_aligncomm *next; /* Chain pointer. */
+ char *symbol_name; /* Name of common symbol. */
+ unsigned int alignment; /* log-2 alignment. */
+} def_file_aligncomm;
+
+typedef struct def_file {
+ /* From the NAME or LIBRARY command. */
+ char *name;
+ int is_dll; /* -1 if NAME/LIBRARY not given */
+ bfd_vma base_address; /* (bfd_vma)(-1) if unspecified */
+
+ /* From the DESCRIPTION command. */
+ char *description;
+
+ /* From the STACK/HEAP command, -1 if unspecified. */
+ int stack_reserve, stack_commit;
+ int heap_reserve, heap_commit;
+
+ /* From the SECTION/SEGMENT commands. */
+ int num_section_defs;
+ def_file_section *section_defs;
+
+ /* From the EXPORTS commands. */
+ int num_exports;
+ def_file_export *exports;
+
+ /* Used by imports for module names. */
+ def_file_module *modules;
+
+ /* From the IMPORTS commands. */
+ int num_imports;
+ def_file_import *imports;
+
+ /* From the VERSION command, -1 if not specified. */
+ int version_major, version_minor;
+
+ /* Only expected from .drectve sections, not .DEF files. */
+ def_file_aligncomm *aligncomms;
+
+} def_file;
+
+extern def_file *def_file_empty (void);
+
+/* The second arg may be NULL. If not, this .def is appended to it. */
+extern def_file *def_file_parse (const char *, def_file *);
+extern void def_file_free (def_file *);
+extern def_file_export *def_file_add_export (def_file *, const char *,
+ const char *, int,
+ const char *);
+extern def_file_import *def_file_add_import (def_file *, const char *,
+ const char *, int, const char *,
+ const char *);
+extern void def_file_add_directive (def_file *, const char *, int);
+extern def_file_module *def_get_module (def_file *, const char *);
+#ifdef DEF_FILE_PRINT
+extern void def_file_print (FILE *, def_file *);
+#endif
+
+#endif /* DEFFILE_H */
diff --git a/binutils-2.21/ld/deffilep.c b/binutils-2.21/ld/deffilep.c
new file mode 100644
index 0000000..fc92597
--- /dev/null
+++ b/binutils-2.21/ld/deffilep.c
@@ -0,0 +1,3008 @@
+/* A Bison parser, made by GNU Bison 2.3. */
+
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Free Software Foundation, Inc.
+
+ 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, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+ simplifying the original so-called "semantic" parser. */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+ infringing on user name space. This should be done even for local
+ variables, as they might otherwise be expanded by user macros.
+ There are some unavoidable exceptions within include files to
+ define necessary library symbols; they are noted "INFRINGES ON
+ USER NAME SPACE" below. */
+
+/* Identify Bison output. */
+#define YYBISON 1
+
+/* Bison version. */
+#define YYBISON_VERSION "2.3"
+
+/* Skeleton name. */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers. */
+#define YYPURE 0
+
+/* Using locations. */
+#define YYLSP_NEEDED 0
+
+
+
+/* Tokens. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ NAME = 258,
+ LIBRARY = 259,
+ DESCRIPTION = 260,
+ STACKSIZE_K = 261,
+ HEAPSIZE = 262,
+ CODE = 263,
+ DATAU = 264,
+ DATAL = 265,
+ SECTIONS = 266,
+ EXPORTS = 267,
+ IMPORTS = 268,
+ VERSIONK = 269,
+ BASE = 270,
+ CONSTANTU = 271,
+ CONSTANTL = 272,
+ PRIVATEU = 273,
+ PRIVATEL = 274,
+ ALIGNCOMM = 275,
+ READ = 276,
+ WRITE = 277,
+ EXECUTE = 278,
+ SHARED = 279,
+ NONAMEU = 280,
+ NONAMEL = 281,
+ DIRECTIVE = 282,
+ EQUAL = 283,
+ ID = 284,
+ DIGITS = 285
+ };
+#endif
+/* Tokens. */
+#define NAME 258
+#define LIBRARY 259
+#define DESCRIPTION 260
+#define STACKSIZE_K 261
+#define HEAPSIZE 262
+#define CODE 263
+#define DATAU 264
+#define DATAL 265
+#define SECTIONS 266
+#define EXPORTS 267
+#define IMPORTS 268
+#define VERSIONK 269
+#define BASE 270
+#define CONSTANTU 271
+#define CONSTANTL 272
+#define PRIVATEU 273
+#define PRIVATEL 274
+#define ALIGNCOMM 275
+#define READ 276
+#define WRITE 277
+#define EXECUTE 278
+#define SHARED 279
+#define NONAMEU 280
+#define NONAMEL 281
+#define DIRECTIVE 282
+#define EQUAL 283
+#define ID 284
+#define DIGITS 285
+
+
+
+
+/* Copy the first part of user declarations. */
+#line 1 "deffilep.y"
+ /* deffilep.y - parser for .def files */
+
+/* Copyright 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006,
+ 2007, 2009 Free Software Foundation, Inc.
+
+ This file is part of GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "libiberty.h"
+#include "safe-ctype.h"
+#include "bfd.h"
+#include "ld.h"
+#include "ldmisc.h"
+#include "deffile.h"
+
+#define TRACE 0
+
+#define ROUND_UP(a, b) (((a)+((b)-1))&~((b)-1))
+
+/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
+ as well as gratuitiously global symbol names, so we can have multiple
+ yacc generated parsers in ld. Note that these are only the variables
+ produced by yacc. If other parser generators (bison, byacc, etc) produce
+ additional global names that conflict at link time, then those parser
+ generators need to be fixed instead of adding those names to this list. */
+
+#define yymaxdepth def_maxdepth
+#define yyparse def_parse
+#define yylex def_lex
+#define yyerror def_error
+#define yylval def_lval
+#define yychar def_char
+#define yydebug def_debug
+#define yypact def_pact
+#define yyr1 def_r1
+#define yyr2 def_r2
+#define yydef def_def
+#define yychk def_chk
+#define yypgo def_pgo
+#define yyact def_act
+#define yyexca def_exca
+#define yyerrflag def_errflag
+#define yynerrs def_nerrs
+#define yyps def_ps
+#define yypv def_pv
+#define yys def_s
+#define yy_yys def_yys
+#define yystate def_state
+#define yytmp def_tmp
+#define yyv def_v
+#define yy_yyv def_yyv
+#define yyval def_val
+#define yylloc def_lloc
+#define yyreds def_reds /* With YYDEBUG defined. */
+#define yytoks def_toks /* With YYDEBUG defined. */
+#define yylhs def_yylhs
+#define yylen def_yylen
+#define yydefred def_yydefred
+#define yydgoto def_yydgoto
+#define yysindex def_yysindex
+#define yyrindex def_yyrindex
+#define yygindex def_yygindex
+#define yytable def_yytable
+#define yycheck def_yycheck
+
+static void def_description (const char *);
+static void def_exports (const char *, const char *, int, int, const char *);
+static void def_heapsize (int, int);
+static void def_import (const char *, const char *, const char *, const char *,
+ int, const char *);
+static void def_image_name (const char *, int, int);
+static void def_section (const char *, int);
+static void def_section_alt (const char *, const char *);
+static void def_stacksize (int, int);
+static void def_version (int, int);
+static void def_directive (char *);
+static void def_aligncomm (char *str, int align);
+static int def_parse (void);
+static int def_error (const char *);
+static int def_lex (void);
+
+static int lex_forced_token = 0;
+static const char *lex_parse_string = 0;
+static const char *lex_parse_string_end = 0;
+
+
+
+/* Enabling traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages. */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table. */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+#line 103 "deffilep.y"
+{
+ char *id;
+ int number;
+ char *digits;
+}
+/* Line 193 of yacc.c. */
+#line 264 "deffilep.c"
+ YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+
+
+/* Copy the second part of user declarations. */
+
+
+/* Line 216 of yacc.c. */
+#line 277 "deffilep.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+# define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+# define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# else
+# define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+# if ENABLE_NLS
+# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+# define YY_(msgid) dgettext ("bison-runtime", msgid)
+# endif
+# endif
+# ifndef YY_
+# define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E. */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions. */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int i)
+#else
+static int
+YYID (i)
+ int i;
+#endif
+{
+ return i;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols. */
+
+# ifdef YYSTACK_USE_ALLOCA
+# if YYSTACK_USE_ALLOCA
+# ifdef __GNUC__
+# define YYSTACK_ALLOC __builtin_alloca
+# elif defined __BUILTIN_VA_ARG_INCR
+# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+# elif defined _AIX
+# define YYSTACK_ALLOC __alloca
+# elif defined _MSC_VER
+# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+# define alloca _alloca
+# else
+# define YYSTACK_ALLOC alloca
+# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef _STDLIB_H
+# define _STDLIB_H 1
+# endif
+# endif
+# endif
+# endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+ /* Pacify GCC's `empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+# ifndef YYSTACK_ALLOC_MAXIMUM
+ /* The OS might guarantee only one guard page at the bottom of the stack,
+ and a page size can be as small as 4096 bytes. So we cannot safely
+ invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
+ to allow for a few compiler-allocated temporary stack slots. */
+# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+# endif
+# else
+# define YYSTACK_ALLOC YYMALLOC
+# define YYSTACK_FREE YYFREE
+# ifndef YYSTACK_ALLOC_MAXIMUM
+# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+# endif
+# if (defined __cplusplus && ! defined _STDLIB_H \
+ && ! ((defined YYMALLOC || defined malloc) \
+ && (defined YYFREE || defined free)))
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef _STDLIB_H
+# define _STDLIB_H 1
+# endif
+# endif
+# ifndef YYMALLOC
+# define YYMALLOC malloc
+# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# ifndef YYFREE
+# define YYFREE free
+# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+ && (! defined __cplusplus \
+ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member. */
+union yyalloc
+{
+ yytype_int16 yyss;
+ YYSTYPE yyvs;
+ };
+
+/* The size of the maximum gap between one aligned stack and the next. */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+ N elements. */
+# define YYSTACK_BYTES(N) \
+ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+ + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if defined __GNUC__ && 1 < __GNUC__
+# define YYCOPY(To, From, Count) \
+ __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+# else
+# define YYCOPY(To, From, Count) \
+ do \
+ { \
+ YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (To)[yyi] = (From)[yyi]; \
+ } \
+ while (YYID (0))
+# endif
+# endif
+
+/* Relocate STACK from its old location to the new one. The
+ local variables YYSIZE and YYSTACKSIZE give the old and new number of
+ elements in the stack, and YYPTR gives the new location of the
+ stack. Advance YYPTR to a properly aligned location for the next
+ stack. */
+# define YYSTACK_RELOCATE(Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack, Stack, yysize); \
+ Stack = &yyptr->Stack; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (YYID (0))
+
+#endif
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL 47
+/* YYLAST -- Last index in YYTABLE. */
+#define YYLAST 126
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS 35
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS 25
+/* YYNRULES -- Number of rules. */
+#define YYNRULES 76
+/* YYNRULES -- Number of states. */
+#define YYNSTATES 123
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
+#define YYUNDEFTOK 2
+#define YYMAXUTOK 285
+
+#define YYTRANSLATE(YYX) \
+ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
+static const yytype_uint8 yytranslate[] =
+{
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 32, 2, 31, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 33, 2, 2, 34, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+ YYRHS. */
+static const yytype_uint8 yyprhs[] =
+{
+ 0, 0, 3, 6, 8, 12, 16, 19, 23, 27,
+ 30, 33, 36, 39, 42, 45, 50, 53, 58, 59,
+ 61, 64, 72, 76, 77, 79, 81, 83, 85, 87,
+ 89, 91, 93, 96, 98, 107, 116, 123, 130, 137,
+ 142, 145, 147, 150, 153, 157, 159, 161, 162, 165,
+ 166, 168, 170, 172, 174, 176, 179, 183, 184, 187,
+ 188, 191, 192, 195, 196, 200, 201, 203, 206, 210,
+ 212, 215, 220, 222, 223, 225, 226
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const yytype_int8 yyrhs[] =
+{
+ 36, 0, -1, 36, 37, -1, 37, -1, 3, 50,
+ 54, -1, 4, 50, 54, -1, 5, 29, -1, 6,
+ 59, 48, -1, 7, 59, 48, -1, 8, 46, -1,
+ 9, 46, -1, 11, 44, -1, 12, 38, -1, 13,
+ 42, -1, 14, 59, -1, 14, 59, 31, 59, -1,
+ 27, 29, -1, 20, 56, 32, 59, -1, -1, 39,
+ -1, 38, 39, -1, 55, 53, 52, 47, 40, 47,
+ 51, -1, 41, 47, 40, -1, -1, 25, -1, 26,
+ -1, 16, -1, 17, -1, 9, -1, 10, -1, 18,
+ -1, 19, -1, 42, 43, -1, 43, -1, 29, 33,
+ 29, 31, 29, 31, 29, 51, -1, 29, 33, 29,
+ 31, 29, 31, 59, 51, -1, 29, 33, 29, 31,
+ 29, 51, -1, 29, 33, 29, 31, 59, 51, -1,
+ 29, 31, 29, 31, 29, 51, -1, 29, 31, 29,
+ 51, -1, 44, 45, -1, 45, -1, 29, 46, -1,
+ 29, 29, -1, 46, 47, 49, -1, 49, -1, 32,
+ -1, -1, 32, 59, -1, -1, 21, -1, 22, -1,
+ 23, -1, 24, -1, 29, -1, 31, 29, -1, 29,
+ 31, 29, -1, -1, 28, 29, -1, -1, 34, 59,
+ -1, -1, 33, 55, -1, -1, 15, 33, 59, -1,
+ -1, 29, -1, 31, 29, -1, 55, 31, 29, -1,
+ 29, -1, 31, 29, -1, 56, 31, 57, 58, -1,
+ 30, -1, -1, 29, -1, -1, 30, -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+static const yytype_uint16 yyrline[] =
+{
+ 0, 124, 124, 125, 129, 130, 131, 132, 133, 134,
+ 135, 136, 137, 138, 139, 140, 141, 142, 146, 148,
+ 149, 156, 163, 164, 167, 168, 169, 170, 171, 172,
+ 173, 174, 177, 178, 182, 184, 186, 188, 190, 192,
+ 197, 198, 202, 203, 207, 208, 212, 213, 215, 216,
+ 220, 221, 222, 223, 226, 227, 233, 239, 242, 243,
+ 247, 248, 252, 253, 256, 257, 260, 261, 267, 275,
+ 276, 282, 290, 291, 294, 295, 298
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+ First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+static const char *const yytname[] =
+{
+ "$end", "error", "$undefined", "NAME", "LIBRARY", "DESCRIPTION",
+ "STACKSIZE_K", "HEAPSIZE", "CODE", "DATAU", "DATAL", "SECTIONS",
+ "EXPORTS", "IMPORTS", "VERSIONK", "BASE", "CONSTANTU", "CONSTANTL",
+ "PRIVATEU", "PRIVATEL", "ALIGNCOMM", "READ", "WRITE", "EXECUTE",
+ "SHARED", "NONAMEU", "NONAMEL", "DIRECTIVE", "EQUAL", "ID", "DIGITS",
+ "'.'", "','", "'='", "'@'", "$accept", "start", "command", "explist",
+ "expline", "exp_opt_list", "exp_opt", "implist", "impline", "seclist",
+ "secline", "attr_list", "opt_comma", "opt_number", "attr", "opt_name",
+ "opt_equalequal_name", "opt_ordinal", "opt_equal_name", "opt_base",
+ "dot_name", "anylang_id", "opt_digits", "opt_id", "NUMBER", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+ token YYLEX-NUM. */
+static const yytype_uint16 yytoknum[] =
+{
+ 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
+ 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+ 285, 46, 44, 61, 64
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const yytype_uint8 yyr1[] =
+{
+ 0, 35, 36, 36, 37, 37, 37, 37, 37, 37,
+ 37, 37, 37, 37, 37, 37, 37, 37, 38, 38,
+ 38, 39, 40, 40, 41, 41, 41, 41, 41, 41,
+ 41, 41, 42, 42, 43, 43, 43, 43, 43, 43,
+ 44, 44, 45, 45, 46, 46, 47, 47, 48, 48,
+ 49, 49, 49, 49, 50, 50, 50, 50, 51, 51,
+ 52, 52, 53, 53, 54, 54, 55, 55, 55, 56,
+ 56, 56, 57, 57, 58, 58, 59
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const yytype_uint8 yyr2[] =
+{
+ 0, 2, 2, 1, 3, 3, 2, 3, 3, 2,
+ 2, 2, 2, 2, 2, 4, 2, 4, 0, 1,
+ 2, 7, 3, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 2, 1, 8, 8, 6, 6, 6, 4,
+ 2, 1, 2, 2, 3, 1, 1, 0, 2, 0,
+ 1, 1, 1, 1, 1, 2, 3, 0, 2, 0,
+ 2, 0, 2, 0, 3, 0, 1, 2, 3, 1,
+ 2, 4, 1, 0, 1, 0, 1
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+ STATE-NUM when YYTABLE doesn't specify something else to do. Zero
+ means the default is an error. */
+static const yytype_uint8 yydefact[] =
+{
+ 0, 57, 57, 0, 0, 0, 0, 0, 0, 18,
+ 0, 0, 0, 0, 0, 3, 54, 0, 65, 65,
+ 6, 76, 49, 49, 50, 51, 52, 53, 9, 45,
+ 10, 0, 11, 41, 66, 0, 12, 19, 63, 0,
+ 13, 33, 14, 69, 0, 0, 16, 1, 2, 0,
+ 55, 0, 4, 5, 0, 7, 8, 46, 0, 43,
+ 42, 40, 67, 20, 0, 0, 61, 0, 0, 32,
+ 0, 70, 73, 0, 56, 0, 48, 44, 68, 62,
+ 0, 47, 59, 0, 15, 72, 75, 17, 64, 60,
+ 23, 0, 0, 39, 0, 74, 71, 28, 29, 26,
+ 27, 30, 31, 24, 25, 47, 47, 58, 59, 59,
+ 59, 59, 23, 38, 0, 36, 37, 21, 22, 59,
+ 59, 34, 35
+};
+
+/* YYDEFGOTO[NTERM-NUM]. */
+static const yytype_int8 yydefgoto[] =
+{
+ -1, 14, 15, 36, 37, 105, 106, 40, 41, 32,
+ 33, 28, 58, 55, 29, 18, 93, 81, 66, 52,
+ 38, 45, 86, 96, 22
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+#define YYPACT_NINF -81
+static const yytype_int8 yypact[] =
+{
+ 30, 27, 27, -15, -7, -7, 64, 64, -1, 35,
+ 11, -7, 38, 22, 4, -81, 28, 31, 48, 48,
+ -81, -81, 66, 66, -81, -81, -81, -81, -2, -81,
+ -2, 55, -1, -81, -81, 67, 35, -81, 59, 60,
+ 11, -81, 68, -81, 71, 16, -81, -81, -81, 72,
+ -81, 69, -81, -81, -7, -81, -81, -81, 64, -81,
+ -2, -81, -81, -81, 74, 35, 63, 75, 76, -81,
+ -7, -81, 77, -7, -81, -7, -81, -81, -81, 79,
+ -7, 80, -26, 82, -81, -81, 85, -81, -81, -81,
+ 36, 86, 87, -81, 51, -81, -81, -81, -81, -81,
+ -81, -81, -81, -81, -81, 80, 80, -81, 78, 1,
+ 78, 78, 36, -81, 65, -81, -81, -81, -81, 78,
+ 78, -81, -81
+};
+
+/* YYPGOTO[NTERM-NUM]. */
+static const yytype_int8 yypgoto[] =
+{
+ -81, -81, 94, -81, 81, 6, -81, -81, 83, -81,
+ 88, -4, -80, 96, 53, 119, -37, -81, -81, 103,
+ 61, -81, -81, -81, -5
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule which
+ number is the opposite. If zero, do what YYDEFACT says.
+ If YYTABLE_NINF, syntax error. */
+#define YYTABLE_NINF -48
+static const yytype_int8 yytable[] =
+{
+ 23, 90, 91, 30, 47, 92, 42, 1, 2, 3,
+ 4, 5, 6, 7, 20, 8, 9, 10, 11, -47,
+ -47, -47, -47, 21, 12, 111, 112, 60, 31, 91,
+ 57, 13, 114, 1, 2, 3, 4, 5, 6, 7,
+ 39, 8, 9, 10, 11, 97, 98, 72, 73, 76,
+ 12, 46, 99, 100, 101, 102, 16, 13, 17, 49,
+ 50, 103, 104, 51, 34, 84, 35, 43, 87, 44,
+ 88, 113, 115, 116, 117, 89, 24, 25, 26, 27,
+ 109, 21, 121, 122, 59, 24, 25, 26, 27, 110,
+ 64, 67, 65, 68, 119, 21, 62, 80, 54, 70,
+ 71, 74, 75, 78, 82, 83, 91, 85, 48, 120,
+ 64, 77, 57, 94, 95, 107, 108, 63, 118, 56,
+ 61, 19, 53, 69, 0, 0, 79
+};
+
+static const yytype_int8 yycheck[] =
+{
+ 5, 81, 28, 7, 0, 31, 11, 3, 4, 5,
+ 6, 7, 8, 9, 29, 11, 12, 13, 14, 21,
+ 22, 23, 24, 30, 20, 105, 106, 31, 29, 28,
+ 32, 27, 31, 3, 4, 5, 6, 7, 8, 9,
+ 29, 11, 12, 13, 14, 9, 10, 31, 32, 54,
+ 20, 29, 16, 17, 18, 19, 29, 27, 31, 31,
+ 29, 25, 26, 15, 29, 70, 31, 29, 73, 31,
+ 75, 108, 109, 110, 111, 80, 21, 22, 23, 24,
+ 29, 30, 119, 120, 29, 21, 22, 23, 24, 94,
+ 31, 31, 33, 33, 29, 30, 29, 34, 32, 31,
+ 29, 29, 33, 29, 29, 29, 28, 30, 14, 114,
+ 31, 58, 32, 31, 29, 29, 29, 36, 112, 23,
+ 32, 2, 19, 40, -1, -1, 65
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ symbol of state STATE-NUM. */
+static const yytype_uint8 yystos[] =
+{
+ 0, 3, 4, 5, 6, 7, 8, 9, 11, 12,
+ 13, 14, 20, 27, 36, 37, 29, 31, 50, 50,
+ 29, 30, 59, 59, 21, 22, 23, 24, 46, 49,
+ 46, 29, 44, 45, 29, 31, 38, 39, 55, 29,
+ 42, 43, 59, 29, 31, 56, 29, 0, 37, 31,
+ 29, 15, 54, 54, 32, 48, 48, 32, 47, 29,
+ 46, 45, 29, 39, 31, 33, 53, 31, 33, 43,
+ 31, 29, 31, 32, 29, 33, 59, 49, 29, 55,
+ 34, 52, 29, 29, 59, 30, 57, 59, 59, 59,
+ 47, 28, 31, 51, 31, 29, 58, 9, 10, 16,
+ 17, 18, 19, 25, 26, 40, 41, 29, 29, 29,
+ 59, 47, 47, 51, 31, 51, 51, 51, 40, 29,
+ 59, 51, 51
+};
+
+#define yyerrok (yyerrstatus = 0)
+#define yyclearin (yychar = YYEMPTY)
+#define YYEMPTY (-2)
+#define YYEOF 0
+
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror. This remains here temporarily
+ to ease the transition to the new meaning of YYERROR, for GCC.
+ Once GCC version 2 has supplanted version 1, this can go. */
+
+#define YYFAIL goto yyerrlab
+
+#define YYRECOVERING() (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value) \
+do \
+ if (yychar == YYEMPTY && yylen == 1) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ yytoken = YYTRANSLATE (yychar); \
+ YYPOPSTACK (1); \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror (YY_("syntax error: cannot back up")); \
+ YYERROR; \
+ } \
+while (YYID (0))
+
+
+#define YYTERROR 1
+#define YYERRCODE 256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+ If N is 0, then set CURRENT to the empty location which ends
+ the previous symbol: RHS[0] (always defined). */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N) \
+ do \
+ if (YYID (N)) \
+ { \
+ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
+ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
+ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
+ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
+ } \
+ else \
+ { \
+ (Current).first_line = (Current).last_line = \
+ YYRHSLOC (Rhs, 0).last_line; \
+ (Current).first_column = (Current).last_column = \
+ YYRHSLOC (Rhs, 0).last_column; \
+ } \
+ while (YYID (0))
+#endif
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+ This macro was not mandated originally: define only if we know
+ we won't break user code: when these are the locations we know. */
+
+#ifndef YY_LOCATION_PRINT
+# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
+# define YY_LOCATION_PRINT(File, Loc) \
+ fprintf (File, "%d.%d-%d.%d", \
+ (Loc).first_line, (Loc).first_column, \
+ (Loc).last_line, (Loc).last_column)
+# else
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments. */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
+#else
+# define YYLEX yylex ()
+#endif
+
+/* Enable debugging if requested. */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+# define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
+do { \
+ if (yydebug) \
+ { \
+ YYFPRINTF (stderr, "%s ", Title); \
+ yy_symbol_print (stderr, \
+ Type, Value); \
+ YYFPRINTF (stderr, "\n"); \
+ } \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+#endif
+{
+ if (!yyvaluep)
+ return;
+# ifdef YYPRINT
+ if (yytype < YYNTOKENS)
+ YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+ YYUSE (yyoutput);
+# endif
+ switch (yytype)
+ {
+ default:
+ break;
+ }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+#endif
+{
+ if (yytype < YYNTOKENS)
+ YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+ else
+ YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+ yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+ YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included). |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+#else
+static void
+yy_stack_print (bottom, top)
+ yytype_int16 *bottom;
+ yytype_int16 *top;
+#endif
+{
+ YYFPRINTF (stderr, "Stack now");
+ for (; bottom <= top; ++bottom)
+ YYFPRINTF (stderr, " %d", *bottom);
+ YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top) \
+do { \
+ if (yydebug) \
+ yy_stack_print ((Bottom), (Top)); \
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced. |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+ YYSTYPE *yyvsp;
+ int yyrule;
+#endif
+{
+ int yynrhs = yyr2[yyrule];
+ int yyi;
+ unsigned long int yylno = yyrline[yyrule];
+ YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+ yyrule - 1, yylno);
+ /* The symbols being reduced. */
+ for (yyi = 0; yyi < yynrhs; yyi++)
+ {
+ fprintf (stderr, " $%d = ", yyi + 1);
+ yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+ &(yyvsp[(yyi + 1) - (yynrhs)])
+ );
+ fprintf (stderr, "\n");
+ }
+}
+
+# define YY_REDUCE_PRINT(Rule) \
+do { \
+ if (yydebug) \
+ yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace. It is left uninitialized so that
+ multiple parsers can coexist. */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks. */
+#ifndef YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+ if the built-in stack extension method is used).
+
+ Do not make this value too large; the results are undefined if
+ YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+ evaluated with infinite-precision integer arithmetic. */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+# if defined __GLIBC__ && defined _STRING_H
+# define yystrlen strlen
+# else
+/* Return the length of YYSTR. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+ const char *yystr;
+#endif
+{
+ YYSIZE_T yylen;
+ for (yylen = 0; yystr[yylen]; yylen++)
+ continue;
+ return yylen;
+}
+# endif
+# endif
+
+# ifndef yystpcpy
+# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+# define yystpcpy stpcpy
+# else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+ YYDEST. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+ char *yydest;
+ const char *yysrc;
+#endif
+{
+ char *yyd = yydest;
+ const char *yys = yysrc;
+
+ while ((*yyd++ = *yys++) != '\0')
+ continue;
+
+ return yyd - 1;
+}
+# endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+ quotes and backslashes, so that it's suitable for yyerror. The
+ heuristic is that double-quoting is unnecessary unless the string
+ contains an apostrophe, a comma, or backslash (other than
+ backslash-backslash). YYSTR is taken from yytname. If YYRES is
+ null, do not copy; instead, return the length of what the result
+ would have been. */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+ if (*yystr == '"')
+ {
+ YYSIZE_T yyn = 0;
+ char const *yyp = yystr;
+
+ for (;;)
+ switch (*++yyp)
+ {
+ case '\'':
+ case ',':
+ goto do_not_strip_quotes;
+
+ case '\\':
+ if (*++yyp != '\\')
+ goto do_not_strip_quotes;
+ /* Fall through. */
+ default:
+ if (yyres)
+ yyres[yyn] = *yyp;
+ yyn++;
+ break;
+
+ case '"':
+ if (yyres)
+ yyres[yyn] = '\0';
+ return yyn;
+ }
+ do_not_strip_quotes: ;
+ }
+
+ if (! yyres)
+ return yystrlen (yystr);
+
+ return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into YYRESULT an error message about the unexpected token
+ YYCHAR while in state YYSTATE. Return the number of bytes copied,
+ including the terminating null byte. If YYRESULT is null, do not
+ copy anything; just return the number of bytes that would be
+ copied. As a special case, return 0 if an ordinary "syntax error"
+ message will do. Return YYSIZE_MAXIMUM if overflow occurs during
+ size calculation. */
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
+{
+ int yyn = yypact[yystate];
+
+ if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+ return 0;
+ else
+ {
+ int yytype = YYTRANSLATE (yychar);
+ YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+ YYSIZE_T yysize = yysize0;
+ YYSIZE_T yysize1;
+ int yysize_overflow = 0;
+ enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+ int yyx;
+
+# if 0
+ /* This is so xgettext sees the translatable formats that are
+ constructed on the fly. */
+ YY_("syntax error, unexpected %s");
+ YY_("syntax error, unexpected %s, expecting %s");
+ YY_("syntax error, unexpected %s, expecting %s or %s");
+ YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+ YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+ char *yyfmt;
+ char const *yyf;
+ static char const yyunexpected[] = "syntax error, unexpected %s";
+ static char const yyexpecting[] = ", expecting %s";
+ static char const yyor[] = " or %s";
+ char yyformat[sizeof yyunexpected
+ + sizeof yyexpecting - 1
+ + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+ * (sizeof yyor - 1))];
+ char const *yyprefix = yyexpecting;
+
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. */
+ int yyxbegin = yyn < 0 ? -yyn : 0;
+
+ /* Stay within bounds of both yycheck and yytname. */
+ int yychecklim = YYLAST - yyn + 1;
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ int yycount = 1;
+
+ yyarg[0] = yytname[yytype];
+ yyfmt = yystpcpy (yyformat, yyunexpected);
+
+ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+ {
+ if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+ {
+ yycount = 1;
+ yysize = yysize0;
+ yyformat[sizeof yyunexpected - 1] = '\0';
+ break;
+ }
+ yyarg[yycount++] = yytname[yyx];
+ yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+ yysize_overflow |= (yysize1 < yysize);
+ yysize = yysize1;
+ yyfmt = yystpcpy (yyfmt, yyprefix);
+ yyprefix = yyor;
+ }
+
+ yyf = YY_(yyformat);
+ yysize1 = yysize + yystrlen (yyf);
+ yysize_overflow |= (yysize1 < yysize);
+ yysize = yysize1;
+
+ if (yysize_overflow)
+ return YYSIZE_MAXIMUM;
+
+ if (yyresult)
+ {
+ /* Avoid sprintf, as that infringes on the user's name space.
+ Don't have undefined behavior even if the translation
+ produced a string with the wrong number of "%s"s. */
+ char *yyp = yyresult;
+ int yyi = 0;
+ while ((*yyp = *yyf) != '\0')
+ {
+ if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+ {
+ yyp += yytnamerr (yyp, yyarg[yyi++]);
+ yyf += 2;
+ }
+ else
+ {
+ yyp++;
+ yyf++;
+ }
+ }
+ }
+ return yysize;
+ }
+}
+#endif /* YYERROR_VERBOSE */
+
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol. |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+ const char *yymsg;
+ int yytype;
+ YYSTYPE *yyvaluep;
+#endif
+{
+ YYUSE (yyvaluep);
+
+ if (!yymsg)
+ yymsg = "Deleting";
+ YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+ switch (yytype)
+ {
+
+ default:
+ break;
+ }
+}
+
+
+/* Prevent warnings from -Wmissing-prototypes. */
+
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+
+/* The look-ahead symbol. */
+int yychar;
+
+/* The semantic value of the look-ahead symbol. */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far. */
+int yynerrs;
+
+
+
+/*----------.
+| yyparse. |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+ void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
+{
+
+ int yystate;
+ int yyn;
+ int yyresult;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus;
+ /* Look-ahead token as an internal (translated) token number. */
+ int yytoken = 0;
+#if YYERROR_VERBOSE
+ /* Buffer for error messages, and its allocated size. */
+ char yymsgbuf[128];
+ char *yymsg = yymsgbuf;
+ YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+ /* Three stacks and their tools:
+ `yyss': related to states,
+ `yyvs': related to semantic values,
+ `yyls': related to locations.
+
+ Refer to the stacks thru separate pointers, to allow yyoverflow
+ to reallocate them elsewhere. */
+
+ /* The state stack. */
+ yytype_int16 yyssa[YYINITDEPTH];
+ yytype_int16 *yyss = yyssa;
+ yytype_int16 *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs = yyvsa;
+ YYSTYPE *yyvsp;
+
+
+
+#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
+
+ YYSIZE_T yystacksize = YYINITDEPTH;
+
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+
+
+ /* The number of symbols on the RHS of the reduced rule.
+ Keep to zero when no symbol should be popped. */
+ int yylen = 0;
+
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yystate = 0;
+ yyerrstatus = 0;
+ yynerrs = 0;
+ yychar = YYEMPTY; /* Cause a token to be read. */
+
+ /* Initialize stack pointers.
+ Waste one element of value and location stack
+ so that they stay on the same level as the state stack.
+ The wasted elements are never initialized. */
+
+ yyssp = yyss;
+ yyvsp = yyvs;
+
+ goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate. |
+`------------------------------------------------------------*/
+ yynewstate:
+ /* In all cases, when you get here, the value and location stacks
+ have just been pushed. So pushing a state here evens the stacks. */
+ yyssp++;
+
+ yysetstate:
+ *yyssp = yystate;
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ {
+ /* Get the current used size of the three stacks, in elements. */
+ YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+ {
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+ yytype_int16 *yyss1 = yyss;
+
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. This used to be a
+ conditional around just the two extra args, but that might
+ be undefined if yyoverflow is a macro. */
+ yyoverflow (YY_("memory exhausted"),
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+
+ &yystacksize);
+
+ yyss = yyss1;
+ yyvs = yyvs1;
+ }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+ goto yyexhaustedlab;
+# else
+ /* Extend the stack our own way. */
+ if (YYMAXDEPTH <= yystacksize)
+ goto yyexhaustedlab;
+ yystacksize *= 2;
+ if (YYMAXDEPTH < yystacksize)
+ yystacksize = YYMAXDEPTH;
+
+ {
+ yytype_int16 *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+ goto yyexhaustedlab;
+ YYSTACK_RELOCATE (yyss);
+ YYSTACK_RELOCATE (yyvs);
+
+# undef YYSTACK_RELOCATE
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
+ }
+# endif
+#endif /* no yyoverflow */
+
+ yyssp = yyss + yysize - 1;
+ yyvsp = yyvs + yysize - 1;
+
+
+ YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+ (unsigned long int) yystacksize));
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ YYABORT;
+ }
+
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+ goto yybackup;
+
+/*-----------.
+| yybackup. |
+`-----------*/
+yybackup:
+
+ /* Do appropriate processing given the current state. Read a
+ look-ahead token if we need one and don't already have one. */
+
+ /* First try to decide what to do without reference to look-ahead token. */
+ yyn = yypact[yystate];
+ if (yyn == YYPACT_NINF)
+ goto yydefault;
+
+ /* Not known => get a look-ahead token if don't already have one. */
+
+ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
+ if (yychar == YYEMPTY)
+ {
+ YYDPRINTF ((stderr, "Reading a token: "));
+ yychar = YYLEX;
+ }
+
+ if (yychar <= YYEOF)
+ {
+ yychar = yytoken = YYEOF;
+ YYDPRINTF ((stderr, "Now at end of input.\n"));
+ }
+ else
+ {
+ yytoken = YYTRANSLATE (yychar);
+ YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+ }
+
+ /* If the proper action on seeing token YYTOKEN is to reduce or to
+ detect an error, take that action. */
+ yyn += yytoken;
+ if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+ goto yydefault;
+ yyn = yytable[yyn];
+ if (yyn <= 0)
+ {
+ if (yyn == 0 || yyn == YYTABLE_NINF)
+ goto yyerrlab;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
+ /* Shift the look-ahead token. */
+ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+ /* Discard the shifted token unless it is eof. */
+ if (yychar != YYEOF)
+ yychar = YYEMPTY;
+
+ yystate = yyn;
+ *++yyvsp = yylval;
+
+ goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state. |
+`-----------------------------------------------------------*/
+yydefault:
+ yyn = yydefact[yystate];
+ if (yyn == 0)
+ goto yyerrlab;
+ goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction. |
+`-----------------------------*/
+yyreduce:
+ /* yyn is the number of a rule to reduce with. */
+ yylen = yyr2[yyn];
+
+ /* If YYLEN is nonzero, implement the default value of the action:
+ `$$ = $1'.
+
+ Otherwise, the following line sets YYVAL to garbage.
+ This behavior is undocumented and Bison
+ users should not rely upon it. Assigning to YYVAL
+ unconditionally makes the parser a bit smaller, and it avoids a
+ GCC warning that YYVAL may be used uninitialized. */
+ yyval = yyvsp[1-yylen];
+
+
+ YY_REDUCE_PRINT (yyn);
+ switch (yyn)
+ {
+ case 4:
+#line 129 "deffilep.y"
+ { def_image_name ((yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].number), 0); }
+ break;
+
+ case 5:
+#line 130 "deffilep.y"
+ { def_image_name ((yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].number), 1); }
+ break;
+
+ case 6:
+#line 131 "deffilep.y"
+ { def_description ((yyvsp[(2) - (2)].id));}
+ break;
+
+ case 7:
+#line 132 "deffilep.y"
+ { def_stacksize ((yyvsp[(2) - (3)].number), (yyvsp[(3) - (3)].number));}
+ break;
+
+ case 8:
+#line 133 "deffilep.y"
+ { def_heapsize ((yyvsp[(2) - (3)].number), (yyvsp[(3) - (3)].number));}
+ break;
+
+ case 9:
+#line 134 "deffilep.y"
+ { def_section ("CODE", (yyvsp[(2) - (2)].number));}
+ break;
+
+ case 10:
+#line 135 "deffilep.y"
+ { def_section ("DATA", (yyvsp[(2) - (2)].number));}
+ break;
+
+ case 14:
+#line 139 "deffilep.y"
+ { def_version ((yyvsp[(2) - (2)].number), 0);}
+ break;
+
+ case 15:
+#line 140 "deffilep.y"
+ { def_version ((yyvsp[(2) - (4)].number), (yyvsp[(4) - (4)].number));}
+ break;
+
+ case 16:
+#line 141 "deffilep.y"
+ { def_directive ((yyvsp[(2) - (2)].id));}
+ break;
+
+ case 17:
+#line 142 "deffilep.y"
+ { def_aligncomm ((yyvsp[(2) - (4)].id), (yyvsp[(4) - (4)].number));}
+ break;
+
+ case 21:
+#line 157 "deffilep.y"
+ { def_exports ((yyvsp[(1) - (7)].id), (yyvsp[(2) - (7)].id), (yyvsp[(3) - (7)].number), (yyvsp[(5) - (7)].number), (yyvsp[(7) - (7)].id)); }
+ break;
+
+ case 22:
+#line 163 "deffilep.y"
+ { (yyval.number) = (yyvsp[(1) - (3)].number) | (yyvsp[(3) - (3)].number); }
+ break;
+
+ case 23:
+#line 164 "deffilep.y"
+ { (yyval.number) = 0; }
+ break;
+
+ case 24:
+#line 167 "deffilep.y"
+ { (yyval.number) = 1; }
+ break;
+
+ case 25:
+#line 168 "deffilep.y"
+ { (yyval.number) = 1; }
+ break;
+
+ case 26:
+#line 169 "deffilep.y"
+ { (yyval.number) = 2; }
+ break;
+
+ case 27:
+#line 170 "deffilep.y"
+ { (yyval.number) = 2; }
+ break;
+
+ case 28:
+#line 171 "deffilep.y"
+ { (yyval.number) = 4; }
+ break;
+
+ case 29:
+#line 172 "deffilep.y"
+ { (yyval.number) = 4; }
+ break;
+
+ case 30:
+#line 173 "deffilep.y"
+ { (yyval.number) = 8; }
+ break;
+
+ case 31:
+#line 174 "deffilep.y"
+ { (yyval.number) = 8; }
+ break;
+
+ case 34:
+#line 183 "deffilep.y"
+ { def_import ((yyvsp[(1) - (8)].id), (yyvsp[(3) - (8)].id), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].id), -1, (yyvsp[(8) - (8)].id)); }
+ break;
+
+ case 35:
+#line 185 "deffilep.y"
+ { def_import ((yyvsp[(1) - (8)].id), (yyvsp[(3) - (8)].id), (yyvsp[(5) - (8)].id), 0, (yyvsp[(7) - (8)].number), (yyvsp[(8) - (8)].id)); }
+ break;
+
+ case 36:
+#line 187 "deffilep.y"
+ { def_import ((yyvsp[(1) - (6)].id), (yyvsp[(3) - (6)].id), 0, (yyvsp[(5) - (6)].id), -1, (yyvsp[(6) - (6)].id)); }
+ break;
+
+ case 37:
+#line 189 "deffilep.y"
+ { def_import ((yyvsp[(1) - (6)].id), (yyvsp[(3) - (6)].id), 0, 0, (yyvsp[(5) - (6)].number), (yyvsp[(6) - (6)].id)); }
+ break;
+
+ case 38:
+#line 191 "deffilep.y"
+ { def_import( 0, (yyvsp[(1) - (6)].id), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].id), -1, (yyvsp[(6) - (6)].id)); }
+ break;
+
+ case 39:
+#line 193 "deffilep.y"
+ { def_import ( 0, (yyvsp[(1) - (4)].id), 0, (yyvsp[(3) - (4)].id), -1, (yyvsp[(4) - (4)].id)); }
+ break;
+
+ case 42:
+#line 202 "deffilep.y"
+ { def_section ((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].number));}
+ break;
+
+ case 43:
+#line 203 "deffilep.y"
+ { def_section_alt ((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].id));}
+ break;
+
+ case 44:
+#line 207 "deffilep.y"
+ { (yyval.number) = (yyvsp[(1) - (3)].number) | (yyvsp[(3) - (3)].number); }
+ break;
+
+ case 45:
+#line 208 "deffilep.y"
+ { (yyval.number) = (yyvsp[(1) - (1)].number); }
+ break;
+
+ case 48:
+#line 215 "deffilep.y"
+ { (yyval.number)=(yyvsp[(2) - (2)].number);}
+ break;
+
+ case 49:
+#line 216 "deffilep.y"
+ { (yyval.number)=-1;}
+ break;
+
+ case 50:
+#line 220 "deffilep.y"
+ { (yyval.number) = 1;}
+ break;
+
+ case 51:
+#line 221 "deffilep.y"
+ { (yyval.number) = 2;}
+ break;
+
+ case 52:
+#line 222 "deffilep.y"
+ { (yyval.number)=4;}
+ break;
+
+ case 53:
+#line 223 "deffilep.y"
+ { (yyval.number)=8;}
+ break;
+
+ case 54:
+#line 226 "deffilep.y"
+ { (yyval.id) = (yyvsp[(1) - (1)].id); }
+ break;
+
+ case 55:
+#line 228 "deffilep.y"
+ {
+ char *name = xmalloc (strlen ((yyvsp[(2) - (2)].id)) + 2);
+ sprintf (name, ".%s", (yyvsp[(2) - (2)].id));
+ (yyval.id) = name;
+ }
+ break;
+
+ case 56:
+#line 234 "deffilep.y"
+ {
+ char *name = xmalloc (strlen ((yyvsp[(1) - (3)].id)) + 1 + strlen ((yyvsp[(3) - (3)].id)) + 1);
+ sprintf (name, "%s.%s", (yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].id));
+ (yyval.id) = name;
+ }
+ break;
+
+ case 57:
+#line 239 "deffilep.y"
+ { (yyval.id) = ""; }
+ break;
+
+ case 58:
+#line 242 "deffilep.y"
+ { (yyval.id) = (yyvsp[(2) - (2)].id); }
+ break;
+
+ case 59:
+#line 243 "deffilep.y"
+ { (yyval.id) = 0; }
+ break;
+
+ case 60:
+#line 247 "deffilep.y"
+ { (yyval.number) = (yyvsp[(2) - (2)].number);}
+ break;
+
+ case 61:
+#line 248 "deffilep.y"
+ { (yyval.number) = -1;}
+ break;
+
+ case 62:
+#line 252 "deffilep.y"
+ { (yyval.id) = (yyvsp[(2) - (2)].id); }
+ break;
+
+ case 63:
+#line 253 "deffilep.y"
+ { (yyval.id) = 0; }
+ break;
+
+ case 64:
+#line 256 "deffilep.y"
+ { (yyval.number) = (yyvsp[(3) - (3)].number);}
+ break;
+
+ case 65:
+#line 257 "deffilep.y"
+ { (yyval.number) = -1;}
+ break;
+
+ case 66:
+#line 260 "deffilep.y"
+ { (yyval.id) = (yyvsp[(1) - (1)].id); }
+ break;
+
+ case 67:
+#line 262 "deffilep.y"
+ {
+ char *name = xmalloc (strlen ((yyvsp[(2) - (2)].id)) + 2);
+ sprintf (name, ".%s", (yyvsp[(2) - (2)].id));
+ (yyval.id) = name;
+ }
+ break;
+
+ case 68:
+#line 268 "deffilep.y"
+ {
+ char *name = xmalloc (strlen ((yyvsp[(1) - (3)].id)) + 1 + strlen ((yyvsp[(3) - (3)].id)) + 1);
+ sprintf (name, "%s.%s", (yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].id));
+ (yyval.id) = name;
+ }
+ break;
+
+ case 69:
+#line 275 "deffilep.y"
+ { (yyval.id) = (yyvsp[(1) - (1)].id); }
+ break;
+
+ case 70:
+#line 277 "deffilep.y"
+ {
+ char *id = xmalloc (strlen ((yyvsp[(2) - (2)].id)) + 2);
+ sprintf (id, ".%s", (yyvsp[(2) - (2)].id));
+ (yyval.id) = id;
+ }
+ break;
+
+ case 71:
+#line 283 "deffilep.y"
+ {
+ char *id = xmalloc (strlen ((yyvsp[(1) - (4)].id)) + 1 + strlen ((yyvsp[(3) - (4)].digits)) + strlen ((yyvsp[(4) - (4)].id)) + 1);
+ sprintf (id, "%s.%s%s", (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].digits), (yyvsp[(4) - (4)].id));
+ (yyval.id) = id;
+ }
+ break;
+
+ case 72:
+#line 290 "deffilep.y"
+ { (yyval.digits) = (yyvsp[(1) - (1)].digits); }
+ break;
+
+ case 73:
+#line 291 "deffilep.y"
+ { (yyval.digits) = ""; }
+ break;
+
+ case 74:
+#line 294 "deffilep.y"
+ { (yyval.id) = (yyvsp[(1) - (1)].id); }
+ break;
+
+ case 75:
+#line 295 "deffilep.y"
+ { (yyval.id) = ""; }
+ break;
+
+ case 76:
+#line 298 "deffilep.y"
+ { (yyval.number) = strtoul ((yyvsp[(1) - (1)].digits), 0, 0); }
+ break;
+
+
+/* Line 1267 of yacc.c. */
+#line 1913 "deffilep.c"
+ default: break;
+ }
+ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+
+ *++yyvsp = yyval;
+
+
+ /* Now `shift' the result of the reduction. Determine what state
+ that goes to, based on the state we popped back to and the rule
+ number reduced by. */
+
+ yyn = yyr1[yyn];
+
+ yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+ if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+ yystate = yytable[yystate];
+ else
+ yystate = yydefgoto[yyn - YYNTOKENS];
+
+ goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+ /* If not already recovering from an error, report this error. */
+ if (!yyerrstatus)
+ {
+ ++yynerrs;
+#if ! YYERROR_VERBOSE
+ yyerror (YY_("syntax error"));
+#else
+ {
+ YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+ if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+ {
+ YYSIZE_T yyalloc = 2 * yysize;
+ if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+ yyalloc = YYSTACK_ALLOC_MAXIMUM;
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+ yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+ if (yymsg)
+ yymsg_alloc = yyalloc;
+ else
+ {
+ yymsg = yymsgbuf;
+ yymsg_alloc = sizeof yymsgbuf;
+ }
+ }
+
+ if (0 < yysize && yysize <= yymsg_alloc)
+ {
+ (void) yysyntax_error (yymsg, yystate, yychar);
+ yyerror (yymsg);
+ }
+ else
+ {
+ yyerror (YY_("syntax error"));
+ if (yysize != 0)
+ goto yyexhaustedlab;
+ }
+ }
+#endif
+ }
+
+
+
+ if (yyerrstatus == 3)
+ {
+ /* If just tried and failed to reuse look-ahead token after an
+ error, discard it. */
+
+ if (yychar <= YYEOF)
+ {
+ /* Return failure if at end of input. */
+ if (yychar == YYEOF)
+ YYABORT;
+ }
+ else
+ {
+ yydestruct ("Error: discarding",
+ yytoken, &yylval);
+ yychar = YYEMPTY;
+ }
+ }
+
+ /* Else will try to reuse look-ahead token after shifting the error
+ token. */
+ goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR. |
+`---------------------------------------------------*/
+yyerrorlab:
+
+ /* Pacify compilers like GCC when the user code never invokes
+ YYERROR and the label yyerrorlab therefore never appears in user
+ code. */
+ if (/*CONSTCOND*/ 0)
+ goto yyerrorlab;
+
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYERROR. */
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+ yystate = *yyssp;
+ goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR. |
+`-------------------------------------------------------------*/
+yyerrlab1:
+ yyerrstatus = 3; /* Each real token shifted decrements this. */
+
+ for (;;)
+ {
+ yyn = yypact[yystate];
+ if (yyn != YYPACT_NINF)
+ {
+ yyn += YYTERROR;
+ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+ {
+ yyn = yytable[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
+
+ /* Pop the current state because it cannot handle the error token. */
+ if (yyssp == yyss)
+ YYABORT;
+
+
+ yydestruct ("Error: popping",
+ yystos[yystate], yyvsp);
+ YYPOPSTACK (1);
+ yystate = *yyssp;
+ YY_STACK_PRINT (yyss, yyssp);
+ }
+
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
+ *++yyvsp = yylval;
+
+
+ /* Shift the error token. */
+ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here. |
+`-------------------------------------*/
+yyacceptlab:
+ yyresult = 0;
+ goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here. |
+`-----------------------------------*/
+yyabortlab:
+ yyresult = 1;
+ goto yyreturn;
+
+#ifndef yyoverflow
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here. |
+`-------------------------------------------------*/
+yyexhaustedlab:
+ yyerror (YY_("memory exhausted"));
+ yyresult = 2;
+ /* Fall through. */
+#endif
+
+yyreturn:
+ if (yychar != YYEOF && yychar != YYEMPTY)
+ yydestruct ("Cleanup: discarding lookahead",
+ yytoken, &yylval);
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYABORT or YYACCEPT. */
+ YYPOPSTACK (yylen);
+ YY_STACK_PRINT (yyss, yyssp);
+ while (yyssp != yyss)
+ {
+ yydestruct ("Cleanup: popping",
+ yystos[*yyssp], yyvsp);
+ YYPOPSTACK (1);
+ }
+#ifndef yyoverflow
+ if (yyss != yyssa)
+ YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+#endif
+ /* Make sure YYID is used. */
+ return YYID (yyresult);
+}
+
+
+#line 300 "deffilep.y"
+
+
+/*****************************************************************************
+ API
+ *****************************************************************************/
+
+static FILE *the_file;
+static const char *def_filename;
+static int linenumber;
+static def_file *def;
+static int saw_newline;
+
+struct directive
+ {
+ struct directive *next;
+ char *name;
+ int len;
+ };
+
+static struct directive *directives = 0;
+
+def_file *
+def_file_empty (void)
+{
+ def_file *rv = xmalloc (sizeof (def_file));
+ memset (rv, 0, sizeof (def_file));
+ rv->is_dll = -1;
+ rv->base_address = (bfd_vma) -1;
+ rv->stack_reserve = rv->stack_commit = -1;
+ rv->heap_reserve = rv->heap_commit = -1;
+ rv->version_major = rv->version_minor = -1;
+ return rv;
+}
+
+def_file *
+def_file_parse (const char *filename, def_file *add_to)
+{
+ struct directive *d;
+
+ the_file = fopen (filename, "r");
+ def_filename = filename;
+ linenumber = 1;
+ if (!the_file)
+ {
+ perror (filename);
+ return 0;
+ }
+ if (add_to)
+ {
+ def = add_to;
+ }
+ else
+ {
+ def = def_file_empty ();
+ }
+
+ saw_newline = 1;
+ if (def_parse ())
+ {
+ def_file_free (def);
+ fclose (the_file);
+ return 0;
+ }
+
+ fclose (the_file);
+
+ for (d = directives; d; d = d->next)
+ {
+#if TRACE
+ printf ("Adding directive %08x `%s'\n", d->name, d->name);
+#endif
+ def_file_add_directive (def, d->name, d->len);
+ }
+
+ return def;
+}
+
+void
+def_file_free (def_file *fdef)
+{
+ int i;
+
+ if (!fdef)
+ return;
+ if (fdef->name)
+ free (fdef->name);
+ if (fdef->description)
+ free (fdef->description);
+
+ if (fdef->section_defs)
+ {
+ for (i = 0; i < fdef->num_section_defs; i++)
+ {
+ if (fdef->section_defs[i].name)
+ free (fdef->section_defs[i].name);
+ if (fdef->section_defs[i].class)
+ free (fdef->section_defs[i].class);
+ }
+ free (fdef->section_defs);
+ }
+
+ if (fdef->exports)
+ {
+ for (i = 0; i < fdef->num_exports; i++)
+ {
+ if (fdef->exports[i].internal_name
+ && fdef->exports[i].internal_name != fdef->exports[i].name)
+ free (fdef->exports[i].internal_name);
+ if (fdef->exports[i].name)
+ free (fdef->exports[i].name);
+ if (fdef->exports[i].its_name)
+ free (fdef->exports[i].its_name);
+ }
+ free (fdef->exports);
+ }
+
+ if (fdef->imports)
+ {
+ for (i = 0; i < fdef->num_imports; i++)
+ {
+ if (fdef->imports[i].internal_name
+ && fdef->imports[i].internal_name != fdef->imports[i].name)
+ free (fdef->imports[i].internal_name);
+ if (fdef->imports[i].name)
+ free (fdef->imports[i].name);
+ if (fdef->imports[i].its_name)
+ free (fdef->imports[i].its_name);
+ }
+ free (fdef->imports);
+ }
+
+ while (fdef->modules)
+ {
+ def_file_module *m = fdef->modules;
+
+ fdef->modules = fdef->modules->next;
+ free (m);
+ }
+
+ while (fdef->aligncomms)
+ {
+ def_file_aligncomm *c = fdef->aligncomms;
+
+ fdef->aligncomms = fdef->aligncomms->next;
+ free (c->symbol_name);
+ free (c);
+ }
+
+ free (fdef);
+}
+
+#ifdef DEF_FILE_PRINT
+void
+def_file_print (FILE *file, def_file *fdef)
+{
+ int i;
+
+ fprintf (file, ">>>> def_file at 0x%08x\n", fdef);
+ if (fdef->name)
+ fprintf (file, " name: %s\n", fdef->name ? fdef->name : "(unspecified)");
+ if (fdef->is_dll != -1)
+ fprintf (file, " is dll: %s\n", fdef->is_dll ? "yes" : "no");
+ if (fdef->base_address != (bfd_vma) -1)
+ fprintf (file, " base address: 0x%08x\n", fdef->base_address);
+ if (fdef->description)
+ fprintf (file, " description: `%s'\n", fdef->description);
+ if (fdef->stack_reserve != -1)
+ fprintf (file, " stack reserve: 0x%08x\n", fdef->stack_reserve);
+ if (fdef->stack_commit != -1)
+ fprintf (file, " stack commit: 0x%08x\n", fdef->stack_commit);
+ if (fdef->heap_reserve != -1)
+ fprintf (file, " heap reserve: 0x%08x\n", fdef->heap_reserve);
+ if (fdef->heap_commit != -1)
+ fprintf (file, " heap commit: 0x%08x\n", fdef->heap_commit);
+
+ if (fdef->num_section_defs > 0)
+ {
+ fprintf (file, " section defs:\n");
+
+ for (i = 0; i < fdef->num_section_defs; i++)
+ {
+ fprintf (file, " name: `%s', class: `%s', flags:",
+ fdef->section_defs[i].name, fdef->section_defs[i].class);
+ if (fdef->section_defs[i].flag_read)
+ fprintf (file, " R");
+ if (fdef->section_defs[i].flag_write)
+ fprintf (file, " W");
+ if (fdef->section_defs[i].flag_execute)
+ fprintf (file, " X");
+ if (fdef->section_defs[i].flag_shared)
+ fprintf (file, " S");
+ fprintf (file, "\n");
+ }
+ }
+
+ if (fdef->num_exports > 0)
+ {
+ fprintf (file, " exports:\n");
+
+ for (i = 0; i < fdef->num_exports; i++)
+ {
+ fprintf (file, " name: `%s', int: `%s', ordinal: %d, flags:",
+ fdef->exports[i].name, fdef->exports[i].internal_name,
+ fdef->exports[i].ordinal);
+ if (fdef->exports[i].flag_private)
+ fprintf (file, " P");
+ if (fdef->exports[i].flag_constant)
+ fprintf (file, " C");
+ if (fdef->exports[i].flag_noname)
+ fprintf (file, " N");
+ if (fdef->exports[i].flag_data)
+ fprintf (file, " D");
+ fprintf (file, "\n");
+ }
+ }
+
+ if (fdef->num_imports > 0)
+ {
+ fprintf (file, " imports:\n");
+
+ for (i = 0; i < fdef->num_imports; i++)
+ {
+ fprintf (file, " int: %s, from: `%s', name: `%s', ordinal: %d\n",
+ fdef->imports[i].internal_name,
+ fdef->imports[i].module,
+ fdef->imports[i].name,
+ fdef->imports[i].ordinal);
+ }
+ }
+
+ if (fdef->version_major != -1)
+ fprintf (file, " version: %d.%d\n", fdef->version_major, fdef->version_minor);
+
+ fprintf (file, "<<<< def_file at 0x%08x\n", fdef);
+}
+#endif
+
+def_file_export *
+def_file_add_export (def_file *fdef,
+ const char *external_name,
+ const char *internal_name,
+ int ordinal,
+ const char *its_name)
+{
+ def_file_export *e;
+ int max_exports = ROUND_UP(fdef->num_exports, 32);
+
+ if (fdef->num_exports >= max_exports)
+ {
+ max_exports = ROUND_UP(fdef->num_exports + 1, 32);
+ if (fdef->exports)
+ fdef->exports = xrealloc (fdef->exports,
+ max_exports * sizeof (def_file_export));
+ else
+ fdef->exports = xmalloc (max_exports * sizeof (def_file_export));
+ }
+ e = fdef->exports + fdef->num_exports;
+ memset (e, 0, sizeof (def_file_export));
+ if (internal_name && !external_name)
+ external_name = internal_name;
+ if (external_name && !internal_name)
+ internal_name = external_name;
+ e->name = xstrdup (external_name);
+ e->internal_name = xstrdup (internal_name);
+ e->its_name = (its_name ? xstrdup (its_name) : NULL);
+ e->ordinal = ordinal;
+ fdef->num_exports++;
+ return e;
+}
+
+def_file_module *
+def_get_module (def_file *fdef, const char *name)
+{
+ def_file_module *s;
+
+ for (s = fdef->modules; s; s = s->next)
+ if (strcmp (s->name, name) == 0)
+ return s;
+
+ return NULL;
+}
+
+static def_file_module *
+def_stash_module (def_file *fdef, const char *name)
+{
+ def_file_module *s;
+
+ if ((s = def_get_module (fdef, name)) != NULL)
+ return s;
+ s = xmalloc (sizeof (def_file_module) + strlen (name));
+ s->next = fdef->modules;
+ fdef->modules = s;
+ s->user_data = 0;
+ strcpy (s->name, name);
+ return s;
+}
+
+def_file_import *
+def_file_add_import (def_file *fdef,
+ const char *name,
+ const char *module,
+ int ordinal,
+ const char *internal_name,
+ const char *its_name)
+{
+ def_file_import *i;
+ int max_imports = ROUND_UP (fdef->num_imports, 16);
+
+ if (fdef->num_imports >= max_imports)
+ {
+ max_imports = ROUND_UP (fdef->num_imports+1, 16);
+
+ if (fdef->imports)
+ fdef->imports = xrealloc (fdef->imports,
+ max_imports * sizeof (def_file_import));
+ else
+ fdef->imports = xmalloc (max_imports * sizeof (def_file_import));
+ }
+ i = fdef->imports + fdef->num_imports;
+ memset (i, 0, sizeof (def_file_import));
+ if (name)
+ i->name = xstrdup (name);
+ if (module)
+ i->module = def_stash_module (fdef, module);
+ i->ordinal = ordinal;
+ if (internal_name)
+ i->internal_name = xstrdup (internal_name);
+ else
+ i->internal_name = i->name;
+ i->its_name = (its_name ? xstrdup (its_name) : NULL);
+ fdef->num_imports++;
+
+ return i;
+}
+
+struct
+{
+ char *param;
+ int token;
+}
+diropts[] =
+{
+ { "-heap", HEAPSIZE },
+ { "-stack", STACKSIZE_K },
+ { "-attr", SECTIONS },
+ { "-export", EXPORTS },
+ { "-aligncomm", ALIGNCOMM },
+ { 0, 0 }
+};
+
+void
+def_file_add_directive (def_file *my_def, const char *param, int len)
+{
+ def_file *save_def = def;
+ const char *pend = param + len;
+ char * tend = (char *) param;
+ int i;
+
+ def = my_def;
+
+ while (param < pend)
+ {
+ while (param < pend
+ && (ISSPACE (*param) || *param == '\n' || *param == 0))
+ param++;
+
+ if (param == pend)
+ break;
+
+ /* Scan forward until we encounter any of:
+ - the end of the buffer
+ - the start of a new option
+ - a newline seperating options
+ - a NUL seperating options. */
+ for (tend = (char *) (param + 1);
+ (tend < pend
+ && !(ISSPACE (tend[-1]) && *tend == '-')
+ && *tend != '\n' && *tend != 0);
+ tend++)
+ ;
+
+ for (i = 0; diropts[i].param; i++)
+ {
+ len = strlen (diropts[i].param);
+
+ if (tend - param >= len
+ && strncmp (param, diropts[i].param, len) == 0
+ && (param[len] == ':' || param[len] == ' '))
+ {
+ lex_parse_string_end = tend;
+ lex_parse_string = param + len + 1;
+ lex_forced_token = diropts[i].token;
+ saw_newline = 0;
+ if (def_parse ())
+ continue;
+ break;
+ }
+ }
+
+ if (!diropts[i].param)
+ {
+ char saved;
+
+ saved = * tend;
+ * tend = 0;
+ /* xgettext:c-format */
+ einfo (_("Warning: .drectve `%s' unrecognized\n"), param);
+ * tend = saved;
+ }
+
+ lex_parse_string = 0;
+ param = tend;
+ }
+
+ def = save_def;
+}
+
+/* Parser Callbacks. */
+
+static void
+def_image_name (const char *name, int base, int is_dll)
+{
+ /* If a LIBRARY or NAME statement is specified without a name, there is nothing
+ to do here. We retain the output filename specified on command line. */
+ if (*name)
+ {
+ const char* image_name = lbasename (name);
+
+ if (image_name != name)
+ einfo ("%s:%d: Warning: path components stripped from %s, '%s'\n",
+ def_filename, linenumber, is_dll ? "LIBRARY" : "NAME",
+ name);
+ if (def->name)
+ free (def->name);
+ /* Append the default suffix, if none specified. */
+ if (strchr (image_name, '.') == 0)
+ {
+ const char * suffix = is_dll ? ".dll" : ".exe";
+
+ def->name = xmalloc (strlen (image_name) + strlen (suffix) + 1);
+ sprintf (def->name, "%s%s", image_name, suffix);
+ }
+ else
+ def->name = xstrdup (image_name);
+ }
+
+ /* Honor a BASE address statement, even if LIBRARY string is empty. */
+ def->base_address = base;
+ def->is_dll = is_dll;
+}
+
+static void
+def_description (const char *text)
+{
+ int len = def->description ? strlen (def->description) : 0;
+
+ len += strlen (text) + 1;
+ if (def->description)
+ {
+ def->description = xrealloc (def->description, len);
+ strcat (def->description, text);
+ }
+ else
+ {
+ def->description = xmalloc (len);
+ strcpy (def->description, text);
+ }
+}
+
+static void
+def_stacksize (int reserve, int commit)
+{
+ def->stack_reserve = reserve;
+ def->stack_commit = commit;
+}
+
+static void
+def_heapsize (int reserve, int commit)
+{
+ def->heap_reserve = reserve;
+ def->heap_commit = commit;
+}
+
+static void
+def_section (const char *name, int attr)
+{
+ def_file_section *s;
+ int max_sections = ROUND_UP (def->num_section_defs, 4);
+
+ if (def->num_section_defs >= max_sections)
+ {
+ max_sections = ROUND_UP (def->num_section_defs+1, 4);
+
+ if (def->section_defs)
+ def->section_defs = xrealloc (def->section_defs,
+ max_sections * sizeof (def_file_import));
+ else
+ def->section_defs = xmalloc (max_sections * sizeof (def_file_import));
+ }
+ s = def->section_defs + def->num_section_defs;
+ memset (s, 0, sizeof (def_file_section));
+ s->name = xstrdup (name);
+ if (attr & 1)
+ s->flag_read = 1;
+ if (attr & 2)
+ s->flag_write = 1;
+ if (attr & 4)
+ s->flag_execute = 1;
+ if (attr & 8)
+ s->flag_shared = 1;
+
+ def->num_section_defs++;
+}
+
+static void
+def_section_alt (const char *name, const char *attr)
+{
+ int aval = 0;
+
+ for (; *attr; attr++)
+ {
+ switch (*attr)
+ {
+ case 'R':
+ case 'r':
+ aval |= 1;
+ break;
+ case 'W':
+ case 'w':
+ aval |= 2;
+ break;
+ case 'X':
+ case 'x':
+ aval |= 4;
+ break;
+ case 'S':
+ case 's':
+ aval |= 8;
+ break;
+ }
+ }
+ def_section (name, aval);
+}
+
+static void
+def_exports (const char *external_name,
+ const char *internal_name,
+ int ordinal,
+ int flags,
+ const char *its_name)
+{
+ def_file_export *dfe;
+
+ if (!internal_name && external_name)
+ internal_name = external_name;
+#if TRACE
+ printf ("def_exports, ext=%s int=%s\n", external_name, internal_name);
+#endif
+
+ dfe = def_file_add_export (def, external_name, internal_name, ordinal,
+ its_name);
+ if (flags & 1)
+ dfe->flag_noname = 1;
+ if (flags & 2)
+ dfe->flag_constant = 1;
+ if (flags & 4)
+ dfe->flag_data = 1;
+ if (flags & 8)
+ dfe->flag_private = 1;
+}
+
+static void
+def_import (const char *internal_name,
+ const char *module,
+ const char *dllext,
+ const char *name,
+ int ordinal,
+ const char *its_name)
+{
+ char *buf = 0;
+ const char *ext = dllext ? dllext : "dll";
+
+ buf = xmalloc (strlen (module) + strlen (ext) + 2);
+ sprintf (buf, "%s.%s", module, ext);
+ module = buf;
+
+ def_file_add_import (def, name, module, ordinal, internal_name, its_name);
+ if (buf)
+ free (buf);
+}
+
+static void
+def_version (int major, int minor)
+{
+ def->version_major = major;
+ def->version_minor = minor;
+}
+
+static void
+def_directive (char *str)
+{
+ struct directive *d = xmalloc (sizeof (struct directive));
+
+ d->next = directives;
+ directives = d;
+ d->name = xstrdup (str);
+ d->len = strlen (str);
+}
+
+static void
+def_aligncomm (char *str, int align)
+{
+ def_file_aligncomm *c = xmalloc (sizeof (def_file_aligncomm));
+
+ c->symbol_name = xstrdup (str);
+ c->alignment = (unsigned int) align;
+
+ c->next = def->aligncomms;
+ def->aligncomms = c;
+}
+
+static int
+def_error (const char *err)
+{
+ einfo ("%P: %s:%d: %s\n",
+ def_filename ? def_filename : "<unknown-file>", linenumber, err);
+ return 0;
+}
+
+
+/* Lexical Scanner. */
+
+#undef TRACE
+#define TRACE 0
+
+/* Never freed, but always reused as needed, so no real leak. */
+static char *buffer = 0;
+static int buflen = 0;
+static int bufptr = 0;
+
+static void
+put_buf (char c)
+{
+ if (bufptr == buflen)
+ {
+ buflen += 50; /* overly reasonable, eh? */
+ if (buffer)
+ buffer = xrealloc (buffer, buflen + 1);
+ else
+ buffer = xmalloc (buflen + 1);
+ }
+ buffer[bufptr++] = c;
+ buffer[bufptr] = 0; /* not optimal, but very convenient. */
+}
+
+static struct
+{
+ char *name;
+ int token;
+}
+tokens[] =
+{
+ { "BASE", BASE },
+ { "CODE", CODE },
+ { "CONSTANT", CONSTANTU },
+ { "constant", CONSTANTL },
+ { "DATA", DATAU },
+ { "data", DATAL },
+ { "DESCRIPTION", DESCRIPTION },
+ { "DIRECTIVE", DIRECTIVE },
+ { "EXECUTE", EXECUTE },
+ { "EXPORTS", EXPORTS },
+ { "HEAPSIZE", HEAPSIZE },
+ { "IMPORTS", IMPORTS },
+ { "LIBRARY", LIBRARY },
+ { "NAME", NAME },
+ { "NONAME", NONAMEU },
+ { "noname", NONAMEL },
+ { "PRIVATE", PRIVATEU },
+ { "private", PRIVATEL },
+ { "READ", READ },
+ { "SECTIONS", SECTIONS },
+ { "SEGMENTS", SECTIONS },
+ { "SHARED", SHARED },
+ { "STACKSIZE", STACKSIZE_K },
+ { "VERSION", VERSIONK },
+ { "WRITE", WRITE },
+ { 0, 0 }
+};
+
+static int
+def_getc (void)
+{
+ int rv;
+
+ if (lex_parse_string)
+ {
+ if (lex_parse_string >= lex_parse_string_end)
+ rv = EOF;
+ else
+ rv = *lex_parse_string++;
+ }
+ else
+ {
+ rv = fgetc (the_file);
+ }
+ if (rv == '\n')
+ saw_newline = 1;
+ return rv;
+}
+
+static int
+def_ungetc (int c)
+{
+ if (lex_parse_string)
+ {
+ lex_parse_string--;
+ return c;
+ }
+ else
+ return ungetc (c, the_file);
+}
+
+static int
+def_lex (void)
+{
+ int c, i, q;
+
+ if (lex_forced_token)
+ {
+ i = lex_forced_token;
+ lex_forced_token = 0;
+#if TRACE
+ printf ("lex: forcing token %d\n", i);
+#endif
+ return i;
+ }
+
+ c = def_getc ();
+
+ /* Trim leading whitespace. */
+ while (c != EOF && (c == ' ' || c == '\t') && saw_newline)
+ c = def_getc ();
+
+ if (c == EOF)
+ {
+#if TRACE
+ printf ("lex: EOF\n");
+#endif
+ return 0;
+ }
+
+ if (saw_newline && c == ';')
+ {
+ do
+ {
+ c = def_getc ();
+ }
+ while (c != EOF && c != '\n');
+ if (c == '\n')
+ return def_lex ();
+ return 0;
+ }
+
+ /* Must be something else. */
+ saw_newline = 0;
+
+ if (ISDIGIT (c))
+ {
+ bufptr = 0;
+ while (c != EOF && (ISXDIGIT (c) || (c == 'x')))
+ {
+ put_buf (c);
+ c = def_getc ();
+ }
+ if (c != EOF)
+ def_ungetc (c);
+ yylval.digits = xstrdup (buffer);
+#if TRACE
+ printf ("lex: `%s' returns DIGITS\n", buffer);
+#endif
+ return DIGITS;
+ }
+
+ if (ISALPHA (c) || strchr ("$:-_?@", c))
+ {
+ bufptr = 0;
+ q = c;
+ put_buf (c);
+ c = def_getc ();
+
+ if (q == '@')
+ {
+ if (ISBLANK (c) ) /* '@' followed by whitespace. */
+ return (q);
+ else if (ISDIGIT (c)) /* '@' followed by digit. */
+ {
+ def_ungetc (c);
+ return (q);
+ }
+#if TRACE
+ printf ("lex: @ returns itself\n");
+#endif
+ }
+
+ while (c != EOF && (ISALNUM (c) || strchr ("$:-_?/@<>", c)))
+ {
+ put_buf (c);
+ c = def_getc ();
+ }
+ if (c != EOF)
+ def_ungetc (c);
+ if (ISALPHA (q)) /* Check for tokens. */
+ {
+ for (i = 0; tokens[i].name; i++)
+ if (strcmp (tokens[i].name, buffer) == 0)
+ {
+#if TRACE
+ printf ("lex: `%s' is a string token\n", buffer);
+#endif
+ return tokens[i].token;
+ }
+ }
+#if TRACE
+ printf ("lex: `%s' returns ID\n", buffer);
+#endif
+ yylval.id = xstrdup (buffer);
+ return ID;
+ }
+
+ if (c == '\'' || c == '"')
+ {
+ q = c;
+ c = def_getc ();
+ bufptr = 0;
+
+ while (c != EOF && c != q)
+ {
+ put_buf (c);
+ c = def_getc ();
+ }
+ yylval.id = xstrdup (buffer);
+#if TRACE
+ printf ("lex: `%s' returns ID\n", buffer);
+#endif
+ return ID;
+ }
+
+ if ( c == '=')
+ {
+ c = def_getc ();
+ if (c == '=')
+ {
+#if TRACE
+ printf ("lex: `==' returns EQUAL\n");
+#endif
+ return EQUAL;
+ }
+ def_ungetc (c);
+#if TRACE
+ printf ("lex: `=' returns itself\n");
+#endif
+ return '=';
+ }
+ if (c == '.' || c == ',')
+ {
+#if TRACE
+ printf ("lex: `%c' returns itself\n", c);
+#endif
+ return c;
+ }
+
+ if (c == '\n')
+ {
+ linenumber++;
+ saw_newline = 1;
+ }
+
+ /*printf ("lex: 0x%02x ignored\n", c); */
+ return def_lex ();
+}
+
diff --git a/binutils-2.21/ld/deffilep.h b/binutils-2.21/ld/deffilep.h
new file mode 100644
index 0000000..14f5ef7
--- /dev/null
+++ b/binutils-2.21/ld/deffilep.h
@@ -0,0 +1,122 @@
+/* A Bison parser, made by GNU Bison 2.3. */
+
+/* Skeleton interface for Bison's Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Free Software Foundation, Inc.
+
+ 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, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+/* Tokens. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ NAME = 258,
+ LIBRARY = 259,
+ DESCRIPTION = 260,
+ STACKSIZE_K = 261,
+ HEAPSIZE = 262,
+ CODE = 263,
+ DATAU = 264,
+ DATAL = 265,
+ SECTIONS = 266,
+ EXPORTS = 267,
+ IMPORTS = 268,
+ VERSIONK = 269,
+ BASE = 270,
+ CONSTANTU = 271,
+ CONSTANTL = 272,
+ PRIVATEU = 273,
+ PRIVATEL = 274,
+ ALIGNCOMM = 275,
+ READ = 276,
+ WRITE = 277,
+ EXECUTE = 278,
+ SHARED = 279,
+ NONAMEU = 280,
+ NONAMEL = 281,
+ DIRECTIVE = 282,
+ EQUAL = 283,
+ ID = 284,
+ DIGITS = 285
+ };
+#endif
+/* Tokens. */
+#define NAME 258
+#define LIBRARY 259
+#define DESCRIPTION 260
+#define STACKSIZE_K 261
+#define HEAPSIZE 262
+#define CODE 263
+#define DATAU 264
+#define DATAL 265
+#define SECTIONS 266
+#define EXPORTS 267
+#define IMPORTS 268
+#define VERSIONK 269
+#define BASE 270
+#define CONSTANTU 271
+#define CONSTANTL 272
+#define PRIVATEU 273
+#define PRIVATEL 274
+#define ALIGNCOMM 275
+#define READ 276
+#define WRITE 277
+#define EXECUTE 278
+#define SHARED 279
+#define NONAMEU 280
+#define NONAMEL 281
+#define DIRECTIVE 282
+#define EQUAL 283
+#define ID 284
+#define DIGITS 285
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+#line 103 "deffilep.y"
+{
+ char *id;
+ int number;
+ char *digits;
+}
+/* Line 1529 of yacc.c. */
+#line 115 "deffilep.h"
+ YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+extern YYSTYPE yylval;
+
diff --git a/binutils-2.21/ld/deffilep.y b/binutils-2.21/ld/deffilep.y
new file mode 100644
index 0000000..36214d9
--- /dev/null
+++ b/binutils-2.21/ld/deffilep.y
@@ -0,0 +1,1180 @@
+%{ /* deffilep.y - parser for .def files */
+
+/* Copyright 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006,
+ 2007, 2009 Free Software Foundation, Inc.
+
+ This file is part of GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "libiberty.h"
+#include "safe-ctype.h"
+#include "bfd.h"
+#include "ld.h"
+#include "ldmisc.h"
+#include "deffile.h"
+
+#define TRACE 0
+
+#define ROUND_UP(a, b) (((a)+((b)-1))&~((b)-1))
+
+/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
+ as well as gratuitiously global symbol names, so we can have multiple
+ yacc generated parsers in ld. Note that these are only the variables
+ produced by yacc. If other parser generators (bison, byacc, etc) produce
+ additional global names that conflict at link time, then those parser
+ generators need to be fixed instead of adding those names to this list. */
+
+#define yymaxdepth def_maxdepth
+#define yyparse def_parse
+#define yylex def_lex
+#define yyerror def_error
+#define yylval def_lval
+#define yychar def_char
+#define yydebug def_debug
+#define yypact def_pact
+#define yyr1 def_r1
+#define yyr2 def_r2
+#define yydef def_def
+#define yychk def_chk
+#define yypgo def_pgo
+#define yyact def_act
+#define yyexca def_exca
+#define yyerrflag def_errflag
+#define yynerrs def_nerrs
+#define yyps def_ps
+#define yypv def_pv
+#define yys def_s
+#define yy_yys def_yys
+#define yystate def_state
+#define yytmp def_tmp
+#define yyv def_v
+#define yy_yyv def_yyv
+#define yyval def_val
+#define yylloc def_lloc
+#define yyreds def_reds /* With YYDEBUG defined. */
+#define yytoks def_toks /* With YYDEBUG defined. */
+#define yylhs def_yylhs
+#define yylen def_yylen
+#define yydefred def_yydefred
+#define yydgoto def_yydgoto
+#define yysindex def_yysindex
+#define yyrindex def_yyrindex
+#define yygindex def_yygindex
+#define yytable def_yytable
+#define yycheck def_yycheck
+
+static void def_description (const char *);
+static void def_exports (const char *, const char *, int, int, const char *);
+static void def_heapsize (int, int);
+static void def_import (const char *, const char *, const char *, const char *,
+ int, const char *);
+static void def_image_name (const char *, int, int);
+static void def_section (const char *, int);
+static void def_section_alt (const char *, const char *);
+static void def_stacksize (int, int);
+static void def_version (int, int);
+static void def_directive (char *);
+static void def_aligncomm (char *str, int align);
+static int def_parse (void);
+static int def_error (const char *);
+static int def_lex (void);
+
+static int lex_forced_token = 0;
+static const char *lex_parse_string = 0;
+static const char *lex_parse_string_end = 0;
+
+%}
+
+%union {
+ char *id;
+ int number;
+ char *digits;
+};
+
+%token NAME LIBRARY DESCRIPTION STACKSIZE_K HEAPSIZE CODE DATAU DATAL
+%token SECTIONS EXPORTS IMPORTS VERSIONK BASE CONSTANTU CONSTANTL
+%token PRIVATEU PRIVATEL ALIGNCOMM
+%token READ WRITE EXECUTE SHARED NONAMEU NONAMEL DIRECTIVE EQUAL
+%token <id> ID
+%token <digits> DIGITS
+%type <number> NUMBER
+%type <digits> opt_digits
+%type <number> opt_base opt_ordinal
+%type <number> attr attr_list opt_number exp_opt_list exp_opt
+%type <id> opt_name opt_equal_name dot_name anylang_id opt_id
+%type <id> opt_equalequal_name
+
+%%
+
+start: start command
+ | command
+ ;
+
+command:
+ NAME opt_name opt_base { def_image_name ($2, $3, 0); }
+ | LIBRARY opt_name opt_base { def_image_name ($2, $3, 1); }
+ | DESCRIPTION ID { def_description ($2);}
+ | STACKSIZE_K NUMBER opt_number { def_stacksize ($2, $3);}
+ | HEAPSIZE NUMBER opt_number { def_heapsize ($2, $3);}
+ | CODE attr_list { def_section ("CODE", $2);}
+ | DATAU attr_list { def_section ("DATA", $2);}
+ | SECTIONS seclist
+ | EXPORTS explist
+ | IMPORTS implist
+ | VERSIONK NUMBER { def_version ($2, 0);}
+ | VERSIONK NUMBER '.' NUMBER { def_version ($2, $4);}
+ | DIRECTIVE ID { def_directive ($2);}
+ | ALIGNCOMM anylang_id ',' NUMBER { def_aligncomm ($2, $4);}
+ ;
+
+
+explist:
+ /* EMPTY */
+ | expline
+ | explist expline
+ ;
+
+expline:
+ /* The opt_comma is necessary to support both the usual
+ DEF file syntax as well as .drectve syntax which
+ mandates <expsym>,<expoptlist>. */
+ dot_name opt_equal_name opt_ordinal opt_comma exp_opt_list opt_comma opt_equalequal_name
+ { def_exports ($1, $2, $3, $5, $7); }
+ ;
+exp_opt_list:
+ /* The opt_comma is necessary to support both the usual
+ DEF file syntax as well as .drectve syntax which
+ allows for comma separated opt list. */
+ exp_opt opt_comma exp_opt_list { $$ = $1 | $3; }
+ | { $$ = 0; }
+ ;
+exp_opt:
+ NONAMEU { $$ = 1; }
+ | NONAMEL { $$ = 1; }
+ | CONSTANTU { $$ = 2; }
+ | CONSTANTL { $$ = 2; }
+ | DATAU { $$ = 4; }
+ | DATAL { $$ = 4; }
+ | PRIVATEU { $$ = 8; }
+ | PRIVATEL { $$ = 8; }
+ ;
+implist:
+ implist impline
+ | impline
+ ;
+
+impline:
+ ID '=' ID '.' ID '.' ID opt_equalequal_name
+ { def_import ($1, $3, $5, $7, -1, $8); }
+ | ID '=' ID '.' ID '.' NUMBER opt_equalequal_name
+ { def_import ($1, $3, $5, 0, $7, $8); }
+ | ID '=' ID '.' ID opt_equalequal_name
+ { def_import ($1, $3, 0, $5, -1, $6); }
+ | ID '=' ID '.' NUMBER opt_equalequal_name
+ { def_import ($1, $3, 0, 0, $5, $6); }
+ | ID '.' ID '.' ID opt_equalequal_name
+ { def_import( 0, $1, $3, $5, -1, $6); }
+ | ID '.' ID opt_equalequal_name
+ { def_import ( 0, $1, 0, $3, -1, $4); }
+;
+
+seclist:
+ seclist secline
+ | secline
+ ;
+
+secline:
+ ID attr_list { def_section ($1, $2);}
+ | ID ID { def_section_alt ($1, $2);}
+ ;
+
+attr_list:
+ attr_list opt_comma attr { $$ = $1 | $3; }
+ | attr { $$ = $1; }
+ ;
+
+opt_comma:
+ ','
+ |
+ ;
+opt_number: ',' NUMBER { $$=$2;}
+ | { $$=-1;}
+ ;
+
+attr:
+ READ { $$ = 1;}
+ | WRITE { $$ = 2;}
+ | EXECUTE { $$=4;}
+ | SHARED { $$=8;}
+ ;
+
+opt_name: ID { $$ = $1; }
+ | '.' ID
+ {
+ char *name = xmalloc (strlen ($2) + 2);
+ sprintf (name, ".%s", $2);
+ $$ = name;
+ }
+ | ID '.' ID
+ {
+ char *name = xmalloc (strlen ($1) + 1 + strlen ($3) + 1);
+ sprintf (name, "%s.%s", $1, $3);
+ $$ = name;
+ }
+ | { $$ = ""; }
+ ;
+
+opt_equalequal_name: EQUAL ID { $$ = $2; }
+ | { $$ = 0; }
+ ;
+
+opt_ordinal:
+ '@' NUMBER { $$ = $2;}
+ | { $$ = -1;}
+ ;
+
+opt_equal_name:
+ '=' dot_name { $$ = $2; }
+ | { $$ = 0; }
+ ;
+
+opt_base: BASE '=' NUMBER { $$ = $3;}
+ | { $$ = -1;}
+ ;
+
+dot_name: ID { $$ = $1; }
+ | '.' ID
+ {
+ char *name = xmalloc (strlen ($2) + 2);
+ sprintf (name, ".%s", $2);
+ $$ = name;
+ }
+ | dot_name '.' ID
+ {
+ char *name = xmalloc (strlen ($1) + 1 + strlen ($3) + 1);
+ sprintf (name, "%s.%s", $1, $3);
+ $$ = name;
+ }
+ ;
+
+anylang_id: ID { $$ = $1; }
+ | '.' ID
+ {
+ char *id = xmalloc (strlen ($2) + 2);
+ sprintf (id, ".%s", $2);
+ $$ = id;
+ }
+ | anylang_id '.' opt_digits opt_id
+ {
+ char *id = xmalloc (strlen ($1) + 1 + strlen ($3) + strlen ($4) + 1);
+ sprintf (id, "%s.%s%s", $1, $3, $4);
+ $$ = id;
+ }
+ ;
+
+opt_digits: DIGITS { $$ = $1; }
+ | { $$ = ""; }
+ ;
+
+opt_id: ID { $$ = $1; }
+ | { $$ = ""; }
+ ;
+
+NUMBER: DIGITS { $$ = strtoul ($1, 0, 0); }
+
+%%
+
+/*****************************************************************************
+ API
+ *****************************************************************************/
+
+static FILE *the_file;
+static const char *def_filename;
+static int linenumber;
+static def_file *def;
+static int saw_newline;
+
+struct directive
+ {
+ struct directive *next;
+ char *name;
+ int len;
+ };
+
+static struct directive *directives = 0;
+
+def_file *
+def_file_empty (void)
+{
+ def_file *rv = xmalloc (sizeof (def_file));
+ memset (rv, 0, sizeof (def_file));
+ rv->is_dll = -1;
+ rv->base_address = (bfd_vma) -1;
+ rv->stack_reserve = rv->stack_commit = -1;
+ rv->heap_reserve = rv->heap_commit = -1;
+ rv->version_major = rv->version_minor = -1;
+ return rv;
+}
+
+def_file *
+def_file_parse (const char *filename, def_file *add_to)
+{
+ struct directive *d;
+
+ the_file = fopen (filename, "r");
+ def_filename = filename;
+ linenumber = 1;
+ if (!the_file)
+ {
+ perror (filename);
+ return 0;
+ }
+ if (add_to)
+ {
+ def = add_to;
+ }
+ else
+ {
+ def = def_file_empty ();
+ }
+
+ saw_newline = 1;
+ if (def_parse ())
+ {
+ def_file_free (def);
+ fclose (the_file);
+ return 0;
+ }
+
+ fclose (the_file);
+
+ for (d = directives; d; d = d->next)
+ {
+#if TRACE
+ printf ("Adding directive %08x `%s'\n", d->name, d->name);
+#endif
+ def_file_add_directive (def, d->name, d->len);
+ }
+
+ return def;
+}
+
+void
+def_file_free (def_file *fdef)
+{
+ int i;
+
+ if (!fdef)
+ return;
+ if (fdef->name)
+ free (fdef->name);
+ if (fdef->description)
+ free (fdef->description);
+
+ if (fdef->section_defs)
+ {
+ for (i = 0; i < fdef->num_section_defs; i++)
+ {
+ if (fdef->section_defs[i].name)
+ free (fdef->section_defs[i].name);
+ if (fdef->section_defs[i].class)
+ free (fdef->section_defs[i].class);
+ }
+ free (fdef->section_defs);
+ }
+
+ if (fdef->exports)
+ {
+ for (i = 0; i < fdef->num_exports; i++)
+ {
+ if (fdef->exports[i].internal_name
+ && fdef->exports[i].internal_name != fdef->exports[i].name)
+ free (fdef->exports[i].internal_name);
+ if (fdef->exports[i].name)
+ free (fdef->exports[i].name);
+ if (fdef->exports[i].its_name)
+ free (fdef->exports[i].its_name);
+ }
+ free (fdef->exports);
+ }
+
+ if (fdef->imports)
+ {
+ for (i = 0; i < fdef->num_imports; i++)
+ {
+ if (fdef->imports[i].internal_name
+ && fdef->imports[i].internal_name != fdef->imports[i].name)
+ free (fdef->imports[i].internal_name);
+ if (fdef->imports[i].name)
+ free (fdef->imports[i].name);
+ if (fdef->imports[i].its_name)
+ free (fdef->imports[i].its_name);
+ }
+ free (fdef->imports);
+ }
+
+ while (fdef->modules)
+ {
+ def_file_module *m = fdef->modules;
+
+ fdef->modules = fdef->modules->next;
+ free (m);
+ }
+
+ while (fdef->aligncomms)
+ {
+ def_file_aligncomm *c = fdef->aligncomms;
+
+ fdef->aligncomms = fdef->aligncomms->next;
+ free (c->symbol_name);
+ free (c);
+ }
+
+ free (fdef);
+}
+
+#ifdef DEF_FILE_PRINT
+void
+def_file_print (FILE *file, def_file *fdef)
+{
+ int i;
+
+ fprintf (file, ">>>> def_file at 0x%08x\n", fdef);
+ if (fdef->name)
+ fprintf (file, " name: %s\n", fdef->name ? fdef->name : "(unspecified)");
+ if (fdef->is_dll != -1)
+ fprintf (file, " is dll: %s\n", fdef->is_dll ? "yes" : "no");
+ if (fdef->base_address != (bfd_vma) -1)
+ fprintf (file, " base address: 0x%08x\n", fdef->base_address);
+ if (fdef->description)
+ fprintf (file, " description: `%s'\n", fdef->description);
+ if (fdef->stack_reserve != -1)
+ fprintf (file, " stack reserve: 0x%08x\n", fdef->stack_reserve);
+ if (fdef->stack_commit != -1)
+ fprintf (file, " stack commit: 0x%08x\n", fdef->stack_commit);
+ if (fdef->heap_reserve != -1)
+ fprintf (file, " heap reserve: 0x%08x\n", fdef->heap_reserve);
+ if (fdef->heap_commit != -1)
+ fprintf (file, " heap commit: 0x%08x\n", fdef->heap_commit);
+
+ if (fdef->num_section_defs > 0)
+ {
+ fprintf (file, " section defs:\n");
+
+ for (i = 0; i < fdef->num_section_defs; i++)
+ {
+ fprintf (file, " name: `%s', class: `%s', flags:",
+ fdef->section_defs[i].name, fdef->section_defs[i].class);
+ if (fdef->section_defs[i].flag_read)
+ fprintf (file, " R");
+ if (fdef->section_defs[i].flag_write)
+ fprintf (file, " W");
+ if (fdef->section_defs[i].flag_execute)
+ fprintf (file, " X");
+ if (fdef->section_defs[i].flag_shared)
+ fprintf (file, " S");
+ fprintf (file, "\n");
+ }
+ }
+
+ if (fdef->num_exports > 0)
+ {
+ fprintf (file, " exports:\n");
+
+ for (i = 0; i < fdef->num_exports; i++)
+ {
+ fprintf (file, " name: `%s', int: `%s', ordinal: %d, flags:",
+ fdef->exports[i].name, fdef->exports[i].internal_name,
+ fdef->exports[i].ordinal);
+ if (fdef->exports[i].flag_private)
+ fprintf (file, " P");
+ if (fdef->exports[i].flag_constant)
+ fprintf (file, " C");
+ if (fdef->exports[i].flag_noname)
+ fprintf (file, " N");
+ if (fdef->exports[i].flag_data)
+ fprintf (file, " D");
+ fprintf (file, "\n");
+ }
+ }
+
+ if (fdef->num_imports > 0)
+ {
+ fprintf (file, " imports:\n");
+
+ for (i = 0; i < fdef->num_imports; i++)
+ {
+ fprintf (file, " int: %s, from: `%s', name: `%s', ordinal: %d\n",
+ fdef->imports[i].internal_name,
+ fdef->imports[i].module,
+ fdef->imports[i].name,
+ fdef->imports[i].ordinal);
+ }
+ }
+
+ if (fdef->version_major != -1)
+ fprintf (file, " version: %d.%d\n", fdef->version_major, fdef->version_minor);
+
+ fprintf (file, "<<<< def_file at 0x%08x\n", fdef);
+}
+#endif
+
+def_file_export *
+def_file_add_export (def_file *fdef,
+ const char *external_name,
+ const char *internal_name,
+ int ordinal,
+ const char *its_name)
+{
+ def_file_export *e;
+ int max_exports = ROUND_UP(fdef->num_exports, 32);
+
+ if (fdef->num_exports >= max_exports)
+ {
+ max_exports = ROUND_UP(fdef->num_exports + 1, 32);
+ if (fdef->exports)
+ fdef->exports = xrealloc (fdef->exports,
+ max_exports * sizeof (def_file_export));
+ else
+ fdef->exports = xmalloc (max_exports * sizeof (def_file_export));
+ }
+ e = fdef->exports + fdef->num_exports;
+ memset (e, 0, sizeof (def_file_export));
+ if (internal_name && !external_name)
+ external_name = internal_name;
+ if (external_name && !internal_name)
+ internal_name = external_name;
+ e->name = xstrdup (external_name);
+ e->internal_name = xstrdup (internal_name);
+ e->its_name = (its_name ? xstrdup (its_name) : NULL);
+ e->ordinal = ordinal;
+ fdef->num_exports++;
+ return e;
+}
+
+def_file_module *
+def_get_module (def_file *fdef, const char *name)
+{
+ def_file_module *s;
+
+ for (s = fdef->modules; s; s = s->next)
+ if (strcmp (s->name, name) == 0)
+ return s;
+
+ return NULL;
+}
+
+static def_file_module *
+def_stash_module (def_file *fdef, const char *name)
+{
+ def_file_module *s;
+
+ if ((s = def_get_module (fdef, name)) != NULL)
+ return s;
+ s = xmalloc (sizeof (def_file_module) + strlen (name));
+ s->next = fdef->modules;
+ fdef->modules = s;
+ s->user_data = 0;
+ strcpy (s->name, name);
+ return s;
+}
+
+def_file_import *
+def_file_add_import (def_file *fdef,
+ const char *name,
+ const char *module,
+ int ordinal,
+ const char *internal_name,
+ const char *its_name)
+{
+ def_file_import *i;
+ int max_imports = ROUND_UP (fdef->num_imports, 16);
+
+ if (fdef->num_imports >= max_imports)
+ {
+ max_imports = ROUND_UP (fdef->num_imports+1, 16);
+
+ if (fdef->imports)
+ fdef->imports = xrealloc (fdef->imports,
+ max_imports * sizeof (def_file_import));
+ else
+ fdef->imports = xmalloc (max_imports * sizeof (def_file_import));
+ }
+ i = fdef->imports + fdef->num_imports;
+ memset (i, 0, sizeof (def_file_import));
+ if (name)
+ i->name = xstrdup (name);
+ if (module)
+ i->module = def_stash_module (fdef, module);
+ i->ordinal = ordinal;
+ if (internal_name)
+ i->internal_name = xstrdup (internal_name);
+ else
+ i->internal_name = i->name;
+ i->its_name = (its_name ? xstrdup (its_name) : NULL);
+ fdef->num_imports++;
+
+ return i;
+}
+
+struct
+{
+ char *param;
+ int token;
+}
+diropts[] =
+{
+ { "-heap", HEAPSIZE },
+ { "-stack", STACKSIZE_K },
+ { "-attr", SECTIONS },
+ { "-export", EXPORTS },
+ { "-aligncomm", ALIGNCOMM },
+ { 0, 0 }
+};
+
+void
+def_file_add_directive (def_file *my_def, const char *param, int len)
+{
+ def_file *save_def = def;
+ const char *pend = param + len;
+ char * tend = (char *) param;
+ int i;
+
+ def = my_def;
+
+ while (param < pend)
+ {
+ while (param < pend
+ && (ISSPACE (*param) || *param == '\n' || *param == 0))
+ param++;
+
+ if (param == pend)
+ break;
+
+ /* Scan forward until we encounter any of:
+ - the end of the buffer
+ - the start of a new option
+ - a newline seperating options
+ - a NUL seperating options. */
+ for (tend = (char *) (param + 1);
+ (tend < pend
+ && !(ISSPACE (tend[-1]) && *tend == '-')
+ && *tend != '\n' && *tend != 0);
+ tend++)
+ ;
+
+ for (i = 0; diropts[i].param; i++)
+ {
+ len = strlen (diropts[i].param);
+
+ if (tend - param >= len
+ && strncmp (param, diropts[i].param, len) == 0
+ && (param[len] == ':' || param[len] == ' '))
+ {
+ lex_parse_string_end = tend;
+ lex_parse_string = param + len + 1;
+ lex_forced_token = diropts[i].token;
+ saw_newline = 0;
+ if (def_parse ())
+ continue;
+ break;
+ }
+ }
+
+ if (!diropts[i].param)
+ {
+ char saved;
+
+ saved = * tend;
+ * tend = 0;
+ /* xgettext:c-format */
+ einfo (_("Warning: .drectve `%s' unrecognized\n"), param);
+ * tend = saved;
+ }
+
+ lex_parse_string = 0;
+ param = tend;
+ }
+
+ def = save_def;
+}
+
+/* Parser Callbacks. */
+
+static void
+def_image_name (const char *name, int base, int is_dll)
+{
+ /* If a LIBRARY or NAME statement is specified without a name, there is nothing
+ to do here. We retain the output filename specified on command line. */
+ if (*name)
+ {
+ const char* image_name = lbasename (name);
+
+ if (image_name != name)
+ einfo ("%s:%d: Warning: path components stripped from %s, '%s'\n",
+ def_filename, linenumber, is_dll ? "LIBRARY" : "NAME",
+ name);
+ if (def->name)
+ free (def->name);
+ /* Append the default suffix, if none specified. */
+ if (strchr (image_name, '.') == 0)
+ {
+ const char * suffix = is_dll ? ".dll" : ".exe";
+
+ def->name = xmalloc (strlen (image_name) + strlen (suffix) + 1);
+ sprintf (def->name, "%s%s", image_name, suffix);
+ }
+ else
+ def->name = xstrdup (image_name);
+ }
+
+ /* Honor a BASE address statement, even if LIBRARY string is empty. */
+ def->base_address = base;
+ def->is_dll = is_dll;
+}
+
+static void
+def_description (const char *text)
+{
+ int len = def->description ? strlen (def->description) : 0;
+
+ len += strlen (text) + 1;
+ if (def->description)
+ {
+ def->description = xrealloc (def->description, len);
+ strcat (def->description, text);
+ }
+ else
+ {
+ def->description = xmalloc (len);
+ strcpy (def->description, text);
+ }
+}
+
+static void
+def_stacksize (int reserve, int commit)
+{
+ def->stack_reserve = reserve;
+ def->stack_commit = commit;
+}
+
+static void
+def_heapsize (int reserve, int commit)
+{
+ def->heap_reserve = reserve;
+ def->heap_commit = commit;
+}
+
+static void
+def_section (const char *name, int attr)
+{
+ def_file_section *s;
+ int max_sections = ROUND_UP (def->num_section_defs, 4);
+
+ if (def->num_section_defs >= max_sections)
+ {
+ max_sections = ROUND_UP (def->num_section_defs+1, 4);
+
+ if (def->section_defs)
+ def->section_defs = xrealloc (def->section_defs,
+ max_sections * sizeof (def_file_import));
+ else
+ def->section_defs = xmalloc (max_sections * sizeof (def_file_import));
+ }
+ s = def->section_defs + def->num_section_defs;
+ memset (s, 0, sizeof (def_file_section));
+ s->name = xstrdup (name);
+ if (attr & 1)
+ s->flag_read = 1;
+ if (attr & 2)
+ s->flag_write = 1;
+ if (attr & 4)
+ s->flag_execute = 1;
+ if (attr & 8)
+ s->flag_shared = 1;
+
+ def->num_section_defs++;
+}
+
+static void
+def_section_alt (const char *name, const char *attr)
+{
+ int aval = 0;
+
+ for (; *attr; attr++)
+ {
+ switch (*attr)
+ {
+ case 'R':
+ case 'r':
+ aval |= 1;
+ break;
+ case 'W':
+ case 'w':
+ aval |= 2;
+ break;
+ case 'X':
+ case 'x':
+ aval |= 4;
+ break;
+ case 'S':
+ case 's':
+ aval |= 8;
+ break;
+ }
+ }
+ def_section (name, aval);
+}
+
+static void
+def_exports (const char *external_name,
+ const char *internal_name,
+ int ordinal,
+ int flags,
+ const char *its_name)
+{
+ def_file_export *dfe;
+
+ if (!internal_name && external_name)
+ internal_name = external_name;
+#if TRACE
+ printf ("def_exports, ext=%s int=%s\n", external_name, internal_name);
+#endif
+
+ dfe = def_file_add_export (def, external_name, internal_name, ordinal,
+ its_name);
+ if (flags & 1)
+ dfe->flag_noname = 1;
+ if (flags & 2)
+ dfe->flag_constant = 1;
+ if (flags & 4)
+ dfe->flag_data = 1;
+ if (flags & 8)
+ dfe->flag_private = 1;
+}
+
+static void
+def_import (const char *internal_name,
+ const char *module,
+ const char *dllext,
+ const char *name,
+ int ordinal,
+ const char *its_name)
+{
+ char *buf = 0;
+ const char *ext = dllext ? dllext : "dll";
+
+ buf = xmalloc (strlen (module) + strlen (ext) + 2);
+ sprintf (buf, "%s.%s", module, ext);
+ module = buf;
+
+ def_file_add_import (def, name, module, ordinal, internal_name, its_name);
+ if (buf)
+ free (buf);
+}
+
+static void
+def_version (int major, int minor)
+{
+ def->version_major = major;
+ def->version_minor = minor;
+}
+
+static void
+def_directive (char *str)
+{
+ struct directive *d = xmalloc (sizeof (struct directive));
+
+ d->next = directives;
+ directives = d;
+ d->name = xstrdup (str);
+ d->len = strlen (str);
+}
+
+static void
+def_aligncomm (char *str, int align)
+{
+ def_file_aligncomm *c = xmalloc (sizeof (def_file_aligncomm));
+
+ c->symbol_name = xstrdup (str);
+ c->alignment = (unsigned int) align;
+
+ c->next = def->aligncomms;
+ def->aligncomms = c;
+}
+
+static int
+def_error (const char *err)
+{
+ einfo ("%P: %s:%d: %s\n",
+ def_filename ? def_filename : "<unknown-file>", linenumber, err);
+ return 0;
+}
+
+
+/* Lexical Scanner. */
+
+#undef TRACE
+#define TRACE 0
+
+/* Never freed, but always reused as needed, so no real leak. */
+static char *buffer = 0;
+static int buflen = 0;
+static int bufptr = 0;
+
+static void
+put_buf (char c)
+{
+ if (bufptr == buflen)
+ {
+ buflen += 50; /* overly reasonable, eh? */
+ if (buffer)
+ buffer = xrealloc (buffer, buflen + 1);
+ else
+ buffer = xmalloc (buflen + 1);
+ }
+ buffer[bufptr++] = c;
+ buffer[bufptr] = 0; /* not optimal, but very convenient. */
+}
+
+static struct
+{
+ char *name;
+ int token;
+}
+tokens[] =
+{
+ { "BASE", BASE },
+ { "CODE", CODE },
+ { "CONSTANT", CONSTANTU },
+ { "constant", CONSTANTL },
+ { "DATA", DATAU },
+ { "data", DATAL },
+ { "DESCRIPTION", DESCRIPTION },
+ { "DIRECTIVE", DIRECTIVE },
+ { "EXECUTE", EXECUTE },
+ { "EXPORTS", EXPORTS },
+ { "HEAPSIZE", HEAPSIZE },
+ { "IMPORTS", IMPORTS },
+ { "LIBRARY", LIBRARY },
+ { "NAME", NAME },
+ { "NONAME", NONAMEU },
+ { "noname", NONAMEL },
+ { "PRIVATE", PRIVATEU },
+ { "private", PRIVATEL },
+ { "READ", READ },
+ { "SECTIONS", SECTIONS },
+ { "SEGMENTS", SECTIONS },
+ { "SHARED", SHARED },
+ { "STACKSIZE", STACKSIZE_K },
+ { "VERSION", VERSIONK },
+ { "WRITE", WRITE },
+ { 0, 0 }
+};
+
+static int
+def_getc (void)
+{
+ int rv;
+
+ if (lex_parse_string)
+ {
+ if (lex_parse_string >= lex_parse_string_end)
+ rv = EOF;
+ else
+ rv = *lex_parse_string++;
+ }
+ else
+ {
+ rv = fgetc (the_file);
+ }
+ if (rv == '\n')
+ saw_newline = 1;
+ return rv;
+}
+
+static int
+def_ungetc (int c)
+{
+ if (lex_parse_string)
+ {
+ lex_parse_string--;
+ return c;
+ }
+ else
+ return ungetc (c, the_file);
+}
+
+static int
+def_lex (void)
+{
+ int c, i, q;
+
+ if (lex_forced_token)
+ {
+ i = lex_forced_token;
+ lex_forced_token = 0;
+#if TRACE
+ printf ("lex: forcing token %d\n", i);
+#endif
+ return i;
+ }
+
+ c = def_getc ();
+
+ /* Trim leading whitespace. */
+ while (c != EOF && (c == ' ' || c == '\t') && saw_newline)
+ c = def_getc ();
+
+ if (c == EOF)
+ {
+#if TRACE
+ printf ("lex: EOF\n");
+#endif
+ return 0;
+ }
+
+ if (saw_newline && c == ';')
+ {
+ do
+ {
+ c = def_getc ();
+ }
+ while (c != EOF && c != '\n');
+ if (c == '\n')
+ return def_lex ();
+ return 0;
+ }
+
+ /* Must be something else. */
+ saw_newline = 0;
+
+ if (ISDIGIT (c))
+ {
+ bufptr = 0;
+ while (c != EOF && (ISXDIGIT (c) || (c == 'x')))
+ {
+ put_buf (c);
+ c = def_getc ();
+ }
+ if (c != EOF)
+ def_ungetc (c);
+ yylval.digits = xstrdup (buffer);
+#if TRACE
+ printf ("lex: `%s' returns DIGITS\n", buffer);
+#endif
+ return DIGITS;
+ }
+
+ if (ISALPHA (c) || strchr ("$:-_?@", c))
+ {
+ bufptr = 0;
+ q = c;
+ put_buf (c);
+ c = def_getc ();
+
+ if (q == '@')
+ {
+ if (ISBLANK (c) ) /* '@' followed by whitespace. */
+ return (q);
+ else if (ISDIGIT (c)) /* '@' followed by digit. */
+ {
+ def_ungetc (c);
+ return (q);
+ }
+#if TRACE
+ printf ("lex: @ returns itself\n");
+#endif
+ }
+
+ while (c != EOF && (ISALNUM (c) || strchr ("$:-_?/@<>", c)))
+ {
+ put_buf (c);
+ c = def_getc ();
+ }
+ if (c != EOF)
+ def_ungetc (c);
+ if (ISALPHA (q)) /* Check for tokens. */
+ {
+ for (i = 0; tokens[i].name; i++)
+ if (strcmp (tokens[i].name, buffer) == 0)
+ {
+#if TRACE
+ printf ("lex: `%s' is a string token\n", buffer);
+#endif
+ return tokens[i].token;
+ }
+ }
+#if TRACE
+ printf ("lex: `%s' returns ID\n", buffer);
+#endif
+ yylval.id = xstrdup (buffer);
+ return ID;
+ }
+
+ if (c == '\'' || c == '"')
+ {
+ q = c;
+ c = def_getc ();
+ bufptr = 0;
+
+ while (c != EOF && c != q)
+ {
+ put_buf (c);
+ c = def_getc ();
+ }
+ yylval.id = xstrdup (buffer);
+#if TRACE
+ printf ("lex: `%s' returns ID\n", buffer);
+#endif
+ return ID;
+ }
+
+ if ( c == '=')
+ {
+ c = def_getc ();
+ if (c == '=')
+ {
+#if TRACE
+ printf ("lex: `==' returns EQUAL\n");
+#endif
+ return EQUAL;
+ }
+ def_ungetc (c);
+#if TRACE
+ printf ("lex: `=' returns itself\n");
+#endif
+ return '=';
+ }
+ if (c == '.' || c == ',')
+ {
+#if TRACE
+ printf ("lex: `%c' returns itself\n", c);
+#endif
+ return c;
+ }
+
+ if (c == '\n')
+ {
+ linenumber++;
+ saw_newline = 1;
+ }
+
+ /*printf ("lex: 0x%02x ignored\n", c); */
+ return def_lex ();
+}
diff --git a/binutils-2.21/ld/dep-in.sed b/binutils-2.21/ld/dep-in.sed
new file mode 100644
index 0000000..4f77b5d
--- /dev/null
+++ b/binutils-2.21/ld/dep-in.sed
@@ -0,0 +1,20 @@
+:loop
+/\\$/N
+s/\\\n */ /g
+t loop
+
+s! \./! !g
+s!@INCDIR@!$(INCDIR)!g
+s!@TOPDIR@/include!$(INCDIR)!g
+s!@BFDDIR@!$(BFDDIR)!g
+s!@TOPDIR@/bfd!$(BFDDIR)!g
+s!@SRCDIR@/!!g
+s! \.\./bfd/hosts/[^ ]*\.h! !g
+s! \.\./intl/libintl\.h!!g
+
+s/ *$//
+s/ */ /g
+s/^ */A/
+s/ / \\\
+B/g
+$s/$/ \\/
diff --git a/binutils-2.21/ld/elf-hints-local.h b/binutils-2.21/ld/elf-hints-local.h
new file mode 100644
index 0000000..67fcb5c
--- /dev/null
+++ b/binutils-2.21/ld/elf-hints-local.h
@@ -0,0 +1,46 @@
+/* Copyright (c) 1997 John D. Polstra.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE. */
+
+#ifndef _ELF_HINTS_H_
+#define _ELF_HINTS_H_
+
+#include "bfd_stdint.h"
+
+/* Hints file produced by ldconfig. */
+struct elfhints_hdr
+{
+ uint32_t magic; /* Magic number. */
+ uint32_t version; /* File version (1). */
+ uint32_t strtab; /* Offset of string table in file. */
+ uint32_t strsize; /* Size of string table. */
+ uint32_t dirlist; /* Offset of directory list in string table. */
+ uint32_t dirlistlen; /* strlen(dirlist). */
+ uint32_t spare[26]; /* Room for expansion. */
+};
+
+#define ELFHINTS_MAGIC 0x746e6845
+
+#define _PATH_ELF_HINTS "/var/run/ld-elf.so.hints"
+
+#endif /* !_ELF_HINTS_H_ */
diff --git a/binutils-2.21/ld/emulparams/README b/binutils-2.21/ld/emulparams/README
new file mode 100644
index 0000000..b3d6d26
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/README
@@ -0,0 +1,2 @@
+The files in this directory are read by genscripts.sh as shell commands.
+They set parameters for the emulations.
diff --git a/binutils-2.21/ld/emulparams/aix5ppc.sh b/binutils-2.21/ld/emulparams/aix5ppc.sh
new file mode 100644
index 0000000..ff94530
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/aix5ppc.sh
@@ -0,0 +1,6 @@
+TEMPLATE_NAME=aix
+SCRIPT_NAME=aix
+OUTPUT_FORMAT="aixcoff-rs6000"
+OUTPUT_FORMAT_32BIT="aixcoff-rs6000"
+OUTPUT_FORMAT_64BIT="aix5coff64-rs6000"
+ARCH=powerpc
diff --git a/binutils-2.21/ld/emulparams/aix5rs6.sh b/binutils-2.21/ld/emulparams/aix5rs6.sh
new file mode 100644
index 0000000..958e4c1
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/aix5rs6.sh
@@ -0,0 +1,6 @@
+TEMPLATE_NAME=aix
+SCRIPT_NAME=aix
+OUTPUT_FORMAT="aixcoff-rs6000"
+OUTPUT_FORMAT_32BIT="aixcoff-rs6000"
+OUTPUT_FORMAT_64BIT="aix5coff64-rs6000"
+ARCH=rs6000
diff --git a/binutils-2.21/ld/emulparams/aixppc.sh b/binutils-2.21/ld/emulparams/aixppc.sh
new file mode 100644
index 0000000..9307693
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/aixppc.sh
@@ -0,0 +1,7 @@
+TEMPLATE_NAME=aix
+SCRIPT_NAME=aix
+OUTPUT_FORMAT="aixcoff-rs6000"
+OUTPUT_FORMAT_32BIT="aixcoff-rs6000"
+OUTPUT_FORMAT_64BIT="aixcoff64-rs6000"
+ARCH=powerpc
+
diff --git a/binutils-2.21/ld/emulparams/aixrs6.sh b/binutils-2.21/ld/emulparams/aixrs6.sh
new file mode 100644
index 0000000..6033dc1
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/aixrs6.sh
@@ -0,0 +1,7 @@
+TEMPLATE_NAME=aix
+SCRIPT_NAME=aix
+OUTPUT_FORMAT="aixcoff-rs6000"
+OUTPUT_FORMAT_32BIT="aixcoff-rs6000"
+OUTPUT_FORMAT_64BIT="aixcoff64-rs6000"
+ARCH=rs6000
+
diff --git a/binutils-2.21/ld/emulparams/alpha.sh b/binutils-2.21/ld/emulparams/alpha.sh
new file mode 100644
index 0000000..141923f
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/alpha.sh
@@ -0,0 +1,3 @@
+SCRIPT_NAME=alpha
+OUTPUT_FORMAT="ecoff-littlealpha"
+ARCH=alpha
diff --git a/binutils-2.21/ld/emulparams/alphavms.sh b/binutils-2.21/ld/emulparams/alphavms.sh
new file mode 100644
index 0000000..ac9b3a2
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/alphavms.sh
@@ -0,0 +1,7 @@
+SCRIPT_NAME=alphavms
+
+OUTPUT_FORMAT="vms-alpha"
+ARCH=alpha
+
+COMPILE_IN=yes
+EXTRA_EM_FILE=vms \ No newline at end of file
diff --git a/binutils-2.21/ld/emulparams/arcelf.sh b/binutils-2.21/ld/emulparams/arcelf.sh
new file mode 100644
index 0000000..cd334d6
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/arcelf.sh
@@ -0,0 +1,12 @@
+SCRIPT_NAME=elf
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
+OUTPUT_FORMAT="elf32-littlearc"
+LITTLE_OUTPUT_FORMAT="elf32-littlearc"
+BIG_OUTPUT_FORMAT="elf32-bigarc"
+NO_RELA_RELOCS=yes
+TEXT_START_ADDR=0x0
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ARCH=arc
+MACHINE=
+ENTRY=start
diff --git a/binutils-2.21/ld/emulparams/arm_epoc_pe.sh b/binutils-2.21/ld/emulparams/arm_epoc_pe.sh
new file mode 100644
index 0000000..51a3f76
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/arm_epoc_pe.sh
@@ -0,0 +1,9 @@
+ARCH=arm
+SCRIPT_NAME=epocpe
+OUTPUT_FORMAT="epoc-pei-arm-little"
+LITTLE_OUTPUT_FORMAT="epoc-pei-arm-little"
+BIG_OUTPUT_FORMAT="epoc-pei-arm-big"
+TEMPLATE_NAME=pe
+SUBSYSTEM=PE_DEF_SUBSYSTEM
+INITIAL_SYMBOL_CHAR=\"_\"
+TARGET_PAGE_SIZE=0x1000
diff --git a/binutils-2.21/ld/emulparams/arm_wince_pe.sh b/binutils-2.21/ld/emulparams/arm_wince_pe.sh
new file mode 100644
index 0000000..133a51c
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/arm_wince_pe.sh
@@ -0,0 +1,13 @@
+ARCH=arm
+SCRIPT_NAME=pe
+
+OUTPUT_FORMAT="pei-arm-wince-little"
+LITTLE_OUTPUT_FORMAT="pei-arm-wince-little"
+BIG_OUTPUT_FORMAT="pei-arm-wince-big"
+
+RELOCATEABLE_OUTPUT_FORMAT="pe-arm-wince-little"
+
+TEMPLATE_NAME=pe
+SUBSYSTEM=PE_DEF_SUBSYSTEM
+INITIAL_SYMBOL_CHAR=\"\"
+TARGET_PAGE_SIZE=0x1000
diff --git a/binutils-2.21/ld/emulparams/armaoutb.sh b/binutils-2.21/ld/emulparams/armaoutb.sh
new file mode 100644
index 0000000..efef2c3
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/armaoutb.sh
@@ -0,0 +1,6 @@
+SCRIPT_NAME=armaout
+OUTPUT_FORMAT="a.out-arm-big"
+HEADER_START_ADDR=0x8000
+TEXT_START_ADDR=0x8000
+TARGET_PAGE_SIZE=32768
+ARCH=arm
diff --git a/binutils-2.21/ld/emulparams/armaoutl.sh b/binutils-2.21/ld/emulparams/armaoutl.sh
new file mode 100644
index 0000000..5eccc4c
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/armaoutl.sh
@@ -0,0 +1,6 @@
+SCRIPT_NAME=armaout
+OUTPUT_FORMAT="a.out-arm-little"
+HEADER_START_ADDR=0x8000
+TEXT_START_ADDR=0x8000
+TARGET_PAGE_SIZE=32768
+ARCH=arm
diff --git a/binutils-2.21/ld/emulparams/armcoff.sh b/binutils-2.21/ld/emulparams/armcoff.sh
new file mode 100644
index 0000000..91df7d3
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/armcoff.sh
@@ -0,0 +1,6 @@
+ARCH=arm
+SCRIPT_NAME=armcoff
+OUTPUT_FORMAT="coff-arm-little"
+LITTLE_OUTPUT_FORMAT="coff-arm-little"
+BIG_OUTPUT_FORMAT="coff-arm-big"
+TEMPLATE_NAME=armcoff
diff --git a/binutils-2.21/ld/emulparams/armelf.sh b/binutils-2.21/ld/emulparams/armelf.sh
new file mode 100644
index 0000000..672b208
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/armelf.sh
@@ -0,0 +1,35 @@
+MACHINE=
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-littlearm"
+BIG_OUTPUT_FORMAT="elf32-bigarm"
+LITTLE_OUTPUT_FORMAT="elf32-littlearm"
+TEXT_START_ADDR=0x8000
+TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=armelf
+OTHER_TEXT_SECTIONS='*(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)'
+OTHER_BSS_SYMBOLS='__bss_start__ = .;'
+OTHER_BSS_END_SYMBOLS='_bss_end__ = . ; __bss_end__ = . ;'
+OTHER_END_SYMBOLS='__end__ = . ;'
+OTHER_SECTIONS='.note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }'
+ATTRS_SECTIONS='.ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }'
+OTHER_READONLY_SECTIONS="
+ .ARM.extab ${RELOCATING-0} : { *(.ARM.extab${RELOCATING+* .gnu.linkonce.armextab.*}) }
+ ${RELOCATING+ PROVIDE_HIDDEN (__exidx_start = .); }
+ .ARM.exidx ${RELOCATING-0} : { *(.ARM.exidx${RELOCATING+* .gnu.linkonce.armexidx.*}) }
+ ${RELOCATING+ PROVIDE_HIDDEN (__exidx_end = .); }"
+
+DATA_START_SYMBOLS='__data_start = . ;';
+
+GENERATE_SHLIB_SCRIPT=yes
+
+ARCH=arm
+MACHINE=
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ENTRY=_start
+EMBEDDED=yes
+
+# This sets the stack to the top of the simulator memory (2^19 bytes).
+STACK_ADDR=0x80000
+
+# ARM does not support .s* sections.
+NO_SMALL_DATA=yes
diff --git a/binutils-2.21/ld/emulparams/armelf_fbsd.sh b/binutils-2.21/ld/emulparams/armelf_fbsd.sh
new file mode 100644
index 0000000..ee9520d
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/armelf_fbsd.sh
@@ -0,0 +1,3 @@
+. ${srcdir}/emulparams/armelf.sh
+. ${srcdir}/emulparams/elf_fbsd.sh
+TARGET2_TYPE=got-rel
diff --git a/binutils-2.21/ld/emulparams/armelf_linux.sh b/binutils-2.21/ld/emulparams/armelf_linux.sh
new file mode 100644
index 0000000..35891f1
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/armelf_linux.sh
@@ -0,0 +1,24 @@
+ARCH=arm
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-littlearm"
+BIG_OUTPUT_FORMAT="elf32-bigarm"
+LITTLE_OUTPUT_FORMAT="elf32-littlearm"
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
+TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=armelf
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+
+DATA_START_SYMBOLS='PROVIDE (__data_start = .);';
+OTHER_TEXT_SECTIONS='*(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)'
+OTHER_BSS_SYMBOLS='__bss_start__ = .;'
+OTHER_BSS_END_SYMBOLS='_bss_end__ = . ; __bss_end__ = . ;'
+OTHER_END_SYMBOLS='__end__ = . ;'
+OTHER_SECTIONS='.note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }'
+
+TEXT_START_ADDR=0x00008000
+TARGET2_TYPE=got-rel
+
+# ARM does not support .s* sections.
+NO_SMALL_DATA=yes
diff --git a/binutils-2.21/ld/emulparams/armelf_linux_eabi.sh b/binutils-2.21/ld/emulparams/armelf_linux_eabi.sh
new file mode 100644
index 0000000..5b0c6b8
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/armelf_linux_eabi.sh
@@ -0,0 +1,9 @@
+. ${srcdir}/emulparams/armelf_linux.sh
+
+# Use the ARM ABI-compliant exception-handling sections.
+OTHER_READONLY_SECTIONS="
+ .ARM.extab ${RELOCATING-0} : { *(.ARM.extab${RELOCATING+* .gnu.linkonce.armextab.*}) }
+ ${RELOCATING+ PROVIDE_HIDDEN (__exidx_start = .); }
+ .ARM.exidx ${RELOCATING-0} : { *(.ARM.exidx${RELOCATING+* .gnu.linkonce.armexidx.*}) }
+ ${RELOCATING+ PROVIDE_HIDDEN (__exidx_end = .); }"
+
diff --git a/binutils-2.21/ld/emulparams/armelf_nbsd.sh b/binutils-2.21/ld/emulparams/armelf_nbsd.sh
new file mode 100644
index 0000000..517cd62
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/armelf_nbsd.sh
@@ -0,0 +1,7 @@
+. ${srcdir}/emulparams/armelf.sh
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+TEXT_START_ADDR=0x00008000
+TARGET2_TYPE=got-rel
+
+unset STACK_ADDR
+unset EMBEDDED
diff --git a/binutils-2.21/ld/emulparams/armelf_vxworks.sh b/binutils-2.21/ld/emulparams/armelf_vxworks.sh
new file mode 100644
index 0000000..ca5c907
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/armelf_vxworks.sh
@@ -0,0 +1,6 @@
+. ${srcdir}/emulparams/armelf.sh
+OUTPUT_FORMAT="elf32-littlearm-vxworks"
+BIG_OUTPUT_FORMAT="elf32-bigarm-vxworks"
+LITTLE_OUTPUT_FORMAT="$OUTPUT_FORMAT"
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+. ${srcdir}/emulparams/vxworks.sh
diff --git a/binutils-2.21/ld/emulparams/armelfb.sh b/binutils-2.21/ld/emulparams/armelfb.sh
new file mode 100644
index 0000000..2d8f382
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/armelfb.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/armelf.sh
+OUTPUT_FORMAT="elf32-bigarm"
diff --git a/binutils-2.21/ld/emulparams/armelfb_linux.sh b/binutils-2.21/ld/emulparams/armelfb_linux.sh
new file mode 100644
index 0000000..9ce9e9a
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/armelfb_linux.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/armelf_linux.sh
+OUTPUT_FORMAT="elf32-bigarm"
diff --git a/binutils-2.21/ld/emulparams/armelfb_linux_eabi.sh b/binutils-2.21/ld/emulparams/armelfb_linux_eabi.sh
new file mode 100644
index 0000000..f71c741
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/armelfb_linux_eabi.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/armelf_linux_eabi.sh
+OUTPUT_FORMAT="elf32-bigarm"
diff --git a/binutils-2.21/ld/emulparams/armelfb_nbsd.sh b/binutils-2.21/ld/emulparams/armelfb_nbsd.sh
new file mode 100644
index 0000000..7ab6ce0
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/armelfb_nbsd.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/armelf_nbsd.sh
+OUTPUT_FORMAT="elf32-bigarm"
diff --git a/binutils-2.21/ld/emulparams/armnbsd.sh b/binutils-2.21/ld/emulparams/armnbsd.sh
new file mode 100644
index 0000000..dd4768d
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/armnbsd.sh
@@ -0,0 +1,9 @@
+SCRIPT_NAME=aout
+TEXT_START_ADDR=0x1020
+case ${LD_FLAG} in
+ n|N) TEXT_START_ADDR=0x1000 ;;
+esac
+OUTPUT_FORMAT="a.out-arm-netbsd"
+TARGET_PAGE_SIZE=0x1000
+ARCH=arm
+EXECUTABLE_SYMBOLS='__DYNAMIC = 0;'
diff --git a/binutils-2.21/ld/emulparams/armnto.sh b/binutils-2.21/ld/emulparams/armnto.sh
new file mode 100644
index 0000000..f89f14f
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/armnto.sh
@@ -0,0 +1,28 @@
+MACHINE=
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-littlearm"
+BIG_OUTPUT_FORMAT="elf32-bigarm"
+LITTLE_OUTPUT_FORMAT="elf32-littlearm"
+TEXT_START_ADDR=0x00100000
+TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=armelf
+OTHER_TEXT_SECTIONS='*(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)'
+OTHER_BSS_SYMBOLS='__bss_start__ = .;'
+OTHER_BSS_END_SYMBOLS='_bss_end__ = . ; __bss_end__ = . ;'
+OTHER_END_SYMBOLS='__end__ = . ;'
+
+DATA_START_SYMBOLS='__data_start = . ;';
+
+GENERATE_SHLIB_SCRIPT=yes
+
+ARCH=arm
+MACHINE=
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+
+ENTRY=_start
+
+# This sets the stack to the top of the simulator memory (2^19 bytes).
+STACK_ADDR=0x80000
+
+# ARM does not support .s* sections.
+NO_SMALL_DATA=yes
diff --git a/binutils-2.21/ld/emulparams/armpe.sh b/binutils-2.21/ld/emulparams/armpe.sh
new file mode 100644
index 0000000..0c711a5
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/armpe.sh
@@ -0,0 +1,14 @@
+ARCH=arm
+SCRIPT_NAME=pe
+
+OUTPUT_FORMAT="pei-arm-little"
+LITTLE_OUTPUT_FORMAT="pei-arm-little"
+BIG_OUTPUT_FORMAT="pei-arm-big"
+
+RELOCATEABLE_OUTPUT_FORMAT="pe-arm-little"
+
+TEMPLATE_NAME=pe
+SUBSYSTEM=PE_DEF_SUBSYSTEM
+INITIAL_SYMBOL_CHAR=\"_\"
+
+TARGET_PAGE_SIZE=0x1000
diff --git a/binutils-2.21/ld/emulparams/armsymbian.sh b/binutils-2.21/ld/emulparams/armsymbian.sh
new file mode 100644
index 0000000..f852702
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/armsymbian.sh
@@ -0,0 +1,22 @@
+. ${srcdir}/emulparams/armelf.sh
+SCRIPT_NAME="armbpabi"
+GENERATE_COMBRELOC_SCRIPT=1
+OUTPUT_FORMAT="elf32-littlearm-symbian"
+BIG_OUTPUT_FORMAT="elf32-bigarm-symbian"
+LITTLE_OUTPUT_FORMAT="$OUTPUT_FORMAT"
+TARGET1_IS_REL=1
+TARGET2_TYPE=abs
+# On BPABI systems, program headers should not be mapped.
+EMBEDDED=yes
+
+# As for armelf.sh, but add the SymbianOS-specific
+# .ARM.exidx$${Base,Limit} symbols.
+OTHER_READONLY_SECTIONS="
+ .ARM.extab ${RELOCATING-0} : { *(.ARM.extab${RELOCATING+* .gnu.linkonce.armextab.*}) }
+ ${RELOCATING+ PROVIDE_HIDDEN (.ARM.exidx\$\$Base = .); }
+ ${RELOCATING+ PROVIDE_HIDDEN (__exidx_start = .); }
+ .ARM.exidx ${RELOCATING-0} : { *(.ARM.exidx${RELOCATING+* .gnu.linkonce.armexidx.*}) }
+ ${RELOCATING+ PROVIDE_HIDDEN (__exidx_end = .); }
+ ${RELOCATING+ PROVIDE_HIDDEN (.ARM.exidx\$\$Limit = .); }"
+
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
diff --git a/binutils-2.21/ld/emulparams/avr1.sh b/binutils-2.21/ld/emulparams/avr1.sh
new file mode 100644
index 0000000..2f6af99
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/avr1.sh
@@ -0,0 +1,12 @@
+ARCH=avr:1
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+
+TEXT_LENGTH=8K
+DATA_ORIGIN=0x800060
+DATA_LENGTH=0
+EXTRA_EM_FILE=avrelf
diff --git a/binutils-2.21/ld/emulparams/avr2.sh b/binutils-2.21/ld/emulparams/avr2.sh
new file mode 100644
index 0000000..cb35bb9
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/avr2.sh
@@ -0,0 +1,12 @@
+ARCH=avr:2
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+
+TEXT_LENGTH=8K
+DATA_ORIGIN=0x800060
+DATA_LENGTH=0xffa0
+EXTRA_EM_FILE=avrelf
diff --git a/binutils-2.21/ld/emulparams/avr25.sh b/binutils-2.21/ld/emulparams/avr25.sh
new file mode 100644
index 0000000..2965347
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/avr25.sh
@@ -0,0 +1,12 @@
+ARCH=avr:25
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+
+TEXT_LENGTH=8K
+DATA_ORIGIN=0x800060
+DATA_LENGTH=0xffa0
+EXTRA_EM_FILE=avrelf
diff --git a/binutils-2.21/ld/emulparams/avr3.sh b/binutils-2.21/ld/emulparams/avr3.sh
new file mode 100644
index 0000000..a0b86c4
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/avr3.sh
@@ -0,0 +1,12 @@
+ARCH=avr:3
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+
+TEXT_LENGTH=128K
+DATA_ORIGIN=0x800060
+DATA_LENGTH=0xffa0
+EXTRA_EM_FILE=avrelf
diff --git a/binutils-2.21/ld/emulparams/avr31.sh b/binutils-2.21/ld/emulparams/avr31.sh
new file mode 100644
index 0000000..6e1ee0a
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/avr31.sh
@@ -0,0 +1,12 @@
+ARCH=avr:31
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+
+TEXT_LENGTH=128K
+DATA_ORIGIN=0x800060
+DATA_LENGTH=0xffa0
+EXTRA_EM_FILE=avrelf
diff --git a/binutils-2.21/ld/emulparams/avr35.sh b/binutils-2.21/ld/emulparams/avr35.sh
new file mode 100644
index 0000000..abc6790
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/avr35.sh
@@ -0,0 +1,12 @@
+ARCH=avr:35
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+
+TEXT_LENGTH=64K
+DATA_ORIGIN=0x800060
+DATA_LENGTH=0xffa0
+EXTRA_EM_FILE=avrelf
diff --git a/binutils-2.21/ld/emulparams/avr4.sh b/binutils-2.21/ld/emulparams/avr4.sh
new file mode 100644
index 0000000..deaf3e7
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/avr4.sh
@@ -0,0 +1,12 @@
+ARCH=avr:4
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+
+TEXT_LENGTH=8K
+DATA_ORIGIN=0x800060
+DATA_LENGTH=0xffa0
+EXTRA_EM_FILE=avrelf
diff --git a/binutils-2.21/ld/emulparams/avr5.sh b/binutils-2.21/ld/emulparams/avr5.sh
new file mode 100644
index 0000000..2d0fc4f
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/avr5.sh
@@ -0,0 +1,12 @@
+ARCH=avr:5
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+
+TEXT_LENGTH=128K
+DATA_ORIGIN=0x800060
+DATA_LENGTH=0xffa0
+EXTRA_EM_FILE=avrelf
diff --git a/binutils-2.21/ld/emulparams/avr51.sh b/binutils-2.21/ld/emulparams/avr51.sh
new file mode 100644
index 0000000..2069dfe
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/avr51.sh
@@ -0,0 +1,12 @@
+ARCH=avr:51
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+
+TEXT_LENGTH=128K
+DATA_ORIGIN=0x800100
+DATA_LENGTH=0xff00
+EXTRA_EM_FILE=avrelf
diff --git a/binutils-2.21/ld/emulparams/avr6.sh b/binutils-2.21/ld/emulparams/avr6.sh
new file mode 100644
index 0000000..c1a4fab
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/avr6.sh
@@ -0,0 +1,12 @@
+ARCH=avr:6
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+
+TEXT_LENGTH=1024K
+DATA_ORIGIN=0x800200
+DATA_LENGTH=0xfe00
+EXTRA_EM_FILE=avrelf
diff --git a/binutils-2.21/ld/emulparams/bfin.sh b/binutils-2.21/ld/emulparams/bfin.sh
new file mode 100755
index 0000000..3de8921
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/bfin.sh
@@ -0,0 +1,11 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-bfin"
+TEXT_START_ADDR=0x0
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+TARGET_PAGE_SIZE=0x1000
+ARCH=bfin
+MACHINE=
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+EMBEDDED=yes
+USER_LABEL_PREFIX=_
diff --git a/binutils-2.21/ld/emulparams/coff_i860.sh b/binutils-2.21/ld/emulparams/coff_i860.sh
new file mode 100644
index 0000000..03b6493
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/coff_i860.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=i860coff
+OUTPUT_FORMAT="coff-i860"
+PAGE_SIZE=0x1000
+MAXPAGESIZE=0x1000
+ARCH=i860
diff --git a/binutils-2.21/ld/emulparams/coff_sparc.sh b/binutils-2.21/ld/emulparams/coff_sparc.sh
new file mode 100644
index 0000000..d66cf61
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/coff_sparc.sh
@@ -0,0 +1,9 @@
+SCRIPT_NAME=sparccoff
+OUTPUT_FORMAT="coff-sparc"
+# following are dubious (borrowed from sparc lynx)
+TARGET_PAGE_SIZE=0x1000
+TEXT_START_ADDR=0
+case ${LD_FLAG} in
+ n|N) TEXT_START_ADDR=0x1000 ;;
+esac
+ARCH=sparc
diff --git a/binutils-2.21/ld/emulparams/crisaout.sh b/binutils-2.21/ld/emulparams/crisaout.sh
new file mode 100644
index 0000000..625e90f
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/crisaout.sh
@@ -0,0 +1,6 @@
+# This is for embedded products and elinux (no MMU) with a.out.
+SCRIPT_NAME=crisaout
+OUTPUT_FORMAT="a.out-cris"
+TARGET_PAGE_SIZE=2
+TEXT_START_ADDR=0
+ARCH=cris
diff --git a/binutils-2.21/ld/emulparams/criself.sh b/binutils-2.21/ld/emulparams/criself.sh
new file mode 100644
index 0000000..f709a1b
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/criself.sh
@@ -0,0 +1,104 @@
+# This is for embedded products (no MMU) with ELF.
+MACHINE=
+SCRIPT_NAME=elf
+TEMPLATE_NAME=elf32
+
+# Symbols have underscore prepended.
+OUTPUT_FORMAT="elf32-us-cris"
+NO_REL_RELOCS=yes
+ARCH=cris
+MAXPAGESIZE=32
+ENTRY=__start
+EMBEDDED=yes
+ALIGNMENT=32
+TEXT_START_ADDR=0
+
+# Put crt0 for flash/eprom etc. in this section.
+INITIAL_READONLY_SECTIONS=
+if test -z "${CREATE_SHLIB}"; then
+ INITIAL_READONLY_SECTIONS=".interp ${RELOCATING-0} : { *(.interp) }"
+fi
+INITIAL_READONLY_SECTIONS="${INITIAL_READONLY_SECTIONS}
+ .startup : { KEEP(*(.startup)) }"
+
+# Setting __Stext to . in TEXT_START_SYMBOLS doesn't get what we want
+# most of the time, which is the start of all read-only sections;
+# there's at least .startup and .init before it. We have to resort to
+# trickery. Note that __Stext is always defined, not PROVIDE:d, since
+# external tools look for it.
+TEXT_START_SYMBOLS='__Stext = ADDR (.startup);'
+
+# The __start dance is to get us through assumptions about entry
+# symbols, and to clear _start for normal use with sane programs.
+EXECUTABLE_SYMBOLS='
+__start = DEFINED(__start) ? __start :
+ DEFINED(_start) ? _start :
+ DEFINED(start) ? start :
+ DEFINED(.startup) ? .startup + 2 : 2;
+'
+
+# Smuggle an "OTHER_TEXT_END_SYMBOLS" here.
+OTHER_READONLY_SECTIONS="${RELOCATING+PROVIDE (__Etext = .);}"
+DATA_START_SYMBOLS='PROVIDE (__Sdata = .);'
+
+# Smuggle an "OTHER_DATA_END_SYMBOLS" here.
+OTHER_SDATA_SECTIONS="${RELOCATING+PROVIDE (__Edata = .);}"
+
+# If .bss does not immediately follow .data but has its own start
+# address, we can't get to it with OTHER_BSS_SYMBOLS, neither can we
+# use ADDR(.bss) there. Instead, we use the symbol support for the
+# end symbol.
+OTHER_BSS_END_SYMBOLS='
+ PROVIDE (__Ebss = .);
+ __Sbss = ADDR (.bss);
+ PROVIDE (_bss_start = __Sbss);
+'
+OTHER_END_SYMBOLS='PROVIDE (__end = .);'
+
+INIT_START='
+ . = ALIGN(2);
+ ___init__start = .;
+ PROVIDE (___do_global_ctors = .);
+'
+
+INIT_END='
+ PROVIDE (__init__end = .);
+ PROVIDE (___init__end = .);
+'
+
+FINI_START='
+ . = ALIGN (2);
+ ___fini__start = .;
+ PROVIDE (___do_global_dtors = .);
+'
+
+FINI_END='
+ PROVIDE (__fini__end = .);
+ ___fini__end = .;
+'
+
+CTOR_START='
+ PROVIDE (___ctors = .);
+ ___elf_ctors_dtors_begin = .;
+'
+
+CTOR_END='
+ PROVIDE (___ctors_end = .);
+'
+
+DTOR_START='
+ PROVIDE (___dtors = .);
+'
+
+CTOR_END='
+ PROVIDE (___dtors_end = .);
+ ___elf_ctors_dtors_end = .;
+'
+
+# Also add the other symbols provided for rsim/xsim and elinux.
+OTHER_SYMBOLS='
+ PROVIDE (__Eall = .);
+ PROVIDE (__Endmem = 0x10000000);
+ PROVIDE (__Stacksize = 0);
+'
+NO_SMALL_DATA=yes
diff --git a/binutils-2.21/ld/emulparams/crislinux.sh b/binutils-2.21/ld/emulparams/crislinux.sh
new file mode 100644
index 0000000..8a1a5b8
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/crislinux.sh
@@ -0,0 +1,40 @@
+# This is an approximation of what we want for a real linux system (with MMU and ELF).
+MACHINE=
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-cris"
+NO_REL_RELOCS=yes
+ARCH=cris
+TEMPLATE_NAME=elf32
+
+ENTRY=_start
+
+# Needed? Perhaps should be page-size alignment.
+ALIGNMENT=32
+GENERATE_SHLIB_SCRIPT=yes
+
+# Is this high enough and low enough?
+TEXT_START_ADDR=0x80000
+
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+
+# We don't do the hoops through DEFINED to provide [_]*start, as it
+# doesn't work with --gc-sections, and the start-name is pretty fixed
+# anyway.
+TEXT_START_SYMBOLS='PROVIDE (__Stext = .);'
+
+# Smuggle an "OTHER_TEXT_END_SYMBOLS" here.
+OTHER_READONLY_SECTIONS="${RELOCATING+PROVIDE (__Etext = .);}"
+DATA_START_SYMBOLS='PROVIDE (__Sdata = .);'
+
+# Smuggle an "OTHER_DATA_END_SYMBOLS" here.
+OTHER_SDATA_SECTIONS="${RELOCATING+PROVIDE (__Edata = .);}"
+OTHER_BSS_SYMBOLS='PROVIDE (__Sbss = .);'
+OTHER_BSS_END_SYMBOLS='PROVIDE (__Ebss = .);'
+
+# Also add the other symbols provided for rsim/xsim and elinux.
+OTHER_SYMBOLS='
+ PROVIDE (__Eall = .);
+ PROVIDE (__Endmem = 0x10000000);
+ PROVIDE (__Stacksize = 0);
+'
+NO_SMALL_DATA=yes
diff --git a/binutils-2.21/ld/emulparams/d10velf.sh b/binutils-2.21/ld/emulparams/d10velf.sh
new file mode 100644
index 0000000..c8de5c4
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/d10velf.sh
@@ -0,0 +1,9 @@
+MACHINE=
+SCRIPT_NAME=elfd10v
+OUTPUT_FORMAT="elf32-d10v"
+TEXT_START_ADDR=0x01014000
+READONLY_START_ADDR=0x02000004
+ARCH=d10v
+MAXPAGESIZE=32
+EMBEDDED=t
+TEMPLATE_NAME=elf32
diff --git a/binutils-2.21/ld/emulparams/d30v_e.sh b/binutils-2.21/ld/emulparams/d30v_e.sh
new file mode 100644
index 0000000..617a048
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/d30v_e.sh
@@ -0,0 +1,22 @@
+MACHINE=
+SCRIPT_NAME=elfd30v
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
+OUTPUT_FORMAT="elf32-d30v"
+TEXT_START_ADDR=0x00000000
+DATA_START_ADDR=0x20000000
+EMEM_START_ADDR=0x80000000
+STACK_START_ADDR=0x20008000
+EIT_START_ADDR=0xfffff020
+TEXT_SIZE=64K
+DATA_SIZE=32K
+EMEM_SIZE=8M
+EIT_SIZE=320
+TEXT_MEMORY=emem
+DATA_MEMORY=emem
+BSS_MEMORY=emem
+TEXT_DEF_SECTION=""
+DATA_DEF_SECTION=""
+EMEM_DEF_SECTION="(rwx)"
+ARCH=d30v
+EMBEDDED=t
diff --git a/binutils-2.21/ld/emulparams/d30v_o.sh b/binutils-2.21/ld/emulparams/d30v_o.sh
new file mode 100644
index 0000000..79ba83b
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/d30v_o.sh
@@ -0,0 +1,22 @@
+MACHINE=
+SCRIPT_NAME=elfd30v
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
+OUTPUT_FORMAT="elf32-d30v"
+TEXT_START_ADDR=0x00000000
+DATA_START_ADDR=0x20000000
+EMEM_START_ADDR=0x80000000
+STACK_START_ADDR=0x20008000
+EIT_START_ADDR=0xfffff020
+TEXT_SIZE=64K
+DATA_SIZE=32K
+EMEM_SIZE=8M
+EIT_SIZE=320
+TEXT_MEMORY=text
+DATA_MEMORY=data
+BSS_MEMORY=data
+TEXT_DEF_SECTION="(x)"
+DATA_DEF_SECTION="(rw)"
+EMEM_DEF_SECTION=""
+ARCH=d30v
+EMBEDDED=t
diff --git a/binutils-2.21/ld/emulparams/d30velf.sh b/binutils-2.21/ld/emulparams/d30velf.sh
new file mode 100644
index 0000000..ab0d70f
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/d30velf.sh
@@ -0,0 +1,22 @@
+MACHINE=
+SCRIPT_NAME=elfd30v
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
+OUTPUT_FORMAT="elf32-d30v"
+TEXT_START_ADDR=0x00000000
+DATA_START_ADDR=0x20000000
+EMEM_START_ADDR=0x80000000
+STACK_START_ADDR=0x20008000
+EIT_START_ADDR=0xfffff020
+TEXT_SIZE=2000K
+DATA_SIZE=2000K
+EMEM_SIZE=8M
+EIT_SIZE=320
+TEXT_MEMORY=text
+DATA_MEMORY=data
+BSS_MEMORY=data
+TEXT_DEF_SECTION="(x)"
+DATA_DEF_SECTION="(rw)"
+EMEM_DEF_SECTION=""
+ARCH=d30v
+EMBEDDED=t
diff --git a/binutils-2.21/ld/emulparams/delta68.sh b/binutils-2.21/ld/emulparams/delta68.sh
new file mode 100644
index 0000000..e3c5909
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/delta68.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=delta68
+OUTPUT_FORMAT="coff-m68k-sysv"
+TEXT_START_ADDR=0x2000
+PAGE_SIZE=0x1000000
+ARCH=m68k
diff --git a/binutils-2.21/ld/emulparams/elf32_dlx.sh b/binutils-2.21/ld/emulparams/elf32_dlx.sh
new file mode 100644
index 0000000..525b209
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32_dlx.sh
@@ -0,0 +1,10 @@
+SCRIPT_NAME=dlx
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
+OUTPUT_FORMAT="elf32-dlx"
+ARCH=dlx
+MACHINE=
+TEXT_START_ADDR=0
+TARGET_PAGE_SIZE=1
+EMBEDDED=yes
+MAXPAGESIZE=1
diff --git a/binutils-2.21/ld/emulparams/elf32_i860.sh b/binutils-2.21/ld/emulparams/elf32_i860.sh
new file mode 100644
index 0000000..482e3d1
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32_i860.sh
@@ -0,0 +1,12 @@
+# A work in progress...
+SCRIPT_NAME=elf
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
+OUTPUT_FORMAT="elf32-i860-little"
+BIG_OUTPUT_FORMAT="elf32-i860"
+LITTLE_OUTPUT_FORMAT="elf32-i860-little"
+NO_REL_RELOCS=yes
+TEXT_START_ADDR=0
+PAGE_SIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ARCH=i860
diff --git a/binutils-2.21/ld/emulparams/elf32_i960.sh b/binutils-2.21/ld/emulparams/elf32_i960.sh
new file mode 100644
index 0000000..dd05a8f
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32_i960.sh
@@ -0,0 +1,10 @@
+SCRIPT_NAME=elf
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
+OUTPUT_FORMAT="elf32-i960"
+NO_RELA_RELOCS=yes
+ARCH=i960
+MACHINE=
+TEXT_START_ADDR=0
+EMBEDDED=yes
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
diff --git a/binutils-2.21/ld/emulparams/elf32_sparc.sh b/binutils-2.21/ld/emulparams/elf32_sparc.sh
new file mode 100644
index 0000000..13af316
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32_sparc.sh
@@ -0,0 +1,18 @@
+# If you change this file, please also look at files which source this one:
+# elf32_sparc_vxworks.sh
+
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-sparc"
+NO_REL_RELOCS=yes
+TEXT_START_ADDR=0x10000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
+ALIGNMENT=8
+ARCH=sparc
+MACHINE=
+TEMPLATE_NAME=elf32
+DATA_PLT=
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+NOP=0x01000000
+NO_SMALL_DATA=yes
diff --git a/binutils-2.21/ld/emulparams/elf32_sparc_sol2.sh b/binutils-2.21/ld/emulparams/elf32_sparc_sol2.sh
new file mode 100644
index 0000000..46ca284
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32_sparc_sol2.sh
@@ -0,0 +1,4 @@
+. ${srcdir}/emulparams/elf32_sparc.sh
+. ${srcdir}/emulparams/solaris2.sh
+EXTRA_EM_FILE=solaris2
+OUTPUT_FORMAT="elf32-sparc-sol2"
diff --git a/binutils-2.21/ld/emulparams/elf32_sparc_vxworks.sh b/binutils-2.21/ld/emulparams/elf32_sparc_vxworks.sh
new file mode 100644
index 0000000..12a9b38
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32_sparc_vxworks.sh
@@ -0,0 +1,4 @@
+. ${srcdir}/emulparams/elf32_sparc.sh
+OUTPUT_FORMAT="elf32-sparc-vxworks"
+unset DATA_PLT
+. ${srcdir}/emulparams/vxworks.sh
diff --git a/binutils-2.21/ld/emulparams/elf32_spu.sh b/binutils-2.21/ld/emulparams/elf32_spu.sh
new file mode 100644
index 0000000..6993ca7
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32_spu.sh
@@ -0,0 +1,27 @@
+SCRIPT_NAME=elf
+TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=spuelf
+OUTPUT_FORMAT="elf32-spu"
+NO_REL_RELOCS=yes
+ARCH=spu
+MACHINE=
+ALIGNMENT=16
+TEXT_START_ADDR=0
+INITIAL_READONLY_SECTIONS='.interrupt : { KEEP(*(.interrupt)) }'
+if test -z "${CREATE_SHLIB}"; then
+ INITIAL_READONLY_SECTIONS="${INITIAL_READONLY_SECTIONS}
+ .interp ${RELOCATING-0} : { *(.interp) }"
+fi
+OTHER_END_SYMBOLS='PROVIDE (__stack = 0x3fff0);'
+NO_SMALL_DATA=true
+EMBEDDED=true
+MAXPAGESIZE=0x80
+DATA_ADDR="ALIGN(${MAXPAGESIZE})"
+OTHER_BSS_SECTIONS=".toe ALIGN(128) : { *(.toe) } = 0"
+OTHER_SECTIONS=".note.spu_name 0 : { KEEP(*(.note.spu_name)) }
+ ._ea 0 : { KEEP(*(._ea)) KEEP(*(._ea.*)) }"
+OTHER_READONLY_SECTIONS="
+ .fixup ${RELOCATING-0} : {
+ PROVIDE (__fixup_start = .);
+ KEEP(*(.fixup))
+ }"
diff --git a/binutils-2.21/ld/emulparams/elf32_tic6x_be.sh b/binutils-2.21/ld/emulparams/elf32_tic6x_be.sh
new file mode 100644
index 0000000..648320f
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32_tic6x_be.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/elf32_tic6x_le.sh
+OUTPUT_FORMAT="elf32-tic6x-be"
diff --git a/binutils-2.21/ld/emulparams/elf32_tic6x_le.sh b/binutils-2.21/ld/emulparams/elf32_tic6x_le.sh
new file mode 100644
index 0000000..7a78a2c
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32_tic6x_le.sh
@@ -0,0 +1,40 @@
+SCRIPT_NAME=elf
+TEMPLATE_NAME=elf32
+OUTPUT_FORMAT="elf32-tic6x-le"
+# This address is an arbitrary value expected to be suitable for
+# semihosting simulator use, but not on hardware where it is expected
+# to be overridden.
+TEXT_START_ADDR=0x8000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ARCH=tic6x
+EXECUTABLE_SYMBOLS="EXTERN (__c6xabi_DSBT_BASE);"
+SDATA_START_SYMBOLS="PROVIDE_HIDDEN (__c6xabi_DSBT_BASE = .);"
+# ".bss" is near (small) BSS, ".far" is far (normal) BSS, ".const" is
+# far read-only data, ".rodata" is near read-only data. ".neardata"
+# is near (small) data, ".fardata" is (along with .data) far data.
+RODATA_NAME="const"
+SDATA_NAME="neardata"
+SBSS_NAME="bss"
+BSS_NAME="far"
+OTHER_SDATA_SECTIONS=".rodata ${RELOCATING-0} : { *(.rodata${RELOCATING+ .rodata.*}) }"
+OTHER_READONLY_RELOC_SECTIONS="
+ .rel.rodata ${RELOCATING-0} : { *(.rel.rodata${RELOCATING+ .rel.rodata.*}) }
+ .rela.rodata ${RELOCATING-0} : { *(.rela.rodata${RELOCATING+ .rela.rodata.*}) }"
+OTHER_READWRITE_SECTIONS=".fardata ${RELOCATING-0} : { *(.fardata${RELOCATING+ .fardata.*}) }"
+OTHER_READWRITE_RELOC_SECTIONS="
+ .rel.fardata ${RELOCATING-0} : { *(.rel.fardata${RELOCATING+ .rel.fardata.*}) }
+ .rela.fardata ${RELOCATING-0} : { *(.rela.fardata${RELOCATING+ .rela.fardata.*}) }"
+OTHER_BSS_SECTIONS="
+ .heap :
+ {
+ . = ALIGN(4);
+ _HEAP_START = .;
+ . += 0x2000000;
+ _HEAP_MAX = .;
+ }
+ .stack :
+ {
+ . += 0x100000;
+ _STACK_START = .;
+ }"
+ATTRS_SECTIONS='.c6xabi.attributes 0 : { KEEP (*(.c6xabi.attributes)) KEEP (*(.gnu.attributes)) }'
diff --git a/binutils-2.21/ld/emulparams/elf32am33lin.sh b/binutils-2.21/ld/emulparams/elf32am33lin.sh
new file mode 100644
index 0000000..b34d2b8
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32am33lin.sh
@@ -0,0 +1,11 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-am33lin"
+NO_REL_RELOCS=yes
+TEXT_START_ADDR=0x8000000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ARCH=mn10300
+MACHINE=
+NOP=0xcbcb
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+
diff --git a/binutils-2.21/ld/emulparams/elf32b4300.sh b/binutils-2.21/ld/emulparams/elf32b4300.sh
new file mode 100644
index 0000000..52fa295
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32b4300.sh
@@ -0,0 +1,9 @@
+# If you change this file, please also look at files which source this one:
+# elf32l4300.sh
+
+EMBEDDED=yes
+. ${srcdir}/emulparams/elf32bmip.sh
+TEXT_START_ADDR=0xa0020000
+unset SHLIB_TEXT_START_ADDR
+EXECUTABLE_SYMBOLS='_DYNAMIC_LINK = 0;'
+DYNAMIC_LINK=FALSE
diff --git a/binutils-2.21/ld/emulparams/elf32bfinfd.sh b/binutils-2.21/ld/emulparams/elf32bfinfd.sh
new file mode 100644
index 0000000..3e0420e
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32bfinfd.sh
@@ -0,0 +1,45 @@
+. ${srcdir}/emulparams/bfin.sh
+unset STACK_ADDR
+OUTPUT_FORMAT="elf32-bfinfdpic"
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+EMBEDDED= # This gets us program headers mapped as part of the text segment.
+OTHER_GOT_SYMBOLS=
+OTHER_READONLY_SECTIONS="
+ .rofixup : {
+ ${RELOCATING+__ROFIXUP_LIST__ = .;}
+ *(.rofixup)
+ ${RELOCATING+__ROFIXUP_END__ = .;}
+ }
+"
+# 0xfeb00000, 0xfec00000, 0xff700000, 0xff800000, 0xff900000
+# 0xffa00000 are also used in Dynamic linker and linux kernel.
+# They need to be kept synchronized.
+OTHER_SECTIONS="
+ .l2.text 0xfeb00000 :
+ {
+ *(.l2.text)
+ }
+ .l2.data 0xfec00000 :
+ {
+ *(.l2.data)
+ }
+ .l1.data 0xff700000 :
+ {
+ *(.l1.data)
+ }
+ .l1.data.A 0xff800000 :
+ {
+ *(.l1.data.A)
+ }
+ .l1.data.B 0xff900000 :
+ {
+ *(.l1.data.B)
+ }
+ .l1.text 0xffa00000 :
+ {
+ *(.l1.text)
+ }
+"
diff --git a/binutils-2.21/ld/emulparams/elf32bmip.sh b/binutils-2.21/ld/emulparams/elf32bmip.sh
new file mode 100644
index 0000000..44a0b8a
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32bmip.sh
@@ -0,0 +1,81 @@
+# If you change this file, please also look at files which source this one:
+# elf32b4300.sh elf32bsmip.sh elf32btsmip.sh elf32ebmip.sh elf32lmip.sh
+# elf32ebmipvxworks.sh elf32elmipvxworks.sh
+
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-bigmips"
+BIG_OUTPUT_FORMAT="elf32-bigmips"
+LITTLE_OUTPUT_FORMAT="elf32-littlemips"
+TEXT_START_ADDR=0x0400000
+test -n "${EMBEDDED}" || DATA_ADDR=0x10000000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
+SHLIB_TEXT_START_ADDR=0x5ffe0000
+TEXT_DYNAMIC=
+INITIAL_READONLY_SECTIONS=
+if test -z "${CREATE_SHLIB}"; then
+ INITIAL_READONLY_SECTIONS=".interp ${RELOCATING-0} : { *(.interp) }"
+fi
+INITIAL_READONLY_SECTIONS="${INITIAL_READONLY_SECTIONS}
+ .reginfo ${RELOCATING-0} : { *(.reginfo) }
+"
+OTHER_TEXT_SECTIONS='*(.mips16.fn.*) *(.mips16.call.*)'
+# Unlike most targets, the MIPS backend puts all dynamic relocations
+# in a single dynobj section, which it also calls ".rel.dyn". It does
+# this so that it can easily sort all dynamic relocations before the
+# output section has been populated.
+OTHER_GOT_RELOC_SECTIONS="
+ .rel.dyn ${RELOCATING-0} : { *(.rel.dyn) }
+"
+# If the output has a GOT section, there must be exactly 0x7ff0 bytes
+# between .got and _gp. The ". = ." below stops the orphan code from
+# inserting other sections between the assignment to _gp and the start
+# of .got.
+OTHER_GOT_SYMBOLS='
+ . = .;
+ _gp = ALIGN(16) + 0x7ff0;
+'
+# .got.plt is only used for the PLT psABI extension. It should not be
+# included in the .sdata block with .got, as there is no need to access
+# the section from _gp. Note that the traditional:
+#
+# . = .
+# _gp = ALIGN (16) + 0x7ff0;
+# .got : { *(.got.plt) *(.got) }
+#
+# would set _gp to the wrong value; _gp - 0x7ff0 must point to the start
+# of *(.got).
+GOT=".got ${RELOCATING-0} : { *(.got) }"
+unset OTHER_READWRITE_SECTIONS
+unset OTHER_RELRO_SECTIONS
+if test -n "$RELRO_NOW"; then
+ OTHER_RELRO_SECTIONS=".got.plt ${RELOCATING-0} : { *(.got.plt) }"
+else
+ OTHER_READWRITE_SECTIONS=".got.plt ${RELOCATING-0} : { *(.got.plt) }"
+fi
+
+OTHER_SDATA_SECTIONS="
+ .lit8 ${RELOCATING-0} : { *(.lit8) }
+ .lit4 ${RELOCATING-0} : { *(.lit4) }
+"
+TEXT_START_SYMBOLS='_ftext = . ;'
+DATA_START_SYMBOLS='_fdata = . ;'
+OTHER_BSS_SYMBOLS='_fbss = .;'
+OTHER_SECTIONS='
+ .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) }
+ .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) }
+ .mdebug.abi32 : { KEEP(*(.mdebug.abi32)) }
+ .mdebug.abiN32 : { KEEP(*(.mdebug.abiN32)) }
+ .mdebug.abi64 : { KEEP(*(.mdebug.abi64)) }
+ .mdebug.abiO64 : { KEEP(*(.mdebug.abiO64)) }
+ .mdebug.eabi32 : { KEEP(*(.mdebug.eabi32)) }
+ .mdebug.eabi64 : { KEEP(*(.mdebug.eabi64)) }
+ .gcc_compiled_long32 : { KEEP(*(.gcc_compiled_long32)) }
+ .gcc_compiled_long64 : { KEEP(*(.gcc_compiled_long64)) }
+'
+ARCH=mips
+MACHINE=
+TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=mipself
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
diff --git a/binutils-2.21/ld/emulparams/elf32bmipn32-defs.sh b/binutils-2.21/ld/emulparams/elf32bmipn32-defs.sh
new file mode 100644
index 0000000..45bfd5d
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32bmipn32-defs.sh
@@ -0,0 +1,96 @@
+# If you change this file, please also look at files which source this one:
+# elf64bmip.sh elf64btsmip.sh elf32btsmipn32.sh elf32bmipn32.sh
+
+# This is an ELF platform.
+SCRIPT_NAME=elf
+
+# Handle both big- and little-ended 32-bit MIPS objects.
+ARCH=mips
+OUTPUT_FORMAT="elf32-bigmips"
+BIG_OUTPUT_FORMAT="elf32-bigmips"
+LITTLE_OUTPUT_FORMAT="elf32-littlemips"
+
+TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=mipself
+
+case "$EMULATION_NAME" in
+elf32*n32*) ELFSIZE=32 ;;
+elf64*) ELFSIZE=64 ;;
+*) echo $0: unhandled emulation $EMULATION_NAME >&2; exit 1 ;;
+esac
+
+if test `echo "$host" | sed -e s/64//` = `echo "$target" | sed -e s/64//`; then
+ case " $EMULATION_LIBPATH " in
+ *" ${EMULATION_NAME} "*)
+ NATIVE=yes
+ ;;
+ esac
+fi
+
+# Look for 64 bit target libraries in /lib64, /usr/lib64 etc., first.
+LIBPATH_SUFFIX=$ELFSIZE
+
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+
+TEXT_START_ADDR=0x10000000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ENTRY=__start
+
+# Unlike most targets, the MIPS backend puts all dynamic relocations
+# in a single dynobj section, which it also calls ".rel.dyn". It does
+# this so that it can easily sort all dynamic relocations before the
+# output section has been populated.
+OTHER_GOT_RELOC_SECTIONS="
+ .rel.dyn ${RELOCATING-0} : { *(.rel.dyn) }
+"
+# GOT-related settings.
+# If the output has a GOT section, there must be exactly 0x7ff0 bytes
+# between .got and _gp. The ". = ." below stops the orphan code from
+# inserting other sections between the assignment to _gp and the start
+# of .got.
+OTHER_GOT_SYMBOLS='
+ . = .;
+ _gp = ALIGN(16) + 0x7ff0;
+'
+# .got.plt is only used for the PLT psABI extension. It should not be
+# included in the .sdata block with .got, as there is no need to access
+# the section from _gp. Note that the traditional:
+#
+# . = .
+# _gp = ALIGN (16) + 0x7ff0;
+# .got : { *(.got.plt) *(.got) }
+#
+# would set _gp to the wrong value; _gp - 0x7ff0 must point to the start
+# of *(.got).
+GOT=".got ${RELOCATING-0} : { *(.got) }"
+unset OTHER_READWRITE_SECTIONS
+unset OTHER_RELRO_SECTIONS
+if test -n "$RELRO_NOW"; then
+ OTHER_RELRO_SECTIONS=".got.plt ${RELOCATING-0} : { *(.got.plt) }"
+else
+ OTHER_READWRITE_SECTIONS=".got.plt ${RELOCATING-0} : { *(.got.plt) }"
+fi
+
+OTHER_SDATA_SECTIONS="
+ .lit8 ${RELOCATING-0} : { *(.lit8) }
+ .lit4 ${RELOCATING-0} : { *(.lit4) }
+ .srdata ${RELOCATING-0} : { *(.srdata) }
+"
+
+# Magic symbols.
+TEXT_START_SYMBOLS='_ftext = . ;'
+DATA_START_SYMBOLS='_fdata = . ;'
+OTHER_BSS_SYMBOLS='_fbss = .;'
+
+INITIAL_READONLY_SECTIONS=
+if test -z "${CREATE_SHLIB}"; then
+ INITIAL_READONLY_SECTIONS=".interp ${RELOCATING-0} : { *(.interp) }"
+fi
+INITIAL_READONLY_SECTIONS="${INITIAL_READONLY_SECTIONS}
+ .reginfo ${RELOCATING-0} : { *(.reginfo) }"
+# Discard any .MIPS.content* or .MIPS.events* sections. The linker
+# doesn't know how to adjust them.
+OTHER_SECTIONS="/DISCARD/ : { *(.MIPS.content*) *(.MIPS.events*) }"
+
+TEXT_DYNAMIC=
diff --git a/binutils-2.21/ld/emulparams/elf32bmipn32.sh b/binutils-2.21/ld/emulparams/elf32bmipn32.sh
new file mode 100755
index 0000000..c26b6b3
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32bmipn32.sh
@@ -0,0 +1,22 @@
+. ${srcdir}/emulparams/elf32bmipn32-defs.sh
+OUTPUT_FORMAT="elf32-nbigmips"
+BIG_OUTPUT_FORMAT="elf32-nbigmips"
+LITTLE_OUTPUT_FORMAT="elf32-nlittlemips"
+SHLIB_TEXT_START_ADDR=0x5ffe0000
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
+
+# IRIX6 defines these symbols. 0x34 is the size of the ELF header.
+EXECUTABLE_SYMBOLS="
+ __dso_displacement = 0;
+ __elf_header = ${TEXT_START_ADDR};
+ __program_header_table = ${TEXT_START_ADDR} + 0x34;
+"
+
+# There are often dynamic relocations against the .rodata section.
+# Setting DT_TEXTREL in the .dynamic section does not convince the
+# IRIX6 linker to permit relocations against the text segment.
+# Following the IRIX linker, we simply put .rodata in the data
+# segment.
+WRITABLE_RODATA=
+
+EXTRA_EM_FILE=irix
diff --git a/binutils-2.21/ld/emulparams/elf32bsmip.sh b/binutils-2.21/ld/emulparams/elf32bsmip.sh
new file mode 100644
index 0000000..dfe0fe0
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32bsmip.sh
@@ -0,0 +1,3 @@
+. ${srcdir}/emulparams/elf32bmip.sh
+ENTRY=__start
+EXTRA_EM_FILE=irix
diff --git a/binutils-2.21/ld/emulparams/elf32btsmip.sh b/binutils-2.21/ld/emulparams/elf32btsmip.sh
new file mode 100644
index 0000000..e29e045
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32btsmip.sh
@@ -0,0 +1,10 @@
+# If you change this file, please also look at files which source this one:
+# elf32ltsmip.sh
+
+. ${srcdir}/emulparams/elf32bmip.sh
+OUTPUT_FORMAT="elf32-tradbigmips"
+BIG_OUTPUT_FORMAT="elf32-tradbigmips"
+LITTLE_OUTPUT_FORMAT="elf32-tradlittlemips"
+unset DATA_ADDR
+SHLIB_TEXT_START_ADDR=0
+ENTRY=__start
diff --git a/binutils-2.21/ld/emulparams/elf32btsmipn32.sh b/binutils-2.21/ld/emulparams/elf32btsmipn32.sh
new file mode 100644
index 0000000..10c5565
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32btsmipn32.sh
@@ -0,0 +1,15 @@
+# If you change this file, please also look at files which source this one:
+# elf32ltsmipn32.sh
+
+. ${srcdir}/emulparams/elf32bmipn32-defs.sh
+OUTPUT_FORMAT="elf32-ntradbigmips"
+BIG_OUTPUT_FORMAT="elf32-ntradbigmips"
+LITTLE_OUTPUT_FORMAT="elf32-ntradlittlemips"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
+
+# Magic sections.
+OTHER_TEXT_SECTIONS='*(.mips16.fn.*) *(.mips16.call.*)'
+OTHER_SECTIONS='
+ .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) }
+ .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) }
+'
diff --git a/binutils-2.21/ld/emulparams/elf32cr16.sh b/binutils-2.21/ld/emulparams/elf32cr16.sh
new file mode 100644
index 0000000..bc9ae51
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32cr16.sh
@@ -0,0 +1,7 @@
+SCRIPT_NAME=elf32cr16
+TEMPLATE_NAME=elf32
+OUTPUT_FORMAT="elf32-cr16"
+ARCH=cr16
+ENTRY=_start
+EXTRA_EM_FILE=cr16elf
+EMBEDDED=yes
diff --git a/binutils-2.21/ld/emulparams/elf32cr16c.sh b/binutils-2.21/ld/emulparams/elf32cr16c.sh
new file mode 100644
index 0000000..e78e5ed
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32cr16c.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=elf32cr16c
+TEMPLATE_NAME=elf32
+OUTPUT_FORMAT="elf32-cr16c"
+ARCH=cr16c
+ENTRY=_start
diff --git a/binutils-2.21/ld/emulparams/elf32crx.sh b/binutils-2.21/ld/emulparams/elf32crx.sh
new file mode 100644
index 0000000..24960ec
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32crx.sh
@@ -0,0 +1,6 @@
+SCRIPT_NAME=elf32crx
+TEMPLATE_NAME=elf32
+OUTPUT_FORMAT="elf32-crx"
+ARCH=crx
+ENTRY=_start
+EXTRA_EM_FILE=crxelf
diff --git a/binutils-2.21/ld/emulparams/elf32ebmip.sh b/binutils-2.21/ld/emulparams/elf32ebmip.sh
new file mode 100644
index 0000000..704b43e
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32ebmip.sh
@@ -0,0 +1,2 @@
+EMBEDDED=yes
+. ${srcdir}/emulparams/elf32bmip.sh
diff --git a/binutils-2.21/ld/emulparams/elf32ebmipvxworks.sh b/binutils-2.21/ld/emulparams/elf32ebmipvxworks.sh
new file mode 100644
index 0000000..6d1cc3c
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32ebmipvxworks.sh
@@ -0,0 +1,20 @@
+. ${srcdir}/emulparams/elf32bmip.sh
+
+OUTPUT_FORMAT="elf32-bigmips-vxworks"
+BIG_OUTPUT_FORMAT="elf32-bigmips-vxworks"
+LITTLE_OUTPUT_FORMAT="elf32-littlemips-vxworks"
+# VxWorks .rdata sections are normally read-only, but one of the objects
+# in libdl.a (the dynamic loader) is actually read-write. Explicitly
+# place the section in the appropriate segment for its flags.
+OTHER_READONLY_SECTIONS="
+ .rdata ${RELOCATING-0} : ONLY_IF_RO { *(.rdata) }
+"
+OTHER_READWRITE_SECTIONS="
+ .rdata ${RELOCATING-0} : ONLY_IF_RW { *(.rdata) }
+"
+unset OTHER_GOT_SYMBOLS
+SHLIB_TEXT_START_ADDR=0
+unset TEXT_DYNAMIC
+unset DATA_ADDR
+
+. ${srcdir}/emulparams/vxworks.sh
diff --git a/binutils-2.21/ld/emulparams/elf32elmip.sh b/binutils-2.21/ld/emulparams/elf32elmip.sh
new file mode 100644
index 0000000..c94e503
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32elmip.sh
@@ -0,0 +1,2 @@
+EMBEDDED=yes
+. ${srcdir}/emulparams/elf32lmip.sh
diff --git a/binutils-2.21/ld/emulparams/elf32elmipvxworks.sh b/binutils-2.21/ld/emulparams/elf32elmipvxworks.sh
new file mode 100644
index 0000000..c123944
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32elmipvxworks.sh
@@ -0,0 +1,11 @@
+. ${srcdir}/emulparams/elf32bmip.sh
+
+OUTPUT_FORMAT="elf32-littlemips-vxworks"
+BIG_OUTPUT_FORMAT="elf32-bigmips-vxworks"
+LITTLE_OUTPUT_FORMAT="elf32-littlemips-vxworks"
+unset OTHER_GOT_SYMBOLS
+SHLIB_TEXT_START_ADDR=0
+unset TEXT_DYNAMIC
+unset DATA_ADDR
+
+. ${srcdir}/emulparams/vxworks.sh
diff --git a/binutils-2.21/ld/emulparams/elf32fr30.sh b/binutils-2.21/ld/emulparams/elf32fr30.sh
new file mode 100755
index 0000000..1764a32
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32fr30.sh
@@ -0,0 +1,13 @@
+MACHINE=
+SCRIPT_NAME=elf
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
+OUTPUT_FORMAT="elf32-fr30"
+NO_REL_RELOCS=yes
+TEXT_START_ADDR=0x10000
+ARCH=fr30
+MAXPAGESIZE=256
+ENTRY=_start
+EMBEDDED=yes
+NOP=0x9fa09fa0
+OTHER_SYMBOLS='PROVIDE (__stack = 0x200000);'
diff --git a/binutils-2.21/ld/emulparams/elf32frv.sh b/binutils-2.21/ld/emulparams/elf32frv.sh
new file mode 100755
index 0000000..9037072
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32frv.sh
@@ -0,0 +1,21 @@
+MACHINE=
+SCRIPT_NAME=elf
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
+OUTPUT_FORMAT="elf32-frv"
+TEXT_START_ADDR=0x10000
+ARCH=frv
+MAXPAGESIZE=256
+ENTRY=_start
+EMBEDDED=yes
+OTHER_EXCLUDE_FILES='*frvend.o'
+OTHER_END_SYMBOLS='__end = .;'
+DATA_START_SYMBOLS='__data_start = . ;'
+STACK_ADDR=0x200000
+NOP=0x80000000
+OTHER_GOT_SYMBOLS='
+ . = ALIGN(8); _gp = . + 2048;
+ PROVIDE (gp = _gp);'
+OTHER_READONLY_SECTIONS='
+ .rofixup : { *(.rofixup) }
+'
diff --git a/binutils-2.21/ld/emulparams/elf32frvfd.sh b/binutils-2.21/ld/emulparams/elf32frvfd.sh
new file mode 100644
index 0000000..c174669
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32frvfd.sh
@@ -0,0 +1,17 @@
+. ${srcdir}/emulparams/elf32frv.sh
+unset STACK_ADDR
+OUTPUT_FORMAT="elf32-frvfdpic"
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+TEMPLATE_NAME=elf32
+unset EXTRA_EM_FILE
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+EMBEDDED= # This gets us program headers mapped as part of the text segment.
+OTHER_GOT_SYMBOLS=
+OTHER_READONLY_SECTIONS="
+ .rofixup : {
+ ${RELOCATING+__ROFIXUP_LIST__ = .;}
+ *(.rofixup)
+ ${RELOCATING+__ROFIXUP_END__ = .;}
+ }
+"
diff --git a/binutils-2.21/ld/emulparams/elf32i370.sh b/binutils-2.21/ld/emulparams/elf32i370.sh
new file mode 100644
index 0000000..425238c
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32i370.sh
@@ -0,0 +1,8 @@
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+SCRIPT_NAME=elfi370
+OUTPUT_FORMAT="elf32-i370"
+TEXT_START_ADDR=0x01800000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ARCH=i370
+MACHINE=
diff --git a/binutils-2.21/ld/emulparams/elf32ip2k.sh b/binutils-2.21/ld/emulparams/elf32ip2k.sh
new file mode 100644
index 0000000..0db227f
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32ip2k.sh
@@ -0,0 +1,21 @@
+TEMPLATE_NAME=elf32
+MACHINE=
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-ip2k"
+NO_REL_RELOCS=yes
+# See also `include/elf/ip2k.h'
+DATA_ADDR=0x01000100
+TEXT_START_ADDR=0x02010000
+GPR_START_ADDR=0x1000080
+GPR_SIZE=0x7F
+GRP_MEMORY=gpr
+ARCH=ip2k
+ENTRY=__start
+EMBEDDED=yes
+ELFSIZE=32
+MAXPAGESIZE=256
+WRITABLE_RODATA=
+OTHER_RELOCATING_SECTIONS='PROVIDE (__stack = 0x01000FFF);'
+OTHER_READONLY_SECTIONS='.pram 0x2000000 : { *(.pram) } .reset 0x201FFE0 : { *(.reset) }'
+OTHER_READWRITE_SECTIONS='.gpr 0x1000080 : { *(.gpr) }'
+
diff --git a/binutils-2.21/ld/emulparams/elf32iq10.sh b/binutils-2.21/ld/emulparams/elf32iq10.sh
new file mode 100755
index 0000000..2c0d75f
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32iq10.sh
@@ -0,0 +1,13 @@
+MACHINE=
+SCRIPT_NAME=iq2000
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
+OUTPUT_FORMAT="elf32-iq2000"
+DATA_ADDR=0x1000
+TEXT_START_ADDR=0x80000000
+ARCH=iq2000
+ENTRY=_start
+EMBEDDED=yes
+ELFSIZE=32
+MAXPAGESIZE=256
+OTHER_RELOCATING_SECTIONS='PROVIDE (__stack = 0x1800);'
diff --git a/binutils-2.21/ld/emulparams/elf32iq2000.sh b/binutils-2.21/ld/emulparams/elf32iq2000.sh
new file mode 100755
index 0000000..a21276a
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32iq2000.sh
@@ -0,0 +1,16 @@
+MACHINE=
+SCRIPT_NAME=iq2000
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
+OUTPUT_FORMAT="elf32-iq2000"
+DATA_ADDR=0x1000
+TEXT_START_ADDR=0x80000000
+ARCH=iq2000
+MAXPAGESIZE=256
+ENTRY=_start
+EMBEDDED=yes
+CTOR_START='__ctors = .;'
+CTOR_END='__ctors_end = .;'
+DTOR_START='__dtors = .;'
+DTOR_END='__dtors_end = .;'
+OTHER_RELOCATING_SECTIONS='PROVIDE (__stack = 0x1800);'
diff --git a/binutils-2.21/ld/emulparams/elf32l4300.sh b/binutils-2.21/ld/emulparams/elf32l4300.sh
new file mode 100644
index 0000000..865792a
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32l4300.sh
@@ -0,0 +1,4 @@
+. ${srcdir}/emulparams/elf32b4300.sh
+OUTPUT_FORMAT="elf32-littlemips"
+BIG_OUTPUT_FORMAT="elf32-bigmips"
+LITTLE_OUTPUT_FORMAT="elf32-littlemips"
diff --git a/binutils-2.21/ld/emulparams/elf32lm32.sh b/binutils-2.21/ld/emulparams/elf32lm32.sh
new file mode 100644
index 0000000..b3fcd32
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32lm32.sh
@@ -0,0 +1,10 @@
+ARCH=lm32
+MACHINE=
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-lm32"
+MAXPAGESIZE=0x1000
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+TEXT_START_ADDR=0x0000
+DYNAMIC_LINK=FALSE
+ALIGNMENT=4
diff --git a/binutils-2.21/ld/emulparams/elf32lm32fd.sh b/binutils-2.21/ld/emulparams/elf32lm32fd.sh
new file mode 100644
index 0000000..32a4d58
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32lm32fd.sh
@@ -0,0 +1,16 @@
+. ${srcdir}/emulparams/elf32lm32.sh
+unset STACK_ADDR
+OUTPUT_FORMAT="elf32-lm32fdpic"
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+EMBEDDED= # This gets us program headers mapped as part of the text segment.
+OTHER_GOT_SYMBOLS=
+OTHER_READONLY_SECTIONS="
+ .rofixup : {
+ ${RELOCATING+__ROFIXUP_LIST__ = .;}
+ *(.rofixup)
+ ${RELOCATING+__ROFIXUP_END__ = .;}
+ }
+"
diff --git a/binutils-2.21/ld/emulparams/elf32lmip.sh b/binutils-2.21/ld/emulparams/elf32lmip.sh
new file mode 100644
index 0000000..14d4ded
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32lmip.sh
@@ -0,0 +1,7 @@
+# If you change this file, please also look at files which source this one:
+# elf32elmip.sh elf32lsmip.sh
+
+. ${srcdir}/emulparams/elf32bmip.sh
+OUTPUT_FORMAT="elf32-littlemips"
+BIG_OUTPUT_FORMAT="elf32-bigmips"
+LITTLE_OUTPUT_FORMAT="elf32-littlemips"
diff --git a/binutils-2.21/ld/emulparams/elf32lppc.sh b/binutils-2.21/ld/emulparams/elf32lppc.sh
new file mode 100644
index 0000000..18cce48
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32lppc.sh
@@ -0,0 +1,5 @@
+# If you change this file, please also look at files which source this one:
+# elf32lppcsim.sh
+
+. ${srcdir}/emulparams/elf32ppc.sh
+OUTPUT_FORMAT="elf32-powerpcle"
diff --git a/binutils-2.21/ld/emulparams/elf32lppcnto.sh b/binutils-2.21/ld/emulparams/elf32lppcnto.sh
new file mode 100644
index 0000000..c45260d
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32lppcnto.sh
@@ -0,0 +1,5 @@
+. ${srcdir}/emulparams/elf32ppc.sh
+OUTPUT_FORMAT="elf32-powerpcle"
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+TEXT_START_ADDR=0x48040000
+
diff --git a/binutils-2.21/ld/emulparams/elf32lppcsim.sh b/binutils-2.21/ld/emulparams/elf32lppcsim.sh
new file mode 100644
index 0000000..e743852
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32lppcsim.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/elf32lppc.sh
+TEXT_START_ADDR=0x10000000
diff --git a/binutils-2.21/ld/emulparams/elf32lsmip.sh b/binutils-2.21/ld/emulparams/elf32lsmip.sh
new file mode 100644
index 0000000..62e4f98
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32lsmip.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/elf32lmip.sh
+ENTRY=__start
diff --git a/binutils-2.21/ld/emulparams/elf32ltsmip.sh b/binutils-2.21/ld/emulparams/elf32ltsmip.sh
new file mode 100644
index 0000000..4a660f0
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32ltsmip.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/elf32btsmip.sh
+OUTPUT_FORMAT="elf32-tradlittlemips"
diff --git a/binutils-2.21/ld/emulparams/elf32ltsmipn32.sh b/binutils-2.21/ld/emulparams/elf32ltsmipn32.sh
new file mode 100644
index 0000000..276477d
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32ltsmipn32.sh
@@ -0,0 +1,4 @@
+. ${srcdir}/emulparams/elf32btsmipn32.sh
+OUTPUT_FORMAT="elf32-ntradlittlemips"
+BIG_OUTPUT_FORMAT="elf32-ntradbigmips"
+LITTLE_OUTPUT_FORMAT="elf32-ntradlittlemips"
diff --git a/binutils-2.21/ld/emulparams/elf32m32c.sh b/binutils-2.21/ld/emulparams/elf32m32c.sh
new file mode 100644
index 0000000..eaf2c4e
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32m32c.sh
@@ -0,0 +1,26 @@
+MACHINE=
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-m32c"
+# See also `include/elf/m32c.h'
+TEXT_START_ADDR=0x2000
+ARCH=m32c
+ENTRY=_start
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=needrelax
+ELFSIZE=32
+MAXPAGESIZE=256
+# This is like setting STACK_ADDR to 0x0073FFFF0, except that the setting can
+# be overridden, e.g. --defsym _stack=0x0f00, and that we put an extra
+# sentinal value at the bottom.
+# N.B. We can't use PROVIDE to set the default value in a symbol because
+# the address is needed to place the .stack section, which in turn is needed
+# to hold the sentinel value(s).
+test -z "$CREATE_SHLIB" && OTHER_SECTIONS=" .stack ${RELOCATING-0}${RELOCATING+(DEFINED(__stack) ? __stack : 0x7fc)} :
+ {
+ ${RELOCATING+__stack = .;}
+ *(.stack)
+ LONG(0xdeaddead)
+ }"
+# We do not need .stack for shared library.
+test -n "$CREATE_SHLIB" && OTHER_SECTIONS=""
diff --git a/binutils-2.21/ld/emulparams/elf32mb_linux.sh b/binutils-2.21/ld/emulparams/elf32mb_linux.sh
new file mode 100644
index 0000000..3503bb1
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32mb_linux.sh
@@ -0,0 +1,17 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-microblaze"
+TEXT_START_ADDR=0x10000000
+NONPAGED_TEXT_START_ADDR=0x28
+ALIGNMENT=4
+MAXPAGESIZE=0x1000
+COMMONPAGESIZE=0x1000
+ARCH=microblaze
+
+NOP=0x80000000
+
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+NO_SMALL_DATA=yes
+SEPARATE_GOTPLT=12
+
diff --git a/binutils-2.21/ld/emulparams/elf32mcore.sh b/binutils-2.21/ld/emulparams/elf32mcore.sh
new file mode 100644
index 0000000..6047950
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32mcore.sh
@@ -0,0 +1,59 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-mcore-little"
+BIG_OUTPUT_FORMAT="elf32-mcore-big"
+LITTLE_OUTPUT_FORMAT="elf32-mcore-little"
+NO_REL_RELOCS=yes
+PAGE_SIZE=0x1000
+TARGET_PAGE_SIZE=0x400
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+TEXT_START_ADDR=0
+ARCH=mcore
+EMBEDDED=yes
+
+# There is a problem with the NOP value - it must work for both
+# big endian and little endian systems. Unfortunately there is
+# no symmetrical mcore opcode that functions as a noop. The
+# chosen solution is to use "tst r0, r14". This is a symetrical
+# value, and apart from the corruption of the C bit, it has no other
+# side effects. Since the carry bit is never tested without being
+# explicitly set first, and since the NOP code is only used as a
+# fill value between independantly viable peices of code, it should
+# not matter.
+NOP=0x0e0e0e0e
+
+OTHER_BSS_SYMBOLS="__bss_start__ = . ;"
+OTHER_BSS_END_SYMBOLS="__bss_end__ = . ;"
+
+# This sets the stack to the top of the simulator memory (2^19 bytes).
+STACK_ADDR=0x80000
+
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+
+# This code gets inserted into the generic elf32.sc linker script
+# and allows us to define our own command line switches.
+PARSE_AND_LIST_PROLOGUE='
+#define OPTION_BASE_FILE 300
+'
+
+PARSE_AND_LIST_LONGOPTS='
+ {"base-file", required_argument, NULL, OPTION_BASE_FILE},
+'
+
+PARSE_AND_LIST_OPTIONS='
+ fprintf (file, _(" --base_file <basefile>\n"));
+ fprintf (file, _("\t\t\tGenerate a base file for relocatable DLLs\n"));
+'
+
+PARSE_AND_LIST_ARGS_CASES='
+ case OPTION_BASE_FILE:
+ link_info.base_file = fopen (optarg, FOPEN_WB);
+ if (link_info.base_file == NULL)
+ {
+ /* xgettext:c-format */
+ fprintf (stderr, _("%s: Cannot open base file %s\n"),
+ program_name, optarg);
+ xexit (1);
+ }
+ break;
+'
diff --git a/binutils-2.21/ld/emulparams/elf32mep.sh b/binutils-2.21/ld/emulparams/elf32mep.sh
new file mode 100755
index 0000000..f72fe2a
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32mep.sh
@@ -0,0 +1,55 @@
+MACHINE=
+SCRIPT_NAME=mep
+OUTPUT_FORMAT="elf32-mep-little"
+TEXT_START_ADDR=0x1000
+ARCH=mep
+MAXPAGESIZE=256
+ENTRY=_start
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+DATA_START_SYMBOLS='__data_start = . ;'
+OTHER_GOT_SYMBOLS='
+ . = ALIGN(4);
+ __sdabase = . + 0x8000;
+ .srodata : { *(.srodata) *(.srodata.*) *(.gnu.linkonce.srd.*) }
+'
+OTHER_SDATA_SECTIONS='
+ PROVIDE (__sdabase = .);
+ __assert_tiny_size = ASSERT ((. < __sdabase) || ((. - __sdabase) <= 0x8000),
+ "tiny section overflow");
+'
+OTHER_READONLY_SECTIONS='
+ __stack = 0x001ffff0;
+ __stack_size = 0x100000;
+ __stack0 = (__stack - (0 * (__stack_size / 1)) + 15) / 16 * 16;
+
+ .rostacktab :
+ {
+ /* Emit a table describing the location of the different stacks.
+ Only 1 processor in the default configuration. */
+ . = ALIGN(4);
+ __stack_table = .;
+ LONG (__stack0);
+ }
+'
+OTHER_END_SYMBOLS='
+ PROVIDE (__heap = _end);
+ PROVIDE (__heap_end = 0);
+'
+OTHER_TEXT_SECTIONS='
+ *(.ftext) *(.ftext.*) *(.gnu.linkonce.ft.*)
+ . = ALIGN(8);
+ *(.vftext) *(.vftext.*) *(.gnu.linkonce.vf.*)
+ *(.frodata) *(.frodata.*) *(.gnu.linkonce.frd.*)
+'
+OTHER_READWRITE_SECTIONS='
+ . = ALIGN(4);
+ __tpbase = .;
+ .based : { *(.based) *(.based.*) *(.gnu.linkonce.based.*) }
+ __assert_based_size = ASSERT ((. - __tpbase) <= 0x80, "based section overflow");
+ .far : { *(.far) *(.far.*) *(.gnu.linkonce.far.*) }
+'
+OTHER_BSS_SECTIONS='
+ __assert_near_size = ASSERT (. <= 0x1000000, "near section overflow");
+ .farbss : { PROVIDE (__farbss_start = .); *(.farbss) *(.farbss.*) PROVIDE (__farbss_end = .); }
+'
diff --git a/binutils-2.21/ld/emulparams/elf32microblaze.sh b/binutils-2.21/ld/emulparams/elf32microblaze.sh
new file mode 100644
index 0000000..ccc20d1
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32microblaze.sh
@@ -0,0 +1,23 @@
+SCRIPT_NAME=elfmicroblaze
+OUTPUT_FORMAT="elf32-microblaze"
+#TEXT_START_ADDR=0
+NONPAGED_TEXT_START_ADDR=0x28
+ALIGNMENT=4
+MAXPAGESIZE=4
+ARCH=microblaze
+EMBEDDED=yes
+
+NOP=0x80000000
+
+# Hmmm, there's got to be a better way. This sets the stack to the
+# top of the simulator memory (2^19 bytes).
+#PAGE_SIZE=0x1000
+#DATA_ADDR=0x10000
+#OTHER_RELOCATING_SECTIONS='.stack 0x7000 : { _stack = .; *(.stack) }'
+#$@{RELOCATING+ PROVIDE (__stack = 0x7000);@}
+#OTHER_RELOCATING_SECTIONS='PROVIDE (_stack = _end + 0x1000);'
+
+TEMPLATE_NAME=elf32
+#GENERATE_SHLIB_SCRIPT=yes
+
+
diff --git a/binutils-2.21/ld/emulparams/elf32mipswindiss.sh b/binutils-2.21/ld/emulparams/elf32mipswindiss.sh
new file mode 100644
index 0000000..4f1148b
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32mipswindiss.sh
@@ -0,0 +1,27 @@
+TEMPLATE_NAME=elf32
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-bigmips"
+BIG_OUTPUT_FORMAT="elf32-bigmips"
+LITTLE_OUTPUT_FORMAT="elf32-littlemips"
+ARCH=mips
+MACHINE=
+EMBEDDED=yes
+MAXPAGESIZE=0x40000
+
+# The data below is taken from the windiss.dld linker script that comes with
+# the Diab linker.
+TEXT_START_ADDR=0x100000
+DATA_START_SYMBOLS='__DATA_ROM = .; __DATA_RAM = .;'
+SDATA_START_SYMBOLS='_SDA_BASE_ = .; _gp = . + 0x7ff0;'
+SDATA2_START_SYMBOLS='_SDA2_BASE_ = .;'
+EXECUTABLE_SYMBOLS='__HEAP_START = .; __SP_INIT = 0x800000; __SP_END = __SP_INIT - 0x20000; __HEAP_END = __SP_END; __DATA_END = _edata; __BSS_START = __bss_start; __BSS_END = _end; __HEAP_START = _end;'
+
+# The Diab tools use a different init/fini convention. Initialization code
+# is place in sections named ".init$NN". These sections are then concatenated
+# into the .init section. It is important that .init$00 be first and .init$99
+# be last. The other sections should be sorted, but the current linker script
+# parse does not seem to allow that with the SORT keyword in this context.
+INIT_START='*(.init$00); *(.init$0[1-9]); *(.init$[1-8][0-9]); *(.init$9[0-8])'
+INIT_END='*(.init$99)'
+FINI_START='*(.fini$00); *(.fini$0[1-9]); *(.fini$[1-8][0-9]); *(.fini$9[0-8])'
+FINI_END='*(.fini$99)'
diff --git a/binutils-2.21/ld/emulparams/elf32moxie.sh b/binutils-2.21/ld/emulparams/elf32moxie.sh
new file mode 100644
index 0000000..a1f9e45
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32moxie.sh
@@ -0,0 +1,8 @@
+SCRIPT_NAME=elf
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
+OUTPUT_FORMAT="elf32-moxie"
+TEXT_START_ADDR=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ARCH=moxie
+STACK_ADDR=0x400000
diff --git a/binutils-2.21/ld/emulparams/elf32mt.sh b/binutils-2.21/ld/emulparams/elf32mt.sh
new file mode 100644
index 0000000..04fc1ed
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32mt.sh
@@ -0,0 +1,26 @@
+MACHINE=
+SCRIPT_NAME=elf
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
+OUTPUT_FORMAT="elf32-mt"
+# See also `include/elf/mt.h'
+TEXT_START_ADDR=0x2000
+ARCH=mt
+ENTRY=_start
+EMBEDDED=yes
+ELFSIZE=32
+MAXPAGESIZE=256
+# This is like setting STACK_ADDR to 0x0073FFFF0, except that the setting can
+# be overridden, e.g. --defsym _stack=0x0f00, and that we put an extra
+# sentinal value at the bottom.
+# N.B. We can't use PROVIDE to set the default value in a symbol because
+# the address is needed to place the .stack section, which in turn is needed
+# to hold the sentinel value(s).
+test -z "$CREATE_SHLIB" && OTHER_SECTIONS=" .stack ${RELOCATING-0}${RELOCATING+(DEFINED(__stack) ? __stack : 0x007FFFF0)} :
+ {
+ ${RELOCATING+__stack = .;}
+ *(.stack)
+ LONG(0xdeaddead)
+ }"
+# We do not need .stack for shared library.
+test -n "$CREATE_SHLIB" && OTHER_SECTIONS=""
diff --git a/binutils-2.21/ld/emulparams/elf32openrisc.sh b/binutils-2.21/ld/emulparams/elf32openrisc.sh
new file mode 100755
index 0000000..bbe9a3e
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32openrisc.sh
@@ -0,0 +1,11 @@
+MACHINE=
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-openrisc"
+NO_RELA_RELOCS=yes
+TEXT_START_ADDR=0x10000
+ARCH=openrisc
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ENTRY=_start
+EMBEDDED=yes
+NOP=0x15000000
+
diff --git a/binutils-2.21/ld/emulparams/elf32ppc.sh b/binutils-2.21/ld/emulparams/elf32ppc.sh
new file mode 100644
index 0000000..e638815
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32ppc.sh
@@ -0,0 +1,25 @@
+# If you change this file, please also look at files which source this one:
+# elf32lppcnto.sh elf32lppc.sh elf32ppclinux.sh elf32ppcnto.sh
+# elf32ppcsim.sh
+
+. ${srcdir}/emulparams/elf32ppccommon.sh
+# Yes, we want duplicate .got and .plt sections. The linker chooses the
+# appropriate one magically in ppc_after_open
+DATA_GOT=
+SDATA_GOT=
+SEPARATE_GOTPLT=0
+BSS_PLT=
+GOT=".got ${RELOCATING-0} : SPECIAL { *(.got) }"
+GOTPLT=".plt ${RELOCATING-0} : SPECIAL { *(.plt) }"
+PLT=".plt ${RELOCATING-0} : SPECIAL { *(.plt) }
+ .iplt ${RELOCATING-0} : { *(.iplt) }"
+OTHER_TEXT_SECTIONS="*(.glink)"
+EXTRA_EM_FILE=ppc32elf
+if grep -q 'ld_elf32_spu_emulation' ldemul-list.h; then
+# crt1.o defines data_start and __data_start. Keep them first.
+# Next put all the .data.spehandle sections, with a trailing zero word.
+ DATA_START_SYMBOLS="${RELOCATING+*crt1.o(.data .data.* .gnu.linkonce.d.*)
+ PROVIDE (__spe_handle = .);
+ *(.data.spehandle)
+ . += 4 * (DEFINED (__spe_handle) || . != 0);}"
+fi
diff --git a/binutils-2.21/ld/emulparams/elf32ppc_fbsd.sh b/binutils-2.21/ld/emulparams/elf32ppc_fbsd.sh
new file mode 100644
index 0000000..2bac85c
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32ppc_fbsd.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/elf32ppc.sh
+. ${srcdir}/emulparams/elf_fbsd.sh
diff --git a/binutils-2.21/ld/emulparams/elf32ppccommon.sh b/binutils-2.21/ld/emulparams/elf32ppccommon.sh
new file mode 100644
index 0000000..15cb3b1
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32ppccommon.sh
@@ -0,0 +1,50 @@
+# The PLT-agnostic parts of a generic 32-bit ELF PowerPC target. Included by:
+# elf32ppc.sh elf32ppcvxworks.sh
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-powerpc"
+NO_REL_RELOCS=yes
+TEXT_START_ADDR=0x01800000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
+ARCH=powerpc:common
+MACHINE=
+EXECUTABLE_SYMBOLS='PROVIDE (__stack = 0); PROVIDE (___stack = 0);'
+if test -z "${CREATE_SHLIB}"; then
+ SDATA_START_SYMBOLS="PROVIDE (_SDA_BASE_ = 32768);"
+ SDATA2_START_SYMBOLS="PROVIDE (_SDA2_BASE_ = 32768);"
+ SBSS_START_SYMBOLS="PROVIDE (__sbss_start = .); PROVIDE (___sbss_start = .);"
+ SBSS_END_SYMBOLS="PROVIDE (__sbss_end = .); PROVIDE (___sbss_end = .);"
+else
+ unset SDATA_START_SYMBOLS
+ unset SDATA2_START_SYMBOLS
+ unset SBSS_START_SYMBOLS
+ unset SBSS_END_SYMBOLS
+fi
+OTHER_END_SYMBOLS="__end = .;"
+OTHER_RELRO_SECTIONS="
+ .fixup ${RELOCATING-0} : { *(.fixup) }
+ .got1 ${RELOCATING-0} : { *(.got1) }
+ .got2 ${RELOCATING-0} : { *(.got2) }
+"
+OTHER_GOT_RELOC_SECTIONS="
+ .rela.got1 ${RELOCATING-0} : { *(.rela.got1) }
+ .rela.got2 ${RELOCATING-0} : { *(.rela.got2) }
+"
+
+# Treat a host that matches the target with the possible exception of "64"
+# in the name as if it were native.
+if test `echo "$host" | sed -e s/64//` = `echo "$target" | sed -e s/64//`; then
+ case " $EMULATION_LIBPATH " in
+ *" ${EMULATION_NAME} "*)
+ NATIVE=yes
+ ;;
+ esac
+fi
+
+# Look for 64 bit target libraries in /lib64, /usr/lib64 etc., first.
+case "$EMULATION_NAME" in
+ *64*) LIBPATH_SUFFIX=64 ;;
+esac
diff --git a/binutils-2.21/ld/emulparams/elf32ppclinux.sh b/binutils-2.21/ld/emulparams/elf32ppclinux.sh
new file mode 100644
index 0000000..262731a
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32ppclinux.sh
@@ -0,0 +1,8 @@
+. ${srcdir}/emulparams/elf32ppc.sh
+TEXT_START_ADDR=0x10000000
+unset EXECUTABLE_SYMBOLS
+unset OTHER_END_SYMBOLS
+test -z "${RELOCATING}" || OTHER_SECTIONS="/DISCARD/ : { *(.fixup) }"
+OTHER_RELRO_SECTIONS="
+ .got1 ${RELOCATING-0} : { *(.got1) }
+ .got2 ${RELOCATING-0} : { *(.got2) }"
diff --git a/binutils-2.21/ld/emulparams/elf32ppcnto.sh b/binutils-2.21/ld/emulparams/elf32ppcnto.sh
new file mode 100644
index 0000000..d0b3e3d
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32ppcnto.sh
@@ -0,0 +1,4 @@
+. ${srcdir}/emulparams/elf32ppc.sh
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+TEXT_START_ADDR=0x48040000
+
diff --git a/binutils-2.21/ld/emulparams/elf32ppcsim.sh b/binutils-2.21/ld/emulparams/elf32ppcsim.sh
new file mode 100644
index 0000000..c3466cf
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32ppcsim.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/elf32ppc.sh
+TEXT_START_ADDR=0x10000000
diff --git a/binutils-2.21/ld/emulparams/elf32ppcvxworks.sh b/binutils-2.21/ld/emulparams/elf32ppcvxworks.sh
new file mode 100644
index 0000000..1bc3f30
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32ppcvxworks.sh
@@ -0,0 +1,3 @@
+. ${srcdir}/emulparams/elf32ppccommon.sh
+OUTPUT_FORMAT="elf32-powerpc-vxworks"
+. ${srcdir}/emulparams/vxworks.sh
diff --git a/binutils-2.21/ld/emulparams/elf32ppcwindiss.sh b/binutils-2.21/ld/emulparams/elf32ppcwindiss.sh
new file mode 100644
index 0000000..b40d782
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32ppcwindiss.sh
@@ -0,0 +1,24 @@
+TEMPLATE_NAME=elf32
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-powerpc"
+NO_REL_RELOCS=yes
+ARCH=powerpc
+MACHINE=
+EMBEDDED=yes
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+
+# The data below is taken from the windiss.dld linker script that comes with
+# the Diab linker.
+TEXT_START_ADDR=0x100000
+DATA_START_SYMBOLS='__DATA_ROM = .; __DATA_RAM = .;'
+EXECUTABLE_SYMBOLS='__HEAP_START = .; __SP_INIT = 0x800000; __SP_END = __SP_INIT - 0x20000; __HEAP_END = __SP_END; __DATA_END = _edata; __BSS_START = __bss_start; __BSS_END = _end; __HEAP_START = _end;'
+
+# The Diab tools use a different init/fini convention. Initialization code
+# is place in sections named ".init$NN". These sections are then concatenated
+# into the .init section. It is important that .init$00 be first and .init$99
+# be last. The other sections should be sorted, but the current linker script
+# parse does not seem to allow that with the SORT keyword in this context.
+INIT_START='*(.init$00); *(.init$0[1-9]); *(.init$[1-8][0-9]); *(.init$9[0-8])'
+INIT_END='*(.init$99)'
+FINI_START='*(.fini$00); *(.fini$0[1-9]); *(.fini$[1-8][0-9]); *(.fini$9[0-8])'
+FINI_END='*(.fini$99)'
diff --git a/binutils-2.21/ld/emulparams/elf32rx.sh b/binutils-2.21/ld/emulparams/elf32rx.sh
new file mode 100644
index 0000000..729b4b3
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32rx.sh
@@ -0,0 +1,32 @@
+MACHINE=
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-rx-le"
+# See also `include/elf/rx.h'
+TEXT_START_ADDR=0x10000000
+ARCH=rx
+ENTRY=_start
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=rxelf
+# EXTRA_EM_FILE=needrelax
+ELFSIZE=32
+MAXPAGESIZE=256
+# This is like setting STACK_ADDR to 0xbffffffc, except that the setting can
+# be overridden, e.g. --defsym _stack=0x0f00, and that we put an extra
+# sentinal value at the bottom.
+# N.B. We can't use PROVIDE to set the default value in a symbol because
+# the address is needed to place the .stack section, which in turn is needed
+# to hold the sentinel value(s).
+test -z "$CREATE_SHLIB" && OTHER_SECTIONS=" .stack ${RELOCATING-0}${RELOCATING+(DEFINED(__stack) ? __stack : 0xbffffffc)} :
+ {
+ ${RELOCATING+__stack = .;}
+ *(.stack)
+ LONG(0xdeaddead)
+ }"
+# We do not need .stack for shared library.
+test -n "$CREATE_SHLIB" && OTHER_SECTIONS=""
+
+OTHER_TEXT_SECTIONS='*(P)'
+OTHER_READONLY_SECTIONS='C_1 : { *(C_1) } C_2 : { *(C_2) } C : { *(C) }'
+OTHER_READWRITE_SECTIONS='D_1 : { *(D_1) } D_2 : { *(D_2) } D : { *(D) }'
+OTHER_BSS_SECTIONS='B_1 : { *(B_1) } B_2 : { *(B_2) } B : { *(B) }'
diff --git a/binutils-2.21/ld/emulparams/elf32vax.sh b/binutils-2.21/ld/emulparams/elf32vax.sh
new file mode 100644
index 0000000..9ddc754
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32vax.sh
@@ -0,0 +1,14 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-vax"
+NO_REL_RELOCS=yes
+TEXT_START_ADDR=0x10000
+case ${LD_FLAG} in
+ n|N) TEXT_START_ADDR=0x1000 ;;
+esac
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ARCH=vax
+MACHINE=
+NOP=0x0101
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+NO_SMALL_DATA=yes
diff --git a/binutils-2.21/ld/emulparams/elf32xc16x.sh b/binutils-2.21/ld/emulparams/elf32xc16x.sh
new file mode 100644
index 0000000..f88ccee
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32xc16x.sh
@@ -0,0 +1,8 @@
+SCRIPT_NAME=elf32xc16x
+TEMPLATE_NAME=elf32
+OUTPUT_FORMAT="elf32-xc16x"
+TEXT_START_ADDR=0x00400
+ARCH=xc16x
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ENTRY=_start
+EMBEDDED=yes
diff --git a/binutils-2.21/ld/emulparams/elf32xc16xl.sh b/binutils-2.21/ld/emulparams/elf32xc16xl.sh
new file mode 100644
index 0000000..14eb24b
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32xc16xl.sh
@@ -0,0 +1,8 @@
+SCRIPT_NAME=elf32xc16xl
+TEMPLATE_NAME=elf32
+OUTPUT_FORMAT="elf32-xc16x"
+TEXT_START_ADDR=0xc00300
+ARCH=xc16x:xc16xl
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ENTRY=_start
+EMBEDDED=yes
diff --git a/binutils-2.21/ld/emulparams/elf32xc16xs.sh b/binutils-2.21/ld/emulparams/elf32xc16xs.sh
new file mode 100644
index 0000000..2454963
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32xc16xs.sh
@@ -0,0 +1,8 @@
+SCRIPT_NAME=elf32xc16xs
+TEMPLATE_NAME=elf32
+OUTPUT_FORMAT="elf32-xc16x"
+TEXT_START_ADDR=0xc00300
+ARCH=xc16x:xc16xs
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ENTRY=_start
+EMBEDDED=yes
diff --git a/binutils-2.21/ld/emulparams/elf32xstormy16.sh b/binutils-2.21/ld/emulparams/elf32xstormy16.sh
new file mode 100644
index 0000000..a512ec3
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32xstormy16.sh
@@ -0,0 +1,13 @@
+MACHINE=
+SCRIPT_NAME=xstormy16
+TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=needrelax
+OUTPUT_FORMAT="elf32-xstormy16"
+# See also `include/elf/xstormy16.h'
+ARCH=xstormy16
+ALIGNMENT=2
+ENTRY=_start
+EMBEDDED=yes
+NOP=0
+
+
diff --git a/binutils-2.21/ld/emulparams/elf32xtensa.sh b/binutils-2.21/ld/emulparams/elf32xtensa.sh
new file mode 100644
index 0000000..72ba2bb
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf32xtensa.sh
@@ -0,0 +1,45 @@
+SCRIPT_NAME=elfxtensa
+TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=xtensaelf
+OUTPUT_FORMAT=undefined
+BIG_OUTPUT_FORMAT="elf32-xtensa-be"
+LITTLE_OUTPUT_FORMAT="elf32-xtensa-le"
+NO_REL_RELOCS=yes
+TEXT_START_ADDR=0x400000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ARCH=xtensa
+MACHINE=
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+GENERATE_COMBRELOC_SCRIPT=yes
+NO_SMALL_DATA=yes
+TEXT_PLT=yes
+PLT="/* .plt* sections are embedded in .text */"
+GOT=".got ${RELOCATING-0} : { *(.got) }"
+OTHER_READONLY_SECTIONS="
+ .got.loc ${RELOCATING-0} : { *(.got.loc) }
+ .xt_except_table ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.xt_except_table${RELOCATING+ .xt_except_table.* .gnu.linkonce.e.*})) }
+"
+OTHER_RELRO_SECTIONS="
+ .xt_except_table ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.xt_except_table${RELOCATING+ .xt_except_table.* .gnu.linkonce.e.*})) }
+"
+OTHER_READWRITE_SECTIONS="
+ .xt_except_desc ${RELOCATING-0} :
+ {
+ *(.xt_except_desc${RELOCATING+ .xt_except_desc.* .gnu.linkonce.h.*})
+ ${RELOCATING+*(.xt_except_desc_end)}
+ }
+"
+OTHER_SDATA_SECTIONS="
+ .lit4 ${RELOCATING-0} :
+ {
+ ${RELOCATING+PROVIDE (_lit4_start = .);}
+ *(.lit4${RELOCATING+ .lit4.* .gnu.linkonce.lit4.*})
+ ${RELOCATING+PROVIDE (_lit4_end = .);}
+ }
+"
+OTHER_SECTIONS="
+ .xt.lit 0 : { KEEP (*(.xt.lit${RELOCATING+ .xt.lit.* .gnu.linkonce.p.*})) }
+ .xt.insn 0 : { KEEP (*(.xt.insn${RELOCATING+ .gnu.linkonce.x.*})) }
+ .xt.prop 0 : { KEEP (*(.xt.prop${RELOCATING+ .xt.prop.* .gnu.linkonce.prop.*})) }
+"
diff --git a/binutils-2.21/ld/emulparams/elf64_aix.sh b/binutils-2.21/ld/emulparams/elf64_aix.sh
new file mode 100644
index 0000000..39325f5
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf64_aix.sh
@@ -0,0 +1,21 @@
+# See genscripts.sh and ../scripttempl/elf.sc for the meaning of these.
+SCRIPT_NAME=elf
+ELFSIZE=64
+TEMPLATE_NAME=elf32
+OUTPUT_FORMAT="elf64-ia64-aix-little"
+ARCH=ia64
+MACHINE=
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+TEXT_START_ADDR="0x10000000"
+DATA_ADDR="ALIGN (0x10000000) + (. & (${MAXPAGESIZE} - 1))"
+GENERATE_SHLIB_SCRIPT=yes
+NOP=0x00300000010070000002000001000400 # a bundle full of nops
+OTHER_GOT_SECTIONS="
+ .IA_64.pltoff ${RELOCATING-0} : { *(.IA_64.pltoff) }"
+OTHER_PLT_RELOC_SECTIONS="
+ .rela.IA_64.pltoff ${RELOCATING-0} : { *(.rela.IA_64.pltoff) }"
+OTHER_READONLY_SECTIONS="
+ .opd ${RELOCATING-0} : { *(.opd) }
+ .IA_64.unwind_info ${RELOCATING-0} : { *(.IA_64.unwind_info*${RELOCATING+ .gnu.linkonce.ia64unwi.*}) }
+ .IA_64.unwind ${RELOCATING-0} : { *(.IA_64.unwind*${RELOCATING+ .gnu.linkonce.ia64unw.*}) }"
+LIB_PATH="=/usr/lib/ia64l64:=/usr/lib:=/usr/local/lib"
diff --git a/binutils-2.21/ld/emulparams/elf64_ia64.sh b/binutils-2.21/ld/emulparams/elf64_ia64.sh
new file mode 100644
index 0000000..7e5e54d
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf64_ia64.sh
@@ -0,0 +1,39 @@
+# See genscripts.sh and ../scripttempl/elf.sc for the meaning of these.
+SCRIPT_NAME=elf
+ELFSIZE=64
+TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=ia64elf
+OUTPUT_FORMAT="elf64-ia64-little"
+ARCH=ia64
+MACHINE=
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+# FIXME: It interferes with linker relaxation. Disable it until it is
+# fixed.
+if test "0" = "1" -a -n "$CREATE_SHLIB"; then
+ # Optimize shared libraries for 16K page size
+ COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
+fi
+TEXT_START_ADDR="0x4000000000000000"
+DATA_ADDR="0x6000000000000000 + (. & (${MAXPAGESIZE} - 1))"
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+NOP=0x00300000010070000002000001000400 # a bundle full of nops
+OTHER_GOT_SECTIONS="
+ .IA_64.pltoff ${RELOCATING-0} : { *(.IA_64.pltoff) }"
+OTHER_PLT_RELOC_SECTIONS="
+ .rela.IA_64.pltoff ${RELOCATING-0} : { *(.rela.IA_64.pltoff) }"
+OTHER_READONLY_SECTIONS=
+OTHER_READWRITE_SECTIONS=
+test -z "$CREATE_PIE" && OTHER_READONLY_SECTIONS="
+ .opd ${RELOCATING-0} : { *(.opd) }"
+test -n "$CREATE_PIE" && OTHER_READWRITE_SECTIONS="
+ .opd ${RELOCATING-0} : { *(.opd) }"
+test -n "$CREATE_PIE" && OTHER_GOT_RELOC_SECTIONS="
+ .rela.opd ${RELOCATING-0} : { *(.rela.opd) }"
+OTHER_READONLY_SECTIONS="${OTHER_READONLY_SECTIONS}
+ .IA_64.unwind_info ${RELOCATING-0} : { *(.IA_64.unwind_info${RELOCATING+* .gnu.linkonce.ia64unwi.*}) }
+ .IA_64.unwind ${RELOCATING-0} : { *(.IA_64.unwind${RELOCATING+* .gnu.linkonce.ia64unw.*}) }"
+# Intel C++ compiler, prior to 9.0, puts small data in .ctors and
+# .dtors. They have to be next to .sbss/.sbss2/.sdata/.sdata2.
+SMALL_DATA_CTOR=" "
+SMALL_DATA_DTOR=" "
diff --git a/binutils-2.21/ld/emulparams/elf64_ia64_fbsd.sh b/binutils-2.21/ld/emulparams/elf64_ia64_fbsd.sh
new file mode 100644
index 0000000..ab7e78f
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf64_ia64_fbsd.sh
@@ -0,0 +1,6 @@
+. ${srcdir}/emulparams/elf64_ia64.sh
+TEXT_START_ADDR="0x2000000000000000"
+unset DATA_ADDR
+unset SMALL_DATA_CTOR
+unset SMALL_DATA_DTOR
+. ${srcdir}/emulparams/elf_fbsd.sh
diff --git a/binutils-2.21/ld/emulparams/elf64_s390.sh b/binutils-2.21/ld/emulparams/elf64_s390.sh
new file mode 100644
index 0000000..ae8f26e
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf64_s390.sh
@@ -0,0 +1,35 @@
+SCRIPT_NAME=elf
+ELFSIZE=64
+OUTPUT_FORMAT="elf64-s390"
+NO_REL_RELOCS=yes
+TEXT_START_ADDR=0x80000000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
+ARCH="s390:64-bit"
+MACHINE=
+NOP=0x07070707
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+NO_SMALL_DATA=yes
+
+# Treat a host that matches the target with the possible exception of "x"
+# in the name as if it were native.
+if test `echo "$host" | sed -e s/390x/390/` \
+ = `echo "$target" | sed -e s/390x/390/`; then
+ case " $EMULATION_LIBPATH " in
+ *" ${EMULATION_NAME} "*)
+ NATIVE=yes
+ esac
+fi
+
+# Look for 64 bit target libraries in /lib64, /usr/lib64 etc., first
+# on Linux.
+case "$target" in
+ s390*-linux*)
+ case "$EMULATION_NAME" in
+ *64*)
+ LIBPATH_SUFFIX=64 ;;
+ esac
+ ;;
+esac
diff --git a/binutils-2.21/ld/emulparams/elf64_sparc.sh b/binutils-2.21/ld/emulparams/elf64_sparc.sh
new file mode 100644
index 0000000..9397b87
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf64_sparc.sh
@@ -0,0 +1,50 @@
+SCRIPT_NAME=elf
+ELFSIZE=64
+TEMPLATE_NAME=elf32
+OUTPUT_FORMAT="elf64-sparc"
+NO_REL_RELOCS=yes
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
+ARCH="sparc:v9"
+MACHINE=
+DATA_PLT=
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+NOP=0x01000000
+NO_SMALL_DATA=yes
+
+case "$target" in
+ sparc*-solaris*)
+ TEXT_START_ADDR=0x100000000
+ ;;
+ *)
+ TEXT_START_ADDR=0x100000
+ ;;
+esac
+
+# Treat a host that matches the target with the possible exception of "64"
+# and "v7", "v8", "v9" in the name as if it were native.
+if test `echo "$host" | sed -e 's/64//;s/v[789]//'` \
+ = `echo "$target" | sed -e 's/64//;s/v[789]//'`; then
+ case " $EMULATION_LIBPATH " in
+ *" ${EMULATION_NAME} "*)
+ NATIVE=yes
+ ;;
+ esac
+fi
+
+# Linux and Solaris modify the default library search path
+# to first include a 64-bit specific directory. It's put
+# in slightly different places on the two systems.
+# Look for 64 bit target libraries in /lib64, /usr/lib64 etc., first
+# on Linux and /lib/sparcv9, /usr/lib/sparcv9 etc. on Solaris.
+case "$EMULATION_NAME" in
+ *64*)
+ case "$target" in
+ sparc*-linux*)
+ LIBPATH_SUFFIX=64 ;;
+ sparc*-solaris*)
+ LIBPATH_SUFFIX=/sparcv9 ;;
+ esac
+ ;;
+esac
diff --git a/binutils-2.21/ld/emulparams/elf64_sparc_fbsd.sh b/binutils-2.21/ld/emulparams/elf64_sparc_fbsd.sh
new file mode 100644
index 0000000..21d13ab
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf64_sparc_fbsd.sh
@@ -0,0 +1,4 @@
+. ${srcdir}/emulparams/elf64_sparc.sh
+. ${srcdir}/emulparams/elf_fbsd.sh
+
+OUTPUT_FORMAT="elf64-sparc-freebsd"
diff --git a/binutils-2.21/ld/emulparams/elf64_sparc_sol2.sh b/binutils-2.21/ld/emulparams/elf64_sparc_sol2.sh
new file mode 100644
index 0000000..2fad634
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf64_sparc_sol2.sh
@@ -0,0 +1,4 @@
+. ${srcdir}/emulparams/elf64_sparc.sh
+. ${srcdir}/emulparams/solaris2.sh
+EXTRA_EM_FILE=solaris2
+OUTPUT_FORMAT="elf64-sparc-sol2"
diff --git a/binutils-2.21/ld/emulparams/elf64alpha.sh b/binutils-2.21/ld/emulparams/elf64alpha.sh
new file mode 100644
index 0000000..82f505d
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf64alpha.sh
@@ -0,0 +1,27 @@
+ENTRY=_start
+SCRIPT_NAME=elf
+ELFSIZE=64
+TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=alphaelf
+OUTPUT_FORMAT="elf64-alpha"
+NO_REL_RELOCS=yes
+TEXT_START_ADDR="0x120000000"
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
+ARCH=alpha
+MACHINE=
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+
+# Yes, we want duplicate .plt sections. The linker chooses the
+# appropriate one magically in alpha_after_open.
+PLT=".plt ${RELOCATING-0} : SPECIAL { *(.plt) }"
+DATA_PLT=yes
+TEXT_PLT=yes
+
+# Note that the number is always big-endian, thus we have to
+# reverse the digit string.
+NOP=0x0000fe2f1f04ff47 # unop; nop
+
+OTHER_READONLY_SECTIONS="
+ .reginfo ${RELOCATING-0} : { *(.reginfo) }"
diff --git a/binutils-2.21/ld/emulparams/elf64alpha_fbsd.sh b/binutils-2.21/ld/emulparams/elf64alpha_fbsd.sh
new file mode 100644
index 0000000..fd4a0a4
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf64alpha_fbsd.sh
@@ -0,0 +1,3 @@
+. ${srcdir}/emulparams/elf64alpha.sh
+. ${srcdir}/emulparams/elf_fbsd.sh
+OUTPUT_FORMAT="elf64-alpha-freebsd"
diff --git a/binutils-2.21/ld/emulparams/elf64alpha_nbsd.sh b/binutils-2.21/ld/emulparams/elf64alpha_nbsd.sh
new file mode 100644
index 0000000..8116f48
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf64alpha_nbsd.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/elf64alpha.sh
+ENTRY=__start
diff --git a/binutils-2.21/ld/emulparams/elf64bmip-defs.sh b/binutils-2.21/ld/emulparams/elf64bmip-defs.sh
new file mode 100644
index 0000000..110f892
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf64bmip-defs.sh
@@ -0,0 +1,3 @@
+. ${srcdir}/emulparams/elf32bmipn32-defs.sh
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
+INITIAL_READONLY_SECTIONS=".MIPS.options : { *(.MIPS.options) }"
diff --git a/binutils-2.21/ld/emulparams/elf64bmip.sh b/binutils-2.21/ld/emulparams/elf64bmip.sh
new file mode 100755
index 0000000..0df6528
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf64bmip.sh
@@ -0,0 +1,23 @@
+. ${srcdir}/emulparams/elf64bmip-defs.sh
+OUTPUT_FORMAT="elf64-bigmips"
+BIG_OUTPUT_FORMAT="elf64-bigmips"
+LITTLE_OUTPUT_FORMAT="elf64-littlemips"
+SHLIB_TEXT_START_ADDR=0x3ffffe0000
+
+# IRIX6 defines these symbols. 0x40 is the size of the ELF header.
+EXECUTABLE_SYMBOLS="
+ __dso_displacement = 0;
+ ${CREATE_SHLIB-${CREATE_PIE-__elf_header = ${TEXT_START_ADDR};}}
+ ${CREATE_SHLIB+__elf_header = ${SHLIB_TEXT_START_ADDR};}
+ ${CREATE_PIE+__elf_header = ${SHLIB_TEXT_START_ADDR};}
+ __program_header_table = __elf_header + 0x40;
+"
+
+# There are often dynamic relocations against the .rodata section.
+# Setting DT_TEXTREL in the .dynamic section does not convince the
+# IRIX6 linker to permit relocations against the text segment.
+# Following the IRIX linker, we simply put .rodata in the data
+# segment.
+WRITABLE_RODATA=
+
+EXTRA_EM_FILE=irix
diff --git a/binutils-2.21/ld/emulparams/elf64btsmip.sh b/binutils-2.21/ld/emulparams/elf64btsmip.sh
new file mode 100644
index 0000000..b9e80bb
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf64btsmip.sh
@@ -0,0 +1,16 @@
+# If you change this file, please also look at files which source this one:
+# elf64ltsmip.sh
+
+. ${srcdir}/emulparams/elf64bmip-defs.sh
+OUTPUT_FORMAT="elf64-tradbigmips"
+BIG_OUTPUT_FORMAT="elf64-tradbigmips"
+LITTLE_OUTPUT_FORMAT="elf64-tradlittlemips"
+
+# Magic sections.
+OTHER_TEXT_SECTIONS='*(.mips16.fn.*) *(.mips16.call.*)'
+OTHER_SECTIONS='
+ .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) }
+ .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) }
+'
+
+TEXT_START_ADDR="0x120000000"
diff --git a/binutils-2.21/ld/emulparams/elf64hppa.sh b/binutils-2.21/ld/emulparams/elf64hppa.sh
new file mode 100755
index 0000000..eeeadea
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf64hppa.sh
@@ -0,0 +1,76 @@
+SCRIPT_NAME=elf64hppa
+ELFSIZE=64
+OUTPUT_FORMAT="elf64-hppa"
+NO_REL_RELOCS=yes
+TEXT_START_ADDR=0x4000000000001000
+DATA_ADDR=0x8000000000001000
+TARGET_PAGE_SIZE=4096
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+LIB_PATH="=/usr/lib/pa20_64:=/opt/langtools/lib/pa20_64"
+
+# The HP dynamic linker actually requires you set the start of text and
+# data to some reasonable value. Of course nobody knows what reasoanble
+# really is, so we just use the same values that HP's linker uses.
+SHLIB_TEXT_START_ADDR=0x4000000000001000
+SHLIB_DATA_ADDR=0x8000000000001000
+
+ARCH=hppa
+MACHINE=hppa2.0w
+ENTRY="main"
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+
+# We really want multiple .stub sections, one for each input .text section,
+# but for now this is good enough.
+OTHER_READONLY_SECTIONS="
+ .PARISC.unwind ${RELOCATING-0} : { *(.PARISC.unwind) }"
+
+# The PA64 ELF port treats .plt sections differently than most. We also have
+# to create a .opd section. What most systems call the .got, we call the .dlt
+OTHER_READWRITE_SECTIONS="
+ .PARISC.pfa_count ${RELOCATING-0} : { *(.PARISC.pfa_count) }
+ .PARISC.global ${RELOCATING-0} : { *(.PARISC.global) }
+ .opd ${RELOCATING-0} : { *(.opd) }
+ ${RELOCATING+PROVIDE (__gp = .);}
+ .plt ${RELOCATING-0} : { *(.plt) }
+ .dlt ${RELOCATING-0} : { *(.dlt) }"
+
+# The PA64 ELF port has an additional huge bss section.
+OTHER_BSS_SECTIONS="
+ .PARISC.ansi.common ${RELOCATING-0} : { *(.PARISC.ansi.common) }
+ .PARISC.huge.common ${RELOCATING-0} : { *(.PARISC.huge.common) }
+ .hbss ${RELOCATING-0} : { *(.hbss) }
+ .tbss ${RELOCATING-0} : { *(.tbss) }"
+
+#OTHER_SYMBOLS='PROVIDE (__TLS_SIZE = SIZEOF (.tbss));'
+OTHER_SYMBOLS='
+ PROVIDE (__TLS_SIZE = 0);
+ PROVIDE (__TLS_INIT_SIZE = 0);
+ PROVIDE (__TLS_INIT_START = 0);
+ PROVIDE (__TLS_INIT_A = 0);
+ PROVIDE (__TLS_PREALLOC_DTV_A = 0);'
+
+# HPs use .dlt where systems use .got. Sigh.
+OTHER_GOT_RELOC_SECTIONS="
+ .rela.dlt ${RELOCATING-0} : { *(.rela.dlt) }
+ .rela.opd ${RELOCATING-0} : { *(.rela.opd) }"
+
+# We're not actually providing a symbol anymore (due to the inability to be
+# safe in regards to shared libraries). So we just allocate the hunk of space
+# unconditionally, but do not mess around with the symbol table.
+DATA_START_SYMBOLS='. += 16;'
+
+DATA_PLT=
+PLT_BEFORE_GOT=
+
+# .dynamic should be at the start of the .text segment.
+TEXT_DYNAMIC=
+
+# The linker is required to define these two symbols.
+EXECUTABLE_SYMBOLS='PROVIDE (__SYSTEM_ID = 0x214); PROVIDE (_FPU_STATUS = 0x0);'
+# The PA64 ELF port needs two additional initializer sections and also wants
+# a start/end symbol pair for the .init and .fini sections.
+INIT_START='KEEP (*(.HP.init)); PROVIDE (__preinit_start = .); KEEP (*(.preinit)); PROVIDE (__preinit_end = .); PROVIDE (__init_start = .);'
+INIT_END='PROVIDE (__init_end = .);'
+FINI_START='PROVIDE (__fini_start = .);'
+FINI_END='PROVIDE (__fini_end = .);'
diff --git a/binutils-2.21/ld/emulparams/elf64lppc.sh b/binutils-2.21/ld/emulparams/elf64lppc.sh
new file mode 100644
index 0000000..1c47493
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf64lppc.sh
@@ -0,0 +1,3 @@
+. ${srcdir}/emulparams/elf64ppc.sh
+OUTPUT_FORMAT="elf64-powerpcle"
+NOP=0x00000060
diff --git a/binutils-2.21/ld/emulparams/elf64ltsmip.sh b/binutils-2.21/ld/emulparams/elf64ltsmip.sh
new file mode 100644
index 0000000..efd6b7d
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf64ltsmip.sh
@@ -0,0 +1,4 @@
+. ${srcdir}/emulparams/elf64btsmip.sh
+OUTPUT_FORMAT="elf64-tradlittlemips"
+BIG_OUTPUT_FORMAT="elf64-tradbigmips"
+LITTLE_OUTPUT_FORMAT="elf64-tradlittlemips"
diff --git a/binutils-2.21/ld/emulparams/elf64mmix.sh b/binutils-2.21/ld/emulparams/elf64mmix.sh
new file mode 100644
index 0000000..bdb5d0a
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf64mmix.sh
@@ -0,0 +1,61 @@
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+ELFSIZE=64
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf64-mmix"
+NO_REL_RELOCS=yes
+ENTRY=_start.
+
+# Default to 0 as mmixal does.
+TEXT_START_ADDR='DEFINED (__.MMIX.start..text) ? __.MMIX.start..text : 0'
+# Don't add SIZEOF_HEADERS.
+# Don't set EMBEDDED, that would be misleading; it's not that kind of system.
+TEXT_BASE_ADDRESS=$TEXT_START_ADDR
+DATA_ADDR='DEFINED (__.MMIX.start..data) ? __.MMIX.start..data : 0x2000000000000000'
+
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ARCH=mmix
+MACHINE=
+COMPILE_IN=yes
+EXTRA_EM_FILE=mmixelf
+
+# The existence of a symbol __start (or _start) should overrule Main, so
+# it can be a user symbol without the associated mmixal magic. We
+# also want to provide Main as a synonym for _start, if Main wasn't
+# defined but is referred to, and _start was defined.
+#
+# The reason we use a symbol "_start." as a mediator is to avoid
+# causing ld to force the type of _start to object rather than no
+# type, which confuses disassembly; we also make it alphanumerically
+# a successor of _start for similar reasons. Perhaps it's a linker
+# bug that linker-defined symbols set the symbol-type.
+#
+# Note that we smuggle this into OTHER_TEXT_SECTIONS (at the end
+# of .text) rather than TEXT_START_SYMBOLS. This is necessary, as
+# DEFINED wouldn't find the symbol if it was at the top; presumably
+# before the definition, if the definition is not in the first file.
+# FIXME: Arguably a linker bug.
+# Only do this for a final link, or else we'll mess up e.g. error
+# messages.
+OTHER_TEXT_SECTIONS="
+${RELOCATING+
+ _start. = (DEFINED (_start) ? _start
+ : (DEFINED (Main) ? Main : (DEFINED (.text) ? .text : 0)));
+ PROVIDE (Main = DEFINED (Main) ? Main : (DEFINED (_start) ? _start : _start.));
+}"
+
+OTHER_SECTIONS='
+ .MMIX.reg_contents :
+ {
+ /* Note that this section always has a fixed VMA - that of its
+ first register * 8. */
+ *(.MMIX.reg_contents.linker_allocated);
+ *(.MMIX.reg_contents);
+ }
+'
+
+# FIXME: Also bit by the PROVIDE bug? If not, this could be
+# EXECUTABLE_SYMBOLS.
+# By default, put the high end of the stack where the register stack
+# begins. They grow in opposite directions. */
+OTHER_SYMBOLS="PROVIDE (__Stack_start = 0x6000000000000000);"
diff --git a/binutils-2.21/ld/emulparams/elf64ppc.sh b/binutils-2.21/ld/emulparams/elf64ppc.sh
new file mode 100644
index 0000000..c9337ea
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf64ppc.sh
@@ -0,0 +1,55 @@
+TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=ppc64elf
+ELFSIZE=64
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf64-powerpc"
+NO_REL_RELOCS=yes
+TEXT_START_ADDR=0x10000000
+#SEGMENT_SIZE=0x10000000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
+ARCH=powerpc:common64
+MACHINE=
+NOP=0x60000000
+OTHER_TEXT_SECTIONS="*(.sfpr .glink)"
+BSS_PLT=
+OTHER_BSS_SYMBOLS="
+ .tocbss ${RELOCATING-0} :${RELOCATING+ ALIGN(8)} { *(.tocbss)}"
+OTHER_PLT_RELOC_SECTIONS="
+ .rela.tocbss ${RELOCATING-0} : { *(.rela.tocbss) }"
+
+if test x${RELOCATING+set} = xset; then
+ GOT="
+ .got : ALIGN(8) { *(.got .toc) }"
+else
+ GOT="
+ .got 0 : { *(.got) }
+ .toc 0 : { *(.toc) }"
+fi
+# Put .opd relocs first so ld.so will process them before any ifunc relocs.
+INITIAL_RELOC_SECTIONS="
+ .rela.opd ${RELOCATING-0} : { *(.rela.opd) }"
+OTHER_GOT_RELOC_SECTIONS="
+ .rela.toc ${RELOCATING-0} : { *(.rela.toc) }
+ .rela.branch_lt ${RELOCATING-0} : { *(.rela.branch_lt) }"
+OTHER_READWRITE_SECTIONS="
+ .toc1 ${RELOCATING-0} :${RELOCATING+ ALIGN(8)} { *(.toc1) }
+ .opd ${RELOCATING-0} :${RELOCATING+ ALIGN(8)} { KEEP (*(.opd)) }
+ .branch_lt ${RELOCATING-0} :${RELOCATING+ ALIGN(8)} { *(.branch_lt) }"
+
+# Treat a host that matches the target with the possible exception of "64"
+# in the name as if it were native.
+if test `echo "$host" | sed -e s/64//` = `echo "$target" | sed -e s/64//`; then
+ case " $EMULATION_LIBPATH " in
+ *" ${EMULATION_NAME} "*)
+ NATIVE=yes
+ ;;
+ esac
+fi
+
+# Look for 64 bit target libraries in /lib64, /usr/lib64 etc., first.
+case "$EMULATION_NAME" in
+ *64*) LIBPATH_SUFFIX=64 ;;
+esac
diff --git a/binutils-2.21/ld/emulparams/elf_fbsd.sh b/binutils-2.21/ld/emulparams/elf_fbsd.sh
new file mode 100644
index 0000000..2ea646e
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf_fbsd.sh
@@ -0,0 +1 @@
+ELF_INTERPRETER_NAME=\"/usr/libexec/ld-elf.so.1\"
diff --git a/binutils-2.21/ld/emulparams/elf_i386.sh b/binutils-2.21/ld/emulparams/elf_i386.sh
new file mode 100644
index 0000000..d480811
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf_i386.sh
@@ -0,0 +1,15 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-i386"
+NO_RELA_RELOCS=yes
+TEXT_START_ADDR=0x08048000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
+ARCH=i386
+MACHINE=
+NOP=0x90909090
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+NO_SMALL_DATA=yes
+SEPARATE_GOTPLT=12
+IREL_IN_PLT=
diff --git a/binutils-2.21/ld/emulparams/elf_i386_be.sh b/binutils-2.21/ld/emulparams/elf_i386_be.sh
new file mode 100644
index 0000000..efe1a86
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf_i386_be.sh
@@ -0,0 +1,11 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-i386"
+NO_RELA_RELOCS=yes
+TEXT_START_ADDR=0x80000000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ARCH=i386
+MACHINE=
+NOP=0x90909090
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+NO_SMALL_DATA=yes
diff --git a/binutils-2.21/ld/emulparams/elf_i386_chaos.sh b/binutils-2.21/ld/emulparams/elf_i386_chaos.sh
new file mode 100644
index 0000000..1322174
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf_i386_chaos.sh
@@ -0,0 +1,10 @@
+SCRIPT_NAME=elf_chaos
+OUTPUT_FORMAT="elf32-i386"
+TEXT_START_ADDR=0x40000000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ARCH=i386
+MACHINE=
+NOP=0x90909090
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+NO_SMALL_DATA=yes
diff --git a/binutils-2.21/ld/emulparams/elf_i386_fbsd.sh b/binutils-2.21/ld/emulparams/elf_i386_fbsd.sh
new file mode 100644
index 0000000..2378598
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf_i386_fbsd.sh
@@ -0,0 +1,3 @@
+. ${srcdir}/emulparams/elf_i386.sh
+. ${srcdir}/emulparams/elf_fbsd.sh
+OUTPUT_FORMAT="elf32-i386-freebsd"
diff --git a/binutils-2.21/ld/emulparams/elf_i386_ldso.sh b/binutils-2.21/ld/emulparams/elf_i386_ldso.sh
new file mode 100644
index 0000000..4b0d3fb
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf_i386_ldso.sh
@@ -0,0 +1,12 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-i386"
+NO_RELA_RELOCS=yes
+TEXT_START_ADDR=0x08048000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ARCH=i386
+MACHINE=
+NOP=0x90909090
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+ELF_INTERPRETER_NAME=\"/usr/lib/ld.so.1\"
+NO_SMALL_DATA=yes
diff --git a/binutils-2.21/ld/emulparams/elf_i386_sol2.sh b/binutils-2.21/ld/emulparams/elf_i386_sol2.sh
new file mode 100644
index 0000000..7c18fc6
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf_i386_sol2.sh
@@ -0,0 +1,4 @@
+. ${srcdir}/emulparams/elf_i386_ldso.sh
+. ${srcdir}/emulparams/solaris2.sh
+EXTRA_EM_FILE=solaris2
+OUTPUT_FORMAT="elf32-i386-sol2"
diff --git a/binutils-2.21/ld/emulparams/elf_i386_vxworks.sh b/binutils-2.21/ld/emulparams/elf_i386_vxworks.sh
new file mode 100644
index 0000000..6933128
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf_i386_vxworks.sh
@@ -0,0 +1,14 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-i386-vxworks"
+NO_RELA_RELOCS=yes
+TEXT_START_ADDR=0x08048000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
+ARCH=i386
+MACHINE=
+NOP=0x90909090
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+NO_SMALL_DATA=yes
+. ${srcdir}/emulparams/vxworks.sh
diff --git a/binutils-2.21/ld/emulparams/elf_l1om.sh b/binutils-2.21/ld/emulparams/elf_l1om.sh
new file mode 100644
index 0000000..19eea97
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf_l1om.sh
@@ -0,0 +1,68 @@
+SCRIPT_NAME=elf
+ELFSIZE=64
+OUTPUT_FORMAT="elf64-l1om"
+NO_REL_RELOCS=yes
+TEXT_START_ADDR=0x400000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
+ARCH="l1om"
+MACHINE=
+COMPILE_IN=yes
+NOP=0x90909090
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+NO_SMALL_DATA=yes
+LARGE_SECTIONS=yes
+SEPARATE_GOTPLT=24
+
+if [ "x${host}" = "x${target}" ]; then
+ case " $EMULATION_LIBPATH " in
+ *" ${EMULATION_NAME} "*)
+ NATIVE=yes
+ esac
+fi
+
+# Linux modifies the default library search path to first include
+# a 64-bit specific directory.
+case "$target" in
+ l1om*-linux*)
+ case "$EMULATION_NAME" in
+ *l1om*) LIBPATH_SUFFIX=64 ;;
+ esac
+ ;;
+esac
+SCRIPT_NAME=elf
+ELFSIZE=64
+OUTPUT_FORMAT="elf64-l1om"
+NO_REL_RELOCS=yes
+TEXT_START_ADDR=0x400000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
+ARCH="l1om"
+MACHINE=
+COMPILE_IN=yes
+NOP=0x90909090
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+NO_SMALL_DATA=yes
+LARGE_SECTIONS=yes
+SEPARATE_GOTPLT=24
+
+if [ "x${host}" = "x${target}" ]; then
+ case " $EMULATION_LIBPATH " in
+ *" ${EMULATION_NAME} "*)
+ NATIVE=yes
+ esac
+fi
+
+# Linux modifies the default library search path to first include
+# a 64-bit specific directory.
+case "$target" in
+ l1om*-linux*)
+ case "$EMULATION_NAME" in
+ *l1om*) LIBPATH_SUFFIX=64 ;;
+ esac
+ ;;
+esac
diff --git a/binutils-2.21/ld/emulparams/elf_l1om_fbsd.sh b/binutils-2.21/ld/emulparams/elf_l1om_fbsd.sh
new file mode 100644
index 0000000..a90f81e
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf_l1om_fbsd.sh
@@ -0,0 +1,3 @@
+. ${srcdir}/emulparams/elf_l1om.sh
+. ${srcdir}/emulparams/elf_fbsd.sh
+OUTPUT_FORMAT="elf64-l1om-freebsd"
diff --git a/binutils-2.21/ld/emulparams/elf_s390.sh b/binutils-2.21/ld/emulparams/elf_s390.sh
new file mode 100644
index 0000000..218558b
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf_s390.sh
@@ -0,0 +1,13 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-s390"
+NO_REL_RELOCS=yes
+TEXT_START_ADDR=0x00400000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
+ARCH="s390:31-bit"
+MACHINE=
+NOP=0x07070707
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+NO_SMALL_DATA=yes
diff --git a/binutils-2.21/ld/emulparams/elf_x86_64.sh b/binutils-2.21/ld/emulparams/elf_x86_64.sh
new file mode 100644
index 0000000..0e93ad8
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf_x86_64.sh
@@ -0,0 +1,38 @@
+SCRIPT_NAME=elf
+ELFSIZE=64
+OUTPUT_FORMAT="elf64-x86-64"
+NO_REL_RELOCS=yes
+TEXT_START_ADDR=0x400000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
+ARCH="i386:x86-64"
+MACHINE=
+NOP=0x90909090
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+NO_SMALL_DATA=yes
+LARGE_SECTIONS=yes
+SEPARATE_GOTPLT=24
+IREL_IN_PLT=
+
+if [ "x${host}" = "x${target}" ]; then
+ case " $EMULATION_LIBPATH " in
+ *" ${EMULATION_NAME} "*)
+ NATIVE=yes
+ esac
+fi
+
+# Linux/Solaris modify the default library search path to first include
+# a 64-bit specific directory.
+case "$target" in
+ x86_64*-linux*|i[3-7]86-*-linux-*)
+ case "$EMULATION_NAME" in
+ *64*) LIBPATH_SUFFIX=64 ;;
+ esac
+ ;;
+ *-*-solaris2*)
+ LIBPATH_SUFFIX=/amd64
+ ELF_INTERPRETER_NAME=\"/lib/amd64/ld.so.1\"
+ ;;
+esac
diff --git a/binutils-2.21/ld/emulparams/elf_x86_64_fbsd.sh b/binutils-2.21/ld/emulparams/elf_x86_64_fbsd.sh
new file mode 100644
index 0000000..35b6a62
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf_x86_64_fbsd.sh
@@ -0,0 +1,3 @@
+. ${srcdir}/emulparams/elf_x86_64.sh
+. ${srcdir}/emulparams/elf_fbsd.sh
+OUTPUT_FORMAT="elf64-x86-64-freebsd"
diff --git a/binutils-2.21/ld/emulparams/elf_x86_64_sol2.sh b/binutils-2.21/ld/emulparams/elf_x86_64_sol2.sh
new file mode 100644
index 0000000..993f458
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/elf_x86_64_sol2.sh
@@ -0,0 +1,4 @@
+. ${srcdir}/emulparams/elf_x86_64.sh
+. ${srcdir}/emulparams/solaris2.sh
+EXTRA_EM_FILE=solaris2
+OUTPUT_FORMAT="elf64-x86-64-sol2"
diff --git a/binutils-2.21/ld/emulparams/gld960.sh b/binutils-2.21/ld/emulparams/gld960.sh
new file mode 100644
index 0000000..1e03965
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/gld960.sh
@@ -0,0 +1,7 @@
+SCRIPT_NAME=i960
+OUTPUT_FORMAT=""
+TEXT_START_ADDR=0
+TARGET_PAGE_SIZE=128
+ARCH=i960
+TEMPLATE_NAME=gld960
+GLD_STYLE=1
diff --git a/binutils-2.21/ld/emulparams/gld960coff.sh b/binutils-2.21/ld/emulparams/gld960coff.sh
new file mode 100644
index 0000000..65b0dca
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/gld960coff.sh
@@ -0,0 +1,19 @@
+SCRIPT_NAME=i960
+OUTPUT_FORMAT=""
+TEXT_START_ADDR=0
+TARGET_PAGE_SIZE=128
+ARCH=i960
+TEMPLATE_NAME=gld960c
+GLD_STYLE=1
+COFF_CTORS='
+ ___CTOR_LIST__ = .;
+ LONG((___CTOR_END__ - ___CTOR_LIST__) / 4 - 2)
+ *(.ctors)
+ LONG(0)
+ ___CTOR_END__ = .;
+ ___DTOR_LIST__ = .;
+ LONG((___DTOR_END__ - ___DTOR_LIST__) / 4 - 2)
+ *(.dtors)
+ LONG(0)
+ ___DTOR_END__ = .;
+'
diff --git a/binutils-2.21/ld/emulparams/h8300.sh b/binutils-2.21/ld/emulparams/h8300.sh
new file mode 100644
index 0000000..7042535
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/h8300.sh
@@ -0,0 +1,18 @@
+SCRIPT_NAME=h8300
+OUTPUT_FORMAT="coff-h8300"
+TEXT_START_ADDR=0x8000
+TARGET_PAGE_SIZE=128
+ARCH=h8300
+TINY_READONLY_SECTION=".tinyrodata :
+ {
+ *(.tinyrodata)
+ } =0"
+TINY_DATA_SECTION=".tinydata 0xff8000 :
+ {
+ *(.tinydata)
+ ${RELOCATING+ _tinydata = .; }
+ }"
+TINY_BSS_SECTION=".tinybss : AT (_tinydata)
+ {
+ *(.tinybss)
+ }"
diff --git a/binutils-2.21/ld/emulparams/h8300elf.sh b/binutils-2.21/ld/emulparams/h8300elf.sh
new file mode 100644
index 0000000..38b8a36
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/h8300elf.sh
@@ -0,0 +1,26 @@
+# If you change this file, please also look at files which source this one:
+# h8300helf.sh h8300self.sh
+
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-h8300"
+NO_REL_RELOCS=yes
+TEXT_START_ADDR=0x100
+MAXPAGESIZE=2
+TARGET_PAGE_SIZE=128
+ARCH=h8300
+TEMPLATE_NAME=elf32
+EMBEDDED=yes
+STACK_ADDR=0xfefc
+TINY_READONLY_SECTION=".tinyrodata :
+ {
+ *(.tinyrodata)
+ } =0"
+TINY_DATA_SECTION=".tinydata ${RELOCATING+0xff8000} :
+ {
+ *(.tinydata)
+ ${RELOCATING+ _tinydata = .; }
+ }"
+TINY_BSS_SECTION=".tinybss : ${RELOCATING+AT (_tinydata)}
+ {
+ *(.tinybss)
+ }"
diff --git a/binutils-2.21/ld/emulparams/h8300h.sh b/binutils-2.21/ld/emulparams/h8300h.sh
new file mode 100644
index 0000000..3ab794e
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/h8300h.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=h8300h
+OUTPUT_FORMAT="coff-h8300"
+TEXT_START_ADDR=0x8000
+TARGET_PAGE_SIZE=128
+ARCH=h8300
diff --git a/binutils-2.21/ld/emulparams/h8300helf.sh b/binutils-2.21/ld/emulparams/h8300helf.sh
new file mode 100644
index 0000000..1cde35c
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/h8300helf.sh
@@ -0,0 +1,3 @@
+. ${srcdir}/emulparams/h8300elf.sh
+ARCH="h8300:h8300h"
+STACK_ADDR=0x2fefc
diff --git a/binutils-2.21/ld/emulparams/h8300hn.sh b/binutils-2.21/ld/emulparams/h8300hn.sh
new file mode 100644
index 0000000..d349082
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/h8300hn.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=h8300hn
+OUTPUT_FORMAT="coff-h8300"
+TEXT_START_ADDR=0x8000
+TARGET_PAGE_SIZE=128
+ARCH=h8300
diff --git a/binutils-2.21/ld/emulparams/h8300hnelf.sh b/binutils-2.21/ld/emulparams/h8300hnelf.sh
new file mode 100644
index 0000000..4a75ff9
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/h8300hnelf.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/h8300elf.sh
+ARCH="h8300:h8300hn"
diff --git a/binutils-2.21/ld/emulparams/h8300s.sh b/binutils-2.21/ld/emulparams/h8300s.sh
new file mode 100644
index 0000000..e27b4f5
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/h8300s.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=h8300s
+OUTPUT_FORMAT="coff-h8300"
+TEXT_START_ADDR=0x8000
+TARGET_PAGE_SIZE=128
+ARCH=h8300
diff --git a/binutils-2.21/ld/emulparams/h8300self.sh b/binutils-2.21/ld/emulparams/h8300self.sh
new file mode 100644
index 0000000..7539eec
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/h8300self.sh
@@ -0,0 +1,3 @@
+. ${srcdir}/emulparams/h8300elf.sh
+ARCH="h8300:h8300s"
+STACK_ADDR=0x2fefc
diff --git a/binutils-2.21/ld/emulparams/h8300sn.sh b/binutils-2.21/ld/emulparams/h8300sn.sh
new file mode 100644
index 0000000..16364ef
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/h8300sn.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=h8300sn
+OUTPUT_FORMAT="coff-h8300"
+TEXT_START_ADDR=0x8000
+TARGET_PAGE_SIZE=128
+ARCH=h8300
diff --git a/binutils-2.21/ld/emulparams/h8300snelf.sh b/binutils-2.21/ld/emulparams/h8300snelf.sh
new file mode 100644
index 0000000..ddeec11
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/h8300snelf.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/h8300elf.sh
+ARCH="h8300:h8300sn"
diff --git a/binutils-2.21/ld/emulparams/h8300sx.sh b/binutils-2.21/ld/emulparams/h8300sx.sh
new file mode 100644
index 0000000..b46b6f9
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/h8300sx.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=h8300sx
+OUTPUT_FORMAT="coff-h8300"
+TEXT_START_ADDR=0x8000
+TARGET_PAGE_SIZE=128
+ARCH=h8300
diff --git a/binutils-2.21/ld/emulparams/h8300sxelf.sh b/binutils-2.21/ld/emulparams/h8300sxelf.sh
new file mode 100644
index 0000000..c0b715f
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/h8300sxelf.sh
@@ -0,0 +1,16 @@
+. ${srcdir}/emulparams/h8300elf.sh
+ARCH="h8300:h8300sx"
+STACK_ADDR=0x2fefc
+TINY_READONLY_SECTION=".tinyrodata :
+ {
+ *(.tinyrodata)
+ } =0"
+TINY_DATA_SECTION=".tinydata 0xff8000 :
+ {
+ *(.tinydata)
+ ${RELOCATING+ _tinydata = .; }
+ }"
+TINY_BSS_SECTION=".tinybss : AT (_tinydata)
+ {
+ *(.tinybss)
+ }"
diff --git a/binutils-2.21/ld/emulparams/h8300sxn.sh b/binutils-2.21/ld/emulparams/h8300sxn.sh
new file mode 100644
index 0000000..7cad974
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/h8300sxn.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=h8300sxn
+OUTPUT_FORMAT="coff-h8300"
+TEXT_START_ADDR=0x8000
+TARGET_PAGE_SIZE=128
+ARCH=h8300
diff --git a/binutils-2.21/ld/emulparams/h8300sxnelf.sh b/binutils-2.21/ld/emulparams/h8300sxnelf.sh
new file mode 100644
index 0000000..98e9d49
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/h8300sxnelf.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/h8300elf.sh
+ARCH="h8300:h8300sxn"
diff --git a/binutils-2.21/ld/emulparams/h8500.sh b/binutils-2.21/ld/emulparams/h8500.sh
new file mode 100644
index 0000000..6f4ca80
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/h8500.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=h8500
+OUTPUT_FORMAT="coff-h8500"
+TEXT_START_ADDR=0x8000
+TARGET_PAGE_SIZE=128
+ARCH=h8500
diff --git a/binutils-2.21/ld/emulparams/h8500b.sh b/binutils-2.21/ld/emulparams/h8500b.sh
new file mode 100644
index 0000000..d2d3fee
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/h8500b.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=h8500b
+OUTPUT_FORMAT="coff-h8500"
+TEXT_START_ADDR=0x8000
+TARGET_PAGE_SIZE=128
+ARCH=h8500
diff --git a/binutils-2.21/ld/emulparams/h8500c.sh b/binutils-2.21/ld/emulparams/h8500c.sh
new file mode 100644
index 0000000..240a065
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/h8500c.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=h8500c
+OUTPUT_FORMAT="coff-h8500"
+TEXT_START_ADDR=0x8000
+TARGET_PAGE_SIZE=128
+ARCH=h8500
diff --git a/binutils-2.21/ld/emulparams/h8500m.sh b/binutils-2.21/ld/emulparams/h8500m.sh
new file mode 100644
index 0000000..cd9f7b6
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/h8500m.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=h8500m
+OUTPUT_FORMAT="coff-h8500"
+TEXT_START_ADDR=0x8000
+TARGET_PAGE_SIZE=128
+ARCH=h8500
diff --git a/binutils-2.21/ld/emulparams/h8500s.sh b/binutils-2.21/ld/emulparams/h8500s.sh
new file mode 100644
index 0000000..b9e294a
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/h8500s.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=h8500s
+OUTPUT_FORMAT="coff-h8500"
+TEXT_START_ADDR=0x8000
+TARGET_PAGE_SIZE=128
+ARCH=h8500
diff --git a/binutils-2.21/ld/emulparams/hp300bsd.sh b/binutils-2.21/ld/emulparams/hp300bsd.sh
new file mode 100644
index 0000000..8f5c50b
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/hp300bsd.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-hp300bsd"
+TEXT_START_ADDR=0
+TARGET_PAGE_SIZE=4096
+ARCH=m68k
diff --git a/binutils-2.21/ld/emulparams/hp3hpux.sh b/binutils-2.21/ld/emulparams/hp3hpux.sh
new file mode 100644
index 0000000..b7badd8
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/hp3hpux.sh
@@ -0,0 +1,8 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-hp300hpux"
+TEXT_START_ADDR=0
+TARGET_PAGE_SIZE=4096
+ARCH=m68k
+STACKZERO="___stack_zero = 0x2000; __DYNAMIC = 0;"
+# This is needed for HPUX 9.0; it is unnecessary but harmless for 8.0.
+SHLIB_PATH="___dld_shlib_path = 0;"
diff --git a/binutils-2.21/ld/emulparams/hppa64linux.sh b/binutils-2.21/ld/emulparams/hppa64linux.sh
new file mode 100644
index 0000000..d86fdf6
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/hppa64linux.sh
@@ -0,0 +1,52 @@
+SCRIPT_NAME=elf
+ELFSIZE=64
+OUTPUT_FORMAT="elf64-hppa-linux"
+NO_REL_RELOCS=yes
+TEXT_START_ADDR=0x10000
+TARGET_PAGE_SIZE=0x10000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ARCH=hppa
+MACHINE=hppa2.0w
+ENTRY="main"
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+
+# We really want multiple .stub sections, one for each input .text section,
+# but for now this is good enough.
+OTHER_READONLY_SECTIONS="
+ .PARISC.unwind ${RELOCATING-0} : { *(.PARISC.unwind) }"
+
+# The PA64 ELF port treats .plt sections differently than most. We also have
+# to create a .opd section. What most systems call the .got, we call the .dlt
+OTHER_READWRITE_SECTIONS="
+ .opd ${RELOCATING-0} : { *(.opd) }
+ ${RELOCATING+PROVIDE (__gp = .);}
+ .plt ${RELOCATING-0} : { *(.plt) }
+ .dlt ${RELOCATING-0} : { *(.dlt) }"
+
+# The PA64 ELF port has an additional huge bss section.
+OTHER_BSS_SECTIONS=".hbss ${RELOCATING-0} : { *(.hbss) }"
+
+#OTHER_SYMBOLS='PROVIDE (__TLS_SIZE = SIZEOF (.tbss));'
+OTHER_SYMBOLS='
+ PROVIDE (__TLS_SIZE = 0);
+ PROVIDE (__TLS_INIT_SIZE = 0);
+ PROVIDE (__TLS_INIT_START = 0);
+ PROVIDE (__TLS_INIT_A = 0);
+ PROVIDE (__TLS_PREALLOC_DTV_A = 0);'
+
+# HPs use .dlt where systems use .got. Sigh.
+OTHER_GOT_RELOC_SECTIONS="
+ .rela.dlt ${RELOCATING-0} : { *(.rela.dlt) }
+ .rela.opd ${RELOCATING-0} : { *(.rela.opd) }"
+
+# We're not actually providing a symbol anymore (due to the inability to be
+# safe in regards to shared libraries). So we just allocate the hunk of space
+# unconditionally, but do not mess around with the symbol table.
+DATA_START_SYMBOLS='. += 16;'
+
+DATA_PLT=
+PLT_BEFORE_GOT=
+
+# .dynamic should be at the start of the .text segment.
+TEXT_DYNAMIC=
diff --git a/binutils-2.21/ld/emulparams/hppaelf.sh b/binutils-2.21/ld/emulparams/hppaelf.sh
new file mode 100644
index 0000000..77dcb39
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/hppaelf.sh
@@ -0,0 +1,9 @@
+SCRIPT_NAME=hppaelf
+OUTPUT_FORMAT="elf32-hppa"
+TEXT_START_ADDR=0x1000
+TARGET_PAGE_SIZE=0x1000
+ARCH=hppa
+NOP=0x08000240
+START="$START$"
+TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=hppaelf
diff --git a/binutils-2.21/ld/emulparams/hppalinux.sh b/binutils-2.21/ld/emulparams/hppalinux.sh
new file mode 100644
index 0000000..9fa4615
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/hppalinux.sh
@@ -0,0 +1,23 @@
+# If you change this file, please also look at files which source this one:
+# hppanbsd.sh
+
+SCRIPT_NAME=elf
+ELFSIZE=32
+OUTPUT_FORMAT="elf32-hppa-linux"
+NO_REL_RELOCS=yes
+TEXT_START_ADDR=0x10000
+TARGET_PAGE_SIZE=0x10000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ARCH=hppa
+MACHINE=hppa1.1 # We use 1.1 specific features.
+NOP=0x08000240
+START="_start"
+OTHER_READONLY_SECTIONS="
+ .PARISC.unwind ${RELOCATING-0} : { *(.PARISC.unwind) }"
+DATA_START_SYMBOLS='PROVIDE ($global$ = .);'
+DATA_PLT=
+PLT_BEFORE_GOT=
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=hppaelf
diff --git a/binutils-2.21/ld/emulparams/hppanbsd.sh b/binutils-2.21/ld/emulparams/hppanbsd.sh
new file mode 100644
index 0000000..dcc6a93
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/hppanbsd.sh
@@ -0,0 +1,6 @@
+# If you change this file, please also look at files which source this one:
+# hppaobsd.sh
+
+. ${srcdir}/emulparams/hppalinux.sh
+
+OUTPUT_FORMAT="elf32-hppa-netbsd"
diff --git a/binutils-2.21/ld/emulparams/hppaobsd.sh b/binutils-2.21/ld/emulparams/hppaobsd.sh
new file mode 100644
index 0000000..0d3bf94
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/hppaobsd.sh
@@ -0,0 +1,6 @@
+. ${srcdir}/emulparams/hppanbsd.sh
+
+OUTPUT_FORMAT="elf32-hppa"
+TEXT_START_ADDR=0x1000
+TARGET_PAGE_SIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
diff --git a/binutils-2.21/ld/emulparams/i386aout.sh b/binutils-2.21/ld/emulparams/i386aout.sh
new file mode 100644
index 0000000..d682e7c
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/i386aout.sh
@@ -0,0 +1,8 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-i386"
+TARGET_PAGE_SIZE=0x1000
+TEXT_START_ADDR=0
+case ${LD_FLAG} in
+ n|N) TEXT_START_ADDR=0x1000 ;;
+esac
+ARCH=i386
diff --git a/binutils-2.21/ld/emulparams/i386beos.sh b/binutils-2.21/ld/emulparams/i386beos.sh
new file mode 100755
index 0000000..869da5f
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/i386beos.sh
@@ -0,0 +1,5 @@
+ARCH=i386
+SCRIPT_NAME=i386beos
+OUTPUT_FORMAT="pei-i386"
+RELOCATEABLE_OUTPUT_FORMAT="pe-i386"
+TEMPLATE_NAME=beos
diff --git a/binutils-2.21/ld/emulparams/i386bsd.sh b/binutils-2.21/ld/emulparams/i386bsd.sh
new file mode 100644
index 0000000..23ab852
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/i386bsd.sh
@@ -0,0 +1,8 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-i386-bsd"
+TARGET_PAGE_SIZE=0x1000
+TEXT_START_ADDR=0
+case ${LD_FLAG} in
+ n|N) TEXT_START_ADDR=0x1000 ;;
+esac
+ARCH=i386
diff --git a/binutils-2.21/ld/emulparams/i386coff.sh b/binutils-2.21/ld/emulparams/i386coff.sh
new file mode 100644
index 0000000..3417b7d
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/i386coff.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=i386coff
+OUTPUT_FORMAT="coff-i386"
+TEXT_START_ADDR=0x1000000
+TARGET_PAGE_SIZE=0x1000000
+ARCH=i386
diff --git a/binutils-2.21/ld/emulparams/i386go32.sh b/binutils-2.21/ld/emulparams/i386go32.sh
new file mode 100644
index 0000000..104209f
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/i386go32.sh
@@ -0,0 +1,10 @@
+SCRIPT_NAME=i386go32
+OUTPUT_FORMAT="coff-go32"
+TEXT_START_ADDR=0x10a8
+TARGET_PAGE_SIZE=0x1000
+case ${LD_FLAG} in
+ n|N) TEXT_START_ADDR=0 ;;
+esac
+SEGMENT_SIZE=0x200
+ARCH=i386
+
diff --git a/binutils-2.21/ld/emulparams/i386linux.sh b/binutils-2.21/ld/emulparams/i386linux.sh
new file mode 100644
index 0000000..7b7463a
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/i386linux.sh
@@ -0,0 +1,9 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-i386-linux"
+TARGET_PAGE_SIZE=0x1000
+TEXT_START_ADDR=0x1020
+case ${LD_FLAG} in
+ n|N) TEXT_START_ADDR=0 ;;
+esac
+ARCH=i386
+TEMPLATE_NAME=linux
diff --git a/binutils-2.21/ld/emulparams/i386lynx.sh b/binutils-2.21/ld/emulparams/i386lynx.sh
new file mode 100644
index 0000000..93afb3d
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/i386lynx.sh
@@ -0,0 +1,20 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-i386"
+NO_RELA_RELOCS=yes
+ENTRY=_main
+TEXT_BASE=0x0
+DYN_TEXT_BASE=0x00400000
+TEXT_START_ADDR="(DEFINED(_DYNAMIC) ? ${DYN_TEXT_BASE} : ${TEXT_BASE})"
+case ${LD_FLAG} in
+ n|N) TEXT_START_ADDR=0x1000 ;;
+esac
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ARCH=i386
+MACHINE=
+NOP=0x9090
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+ELF_INTERPRETER_NAME=\"/usr/lib/ld.so.1\"
+
+# Leave room of SIZEOF_HEADERS before text.
+EMBEDDED=
diff --git a/binutils-2.21/ld/emulparams/i386mach.sh b/binutils-2.21/ld/emulparams/i386mach.sh
new file mode 100644
index 0000000..dc44602
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/i386mach.sh
@@ -0,0 +1,9 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-mach3"
+TEXT_START_ADDR=0x10020
+case ${LD_FLAG} in
+ n|N) TEXT_START_ADDR=0x10000 ;;
+esac
+SEGMENT_SIZE=0x1000
+PAD_TEXT=t
+ARCH=i386
diff --git a/binutils-2.21/ld/emulparams/i386moss.sh b/binutils-2.21/ld/emulparams/i386moss.sh
new file mode 100644
index 0000000..095d85a
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/i386moss.sh
@@ -0,0 +1,10 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-i386"
+NO_RELA_RELOCS=yes
+TEXT_START_ADDR=0x00002000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ARCH=i386
+MACHINE=
+NOP=0x90909090
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
diff --git a/binutils-2.21/ld/emulparams/i386msdos.sh b/binutils-2.21/ld/emulparams/i386msdos.sh
new file mode 100644
index 0000000..293bf68
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/i386msdos.sh
@@ -0,0 +1,6 @@
+SCRIPT_NAME=i386msdos
+OUTPUT_FORMAT="msdos"
+TEXT_START_ADDR=0x0
+SEGMENT_SIZE=0x10
+PAD_TEXT=t
+ARCH=i386
diff --git a/binutils-2.21/ld/emulparams/i386nbsd.sh b/binutils-2.21/ld/emulparams/i386nbsd.sh
new file mode 100644
index 0000000..a9e6a38
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/i386nbsd.sh
@@ -0,0 +1,6 @@
+SCRIPT_NAME=aout
+TEXT_START_ADDR=0x1020
+OUTPUT_FORMAT="a.out-i386-netbsd"
+TARGET_PAGE_SIZE=0x1000
+ARCH=i386
+EXECUTABLE_SYMBOLS='__DYNAMIC = 0;'
diff --git a/binutils-2.21/ld/emulparams/i386nto.sh b/binutils-2.21/ld/emulparams/i386nto.sh
new file mode 100644
index 0000000..626f9c1
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/i386nto.sh
@@ -0,0 +1,11 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-i386"
+NO_RELA_RELOCS=yes
+TEXT_START_ADDR=0x08048000
+TEXT_START_SYMBOLS='_btext = .;'
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ARCH=i386
+MACHINE=
+NOP=0x9090
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
diff --git a/binutils-2.21/ld/emulparams/i386nw.sh b/binutils-2.21/ld/emulparams/i386nw.sh
new file mode 100644
index 0000000..e1897be
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/i386nw.sh
@@ -0,0 +1,8 @@
+SCRIPT_NAME=nw
+OUTPUT_FORMAT="elf32-i386"
+TEXT_START_ADDR=0x08000000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ARCH=i386
+NOP=0x90909090
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
diff --git a/binutils-2.21/ld/emulparams/i386pe.sh b/binutils-2.21/ld/emulparams/i386pe.sh
new file mode 100644
index 0000000..38191ec
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/i386pe.sh
@@ -0,0 +1,9 @@
+ARCH=i386
+SCRIPT_NAME=pe
+OUTPUT_FORMAT="pei-i386"
+RELOCATEABLE_OUTPUT_FORMAT="pe-i386"
+TEMPLATE_NAME=pe
+SUBSYSTEM=PE_DEF_SUBSYSTEM
+INITIAL_SYMBOL_CHAR=\"_\"
+TARGET_PAGE_SIZE=0x1000
+GENERATE_AUTO_IMPORT_SCRIPT=1
diff --git a/binutils-2.21/ld/emulparams/i386pe_posix.sh b/binutils-2.21/ld/emulparams/i386pe_posix.sh
new file mode 100644
index 0000000..cde0349
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/i386pe_posix.sh
@@ -0,0 +1,10 @@
+ARCH=i386
+SCRIPT_NAME=pe
+OUTPUT_FORMAT="pei-i386"
+RELOCATEABLE_OUTPUT_FORMAT="pe-i386"
+TEMPLATE_NAME=pe
+SUBSYSTEM=7
+EXECUTABLE_NAME=a.out
+INITIAL_SYMBOL_CHAR=\"_\"
+TARGET_PAGE_SIZE=0x1000
+GENERATE_AUTO_IMPORT_SCRIPT=1
diff --git a/binutils-2.21/ld/emulparams/i386pep.sh b/binutils-2.21/ld/emulparams/i386pep.sh
new file mode 100644
index 0000000..76a9802
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/i386pep.sh
@@ -0,0 +1,9 @@
+ARCH="i386:x86-64"
+SCRIPT_NAME=pep
+OUTPUT_FORMAT="pei-x86-64"
+RELOCATEABLE_OUTPUT_FORMAT="pe-x86-64"
+TEMPLATE_NAME=pep
+SUBSYSTEM=PE_DEF_SUBSYSTEM
+INITIAL_SYMBOL_CHAR=\"_\"
+TARGET_PAGE_SIZE=0x1000
+GENERATE_AUTO_IMPORT_SCRIPT=1
diff --git a/binutils-2.21/ld/emulparams/lnk960.sh b/binutils-2.21/ld/emulparams/lnk960.sh
new file mode 100644
index 0000000..4a650f7
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/lnk960.sh
@@ -0,0 +1,6 @@
+SCRIPT_NAME=i960
+OUTPUT_FORMAT=""
+TEXT_START_ADDR=0
+TARGET_PAGE_SIZE=128
+ARCH=i960
+TEMPLATE_NAME=lnk960
diff --git a/binutils-2.21/ld/emulparams/m32relf.sh b/binutils-2.21/ld/emulparams/m32relf.sh
new file mode 100644
index 0000000..947c7a8
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/m32relf.sh
@@ -0,0 +1,12 @@
+MACHINE=
+SCRIPT_NAME=elf
+TEMPLATE_NAME=elf32
+OUTPUT_FORMAT="elf32-m32r"
+TEXT_START_ADDR=0x100
+ARCH=m32r
+MACHINE=
+MAXPAGESIZE=32
+EMBEDDED=yes
+
+# This sets the stack to the top of simulator memory (8MB).
+OTHER_SYMBOLS='PROVIDE (_stack = 0x800000);'
diff --git a/binutils-2.21/ld/emulparams/m32relf_linux.sh b/binutils-2.21/ld/emulparams/m32relf_linux.sh
new file mode 100644
index 0000000..9a4ee97
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/m32relf_linux.sh
@@ -0,0 +1,14 @@
+MACHINE=
+SCRIPT_NAME=elf
+TEMPLATE_NAME=elf32
+OUTPUT_FORMAT="elf32-m32r-linux"
+TEXT_START_ADDR=0x1000
+ARCH=m32r
+MACHINE=
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+
+# Hmmm, there's got to be a better way. This sets the stack to the
+# top of simulator memory (32MB).
+OTHER_RELOCATING_SECTIONS='PROVIDE (_stack = 0x2000000);'
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
diff --git a/binutils-2.21/ld/emulparams/m32rlelf.sh b/binutils-2.21/ld/emulparams/m32rlelf.sh
new file mode 100644
index 0000000..2d4488b
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/m32rlelf.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/m32relf.sh
+OUTPUT_FORMAT="elf32-m32rle"
diff --git a/binutils-2.21/ld/emulparams/m32rlelf_linux.sh b/binutils-2.21/ld/emulparams/m32rlelf_linux.sh
new file mode 100644
index 0000000..6d16a1c
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/m32rlelf_linux.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/m32relf_linux.sh
+OUTPUT_FORMAT="elf32-m32rle-linux"
diff --git a/binutils-2.21/ld/emulparams/m68hc11elf.sh b/binutils-2.21/ld/emulparams/m68hc11elf.sh
new file mode 100644
index 0000000..1caa6e1
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/m68hc11elf.sh
@@ -0,0 +1,18 @@
+MACHINE=
+SCRIPT_NAME=elfm68hc11
+OUTPUT_FORMAT="elf32-m68hc11"
+ROM_START_ADDR=0x08000
+ROM_SIZE=0x8000
+RAM_START_ADDR=0x01100
+RAM_SIZE=0x6F00
+EEPROM_START_ADDR=0xb600
+EEPROM_SIZE=512
+TEXT_MEMORY=text
+DATA_MEMORY=data
+EEPROM_MEMORY=eeprom
+ARCH=m68hc11
+MAXPAGESIZE=32
+EMBEDDED=yes
+GENERIC_BOARD=no
+TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=m68hc1xelf
diff --git a/binutils-2.21/ld/emulparams/m68hc11elfb.sh b/binutils-2.21/ld/emulparams/m68hc11elfb.sh
new file mode 100644
index 0000000..a8f01d2
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/m68hc11elfb.sh
@@ -0,0 +1,12 @@
+MACHINE=
+SCRIPT_NAME=elfm68hc11
+OUTPUT_FORMAT="elf32-m68hc11"
+TEXT_MEMORY=text
+DATA_MEMORY=data
+EEPROM_MEMORY=eeprom
+ARCH=m68hc11
+MAXPAGESIZE=32
+GENERIC_BOARD=yes
+TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=m68hc1xelf
+
diff --git a/binutils-2.21/ld/emulparams/m68hc12elf.sh b/binutils-2.21/ld/emulparams/m68hc12elf.sh
new file mode 100644
index 0000000..c4d7487
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/m68hc12elf.sh
@@ -0,0 +1,18 @@
+MACHINE=
+SCRIPT_NAME=elfm68hc12
+OUTPUT_FORMAT="elf32-m68hc12"
+ROM_START_ADDR=0x08000
+ROM_SIZE=0x8000
+RAM_START_ADDR=0x01100
+RAM_SIZE=0x6F00
+EEPROM_START_ADDR=0x0800
+EEPROM_SIZE=2048
+TEXT_MEMORY=text
+DATA_MEMORY=data
+EEPROM_MEMORY=eeprom
+ARCH=m68hc12
+MAXPAGESIZE=32
+EMBEDDED=yes
+GENERIC_BOARD=no
+TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=m68hc1xelf
diff --git a/binutils-2.21/ld/emulparams/m68hc12elfb.sh b/binutils-2.21/ld/emulparams/m68hc12elfb.sh
new file mode 100644
index 0000000..acc3ce3
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/m68hc12elfb.sh
@@ -0,0 +1,12 @@
+MACHINE=
+SCRIPT_NAME=elfm68hc12
+OUTPUT_FORMAT="elf32-m68hc12"
+TEXT_MEMORY=text
+DATA_MEMORY=data
+EEPROM_MEMORY=eeprom
+ARCH=m68hc12
+MAXPAGESIZE=32
+GENERIC_BOARD=yes
+TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=m68hc1xelf
+
diff --git a/binutils-2.21/ld/emulparams/m68k4knbsd.sh b/binutils-2.21/ld/emulparams/m68k4knbsd.sh
new file mode 100644
index 0000000..d160264
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/m68k4knbsd.sh
@@ -0,0 +1,9 @@
+SCRIPT_NAME=aout
+TEXT_START_ADDR=0x1020
+case ${LD_FLAG} in
+ n|N) TEXT_START_ADDR=0x1000 ;;
+esac
+OUTPUT_FORMAT="a.out-m68k4k-netbsd"
+TARGET_PAGE_SIZE=0x1000
+ARCH=m68k
+EXECUTABLE_SYMBOLS='__DYNAMIC = 0;'
diff --git a/binutils-2.21/ld/emulparams/m68kaout.sh b/binutils-2.21/ld/emulparams/m68kaout.sh
new file mode 100644
index 0000000..09e6c72
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/m68kaout.sh
@@ -0,0 +1,6 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-zero-big"
+TEXT_START_ADDR=0x2020
+TARGET_PAGE_SIZE=0x2000
+SEGMENT_SIZE=0x20000
+ARCH=m68k
diff --git a/binutils-2.21/ld/emulparams/m68kaux.sh b/binutils-2.21/ld/emulparams/m68kaux.sh
new file mode 100644
index 0000000..19e86cc
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/m68kaux.sh
@@ -0,0 +1,8 @@
+SCRIPT_NAME=m68kaux
+OUTPUT_FORMAT="coff-m68k-aux"
+SEGMENT_SIZE=0x40000
+TARGET_PAGE_SIZE=0x1000
+TEXT_START_ADDR="$SEGMENT_SIZE + SIZEOF_HEADERS"
+NON_PAGED_TEXT_START_ADDR=SIZEOF_HEADERS
+DATA_ALIGNMENT_="(. & (-$SEGMENT_SIZE | $TARGET_PAGE_SIZE-1)) + $SEGMENT_SIZE"
+ARCH=m68k
diff --git a/binutils-2.21/ld/emulparams/m68kcoff.sh b/binutils-2.21/ld/emulparams/m68kcoff.sh
new file mode 100644
index 0000000..bd884c9
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/m68kcoff.sh
@@ -0,0 +1,6 @@
+SCRIPT_NAME=m68kcoff
+OUTPUT_FORMAT="coff-m68k"
+TEXT_START_ADDR=0x1000000
+TARGET_PAGE_SIZE=0x1000000
+ARCH=m68k
+TEMPLATE_NAME=m68kcoff
diff --git a/binutils-2.21/ld/emulparams/m68kelf.sh b/binutils-2.21/ld/emulparams/m68kelf.sh
new file mode 100644
index 0000000..5c5e672
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/m68kelf.sh
@@ -0,0 +1,14 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-m68k"
+NO_REL_RELOCS=yes
+TEXT_START_ADDR=0x80000000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
+ARCH=m68k
+MACHINE=
+NOP=0x4e714e71
+TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=m68kelf
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+NO_SMALL_DATA=yes
diff --git a/binutils-2.21/ld/emulparams/m68kelfnbsd.sh b/binutils-2.21/ld/emulparams/m68kelfnbsd.sh
new file mode 100644
index 0000000..69e328d
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/m68kelfnbsd.sh
@@ -0,0 +1,4 @@
+. ${srcdir}/emulparams/m68kelf.sh
+TEXT_START_ADDR=0x2000
+TARGET_PAGE_SIZE=0x2000
+MACHINE=
diff --git a/binutils-2.21/ld/emulparams/m68klinux.sh b/binutils-2.21/ld/emulparams/m68klinux.sh
new file mode 100644
index 0000000..924fdbe
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/m68klinux.sh
@@ -0,0 +1,9 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-m68k-linux"
+TARGET_PAGE_SIZE=0x1000
+TEXT_START_ADDR=0x1020
+case ${LD_FLAG} in
+ n|N) TEXT_START_ADDR=0 ;;
+esac
+ARCH=m68k
+TEMPLATE_NAME=linux
diff --git a/binutils-2.21/ld/emulparams/m68knbsd.sh b/binutils-2.21/ld/emulparams/m68knbsd.sh
new file mode 100644
index 0000000..fcda407
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/m68knbsd.sh
@@ -0,0 +1,9 @@
+SCRIPT_NAME=aout
+TEXT_START_ADDR=0x2020
+case ${LD_FLAG} in
+ n|N) TEXT_START_ADDR=0x2000 ;;
+esac
+OUTPUT_FORMAT="a.out-m68k-netbsd"
+TARGET_PAGE_SIZE=0x2000
+ARCH=m68k
+EXECUTABLE_SYMBOLS='__DYNAMIC = 0;'
diff --git a/binutils-2.21/ld/emulparams/m68kpsos.sh b/binutils-2.21/ld/emulparams/m68kpsos.sh
new file mode 100644
index 0000000..22d1598
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/m68kpsos.sh
@@ -0,0 +1,6 @@
+SCRIPT_NAME=psos
+OUTPUT_FORMAT="elf32-m68k"
+TEXT_START_ADDR=0x20000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ARCH=m68k
+TEMPLATE_NAME=elf32
diff --git a/binutils-2.21/ld/emulparams/m88kbcs.sh b/binutils-2.21/ld/emulparams/m88kbcs.sh
new file mode 100644
index 0000000..d48a1eb
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/m88kbcs.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=m88kbcs
+OUTPUT_FORMAT="coff-m88kbcs"
+TEXT_START_ADDR=0
+TARGET_PAGE_SIZE=128
+ARCH=m88k
diff --git a/binutils-2.21/ld/emulparams/mcorepe.sh b/binutils-2.21/ld/emulparams/mcorepe.sh
new file mode 100644
index 0000000..95d84e7
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/mcorepe.sh
@@ -0,0 +1,9 @@
+ARCH=mcore
+SCRIPT_NAME=mcorepe
+OUTPUT_FORMAT="pei-mcore-little"
+LITTLE_OUTPUT_FORMAT="pei-mcore-little"
+BIG_OUTPUT_FORMAT="pei-mcore-big"
+TEMPLATE_NAME=pe
+SUBSYSTEM=PE_DEF_SUBSYSTEM
+INITIAL_SYMBOL_CHAR=\"_\"
+TARGET_PAGE_SIZE=0x1000
diff --git a/binutils-2.21/ld/emulparams/mipsbig.sh b/binutils-2.21/ld/emulparams/mipsbig.sh
new file mode 100644
index 0000000..9fe2953
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/mipsbig.sh
@@ -0,0 +1,6 @@
+SCRIPT_NAME=mips
+OUTPUT_FORMAT="ecoff-bigmips"
+BIG_OUTPUT_FORMAT="ecoff-bigmips"
+LITTLE_OUTPUT_FORMAT="ecoff-littlemips"
+TARGET_PAGE_SIZE=0x1000000
+ARCH=mips
diff --git a/binutils-2.21/ld/emulparams/mipsbsd.sh b/binutils-2.21/ld/emulparams/mipsbsd.sh
new file mode 100644
index 0000000..e8fb35b
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/mipsbsd.sh
@@ -0,0 +1,7 @@
+SCRIPT_NAME=mipsbsd
+OUTPUT_FORMAT="a.out-mips-little"
+BIG_OUTPUT_FORMAT="a.out-mips-big"
+LITTLE_OUTPUT_FORMAT="a.out-mips-little"
+TEXT_START_ADDR=0x1020
+TARGET_PAGE_SIZE=4096
+ARCH=mips
diff --git a/binutils-2.21/ld/emulparams/mipsidt.sh b/binutils-2.21/ld/emulparams/mipsidt.sh
new file mode 100644
index 0000000..f381267
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/mipsidt.sh
@@ -0,0 +1,12 @@
+SCRIPT_NAME=mips
+OUTPUT_FORMAT="ecoff-bigmips"
+BIG_OUTPUT_FORMAT="ecoff-bigmips"
+LITTLE_OUTPUT_FORMAT="ecoff-littlemips"
+TARGET_PAGE_SIZE=0x1000000
+ARCH=mips
+ENTRY=start
+TEXT_START_ADDR=0xa0012000
+DATA_ADDR=.
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=mipsecoff
+EMBEDDED=yes
diff --git a/binutils-2.21/ld/emulparams/mipsidtl.sh b/binutils-2.21/ld/emulparams/mipsidtl.sh
new file mode 100644
index 0000000..52447ff
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/mipsidtl.sh
@@ -0,0 +1,12 @@
+SCRIPT_NAME=mips
+OUTPUT_FORMAT="ecoff-littlemips"
+BIG_OUTPUT_FORMAT="ecoff-bigmips"
+LITTLE_OUTPUT_FORMAT="ecoff-littlemips"
+TARGET_PAGE_SIZE=0x1000000
+ARCH=mips
+ENTRY=start
+TEXT_START_ADDR=0xa0012000
+DATA_ADDR=.
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=mipsecoff
+EMBEDDED=yes
diff --git a/binutils-2.21/ld/emulparams/mipslit.sh b/binutils-2.21/ld/emulparams/mipslit.sh
new file mode 100644
index 0000000..acb2344
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/mipslit.sh
@@ -0,0 +1,6 @@
+SCRIPT_NAME=mips
+OUTPUT_FORMAT="ecoff-littlemips"
+BIG_OUTPUT_FORMAT="ecoff-bigmips"
+LITTLE_OUTPUT_FORMAT="ecoff-littlemips"
+TARGET_PAGE_SIZE=0x1000000
+ARCH=mips
diff --git a/binutils-2.21/ld/emulparams/mipslnews.sh b/binutils-2.21/ld/emulparams/mipslnews.sh
new file mode 100644
index 0000000..d0bb91c
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/mipslnews.sh
@@ -0,0 +1,9 @@
+SCRIPT_NAME=mips
+OUTPUT_FORMAT="ecoff-littlemips"
+BIG_OUTPUT_FORMAT="ecoff-bigmips"
+LITTLE_OUTPUT_FORMAT="ecoff-littlemips"
+TARGET_PAGE_SIZE=0x1000000
+ARCH=mips
+TEXT_START_ADDR=0x80080000
+DATA_ADDR=.
+EMBEDDED=yes
diff --git a/binutils-2.21/ld/emulparams/mipspe.sh b/binutils-2.21/ld/emulparams/mipspe.sh
new file mode 100644
index 0000000..95c4adb
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/mipspe.sh
@@ -0,0 +1,9 @@
+ARCH=mips
+SCRIPT_NAME=pe
+OUTPUT_FORMAT="pei-mips"
+OUTPUT_ARCH="mips"
+RELOCATEABLE_OUTPUT_FORMAT="ecoff-littlemips"
+TEMPLATE_NAME=pe
+SUBSYSTEM=PE_DEF_SUBSYSTEM
+INITIAL_SYMBOL_CHAR=\"_\"
+TARGET_PAGE_SIZE=0x1000
diff --git a/binutils-2.21/ld/emulparams/mmo.sh b/binutils-2.21/ld/emulparams/mmo.sh
new file mode 100644
index 0000000..ca98013
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/mmo.sh
@@ -0,0 +1,11 @@
+SCRIPT_NAME=mmo
+TARGET_PAGE_SIZE=256
+
+# Default to 0 as mmixal does.
+TEXT_START_ADDR='DEFINED (__.MMIX.start..text) ? __.MMIX.start..text : 0'
+DATA_ADDR='DEFINED (__.MMIX.start..data) ? __.MMIX.start..data : 0x2000000000000000'
+OUTPUT_FORMAT=mmo
+RELOCATEABLE_OUTPUT_FORMAT=elf64-mmix
+ARCH=mmix
+COMPILE_IN=yes
+EXTRA_EM_FILE=mmo
diff --git a/binutils-2.21/ld/emulparams/mn10200.sh b/binutils-2.21/ld/emulparams/mn10200.sh
new file mode 100644
index 0000000..9cec0b5
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/mn10200.sh
@@ -0,0 +1,24 @@
+# If you change this file, please also look at files which source this one:
+# mn10300.sh
+
+SCRIPT_NAME=elf
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
+OUTPUT_FORMAT="elf32-mn10200"
+NO_REL_RELOCS=yes
+TEXT_START_ADDR=0x0
+ARCH=mn10200
+MACHINE=
+MAXPAGESIZE=1
+ENTRY=_start
+EMBEDDED=yes
+
+# This sets the stack to the top of the simulator memory (2^19 bytes).
+STACK_ADDR=0x80000
+
+# These are for compatibility with the COFF toolchain.
+# XXX These should definitely disappear.
+CTOR_START='___ctors = .;'
+CTOR_END='___ctors_end = .;'
+DTOR_START='___dtors = .;'
+DTOR_END='___dtors_end = .;'
diff --git a/binutils-2.21/ld/emulparams/mn10300.sh b/binutils-2.21/ld/emulparams/mn10300.sh
new file mode 100644
index 0000000..121987c
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/mn10300.sh
@@ -0,0 +1,6 @@
+. ${srcdir}/emulparams/mn10200.sh
+OUTPUT_FORMAT="elf32-mn10300"
+ARCH=mn10300
+TEMPLATE_NAME=elf32
+unset EXTRA_EM_FILE
+GENERATE_SHLIB_SCRIPT=yes
diff --git a/binutils-2.21/ld/emulparams/msp430all.sh b/binutils-2.21/ld/emulparams/msp430all.sh
new file mode 100644
index 0000000..57d21c2
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/msp430all.sh
@@ -0,0 +1,553 @@
+#!/bin/sh
+
+# This called by genscripts_extra.sh
+
+MSP430_NAME=${EMULATION_NAME}
+
+SCRIPT_NAME=elf32msp430
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
+OUTPUT_FORMAT="elf32-msp430"
+MACHINE=
+MAXPAGESIZE=1
+EMBEDDED=yes
+
+if [ "${MSP430_NAME}" = "msp430x110" ] ; then
+ARCH=msp:11
+ROM_START=0xfc00
+ROM_SIZE=0x3e0
+RAM_START=0x0200
+RAM_SIZE=128
+STACK=0x280
+fi
+
+if [ "${MSP430_NAME}" = "msp430x1101" ] ; then
+ARCH=msp:110
+ROM_START=0xfc00
+ROM_SIZE=0x3e0
+RAM_START=0x0200
+RAM_SIZE=128
+STACK=0x280
+fi
+
+if [ "${MSP430_NAME}" = "msp430x1111" ] ; then
+ARCH=msp:110
+ROM_START=0xf800
+ROM_SIZE=0x07e0
+RAM_START=0x0200
+RAM_SIZE=128
+STACK=0x280
+fi
+
+if [ "${MSP430_NAME}" = "msp430x112" ] ; then
+ARCH=msp:11
+ROM_START=0xf000
+ROM_SIZE=0xfe0
+RAM_START=0x0200
+RAM_SIZE=256
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x1121" ] ; then
+ARCH=msp:110
+ROM_START=0xf000
+ROM_SIZE=0x0fe0
+RAM_START=0x0200
+RAM_SIZE=256
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x1122" ] ; then
+ARCH=msp:110
+ROM_START=0xf000
+ROM_SIZE=0x0fe0
+RAM_START=0x0200
+RAM_SIZE=256
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x1132" ] ; then
+ARCH=msp:110
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x122" ] ; then
+ARCH=msp:12
+ROM_START=0xf000
+ROM_SIZE=0xfe0
+RAM_START=0x0200
+RAM_SIZE=256
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x1222" ] ; then
+ARCH=msp:12
+ROM_START=0xf000
+ROM_SIZE=0xfe0
+RAM_START=0x0200
+RAM_SIZE=256
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x123" ] ; then
+ARCH=msp:12
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x1232" ] ; then
+ARCH=msp:12
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x133" ] ; then
+ARCH=msp:13
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x1331" ] ; then
+ARCH=msp:13
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x135" ] ; then
+ARCH=msp:13
+ROM_START=0xc000
+ROM_SIZE=0x3fe0
+RAM_START=0x0200
+RAM_SIZE=512
+STACK=0x400
+fi
+
+if [ "${MSP430_NAME}" = "msp430x1351" ] ; then
+ARCH=msp:13
+ROM_START=0xc000
+ROM_SIZE=0x3fe0
+RAM_START=0x0200
+RAM_SIZE=512
+STACK=0x400
+fi
+
+if [ "${MSP430_NAME}" = "msp430x147" ] ; then
+ARCH=msp:14
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x0200
+RAM_SIZE=1K
+STACK=0x600
+fi
+
+if [ "${MSP430_NAME}" = "msp430x148" ] ; then
+ARCH=msp:14
+ROM_START=0x4000
+ROM_SIZE=0xbfe0
+RAM_START=0x0200
+RAM_SIZE=0x0800
+STACK=0xa00
+fi
+
+if [ "${MSP430_NAME}" = "msp430x149" ] ; then
+ARCH=msp:14
+ROM_START=0x1100
+ROM_SIZE=0xeee0
+RAM_START=0x0200
+RAM_SIZE=0x0800
+STACK=0xa00
+fi
+
+if [ "${MSP430_NAME}" = "msp430x155" ] ; then
+ARCH=msp:15
+ROM_START=0xc000
+ROM_SIZE=0x3fe0
+RAM_START=0x0200
+RAM_SIZE=512
+STACK=0x400
+fi
+
+if [ "${MSP430_NAME}" = "msp430x156" ] ; then
+ARCH=msp:15
+ROM_START=0xa000
+ROM_SIZE=0x5fe0
+RAM_START=0x0200
+RAM_SIZE=512
+STACK=0x400
+fi
+
+if [ "${MSP430_NAME}" = "msp430x157" ] ; then
+ARCH=msp:15
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x0200
+RAM_SIZE=1K
+STACK=0x600
+fi
+
+if [ "${MSP430_NAME}" = "msp430x167" ] ; then
+ARCH=msp:16
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x0200
+RAM_SIZE=1K
+STACK=0x600
+fi
+
+if [ "${MSP430_NAME}" = "msp430x168" ] ; then
+ARCH=msp:16
+ROM_START=0x4000
+ROM_SIZE=0xbfe0
+RAM_START=0x0200
+RAM_SIZE=0x0800
+STACK=0xa00
+fi
+
+if [ "${MSP430_NAME}" = "msp430x169" ] ; then
+ARCH=msp:16
+ROM_START=0x1100
+ROM_SIZE=0xeee0
+RAM_START=0x0200
+RAM_SIZE=0x0800
+STACK=0xa00
+fi
+
+if [ "${MSP430_NAME}" = "msp430x1610" ] ; then
+ARCH=msp:16
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x1100
+RAM_SIZE=0x1400
+STACK=0x2500
+fi
+
+if [ "${MSP430_NAME}" = "msp430x1611" ] ; then
+ARCH=msp:16
+ROM_START=0x4000
+ROM_SIZE=0xbfe0
+RAM_START=0x1100
+RAM_SIZE=0x2800
+STACK=0x3900
+fi
+
+if [ "${MSP430_NAME}" = "msp430x1612" ] ; then
+ARCH=msp:16
+ROM_START=0x2500
+ROM_SIZE=0xdae0
+RAM_START=0x1100
+RAM_SIZE=0x1400
+STACK=0x2500
+fi
+
+if [ "${MSP430_NAME}" = "msp430x2101" ] ; then
+ARCH=msp:21
+ROM_START=0xFC00
+ROM_SIZE=0x03e0
+RAM_START=0x0200
+RAM_SIZE=128
+STACK=0x280
+fi
+
+if [ "${MSP430_NAME}" = "msp430x2111" ] ; then
+ARCH=msp:21
+ROM_START=0xF800
+ROM_SIZE=0x07e0
+RAM_START=0x0200
+RAM_SIZE=128
+STACK=0x280
+fi
+
+if [ "${MSP430_NAME}" = "msp430x2121" ] ; then
+ARCH=msp:21
+ROM_START=0xf000
+ROM_SIZE=0x0fe0
+RAM_START=0x0200
+RAM_SIZE=256
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x2131" ] ; then
+ARCH=msp:21
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x311" ] ; then
+ARCH=msp:31
+SCRIPT_NAME=elf32msp430_3
+ROM_START=0xf800
+ROM_SIZE=0x07e0
+RAM_START=0x0200
+RAM_SIZE=128
+STACK=0x280
+fi
+
+if [ "${MSP430_NAME}" = "msp430x312" ] ; then
+ARCH=msp:31
+SCRIPT_NAME=elf32msp430_3
+ROM_START=0xf000
+ROM_SIZE=0x0fe0
+RAM_START=0x0200
+RAM_SIZE=256
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x313" ] ; then
+ARCH=msp:31
+SCRIPT_NAME=elf32msp430_3
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x314" ] ; then
+ARCH=msp:31
+SCRIPT_NAME=elf32msp430_3
+ROM_START=0xd000
+ROM_SIZE=0x2fe0
+RAM_START=0x0200
+RAM_SIZE=512
+STACK=0x400
+fi
+
+if [ "${MSP430_NAME}" = "msp430x315" ] ; then
+ARCH=msp:31
+SCRIPT_NAME=elf32msp430_3
+ROM_START=0xc000
+ROM_SIZE=0x3fe0
+RAM_START=0x0200
+RAM_SIZE=512
+STACK=0x400
+fi
+
+if [ "${MSP430_NAME}" = "msp430x323" ] ; then
+ARCH=msp:32
+SCRIPT_NAME=elf32msp430_3
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x325" ] ; then
+ARCH=msp:32
+SCRIPT_NAME=elf32msp430_3
+ROM_START=0xc000
+ROM_SIZE=0x3fe0
+RAM_START=0x0200
+RAM_SIZE=512
+STACK=0x400
+fi
+
+if [ "${MSP430_NAME}" = "msp430x336" ] ; then
+ARCH=msp:33
+SCRIPT_NAME=elf32msp430_3
+ROM_START=0xa000
+ROM_SIZE=0x5fe0
+RAM_START=0x0200
+RAM_SIZE=1024
+STACK=0x600
+fi
+
+if [ "${MSP430_NAME}" = "msp430x337" ] ; then
+ARCH=msp:33
+SCRIPT_NAME=elf32msp430_3
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x0200
+RAM_SIZE=1024
+STACK=0x600
+fi
+
+if [ "${MSP430_NAME}" = "msp430x412" ] ; then
+ARCH=msp:41
+ROM_START=0xf000
+ROM_SIZE=0x0fe0
+RAM_START=0x0200
+RAM_SIZE=256
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x413" ] ; then
+ARCH=msp:41
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x415" ] ; then
+ARCH=msp:41
+ROM_START=0xc000
+ROM_SIZE=0x3fe0
+RAM_START=0x0200
+RAM_SIZE=512
+STACK=0x400
+fi
+
+if [ "${MSP430_NAME}" = "msp430x417" ] ; then
+ARCH=msp:41
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x0200
+RAM_SIZE=1024
+STACK=0x600
+fi
+
+if [ "${MSP430_NAME}" = "msp430x435" ] ; then
+ARCH=msp:43
+ROM_START=0xc000
+ROM_SIZE=0x3fe0
+RAM_START=0x0200
+RAM_SIZE=512
+STACK=0x400
+fi
+
+if [ "${MSP430_NAME}" = "msp430x436" ] ; then
+ARCH=msp:43
+ROM_START=0xa000
+ROM_SIZE=0x5fe0
+RAM_START=0x0200
+RAM_SIZE=1024
+STACK=0x600
+fi
+
+if [ "${MSP430_NAME}" = "msp430x437" ] ; then
+ARCH=msp:43
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x0200
+RAM_SIZE=1024
+STACK=0x600
+fi
+
+if [ "${MSP430_NAME}" = "msp430x447" ] ; then
+ARCH=msp:44
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x0200
+RAM_SIZE=1024
+STACK=0x600
+fi
+
+if [ "${MSP430_NAME}" = "msp430x448" ] ; then
+ARCH=msp:44
+ROM_START=0x4000
+ROM_SIZE=0xbfe0
+RAM_START=0x0200
+RAM_SIZE=0x0800
+STACK=0xa00
+fi
+
+if [ "${MSP430_NAME}" = "msp430x449" ] ; then
+ARCH=msp:44
+ROM_START=0x1100
+ROM_SIZE=0xeee0
+RAM_START=0x0200
+RAM_SIZE=0x0800
+STACK=0xa00
+fi
+
+if [ "${MSP430_NAME}" = "msp430xE423" ] ; then
+ARCH=msp:42
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430xE425" ] ; then
+ARCH=msp:42
+ROM_START=0xc000
+ROM_SIZE=0x3fe0
+RAM_START=0x0200
+RAM_SIZE=512
+STACK=0x400
+fi
+
+if [ "${MSP430_NAME}" = "msp430xE427" ] ; then
+ARCH=msp:42
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x0200
+RAM_SIZE=1024
+STACK=0x600
+fi
+
+if [ "${MSP430_NAME}" = "msp430xG437" ] ; then
+ARCH=msp:43
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x0200
+RAM_SIZE=1024
+STACK=0x600
+fi
+
+if [ "${MSP430_NAME}" = "msp430xG438" ] ; then
+ARCH=msp:43
+ROM_START=0x4000
+ROM_SIZE=0xbef0
+RAM_START=0x0200
+RAM_SIZE=0x0800
+STACK=0xa00
+fi
+
+if [ "${MSP430_NAME}" = "msp430xG439" ] ; then
+ARCH=msp:43
+ROM_START=0x1100
+ROM_SIZE=0xeee0
+RAM_START=0x0200
+RAM_SIZE=0x0800
+STACK=0xa00
+fi
+
+if [ "${MSP430_NAME}" = "msp430xW423" ] ; then
+ARCH=msp:42
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430xW425" ] ; then
+ARCH=msp:42
+ROM_START=0xc000
+ROM_SIZE=0x3fe0
+RAM_START=0x0200
+RAM_SIZE=512
+STACK=0x400
+fi
+
+if [ "${MSP430_NAME}" = "msp430xW427" ] ; then
+ARCH=msp:42
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x0200
+RAM_SIZE=0x400
+STACK=0x600
+fi
diff --git a/binutils-2.21/ld/emulparams/news.sh b/binutils-2.21/ld/emulparams/news.sh
new file mode 100644
index 0000000..310ddf9
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/news.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-newsos3"
+TEXT_START_ADDR=0
+TARGET_PAGE_SIZE=0x1000
+ARCH=m68k
diff --git a/binutils-2.21/ld/emulparams/ns32knbsd.sh b/binutils-2.21/ld/emulparams/ns32knbsd.sh
new file mode 100644
index 0000000..12e4b09
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/ns32knbsd.sh
@@ -0,0 +1,10 @@
+SCRIPT_NAME=aout
+TEXT_START_ADDR=0x1020
+case ${LD_FLAG} in
+ n|N) TEXT_START_ADDR=0x1000 ;;
+esac
+OUTPUT_FORMAT="a.out-ns32k-netbsd"
+TARGET_PAGE_SIZE=0x1000
+ARCH=ns32k
+EXECUTABLE_SYMBOLS='__DYNAMIC = 0;'
+EXTRA_EM_FILE=netbsd
diff --git a/binutils-2.21/ld/emulparams/or32.sh b/binutils-2.21/ld/emulparams/or32.sh
new file mode 100644
index 0000000..0e22e45
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/or32.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=or32
+OUTPUT_FORMAT="coff-or32-big"
+TEXT_START_ADDR=0x1000000
+TARGET_PAGE_SIZE=0x1000000
+ARCH=or32
diff --git a/binutils-2.21/ld/emulparams/or32elf.sh b/binutils-2.21/ld/emulparams/or32elf.sh
new file mode 100644
index 0000000..5d85b04
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/or32elf.sh
@@ -0,0 +1,9 @@
+SCRIPT_NAME=elf
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
+OUTPUT_FORMAT="elf32-or32"
+NO_RELA_RELOCS=yes
+TEXT_START_ADDR=0x1000000
+TARGET_PAGE_SIZE=0x1000000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ARCH=or32
diff --git a/binutils-2.21/ld/emulparams/pc532macha.sh b/binutils-2.21/ld/emulparams/pc532macha.sh
new file mode 100644
index 0000000..2b70618
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/pc532macha.sh
@@ -0,0 +1,8 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-pc532-mach"
+TARGET_PAGE_SIZE=0x1000
+TEXT_START_ADDR="0x10020"
+case ${LD_FLAG} in
+ n|N) TEXT_START_ADDR=0x10000 ;;
+esac
+ARCH=ns32k
diff --git a/binutils-2.21/ld/emulparams/pdp11.sh b/binutils-2.21/ld/emulparams/pdp11.sh
new file mode 100644
index 0000000..aaf955a
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/pdp11.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-pdp11"
+TEXT_START_ADDR=0
+TARGET_PAGE_SIZE=256
+ARCH=pdp11
diff --git a/binutils-2.21/ld/emulparams/pjelf.sh b/binutils-2.21/ld/emulparams/pjelf.sh
new file mode 100644
index 0000000..37f0034
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/pjelf.sh
@@ -0,0 +1,8 @@
+SCRIPT_NAME=elf
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
+OUTPUT_FORMAT="elf32-pj"
+NO_REL_RELOCS=yes
+TEXT_START_ADDR=0x1000000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ARCH=pj
diff --git a/binutils-2.21/ld/emulparams/pjlelf.sh b/binutils-2.21/ld/emulparams/pjlelf.sh
new file mode 100644
index 0000000..88c2b64
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/pjlelf.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/pjelf.sh
+OUTPUT_FORMAT="elf32-pjl"
diff --git a/binutils-2.21/ld/emulparams/ppclynx.sh b/binutils-2.21/ld/emulparams/ppclynx.sh
new file mode 100644
index 0000000..76aefd6
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/ppclynx.sh
@@ -0,0 +1,23 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-powerpc"
+NO_REL_RELOCS=yes
+TEXT_BASE=0x00002000
+DYN_TEXT_BASE=0x00400000
+TEXT_START_ADDR="(DEFINED(_DYNAMIC) ? ${DYN_TEXT_BASE} : ${TEXT_BASE})"
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+case ${LD_FLAG} in
+ n|N) TEXT_START_ADDR=0x1000 ;;
+esac
+ARCH=powerpc
+MACHINE=
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+ELF_INTERPRETER_NAME=\"/usr/lib/ld.so.1\"
+
+# Leave room of SIZEOF_HEADERS before text.
+EMBEDDED=
+# PLT on PowerPC is generated at run-time.
+BSS_PLT=
+OTHER_READWRITE_SECTIONS="
+ .got1 ${RELOCATING-0} : { *(.got1) }
+ .got2 ${RELOCATING-0} : { *(.got2) }"
diff --git a/binutils-2.21/ld/emulparams/ppcmacos.sh b/binutils-2.21/ld/emulparams/ppcmacos.sh
new file mode 100644
index 0000000..9f02af4
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/ppcmacos.sh
@@ -0,0 +1,6 @@
+TEMPLATE_NAME=aix
+SCRIPT_NAME=aix
+OUTPUT_FORMAT="xcoff-powermac"
+OUTPUT_FORMAT_32BIT="xcoff-powermac"
+OUTPUT_FORMAT_64BIT="xcoff-powermac"
+ARCH=powerpc
diff --git a/binutils-2.21/ld/emulparams/ppcnw.sh b/binutils-2.21/ld/emulparams/ppcnw.sh
new file mode 100644
index 0000000..e7d197d
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/ppcnw.sh
@@ -0,0 +1,6 @@
+SCRIPT_NAME=nw
+OUTPUT_FORMAT="elf32-powerpc"
+TEXT_START_ADDR=0x0400000
+DATA_ADDR=0x10000000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ARCH=powerpc
diff --git a/binutils-2.21/ld/emulparams/ppcpe.sh b/binutils-2.21/ld/emulparams/ppcpe.sh
new file mode 100644
index 0000000..ed7df88
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/ppcpe.sh
@@ -0,0 +1,7 @@
+ARCH=powerpc
+SCRIPT_NAME=ppcpe
+OUTPUT_FORMAT="pei-powerpcle"
+TEMPLATE_NAME=pe
+SUBSYSTEM=PE_DEF_SUBSYSTEM
+INITIAL_SYMBOL_CHAR=\"_\"
+TARGET_PAGE_SIZE=0x1000
diff --git a/binutils-2.21/ld/emulparams/riscix.sh b/binutils-2.21/ld/emulparams/riscix.sh
new file mode 100644
index 0000000..e7f6d92
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/riscix.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=riscix
+OUTPUT_FORMAT="a.out-riscix"
+TEXT_START_ADDR=0x8000
+TARGET_PAGE_SIZE=0x8000
+ARCH=arm
diff --git a/binutils-2.21/ld/emulparams/scoreelf.sh b/binutils-2.21/ld/emulparams/scoreelf.sh
new file mode 100644
index 0000000..3a7ed31
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/scoreelf.sh
@@ -0,0 +1,41 @@
+MACHINE=
+SCRIPT_NAME=elf
+TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=scoreelf
+OUTPUT_FORMAT="elf32-bigscore"
+BIG_OUTPUT_FORMAT="elf32-bigscore"
+LITTLE_OUTPUT_FORMAT="elf32-littlescore"
+NO_RELA_RELOCS=yes
+GROUP="-lm -lc -lglsim -lgcc -lstdc++"
+
+TEXT_START_ADDR=0x00000000
+MAXPAGESIZE=256
+NONPAGED_TEXT_START_ADDR=0x0400000
+SHLIB_TEXT_START_ADDR=0x5ffe0000
+OTHER_GOT_SYMBOLS='
+ _gp = ALIGN(16) + 0x3ff0;
+'
+
+OTHER_BSS_START_SYMBOLS='_bss_start__ = . + ALIGN(4);'
+OTHER_BSS_END_SYMBOLS='_bss_end__ = . ; __bss_end__ = . ; __end__ = . ;'
+DATA_START_SYMBOLS='_fdata = . ;'
+SDATA_START_SYMBOLS='_sdata_begin = . ;'
+OTHER_BSS_SYMBOLS='
+ _bss_start = ALIGN(4) ;
+'
+# This sets the stack to the top of the simulator memory (2^19 bytes).
+STACK_ADDR=0x8000000
+
+SCORE_NAME=${EMULATION_NAME}
+if [ "${SCORE_NAME}" = "score3_elf" ] ; then
+ARCH=score3
+fi
+
+if [ "${SCORE_NAME}" = "score7_elf" ] ; then
+ARCH=score7
+fi
+
+MACHINE=
+ENTRY=_start
+EMBEDDED=yes
+GENERATE_SHLIB_SCRIPT=yes
diff --git a/binutils-2.21/ld/emulparams/sh.sh b/binutils-2.21/ld/emulparams/sh.sh
new file mode 100644
index 0000000..52d1443
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/sh.sh
@@ -0,0 +1,8 @@
+# If you change this file, please also look at files which source this one:
+# shl.sh
+
+SCRIPT_NAME=sh
+OUTPUT_FORMAT="coff-sh"
+TEXT_START_ADDR=0x8000
+TARGET_PAGE_SIZE=128
+ARCH=sh
diff --git a/binutils-2.21/ld/emulparams/shelf.sh b/binutils-2.21/ld/emulparams/shelf.sh
new file mode 100644
index 0000000..5757b81
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/shelf.sh
@@ -0,0 +1,34 @@
+# If you change this file, please also look at files which source this one:
+# shlelf.sh, shelf_nbsd.sh
+
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-sh"
+NO_REL_RELOCS=yes
+TEXT_START_ADDR=0x1000
+MAXPAGESIZE=128
+ARCH=sh
+MACHINE=
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+EMBEDDED=yes
+
+# These are for compatibility with the COFF toolchain.
+ENTRY=start
+CTOR_START='___ctors = .;'
+CTOR_END='___ctors_end = .;'
+DTOR_START='___dtors = .;'
+DTOR_END='___dtors_end = .;'
+# This is like setting STACK_ADDR to 0x300000, except that the setting can
+# be overridden, e.g. --defsym _stack=0x0f00, and that we put an extra
+# sentinal value at the bottom.
+# N.B. We can't use PROVIDE to set the default value in a symbol because
+# the address is needed to place the .stack section, which in turn is needed
+# to hold the sentinel value(s).
+test -z "$CREATE_SHLIB" && OTHER_SECTIONS=" .stack ${RELOCATING-0}${RELOCATING+(DEFINED(_stack) ? _stack : 0x300000)} :
+ {
+ ${RELOCATING+_stack = .;}
+ *(.stack)
+ LONG(0xdeaddead)
+ }"
+# We do not need .stack for shared library.
+test -n "$CREATE_SHLIB" && OTHER_SECTIONS=""
diff --git a/binutils-2.21/ld/emulparams/shelf32.sh b/binutils-2.21/ld/emulparams/shelf32.sh
new file mode 100644
index 0000000..966bd30
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/shelf32.sh
@@ -0,0 +1,59 @@
+# Note: this parameter script is sourced by the other
+# sh[l]elf(32|64).sh parameter scripts.
+SCRIPT_NAME=elf
+OUTPUT_FORMAT=${OUTPUT_FORMAT-"elf32-sh64"}
+NO_REL_RELOCS=yes
+TEXT_START_ADDR=0x1000
+MAXPAGESIZE=128
+ARCH=sh
+MACHINE=sh5
+ALIGNMENT=8
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+EMBEDDED=yes
+
+DATA_START_SYMBOLS='PROVIDE (___data = .);'
+
+# If data is located right after .text (not explicitly specified),
+# then we need to align it to an 8-byte boundary.
+OTHER_READONLY_SECTIONS='
+PROVIDE (___rodata = DEFINED (.rodata) ? .rodata : 0);
+. = ALIGN (8);
+'
+
+# Make _edata and .bss aligned by smuggling in an alignment directive.
+OTHER_GOT_SECTIONS='. = ALIGN (8);'
+
+# These are for compatibility with the COFF toolchain.
+ENTRY=start
+CTOR_START='___ctors = .;'
+CTOR_END='___ctors_end = .;'
+DTOR_START='___dtors = .;'
+DTOR_END='___dtors_end = .;'
+
+# Do not use the varname=${varname-'string'} construct here; there are
+# problems with that on some shells (e.g. on Solaris) where there is a bug
+# that trigs when $varname contains a "}".
+# The effect of the .stack definition is like setting STACK_ADDR to 0x80000,
+# except that the setting can be overridden, e.g. --defsym _stack=0xff000,
+# and that we put an extra sentinal value at the bottom.
+# N.B. We can't use PROVIDE to set the default value in a symbol because
+# the address is needed to place the .stack section, which in turn is needed
+# to hold the sentinel value(s).
+test -z "$CREATE_SHLIB" && OTHER_SECTIONS="
+ .stack ${RELOCATING-0}${RELOCATING+(DEFINED(_stack) ? _stack : ALIGN (0x40000) + 0x80000)} :
+ {
+ ${RELOCATING+_stack = .;}
+ *(.stack)
+ LONG(0xdeaddead)
+ }
+ .cranges 0 : { *(.cranges) }
+"
+# We do not need .stack for shared library.
+test -n "$CREATE_SHLIB" && OTHER_SECTIONS="
+ .cranges 0 : { *(.cranges) }
+"
+
+# We need to adjust sizes in the .cranges section after relaxation, so
+# we need an after_allocation function, and it goes in this file.
+EXTRA_EM_FILE=${EXTRA_EM_FILE-sh64elf}
diff --git a/binutils-2.21/ld/emulparams/shelf32_linux.sh b/binutils-2.21/ld/emulparams/shelf32_linux.sh
new file mode 100644
index 0000000..a51e22f
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/shelf32_linux.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/shlelf32_linux.sh
+OUTPUT_FORMAT="elf32-sh64big-linux"
diff --git a/binutils-2.21/ld/emulparams/shelf32_nbsd.sh b/binutils-2.21/ld/emulparams/shelf32_nbsd.sh
new file mode 100644
index 0000000..63aee8f
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/shelf32_nbsd.sh
@@ -0,0 +1,17 @@
+# If you change this file, please alsolook at files which source this one:
+# shlelf32_nbsd.sh
+
+. ${srcdir}/emulparams/shelf32.sh
+
+OUTPUT_FORMAT="elf32-sh64-nbsd"
+TEXT_START_ADDR=0x400000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+
+ENTRY=__start
+
+unset EMBEDDED
+unset STACK_ADDR
+unset OTHER_SECTIONS
+OTHER_SECTIONS="
+ .cranges 0 : { *(.cranges) }
+"
diff --git a/binutils-2.21/ld/emulparams/shelf64.sh b/binutils-2.21/ld/emulparams/shelf64.sh
new file mode 100644
index 0000000..5037f35
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/shelf64.sh
@@ -0,0 +1,18 @@
+# Note: this is sourced in turn by shlelf64.sh
+OUTPUT_FORMAT=${OUTPUT_FORMAT-"elf64-sh64"}
+ELFSIZE=64
+
+EXTRA_EM_FILE=
+. ${srcdir}/emulparams/shelf32.sh
+
+# We do not need .cranges
+test -z "$CREATE_SHLIB" && OTHER_SECTIONS="
+ .stack ${RELOCATING-0}${RELOCATING+(DEFINED(_stack) ? _stack : ALIGN (0x40000) + 0x80000)} :
+ {
+ ${RELOCATING+_stack = .;}
+ *(.stack)
+ LONG(0xdeaddead)
+ }
+"
+# We do not need .stack for shared library.
+test -n "$CREATE_SHLIB" && OTHER_SECTIONS=""
diff --git a/binutils-2.21/ld/emulparams/shelf64_nbsd.sh b/binutils-2.21/ld/emulparams/shelf64_nbsd.sh
new file mode 100644
index 0000000..7a3ff21
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/shelf64_nbsd.sh
@@ -0,0 +1,8 @@
+. ${srcdir}/emulparams/shelf32_nbsd.sh
+
+OUTPUT_FORMAT="elf64-sh64-nbsd"
+ELFSIZE=64
+
+# We do not need .cranges
+OTHER_SECTIONS=''
+EXTRA_EM_FILE=
diff --git a/binutils-2.21/ld/emulparams/shelf_fd.sh b/binutils-2.21/ld/emulparams/shelf_fd.sh
new file mode 100644
index 0000000..7ec25ab
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/shelf_fd.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/shlelf_fd.sh
+OUTPUT_FORMAT="elf32-shbig-fdpic"
diff --git a/binutils-2.21/ld/emulparams/shelf_linux.sh b/binutils-2.21/ld/emulparams/shelf_linux.sh
new file mode 100644
index 0000000..b841bef
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/shelf_linux.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/shlelf_linux.sh
+OUTPUT_FORMAT="elf32-shbig-linux"
diff --git a/binutils-2.21/ld/emulparams/shelf_nbsd.sh b/binutils-2.21/ld/emulparams/shelf_nbsd.sh
new file mode 100644
index 0000000..9d331c6
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/shelf_nbsd.sh
@@ -0,0 +1,15 @@
+# If you change this file, please alsolook at files which source this one:
+# shlelf_nbsd.sh
+
+. ${srcdir}/emulparams/shelf.sh
+
+OUTPUT_FORMAT="elf32-sh-nbsd"
+TEXT_START_ADDR=0x400000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+
+DATA_START_SYMBOLS='PROVIDE (__data_start = .);';
+
+ENTRY=_start
+
+unset EMBEDDED
+unset OTHER_SECTIONS
diff --git a/binutils-2.21/ld/emulparams/shelf_nto.sh b/binutils-2.21/ld/emulparams/shelf_nto.sh
new file mode 100644
index 0000000..c4d71aa
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/shelf_nto.sh
@@ -0,0 +1,11 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-sh"
+NO_REL_RELOCS=yes
+TEXT_START_ADDR=0x08040000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ARCH=sh
+MACHINE=
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+TEXT_START_SYMBOLS='_btext = .;'
+ENTRY=_start
diff --git a/binutils-2.21/ld/emulparams/shelf_uclinux.sh b/binutils-2.21/ld/emulparams/shelf_uclinux.sh
new file mode 100644
index 0000000..2af5da4
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/shelf_uclinux.sh
@@ -0,0 +1,4 @@
+. ${srcdir}/emulparams/shelf.sh
+
+# We do not want a .stack section
+OTHER_SECTIONS=""
diff --git a/binutils-2.21/ld/emulparams/shelf_vxworks.sh b/binutils-2.21/ld/emulparams/shelf_vxworks.sh
new file mode 100644
index 0000000..77619cb
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/shelf_vxworks.sh
@@ -0,0 +1,20 @@
+# If you change this file, please also look at files which source this one:
+# shlelf_vxworks.sh
+
+SCRIPT_NAME=elf
+NO_REL_RELOCS=yes
+BIG_OUTPUT_FORMAT="elf32-sh-vxworks"
+LITTLE_OUTPUT_FORMAT="elf32-shl-vxworks"
+OUTPUT_FORMAT="$BIG_OUTPUT_FORMAT"
+TEXT_START_ADDR=0x1000
+MAXPAGESIZE='CONSTANT (MAXPAGESIZE)'
+ARCH=sh
+MACHINE=
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+ENTRY=__start
+SYMPREFIX=_
+GOT=".got ${RELOCATING-0} : {
+ PROVIDE(__GLOBAL_OFFSET_TABLE_ = .);
+ *(.got.plt) *(.got) }"
+. ${srcdir}/emulparams/vxworks.sh
diff --git a/binutils-2.21/ld/emulparams/shl.sh b/binutils-2.21/ld/emulparams/shl.sh
new file mode 100644
index 0000000..5fbb165
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/shl.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/sh.sh
+OUTPUT_FORMAT="coff-shl"
diff --git a/binutils-2.21/ld/emulparams/shlelf.sh b/binutils-2.21/ld/emulparams/shlelf.sh
new file mode 100644
index 0000000..e19678b
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/shlelf.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/shelf.sh
+OUTPUT_FORMAT="elf32-shl"
diff --git a/binutils-2.21/ld/emulparams/shlelf32.sh b/binutils-2.21/ld/emulparams/shlelf32.sh
new file mode 100644
index 0000000..68c85dd
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/shlelf32.sh
@@ -0,0 +1,2 @@
+OUTPUT_FORMAT="elf32-sh64l"
+. ${srcdir}/emulparams/shelf32.sh
diff --git a/binutils-2.21/ld/emulparams/shlelf32_linux.sh b/binutils-2.21/ld/emulparams/shlelf32_linux.sh
new file mode 100644
index 0000000..81aea39
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/shlelf32_linux.sh
@@ -0,0 +1,44 @@
+# If you change this file, please also look at files which source this one:
+# shelf32_linux.sh
+
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-sh64-linux"
+NO_REL_RELOCS=yes
+TEXT_START_ADDR=0x400000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
+ARCH=sh
+MACHINE=sh5
+ALIGNMENT=8
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+
+
+DATA_START_SYMBOLS='PROVIDE (___data = .);'
+
+# If data is located right after .text (not explicitly specified),
+# then we need to align it to an 8-byte boundary.
+OTHER_READONLY_SECTIONS='
+PROVIDE (___rodata = DEFINED (.rodata) ? .rodata : 0);
+. = ALIGN (8);
+'
+
+# Make _edata and .bss aligned by smuggling in an alignment directive.
+OTHER_GOT_SECTIONS='. = ALIGN (8);'
+
+CTOR_START='___ctors = .;'
+CTOR_END='___ctors_end = .;'
+DTOR_START='___dtors = .;'
+DTOR_END='___dtors_end = .;'
+
+# Do not use the varname=${varname-'string'} construct here; there are
+# problems with that on some shells (e.g. on Solaris) where there is a bug
+# that trigs when $varname contains a "}".
+test -z "$OTHER_RELOCATING_SECTIONS" && OTHER_RELOCATING_SECTIONS='
+ .cranges 0 : { *(.cranges) }
+'
+
+# We need to adjust sizes in the .cranges section after relaxation, so
+# we need an after_allocation function, and it goes in this file.
+EXTRA_EM_FILE=${EXTRA_EM_FILE-sh64elf}
diff --git a/binutils-2.21/ld/emulparams/shlelf32_nbsd.sh b/binutils-2.21/ld/emulparams/shlelf32_nbsd.sh
new file mode 100644
index 0000000..c4abe6b
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/shlelf32_nbsd.sh
@@ -0,0 +1,3 @@
+. ${srcdir}/emulparams/shelf32_nbsd.sh
+
+OUTPUT_FORMAT="elf32-sh64l-nbsd"
diff --git a/binutils-2.21/ld/emulparams/shlelf64.sh b/binutils-2.21/ld/emulparams/shlelf64.sh
new file mode 100644
index 0000000..874b00c
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/shlelf64.sh
@@ -0,0 +1,2 @@
+OUTPUT_FORMAT="elf64-sh64l"
+. ${srcdir}/emulparams/shelf64.sh
diff --git a/binutils-2.21/ld/emulparams/shlelf64_nbsd.sh b/binutils-2.21/ld/emulparams/shlelf64_nbsd.sh
new file mode 100644
index 0000000..5b693c3
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/shlelf64_nbsd.sh
@@ -0,0 +1,3 @@
+. ${srcdir}/emulparams/shelf64_nbsd.sh
+
+OUTPUT_FORMAT="elf64-sh64l-nbsd"
diff --git a/binutils-2.21/ld/emulparams/shlelf_fd.sh b/binutils-2.21/ld/emulparams/shlelf_fd.sh
new file mode 100644
index 0000000..f1f4107
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/shlelf_fd.sh
@@ -0,0 +1,16 @@
+# If you change this file, please also look at files which source this one:
+# shelf_fd.sh
+
+. ${srcdir}/emulparams/shlelf_linux.sh
+OUTPUT_FORMAT="elf32-sh-fdpic"
+GOT=".got ${RELOCATING-0} : { *(.got.funcdesc) *(.got.plt) *(.got) }"
+OTHER_GOT_RELOC_SECTIONS="
+ .rela.got.funcdesc ${RELOCATING-0} : { *(.rela.got.funcdesc) }
+"
+OTHER_READONLY_SECTIONS="
+ .rofixup : {
+ ${RELOCATING+__ROFIXUP_LIST__ = .;}
+ *(.rofixup)
+ ${RELOCATING+__ROFIXUP_END__ = .;}
+ }
+"
diff --git a/binutils-2.21/ld/emulparams/shlelf_linux.sh b/binutils-2.21/ld/emulparams/shlelf_linux.sh
new file mode 100644
index 0000000..c14aae2
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/shlelf_linux.sh
@@ -0,0 +1,19 @@
+# If you change this file, please also look at files which source this one:
+# shelf_linux.sh shelf_fd.sh shlelf_fd.sh
+
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-sh-linux"
+NO_REL_RELOCS=yes
+TEXT_START_ADDR=0x400000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
+ARCH=sh
+MACHINE=
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+
+DATA_START_SYMBOLS='PROVIDE (__data_start = .);';
+
+OTHER_READWRITE_SECTIONS="
+ .note.ABI-tag ${RELOCATING-0} : { *(.note.ABI-tag) }"
diff --git a/binutils-2.21/ld/emulparams/shlelf_nbsd.sh b/binutils-2.21/ld/emulparams/shlelf_nbsd.sh
new file mode 100644
index 0000000..d6ca82e
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/shlelf_nbsd.sh
@@ -0,0 +1,3 @@
+. ${srcdir}/emulparams/shelf_nbsd.sh
+
+OUTPUT_FORMAT="elf32-shl-nbsd"
diff --git a/binutils-2.21/ld/emulparams/shlelf_nto.sh b/binutils-2.21/ld/emulparams/shlelf_nto.sh
new file mode 100644
index 0000000..16f6508
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/shlelf_nto.sh
@@ -0,0 +1,11 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-shl"
+NO_REL_RELOCS=yes
+TEXT_START_ADDR=0x08040000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ARCH=sh
+MACHINE=
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+TEXT_START_SYMBOLS='_btext = .;'
+ENTRY=_start
diff --git a/binutils-2.21/ld/emulparams/shlelf_vxworks.sh b/binutils-2.21/ld/emulparams/shlelf_vxworks.sh
new file mode 100644
index 0000000..0a055b1
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/shlelf_vxworks.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/shelf_vxworks.sh
+OUTPUT_FORMAT="$LITTLE_OUTPUT_FORMAT"
diff --git a/binutils-2.21/ld/emulparams/shlsymbian.sh b/binutils-2.21/ld/emulparams/shlsymbian.sh
new file mode 100644
index 0000000..9c6dfba
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/shlsymbian.sh
@@ -0,0 +1,17 @@
+TEXT_START_ADDR=0x8000
+SHLIB_TEXT_START_ADDR=0x8000
+SHLIB_DATA_ADDR=0x400000
+
+. ${srcdir}/emulparams/shelf.sh
+
+# Use only two underscores for the constructor/destructor symbols
+CTOR_START='__ctors = .;'
+CTOR_END='__ctors_end = .;'
+DTOR_START='__dtors = .;'
+DTOR_END='__dtors_end = .;'
+
+# Suppress the .stack section.
+test -z "$CREATE_SHLIB" && OTHER_SECTIONS="${RELOCATING+PROVIDE (_stack = 0x30000);}"
+
+OUTPUT_FORMAT="elf32-shl-symbian"
+SCRIPT_NAME=elf32sh-symbian
diff --git a/binutils-2.21/ld/emulparams/shpe.sh b/binutils-2.21/ld/emulparams/shpe.sh
new file mode 100644
index 0000000..89fa461
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/shpe.sh
@@ -0,0 +1,7 @@
+ARCH=sh
+SCRIPT_NAME=pe
+OUTPUT_FORMAT="pei-shl"
+TEMPLATE_NAME=pe
+SUBSYSTEM=PE_DEF_SUBSYSTEM
+INITIAL_SYMBOL_CHAR=\"_\"
+TARGET_PAGE_SIZE=0x1000
diff --git a/binutils-2.21/ld/emulparams/solaris2.sh b/binutils-2.21/ld/emulparams/solaris2.sh
new file mode 100644
index 0000000..dabbb05
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/solaris2.sh
@@ -0,0 +1,10 @@
+# If you change this file, please also look at files which source this one:
+# elf32_sparc_sol2.sh, elf64_sparc_sol2.sh, elf_i386_sol2.sh,
+# elf_x86_64_sol2.sh.
+
+# The Solaris 2 ABI requires that two local symbols are present in every
+# executable and shared object.
+# Cf. Linker and Libraries Guide, Ch. 2, Link-Editor, Generating the Output
+# File, p.63.
+TEXT_START_SYMBOLS='_START_ = .;'
+OTHER_END_SYMBOLS='_END_ = .;'
diff --git a/binutils-2.21/ld/emulparams/sparcaout.sh b/binutils-2.21/ld/emulparams/sparcaout.sh
new file mode 100644
index 0000000..e109064
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/sparcaout.sh
@@ -0,0 +1,10 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-sunos-big"
+BIG_OUTPUT_FORMAT="a.out-sunos-big"
+LITTLE_OUTPUT_FORMAT="a.out-sparc-little"
+TEXT_START_ADDR=0x2020
+case ${LD_FLAG} in
+ n|N) TEXT_START_ADDR=0x2000 ;;
+esac
+TARGET_PAGE_SIZE=0x2000
+ARCH=sparc
diff --git a/binutils-2.21/ld/emulparams/sparclinux.sh b/binutils-2.21/ld/emulparams/sparclinux.sh
new file mode 100644
index 0000000..e2164bc
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/sparclinux.sh
@@ -0,0 +1,9 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-sparc-linux"
+TARGET_PAGE_SIZE=0x1000
+TEXT_START_ADDR=0x1020
+case ${LD_FLAG} in
+ n|N) TEXT_START_ADDR=0 ;;
+esac
+ARCH=sparc
+TEMPLATE_NAME=linux
diff --git a/binutils-2.21/ld/emulparams/sparcnbsd.sh b/binutils-2.21/ld/emulparams/sparcnbsd.sh
new file mode 100644
index 0000000..f27daf3
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/sparcnbsd.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=aout
+TEXT_START_ADDR=0x1020
+OUTPUT_FORMAT="a.out-sparc-netbsd"
+TARGET_PAGE_SIZE=0x1000
+ARCH=sparc
diff --git a/binutils-2.21/ld/emulparams/st2000.sh b/binutils-2.21/ld/emulparams/st2000.sh
new file mode 100644
index 0000000..0498832
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/st2000.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=st2000
+OUTPUT_FORMAT="coff-m68k"
+TEXT_START_ADDR=0x0
+TARGET_PAGE_SIZE=128
+ARCH=m68k
diff --git a/binutils-2.21/ld/emulparams/sun3.sh b/binutils-2.21/ld/emulparams/sun3.sh
new file mode 100644
index 0000000..64c0c46
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/sun3.sh
@@ -0,0 +1,10 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-sunos-big"
+TEXT_START_ADDR=0x2020
+case ${LD_FLAG} in
+ n|N) TEXT_START_ADDR=0x2000 ;;
+esac
+TARGET_PAGE_SIZE=0x2000
+SEGMENT_SIZE=0x20000
+ARCH=m68k
+TEMPLATE_NAME=sunos
diff --git a/binutils-2.21/ld/emulparams/sun4.sh b/binutils-2.21/ld/emulparams/sun4.sh
new file mode 100644
index 0000000..6cfbccc
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/sun4.sh
@@ -0,0 +1,7 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-sunos-big"
+TEXT_START_ADDR=0x2020
+TARGET_PAGE_SIZE=0x2000
+ALIGNMENT=8
+ARCH=sparc
+TEMPLATE_NAME=sunos
diff --git a/binutils-2.21/ld/emulparams/tic30aout.sh b/binutils-2.21/ld/emulparams/tic30aout.sh
new file mode 100644
index 0000000..2a4c13f
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/tic30aout.sh
@@ -0,0 +1,7 @@
+SCRIPT_NAME=tic30aout
+OUTPUT_FORMAT="a.out-tic30"
+OUTPUT_ARCH="tms320c30"
+TEXT_START_ADDR=0x0
+TARGET_PAGE_SIZE=128
+ARCH=tms320c30
+BIG=1
diff --git a/binutils-2.21/ld/emulparams/tic30coff.sh b/binutils-2.21/ld/emulparams/tic30coff.sh
new file mode 100644
index 0000000..df77943
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/tic30coff.sh
@@ -0,0 +1,7 @@
+SCRIPT_NAME=tic30coff
+OUTPUT_FORMAT="coff-tic30"
+OUTPUT_ARCH="tms320c30"
+TEXT_START_ADDR=0x0
+TARGET_PAGE_SIZE=128
+ARCH=tms320c30
+BIG=1
diff --git a/binutils-2.21/ld/emulparams/tic3xcoff.sh b/binutils-2.21/ld/emulparams/tic3xcoff.sh
new file mode 100644
index 0000000..be543bf
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/tic3xcoff.sh
@@ -0,0 +1,6 @@
+SCRIPT_NAME=tic4xcoff
+OUTPUT_FORMAT="coff2-tic4x"
+OUTPUT_ARCH="tic3x"
+ARCH=tic3x
+TEMPLATE_NAME=ticoff
+OUTPUT_FORMAT_TEMPLATE=tic4x
diff --git a/binutils-2.21/ld/emulparams/tic3xcoff_onchip.sh b/binutils-2.21/ld/emulparams/tic3xcoff_onchip.sh
new file mode 100644
index 0000000..1c1f8b1
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/tic3xcoff_onchip.sh
@@ -0,0 +1,8 @@
+SCRIPT_NAME=tic4xcoff
+OUTPUT_FORMAT="coff2-tic4x"
+OUTPUT_ARCH="tic3x"
+ARCH=tic3x
+TEMPLATE_NAME=ticoff
+OUTPUT_FORMAT_TEMPLATE=tic4x
+ONCHIP=yes
+
diff --git a/binutils-2.21/ld/emulparams/tic4xcoff.sh b/binutils-2.21/ld/emulparams/tic4xcoff.sh
new file mode 100644
index 0000000..2109572
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/tic4xcoff.sh
@@ -0,0 +1,6 @@
+SCRIPT_NAME=tic4xcoff
+OUTPUT_FORMAT="coff2-tic4x"
+OUTPUT_ARCH="tic4x"
+ARCH=tic4x
+TEMPLATE_NAME=ticoff
+OUTPUT_FORMAT_TEMPLATE=tic4x
diff --git a/binutils-2.21/ld/emulparams/tic54xcoff.sh b/binutils-2.21/ld/emulparams/tic54xcoff.sh
new file mode 100644
index 0000000..70c1ee2
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/tic54xcoff.sh
@@ -0,0 +1,8 @@
+SCRIPT_NAME=tic54xcoff
+OUTPUT_FORMAT="coff1-c54x"
+ARCH=tic54x
+ENTRY=_c_int00
+TEXT_START_ADDR=0x0080
+TARGET_PAGE_SIZE=0x1000
+TEMPLATE_NAME=ticoff
+OUTPUT_FORMAT_TEMPLATE=tic54x
diff --git a/binutils-2.21/ld/emulparams/tic80coff.sh b/binutils-2.21/ld/emulparams/tic80coff.sh
new file mode 100644
index 0000000..088e9b0
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/tic80coff.sh
@@ -0,0 +1,50 @@
+# This file is sourced by the genscripts.sh script.
+# These are shell variables that are used later by either genscripts
+# or on of the scripts that it sources.
+
+# The name of the scripttempl script to use. In this case, genscripts
+# uses scripttempl/tic80coff.sc
+#
+SCRIPT_NAME=tic80coff
+
+# The name of the emultempl script to use. If set to "template" then
+# genscripts.sh will use the script emultempl/template.em. If not set,
+# then the default value is "generic".
+#
+# TEMPLATE_NAME=
+
+# If this is set to an nonempty string, genscripts.sh will invoke the
+# scripttempl script an extra time to create a shared library script.
+#
+# GENERATE_SHLIB_SCRIPT=
+
+# The BFD output format to use. The scripttempl script will use it in
+# an OUTPUT_FORMAT expression in the linker script.
+#
+OUTPUT_FORMAT="coff-tic80"
+
+# This is normally set to indicate the architecture to use, such as
+# "sparc". The scripttempl script will normally use it in an OUTPUT_ARCH
+# expression in the linker script.
+#
+ARCH=tic80
+
+# Some scripttempl scripts use this to set the entry address in an ENTRY
+# expression in the linker script.
+#
+# ENTRY=
+
+# The scripttempl script uses this to set the start address of the
+# ".text" section.
+#
+TEXT_START_ADDR=0x2000000
+
+# The genscripts.sh script uses this to set the default value of
+# DATA_ALIGNMENT when running the scripttempl script.
+#
+# SEGMENT_SIZE=
+
+# If SEGMENT_SIZE is not defined, the genscripts.sh script uses this
+# to define it.
+#
+TARGET_PAGE_SIZE=0x1000
diff --git a/binutils-2.21/ld/emulparams/v850.sh b/binutils-2.21/ld/emulparams/v850.sh
new file mode 100644
index 0000000..96cdc68
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/v850.sh
@@ -0,0 +1,15 @@
+MACHINE=
+SCRIPT_NAME=v850
+OUTPUT_FORMAT="elf32-v850"
+TEXT_START_ADDR=0x100000
+ZDATA_START_ADDR=0x160
+ROZDATA_START_ADDR="ALIGN (4)"
+SDATA_START_ADDR="ALIGN (4)"
+ROSDATA_START_ADDR="ALIGN (4)"
+TDATA_START_ADDR="ALIGN (4)"
+CALL_TABLE_START_ADDR="ALIGN (4)"
+ARCH=v850
+MAXPAGESIZE=256
+ENTRY=_start
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
diff --git a/binutils-2.21/ld/emulparams/vanilla.sh b/binutils-2.21/ld/emulparams/vanilla.sh
new file mode 100644
index 0000000..eabb7cd
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/vanilla.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=vanilla
+TEXT_START_ADDR=0
+TARGET_PAGE_SIZE=128
+ARCH=unknown
+TEMPLATE_NAME=vanilla
diff --git a/binutils-2.21/ld/emulparams/vax.sh b/binutils-2.21/ld/emulparams/vax.sh
new file mode 100644
index 0000000..1bd1c10
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/vax.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-vax-bsd"
+TEXT_START_ADDR=0
+TARGET_PAGE_SIZE=1024
+ARCH=vax
diff --git a/binutils-2.21/ld/emulparams/vaxnbsd.sh b/binutils-2.21/ld/emulparams/vaxnbsd.sh
new file mode 100644
index 0000000..2d26831
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/vaxnbsd.sh
@@ -0,0 +1,6 @@
+SCRIPT_NAME=aout
+TEXT_START_ADDR=0x1020
+OUTPUT_FORMAT="a.out-vax-netbsd"
+TARGET_PAGE_SIZE=0x1000
+ARCH=vax
+EXECUTABLE_SYMBOLS='__DYNAMIC = 0;'
diff --git a/binutils-2.21/ld/emulparams/vsta.sh b/binutils-2.21/ld/emulparams/vsta.sh
new file mode 100644
index 0000000..0610f30
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/vsta.sh
@@ -0,0 +1,10 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-i386"
+TEXT_START_ADDR=0x1020
+TARGET_PAGE_SIZE=0x1000
+SEGMENT_SIZE=0x400000
+case ${LD_FLAG} in
+ n|N) TEXT_START_ADDR=0 ;;
+esac
+ARCH=i386
+
diff --git a/binutils-2.21/ld/emulparams/vxworks.sh b/binutils-2.21/ld/emulparams/vxworks.sh
new file mode 100644
index 0000000..5760758
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/vxworks.sh
@@ -0,0 +1,48 @@
+# If you change this file, please also look at files which source this one:
+# armelf_vxworks.sh elf32ebmipvxworks.sh elf32elmipvxworks.sh
+# elf_i386_vxworks.sh elf32ppcvxworks.sh elf32_sparc_vxworks.sh
+# shelf_vxworks.sh
+
+# The Diab tools use a different init/fini convention. Initialization code
+# is place in sections named ".init$NN". These sections are then concatenated
+# into the .init section. It is important that .init$00 be first and .init$99
+# be last. The other sections should be sorted, but the current linker script
+# parse does not seem to allow that with the SORT keyword in this context.
+INIT_START='_init = .;
+ KEEP (*(.init$00));
+ KEEP (*(.init$0[1-9]));
+ KEEP (*(.init$[1-8][0-9]));
+ KEEP (*(.init$9[0-8]));'
+INIT_END='KEEP (*(.init$99));'
+FINI_START='_fini = .;
+ KEEP (*(.fini$00));
+ KEEP (*(.fini$0[1-9]));
+ KEEP (*(.fini$[1-8][0-9]));
+ KEEP (*(.fini$9[0-8]));'
+FINI_END="KEEP (*(.fini\$99));
+ PROVIDE (${SYMPREFIX}_etext = .);"
+
+OTHER_READWRITE_SECTIONS=".tls_data ${RELOCATING-0} : {${RELOCATING+
+ __wrs_rtp_tls_data_start = .;
+ ___wrs_rtp_tls_data_start = .;}
+ *(.tls_data${RELOCATING+ .tls_data.*})
+ }${RELOCATING+
+ __wrs_rtp_tls_data_size = . - __wrs_rtp_tls_data_start;
+ ___wrs_rtp_tls_data_size = . - __wrs_rtp_tls_data_start;
+ __wrs_rtp_tls_data_align = ALIGNOF(.tls_data);
+ ___wrs_rtp_tls_data_align = ALIGNOF(.tls_data);}
+ .tls_vars ${RELOCATING-0} : {${RELOCATING+
+ __wrs_rtp_tls_vars_start = .;
+ ___wrs_rtp_tls_vars_start = .;}
+ *(.tls_vars${RELOCATING+ .tls_vars.*})
+ }${RELOCATING+
+ __wrs_rtp_tls_vars_size = SIZEOF(.tls_vars);
+ ___wrs_rtp_tls_vars_size = SIZEOF(.tls_vars);}"
+
+TEXT_START_ADDR="(DEFINED (__wrs_rtp_base) ? __wrs_rtp_base : 0)"
+ETEXT_NAME=etext_unrelocated
+OTHER_END_SYMBOLS="PROVIDE (${SYMPREFIX}_ehdr = ${TEXT_START_ADDR});"
+DATA_END_SYMBOLS=".edata : { PROVIDE (${SYMPREFIX}_edata = .); }"
+VXWORKS_BASE_EM_FILE=$EXTRA_EM_FILE
+EXTRA_EM_FILE=vxworks
+unset EMBEDDED
diff --git a/binutils-2.21/ld/emulparams/w65.sh b/binutils-2.21/ld/emulparams/w65.sh
new file mode 100644
index 0000000..6f02b23
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/w65.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=w65
+OUTPUT_FORMAT="coff-w65"
+TEXT_START_ADDR=0x1000
+TARGET_PAGE_SIZE=64
+ARCH=w65
diff --git a/binutils-2.21/ld/emulparams/z80.sh b/binutils-2.21/ld/emulparams/z80.sh
new file mode 100644
index 0000000..a4fdbd5
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/z80.sh
@@ -0,0 +1,6 @@
+SCRIPT_NAME=z80
+OUTPUT_FORMAT="coff-z80"
+OUTPUT_ARCH="z80"
+TEXT_START_ADDR=0x100
+EXTRA_EM_FILE=z80
+ARCH=z80
diff --git a/binutils-2.21/ld/emulparams/z8001.sh b/binutils-2.21/ld/emulparams/z8001.sh
new file mode 100644
index 0000000..63645c3
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/z8001.sh
@@ -0,0 +1,7 @@
+SCRIPT_NAME=z8000
+OUTPUT_FORMAT="coff-z8k"
+OUTPUT_ARCH="z8001"
+TEXT_START_ADDR=0x0
+TARGET_PAGE_SIZE=128
+ARCH=z8k
+BIG=1
diff --git a/binutils-2.21/ld/emulparams/z8002.sh b/binutils-2.21/ld/emulparams/z8002.sh
new file mode 100644
index 0000000..299b5f5
--- /dev/null
+++ b/binutils-2.21/ld/emulparams/z8002.sh
@@ -0,0 +1,6 @@
+SCRIPT_NAME=z8000
+OUTPUT_FORMAT="coff-z8k"
+OUTPUT_ARCH="z8002"
+TEXT_START_ADDR=0x0
+TARGET_PAGE_SIZE=128
+ARCH=z8002
diff --git a/binutils-2.21/ld/emultempl/README b/binutils-2.21/ld/emultempl/README
new file mode 100644
index 0000000..30ec0ab
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/README
@@ -0,0 +1,3 @@
+The files in this directory are sourced by genscripts.sh, after
+setting some variables to substitute in, to produce
+C source files that contain jump tables for each emulation.
diff --git a/binutils-2.21/ld/emultempl/aix.em b/binutils-2.21/ld/emultempl/aix.em
new file mode 100644
index 0000000..4dc36c3
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/aix.em
@@ -0,0 +1,1472 @@
+# This shell script emits a C file. -*- C -*-
+# It does some substitutions.
+if [ -z "$MACHINE" ]; then
+ OUTPUT_ARCH=${ARCH}
+else
+ OUTPUT_ARCH=${ARCH}:${MACHINE}
+fi
+fragment <<EOF
+/* This file is is generated by a shell script. DO NOT EDIT! */
+
+/* AIX emulation code for ${EMULATION_NAME}
+ Copyright 1991, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+ 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+ Free Software Foundation, Inc.
+ Written by Steve Chamberlain <sac@cygnus.com>
+ AIX support by Ian Lance Taylor <ian@cygnus.com>
+ AIX 64 bit support by Tom Rix <trix@redhat.com>
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#define TARGET_IS_${EMULATION_NAME}
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libiberty.h"
+#include "safe-ctype.h"
+#include "getopt.h"
+#include "obstack.h"
+#include "bfdlink.h"
+
+#include "ld.h"
+#include "ldmain.h"
+#include "ldmisc.h"
+#include "ldexp.h"
+#include "ldlang.h"
+#include "ldfile.h"
+#include "ldemul.h"
+#include "ldctor.h"
+#include <ldgram.h>
+
+#include "coff/internal.h"
+#include "coff/xcoff.h"
+#include "libcoff.h"
+#include "libxcoff.h"
+
+static void gld${EMULATION_NAME}_read_file (const char *, bfd_boolean);
+static void gld${EMULATION_NAME}_free (void *);
+static void gld${EMULATION_NAME}_find_relocs (lang_statement_union_type *);
+static void gld${EMULATION_NAME}_find_exp_assignment (etree_type *);
+
+
+/* The file alignment required for each section. */
+static unsigned long file_align;
+
+/* The maximum size the stack is permitted to grow. This is stored in
+ the a.out header. */
+static unsigned long maxstack;
+
+/* The maximum data size. This is stored in the a.out header. */
+static unsigned long maxdata;
+
+/* Whether to perform garbage collection. */
+static int gc = 1;
+
+/* The module type to use. */
+static unsigned short modtype = ('1' << 8) | 'L';
+
+/* Whether the .text section must be read-only (i.e., no relocs
+ permitted). */
+static int textro;
+
+/* A mask of XCOFF_EXPALL and XCOFF_EXPFULL flags, as set by their
+ associated -b and -bno options. */
+static unsigned int auto_export_flags;
+
+/* A mask of auto_export_flags bits that were explicitly set on the
+ command line. */
+static unsigned int explicit_auto_export_flags;
+
+/* Whether to implement Unix like linker semantics. */
+static int unix_ld;
+
+/* Structure used to hold import file list. */
+
+struct filelist
+{
+ struct filelist *next;
+ const char *name;
+};
+
+/* List of import files. */
+static struct filelist *import_files;
+
+/* List of export symbols read from the export files. */
+
+struct export_symbol_list
+{
+ struct export_symbol_list *next;
+ const char *name;
+};
+
+static struct export_symbol_list *export_symbols;
+
+/* Maintains the 32 or 64 bit mode state of import file */
+static unsigned int symbol_mode = 0x04;
+
+/* Which symbol modes are valid */
+static unsigned int symbol_mode_mask = 0x0d;
+
+/* Whether this is a 64 bit link */
+static int is_64bit = 0;
+
+/* Which syscalls from import file are valid */
+static unsigned int syscall_mask = 0x77;
+
+/* fake file for -binitfini support */
+static lang_input_statement_type *initfini_file;
+
+/* Whether to do run time linking
+ -brtl enables, -bnortl and -bnortllib disable. */
+static int rtld;
+
+/* Explicit command line library path, -blibpath */
+static char *command_line_blibpath = NULL;
+
+/* This routine is called before anything else is done. */
+
+static void
+gld${EMULATION_NAME}_before_parse (void)
+{
+ ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
+
+ config.dynamic_link = TRUE;
+ config.has_shared = TRUE;
+
+ /* The link_info.[init|fini]_functions are initialized in ld/lexsup.c.
+ Override them here so we can use the link_info.init_function as a
+ state flag that lets the backend know that -binitfini has been done. */
+
+ link_info.init_function = NULL;
+ link_info.fini_function = NULL;
+}
+
+/* Handle AIX specific options. */
+
+enum
+ {
+ OPTION_IGNORE = 300,
+ OPTION_AUTOIMP,
+ OPTION_ERNOTOK,
+ OPTION_EROK,
+ OPTION_EXPALL,
+ OPTION_EXPFULL,
+ OPTION_EXPORT,
+ OPTION_IMPORT,
+ OPTION_INITFINI,
+ OPTION_LOADMAP,
+ OPTION_MAXDATA,
+ OPTION_MAXSTACK,
+ OPTION_MODTYPE,
+ OPTION_NOAUTOIMP,
+ OPTION_NOEXPALL,
+ OPTION_NOEXPFULL,
+ OPTION_NOSTRCMPCT,
+ OPTION_PD,
+ OPTION_PT,
+ OPTION_STRCMPCT,
+ OPTION_UNIX,
+ OPTION_32,
+ OPTION_64,
+ OPTION_LIBPATH,
+ OPTION_NOLIBPATH,
+ };
+
+static void
+gld${EMULATION_NAME}_add_options
+ (int ns, char **shortopts, int nl, struct option **longopts,
+ int nrl ATTRIBUTE_UNUSED, struct option **really_longopts ATTRIBUTE_UNUSED)
+{
+ static const char xtra_short[] = "D:H:KT:z";
+ static const struct option xtra_long[] = {
+ /* -binitfini has special handling in the linker backend. The native linker
+ uses the arguemnts to generate a table of init and fini functions for
+ the executable. The important use for this option is to support aix 4.2+
+ c++ constructors and destructors. This is tied into gcc via collect2.c.
+
+ The function table is accessed by the runtime linker/loader by checking if
+ the first symbol in the loader symbol table is __rtinit. The gnu linker
+ generates this symbol and makes it the first loader symbol. */
+
+ {"basis", no_argument, NULL, OPTION_IGNORE},
+ {"bautoimp", no_argument, NULL, OPTION_AUTOIMP},
+ {"bcomprld", no_argument, NULL, OPTION_IGNORE},
+ {"bcrld", no_argument, NULL, OPTION_IGNORE},
+ {"bcror31", no_argument, NULL, OPTION_IGNORE},
+ {"bD", required_argument, NULL, OPTION_MAXDATA},
+ {"bE", required_argument, NULL, OPTION_EXPORT},
+ {"bernotok", no_argument, NULL, OPTION_ERNOTOK},
+ {"berok", no_argument, NULL, OPTION_EROK},
+ {"berrmsg", no_argument, NULL, OPTION_IGNORE},
+ {"bexpall", no_argument, NULL, OPTION_EXPALL},
+ {"bexpfull", no_argument, NULL, OPTION_EXPFULL},
+ {"bexport", required_argument, NULL, OPTION_EXPORT},
+ {"bf", no_argument, NULL, OPTION_ERNOTOK},
+ {"bgc", no_argument, &gc, 1},
+ {"bh", required_argument, NULL, OPTION_IGNORE},
+ {"bhalt", required_argument, NULL, OPTION_IGNORE},
+ {"bI", required_argument, NULL, OPTION_IMPORT},
+ {"bimport", required_argument, NULL, OPTION_IMPORT},
+ {"binitfini", required_argument, NULL, OPTION_INITFINI},
+ {"bl", required_argument, NULL, OPTION_LOADMAP},
+ {"bloadmap", required_argument, NULL, OPTION_LOADMAP},
+ {"bmaxdata", required_argument, NULL, OPTION_MAXDATA},
+ {"bmaxstack", required_argument, NULL, OPTION_MAXSTACK},
+ {"bM", required_argument, NULL, OPTION_MODTYPE},
+ {"bmodtype", required_argument, NULL, OPTION_MODTYPE},
+ {"bnoautoimp", no_argument, NULL, OPTION_NOAUTOIMP},
+ {"bnoexpall", no_argument, NULL, OPTION_NOEXPALL},
+ {"bnoexpfull", no_argument, NULL, OPTION_NOEXPFULL},
+ {"bnodelcsect", no_argument, NULL, OPTION_IGNORE},
+ {"bnoentry", no_argument, NULL, OPTION_IGNORE},
+ {"bnogc", no_argument, &gc, 0},
+ {"bnso", no_argument, NULL, OPTION_NOAUTOIMP},
+ {"bnostrcmpct", no_argument, NULL, OPTION_NOSTRCMPCT},
+ {"bnotextro", no_argument, &textro, 0},
+ {"bnro", no_argument, &textro, 0},
+ {"bpD", required_argument, NULL, OPTION_PD},
+ {"bpT", required_argument, NULL, OPTION_PT},
+ {"bro", no_argument, &textro, 1},
+ {"brtl", no_argument, &rtld, 1},
+ {"bnortl", no_argument, &rtld, 0},
+ {"bnortllib", no_argument, &rtld, 0},
+ {"bS", required_argument, NULL, OPTION_MAXSTACK},
+ {"bso", no_argument, NULL, OPTION_AUTOIMP},
+ {"bstrcmpct", no_argument, NULL, OPTION_STRCMPCT},
+ {"btextro", no_argument, &textro, 1},
+ {"b32", no_argument, NULL, OPTION_32},
+ {"b64", no_argument, NULL, OPTION_64},
+ {"static", no_argument, NULL, OPTION_NOAUTOIMP},
+ {"unix", no_argument, NULL, OPTION_UNIX},
+ {"blibpath", required_argument, NULL, OPTION_LIBPATH},
+ {"bnolibpath", required_argument, NULL, OPTION_NOLIBPATH},
+ {NULL, no_argument, NULL, 0}
+ };
+
+ /* Options supported by the AIX linker which we do not support: -f,
+ -S, -v, -Z, -bbindcmds, -bbinder, -bbindopts, -bcalls, -bcaps,
+ -bcror15, -bdebugopt, -bdbg, -bdelcsect, -bex?, -bfilelist, -bfl,
+ -bgcbypass, -bglink, -binsert, -bi, -bloadmap, -bl, -bmap, -bnl,
+ -bnobind, -bnocomprld, -bnocrld, -bnoerrmsg, -bnoglink,
+ -bnoloadmap, -bnl, -bnoobjreorder, -bnoquiet, -bnoreorder,
+ -bnotypchk, -bnox, -bquiet, -bR, -brename, -breorder, -btypchk,
+ -bx, -bX, -bxref. */
+
+ *shortopts = (char *) xrealloc (*shortopts, ns + sizeof (xtra_short));
+ memcpy (*shortopts + ns, &xtra_short, sizeof (xtra_short));
+ *longopts = xrealloc (*longopts,
+ nl * sizeof (struct option) + sizeof (xtra_long));
+ memcpy (*longopts + nl, &xtra_long, sizeof (xtra_long));
+}
+
+static bfd_boolean
+gld${EMULATION_NAME}_parse_args (int argc, char **argv)
+{
+ int indx;
+
+ /* If the current option starts with -b, change the first : to an =.
+ The AIX linker uses : to separate the option from the argument;
+ changing it to = lets us treat it as a getopt option. */
+ indx = optind;
+ if (indx == 0)
+ indx = 1;
+
+ if (indx < argc && CONST_STRNEQ (argv[indx], "-b"))
+ {
+ char *s;
+
+ for (s = argv[indx]; *s != '\0'; s++)
+ {
+ if (*s == ':')
+ {
+ *s = '=';
+ break;
+ }
+ }
+ }
+ return FALSE;
+}
+
+static bfd_boolean
+gld${EMULATION_NAME}_handle_option (int optc)
+{
+ bfd_signed_vma val;
+ const char *end;
+
+ switch (optc)
+ {
+ default:
+ return FALSE;
+
+ case 0:
+ /* Long option which just sets a flag. */
+ break;
+
+ case 'D':
+ val = bfd_scan_vma (optarg, &end, 0);
+ if (*end != '\0')
+ einfo ("%P: warning: ignoring invalid -D number %s\n", optarg);
+ else if (val != -1)
+ lang_section_start (".data", exp_intop (val), NULL);
+ break;
+
+ case 'H':
+ val = bfd_scan_vma (optarg, &end, 0);
+ if (*end != '\0' || (val & (val - 1)) != 0)
+ einfo ("%P: warning: ignoring invalid -H number %s\n", optarg);
+ else
+ file_align = val;
+ break;
+
+ case 'K':
+ case 'z':
+ /* FIXME: This should use the page size for the target system. */
+ file_align = 4096;
+ break;
+
+ case 'T':
+ /* On AIX this is the same as GNU ld -Ttext. When we see -T
+ number, we assume the AIX option is intended. Otherwise, we
+ assume the usual GNU ld -T option is intended. We can't just
+ ignore the AIX option, because gcc passes it to the linker. */
+ val = bfd_scan_vma (optarg, &end, 0);
+ if (*end != '\0')
+ return FALSE;
+ lang_section_start (".text", exp_intop (val), NULL);
+ break;
+
+ case OPTION_IGNORE:
+ break;
+
+ case OPTION_INITFINI:
+ {
+ /*
+ * The aix linker init fini has the format :
+ *
+ * -binitfini:[ Initial][:Termination][:Priority]
+ *
+ * it allows the Termination and Priority to be optional.
+ *
+ * Since we support only one init/fini pair, we ignore the Priority.
+ *
+ * Define the special symbol __rtinit.
+ *
+ * strtok does not correctly handle the case of -binitfini::fini: so
+ * do it by hand
+ */
+ char *t, *i, *f;
+
+ i = t = optarg;
+ while (*t && ':' != *t)
+ t++;
+ if (*t)
+ *t++ = 0;
+
+ if (0 != strlen (i))
+ link_info.init_function = i;
+
+ f = t;
+ while (*t && ':' != *t)
+ t++;
+ *t = 0;
+
+ if (0 != strlen (f))
+ link_info.fini_function = f;
+ }
+ break;
+
+ case OPTION_AUTOIMP:
+ link_info.static_link = FALSE;
+ break;
+
+ case OPTION_ERNOTOK:
+ link_info.unresolved_syms_in_objects = RM_GENERATE_ERROR;
+ link_info.unresolved_syms_in_shared_libs = RM_GENERATE_ERROR;
+ break;
+
+ case OPTION_EROK:
+ link_info.unresolved_syms_in_objects = RM_IGNORE;
+ link_info.unresolved_syms_in_shared_libs = RM_IGNORE;
+ break;
+
+ case OPTION_EXPALL:
+ auto_export_flags |= XCOFF_EXPALL;
+ explicit_auto_export_flags |= XCOFF_EXPALL;
+ break;
+
+ case OPTION_EXPFULL:
+ auto_export_flags |= XCOFF_EXPFULL;
+ explicit_auto_export_flags |= XCOFF_EXPFULL;
+ break;
+
+ case OPTION_EXPORT:
+ gld${EMULATION_NAME}_read_file (optarg, FALSE);
+ break;
+
+ case OPTION_IMPORT:
+ {
+ struct filelist *n;
+ struct filelist **flpp;
+
+ n = (struct filelist *) xmalloc (sizeof (struct filelist));
+ n->next = NULL;
+ n->name = optarg;
+ flpp = &import_files;
+ while (*flpp != NULL)
+ flpp = &(*flpp)->next;
+ *flpp = n;
+ }
+ break;
+
+ case OPTION_LOADMAP:
+ config.map_filename = optarg;
+ break;
+
+ case OPTION_MAXDATA:
+ val = bfd_scan_vma (optarg, &end, 0);
+ if (*end != '\0')
+ einfo ("%P: warning: ignoring invalid -bmaxdata number %s\n", optarg);
+ else
+ maxdata = val;
+ break;
+
+ case OPTION_MAXSTACK:
+ val = bfd_scan_vma (optarg, &end, 0);
+ if (*end != '\0')
+ einfo ("%P: warning: ignoring invalid -bmaxstack number %s\n",
+ optarg);
+ else
+ maxstack = val;
+ break;
+
+ case OPTION_MODTYPE:
+ if (*optarg == 'S')
+ {
+ link_info.shared = TRUE;
+ ++optarg;
+ }
+ if (*optarg == '\0' || optarg[1] == '\0')
+ einfo ("%P: warning: ignoring invalid module type %s\n", optarg);
+ else
+ modtype = (*optarg << 8) | optarg[1];
+ break;
+
+ case OPTION_NOAUTOIMP:
+ link_info.static_link = TRUE;
+ break;
+
+ case OPTION_NOEXPALL:
+ auto_export_flags &= ~XCOFF_EXPALL;
+ explicit_auto_export_flags |= XCOFF_EXPALL;
+ break;
+
+ case OPTION_NOEXPFULL:
+ auto_export_flags &= ~XCOFF_EXPFULL;
+ explicit_auto_export_flags |= XCOFF_EXPFULL;
+ break;
+
+ case OPTION_NOSTRCMPCT:
+ link_info.traditional_format = TRUE;
+ break;
+
+ case OPTION_PD:
+ /* This sets the page that the .data section is supposed to
+ start on. The offset within the page should still be the
+ offset within the file, so we need to build an appropriate
+ expression. */
+ val = bfd_scan_vma (optarg, &end, 0);
+ if (*end != '\0')
+ einfo ("%P: warning: ignoring invalid -pD number %s\n", optarg);
+ else
+ {
+ etree_type *t;
+
+ t = exp_binop ('+',
+ exp_intop (val),
+ exp_binop ('&',
+ exp_nameop (NAME, "."),
+ exp_intop (0xfff)));
+ t = exp_binop ('&',
+ exp_binop ('+', t, exp_intop (31)),
+ exp_intop (~(bfd_vma) 31));
+ lang_section_start (".data", t, NULL);
+ }
+ break;
+
+ case OPTION_PT:
+ /* This set the page that the .text section is supposed to start
+ on. The offset within the page should still be the offset
+ within the file. */
+ val = bfd_scan_vma (optarg, &end, 0);
+ if (*end != '\0')
+ einfo ("%P: warning: ignoring invalid -pT number %s\n", optarg);
+ else
+ {
+ etree_type *t;
+
+ t = exp_binop ('+',
+ exp_intop (val),
+ exp_nameop (SIZEOF_HEADERS, NULL));
+ t = exp_binop ('&',
+ exp_binop ('+', t, exp_intop (31)),
+ exp_intop (~(bfd_vma) 31));
+ lang_section_start (".text", t, NULL);
+ }
+ break;
+
+ case OPTION_STRCMPCT:
+ link_info.traditional_format = FALSE;
+ break;
+
+ case OPTION_UNIX:
+ unix_ld = TRUE;
+ break;
+
+ case OPTION_32:
+ is_64bit = 0;
+ syscall_mask = 0x77;
+ symbol_mode_mask = 0x0d;
+ break;
+
+ case OPTION_64:
+ is_64bit = 1;
+ syscall_mask = 0xcc;
+ symbol_mode_mask = 0x0e;
+ break;
+
+ case OPTION_LIBPATH:
+ command_line_blibpath = optarg;
+ break;
+
+ case OPTION_NOLIBPATH:
+ command_line_blibpath = NULL;
+ break;
+
+ }
+
+ return TRUE;
+}
+
+/* This is called when an input file can not be recognized as a BFD
+ object or an archive. If the file starts with #!, we must treat it
+ as an import file. This is for AIX compatibility. */
+
+static bfd_boolean
+gld${EMULATION_NAME}_unrecognized_file (lang_input_statement_type *entry)
+{
+ FILE *e;
+ bfd_boolean ret;
+
+ e = fopen (entry->filename, FOPEN_RT);
+ if (e == NULL)
+ return FALSE;
+
+ ret = FALSE;
+
+ if (getc (e) == '#' && getc (e) == '!')
+ {
+ struct filelist *n;
+ struct filelist **flpp;
+
+ n = (struct filelist *) xmalloc (sizeof (struct filelist));
+ n->next = NULL;
+ n->name = entry->filename;
+ flpp = &import_files;
+ while (*flpp != NULL)
+ flpp = &(*flpp)->next;
+ *flpp = n;
+
+ ret = TRUE;
+ entry->loaded = TRUE;
+ }
+
+ fclose (e);
+
+ return ret;
+}
+
+/* This is called after the input files have been opened. */
+
+static void
+gld${EMULATION_NAME}_after_open (void)
+{
+ bfd_boolean r;
+ struct set_info *p;
+
+ /* Call ldctor_build_sets, after pretending that this is a
+ relocatable link. We do this because AIX requires relocation
+ entries for all references to symbols, even in a final
+ executable. Of course, we only want to do this if we are
+ producing an XCOFF output file. */
+ r = link_info.relocatable;
+ if (strstr (bfd_get_target (link_info.output_bfd), "xcoff") != NULL)
+ link_info.relocatable = TRUE;
+ ldctor_build_sets ();
+ link_info.relocatable = r;
+
+ /* For each set, record the size, so that the XCOFF backend can
+ output the correct csect length. */
+ for (p = sets; p != (struct set_info *) NULL; p = p->next)
+ {
+ bfd_size_type size;
+
+ /* If the symbol is defined, we may have been invoked from
+ collect, and the sets may already have been built, so we do
+ not do anything. */
+ if (p->h->type == bfd_link_hash_defined
+ || p->h->type == bfd_link_hash_defweak)
+ continue;
+
+ if (p->reloc != BFD_RELOC_CTOR)
+ {
+ /* Handle this if we need to. */
+ abort ();
+ }
+
+ size = (p->count + 2) * 4;
+ if (!bfd_xcoff_link_record_set (link_info.output_bfd, &link_info,
+ p->h, size))
+ einfo ("%F%P: bfd_xcoff_link_record_set failed: %E\n");
+ }
+}
+
+/* This is called after the sections have been attached to output
+ sections, but before any sizes or addresses have been set. */
+
+static void
+gld${EMULATION_NAME}_before_allocation (void)
+{
+ struct filelist *fl;
+ struct export_symbol_list *el;
+ char *libpath;
+ asection *special_sections[XCOFF_NUMBER_OF_SPECIAL_SECTIONS];
+ static const char *const must_keep_sections[] = {
+ ".text",
+ ".data",
+ ".bss"
+ };
+ unsigned int i, flags;
+
+ /* Handle the import and export files, if any. */
+ for (fl = import_files; fl != NULL; fl = fl->next)
+ gld${EMULATION_NAME}_read_file (fl->name, TRUE);
+ for (el = export_symbols; el != NULL; el = el->next)
+ {
+ struct bfd_link_hash_entry *h;
+
+ h = bfd_link_hash_lookup (link_info.hash, el->name, FALSE, FALSE, FALSE);
+ if (h == NULL)
+ einfo ("%P%F: bfd_link_hash_lookup of export symbol failed: %E\n");
+ if (!bfd_xcoff_export_symbol (link_info.output_bfd, &link_info, h))
+ einfo ("%P%F: bfd_xcoff_export_symbol failed: %E\n");
+ }
+
+ /* Track down all relocations called for by the linker script (these
+ are typically constructor/destructor entries created by
+ CONSTRUCTORS) and let the backend know it will need to create
+ .loader relocs for them. */
+ lang_for_each_statement (gld${EMULATION_NAME}_find_relocs);
+
+ /* Precedence of LIBPATH
+ -blibpath: native support always first
+ -rpath: gnu extension
+ -L build from command line -L's */
+ if (command_line_blibpath != NULL)
+ libpath = command_line_blibpath;
+ else if (command_line.rpath != NULL)
+ libpath = command_line.rpath;
+ else if (search_head == NULL)
+ libpath = (char *) "";
+ else
+ {
+ size_t len;
+ search_dirs_type *search;
+
+ /* PR ld/4023: Strip sysroot prefix from any paths
+ being inserted into the output binary's DT_RPATH. */
+ if (ld_sysroot != NULL
+ && * ld_sysroot != 0)
+ {
+ const char * name = search_head->name;
+ size_t ld_sysroot_len = strlen (ld_sysroot);
+
+ if (strncmp (name, ld_sysroot, ld_sysroot_len) == 0)
+ name += ld_sysroot_len;
+
+ len = strlen (name);
+ libpath = xmalloc (len + 1);
+ strcpy (libpath, name);
+
+ for (search = search_head->next; search != NULL; search = search->next)
+ {
+ size_t nlen;
+
+ name = search->name;
+ if (strncmp (name, ld_sysroot, ld_sysroot_len) == 0)
+ name += ld_sysroot_len;
+
+ nlen = strlen (name);
+ libpath = xrealloc (libpath, len + nlen + 2);
+ libpath[len] = ':';
+ strcpy (libpath + len + 1, name);
+ len += nlen + 1;
+ }
+ }
+ else
+ {
+ len = strlen (search_head->name);
+ libpath = xmalloc (len + 1);
+ strcpy (libpath, search_head->name);
+
+ for (search = search_head->next; search != NULL; search = search->next)
+ {
+ size_t nlen;
+
+ nlen = strlen (search->name);
+ libpath = xrealloc (libpath, len + nlen + 2);
+ libpath[len] = ':';
+ strcpy (libpath + len + 1, search->name);
+ len += nlen + 1;
+ }
+ }
+ }
+
+ /* Default to -bexpfull for SVR4-like semantics. */
+ flags = (unix_ld ? XCOFF_EXPFULL : 0);
+ flags &= ~explicit_auto_export_flags;
+ flags |= auto_export_flags;
+
+ /* Let the XCOFF backend set up the .loader section. */
+ if (!bfd_xcoff_size_dynamic_sections
+ (link_info.output_bfd, &link_info, libpath, entry_symbol.name, file_align,
+ maxstack, maxdata, gc && !unix_ld ? TRUE : FALSE,
+ modtype, textro ? TRUE : FALSE, flags, special_sections,
+ rtld ? TRUE : FALSE))
+ einfo ("%P%F: failed to set dynamic section sizes: %E\n");
+
+ /* Look through the special sections, and put them in the right
+ place in the link ordering. This is especially magic. */
+ for (i = 0; i < XCOFF_NUMBER_OF_SPECIAL_SECTIONS; i++)
+ {
+ asection *sec;
+ lang_output_section_statement_type *os;
+ lang_statement_union_type **pls;
+ lang_input_section_type *is;
+ const char *oname;
+ bfd_boolean start;
+
+ sec = special_sections[i];
+ if (sec == NULL)
+ continue;
+
+ /* Remove this section from the list of the output section.
+ This assumes we know what the script looks like. */
+ is = NULL;
+ os = lang_output_section_find (sec->output_section->name);
+ if (os == NULL)
+ einfo ("%P%F: can't find output section %s\n",
+ sec->output_section->name);
+
+ for (pls = &os->children.head; *pls != NULL; pls = &(*pls)->header.next)
+ {
+ if ((*pls)->header.type == lang_input_section_enum
+ && (*pls)->input_section.section == sec)
+ {
+ is = (lang_input_section_type *) * pls;
+ *pls = (*pls)->header.next;
+ break;
+ }
+
+ if ((*pls)->header.type == lang_wild_statement_enum)
+ {
+ lang_statement_union_type **pwls;
+
+ for (pwls = &(*pls)->wild_statement.children.head;
+ *pwls != NULL; pwls = &(*pwls)->header.next)
+ {
+
+ if ((*pwls)->header.type == lang_input_section_enum
+ && (*pwls)->input_section.section == sec)
+ {
+ is = (lang_input_section_type *) * pwls;
+ *pwls = (*pwls)->header.next;
+ break;
+ }
+ }
+
+ if (is != NULL)
+ break;
+ }
+ }
+
+ if (is == NULL)
+ {
+ einfo ("%P%F: can't find %s in output section\n",
+ bfd_get_section_name (sec->owner, sec));
+ }
+
+ /* Now figure out where the section should go. */
+ switch (i)
+ {
+
+ default: /* to avoid warnings */
+ case XCOFF_SPECIAL_SECTION_TEXT:
+ /* _text */
+ oname = ".text";
+ start = TRUE;
+ break;
+
+ case XCOFF_SPECIAL_SECTION_ETEXT:
+ /* _etext */
+ oname = ".text";
+ start = FALSE;
+ break;
+
+ case XCOFF_SPECIAL_SECTION_DATA:
+ /* _data */
+ oname = ".data";
+ start = TRUE;
+ break;
+
+ case XCOFF_SPECIAL_SECTION_EDATA:
+ /* _edata */
+ oname = ".data";
+ start = FALSE;
+ break;
+
+ case XCOFF_SPECIAL_SECTION_END:
+ case XCOFF_SPECIAL_SECTION_END2:
+ /* _end and end */
+ oname = ".bss";
+ start = FALSE;
+ break;
+ }
+
+ os = lang_output_section_find (oname);
+
+ if (start)
+ {
+ is->header.next = os->children.head;
+ os->children.head = (lang_statement_union_type *) is;
+ }
+ else
+ {
+ is->header.next = NULL;
+ lang_statement_append (&os->children,
+ (lang_statement_union_type *) is,
+ &is->header.next);
+ }
+ }
+
+ /* Executables and shared objects must always have .text, .data
+ and .bss output sections, so that the header can refer to them.
+ The kernel refuses to load objects that have missing sections. */
+ if (!link_info.relocatable)
+ for (i = 0; i < ARRAY_SIZE (must_keep_sections); i++)
+ {
+ asection *sec;
+
+ sec = bfd_get_section_by_name (link_info.output_bfd,
+ must_keep_sections[i]);
+ if (sec == NULL)
+ einfo ("%P: can't find required output section %s\n", must_keep_sections[i]);
+ else
+ sec->flags |= SEC_KEEP;
+ }
+
+ before_allocation_default ();
+}
+
+static char *
+gld${EMULATION_NAME}_choose_target (int argc, char **argv)
+{
+ int i, j, jmax;
+ static char *from_outside;
+ static char *from_inside;
+ static char *argv_to_target[][2] = {
+ {NULL, "${OUTPUT_FORMAT}"},
+ {"-b32", "${OUTPUT_FORMAT_32BIT}"},
+ {"-b64", "${OUTPUT_FORMAT_64BIT}"},
+ };
+
+ jmax = 3;
+
+ from_outside = getenv (TARGET_ENVIRON);
+ if (from_outside != (char *) NULL)
+ return from_outside;
+
+ /* Set to default. */
+ from_inside = argv_to_target[0][1];
+ for (i = 1; i < argc; i++)
+ {
+ for (j = 1; j < jmax; j++)
+ {
+ if (0 == strcmp (argv[i], argv_to_target[j][0]))
+ from_inside = argv_to_target[j][1];
+ }
+ }
+
+ return from_inside;
+}
+
+/* Returns
+ 1 : state changed
+ 0 : no change */
+static int
+change_symbol_mode (char *input)
+{
+ char *symbol_mode_string[] = {
+ "# 32", /* 0x01 */
+ "# 64", /* 0x02 */
+ "# no32", /* 0x04 */
+ "# no64", /* 0x08 */
+ NULL,
+ };
+
+ unsigned int bit;
+ char *string;
+
+ for (bit = 0;; bit++)
+ {
+ string = symbol_mode_string[bit];
+ if (string == NULL)
+ return 0;
+
+ if (0 == strcmp (input, string))
+ {
+ symbol_mode = (1 << bit);
+ return 1;
+ }
+ }
+ /* should not be here */
+ return 0;
+}
+
+/* Returns
+ 1 : yes
+ 0 : ignore
+ -1 : error, try something else */
+static int
+is_syscall (char *input, unsigned int *flag)
+{
+ unsigned int bit;
+ char *string;
+
+ struct sc {
+ char *syscall_string;
+ unsigned int flag;
+ } s [] = {
+ { "svc" /* 0x01 */, XCOFF_SYSCALL32 },
+ { "svc32" /* 0x02 */, XCOFF_SYSCALL32 },
+ { "svc3264" /* 0x04 */, XCOFF_SYSCALL32 | XCOFF_SYSCALL64 },
+ { "svc64" /* 0x08 */, XCOFF_SYSCALL64 },
+ { "syscall" /* 0x10 */, XCOFF_SYSCALL32 },
+ { "syscall32" /* 0x20 */, XCOFF_SYSCALL32 },
+ { "syscall3264" /* 0x40 */, XCOFF_SYSCALL32 | XCOFF_SYSCALL64 },
+ { "syscall64" /* 0x80 */, XCOFF_SYSCALL64 },
+ { NULL, 0 },
+ };
+
+ *flag = 0;
+
+ for (bit = 0;; bit++)
+ {
+ string = s[bit].syscall_string;
+ if (string == NULL)
+ return -1;
+
+ if (0 == strcmp (input, string))
+ {
+ if (1 << bit & syscall_mask)
+ {
+ *flag = s[bit].flag;
+ return 1;
+ }
+ else
+ {
+ return 0;
+ }
+ }
+ }
+ /* should not be here */
+ return -1;
+}
+
+/* Read an import or export file. For an import file, this is called
+ by the before_allocation emulation routine. For an export file,
+ this is called by the handle_option emulation routine. */
+
+static void
+gld${EMULATION_NAME}_read_file (const char *filename, bfd_boolean import)
+{
+ struct obstack *o;
+ FILE *f;
+ int lineno;
+ int c;
+ bfd_boolean keep;
+ const char *imppath;
+ const char *impfile;
+ const char *impmember;
+
+ o = (struct obstack *) xmalloc (sizeof (struct obstack));
+ obstack_specify_allocation (o, 0, 0, xmalloc, gld${EMULATION_NAME}_free);
+
+ f = fopen (filename, FOPEN_RT);
+ if (f == NULL)
+ {
+ bfd_set_error (bfd_error_system_call);
+ einfo ("%F%s: %E\n", filename);
+ }
+
+ keep = FALSE;
+
+ imppath = NULL;
+ impfile = NULL;
+ impmember = NULL;
+
+ lineno = 0;
+
+ /* Default to 32 and 64 bit mode
+ symbols at top of /lib/syscalls.exp do not have a mode modifier and they
+ are not repeated, assume 64 bit routines also want to use them.
+ See the routine change_symbol_mode for more information. */
+
+ symbol_mode = 0x04;
+
+ while ((c = getc (f)) != EOF)
+ {
+ char *s;
+ char *symname;
+ unsigned int syscall_flag = 0;
+ bfd_vma address;
+ struct bfd_link_hash_entry *h;
+
+ if (c != '\n')
+ {
+ obstack_1grow (o, c);
+ continue;
+ }
+
+ obstack_1grow (o, '\0');
+ ++lineno;
+
+ s = (char *) obstack_base (o);
+ while (ISSPACE (*s))
+ ++s;
+ if (*s == '\0'
+ || *s == '*'
+ || change_symbol_mode (s)
+ || (*s == '#' && s[1] == ' ')
+ || (!import && *s == '#' && s[1] == '!'))
+ {
+ obstack_free (o, obstack_base (o));
+ continue;
+ }
+
+ if (*s == '#' && s[1] == '!')
+ {
+ s += 2;
+ while (ISSPACE (*s))
+ ++s;
+ if (*s == '\0')
+ {
+ imppath = NULL;
+ impfile = NULL;
+ impmember = NULL;
+ obstack_free (o, obstack_base (o));
+ }
+ else if (*s == '(')
+ einfo ("%F%s%d: #! ([member]) is not supported in import files\n",
+ filename, lineno);
+ else
+ {
+ char cs;
+ char *start;
+
+ (void) obstack_finish (o);
+ keep = TRUE;
+ start = s;
+ while (!ISSPACE (*s) && *s != '(' && *s != '\0')
+ ++s;
+ cs = *s;
+ *s = '\0';
+ if (!bfd_xcoff_split_import_path (link_info.output_bfd,
+ start, &imppath, &impfile))
+ einfo ("%F%P: Could not parse import path: %E\n");
+ while (ISSPACE (cs))
+ {
+ ++s;
+ cs = *s;
+ }
+ if (cs != '(')
+ {
+ impmember = "";
+ if (cs != '\0')
+ einfo ("%s:%d: warning: syntax error in import file\n",
+ filename, lineno);
+ }
+ else
+ {
+ ++s;
+ impmember = s;
+ while (*s != ')' && *s != '\0')
+ ++s;
+ if (*s == ')')
+ *s = '\0';
+ else
+ einfo ("%s:%d: warning: syntax error in import file\n",
+ filename, lineno);
+ }
+ }
+
+ continue;
+ }
+
+ if (symbol_mode & symbol_mode_mask)
+ {
+ /* This is a symbol to be imported or exported. */
+ symname = s;
+ syscall_flag = 0;
+ address = (bfd_vma) -1;
+
+ while (!ISSPACE (*s) && *s != '\0')
+ ++s;
+ if (*s != '\0')
+ {
+ char *se;
+
+ *s++ = '\0';
+
+ while (ISSPACE (*s))
+ ++s;
+
+ se = s;
+ while (!ISSPACE (*se) && *se != '\0')
+ ++se;
+ if (*se != '\0')
+ {
+ *se++ = '\0';
+ while (ISSPACE (*se))
+ ++se;
+ if (*se != '\0')
+ einfo ("%s%d: warning: syntax error in import/export file\n",
+ filename, lineno);
+ }
+
+ if (s != se)
+ {
+ int status;
+ const char *end;
+
+ status = is_syscall (s, &syscall_flag);
+
+ if (0 > status)
+ {
+ /* not a system call, check for address */
+ address = bfd_scan_vma (s, &end, 0);
+ if (*end != '\0')
+ {
+ einfo ("%s:%d: warning: syntax error in import/export file\n",
+ filename, lineno);
+
+ }
+ }
+ }
+ }
+
+ if (!import)
+ {
+ struct export_symbol_list *n;
+
+ ldlang_add_undef (symname, TRUE);
+ n = ((struct export_symbol_list *)
+ xmalloc (sizeof (struct export_symbol_list)));
+ n->next = export_symbols;
+ n->name = xstrdup (symname);
+ export_symbols = n;
+ }
+ else
+ {
+ h = bfd_link_hash_lookup (link_info.hash, symname, FALSE, FALSE,
+ TRUE);
+ if (h == NULL || h->type == bfd_link_hash_new)
+ {
+ /* We can just ignore attempts to import an unreferenced
+ symbol. */
+ }
+ else
+ {
+ if (!bfd_xcoff_import_symbol (link_info.output_bfd,
+ &link_info, h,
+ address, imppath, impfile,
+ impmember, syscall_flag))
+ einfo ("%X%s:%d: failed to import symbol %s: %E\n",
+ filename, lineno, symname);
+ }
+ }
+ }
+ obstack_free (o, obstack_base (o));
+ }
+
+ if (obstack_object_size (o) > 0)
+ {
+ einfo ("%s:%d: warning: ignoring unterminated last line\n",
+ filename, lineno);
+ obstack_free (o, obstack_base (o));
+ }
+
+ if (!keep)
+ {
+ obstack_free (o, NULL);
+ free (o);
+ }
+}
+
+/* This routine saves us from worrying about declaring free. */
+
+static void
+gld${EMULATION_NAME}_free (void *p)
+{
+ free (p);
+}
+
+/* This is called by the before_allocation routine via
+ lang_for_each_statement. It looks for relocations and assignments
+ to symbols. */
+
+static void
+gld${EMULATION_NAME}_find_relocs (lang_statement_union_type *s)
+{
+ if (s->header.type == lang_reloc_statement_enum)
+ {
+ lang_reloc_statement_type *rs;
+
+ rs = &s->reloc_statement;
+ if (rs->name == NULL)
+ einfo ("%F%P: only relocations against symbols are permitted\n");
+ if (!bfd_xcoff_link_count_reloc (link_info.output_bfd, &link_info,
+ rs->name))
+ einfo ("%F%P: bfd_xcoff_link_count_reloc failed: %E\n");
+ }
+
+ if (s->header.type == lang_assignment_statement_enum)
+ gld${EMULATION_NAME}_find_exp_assignment (s->assignment_statement.exp);
+}
+
+/* Look through an expression for an assignment statement. */
+
+static void
+gld${EMULATION_NAME}_find_exp_assignment (etree_type *exp)
+{
+ struct bfd_link_hash_entry *h;
+
+ switch (exp->type.node_class)
+ {
+ case etree_provide:
+ h = bfd_link_hash_lookup (link_info.hash, exp->assign.dst,
+ FALSE, FALSE, FALSE);
+ if (h == NULL)
+ break;
+ /* Fall through. */
+ case etree_assign:
+ if (strcmp (exp->assign.dst, ".") != 0)
+ {
+ if (!bfd_xcoff_record_link_assignment (link_info.output_bfd,
+ &link_info,
+ exp->assign.dst))
+ einfo ("%P%F: failed to record assignment to %s: %E\n",
+ exp->assign.dst);
+ }
+ gld${EMULATION_NAME}_find_exp_assignment (exp->assign.src);
+ break;
+
+ case etree_binary:
+ gld${EMULATION_NAME}_find_exp_assignment (exp->binary.lhs);
+ gld${EMULATION_NAME}_find_exp_assignment (exp->binary.rhs);
+ break;
+
+ case etree_trinary:
+ gld${EMULATION_NAME}_find_exp_assignment (exp->trinary.cond);
+ gld${EMULATION_NAME}_find_exp_assignment (exp->trinary.lhs);
+ gld${EMULATION_NAME}_find_exp_assignment (exp->trinary.rhs);
+ break;
+
+ case etree_unary:
+ gld${EMULATION_NAME}_find_exp_assignment (exp->unary.child);
+ break;
+
+ default:
+ break;
+ }
+}
+
+static char *
+gld${EMULATION_NAME}_get_script (int *isfile)
+EOF
+
+if test -n "$COMPILE_IN"
+then
+# Scripts compiled in.
+
+# sed commands to quote an ld script as a C string.
+sc="-f ${srcdir}/emultempl/ostring.sed"
+
+fragment <<EOF
+{
+ *isfile = 0;
+
+ if (link_info.relocatable && config.build_constructors)
+ return
+EOF
+sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c
+echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c
+echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c
+echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c
+echo ' ; else return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
+echo '; }' >> e${EMULATION_NAME}.c
+
+else
+# Scripts read from the filesystem.
+
+fragment <<EOF
+{
+ *isfile = 1;
+
+ if (link_info.relocatable && config.build_constructors)
+ return "ldscripts/${EMULATION_NAME}.xu";
+ else if (link_info.relocatable)
+ return "ldscripts/${EMULATION_NAME}.xr";
+ else if (!config.text_read_only)
+ return "ldscripts/${EMULATION_NAME}.xbn";
+ else if (!config.magic_demand_paged)
+ return "ldscripts/${EMULATION_NAME}.xn";
+ else
+ return "ldscripts/${EMULATION_NAME}.x";
+}
+EOF
+
+fi
+
+fragment <<EOF
+
+static void
+gld${EMULATION_NAME}_create_output_section_statements (void)
+{
+ /* __rtinit */
+ if ((bfd_get_flavour (link_info.output_bfd) == bfd_target_xcoff_flavour)
+ && (link_info.init_function != NULL
+ || link_info.fini_function != NULL
+ || rtld))
+ {
+ initfini_file = lang_add_input_file ("initfini",
+ lang_input_file_is_file_enum,
+ NULL);
+
+ initfini_file->the_bfd = bfd_create ("initfini", link_info.output_bfd);
+ if (initfini_file->the_bfd == NULL
+ || ! bfd_set_arch_mach (initfini_file->the_bfd,
+ bfd_get_arch (link_info.output_bfd),
+ bfd_get_mach (link_info.output_bfd)))
+ {
+ einfo ("%X%P: can not create BFD %E\n");
+ return;
+ }
+
+ /* Call backend to fill in the rest */
+ if (! bfd_xcoff_link_generate_rtinit (initfini_file->the_bfd,
+ link_info.init_function,
+ link_info.fini_function,
+ rtld))
+ {
+ einfo ("%X%P: can not create BFD %E\n");
+ return;
+ }
+
+ /* __rtld defined in /lib/librtl.a */
+ if (rtld)
+ lang_add_input_file ("rtl", lang_input_file_is_l_enum, NULL);
+ }
+}
+
+static void
+gld${EMULATION_NAME}_set_output_arch (void)
+{
+ bfd_set_arch_mach (link_info.output_bfd,
+ bfd_xcoff_architecture (link_info.output_bfd),
+ bfd_xcoff_machine (link_info.output_bfd));
+
+ ldfile_output_architecture = bfd_get_arch (link_info.output_bfd);
+ ldfile_output_machine = bfd_get_mach (link_info.output_bfd);
+ ldfile_output_machine_name = bfd_printable_name (link_info.output_bfd);
+}
+
+static bfd_boolean
+gld${EMULATION_NAME}_open_dynamic_archive (const char *arch,
+ search_dirs_type *search,
+ lang_input_statement_type *entry)
+{
+ char *path;
+
+ if (!entry->is_archive)
+ return FALSE;
+
+ path = concat (search->name, "/lib", entry->filename, arch, ".a", NULL);
+ if (!ldfile_try_open_bfd (path, entry))
+ {
+ free (path);
+ return FALSE;
+ }
+ /* Don't include the searched directory in the import path. */
+ bfd_xcoff_set_archive_import_path (&link_info, entry->the_bfd,
+ path + strlen (search->name) + 1);
+ entry->filename = path;
+ return TRUE;
+}
+
+struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = {
+ gld${EMULATION_NAME}_before_parse,
+ syslib_default,
+ hll_default,
+ after_parse_default,
+ gld${EMULATION_NAME}_after_open,
+ after_allocation_default,
+ gld${EMULATION_NAME}_set_output_arch,
+ gld${EMULATION_NAME}_choose_target,
+ gld${EMULATION_NAME}_before_allocation,
+ gld${EMULATION_NAME}_get_script,
+ "${EMULATION_NAME}",
+ "${OUTPUT_FORMAT}",
+ finish_default,
+ gld${EMULATION_NAME}_create_output_section_statements,
+ gld${EMULATION_NAME}_open_dynamic_archive,
+ 0, /* place_orphan */
+ 0, /* set_symbols */
+ gld${EMULATION_NAME}_parse_args,
+ gld${EMULATION_NAME}_add_options,
+ gld${EMULATION_NAME}_handle_option,
+ gld${EMULATION_NAME}_unrecognized_file,
+ NULL, /* list_options */
+ NULL, /* recognized_file */
+ NULL, /* find potential_libraries */
+ NULL /* new_vers_pattern */
+};
+EOF
diff --git a/binutils-2.21/ld/emultempl/alphaelf.em b/binutils-2.21/ld/emultempl/alphaelf.em
new file mode 100644
index 0000000..21064ad
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/alphaelf.em
@@ -0,0 +1,148 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2003, 2004, 2005, 2007, 2008, 2009
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em, and defines extra alpha
+# specific routines.
+#
+fragment <<EOF
+
+#include "elf/internal.h"
+#include "elf/alpha.h"
+#include "elf-bfd.h"
+
+static bfd_boolean limit_32bit;
+
+extern bfd_boolean elf64_alpha_use_secureplt;
+
+
+/* Set the start address as in the Tru64 ld. */
+#define ALPHA_TEXT_START_32BIT 0x12000000
+
+static void
+alpha_after_open (void)
+{
+ if (bfd_get_flavour (link_info.output_bfd) == bfd_target_elf_flavour
+ && elf_object_id (link_info.output_bfd) == ALPHA_ELF_DATA)
+ {
+ unsigned int num_plt;
+ lang_output_section_statement_type *os;
+ lang_output_section_statement_type *plt_os[2];
+
+ num_plt = 0;
+ for (os = &lang_output_section_statement.head->output_section_statement;
+ os != NULL;
+ os = os->next)
+ {
+ if (os->constraint == SPECIAL && strcmp (os->name, ".plt") == 0)
+ {
+ if (num_plt < 2)
+ plt_os[num_plt] = os;
+ ++num_plt;
+ }
+ }
+
+ if (num_plt == 2)
+ {
+ plt_os[0]->constraint = elf64_alpha_use_secureplt ? 0 : -1;
+ plt_os[1]->constraint = elf64_alpha_use_secureplt ? -1 : 0;
+ }
+ }
+
+ gld${EMULATION_NAME}_after_open ();
+}
+
+static void
+alpha_after_parse (void)
+{
+ if (limit_32bit && !link_info.shared && !link_info.relocatable)
+ lang_section_start (".interp",
+ exp_binop ('+',
+ exp_intop (ALPHA_TEXT_START_32BIT),
+ exp_nameop (SIZEOF_HEADERS, NULL)),
+ NULL);
+
+ after_parse_default ();
+}
+
+static void
+alpha_before_allocation (void)
+{
+ /* Call main function; we're just extending it. */
+ gld${EMULATION_NAME}_before_allocation ();
+
+ /* Add -relax if -O, not -r, and not explicitly disabled. */
+ if (link_info.optimize && !link_info.relocatable && ! RELAXATION_DISABLED_BY_USER)
+ ENABLE_RELAXATION;
+}
+
+static void
+alpha_finish (void)
+{
+ if (limit_32bit)
+ elf_elfheader (link_info.output_bfd)->e_flags |= EF_ALPHA_32BIT;
+
+ finish_default ();
+}
+EOF
+
+# Define some shell vars to insert bits of code into the standard elf
+# parse_args and list_options functions.
+#
+PARSE_AND_LIST_PROLOGUE='
+#define OPTION_TASO 300
+#define OPTION_SECUREPLT (OPTION_TASO + 1)
+#define OPTION_NO_SECUREPLT (OPTION_SECUREPLT + 1)
+'
+
+PARSE_AND_LIST_LONGOPTS='
+ { "taso", no_argument, NULL, OPTION_TASO },
+ { "secureplt", no_argument, NULL, OPTION_SECUREPLT },
+ { "no-secureplt", no_argument, NULL, OPTION_NO_SECUREPLT },
+'
+
+PARSE_AND_LIST_OPTIONS='
+ fprintf (file, _("\
+ --taso Load executable in the lower 31-bit addressable\n\
+ virtual address range.\n\
+ --secureplt Force PLT in text segment.\n\
+ --no-secureplt Force PLT in data segment.\n\
+"));
+'
+
+PARSE_AND_LIST_ARGS_CASES='
+ case OPTION_TASO:
+ limit_32bit = 1;
+ break;
+ case OPTION_SECUREPLT:
+ elf64_alpha_use_secureplt = TRUE;
+ break;
+ case OPTION_NO_SECUREPLT:
+ elf64_alpha_use_secureplt = FALSE;
+ break;
+'
+
+# Put these extra alpha routines in ld_${EMULATION_NAME}_emulation
+#
+LDEMUL_AFTER_OPEN=alpha_after_open
+LDEMUL_AFTER_PARSE=alpha_after_parse
+LDEMUL_BEFORE_ALLOCATION=alpha_before_allocation
+LDEMUL_FINISH=alpha_finish
diff --git a/binutils-2.21/ld/emultempl/armcoff.em b/binutils-2.21/ld/emultempl/armcoff.em
new file mode 100644
index 0000000..b3cdde9
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/armcoff.em
@@ -0,0 +1,283 @@
+# This shell script emits a C file. -*- C -*-
+# It does some substitutions.
+fragment <<EOF
+/* This file is is generated by a shell script. DO NOT EDIT! */
+
+/* emulate the original gld for the given ${EMULATION_NAME}
+ Copyright 1991, 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+ 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+ Written by Steve Chamberlain steve@cygnus.com
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#define TARGET_IS_${EMULATION_NAME}
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+#include "getopt.h"
+
+#include "ld.h"
+#include "ldmain.h"
+#include "ldmisc.h"
+
+#include "ldexp.h"
+#include "ldlang.h"
+#include "ldfile.h"
+#include "ldemul.h"
+
+/* If TRUE, then interworking stubs which support calls to old,
+ non-interworking aware ARM code should be generated. */
+
+static int support_old_code = 0;
+static char * thumb_entry_symbol = NULL;
+
+#define OPTION_SUPPORT_OLD_CODE 300
+#define OPTION_THUMB_ENTRY 301
+
+static void
+gld${EMULATION_NAME}_add_options
+ (int ns ATTRIBUTE_UNUSED, char **shortopts ATTRIBUTE_UNUSED, int nl,
+ struct option **longopts, int nrl ATTRIBUTE_UNUSED,
+ struct option **really_longopts ATTRIBUTE_UNUSED)
+{
+ static const struct option xtra_long[] = {
+ {"support-old-code", no_argument, NULL, OPTION_SUPPORT_OLD_CODE},
+ {"thumb-entry", required_argument, NULL, OPTION_THUMB_ENTRY},
+ {NULL, no_argument, NULL, 0}
+ };
+
+ *longopts = xrealloc (*longopts,
+ nl * sizeof (struct option) + sizeof (xtra_long));
+ memcpy (*longopts + nl, &xtra_long, sizeof (xtra_long));
+}
+
+static void
+gld${EMULATION_NAME}_list_options (FILE *file)
+{
+ fprintf (file, _(" --support-old-code Support interworking with old code\n"));
+ fprintf (file, _(" --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"));
+}
+
+static bfd_boolean
+gld${EMULATION_NAME}_handle_option (int optc)
+{
+ switch (optc)
+ {
+ default:
+ return FALSE;
+
+ case OPTION_SUPPORT_OLD_CODE:
+ support_old_code = 1;
+ break;
+
+ case OPTION_THUMB_ENTRY:
+ thumb_entry_symbol = optarg;
+ break;
+ }
+
+ return TRUE;
+}
+
+static void
+gld${EMULATION_NAME}_before_parse (void)
+{
+#ifndef TARGET_ /* I.e., if not generic. */
+ ldfile_set_output_arch ("`echo ${ARCH}`", bfd_arch_unknown);
+#endif /* not TARGET_ */
+}
+
+/* This is called after the sections have been attached to output
+ sections, but before any sizes or addresses have been set. */
+
+static void
+gld${EMULATION_NAME}_before_allocation (void)
+{
+ /* we should be able to set the size of the interworking stub section */
+
+ /* Here we rummage through the found bfds to collect glue information */
+ /* FIXME: should this be based on a command line option? krk@cygnus.com */
+ {
+ LANG_FOR_EACH_INPUT_STATEMENT (is)
+ {
+ if (! bfd_arm_process_before_allocation
+ (is->the_bfd, & link_info, support_old_code))
+ {
+ /* xgettext:c-format */
+ einfo (_("Errors encountered processing file %s"), is->filename);
+ }
+ }
+ }
+
+ /* We have seen it all. Allocate it, and carry on */
+ bfd_arm_allocate_interworking_sections (& link_info);
+
+ before_allocation_default ();
+}
+
+static void
+gld${EMULATION_NAME}_after_open (void)
+{
+ if (strstr (bfd_get_target (link_info.output_bfd), "arm") == NULL)
+ {
+ /* The arm backend needs special fields in the output hash structure.
+ These will only be created if the output format is an arm format,
+ hence we do not support linking and changing output formats at the
+ same time. Use a link followed by objcopy to change output formats. */
+ einfo ("%F%X%P: error: cannot change output format whilst linking ARM binaries\n");
+ return;
+ }
+
+ {
+ LANG_FOR_EACH_INPUT_STATEMENT (is)
+ {
+ if (bfd_arm_get_bfd_for_interworking (is->the_bfd, & link_info))
+ break;
+ }
+ }
+}
+
+static void
+gld${EMULATION_NAME}_finish (void)
+{
+ if (thumb_entry_symbol != NULL)
+ {
+ struct bfd_link_hash_entry * h;
+
+ h = bfd_link_hash_lookup (link_info.hash, thumb_entry_symbol,
+ FALSE, FALSE, TRUE);
+
+ if (h != (struct bfd_link_hash_entry *) NULL
+ && (h->type == bfd_link_hash_defined
+ || h->type == bfd_link_hash_defweak)
+ && h->u.def.section->output_section != NULL)
+ {
+ static char buffer[32];
+ bfd_vma val;
+
+ /* Special procesing is required for a Thumb entry symbol. The
+ bottom bit of its address must be set. */
+ val = (h->u.def.value
+ + bfd_get_section_vma (link_info.output_bfd,
+ h->u.def.section->output_section)
+ + h->u.def.section->output_offset);
+
+ val |= 1;
+
+ /* Now convert this value into a string and store it in entry_symbol
+ where the lang_finish() function will pick it up. */
+ buffer[0] = '0';
+ buffer[1] = 'x';
+
+ sprintf_vma (buffer + 2, val);
+
+ if (entry_symbol.name != NULL && entry_from_cmdline)
+ einfo (_("%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"),
+ thumb_entry_symbol, entry_symbol.name);
+ entry_symbol.name = buffer;
+ }
+ else
+ einfo (_("%P: warning: cannot find thumb start symbol %s\n"),
+ thumb_entry_symbol);
+ }
+
+ finish_default ();
+}
+
+static char *
+gld${EMULATION_NAME}_get_script (int *isfile)
+EOF
+
+if test -n "$COMPILE_IN"
+then
+# Scripts compiled in.
+
+# sed commands to quote an ld script as a C string.
+sc="-f stringify.sed"
+
+fragment <<EOF
+{
+ *isfile = 0;
+
+ if (link_info.relocatable && config.build_constructors)
+ return
+EOF
+sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c
+echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c
+echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c
+echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c
+echo ' ; else return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
+echo '; }' >> e${EMULATION_NAME}.c
+
+else
+# Scripts read from the filesystem.
+
+fragment <<EOF
+{
+ *isfile = 1;
+
+ if (link_info.relocatable && config.build_constructors)
+ return "ldscripts/${EMULATION_NAME}.xu";
+ else if (link_info.relocatable)
+ return "ldscripts/${EMULATION_NAME}.xr";
+ else if (!config.text_read_only)
+ return "ldscripts/${EMULATION_NAME}.xbn";
+ else if (!config.magic_demand_paged)
+ return "ldscripts/${EMULATION_NAME}.xn";
+ else
+ return "ldscripts/${EMULATION_NAME}.x";
+}
+EOF
+
+fi
+
+fragment <<EOF
+
+struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
+{
+ gld${EMULATION_NAME}_before_parse,
+ syslib_default,
+ hll_default,
+ after_parse_default,
+ gld${EMULATION_NAME}_after_open,
+ after_allocation_default,
+ set_output_arch_default,
+ ldemul_default_target,
+ gld${EMULATION_NAME}_before_allocation,
+ gld${EMULATION_NAME}_get_script,
+ "${EMULATION_NAME}",
+ "${OUTPUT_FORMAT}",
+ gld${EMULATION_NAME}_finish,
+ NULL, /* create output section statements */
+ NULL, /* open dynamic archive */
+ NULL, /* place orphan */
+ NULL, /* set symbols */
+ NULL, /* parse_args */
+ gld${EMULATION_NAME}_add_options,
+ gld${EMULATION_NAME}_handle_option,
+ NULL, /* unrecognised file */
+ gld${EMULATION_NAME}_list_options,
+ NULL, /* recognized file */
+ NULL, /* find_potential_libraries */
+ NULL /* new_vers_pattern */
+};
+EOF
diff --git a/binutils-2.21/ld/emultempl/armelf.em b/binutils-2.21/ld/emultempl/armelf.em
new file mode 100644
index 0000000..91aa8e9
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/armelf.em
@@ -0,0 +1,684 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 1991, 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+# 2004, 2005, 2006, 2007, 2008, 2009
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em, and defines extra arm-elf
+# specific routines.
+#
+test -z "$TARGET2_TYPE" && TARGET2_TYPE="rel"
+fragment <<EOF
+
+#include "ldctor.h"
+#include "elf/arm.h"
+
+static char *thumb_entry_symbol = NULL;
+static int byteswap_code = 0;
+static int target1_is_rel = 0${TARGET1_IS_REL};
+static char *target2_type = "${TARGET2_TYPE}";
+static int fix_v4bx = 0;
+static int use_blx = 0;
+static bfd_arm_vfp11_fix vfp11_denorm_fix = BFD_ARM_VFP11_FIX_DEFAULT;
+static int fix_cortex_a8 = -1;
+static int no_enum_size_warning = 0;
+static int no_wchar_size_warning = 0;
+static int pic_veneer = 0;
+static int merge_exidx_entries = -1;
+
+static void
+gld${EMULATION_NAME}_before_parse (void)
+{
+#ifndef TARGET_ /* I.e., if not generic. */
+ ldfile_set_output_arch ("`echo ${ARCH}`", bfd_arch_unknown);
+#endif /* not TARGET_ */
+ config.dynamic_link = ${DYNAMIC_LINK-TRUE};
+ config.has_shared = `if test -n "$GENERATE_SHLIB_SCRIPT" ; then echo TRUE ; else echo FALSE ; fi`;
+}
+
+static void
+arm_elf_before_allocation (void)
+{
+ bfd_elf32_arm_set_byteswap_code (&link_info, byteswap_code);
+
+ /* Choose type of VFP11 erratum fix, or warn if specified fix is unnecessary
+ due to architecture version. */
+ bfd_elf32_arm_set_vfp11_fix (link_info.output_bfd, &link_info);
+
+ /* Auto-select Cortex-A8 erratum fix if it wasn't explicitly specified. */
+ bfd_elf32_arm_set_cortex_a8_fix (link_info.output_bfd, &link_info);
+
+ /* We should be able to set the size of the interworking stub section. We
+ can't do it until later if we have dynamic sections, though. */
+ if (! elf_hash_table (&link_info)->dynamic_sections_created)
+ {
+ /* Here we rummage through the found bfds to collect glue information. */
+ LANG_FOR_EACH_INPUT_STATEMENT (is)
+ {
+ /* Initialise mapping tables for code/data. */
+ bfd_elf32_arm_init_maps (is->the_bfd);
+
+ if (!bfd_elf32_arm_process_before_allocation (is->the_bfd,
+ &link_info)
+ || !bfd_elf32_arm_vfp11_erratum_scan (is->the_bfd, &link_info))
+ /* xgettext:c-format */
+ einfo (_("Errors encountered processing file %s"), is->filename);
+ }
+
+ /* We have seen it all. Allocate it, and carry on. */
+ bfd_elf32_arm_allocate_interworking_sections (& link_info);
+ }
+
+ /* Call the standard elf routine. */
+ gld${EMULATION_NAME}_before_allocation ();
+}
+
+/* Fake input file for stubs. */
+static lang_input_statement_type *stub_file;
+
+/* Whether we need to call gldarm_layout_sections_again. */
+static int need_laying_out = 0;
+
+/* Maximum size of a group of input sections that can be handled by
+ one stub section. A value of +/-1 indicates the bfd back-end
+ should use a suitable default size. */
+static bfd_signed_vma group_size = 1;
+
+struct hook_stub_info
+{
+ lang_statement_list_type add;
+ asection *input_section;
+};
+
+/* Traverse the linker tree to find the spot where the stub goes. */
+
+static bfd_boolean
+hook_in_stub (struct hook_stub_info *info, lang_statement_union_type **lp)
+{
+ lang_statement_union_type *l;
+ bfd_boolean ret;
+
+ for (; (l = *lp) != NULL; lp = &l->header.next)
+ {
+ switch (l->header.type)
+ {
+ case lang_constructors_statement_enum:
+ ret = hook_in_stub (info, &constructor_list.head);
+ if (ret)
+ return ret;
+ break;
+
+ case lang_output_section_statement_enum:
+ ret = hook_in_stub (info,
+ &l->output_section_statement.children.head);
+ if (ret)
+ return ret;
+ break;
+
+ case lang_wild_statement_enum:
+ ret = hook_in_stub (info, &l->wild_statement.children.head);
+ if (ret)
+ return ret;
+ break;
+
+ case lang_group_statement_enum:
+ ret = hook_in_stub (info, &l->group_statement.children.head);
+ if (ret)
+ return ret;
+ break;
+
+ case lang_input_section_enum:
+ if (l->input_section.section == info->input_section)
+ {
+ /* We've found our section. Insert the stub immediately
+ after its associated input section. */
+ *(info->add.tail) = l->header.next;
+ l->header.next = info->add.head;
+ return TRUE;
+ }
+ break;
+
+ case lang_data_statement_enum:
+ case lang_reloc_statement_enum:
+ case lang_object_symbols_statement_enum:
+ case lang_output_statement_enum:
+ case lang_target_statement_enum:
+ case lang_input_statement_enum:
+ case lang_assignment_statement_enum:
+ case lang_padding_statement_enum:
+ case lang_address_statement_enum:
+ case lang_fill_statement_enum:
+ break;
+
+ default:
+ FAIL ();
+ break;
+ }
+ }
+ return FALSE;
+}
+
+
+/* Call-back for elf32_arm_size_stubs. */
+
+/* Create a new stub section, and arrange for it to be linked
+ immediately after INPUT_SECTION. */
+
+static asection *
+elf32_arm_add_stub_section (const char *stub_sec_name,
+ asection *input_section)
+{
+ asection *stub_sec;
+ flagword flags;
+ asection *output_section;
+ const char *secname;
+ lang_output_section_statement_type *os;
+ struct hook_stub_info info;
+
+ flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE
+ | SEC_HAS_CONTENTS | SEC_RELOC | SEC_IN_MEMORY | SEC_KEEP);
+ stub_sec = bfd_make_section_anyway_with_flags (stub_file->the_bfd,
+ stub_sec_name, flags);
+ if (stub_sec == NULL)
+ goto err_ret;
+
+ bfd_set_section_alignment (stub_file->the_bfd, stub_sec, 3);
+
+ output_section = input_section->output_section;
+ secname = bfd_get_section_name (output_section->owner, output_section);
+ os = lang_output_section_find (secname);
+
+ info.input_section = input_section;
+ lang_list_init (&info.add);
+ lang_add_section (&info.add, stub_sec, os);
+
+ if (info.add.head == NULL)
+ goto err_ret;
+
+ if (hook_in_stub (&info, &os->children.head))
+ return stub_sec;
+
+ err_ret:
+ einfo ("%X%P: can not make stub section: %E\n");
+ return NULL;
+}
+
+/* Another call-back for elf_arm_size_stubs. */
+
+static void
+gldarm_layout_sections_again (void)
+{
+ /* If we have changed sizes of the stub sections, then we need
+ to recalculate all the section offsets. This may mean we need to
+ add even more stubs. */
+ gld${EMULATION_NAME}_map_segments (TRUE);
+ need_laying_out = -1;
+}
+
+static void
+build_section_lists (lang_statement_union_type *statement)
+{
+ if (statement->header.type == lang_input_section_enum)
+ {
+ asection *i = statement->input_section.section;
+
+ if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
+ && (i->flags & SEC_EXCLUDE) == 0
+ && i->output_section != NULL
+ && i->output_section->owner == link_info.output_bfd)
+ elf32_arm_next_input_section (& link_info, i);
+ }
+}
+
+static int
+compare_output_sec_vma (const void *a, const void *b)
+{
+ asection *asec = *(asection **) a, *bsec = *(asection **) b;
+ asection *aout = asec->output_section, *bout = bsec->output_section;
+ bfd_vma avma, bvma;
+
+ /* If there's no output section for some reason, compare equal. */
+ if (!aout || !bout)
+ return 0;
+
+ avma = aout->vma + asec->output_offset;
+ bvma = bout->vma + bsec->output_offset;
+
+ if (avma > bvma)
+ return 1;
+ else if (avma < bvma)
+ return -1;
+
+ return 0;
+}
+
+static void
+gld${EMULATION_NAME}_after_allocation (void)
+{
+ if (!link_info.relocatable)
+ {
+ /* Build a sorted list of input text sections, then use that to process
+ the unwind table index. */
+ unsigned int list_size = 10;
+ asection **sec_list = (asection **)
+ xmalloc (list_size * sizeof (asection *));
+ unsigned int sec_count = 0;
+
+ LANG_FOR_EACH_INPUT_STATEMENT (is)
+ {
+ bfd *abfd = is->the_bfd;
+ asection *sec;
+
+ if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
+ continue;
+
+ for (sec = abfd->sections; sec != NULL; sec = sec->next)
+ {
+ asection *out_sec = sec->output_section;
+
+ if (out_sec
+ && elf_section_data (sec)
+ && elf_section_type (sec) == SHT_PROGBITS
+ && (elf_section_flags (sec) & SHF_EXECINSTR) != 0
+ && (sec->flags & SEC_EXCLUDE) == 0
+ && sec->sec_info_type != ELF_INFO_TYPE_JUST_SYMS
+ && out_sec != bfd_abs_section_ptr)
+ {
+ if (sec_count == list_size)
+ {
+ list_size *= 2;
+ sec_list = (asection **)
+ xrealloc (sec_list, list_size * sizeof (asection *));
+ }
+
+ sec_list[sec_count++] = sec;
+ }
+ }
+ }
+
+ qsort (sec_list, sec_count, sizeof (asection *), &compare_output_sec_vma);
+
+ if (elf32_arm_fix_exidx_coverage (sec_list, sec_count, &link_info,
+ merge_exidx_entries))
+ need_laying_out = 1;
+
+ free (sec_list);
+ }
+
+ /* bfd_elf32_discard_info just plays with debugging sections,
+ ie. doesn't affect any code, so we can delay resizing the
+ sections. It's likely we'll resize everything in the process of
+ adding stubs. */
+ if (bfd_elf_discard_info (link_info.output_bfd, & link_info))
+ need_laying_out = 1;
+
+ /* If generating a relocatable output file, then we don't
+ have to examine the relocs. */
+ if (stub_file != NULL && !link_info.relocatable)
+ {
+ int ret = elf32_arm_setup_section_lists (link_info.output_bfd, & link_info);
+
+ if (ret != 0)
+ {
+ if (ret < 0)
+ {
+ einfo ("%X%P: could not compute sections lists for stub generation: %E\n");
+ return;
+ }
+
+ lang_for_each_statement (build_section_lists);
+
+ /* Call into the BFD backend to do the real work. */
+ if (! elf32_arm_size_stubs (link_info.output_bfd,
+ stub_file->the_bfd,
+ & link_info,
+ group_size,
+ & elf32_arm_add_stub_section,
+ & gldarm_layout_sections_again))
+ {
+ einfo ("%X%P: cannot size stub section: %E\n");
+ return;
+ }
+ }
+ }
+
+ if (need_laying_out != -1)
+ gld${EMULATION_NAME}_map_segments (need_laying_out);
+}
+
+static void
+gld${EMULATION_NAME}_finish (void)
+{
+ struct bfd_link_hash_entry * h;
+
+ {
+ LANG_FOR_EACH_INPUT_STATEMENT (is)
+ {
+ /* Figure out where VFP11 erratum veneers (and the labels returning
+ from same) have been placed. */
+ bfd_elf32_arm_vfp11_fix_veneer_locations (is->the_bfd, &link_info);
+ }
+ }
+
+ if (! link_info.relocatable)
+ {
+ /* Now build the linker stubs. */
+ if (stub_file->the_bfd->sections != NULL)
+ {
+ if (! elf32_arm_build_stubs (& link_info))
+ einfo ("%X%P: can not build stubs: %E\n");
+ }
+ }
+
+ finish_default ();
+
+ if (thumb_entry_symbol)
+ {
+ h = bfd_link_hash_lookup (link_info.hash, thumb_entry_symbol,
+ FALSE, FALSE, TRUE);
+ }
+ else
+ {
+ struct elf_link_hash_entry * eh;
+
+ if (!entry_symbol.name)
+ return;
+
+ h = bfd_link_hash_lookup (link_info.hash, entry_symbol.name,
+ FALSE, FALSE, TRUE);
+ eh = (struct elf_link_hash_entry *)h;
+ if (!h || ELF_ST_TYPE(eh->type) != STT_ARM_TFUNC)
+ return;
+ }
+
+
+ if (h != (struct bfd_link_hash_entry *) NULL
+ && (h->type == bfd_link_hash_defined
+ || h->type == bfd_link_hash_defweak)
+ && h->u.def.section->output_section != NULL)
+ {
+ static char buffer[32];
+ bfd_vma val;
+
+ /* Special procesing is required for a Thumb entry symbol. The
+ bottom bit of its address must be set. */
+ val = (h->u.def.value
+ + bfd_get_section_vma (link_info.output_bfd,
+ h->u.def.section->output_section)
+ + h->u.def.section->output_offset);
+
+ val |= 1;
+
+ /* Now convert this value into a string and store it in entry_symbol
+ where the lang_finish() function will pick it up. */
+ buffer[0] = '0';
+ buffer[1] = 'x';
+
+ sprintf_vma (buffer + 2, val);
+
+ if (thumb_entry_symbol != NULL && entry_symbol.name != NULL
+ && entry_from_cmdline)
+ einfo (_("%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"),
+ thumb_entry_symbol, entry_symbol.name);
+ entry_symbol.name = buffer;
+ }
+ else
+ einfo (_("%P: warning: cannot find thumb start symbol %s\n"),
+ thumb_entry_symbol);
+}
+
+/* This is a convenient point to tell BFD about target specific flags.
+ After the output has been created, but before inputs are read. */
+static void
+arm_elf_create_output_section_statements (void)
+{
+ if (strstr (bfd_get_target (link_info.output_bfd), "arm") == NULL)
+ {
+ /* The arm backend needs special fields in the output hash structure.
+ These will only be created if the output format is an arm format,
+ hence we do not support linking and changing output formats at the
+ same time. Use a link followed by objcopy to change output formats. */
+ einfo ("%F%X%P: error: Cannot change output format whilst linking ARM binaries.\n");
+ return;
+ }
+
+ bfd_elf32_arm_set_target_relocs (link_info.output_bfd, &link_info,
+ target1_is_rel,
+ target2_type, fix_v4bx, use_blx,
+ vfp11_denorm_fix, no_enum_size_warning,
+ no_wchar_size_warning,
+ pic_veneer, fix_cortex_a8);
+
+ stub_file = lang_add_input_file ("linker stubs",
+ lang_input_file_is_fake_enum,
+ NULL);
+ stub_file->the_bfd = bfd_create ("linker stubs", link_info.output_bfd);
+ if (stub_file->the_bfd == NULL
+ || ! bfd_set_arch_mach (stub_file->the_bfd,
+ bfd_get_arch (link_info.output_bfd),
+ bfd_get_mach (link_info.output_bfd)))
+ {
+ einfo ("%X%P: can not create BFD %E\n");
+ return;
+ }
+
+ stub_file->the_bfd->flags |= BFD_LINKER_CREATED;
+ ldlang_add_file (stub_file);
+
+ /* Also use the stub file for stubs placed in a single output section. */
+ bfd_elf32_arm_add_glue_sections_to_bfd (stub_file->the_bfd, &link_info);
+ bfd_elf32_arm_get_bfd_for_interworking (stub_file->the_bfd, &link_info);
+}
+
+/* Avoid processing the fake stub_file in vercheck, stat_needed and
+ check_needed routines. */
+
+static void (*real_func) (lang_input_statement_type *);
+
+static void arm_for_each_input_file_wrapper (lang_input_statement_type *l)
+{
+ if (l != stub_file)
+ (*real_func) (l);
+}
+
+static void
+arm_lang_for_each_input_file (void (*func) (lang_input_statement_type *))
+{
+ real_func = func;
+ lang_for_each_input_file (&arm_for_each_input_file_wrapper);
+}
+
+#define lang_for_each_input_file arm_lang_for_each_input_file
+
+EOF
+
+# Define some shell vars to insert bits of code into the standard elf
+# parse_args and list_options functions.
+#
+PARSE_AND_LIST_PROLOGUE='
+#define OPTION_THUMB_ENTRY 301
+#define OPTION_BE8 302
+#define OPTION_TARGET1_REL 303
+#define OPTION_TARGET1_ABS 304
+#define OPTION_TARGET2 305
+#define OPTION_FIX_V4BX 306
+#define OPTION_USE_BLX 307
+#define OPTION_VFP11_DENORM_FIX 308
+#define OPTION_NO_ENUM_SIZE_WARNING 309
+#define OPTION_PIC_VENEER 310
+#define OPTION_FIX_V4BX_INTERWORKING 311
+#define OPTION_STUBGROUP_SIZE 312
+#define OPTION_NO_WCHAR_SIZE_WARNING 313
+#define OPTION_FIX_CORTEX_A8 314
+#define OPTION_NO_FIX_CORTEX_A8 315
+#define OPTION_NO_MERGE_EXIDX_ENTRIES 316
+#define OPTION_ICF 399
+'
+
+PARSE_AND_LIST_SHORTOPTS=p
+
+PARSE_AND_LIST_LONGOPTS='
+ { "no-pipeline-knowledge", no_argument, NULL, '\'p\''},
+ { "thumb-entry", required_argument, NULL, OPTION_THUMB_ENTRY},
+ { "be8", no_argument, NULL, OPTION_BE8},
+ { "target1-rel", no_argument, NULL, OPTION_TARGET1_REL},
+ { "target1-abs", no_argument, NULL, OPTION_TARGET1_ABS},
+ { "target2", required_argument, NULL, OPTION_TARGET2},
+ { "fix-v4bx", no_argument, NULL, OPTION_FIX_V4BX},
+ { "fix-v4bx-interworking", no_argument, NULL, OPTION_FIX_V4BX_INTERWORKING},
+ { "use-blx", no_argument, NULL, OPTION_USE_BLX},
+ { "vfp11-denorm-fix", required_argument, NULL, OPTION_VFP11_DENORM_FIX},
+ { "no-enum-size-warning", no_argument, NULL, OPTION_NO_ENUM_SIZE_WARNING},
+ { "pic-veneer", no_argument, NULL, OPTION_PIC_VENEER},
+ { "stub-group-size", required_argument, NULL, OPTION_STUBGROUP_SIZE },
+ { "no-wchar-size-warning", no_argument, NULL, OPTION_NO_WCHAR_SIZE_WARNING},
+ { "fix-cortex-a8", no_argument, NULL, OPTION_FIX_CORTEX_A8 },
+ { "no-fix-cortex-a8", no_argument, NULL, OPTION_NO_FIX_CORTEX_A8 },
+ { "no-merge-exidx-entries", no_argument, NULL, OPTION_NO_MERGE_EXIDX_ENTRIES },
+ { "icf", required_argument, NULL, OPTION_ICF },
+'
+
+PARSE_AND_LIST_OPTIONS='
+ fprintf (file, _(" --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"));
+ fprintf (file, _(" --be8 Output BE8 format image\n"));
+ fprintf (file, _(" --target1-rel Interpret R_ARM_TARGET1 as R_ARM_REL32\n"));
+ fprintf (file, _(" --target1-abs Interpret R_ARM_TARGET1 as R_ARM_ABS32\n"));
+ fprintf (file, _(" --target2=<type> Specify definition of R_ARM_TARGET2\n"));
+ fprintf (file, _(" --fix-v4bx Rewrite BX rn as MOV pc, rn for ARMv4\n"));
+ fprintf (file, _(" --fix-v4bx-interworking Rewrite BX rn branch to ARMv4 interworking veneer\n"));
+ fprintf (file, _(" --use-blx Enable use of BLX instructions\n"));
+ fprintf (file, _(" --vfp11-denorm-fix Specify how to fix VFP11 denorm erratum\n"));
+ fprintf (file, _(" --no-enum-size-warning Don'\''t warn about objects with incompatible\n"
+ " enum sizes\n"));
+ fprintf (file, _(" --no-wchar-size-warning Don'\''t warn about objects with incompatible"
+ " wchar_t sizes\n"));
+ fprintf (file, _(" --pic-veneer Always generate PIC interworking veneers\n"));
+ fprintf (file, _("\
+ --stub-group-size=N Maximum size of a group of input sections that can be\n\
+ handled by one stub section. A negative value\n\
+ locates all stubs after their branches (with a\n\
+ group size of -N), while a positive value allows\n\
+ two groups of input sections, one before, and one\n\
+ after each stub section. Values of +/-1 indicate\n\
+ the linker should choose suitable defaults.\n"
+ ));
+ fprintf (file, _(" --[no-]fix-cortex-a8 Disable/enable Cortex-A8 Thumb-2 branch erratum fix\n"));
+ fprintf (file, _(" --no-merge-exidx-entries Disable merging exidx entries\n"));
+ fprintf (file, _(" --icf=<value> Ignored for compatibility with gold.\n"));
+
+'
+
+PARSE_AND_LIST_ARGS_CASES='
+ case '\'p\'':
+ /* Only here for backwards compatibility. */
+ break;
+
+ case OPTION_THUMB_ENTRY:
+ thumb_entry_symbol = optarg;
+ break;
+
+ case OPTION_BE8:
+ byteswap_code = 1;
+ break;
+
+ case OPTION_TARGET1_REL:
+ target1_is_rel = 1;
+ break;
+
+ case OPTION_TARGET1_ABS:
+ target1_is_rel = 0;
+ break;
+
+ case OPTION_TARGET2:
+ target2_type = optarg;
+ break;
+
+ case OPTION_FIX_V4BX:
+ fix_v4bx = 1;
+ break;
+
+ case OPTION_FIX_V4BX_INTERWORKING:
+ fix_v4bx = 2;
+ break;
+
+ case OPTION_USE_BLX:
+ use_blx = 1;
+ break;
+
+ case OPTION_VFP11_DENORM_FIX:
+ if (strcmp (optarg, "none") == 0)
+ vfp11_denorm_fix = BFD_ARM_VFP11_FIX_NONE;
+ else if (strcmp (optarg, "scalar") == 0)
+ vfp11_denorm_fix = BFD_ARM_VFP11_FIX_SCALAR;
+ else if (strcmp (optarg, "vector") == 0)
+ vfp11_denorm_fix = BFD_ARM_VFP11_FIX_VECTOR;
+ else
+ einfo (_("Unrecognized VFP11 fix type '\''%s'\''.\n"), optarg);
+ break;
+
+ case OPTION_NO_ENUM_SIZE_WARNING:
+ no_enum_size_warning = 1;
+ break;
+
+ case OPTION_NO_WCHAR_SIZE_WARNING:
+ no_wchar_size_warning = 1;
+ break;
+
+ case OPTION_PIC_VENEER:
+ pic_veneer = 1;
+ break;
+
+ case OPTION_STUBGROUP_SIZE:
+ {
+ const char *end;
+
+ group_size = bfd_scan_vma (optarg, &end, 0);
+ if (*end)
+ einfo (_("%P%F: invalid number `%s'\''\n"), optarg);
+ }
+ break;
+
+ case OPTION_FIX_CORTEX_A8:
+ fix_cortex_a8 = 1;
+ break;
+
+ case OPTION_NO_FIX_CORTEX_A8:
+ fix_cortex_a8 = 0;
+ break;
+
+ case OPTION_NO_MERGE_EXIDX_ENTRIES:
+ merge_exidx_entries = 0;
+
+ case OPTION_ICF:
+ /* For compatibility with gold. */
+ break;
+'
+
+# We have our own before_allocation etc. functions, but they call
+# the standard routines, so give them a different name.
+LDEMUL_BEFORE_ALLOCATION=arm_elf_before_allocation
+LDEMUL_AFTER_ALLOCATION=gld${EMULATION_NAME}_after_allocation
+LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS=arm_elf_create_output_section_statements
+
+# Replace the elf before_parse function with our own.
+LDEMUL_BEFORE_PARSE=gld"${EMULATION_NAME}"_before_parse
+
+# Call the extra arm-elf function
+LDEMUL_FINISH=gld${EMULATION_NAME}_finish
diff --git a/binutils-2.21/ld/emultempl/astring.sed b/binutils-2.21/ld/emultempl/astring.sed
new file mode 100644
index 0000000..08bd8a6
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/astring.sed
@@ -0,0 +1,13 @@
+s/["\\]/\\&/g
+s/$/\\n\\/
+1 s/^/"/
+25s/\\$/"/
+26s/^/"/
+50s/\\$/"/
+51s/^/"/
+75s/\\$/"/
+76s/^/"/
+100s/\\$/"/
+101s/^/"/
+$ s/$/n"/
+$ s/\\n"n"$/\\n"/
diff --git a/binutils-2.21/ld/emultempl/avrelf.em b/binutils-2.21/ld/emultempl/avrelf.em
new file mode 100644
index 0000000..84f1633
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/avrelf.em
@@ -0,0 +1,265 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2006, 2007, 2008, 2009
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+
+# This file is sourced from elf32.em, and defines extra avr-elf specific
+# routines. It is used to generate the trampolines for the avr6 family
+# of devices where one needs to address the issue that it is not possible
+# to reach the whole program memory by using 16 bit pointers.
+
+fragment <<EOF
+
+#include "elf32-avr.h"
+#include "ldctor.h"
+
+/* The fake file and it's corresponding section meant to hold
+ the linker stubs if needed. */
+
+static lang_input_statement_type *stub_file;
+static asection *avr_stub_section;
+
+/* Variables set by the command-line parameters and transfered
+ to the bfd without use of global shared variables. */
+
+static bfd_boolean avr_no_stubs = FALSE;
+static bfd_boolean avr_debug_relax = FALSE;
+static bfd_boolean avr_debug_stubs = FALSE;
+static bfd_boolean avr_replace_call_ret_sequences = TRUE;
+static bfd_vma avr_pc_wrap_around = 0x10000000;
+
+/* Transfers information to the bfd frontend. */
+
+static void
+avr_elf_set_global_bfd_parameters (void)
+{
+ elf32_avr_setup_params (& link_info,
+ stub_file->the_bfd,
+ avr_stub_section,
+ avr_no_stubs,
+ avr_debug_stubs,
+ avr_debug_relax,
+ avr_pc_wrap_around,
+ avr_replace_call_ret_sequences);
+}
+
+
+/* Makes a conservative estimate of the trampoline section size that could
+ be corrected later on. */
+
+static void
+avr_elf_${EMULATION_NAME}_before_allocation (void)
+{
+ int ret;
+
+ gld${EMULATION_NAME}_before_allocation ();
+
+ /* We only need stubs for the avr6 family. */
+ if (strcmp ("${EMULATION_NAME}","avr6"))
+ avr_no_stubs = TRUE;
+
+ avr_elf_set_global_bfd_parameters ();
+
+ /* If generating a relocatable output file, then
+ we don't have to generate the trampolines. */
+ if (link_info.relocatable)
+ avr_no_stubs = TRUE;
+
+ if (avr_no_stubs)
+ return;
+
+ ret = elf32_avr_setup_section_lists (link_info.output_bfd, &link_info);
+
+ if (ret < 0)
+ einfo ("%X%P: can not setup the input section list: %E\n");
+
+ if (ret <= 0)
+ return;
+
+ /* Call into the BFD backend to do the real "stub"-work. */
+ if (! elf32_avr_size_stubs (link_info.output_bfd, &link_info, TRUE))
+ einfo ("%X%P: can not size stub section: %E\n");
+}
+
+/* This is called before the input files are opened. We create a new
+ fake input file to hold the stub section and generate the section itself. */
+
+static void
+avr_elf_create_output_section_statements (void)
+{
+ flagword flags;
+
+ stub_file = lang_add_input_file ("linker stubs",
+ lang_input_file_is_fake_enum,
+ NULL);
+
+ stub_file->the_bfd = bfd_create ("linker stubs", link_info.output_bfd);
+ if (stub_file->the_bfd == NULL
+ || !bfd_set_arch_mach (stub_file->the_bfd,
+ bfd_get_arch (link_info.output_bfd),
+ bfd_get_mach (link_info.output_bfd)))
+ {
+ einfo ("%X%P: can not create stub BFD %E\n");
+ return;
+ }
+
+ /* Now we add the stub section. */
+
+ flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE
+ | SEC_HAS_CONTENTS | SEC_RELOC | SEC_IN_MEMORY | SEC_KEEP);
+ avr_stub_section = bfd_make_section_anyway_with_flags (stub_file->the_bfd,
+ ".trampolines",
+ flags);
+ if (avr_stub_section == NULL)
+ goto err_ret;
+
+ avr_stub_section->alignment_power = 1;
+
+ ldlang_add_file (stub_file);
+
+ return;
+
+ err_ret:
+ einfo ("%X%P: can not make stub section: %E\n");
+ return;
+}
+
+/* Re-calculates the size of the stubs so that we won't waste space. */
+
+static void
+avr_elf_after_allocation (void)
+{
+ if (!avr_no_stubs && ! RELAXATION_ENABLED)
+ {
+ /* If relaxing, elf32_avr_size_stubs will be called from
+ elf32_avr_relax_section. */
+ if (!elf32_avr_size_stubs (link_info.output_bfd, &link_info, FALSE))
+ einfo ("%X%P: can not size stub section: %E\n");
+ }
+
+ gld${EMULATION_NAME}_after_allocation ();
+
+ /* Now build the linker stubs. */
+ if (!avr_no_stubs)
+ {
+ if (!elf32_avr_build_stubs (&link_info))
+ einfo ("%X%P: can not build stubs: %E\n");
+ }
+}
+
+
+EOF
+
+
+PARSE_AND_LIST_PROLOGUE='
+
+#define OPTION_NO_CALL_RET_REPLACEMENT 301
+#define OPTION_PMEM_WRAP_AROUND 302
+#define OPTION_NO_STUBS 303
+#define OPTION_DEBUG_STUBS 304
+#define OPTION_DEBUG_RELAX 305
+'
+
+PARSE_AND_LIST_LONGOPTS='
+ { "no-call-ret-replacement", no_argument,
+ NULL, OPTION_NO_CALL_RET_REPLACEMENT},
+ { "pmem-wrap-around", required_argument,
+ NULL, OPTION_PMEM_WRAP_AROUND},
+ { "no-stubs", no_argument,
+ NULL, OPTION_NO_STUBS},
+ { "debug-stubs", no_argument,
+ NULL, OPTION_DEBUG_STUBS},
+ { "debug-relax", no_argument,
+ NULL, OPTION_DEBUG_RELAX},
+'
+
+PARSE_AND_LIST_OPTIONS='
+ fprintf (file, _(" --pmem-wrap-around=<val> "
+ "Make the linker relaxation machine assume that a\n"
+ " "
+ " program counter wrap-around occures at address\n"
+ " "
+ " <val>. Supported values: 8k, 16k, 32k and 64k.\n"));
+ fprintf (file, _(" --no-call-ret-replacement "
+ "The relaxation machine normally will\n"
+ " "
+ " substitute two immediately following call/ret\n"
+ " "
+ " instructions by a single jump instruction.\n"
+ " "
+ " This option disables this optimization.\n"));
+ fprintf (file, _(" --no-stubs "
+ "If the linker detects to attempt to access\n"
+ " "
+ " an instruction beyond 128k by a reloc that\n"
+ " "
+ " is limited to 128k max, it inserts a jump\n"
+ " "
+ " stub. You can de-active this with this switch.\n"));
+ fprintf (file, _(" --debug-stubs "
+ "Used for debugging avr-ld.\n"));
+ fprintf (file, _(" --debug-relax "
+ "Used for debugging avr-ld.\n"));
+'
+
+PARSE_AND_LIST_ARGS_CASES='
+
+ case OPTION_PMEM_WRAP_AROUND:
+ {
+ /* This variable is defined in the bfd library. */
+ if ((!strcmp (optarg,"32k")) || (!strcmp (optarg,"32K")))
+ avr_pc_wrap_around = 32768;
+ else if ((!strcmp (optarg,"8k")) || (!strcmp (optarg,"8K")))
+ avr_pc_wrap_around = 8192;
+ else if ((!strcmp (optarg,"16k")) || (!strcmp (optarg,"16K")))
+ avr_pc_wrap_around = 16384;
+ else if ((!strcmp (optarg,"64k")) || (!strcmp (optarg,"64K")))
+ avr_pc_wrap_around = 0x10000;
+ else
+ return FALSE;
+ }
+ break;
+
+ case OPTION_DEBUG_STUBS:
+ avr_debug_stubs = TRUE;
+ break;
+
+ case OPTION_DEBUG_RELAX:
+ avr_debug_relax = TRUE;
+ break;
+
+ case OPTION_NO_STUBS:
+ avr_no_stubs = TRUE;
+ break;
+
+ case OPTION_NO_CALL_RET_REPLACEMENT:
+ {
+ /* This variable is defined in the bfd library. */
+ avr_replace_call_ret_sequences = FALSE;
+ }
+ break;
+'
+
+#
+# Put these extra avr-elf routines in ld_${EMULATION_NAME}_emulation
+#
+LDEMUL_BEFORE_ALLOCATION=avr_elf_${EMULATION_NAME}_before_allocation
+LDEMUL_AFTER_ALLOCATION=avr_elf_after_allocation
+LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS=avr_elf_create_output_section_statements
diff --git a/binutils-2.21/ld/emultempl/beos.em b/binutils-2.21/ld/emultempl/beos.em
new file mode 100644
index 0000000..370dbac
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/beos.em
@@ -0,0 +1,783 @@
+# This shell script emits a C file. -*- C -*-
+# It does some substitutions.
+if [ -z "$MACHINE" ]; then
+ OUTPUT_ARCH=${ARCH}
+else
+ OUTPUT_ARCH=${ARCH}:${MACHINE}
+fi
+fragment <<EOF
+/* This file is part of GLD, the Gnu Linker.
+ Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+ 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+
+/* For WINDOWS_NT */
+/* The original file generated returned different default scripts depending
+ on whether certain switches were set, but these switches pertain to the
+ Linux system and that particular version of coff. In the NT case, we
+ only determine if the subsystem is console or windows in order to select
+ the correct entry point by default. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+#include "getopt.h"
+#include "libiberty.h"
+#include "ld.h"
+#include "ldmain.h"
+#include "ldexp.h"
+#include "ldlang.h"
+#include "ldfile.h"
+#include "ldemul.h"
+#include <ldgram.h>
+#include "ldlex.h"
+#include "ldmisc.h"
+#include "ldctor.h"
+#include "coff/internal.h"
+#include "../bfd/libcoff.h"
+
+#define TARGET_IS_${EMULATION_NAME}
+
+static struct internal_extra_pe_aouthdr pe;
+static int dll;
+
+extern const char *output_filename;
+
+static void
+gld_${EMULATION_NAME}_before_parse (void)
+{
+ ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
+ output_filename = "a.exe";
+}
+
+/* PE format extra command line options. */
+
+/* Used for setting flags in the PE header. */
+#define OPTION_BASE_FILE (300 + 1)
+#define OPTION_DLL (OPTION_BASE_FILE + 1)
+#define OPTION_FILE_ALIGNMENT (OPTION_DLL + 1)
+#define OPTION_IMAGE_BASE (OPTION_FILE_ALIGNMENT + 1)
+#define OPTION_MAJOR_IMAGE_VERSION (OPTION_IMAGE_BASE + 1)
+#define OPTION_MAJOR_OS_VERSION (OPTION_MAJOR_IMAGE_VERSION + 1)
+#define OPTION_MAJOR_SUBSYSTEM_VERSION (OPTION_MAJOR_OS_VERSION + 1)
+#define OPTION_MINOR_IMAGE_VERSION (OPTION_MAJOR_SUBSYSTEM_VERSION + 1)
+#define OPTION_MINOR_OS_VERSION (OPTION_MINOR_IMAGE_VERSION + 1)
+#define OPTION_MINOR_SUBSYSTEM_VERSION (OPTION_MINOR_OS_VERSION + 1)
+#define OPTION_SECTION_ALIGNMENT (OPTION_MINOR_SUBSYSTEM_VERSION + 1)
+#define OPTION_STACK (OPTION_SECTION_ALIGNMENT + 1)
+#define OPTION_SUBSYSTEM (OPTION_STACK + 1)
+#define OPTION_HEAP (OPTION_SUBSYSTEM + 1)
+
+static void
+gld${EMULATION_NAME}_add_options
+ (int ns ATTRIBUTE_UNUSED, char **shortopts ATTRIBUTE_UNUSED, int nl,
+ struct option **longopts, int nrl ATTRIBUTE_UNUSED,
+ struct option **really_longopts ATTRIBUTE_UNUSED)
+{
+ static const struct option xtra_long[] = {
+ /* PE options */
+ {"base-file", required_argument, NULL, OPTION_BASE_FILE},
+ {"dll", no_argument, NULL, OPTION_DLL},
+ {"file-alignment", required_argument, NULL, OPTION_FILE_ALIGNMENT},
+ {"heap", required_argument, NULL, OPTION_HEAP},
+ {"image-base", required_argument, NULL, OPTION_IMAGE_BASE},
+ {"major-image-version", required_argument, NULL, OPTION_MAJOR_IMAGE_VERSION},
+ {"major-os-version", required_argument, NULL, OPTION_MAJOR_OS_VERSION},
+ {"major-subsystem-version", required_argument, NULL, OPTION_MAJOR_SUBSYSTEM_VERSION},
+ {"minor-image-version", required_argument, NULL, OPTION_MINOR_IMAGE_VERSION},
+ {"minor-os-version", required_argument, NULL, OPTION_MINOR_OS_VERSION},
+ {"minor-subsystem-version", required_argument, NULL, OPTION_MINOR_SUBSYSTEM_VERSION},
+ {"section-alignment", required_argument, NULL, OPTION_SECTION_ALIGNMENT},
+ {"stack", required_argument, NULL, OPTION_STACK},
+ {"subsystem", required_argument, NULL, OPTION_SUBSYSTEM},
+ {NULL, no_argument, NULL, 0}
+ };
+
+ *longopts = (struct option *)
+ xrealloc (*longopts, nl * sizeof (struct option) + sizeof (xtra_long));
+ memcpy (*longopts + nl, &xtra_long, sizeof (xtra_long));
+}
+
+
+/* PE/WIN32; added routines to get the subsystem type, heap and/or stack
+ parameters which may be input from the command line */
+
+typedef struct {
+ void *ptr;
+ int size;
+ int value;
+ char *symbol;
+ int inited;
+} definfo;
+
+#define D(field,symbol,def) {&pe.field,sizeof(pe.field), def, symbol,0}
+
+static definfo init[] =
+{
+ /* imagebase must be first */
+#define IMAGEBASEOFF 0
+ D(ImageBase,"__image_base__", BEOS_EXE_IMAGE_BASE),
+#define DLLOFF 1
+ {&dll, sizeof(dll), 0, "__dll__", 0},
+ D(SectionAlignment,"__section_alignment__", PE_DEF_SECTION_ALIGNMENT),
+ D(FileAlignment,"__file_alignment__", PE_DEF_FILE_ALIGNMENT),
+ D(MajorOperatingSystemVersion,"__major_os_version__", 4),
+ D(MinorOperatingSystemVersion,"__minor_os_version__", 0),
+ D(MajorImageVersion,"__major_image_version__", 1),
+ D(MinorImageVersion,"__minor_image_version__", 0),
+ D(MajorSubsystemVersion,"__major_subsystem_version__", 4),
+ D(MinorSubsystemVersion,"__minor_subsystem_version__", 0),
+ D(Subsystem,"__subsystem__", 3),
+ D(SizeOfStackReserve,"__size_of_stack_reserve__", 0x2000000),
+ D(SizeOfStackCommit,"__size_of_stack_commit__", 0x1000),
+ D(SizeOfHeapReserve,"__size_of_heap_reserve__", 0x100000),
+ D(SizeOfHeapCommit,"__size_of_heap_commit__", 0x1000),
+ D(LoaderFlags,"__loader_flags__", 0x0),
+ { NULL, 0, 0, NULL, 0 }
+};
+
+
+static void
+set_pe_name (char *name, long val)
+{
+ int i;
+ /* Find the name and set it. */
+ for (i = 0; init[i].ptr; i++)
+ {
+ if (strcmp (name, init[i].symbol) == 0)
+ {
+ init[i].value = val;
+ init[i].inited = 1;
+ return;
+ }
+ }
+ abort();
+}
+
+
+static void
+set_pe_subsystem (void)
+{
+ const char *sver;
+ int len;
+ int i;
+ static const struct
+ {
+ const char *name;
+ const int value;
+ const char *entry;
+ }
+ v[] =
+ {
+ { "native", 1, "_NtProcessStartup" },
+ { "windows", 2, "_WinMainCRTStartup" },
+ { "wwindows", 2, "_wWinMainCRTStartup" },
+ { "console", 3, "_mainCRTStartup" },
+ { "wconsole", 3, "_wmainCRTStartup" },
+ { "posix", 7, "___PosixProcessStartup"},
+ { 0, 0, 0 }
+ };
+
+ sver = strchr (optarg, ':');
+ if (sver == NULL)
+ len = strlen (optarg);
+ else
+ {
+ char *end;
+
+ len = sver - optarg;
+ set_pe_name ("__major_subsystem_version__",
+ strtoul (sver + 1, &end, 0));
+ if (*end == '.')
+ set_pe_name ("__minor_subsystem_version__",
+ strtoul (end + 1, &end, 0));
+ if (*end != '\0')
+ einfo ("%P: warning: bad version number in -subsystem option\n");
+ }
+
+ for (i = 0; v[i].name; i++)
+ {
+ if (strncmp (optarg, v[i].name, len) == 0
+ && v[i].name[len] == '\0')
+ {
+ set_pe_name ("__subsystem__", v[i].value);
+
+ /* If the subsystem is windows, we use a different entry
+ point. */
+ lang_default_entry (v[i].entry);
+
+ return;
+ }
+ }
+ einfo ("%P%F: invalid subsystem type %s\n", optarg);
+}
+
+
+static void
+set_pe_value (char *name)
+{
+ char *end;
+ set_pe_name (name, strtoul (optarg, &end, 0));
+ if (end == optarg)
+ {
+ einfo ("%P%F: invalid hex number for PE parameter '%s'\n", optarg);
+ }
+
+ optarg = end;
+}
+
+static void
+set_pe_stack_heap (char *resname, char *comname)
+{
+ set_pe_value (resname);
+ if (*optarg == ',')
+ {
+ optarg++;
+ set_pe_value (comname);
+ }
+ else if (*optarg)
+ {
+ einfo ("%P%F: strange hex info for PE parameter '%s'\n", optarg);
+ }
+}
+
+
+static bfd_boolean
+gld${EMULATION_NAME}_handle_option (int optc)
+{
+ switch (optc)
+ {
+ default:
+ return FALSE;
+
+ case OPTION_BASE_FILE:
+ link_info.base_file = fopen (optarg, FOPEN_WB);
+ if (link_info.base_file == NULL)
+ {
+ fprintf (stderr, "%s: Can't open base file %s\n",
+ program_name, optarg);
+ xexit (1);
+ }
+ break;
+
+ /* PE options */
+ case OPTION_HEAP:
+ set_pe_stack_heap ("__size_of_heap_reserve__", "__size_of_heap_commit__");
+ break;
+ case OPTION_STACK:
+ set_pe_stack_heap ("__size_of_stack_reserve__", "__size_of_stack_commit__");
+ break;
+ case OPTION_SUBSYSTEM:
+ set_pe_subsystem ();
+ break;
+ case OPTION_MAJOR_OS_VERSION:
+ set_pe_value ("__major_os_version__");
+ break;
+ case OPTION_MINOR_OS_VERSION:
+ set_pe_value ("__minor_os_version__");
+ break;
+ case OPTION_MAJOR_SUBSYSTEM_VERSION:
+ set_pe_value ("__major_subsystem_version__");
+ break;
+ case OPTION_MINOR_SUBSYSTEM_VERSION:
+ set_pe_value ("__minor_subsystem_version__");
+ break;
+ case OPTION_MAJOR_IMAGE_VERSION:
+ set_pe_value ("__major_image_version__");
+ break;
+ case OPTION_MINOR_IMAGE_VERSION:
+ set_pe_value ("__minor_image_version__");
+ break;
+ case OPTION_FILE_ALIGNMENT:
+ set_pe_value ("__file_alignment__");
+ break;
+ case OPTION_SECTION_ALIGNMENT:
+ set_pe_value ("__section_alignment__");
+ break;
+ case OPTION_DLL:
+ set_pe_name ("__dll__", 1);
+ break;
+ case OPTION_IMAGE_BASE:
+ set_pe_value ("__image_base__");
+ break;
+ }
+ return TRUE;
+}
+
+/* Assign values to the special symbols before the linker script is
+ read. */
+
+static void
+gld_${EMULATION_NAME}_set_symbols (void)
+{
+ /* Run through and invent symbols for all the
+ names and insert the defaults. */
+ int j;
+
+ if (!init[IMAGEBASEOFF].inited)
+ {
+ if (link_info.relocatable)
+ init[IMAGEBASEOFF].value = 0;
+ else if (init[DLLOFF].value)
+ init[IMAGEBASEOFF].value = BEOS_DLL_IMAGE_BASE;
+ else
+ init[IMAGEBASEOFF].value = BEOS_EXE_IMAGE_BASE;
+ }
+
+ /* Don't do any symbol assignments if this is a relocatable link. */
+ if (link_info.relocatable)
+ return;
+
+ /* Glue the assignments into the abs section */
+ push_stat_ptr (&abs_output_section->children);
+
+ for (j = 0; init[j].ptr; j++)
+ {
+ long val = init[j].value;
+ lang_add_assignment (exp_assop ('=', init[j].symbol, exp_intop (val)));
+ if (init[j].size == sizeof(short))
+ *(short *)init[j].ptr = val;
+ else if (init[j].size == sizeof(int))
+ *(int *)init[j].ptr = val;
+ else if (init[j].size == sizeof(long))
+ *(long *)init[j].ptr = val;
+ /* This might be a long long or other special type. */
+ else if (init[j].size == sizeof(bfd_vma))
+ *(bfd_vma *)init[j].ptr = val;
+ else abort();
+ }
+ /* Restore the pointer. */
+ pop_stat_ptr ();
+
+ if (pe.FileAlignment >
+ pe.SectionAlignment)
+ {
+ einfo ("%P: warning, file alignment > section alignment.\n");
+ }
+}
+
+static void
+gld_${EMULATION_NAME}_after_open (void)
+{
+ /* Pass the wacky PE command line options into the output bfd.
+ FIXME: This should be done via a function, rather than by
+ including an internal BFD header. */
+ if (!coff_data(link_info.output_bfd)->pe)
+ {
+ einfo ("%F%P: PE operations on non PE file.\n");
+ }
+
+ pe_data(link_info.output_bfd)->pe_opthdr = pe;
+ pe_data(link_info.output_bfd)->dll = init[DLLOFF].value;
+
+}
+
+/* Callback functions for qsort in sort_sections. */
+
+static int
+sort_by_file_name (const void *a, const void *b)
+{
+ const lang_statement_union_type *const *ra = a;
+ const lang_statement_union_type *const *rb = b;
+ int i, a_sec, b_sec;
+
+ i = strcmp ((*ra)->input_section.section->owner->my_archive->filename,
+ (*rb)->input_section.section->owner->my_archive->filename);
+ if (i != 0)
+ return i;
+
+ i = strcmp ((*ra)->input_section.section->owner->filename,
+ (*rb)->input_section.section->owner->filename);
+ if (i != 0)
+ return i;
+ /* the tail idata4/5 are the only ones without relocs to an
+ idata$6 section unless we are importing by ordinal,
+ so sort them to last to terminate the IAT
+ and HNT properly. if no reloc this one is import by ordinal
+ so we have to sort by section contents */
+
+ if ( ((*ra)->input_section.section->reloc_count + (*rb)->input_section.section->reloc_count) )
+ {
+ i = (((*ra)->input_section.section->reloc_count >
+ (*rb)->input_section.section->reloc_count) ? -1 : 0);
+ if ( i != 0)
+ return i;
+
+ return (((*ra)->input_section.section->reloc_count >
+ (*rb)->input_section.section->reloc_count) ? 0 : 1);
+ }
+ else
+ {
+ if ( (strcmp( (*ra)->input_section.section->name, ".idata$6") == 0) )
+ return 0; /* don't sort .idata$6 or .idata$7 FIXME dlltool eliminate .idata$7 */
+
+ if (! bfd_get_section_contents ((*ra)->input_section.section->owner,
+ (*ra)->input_section.section, &a_sec, (file_ptr) 0, (bfd_size_type)sizeof(a_sec)))
+ einfo ("%F%B: Can't read contents of section .idata: %E\n",
+ (*ra)->input_section.section->owner);
+
+ if (! bfd_get_section_contents ((*rb)->input_section.section->owner,
+ (*rb)->input_section.section, &b_sec, (file_ptr) 0, (bfd_size_type)sizeof(b_sec) ))
+ einfo ("%F%B: Can't read contents of section .idata: %E\n",
+ (*rb)->input_section.section->owner);
+
+ i = ((a_sec < b_sec) ? -1 : 0);
+ if ( i != 0)
+ return i;
+ return ((a_sec < b_sec) ? 0 : 1);
+ }
+return 0;
+}
+
+static int
+sort_by_section_name (const void *a, const void *b)
+{
+ const lang_statement_union_type *const *ra = a;
+ const lang_statement_union_type *const *rb = b;
+ int i;
+ i = strcmp ((*ra)->input_section.section->name,
+ (*rb)->input_section.section->name);
+ /* This is a hack to make .stab and .stabstr last, so we don't have
+ to fix strip/objcopy for .reloc sections.
+ FIXME stripping images with a .rsrc section still needs to be fixed. */
+ if (i != 0)
+ {
+ if ((CONST_STRNEQ ((*ra)->input_section.section->name, ".stab"))
+ && (! CONST_STRNEQ ((*rb)->input_section.section->name, ".stab")))
+ return 1;
+ }
+ return i;
+}
+
+/* Subroutine of sort_sections to a contiguous subset of a list of sections.
+ NEXT_AFTER is the element after the last one to sort.
+ The result is a pointer to the last element's "next" pointer. */
+
+static lang_statement_union_type **
+sort_sections_1 (lang_statement_union_type **startptr,
+ lang_statement_union_type *next_after,
+ int count,
+ int (*sort_func) (const void *, const void *))
+{
+ lang_statement_union_type **vec;
+ lang_statement_union_type *p;
+ int i;
+ lang_statement_union_type **ret;
+
+ if (count == 0)
+ return startptr;
+
+ vec = ((lang_statement_union_type **)
+ xmalloc (count * sizeof (lang_statement_union_type *)));
+
+ for (p = *startptr, i = 0; i < count; i++, p = p->header.next)
+ vec[i] = p;
+
+ qsort (vec, count, sizeof (vec[0]), sort_func);
+
+ /* Fill in the next pointers again. */
+ *startptr = vec[0];
+ for (i = 0; i < count - 1; i++)
+ vec[i]->header.next = vec[i + 1];
+ vec[i]->header.next = next_after;
+ ret = &vec[i]->header.next;
+ free (vec);
+ return ret;
+}
+
+/* Sort the .idata\$foo input sections of archives into filename order.
+ The reason is so dlltool can arrange to have the pe dll import information
+ generated correctly - the head of the list goes into dh.o, the tail into
+ dt.o, and the guts into ds[nnnn].o. Note that this is only needed for the
+ .idata section.
+ FIXME: This may no longer be necessary with grouped sections. Instead of
+ sorting on dh.o, ds[nnnn].o, dt.o, one could, for example, have dh.o use
+ .idata\$4h, have ds[nnnn].o use .idata\$4s[nnnn], and have dt.o use .idata\$4t.
+ This would have to be elaborated upon to handle multiple dll's
+ [assuming such an eloboration is possible of course].
+
+ We also sort sections in '\$' wild statements. These are created by the
+ place_orphans routine to implement grouped sections. */
+
+static void
+sort_sections (lang_statement_union_type *s)
+{
+ for (; s ; s = s->header.next)
+ switch (s->header.type)
+ {
+ case lang_output_section_statement_enum:
+ sort_sections (s->output_section_statement.children.head);
+ break;
+ case lang_wild_statement_enum:
+ {
+ lang_statement_union_type **p = &s->wild_statement.children.head;
+ struct wildcard_list *sec;
+
+ for (sec = s->wild_statement.section_list; sec; sec = sec->next)
+ {
+ /* Is this the .idata section? */
+ if (sec->spec.name != NULL
+ && CONST_STRNEQ (sec->spec.name, ".idata"))
+ {
+ /* Sort the children. We want to sort any objects in
+ the same archive. In order to handle the case of
+ including a single archive multiple times, we sort
+ all the children by archive name and then by object
+ name. After sorting them, we re-thread the pointer
+ chain. */
+
+ while (*p)
+ {
+ lang_statement_union_type *start = *p;
+ if (start->header.type != lang_input_section_enum
+ || !start->input_section.section->owner->my_archive)
+ p = &(start->header.next);
+ else
+ {
+ lang_statement_union_type *end;
+ int count;
+
+ for (end = start, count = 0;
+ end && (end->header.type
+ == lang_input_section_enum);
+ end = end->header.next)
+ count++;
+
+ p = sort_sections_1 (p, end, count,
+ sort_by_file_name);
+ }
+ }
+ break;
+ }
+
+ /* If this is a collection of grouped sections, sort them.
+ The linker script must explicitly mention "*(.foo\$)" or
+ "*(.foo\$*)". Don't sort them if \$ is not the last
+ character (not sure if this is really useful, but it
+ allows explicitly mentioning some \$ sections and letting
+ the linker handle the rest). */
+ if (sec->spec.name != NULL)
+ {
+ char *q = strchr (sec->spec.name, '\$');
+
+ if (q != NULL
+ && (q[1] == '\0'
+ || (q[1] == '*' && q[2] == '\0')))
+ {
+ lang_statement_union_type *end;
+ int count;
+
+ for (end = *p, count = 0; end; end = end->header.next)
+ {
+ if (end->header.type != lang_input_section_enum)
+ abort ();
+ count++;
+ }
+ (void) sort_sections_1 (p, end, count,
+ sort_by_section_name);
+ }
+ break;
+ }
+ }
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+static void
+gld_${EMULATION_NAME}_before_allocation (void)
+{
+#ifdef TARGET_IS_ppcpe
+ /* Here we rummage through the found bfds to collect toc information */
+ {
+ LANG_FOR_EACH_INPUT_STATEMENT (is)
+ {
+ if (!ppc_process_before_allocation(is->the_bfd, &link_info))
+ {
+ einfo("Errors encountered processing file %s\n", is->filename);
+ }
+ }
+ }
+
+ /* We have seen it all. Allocate it, and carry on */
+ ppc_allocate_toc_section (&link_info);
+#else
+#ifdef TARGET_IS_armpe
+ /* FIXME: we should be able to set the size of the interworking stub
+ section.
+
+ Here we rummage through the found bfds to collect glue
+ information. FIXME: should this be based on a command line
+ option? krk@cygnus.com */
+ {
+ LANG_FOR_EACH_INPUT_STATEMENT (is)
+ {
+ if (!arm_process_before_allocation (is->the_bfd, & link_info))
+ {
+ einfo ("Errors encountered processing file %s", is->filename);
+ }
+ }
+ }
+
+ /* We have seen it all. Allocate it, and carry on */
+ arm_allocate_interworking_sections (& link_info);
+#endif /* TARGET_IS_armpe */
+#endif /* TARGET_IS_ppcpe */
+
+ sort_sections (stat_ptr->head);
+
+ before_allocation_default ();
+}
+
+/* Place an orphan section. We use this to put sections with a '\$' in them
+ into the right place. Any section with a '\$' in them (e.g. .text\$foo)
+ gets mapped to the output section with everything from the '\$' on stripped
+ (e.g. .text).
+ See the Microsoft Portable Executable and Common Object File Format
+ Specification 4.1, section 4.2, Grouped Sections.
+
+ FIXME: This is now handled by the linker script using wildcards,
+ but I'm leaving this here in case we want to enable it for sections
+ which are not mentioned in the linker script. */
+
+static lang_output_section_statement_type *
+gld${EMULATION_NAME}_place_orphan (asection *s,
+ const char *secname,
+ int constraint)
+{
+ char *output_secname, *ps;
+ lang_output_section_statement_type *os;
+ lang_statement_union_type *l;
+
+ if ((s->flags & SEC_ALLOC) == 0)
+ return NULL;
+
+ /* Don't process grouped sections unless doing a final link.
+ If they're marked as COMDAT sections, we don't want .text\$foo to
+ end up in .text and then have .text disappear because it's marked
+ link-once-discard. */
+ if (link_info.relocatable)
+ return NULL;
+
+ /* Everything from the '\$' on gets deleted so don't allow '\$' as the
+ first character. */
+ if (*secname == '\$')
+ einfo ("%P%F: section %s has '\$' as first character\n", secname);
+ if (strchr (secname + 1, '\$') == NULL)
+ return NULL;
+
+ /* Look up the output section. The Microsoft specs say sections names in
+ image files never contain a '\$'. Fortunately, lang_..._lookup creates
+ the section if it doesn't exist. */
+ output_secname = xstrdup (secname);
+ ps = strchr (output_secname + 1, '\$');
+ *ps = 0;
+ os = lang_output_section_statement_lookup (output_secname, constraint, TRUE);
+
+ /* Find the '\$' wild statement for this section. We currently require the
+ linker script to explicitly mention "*(.foo\$)".
+ FIXME: ppcpe.sc has .CRT\$foo in the .rdata section. According to the
+ Microsoft docs this isn't correct so it's not (currently) handled. */
+
+ ps[0] = '\$';
+ ps[1] = 0;
+ for (l = os->children.head; l; l = l->header.next)
+ if (l->header.type == lang_wild_statement_enum)
+ {
+ struct wildcard_list *sec;
+
+ for (sec = l->wild_statement.section_list; sec; sec = sec->next)
+ if (sec->spec.name && strcmp (sec->spec.name, output_secname) == 0)
+ break;
+ if (sec)
+ break;
+ }
+ ps[0] = 0;
+ if (l == NULL)
+ einfo ("%P%F: *(%s\$) missing from linker script\n", output_secname);
+
+ /* Link the input section in and we're done for now.
+ The sections still have to be sorted, but that has to wait until
+ all such sections have been processed by us. The sorting is done by
+ sort_sections. */
+ lang_add_section (&l->wild_statement.children, s, os);
+
+ return os;
+}
+
+static char *
+gld_${EMULATION_NAME}_get_script (int *isfile)
+EOF
+# Scripts compiled in.
+# sed commands to quote an ld script as a C string.
+sc="-f stringify.sed"
+
+fragment <<EOF
+{
+ *isfile = 0;
+
+ if (link_info.relocatable && config.build_constructors)
+ return
+EOF
+sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c
+echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c
+echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c
+echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c
+echo ' ; else return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
+echo '; }' >> e${EMULATION_NAME}.c
+
+fragment <<EOF
+
+
+struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
+{
+ gld_${EMULATION_NAME}_before_parse,
+ syslib_default,
+ hll_default,
+ after_parse_default,
+ gld_${EMULATION_NAME}_after_open,
+ after_allocation_default,
+ set_output_arch_default,
+ ldemul_default_target,
+ gld_${EMULATION_NAME}_before_allocation,
+ gld_${EMULATION_NAME}_get_script,
+ "${EMULATION_NAME}",
+ "${OUTPUT_FORMAT}",
+ finish_default,
+ NULL, /* create output section statements */
+ NULL, /* open dynamic archive */
+ gld${EMULATION_NAME}_place_orphan,
+ gld_${EMULATION_NAME}_set_symbols,
+ NULL, /* parse_args */
+ gld${EMULATION_NAME}_add_options,
+ gld${EMULATION_NAME}_handle_option,
+ NULL, /* unrecognized file */
+ NULL, /* list options */
+ NULL, /* recognized file */
+ NULL, /* find_potential_libraries */
+ NULL /* new_vers_pattern */
+};
+EOF
diff --git a/binutils-2.21/ld/emultempl/cr16elf.em b/binutils-2.21/ld/emultempl/cr16elf.em
new file mode 100644
index 0000000..9850bda
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/cr16elf.em
@@ -0,0 +1,183 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2007, 2008, 2009 Free Software Foundation, Inc.
+# Contributed by M R Swami Reddy <MR.Swami.Reddy@nsc.com>
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em, and defines extra cr16-elf
+# specific routines.
+#
+fragment <<EOF
+
+#include "ldctor.h"
+
+static void check_sections (bfd *, asection *, void *);
+
+
+/* This function is run after all the input files have been opened. */
+
+static void
+cr16_elf_after_open (void)
+{
+ /* Call the standard elf routine. */
+ gld${EMULATION_NAME}_after_open ();
+
+ if (command_line.embedded_relocs
+ && (! link_info.relocatable))
+ {
+ bfd *abfd;
+
+ /* In the embedded relocs mode we create a .emreloc section for each
+ input file with a nonzero .data section. The BFD backend will fill in
+ these sections with magic numbers which can be used to relocate the
+ data section at run time. */
+ for (abfd = link_info.input_bfds; abfd != NULL; abfd = abfd->link_next)
+ {
+ asection *datasec;
+
+ /* As first-order business, make sure that each input BFD is either
+ COFF or ELF. We need to call a special BFD backend function to
+ generate the embedded relocs, and we have such functions only for
+ COFF and ELF. */
+ if (bfd_get_flavour (abfd) != bfd_target_coff_flavour
+ && bfd_get_flavour (abfd) != bfd_target_elf_flavour)
+ einfo ("%F%B: all input objects must be COFF or ELF for --embedded-relocs\n");
+
+ datasec = bfd_get_section_by_name (abfd, ".data.rel");
+
+ /* Note that we assume that the reloc_count field has already
+ been set up. We could call bfd_get_reloc_upper_bound, but
+ that returns the size of a memory buffer rather than a reloc
+ count. We do not want to call bfd_canonicalize_reloc,
+ because although it would always work it would force us to
+ read in the relocs into BFD canonical form, which would waste
+ a significant amount of time and memory. */
+ if (datasec != NULL && datasec->reloc_count > 0)
+ {
+ asection *relsec;
+
+ relsec = bfd_make_section (abfd, ".emreloc");
+ if (relsec == NULL
+ || ! bfd_set_section_flags (abfd, relsec,
+ (SEC_ALLOC
+ | SEC_LOAD
+ | SEC_HAS_CONTENTS
+ | SEC_IN_MEMORY))
+ || ! bfd_set_section_alignment (abfd, relsec, 2)
+ || ! bfd_set_section_size (abfd, relsec,
+ datasec->reloc_count * 8))
+ einfo ("%F%B: can not create .emreloc section: %E\n");
+ }
+
+ /* Double check that all other data sections are empty, as is
+ required for embedded PIC code. */
+ bfd_map_over_sections (abfd, check_sections, datasec);
+ }
+ }
+}
+
+/* Check that of the data sections, only the .data section has
+ relocs. This is called via bfd_map_over_sections. */
+
+static void
+check_sections (bfd *abfd, asection *sec, void *datasec)
+{
+ if ((strncmp (bfd_get_section_name (abfd, sec), ".data.rel", 9) == 0)
+ && sec != datasec
+ && sec->reloc_count == 0 )
+ einfo ("%B%X: section %s has relocs; can not use --embedded-relocs\n",
+ abfd, bfd_get_section_name (abfd, sec));
+}
+
+static void
+cr16elf_after_parse (void)
+{
+ /* Always behave as if called with --sort-common command line
+ option.
+ This is to emulate the CRTools' method of keeping variables
+ of different alignment in separate sections. */
+ config.sort_common = TRUE;
+
+ /* Don't create a demand-paged executable, since this feature isn't
+ meaninful in CR16 embedded systems. Moreover, when magic_demand_paged
+ is true the link sometimes fails. */
+ config.magic_demand_paged = FALSE;
+
+ after_parse_default ();
+}
+
+/* This is called after the sections have been attached to output
+ sections, but before any sizes or addresses have been set. */
+
+static void
+cr16elf_before_allocation (void)
+{
+ /* Call the default first. */
+ gld${EMULATION_NAME}_before_allocation ();
+
+ if (command_line.embedded_relocs
+ && (! link_info.relocatable))
+ {
+
+ bfd *abfd;
+
+ /* If we are generating embedded relocs, call a special BFD backend
+ routine to do the work. */
+ for (abfd = link_info.input_bfds; abfd != NULL; abfd = abfd->link_next)
+ {
+ asection *datasec, *relsec;
+ char *errmsg;
+
+ datasec = bfd_get_section_by_name (abfd, ".data.rel");
+
+ if (datasec == NULL || datasec->reloc_count == 0)
+ continue;
+
+ relsec = bfd_get_section_by_name (abfd, ".emreloc");
+ ASSERT (relsec != NULL);
+
+ if (! bfd_cr16_elf32_create_embedded_relocs (abfd, &link_info,
+ datasec, relsec,
+ &errmsg))
+ {
+ if (errmsg == NULL)
+ einfo ("%B%X: can not create runtime reloc information: %E\n",
+ abfd);
+ else
+ einfo ("%X%B: can not create runtime reloc information: %s\n",
+ abfd, errmsg);
+ }
+ }
+ }
+
+ /* Enable relaxation by default if the "--no-relax" option was not
+ specified. This is done here instead of in the before_parse hook
+ because there is a check in main() to prohibit use of --relax and
+ -r together. */
+ if (RELAXATION_DISABLED_BY_DEFAULT)
+ ENABLE_RELAXATION;
+}
+
+EOF
+
+# Put these extra cr16-elf routines in ld_${EMULATION_NAME}_emulation
+#
+LDEMUL_AFTER_OPEN=cr16_elf_after_open
+LDEMUL_AFTER_PARSE=cr16elf_after_parse
+LDEMUL_BEFORE_ALLOCATION=cr16elf_before_allocation
diff --git a/binutils-2.21/ld/emultempl/crxelf.em b/binutils-2.21/ld/emultempl/crxelf.em
new file mode 100644
index 0000000..c6d5a8d
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/crxelf.em
@@ -0,0 +1,71 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2004, 2005, 2007, 2009
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em, and defines extra crx-elf
+# specific routines.
+#
+fragment <<EOF
+
+#include "ldctor.h"
+
+static void crxelf_after_parse (void);
+
+static void
+crxelf_after_parse (void)
+{
+ /* Always behave as if called with --sort-common command line
+ option.
+ This is to emulate the CRTools' method of keeping variables
+ of different alignment in separate sections. */
+ config.sort_common = TRUE;
+
+ /* Don't create a demand-paged executable, since this feature isn't
+ meaninful in CRX embedded systems. Moreover, when magic_demand_paged
+ is true the link sometimes fails. */
+ config.magic_demand_paged = FALSE;
+
+ after_parse_default ();
+}
+
+/* This is called after the sections have been attached to output
+ sections, but before any sizes or addresses have been set. */
+
+static void
+crxelf_before_allocation (void)
+{
+ /* Call the default first. */
+ gld${EMULATION_NAME}_before_allocation ();
+
+ /* Enable relaxation by default if the "--no-relax" option was not
+ specified. This is done here instead of in the before_parse hook
+ because there is a check in main() to prohibit use of --relax and
+ -r together. */
+ if (RELAXATION_DISABLED_BY_DEFAULT)
+ ENABLE_RELAXATION;
+}
+
+EOF
+
+# Put these extra crx-elf routines in ld_${EMULATION_NAME}_emulation
+#
+LDEMUL_AFTER_PARSE=crxelf_after_parse
+LDEMUL_BEFORE_ALLOCATION=crxelf_before_allocation
diff --git a/binutils-2.21/ld/emultempl/elf-generic.em b/binutils-2.21/ld/emultempl/elf-generic.em
new file mode 100644
index 0000000..cf4c2c8
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/elf-generic.em
@@ -0,0 +1,73 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em and from ELF targets that use
+# generic.em.
+#
+fragment <<EOF
+
+static void
+gld${EMULATION_NAME}_map_segments (bfd_boolean need_layout)
+{
+ int tries = 10;
+
+ do
+ {
+ lang_relax_sections (need_layout);
+ need_layout = FALSE;
+
+ if (link_info.output_bfd->xvec->flavour == bfd_target_elf_flavour
+ && !link_info.relocatable)
+ {
+ bfd_size_type phdr_size;
+
+ phdr_size = elf_tdata (link_info.output_bfd)->program_header_size;
+ /* If we don't have user supplied phdrs, throw away any
+ previous linker generated program headers. */
+ if (lang_phdr_list == NULL)
+ elf_tdata (link_info.output_bfd)->segment_map = NULL;
+ if (!_bfd_elf_map_sections_to_segments (link_info.output_bfd,
+ &link_info))
+ einfo ("%F%P: map sections to segments failed: %E\n");
+
+ if (phdr_size
+ != elf_tdata (link_info.output_bfd)->program_header_size)
+ {
+ if (tries > 6)
+ /* The first few times we allow any change to
+ phdr_size . */
+ need_layout = TRUE;
+ else if (phdr_size
+ < elf_tdata (link_info.output_bfd)->program_header_size)
+ /* After that we only allow the size to grow. */
+ need_layout = TRUE;
+ else
+ elf_tdata (link_info.output_bfd)->program_header_size
+ = phdr_size;
+ }
+ }
+ }
+ while (need_layout && --tries);
+
+ if (tries == 0)
+ einfo (_("%P%F: looping in map_segments"));
+}
+EOF
diff --git a/binutils-2.21/ld/emultempl/elf32.em b/binutils-2.21/ld/emultempl/elf32.em
new file mode 100644
index 0000000..1950efe
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/elf32.em
@@ -0,0 +1,2495 @@
+# This shell script emits a C file. -*- C -*-
+# It does some substitutions.
+# This file is now misnamed, because it supports both 32 bit and 64 bit
+# ELF emulations.
+test -z "${ELFSIZE}" && ELFSIZE=32
+if [ -z "$MACHINE" ]; then
+ OUTPUT_ARCH=${ARCH}
+else
+ OUTPUT_ARCH=${ARCH}:${MACHINE}
+fi
+fragment <<EOF
+/* This file is is generated by a shell script. DO NOT EDIT! */
+
+/* ${ELFSIZE} bit ELF emulation code for ${EMULATION_NAME}
+ Copyright 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+ 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+ Free Software Foundation, Inc.
+ Written by Steve Chamberlain <sac@cygnus.com>
+ ELF support by Ian Lance Taylor <ian@cygnus.com>
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#define TARGET_IS_${EMULATION_NAME}
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libiberty.h"
+#include "safe-ctype.h"
+#include "getopt.h"
+#include "md5.h"
+#include "sha1.h"
+#include <fcntl.h>
+
+#include "bfdlink.h"
+
+#include "ld.h"
+#include "ldmain.h"
+#include "ldmisc.h"
+#include "ldexp.h"
+#include "ldlang.h"
+#include "ldfile.h"
+#include "ldemul.h"
+#include <ldgram.h>
+#include "elf/common.h"
+#include "elf-bfd.h"
+#include "filenames.h"
+
+/* Declare functions used by various EXTRA_EM_FILEs. */
+static void gld${EMULATION_NAME}_before_parse (void);
+static void gld${EMULATION_NAME}_after_open (void);
+static void gld${EMULATION_NAME}_before_allocation (void);
+static void gld${EMULATION_NAME}_after_allocation (void);
+static lang_output_section_statement_type *gld${EMULATION_NAME}_place_orphan
+ (asection *, const char *, int);
+EOF
+
+if [ "x${USE_LIBPATH}" = xyes ] ; then
+ case ${target} in
+ *-*-linux-* | *-*-k*bsd*-*)
+ fragment <<EOF
+#ifdef HAVE_GLOB
+#include <glob.h>
+#endif
+EOF
+ ;;
+ esac
+fi
+
+# Import any needed special functions and/or overrides.
+#
+source_em ${srcdir}/emultempl/elf-generic.em
+if test -n "$EXTRA_EM_FILE" ; then
+ source_em ${srcdir}/emultempl/${EXTRA_EM_FILE}.em
+fi
+
+# Functions in this file can be overridden by setting the LDEMUL_* shell
+# variables. If the name of the overriding function is the same as is
+# defined in this file, then don't output this file's version.
+# If a different overriding name is given then output the standard function
+# as presumably it is called from the overriding function.
+#
+if test x"$LDEMUL_BEFORE_PARSE" != xgld"$EMULATION_NAME"_before_parse; then
+fragment <<EOF
+
+static void
+gld${EMULATION_NAME}_before_parse (void)
+{
+ ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
+ config.dynamic_link = ${DYNAMIC_LINK-TRUE};
+ config.has_shared = `if test -n "$GENERATE_SHLIB_SCRIPT" ; then echo TRUE ; else echo FALSE ; fi`;
+}
+
+EOF
+fi
+
+if test x"$LDEMUL_RECOGNIZED_FILE" != xgld"${EMULATION_NAME}"_load_symbols; then
+fragment <<EOF
+/* Handle the generation of DT_NEEDED tags. */
+
+static bfd_boolean
+gld${EMULATION_NAME}_load_symbols (lang_input_statement_type *entry)
+{
+ int link_class = 0;
+
+ /* Tell the ELF linker that we don't want the output file to have a
+ DT_NEEDED entry for this file, unless it is used to resolve
+ references in a regular object. */
+ if (entry->add_DT_NEEDED_for_regular)
+ link_class = DYN_AS_NEEDED;
+
+ /* Tell the ELF linker that we don't want the output file to have a
+ DT_NEEDED entry for any dynamic library in DT_NEEDED tags from
+ this file at all. */
+ if (!entry->add_DT_NEEDED_for_dynamic)
+ link_class |= DYN_NO_ADD_NEEDED;
+
+ if (entry->just_syms_flag
+ && (bfd_get_file_flags (entry->the_bfd) & DYNAMIC) != 0)
+ einfo (_("%P%F: --just-symbols may not be used on DSO: %B\n"),
+ entry->the_bfd);
+
+ if (link_class == 0
+ || (bfd_get_file_flags (entry->the_bfd) & DYNAMIC) == 0)
+ return FALSE;
+
+ bfd_elf_set_dyn_lib_class (entry->the_bfd,
+ (enum dynamic_lib_link_class) link_class);
+
+ /* Continue on with normal load_symbols processing. */
+ return FALSE;
+}
+EOF
+fi
+
+fragment <<EOF
+
+/* These variables are required to pass information back and forth
+ between after_open and check_needed and stat_needed and vercheck. */
+
+static struct bfd_link_needed_list *global_needed;
+static struct stat global_stat;
+static lang_input_statement_type *global_found;
+static struct bfd_link_needed_list *global_vercheck_needed;
+static bfd_boolean global_vercheck_failed;
+
+/* These variables are used to implement target options */
+
+static char *audit; /* colon (typically) separated list of libs */
+static char *depaudit; /* colon (typically) separated list of libs */
+
+/* On Linux, it's possible to have different versions of the same
+ shared library linked against different versions of libc. The
+ dynamic linker somehow tags which libc version to use in
+ /etc/ld.so.cache, and, based on the libc that it sees in the
+ executable, chooses which version of the shared library to use.
+
+ We try to do a similar check here by checking whether this shared
+ library needs any other shared libraries which may conflict with
+ libraries we have already included in the link. If it does, we
+ skip it, and try to find another shared library farther on down the
+ link path.
+
+ This is called via lang_for_each_input_file.
+ GLOBAL_VERCHECK_NEEDED is the list of objects needed by the object
+ which we are checking. This sets GLOBAL_VERCHECK_FAILED if we find
+ a conflicting version. */
+
+static void
+gld${EMULATION_NAME}_vercheck (lang_input_statement_type *s)
+{
+ const char *soname;
+ struct bfd_link_needed_list *l;
+
+ if (global_vercheck_failed)
+ return;
+ if (s->the_bfd == NULL
+ || (bfd_get_file_flags (s->the_bfd) & DYNAMIC) == 0)
+ return;
+
+ soname = bfd_elf_get_dt_soname (s->the_bfd);
+ if (soname == NULL)
+ soname = lbasename (bfd_get_filename (s->the_bfd));
+
+ for (l = global_vercheck_needed; l != NULL; l = l->next)
+ {
+ const char *suffix;
+
+ if (strcmp (soname, l->name) == 0)
+ {
+ /* Probably can't happen, but it's an easy check. */
+ continue;
+ }
+
+ if (strchr (l->name, '/') != NULL)
+ continue;
+
+ suffix = strstr (l->name, ".so.");
+ if (suffix == NULL)
+ continue;
+
+ suffix += sizeof ".so." - 1;
+
+ if (strncmp (soname, l->name, suffix - l->name) == 0)
+ {
+ /* Here we know that S is a dynamic object FOO.SO.VER1, and
+ the object we are considering needs a dynamic object
+ FOO.SO.VER2, and VER1 and VER2 are different. This
+ appears to be a version mismatch, so we tell the caller
+ to try a different version of this library. */
+ global_vercheck_failed = TRUE;
+ return;
+ }
+ }
+}
+
+
+/* See if an input file matches a DT_NEEDED entry by running stat on
+ the file. */
+
+static void
+gld${EMULATION_NAME}_stat_needed (lang_input_statement_type *s)
+{
+ struct stat st;
+ const char *suffix;
+ const char *soname;
+
+ if (global_found != NULL)
+ return;
+ if (s->the_bfd == NULL)
+ return;
+
+ /* If this input file was an as-needed entry, and wasn't found to be
+ needed at the stage it was linked, then don't say we have loaded it. */
+ if ((bfd_elf_get_dyn_lib_class (s->the_bfd) & DYN_AS_NEEDED) != 0)
+ return;
+
+ if (bfd_stat (s->the_bfd, &st) != 0)
+ {
+ einfo ("%P:%B: bfd_stat failed: %E\n", s->the_bfd);
+ return;
+ }
+
+ /* Some operating systems, e.g. Windows, do not provide a meaningful
+ st_ino; they always set it to zero. (Windows does provide a
+ meaningful st_dev.) Do not indicate a duplicate library in that
+ case. While there is no guarantee that a system that provides
+ meaningful inode numbers will never set st_ino to zero, this is
+ merely an optimization, so we do not need to worry about false
+ negatives. */
+ if (st.st_dev == global_stat.st_dev
+ && st.st_ino == global_stat.st_ino
+ && st.st_ino != 0)
+ {
+ global_found = s;
+ return;
+ }
+
+ /* We issue a warning if it looks like we are including two
+ different versions of the same shared library. For example,
+ there may be a problem if -lc picks up libc.so.6 but some other
+ shared library has a DT_NEEDED entry of libc.so.5. This is a
+ heuristic test, and it will only work if the name looks like
+ NAME.so.VERSION. FIXME: Depending on file names is error-prone.
+ If we really want to issue warnings about mixing version numbers
+ of shared libraries, we need to find a better way. */
+
+ if (strchr (global_needed->name, '/') != NULL)
+ return;
+ suffix = strstr (global_needed->name, ".so.");
+ if (suffix == NULL)
+ return;
+ suffix += sizeof ".so." - 1;
+
+ soname = bfd_elf_get_dt_soname (s->the_bfd);
+ if (soname == NULL)
+ soname = lbasename (s->filename);
+
+ if (strncmp (soname, global_needed->name, suffix - global_needed->name) == 0)
+ einfo ("%P: warning: %s, needed by %B, may conflict with %s\n",
+ global_needed->name, global_needed->by, soname);
+}
+
+struct dt_needed
+{
+ bfd *by;
+ const char *name;
+};
+
+/* This function is called for each possible name for a dynamic object
+ named by a DT_NEEDED entry. The FORCE parameter indicates whether
+ to skip the check for a conflicting version. */
+
+static bfd_boolean
+gld${EMULATION_NAME}_try_needed (struct dt_needed *needed,
+ int force)
+{
+ bfd *abfd;
+ const char *name = needed->name;
+ const char *soname;
+ int link_class;
+
+ abfd = bfd_openr (name, bfd_get_target (link_info.output_bfd));
+ if (abfd == NULL)
+ return FALSE;
+
+ /* Linker needs to decompress sections. */
+ abfd->flags |= BFD_DECOMPRESS;
+
+ if (! bfd_check_format (abfd, bfd_object))
+ {
+ bfd_close (abfd);
+ return FALSE;
+ }
+ if ((bfd_get_file_flags (abfd) & DYNAMIC) == 0)
+ {
+ bfd_close (abfd);
+ return FALSE;
+ }
+
+ /* For DT_NEEDED, they have to match. */
+ if (abfd->xvec != link_info.output_bfd->xvec)
+ {
+ bfd_close (abfd);
+ return FALSE;
+ }
+
+ /* Check whether this object would include any conflicting library
+ versions. If FORCE is set, then we skip this check; we use this
+ the second time around, if we couldn't find any compatible
+ instance of the shared library. */
+
+ if (! force)
+ {
+ struct bfd_link_needed_list *needs;
+
+ if (! bfd_elf_get_bfd_needed_list (abfd, &needs))
+ einfo ("%F%P:%B: bfd_elf_get_bfd_needed_list failed: %E\n", abfd);
+
+ if (needs != NULL)
+ {
+ global_vercheck_needed = needs;
+ global_vercheck_failed = FALSE;
+ lang_for_each_input_file (gld${EMULATION_NAME}_vercheck);
+ if (global_vercheck_failed)
+ {
+ bfd_close (abfd);
+ /* Return FALSE to force the caller to move on to try
+ another file on the search path. */
+ return FALSE;
+ }
+
+ /* But wait! It gets much worse. On Linux, if a shared
+ library does not use libc at all, we are supposed to skip
+ it the first time around in case we encounter a shared
+ library later on with the same name which does use the
+ version of libc that we want. This is much too horrible
+ to use on any system other than Linux. */
+
+EOF
+case ${target} in
+ *-*-linux-* | *-*-k*bsd*-*)
+ fragment <<EOF
+ {
+ struct bfd_link_needed_list *l;
+
+ for (l = needs; l != NULL; l = l->next)
+ if (CONST_STRNEQ (l->name, "libc.so"))
+ break;
+ if (l == NULL)
+ {
+ bfd_close (abfd);
+ return FALSE;
+ }
+ }
+
+EOF
+ ;;
+esac
+fragment <<EOF
+ }
+ }
+
+ /* We've found a dynamic object matching the DT_NEEDED entry. */
+
+ /* We have already checked that there is no other input file of the
+ same name. We must now check again that we are not including the
+ same file twice. We need to do this because on many systems
+ libc.so is a symlink to, e.g., libc.so.1. The SONAME entry will
+ reference libc.so.1. If we have already included libc.so, we
+ don't want to include libc.so.1 if they are the same file, and we
+ can only check that using stat. */
+
+ if (bfd_stat (abfd, &global_stat) != 0)
+ einfo ("%F%P:%B: bfd_stat failed: %E\n", abfd);
+
+ /* First strip off everything before the last '/'. */
+ soname = lbasename (abfd->filename);
+
+ if (trace_file_tries)
+ info_msg (_("found %s at %s\n"), soname, name);
+
+ global_found = NULL;
+ lang_for_each_input_file (gld${EMULATION_NAME}_stat_needed);
+ if (global_found != NULL)
+ {
+ /* Return TRUE to indicate that we found the file, even though
+ we aren't going to do anything with it. */
+ return TRUE;
+ }
+
+ /* Specify the soname to use. */
+ bfd_elf_set_dt_needed_name (abfd, soname);
+
+ /* Tell the ELF linker that we don't want the output file to have a
+ DT_NEEDED entry for this file, unless it is used to resolve
+ references in a regular object. */
+ link_class = DYN_DT_NEEDED;
+
+ /* Tell the ELF linker that we don't want the output file to have a
+ DT_NEEDED entry for this file at all if the entry is from a file
+ with DYN_NO_ADD_NEEDED. */
+ if (needed->by != NULL
+ && (bfd_elf_get_dyn_lib_class (needed->by) & DYN_NO_ADD_NEEDED) != 0)
+ link_class |= DYN_NO_NEEDED | DYN_NO_ADD_NEEDED;
+
+ bfd_elf_set_dyn_lib_class (abfd, (enum dynamic_lib_link_class) link_class);
+
+ /* Add this file into the symbol table. */
+ if (! bfd_link_add_symbols (abfd, &link_info))
+ einfo ("%F%B: could not read symbols: %E\n", abfd);
+
+ return TRUE;
+}
+
+
+/* Search for a needed file in a path. */
+
+static bfd_boolean
+gld${EMULATION_NAME}_search_needed (const char *path,
+ struct dt_needed *n, int force)
+{
+ const char *s;
+ const char *name = n->name;
+ size_t len;
+ struct dt_needed needed;
+
+ if (name[0] == '/')
+ return gld${EMULATION_NAME}_try_needed (n, force);
+
+ if (path == NULL || *path == '\0')
+ return FALSE;
+
+ needed.by = n->by;
+ needed.name = n->name;
+
+ len = strlen (name);
+ while (1)
+ {
+ char *filename, *sset;
+
+ s = strchr (path, config.rpath_separator);
+ if (s == NULL)
+ s = path + strlen (path);
+
+#if HAVE_DOS_BASED_FILE_SYSTEM
+ /* Assume a match on the second char is part of drive specifier. */
+ else if (config.rpath_separator == ':'
+ && s == path + 1
+ && ISALPHA (*path))
+ {
+ s = strchr (s + 1, config.rpath_separator);
+ if (s == NULL)
+ s = path + strlen (path);
+ }
+#endif
+ filename = (char *) xmalloc (s - path + len + 2);
+ if (s == path)
+ sset = filename;
+ else
+ {
+ memcpy (filename, path, s - path);
+ filename[s - path] = '/';
+ sset = filename + (s - path) + 1;
+ }
+ strcpy (sset, name);
+
+ needed.name = filename;
+ if (gld${EMULATION_NAME}_try_needed (&needed, force))
+ return TRUE;
+
+ free (filename);
+
+ if (*s == '\0')
+ break;
+ path = s + 1;
+ }
+
+ return FALSE;
+}
+
+EOF
+if [ "x${USE_LIBPATH}" = xyes ] ; then
+ fragment <<EOF
+
+/* Add the sysroot to every entry in a path separated by
+ config.rpath_separator. */
+
+static char *
+gld${EMULATION_NAME}_add_sysroot (const char *path)
+{
+ int len, colons, i;
+ char *ret, *p;
+
+ len = strlen (path);
+ colons = 0;
+ i = 0;
+ while (path[i])
+ if (path[i++] == config.rpath_separator)
+ colons++;
+
+ if (path[i])
+ colons++;
+
+ len = len + (colons + 1) * strlen (ld_sysroot);
+ ret = xmalloc (len + 1);
+ strcpy (ret, ld_sysroot);
+ p = ret + strlen (ret);
+ i = 0;
+ while (path[i])
+ if (path[i] == config.rpath_separator)
+ {
+ *p++ = path[i++];
+ strcpy (p, ld_sysroot);
+ p = p + strlen (p);
+ }
+ else
+ *p++ = path[i++];
+
+ *p = 0;
+ return ret;
+}
+
+EOF
+ case ${target} in
+ *-*-freebsd* | *-*-dragonfly*)
+ fragment <<EOF
+/* Read the system search path the FreeBSD way rather than the Linux way. */
+#ifdef HAVE_ELF_HINTS_H
+#include <elf-hints.h>
+#else
+#include "elf-hints-local.h"
+#endif
+
+static bfd_boolean
+gld${EMULATION_NAME}_check_ld_elf_hints (const char *name, int force)
+{
+ static bfd_boolean initialized;
+ static char *ld_elf_hints;
+ struct dt_needed needed;
+
+ if (!initialized)
+ {
+ FILE *f;
+ char *tmppath;
+
+ tmppath = concat (ld_sysroot, _PATH_ELF_HINTS, (const char *) NULL);
+ f = fopen (tmppath, FOPEN_RB);
+ free (tmppath);
+ if (f != NULL)
+ {
+ struct elfhints_hdr hdr;
+
+ if (fread (&hdr, 1, sizeof (hdr), f) == sizeof (hdr)
+ && hdr.magic == ELFHINTS_MAGIC
+ && hdr.version == 1)
+ {
+ if (fseek (f, hdr.strtab + hdr.dirlist, SEEK_SET) != -1)
+ {
+ char *b;
+
+ b = xmalloc (hdr.dirlistlen + 1);
+ if (fread (b, 1, hdr.dirlistlen + 1, f) ==
+ hdr.dirlistlen + 1)
+ ld_elf_hints = gld${EMULATION_NAME}_add_sysroot (b);
+
+ free (b);
+ }
+ }
+ fclose (f);
+ }
+
+ initialized = TRUE;
+ }
+
+ if (ld_elf_hints == NULL)
+ return FALSE;
+
+ needed.by = NULL;
+ needed.name = name;
+ return gld${EMULATION_NAME}_search_needed (ld_elf_hints, & needed,
+ force);
+}
+EOF
+ # FreeBSD
+ ;;
+
+ *-*-linux-* | *-*-k*bsd*-*)
+ fragment <<EOF
+/* For a native linker, check the file /etc/ld.so.conf for directories
+ in which we may find shared libraries. /etc/ld.so.conf is really
+ only meaningful on Linux. */
+
+struct gld${EMULATION_NAME}_ld_so_conf
+{
+ char *path;
+ size_t len, alloc;
+};
+
+static bfd_boolean
+gld${EMULATION_NAME}_parse_ld_so_conf
+ (struct gld${EMULATION_NAME}_ld_so_conf *info, const char *filename);
+
+static void
+gld${EMULATION_NAME}_parse_ld_so_conf_include
+ (struct gld${EMULATION_NAME}_ld_so_conf *info, const char *filename,
+ const char *pattern)
+{
+ char *newp = NULL;
+#ifdef HAVE_GLOB
+ glob_t gl;
+#endif
+
+ if (pattern[0] != '/')
+ {
+ char *p = strrchr (filename, '/');
+ size_t patlen = strlen (pattern) + 1;
+
+ newp = xmalloc (p - filename + 1 + patlen);
+ memcpy (newp, filename, p - filename + 1);
+ memcpy (newp + (p - filename + 1), pattern, patlen);
+ pattern = newp;
+ }
+
+#ifdef HAVE_GLOB
+ if (glob (pattern, 0, NULL, &gl) == 0)
+ {
+ size_t i;
+
+ for (i = 0; i < gl.gl_pathc; ++i)
+ gld${EMULATION_NAME}_parse_ld_so_conf (info, gl.gl_pathv[i]);
+ globfree (&gl);
+ }
+#else
+ /* If we do not have glob, treat the pattern as a literal filename. */
+ gld${EMULATION_NAME}_parse_ld_so_conf (info, pattern);
+#endif
+
+ if (newp)
+ free (newp);
+}
+
+static bfd_boolean
+gld${EMULATION_NAME}_parse_ld_so_conf
+ (struct gld${EMULATION_NAME}_ld_so_conf *info, const char *filename)
+{
+ FILE *f = fopen (filename, FOPEN_RT);
+ char *line;
+ size_t linelen;
+
+ if (f == NULL)
+ return FALSE;
+
+ linelen = 256;
+ line = xmalloc (linelen);
+ do
+ {
+ char *p = line, *q;
+
+ /* Normally this would use getline(3), but we need to be portable. */
+ while ((q = fgets (p, linelen - (p - line), f)) != NULL
+ && strlen (q) == linelen - (p - line) - 1
+ && line[linelen - 2] != '\n')
+ {
+ line = xrealloc (line, 2 * linelen);
+ p = line + linelen - 1;
+ linelen += linelen;
+ }
+
+ if (q == NULL && p == line)
+ break;
+
+ p = strchr (line, '\n');
+ if (p)
+ *p = '\0';
+
+ /* Because the file format does not know any form of quoting we
+ can search forward for the next '#' character and if found
+ make it terminating the line. */
+ p = strchr (line, '#');
+ if (p)
+ *p = '\0';
+
+ /* Remove leading whitespace. NUL is no whitespace character. */
+ p = line;
+ while (*p == ' ' || *p == '\f' || *p == '\r' || *p == '\t' || *p == '\v')
+ ++p;
+
+ /* If the line is blank it is ignored. */
+ if (p[0] == '\0')
+ continue;
+
+ if (CONST_STRNEQ (p, "include") && (p[7] == ' ' || p[7] == '\t'))
+ {
+ char *dir, c;
+ p += 8;
+ do
+ {
+ while (*p == ' ' || *p == '\t')
+ ++p;
+
+ if (*p == '\0')
+ break;
+
+ dir = p;
+
+ while (*p != ' ' && *p != '\t' && *p)
+ ++p;
+
+ c = *p;
+ *p++ = '\0';
+ if (dir[0] != '\0')
+ gld${EMULATION_NAME}_parse_ld_so_conf_include (info, filename,
+ dir);
+ }
+ while (c != '\0');
+ }
+ else
+ {
+ char *dir = p;
+ while (*p && *p != '=' && *p != ' ' && *p != '\t' && *p != '\f'
+ && *p != '\r' && *p != '\v')
+ ++p;
+
+ while (p != dir && p[-1] == '/')
+ --p;
+ if (info->path == NULL)
+ {
+ info->alloc = p - dir + 1 + 256;
+ info->path = xmalloc (info->alloc);
+ info->len = 0;
+ }
+ else
+ {
+ if (info->len + 1 + (p - dir) >= info->alloc)
+ {
+ info->alloc += p - dir + 256;
+ info->path = xrealloc (info->path, info->alloc);
+ }
+ info->path[info->len++] = config.rpath_separator;
+ }
+ memcpy (info->path + info->len, dir, p - dir);
+ info->len += p - dir;
+ info->path[info->len] = '\0';
+ }
+ }
+ while (! feof (f));
+ free (line);
+ fclose (f);
+ return TRUE;
+}
+
+static bfd_boolean
+gld${EMULATION_NAME}_check_ld_so_conf (const char *name, int force)
+{
+ static bfd_boolean initialized;
+ static char *ld_so_conf;
+ struct dt_needed needed;
+
+ if (! initialized)
+ {
+ char *tmppath;
+ struct gld${EMULATION_NAME}_ld_so_conf info;
+
+ info.path = NULL;
+ info.len = info.alloc = 0;
+ tmppath = concat (ld_sysroot, "${prefix}/etc/ld.so.conf",
+ (const char *) NULL);
+ if (!gld${EMULATION_NAME}_parse_ld_so_conf (&info, tmppath))
+ {
+ free (tmppath);
+ tmppath = concat (ld_sysroot, "/etc/ld.so.conf",
+ (const char *) NULL);
+ gld${EMULATION_NAME}_parse_ld_so_conf (&info, tmppath);
+ }
+ free (tmppath);
+
+ if (info.path)
+ {
+ char *d = gld${EMULATION_NAME}_add_sysroot (info.path);
+ free (info.path);
+ ld_so_conf = d;
+ }
+ initialized = TRUE;
+ }
+
+ if (ld_so_conf == NULL)
+ return FALSE;
+
+
+ needed.by = NULL;
+ needed.name = name;
+ return gld${EMULATION_NAME}_search_needed (ld_so_conf, &needed, force);
+}
+
+EOF
+ # Linux
+ ;;
+ esac
+fi
+fragment <<EOF
+
+/* See if an input file matches a DT_NEEDED entry by name. */
+
+static void
+gld${EMULATION_NAME}_check_needed (lang_input_statement_type *s)
+{
+ const char *soname;
+
+ /* Stop looking if we've found a loaded lib. */
+ if (global_found != NULL
+ && (bfd_elf_get_dyn_lib_class (global_found->the_bfd)
+ & DYN_AS_NEEDED) == 0)
+ return;
+
+ if (s->filename == NULL || s->the_bfd == NULL)
+ return;
+
+ /* Don't look for a second non-loaded as-needed lib. */
+ if (global_found != NULL
+ && (bfd_elf_get_dyn_lib_class (s->the_bfd) & DYN_AS_NEEDED) != 0)
+ return;
+
+ if (strcmp (s->filename, global_needed->name) == 0)
+ {
+ global_found = s;
+ return;
+ }
+
+ if (s->search_dirs_flag)
+ {
+ const char *f = strrchr (s->filename, '/');
+ if (f != NULL
+ && strcmp (f + 1, global_needed->name) == 0)
+ {
+ global_found = s;
+ return;
+ }
+ }
+
+ soname = bfd_elf_get_dt_soname (s->the_bfd);
+ if (soname != NULL
+ && strcmp (soname, global_needed->name) == 0)
+ {
+ global_found = s;
+ return;
+ }
+}
+
+EOF
+
+if test x"$LDEMUL_AFTER_OPEN" != xgld"$EMULATION_NAME"_after_open; then
+fragment <<EOF
+
+static bfd_size_type
+gld${EMULATION_NAME}_id_note_section_size (bfd *abfd,
+ struct bfd_link_info *linfo)
+{
+ const char *style = linfo->emit_note_gnu_build_id;
+ bfd_size_type size;
+
+ abfd = abfd;
+
+ size = offsetof (Elf_External_Note, name[sizeof "GNU"]);
+ size = (size + 3) & -(bfd_size_type) 4;
+
+ if (!strcmp (style, "md5") || !strcmp (style, "uuid"))
+ size += 128 / 8;
+ else if (!strcmp (style, "sha1"))
+ size += 160 / 8;
+ else if (!strncmp (style, "0x", 2))
+ {
+ /* ID is in string form (hex). Convert to bits. */
+ const char *id = style + 2;
+ do
+ {
+ if (ISXDIGIT (id[0]) && ISXDIGIT (id[1]))
+ {
+ ++size;
+ id += 2;
+ }
+ else if (*id == '-' || *id == ':')
+ ++id;
+ else
+ {
+ size = 0;
+ break;
+ }
+ } while (*id != '\0');
+ }
+ else
+ size = 0;
+
+ return size;
+}
+
+static unsigned char
+read_hex (const char xdigit)
+{
+ if (ISDIGIT (xdigit))
+ return xdigit - '0';
+ if (ISUPPER (xdigit))
+ return xdigit - 'A' + 0xa;
+ if (ISLOWER (xdigit))
+ return xdigit - 'a' + 0xa;
+ abort ();
+ return 0;
+}
+
+struct build_id_info
+{
+ const char *style;
+ asection *sec;
+};
+
+static bfd_boolean
+gld${EMULATION_NAME}_write_build_id_section (bfd *abfd)
+{
+ const struct elf_backend_data *bed = get_elf_backend_data (abfd);
+ struct build_id_info *info = (struct build_id_info *)
+ elf_tdata (abfd)->after_write_object_contents_info;
+ asection *asec;
+ Elf_Internal_Shdr *i_shdr;
+ unsigned char *contents, *id_bits;
+ bfd_size_type size;
+ Elf_External_Note *e_note;
+
+ asec = info->sec;
+ if (bfd_is_abs_section (asec->output_section))
+ {
+ einfo (_("%P: warning: .note.gnu.build-id section discarded,"
+ " --build-id ignored.\n"));
+ return TRUE;
+ }
+ i_shdr = &elf_section_data (asec->output_section)->this_hdr;
+
+ if (i_shdr->contents == NULL)
+ {
+ if (asec->contents == NULL)
+ asec->contents = (unsigned char *) xmalloc (asec->size);
+ contents = asec->contents;
+ }
+ else
+ contents = i_shdr->contents + asec->output_offset;
+
+ e_note = (Elf_External_Note *) contents;
+ size = offsetof (Elf_External_Note, name[sizeof "GNU"]);
+ size = (size + 3) & -(bfd_size_type) 4;
+ id_bits = contents + size;
+ size = asec->size - size;
+
+ bfd_h_put_32 (abfd, sizeof "GNU", &e_note->namesz);
+ bfd_h_put_32 (abfd, size, &e_note->descsz);
+ bfd_h_put_32 (abfd, NT_GNU_BUILD_ID, &e_note->type);
+ memcpy (e_note->name, "GNU", sizeof "GNU");
+
+ if (!strcmp (info->style, "md5"))
+ {
+ struct md5_ctx ctx;
+ md5_init_ctx (&ctx);
+ if (bed->s->checksum_contents (abfd,
+ (void (*) (const void *, size_t, void *))
+ &md5_process_bytes,
+ &ctx))
+ md5_finish_ctx (&ctx, id_bits);
+ else
+ return FALSE;
+ }
+ else if (!strcmp (info->style, "sha1"))
+ {
+ struct sha1_ctx ctx;
+ sha1_init_ctx (&ctx);
+ if (bed->s->checksum_contents (abfd,
+ (void (*) (const void *, size_t, void *))
+ &sha1_process_bytes,
+ &ctx))
+ sha1_finish_ctx (&ctx, id_bits);
+ else
+ return FALSE;
+ }
+ else if (!strcmp (info->style, "uuid"))
+ {
+ int n;
+ int fd = open ("/dev/urandom", O_RDONLY);
+ if (fd < 0)
+ return FALSE;
+ n = read (fd, id_bits, size);
+ close (fd);
+ if (n < (int) size)
+ return FALSE;
+ }
+ else if (!strncmp (info->style, "0x", 2))
+ {
+ /* ID is in string form (hex). Convert to bits. */
+ const char *id = info->style + 2;
+ size_t n = 0;
+ do
+ {
+ if (ISXDIGIT (id[0]) && ISXDIGIT (id[1]))
+ {
+ id_bits[n] = read_hex (*id++) << 4;
+ id_bits[n++] |= read_hex (*id++);
+ }
+ else if (*id == '-' || *id == ':')
+ ++id;
+ else
+ abort (); /* Should have been validated earlier. */
+ } while (*id != '\0');
+ }
+ else
+ abort (); /* Should have been validated earlier. */
+
+ size = asec->size;
+ return (bfd_seek (abfd,
+ i_shdr->sh_offset + asec->output_offset, SEEK_SET) == 0
+ && bfd_bwrite (contents, size, abfd) == size);
+}
+
+
+/* This is called after all the input files have been opened. */
+
+static void
+gld${EMULATION_NAME}_after_open (void)
+{
+ struct bfd_link_needed_list *needed, *l;
+ struct elf_link_hash_table *htab;
+
+ htab = elf_hash_table (&link_info);
+ if (!is_elf_hash_table (htab))
+ return;
+
+ if (link_info.emit_note_gnu_build_id)
+ {
+ bfd *abfd;
+ asection *s;
+ bfd_size_type size;
+
+ /* Find an ELF input. */
+ for (abfd = link_info.input_bfds;
+ abfd != (bfd *) NULL; abfd = abfd->link_next)
+ if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
+ break;
+
+ if (abfd == NULL)
+ {
+ /* PR 10555: If there are no input files do not
+ try to create a .note.gnu-build-id section. */
+ free (link_info.emit_note_gnu_build_id);
+ link_info.emit_note_gnu_build_id = NULL;
+ }
+ else
+ {
+ size = gld${EMULATION_NAME}_id_note_section_size (abfd, &link_info);
+ if (size == 0)
+ {
+ einfo ("%P: warning: unrecognized --build-id style ignored.\n");
+ free (link_info.emit_note_gnu_build_id);
+ link_info.emit_note_gnu_build_id = NULL;
+ }
+ else
+ {
+ s = bfd_make_section_with_flags (abfd, ".note.gnu.build-id",
+ SEC_ALLOC | SEC_LOAD
+ | SEC_IN_MEMORY | SEC_LINKER_CREATED
+ | SEC_READONLY | SEC_DATA);
+ if (s != NULL && bfd_set_section_alignment (abfd, s, 2))
+ {
+ struct elf_obj_tdata *t = elf_tdata (link_info.output_bfd);
+ struct build_id_info *b =
+ (struct build_id_info *) xmalloc (sizeof *b);
+
+ b->style = link_info.emit_note_gnu_build_id;
+ b->sec = s;
+ elf_section_type (s) = SHT_NOTE;
+ s->size = size;
+ t->after_write_object_contents
+ = &gld${EMULATION_NAME}_write_build_id_section;
+ t->after_write_object_contents_info = b;
+ }
+ else
+ {
+ einfo ("%P: warning: Cannot create .note.gnu.build-id section,"
+ " --build-id ignored.\n");
+ free (link_info.emit_note_gnu_build_id);
+ link_info.emit_note_gnu_build_id = NULL;
+ }
+ }
+ }
+ }
+
+ if (link_info.relocatable)
+ return;
+
+ if (link_info.eh_frame_hdr
+ && !link_info.traditional_format)
+ {
+ bfd *abfd, *elfbfd = NULL;
+ bfd_boolean warn_eh_frame = FALSE;
+ asection *s;
+
+ for (abfd = link_info.input_bfds; abfd; abfd = abfd->link_next)
+ {
+ if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
+ elfbfd = abfd;
+ if (!warn_eh_frame)
+ {
+ s = bfd_get_section_by_name (abfd, ".eh_frame");
+ warn_eh_frame
+ = (s
+ && s->size > 8
+ && !bfd_is_abs_section (s->output_section));
+ }
+ if (elfbfd && warn_eh_frame)
+ break;
+ }
+ if (elfbfd)
+ {
+ const struct elf_backend_data *bed;
+
+ bed = get_elf_backend_data (elfbfd);
+ s = bfd_make_section_with_flags (elfbfd, ".eh_frame_hdr",
+ bed->dynamic_sec_flags
+ | SEC_READONLY);
+ if (s != NULL
+ && bfd_set_section_alignment (elfbfd, s, 2))
+ {
+ htab->eh_info.hdr_sec = s;
+ warn_eh_frame = FALSE;
+ }
+ }
+ if (warn_eh_frame)
+ einfo ("%P: warning: Cannot create .eh_frame_hdr section,"
+ " --eh-frame-hdr ignored.\n");
+ }
+
+ /* Get the list of files which appear in DT_NEEDED entries in
+ dynamic objects included in the link (often there will be none).
+ For each such file, we want to track down the corresponding
+ library, and include the symbol table in the link. This is what
+ the runtime dynamic linker will do. Tracking the files down here
+ permits one dynamic object to include another without requiring
+ special action by the person doing the link. Note that the
+ needed list can actually grow while we are stepping through this
+ loop. */
+ if (!link_info.executable)
+ return;
+ needed = bfd_elf_get_needed_list (link_info.output_bfd, &link_info);
+ for (l = needed; l != NULL; l = l->next)
+ {
+ struct bfd_link_needed_list *ll;
+ struct dt_needed n, nn;
+ int force;
+
+ /* If the lib that needs this one was --as-needed and wasn't
+ found to be needed, then this lib isn't needed either. */
+ if (l->by != NULL
+ && (bfd_elf_get_dyn_lib_class (l->by) & DYN_AS_NEEDED) != 0)
+ continue;
+
+ /* If we've already seen this file, skip it. */
+ for (ll = needed; ll != l; ll = ll->next)
+ if ((ll->by == NULL
+ || (bfd_elf_get_dyn_lib_class (ll->by) & DYN_AS_NEEDED) == 0)
+ && strcmp (ll->name, l->name) == 0)
+ break;
+ if (ll != l)
+ continue;
+
+ /* See if this file was included in the link explicitly. */
+ global_needed = l;
+ global_found = NULL;
+ lang_for_each_input_file (gld${EMULATION_NAME}_check_needed);
+ if (global_found != NULL
+ && (bfd_elf_get_dyn_lib_class (global_found->the_bfd)
+ & DYN_AS_NEEDED) == 0)
+ continue;
+
+ n.by = l->by;
+ n.name = l->name;
+ nn.by = l->by;
+ if (trace_file_tries)
+ info_msg (_("%s needed by %B\n"), l->name, l->by);
+
+ /* As-needed libs specified on the command line (or linker script)
+ take priority over libs found in search dirs. */
+ if (global_found != NULL)
+ {
+ nn.name = global_found->filename;
+ if (gld${EMULATION_NAME}_try_needed (&nn, TRUE))
+ continue;
+ }
+
+ /* We need to find this file and include the symbol table. We
+ want to search for the file in the same way that the dynamic
+ linker will search. That means that we want to use
+ rpath_link, rpath, then the environment variable
+ LD_LIBRARY_PATH (native only), then the DT_RPATH/DT_RUNPATH
+ entries (native only), then the linker script LIB_SEARCH_DIRS.
+ We do not search using the -L arguments.
+
+ We search twice. The first time, we skip objects which may
+ introduce version mismatches. The second time, we force
+ their use. See gld${EMULATION_NAME}_vercheck comment. */
+ for (force = 0; force < 2; force++)
+ {
+ size_t len;
+ search_dirs_type *search;
+EOF
+if [ "x${NATIVE}" = xyes ] ; then
+fragment <<EOF
+ const char *lib_path;
+EOF
+fi
+if [ "x${USE_LIBPATH}" = xyes ] ; then
+fragment <<EOF
+ struct bfd_link_needed_list *rp;
+ int found;
+EOF
+fi
+fragment <<EOF
+
+ if (gld${EMULATION_NAME}_search_needed (command_line.rpath_link,
+ &n, force))
+ break;
+EOF
+if [ "x${USE_LIBPATH}" = xyes ] ; then
+fragment <<EOF
+ if (gld${EMULATION_NAME}_search_needed (command_line.rpath,
+ &n, force))
+ break;
+EOF
+fi
+if [ "x${NATIVE}" = xyes ] ; then
+fragment <<EOF
+ if (command_line.rpath_link == NULL
+ && command_line.rpath == NULL)
+ {
+ lib_path = (const char *) getenv ("LD_RUN_PATH");
+ if (gld${EMULATION_NAME}_search_needed (lib_path, &n,
+ force))
+ break;
+ }
+ lib_path = (const char *) getenv ("LD_LIBRARY_PATH");
+ if (gld${EMULATION_NAME}_search_needed (lib_path, &n, force))
+ break;
+EOF
+fi
+if [ "x${USE_LIBPATH}" = xyes ] ; then
+fragment <<EOF
+ found = 0;
+ rp = bfd_elf_get_runpath_list (link_info.output_bfd, &link_info);
+ for (; !found && rp != NULL; rp = rp->next)
+ {
+ char *tmpname = gld${EMULATION_NAME}_add_sysroot (rp->name);
+ found = (rp->by == l->by
+ && gld${EMULATION_NAME}_search_needed (tmpname,
+ &n,
+ force));
+ free (tmpname);
+ }
+ if (found)
+ break;
+
+EOF
+fi
+if [ "x${USE_LIBPATH}" = xyes ] ; then
+ case ${target} in
+ *-*-freebsd* | *-*-dragonfly*)
+ fragment <<EOF
+ if (gld${EMULATION_NAME}_check_ld_elf_hints (l->name, force))
+ break;
+EOF
+ # FreeBSD
+ ;;
+
+ *-*-linux-* | *-*-k*bsd*-*)
+ # Linux
+ fragment <<EOF
+ if (gld${EMULATION_NAME}_check_ld_so_conf (l->name, force))
+ break;
+
+EOF
+ ;;
+ esac
+fi
+fragment <<EOF
+ len = strlen (l->name);
+ for (search = search_head; search != NULL; search = search->next)
+ {
+ char *filename;
+
+ if (search->cmdline)
+ continue;
+ filename = (char *) xmalloc (strlen (search->name) + len + 2);
+ sprintf (filename, "%s/%s", search->name, l->name);
+ nn.name = filename;
+ if (gld${EMULATION_NAME}_try_needed (&nn, force))
+ break;
+ free (filename);
+ }
+ if (search != NULL)
+ break;
+EOF
+fragment <<EOF
+ }
+
+ if (force < 2)
+ continue;
+
+ einfo ("%P: warning: %s, needed by %B, not found (try using -rpath or -rpath-link)\n",
+ l->name, l->by);
+ }
+}
+
+EOF
+fi
+
+fragment <<EOF
+
+/* Look through an expression for an assignment statement. */
+
+static void
+gld${EMULATION_NAME}_find_exp_assignment (etree_type *exp)
+{
+ bfd_boolean provide = FALSE;
+
+ switch (exp->type.node_class)
+ {
+ case etree_provide:
+ case etree_provided:
+ provide = TRUE;
+ /* Fall thru */
+ case etree_assign:
+ /* We call record_link_assignment even if the symbol is defined.
+ This is because if it is defined by a dynamic object, we
+ actually want to use the value defined by the linker script,
+ not the value from the dynamic object (because we are setting
+ symbols like etext). If the symbol is defined by a regular
+ object, then, as it happens, calling record_link_assignment
+ will do no harm. */
+ if (strcmp (exp->assign.dst, ".") != 0)
+ {
+ if (!bfd_elf_record_link_assignment (link_info.output_bfd,
+ &link_info,
+ exp->assign.dst, provide,
+ exp->assign.hidden))
+ einfo ("%P%F: failed to record assignment to %s: %E\n",
+ exp->assign.dst);
+ }
+ gld${EMULATION_NAME}_find_exp_assignment (exp->assign.src);
+ break;
+
+ case etree_binary:
+ gld${EMULATION_NAME}_find_exp_assignment (exp->binary.lhs);
+ gld${EMULATION_NAME}_find_exp_assignment (exp->binary.rhs);
+ break;
+
+ case etree_trinary:
+ gld${EMULATION_NAME}_find_exp_assignment (exp->trinary.cond);
+ gld${EMULATION_NAME}_find_exp_assignment (exp->trinary.lhs);
+ gld${EMULATION_NAME}_find_exp_assignment (exp->trinary.rhs);
+ break;
+
+ case etree_unary:
+ gld${EMULATION_NAME}_find_exp_assignment (exp->unary.child);
+ break;
+
+ default:
+ break;
+ }
+}
+
+
+/* This is called by the before_allocation routine via
+ lang_for_each_statement. It locates any assignment statements, and
+ tells the ELF backend about them, in case they are assignments to
+ symbols which are referred to by dynamic objects. */
+
+static void
+gld${EMULATION_NAME}_find_statement_assignment (lang_statement_union_type *s)
+{
+ if (s->header.type == lang_assignment_statement_enum)
+ gld${EMULATION_NAME}_find_exp_assignment (s->assignment_statement.exp);
+}
+
+EOF
+
+if test x"$LDEMUL_BEFORE_ALLOCATION" != xgld"$EMULATION_NAME"_before_allocation; then
+ if test x"${ELF_INTERPRETER_NAME+set}" = xset; then
+ ELF_INTERPRETER_SET_DEFAULT="
+ if (sinterp != NULL)
+ {
+ sinterp->contents = (unsigned char *) ${ELF_INTERPRETER_NAME};
+ sinterp->size = strlen ((char *) sinterp->contents) + 1;
+ }
+
+"
+ else
+ ELF_INTERPRETER_SET_DEFAULT=
+ fi
+fragment <<EOF
+
+/* used by before_allocation and handle_option. */
+static void
+gld${EMULATION_NAME}_append_to_separated_string (char **to, char *op_arg)
+{
+ if (*to == NULL)
+ *to = xstrdup (op_arg);
+ else
+ {
+ size_t to_len = strlen (*to);
+ size_t op_arg_len = strlen (op_arg);
+ char *buf;
+ char *cp = *to;
+
+ /* First see whether OPTARG is already in the path. */
+ do
+ {
+ if (strncmp (op_arg, cp, op_arg_len) == 0
+ && (cp[op_arg_len] == 0
+ || cp[op_arg_len] == config.rpath_separator))
+ /* We found it. */
+ break;
+
+ /* Not yet found. */
+ cp = strchr (cp, config.rpath_separator);
+ if (cp != NULL)
+ ++cp;
+ }
+ while (cp != NULL);
+
+ if (cp == NULL)
+ {
+ buf = xmalloc (to_len + op_arg_len + 2);
+ sprintf (buf, "%s%c%s", *to,
+ config.rpath_separator, op_arg);
+ free (*to);
+ *to = buf;
+ }
+ }
+}
+
+/* This is called after the sections have been attached to output
+ sections, but before any sizes or addresses have been set. */
+
+static void
+gld${EMULATION_NAME}_before_allocation (void)
+{
+ const char *rpath;
+ asection *sinterp;
+ bfd *abfd;
+
+ if (link_info.hash->type == bfd_link_elf_hash_table)
+ _bfd_elf_tls_setup (link_info.output_bfd, &link_info);
+
+ /* If we are going to make any variable assignments, we need to let
+ the ELF backend know about them in case the variables are
+ referred to by dynamic objects. */
+ lang_for_each_statement (gld${EMULATION_NAME}_find_statement_assignment);
+
+ /* Let the ELF backend work out the sizes of any sections required
+ by dynamic linking. */
+ rpath = command_line.rpath;
+ if (rpath == NULL)
+ rpath = (const char *) getenv ("LD_RUN_PATH");
+
+ for (abfd = link_info.input_bfds; abfd; abfd = abfd->link_next)
+ if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
+ {
+ const char *audit_libs = elf_dt_audit (abfd);
+
+ /* If the input bfd contains an audit entry, we need to add it as
+ a dep audit entry. */
+ if (audit_libs && *audit_libs != '\0')
+ {
+ char *cp = xstrdup (audit_libs);
+ do
+ {
+ int more = 0;
+ char *cp2 = strchr (cp, config.rpath_separator);
+
+ if (cp2)
+ {
+ *cp2 = '\0';
+ more = 1;
+ }
+
+ if (cp != NULL && *cp != '\0')
+ gld${EMULATION_NAME}_append_to_separated_string (&depaudit, cp);
+
+ cp = more ? ++cp2 : NULL;
+ }
+ while (cp != NULL);
+ }
+ }
+
+ if (! (bfd_elf_size_dynamic_sections
+ (link_info.output_bfd, command_line.soname, rpath,
+ command_line.filter_shlib, audit, depaudit,
+ (const char * const *) command_line.auxiliary_filters,
+ &link_info, &sinterp, lang_elf_version_info)))
+ einfo ("%P%F: failed to set dynamic section sizes: %E\n");
+
+${ELF_INTERPRETER_SET_DEFAULT}
+ /* Let the user override the dynamic linker we are using. */
+ if (command_line.interpreter != NULL
+ && sinterp != NULL)
+ {
+ sinterp->contents = (bfd_byte *) command_line.interpreter;
+ sinterp->size = strlen (command_line.interpreter) + 1;
+ }
+
+ /* Look for any sections named .gnu.warning. As a GNU extensions,
+ we treat such sections as containing warning messages. We print
+ out the warning message, and then zero out the section size so
+ that it does not get copied into the output file. */
+
+ {
+ LANG_FOR_EACH_INPUT_STATEMENT (is)
+ {
+ asection *s;
+ bfd_size_type sz;
+ char *msg;
+ bfd_boolean ret;
+
+ if (is->just_syms_flag)
+ continue;
+
+ s = bfd_get_section_by_name (is->the_bfd, ".gnu.warning");
+ if (s == NULL)
+ continue;
+
+ sz = s->size;
+ msg = (char *) xmalloc ((size_t) (sz + 1));
+ if (! bfd_get_section_contents (is->the_bfd, s, msg,
+ (file_ptr) 0, sz))
+ einfo ("%F%B: Can't read contents of section .gnu.warning: %E\n",
+ is->the_bfd);
+ msg[sz] = '\0';
+ ret = link_info.callbacks->warning (&link_info, msg,
+ (const char *) NULL,
+ is->the_bfd, (asection *) NULL,
+ (bfd_vma) 0);
+ ASSERT (ret);
+ free (msg);
+
+ /* Clobber the section size, so that we don't waste space
+ copying the warning into the output file. If we've already
+ sized the output section, adjust its size. The adjustment
+ is on rawsize because targets that size sections early will
+ have called lang_reset_memory_regions after sizing. */
+ if (s->output_section != NULL
+ && s->output_section->rawsize >= s->size)
+ s->output_section->rawsize -= s->size;
+
+ s->size = 0;
+
+ /* Also set SEC_EXCLUDE, so that local symbols defined in the
+ warning section don't get copied to the output. */
+ s->flags |= SEC_EXCLUDE | SEC_KEEP;
+ }
+ }
+
+ before_allocation_default ();
+
+ if (!bfd_elf_size_dynsym_hash_dynstr (link_info.output_bfd, &link_info))
+ einfo ("%P%F: failed to set dynamic section sizes: %E\n");
+}
+
+EOF
+fi
+
+if test x"$LDEMUL_OPEN_DYNAMIC_ARCHIVE" != xgld"$EMULATION_NAME"_open_dynamic_archive; then
+fragment <<EOF
+
+/* Try to open a dynamic archive. This is where we know that ELF
+ dynamic libraries have an extension of .so (or .sl on oddball systems
+ like hpux). */
+
+static bfd_boolean
+gld${EMULATION_NAME}_open_dynamic_archive
+ (const char *arch, search_dirs_type *search, lang_input_statement_type *entry)
+{
+ const char *filename;
+ char *string;
+
+ if (! entry->is_archive)
+ return FALSE;
+
+ filename = entry->filename;
+
+ /* This allocates a few bytes too many when EXTRA_SHLIB_EXTENSION
+ is defined, but it does not seem worth the headache to optimize
+ away those two bytes of space. */
+ string = (char *) xmalloc (strlen (search->name)
+ + strlen (filename)
+ + strlen (arch)
+#ifdef EXTRA_SHLIB_EXTENSION
+ + strlen (EXTRA_SHLIB_EXTENSION)
+#endif
+ + sizeof "/lib.so");
+
+ sprintf (string, "%s/lib%s%s.so", search->name, filename, arch);
+
+#ifdef EXTRA_SHLIB_EXTENSION
+ /* Try the .so extension first. If that fails build a new filename
+ using EXTRA_SHLIB_EXTENSION. */
+ if (! ldfile_try_open_bfd (string, entry))
+ {
+ sprintf (string, "%s/lib%s%s%s", search->name,
+ filename, arch, EXTRA_SHLIB_EXTENSION);
+#endif
+
+ if (! ldfile_try_open_bfd (string, entry))
+ {
+ free (string);
+ return FALSE;
+ }
+#ifdef EXTRA_SHLIB_EXTENSION
+ }
+#endif
+
+ entry->filename = string;
+
+ /* We have found a dynamic object to include in the link. The ELF
+ backend linker will create a DT_NEEDED entry in the .dynamic
+ section naming this file. If this file includes a DT_SONAME
+ entry, it will be used. Otherwise, the ELF linker will just use
+ the name of the file. For an archive found by searching, like
+ this one, the DT_NEEDED entry should consist of just the name of
+ the file, without the path information used to find it. Note
+ that we only need to do this if we have a dynamic object; an
+ archive will never be referenced by a DT_NEEDED entry.
+
+ FIXME: This approach--using bfd_elf_set_dt_needed_name--is not
+ very pretty. I haven't been able to think of anything that is
+ pretty, though. */
+ if (bfd_check_format (entry->the_bfd, bfd_object)
+ && (entry->the_bfd->flags & DYNAMIC) != 0)
+ {
+ ASSERT (entry->is_archive && entry->search_dirs_flag);
+
+ /* Rather than duplicating the logic above. Just use the
+ filename we recorded earlier. */
+
+ filename = lbasename (entry->filename);
+ bfd_elf_set_dt_needed_name (entry->the_bfd, filename);
+ }
+
+ return TRUE;
+}
+
+EOF
+fi
+
+if test x"$LDEMUL_PLACE_ORPHAN" != xgld"$EMULATION_NAME"_place_orphan; then
+fragment <<EOF
+
+/* A variant of lang_output_section_find used by place_orphan. */
+
+static lang_output_section_statement_type *
+output_rel_find (asection *sec, int isdyn)
+{
+ lang_output_section_statement_type *lookup;
+ lang_output_section_statement_type *last = NULL;
+ lang_output_section_statement_type *last_alloc = NULL;
+ lang_output_section_statement_type *last_ro_alloc = NULL;
+ lang_output_section_statement_type *last_rel = NULL;
+ lang_output_section_statement_type *last_rel_alloc = NULL;
+ int rela = sec->name[4] == 'a';
+
+ for (lookup = &lang_output_section_statement.head->output_section_statement;
+ lookup != NULL;
+ lookup = lookup->next)
+ {
+ if (lookup->constraint >= 0
+ && CONST_STRNEQ (lookup->name, ".rel"))
+ {
+ int lookrela = lookup->name[4] == 'a';
+
+ /* .rel.dyn must come before all other reloc sections, to suit
+ GNU ld.so. */
+ if (isdyn)
+ break;
+
+ /* Don't place after .rel.plt as doing so results in wrong
+ dynamic tags. */
+ if (strcmp (".plt", lookup->name + 4 + lookrela) == 0)
+ break;
+
+ if (rela == lookrela || last_rel == NULL)
+ last_rel = lookup;
+ if ((rela == lookrela || last_rel_alloc == NULL)
+ && lookup->bfd_section != NULL
+ && (lookup->bfd_section->flags & SEC_ALLOC) != 0)
+ last_rel_alloc = lookup;
+ }
+
+ last = lookup;
+ if (lookup->bfd_section != NULL
+ && (lookup->bfd_section->flags & SEC_ALLOC) != 0)
+ {
+ last_alloc = lookup;
+ if ((lookup->bfd_section->flags & SEC_READONLY) != 0)
+ last_ro_alloc = lookup;
+ }
+ }
+
+ if (last_rel_alloc)
+ return last_rel_alloc;
+
+ if (last_rel)
+ return last_rel;
+
+ if (last_ro_alloc)
+ return last_ro_alloc;
+
+ if (last_alloc)
+ return last_alloc;
+
+ return last;
+}
+
+/* Place an orphan section. We use this to put random SHF_ALLOC
+ sections in the right segment. */
+
+static lang_output_section_statement_type *
+gld${EMULATION_NAME}_place_orphan (asection *s,
+ const char *secname,
+ int constraint)
+{
+ static struct orphan_save hold[] =
+ {
+ { ".text",
+ SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE,
+ 0, 0, 0, 0 },
+ { ".rodata",
+ SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_DATA,
+ 0, 0, 0, 0 },
+ { ".data",
+ SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_DATA,
+ 0, 0, 0, 0 },
+ { ".bss",
+ SEC_ALLOC,
+ 0, 0, 0, 0 },
+ { 0,
+ SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_DATA,
+ 0, 0, 0, 0 },
+ { ".interp",
+ SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_DATA,
+ 0, 0, 0, 0 },
+ { ".sdata",
+ SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_SMALL_DATA,
+ 0, 0, 0, 0 },
+ { 0,
+ SEC_HAS_CONTENTS,
+ 0, 0, 0, 0 },
+ };
+ enum orphan_save_index
+ {
+ orphan_text = 0,
+ orphan_rodata,
+ orphan_data,
+ orphan_bss,
+ orphan_rel,
+ orphan_interp,
+ orphan_sdata,
+ orphan_nonalloc
+ };
+ static int orphan_init_done = 0;
+ struct orphan_save *place;
+ lang_output_section_statement_type *after;
+ lang_output_section_statement_type *os;
+ lang_output_section_statement_type *match_by_name = NULL;
+ int isdyn = 0;
+ int iself = s->owner->xvec->flavour == bfd_target_elf_flavour;
+ unsigned int sh_type = iself ? elf_section_type (s) : SHT_NULL;
+
+ if (! link_info.relocatable
+ && link_info.combreloc
+ && (s->flags & SEC_ALLOC))
+ {
+ if (iself)
+ switch (sh_type)
+ {
+ case SHT_RELA:
+ secname = ".rela.dyn";
+ isdyn = 1;
+ break;
+ case SHT_REL:
+ secname = ".rel.dyn";
+ isdyn = 1;
+ break;
+ default:
+ break;
+ }
+ else if (CONST_STRNEQ (secname, ".rel"))
+ {
+ secname = secname[4] == 'a' ? ".rela.dyn" : ".rel.dyn";
+ isdyn = 1;
+ }
+ }
+
+ /* Look through the script to see where to place this section. */
+ if (constraint == 0)
+ for (os = lang_output_section_find (secname);
+ os != NULL;
+ os = next_matching_output_section_statement (os, 0))
+ {
+ /* If we don't match an existing output section, tell
+ lang_insert_orphan to create a new output section. */
+ constraint = SPECIAL;
+
+ if (os->bfd_section != NULL
+ && (os->bfd_section->flags == 0
+ || (_bfd_elf_match_sections_by_type (link_info.output_bfd,
+ os->bfd_section,
+ s->owner, s)
+ && ((s->flags ^ os->bfd_section->flags)
+ & (SEC_LOAD | SEC_ALLOC)) == 0)))
+ {
+ /* We already have an output section statement with this
+ name, and its bfd section has compatible flags.
+ If the section already exists but does not have any flags
+ set, then it has been created by the linker, probably as a
+ result of a --section-start command line switch. */
+ lang_add_section (&os->children, s, os);
+ return os;
+ }
+
+ /* Save unused output sections in case we can match them
+ against orphans later. */
+ if (os->bfd_section == NULL)
+ match_by_name = os;
+ }
+
+ /* If we didn't match an active output section, see if we matched an
+ unused one and use that. */
+ if (match_by_name)
+ {
+ lang_add_section (&match_by_name->children, s, match_by_name);
+ return match_by_name;
+ }
+
+ if (!orphan_init_done)
+ {
+ lang_output_section_statement_type *lookup;
+ struct orphan_save *ho;
+
+ for (ho = hold; ho < hold + sizeof (hold) / sizeof (hold[0]); ++ho)
+ if (ho->name != NULL)
+ {
+ ho->os = lang_output_section_find (ho->name);
+ if (ho->os != NULL && ho->os->flags == 0)
+ ho->os->flags = ho->flags;
+ }
+ lookup = hold[orphan_bss].os;
+ if (lookup == NULL)
+ lookup = &lang_output_section_statement.head->output_section_statement;
+ for (; lookup != NULL; lookup = lookup->next)
+ if ((lookup->bfd_section != NULL
+ && (lookup->bfd_section->flags & SEC_DEBUGGING) != 0)
+ || strcmp (lookup->name, ".comment") == 0)
+ break;
+ hold[orphan_nonalloc].os = lookup ? lookup->prev : NULL;
+ hold[orphan_nonalloc].name = ".comment";
+ orphan_init_done = 1;
+ }
+
+ /* If this is a final link, then always put .gnu.warning.SYMBOL
+ sections into the .text section to get them out of the way. */
+ if (link_info.executable
+ && ! link_info.relocatable
+ && CONST_STRNEQ (s->name, ".gnu.warning.")
+ && hold[orphan_text].os != NULL)
+ {
+ os = hold[orphan_text].os;
+ lang_add_section (&os->children, s, os);
+ return os;
+ }
+
+ /* Decide which segment the section should go in based on the
+ section name and section flags. We put loadable .note sections
+ right after the .interp section, so that the PT_NOTE segment is
+ stored right after the program headers where the OS can read it
+ in the first page. */
+
+ place = NULL;
+ if ((s->flags & (SEC_ALLOC | SEC_DEBUGGING)) == 0)
+ place = &hold[orphan_nonalloc];
+ else if ((s->flags & SEC_ALLOC) == 0)
+ ;
+ else if ((s->flags & SEC_LOAD) != 0
+ && ((iself && sh_type == SHT_NOTE)
+ || (!iself && CONST_STRNEQ (secname, ".note"))))
+ place = &hold[orphan_interp];
+ else if ((s->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
+ place = &hold[orphan_bss];
+ else if ((s->flags & SEC_SMALL_DATA) != 0)
+ place = &hold[orphan_sdata];
+ else if ((s->flags & SEC_READONLY) == 0)
+ place = &hold[orphan_data];
+ else if (((iself && (sh_type == SHT_RELA || sh_type == SHT_REL))
+ || (!iself && CONST_STRNEQ (secname, ".rel")))
+ && (s->flags & SEC_LOAD) != 0)
+ place = &hold[orphan_rel];
+ else if ((s->flags & SEC_CODE) == 0)
+ place = &hold[orphan_rodata];
+ else
+ place = &hold[orphan_text];
+
+ after = NULL;
+ if (place != NULL)
+ {
+ if (place->os == NULL)
+ {
+ if (place->name != NULL)
+ place->os = lang_output_section_find (place->name);
+ else
+ place->os = output_rel_find (s, isdyn);
+ }
+ after = place->os;
+ if (after == NULL)
+ after = lang_output_section_find_by_flags
+ (s, &place->os, _bfd_elf_match_sections_by_type);
+ if (after == NULL)
+ /* *ABS* is always the first output section statement. */
+ after = &lang_output_section_statement.head->output_section_statement;
+ }
+
+ return lang_insert_orphan (s, secname, constraint, after, place, NULL, NULL);
+}
+EOF
+fi
+
+if test x"$LDEMUL_AFTER_ALLOCATION" != xgld"$EMULATION_NAME"_after_allocation; then
+fragment <<EOF
+
+static void
+gld${EMULATION_NAME}_after_allocation (void)
+{
+ bfd_boolean need_layout = bfd_elf_discard_info (link_info.output_bfd,
+ &link_info);
+ gld${EMULATION_NAME}_map_segments (need_layout);
+}
+EOF
+fi
+
+if test x"$LDEMUL_GET_SCRIPT" != xgld"$EMULATION_NAME"_get_script; then
+fragment <<EOF
+
+static char *
+gld${EMULATION_NAME}_get_script (int *isfile)
+EOF
+
+if test -n "$COMPILE_IN"
+then
+# Scripts compiled in.
+
+# sed commands to quote an ld script as a C string.
+sc="-f stringify.sed"
+
+fragment <<EOF
+{
+ *isfile = 0;
+
+ if (link_info.relocatable && config.build_constructors)
+ return
+EOF
+sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c
+echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c
+echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c
+if cmp -s ldscripts/${EMULATION_NAME}.x ldscripts/${EMULATION_NAME}.xn; then : ; else
+echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c
+fi
+if test -n "$GENERATE_PIE_SCRIPT" ; then
+if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
+echo ' ; else if (link_info.pie && link_info.combreloc' >> e${EMULATION_NAME}.c
+echo ' && link_info.relro' >> e${EMULATION_NAME}.c
+echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xdw >> e${EMULATION_NAME}.c
+echo ' ; else if (link_info.pie && link_info.combreloc) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xdc >> e${EMULATION_NAME}.c
+fi
+echo ' ; else if (link_info.pie) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xd >> e${EMULATION_NAME}.c
+fi
+if test -n "$GENERATE_SHLIB_SCRIPT" ; then
+if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
+echo ' ; else if (link_info.shared && link_info.combreloc' >> e${EMULATION_NAME}.c
+echo ' && link_info.relro' >> e${EMULATION_NAME}.c
+echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xsw >> e${EMULATION_NAME}.c
+echo ' ; else if (link_info.shared && link_info.combreloc) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xsc >> e${EMULATION_NAME}.c
+fi
+echo ' ; else if (link_info.shared) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xs >> e${EMULATION_NAME}.c
+fi
+if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
+echo ' ; else if (link_info.combreloc && link_info.relro' >> e${EMULATION_NAME}.c
+echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xw >> e${EMULATION_NAME}.c
+echo ' ; else if (link_info.combreloc) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xc >> e${EMULATION_NAME}.c
+fi
+echo ' ; else return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
+echo '; }' >> e${EMULATION_NAME}.c
+
+else
+# Scripts read from the filesystem.
+
+fragment <<EOF
+{
+ *isfile = 1;
+
+ if (link_info.relocatable && config.build_constructors)
+ return "ldscripts/${EMULATION_NAME}.xu";
+ else if (link_info.relocatable)
+ return "ldscripts/${EMULATION_NAME}.xr";
+ else if (!config.text_read_only)
+ return "ldscripts/${EMULATION_NAME}.xbn";
+EOF
+if cmp -s ldscripts/${EMULATION_NAME}.x ldscripts/${EMULATION_NAME}.xn; then :
+else
+fragment <<EOF
+ else if (!config.magic_demand_paged)
+ return "ldscripts/${EMULATION_NAME}.xn";
+EOF
+fi
+if test -n "$GENERATE_PIE_SCRIPT" ; then
+if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
+fragment <<EOF
+ else if (link_info.pie && link_info.combreloc
+ && link_info.relro && (link_info.flags & DF_BIND_NOW))
+ return "ldscripts/${EMULATION_NAME}.xdw";
+ else if (link_info.pie && link_info.combreloc)
+ return "ldscripts/${EMULATION_NAME}.xdc";
+EOF
+fi
+fragment <<EOF
+ else if (link_info.pie)
+ return "ldscripts/${EMULATION_NAME}.xd";
+EOF
+fi
+if test -n "$GENERATE_SHLIB_SCRIPT" ; then
+if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
+fragment <<EOF
+ else if (link_info.shared && link_info.combreloc
+ && link_info.relro && (link_info.flags & DF_BIND_NOW))
+ return "ldscripts/${EMULATION_NAME}.xsw";
+ else if (link_info.shared && link_info.combreloc)
+ return "ldscripts/${EMULATION_NAME}.xsc";
+EOF
+fi
+fragment <<EOF
+ else if (link_info.shared)
+ return "ldscripts/${EMULATION_NAME}.xs";
+EOF
+fi
+if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
+fragment <<EOF
+ else if (link_info.combreloc && link_info.relro
+ && (link_info.flags & DF_BIND_NOW))
+ return "ldscripts/${EMULATION_NAME}.xw";
+ else if (link_info.combreloc)
+ return "ldscripts/${EMULATION_NAME}.xc";
+EOF
+fi
+fragment <<EOF
+ else
+ return "ldscripts/${EMULATION_NAME}.x";
+}
+
+EOF
+fi
+fi
+
+if test -n "$PARSE_AND_LIST_ARGS_CASES" -o x"$GENERATE_SHLIB_SCRIPT" = xyes; then
+
+if test -n "$PARSE_AND_LIST_PROLOGUE" ; then
+fragment <<EOF
+ $PARSE_AND_LIST_PROLOGUE
+EOF
+fi
+
+fragment <<EOF
+
+#define OPTION_DISABLE_NEW_DTAGS (400)
+#define OPTION_ENABLE_NEW_DTAGS (OPTION_DISABLE_NEW_DTAGS + 1)
+#define OPTION_GROUP (OPTION_ENABLE_NEW_DTAGS + 1)
+#define OPTION_EH_FRAME_HDR (OPTION_GROUP + 1)
+#define OPTION_EXCLUDE_LIBS (OPTION_EH_FRAME_HDR + 1)
+#define OPTION_HASH_STYLE (OPTION_EXCLUDE_LIBS + 1)
+#define OPTION_BUILD_ID (OPTION_HASH_STYLE + 1)
+#define OPTION_AUDIT (OPTION_BUILD_ID + 1)
+
+static void
+gld${EMULATION_NAME}_add_options
+ (int ns, char **shortopts, int nl, struct option **longopts,
+ int nrl ATTRIBUTE_UNUSED, struct option **really_longopts ATTRIBUTE_UNUSED)
+{
+ static const char xtra_short[] = "${PARSE_AND_LIST_SHORTOPTS}z:P:";
+ static const struct option xtra_long[] = {
+ {"build-id", optional_argument, NULL, OPTION_BUILD_ID},
+ {"audit", required_argument, NULL, OPTION_AUDIT},
+ {"depaudit", required_argument, NULL, 'P'},
+EOF
+
+if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
+fragment <<EOF
+ {"disable-new-dtags", no_argument, NULL, OPTION_DISABLE_NEW_DTAGS},
+ {"enable-new-dtags", no_argument, NULL, OPTION_ENABLE_NEW_DTAGS},
+ {"eh-frame-hdr", no_argument, NULL, OPTION_EH_FRAME_HDR},
+ {"exclude-libs", required_argument, NULL, OPTION_EXCLUDE_LIBS},
+ {"hash-style", required_argument, NULL, OPTION_HASH_STYLE},
+ {"Bgroup", no_argument, NULL, OPTION_GROUP},
+EOF
+fi
+
+if test -n "$PARSE_AND_LIST_LONGOPTS" ; then
+fragment <<EOF
+ $PARSE_AND_LIST_LONGOPTS
+EOF
+fi
+
+fragment <<EOF
+ {NULL, no_argument, NULL, 0}
+ };
+
+ *shortopts = (char *) xrealloc (*shortopts, ns + sizeof (xtra_short));
+ memcpy (*shortopts + ns, &xtra_short, sizeof (xtra_short));
+ *longopts = (struct option *)
+ xrealloc (*longopts, nl * sizeof (struct option) + sizeof (xtra_long));
+ memcpy (*longopts + nl, &xtra_long, sizeof (xtra_long));
+}
+
+#define DEFAULT_BUILD_ID_STYLE "sha1"
+
+static bfd_boolean
+gld${EMULATION_NAME}_handle_option (int optc)
+{
+ switch (optc)
+ {
+ default:
+ return FALSE;
+
+ case OPTION_BUILD_ID:
+ if (link_info.emit_note_gnu_build_id != NULL)
+ {
+ free (link_info.emit_note_gnu_build_id);
+ link_info.emit_note_gnu_build_id = NULL;
+ }
+ if (optarg == NULL)
+ optarg = DEFAULT_BUILD_ID_STYLE;
+ if (strcmp (optarg, "none"))
+ link_info.emit_note_gnu_build_id = xstrdup (optarg);
+ break;
+ case OPTION_AUDIT:
+ gld${EMULATION_NAME}_append_to_separated_string (&audit, optarg);
+ break;
+ case 'P':
+ gld${EMULATION_NAME}_append_to_separated_string (&depaudit, optarg);
+ break;
+
+EOF
+
+if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
+fragment <<EOF
+ case OPTION_DISABLE_NEW_DTAGS:
+ link_info.new_dtags = FALSE;
+ break;
+
+ case OPTION_ENABLE_NEW_DTAGS:
+ link_info.new_dtags = TRUE;
+ break;
+
+ case OPTION_EH_FRAME_HDR:
+ link_info.eh_frame_hdr = TRUE;
+ break;
+
+ case OPTION_GROUP:
+ link_info.flags_1 |= (bfd_vma) DF_1_GROUP;
+ /* Groups must be self-contained. */
+ link_info.unresolved_syms_in_objects = RM_GENERATE_ERROR;
+ link_info.unresolved_syms_in_shared_libs = RM_GENERATE_ERROR;
+ break;
+
+ case OPTION_EXCLUDE_LIBS:
+ add_excluded_libs (optarg);
+ break;
+
+ case OPTION_HASH_STYLE:
+ link_info.emit_hash = FALSE;
+ link_info.emit_gnu_hash = FALSE;
+ if (strcmp (optarg, "sysv") == 0)
+ link_info.emit_hash = TRUE;
+ else if (strcmp (optarg, "gnu") == 0)
+ link_info.emit_gnu_hash = TRUE;
+ else if (strcmp (optarg, "both") == 0)
+ {
+ link_info.emit_hash = TRUE;
+ link_info.emit_gnu_hash = TRUE;
+ }
+ else
+ einfo (_("%P%F: invalid hash style \`%s'\n"), optarg);
+ break;
+
+ case 'z':
+ if (strcmp (optarg, "initfirst") == 0)
+ link_info.flags_1 |= (bfd_vma) DF_1_INITFIRST;
+ else if (strcmp (optarg, "interpose") == 0)
+ link_info.flags_1 |= (bfd_vma) DF_1_INTERPOSE;
+ else if (strcmp (optarg, "loadfltr") == 0)
+ link_info.flags_1 |= (bfd_vma) DF_1_LOADFLTR;
+ else if (strcmp (optarg, "nodefaultlib") == 0)
+ link_info.flags_1 |= (bfd_vma) DF_1_NODEFLIB;
+ else if (strcmp (optarg, "nodelete") == 0)
+ link_info.flags_1 |= (bfd_vma) DF_1_NODELETE;
+ else if (strcmp (optarg, "nodlopen") == 0)
+ link_info.flags_1 |= (bfd_vma) DF_1_NOOPEN;
+ else if (strcmp (optarg, "nodump") == 0)
+ link_info.flags_1 |= (bfd_vma) DF_1_NODUMP;
+ else if (strcmp (optarg, "now") == 0)
+ {
+ link_info.flags |= (bfd_vma) DF_BIND_NOW;
+ link_info.flags_1 |= (bfd_vma) DF_1_NOW;
+ }
+ else if (strcmp (optarg, "lazy") == 0)
+ {
+ link_info.flags &= ~(bfd_vma) DF_BIND_NOW;
+ link_info.flags_1 &= ~(bfd_vma) DF_1_NOW;
+ }
+ else if (strcmp (optarg, "origin") == 0)
+ {
+ link_info.flags |= (bfd_vma) DF_ORIGIN;
+ link_info.flags_1 |= (bfd_vma) DF_1_ORIGIN;
+ }
+ else if (strcmp (optarg, "defs") == 0)
+ link_info.unresolved_syms_in_objects = RM_GENERATE_ERROR;
+ else if (strcmp (optarg, "muldefs") == 0)
+ link_info.allow_multiple_definition = TRUE;
+ else if (strcmp (optarg, "combreloc") == 0)
+ link_info.combreloc = TRUE;
+ else if (strcmp (optarg, "nocombreloc") == 0)
+ link_info.combreloc = FALSE;
+ else if (strcmp (optarg, "nocopyreloc") == 0)
+ link_info.nocopyreloc = TRUE;
+ else if (strcmp (optarg, "execstack") == 0)
+ {
+ link_info.execstack = TRUE;
+ link_info.noexecstack = FALSE;
+ }
+ else if (strcmp (optarg, "noexecstack") == 0)
+ {
+ link_info.noexecstack = TRUE;
+ link_info.execstack = FALSE;
+ }
+EOF
+
+ if test -n "$COMMONPAGESIZE"; then
+fragment <<EOF
+ else if (strcmp (optarg, "relro") == 0)
+ link_info.relro = TRUE;
+ else if (strcmp (optarg, "norelro") == 0)
+ link_info.relro = FALSE;
+EOF
+ fi
+
+fragment <<EOF
+ else if (CONST_STRNEQ (optarg, "max-page-size="))
+ {
+ char *end;
+
+ config.maxpagesize = strtoul (optarg + 14, &end, 0);
+ if (*end || (config.maxpagesize & (config.maxpagesize - 1)) != 0)
+ einfo (_("%P%F: invalid maxium page size \`%s'\n"),
+ optarg + 14);
+ }
+ else if (CONST_STRNEQ (optarg, "common-page-size="))
+ {
+ char *end;
+ config.commonpagesize = strtoul (optarg + 17, &end, 0);
+ if (*end
+ || (config.commonpagesize & (config.commonpagesize - 1)) != 0)
+ einfo (_("%P%F: invalid common page size \`%s'\n"),
+ optarg + 17);
+ }
+ /* What about the other Solaris -z options? FIXME. */
+ break;
+EOF
+fi
+
+if test -n "$PARSE_AND_LIST_ARGS_CASES" ; then
+fragment <<EOF
+ $PARSE_AND_LIST_ARGS_CASES
+EOF
+fi
+
+fragment <<EOF
+ }
+
+ return TRUE;
+}
+
+EOF
+
+if test x"$LDEMUL_LIST_OPTIONS" != xgld"$EMULATION_NAME"_list_options; then
+fragment <<EOF
+
+static void
+gld${EMULATION_NAME}_list_options (FILE * file)
+{
+ fprintf (file, _("\
+ --build-id[=STYLE] Generate build ID note\n"));
+ fprintf (file, _("\
+ --audit=AUDITLIB Specify a library to use for auditing\n"));
+ fprintf (file, _("\
+ -P AUDITLIB, --depaudit=AUDITLIB\n" "\
+ Specify a library to use for auditing dependencies\n"));
+EOF
+
+if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
+fragment <<EOF
+ fprintf (file, _("\
+ -Bgroup Selects group name lookup rules for DSO\n"));
+ fprintf (file, _("\
+ --disable-new-dtags Disable new dynamic tags\n"));
+ fprintf (file, _("\
+ --enable-new-dtags Enable new dynamic tags\n"));
+ fprintf (file, _("\
+ --eh-frame-hdr Create .eh_frame_hdr section\n"));
+ fprintf (file, _("\
+ --hash-style=STYLE Set hash style to sysv, gnu or both\n"));
+ fprintf (file, _("\
+ -z combreloc Merge dynamic relocs into one section and sort\n"));
+ fprintf (file, _("\
+ -z defs Report unresolved symbols in object files.\n"));
+ fprintf (file, _("\
+ -z execstack Mark executable as requiring executable stack\n"));
+ fprintf (file, _("\
+ -z initfirst Mark DSO to be initialized first at runtime\n"));
+ fprintf (file, _("\
+ -z interpose Mark object to interpose all DSOs but executable\n"));
+ fprintf (file, _("\
+ -z lazy Mark object lazy runtime binding (default)\n"));
+ fprintf (file, _("\
+ -z loadfltr Mark object requiring immediate process\n"));
+ fprintf (file, _("\
+ -z muldefs Allow multiple definitions\n"));
+ fprintf (file, _("\
+ -z nocombreloc Don't merge dynamic relocs into one section\n"));
+ fprintf (file, _("\
+ -z nocopyreloc Don't create copy relocs\n"));
+ fprintf (file, _("\
+ -z nodefaultlib Mark object not to use default search paths\n"));
+ fprintf (file, _("\
+ -z nodelete Mark DSO non-deletable at runtime\n"));
+ fprintf (file, _("\
+ -z nodlopen Mark DSO not available to dlopen\n"));
+ fprintf (file, _("\
+ -z nodump Mark DSO not available to dldump\n"));
+ fprintf (file, _("\
+ -z noexecstack Mark executable as not requiring executable stack\n"));
+EOF
+
+ if test -n "$COMMONPAGESIZE"; then
+fragment <<EOF
+ fprintf (file, _("\
+ -z norelro Don't create RELRO program header\n"));
+EOF
+ fi
+
+fragment <<EOF
+ fprintf (file, _("\
+ -z now Mark object non-lazy runtime binding\n"));
+ fprintf (file, _("\
+ -z origin Mark object requiring immediate \$ORIGIN\n\
+ processing at runtime\n"));
+EOF
+
+ if test -n "$COMMONPAGESIZE"; then
+fragment <<EOF
+ fprintf (file, _("\
+ -z relro Create RELRO program header\n"));
+EOF
+ fi
+
+fragment <<EOF
+ fprintf (file, _("\
+ -z max-page-size=SIZE Set maximum page size to SIZE\n"));
+ fprintf (file, _("\
+ -z common-page-size=SIZE Set common page size to SIZE\n"));
+ fprintf (file, _("\
+ -z KEYWORD Ignored for Solaris compatibility\n"));
+EOF
+fi
+
+if test -n "$PARSE_AND_LIST_OPTIONS" ; then
+fragment <<EOF
+ $PARSE_AND_LIST_OPTIONS
+EOF
+fi
+
+fragment <<EOF
+}
+EOF
+
+if test -n "$PARSE_AND_LIST_EPILOGUE" ; then
+fragment <<EOF
+ $PARSE_AND_LIST_EPILOGUE
+EOF
+fi
+fi
+else
+fragment <<EOF
+#define gld${EMULATION_NAME}_add_options NULL
+#define gld${EMULATION_NAME}_handle_option NULL
+EOF
+if test x"$LDEMUL_LIST_OPTIONS" != xgld"$EMULATION_NAME"_list_options; then
+fragment <<EOF
+#define gld${EMULATION_NAME}_list_options NULL
+EOF
+fi
+fi
+
+fragment <<EOF
+
+struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
+{
+ ${LDEMUL_BEFORE_PARSE-gld${EMULATION_NAME}_before_parse},
+ ${LDEMUL_SYSLIB-syslib_default},
+ ${LDEMUL_HLL-hll_default},
+ ${LDEMUL_AFTER_PARSE-after_parse_default},
+ ${LDEMUL_AFTER_OPEN-gld${EMULATION_NAME}_after_open},
+ ${LDEMUL_AFTER_ALLOCATION-gld${EMULATION_NAME}_after_allocation},
+ ${LDEMUL_SET_OUTPUT_ARCH-set_output_arch_default},
+ ${LDEMUL_CHOOSE_TARGET-ldemul_default_target},
+ ${LDEMUL_BEFORE_ALLOCATION-gld${EMULATION_NAME}_before_allocation},
+ ${LDEMUL_GET_SCRIPT-gld${EMULATION_NAME}_get_script},
+ "${EMULATION_NAME}",
+ "${OUTPUT_FORMAT}",
+ ${LDEMUL_FINISH-finish_default},
+ ${LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS-NULL},
+ ${LDEMUL_OPEN_DYNAMIC_ARCHIVE-gld${EMULATION_NAME}_open_dynamic_archive},
+ ${LDEMUL_PLACE_ORPHAN-gld${EMULATION_NAME}_place_orphan},
+ ${LDEMUL_SET_SYMBOLS-NULL},
+ ${LDEMUL_PARSE_ARGS-NULL},
+ gld${EMULATION_NAME}_add_options,
+ gld${EMULATION_NAME}_handle_option,
+ ${LDEMUL_UNRECOGNIZED_FILE-NULL},
+ ${LDEMUL_LIST_OPTIONS-gld${EMULATION_NAME}_list_options},
+ ${LDEMUL_RECOGNIZED_FILE-gld${EMULATION_NAME}_load_symbols},
+ ${LDEMUL_FIND_POTENTIAL_LIBRARIES-NULL},
+ ${LDEMUL_NEW_VERS_PATTERN-NULL}
+};
+EOF
diff --git a/binutils-2.21/ld/emultempl/genelf.em b/binutils-2.21/ld/emultempl/genelf.em
new file mode 100644
index 0000000..62af4de
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/genelf.em
@@ -0,0 +1,69 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# This file is sourced from generic.em
+#
+fragment <<EOF
+#include "elf-bfd.h"
+
+EOF
+source_em ${srcdir}/emultempl/elf-generic.em
+fragment <<EOF
+
+static void
+gld${EMULATION_NAME}_after_open (void)
+{
+ bfd *ibfd;
+ asection *sec;
+ asymbol **syms;
+
+ if (link_info.relocatable)
+ for (ibfd = link_info.input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
+ if ((syms = bfd_get_outsymbols (ibfd)) != NULL
+ && bfd_get_flavour (ibfd) == bfd_target_elf_flavour)
+ for (sec = ibfd->sections; sec != NULL; sec = sec->next)
+ if ((sec->flags & (SEC_GROUP | SEC_LINKER_CREATED)) == SEC_GROUP)
+ {
+ struct bfd_elf_section_data *sec_data = elf_section_data (sec);
+ elf_group_id (sec) = syms[sec_data->this_hdr.sh_info - 1];
+ }
+}
+
+static void
+gld${EMULATION_NAME}_before_allocation (void)
+{
+ if (link_info.relocatable
+ && !_bfd_elf_size_group_sections (&link_info))
+ einfo ("%X%P: can not size group sections: %E\n");
+ before_allocation_default ();
+}
+
+static void
+gld${EMULATION_NAME}_after_allocation (void)
+{
+ gld${EMULATION_NAME}_map_segments (FALSE);
+}
+EOF
+# Put these extra routines in ld_${EMULATION_NAME}_emulation
+#
+LDEMUL_AFTER_OPEN=gld${EMULATION_NAME}_after_open
+LDEMUL_BEFORE_ALLOCATION=gld${EMULATION_NAME}_before_allocation
+LDEMUL_AFTER_ALLOCATION=gld${EMULATION_NAME}_after_allocation
diff --git a/binutils-2.21/ld/emultempl/generic.em b/binutils-2.21/ld/emultempl/generic.em
new file mode 100644
index 0000000..4a84680
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/generic.em
@@ -0,0 +1,149 @@
+# This shell script emits a C file. -*- C -*-
+# It does some substitutions.
+fragment <<EOF
+/* This file is is generated by a shell script. DO NOT EDIT! */
+
+/* emulate the original gld for the given ${EMULATION_NAME}
+ Copyright 1991, 1992, 1994, 1996, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+ 2007 Free Software Foundation, Inc.
+ Written by Steve Chamberlain steve@cygnus.com
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#define TARGET_IS_${EMULATION_NAME}
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+
+#include "ld.h"
+#include "ldmain.h"
+#include "ldmisc.h"
+
+#include "ldexp.h"
+#include "ldlang.h"
+#include "ldfile.h"
+#include "ldemul.h"
+
+EOF
+
+# Import any needed special functions and/or overrides.
+#
+if test -n "$EXTRA_EM_FILE" ; then
+ source_em ${srcdir}/emultempl/${EXTRA_EM_FILE}.em
+fi
+
+if test x"$LDEMUL_BEFORE_PARSE" != xgld"$EMULATION_NAME"_before_parse; then
+fragment <<EOF
+
+static void
+gld${EMULATION_NAME}_before_parse (void)
+{
+#ifndef TARGET_ /* I.e., if not generic. */
+ ldfile_set_output_arch ("`echo ${ARCH}`", bfd_arch_unknown);
+#endif /* not TARGET_ */
+}
+
+EOF
+fi
+
+if test x"$LDEMUL_GET_SCRIPT" != xgld"$EMULATION_NAME"_get_script; then
+fragment <<EOF
+
+static char *
+gld${EMULATION_NAME}_get_script (int *isfile)
+EOF
+
+if test -n "$COMPILE_IN"
+then
+# Scripts compiled in.
+
+# sed commands to quote an ld script as a C string.
+sc="-f stringify.sed"
+
+fragment <<EOF
+{
+ *isfile = 0;
+
+ if (link_info.relocatable && config.build_constructors)
+ return
+EOF
+sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c
+echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c
+echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c
+echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c
+echo ' ; else return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
+echo '; }' >> e${EMULATION_NAME}.c
+
+else
+# Scripts read from the filesystem.
+
+fragment <<EOF
+{
+ *isfile = 1;
+
+ if (link_info.relocatable && config.build_constructors)
+ return "ldscripts/${EMULATION_NAME}.xu";
+ else if (link_info.relocatable)
+ return "ldscripts/${EMULATION_NAME}.xr";
+ else if (!config.text_read_only)
+ return "ldscripts/${EMULATION_NAME}.xbn";
+ else if (!config.magic_demand_paged)
+ return "ldscripts/${EMULATION_NAME}.xn";
+ else
+ return "ldscripts/${EMULATION_NAME}.x";
+}
+EOF
+fi
+fi
+
+fragment <<EOF
+
+struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
+{
+ ${LDEMUL_BEFORE_PARSE-gld${EMULATION_NAME}_before_parse},
+ ${LDEMUL_SYSLIB-syslib_default},
+ ${LDEMUL_HLL-hll_default},
+ ${LDEMUL_AFTER_PARSE-after_parse_default},
+ ${LDEMUL_AFTER_OPEN-after_open_default},
+ ${LDEMUL_AFTER_ALLOCATION-after_allocation_default},
+ ${LDEMUL_SET_OUTPUT_ARCH-set_output_arch_default},
+ ${LDEMUL_CHOOSE_TARGET-ldemul_default_target},
+ ${LDEMUL_BEFORE_ALLOCATION-before_allocation_default},
+ ${LDEMUL_GET_SCRIPT-gld${EMULATION_NAME}_get_script},
+ "${EMULATION_NAME}",
+ "${OUTPUT_FORMAT}",
+ ${LDEMUL_FINISH-finish_default},
+ ${LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS-NULL},
+ ${LDEMUL_OPEN_DYNAMIC_ARCHIVE-NULL},
+ ${LDEMUL_PLACE_ORPHAN-NULL},
+ ${LDEMUL_SET_SYMBOLS-NULL},
+ ${LDEMUL_PARSE_ARGS-NULL},
+ NULL, /* add_options */
+ NULL, /* handle_option */
+ ${LDEMUL_UNRECOGNIZED_FILE-NULL},
+ ${LDEMUL_LIST_OPTIONS-NULL},
+ ${LDEMUL_RECOGNIZED_FILE-NULL},
+ ${LDEMUL_FIND_POTENTIAL_LIBRARIES-NULL},
+ ${LDEMUL_NEW_VERS_PATTERN-NULL}
+};
+EOF
diff --git a/binutils-2.21/ld/emultempl/gld960.em b/binutils-2.21/ld/emultempl/gld960.em
new file mode 100644
index 0000000..4ba3eec
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/gld960.em
@@ -0,0 +1,154 @@
+# This shell script emits a C file. -*- C -*-
+# It does some substitutions.
+fragment <<EOF
+/* Copyright 1991, 1992, 1994, 1999, 2000, 2001, 2002, 2003, 2005, 2007, 2008
+ Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+
+/* Emulate the Intel's port of gld. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libiberty.h"
+#include "bfdlink.h"
+
+#include "ld.h"
+#include "ldmisc.h"
+#include "ldmain.h"
+
+#include "ldexp.h"
+#include "ldlang.h"
+#include "ldfile.h"
+#include "ldemul.h"
+
+static void gld960_before_parse (void)
+{
+ char *env ;
+ env = getenv("G960LIB");
+ if (env) {
+ ldfile_add_library_path(env, FALSE);
+ }
+ env = getenv("G960BASE");
+ if (env)
+ ldfile_add_library_path (concat (env, "/lib", (const char *) NULL), FALSE);
+ ldfile_output_architecture = bfd_arch_i960;
+}
+
+static void
+gld960_set_output_arch (void)
+{
+ bfd_set_arch_mach (link_info.output_bfd,
+ ldfile_output_architecture, bfd_mach_i960_core);
+}
+
+static char *
+gld960_choose_target (int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED)
+{
+ char *from_outside = getenv(TARGET_ENVIRON);
+ output_filename = "b.out";
+
+ if (from_outside != (char *)NULL)
+ return from_outside;
+
+ return "b.out.little";
+}
+
+static char *
+gld960_get_script (int *isfile)
+EOF
+
+if test -n "$COMPILE_IN"
+then
+# Scripts compiled in.
+
+# sed commands to quote an ld script as a C string.
+sc="-f stringify.sed"
+
+fragment <<EOF
+{
+ *isfile = 0;
+
+ if (link_info.relocatable && config.build_constructors)
+ return
+EOF
+sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c
+echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c
+echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c
+echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c
+echo ' ; else return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
+echo '; }' >> e${EMULATION_NAME}.c
+
+else
+# Scripts read from the filesystem.
+
+fragment <<EOF
+{
+ *isfile = 1;
+
+ if (link_info.relocatable && config.build_constructors)
+ return "ldscripts/${EMULATION_NAME}.xu";
+ else if (link_info.relocatable)
+ return "ldscripts/${EMULATION_NAME}.xr";
+ else if (!config.text_read_only)
+ return "ldscripts/${EMULATION_NAME}.xbn";
+ else if (!config.magic_demand_paged)
+ return "ldscripts/${EMULATION_NAME}.xn";
+ else
+ return "ldscripts/${EMULATION_NAME}.x";
+}
+EOF
+
+fi
+
+fragment <<EOF
+
+struct ld_emulation_xfer_struct ld_gld960_emulation =
+{
+ gld960_before_parse,
+ syslib_default,
+ hll_default,
+ after_parse_default,
+ after_open_default,
+ after_allocation_default,
+ gld960_set_output_arch,
+ gld960_choose_target,
+ before_allocation_default,
+ gld960_get_script,
+ "960",
+ "",
+ finish_default,
+ NULL, /* create output section statements */
+ NULL, /* open dynamic archive */
+ NULL, /* place orphan */
+ NULL, /* set symbols */
+ NULL, /* parse args */
+ NULL, /* add_options */
+ NULL, /* handle_option */
+ NULL, /* unrecognized file */
+ NULL, /* list options */
+ NULL, /* recognized file */
+ NULL, /* find_potential_libraries */
+ NULL /* new_vers_pattern */
+};
+EOF
diff --git a/binutils-2.21/ld/emultempl/gld960c.em b/binutils-2.21/ld/emultempl/gld960c.em
new file mode 100644
index 0000000..1999ea8
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/gld960c.em
@@ -0,0 +1,167 @@
+# This shell script emits a C file. -*- C -*-
+# It does some substitutions.
+fragment <<EOF
+/* Copyright 1991, 1993, 1994, 1996, 1999, 2000, 2001, 2002, 2003, 2004,
+ 2005, 2007 Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+
+/* Emulate the Intel's port of gld. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libiberty.h"
+#include "safe-ctype.h"
+#include "bfdlink.h"
+
+#include "ld.h"
+#include "ldmisc.h"
+#include "ldmain.h"
+
+#include "ldexp.h"
+#include "ldlang.h"
+#include "ldfile.h"
+#include "ldemul.h"
+
+static void gld960_before_parse (void)
+{
+ char *env ;
+ env = getenv("G960LIB");
+ if (env) {
+ ldfile_add_library_path(env, FALSE);
+ }
+ env = getenv("G960BASE");
+ if (env)
+ ldfile_add_library_path (concat (env, "/lib", (const char *) NULL),
+ FALSE);
+ ldfile_output_architecture = bfd_arch_i960;
+}
+
+static void
+gld960_set_output_arch (void)
+{
+ if (ldfile_output_machine_name != NULL
+ && *ldfile_output_machine_name != '\0')
+ {
+ char *s, *s1;
+
+ s = concat ("i960:", ldfile_output_machine_name, (char *) NULL);
+ for (s1 = s; *s1 != '\0'; s1++)
+ *s1 = TOLOWER (*s1);
+ ldfile_set_output_arch (s, bfd_arch_unknown);
+ free (s);
+ }
+
+ set_output_arch_default ();
+}
+
+static char *
+gld960_choose_target (int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED)
+{
+ char *from_outside = getenv(TARGET_ENVIRON);
+ output_filename = "b.out";
+
+ if (from_outside != (char *)NULL)
+ return from_outside;
+
+ return "coff-Intel-little";
+}
+
+static char *
+gld960_get_script (int *isfile)
+EOF
+
+if test -n "$COMPILE_IN"
+then
+# Scripts compiled in.
+
+# sed commands to quote an ld script as a C string.
+sc="-f stringify.sed"
+
+fragment <<EOF
+{
+ *isfile = 0;
+
+ if (link_info.relocatable && config.build_constructors)
+ return
+EOF
+sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c
+echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c
+echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c
+echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c
+echo ' ; else return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
+echo '; }' >> e${EMULATION_NAME}.c
+
+else
+# Scripts read from the filesystem.
+
+fragment <<EOF
+{
+ *isfile = 1;
+
+ if (link_info.relocatable && config.build_constructors)
+ return "ldscripts/${EMULATION_NAME}.xu";
+ else if (link_info.relocatable)
+ return "ldscripts/${EMULATION_NAME}.xr";
+ else if (!config.text_read_only)
+ return "ldscripts/${EMULATION_NAME}.xbn";
+ else if (!config.magic_demand_paged)
+ return "ldscripts/${EMULATION_NAME}.xn";
+ else
+ return "ldscripts/${EMULATION_NAME}.x";
+}
+EOF
+
+fi
+
+fragment <<EOF
+
+struct ld_emulation_xfer_struct ld_gld960coff_emulation =
+{
+ gld960_before_parse,
+ syslib_default,
+ hll_default,
+ after_parse_default,
+ after_open_default,
+ after_allocation_default,
+ gld960_set_output_arch,
+ gld960_choose_target,
+ before_allocation_default,
+ gld960_get_script,
+ "960coff",
+ "",
+ finish_default,
+ NULL, /* create output section statements */
+ NULL, /* open dynamic archive */
+ NULL, /* place orphan */
+ NULL, /* set symbols */
+ NULL, /* parse args */
+ NULL, /* add_options */
+ NULL, /* handle_option */
+ NULL, /* unrecognized file */
+ NULL, /* list options */
+ NULL, /* recognized file */
+ NULL, /* find_potential_libraries */
+ NULL /* new_vers_pattern */
+};
+EOF
diff --git a/binutils-2.21/ld/emultempl/hppaelf.em b/binutils-2.21/ld/emultempl/hppaelf.em
new file mode 100644
index 0000000..1137ba2
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/hppaelf.em
@@ -0,0 +1,380 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 1991, 1993, 1994, 1997, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em, and defines extra hppa-elf
+# specific routines.
+#
+fragment <<EOF
+
+#include "ldctor.h"
+#include "elf32-hppa.h"
+
+
+/* Fake input file for stubs. */
+static lang_input_statement_type *stub_file;
+
+/* Type of import/export stubs to build. For a single sub-space model,
+ we can build smaller import stubs and there is no need for export
+ stubs. */
+static int multi_subspace = 0;
+
+/* Whether we need to call hppa_layout_sections_again. */
+static int need_laying_out = 0;
+
+/* Maximum size of a group of input sections that can be handled by
+ one stub section. A value of +/-1 indicates the bfd back-end
+ should use a suitable default size. */
+static bfd_signed_vma group_size = 1;
+
+/* Stops the linker merging .text sections on a relocatable link,
+ and adds millicode library to the list of input files. */
+
+static void
+hppaelf_after_parse (void)
+{
+ if (link_info.relocatable)
+ lang_add_unique (".text");
+
+ /* Enable this once we split millicode stuff from libgcc:
+ lang_add_input_file ("milli",
+ lang_input_file_is_l_enum,
+ NULL);
+ */
+
+ after_parse_default ();
+}
+
+/* This is called before the input files are opened. We create a new
+ fake input file to hold the stub sections. */
+
+static void
+hppaelf_create_output_section_statements (void)
+{
+ if (!(bfd_get_flavour (link_info.output_bfd) == bfd_target_elf_flavour
+ && (elf_object_id (link_info.output_bfd) == HPPA32_ELF_DATA
+ || elf_object_id (link_info.output_bfd) == HPPA64_ELF_DATA)))
+ return;
+
+ stub_file = lang_add_input_file ("linker stubs",
+ lang_input_file_is_fake_enum,
+ NULL);
+ stub_file->the_bfd = bfd_create ("linker stubs", link_info.output_bfd);
+ if (stub_file->the_bfd == NULL
+ || ! bfd_set_arch_mach (stub_file->the_bfd,
+ bfd_get_arch (link_info.output_bfd),
+ bfd_get_mach (link_info.output_bfd)))
+ {
+ einfo ("%X%P: can not create BFD %E\n");
+ return;
+ }
+
+ stub_file->the_bfd->flags |= BFD_LINKER_CREATED;
+ ldlang_add_file (stub_file);
+}
+
+
+struct hook_stub_info
+{
+ lang_statement_list_type add;
+ asection *input_section;
+};
+
+/* Traverse the linker tree to find the spot where the stub goes. */
+
+static bfd_boolean
+hook_in_stub (struct hook_stub_info *info, lang_statement_union_type **lp)
+{
+ lang_statement_union_type *l;
+ bfd_boolean ret;
+
+ for (; (l = *lp) != NULL; lp = &l->header.next)
+ {
+ switch (l->header.type)
+ {
+ case lang_constructors_statement_enum:
+ ret = hook_in_stub (info, &constructor_list.head);
+ if (ret)
+ return ret;
+ break;
+
+ case lang_output_section_statement_enum:
+ ret = hook_in_stub (info,
+ &l->output_section_statement.children.head);
+ if (ret)
+ return ret;
+ break;
+
+ case lang_wild_statement_enum:
+ ret = hook_in_stub (info, &l->wild_statement.children.head);
+ if (ret)
+ return ret;
+ break;
+
+ case lang_group_statement_enum:
+ ret = hook_in_stub (info, &l->group_statement.children.head);
+ if (ret)
+ return ret;
+ break;
+
+ case lang_input_section_enum:
+ if (l->input_section.section == info->input_section)
+ {
+ /* We've found our section. Insert the stub immediately
+ before its associated input section. */
+ *lp = info->add.head;
+ *(info->add.tail) = l;
+ return TRUE;
+ }
+ break;
+
+ case lang_data_statement_enum:
+ case lang_reloc_statement_enum:
+ case lang_object_symbols_statement_enum:
+ case lang_output_statement_enum:
+ case lang_target_statement_enum:
+ case lang_input_statement_enum:
+ case lang_assignment_statement_enum:
+ case lang_padding_statement_enum:
+ case lang_address_statement_enum:
+ case lang_fill_statement_enum:
+ break;
+
+ default:
+ FAIL ();
+ break;
+ }
+ }
+ return FALSE;
+}
+
+
+/* Call-back for elf32_hppa_size_stubs. */
+
+/* Create a new stub section, and arrange for it to be linked
+ immediately before INPUT_SECTION. */
+
+static asection *
+hppaelf_add_stub_section (const char *stub_sec_name, asection *input_section)
+{
+ asection *stub_sec;
+ flagword flags;
+ asection *output_section;
+ const char *secname;
+ lang_output_section_statement_type *os;
+ struct hook_stub_info info;
+
+ flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE
+ | SEC_HAS_CONTENTS | SEC_RELOC | SEC_IN_MEMORY | SEC_KEEP);
+ stub_sec = bfd_make_section_anyway_with_flags (stub_file->the_bfd,
+ stub_sec_name, flags);
+ if (stub_sec == NULL)
+ goto err_ret;
+
+ output_section = input_section->output_section;
+ secname = bfd_get_section_name (output_section->owner, output_section);
+ os = lang_output_section_find (secname);
+
+ info.input_section = input_section;
+ lang_list_init (&info.add);
+ lang_add_section (&info.add, stub_sec, os);
+
+ if (info.add.head == NULL)
+ goto err_ret;
+
+ if (hook_in_stub (&info, &os->children.head))
+ return stub_sec;
+
+ err_ret:
+ einfo ("%X%P: can not make stub section: %E\n");
+ return NULL;
+}
+
+
+/* Another call-back for elf32_hppa_size_stubs. */
+
+static void
+hppaelf_layout_sections_again (void)
+{
+ /* If we have changed sizes of the stub sections, then we need
+ to recalculate all the section offsets. This may mean we need to
+ add even more stubs. */
+ gld${EMULATION_NAME}_map_segments (TRUE);
+ need_laying_out = -1;
+}
+
+
+static void
+build_section_lists (lang_statement_union_type *statement)
+{
+ if (statement->header.type == lang_input_section_enum)
+ {
+ asection *i = statement->input_section.section;
+
+ if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
+ && (i->flags & SEC_EXCLUDE) == 0
+ && i->output_section != NULL
+ && i->output_section->owner == link_info.output_bfd)
+ {
+ elf32_hppa_next_input_section (&link_info, i);
+ }
+ }
+}
+
+
+/* For the PA we use this opportunity to size and build linker stubs. */
+
+static void
+gld${EMULATION_NAME}_after_allocation (void)
+{
+ /* bfd_elf_discard_info just plays with data and debugging sections,
+ ie. doesn't affect code size, so we can delay resizing the
+ sections. It's likely we'll resize everything in the process of
+ adding stubs. */
+ if (bfd_elf_discard_info (link_info.output_bfd, &link_info))
+ need_laying_out = 1;
+
+ /* If generating a relocatable output file, then we don't
+ have to examine the relocs. */
+ if (stub_file != NULL && !link_info.relocatable)
+ {
+ int ret = elf32_hppa_setup_section_lists (link_info.output_bfd,
+ &link_info);
+
+ if (ret != 0)
+ {
+ if (ret < 0)
+ {
+ einfo ("%X%P: can not size stub section: %E\n");
+ return;
+ }
+
+ lang_for_each_statement (build_section_lists);
+
+ /* Call into the BFD backend to do the real work. */
+ if (! elf32_hppa_size_stubs (link_info.output_bfd,
+ stub_file->the_bfd,
+ &link_info,
+ multi_subspace,
+ group_size,
+ &hppaelf_add_stub_section,
+ &hppaelf_layout_sections_again))
+ {
+ einfo ("%X%P: can not size stub section: %E\n");
+ return;
+ }
+ }
+ }
+
+ if (need_laying_out != -1)
+ gld${EMULATION_NAME}_map_segments (need_laying_out);
+
+ if (! link_info.relocatable)
+ {
+ /* Set the global data pointer. */
+ if (! elf32_hppa_set_gp (link_info.output_bfd, &link_info))
+ {
+ einfo ("%X%P: can not set gp\n");
+ return;
+ }
+
+ /* Now build the linker stubs. */
+ if (stub_file != NULL && stub_file->the_bfd->sections != NULL)
+ {
+ if (! elf32_hppa_build_stubs (&link_info))
+ einfo ("%X%P: can not build stubs: %E\n");
+ }
+ }
+}
+
+
+/* Avoid processing the fake stub_file in vercheck, stat_needed and
+ check_needed routines. */
+
+static void (*real_func) (lang_input_statement_type *);
+
+static void hppa_for_each_input_file_wrapper (lang_input_statement_type *l)
+{
+ if (l != stub_file)
+ (*real_func) (l);
+}
+
+static void
+hppa_lang_for_each_input_file (void (*func) (lang_input_statement_type *))
+{
+ real_func = func;
+ lang_for_each_input_file (&hppa_for_each_input_file_wrapper);
+}
+
+#define lang_for_each_input_file hppa_lang_for_each_input_file
+
+EOF
+
+# Define some shell vars to insert bits of code into the standard elf
+# parse_args and list_options functions.
+#
+PARSE_AND_LIST_PROLOGUE='
+#define OPTION_MULTI_SUBSPACE 301
+#define OPTION_STUBGROUP_SIZE (OPTION_MULTI_SUBSPACE + 1)
+'
+
+PARSE_AND_LIST_LONGOPTS='
+ { "multi-subspace", no_argument, NULL, OPTION_MULTI_SUBSPACE },
+ { "stub-group-size", required_argument, NULL, OPTION_STUBGROUP_SIZE },
+'
+
+PARSE_AND_LIST_OPTIONS='
+ fprintf (file, _("\
+ --multi-subspace Generate import and export stubs to support\n\
+ multiple sub-space shared libraries\n"
+ ));
+ fprintf (file, _("\
+ --stub-group-size=N Maximum size of a group of input sections that\n\
+ can be handled by one stub section. A negative\n\
+ value locates all stubs before their branches\n\
+ (with a group size of -N), while a positive\n\
+ value allows two groups of input sections, one\n\
+ before, and one after each stub section.\n\
+ Values of +/-1 indicate the linker should\n\
+ choose suitable defaults.\n"
+ ));
+'
+
+PARSE_AND_LIST_ARGS_CASES='
+ case OPTION_MULTI_SUBSPACE:
+ multi_subspace = 1;
+ break;
+
+ case OPTION_STUBGROUP_SIZE:
+ {
+ const char *end;
+ group_size = bfd_scan_vma (optarg, &end, 0);
+ if (*end)
+ einfo (_("%P%F: invalid number `%s'\''\n"), optarg);
+ }
+ break;
+'
+
+# Put these extra hppaelf routines in ld_${EMULATION_NAME}_emulation
+#
+LDEMUL_AFTER_PARSE=hppaelf_after_parse
+LDEMUL_AFTER_ALLOCATION=gld${EMULATION_NAME}_after_allocation
+LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS=hppaelf_create_output_section_statements
diff --git a/binutils-2.21/ld/emultempl/ia64elf.em b/binutils-2.21/ld/emultempl/ia64elf.em
new file mode 100644
index 0000000..88d5748
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/ia64elf.em
@@ -0,0 +1,65 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2003, 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em, and defines extra ia64-elf
+# specific routines.
+#
+# Define some shell vars to insert bits of code into the standard elf
+# parse_args and list_options functions.
+#
+fragment <<EOF
+
+/* None zero if generating binary for Intel Itanium processor. */
+static int itanium = 0;
+
+static void
+gld${EMULATION_NAME}_after_parse (void)
+{
+ link_info.relax_pass = 2;
+ bfd_elf${ELFSIZE}_ia64_after_parse (itanium);
+
+ after_parse_default ();
+}
+
+EOF
+
+PARSE_AND_LIST_PROLOGUE='
+#define OPTION_ITANIUM 300
+'
+
+PARSE_AND_LIST_LONGOPTS='
+ { "itanium", no_argument, NULL, OPTION_ITANIUM},
+'
+
+PARSE_AND_LIST_OPTIONS='
+ fprintf (file, _("\
+ --itanium Generate code for Intel Itanium processor\n"
+ ));
+'
+
+PARSE_AND_LIST_ARGS_CASES='
+ case OPTION_ITANIUM:
+ itanium = 1;
+ break;
+'
+
+LDEMUL_AFTER_PARSE=gld${EMULATION_NAME}_after_parse
+source_em ${srcdir}/emultempl/needrelax.em
diff --git a/binutils-2.21/ld/emultempl/irix.em b/binutils-2.21/ld/emultempl/irix.em
new file mode 100644
index 0000000..41b8ce4
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/irix.em
@@ -0,0 +1,44 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+fragment <<EOF
+
+#include "ld.h"
+#include "ldmain.h"
+#include "libiberty.h"
+
+/* The native IRIX linker will always create a DT_SONAME for shared objects.
+ While this shouldn't really be necessary for ABI conformance, some versions
+ of the native linker will segfault if the tag is missing. */
+
+static void
+irix_after_open (void)
+{
+ if (link_info.shared && command_line.soname == 0)
+ command_line.soname
+ = (char *) lbasename (bfd_get_filename (link_info.output_bfd));
+
+ gld${EMULATION_NAME}_after_open ();
+}
+EOF
+
+LDEMUL_AFTER_OPEN=irix_after_open
+source_em "${srcdir}/emultempl/mipself.em"
diff --git a/binutils-2.21/ld/emultempl/linux.em b/binutils-2.21/ld/emultempl/linux.em
new file mode 100644
index 0000000..2a2a960
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/linux.em
@@ -0,0 +1,211 @@
+# This shell script emits a C file. -*- C -*-
+# It does some substitutions.
+if [ -z "$MACHINE" ]; then
+ OUTPUT_ARCH=${ARCH}
+else
+ OUTPUT_ARCH=${ARCH}:${MACHINE}
+fi
+fragment <<EOF
+/* This file is is generated by a shell script. DO NOT EDIT! */
+
+/* Linux a.out emulation code for ${EMULATION_NAME}
+ Copyright 1991, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002,
+ 2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+ Written by Steve Chamberlain <sac@cygnus.com>
+ Linux support by Eric Youngdale <ericy@cais.cais.com>
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#define TARGET_IS_${EMULATION_NAME}
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+
+#include "ld.h"
+#include "ldmain.h"
+#include "ldmisc.h"
+#include "ldexp.h"
+#include "ldlang.h"
+#include "ldfile.h"
+#include "ldemul.h"
+
+static void
+gld${EMULATION_NAME}_before_parse (void)
+{
+ ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
+ config.dynamic_link = TRUE;
+ config.has_shared = TRUE;
+}
+
+/* Try to open a dynamic archive. This is where we know that Linux
+ dynamic libraries have an extension of .sa. */
+
+static bfd_boolean
+gld${EMULATION_NAME}_open_dynamic_archive
+ (const char *arch, search_dirs_type *search, lang_input_statement_type *entry)
+{
+ char *string;
+
+ if (! entry->is_archive)
+ return FALSE;
+
+ string = (char *) xmalloc (strlen (search->name)
+ + strlen (entry->filename)
+ + strlen (arch)
+ + sizeof "/lib.sa");
+
+ sprintf (string, "%s/lib%s%s.sa", search->name, entry->filename, arch);
+
+ if (! ldfile_try_open_bfd (string, entry))
+ {
+ free (string);
+ return FALSE;
+ }
+
+ entry->filename = string;
+
+ return TRUE;
+}
+
+/* This is called by the create_output_section_statements routine via
+ lang_for_each_statement. It locates any address assignment to
+ .text, and modifies it to include the size of the headers. This
+ causes -Ttext to mean the starting address of the header, rather
+ than the starting address of .text, which is compatible with other
+ Linux tools. */
+
+static void
+gld${EMULATION_NAME}_find_address_statement (lang_statement_union_type *s)
+{
+ if (s->header.type == lang_address_statement_enum
+ && strcmp (s->address_statement.section_name, ".text") == 0)
+ {
+ ASSERT (s->address_statement.address->type.node_class == etree_value);
+ s->address_statement.address->value.value += 0x20;
+ }
+}
+
+/* This is called before opening the input BFD's. */
+
+static void
+gld${EMULATION_NAME}_create_output_section_statements (void)
+{
+ lang_for_each_statement (gld${EMULATION_NAME}_find_address_statement);
+}
+
+/* This is called after the sections have been attached to output
+ sections, but before any sizes or addresses have been set. */
+
+static void
+gld${EMULATION_NAME}_before_allocation (void)
+{
+ if (link_info.relocatable)
+ return;
+
+ /* Let the backend work out the sizes of any sections required by
+ dynamic linking. */
+ if (! bfd_${EMULATION_NAME}_size_dynamic_sections (link_info.output_bfd,
+ &link_info))
+ einfo ("%P%F: failed to set dynamic section sizes: %E\n");
+
+ before_allocation_default ();
+}
+
+static char *
+gld${EMULATION_NAME}_get_script (int *isfile)
+EOF
+
+if test -n "$COMPILE_IN"
+then
+# Scripts compiled in.
+
+# sed commands to quote an ld script as a C string.
+sc="-f stringify.sed"
+
+fragment <<EOF
+{
+ *isfile = 0;
+
+ if (link_info.relocatable && config.build_constructors)
+ return
+EOF
+sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c
+echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c
+echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c
+echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c
+echo ' ; else return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
+echo '; }' >> e${EMULATION_NAME}.c
+
+else
+# Scripts read from the filesystem.
+
+fragment <<EOF
+{
+ *isfile = 1;
+
+ if (link_info.relocatable && config.build_constructors)
+ return "ldscripts/${EMULATION_NAME}.xu";
+ else if (link_info.relocatable)
+ return "ldscripts/${EMULATION_NAME}.xr";
+ else if (!config.text_read_only)
+ return "ldscripts/${EMULATION_NAME}.xbn";
+ else if (!config.magic_demand_paged)
+ return "ldscripts/${EMULATION_NAME}.xn";
+ else
+ return "ldscripts/${EMULATION_NAME}.x";
+}
+EOF
+
+fi
+
+fragment <<EOF
+
+struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
+{
+ gld${EMULATION_NAME}_before_parse,
+ syslib_default,
+ hll_default,
+ after_parse_default,
+ after_open_default,
+ after_allocation_default,
+ set_output_arch_default,
+ ldemul_default_target,
+ gld${EMULATION_NAME}_before_allocation,
+ gld${EMULATION_NAME}_get_script,
+ "${EMULATION_NAME}",
+ "${OUTPUT_FORMAT}",
+ finish_default,
+ gld${EMULATION_NAME}_create_output_section_statements,
+ gld${EMULATION_NAME}_open_dynamic_archive,
+ NULL, /* place orphan */
+ NULL, /* set symbols */
+ NULL, /* parse args */
+ NULL, /* add_options */
+ NULL, /* handle_option */
+ NULL, /* unrecognized file */
+ NULL, /* list options */
+ NULL, /* recognized file */
+ NULL, /* find_potential_libraries */
+ NULL /* new_vers_pattern */
+};
+EOF
diff --git a/binutils-2.21/ld/emultempl/lnk960.em b/binutils-2.21/ld/emultempl/lnk960.em
new file mode 100644
index 0000000..e13233c
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/lnk960.em
@@ -0,0 +1,290 @@
+# This shell script emits a C file. -*- C -*-
+# It does some substitutions.
+fragment <<EOF
+/* intel coff loader emulation specific stuff
+ Copyright 1991, 1992, 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2003,
+ 2005, 2007, 2008 Free Software Foundation, Inc.
+ Written by Steve Chamberlain steve@cygnus.com
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "libiberty.h"
+#include "bfd.h"
+#include "bfdlink.h"
+
+/*#include "archures.h"*/
+#include "ld.h"
+#include "ldmain.h"
+#include "ldmisc.h"
+#include "ldexp.h"
+#include "ldlang.h"
+#include "ldfile.h"
+#include "ldemul.h"
+
+typedef struct lib_list {
+ char *name;
+ struct lib_list *next;
+} lib_list_type;
+
+static lib_list_type *hll_list;
+static lib_list_type **hll_list_tail = &hll_list;
+
+static lib_list_type *syslib_list;
+static lib_list_type **syslib_list_tail = &syslib_list;
+
+
+static void
+append (lib_list_type ***list, char *name)
+{
+ lib_list_type *element = (lib_list_type *) xmalloc (sizeof (lib_list_type));
+
+ element->name = name;
+ element->next = (lib_list_type *) NULL;
+ **list = element;
+ *list = &element->next;
+
+}
+
+static bfd_boolean had_hll = FALSE;
+static bfd_boolean had_hll_name = FALSE;
+
+static void
+lnk960_hll (char *name)
+{
+ had_hll = TRUE;
+ if (name != (char *) NULL)
+ {
+ had_hll_name = TRUE;
+ append (&hll_list_tail, name);
+ }
+}
+
+static void
+lnk960_syslib (char *name)
+{
+ append (&syslib_list_tail, name);
+}
+
+
+static void
+lnk960_before_parse (void)
+{
+ char *name = getenv ("I960BASE");
+
+ if (name == (char *) NULL)
+ {
+ name = getenv("G960BASE");
+ if (name == (char *) NULL)
+ einfo ("%P%F I960BASE and G960BASE not set\n");
+ }
+
+ ldfile_add_library_path (concat (name, "/lib", (const char *) NULL), FALSE);
+ ldfile_output_architecture = bfd_arch_i960;
+ ldfile_output_machine = bfd_mach_i960_core;
+}
+
+static void
+add_on (lib_list_type *list, lang_input_file_enum_type search)
+{
+ while (list)
+ {
+ lang_add_input_file (list->name, search, (char *) NULL);
+ list = list->next;
+ }
+}
+
+static void
+lnk960_after_parse (void)
+{
+ /* If there has been no arch, default to -KB */
+ if (ldfile_output_machine_name[0] == 0)
+ ldfile_add_arch ("KB");
+
+ /* if there has been no hll list then add our own */
+
+ if (had_hll && !had_hll_name)
+ {
+ append (&hll_list_tail, "cg");
+ if (ldfile_output_machine == bfd_mach_i960_ka_sa
+ || ldfile_output_machine == bfd_mach_i960_ca)
+ append (&hll_list_tail, "fpg");
+ }
+
+ add_on (hll_list, lang_input_file_is_l_enum);
+ add_on (syslib_list, lang_input_file_is_search_file_enum);
+}
+
+static void
+lnk960_after_allocation (void)
+{
+ if (!link_info.relocatable)
+ {
+ lang_abs_symbol_at_end_of (".text", "_etext");
+ lang_abs_symbol_at_end_of (".data", "_edata");
+ lang_abs_symbol_at_beginning_of (".bss", "_bss_start");
+ lang_abs_symbol_at_end_of (".bss", "_end");
+ }
+}
+
+
+static struct
+ {
+ unsigned long number;
+ char *name;
+ }
+machine_table[] =
+{
+ { bfd_mach_i960_core ,"CORE" },
+ { bfd_mach_i960_kb_sb ,"KB" },
+ { bfd_mach_i960_kb_sb ,"SB" },
+ { bfd_mach_i960_mc ,"MC" },
+ { bfd_mach_i960_xa ,"XA" },
+ { bfd_mach_i960_ca ,"CA" },
+ { bfd_mach_i960_ka_sa ,"KA" },
+ { bfd_mach_i960_ka_sa ,"SA" },
+ { bfd_mach_i960_jx ,"JX" },
+ { bfd_mach_i960_hx ,"HX" },
+
+ { bfd_mach_i960_core ,"core" },
+ { bfd_mach_i960_kb_sb ,"kb" },
+ { bfd_mach_i960_kb_sb ,"sb" },
+ { bfd_mach_i960_mc ,"mc" },
+ { bfd_mach_i960_xa ,"xa" },
+ { bfd_mach_i960_ca ,"ca" },
+ { bfd_mach_i960_ka_sa ,"ka" },
+ { bfd_mach_i960_ka_sa ,"sa" },
+ { bfd_mach_i960_jx ,"jx" },
+ { bfd_mach_i960_hx ,"hx" },
+
+ { 0, (char *) NULL }
+};
+
+static void
+lnk960_set_output_arch (void)
+{
+ /* Set the output architecture and machine if possible */
+ unsigned int i;
+ ldfile_output_machine = bfd_mach_i960_core;
+ for (i= 0; machine_table[i].name != (char*) NULL; i++)
+ {
+ if (strcmp (ldfile_output_machine_name, machine_table[i].name) == 0)
+ {
+ ldfile_output_machine = machine_table[i].number;
+ break;
+ }
+ }
+ bfd_set_arch_mach (link_info.output_bfd, ldfile_output_architecture,
+ ldfile_output_machine);
+}
+
+static char *
+lnk960_choose_target (int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED)
+{
+ char *from_outside = getenv (TARGET_ENVIRON);
+ if (from_outside != (char *) NULL)
+ return from_outside;
+#ifdef LNK960_LITTLE
+ return "coff-Intel-little";
+#else
+ return "coff-Intel-big";
+#endif
+}
+
+static char *
+lnk960_get_script (int *isfile)
+EOF
+
+if test -n "$COMPILE_IN"
+then
+# Scripts compiled in.
+
+# sed commands to quote an ld script as a C string.
+sc="-f stringify.sed"
+
+fragment <<EOF
+{
+ *isfile = 0;
+
+ if (link_info.relocatable && config.build_constructors)
+ return
+EOF
+sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c
+echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c
+echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c
+echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c
+echo ' ; else return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
+echo '; }' >> e${EMULATION_NAME}.c
+
+else
+# Scripts read from the filesystem.
+
+fragment <<EOF
+{
+ *isfile = 1;
+
+ if (link_info.relocatable && config.build_constructors)
+ return "ldscripts/${EMULATION_NAME}.xu";
+ else if (link_info.relocatable)
+ return "ldscripts/${EMULATION_NAME}.xr";
+ else if (!config.text_read_only)
+ return "ldscripts/${EMULATION_NAME}.xbn";
+ else if (!config.magic_demand_paged)
+ return "ldscripts/${EMULATION_NAME}.xn";
+ else
+ return "ldscripts/${EMULATION_NAME}.x";
+}
+EOF
+
+fi
+
+fragment <<EOF
+
+struct ld_emulation_xfer_struct ld_lnk960_emulation =
+{
+ lnk960_before_parse,
+ lnk960_syslib,
+ lnk960_hll,
+ lnk960_after_parse,
+ NULL, /* after_open */
+ lnk960_after_allocation,
+ lnk960_set_output_arch,
+ lnk960_choose_target,
+ before_allocation_default,
+ lnk960_get_script,
+ "lnk960",
+ "",
+ finish_default,
+ NULL, /* create output section statements */
+ NULL, /* open dynamic archive */
+ NULL, /* place orphan */
+ NULL, /* set symbols */
+ NULL, /* parse args */
+ NULL, /* add_options */
+ NULL, /* handle_option */
+ NULL, /* unrecognized file */
+ NULL, /* list options */
+ NULL, /* recognized file */
+ NULL, /* find_potential_libraries */
+ NULL /* new_vers_pattern */
+};
+EOF
diff --git a/binutils-2.21/ld/emultempl/m68hc1xelf.em b/binutils-2.21/ld/emultempl/m68hc1xelf.em
new file mode 100644
index 0000000..4751346
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/m68hc1xelf.em
@@ -0,0 +1,373 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 1991, 1993, 1994, 1997, 1999, 2000, 2001, 2002, 2003, 2005, 2007,
+# 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em, and defines extra m68hc12-elf
+# and m68hc11-elf specific routines. It is used to generate the
+# HC11/HC12 trampolines to call a far function by using a normal 'jsr/bsr'.
+#
+# - The HC11/HC12 relocations are checked to see if there is a
+# R_M68HC11_16 relocation to a symbol marked with STO_M68HC12_FAR.
+# This relocation cannot be made on the symbol but must be made on
+# its trampoline
+# The trampolines to generate are collected during this pass
+# (See elf32_m68hc11_size_stubs)
+#
+# - The trampolines are generated in a ".tramp" section. The generation
+# takes care of HC11 and HC12 specificities.
+# (See elf32_m68hc11_build_stubs)
+#
+# - During relocation the R_M68HC11_16 relocation to the far symbols
+# are redirected to the trampoline that was generated.
+#
+# Copied from hppaelf and adapted for M68HC11/M68HC12 specific needs.
+#
+fragment <<EOF
+
+#include "ldctor.h"
+#include "elf32-m68hc1x.h"
+
+static asection *m68hc11elf_add_stub_section (const char *, asection *);
+
+/* Fake input file for stubs. */
+static lang_input_statement_type *stub_file;
+
+/* By default the HC11/HC12 trampolines to call a far function using
+ a normal 'bsr' and 'jsr' convention are generated during the link.
+ The --no-trampoline option prevents that. */
+static int no_trampoline = 0;
+
+/* Name of memory bank window in the MEMORY description.
+ This is set by --bank-window option. */
+static const char* bank_window_name = 0;
+
+static void
+m68hc11_elf_${EMULATION_NAME}_before_allocation (void)
+{
+ lang_memory_region_type* region;
+ int ret;
+
+ gld${EMULATION_NAME}_before_allocation ();
+
+ /* If generating a relocatable output file, then we don't
+ have to generate the trampolines. */
+ if (link_info.relocatable)
+ return;
+
+ ret = elf32_m68hc11_setup_section_lists (link_info.output_bfd, &link_info);
+ if (ret != 0 && no_trampoline == 0)
+ {
+ if (ret < 0)
+ {
+ einfo ("%X%P: can not size stub section: %E\n");
+ return;
+ }
+
+ /* Call into the BFD backend to do the real work. */
+ if (!elf32_m68hc11_size_stubs (link_info.output_bfd,
+ stub_file->the_bfd,
+ &link_info,
+ &m68hc11elf_add_stub_section))
+ {
+ einfo ("%X%P: can not size stub section: %E\n");
+ return;
+ }
+ }
+
+ if (bank_window_name == 0)
+ return;
+
+ /* The 'bank_window_name' memory region is a special region that describes
+ the memory bank window to access to paged memory. For 68HC12
+ this is fixed and should be:
+
+ window (rx) : ORIGIN = 0x8000, LENGTH = 16K
+
+ But for 68HC11 this is board specific. The definition of such
+ memory region allows to control how this paged memory is accessed. */
+ region = lang_memory_region_lookup (bank_window_name, FALSE);
+
+ /* Check the length to see if it was defined in the script. */
+ if (region->length != 0)
+ {
+ struct m68hc11_page_info *pinfo;
+ unsigned i;
+
+ /* Get default values */
+ m68hc11_elf_get_bank_parameters (&link_info);
+ pinfo = &m68hc11_elf_hash_table (&link_info)->pinfo;
+
+ /* And override them with the region definition. */
+ pinfo->bank_size = region->length;
+ pinfo->bank_shift = 0;
+ for (i = pinfo->bank_size; i != 0; i >>= 1)
+ pinfo->bank_shift++;
+ pinfo->bank_shift--;
+ pinfo->bank_size = 1L << pinfo->bank_shift;
+ pinfo->bank_mask = (1 << pinfo->bank_shift) - 1;
+ pinfo->bank_physical = region->origin;
+ pinfo->bank_physical_end = region->origin + pinfo->bank_size;
+
+ if (pinfo->bank_size != region->length)
+ {
+ einfo (_("warning: the size of the 'window' memory region "
+ "is not a power of 2\n"));
+ einfo (_("warning: its size %d is truncated to %d\n"),
+ region->length, pinfo->bank_size);
+ }
+ }
+}
+
+/* This is called before the input files are opened. We create a new
+ fake input file to hold the stub sections. */
+
+static void
+m68hc11elf_create_output_section_statements (void)
+{
+ stub_file = lang_add_input_file ("linker stubs",
+ lang_input_file_is_fake_enum,
+ NULL);
+ stub_file->the_bfd = bfd_create ("linker stubs", link_info.output_bfd);
+ if (stub_file->the_bfd == NULL
+ || !bfd_set_arch_mach (stub_file->the_bfd,
+ bfd_get_arch (link_info.output_bfd),
+ bfd_get_mach (link_info.output_bfd)))
+ {
+ einfo ("%X%P: can not create BFD %E\n");
+ return;
+ }
+
+ ldlang_add_file (stub_file);
+}
+
+
+struct hook_stub_info
+{
+ lang_statement_list_type add;
+ asection *input_section;
+};
+
+/* Traverse the linker tree to find the spot where the stub goes. */
+
+static bfd_boolean
+hook_in_stub (struct hook_stub_info *info, lang_statement_union_type **lp)
+{
+ lang_statement_union_type *l;
+ bfd_boolean ret;
+
+ for (; (l = *lp) != NULL; lp = &l->header.next)
+ {
+ switch (l->header.type)
+ {
+ case lang_constructors_statement_enum:
+ ret = hook_in_stub (info, &constructor_list.head);
+ if (ret)
+ return ret;
+ break;
+
+ case lang_output_section_statement_enum:
+ ret = hook_in_stub (info,
+ &l->output_section_statement.children.head);
+ if (ret)
+ return ret;
+ break;
+
+ case lang_wild_statement_enum:
+ ret = hook_in_stub (info, &l->wild_statement.children.head);
+ if (ret)
+ return ret;
+ break;
+
+ case lang_group_statement_enum:
+ ret = hook_in_stub (info, &l->group_statement.children.head);
+ if (ret)
+ return ret;
+ break;
+
+ case lang_input_section_enum:
+ if (l->input_section.section == info->input_section
+ || strcmp (bfd_get_section_name (output_section,
+ l->input_section.section),
+ bfd_get_section_name (output_section,
+ info->input_section)) == 0)
+ {
+ /* We've found our section. Insert the stub immediately
+ before its associated input section. */
+ *lp = info->add.head;
+ *(info->add.tail) = l;
+ return TRUE;
+ }
+ break;
+
+ case lang_data_statement_enum:
+ case lang_reloc_statement_enum:
+ case lang_object_symbols_statement_enum:
+ case lang_output_statement_enum:
+ case lang_target_statement_enum:
+ case lang_input_statement_enum:
+ case lang_assignment_statement_enum:
+ case lang_padding_statement_enum:
+ case lang_address_statement_enum:
+ case lang_fill_statement_enum:
+ break;
+
+ default:
+ FAIL ();
+ break;
+ }
+ }
+ return FALSE;
+}
+
+
+/* Call-back for elf32_m68hc11_size_stubs. */
+
+/* Create a new stub section, and arrange for it to be linked
+ immediately before INPUT_SECTION. */
+
+static asection *
+m68hc11elf_add_stub_section (const char *stub_sec_name,
+ asection *tramp_section)
+{
+ asection *stub_sec;
+ flagword flags;
+ asection *output_section;
+ const char *secname;
+ lang_output_section_statement_type *os;
+ struct hook_stub_info info;
+
+ flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE
+ | SEC_HAS_CONTENTS | SEC_RELOC | SEC_IN_MEMORY | SEC_KEEP);
+ stub_sec = bfd_make_section_anyway_with_flags (stub_file->the_bfd,
+ stub_sec_name, flags);
+ if (stub_sec == NULL)
+ goto err_ret;
+
+ output_section = tramp_section->output_section;
+ secname = bfd_get_section_name (output_section->owner, output_section);
+ os = lang_output_section_find (secname);
+
+ /* Try to put the new section at the same place as an existing
+ .tramp section. Such .tramp section exists in most cases and
+ contains the trampoline code. This way we put the generated trampoline
+ at the correct place. */
+ info.input_section = tramp_section;
+ lang_list_init (&info.add);
+ lang_add_section (&info.add, stub_sec, os);
+
+ if (info.add.head == NULL)
+ goto err_ret;
+
+ if (hook_in_stub (&info, &os->children.head))
+ return stub_sec;
+
+ err_ret:
+ einfo ("%X%P: can not make stub section: %E\n");
+ return NULL;
+}
+
+/* For the 68HC12 we use this opportunity to build linker stubs. */
+
+static void
+m68hc11elf_after_allocation (void)
+{
+ /* Now build the linker stubs. */
+ if (stub_file->the_bfd->sections != NULL)
+ {
+ /* Call again the trampoline analyzer to initialize the trampoline
+ stubs with the correct symbol addresses. Since there could have
+ been relaxation, the symbol addresses that were found during
+ first call may no longer be correct. */
+ if (!elf32_m68hc11_size_stubs (link_info.output_bfd,
+ stub_file->the_bfd,
+ &link_info, 0))
+ {
+ einfo ("%X%P: can not size stub section: %E\n");
+ return;
+ }
+ if (!elf32_m68hc11_build_stubs (link_info.output_bfd, &link_info))
+ einfo ("%X%P: can not build stubs: %E\n");
+ }
+
+ gld${EMULATION_NAME}_after_allocation ();
+}
+
+
+/* Avoid processing the fake stub_file in vercheck, stat_needed and
+ check_needed routines. */
+
+static void (*real_func) (lang_input_statement_type *);
+
+static void m68hc11_for_each_input_file_wrapper (lang_input_statement_type *l)
+{
+ if (l != stub_file)
+ (*real_func) (l);
+}
+
+static void
+m68hc11_lang_for_each_input_file (void (*func) (lang_input_statement_type *))
+{
+ real_func = func;
+ lang_for_each_input_file (&m68hc11_for_each_input_file_wrapper);
+}
+
+#define lang_for_each_input_file m68hc11_lang_for_each_input_file
+
+EOF
+
+# Define some shell vars to insert bits of code into the standard elf
+# parse_args and list_options functions.
+#
+PARSE_AND_LIST_PROLOGUE='
+#define OPTION_NO_TRAMPOLINE 300
+#define OPTION_BANK_WINDOW 301
+'
+
+# The options are repeated below so that no abbreviations are allowed.
+# Otherwise -s matches stub-group-size
+PARSE_AND_LIST_LONGOPTS='
+ { "no-trampoline", no_argument, NULL, OPTION_NO_TRAMPOLINE },
+ { "bank-window", required_argument, NULL, OPTION_BANK_WINDOW },
+'
+
+PARSE_AND_LIST_OPTIONS='
+ fprintf (file, _(
+" --no-trampoline Do not generate the far trampolines used to call\n"
+" a far function using 'jsr' or 'bsr'.\n"
+" --bank-window NAME Specify the name of the memory region describing\n"
+" the layout of the memory bank window.\n"
+ ));
+'
+
+PARSE_AND_LIST_ARGS_CASES='
+ case OPTION_NO_TRAMPOLINE:
+ no_trampoline = 1;
+ break;
+ case OPTION_BANK_WINDOW:
+ bank_window_name = optarg;
+ break;
+'
+
+# Put these extra m68hc11elf routines in ld_${EMULATION_NAME}_emulation
+#
+LDEMUL_BEFORE_ALLOCATION=m68hc11_elf_${EMULATION_NAME}_before_allocation
+LDEMUL_AFTER_ALLOCATION=m68hc11elf_after_allocation
+LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS=m68hc11elf_create_output_section_statements
diff --git a/binutils-2.21/ld/emultempl/m68kcoff.em b/binutils-2.21/ld/emultempl/m68kcoff.em
new file mode 100644
index 0000000..276c3b2
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/m68kcoff.em
@@ -0,0 +1,243 @@
+# This shell script emits a C file. -*- C -*-
+# It does some substitutions.
+fragment <<EOF
+/* This file is is generated by a shell script. DO NOT EDIT! */
+
+/* Handle embedded relocs for m68k.
+ Copyright 2000, 2002, 2003, 2004, 2005, 2007, 2008
+ Free Software Foundation, Inc.
+ Written by Michael Sokolov <msokolov@ivan.Harhan.ORG>, based on generic.em
+ by Steve Chamberlain <steve@cygnus.com>, embedded relocs code based on
+ mipsecoff.em by Ian Lance Taylor <ian@cygnus.com>.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#define TARGET_IS_${EMULATION_NAME}
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+
+#include "ld.h"
+#include "ldmain.h"
+#include "ldexp.h"
+#include "ldlang.h"
+#include "ldfile.h"
+#include "ldemul.h"
+#include "ldmisc.h"
+
+static void check_sections (bfd *, asection *, void *);
+
+static void
+gld${EMULATION_NAME}_before_parse (void)
+{
+#ifndef TARGET_ /* I.e., if not generic. */
+ ldfile_set_output_arch ("`echo ${ARCH}`", bfd_arch_unknown);
+#endif /* not TARGET_ */
+}
+
+/* This function is run after all the input files have been opened.
+ We create a .emreloc section for each input file with a non zero
+ .data section. The BFD backend will fill in these sections with
+ magic numbers which can be used to relocate the data section at run
+ time. */
+
+static void
+gld${EMULATION_NAME}_after_open (void)
+{
+ bfd *abfd;
+
+ if (! command_line.embedded_relocs
+ || link_info.relocatable)
+ return;
+
+ for (abfd = link_info.input_bfds; abfd != NULL; abfd = abfd->link_next)
+ {
+ asection *datasec;
+
+ /* As first-order business, make sure that each input BFD is COFF. It
+ better be, as we are directly calling a COFF backend function. */
+ if (bfd_get_flavour (abfd) != bfd_target_coff_flavour)
+ einfo ("%F%B: all input objects must be COFF for --embedded-relocs\n");
+
+ datasec = bfd_get_section_by_name (abfd, ".data");
+
+ /* Note that we assume that the reloc_count field has already
+ been set up. We could call bfd_get_reloc_upper_bound, but
+ that returns the size of a memory buffer rather than a reloc
+ count. We do not want to call bfd_canonicalize_reloc,
+ because although it would always work it would force us to
+ read in the relocs into BFD canonical form, which would waste
+ a significant amount of time and memory. */
+ if (datasec != NULL && datasec->reloc_count > 0)
+ {
+ asection *relsec;
+
+ relsec = bfd_make_section_with_flags (abfd, ".emreloc",
+ (SEC_ALLOC
+ | SEC_LOAD
+ | SEC_HAS_CONTENTS
+ | SEC_IN_MEMORY));
+ if (relsec == NULL
+ || ! bfd_set_section_alignment (abfd, relsec, 2)
+ || ! bfd_set_section_size (abfd, relsec,
+ datasec->reloc_count * 12))
+ einfo ("%F%B: can not create .emreloc section: %E\n");
+ }
+
+ /* Double check that all other data sections are empty, as is
+ required for embedded PIC code. */
+ bfd_map_over_sections (abfd, check_sections, datasec);
+ }
+}
+
+/* Check that of the data sections, only the .data section has
+ relocs. This is called via bfd_map_over_sections. */
+
+static void
+check_sections (bfd *abfd, asection *sec, void *datasec)
+{
+ if ((bfd_get_section_flags (abfd, sec) & SEC_DATA)
+ && sec != datasec
+ && sec->reloc_count != 0)
+ einfo ("%B%X: section %s has relocs; can not use --embedded-relocs\n",
+ abfd, bfd_get_section_name (abfd, sec));
+}
+
+/* This function is called after the section sizes and offsets have
+ been set. If we are generating embedded relocs, it calls a special
+ BFD backend routine to do the work. */
+
+static void
+gld${EMULATION_NAME}_after_allocation (void)
+{
+ bfd *abfd;
+
+ if (! command_line.embedded_relocs
+ || link_info.relocatable)
+ return;
+
+ for (abfd = link_info.input_bfds; abfd != NULL; abfd = abfd->link_next)
+ {
+ asection *datasec, *relsec;
+ char *errmsg;
+
+ datasec = bfd_get_section_by_name (abfd, ".data");
+
+ if (datasec == NULL || datasec->reloc_count == 0)
+ continue;
+
+ relsec = bfd_get_section_by_name (abfd, ".emreloc");
+ ASSERT (relsec != NULL);
+
+ if (! bfd_m68k_coff_create_embedded_relocs (abfd, &link_info,
+ datasec, relsec,
+ &errmsg))
+ {
+ if (errmsg == NULL)
+ einfo ("%B%X: can not create runtime reloc information: %E\n",
+ abfd);
+ else
+ einfo ("%X%B: can not create runtime reloc information: %s\n",
+ abfd, errmsg);
+ }
+ }
+}
+
+static char *
+gld${EMULATION_NAME}_get_script (int *isfile)
+EOF
+
+if test -n "$COMPILE_IN"
+then
+# Scripts compiled in.
+
+# sed commands to quote an ld script as a C string.
+sc="-f stringify.sed"
+
+fragment <<EOF
+{
+ *isfile = 0;
+
+ if (link_info.relocatable && config.build_constructors)
+ return
+EOF
+sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c
+echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c
+echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c
+echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c
+echo ' ; else return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
+echo '; }' >> e${EMULATION_NAME}.c
+
+else
+# Scripts read from the filesystem.
+
+fragment <<EOF
+{
+ *isfile = 1;
+
+ if (link_info.relocatable && config.build_constructors)
+ return "ldscripts/${EMULATION_NAME}.xu";
+ else if (link_info.relocatable)
+ return "ldscripts/${EMULATION_NAME}.xr";
+ else if (!config.text_read_only)
+ return "ldscripts/${EMULATION_NAME}.xbn";
+ else if (!config.magic_demand_paged)
+ return "ldscripts/${EMULATION_NAME}.xn";
+ else
+ return "ldscripts/${EMULATION_NAME}.x";
+}
+EOF
+
+fi
+
+fragment <<EOF
+
+struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
+{
+ gld${EMULATION_NAME}_before_parse,
+ syslib_default,
+ hll_default,
+ after_parse_default,
+ gld${EMULATION_NAME}_after_open,
+ gld${EMULATION_NAME}_after_allocation,
+ set_output_arch_default,
+ ldemul_default_target,
+ before_allocation_default,
+ gld${EMULATION_NAME}_get_script,
+ "${EMULATION_NAME}",
+ "${OUTPUT_FORMAT}",
+ finish_default,
+ NULL, /* create output section statements */
+ NULL, /* open dynamic archive */
+ NULL, /* place orphan */
+ NULL, /* set symbols */
+ NULL, /* parse args */
+ NULL, /* add_options */
+ NULL, /* handle_option */
+ NULL, /* unrecognized file */
+ NULL, /* list options */
+ NULL, /* recognized file */
+ NULL, /* find_potential_libraries */
+ NULL /* new_vers_pattern */
+};
+EOF
diff --git a/binutils-2.21/ld/emultempl/m68kelf.em b/binutils-2.21/ld/emultempl/m68kelf.em
new file mode 100644
index 0000000..48a50bc
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/m68kelf.em
@@ -0,0 +1,250 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2000, 2001, 2003, 2005, 2007, 2008, 2009
+# Free Software Foundation, Inc.
+# Written by Michael Sokolov <msokolov@ivan.Harhan.ORG>, based on armelf.em
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+
+# This file is sourced from elf32.em, and defines some extra routines for m68k
+# embedded systems using ELF and for some other systems using m68k ELF. While
+# it is sourced from elf32.em for all m68k ELF configurations, here we include
+# only the features we want depending on the configuration.
+
+case ${target} in
+ m68*-*-elf)
+ echo "#define SUPPORT_EMBEDDED_RELOCS" >>e${EMULATION_NAME}.c
+ ;;
+esac
+
+case ${target} in
+ *-linux*)
+# Don't use multi-GOT by default due to glibc linker's assumption
+# that GOT pointer points to GOT[0].
+# got_handling_target_default=GOT_HANDLING_MULTIGOT
+ got_handling_target_default=GOT_HANDLING_SINGLE
+ ;;
+ *)
+ got_handling_target_default=GOT_HANDLING_SINGLE
+ ;;
+esac
+
+fragment <<EOF
+
+#define GOT_HANDLING_SINGLE (0)
+#define GOT_HANDLING_NEGATIVE (1)
+#define GOT_HANDLING_MULTIGOT (2)
+#define GOT_HANDLING_TARGET_DEFAULT ${got_handling_target_default}
+
+/* How to generate GOT. */
+static int got_handling = GOT_HANDLING_DEFAULT;
+
+#ifdef SUPPORT_EMBEDDED_RELOCS
+static void check_sections (bfd *, asection *, void *);
+#endif
+
+/* This function is run after all the input files have been opened. */
+
+static void
+m68k_elf_after_open (void)
+{
+ /* Call the standard elf routine. */
+ gld${EMULATION_NAME}_after_open ();
+
+#ifdef SUPPORT_EMBEDDED_RELOCS
+ if (command_line.embedded_relocs
+ && (! link_info.relocatable))
+ {
+ bfd *abfd;
+
+ /* In the embedded relocs mode we create a .emreloc section for each
+ input file with a nonzero .data section. The BFD backend will fill in
+ these sections with magic numbers which can be used to relocate the
+ data section at run time. */
+ for (abfd = link_info.input_bfds; abfd != NULL; abfd = abfd->link_next)
+ {
+ asection *datasec;
+
+ /* As first-order business, make sure that each input BFD is either
+ COFF or ELF. We need to call a special BFD backend function to
+ generate the embedded relocs, and we have such functions only for
+ COFF and ELF. */
+ if (bfd_get_flavour (abfd) != bfd_target_coff_flavour
+ && bfd_get_flavour (abfd) != bfd_target_elf_flavour)
+ einfo ("%F%B: all input objects must be COFF or ELF for --embedded-relocs\n");
+
+ datasec = bfd_get_section_by_name (abfd, ".data");
+
+ /* Note that we assume that the reloc_count field has already
+ been set up. We could call bfd_get_reloc_upper_bound, but
+ that returns the size of a memory buffer rather than a reloc
+ count. We do not want to call bfd_canonicalize_reloc,
+ because although it would always work it would force us to
+ read in the relocs into BFD canonical form, which would waste
+ a significant amount of time and memory. */
+ if (datasec != NULL && datasec->reloc_count > 0)
+ {
+ asection *relsec;
+
+ relsec = bfd_make_section_with_flags (abfd, ".emreloc",
+ (SEC_ALLOC
+ | SEC_LOAD
+ | SEC_HAS_CONTENTS
+ | SEC_IN_MEMORY));
+ if (relsec == NULL
+ || ! bfd_set_section_alignment (abfd, relsec, 2)
+ || ! bfd_set_section_size (abfd, relsec,
+ datasec->reloc_count * 12))
+ einfo ("%F%B: can not create .emreloc section: %E\n");
+ }
+
+ /* Double check that all other data sections are empty, as is
+ required for embedded PIC code. */
+ bfd_map_over_sections (abfd, check_sections, datasec);
+ }
+ }
+#endif /* SUPPORT_EMBEDDED_RELOCS */
+}
+
+#ifdef SUPPORT_EMBEDDED_RELOCS
+/* Check that of the data sections, only the .data section has
+ relocs. This is called via bfd_map_over_sections. */
+
+static void
+check_sections (bfd *abfd, asection *sec, void *datasec)
+{
+ if ((bfd_get_section_flags (abfd, sec) & SEC_DATA)
+ && sec != datasec
+ && sec->reloc_count != 0)
+ einfo ("%B%X: section %s has relocs; can not use --embedded-relocs\n",
+ abfd, bfd_get_section_name (abfd, sec));
+}
+
+#endif /* SUPPORT_EMBEDDED_RELOCS */
+
+/* This function is called after the section sizes and offsets have
+ been set. */
+
+static void
+m68k_elf_after_allocation (void)
+{
+ /* Call the standard elf routine. */
+ gld${EMULATION_NAME}_after_allocation ();
+
+#ifdef SUPPORT_EMBEDDED_RELOCS
+ if (command_line.embedded_relocs
+ && (! link_info.relocatable))
+ {
+ bfd *abfd;
+
+ /* If we are generating embedded relocs, call a special BFD backend
+ routine to do the work. */
+ for (abfd = link_info.input_bfds; abfd != NULL; abfd = abfd->link_next)
+ {
+ asection *datasec, *relsec;
+ char *errmsg;
+
+ datasec = bfd_get_section_by_name (abfd, ".data");
+
+ if (datasec == NULL || datasec->reloc_count == 0)
+ continue;
+
+ relsec = bfd_get_section_by_name (abfd, ".emreloc");
+ ASSERT (relsec != NULL);
+
+ if (bfd_get_flavour (abfd) == bfd_target_coff_flavour)
+ {
+ if (! bfd_m68k_coff_create_embedded_relocs (abfd, &link_info,
+ datasec, relsec,
+ &errmsg))
+ {
+ if (errmsg == NULL)
+ einfo ("%B%X: can not create runtime reloc information: %E\n",
+ abfd);
+ else
+ einfo ("%X%B: can not create runtime reloc information: %s\n",
+ abfd, errmsg);
+ }
+ }
+ else if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
+ {
+ if (! bfd_m68k_elf32_create_embedded_relocs (abfd, &link_info,
+ datasec, relsec,
+ &errmsg))
+ {
+ if (errmsg == NULL)
+ einfo ("%B%X: can not create runtime reloc information: %E\n",
+ abfd);
+ else
+ einfo ("%X%B: can not create runtime reloc information: %s\n",
+ abfd, errmsg);
+ }
+ }
+ else
+ abort ();
+ }
+ }
+#endif /* SUPPORT_EMBEDDED_RELOCS */
+}
+
+/* This is a convenient point to tell BFD about target specific flags.
+ After the output has been created, but before inputs are read. */
+
+static void
+elf_m68k_create_output_section_statements (void)
+{
+ bfd_elf_m68k_set_target_options (&link_info, got_handling);
+}
+
+EOF
+
+# Define some shell vars to insert bits of code into the standard elf
+# parse_args and list_options functions.
+#
+PARSE_AND_LIST_PROLOGUE='
+#define OPTION_GOT 301
+'
+
+PARSE_AND_LIST_LONGOPTS='
+ { "got", required_argument, NULL, OPTION_GOT},
+'
+
+PARSE_AND_LIST_OPTIONS='
+ fprintf (file, _(" --got=<type> Specify GOT handling scheme\n"));
+'
+
+PARSE_AND_LIST_ARGS_CASES='
+ case OPTION_GOT:
+ if (strcmp (optarg, "target") == 0)
+ got_handling = GOT_HANDLING_TARGET_DEFAULT;
+ else if (strcmp (optarg, "single") == 0)
+ got_handling = 0;
+ else if (strcmp (optarg, "negative") == 0)
+ got_handling = 1;
+ else if (strcmp (optarg, "multigot") == 0)
+ got_handling = 2;
+ else
+ einfo (_("Unrecognized --got argument '\''%s'\''.\n"), optarg);
+ break;
+'
+
+# We have our own after_open and after_allocation functions, but they call
+# the standard routines, so give them a different name.
+LDEMUL_AFTER_OPEN=m68k_elf_after_open
+LDEMUL_AFTER_ALLOCATION=m68k_elf_after_allocation
+LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS=elf_m68k_create_output_section_statements
diff --git a/binutils-2.21/ld/emultempl/mipsecoff.em b/binutils-2.21/ld/emultempl/mipsecoff.em
new file mode 100644
index 0000000..809229f
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/mipsecoff.em
@@ -0,0 +1,38 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 1994, 1995, 1997, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+if [ -z "$MACHINE" ]; then
+ OUTPUT_ARCH=${ARCH}
+else
+ OUTPUT_ARCH=${ARCH}:${MACHINE}
+fi
+fragment <<EOF
+static void
+gld${EMULATION_NAME}_before_parse (void)
+{
+#ifndef TARGET_ /* I.e., if not generic. */
+ ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
+#endif /* not TARGET_ */
+}
+EOF
+
+LDEMUL_BEFORE_PARSE=gld${EMULATION_NAME}_before_parse
diff --git a/binutils-2.21/ld/emultempl/mipself.em b/binutils-2.21/ld/emultempl/mipself.em
new file mode 100644
index 0000000..7a13d4d
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/mipself.em
@@ -0,0 +1,241 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2004, 2006, 2007, 2008 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+fragment <<EOF
+
+#include "ldctor.h"
+#include "elf/mips.h"
+#include "elfxx-mips.h"
+
+#define is_mips_elf(bfd) \
+ (bfd_get_flavour (bfd) == bfd_target_elf_flavour \
+ && elf_tdata (bfd) != NULL \
+ && elf_object_id (bfd) == MIPS_ELF_DATA)
+
+/* Fake input file for stubs. */
+static lang_input_statement_type *stub_file;
+static bfd *stub_bfd;
+
+static void
+mips_after_parse (void)
+{
+ /* .gnu.hash and the MIPS ABI require .dynsym to be sorted in different
+ ways. .gnu.hash needs symbols to be grouped by hash code whereas the
+ MIPS ABI requires a mapping between the GOT and the symbol table. */
+ if (link_info.emit_gnu_hash)
+ {
+ einfo ("%X%P: .gnu.hash is incompatible with the MIPS ABI\n");
+ link_info.emit_hash = TRUE;
+ link_info.emit_gnu_hash = FALSE;
+ }
+ after_parse_default ();
+}
+
+struct hook_stub_info
+{
+ lang_statement_list_type add;
+ asection *input_section;
+};
+
+/* Traverse the linker tree to find the spot where the stub goes. */
+
+static bfd_boolean
+hook_in_stub (struct hook_stub_info *info, lang_statement_union_type **lp)
+{
+ lang_statement_union_type *l;
+ bfd_boolean ret;
+
+ for (; (l = *lp) != NULL; lp = &l->header.next)
+ {
+ switch (l->header.type)
+ {
+ case lang_constructors_statement_enum:
+ ret = hook_in_stub (info, &constructor_list.head);
+ if (ret)
+ return ret;
+ break;
+
+ case lang_output_section_statement_enum:
+ ret = hook_in_stub (info,
+ &l->output_section_statement.children.head);
+ if (ret)
+ return ret;
+ break;
+
+ case lang_wild_statement_enum:
+ ret = hook_in_stub (info, &l->wild_statement.children.head);
+ if (ret)
+ return ret;
+ break;
+
+ case lang_group_statement_enum:
+ ret = hook_in_stub (info, &l->group_statement.children.head);
+ if (ret)
+ return ret;
+ break;
+
+ case lang_input_section_enum:
+ if (info->input_section == NULL
+ || l->input_section.section == info->input_section)
+ {
+ /* We've found our section. Insert the stub immediately
+ before its associated input section. */
+ *lp = info->add.head;
+ *(info->add.tail) = l;
+ return TRUE;
+ }
+ break;
+
+ case lang_data_statement_enum:
+ case lang_reloc_statement_enum:
+ case lang_object_symbols_statement_enum:
+ case lang_output_statement_enum:
+ case lang_target_statement_enum:
+ case lang_input_statement_enum:
+ case lang_assignment_statement_enum:
+ case lang_padding_statement_enum:
+ case lang_address_statement_enum:
+ case lang_fill_statement_enum:
+ break;
+
+ default:
+ FAIL ();
+ break;
+ }
+ }
+ return FALSE;
+}
+
+/* Create a new stub section called STUB_SEC_NAME and arrange for it to
+ be linked in OUTPUT_SECTION. The section should go at the beginning of
+ OUTPUT_SECTION if INPUT_SECTION is null, otherwise it must go immediately
+ before INPUT_SECTION. */
+
+static asection *
+mips_add_stub_section (const char *stub_sec_name, asection *input_section,
+ asection *output_section)
+{
+ asection *stub_sec;
+ flagword flags;
+ const char *secname;
+ lang_output_section_statement_type *os;
+ struct hook_stub_info info;
+
+ /* Create the stub file, if we haven't already. */
+ if (stub_file == NULL)
+ {
+ stub_file = lang_add_input_file ("linker stubs",
+ lang_input_file_is_fake_enum,
+ NULL);
+ stub_bfd = bfd_create ("linker stubs", link_info.output_bfd);
+ if (stub_bfd == NULL
+ || !bfd_set_arch_mach (stub_bfd,
+ bfd_get_arch (link_info.output_bfd),
+ bfd_get_mach (link_info.output_bfd)))
+ {
+ einfo ("%F%P: can not create BFD %E\n");
+ return NULL;
+ }
+ stub_bfd->flags |= BFD_LINKER_CREATED;
+ stub_file->the_bfd = stub_bfd;
+ ldlang_add_file (stub_file);
+ }
+
+ /* Create the section. */
+ stub_sec = bfd_make_section_anyway (stub_bfd, stub_sec_name);
+ if (stub_sec == NULL)
+ goto err_ret;
+
+ /* Set the flags. */
+ flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE
+ | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_KEEP);
+ if (!bfd_set_section_flags (stub_bfd, stub_sec, flags))
+ goto err_ret;
+
+ /* Create an output section statement. */
+ secname = bfd_get_section_name (output_section->owner, output_section);
+ os = lang_output_section_find (secname);
+
+ /* Initialize a statement list that contains only the new statement. */
+ lang_list_init (&info.add);
+ lang_add_section (&info.add, stub_sec, os);
+ if (info.add.head == NULL)
+ goto err_ret;
+
+ /* Insert the new statement in the appropriate place. */
+ info.input_section = input_section;
+ if (hook_in_stub (&info, &os->children.head))
+ return stub_sec;
+
+ err_ret:
+ einfo ("%X%P: can not make stub section: %E\n");
+ return NULL;
+}
+
+/* This is called before the input files are opened. */
+
+static void
+mips_create_output_section_statements (void)
+{
+ if (is_mips_elf (link_info.output_bfd))
+ _bfd_mips_elf_init_stubs (&link_info, mips_add_stub_section);
+}
+
+/* This is called after we have merged the private data of the input bfds. */
+
+static void
+mips_before_allocation (void)
+{
+ flagword flags;
+
+ flags = elf_elfheader (link_info.output_bfd)->e_flags;
+ if (!link_info.shared
+ && !link_info.nocopyreloc
+ && (flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) == EF_MIPS_CPIC)
+ _bfd_mips_elf_use_plts_and_copy_relocs (&link_info);
+
+ gld${EMULATION_NAME}_before_allocation ();
+}
+
+/* Avoid processing the fake stub_file in vercheck, stat_needed and
+ check_needed routines. */
+
+static void (*real_func) (lang_input_statement_type *);
+
+static void mips_for_each_input_file_wrapper (lang_input_statement_type *l)
+{
+ if (l != stub_file)
+ (*real_func) (l);
+}
+
+static void
+mips_lang_for_each_input_file (void (*func) (lang_input_statement_type *))
+{
+ real_func = func;
+ lang_for_each_input_file (&mips_for_each_input_file_wrapper);
+}
+
+#define lang_for_each_input_file mips_lang_for_each_input_file
+
+EOF
+
+LDEMUL_AFTER_PARSE=mips_after_parse
+LDEMUL_BEFORE_ALLOCATION=mips_before_allocation
+LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS=mips_create_output_section_statements
diff --git a/binutils-2.21/ld/emultempl/mmix-elfnmmo.em b/binutils-2.21/ld/emultempl/mmix-elfnmmo.em
new file mode 100644
index 0000000..0059792
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/mmix-elfnmmo.em
@@ -0,0 +1,116 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em and mmo.em, used to define
+# MMIX-specific things common to ELF and MMO.
+
+fragment <<EOF
+#include "elf/mmix.h"
+
+/* Set up handling of linker-allocated global registers. */
+
+static void
+mmix_before_allocation (void)
+{
+ /* Call the default first. */
+ gld${EMULATION_NAME}_before_allocation ();
+
+ /* There's a needrelax.em which uses this ..._before_allocation-hook and
+ just has the statement below as payload. It's more of a hassle to
+ use that than to just include these two lines and take the
+ maintenance burden to keep them in sync. (Of course we lose the
+ maintenance burden of checking that it still does what we need.) */
+
+ /* Force -relax on (regardless of whether we're doing a relocatable
+ link). */
+ ENABLE_RELAXATION;
+
+ if (!_bfd_mmix_before_linker_allocation (link_info.output_bfd, &link_info))
+ einfo ("%X%P: Internal problems setting up section %s",
+ MMIX_LD_ALLOCATED_REG_CONTENTS_SECTION_NAME);
+}
+
+/* We need to set the VMA of the .MMIX.reg_contents section when it has
+ been allocated, and produce the final settings for the linker-generated
+ GREGs. */
+
+static void
+mmix_after_allocation (void)
+{
+ asection *sec;
+ bfd_signed_vma regvma;
+
+ gld${EMULATION_NAME}_after_allocation ();
+
+ /* If there's no register section, we don't need to do anything. On the
+ other hand, if there's a non-standard linker-script without a mapping
+ from MMIX_LD_ALLOCATED_REG_CONTENTS_SECTION_NAME when that section is
+ present (as in the ld test "NOCROSSREFS 2"), that section (1) will be
+ orphaned; not inserted in MMIX_REG_CONTENTS_SECTION_NAME and (2) we
+ will not do the necessary preparations for those relocations that
+ caused it to be created. We'll SEGV from the latter error. The
+ former error in separation will result in a non-working binary, but
+ that's expected when you play tricks with linker scripts. The
+ "NOCROSSREFS 2" test does not run the output so it does not matter
+ there. */
+ sec = bfd_get_section_by_name (link_info.output_bfd,
+ MMIX_REG_CONTENTS_SECTION_NAME);
+ if (sec == NULL)
+ sec
+ = bfd_get_section_by_name (link_info.output_bfd,
+ MMIX_LD_ALLOCATED_REG_CONTENTS_SECTION_NAME);
+ if (sec == NULL)
+ return;
+
+ regvma = 256 * 8 - sec->size - 8;
+
+ /* If we start on a local register, we have too many global registers.
+ We treat this error as nonfatal (meaning processing will continue in
+ search for other errors), because it's a link error in the same way
+ as an undefined symbol. */
+ if (regvma < 32 * 8)
+ {
+ einfo ("%X%P: Too many global registers: %u, max 223\n",
+ (unsigned) sec->size / 8);
+ regvma = 32 * 8;
+ }
+
+ /* Set vma to correspond to first such register number * 8. */
+ bfd_set_section_vma (link_info.output_bfd, sec, (bfd_vma) regvma);
+
+ /* Simplify symbol output for the register section (without contents;
+ created for register symbols) by setting the output offset to 0.
+ This section is only present when there are register symbols. */
+ sec = bfd_get_section_by_name (link_info.output_bfd, MMIX_REG_SECTION_NAME);
+ if (sec != NULL)
+ bfd_set_section_vma (abfd, sec, 0);
+
+ if (!_bfd_mmix_after_linker_allocation (link_info.output_bfd, &link_info))
+ {
+ /* This is a fatal error; make einfo call not return. */
+ einfo ("%F%P: Can't finalize linker-allocated global registers\n");
+ }
+}
+EOF
+
+LDEMUL_AFTER_ALLOCATION=mmix_after_allocation
+LDEMUL_BEFORE_ALLOCATION=mmix_before_allocation
diff --git a/binutils-2.21/ld/emultempl/mmixelf.em b/binutils-2.21/ld/emultempl/mmixelf.em
new file mode 100644
index 0000000..a875a5c
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/mmixelf.em
@@ -0,0 +1,44 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2001, 2002, 2003, 2005, 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em and used to define MMIX and ELF
+# specific things. First include what we have in common with mmo.
+
+source_em ${srcdir}/emultempl/mmix-elfnmmo.em
+
+fragment <<EOF
+
+static void
+elfmmix_before_parse (void)
+{
+ gld${EMULATION_NAME}_before_parse ();
+
+ /* Make sure we don't create a demand-paged executable. Unfortunately
+ this isn't changeable with a command-line option. It makes no
+ difference to mmo, but the sections in elf64mmix will be aligned to a
+ page in the linked file, which is non-intuitive. If there's ever a
+ full system with shared libraries and demand paging, you will want to
+ exclude this file. */
+ config.magic_demand_paged = FALSE;
+}
+EOF
+
+LDEMUL_BEFORE_PARSE=elfmmix_before_parse
diff --git a/binutils-2.21/ld/emultempl/mmo.em b/binutils-2.21/ld/emultempl/mmo.em
new file mode 100644
index 0000000..d1a6f14
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/mmo.em
@@ -0,0 +1,158 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# This file is sourced from generic.em.
+
+fragment <<EOF
+/* Need to have this macro defined before mmix-elfnmmo, which uses the
+ name for the before_allocation function, defined in ldemul.c (for
+ the mmo "emulation") or in elf32.em (for the elf64mmix
+ "emulation"). */
+#define gldmmo_before_allocation before_allocation_default
+
+/* We include this header *not* because we expect to handle ELF here
+ but because we re-use the map_segments function in elf-generic.em,
+ a file which is rightly somewhat ELF-centric. But this is only to
+ get a weird testcase right; ld-mmix/bpo-22, forcing ELF to be
+ output from the mmo emulation: -m mmo --oformat elf64-mmix! */
+#include "elf-bfd.h"
+
+static void gld${EMULATION_NAME}_after_allocation (void);
+EOF
+
+source_em ${srcdir}/emultempl/elf-generic.em
+source_em ${srcdir}/emultempl/mmix-elfnmmo.em
+
+fragment <<EOF
+
+/* Place an orphan section. We use this to put random SEC_CODE or
+ SEC_READONLY sections right after MMO_TEXT_SECTION_NAME. Much borrowed
+ from elf32.em. */
+
+static lang_output_section_statement_type *
+mmo_place_orphan (asection *s,
+ const char *secname,
+ int constraint ATTRIBUTE_UNUSED)
+{
+ static struct orphan_save hold_text =
+ {
+ MMO_TEXT_SECTION_NAME,
+ SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE,
+ 0, 0, 0, 0
+ };
+ struct orphan_save *place;
+ lang_output_section_statement_type *after;
+ lang_output_section_statement_type *os;
+
+ /* We have nothing to say for anything other than a final link. */
+ if (link_info.relocatable
+ || (s->flags & (SEC_EXCLUDE | SEC_LOAD)) != SEC_LOAD)
+ return NULL;
+
+ /* Only care for sections we're going to load. */
+ os = lang_output_section_find (secname);
+
+ /* We have an output section by this name. Place the section inside it
+ (regardless of whether the linker script lists it as input). */
+ if (os != NULL)
+ {
+ lang_add_section (&os->children, s, os);
+ return os;
+ }
+
+ /* If this section does not have .text-type section flags or there's no
+ MMO_TEXT_SECTION_NAME, we don't have anything to say. */
+ if ((s->flags & (SEC_CODE | SEC_READONLY)) == 0)
+ return NULL;
+
+ if (hold_text.os == NULL)
+ hold_text.os = lang_output_section_find (hold_text.name);
+
+ place = &hold_text;
+ if (hold_text.os != NULL)
+ after = hold_text.os;
+ else
+ after = &lang_output_section_statement.head->output_section_statement;
+
+ /* If there's an output section by this name, we'll use it, regardless
+ of section flags, in contrast to what's done in elf32.em. */
+ os = lang_insert_orphan (s, secname, 0, after, place, NULL, NULL);
+
+ /* We need an output section for .text as a root, so if there was none
+ (might happen with a peculiar linker script such as in "map
+ addresses", map-address.exp), we grab the output section created
+ above. */
+ if (hold_text.os == NULL)
+ hold_text.os = os;
+
+ return os;
+}
+
+/* Remove the spurious settings of SEC_RELOC that make it to the output at
+ link time. We are as confused as elflink.h:elf_bfd_final_link, and
+ paper over the bug similarly. */
+
+static void
+mmo_wipe_sec_reloc_flag (bfd *abfd, asection *sec, void *ptr ATTRIBUTE_UNUSED)
+{
+ bfd_set_section_flags (abfd, sec,
+ bfd_get_section_flags (abfd, sec) & ~SEC_RELOC);
+}
+
+/* Iterate with bfd_map_over_sections over mmo_wipe_sec_reloc_flag... */
+
+static void
+gld${EMULATION_NAME}_after_allocation (void)
+{
+ bfd_map_over_sections (link_info.output_bfd, mmo_wipe_sec_reloc_flag, NULL);
+ gld${EMULATION_NAME}_map_segments (FALSE);
+}
+
+/* To get on-demand global register allocation right, we need to parse the
+ relocs, like what happens when linking to ELF. It needs to be done
+ before all input sections are supposed to be present. When linking to
+ ELF, it's done when reading symbols. When linking to mmo, we do it
+ when all input files are seen, which is equivalent. */
+
+static void
+mmo_after_open (void)
+{
+ /* When there's a mismatch between the output format and the emulation
+ (using weird combinations like "-m mmo --oformat elf64-mmix" for
+ example), we'd count relocs twice because they'd also be counted
+ along the usual route for ELF-only linking, which would lead to an
+ internal accounting error. */
+ if (bfd_get_flavour (link_info.output_bfd) != bfd_target_elf_flavour)
+ {
+ LANG_FOR_EACH_INPUT_STATEMENT (is)
+ {
+ if (bfd_get_flavour (is->the_bfd) == bfd_target_elf_flavour
+ && !_bfd_mmix_check_all_relocs (is->the_bfd, &link_info))
+ einfo ("%X%P: Internal problems scanning %B after opening it",
+ is->the_bfd);
+ }
+ }
+}
+EOF
+
+LDEMUL_PLACE_ORPHAN=mmo_place_orphan
+LDEMUL_AFTER_OPEN=mmo_after_open
diff --git a/binutils-2.21/ld/emultempl/needrelax.em b/binutils-2.21/ld/emultempl/needrelax.em
new file mode 100644
index 0000000..7f90224
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/needrelax.em
@@ -0,0 +1,39 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2001, 2002, 2003, 2005, 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em. It is used by targets for
+# which relaxation is not just an optimization, but for correctness.
+
+LDEMUL_BEFORE_ALLOCATION=need_relax_${EMULATION_NAME}_before_allocation
+
+fragment <<EOF
+
+static void
+need_relax_${EMULATION_NAME}_before_allocation (void)
+{
+ /* Call main function; we're just extending it. */
+ gld${EMULATION_NAME}_before_allocation ();
+
+ /* Force -relax on if not doing a relocatable link. */
+ if (! link_info.relocatable)
+ ENABLE_RELAXATION;
+}
+EOF
diff --git a/binutils-2.21/ld/emultempl/netbsd.em b/binutils-2.21/ld/emultempl/netbsd.em
new file mode 100644
index 0000000..99b48b0
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/netbsd.em
@@ -0,0 +1,34 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+LDEMUL_BEFORE_PARSE=gldnetbsd_before_parse
+
+fragment <<EOF
+static void
+gld${EMULATION_NAME}_before_parse (void);
+
+static void
+gldnetbsd_before_parse (void)
+{
+ gld${EMULATION_NAME}_before_parse ();
+ link_info.common_skip_ar_symbols = bfd_link_common_skip_text;
+}
+EOF
diff --git a/binutils-2.21/ld/emultempl/ostring.sed b/binutils-2.21/ld/emultempl/ostring.sed
new file mode 100644
index 0000000..a526d3f
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/ostring.sed
@@ -0,0 +1,4 @@
+s/["\\]/\\&/g
+s/$/\\n\\/
+1 s/^/"/
+$ s/$/n"/
diff --git a/binutils-2.21/ld/emultempl/pe.em b/binutils-2.21/ld/emultempl/pe.em
new file mode 100644
index 0000000..bb283c1
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/pe.em
@@ -0,0 +1,2217 @@
+# This shell script emits a C file. -*- C -*-
+# It does some substitutions.
+if [ -z "$MACHINE" ]; then
+ OUTPUT_ARCH=${ARCH}
+else
+ OUTPUT_ARCH=${ARCH}:${MACHINE}
+fi
+rm -f e${EMULATION_NAME}.c
+(echo;echo;echo;echo;echo)>e${EMULATION_NAME}.c # there, now line numbers match ;-)
+fragment <<EOF
+/* Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+ 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+
+/* For WINDOWS_NT */
+/* The original file generated returned different default scripts depending
+ on whether certain switches were set, but these switches pertain to the
+ Linux system and that particular version of coff. In the NT case, we
+ only determine if the subsystem is console or windows in order to select
+ the correct entry point by default. */
+
+#define TARGET_IS_${EMULATION_NAME}
+
+/* Do this before including bfd.h, so we prototype the right functions. */
+
+#if defined(TARGET_IS_armpe) \
+ || defined(TARGET_IS_arm_epoc_pe) \
+ || defined(TARGET_IS_arm_wince_pe)
+#define bfd_arm_allocate_interworking_sections \
+ bfd_${EMULATION_NAME}_allocate_interworking_sections
+#define bfd_arm_get_bfd_for_interworking \
+ bfd_${EMULATION_NAME}_get_bfd_for_interworking
+#define bfd_arm_process_before_allocation \
+ bfd_${EMULATION_NAME}_process_before_allocation
+#endif
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+#include "getopt.h"
+#include "libiberty.h"
+#include "ld.h"
+#include "ldmain.h"
+#include "ldexp.h"
+#include "ldlang.h"
+#include "ldfile.h"
+#include "ldemul.h"
+#include <ldgram.h>
+#include "ldlex.h"
+#include "ldmisc.h"
+#include "ldctor.h"
+#include "coff/internal.h"
+
+/* FIXME: See bfd/peXXigen.c for why we include an architecture specific
+ header in generic PE code. */
+#include "coff/i386.h"
+#include "coff/pe.h"
+
+/* FIXME: This is a BFD internal header file, and we should not be
+ using it here. */
+#include "../bfd/libcoff.h"
+
+#include "deffile.h"
+#include "pe-dll.h"
+#include "safe-ctype.h"
+
+/* Permit the emulation parameters to override the default section
+ alignment by setting OVERRIDE_SECTION_ALIGNMENT. FIXME: This makes
+ it seem that include/coff/internal.h should not define
+ PE_DEF_SECTION_ALIGNMENT. */
+#if PE_DEF_SECTION_ALIGNMENT != ${OVERRIDE_SECTION_ALIGNMENT:-PE_DEF_SECTION_ALIGNMENT}
+#undef PE_DEF_SECTION_ALIGNMENT
+#define PE_DEF_SECTION_ALIGNMENT ${OVERRIDE_SECTION_ALIGNMENT}
+#endif
+
+#if defined(TARGET_IS_i386pe) \
+ || defined(TARGET_IS_shpe) \
+ || defined(TARGET_IS_mipspe) \
+ || defined(TARGET_IS_armpe) \
+ || defined(TARGET_IS_arm_epoc_pe) \
+ || defined(TARGET_IS_arm_wince_pe)
+#define DLL_SUPPORT
+#endif
+
+#if defined(TARGET_IS_i386pe)
+#define DEFAULT_PSEUDO_RELOC_VERSION 2
+#else
+#define DEFAULT_PSEUDO_RELOC_VERSION 1
+#endif
+
+#if defined(TARGET_IS_i386pe) || ! defined(DLL_SUPPORT)
+#define PE_DEF_SUBSYSTEM 3
+#else
+#undef NT_EXE_IMAGE_BASE
+#undef PE_DEF_SECTION_ALIGNMENT
+#undef PE_DEF_FILE_ALIGNMENT
+#define NT_EXE_IMAGE_BASE 0x00010000
+
+#if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_wince_pe)
+#define PE_DEF_SECTION_ALIGNMENT 0x00001000
+#define PE_DEF_SUBSYSTEM 9
+#else
+#define PE_DEF_SECTION_ALIGNMENT 0x00000400
+#define PE_DEF_SUBSYSTEM 2
+#endif
+#define PE_DEF_FILE_ALIGNMENT 0x00000200
+#endif
+
+static struct internal_extra_pe_aouthdr pe;
+static int dll;
+static int pe_subsystem = ${SUBSYSTEM};
+static flagword real_flags = 0;
+static int support_old_code = 0;
+static char * thumb_entry_symbol = NULL;
+static lang_assignment_statement_type *image_base_statement = 0;
+static unsigned short pe_dll_characteristics = 0;
+
+#ifdef DLL_SUPPORT
+static int pe_enable_stdcall_fixup = -1; /* 0=disable 1=enable. */
+static char *pe_out_def_filename = NULL;
+static char *pe_implib_filename = NULL;
+static int pe_enable_auto_image_base = 0;
+static char *pe_dll_search_prefix = NULL;
+#endif
+
+extern const char *output_filename;
+
+static int is_underscoring (void)
+{
+ int u = 0;
+ if (pe_leading_underscore != -1)
+ return pe_leading_underscore;
+ if (!bfd_get_target_info ("${OUTPUT_FORMAT}", NULL, NULL, &u, NULL))
+ bfd_get_target_info ("${RELOCATEABLE_OUTPUT_FORMAT}", NULL, NULL, &u, NULL);
+
+ if (u == -1)
+ abort ();
+ pe_leading_underscore = (u != 0 ? 1 : 0);
+ return pe_leading_underscore;
+}
+
+static void
+gld_${EMULATION_NAME}_before_parse (void)
+{
+ is_underscoring ();
+ ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
+ output_filename = "${EXECUTABLE_NAME:-a.exe}";
+#ifdef DLL_SUPPORT
+ config.dynamic_link = TRUE;
+ config.has_shared = 1;
+EOF
+
+# Cygwin no longer wants these noisy warnings. Other PE
+# targets might like to consider adding themselves here.
+case ${target} in
+ *-*-cygwin*)
+ default_auto_import=1
+ default_merge_rdata=1
+ ;;
+ i[3-7]86-*-mingw* | x86_64-*-mingw*)
+ default_auto_import=1
+ default_merge_rdata=0
+ ;;
+ *)
+ default_auto_import=-1
+ default_merge_rdata=1
+ ;;
+esac
+
+fragment <<EOF
+ link_info.pei386_auto_import = ${default_auto_import};
+ /* Use by default version. */
+ link_info.pei386_runtime_pseudo_reloc = DEFAULT_PSEUDO_RELOC_VERSION;
+#endif
+}
+
+/* Indicates if RDATA shall be merged into DATA when pseudo-relocation
+ version 2 is used and auto-import is enabled. */
+#define MERGE_RDATA_V2 ${default_merge_rdata}
+
+/* PE format extra command line options. */
+
+/* Used for setting flags in the PE header. */
+#define OPTION_BASE_FILE (300 + 1)
+#define OPTION_DLL (OPTION_BASE_FILE + 1)
+#define OPTION_FILE_ALIGNMENT (OPTION_DLL + 1)
+#define OPTION_IMAGE_BASE (OPTION_FILE_ALIGNMENT + 1)
+#define OPTION_MAJOR_IMAGE_VERSION (OPTION_IMAGE_BASE + 1)
+#define OPTION_MAJOR_OS_VERSION (OPTION_MAJOR_IMAGE_VERSION + 1)
+#define OPTION_MAJOR_SUBSYSTEM_VERSION (OPTION_MAJOR_OS_VERSION + 1)
+#define OPTION_MINOR_IMAGE_VERSION (OPTION_MAJOR_SUBSYSTEM_VERSION + 1)
+#define OPTION_MINOR_OS_VERSION (OPTION_MINOR_IMAGE_VERSION + 1)
+#define OPTION_MINOR_SUBSYSTEM_VERSION (OPTION_MINOR_OS_VERSION + 1)
+#define OPTION_SECTION_ALIGNMENT (OPTION_MINOR_SUBSYSTEM_VERSION + 1)
+#define OPTION_STACK (OPTION_SECTION_ALIGNMENT + 1)
+#define OPTION_SUBSYSTEM (OPTION_STACK + 1)
+#define OPTION_HEAP (OPTION_SUBSYSTEM + 1)
+#define OPTION_SUPPORT_OLD_CODE (OPTION_HEAP + 1)
+#define OPTION_OUT_DEF (OPTION_SUPPORT_OLD_CODE + 1)
+#define OPTION_EXPORT_ALL (OPTION_OUT_DEF + 1)
+#define OPTION_EXCLUDE_SYMBOLS (OPTION_EXPORT_ALL + 1)
+#define OPTION_EXCLUDE_ALL_SYMBOLS (OPTION_EXCLUDE_SYMBOLS + 1)
+#define OPTION_KILL_ATS (OPTION_EXCLUDE_ALL_SYMBOLS + 1)
+#define OPTION_STDCALL_ALIASES (OPTION_KILL_ATS + 1)
+#define OPTION_ENABLE_STDCALL_FIXUP (OPTION_STDCALL_ALIASES + 1)
+#define OPTION_DISABLE_STDCALL_FIXUP (OPTION_ENABLE_STDCALL_FIXUP + 1)
+#define OPTION_IMPLIB_FILENAME (OPTION_DISABLE_STDCALL_FIXUP + 1)
+#define OPTION_THUMB_ENTRY (OPTION_IMPLIB_FILENAME + 1)
+#define OPTION_WARN_DUPLICATE_EXPORTS (OPTION_THUMB_ENTRY + 1)
+#define OPTION_IMP_COMPAT (OPTION_WARN_DUPLICATE_EXPORTS + 1)
+#define OPTION_ENABLE_AUTO_IMAGE_BASE (OPTION_IMP_COMPAT + 1)
+#define OPTION_DISABLE_AUTO_IMAGE_BASE (OPTION_ENABLE_AUTO_IMAGE_BASE + 1)
+#define OPTION_DLL_SEARCH_PREFIX (OPTION_DISABLE_AUTO_IMAGE_BASE + 1)
+#define OPTION_NO_DEFAULT_EXCLUDES (OPTION_DLL_SEARCH_PREFIX + 1)
+#define OPTION_DLL_ENABLE_AUTO_IMPORT (OPTION_NO_DEFAULT_EXCLUDES + 1)
+#define OPTION_DLL_DISABLE_AUTO_IMPORT (OPTION_DLL_ENABLE_AUTO_IMPORT + 1)
+#define OPTION_ENABLE_EXTRA_PE_DEBUG (OPTION_DLL_DISABLE_AUTO_IMPORT + 1)
+#define OPTION_EXCLUDE_LIBS (OPTION_ENABLE_EXTRA_PE_DEBUG + 1)
+#define OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC \
+ (OPTION_EXCLUDE_LIBS + 1)
+#define OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC \
+ (OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC + 1)
+#define OPTION_LARGE_ADDRESS_AWARE \
+ (OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC + 1)
+#define OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V1 \
+ (OPTION_LARGE_ADDRESS_AWARE + 1)
+#define OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V2 \
+ (OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V1 + 1)
+#define OPTION_EXCLUDE_MODULES_FOR_IMPLIB \
+ (OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V2 + 1)
+#define OPTION_USE_NUL_PREFIXED_IMPORT_TABLES \
+ (OPTION_EXCLUDE_MODULES_FOR_IMPLIB + 1)
+#define OPTION_NO_LEADING_UNDERSCORE \
+ (OPTION_USE_NUL_PREFIXED_IMPORT_TABLES + 1)
+#define OPTION_LEADING_UNDERSCORE \
+ (OPTION_NO_LEADING_UNDERSCORE + 1)
+#define OPTION_ENABLE_LONG_SECTION_NAMES \
+ (OPTION_LEADING_UNDERSCORE + 1)
+#define OPTION_DISABLE_LONG_SECTION_NAMES \
+ (OPTION_ENABLE_LONG_SECTION_NAMES + 1)
+/* DLLCharacteristics flags */
+#define OPTION_DYNAMIC_BASE (OPTION_DISABLE_LONG_SECTION_NAMES + 1)
+#define OPTION_FORCE_INTEGRITY (OPTION_DYNAMIC_BASE + 1)
+#define OPTION_NX_COMPAT (OPTION_FORCE_INTEGRITY + 1)
+#define OPTION_NO_ISOLATION (OPTION_NX_COMPAT + 1)
+#define OPTION_NO_SEH (OPTION_NO_ISOLATION + 1)
+#define OPTION_NO_BIND (OPTION_NO_SEH + 1)
+#define OPTION_WDM_DRIVER (OPTION_NO_BIND + 1)
+#define OPTION_TERMINAL_SERVER_AWARE (OPTION_WDM_DRIVER + 1)
+
+static void
+gld${EMULATION_NAME}_add_options
+ (int ns ATTRIBUTE_UNUSED,
+ char **shortopts ATTRIBUTE_UNUSED,
+ int nl,
+ struct option **longopts,
+ int nrl ATTRIBUTE_UNUSED,
+ struct option **really_longopts ATTRIBUTE_UNUSED)
+{
+ static const struct option xtra_long[] = {
+ /* PE options */
+ {"base-file", required_argument, NULL, OPTION_BASE_FILE},
+ {"dll", no_argument, NULL, OPTION_DLL},
+ {"file-alignment", required_argument, NULL, OPTION_FILE_ALIGNMENT},
+ {"heap", required_argument, NULL, OPTION_HEAP},
+ {"image-base", required_argument, NULL, OPTION_IMAGE_BASE},
+ {"major-image-version", required_argument, NULL, OPTION_MAJOR_IMAGE_VERSION},
+ {"major-os-version", required_argument, NULL, OPTION_MAJOR_OS_VERSION},
+ {"major-subsystem-version", required_argument, NULL, OPTION_MAJOR_SUBSYSTEM_VERSION},
+ {"minor-image-version", required_argument, NULL, OPTION_MINOR_IMAGE_VERSION},
+ {"minor-os-version", required_argument, NULL, OPTION_MINOR_OS_VERSION},
+ {"minor-subsystem-version", required_argument, NULL, OPTION_MINOR_SUBSYSTEM_VERSION},
+ {"section-alignment", required_argument, NULL, OPTION_SECTION_ALIGNMENT},
+ {"stack", required_argument, NULL, OPTION_STACK},
+ {"subsystem", required_argument, NULL, OPTION_SUBSYSTEM},
+ {"support-old-code", no_argument, NULL, OPTION_SUPPORT_OLD_CODE},
+ {"thumb-entry", required_argument, NULL, OPTION_THUMB_ENTRY},
+ {"use-nul-prefixed-import-tables", no_argument, NULL,
+ OPTION_USE_NUL_PREFIXED_IMPORT_TABLES},
+ {"no-leading-underscore", no_argument, NULL, OPTION_NO_LEADING_UNDERSCORE},
+ {"leading-underscore", no_argument, NULL, OPTION_LEADING_UNDERSCORE},
+#ifdef DLL_SUPPORT
+ /* getopt allows abbreviations, so we do this to stop it
+ from treating -o as an abbreviation for this option. */
+ {"output-def", required_argument, NULL, OPTION_OUT_DEF},
+ {"output-def", required_argument, NULL, OPTION_OUT_DEF},
+ {"export-all-symbols", no_argument, NULL, OPTION_EXPORT_ALL},
+ {"exclude-symbols", required_argument, NULL, OPTION_EXCLUDE_SYMBOLS},
+ {"exclude-all-symbols", no_argument, NULL, OPTION_EXCLUDE_ALL_SYMBOLS},
+ {"exclude-libs", required_argument, NULL, OPTION_EXCLUDE_LIBS},
+ {"exclude-modules-for-implib", required_argument, NULL, OPTION_EXCLUDE_MODULES_FOR_IMPLIB},
+ {"kill-at", no_argument, NULL, OPTION_KILL_ATS},
+ {"add-stdcall-alias", no_argument, NULL, OPTION_STDCALL_ALIASES},
+ {"enable-stdcall-fixup", no_argument, NULL, OPTION_ENABLE_STDCALL_FIXUP},
+ {"disable-stdcall-fixup", no_argument, NULL, OPTION_DISABLE_STDCALL_FIXUP},
+ {"out-implib", required_argument, NULL, OPTION_IMPLIB_FILENAME},
+ {"warn-duplicate-exports", no_argument, NULL, OPTION_WARN_DUPLICATE_EXPORTS},
+ /* getopt() allows abbreviations, so we do this to stop it from
+ treating -c as an abbreviation for these --compat-implib. */
+ {"compat-implib", no_argument, NULL, OPTION_IMP_COMPAT},
+ {"compat-implib", no_argument, NULL, OPTION_IMP_COMPAT},
+ {"enable-auto-image-base", no_argument, NULL, OPTION_ENABLE_AUTO_IMAGE_BASE},
+ {"disable-auto-image-base", no_argument, NULL, OPTION_DISABLE_AUTO_IMAGE_BASE},
+ {"dll-search-prefix", required_argument, NULL, OPTION_DLL_SEARCH_PREFIX},
+ {"no-default-excludes", no_argument, NULL, OPTION_NO_DEFAULT_EXCLUDES},
+ {"enable-auto-import", no_argument, NULL, OPTION_DLL_ENABLE_AUTO_IMPORT},
+ {"disable-auto-import", no_argument, NULL, OPTION_DLL_DISABLE_AUTO_IMPORT},
+ {"enable-extra-pe-debug", no_argument, NULL, OPTION_ENABLE_EXTRA_PE_DEBUG},
+ {"enable-runtime-pseudo-reloc", no_argument, NULL, OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC},
+ {"disable-runtime-pseudo-reloc", no_argument, NULL, OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC},
+ {"enable-runtime-pseudo-reloc-v1", no_argument, NULL, OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V1},
+ {"enable-runtime-pseudo-reloc-v2", no_argument, NULL, OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V2},
+#endif
+ {"large-address-aware", no_argument, NULL, OPTION_LARGE_ADDRESS_AWARE},
+ {"enable-long-section-names", no_argument, NULL, OPTION_ENABLE_LONG_SECTION_NAMES},
+ {"disable-long-section-names", no_argument, NULL, OPTION_DISABLE_LONG_SECTION_NAMES},
+ {"dynamicbase",no_argument, NULL, OPTION_DYNAMIC_BASE},
+ {"forceinteg", no_argument, NULL, OPTION_FORCE_INTEGRITY},
+ {"nxcompat", no_argument, NULL, OPTION_NX_COMPAT},
+ {"no-isolation", no_argument, NULL, OPTION_NO_ISOLATION},
+ {"no-seh", no_argument, NULL, OPTION_NO_SEH},
+ {"no-bind", no_argument, NULL, OPTION_NO_BIND},
+ {"wdmdriver", no_argument, NULL, OPTION_WDM_DRIVER},
+ {"tsaware", no_argument, NULL, OPTION_TERMINAL_SERVER_AWARE},
+ {NULL, no_argument, NULL, 0}
+ };
+
+ *longopts
+ = xrealloc (*longopts, nl * sizeof (struct option) + sizeof (xtra_long));
+ memcpy (*longopts + nl, &xtra_long, sizeof (xtra_long));
+}
+
+/* PE/WIN32; added routines to get the subsystem type, heap and/or stack
+ parameters which may be input from the command line. */
+
+typedef struct
+{
+ void *ptr;
+ int size;
+ int value;
+ char *symbol;
+ int inited;
+ /* FALSE for an assembly level symbol and TRUE for a C visible symbol.
+ C visible symbols can be prefixed by underscore dependent to target's
+ settings. */
+ bfd_boolean is_c_symbol;
+} definfo;
+
+/* Get symbol name dependent to kind and C visible state of
+ underscore. */
+#define GET_INIT_SYMBOL_NAME(IDX) \
+ (init[(IDX)].symbol \
+ + ((init[(IDX)].is_c_symbol == FALSE || (is_underscoring () != 0)) ? 0 : 1))
+
+/* Decorates the C visible symbol by underscore, if target requires. */
+#define U(CSTR) \
+ ((is_underscoring () == 0) ? CSTR : "_" CSTR)
+
+/* Get size of constant string for a possible underscore prefixed
+ C visible symbol. */
+#define U_SIZE(CSTR) \
+ (sizeof (CSTR) + (is_underscoring () == 0 ? 0 : 1))
+
+#define D(field,symbol,def,usc) {&pe.field,sizeof(pe.field), def, symbol, 0, usc}
+
+static definfo init[] =
+{
+ /* imagebase must be first */
+#define IMAGEBASEOFF 0
+ D(ImageBase,"__image_base__", NT_EXE_IMAGE_BASE, FALSE),
+#define DLLOFF 1
+ {&dll, sizeof(dll), 0, "__dll__", 0, FALSE},
+#define MSIMAGEBASEOFF 2
+ D(ImageBase, "___ImageBase", NT_EXE_IMAGE_BASE, TRUE),
+ D(SectionAlignment,"__section_alignment__", PE_DEF_SECTION_ALIGNMENT, FALSE),
+ D(FileAlignment,"__file_alignment__", PE_DEF_FILE_ALIGNMENT, FALSE),
+ D(MajorOperatingSystemVersion,"__major_os_version__", 4, FALSE),
+ D(MinorOperatingSystemVersion,"__minor_os_version__", 0, FALSE),
+ D(MajorImageVersion,"__major_image_version__", 1, FALSE),
+ D(MinorImageVersion,"__minor_image_version__", 0, FALSE),
+#if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_wince_pe)
+ D(MajorSubsystemVersion,"__major_subsystem_version__", 3, FALSE),
+#else
+ D(MajorSubsystemVersion,"__major_subsystem_version__", 4, FALSE),
+#endif
+ D(MinorSubsystemVersion,"__minor_subsystem_version__", 0, FALSE),
+ D(Subsystem,"__subsystem__", ${SUBSYSTEM}, FALSE),
+ D(SizeOfStackReserve,"__size_of_stack_reserve__", 0x200000, FALSE),
+ D(SizeOfStackCommit,"__size_of_stack_commit__", 0x1000, FALSE),
+ D(SizeOfHeapReserve,"__size_of_heap_reserve__", 0x100000, FALSE),
+ D(SizeOfHeapCommit,"__size_of_heap_commit__", 0x1000, FALSE),
+ D(LoaderFlags,"__loader_flags__", 0x0, FALSE),
+ D(DllCharacteristics, "__dll_characteristics__", 0x0, FALSE),
+ { NULL, 0, 0, NULL, 0 , FALSE}
+};
+
+
+static void
+gld_${EMULATION_NAME}_list_options (FILE *file)
+{
+ fprintf (file, _(" --base_file <basefile> Generate a base file for relocatable DLLs\n"));
+ fprintf (file, _(" --dll Set image base to the default for DLLs\n"));
+ fprintf (file, _(" --file-alignment <size> Set file alignment\n"));
+ fprintf (file, _(" --heap <size> Set initial size of the heap\n"));
+ fprintf (file, _(" --image-base <address> Set start address of the executable\n"));
+ fprintf (file, _(" --major-image-version <number> Set version number of the executable\n"));
+ fprintf (file, _(" --major-os-version <number> Set minimum required OS version\n"));
+ fprintf (file, _(" --major-subsystem-version <number> Set minimum required OS subsystem version\n"));
+ fprintf (file, _(" --minor-image-version <number> Set revision number of the executable\n"));
+ fprintf (file, _(" --minor-os-version <number> Set minimum required OS revision\n"));
+ fprintf (file, _(" --minor-subsystem-version <number> Set minimum required OS subsystem revision\n"));
+ fprintf (file, _(" --section-alignment <size> Set section alignment\n"));
+ fprintf (file, _(" --stack <size> Set size of the initial stack\n"));
+ fprintf (file, _(" --subsystem <name>[:<version>] Set required OS subsystem [& version]\n"));
+ fprintf (file, _(" --support-old-code Support interworking with old code\n"));
+ fprintf (file, _(" --[no-]leading-underscore Set explicit symbol underscore prefix mode\n"));
+ fprintf (file, _(" --thumb-entry=<symbol> Set the entry point to be Thumb <symbol>\n"));
+#ifdef DLL_SUPPORT
+ fprintf (file, _(" --add-stdcall-alias Export symbols with and without @nn\n"));
+ fprintf (file, _(" --disable-stdcall-fixup Don't link _sym to _sym@nn\n"));
+ fprintf (file, _(" --enable-stdcall-fixup Link _sym to _sym@nn without warnings\n"));
+ fprintf (file, _(" --exclude-symbols sym,sym,... Exclude symbols from automatic export\n"));
+ fprintf (file, _(" --exclude-all-symbols Exclude all symbols from automatic export\n"));
+ fprintf (file, _(" --exclude-libs lib,lib,... Exclude libraries from automatic export\n"));
+ fprintf (file, _(" --exclude-modules-for-implib mod,mod,...\n"));
+ fprintf (file, _(" Exclude objects, archive members from auto\n"));
+ fprintf (file, _(" export, place into import library instead.\n"));
+ fprintf (file, _(" --export-all-symbols Automatically export all globals to DLL\n"));
+ fprintf (file, _(" --kill-at Remove @nn from exported symbols\n"));
+ fprintf (file, _(" --out-implib <file> Generate import library\n"));
+ fprintf (file, _(" --output-def <file> Generate a .DEF file for the built DLL\n"));
+ fprintf (file, _(" --warn-duplicate-exports Warn about duplicate exports.\n"));
+ fprintf (file, _(" --compat-implib Create backward compatible import libs;\n\
+ create __imp_<SYMBOL> as well.\n"));
+ fprintf (file, _(" --enable-auto-image-base Automatically choose image base for DLLs\n\
+ unless user specifies one\n"));
+ fprintf (file, _(" --disable-auto-image-base Do not auto-choose image base. (default)\n"));
+ fprintf (file, _(" --dll-search-prefix=<string> When linking dynamically to a dll without\n\
+ an importlib, use <string><basename>.dll\n\
+ in preference to lib<basename>.dll \n"));
+ fprintf (file, _(" --enable-auto-import Do sophistcated linking of _sym to\n\
+ __imp_sym for DATA references\n"));
+ fprintf (file, _(" --disable-auto-import Do not auto-import DATA items from DLLs\n"));
+ fprintf (file, _(" --enable-runtime-pseudo-reloc Work around auto-import limitations by\n\
+ adding pseudo-relocations resolved at\n\
+ runtime.\n"));
+ fprintf (file, _(" --disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations for\n\
+ auto-imported DATA.\n"));
+ fprintf (file, _(" --enable-extra-pe-debug Enable verbose debug output when building\n\
+ or linking to DLLs (esp. auto-import)\n"));
+#endif
+ fprintf (file, _(" --large-address-aware Executable supports virtual addresses\n\
+ greater than 2 gigabytes\n"));
+ fprintf (file, _(" --enable-long-section-names Use long COFF section names even in\n\
+ executable image files\n"));
+ fprintf (file, _(" --disable-long-section-names Never use long COFF section names, even\n\
+ in object files\n"));
+ fprintf (file, _(" --dynamicbase Image base address may be relocated using\n\
+ address space layout randomization (ASLR)\n"));
+ fprintf (file, _(" --forceinteg Code integrity checks are enforced\n"));
+ fprintf (file, _(" --nxcompat Image is compatible with data execution prevention\n"));
+ fprintf (file, _(" --no-isolation Image understands isolation but do not isolate the image\n"));
+ fprintf (file, _(" --no-seh Image does not use SEH. No SE handler may\n\
+ be called in this image\n"));
+ fprintf (file, _(" --no-bind Do not bind this image\n"));
+ fprintf (file, _(" --wdmdriver Driver uses the WDM model\n"));
+ fprintf (file, _(" --tsaware Image is Terminal Server aware\n"));
+}
+
+
+static void
+set_pe_name (char *name, long val)
+{
+ int i;
+ is_underscoring ();
+
+ /* Find the name and set it. */
+ for (i = 0; init[i].ptr; i++)
+ {
+ if (strcmp (name, GET_INIT_SYMBOL_NAME (i)) == 0)
+ {
+ init[i].value = val;
+ init[i].inited = 1;
+ if (strcmp (name,"__image_base__") == 0)
+ set_pe_name (U ("__ImageBase"), val);
+ return;
+ }
+ }
+ abort ();
+}
+
+static void
+set_entry_point (void)
+{
+ const char *entry;
+ const char *initial_symbol_char;
+ int i;
+
+ static const struct
+ {
+ const int value;
+ const char *entry;
+ }
+ v[] =
+ {
+ { 1, "NtProcessStartup" },
+ { 2, "WinMainCRTStartup" },
+ { 3, "mainCRTStartup" },
+ { 7, "__PosixProcessStartup"},
+ { 9, "WinMainCRTStartup" },
+ {14, "mainCRTStartup" },
+ { 0, NULL }
+ };
+
+ /* Entry point name for arbitrary subsystem numbers. */
+ static const char default_entry[] = "mainCRTStartup";
+
+ if (link_info.shared || dll)
+ {
+#if defined (TARGET_IS_i386pe)
+ entry = "DllMainCRTStartup@12";
+#else
+ entry = "DllMainCRTStartup";
+#endif
+ }
+ else
+ {
+
+ for (i = 0; v[i].entry; i++)
+ if (v[i].value == pe_subsystem)
+ break;
+
+ /* If no match, use the default. */
+ if (v[i].entry != NULL)
+ entry = v[i].entry;
+ else
+ entry = default_entry;
+ }
+
+ initial_symbol_char = (is_underscoring () != 0 ? "_" : "");
+
+ if (*initial_symbol_char != '\0')
+ {
+ char *alc_entry;
+
+ /* lang_default_entry expects its argument to be permanently
+ allocated, so we don't free this string. */
+ alc_entry = xmalloc (strlen (initial_symbol_char)
+ + strlen (entry)
+ + 1);
+ strcpy (alc_entry, initial_symbol_char);
+ strcat (alc_entry, entry);
+ entry = alc_entry;
+ }
+
+ lang_default_entry (entry);
+}
+
+static void
+set_pe_subsystem (void)
+{
+ const char *sver;
+ char *end;
+ int len;
+ int i;
+ unsigned long temp_subsystem;
+ static const struct
+ {
+ const char *name;
+ const int value;
+ }
+ v[] =
+ {
+ { "native", 1},
+ { "windows", 2},
+ { "console", 3},
+ { "posix", 7},
+ { "wince", 9},
+ { "xbox", 14},
+ { NULL, 0 }
+ };
+
+ /* Check for the presence of a version number. */
+ sver = strchr (optarg, ':');
+ if (sver == NULL)
+ len = strlen (optarg);
+ else
+ {
+ len = sver - optarg;
+ set_pe_name ("__major_subsystem_version__",
+ strtoul (sver + 1, &end, 0));
+ if (*end == '.')
+ set_pe_name ("__minor_subsystem_version__",
+ strtoul (end + 1, &end, 0));
+ if (*end != '\0')
+ einfo (_("%P: warning: bad version number in -subsystem option\n"));
+ }
+
+ /* Check for numeric subsystem. */
+ temp_subsystem = strtoul (optarg, & end, 0);
+ if ((*end == ':' || *end == '\0') && (temp_subsystem < 65536))
+ {
+ /* Search list for a numeric match to use its entry point. */
+ for (i = 0; v[i].name; i++)
+ if (v[i].value == (int) temp_subsystem)
+ break;
+
+ /* Use this subsystem. */
+ pe_subsystem = (int) temp_subsystem;
+ }
+ else
+ {
+ /* Search for subsystem by name. */
+ for (i = 0; v[i].name; i++)
+ if (strncmp (optarg, v[i].name, len) == 0
+ && v[i].name[len] == '\0')
+ break;
+
+ if (v[i].name == NULL)
+ {
+ einfo (_("%P%F: invalid subsystem type %s\n"), optarg);
+ return;
+ }
+
+ pe_subsystem = v[i].value;
+ }
+
+ set_pe_name ("__subsystem__", pe_subsystem);
+
+ return;
+}
+
+
+static void
+set_pe_value (char *name)
+{
+ char *end;
+
+ set_pe_name (name, strtoul (optarg, &end, 0));
+
+ if (end == optarg)
+ einfo (_("%P%F: invalid hex number for PE parameter '%s'\n"), optarg);
+
+ optarg = end;
+}
+
+
+static void
+set_pe_stack_heap (char *resname, char *comname)
+{
+ set_pe_value (resname);
+
+ if (*optarg == ',')
+ {
+ optarg++;
+ set_pe_value (comname);
+ }
+ else if (*optarg)
+ einfo (_("%P%F: strange hex info for PE parameter '%s'\n"), optarg);
+}
+
+
+static bfd_boolean
+gld${EMULATION_NAME}_handle_option (int optc)
+{
+ switch (optc)
+ {
+ default:
+ return FALSE;
+
+ case OPTION_BASE_FILE:
+ link_info.base_file = fopen (optarg, FOPEN_WB);
+ if (link_info.base_file == NULL)
+ {
+ /* xgettext:c-format */
+ fprintf (stderr, _("%s: Can't open base file %s\n"),
+ program_name, optarg);
+ xexit (1);
+ }
+ break;
+
+ /* PE options. */
+ case OPTION_HEAP:
+ set_pe_stack_heap ("__size_of_heap_reserve__", "__size_of_heap_commit__");
+ break;
+ case OPTION_STACK:
+ set_pe_stack_heap ("__size_of_stack_reserve__", "__size_of_stack_commit__");
+ break;
+ case OPTION_SUBSYSTEM:
+ set_pe_subsystem ();
+ break;
+ case OPTION_MAJOR_OS_VERSION:
+ set_pe_value ("__major_os_version__");
+ break;
+ case OPTION_MINOR_OS_VERSION:
+ set_pe_value ("__minor_os_version__");
+ break;
+ case OPTION_MAJOR_SUBSYSTEM_VERSION:
+ set_pe_value ("__major_subsystem_version__");
+ break;
+ case OPTION_MINOR_SUBSYSTEM_VERSION:
+ set_pe_value ("__minor_subsystem_version__");
+ break;
+ case OPTION_MAJOR_IMAGE_VERSION:
+ set_pe_value ("__major_image_version__");
+ break;
+ case OPTION_MINOR_IMAGE_VERSION:
+ set_pe_value ("__minor_image_version__");
+ break;
+ case OPTION_FILE_ALIGNMENT:
+ set_pe_value ("__file_alignment__");
+ break;
+ case OPTION_SECTION_ALIGNMENT:
+ set_pe_value ("__section_alignment__");
+ break;
+ case OPTION_DLL:
+ set_pe_name ("__dll__", 1);
+ break;
+ case OPTION_IMAGE_BASE:
+ set_pe_value ("__image_base__");
+ break;
+ case OPTION_SUPPORT_OLD_CODE:
+ support_old_code = 1;
+ break;
+ case OPTION_THUMB_ENTRY:
+ thumb_entry_symbol = optarg;
+ break;
+ case OPTION_USE_NUL_PREFIXED_IMPORT_TABLES:
+ pe_use_nul_prefixed_import_tables = TRUE;
+ break;
+ case OPTION_NO_LEADING_UNDERSCORE:
+ pe_leading_underscore = 0;
+ break;
+ case OPTION_LEADING_UNDERSCORE:
+ pe_leading_underscore = 1;
+ break;
+#ifdef DLL_SUPPORT
+ case OPTION_OUT_DEF:
+ pe_out_def_filename = xstrdup (optarg);
+ break;
+ case OPTION_EXPORT_ALL:
+ pe_dll_export_everything = 1;
+ break;
+ case OPTION_EXCLUDE_SYMBOLS:
+ pe_dll_add_excludes (optarg, EXCLUDESYMS);
+ break;
+ case OPTION_EXCLUDE_ALL_SYMBOLS:
+ pe_dll_exclude_all_symbols = 1;
+ break;
+ case OPTION_EXCLUDE_LIBS:
+ pe_dll_add_excludes (optarg, EXCLUDELIBS);
+ break;
+ case OPTION_EXCLUDE_MODULES_FOR_IMPLIB:
+ pe_dll_add_excludes (optarg, EXCLUDEFORIMPLIB);
+ break;
+ case OPTION_KILL_ATS:
+ pe_dll_kill_ats = 1;
+ break;
+ case OPTION_STDCALL_ALIASES:
+ pe_dll_stdcall_aliases = 1;
+ break;
+ case OPTION_ENABLE_STDCALL_FIXUP:
+ pe_enable_stdcall_fixup = 1;
+ break;
+ case OPTION_DISABLE_STDCALL_FIXUP:
+ pe_enable_stdcall_fixup = 0;
+ break;
+ case OPTION_IMPLIB_FILENAME:
+ pe_implib_filename = xstrdup (optarg);
+ break;
+ case OPTION_WARN_DUPLICATE_EXPORTS:
+ pe_dll_warn_dup_exports = 1;
+ break;
+ case OPTION_IMP_COMPAT:
+ pe_dll_compat_implib = 1;
+ break;
+ case OPTION_ENABLE_AUTO_IMAGE_BASE:
+ pe_enable_auto_image_base = 1;
+ break;
+ case OPTION_DISABLE_AUTO_IMAGE_BASE:
+ pe_enable_auto_image_base = 0;
+ break;
+ case OPTION_DLL_SEARCH_PREFIX:
+ pe_dll_search_prefix = xstrdup (optarg);
+ break;
+ case OPTION_NO_DEFAULT_EXCLUDES:
+ pe_dll_do_default_excludes = 0;
+ break;
+ case OPTION_DLL_ENABLE_AUTO_IMPORT:
+ link_info.pei386_auto_import = 1;
+ break;
+ case OPTION_DLL_DISABLE_AUTO_IMPORT:
+ link_info.pei386_auto_import = 0;
+ break;
+ case OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC:
+ link_info.pei386_runtime_pseudo_reloc =
+ DEFAULT_PSEUDO_RELOC_VERSION;
+ break;
+ case OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V1:
+ link_info.pei386_runtime_pseudo_reloc = 1;
+ break;
+ case OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V2:
+ link_info.pei386_runtime_pseudo_reloc = 2;
+ break;
+ case OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC:
+ link_info.pei386_runtime_pseudo_reloc = 0;
+ break;
+ case OPTION_ENABLE_EXTRA_PE_DEBUG:
+ pe_dll_extra_pe_debug = 1;
+ break;
+#endif
+ case OPTION_LARGE_ADDRESS_AWARE:
+ real_flags |= IMAGE_FILE_LARGE_ADDRESS_AWARE;
+ break;
+ case OPTION_ENABLE_LONG_SECTION_NAMES:
+ pe_use_coff_long_section_names = 1;
+ break;
+ case OPTION_DISABLE_LONG_SECTION_NAMES:
+ pe_use_coff_long_section_names = 0;
+ break;
+/* Get DLLCharacteristics bits */
+ case OPTION_DYNAMIC_BASE:
+ pe_dll_characteristics |= IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE;
+ break;
+ case OPTION_FORCE_INTEGRITY:
+ pe_dll_characteristics |= IMAGE_DLL_CHARACTERISTICS_FORCE_INTEGRITY;
+ break;
+ case OPTION_NX_COMPAT:
+ pe_dll_characteristics |= IMAGE_DLL_CHARACTERISTICS_NX_COMPAT;
+ break;
+ case OPTION_NO_ISOLATION:
+ pe_dll_characteristics |= IMAGE_DLLCHARACTERISTICS_NO_ISOLATION;
+ break;
+ case OPTION_NO_SEH:
+ pe_dll_characteristics |= IMAGE_DLLCHARACTERISTICS_NO_SEH;
+ break;
+ case OPTION_NO_BIND:
+ pe_dll_characteristics |= IMAGE_DLLCHARACTERISTICS_NO_BIND;
+ break;
+ case OPTION_WDM_DRIVER:
+ pe_dll_characteristics |= IMAGE_DLLCHARACTERISTICS_WDM_DRIVER;
+ break;
+ case OPTION_TERMINAL_SERVER_AWARE:
+ pe_dll_characteristics |= IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE;
+ break;
+ }
+
+ /* Set DLLCharacteristics bits */
+ set_pe_name ("__dll_characteristics__", pe_dll_characteristics);
+
+ return TRUE;
+}
+
+
+#ifdef DLL_SUPPORT
+static unsigned long
+strhash (const char *str)
+{
+ const unsigned char *s;
+ unsigned long hash;
+ unsigned int c;
+ unsigned int len;
+
+ hash = 0;
+ len = 0;
+ s = (const unsigned char *) str;
+ while ((c = *s++) != '\0')
+ {
+ hash += c + (c << 17);
+ hash ^= hash >> 2;
+ ++len;
+ }
+ hash += len + (len << 17);
+ hash ^= hash >> 2;
+
+ return hash;
+}
+
+/* Use the output file to create a image base for relocatable DLLs. */
+
+static unsigned long
+compute_dll_image_base (const char *ofile)
+{
+ unsigned long hash = strhash (ofile);
+ return 0x61300000 + ((hash << 16) & 0x0FFC0000);
+}
+#endif
+
+/* Assign values to the special symbols before the linker script is
+ read. */
+
+static void
+gld_${EMULATION_NAME}_set_symbols (void)
+{
+ /* Run through and invent symbols for all the
+ names and insert the defaults. */
+ int j;
+
+ is_underscoring ();
+
+ if (!init[IMAGEBASEOFF].inited)
+ {
+ if (link_info.relocatable)
+ init[IMAGEBASEOFF].value = 0;
+ else if (init[DLLOFF].value || (link_info.shared && !link_info.pie))
+ {
+#ifdef DLL_SUPPORT
+ init[IMAGEBASEOFF].value = (pe_enable_auto_image_base
+ ? compute_dll_image_base (output_filename)
+ : NT_DLL_IMAGE_BASE);
+#else
+ init[IMAGEBASEOFF].value = NT_DLL_IMAGE_BASE;
+#endif
+ }
+ else
+ init[IMAGEBASEOFF].value = NT_EXE_IMAGE_BASE;
+ init[MSIMAGEBASEOFF].value = init[IMAGEBASEOFF].value;
+ }
+
+ /* Don't do any symbol assignments if this is a relocatable link. */
+ if (link_info.relocatable)
+ return;
+
+ /* Glue the assignments into the abs section. */
+ push_stat_ptr (&abs_output_section->children);
+
+ for (j = 0; init[j].ptr; j++)
+ {
+ long val = init[j].value;
+ lang_assignment_statement_type *rv;
+
+ rv = lang_add_assignment (exp_assop ('=', GET_INIT_SYMBOL_NAME (j),
+ exp_intop (val)));
+ if (init[j].size == sizeof (short))
+ *(short *) init[j].ptr = val;
+ else if (init[j].size == sizeof (int))
+ *(int *) init[j].ptr = val;
+ else if (init[j].size == sizeof (long))
+ *(long *) init[j].ptr = val;
+ /* This might be a long long or other special type. */
+ else if (init[j].size == sizeof (bfd_vma))
+ *(bfd_vma *) init[j].ptr = val;
+ else abort ();
+ if (j == IMAGEBASEOFF)
+ image_base_statement = rv;
+ }
+ /* Restore the pointer. */
+ pop_stat_ptr ();
+
+ if (pe.FileAlignment > pe.SectionAlignment)
+ {
+ einfo (_("%P: warning, file alignment > section alignment.\n"));
+ }
+}
+
+/* This is called after the linker script and the command line options
+ have been read. */
+
+static void
+gld_${EMULATION_NAME}_after_parse (void)
+{
+ /* PR ld/6744: Warn the user if they have used an ELF-only
+ option hoping it will work on PE. */
+ if (link_info.export_dynamic)
+ einfo (_("%P: warning: --export-dynamic is not supported for PE "
+ "targets, did you mean --export-all-symbols?\n"));
+
+ set_entry_point ();
+
+ after_parse_default ();
+}
+
+/* pe-dll.c directly accesses pe_data_import_dll,
+ so it must be defined outside of #ifdef DLL_SUPPORT.
+ Note - this variable is deliberately not initialised.
+ This allows it to be treated as a common varaible, and only
+ exist in one incarnation in a multiple target enabled linker. */
+char * pe_data_import_dll;
+
+#ifdef DLL_SUPPORT
+static struct bfd_link_hash_entry *pe_undef_found_sym;
+
+static bfd_boolean
+pe_undef_cdecl_match (struct bfd_link_hash_entry *h, void *inf)
+{
+ int sl;
+ char *string = inf;
+ const char *hs = h->root.string;
+
+ sl = strlen (string);
+ if (h->type == bfd_link_hash_defined
+ && ((*hs == '@' && *string == '_'
+ && strncmp (hs + 1, string + 1, sl - 1) == 0)
+ || strncmp (hs, string, sl) == 0)
+ && h->root.string[sl] == '@')
+ {
+ pe_undef_found_sym = h;
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static void
+pe_fixup_stdcalls (void)
+{
+ static int gave_warning_message = 0;
+ struct bfd_link_hash_entry *undef, *sym;
+
+ if (pe_dll_extra_pe_debug)
+ printf ("%s\n", __FUNCTION__);
+
+ for (undef = link_info.hash->undefs; undef; undef=undef->u.undef.next)
+ if (undef->type == bfd_link_hash_undefined)
+ {
+ char* at = strchr (undef->root.string, '@');
+ int lead_at = (*undef->root.string == '@');
+ if (lead_at)
+ at = strchr (undef->root.string + 1, '@');
+
+ if (at || lead_at)
+ {
+ /* The symbol is a stdcall symbol, so let's look for a
+ cdecl symbol with the same name and resolve to that. */
+ char *cname = xstrdup (undef->root.string);
+
+ if (lead_at)
+ *cname = '_';
+ at = strchr (cname, '@');
+ if (at)
+ *at = 0;
+ sym = bfd_link_hash_lookup (link_info.hash, cname, 0, 0, 1);
+
+ if (sym && sym->type == bfd_link_hash_defined)
+ {
+ undef->type = bfd_link_hash_defined;
+ undef->u.def.value = sym->u.def.value;
+ undef->u.def.section = sym->u.def.section;
+
+ if (pe_enable_stdcall_fixup == -1)
+ {
+ einfo (_("Warning: resolving %s by linking to %s\n"),
+ undef->root.string, cname);
+ if (! gave_warning_message)
+ {
+ gave_warning_message = 1;
+ einfo (_("Use --enable-stdcall-fixup to disable these warnings\n"));
+ einfo (_("Use --disable-stdcall-fixup to disable these fixups\n"));
+ }
+ }
+ }
+ }
+ else
+ {
+ /* The symbol is a cdecl symbol, so we look for stdcall
+ symbols - which means scanning the whole symbol table. */
+ pe_undef_found_sym = 0;
+ bfd_link_hash_traverse (link_info.hash, pe_undef_cdecl_match,
+ (char *) undef->root.string);
+ sym = pe_undef_found_sym;
+ if (sym)
+ {
+ undef->type = bfd_link_hash_defined;
+ undef->u.def.value = sym->u.def.value;
+ undef->u.def.section = sym->u.def.section;
+
+ if (pe_enable_stdcall_fixup == -1)
+ {
+ einfo (_("Warning: resolving %s by linking to %s\n"),
+ undef->root.string, sym->root.string);
+ if (! gave_warning_message)
+ {
+ gave_warning_message = 1;
+ einfo (_("Use --enable-stdcall-fixup to disable these warnings\n"));
+ einfo (_("Use --disable-stdcall-fixup to disable these fixups\n"));
+ }
+ }
+ }
+ }
+ }
+}
+
+static int
+make_import_fixup (arelent *rel, asection *s)
+{
+ struct bfd_symbol *sym = *rel->sym_ptr_ptr;
+ char addend[4];
+
+ if (pe_dll_extra_pe_debug)
+ printf ("arelent: %s@%#lx: add=%li\n", sym->name,
+ (unsigned long) rel->address, (long) rel->addend);
+
+ if (! bfd_get_section_contents (s->owner, s, addend, rel->address, sizeof (addend)))
+ einfo (_("%C: Cannot get section contents - auto-import exception\n"),
+ s->owner, s, rel->address);
+
+ pe_create_import_fixup (rel, s, bfd_get_32 (s->owner, addend));
+
+ return 1;
+}
+
+static void
+pe_find_data_imports (void)
+{
+ struct bfd_link_hash_entry *undef, *sym;
+
+ if (link_info.pei386_auto_import == 0)
+ return;
+
+ for (undef = link_info.hash->undefs; undef; undef=undef->u.undef.next)
+ {
+ if (undef->type == bfd_link_hash_undefined)
+ {
+ /* C++ symbols are *long*. */
+ char buf[4096];
+
+ if (pe_dll_extra_pe_debug)
+ printf ("%s:%s\n", __FUNCTION__, undef->root.string);
+
+ sprintf (buf, "__imp_%s", undef->root.string);
+
+ sym = bfd_link_hash_lookup (link_info.hash, buf, 0, 0, 1);
+
+ if (sym && sym->type == bfd_link_hash_defined)
+ {
+ bfd *b = sym->u.def.section->owner;
+ asymbol **symbols;
+ int nsyms, i;
+
+ if (link_info.pei386_auto_import == -1)
+ {
+ static bfd_boolean warned = FALSE;
+
+ info_msg (_("Info: resolving %s by linking to %s (auto-import)\n"),
+ undef->root.string, buf);
+
+ /* PR linker/4844. */
+ if (! warned)
+ {
+ warned = TRUE;
+ einfo (_("%P: warning: auto-importing has been activated without --enable-auto-import specified on the command line.\n\
+This should work unless it involves constant data structures referencing symbols from auto-imported DLLs.\n"));
+ }
+ }
+
+ if (!bfd_generic_link_read_symbols (b))
+ {
+ einfo (_("%B%F: could not read symbols: %E\n"), b);
+ return;
+ }
+
+ symbols = bfd_get_outsymbols (b);
+ nsyms = bfd_get_symcount (b);
+
+ for (i = 0; i < nsyms; i++)
+ {
+ if (! CONST_STRNEQ (symbols[i]->name,
+ U ("_head_")))
+ continue;
+
+ if (pe_dll_extra_pe_debug)
+ printf ("->%s\n", symbols[i]->name);
+
+ pe_data_import_dll = (char *) (symbols[i]->name
+ + U_SIZE ("_head_") - 1);
+ break;
+ }
+
+ pe_walk_relocs_of_symbol (&link_info, undef->root.string,
+ make_import_fixup);
+
+ /* Let's differentiate it somehow from defined. */
+ undef->type = bfd_link_hash_defweak;
+ /* We replace original name with __imp_ prefixed, this
+ 1) may trash memory 2) leads to duplicate symbol generation.
+ Still, IMHO it's better than having name poluted. */
+ undef->root.string = sym->root.string;
+ undef->u.def.value = sym->u.def.value;
+ undef->u.def.section = sym->u.def.section;
+ }
+ }
+ }
+}
+
+static bfd_boolean
+pr_sym (struct bfd_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
+{
+ if (pe_dll_extra_pe_debug)
+ printf ("+%s\n", h->string);
+
+ return TRUE;
+}
+#endif /* DLL_SUPPORT */
+
+static void
+debug_section_p (bfd *abfd ATTRIBUTE_UNUSED, asection *sect, void *obj)
+{
+ int *found = (int *) obj;
+ if (strncmp (".debug_", sect->name, sizeof (".debug_") - 1) == 0)
+ *found = 1;
+}
+
+static void
+gld_${EMULATION_NAME}_after_open (void)
+{
+#ifdef DLL_SUPPORT
+ if (pe_dll_extra_pe_debug)
+ {
+ bfd *a;
+ struct bfd_link_hash_entry *sym;
+
+ printf ("%s()\n", __FUNCTION__);
+
+ for (sym = link_info.hash->undefs; sym; sym=sym->u.undef.next)
+ printf ("-%s\n", sym->root.string);
+ bfd_hash_traverse (&link_info.hash->table, pr_sym, NULL);
+
+ for (a = link_info.input_bfds; a; a = a->link_next)
+ printf ("*%s\n",a->filename);
+ }
+#endif
+
+ /* Pass the wacky PE command line options into the output bfd.
+ FIXME: This should be done via a function, rather than by
+ including an internal BFD header. */
+
+ if (coff_data (link_info.output_bfd) == NULL
+ || coff_data (link_info.output_bfd)->pe == 0)
+ einfo (_("%F%P: cannot perform PE operations on non PE output file '%B'.\n"),
+ link_info.output_bfd);
+
+ pe_data (link_info.output_bfd)->pe_opthdr = pe;
+ pe_data (link_info.output_bfd)->dll = init[DLLOFF].value;
+ pe_data (link_info.output_bfd)->real_flags |= real_flags;
+
+ /* At this point we must decide whether to use long section names
+ in the output or not. If the user hasn't explicitly specified
+ on the command line, we leave it to the default for the format
+ (object files yes, image files no), except if there is debug
+ information present; GDB relies on the long section names to
+ find it, so enable it in that case. */
+ if (pe_use_coff_long_section_names < 0 && link_info.strip == strip_none)
+ {
+ /* Iterate over all sections of all input BFDs, checking
+ for any that begin 'debug_' and are long names. */
+ LANG_FOR_EACH_INPUT_STATEMENT (is)
+ {
+ int found_debug = 0;
+ bfd_map_over_sections (is->the_bfd, debug_section_p, &found_debug);
+ if (found_debug)
+ {
+ pe_use_coff_long_section_names = 1;
+ break;
+ }
+ }
+ }
+
+ pe_output_file_set_long_section_names (link_info.output_bfd);
+
+#ifdef DLL_SUPPORT
+ if (pe_enable_stdcall_fixup) /* -1=warn or 1=disable */
+ pe_fixup_stdcalls ();
+
+ pe_process_import_defs (link_info.output_bfd, &link_info);
+
+ pe_find_data_imports ();
+
+ /* As possibly new symbols are added by imports, we rerun
+ stdcall/fastcall fixup here. */
+ if (pe_enable_stdcall_fixup) /* -1=warn or 1=disable */
+ pe_fixup_stdcalls ();
+
+#if defined (TARGET_IS_i386pe) \
+ || defined (TARGET_IS_armpe) \
+ || defined (TARGET_IS_arm_epoc_pe) \
+ || defined (TARGET_IS_arm_wince_pe)
+ if (!link_info.relocatable)
+ pe_dll_build_sections (link_info.output_bfd, &link_info);
+#else
+ if (link_info.shared)
+ pe_dll_build_sections (link_info.output_bfd, &link_info);
+ else
+ pe_exe_build_sections (link_info.output_bfd, &link_info);
+#endif
+#endif /* DLL_SUPPORT */
+
+#if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_pe) || defined(TARGET_IS_arm_wince_pe)
+ if (strstr (bfd_get_target (link_info.output_bfd), "arm") == NULL)
+ {
+ /* The arm backend needs special fields in the output hash structure.
+ These will only be created if the output format is an arm format,
+ hence we do not support linking and changing output formats at the
+ same time. Use a link followed by objcopy to change output formats. */
+ einfo ("%F%X%P: error: cannot change output format whilst linking ARM binaries\n");
+ return;
+ }
+ {
+ /* Find a BFD that can hold the interworking stubs. */
+ LANG_FOR_EACH_INPUT_STATEMENT (is)
+ {
+ if (bfd_arm_get_bfd_for_interworking (is->the_bfd, & link_info))
+ break;
+ }
+ }
+#endif
+
+ {
+ /* This next chunk of code tries to detect the case where you have
+ two import libraries for the same DLL (specifically,
+ symbolically linking libm.a and libc.a in cygwin to
+ libcygwin.a). In those cases, it's possible for function
+ thunks from the second implib to be used but without the
+ head/tail objects, causing an improper import table. We detect
+ those cases and rename the "other" import libraries to match
+ the one the head/tail come from, so that the linker will sort
+ things nicely and produce a valid import table. */
+
+ LANG_FOR_EACH_INPUT_STATEMENT (is)
+ {
+ if (is->the_bfd->my_archive)
+ {
+ int idata2 = 0, reloc_count=0, is_imp = 0;
+ asection *sec;
+
+ /* See if this is an import library thunk. */
+ for (sec = is->the_bfd->sections; sec; sec = sec->next)
+ {
+ if (strcmp (sec->name, ".idata\$2") == 0)
+ idata2 = 1;
+ if (CONST_STRNEQ (sec->name, ".idata\$"))
+ is_imp = 1;
+ reloc_count += sec->reloc_count;
+ }
+
+ if (is_imp && !idata2 && reloc_count)
+ {
+ /* It is, look for the reference to head and see if it's
+ from our own library. */
+ for (sec = is->the_bfd->sections; sec; sec = sec->next)
+ {
+ int i;
+ long relsize;
+ asymbol **symbols;
+ arelent **relocs;
+ int nrelocs;
+
+ relsize = bfd_get_reloc_upper_bound (is->the_bfd, sec);
+ if (relsize < 1)
+ break;
+
+ if (!bfd_generic_link_read_symbols (is->the_bfd))
+ {
+ einfo (_("%B%F: could not read symbols: %E\n"),
+ is->the_bfd);
+ return;
+ }
+ symbols = bfd_get_outsymbols (is->the_bfd);
+
+ relocs = xmalloc ((size_t) relsize);
+ nrelocs = bfd_canonicalize_reloc (is->the_bfd, sec,
+ relocs, symbols);
+ if (nrelocs < 0)
+ {
+ free (relocs);
+ einfo ("%X%P: unable to process relocs: %E\n");
+ return;
+ }
+
+ for (i = 0; i < nrelocs; i++)
+ {
+ struct bfd_symbol *s;
+ struct bfd_link_hash_entry * blhe;
+ char *other_bfd_filename;
+ char *n;
+
+ s = (relocs[i]->sym_ptr_ptr)[0];
+
+ if (s->flags & BSF_LOCAL)
+ continue;
+
+ /* Thunk section with reloc to another bfd. */
+ blhe = bfd_link_hash_lookup (link_info.hash,
+ s->name,
+ FALSE, FALSE, TRUE);
+
+ if (blhe == NULL
+ || blhe->type != bfd_link_hash_defined)
+ continue;
+
+ other_bfd_filename
+ = blhe->u.def.section->owner->my_archive
+ ? bfd_get_filename (blhe->u.def.section->owner->my_archive)
+ : bfd_get_filename (blhe->u.def.section->owner);
+
+ if (strcmp (bfd_get_filename (is->the_bfd->my_archive),
+ other_bfd_filename) == 0)
+ continue;
+
+ /* Rename this implib to match the other one. */
+ n = xmalloc (strlen (other_bfd_filename) + 1);
+ strcpy (n, other_bfd_filename);
+ is->the_bfd->my_archive->filename = n;
+ }
+
+ free (relocs);
+ /* Note - we do not free the symbols,
+ they are now cached in the BFD. */
+ }
+ }
+ }
+ }
+ }
+
+ {
+ int is_ms_arch = 0;
+ bfd *cur_arch = 0;
+ lang_input_statement_type *is2;
+ lang_input_statement_type *is3;
+
+ /* Careful - this is a shell script. Watch those dollar signs! */
+ /* Microsoft import libraries have every member named the same,
+ and not in the right order for us to link them correctly. We
+ must detect these and rename the members so that they'll link
+ correctly. There are three types of objects: the head, the
+ thunks, and the sentinel(s). The head is easy; it's the one
+ with idata2. We assume that the sentinels won't have relocs,
+ and the thunks will. It's easier than checking the symbol
+ table for external references. */
+ LANG_FOR_EACH_INPUT_STATEMENT (is)
+ {
+ if (is->the_bfd->my_archive)
+ {
+ char *pnt;
+ bfd *arch = is->the_bfd->my_archive;
+
+ if (cur_arch != arch)
+ {
+ cur_arch = arch;
+ is_ms_arch = 1;
+
+ for (is3 = is;
+ is3 && is3->the_bfd->my_archive == arch;
+ is3 = (lang_input_statement_type *) is3->next)
+ {
+ /* A MS dynamic import library can also contain static
+ members, so look for the first element with a .dll
+ extension, and use that for the remainder of the
+ comparisons. */
+ pnt = strrchr (is3->the_bfd->filename, '.');
+ if (pnt != NULL && strcmp (pnt, ".dll") == 0)
+ break;
+ }
+
+ if (is3 == NULL)
+ is_ms_arch = 0;
+ else
+ {
+ /* OK, found one. Now look to see if the remaining
+ (dynamic import) members use the same name. */
+ for (is2 = is;
+ is2 && is2->the_bfd->my_archive == arch;
+ is2 = (lang_input_statement_type *) is2->next)
+ {
+ /* Skip static members, ie anything with a .obj
+ extension. */
+ pnt = strrchr (is2->the_bfd->filename, '.');
+ if (pnt != NULL && strcmp (pnt, ".obj") == 0)
+ continue;
+
+ if (strcmp (is3->the_bfd->filename,
+ is2->the_bfd->filename))
+ {
+ is_ms_arch = 0;
+ break;
+ }
+ }
+ }
+ }
+
+ /* This fragment might have come from an .obj file in a Microsoft
+ import, and not an actual import record. If this is the case,
+ then leave the filename alone. */
+ pnt = strrchr (is->the_bfd->filename, '.');
+
+ if (is_ms_arch && (strcmp (pnt, ".dll") == 0))
+ {
+ int idata2 = 0, reloc_count=0;
+ asection *sec;
+ char *new_name, seq;
+
+ for (sec = is->the_bfd->sections; sec; sec = sec->next)
+ {
+ if (strcmp (sec->name, ".idata\$2") == 0)
+ idata2 = 1;
+ reloc_count += sec->reloc_count;
+ }
+
+ if (idata2) /* .idata2 is the TOC */
+ seq = 'a';
+ else if (reloc_count > 0) /* thunks */
+ seq = 'b';
+ else /* sentinel */
+ seq = 'c';
+
+ new_name = xmalloc (strlen (is->the_bfd->filename) + 3);
+ sprintf (new_name, "%s.%c", is->the_bfd->filename, seq);
+ is->the_bfd->filename = new_name;
+
+ new_name = xmalloc (strlen (is->filename) + 3);
+ sprintf (new_name, "%s.%c", is->filename, seq);
+ is->filename = new_name;
+ }
+ }
+ }
+ }
+
+ {
+ /* The following chunk of code tries to identify jump stubs in
+ import libraries which are dead code and eliminates them
+ from the final link. For each exported symbol <sym>, there
+ is a object file in the import library with a .text section
+ and several .idata\$* sections. The .text section contains the
+ symbol definition for <sym> which is a jump stub of the form
+ jmp *__imp_<sym>. The .idata\$5 contains the symbol definition
+ for __imp_<sym> which is the address of the slot for <sym> in
+ the import address table. When a symbol is imported explicitly
+ using __declspec(dllimport) declaration, the compiler generates
+ a reference to __imp_<sym> which directly resolves to the
+ symbol in .idata\$5, in which case the jump stub code is not
+ needed. The following code tries to identify jump stub sections
+ in import libraries which are not referred to by anyone and
+ marks them for exclusion from the final link. */
+ LANG_FOR_EACH_INPUT_STATEMENT (is)
+ {
+ if (is->the_bfd->my_archive)
+ {
+ int is_imp = 0;
+ asection *sec, *stub_sec = NULL;
+
+ /* See if this is an import library thunk. */
+ for (sec = is->the_bfd->sections; sec; sec = sec->next)
+ {
+ if (strncmp (sec->name, ".idata\$", 7) == 0)
+ is_imp = 1;
+ /* The section containing the jmp stub has code
+ and has a reloc. */
+ if ((sec->flags & SEC_CODE) && sec->reloc_count)
+ stub_sec = sec;
+ }
+
+ if (is_imp && stub_sec)
+ {
+ asymbol **symbols;
+ long nsyms, src_count;
+ struct bfd_link_hash_entry * blhe;
+
+ if (!bfd_generic_link_read_symbols (is->the_bfd))
+ {
+ einfo (_("%B%F: could not read symbols: %E\n"),
+ is->the_bfd);
+ return;
+ }
+ symbols = bfd_get_outsymbols (is->the_bfd);
+ nsyms = bfd_get_symcount (is->the_bfd);
+
+ for (src_count = 0; src_count < nsyms; src_count++)
+ {
+ if (symbols[src_count]->section->id == stub_sec->id)
+ {
+ /* This symbol belongs to the section containing
+ the stub. */
+ blhe = bfd_link_hash_lookup (link_info.hash,
+ symbols[src_count]->name,
+ FALSE, FALSE, TRUE);
+ /* If the symbol in the stub section has no other
+ undefined references, exclude the stub section
+ from the final link. */
+ if (blhe && (blhe->type == bfd_link_hash_defined)
+ && (blhe->u.undef.next == NULL))
+ stub_sec->flags |= SEC_EXCLUDE;
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+static void
+gld_${EMULATION_NAME}_before_allocation (void)
+{
+#ifdef TARGET_IS_ppcpe
+ /* Here we rummage through the found bfds to collect toc information. */
+ {
+ LANG_FOR_EACH_INPUT_STATEMENT (is)
+ {
+ if (!ppc_process_before_allocation (is->the_bfd, &link_info))
+ {
+ /* xgettext:c-format */
+ einfo (_("Errors encountered processing file %s\n"), is->filename);
+ }
+ }
+ }
+
+ /* We have seen it all. Allocate it, and carry on. */
+ ppc_allocate_toc_section (&link_info);
+#endif /* TARGET_IS_ppcpe */
+
+#if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_pe) || defined(TARGET_IS_arm_wince_pe)
+ /* FIXME: we should be able to set the size of the interworking stub
+ section.
+
+ Here we rummage through the found bfds to collect glue
+ information. FIXME: should this be based on a command line
+ option? krk@cygnus.com. */
+ {
+ LANG_FOR_EACH_INPUT_STATEMENT (is)
+ {
+ if (! bfd_arm_process_before_allocation
+ (is->the_bfd, & link_info, support_old_code))
+ {
+ /* xgettext:c-format */
+ einfo (_("Errors encountered processing file %s for interworking\n"),
+ is->filename);
+ }
+ }
+ }
+
+ /* We have seen it all. Allocate it, and carry on. */
+ bfd_arm_allocate_interworking_sections (& link_info);
+#endif /* TARGET_IS_armpe || TARGET_IS_arm_epoc_pe || TARGET_IS_arm_wince_pe */
+
+ before_allocation_default ();
+}
+
+#ifdef DLL_SUPPORT
+/* This is called when an input file isn't recognized as a BFD. We
+ check here for .DEF files and pull them in automatically. */
+
+static int
+saw_option (char *option)
+{
+ int i;
+
+ for (i = 0; init[i].ptr; i++)
+ if (strcmp (GET_INIT_SYMBOL_NAME (i), option) == 0)
+ return init[i].inited;
+ return 0;
+}
+#endif /* DLL_SUPPORT */
+
+static bfd_boolean
+gld_${EMULATION_NAME}_unrecognized_file (lang_input_statement_type *entry ATTRIBUTE_UNUSED)
+{
+#ifdef DLL_SUPPORT
+ const char *ext = entry->filename + strlen (entry->filename) - 4;
+
+ if (strcmp (ext, ".def") == 0 || strcmp (ext, ".DEF") == 0)
+ {
+ pe_def_file = def_file_parse (entry->filename, pe_def_file);
+
+ if (pe_def_file)
+ {
+ int i, buflen=0, len;
+ char *buf;
+
+ for (i = 0; i < pe_def_file->num_exports; i++)
+ {
+ len = strlen (pe_def_file->exports[i].internal_name);
+ if (buflen < len + 2)
+ buflen = len + 2;
+ }
+
+ buf = xmalloc (buflen);
+
+ for (i = 0; i < pe_def_file->num_exports; i++)
+ {
+ struct bfd_link_hash_entry *h;
+
+ sprintf (buf, "%s%s", U (""),
+ pe_def_file->exports[i].internal_name);
+
+ h = bfd_link_hash_lookup (link_info.hash, buf, TRUE, TRUE, TRUE);
+ if (h == (struct bfd_link_hash_entry *) NULL)
+ einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
+ if (h->type == bfd_link_hash_new)
+ {
+ h->type = bfd_link_hash_undefined;
+ h->u.undef.abfd = NULL;
+ bfd_link_add_undef (link_info.hash, h);
+ }
+ }
+ free (buf);
+
+ /* def_file_print (stdout, pe_def_file); */
+ if (pe_def_file->is_dll == 1)
+ link_info.shared = 1;
+
+ if (pe_def_file->base_address != (bfd_vma)(-1))
+ {
+ pe.ImageBase
+ = pe_data (link_info.output_bfd)->pe_opthdr.ImageBase
+ = init[IMAGEBASEOFF].value
+ = pe_def_file->base_address;
+ init[IMAGEBASEOFF].inited = 1;
+ if (image_base_statement)
+ image_base_statement->exp = exp_assop ('=', "__image_base__",
+ exp_intop (pe.ImageBase));
+ }
+
+ if (pe_def_file->stack_reserve != -1
+ && ! saw_option ("__size_of_stack_reserve__"))
+ {
+ pe.SizeOfStackReserve = pe_def_file->stack_reserve;
+ if (pe_def_file->stack_commit != -1)
+ pe.SizeOfStackCommit = pe_def_file->stack_commit;
+ }
+ if (pe_def_file->heap_reserve != -1
+ && ! saw_option ("__size_of_heap_reserve__"))
+ {
+ pe.SizeOfHeapReserve = pe_def_file->heap_reserve;
+ if (pe_def_file->heap_commit != -1)
+ pe.SizeOfHeapCommit = pe_def_file->heap_commit;
+ }
+ return TRUE;
+ }
+ }
+#endif
+ return FALSE;
+}
+
+static bfd_boolean
+gld_${EMULATION_NAME}_recognized_file (lang_input_statement_type *entry ATTRIBUTE_UNUSED)
+{
+#ifdef DLL_SUPPORT
+#ifdef TARGET_IS_i386pe
+ pe_dll_id_target ("pei-i386");
+#endif
+#ifdef TARGET_IS_shpe
+ pe_dll_id_target ("pei-shl");
+#endif
+#ifdef TARGET_IS_mipspe
+ pe_dll_id_target ("pei-mips");
+#endif
+#ifdef TARGET_IS_armpe
+ pe_dll_id_target ("pei-arm-little");
+#endif
+#ifdef TARGET_IS_arm_epoc_pe
+ pe_dll_id_target ("epoc-pei-arm-little");
+#endif
+#ifdef TARGET_IS_arm_wince_pe
+ pe_dll_id_target ("pei-arm-wince-little");
+#endif
+ if (pe_bfd_is_dll (entry->the_bfd))
+ return pe_implied_import_dll (entry->filename);
+#endif
+ return FALSE;
+}
+
+static void
+gld_${EMULATION_NAME}_finish (void)
+{
+#if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_pe) || defined(TARGET_IS_arm_wince_pe)
+ struct bfd_link_hash_entry * h;
+
+ if (thumb_entry_symbol != NULL)
+ {
+ h = bfd_link_hash_lookup (link_info.hash, thumb_entry_symbol,
+ FALSE, FALSE, TRUE);
+
+ if (h != (struct bfd_link_hash_entry *) NULL
+ && (h->type == bfd_link_hash_defined
+ || h->type == bfd_link_hash_defweak)
+ && h->u.def.section->output_section != NULL)
+ {
+ static char buffer[32];
+ bfd_vma val;
+
+ /* Special procesing is required for a Thumb entry symbol. The
+ bottom bit of its address must be set. */
+ val = (h->u.def.value
+ + bfd_get_section_vma (link_info.output_bfd,
+ h->u.def.section->output_section)
+ + h->u.def.section->output_offset);
+
+ val |= 1;
+
+ /* Now convert this value into a string and store it in entry_symbol
+ where the lang_finish() function will pick it up. */
+ buffer[0] = '0';
+ buffer[1] = 'x';
+
+ sprintf_vma (buffer + 2, val);
+
+ if (entry_symbol.name != NULL && entry_from_cmdline)
+ einfo (_("%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"),
+ thumb_entry_symbol, entry_symbol.name);
+ entry_symbol.name = buffer;
+ }
+ else
+ einfo (_("%P: warning: cannot find thumb start symbol %s\n"), thumb_entry_symbol);
+ }
+#endif /* defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_pe) || defined(TARGET_IS_arm_wince_pe) */
+
+ finish_default ();
+
+#ifdef DLL_SUPPORT
+ if (link_info.shared
+#if !defined(TARGET_IS_shpe) && !defined(TARGET_IS_mipspe)
+ || (!link_info.relocatable && pe_def_file->num_exports != 0)
+#endif
+ )
+ {
+ pe_dll_fill_sections (link_info.output_bfd, &link_info);
+ if (pe_implib_filename)
+ pe_dll_generate_implib (pe_def_file, pe_implib_filename, &link_info);
+ }
+#if defined(TARGET_IS_shpe) || defined(TARGET_IS_mipspe)
+ /* ARM doesn't need relocs. */
+ else
+ {
+ pe_exe_fill_sections (link_info.output_bfd, &link_info);
+ }
+#endif
+
+ if (pe_out_def_filename)
+ pe_dll_generate_def_file (pe_out_def_filename);
+#endif /* DLL_SUPPORT */
+
+ /* I don't know where .idata gets set as code, but it shouldn't be. */
+ {
+ asection *asec = bfd_get_section_by_name (link_info.output_bfd, ".idata");
+
+ if (asec)
+ {
+ asec->flags &= ~SEC_CODE;
+ asec->flags |= SEC_DATA;
+ }
+ }
+}
+
+
+/* Place an orphan section.
+
+ We use this to put sections in a reasonable place in the file, and
+ to ensure that they are aligned as required.
+
+ We handle grouped sections here as well. A section named .foo\$nn
+ goes into the output section .foo. All grouped sections are sorted
+ by name.
+
+ Grouped sections for the default sections are handled by the
+ default linker script using wildcards, and are sorted by
+ sort_sections. */
+
+static lang_output_section_statement_type *
+gld_${EMULATION_NAME}_place_orphan (asection *s,
+ const char *secname,
+ int constraint)
+{
+ const char *orig_secname = secname;
+ char *dollar = NULL;
+ lang_output_section_statement_type *os;
+ lang_statement_list_type add_child;
+ lang_output_section_statement_type *match_by_name = NULL;
+ lang_statement_union_type **pl;
+
+ /* Look through the script to see where to place this section. */
+ if (!link_info.relocatable
+ && (dollar = strchr (secname, '\$')) != NULL)
+ {
+ size_t len = dollar - secname;
+ char *newname = xmalloc (len + 1);
+ memcpy (newname, secname, len);
+ newname[len] = '\0';
+ secname = newname;
+ }
+
+ lang_list_init (&add_child);
+
+ os = NULL;
+ if (constraint == 0)
+ for (os = lang_output_section_find (secname);
+ os != NULL;
+ os = next_matching_output_section_statement (os, 0))
+ {
+ /* If we don't match an existing output section, tell
+ lang_insert_orphan to create a new output section. */
+ constraint = SPECIAL;
+
+ if (os->bfd_section != NULL
+ && (os->bfd_section->flags == 0
+ || ((s->flags ^ os->bfd_section->flags)
+ & (SEC_LOAD | SEC_ALLOC)) == 0))
+ {
+ /* We already have an output section statement with this
+ name, and its bfd section has compatible flags.
+ If the section already exists but does not have any flags set,
+ then it has been created by the linker, probably as a result of
+ a --section-start command line switch. */
+ lang_add_section (&add_child, s, os);
+ break;
+ }
+
+ /* Save unused output sections in case we can match them
+ against orphans later. */
+ if (os->bfd_section == NULL)
+ match_by_name = os;
+ }
+
+ /* If we didn't match an active output section, see if we matched an
+ unused one and use that. */
+ if (os == NULL && match_by_name)
+ {
+ lang_add_section (&match_by_name->children, s, match_by_name);
+ return match_by_name;
+ }
+
+ if (os == NULL)
+ {
+ static struct orphan_save hold[] =
+ {
+ { ".text",
+ SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE,
+ 0, 0, 0, 0 },
+ { ".idata",
+ SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_DATA,
+ 0, 0, 0, 0 },
+ { ".rdata",
+ SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_DATA,
+ 0, 0, 0, 0 },
+ { ".data",
+ SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_DATA,
+ 0, 0, 0, 0 },
+ { ".bss",
+ SEC_ALLOC,
+ 0, 0, 0, 0 }
+ };
+ enum orphan_save_index
+ {
+ orphan_text = 0,
+ orphan_idata,
+ orphan_rodata,
+ orphan_data,
+ orphan_bss
+ };
+ static int orphan_init_done = 0;
+ struct orphan_save *place;
+ lang_output_section_statement_type *after;
+ etree_type *address;
+
+ if (!orphan_init_done)
+ {
+ struct orphan_save *ho;
+ for (ho = hold; ho < hold + sizeof (hold) / sizeof (hold[0]); ++ho)
+ if (ho->name != NULL)
+ {
+ ho->os = lang_output_section_find (ho->name);
+ if (ho->os != NULL && ho->os->flags == 0)
+ ho->os->flags = ho->flags;
+ }
+ orphan_init_done = 1;
+ }
+
+ /* Try to put the new output section in a reasonable place based
+ on the section name and section flags. */
+
+ place = NULL;
+ if ((s->flags & SEC_ALLOC) == 0)
+ ;
+ else if ((s->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
+ place = &hold[orphan_bss];
+ else if ((s->flags & SEC_READONLY) == 0)
+ place = &hold[orphan_data];
+ else if ((s->flags & SEC_CODE) == 0)
+ {
+ place = (!strncmp (secname, ".idata\$", 7) ? &hold[orphan_idata]
+ : &hold[orphan_rodata]);
+ }
+ else
+ place = &hold[orphan_text];
+
+ after = NULL;
+ if (place != NULL)
+ {
+ if (place->os == NULL)
+ place->os = lang_output_section_find (place->name);
+ after = place->os;
+ if (after == NULL)
+ after = lang_output_section_find_by_flags (s, &place->os, NULL);
+ if (after == NULL)
+ /* *ABS* is always the first output section statement. */
+ after = (&lang_output_section_statement.head
+ ->output_section_statement);
+ }
+
+ /* All sections in an executable must be aligned to a page boundary. */
+ address = exp_unop (ALIGN_K, exp_nameop (NAME, "__section_alignment__"));
+ os = lang_insert_orphan (s, secname, constraint, after, place, address,
+ &add_child);
+ }
+
+ /* If the section name has a '\$', sort it with the other '\$'
+ sections. */
+ for (pl = &os->children.head; *pl != NULL; pl = &(*pl)->header.next)
+ {
+ lang_input_section_type *ls;
+ const char *lname;
+
+ if ((*pl)->header.type != lang_input_section_enum)
+ continue;
+
+ ls = &(*pl)->input_section;
+
+ lname = bfd_get_section_name (ls->section->owner, ls->section);
+ if (strchr (lname, '\$') != NULL
+ && (dollar == NULL || strcmp (orig_secname, lname) < 0))
+ break;
+ }
+
+ if (add_child.head != NULL)
+ {
+ *add_child.tail = *pl;
+ *pl = add_child.head;
+ }
+
+ return os;
+}
+
+static bfd_boolean
+gld_${EMULATION_NAME}_open_dynamic_archive
+ (const char *arch ATTRIBUTE_UNUSED,
+ search_dirs_type *search,
+ lang_input_statement_type *entry)
+{
+ static const struct
+ {
+ const char * format;
+ bfd_boolean use_prefix;
+ }
+ libname_fmt [] =
+ {
+ /* Preferred explicit import library for dll's. */
+ { "lib%s.dll.a", FALSE },
+ /* Alternate explicit import library for dll's. */
+ { "%s.dll.a", FALSE },
+ /* "libfoo.a" could be either an import lib or a static lib.
+ For backwards compatibility, libfoo.a needs to precede
+ libfoo.dll and foo.dll in the search. */
+ { "lib%s.a", FALSE },
+ /* The 'native' spelling of an import lib name is "foo.lib". */
+ { "%s.lib", FALSE },
+#ifdef DLL_SUPPORT
+ /* Try "<prefix>foo.dll" (preferred dll name, if specified). */
+ { "%s%s.dll", TRUE },
+#endif
+ /* Try "libfoo.dll" (default preferred dll name). */
+ { "lib%s.dll", FALSE },
+ /* Finally try 'native' dll name "foo.dll". */
+ { "%s.dll", FALSE },
+ /* Note: If adding more formats to this table, make sure to check to
+ see if their length is longer than libname_fmt[0].format, and if
+ so, update the call to xmalloc() below. */
+ { NULL, FALSE }
+ };
+ static unsigned int format_max_len = 0;
+ const char * filename;
+ char * full_string;
+ char * base_string;
+ unsigned int i;
+
+
+ if (! entry->is_archive)
+ return FALSE;
+
+ filename = entry->filename;
+
+ if (format_max_len == 0)
+ /* We need to allow space in the memory that we are going to allocate
+ for the characters in the format string. Since the format array is
+ static we only need to calculate this information once. In theory
+ this value could also be computed statically, but this introduces
+ the possibility for a discrepancy and hence a possible memory
+ corruption. The lengths we compute here will be too long because
+ they will include any formating characters (%s) in the strings, but
+ this will not matter. */
+ for (i = 0; libname_fmt[i].format; i++)
+ if (format_max_len < strlen (libname_fmt[i].format))
+ format_max_len = strlen (libname_fmt[i].format);
+
+ full_string = xmalloc (strlen (search->name)
+ + strlen (filename)
+ + format_max_len
+#ifdef DLL_SUPPORT
+ + (pe_dll_search_prefix
+ ? strlen (pe_dll_search_prefix) : 0)
+#endif
+ /* Allow for the terminating NUL and for the path
+ separator character that is inserted between
+ search->name and the start of the format string. */
+ + 2);
+
+ sprintf (full_string, "%s/", search->name);
+ base_string = full_string + strlen (full_string);
+
+ for (i = 0; libname_fmt[i].format; i++)
+ {
+#ifdef DLL_SUPPORT
+ if (libname_fmt[i].use_prefix)
+ {
+ if (!pe_dll_search_prefix)
+ continue;
+ sprintf (base_string, libname_fmt[i].format, pe_dll_search_prefix, filename);
+ }
+ else
+#endif
+ sprintf (base_string, libname_fmt[i].format, filename);
+
+ if (ldfile_try_open_bfd (full_string, entry))
+ break;
+ }
+
+ if (!libname_fmt[i].format)
+ {
+ free (full_string);
+ return FALSE;
+ }
+
+ entry->filename = full_string;
+
+ return TRUE;
+}
+
+static int
+gld_${EMULATION_NAME}_find_potential_libraries
+ (char *name, lang_input_statement_type *entry)
+{
+ return ldfile_open_file_search (name, entry, "", ".lib");
+}
+
+static char *
+gld_${EMULATION_NAME}_get_script (int *isfile)
+EOF
+# Scripts compiled in.
+# sed commands to quote an ld script as a C string.
+sc="-f stringify.sed"
+
+fragment <<EOF
+{
+ *isfile = 0;
+
+ if (link_info.relocatable && config.build_constructors)
+ return
+EOF
+sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c
+echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c
+echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c
+echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c
+if test -n "$GENERATE_AUTO_IMPORT_SCRIPT" ; then
+echo ' ; else if (link_info.pei386_auto_import == 1 && (MERGE_RDATA_V2 || link_info.pei386_runtime_pseudo_reloc != 2)) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xa >> e${EMULATION_NAME}.c
+fi
+echo ' ; else return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
+echo '; }' >> e${EMULATION_NAME}.c
+
+fragment <<EOF
+
+
+struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
+{
+ gld_${EMULATION_NAME}_before_parse,
+ syslib_default,
+ hll_default,
+ gld_${EMULATION_NAME}_after_parse,
+ gld_${EMULATION_NAME}_after_open,
+ after_allocation_default,
+ set_output_arch_default,
+ ldemul_default_target,
+ gld_${EMULATION_NAME}_before_allocation,
+ gld_${EMULATION_NAME}_get_script,
+ "${EMULATION_NAME}",
+ "${OUTPUT_FORMAT}",
+ gld_${EMULATION_NAME}_finish,
+ NULL, /* Create output section statements. */
+ gld_${EMULATION_NAME}_open_dynamic_archive,
+ gld_${EMULATION_NAME}_place_orphan,
+ gld_${EMULATION_NAME}_set_symbols,
+ NULL, /* parse_args */
+ gld${EMULATION_NAME}_add_options,
+ gld${EMULATION_NAME}_handle_option,
+ gld_${EMULATION_NAME}_unrecognized_file,
+ gld_${EMULATION_NAME}_list_options,
+ gld_${EMULATION_NAME}_recognized_file,
+ gld_${EMULATION_NAME}_find_potential_libraries,
+ NULL /* new_vers_pattern. */
+};
+EOF
diff --git a/binutils-2.21/ld/emultempl/pep.em b/binutils-2.21/ld/emultempl/pep.em
new file mode 100644
index 0000000..39daa07
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/pep.em
@@ -0,0 +1,1955 @@
+# This shell script emits a C file. -*- C -*-
+# It does some substitutions.
+if [ -z "$MACHINE" ]; then
+ OUTPUT_ARCH=${ARCH}
+else
+ OUTPUT_ARCH=${ARCH}:${MACHINE}
+fi
+rm -f e${EMULATION_NAME}.c
+(echo;echo;echo;echo;echo)>e${EMULATION_NAME}.c # there, now line numbers match ;-)
+fragment <<EOF
+/* Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+ Written by Kai Tietz, OneVision Software GmbH&CoKg.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+
+/* For WINDOWS_XP64 and higher */
+/* Based on pe.em, but modified for 64 bit support. */
+
+#define TARGET_IS_${EMULATION_NAME}
+
+#define COFF_IMAGE_WITH_PE
+#define COFF_WITH_PE
+#define COFF_WITH_pex64
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+#include "getopt.h"
+#include "libiberty.h"
+#include "ld.h"
+#include "ldmain.h"
+#include "ldexp.h"
+#include "ldlang.h"
+#include "ldfile.h"
+#include "ldemul.h"
+#include <ldgram.h>
+#include "ldlex.h"
+#include "ldmisc.h"
+#include "ldctor.h"
+#include "coff/internal.h"
+
+/* FIXME: See bfd/peXXigen.c for why we include an architecture specific
+ header in generic PE code. */
+#include "coff/x86_64.h"
+#include "coff/pe.h"
+
+/* FIXME: This is a BFD internal header file, and we should not be
+ using it here. */
+#include "../bfd/libcoff.h"
+
+#undef AOUTSZ
+#define AOUTSZ PEPAOUTSZ
+#define PEAOUTHDR PEPAOUTHDR
+
+#include "deffile.h"
+#include "pep-dll.h"
+#include "safe-ctype.h"
+
+/* Permit the emulation parameters to override the default section
+ alignment by setting OVERRIDE_SECTION_ALIGNMENT. FIXME: This makes
+ it seem that include/coff/internal.h should not define
+ PE_DEF_SECTION_ALIGNMENT. */
+#if PE_DEF_SECTION_ALIGNMENT != ${OVERRIDE_SECTION_ALIGNMENT:-PE_DEF_SECTION_ALIGNMENT}
+#undef PE_DEF_SECTION_ALIGNMENT
+#define PE_DEF_SECTION_ALIGNMENT ${OVERRIDE_SECTION_ALIGNMENT}
+#endif
+
+#ifdef TARGET_IS_i386pep
+#define DLL_SUPPORT
+#endif
+
+#if defined(TARGET_IS_i386pep) || ! defined(DLL_SUPPORT)
+#define PE_DEF_SUBSYSTEM 3
+#else
+#undef NT_EXE_IMAGE_BASE
+#define NT_EXE_IMAGE_BASE 0x00010000
+#undef PE_DEF_SECTION_ALIGNMENT
+#define PE_DEF_SUBSYSTEM 2
+#undef PE_DEF_FILE_ALIGNMENT
+#define PE_DEF_FILE_ALIGNMENT 0x00000200
+#define PE_DEF_SECTION_ALIGNMENT 0x00000400
+#endif
+
+static struct internal_extra_pe_aouthdr pep;
+static int dll;
+static int pep_subsystem = ${SUBSYSTEM};
+static flagword real_flags = IMAGE_FILE_LARGE_ADDRESS_AWARE;
+static int support_old_code = 0;
+static lang_assignment_statement_type *image_base_statement = 0;
+static unsigned short pe_dll_characteristics = 0;
+
+#ifdef DLL_SUPPORT
+static int pep_enable_stdcall_fixup = 1; /* 0=disable 1=enable (default). */
+static char * pep_out_def_filename = NULL;
+static char * pep_implib_filename = NULL;
+static int pep_enable_auto_image_base = 0;
+static char * pep_dll_search_prefix = NULL;
+#endif
+
+extern const char *output_filename;
+
+static int is_underscoring (void)
+{
+ int u = 0;
+ if (pep_leading_underscore != -1)
+ return pep_leading_underscore;
+ if (!bfd_get_target_info ("${OUTPUT_FORMAT}", NULL, NULL, &u, NULL))
+ bfd_get_target_info ("${RELOCATEABLE_OUTPUT_FORMAT}", NULL, NULL, &u, NULL);
+
+ if (u == -1)
+ abort ();
+ pep_leading_underscore = (u != 0 ? 1 : 0);
+ return pep_leading_underscore;
+}
+
+
+static void
+gld_${EMULATION_NAME}_before_parse (void)
+{
+ is_underscoring ();
+ ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
+ output_filename = "${EXECUTABLE_NAME:-a.exe}";
+#ifdef DLL_SUPPORT
+ config.dynamic_link = TRUE;
+ config.has_shared = 1;
+ link_info.pei386_auto_import = 1;
+ link_info.pei386_runtime_pseudo_reloc = 2; /* Use by default version 2. */
+#endif
+}
+
+/* PE format extra command line options. */
+
+/* Used for setting flags in the PE header. */
+enum options
+{
+ OPTION_BASE_FILE = 300 + 1,
+ OPTION_DLL,
+ OPTION_FILE_ALIGNMENT,
+ OPTION_IMAGE_BASE,
+ OPTION_MAJOR_IMAGE_VERSION,
+ OPTION_MAJOR_OS_VERSION,
+ OPTION_MAJOR_SUBSYSTEM_VERSION,
+ OPTION_MINOR_IMAGE_VERSION,
+ OPTION_MINOR_OS_VERSION,
+ OPTION_MINOR_SUBSYSTEM_VERSION,
+ OPTION_SECTION_ALIGNMENT,
+ OPTION_STACK,
+ OPTION_SUBSYSTEM,
+ OPTION_HEAP,
+ OPTION_SUPPORT_OLD_CODE,
+ OPTION_OUT_DEF,
+ OPTION_EXPORT_ALL,
+ OPTION_EXCLUDE_SYMBOLS,
+ OPTION_EXCLUDE_ALL_SYMBOLS,
+ OPTION_KILL_ATS,
+ OPTION_STDCALL_ALIASES,
+ OPTION_ENABLE_STDCALL_FIXUP,
+ OPTION_DISABLE_STDCALL_FIXUP,
+ OPTION_IMPLIB_FILENAME,
+ OPTION_WARN_DUPLICATE_EXPORTS,
+ OPTION_IMP_COMPAT,
+ OPTION_ENABLE_AUTO_IMAGE_BASE,
+ OPTION_DISABLE_AUTO_IMAGE_BASE,
+ OPTION_DLL_SEARCH_PREFIX,
+ OPTION_NO_DEFAULT_EXCLUDES,
+ OPTION_DLL_ENABLE_AUTO_IMPORT,
+ OPTION_DLL_DISABLE_AUTO_IMPORT,
+ OPTION_ENABLE_EXTRA_PE_DEBUG,
+ OPTION_EXCLUDE_LIBS,
+ OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC,
+ OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC,
+ OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V2,
+ OPTION_EXCLUDE_MODULES_FOR_IMPLIB,
+ OPTION_USE_NUL_PREFIXED_IMPORT_TABLES,
+ OPTION_NO_LEADING_UNDERSCORE,
+ OPTION_LEADING_UNDERSCORE,
+ OPTION_ENABLE_LONG_SECTION_NAMES,
+ OPTION_DISABLE_LONG_SECTION_NAMES,
+ OPTION_DYNAMIC_BASE,
+ OPTION_FORCE_INTEGRITY,
+ OPTION_NX_COMPAT,
+ OPTION_NO_ISOLATION,
+ OPTION_NO_SEH,
+ OPTION_NO_BIND,
+ OPTION_WDM_DRIVER,
+ OPTION_TERMINAL_SERVER_AWARE
+};
+
+static void
+gld${EMULATION_NAME}_add_options
+ (int ns ATTRIBUTE_UNUSED,
+ char **shortopts ATTRIBUTE_UNUSED,
+ int nl,
+ struct option **longopts,
+ int nrl ATTRIBUTE_UNUSED,
+ struct option **really_longopts ATTRIBUTE_UNUSED)
+{
+ static const struct option xtra_long[] =
+ {
+ /* PE options */
+ {"base-file", required_argument, NULL, OPTION_BASE_FILE},
+ {"dll", no_argument, NULL, OPTION_DLL},
+ {"file-alignment", required_argument, NULL, OPTION_FILE_ALIGNMENT},
+ {"heap", required_argument, NULL, OPTION_HEAP},
+ {"image-base", required_argument, NULL, OPTION_IMAGE_BASE},
+ {"major-image-version", required_argument, NULL, OPTION_MAJOR_IMAGE_VERSION},
+ {"major-os-version", required_argument, NULL, OPTION_MAJOR_OS_VERSION},
+ {"major-subsystem-version", required_argument, NULL, OPTION_MAJOR_SUBSYSTEM_VERSION},
+ {"minor-image-version", required_argument, NULL, OPTION_MINOR_IMAGE_VERSION},
+ {"minor-os-version", required_argument, NULL, OPTION_MINOR_OS_VERSION},
+ {"minor-subsystem-version", required_argument, NULL, OPTION_MINOR_SUBSYSTEM_VERSION},
+ {"section-alignment", required_argument, NULL, OPTION_SECTION_ALIGNMENT},
+ {"stack", required_argument, NULL, OPTION_STACK},
+ {"subsystem", required_argument, NULL, OPTION_SUBSYSTEM},
+ {"support-old-code", no_argument, NULL, OPTION_SUPPORT_OLD_CODE},
+ {"use-nul-prefixed-import-tables", no_argument, NULL,
+ OPTION_USE_NUL_PREFIXED_IMPORT_TABLES},
+ {"no-leading-underscore", no_argument, NULL, OPTION_NO_LEADING_UNDERSCORE},
+ {"leading-underscore", no_argument, NULL, OPTION_LEADING_UNDERSCORE},
+#ifdef DLL_SUPPORT
+ /* getopt allows abbreviations, so we do this to stop it
+ from treating -o as an abbreviation for this option. */
+ {"output-def", required_argument, NULL, OPTION_OUT_DEF},
+ {"output-def", required_argument, NULL, OPTION_OUT_DEF},
+ {"export-all-symbols", no_argument, NULL, OPTION_EXPORT_ALL},
+ {"exclude-symbols", required_argument, NULL, OPTION_EXCLUDE_SYMBOLS},
+ {"exclude-all-symbols", no_argument, NULL, OPTION_EXCLUDE_ALL_SYMBOLS},
+ {"exclude-libs", required_argument, NULL, OPTION_EXCLUDE_LIBS},
+ {"exclude-modules-for-implib", required_argument, NULL, OPTION_EXCLUDE_MODULES_FOR_IMPLIB},
+ {"kill-at", no_argument, NULL, OPTION_KILL_ATS},
+ {"add-stdcall-alias", no_argument, NULL, OPTION_STDCALL_ALIASES},
+ {"enable-stdcall-fixup", no_argument, NULL, OPTION_ENABLE_STDCALL_FIXUP},
+ {"disable-stdcall-fixup", no_argument, NULL, OPTION_DISABLE_STDCALL_FIXUP},
+ {"out-implib", required_argument, NULL, OPTION_IMPLIB_FILENAME},
+ {"warn-duplicate-exports", no_argument, NULL, OPTION_WARN_DUPLICATE_EXPORTS},
+ /* getopt() allows abbreviations, so we do this to stop it from
+ treating -c as an abbreviation for these --compat-implib. */
+ {"compat-implib", no_argument, NULL, OPTION_IMP_COMPAT},
+ {"compat-implib", no_argument, NULL, OPTION_IMP_COMPAT},
+ {"enable-auto-image-base", no_argument, NULL, OPTION_ENABLE_AUTO_IMAGE_BASE},
+ {"disable-auto-image-base", no_argument, NULL, OPTION_DISABLE_AUTO_IMAGE_BASE},
+ {"dll-search-prefix", required_argument, NULL, OPTION_DLL_SEARCH_PREFIX},
+ {"no-default-excludes", no_argument, NULL, OPTION_NO_DEFAULT_EXCLUDES},
+ {"enable-auto-import", no_argument, NULL, OPTION_DLL_ENABLE_AUTO_IMPORT},
+ {"disable-auto-import", no_argument, NULL, OPTION_DLL_DISABLE_AUTO_IMPORT},
+ {"enable-extra-pep-debug", no_argument, NULL, OPTION_ENABLE_EXTRA_PE_DEBUG},
+ {"enable-runtime-pseudo-reloc", no_argument, NULL, OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC},
+ {"disable-runtime-pseudo-reloc", no_argument, NULL, OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC},
+ {"enable-runtime-pseudo-reloc-v2", no_argument, NULL, OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V2},
+#endif
+ {"enable-long-section-names", no_argument, NULL, OPTION_ENABLE_LONG_SECTION_NAMES},
+ {"disable-long-section-names", no_argument, NULL, OPTION_DISABLE_LONG_SECTION_NAMES},
+ {"dynamicbase",no_argument, NULL, OPTION_DYNAMIC_BASE},
+ {"forceinteg", no_argument, NULL, OPTION_FORCE_INTEGRITY},
+ {"nxcompat", no_argument, NULL, OPTION_NX_COMPAT},
+ {"no-isolation", no_argument, NULL, OPTION_NO_ISOLATION},
+ {"no-seh", no_argument, NULL, OPTION_NO_SEH},
+ {"no-bind", no_argument, NULL, OPTION_NO_BIND},
+ {"wdmdriver", no_argument, NULL, OPTION_WDM_DRIVER},
+ {"tsaware", no_argument, NULL, OPTION_TERMINAL_SERVER_AWARE},
+ {NULL, no_argument, NULL, 0}
+ };
+
+ *longopts
+ = xrealloc (*longopts, nl * sizeof (struct option) + sizeof (xtra_long));
+ memcpy (*longopts + nl, &xtra_long, sizeof (xtra_long));
+}
+
+/* PE/WIN32; added routines to get the subsystem type, heap and/or stack
+ parameters which may be input from the command line. */
+
+typedef struct
+{
+ void *ptr;
+ int size;
+ bfd_vma value;
+ char *symbol;
+ int inited;
+ /* FALSE for an assembly level symbol and TRUE for a C visible symbol.
+ C visible symbols can be prefixed by underscore dependent on target's
+ settings. */
+ bfd_boolean is_c_symbol;
+} definfo;
+
+#define GET_INIT_SYMBOL_NAME(IDX) \
+ (init[(IDX)].symbol \
+ + ((init[(IDX)].is_c_symbol == FALSE || (is_underscoring () == 1)) ? 0 : 1))
+
+/* Decorates the C visible symbol by underscore, if target requires. */
+#define U(CSTR) \
+ ((is_underscoring () == 0) ? CSTR : "_" CSTR)
+
+/* Get size of constant string for a possible underscore prefixed
+ C visible symbol. */
+#define U_SIZE(CSTR) \
+ (sizeof (CSTR) + (is_underscoring () == 0 ? 0 : 1))
+
+#define D(field,symbol,def,usc) {&pep.field,sizeof(pep.field), def, symbol,0, usc}
+
+static definfo init[] =
+{
+ /* imagebase must be first */
+#define IMAGEBASEOFF 0
+ D(ImageBase,"__image_base__", NT_EXE_IMAGE_BASE, FALSE),
+#define DLLOFF 1
+ {&dll, sizeof(dll), 0, "__dll__", 0, FALSE},
+#define MSIMAGEBASEOFF 2
+ D(ImageBase, "___ImageBase", NT_EXE_IMAGE_BASE, TRUE),
+ D(SectionAlignment,"__section_alignment__", PE_DEF_SECTION_ALIGNMENT, FALSE),
+ D(FileAlignment,"__file_alignment__", PE_DEF_FILE_ALIGNMENT, FALSE),
+ D(MajorOperatingSystemVersion,"__major_os_version__", 4, FALSE),
+ D(MinorOperatingSystemVersion,"__minor_os_version__", 0, FALSE),
+ D(MajorImageVersion,"__major_image_version__", 0, FALSE),
+ D(MinorImageVersion,"__minor_image_version__", 0, FALSE),
+ D(MajorSubsystemVersion,"__major_subsystem_version__", 5, FALSE),
+ D(MinorSubsystemVersion,"__minor_subsystem_version__", 2, FALSE),
+ D(Subsystem,"__subsystem__", ${SUBSYSTEM}, FALSE),
+ D(SizeOfStackReserve,"__size_of_stack_reserve__", 0x200000, FALSE),
+ D(SizeOfStackCommit,"__size_of_stack_commit__", 0x1000, FALSE),
+ D(SizeOfHeapReserve,"__size_of_heap_reserve__", 0x100000, FALSE),
+ D(SizeOfHeapCommit,"__size_of_heap_commit__", 0x1000, FALSE),
+ D(LoaderFlags,"__loader_flags__", 0x0, FALSE),
+ D(DllCharacteristics, "__dll_characteristics__", 0x0, FALSE),
+ { NULL, 0, 0, NULL, 0, FALSE}
+};
+
+
+static void
+gld_${EMULATION_NAME}_list_options (FILE *file)
+{
+ fprintf (file, _(" --base_file <basefile> Generate a base file for relocatable DLLs\n"));
+ fprintf (file, _(" --dll Set image base to the default for DLLs\n"));
+ fprintf (file, _(" --file-alignment <size> Set file alignment\n"));
+ fprintf (file, _(" --heap <size> Set initial size of the heap\n"));
+ fprintf (file, _(" --image-base <address> Set start address of the executable\n"));
+ fprintf (file, _(" --major-image-version <number> Set version number of the executable\n"));
+ fprintf (file, _(" --major-os-version <number> Set minimum required OS version\n"));
+ fprintf (file, _(" --major-subsystem-version <number> Set minimum required OS subsystem version\n"));
+ fprintf (file, _(" --minor-image-version <number> Set revision number of the executable\n"));
+ fprintf (file, _(" --minor-os-version <number> Set minimum required OS revision\n"));
+ fprintf (file, _(" --minor-subsystem-version <number> Set minimum required OS subsystem revision\n"));
+ fprintf (file, _(" --section-alignment <size> Set section alignment\n"));
+ fprintf (file, _(" --stack <size> Set size of the initial stack\n"));
+ fprintf (file, _(" --subsystem <name>[:<version>] Set required OS subsystem [& version]\n"));
+ fprintf (file, _(" --support-old-code Support interworking with old code\n"));
+ fprintf (file, _(" --[no-]leading-underscore Set explicit symbol underscore prefix mode\n"));
+#ifdef DLL_SUPPORT
+ fprintf (file, _(" --add-stdcall-alias Export symbols with and without @nn\n"));
+ fprintf (file, _(" --disable-stdcall-fixup Don't link _sym to _sym@nn\n"));
+ fprintf (file, _(" --enable-stdcall-fixup Link _sym to _sym@nn without warnings\n"));
+ fprintf (file, _(" --exclude-symbols sym,sym,... Exclude symbols from automatic export\n"));
+ fprintf (file, _(" --exclude-all-symbols Exclude all symbols from automatic export\n"));
+ fprintf (file, _(" --exclude-libs lib,lib,... Exclude libraries from automatic export\n"));
+ fprintf (file, _(" --exclude-modules-for-implib mod,mod,...\n"));
+ fprintf (file, _(" Exclude objects, archive members from auto\n"));
+ fprintf (file, _(" export, place into import library instead.\n"));
+ fprintf (file, _(" --export-all-symbols Automatically export all globals to DLL\n"));
+ fprintf (file, _(" --kill-at Remove @nn from exported symbols\n"));
+ fprintf (file, _(" --out-implib <file> Generate import library\n"));
+ fprintf (file, _(" --output-def <file> Generate a .DEF file for the built DLL\n"));
+ fprintf (file, _(" --warn-duplicate-exports Warn about duplicate exports.\n"));
+ fprintf (file, _(" --compat-implib Create backward compatible import libs;\n\
+ create __imp_<SYMBOL> as well.\n"));
+ fprintf (file, _(" --enable-auto-image-base Automatically choose image base for DLLs\n\
+ unless user specifies one\n"));
+ fprintf (file, _(" --disable-auto-image-base Do not auto-choose image base. (default)\n"));
+ fprintf (file, _(" --dll-search-prefix=<string> When linking dynamically to a dll without\n\
+ an importlib, use <string><basename>.dll\n\
+ in preference to lib<basename>.dll \n"));
+ fprintf (file, _(" --enable-auto-import Do sophistcated linking of _sym to\n\
+ __imp_sym for DATA references\n"));
+ fprintf (file, _(" --disable-auto-import Do not auto-import DATA items from DLLs\n"));
+ fprintf (file, _(" --enable-runtime-pseudo-reloc Work around auto-import limitations by\n\
+ adding pseudo-relocations resolved at\n\
+ runtime.\n"));
+ fprintf (file, _(" --disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations for\n\
+ auto-imported DATA.\n"));
+ fprintf (file, _(" --enable-extra-pep-debug Enable verbose debug output when building\n\
+ or linking to DLLs (esp. auto-import)\n"));
+ fprintf (file, _(" --enable-long-section-names Use long COFF section names even in\n\
+ executable image files\n"));
+ fprintf (file, _(" --disable-long-section-names Never use long COFF section names, even\n\
+ in object files\n"));
+ fprintf (file, _(" --dynamicbase Image base address may be relocated using\n\
+ address space layout randomization (ASLR)\n"));
+ fprintf (file, _(" --forceinteg Code integrity checks are enforced\n"));
+ fprintf (file, _(" --nxcompat Image is compatible with data execution prevention\n"));
+ fprintf (file, _(" --no-isolation Image understands isolation but do not isolate the image\n"));
+ fprintf (file, _(" --no-seh Image does not use SEH. No SE handler may\n\
+ be called in this image\n"));
+ fprintf (file, _(" --no-bind Do not bind this image\n"));
+ fprintf (file, _(" --wdmdriver Driver uses the WDM model\n"));
+ fprintf (file, _(" --tsaware Image is Terminal Server aware\n"));
+#endif
+}
+
+
+static void
+set_pep_name (char *name, bfd_vma val)
+{
+ int i;
+ is_underscoring ();
+ /* Find the name and set it. */
+ for (i = 0; init[i].ptr; i++)
+ {
+ if (strcmp (name, GET_INIT_SYMBOL_NAME (i)) == 0)
+ {
+ init[i].value = val;
+ init[i].inited = 1;
+ if (strcmp (name,"__image_base__") == 0)
+ set_pep_name (U ("__ImageBase"), val);
+ return;
+ }
+ }
+ abort ();
+}
+
+static void
+set_entry_point (void)
+{
+ const char *entry;
+ const char *initial_symbol_char;
+ int i;
+
+ static const struct
+ {
+ const int value;
+ const char *entry;
+ }
+ v[] =
+ {
+ { 1, "NtProcessStartup" },
+ { 2, "WinMainCRTStartup" },
+ { 3, "mainCRTStartup" },
+ { 7, "__PosixProcessStartup" },
+ { 9, "WinMainCRTStartup" },
+ {14, "mainCRTStartup" },
+ { 0, NULL }
+ };
+
+ /* Entry point name for arbitrary subsystem numbers. */
+ static const char default_entry[] = "mainCRTStartup";
+
+ if (link_info.shared || dll)
+ {
+ entry = "DllMainCRTStartup";
+ }
+ else
+ {
+ for (i = 0; v[i].entry; i++)
+ if (v[i].value == pep_subsystem)
+ break;
+
+ /* If no match, use the default. */
+ if (v[i].entry != NULL)
+ entry = v[i].entry;
+ else
+ entry = default_entry;
+ }
+
+ /* Now we check target's default for getting proper symbol_char. */
+ initial_symbol_char = (is_underscoring () != 0 ? "_" : "");
+
+ if (*initial_symbol_char != '\0')
+ {
+ char *alc_entry;
+
+ /* lang_default_entry expects its argument to be permanently
+ allocated, so we don't free this string. */
+ alc_entry = xmalloc (strlen (initial_symbol_char)
+ + strlen (entry)
+ + 1);
+ strcpy (alc_entry, initial_symbol_char);
+ strcat (alc_entry, entry);
+ entry = alc_entry;
+ }
+
+ lang_default_entry (entry);
+}
+
+static void
+set_pep_subsystem (void)
+{
+ const char *sver;
+ char *end;
+ int len;
+ int i;
+ unsigned long temp_subsystem;
+ static const struct
+ {
+ const char *name;
+ const int value;
+ }
+ v[] =
+ {
+ { "native", 1 },
+ { "windows", 2 },
+ { "console", 3 },
+ { "posix", 7 },
+ { "wince", 9 },
+ { "xbox", 14 },
+ { NULL, 0 }
+ };
+
+ /* Check for the presence of a version number. */
+ sver = strchr (optarg, ':');
+ if (sver == NULL)
+ len = strlen (optarg);
+ else
+ {
+ len = sver - optarg;
+ set_pep_name ("__major_subsystem_version__",
+ strtoul (sver + 1, &end, 0));
+ if (*end == '.')
+ set_pep_name ("__minor_subsystem_version__",
+ strtoul (end + 1, &end, 0));
+ if (*end != '\0')
+ einfo (_("%P: warning: bad version number in -subsystem option\n"));
+ }
+
+ /* Check for numeric subsystem. */
+ temp_subsystem = strtoul (optarg, & end, 0);
+ if ((*end == ':' || *end == '\0') && (temp_subsystem < 65536))
+ {
+ /* Search list for a numeric match to use its entry point. */
+ for (i = 0; v[i].name; i++)
+ if (v[i].value == (int) temp_subsystem)
+ break;
+
+ /* Use this subsystem. */
+ pep_subsystem = (int) temp_subsystem;
+ }
+ else
+ {
+ /* Search for subsystem by name. */
+ for (i = 0; v[i].name; i++)
+ if (strncmp (optarg, v[i].name, len) == 0
+ && v[i].name[len] == '\0')
+ break;
+
+ if (v[i].name == NULL)
+ {
+ einfo (_("%P%F: invalid subsystem type %s\n"), optarg);
+ return;
+ }
+
+ pep_subsystem = v[i].value;
+ }
+
+ set_pep_name ("__subsystem__", pep_subsystem);
+
+ return;
+}
+
+
+static void
+set_pep_value (char *name)
+{
+ char *end;
+
+ set_pep_name (name, (bfd_vma) strtoull (optarg, &end, 0));
+
+ if (end == optarg)
+ einfo (_("%P%F: invalid hex number for PE parameter '%s'\n"), optarg);
+
+ optarg = end;
+}
+
+
+static void
+set_pep_stack_heap (char *resname, char *comname)
+{
+ set_pep_value (resname);
+
+ if (*optarg == ',')
+ {
+ optarg++;
+ set_pep_value (comname);
+ }
+ else if (*optarg)
+ einfo (_("%P%F: strange hex info for PE parameter '%s'\n"), optarg);
+}
+
+
+static bfd_boolean
+gld${EMULATION_NAME}_handle_option (int optc)
+{
+ is_underscoring ();
+ switch (optc)
+ {
+ default:
+ return FALSE;
+
+ case OPTION_BASE_FILE:
+ link_info.base_file = fopen (optarg, FOPEN_WB);
+ if (link_info.base_file == NULL)
+ {
+ /* xgettext:c-format */
+ fprintf (stderr, _("%s: Can't open base file %s\n"),
+ program_name, optarg);
+ xexit (1);
+ }
+ break;
+
+ /* PE options. */
+ case OPTION_HEAP:
+ set_pep_stack_heap ("__size_of_heap_reserve__", "__size_of_heap_commit__");
+ break;
+ case OPTION_STACK:
+ set_pep_stack_heap ("__size_of_stack_reserve__", "__size_of_stack_commit__");
+ break;
+ case OPTION_SUBSYSTEM:
+ set_pep_subsystem ();
+ break;
+ case OPTION_MAJOR_OS_VERSION:
+ set_pep_value ("__major_os_version__");
+ break;
+ case OPTION_MINOR_OS_VERSION:
+ set_pep_value ("__minor_os_version__");
+ break;
+ case OPTION_MAJOR_SUBSYSTEM_VERSION:
+ set_pep_value ("__major_subsystem_version__");
+ break;
+ case OPTION_MINOR_SUBSYSTEM_VERSION:
+ set_pep_value ("__minor_subsystem_version__");
+ break;
+ case OPTION_MAJOR_IMAGE_VERSION:
+ set_pep_value ("__major_image_version__");
+ break;
+ case OPTION_MINOR_IMAGE_VERSION:
+ set_pep_value ("__minor_image_version__");
+ break;
+ case OPTION_FILE_ALIGNMENT:
+ set_pep_value ("__file_alignment__");
+ break;
+ case OPTION_SECTION_ALIGNMENT:
+ set_pep_value ("__section_alignment__");
+ break;
+ case OPTION_DLL:
+ set_pep_name ("__dll__", 1);
+ break;
+ case OPTION_IMAGE_BASE:
+ set_pep_value ("__image_base__");
+ break;
+ case OPTION_SUPPORT_OLD_CODE:
+ support_old_code = 1;
+ break;
+ case OPTION_USE_NUL_PREFIXED_IMPORT_TABLES:
+ pep_use_nul_prefixed_import_tables = TRUE;
+ break;
+ case OPTION_NO_LEADING_UNDERSCORE:
+ pep_leading_underscore = 0;
+ break;
+ case OPTION_LEADING_UNDERSCORE:
+ pep_leading_underscore = 1;
+ break;
+#ifdef DLL_SUPPORT
+ case OPTION_OUT_DEF:
+ pep_out_def_filename = xstrdup (optarg);
+ break;
+ case OPTION_EXPORT_ALL:
+ pep_dll_export_everything = 1;
+ break;
+ case OPTION_EXCLUDE_SYMBOLS:
+ pep_dll_add_excludes (optarg, EXCLUDESYMS);
+ break;
+ case OPTION_EXCLUDE_ALL_SYMBOLS:
+ pep_dll_exclude_all_symbols = 1;
+ break;
+ case OPTION_EXCLUDE_LIBS:
+ pep_dll_add_excludes (optarg, EXCLUDELIBS);
+ break;
+ case OPTION_EXCLUDE_MODULES_FOR_IMPLIB:
+ pep_dll_add_excludes (optarg, EXCLUDEFORIMPLIB);
+ break;
+ case OPTION_KILL_ATS:
+ pep_dll_kill_ats = 1;
+ break;
+ case OPTION_STDCALL_ALIASES:
+ pep_dll_stdcall_aliases = 1;
+ break;
+ case OPTION_ENABLE_STDCALL_FIXUP:
+ pep_enable_stdcall_fixup = 1;
+ break;
+ case OPTION_DISABLE_STDCALL_FIXUP:
+ pep_enable_stdcall_fixup = 0;
+ break;
+ case OPTION_IMPLIB_FILENAME:
+ pep_implib_filename = xstrdup (optarg);
+ break;
+ case OPTION_WARN_DUPLICATE_EXPORTS:
+ pep_dll_warn_dup_exports = 1;
+ break;
+ case OPTION_IMP_COMPAT:
+ pep_dll_compat_implib = 1;
+ break;
+ case OPTION_ENABLE_AUTO_IMAGE_BASE:
+ pep_enable_auto_image_base = 1;
+ break;
+ case OPTION_DISABLE_AUTO_IMAGE_BASE:
+ pep_enable_auto_image_base = 0;
+ break;
+ case OPTION_DLL_SEARCH_PREFIX:
+ pep_dll_search_prefix = xstrdup (optarg);
+ break;
+ case OPTION_NO_DEFAULT_EXCLUDES:
+ pep_dll_do_default_excludes = 0;
+ break;
+ case OPTION_DLL_ENABLE_AUTO_IMPORT:
+ link_info.pei386_auto_import = 1;
+ break;
+ case OPTION_DLL_DISABLE_AUTO_IMPORT:
+ link_info.pei386_auto_import = 0;
+ break;
+ case OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC:
+ link_info.pei386_runtime_pseudo_reloc = 2;
+ break;
+ case OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC:
+ link_info.pei386_runtime_pseudo_reloc = 0;
+ break;
+ case OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V2:
+ link_info.pei386_runtime_pseudo_reloc = 2;
+ break;
+ case OPTION_ENABLE_EXTRA_PE_DEBUG:
+ pep_dll_extra_pe_debug = 1;
+ break;
+#endif
+ case OPTION_ENABLE_LONG_SECTION_NAMES:
+ pep_use_coff_long_section_names = 1;
+ break;
+ case OPTION_DISABLE_LONG_SECTION_NAMES:
+ pep_use_coff_long_section_names = 0;
+ break;
+ /* Get DLLCharacteristics bits */
+ case OPTION_DYNAMIC_BASE:
+ pe_dll_characteristics |= IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE;
+ break;
+ case OPTION_FORCE_INTEGRITY:
+ pe_dll_characteristics |= IMAGE_DLL_CHARACTERISTICS_FORCE_INTEGRITY;
+ break;
+ case OPTION_NX_COMPAT:
+ pe_dll_characteristics |= IMAGE_DLL_CHARACTERISTICS_NX_COMPAT;
+ break;
+ case OPTION_NO_ISOLATION:
+ pe_dll_characteristics |= IMAGE_DLLCHARACTERISTICS_NO_ISOLATION;
+ break;
+ case OPTION_NO_SEH:
+ pe_dll_characteristics |= IMAGE_DLLCHARACTERISTICS_NO_SEH;
+ break;
+ case OPTION_NO_BIND:
+ pe_dll_characteristics |= IMAGE_DLLCHARACTERISTICS_NO_BIND;
+ break;
+ case OPTION_WDM_DRIVER:
+ pe_dll_characteristics |= IMAGE_DLLCHARACTERISTICS_WDM_DRIVER;
+ break;
+ case OPTION_TERMINAL_SERVER_AWARE:
+ pe_dll_characteristics |= IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE;
+ break;
+ }
+
+ /* Set DLLCharacteristics bits */
+ set_pep_name ("__dll_characteristics__", pe_dll_characteristics);
+
+ return TRUE;
+}
+
+
+#ifdef DLL_SUPPORT
+static unsigned long
+strhash (const char *str)
+{
+ const unsigned char *s;
+ unsigned long hash;
+ unsigned int c;
+ unsigned int len;
+
+ hash = 0;
+ len = 0;
+ s = (const unsigned char *) str;
+ while ((c = *s++) != '\0')
+ {
+ hash += c + (c << 17);
+ hash ^= hash >> 2;
+ ++len;
+ }
+ hash += len + (len << 17);
+ hash ^= hash >> 2;
+
+ return hash;
+}
+
+/* Use the output file to create a image base for relocatable DLLs. */
+
+static bfd_vma
+compute_dll_image_base (const char *ofile)
+{
+ bfd_vma hash = (bfd_vma) strhash (ofile);
+ return 0x61300000 + ((hash << 16) & 0x0FFC0000);
+}
+#endif
+
+/* Assign values to the special symbols before the linker script is
+ read. */
+
+static void
+gld_${EMULATION_NAME}_set_symbols (void)
+{
+ /* Run through and invent symbols for all the
+ names and insert the defaults. */
+ int j;
+
+ is_underscoring ();
+
+ if (!init[IMAGEBASEOFF].inited)
+ {
+ if (link_info.relocatable)
+ init[IMAGEBASEOFF].value = 0;
+ else if (init[DLLOFF].value || (link_info.shared && !link_info.pie))
+ {
+#ifdef DLL_SUPPORT
+ init[IMAGEBASEOFF].value = (pep_enable_auto_image_base
+ ? compute_dll_image_base (output_filename)
+ : NT_DLL_IMAGE_BASE);
+#else
+ init[IMAGEBASEOFF].value = NT_DLL_IMAGE_BASE;
+#endif
+ }
+ else
+ init[IMAGEBASEOFF].value = NT_EXE_IMAGE_BASE;
+ init[MSIMAGEBASEOFF].value = init[IMAGEBASEOFF].value;
+ }
+
+ /* Don't do any symbol assignments if this is a relocatable link. */
+ if (link_info.relocatable)
+ return;
+
+ /* Glue the assignments into the abs section. */
+ push_stat_ptr (&abs_output_section->children);
+
+ for (j = 0; init[j].ptr; j++)
+ {
+ bfd_vma val = init[j].value;
+ lang_assignment_statement_type *rv;
+
+ rv = lang_add_assignment (exp_assop ('=', GET_INIT_SYMBOL_NAME (j),
+ exp_intop (val)));
+ if (init[j].size == sizeof (short))
+ *(short *) init[j].ptr = (short) val;
+ else if (init[j].size == sizeof (int))
+ *(int *) init[j].ptr = (int) val;
+ else if (init[j].size == sizeof (long))
+ *(long *) init[j].ptr = (long) val;
+ /* This might be a long long or other special type. */
+ else if (init[j].size == sizeof (bfd_vma))
+ *(bfd_vma *) init[j].ptr = val;
+ else abort ();
+ if (j == IMAGEBASEOFF)
+ image_base_statement = rv;
+ }
+ /* Restore the pointer. */
+ pop_stat_ptr ();
+
+ if (pep.FileAlignment > pep.SectionAlignment)
+ {
+ einfo (_("%P: warning, file alignment > section alignment.\n"));
+ }
+}
+
+/* This is called after the linker script and the command line options
+ have been read. */
+
+static void
+gld_${EMULATION_NAME}_after_parse (void)
+{
+ /* PR ld/6744: Warn the user if they have used an ELF-only
+ option hoping it will work on PE+. */
+ if (link_info.export_dynamic)
+ einfo (_("%P: warning: --export-dynamic is not supported for PE+ "
+ "targets, did you mean --export-all-symbols?\n"));
+
+ set_entry_point ();
+
+ after_parse_default ();
+}
+
+/* pep-dll.c directly accesses pep_data_import_dll,
+ so it must be defined outside of #ifdef DLL_SUPPORT.
+ Note - this variable is deliberately not initialised.
+ This allows it to be treated as a common varaible, and only
+ exist in one incarnation in a multiple target enabled linker. */
+char * pep_data_import_dll;
+
+#ifdef DLL_SUPPORT
+static struct bfd_link_hash_entry *pep_undef_found_sym;
+
+static bfd_boolean
+pep_undef_cdecl_match (struct bfd_link_hash_entry *h, void *inf)
+{
+ int sl;
+ char *string = inf;
+ const char *hs = h->root.string;
+
+ sl = strlen (string);
+ if (h->type == bfd_link_hash_defined
+ && ((*hs == '@' && *string == '_'
+ && strncmp (hs + 1, string + 1, sl - 1) == 0)
+ || strncmp (hs, string, sl) == 0)
+ && h->root.string[sl] == '@')
+ {
+ pep_undef_found_sym = h;
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static void
+pep_fixup_stdcalls (void)
+{
+ static int gave_warning_message = 0;
+ struct bfd_link_hash_entry *undef, *sym;
+
+ if (pep_dll_extra_pe_debug)
+ printf ("%s\n", __FUNCTION__);
+
+ for (undef = link_info.hash->undefs; undef; undef=undef->u.undef.next)
+ if (undef->type == bfd_link_hash_undefined)
+ {
+ char* at = strchr (undef->root.string, '@');
+ int lead_at = (*undef->root.string == '@');
+ if (lead_at)
+ at = strchr (undef->root.string + 1, '@');
+ if (at || lead_at)
+ {
+ /* The symbol is a stdcall symbol, so let's look for a
+ cdecl symbol with the same name and resolve to that. */
+ char *cname = xstrdup (undef->root.string);
+
+ if (lead_at)
+ *cname = '_';
+ at = strchr (cname, '@');
+ if (at)
+ *at = 0;
+ sym = bfd_link_hash_lookup (link_info.hash, cname, 0, 0, 1);
+
+ if (sym && sym->type == bfd_link_hash_defined)
+ {
+ undef->type = bfd_link_hash_defined;
+ undef->u.def.value = sym->u.def.value;
+ undef->u.def.section = sym->u.def.section;
+
+ if (pep_enable_stdcall_fixup == -1)
+ {
+ einfo (_("Warning: resolving %s by linking to %s\n"),
+ undef->root.string, cname);
+ if (! gave_warning_message)
+ {
+ gave_warning_message = 1;
+ einfo (_("Use --enable-stdcall-fixup to disable these warnings\n"));
+ einfo (_("Use --disable-stdcall-fixup to disable these fixups\n"));
+ }
+ }
+ }
+ }
+ else
+ {
+ /* The symbol is a cdecl symbol, so we look for stdcall
+ symbols - which means scanning the whole symbol table. */
+ pep_undef_found_sym = 0;
+ bfd_link_hash_traverse (link_info.hash, pep_undef_cdecl_match,
+ (char *) undef->root.string);
+ sym = pep_undef_found_sym;
+ if (sym)
+ {
+ undef->type = bfd_link_hash_defined;
+ undef->u.def.value = sym->u.def.value;
+ undef->u.def.section = sym->u.def.section;
+
+ if (pep_enable_stdcall_fixup == -1)
+ {
+ einfo (_("Warning: resolving %s by linking to %s\n"),
+ undef->root.string, sym->root.string);
+ if (! gave_warning_message)
+ {
+ gave_warning_message = 1;
+ einfo (_("Use --enable-stdcall-fixup to disable these warnings\n"));
+ einfo (_("Use --disable-stdcall-fixup to disable these fixups\n"));
+ }
+ }
+ }
+ }
+ }
+}
+
+static int
+make_import_fixup (arelent *rel, asection *s)
+{
+ struct bfd_symbol *sym = *rel->sym_ptr_ptr;
+ char addend[8];
+ bfd_vma _addend = 0;
+ int suc = 0;
+
+ if (pep_dll_extra_pe_debug)
+ printf ("arelent: %s@%#lx: add=%li\n", sym->name,
+ (unsigned long) rel->address, (long) rel->addend);
+
+ memset (addend, 0, sizeof (addend));
+ switch ((rel->howto->bitsize))
+ {
+ case 8:
+ suc = bfd_get_section_contents (s->owner, s, addend, rel->address, 1);
+ if (suc && rel->howto->pc_relative)
+ _addend = (bfd_vma) ((bfd_signed_vma) ((char) bfd_get_8 (s->owner, addend)));
+ else if (suc)
+ _addend = ((bfd_vma) bfd_get_8 (s->owner, addend)) & 0xff;
+ break;
+ case 16:
+ suc = bfd_get_section_contents (s->owner, s, addend, rel->address, 2);
+ if (suc && rel->howto->pc_relative)
+ _addend = (bfd_vma) ((bfd_signed_vma) ((short) bfd_get_16 (s->owner, addend)));
+ else if (suc)
+ _addend = ((bfd_vma) bfd_get_16 (s->owner, addend)) & 0xffff;
+ break;
+ case 32:
+ suc = bfd_get_section_contents (s->owner, s, addend, rel->address, 4);
+ if (suc && rel->howto->pc_relative)
+ _addend = (bfd_vma) ((bfd_signed_vma) ((int) bfd_get_32 (s->owner, addend)));
+ else if (suc)
+ _addend = ((bfd_vma) bfd_get_32 (s->owner, addend)) & 0xffffffff;
+ break;
+ case 64:
+ suc = bfd_get_section_contents (s->owner, s, addend, rel->address, 8);
+ if (suc)
+ _addend = ((bfd_vma) bfd_get_64 (s->owner, addend));
+ break;
+ }
+ if (! suc)
+ einfo (_("%C: Cannot get section contents - auto-import exception\n"),
+ s->owner, s, rel->address);
+
+ if (pep_dll_extra_pe_debug)
+ {
+ printf ("import of 0x%lx(0x%lx) sec_addr=0x%lx", (long) _addend, (long) rel->addend, (long) rel->address);
+ if (rel->howto->pc_relative) printf (" pcrel");
+ printf (" %d bit rel.\n",(int) rel->howto->bitsize);
+ }
+ pep_create_import_fixup (rel, s, _addend);
+
+ return 1;
+}
+
+static void
+pep_find_data_imports (void)
+{
+ struct bfd_link_hash_entry *undef, *sym;
+
+ if (link_info.pei386_auto_import == 0)
+ return;
+
+ for (undef = link_info.hash->undefs; undef; undef=undef->u.undef.next)
+ {
+ if (undef->type == bfd_link_hash_undefined)
+ {
+ /* C++ symbols are *long*. */
+ char buf[4096];
+
+ if (pep_dll_extra_pe_debug)
+ printf ("%s:%s\n", __FUNCTION__, undef->root.string);
+
+ sprintf (buf, "__imp_%s", undef->root.string);
+
+ sym = bfd_link_hash_lookup (link_info.hash, buf, 0, 0, 1);
+
+ if (sym && sym->type == bfd_link_hash_defined)
+ {
+ bfd *b = sym->u.def.section->owner;
+ asymbol **symbols;
+ int nsyms, i;
+
+ if (!bfd_generic_link_read_symbols (b))
+ {
+ einfo (_("%B%F: could not read symbols: %E\n"), b);
+ return;
+ }
+
+ symbols = bfd_get_outsymbols (b);
+ nsyms = bfd_get_symcount (b);
+
+ for (i = 0; i < nsyms; i++)
+ {
+ if (! CONST_STRNEQ (symbols[i]->name, U ("_head_")))
+ continue;
+
+ if (pep_dll_extra_pe_debug)
+ printf ("->%s\n", symbols[i]->name);
+
+ pep_data_import_dll = (char*) (symbols[i]->name +
+ U_SIZE ("_head_") - 1);
+ break;
+ }
+
+ pep_walk_relocs_of_symbol (&link_info, undef->root.string,
+ make_import_fixup);
+
+ /* Let's differentiate it somehow from defined. */
+ undef->type = bfd_link_hash_defweak;
+ /* We replace original name with __imp_ prefixed, this
+ 1) may trash memory 2) leads to duplicate symbol generation.
+ Still, IMHO it's better than having name poluted. */
+ undef->root.string = sym->root.string;
+ undef->u.def.value = sym->u.def.value;
+ undef->u.def.section = sym->u.def.section;
+ }
+ }
+ }
+}
+
+static bfd_boolean
+pr_sym (struct bfd_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
+{
+ if (pep_dll_extra_pe_debug)
+ printf ("+%s\n", h->string);
+
+ return TRUE;
+}
+#endif /* DLL_SUPPORT */
+
+static void
+debug_section_p (bfd *abfd ATTRIBUTE_UNUSED, asection *sect, void *obj)
+{
+ int *found = (int *) obj;
+ if (strncmp (".debug_", sect->name, sizeof (".debug_") - 1) == 0)
+ *found = 1;
+}
+
+static void
+gld_${EMULATION_NAME}_after_open (void)
+{
+ is_underscoring ();
+#ifdef DLL_SUPPORT
+ if (pep_dll_extra_pe_debug)
+ {
+ bfd *a;
+ struct bfd_link_hash_entry *sym;
+
+ printf ("%s()\n", __FUNCTION__);
+
+ for (sym = link_info.hash->undefs; sym; sym=sym->u.undef.next)
+ printf ("-%s\n", sym->root.string);
+ bfd_hash_traverse (&link_info.hash->table, pr_sym, NULL);
+
+ for (a = link_info.input_bfds; a; a = a->link_next)
+ printf ("*%s\n",a->filename);
+ }
+#endif
+
+ /* Pass the wacky PE command line options into the output bfd.
+ FIXME: This should be done via a function, rather than by
+ including an internal BFD header. */
+
+ if (coff_data (link_info.output_bfd) == NULL
+ || coff_data (link_info.output_bfd)->pe == 0)
+ einfo (_("%F%P: cannot perform PE operations on non PE output file '%B'.\n"),
+ link_info.output_bfd);
+
+ pe_data (link_info.output_bfd)->pe_opthdr = pep;
+ pe_data (link_info.output_bfd)->dll = init[DLLOFF].value;
+ pe_data (link_info.output_bfd)->real_flags |= real_flags;
+
+ /* At this point we must decide whether to use long section names
+ in the output or not. If the user hasn't explicitly specified
+ on the command line, we leave it to the default for the format
+ (object files yes, image files no), except if there is debug
+ information present; GDB relies on the long section names to
+ find it, so enable it in that case. */
+ if (pep_use_coff_long_section_names < 0 && link_info.strip == strip_none)
+ {
+ /* Iterate over all sections of all input BFDs, checking
+ for any that begin 'debug_' and are long names. */
+ LANG_FOR_EACH_INPUT_STATEMENT (is)
+ {
+ int found_debug = 0;
+ bfd_map_over_sections (is->the_bfd, debug_section_p, &found_debug);
+ if (found_debug)
+ {
+ pep_use_coff_long_section_names = 1;
+ break;
+ }
+ }
+ }
+
+ pep_output_file_set_long_section_names (link_info.output_bfd);
+
+#ifdef DLL_SUPPORT
+ if (pep_enable_stdcall_fixup) /* -1=warn or 1=disable */
+ pep_fixup_stdcalls ();
+
+ pep_process_import_defs (link_info.output_bfd, &link_info);
+
+ pep_find_data_imports ();
+
+ /* As possibly new symbols are added by imports, we rerun
+ stdcall/fastcall fixup here. */
+ if (pep_enable_stdcall_fixup) /* -1=warn or 1=disable */
+ pep_fixup_stdcalls ();
+
+#ifndef TARGET_IS_i386pep
+ if (link_info.shared)
+#else
+ if (!link_info.relocatable)
+#endif
+ pep_dll_build_sections (link_info.output_bfd, &link_info);
+
+#ifndef TARGET_IS_i386pep
+ else
+ pep_exe_build_sections (link_info.output_bfd, &link_info);
+#endif
+#endif /* DLL_SUPPORT */
+
+ {
+ /* This next chunk of code tries to detect the case where you have
+ two import libraries for the same DLL (specifically,
+ symbolically linking libm.a and libc.a in cygwin to
+ libcygwin.a). In those cases, it's possible for function
+ thunks from the second implib to be used but without the
+ head/tail objects, causing an improper import table. We detect
+ those cases and rename the "other" import libraries to match
+ the one the head/tail come from, so that the linker will sort
+ things nicely and produce a valid import table. */
+
+ LANG_FOR_EACH_INPUT_STATEMENT (is)
+ {
+ if (is->the_bfd->my_archive)
+ {
+ int idata2 = 0, reloc_count=0, is_imp = 0;
+ asection *sec;
+
+ /* See if this is an import library thunk. */
+ for (sec = is->the_bfd->sections; sec; sec = sec->next)
+ {
+ if (strcmp (sec->name, ".idata\$2") == 0)
+ idata2 = 1;
+ if (CONST_STRNEQ (sec->name, ".idata\$"))
+ is_imp = 1;
+ reloc_count += sec->reloc_count;
+ }
+
+ if (is_imp && !idata2 && reloc_count)
+ {
+ /* It is, look for the reference to head and see if it's
+ from our own library. */
+ for (sec = is->the_bfd->sections; sec; sec = sec->next)
+ {
+ int i;
+ long relsize;
+ asymbol **symbols;
+ arelent **relocs;
+ int nrelocs;
+
+ relsize = bfd_get_reloc_upper_bound (is->the_bfd, sec);
+ if (relsize < 1)
+ break;
+
+ if (!bfd_generic_link_read_symbols (is->the_bfd))
+ {
+ einfo (_("%B%F: could not read symbols: %E\n"),
+ is->the_bfd);
+ return;
+ }
+ symbols = bfd_get_outsymbols (is->the_bfd);
+
+ relocs = xmalloc ((size_t) relsize);
+ nrelocs = bfd_canonicalize_reloc (is->the_bfd, sec,
+ relocs, symbols);
+ if (nrelocs < 0)
+ {
+ free (relocs);
+ einfo ("%X%P: unable to process relocs: %E\n");
+ return;
+ }
+
+ for (i = 0; i < nrelocs; i++)
+ {
+ struct bfd_symbol *s;
+ struct bfd_link_hash_entry * blhe;
+ char *other_bfd_filename;
+ char *n;
+
+ s = (relocs[i]->sym_ptr_ptr)[0];
+
+ if (s->flags & BSF_LOCAL)
+ continue;
+
+ /* Thunk section with reloc to another bfd. */
+ blhe = bfd_link_hash_lookup (link_info.hash,
+ s->name,
+ FALSE, FALSE, TRUE);
+
+ if (blhe == NULL
+ || blhe->type != bfd_link_hash_defined)
+ continue;
+
+ other_bfd_filename
+ = blhe->u.def.section->owner->my_archive
+ ? bfd_get_filename (blhe->u.def.section->owner->my_archive)
+ : bfd_get_filename (blhe->u.def.section->owner);
+
+ if (strcmp (bfd_get_filename (is->the_bfd->my_archive),
+ other_bfd_filename) == 0)
+ continue;
+
+ /* Rename this implib to match the other one. */
+ n = xmalloc (strlen (other_bfd_filename) + 1);
+ strcpy (n, other_bfd_filename);
+ is->the_bfd->my_archive->filename = n;
+ }
+
+ free (relocs);
+ /* Note - we do not free the symbols,
+ they are now cached in the BFD. */
+ }
+ }
+ }
+ }
+ }
+
+ {
+ int is_ms_arch = 0;
+ bfd *cur_arch = 0;
+ lang_input_statement_type *is2;
+ lang_input_statement_type *is3;
+
+ /* Careful - this is a shell script. Watch those dollar signs! */
+ /* Microsoft import libraries have every member named the same,
+ and not in the right order for us to link them correctly. We
+ must detect these and rename the members so that they'll link
+ correctly. There are three types of objects: the head, the
+ thunks, and the sentinel(s). The head is easy; it's the one
+ with idata2. We assume that the sentinels won't have relocs,
+ and the thunks will. It's easier than checking the symbol
+ table for external references. */
+ LANG_FOR_EACH_INPUT_STATEMENT (is)
+ {
+ if (is->the_bfd->my_archive)
+ {
+ char *pnt;
+ bfd *arch = is->the_bfd->my_archive;
+
+ if (cur_arch != arch)
+ {
+ cur_arch = arch;
+ is_ms_arch = 1;
+
+ for (is3 = is;
+ is3 && is3->the_bfd->my_archive == arch;
+ is3 = (lang_input_statement_type *) is3->next)
+ {
+ /* A MS dynamic import library can also contain static
+ members, so look for the first element with a .dll
+ extension, and use that for the remainder of the
+ comparisons. */
+ pnt = strrchr (is3->the_bfd->filename, '.');
+ if (pnt != NULL && strcmp (pnt, ".dll") == 0)
+ break;
+ }
+
+ if (is3 == NULL)
+ is_ms_arch = 0;
+ else
+ {
+ /* OK, found one. Now look to see if the remaining
+ (dynamic import) members use the same name. */
+ for (is2 = is;
+ is2 && is2->the_bfd->my_archive == arch;
+ is2 = (lang_input_statement_type *) is2->next)
+ {
+ /* Skip static members, ie anything with a .obj
+ extension. */
+ pnt = strrchr (is2->the_bfd->filename, '.');
+ if (pnt != NULL && strcmp (pnt, ".obj") == 0)
+ continue;
+
+ if (strcmp (is3->the_bfd->filename,
+ is2->the_bfd->filename))
+ {
+ is_ms_arch = 0;
+ break;
+ }
+ }
+ }
+ }
+
+ /* This fragment might have come from an .obj file in a Microsoft
+ import, and not an actual import record. If this is the case,
+ then leave the filename alone. */
+ pnt = strrchr (is->the_bfd->filename, '.');
+
+ if (is_ms_arch && (strcmp (pnt, ".dll") == 0))
+ {
+ int idata2 = 0, reloc_count=0;
+ asection *sec;
+ char *new_name, seq;
+
+ for (sec = is->the_bfd->sections; sec; sec = sec->next)
+ {
+ if (strcmp (sec->name, ".idata\$2") == 0)
+ idata2 = 1;
+ reloc_count += sec->reloc_count;
+ }
+
+ if (idata2) /* .idata2 is the TOC */
+ seq = 'a';
+ else if (reloc_count > 0) /* thunks */
+ seq = 'b';
+ else /* sentinel */
+ seq = 'c';
+
+ new_name = xmalloc (strlen (is->the_bfd->filename) + 3);
+ sprintf (new_name, "%s.%c", is->the_bfd->filename, seq);
+ is->the_bfd->filename = new_name;
+
+ new_name = xmalloc (strlen (is->filename) + 3);
+ sprintf (new_name, "%s.%c", is->filename, seq);
+ is->filename = new_name;
+ }
+ }
+ }
+ }
+}
+
+static void
+gld_${EMULATION_NAME}_before_allocation (void)
+{
+ is_underscoring ();
+ before_allocation_default ();
+}
+
+#ifdef DLL_SUPPORT
+/* This is called when an input file isn't recognized as a BFD. We
+ check here for .DEF files and pull them in automatically. */
+
+static int
+saw_option (char *option)
+{
+ int i;
+
+ is_underscoring ();
+
+ for (i = 0; init[i].ptr; i++)
+ if (strcmp (GET_INIT_SYMBOL_NAME (i), option) == 0)
+ return init[i].inited;
+ return 0;
+}
+#endif /* DLL_SUPPORT */
+
+static bfd_boolean
+gld_${EMULATION_NAME}_unrecognized_file (lang_input_statement_type *entry ATTRIBUTE_UNUSED)
+{
+#ifdef DLL_SUPPORT
+ const char *ext = entry->filename + strlen (entry->filename) - 4;
+
+ if (strcmp (ext, ".def") == 0 || strcmp (ext, ".DEF") == 0)
+ {
+ pep_def_file = def_file_parse (entry->filename, pep_def_file);
+
+ if (pep_def_file)
+ {
+ int i, buflen=0, len;
+ char *buf;
+
+ for (i = 0; i < pep_def_file->num_exports; i++)
+ {
+ len = strlen (pep_def_file->exports[i].internal_name);
+ if (buflen < len + 2)
+ buflen = len + 2;
+ }
+
+ buf = xmalloc (buflen);
+
+ for (i = 0; i < pep_def_file->num_exports; i++)
+ {
+ struct bfd_link_hash_entry *h;
+
+ sprintf (buf, "%s%s", U (""),
+ pep_def_file->exports[i].internal_name);
+
+ h = bfd_link_hash_lookup (link_info.hash, buf, TRUE, TRUE, TRUE);
+ if (h == (struct bfd_link_hash_entry *) NULL)
+ einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
+ if (h->type == bfd_link_hash_new)
+ {
+ h->type = bfd_link_hash_undefined;
+ h->u.undef.abfd = NULL;
+ bfd_link_add_undef (link_info.hash, h);
+ }
+ }
+ free (buf);
+
+ /* def_file_print (stdout, pep_def_file); */
+ if (pep_def_file->is_dll == 1)
+ link_info.shared = 1;
+
+ if (pep_def_file->base_address != (bfd_vma)(-1))
+ {
+ pep.ImageBase
+ = pe_data (link_info.output_bfd)->pe_opthdr.ImageBase
+ = init[IMAGEBASEOFF].value
+ = pep_def_file->base_address;
+ init[IMAGEBASEOFF].inited = 1;
+ if (image_base_statement)
+ image_base_statement->exp = exp_assop ('=', "__image_base__",
+ exp_intop (pep.ImageBase));
+ }
+
+ if (pep_def_file->stack_reserve != -1
+ && ! saw_option ("__size_of_stack_reserve__"))
+ {
+ pep.SizeOfStackReserve = pep_def_file->stack_reserve;
+ if (pep_def_file->stack_commit != -1)
+ pep.SizeOfStackCommit = pep_def_file->stack_commit;
+ }
+ if (pep_def_file->heap_reserve != -1
+ && ! saw_option ("__size_of_heap_reserve__"))
+ {
+ pep.SizeOfHeapReserve = pep_def_file->heap_reserve;
+ if (pep_def_file->heap_commit != -1)
+ pep.SizeOfHeapCommit = pep_def_file->heap_commit;
+ }
+ return TRUE;
+ }
+ }
+#endif
+ return FALSE;
+}
+
+static bfd_boolean
+gld_${EMULATION_NAME}_recognized_file (lang_input_statement_type *entry ATTRIBUTE_UNUSED)
+{
+ is_underscoring ();
+#ifdef DLL_SUPPORT
+#ifdef TARGET_IS_i386pep
+ pep_dll_id_target ("pei-x86-64");
+#endif
+ if (pep_bfd_is_dll (entry->the_bfd))
+ return pep_implied_import_dll (entry->filename);
+#endif
+ return FALSE;
+}
+
+static void
+gld_${EMULATION_NAME}_finish (void)
+{
+ is_underscoring ();
+ finish_default ();
+
+#ifdef DLL_SUPPORT
+ if (link_info.shared
+ || (!link_info.relocatable && pep_def_file->num_exports != 0))
+ {
+ pep_dll_fill_sections (link_info.output_bfd, &link_info);
+ if (pep_implib_filename)
+ pep_dll_generate_implib (pep_def_file, pep_implib_filename, &link_info);
+ }
+
+ if (pep_out_def_filename)
+ pep_dll_generate_def_file (pep_out_def_filename);
+#endif /* DLL_SUPPORT */
+
+ /* I don't know where .idata gets set as code, but it shouldn't be. */
+ {
+ asection *asec = bfd_get_section_by_name (link_info.output_bfd, ".idata");
+
+ if (asec)
+ {
+ asec->flags &= ~SEC_CODE;
+ asec->flags |= SEC_DATA;
+ }
+ }
+}
+
+
+/* Place an orphan section.
+
+ We use this to put sections in a reasonable place in the file, and
+ to ensure that they are aligned as required.
+
+ We handle grouped sections here as well. A section named .foo\$nn
+ goes into the output section .foo. All grouped sections are sorted
+ by name.
+
+ Grouped sections for the default sections are handled by the
+ default linker script using wildcards, and are sorted by
+ sort_sections. */
+
+static lang_output_section_statement_type *
+gld_${EMULATION_NAME}_place_orphan (asection *s,
+ const char *secname,
+ int constraint)
+{
+ const char *orig_secname = secname;
+ char *dollar = NULL;
+ lang_output_section_statement_type *os;
+ lang_statement_list_type add_child;
+ lang_output_section_statement_type *match_by_name = NULL;
+ lang_statement_union_type **pl;
+
+ /* Look through the script to see where to place this section. */
+ if (!link_info.relocatable
+ && (dollar = strchr (secname, '\$')) != NULL)
+ {
+ size_t len = dollar - secname;
+ char *newname = xmalloc (len + 1);
+ memcpy (newname, secname, len);
+ newname[len] = '\0';
+ secname = newname;
+ }
+
+ lang_list_init (&add_child);
+
+ os = NULL;
+ if (constraint == 0)
+ for (os = lang_output_section_find (secname);
+ os != NULL;
+ os = next_matching_output_section_statement (os, 0))
+ {
+ /* If we don't match an existing output section, tell
+ lang_insert_orphan to create a new output section. */
+ constraint = SPECIAL;
+
+ if (os->bfd_section != NULL
+ && (os->bfd_section->flags == 0
+ || ((s->flags ^ os->bfd_section->flags)
+ & (SEC_LOAD | SEC_ALLOC)) == 0))
+ {
+ /* We already have an output section statement with this
+ name, and its bfd section has compatible flags.
+ If the section already exists but does not have any flags set,
+ then it has been created by the linker, probably as a result of
+ a --section-start command line switch. */
+ lang_add_section (&add_child, s, os);
+ break;
+ }
+
+ /* Save unused output sections in case we can match them
+ against orphans later. */
+ if (os->bfd_section == NULL)
+ match_by_name = os;
+ }
+
+ /* If we didn't match an active output section, see if we matched an
+ unused one and use that. */
+ if (os == NULL && match_by_name)
+ {
+ lang_add_section (&match_by_name->children, s, match_by_name);
+ return match_by_name;
+ }
+
+ if (os == NULL)
+ {
+ static struct orphan_save hold[] =
+ {
+ { ".text",
+ SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE,
+ 0, 0, 0, 0 },
+ { ".idata",
+ SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_DATA,
+ 0, 0, 0, 0 },
+ { ".rdata",
+ SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_DATA,
+ 0, 0, 0, 0 },
+ { ".data",
+ SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_DATA,
+ 0, 0, 0, 0 },
+ { ".bss",
+ SEC_ALLOC,
+ 0, 0, 0, 0 }
+ };
+ enum orphan_save_index
+ {
+ orphan_text = 0,
+ orphan_idata,
+ orphan_rodata,
+ orphan_data,
+ orphan_bss
+ };
+ static int orphan_init_done = 0;
+ struct orphan_save *place;
+ lang_output_section_statement_type *after;
+ etree_type *address;
+
+ if (!orphan_init_done)
+ {
+ struct orphan_save *ho;
+ for (ho = hold; ho < hold + sizeof (hold) / sizeof (hold[0]); ++ho)
+ if (ho->name != NULL)
+ {
+ ho->os = lang_output_section_find (ho->name);
+ if (ho->os != NULL && ho->os->flags == 0)
+ ho->os->flags = ho->flags;
+ }
+ orphan_init_done = 1;
+ }
+
+ /* Try to put the new output section in a reasonable place based
+ on the section name and section flags. */
+
+ place = NULL;
+ if ((s->flags & SEC_ALLOC) == 0)
+ ;
+ else if ((s->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
+ place = &hold[orphan_bss];
+ else if ((s->flags & SEC_READONLY) == 0)
+ place = &hold[orphan_data];
+ else if ((s->flags & SEC_CODE) == 0)
+ {
+ place = (!strncmp (secname, ".idata\$", 7) ? &hold[orphan_idata]
+ : &hold[orphan_rodata]);
+ }
+ else
+ place = &hold[orphan_text];
+
+ after = NULL;
+ if (place != NULL)
+ {
+ if (place->os == NULL)
+ place->os = lang_output_section_find (place->name);
+ after = place->os;
+ if (after == NULL)
+ after = lang_output_section_find_by_flags (s, &place->os, NULL);
+ if (after == NULL)
+ /* *ABS* is always the first output section statement. */
+ after = (&lang_output_section_statement.head
+ ->output_section_statement);
+ }
+
+ /* All sections in an executable must be aligned to a page boundary. */
+ address = exp_unop (ALIGN_K, exp_nameop (NAME, "__section_alignment__"));
+ os = lang_insert_orphan (s, secname, constraint, after, place, address,
+ &add_child);
+ }
+
+ /* If the section name has a '\$', sort it with the other '\$'
+ sections. */
+ for (pl = &os->children.head; *pl != NULL; pl = &(*pl)->header.next)
+ {
+ lang_input_section_type *ls;
+ const char *lname;
+
+ if ((*pl)->header.type != lang_input_section_enum)
+ continue;
+
+ ls = &(*pl)->input_section;
+
+ lname = bfd_get_section_name (ls->section->owner, ls->section);
+ if (strchr (lname, '\$') != NULL
+ && (dollar == NULL || strcmp (orig_secname, lname) < 0))
+ break;
+ }
+
+ if (add_child.head != NULL)
+ {
+ *add_child.tail = *pl;
+ *pl = add_child.head;
+ }
+
+ return os;
+}
+
+static bfd_boolean
+gld_${EMULATION_NAME}_open_dynamic_archive
+ (const char *arch ATTRIBUTE_UNUSED,
+ search_dirs_type *search,
+ lang_input_statement_type *entry)
+{
+ static const struct
+ {
+ const char * format;
+ bfd_boolean use_prefix;
+ }
+ libname_fmt [] =
+ {
+ /* Preferred explicit import library for dll's. */
+ { "lib%s.dll.a", FALSE },
+ /* Alternate explicit import library for dll's. */
+ { "%s.dll.a", FALSE },
+ /* "libfoo.a" could be either an import lib or a static lib.
+ For backwards compatibility, libfoo.a needs to precede
+ libfoo.dll and foo.dll in the search. */
+ { "lib%s.a", FALSE },
+ /* The 'native' spelling of an import lib name is "foo.lib". */
+ { "%s.lib", FALSE },
+#ifdef DLL_SUPPORT
+ /* Try "<prefix>foo.dll" (preferred dll name, if specified). */
+ { "%s%s.dll", TRUE },
+#endif
+ /* Try "libfoo.dll" (default preferred dll name). */
+ { "lib%s.dll", FALSE },
+ /* Finally try 'native' dll name "foo.dll". */
+ { "%s.dll", FALSE },
+ /* Note: If adding more formats to this table, make sure to check to
+ see if their length is longer than libname_fmt[0].format, and if
+ so, update the call to xmalloc() below. */
+ { NULL, FALSE }
+ };
+ static unsigned int format_max_len = 0;
+ const char * filename;
+ char * full_string;
+ char * base_string;
+ unsigned int i;
+
+
+ if (! entry->is_archive)
+ return FALSE;
+
+ filename = entry->filename;
+
+ if (format_max_len == 0)
+ /* We need to allow space in the memory that we are going to allocate
+ for the characters in the format string. Since the format array is
+ static we only need to calculate this information once. In theory
+ this value could also be computed statically, but this introduces
+ the possibility for a discrepancy and hence a possible memory
+ corruption. The lengths we compute here will be too long because
+ they will include any formating characters (%s) in the strings, but
+ this will not matter. */
+ for (i = 0; libname_fmt[i].format; i++)
+ if (format_max_len < strlen (libname_fmt[i].format))
+ format_max_len = strlen (libname_fmt[i].format);
+
+ full_string = xmalloc (strlen (search->name)
+ + strlen (filename)
+ + format_max_len
+#ifdef DLL_SUPPORT
+ + (pep_dll_search_prefix
+ ? strlen (pep_dll_search_prefix) : 0)
+#endif
+ /* Allow for the terminating NUL and for the path
+ separator character that is inserted between
+ search->name and the start of the format string. */
+ + 2);
+
+ sprintf (full_string, "%s/", search->name);
+ base_string = full_string + strlen (full_string);
+
+ for (i = 0; libname_fmt[i].format; i++)
+ {
+#ifdef DLL_SUPPORT
+ if (libname_fmt[i].use_prefix)
+ {
+ if (!pep_dll_search_prefix)
+ continue;
+ sprintf (base_string, libname_fmt[i].format, pep_dll_search_prefix, filename);
+ }
+ else
+#endif
+ sprintf (base_string, libname_fmt[i].format, filename);
+
+ if (ldfile_try_open_bfd (full_string, entry))
+ break;
+ }
+
+ if (!libname_fmt[i].format)
+ {
+ free (full_string);
+ return FALSE;
+ }
+
+ entry->filename = full_string;
+
+ return TRUE;
+}
+
+static int
+gld_${EMULATION_NAME}_find_potential_libraries
+ (char *name, lang_input_statement_type *entry)
+{
+ return ldfile_open_file_search (name, entry, "", ".lib");
+}
+
+static char *
+gld_${EMULATION_NAME}_get_script (int *isfile)
+EOF
+# Scripts compiled in.
+# sed commands to quote an ld script as a C string.
+sc="-f stringify.sed"
+
+fragment <<EOF
+{
+ *isfile = 0;
+
+ if (link_info.relocatable && config.build_constructors)
+ return
+EOF
+sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c
+echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c
+echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c
+echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c
+if test -n "$GENERATE_AUTO_IMPORT_SCRIPT" ; then
+echo ' ; else if (link_info.pei386_auto_import == 1 && link_info.pei386_runtime_pseudo_reloc != 2) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xa >> e${EMULATION_NAME}.c
+fi
+echo ' ; else return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
+echo '; }' >> e${EMULATION_NAME}.c
+
+fragment <<EOF
+
+
+struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
+{
+ gld_${EMULATION_NAME}_before_parse,
+ syslib_default,
+ hll_default,
+ gld_${EMULATION_NAME}_after_parse,
+ gld_${EMULATION_NAME}_after_open,
+ after_allocation_default,
+ set_output_arch_default,
+ ldemul_default_target,
+ gld_${EMULATION_NAME}_before_allocation,
+ gld_${EMULATION_NAME}_get_script,
+ "${EMULATION_NAME}",
+ "${OUTPUT_FORMAT}",
+ gld_${EMULATION_NAME}_finish,
+ NULL, /* Create output section statements. */
+ gld_${EMULATION_NAME}_open_dynamic_archive,
+ gld_${EMULATION_NAME}_place_orphan,
+ gld_${EMULATION_NAME}_set_symbols,
+ NULL, /* parse_args */
+ gld${EMULATION_NAME}_add_options,
+ gld${EMULATION_NAME}_handle_option,
+ gld_${EMULATION_NAME}_unrecognized_file,
+ gld_${EMULATION_NAME}_list_options,
+ gld_${EMULATION_NAME}_recognized_file,
+ gld_${EMULATION_NAME}_find_potential_libraries,
+ NULL /* new_vers_pattern. */
+};
+EOF
diff --git a/binutils-2.21/ld/emultempl/ppc32elf.em b/binutils-2.21/ld/emultempl/ppc32elf.em
new file mode 100644
index 0000000..36f9df2
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/ppc32elf.em
@@ -0,0 +1,244 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2003, 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em, and defines extra powerpc32-elf
+# specific routines.
+#
+fragment <<EOF
+
+#include "libbfd.h"
+#include "elf32-ppc.h"
+
+#define is_ppc_elf(bfd) \
+ (bfd_get_flavour (bfd) == bfd_target_elf_flavour \
+ && elf_object_id (bfd) == PPC32_ELF_DATA)
+
+/* Whether to run tls optimization. */
+static int notlsopt = 0;
+static int no_tls_get_addr_opt = 0;
+
+/* Whether to emit symbols for stubs. */
+static int emit_stub_syms = -1;
+
+/* Chooses the correct place for .plt and .got. */
+static enum ppc_elf_plt_type plt_style = PLT_UNSET;
+static int old_got = 0;
+
+static void
+ppc_after_open (void)
+{
+ if (is_ppc_elf (link_info.output_bfd))
+ {
+ int new_plt;
+ int keep_new;
+ unsigned int num_plt;
+ unsigned int num_got;
+ lang_output_section_statement_type *os;
+ lang_output_section_statement_type *plt_os[2];
+ lang_output_section_statement_type *got_os[2];
+
+ if (emit_stub_syms < 0)
+ emit_stub_syms = link_info.emitrelocations || link_info.shared;
+ new_plt = ppc_elf_select_plt_layout (link_info.output_bfd, &link_info,
+ plt_style, emit_stub_syms);
+ if (new_plt < 0)
+ einfo ("%X%P: select_plt_layout problem %E\n");
+
+ num_got = 0;
+ num_plt = 0;
+ for (os = &lang_output_section_statement.head->output_section_statement;
+ os != NULL;
+ os = os->next)
+ {
+ if (os->constraint == SPECIAL && strcmp (os->name, ".plt") == 0)
+ {
+ if (num_plt < 2)
+ plt_os[num_plt] = os;
+ ++num_plt;
+ }
+ if (os->constraint == SPECIAL && strcmp (os->name, ".got") == 0)
+ {
+ if (num_got < 2)
+ got_os[num_got] = os;
+ ++num_got;
+ }
+ }
+
+ keep_new = new_plt == 1 ? 0 : -1;
+ if (num_plt == 2)
+ {
+ plt_os[0]->constraint = keep_new;
+ plt_os[1]->constraint = ~keep_new;
+ }
+ if (num_got == 2)
+ {
+ if (old_got)
+ keep_new = -1;
+ got_os[0]->constraint = keep_new;
+ got_os[1]->constraint = ~keep_new;
+ }
+ }
+
+ gld${EMULATION_NAME}_after_open ();
+}
+
+static void
+ppc_before_allocation (void)
+{
+ if (is_ppc_elf (link_info.output_bfd))
+ {
+ if (ppc_elf_tls_setup (link_info.output_bfd, &link_info,
+ no_tls_get_addr_opt)
+ && !notlsopt)
+ {
+ if (!ppc_elf_tls_optimize (link_info.output_bfd, &link_info))
+ {
+ einfo ("%X%P: TLS problem %E\n");
+ return;
+ }
+ }
+ }
+
+ gld${EMULATION_NAME}_before_allocation ();
+
+ /* Turn on relaxation if executable sections have addresses that
+ might make branches overflow. */
+ if (RELAXATION_DISABLED_BY_DEFAULT)
+ {
+ bfd_vma low = (bfd_vma) -1;
+ bfd_vma high = 0;
+ asection *o;
+
+ /* Run lang_size_sections (if not already done). */
+ if (expld.phase != lang_mark_phase_enum)
+ {
+ expld.phase = lang_mark_phase_enum;
+ expld.dataseg.phase = exp_dataseg_none;
+ one_lang_size_sections_pass (NULL, FALSE);
+ lang_reset_memory_regions ();
+ }
+
+ for (o = link_info.output_bfd->sections; o != NULL; o = o->next)
+ {
+ if ((o->flags & (SEC_ALLOC | SEC_CODE)) != (SEC_ALLOC | SEC_CODE))
+ continue;
+ if (o->rawsize == 0)
+ continue;
+ if (low > o->vma)
+ low = o->vma;
+ if (high < o->vma + o->rawsize - 1)
+ high = o->vma + o->rawsize - 1;
+ }
+ if (high > low && high - low > (1 << 25) - 1)
+ ENABLE_RELAXATION;
+ }
+}
+
+EOF
+
+if grep -q 'ld_elf32_spu_emulation' ldemul-list.h; then
+ fragment <<EOF
+/* Special handling for embedded SPU executables. */
+extern bfd_boolean embedded_spu_file (lang_input_statement_type *, const char *);
+static bfd_boolean gld${EMULATION_NAME}_load_symbols (lang_input_statement_type *);
+
+static bfd_boolean
+ppc_recognized_file (lang_input_statement_type *entry)
+{
+ if (embedded_spu_file (entry, "-m32"))
+ return TRUE;
+
+ return gld${EMULATION_NAME}_load_symbols (entry);
+}
+
+EOF
+LDEMUL_RECOGNIZED_FILE=ppc_recognized_file
+fi
+
+# Define some shell vars to insert bits of code into the standard elf
+# parse_args and list_options functions.
+#
+PARSE_AND_LIST_PROLOGUE='
+#define OPTION_NO_TLS_OPT 301
+#define OPTION_NO_TLS_GET_ADDR_OPT (OPTION_NO_TLS_OPT + 1)
+#define OPTION_NEW_PLT (OPTION_NO_TLS_GET_ADDR_OPT + 1)
+#define OPTION_OLD_PLT (OPTION_NEW_PLT + 1)
+#define OPTION_OLD_GOT (OPTION_OLD_PLT + 1)
+#define OPTION_STUBSYMS (OPTION_OLD_GOT + 1)
+#define OPTION_NO_STUBSYMS (OPTION_STUBSYMS + 1)
+'
+
+PARSE_AND_LIST_LONGOPTS='
+ { "emit-stub-syms", no_argument, NULL, OPTION_STUBSYMS },
+ { "no-emit-stub-syms", no_argument, NULL, OPTION_NO_STUBSYMS },
+ { "no-tls-optimize", no_argument, NULL, OPTION_NO_TLS_OPT },
+ { "no-tls-get-addr-optimize", no_argument, NULL, OPTION_NO_TLS_GET_ADDR_OPT },
+ { "secure-plt", no_argument, NULL, OPTION_NEW_PLT },
+ { "bss-plt", no_argument, NULL, OPTION_OLD_PLT },
+ { "sdata-got", no_argument, NULL, OPTION_OLD_GOT },
+'
+
+PARSE_AND_LIST_OPTIONS='
+ fprintf (file, _("\
+ --emit-stub-syms Label linker stubs with a symbol.\n\
+ --no-emit-stub-syms Don'\''t label linker stubs with a symbol.\n\
+ --no-tls-optimize Don'\''t try to optimize TLS accesses.\n\
+ --no-tls-get-addr-optimize Don'\''t use a special __tls_get_addr call.\n\
+ --secure-plt Use new-style PLT if possible.\n\
+ --bss-plt Force old-style BSS PLT.\n\
+ --sdata-got Force GOT location just before .sdata.\n"
+ ));
+'
+
+PARSE_AND_LIST_ARGS_CASES='
+ case OPTION_STUBSYMS:
+ emit_stub_syms = 1;
+ break;
+
+ case OPTION_NO_STUBSYMS:
+ emit_stub_syms = 0;
+ break;
+
+ case OPTION_NO_TLS_OPT:
+ notlsopt = 1;
+ break;
+
+ case OPTION_NO_TLS_GET_ADDR_OPT:
+ no_tls_get_addr_opt = 1;
+ break;
+
+ case OPTION_NEW_PLT:
+ plt_style = PLT_NEW;
+ break;
+
+ case OPTION_OLD_PLT:
+ plt_style = PLT_OLD;
+ break;
+
+ case OPTION_OLD_GOT:
+ old_got = 1;
+ break;
+'
+
+# Put these extra ppc32elf routines in ld_${EMULATION_NAME}_emulation
+#
+LDEMUL_AFTER_OPEN=ppc_after_open
+LDEMUL_BEFORE_ALLOCATION=ppc_before_allocation
diff --git a/binutils-2.21/ld/emultempl/ppc64elf.em b/binutils-2.21/ld/emultempl/ppc64elf.em
new file mode 100644
index 0000000..cb8e784
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/ppc64elf.em
@@ -0,0 +1,791 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em, and defines extra powerpc64-elf
+# specific routines.
+#
+fragment <<EOF
+
+#include "ldctor.h"
+#include "libbfd.h"
+#include "elf-bfd.h"
+#include "elf64-ppc.h"
+
+/* Fake input file for stubs. */
+static lang_input_statement_type *stub_file;
+static int stub_added = 0;
+
+/* Whether we need to call ppc_layout_sections_again. */
+static int need_laying_out = 0;
+
+/* Maximum size of a group of input sections that can be handled by
+ one stub section. A value of +/-1 indicates the bfd back-end
+ should use a suitable default size. */
+static bfd_signed_vma group_size = 1;
+
+/* Whether to add ".foo" entries for each "foo" in a version script. */
+static int dotsyms = 1;
+
+/* Whether to run tls optimization. */
+static int no_tls_opt = 0;
+static int no_tls_get_addr_opt = 0;
+
+/* Whether to run opd optimization. */
+static int no_opd_opt = 0;
+
+/* Whether to run toc optimization. */
+static int no_toc_opt = 0;
+
+/* Whether to allow multiple toc sections. */
+static int no_multi_toc = 0;
+
+/* Whether to sort input toc and got sections. */
+static int no_toc_sort = 0;
+
+/* Whether to emit symbols for stubs. */
+static int emit_stub_syms = -1;
+
+static asection *toc_section = 0;
+
+/* Whether to canonicalize .opd so that there are no overlapping
+ .opd entries. */
+static int non_overlapping_opd = 0;
+
+/* This is called before the input files are opened. We create a new
+ fake input file to hold the stub sections. */
+
+static void
+ppc_create_output_section_statements (void)
+{
+ if (!(bfd_get_flavour (link_info.output_bfd) == bfd_target_elf_flavour
+ && elf_object_id (link_info.output_bfd) == PPC64_ELF_DATA))
+ return;
+
+ link_info.wrap_char = '.';
+
+ stub_file = lang_add_input_file ("linker stubs",
+ lang_input_file_is_fake_enum,
+ NULL);
+ stub_file->the_bfd = bfd_create ("linker stubs", link_info.output_bfd);
+ if (stub_file->the_bfd == NULL
+ || !bfd_set_arch_mach (stub_file->the_bfd,
+ bfd_get_arch (link_info.output_bfd),
+ bfd_get_mach (link_info.output_bfd)))
+ {
+ einfo ("%F%P: can not create BFD %E\n");
+ return;
+ }
+
+ stub_file->the_bfd->flags |= BFD_LINKER_CREATED;
+ ldlang_add_file (stub_file);
+ ppc64_elf_init_stub_bfd (stub_file->the_bfd, &link_info);
+}
+
+/* Move the input section statement at *U which happens to be on LIST
+ to be just before *TO. */
+
+static void
+move_input_section (lang_statement_list_type *list,
+ lang_statement_union_type **u,
+ lang_statement_union_type **to)
+{
+ lang_statement_union_type *s = *u;
+ asection *i = s->input_section.section;
+ asection *p, *n;
+
+ /* Snip the input section from the statement list. If it was the
+ last statement, fix the list tail pointer. */
+ *u = s->header.next;
+ if (*u == NULL)
+ list->tail = u;
+ /* Add it back in the new position. */
+ s->header.next = *to;
+ *to = s;
+ if (list->tail == to)
+ list->tail = &s->header.next;
+
+ /* Trim I off the bfd map_head/map_tail doubly linked lists. */
+ n = i->map_head.s;
+ p = i->map_tail.s;
+ (p != NULL ? p : i->output_section)->map_head.s = n;
+ (n != NULL ? n : i->output_section)->map_tail.s = p;
+
+ /* Add I back on in its new position. */
+ if (s->header.next->header.type == lang_input_section_enum)
+ {
+ n = s->header.next->input_section.section;
+ p = n->map_tail.s;
+ }
+ else
+ {
+ /* If the next statement is not an input section statement then
+ TO must point at the previous input section statement
+ header.next field. */
+ lang_input_section_type *prev = (lang_input_section_type *)
+ ((char *) to - offsetof (lang_statement_union_type, header.next));
+
+ ASSERT (prev->header.type == lang_input_section_enum);
+ p = prev->section;
+ n = p->map_head.s;
+ }
+ i->map_head.s = n;
+ i->map_tail.s = p;
+ (p != NULL ? p : i->output_section)->map_head.s = i;
+ (n != NULL ? n : i->output_section)->map_tail.s = i;
+}
+
+/* Sort input section statements in the linker script tree rooted at
+ LIST so that those whose owning bfd happens to have a section
+ called .init or .fini are placed first. Place any TOC sections
+ referenced by small TOC relocs next, with TOC sections referenced
+ only by bigtoc relocs last. */
+
+static void
+sort_toc_sections (lang_statement_list_type *list,
+ lang_statement_union_type **ini,
+ lang_statement_union_type **small)
+{
+ lang_statement_union_type *s, **u;
+ asection *i;
+
+ u = &list->head;
+ while ((s = *u) != NULL)
+ {
+ switch (s->header.type)
+ {
+ case lang_wild_statement_enum:
+ sort_toc_sections (&s->wild_statement.children, ini, small);
+ break;
+
+ case lang_group_statement_enum:
+ sort_toc_sections (&s->group_statement.children, ini, small);
+ break;
+
+ case lang_input_section_enum:
+ i = s->input_section.section;
+ /* Leave the stub_file .got where it is. We put the .got
+ header there. */
+ if (i->owner == stub_file->the_bfd)
+ break;
+ if (bfd_get_section_by_name (i->owner, ".init") != NULL
+ || bfd_get_section_by_name (i->owner, ".fini") != NULL)
+ {
+ if (ini != NULL && *ini != s)
+ {
+ move_input_section (list, u, ini);
+ if (small == ini)
+ small = &s->header.next;
+ ini = &s->header.next;
+ continue;
+ }
+ if (small == ini)
+ small = &s->header.next;
+ ini = &s->header.next;
+ break;
+ }
+ else if (ini == NULL)
+ ini = u;
+
+ if (ppc64_elf_has_small_toc_reloc (i))
+ {
+ if (small != NULL && *small != s)
+ {
+ move_input_section (list, u, small);
+ small = &s->header.next;
+ continue;
+ }
+ small = &s->header.next;
+ }
+ else if (small == NULL)
+ small = u;
+ break;
+
+ default:
+ break;
+ }
+ u = &s->header.next;
+ }
+}
+
+static void
+prelim_size_sections (void)
+{
+ if (expld.phase != lang_mark_phase_enum)
+ {
+ expld.phase = lang_mark_phase_enum;
+ expld.dataseg.phase = exp_dataseg_none;
+ one_lang_size_sections_pass (NULL, FALSE);
+ /* We must not cache anything from the preliminary sizing. */
+ lang_reset_memory_regions ();
+ }
+}
+
+static void
+ppc_before_allocation (void)
+{
+ if (stub_file != NULL)
+ {
+ if (!no_opd_opt
+ && !ppc64_elf_edit_opd (&link_info, non_overlapping_opd))
+ einfo ("%X%P: can not edit %s %E\n", "opd");
+
+ if (ppc64_elf_tls_setup (&link_info, no_tls_get_addr_opt, &no_multi_toc)
+ && !no_tls_opt)
+ {
+ /* Size the sections. This is premature, but we want to know the
+ TLS segment layout so that certain optimizations can be done. */
+ prelim_size_sections ();
+
+ if (!ppc64_elf_tls_optimize (&link_info))
+ einfo ("%X%P: TLS problem %E\n");
+ }
+
+ if (!no_toc_opt
+ && !link_info.relocatable)
+ {
+ prelim_size_sections ();
+
+ if (!ppc64_elf_edit_toc (&link_info))
+ einfo ("%X%P: can not edit %s %E\n", "toc");
+ }
+
+ if (!no_toc_sort)
+ {
+ lang_output_section_statement_type *toc_os;
+
+ toc_os = lang_output_section_find (".got");
+ if (toc_os != NULL)
+ sort_toc_sections (&toc_os->children, NULL, NULL);
+ }
+ }
+
+ gld${EMULATION_NAME}_before_allocation ();
+}
+
+struct hook_stub_info
+{
+ lang_statement_list_type add;
+ asection *input_section;
+};
+
+/* Traverse the linker tree to find the spot where the stub goes. */
+
+static bfd_boolean
+hook_in_stub (struct hook_stub_info *info, lang_statement_union_type **lp)
+{
+ lang_statement_union_type *l;
+ bfd_boolean ret;
+
+ for (; (l = *lp) != NULL; lp = &l->header.next)
+ {
+ switch (l->header.type)
+ {
+ case lang_constructors_statement_enum:
+ ret = hook_in_stub (info, &constructor_list.head);
+ if (ret)
+ return ret;
+ break;
+
+ case lang_output_section_statement_enum:
+ ret = hook_in_stub (info,
+ &l->output_section_statement.children.head);
+ if (ret)
+ return ret;
+ break;
+
+ case lang_wild_statement_enum:
+ ret = hook_in_stub (info, &l->wild_statement.children.head);
+ if (ret)
+ return ret;
+ break;
+
+ case lang_group_statement_enum:
+ ret = hook_in_stub (info, &l->group_statement.children.head);
+ if (ret)
+ return ret;
+ break;
+
+ case lang_input_section_enum:
+ if (l->input_section.section == info->input_section)
+ {
+ /* We've found our section. Insert the stub immediately
+ before its associated input section. */
+ *lp = info->add.head;
+ *(info->add.tail) = l;
+ return TRUE;
+ }
+ break;
+
+ case lang_data_statement_enum:
+ case lang_reloc_statement_enum:
+ case lang_object_symbols_statement_enum:
+ case lang_output_statement_enum:
+ case lang_target_statement_enum:
+ case lang_input_statement_enum:
+ case lang_assignment_statement_enum:
+ case lang_padding_statement_enum:
+ case lang_address_statement_enum:
+ case lang_fill_statement_enum:
+ break;
+
+ default:
+ FAIL ();
+ break;
+ }
+ }
+ return FALSE;
+}
+
+
+/* Call-back for ppc64_elf_size_stubs. */
+
+/* Create a new stub section, and arrange for it to be linked
+ immediately before INPUT_SECTION. */
+
+static asection *
+ppc_add_stub_section (const char *stub_sec_name, asection *input_section)
+{
+ asection *stub_sec;
+ flagword flags;
+ asection *output_section;
+ const char *secname;
+ lang_output_section_statement_type *os;
+ struct hook_stub_info info;
+
+ flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE
+ | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_KEEP);
+ stub_sec = bfd_make_section_anyway_with_flags (stub_file->the_bfd,
+ stub_sec_name, flags);
+ if (stub_sec == NULL)
+ goto err_ret;
+
+ output_section = input_section->output_section;
+ secname = bfd_get_section_name (output_section->owner, output_section);
+ os = lang_output_section_find (secname);
+
+ info.input_section = input_section;
+ lang_list_init (&info.add);
+ lang_add_section (&info.add, stub_sec, os);
+
+ if (info.add.head == NULL)
+ goto err_ret;
+
+ stub_added = 1;
+ if (hook_in_stub (&info, &os->children.head))
+ return stub_sec;
+
+ err_ret:
+ einfo ("%X%P: can not make stub section: %E\n");
+ return NULL;
+}
+
+
+/* Another call-back for ppc64_elf_size_stubs. */
+
+static void
+ppc_layout_sections_again (void)
+{
+ /* If we have changed sizes of the stub sections, then we need
+ to recalculate all the section offsets. This may mean we need to
+ add even more stubs. */
+ gld${EMULATION_NAME}_map_segments (TRUE);
+
+ if (!link_info.relocatable)
+ _bfd_set_gp_value (link_info.output_bfd,
+ ppc64_elf_toc (link_info.output_bfd));
+
+ need_laying_out = -1;
+}
+
+
+static void
+build_toc_list (lang_statement_union_type *statement)
+{
+ if (statement->header.type == lang_input_section_enum)
+ {
+ asection *i = statement->input_section.section;
+
+ if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
+ && (i->flags & SEC_EXCLUDE) == 0
+ && i->output_section == toc_section)
+ {
+ if (!ppc64_elf_next_toc_section (&link_info, i))
+ einfo ("%X%P: linker script separates .got and .toc\n");
+ }
+ }
+}
+
+
+static void
+build_section_lists (lang_statement_union_type *statement)
+{
+ if (statement->header.type == lang_input_section_enum)
+ {
+ asection *i = statement->input_section.section;
+
+ if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
+ && (i->flags & SEC_EXCLUDE) == 0
+ && i->output_section != NULL
+ && i->output_section->owner == link_info.output_bfd)
+ {
+ if (!ppc64_elf_next_input_section (&link_info, i))
+ einfo ("%X%P: can not size stub section: %E\n");
+ }
+ }
+}
+
+
+/* Call the back-end function to set TOC base after we have placed all
+ the sections. */
+static void
+gld${EMULATION_NAME}_after_allocation (void)
+{
+ /* bfd_elf_discard_info just plays with data and debugging sections,
+ ie. doesn't affect code size, so we can delay resizing the
+ sections. It's likely we'll resize everything in the process of
+ adding stubs. */
+ if (bfd_elf_discard_info (link_info.output_bfd, &link_info))
+ need_laying_out = 1;
+
+ /* If generating a relocatable output file, then we don't have any
+ stubs. */
+ if (stub_file != NULL && !link_info.relocatable)
+ {
+ int ret = ppc64_elf_setup_section_lists (&link_info,
+ &ppc_add_stub_section,
+ &ppc_layout_sections_again);
+ if (ret < 0)
+ einfo ("%X%P: can not size stub section: %E\n");
+ else if (ret > 0)
+ {
+ ppc64_elf_start_multitoc_partition (&link_info);
+
+ if (!no_multi_toc)
+ {
+ toc_section = bfd_get_section_by_name (link_info.output_bfd,
+ ".got");
+ if (toc_section != NULL)
+ lang_for_each_statement (build_toc_list);
+ }
+
+ if (ppc64_elf_layout_multitoc (&link_info)
+ && !no_multi_toc
+ && toc_section != NULL)
+ lang_for_each_statement (build_toc_list);
+
+ ppc64_elf_finish_multitoc_partition (&link_info);
+
+ lang_for_each_statement (build_section_lists);
+
+ if (!ppc64_elf_check_init_fini (&link_info))
+ einfo ("%P: .init/.fini fragments use differing TOC pointers\n");
+
+ /* Call into the BFD backend to do the real work. */
+ if (!ppc64_elf_size_stubs (&link_info, group_size))
+ einfo ("%X%P: can not size stub section: %E\n");
+ }
+ }
+
+ if (need_laying_out != -1)
+ {
+ gld${EMULATION_NAME}_map_segments (need_laying_out);
+
+ if (!link_info.relocatable)
+ _bfd_set_gp_value (link_info.output_bfd,
+ ppc64_elf_toc (link_info.output_bfd));
+ }
+}
+
+
+/* Final emulation specific call. */
+
+static void
+gld${EMULATION_NAME}_finish (void)
+{
+ /* e_entry on PowerPC64 points to the function descriptor for
+ _start. If _start is missing, default to the first function
+ descriptor in the .opd section. */
+ entry_section = ".opd";
+
+ if (link_info.relocatable)
+ {
+ asection *toc = bfd_get_section_by_name (link_info.output_bfd, ".toc");
+ if (toc != NULL
+ && bfd_section_size (link_info.output_bfd, toc) > 0x10000)
+ einfo ("%X%P: TOC section size exceeds 64k\n");
+ }
+
+ if (stub_added)
+ {
+ char *msg = NULL;
+ char *line, *endline;
+
+ if (emit_stub_syms < 0)
+ emit_stub_syms = 1;
+ if (!ppc64_elf_build_stubs (emit_stub_syms, &link_info,
+ config.stats ? &msg : NULL))
+ einfo ("%X%P: can not build stubs: %E\n");
+
+ for (line = msg; line != NULL; line = endline)
+ {
+ endline = strchr (line, '\n');
+ if (endline != NULL)
+ *endline++ = '\0';
+ fprintf (stderr, "%s: %s\n", program_name, line);
+ }
+ if (msg != NULL)
+ free (msg);
+ }
+
+ ppc64_elf_restore_symbols (&link_info);
+ finish_default ();
+}
+
+
+/* Add a pattern matching ".foo" for every "foo" in a version script.
+
+ The reason for doing this is that many shared library version
+ scripts export a selected set of functions or data symbols, forcing
+ others local. eg.
+
+ . VERS_1 {
+ . global:
+ . this; that; some; thing;
+ . local:
+ . *;
+ . };
+
+ To make the above work for PowerPC64, we need to export ".this",
+ ".that" and so on, otherwise only the function descriptor syms are
+ exported. Lack of an exported function code sym may cause a
+ definition to be pulled in from a static library. */
+
+static struct bfd_elf_version_expr *
+gld${EMULATION_NAME}_new_vers_pattern (struct bfd_elf_version_expr *entry)
+{
+ struct bfd_elf_version_expr *dot_entry;
+ unsigned int len;
+ char *dot_pat;
+
+ if (!dotsyms
+ || entry->pattern[0] == '.'
+ || (!entry->literal && entry->pattern[0] == '*'))
+ return entry;
+
+ dot_entry = xmalloc (sizeof *dot_entry);
+ *dot_entry = *entry;
+ dot_entry->next = entry;
+ len = strlen (entry->pattern) + 2;
+ dot_pat = xmalloc (len);
+ dot_pat[0] = '.';
+ memcpy (dot_pat + 1, entry->pattern, len - 1);
+ dot_entry->pattern = dot_pat;
+ dot_entry->script = 1;
+ return dot_entry;
+}
+
+
+/* Avoid processing the fake stub_file in vercheck, stat_needed and
+ check_needed routines. */
+
+static void (*real_func) (lang_input_statement_type *);
+
+static void ppc_for_each_input_file_wrapper (lang_input_statement_type *l)
+{
+ if (l != stub_file)
+ (*real_func) (l);
+}
+
+static void
+ppc_lang_for_each_input_file (void (*func) (lang_input_statement_type *))
+{
+ real_func = func;
+ lang_for_each_input_file (&ppc_for_each_input_file_wrapper);
+}
+
+#define lang_for_each_input_file ppc_lang_for_each_input_file
+
+EOF
+
+if grep -q 'ld_elf32_spu_emulation' ldemul-list.h; then
+ fragment <<EOF
+/* Special handling for embedded SPU executables. */
+extern bfd_boolean embedded_spu_file (lang_input_statement_type *, const char *);
+static bfd_boolean gld${EMULATION_NAME}_load_symbols (lang_input_statement_type *);
+
+static bfd_boolean
+ppc64_recognized_file (lang_input_statement_type *entry)
+{
+ if (embedded_spu_file (entry, "-m64"))
+ return TRUE;
+
+ return gld${EMULATION_NAME}_load_symbols (entry);
+}
+EOF
+LDEMUL_RECOGNIZED_FILE=ppc64_recognized_file
+fi
+
+# Define some shell vars to insert bits of code into the standard elf
+# parse_args and list_options functions.
+#
+PARSE_AND_LIST_PROLOGUE='
+#define OPTION_STUBGROUP_SIZE 301
+#define OPTION_STUBSYMS (OPTION_STUBGROUP_SIZE + 1)
+#define OPTION_NO_STUBSYMS (OPTION_STUBSYMS + 1)
+#define OPTION_DOTSYMS (OPTION_NO_STUBSYMS + 1)
+#define OPTION_NO_DOTSYMS (OPTION_DOTSYMS + 1)
+#define OPTION_NO_TLS_OPT (OPTION_NO_DOTSYMS + 1)
+#define OPTION_NO_TLS_GET_ADDR_OPT (OPTION_NO_TLS_OPT + 1)
+#define OPTION_NO_OPD_OPT (OPTION_NO_TLS_GET_ADDR_OPT + 1)
+#define OPTION_NO_TOC_OPT (OPTION_NO_OPD_OPT + 1)
+#define OPTION_NO_MULTI_TOC (OPTION_NO_TOC_OPT + 1)
+#define OPTION_NO_TOC_SORT (OPTION_NO_MULTI_TOC + 1)
+#define OPTION_NON_OVERLAPPING_OPD (OPTION_NO_TOC_SORT + 1)
+'
+
+PARSE_AND_LIST_LONGOPTS='
+ { "stub-group-size", required_argument, NULL, OPTION_STUBGROUP_SIZE },
+ { "emit-stub-syms", no_argument, NULL, OPTION_STUBSYMS },
+ { "no-emit-stub-syms", no_argument, NULL, OPTION_NO_STUBSYMS },
+ { "dotsyms", no_argument, NULL, OPTION_DOTSYMS },
+ { "no-dotsyms", no_argument, NULL, OPTION_NO_DOTSYMS },
+ { "no-tls-optimize", no_argument, NULL, OPTION_NO_TLS_OPT },
+ { "no-tls-get-addr-optimize", no_argument, NULL, OPTION_NO_TLS_GET_ADDR_OPT },
+ { "no-opd-optimize", no_argument, NULL, OPTION_NO_OPD_OPT },
+ { "no-toc-optimize", no_argument, NULL, OPTION_NO_TOC_OPT },
+ { "no-multi-toc", no_argument, NULL, OPTION_NO_MULTI_TOC },
+ { "no-toc-sort", no_argument, NULL, OPTION_NO_TOC_SORT },
+ { "non-overlapping-opd", no_argument, NULL, OPTION_NON_OVERLAPPING_OPD },
+'
+
+PARSE_AND_LIST_OPTIONS='
+ fprintf (file, _("\
+ --stub-group-size=N Maximum size of a group of input sections that\n\
+ can be handled by one stub section. A negative\n\
+ value locates all stubs before their branches\n\
+ (with a group size of -N), while a positive\n\
+ value allows two groups of input sections, one\n\
+ before, and one after each stub section.\n\
+ Values of +/-1 indicate the linker should\n\
+ choose suitable defaults.\n"
+ ));
+ fprintf (file, _("\
+ --emit-stub-syms Label linker stubs with a symbol.\n"
+ ));
+ fprintf (file, _("\
+ --no-emit-stub-syms Don'\''t label linker stubs with a symbol.\n"
+ ));
+ fprintf (file, _("\
+ --dotsyms For every version pattern \"foo\" in a version\n\
+ script, add \".foo\" so that function code\n\
+ symbols are treated the same as function\n\
+ descriptor symbols. Defaults to on.\n"
+ ));
+ fprintf (file, _("\
+ --no-dotsyms Don'\''t do anything special in version scripts.\n"
+ ));
+ fprintf (file, _("\
+ --no-tls-optimize Don'\''t try to optimize TLS accesses.\n"
+ ));
+ fprintf (file, _("\
+ --no-tls-get-addr-optimize Don'\''t use a special __tls_get_addr call.\n"
+ ));
+ fprintf (file, _("\
+ --no-opd-optimize Don'\''t optimize the OPD section.\n"
+ ));
+ fprintf (file, _("\
+ --no-toc-optimize Don'\''t optimize the TOC section.\n"
+ ));
+ fprintf (file, _("\
+ --no-multi-toc Disallow automatic multiple toc sections.\n"
+ ));
+ fprintf (file, _("\
+ --no-toc-sort Don'\''t sort TOC and GOT sections.\n"
+ ));
+ fprintf (file, _("\
+ --non-overlapping-opd Canonicalize .opd, so that there are no\n\
+ overlapping .opd entries.\n"
+ ));
+'
+
+PARSE_AND_LIST_ARGS_CASES='
+ case OPTION_STUBGROUP_SIZE:
+ {
+ const char *end;
+ group_size = bfd_scan_vma (optarg, &end, 0);
+ if (*end)
+ einfo (_("%P%F: invalid number `%s'\''\n"), optarg);
+ }
+ break;
+
+ case OPTION_STUBSYMS:
+ emit_stub_syms = 1;
+ break;
+
+ case OPTION_NO_STUBSYMS:
+ emit_stub_syms = 0;
+ break;
+
+ case OPTION_DOTSYMS:
+ dotsyms = 1;
+ break;
+
+ case OPTION_NO_DOTSYMS:
+ dotsyms = 0;
+ break;
+
+ case OPTION_NO_TLS_OPT:
+ no_tls_opt = 1;
+ break;
+
+ case OPTION_NO_TLS_GET_ADDR_OPT:
+ no_tls_get_addr_opt = 1;
+ break;
+
+ case OPTION_NO_OPD_OPT:
+ no_opd_opt = 1;
+ break;
+
+ case OPTION_NO_TOC_OPT:
+ no_toc_opt = 1;
+ break;
+
+ case OPTION_NO_MULTI_TOC:
+ no_multi_toc = 1;
+ break;
+
+ case OPTION_NO_TOC_SORT:
+ no_toc_sort = 1;
+ break;
+
+ case OPTION_NON_OVERLAPPING_OPD:
+ non_overlapping_opd = 1;
+ break;
+'
+
+# Put these extra ppc64elf routines in ld_${EMULATION_NAME}_emulation
+#
+LDEMUL_BEFORE_ALLOCATION=ppc_before_allocation
+LDEMUL_AFTER_ALLOCATION=gld${EMULATION_NAME}_after_allocation
+LDEMUL_FINISH=gld${EMULATION_NAME}_finish
+LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS=ppc_create_output_section_statements
+LDEMUL_NEW_VERS_PATTERN=gld${EMULATION_NAME}_new_vers_pattern
diff --git a/binutils-2.21/ld/emultempl/rxelf.em b/binutils-2.21/ld/emultempl/rxelf.em
new file mode 100644
index 0000000..c4a2dac
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/rxelf.em
@@ -0,0 +1,64 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2009 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em, and defines extra rx-elf
+# specific routines.
+#
+test -z "$TARGET2_TYPE" && TARGET2_TYPE="rel"
+fragment <<EOF
+
+static bfd_boolean no_flag_mismatch_warnings = FALSE;
+
+/* This is a convenient point to tell BFD about target specific flags.
+ After the output has been created, but before inputs are read. */
+static void
+rx_elf_create_output_section_statements (void)
+{
+ extern void bfd_elf32_rx_set_target_flags (bfd_boolean);
+
+ bfd_elf32_rx_set_target_flags (no_flag_mismatch_warnings);
+}
+
+EOF
+
+# Define some shell vars to insert bits of code into the standard elf
+# parse_args and list_options functions.
+#
+PARSE_AND_LIST_PROLOGUE='
+#define OPTION_NO_FLAG_MISMATCH_WARNINGS 301
+'
+
+PARSE_AND_LIST_LONGOPTS='
+ { "no-flag-mismatch-warnings", no_argument, NULL, OPTION_NO_FLAG_MISMATCH_WARNINGS},
+'
+
+PARSE_AND_LIST_OPTIONS='
+ fprintf (file, _(" --no-flag-mismatch-warnings Don'\''t warn about objects with incompatible"
+ " endian or dsp settings\n"));
+'
+
+PARSE_AND_LIST_ARGS_CASES='
+ case OPTION_NO_FLAG_MISMATCH_WARNINGS:
+ no_flag_mismatch_warnings = TRUE;
+ break;
+'
+
+LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS=rx_elf_create_output_section_statements
diff --git a/binutils-2.21/ld/emultempl/scoreelf.em b/binutils-2.21/ld/emultempl/scoreelf.em
new file mode 100644
index 0000000..897147e
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/scoreelf.em
@@ -0,0 +1,77 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+# Contributed by:
+# Brain.lin (brain.lin@sunplusct.com)
+# Mei Ligang (ligang@sunnorth.com.cn)
+# Pei-Lin Tsai (pltsai@sunplus.com)
+
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em, and defines extra score-elf
+# specific routines.
+#
+fragment <<EOF
+
+#include "elf32-score.h"
+
+static void
+gld${EMULATION_NAME}_before_parse ()
+{
+#ifndef TARGET_ /* I.e., if not generic. */
+ ldfile_set_output_arch ("`echo ${ARCH}`", bfd_arch_unknown);
+#endif /* not TARGET_ */
+ config.dynamic_link = ${DYNAMIC_LINK-TRUE};
+ config.has_shared = `if test -n "$GENERATE_SHLIB_SCRIPT" ; then echo TRUE ; else echo FALSE ; fi`;
+}
+
+static void
+score_elf_after_open (void)
+{
+ if (strstr (bfd_get_target (link_info.output_bfd), "score") == NULL)
+ {
+ /* The score backend needs special fields in the output hash structure.
+ These will only be created if the output format is an score format,
+ hence we do not support linking and changing output formats at the
+ same time. Use a link followed by objcopy to change output formats. */
+ einfo ("%F%X%P: error: cannot change output format whilst linking S+core binaries\n");
+ return;
+ }
+
+ /* Call the standard elf routine. */
+ gld${EMULATION_NAME}_after_open ();
+}
+
+EOF
+
+# Define some shell vars to insert bits of code into the standard elf
+# parse_args and list_options functions.
+#
+PARSE_AND_LIST_PROLOGUE=''
+PARSE_AND_LIST_SHORTOPTS=
+PARSE_AND_LIST_LONGOPTS=''
+PARSE_AND_LIST_OPTIONS=''
+PARSE_AND_LIST_ARGS_CASES=''
+
+# We have our own after_open and before_allocation functions, but they call
+# the standard routines, so give them a different name.
+LDEMUL_AFTER_OPEN=score_elf_after_open
+
+# Replace the elf before_parse function with our own.
+LDEMUL_BEFORE_PARSE=gld"${EMULATION_NAME}"_before_parse
+
diff --git a/binutils-2.21/ld/emultempl/sh64elf.em b/binutils-2.21/ld/emultempl/sh64elf.em
new file mode 100644
index 0000000..17f9dde
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/sh64elf.em
@@ -0,0 +1,561 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em, and defines extra sh64
+# specific routines.
+#
+
+LDEMUL_AFTER_ALLOCATION=sh64_elf_${EMULATION_NAME}_after_allocation
+LDEMUL_BEFORE_ALLOCATION=sh64_elf_${EMULATION_NAME}_before_allocation
+
+fragment <<EOF
+
+#include "libiberty.h"
+#include "libbfd.h"
+#include "elf-bfd.h"
+#include "elf/sh.h"
+#include "elf32-sh64.h"
+
+/* Check if we need a .cranges section and create it if it's not in any
+ input file. It might seem better to always create it and if unneeded,
+ discard it, but I don't find a simple way to discard it totally from
+ the output.
+
+ Putting it here instead of as a elf_backend_always_size_sections hook
+ in elf32-sh64.c, means that we have access to linker command line
+ options here, and we can access input sections in the order in which
+ they will be linked. */
+
+static void
+sh64_elf_${EMULATION_NAME}_before_allocation (void)
+{
+ asection *cranges;
+ asection *osec;
+
+ /* Call main function; we're just extending it. */
+ gld${EMULATION_NAME}_before_allocation ();
+
+ cranges = bfd_get_section_by_name (link_info.output_bfd,
+ SH64_CRANGES_SECTION_NAME);
+
+ if (cranges != NULL)
+ {
+ if (RELAXATION_ENABLED)
+ {
+ /* FIXME: Look through incoming sections with .cranges
+ descriptors, build up some kind of descriptors that the
+ relaxing function will pick up and adjust, or perhaps make it
+ find and adjust an associated .cranges descriptor. We could
+ also look through incoming relocs and kill the ones marking
+ relaxation areas, but that wouldn't be TRT. */
+ einfo
+ (_("%P: Sorry, turning off relaxing: .cranges section in input.\n"));
+ einfo (_(" A .cranges section is present in:\n"));
+
+ {
+ LANG_FOR_EACH_INPUT_STATEMENT (f)
+ {
+ asection *input_cranges
+ = bfd_get_section_by_name (f->the_bfd,
+ SH64_CRANGES_SECTION_NAME);
+ if (input_cranges != NULL)
+ einfo (" %I\n", f);
+ }
+ }
+
+ DISABLE_RELAXATION;
+ }
+
+ /* We wouldn't need to do anything when there's already a .cranges
+ section (and have a return here), except that we need to set the
+ section flags right for output sections that *don't* need a
+ .cranges section. */
+ }
+
+ if (RELAXATION_ENABLED)
+ {
+ LANG_FOR_EACH_INPUT_STATEMENT (f)
+ {
+ if (bfd_get_flavour (f->the_bfd) == bfd_target_elf_flavour)
+ {
+ asection *isec;
+
+ for (isec = f->the_bfd->sections;
+ isec != NULL;
+ isec = isec->next)
+ {
+ if (elf_section_data (isec)->this_hdr.sh_flags
+ & (SHF_SH5_ISA32 | SHF_SH5_ISA32_MIXED))
+ {
+ einfo (_("%P: Sorry, turning off relaxing: SHmedia sections present.\n"));
+ einfo (" %I\n", f);
+ DISABLE_RELAXATION;
+ goto done_scanning_shmedia_sections;
+ }
+ }
+ }
+ }
+ }
+ done_scanning_shmedia_sections:
+
+ /* For each non-empty input section in each output section, check if it
+ has the same SH64-specific flags. If some input section differs, we
+ need a .cranges section. */
+ for (osec = link_info.output_bfd->sections;
+ osec != NULL;
+ osec = osec->next)
+ {
+ struct sh64_section_data *sh64_sec_data;
+ bfd_vma oflags_isa = 0;
+ bfd_vma iflags_isa = 0;
+
+ if (bfd_get_flavour (link_info.output_bfd) != bfd_target_elf_flavour)
+ einfo (_("%FError: non-ELF output formats are not supported by this target's linker.\n"));
+
+ sh64_sec_data = sh64_elf_section_data (osec)->sh64_info;
+
+ /* Omit excluded or garbage-collected sections. */
+ if (bfd_get_section_flags (link_info.output_bfd, osec) & SEC_EXCLUDE)
+ continue;
+
+ /* Make sure we have the target section data initialized. */
+ if (sh64_sec_data == NULL)
+ {
+ sh64_sec_data = xcalloc (1, sizeof (struct sh64_section_data));
+ sh64_elf_section_data (osec)->sh64_info = sh64_sec_data;
+ }
+
+ /* First find an input section so we have flags to compare with; the
+ flags in the output section are not valid. */
+ {
+ LANG_FOR_EACH_INPUT_STATEMENT (f)
+ {
+ asection *isec;
+
+ for (isec = f->the_bfd->sections;
+ isec != NULL;
+ isec = isec->next)
+ {
+ if (isec->output_section == osec
+ && isec->size != 0
+ && (bfd_get_section_flags (isec->owner, isec)
+ & SEC_EXCLUDE) == 0)
+ {
+ oflags_isa
+ = (elf_section_data (isec)->this_hdr.sh_flags
+ & (SHF_SH5_ISA32 | SHF_SH5_ISA32_MIXED));
+ goto break_1;
+ }
+ }
+ }
+ }
+
+ break_1:
+
+ /* Check that all input sections have the same contents-type flags
+ as the first input section. */
+ {
+ LANG_FOR_EACH_INPUT_STATEMENT (f)
+ {
+ asection *isec;
+
+ for (isec = f->the_bfd->sections;
+ isec != NULL;
+ isec = isec->next)
+ {
+ if (isec->output_section == osec
+ && isec->size != 0
+ && (bfd_get_section_flags (isec->owner, isec)
+ & SEC_EXCLUDE) == 0)
+ {
+ iflags_isa
+ = (elf_section_data (isec)->this_hdr.sh_flags
+ & (SHF_SH5_ISA32 | SHF_SH5_ISA32_MIXED));
+
+ /* If flags don't agree, we need a .cranges section.
+ Create it here if it did not exist through input
+ sections. */
+ if (iflags_isa != oflags_isa)
+ {
+ if (cranges == NULL)
+ {
+ /* This section will be *appended* to
+ sections, so the outer iteration will reach
+ it in due time and set
+ sh64_elf_section_data; no need to set it
+ specifically here. */
+ cranges
+ = bfd_make_section_with_flags (link_info.output_bfd,
+ SH64_CRANGES_SECTION_NAME,
+ SEC_LINKER_CREATED
+ | SEC_KEEP
+ | SEC_HAS_CONTENTS
+ | SEC_DEBUGGING);
+ if (cranges == NULL)
+ einfo
+ (_("%P%E%F: Can't make .cranges section\n"));
+ }
+
+ /* We don't need to look at more input sections,
+ and we know this section will have mixed
+ contents. */
+ goto break_2;
+ }
+ }
+ }
+ }
+ }
+
+ /* If we got here, then all input sections in this output section
+ have the same contents flag. Put that where we expect to see
+ contents flags. We don't need to do this for sections that will
+ need additional, linker-generated .cranges entries. */
+ sh64_sec_data->contents_flags = iflags_isa;
+
+ break_2:
+ ;
+ }
+}
+
+/* Size up and extend the .cranges section, merging generated entries. */
+
+static void
+sh64_elf_${EMULATION_NAME}_after_allocation (void)
+{
+ bfd_vma new_cranges = 0;
+ bfd_vma cranges_growth = 0;
+ asection *osec;
+ bfd_byte *crangesp;
+ asection *cranges;
+
+ gld${EMULATION_NAME}_after_allocation ();
+
+ cranges = bfd_get_section_by_name (link_info.output_bfd,
+ SH64_CRANGES_SECTION_NAME);
+
+ /* If there is no .cranges section, it is because it was seen earlier on
+ that none was needed. Otherwise it must have been created then, or
+ be present in input. */
+ if (cranges == NULL)
+ return;
+
+ /* First, we set the ISA flags for each output section according to the
+ first non-discarded section. For each input section in osec, we
+ check if it has the same flags. If it does not, we set flags to mark
+ a mixed section (and exit the loop early). */
+ for (osec = link_info.output_bfd->sections;
+ osec != NULL;
+ osec = osec->next)
+ {
+ bfd_vma oflags_isa = 0;
+ bfd_boolean need_check_cranges = FALSE;
+
+ /* Omit excluded or garbage-collected sections. */
+ if (bfd_get_section_flags (link_info.output_bfd, osec) & SEC_EXCLUDE)
+ continue;
+
+ /* First find an input section so we have flags to compare with; the
+ flags in the output section are not valid. */
+ {
+ LANG_FOR_EACH_INPUT_STATEMENT (f)
+ {
+ asection *isec;
+
+ for (isec = f->the_bfd->sections;
+ isec != NULL;
+ isec = isec->next)
+ {
+ if (isec->output_section == osec
+ && isec->size != 0
+ && (bfd_get_section_flags (isec->owner, isec)
+ & SEC_EXCLUDE) == 0)
+ {
+ oflags_isa
+ = (elf_section_data (isec)->this_hdr.sh_flags
+ & (SHF_SH5_ISA32 | SHF_SH5_ISA32_MIXED));
+ goto break_1;
+ }
+ }
+ }
+ }
+
+ break_1:
+
+ /* Check that all input sections have the same contents-type flags
+ as the first input section. */
+ {
+ LANG_FOR_EACH_INPUT_STATEMENT (f)
+ {
+ asection *isec;
+
+ for (isec = f->the_bfd->sections;
+ isec != NULL;
+ isec = isec->next)
+ {
+ if (isec->output_section == osec
+ && isec->size != 0
+ && (bfd_get_section_flags (isec->owner, isec)
+ & SEC_EXCLUDE) == 0)
+ {
+ bfd_vma iflags_isa
+ = (elf_section_data (isec)->this_hdr.sh_flags
+ & (SHF_SH5_ISA32 | SHF_SH5_ISA32_MIXED));
+
+ /* If flags don't agree, set the target-specific data
+ of the section to mark that this section needs to
+ be have .cranges section entries added. Don't
+ bother setting ELF section flags in output section;
+ they will be cleared later and will have to be
+ re-initialized before the linked file is written. */
+ if (iflags_isa != oflags_isa)
+ {
+ oflags_isa = SHF_SH5_ISA32_MIXED;
+
+ BFD_ASSERT (sh64_elf_section_data (osec)->sh64_info);
+
+ sh64_elf_section_data (osec)->sh64_info->contents_flags
+ = SHF_SH5_ISA32_MIXED;
+ need_check_cranges = TRUE;
+ goto break_2;
+ }
+ }
+ }
+ }
+ }
+
+ break_2:
+
+ /* If there were no new ranges for this output section, we don't
+ need to iterate over the input sections to check how many are
+ needed. */
+ if (! need_check_cranges)
+ continue;
+
+ /* If we found a section with differing contents type, we need more
+ ranges to mark the sections that are not mixed (and already have
+ .cranges descriptors). Calculate the maximum number of new
+ entries here. We may merge some of them, so that number is not
+ final; it can shrink. */
+ {
+ LANG_FOR_EACH_INPUT_STATEMENT (f)
+ {
+ asection *isec;
+
+ for (isec = f->the_bfd->sections;
+ isec != NULL;
+ isec = isec->next)
+ {
+ if (isec->output_section == osec
+ && isec->size != 0
+ && (bfd_get_section_flags (isec->owner, isec)
+ & SEC_EXCLUDE) == 0
+ && ((elf_section_data (isec)->this_hdr.sh_flags
+ & (SHF_SH5_ISA32 | SHF_SH5_ISA32_MIXED))
+ != SHF_SH5_ISA32_MIXED))
+ new_cranges++;
+ }
+ }
+ }
+ }
+
+ if (cranges->contents != NULL)
+ free (cranges->contents);
+
+ BFD_ASSERT (sh64_elf_section_data (cranges)->sh64_info != NULL);
+
+ /* Make sure we have .cranges in memory even if there were only
+ assembler-generated .cranges. */
+ cranges_growth = new_cranges * SH64_CRANGE_SIZE;
+ cranges->contents = xcalloc (cranges->size + cranges_growth, 1);
+ bfd_set_section_flags (cranges->owner, cranges,
+ bfd_get_section_flags (cranges->owner, cranges)
+ | SEC_IN_MEMORY);
+
+ /* If we don't need to grow the .cranges section beyond what was in the
+ input sections, we have nothing more to do here. We then only got
+ here because there was a .cranges section coming from input. Zero
+ out the number of generated .cranges. */
+ if (new_cranges == 0)
+ {
+ sh64_elf_section_data (cranges)->sh64_info->cranges_growth = 0;
+ return;
+ }
+
+ crangesp = cranges->contents + cranges->size;
+
+ /* Now pass over the sections again, and make reloc orders for the new
+ .cranges entries. Constants are set as we go. */
+ for (osec = link_info.output_bfd->sections;
+ osec != NULL;
+ osec = osec->next)
+ {
+ struct bfd_link_order *cr_addr_order = NULL;
+ enum sh64_elf_cr_type last_cr_type = CRT_NONE;
+ bfd_vma last_cr_size = 0;
+ bfd_vma continuation_vma = 0;
+
+ /* Omit excluded or garbage-collected sections, and output sections
+ which were not marked as needing further processing. */
+ if ((bfd_get_section_flags (link_info.output_bfd, osec) & SEC_EXCLUDE) != 0
+ || (sh64_elf_section_data (osec)->sh64_info->contents_flags
+ != SHF_SH5_ISA32_MIXED))
+ continue;
+
+ {
+ LANG_FOR_EACH_INPUT_STATEMENT (f)
+ {
+ asection *isec;
+
+ for (isec = f->the_bfd->sections;
+ isec != NULL;
+ isec = isec->next)
+ {
+ /* Allow only sections that have (at least initially) a
+ non-zero size, and are not excluded, and are not marked
+ as containing mixed data, thus already having .cranges
+ entries. */
+ if (isec->output_section == osec
+ && isec->size != 0
+ && (bfd_get_section_flags (isec->owner, isec)
+ & SEC_EXCLUDE) == 0
+ && ((elf_section_data (isec)->this_hdr.sh_flags
+ & (SHF_SH5_ISA32 | SHF_SH5_ISA32_MIXED))
+ != SHF_SH5_ISA32_MIXED))
+ {
+ enum sh64_elf_cr_type cr_type;
+ bfd_vma cr_size;
+ bfd_vma isa_flags
+ = (elf_section_data (isec)->this_hdr.sh_flags
+ & (SHF_SH5_ISA32 | SHF_SH5_ISA32_MIXED));
+
+ if (isa_flags == SHF_SH5_ISA32)
+ cr_type = CRT_SH5_ISA32;
+ else if ((bfd_get_section_flags (isec->owner, isec)
+ & SEC_CODE) == 0)
+ cr_type = CRT_DATA;
+ else
+ cr_type = CRT_SH5_ISA16;
+
+ cr_size = isec->size;
+
+ /* Sections can be empty, like .text in a file that
+ only contains other sections. Ranges shouldn't be
+ emitted for them. This can presumably happen after
+ relaxing and is not be caught at the "raw size"
+ test above. */
+ if (cr_size == 0)
+ continue;
+
+ /* See if this is a continuation of the previous range
+ for the same output section. If so, just change
+ the size of the last range and continue. */
+ if (cr_type == last_cr_type
+ && (continuation_vma
+ == osec->vma + isec->output_offset))
+ {
+ last_cr_size += cr_size;
+ bfd_put_32 (link_info.output_bfd, last_cr_size,
+ crangesp - SH64_CRANGE_SIZE
+ + SH64_CRANGE_CR_SIZE_OFFSET);
+
+ continuation_vma += cr_size;
+ continue;
+ }
+
+ /* If we emit relocatable contents, we need a
+ relocation for the start address. */
+ if (link_info.relocatable || link_info.emitrelocations)
+ {
+ /* FIXME: We could perhaps use lang_add_reloc and
+ friends here, but I'm not really sure that
+ would leave us free to do some optimizations
+ later. */
+ cr_addr_order
+ = bfd_new_link_order (link_info.output_bfd, cranges);
+
+ if (cr_addr_order == NULL)
+ {
+ einfo (_("%P%F: bfd_new_link_order failed\n"));
+ return;
+ }
+
+ cr_addr_order->type = bfd_section_reloc_link_order;
+ cr_addr_order->offset
+ = (cranges->output_offset
+ + crangesp + SH64_CRANGE_CR_ADDR_OFFSET
+ - cranges->contents);
+ cr_addr_order->size = 4;
+ cr_addr_order->u.reloc.p
+ = xmalloc (sizeof (struct bfd_link_order_reloc));
+
+ cr_addr_order->u.reloc.p->reloc = BFD_RELOC_32;
+ cr_addr_order->u.reloc.p->u.section = osec;
+
+ /* Since SH, unlike normal RELA-targets, uses a
+ "partial inplace" REL-like relocation for this,
+ we put the addend in the contents and specify 0
+ for the reloc. */
+ bfd_put_32 (link_info.output_bfd, isec->output_offset,
+ crangesp + SH64_CRANGE_CR_ADDR_OFFSET);
+ cr_addr_order->u.reloc.p->addend = 0;
+ }
+ else
+ bfd_put_32 (link_info.output_bfd,
+ osec->vma + isec->output_offset,
+ crangesp + SH64_CRANGE_CR_ADDR_OFFSET);
+
+ /* If we could make a reloc for cr_size we would do
+ it, but we would have to have a symbol for the size
+ of the _input_ section and there's no way to
+ generate that. */
+ bfd_put_32 (link_info.output_bfd, cr_size,
+ crangesp + SH64_CRANGE_CR_SIZE_OFFSET);
+
+ bfd_put_16 (link_info.output_bfd, cr_type,
+ crangesp + SH64_CRANGE_CR_TYPE_OFFSET);
+
+ last_cr_type = cr_type;
+ last_cr_size = cr_size;
+ continuation_vma
+ = osec->vma + isec->output_offset + cr_size;
+ crangesp += SH64_CRANGE_SIZE;
+ }
+ }
+ }
+ }
+ }
+
+ /* The .cranges section will have this size, no larger or smaller.
+ Since relocs (if relocatable linking) will be emitted into the
+ "extended" size, we must set the raw size to the total. We have to
+ keep track of the number of new .cranges entries.
+
+ Sorting before writing is done by sh64_elf_final_write_processing. */
+
+ sh64_elf_section_data (cranges)->sh64_info->cranges_growth
+ = crangesp - cranges->contents - cranges->size;
+ cranges->size = crangesp - cranges->contents;
+ cranges->rawsize = cranges->size;
+}
+EOF
+
+
diff --git a/binutils-2.21/ld/emultempl/solaris2.em b/binutils-2.21/ld/emultempl/solaris2.em
new file mode 100644
index 0000000..0b77375
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/solaris2.em
@@ -0,0 +1,154 @@
+# This shell script emits a C file. -*- C -*-
+# It does some substitutions.
+if [ -z "$MACHINE" ]; then
+ OUTPUT_ARCH=${ARCH}
+else
+ OUTPUT_ARCH=${ARCH}:${MACHINE}
+fi
+fragment <<EOF
+/* This file is generated by a shell script. DO NOT EDIT! */
+
+/* Solaris 2 emulation code for ${EMULATION_NAME}
+ Copyright 2010 Free Software Foundation, Inc.
+ Written by Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#define TARGET_IS_${EMULATION_NAME}
+
+/* The Solaris 2 ABI requires some global symbols to be present in the
+ .dynsym table of executables and shared objects. If generating a
+ versioned shared object, they must always be bound to the base version.
+
+ Cf. Linker and Libraries Guide, Ch. 2, Link-Editor, Generating the Output
+ File, p.63. */
+static void
+elf_solaris2_before_allocation (void)
+{
+ /* Global symbols required by the Solaris 2 ABI. */
+ static const char *global_syms[] = {
+ "_DYNAMIC",
+ "_GLOBAL_OFFSET_TABLE_",
+ "_PROCEDURE_LINKAGE_TABLE_",
+ "_edata",
+ "_end",
+ "_etext",
+ NULL
+ };
+ const char **sym;
+
+ /* Do this for both executables and shared objects. */
+ if (!link_info.relocatable)
+ {
+ for (sym = global_syms; *sym != NULL; sym++)
+ {
+ struct elf_link_hash_entry *h;
+
+ /* Lookup symbol. */
+ h = elf_link_hash_lookup (elf_hash_table (&link_info), *sym,
+ FALSE, FALSE, FALSE);
+ if (h == NULL)
+ continue;
+
+ /* Undo the hiding done by _bfd_elf_define_linkage_sym. */
+ h->forced_local = 0;
+ h->other &= ~STV_HIDDEN;
+
+ /* Emit it into the .dynamic section, too. */
+ bfd_elf_link_record_dynamic_symbol (&link_info, h);
+ }
+ }
+
+ /* Only do this if emitting a shared object and versioning is in place. */
+ if (link_info.shared
+ && (lang_elf_version_info != NULL || link_info.create_default_symver))
+ {
+ struct bfd_elf_version_expr *globals = NULL, *locals = NULL;
+ struct bfd_elf_version_tree *basever;
+ const char *soname;
+
+ for (sym = global_syms; *sym != NULL; sym++)
+ {
+ /* Create a version pattern for this symbol. Some of them start
+ off as local, others as global, so try both. */
+ globals = lang_new_vers_pattern (globals, *sym, NULL, TRUE);
+ locals = lang_new_vers_pattern (locals, *sym, NULL, TRUE);
+ }
+
+ /* New version node for those symbols. */
+ basever = lang_new_vers_node (globals, locals);
+
+ /* The version name matches what bfd_elf_size_dynamic_sections uses
+ for the base version. */
+ soname = bfd_elf_get_dt_soname (link_info.output_bfd);
+ if (soname == NULL)
+ soname = lbasename (bfd_get_filename (link_info.output_bfd));
+
+ /* Register the node. */
+ lang_register_vers_node (soname, basever, NULL);
+ /* Enforce base version. The encoded vd_ndx is vernum + 1. */
+ basever->vernum = 0;
+ }
+
+ gld${EMULATION_NAME}_before_allocation ();
+}
+
+/* The Solaris 2 ABI requires two local symbols to be emitted for every
+ executable and shared object.
+
+ Cf. Linker and Libraries Guide, Ch. 2, Link-Editor, Generating the Output
+ File, p.63. */
+static void
+elf_solaris2_after_allocation (void)
+{
+ /* Local symbols required by the Solaris 2 ABI. Already emitted by
+ emulparams/solaris2.sh. */
+ static const char *local_syms[] = {
+ "_START_",
+ "_END_",
+ NULL
+ };
+ const char **sym;
+
+ /* Do this for both executables and shared objects. */
+ if (!link_info.relocatable)
+ {
+ for (sym = local_syms; *sym != NULL; sym++)
+ {
+ struct elf_link_hash_entry *h;
+
+ /* Lookup symbol. */
+ h = elf_link_hash_lookup (elf_hash_table (&link_info), *sym,
+ FALSE, FALSE, FALSE);
+ if (h == NULL)
+ continue;
+
+ /* Turn it local. */
+ h->forced_local = 1;
+ /* Type should be STT_OBJECT, not STT_NOTYPE. */
+ h->type = STT_OBJECT;
+ }
+ }
+
+ gld${EMULATION_NAME}_after_allocation ();
+}
+
+EOF
+
+LDEMUL_BEFORE_ALLOCATION=elf_solaris2_before_allocation
+LDEMUL_AFTER_ALLOCATION=elf_solaris2_after_allocation
diff --git a/binutils-2.21/ld/emultempl/spu_icache.S b/binutils-2.21/ld/emultempl/spu_icache.S
new file mode 100644
index 0000000..12eb7f1
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/spu_icache.S
@@ -0,0 +1,7 @@
+ .text
+ .global __icache_br_handler
+__icache_br_handler:
+ stop
+ .global __icache_call_handler
+__icache_call_handler:
+ stop
diff --git a/binutils-2.21/ld/emultempl/spu_icache.o_c b/binutils-2.21/ld/emultempl/spu_icache.o_c
new file mode 100644
index 0000000..2006fe2
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/spu_icache.o_c
@@ -0,0 +1,33 @@
+0x7f,0x45,0x4c,0x46,0x01,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x01,0x00,0x17,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x28,
+0x00,0x07,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2e,0x73,0x79,
+0x6d,0x74,0x61,0x62,0x00,0x2e,0x73,0x74,0x72,0x74,0x61,0x62,0x00,0x2e,0x73,0x68,
+0x73,0x74,0x72,0x74,0x61,0x62,0x00,0x2e,0x74,0x65,0x78,0x74,0x00,0x2e,0x64,0x61,
+0x74,0x61,0x00,0x2e,0x62,0x73,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,
+0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x03,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x2c,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,
+0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x03,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xe0,0x00,0x00,0x00,0x2b,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x01,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x02,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x03,
+0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x01,
+0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x01,
+0x00,0x5f,0x5f,0x69,0x63,0x61,0x63,0x68,0x65,0x5f,0x62,0x72,0x5f,0x68,0x61,0x6e,
+0x64,0x6c,0x65,0x72,0x00,0x5f,0x5f,0x69,0x63,0x61,0x63,0x68,0x65,0x5f,0x63,0x61,
+0x6c,0x6c,0x5f,0x68,0x61,0x6e,0x64,0x6c,0x65,0x72,0x00,
diff --git a/binutils-2.21/ld/emultempl/spu_ovl.S b/binutils-2.21/ld/emultempl/spu_ovl.S
new file mode 100644
index 0000000..509397a
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/spu_ovl.S
@@ -0,0 +1,471 @@
+/* Overlay manager for SPU.
+
+ Copyright 2006, 2007, 2008 Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/* MFC DMA defn's. */
+#define MFC_GET_CMD 0x40
+#define MFC_MAX_DMA_SIZE 0x4000
+#define MFC_TAG_UPDATE_ALL 2
+#define MFC_TAG_ID 0
+
+/* Register usage. */
+#define reserved1 $75
+#define parm $75
+#define tab1 reserved1
+#define tab2 reserved1
+#define vma reserved1
+#define oldvma reserved1
+#define newmask reserved1
+#define map reserved1
+
+#define reserved2 $76
+#define off1 reserved2
+#define off2 reserved2
+#define present1 reserved2
+#define present2 reserved2
+#define sz reserved2
+#define cmp reserved2
+#define add64 reserved2
+#define cgbits reserved2
+#define off3 reserved2
+#define off4 reserved2
+#define addr4 reserved2
+#define off5 reserved2
+#define tagstat reserved2
+
+#define reserved3 $77
+#define size1 reserved3
+#define size2 reserved3
+#define rv3 reserved3
+#define ealo reserved3
+#define cmd reserved3
+#define off64 reserved3
+#define tab3 reserved3
+#define tab4 reserved3
+#define tab5 reserved3
+
+#define reserved4 $78
+#define ovl reserved4
+#define rv2 reserved4
+#define rv5 reserved4
+#define cgshuf reserved4
+#define newovl reserved4
+#define irqtmp1 reserved4
+#define irqtmp2 reserved4
+
+#define reserved5 $79
+#define target reserved5
+
+#define save1 $74
+#define rv4 save1
+#define rv7 save1
+#define tagid save1
+#define maxsize save1
+#define pbyte save1
+#define pbit save1
+
+#define save2 $73
+#define cur save2
+#define rv6 save2
+#define osize save2
+#define zovl save2
+#define oldovl save2
+#define newvma save2
+
+#define save3 $72
+#define rv1 save3
+#define ea64 save3
+#define buf3 save3
+#define genwi save3
+#define newmap save3
+#define oldmask save3
+
+#define save4 $71
+#define irq_stat save4
+
+ .text
+ .align 4
+ .type __rv_pattern, @object
+ .size __rv_pattern, 16
+__rv_pattern:
+ .word 0x00010203, 0x10111213, 0x80808080, 0x80808080
+
+ .type __cg_pattern, @object
+ .size __cg_pattern, 16
+__cg_pattern:
+ .word 0x04050607, 0x80808080, 0x80808080, 0x80808080
+
+ .type __ovly_current, @object
+ .size __ovly_current, 16
+__ovly_current:
+ .space 16
+
+/*
+ * __ovly_return - stub for returning from overlay functions.
+ *
+ * On entry the four slots of $lr are:
+ * __ovly_return, prev ovl index, caller return addr, undefined.
+ *
+ * Load the previous overlay and jump to the caller return address.
+ * Updates __ovly_current.
+ */
+ .align 4
+ .global __ovly_return
+ .type __ovly_return, @function
+__ovly_return:
+ ila tab1, _ovly_table - 16 # 0,2 0
+ shlqbyi ovl, $lr, 4 # 1,4 0
+#nop
+ shlqbyi target, $lr, 8 # 1,4 1
+#nop; lnop
+#nop; lnop
+ shli off1, ovl, 4 # 0,4 4
+#lnop
+#nop
+ hbr ovly_ret9, target # 1,15 5
+#nop; lnop
+#nop; lnop
+#nop
+ lqx vma, tab1, off1 # 1,6 8
+#ifdef OVLY_IRQ_SAVE
+ nop
+ stqd save4, -64($sp) # 1,6 9
+#else
+#nop; lnop
+#endif
+#nop; lnop
+#nop; lnop
+#nop; lnop
+#nop; lnop
+#nop
+ rotqbyi size1, vma, 4 # 1,4 14
+#nop
+ stqd save3, -48($sp) # 1,6 15
+#nop
+ stqd save2, -32($sp) # 1,6 16
+#nop
+ stqd save1, -16($sp) # 1,6 17
+ andi present1, size1, 1 # 0,2 18
+ stqr ovl, __ovly_current # 1,6 18
+#nop; lnop
+#nop
+ brz present1, do_load # 1,4 20
+ovly_ret9:
+#nop
+ bi target # 1,4 21
+
+/*
+ * __ovly_load - copy an overlay partion to local store.
+ *
+ * On entry $75 points to a word consisting of the overlay index in
+ * the top 14 bits, and the target address in the bottom 18 bits.
+ *
+ * Sets up $lr to return via __ovly_return. If $lr is already set
+ * to return via __ovly_return, don't change it. In that case we
+ * have a tail call from one overlay function to another.
+ * Updates __ovly_current.
+ */
+ .align 3
+ .global __ovly_load
+ .type __ovly_load, @function
+__ovly_load:
+#if OVL_STUB_SIZE == 8
+########
+#nop
+ lqd target, 0(parm) # 1,6 -11
+#nop; lnop
+#nop; lnop
+#nop; lnop
+#nop; lnop
+#nop; lnop
+#nop
+ rotqby target, target, parm # 1,4 -5
+ ila tab2, _ovly_table - 16 # 0,2 -4
+ stqd save3, -48($sp) # 1,6 -4
+#nop
+ stqd save2, -32($sp) # 1,6 -3
+#nop
+ stqd save1, -16($sp) # 1,6 -2
+ rotmi ovl, target, -18 # 0,4 -1
+ hbr ovly_load9, target # 1,15 -1
+ ila rv1, __ovly_return # 0,2 0
+#lnop
+#nop; lnop
+#nop
+ lqr cur, __ovly_current # 1,6 2
+ shli off2, ovl, 4 # 0,4 3
+ stqr ovl, __ovly_current # 1,6 3
+ ceq rv2, $lr, rv1 # 0,2 4
+ lqr rv3, __rv_pattern # 1,6 4
+#nop; lnop
+#nop; lnop
+#nop
+ lqx vma, tab2, off2 # 1,6 7
+########
+#else /* OVL_STUB_SIZE == 16 */
+########
+ ila tab2, _ovly_table - 16 # 0,2 0
+ stqd save3, -48($sp) # 1,6 0
+ ila rv1, __ovly_return # 0,2 1
+ stqd save2, -32($sp) # 1,6 1
+ shli off2, ovl, 4 # 0,4 2
+ lqr cur, __ovly_current # 1,6 2
+ nop
+ stqr ovl, __ovly_current # 1,6 3
+ ceq rv2, $lr, rv1 # 0,2 4
+ lqr rv3, __rv_pattern # 1,6 4
+#nop
+ hbr ovly_load9, target # 1,15 5
+#nop
+ lqx vma, tab2, off2 # 1,6 6
+#nop
+ stqd save1, -16($sp) # 1,6 7
+########
+#endif
+
+#nop; lnop
+#nop; lnop
+#nop
+ shufb rv4, rv1, cur, rv3 # 1,4 10
+#nop
+ fsmb rv5, rv2 # 1,4 11
+#nop
+ rotqmbyi rv6, $lr, -8 # 1,4 12
+#nop
+ rotqbyi size2, vma, 4 # 1,4 13
+#nop
+ lqd save3, -48($sp) # 1,6 14
+#nop; lnop
+ or rv7, rv4, rv6 # 0,2 16
+ lqd save2, -32($sp) # 1,6 16
+ andi present2, size2, 1 # 0,2 17
+#ifdef OVLY_IRQ_SAVE
+ stqd save4, -64($sp) # 1,6 17
+#else
+ lnop # 1,0 17
+#endif
+ selb $lr, rv7, $lr, rv5 # 0,2 18
+ lqd save1, -16($sp) # 1,6 18
+#nop
+ brz present2, do_load # 1,4 19
+ovly_load9:
+#nop
+ bi target # 1,4 20
+
+/* If we get here, we are about to load a new overlay.
+ * "vma" contains the relevant entry from _ovly_table[].
+ * extern struct {
+ * u32 vma;
+ * u32 size;
+ * u32 file_offset;
+ * u32 buf;
+ * } _ovly_table[];
+ */
+ .align 3
+ .global __ovly_load_event
+ .type __ovly_load_event, @function
+__ovly_load_event:
+do_load:
+#ifdef OVLY_IRQ_SAVE
+ ila irqtmp1, do_load10 # 0,2 -5
+ rotqbyi sz, vma, 8 # 1,4 -5
+#nop
+ rdch irq_stat, $SPU_RdMachStat # 1,6 -4
+#nop
+ bid irqtmp1 # 1,4 -3
+do_load10:
+ nop
+#else
+#nop
+ rotqbyi sz, vma, 8 # 1,4 0
+#endif
+ rotqbyi osize, vma, 4 # 1,4 1
+#nop
+ lqa ea64, _EAR_ # 1,6 2
+#nop
+ lqr cgshuf, __cg_pattern # 1,6 3
+
+/* We could predict the branch at the end of this loop by adding a few
+ instructions, and there are plenty of free cycles to do so without
+ impacting loop execution time. However, it doesn't make a great
+ deal of sense since we need to wait for the dma to complete anyway. */
+__ovly_xfer_loop:
+#nop
+ rotqmbyi off64, sz, -4 # 1,4 4
+#nop; lnop
+#nop; lnop
+#nop; lnop
+ cg cgbits, ea64, off64 # 0,2 8
+#lnop
+#nop; lnop
+#nop
+ shufb add64, cgbits, cgbits, cgshuf # 1,4 10
+#nop; lnop
+#nop; lnop
+#nop; lnop
+ addx add64, ea64, off64 # 0,2 14
+#lnop
+ ila maxsize, MFC_MAX_DMA_SIZE # 0,2 15
+ lnop
+ ori ea64, add64, 0 # 0,2 16
+ rotqbyi ealo, add64, 4 # 1,4 16
+ cgt cmp, osize, maxsize # 0,2 17
+ wrch $MFC_LSA, vma # 1,6 17
+#nop; lnop
+ selb sz, osize, maxsize, cmp # 0,2 19
+ wrch $MFC_EAH, ea64 # 1,6 19
+ ila tagid, MFC_TAG_ID # 0,2 20
+ wrch $MFC_EAL, ealo # 1,6 20
+ ila cmd, MFC_GET_CMD # 0,2 21
+ wrch $MFC_Size, sz # 1,6 21
+ sf osize, sz, osize # 0,2 22
+ wrch $MFC_TagId, tagid # 1,6 22
+ a vma, vma, sz # 0,2 23
+ wrch $MFC_Cmd, cmd # 1,6 23
+#nop
+ brnz osize, __ovly_xfer_loop # 1,4 24
+
+/* Now update our data structions while waiting for DMA to complete.
+ Low bit of .size needs to be cleared on the _ovly_table entry
+ corresponding to the evicted overlay, and set on the entry for the
+ newly loaded overlay. Note that no overlay may in fact be evicted
+ as _ovly_buf_table[] starts with all zeros. Don't zap .size entry
+ for zero index! Also of course update the _ovly_buf_table entry. */
+#nop
+ lqr newovl, __ovly_current # 1,6 25
+#nop; lnop
+#nop; lnop
+#nop; lnop
+#nop; lnop
+#nop; lnop
+ shli off3, newovl, 4 # 0,4 31
+#lnop
+ ila tab3, _ovly_table - 16 # 0,2 32
+#lnop
+#nop
+ fsmbi pbyte, 0x100 # 1,4 33
+#nop; lnop
+#nop
+ lqx vma, tab3, off3 # 1,6 35
+#nop; lnop
+ andi pbit, pbyte, 1 # 0,2 37
+ lnop
+#nop; lnop
+#nop; lnop
+#nop; lnop
+ or newvma, vma, pbit # 0,2 41
+ rotqbyi buf3, vma, 12 # 1,4 41
+#nop; lnop
+#nop
+ stqx newvma, tab3, off3 # 1,6 43
+#nop; lnop
+ shli off4, buf3, 2 # 1,4 45
+#lnop
+ ila tab4, _ovly_buf_table - 4 # 0,2 46
+#lnop
+#nop; lnop
+#nop; lnop
+#nop
+ lqx map, tab4, off4 # 1,6 49
+#nop
+ cwx genwi, tab4, off4 # 1,4 50
+ a addr4, tab4, off4 # 0,2 51
+#lnop
+#nop; lnop
+#nop; lnop
+#nop; lnop
+#nop
+ rotqby oldovl, map, addr4 # 1,4 55
+#nop
+ shufb newmap, newovl, map, genwi # 0,4 56
+#if MFC_TAG_ID < 16
+ ila newmask, 1 << MFC_TAG_ID # 0,2 57
+#else
+ ilhu newmask, 1 << (MFC_TAG_ID - 16) # 0,2 57
+#endif
+#lnop
+#nop; lnop
+#nop; lnop
+ stqd newmap, 0(addr4) # 1,6 60
+
+/* Save app's tagmask, wait for DMA complete, restore mask. */
+ ila tagstat, MFC_TAG_UPDATE_ALL # 0,2 61
+ rdch oldmask, $MFC_RdTagMask # 1,6 61
+#nop
+ wrch $MFC_WrTagMask, newmask # 1,6 62
+#nop
+ wrch $MFC_WrTagUpdate, tagstat # 1,6 63
+#nop
+ rdch tagstat, $MFC_RdTagStat # 1,6 64
+#nop
+ sync # 1,4 65
+/* Any hint prior to the sync is lost. A hint here allows the branch
+ to complete 15 cycles after the hint. With no hint the branch will
+ take 18 or 19 cycles. */
+ ila tab5, _ovly_table - 16 # 0,2 66
+ hbr do_load99, target # 1,15 66
+ shli off5, oldovl, 4 # 0,4 67
+ wrch $MFC_WrTagMask, oldmask # 1,6 67
+ ceqi zovl, oldovl, 0 # 0,2 68
+#lnop
+#nop; lnop
+#nop
+ fsm zovl, zovl # 1,4 70
+#nop
+ lqx oldvma, tab5, off5 # 1,6 71
+#nop
+ lqd save3, -48($sp) # 1,6 72
+#nop; lnop
+ andc pbit, pbit, zovl # 0,2 74
+ lqd save2, -32($sp) # 1,6 74
+#ifdef OVLY_IRQ_SAVE
+ ila irqtmp2, do_load90 # 0,2 75
+#lnop
+ andi irq_stat, irq_stat, 1 # 0,2 76
+#lnop
+#else
+#nop; lnop
+#nop; lnop
+#endif
+ andc oldvma, oldvma, pbit # 0,2 77
+ lqd save1, -16($sp) # 1,6 77
+ nop # 0,0 78
+#lnop
+#nop
+ stqx oldvma, tab5, off5 # 1,6 79
+#nop
+#ifdef OVLY_IRQ_SAVE
+ binze irq_stat, irqtmp2 # 1,4 80
+do_load90:
+#nop
+ lqd save4, -64($sp) # 1,6 84
+#else
+#nop; lnop
+#endif
+
+ .global _ovly_debug_event
+ .type _ovly_debug_event, @function
+_ovly_debug_event:
+ nop
+/* Branch to target address. */
+do_load99:
+ bi target # 1,4 81/85
+
+ .size __ovly_load, . - __ovly_load
diff --git a/binutils-2.21/ld/emultempl/spu_ovl.o_c b/binutils-2.21/ld/emultempl/spu_ovl.o_c
new file mode 100644
index 0000000..c9eff93
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/spu_ovl.o_c
@@ -0,0 +1,101 @@
+0x7f,0x45,0x4c,0x46,0x01,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x01,0x00,0x17,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x02,0x74,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x28,
+0x00,0x08,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x01,0x02,0x03,0x10,0x11,0x12,0x13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+0x04,0x05,0x06,0x07,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x42,0x00,0x00,0x4b,0x3f,0xe1,0x00,0x4e,0x3f,0xe2,0x00,0x4f,0x0f,0x61,0x27,0x4c,
+0x35,0x80,0x27,0x8b,0x38,0x93,0x25,0xcb,0x40,0x20,0x00,0x00,0x24,0xff,0x00,0xc7,
+0x3f,0x81,0x25,0xcd,0x24,0xff,0x40,0xc8,0x24,0xff,0x80,0xc9,0x24,0xff,0xc0,0xca,
+0x14,0x00,0x66,0xcc,0x23,0xff,0xf7,0xce,0x20,0x00,0x0e,0x4c,0x35,0x00,0x27,0x80,
+0x42,0x00,0x00,0x4b,0x24,0xff,0x40,0xc8,0x42,0x00,0x00,0x48,0x24,0xff,0x80,0xc9,
+0x0f,0x61,0x27,0x4c,0x33,0xff,0xf3,0xc9,0x40,0x20,0x00,0x00,0x23,0xff,0xf2,0xce,
+0x78,0x12,0x00,0x4e,0x33,0xff,0xed,0xcd,0x35,0x80,0x27,0x8f,0x38,0x93,0x25,0xcb,
+0x24,0xff,0xc0,0xca,0xb9,0x52,0x64,0x4d,0x36,0xc0,0x27,0x4e,0x3f,0xbe,0x00,0x49,
+0x3f,0x81,0x25,0xcd,0x34,0xff,0x40,0xc8,0x08,0x32,0x65,0x4a,0x34,0xff,0x80,0xc9,
+0x14,0x00,0x66,0xcc,0x24,0xff,0x00,0xc7,0x80,0x00,0x25,0x4e,0x34,0xff,0xc0,0xca,
+0x20,0x00,0x01,0x4c,0x35,0x00,0x27,0x80,0x42,0x00,0x00,0x4e,0x3f,0x82,0x25,0xcc,
+0x01,0xa0,0x06,0xc7,0x35,0x08,0x27,0x00,0x40,0x20,0x00,0x00,0x3f,0x81,0x25,0xc9,
+0x30,0x80,0x00,0x48,0x33,0xff,0xe3,0xce,0x3f,0xbf,0x26,0x4d,0x18,0x53,0x64,0x4c,
+0xb9,0x93,0x26,0x4e,0x68,0x13,0x64,0x4c,0x42,0x20,0x00,0x4a,0x00,0x20,0x00,0x00,
+0x04,0x00,0x26,0x48,0x3f,0x81,0x26,0x4d,0x48,0x12,0xa4,0xcc,0x21,0xa0,0x08,0x4b,
+0x89,0x92,0xa4,0xcc,0x21,0xa0,0x08,0xc8,0x42,0x00,0x00,0x4a,0x21,0xa0,0x09,0x4d,
+0x42,0x00,0x20,0x4d,0x21,0xa0,0x09,0xcc,0x08,0x12,0x66,0x49,0x21,0xa0,0x0a,0x4a,
+0x18,0x13,0x25,0xcb,0x21,0xa0,0x0a,0xcd,0x21,0x7f,0xf6,0x49,0x33,0xff,0xda,0xce,
+0x0f,0x61,0x27,0x4c,0x42,0x00,0x00,0x4d,0x32,0x80,0x80,0x4a,0x38,0x93,0x26,0xcb,
+0x14,0x00,0x65,0x4a,0x00,0x20,0x00,0x00,0x08,0x32,0xa5,0xc9,0x3f,0x83,0x25,0xc8,
+0x28,0x93,0x26,0xc9,0x0f,0x60,0xa4,0x4c,0x42,0x00,0x00,0x4d,0x38,0x93,0x26,0xcb,
+0x3a,0xd3,0x26,0xc8,0x18,0x13,0x26,0xcc,0x3b,0x93,0x25,0xc9,0xb9,0x12,0xe7,0x48,
+0x42,0x00,0x00,0xcb,0x24,0x00,0x26,0x48,0x42,0x00,0x01,0x4c,0x01,0xa0,0x06,0x48,
+0x21,0xa0,0x0b,0x4b,0x21,0xa0,0x0b,0xcc,0x01,0xa0,0x0c,0x4c,0x00,0x40,0x00,0x00,
+0x42,0x00,0x00,0x4d,0x35,0x80,0x27,0x92,0x0f,0x61,0x24,0xcc,0x21,0xa0,0x0b,0x48,
+0x7c,0x00,0x24,0xc9,0x36,0x80,0x24,0xc9,0x38,0x93,0x26,0xcb,0x34,0xff,0x40,0xc8,
+0x58,0x32,0x65,0x4a,0x34,0xff,0x80,0xc9,0x42,0x00,0x00,0x4e,0x14,0x00,0x63,0xc7,
+0x58,0x32,0xa5,0xcb,0x34,0xff,0xc0,0xca,0x40,0x20,0x00,0x00,0x28,0x93,0x26,0xcb,
+0x25,0x24,0x27,0x47,0x34,0xff,0x00,0xc7,0x40,0x20,0x00,0x00,0x35,0x00,0x27,0x80,
+0x00,0x2e,0x73,0x79,0x6d,0x74,0x61,0x62,0x00,0x2e,0x73,0x74,0x72,0x74,0x61,0x62,
+0x00,0x2e,0x73,0x68,0x73,0x74,0x72,0x74,0x61,0x62,0x00,0x2e,0x72,0x65,0x6c,0x61,
+0x2e,0x74,0x65,0x78,0x74,0x00,0x2e,0x64,0x61,0x74,0x61,0x00,0x2e,0x62,0x73,0x73,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,
+0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,
+0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x05,0xdc,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x06,
+0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x26,
+0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x40,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x03,
+0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,
+0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x40,
+0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xb4,0x00,0x00,0x01,0x50,0x00,0x00,0x00,0x07,
+0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x09,
+0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x04,
+0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,
+0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,
+0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x10,
+0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x62,0x00,0x00,0x01,0xfc,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x6c,0x00,0x00,0x01,0xf4,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,
+0x12,0x00,0x00,0x01,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x70,0x00,0x00,0x01,0x90,
+0x12,0x00,0x00,0x01,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x00,
+0x12,0x00,0x00,0x01,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0x00,0x00,0x01,0xf8,0x00,0x00,0x00,0x00,
+0x12,0x00,0x00,0x01,0x00,0x5f,0x5f,0x72,0x76,0x5f,0x70,0x61,0x74,0x74,0x65,0x72,
+0x6e,0x00,0x5f,0x5f,0x63,0x67,0x5f,0x70,0x61,0x74,0x74,0x65,0x72,0x6e,0x00,0x5f,
+0x5f,0x6f,0x76,0x6c,0x79,0x5f,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x00,0x6f,0x76,
+0x6c,0x79,0x5f,0x72,0x65,0x74,0x39,0x00,0x64,0x6f,0x5f,0x6c,0x6f,0x61,0x64,0x00,
+0x6f,0x76,0x6c,0x79,0x5f,0x6c,0x6f,0x61,0x64,0x39,0x00,0x64,0x6f,0x5f,0x6c,0x6f,
+0x61,0x64,0x31,0x30,0x00,0x5f,0x5f,0x6f,0x76,0x6c,0x79,0x5f,0x78,0x66,0x65,0x72,
+0x5f,0x6c,0x6f,0x6f,0x70,0x00,0x64,0x6f,0x5f,0x6c,0x6f,0x61,0x64,0x39,0x39,0x00,
+0x64,0x6f,0x5f,0x6c,0x6f,0x61,0x64,0x39,0x30,0x00,0x5f,0x5f,0x6f,0x76,0x6c,0x79,
+0x5f,0x72,0x65,0x74,0x75,0x72,0x6e,0x00,0x5f,0x6f,0x76,0x6c,0x79,0x5f,0x74,0x61,
+0x62,0x6c,0x65,0x00,0x5f,0x5f,0x6f,0x76,0x6c,0x79,0x5f,0x6c,0x6f,0x61,0x64,0x00,
+0x5f,0x5f,0x6f,0x76,0x6c,0x79,0x5f,0x6c,0x6f,0x61,0x64,0x5f,0x65,0x76,0x65,0x6e,
+0x74,0x00,0x5f,0x45,0x41,0x52,0x5f,0x00,0x5f,0x6f,0x76,0x6c,0x79,0x5f,0x62,0x75,
+0x66,0x5f,0x74,0x61,0x62,0x6c,0x65,0x00,0x5f,0x6f,0x76,0x6c,0x79,0x5f,0x64,0x65,
+0x62,0x75,0x67,0x5f,0x65,0x76,0x65,0x6e,0x74,0x00,0x00,0x00,0x00,0x00,0x00,0x30,
+0x00,0x00,0x0f,0x05,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x70,0x00,0x00,0x0f,0x05,
+0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x78,0x00,0x00,0x0e,0x05,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0xd8,0x00,0x00,0x01,0x05,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf0,
+0x00,0x00,0x12,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x54,0x00,0x00,0x0f,0x05,
+0xff,0xff,0xff,0xf0,0x00,0x00,0x01,0x78,0x00,0x00,0x13,0x05,0xff,0xff,0xff,0xfc,
+0x00,0x00,0x01,0xb0,0x00,0x00,0x0f,0x05,0xff,0xff,0xff,0xf0,0x00,0x00,0x01,0xd8,
+0x00,0x00,0x01,0x05,0x00,0x00,0x01,0xf4,
diff --git a/binutils-2.21/ld/emultempl/spuelf.em b/binutils-2.21/ld/emultempl/spuelf.em
new file mode 100644
index 0000000..2ea760a
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/spuelf.em
@@ -0,0 +1,824 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em, and defines extra spu specific
+# features.
+#
+fragment <<EOF
+#include "ldctor.h"
+#include "elf32-spu.h"
+
+static void spu_place_special_section (asection *, asection *, const char *);
+static bfd_size_type spu_elf_load_ovl_mgr (void);
+static FILE *spu_elf_open_overlay_script (void);
+static void spu_elf_relink (void);
+
+static struct spu_elf_params params =
+{
+ &spu_place_special_section,
+ &spu_elf_load_ovl_mgr,
+ &spu_elf_open_overlay_script,
+ &spu_elf_relink,
+ 0, ovly_normal, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0x3ffff,
+ 1, 0, 16, 0, 0, 2000
+};
+
+static unsigned int no_overlays = 0;
+static unsigned int num_lines_set = 0;
+static unsigned int line_size_set = 0;
+static char *auto_overlay_file = 0;
+int my_argc;
+char **my_argv;
+
+static const char ovl_mgr[] = {
+EOF
+
+if ! cat ${srcdir}/emultempl/spu_ovl.o_c >> e${EMULATION_NAME}.c
+then
+ echo >&2 "Missing ${srcdir}/emultempl/spu_ovl.o_c"
+ echo >&2 "You must build gas/as-new with --target=spu"
+ exit 1
+fi
+
+fragment <<EOF
+};
+
+static const char icache_mgr[] = {
+EOF
+
+if ! cat ${srcdir}/emultempl/spu_icache.o_c >> e${EMULATION_NAME}.c
+then
+ echo >&2 "Missing ${srcdir}/emultempl/spu_icache.o_c"
+ echo >&2 "You must build gas/as-new with --target=spu"
+ exit 1
+fi
+
+fragment <<EOF
+};
+
+static const struct _ovl_stream ovl_mgr_stream = {
+ ovl_mgr,
+ ovl_mgr + sizeof (ovl_mgr)
+};
+
+static const struct _ovl_stream icache_mgr_stream = {
+ icache_mgr,
+ icache_mgr + sizeof (icache_mgr)
+};
+
+
+static int
+is_spu_target (void)
+{
+ extern const bfd_target bfd_elf32_spu_vec;
+
+ return link_info.output_bfd->xvec == &bfd_elf32_spu_vec;
+}
+
+/* Create our note section. */
+
+static void
+spu_after_open (void)
+{
+ if (is_spu_target ())
+ {
+ /* Pass params to backend. */
+ if ((params.auto_overlay & AUTO_OVERLAY) == 0)
+ params.auto_overlay = 0;
+ params.emit_stub_syms |= link_info.emitrelocations;
+ spu_elf_setup (&link_info, &params);
+
+ if (link_info.relocatable)
+ lang_add_unique (".text.ia.*");
+
+ if (!link_info.relocatable
+ && link_info.input_bfds != NULL
+ && !spu_elf_create_sections (&link_info))
+ einfo ("%X%P: can not create note section: %E\n");
+ }
+
+ gld${EMULATION_NAME}_after_open ();
+}
+
+/* If O is NULL, add section S at the end of output section OUTPUT_NAME.
+ If O is not NULL, add section S at the beginning of output section O,
+ except for soft-icache which adds to the end.
+
+ Really, we should be duplicating ldlang.c map_input_to_output_sections
+ logic here, ie. using the linker script to find where the section
+ goes. That's rather a lot of code, and we don't want to run
+ map_input_to_output_sections again because most sections are already
+ mapped. So cheat, and put the section in a fixed place, ignoring any
+ attempt via a linker script to put .stub, .ovtab, and built-in
+ overlay manager code somewhere else. */
+
+static void
+spu_place_special_section (asection *s, asection *o, const char *output_name)
+{
+ lang_output_section_statement_type *os;
+
+ if (o != NULL)
+ output_name = o->name;
+ os = lang_output_section_find (output_name);
+ if (os == NULL)
+ {
+ os = gld${EMULATION_NAME}_place_orphan (s, output_name, 0);
+ os->addr_tree = NULL;
+ }
+ else if (params.ovly_flavour != ovly_soft_icache
+ && o != NULL && os->children.head != NULL)
+ {
+ lang_statement_list_type add;
+
+ lang_list_init (&add);
+ lang_add_section (&add, s, os);
+ *add.tail = os->children.head;
+ os->children.head = add.head;
+ }
+ else
+ {
+ if (params.ovly_flavour == ovly_soft_icache && o != NULL)
+ {
+ /* Pad this stub section so that it finishes at the
+ end of the icache line. */
+ etree_type *e_size;
+
+ push_stat_ptr (&os->children);
+ e_size = exp_intop (params.line_size - s->size);
+ lang_add_assignment (exp_assop ('=', ".", e_size));
+ pop_stat_ptr ();
+ }
+ lang_add_section (&os->children, s, os);
+ }
+
+ s->output_section->size += s->size;
+}
+
+/* Load built-in overlay manager. */
+
+static bfd_size_type
+spu_elf_load_ovl_mgr (void)
+{
+ struct elf_link_hash_entry *h;
+ const char *ovly_mgr_entry;
+ const struct _ovl_stream *mgr_stream;
+ bfd_size_type total = 0;
+
+ ovly_mgr_entry = "__ovly_load";
+ mgr_stream = &ovl_mgr_stream;
+ if (params.ovly_flavour == ovly_soft_icache)
+ {
+ ovly_mgr_entry = "__icache_br_handler";
+ mgr_stream = &icache_mgr_stream;
+ }
+ h = elf_link_hash_lookup (elf_hash_table (&link_info),
+ ovly_mgr_entry, FALSE, FALSE, FALSE);
+
+ if (h != NULL
+ && (h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
+ && h->def_regular)
+ {
+ /* User supplied __ovly_load. */
+ }
+ else if (mgr_stream->start == mgr_stream->end)
+ einfo ("%F%P: no built-in overlay manager\n");
+ else
+ {
+ lang_input_statement_type *ovl_is;
+
+ ovl_is = lang_add_input_file ("builtin ovl_mgr",
+ lang_input_file_is_file_enum,
+ NULL);
+
+ if (!spu_elf_open_builtin_lib (&ovl_is->the_bfd, mgr_stream))
+ einfo ("%X%P: can not open built-in overlay manager: %E\n");
+ else
+ {
+ asection *in;
+
+ if (!load_symbols (ovl_is, NULL))
+ einfo ("%X%P: can not load built-in overlay manager: %E\n");
+
+ /* Map overlay manager sections to output sections.
+ First try for a matching output section name, if that
+ fails then try mapping .abc.xyz to .abc, otherwise map
+ to .text. */
+ for (in = ovl_is->the_bfd->sections; in != NULL; in = in->next)
+ if ((in->flags & (SEC_ALLOC | SEC_LOAD))
+ == (SEC_ALLOC | SEC_LOAD))
+ {
+ const char *oname = in->name;
+ if (strncmp (in->name, ".ovl.init", 9) != 0)
+ {
+ total += in->size;
+ if (!lang_output_section_find (oname))
+ {
+ lang_output_section_statement_type *os = NULL;
+ char *p = strchr (oname + 1, '.');
+ if (p != NULL)
+ {
+ size_t len = p - oname;
+ p = memcpy (xmalloc (len + 1), oname, len);
+ p[len] = '\0';
+ os = lang_output_section_find (p);
+ free (p);
+ }
+ if (os != NULL)
+ oname = os->name;
+ else
+ oname = ".text";
+ }
+ }
+
+ spu_place_special_section (in, NULL, oname);
+ }
+ }
+ }
+ return total;
+}
+
+/* Go find if we need to do anything special for overlays. */
+
+static void
+spu_before_allocation (void)
+{
+ if (is_spu_target ()
+ && !link_info.relocatable
+ && !no_overlays)
+ {
+ int ret;
+
+ /* Size the sections. This is premature, but we need to know the
+ rough layout so that overlays can be found. */
+ expld.phase = lang_mark_phase_enum;
+ expld.dataseg.phase = exp_dataseg_none;
+ one_lang_size_sections_pass (NULL, TRUE);
+
+ /* Find overlays by inspecting section vmas. */
+ ret = spu_elf_find_overlays (&link_info);
+ if (ret == 0)
+ einfo ("%X%P: can not find overlays: %E\n");
+ else if (ret == 2)
+ {
+ lang_output_section_statement_type *os;
+
+ if (params.auto_overlay != 0)
+ {
+ einfo ("%P: --auto-overlay ignored with user overlay script\n");
+ params.auto_overlay = 0;
+ }
+
+ /* Ensure alignment of overlay sections is sufficient. */
+ for (os = &lang_output_section_statement.head->output_section_statement;
+ os != NULL;
+ os = os->next)
+ if (os->bfd_section != NULL
+ && spu_elf_section_data (os->bfd_section) != NULL
+ && spu_elf_section_data (os->bfd_section)->u.o.ovl_index != 0)
+ {
+ if (os->bfd_section->alignment_power < 4)
+ os->bfd_section->alignment_power = 4;
+
+ /* Also ensure size rounds up. */
+ os->block_value = 16;
+ }
+
+ ret = spu_elf_size_stubs (&link_info);
+ if (ret == 0)
+ einfo ("%X%P: can not size overlay stubs: %E\n");
+ else if (ret == 2)
+ spu_elf_load_ovl_mgr ();
+
+ spu_elf_place_overlay_data (&link_info);
+ }
+
+ /* We must not cache anything from the preliminary sizing. */
+ lang_reset_memory_regions ();
+ }
+
+ if (is_spu_target ()
+ && !link_info.relocatable)
+ spu_elf_size_sections (link_info.output_bfd, &link_info);
+
+ gld${EMULATION_NAME}_before_allocation ();
+}
+
+struct tflist {
+ struct tflist *next;
+ char name[9];
+};
+
+static struct tflist *tmp_file_list;
+
+static void clean_tmp (void)
+{
+ for (; tmp_file_list != NULL; tmp_file_list = tmp_file_list->next)
+ unlink (tmp_file_list->name);
+}
+
+static int
+new_tmp_file (char **fname)
+{
+ struct tflist *tf;
+ int fd;
+
+ if (tmp_file_list == NULL)
+ atexit (clean_tmp);
+ tf = xmalloc (sizeof (*tf));
+ tf->next = tmp_file_list;
+ tmp_file_list = tf;
+ memcpy (tf->name, "ldXXXXXX", sizeof (tf->name));
+ *fname = tf->name;
+#ifdef HAVE_MKSTEMP
+ fd = mkstemp (*fname);
+#else
+ *fname = mktemp (*fname);
+ if (*fname == NULL)
+ return -1;
+ fd = open (fname, O_RDWR | O_CREAT | O_EXCL, 0600);
+#endif
+ return fd;
+}
+
+static FILE *
+spu_elf_open_overlay_script (void)
+{
+ FILE *script = NULL;
+
+ if (auto_overlay_file == NULL)
+ {
+ int fd = new_tmp_file (&auto_overlay_file);
+ if (fd == -1)
+ goto file_err;
+ script = fdopen (fd, "w");
+ }
+ else
+ script = fopen (auto_overlay_file, "w");
+
+ if (script == NULL)
+ {
+ file_err:
+ einfo ("%F%P: can not open script: %E\n");
+ }
+ return script;
+}
+
+static void
+spu_elf_relink (void)
+{
+ char **argv = xmalloc ((my_argc + 4) * sizeof (*argv));
+
+ memcpy (argv, my_argv, my_argc * sizeof (*argv));
+ argv[my_argc++] = "--no-auto-overlay";
+ if (tmp_file_list->name == auto_overlay_file)
+ argv[my_argc - 1] = concat (argv[my_argc - 1], "=",
+ auto_overlay_file, (const char *) NULL);
+ argv[my_argc++] = "-T";
+ argv[my_argc++] = auto_overlay_file;
+ argv[my_argc] = 0;
+ execvp (argv[0], (char *const *) argv);
+ perror (argv[0]);
+ _exit (127);
+}
+
+/* Final emulation specific call. */
+
+static void
+gld${EMULATION_NAME}_finish (void)
+{
+ if (is_spu_target ())
+ {
+ if (params.local_store_lo < params.local_store_hi)
+ {
+ asection *s;
+
+ s = spu_elf_check_vma (&link_info);
+ if (s != NULL && !params.auto_overlay)
+ einfo ("%X%P: %A exceeds local store range\n", s);
+ }
+ else if (params.auto_overlay)
+ einfo ("%P: --auto-overlay ignored with zero local store range\n");
+ }
+
+ finish_default ();
+}
+
+static char *
+gld${EMULATION_NAME}_choose_target (int argc, char *argv[])
+{
+ my_argc = argc;
+ my_argv = argv;
+ return ldemul_default_target (argc, argv);
+}
+
+EOF
+
+if grep -q 'ld_elf.*ppc.*_emulation' ldemul-list.h; then
+ fragment <<EOF
+#include <errno.h>
+#include "filenames.h"
+#include "libiberty.h"
+
+static const char *
+base_name (const char *path)
+{
+ const char *file = strrchr (path, '/');
+#ifdef HAVE_DOS_BASED_FILE_SYSTEM
+ {
+ char *bslash = strrchr (path, '\\\\');
+
+ if (file == NULL || (bslash != NULL && bslash > file))
+ file = bslash;
+ if (file == NULL
+ && path[0] != '\0'
+ && path[1] == ':')
+ file = path + 1;
+ }
+#endif
+ if (file == NULL)
+ file = path;
+ else
+ ++file;
+ return file;
+}
+
+/* This function is called when building a ppc32 or ppc64 executable
+ to handle embedded spu images. */
+extern bfd_boolean embedded_spu_file (lang_input_statement_type *, const char *);
+
+bfd_boolean
+embedded_spu_file (lang_input_statement_type *entry, const char *flags)
+{
+ const char *cmd[6];
+ const char *pex_return;
+ const char *sym;
+ char *handle, *p;
+ char *oname;
+ int fd;
+ int status;
+ union lang_statement_union **old_stat_tail;
+ union lang_statement_union **old_file_tail;
+ union lang_statement_union *new_ent;
+ lang_input_statement_type *search;
+
+ if (entry->the_bfd->format != bfd_object
+ || strcmp (entry->the_bfd->xvec->name, "elf32-spu") != 0
+ || (entry->the_bfd->tdata.elf_obj_data->elf_header->e_type != ET_EXEC
+ && entry->the_bfd->tdata.elf_obj_data->elf_header->e_type != ET_DYN))
+ return FALSE;
+
+ /* Use the filename as the symbol marking the program handle struct. */
+ sym = base_name (entry->the_bfd->filename);
+
+ handle = xstrdup (sym);
+ for (p = handle; *p; ++p)
+ if (!(ISALNUM (*p) || *p == '$' || *p == '.'))
+ *p = '_';
+
+ fd = new_tmp_file (&oname);
+ if (fd == -1)
+ return FALSE;
+ close (fd);
+
+ for (search = (lang_input_statement_type *) input_file_chain.head;
+ search != NULL;
+ search = (lang_input_statement_type *) search->next_real_file)
+ if (search->filename != NULL)
+ {
+ const char *infile = base_name (search->filename);
+
+ if (strncmp (infile, "crtbegin", 8) == 0)
+ {
+ if (infile[8] == 'S')
+ flags = concat (flags, " -fPIC", (const char *) NULL);
+ else if (infile[8] == 'T')
+ flags = concat (flags, " -fpie", (const char *) NULL);
+ break;
+ }
+ }
+
+ cmd[0] = EMBEDSPU;
+ cmd[1] = flags;
+ cmd[2] = handle;
+ cmd[3] = entry->the_bfd->filename;
+ cmd[4] = oname;
+ cmd[5] = NULL;
+ if (trace_file_tries)
+ {
+ info_msg (_("running: %s \"%s\" \"%s\" \"%s\" \"%s\"\n"),
+ cmd[0], cmd[1], cmd[2], cmd[3], cmd[4]);
+ fflush (stdout);
+ }
+
+ pex_return = pex_one (PEX_SEARCH | PEX_LAST, cmd[0], (char *const *) cmd,
+ cmd[0], NULL, NULL, &status, &errno);
+ if (NULL != pex_return) {
+ if (strcmp ("embedspu", EMBEDSPU) != 0)
+ {
+ cmd[0] = "embedspu";
+ pex_return = pex_one (PEX_SEARCH | PEX_LAST, cmd[0], (char *const *) cmd,
+ cmd[0], NULL, NULL, &status, &errno);
+ }
+ if (NULL != pex_return) {
+ perror (pex_return);
+ _exit (127);
+ }
+ }
+ if (status)
+ return FALSE;
+
+
+ old_stat_tail = stat_ptr->tail;
+ old_file_tail = input_file_chain.tail;
+ if (lang_add_input_file (oname, lang_input_file_is_file_enum, NULL) == NULL)
+ return FALSE;
+
+ /* lang_add_input_file puts the new list entry at the end of the statement
+ and input file lists. Move it to just after the current entry. */
+ new_ent = *old_stat_tail;
+ *old_stat_tail = NULL;
+ stat_ptr->tail = old_stat_tail;
+ *old_file_tail = NULL;
+ input_file_chain.tail = old_file_tail;
+ new_ent->header.next = entry->header.next;
+ entry->header.next = new_ent;
+ new_ent->input_statement.next_real_file = entry->next_real_file;
+ entry->next_real_file = new_ent;
+
+ /* Ensure bfd sections are excluded from the output. */
+ bfd_section_list_clear (entry->the_bfd);
+ entry->loaded = TRUE;
+ return TRUE;
+}
+
+EOF
+fi
+
+# Define some shell vars to insert bits of code into the standard elf
+# parse_args and list_options functions.
+#
+PARSE_AND_LIST_PROLOGUE='
+#define OPTION_SPU_PLUGIN 301
+#define OPTION_SPU_NO_OVERLAYS (OPTION_SPU_PLUGIN + 1)
+#define OPTION_SPU_COMPACT_STUBS (OPTION_SPU_NO_OVERLAYS + 1)
+#define OPTION_SPU_STUB_SYMS (OPTION_SPU_COMPACT_STUBS + 1)
+#define OPTION_SPU_NON_OVERLAY_STUBS (OPTION_SPU_STUB_SYMS + 1)
+#define OPTION_SPU_LOCAL_STORE (OPTION_SPU_NON_OVERLAY_STUBS + 1)
+#define OPTION_SPU_STACK_ANALYSIS (OPTION_SPU_LOCAL_STORE + 1)
+#define OPTION_SPU_STACK_SYMS (OPTION_SPU_STACK_ANALYSIS + 1)
+#define OPTION_SPU_AUTO_OVERLAY (OPTION_SPU_STACK_SYMS + 1)
+#define OPTION_SPU_AUTO_RELINK (OPTION_SPU_AUTO_OVERLAY + 1)
+#define OPTION_SPU_OVERLAY_RODATA (OPTION_SPU_AUTO_RELINK + 1)
+#define OPTION_SPU_SOFT_ICACHE (OPTION_SPU_OVERLAY_RODATA + 1)
+#define OPTION_SPU_LINE_SIZE (OPTION_SPU_SOFT_ICACHE + 1)
+#define OPTION_SPU_NUM_LINES (OPTION_SPU_LINE_SIZE + 1)
+#define OPTION_SPU_LRLIVE (OPTION_SPU_NUM_LINES + 1)
+#define OPTION_SPU_NON_IA_TEXT (OPTION_SPU_LRLIVE + 1)
+#define OPTION_SPU_FIXED_SPACE (OPTION_SPU_NON_IA_TEXT + 1)
+#define OPTION_SPU_RESERVED_SPACE (OPTION_SPU_FIXED_SPACE + 1)
+#define OPTION_SPU_EXTRA_STACK (OPTION_SPU_RESERVED_SPACE + 1)
+#define OPTION_SPU_NO_AUTO_OVERLAY (OPTION_SPU_EXTRA_STACK + 1)
+#define OPTION_SPU_EMIT_FIXUPS (OPTION_SPU_NO_AUTO_OVERLAY + 1)
+'
+
+PARSE_AND_LIST_LONGOPTS='
+ { "plugin", no_argument, NULL, OPTION_SPU_PLUGIN },
+ { "soft-icache", no_argument, NULL, OPTION_SPU_SOFT_ICACHE },
+ { "lrlive-analysis", no_argument, NULL, OPTION_SPU_LRLIVE },
+ { "num-lines", required_argument, NULL, OPTION_SPU_NUM_LINES },
+ { "line-size", required_argument, NULL, OPTION_SPU_LINE_SIZE },
+ { "non-ia-text", no_argument, NULL, OPTION_SPU_NON_IA_TEXT },
+ { "no-overlays", no_argument, NULL, OPTION_SPU_NO_OVERLAYS },
+ { "compact-stubs", no_argument, NULL, OPTION_SPU_COMPACT_STUBS },
+ { "emit-stub-syms", no_argument, NULL, OPTION_SPU_STUB_SYMS },
+ { "extra-overlay-stubs", no_argument, NULL, OPTION_SPU_NON_OVERLAY_STUBS },
+ { "local-store", required_argument, NULL, OPTION_SPU_LOCAL_STORE },
+ { "stack-analysis", no_argument, NULL, OPTION_SPU_STACK_ANALYSIS },
+ { "emit-stack-syms", no_argument, NULL, OPTION_SPU_STACK_SYMS },
+ { "auto-overlay", optional_argument, NULL, OPTION_SPU_AUTO_OVERLAY },
+ { "auto-relink", no_argument, NULL, OPTION_SPU_AUTO_RELINK },
+ { "overlay-rodata", no_argument, NULL, OPTION_SPU_OVERLAY_RODATA },
+ { "num-regions", required_argument, NULL, OPTION_SPU_NUM_LINES },
+ { "region-size", required_argument, NULL, OPTION_SPU_LINE_SIZE },
+ { "fixed-space", required_argument, NULL, OPTION_SPU_FIXED_SPACE },
+ { "reserved-space", required_argument, NULL, OPTION_SPU_RESERVED_SPACE },
+ { "extra-stack-space", required_argument, NULL, OPTION_SPU_EXTRA_STACK },
+ { "no-auto-overlay", optional_argument, NULL, OPTION_SPU_NO_AUTO_OVERLAY },
+ { "emit-fixups", optional_argument, NULL, OPTION_SPU_EMIT_FIXUPS },
+'
+
+PARSE_AND_LIST_OPTIONS='
+ fprintf (file, _("\
+ --plugin Make SPU plugin.\n\
+ --no-overlays No overlay handling.\n\
+ --compact-stubs Use smaller and possibly slower call stubs.\n\
+ --emit-stub-syms Add symbols on overlay call stubs.\n\
+ --extra-overlay-stubs Add stubs on all calls out of overlay regions.\n\
+ --local-store=lo:hi Valid address range.\n\
+ --stack-analysis Estimate maximum stack requirement.\n\
+ --emit-stack-syms Add sym giving stack needed for each func.\n\
+ --auto-overlay [=filename] Create an overlay script in filename if\n\
+ executable does not fit in local store.\n\
+ --auto-relink Rerun linker using auto-overlay script.\n\
+ --overlay-rodata Place read-only data with associated function\n\
+ code in overlays.\n\
+ --num-regions Number of overlay buffers (default 1).\n\
+ --region-size Size of overlay buffers (default 0, auto).\n\
+ --fixed-space=bytes Local store for non-overlay code and data.\n\
+ --reserved-space=bytes Local store for stack and heap. If not specified\n\
+ ld will estimate stack size and assume no heap.\n\
+ --extra-stack-space=bytes Space for negative sp access (default 2000) if\n\
+ --reserved-space not given.\n\
+ --soft-icache Generate software icache overlays.\n\
+ --num-lines Number of soft-icache lines (default 32).\n\
+ --line-size Size of soft-icache lines (default 1k).\n\
+ --non-ia-text Allow non-icache code in icache lines.\n\
+ --lrlive-analysis Scan function prologue for lr liveness.\n"
+ ));
+'
+
+PARSE_AND_LIST_ARGS_CASES='
+ case OPTION_SPU_PLUGIN:
+ spu_elf_plugin (1);
+ break;
+
+ case OPTION_SPU_NO_OVERLAYS:
+ no_overlays = 1;
+ break;
+
+ case OPTION_SPU_COMPACT_STUBS:
+ params.compact_stub = 1;
+ break;
+
+ case OPTION_SPU_STUB_SYMS:
+ params.emit_stub_syms = 1;
+ break;
+
+ case OPTION_SPU_NON_OVERLAY_STUBS:
+ params.non_overlay_stubs = 1;
+ break;
+
+ case OPTION_SPU_LOCAL_STORE:
+ {
+ char *end;
+ params.local_store_lo = strtoul (optarg, &end, 0);
+ if (*end == '\'':'\'')
+ {
+ params.local_store_hi = strtoul (end + 1, &end, 0);
+ if (*end == 0)
+ break;
+ }
+ einfo (_("%P%F: invalid --local-store address range `%s'\''\n"), optarg);
+ }
+ break;
+
+ case OPTION_SPU_STACK_ANALYSIS:
+ params.stack_analysis = 1;
+ break;
+
+ case OPTION_SPU_STACK_SYMS:
+ params.emit_stack_syms = 1;
+ break;
+
+ case OPTION_SPU_AUTO_OVERLAY:
+ params.auto_overlay |= 1;
+ if (optarg != NULL)
+ {
+ auto_overlay_file = optarg;
+ break;
+ }
+ /* Fall thru */
+
+ case OPTION_SPU_AUTO_RELINK:
+ params.auto_overlay |= 2;
+ break;
+
+ case OPTION_SPU_OVERLAY_RODATA:
+ params.auto_overlay |= 4;
+ break;
+
+ case OPTION_SPU_SOFT_ICACHE:
+ params.ovly_flavour = ovly_soft_icache;
+ /* Software i-cache stubs are always "compact". */
+ params.compact_stub = 1;
+ if (!num_lines_set)
+ params.num_lines = 32;
+ else if ((params.num_lines & -params.num_lines) != params.num_lines)
+ einfo (_("%P%F: invalid --num-lines/--num-regions `%u'\''\n"),
+ params.num_lines);
+ if (!line_size_set)
+ params.line_size = 1024;
+ else if ((params.line_size & -params.line_size) != params.line_size)
+ einfo (_("%P%F: invalid --line-size/--region-size `%u'\''\n"),
+ params.line_size);
+ break;
+
+ case OPTION_SPU_LRLIVE:
+ params.lrlive_analysis = 1;
+ break;
+
+ case OPTION_SPU_NON_IA_TEXT:
+ params.non_ia_text = 1;
+ break;
+
+ case OPTION_SPU_NUM_LINES:
+ {
+ char *end;
+ params.num_lines = strtoul (optarg, &end, 0);
+ num_lines_set = 1;
+ if (*end == 0
+ && (params.ovly_flavour != ovly_soft_icache
+ || (params.num_lines & -params.num_lines) == params.num_lines))
+ break;
+ einfo (_("%P%F: invalid --num-lines/--num-regions `%s'\''\n"), optarg);
+ }
+ break;
+
+ case OPTION_SPU_LINE_SIZE:
+ {
+ char *end;
+ params.line_size = strtoul (optarg, &end, 0);
+ line_size_set = 1;
+ if (*end == 0
+ && (params.ovly_flavour != ovly_soft_icache
+ || (params.line_size & -params.line_size) == params.line_size))
+ break;
+ einfo (_("%P%F: invalid --line-size/--region-size `%s'\''\n"), optarg);
+ }
+ break;
+
+ case OPTION_SPU_FIXED_SPACE:
+ {
+ char *end;
+ params.auto_overlay_fixed = strtoul (optarg, &end, 0);
+ if (*end != 0)
+ einfo (_("%P%F: invalid --fixed-space value `%s'\''\n"), optarg);
+ }
+ break;
+
+ case OPTION_SPU_RESERVED_SPACE:
+ {
+ char *end;
+ params.auto_overlay_reserved = strtoul (optarg, &end, 0);
+ if (*end != 0)
+ einfo (_("%P%F: invalid --reserved-space value `%s'\''\n"), optarg);
+ }
+ break;
+
+ case OPTION_SPU_EXTRA_STACK:
+ {
+ char *end;
+ params.extra_stack_space = strtol (optarg, &end, 0);
+ if (*end != 0)
+ einfo (_("%P%F: invalid --extra-stack-space value `%s'\''\n"), optarg);
+ }
+ break;
+
+ case OPTION_SPU_NO_AUTO_OVERLAY:
+ params.auto_overlay = 0;
+ if (optarg != NULL)
+ {
+ struct tflist *tf;
+ size_t len;
+
+ if (tmp_file_list == NULL)
+ atexit (clean_tmp);
+
+ len = strlen (optarg) + 1;
+ tf = xmalloc (sizeof (*tf) - sizeof (tf->name) + len);
+ memcpy (tf->name, optarg, len);
+ tf->next = tmp_file_list;
+ tmp_file_list = tf;
+ break;
+ }
+ break;
+
+ case OPTION_SPU_EMIT_FIXUPS:
+ params.emit_fixups = 1;
+ break;
+'
+
+LDEMUL_AFTER_OPEN=spu_after_open
+LDEMUL_BEFORE_ALLOCATION=spu_before_allocation
+LDEMUL_FINISH=gld${EMULATION_NAME}_finish
+LDEMUL_CHOOSE_TARGET=gld${EMULATION_NAME}_choose_target
diff --git a/binutils-2.21/ld/emultempl/sunos.em b/binutils-2.21/ld/emultempl/sunos.em
new file mode 100644
index 0000000..bbd6075
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/sunos.em
@@ -0,0 +1,1037 @@
+# This shell script emits a C file. -*- C -*-
+# It does some substitutions.
+if [ -z "$MACHINE" ]; then
+ OUTPUT_ARCH=${ARCH}
+else
+ OUTPUT_ARCH=${ARCH}:${MACHINE}
+fi
+fragment <<EOF
+/* This file is is generated by a shell script. DO NOT EDIT! */
+
+/* SunOS emulation code for ${EMULATION_NAME}
+ Copyright 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+ 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+ Written by Steve Chamberlain <sac@cygnus.com>
+ SunOS shared library support by Ian Lance Taylor <ian@cygnus.com>
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#define TARGET_IS_${EMULATION_NAME}
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+#include "libiberty.h"
+#include "safe-ctype.h"
+
+#include "ld.h"
+#include "ldmain.h"
+#include "ldmisc.h"
+#include "ldexp.h"
+#include "ldlang.h"
+#include "ldfile.h"
+#include "ldemul.h"
+
+#ifdef HAVE_DIRENT_H
+# include <dirent.h>
+#else
+# define dirent direct
+# ifdef HAVE_SYS_NDIR_H
+# include <sys/ndir.h>
+# endif
+# ifdef HAVE_SYS_DIR_H
+# include <sys/dir.h>
+# endif
+# ifdef HAVE_NDIR_H
+# include <ndir.h>
+# endif
+#endif
+
+static void gld${EMULATION_NAME}_find_so
+ (lang_input_statement_type *);
+static char *gld${EMULATION_NAME}_search_dir
+ (const char *, const char *, bfd_boolean *);
+static void gld${EMULATION_NAME}_check_needed
+ (lang_input_statement_type *);
+static bfd_boolean gld${EMULATION_NAME}_search_needed
+ (const char *, const char *);
+static bfd_boolean gld${EMULATION_NAME}_try_needed
+ (const char *, const char *);
+static void gld${EMULATION_NAME}_find_assignment
+ (lang_statement_union_type *);
+static void gld${EMULATION_NAME}_find_exp_assignment
+ (etree_type *);
+static void gld${EMULATION_NAME}_count_need
+ (lang_input_statement_type *);
+static void gld${EMULATION_NAME}_set_need
+ (lang_input_statement_type *);
+
+static void
+gld${EMULATION_NAME}_before_parse (void)
+{
+ ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
+ config.dynamic_link = TRUE;
+ config.has_shared = TRUE;
+}
+
+/* This is called after the command line arguments have been parsed,
+ but before the linker script has been read. If this is a native
+ linker, we add the directories in LD_LIBRARY_PATH to the search
+ list. */
+
+static void
+gld${EMULATION_NAME}_set_symbols (void)
+{
+EOF
+if [ "x${host}" = "x${target}" ] ; then
+ case " ${EMULATION_LIBPATH} " in
+ *" ${EMULATION_NAME} "*)
+fragment <<EOF
+ const char *env;
+
+ env = (const char *) getenv ("LD_LIBRARY_PATH");
+ if (env != NULL)
+ {
+ char *l;
+
+ l = xstrdup (env);
+ while (1)
+ {
+ char *c;
+
+ c = strchr (l, ':');
+ if (c != NULL)
+ *c++ = '\0';
+ if (*l != '\0')
+ ldfile_add_library_path (l, FALSE);
+ if (c == NULL)
+ break;
+ l = c;
+ }
+ }
+EOF
+ ;;
+ esac
+fi
+fragment <<EOF
+}
+
+/* Despite the name, we use this routine to search for dynamic
+ libraries. On SunOS this requires a directory search. We need to
+ find the .so file with the highest version number. The user may
+ restrict the major version by saying, e.g., -lc.1. Also, if we
+ find a .so file, we need to look for a the same file after
+ replacing .so with .sa; if it exists, it will be an archive which
+ provide some initializations for data symbols, and we need to
+ search it after including the .so file. */
+
+static void
+gld${EMULATION_NAME}_create_output_section_statements (void)
+{
+ lang_for_each_input_file (gld${EMULATION_NAME}_find_so);
+}
+
+/* Search the directory for a .so file for each library search. */
+
+static void
+gld${EMULATION_NAME}_find_so (lang_input_statement_type *inp)
+{
+ search_dirs_type *search;
+ char *found = NULL;
+ char *alc;
+ struct stat st;
+
+ if (! inp->search_dirs_flag
+ || ! inp->is_archive
+ || ! inp->dynamic)
+ return;
+
+ ASSERT (CONST_STRNEQ (inp->local_sym_name, "-l"));
+
+ for (search = search_head; search != NULL; search = search->next)
+ {
+ bfd_boolean found_static;
+
+ found = gld${EMULATION_NAME}_search_dir (search->name, inp->filename,
+ &found_static);
+ if (found != NULL || found_static)
+ break;
+ }
+
+ if (found == NULL)
+ {
+ /* We did not find a matching .so file. This isn't an error,
+ since there might still be a matching .a file, which will be
+ found by the usual search. */
+ return;
+ }
+
+ /* Replace the filename with the one we have found. */
+ alc = (char *) xmalloc (strlen (search->name) + strlen (found) + 2);
+ sprintf (alc, "%s/%s", search->name, found);
+ inp->filename = alc;
+
+ /* Turn off the search_dirs_flag to prevent ldfile_open_file from
+ searching for this file again. */
+ inp->search_dirs_flag = FALSE;
+
+ free (found);
+
+ /* Now look for the same file name, but with .sa instead of .so. If
+ found, add it to the list of input files. */
+ alc = (char *) xmalloc (strlen (inp->filename) + 1);
+ strcpy (alc, inp->filename);
+ strstr (alc + strlen (search->name), ".so")[2] = 'a';
+ if (stat (alc, &st) != 0)
+ free (alc);
+ else
+ {
+ lang_input_statement_type *sa;
+
+ /* Add the .sa file to the statement list just before the .so
+ file. This is really a hack. */
+ sa = ((lang_input_statement_type *)
+ xmalloc (sizeof (lang_input_statement_type)));
+ *sa = *inp;
+
+ inp->filename = alc;
+ inp->local_sym_name = alc;
+
+ inp->header.next = (lang_statement_union_type *) sa;
+ inp->next_real_file = (lang_statement_union_type *) sa;
+ }
+}
+
+/* Search a directory for a .so file. */
+
+static char *
+gld${EMULATION_NAME}_search_dir
+ (const char *dirname, const char *filename, bfd_boolean *found_static)
+{
+ int force_maj, force_min;
+ const char *dot;
+ unsigned int len;
+ char *alc;
+ char *found;
+ int max_maj, max_min;
+ DIR *dir;
+ struct dirent *entry;
+ unsigned int dirnamelen;
+ char *full_path;
+ int statval;
+ struct stat st;
+
+ *found_static = FALSE;
+
+ force_maj = -1;
+ force_min = -1;
+ dot = strchr (filename, '.');
+ if (dot == NULL)
+ {
+ len = strlen (filename);
+ alc = NULL;
+ }
+ else
+ {
+ force_maj = atoi (dot + 1);
+
+ len = dot - filename;
+ alc = (char *) xmalloc (len + 1);
+ strncpy (alc, filename, len);
+ alc[len] = '\0';
+ filename = alc;
+
+ dot = strchr (dot + 1, '.');
+ if (dot != NULL)
+ force_min = atoi (dot + 1);
+ }
+
+ found = NULL;
+ max_maj = max_min = 0;
+
+ dir = opendir (dirname);
+ if (dir == NULL)
+ return NULL;
+ dirnamelen = strlen (dirname);
+
+ while ((entry = readdir (dir)) != NULL)
+ {
+ const char *s;
+ int found_maj, found_min;
+
+ if (! CONST_STRNEQ (entry->d_name, "lib")
+ || strncmp (entry->d_name + 3, filename, len) != 0)
+ continue;
+
+ if (dot == NULL
+ && strcmp (entry->d_name + 3 + len, ".a") == 0)
+ {
+ *found_static = TRUE;
+ continue;
+ }
+
+ /* We accept libfoo.so without a version number, even though the
+ native linker does not. This is more convenient for packages
+ which just generate .so files for shared libraries, as on ELF
+ systems. */
+ if (! CONST_STRNEQ (entry->d_name + 3 + len, ".so"))
+ continue;
+ if (entry->d_name[6 + len] == '\0')
+ ;
+ else if (entry->d_name[6 + len] == '.'
+ && ISDIGIT (entry->d_name[7 + len]))
+ ;
+ else
+ continue;
+
+ for (s = entry->d_name + 6 + len; *s != '\0'; s++)
+ if (*s != '.' && ! ISDIGIT (*s))
+ break;
+ if (*s != '\0')
+ continue;
+
+ /* We've found a .so file. Work out the major and minor
+ version numbers. */
+ found_maj = 0;
+ found_min = 0;
+ sscanf (entry->d_name + 3 + len, ".so.%d.%d",
+ &found_maj, &found_min);
+
+ if ((force_maj != -1 && force_maj != found_maj)
+ || (force_min != -1 && force_min != found_min))
+ continue;
+
+ /* Make sure the file really exists (ignore broken symlinks). */
+ full_path = xmalloc (dirnamelen + 1 + strlen (entry->d_name) + 1);
+ sprintf (full_path, "%s/%s", dirname, entry->d_name);
+ statval = stat (full_path, &st);
+ free (full_path);
+ if (statval != 0)
+ continue;
+
+ /* We've found a match for the name we are searching for. See
+ if this is the version we should use. If the major and minor
+ versions match, we use the last entry in alphabetical order;
+ I don't know if this is how SunOS distinguishes libc.so.1.8
+ from libc.so.1.8.1, but it ought to suffice. */
+ if (found == NULL
+ || (found_maj > max_maj)
+ || (found_maj == max_maj
+ && (found_min > max_min
+ || (found_min == max_min
+ && strcmp (entry->d_name, found) > 0))))
+ {
+ if (found != NULL)
+ free (found);
+ found = (char *) xmalloc (strlen (entry->d_name) + 1);
+ strcpy (found, entry->d_name);
+ max_maj = found_maj;
+ max_min = found_min;
+ }
+ }
+
+ closedir (dir);
+
+ if (alc != NULL)
+ free (alc);
+
+ return found;
+}
+
+/* These variables are required to pass information back and forth
+ between after_open and check_needed. */
+
+static struct bfd_link_needed_list *global_needed;
+static bfd_boolean global_found;
+
+/* This is called after all the input files have been opened. */
+
+static void
+gld${EMULATION_NAME}_after_open (void)
+{
+ struct bfd_link_needed_list *needed, *l;
+
+ /* We only need to worry about this when doing a final link. */
+ if (link_info.relocatable || link_info.shared)
+ return;
+
+ /* Get the list of files which appear in ld_need entries in dynamic
+ objects included in the link. For each such file, we want to
+ track down the corresponding library, and include the symbol
+ table in the link. This is what the runtime dynamic linker will
+ do. Tracking the files down here permits one dynamic object to
+ include another without requiring special action by the person
+ doing the link. Note that the needed list can actually grow
+ while we are stepping through this loop. */
+ needed = bfd_sunos_get_needed_list (link_info.output_bfd, &link_info);
+ for (l = needed; l != NULL; l = l->next)
+ {
+ struct bfd_link_needed_list *ll;
+ const char *lname;
+ search_dirs_type *search;
+
+ lname = l->name;
+
+ /* If we've already seen this file, skip it. */
+ for (ll = needed; ll != l; ll = ll->next)
+ if (strcmp (ll->name, lname) == 0)
+ break;
+ if (ll != l)
+ continue;
+
+ /* See if this file was included in the link explicitly. */
+ global_needed = l;
+ global_found = FALSE;
+ lang_for_each_input_file (gld${EMULATION_NAME}_check_needed);
+ if (global_found)
+ continue;
+
+ if (! CONST_STRNEQ (lname, "-l"))
+ {
+ bfd *abfd;
+
+ abfd = bfd_openr (lname, bfd_get_target (link_info.output_bfd));
+ if (abfd != NULL)
+ {
+ if (! bfd_check_format (abfd, bfd_object))
+ {
+ (void) bfd_close (abfd);
+ abfd = NULL;
+ }
+ }
+ if (abfd != NULL)
+ {
+ if ((bfd_get_file_flags (abfd) & DYNAMIC) == 0)
+ {
+ (void) bfd_close (abfd);
+ abfd = NULL;
+ }
+ }
+ if (abfd != NULL)
+ {
+ /* We've found the needed dynamic object. */
+ if (! bfd_link_add_symbols (abfd, &link_info))
+ einfo ("%F%B: could not read symbols: %E\n", abfd);
+ }
+ else
+ {
+ einfo ("%P: warning: %s, needed by %B, not found\n",
+ lname, l->by);
+ }
+
+ continue;
+ }
+
+ lname += 2;
+
+ /* We want to search for the file in the same way that the
+ dynamic linker will search. That means that we want to use
+ rpath_link, rpath or -L, then the environment variable
+ LD_LIBRARY_PATH (native only), then (if rpath was used) the
+ linker script LIB_SEARCH_DIRS. */
+ if (gld${EMULATION_NAME}_search_needed (command_line.rpath_link,
+ lname))
+ continue;
+ if (command_line.rpath != NULL)
+ {
+ if (gld${EMULATION_NAME}_search_needed (command_line.rpath, lname))
+ continue;
+ }
+ else
+ {
+ for (search = search_head; search != NULL; search = search->next)
+ if (gld${EMULATION_NAME}_try_needed (search->name, lname))
+ break;
+ if (search != NULL)
+ continue;
+ }
+EOF
+if [ "x${host}" = "x${target}" ] ; then
+ case " ${EMULATION_LIBPATH} " in
+ *" ${EMULATION_NAME} "*)
+fragment <<EOF
+ {
+ const char *lib_path;
+
+ lib_path = (const char *) getenv ("LD_LIBRARY_PATH");
+ if (gld${EMULATION_NAME}_search_needed (lib_path, lname))
+ continue;
+ }
+EOF
+ ;;
+ esac
+fi
+fragment <<EOF
+ if (command_line.rpath != NULL)
+ {
+ for (search = search_head; search != NULL; search = search->next)
+ {
+ if (search->cmdline)
+ continue;
+ if (gld${EMULATION_NAME}_try_needed (search->name, lname))
+ break;
+ }
+ if (search != NULL)
+ continue;
+ }
+
+ einfo ("%P: warning: %s, needed by %B, not found\n",
+ l->name, l->by);
+ }
+}
+
+/* Search for a needed file in a path. */
+
+static bfd_boolean
+gld${EMULATION_NAME}_search_needed (const char *path, const char *name)
+{
+ const char *s;
+
+ if (path == NULL || *path == '\0')
+ return FALSE;
+ while (1)
+ {
+ const char *dir;
+ char *dircopy;
+
+ s = strchr (path, ':');
+ if (s == NULL)
+ {
+ dircopy = NULL;
+ dir = path;
+ }
+ else
+ {
+ dircopy = (char *) xmalloc (s - path + 1);
+ memcpy (dircopy, path, s - path);
+ dircopy[s - path] = '\0';
+ dir = dircopy;
+ }
+
+ if (gld${EMULATION_NAME}_try_needed (dir, name))
+ return TRUE;
+
+ if (dircopy != NULL)
+ free (dircopy);
+
+ if (s == NULL)
+ break;
+ path = s + 1;
+ }
+
+ return FALSE;
+}
+
+/* This function is called for each possible directory for a needed
+ dynamic object. */
+
+static bfd_boolean
+gld${EMULATION_NAME}_try_needed (const char *dir, const char *name)
+{
+ char *file;
+ char *alc;
+ bfd_boolean ignore;
+ bfd *abfd;
+
+ file = gld${EMULATION_NAME}_search_dir (dir, name, &ignore);
+ if (file == NULL)
+ return FALSE;
+
+ alc = (char *) xmalloc (strlen (dir) + strlen (file) + 2);
+ sprintf (alc, "%s/%s", dir, file);
+ free (file);
+ abfd = bfd_openr (alc, bfd_get_target (link_info.output_bfd));
+ if (abfd == NULL)
+ return FALSE;
+ if (! bfd_check_format (abfd, bfd_object))
+ {
+ (void) bfd_close (abfd);
+ return FALSE;
+ }
+ if ((bfd_get_file_flags (abfd) & DYNAMIC) == 0)
+ {
+ (void) bfd_close (abfd);
+ return FALSE;
+ }
+
+ /* We've found the needed dynamic object. */
+
+ /* Add this file into the symbol table. */
+ if (! bfd_link_add_symbols (abfd, &link_info))
+ einfo ("%F%B: could not read symbols: %E\n", abfd);
+
+ return TRUE;
+}
+
+/* See if we have already included a needed object in the link. This
+ does not have to be precise, as it does no harm to include a
+ dynamic object more than once. */
+
+static void
+gld${EMULATION_NAME}_check_needed (lang_input_statement_type *s)
+{
+ if (s->filename == NULL)
+ return;
+ if (! CONST_STRNEQ (global_needed->name, "-l"))
+ {
+ if (strcmp (s->filename, global_needed->name) == 0)
+ global_found = TRUE;
+ }
+ else
+ {
+ const char *sname, *lname;
+ const char *sdot, *ldot;
+ int lmaj, lmin, smaj, smin;
+
+ lname = global_needed->name + 2;
+
+ sname = strrchr (s->filename, '/');
+ if (sname == NULL)
+ sname = s->filename;
+ else
+ ++sname;
+
+ if (! CONST_STRNEQ (sname, "lib"))
+ return;
+ sname += 3;
+
+ ldot = strchr (lname, '.');
+ if (ldot == NULL)
+ ldot = lname + strlen (lname);
+
+ sdot = strstr (sname, ".so.");
+ if (sdot == NULL)
+ return;
+
+ if (sdot - sname != ldot - lname
+ || strncmp (lname, sname, sdot - sname) != 0)
+ return;
+
+ lmaj = lmin = -1;
+ sscanf (ldot, ".%d.%d", &lmaj, &lmin);
+ smaj = smin = -1;
+ sscanf (sdot, ".so.%d.%d", &smaj, &smin);
+ if ((smaj != lmaj && smaj != -1 && lmaj != -1)
+ || (smin != lmin && smin != -1 && lmin != -1))
+ return;
+
+ global_found = TRUE;
+ }
+}
+
+/* We need to use static variables to pass information around the call
+ to lang_for_each_statement. Ick. */
+
+static const char *find_assign;
+static bfd_boolean found_assign;
+
+/* We need to use static variables to pass information around the call
+ to lang_for_each_input_file. Ick. */
+
+static bfd_size_type need_size;
+static bfd_size_type need_entries;
+static bfd_byte *need_contents;
+static bfd_byte *need_pinfo;
+static bfd_byte *need_pnames;
+
+/* The size of one entry in the .need section, not including the file
+ name. */
+
+#define NEED_ENTRY_SIZE (16)
+
+/* This is called after the sections have been attached to output
+ sections, but before any sizes or addresses have been set. */
+
+static void
+gld${EMULATION_NAME}_before_allocation (void)
+{
+ struct bfd_link_hash_entry *hdyn = NULL;
+ asection *sneed;
+ asection *srules;
+ asection *sdyn;
+
+ /* The SunOS native linker creates a shared library whenever there
+ are any undefined symbols in a link, unless -e is used. This is
+ pretty weird, but we are compatible. */
+ if (! link_info.shared && ! link_info.relocatable && ! entry_from_cmdline)
+ {
+ struct bfd_link_hash_entry *h;
+
+ for (h = link_info.hash->undefs; h != NULL; h = h->u.undef.next)
+ {
+ if (h->type == bfd_link_hash_undefined
+ && h->u.undef.abfd != NULL
+ && (h->u.undef.abfd->flags & DYNAMIC) == 0
+ && strcmp (h->root.string, "__DYNAMIC") != 0
+ && strcmp (h->root.string, "__GLOBAL_OFFSET_TABLE_") != 0)
+ {
+ find_assign = h->root.string;
+ found_assign = FALSE;
+ lang_for_each_statement (gld${EMULATION_NAME}_find_assignment);
+ if (! found_assign)
+ {
+ link_info.shared = TRUE;
+ break;
+ }
+ }
+ }
+ }
+
+ if (link_info.shared)
+ {
+ lang_output_section_statement_type *os;
+
+ /* Set the .text section to start at 0x20, not 0x2020. FIXME:
+ This is too magical. */
+ os = lang_output_section_statement_lookup (".text", 0, TRUE);
+ if (os->addr_tree == NULL)
+ os->addr_tree = exp_intop (0x20);
+ }
+
+ /* We need to create a __DYNAMIC symbol. We don't do this in the
+ linker script because we want to set the value to the start of
+ the dynamic section if there is one, or to zero if there isn't
+ one. We need to create the symbol before calling
+ size_dynamic_sections, although we can't set the value until
+ afterward. */
+ if (! link_info.relocatable)
+ {
+ hdyn = bfd_link_hash_lookup (link_info.hash, "__DYNAMIC", TRUE, FALSE,
+ FALSE);
+ if (hdyn == NULL)
+ einfo ("%P%F: bfd_link_hash_lookup: %E\n");
+ if (! bfd_sunos_record_link_assignment (link_info.output_bfd, &link_info,
+ "__DYNAMIC"))
+ einfo ("%P%F: failed to record assignment to __DYNAMIC: %E\n");
+ }
+
+ /* If we are going to make any variable assignments, we need to let
+ the backend linker know about them in case the variables are
+ referred to by dynamic objects. */
+ lang_for_each_statement (gld${EMULATION_NAME}_find_assignment);
+
+ /* Let the backend linker work out the sizes of any sections
+ required by dynamic linking. */
+ if (! bfd_sunos_size_dynamic_sections (link_info.output_bfd, &link_info,
+ &sdyn, &sneed, &srules))
+ einfo ("%P%F: failed to set dynamic section sizes: %E\n");
+
+ if (sneed != NULL)
+ {
+ /* Set up the .need section. See the description of the ld_need
+ field in include/aout/sun4.h. */
+
+ need_entries = 0;
+ need_size = 0;
+
+ lang_for_each_input_file (gld${EMULATION_NAME}_count_need);
+
+ /* We should only have a .need section if we have at least one
+ dynamic object. */
+ ASSERT (need_entries != 0);
+
+ sneed->size = need_size;
+ sneed->contents = (bfd_byte *) xmalloc (need_size);
+
+ need_contents = sneed->contents;
+ need_pinfo = sneed->contents;
+ need_pnames = sneed->contents + need_entries * 16;
+
+ lang_for_each_input_file (gld${EMULATION_NAME}_set_need);
+
+ ASSERT ((bfd_size_type) (need_pnames - sneed->contents) == need_size);
+ }
+
+ if (srules != NULL)
+ {
+ /* Set up the .rules section. This is just a PATH like string
+ of the -L arguments given on the command line. We permit the
+ user to specify the directories using the -rpath command line
+ option. */
+ if (command_line.rpath)
+ {
+ srules->size = strlen (command_line.rpath);
+ srules->contents = (bfd_byte *) command_line.rpath;
+ }
+ else
+ {
+ unsigned int size;
+ search_dirs_type *search;
+
+ size = 0;
+ for (search = search_head; search != NULL; search = search->next)
+ if (search->cmdline)
+ size += strlen (search->name) + 1;
+ srules->size = size;
+ if (size > 0)
+ {
+ char *p;
+
+ srules->contents = (bfd_byte *) xmalloc (size);
+ p = (char *) srules->contents;
+ *p = '\0';
+ for (search = search_head; search != NULL; search = search->next)
+ {
+ if (search->cmdline)
+ {
+ if (p != (char *) srules->contents)
+ *p++ = ':';
+ strcpy (p, search->name);
+ p += strlen (p);
+ }
+ }
+ }
+ }
+ }
+
+ /* We must assign a value to __DYNAMIC. It should be zero if we are
+ not doing a dynamic link, or the start of the .dynamic section if
+ we are doing one. */
+ if (! link_info.relocatable)
+ {
+ hdyn->type = bfd_link_hash_defined;
+ hdyn->u.def.value = 0;
+ if (sdyn != NULL)
+ hdyn->u.def.section = sdyn;
+ else
+ hdyn->u.def.section = bfd_abs_section_ptr;
+ }
+
+ before_allocation_default ();
+}
+
+/* This is called by the before_allocation routine via
+ lang_for_each_statement. It does one of two things: if the
+ variable find_assign is set, it sets found_assign if it finds an
+ assignment to that variable; otherwise it tells the backend linker
+ about all assignment statements, in case they are assignments to
+ symbols which are referred to by dynamic objects. */
+
+static void
+gld${EMULATION_NAME}_find_assignment (lang_statement_union_type *s)
+{
+ if (s->header.type == lang_assignment_statement_enum
+ && (find_assign == NULL || ! found_assign))
+ gld${EMULATION_NAME}_find_exp_assignment (s->assignment_statement.exp);
+}
+
+/* Look through an expression for an assignment statement. */
+
+static void
+gld${EMULATION_NAME}_find_exp_assignment (etree_type *exp)
+{
+ switch (exp->type.node_class)
+ {
+ case etree_assign:
+ if (find_assign != NULL)
+ {
+ if (strcmp (find_assign, exp->assign.dst) == 0)
+ found_assign = TRUE;
+ return;
+ }
+
+ if (strcmp (exp->assign.dst, ".") != 0)
+ {
+ if (! bfd_sunos_record_link_assignment (link_info.output_bfd,
+ &link_info,
+ exp->assign.dst))
+ einfo ("%P%F: failed to record assignment to %s: %E\n",
+ exp->assign.dst);
+ }
+ gld${EMULATION_NAME}_find_exp_assignment (exp->assign.src);
+ break;
+
+ case etree_binary:
+ gld${EMULATION_NAME}_find_exp_assignment (exp->binary.lhs);
+ gld${EMULATION_NAME}_find_exp_assignment (exp->binary.rhs);
+ break;
+
+ case etree_trinary:
+ gld${EMULATION_NAME}_find_exp_assignment (exp->trinary.cond);
+ gld${EMULATION_NAME}_find_exp_assignment (exp->trinary.lhs);
+ gld${EMULATION_NAME}_find_exp_assignment (exp->trinary.rhs);
+ break;
+
+ case etree_unary:
+ gld${EMULATION_NAME}_find_exp_assignment (exp->unary.child);
+ break;
+
+ default:
+ break;
+ }
+}
+
+/* Work out the size of the .need section, and the number of entries.
+ The backend will set the ld_need field of the dynamic linking
+ information to point to the .need section. See include/aout/sun4.h
+ for more information. */
+
+static void
+gld${EMULATION_NAME}_count_need (lang_input_statement_type *inp)
+{
+ if (inp->the_bfd != NULL
+ && (inp->the_bfd->flags & DYNAMIC) != 0)
+ {
+ ++need_entries;
+ need_size += NEED_ENTRY_SIZE;
+ if (! inp->is_archive)
+ need_size += strlen (inp->filename) + 1;
+ else
+ {
+ ASSERT (inp->local_sym_name[0] == '-'
+ && inp->local_sym_name[1] == 'l');
+ need_size += strlen (inp->local_sym_name + 2) + 1;
+ }
+ }
+}
+
+/* Fill in the contents of the .need section. */
+
+static void
+gld${EMULATION_NAME}_set_need (lang_input_statement_type *inp)
+{
+ if (inp->the_bfd != NULL
+ && (inp->the_bfd->flags & DYNAMIC) != 0)
+ {
+ bfd_size_type c;
+
+ /* To really fill in the .need section contents, we need to know
+ the final file position of the section, but we don't.
+ Instead, we use offsets, and rely on the BFD backend to
+ finish the section up correctly. FIXME: Talk about lack of
+ referential locality. */
+ bfd_put_32 (link_info.output_bfd, need_pnames - need_contents,
+ need_pinfo);
+ if (! inp->is_archive)
+ {
+ bfd_put_32 (link_info.output_bfd, (bfd_vma) 0, need_pinfo + 4);
+ bfd_put_16 (link_info.output_bfd, (bfd_vma) 0, need_pinfo + 8);
+ bfd_put_16 (link_info.output_bfd, (bfd_vma) 0, need_pinfo + 10);
+ strcpy ((char *) need_pnames, inp->filename);
+ }
+ else
+ {
+ char *verstr;
+ int maj, min;
+
+ bfd_put_32 (link_info.output_bfd, (bfd_vma) 0x80000000,
+ need_pinfo + 4);
+ maj = 0;
+ min = 0;
+ verstr = strstr (inp->filename, ".so.");
+ if (verstr != NULL)
+ sscanf (verstr, ".so.%d.%d", &maj, &min);
+ bfd_put_16 (link_info.output_bfd, (bfd_vma) maj, need_pinfo + 8);
+ bfd_put_16 (link_info.output_bfd, (bfd_vma) min, need_pinfo + 10);
+ strcpy ((char *) need_pnames, inp->local_sym_name + 2);
+ }
+
+ c = (need_pinfo - need_contents) / NEED_ENTRY_SIZE;
+ if (c + 1 >= need_entries)
+ bfd_put_32 (link_info.output_bfd, (bfd_vma) 0, need_pinfo + 12);
+ else
+ bfd_put_32 (link_info.output_bfd, (bfd_vma) (c + 1) * NEED_ENTRY_SIZE,
+ need_pinfo + 12);
+
+ need_pinfo += NEED_ENTRY_SIZE;
+ need_pnames += strlen ((char *) need_pnames) + 1;
+ }
+}
+
+static char *
+gld${EMULATION_NAME}_get_script (int *isfile)
+EOF
+
+if test -n "$COMPILE_IN"
+then
+# Scripts compiled in.
+
+# sed commands to quote an ld script as a C string.
+sc="-f stringify.sed"
+
+fragment <<EOF
+{
+ *isfile = 0;
+
+ if (link_info.relocatable && config.build_constructors)
+ return
+EOF
+sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c
+echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c
+echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c
+echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c
+echo ' ; else return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
+echo '; }' >> e${EMULATION_NAME}.c
+
+else
+# Scripts read from the filesystem.
+
+fragment <<EOF
+{
+ *isfile = 1;
+
+ if (link_info.relocatable && config.build_constructors)
+ return "ldscripts/${EMULATION_NAME}.xu";
+ else if (link_info.relocatable)
+ return "ldscripts/${EMULATION_NAME}.xr";
+ else if (!config.text_read_only)
+ return "ldscripts/${EMULATION_NAME}.xbn";
+ else if (!config.magic_demand_paged)
+ return "ldscripts/${EMULATION_NAME}.xn";
+ else
+ return "ldscripts/${EMULATION_NAME}.x";
+}
+EOF
+
+fi
+
+fragment <<EOF
+
+struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
+{
+ gld${EMULATION_NAME}_before_parse,
+ syslib_default,
+ hll_default,
+ after_parse_default,
+ gld${EMULATION_NAME}_after_open,
+ after_allocation_default,
+ set_output_arch_default,
+ ldemul_default_target,
+ gld${EMULATION_NAME}_before_allocation,
+ gld${EMULATION_NAME}_get_script,
+ "${EMULATION_NAME}",
+ "${OUTPUT_FORMAT}",
+ finish_default,
+ gld${EMULATION_NAME}_create_output_section_statements,
+ NULL, /* open dynamic archive */
+ NULL, /* place orphan */
+ gld${EMULATION_NAME}_set_symbols,
+ NULL, /* parse args */
+ NULL, /* add_options */
+ NULL, /* handle_option */
+ NULL, /* unrecognized file */
+ NULL, /* list options */
+ NULL, /* recognized file */
+ NULL, /* find_potential_libraries */
+ NULL /* new_vers_pattern */
+};
+EOF
diff --git a/binutils-2.21/ld/emultempl/ticoff.em b/binutils-2.21/ld/emultempl/ticoff.em
new file mode 100644
index 0000000..dff1d70
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/ticoff.em
@@ -0,0 +1,186 @@
+# This shell script emits a C file. -*- C -*-
+# It does some substitutions.
+(echo;echo;echo;echo)>e${EMULATION_NAME}.c # there, now line numbers match ;-)
+fragment <<EOF
+/* This file is part of GLD, the Gnu Linker.
+ Copyright 1999, 2000, 2002, 2003, 2004, 2005, 2007
+ Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/* For TI COFF */
+/* Need to determine load and run pages for output sections */
+
+#define TARGET_IS_${EMULATION_NAME}
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+#include "getopt.h"
+
+#include "ld.h"
+#include "ldmain.h"
+#include "ldmisc.h"
+#include "ldexp.h"
+#include "ldlang.h"
+#include "ldfile.h"
+#include "ldemul.h"
+
+static int coff_version;
+
+/* TI COFF extra command line options */
+#define OPTION_COFF_FORMAT (300 + 1)
+
+static void
+gld${EMULATION_NAME}_add_options
+ (int ns ATTRIBUTE_UNUSED, char **shortopts ATTRIBUTE_UNUSED, int nl,
+ struct option **longopts, int nrl ATTRIBUTE_UNUSED,
+ struct option **really_longopts ATTRIBUTE_UNUSED)
+{
+ static const struct option xtra_long[] = {
+ /* TI COFF options */
+ {"format", required_argument, NULL, OPTION_COFF_FORMAT },
+ {NULL, no_argument, NULL, 0}
+ };
+
+ *longopts = (struct option *)
+ xrealloc (*longopts, nl * sizeof (struct option) + sizeof (xtra_long));
+ memcpy (*longopts + nl, &xtra_long, sizeof (xtra_long));
+}
+
+static void
+gld_${EMULATION_NAME}_list_options (FILE * file)
+{
+ fprintf (file, _(" --format 0|1|2 Specify which COFF version to use\n"));
+}
+
+static bfd_boolean
+gld${EMULATION_NAME}_handle_option (int optc)
+{
+ switch (optc)
+ {
+ default:
+ return FALSE;
+
+ case OPTION_COFF_FORMAT:
+ if ((*optarg == '0' || *optarg == '1' || *optarg == '2')
+ && optarg[1] == '\0')
+ {
+ static char buf[] = "coffX-${OUTPUT_FORMAT_TEMPLATE}";
+ coff_version = *optarg - '0';
+ buf[4] = *optarg;
+ lang_add_output_format (buf, NULL, NULL, 0);
+ }
+ else
+ {
+ einfo (_("%P%F: invalid COFF format version %s\n"), optarg);
+ }
+ break;
+ }
+ return FALSE;
+}
+
+static void
+gld_${EMULATION_NAME}_before_parse(void)
+{
+#ifndef TARGET_ /* I.e., if not generic. */
+ ldfile_set_output_arch ("`echo ${ARCH}`", bfd_arch_unknown);
+#endif /* not TARGET_ */
+}
+
+static char *
+gld_${EMULATION_NAME}_get_script (int *isfile)
+EOF
+if test -n "$COMPILE_IN"
+then
+# Scripts compiled in.
+
+# sed commands to quote an ld script as a C string.
+sc='s/["\\]/\\&/g
+s/$/\\n\\/
+1s/^/"/
+$s/$/n"/
+'
+fragment <<EOF
+{
+ *isfile = 0;
+ if (link_info.relocatable && config.build_constructors)
+ return `sed "$sc" ldscripts/${EMULATION_NAME}.xu`;
+ else if (link_info.relocatable)
+ return `sed "$sc" ldscripts/${EMULATION_NAME}.xr`;
+ else if (!config.text_read_only)
+ return `sed "$sc" ldscripts/${EMULATION_NAME}.xbn`;
+ else if (!config.magic_demand_paged)
+ return `sed "$sc" ldscripts/${EMULATION_NAME}.xn`;
+ else
+ return `sed "$sc" ldscripts/${EMULATION_NAME}.x`;
+}
+EOF
+
+else
+# Scripts read from the filesystem.
+
+fragment <<EOF
+{
+ *isfile = 1;
+
+ if (link_info.relocatable && config.build_constructors)
+ return "ldscripts/${EMULATION_NAME}.xu";
+ else if (link_info.relocatable)
+ return "ldscripts/${EMULATION_NAME}.xr";
+ else if (!config.text_read_only)
+ return "ldscripts/${EMULATION_NAME}.xbn";
+ else if (!config.magic_demand_paged)
+ return "ldscripts/${EMULATION_NAME}.xn";
+ else
+ return "ldscripts/${EMULATION_NAME}.x";
+}
+EOF
+
+fi
+
+fragment <<EOF
+struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
+{
+ gld_${EMULATION_NAME}_before_parse,
+ syslib_default,
+ hll_default,
+ after_parse_default,
+ after_open_default,
+ after_allocation_default,
+ set_output_arch_default,
+ ldemul_default_target,
+ before_allocation_default,
+ gld_${EMULATION_NAME}_get_script,
+ "${EMULATION_NAME}",
+ "${OUTPUT_FORMAT}",
+ finish_default,
+ NULL, /* create output section statements */
+ NULL, /* open dynamic archive */
+ NULL, /* place orphan */
+ NULL, /* set_symbols */
+ NULL, /* parse_args */
+ gld${EMULATION_NAME}_add_options,
+ gld${EMULATION_NAME}_handle_option,
+ NULL, /* unrecognized_file */
+ gld_${EMULATION_NAME}_list_options,
+ NULL, /* recognized file */
+ NULL, /* find_potential_libraries */
+ NULL /* new_vers_pattern */
+};
+EOF
diff --git a/binutils-2.21/ld/emultempl/vanilla.em b/binutils-2.21/ld/emultempl/vanilla.em
new file mode 100644
index 0000000..4a83dfd
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/vanilla.em
@@ -0,0 +1,87 @@
+# This shell script emits a C file. -*- C -*-
+# It does some substitutions.
+fragment <<EOF
+/* A vanilla emulation with no defaults
+ Copyright 1991, 1992, 1994, 2000, 2001, 2002, 2003, 2005, 2007, 2008
+ Free Software Foundation, Inc.
+ Written by Steve Chamberlain steve@cygnus.com
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+
+#include "ld.h"
+#include "ldmisc.h"
+#include "ldmain.h"
+
+#include "ldexp.h"
+#include "ldlang.h"
+#include "ldfile.h"
+#include "ldemul.h"
+
+static void vanilla_before_parse (void)
+{
+}
+
+static void
+vanilla_set_output_arch (void)
+{
+ /* Set the output architecture and machine if possible */
+ unsigned long machine = 0;
+ bfd_set_arch_mach (link_info.output_bfd,
+ ldfile_output_architecture, machine);
+}
+
+static char *
+vanilla_get_script (int *isfile)
+{
+ *isfile = 0;
+ return "";
+}
+
+struct ld_emulation_xfer_struct ld_vanilla_emulation =
+{
+ vanilla_before_parse,
+ syslib_default,
+ hll_default,
+ after_parse_default,
+ after_open_default,
+ after_allocation_default,
+ vanilla_set_output_arch,
+ ldemul_default_target,
+ before_allocation_default,
+ vanilla_get_script,
+ "vanilla",
+ "a.out-sunos-big",
+ finish_default,
+ NULL, /* create output section statements */
+ NULL, /* open dynamic archive */
+ NULL, /* place orphan */
+ NULL, /* set symbols */
+ NULL, /* parse args */
+ NULL, /* add_options */
+ NULL, /* handle_option */
+ NULL, /* unrecognized file */
+ NULL, /* list options */
+ NULL, /* recognized file */
+ NULL, /* find_potential_libraries */
+ NULL /* new_vers_pattern */
+};
+EOF
diff --git a/binutils-2.21/ld/emultempl/vms.em b/binutils-2.21/ld/emultempl/vms.em
new file mode 100644
index 0000000..f21796b
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/vms.em
@@ -0,0 +1,126 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2010
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# This file is sourced from generic.em.
+
+fragment <<EOF
+static void
+gld${EMULATION_NAME}_before_parse (void)
+{
+ ldfile_set_output_arch ("${ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
+ config.dynamic_link = TRUE;
+ config.has_shared = FALSE; /* Not yet. */
+}
+
+/* This is called before the input files are opened. We add the
+ standard library. */
+
+static void
+gld${EMULATION_NAME}_create_output_section_statements (void)
+{
+ lang_add_input_file ("imagelib", lang_input_file_is_l_enum, NULL);
+ lang_add_input_file ("starlet", lang_input_file_is_l_enum, NULL);
+ lang_add_input_file ("sys\$public_vectors", lang_input_file_is_l_enum, NULL);
+}
+
+/* Try to open a dynamic archive. This is where we know that VMS
+ shared images (dynamic libraries) have an extension of .exe. */
+
+static bfd_boolean
+gld${EMULATION_NAME}_open_dynamic_archive (const char *arch ATTRIBUTE_UNUSED,
+ search_dirs_type *search,
+ lang_input_statement_type *entry)
+{
+ char *string;
+
+ if (! entry->is_archive)
+ return FALSE;
+
+ string = (char *) xmalloc (strlen (search->name)
+ + strlen (entry->filename)
+ + sizeof "/.exe");
+
+ sprintf (string, "%s/%s.exe", search->name, entry->filename);
+
+ if (! ldfile_try_open_bfd (string, entry))
+ {
+ free (string);
+ return FALSE;
+ }
+
+ entry->filename = string;
+
+ return TRUE;
+}
+
+static int
+gld${EMULATION_NAME}_find_potential_libraries
+ (char *name, lang_input_statement_type *entry)
+{
+ return ldfile_open_file_search (name, entry, "", ".olb");
+}
+
+/* Place an orphan section. We use this to put random OVR sections.
+ Much borrowed from elf32.em. */
+
+static lang_output_section_statement_type *
+vms_place_orphan (asection *s,
+ const char *secname ATTRIBUTE_UNUSED,
+ int constraint ATTRIBUTE_UNUSED)
+{
+ static struct orphan_save hold_data =
+ {
+ "\$DATA\$",
+ SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_DATA,
+ 0, 0, 0, 0
+ };
+
+ /* We have nothing to say for anything other than a final link or an excluded
+ section. */
+ if (link_info.relocatable
+ || (s->flags & (SEC_EXCLUDE | SEC_LOAD)) != SEC_LOAD)
+ return NULL;
+
+ /* FIXME: we should place sections by VMS program section flags. */
+
+ /* Only handle data sections. */
+ if ((s->flags & SEC_DATA) == 0)
+ return NULL;
+
+ if (hold_data.os == NULL)
+ hold_data.os = lang_output_section_find (hold_data.name);
+
+ if (hold_data.os != NULL)
+ {
+ lang_add_section (&hold_data.os->children, s, hold_data.os);
+ return hold_data.os;
+ }
+ else
+ return NULL;
+}
+EOF
+
+LDEMUL_PLACE_ORPHAN=vms_place_orphan
+LDEMUL_BEFORE_PARSE=gld"$EMULATION_NAME"_before_parse
+LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS=gld"$EMULATION_NAME"_create_output_section_statements
+LDEMUL_FIND_POTENTIAL_LIBRARIES=gld"$EMULATION_NAME"_find_potential_libraries
+LDEMUL_OPEN_DYNAMIC_ARCHIVE=gld"$EMULATION_NAME"_open_dynamic_archive
diff --git a/binutils-2.21/ld/emultempl/vxworks.em b/binutils-2.21/ld/emultempl/vxworks.em
new file mode 100644
index 0000000..7a21ac3
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/vxworks.em
@@ -0,0 +1,102 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2006, 2007, 2008, 2010 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+if test -n "$VXWORKS_BASE_EM_FILE" ; then
+ source_em "${srcdir}/emultempl/${VXWORKS_BASE_EM_FILE}.em"
+fi
+
+fragment <<EOF
+
+static int force_dynamic;
+
+static void
+vxworks_before_parse (void)
+{
+ ${LDEMUL_BEFORE_PARSE-gld${EMULATION_NAME}_before_parse} ();
+ config.rpath_separator = ';';
+}
+
+static void
+vxworks_after_open (void)
+{
+ ${LDEMUL_AFTER_OPEN-gld${EMULATION_NAME}_after_open} ();
+
+ if (force_dynamic
+ && link_info.input_bfds
+ && bfd_get_flavour (link_info.output_bfd) == bfd_target_elf_flavour
+ && !_bfd_elf_link_create_dynamic_sections (link_info.input_bfds,
+ &link_info))
+ einfo ("%X%P: Cannot create dynamic sections %E\n");
+
+ if (!force_dynamic
+ && !link_info.shared
+ && bfd_get_flavour (link_info.output_bfd) == bfd_target_elf_flavour
+ && elf_hash_table (&link_info)->dynamic_sections_created)
+ einfo ("%X%P: Dynamic sections created in non-dynamic link\n");
+}
+
+EOF
+
+PARSE_AND_LIST_PROLOGUE=$PARSE_AND_LIST_PROLOGUE'
+enum {
+ OPTION_FORCE_DYNAMIC = 501
+};
+'
+
+PARSE_AND_LIST_LONGOPTS=$PARSE_AND_LIST_LONGOPTS'
+ {"force-dynamic", no_argument, NULL, OPTION_FORCE_DYNAMIC},
+'
+
+PARSE_AND_LIST_OPTIONS=$PARSE_AND_LIST_OPTIONS'
+ fprintf (file, _("\
+ --force-dynamic Always create dynamic sections\n"));
+'
+
+PARSE_AND_LIST_ARGS_CASES=$PARSE_AND_LIST_ARGS_CASES'
+ case OPTION_FORCE_DYNAMIC:
+ force_dynamic = 1;
+ break;
+'
+
+# Hook in our routines above. There are three possibilities:
+#
+# (1) VXWORKS_BASE_EM_FILE did not set the hook's LDEMUL_FOO variable.
+# We want to define LDEMUL_FOO to vxworks_foo in that case,
+#
+# (2) VXWORKS_BASE_EM_FILE set the hook's LDEMUL_FOO variable to
+# gld${EMULATION_NAME}_foo. This means that the file has
+# replaced elf32.em's default definition, so we simply #define
+# the current value of LDEMUL_FOO to vxworks_foo.
+#
+# (3) VXWORKS_BASE_EM_FILE set the hook's LDEMUL_FOO variable to
+# something other than gld${EMULATION_NAME}_foo. We handle
+# this case in the same way as (1).
+for override in before_parse after_open; do
+ var="LDEMUL_`echo ${override} | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`"
+ eval value=\$${var}
+ if test "${value}" = "gld${EMULATION_NAME}_${override}"; then
+ fragment <<EOF
+#define ${value} vxworks_${override}
+EOF
+ else
+ eval $var=vxworks_${override}
+ fi
+done
diff --git a/binutils-2.21/ld/emultempl/xtensaelf.em b/binutils-2.21/ld/emultempl/xtensaelf.em
new file mode 100644
index 0000000..b7da721
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/xtensaelf.em
@@ -0,0 +1,1960 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em, and defines extra xtensa-elf
+# specific routines.
+#
+fragment <<EOF
+
+#include <xtensa-config.h>
+#include "../bfd/elf-bfd.h"
+#include "../bfd/libbfd.h"
+#include "elf/xtensa.h"
+#include "bfd.h"
+
+/* Provide default values for new configuration settings. */
+#ifndef XSHAL_ABI
+#define XSHAL_ABI 0
+#endif
+
+static void xtensa_wild_group_interleave (lang_statement_union_type *);
+static void xtensa_colocate_output_literals (lang_statement_union_type *);
+static void xtensa_strip_inconsistent_linkonce_sections
+ (lang_statement_list_type *);
+
+
+/* This number is irrelevant until we turn on use_literal_pages */
+static bfd_vma xtensa_page_power = 12; /* 4K pages. */
+
+/* To force a page break between literals and text, change
+ xtensa_use_literal_pages to "TRUE". */
+static bfd_boolean xtensa_use_literal_pages = FALSE;
+
+#define EXTRA_VALIDATION 0
+
+
+static char *
+elf_xtensa_choose_target (int argc ATTRIBUTE_UNUSED,
+ char **argv ATTRIBUTE_UNUSED)
+{
+ if (XCHAL_HAVE_BE)
+ return "${BIG_OUTPUT_FORMAT}";
+ else
+ return "${LITTLE_OUTPUT_FORMAT}";
+}
+
+
+static void
+elf_xtensa_before_parse (void)
+{
+ /* Just call the default hook.... Tensilica's version of this function
+ does some other work that isn't relevant here. */
+ gld${EMULATION_NAME}_before_parse ();
+}
+
+
+static void
+remove_section (bfd *abfd, asection *os)
+{
+ asection **spp;
+ for (spp = &abfd->sections; *spp; spp = &(*spp)->next)
+ if (*spp == os)
+ {
+ *spp = os->next;
+ os->owner->section_count--;
+ break;
+ }
+}
+
+
+static bfd_boolean
+replace_insn_sec_with_prop_sec (bfd *abfd,
+ const char *insn_sec_name,
+ const char *prop_sec_name,
+ char **error_message)
+{
+ asection *insn_sec;
+ asection *prop_sec;
+ bfd_byte *prop_contents = NULL;
+ bfd_byte *insn_contents = NULL;
+ unsigned entry_count;
+ unsigned entry;
+ Elf_Internal_Shdr *rel_hdr;
+ Elf_Internal_Rela *internal_relocs = NULL;
+ unsigned reloc_count;
+
+ *error_message = "";
+ insn_sec = bfd_get_section_by_name (abfd, insn_sec_name);
+ if (insn_sec == NULL)
+ return TRUE;
+ entry_count = insn_sec->size / 8;
+
+ prop_sec = bfd_get_section_by_name (abfd, prop_sec_name);
+ if (prop_sec != NULL && insn_sec != NULL)
+ {
+ *error_message = _("file already has property tables");
+ return FALSE;
+ }
+
+ if (insn_sec->size != 0)
+ {
+ insn_contents = (bfd_byte *) bfd_malloc (insn_sec->size);
+ if (insn_contents == NULL)
+ {
+ *error_message = _("out of memory");
+ goto cleanup;
+ }
+ if (! bfd_get_section_contents (abfd, insn_sec, insn_contents,
+ (file_ptr) 0, insn_sec->size))
+ {
+ *error_message = _("failed to read section contents");
+ goto cleanup;
+ }
+ }
+
+ /* Create a property table section for it. */
+ prop_sec_name = strdup (prop_sec_name);
+ prop_sec = bfd_make_section_with_flags
+ (abfd, prop_sec_name, bfd_get_section_flags (abfd, insn_sec));
+ if (prop_sec == NULL
+ || ! bfd_set_section_alignment (abfd, prop_sec, 2))
+ {
+ *error_message = _("could not create new section");
+ goto cleanup;
+ }
+
+ prop_sec->size = entry_count * 12;
+ prop_contents = (bfd_byte *) bfd_zalloc (abfd, prop_sec->size);
+ elf_section_data (prop_sec)->this_hdr.contents = prop_contents;
+
+ /* The entry size and size must be set to allow the linker to compute
+ the number of relocations since it does not use reloc_count. */
+ rel_hdr = _bfd_elf_single_rel_hdr (prop_sec);
+ rel_hdr->sh_entsize = sizeof (Elf32_External_Rela);
+ rel_hdr->sh_size = _bfd_elf_single_rel_hdr (insn_sec)->sh_size;
+
+ if (prop_contents == NULL && prop_sec->size != 0)
+ {
+ *error_message = _("could not allocate section contents");
+ goto cleanup;
+ }
+
+ /* Read the relocations. */
+ reloc_count = insn_sec->reloc_count;
+ if (reloc_count != 0)
+ {
+ /* If there is already an internal_reloc, then save it so that the
+ read_relocs function freshly allocates a copy. */
+ Elf_Internal_Rela *saved_relocs = elf_section_data (insn_sec)->relocs;
+
+ elf_section_data (insn_sec)->relocs = NULL;
+ internal_relocs =
+ _bfd_elf_link_read_relocs (abfd, insn_sec, NULL, NULL, FALSE);
+ elf_section_data (insn_sec)->relocs = saved_relocs;
+
+ if (internal_relocs == NULL)
+ {
+ *error_message = _("out of memory");
+ goto cleanup;
+ }
+ }
+
+ /* Create a relocation section for the property section. */
+ if (internal_relocs != NULL)
+ {
+ elf_section_data (prop_sec)->relocs = internal_relocs;
+ prop_sec->reloc_count = reloc_count;
+ }
+
+ /* Now copy each insn table entry to the prop table entry with
+ appropriate flags. */
+ for (entry = 0; entry < entry_count; ++entry)
+ {
+ unsigned value;
+ unsigned flags = (XTENSA_PROP_INSN | XTENSA_PROP_NO_TRANSFORM
+ | XTENSA_PROP_INSN_NO_REORDER);
+ value = bfd_get_32 (abfd, insn_contents + entry * 8 + 0);
+ bfd_put_32 (abfd, value, prop_contents + entry * 12 + 0);
+ value = bfd_get_32 (abfd, insn_contents + entry * 8 + 4);
+ bfd_put_32 (abfd, value, prop_contents + entry * 12 + 4);
+ bfd_put_32 (abfd, flags, prop_contents + entry * 12 + 8);
+ }
+
+ /* Now copy all of the relocations. Change offsets for the
+ instruction table section to offsets in the property table
+ section. */
+ if (internal_relocs)
+ {
+ unsigned i;
+
+ for (i = 0; i < reloc_count; i++)
+ {
+ Elf_Internal_Rela *rela;
+ unsigned r_offset;
+
+ rela = &internal_relocs[i];
+
+ /* If this relocation is to the .xt.insn section,
+ change the section number and the offset. */
+ r_offset = rela->r_offset;
+ r_offset += 4 * (r_offset / 8);
+ rela->r_offset = r_offset;
+ }
+ }
+
+ remove_section (abfd, insn_sec);
+
+ if (insn_contents)
+ free (insn_contents);
+
+ return TRUE;
+
+ cleanup:
+ if (prop_sec && prop_sec->owner)
+ remove_section (abfd, prop_sec);
+ if (insn_contents)
+ free (insn_contents);
+ if (internal_relocs)
+ free (internal_relocs);
+
+ return FALSE;
+}
+
+
+#define PROP_SEC_BASE_NAME ".xt.prop"
+#define INSN_SEC_BASE_NAME ".xt.insn"
+#define LINKONCE_SEC_OLD_TEXT_BASE_NAME ".gnu.linkonce.x."
+
+
+static void
+replace_instruction_table_sections (bfd *abfd, asection *sec)
+{
+ char *message = "";
+ const char *insn_sec_name = NULL;
+ char *prop_sec_name = NULL;
+ char *owned_prop_sec_name = NULL;
+ const char *sec_name;
+
+ sec_name = bfd_get_section_name (abfd, sec);
+ if (strcmp (sec_name, INSN_SEC_BASE_NAME) == 0)
+ {
+ insn_sec_name = INSN_SEC_BASE_NAME;
+ prop_sec_name = PROP_SEC_BASE_NAME;
+ }
+ else if (CONST_STRNEQ (sec_name, LINKONCE_SEC_OLD_TEXT_BASE_NAME))
+ {
+ insn_sec_name = sec_name;
+ owned_prop_sec_name = (char *) xmalloc (strlen (sec_name) + 20);
+ prop_sec_name = owned_prop_sec_name;
+ strcpy (prop_sec_name, ".gnu.linkonce.prop.t.");
+ strcat (prop_sec_name,
+ sec_name + strlen (LINKONCE_SEC_OLD_TEXT_BASE_NAME));
+ }
+ if (insn_sec_name != NULL)
+ {
+ if (! replace_insn_sec_with_prop_sec (abfd, insn_sec_name, prop_sec_name,
+ &message))
+ {
+ einfo (_("%P: warning: failed to convert %s table in %B (%s); subsequent disassembly may be incomplete\n"),
+ insn_sec_name, abfd, message);
+ }
+ }
+ if (owned_prop_sec_name)
+ free (owned_prop_sec_name);
+}
+
+
+/* This is called after all input sections have been opened to convert
+ instruction tables (.xt.insn, gnu.linkonce.x.*) tables into property
+ tables (.xt.prop) before any section placement. */
+
+static void
+elf_xtensa_after_open (void)
+{
+ /* First call the ELF version. */
+ gld${EMULATION_NAME}_after_open ();
+
+ /* Now search the input files looking for instruction table sections. */
+ LANG_FOR_EACH_INPUT_STATEMENT (f)
+ {
+ asection *sec = f->the_bfd->sections;
+ asection *next_sec;
+
+ /* Do not use bfd_map_over_sections here since we are removing
+ sections as we iterate. */
+ while (sec != NULL)
+ {
+ next_sec = sec->next;
+ replace_instruction_table_sections (f->the_bfd, sec);
+ sec = next_sec;
+ }
+ }
+}
+
+
+static bfd_boolean
+xt_config_info_unpack_and_check (char *data,
+ bfd_boolean *pmismatch,
+ char **pmsg)
+{
+ char *d, *key;
+ unsigned num;
+
+ *pmismatch = FALSE;
+
+ d = data;
+ while (*d)
+ {
+ key = d;
+ d = strchr (d, '=');
+ if (! d)
+ goto error;
+
+ /* Overwrite the equal sign. */
+ *d++ = 0;
+
+ /* Check if this is a quoted string or a number. */
+ if (*d == '"')
+ {
+ /* No string values are currently checked by LD;
+ just skip over the quotes. */
+ d++;
+ d = strchr (d, '"');
+ if (! d)
+ goto error;
+ /* Overwrite the trailing quote. */
+ *d++ = 0;
+ }
+ else
+ {
+ if (*d == 0)
+ goto error;
+ num = strtoul (d, &d, 0);
+
+ if (! strcmp (key, "ABI"))
+ {
+ if (num != XSHAL_ABI)
+ {
+ *pmismatch = TRUE;
+ *pmsg = "ABI does not match";
+ }
+ }
+ else if (! strcmp (key, "USE_ABSOLUTE_LITERALS"))
+ {
+ if (num != XSHAL_USE_ABSOLUTE_LITERALS)
+ {
+ *pmismatch = TRUE;
+ *pmsg = "incompatible use of the Extended L32R option";
+ }
+ }
+ }
+
+ if (*d++ != '\n')
+ goto error;
+ }
+
+ return TRUE;
+
+ error:
+ return FALSE;
+}
+
+
+#define XTINFO_NAME "Xtensa_Info"
+#define XTINFO_NAMESZ 12
+#define XTINFO_TYPE 1
+
+static void
+check_xtensa_info (bfd *abfd, asection *info_sec)
+{
+ char *data, *errmsg = "";
+ bfd_boolean mismatch;
+
+ data = xmalloc (info_sec->size);
+ if (! bfd_get_section_contents (abfd, info_sec, data, 0, info_sec->size))
+ einfo (_("%F%P:%B: cannot read contents of section %A\n"), abfd, info_sec);
+
+ if (info_sec->size > 24
+ && info_sec->size >= 24 + bfd_get_32 (abfd, data + 4)
+ && bfd_get_32 (abfd, data + 0) == XTINFO_NAMESZ
+ && bfd_get_32 (abfd, data + 8) == XTINFO_TYPE
+ && strcmp (data + 12, XTINFO_NAME) == 0
+ && xt_config_info_unpack_and_check (data + 12 + XTINFO_NAMESZ,
+ &mismatch, &errmsg))
+ {
+ if (mismatch)
+ einfo (_("%P:%B: warning: incompatible Xtensa configuration (%s)\n"),
+ abfd, errmsg);
+ }
+ else
+ einfo (_("%P:%B: warning: cannot parse .xtensa.info section\n"), abfd);
+
+ free (data);
+}
+
+
+/* This is called after the sections have been attached to output
+ sections, but before any sizes or addresses have been set. */
+
+static void
+elf_xtensa_before_allocation (void)
+{
+ asection *info_sec, *first_info_sec;
+ bfd *first_bfd;
+ bfd_boolean is_big_endian = XCHAL_HAVE_BE;
+
+ /* Check that the output endianness matches the Xtensa
+ configuration. The BFD library always includes both big and
+ little endian target vectors for Xtensa, but it only supports the
+ detailed instruction encode/decode operations (such as are
+ required to process relocations) for the selected Xtensa
+ configuration. */
+
+ if (is_big_endian
+ && link_info.output_bfd->xvec->byteorder == BFD_ENDIAN_LITTLE)
+ {
+ einfo (_("%F%P: little endian output does not match "
+ "Xtensa configuration\n"));
+ }
+ if (!is_big_endian
+ && link_info.output_bfd->xvec->byteorder == BFD_ENDIAN_BIG)
+ {
+ einfo (_("%F%P: big endian output does not match "
+ "Xtensa configuration\n"));
+ }
+
+ /* Keep track of the first input .xtensa.info section, and as a fallback,
+ the first input bfd where a .xtensa.info section could be created.
+ After the input .xtensa.info has been checked, the contents of the
+ first one will be replaced with the output .xtensa.info table. */
+ first_info_sec = 0;
+ first_bfd = 0;
+
+ LANG_FOR_EACH_INPUT_STATEMENT (f)
+ {
+ /* Check that the endianness for each input file matches the output.
+ The merge_private_bfd_data hook has already reported any mismatches
+ as errors, but those errors are not fatal. At this point, we
+ cannot go any further if there are any mismatches. */
+ if ((is_big_endian && f->the_bfd->xvec->byteorder == BFD_ENDIAN_LITTLE)
+ || (!is_big_endian && f->the_bfd->xvec->byteorder == BFD_ENDIAN_BIG))
+ einfo (_("%F%P: cross-endian linking for %B not supported\n"),
+ f->the_bfd);
+
+ if (! first_bfd)
+ first_bfd = f->the_bfd;
+
+ info_sec = bfd_get_section_by_name (f->the_bfd, ".xtensa.info");
+ if (! info_sec)
+ continue;
+
+ if (! first_info_sec)
+ first_info_sec = info_sec;
+
+ /* Unpack the .xtensa.info section and check it against the current
+ Xtensa configuration. */
+ check_xtensa_info (f->the_bfd, info_sec);
+
+ /* Do not include this copy of .xtensa.info in the output. */
+ info_sec->size = 0;
+ info_sec->flags |= SEC_EXCLUDE;
+ }
+
+ /* Reuse the first .xtensa.info input section to hold the output
+ .xtensa.info; or, if none were found, create a new section in the
+ first input bfd (assuming there is one). */
+ info_sec = first_info_sec;
+ if (! info_sec && first_bfd)
+ {
+ info_sec = bfd_make_section_with_flags (first_bfd, ".xtensa.info",
+ SEC_HAS_CONTENTS | SEC_READONLY);
+ if (! info_sec)
+ einfo (_("%F%P: failed to create .xtensa.info section\n"));
+ }
+ if (info_sec)
+ {
+ int xtensa_info_size;
+ char *data;
+
+ info_sec->flags &= ~SEC_EXCLUDE;
+ info_sec->flags |= SEC_IN_MEMORY;
+
+ data = xmalloc (100);
+ sprintf (data, "USE_ABSOLUTE_LITERALS=%d\nABI=%d\n",
+ XSHAL_USE_ABSOLUTE_LITERALS, XSHAL_ABI);
+ xtensa_info_size = strlen (data) + 1;
+
+ /* Add enough null terminators to pad to a word boundary. */
+ do
+ data[xtensa_info_size++] = 0;
+ while ((xtensa_info_size & 3) != 0);
+
+ info_sec->size = 12 + XTINFO_NAMESZ + xtensa_info_size;
+ info_sec->contents = xmalloc (info_sec->size);
+ bfd_put_32 (info_sec->owner, XTINFO_NAMESZ, info_sec->contents + 0);
+ bfd_put_32 (info_sec->owner, xtensa_info_size, info_sec->contents + 4);
+ bfd_put_32 (info_sec->owner, XTINFO_TYPE, info_sec->contents + 8);
+ memcpy (info_sec->contents + 12, XTINFO_NAME, XTINFO_NAMESZ);
+ memcpy (info_sec->contents + 12 + XTINFO_NAMESZ, data, xtensa_info_size);
+ free (data);
+ }
+
+ /* Enable relaxation by default if the "--no-relax" option was not
+ specified. This is done here instead of in the before_parse hook
+ because there is a check in main() to prohibit use of --relax and
+ -r together and that combination should be allowed for Xtensa. */
+ if (RELAXATION_DISABLED_BY_DEFAULT)
+ ENABLE_RELAXATION;
+
+ xtensa_strip_inconsistent_linkonce_sections (stat_ptr);
+
+ gld${EMULATION_NAME}_before_allocation ();
+
+ xtensa_wild_group_interleave (stat_ptr->head);
+
+ if (RELAXATION_ENABLED)
+ xtensa_colocate_output_literals (stat_ptr->head);
+
+ /* TBD: We need to force the page alignments to here and only do
+ them as needed for the entire output section. Finally, if this
+ is a relocatable link then we need to add alignment notes so
+ that the literals can be separated later. */
+}
+
+
+typedef struct wildcard_list section_name_list;
+
+typedef struct reloc_deps_e_t reloc_deps_e;
+typedef struct reloc_deps_section_t reloc_deps_section;
+typedef struct reloc_deps_graph_t reloc_deps_graph;
+
+
+struct reloc_deps_e_t
+{
+ asection *src; /* Contains l32rs. */
+ asection *tgt; /* Contains literals. */
+ reloc_deps_e *next;
+};
+
+/* Place these in the userdata field. */
+struct reloc_deps_section_t
+{
+ reloc_deps_e *preds;
+ reloc_deps_e *succs;
+ bfd_boolean is_only_literal;
+};
+
+
+struct reloc_deps_graph_t
+{
+ size_t count;
+ size_t size;
+ asection **sections;
+};
+
+static void xtensa_layout_wild
+ (const reloc_deps_graph *, lang_wild_statement_type *);
+
+typedef void (*deps_callback_t) (asection *, /* src_sec */
+ bfd_vma, /* src_offset */
+ asection *, /* target_sec */
+ bfd_vma, /* target_offset */
+ void *); /* closure */
+
+extern bfd_boolean xtensa_callback_required_dependence
+ (bfd *, asection *, struct bfd_link_info *, deps_callback_t, void *);
+static void xtensa_ldlang_clear_addresses (lang_statement_union_type *);
+static bfd_boolean ld_local_file_relocations_fit
+ (lang_statement_union_type *, const reloc_deps_graph *);
+static bfd_vma ld_assign_relative_paged_dot
+ (bfd_vma, lang_statement_union_type *, const reloc_deps_graph *,
+ bfd_boolean);
+static bfd_vma ld_xtensa_insert_page_offsets
+ (bfd_vma, lang_statement_union_type *, reloc_deps_graph *, bfd_boolean);
+#if EXTRA_VALIDATION
+static size_t ld_count_children (lang_statement_union_type *);
+#endif
+
+extern lang_statement_list_type constructor_list;
+
+static reloc_deps_section *
+xtensa_get_section_deps (const reloc_deps_graph *deps ATTRIBUTE_UNUSED,
+ asection *sec)
+{
+ /* We have a separate function for this so that
+ we could in the future keep a completely independent
+ structure that maps a section to its dependence edges.
+ For now, we place these in the sec->userdata field. */
+ reloc_deps_section *sec_deps = sec->userdata;
+ return sec_deps;
+}
+
+static void
+xtensa_set_section_deps (const reloc_deps_graph *deps ATTRIBUTE_UNUSED,
+ asection *sec,
+ reloc_deps_section *deps_section)
+{
+ sec->userdata = deps_section;
+}
+
+
+/* This is used to keep a list of all of the sections participating in
+ the graph so we can clean them up quickly. */
+
+static void
+xtensa_append_section_deps (reloc_deps_graph *deps, asection *sec)
+{
+ if (deps->size <= deps->count)
+ {
+ asection **new_sections;
+ size_t i;
+ size_t new_size;
+
+ new_size = deps->size * 2;
+ if (new_size == 0)
+ new_size = 20;
+
+ new_sections = xmalloc (sizeof (asection *) * new_size);
+ memset (new_sections, 0, sizeof (asection *) * new_size);
+ for (i = 0; i < deps->count; i++)
+ {
+ new_sections[i] = deps->sections[i];
+ }
+ if (deps->sections != NULL)
+ free (deps->sections);
+ deps->sections = new_sections;
+ deps->size = new_size;
+ }
+ deps->sections[deps->count] = sec;
+ deps->count++;
+}
+
+
+static void
+free_reloc_deps_graph (reloc_deps_graph *deps)
+{
+ size_t i;
+ for (i = 0; i < deps->count; i++)
+ {
+ asection *sec = deps->sections[i];
+ reloc_deps_section *sec_deps;
+ sec_deps = xtensa_get_section_deps (deps, sec);
+ if (sec_deps)
+ {
+ reloc_deps_e *next;
+ while (sec_deps->succs != NULL)
+ {
+ next = sec_deps->succs->next;
+ free (sec_deps->succs);
+ sec_deps->succs = next;
+ }
+
+ while (sec_deps->preds != NULL)
+ {
+ next = sec_deps->preds->next;
+ free (sec_deps->preds);
+ sec_deps->preds = next;
+ }
+ free (sec_deps);
+ }
+ xtensa_set_section_deps (deps, sec, NULL);
+ }
+ if (deps->sections)
+ free (deps->sections);
+
+ free (deps);
+}
+
+
+static bfd_boolean
+section_is_source (const reloc_deps_graph *deps ATTRIBUTE_UNUSED,
+ lang_statement_union_type *s)
+{
+ asection *sec;
+ const reloc_deps_section *sec_deps;
+
+ if (s->header.type != lang_input_section_enum)
+ return FALSE;
+ sec = s->input_section.section;
+
+ sec_deps = xtensa_get_section_deps (deps, sec);
+ return sec_deps && sec_deps->succs != NULL;
+}
+
+
+static bfd_boolean
+section_is_target (const reloc_deps_graph *deps ATTRIBUTE_UNUSED,
+ lang_statement_union_type *s)
+{
+ asection *sec;
+ const reloc_deps_section *sec_deps;
+
+ if (s->header.type != lang_input_section_enum)
+ return FALSE;
+ sec = s->input_section.section;
+
+ sec_deps = xtensa_get_section_deps (deps, sec);
+ return sec_deps && sec_deps->preds != NULL;
+}
+
+
+static bfd_boolean
+section_is_source_or_target (const reloc_deps_graph *deps ATTRIBUTE_UNUSED,
+ lang_statement_union_type *s)
+{
+ return (section_is_source (deps, s)
+ || section_is_target (deps, s));
+}
+
+
+typedef struct xtensa_ld_iter_stack_t xtensa_ld_iter_stack;
+typedef struct xtensa_ld_iter_t xtensa_ld_iter;
+
+struct xtensa_ld_iter_t
+{
+ lang_statement_union_type *parent; /* Parent of the list. */
+ lang_statement_list_type *l; /* List that holds it. */
+ lang_statement_union_type **loc; /* Place in the list. */
+};
+
+struct xtensa_ld_iter_stack_t
+{
+ xtensa_ld_iter iterloc; /* List that hold it. */
+
+ xtensa_ld_iter_stack *next; /* Next in the stack. */
+ xtensa_ld_iter_stack *prev; /* Back pointer for stack. */
+};
+
+
+static void
+ld_xtensa_move_section_after (xtensa_ld_iter *to, xtensa_ld_iter *current)
+{
+ lang_statement_union_type *to_next;
+ lang_statement_union_type *current_next;
+ lang_statement_union_type **e;
+
+#if EXTRA_VALIDATION
+ size_t old_to_count, new_to_count;
+ size_t old_current_count, new_current_count;
+#endif
+
+ if (to == current)
+ return;
+
+#if EXTRA_VALIDATION
+ old_to_count = ld_count_children (to->parent);
+ old_current_count = ld_count_children (current->parent);
+#endif
+
+ to_next = *(to->loc);
+ current_next = (*current->loc)->header.next;
+
+ *(to->loc) = *(current->loc);
+
+ *(current->loc) = current_next;
+ (*(to->loc))->header.next = to_next;
+
+ /* reset "to" list tail */
+ for (e = &to->l->head; *e != NULL; e = &(*e)->header.next)
+ ;
+ to->l->tail = e;
+
+ /* reset "current" list tail */
+ for (e = &current->l->head; *e != NULL; e = &(*e)->header.next)
+ ;
+ current->l->tail = e;
+
+#if EXTRA_VALIDATION
+ new_to_count = ld_count_children (to->parent);
+ new_current_count = ld_count_children (current->parent);
+
+ ASSERT ((old_to_count + old_current_count)
+ == (new_to_count + new_current_count));
+#endif
+}
+
+
+/* Can only be called with lang_statements that have lists. Returns
+ FALSE if the list is empty. */
+
+static bfd_boolean
+iter_stack_empty (xtensa_ld_iter_stack **stack_p)
+{
+ return *stack_p == NULL;
+}
+
+
+static bfd_boolean
+iter_stack_push (xtensa_ld_iter_stack **stack_p,
+ lang_statement_union_type *parent)
+{
+ xtensa_ld_iter_stack *stack;
+ lang_statement_list_type *l = NULL;
+
+ switch (parent->header.type)
+ {
+ case lang_output_section_statement_enum:
+ l = &parent->output_section_statement.children;
+ break;
+ case lang_wild_statement_enum:
+ l = &parent->wild_statement.children;
+ break;
+ case lang_group_statement_enum:
+ l = &parent->group_statement.children;
+ break;
+ default:
+ ASSERT (0);
+ return FALSE;
+ }
+
+ /* Empty. do not push. */
+ if (l->tail == &l->head)
+ return FALSE;
+
+ stack = xmalloc (sizeof (xtensa_ld_iter_stack));
+ memset (stack, 0, sizeof (xtensa_ld_iter_stack));
+ stack->iterloc.parent = parent;
+ stack->iterloc.l = l;
+ stack->iterloc.loc = &l->head;
+
+ stack->next = *stack_p;
+ stack->prev = NULL;
+ if (*stack_p != NULL)
+ (*stack_p)->prev = stack;
+ *stack_p = stack;
+ return TRUE;
+}
+
+
+static void
+iter_stack_pop (xtensa_ld_iter_stack **stack_p)
+{
+ xtensa_ld_iter_stack *stack;
+
+ stack = *stack_p;
+
+ if (stack == NULL)
+ {
+ ASSERT (stack != NULL);
+ return;
+ }
+
+ if (stack->next != NULL)
+ stack->next->prev = NULL;
+
+ *stack_p = stack->next;
+ free (stack);
+}
+
+
+/* This MUST be called if, during iteration, the user changes the
+ underlying structure. It will check for a NULL current and advance
+ accordingly. */
+
+static void
+iter_stack_update (xtensa_ld_iter_stack **stack_p)
+{
+ if (!iter_stack_empty (stack_p)
+ && (*(*stack_p)->iterloc.loc) == NULL)
+ {
+ iter_stack_pop (stack_p);
+
+ while (!iter_stack_empty (stack_p)
+ && ((*(*stack_p)->iterloc.loc)->header.next == NULL))
+ {
+ iter_stack_pop (stack_p);
+ }
+ if (!iter_stack_empty (stack_p))
+ (*stack_p)->iterloc.loc = &(*(*stack_p)->iterloc.loc)->header.next;
+ }
+}
+
+
+static void
+iter_stack_next (xtensa_ld_iter_stack **stack_p)
+{
+ xtensa_ld_iter_stack *stack;
+ lang_statement_union_type *current;
+ stack = *stack_p;
+
+ current = *stack->iterloc.loc;
+ /* If we are on the first element. */
+ if (current != NULL)
+ {
+ switch (current->header.type)
+ {
+ case lang_output_section_statement_enum:
+ case lang_wild_statement_enum:
+ case lang_group_statement_enum:
+ /* If the list if not empty, we are done. */
+ if (iter_stack_push (stack_p, *stack->iterloc.loc))
+ return;
+ /* Otherwise increment the pointer as normal. */
+ break;
+ default:
+ break;
+ }
+ }
+
+ while (!iter_stack_empty (stack_p)
+ && ((*(*stack_p)->iterloc.loc)->header.next == NULL))
+ {
+ iter_stack_pop (stack_p);
+ }
+ if (!iter_stack_empty (stack_p))
+ (*stack_p)->iterloc.loc = &(*(*stack_p)->iterloc.loc)->header.next;
+}
+
+
+static lang_statement_union_type *
+iter_stack_current (xtensa_ld_iter_stack **stack_p)
+{
+ return *((*stack_p)->iterloc.loc);
+}
+
+
+/* The iter stack is a preorder. */
+
+static void
+iter_stack_create (xtensa_ld_iter_stack **stack_p,
+ lang_statement_union_type *parent)
+{
+ iter_stack_push (stack_p, parent);
+}
+
+
+static void
+iter_stack_copy_current (xtensa_ld_iter_stack **stack_p, xtensa_ld_iter *front)
+{
+ *front = (*stack_p)->iterloc;
+}
+
+
+static void
+xtensa_colocate_literals (reloc_deps_graph *deps,
+ lang_statement_union_type *statement)
+{
+ /* Keep a stack of pointers to control iteration through the contours. */
+ xtensa_ld_iter_stack *stack = NULL;
+ xtensa_ld_iter_stack **stack_p = &stack;
+
+ xtensa_ld_iter front; /* Location where new insertion should occur. */
+ xtensa_ld_iter *front_p = NULL;
+
+ xtensa_ld_iter current; /* Location we are checking. */
+ xtensa_ld_iter *current_p = NULL;
+ bfd_boolean in_literals = FALSE;
+
+ if (deps->count == 0)
+ return;
+
+ iter_stack_create (stack_p, statement);
+
+ while (!iter_stack_empty (stack_p))
+ {
+ bfd_boolean skip_increment = FALSE;
+ lang_statement_union_type *l = iter_stack_current (stack_p);
+
+ switch (l->header.type)
+ {
+ case lang_assignment_statement_enum:
+ /* Any assignment statement should block reordering across it. */
+ front_p = NULL;
+ in_literals = FALSE;
+ break;
+
+ case lang_input_section_enum:
+ if (front_p == NULL)
+ {
+ in_literals = (section_is_target (deps, l)
+ && !section_is_source (deps, l));
+ if (in_literals)
+ {
+ front_p = &front;
+ iter_stack_copy_current (stack_p, front_p);
+ }
+ }
+ else
+ {
+ bfd_boolean is_target;
+ current_p = &current;
+ iter_stack_copy_current (stack_p, current_p);
+ is_target = (section_is_target (deps, l)
+ && !section_is_source (deps, l));
+
+ if (in_literals)
+ {
+ iter_stack_copy_current (stack_p, front_p);
+ if (!is_target)
+ in_literals = FALSE;
+ }
+ else
+ {
+ if (is_target)
+ {
+ /* Try to insert in place. */
+ ld_xtensa_move_section_after (front_p, current_p);
+ ld_assign_relative_paged_dot (0x100000,
+ statement,
+ deps,
+ xtensa_use_literal_pages);
+
+ /* We use this code because it's already written. */
+ if (!ld_local_file_relocations_fit (statement, deps))
+ {
+ /* Move it back. */
+ ld_xtensa_move_section_after (current_p, front_p);
+ /* Reset the literal placement. */
+ iter_stack_copy_current (stack_p, front_p);
+ }
+ else
+ {
+ /* Move front pointer up by one. */
+ front_p->loc = &(*front_p->loc)->header.next;
+
+ /* Do not increment the current pointer. */
+ skip_increment = TRUE;
+ }
+ }
+ }
+ }
+ break;
+ default:
+ break;
+ }
+
+ if (!skip_increment)
+ iter_stack_next (stack_p);
+ else
+ /* Be careful to update the stack_p if it now is a null. */
+ iter_stack_update (stack_p);
+ }
+
+ lang_for_each_statement_worker (xtensa_ldlang_clear_addresses, statement);
+}
+
+
+static void
+xtensa_move_dependencies_to_front (reloc_deps_graph *deps,
+ lang_wild_statement_type *w)
+{
+ /* Keep a front pointer and a current pointer. */
+ lang_statement_union_type **front;
+ lang_statement_union_type **current;
+
+ /* Walk to the end of the targets. */
+ for (front = &w->children.head;
+ (*front != NULL) && section_is_source_or_target (deps, *front);
+ front = &(*front)->header.next)
+ ;
+
+ if (*front == NULL)
+ return;
+
+ current = &(*front)->header.next;
+ while (*current != NULL)
+ {
+ if (section_is_source_or_target (deps, *current))
+ {
+ /* Insert in place. */
+ xtensa_ld_iter front_iter;
+ xtensa_ld_iter current_iter;
+
+ front_iter.parent = (lang_statement_union_type *) w;
+ front_iter.l = &w->children;
+ front_iter.loc = front;
+
+ current_iter.parent = (lang_statement_union_type *) w;
+ current_iter.l = &w->children;
+ current_iter.loc = current;
+
+ ld_xtensa_move_section_after (&front_iter, &current_iter);
+ front = &(*front)->header.next;
+ }
+ else
+ {
+ current = &(*current)->header.next;
+ }
+ }
+}
+
+
+static bfd_boolean
+deps_has_sec_edge (const reloc_deps_graph *deps, asection *src, asection *tgt)
+{
+ const reloc_deps_section *sec_deps;
+ const reloc_deps_e *sec_deps_e;
+
+ sec_deps = xtensa_get_section_deps (deps, src);
+ if (sec_deps == NULL)
+ return FALSE;
+
+ for (sec_deps_e = sec_deps->succs;
+ sec_deps_e != NULL;
+ sec_deps_e = sec_deps_e->next)
+ {
+ ASSERT (sec_deps_e->src == src);
+ if (sec_deps_e->tgt == tgt)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+
+static bfd_boolean
+deps_has_edge (const reloc_deps_graph *deps,
+ lang_statement_union_type *src,
+ lang_statement_union_type *tgt)
+{
+ if (!section_is_source (deps, src))
+ return FALSE;
+ if (!section_is_target (deps, tgt))
+ return FALSE;
+
+ if (src->header.type != lang_input_section_enum)
+ return FALSE;
+ if (tgt->header.type != lang_input_section_enum)
+ return FALSE;
+
+ return deps_has_sec_edge (deps, src->input_section.section,
+ tgt->input_section.section);
+}
+
+
+static void
+add_deps_edge (reloc_deps_graph *deps, asection *src_sec, asection *tgt_sec)
+{
+ reloc_deps_section *src_sec_deps;
+ reloc_deps_section *tgt_sec_deps;
+
+ reloc_deps_e *src_edge;
+ reloc_deps_e *tgt_edge;
+
+ if (deps_has_sec_edge (deps, src_sec, tgt_sec))
+ return;
+
+ src_sec_deps = xtensa_get_section_deps (deps, src_sec);
+ if (src_sec_deps == NULL)
+ {
+ /* Add a section. */
+ src_sec_deps = xmalloc (sizeof (reloc_deps_section));
+ memset (src_sec_deps, 0, sizeof (reloc_deps_section));
+ src_sec_deps->is_only_literal = 0;
+ src_sec_deps->preds = NULL;
+ src_sec_deps->succs = NULL;
+ xtensa_set_section_deps (deps, src_sec, src_sec_deps);
+ xtensa_append_section_deps (deps, src_sec);
+ }
+
+ tgt_sec_deps = xtensa_get_section_deps (deps, tgt_sec);
+ if (tgt_sec_deps == NULL)
+ {
+ /* Add a section. */
+ tgt_sec_deps = xmalloc (sizeof (reloc_deps_section));
+ memset (tgt_sec_deps, 0, sizeof (reloc_deps_section));
+ tgt_sec_deps->is_only_literal = 0;
+ tgt_sec_deps->preds = NULL;
+ tgt_sec_deps->succs = NULL;
+ xtensa_set_section_deps (deps, tgt_sec, tgt_sec_deps);
+ xtensa_append_section_deps (deps, tgt_sec);
+ }
+
+ /* Add the edges. */
+ src_edge = xmalloc (sizeof (reloc_deps_e));
+ memset (src_edge, 0, sizeof (reloc_deps_e));
+ src_edge->src = src_sec;
+ src_edge->tgt = tgt_sec;
+ src_edge->next = src_sec_deps->succs;
+ src_sec_deps->succs = src_edge;
+
+ tgt_edge = xmalloc (sizeof (reloc_deps_e));
+ memset (tgt_edge, 0, sizeof (reloc_deps_e));
+ tgt_edge->src = src_sec;
+ tgt_edge->tgt = tgt_sec;
+ tgt_edge->next = tgt_sec_deps->preds;
+ tgt_sec_deps->preds = tgt_edge;
+}
+
+
+static void
+build_deps_graph_callback (asection *src_sec,
+ bfd_vma src_offset ATTRIBUTE_UNUSED,
+ asection *target_sec,
+ bfd_vma target_offset ATTRIBUTE_UNUSED,
+ void *closure)
+{
+ reloc_deps_graph *deps = closure;
+
+ /* If the target is defined. */
+ if (target_sec != NULL)
+ add_deps_edge (deps, src_sec, target_sec);
+}
+
+
+static reloc_deps_graph *
+ld_build_required_section_dependence (lang_statement_union_type *s)
+{
+ reloc_deps_graph *deps;
+ xtensa_ld_iter_stack *stack = NULL;
+
+ deps = xmalloc (sizeof (reloc_deps_graph));
+ deps->sections = NULL;
+ deps->count = 0;
+ deps->size = 0;
+
+ for (iter_stack_create (&stack, s);
+ !iter_stack_empty (&stack);
+ iter_stack_next (&stack))
+ {
+ lang_statement_union_type *l = iter_stack_current (&stack);
+
+ if (l->header.type == lang_input_section_enum)
+ {
+ lang_input_section_type *input;
+ input = &l->input_section;
+ xtensa_callback_required_dependence (input->section->owner,
+ input->section,
+ &link_info,
+ /* Use the same closure. */
+ build_deps_graph_callback,
+ deps);
+ }
+ }
+ return deps;
+}
+
+
+#if EXTRA_VALIDATION
+static size_t
+ld_count_children (lang_statement_union_type *s)
+{
+ size_t count = 0;
+ xtensa_ld_iter_stack *stack = NULL;
+ for (iter_stack_create (&stack, s);
+ !iter_stack_empty (&stack);
+ iter_stack_next (&stack))
+ {
+ lang_statement_union_type *l = iter_stack_current (&stack);
+ ASSERT (l != NULL);
+ count++;
+ }
+ return count;
+}
+#endif /* EXTRA_VALIDATION */
+
+
+/* Check if a particular section is included in the link. This will only
+ be true for one instance of a particular linkonce section. */
+
+static bfd_boolean input_section_found = FALSE;
+static asection *input_section_target = NULL;
+
+static void
+input_section_linked_worker (lang_statement_union_type *statement)
+{
+ if ((statement->header.type == lang_input_section_enum
+ && (statement->input_section.section == input_section_target)))
+ input_section_found = TRUE;
+}
+
+static bfd_boolean
+input_section_linked (asection *sec)
+{
+ input_section_found = FALSE;
+ input_section_target = sec;
+ lang_for_each_statement_worker (input_section_linked_worker, stat_ptr->head);
+ return input_section_found;
+}
+
+
+/* Strip out any linkonce property tables or XCC exception tables where the
+ associated linkonce text is from a different object file. Normally,
+ a matching set of linkonce sections is taken from the same object file,
+ but sometimes the files are compiled differently so that some of the
+ linkonce sections are not present in all files. Stripping the
+ inconsistent sections like this is not completely robust -- a much
+ better solution is to use comdat groups. */
+
+static int linkonce_len = sizeof (".gnu.linkonce.") - 1;
+
+static bfd_boolean
+is_inconsistent_linkonce_section (asection *sec)
+{
+ bfd *abfd = sec->owner;
+ const char *sec_name = bfd_get_section_name (abfd, sec);
+ const char *name;
+
+ if ((bfd_get_section_flags (abfd, sec) & SEC_LINK_ONCE) == 0
+ || strncmp (sec_name, ".gnu.linkonce.", linkonce_len) != 0)
+ return FALSE;
+
+ /* Check if this is an Xtensa property section or an exception table
+ for Tensilica's XCC compiler. */
+ name = sec_name + linkonce_len;
+ if (CONST_STRNEQ (name, "prop."))
+ name = strchr (name + 5, '.') + 1;
+ else if (name[1] == '.'
+ && (name[0] == 'p' || name[0] == 'e' || name[0] == 'h'))
+ name += 2;
+ else
+ name = 0;
+
+ if (name)
+ {
+ char *dep_sec_name = xmalloc (strlen (sec_name) + 1);
+ asection *dep_sec;
+
+ /* Get the associated linkonce text section and check if it is
+ included in the link. If not, this section is inconsistent
+ and should be stripped. */
+ strcpy (dep_sec_name, ".gnu.linkonce.t.");
+ strcat (dep_sec_name, name);
+ dep_sec = bfd_get_section_by_name (abfd, dep_sec_name);
+ if (dep_sec == NULL || ! input_section_linked (dep_sec))
+ {
+ free (dep_sec_name);
+ return TRUE;
+ }
+ free (dep_sec_name);
+ }
+
+ return FALSE;
+}
+
+
+static void
+xtensa_strip_inconsistent_linkonce_sections (lang_statement_list_type *slist)
+{
+ lang_statement_union_type **s_p = &slist->head;
+ while (*s_p)
+ {
+ lang_statement_union_type *s = *s_p;
+ lang_statement_union_type *s_next = (*s_p)->header.next;
+
+ switch (s->header.type)
+ {
+ case lang_input_section_enum:
+ if (is_inconsistent_linkonce_section (s->input_section.section))
+ {
+ s->input_section.section->output_section = bfd_abs_section_ptr;
+ *s_p = s_next;
+ continue;
+ }
+ break;
+
+ case lang_constructors_statement_enum:
+ xtensa_strip_inconsistent_linkonce_sections (&constructor_list);
+ break;
+
+ case lang_output_section_statement_enum:
+ if (s->output_section_statement.children.head)
+ xtensa_strip_inconsistent_linkonce_sections
+ (&s->output_section_statement.children);
+ break;
+
+ case lang_wild_statement_enum:
+ xtensa_strip_inconsistent_linkonce_sections
+ (&s->wild_statement.children);
+ break;
+
+ case lang_group_statement_enum:
+ xtensa_strip_inconsistent_linkonce_sections
+ (&s->group_statement.children);
+ break;
+
+ case lang_data_statement_enum:
+ case lang_reloc_statement_enum:
+ case lang_object_symbols_statement_enum:
+ case lang_output_statement_enum:
+ case lang_target_statement_enum:
+ case lang_input_statement_enum:
+ case lang_assignment_statement_enum:
+ case lang_padding_statement_enum:
+ case lang_address_statement_enum:
+ case lang_fill_statement_enum:
+ break;
+
+ default:
+ FAIL ();
+ break;
+ }
+
+ s_p = &(*s_p)->header.next;
+ }
+
+ /* Reset the tail of the list, in case the last entry was removed. */
+ if (s_p != slist->tail)
+ slist->tail = s_p;
+}
+
+
+static void
+xtensa_wild_group_interleave_callback (lang_statement_union_type *statement)
+{
+ lang_wild_statement_type *w;
+ reloc_deps_graph *deps;
+ if (statement->header.type == lang_wild_statement_enum)
+ {
+#if EXTRA_VALIDATION
+ size_t old_child_count;
+ size_t new_child_count;
+#endif
+ bfd_boolean no_reorder;
+
+ w = &statement->wild_statement;
+
+ no_reorder = FALSE;
+
+ /* If it has 0 or 1 section bound, then do not reorder. */
+ if (w->children.head == NULL
+ || (w->children.head->header.type == lang_input_section_enum
+ && w->children.head->header.next == NULL))
+ no_reorder = TRUE;
+
+ if (w->filenames_sorted)
+ no_reorder = TRUE;
+
+ /* Check for sorting in a section list wildcard spec as well. */
+ if (!no_reorder)
+ {
+ struct wildcard_list *l;
+ for (l = w->section_list; l != NULL; l = l->next)
+ {
+ if (l->spec.sorted == TRUE)
+ {
+ no_reorder = TRUE;
+ break;
+ }
+ }
+ }
+
+ /* Special case until the NOREORDER linker directive is supported:
+ *(.init) output sections and *(.fini) specs may NOT be reordered. */
+
+ /* Check for sorting in a section list wildcard spec as well. */
+ if (!no_reorder)
+ {
+ struct wildcard_list *l;
+ for (l = w->section_list; l != NULL; l = l->next)
+ {
+ if (l->spec.name
+ && ((strcmp (".init", l->spec.name) == 0)
+ || (strcmp (".fini", l->spec.name) == 0)))
+ {
+ no_reorder = TRUE;
+ break;
+ }
+ }
+ }
+
+#if EXTRA_VALIDATION
+ old_child_count = ld_count_children (statement);
+#endif
+
+ /* It is now officially a target. Build the graph of source
+ section -> target section (kept as a list of edges). */
+ deps = ld_build_required_section_dependence (statement);
+
+ /* If this wildcard does not reorder.... */
+ if (!no_reorder && deps->count != 0)
+ {
+ /* First check for reverse dependences. Fix if possible. */
+ xtensa_layout_wild (deps, w);
+
+ xtensa_move_dependencies_to_front (deps, w);
+#if EXTRA_VALIDATION
+ new_child_count = ld_count_children (statement);
+ ASSERT (new_child_count == old_child_count);
+#endif
+
+ xtensa_colocate_literals (deps, statement);
+
+#if EXTRA_VALIDATION
+ new_child_count = ld_count_children (statement);
+ ASSERT (new_child_count == old_child_count);
+#endif
+ }
+
+ /* Clean up. */
+ free_reloc_deps_graph (deps);
+ }
+}
+
+
+static void
+xtensa_wild_group_interleave (lang_statement_union_type *s)
+{
+ lang_for_each_statement_worker (xtensa_wild_group_interleave_callback, s);
+}
+
+
+static void
+xtensa_layout_wild (const reloc_deps_graph *deps, lang_wild_statement_type *w)
+{
+ /* If it does not fit initially, we need to do this step. Move all
+ of the wild literal sections to a new list, then move each of
+ them back in just before the first section they depend on. */
+ lang_statement_union_type **s_p;
+#if EXTRA_VALIDATION
+ size_t old_count, new_count;
+ size_t ct1, ct2;
+#endif
+
+ lang_wild_statement_type literal_wild;
+ literal_wild.header.next = NULL;
+ literal_wild.header.type = lang_wild_statement_enum;
+ literal_wild.filename = NULL;
+ literal_wild.filenames_sorted = FALSE;
+ literal_wild.section_list = NULL;
+ literal_wild.keep_sections = FALSE;
+ literal_wild.children.head = NULL;
+ literal_wild.children.tail = &literal_wild.children.head;
+
+#if EXTRA_VALIDATION
+ old_count = ld_count_children ((lang_statement_union_type*) w);
+#endif
+
+ s_p = &w->children.head;
+ while (*s_p != NULL)
+ {
+ lang_statement_union_type *l = *s_p;
+ if (l->header.type == lang_input_section_enum)
+ {
+ if (section_is_target (deps, l)
+ && ! section_is_source (deps, l))
+ {
+ /* Detach. */
+ *s_p = l->header.next;
+ if (*s_p == NULL)
+ w->children.tail = s_p;
+ l->header.next = NULL;
+
+ /* Append. */
+ *literal_wild.children.tail = l;
+ literal_wild.children.tail = &l->header.next;
+ continue;
+ }
+ }
+ s_p = &(*s_p)->header.next;
+ }
+
+#if EXTRA_VALIDATION
+ ct1 = ld_count_children ((lang_statement_union_type*) w);
+ ct2 = ld_count_children ((lang_statement_union_type*) &literal_wild);
+
+ ASSERT (old_count == (ct1 + ct2));
+#endif
+
+ /* Now place them back in front of their dependent sections. */
+
+ while (literal_wild.children.head != NULL)
+ {
+ lang_statement_union_type *lit = literal_wild.children.head;
+ bfd_boolean placed = FALSE;
+
+#if EXTRA_VALIDATION
+ ASSERT (ct2 > 0);
+ ct2--;
+#endif
+
+ /* Detach. */
+ literal_wild.children.head = lit->header.next;
+ if (literal_wild.children.head == NULL)
+ literal_wild.children.tail = &literal_wild.children.head;
+ lit->header.next = NULL;
+
+ /* Find a spot to place it. */
+ for (s_p = &w->children.head; *s_p != NULL; s_p = &(*s_p)->header.next)
+ {
+ lang_statement_union_type *src = *s_p;
+ if (deps_has_edge (deps, src, lit))
+ {
+ /* Place it here. */
+ lit->header.next = *s_p;
+ *s_p = lit;
+ placed = TRUE;
+ break;
+ }
+ }
+
+ if (!placed)
+ {
+ /* Put it at the end. */
+ *w->children.tail = lit;
+ w->children.tail = &lit->header.next;
+ }
+ }
+
+#if EXTRA_VALIDATION
+ new_count = ld_count_children ((lang_statement_union_type*) w);
+ ASSERT (new_count == old_count);
+#endif
+}
+
+
+static void
+xtensa_colocate_output_literals_callback (lang_statement_union_type *statement)
+{
+ reloc_deps_graph *deps;
+ if (statement->header.type == lang_output_section_statement_enum)
+ {
+ /* Now, we walk over the contours of the output section statement.
+
+ First we build the literal section dependences as before.
+
+ At the first uniquely_literal section, we mark it as a good
+ spot to place other literals. Continue walking (and counting
+ sizes) until we find the next literal section. If this
+ section can be moved to the first one, then we move it. If
+ we every find a modification of ".", start over. If we find
+ a labeling of the current location, start over. Finally, at
+ the end, if we require page alignment, add page alignments. */
+
+#if EXTRA_VALIDATION
+ size_t old_child_count;
+ size_t new_child_count;
+#endif
+ bfd_boolean no_reorder = FALSE;
+
+#if EXTRA_VALIDATION
+ old_child_count = ld_count_children (statement);
+#endif
+
+ /* It is now officially a target. Build the graph of source
+ section -> target section (kept as a list of edges). */
+
+ deps = ld_build_required_section_dependence (statement);
+
+ /* If this wildcard does not reorder.... */
+ if (!no_reorder)
+ {
+ /* First check for reverse dependences. Fix if possible. */
+ xtensa_colocate_literals (deps, statement);
+
+#if EXTRA_VALIDATION
+ new_child_count = ld_count_children (statement);
+ ASSERT (new_child_count == old_child_count);
+#endif
+ }
+
+ /* Insert align/offset assignment statement. */
+ if (xtensa_use_literal_pages)
+ {
+ ld_xtensa_insert_page_offsets (0, statement, deps,
+ xtensa_use_literal_pages);
+ lang_for_each_statement_worker (xtensa_ldlang_clear_addresses,
+ statement);
+ }
+
+ /* Clean up. */
+ free_reloc_deps_graph (deps);
+ }
+}
+
+
+static void
+xtensa_colocate_output_literals (lang_statement_union_type *s)
+{
+ lang_for_each_statement_worker (xtensa_colocate_output_literals_callback, s);
+}
+
+
+static void
+xtensa_ldlang_clear_addresses (lang_statement_union_type *statement)
+{
+ switch (statement->header.type)
+ {
+ case lang_input_section_enum:
+ {
+ asection *bfd_section = statement->input_section.section;
+ bfd_section->output_offset = 0;
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+
+static bfd_vma
+ld_assign_relative_paged_dot (bfd_vma dot,
+ lang_statement_union_type *s,
+ const reloc_deps_graph *deps ATTRIBUTE_UNUSED,
+ bfd_boolean lit_align)
+{
+ /* Walk through all of the input statements in this wild statement
+ assign dot to all of them. */
+
+ xtensa_ld_iter_stack *stack = NULL;
+ xtensa_ld_iter_stack **stack_p = &stack;
+
+ bfd_boolean first_section = FALSE;
+ bfd_boolean in_literals = FALSE;
+
+ for (iter_stack_create (stack_p, s);
+ !iter_stack_empty (stack_p);
+ iter_stack_next (stack_p))
+ {
+ lang_statement_union_type *l = iter_stack_current (stack_p);
+
+ switch (l->header.type)
+ {
+ case lang_input_section_enum:
+ {
+ asection *section = l->input_section.section;
+ size_t align_pow = section->alignment_power;
+ bfd_boolean do_xtensa_alignment = FALSE;
+
+ if (lit_align)
+ {
+ bfd_boolean sec_is_target = section_is_target (deps, l);
+ bfd_boolean sec_is_source = section_is_source (deps, l);
+
+ if (section->size != 0
+ && (first_section
+ || (in_literals && !sec_is_target)
+ || (!in_literals && sec_is_target)))
+ {
+ do_xtensa_alignment = TRUE;
+ }
+ first_section = FALSE;
+ if (section->size != 0)
+ in_literals = (sec_is_target && !sec_is_source);
+ }
+
+ if (do_xtensa_alignment && xtensa_page_power != 0)
+ dot += (1 << xtensa_page_power);
+
+ dot = align_power (dot, align_pow);
+ section->output_offset = dot;
+ dot += section->size;
+ }
+ break;
+ case lang_fill_statement_enum:
+ dot += l->fill_statement.size;
+ break;
+ case lang_padding_statement_enum:
+ dot += l->padding_statement.size;
+ break;
+ default:
+ break;
+ }
+ }
+ return dot;
+}
+
+
+static bfd_boolean
+ld_local_file_relocations_fit (lang_statement_union_type *statement,
+ const reloc_deps_graph *deps ATTRIBUTE_UNUSED)
+{
+ /* Walk over all of the dependencies that we identified and make
+ sure that IF the source and target are here (addr != 0):
+ 1) target addr < source addr
+ 2) (roundup(source + source_size, 4) - rounddown(target, 4))
+ < (256K - (1 << bad align))
+ Need a worst-case proof.... */
+
+ xtensa_ld_iter_stack *stack = NULL;
+ xtensa_ld_iter_stack **stack_p = &stack;
+ size_t max_align_power = 0;
+ size_t align_penalty = 256;
+ reloc_deps_e *e;
+ size_t i;
+
+ /* Find the worst-case alignment requirement for this set of statements. */
+ for (iter_stack_create (stack_p, statement);
+ !iter_stack_empty (stack_p);
+ iter_stack_next (stack_p))
+ {
+ lang_statement_union_type *l = iter_stack_current (stack_p);
+ if (l->header.type == lang_input_section_enum)
+ {
+ lang_input_section_type *input = &l->input_section;
+ asection *section = input->section;
+ if (section->alignment_power > max_align_power)
+ max_align_power = section->alignment_power;
+ }
+ }
+
+ /* Now check that everything fits. */
+ for (i = 0; i < deps->count; i++)
+ {
+ asection *sec = deps->sections[i];
+ const reloc_deps_section *deps_section =
+ xtensa_get_section_deps (deps, sec);
+ if (deps_section)
+ {
+ /* We choose to walk through the successors. */
+ for (e = deps_section->succs; e != NULL; e = e->next)
+ {
+ if (e->src != e->tgt
+ && e->src->output_section == e->tgt->output_section
+ && e->src->output_offset != 0
+ && e->tgt->output_offset != 0)
+ {
+ bfd_vma l32r_addr =
+ align_power (e->src->output_offset + e->src->size, 2);
+ bfd_vma target_addr = e->tgt->output_offset & ~3;
+ if (l32r_addr < target_addr)
+ {
+ fprintf (stderr, "Warning: "
+ "l32r target section before l32r\n");
+ return FALSE;
+ }
+
+ if (l32r_addr - target_addr > 256 * 1024 - align_penalty)
+ return FALSE;
+ }
+ }
+ }
+ }
+
+ return TRUE;
+}
+
+
+static bfd_vma
+ld_xtensa_insert_page_offsets (bfd_vma dot,
+ lang_statement_union_type *s,
+ reloc_deps_graph *deps,
+ bfd_boolean lit_align)
+{
+ xtensa_ld_iter_stack *stack = NULL;
+ xtensa_ld_iter_stack **stack_p = &stack;
+
+ bfd_boolean first_section = FALSE;
+ bfd_boolean in_literals = FALSE;
+
+ if (!lit_align)
+ return FALSE;
+
+ for (iter_stack_create (stack_p, s);
+ !iter_stack_empty (stack_p);
+ iter_stack_next (stack_p))
+ {
+ lang_statement_union_type *l = iter_stack_current (stack_p);
+
+ switch (l->header.type)
+ {
+ case lang_input_section_enum:
+ {
+ asection *section = l->input_section.section;
+ bfd_boolean do_xtensa_alignment = FALSE;
+
+ if (lit_align)
+ {
+ if (section->size != 0
+ && (first_section
+ || (in_literals && !section_is_target (deps, l))
+ || (!in_literals && section_is_target (deps, l))))
+ {
+ do_xtensa_alignment = TRUE;
+ }
+ first_section = FALSE;
+ if (section->size != 0)
+ {
+ in_literals = (section_is_target (deps, l)
+ && !section_is_source (deps, l));
+ }
+ }
+
+ if (do_xtensa_alignment && xtensa_page_power != 0)
+ {
+ /* Create an expression that increments the current address,
+ i.e., "dot", by (1 << xtensa_align_power). */
+ etree_type *name_op = exp_nameop (NAME, ".");
+ etree_type *addend_op = exp_intop (1 << xtensa_page_power);
+ etree_type *add_op = exp_binop ('+', name_op, addend_op);
+ etree_type *assign_op = exp_assop ('=', ".", add_op);
+
+ lang_assignment_statement_type *assign_stmt;
+ lang_statement_union_type *assign_union;
+ lang_statement_list_type tmplist;
+
+ /* There is hidden state in "lang_add_assignment". It
+ appends the new assignment statement to the stat_ptr
+ list. Thus, we swap it before and after the call. */
+
+ lang_list_init (&tmplist);
+ push_stat_ptr (&tmplist);
+ /* Warning: side effect; statement appended to stat_ptr. */
+ assign_stmt = lang_add_assignment (assign_op);
+ assign_union = (lang_statement_union_type *) assign_stmt;
+ pop_stat_ptr ();
+
+ assign_union->header.next = l;
+ *(*stack_p)->iterloc.loc = assign_union;
+ iter_stack_next (stack_p);
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ return dot;
+}
+
+EOF
+
+# Define some shell vars to insert bits of code into the standard ELF
+# parse_args and list_options functions.
+#
+PARSE_AND_LIST_PROLOGUE='
+#define OPTION_OPT_SIZEOPT (300)
+#define OPTION_LITERAL_MOVEMENT (OPTION_OPT_SIZEOPT + 1)
+#define OPTION_NO_LITERAL_MOVEMENT (OPTION_LITERAL_MOVEMENT + 1)
+extern int elf32xtensa_size_opt;
+extern int elf32xtensa_no_literal_movement;
+'
+
+PARSE_AND_LIST_LONGOPTS='
+ { "size-opt", no_argument, NULL, OPTION_OPT_SIZEOPT},
+ { "literal-movement", no_argument, NULL, OPTION_LITERAL_MOVEMENT},
+ { "no-literal-movement", no_argument, NULL, OPTION_NO_LITERAL_MOVEMENT},
+'
+
+PARSE_AND_LIST_OPTIONS='
+ fprintf (file, _("\
+ --size-opt When relaxing longcalls, prefer size\n\
+ optimization over branch target alignment\n"));
+'
+
+PARSE_AND_LIST_ARGS_CASES='
+ case OPTION_OPT_SIZEOPT:
+ elf32xtensa_size_opt = 1;
+ break;
+ case OPTION_LITERAL_MOVEMENT:
+ elf32xtensa_no_literal_movement = 0;
+ break;
+ case OPTION_NO_LITERAL_MOVEMENT:
+ elf32xtensa_no_literal_movement = 1;
+ break;
+'
+
+# Replace some of the standard ELF functions with our own versions.
+#
+LDEMUL_BEFORE_PARSE=elf_xtensa_before_parse
+LDEMUL_AFTER_OPEN=elf_xtensa_after_open
+LDEMUL_CHOOSE_TARGET=elf_xtensa_choose_target
+LDEMUL_BEFORE_ALLOCATION=elf_xtensa_before_allocation
diff --git a/binutils-2.21/ld/emultempl/z80.em b/binutils-2.21/ld/emultempl/z80.em
new file mode 100644
index 0000000..100ebd0
--- /dev/null
+++ b/binutils-2.21/ld/emultempl/z80.em
@@ -0,0 +1,102 @@
+# This shell script emits C code -*- C -*-
+# to keep track of the machine type of Z80 object files
+# It does some substitutions.
+# Copyright 2005, 2007, 2008 Free Software Foundation, Inc.
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+LDEMUL_BEFORE_PARSE=gldz80_before_parse
+LDEMUL_RECOGNIZED_FILE=gldz80_recognized_file
+LDEMUL_AFTER_OPEN=gldz80_after_open
+
+fragment <<EOF
+/* --- \begin{z80.em} */
+/* Codes for machine types, bitwise or gives the code to use for the
+ output. */
+#define M_Z80STRICT 1
+#define M_Z80 3
+#define M_Z80FULL 7
+#define M_R800 11
+#define M_Z80ANY 15
+
+/* Bitwise or of the machine types seen so far. */
+static int result_mach_type;
+
+static void
+${LDEMUL_BEFORE_PARSE} (void)
+{
+#ifndef TARGET_ /* I.e., if not generic. */
+ ldfile_set_output_arch ("`echo ${ARCH}`", bfd_arch_unknown);
+#endif /* not TARGET_ */
+ result_mach_type = M_Z80STRICT;
+}
+
+
+/* Update result_mach_type. */
+static bfd_boolean
+${LDEMUL_RECOGNIZED_FILE} (lang_input_statement_type *entry)
+{
+ unsigned long mach_type;
+
+ mach_type = bfd_get_mach (entry->the_bfd);
+ switch (mach_type)
+ {
+ case bfd_mach_z80strict:
+ result_mach_type |= M_Z80STRICT;
+ break;
+ case bfd_mach_z80:
+ result_mach_type |= M_Z80;
+ break;
+ case bfd_mach_z80full:
+ result_mach_type |= M_Z80FULL;
+ break;
+ case bfd_mach_r800:
+ result_mach_type |= M_R800;
+ break;
+ default:
+ result_mach_type |= M_Z80ANY;
+ }
+ return FALSE;
+}
+
+/* Set the machine type of the output file based on result_mach_type. */
+static void
+gldz80_after_open (void)
+{
+ unsigned long mach_type;
+
+ switch (result_mach_type)
+ {
+ case M_Z80STRICT:
+ mach_type = bfd_mach_z80strict;
+ break;
+ case M_Z80:
+ mach_type = bfd_mach_z80;
+ break;
+ case M_Z80FULL:
+ mach_type = bfd_mach_z80full;
+ break;
+ case M_R800:
+ mach_type = bfd_mach_r800;
+ break;
+ default:
+ mach_type = 0;
+ }
+ bfd_set_arch_mach (link_info.output_bfd, bfd_arch_z80, mach_type);
+}
+/* --- \end{z80.em} */
+EOF
diff --git a/binutils-2.21/ld/fdl.texi b/binutils-2.21/ld/fdl.texi
new file mode 100644
index 0000000..7c26c34
--- /dev/null
+++ b/binutils-2.21/ld/fdl.texi
@@ -0,0 +1,505 @@
+@c The GNU Free Documentation License.
+@center Version 1.3, 3 November 2008
+
+@c This file is intended to be included within another document,
+@c hence no sectioning command or @node.
+
+@display
+Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+@uref{http://fsf.org/}
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+@end display
+
+@enumerate 0
+@item
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document @dfn{free} in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of ``copyleft'', which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+@item
+APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License. Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein. The ``Document'', below,
+refers to any such manual or work. Any member of the public is a
+licensee, and is addressed as ``you''. You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A ``Modified Version'' of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A ``Secondary Section'' is a named appendix or a front-matter section
+of the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject. (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The ``Invariant Sections'' are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License. If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant. The Document may contain zero
+Invariant Sections. If the Document does not identify any Invariant
+Sections then there are none.
+
+The ``Cover Texts'' are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License. A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A ``Transparent'' copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text. A copy that is not ``Transparent'' is called ``Opaque''.
+
+Examples of suitable formats for Transparent copies include plain
+@sc{ascii} without markup, Texinfo input format, La@TeX{} input
+format, @acronym{SGML} or @acronym{XML} using a publicly available
+@acronym{DTD}, and standard-conforming simple @acronym{HTML},
+PostScript or @acronym{PDF} designed for human modification. Examples
+of transparent image formats include @acronym{PNG}, @acronym{XCF} and
+@acronym{JPG}. Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, @acronym{SGML} or
+@acronym{XML} for which the @acronym{DTD} and/or processing tools are
+not generally available, and the machine-generated @acronym{HTML},
+PostScript or @acronym{PDF} produced by some word processors for
+output purposes only.
+
+The ``Title Page'' means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, ``Title Page'' means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+The ``publisher'' means any person or entity that distributes copies
+of the Document to the public.
+
+A section ``Entitled XYZ'' means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language. (Here XYZ stands for a
+specific section name mentioned below, such as ``Acknowledgements'',
+``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title''
+of such a section when you modify the Document means that it remains a
+section ``Entitled XYZ'' according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document. These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+@item
+VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+@item
+COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+@item
+MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+@enumerate A
+@item
+Use in the Title Page (and on the covers, if any) a title distinct
+from that of the Document, and from those of previous versions
+(which should, if there were any, be listed in the History section
+of the Document). You may use the same title as a previous version
+if the original publisher of that version gives permission.
+
+@item
+List on the Title Page, as authors, one or more persons or entities
+responsible for authorship of the modifications in the Modified
+Version, together with at least five of the principal authors of the
+Document (all of its principal authors, if it has fewer than five),
+unless they release you from this requirement.
+
+@item
+State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
+@item
+Preserve all the copyright notices of the Document.
+
+@item
+Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
+@item
+Include, immediately after the copyright notices, a license notice
+giving the public permission to use the Modified Version under the
+terms of this License, in the form shown in the Addendum below.
+
+@item
+Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+
+@item
+Include an unaltered copy of this License.
+
+@item
+Preserve the section Entitled ``History'', Preserve its Title, and add
+to it an item stating at least the title, year, new authors, and
+publisher of the Modified Version as given on the Title Page. If
+there is no section Entitled ``History'' in the Document, create one
+stating the title, year, authors, and publisher of the Document as
+given on its Title Page, then add an item describing the Modified
+Version as stated in the previous sentence.
+
+@item
+Preserve the network location, if any, given in the Document for
+public access to a Transparent copy of the Document, and likewise
+the network locations given in the Document for previous versions
+it was based on. These may be placed in the ``History'' section.
+You may omit a network location for a work that was published at
+least four years before the Document itself, or if the original
+publisher of the version it refers to gives permission.
+
+@item
+For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
+the Title of the section, and preserve in the section all the
+substance and tone of each of the contributor acknowledgements and/or
+dedications given therein.
+
+@item
+Preserve all the Invariant Sections of the Document,
+unaltered in their text and in their titles. Section numbers
+or the equivalent are not considered part of the section titles.
+
+@item
+Delete any section Entitled ``Endorsements''. Such a section
+may not be included in the Modified Version.
+
+@item
+Do not retitle any existing section to be Entitled ``Endorsements'' or
+to conflict in title with any Invariant Section.
+
+@item
+Preserve any Warranty Disclaimers.
+@end enumerate
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled ``Endorsements'', provided it contains
+nothing but endorsements of your Modified Version by various
+parties---for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+@item
+COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled ``History''
+in the various original documents, forming one section Entitled
+``History''; likewise combine any sections Entitled ``Acknowledgements'',
+and any sections Entitled ``Dedications''. You must delete all
+sections Entitled ``Endorsements.''
+
+@item
+COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+@item
+AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an ``aggregate'' if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+@item
+TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers. In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled ``Acknowledgements'',
+``Dedications'', or ``History'', the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+@item
+TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense, or distribute it is void, and
+will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, receipt of a copy of some or all of the same material does
+not give you any rights to use it.
+
+@item
+FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns. See
+@uref{http://www.gnu.org/copyleft/}.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation. If the Document
+specifies that a proxy can decide which future versions of this
+License can be used, that proxy's public statement of acceptance of a
+version permanently authorizes you to choose that version for the
+Document.
+
+@item
+RELICENSING
+
+``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any
+World Wide Web server that publishes copyrightable works and also
+provides prominent facilities for anybody to edit those works. A
+public wiki that anybody can edit is an example of such a server. A
+``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the
+site means any set of copyrightable works thus published on the MMC
+site.
+
+``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0
+license published by Creative Commons Corporation, a not-for-profit
+corporation with a principal place of business in San Francisco,
+California, as well as future copyleft versions of that license
+published by that same organization.
+
+``Incorporate'' means to publish or republish a Document, in whole or
+in part, as part of another Document.
+
+An MMC is ``eligible for relicensing'' if it is licensed under this
+License, and if all works that were first published under this License
+somewhere other than this MMC, and subsequently incorporated in whole
+or in part into the MMC, (1) had no cover texts or invariant sections,
+and (2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site
+under CC-BY-SA on the same site at any time before August 1, 2009,
+provided the MMC is eligible for relicensing.
+
+@end enumerate
+
+@page
+@heading ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+@smallexample
+@group
+ Copyright (C) @var{year} @var{your name}.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+@end group
+@end smallexample
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the ``with@dots{}Texts.'' line with this:
+
+@smallexample
+@group
+ with the Invariant Sections being @var{list their titles}, with
+ the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
+ being @var{list}.
+@end group
+@end smallexample
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+@c Local Variables:
+@c ispell-local-pdict: "ispell-dict"
+@c End:
diff --git a/binutils-2.21/ld/gen-doc.texi b/binutils-2.21/ld/gen-doc.texi
new file mode 100644
index 0000000..7434edb
--- /dev/null
+++ b/binutils-2.21/ld/gen-doc.texi
@@ -0,0 +1,26 @@
+@c ------------------------------ CONFIGURATION VARS:
+@c 1. Inclusiveness of this manual
+@set GENERIC
+
+@c 2. Specific target machines
+@set ARM
+@set H8300
+@set HPPA
+@set I960
+@set M68HC11
+@set M68K
+@set MMIX
+@set MSP430
+@set POWERPC
+@set POWERPC64
+@set Renesas
+@set SPU
+@set TICOFF
+@set WIN32
+@set XTENSA
+
+@c 3. Properties of this configuration
+@clear SingleFormat
+@set UsesEnvVars
+@c ------------------------------ end CONFIGURATION VARS
+
diff --git a/binutils-2.21/ld/genscrba.sh b/binutils-2.21/ld/genscrba.sh
new file mode 100644
index 0000000..030cb7d
--- /dev/null
+++ b/binutils-2.21/ld/genscrba.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+source_em()
+{
+ local current_script="$em_script"
+ em_script=$1
+ . $em_script
+ em_script=$current_script
+}
+fragment()
+{
+ if [ ${BASH_VERSINFO[3]} -ge 3 ]; then
+ local lineno=$[${BASH_LINENO[0]} + 1]
+ echo >> e${EMULATION_NAME}.c "#line $lineno \"$em_script\""
+ fi
+ cat >> e${EMULATION_NAME}.c
+}
diff --git a/binutils-2.21/ld/genscripts.sh b/binutils-2.21/ld/genscripts.sh
new file mode 100755
index 0000000..c86631b
--- /dev/null
+++ b/binutils-2.21/ld/genscripts.sh
@@ -0,0 +1,451 @@
+#!/bin/sh
+# genscripts.sh - generate the ld-emulation-target specific files
+# Copyright 2004, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is part of the Gnu Linker.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, 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 GLD; see the file COPYING. If not, write to the Free
+# Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# Usage: genscripts_extra.sh \
+# srcdir \
+# libdir \
+# prefix \
+# exec_prefix \
+# host \
+# target \
+# target_alias \
+# default_emulation \
+# native_lib_dirs \
+# use_sysroot \
+# this_emulation \
+# optional:
+# tool_dir \
+# customizer_script
+#
+# Sample usage:
+#
+# genscripts_extra.sh \
+# /sources/ld \
+# /usr/local/lib \
+# /usr/local \
+# /usr/local \
+# sparc-sun-sunos4.1.3 \
+# sparc-sun-sunos4.1.3 \
+# sparc-sun-sunos4.1.3 \
+# sun4 \
+# "" \
+# no \
+# sun3 \
+# sparc-sun-sunos4.1.3 \
+# sparc.sh
+#
+# produces the linker scripts:
+#
+# sun3.x [default linker script]
+# sun3.xbn [used when the linker is invoked with "-N"]
+# sun3.xn [used when the linker is invoked with "-n"]
+# sun3.xr [used when the linker is invoked with "-r"]
+# sun3.xu [used when the linker is invoked with "-Ur"]
+# and maybe:
+# sun3.xc [used when the linker is invoked with "-z combreloc"]
+# sun3.xsc [used when the linker is invoked with "--shared"]
+# sun3.xdc [used when the linker is invoked with "-pie"]
+# sun3.xa [used when the linker is invoked with "--enable-auto-import"]
+#
+# It also produced the C source file:
+#
+# em_sun3.c
+#
+# which is then compiled into the linker.
+#
+# The linker scripts are created by running the shell script
+# /sources/ld/emulparams/sparc.sh to set the value of ${SCRIPT_NAME}
+# (and any other variables it wants to). ${SCRIPT_NAME} is then
+# invoked with a variable called ${LD_FLAG} to tell it which version
+# of the linker script to create.
+
+
+srcdir=$1
+libdir=$2
+prefix=$3
+exec_prefix=$4
+host=$5
+target=$6
+target_alias=$7
+EMULATION_LIBPATH=$8
+NATIVE_LIB_DIRS=$9
+shift 9
+use_sysroot=$1
+EMULATION_NAME=$2
+TOOL_LIB=$3
+CUSTOMIZER_SCRIPT=$4
+
+# Can't use ${TOOL_LIB:-$target_alias} here due to an Ultrix shell bug.
+if [ "x${TOOL_LIB}" = "x" ] ; then
+ tool_lib=${exec_prefix}/${target_alias}/lib
+else
+ tool_lib=${exec_prefix}/${TOOL_LIB}/lib
+fi
+
+if [ "x${CUSTOMIZER_SCRIPT}" = "x" ] ; then
+ CUSTOMIZER_SCRIPT=${EMULATION_NAME}
+fi
+CUSTOMIZER_SCRIPT="${srcdir}/emulparams/${CUSTOMIZER_SCRIPT}.sh"
+
+# Include the emulation-specific parameters:
+. ${CUSTOMIZER_SCRIPT}
+
+if test -d ldscripts; then
+ true
+else
+ mkdir ldscripts
+fi
+
+# Set some flags for the emultempl scripts. USE_LIBPATH will
+# be set for any libpath-using emulation; NATIVE will be set for a
+# libpath-using emulation where ${host} = ${target}. NATIVE
+# may already have been set by the emulparams file, but that's OK
+# (it'll just get set to "yes" twice).
+
+case " $EMULATION_LIBPATH " in
+ *" ${EMULATION_NAME} "*)
+ if [ "x${host}" = "x${target}" ] ; then
+ NATIVE=yes
+ USE_LIBPATH=yes
+ elif [ "x${use_sysroot}" = "xyes" ] ; then
+ USE_LIBPATH=yes
+ fi
+ ;;
+esac
+
+# If the emulparams file sets NATIVE, make sure USE_LIBPATH is set also.
+if test "x$NATIVE" = "xyes" ; then
+ USE_LIBPATH=yes
+fi
+
+# Set the library search path, for libraries named by -lfoo.
+# If LIB_PATH is defined (e.g., by Makefile) and non-empty, it is used.
+# Otherwise, the default is set here.
+#
+# The format is the usual list of colon-separated directories.
+# To force a logically empty LIB_PATH, do LIBPATH=":".
+#
+# If we are using a sysroot, prefix library paths with "=" to indicate this.
+#
+# If the emulparams file set LIBPATH_SUFFIX, prepend an extra copy of
+# the library path with the suffix applied.
+
+if [ "x${LIB_PATH}" = "x" ] && [ "x${USE_LIBPATH}" = xyes ] ; then
+ LIB_PATH2=
+
+ libs=${NATIVE_LIB_DIRS}
+ if [ "x${use_sysroot}" != "xyes" ] ; then
+ case " ${libs} " in
+ *" ${libdir} "*) ;;
+ *) libs="${libdir} ${libs}" ;;
+ esac
+ case " ${libs} " in
+ *" ${tool_lib} "*) ;;
+ *) libs="${tool_lib} ${libs}" ;;
+ esac
+ fi
+
+ for lib in ${libs}; do
+ # The "=" is harmless if we aren't using a sysroot, but also needless.
+ if [ "x${use_sysroot}" = "xyes" ] ; then
+ lib="=${lib}"
+ fi
+ addsuffix=
+ case "${LIBPATH_SUFFIX}:${lib}" in
+ :*) ;;
+ *:*${LIBPATH_SUFFIX}) ;;
+ *) addsuffix=yes ;;
+ esac
+ if test -n "$addsuffix"; then
+ case :${LIB_PATH}: in
+ *:${lib}${LIBPATH_SUFFIX}:*) ;;
+ ::) LIB_PATH=${lib}${LIBPATH_SUFFIX} ;;
+ *) LIB_PATH=${LIB_PATH}:${lib}${LIBPATH_SUFFIX} ;;
+ esac
+ case :${LIB_PATH}:${LIB_PATH2}: in
+ *:${lib}:*) ;;
+ *::) LIB_PATH2=${lib} ;;
+ *) LIB_PATH2=${LIB_PATH2}:${lib} ;;
+ esac
+ else
+ case :${LIB_PATH2}: in
+ *:${lib}:*) ;;
+ ::) LIB_PATH2=${lib} ;;
+ *) LIB_PATH2=${LIB_PATH2}:${lib} ;;
+ esac
+ fi
+ done
+
+ case :${LIB_PATH}:${LIB_PATH2}: in
+ *:: | ::*) LIB_PATH=${LIB_PATH}${LIB_PATH2} ;;
+ *) LIB_PATH=${LIB_PATH}:${LIB_PATH2} ;;
+ esac
+
+ # For multilib'ed targets, ensure both ${target_alias}/lib${LIBPATH_SUFFIX}
+ # and ${TOOL_LIB}/lib${LIBPATH_SUFFIX} are in the default search path, because
+ # 64bit libraries may be in both places, depending on cross-development
+ # setup method (e.g.: /usr/s390x-linux/lib64 vs /usr/s390-linux/lib64)
+ case "${LIBPATH_SUFFIX}:${tool_lib}" in
+ :*) ;;
+ *:*${LIBPATH_SUFFIX}) ;;
+ *)
+ paths="${exec_prefix}/${target_alias}/lib${LIBPATH_SUFFIX}"
+ if [ x"${TOOL_LIB}" != x ]; then
+ paths="${paths} ${exec_prefix}/${TOOL_LIB}/lib${LIBPATH_SUFFIX}"
+ fi
+ for path in $paths; do
+ case :${LIB_PATH}: in
+ ::: | *:${path}:*) ;;
+ *) LIB_PATH=${path}:${LIB_PATH} ;;
+ esac
+ done
+ ;;
+ esac
+fi
+
+# Always search $(tooldir)/lib, aka /usr/local/TARGET/lib, except for
+# sysrooted configurations and when LIBPATH=":".
+if [ "x${use_sysroot}" != "xyes" ] ; then
+ case :${LIB_PATH}: in
+ ::: | *:${tool_lib}:*) ;;
+ ::) LIB_PATH=${tool_lib} ;;
+ *) LIB_PATH=${tool_lib}:${LIB_PATH} ;;
+ esac
+ # For multilib targets, search both $tool_lib dirs
+ if [ "x${LIBPATH_SUFFIX}" != "x" ] ; then
+ case :${LIB_PATH}: in
+ ::: | *:${tool_lib}${LIBPATH_SUFFIX}:*) ;;
+ ::) LIB_PATH=${tool_lib}${LIBPATH_SUFFIX} ;;
+ *) LIB_PATH=${tool_lib}${LIBPATH_SUFFIX}:${LIB_PATH} ;;
+ esac
+ fi
+fi
+
+LIB_SEARCH_DIRS=`echo ${LIB_PATH} | sed -e 's/:/ /g' -e 's/\([^ ][^ ]*\)/SEARCH_DIR(\\"\1\\");/g'`
+
+# We need it for testsuite.
+set $EMULATION_LIBPATH
+if [ "x$1" = "x$EMULATION_NAME" ]; then
+ test -d tmpdir || mkdir tmpdir
+ rm -f tmpdir/libpath.exp
+ echo "set libpath \"${LIB_PATH}\"" | sed -e 's/:/ /g' > tmpdir/libpath.exp
+fi
+
+# Generate 5 or 6 script files from a master script template in
+# ${srcdir}/scripttempl/${SCRIPT_NAME}.sh. Which one of the 5 or 6
+# script files is actually used depends on command line options given
+# to ld. (SCRIPT_NAME was set in the emulparams_file.)
+#
+# A .x script file is the default script.
+# A .xr script is for linking without relocation (-r flag).
+# A .xu script is like .xr, but *do* create constructors (-Ur flag).
+# A .xn script is for linking with -n flag (mix text and data on same page).
+# A .xbn script is for linking with -N flag (mix text and data on same page).
+# A .xs script is for generating a shared library with the --shared
+# flag; it is only generated if $GENERATE_SHLIB_SCRIPT is set by the
+# emulation parameters.
+# A .xc script is for linking with -z combreloc; it is only generated if
+# $GENERATE_COMBRELOC_SCRIPT is set by the emulation parameters or
+# $SCRIPT_NAME is "elf".
+# A .xsc script is for linking with --shared -z combreloc; it is generated
+# if $GENERATE_COMBRELOC_SCRIPT is set by the emulation parameters or
+# $SCRIPT_NAME is "elf" and $GENERATE_SHLIB_SCRIPT is set by the emulation
+# parameters too.
+
+if [ "x$SCRIPT_NAME" = "xelf" ]; then
+ GENERATE_COMBRELOC_SCRIPT=yes
+fi
+
+SEGMENT_SIZE=${SEGMENT_SIZE-${MAXPAGESIZE-${TARGET_PAGE_SIZE}}}
+
+# Determine DATA_ALIGNMENT for the 5 variants, using
+# values specified in the emulparams/<script_to_run>.sh file or default.
+
+DATA_ALIGNMENT_="${DATA_ALIGNMENT_-${DATA_ALIGNMENT-ALIGN(${SEGMENT_SIZE})}}"
+DATA_ALIGNMENT_n="${DATA_ALIGNMENT_n-${DATA_ALIGNMENT_}}"
+DATA_ALIGNMENT_N="${DATA_ALIGNMENT_N-${DATA_ALIGNMENT-.}}"
+DATA_ALIGNMENT_r="${DATA_ALIGNMENT_r-${DATA_ALIGNMENT-}}"
+DATA_ALIGNMENT_u="${DATA_ALIGNMENT_u-${DATA_ALIGNMENT_r}}"
+
+LD_FLAG=r
+DATA_ALIGNMENT=${DATA_ALIGNMENT_r}
+DEFAULT_DATA_ALIGNMENT="ALIGN(${SEGMENT_SIZE})"
+( echo "/* Script for ld -r: link without relocation */"
+ . ${CUSTOMIZER_SCRIPT}
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
+) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xr
+
+LD_FLAG=u
+DATA_ALIGNMENT=${DATA_ALIGNMENT_u}
+CONSTRUCTING=" "
+( echo "/* Script for ld -Ur: link w/out relocation, do create constructors */"
+ . ${CUSTOMIZER_SCRIPT}
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
+) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xu
+
+LD_FLAG=
+DATA_ALIGNMENT=${DATA_ALIGNMENT_}
+RELOCATING=" "
+( echo "/* Default linker script, for normal executables */"
+ . ${CUSTOMIZER_SCRIPT}
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
+) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.x
+
+LD_FLAG=n
+DATA_ALIGNMENT=${DATA_ALIGNMENT_n}
+( echo "/* Script for -n: mix text and data on same page */"
+ . ${CUSTOMIZER_SCRIPT}
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
+) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xn
+
+LD_FLAG=N
+DATA_ALIGNMENT=${DATA_ALIGNMENT_N}
+( echo "/* Script for -N: mix text and data on same page; don't align data */"
+ . ${CUSTOMIZER_SCRIPT}
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
+) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xbn
+
+if test -n "$GENERATE_COMBRELOC_SCRIPT"; then
+ DATA_ALIGNMENT=${DATA_ALIGNMENT_c-${DATA_ALIGNMENT_}}
+ LD_FLAG=c
+ COMBRELOC=ldscripts/${EMULATION_NAME}.xc.tmp
+ ( echo "/* Script for -z combreloc: combine and sort reloc sections */"
+ . ${CUSTOMIZER_SCRIPT}
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xc
+ rm -f ${COMBRELOC}
+ LD_FLAG=w
+ RELRO_NOW=" "
+ COMBRELOC=ldscripts/${EMULATION_NAME}.xw.tmp
+ ( echo "/* Script for -z combreloc -z now -z relro: combine and sort reloc sections */"
+ . ${CUSTOMIZER_SCRIPT}
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xw
+ rm -f ${COMBRELOC}
+ COMBRELOC=
+ unset RELRO_NOW
+fi
+
+if test -n "$GENERATE_SHLIB_SCRIPT"; then
+ LD_FLAG=shared
+ DATA_ALIGNMENT=${DATA_ALIGNMENT_s-${DATA_ALIGNMENT_}}
+ CREATE_SHLIB=" "
+ (
+ echo "/* Script for ld --shared: link shared library */"
+ . ${CUSTOMIZER_SCRIPT}
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xs
+ if test -n "$GENERATE_COMBRELOC_SCRIPT"; then
+ LD_FLAG=cshared
+ DATA_ALIGNMENT=${DATA_ALIGNMENT_sc-${DATA_ALIGNMENT}}
+ COMBRELOC=ldscripts/${EMULATION_NAME}.xsc.tmp
+ ( echo "/* Script for --shared -z combreloc: shared library, combine & sort relocs */"
+ . ${CUSTOMIZER_SCRIPT}
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xsc
+ rm -f ${COMBRELOC}
+ LD_FLAG=wshared
+ RELRO_NOW=" "
+ COMBRELOC=ldscripts/${EMULATION_NAME}.xsw.tmp
+ ( echo "/* Script for --shared -z combreloc -z now -z relro: shared library, combine & sort relocs */"
+ . ${CUSTOMIZER_SCRIPT}
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xsw
+ rm -f ${COMBRELOC}
+ COMBRELOC=
+ unset RELRO_NOW
+ fi
+ unset CREATE_SHLIB
+fi
+
+if test -n "$GENERATE_PIE_SCRIPT"; then
+ LD_FLAG=pie
+ DATA_ALIGNMENT=${DATA_ALIGNMENT_s-${DATA_ALIGNMENT_}}
+ CREATE_PIE=" "
+ (
+ echo "/* Script for ld -pie: link position independent executable */"
+ . ${CUSTOMIZER_SCRIPT}
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xd
+ if test -n "$GENERATE_COMBRELOC_SCRIPT"; then
+ LD_FLAG=cpie
+ DATA_ALIGNMENT=${DATA_ALIGNMENT_sc-${DATA_ALIGNMENT}}
+ COMBRELOC=ldscripts/${EMULATION_NAME}.xdc.tmp
+ ( echo "/* Script for -pie -z combreloc: position independent executable, combine & sort relocs */"
+ . ${CUSTOMIZER_SCRIPT}
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdc
+ rm -f ${COMBRELOC}
+ LD_FLAG=wpie
+ RELRO_NOW=" "
+ COMBRELOC=ldscripts/${EMULATION_NAME}.xdw.tmp
+ ( echo "/* Script for -pie -z combreloc -z now -z relro: position independent executable, combine & sort relocs */"
+ . ${CUSTOMIZER_SCRIPT}
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdw
+ rm -f ${COMBRELOC}
+ COMBRELOC=
+ unset RELRO_NOW
+ fi
+ unset CREATE_PIE
+fi
+
+if test -n "$GENERATE_AUTO_IMPORT_SCRIPT"; then
+ LD_FLAG=auto_import
+ DATA_ALIGNMENT=${DATA_ALIGNMENT_}
+ (
+ echo "/* Script for ld --enable-auto-import: Like the default script except read only data is placed into .data */"
+ . ${CUSTOMIZER_SCRIPT}
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xa
+fi
+
+case " $EMULATION_LIBPATH " in
+ *" ${EMULATION_NAME} "*) COMPILE_IN=true;;
+esac
+
+# PR ld/5652:
+# Determine if the shell has support for the variable BASH_LINENO.
+# When it is the case, it is only available inside functions.
+has_lineno()
+{
+ test "x$BASH_LINENO" != "x"
+}
+
+# Enable accruate error source in the compiler error messages, if possible.
+if has_lineno; then
+ . ${srcdir}/genscrba.sh
+else
+ source_em()
+ {
+ . $1
+ }
+ fragment()
+ {
+ cat >> e${EMULATION_NAME}.c
+ }
+fi
+
+# Generate e${EMULATION_NAME}.c.
+# Start with an empty file, then the sourced .em script
+# can use the "fragment" function to append.
+> e${EMULATION_NAME}.c
+source_em ${srcdir}/emultempl/${TEMPLATE_NAME-generic}.em
diff --git a/binutils-2.21/ld/h8-doc.texi b/binutils-2.21/ld/h8-doc.texi
new file mode 100644
index 0000000..bbb1fd9
--- /dev/null
+++ b/binutils-2.21/ld/h8-doc.texi
@@ -0,0 +1,14 @@
+@c ------------------------------ CONFIGURATION VARS:
+@c 1. Inclusiveness of this manual
+@clear GENERIC
+
+@c 2. Specific target machines
+@set H8300
+@set Renesas
+@clear I960
+
+@c 3. Properties of this configuration
+@set SingleFormat
+@clear UsesEnvVars
+@c ------------------------------ end CONFIGURATION VARS
+
diff --git a/binutils-2.21/ld/ld.h b/binutils-2.21/ld/ld.h
new file mode 100644
index 0000000..aa0979d
--- /dev/null
+++ b/binutils-2.21/ld/ld.h
@@ -0,0 +1,338 @@
+/* ld.h -- general linker header file
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+ Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef LD_H
+#define LD_H
+
+#ifdef HAVE_LOCALE_H
+#endif
+#ifndef SEEK_CUR
+#define SEEK_CUR 1
+#endif
+#ifndef SEEK_END
+#define SEEK_END 2
+#endif
+
+#ifdef HAVE_LOCALE_H
+# ifndef ENABLE_NLS
+ /* The Solaris version of locale.h always includes libintl.h. If we have
+ been configured with --disable-nls then ENABLE_NLS will not be defined
+ and the dummy definitions of bindtextdomain (et al) below will conflict
+ with the defintions in libintl.h. So we define these values to prevent
+ the bogus inclusion of libintl.h. */
+# define _LIBINTL_H
+# define _LIBGETTEXT_H
+# endif
+# include <locale.h>
+#endif
+
+#ifdef ENABLE_NLS
+# include <libintl.h>
+# define _(String) gettext (String)
+# ifdef gettext_noop
+# define N_(String) gettext_noop (String)
+# else
+# define N_(String) (String)
+# endif
+#else
+# define gettext(Msgid) (Msgid)
+# define dgettext(Domainname, Msgid) (Msgid)
+# define dcgettext(Domainname, Msgid, Category) (Msgid)
+# define textdomain(Domainname) while (0) /* nothing */
+# define bindtextdomain(Domainname, Dirname) while (0) /* nothing */
+# define _(String) (String)
+# define N_(String) (String)
+#endif
+
+/* Look in this environment name for the linker to pretend to be */
+#define EMULATION_ENVIRON "LDEMULATION"
+/* If in there look for the strings: */
+
+/* Look in this variable for a target format */
+#define TARGET_ENVIRON "GNUTARGET"
+
+/* Input sections which are put in a section of this name are actually
+ discarded. */
+#define DISCARD_SECTION_NAME "/DISCARD/"
+
+/* A file name list */
+typedef struct name_list {
+ const char *name;
+ struct name_list *next;
+}
+name_list;
+
+typedef enum {sort_none, sort_ascending, sort_descending} sort_order;
+
+/* A wildcard specification. */
+
+typedef enum {
+ none, by_name, by_alignment, by_name_alignment, by_alignment_name
+} sort_type;
+
+extern sort_type sort_section;
+
+struct wildcard_spec {
+ const char *name;
+ struct name_list *exclude_name_list;
+ sort_type sorted;
+};
+
+struct wildcard_list {
+ struct wildcard_list *next;
+ struct wildcard_spec spec;
+};
+
+struct map_symbol_def {
+ struct bfd_link_hash_entry *entry;
+ struct map_symbol_def *next;
+};
+
+/* The initial part of fat_user_section_struct has to be idential with
+ lean_user_section_struct. */
+typedef struct fat_user_section_struct {
+ /* For input sections, when writing a map file: head / tail of a linked
+ list of hash table entries for symbols defined in this section. */
+ struct map_symbol_def *map_symbol_def_head;
+ struct map_symbol_def **map_symbol_def_tail;
+ unsigned long map_symbol_def_count;
+} fat_section_userdata_type;
+
+#define get_userdata(x) ((x)->userdata)
+
+#define BYTE_SIZE (1)
+#define SHORT_SIZE (2)
+#define LONG_SIZE (4)
+#define QUAD_SIZE (8)
+
+enum endian_enum { ENDIAN_UNSET = 0, ENDIAN_BIG, ENDIAN_LITTLE };
+
+enum symbolic_enum
+ {
+ symbolic_unset = 0,
+ symbolic,
+ symbolic_functions,
+ };
+
+enum dynamic_list_enum
+ {
+ dynamic_list_unset = 0,
+ dynamic_list_data,
+ dynamic_list
+ };
+
+typedef struct {
+ /* 1 => assign space to common symbols even if `relocatable_output'. */
+ bfd_boolean force_common_definition;
+
+ /* 1 => do not assign addresses to common symbols. */
+ bfd_boolean inhibit_common_definition;
+
+ /* Enable or disable target specific optimizations.
+
+ Not all targets have optimizations to enable.
+
+ Normally these optimizations are disabled by default but some targets
+ prefer to enable them by default. So this field is a tri-state variable.
+ The values are:
+
+ zero: Enable the optimizations (either from --relax being specified on
+ the command line or the backend's before_allocation emulation function.
+
+ positive: The user has requested that these optimizations be disabled.
+ (Via the --no-relax command line option).
+
+ negative: The optimizations are disabled. (Set when initializing the
+ args_type structure in ldmain.c:main. */
+ signed int disable_target_specific_optimizations;
+#define RELAXATION_DISABLED_BY_DEFAULT (command_line.disable_target_specific_optimizations < 0)
+#define RELAXATION_DISABLED_BY_USER (command_line.disable_target_specific_optimizations > 0)
+#define RELAXATION_ENABLED (command_line.disable_target_specific_optimizations == 0)
+#define DISABLE_RELAXATION do { command_line.disable_target_specific_optimizations = 1; } while (0)
+#define ENABLE_RELAXATION do { command_line.disable_target_specific_optimizations = 0; } while (0)
+
+ /* If TRUE, build MIPS embedded PIC relocation tables in the output
+ file. */
+ bfd_boolean embedded_relocs;
+
+ /* If TRUE, force generation of a file with a .exe file. */
+ bfd_boolean force_exe_suffix;
+
+ /* If TRUE, generate a cross reference report. */
+ bfd_boolean cref;
+
+ /* If TRUE (which is the default), warn about mismatched input
+ files. */
+ bfd_boolean warn_mismatch;
+
+ /* Warn on attempting to open an incompatible library during a library
+ search. */
+ bfd_boolean warn_search_mismatch;
+
+ /* If non-zero check section addresses, once computed,
+ for overlaps. Relocatable links only check when this is > 0. */
+ signed char check_section_addresses;
+
+ /* If TRUE allow the linking of input files in an unknown architecture
+ assuming that the user knows what they are doing. This was the old
+ behaviour of the linker. The new default behaviour is to reject such
+ input files. */
+ bfd_boolean accept_unknown_input_arch;
+
+ /* Big or little endian as set on command line. */
+ enum endian_enum endian;
+
+ /* -Bsymbolic and -Bsymbolic-functions, as set on command line. */
+ enum symbolic_enum symbolic;
+
+ /* --dynamic-list, --dynamic-list-cpp-new, --dynamic-list-cpp-typeinfo
+ and --dynamic-list FILE, as set on command line. */
+ enum dynamic_list_enum dynamic_list;
+
+ /* Name of runtime interpreter to invoke. */
+ char *interpreter;
+
+ /* Name to give runtime libary from the -soname argument. */
+ char *soname;
+
+ /* Runtime library search path from the -rpath argument. */
+ char *rpath;
+
+ /* Link time runtime library search path from the -rpath-link
+ argument. */
+ char *rpath_link;
+
+ /* Name of shared object whose symbol table should be filtered with
+ this shared object. From the --filter option. */
+ char *filter_shlib;
+
+ /* Name of shared object for whose symbol table this shared object
+ is an auxiliary filter. From the --auxiliary option. */
+ char **auxiliary_filters;
+
+ /* A version symbol to be applied to the symbol names found in the
+ .exports sections. */
+ char *version_exports_section;
+
+ /* Default linker script. */
+ char *default_script;
+} args_type;
+
+extern args_type command_line;
+
+typedef int token_code_type;
+
+typedef struct {
+ bfd_boolean magic_demand_paged;
+ bfd_boolean make_executable;
+
+ /* If TRUE, doing a dynamic link. */
+ bfd_boolean dynamic_link;
+
+ /* If TRUE, -shared is supported. */
+ /* ??? A better way to do this is perhaps to define this in the
+ ld_emulation_xfer_struct since this is really a target dependent
+ parameter. */
+ bfd_boolean has_shared;
+
+ /* If TRUE, build constructors. */
+ bfd_boolean build_constructors;
+
+ /* If TRUE, warn about any constructors. */
+ bfd_boolean warn_constructors;
+
+ /* If TRUE, warn about merging common symbols with others. */
+ bfd_boolean warn_common;
+
+ /* If TRUE, only warn once about a particular undefined symbol. */
+ bfd_boolean warn_once;
+
+ /* If TRUE, warn if multiple global-pointers are needed (Alpha
+ only). */
+ bfd_boolean warn_multiple_gp;
+
+ /* If TRUE, warn if the starting address of an output section
+ changes due to the alignment of an input section. */
+ bfd_boolean warn_section_align;
+
+ /* If TRUE, warning messages are fatal */
+ bfd_boolean fatal_warnings;
+
+ sort_order sort_common;
+
+ bfd_boolean text_read_only;
+
+ bfd_boolean stats;
+
+ /* If set, orphan input sections will be mapped to separate output
+ sections. */
+ bfd_boolean unique_orphan_sections;
+
+ /* If set, only search library directories explicitly selected
+ on the command line. */
+ bfd_boolean only_cmd_line_lib_dirs;
+
+ /* The rpath separation character. Usually ':'. */
+ char rpath_separator;
+
+ char *map_filename;
+ FILE *map_file;
+
+ unsigned int split_by_reloc;
+ bfd_size_type split_by_file;
+
+ bfd_size_type specified_data_size;
+
+ /* The size of the hash table to use. */
+ bfd_size_type hash_table_size;
+
+ /* The maximum page size for ELF. */
+ bfd_vma maxpagesize;
+
+ /* The common page size for ELF. */
+ bfd_vma commonpagesize;
+} ld_config_type;
+
+extern ld_config_type config;
+
+extern FILE * saved_script_handle;
+extern bfd_boolean force_make_executable;
+
+/* Non-zero if we are processing a --defsym from the command line. */
+extern int parsing_defsym;
+
+extern int yyparse (void);
+extern void add_cref (const char *, bfd *, asection *, bfd_vma);
+extern bfd_boolean handle_asneeded_cref (bfd *, enum notice_asneeded_action);
+extern void output_cref (FILE *);
+extern void check_nocrossrefs (void);
+extern void ld_abort (const char *, int, const char *) ATTRIBUTE_NORETURN;
+
+/* If gcc >= 2.6, we can give a function name, too. */
+#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 6)
+#define __PRETTY_FUNCTION__ NULL
+#endif
+
+#undef abort
+#define abort() ld_abort (__FILE__, __LINE__, __PRETTY_FUNCTION__)
+
+#endif
diff --git a/binutils-2.21/ld/ld.texinfo b/binutils-2.21/ld/ld.texinfo
new file mode 100644
index 0000000..4c58e48
--- /dev/null
+++ b/binutils-2.21/ld/ld.texinfo
@@ -0,0 +1,7699 @@
+\input texinfo
+@setfilename ld.info
+@c Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+@c 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+@c Free Software Foundation, Inc.
+@syncodeindex ky cp
+@c man begin INCLUDE
+@include configdoc.texi
+@c (configdoc.texi is generated by the Makefile)
+@include bfdver.texi
+@c man end
+
+@c @smallbook
+
+@macro gcctabopt{body}
+@code{\body\}
+@end macro
+
+@c man begin NAME
+@ifset man
+@c Configure for the generation of man pages
+@set UsesEnvVars
+@set GENERIC
+@set ARM
+@set H8300
+@set HPPA
+@set I960
+@set M68HC11
+@set M68K
+@set MMIX
+@set MSP430
+@set POWERPC
+@set POWERPC64
+@set Renesas
+@set SPU
+@set TICOFF
+@set WIN32
+@set XTENSA
+@end ifset
+@c man end
+
+@ifnottex
+@dircategory Software development
+@direntry
+* Ld: (ld). The GNU linker.
+@end direntry
+@end ifnottex
+
+@copying
+This file documents the @sc{gnu} linker LD
+@ifset VERSION_PACKAGE
+@value{VERSION_PACKAGE}
+@end ifset
+version @value{VERSION}.
+
+Copyright @copyright{} 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, with no Front-Cover Texts, and with no
+Back-Cover Texts. A copy of the license is included in the
+section entitled ``GNU Free Documentation License''.
+@end copying
+@iftex
+@finalout
+@setchapternewpage odd
+@settitle The GNU linker
+@titlepage
+@title The GNU linker
+@sp 1
+@subtitle @code{ld}
+@ifset VERSION_PACKAGE
+@subtitle @value{VERSION_PACKAGE}
+@end ifset
+@subtitle Version @value{VERSION}
+@author Steve Chamberlain
+@author Ian Lance Taylor
+@page
+
+@tex
+{\parskip=0pt
+\hfill Red Hat Inc\par
+\hfill nickc\@credhat.com, doc\@redhat.com\par
+\hfill {\it The GNU linker}\par
+\hfill Edited by Jeffrey Osier (jeffrey\@cygnus.com)\par
+}
+\global\parindent=0pt % Steve likes it this way.
+@end tex
+
+@vskip 0pt plus 1filll
+@c man begin COPYRIGHT
+Copyright @copyright{} 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free
+Software Foundation, Inc.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, with no Front-Cover Texts, and with no
+Back-Cover Texts. A copy of the license is included in the
+section entitled ``GNU Free Documentation License''.
+@c man end
+
+@end titlepage
+@end iftex
+@contents
+@c FIXME: Talk about importance of *order* of args, cmds to linker!
+
+@ifnottex
+@node Top
+@top LD
+This file documents the @sc{gnu} linker ld
+@ifset VERSION_PACKAGE
+@value{VERSION_PACKAGE}
+@end ifset
+version @value{VERSION}.
+
+This document is distributed under the terms of the GNU Free
+Documentation License version 1.3. A copy of the license is included
+in the section entitled ``GNU Free Documentation License''.
+
+@menu
+* Overview:: Overview
+* Invocation:: Invocation
+* Scripts:: Linker Scripts
+@ifset GENERIC
+* Machine Dependent:: Machine Dependent Features
+@end ifset
+@ifclear GENERIC
+@ifset H8300
+* H8/300:: ld and the H8/300
+@end ifset
+@ifset Renesas
+* Renesas:: ld and other Renesas micros
+@end ifset
+@ifset I960
+* i960:: ld and the Intel 960 family
+@end ifset
+@ifset ARM
+* ARM:: ld and the ARM family
+@end ifset
+@ifset HPPA
+* HPPA ELF32:: ld and HPPA 32-bit ELF
+@end ifset
+@ifset M68HC11
+* M68HC11/68HC12:: ld and the Motorola 68HC11 and 68HC12 families
+@end ifset
+@ifset M68K
+* M68K:: ld and Motorola 68K family
+@end ifset
+@ifset POWERPC
+* PowerPC ELF32:: ld and PowerPC 32-bit ELF Support
+@end ifset
+@ifset POWERPC64
+* PowerPC64 ELF64:: ld and PowerPC64 64-bit ELF Support
+@end ifset
+@ifset SPU
+* SPU ELF:: ld and SPU ELF Support
+@end ifset
+@ifset TICOFF
+* TI COFF:: ld and the TI COFF
+@end ifset
+@ifset WIN32
+* Win32:: ld and WIN32 (cygwin/mingw)
+@end ifset
+@ifset XTENSA
+* Xtensa:: ld and Xtensa Processors
+@end ifset
+@end ifclear
+@ifclear SingleFormat
+* BFD:: BFD
+@end ifclear
+@c Following blank line required for remaining bug in makeinfo conds/menus
+
+* Reporting Bugs:: Reporting Bugs
+* MRI:: MRI Compatible Script Files
+* GNU Free Documentation License:: GNU Free Documentation License
+* LD Index:: LD Index
+@end menu
+@end ifnottex
+
+@node Overview
+@chapter Overview
+
+@cindex @sc{gnu} linker
+@cindex what is this?
+
+@ifset man
+@c man begin SYNOPSIS
+ld [@b{options}] @var{objfile} @dots{}
+@c man end
+
+@c man begin SEEALSO
+ar(1), nm(1), objcopy(1), objdump(1), readelf(1) and
+the Info entries for @file{binutils} and
+@file{ld}.
+@c man end
+@end ifset
+
+@c man begin DESCRIPTION
+
+@command{ld} combines a number of object and archive files, relocates
+their data and ties up symbol references. Usually the last step in
+compiling a program is to run @command{ld}.
+
+@command{ld} accepts Linker Command Language files written in
+a superset of AT&T's Link Editor Command Language syntax,
+to provide explicit and total control over the linking process.
+
+@ifset man
+@c For the man only
+This man page does not describe the command language; see the
+@command{ld} entry in @code{info} for full details on the command
+language and on other aspects of the GNU linker.
+@end ifset
+
+@ifclear SingleFormat
+This version of @command{ld} uses the general purpose BFD libraries
+to operate on object files. This allows @command{ld} to read, combine, and
+write object files in many different formats---for example, COFF or
+@code{a.out}. Different formats may be linked together to produce any
+available kind of object file. @xref{BFD}, for more information.
+@end ifclear
+
+Aside from its flexibility, the @sc{gnu} linker is more helpful than other
+linkers in providing diagnostic information. Many linkers abandon
+execution immediately upon encountering an error; whenever possible,
+@command{ld} continues executing, allowing you to identify other errors
+(or, in some cases, to get an output file in spite of the error).
+
+@c man end
+
+@node Invocation
+@chapter Invocation
+
+@c man begin DESCRIPTION
+
+The @sc{gnu} linker @command{ld} is meant to cover a broad range of situations,
+and to be as compatible as possible with other linkers. As a result,
+you have many choices to control its behavior.
+
+@c man end
+
+@ifset UsesEnvVars
+@menu
+* Options:: Command Line Options
+* Environment:: Environment Variables
+@end menu
+
+@node Options
+@section Command Line Options
+@end ifset
+
+@cindex command line
+@cindex options
+
+@c man begin OPTIONS
+
+The linker supports a plethora of command-line options, but in actual
+practice few of them are used in any particular context.
+@cindex standard Unix system
+For instance, a frequent use of @command{ld} is to link standard Unix
+object files on a standard, supported Unix system. On such a system, to
+link a file @code{hello.o}:
+
+@smallexample
+ld -o @var{output} /lib/crt0.o hello.o -lc
+@end smallexample
+
+This tells @command{ld} to produce a file called @var{output} as the
+result of linking the file @code{/lib/crt0.o} with @code{hello.o} and
+the library @code{libc.a}, which will come from the standard search
+directories. (See the discussion of the @samp{-l} option below.)
+
+Some of the command-line options to @command{ld} may be specified at any
+point in the command line. However, options which refer to files, such
+as @samp{-l} or @samp{-T}, cause the file to be read at the point at
+which the option appears in the command line, relative to the object
+files and other file options. Repeating non-file options with a
+different argument will either have no further effect, or override prior
+occurrences (those further to the left on the command line) of that
+option. Options which may be meaningfully specified more than once are
+noted in the descriptions below.
+
+@cindex object files
+Non-option arguments are object files or archives which are to be linked
+together. They may follow, precede, or be mixed in with command-line
+options, except that an object file argument may not be placed between
+an option and its argument.
+
+Usually the linker is invoked with at least one object file, but you can
+specify other forms of binary input files using @samp{-l}, @samp{-R},
+and the script command language. If @emph{no} binary input files at all
+are specified, the linker does not produce any output, and issues the
+message @samp{No input files}.
+
+If the linker cannot recognize the format of an object file, it will
+assume that it is a linker script. A script specified in this way
+augments the main linker script used for the link (either the default
+linker script or the one specified by using @samp{-T}). This feature
+permits the linker to link against a file which appears to be an object
+or an archive, but actually merely defines some symbol values, or uses
+@code{INPUT} or @code{GROUP} to load other objects. Specifying a
+script in this way merely augments the main linker script, with the
+extra commands placed after the main script; use the @samp{-T} option
+to replace the default linker script entirely, but note the effect of
+the @code{INSERT} command. @xref{Scripts}.
+
+For options whose names are a single letter,
+option arguments must either follow the option letter without intervening
+whitespace, or be given as separate arguments immediately following the
+option that requires them.
+
+For options whose names are multiple letters, either one dash or two can
+precede the option name; for example, @samp{-trace-symbol} and
+@samp{--trace-symbol} are equivalent. Note---there is one exception to
+this rule. Multiple letter options that start with a lower case 'o' can
+only be preceded by two dashes. This is to reduce confusion with the
+@samp{-o} option. So for example @samp{-omagic} sets the output file
+name to @samp{magic} whereas @samp{--omagic} sets the NMAGIC flag on the
+output.
+
+Arguments to multiple-letter options must either be separated from the
+option name by an equals sign, or be given as separate arguments
+immediately following the option that requires them. For example,
+@samp{--trace-symbol foo} and @samp{--trace-symbol=foo} are equivalent.
+Unique abbreviations of the names of multiple-letter options are
+accepted.
+
+Note---if the linker is being invoked indirectly, via a compiler driver
+(e.g. @samp{gcc}) then all the linker command line options should be
+prefixed by @samp{-Wl,} (or whatever is appropriate for the particular
+compiler driver) like this:
+
+@smallexample
+ gcc -Wl,--start-group foo.o bar.o -Wl,--end-group
+@end smallexample
+
+This is important, because otherwise the compiler driver program may
+silently drop the linker options, resulting in a bad link. Confusion
+may also arise when passing options that require values through a
+driver, as the use of a space between option and argument acts as
+a separator, and causes the driver to pass only the option to the linker
+and the argument to the compiler. In this case, it is simplest to use
+the joined forms of both single- and multiple-letter options, such as:
+
+@smallexample
+ gcc foo.o bar.o -Wl,-eENTRY -Wl,-Map=a.map
+@end smallexample
+
+Here is a table of the generic command line switches accepted by the GNU
+linker:
+
+@table @gcctabopt
+@include at-file.texi
+
+@kindex -a @var{keyword}
+@item -a @var{keyword}
+This option is supported for HP/UX compatibility. The @var{keyword}
+argument must be one of the strings @samp{archive}, @samp{shared}, or
+@samp{default}. @samp{-aarchive} is functionally equivalent to
+@samp{-Bstatic}, and the other two keywords are functionally equivalent
+to @samp{-Bdynamic}. This option may be used any number of times.
+
+@kindex --audit @var{AUDITLIB}
+@item --audit @var{AUDITLIB}
+Adds @var{AUDITLIB} to the @code{DT_AUDIT} entry of the dynamic section.
+@var{AUDITLIB} is not checked for existence, nor will it use the DT_SONAME
+specified in the library. If specified multiple times @code{DT_AUDIT}
+will contain a colon separated list of audit interfaces to use. If the linker
+finds an object with an audit entry while searching for shared libraries,
+it will add a corresponding @code{DT_DEPAUDIT} entry in the output file.
+This option is only meaningful on ELF platforms supporting the rtld-audit
+interface.
+
+@ifset I960
+@cindex architectures
+@kindex -A @var{arch}
+@item -A @var{architecture}
+@kindex --architecture=@var{arch}
+@itemx --architecture=@var{architecture}
+In the current release of @command{ld}, this option is useful only for the
+Intel 960 family of architectures. In that @command{ld} configuration, the
+@var{architecture} argument identifies the particular architecture in
+the 960 family, enabling some safeguards and modifying the
+archive-library search path. @xref{i960,,@command{ld} and the Intel 960
+family}, for details.
+
+Future releases of @command{ld} may support similar functionality for
+other architecture families.
+@end ifset
+
+@ifclear SingleFormat
+@cindex binary input format
+@kindex -b @var{format}
+@kindex --format=@var{format}
+@cindex input format
+@cindex input format
+@item -b @var{input-format}
+@itemx --format=@var{input-format}
+@command{ld} may be configured to support more than one kind of object
+file. If your @command{ld} is configured this way, you can use the
+@samp{-b} option to specify the binary format for input object files
+that follow this option on the command line. Even when @command{ld} is
+configured to support alternative object formats, you don't usually need
+to specify this, as @command{ld} should be configured to expect as a
+default input format the most usual format on each machine.
+@var{input-format} is a text string, the name of a particular format
+supported by the BFD libraries. (You can list the available binary
+formats with @samp{objdump -i}.)
+@xref{BFD}.
+
+You may want to use this option if you are linking files with an unusual
+binary format. You can also use @samp{-b} to switch formats explicitly (when
+linking object files of different formats), by including
+@samp{-b @var{input-format}} before each group of object files in a
+particular format.
+
+The default format is taken from the environment variable
+@code{GNUTARGET}.
+@ifset UsesEnvVars
+@xref{Environment}.
+@end ifset
+You can also define the input format from a script, using the command
+@code{TARGET};
+@ifclear man
+see @ref{Format Commands}.
+@end ifclear
+@end ifclear
+
+@kindex -c @var{MRI-cmdfile}
+@kindex --mri-script=@var{MRI-cmdfile}
+@cindex compatibility, MRI
+@item -c @var{MRI-commandfile}
+@itemx --mri-script=@var{MRI-commandfile}
+For compatibility with linkers produced by MRI, @command{ld} accepts script
+files written in an alternate, restricted command language, described in
+@ifclear man
+@ref{MRI,,MRI Compatible Script Files}.
+@end ifclear
+@ifset man
+the MRI Compatible Script Files section of GNU ld documentation.
+@end ifset
+Introduce MRI script files with
+the option @samp{-c}; use the @samp{-T} option to run linker
+scripts written in the general-purpose @command{ld} scripting language.
+If @var{MRI-cmdfile} does not exist, @command{ld} looks for it in the directories
+specified by any @samp{-L} options.
+
+@cindex common allocation
+@kindex -d
+@kindex -dc
+@kindex -dp
+@item -d
+@itemx -dc
+@itemx -dp
+These three options are equivalent; multiple forms are supported for
+compatibility with other linkers. They assign space to common symbols
+even if a relocatable output file is specified (with @samp{-r}). The
+script command @code{FORCE_COMMON_ALLOCATION} has the same effect.
+@xref{Miscellaneous Commands}.
+
+@kindex --depaudit @var{AUDITLIB}
+@kindex -P @var{AUDITLIB}
+@item --depaudit @var{AUDITLIB}
+@itemx -P @var{AUDITLIB}
+Adds @var{AUDITLIB} to the @code{DT_DEPAUDIT} entry of the dynamic section.
+@var{AUDITLIB} is not checked for existence, nor will it use the DT_SONAME
+specified in the library. If specified multiple times @code{DT_DEPAUDIT}
+will contain a colon separated list of audit interfaces to use. This
+option is only meaningful on ELF platforms supporting the rtld-audit interface.
+The -P option is provided for Solaris compatibility.
+
+@cindex entry point, from command line
+@kindex -e @var{entry}
+@kindex --entry=@var{entry}
+@item -e @var{entry}
+@itemx --entry=@var{entry}
+Use @var{entry} as the explicit symbol for beginning execution of your
+program, rather than the default entry point. If there is no symbol
+named @var{entry}, the linker will try to parse @var{entry} as a number,
+and use that as the entry address (the number will be interpreted in
+base 10; you may use a leading @samp{0x} for base 16, or a leading
+@samp{0} for base 8). @xref{Entry Point}, for a discussion of defaults
+and other ways of specifying the entry point.
+
+@kindex --exclude-libs
+@item --exclude-libs @var{lib},@var{lib},...
+Specifies a list of archive libraries from which symbols should not be automatically
+exported. The library names may be delimited by commas or colons. Specifying
+@code{--exclude-libs ALL} excludes symbols in all archive libraries from
+automatic export. This option is available only for the i386 PE targeted
+port of the linker and for ELF targeted ports. For i386 PE, symbols
+explicitly listed in a .def file are still exported, regardless of this
+option. For ELF targeted ports, symbols affected by this option will
+be treated as hidden.
+
+@kindex --exclude-modules-for-implib
+@item --exclude-modules-for-implib @var{module},@var{module},...
+Specifies a list of object files or archive members, from which symbols
+should not be automatically exported, but which should be copied wholesale
+into the import library being generated during the link. The module names
+may be delimited by commas or colons, and must match exactly the filenames
+used by @command{ld} to open the files; for archive members, this is simply
+the member name, but for object files the name listed must include and
+match precisely any path used to specify the input file on the linker's
+command-line. This option is available only for the i386 PE targeted port
+of the linker. Symbols explicitly listed in a .def file are still exported,
+regardless of this option.
+
+@cindex dynamic symbol table
+@kindex -E
+@kindex --export-dynamic
+@kindex --no-export-dynamic
+@item -E
+@itemx --export-dynamic
+@itemx --no-export-dynamic
+When creating a dynamically linked executable, using the @option{-E}
+option or the @option{--export-dynamic} option causes the linker to add
+all symbols to the dynamic symbol table. The dynamic symbol table is the
+set of symbols which are visible from dynamic objects at run time.
+
+If you do not use either of these options (or use the
+@option{--no-export-dynamic} option to restore the default behavior), the
+dynamic symbol table will normally contain only those symbols which are
+referenced by some dynamic object mentioned in the link.
+
+If you use @code{dlopen} to load a dynamic object which needs to refer
+back to the symbols defined by the program, rather than some other
+dynamic object, then you will probably need to use this option when
+linking the program itself.
+
+You can also use the dynamic list to control what symbols should
+be added to the dynamic symbol table if the output format supports it.
+See the description of @samp{--dynamic-list}.
+
+Note that this option is specific to ELF targeted ports. PE targets
+support a similar function to export all symbols from a DLL or EXE; see
+the description of @samp{--export-all-symbols} below.
+
+@ifclear SingleFormat
+@cindex big-endian objects
+@cindex endianness
+@kindex -EB
+@item -EB
+Link big-endian objects. This affects the default output format.
+
+@cindex little-endian objects
+@kindex -EL
+@item -EL
+Link little-endian objects. This affects the default output format.
+@end ifclear
+
+@kindex -f @var{name}
+@kindex --auxiliary=@var{name}
+@item -f @var{name}
+@itemx --auxiliary=@var{name}
+When creating an ELF shared object, set the internal DT_AUXILIARY field
+to the specified name. This tells the dynamic linker that the symbol
+table of the shared object should be used as an auxiliary filter on the
+symbol table of the shared object @var{name}.
+
+If you later link a program against this filter object, then, when you
+run the program, the dynamic linker will see the DT_AUXILIARY field. If
+the dynamic linker resolves any symbols from the filter object, it will
+first check whether there is a definition in the shared object
+@var{name}. If there is one, it will be used instead of the definition
+in the filter object. The shared object @var{name} need not exist.
+Thus the shared object @var{name} may be used to provide an alternative
+implementation of certain functions, perhaps for debugging or for
+machine specific performance.
+
+This option may be specified more than once. The DT_AUXILIARY entries
+will be created in the order in which they appear on the command line.
+
+@kindex -F @var{name}
+@kindex --filter=@var{name}
+@item -F @var{name}
+@itemx --filter=@var{name}
+When creating an ELF shared object, set the internal DT_FILTER field to
+the specified name. This tells the dynamic linker that the symbol table
+of the shared object which is being created should be used as a filter
+on the symbol table of the shared object @var{name}.
+
+If you later link a program against this filter object, then, when you
+run the program, the dynamic linker will see the DT_FILTER field. The
+dynamic linker will resolve symbols according to the symbol table of the
+filter object as usual, but it will actually link to the definitions
+found in the shared object @var{name}. Thus the filter object can be
+used to select a subset of the symbols provided by the object
+@var{name}.
+
+Some older linkers used the @option{-F} option throughout a compilation
+toolchain for specifying object-file format for both input and output
+object files.
+@ifclear SingleFormat
+The @sc{gnu} linker uses other mechanisms for this purpose: the
+@option{-b}, @option{--format}, @option{--oformat} options, the
+@code{TARGET} command in linker scripts, and the @code{GNUTARGET}
+environment variable.
+@end ifclear
+The @sc{gnu} linker will ignore the @option{-F} option when not
+creating an ELF shared object.
+
+@cindex finalization function
+@kindex -fini=@var{name}
+@item -fini=@var{name}
+When creating an ELF executable or shared object, call NAME when the
+executable or shared object is unloaded, by setting DT_FINI to the
+address of the function. By default, the linker uses @code{_fini} as
+the function to call.
+
+@kindex -g
+@item -g
+Ignored. Provided for compatibility with other tools.
+
+@kindex -G @var{value}
+@kindex --gpsize=@var{value}
+@cindex object size
+@item -G @var{value}
+@itemx --gpsize=@var{value}
+Set the maximum size of objects to be optimized using the GP register to
+@var{size}. This is only meaningful for object file formats such as
+MIPS ECOFF which supports putting large and small objects into different
+sections. This is ignored for other object file formats.
+
+@cindex runtime library name
+@kindex -h @var{name}
+@kindex -soname=@var{name}
+@item -h @var{name}
+@itemx -soname=@var{name}
+When creating an ELF shared object, set the internal DT_SONAME field to
+the specified name. When an executable is linked with a shared object
+which has a DT_SONAME field, then when the executable is run the dynamic
+linker will attempt to load the shared object specified by the DT_SONAME
+field rather than the using the file name given to the linker.
+
+@kindex -i
+@cindex incremental link
+@item -i
+Perform an incremental link (same as option @samp{-r}).
+
+@cindex initialization function
+@kindex -init=@var{name}
+@item -init=@var{name}
+When creating an ELF executable or shared object, call NAME when the
+executable or shared object is loaded, by setting DT_INIT to the address
+of the function. By default, the linker uses @code{_init} as the
+function to call.
+
+@cindex archive files, from cmd line
+@kindex -l @var{namespec}
+@kindex --library=@var{namespec}
+@item -l @var{namespec}
+@itemx --library=@var{namespec}
+Add the archive or object file specified by @var{namespec} to the
+list of files to link. This option may be used any number of times.
+If @var{namespec} is of the form @file{:@var{filename}}, @command{ld}
+will search the library path for a file called @var{filename}, otherwise it
+will search the library path for a file called @file{lib@var{namespec}.a}.
+
+On systems which support shared libraries, @command{ld} may also search for
+files other than @file{lib@var{namespec}.a}. Specifically, on ELF
+and SunOS systems, @command{ld} will search a directory for a library
+called @file{lib@var{namespec}.so} before searching for one called
+@file{lib@var{namespec}.a}. (By convention, a @code{.so} extension
+indicates a shared library.) Note that this behavior does not apply
+to @file{:@var{filename}}, which always specifies a file called
+@var{filename}.
+
+The linker will search an archive only once, at the location where it is
+specified on the command line. If the archive defines a symbol which
+was undefined in some object which appeared before the archive on the
+command line, the linker will include the appropriate file(s) from the
+archive. However, an undefined symbol in an object appearing later on
+the command line will not cause the linker to search the archive again.
+
+See the @option{-(} option for a way to force the linker to search
+archives multiple times.
+
+You may list the same archive multiple times on the command line.
+
+@ifset GENERIC
+This type of archive searching is standard for Unix linkers. However,
+if you are using @command{ld} on AIX, note that it is different from the
+behaviour of the AIX linker.
+@end ifset
+
+@cindex search directory, from cmd line
+@kindex -L @var{dir}
+@kindex --library-path=@var{dir}
+@item -L @var{searchdir}
+@itemx --library-path=@var{searchdir}
+Add path @var{searchdir} to the list of paths that @command{ld} will search
+for archive libraries and @command{ld} control scripts. You may use this
+option any number of times. The directories are searched in the order
+in which they are specified on the command line. Directories specified
+on the command line are searched before the default directories. All
+@option{-L} options apply to all @option{-l} options, regardless of the
+order in which the options appear. @option{-L} options do not affect
+how @command{ld} searches for a linker script unless @option{-T}
+option is specified.
+
+If @var{searchdir} begins with @code{=}, then the @code{=} will be replaced
+by the @dfn{sysroot prefix}, a path specified when the linker is configured.
+
+@ifset UsesEnvVars
+The default set of paths searched (without being specified with
+@samp{-L}) depends on which emulation mode @command{ld} is using, and in
+some cases also on how it was configured. @xref{Environment}.
+@end ifset
+
+The paths can also be specified in a link script with the
+@code{SEARCH_DIR} command. Directories specified this way are searched
+at the point in which the linker script appears in the command line.
+
+@cindex emulation
+@kindex -m @var{emulation}
+@item -m @var{emulation}
+Emulate the @var{emulation} linker. You can list the available
+emulations with the @samp{--verbose} or @samp{-V} options.
+
+If the @samp{-m} option is not used, the emulation is taken from the
+@code{LDEMULATION} environment variable, if that is defined.
+
+Otherwise, the default emulation depends upon how the linker was
+configured.
+
+@cindex link map
+@kindex -M
+@kindex --print-map
+@item -M
+@itemx --print-map
+Print a link map to the standard output. A link map provides
+information about the link, including the following:
+
+@itemize @bullet
+@item
+Where object files are mapped into memory.
+@item
+How common symbols are allocated.
+@item
+All archive members included in the link, with a mention of the symbol
+which caused the archive member to be brought in.
+@item
+The values assigned to symbols.
+
+Note - symbols whose values are computed by an expression which
+involves a reference to a previous value of the same symbol may not
+have correct result displayed in the link map. This is because the
+linker discards intermediate results and only retains the final value
+of an expression. Under such circumstances the linker will display
+the final value enclosed by square brackets. Thus for example a
+linker script containing:
+
+@smallexample
+ foo = 1
+ foo = foo * 4
+ foo = foo + 8
+@end smallexample
+
+will produce the following output in the link map if the @option{-M}
+option is used:
+
+@smallexample
+ 0x00000001 foo = 0x1
+ [0x0000000c] foo = (foo * 0x4)
+ [0x0000000c] foo = (foo + 0x8)
+@end smallexample
+
+See @ref{Expressions} for more information about expressions in linker
+scripts.
+@end itemize
+
+@kindex -n
+@cindex read-only text
+@cindex NMAGIC
+@kindex --nmagic
+@item -n
+@itemx --nmagic
+Turn off page alignment of sections, and disable linking against shared
+libraries. If the output format supports Unix style magic numbers,
+mark the output as @code{NMAGIC}.
+
+@kindex -N
+@kindex --omagic
+@cindex read/write from cmd line
+@cindex OMAGIC
+@item -N
+@itemx --omagic
+Set the text and data sections to be readable and writable. Also, do
+not page-align the data segment, and disable linking against shared
+libraries. If the output format supports Unix style magic numbers,
+mark the output as @code{OMAGIC}. Note: Although a writable text section
+is allowed for PE-COFF targets, it does not conform to the format
+specification published by Microsoft.
+
+@kindex --no-omagic
+@cindex OMAGIC
+@item --no-omagic
+This option negates most of the effects of the @option{-N} option. It
+sets the text section to be read-only, and forces the data segment to
+be page-aligned. Note - this option does not enable linking against
+shared libraries. Use @option{-Bdynamic} for this.
+
+@kindex -o @var{output}
+@kindex --output=@var{output}
+@cindex naming the output file
+@item -o @var{output}
+@itemx --output=@var{output}
+Use @var{output} as the name for the program produced by @command{ld}; if this
+option is not specified, the name @file{a.out} is used by default. The
+script command @code{OUTPUT} can also specify the output file name.
+
+@kindex -O @var{level}
+@cindex generating optimized output
+@item -O @var{level}
+If @var{level} is a numeric values greater than zero @command{ld} optimizes
+the output. This might take significantly longer and therefore probably
+should only be enabled for the final binary. At the moment this
+option only affects ELF shared library generation. Future releases of
+the linker may make more use of this option. Also currently there is
+no difference in the linker's behaviour for different non-zero values
+of this option. Again this may change with future releases.
+
+@kindex -q
+@kindex --emit-relocs
+@cindex retain relocations in final executable
+@item -q
+@itemx --emit-relocs
+Leave relocation sections and contents in fully linked executables.
+Post link analysis and optimization tools may need this information in
+order to perform correct modifications of executables. This results
+in larger executables.
+
+This option is currently only supported on ELF platforms.
+
+@kindex --force-dynamic
+@cindex forcing the creation of dynamic sections
+@item --force-dynamic
+Force the output file to have dynamic sections. This option is specific
+to VxWorks targets.
+
+@cindex partial link
+@cindex relocatable output
+@kindex -r
+@kindex --relocatable
+@item -r
+@itemx --relocatable
+Generate relocatable output---i.e., generate an output file that can in
+turn serve as input to @command{ld}. This is often called @dfn{partial
+linking}. As a side effect, in environments that support standard Unix
+magic numbers, this option also sets the output file's magic number to
+@code{OMAGIC}.
+@c ; see @option{-N}.
+If this option is not specified, an absolute file is produced. When
+linking C++ programs, this option @emph{will not} resolve references to
+constructors; to do that, use @samp{-Ur}.
+
+When an input file does not have the same format as the output file,
+partial linking is only supported if that input file does not contain any
+relocations. Different output formats can have further restrictions; for
+example some @code{a.out}-based formats do not support partial linking
+with input files in other formats at all.
+
+This option does the same thing as @samp{-i}.
+
+@kindex -R @var{file}
+@kindex --just-symbols=@var{file}
+@cindex symbol-only input
+@item -R @var{filename}
+@itemx --just-symbols=@var{filename}
+Read symbol names and their addresses from @var{filename}, but do not
+relocate it or include it in the output. This allows your output file
+to refer symbolically to absolute locations of memory defined in other
+programs. You may use this option more than once.
+
+For compatibility with other ELF linkers, if the @option{-R} option is
+followed by a directory name, rather than a file name, it is treated as
+the @option{-rpath} option.
+
+@kindex -s
+@kindex --strip-all
+@cindex strip all symbols
+@item -s
+@itemx --strip-all
+Omit all symbol information from the output file.
+
+@kindex -S
+@kindex --strip-debug
+@cindex strip debugger symbols
+@item -S
+@itemx --strip-debug
+Omit debugger symbol information (but not all symbols) from the output file.
+
+@kindex -t
+@kindex --trace
+@cindex input files, displaying
+@item -t
+@itemx --trace
+Print the names of the input files as @command{ld} processes them.
+
+@kindex -T @var{script}
+@kindex --script=@var{script}
+@cindex script files
+@item -T @var{scriptfile}
+@itemx --script=@var{scriptfile}
+Use @var{scriptfile} as the linker script. This script replaces
+@command{ld}'s default linker script (rather than adding to it), so
+@var{commandfile} must specify everything necessary to describe the
+output file. @xref{Scripts}. If @var{scriptfile} does not exist in
+the current directory, @code{ld} looks for it in the directories
+specified by any preceding @samp{-L} options. Multiple @samp{-T}
+options accumulate.
+
+@kindex -dT @var{script}
+@kindex --default-script=@var{script}
+@cindex script files
+@item -dT @var{scriptfile}
+@itemx --default-script=@var{scriptfile}
+Use @var{scriptfile} as the default linker script. @xref{Scripts}.
+
+This option is similar to the @option{--script} option except that
+processing of the script is delayed until after the rest of the
+command line has been processed. This allows options placed after the
+@option{--default-script} option on the command line to affect the
+behaviour of the linker script, which can be important when the linker
+command line cannot be directly controlled by the user. (eg because
+the command line is being constructed by another tool, such as
+@samp{gcc}).
+
+@kindex -u @var{symbol}
+@kindex --undefined=@var{symbol}
+@cindex undefined symbol
+@item -u @var{symbol}
+@itemx --undefined=@var{symbol}
+Force @var{symbol} to be entered in the output file as an undefined
+symbol. Doing this may, for example, trigger linking of additional
+modules from standard libraries. @samp{-u} may be repeated with
+different option arguments to enter additional undefined symbols. This
+option is equivalent to the @code{EXTERN} linker script command.
+
+@kindex -Ur
+@cindex constructors
+@item -Ur
+For anything other than C++ programs, this option is equivalent to
+@samp{-r}: it generates relocatable output---i.e., an output file that can in
+turn serve as input to @command{ld}. When linking C++ programs, @samp{-Ur}
+@emph{does} resolve references to constructors, unlike @samp{-r}.
+It does not work to use @samp{-Ur} on files that were themselves linked
+with @samp{-Ur}; once the constructor table has been built, it cannot
+be added to. Use @samp{-Ur} only for the last partial link, and
+@samp{-r} for the others.
+
+@kindex --unique[=@var{SECTION}]
+@item --unique[=@var{SECTION}]
+Creates a separate output section for every input section matching
+@var{SECTION}, or if the optional wildcard @var{SECTION} argument is
+missing, for every orphan input section. An orphan section is one not
+specifically mentioned in a linker script. You may use this option
+multiple times on the command line; It prevents the normal merging of
+input sections with the same name, overriding output section assignments
+in a linker script.
+
+@kindex -v
+@kindex -V
+@kindex --version
+@cindex version
+@item -v
+@itemx --version
+@itemx -V
+Display the version number for @command{ld}. The @option{-V} option also
+lists the supported emulations.
+
+@kindex -x
+@kindex --discard-all
+@cindex deleting local symbols
+@item -x
+@itemx --discard-all
+Delete all local symbols.
+
+@kindex -X
+@kindex --discard-locals
+@cindex local symbols, deleting
+@item -X
+@itemx --discard-locals
+Delete all temporary local symbols. (These symbols start with
+system-specific local label prefixes, typically @samp{.L} for ELF systems
+or @samp{L} for traditional a.out systems.)
+
+@kindex -y @var{symbol}
+@kindex --trace-symbol=@var{symbol}
+@cindex symbol tracing
+@item -y @var{symbol}
+@itemx --trace-symbol=@var{symbol}
+Print the name of each linked file in which @var{symbol} appears. This
+option may be given any number of times. On many systems it is necessary
+to prepend an underscore.
+
+This option is useful when you have an undefined symbol in your link but
+don't know where the reference is coming from.
+
+@kindex -Y @var{path}
+@item -Y @var{path}
+Add @var{path} to the default library search path. This option exists
+for Solaris compatibility.
+
+@kindex -z @var{keyword}
+@item -z @var{keyword}
+The recognized keywords are:
+@table @samp
+
+@item combreloc
+Combines multiple reloc sections and sorts them to make dynamic symbol
+lookup caching possible.
+
+@item defs
+Disallows undefined symbols in object files. Undefined symbols in
+shared libraries are still allowed.
+
+@item execstack
+Marks the object as requiring executable stack.
+
+@item initfirst
+This option is only meaningful when building a shared object.
+It marks the object so that its runtime initialization will occur
+before the runtime initialization of any other objects brought into
+the process at the same time. Similarly the runtime finalization of
+the object will occur after the runtime finalization of any other
+objects.
+
+@item interpose
+Marks the object that its symbol table interposes before all symbols
+but the primary executable.
+
+@item lazy
+When generating an executable or shared library, mark it to tell the
+dynamic linker to defer function call resolution to the point when
+the function is called (lazy binding), rather than at load time.
+Lazy binding is the default.
+
+@item loadfltr
+Marks the object that its filters be processed immediately at
+runtime.
+
+@item muldefs
+Allows multiple definitions.
+
+@item nocombreloc
+Disables multiple reloc sections combining.
+
+@item nocopyreloc
+Disables production of copy relocs.
+
+@item nodefaultlib
+Marks the object that the search for dependencies of this object will
+ignore any default library search paths.
+
+@item nodelete
+Marks the object shouldn't be unloaded at runtime.
+
+@item nodlopen
+Marks the object not available to @code{dlopen}.
+
+@item nodump
+Marks the object can not be dumped by @code{dldump}.
+
+@item noexecstack
+Marks the object as not requiring executable stack.
+
+@item norelro
+Don't create an ELF @code{PT_GNU_RELRO} segment header in the object.
+
+@item now
+When generating an executable or shared library, mark it to tell the
+dynamic linker to resolve all symbols when the program is started, or
+when the shared library is linked to using dlopen, instead of
+deferring function call resolution to the point when the function is
+first called.
+
+@item origin
+Marks the object may contain $ORIGIN.
+
+@item relro
+Create an ELF @code{PT_GNU_RELRO} segment header in the object.
+
+@item max-page-size=@var{value}
+Set the emulation maximum page size to @var{value}.
+
+@item common-page-size=@var{value}
+Set the emulation common page size to @var{value}.
+
+@end table
+
+Other keywords are ignored for Solaris compatibility.
+
+@kindex -(
+@cindex groups of archives
+@item -( @var{archives} -)
+@itemx --start-group @var{archives} --end-group
+The @var{archives} should be a list of archive files. They may be
+either explicit file names, or @samp{-l} options.
+
+The specified archives are searched repeatedly until no new undefined
+references are created. Normally, an archive is searched only once in
+the order that it is specified on the command line. If a symbol in that
+archive is needed to resolve an undefined symbol referred to by an
+object in an archive that appears later on the command line, the linker
+would not be able to resolve that reference. By grouping the archives,
+they all be searched repeatedly until all possible references are
+resolved.
+
+Using this option has a significant performance cost. It is best to use
+it only when there are unavoidable circular references between two or
+more archives.
+
+@kindex --accept-unknown-input-arch
+@kindex --no-accept-unknown-input-arch
+@item --accept-unknown-input-arch
+@itemx --no-accept-unknown-input-arch
+Tells the linker to accept input files whose architecture cannot be
+recognised. The assumption is that the user knows what they are doing
+and deliberately wants to link in these unknown input files. This was
+the default behaviour of the linker, before release 2.14. The default
+behaviour from release 2.14 onwards is to reject such input files, and
+so the @samp{--accept-unknown-input-arch} option has been added to
+restore the old behaviour.
+
+@kindex --as-needed
+@kindex --no-as-needed
+@item --as-needed
+@itemx --no-as-needed
+This option affects ELF DT_NEEDED tags for dynamic libraries mentioned
+on the command line after the @option{--as-needed} option. Normally
+the linker will add a DT_NEEDED tag for each dynamic library mentioned
+on the command line, regardless of whether the library is actually
+needed or not. @option{--as-needed} causes a DT_NEEDED tag to only be
+emitted for a library that satisfies an undefined symbol reference
+from a regular object file or, if the library is not found in the
+DT_NEEDED lists of other libraries linked up to that point, an
+undefined symbol reference from another dynamic library.
+@option{--no-as-needed} restores the default behaviour.
+
+@kindex --add-needed
+@kindex --no-add-needed
+@item --add-needed
+@itemx --no-add-needed
+These two options have been deprecated because of the similarity of
+their names to the @option{--as-needed} and @option{--no-as-needed}
+options. They have been replaced by @option{--copy-dt-needed-entries}
+and @option{--no-copy-dt-needed-entries}.
+
+@kindex -assert @var{keyword}
+@item -assert @var{keyword}
+This option is ignored for SunOS compatibility.
+
+@kindex -Bdynamic
+@kindex -dy
+@kindex -call_shared
+@item -Bdynamic
+@itemx -dy
+@itemx -call_shared
+Link against dynamic libraries. This is only meaningful on platforms
+for which shared libraries are supported. This option is normally the
+default on such platforms. The different variants of this option are
+for compatibility with various systems. You may use this option
+multiple times on the command line: it affects library searching for
+@option{-l} options which follow it.
+
+@kindex -Bgroup
+@item -Bgroup
+Set the @code{DF_1_GROUP} flag in the @code{DT_FLAGS_1} entry in the dynamic
+section. This causes the runtime linker to handle lookups in this
+object and its dependencies to be performed only inside the group.
+@option{--unresolved-symbols=report-all} is implied. This option is
+only meaningful on ELF platforms which support shared libraries.
+
+@kindex -Bstatic
+@kindex -dn
+@kindex -non_shared
+@kindex -static
+@item -Bstatic
+@itemx -dn
+@itemx -non_shared
+@itemx -static
+Do not link against shared libraries. This is only meaningful on
+platforms for which shared libraries are supported. The different
+variants of this option are for compatibility with various systems. You
+may use this option multiple times on the command line: it affects
+library searching for @option{-l} options which follow it. This
+option also implies @option{--unresolved-symbols=report-all}. This
+option can be used with @option{-shared}. Doing so means that a
+shared library is being created but that all of the library's external
+references must be resolved by pulling in entries from static
+libraries.
+
+@kindex -Bsymbolic
+@item -Bsymbolic
+When creating a shared library, bind references to global symbols to the
+definition within the shared library, if any. Normally, it is possible
+for a program linked against a shared library to override the definition
+within the shared library. This option is only meaningful on ELF
+platforms which support shared libraries.
+
+@kindex -Bsymbolic-functions
+@item -Bsymbolic-functions
+When creating a shared library, bind references to global function
+symbols to the definition within the shared library, if any.
+This option is only meaningful on ELF platforms which support shared
+libraries.
+
+@kindex --dynamic-list=@var{dynamic-list-file}
+@item --dynamic-list=@var{dynamic-list-file}
+Specify the name of a dynamic list file to the linker. This is
+typically used when creating shared libraries to specify a list of
+global symbols whose references shouldn't be bound to the definition
+within the shared library, or creating dynamically linked executables
+to specify a list of symbols which should be added to the symbol table
+in the executable. This option is only meaningful on ELF platforms
+which support shared libraries.
+
+The format of the dynamic list is the same as the version node without
+scope and node name. See @ref{VERSION} for more information.
+
+@kindex --dynamic-list-data
+@item --dynamic-list-data
+Include all global data symbols to the dynamic list.
+
+@kindex --dynamic-list-cpp-new
+@item --dynamic-list-cpp-new
+Provide the builtin dynamic list for C++ operator new and delete. It
+is mainly useful for building shared libstdc++.
+
+@kindex --dynamic-list-cpp-typeinfo
+@item --dynamic-list-cpp-typeinfo
+Provide the builtin dynamic list for C++ runtime type identification.
+
+@kindex --check-sections
+@kindex --no-check-sections
+@item --check-sections
+@itemx --no-check-sections
+Asks the linker @emph{not} to check section addresses after they have
+been assigned to see if there are any overlaps. Normally the linker will
+perform this check, and if it finds any overlaps it will produce
+suitable error messages. The linker does know about, and does make
+allowances for sections in overlays. The default behaviour can be
+restored by using the command line switch @option{--check-sections}.
+Section overlap is not usually checked for relocatable links. You can
+force checking in that case by using the @option{--check-sections}
+option.
+
+@kindex --copy-dt-needed-entries
+@kindex --no-copy-dt-needed-entries
+@item --copy-dt-needed-entries
+@itemx --no-copy-dt-needed-entries
+This option affects the treatment of dynamic libraries referred to
+by DT_NEEDED tags @emph{inside} ELF dynamic libraries mentioned on the
+command line. Normally the linker will add a DT_NEEDED tag to the
+output binary for each library mentioned in a DT_NEEDED tag in an
+input dynamic library. With @option{--no-copy-dt-needed-entries}
+specified on the command line however any dynamic libraries that
+follow it will have their DT_NEEDED entries ignored. The default
+behaviour can be restored with @option{--copy-dt-needed-entries}.
+
+This option also has an effect on the resolution of symbols in dynamic
+libraries. With the default setting dynamic libraries mentioned on
+the command line will be recursively searched, following their
+DT_NEEDED tags to other libraries, in order to resolve symbols
+required by the output binary. With
+@option{--no-copy-dt-needed-entries} specified however the searching
+of dynamic libraries that follow it will stop with the dynamic
+library itself. No DT_NEEDED links will be traversed to resolve
+symbols.
+
+@cindex cross reference table
+@kindex --cref
+@item --cref
+Output a cross reference table. If a linker map file is being
+generated, the cross reference table is printed to the map file.
+Otherwise, it is printed on the standard output.
+
+The format of the table is intentionally simple, so that it may be
+easily processed by a script if necessary. The symbols are printed out,
+sorted by name. For each symbol, a list of file names is given. If the
+symbol is defined, the first file listed is the location of the
+definition. The remaining files contain references to the symbol.
+
+@cindex common allocation
+@kindex --no-define-common
+@item --no-define-common
+This option inhibits the assignment of addresses to common symbols.
+The script command @code{INHIBIT_COMMON_ALLOCATION} has the same effect.
+@xref{Miscellaneous Commands}.
+
+The @samp{--no-define-common} option allows decoupling
+the decision to assign addresses to Common symbols from the choice
+of the output file type; otherwise a non-Relocatable output type
+forces assigning addresses to Common symbols.
+Using @samp{--no-define-common} allows Common symbols that are referenced
+from a shared library to be assigned addresses only in the main program.
+This eliminates the unused duplicate space in the shared library,
+and also prevents any possible confusion over resolving to the wrong
+duplicate when there are many dynamic modules with specialized search
+paths for runtime symbol resolution.
+
+@cindex symbols, from command line
+@kindex --defsym=@var{symbol}=@var{exp}
+@item --defsym=@var{symbol}=@var{expression}
+Create a global symbol in the output file, containing the absolute
+address given by @var{expression}. You may use this option as many
+times as necessary to define multiple symbols in the command line. A
+limited form of arithmetic is supported for the @var{expression} in this
+context: you may give a hexadecimal constant or the name of an existing
+symbol, or use @code{+} and @code{-} to add or subtract hexadecimal
+constants or symbols. If you need more elaborate expressions, consider
+using the linker command language from a script (@pxref{Assignments,,
+Assignment: Symbol Definitions}). @emph{Note:} there should be no white
+space between @var{symbol}, the equals sign (``@key{=}''), and
+@var{expression}.
+
+@cindex demangling, from command line
+@kindex --demangle[=@var{style}]
+@kindex --no-demangle
+@item --demangle[=@var{style}]
+@itemx --no-demangle
+These options control whether to demangle symbol names in error messages
+and other output. When the linker is told to demangle, it tries to
+present symbol names in a readable fashion: it strips leading
+underscores if they are used by the object file format, and converts C++
+mangled symbol names into user readable names. Different compilers have
+different mangling styles. The optional demangling style argument can be used
+to choose an appropriate demangling style for your compiler. The linker will
+demangle by default unless the environment variable @samp{COLLECT_NO_DEMANGLE}
+is set. These options may be used to override the default.
+
+@cindex dynamic linker, from command line
+@kindex -I@var{file}
+@kindex --dynamic-linker=@var{file}
+@item -I@var{file}
+@itemx --dynamic-linker=@var{file}
+Set the name of the dynamic linker. This is only meaningful when
+generating dynamically linked ELF executables. The default dynamic
+linker is normally correct; don't use this unless you know what you are
+doing.
+
+@kindex --fatal-warnings
+@kindex --no-fatal-warnings
+@item --fatal-warnings
+@itemx --no-fatal-warnings
+Treat all warnings as errors. The default behaviour can be restored
+with the option @option{--no-fatal-warnings}.
+
+@kindex --force-exe-suffix
+@item --force-exe-suffix
+Make sure that an output file has a .exe suffix.
+
+If a successfully built fully linked output file does not have a
+@code{.exe} or @code{.dll} suffix, this option forces the linker to copy
+the output file to one of the same name with a @code{.exe} suffix. This
+option is useful when using unmodified Unix makefiles on a Microsoft
+Windows host, since some versions of Windows won't run an image unless
+it ends in a @code{.exe} suffix.
+
+@kindex --gc-sections
+@kindex --no-gc-sections
+@cindex garbage collection
+@item --gc-sections
+@itemx --no-gc-sections
+Enable garbage collection of unused input sections. It is ignored on
+targets that do not support this option. The default behaviour (of not
+performing this garbage collection) can be restored by specifying
+@samp{--no-gc-sections} on the command line.
+
+@samp{--gc-sections} decides which input sections are used by
+examining symbols and relocations. The section containing the entry
+symbol and all sections containing symbols undefined on the
+command-line will be kept, as will sections containing symbols
+referenced by dynamic objects. Note that when building shared
+libraries, the linker must assume that any visible symbol is
+referenced. Once this initial set of sections has been determined,
+the linker recursively marks as used any section referenced by their
+relocations. See @samp{--entry} and @samp{--undefined}.
+
+This option can be set when doing a partial link (enabled with option
+@samp{-r}). In this case the root of symbols kept must be explicitly
+specified either by an @samp{--entry} or @samp{--undefined} option or by
+a @code{ENTRY} command in the linker script.
+
+@kindex --print-gc-sections
+@kindex --no-print-gc-sections
+@cindex garbage collection
+@item --print-gc-sections
+@itemx --no-print-gc-sections
+List all sections removed by garbage collection. The listing is
+printed on stderr. This option is only effective if garbage
+collection has been enabled via the @samp{--gc-sections}) option. The
+default behaviour (of not listing the sections that are removed) can
+be restored by specifying @samp{--no-print-gc-sections} on the command
+line.
+
+@cindex help
+@cindex usage
+@kindex --help
+@item --help
+Print a summary of the command-line options on the standard output and exit.
+
+@kindex --target-help
+@item --target-help
+Print a summary of all target specific options on the standard output and exit.
+
+@kindex -Map=@var{mapfile}
+@item -Map=@var{mapfile}
+Print a link map to the file @var{mapfile}. See the description of the
+@option{-M} option, above.
+
+@cindex memory usage
+@kindex --no-keep-memory
+@item --no-keep-memory
+@command{ld} normally optimizes for speed over memory usage by caching the
+symbol tables of input files in memory. This option tells @command{ld} to
+instead optimize for memory usage, by rereading the symbol tables as
+necessary. This may be required if @command{ld} runs out of memory space
+while linking a large executable.
+
+@kindex --no-undefined
+@kindex -z defs
+@item --no-undefined
+@itemx -z defs
+Report unresolved symbol references from regular object files. This
+is done even if the linker is creating a non-symbolic shared library.
+The switch @option{--[no-]allow-shlib-undefined} controls the
+behaviour for reporting unresolved references found in shared
+libraries being linked in.
+
+@kindex --allow-multiple-definition
+@kindex -z muldefs
+@item --allow-multiple-definition
+@itemx -z muldefs
+Normally when a symbol is defined multiple times, the linker will
+report a fatal error. These options allow multiple definitions and the
+first definition will be used.
+
+@kindex --allow-shlib-undefined
+@kindex --no-allow-shlib-undefined
+@item --allow-shlib-undefined
+@itemx --no-allow-shlib-undefined
+Allows or disallows undefined symbols in shared libraries.
+This switch is similar to @option{--no-undefined} except that it
+determines the behaviour when the undefined symbols are in a
+shared library rather than a regular object file. It does not affect
+how undefined symbols in regular object files are handled.
+
+The default behaviour is to report errors for any undefined symbols
+referenced in shared libraries if the linker is being used to create
+an executable, but to allow them if the linker is being used to create
+a shared library.
+
+The reasons for allowing undefined symbol references in shared
+libraries specified at link time are that:
+
+@itemize @bullet
+@item
+A shared library specified at link time may not be the same as the one
+that is available at load time, so the symbol might actually be
+resolvable at load time.
+@item
+There are some operating systems, eg BeOS and HPPA, where undefined
+symbols in shared libraries are normal.
+
+The BeOS kernel for example patches shared libraries at load time to
+select whichever function is most appropriate for the current
+architecture. This is used, for example, to dynamically select an
+appropriate memset function.
+@end itemize
+
+@kindex --no-undefined-version
+@item --no-undefined-version
+Normally when a symbol has an undefined version, the linker will ignore
+it. This option disallows symbols with undefined version and a fatal error
+will be issued instead.
+
+@kindex --default-symver
+@item --default-symver
+Create and use a default symbol version (the soname) for unversioned
+exported symbols.
+
+@kindex --default-imported-symver
+@item --default-imported-symver
+Create and use a default symbol version (the soname) for unversioned
+imported symbols.
+
+@kindex --no-warn-mismatch
+@item --no-warn-mismatch
+Normally @command{ld} will give an error if you try to link together input
+files that are mismatched for some reason, perhaps because they have
+been compiled for different processors or for different endiannesses.
+This option tells @command{ld} that it should silently permit such possible
+errors. This option should only be used with care, in cases when you
+have taken some special action that ensures that the linker errors are
+inappropriate.
+
+@kindex --no-warn-search-mismatch
+@item --no-warn-search-mismatch
+Normally @command{ld} will give a warning if it finds an incompatible
+library during a library search. This option silences the warning.
+
+@kindex --no-whole-archive
+@item --no-whole-archive
+Turn off the effect of the @option{--whole-archive} option for subsequent
+archive files.
+
+@cindex output file after errors
+@kindex --noinhibit-exec
+@item --noinhibit-exec
+Retain the executable output file whenever it is still usable.
+Normally, the linker will not produce an output file if it encounters
+errors during the link process; it exits without writing an output file
+when it issues any error whatsoever.
+
+@kindex -nostdlib
+@item -nostdlib
+Only search library directories explicitly specified on the
+command line. Library directories specified in linker scripts
+(including linker scripts specified on the command line) are ignored.
+
+@ifclear SingleFormat
+@kindex --oformat=@var{output-format}
+@item --oformat=@var{output-format}
+@command{ld} may be configured to support more than one kind of object
+file. If your @command{ld} is configured this way, you can use the
+@samp{--oformat} option to specify the binary format for the output
+object file. Even when @command{ld} is configured to support alternative
+object formats, you don't usually need to specify this, as @command{ld}
+should be configured to produce as a default output format the most
+usual format on each machine. @var{output-format} is a text string, the
+name of a particular format supported by the BFD libraries. (You can
+list the available binary formats with @samp{objdump -i}.) The script
+command @code{OUTPUT_FORMAT} can also specify the output format, but
+this option overrides it. @xref{BFD}.
+@end ifclear
+
+@kindex -pie
+@kindex --pic-executable
+@item -pie
+@itemx --pic-executable
+@cindex position independent executables
+Create a position independent executable. This is currently only supported on
+ELF platforms. Position independent executables are similar to shared
+libraries in that they are relocated by the dynamic linker to the virtual
+address the OS chooses for them (which can vary between invocations). Like
+normal dynamically linked executables they can be executed and symbols
+defined in the executable cannot be overridden by shared libraries.
+
+@kindex -qmagic
+@item -qmagic
+This option is ignored for Linux compatibility.
+
+@kindex -Qy
+@item -Qy
+This option is ignored for SVR4 compatibility.
+
+@kindex --relax
+@cindex synthesizing linker
+@cindex relaxing addressing modes
+@cindex --no-relax
+@item --relax
+@itemx --no-relax
+An option with machine dependent effects.
+@ifset GENERIC
+This option is only supported on a few targets.
+@end ifset
+@ifset H8300
+@xref{H8/300,,@command{ld} and the H8/300}.
+@end ifset
+@ifset I960
+@xref{i960,, @command{ld} and the Intel 960 family}.
+@end ifset
+@ifset XTENSA
+@xref{Xtensa,, @command{ld} and Xtensa Processors}.
+@end ifset
+@ifset M68HC11
+@xref{M68HC11/68HC12,,@command{ld} and the 68HC11 and 68HC12}.
+@end ifset
+@ifset POWERPC
+@xref{PowerPC ELF32,,@command{ld} and PowerPC 32-bit ELF Support}.
+@end ifset
+
+On some platforms the @samp{--relax} option performs target specific,
+global optimizations that become possible when the linker resolves
+addressing in the program, such as relaxing address modes,
+synthesizing new instructions, selecting shorter version of current
+instructions, and combinig constant values.
+
+On some platforms these link time global optimizations may make symbolic
+debugging of the resulting executable impossible.
+@ifset GENERIC
+This is known to be the case for the Matsushita MN10200 and MN10300
+family of processors.
+@end ifset
+
+@ifset GENERIC
+On platforms where this is not supported, @samp{--relax} is accepted,
+but ignored.
+@end ifset
+
+On platforms where @samp{--relax} is accepted the option
+@samp{--no-relax} can be used to disable the feature.
+
+@cindex retaining specified symbols
+@cindex stripping all but some symbols
+@cindex symbols, retaining selectively
+@kindex --retain-symbols-file=@var{filename}
+@item --retain-symbols-file=@var{filename}
+Retain @emph{only} the symbols listed in the file @var{filename},
+discarding all others. @var{filename} is simply a flat file, with one
+symbol name per line. This option is especially useful in environments
+@ifset GENERIC
+(such as VxWorks)
+@end ifset
+where a large global symbol table is accumulated gradually, to conserve
+run-time memory.
+
+@samp{--retain-symbols-file} does @emph{not} discard undefined symbols,
+or symbols needed for relocations.
+
+You may only specify @samp{--retain-symbols-file} once in the command
+line. It overrides @samp{-s} and @samp{-S}.
+
+@ifset GENERIC
+@item -rpath=@var{dir}
+@cindex runtime library search path
+@kindex -rpath=@var{dir}
+Add a directory to the runtime library search path. This is used when
+linking an ELF executable with shared objects. All @option{-rpath}
+arguments are concatenated and passed to the runtime linker, which uses
+them to locate shared objects at runtime. The @option{-rpath} option is
+also used when locating shared objects which are needed by shared
+objects explicitly included in the link; see the description of the
+@option{-rpath-link} option. If @option{-rpath} is not used when linking an
+ELF executable, the contents of the environment variable
+@code{LD_RUN_PATH} will be used if it is defined.
+
+The @option{-rpath} option may also be used on SunOS. By default, on
+SunOS, the linker will form a runtime search patch out of all the
+@option{-L} options it is given. If a @option{-rpath} option is used, the
+runtime search path will be formed exclusively using the @option{-rpath}
+options, ignoring the @option{-L} options. This can be useful when using
+gcc, which adds many @option{-L} options which may be on NFS mounted
+file systems.
+
+For compatibility with other ELF linkers, if the @option{-R} option is
+followed by a directory name, rather than a file name, it is treated as
+the @option{-rpath} option.
+@end ifset
+
+@ifset GENERIC
+@cindex link-time runtime library search path
+@kindex -rpath-link=@var{dir}
+@item -rpath-link=@var{dir}
+When using ELF or SunOS, one shared library may require another. This
+happens when an @code{ld -shared} link includes a shared library as one
+of the input files.
+
+When the linker encounters such a dependency when doing a non-shared,
+non-relocatable link, it will automatically try to locate the required
+shared library and include it in the link, if it is not included
+explicitly. In such a case, the @option{-rpath-link} option
+specifies the first set of directories to search. The
+@option{-rpath-link} option may specify a sequence of directory names
+either by specifying a list of names separated by colons, or by
+appearing multiple times.
+
+This option should be used with caution as it overrides the search path
+that may have been hard compiled into a shared library. In such a case it
+is possible to use unintentionally a different search path than the
+runtime linker would do.
+
+The linker uses the following search paths to locate required shared
+libraries:
+@enumerate
+@item
+Any directories specified by @option{-rpath-link} options.
+@item
+Any directories specified by @option{-rpath} options. The difference
+between @option{-rpath} and @option{-rpath-link} is that directories
+specified by @option{-rpath} options are included in the executable and
+used at runtime, whereas the @option{-rpath-link} option is only effective
+at link time. Searching @option{-rpath} in this way is only supported
+by native linkers and cross linkers which have been configured with
+the @option{--with-sysroot} option.
+@item
+On an ELF system, for native linkers, if the @option{-rpath} and
+@option{-rpath-link} options were not used, search the contents of the
+environment variable @code{LD_RUN_PATH}.
+@item
+On SunOS, if the @option{-rpath} option was not used, search any
+directories specified using @option{-L} options.
+@item
+For a native linker, the search the contents of the environment
+variable @code{LD_LIBRARY_PATH}.
+@item
+For a native ELF linker, the directories in @code{DT_RUNPATH} or
+@code{DT_RPATH} of a shared library are searched for shared
+libraries needed by it. The @code{DT_RPATH} entries are ignored if
+@code{DT_RUNPATH} entries exist.
+@item
+The default directories, normally @file{/lib} and @file{/usr/lib}.
+@item
+For a native linker on an ELF system, if the file @file{/etc/ld.so.conf}
+exists, the list of directories found in that file.
+@end enumerate
+
+If the required shared library is not found, the linker will issue a
+warning and continue with the link.
+@end ifset
+
+@kindex -shared
+@kindex -Bshareable
+@item -shared
+@itemx -Bshareable
+@cindex shared libraries
+Create a shared library. This is currently only supported on ELF, XCOFF
+and SunOS platforms. On SunOS, the linker will automatically create a
+shared library if the @option{-e} option is not used and there are
+undefined symbols in the link.
+
+@kindex --sort-common
+@item --sort-common
+@itemx --sort-common=ascending
+@itemx --sort-common=descending
+This option tells @command{ld} to sort the common symbols by alignment in
+ascending or descending order when it places them in the appropriate output
+sections. The symbol alignments considered are sixteen-byte or larger,
+eight-byte, four-byte, two-byte, and one-byte. This is to prevent gaps
+between symbols due to alignment constraints. If no sorting order is
+specified, then descending order is assumed.
+
+@kindex --sort-section=name
+@item --sort-section=name
+This option will apply @code{SORT_BY_NAME} to all wildcard section
+patterns in the linker script.
+
+@kindex --sort-section=alignment
+@item --sort-section=alignment
+This option will apply @code{SORT_BY_ALIGNMENT} to all wildcard section
+patterns in the linker script.
+
+@kindex --split-by-file
+@item --split-by-file[=@var{size}]
+Similar to @option{--split-by-reloc} but creates a new output section for
+each input file when @var{size} is reached. @var{size} defaults to a
+size of 1 if not given.
+
+@kindex --split-by-reloc
+@item --split-by-reloc[=@var{count}]
+Tries to creates extra sections in the output file so that no single
+output section in the file contains more than @var{count} relocations.
+This is useful when generating huge relocatable files for downloading into
+certain real time kernels with the COFF object file format; since COFF
+cannot represent more than 65535 relocations in a single section. Note
+that this will fail to work with object file formats which do not
+support arbitrary sections. The linker will not split up individual
+input sections for redistribution, so if a single input section contains
+more than @var{count} relocations one output section will contain that
+many relocations. @var{count} defaults to a value of 32768.
+
+@kindex --stats
+@item --stats
+Compute and display statistics about the operation of the linker, such
+as execution time and memory usage.
+
+@kindex --sysroot=@var{directory}
+@item --sysroot=@var{directory}
+Use @var{directory} as the location of the sysroot, overriding the
+configure-time default. This option is only supported by linkers
+that were configured using @option{--with-sysroot}.
+
+@kindex --traditional-format
+@cindex traditional format
+@item --traditional-format
+For some targets, the output of @command{ld} is different in some ways from
+the output of some existing linker. This switch requests @command{ld} to
+use the traditional format instead.
+
+@cindex dbx
+For example, on SunOS, @command{ld} combines duplicate entries in the
+symbol string table. This can reduce the size of an output file with
+full debugging information by over 30 percent. Unfortunately, the SunOS
+@code{dbx} program can not read the resulting program (@code{gdb} has no
+trouble). The @samp{--traditional-format} switch tells @command{ld} to not
+combine duplicate entries.
+
+@kindex --section-start=@var{sectionname}=@var{org}
+@item --section-start=@var{sectionname}=@var{org}
+Locate a section in the output file at the absolute
+address given by @var{org}. You may use this option as many
+times as necessary to locate multiple sections in the command
+line.
+@var{org} must be a single hexadecimal integer;
+for compatibility with other linkers, you may omit the leading
+@samp{0x} usually associated with hexadecimal values. @emph{Note:} there
+should be no white space between @var{sectionname}, the equals
+sign (``@key{=}''), and @var{org}.
+
+@kindex -Tbss=@var{org}
+@kindex -Tdata=@var{org}
+@kindex -Ttext=@var{org}
+@cindex segment origins, cmd line
+@item -Tbss=@var{org}
+@itemx -Tdata=@var{org}
+@itemx -Ttext=@var{org}
+Same as @option{--section-start}, with @code{.bss}, @code{.data} or
+@code{.text} as the @var{sectionname}.
+
+@kindex -Ttext-segment=@var{org}
+@item -Ttext-segment=@var{org}
+@cindex text segment origin, cmd line
+When creating an ELF executable or shared object, it will set the address
+of the first byte of the text segment.
+
+@kindex --unresolved-symbols
+@item --unresolved-symbols=@var{method}
+Determine how to handle unresolved symbols. There are four possible
+values for @samp{method}:
+
+@table @samp
+@item ignore-all
+Do not report any unresolved symbols.
+
+@item report-all
+Report all unresolved symbols. This is the default.
+
+@item ignore-in-object-files
+Report unresolved symbols that are contained in shared libraries, but
+ignore them if they come from regular object files.
+
+@item ignore-in-shared-libs
+Report unresolved symbols that come from regular object files, but
+ignore them if they come from shared libraries. This can be useful
+when creating a dynamic binary and it is known that all the shared
+libraries that it should be referencing are included on the linker's
+command line.
+@end table
+
+The behaviour for shared libraries on their own can also be controlled
+by the @option{--[no-]allow-shlib-undefined} option.
+
+Normally the linker will generate an error message for each reported
+unresolved symbol but the option @option{--warn-unresolved-symbols}
+can change this to a warning.
+
+@kindex --verbose
+@cindex verbose
+@item --dll-verbose
+@itemx --verbose
+Display the version number for @command{ld} and list the linker emulations
+supported. Display which input files can and cannot be opened. Display
+the linker script being used by the linker.
+
+@kindex --version-script=@var{version-scriptfile}
+@cindex version script, symbol versions
+@item --version-script=@var{version-scriptfile}
+Specify the name of a version script to the linker. This is typically
+used when creating shared libraries to specify additional information
+about the version hierarchy for the library being created. This option
+is only fully supported on ELF platforms which support shared libraries;
+see @ref{VERSION}. It is partially supported on PE platforms, which can
+use version scripts to filter symbol visibility in auto-export mode: any
+symbols marked @samp{local} in the version script will not be exported.
+@xref{WIN32}.
+
+@kindex --warn-common
+@cindex warnings, on combining symbols
+@cindex combining symbols, warnings on
+@item --warn-common
+Warn when a common symbol is combined with another common symbol or with
+a symbol definition. Unix linkers allow this somewhat sloppy practise,
+but linkers on some other operating systems do not. This option allows
+you to find potential problems from combining global symbols.
+Unfortunately, some C libraries use this practise, so you may get some
+warnings about symbols in the libraries as well as in your programs.
+
+There are three kinds of global symbols, illustrated here by C examples:
+
+@table @samp
+@item int i = 1;
+A definition, which goes in the initialized data section of the output
+file.
+
+@item extern int i;
+An undefined reference, which does not allocate space.
+There must be either a definition or a common symbol for the
+variable somewhere.
+
+@item int i;
+A common symbol. If there are only (one or more) common symbols for a
+variable, it goes in the uninitialized data area of the output file.
+The linker merges multiple common symbols for the same variable into a
+single symbol. If they are of different sizes, it picks the largest
+size. The linker turns a common symbol into a declaration, if there is
+a definition of the same variable.
+@end table
+
+The @samp{--warn-common} option can produce five kinds of warnings.
+Each warning consists of a pair of lines: the first describes the symbol
+just encountered, and the second describes the previous symbol
+encountered with the same name. One or both of the two symbols will be
+a common symbol.
+
+@enumerate
+@item
+Turning a common symbol into a reference, because there is already a
+definition for the symbol.
+@smallexample
+@var{file}(@var{section}): warning: common of `@var{symbol}'
+ overridden by definition
+@var{file}(@var{section}): warning: defined here
+@end smallexample
+
+@item
+Turning a common symbol into a reference, because a later definition for
+the symbol is encountered. This is the same as the previous case,
+except that the symbols are encountered in a different order.
+@smallexample
+@var{file}(@var{section}): warning: definition of `@var{symbol}'
+ overriding common
+@var{file}(@var{section}): warning: common is here
+@end smallexample
+
+@item
+Merging a common symbol with a previous same-sized common symbol.
+@smallexample
+@var{file}(@var{section}): warning: multiple common
+ of `@var{symbol}'
+@var{file}(@var{section}): warning: previous common is here
+@end smallexample
+
+@item
+Merging a common symbol with a previous larger common symbol.
+@smallexample
+@var{file}(@var{section}): warning: common of `@var{symbol}'
+ overridden by larger common
+@var{file}(@var{section}): warning: larger common is here
+@end smallexample
+
+@item
+Merging a common symbol with a previous smaller common symbol. This is
+the same as the previous case, except that the symbols are
+encountered in a different order.
+@smallexample
+@var{file}(@var{section}): warning: common of `@var{symbol}'
+ overriding smaller common
+@var{file}(@var{section}): warning: smaller common is here
+@end smallexample
+@end enumerate
+
+@kindex --warn-constructors
+@item --warn-constructors
+Warn if any global constructors are used. This is only useful for a few
+object file formats. For formats like COFF or ELF, the linker can not
+detect the use of global constructors.
+
+@kindex --warn-multiple-gp
+@item --warn-multiple-gp
+Warn if multiple global pointer values are required in the output file.
+This is only meaningful for certain processors, such as the Alpha.
+Specifically, some processors put large-valued constants in a special
+section. A special register (the global pointer) points into the middle
+of this section, so that constants can be loaded efficiently via a
+base-register relative addressing mode. Since the offset in
+base-register relative mode is fixed and relatively small (e.g., 16
+bits), this limits the maximum size of the constant pool. Thus, in
+large programs, it is often necessary to use multiple global pointer
+values in order to be able to address all possible constants. This
+option causes a warning to be issued whenever this case occurs.
+
+@kindex --warn-once
+@cindex warnings, on undefined symbols
+@cindex undefined symbols, warnings on
+@item --warn-once
+Only warn once for each undefined symbol, rather than once per module
+which refers to it.
+
+@kindex --warn-section-align
+@cindex warnings, on section alignment
+@cindex section alignment, warnings on
+@item --warn-section-align
+Warn if the address of an output section is changed because of
+alignment. Typically, the alignment will be set by an input section.
+The address will only be changed if it not explicitly specified; that
+is, if the @code{SECTIONS} command does not specify a start address for
+the section (@pxref{SECTIONS}).
+
+@kindex --warn-shared-textrel
+@item --warn-shared-textrel
+Warn if the linker adds a DT_TEXTREL to a shared object.
+
+@kindex --warn-alternate-em
+@item --warn-alternate-em
+Warn if an object has alternate ELF machine code.
+
+@kindex --warn-unresolved-symbols
+@item --warn-unresolved-symbols
+If the linker is going to report an unresolved symbol (see the option
+@option{--unresolved-symbols}) it will normally generate an error.
+This option makes it generate a warning instead.
+
+@kindex --error-unresolved-symbols
+@item --error-unresolved-symbols
+This restores the linker's default behaviour of generating errors when
+it is reporting unresolved symbols.
+
+@kindex --whole-archive
+@cindex including an entire archive
+@item --whole-archive
+For each archive mentioned on the command line after the
+@option{--whole-archive} option, include every object file in the archive
+in the link, rather than searching the archive for the required object
+files. This is normally used to turn an archive file into a shared
+library, forcing every object to be included in the resulting shared
+library. This option may be used more than once.
+
+Two notes when using this option from gcc: First, gcc doesn't know
+about this option, so you have to use @option{-Wl,-whole-archive}.
+Second, don't forget to use @option{-Wl,-no-whole-archive} after your
+list of archives, because gcc will add its own list of archives to
+your link and you may not want this flag to affect those as well.
+
+@kindex --wrap=@var{symbol}
+@item --wrap=@var{symbol}
+Use a wrapper function for @var{symbol}. Any undefined reference to
+@var{symbol} will be resolved to @code{__wrap_@var{symbol}}. Any
+undefined reference to @code{__real_@var{symbol}} will be resolved to
+@var{symbol}.
+
+This can be used to provide a wrapper for a system function. The
+wrapper function should be called @code{__wrap_@var{symbol}}. If it
+wishes to call the system function, it should call
+@code{__real_@var{symbol}}.
+
+Here is a trivial example:
+
+@smallexample
+void *
+__wrap_malloc (size_t c)
+@{
+ printf ("malloc called with %zu\n", c);
+ return __real_malloc (c);
+@}
+@end smallexample
+
+If you link other code with this file using @option{--wrap malloc}, then
+all calls to @code{malloc} will call the function @code{__wrap_malloc}
+instead. The call to @code{__real_malloc} in @code{__wrap_malloc} will
+call the real @code{malloc} function.
+
+You may wish to provide a @code{__real_malloc} function as well, so that
+links without the @option{--wrap} option will succeed. If you do this,
+you should not put the definition of @code{__real_malloc} in the same
+file as @code{__wrap_malloc}; if you do, the assembler may resolve the
+call before the linker has a chance to wrap it to @code{malloc}.
+
+@kindex --eh-frame-hdr
+@item --eh-frame-hdr
+Request creation of @code{.eh_frame_hdr} section and ELF
+@code{PT_GNU_EH_FRAME} segment header.
+
+@kindex --enable-new-dtags
+@kindex --disable-new-dtags
+@item --enable-new-dtags
+@itemx --disable-new-dtags
+This linker can create the new dynamic tags in ELF. But the older ELF
+systems may not understand them. If you specify
+@option{--enable-new-dtags}, the dynamic tags will be created as needed.
+If you specify @option{--disable-new-dtags}, no new dynamic tags will be
+created. By default, the new dynamic tags are not created. Note that
+those options are only available for ELF systems.
+
+@kindex --hash-size=@var{number}
+@item --hash-size=@var{number}
+Set the default size of the linker's hash tables to a prime number
+close to @var{number}. Increasing this value can reduce the length of
+time it takes the linker to perform its tasks, at the expense of
+increasing the linker's memory requirements. Similarly reducing this
+value can reduce the memory requirements at the expense of speed.
+
+@kindex --hash-style=@var{style}
+@item --hash-style=@var{style}
+Set the type of linker's hash table(s). @var{style} can be either
+@code{sysv} for classic ELF @code{.hash} section, @code{gnu} for
+new style GNU @code{.gnu.hash} section or @code{both} for both
+the classic ELF @code{.hash} and new style GNU @code{.gnu.hash}
+hash tables. The default is @code{sysv}.
+
+@kindex --reduce-memory-overheads
+@item --reduce-memory-overheads
+This option reduces memory requirements at ld runtime, at the expense of
+linking speed. This was introduced to select the old O(n^2) algorithm
+for link map file generation, rather than the new O(n) algorithm which uses
+about 40% more memory for symbol storage.
+
+Another effect of the switch is to set the default hash table size to
+1021, which again saves memory at the cost of lengthening the linker's
+run time. This is not done however if the @option{--hash-size} switch
+has been used.
+
+The @option{--reduce-memory-overheads} switch may be also be used to
+enable other tradeoffs in future versions of the linker.
+
+@kindex --build-id
+@kindex --build-id=@var{style}
+@item --build-id
+@itemx --build-id=@var{style}
+Request creation of @code{.note.gnu.build-id} ELF note section.
+The contents of the note are unique bits identifying this linked
+file. @var{style} can be @code{uuid} to use 128 random bits,
+@code{sha1} to use a 160-bit @sc{SHA1} hash on the normative
+parts of the output contents, @code{md5} to use a 128-bit
+@sc{MD5} hash on the normative parts of the output contents, or
+@code{0x@var{hexstring}} to use a chosen bit string specified as
+an even number of hexadecimal digits (@code{-} and @code{:}
+characters between digit pairs are ignored). If @var{style} is
+omitted, @code{sha1} is used.
+
+The @code{md5} and @code{sha1} styles produces an identifier
+that is always the same in an identical output file, but will be
+unique among all nonidentical output files. It is not intended
+to be compared as a checksum for the file's contents. A linked
+file may be changed later by other tools, but the build ID bit
+string identifying the original linked file does not change.
+
+Passing @code{none} for @var{style} disables the setting from any
+@code{--build-id} options earlier on the command line.
+@end table
+
+@c man end
+
+@subsection Options Specific to i386 PE Targets
+
+@c man begin OPTIONS
+
+The i386 PE linker supports the @option{-shared} option, which causes
+the output to be a dynamically linked library (DLL) instead of a
+normal executable. You should name the output @code{*.dll} when you
+use this option. In addition, the linker fully supports the standard
+@code{*.def} files, which may be specified on the linker command line
+like an object file (in fact, it should precede archives it exports
+symbols from, to ensure that they get linked in, just like a normal
+object file).
+
+In addition to the options common to all targets, the i386 PE linker
+support additional command line options that are specific to the i386
+PE target. Options that take values may be separated from their
+values by either a space or an equals sign.
+
+@table @gcctabopt
+
+@kindex --add-stdcall-alias
+@item --add-stdcall-alias
+If given, symbols with a stdcall suffix (@@@var{nn}) will be exported
+as-is and also with the suffix stripped.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@kindex --base-file
+@item --base-file @var{file}
+Use @var{file} as the name of a file in which to save the base
+addresses of all the relocations needed for generating DLLs with
+@file{dlltool}.
+[This is an i386 PE specific option]
+
+@kindex --dll
+@item --dll
+Create a DLL instead of a regular executable. You may also use
+@option{-shared} or specify a @code{LIBRARY} in a given @code{.def}
+file.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@kindex --enable-long-section-names
+@kindex --disable-long-section-names
+@item --enable-long-section-names
+@itemx --disable-long-section-names
+The PE variants of the Coff object format add an extension that permits
+the use of section names longer than eight characters, the normal limit
+for Coff. By default, these names are only allowed in object files, as
+fully-linked executable images do not carry the Coff string table required
+to support the longer names. As a GNU extension, it is possible to
+allow their use in executable images as well, or to (probably pointlessly!)
+disallow it in object files, by using these two options. Executable images
+generated with these long section names are slightly non-standard, carrying
+as they do a string table, and may generate confusing output when examined
+with non-GNU PE-aware tools, such as file viewers and dumpers. However,
+GDB relies on the use of PE long section names to find Dwarf-2 debug
+information sections in an executable image at runtime, and so if neither
+option is specified on the command-line, @command{ld} will enable long
+section names, overriding the default and technically correct behaviour,
+when it finds the presence of debug information while linking an executable
+image and not stripping symbols.
+[This option is valid for all PE targeted ports of the linker]
+
+@kindex --enable-stdcall-fixup
+@kindex --disable-stdcall-fixup
+@item --enable-stdcall-fixup
+@itemx --disable-stdcall-fixup
+If the link finds a symbol that it cannot resolve, it will attempt to
+do ``fuzzy linking'' by looking for another defined symbol that differs
+only in the format of the symbol name (cdecl vs stdcall) and will
+resolve that symbol by linking to the match. For example, the
+undefined symbol @code{_foo} might be linked to the function
+@code{_foo@@12}, or the undefined symbol @code{_bar@@16} might be linked
+to the function @code{_bar}. When the linker does this, it prints a
+warning, since it normally should have failed to link, but sometimes
+import libraries generated from third-party dlls may need this feature
+to be usable. If you specify @option{--enable-stdcall-fixup}, this
+feature is fully enabled and warnings are not printed. If you specify
+@option{--disable-stdcall-fixup}, this feature is disabled and such
+mismatches are considered to be errors.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@kindex --leading-underscore
+@kindex --no-leading-underscore
+@item --leading-underscore
+@itemx --no-leading-underscore
+For most targets default symbol-prefix is an underscore and is defined
+in target's description. By this option it is possible to
+disable/enable the default underscore symbol-prefix.
+
+@cindex DLLs, creating
+@kindex --export-all-symbols
+@item --export-all-symbols
+If given, all global symbols in the objects used to build a DLL will
+be exported by the DLL. Note that this is the default if there
+otherwise wouldn't be any exported symbols. When symbols are
+explicitly exported via DEF files or implicitly exported via function
+attributes, the default is to not export anything else unless this
+option is given. Note that the symbols @code{DllMain@@12},
+@code{DllEntryPoint@@0}, @code{DllMainCRTStartup@@12}, and
+@code{impure_ptr} will not be automatically
+exported. Also, symbols imported from other DLLs will not be
+re-exported, nor will symbols specifying the DLL's internal layout
+such as those beginning with @code{_head_} or ending with
+@code{_iname}. In addition, no symbols from @code{libgcc},
+@code{libstd++}, @code{libmingw32}, or @code{crtX.o} will be exported.
+Symbols whose names begin with @code{__rtti_} or @code{__builtin_} will
+not be exported, to help with C++ DLLs. Finally, there is an
+extensive list of cygwin-private symbols that are not exported
+(obviously, this applies on when building DLLs for cygwin targets).
+These cygwin-excludes are: @code{_cygwin_dll_entry@@12},
+@code{_cygwin_crt0_common@@8}, @code{_cygwin_noncygwin_dll_entry@@12},
+@code{_fmode}, @code{_impure_ptr}, @code{cygwin_attach_dll},
+@code{cygwin_premain0}, @code{cygwin_premain1}, @code{cygwin_premain2},
+@code{cygwin_premain3}, and @code{environ}.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@kindex --exclude-symbols
+@item --exclude-symbols @var{symbol},@var{symbol},...
+Specifies a list of symbols which should not be automatically
+exported. The symbol names may be delimited by commas or colons.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@kindex --exclude-all-symbols
+@item --exclude-all-symbols
+Specifies no symbols should be automatically exported.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@kindex --file-alignment
+@item --file-alignment
+Specify the file alignment. Sections in the file will always begin at
+file offsets which are multiples of this number. This defaults to
+512.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@cindex heap size
+@kindex --heap
+@item --heap @var{reserve}
+@itemx --heap @var{reserve},@var{commit}
+Specify the number of bytes of memory to reserve (and optionally commit)
+to be used as heap for this program. The default is 1Mb reserved, 4K
+committed.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@cindex image base
+@kindex --image-base
+@item --image-base @var{value}
+Use @var{value} as the base address of your program or dll. This is
+the lowest memory location that will be used when your program or dll
+is loaded. To reduce the need to relocate and improve performance of
+your dlls, each should have a unique base address and not overlap any
+other dlls. The default is 0x400000 for executables, and 0x10000000
+for dlls.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@kindex --kill-at
+@item --kill-at
+If given, the stdcall suffixes (@@@var{nn}) will be stripped from
+symbols before they are exported.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@kindex --large-address-aware
+@item --large-address-aware
+If given, the appropriate bit in the ``Characteristics'' field of the COFF
+header is set to indicate that this executable supports virtual addresses
+greater than 2 gigabytes. This should be used in conjunction with the /3GB
+or /USERVA=@var{value} megabytes switch in the ``[operating systems]''
+section of the BOOT.INI. Otherwise, this bit has no effect.
+[This option is specific to PE targeted ports of the linker]
+
+@kindex --major-image-version
+@item --major-image-version @var{value}
+Sets the major number of the ``image version''. Defaults to 1.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@kindex --major-os-version
+@item --major-os-version @var{value}
+Sets the major number of the ``os version''. Defaults to 4.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@kindex --major-subsystem-version
+@item --major-subsystem-version @var{value}
+Sets the major number of the ``subsystem version''. Defaults to 4.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@kindex --minor-image-version
+@item --minor-image-version @var{value}
+Sets the minor number of the ``image version''. Defaults to 0.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@kindex --minor-os-version
+@item --minor-os-version @var{value}
+Sets the minor number of the ``os version''. Defaults to 0.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@kindex --minor-subsystem-version
+@item --minor-subsystem-version @var{value}
+Sets the minor number of the ``subsystem version''. Defaults to 0.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@cindex DEF files, creating
+@cindex DLLs, creating
+@kindex --output-def
+@item --output-def @var{file}
+The linker will create the file @var{file} which will contain a DEF
+file corresponding to the DLL the linker is generating. This DEF file
+(which should be called @code{*.def}) may be used to create an import
+library with @code{dlltool} or may be used as a reference to
+automatically or implicitly exported symbols.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@cindex DLLs, creating
+@kindex --out-implib
+@item --out-implib @var{file}
+The linker will create the file @var{file} which will contain an
+import lib corresponding to the DLL the linker is generating. This
+import lib (which should be called @code{*.dll.a} or @code{*.a}
+may be used to link clients against the generated DLL; this behaviour
+makes it possible to skip a separate @code{dlltool} import library
+creation step.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@kindex --enable-auto-image-base
+@item --enable-auto-image-base
+Automatically choose the image base for DLLs, unless one is specified
+using the @code{--image-base} argument. By using a hash generated
+from the dllname to create unique image bases for each DLL, in-memory
+collisions and relocations which can delay program execution are
+avoided.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@kindex --disable-auto-image-base
+@item --disable-auto-image-base
+Do not automatically generate a unique image base. If there is no
+user-specified image base (@code{--image-base}) then use the platform
+default.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@cindex DLLs, linking to
+@kindex --dll-search-prefix
+@item --dll-search-prefix @var{string}
+When linking dynamically to a dll without an import library,
+search for @code{<string><basename>.dll} in preference to
+@code{lib<basename>.dll}. This behaviour allows easy distinction
+between DLLs built for the various "subplatforms": native, cygwin,
+uwin, pw, etc. For instance, cygwin DLLs typically use
+@code{--dll-search-prefix=cyg}.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@kindex --enable-auto-import
+@item --enable-auto-import
+Do sophisticated linking of @code{_symbol} to @code{__imp__symbol} for
+DATA imports from DLLs, and create the necessary thunking symbols when
+building the import libraries with those DATA exports. Note: Use of the
+'auto-import' extension will cause the text section of the image file
+to be made writable. This does not conform to the PE-COFF format
+specification published by Microsoft.
+
+Note - use of the 'auto-import' extension will also cause read only
+data which would normally be placed into the .rdata section to be
+placed into the .data section instead. This is in order to work
+around a problem with consts that is described here:
+http://www.cygwin.com/ml/cygwin/2004-09/msg01101.html
+
+Using 'auto-import' generally will 'just work' -- but sometimes you may
+see this message:
+
+"variable '<var>' can't be auto-imported. Please read the
+documentation for ld's @code{--enable-auto-import} for details."
+
+This message occurs when some (sub)expression accesses an address
+ultimately given by the sum of two constants (Win32 import tables only
+allow one). Instances where this may occur include accesses to member
+fields of struct variables imported from a DLL, as well as using a
+constant index into an array variable imported from a DLL. Any
+multiword variable (arrays, structs, long long, etc) may trigger
+this error condition. However, regardless of the exact data type
+of the offending exported variable, ld will always detect it, issue
+the warning, and exit.
+
+There are several ways to address this difficulty, regardless of the
+data type of the exported variable:
+
+One way is to use --enable-runtime-pseudo-reloc switch. This leaves the task
+of adjusting references in your client code for runtime environment, so
+this method works only when runtime environment supports this feature.
+
+A second solution is to force one of the 'constants' to be a variable --
+that is, unknown and un-optimizable at compile time. For arrays,
+there are two possibilities: a) make the indexee (the array's address)
+a variable, or b) make the 'constant' index a variable. Thus:
+
+@example
+extern type extern_array[];
+extern_array[1] -->
+ @{ volatile type *t=extern_array; t[1] @}
+@end example
+
+or
+
+@example
+extern type extern_array[];
+extern_array[1] -->
+ @{ volatile int t=1; extern_array[t] @}
+@end example
+
+For structs (and most other multiword data types) the only option
+is to make the struct itself (or the long long, or the ...) variable:
+
+@example
+extern struct s extern_struct;
+extern_struct.field -->
+ @{ volatile struct s *t=&extern_struct; t->field @}
+@end example
+
+or
+
+@example
+extern long long extern_ll;
+extern_ll -->
+ @{ volatile long long * local_ll=&extern_ll; *local_ll @}
+@end example
+
+A third method of dealing with this difficulty is to abandon
+'auto-import' for the offending symbol and mark it with
+@code{__declspec(dllimport)}. However, in practise that
+requires using compile-time #defines to indicate whether you are
+building a DLL, building client code that will link to the DLL, or
+merely building/linking to a static library. In making the choice
+between the various methods of resolving the 'direct address with
+constant offset' problem, you should consider typical real-world usage:
+
+Original:
+@example
+--foo.h
+extern int arr[];
+--foo.c
+#include "foo.h"
+void main(int argc, char **argv)@{
+ printf("%d\n",arr[1]);
+@}
+@end example
+
+Solution 1:
+@example
+--foo.h
+extern int arr[];
+--foo.c
+#include "foo.h"
+void main(int argc, char **argv)@{
+ /* This workaround is for win32 and cygwin; do not "optimize" */
+ volatile int *parr = arr;
+ printf("%d\n",parr[1]);
+@}
+@end example
+
+Solution 2:
+@example
+--foo.h
+/* Note: auto-export is assumed (no __declspec(dllexport)) */
+#if (defined(_WIN32) || defined(__CYGWIN__)) && \
+ !(defined(FOO_BUILD_DLL) || defined(FOO_STATIC))
+#define FOO_IMPORT __declspec(dllimport)
+#else
+#define FOO_IMPORT
+#endif
+extern FOO_IMPORT int arr[];
+--foo.c
+#include "foo.h"
+void main(int argc, char **argv)@{
+ printf("%d\n",arr[1]);
+@}
+@end example
+
+A fourth way to avoid this problem is to re-code your
+library to use a functional interface rather than a data interface
+for the offending variables (e.g. set_foo() and get_foo() accessor
+functions).
+[This option is specific to the i386 PE targeted port of the linker]
+
+@kindex --disable-auto-import
+@item --disable-auto-import
+Do not attempt to do sophisticated linking of @code{_symbol} to
+@code{__imp__symbol} for DATA imports from DLLs.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@kindex --enable-runtime-pseudo-reloc
+@item --enable-runtime-pseudo-reloc
+If your code contains expressions described in --enable-auto-import section,
+that is, DATA imports from DLL with non-zero offset, this switch will create
+a vector of 'runtime pseudo relocations' which can be used by runtime
+environment to adjust references to such data in your client code.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@kindex --disable-runtime-pseudo-reloc
+@item --disable-runtime-pseudo-reloc
+Do not create pseudo relocations for non-zero offset DATA imports from
+DLLs. This is the default.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@kindex --enable-extra-pe-debug
+@item --enable-extra-pe-debug
+Show additional debug info related to auto-import symbol thunking.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@kindex --section-alignment
+@item --section-alignment
+Sets the section alignment. Sections in memory will always begin at
+addresses which are a multiple of this number. Defaults to 0x1000.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@cindex stack size
+@kindex --stack
+@item --stack @var{reserve}
+@itemx --stack @var{reserve},@var{commit}
+Specify the number of bytes of memory to reserve (and optionally commit)
+to be used as stack for this program. The default is 2Mb reserved, 4K
+committed.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@kindex --subsystem
+@item --subsystem @var{which}
+@itemx --subsystem @var{which}:@var{major}
+@itemx --subsystem @var{which}:@var{major}.@var{minor}
+Specifies the subsystem under which your program will execute. The
+legal values for @var{which} are @code{native}, @code{windows},
+@code{console}, @code{posix}, and @code{xbox}. You may optionally set
+the subsystem version also. Numeric values are also accepted for
+@var{which}.
+[This option is specific to the i386 PE targeted port of the linker]
+
+The following options set flags in the @code{DllCharacteristics} field
+of the PE file header:
+[These options are specific to PE targeted ports of the linker]
+
+@kindex --dynamicbase
+@item --dynamicbase
+The image base address may be relocated using address space layout
+randomization (ASLR). This feature was introduced with MS Windows
+Vista for i386 PE targets.
+
+@kindex --forceinteg
+@item --forceinteg
+Code integrity checks are enforced.
+
+@kindex --nxcompat
+@item --nxcompat
+The image is compatible with the Data Execution Prevention.
+This feature was introduced with MS Windows XP SP2 for i386 PE targets.
+
+@kindex --no-isolation
+@item --no-isolation
+Although the image understands isolation, do not isolate the image.
+
+@kindex --no-seh
+@item --no-seh
+The image does not use SEH. No SE handler may be called from
+this image.
+
+@kindex --no-bind
+@item --no-bind
+Do not bind this image.
+
+@kindex --wdmdriver
+@item --wdmdriver
+The driver uses the MS Windows Driver Model.
+
+@kindex --tsaware
+@item --tsaware
+The image is Terminal Server aware.
+
+@end table
+
+@c man end
+
+@ifset M68HC11
+@subsection Options specific to Motorola 68HC11 and 68HC12 targets
+
+@c man begin OPTIONS
+
+The 68HC11 and 68HC12 linkers support specific options to control the
+memory bank switching mapping and trampoline code generation.
+
+@table @gcctabopt
+
+@kindex --no-trampoline
+@item --no-trampoline
+This option disables the generation of trampoline. By default a trampoline
+is generated for each far function which is called using a @code{jsr}
+instruction (this happens when a pointer to a far function is taken).
+
+@kindex --bank-window
+@item --bank-window @var{name}
+This option indicates to the linker the name of the memory region in
+the @samp{MEMORY} specification that describes the memory bank window.
+The definition of such region is then used by the linker to compute
+paging and addresses within the memory window.
+
+@end table
+
+@c man end
+@end ifset
+
+@ifset M68K
+@subsection Options specific to Motorola 68K target
+
+@c man begin OPTIONS
+
+The following options are supported to control handling of GOT generation
+when linking for 68K targets.
+
+@table @gcctabopt
+
+@kindex --got
+@item --got=@var{type}
+This option tells the linker which GOT generation scheme to use.
+@var{type} should be one of @samp{single}, @samp{negative},
+@samp{multigot} or @samp{target}. For more information refer to the
+Info entry for @file{ld}.
+
+@end table
+
+@c man end
+@end ifset
+
+@ifset UsesEnvVars
+@node Environment
+@section Environment Variables
+
+@c man begin ENVIRONMENT
+
+You can change the behaviour of @command{ld} with the environment variables
+@ifclear SingleFormat
+@code{GNUTARGET},
+@end ifclear
+@code{LDEMULATION} and @code{COLLECT_NO_DEMANGLE}.
+
+@ifclear SingleFormat
+@kindex GNUTARGET
+@cindex default input format
+@code{GNUTARGET} determines the input-file object format if you don't
+use @samp{-b} (or its synonym @samp{--format}). Its value should be one
+of the BFD names for an input format (@pxref{BFD}). If there is no
+@code{GNUTARGET} in the environment, @command{ld} uses the natural format
+of the target. If @code{GNUTARGET} is set to @code{default} then BFD
+attempts to discover the input format by examining binary input files;
+this method often succeeds, but there are potential ambiguities, since
+there is no method of ensuring that the magic number used to specify
+object-file formats is unique. However, the configuration procedure for
+BFD on each system places the conventional format for that system first
+in the search-list, so ambiguities are resolved in favor of convention.
+@end ifclear
+
+@kindex LDEMULATION
+@cindex default emulation
+@cindex emulation, default
+@code{LDEMULATION} determines the default emulation if you don't use the
+@samp{-m} option. The emulation can affect various aspects of linker
+behaviour, particularly the default linker script. You can list the
+available emulations with the @samp{--verbose} or @samp{-V} options. If
+the @samp{-m} option is not used, and the @code{LDEMULATION} environment
+variable is not defined, the default emulation depends upon how the
+linker was configured.
+
+@kindex COLLECT_NO_DEMANGLE
+@cindex demangling, default
+Normally, the linker will default to demangling symbols. However, if
+@code{COLLECT_NO_DEMANGLE} is set in the environment, then it will
+default to not demangling symbols. This environment variable is used in
+a similar fashion by the @code{gcc} linker wrapper program. The default
+may be overridden by the @samp{--demangle} and @samp{--no-demangle}
+options.
+
+@c man end
+@end ifset
+
+@node Scripts
+@chapter Linker Scripts
+
+@cindex scripts
+@cindex linker scripts
+@cindex command files
+Every link is controlled by a @dfn{linker script}. This script is
+written in the linker command language.
+
+The main purpose of the linker script is to describe how the sections in
+the input files should be mapped into the output file, and to control
+the memory layout of the output file. Most linker scripts do nothing
+more than this. However, when necessary, the linker script can also
+direct the linker to perform many other operations, using the commands
+described below.
+
+The linker always uses a linker script. If you do not supply one
+yourself, the linker will use a default script that is compiled into the
+linker executable. You can use the @samp{--verbose} command line option
+to display the default linker script. Certain command line options,
+such as @samp{-r} or @samp{-N}, will affect the default linker script.
+
+You may supply your own linker script by using the @samp{-T} command
+line option. When you do this, your linker script will replace the
+default linker script.
+
+You may also use linker scripts implicitly by naming them as input files
+to the linker, as though they were files to be linked. @xref{Implicit
+Linker Scripts}.
+
+@menu
+* Basic Script Concepts:: Basic Linker Script Concepts
+* Script Format:: Linker Script Format
+* Simple Example:: Simple Linker Script Example
+* Simple Commands:: Simple Linker Script Commands
+* Assignments:: Assigning Values to Symbols
+* SECTIONS:: SECTIONS Command
+* MEMORY:: MEMORY Command
+* PHDRS:: PHDRS Command
+* VERSION:: VERSION Command
+* Expressions:: Expressions in Linker Scripts
+* Implicit Linker Scripts:: Implicit Linker Scripts
+@end menu
+
+@node Basic Script Concepts
+@section Basic Linker Script Concepts
+@cindex linker script concepts
+We need to define some basic concepts and vocabulary in order to
+describe the linker script language.
+
+The linker combines input files into a single output file. The output
+file and each input file are in a special data format known as an
+@dfn{object file format}. Each file is called an @dfn{object file}.
+The output file is often called an @dfn{executable}, but for our
+purposes we will also call it an object file. Each object file has,
+among other things, a list of @dfn{sections}. We sometimes refer to a
+section in an input file as an @dfn{input section}; similarly, a section
+in the output file is an @dfn{output section}.
+
+Each section in an object file has a name and a size. Most sections
+also have an associated block of data, known as the @dfn{section
+contents}. A section may be marked as @dfn{loadable}, which mean that
+the contents should be loaded into memory when the output file is run.
+A section with no contents may be @dfn{allocatable}, which means that an
+area in memory should be set aside, but nothing in particular should be
+loaded there (in some cases this memory must be zeroed out). A section
+which is neither loadable nor allocatable typically contains some sort
+of debugging information.
+
+Every loadable or allocatable output section has two addresses. The
+first is the @dfn{VMA}, or virtual memory address. This is the address
+the section will have when the output file is run. The second is the
+@dfn{LMA}, or load memory address. This is the address at which the
+section will be loaded. In most cases the two addresses will be the
+same. An example of when they might be different is when a data section
+is loaded into ROM, and then copied into RAM when the program starts up
+(this technique is often used to initialize global variables in a ROM
+based system). In this case the ROM address would be the LMA, and the
+RAM address would be the VMA.
+
+You can see the sections in an object file by using the @code{objdump}
+program with the @samp{-h} option.
+
+Every object file also has a list of @dfn{symbols}, known as the
+@dfn{symbol table}. A symbol may be defined or undefined. Each symbol
+has a name, and each defined symbol has an address, among other
+information. If you compile a C or C++ program into an object file, you
+will get a defined symbol for every defined function and global or
+static variable. Every undefined function or global variable which is
+referenced in the input file will become an undefined symbol.
+
+You can see the symbols in an object file by using the @code{nm}
+program, or by using the @code{objdump} program with the @samp{-t}
+option.
+
+@node Script Format
+@section Linker Script Format
+@cindex linker script format
+Linker scripts are text files.
+
+You write a linker script as a series of commands. Each command is
+either a keyword, possibly followed by arguments, or an assignment to a
+symbol. You may separate commands using semicolons. Whitespace is
+generally ignored.
+
+Strings such as file or format names can normally be entered directly.
+If the file name contains a character such as a comma which would
+otherwise serve to separate file names, you may put the file name in
+double quotes. There is no way to use a double quote character in a
+file name.
+
+You may include comments in linker scripts just as in C, delimited by
+@samp{/*} and @samp{*/}. As in C, comments are syntactically equivalent
+to whitespace.
+
+@node Simple Example
+@section Simple Linker Script Example
+@cindex linker script example
+@cindex example of linker script
+Many linker scripts are fairly simple.
+
+The simplest possible linker script has just one command:
+@samp{SECTIONS}. You use the @samp{SECTIONS} command to describe the
+memory layout of the output file.
+
+The @samp{SECTIONS} command is a powerful command. Here we will
+describe a simple use of it. Let's assume your program consists only of
+code, initialized data, and uninitialized data. These will be in the
+@samp{.text}, @samp{.data}, and @samp{.bss} sections, respectively.
+Let's assume further that these are the only sections which appear in
+your input files.
+
+For this example, let's say that the code should be loaded at address
+0x10000, and that the data should start at address 0x8000000. Here is a
+linker script which will do that:
+@smallexample
+SECTIONS
+@{
+ . = 0x10000;
+ .text : @{ *(.text) @}
+ . = 0x8000000;
+ .data : @{ *(.data) @}
+ .bss : @{ *(.bss) @}
+@}
+@end smallexample
+
+You write the @samp{SECTIONS} command as the keyword @samp{SECTIONS},
+followed by a series of symbol assignments and output section
+descriptions enclosed in curly braces.
+
+The first line inside the @samp{SECTIONS} command of the above example
+sets the value of the special symbol @samp{.}, which is the location
+counter. If you do not specify the address of an output section in some
+other way (other ways are described later), the address is set from the
+current value of the location counter. The location counter is then
+incremented by the size of the output section. At the start of the
+@samp{SECTIONS} command, the location counter has the value @samp{0}.
+
+The second line defines an output section, @samp{.text}. The colon is
+required syntax which may be ignored for now. Within the curly braces
+after the output section name, you list the names of the input sections
+which should be placed into this output section. The @samp{*} is a
+wildcard which matches any file name. The expression @samp{*(.text)}
+means all @samp{.text} input sections in all input files.
+
+Since the location counter is @samp{0x10000} when the output section
+@samp{.text} is defined, the linker will set the address of the
+@samp{.text} section in the output file to be @samp{0x10000}.
+
+The remaining lines define the @samp{.data} and @samp{.bss} sections in
+the output file. The linker will place the @samp{.data} output section
+at address @samp{0x8000000}. After the linker places the @samp{.data}
+output section, the value of the location counter will be
+@samp{0x8000000} plus the size of the @samp{.data} output section. The
+effect is that the linker will place the @samp{.bss} output section
+immediately after the @samp{.data} output section in memory.
+
+The linker will ensure that each output section has the required
+alignment, by increasing the location counter if necessary. In this
+example, the specified addresses for the @samp{.text} and @samp{.data}
+sections will probably satisfy any alignment constraints, but the linker
+may have to create a small gap between the @samp{.data} and @samp{.bss}
+sections.
+
+That's it! That's a simple and complete linker script.
+
+@node Simple Commands
+@section Simple Linker Script Commands
+@cindex linker script simple commands
+In this section we describe the simple linker script commands.
+
+@menu
+* Entry Point:: Setting the entry point
+* File Commands:: Commands dealing with files
+@ifclear SingleFormat
+* Format Commands:: Commands dealing with object file formats
+@end ifclear
+
+* REGION_ALIAS:: Assign alias names to memory regions
+* Miscellaneous Commands:: Other linker script commands
+@end menu
+
+@node Entry Point
+@subsection Setting the Entry Point
+@kindex ENTRY(@var{symbol})
+@cindex start of execution
+@cindex first instruction
+@cindex entry point
+The first instruction to execute in a program is called the @dfn{entry
+point}. You can use the @code{ENTRY} linker script command to set the
+entry point. The argument is a symbol name:
+@smallexample
+ENTRY(@var{symbol})
+@end smallexample
+
+There are several ways to set the entry point. The linker will set the
+entry point by trying each of the following methods in order, and
+stopping when one of them succeeds:
+@itemize @bullet
+@item
+the @samp{-e} @var{entry} command-line option;
+@item
+the @code{ENTRY(@var{symbol})} command in a linker script;
+@item
+the value of a target specific symbol, if it is defined; For many
+targets this is @code{start}, but PE and BeOS based systems for example
+check a list of possible entry symbols, matching the first one found.
+@item
+the address of the first byte of the @samp{.text} section, if present;
+@item
+The address @code{0}.
+@end itemize
+
+@node File Commands
+@subsection Commands Dealing with Files
+@cindex linker script file commands
+Several linker script commands deal with files.
+
+@table @code
+@item INCLUDE @var{filename}
+@kindex INCLUDE @var{filename}
+@cindex including a linker script
+Include the linker script @var{filename} at this point. The file will
+be searched for in the current directory, and in any directory specified
+with the @option{-L} option. You can nest calls to @code{INCLUDE} up to
+10 levels deep.
+
+You can place @code{INCLUDE} directives at the top level, in @code{MEMORY} or
+@code{SECTIONS} commands, or in output section descriptions.
+
+@item INPUT(@var{file}, @var{file}, @dots{})
+@itemx INPUT(@var{file} @var{file} @dots{})
+@kindex INPUT(@var{files})
+@cindex input files in linker scripts
+@cindex input object files in linker scripts
+@cindex linker script input object files
+The @code{INPUT} command directs the linker to include the named files
+in the link, as though they were named on the command line.
+
+For example, if you always want to include @file{subr.o} any time you do
+a link, but you can't be bothered to put it on every link command line,
+then you can put @samp{INPUT (subr.o)} in your linker script.
+
+In fact, if you like, you can list all of your input files in the linker
+script, and then invoke the linker with nothing but a @samp{-T} option.
+
+In case a @dfn{sysroot prefix} is configured, and the filename starts
+with the @samp{/} character, and the script being processed was
+located inside the @dfn{sysroot prefix}, the filename will be looked
+for in the @dfn{sysroot prefix}. Otherwise, the linker will try to
+open the file in the current directory. If it is not found, the
+linker will search through the archive library search path. See the
+description of @samp{-L} in @ref{Options,,Command Line Options}.
+
+If you use @samp{INPUT (-l@var{file})}, @command{ld} will transform the
+name to @code{lib@var{file}.a}, as with the command line argument
+@samp{-l}.
+
+When you use the @code{INPUT} command in an implicit linker script, the
+files will be included in the link at the point at which the linker
+script file is included. This can affect archive searching.
+
+@item GROUP(@var{file}, @var{file}, @dots{})
+@itemx GROUP(@var{file} @var{file} @dots{})
+@kindex GROUP(@var{files})
+@cindex grouping input files
+The @code{GROUP} command is like @code{INPUT}, except that the named
+files should all be archives, and they are searched repeatedly until no
+new undefined references are created. See the description of @samp{-(}
+in @ref{Options,,Command Line Options}.
+
+@item AS_NEEDED(@var{file}, @var{file}, @dots{})
+@itemx AS_NEEDED(@var{file} @var{file} @dots{})
+@kindex AS_NEEDED(@var{files})
+This construct can appear only inside of the @code{INPUT} or @code{GROUP}
+commands, among other filenames. The files listed will be handled
+as if they appear directly in the @code{INPUT} or @code{GROUP} commands,
+with the exception of ELF shared libraries, that will be added only
+when they are actually needed. This construct essentially enables
+@option{--as-needed} option for all the files listed inside of it
+and restores previous @option{--as-needed} resp. @option{--no-as-needed}
+setting afterwards.
+
+@item OUTPUT(@var{filename})
+@kindex OUTPUT(@var{filename})
+@cindex output file name in linker script
+The @code{OUTPUT} command names the output file. Using
+@code{OUTPUT(@var{filename})} in the linker script is exactly like using
+@samp{-o @var{filename}} on the command line (@pxref{Options,,Command
+Line Options}). If both are used, the command line option takes
+precedence.
+
+You can use the @code{OUTPUT} command to define a default name for the
+output file other than the usual default of @file{a.out}.
+
+@item SEARCH_DIR(@var{path})
+@kindex SEARCH_DIR(@var{path})
+@cindex library search path in linker script
+@cindex archive search path in linker script
+@cindex search path in linker script
+The @code{SEARCH_DIR} command adds @var{path} to the list of paths where
+@command{ld} looks for archive libraries. Using
+@code{SEARCH_DIR(@var{path})} is exactly like using @samp{-L @var{path}}
+on the command line (@pxref{Options,,Command Line Options}). If both
+are used, then the linker will search both paths. Paths specified using
+the command line option are searched first.
+
+@item STARTUP(@var{filename})
+@kindex STARTUP(@var{filename})
+@cindex first input file
+The @code{STARTUP} command is just like the @code{INPUT} command, except
+that @var{filename} will become the first input file to be linked, as
+though it were specified first on the command line. This may be useful
+when using a system in which the entry point is always the start of the
+first file.
+@end table
+
+@ifclear SingleFormat
+@node Format Commands
+@subsection Commands Dealing with Object File Formats
+A couple of linker script commands deal with object file formats.
+
+@table @code
+@item OUTPUT_FORMAT(@var{bfdname})
+@itemx OUTPUT_FORMAT(@var{default}, @var{big}, @var{little})
+@kindex OUTPUT_FORMAT(@var{bfdname})
+@cindex output file format in linker script
+The @code{OUTPUT_FORMAT} command names the BFD format to use for the
+output file (@pxref{BFD}). Using @code{OUTPUT_FORMAT(@var{bfdname})} is
+exactly like using @samp{--oformat @var{bfdname}} on the command line
+(@pxref{Options,,Command Line Options}). If both are used, the command
+line option takes precedence.
+
+You can use @code{OUTPUT_FORMAT} with three arguments to use different
+formats based on the @samp{-EB} and @samp{-EL} command line options.
+This permits the linker script to set the output format based on the
+desired endianness.
+
+If neither @samp{-EB} nor @samp{-EL} are used, then the output format
+will be the first argument, @var{default}. If @samp{-EB} is used, the
+output format will be the second argument, @var{big}. If @samp{-EL} is
+used, the output format will be the third argument, @var{little}.
+
+For example, the default linker script for the MIPS ELF target uses this
+command:
+@smallexample
+OUTPUT_FORMAT(elf32-bigmips, elf32-bigmips, elf32-littlemips)
+@end smallexample
+This says that the default format for the output file is
+@samp{elf32-bigmips}, but if the user uses the @samp{-EL} command line
+option, the output file will be created in the @samp{elf32-littlemips}
+format.
+
+@item TARGET(@var{bfdname})
+@kindex TARGET(@var{bfdname})
+@cindex input file format in linker script
+The @code{TARGET} command names the BFD format to use when reading input
+files. It affects subsequent @code{INPUT} and @code{GROUP} commands.
+This command is like using @samp{-b @var{bfdname}} on the command line
+(@pxref{Options,,Command Line Options}). If the @code{TARGET} command
+is used but @code{OUTPUT_FORMAT} is not, then the last @code{TARGET}
+command is also used to set the format for the output file. @xref{BFD}.
+@end table
+@end ifclear
+
+@node REGION_ALIAS
+@subsection Assign alias names to memory regions
+@kindex REGION_ALIAS(@var{alias}, @var{region})
+@cindex region alias
+@cindex region names
+
+Alias names can be added to existing memory regions created with the
+@ref{MEMORY} command. Each name corresponds to at most one memory region.
+
+@smallexample
+REGION_ALIAS(@var{alias}, @var{region})
+@end smallexample
+
+The @code{REGION_ALIAS} function creates an alias name @var{alias} for the
+memory region @var{region}. This allows a flexible mapping of output sections
+to memory regions. An example follows.
+
+Suppose we have an application for embedded systems which come with various
+memory storage devices. All have a general purpose, volatile memory @code{RAM}
+that allows code execution or data storage. Some may have a read-only,
+non-volatile memory @code{ROM} that allows code execution and read-only data
+access. The last variant is a read-only, non-volatile memory @code{ROM2} with
+read-only data access and no code execution capability. We have four output
+sections:
+
+@itemize @bullet
+@item
+@code{.text} program code;
+@item
+@code{.rodata} read-only data;
+@item
+@code{.data} read-write initialized data;
+@item
+@code{.bss} read-write zero initialized data.
+@end itemize
+
+The goal is to provide a linker command file that contains a system independent
+part defining the output sections and a system dependent part mapping the
+output sections to the memory regions available on the system. Our embedded
+systems come with three different memory setups @code{A}, @code{B} and
+@code{C}:
+@multitable @columnfractions .25 .25 .25 .25
+@item Section @tab Variant A @tab Variant B @tab Variant C
+@item .text @tab RAM @tab ROM @tab ROM
+@item .rodata @tab RAM @tab ROM @tab ROM2
+@item .data @tab RAM @tab RAM/ROM @tab RAM/ROM2
+@item .bss @tab RAM @tab RAM @tab RAM
+@end multitable
+The notation @code{RAM/ROM} or @code{RAM/ROM2} means that this section is
+loaded into region @code{ROM} or @code{ROM2} respectively. Please note that
+the load address of the @code{.data} section starts in all three variants at
+the end of the @code{.rodata} section.
+
+The base linker script that deals with the output sections follows. It
+includes the system dependent @code{linkcmds.memory} file that describes the
+memory layout:
+@smallexample
+INCLUDE linkcmds.memory
+
+SECTIONS
+ @{
+ .text :
+ @{
+ *(.text)
+ @} > REGION_TEXT
+ .rodata :
+ @{
+ *(.rodata)
+ rodata_end = .;
+ @} > REGION_RODATA
+ .data : AT (rodata_end)
+ @{
+ data_start = .;
+ *(.data)
+ @} > REGION_DATA
+ data_size = SIZEOF(.data);
+ data_load_start = LOADADDR(.data);
+ .bss :
+ @{
+ *(.bss)
+ @} > REGION_BSS
+ @}
+@end smallexample
+
+Now we need three different @code{linkcmds.memory} files to define memory
+regions and alias names. The content of @code{linkcmds.memory} for the three
+variants @code{A}, @code{B} and @code{C}:
+@table @code
+@item A
+Here everything goes into the @code{RAM}.
+@smallexample
+MEMORY
+ @{
+ RAM : ORIGIN = 0, LENGTH = 4M
+ @}
+
+REGION_ALIAS("REGION_TEXT", RAM);
+REGION_ALIAS("REGION_RODATA", RAM);
+REGION_ALIAS("REGION_DATA", RAM);
+REGION_ALIAS("REGION_BSS", RAM);
+@end smallexample
+@item B
+Program code and read-only data go into the @code{ROM}. Read-write data goes
+into the @code{RAM}. An image of the initialized data is loaded into the
+@code{ROM} and will be copied during system start into the @code{RAM}.
+@smallexample
+MEMORY
+ @{
+ ROM : ORIGIN = 0, LENGTH = 3M
+ RAM : ORIGIN = 0x10000000, LENGTH = 1M
+ @}
+
+REGION_ALIAS("REGION_TEXT", ROM);
+REGION_ALIAS("REGION_RODATA", ROM);
+REGION_ALIAS("REGION_DATA", RAM);
+REGION_ALIAS("REGION_BSS", RAM);
+@end smallexample
+@item C
+Program code goes into the @code{ROM}. Read-only data goes into the
+@code{ROM2}. Read-write data goes into the @code{RAM}. An image of the
+initialized data is loaded into the @code{ROM2} and will be copied during
+system start into the @code{RAM}.
+@smallexample
+MEMORY
+ @{
+ ROM : ORIGIN = 0, LENGTH = 2M
+ ROM2 : ORIGIN = 0x10000000, LENGTH = 1M
+ RAM : ORIGIN = 0x20000000, LENGTH = 1M
+ @}
+
+REGION_ALIAS("REGION_TEXT", ROM);
+REGION_ALIAS("REGION_RODATA", ROM2);
+REGION_ALIAS("REGION_DATA", RAM);
+REGION_ALIAS("REGION_BSS", RAM);
+@end smallexample
+@end table
+
+It is possible to write a common system initialization routine to copy the
+@code{.data} section from @code{ROM} or @code{ROM2} into the @code{RAM} if
+necessary:
+@smallexample
+#include <string.h>
+
+extern char data_start [];
+extern char data_size [];
+extern char data_load_start [];
+
+void copy_data(void)
+@{
+ if (data_start != data_load_start)
+ @{
+ memcpy(data_start, data_load_start, (size_t) data_size);
+ @}
+@}
+@end smallexample
+
+@node Miscellaneous Commands
+@subsection Other Linker Script Commands
+There are a few other linker scripts commands.
+
+@table @code
+@item ASSERT(@var{exp}, @var{message})
+@kindex ASSERT
+@cindex assertion in linker script
+Ensure that @var{exp} is non-zero. If it is zero, then exit the linker
+with an error code, and print @var{message}.
+
+@item EXTERN(@var{symbol} @var{symbol} @dots{})
+@kindex EXTERN
+@cindex undefined symbol in linker script
+Force @var{symbol} to be entered in the output file as an undefined
+symbol. Doing this may, for example, trigger linking of additional
+modules from standard libraries. You may list several @var{symbol}s for
+each @code{EXTERN}, and you may use @code{EXTERN} multiple times. This
+command has the same effect as the @samp{-u} command-line option.
+
+@item FORCE_COMMON_ALLOCATION
+@kindex FORCE_COMMON_ALLOCATION
+@cindex common allocation in linker script
+This command has the same effect as the @samp{-d} command-line option:
+to make @command{ld} assign space to common symbols even if a relocatable
+output file is specified (@samp{-r}).
+
+@item INHIBIT_COMMON_ALLOCATION
+@kindex INHIBIT_COMMON_ALLOCATION
+@cindex common allocation in linker script
+This command has the same effect as the @samp{--no-define-common}
+command-line option: to make @code{ld} omit the assignment of addresses
+to common symbols even for a non-relocatable output file.
+
+@item INSERT [ AFTER | BEFORE ] @var{output_section}
+@kindex INSERT
+@cindex insert user script into default script
+This command is typically used in a script specified by @samp{-T} to
+augment the default @code{SECTIONS} with, for example, overlays. It
+inserts all prior linker script statements after (or before)
+@var{output_section}, and also causes @samp{-T} to not override the
+default linker script. The exact insertion point is as for orphan
+sections. @xref{Location Counter}. The insertion happens after the
+linker has mapped input sections to output sections. Prior to the
+insertion, since @samp{-T} scripts are parsed before the default
+linker script, statements in the @samp{-T} script occur before the
+default linker script statements in the internal linker representation
+of the script. In particular, input section assignments will be made
+to @samp{-T} output sections before those in the default script. Here
+is an example of how a @samp{-T} script using @code{INSERT} might look:
+
+@smallexample
+SECTIONS
+@{
+ OVERLAY :
+ @{
+ .ov1 @{ ov1*(.text) @}
+ .ov2 @{ ov2*(.text) @}
+ @}
+@}
+INSERT AFTER .text;
+@end smallexample
+
+@item NOCROSSREFS(@var{section} @var{section} @dots{})
+@kindex NOCROSSREFS(@var{sections})
+@cindex cross references
+This command may be used to tell @command{ld} to issue an error about any
+references among certain output sections.
+
+In certain types of programs, particularly on embedded systems when
+using overlays, when one section is loaded into memory, another section
+will not be. Any direct references between the two sections would be
+errors. For example, it would be an error if code in one section called
+a function defined in the other section.
+
+The @code{NOCROSSREFS} command takes a list of output section names. If
+@command{ld} detects any cross references between the sections, it reports
+an error and returns a non-zero exit status. Note that the
+@code{NOCROSSREFS} command uses output section names, not input section
+names.
+
+@ifclear SingleFormat
+@item OUTPUT_ARCH(@var{bfdarch})
+@kindex OUTPUT_ARCH(@var{bfdarch})
+@cindex machine architecture
+@cindex architecture
+Specify a particular output machine architecture. The argument is one
+of the names used by the BFD library (@pxref{BFD}). You can see the
+architecture of an object file by using the @code{objdump} program with
+the @samp{-f} option.
+@end ifclear
+@end table
+
+@node Assignments
+@section Assigning Values to Symbols
+@cindex assignment in scripts
+@cindex symbol definition, scripts
+@cindex variables, defining
+You may assign a value to a symbol in a linker script. This will define
+the symbol and place it into the symbol table with a global scope.
+
+@menu
+* Simple Assignments:: Simple Assignments
+* PROVIDE:: PROVIDE
+* PROVIDE_HIDDEN:: PROVIDE_HIDDEN
+* Source Code Reference:: How to use a linker script defined symbol in source code
+@end menu
+
+@node Simple Assignments
+@subsection Simple Assignments
+
+You may assign to a symbol using any of the C assignment operators:
+
+@table @code
+@item @var{symbol} = @var{expression} ;
+@itemx @var{symbol} += @var{expression} ;
+@itemx @var{symbol} -= @var{expression} ;
+@itemx @var{symbol} *= @var{expression} ;
+@itemx @var{symbol} /= @var{expression} ;
+@itemx @var{symbol} <<= @var{expression} ;
+@itemx @var{symbol} >>= @var{expression} ;
+@itemx @var{symbol} &= @var{expression} ;
+@itemx @var{symbol} |= @var{expression} ;
+@end table
+
+The first case will define @var{symbol} to the value of
+@var{expression}. In the other cases, @var{symbol} must already be
+defined, and the value will be adjusted accordingly.
+
+The special symbol name @samp{.} indicates the location counter. You
+may only use this within a @code{SECTIONS} command. @xref{Location Counter}.
+
+The semicolon after @var{expression} is required.
+
+Expressions are defined below; see @ref{Expressions}.
+
+You may write symbol assignments as commands in their own right, or as
+statements within a @code{SECTIONS} command, or as part of an output
+section description in a @code{SECTIONS} command.
+
+The section of the symbol will be set from the section of the
+expression; for more information, see @ref{Expression Section}.
+
+Here is an example showing the three different places that symbol
+assignments may be used:
+
+@smallexample
+floating_point = 0;
+SECTIONS
+@{
+ .text :
+ @{
+ *(.text)
+ _etext = .;
+ @}
+ _bdata = (. + 3) & ~ 3;
+ .data : @{ *(.data) @}
+@}
+@end smallexample
+@noindent
+In this example, the symbol @samp{floating_point} will be defined as
+zero. The symbol @samp{_etext} will be defined as the address following
+the last @samp{.text} input section. The symbol @samp{_bdata} will be
+defined as the address following the @samp{.text} output section aligned
+upward to a 4 byte boundary.
+
+@node PROVIDE
+@subsection PROVIDE
+@cindex PROVIDE
+In some cases, it is desirable for a linker script to define a symbol
+only if it is referenced and is not defined by any object included in
+the link. For example, traditional linkers defined the symbol
+@samp{etext}. However, ANSI C requires that the user be able to use
+@samp{etext} as a function name without encountering an error. The
+@code{PROVIDE} keyword may be used to define a symbol, such as
+@samp{etext}, only if it is referenced but not defined. The syntax is
+@code{PROVIDE(@var{symbol} = @var{expression})}.
+
+Here is an example of using @code{PROVIDE} to define @samp{etext}:
+@smallexample
+SECTIONS
+@{
+ .text :
+ @{
+ *(.text)
+ _etext = .;
+ PROVIDE(etext = .);
+ @}
+@}
+@end smallexample
+
+In this example, if the program defines @samp{_etext} (with a leading
+underscore), the linker will give a multiple definition error. If, on
+the other hand, the program defines @samp{etext} (with no leading
+underscore), the linker will silently use the definition in the program.
+If the program references @samp{etext} but does not define it, the
+linker will use the definition in the linker script.
+
+@node PROVIDE_HIDDEN
+@subsection PROVIDE_HIDDEN
+@cindex PROVIDE_HIDDEN
+Similar to @code{PROVIDE}. For ELF targeted ports, the symbol will be
+hidden and won't be exported.
+
+@node Source Code Reference
+@subsection Source Code Reference
+
+Accessing a linker script defined variable from source code is not
+intuitive. In particular a linker script symbol is not equivalent to
+a variable declaration in a high level language, it is instead a
+symbol that does not have a value.
+
+Before going further, it is important to note that compilers often
+transform names in the source code into different names when they are
+stored in the symbol table. For example, Fortran compilers commonly
+prepend or append an underscore, and C++ performs extensive @samp{name
+mangling}. Therefore there might be a discrepancy between the name
+of a variable as it is used in source code and the name of the same
+variable as it is defined in a linker script. For example in C a
+linker script variable might be referred to as:
+
+@smallexample
+ extern int foo;
+@end smallexample
+
+But in the linker script it might be defined as:
+
+@smallexample
+ _foo = 1000;
+@end smallexample
+
+In the remaining examples however it is assumed that no name
+transformation has taken place.
+
+When a symbol is declared in a high level language such as C, two
+things happen. The first is that the compiler reserves enough space
+in the program's memory to hold the @emph{value} of the symbol. The
+second is that the compiler creates an entry in the program's symbol
+table which holds the symbol's @emph{address}. ie the symbol table
+contains the address of the block of memory holding the symbol's
+value. So for example the following C declaration, at file scope:
+
+@smallexample
+ int foo = 1000;
+@end smallexample
+
+creates a entry called @samp{foo} in the symbol table. This entry
+holds the address of an @samp{int} sized block of memory where the
+number 1000 is initially stored.
+
+When a program references a symbol the compiler generates code that
+first accesses the symbol table to find the address of the symbol's
+memory block and then code to read the value from that memory block.
+So:
+
+@smallexample
+ foo = 1;
+@end smallexample
+
+looks up the symbol @samp{foo} in the symbol table, gets the address
+associated with this symbol and then writes the value 1 into that
+address. Whereas:
+
+@smallexample
+ int * a = & foo;
+@end smallexample
+
+looks up the symbol @samp{foo} in the symbol table, gets it address
+and then copies this address into the block of memory associated with
+the variable @samp{a}.
+
+Linker scripts symbol declarations, by contrast, create an entry in
+the symbol table but do not assign any memory to them. Thus they are
+an address without a value. So for example the linker script definition:
+
+@smallexample
+ foo = 1000;
+@end smallexample
+
+creates an entry in the symbol table called @samp{foo} which holds
+the address of memory location 1000, but nothing special is stored at
+address 1000. This means that you cannot access the @emph{value} of a
+linker script defined symbol - it has no value - all you can do is
+access the @emph{address} of a linker script defined symbol.
+
+Hence when you are using a linker script defined symbol in source code
+you should always take the address of the symbol, and never attempt to
+use its value. For example suppose you want to copy the contents of a
+section of memory called .ROM into a section called .FLASH and the
+linker script contains these declarations:
+
+@smallexample
+@group
+ start_of_ROM = .ROM;
+ end_of_ROM = .ROM + sizeof (.ROM) - 1;
+ start_of_FLASH = .FLASH;
+@end group
+@end smallexample
+
+Then the C source code to perform the copy would be:
+
+@smallexample
+@group
+ extern char start_of_ROM, end_of_ROM, start_of_FLASH;
+
+ memcpy (& start_of_FLASH, & start_of_ROM, & end_of_ROM - & start_of_ROM);
+@end group
+@end smallexample
+
+Note the use of the @samp{&} operators. These are correct.
+
+@node SECTIONS
+@section SECTIONS Command
+@kindex SECTIONS
+The @code{SECTIONS} command tells the linker how to map input sections
+into output sections, and how to place the output sections in memory.
+
+The format of the @code{SECTIONS} command is:
+@smallexample
+SECTIONS
+@{
+ @var{sections-command}
+ @var{sections-command}
+ @dots{}
+@}
+@end smallexample
+
+Each @var{sections-command} may of be one of the following:
+
+@itemize @bullet
+@item
+an @code{ENTRY} command (@pxref{Entry Point,,Entry command})
+@item
+a symbol assignment (@pxref{Assignments})
+@item
+an output section description
+@item
+an overlay description
+@end itemize
+
+The @code{ENTRY} command and symbol assignments are permitted inside the
+@code{SECTIONS} command for convenience in using the location counter in
+those commands. This can also make the linker script easier to
+understand because you can use those commands at meaningful points in
+the layout of the output file.
+
+Output section descriptions and overlay descriptions are described
+below.
+
+If you do not use a @code{SECTIONS} command in your linker script, the
+linker will place each input section into an identically named output
+section in the order that the sections are first encountered in the
+input files. If all input sections are present in the first file, for
+example, the order of sections in the output file will match the order
+in the first input file. The first section will be at address zero.
+
+@menu
+* Output Section Description:: Output section description
+* Output Section Name:: Output section name
+* Output Section Address:: Output section address
+* Input Section:: Input section description
+* Output Section Data:: Output section data
+* Output Section Keywords:: Output section keywords
+* Output Section Discarding:: Output section discarding
+* Output Section Attributes:: Output section attributes
+* Overlay Description:: Overlay description
+@end menu
+
+@node Output Section Description
+@subsection Output Section Description
+The full description of an output section looks like this:
+@smallexample
+@group
+@var{section} [@var{address}] [(@var{type})] :
+ [AT(@var{lma})]
+ [ALIGN(@var{section_align})]
+ [SUBALIGN(@var{subsection_align})]
+ [@var{constraint}]
+ @{
+ @var{output-section-command}
+ @var{output-section-command}
+ @dots{}
+ @} [>@var{region}] [AT>@var{lma_region}] [:@var{phdr} :@var{phdr} @dots{}] [=@var{fillexp}]
+@end group
+@end smallexample
+
+Most output sections do not use most of the optional section attributes.
+
+The whitespace around @var{section} is required, so that the section
+name is unambiguous. The colon and the curly braces are also required.
+The line breaks and other white space are optional.
+
+Each @var{output-section-command} may be one of the following:
+
+@itemize @bullet
+@item
+a symbol assignment (@pxref{Assignments})
+@item
+an input section description (@pxref{Input Section})
+@item
+data values to include directly (@pxref{Output Section Data})
+@item
+a special output section keyword (@pxref{Output Section Keywords})
+@end itemize
+
+@node Output Section Name
+@subsection Output Section Name
+@cindex name, section
+@cindex section name
+The name of the output section is @var{section}. @var{section} must
+meet the constraints of your output format. In formats which only
+support a limited number of sections, such as @code{a.out}, the name
+must be one of the names supported by the format (@code{a.out}, for
+example, allows only @samp{.text}, @samp{.data} or @samp{.bss}). If the
+output format supports any number of sections, but with numbers and not
+names (as is the case for Oasys), the name should be supplied as a
+quoted numeric string. A section name may consist of any sequence of
+characters, but a name which contains any unusual characters such as
+commas must be quoted.
+
+The output section name @samp{/DISCARD/} is special; @ref{Output Section
+Discarding}.
+
+@node Output Section Address
+@subsection Output Section Address
+@cindex address, section
+@cindex section address
+The @var{address} is an expression for the VMA (the virtual memory
+address) of the output section. This address is optional, but if it
+is provided then the output address will be set exactly as specified.
+
+If the output address is not specified then one will be chosen for the
+section, based on the heuristic below. This address will be adjusted
+to fit the alignment requirement of the output section. The
+alignment requirement is the strictest alignment of any input section
+contained within the output section.
+
+The output section address heuristic is as follows:
+
+@itemize @bullet
+@item
+If an output memory @var{region} is set for the section then it
+is added to this region and its address will be the next free address
+in that region.
+
+@item
+If the MEMORY command has been used to create a list of memory
+regions then the first region which has attributes compatible with the
+section is selected to contain it. The section's output address will
+be the next free address in that region; @ref{MEMORY}.
+
+@item
+If no memory regions were specified, or none match the section then
+the output address will be based on the current value of the location
+counter.
+@end itemize
+
+@noindent
+For example:
+
+@smallexample
+.text . : @{ *(.text) @}
+@end smallexample
+
+@noindent
+and
+
+@smallexample
+.text : @{ *(.text) @}
+@end smallexample
+
+@noindent
+are subtly different. The first will set the address of the
+@samp{.text} output section to the current value of the location
+counter. The second will set it to the current value of the location
+counter aligned to the strictest alignment of any of the @samp{.text}
+input sections.
+
+The @var{address} may be an arbitrary expression; @ref{Expressions}.
+For example, if you want to align the section on a 0x10 byte boundary,
+so that the lowest four bits of the section address are zero, you could
+do something like this:
+@smallexample
+.text ALIGN(0x10) : @{ *(.text) @}
+@end smallexample
+@noindent
+This works because @code{ALIGN} returns the current location counter
+aligned upward to the specified value.
+
+Specifying @var{address} for a section will change the value of the
+location counter, provided that the section is non-empty. (Empty
+sections are ignored).
+
+@node Input Section
+@subsection Input Section Description
+@cindex input sections
+@cindex mapping input sections to output sections
+The most common output section command is an input section description.
+
+The input section description is the most basic linker script operation.
+You use output sections to tell the linker how to lay out your program
+in memory. You use input section descriptions to tell the linker how to
+map the input files into your memory layout.
+
+@menu
+* Input Section Basics:: Input section basics
+* Input Section Wildcards:: Input section wildcard patterns
+* Input Section Common:: Input section for common symbols
+* Input Section Keep:: Input section and garbage collection
+* Input Section Example:: Input section example
+@end menu
+
+@node Input Section Basics
+@subsubsection Input Section Basics
+@cindex input section basics
+An input section description consists of a file name optionally followed
+by a list of section names in parentheses.
+
+The file name and the section name may be wildcard patterns, which we
+describe further below (@pxref{Input Section Wildcards}).
+
+The most common input section description is to include all input
+sections with a particular name in the output section. For example, to
+include all input @samp{.text} sections, you would write:
+@smallexample
+*(.text)
+@end smallexample
+@noindent
+Here the @samp{*} is a wildcard which matches any file name. To exclude a list
+of files from matching the file name wildcard, EXCLUDE_FILE may be used to
+match all files except the ones specified in the EXCLUDE_FILE list. For
+example:
+@smallexample
+*(EXCLUDE_FILE (*crtend.o *otherfile.o) .ctors)
+@end smallexample
+will cause all .ctors sections from all files except @file{crtend.o} and
+@file{otherfile.o} to be included.
+
+There are two ways to include more than one section:
+@smallexample
+*(.text .rdata)
+*(.text) *(.rdata)
+@end smallexample
+@noindent
+The difference between these is the order in which the @samp{.text} and
+@samp{.rdata} input sections will appear in the output section. In the
+first example, they will be intermingled, appearing in the same order as
+they are found in the linker input. In the second example, all
+@samp{.text} input sections will appear first, followed by all
+@samp{.rdata} input sections.
+
+You can specify a file name to include sections from a particular file.
+You would do this if one or more of your files contain special data that
+needs to be at a particular location in memory. For example:
+@smallexample
+data.o(.data)
+@end smallexample
+
+You can also specify files within archives by writing a pattern
+matching the archive, a colon, then the pattern matching the file,
+with no whitespace around the colon.
+
+@table @samp
+@item archive:file
+matches file within archive
+@item archive:
+matches the whole archive
+@item :file
+matches file but not one in an archive
+@end table
+
+Either one or both of @samp{archive} and @samp{file} can contain shell
+wildcards. On DOS based file systems, the linker will assume that a
+single letter followed by a colon is a drive specifier, so
+@samp{c:myfile.o} is a simple file specification, not @samp{myfile.o}
+within an archive called @samp{c}. @samp{archive:file} filespecs may
+also be used within an @code{EXCLUDE_FILE} list, but may not appear in
+other linker script contexts. For instance, you cannot extract a file
+from an archive by using @samp{archive:file} in an @code{INPUT}
+command.
+
+If you use a file name without a list of sections, then all sections in
+the input file will be included in the output section. This is not
+commonly done, but it may by useful on occasion. For example:
+@smallexample
+data.o
+@end smallexample
+
+When you use a file name which is not an @samp{archive:file} specifier
+and does not contain any wild card
+characters, the linker will first see if you also specified the file
+name on the linker command line or in an @code{INPUT} command. If you
+did not, the linker will attempt to open the file as an input file, as
+though it appeared on the command line. Note that this differs from an
+@code{INPUT} command, because the linker will not search for the file in
+the archive search path.
+
+@node Input Section Wildcards
+@subsubsection Input Section Wildcard Patterns
+@cindex input section wildcards
+@cindex wildcard file name patterns
+@cindex file name wildcard patterns
+@cindex section name wildcard patterns
+In an input section description, either the file name or the section
+name or both may be wildcard patterns.
+
+The file name of @samp{*} seen in many examples is a simple wildcard
+pattern for the file name.
+
+The wildcard patterns are like those used by the Unix shell.
+
+@table @samp
+@item *
+matches any number of characters
+@item ?
+matches any single character
+@item [@var{chars}]
+matches a single instance of any of the @var{chars}; the @samp{-}
+character may be used to specify a range of characters, as in
+@samp{[a-z]} to match any lower case letter
+@item \
+quotes the following character
+@end table
+
+When a file name is matched with a wildcard, the wildcard characters
+will not match a @samp{/} character (used to separate directory names on
+Unix). A pattern consisting of a single @samp{*} character is an
+exception; it will always match any file name, whether it contains a
+@samp{/} or not. In a section name, the wildcard characters will match
+a @samp{/} character.
+
+File name wildcard patterns only match files which are explicitly
+specified on the command line or in an @code{INPUT} command. The linker
+does not search directories to expand wildcards.
+
+If a file name matches more than one wildcard pattern, or if a file name
+appears explicitly and is also matched by a wildcard pattern, the linker
+will use the first match in the linker script. For example, this
+sequence of input section descriptions is probably in error, because the
+@file{data.o} rule will not be used:
+@smallexample
+.data : @{ *(.data) @}
+.data1 : @{ data.o(.data) @}
+@end smallexample
+
+@cindex SORT_BY_NAME
+Normally, the linker will place files and sections matched by wildcards
+in the order in which they are seen during the link. You can change
+this by using the @code{SORT_BY_NAME} keyword, which appears before a wildcard
+pattern in parentheses (e.g., @code{SORT_BY_NAME(.text*)}). When the
+@code{SORT_BY_NAME} keyword is used, the linker will sort the files or sections
+into ascending order by name before placing them in the output file.
+
+@cindex SORT_BY_ALIGNMENT
+@code{SORT_BY_ALIGNMENT} is very similar to @code{SORT_BY_NAME}. The
+difference is @code{SORT_BY_ALIGNMENT} will sort sections into
+ascending order by alignment before placing them in the output file.
+
+@cindex SORT
+@code{SORT} is an alias for @code{SORT_BY_NAME}.
+
+When there are nested section sorting commands in linker script, there
+can be at most 1 level of nesting for section sorting commands.
+
+@enumerate
+@item
+@code{SORT_BY_NAME} (@code{SORT_BY_ALIGNMENT} (wildcard section pattern)).
+It will sort the input sections by name first, then by alignment if 2
+sections have the same name.
+@item
+@code{SORT_BY_ALIGNMENT} (@code{SORT_BY_NAME} (wildcard section pattern)).
+It will sort the input sections by alignment first, then by name if 2
+sections have the same alignment.
+@item
+@code{SORT_BY_NAME} (@code{SORT_BY_NAME} (wildcard section pattern)) is
+treated the same as @code{SORT_BY_NAME} (wildcard section pattern).
+@item
+@code{SORT_BY_ALIGNMENT} (@code{SORT_BY_ALIGNMENT} (wildcard section pattern))
+is treated the same as @code{SORT_BY_ALIGNMENT} (wildcard section pattern).
+@item
+All other nested section sorting commands are invalid.
+@end enumerate
+
+When both command line section sorting option and linker script
+section sorting command are used, section sorting command always
+takes precedence over the command line option.
+
+If the section sorting command in linker script isn't nested, the
+command line option will make the section sorting command to be
+treated as nested sorting command.
+
+@enumerate
+@item
+@code{SORT_BY_NAME} (wildcard section pattern ) with
+@option{--sort-sections alignment} is equivalent to
+@code{SORT_BY_NAME} (@code{SORT_BY_ALIGNMENT} (wildcard section pattern)).
+@item
+@code{SORT_BY_ALIGNMENT} (wildcard section pattern) with
+@option{--sort-section name} is equivalent to
+@code{SORT_BY_ALIGNMENT} (@code{SORT_BY_NAME} (wildcard section pattern)).
+@end enumerate
+
+If the section sorting command in linker script is nested, the
+command line option will be ignored.
+
+If you ever get confused about where input sections are going, use the
+@samp{-M} linker option to generate a map file. The map file shows
+precisely how input sections are mapped to output sections.
+
+This example shows how wildcard patterns might be used to partition
+files. This linker script directs the linker to place all @samp{.text}
+sections in @samp{.text} and all @samp{.bss} sections in @samp{.bss}.
+The linker will place the @samp{.data} section from all files beginning
+with an upper case character in @samp{.DATA}; for all other files, the
+linker will place the @samp{.data} section in @samp{.data}.
+@smallexample
+@group
+SECTIONS @{
+ .text : @{ *(.text) @}
+ .DATA : @{ [A-Z]*(.data) @}
+ .data : @{ *(.data) @}
+ .bss : @{ *(.bss) @}
+@}
+@end group
+@end smallexample
+
+@node Input Section Common
+@subsubsection Input Section for Common Symbols
+@cindex common symbol placement
+@cindex uninitialized data placement
+A special notation is needed for common symbols, because in many object
+file formats common symbols do not have a particular input section. The
+linker treats common symbols as though they are in an input section
+named @samp{COMMON}.
+
+You may use file names with the @samp{COMMON} section just as with any
+other input sections. You can use this to place common symbols from a
+particular input file in one section while common symbols from other
+input files are placed in another section.
+
+In most cases, common symbols in input files will be placed in the
+@samp{.bss} section in the output file. For example:
+@smallexample
+.bss @{ *(.bss) *(COMMON) @}
+@end smallexample
+
+@cindex scommon section
+@cindex small common symbols
+Some object file formats have more than one type of common symbol. For
+example, the MIPS ELF object file format distinguishes standard common
+symbols and small common symbols. In this case, the linker will use a
+different special section name for other types of common symbols. In
+the case of MIPS ELF, the linker uses @samp{COMMON} for standard common
+symbols and @samp{.scommon} for small common symbols. This permits you
+to map the different types of common symbols into memory at different
+locations.
+
+@cindex [COMMON]
+You will sometimes see @samp{[COMMON]} in old linker scripts. This
+notation is now considered obsolete. It is equivalent to
+@samp{*(COMMON)}.
+
+@node Input Section Keep
+@subsubsection Input Section and Garbage Collection
+@cindex KEEP
+@cindex garbage collection
+When link-time garbage collection is in use (@samp{--gc-sections}),
+it is often useful to mark sections that should not be eliminated.
+This is accomplished by surrounding an input section's wildcard entry
+with @code{KEEP()}, as in @code{KEEP(*(.init))} or
+@code{KEEP(SORT_BY_NAME(*)(.ctors))}.
+
+@node Input Section Example
+@subsubsection Input Section Example
+The following example is a complete linker script. It tells the linker
+to read all of the sections from file @file{all.o} and place them at the
+start of output section @samp{outputa} which starts at location
+@samp{0x10000}. All of section @samp{.input1} from file @file{foo.o}
+follows immediately, in the same output section. All of section
+@samp{.input2} from @file{foo.o} goes into output section
+@samp{outputb}, followed by section @samp{.input1} from @file{foo1.o}.
+All of the remaining @samp{.input1} and @samp{.input2} sections from any
+files are written to output section @samp{outputc}.
+
+@smallexample
+@group
+SECTIONS @{
+ outputa 0x10000 :
+ @{
+ all.o
+ foo.o (.input1)
+ @}
+@end group
+@group
+ outputb :
+ @{
+ foo.o (.input2)
+ foo1.o (.input1)
+ @}
+@end group
+@group
+ outputc :
+ @{
+ *(.input1)
+ *(.input2)
+ @}
+@}
+@end group
+@end smallexample
+
+@node Output Section Data
+@subsection Output Section Data
+@cindex data
+@cindex section data
+@cindex output section data
+@kindex BYTE(@var{expression})
+@kindex SHORT(@var{expression})
+@kindex LONG(@var{expression})
+@kindex QUAD(@var{expression})
+@kindex SQUAD(@var{expression})
+You can include explicit bytes of data in an output section by using
+@code{BYTE}, @code{SHORT}, @code{LONG}, @code{QUAD}, or @code{SQUAD} as
+an output section command. Each keyword is followed by an expression in
+parentheses providing the value to store (@pxref{Expressions}). The
+value of the expression is stored at the current value of the location
+counter.
+
+The @code{BYTE}, @code{SHORT}, @code{LONG}, and @code{QUAD} commands
+store one, two, four, and eight bytes (respectively). After storing the
+bytes, the location counter is incremented by the number of bytes
+stored.
+
+For example, this will store the byte 1 followed by the four byte value
+of the symbol @samp{addr}:
+@smallexample
+BYTE(1)
+LONG(addr)
+@end smallexample
+
+When using a 64 bit host or target, @code{QUAD} and @code{SQUAD} are the
+same; they both store an 8 byte, or 64 bit, value. When both host and
+target are 32 bits, an expression is computed as 32 bits. In this case
+@code{QUAD} stores a 32 bit value zero extended to 64 bits, and
+@code{SQUAD} stores a 32 bit value sign extended to 64 bits.
+
+If the object file format of the output file has an explicit endianness,
+which is the normal case, the value will be stored in that endianness.
+When the object file format does not have an explicit endianness, as is
+true of, for example, S-records, the value will be stored in the
+endianness of the first input object file.
+
+Note---these commands only work inside a section description and not
+between them, so the following will produce an error from the linker:
+@smallexample
+SECTIONS @{@ .text : @{@ *(.text) @}@ LONG(1) .data : @{@ *(.data) @}@ @}@
+@end smallexample
+whereas this will work:
+@smallexample
+SECTIONS @{@ .text : @{@ *(.text) ; LONG(1) @}@ .data : @{@ *(.data) @}@ @}@
+@end smallexample
+
+@kindex FILL(@var{expression})
+@cindex holes, filling
+@cindex unspecified memory
+You may use the @code{FILL} command to set the fill pattern for the
+current section. It is followed by an expression in parentheses. Any
+otherwise unspecified regions of memory within the section (for example,
+gaps left due to the required alignment of input sections) are filled
+with the value of the expression, repeated as
+necessary. A @code{FILL} statement covers memory locations after the
+point at which it occurs in the section definition; by including more
+than one @code{FILL} statement, you can have different fill patterns in
+different parts of an output section.
+
+This example shows how to fill unspecified regions of memory with the
+value @samp{0x90}:
+@smallexample
+FILL(0x90909090)
+@end smallexample
+
+The @code{FILL} command is similar to the @samp{=@var{fillexp}} output
+section attribute, but it only affects the
+part of the section following the @code{FILL} command, rather than the
+entire section. If both are used, the @code{FILL} command takes
+precedence. @xref{Output Section Fill}, for details on the fill
+expression.
+
+@node Output Section Keywords
+@subsection Output Section Keywords
+There are a couple of keywords which can appear as output section
+commands.
+
+@table @code
+@kindex CREATE_OBJECT_SYMBOLS
+@cindex input filename symbols
+@cindex filename symbols
+@item CREATE_OBJECT_SYMBOLS
+The command tells the linker to create a symbol for each input file.
+The name of each symbol will be the name of the corresponding input
+file. The section of each symbol will be the output section in which
+the @code{CREATE_OBJECT_SYMBOLS} command appears.
+
+This is conventional for the a.out object file format. It is not
+normally used for any other object file format.
+
+@kindex CONSTRUCTORS
+@cindex C++ constructors, arranging in link
+@cindex constructors, arranging in link
+@item CONSTRUCTORS
+When linking using the a.out object file format, the linker uses an
+unusual set construct to support C++ global constructors and
+destructors. When linking object file formats which do not support
+arbitrary sections, such as ECOFF and XCOFF, the linker will
+automatically recognize C++ global constructors and destructors by name.
+For these object file formats, the @code{CONSTRUCTORS} command tells the
+linker to place constructor information in the output section where the
+@code{CONSTRUCTORS} command appears. The @code{CONSTRUCTORS} command is
+ignored for other object file formats.
+
+The symbol @w{@code{__CTOR_LIST__}} marks the start of the global
+constructors, and the symbol @w{@code{__CTOR_END__}} marks the end.
+Similarly, @w{@code{__DTOR_LIST__}} and @w{@code{__DTOR_END__}} mark
+the start and end of the global destructors. The
+first word in the list is the number of entries, followed by the address
+of each constructor or destructor, followed by a zero word. The
+compiler must arrange to actually run the code. For these object file
+formats @sc{gnu} C++ normally calls constructors from a subroutine
+@code{__main}; a call to @code{__main} is automatically inserted into
+the startup code for @code{main}. @sc{gnu} C++ normally runs
+destructors either by using @code{atexit}, or directly from the function
+@code{exit}.
+
+For object file formats such as @code{COFF} or @code{ELF} which support
+arbitrary section names, @sc{gnu} C++ will normally arrange to put the
+addresses of global constructors and destructors into the @code{.ctors}
+and @code{.dtors} sections. Placing the following sequence into your
+linker script will build the sort of table which the @sc{gnu} C++
+runtime code expects to see.
+
+@smallexample
+ __CTOR_LIST__ = .;
+ LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
+ *(.ctors)
+ LONG(0)
+ __CTOR_END__ = .;
+ __DTOR_LIST__ = .;
+ LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
+ *(.dtors)
+ LONG(0)
+ __DTOR_END__ = .;
+@end smallexample
+
+If you are using the @sc{gnu} C++ support for initialization priority,
+which provides some control over the order in which global constructors
+are run, you must sort the constructors at link time to ensure that they
+are executed in the correct order. When using the @code{CONSTRUCTORS}
+command, use @samp{SORT_BY_NAME(CONSTRUCTORS)} instead. When using the
+@code{.ctors} and @code{.dtors} sections, use @samp{*(SORT_BY_NAME(.ctors))} and
+@samp{*(SORT_BY_NAME(.dtors))} instead of just @samp{*(.ctors)} and
+@samp{*(.dtors)}.
+
+Normally the compiler and linker will handle these issues automatically,
+and you will not need to concern yourself with them. However, you may
+need to consider this if you are using C++ and writing your own linker
+scripts.
+
+@end table
+
+@node Output Section Discarding
+@subsection Output Section Discarding
+@cindex discarding sections
+@cindex sections, discarding
+@cindex removing sections
+The linker will not create output sections with no contents. This is
+for convenience when referring to input sections that may or may not
+be present in any of the input files. For example:
+@smallexample
+.foo : @{ *(.foo) @}
+@end smallexample
+@noindent
+will only create a @samp{.foo} section in the output file if there is a
+@samp{.foo} section in at least one input file, and if the input
+sections are not all empty. Other link script directives that allocate
+space in an output section will also create the output section.
+
+The linker will ignore address assignments (@pxref{Output Section Address})
+on discarded output sections, except when the linker script defines
+symbols in the output section. In that case the linker will obey
+the address assignments, possibly advancing dot even though the
+section is discarded.
+
+@cindex /DISCARD/
+The special output section name @samp{/DISCARD/} may be used to discard
+input sections. Any input sections which are assigned to an output
+section named @samp{/DISCARD/} are not included in the output file.
+
+@node Output Section Attributes
+@subsection Output Section Attributes
+@cindex output section attributes
+We showed above that the full description of an output section looked
+like this:
+
+@smallexample
+@group
+@var{section} [@var{address}] [(@var{type})] :
+ [AT(@var{lma})]
+ [ALIGN(@var{section_align})]
+ [SUBALIGN(@var{subsection_align})]
+ [@var{constraint}]
+ @{
+ @var{output-section-command}
+ @var{output-section-command}
+ @dots{}
+ @} [>@var{region}] [AT>@var{lma_region}] [:@var{phdr} :@var{phdr} @dots{}] [=@var{fillexp}]
+@end group
+@end smallexample
+
+We've already described @var{section}, @var{address}, and
+@var{output-section-command}. In this section we will describe the
+remaining section attributes.
+
+@menu
+* Output Section Type:: Output section type
+* Output Section LMA:: Output section LMA
+* Forced Output Alignment:: Forced Output Alignment
+* Forced Input Alignment:: Forced Input Alignment
+* Output Section Constraint:: Output section constraint
+* Output Section Region:: Output section region
+* Output Section Phdr:: Output section phdr
+* Output Section Fill:: Output section fill
+@end menu
+
+@node Output Section Type
+@subsubsection Output Section Type
+Each output section may have a type. The type is a keyword in
+parentheses. The following types are defined:
+
+@table @code
+@item NOLOAD
+The section should be marked as not loadable, so that it will not be
+loaded into memory when the program is run.
+@item DSECT
+@itemx COPY
+@itemx INFO
+@itemx OVERLAY
+These type names are supported for backward compatibility, and are
+rarely used. They all have the same effect: the section should be
+marked as not allocatable, so that no memory is allocated for the
+section when the program is run.
+@end table
+
+@kindex NOLOAD
+@cindex prevent unnecessary loading
+@cindex loading, preventing
+The linker normally sets the attributes of an output section based on
+the input sections which map into it. You can override this by using
+the section type. For example, in the script sample below, the
+@samp{ROM} section is addressed at memory location @samp{0} and does not
+need to be loaded when the program is run.
+@smallexample
+@group
+SECTIONS @{
+ ROM 0 (NOLOAD) : @{ @dots{} @}
+ @dots{}
+@}
+@end group
+@end smallexample
+
+@node Output Section LMA
+@subsubsection Output Section LMA
+@kindex AT>@var{lma_region}
+@kindex AT(@var{lma})
+@cindex load address
+@cindex section load address
+Every section has a virtual address (VMA) and a load address (LMA); see
+@ref{Basic Script Concepts}. The virtual address is specified by the
+@pxref{Output Section Address} described earlier. The load address is
+specified by the @code{AT} or @code{AT>} keywords. Specifying a load
+address is optional.
+
+The @code{AT} keyword takes an expression as an argument. This
+specifies the exact load address of the section. The @code{AT>} keyword
+takes the name of a memory region as an argument. @xref{MEMORY}. The
+load address of the section is set to the next free address in the
+region, aligned to the section's alignment requirements.
+
+If neither @code{AT} nor @code{AT>} is specified for an allocatable
+section, the linker will use the following heuristic to determine the
+load address:
+
+@itemize @bullet
+@item
+If the section has a specific VMA address, then this is used as
+the LMA address as well.
+
+@item
+If the section is not allocatable then its LMA is set to its VMA.
+
+@item
+Otherwise if a memory region can be found that is compatible
+with the current section, and this region contains at least one
+section, then the LMA is set so the difference between the
+VMA and LMA is the same as the difference between the VMA and LMA of
+the last section in the located region.
+
+@item
+If no memory regions have been declared then a default region
+that covers the entire address space is used in the previous step.
+
+@item
+If no suitable region could be found, or there was no previous
+section then the LMA is set equal to the VMA.
+@end itemize
+
+@cindex ROM initialized data
+@cindex initialized data in ROM
+This feature is designed to make it easy to build a ROM image. For
+example, the following linker script creates three output sections: one
+called @samp{.text}, which starts at @code{0x1000}, one called
+@samp{.mdata}, which is loaded at the end of the @samp{.text} section
+even though its VMA is @code{0x2000}, and one called @samp{.bss} to hold
+uninitialized data at address @code{0x3000}. The symbol @code{_data} is
+defined with the value @code{0x2000}, which shows that the location
+counter holds the VMA value, not the LMA value.
+
+@smallexample
+@group
+SECTIONS
+ @{
+ .text 0x1000 : @{ *(.text) _etext = . ; @}
+ .mdata 0x2000 :
+ AT ( ADDR (.text) + SIZEOF (.text) )
+ @{ _data = . ; *(.data); _edata = . ; @}
+ .bss 0x3000 :
+ @{ _bstart = . ; *(.bss) *(COMMON) ; _bend = . ;@}
+@}
+@end group
+@end smallexample
+
+The run-time initialization code for use with a program generated with
+this linker script would include something like the following, to copy
+the initialized data from the ROM image to its runtime address. Notice
+how this code takes advantage of the symbols defined by the linker
+script.
+
+@smallexample
+@group
+extern char _etext, _data, _edata, _bstart, _bend;
+char *src = &_etext;
+char *dst = &_data;
+
+/* ROM has data at end of text; copy it. */
+while (dst < &_edata)
+ *dst++ = *src++;
+
+/* Zero bss. */
+for (dst = &_bstart; dst< &_bend; dst++)
+ *dst = 0;
+@end group
+@end smallexample
+
+@node Forced Output Alignment
+@subsubsection Forced Output Alignment
+@kindex ALIGN(@var{section_align})
+@cindex forcing output section alignment
+@cindex output section alignment
+You can increase an output section's alignment by using ALIGN.
+
+@node Forced Input Alignment
+@subsubsection Forced Input Alignment
+@kindex SUBALIGN(@var{subsection_align})
+@cindex forcing input section alignment
+@cindex input section alignment
+You can force input section alignment within an output section by using
+SUBALIGN. The value specified overrides any alignment given by input
+sections, whether larger or smaller.
+
+@node Output Section Constraint
+@subsubsection Output Section Constraint
+@kindex ONLY_IF_RO
+@kindex ONLY_IF_RW
+@cindex constraints on output sections
+You can specify that an output section should only be created if all
+of its input sections are read-only or all of its input sections are
+read-write by using the keyword @code{ONLY_IF_RO} and
+@code{ONLY_IF_RW} respectively.
+
+@node Output Section Region
+@subsubsection Output Section Region
+@kindex >@var{region}
+@cindex section, assigning to memory region
+@cindex memory regions and sections
+You can assign a section to a previously defined region of memory by
+using @samp{>@var{region}}. @xref{MEMORY}.
+
+Here is a simple example:
+@smallexample
+@group
+MEMORY @{ rom : ORIGIN = 0x1000, LENGTH = 0x1000 @}
+SECTIONS @{ ROM : @{ *(.text) @} >rom @}
+@end group
+@end smallexample
+
+@node Output Section Phdr
+@subsubsection Output Section Phdr
+@kindex :@var{phdr}
+@cindex section, assigning to program header
+@cindex program headers and sections
+You can assign a section to a previously defined program segment by
+using @samp{:@var{phdr}}. @xref{PHDRS}. If a section is assigned to
+one or more segments, then all subsequent allocated sections will be
+assigned to those segments as well, unless they use an explicitly
+@code{:@var{phdr}} modifier. You can use @code{:NONE} to tell the
+linker to not put the section in any segment at all.
+
+Here is a simple example:
+@smallexample
+@group
+PHDRS @{ text PT_LOAD ; @}
+SECTIONS @{ .text : @{ *(.text) @} :text @}
+@end group
+@end smallexample
+
+@node Output Section Fill
+@subsubsection Output Section Fill
+@kindex =@var{fillexp}
+@cindex section fill pattern
+@cindex fill pattern, entire section
+You can set the fill pattern for an entire section by using
+@samp{=@var{fillexp}}. @var{fillexp} is an expression
+(@pxref{Expressions}). Any otherwise unspecified regions of memory
+within the output section (for example, gaps left due to the required
+alignment of input sections) will be filled with the value, repeated as
+necessary. If the fill expression is a simple hex number, ie. a string
+of hex digit starting with @samp{0x} and without a trailing @samp{k} or @samp{M}, then
+an arbitrarily long sequence of hex digits can be used to specify the
+fill pattern; Leading zeros become part of the pattern too. For all
+other cases, including extra parentheses or a unary @code{+}, the fill
+pattern is the four least significant bytes of the value of the
+expression. In all cases, the number is big-endian.
+
+You can also change the fill value with a @code{FILL} command in the
+output section commands; (@pxref{Output Section Data}).
+
+Here is a simple example:
+@smallexample
+@group
+SECTIONS @{ .text : @{ *(.text) @} =0x90909090 @}
+@end group
+@end smallexample
+
+@node Overlay Description
+@subsection Overlay Description
+@kindex OVERLAY
+@cindex overlays
+An overlay description provides an easy way to describe sections which
+are to be loaded as part of a single memory image but are to be run at
+the same memory address. At run time, some sort of overlay manager will
+copy the overlaid sections in and out of the runtime memory address as
+required, perhaps by simply manipulating addressing bits. This approach
+can be useful, for example, when a certain region of memory is faster
+than another.
+
+Overlays are described using the @code{OVERLAY} command. The
+@code{OVERLAY} command is used within a @code{SECTIONS} command, like an
+output section description. The full syntax of the @code{OVERLAY}
+command is as follows:
+@smallexample
+@group
+OVERLAY [@var{start}] : [NOCROSSREFS] [AT ( @var{ldaddr} )]
+ @{
+ @var{secname1}
+ @{
+ @var{output-section-command}
+ @var{output-section-command}
+ @dots{}
+ @} [:@var{phdr}@dots{}] [=@var{fill}]
+ @var{secname2}
+ @{
+ @var{output-section-command}
+ @var{output-section-command}
+ @dots{}
+ @} [:@var{phdr}@dots{}] [=@var{fill}]
+ @dots{}
+ @} [>@var{region}] [:@var{phdr}@dots{}] [=@var{fill}]
+@end group
+@end smallexample
+
+Everything is optional except @code{OVERLAY} (a keyword), and each
+section must have a name (@var{secname1} and @var{secname2} above). The
+section definitions within the @code{OVERLAY} construct are identical to
+those within the general @code{SECTIONS} contruct (@pxref{SECTIONS}),
+except that no addresses and no memory regions may be defined for
+sections within an @code{OVERLAY}.
+
+The sections are all defined with the same starting address. The load
+addresses of the sections are arranged such that they are consecutive in
+memory starting at the load address used for the @code{OVERLAY} as a
+whole (as with normal section definitions, the load address is optional,
+and defaults to the start address; the start address is also optional,
+and defaults to the current value of the location counter).
+
+If the @code{NOCROSSREFS} keyword is used, and there any references
+among the sections, the linker will report an error. Since the sections
+all run at the same address, it normally does not make sense for one
+section to refer directly to another. @xref{Miscellaneous Commands,
+NOCROSSREFS}.
+
+For each section within the @code{OVERLAY}, the linker automatically
+provides two symbols. The symbol @code{__load_start_@var{secname}} is
+defined as the starting load address of the section. The symbol
+@code{__load_stop_@var{secname}} is defined as the final load address of
+the section. Any characters within @var{secname} which are not legal
+within C identifiers are removed. C (or assembler) code may use these
+symbols to move the overlaid sections around as necessary.
+
+At the end of the overlay, the value of the location counter is set to
+the start address of the overlay plus the size of the largest section.
+
+Here is an example. Remember that this would appear inside a
+@code{SECTIONS} construct.
+@smallexample
+@group
+ OVERLAY 0x1000 : AT (0x4000)
+ @{
+ .text0 @{ o1/*.o(.text) @}
+ .text1 @{ o2/*.o(.text) @}
+ @}
+@end group
+@end smallexample
+@noindent
+This will define both @samp{.text0} and @samp{.text1} to start at
+address 0x1000. @samp{.text0} will be loaded at address 0x4000, and
+@samp{.text1} will be loaded immediately after @samp{.text0}. The
+following symbols will be defined if referenced: @code{__load_start_text0},
+@code{__load_stop_text0}, @code{__load_start_text1},
+@code{__load_stop_text1}.
+
+C code to copy overlay @code{.text1} into the overlay area might look
+like the following.
+
+@smallexample
+@group
+ extern char __load_start_text1, __load_stop_text1;
+ memcpy ((char *) 0x1000, &__load_start_text1,
+ &__load_stop_text1 - &__load_start_text1);
+@end group
+@end smallexample
+
+Note that the @code{OVERLAY} command is just syntactic sugar, since
+everything it does can be done using the more basic commands. The above
+example could have been written identically as follows.
+
+@smallexample
+@group
+ .text0 0x1000 : AT (0x4000) @{ o1/*.o(.text) @}
+ PROVIDE (__load_start_text0 = LOADADDR (.text0));
+ PROVIDE (__load_stop_text0 = LOADADDR (.text0) + SIZEOF (.text0));
+ .text1 0x1000 : AT (0x4000 + SIZEOF (.text0)) @{ o2/*.o(.text) @}
+ PROVIDE (__load_start_text1 = LOADADDR (.text1));
+ PROVIDE (__load_stop_text1 = LOADADDR (.text1) + SIZEOF (.text1));
+ . = 0x1000 + MAX (SIZEOF (.text0), SIZEOF (.text1));
+@end group
+@end smallexample
+
+@node MEMORY
+@section MEMORY Command
+@kindex MEMORY
+@cindex memory regions
+@cindex regions of memory
+@cindex allocating memory
+@cindex discontinuous memory
+The linker's default configuration permits allocation of all available
+memory. You can override this by using the @code{MEMORY} command.
+
+The @code{MEMORY} command describes the location and size of blocks of
+memory in the target. You can use it to describe which memory regions
+may be used by the linker, and which memory regions it must avoid. You
+can then assign sections to particular memory regions. The linker will
+set section addresses based on the memory regions, and will warn about
+regions that become too full. The linker will not shuffle sections
+around to fit into the available regions.
+
+A linker script may contain at most one use of the @code{MEMORY}
+command. However, you can define as many blocks of memory within it as
+you wish. The syntax is:
+@smallexample
+@group
+MEMORY
+ @{
+ @var{name} [(@var{attr})] : ORIGIN = @var{origin}, LENGTH = @var{len}
+ @dots{}
+ @}
+@end group
+@end smallexample
+
+The @var{name} is a name used in the linker script to refer to the
+region. The region name has no meaning outside of the linker script.
+Region names are stored in a separate name space, and will not conflict
+with symbol names, file names, or section names. Each memory region
+must have a distinct name within the @code{MEMORY} command. However you can
+add later alias names to existing memory regions with the @ref{REGION_ALIAS}
+command.
+
+@cindex memory region attributes
+The @var{attr} string is an optional list of attributes that specify
+whether to use a particular memory region for an input section which is
+not explicitly mapped in the linker script. As described in
+@ref{SECTIONS}, if you do not specify an output section for some input
+section, the linker will create an output section with the same name as
+the input section. If you define region attributes, the linker will use
+them to select the memory region for the output section that it creates.
+
+The @var{attr} string must consist only of the following characters:
+@table @samp
+@item R
+Read-only section
+@item W
+Read/write section
+@item X
+Executable section
+@item A
+Allocatable section
+@item I
+Initialized section
+@item L
+Same as @samp{I}
+@item !
+Invert the sense of any of the attributes that follow
+@end table
+
+If a unmapped section matches any of the listed attributes other than
+@samp{!}, it will be placed in the memory region. The @samp{!}
+attribute reverses this test, so that an unmapped section will be placed
+in the memory region only if it does not match any of the listed
+attributes.
+
+@kindex ORIGIN =
+@kindex o =
+@kindex org =
+The @var{origin} is an numerical expression for the start address of
+the memory region. The expression must evaluate to a constant and it
+cannot involve any symbols. The keyword @code{ORIGIN} may be
+abbreviated to @code{org} or @code{o} (but not, for example,
+@code{ORG}).
+
+@kindex LENGTH =
+@kindex len =
+@kindex l =
+The @var{len} is an expression for the size in bytes of the memory
+region. As with the @var{origin} expression, the expression must
+be numerical only and must evaluate to a constant. The keyword
+@code{LENGTH} may be abbreviated to @code{len} or @code{l}.
+
+In the following example, we specify that there are two memory regions
+available for allocation: one starting at @samp{0} for 256 kilobytes,
+and the other starting at @samp{0x40000000} for four megabytes. The
+linker will place into the @samp{rom} memory region every section which
+is not explicitly mapped into a memory region, and is either read-only
+or executable. The linker will place other sections which are not
+explicitly mapped into a memory region into the @samp{ram} memory
+region.
+
+@smallexample
+@group
+MEMORY
+ @{
+ rom (rx) : ORIGIN = 0, LENGTH = 256K
+ ram (!rx) : org = 0x40000000, l = 4M
+ @}
+@end group
+@end smallexample
+
+Once you define a memory region, you can direct the linker to place
+specific output sections into that memory region by using the
+@samp{>@var{region}} output section attribute. For example, if you have
+a memory region named @samp{mem}, you would use @samp{>mem} in the
+output section definition. @xref{Output Section Region}. If no address
+was specified for the output section, the linker will set the address to
+the next available address within the memory region. If the combined
+output sections directed to a memory region are too large for the
+region, the linker will issue an error message.
+
+It is possible to access the origin and length of a memory in an
+expression via the @code{ORIGIN(@var{memory})} and
+@code{LENGTH(@var{memory})} functions:
+
+@smallexample
+@group
+ _fstack = ORIGIN(ram) + LENGTH(ram) - 4;
+@end group
+@end smallexample
+
+@node PHDRS
+@section PHDRS Command
+@kindex PHDRS
+@cindex program headers
+@cindex ELF program headers
+@cindex program segments
+@cindex segments, ELF
+The ELF object file format uses @dfn{program headers}, also knows as
+@dfn{segments}. The program headers describe how the program should be
+loaded into memory. You can print them out by using the @code{objdump}
+program with the @samp{-p} option.
+
+When you run an ELF program on a native ELF system, the system loader
+reads the program headers in order to figure out how to load the
+program. This will only work if the program headers are set correctly.
+This manual does not describe the details of how the system loader
+interprets program headers; for more information, see the ELF ABI.
+
+The linker will create reasonable program headers by default. However,
+in some cases, you may need to specify the program headers more
+precisely. You may use the @code{PHDRS} command for this purpose. When
+the linker sees the @code{PHDRS} command in the linker script, it will
+not create any program headers other than the ones specified.
+
+The linker only pays attention to the @code{PHDRS} command when
+generating an ELF output file. In other cases, the linker will simply
+ignore @code{PHDRS}.
+
+This is the syntax of the @code{PHDRS} command. The words @code{PHDRS},
+@code{FILEHDR}, @code{AT}, and @code{FLAGS} are keywords.
+
+@smallexample
+@group
+PHDRS
+@{
+ @var{name} @var{type} [ FILEHDR ] [ PHDRS ] [ AT ( @var{address} ) ]
+ [ FLAGS ( @var{flags} ) ] ;
+@}
+@end group
+@end smallexample
+
+The @var{name} is used only for reference in the @code{SECTIONS} command
+of the linker script. It is not put into the output file. Program
+header names are stored in a separate name space, and will not conflict
+with symbol names, file names, or section names. Each program header
+must have a distinct name. The headers are processed in order and it
+is usual for them to map to sections in ascending load address order.
+
+Certain program header types describe segments of memory which the
+system loader will load from the file. In the linker script, you
+specify the contents of these segments by placing allocatable output
+sections in the segments. You use the @samp{:@var{phdr}} output section
+attribute to place a section in a particular segment. @xref{Output
+Section Phdr}.
+
+It is normal to put certain sections in more than one segment. This
+merely implies that one segment of memory contains another. You may
+repeat @samp{:@var{phdr}}, using it once for each segment which should
+contain the section.
+
+If you place a section in one or more segments using @samp{:@var{phdr}},
+then the linker will place all subsequent allocatable sections which do
+not specify @samp{:@var{phdr}} in the same segments. This is for
+convenience, since generally a whole set of contiguous sections will be
+placed in a single segment. You can use @code{:NONE} to override the
+default segment and tell the linker to not put the section in any
+segment at all.
+
+@kindex FILEHDR
+@kindex PHDRS
+You may use the @code{FILEHDR} and @code{PHDRS} keywords after
+the program header type to further describe the contents of the segment.
+The @code{FILEHDR} keyword means that the segment should include the ELF
+file header. The @code{PHDRS} keyword means that the segment should
+include the ELF program headers themselves. If applied to a loadable
+segment (@code{PT_LOAD}), all prior loadable segments must have one of
+these keywords.
+
+The @var{type} may be one of the following. The numbers indicate the
+value of the keyword.
+
+@table @asis
+@item @code{PT_NULL} (0)
+Indicates an unused program header.
+
+@item @code{PT_LOAD} (1)
+Indicates that this program header describes a segment to be loaded from
+the file.
+
+@item @code{PT_DYNAMIC} (2)
+Indicates a segment where dynamic linking information can be found.
+
+@item @code{PT_INTERP} (3)
+Indicates a segment where the name of the program interpreter may be
+found.
+
+@item @code{PT_NOTE} (4)
+Indicates a segment holding note information.
+
+@item @code{PT_SHLIB} (5)
+A reserved program header type, defined but not specified by the ELF
+ABI.
+
+@item @code{PT_PHDR} (6)
+Indicates a segment where the program headers may be found.
+
+@item @var{expression}
+An expression giving the numeric type of the program header. This may
+be used for types not defined above.
+@end table
+
+You can specify that a segment should be loaded at a particular address
+in memory by using an @code{AT} expression. This is identical to the
+@code{AT} command used as an output section attribute (@pxref{Output
+Section LMA}). The @code{AT} command for a program header overrides the
+output section attribute.
+
+The linker will normally set the segment flags based on the sections
+which comprise the segment. You may use the @code{FLAGS} keyword to
+explicitly specify the segment flags. The value of @var{flags} must be
+an integer. It is used to set the @code{p_flags} field of the program
+header.
+
+Here is an example of @code{PHDRS}. This shows a typical set of program
+headers used on a native ELF system.
+
+@example
+@group
+PHDRS
+@{
+ headers PT_PHDR PHDRS ;
+ interp PT_INTERP ;
+ text PT_LOAD FILEHDR PHDRS ;
+ data PT_LOAD ;
+ dynamic PT_DYNAMIC ;
+@}
+
+SECTIONS
+@{
+ . = SIZEOF_HEADERS;
+ .interp : @{ *(.interp) @} :text :interp
+ .text : @{ *(.text) @} :text
+ .rodata : @{ *(.rodata) @} /* defaults to :text */
+ @dots{}
+ . = . + 0x1000; /* move to a new page in memory */
+ .data : @{ *(.data) @} :data
+ .dynamic : @{ *(.dynamic) @} :data :dynamic
+ @dots{}
+@}
+@end group
+@end example
+
+@node VERSION
+@section VERSION Command
+@kindex VERSION @{script text@}
+@cindex symbol versions
+@cindex version script
+@cindex versions of symbols
+The linker supports symbol versions when using ELF. Symbol versions are
+only useful when using shared libraries. The dynamic linker can use
+symbol versions to select a specific version of a function when it runs
+a program that may have been linked against an earlier version of the
+shared library.
+
+You can include a version script directly in the main linker script, or
+you can supply the version script as an implicit linker script. You can
+also use the @samp{--version-script} linker option.
+
+The syntax of the @code{VERSION} command is simply
+@smallexample
+VERSION @{ version-script-commands @}
+@end smallexample
+
+The format of the version script commands is identical to that used by
+Sun's linker in Solaris 2.5. The version script defines a tree of
+version nodes. You specify the node names and interdependencies in the
+version script. You can specify which symbols are bound to which
+version nodes, and you can reduce a specified set of symbols to local
+scope so that they are not globally visible outside of the shared
+library.
+
+The easiest way to demonstrate the version script language is with a few
+examples.
+
+@smallexample
+VERS_1.1 @{
+ global:
+ foo1;
+ local:
+ old*;
+ original*;
+ new*;
+@};
+
+VERS_1.2 @{
+ foo2;
+@} VERS_1.1;
+
+VERS_2.0 @{
+ bar1; bar2;
+ extern "C++" @{
+ ns::*;
+ "f(int, double)";
+ @};
+@} VERS_1.2;
+@end smallexample
+
+This example version script defines three version nodes. The first
+version node defined is @samp{VERS_1.1}; it has no other dependencies.
+The script binds the symbol @samp{foo1} to @samp{VERS_1.1}. It reduces
+a number of symbols to local scope so that they are not visible outside
+of the shared library; this is done using wildcard patterns, so that any
+symbol whose name begins with @samp{old}, @samp{original}, or @samp{new}
+is matched. The wildcard patterns available are the same as those used
+in the shell when matching filenames (also known as ``globbing'').
+However, if you specify the symbol name inside double quotes, then the
+name is treated as literal, rather than as a glob pattern.
+
+Next, the version script defines node @samp{VERS_1.2}. This node
+depends upon @samp{VERS_1.1}. The script binds the symbol @samp{foo2}
+to the version node @samp{VERS_1.2}.
+
+Finally, the version script defines node @samp{VERS_2.0}. This node
+depends upon @samp{VERS_1.2}. The scripts binds the symbols @samp{bar1}
+and @samp{bar2} are bound to the version node @samp{VERS_2.0}.
+
+When the linker finds a symbol defined in a library which is not
+specifically bound to a version node, it will effectively bind it to an
+unspecified base version of the library. You can bind all otherwise
+unspecified symbols to a given version node by using @samp{global: *;}
+somewhere in the version script. Note that it's slightly crazy to use
+wildcards in a global spec except on the last version node. Global
+wildcards elsewhere run the risk of accidentally adding symbols to the
+set exported for an old version. That's wrong since older versions
+ought to have a fixed set of symbols.
+
+The names of the version nodes have no specific meaning other than what
+they might suggest to the person reading them. The @samp{2.0} version
+could just as well have appeared in between @samp{1.1} and @samp{1.2}.
+However, this would be a confusing way to write a version script.
+
+Node name can be omitted, provided it is the only version node
+in the version script. Such version script doesn't assign any versions to
+symbols, only selects which symbols will be globally visible out and which
+won't.
+
+@smallexample
+@{ global: foo; bar; local: *; @};
+@end smallexample
+
+When you link an application against a shared library that has versioned
+symbols, the application itself knows which version of each symbol it
+requires, and it also knows which version nodes it needs from each
+shared library it is linked against. Thus at runtime, the dynamic
+loader can make a quick check to make sure that the libraries you have
+linked against do in fact supply all of the version nodes that the
+application will need to resolve all of the dynamic symbols. In this
+way it is possible for the dynamic linker to know with certainty that
+all external symbols that it needs will be resolvable without having to
+search for each symbol reference.
+
+The symbol versioning is in effect a much more sophisticated way of
+doing minor version checking that SunOS does. The fundamental problem
+that is being addressed here is that typically references to external
+functions are bound on an as-needed basis, and are not all bound when
+the application starts up. If a shared library is out of date, a
+required interface may be missing; when the application tries to use
+that interface, it may suddenly and unexpectedly fail. With symbol
+versioning, the user will get a warning when they start their program if
+the libraries being used with the application are too old.
+
+There are several GNU extensions to Sun's versioning approach. The
+first of these is the ability to bind a symbol to a version node in the
+source file where the symbol is defined instead of in the versioning
+script. This was done mainly to reduce the burden on the library
+maintainer. You can do this by putting something like:
+@smallexample
+__asm__(".symver original_foo,foo@@VERS_1.1");
+@end smallexample
+@noindent
+in the C source file. This renames the function @samp{original_foo} to
+be an alias for @samp{foo} bound to the version node @samp{VERS_1.1}.
+The @samp{local:} directive can be used to prevent the symbol
+@samp{original_foo} from being exported. A @samp{.symver} directive
+takes precedence over a version script.
+
+The second GNU extension is to allow multiple versions of the same
+function to appear in a given shared library. In this way you can make
+an incompatible change to an interface without increasing the major
+version number of the shared library, while still allowing applications
+linked against the old interface to continue to function.
+
+To do this, you must use multiple @samp{.symver} directives in the
+source file. Here is an example:
+
+@smallexample
+__asm__(".symver original_foo,foo@@");
+__asm__(".symver old_foo,foo@@VERS_1.1");
+__asm__(".symver old_foo1,foo@@VERS_1.2");
+__asm__(".symver new_foo,foo@@@@VERS_2.0");
+@end smallexample
+
+In this example, @samp{foo@@} represents the symbol @samp{foo} bound to the
+unspecified base version of the symbol. The source file that contains this
+example would define 4 C functions: @samp{original_foo}, @samp{old_foo},
+@samp{old_foo1}, and @samp{new_foo}.
+
+When you have multiple definitions of a given symbol, there needs to be
+some way to specify a default version to which external references to
+this symbol will be bound. You can do this with the
+@samp{foo@@@@VERS_2.0} type of @samp{.symver} directive. You can only
+declare one version of a symbol as the default in this manner; otherwise
+you would effectively have multiple definitions of the same symbol.
+
+If you wish to bind a reference to a specific version of the symbol
+within the shared library, you can use the aliases of convenience
+(i.e., @samp{old_foo}), or you can use the @samp{.symver} directive to
+specifically bind to an external version of the function in question.
+
+You can also specify the language in the version script:
+
+@smallexample
+VERSION extern "lang" @{ version-script-commands @}
+@end smallexample
+
+The supported @samp{lang}s are @samp{C}, @samp{C++}, and @samp{Java}.
+The linker will iterate over the list of symbols at the link time and
+demangle them according to @samp{lang} before matching them to the
+patterns specified in @samp{version-script-commands}. The default
+@samp{lang} is @samp{C}.
+
+Demangled names may contains spaces and other special characters. As
+described above, you can use a glob pattern to match demangled names,
+or you can use a double-quoted string to match the string exactly. In
+the latter case, be aware that minor differences (such as differing
+whitespace) between the version script and the demangler output will
+cause a mismatch. As the exact string generated by the demangler
+might change in the future, even if the mangled name does not, you
+should check that all of your version directives are behaving as you
+expect when you upgrade.
+
+@node Expressions
+@section Expressions in Linker Scripts
+@cindex expressions
+@cindex arithmetic
+The syntax for expressions in the linker script language is identical to
+that of C expressions. All expressions are evaluated as integers. All
+expressions are evaluated in the same size, which is 32 bits if both the
+host and target are 32 bits, and is otherwise 64 bits.
+
+You can use and set symbol values in expressions.
+
+The linker defines several special purpose builtin functions for use in
+expressions.
+
+@menu
+* Constants:: Constants
+* Symbolic Constants:: Symbolic constants
+* Symbols:: Symbol Names
+* Orphan Sections:: Orphan Sections
+* Location Counter:: The Location Counter
+* Operators:: Operators
+* Evaluation:: Evaluation
+* Expression Section:: The Section of an Expression
+* Builtin Functions:: Builtin Functions
+@end menu
+
+@node Constants
+@subsection Constants
+@cindex integer notation
+@cindex constants in linker scripts
+All constants are integers.
+
+As in C, the linker considers an integer beginning with @samp{0} to be
+octal, and an integer beginning with @samp{0x} or @samp{0X} to be
+hexadecimal. Alternatively the linker accepts suffixes of @samp{h} or
+@samp{H} for hexadeciaml, @samp{o} or @samp{O} for octal, @samp{b} or
+@samp{B} for binary and @samp{d} or @samp{D} for decimal. Any integer
+value without a prefix or a suffix is considered to be decimal.
+
+@cindex scaled integers
+@cindex K and M integer suffixes
+@cindex M and K integer suffixes
+@cindex suffixes for integers
+@cindex integer suffixes
+In addition, you can use the suffixes @code{K} and @code{M} to scale a
+constant by
+@c TEXI2ROFF-KILL
+@ifnottex
+@c END TEXI2ROFF-KILL
+@code{1024} or @code{1024*1024}
+@c TEXI2ROFF-KILL
+@end ifnottex
+@tex
+${\rm 1024}$ or ${\rm 1024}^2$
+@end tex
+@c END TEXI2ROFF-KILL
+respectively. For example, the following
+all refer to the same quantity:
+
+@smallexample
+_fourk_1 = 4K;
+_fourk_2 = 4096;
+_fourk_3 = 0x1000;
+_fourk_4 = 10000o;
+@end smallexample
+
+Note - the @code{K} and @code{M} suffixes cannot be used in
+conjunction with the base suffixes mentioned above.
+
+@node Symbolic Constants
+@subsection Symbolic Constants
+@cindex symbolic constants
+@kindex CONSTANT
+It is possible to refer to target specific constants via the use of
+the @code{CONSTANT(@var{name})} operator, where @var{name} is one of:
+
+@table @code
+@item MAXPAGESIZE
+@kindex MAXPAGESIZE
+The target's maximum page size.
+
+@item COMMONPAGESIZE
+@kindex COMMONPAGESIZE
+The target's default page size.
+@end table
+
+So for example:
+
+@smallexample
+ .text ALIGN (CONSTANT (MAXPAGESIZE)) : @{ *(.text) @}
+@end smallexample
+
+will create a text section aligned to the largest page boundary
+supported by the target.
+
+@node Symbols
+@subsection Symbol Names
+@cindex symbol names
+@cindex names
+@cindex quoted symbol names
+@kindex "
+Unless quoted, symbol names start with a letter, underscore, or period
+and may include letters, digits, underscores, periods, and hyphens.
+Unquoted symbol names must not conflict with any keywords. You can
+specify a symbol which contains odd characters or has the same name as a
+keyword by surrounding the symbol name in double quotes:
+@smallexample
+"SECTION" = 9;
+"with a space" = "also with a space" + 10;
+@end smallexample
+
+Since symbols can contain many non-alphabetic characters, it is safest
+to delimit symbols with spaces. For example, @samp{A-B} is one symbol,
+whereas @samp{A - B} is an expression involving subtraction.
+
+@node Orphan Sections
+@subsection Orphan Sections
+@cindex orphan
+Orphan sections are sections present in the input files which
+are not explicitly placed into the output file by the linker
+script. The linker will still copy these sections into the
+output file, but it has to guess as to where they should be
+placed. The linker uses a simple heuristic to do this. It
+attempts to place orphan sections after non-orphan sections of the
+same attribute, such as code vs data, loadable vs non-loadable, etc.
+If there is not enough room to do this then it places
+at the end of the file.
+
+For ELF targets, the attribute of the section includes section type as
+well as section flag.
+
+If an orphaned section's name is representable as a C identifier then
+the linker will automatically @pxref{PROVIDE} two symbols:
+__start_SECNAME and __end_SECNAME, where SECNAME is the name of the
+section. These indicate the start address and end address of the
+orphaned section respectively. Note: most section names are not
+representable as C identifiers because they contain a @samp{.}
+character.
+
+@node Location Counter
+@subsection The Location Counter
+@kindex .
+@cindex dot
+@cindex location counter
+@cindex current output location
+The special linker variable @dfn{dot} @samp{.} always contains the
+current output location counter. Since the @code{.} always refers to a
+location in an output section, it may only appear in an expression
+within a @code{SECTIONS} command. The @code{.} symbol may appear
+anywhere that an ordinary symbol is allowed in an expression.
+
+@cindex holes
+Assigning a value to @code{.} will cause the location counter to be
+moved. This may be used to create holes in the output section. The
+location counter may not be moved backwards inside an output section,
+and may not be moved backwards outside of an output section if so
+doing creates areas with overlapping LMAs.
+
+@smallexample
+SECTIONS
+@{
+ output :
+ @{
+ file1(.text)
+ . = . + 1000;
+ file2(.text)
+ . += 1000;
+ file3(.text)
+ @} = 0x12345678;
+@}
+@end smallexample
+@noindent
+In the previous example, the @samp{.text} section from @file{file1} is
+located at the beginning of the output section @samp{output}. It is
+followed by a 1000 byte gap. Then the @samp{.text} section from
+@file{file2} appears, also with a 1000 byte gap following before the
+@samp{.text} section from @file{file3}. The notation @samp{= 0x12345678}
+specifies what data to write in the gaps (@pxref{Output Section Fill}).
+
+@cindex dot inside sections
+Note: @code{.} actually refers to the byte offset from the start of the
+current containing object. Normally this is the @code{SECTIONS}
+statement, whose start address is 0, hence @code{.} can be used as an
+absolute address. If @code{.} is used inside a section description
+however, it refers to the byte offset from the start of that section,
+not an absolute address. Thus in a script like this:
+
+@smallexample
+SECTIONS
+@{
+ . = 0x100
+ .text: @{
+ *(.text)
+ . = 0x200
+ @}
+ . = 0x500
+ .data: @{
+ *(.data)
+ . += 0x600
+ @}
+@}
+@end smallexample
+
+The @samp{.text} section will be assigned a starting address of 0x100
+and a size of exactly 0x200 bytes, even if there is not enough data in
+the @samp{.text} input sections to fill this area. (If there is too
+much data, an error will be produced because this would be an attempt to
+move @code{.} backwards). The @samp{.data} section will start at 0x500
+and it will have an extra 0x600 bytes worth of space after the end of
+the values from the @samp{.data} input sections and before the end of
+the @samp{.data} output section itself.
+
+@cindex dot outside sections
+Setting symbols to the value of the location counter outside of an
+output section statement can result in unexpected values if the linker
+needs to place orphan sections. For example, given the following:
+
+@smallexample
+SECTIONS
+@{
+ start_of_text = . ;
+ .text: @{ *(.text) @}
+ end_of_text = . ;
+
+ start_of_data = . ;
+ .data: @{ *(.data) @}
+ end_of_data = . ;
+@}
+@end smallexample
+
+If the linker needs to place some input section, e.g. @code{.rodata},
+not mentioned in the script, it might choose to place that section
+between @code{.text} and @code{.data}. You might think the linker
+should place @code{.rodata} on the blank line in the above script, but
+blank lines are of no particular significance to the linker. As well,
+the linker doesn't associate the above symbol names with their
+sections. Instead, it assumes that all assignments or other
+statements belong to the previous output section, except for the
+special case of an assignment to @code{.}. I.e., the linker will
+place the orphan @code{.rodata} section as if the script was written
+as follows:
+
+@smallexample
+SECTIONS
+@{
+ start_of_text = . ;
+ .text: @{ *(.text) @}
+ end_of_text = . ;
+
+ start_of_data = . ;
+ .rodata: @{ *(.rodata) @}
+ .data: @{ *(.data) @}
+ end_of_data = . ;
+@}
+@end smallexample
+
+This may or may not be the script author's intention for the value of
+@code{start_of_data}. One way to influence the orphan section
+placement is to assign the location counter to itself, as the linker
+assumes that an assignment to @code{.} is setting the start address of
+a following output section and thus should be grouped with that
+section. So you could write:
+
+@smallexample
+SECTIONS
+@{
+ start_of_text = . ;
+ .text: @{ *(.text) @}
+ end_of_text = . ;
+
+ . = . ;
+ start_of_data = . ;
+ .data: @{ *(.data) @}
+ end_of_data = . ;
+@}
+@end smallexample
+
+Now, the orphan @code{.rodata} section will be placed between
+@code{end_of_text} and @code{start_of_data}.
+
+@need 2000
+@node Operators
+@subsection Operators
+@cindex operators for arithmetic
+@cindex arithmetic operators
+@cindex precedence in expressions
+The linker recognizes the standard C set of arithmetic operators, with
+the standard bindings and precedence levels:
+@c TEXI2ROFF-KILL
+@ifnottex
+@c END TEXI2ROFF-KILL
+@smallexample
+precedence associativity Operators Notes
+(highest)
+1 left ! - ~ (1)
+2 left * / %
+3 left + -
+4 left >> <<
+5 left == != > < <= >=
+6 left &
+7 left |
+8 left &&
+9 left ||
+10 right ? :
+11 right &= += -= *= /= (2)
+(lowest)
+@end smallexample
+Notes:
+(1) Prefix operators
+(2) @xref{Assignments}.
+@c TEXI2ROFF-KILL
+@end ifnottex
+@tex
+\vskip \baselineskip
+%"lispnarrowing" is the extra indent used generally for smallexample
+\hskip\lispnarrowing\vbox{\offinterlineskip
+\hrule
+\halign
+{\vrule#&\strut\hfil\ #\ \hfil&\vrule#&\strut\hfil\ #\ \hfil&\vrule#&\strut\hfil\ {\tt #}\ \hfil&\vrule#\cr
+height2pt&\omit&&\omit&&\omit&\cr
+&Precedence&& Associativity &&{\rm Operators}&\cr
+height2pt&\omit&&\omit&&\omit&\cr
+\noalign{\hrule}
+height2pt&\omit&&\omit&&\omit&\cr
+&highest&&&&&\cr
+% '176 is tilde, '~' in tt font
+&1&&left&&\qquad- \char'176\ !\qquad\dag&\cr
+&2&&left&&* / \%&\cr
+&3&&left&&+ -&\cr
+&4&&left&&>> <<&\cr
+&5&&left&&== != > < <= >=&\cr
+&6&&left&&\&&\cr
+&7&&left&&|&\cr
+&8&&left&&{\&\&}&\cr
+&9&&left&&||&\cr
+&10&&right&&? :&\cr
+&11&&right&&\qquad\&= += -= *= /=\qquad\ddag&\cr
+&lowest&&&&&\cr
+height2pt&\omit&&\omit&&\omit&\cr}
+\hrule}
+@end tex
+@iftex
+{
+@obeylines@parskip=0pt@parindent=0pt
+@dag@quad Prefix operators.
+@ddag@quad @xref{Assignments}.
+}
+@end iftex
+@c END TEXI2ROFF-KILL
+
+@node Evaluation
+@subsection Evaluation
+@cindex lazy evaluation
+@cindex expression evaluation order
+The linker evaluates expressions lazily. It only computes the value of
+an expression when absolutely necessary.
+
+The linker needs some information, such as the value of the start
+address of the first section, and the origins and lengths of memory
+regions, in order to do any linking at all. These values are computed
+as soon as possible when the linker reads in the linker script.
+
+However, other values (such as symbol values) are not known or needed
+until after storage allocation. Such values are evaluated later, when
+other information (such as the sizes of output sections) is available
+for use in the symbol assignment expression.
+
+The sizes of sections cannot be known until after allocation, so
+assignments dependent upon these are not performed until after
+allocation.
+
+Some expressions, such as those depending upon the location counter
+@samp{.}, must be evaluated during section allocation.
+
+If the result of an expression is required, but the value is not
+available, then an error results. For example, a script like the
+following
+@smallexample
+@group
+SECTIONS
+ @{
+ .text 9+this_isnt_constant :
+ @{ *(.text) @}
+ @}
+@end group
+@end smallexample
+@noindent
+will cause the error message @samp{non constant expression for initial
+address}.
+
+@node Expression Section
+@subsection The Section of an Expression
+@cindex expression sections
+@cindex absolute expressions
+@cindex relative expressions
+@cindex absolute and relocatable symbols
+@cindex relocatable and absolute symbols
+@cindex symbols, relocatable and absolute
+Addresses and symbols may be section relative, or absolute. A section
+relative symbol is relocatable. If you request relocatable output
+using the @samp{-r} option, a further link operation may change the
+value of a section relative symbol. On the other hand, an absolute
+symbol will retain the same value throughout any further link
+operations.
+
+Some terms in linker expressions are addresses. This is true of
+section relative symbols and for builtin functions that return an
+address, such as @code{ADDR}, @code{LOADADDR}, @code{ORIGIN} and
+@code{SEGMENT_START}. Other terms are simply numbers, or are builtin
+functions that return a non-address value, such as @code{LENGTH}.
+
+When the linker evaluates an expression, the result depends on where
+the expression is located in a linker script. Expressions appearing
+outside an output section definitions are evaluated with all terms
+first being converted to absolute addresses before applying operators,
+and evaluate to an absolute address result. Expressions appearing
+inside an output section definition are evaluated with more complex
+rules, but the aim is to treat terms as relative addresses and produce
+a relative address result. In particular, an assignment of a number
+to a symbol results in a symbol relative to the output section with an
+offset given by the number. So, in the following simple example,
+
+@smallexample
+@group
+SECTIONS
+ @{
+ . = 0x100;
+ __executable_start = 0x100;
+ .data :
+ @{
+ . = 0x10;
+ __data_start = 0x10;
+ *(.data)
+ @}
+ @dots{}
+ @}
+@end group
+@end smallexample
+
+both @code{.} and @code{__executable_start} are set to the absolute
+address 0x100 in the first two assignments, then both @code{.} and
+@code{__data_start} are set to 0x10 relative to the @code{.data}
+section in the second two assignments.
+
+For expressions appearing inside an output section definition
+involving numbers, relative addresses and absolute addresses, ld
+follows these rules to evaluate terms:
+
+@itemize @bullet
+@item
+Unary operations on a relative address, and binary operations on two
+relative addresses in the same section or between one relative address
+and a number, apply the operator to the offset part of the address(es).
+@item
+Unary operations on an absolute address, and binary operations on one
+or more absolute addresses or on two relative addresses not in the
+same section, first convert any non-absolute term to an absolute
+address before applying the operator.
+@end itemize
+
+The result section of each sub-expression is as follows:
+
+@itemize @bullet
+@item
+An operation involving only numbers results in a number.
+@item
+The result of comparisons, @samp{&&} and @samp{||} is also a number.
+@item
+The result of other operations on relative addresses (after above
+conversions) is a relative address in the same section as the operand(s).
+@item
+The result of other operations on absolute addresses (after above
+conversions) is an absolute address.
+@end itemize
+
+You can use the builtin function @code{ABSOLUTE} to force an expression
+to be absolute when it would otherwise be relative. For example, to
+create an absolute symbol set to the address of the end of the output
+section @samp{.data}:
+@smallexample
+SECTIONS
+ @{
+ .data : @{ *(.data) _edata = ABSOLUTE(.); @}
+ @}
+@end smallexample
+@noindent
+If @samp{ABSOLUTE} were not used, @samp{_edata} would be relative to the
+@samp{.data} section.
+
+Using @code{LOADADDR} also forces an expression absolute, since this
+particular builtin function returns an absolute address.
+
+@node Builtin Functions
+@subsection Builtin Functions
+@cindex functions in expressions
+The linker script language includes a number of builtin functions for
+use in linker script expressions.
+
+@table @code
+@item ABSOLUTE(@var{exp})
+@kindex ABSOLUTE(@var{exp})
+@cindex expression, absolute
+Return the absolute (non-relocatable, as opposed to non-negative) value
+of the expression @var{exp}. Primarily useful to assign an absolute
+value to a symbol within a section definition, where symbol values are
+normally section relative. @xref{Expression Section}.
+
+@item ADDR(@var{section})
+@kindex ADDR(@var{section})
+@cindex section address in expression
+Return the address (VMA) of the named @var{section}. Your
+script must previously have defined the location of that section. In
+the following example, @code{start_of_output_1}, @code{symbol_1} and
+@code{symbol_2} are assigned equivalent values, except that
+@code{symbol_1} will be relative to the @code{.output1} section while
+the other two will be absolute:
+@smallexample
+@group
+SECTIONS @{ @dots{}
+ .output1 :
+ @{
+ start_of_output_1 = ABSOLUTE(.);
+ @dots{}
+ @}
+ .output :
+ @{
+ symbol_1 = ADDR(.output1);
+ symbol_2 = start_of_output_1;
+ @}
+@dots{} @}
+@end group
+@end smallexample
+
+@item ALIGN(@var{align})
+@itemx ALIGN(@var{exp},@var{align})
+@kindex ALIGN(@var{align})
+@kindex ALIGN(@var{exp},@var{align})
+@cindex round up location counter
+@cindex align location counter
+@cindex round up expression
+@cindex align expression
+Return the location counter (@code{.}) or arbitrary expression aligned
+to the next @var{align} boundary. The single operand @code{ALIGN}
+doesn't change the value of the location counter---it just does
+arithmetic on it. The two operand @code{ALIGN} allows an arbitrary
+expression to be aligned upwards (@code{ALIGN(@var{align})} is
+equivalent to @code{ALIGN(., @var{align})}).
+
+Here is an example which aligns the output @code{.data} section to the
+next @code{0x2000} byte boundary after the preceding section and sets a
+variable within the section to the next @code{0x8000} boundary after the
+input sections:
+@smallexample
+@group
+SECTIONS @{ @dots{}
+ .data ALIGN(0x2000): @{
+ *(.data)
+ variable = ALIGN(0x8000);
+ @}
+@dots{} @}
+@end group
+@end smallexample
+@noindent
+The first use of @code{ALIGN} in this example specifies the location of
+a section because it is used as the optional @var{address} attribute of
+a section definition (@pxref{Output Section Address}). The second use
+of @code{ALIGN} is used to defines the value of a symbol.
+
+The builtin function @code{NEXT} is closely related to @code{ALIGN}.
+
+@item ALIGNOF(@var{section})
+@kindex ALIGNOF(@var{section})
+@cindex section alignment
+Return the alignment in bytes of the named @var{section}, if that section has
+been allocated. If the section has not been allocated when this is
+evaluated, the linker will report an error. In the following example,
+the alignment of the @code{.output} section is stored as the first
+value in that section.
+@smallexample
+@group
+SECTIONS@{ @dots{}
+ .output @{
+ LONG (ALIGNOF (.output))
+ @dots{}
+ @}
+@dots{} @}
+@end group
+@end smallexample
+
+@item BLOCK(@var{exp})
+@kindex BLOCK(@var{exp})
+This is a synonym for @code{ALIGN}, for compatibility with older linker
+scripts. It is most often seen when setting the address of an output
+section.
+
+@item DATA_SEGMENT_ALIGN(@var{maxpagesize}, @var{commonpagesize})
+@kindex DATA_SEGMENT_ALIGN(@var{maxpagesize}, @var{commonpagesize})
+This is equivalent to either
+@smallexample
+(ALIGN(@var{maxpagesize}) + (. & (@var{maxpagesize} - 1)))
+@end smallexample
+or
+@smallexample
+(ALIGN(@var{maxpagesize}) + (. & (@var{maxpagesize} - @var{commonpagesize})))
+@end smallexample
+@noindent
+depending on whether the latter uses fewer @var{commonpagesize} sized pages
+for the data segment (area between the result of this expression and
+@code{DATA_SEGMENT_END}) than the former or not.
+If the latter form is used, it means @var{commonpagesize} bytes of runtime
+memory will be saved at the expense of up to @var{commonpagesize} wasted
+bytes in the on-disk file.
+
+This expression can only be used directly in @code{SECTIONS} commands, not in
+any output section descriptions and only once in the linker script.
+@var{commonpagesize} should be less or equal to @var{maxpagesize} and should
+be the system page size the object wants to be optimized for (while still
+working on system page sizes up to @var{maxpagesize}).
+
+@noindent
+Example:
+@smallexample
+ . = DATA_SEGMENT_ALIGN(0x10000, 0x2000);
+@end smallexample
+
+@item DATA_SEGMENT_END(@var{exp})
+@kindex DATA_SEGMENT_END(@var{exp})
+This defines the end of data segment for @code{DATA_SEGMENT_ALIGN}
+evaluation purposes.
+
+@smallexample
+ . = DATA_SEGMENT_END(.);
+@end smallexample
+
+@item DATA_SEGMENT_RELRO_END(@var{offset}, @var{exp})
+@kindex DATA_SEGMENT_RELRO_END(@var{offset}, @var{exp})
+This defines the end of the @code{PT_GNU_RELRO} segment when
+@samp{-z relro} option is used. Second argument is returned.
+When @samp{-z relro} option is not present, @code{DATA_SEGMENT_RELRO_END}
+does nothing, otherwise @code{DATA_SEGMENT_ALIGN} is padded so that
+@var{exp} + @var{offset} is aligned to the most commonly used page
+boundary for particular target. If present in the linker script,
+it must always come in between @code{DATA_SEGMENT_ALIGN} and
+@code{DATA_SEGMENT_END}.
+
+@smallexample
+ . = DATA_SEGMENT_RELRO_END(24, .);
+@end smallexample
+
+@item DEFINED(@var{symbol})
+@kindex DEFINED(@var{symbol})
+@cindex symbol defaults
+Return 1 if @var{symbol} is in the linker global symbol table and is
+defined before the statement using DEFINED in the script, otherwise
+return 0. You can use this function to provide
+default values for symbols. For example, the following script fragment
+shows how to set a global symbol @samp{begin} to the first location in
+the @samp{.text} section---but if a symbol called @samp{begin} already
+existed, its value is preserved:
+
+@smallexample
+@group
+SECTIONS @{ @dots{}
+ .text : @{
+ begin = DEFINED(begin) ? begin : . ;
+ @dots{}
+ @}
+ @dots{}
+@}
+@end group
+@end smallexample
+
+@item LENGTH(@var{memory})
+@kindex LENGTH(@var{memory})
+Return the length of the memory region named @var{memory}.
+
+@item LOADADDR(@var{section})
+@kindex LOADADDR(@var{section})
+@cindex section load address in expression
+Return the absolute LMA of the named @var{section}. (@pxref{Output
+Section LMA}).
+
+@kindex MAX
+@item MAX(@var{exp1}, @var{exp2})
+Returns the maximum of @var{exp1} and @var{exp2}.
+
+@kindex MIN
+@item MIN(@var{exp1}, @var{exp2})
+Returns the minimum of @var{exp1} and @var{exp2}.
+
+@item NEXT(@var{exp})
+@kindex NEXT(@var{exp})
+@cindex unallocated address, next
+Return the next unallocated address that is a multiple of @var{exp}.
+This function is closely related to @code{ALIGN(@var{exp})}; unless you
+use the @code{MEMORY} command to define discontinuous memory for the
+output file, the two functions are equivalent.
+
+@item ORIGIN(@var{memory})
+@kindex ORIGIN(@var{memory})
+Return the origin of the memory region named @var{memory}.
+
+@item SEGMENT_START(@var{segment}, @var{default})
+@kindex SEGMENT_START(@var{segment}, @var{default})
+Return the base address of the named @var{segment}. If an explicit
+value has been given for this segment (with a command-line @samp{-T}
+option) that value will be returned; otherwise the value will be
+@var{default}. At present, the @samp{-T} command-line option can only
+be used to set the base address for the ``text'', ``data'', and
+``bss'' sections, but you can use @code{SEGMENT_START} with any segment
+name.
+
+@item SIZEOF(@var{section})
+@kindex SIZEOF(@var{section})
+@cindex section size
+Return the size in bytes of the named @var{section}, if that section has
+been allocated. If the section has not been allocated when this is
+evaluated, the linker will report an error. In the following example,
+@code{symbol_1} and @code{symbol_2} are assigned identical values:
+@smallexample
+@group
+SECTIONS@{ @dots{}
+ .output @{
+ .start = . ;
+ @dots{}
+ .end = . ;
+ @}
+ symbol_1 = .end - .start ;
+ symbol_2 = SIZEOF(.output);
+@dots{} @}
+@end group
+@end smallexample
+
+@item SIZEOF_HEADERS
+@itemx sizeof_headers
+@kindex SIZEOF_HEADERS
+@cindex header size
+Return the size in bytes of the output file's headers. This is
+information which appears at the start of the output file. You can use
+this number when setting the start address of the first section, if you
+choose, to facilitate paging.
+
+@cindex not enough room for program headers
+@cindex program headers, not enough room
+When producing an ELF output file, if the linker script uses the
+@code{SIZEOF_HEADERS} builtin function, the linker must compute the
+number of program headers before it has determined all the section
+addresses and sizes. If the linker later discovers that it needs
+additional program headers, it will report an error @samp{not enough
+room for program headers}. To avoid this error, you must avoid using
+the @code{SIZEOF_HEADERS} function, or you must rework your linker
+script to avoid forcing the linker to use additional program headers, or
+you must define the program headers yourself using the @code{PHDRS}
+command (@pxref{PHDRS}).
+@end table
+
+@node Implicit Linker Scripts
+@section Implicit Linker Scripts
+@cindex implicit linker scripts
+If you specify a linker input file which the linker can not recognize as
+an object file or an archive file, it will try to read the file as a
+linker script. If the file can not be parsed as a linker script, the
+linker will report an error.
+
+An implicit linker script will not replace the default linker script.
+
+Typically an implicit linker script would contain only symbol
+assignments, or the @code{INPUT}, @code{GROUP}, or @code{VERSION}
+commands.
+
+Any input files read because of an implicit linker script will be read
+at the position in the command line where the implicit linker script was
+read. This can affect archive searching.
+
+@ifset GENERIC
+@node Machine Dependent
+@chapter Machine Dependent Features
+
+@cindex machine dependencies
+@command{ld} has additional features on some platforms; the following
+sections describe them. Machines where @command{ld} has no additional
+functionality are not listed.
+
+@menu
+@ifset H8300
+* H8/300:: @command{ld} and the H8/300
+@end ifset
+@ifset I960
+* i960:: @command{ld} and the Intel 960 family
+@end ifset
+@ifset ARM
+* ARM:: @command{ld} and the ARM family
+@end ifset
+@ifset HPPA
+* HPPA ELF32:: @command{ld} and HPPA 32-bit ELF
+@end ifset
+@ifset M68K
+* M68K:: @command{ld} and the Motorola 68K family
+@end ifset
+@ifset MMIX
+* MMIX:: @command{ld} and MMIX
+@end ifset
+@ifset MSP430
+* MSP430:: @command{ld} and MSP430
+@end ifset
+@ifset M68HC11
+* M68HC11/68HC12:: @code{ld} and the Motorola 68HC11 and 68HC12 families
+@end ifset
+@ifset POWERPC
+* PowerPC ELF32:: @command{ld} and PowerPC 32-bit ELF Support
+@end ifset
+@ifset POWERPC64
+* PowerPC64 ELF64:: @command{ld} and PowerPC64 64-bit ELF Support
+@end ifset
+@ifset SPU
+* SPU ELF:: @command{ld} and SPU ELF Support
+@end ifset
+@ifset TICOFF
+* TI COFF:: @command{ld} and TI COFF
+@end ifset
+@ifset WIN32
+* WIN32:: @command{ld} and WIN32 (cygwin/mingw)
+@end ifset
+@ifset XTENSA
+* Xtensa:: @command{ld} and Xtensa Processors
+@end ifset
+@end menu
+@end ifset
+
+@ifset H8300
+@ifclear GENERIC
+@raisesections
+@end ifclear
+
+@node H8/300
+@section @command{ld} and the H8/300
+
+@cindex H8/300 support
+For the H8/300, @command{ld} can perform these global optimizations when
+you specify the @samp{--relax} command-line option.
+
+@table @emph
+@cindex relaxing on H8/300
+@item relaxing address modes
+@command{ld} finds all @code{jsr} and @code{jmp} instructions whose
+targets are within eight bits, and turns them into eight-bit
+program-counter relative @code{bsr} and @code{bra} instructions,
+respectively.
+
+@cindex synthesizing on H8/300
+@item synthesizing instructions
+@c FIXME: specifically mov.b, or any mov instructions really?
+@command{ld} finds all @code{mov.b} instructions which use the
+sixteen-bit absolute address form, but refer to the top
+page of memory, and changes them to use the eight-bit address form.
+(That is: the linker turns @samp{mov.b @code{@@}@var{aa}:16} into
+@samp{mov.b @code{@@}@var{aa}:8} whenever the address @var{aa} is in the
+top page of memory).
+
+@item bit manipulation instructions
+@command{ld} finds all bit manipulation instructions like @code{band, bclr,
+biand, bild, bior, bist, bixor, bld, bnot, bor, bset, bst, btst, bxor}
+which use 32 bit and 16 bit absolute address form, but refer to the top
+page of memory, and changes them to use the 8 bit address form.
+(That is: the linker turns @samp{bset #xx:3,@code{@@}@var{aa}:32} into
+@samp{bset #xx:3,@code{@@}@var{aa}:8} whenever the address @var{aa} is in
+the top page of memory).
+
+@item system control instructions
+@command{ld} finds all @code{ldc.w, stc.w} instructions which use the
+32 bit absolute address form, but refer to the top page of memory, and
+changes them to use 16 bit address form.
+(That is: the linker turns @samp{ldc.w @code{@@}@var{aa}:32,ccr} into
+@samp{ldc.w @code{@@}@var{aa}:16,ccr} whenever the address @var{aa} is in
+the top page of memory).
+@end table
+
+@ifclear GENERIC
+@lowersections
+@end ifclear
+@end ifset
+
+@ifclear GENERIC
+@ifset Renesas
+@c This stuff is pointless to say unless you're especially concerned
+@c with Renesas chips; don't enable it for generic case, please.
+@node Renesas
+@chapter @command{ld} and Other Renesas Chips
+
+@command{ld} also supports the Renesas (formerly Hitachi) H8/300H,
+H8/500, and SH chips. No special features, commands, or command-line
+options are required for these chips.
+@end ifset
+@end ifclear
+
+@ifset I960
+@ifclear GENERIC
+@raisesections
+@end ifclear
+
+@node i960
+@section @command{ld} and the Intel 960 Family
+
+@cindex i960 support
+
+You can use the @samp{-A@var{architecture}} command line option to
+specify one of the two-letter names identifying members of the 960
+family; the option specifies the desired output target, and warns of any
+incompatible instructions in the input files. It also modifies the
+linker's search strategy for archive libraries, to support the use of
+libraries specific to each particular architecture, by including in the
+search loop names suffixed with the string identifying the architecture.
+
+For example, if your @command{ld} command line included @w{@samp{-ACA}} as
+well as @w{@samp{-ltry}}, the linker would look (in its built-in search
+paths, and in any paths you specify with @samp{-L}) for a library with
+the names
+
+@smallexample
+@group
+try
+libtry.a
+tryca
+libtryca.a
+@end group
+@end smallexample
+
+@noindent
+The first two possibilities would be considered in any event; the last
+two are due to the use of @w{@samp{-ACA}}.
+
+You can meaningfully use @samp{-A} more than once on a command line, since
+the 960 architecture family allows combination of target architectures; each
+use will add another pair of name variants to search for when @w{@samp{-l}}
+specifies a library.
+
+@cindex @option{--relax} on i960
+@cindex relaxing on i960
+@command{ld} supports the @samp{--relax} option for the i960 family. If
+you specify @samp{--relax}, @command{ld} finds all @code{balx} and
+@code{calx} instructions whose targets are within 24 bits, and turns
+them into 24-bit program-counter relative @code{bal} and @code{cal}
+instructions, respectively. @command{ld} also turns @code{cal}
+instructions into @code{bal} instructions when it determines that the
+target subroutine is a leaf routine (that is, the target subroutine does
+not itself call any subroutines).
+
+@cindex Cortex-A8 erratum workaround
+@kindex --fix-cortex-a8
+@kindex --no-fix-cortex-a8
+The @samp{--fix-cortex-a8} switch enables a link-time workaround for an erratum in certain Cortex-A8 processors. The workaround is enabled by default if you are targeting the ARM v7-A architecture profile. It can be enabled otherwise by specifying @samp{--fix-cortex-a8}, or disabled unconditionally by specifying @samp{--no-fix-cortex-a8}.
+
+The erratum only affects Thumb-2 code. Please contact ARM for further details.
+
+@kindex --merge-exidx-entries
+@kindex --no-merge-exidx-entries
+The @samp{--no-merge-exidx-entries} switch disables the merging of adjacent exidx entries in debuginfo.
+
+@ifclear GENERIC
+@lowersections
+@end ifclear
+@end ifset
+
+@ifset ARM
+@ifclear GENERIC
+@raisesections
+@end ifclear
+
+@ifset M68HC11
+@ifclear GENERIC
+@raisesections
+@end ifclear
+
+@node M68HC11/68HC12
+@section @command{ld} and the Motorola 68HC11 and 68HC12 families
+
+@cindex M68HC11 and 68HC12 support
+
+@subsection Linker Relaxation
+
+For the Motorola 68HC11, @command{ld} can perform these global
+optimizations when you specify the @samp{--relax} command-line option.
+
+@table @emph
+@cindex relaxing on M68HC11
+@item relaxing address modes
+@command{ld} finds all @code{jsr} and @code{jmp} instructions whose
+targets are within eight bits, and turns them into eight-bit
+program-counter relative @code{bsr} and @code{bra} instructions,
+respectively.
+
+@command{ld} also looks at all 16-bit extended addressing modes and
+transforms them in a direct addressing mode when the address is in
+page 0 (between 0 and 0x0ff).
+
+@item relaxing gcc instruction group
+When @command{gcc} is called with @option{-mrelax}, it can emit group
+of instructions that the linker can optimize to use a 68HC11 direct
+addressing mode. These instructions consists of @code{bclr} or
+@code{bset} instructions.
+
+@end table
+
+@subsection Trampoline Generation
+
+@cindex trampoline generation on M68HC11
+@cindex trampoline generation on M68HC12
+For 68HC11 and 68HC12, @command{ld} can generate trampoline code to
+call a far function using a normal @code{jsr} instruction. The linker
+will also change the relocation to some far function to use the
+trampoline address instead of the function address. This is typically the
+case when a pointer to a function is taken. The pointer will in fact
+point to the function trampoline.
+
+@ifclear GENERIC
+@lowersections
+@end ifclear
+@end ifset
+
+@node ARM
+@section @command{ld} and the ARM family
+
+@cindex ARM interworking support
+@kindex --support-old-code
+For the ARM, @command{ld} will generate code stubs to allow functions calls
+between ARM and Thumb code. These stubs only work with code that has
+been compiled and assembled with the @samp{-mthumb-interwork} command
+line option. If it is necessary to link with old ARM object files or
+libraries, which have not been compiled with the -mthumb-interwork
+option then the @samp{--support-old-code} command line switch should be
+given to the linker. This will make it generate larger stub functions
+which will work with non-interworking aware ARM code. Note, however,
+the linker does not support generating stubs for function calls to
+non-interworking aware Thumb code.
+
+@cindex thumb entry point
+@cindex entry point, thumb
+@kindex --thumb-entry=@var{entry}
+The @samp{--thumb-entry} switch is a duplicate of the generic
+@samp{--entry} switch, in that it sets the program's starting address.
+But it also sets the bottom bit of the address, so that it can be
+branched to using a BX instruction, and the program will start
+executing in Thumb mode straight away.
+
+@cindex PE import table prefixing
+@kindex --use-nul-prefixed-import-tables
+The @samp{--use-nul-prefixed-import-tables} switch is specifying, that
+the import tables idata4 and idata5 have to be generated with a zero
+elememt prefix for import libraries. This is the old style to generate
+import tables. By default this option is turned off.
+
+@cindex BE8
+@kindex --be8
+The @samp{--be8} switch instructs @command{ld} to generate BE8 format
+executables. This option is only valid when linking big-endian objects.
+The resulting image will contain big-endian data and little-endian code.
+
+@cindex TARGET1
+@kindex --target1-rel
+@kindex --target1-abs
+The @samp{R_ARM_TARGET1} relocation is typically used for entries in the
+@samp{.init_array} section. It is interpreted as either @samp{R_ARM_REL32}
+or @samp{R_ARM_ABS32}, depending on the target. The @samp{--target1-rel}
+and @samp{--target1-abs} switches override the default.
+
+@cindex TARGET2
+@kindex --target2=@var{type}
+The @samp{--target2=type} switch overrides the default definition of the
+@samp{R_ARM_TARGET2} relocation. Valid values for @samp{type}, their
+meanings, and target defaults are as follows:
+@table @samp
+@item rel
+@samp{R_ARM_REL32} (arm*-*-elf, arm*-*-eabi)
+@item abs
+@samp{R_ARM_ABS32} (arm*-*-symbianelf)
+@item got-rel
+@samp{R_ARM_GOT_PREL} (arm*-*-linux, arm*-*-*bsd)
+@end table
+
+@cindex FIX_V4BX
+@kindex --fix-v4bx
+The @samp{R_ARM_V4BX} relocation (defined by the ARM AAELF
+specification) enables objects compiled for the ARMv4 architecture to be
+interworking-safe when linked with other objects compiled for ARMv4t, but
+also allows pure ARMv4 binaries to be built from the same ARMv4 objects.
+
+In the latter case, the switch @option{--fix-v4bx} must be passed to the
+linker, which causes v4t @code{BX rM} instructions to be rewritten as
+@code{MOV PC,rM}, since v4 processors do not have a @code{BX} instruction.
+
+In the former case, the switch should not be used, and @samp{R_ARM_V4BX}
+relocations are ignored.
+
+@cindex FIX_V4BX_INTERWORKING
+@kindex --fix-v4bx-interworking
+Replace @code{BX rM} instructions identified by @samp{R_ARM_V4BX}
+relocations with a branch to the following veneer:
+
+@smallexample
+TST rM, #1
+MOVEQ PC, rM
+BX Rn
+@end smallexample
+
+This allows generation of libraries/applications that work on ARMv4 cores
+and are still interworking safe. Note that the above veneer clobbers the
+condition flags, so may cause incorrect progrm behavior in rare cases.
+
+@cindex USE_BLX
+@kindex --use-blx
+The @samp{--use-blx} switch enables the linker to use ARM/Thumb
+BLX instructions (available on ARMv5t and above) in various
+situations. Currently it is used to perform calls via the PLT from Thumb
+code using BLX rather than using BX and a mode-switching stub before
+each PLT entry. This should lead to such calls executing slightly faster.
+
+This option is enabled implicitly for SymbianOS, so there is no need to
+specify it if you are using that target.
+
+@cindex VFP11_DENORM_FIX
+@kindex --vfp11-denorm-fix
+The @samp{--vfp11-denorm-fix} switch enables a link-time workaround for a
+bug in certain VFP11 coprocessor hardware, which sometimes allows
+instructions with denorm operands (which must be handled by support code)
+to have those operands overwritten by subsequent instructions before
+the support code can read the intended values.
+
+The bug may be avoided in scalar mode if you allow at least one
+intervening instruction between a VFP11 instruction which uses a register
+and another instruction which writes to the same register, or at least two
+intervening instructions if vector mode is in use. The bug only affects
+full-compliance floating-point mode: you do not need this workaround if
+you are using "runfast" mode. Please contact ARM for further details.
+
+If you know you are using buggy VFP11 hardware, you can
+enable this workaround by specifying the linker option
+@samp{--vfp-denorm-fix=scalar} if you are using the VFP11 scalar
+mode only, or @samp{--vfp-denorm-fix=vector} if you are using
+vector mode (the latter also works for scalar code). The default is
+@samp{--vfp-denorm-fix=none}.
+
+If the workaround is enabled, instructions are scanned for
+potentially-troublesome sequences, and a veneer is created for each
+such sequence which may trigger the erratum. The veneer consists of the
+first instruction of the sequence and a branch back to the subsequent
+instruction. The original instruction is then replaced with a branch to
+the veneer. The extra cycles required to call and return from the veneer
+are sufficient to avoid the erratum in both the scalar and vector cases.
+
+@cindex NO_ENUM_SIZE_WARNING
+@kindex --no-enum-size-warning
+The @option{--no-enum-size-warning} switch prevents the linker from
+warning when linking object files that specify incompatible EABI
+enumeration size attributes. For example, with this switch enabled,
+linking of an object file using 32-bit enumeration values with another
+using enumeration values fitted into the smallest possible space will
+not be diagnosed.
+
+@cindex NO_WCHAR_SIZE_WARNING
+@kindex --no-wchar-size-warning
+The @option{--no-wchar-size-warning} switch prevents the linker from
+warning when linking object files that specify incompatible EABI
+@code{wchar_t} size attributes. For example, with this switch enabled,
+linking of an object file using 32-bit @code{wchar_t} values with another
+using 16-bit @code{wchar_t} values will not be diagnosed.
+
+@cindex PIC_VENEER
+@kindex --pic-veneer
+The @samp{--pic-veneer} switch makes the linker use PIC sequences for
+ARM/Thumb interworking veneers, even if the rest of the binary
+is not PIC. This avoids problems on uClinux targets where
+@samp{--emit-relocs} is used to generate relocatable binaries.
+
+@cindex STUB_GROUP_SIZE
+@kindex --stub-group-size=@var{N}
+The linker will automatically generate and insert small sequences of
+code into a linked ARM ELF executable whenever an attempt is made to
+perform a function call to a symbol that is too far away. The
+placement of these sequences of instructions - called stubs - is
+controlled by the command line option @option{--stub-group-size=N}.
+The placement is important because a poor choice can create a need for
+duplicate stubs, increasing the code sizw. The linker will try to
+group stubs together in order to reduce interruptions to the flow of
+code, but it needs guidance as to how big these groups should be and
+where they should be placed.
+
+The value of @samp{N}, the parameter to the
+@option{--stub-group-size=} option controls where the stub groups are
+placed. If it is negative then all stubs are placed after the first
+branch that needs them. If it is positive then the stubs can be
+placed either before or after the branches that need them. If the
+value of @samp{N} is 1 (either +1 or -1) then the linker will choose
+exactly where to place groups of stubs, using its built in heuristics.
+A value of @samp{N} greater than 1 (or smaller than -1) tells the
+linker that a single group of stubs can service at most @samp{N} bytes
+from the input sections.
+
+The default, if @option{--stub-group-size=} is not specified, is
+@samp{N = +1}.
+
+Farcalls stubs insertion is fully supported for the ARM-EABI target
+only, because it relies on object files properties not present
+otherwise.
+
+@ifclear GENERIC
+@lowersections
+@end ifclear
+@end ifset
+
+@ifset HPPA
+@ifclear GENERIC
+@raisesections
+@end ifclear
+
+@node HPPA ELF32
+@section @command{ld} and HPPA 32-bit ELF Support
+@cindex HPPA multiple sub-space stubs
+@kindex --multi-subspace
+When generating a shared library, @command{ld} will by default generate
+import stubs suitable for use with a single sub-space application.
+The @samp{--multi-subspace} switch causes @command{ld} to generate export
+stubs, and different (larger) import stubs suitable for use with
+multiple sub-spaces.
+
+@cindex HPPA stub grouping
+@kindex --stub-group-size=@var{N}
+Long branch stubs and import/export stubs are placed by @command{ld} in
+stub sections located between groups of input sections.
+@samp{--stub-group-size} specifies the maximum size of a group of input
+sections handled by one stub section. Since branch offsets are signed,
+a stub section may serve two groups of input sections, one group before
+the stub section, and one group after it. However, when using
+conditional branches that require stubs, it may be better (for branch
+prediction) that stub sections only serve one group of input sections.
+A negative value for @samp{N} chooses this scheme, ensuring that
+branches to stubs always use a negative offset. Two special values of
+@samp{N} are recognized, @samp{1} and @samp{-1}. These both instruct
+@command{ld} to automatically size input section groups for the branch types
+detected, with the same behaviour regarding stub placement as other
+positive or negative values of @samp{N} respectively.
+
+Note that @samp{--stub-group-size} does not split input sections. A
+single input section larger than the group size specified will of course
+create a larger group (of one section). If input sections are too
+large, it may not be possible for a branch to reach its stub.
+
+@ifclear GENERIC
+@lowersections
+@end ifclear
+@end ifset
+
+@ifset M68K
+@ifclear GENERIC
+@raisesections
+@end ifclear
+
+@node M68K
+@section @command{ld} and the Motorola 68K family
+
+@cindex Motorola 68K GOT generation
+@kindex --got=@var{type}
+The @samp{--got=@var{type}} option lets you choose the GOT generation scheme.
+The choices are @samp{single}, @samp{negative}, @samp{multigot} and
+@samp{target}. When @samp{target} is selected the linker chooses
+the default GOT generation scheme for the current target.
+@samp{single} tells the linker to generate a single GOT with
+entries only at non-negative offsets.
+@samp{negative} instructs the linker to generate a single GOT with
+entries at both negative and positive offsets. Not all environments
+support such GOTs.
+@samp{multigot} allows the linker to generate several GOTs in the
+output file. All GOT references from a single input object
+file access the same GOT, but references from different input object
+files might access different GOTs. Not all environments support such GOTs.
+
+@ifclear GENERIC
+@lowersections
+@end ifclear
+@end ifset
+
+@ifset MMIX
+@ifclear GENERIC
+@raisesections
+@end ifclear
+
+@node MMIX
+@section @code{ld} and MMIX
+For MMIX, there is a choice of generating @code{ELF} object files or
+@code{mmo} object files when linking. The simulator @code{mmix}
+understands the @code{mmo} format. The binutils @code{objcopy} utility
+can translate between the two formats.
+
+There is one special section, the @samp{.MMIX.reg_contents} section.
+Contents in this section is assumed to correspond to that of global
+registers, and symbols referring to it are translated to special symbols,
+equal to registers. In a final link, the start address of the
+@samp{.MMIX.reg_contents} section corresponds to the first allocated
+global register multiplied by 8. Register @code{$255} is not included in
+this section; it is always set to the program entry, which is at the
+symbol @code{Main} for @code{mmo} files.
+
+Global symbols with the prefix @code{__.MMIX.start.}, for example
+@code{__.MMIX.start..text} and @code{__.MMIX.start..data} are special.
+The default linker script uses these to set the default start address
+of a section.
+
+Initial and trailing multiples of zero-valued 32-bit words in a section,
+are left out from an mmo file.
+
+@ifclear GENERIC
+@lowersections
+@end ifclear
+@end ifset
+
+@ifset MSP430
+@ifclear GENERIC
+@raisesections
+@end ifclear
+
+@node MSP430
+@section @code{ld} and MSP430
+For the MSP430 it is possible to select the MPU architecture. The flag @samp{-m [mpu type]}
+will select an appropriate linker script for selected MPU type. (To get a list of known MPUs
+just pass @samp{-m help} option to the linker).
+
+@cindex MSP430 extra sections
+The linker will recognize some extra sections which are MSP430 specific:
+
+@table @code
+@item @samp{.vectors}
+Defines a portion of ROM where interrupt vectors located.
+
+@item @samp{.bootloader}
+Defines the bootloader portion of the ROM (if applicable). Any code
+in this section will be uploaded to the MPU.
+
+@item @samp{.infomem}
+Defines an information memory section (if applicable). Any code in
+this section will be uploaded to the MPU.
+
+@item @samp{.infomemnobits}
+This is the same as the @samp{.infomem} section except that any code
+in this section will not be uploaded to the MPU.
+
+@item @samp{.noinit}
+Denotes a portion of RAM located above @samp{.bss} section.
+
+The last two sections are used by gcc.
+@end table
+
+@ifclear GENERIC
+@lowersections
+@end ifclear
+@end ifset
+
+@ifset POWERPC
+@ifclear GENERIC
+@raisesections
+@end ifclear
+
+@node PowerPC ELF32
+@section @command{ld} and PowerPC 32-bit ELF Support
+@cindex PowerPC long branches
+@kindex --relax on PowerPC
+Branches on PowerPC processors are limited to a signed 26-bit
+displacement, which may result in @command{ld} giving
+@samp{relocation truncated to fit} errors with very large programs.
+@samp{--relax} enables the generation of trampolines that can access
+the entire 32-bit address space. These trampolines are inserted at
+section boundaries, so may not themselves be reachable if an input
+section exceeds 33M in size. You may combine @samp{-r} and
+@samp{--relax} to add trampolines in a partial link. In that case
+both branches to undefined symbols and inter-section branches are also
+considered potentially out of range, and trampolines inserted.
+
+@cindex PowerPC ELF32 options
+@table @option
+@cindex PowerPC PLT
+@kindex --bss-plt
+@item --bss-plt
+Current PowerPC GCC accepts a @samp{-msecure-plt} option that
+generates code capable of using a newer PLT and GOT layout that has
+the security advantage of no executable section ever needing to be
+writable and no writable section ever being executable. PowerPC
+@command{ld} will generate this layout, including stubs to access the
+PLT, if all input files (including startup and static libraries) were
+compiled with @samp{-msecure-plt}. @samp{--bss-plt} forces the old
+BSS PLT (and GOT layout) which can give slightly better performance.
+
+@kindex --secure-plt
+@item --secure-plt
+@command{ld} will use the new PLT and GOT layout if it is linking new
+@samp{-fpic} or @samp{-fPIC} code, but does not do so automatically
+when linking non-PIC code. This option requests the new PLT and GOT
+layout. A warning will be given if some object file requires the old
+style BSS PLT.
+
+@cindex PowerPC GOT
+@kindex --sdata-got
+@item --sdata-got
+The new secure PLT and GOT are placed differently relative to other
+sections compared to older BSS PLT and GOT placement. The location of
+@code{.plt} must change because the new secure PLT is an initialized
+section while the old PLT is uninitialized. The reason for the
+@code{.got} change is more subtle: The new placement allows
+@code{.got} to be read-only in applications linked with
+@samp{-z relro -z now}. However, this placement means that
+@code{.sdata} cannot always be used in shared libraries, because the
+PowerPC ABI accesses @code{.sdata} in shared libraries from the GOT
+pointer. @samp{--sdata-got} forces the old GOT placement. PowerPC
+GCC doesn't use @code{.sdata} in shared libraries, so this option is
+really only useful for other compilers that may do so.
+
+@cindex PowerPC stub symbols
+@kindex --emit-stub-syms
+@item --emit-stub-syms
+This option causes @command{ld} to label linker stubs with a local
+symbol that encodes the stub type and destination.
+
+@cindex PowerPC TLS optimization
+@kindex --no-tls-optimize
+@item --no-tls-optimize
+PowerPC @command{ld} normally performs some optimization of code
+sequences used to access Thread-Local Storage. Use this option to
+disable the optimization.
+@end table
+
+@ifclear GENERIC
+@lowersections
+@end ifclear
+@end ifset
+
+@ifset POWERPC64
+@ifclear GENERIC
+@raisesections
+@end ifclear
+
+@node PowerPC64 ELF64
+@section @command{ld} and PowerPC64 64-bit ELF Support
+
+@cindex PowerPC64 ELF64 options
+@table @option
+@cindex PowerPC64 stub grouping
+@kindex --stub-group-size
+@item --stub-group-size
+Long branch stubs, PLT call stubs and TOC adjusting stubs are placed
+by @command{ld} in stub sections located between groups of input sections.
+@samp{--stub-group-size} specifies the maximum size of a group of input
+sections handled by one stub section. Since branch offsets are signed,
+a stub section may serve two groups of input sections, one group before
+the stub section, and one group after it. However, when using
+conditional branches that require stubs, it may be better (for branch
+prediction) that stub sections only serve one group of input sections.
+A negative value for @samp{N} chooses this scheme, ensuring that
+branches to stubs always use a negative offset. Two special values of
+@samp{N} are recognized, @samp{1} and @samp{-1}. These both instruct
+@command{ld} to automatically size input section groups for the branch types
+detected, with the same behaviour regarding stub placement as other
+positive or negative values of @samp{N} respectively.
+
+Note that @samp{--stub-group-size} does not split input sections. A
+single input section larger than the group size specified will of course
+create a larger group (of one section). If input sections are too
+large, it may not be possible for a branch to reach its stub.
+
+@cindex PowerPC64 stub symbols
+@kindex --emit-stub-syms
+@item --emit-stub-syms
+This option causes @command{ld} to label linker stubs with a local
+symbol that encodes the stub type and destination.
+
+@cindex PowerPC64 dot symbols
+@kindex --dotsyms
+@kindex --no-dotsyms
+@item --dotsyms, --no-dotsyms
+These two options control how @command{ld} interprets version patterns
+in a version script. Older PowerPC64 compilers emitted both a
+function descriptor symbol with the same name as the function, and a
+code entry symbol with the name prefixed by a dot (@samp{.}). To
+properly version a function @samp{foo}, the version script thus needs
+to control both @samp{foo} and @samp{.foo}. The option
+@samp{--dotsyms}, on by default, automatically adds the required
+dot-prefixed patterns. Use @samp{--no-dotsyms} to disable this
+feature.
+
+@cindex PowerPC64 TLS optimization
+@kindex --no-tls-optimize
+@item --no-tls-optimize
+PowerPC64 @command{ld} normally performs some optimization of code
+sequences used to access Thread-Local Storage. Use this option to
+disable the optimization.
+
+@cindex PowerPC64 OPD optimization
+@kindex --no-opd-optimize
+@item --no-opd-optimize
+PowerPC64 @command{ld} normally removes @code{.opd} section entries
+corresponding to deleted link-once functions, or functions removed by
+the action of @samp{--gc-sections} or linker script @code{/DISCARD/}.
+Use this option to disable @code{.opd} optimization.
+
+@cindex PowerPC64 OPD spacing
+@kindex --non-overlapping-opd
+@item --non-overlapping-opd
+Some PowerPC64 compilers have an option to generate compressed
+@code{.opd} entries spaced 16 bytes apart, overlapping the third word,
+the static chain pointer (unused in C) with the first word of the next
+entry. This option expands such entries to the full 24 bytes.
+
+@cindex PowerPC64 TOC optimization
+@kindex --no-toc-optimize
+@item --no-toc-optimize
+PowerPC64 @command{ld} normally removes unused @code{.toc} section
+entries. Such entries are detected by examining relocations that
+reference the TOC in code sections. A reloc in a deleted code section
+marks a TOC word as unneeded, while a reloc in a kept code section
+marks a TOC word as needed. Since the TOC may reference itself, TOC
+relocs are also examined. TOC words marked as both needed and
+unneeded will of course be kept. TOC words without any referencing
+reloc are assumed to be part of a multi-word entry, and are kept or
+discarded as per the nearest marked preceding word. This works
+reliably for compiler generated code, but may be incorrect if assembly
+code is used to insert TOC entries. Use this option to disable the
+optimization.
+
+@cindex PowerPC64 multi-TOC
+@kindex --no-multi-toc
+@item --no-multi-toc
+By default, PowerPC64 GCC generates code for a TOC model where TOC
+entries are accessed with a 16-bit offset from r2. This limits the
+total TOC size to 64K. PowerPC64 @command{ld} extends this limit by
+grouping code sections such that each group uses less than 64K for its
+TOC entries, then inserts r2 adjusting stubs between inter-group
+calls. @command{ld} does not split apart input sections, so cannot
+help if a single input file has a @code{.toc} section that exceeds
+64K, most likely from linking multiple files with @command{ld -r}.
+Use this option to turn off this feature.
+@end table
+
+@ifclear GENERIC
+@lowersections
+@end ifclear
+@end ifset
+
+@ifset SPU
+@ifclear GENERIC
+@raisesections
+@end ifclear
+
+@node SPU ELF
+@section @command{ld} and SPU ELF Support
+
+@cindex SPU ELF options
+@table @option
+
+@cindex SPU plugins
+@kindex --plugin
+@item --plugin
+This option marks an executable as a PIC plugin module.
+
+@cindex SPU overlays
+@kindex --no-overlays
+@item --no-overlays
+Normally, @command{ld} recognizes calls to functions within overlay
+regions, and redirects such calls to an overlay manager via a stub.
+@command{ld} also provides a built-in overlay manager. This option
+turns off all this special overlay handling.
+
+@cindex SPU overlay stub symbols
+@kindex --emit-stub-syms
+@item --emit-stub-syms
+This option causes @command{ld} to label overlay stubs with a local
+symbol that encodes the stub type and destination.
+
+@cindex SPU extra overlay stubs
+@kindex --extra-overlay-stubs
+@item --extra-overlay-stubs
+This option causes @command{ld} to add overlay call stubs on all
+function calls out of overlay regions. Normally stubs are not added
+on calls to non-overlay regions.
+
+@cindex SPU local store size
+@kindex --local-store=lo:hi
+@item --local-store=lo:hi
+@command{ld} usually checks that a final executable for SPU fits in
+the address range 0 to 256k. This option may be used to change the
+range. Disable the check entirely with @option{--local-store=0:0}.
+
+@cindex SPU
+@kindex --stack-analysis
+@item --stack-analysis
+SPU local store space is limited. Over-allocation of stack space
+unnecessarily limits space available for code and data, while
+under-allocation results in runtime failures. If given this option,
+@command{ld} will provide an estimate of maximum stack usage.
+@command{ld} does this by examining symbols in code sections to
+determine the extents of functions, and looking at function prologues
+for stack adjusting instructions. A call-graph is created by looking
+for relocations on branch instructions. The graph is then searched
+for the maximum stack usage path. Note that this analysis does not
+find calls made via function pointers, and does not handle recursion
+and other cycles in the call graph. Stack usage may be
+under-estimated if your code makes such calls. Also, stack usage for
+dynamic allocation, e.g. alloca, will not be detected. If a link map
+is requested, detailed information about each function's stack usage
+and calls will be given.
+
+@cindex SPU
+@kindex --emit-stack-syms
+@item --emit-stack-syms
+This option, if given along with @option{--stack-analysis} will result
+in @command{ld} emitting stack sizing symbols for each function.
+These take the form @code{__stack_<function_name>} for global
+functions, and @code{__stack_<number>_<function_name>} for static
+functions. @code{<number>} is the section id in hex. The value of
+such symbols is the stack requirement for the corresponding function.
+The symbol size will be zero, type @code{STT_NOTYPE}, binding
+@code{STB_LOCAL}, and section @code{SHN_ABS}.
+@end table
+
+@ifclear GENERIC
+@lowersections
+@end ifclear
+@end ifset
+
+@ifset TICOFF
+@ifclear GENERIC
+@raisesections
+@end ifclear
+
+@node TI COFF
+@section @command{ld}'s Support for Various TI COFF Versions
+@cindex TI COFF versions
+@kindex --format=@var{version}
+The @samp{--format} switch allows selection of one of the various
+TI COFF versions. The latest of this writing is 2; versions 0 and 1 are
+also supported. The TI COFF versions also vary in header byte-order
+format; @command{ld} will read any version or byte order, but the output
+header format depends on the default specified by the specific target.
+
+@ifclear GENERIC
+@lowersections
+@end ifclear
+@end ifset
+
+@ifset WIN32
+@ifclear GENERIC
+@raisesections
+@end ifclear
+
+@node WIN32
+@section @command{ld} and WIN32 (cygwin/mingw)
+
+This section describes some of the win32 specific @command{ld} issues.
+See @ref{Options,,Command Line Options} for detailed description of the
+command line options mentioned here.
+
+@table @emph
+@cindex import libraries
+@item import libraries
+The standard Windows linker creates and uses so-called import
+libraries, which contains information for linking to dll's. They are
+regular static archives and are handled as any other static
+archive. The cygwin and mingw ports of @command{ld} have specific
+support for creating such libraries provided with the
+@samp{--out-implib} command line option.
+
+@item exporting DLL symbols
+@cindex exporting DLL symbols
+The cygwin/mingw @command{ld} has several ways to export symbols for dll's.
+
+@table @emph
+@item using auto-export functionality
+@cindex using auto-export functionality
+By default @command{ld} exports symbols with the auto-export functionality,
+which is controlled by the following command line options:
+
+@itemize
+@item --export-all-symbols [This is the default]
+@item --exclude-symbols
+@item --exclude-libs
+@item --exclude-modules-for-implib
+@item --version-script
+@end itemize
+
+When auto-export is in operation, @command{ld} will export all the non-local
+(global and common) symbols it finds in a DLL, with the exception of a few
+symbols known to belong to the system's runtime and libraries. As it will
+often not be desirable to export all of a DLL's symbols, which may include
+private functions that are not part of any public interface, the command-line
+options listed above may be used to filter symbols out from the list for
+exporting. The @samp{--output-def} option can be used in order to see the
+final list of exported symbols with all exclusions taken into effect.
+
+If @samp{--export-all-symbols} is not given explicitly on the
+command line, then the default auto-export behavior will be @emph{disabled}
+if either of the following are true:
+
+@itemize
+@item A DEF file is used.
+@item Any symbol in any object file was marked with the __declspec(dllexport) attribute.
+@end itemize
+
+@item using a DEF file
+@cindex using a DEF file
+Another way of exporting symbols is using a DEF file. A DEF file is
+an ASCII file containing definitions of symbols which should be
+exported when a dll is created. Usually it is named @samp{<dll
+name>.def} and is added as any other object file to the linker's
+command line. The file's name must end in @samp{.def} or @samp{.DEF}.
+
+@example
+gcc -o <output> <objectfiles> <dll name>.def
+@end example
+
+Using a DEF file turns off the normal auto-export behavior, unless the
+@samp{--export-all-symbols} option is also used.
+
+Here is an example of a DEF file for a shared library called @samp{xyz.dll}:
+
+@example
+LIBRARY "xyz.dll" BASE=0x20000000
+
+EXPORTS
+foo
+bar
+_bar = bar
+another_foo = abc.dll.afoo
+var1 DATA
+doo = foo == foo2
+eoo DATA == var1
+@end example
+
+This example defines a DLL with a non-default base address and seven
+symbols in the export table. The third exported symbol @code{_bar} is an
+alias for the second. The fourth symbol, @code{another_foo} is resolved
+by "forwarding" to another module and treating it as an alias for
+@code{afoo} exported from the DLL @samp{abc.dll}. The final symbol
+@code{var1} is declared to be a data object. The @samp{doo} symbol in
+export library is an alias of @samp{foo}, which gets the string name
+in export table @samp{foo2}. The @samp{eoo} symbol is an data export
+symbol, which gets in export table the name @samp{var1}.
+
+The optional @code{LIBRARY <name>} command indicates the @emph{internal}
+name of the output DLL. If @samp{<name>} does not include a suffix,
+the default library suffix, @samp{.DLL} is appended.
+
+When the .DEF file is used to build an application, rather than a
+library, the @code{NAME <name>} command should be used instead of
+@code{LIBRARY}. If @samp{<name>} does not include a suffix, the default
+executable suffix, @samp{.EXE} is appended.
+
+With either @code{LIBRARY <name>} or @code{NAME <name>} the optional
+specification @code{BASE = <number>} may be used to specify a
+non-default base address for the image.
+
+If neither @code{LIBRARY <name>} nor @code{NAME <name>} is specified,
+or they specify an empty string, the internal name is the same as the
+filename specified on the command line.
+
+The complete specification of an export symbol is:
+
+@example
+EXPORTS
+ ( ( ( <name1> [ = <name2> ] )
+ | ( <name1> = <module-name> . <external-name>))
+ [ @@ <integer> ] [NONAME] [DATA] [CONSTANT] [PRIVATE] [== <name3>] ) *
+@end example
+
+Declares @samp{<name1>} as an exported symbol from the DLL, or declares
+@samp{<name1>} as an exported alias for @samp{<name2>}; or declares
+@samp{<name1>} as a "forward" alias for the symbol
+@samp{<external-name>} in the DLL @samp{<module-name>}.
+Optionally, the symbol may be exported by the specified ordinal
+@samp{<integer>} alias. The optional @samp{<name3>} is the to be used
+string in import/export table for the symbol.
+
+The optional keywords that follow the declaration indicate:
+
+@code{NONAME}: Do not put the symbol name in the DLL's export table. It
+will still be exported by its ordinal alias (either the value specified
+by the .def specification or, otherwise, the value assigned by the
+linker). The symbol name, however, does remain visible in the import
+library (if any), unless @code{PRIVATE} is also specified.
+
+@code{DATA}: The symbol is a variable or object, rather than a function.
+The import lib will export only an indirect reference to @code{foo} as
+the symbol @code{_imp__foo} (ie, @code{foo} must be resolved as
+@code{*_imp__foo}).
+
+@code{CONSTANT}: Like @code{DATA}, but put the undecorated @code{foo} as
+well as @code{_imp__foo} into the import library. Both refer to the
+read-only import address table's pointer to the variable, not to the
+variable itself. This can be dangerous. If the user code fails to add
+the @code{dllimport} attribute and also fails to explicitly add the
+extra indirection that the use of the attribute enforces, the
+application will behave unexpectedly.
+
+@code{PRIVATE}: Put the symbol in the DLL's export table, but do not put
+it into the static import library used to resolve imports at link time. The
+symbol can still be imported using the @code{LoadLibrary/GetProcAddress}
+API at runtime or by by using the GNU ld extension of linking directly to
+the DLL without an import library.
+
+See ld/deffilep.y in the binutils sources for the full specification of
+other DEF file statements
+
+@cindex creating a DEF file
+While linking a shared dll, @command{ld} is able to create a DEF file
+with the @samp{--output-def <file>} command line option.
+
+@item Using decorations
+@cindex Using decorations
+Another way of marking symbols for export is to modify the source code
+itself, so that when building the DLL each symbol to be exported is
+declared as:
+
+@example
+__declspec(dllexport) int a_variable
+__declspec(dllexport) void a_function(int with_args)
+@end example
+
+All such symbols will be exported from the DLL. If, however,
+any of the object files in the DLL contain symbols decorated in
+this way, then the normal auto-export behavior is disabled, unless
+the @samp{--export-all-symbols} option is also used.
+
+Note that object files that wish to access these symbols must @emph{not}
+decorate them with dllexport. Instead, they should use dllimport,
+instead:
+
+@example
+__declspec(dllimport) int a_variable
+__declspec(dllimport) void a_function(int with_args)
+@end example
+
+This complicates the structure of library header files, because
+when included by the library itself the header must declare the
+variables and functions as dllexport, but when included by client
+code the header must declare them as dllimport. There are a number
+of idioms that are typically used to do this; often client code can
+omit the __declspec() declaration completely. See
+@samp{--enable-auto-import} and @samp{automatic data imports} for more
+information.
+@end table
+
+@cindex automatic data imports
+@item automatic data imports
+The standard Windows dll format supports data imports from dlls only
+by adding special decorations (dllimport/dllexport), which let the
+compiler produce specific assembler instructions to deal with this
+issue. This increases the effort necessary to port existing Un*x
+code to these platforms, especially for large
+c++ libraries and applications. The auto-import feature, which was
+initially provided by Paul Sokolovsky, allows one to omit the
+decorations to achieve a behavior that conforms to that on POSIX/Un*x
+platforms. This feature is enabled with the @samp{--enable-auto-import}
+command-line option, although it is enabled by default on cygwin/mingw.
+The @samp{--enable-auto-import} option itself now serves mainly to
+suppress any warnings that are ordinarily emitted when linked objects
+trigger the feature's use.
+
+auto-import of variables does not always work flawlessly without
+additional assistance. Sometimes, you will see this message
+
+"variable '<var>' can't be auto-imported. Please read the
+documentation for ld's @code{--enable-auto-import} for details."
+
+The @samp{--enable-auto-import} documentation explains why this error
+occurs, and several methods that can be used to overcome this difficulty.
+One of these methods is the @emph{runtime pseudo-relocs} feature, described
+below.
+
+@cindex runtime pseudo-relocation
+For complex variables imported from DLLs (such as structs or classes),
+object files typically contain a base address for the variable and an
+offset (@emph{addend}) within the variable--to specify a particular
+field or public member, for instance. Unfortunately, the runtime loader used
+in win32 environments is incapable of fixing these references at runtime
+without the additional information supplied by dllimport/dllexport decorations.
+The standard auto-import feature described above is unable to resolve these
+references.
+
+The @samp{--enable-runtime-pseudo-relocs} switch allows these references to
+be resolved without error, while leaving the task of adjusting the references
+themselves (with their non-zero addends) to specialized code provided by the
+runtime environment. Recent versions of the cygwin and mingw environments and
+compilers provide this runtime support; older versions do not. However, the
+support is only necessary on the developer's platform; the compiled result will
+run without error on an older system.
+
+@samp{--enable-runtime-pseudo-relocs} is not the default; it must be explicitly
+enabled as needed.
+
+@cindex direct linking to a dll
+@item direct linking to a dll
+The cygwin/mingw ports of @command{ld} support the direct linking,
+including data symbols, to a dll without the usage of any import
+libraries. This is much faster and uses much less memory than does the
+traditional import library method, especially when linking large
+libraries or applications. When @command{ld} creates an import lib, each
+function or variable exported from the dll is stored in its own bfd, even
+though a single bfd could contain many exports. The overhead involved in
+storing, loading, and processing so many bfd's is quite large, and explains the
+tremendous time, memory, and storage needed to link against particularly
+large or complex libraries when using import libs.
+
+Linking directly to a dll uses no extra command-line switches other than
+@samp{-L} and @samp{-l}, because @command{ld} already searches for a number
+of names to match each library. All that is needed from the developer's
+perspective is an understanding of this search, in order to force ld to
+select the dll instead of an import library.
+
+
+For instance, when ld is called with the argument @samp{-lxxx} it will attempt
+to find, in the first directory of its search path,
+
+@example
+libxxx.dll.a
+xxx.dll.a
+libxxx.a
+xxx.lib
+cygxxx.dll (*)
+libxxx.dll
+xxx.dll
+@end example
+
+before moving on to the next directory in the search path.
+
+(*) Actually, this is not @samp{cygxxx.dll} but in fact is @samp{<prefix>xxx.dll},
+where @samp{<prefix>} is set by the @command{ld} option
+@samp{--dll-search-prefix=<prefix>}. In the case of cygwin, the standard gcc spec
+file includes @samp{--dll-search-prefix=cyg}, so in effect we actually search for
+@samp{cygxxx.dll}.
+
+Other win32-based unix environments, such as mingw or pw32, may use other
+@samp{<prefix>}es, although at present only cygwin makes use of this feature. It
+was originally intended to help avoid name conflicts among dll's built for the
+various win32/un*x environments, so that (for example) two versions of a zlib dll
+could coexist on the same machine.
+
+The generic cygwin/mingw path layout uses a @samp{bin} directory for
+applications and dll's and a @samp{lib} directory for the import
+libraries (using cygwin nomenclature):
+
+@example
+bin/
+ cygxxx.dll
+lib/
+ libxxx.dll.a (in case of dll's)
+ libxxx.a (in case of static archive)
+@end example
+
+Linking directly to a dll without using the import library can be
+done two ways:
+
+1. Use the dll directly by adding the @samp{bin} path to the link line
+@example
+gcc -Wl,-verbose -o a.exe -L../bin/ -lxxx
+@end example
+
+However, as the dll's often have version numbers appended to their names
+(@samp{cygncurses-5.dll}) this will often fail, unless one specifies
+@samp{-L../bin -lncurses-5} to include the version. Import libs are generally
+not versioned, and do not have this difficulty.
+
+2. Create a symbolic link from the dll to a file in the @samp{lib}
+directory according to the above mentioned search pattern. This
+should be used to avoid unwanted changes in the tools needed for
+making the app/dll.
+
+@example
+ln -s bin/cygxxx.dll lib/[cyg|lib|]xxx.dll[.a]
+@end example
+
+Then you can link without any make environment changes.
+
+@example
+gcc -Wl,-verbose -o a.exe -L../lib/ -lxxx
+@end example
+
+This technique also avoids the version number problems, because the following is
+perfectly legal
+
+@example
+bin/
+ cygxxx-5.dll
+lib/
+ libxxx.dll.a -> ../bin/cygxxx-5.dll
+@end example
+
+Linking directly to a dll without using an import lib will work
+even when auto-import features are exercised, and even when
+@samp{--enable-runtime-pseudo-relocs} is used.
+
+Given the improvements in speed and memory usage, one might justifiably
+wonder why import libraries are used at all. There are three reasons:
+
+1. Until recently, the link-directly-to-dll functionality did @emph{not}
+work with auto-imported data.
+
+2. Sometimes it is necessary to include pure static objects within the
+import library (which otherwise contains only bfd's for indirection
+symbols that point to the exports of a dll). Again, the import lib
+for the cygwin kernel makes use of this ability, and it is not
+possible to do this without an import lib.
+
+3. Symbol aliases can only be resolved using an import lib. This is
+critical when linking against OS-supplied dll's (eg, the win32 API)
+in which symbols are usually exported as undecorated aliases of their
+stdcall-decorated assembly names.
+
+So, import libs are not going away. But the ability to replace
+true import libs with a simple symbolic link to (or a copy of)
+a dll, in many cases, is a useful addition to the suite of tools
+binutils makes available to the win32 developer. Given the
+massive improvements in memory requirements during linking, storage
+requirements, and linking speed, we expect that many developers
+will soon begin to use this feature whenever possible.
+
+@item symbol aliasing
+@table @emph
+@item adding additional names
+Sometimes, it is useful to export symbols with additional names.
+A symbol @samp{foo} will be exported as @samp{foo}, but it can also be
+exported as @samp{_foo} by using special directives in the DEF file
+when creating the dll. This will affect also the optional created
+import library. Consider the following DEF file:
+
+@example
+LIBRARY "xyz.dll" BASE=0x61000000
+
+EXPORTS
+foo
+_foo = foo
+@end example
+
+The line @samp{_foo = foo} maps the symbol @samp{foo} to @samp{_foo}.
+
+Another method for creating a symbol alias is to create it in the
+source code using the "weak" attribute:
+
+@example
+void foo () @{ /* Do something. */; @}
+void _foo () __attribute__ ((weak, alias ("foo")));
+@end example
+
+See the gcc manual for more information about attributes and weak
+symbols.
+
+@item renaming symbols
+Sometimes it is useful to rename exports. For instance, the cygwin
+kernel does this regularly. A symbol @samp{_foo} can be exported as
+@samp{foo} but not as @samp{_foo} by using special directives in the
+DEF file. (This will also affect the import library, if it is
+created). In the following example:
+
+@example
+LIBRARY "xyz.dll" BASE=0x61000000
+
+EXPORTS
+_foo = foo
+@end example
+
+The line @samp{_foo = foo} maps the exported symbol @samp{foo} to
+@samp{_foo}.
+@end table
+
+Note: using a DEF file disables the default auto-export behavior,
+unless the @samp{--export-all-symbols} command line option is used.
+If, however, you are trying to rename symbols, then you should list
+@emph{all} desired exports in the DEF file, including the symbols
+that are not being renamed, and do @emph{not} use the
+@samp{--export-all-symbols} option. If you list only the
+renamed symbols in the DEF file, and use @samp{--export-all-symbols}
+to handle the other symbols, then the both the new names @emph{and}
+the original names for the renamed symbols will be exported.
+In effect, you'd be aliasing those symbols, not renaming them,
+which is probably not what you wanted.
+
+@cindex weak externals
+@item weak externals
+The Windows object format, PE, specifies a form of weak symbols called
+weak externals. When a weak symbol is linked and the symbol is not
+defined, the weak symbol becomes an alias for some other symbol. There
+are three variants of weak externals:
+@itemize
+@item Definition is searched for in objects and libraries, historically
+called lazy externals.
+@item Definition is searched for only in other objects, not in libraries.
+This form is not presently implemented.
+@item No search; the symbol is an alias. This form is not presently
+implemented.
+@end itemize
+As a GNU extension, weak symbols that do not specify an alternate symbol
+are supported. If the symbol is undefined when linking, the symbol
+uses a default value.
+
+@cindex aligned common symbols
+@item aligned common symbols
+As a GNU extension to the PE file format, it is possible to specify the
+desired alignment for a common symbol. This information is conveyed from
+the assembler or compiler to the linker by means of GNU-specific commands
+carried in the object file's @samp{.drectve} section, which are recognized
+by @command{ld} and respected when laying out the common symbols. Native
+tools will be able to process object files employing this GNU extension,
+but will fail to respect the alignment instructions, and may issue noisy
+warnings about unknown linker directives.
+@end table
+
+@ifclear GENERIC
+@lowersections
+@end ifclear
+@end ifset
+
+@ifset XTENSA
+@ifclear GENERIC
+@raisesections
+@end ifclear
+
+@node Xtensa
+@section @code{ld} and Xtensa Processors
+
+@cindex Xtensa processors
+The default @command{ld} behavior for Xtensa processors is to interpret
+@code{SECTIONS} commands so that lists of explicitly named sections in a
+specification with a wildcard file will be interleaved when necessary to
+keep literal pools within the range of PC-relative load offsets. For
+example, with the command:
+
+@smallexample
+SECTIONS
+@{
+ .text : @{
+ *(.literal .text)
+ @}
+@}
+@end smallexample
+
+@noindent
+@command{ld} may interleave some of the @code{.literal}
+and @code{.text} sections from different object files to ensure that the
+literal pools are within the range of PC-relative load offsets. A valid
+interleaving might place the @code{.literal} sections from an initial
+group of files followed by the @code{.text} sections of that group of
+files. Then, the @code{.literal} sections from the rest of the files
+and the @code{.text} sections from the rest of the files would follow.
+
+@cindex @option{--relax} on Xtensa
+@cindex relaxing on Xtensa
+Relaxation is enabled by default for the Xtensa version of @command{ld} and
+provides two important link-time optimizations. The first optimization
+is to combine identical literal values to reduce code size. A redundant
+literal will be removed and all the @code{L32R} instructions that use it
+will be changed to reference an identical literal, as long as the
+location of the replacement literal is within the offset range of all
+the @code{L32R} instructions. The second optimization is to remove
+unnecessary overhead from assembler-generated ``longcall'' sequences of
+@code{L32R}/@code{CALLX@var{n}} when the target functions are within
+range of direct @code{CALL@var{n}} instructions.
+
+For each of these cases where an indirect call sequence can be optimized
+to a direct call, the linker will change the @code{CALLX@var{n}}
+instruction to a @code{CALL@var{n}} instruction, remove the @code{L32R}
+instruction, and remove the literal referenced by the @code{L32R}
+instruction if it is not used for anything else. Removing the
+@code{L32R} instruction always reduces code size but can potentially
+hurt performance by changing the alignment of subsequent branch targets.
+By default, the linker will always preserve alignments, either by
+switching some instructions between 24-bit encodings and the equivalent
+density instructions or by inserting a no-op in place of the @code{L32R}
+instruction that was removed. If code size is more important than
+performance, the @option{--size-opt} option can be used to prevent the
+linker from widening density instructions or inserting no-ops, except in
+a few cases where no-ops are required for correctness.
+
+The following Xtensa-specific command-line options can be used to
+control the linker:
+
+@cindex Xtensa options
+@table @option
+@item --size-opt
+When optimizing indirect calls to direct calls, optimize for code size
+more than performance. With this option, the linker will not insert
+no-ops or widen density instructions to preserve branch target
+alignment. There may still be some cases where no-ops are required to
+preserve the correctness of the code.
+@end table
+
+@ifclear GENERIC
+@lowersections
+@end ifclear
+@end ifset
+
+@ifclear SingleFormat
+@node BFD
+@chapter BFD
+
+@cindex back end
+@cindex object file management
+@cindex object formats available
+@kindex objdump -i
+The linker accesses object and archive files using the BFD libraries.
+These libraries allow the linker to use the same routines to operate on
+object files whatever the object file format. A different object file
+format can be supported simply by creating a new BFD back end and adding
+it to the library. To conserve runtime memory, however, the linker and
+associated tools are usually configured to support only a subset of the
+object file formats available. You can use @code{objdump -i}
+(@pxref{objdump,,objdump,binutils.info,The GNU Binary Utilities}) to
+list all the formats available for your configuration.
+
+@cindex BFD requirements
+@cindex requirements for BFD
+As with most implementations, BFD is a compromise between
+several conflicting requirements. The major factor influencing
+BFD design was efficiency: any time used converting between
+formats is time which would not have been spent had BFD not
+been involved. This is partly offset by abstraction payback; since
+BFD simplifies applications and back ends, more time and care
+may be spent optimizing algorithms for a greater speed.
+
+One minor artifact of the BFD solution which you should bear in
+mind is the potential for information loss. There are two places where
+useful information can be lost using the BFD mechanism: during
+conversion and during output. @xref{BFD information loss}.
+
+@menu
+* BFD outline:: How it works: an outline of BFD
+@end menu
+
+@node BFD outline
+@section How It Works: An Outline of BFD
+@cindex opening object files
+@include bfdsumm.texi
+@end ifclear
+
+@node Reporting Bugs
+@chapter Reporting Bugs
+@cindex bugs in @command{ld}
+@cindex reporting bugs in @command{ld}
+
+Your bug reports play an essential role in making @command{ld} reliable.
+
+Reporting a bug may help you by bringing a solution to your problem, or
+it may not. But in any case the principal function of a bug report is
+to help the entire community by making the next version of @command{ld}
+work better. Bug reports are your contribution to the maintenance of
+@command{ld}.
+
+In order for a bug report to serve its purpose, you must include the
+information that enables us to fix the bug.
+
+@menu
+* Bug Criteria:: Have you found a bug?
+* Bug Reporting:: How to report bugs
+@end menu
+
+@node Bug Criteria
+@section Have You Found a Bug?
+@cindex bug criteria
+
+If you are not sure whether you have found a bug, here are some guidelines:
+
+@itemize @bullet
+@cindex fatal signal
+@cindex linker crash
+@cindex crash of linker
+@item
+If the linker gets a fatal signal, for any input whatever, that is a
+@command{ld} bug. Reliable linkers never crash.
+
+@cindex error on valid input
+@item
+If @command{ld} produces an error message for valid input, that is a bug.
+
+@cindex invalid input
+@item
+If @command{ld} does not produce an error message for invalid input, that
+may be a bug. In the general case, the linker can not verify that
+object files are correct.
+
+@item
+If you are an experienced user of linkers, your suggestions for
+improvement of @command{ld} are welcome in any case.
+@end itemize
+
+@node Bug Reporting
+@section How to Report Bugs
+@cindex bug reports
+@cindex @command{ld} bugs, reporting
+
+A number of companies and individuals offer support for @sc{gnu}
+products. If you obtained @command{ld} from a support organization, we
+recommend you contact that organization first.
+
+You can find contact information for many support companies and
+individuals in the file @file{etc/SERVICE} in the @sc{gnu} Emacs
+distribution.
+
+@ifset BUGURL
+Otherwise, send bug reports for @command{ld} to
+@value{BUGURL}.
+@end ifset
+
+The fundamental principle of reporting bugs usefully is this:
+@strong{report all the facts}. If you are not sure whether to state a
+fact or leave it out, state it!
+
+Often people omit facts because they think they know what causes the
+problem and assume that some details do not matter. Thus, you might
+assume that the name of a symbol you use in an example does not
+matter. Well, probably it does not, but one cannot be sure. Perhaps
+the bug is a stray memory reference which happens to fetch from the
+location where that name is stored in memory; perhaps, if the name
+were different, the contents of that location would fool the linker
+into doing the right thing despite the bug. Play it safe and give a
+specific, complete example. That is the easiest thing for you to do,
+and the most helpful.
+
+Keep in mind that the purpose of a bug report is to enable us to fix
+the bug if it is new to us. Therefore, always write your bug reports
+on the assumption that the bug has not been reported previously.
+
+Sometimes people give a few sketchy facts and ask, ``Does this ring a
+bell?'' This cannot help us fix a bug, so it is basically useless. We
+respond by asking for enough details to enable us to investigate.
+You might as well expedite matters by sending them to begin with.
+
+To enable us to fix the bug, you should include all these things:
+
+@itemize @bullet
+@item
+The version of @command{ld}. @command{ld} announces it if you start it with
+the @samp{--version} argument.
+
+Without this, we will not know whether there is any point in looking for
+the bug in the current version of @command{ld}.
+
+@item
+Any patches you may have applied to the @command{ld} source, including any
+patches made to the @code{BFD} library.
+
+@item
+The type of machine you are using, and the operating system name and
+version number.
+
+@item
+What compiler (and its version) was used to compile @command{ld}---e.g.
+``@code{gcc-2.7}''.
+
+@item
+The command arguments you gave the linker to link your example and
+observe the bug. To guarantee you will not omit something important,
+list them all. A copy of the Makefile (or the output from make) is
+sufficient.
+
+If we were to try to guess the arguments, we would probably guess wrong
+and then we might not encounter the bug.
+
+@item
+A complete input file, or set of input files, that will reproduce the
+bug. It is generally most helpful to send the actual object files
+provided that they are reasonably small. Say no more than 10K. For
+bigger files you can either make them available by FTP or HTTP or else
+state that you are willing to send the object file(s) to whomever
+requests them. (Note - your email will be going to a mailing list, so
+we do not want to clog it up with large attachments). But small
+attachments are best.
+
+If the source files were assembled using @code{gas} or compiled using
+@code{gcc}, then it may be OK to send the source files rather than the
+object files. In this case, be sure to say exactly what version of
+@code{gas} or @code{gcc} was used to produce the object files. Also say
+how @code{gas} or @code{gcc} were configured.
+
+@item
+A description of what behavior you observe that you believe is
+incorrect. For example, ``It gets a fatal signal.''
+
+Of course, if the bug is that @command{ld} gets a fatal signal, then we
+will certainly notice it. But if the bug is incorrect output, we might
+not notice unless it is glaringly wrong. You might as well not give us
+a chance to make a mistake.
+
+Even if the problem you experience is a fatal signal, you should still
+say so explicitly. Suppose something strange is going on, such as, your
+copy of @command{ld} is out of sync, or you have encountered a bug in the
+C library on your system. (This has happened!) Your copy might crash
+and ours would not. If you told us to expect a crash, then when ours
+fails to crash, we would know that the bug was not happening for us. If
+you had not told us to expect a crash, then we would not be able to draw
+any conclusion from our observations.
+
+@item
+If you wish to suggest changes to the @command{ld} source, send us context
+diffs, as generated by @code{diff} with the @samp{-u}, @samp{-c}, or
+@samp{-p} option. Always send diffs from the old file to the new file.
+If you even discuss something in the @command{ld} source, refer to it by
+context, not by line number.
+
+The line numbers in our development sources will not match those in your
+sources. Your line numbers would convey no useful information to us.
+@end itemize
+
+Here are some things that are not necessary:
+
+@itemize @bullet
+@item
+A description of the envelope of the bug.
+
+Often people who encounter a bug spend a lot of time investigating
+which changes to the input file will make the bug go away and which
+changes will not affect it.
+
+This is often time consuming and not very useful, because the way we
+will find the bug is by running a single example under the debugger
+with breakpoints, not by pure deduction from a series of examples.
+We recommend that you save your time for something else.
+
+Of course, if you can find a simpler example to report @emph{instead}
+of the original one, that is a convenience for us. Errors in the
+output will be easier to spot, running under the debugger will take
+less time, and so on.
+
+However, simplification is not vital; if you do not want to do this,
+report the bug anyway and send us the entire test case you used.
+
+@item
+A patch for the bug.
+
+A patch for the bug does help us if it is a good one. But do not omit
+the necessary information, such as the test case, on the assumption that
+a patch is all we need. We might see problems with your patch and decide
+to fix the problem another way, or we might not understand it at all.
+
+Sometimes with a program as complicated as @command{ld} it is very hard to
+construct an example that will make the program follow a certain path
+through the code. If you do not send us the example, we will not be
+able to construct one, so we will not be able to verify that the bug is
+fixed.
+
+And if we cannot understand what bug you are trying to fix, or why your
+patch should be an improvement, we will not install it. A test case will
+help us to understand.
+
+@item
+A guess about what the bug is or what it depends on.
+
+Such guesses are usually wrong. Even we cannot guess right about such
+things without first using the debugger to find the facts.
+@end itemize
+
+@node MRI
+@appendix MRI Compatible Script Files
+@cindex MRI compatibility
+To aid users making the transition to @sc{gnu} @command{ld} from the MRI
+linker, @command{ld} can use MRI compatible linker scripts as an
+alternative to the more general-purpose linker scripting language
+described in @ref{Scripts}. MRI compatible linker scripts have a much
+simpler command set than the scripting language otherwise used with
+@command{ld}. @sc{gnu} @command{ld} supports the most commonly used MRI
+linker commands; these commands are described here.
+
+In general, MRI scripts aren't of much use with the @code{a.out} object
+file format, since it only has three sections and MRI scripts lack some
+features to make use of them.
+
+You can specify a file containing an MRI-compatible script using the
+@samp{-c} command-line option.
+
+Each command in an MRI-compatible script occupies its own line; each
+command line starts with the keyword that identifies the command (though
+blank lines are also allowed for punctuation). If a line of an
+MRI-compatible script begins with an unrecognized keyword, @command{ld}
+issues a warning message, but continues processing the script.
+
+Lines beginning with @samp{*} are comments.
+
+You can write these commands using all upper-case letters, or all
+lower case; for example, @samp{chip} is the same as @samp{CHIP}.
+The following list shows only the upper-case form of each command.
+
+@table @code
+@cindex @code{ABSOLUTE} (MRI)
+@item ABSOLUTE @var{secname}
+@itemx ABSOLUTE @var{secname}, @var{secname}, @dots{} @var{secname}
+Normally, @command{ld} includes in the output file all sections from all
+the input files. However, in an MRI-compatible script, you can use the
+@code{ABSOLUTE} command to restrict the sections that will be present in
+your output program. If the @code{ABSOLUTE} command is used at all in a
+script, then only the sections named explicitly in @code{ABSOLUTE}
+commands will appear in the linker output. You can still use other
+input sections (whatever you select on the command line, or using
+@code{LOAD}) to resolve addresses in the output file.
+
+@cindex @code{ALIAS} (MRI)
+@item ALIAS @var{out-secname}, @var{in-secname}
+Use this command to place the data from input section @var{in-secname}
+in a section called @var{out-secname} in the linker output file.
+
+@var{in-secname} may be an integer.
+
+@cindex @code{ALIGN} (MRI)
+@item ALIGN @var{secname} = @var{expression}
+Align the section called @var{secname} to @var{expression}. The
+@var{expression} should be a power of two.
+
+@cindex @code{BASE} (MRI)
+@item BASE @var{expression}
+Use the value of @var{expression} as the lowest address (other than
+absolute addresses) in the output file.
+
+@cindex @code{CHIP} (MRI)
+@item CHIP @var{expression}
+@itemx CHIP @var{expression}, @var{expression}
+This command does nothing; it is accepted only for compatibility.
+
+@cindex @code{END} (MRI)
+@item END
+This command does nothing whatever; it's only accepted for compatibility.
+
+@cindex @code{FORMAT} (MRI)
+@item FORMAT @var{output-format}
+Similar to the @code{OUTPUT_FORMAT} command in the more general linker
+language, but restricted to one of these output formats:
+
+@enumerate
+@item
+S-records, if @var{output-format} is @samp{S}
+
+@item
+IEEE, if @var{output-format} is @samp{IEEE}
+
+@item
+COFF (the @samp{coff-m68k} variant in BFD), if @var{output-format} is
+@samp{COFF}
+@end enumerate
+
+@cindex @code{LIST} (MRI)
+@item LIST @var{anything}@dots{}
+Print (to the standard output file) a link map, as produced by the
+@command{ld} command-line option @samp{-M}.
+
+The keyword @code{LIST} may be followed by anything on the
+same line, with no change in its effect.
+
+@cindex @code{LOAD} (MRI)
+@item LOAD @var{filename}
+@itemx LOAD @var{filename}, @var{filename}, @dots{} @var{filename}
+Include one or more object file @var{filename} in the link; this has the
+same effect as specifying @var{filename} directly on the @command{ld}
+command line.
+
+@cindex @code{NAME} (MRI)
+@item NAME @var{output-name}
+@var{output-name} is the name for the program produced by @command{ld}; the
+MRI-compatible command @code{NAME} is equivalent to the command-line
+option @samp{-o} or the general script language command @code{OUTPUT}.
+
+@cindex @code{ORDER} (MRI)
+@item ORDER @var{secname}, @var{secname}, @dots{} @var{secname}
+@itemx ORDER @var{secname} @var{secname} @var{secname}
+Normally, @command{ld} orders the sections in its output file in the
+order in which they first appear in the input files. In an MRI-compatible
+script, you can override this ordering with the @code{ORDER} command. The
+sections you list with @code{ORDER} will appear first in your output
+file, in the order specified.
+
+@cindex @code{PUBLIC} (MRI)
+@item PUBLIC @var{name}=@var{expression}
+@itemx PUBLIC @var{name},@var{expression}
+@itemx PUBLIC @var{name} @var{expression}
+Supply a value (@var{expression}) for external symbol
+@var{name} used in the linker input files.
+
+@cindex @code{SECT} (MRI)
+@item SECT @var{secname}, @var{expression}
+@itemx SECT @var{secname}=@var{expression}
+@itemx SECT @var{secname} @var{expression}
+You can use any of these three forms of the @code{SECT} command to
+specify the start address (@var{expression}) for section @var{secname}.
+If you have more than one @code{SECT} statement for the same
+@var{secname}, only the @emph{first} sets the start address.
+@end table
+
+@node GNU Free Documentation License
+@appendix GNU Free Documentation License
+@include fdl.texi
+
+@node LD Index
+@unnumbered LD Index
+
+@printindex cp
+
+@tex
+% I think something like @colophon should be in texinfo. In the
+% meantime:
+\long\def\colophon{\hbox to0pt{}\vfill
+\centerline{The body of this manual is set in}
+\centerline{\fontname\tenrm,}
+\centerline{with headings in {\bf\fontname\tenbf}}
+\centerline{and examples in {\tt\fontname\tentt}.}
+\centerline{{\it\fontname\tenit\/} and}
+\centerline{{\sl\fontname\tensl\/}}
+\centerline{are used for emphasis.}\vfill}
+\page\colophon
+% Blame: doc@cygnus.com, 28mar91.
+@end tex
+
+@bye
diff --git a/binutils-2.21/ld/ldcref.c b/binutils-2.21/ld/ldcref.c
new file mode 100644
index 0000000..2f6a46c
--- /dev/null
+++ b/binutils-2.21/ld/ldcref.c
@@ -0,0 +1,691 @@
+/* ldcref.c -- output a cross reference table
+ Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+ 2007, 2008 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor <ian@cygnus.com>
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+
+/* This file holds routines that manage the cross reference table.
+ The table is used to generate cross reference reports. It is also
+ used to implement the NOCROSSREFS command in the linker script. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+#include "libiberty.h"
+#include "demangle.h"
+#include "objalloc.h"
+
+#include "ld.h"
+#include "ldmain.h"
+#include "ldmisc.h"
+#include "ldexp.h"
+#include "ldlang.h"
+
+/* We keep an instance of this structure for each reference to a
+ symbol from a given object. */
+
+struct cref_ref {
+ /* The next reference. */
+ struct cref_ref *next;
+ /* The object. */
+ bfd *abfd;
+ /* True if the symbol is defined. */
+ unsigned int def : 1;
+ /* True if the symbol is common. */
+ unsigned int common : 1;
+ /* True if the symbol is undefined. */
+ unsigned int undef : 1;
+};
+
+/* We keep a hash table of symbols. Each entry looks like this. */
+
+struct cref_hash_entry {
+ struct bfd_hash_entry root;
+ /* The demangled name. */
+ const char *demangled;
+ /* References to and definitions of this symbol. */
+ struct cref_ref *refs;
+};
+
+/* This is what the hash table looks like. */
+
+struct cref_hash_table {
+ struct bfd_hash_table root;
+};
+
+/* Forward declarations. */
+
+static void output_one_cref (FILE *, struct cref_hash_entry *);
+static void check_local_sym_xref (lang_input_statement_type *);
+static bfd_boolean check_nocrossref (struct cref_hash_entry *, void *);
+static void check_refs (const char *, bfd_boolean, asection *, bfd *,
+ struct lang_nocrossrefs *);
+static void check_reloc_refs (bfd *, asection *, void *);
+
+/* Look up an entry in the cref hash table. */
+
+#define cref_hash_lookup(table, string, create, copy) \
+ ((struct cref_hash_entry *) \
+ bfd_hash_lookup (&(table)->root, (string), (create), (copy)))
+
+/* Traverse the cref hash table. */
+
+#define cref_hash_traverse(table, func, info) \
+ (bfd_hash_traverse \
+ (&(table)->root, \
+ (bfd_boolean (*) (struct bfd_hash_entry *, void *)) (func), \
+ (info)))
+
+/* The cref hash table. */
+
+static struct cref_hash_table cref_table;
+
+/* Whether the cref hash table has been initialized. */
+
+static bfd_boolean cref_initialized;
+
+/* The number of symbols seen so far. */
+
+static size_t cref_symcount;
+
+/* Used to take a snapshot of the cref hash table when starting to
+ add syms from an as-needed library. */
+static struct bfd_hash_entry **old_table;
+static unsigned int old_size;
+static unsigned int old_count;
+static void *old_tab;
+static void *alloc_mark;
+static size_t tabsize, entsize, refsize;
+static size_t old_symcount;
+
+/* Create an entry in a cref hash table. */
+
+static struct bfd_hash_entry *
+cref_hash_newfunc (struct bfd_hash_entry *entry,
+ struct bfd_hash_table *table,
+ const char *string)
+{
+ struct cref_hash_entry *ret = (struct cref_hash_entry *) entry;
+
+ /* Allocate the structure if it has not already been allocated by a
+ subclass. */
+ if (ret == NULL)
+ ret = ((struct cref_hash_entry *)
+ bfd_hash_allocate (table, sizeof (struct cref_hash_entry)));
+ if (ret == NULL)
+ return NULL;
+
+ /* Call the allocation method of the superclass. */
+ ret = ((struct cref_hash_entry *)
+ bfd_hash_newfunc ((struct bfd_hash_entry *) ret, table, string));
+ if (ret != NULL)
+ {
+ /* Set local fields. */
+ ret->demangled = NULL;
+ ret->refs = NULL;
+
+ /* Keep a count of the number of entries created in the hash
+ table. */
+ ++cref_symcount;
+ }
+
+ return &ret->root;
+}
+
+/* Add a symbol to the cref hash table. This is called for every
+ global symbol that is seen during the link. */
+
+void
+add_cref (const char *name,
+ bfd *abfd,
+ asection *section,
+ bfd_vma value ATTRIBUTE_UNUSED)
+{
+ struct cref_hash_entry *h;
+ struct cref_ref *r;
+
+ if (! cref_initialized)
+ {
+ if (!bfd_hash_table_init (&cref_table.root, cref_hash_newfunc,
+ sizeof (struct cref_hash_entry)))
+ einfo (_("%X%P: bfd_hash_table_init of cref table failed: %E\n"));
+ cref_initialized = TRUE;
+ }
+
+ h = cref_hash_lookup (&cref_table, name, TRUE, FALSE);
+ if (h == NULL)
+ einfo (_("%X%P: cref_hash_lookup failed: %E\n"));
+
+ for (r = h->refs; r != NULL; r = r->next)
+ if (r->abfd == abfd)
+ break;
+
+ if (r == NULL)
+ {
+ r = (struct cref_ref *) bfd_hash_allocate (&cref_table.root, sizeof *r);
+ if (r == NULL)
+ einfo (_("%X%P: cref alloc failed: %E\n"));
+ r->next = h->refs;
+ h->refs = r;
+ r->abfd = abfd;
+ r->def = FALSE;
+ r->common = FALSE;
+ r->undef = FALSE;
+ }
+
+ if (bfd_is_und_section (section))
+ r->undef = TRUE;
+ else if (bfd_is_com_section (section))
+ r->common = TRUE;
+ else
+ r->def = TRUE;
+}
+
+/* Called before loading an as-needed library to take a snapshot of
+ the cref hash table, and after we have loaded or found that the
+ library was not needed. */
+
+bfd_boolean
+handle_asneeded_cref (bfd *abfd ATTRIBUTE_UNUSED,
+ enum notice_asneeded_action act)
+{
+ unsigned int i;
+
+ if (!cref_initialized)
+ return TRUE;
+
+ if (act == notice_as_needed)
+ {
+ char *old_ent, *old_ref;
+
+ for (i = 0; i < cref_table.root.size; i++)
+ {
+ struct bfd_hash_entry *p;
+ struct cref_hash_entry *c;
+ struct cref_ref *r;
+
+ for (p = cref_table.root.table[i]; p != NULL; p = p->next)
+ {
+ entsize += cref_table.root.entsize;
+ c = (struct cref_hash_entry *) p;
+ for (r = c->refs; r != NULL; r = r->next)
+ refsize += sizeof (struct cref_ref);
+ }
+ }
+
+ tabsize = cref_table.root.size * sizeof (struct bfd_hash_entry *);
+ old_tab = xmalloc (tabsize + entsize + refsize);
+
+ alloc_mark = bfd_hash_allocate (&cref_table.root, 1);
+ if (alloc_mark == NULL)
+ return FALSE;
+
+ memcpy (old_tab, cref_table.root.table, tabsize);
+ old_ent = (char *) old_tab + tabsize;
+ old_ref = (char *) old_ent + entsize;
+ old_table = cref_table.root.table;
+ old_size = cref_table.root.size;
+ old_count = cref_table.root.count;
+ old_symcount = cref_symcount;
+
+ for (i = 0; i < cref_table.root.size; i++)
+ {
+ struct bfd_hash_entry *p;
+ struct cref_hash_entry *c;
+ struct cref_ref *r;
+
+ for (p = cref_table.root.table[i]; p != NULL; p = p->next)
+ {
+ memcpy (old_ent, p, cref_table.root.entsize);
+ old_ent = (char *) old_ent + cref_table.root.entsize;
+ c = (struct cref_hash_entry *) p;
+ for (r = c->refs; r != NULL; r = r->next)
+ {
+ memcpy (old_ref, r, sizeof (struct cref_ref));
+ old_ref = (char *) old_ref + sizeof (struct cref_ref);
+ }
+ }
+ }
+ return TRUE;
+ }
+
+ if (act == notice_not_needed)
+ {
+ char *old_ent, *old_ref;
+
+ if (old_tab == NULL)
+ {
+ /* The only way old_tab can be NULL is if the cref hash table
+ had not been initialised when notice_as_needed. */
+ bfd_hash_table_free (&cref_table.root);
+ cref_initialized = FALSE;
+ return TRUE;
+ }
+
+ old_ent = (char *) old_tab + tabsize;
+ old_ref = (char *) old_ent + entsize;
+ cref_table.root.table = old_table;
+ cref_table.root.size = old_size;
+ cref_table.root.count = old_count;
+ memcpy (cref_table.root.table, old_tab, tabsize);
+ cref_symcount = old_symcount;
+
+ for (i = 0; i < cref_table.root.size; i++)
+ {
+ struct bfd_hash_entry *p;
+ struct cref_hash_entry *c;
+ struct cref_ref *r;
+
+ for (p = cref_table.root.table[i]; p != NULL; p = p->next)
+ {
+ memcpy (p, old_ent, cref_table.root.entsize);
+ old_ent = (char *) old_ent + cref_table.root.entsize;
+ c = (struct cref_hash_entry *) p;
+ for (r = c->refs; r != NULL; r = r->next)
+ {
+ memcpy (r, old_ref, sizeof (struct cref_ref));
+ old_ref = (char *) old_ref + sizeof (struct cref_ref);
+ }
+ }
+ }
+
+ objalloc_free_block ((struct objalloc *) cref_table.root.memory,
+ alloc_mark);
+ }
+ else if (act != notice_needed)
+ return FALSE;
+
+ free (old_tab);
+ old_tab = NULL;
+ return TRUE;
+}
+
+/* Copy the addresses of the hash table entries into an array. This
+ is called via cref_hash_traverse. We also fill in the demangled
+ name. */
+
+static bfd_boolean
+cref_fill_array (struct cref_hash_entry *h, void *data)
+{
+ struct cref_hash_entry ***pph = (struct cref_hash_entry ***) data;
+
+ ASSERT (h->demangled == NULL);
+ h->demangled = bfd_demangle (link_info.output_bfd, h->root.string,
+ DMGL_ANSI | DMGL_PARAMS);
+ if (h->demangled == NULL)
+ h->demangled = h->root.string;
+
+ **pph = h;
+
+ ++*pph;
+
+ return TRUE;
+}
+
+/* Sort an array of cref hash table entries by name. */
+
+static int
+cref_sort_array (const void *a1, const void *a2)
+{
+ const struct cref_hash_entry * const *p1 =
+ (const struct cref_hash_entry * const *) a1;
+ const struct cref_hash_entry * const *p2 =
+ (const struct cref_hash_entry * const *) a2;
+
+ return strcmp ((*p1)->demangled, (*p2)->demangled);
+}
+
+/* Write out the cref table. */
+
+#define FILECOL (50)
+
+void
+output_cref (FILE *fp)
+{
+ int len;
+ struct cref_hash_entry **csyms, **csym_fill, **csym, **csym_end;
+ const char *msg;
+
+ fprintf (fp, _("\nCross Reference Table\n\n"));
+ msg = _("Symbol");
+ fprintf (fp, "%s", msg);
+ len = strlen (msg);
+ while (len < FILECOL)
+ {
+ putc (' ', fp);
+ ++len;
+ }
+ fprintf (fp, _("File\n"));
+
+ if (! cref_initialized)
+ {
+ fprintf (fp, _("No symbols\n"));
+ return;
+ }
+
+ csyms = (struct cref_hash_entry **) xmalloc (cref_symcount * sizeof (*csyms));
+
+ csym_fill = csyms;
+ cref_hash_traverse (&cref_table, cref_fill_array, &csym_fill);
+ ASSERT ((size_t) (csym_fill - csyms) == cref_symcount);
+
+ qsort (csyms, cref_symcount, sizeof (*csyms), cref_sort_array);
+
+ csym_end = csyms + cref_symcount;
+ for (csym = csyms; csym < csym_end; csym++)
+ output_one_cref (fp, *csym);
+}
+
+/* Output one entry in the cross reference table. */
+
+static void
+output_one_cref (FILE *fp, struct cref_hash_entry *h)
+{
+ int len;
+ struct bfd_link_hash_entry *hl;
+ struct cref_ref *r;
+
+ hl = bfd_link_hash_lookup (link_info.hash, h->root.string, FALSE,
+ FALSE, TRUE);
+ if (hl == NULL)
+ einfo ("%P: symbol `%T' missing from main hash table\n",
+ h->root.string);
+ else
+ {
+ /* If this symbol is defined in a dynamic object but never
+ referenced by a normal object, then don't print it. */
+ if (hl->type == bfd_link_hash_defined)
+ {
+ if (hl->u.def.section->output_section == NULL)
+ return;
+ if (hl->u.def.section->owner != NULL
+ && (hl->u.def.section->owner->flags & DYNAMIC) != 0)
+ {
+ for (r = h->refs; r != NULL; r = r->next)
+ if ((r->abfd->flags & DYNAMIC) == 0)
+ break;
+ if (r == NULL)
+ return;
+ }
+ }
+ }
+
+ fprintf (fp, "%s ", h->demangled);
+ len = strlen (h->demangled) + 1;
+
+ for (r = h->refs; r != NULL; r = r->next)
+ {
+ if (r->def)
+ {
+ while (len < FILECOL)
+ {
+ putc (' ', fp);
+ ++len;
+ }
+ lfinfo (fp, "%B\n", r->abfd);
+ len = 0;
+ }
+ }
+
+ for (r = h->refs; r != NULL; r = r->next)
+ {
+ if (! r->def)
+ {
+ while (len < FILECOL)
+ {
+ putc (' ', fp);
+ ++len;
+ }
+ lfinfo (fp, "%B\n", r->abfd);
+ len = 0;
+ }
+ }
+
+ ASSERT (len == 0);
+}
+
+/* Check for prohibited cross references. */
+
+void
+check_nocrossrefs (void)
+{
+ if (! cref_initialized)
+ return;
+
+ cref_hash_traverse (&cref_table, check_nocrossref, NULL);
+
+ lang_for_each_file (check_local_sym_xref);
+}
+
+/* Check for prohibited cross references to local and section symbols. */
+
+static void
+check_local_sym_xref (lang_input_statement_type *statement)
+{
+ bfd *abfd;
+ asymbol **syms;
+
+ abfd = statement->the_bfd;
+ if (abfd == NULL)
+ return;
+
+ if (!bfd_generic_link_read_symbols (abfd))
+ einfo (_("%B%F: could not read symbols: %E\n"), abfd);
+
+ for (syms = bfd_get_outsymbols (abfd); *syms; ++syms)
+ {
+ asymbol *sym = *syms;
+ if (sym->flags & (BSF_GLOBAL | BSF_WARNING | BSF_INDIRECT | BSF_FILE))
+ continue;
+ if ((sym->flags & (BSF_LOCAL | BSF_SECTION_SYM)) != 0
+ && sym->section->output_section != NULL)
+ {
+ const char *outsecname, *symname;
+ struct lang_nocrossrefs *ncrs;
+ struct lang_nocrossref *ncr;
+
+ outsecname = sym->section->output_section->name;
+ symname = NULL;
+ if ((sym->flags & BSF_SECTION_SYM) == 0)
+ symname = sym->name;
+ for (ncrs = nocrossref_list; ncrs != NULL; ncrs = ncrs->next)
+ for (ncr = ncrs->list; ncr != NULL; ncr = ncr->next)
+ if (strcmp (ncr->name, outsecname) == 0)
+ check_refs (symname, FALSE, sym->section, abfd, ncrs);
+ }
+ }
+}
+
+/* Check one symbol to see if it is a prohibited cross reference. */
+
+static bfd_boolean
+check_nocrossref (struct cref_hash_entry *h, void *ignore ATTRIBUTE_UNUSED)
+{
+ struct bfd_link_hash_entry *hl;
+ asection *defsec;
+ const char *defsecname;
+ struct lang_nocrossrefs *ncrs;
+ struct lang_nocrossref *ncr;
+ struct cref_ref *ref;
+
+ hl = bfd_link_hash_lookup (link_info.hash, h->root.string, FALSE,
+ FALSE, TRUE);
+ if (hl == NULL)
+ {
+ einfo (_("%P: symbol `%T' missing from main hash table\n"),
+ h->root.string);
+ return TRUE;
+ }
+
+ if (hl->type != bfd_link_hash_defined
+ && hl->type != bfd_link_hash_defweak)
+ return TRUE;
+
+ defsec = hl->u.def.section->output_section;
+ if (defsec == NULL)
+ return TRUE;
+ defsecname = bfd_get_section_name (defsec->owner, defsec);
+
+ for (ncrs = nocrossref_list; ncrs != NULL; ncrs = ncrs->next)
+ for (ncr = ncrs->list; ncr != NULL; ncr = ncr->next)
+ if (strcmp (ncr->name, defsecname) == 0)
+ for (ref = h->refs; ref != NULL; ref = ref->next)
+ check_refs (hl->root.string, TRUE, hl->u.def.section,
+ ref->abfd, ncrs);
+
+ return TRUE;
+}
+
+/* The struct is used to pass information from check_refs to
+ check_reloc_refs through bfd_map_over_sections. */
+
+struct check_refs_info {
+ const char *sym_name;
+ asection *defsec;
+ struct lang_nocrossrefs *ncrs;
+ asymbol **asymbols;
+ bfd_boolean global;
+};
+
+/* This function is called for each symbol defined in a section which
+ prohibits cross references. We need to look through all references
+ to this symbol, and ensure that the references are not from
+ prohibited sections. */
+
+static void
+check_refs (const char *name,
+ bfd_boolean global,
+ asection *sec,
+ bfd *abfd,
+ struct lang_nocrossrefs *ncrs)
+{
+ struct check_refs_info info;
+
+ /* We need to look through the relocations for this BFD, to see
+ if any of the relocations which refer to this symbol are from
+ a prohibited section. Note that we need to do this even for
+ the BFD in which the symbol is defined, since even a single
+ BFD might contain a prohibited cross reference. */
+
+ if (!bfd_generic_link_read_symbols (abfd))
+ einfo (_("%B%F: could not read symbols: %E\n"), abfd);
+
+ info.sym_name = name;
+ info.global = global;
+ info.defsec = sec;
+ info.ncrs = ncrs;
+ info.asymbols = bfd_get_outsymbols (abfd);
+ bfd_map_over_sections (abfd, check_reloc_refs, &info);
+}
+
+/* This is called via bfd_map_over_sections. INFO->SYM_NAME is a symbol
+ defined in INFO->DEFSECNAME. If this section maps into any of the
+ sections listed in INFO->NCRS, other than INFO->DEFSECNAME, then we
+ look through the relocations. If any of the relocations are to
+ INFO->SYM_NAME, then we report a prohibited cross reference error. */
+
+static void
+check_reloc_refs (bfd *abfd, asection *sec, void *iarg)
+{
+ struct check_refs_info *info = (struct check_refs_info *) iarg;
+ asection *outsec;
+ const char *outsecname;
+ asection *outdefsec;
+ const char *outdefsecname;
+ struct lang_nocrossref *ncr;
+ const char *symname;
+ bfd_boolean global;
+ long relsize;
+ arelent **relpp;
+ long relcount;
+ arelent **p, **pend;
+
+ outsec = sec->output_section;
+ outsecname = bfd_get_section_name (outsec->owner, outsec);
+
+ outdefsec = info->defsec->output_section;
+ outdefsecname = bfd_get_section_name (outdefsec->owner, outdefsec);
+
+ /* The section where the symbol is defined is permitted. */
+ if (strcmp (outsecname, outdefsecname) == 0)
+ return;
+
+ for (ncr = info->ncrs->list; ncr != NULL; ncr = ncr->next)
+ if (strcmp (outsecname, ncr->name) == 0)
+ break;
+
+ if (ncr == NULL)
+ return;
+
+ /* This section is one for which cross references are prohibited.
+ Look through the relocations, and see if any of them are to
+ INFO->SYM_NAME. If INFO->SYMNAME is NULL, check for relocations
+ against the section symbol. If INFO->GLOBAL is TRUE, the
+ definition is global, check for relocations against the global
+ symbols. Otherwise check for relocations against the local and
+ section symbols. */
+
+ symname = info->sym_name;
+ global = info->global;
+
+ relsize = bfd_get_reloc_upper_bound (abfd, sec);
+ if (relsize < 0)
+ einfo (_("%B%F: could not read relocs: %E\n"), abfd);
+ if (relsize == 0)
+ return;
+
+ relpp = (arelent **) xmalloc (relsize);
+ relcount = bfd_canonicalize_reloc (abfd, sec, relpp, info->asymbols);
+ if (relcount < 0)
+ einfo (_("%B%F: could not read relocs: %E\n"), abfd);
+
+ p = relpp;
+ pend = p + relcount;
+ for (; p < pend && *p != NULL; p++)
+ {
+ arelent *q = *p;
+
+ if (q->sym_ptr_ptr != NULL
+ && *q->sym_ptr_ptr != NULL
+ && ((global
+ && (bfd_is_und_section (bfd_get_section (*q->sym_ptr_ptr))
+ || bfd_is_com_section (bfd_get_section (*q->sym_ptr_ptr))
+ || ((*q->sym_ptr_ptr)->flags & (BSF_GLOBAL
+ | BSF_WEAK)) != 0))
+ || (!global
+ && ((*q->sym_ptr_ptr)->flags & (BSF_LOCAL
+ | BSF_SECTION_SYM)) != 0
+ && bfd_get_section (*q->sym_ptr_ptr) == info->defsec))
+ && (symname != NULL
+ ? strcmp (bfd_asymbol_name (*q->sym_ptr_ptr), symname) == 0
+ : ((*q->sym_ptr_ptr)->flags & BSF_SECTION_SYM) != 0))
+ {
+ /* We found a reloc for the symbol. The symbol is defined
+ in OUTSECNAME. This reloc is from a section which is
+ mapped into a section from which references to OUTSECNAME
+ are prohibited. We must report an error. */
+ einfo (_("%X%C: prohibited cross reference from %s to `%T' in %s\n"),
+ abfd, sec, q->address, outsecname,
+ bfd_asymbol_name (*q->sym_ptr_ptr), outdefsecname);
+ }
+ }
+
+ free (relpp);
+}
diff --git a/binutils-2.21/ld/ldctor.c b/binutils-2.21/ld/ldctor.c
new file mode 100644
index 0000000..c4fd9e8
--- /dev/null
+++ b/binutils-2.21/ld/ldctor.c
@@ -0,0 +1,376 @@
+/* ldctor.c -- constructor support routines
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+ 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+ Free Software Foundation, Inc.
+ By Steve Chamberlain <sac@cygnus.com>
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+#include "safe-ctype.h"
+
+#include "ld.h"
+#include "ldexp.h"
+#include "ldlang.h"
+#include "ldmisc.h"
+#include <ldgram.h>
+#include "ldmain.h"
+#include "ldctor.h"
+
+/* The list of statements needed to handle constructors. These are
+ invoked by the command CONSTRUCTORS in the linker script. */
+lang_statement_list_type constructor_list;
+
+/* Whether the constructors should be sorted. Note that this is
+ global for the entire link; we assume that there is only a single
+ CONSTRUCTORS command in the linker script. */
+bfd_boolean constructors_sorted;
+
+/* The sets we have seen. */
+struct set_info *sets;
+
+/* Add an entry to a set. H is the entry in the linker hash table.
+ RELOC is the relocation to use for an entry in the set. SECTION
+ and VALUE are the value to add. This is called during the first
+ phase of the link, when we are still gathering symbols together.
+ We just record the information now. The ldctor_build_sets
+ function will construct the sets. */
+
+void
+ldctor_add_set_entry (struct bfd_link_hash_entry *h,
+ bfd_reloc_code_real_type reloc,
+ const char *name,
+ asection *section,
+ bfd_vma value)
+{
+ struct set_info *p;
+ struct set_element *e;
+ struct set_element **epp;
+
+ for (p = sets; p != NULL; p = p->next)
+ if (p->h == h)
+ break;
+
+ if (p == NULL)
+ {
+ p = (struct set_info *) xmalloc (sizeof (struct set_info));
+ p->next = sets;
+ sets = p;
+ p->h = h;
+ p->reloc = reloc;
+ p->count = 0;
+ p->elements = NULL;
+ }
+ else
+ {
+ if (p->reloc != reloc)
+ {
+ einfo (_("%P%X: Different relocs used in set %s\n"),
+ h->root.string);
+ return;
+ }
+
+ /* Don't permit a set to be constructed from different object
+ file formats. The same reloc may have different results. We
+ actually could sometimes handle this, but the case is
+ unlikely to ever arise. Sometimes constructor symbols are in
+ unusual sections, such as the absolute section--this appears
+ to be the case in Linux a.out--and in such cases we just
+ assume everything is OK. */
+ if (p->elements != NULL
+ && section->owner != NULL
+ && p->elements->section->owner != NULL
+ && strcmp (bfd_get_target (section->owner),
+ bfd_get_target (p->elements->section->owner)) != 0)
+ {
+ einfo (_("%P%X: Different object file formats composing set %s\n"),
+ h->root.string);
+ return;
+ }
+ }
+
+ e = (struct set_element *) xmalloc (sizeof (struct set_element));
+ e->next = NULL;
+ e->name = name;
+ e->section = section;
+ e->value = value;
+
+ for (epp = &p->elements; *epp != NULL; epp = &(*epp)->next)
+ ;
+ *epp = e;
+
+ ++p->count;
+}
+
+/* Get the priority of a g++ global constructor or destructor from the
+ symbol name. */
+
+static int
+ctor_prio (const char *name)
+{
+ /* The name will look something like _GLOBAL_$I$65535$test02__Fv.
+ There might be extra leading underscores, and the $ characters
+ might be something else. The I might be a D. */
+
+ while (*name == '_')
+ ++name;
+
+ if (! CONST_STRNEQ (name, "GLOBAL_"))
+ return -1;
+
+ name += sizeof "GLOBAL_" - 1;
+
+ if (name[0] != name[2])
+ return -1;
+ if (name[1] != 'I' && name[1] != 'D')
+ return -1;
+ if (! ISDIGIT (name[3]))
+ return -1;
+
+ return atoi (name + 3);
+}
+
+/* This function is used to sort constructor elements by priority. It
+ is called via qsort. */
+
+static int
+ctor_cmp (const void *p1, const void *p2)
+{
+ const struct set_element * const *pe1 =
+ (const struct set_element * const *) p1;
+ const struct set_element * const *pe2 =
+ (const struct set_element * const *) p2;
+ const char *n1;
+ const char *n2;
+ int prio1;
+ int prio2;
+
+ n1 = (*pe1)->name;
+ if (n1 == NULL)
+ n1 = "";
+ n2 = (*pe2)->name;
+ if (n2 == NULL)
+ n2 = "";
+
+ /* We need to sort in reverse order by priority. When two
+ constructors have the same priority, we should maintain their
+ current relative position. */
+
+ prio1 = ctor_prio (n1);
+ prio2 = ctor_prio (n2);
+
+ /* We sort in reverse order because that is what g++ expects. */
+ if (prio1 < prio2)
+ return 1;
+ else if (prio1 > prio2)
+ return -1;
+
+ /* Force a stable sort. */
+
+ if (pe1 < pe2)
+ return -1;
+ else if (pe1 > pe2)
+ return 1;
+ else
+ return 0;
+}
+
+/* This function is called after the first phase of the link and
+ before the second phase. At this point all set information has
+ been gathered. We now put the statements to build the sets
+ themselves into constructor_list. */
+
+void
+ldctor_build_sets (void)
+{
+ static bfd_boolean called;
+ bfd_boolean header_printed;
+ struct set_info *p;
+
+ /* The emulation code may call us directly, but we only want to do
+ this once. */
+ if (called)
+ return;
+ called = TRUE;
+
+ if (constructors_sorted)
+ {
+ for (p = sets; p != NULL; p = p->next)
+ {
+ int c, i;
+ struct set_element *e;
+ struct set_element **array;
+
+ if (p->elements == NULL)
+ continue;
+
+ c = 0;
+ for (e = p->elements; e != NULL; e = e->next)
+ ++c;
+
+ array = (struct set_element **) xmalloc (c * sizeof *array);
+
+ i = 0;
+ for (e = p->elements; e != NULL; e = e->next)
+ {
+ array[i] = e;
+ ++i;
+ }
+
+ qsort (array, c, sizeof *array, ctor_cmp);
+
+ e = array[0];
+ p->elements = e;
+ for (i = 0; i < c - 1; i++)
+ array[i]->next = array[i + 1];
+ array[i]->next = NULL;
+
+ free (array);
+ }
+ }
+
+ lang_list_init (&constructor_list);
+ push_stat_ptr (&constructor_list);
+
+ header_printed = FALSE;
+ for (p = sets; p != NULL; p = p->next)
+ {
+ struct set_element *e;
+ reloc_howto_type *howto;
+ int reloc_size, size;
+
+ /* If the symbol is defined, we may have been invoked from
+ collect, and the sets may already have been built, so we do
+ not do anything. */
+ if (p->h->type == bfd_link_hash_defined
+ || p->h->type == bfd_link_hash_defweak)
+ continue;
+
+ /* For each set we build:
+ set:
+ .long number_of_elements
+ .long element0
+ ...
+ .long elementN
+ .long 0
+ except that we use the right size instead of .long. When
+ generating relocatable output, we generate relocs instead of
+ addresses. */
+ howto = bfd_reloc_type_lookup (link_info.output_bfd, p->reloc);
+ if (howto == NULL)
+ {
+ if (link_info.relocatable)
+ {
+ einfo (_("%P%X: %s does not support reloc %s for set %s\n"),
+ bfd_get_target (link_info.output_bfd),
+ bfd_get_reloc_code_name (p->reloc),
+ p->h->root.string);
+ continue;
+ }
+
+ /* If this is not a relocatable link, all we need is the
+ size, which we can get from the input BFD. */
+ if (p->elements->section->owner != NULL)
+ howto = bfd_reloc_type_lookup (p->elements->section->owner,
+ p->reloc);
+ if (howto == NULL)
+ {
+ einfo (_("%P%X: %s does not support reloc %s for set %s\n"),
+ bfd_get_target (p->elements->section->owner),
+ bfd_get_reloc_code_name (p->reloc),
+ p->h->root.string);
+ continue;
+ }
+ }
+
+ reloc_size = bfd_get_reloc_size (howto);
+ switch (reloc_size)
+ {
+ case 1: size = BYTE; break;
+ case 2: size = SHORT; break;
+ case 4: size = LONG; break;
+ case 8:
+ if (howto->complain_on_overflow == complain_overflow_signed)
+ size = SQUAD;
+ else
+ size = QUAD;
+ break;
+ default:
+ einfo (_("%P%X: Unsupported size %d for set %s\n"),
+ bfd_get_reloc_size (howto), p->h->root.string);
+ size = LONG;
+ break;
+ }
+
+ lang_add_assignment (exp_assop ('=', ".",
+ exp_unop (ALIGN_K,
+ exp_intop (reloc_size))));
+ lang_add_assignment (exp_assop ('=', p->h->root.string,
+ exp_nameop (NAME, ".")));
+ lang_add_data (size, exp_intop (p->count));
+
+ for (e = p->elements; e != NULL; e = e->next)
+ {
+ if (config.map_file != NULL)
+ {
+ int len;
+
+ if (! header_printed)
+ {
+ minfo (_("\nSet Symbol\n\n"));
+ header_printed = TRUE;
+ }
+
+ minfo ("%s", p->h->root.string);
+ len = strlen (p->h->root.string);
+
+ if (len >= 19)
+ {
+ print_nl ();
+ len = 0;
+ }
+ while (len < 20)
+ {
+ print_space ();
+ ++len;
+ }
+
+ if (e->name != NULL)
+ minfo ("%T\n", e->name);
+ else
+ minfo ("%G\n", e->section->owner, e->section, e->value);
+ }
+
+ /* Need SEC_KEEP for --gc-sections. */
+ if (! bfd_is_abs_section (e->section))
+ e->section->flags |= SEC_KEEP;
+
+ if (link_info.relocatable)
+ lang_add_reloc (p->reloc, howto, e->section, e->name,
+ exp_intop (e->value));
+ else
+ lang_add_data (size, exp_relop (e->section, e->value));
+ }
+
+ lang_add_data (size, exp_intop (0));
+ }
+
+ pop_stat_ptr ();
+}
diff --git a/binutils-2.21/ld/ldctor.h b/binutils-2.21/ld/ldctor.h
new file mode 100644
index 0000000..27edc61
--- /dev/null
+++ b/binutils-2.21/ld/ldctor.h
@@ -0,0 +1,60 @@
+/* ldctor.h - linker constructor support
+ Copyright 1991, 1992, 1993, 1994, 1995, 1998, 2000, 2002, 2003, 2005,
+ 2007, 2008 Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef LDCTOR_H
+#define LDCTOR_H
+
+/* List of statements needed to handle constructors */
+extern lang_statement_list_type constructor_list;
+
+/* Whether the constructors should be sorted. Note that this is
+ global for the entire link; we assume that there is only a single
+ CONSTRUCTORS command in the linker script. */
+extern bfd_boolean constructors_sorted;
+
+/* We keep a list of these structures for each set we build. */
+
+struct set_info {
+ struct set_info *next; /* Next set. */
+ struct bfd_link_hash_entry *h; /* Hash table entry. */
+ bfd_reloc_code_real_type reloc; /* Reloc to use for an entry. */
+ size_t count; /* Number of elements. */
+ struct set_element *elements; /* Elements in set. */
+};
+
+struct set_element {
+ struct set_element *next; /* Next element. */
+ const char *name; /* Name in set (may be NULL). */
+ asection *section; /* Section of value in set. */
+ bfd_vma value; /* Value in set. */
+};
+
+/* The sets we have seen. */
+
+extern struct set_info *sets;
+
+extern void ldctor_add_set_entry
+ (struct bfd_link_hash_entry *, bfd_reloc_code_real_type, const char *,
+ asection *, bfd_vma);
+extern void ldctor_build_sets
+ (void);
+
+#endif
diff --git a/binutils-2.21/ld/ldemul.c b/binutils-2.21/ld/ldemul.c
new file mode 100644
index 0000000..f1f3979
--- /dev/null
+++ b/binutils-2.21/ld/ldemul.c
@@ -0,0 +1,352 @@
+/* ldemul.c -- clearing house for ld emulation states
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+ 2001, 2002, 2003, 2005, 2007, 2008, 2009
+ Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "getopt.h"
+#include "bfdlink.h"
+
+#include "ld.h"
+#include "ldmisc.h"
+#include "ldexp.h"
+#include "ldlang.h"
+#include "ldfile.h"
+#include "ldemul.h"
+#include "ldmain.h"
+#include "ldemul-list.h"
+
+static ld_emulation_xfer_type *ld_emulation;
+
+void
+ldemul_hll (char *name)
+{
+ ld_emulation->hll (name);
+}
+
+void
+ldemul_syslib (char *name)
+{
+ ld_emulation->syslib (name);
+}
+
+void
+ldemul_after_parse (void)
+{
+ ld_emulation->after_parse ();
+}
+
+void
+ldemul_before_parse (void)
+{
+ ld_emulation->before_parse ();
+}
+
+void
+ldemul_after_open (void)
+{
+ ld_emulation->after_open ();
+}
+
+void
+ldemul_after_allocation (void)
+{
+ ld_emulation->after_allocation ();
+}
+
+void
+ldemul_before_allocation (void)
+{
+ ld_emulation->before_allocation ();
+}
+
+void
+ldemul_set_output_arch (void)
+{
+ ld_emulation->set_output_arch ();
+}
+
+void
+ldemul_finish (void)
+{
+ ld_emulation->finish ();
+}
+
+void
+ldemul_set_symbols (void)
+{
+ if (ld_emulation->set_symbols)
+ ld_emulation->set_symbols ();
+}
+
+void
+ldemul_create_output_section_statements (void)
+{
+ if (ld_emulation->create_output_section_statements)
+ ld_emulation->create_output_section_statements ();
+}
+
+char *
+ldemul_get_script (int *isfile)
+{
+ return ld_emulation->get_script (isfile);
+}
+
+bfd_boolean
+ldemul_open_dynamic_archive (const char *arch, search_dirs_type *search,
+ lang_input_statement_type *entry)
+{
+ if (ld_emulation->open_dynamic_archive)
+ return (*ld_emulation->open_dynamic_archive) (arch, search, entry);
+ return FALSE;
+}
+
+lang_output_section_statement_type *
+ldemul_place_orphan (asection *s, const char *name, int constraint)
+{
+ if (ld_emulation->place_orphan)
+ return (*ld_emulation->place_orphan) (s, name, constraint);
+ return NULL;
+}
+
+void
+ldemul_add_options (int ns, char **shortopts, int nl,
+ struct option **longopts, int nrl,
+ struct option **really_longopts)
+{
+ if (ld_emulation->add_options)
+ (*ld_emulation->add_options) (ns, shortopts, nl, longopts,
+ nrl, really_longopts);
+}
+
+bfd_boolean
+ldemul_handle_option (int optc)
+{
+ if (ld_emulation->handle_option)
+ return (*ld_emulation->handle_option) (optc);
+ return FALSE;
+}
+
+bfd_boolean
+ldemul_parse_args (int argc, char **argv)
+{
+ /* Try and use the emulation parser if there is one. */
+ if (ld_emulation->parse_args)
+ return (*ld_emulation->parse_args) (argc, argv);
+ return FALSE;
+}
+
+/* Let the emulation code handle an unrecognized file. */
+
+bfd_boolean
+ldemul_unrecognized_file (lang_input_statement_type *entry)
+{
+ if (ld_emulation->unrecognized_file)
+ return (*ld_emulation->unrecognized_file) (entry);
+ return FALSE;
+}
+
+/* Let the emulation code handle a recognized file. */
+
+bfd_boolean
+ldemul_recognized_file (lang_input_statement_type *entry)
+{
+ if (ld_emulation->recognized_file)
+ return (*ld_emulation->recognized_file) (entry);
+ return FALSE;
+}
+
+char *
+ldemul_choose_target (int argc, char **argv)
+{
+ return ld_emulation->choose_target (argc, argv);
+}
+
+
+/* The default choose_target function. */
+
+char *
+ldemul_default_target (int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED)
+{
+ char *from_outside = getenv (TARGET_ENVIRON);
+ if (from_outside != (char *) NULL)
+ return from_outside;
+ return ld_emulation->target_name;
+}
+
+/* If the entry point was not specified as an address, then add the
+ symbol as undefined. This will cause ld to extract an archive
+ element defining the entry if ld is linking against such an archive.
+
+ We don't do this when generating shared libraries unless given -e
+ on the command line, because most shared libs are not designed to
+ be run as an executable. However, some are, eg. glibc ld.so and
+ may rely on the default linker script supplying ENTRY. So we can't
+ remove the ENTRY from the script, but would rather not insert
+ undefined _start syms. */
+
+void
+after_parse_default (void)
+{
+ if (entry_symbol.name != NULL
+ && (link_info.executable || entry_from_cmdline))
+ {
+ bfd_boolean is_vma = FALSE;
+
+ if (entry_from_cmdline)
+ {
+ const char *send;
+
+ bfd_scan_vma (entry_symbol.name, &send, 0);
+ is_vma = *send == '\0';
+ }
+ if (!is_vma)
+ ldlang_add_undef (entry_symbol.name, entry_from_cmdline);
+ }
+}
+
+void
+after_open_default (void)
+{
+}
+
+void
+after_allocation_default (void)
+{
+ lang_relax_sections (FALSE);
+}
+
+void
+before_allocation_default (void)
+{
+ if (!link_info.relocatable)
+ strip_excluded_output_sections ();
+}
+
+void
+finish_default (void)
+{
+ if (!link_info.relocatable)
+ _bfd_fix_excluded_sec_syms (link_info.output_bfd, &link_info);
+}
+
+void
+set_output_arch_default (void)
+{
+ /* Set the output architecture and machine if possible. */
+ bfd_set_arch_mach (link_info.output_bfd,
+ ldfile_output_architecture, ldfile_output_machine);
+
+ bfd_emul_set_maxpagesize (output_target, config.maxpagesize);
+ bfd_emul_set_commonpagesize (output_target, config.commonpagesize);
+}
+
+void
+syslib_default (char *ignore ATTRIBUTE_UNUSED)
+{
+ info_msg (_("%S SYSLIB ignored\n"));
+}
+
+void
+hll_default (char *ignore ATTRIBUTE_UNUSED)
+{
+ info_msg (_("%S HLL ignored\n"));
+}
+
+ld_emulation_xfer_type *ld_emulations[] = { EMULATION_LIST };
+
+void
+ldemul_choose_mode (char *target)
+{
+ ld_emulation_xfer_type **eptr = ld_emulations;
+ /* Ignore "gld" prefix. */
+ if (target[0] == 'g' && target[1] == 'l' && target[2] == 'd')
+ target += 3;
+ for (; *eptr; eptr++)
+ {
+ if (strcmp (target, (*eptr)->emulation_name) == 0)
+ {
+ ld_emulation = *eptr;
+ return;
+ }
+ }
+ einfo (_("%P: unrecognised emulation mode: %s\n"), target);
+ einfo (_("Supported emulations: "));
+ ldemul_list_emulations (stderr);
+ einfo ("%F\n");
+}
+
+void
+ldemul_list_emulations (FILE *f)
+{
+ ld_emulation_xfer_type **eptr = ld_emulations;
+ bfd_boolean first = TRUE;
+
+ for (; *eptr; eptr++)
+ {
+ if (first)
+ first = FALSE;
+ else
+ fprintf (f, " ");
+ fprintf (f, "%s", (*eptr)->emulation_name);
+ }
+}
+
+void
+ldemul_list_emulation_options (FILE *f)
+{
+ ld_emulation_xfer_type **eptr;
+ int options_found = 0;
+
+ for (eptr = ld_emulations; *eptr; eptr++)
+ {
+ ld_emulation_xfer_type *emul = *eptr;
+
+ if (emul->list_options)
+ {
+ fprintf (f, "%s: \n", emul->emulation_name);
+
+ emul->list_options (f);
+
+ options_found = 1;
+ }
+ }
+
+ if (! options_found)
+ fprintf (f, _(" no emulation specific options.\n"));
+}
+
+int
+ldemul_find_potential_libraries (char *name, lang_input_statement_type *entry)
+{
+ if (ld_emulation->find_potential_libraries)
+ return ld_emulation->find_potential_libraries (name, entry);
+
+ return 0;
+}
+
+struct bfd_elf_version_expr *
+ldemul_new_vers_pattern (struct bfd_elf_version_expr *entry)
+{
+ if (ld_emulation->new_vers_pattern)
+ entry = (*ld_emulation->new_vers_pattern) (entry);
+ return entry;
+}
diff --git a/binutils-2.21/ld/ldemul.h b/binutils-2.21/ld/ldemul.h
new file mode 100644
index 0000000..890107f
--- /dev/null
+++ b/binutils-2.21/ld/ldemul.h
@@ -0,0 +1,209 @@
+/* ld-emul.h - Linker emulation header file
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001,
+ 2002, 2003, 2004, 2005, 2007, 2008
+ Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef LDEMUL_H
+#define LDEMUL_H
+
+/* Forward declaration for ldemul_add_options() and others. */
+struct option;
+
+extern void ldemul_hll
+ (char *);
+extern void ldemul_syslib
+ (char *);
+extern void ldemul_after_parse
+ (void);
+extern void ldemul_before_parse
+ (void);
+extern void ldemul_after_open
+ (void);
+extern void ldemul_after_allocation
+ (void);
+extern void ldemul_before_allocation
+ (void);
+extern void ldemul_set_output_arch
+ (void);
+extern char *ldemul_choose_target
+ (int, char**);
+extern void ldemul_choose_mode
+ (char *);
+extern void ldemul_list_emulations
+ (FILE *);
+extern void ldemul_list_emulation_options
+ (FILE *);
+extern char *ldemul_get_script
+ (int *isfile);
+extern void ldemul_finish
+ (void);
+extern void ldemul_set_symbols
+ (void);
+extern void ldemul_create_output_section_statements
+ (void);
+extern lang_output_section_statement_type *ldemul_place_orphan
+ (asection *, const char *, int);
+extern bfd_boolean ldemul_parse_args
+ (int, char **);
+extern void ldemul_add_options
+ (int, char **, int, struct option **, int, struct option **);
+extern bfd_boolean ldemul_handle_option
+ (int);
+extern bfd_boolean ldemul_unrecognized_file
+ (struct lang_input_statement_struct *);
+extern bfd_boolean ldemul_recognized_file
+ (struct lang_input_statement_struct *);
+extern bfd_boolean ldemul_open_dynamic_archive
+ (const char *, struct search_dirs *, struct lang_input_statement_struct *);
+extern char *ldemul_default_target
+ (int, char**);
+extern void after_parse_default
+ (void);
+extern void after_open_default
+ (void);
+extern void after_allocation_default
+ (void);
+extern void before_allocation_default
+ (void);
+extern void finish_default
+ (void);
+extern void finish_default
+ (void);
+extern void set_output_arch_default
+ (void);
+extern void syslib_default
+ (char*);
+extern void hll_default
+ (char*);
+extern int ldemul_find_potential_libraries
+ (char *, struct lang_input_statement_struct *);
+extern struct bfd_elf_version_expr *ldemul_new_vers_pattern
+ (struct bfd_elf_version_expr *);
+
+typedef struct ld_emulation_xfer_struct {
+ /* Run before parsing the command line and script file.
+ Set the architecture, maybe other things. */
+ void (*before_parse) (void);
+
+ /* Handle the SYSLIB (low level library) script command. */
+ void (*syslib) (char *);
+
+ /* Handle the HLL (high level library) script command. */
+ void (*hll) (char *);
+
+ /* Run after parsing the command line and script file. */
+ void (*after_parse) (void);
+
+ /* Run after opening all input files, and loading the symbols. */
+ void (*after_open) (void);
+
+ /* Run after allocating output sections. */
+ void (*after_allocation) (void);
+
+ /* Set the output architecture and machine if possible. */
+ void (*set_output_arch) (void);
+
+ /* Decide which target name to use. */
+ char * (*choose_target) (int, char**);
+
+ /* Run before allocating output sections. */
+ void (*before_allocation) (void);
+
+ /* Return the appropriate linker script. */
+ char * (*get_script) (int *isfile);
+
+ /* The name of this emulation. */
+ char *emulation_name;
+
+ /* The output format. */
+ char *target_name;
+
+ /* Run after assigning values from the script. */
+ void (*finish) (void);
+
+ /* Create any output sections needed by the target. */
+ void (*create_output_section_statements) (void);
+
+ /* Try to open a dynamic library. ARCH is an architecture name, and
+ is normally the empty string. ENTRY is the lang_input_statement
+ that should be opened. */
+ bfd_boolean (*open_dynamic_archive)
+ (const char *arch, struct search_dirs *,
+ struct lang_input_statement_struct *entry);
+
+ /* Place an orphan section. Return TRUE if it was placed, FALSE if
+ the default action should be taken. This field may be NULL, in
+ which case the default action will always be taken. */
+ lang_output_section_statement_type *(*place_orphan)
+ (asection *, const char *, int);
+
+ /* Run after assigning parsing with the args, but before
+ reading the script. Used to initialize symbols used in the script. */
+ void (*set_symbols) (void);
+
+ /* Parse args which the base linker doesn't understand.
+ Return TRUE if the arg needs no further processing. */
+ bfd_boolean (*parse_args) (int, char **);
+
+ /* Hook to add options to parameters passed by the base linker to
+ getopt_long and getopt_long_only calls. */
+ void (*add_options)
+ (int, char **, int, struct option **, int, struct option **);
+
+ /* Companion to the above to handle an option. Returns TRUE if it is
+ one of our options. */
+ bfd_boolean (*handle_option) (int);
+
+ /* Run to handle files which are not recognized as object files or
+ archives. Return TRUE if the file was handled. */
+ bfd_boolean (*unrecognized_file)
+ (struct lang_input_statement_struct *);
+
+ /* Run to list the command line options which parse_args handles. */
+ void (* list_options) (FILE *);
+
+ /* Run to specially handle files which *are* recognized as object
+ files or archives. Return TRUE if the file was handled. */
+ bfd_boolean (*recognized_file)
+ (struct lang_input_statement_struct *);
+
+ /* Called when looking for libraries in a directory specified
+ via a linker command line option or linker script option.
+ Files that match the pattern "lib*.a" have already been scanned.
+ (For VMS files matching ":lib*.a" have also been scanned). */
+ int (* find_potential_libraries)
+ (char *, struct lang_input_statement_struct *);
+
+ /* Called when adding a new version pattern. PowerPC64-ELF uses
+ this hook to add a pattern matching ".foo" for every "foo". */
+ struct bfd_elf_version_expr * (*new_vers_pattern)
+ (struct bfd_elf_version_expr *);
+
+} ld_emulation_xfer_type;
+
+typedef enum {
+ intel_ic960_ld_mode_enum,
+ default_mode_enum,
+ intel_gld960_ld_mode_enum
+} lang_emulation_mode_enum_type;
+
+extern ld_emulation_xfer_type *ld_emulations[];
+
+#endif
diff --git a/binutils-2.21/ld/ldexp.c b/binutils-2.21/ld/ldexp.c
new file mode 100644
index 0000000..de7f9f2
--- /dev/null
+++ b/binutils-2.21/ld/ldexp.c
@@ -0,0 +1,1218 @@
+/* This module handles expression trees.
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+ Free Software Foundation, Inc.
+ Written by Steve Chamberlain of Cygnus Support <sac@cygnus.com>.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+
+/* This module is in charge of working out the contents of expressions.
+
+ It has to keep track of the relative/absness of a symbol etc. This
+ is done by keeping all values in a struct (an etree_value_type)
+ which contains a value, a section to which it is relative and a
+ valid bit. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+
+#include "ld.h"
+#include "ldmain.h"
+#include "ldmisc.h"
+#include "ldexp.h"
+#include "ldlex.h"
+#include <ldgram.h>
+#include "ldlang.h"
+#include "libiberty.h"
+#include "safe-ctype.h"
+
+static void exp_fold_tree_1 (etree_type *);
+static void exp_fold_tree_no_dot (etree_type *);
+static bfd_vma align_n (bfd_vma, bfd_vma);
+
+segment_type *segments;
+
+struct ldexp_control expld;
+
+/* Print the string representation of the given token. Surround it
+ with spaces if INFIX_P is TRUE. */
+
+static void
+exp_print_token (token_code_type code, int infix_p)
+{
+ static const struct
+ {
+ token_code_type code;
+ char * name;
+ }
+ table[] =
+ {
+ { INT, "int" },
+ { NAME, "NAME" },
+ { PLUSEQ, "+=" },
+ { MINUSEQ, "-=" },
+ { MULTEQ, "*=" },
+ { DIVEQ, "/=" },
+ { LSHIFTEQ, "<<=" },
+ { RSHIFTEQ, ">>=" },
+ { ANDEQ, "&=" },
+ { OREQ, "|=" },
+ { OROR, "||" },
+ { ANDAND, "&&" },
+ { EQ, "==" },
+ { NE, "!=" },
+ { LE, "<=" },
+ { GE, ">=" },
+ { LSHIFT, "<<" },
+ { RSHIFT, ">>" },
+ { ALIGN_K, "ALIGN" },
+ { BLOCK, "BLOCK" },
+ { QUAD, "QUAD" },
+ { SQUAD, "SQUAD" },
+ { LONG, "LONG" },
+ { SHORT, "SHORT" },
+ { BYTE, "BYTE" },
+ { SECTIONS, "SECTIONS" },
+ { SIZEOF_HEADERS, "SIZEOF_HEADERS" },
+ { MEMORY, "MEMORY" },
+ { DEFINED, "DEFINED" },
+ { TARGET_K, "TARGET" },
+ { SEARCH_DIR, "SEARCH_DIR" },
+ { MAP, "MAP" },
+ { ENTRY, "ENTRY" },
+ { NEXT, "NEXT" },
+ { ALIGNOF, "ALIGNOF" },
+ { SIZEOF, "SIZEOF" },
+ { ADDR, "ADDR" },
+ { LOADADDR, "LOADADDR" },
+ { CONSTANT, "CONSTANT" },
+ { ABSOLUTE, "ABSOLUTE" },
+ { MAX_K, "MAX" },
+ { MIN_K, "MIN" },
+ { ASSERT_K, "ASSERT" },
+ { REL, "relocatable" },
+ { DATA_SEGMENT_ALIGN, "DATA_SEGMENT_ALIGN" },
+ { DATA_SEGMENT_RELRO_END, "DATA_SEGMENT_RELRO_END" },
+ { DATA_SEGMENT_END, "DATA_SEGMENT_END" },
+ { ORIGIN, "ORIGIN" },
+ { LENGTH, "LENGTH" },
+ { SEGMENT_START, "SEGMENT_START" }
+ };
+ unsigned int idx;
+
+ for (idx = 0; idx < ARRAY_SIZE (table); idx++)
+ if (table[idx].code == code)
+ break;
+
+ if (infix_p)
+ fputc (' ', config.map_file);
+
+ if (idx < ARRAY_SIZE (table))
+ fputs (table[idx].name, config.map_file);
+ else if (code < 127)
+ fputc (code, config.map_file);
+ else
+ fprintf (config.map_file, "<code %d>", code);
+
+ if (infix_p)
+ fputc (' ', config.map_file);
+}
+
+static void
+make_abs (void)
+{
+ if (expld.result.section != NULL)
+ expld.result.value += expld.result.section->vma;
+ expld.result.section = bfd_abs_section_ptr;
+}
+
+static void
+new_abs (bfd_vma value)
+{
+ expld.result.valid_p = TRUE;
+ expld.result.section = bfd_abs_section_ptr;
+ expld.result.value = value;
+ expld.result.str = NULL;
+}
+
+etree_type *
+exp_intop (bfd_vma value)
+{
+ etree_type *new_e = (etree_type *) stat_alloc (sizeof (new_e->value));
+ new_e->type.node_code = INT;
+ new_e->type.lineno = lineno;
+ new_e->value.value = value;
+ new_e->value.str = NULL;
+ new_e->type.node_class = etree_value;
+ return new_e;
+}
+
+etree_type *
+exp_bigintop (bfd_vma value, char *str)
+{
+ etree_type *new_e = (etree_type *) stat_alloc (sizeof (new_e->value));
+ new_e->type.node_code = INT;
+ new_e->type.lineno = lineno;
+ new_e->value.value = value;
+ new_e->value.str = str;
+ new_e->type.node_class = etree_value;
+ return new_e;
+}
+
+/* Build an expression representing an unnamed relocatable value. */
+
+etree_type *
+exp_relop (asection *section, bfd_vma value)
+{
+ etree_type *new_e = (etree_type *) stat_alloc (sizeof (new_e->rel));
+ new_e->type.node_code = REL;
+ new_e->type.lineno = lineno;
+ new_e->type.node_class = etree_rel;
+ new_e->rel.section = section;
+ new_e->rel.value = value;
+ return new_e;
+}
+
+static void
+new_number (bfd_vma value)
+{
+ expld.result.valid_p = TRUE;
+ expld.result.value = value;
+ expld.result.str = NULL;
+ expld.result.section = NULL;
+}
+
+static void
+new_rel (bfd_vma value, asection *section)
+{
+ expld.result.valid_p = TRUE;
+ expld.result.value = value;
+ expld.result.str = NULL;
+ expld.result.section = section;
+}
+
+static void
+new_rel_from_abs (bfd_vma value)
+{
+ expld.result.valid_p = TRUE;
+ expld.result.value = value - expld.section->vma;
+ expld.result.str = NULL;
+ expld.result.section = expld.section;
+}
+
+static void
+fold_unary (etree_type *tree)
+{
+ exp_fold_tree_1 (tree->unary.child);
+ if (expld.result.valid_p)
+ {
+ switch (tree->type.node_code)
+ {
+ case ALIGN_K:
+ if (expld.phase != lang_first_phase_enum)
+ new_rel_from_abs (align_n (expld.dot, expld.result.value));
+ else
+ expld.result.valid_p = FALSE;
+ break;
+
+ case ABSOLUTE:
+ make_abs ();
+ break;
+
+ case '~':
+ expld.result.value = ~expld.result.value;
+ break;
+
+ case '!':
+ expld.result.value = !expld.result.value;
+ break;
+
+ case '-':
+ expld.result.value = -expld.result.value;
+ break;
+
+ case NEXT:
+ /* Return next place aligned to value. */
+ if (expld.phase != lang_first_phase_enum)
+ {
+ make_abs ();
+ expld.result.value = align_n (expld.dot, expld.result.value);
+ }
+ else
+ expld.result.valid_p = FALSE;
+ break;
+
+ case DATA_SEGMENT_END:
+ if (expld.phase != lang_first_phase_enum
+ && expld.section == bfd_abs_section_ptr
+ && (expld.dataseg.phase == exp_dataseg_align_seen
+ || expld.dataseg.phase == exp_dataseg_relro_seen
+ || expld.dataseg.phase == exp_dataseg_adjust
+ || expld.dataseg.phase == exp_dataseg_relro_adjust
+ || expld.phase == lang_final_phase_enum))
+ {
+ if (expld.dataseg.phase == exp_dataseg_align_seen
+ || expld.dataseg.phase == exp_dataseg_relro_seen)
+ {
+ expld.dataseg.phase = exp_dataseg_end_seen;
+ expld.dataseg.end = expld.result.value;
+ }
+ }
+ else
+ expld.result.valid_p = FALSE;
+ break;
+
+ default:
+ FAIL ();
+ break;
+ }
+ }
+}
+
+static void
+fold_binary (etree_type *tree)
+{
+ etree_value_type lhs;
+ exp_fold_tree_1 (tree->binary.lhs);
+
+ /* The SEGMENT_START operator is special because its first
+ operand is a string, not the name of a symbol. Note that the
+ operands have been swapped, so binary.lhs is second (default)
+ operand, binary.rhs is first operand. */
+ if (expld.result.valid_p && tree->type.node_code == SEGMENT_START)
+ {
+ const char *segment_name;
+ segment_type *seg;
+
+ /* Check to see if the user has overridden the default
+ value. */
+ segment_name = tree->binary.rhs->name.name;
+ for (seg = segments; seg; seg = seg->next)
+ if (strcmp (seg->name, segment_name) == 0)
+ {
+ if (!seg->used
+ && config.magic_demand_paged
+ && (seg->value % config.maxpagesize) != 0)
+ einfo (_("%P: warning: address of `%s' isn't multiple of maximum page size\n"),
+ segment_name);
+ seg->used = TRUE;
+ new_rel_from_abs (seg->value);
+ break;
+ }
+ return;
+ }
+
+ lhs = expld.result;
+ exp_fold_tree_1 (tree->binary.rhs);
+ expld.result.valid_p &= lhs.valid_p;
+
+ if (expld.result.valid_p)
+ {
+ if (lhs.section != expld.result.section)
+ {
+ /* If the values are from different sections, and neither is
+ just a number, make both the source arguments absolute. */
+ if (expld.result.section != NULL
+ && lhs.section != NULL)
+ {
+ make_abs ();
+ lhs.value += lhs.section->vma;
+ }
+
+ /* If the rhs is just a number, keep the lhs section. */
+ else if (expld.result.section == NULL)
+ expld.result.section = lhs.section;
+ }
+
+ switch (tree->type.node_code)
+ {
+ case '%':
+ if (expld.result.value != 0)
+ expld.result.value = ((bfd_signed_vma) lhs.value
+ % (bfd_signed_vma) expld.result.value);
+ else if (expld.phase != lang_mark_phase_enum)
+ einfo (_("%F%S %% by zero\n"));
+ break;
+
+ case '/':
+ if (expld.result.value != 0)
+ expld.result.value = ((bfd_signed_vma) lhs.value
+ / (bfd_signed_vma) expld.result.value);
+ else if (expld.phase != lang_mark_phase_enum)
+ einfo (_("%F%S / by zero\n"));
+ break;
+
+#define BOP(x, y) \
+ case x: \
+ expld.result.value = lhs.value y expld.result.value; \
+ break;
+
+#define BOPN(x, y) \
+ case x: \
+ expld.result.value = lhs.value y expld.result.value; \
+ expld.result.section = NULL; \
+ break;
+
+ BOP ('+', +);
+ BOP ('*', *);
+ BOP ('-', -);
+ BOP (LSHIFT, <<);
+ BOP (RSHIFT, >>);
+ BOP ('&', &);
+ BOP ('^', ^);
+ BOP ('|', |);
+ BOPN (EQ, ==);
+ BOPN (NE, !=);
+ BOPN ('<', <);
+ BOPN ('>', >);
+ BOPN (LE, <=);
+ BOPN (GE, >=);
+ BOPN (ANDAND, &&);
+ BOPN (OROR, ||);
+
+ case MAX_K:
+ if (lhs.value > expld.result.value)
+ expld.result.value = lhs.value;
+ break;
+
+ case MIN_K:
+ if (lhs.value < expld.result.value)
+ expld.result.value = lhs.value;
+ break;
+
+ case ALIGN_K:
+ expld.result.value = align_n (lhs.value, expld.result.value);
+ break;
+
+ case DATA_SEGMENT_ALIGN:
+ expld.dataseg.relro = exp_dataseg_relro_start;
+ if (expld.phase != lang_first_phase_enum
+ && expld.section == bfd_abs_section_ptr
+ && (expld.dataseg.phase == exp_dataseg_none
+ || expld.dataseg.phase == exp_dataseg_adjust
+ || expld.dataseg.phase == exp_dataseg_relro_adjust
+ || expld.phase == lang_final_phase_enum))
+ {
+ bfd_vma maxpage = lhs.value;
+ bfd_vma commonpage = expld.result.value;
+
+ expld.result.value = align_n (expld.dot, maxpage);
+ if (expld.dataseg.phase == exp_dataseg_relro_adjust)
+ expld.result.value = expld.dataseg.base;
+ else if (expld.dataseg.phase != exp_dataseg_adjust)
+ {
+ expld.result.value += expld.dot & (maxpage - 1);
+ if (expld.phase == lang_allocating_phase_enum)
+ {
+ expld.dataseg.phase = exp_dataseg_align_seen;
+ expld.dataseg.min_base = expld.dot;
+ expld.dataseg.base = expld.result.value;
+ expld.dataseg.pagesize = commonpage;
+ expld.dataseg.maxpagesize = maxpage;
+ expld.dataseg.relro_end = 0;
+ }
+ }
+ else if (commonpage < maxpage)
+ expld.result.value += ((expld.dot + commonpage - 1)
+ & (maxpage - commonpage));
+ }
+ else
+ expld.result.valid_p = FALSE;
+ break;
+
+ case DATA_SEGMENT_RELRO_END:
+ expld.dataseg.relro = exp_dataseg_relro_end;
+ if (expld.phase != lang_first_phase_enum
+ && (expld.dataseg.phase == exp_dataseg_align_seen
+ || expld.dataseg.phase == exp_dataseg_adjust
+ || expld.dataseg.phase == exp_dataseg_relro_adjust
+ || expld.phase == lang_final_phase_enum))
+ {
+ if (expld.dataseg.phase == exp_dataseg_align_seen
+ || expld.dataseg.phase == exp_dataseg_relro_adjust)
+ expld.dataseg.relro_end = lhs.value + expld.result.value;
+
+ if (expld.dataseg.phase == exp_dataseg_relro_adjust
+ && (expld.dataseg.relro_end
+ & (expld.dataseg.pagesize - 1)))
+ {
+ expld.dataseg.relro_end += expld.dataseg.pagesize - 1;
+ expld.dataseg.relro_end &= ~(expld.dataseg.pagesize - 1);
+ expld.result.value = (expld.dataseg.relro_end
+ - expld.result.value);
+ }
+ else
+ expld.result.value = lhs.value;
+
+ if (expld.dataseg.phase == exp_dataseg_align_seen)
+ expld.dataseg.phase = exp_dataseg_relro_seen;
+ }
+ else
+ expld.result.valid_p = FALSE;
+ break;
+
+ default:
+ FAIL ();
+ }
+ }
+}
+
+static void
+fold_trinary (etree_type *tree)
+{
+ exp_fold_tree_1 (tree->trinary.cond);
+ if (expld.result.valid_p)
+ exp_fold_tree_1 (expld.result.value
+ ? tree->trinary.lhs
+ : tree->trinary.rhs);
+}
+
+static void
+fold_name (etree_type *tree)
+{
+ memset (&expld.result, 0, sizeof (expld.result));
+
+ switch (tree->type.node_code)
+ {
+ case SIZEOF_HEADERS:
+ if (expld.phase != lang_first_phase_enum)
+ {
+ bfd_vma hdr_size = 0;
+ /* Don't find the real header size if only marking sections;
+ The bfd function may cache incorrect data. */
+ if (expld.phase != lang_mark_phase_enum)
+ hdr_size = bfd_sizeof_headers (link_info.output_bfd, &link_info);
+ new_number (hdr_size);
+ }
+ break;
+
+ case DEFINED:
+ if (expld.phase == lang_first_phase_enum)
+ lang_track_definedness (tree->name.name);
+ else
+ {
+ struct bfd_link_hash_entry *h;
+ int def_iteration
+ = lang_symbol_definition_iteration (tree->name.name);
+
+ h = bfd_wrapped_link_hash_lookup (link_info.output_bfd,
+ &link_info,
+ tree->name.name,
+ FALSE, FALSE, TRUE);
+ new_number (h != NULL
+ && (h->type == bfd_link_hash_defined
+ || h->type == bfd_link_hash_defweak
+ || h->type == bfd_link_hash_common)
+ && (def_iteration == lang_statement_iteration
+ || def_iteration == -1));
+ }
+ break;
+
+ case NAME:
+ if (expld.phase == lang_first_phase_enum)
+ ;
+ else if (tree->name.name[0] == '.' && tree->name.name[1] == 0)
+ new_rel_from_abs (expld.dot);
+ else
+ {
+ struct bfd_link_hash_entry *h;
+
+ h = bfd_wrapped_link_hash_lookup (link_info.output_bfd,
+ &link_info,
+ tree->name.name,
+ TRUE, FALSE, TRUE);
+ if (!h)
+ einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
+ else if (h->type == bfd_link_hash_defined
+ || h->type == bfd_link_hash_defweak)
+ {
+ asection *output_section;
+
+ output_section = h->u.def.section->output_section;
+ if (output_section == NULL)
+ {
+ if (expld.phase != lang_mark_phase_enum)
+ einfo (_("%X%S: unresolvable symbol `%s'"
+ " referenced in expression\n"),
+ tree->name.name);
+ }
+ else if (output_section == bfd_abs_section_ptr)
+ new_number (h->u.def.value + h->u.def.section->output_offset);
+ else
+ new_rel (h->u.def.value + h->u.def.section->output_offset,
+ output_section);
+ }
+ else if (expld.phase == lang_final_phase_enum
+ || expld.assigning_to_dot)
+ einfo (_("%F%S: undefined symbol `%s' referenced in expression\n"),
+ tree->name.name);
+ else if (h->type == bfd_link_hash_new)
+ {
+ h->type = bfd_link_hash_undefined;
+ h->u.undef.abfd = NULL;
+ if (h->u.undef.next == NULL && h != link_info.hash->undefs_tail)
+ bfd_link_add_undef (link_info.hash, h);
+ }
+ }
+ break;
+
+ case ADDR:
+ if (expld.phase != lang_first_phase_enum)
+ {
+ lang_output_section_statement_type *os;
+
+ os = lang_output_section_find (tree->name.name);
+ if (os == NULL)
+ {
+ if (expld.phase == lang_final_phase_enum)
+ einfo (_("%F%S: undefined section `%s' referenced in expression\n"),
+ tree->name.name);
+ }
+ else if (os->processed_vma)
+ new_rel (0, os->bfd_section);
+ }
+ break;
+
+ case LOADADDR:
+ if (expld.phase != lang_first_phase_enum)
+ {
+ lang_output_section_statement_type *os;
+
+ os = lang_output_section_find (tree->name.name);
+ if (os == NULL)
+ {
+ if (expld.phase == lang_final_phase_enum)
+ einfo (_("%F%S: undefined section `%s' referenced in expression\n"),
+ tree->name.name);
+ }
+ else if (os->processed_lma)
+ {
+ if (os->load_base == NULL)
+ new_abs (os->bfd_section->lma);
+ else
+ {
+ exp_fold_tree_1 (os->load_base);
+ if (expld.result.valid_p)
+ make_abs ();
+ }
+ }
+ }
+ break;
+
+ case SIZEOF:
+ case ALIGNOF:
+ if (expld.phase != lang_first_phase_enum)
+ {
+ lang_output_section_statement_type *os;
+
+ os = lang_output_section_find (tree->name.name);
+ if (os == NULL)
+ {
+ if (expld.phase == lang_final_phase_enum)
+ einfo (_("%F%S: undefined section `%s' referenced in expression\n"),
+ tree->name.name);
+ new_number (0);
+ }
+ else if (os->processed_vma)
+ {
+ bfd_vma val;
+
+ if (tree->type.node_code == SIZEOF)
+ val = (os->bfd_section->size
+ / bfd_octets_per_byte (link_info.output_bfd));
+ else
+ val = (bfd_vma)1 << os->bfd_section->alignment_power;
+
+ new_number (val);
+ }
+ }
+ break;
+
+ case LENGTH:
+ {
+ lang_memory_region_type *mem;
+
+ mem = lang_memory_region_lookup (tree->name.name, FALSE);
+ if (mem != NULL)
+ new_number (mem->length);
+ else
+ einfo (_("%F%S: undefined MEMORY region `%s'"
+ " referenced in expression\n"), tree->name.name);
+ }
+ break;
+
+ case ORIGIN:
+ if (expld.phase != lang_first_phase_enum)
+ {
+ lang_memory_region_type *mem;
+
+ mem = lang_memory_region_lookup (tree->name.name, FALSE);
+ if (mem != NULL)
+ new_rel_from_abs (mem->origin);
+ else
+ einfo (_("%F%S: undefined MEMORY region `%s'"
+ " referenced in expression\n"), tree->name.name);
+ }
+ break;
+
+ case CONSTANT:
+ if (strcmp (tree->name.name, "MAXPAGESIZE") == 0)
+ new_number (config.maxpagesize);
+ else if (strcmp (tree->name.name, "COMMONPAGESIZE") == 0)
+ new_number (config.commonpagesize);
+ else
+ einfo (_("%F%S: unknown constant `%s' referenced in expression\n"),
+ tree->name.name);
+ break;
+
+ default:
+ FAIL ();
+ break;
+ }
+}
+
+static void
+exp_fold_tree_1 (etree_type *tree)
+{
+ if (tree == NULL)
+ {
+ memset (&expld.result, 0, sizeof (expld.result));
+ return;
+ }
+
+ switch (tree->type.node_class)
+ {
+ case etree_value:
+ new_number (tree->value.value);
+ expld.result.str = tree->value.str;
+ break;
+
+ case etree_rel:
+ if (expld.phase != lang_first_phase_enum)
+ {
+ asection *output_section = tree->rel.section->output_section;
+ new_rel (tree->rel.value + tree->rel.section->output_offset,
+ output_section);
+ }
+ else
+ memset (&expld.result, 0, sizeof (expld.result));
+ break;
+
+ case etree_assert:
+ exp_fold_tree_1 (tree->assert_s.child);
+ if (expld.phase == lang_final_phase_enum && !expld.result.value)
+ einfo ("%X%P: %s\n", tree->assert_s.message);
+ break;
+
+ case etree_unary:
+ fold_unary (tree);
+ break;
+
+ case etree_binary:
+ fold_binary (tree);
+ break;
+
+ case etree_trinary:
+ fold_trinary (tree);
+ break;
+
+ case etree_assign:
+ case etree_provide:
+ case etree_provided:
+ if (tree->assign.dst[0] == '.' && tree->assign.dst[1] == 0)
+ {
+ /* Assignment to dot can only be done during allocation. */
+ if (tree->type.node_class != etree_assign)
+ einfo (_("%F%S can not PROVIDE assignment to location counter\n"));
+ if (expld.phase == lang_mark_phase_enum
+ || expld.phase == lang_allocating_phase_enum
+ || (expld.phase == lang_final_phase_enum
+ && expld.section == bfd_abs_section_ptr))
+ {
+ /* Notify the folder that this is an assignment to dot. */
+ expld.assigning_to_dot = TRUE;
+ exp_fold_tree_1 (tree->assign.src);
+ expld.assigning_to_dot = FALSE;
+
+ if (!expld.result.valid_p)
+ {
+ if (expld.phase != lang_mark_phase_enum)
+ einfo (_("%F%S invalid assignment to location counter\n"));
+ }
+ else if (expld.dotp == NULL)
+ einfo (_("%F%S assignment to location counter"
+ " invalid outside of SECTION\n"));
+ else
+ {
+ bfd_vma nextdot;
+
+ nextdot = expld.result.value;
+ if (expld.result.section != NULL)
+ nextdot += expld.result.section->vma;
+ else
+ nextdot += expld.section->vma;
+ if (nextdot < expld.dot
+ && expld.section != bfd_abs_section_ptr)
+ einfo (_("%F%S cannot move location counter backwards"
+ " (from %V to %V)\n"), expld.dot, nextdot);
+ else
+ {
+ expld.dot = nextdot;
+ *expld.dotp = nextdot;
+ }
+ }
+ }
+ else
+ memset (&expld.result, 0, sizeof (expld.result));
+ }
+ else
+ {
+ struct bfd_link_hash_entry *h = NULL;
+
+ if (tree->type.node_class == etree_provide)
+ {
+ h = bfd_link_hash_lookup (link_info.hash, tree->assign.dst,
+ FALSE, FALSE, TRUE);
+ if (h == NULL
+ || (h->type != bfd_link_hash_new
+ && h->type != bfd_link_hash_undefined
+ && h->type != bfd_link_hash_common))
+ {
+ /* Do nothing. The symbol was never referenced, or was
+ defined by some object. */
+ break;
+ }
+ }
+
+ exp_fold_tree_1 (tree->assign.src);
+ if (expld.result.valid_p)
+ {
+ if (h == NULL)
+ {
+ h = bfd_link_hash_lookup (link_info.hash, tree->assign.dst,
+ TRUE, FALSE, TRUE);
+ if (h == NULL)
+ einfo (_("%P%F:%s: hash creation failed\n"),
+ tree->assign.dst);
+ }
+
+ /* FIXME: Should we worry if the symbol is already
+ defined? */
+ lang_update_definedness (tree->assign.dst, h);
+ h->type = bfd_link_hash_defined;
+ h->u.def.value = expld.result.value;
+ if (expld.result.section == NULL)
+ expld.result.section = expld.section;
+ h->u.def.section = expld.result.section;
+ if (tree->type.node_class == etree_provide)
+ tree->type.node_class = etree_provided;
+
+ /* Copy the symbol type if this is a simple assignment of
+ one symbol to annother. */
+ if (tree->assign.src->type.node_class == etree_name)
+ {
+ struct bfd_link_hash_entry *hsrc;
+
+ hsrc = bfd_link_hash_lookup (link_info.hash,
+ tree->assign.src->name.name,
+ FALSE, FALSE, TRUE);
+ if (hsrc)
+ bfd_copy_link_hash_symbol_type (link_info.output_bfd, h,
+ hsrc);
+ }
+ }
+ else if (expld.phase == lang_final_phase_enum)
+ {
+ h = bfd_link_hash_lookup (link_info.hash, tree->assign.dst,
+ FALSE, FALSE, TRUE);
+ if (h != NULL
+ && h->type == bfd_link_hash_new)
+ h->type = bfd_link_hash_undefined;
+ }
+ }
+ break;
+
+ case etree_name:
+ fold_name (tree);
+ break;
+
+ default:
+ FAIL ();
+ memset (&expld.result, 0, sizeof (expld.result));
+ break;
+ }
+
+ /* Any value not inside an output section statement is an
+ absolute value. */
+ if (expld.result.valid_p
+ && expld.section == bfd_abs_section_ptr)
+ make_abs ();
+}
+
+void
+exp_fold_tree (etree_type *tree, asection *current_section, bfd_vma *dotp)
+{
+ expld.dot = *dotp;
+ expld.dotp = dotp;
+ expld.section = current_section;
+ exp_fold_tree_1 (tree);
+}
+
+static void
+exp_fold_tree_no_dot (etree_type *tree)
+{
+ expld.dot = 0;
+ expld.dotp = NULL;
+ expld.section = bfd_abs_section_ptr;
+ exp_fold_tree_1 (tree);
+}
+
+etree_type *
+exp_binop (int code, etree_type *lhs, etree_type *rhs)
+{
+ etree_type value, *new_e;
+
+ value.type.node_code = code;
+ value.type.lineno = lhs->type.lineno;
+ value.binary.lhs = lhs;
+ value.binary.rhs = rhs;
+ value.type.node_class = etree_binary;
+ exp_fold_tree_no_dot (&value);
+ if (expld.result.valid_p)
+ return exp_intop (expld.result.value);
+
+ new_e = (etree_type *) stat_alloc (sizeof (new_e->binary));
+ memcpy (new_e, &value, sizeof (new_e->binary));
+ return new_e;
+}
+
+etree_type *
+exp_trinop (int code, etree_type *cond, etree_type *lhs, etree_type *rhs)
+{
+ etree_type value, *new_e;
+
+ value.type.node_code = code;
+ value.type.lineno = lhs->type.lineno;
+ value.trinary.lhs = lhs;
+ value.trinary.cond = cond;
+ value.trinary.rhs = rhs;
+ value.type.node_class = etree_trinary;
+ exp_fold_tree_no_dot (&value);
+ if (expld.result.valid_p)
+ return exp_intop (expld.result.value);
+
+ new_e = (etree_type *) stat_alloc (sizeof (new_e->trinary));
+ memcpy (new_e, &value, sizeof (new_e->trinary));
+ return new_e;
+}
+
+etree_type *
+exp_unop (int code, etree_type *child)
+{
+ etree_type value, *new_e;
+
+ value.unary.type.node_code = code;
+ value.unary.type.lineno = child->type.lineno;
+ value.unary.child = child;
+ value.unary.type.node_class = etree_unary;
+ exp_fold_tree_no_dot (&value);
+ if (expld.result.valid_p)
+ return exp_intop (expld.result.value);
+
+ new_e = (etree_type *) stat_alloc (sizeof (new_e->unary));
+ memcpy (new_e, &value, sizeof (new_e->unary));
+ return new_e;
+}
+
+etree_type *
+exp_nameop (int code, const char *name)
+{
+ etree_type value, *new_e;
+
+ value.name.type.node_code = code;
+ value.name.type.lineno = lineno;
+ value.name.name = name;
+ value.name.type.node_class = etree_name;
+
+ exp_fold_tree_no_dot (&value);
+ if (expld.result.valid_p)
+ return exp_intop (expld.result.value);
+
+ new_e = (etree_type *) stat_alloc (sizeof (new_e->name));
+ memcpy (new_e, &value, sizeof (new_e->name));
+ return new_e;
+
+}
+
+etree_type *
+exp_assop (int code, const char *dst, etree_type *src)
+{
+ etree_type *new_e;
+
+ new_e = (etree_type *) stat_alloc (sizeof (new_e->assign));
+ new_e->type.node_code = code;
+ new_e->type.lineno = src->type.lineno;
+ new_e->type.node_class = etree_assign;
+ new_e->assign.src = src;
+ new_e->assign.dst = dst;
+ return new_e;
+}
+
+/* Handle PROVIDE. */
+
+etree_type *
+exp_provide (const char *dst, etree_type *src, bfd_boolean hidden)
+{
+ etree_type *n;
+
+ n = (etree_type *) stat_alloc (sizeof (n->assign));
+ n->assign.type.node_code = '=';
+ n->assign.type.lineno = src->type.lineno;
+ n->assign.type.node_class = etree_provide;
+ n->assign.src = src;
+ n->assign.dst = dst;
+ n->assign.hidden = hidden;
+ return n;
+}
+
+/* Handle ASSERT. */
+
+etree_type *
+exp_assert (etree_type *exp, const char *message)
+{
+ etree_type *n;
+
+ n = (etree_type *) stat_alloc (sizeof (n->assert_s));
+ n->assert_s.type.node_code = '!';
+ n->assert_s.type.lineno = exp->type.lineno;
+ n->assert_s.type.node_class = etree_assert;
+ n->assert_s.child = exp;
+ n->assert_s.message = message;
+ return n;
+}
+
+void
+exp_print_tree (etree_type *tree)
+{
+ bfd_boolean function_like;
+
+ if (config.map_file == NULL)
+ config.map_file = stderr;
+
+ if (tree == NULL)
+ {
+ minfo ("NULL TREE\n");
+ return;
+ }
+
+ switch (tree->type.node_class)
+ {
+ case etree_value:
+ minfo ("0x%v", tree->value.value);
+ return;
+ case etree_rel:
+ if (tree->rel.section->owner != NULL)
+ minfo ("%B:", tree->rel.section->owner);
+ minfo ("%s+0x%v", tree->rel.section->name, tree->rel.value);
+ return;
+ case etree_assign:
+ fputs (tree->assign.dst, config.map_file);
+ exp_print_token (tree->type.node_code, TRUE);
+ exp_print_tree (tree->assign.src);
+ break;
+ case etree_provide:
+ case etree_provided:
+ fprintf (config.map_file, "PROVIDE (%s, ", tree->assign.dst);
+ exp_print_tree (tree->assign.src);
+ fputc (')', config.map_file);
+ break;
+ case etree_binary:
+ function_like = FALSE;
+ switch (tree->type.node_code)
+ {
+ case MAX_K:
+ case MIN_K:
+ case ALIGN_K:
+ case DATA_SEGMENT_ALIGN:
+ case DATA_SEGMENT_RELRO_END:
+ function_like = TRUE;
+ }
+ if (function_like)
+ {
+ exp_print_token (tree->type.node_code, FALSE);
+ fputc (' ', config.map_file);
+ }
+ fputc ('(', config.map_file);
+ exp_print_tree (tree->binary.lhs);
+ if (function_like)
+ fprintf (config.map_file, ", ");
+ else
+ exp_print_token (tree->type.node_code, TRUE);
+ exp_print_tree (tree->binary.rhs);
+ fputc (')', config.map_file);
+ break;
+ case etree_trinary:
+ exp_print_tree (tree->trinary.cond);
+ fputc ('?', config.map_file);
+ exp_print_tree (tree->trinary.lhs);
+ fputc (':', config.map_file);
+ exp_print_tree (tree->trinary.rhs);
+ break;
+ case etree_unary:
+ exp_print_token (tree->unary.type.node_code, FALSE);
+ if (tree->unary.child)
+ {
+ fprintf (config.map_file, " (");
+ exp_print_tree (tree->unary.child);
+ fputc (')', config.map_file);
+ }
+ break;
+
+ case etree_assert:
+ fprintf (config.map_file, "ASSERT (");
+ exp_print_tree (tree->assert_s.child);
+ fprintf (config.map_file, ", %s)", tree->assert_s.message);
+ break;
+
+ case etree_name:
+ if (tree->type.node_code == NAME)
+ fputs (tree->name.name, config.map_file);
+ else
+ {
+ exp_print_token (tree->type.node_code, FALSE);
+ if (tree->name.name)
+ fprintf (config.map_file, " (%s)", tree->name.name);
+ }
+ break;
+ default:
+ FAIL ();
+ break;
+ }
+}
+
+bfd_vma
+exp_get_vma (etree_type *tree, bfd_vma def, char *name)
+{
+ if (tree != NULL)
+ {
+ exp_fold_tree_no_dot (tree);
+ if (expld.result.valid_p)
+ return expld.result.value;
+ else if (name != NULL && expld.phase != lang_mark_phase_enum)
+ einfo (_("%F%S: nonconstant expression for %s\n"), name);
+ }
+ return def;
+}
+
+int
+exp_get_value_int (etree_type *tree, int def, char *name)
+{
+ return exp_get_vma (tree, def, name);
+}
+
+fill_type *
+exp_get_fill (etree_type *tree, fill_type *def, char *name)
+{
+ fill_type *fill;
+ size_t len;
+ unsigned int val;
+
+ if (tree == NULL)
+ return def;
+
+ exp_fold_tree_no_dot (tree);
+ if (!expld.result.valid_p)
+ {
+ if (name != NULL && expld.phase != lang_mark_phase_enum)
+ einfo (_("%F%S: nonconstant expression for %s\n"), name);
+ return def;
+ }
+
+ if (expld.result.str != NULL && (len = strlen (expld.result.str)) != 0)
+ {
+ unsigned char *dst;
+ unsigned char *s;
+ fill = (fill_type *) xmalloc ((len + 1) / 2 + sizeof (*fill) - 1);
+ fill->size = (len + 1) / 2;
+ dst = fill->data;
+ s = (unsigned char *) expld.result.str;
+ val = 0;
+ do
+ {
+ unsigned int digit;
+
+ digit = *s++ - '0';
+ if (digit > 9)
+ digit = (digit - 'A' + '0' + 10) & 0xf;
+ val <<= 4;
+ val += digit;
+ --len;
+ if ((len & 1) == 0)
+ {
+ *dst++ = val;
+ val = 0;
+ }
+ }
+ while (len != 0);
+ }
+ else
+ {
+ fill = (fill_type *) xmalloc (4 + sizeof (*fill) - 1);
+ val = expld.result.value;
+ fill->data[0] = (val >> 24) & 0xff;
+ fill->data[1] = (val >> 16) & 0xff;
+ fill->data[2] = (val >> 8) & 0xff;
+ fill->data[3] = (val >> 0) & 0xff;
+ fill->size = 4;
+ }
+ return fill;
+}
+
+bfd_vma
+exp_get_abs_int (etree_type *tree, int def, char *name)
+{
+ if (tree != NULL)
+ {
+ exp_fold_tree_no_dot (tree);
+
+ if (expld.result.valid_p)
+ {
+ if (expld.result.section != NULL)
+ expld.result.value += expld.result.section->vma;
+ return expld.result.value;
+ }
+ else if (name != NULL && expld.phase != lang_mark_phase_enum)
+ {
+ lineno = tree->type.lineno;
+ einfo (_("%F%S: nonconstant expression for %s\n"), name);
+ }
+ }
+ return def;
+}
+
+static bfd_vma
+align_n (bfd_vma value, bfd_vma align)
+{
+ if (align <= 1)
+ return value;
+
+ value = (value + align - 1) / align;
+ return value * align;
+}
diff --git a/binutils-2.21/ld/ldexp.h b/binutils-2.21/ld/ldexp.h
new file mode 100644
index 0000000..a15f64a
--- /dev/null
+++ b/binutils-2.21/ld/ldexp.h
@@ -0,0 +1,201 @@
+/* ldexp.h -
+ Copyright 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2002,
+ 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef LDEXP_H
+#define LDEXP_H
+
+/* The result of an expression tree */
+typedef struct {
+ bfd_vma value;
+ char *str;
+ asection *section;
+ bfd_boolean valid_p;
+} etree_value_type;
+
+enum node_tree_enum {
+ etree_binary,
+ etree_trinary,
+ etree_unary,
+ etree_name,
+ etree_assign,
+ etree_provide,
+ etree_provided,
+ etree_value,
+ etree_assert,
+ etree_rel
+};
+
+typedef struct {
+ int node_code;
+ unsigned int lineno;
+ enum node_tree_enum node_class;
+} node_type;
+
+typedef union etree_union {
+ node_type type;
+ struct {
+ node_type type;
+ union etree_union *lhs;
+ union etree_union *rhs;
+ } binary;
+ struct {
+ node_type type;
+ union etree_union *cond;
+ union etree_union *lhs;
+ union etree_union *rhs;
+ } trinary;
+ struct {
+ node_type type;
+ const char *dst;
+ union etree_union *src;
+ bfd_boolean hidden;
+ } assign;
+ struct {
+ node_type type;
+ union etree_union *child;
+ } unary;
+ struct {
+ node_type type;
+ const char *name;
+ } name;
+ struct {
+ node_type type;
+ bfd_vma value;
+ char *str;
+ } value;
+ struct {
+ node_type type;
+ asection *section;
+ bfd_vma value;
+ } rel;
+ struct {
+ node_type type;
+ union etree_union *child;
+ const char *message;
+ } assert_s;
+} etree_type;
+
+typedef enum {
+ lang_first_phase_enum,
+ lang_mark_phase_enum,
+ lang_allocating_phase_enum,
+ lang_final_phase_enum
+} lang_phase_type;
+
+union lang_statement_union;
+
+enum phase_enum {
+ exp_dataseg_none,
+ exp_dataseg_align_seen,
+ exp_dataseg_relro_seen,
+ exp_dataseg_end_seen,
+ exp_dataseg_relro_adjust,
+ exp_dataseg_adjust
+};
+
+enum relro_enum {
+ exp_dataseg_relro_none,
+ exp_dataseg_relro_start,
+ exp_dataseg_relro_end,
+};
+
+struct ldexp_control {
+ /* Modify expression evaluation depending on this. */
+ lang_phase_type phase;
+
+ /* Principally used for diagnostics. */
+ bfd_boolean assigning_to_dot;
+
+ /* Working results. */
+ etree_value_type result;
+ bfd_vma dot;
+
+ /* Current dot and section passed to ldexp folder. */
+ bfd_vma *dotp;
+ asection *section;
+
+ /* State machine and results for DATASEG. */
+ struct {
+ enum phase_enum phase;
+
+ bfd_vma base, min_base, relro_end, end, pagesize, maxpagesize;
+
+ enum relro_enum relro;
+
+ union lang_statement_union *relro_start_stat;
+ union lang_statement_union *relro_end_stat;
+ } dataseg;
+};
+
+extern struct ldexp_control expld;
+
+/* A maps from a segment name to a base address. */
+typedef struct segment_struct {
+ /* The next segment in the linked list. */
+ struct segment_struct *next;
+ /* The name of the sgement. */
+ const char *name;
+ /* The base address for the segment. */
+ bfd_vma value;
+ /* True if a SEGMENT_START directive corresponding to this segment
+ has been seen. */
+ bfd_boolean used;
+} segment_type;
+
+/* The segments specified by the user on the command-line. */
+extern segment_type *segments;
+
+typedef struct _fill_type fill_type;
+
+etree_type *exp_intop
+ (bfd_vma);
+etree_type *exp_bigintop
+ (bfd_vma, char *);
+etree_type *exp_relop
+ (asection *, bfd_vma);
+void exp_fold_tree
+ (etree_type *, asection *, bfd_vma *);
+etree_type *exp_binop
+ (int, etree_type *, etree_type *);
+etree_type *exp_trinop
+ (int,etree_type *, etree_type *, etree_type *);
+etree_type *exp_unop
+ (int, etree_type *);
+etree_type *exp_nameop
+ (int, const char *);
+etree_type *exp_assop
+ (int, const char *, etree_type *);
+etree_type *exp_provide
+ (const char *, etree_type *, bfd_boolean);
+etree_type *exp_assert
+ (etree_type *, const char *);
+void exp_print_tree
+ (etree_type *);
+bfd_vma exp_get_vma
+ (etree_type *, bfd_vma, char *);
+int exp_get_value_int
+ (etree_type *, int, char *);
+fill_type *exp_get_fill
+ (etree_type *, fill_type *, char *);
+bfd_vma exp_get_abs_int
+ (etree_type *, int, char *);
+
+#endif
diff --git a/binutils-2.21/ld/ldfile.c b/binutils-2.21/ld/ldfile.c
new file mode 100644
index 0000000..6364469
--- /dev/null
+++ b/binutils-2.21/ld/ldfile.c
@@ -0,0 +1,723 @@
+/* Linker file opening and searching.
+ Copyright 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2002,
+ 2003, 2004, 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+#include "safe-ctype.h"
+#include "ld.h"
+#include "ldmisc.h"
+#include "ldexp.h"
+#include "ldlang.h"
+#include "ldfile.h"
+#include "ldmain.h"
+#include <ldgram.h>
+#include "ldlex.h"
+#include "ldemul.h"
+#include "libiberty.h"
+#include "filenames.h"
+#ifdef ENABLE_PLUGINS
+#include "plugin-api.h"
+#include "plugin.h"
+#endif /* ENABLE_PLUGINS */
+
+const char * ldfile_input_filename;
+bfd_boolean ldfile_assumed_script = FALSE;
+const char * ldfile_output_machine_name = "";
+unsigned long ldfile_output_machine;
+enum bfd_architecture ldfile_output_architecture;
+search_dirs_type * search_head;
+
+#ifdef VMS
+static char * slash = "";
+#else
+#if defined (_WIN32) && ! defined (__CYGWIN32__)
+static char * slash = "\\";
+#else
+static char * slash = "/";
+#endif
+#endif
+
+typedef struct search_arch
+{
+ char *name;
+ struct search_arch *next;
+} search_arch_type;
+
+static search_dirs_type **search_tail_ptr = &search_head;
+static search_arch_type *search_arch_head;
+static search_arch_type **search_arch_tail_ptr = &search_arch_head;
+
+/* Test whether a pathname, after canonicalization, is the same or a
+ sub-directory of the sysroot directory. */
+
+static bfd_boolean
+is_sysrooted_pathname (const char *name, bfd_boolean notsame)
+{
+ char * realname = ld_canon_sysroot ? lrealpath (name) : NULL;
+ int len;
+ bfd_boolean result;
+
+ if (! realname)
+ return FALSE;
+
+ len = strlen (realname);
+
+ if (((! notsame && len == ld_canon_sysroot_len)
+ || (len >= ld_canon_sysroot_len
+ && IS_DIR_SEPARATOR (realname[ld_canon_sysroot_len])
+ && (realname[ld_canon_sysroot_len] = '\0') == '\0'))
+ && FILENAME_CMP (ld_canon_sysroot, realname) == 0)
+ result = TRUE;
+ else
+ result = FALSE;
+
+ if (realname)
+ free (realname);
+
+ return result;
+}
+
+/* Adds NAME to the library search path.
+ Makes a copy of NAME using xmalloc(). */
+
+void
+ldfile_add_library_path (const char *name, bfd_boolean cmdline)
+{
+ search_dirs_type *new_dirs;
+
+ if (!cmdline && config.only_cmd_line_lib_dirs)
+ return;
+
+ new_dirs = (search_dirs_type *) xmalloc (sizeof (search_dirs_type));
+ new_dirs->next = NULL;
+ new_dirs->cmdline = cmdline;
+ *search_tail_ptr = new_dirs;
+ search_tail_ptr = &new_dirs->next;
+
+ /* If a directory is marked as honoring sysroot, prepend the sysroot path
+ now. */
+ if (name[0] == '=')
+ {
+ new_dirs->name = concat (ld_sysroot, name + 1, (const char *) NULL);
+ new_dirs->sysrooted = TRUE;
+ }
+ else
+ {
+ new_dirs->name = xstrdup (name);
+ new_dirs->sysrooted = is_sysrooted_pathname (name, FALSE);
+ }
+}
+
+/* Try to open a BFD for a lang_input_statement. */
+
+bfd_boolean
+ldfile_try_open_bfd (const char *attempt,
+ lang_input_statement_type *entry)
+{
+ entry->the_bfd = bfd_openr (attempt, entry->target);
+
+ if (trace_file_tries)
+ {
+ if (entry->the_bfd == NULL)
+ info_msg (_("attempt to open %s failed\n"), attempt);
+ else
+ info_msg (_("attempt to open %s succeeded\n"), attempt);
+ }
+
+ if (entry->the_bfd == NULL)
+ {
+ if (bfd_get_error () == bfd_error_invalid_target)
+ einfo (_("%F%P: invalid BFD target `%s'\n"), entry->target);
+ return FALSE;
+ }
+
+ /* Linker needs to decompress sections. */
+ entry->the_bfd->flags |= BFD_DECOMPRESS;
+
+ /* If we are searching for this file, see if the architecture is
+ compatible with the output file. If it isn't, keep searching.
+ If we can't open the file as an object file, stop the search
+ here. If we are statically linking, ensure that we don't link
+ a dynamic object.
+
+ In the code below, it's OK to exit early if the check fails,
+ closing the checked BFD and returning FALSE, but if the BFD
+ checks out compatible, do not exit early returning TRUE, or
+ the plugins will not get a chance to claim the file. */
+
+ if (entry->search_dirs_flag || !entry->dynamic)
+ {
+ bfd *check;
+
+ if (bfd_check_format (entry->the_bfd, bfd_archive))
+ check = bfd_openr_next_archived_file (entry->the_bfd, NULL);
+ else
+ check = entry->the_bfd;
+
+ if (check != NULL)
+ {
+ if (! bfd_check_format (check, bfd_object))
+ {
+ if (check == entry->the_bfd
+ && entry->search_dirs_flag
+ && bfd_get_error () == bfd_error_file_not_recognized
+ && ! ldemul_unrecognized_file (entry))
+ {
+ int token, skip = 0;
+ char *arg, *arg1, *arg2, *arg3;
+ extern FILE *yyin;
+
+ /* Try to interpret the file as a linker script. */
+ ldfile_open_command_file (attempt);
+
+ ldfile_assumed_script = TRUE;
+ parser_input = input_selected;
+ ldlex_both ();
+ token = INPUT_SCRIPT;
+ while (token != 0)
+ {
+ switch (token)
+ {
+ case OUTPUT_FORMAT:
+ if ((token = yylex ()) != '(')
+ continue;
+ if ((token = yylex ()) != NAME)
+ continue;
+ arg1 = yylval.name;
+ arg2 = NULL;
+ arg3 = NULL;
+ token = yylex ();
+ if (token == ',')
+ {
+ if ((token = yylex ()) != NAME)
+ {
+ free (arg1);
+ continue;
+ }
+ arg2 = yylval.name;
+ if ((token = yylex ()) != ','
+ || (token = yylex ()) != NAME)
+ {
+ free (arg1);
+ free (arg2);
+ continue;
+ }
+ arg3 = yylval.name;
+ token = yylex ();
+ }
+ if (token == ')')
+ {
+ switch (command_line.endian)
+ {
+ default:
+ case ENDIAN_UNSET:
+ arg = arg1; break;
+ case ENDIAN_BIG:
+ arg = arg2 ? arg2 : arg1; break;
+ case ENDIAN_LITTLE:
+ arg = arg3 ? arg3 : arg1; break;
+ }
+ if (strcmp (arg, lang_get_output_target ()) != 0)
+ skip = 1;
+ }
+ free (arg1);
+ if (arg2) free (arg2);
+ if (arg3) free (arg3);
+ break;
+ case NAME:
+ case LNAME:
+ case VERS_IDENTIFIER:
+ case VERS_TAG:
+ free (yylval.name);
+ break;
+ case INT:
+ if (yylval.bigint.str)
+ free (yylval.bigint.str);
+ break;
+ }
+ token = yylex ();
+ }
+ ldlex_popstate ();
+ ldfile_assumed_script = FALSE;
+ fclose (yyin);
+ yyin = NULL;
+ if (skip)
+ {
+ if (command_line.warn_search_mismatch)
+ einfo (_("%P: skipping incompatible %s "
+ "when searching for %s\n"),
+ attempt, entry->local_sym_name);
+ bfd_close (entry->the_bfd);
+ entry->the_bfd = NULL;
+ return FALSE;
+ }
+ }
+ goto success;
+ }
+
+ if (!entry->dynamic && (entry->the_bfd->flags & DYNAMIC) != 0)
+ {
+ einfo (_("%F%P: attempted static link of dynamic object `%s'\n"),
+ attempt);
+ bfd_close (entry->the_bfd);
+ entry->the_bfd = NULL;
+ return FALSE;
+ }
+
+ if (entry->search_dirs_flag
+ && !bfd_arch_get_compatible (check, link_info.output_bfd,
+ command_line.accept_unknown_input_arch)
+ /* XCOFF archives can have 32 and 64 bit objects. */
+ && ! (bfd_get_flavour (check) == bfd_target_xcoff_flavour
+ && bfd_get_flavour (link_info.output_bfd) == bfd_target_xcoff_flavour
+ && bfd_check_format (entry->the_bfd, bfd_archive)))
+ {
+ if (command_line.warn_search_mismatch)
+ einfo (_("%P: skipping incompatible %s "
+ "when searching for %s\n"),
+ attempt, entry->local_sym_name);
+ bfd_close (entry->the_bfd);
+ entry->the_bfd = NULL;
+ return FALSE;
+ }
+ }
+ }
+success:
+#ifdef ENABLE_PLUGINS
+ /* If plugins are active, they get first chance to claim
+ any successfully-opened input file. We skip archives
+ here; the plugin wants us to offer it the individual
+ members when we enumerate them, not the whole file. We
+ also ignore corefiles, because that's just weird. It is
+ a needed side-effect of calling bfd_check_format with
+ bfd_object that it sets the bfd's arch and mach, which
+ will be needed when and if we want to bfd_create a new
+ one using this one as a template. */
+ if (bfd_check_format (entry->the_bfd, bfd_object)
+ && plugin_active_plugins_p ())
+ {
+ int fd = open (attempt, O_RDONLY | O_BINARY);
+ if (fd >= 0)
+ {
+ struct ld_plugin_input_file file;
+ int claimed = 0;
+
+ file.name = attempt;
+ file.offset = 0;
+ file.filesize = lseek (fd, 0, SEEK_END);
+ file.fd = fd;
+ /* We create a dummy BFD, initially empty, to house
+ whatever symbols the plugin may want to add. */
+ file.handle = plugin_get_ir_dummy_bfd (attempt, entry->the_bfd);
+ if (plugin_call_claim_file (&file, &claimed))
+ einfo (_("%P%F: %s: plugin reported error claiming file\n"),
+ plugin_error_plugin ());
+ /* fd belongs to us, not the plugin; but we don't need it. */
+ close (fd);
+ if (claimed)
+ {
+ /* Discard the real file's BFD and substitute the dummy one. */
+ bfd_close (entry->the_bfd);
+ entry->the_bfd = file.handle;
+ entry->claimed = TRUE;
+ bfd_make_readable (entry->the_bfd);
+ }
+ else
+ {
+ /* If plugin didn't claim the file, we don't need the dummy
+ bfd. Can't avoid speculatively creating it, alas. */
+ bfd_close_all_done (file.handle);
+ entry->claimed = FALSE;
+ }
+ }
+ }
+#endif /* ENABLE_PLUGINS */
+
+ /* It opened OK, the format checked out, and the plugins have had
+ their chance to claim it, so this is success. */
+ return TRUE;
+}
+
+/* Search for and open the file specified by ENTRY. If it is an
+ archive, use ARCH, LIB and SUFFIX to modify the file name. */
+
+bfd_boolean
+ldfile_open_file_search (const char *arch,
+ lang_input_statement_type *entry,
+ const char *lib,
+ const char *suffix)
+{
+ search_dirs_type *search;
+
+ /* If this is not an archive, try to open it in the current
+ directory first. */
+ if (! entry->is_archive)
+ {
+ if (entry->sysrooted && IS_ABSOLUTE_PATH (entry->filename))
+ {
+ char *name = concat (ld_sysroot, entry->filename,
+ (const char *) NULL);
+ if (ldfile_try_open_bfd (name, entry))
+ {
+ entry->filename = name;
+ return TRUE;
+ }
+ free (name);
+ }
+ else if (ldfile_try_open_bfd (entry->filename, entry))
+ {
+ entry->sysrooted = IS_ABSOLUTE_PATH (entry->filename)
+ && is_sysrooted_pathname (entry->filename, TRUE);
+ return TRUE;
+ }
+
+ if (IS_ABSOLUTE_PATH (entry->filename))
+ return FALSE;
+ }
+
+ for (search = search_head; search != NULL; search = search->next)
+ {
+ char *string;
+
+ if (entry->dynamic && ! link_info.relocatable)
+ {
+ if (ldemul_open_dynamic_archive (arch, search, entry))
+ {
+ entry->sysrooted = search->sysrooted;
+ return TRUE;
+ }
+ }
+
+ if (entry->is_archive)
+ string = concat (search->name, slash, lib, entry->filename,
+ arch, suffix, (const char *) NULL);
+ else
+ string = concat (search->name, slash, entry->filename,
+ (const char *) 0);
+
+ if (ldfile_try_open_bfd (string, entry))
+ {
+ entry->filename = string;
+ entry->sysrooted = search->sysrooted;
+ return TRUE;
+ }
+
+ free (string);
+ }
+
+ return FALSE;
+}
+
+/* Open the input file specified by ENTRY.
+ PR 4437: Do not stop on the first missing file, but
+ continue processing other input files in case there
+ are more errors to report. */
+
+void
+ldfile_open_file (lang_input_statement_type *entry)
+{
+ if (entry->the_bfd != NULL)
+ return;
+
+ if (! entry->search_dirs_flag)
+ {
+ if (ldfile_try_open_bfd (entry->filename, entry))
+ return;
+
+ if (strcmp (entry->filename, entry->local_sym_name) != 0)
+ einfo (_("%P: cannot find %s (%s): %E\n"),
+ entry->filename, entry->local_sym_name);
+ else
+ einfo (_("%P: cannot find %s: %E\n"), entry->local_sym_name);
+
+ entry->missing_file = TRUE;
+ missing_file = TRUE;
+ }
+ else
+ {
+ search_arch_type *arch;
+ bfd_boolean found = FALSE;
+
+ /* Try to open <filename><suffix> or lib<filename><suffix>.a */
+ for (arch = search_arch_head; arch != NULL; arch = arch->next)
+ {
+ found = ldfile_open_file_search (arch->name, entry, "lib", ".a");
+ if (found)
+ break;
+#ifdef VMS
+ found = ldfile_open_file_search (arch->name, entry, ":lib", ".a");
+ if (found)
+ break;
+#endif
+ found = ldemul_find_potential_libraries (arch->name, entry);
+ if (found)
+ break;
+ }
+
+ /* If we have found the file, we don't need to search directories
+ again. */
+ if (found)
+ entry->search_dirs_flag = FALSE;
+ else
+ {
+ if (entry->sysrooted
+ && ld_sysroot
+ && IS_ABSOLUTE_PATH (entry->local_sym_name))
+ einfo (_("%P: cannot find %s inside %s\n"),
+ entry->local_sym_name, ld_sysroot);
+ else
+ einfo (_("%P: cannot find %s\n"), entry->local_sym_name);
+ entry->missing_file = TRUE;
+ missing_file = TRUE;
+ }
+ }
+}
+
+/* Try to open NAME; if that fails, try NAME with EXTEN appended to it. */
+
+static FILE *
+try_open (const char *name, const char *exten)
+{
+ FILE *result;
+
+ result = fopen (name, "r");
+
+ if (trace_file_tries)
+ {
+ if (result == NULL)
+ info_msg (_("cannot find script file %s\n"), name);
+ else
+ info_msg (_("opened script file %s\n"), name);
+ }
+
+ if (result != NULL)
+ return result;
+
+ if (*exten)
+ {
+ char *buff;
+
+ buff = concat (name, exten, (const char *) NULL);
+ result = fopen (buff, "r");
+
+ if (trace_file_tries)
+ {
+ if (result == NULL)
+ info_msg (_("cannot find script file %s\n"), buff);
+ else
+ info_msg (_("opened script file %s\n"), buff);
+ }
+ free (buff);
+ }
+
+ return result;
+}
+
+/* Return TRUE iff directory DIR contains an "ldscripts" subdirectory. */
+
+static bfd_boolean
+check_for_scripts_dir (char *dir)
+{
+ char *buf;
+ struct stat s;
+ bfd_boolean res;
+
+ buf = concat (dir, "/ldscripts", (const char *) NULL);
+ res = stat (buf, &s) == 0 && S_ISDIR (s.st_mode);
+ free (buf);
+ return res;
+}
+
+/* Return the default directory for finding script files.
+ We look for the "ldscripts" directory in:
+
+ SCRIPTDIR (passed from Makefile)
+ (adjusted according to the current location of the binary)
+ the dir where this program is (for using it from the build tree). */
+
+static char *
+find_scripts_dir (void)
+{
+ char *dir;
+
+ dir = make_relative_prefix (program_name, BINDIR, SCRIPTDIR);
+ if (dir)
+ {
+ if (check_for_scripts_dir (dir))
+ return dir;
+ free (dir);
+ }
+
+ dir = make_relative_prefix (program_name, TOOLBINDIR, SCRIPTDIR);
+ if (dir)
+ {
+ if (check_for_scripts_dir (dir))
+ return dir;
+ free (dir);
+ }
+
+ /* Look for "ldscripts" in the dir where our binary is. */
+ dir = make_relative_prefix (program_name, ".", ".");
+ if (dir)
+ {
+ if (check_for_scripts_dir (dir))
+ return dir;
+ free (dir);
+ }
+
+ return NULL;
+}
+
+/* If DEFAULT_ONLY is false, try to open NAME; if that fails, look for
+ it in directories specified with -L, then in the default script
+ directory, without and with EXTEND appended. If DEFAULT_ONLY is
+ true, the search is restricted to the default script location. */
+
+static FILE *
+ldfile_find_command_file (const char *name, const char *extend,
+ bfd_boolean default_only)
+{
+ search_dirs_type *search;
+ FILE *result = NULL;
+ char *buffer;
+ static search_dirs_type *script_search;
+
+ if (!default_only)
+ {
+ /* First try raw name. */
+ result = try_open (name, "");
+ if (result != NULL)
+ return result;
+ }
+
+ if (!script_search)
+ {
+ char *script_dir = find_scripts_dir ();
+ if (script_dir)
+ {
+ search_dirs_type **save_tail_ptr = search_tail_ptr;
+ search_tail_ptr = &script_search;
+ ldfile_add_library_path (script_dir, TRUE);
+ search_tail_ptr = save_tail_ptr;
+ }
+ }
+
+ /* Temporarily append script_search to the path list so that the
+ paths specified with -L will be searched first. */
+ *search_tail_ptr = script_search;
+
+ /* Try now prefixes. */
+ for (search = default_only ? script_search : search_head;
+ search != NULL;
+ search = search->next)
+ {
+ buffer = concat (search->name, slash, name, (const char *) NULL);
+ result = try_open (buffer, extend);
+ free (buffer);
+ if (result)
+ break;
+ }
+
+ /* Restore the original path list. */
+ *search_tail_ptr = NULL;
+
+ return result;
+}
+
+/* Open command file NAME. */
+
+static void
+ldfile_open_command_file_1 (const char *name, bfd_boolean default_only)
+{
+ FILE *ldlex_input_stack;
+ ldlex_input_stack = ldfile_find_command_file (name, "", default_only);
+
+ if (ldlex_input_stack == NULL)
+ {
+ bfd_set_error (bfd_error_system_call);
+ einfo (_("%P%F: cannot open linker script file %s: %E\n"), name);
+ }
+
+ lex_push_file (ldlex_input_stack, name);
+
+ ldfile_input_filename = name;
+ lineno = 1;
+
+ saved_script_handle = ldlex_input_stack;
+}
+
+/* Open command file NAME in the current directory, -L directories,
+ the default script location, in that order. */
+
+void
+ldfile_open_command_file (const char *name)
+{
+ ldfile_open_command_file_1 (name, FALSE);
+}
+
+/* Open command file NAME at the default script location. */
+
+void
+ldfile_open_default_command_file (const char *name)
+{
+ ldfile_open_command_file_1 (name, TRUE);
+}
+
+void
+ldfile_add_arch (const char *in_name)
+{
+ char *name = xstrdup (in_name);
+ search_arch_type *new_arch = (search_arch_type *)
+ xmalloc (sizeof (search_arch_type));
+
+ ldfile_output_machine_name = in_name;
+
+ new_arch->name = name;
+ new_arch->next = NULL;
+ while (*name)
+ {
+ *name = TOLOWER (*name);
+ name++;
+ }
+ *search_arch_tail_ptr = new_arch;
+ search_arch_tail_ptr = &new_arch->next;
+
+}
+
+/* Set the output architecture. */
+
+void
+ldfile_set_output_arch (const char *string, enum bfd_architecture defarch)
+{
+ const bfd_arch_info_type *arch = bfd_scan_arch (string);
+
+ if (arch)
+ {
+ ldfile_output_architecture = arch->arch;
+ ldfile_output_machine = arch->mach;
+ ldfile_output_machine_name = arch->printable_name;
+ }
+ else if (defarch != bfd_arch_unknown)
+ ldfile_output_architecture = defarch;
+ else
+ einfo (_("%P%F: cannot represent machine `%s'\n"), string);
+}
diff --git a/binutils-2.21/ld/ldfile.h b/binutils-2.21/ld/ldfile.h
new file mode 100644
index 0000000..9b79397
--- /dev/null
+++ b/binutils-2.21/ld/ldfile.h
@@ -0,0 +1,65 @@
+/* ldfile.h -
+ Copyright 1991, 1992, 1993, 1994, 1995, 2000, 2002, 2003, 2004, 2005, 2007
+ Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef LDFILE_H
+#define LDFILE_H
+
+extern const char *ldfile_input_filename;
+extern bfd_boolean ldfile_assumed_script;
+extern unsigned long ldfile_output_machine;
+extern enum bfd_architecture ldfile_output_architecture;
+extern const char *ldfile_output_machine_name;
+
+/* Structure used to hold the list of directories to search for
+ libraries. */
+
+typedef struct search_dirs {
+ /* Next directory on list. */
+ struct search_dirs *next;
+ /* Name of directory. */
+ const char *name;
+ /* TRUE if this is from the command line. */
+ bfd_boolean cmdline;
+ /* true if this is from within the sys-root. */
+ bfd_boolean sysrooted;
+} search_dirs_type;
+
+extern search_dirs_type *search_head;
+
+extern void ldfile_add_arch
+ (const char *);
+extern void ldfile_add_library_path
+ (const char *, bfd_boolean cmdline);
+extern void ldfile_open_command_file
+ (const char *name);
+extern void ldfile_open_default_command_file
+ (const char *name);
+extern void ldfile_open_file
+ (struct lang_input_statement_struct *);
+extern bfd_boolean ldfile_try_open_bfd
+ (const char *, struct lang_input_statement_struct *);
+extern void ldfile_set_output_arch
+ (const char *, enum bfd_architecture);
+extern bfd_boolean ldfile_open_file_search
+ (const char *arch, struct lang_input_statement_struct *,
+ const char *lib, const char *suffix);
+
+#endif
diff --git a/binutils-2.21/ld/ldgram.c b/binutils-2.21/ld/ldgram.c
new file mode 100644
index 0000000..bd914be
--- /dev/null
+++ b/binutils-2.21/ld/ldgram.c
@@ -0,0 +1,4495 @@
+/* A Bison parser, made by GNU Bison 2.3. */
+
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Free Software Foundation, Inc.
+
+ 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, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+ simplifying the original so-called "semantic" parser. */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+ infringing on user name space. This should be done even for local
+ variables, as they might otherwise be expanded by user macros.
+ There are some unavoidable exceptions within include files to
+ define necessary library symbols; they are noted "INFRINGES ON
+ USER NAME SPACE" below. */
+
+/* Identify Bison output. */
+#define YYBISON 1
+
+/* Bison version. */
+#define YYBISON_VERSION "2.3"
+
+/* Skeleton name. */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers. */
+#define YYPURE 0
+
+/* Using locations. */
+#define YYLSP_NEEDED 0
+
+
+
+/* Tokens. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ INT = 258,
+ NAME = 259,
+ LNAME = 260,
+ OREQ = 261,
+ ANDEQ = 262,
+ RSHIFTEQ = 263,
+ LSHIFTEQ = 264,
+ DIVEQ = 265,
+ MULTEQ = 266,
+ MINUSEQ = 267,
+ PLUSEQ = 268,
+ OROR = 269,
+ ANDAND = 270,
+ NE = 271,
+ EQ = 272,
+ GE = 273,
+ LE = 274,
+ RSHIFT = 275,
+ LSHIFT = 276,
+ UNARY = 277,
+ END = 278,
+ ALIGN_K = 279,
+ BLOCK = 280,
+ BIND = 281,
+ QUAD = 282,
+ SQUAD = 283,
+ LONG = 284,
+ SHORT = 285,
+ BYTE = 286,
+ SECTIONS = 287,
+ PHDRS = 288,
+ INSERT_K = 289,
+ AFTER = 290,
+ BEFORE = 291,
+ DATA_SEGMENT_ALIGN = 292,
+ DATA_SEGMENT_RELRO_END = 293,
+ DATA_SEGMENT_END = 294,
+ SORT_BY_NAME = 295,
+ SORT_BY_ALIGNMENT = 296,
+ SIZEOF_HEADERS = 297,
+ OUTPUT_FORMAT = 298,
+ FORCE_COMMON_ALLOCATION = 299,
+ OUTPUT_ARCH = 300,
+ INHIBIT_COMMON_ALLOCATION = 301,
+ SEGMENT_START = 302,
+ INCLUDE = 303,
+ MEMORY = 304,
+ REGION_ALIAS = 305,
+ NOLOAD = 306,
+ DSECT = 307,
+ COPY = 308,
+ INFO = 309,
+ OVERLAY = 310,
+ DEFINED = 311,
+ TARGET_K = 312,
+ SEARCH_DIR = 313,
+ MAP = 314,
+ ENTRY = 315,
+ NEXT = 316,
+ SIZEOF = 317,
+ ALIGNOF = 318,
+ ADDR = 319,
+ LOADADDR = 320,
+ MAX_K = 321,
+ MIN_K = 322,
+ STARTUP = 323,
+ HLL = 324,
+ SYSLIB = 325,
+ FLOAT = 326,
+ NOFLOAT = 327,
+ NOCROSSREFS = 328,
+ ORIGIN = 329,
+ FILL = 330,
+ LENGTH = 331,
+ CREATE_OBJECT_SYMBOLS = 332,
+ INPUT = 333,
+ GROUP = 334,
+ OUTPUT = 335,
+ CONSTRUCTORS = 336,
+ ALIGNMOD = 337,
+ AT = 338,
+ SUBALIGN = 339,
+ PROVIDE = 340,
+ PROVIDE_HIDDEN = 341,
+ AS_NEEDED = 342,
+ CHIP = 343,
+ LIST = 344,
+ SECT = 345,
+ ABSOLUTE = 346,
+ LOAD = 347,
+ NEWLINE = 348,
+ ENDWORD = 349,
+ ORDER = 350,
+ NAMEWORD = 351,
+ ASSERT_K = 352,
+ FORMAT = 353,
+ PUBLIC = 354,
+ DEFSYMEND = 355,
+ BASE = 356,
+ ALIAS = 357,
+ TRUNCATE = 358,
+ REL = 359,
+ INPUT_SCRIPT = 360,
+ INPUT_MRI_SCRIPT = 361,
+ INPUT_DEFSYM = 362,
+ CASE = 363,
+ EXTERN = 364,
+ START = 365,
+ VERS_TAG = 366,
+ VERS_IDENTIFIER = 367,
+ GLOBAL = 368,
+ LOCAL = 369,
+ VERSIONK = 370,
+ INPUT_VERSION_SCRIPT = 371,
+ KEEP = 372,
+ ONLY_IF_RO = 373,
+ ONLY_IF_RW = 374,
+ SPECIAL = 375,
+ EXCLUDE_FILE = 376,
+ CONSTANT = 377,
+ INPUT_DYNAMIC_LIST = 378
+ };
+#endif
+/* Tokens. */
+#define INT 258
+#define NAME 259
+#define LNAME 260
+#define OREQ 261
+#define ANDEQ 262
+#define RSHIFTEQ 263
+#define LSHIFTEQ 264
+#define DIVEQ 265
+#define MULTEQ 266
+#define MINUSEQ 267
+#define PLUSEQ 268
+#define OROR 269
+#define ANDAND 270
+#define NE 271
+#define EQ 272
+#define GE 273
+#define LE 274
+#define RSHIFT 275
+#define LSHIFT 276
+#define UNARY 277
+#define END 278
+#define ALIGN_K 279
+#define BLOCK 280
+#define BIND 281
+#define QUAD 282
+#define SQUAD 283
+#define LONG 284
+#define SHORT 285
+#define BYTE 286
+#define SECTIONS 287
+#define PHDRS 288
+#define INSERT_K 289
+#define AFTER 290
+#define BEFORE 291
+#define DATA_SEGMENT_ALIGN 292
+#define DATA_SEGMENT_RELRO_END 293
+#define DATA_SEGMENT_END 294
+#define SORT_BY_NAME 295
+#define SORT_BY_ALIGNMENT 296
+#define SIZEOF_HEADERS 297
+#define OUTPUT_FORMAT 298
+#define FORCE_COMMON_ALLOCATION 299
+#define OUTPUT_ARCH 300
+#define INHIBIT_COMMON_ALLOCATION 301
+#define SEGMENT_START 302
+#define INCLUDE 303
+#define MEMORY 304
+#define REGION_ALIAS 305
+#define NOLOAD 306
+#define DSECT 307
+#define COPY 308
+#define INFO 309
+#define OVERLAY 310
+#define DEFINED 311
+#define TARGET_K 312
+#define SEARCH_DIR 313
+#define MAP 314
+#define ENTRY 315
+#define NEXT 316
+#define SIZEOF 317
+#define ALIGNOF 318
+#define ADDR 319
+#define LOADADDR 320
+#define MAX_K 321
+#define MIN_K 322
+#define STARTUP 323
+#define HLL 324
+#define SYSLIB 325
+#define FLOAT 326
+#define NOFLOAT 327
+#define NOCROSSREFS 328
+#define ORIGIN 329
+#define FILL 330
+#define LENGTH 331
+#define CREATE_OBJECT_SYMBOLS 332
+#define INPUT 333
+#define GROUP 334
+#define OUTPUT 335
+#define CONSTRUCTORS 336
+#define ALIGNMOD 337
+#define AT 338
+#define SUBALIGN 339
+#define PROVIDE 340
+#define PROVIDE_HIDDEN 341
+#define AS_NEEDED 342
+#define CHIP 343
+#define LIST 344
+#define SECT 345
+#define ABSOLUTE 346
+#define LOAD 347
+#define NEWLINE 348
+#define ENDWORD 349
+#define ORDER 350
+#define NAMEWORD 351
+#define ASSERT_K 352
+#define FORMAT 353
+#define PUBLIC 354
+#define DEFSYMEND 355
+#define BASE 356
+#define ALIAS 357
+#define TRUNCATE 358
+#define REL 359
+#define INPUT_SCRIPT 360
+#define INPUT_MRI_SCRIPT 361
+#define INPUT_DEFSYM 362
+#define CASE 363
+#define EXTERN 364
+#define START 365
+#define VERS_TAG 366
+#define VERS_IDENTIFIER 367
+#define GLOBAL 368
+#define LOCAL 369
+#define VERSIONK 370
+#define INPUT_VERSION_SCRIPT 371
+#define KEEP 372
+#define ONLY_IF_RO 373
+#define ONLY_IF_RW 374
+#define SPECIAL 375
+#define EXCLUDE_FILE 376
+#define CONSTANT 377
+#define INPUT_DYNAMIC_LIST 378
+
+
+
+
+/* Copy the first part of user declarations. */
+#line 24 "ldgram.y"
+
+/*
+
+ */
+
+#define DONTDECLARE_MALLOC
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+#include "ld.h"
+#include "ldexp.h"
+#include "ldver.h"
+#include "ldlang.h"
+#include "ldfile.h"
+#include "ldemul.h"
+#include "ldmisc.h"
+#include "ldmain.h"
+#include "mri.h"
+#include "ldctor.h"
+#include "ldlex.h"
+
+#ifndef YYDEBUG
+#define YYDEBUG 1
+#endif
+
+static enum section_type sectype;
+static lang_memory_region_type *region;
+
+bfd_boolean ldgram_had_keep = FALSE;
+char *ldgram_vers_current_lang = NULL;
+
+#define ERROR_NAME_MAX 20
+static char *error_names[ERROR_NAME_MAX];
+static int error_index;
+#define PUSH_ERROR(x) if (error_index < ERROR_NAME_MAX) error_names[error_index] = x; error_index++;
+#define POP_ERROR() error_index--;
+
+
+/* Enabling traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages. */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table. */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+#line 62 "ldgram.y"
+{
+ bfd_vma integer;
+ struct big_int
+ {
+ bfd_vma integer;
+ char *str;
+ } bigint;
+ fill_type *fill;
+ char *name;
+ const char *cname;
+ struct wildcard_spec wildcard;
+ struct wildcard_list *wildcard_list;
+ struct name_list *name_list;
+ int token;
+ union etree_union *etree;
+ struct phdr_info
+ {
+ bfd_boolean filehdr;
+ bfd_boolean phdrs;
+ union etree_union *at;
+ union etree_union *flags;
+ } phdr;
+ struct lang_nocrossref *nocrossref;
+ struct lang_output_section_phdr_list *section_phdr;
+ struct bfd_elf_version_deps *deflist;
+ struct bfd_elf_version_expr *versyms;
+ struct bfd_elf_version_tree *versnode;
+}
+/* Line 193 of yacc.c. */
+#line 410 "ldgram.c"
+ YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+
+
+/* Copy the second part of user declarations. */
+
+
+/* Line 216 of yacc.c. */
+#line 423 "ldgram.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+# define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+# define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# else
+# define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+# if ENABLE_NLS
+# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+# define YY_(msgid) dgettext ("bison-runtime", msgid)
+# endif
+# endif
+# ifndef YY_
+# define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E. */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions. */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int i)
+#else
+static int
+YYID (i)
+ int i;
+#endif
+{
+ return i;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols. */
+
+# ifdef YYSTACK_USE_ALLOCA
+# if YYSTACK_USE_ALLOCA
+# ifdef __GNUC__
+# define YYSTACK_ALLOC __builtin_alloca
+# elif defined __BUILTIN_VA_ARG_INCR
+# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+# elif defined _AIX
+# define YYSTACK_ALLOC __alloca
+# elif defined _MSC_VER
+# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+# define alloca _alloca
+# else
+# define YYSTACK_ALLOC alloca
+# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef _STDLIB_H
+# define _STDLIB_H 1
+# endif
+# endif
+# endif
+# endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+ /* Pacify GCC's `empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+# ifndef YYSTACK_ALLOC_MAXIMUM
+ /* The OS might guarantee only one guard page at the bottom of the stack,
+ and a page size can be as small as 4096 bytes. So we cannot safely
+ invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
+ to allow for a few compiler-allocated temporary stack slots. */
+# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+# endif
+# else
+# define YYSTACK_ALLOC YYMALLOC
+# define YYSTACK_FREE YYFREE
+# ifndef YYSTACK_ALLOC_MAXIMUM
+# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+# endif
+# if (defined __cplusplus && ! defined _STDLIB_H \
+ && ! ((defined YYMALLOC || defined malloc) \
+ && (defined YYFREE || defined free)))
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef _STDLIB_H
+# define _STDLIB_H 1
+# endif
+# endif
+# ifndef YYMALLOC
+# define YYMALLOC malloc
+# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# ifndef YYFREE
+# define YYFREE free
+# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+ && (! defined __cplusplus \
+ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member. */
+union yyalloc
+{
+ yytype_int16 yyss;
+ YYSTYPE yyvs;
+ };
+
+/* The size of the maximum gap between one aligned stack and the next. */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+ N elements. */
+# define YYSTACK_BYTES(N) \
+ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+ + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if defined __GNUC__ && 1 < __GNUC__
+# define YYCOPY(To, From, Count) \
+ __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+# else
+# define YYCOPY(To, From, Count) \
+ do \
+ { \
+ YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (To)[yyi] = (From)[yyi]; \
+ } \
+ while (YYID (0))
+# endif
+# endif
+
+/* Relocate STACK from its old location to the new one. The
+ local variables YYSIZE and YYSTACKSIZE give the old and new number of
+ elements in the stack, and YYPTR gives the new location of the
+ stack. Advance YYPTR to a properly aligned location for the next
+ stack. */
+# define YYSTACK_RELOCATE(Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack, Stack, yysize); \
+ Stack = &yyptr->Stack; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (YYID (0))
+
+#endif
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL 17
+/* YYLAST -- Last index in YYTABLE. */
+#define YYLAST 1838
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS 147
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS 126
+/* YYNRULES -- Number of rules. */
+#define YYNRULES 356
+/* YYNRULES -- Number of states. */
+#define YYNSTATES 763
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
+#define YYUNDEFTOK 2
+#define YYMAXUTOK 378
+
+#define YYTRANSLATE(YYX) \
+ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
+static const yytype_uint8 yytranslate[] =
+{
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 145, 2, 2, 2, 34, 21, 2,
+ 37, 142, 32, 30, 140, 31, 2, 33, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 16, 141,
+ 24, 6, 25, 15, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 143, 2, 144, 20, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 56, 19, 57, 146, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
+ 5, 7, 8, 9, 10, 11, 12, 13, 14, 17,
+ 18, 22, 23, 26, 27, 28, 29, 35, 36, 38,
+ 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
+ 49, 50, 51, 52, 53, 54, 55, 58, 59, 60,
+ 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
+ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
+ 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
+ 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
+ 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
+ 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
+ 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
+ 131, 132, 133, 134, 135, 136, 137, 138, 139
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+ YYRHS. */
+static const yytype_uint16 yyprhs[] =
+{
+ 0, 0, 3, 6, 9, 12, 15, 18, 20, 21,
+ 26, 27, 30, 34, 35, 38, 43, 45, 47, 50,
+ 52, 57, 62, 66, 69, 74, 78, 83, 88, 93,
+ 98, 103, 106, 109, 112, 117, 122, 125, 128, 131,
+ 134, 135, 141, 144, 145, 149, 152, 153, 155, 159,
+ 161, 165, 166, 168, 172, 173, 176, 178, 181, 185,
+ 186, 189, 192, 193, 195, 197, 199, 201, 203, 205,
+ 207, 209, 211, 213, 218, 223, 228, 233, 242, 247,
+ 249, 251, 256, 257, 263, 268, 269, 275, 280, 285,
+ 289, 293, 300, 302, 306, 309, 311, 315, 318, 319,
+ 325, 326, 334, 335, 342, 347, 350, 353, 354, 359,
+ 362, 363, 371, 373, 375, 377, 379, 385, 390, 395,
+ 403, 411, 419, 427, 436, 439, 441, 445, 447, 449,
+ 453, 458, 460, 461, 467, 470, 472, 474, 476, 481,
+ 483, 488, 493, 494, 503, 504, 510, 513, 515, 516,
+ 518, 520, 522, 524, 526, 528, 530, 533, 534, 536,
+ 538, 540, 542, 544, 546, 548, 550, 552, 554, 558,
+ 562, 569, 576, 578, 579, 584, 586, 587, 591, 593,
+ 594, 602, 603, 609, 613, 617, 618, 622, 624, 627,
+ 629, 632, 637, 642, 646, 650, 652, 657, 661, 662,
+ 664, 666, 667, 670, 674, 675, 678, 681, 685, 690,
+ 693, 696, 699, 703, 707, 711, 715, 719, 723, 727,
+ 731, 735, 739, 743, 747, 751, 755, 759, 763, 769,
+ 773, 777, 782, 784, 786, 791, 796, 801, 806, 811,
+ 816, 821, 828, 835, 842, 847, 854, 859, 861, 868,
+ 875, 882, 887, 892, 896, 897, 902, 903, 908, 909,
+ 914, 915, 917, 919, 921, 922, 923, 924, 925, 926,
+ 927, 947, 948, 949, 950, 951, 952, 971, 972, 973,
+ 981, 982, 988, 990, 992, 994, 996, 998, 1002, 1003,
+ 1006, 1010, 1013, 1020, 1031, 1034, 1036, 1037, 1039, 1042,
+ 1043, 1044, 1048, 1049, 1050, 1051, 1052, 1064, 1069, 1070,
+ 1073, 1074, 1075, 1082, 1084, 1085, 1089, 1095, 1096, 1100,
+ 1101, 1104, 1106, 1109, 1114, 1117, 1118, 1121, 1122, 1128,
+ 1130, 1133, 1138, 1144, 1151, 1153, 1156, 1157, 1160, 1165,
+ 1170, 1179, 1181, 1183, 1187, 1191, 1192, 1202, 1203, 1211,
+ 1213, 1217, 1219, 1223, 1225, 1229, 1230
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const yytype_int16 yyrhs[] =
+{
+ 148, 0, -1, 121, 164, -1, 122, 152, -1, 132,
+ 261, -1, 139, 256, -1, 123, 150, -1, 4, -1,
+ -1, 151, 4, 6, 217, -1, -1, 153, 154, -1,
+ 154, 155, 109, -1, -1, 104, 217, -1, 104, 217,
+ 140, 217, -1, 4, -1, 105, -1, 111, 157, -1,
+ 110, -1, 115, 4, 6, 217, -1, 115, 4, 140,
+ 217, -1, 115, 4, 217, -1, 114, 4, -1, 106,
+ 4, 140, 217, -1, 106, 4, 217, -1, 106, 4,
+ 6, 217, -1, 38, 4, 6, 217, -1, 38, 4,
+ 140, 217, -1, 98, 4, 6, 217, -1, 98, 4,
+ 140, 217, -1, 107, 159, -1, 108, 158, -1, 112,
+ 4, -1, 118, 4, 140, 4, -1, 118, 4, 140,
+ 3, -1, 117, 217, -1, 119, 3, -1, 124, 160,
+ -1, 125, 161, -1, -1, 64, 149, 156, 154, 36,
+ -1, 126, 4, -1, -1, 157, 140, 4, -1, 157,
+ 4, -1, -1, 4, -1, 158, 140, 4, -1, 4,
+ -1, 159, 140, 4, -1, -1, 4, -1, 160, 140,
+ 4, -1, -1, 162, 163, -1, 4, -1, 163, 4,
+ -1, 163, 140, 4, -1, -1, 165, 166, -1, 166,
+ 167, -1, -1, 197, -1, 174, -1, 248, -1, 208,
+ -1, 209, -1, 211, -1, 213, -1, 176, -1, 263,
+ -1, 141, -1, 73, 37, 4, 142, -1, 74, 37,
+ 149, 142, -1, 96, 37, 149, 142, -1, 59, 37,
+ 4, 142, -1, 59, 37, 4, 140, 4, 140, 4,
+ 142, -1, 61, 37, 4, 142, -1, 60, -1, 62,
+ -1, 94, 37, 170, 142, -1, -1, 95, 168, 37,
+ 170, 142, -1, 75, 37, 149, 142, -1, -1, 64,
+ 149, 169, 166, 36, -1, 89, 37, 214, 142, -1,
+ 125, 37, 161, 142, -1, 48, 49, 4, -1, 48,
+ 50, 4, -1, 66, 37, 4, 140, 4, 142, -1,
+ 4, -1, 170, 140, 4, -1, 170, 4, -1, 5,
+ -1, 170, 140, 5, -1, 170, 5, -1, -1, 103,
+ 37, 171, 170, 142, -1, -1, 170, 140, 103, 37,
+ 172, 170, 142, -1, -1, 170, 103, 37, 173, 170,
+ 142, -1, 46, 56, 175, 57, -1, 175, 223, -1,
+ 175, 176, -1, -1, 76, 37, 4, 142, -1, 195,
+ 194, -1, -1, 113, 177, 37, 217, 140, 4, 142,
+ -1, 4, -1, 32, -1, 15, -1, 178, -1, 137,
+ 37, 180, 142, 178, -1, 54, 37, 178, 142, -1,
+ 55, 37, 178, 142, -1, 54, 37, 55, 37, 178,
+ 142, 142, -1, 54, 37, 54, 37, 178, 142, 142,
+ -1, 55, 37, 54, 37, 178, 142, 142, -1, 55,
+ 37, 55, 37, 178, 142, 142, -1, 54, 37, 137,
+ 37, 180, 142, 178, 142, -1, 180, 178, -1, 178,
+ -1, 181, 196, 179, -1, 179, -1, 4, -1, 143,
+ 181, 144, -1, 179, 37, 181, 142, -1, 182, -1,
+ -1, 133, 37, 184, 182, 142, -1, 195, 194, -1,
+ 93, -1, 141, -1, 97, -1, 54, 37, 97, 142,
+ -1, 183, -1, 190, 37, 215, 142, -1, 91, 37,
+ 191, 142, -1, -1, 113, 186, 37, 217, 140, 4,
+ 142, 194, -1, -1, 64, 149, 187, 189, 36, -1,
+ 188, 185, -1, 185, -1, -1, 188, -1, 41, -1,
+ 42, -1, 43, -1, 44, -1, 45, -1, 215, -1,
+ 6, 191, -1, -1, 14, -1, 13, -1, 12, -1,
+ 11, -1, 10, -1, 9, -1, 8, -1, 7, -1,
+ 141, -1, 140, -1, 4, 6, 215, -1, 4, 193,
+ 215, -1, 101, 37, 4, 6, 215, 142, -1, 102,
+ 37, 4, 6, 215, 142, -1, 140, -1, -1, 65,
+ 56, 198, 57, -1, 199, -1, -1, 199, 196, 200,
+ -1, 200, -1, -1, 4, 201, 205, 16, 203, 196,
+ 204, -1, -1, 64, 149, 202, 198, 36, -1, 90,
+ 6, 215, -1, 92, 6, 215, -1, -1, 37, 206,
+ 142, -1, 207, -1, 206, 207, -1, 4, -1, 145,
+ 4, -1, 84, 37, 149, 142, -1, 85, 37, 210,
+ 142, -1, 85, 37, 142, -1, 210, 196, 149, -1,
+ 149, -1, 86, 37, 212, 142, -1, 212, 196, 149,
+ -1, -1, 87, -1, 88, -1, -1, 4, 214, -1,
+ 4, 140, 214, -1, -1, 216, 217, -1, 31, 217,
+ -1, 37, 217, 142, -1, 77, 37, 217, 142, -1,
+ 145, 217, -1, 30, 217, -1, 146, 217, -1, 217,
+ 32, 217, -1, 217, 33, 217, -1, 217, 34, 217,
+ -1, 217, 30, 217, -1, 217, 31, 217, -1, 217,
+ 29, 217, -1, 217, 28, 217, -1, 217, 23, 217,
+ -1, 217, 22, 217, -1, 217, 27, 217, -1, 217,
+ 26, 217, -1, 217, 24, 217, -1, 217, 25, 217,
+ -1, 217, 21, 217, -1, 217, 20, 217, -1, 217,
+ 19, 217, -1, 217, 15, 217, 16, 217, -1, 217,
+ 18, 217, -1, 217, 17, 217, -1, 72, 37, 4,
+ 142, -1, 3, -1, 58, -1, 79, 37, 4, 142,
+ -1, 78, 37, 4, 142, -1, 80, 37, 4, 142,
+ -1, 81, 37, 4, 142, -1, 138, 37, 4, 142,
+ -1, 107, 37, 217, 142, -1, 38, 37, 217, 142,
+ -1, 38, 37, 217, 140, 217, 142, -1, 51, 37,
+ 217, 140, 217, 142, -1, 52, 37, 217, 140, 217,
+ 142, -1, 53, 37, 217, 142, -1, 63, 37, 4,
+ 140, 217, 142, -1, 39, 37, 217, 142, -1, 4,
+ -1, 82, 37, 217, 140, 217, 142, -1, 83, 37,
+ 217, 140, 217, 142, -1, 113, 37, 217, 140, 4,
+ 142, -1, 90, 37, 4, 142, -1, 92, 37, 4,
+ 142, -1, 99, 25, 4, -1, -1, 99, 37, 217,
+ 142, -1, -1, 38, 37, 217, 142, -1, -1, 100,
+ 37, 217, 142, -1, -1, 134, -1, 135, -1, 136,
+ -1, -1, -1, -1, -1, -1, -1, 4, 224, 239,
+ 219, 220, 221, 225, 222, 56, 226, 189, 57, 227,
+ 242, 218, 243, 192, 228, 196, -1, -1, -1, -1,
+ -1, -1, 71, 229, 240, 241, 219, 221, 230, 56,
+ 231, 244, 57, 232, 242, 218, 243, 192, 233, 196,
+ -1, -1, -1, 95, 234, 239, 235, 56, 175, 57,
+ -1, -1, 64, 149, 236, 175, 36, -1, 67, -1,
+ 68, -1, 69, -1, 70, -1, 71, -1, 37, 237,
+ 142, -1, -1, 37, 142, -1, 217, 238, 16, -1,
+ 238, 16, -1, 40, 37, 217, 142, 238, 16, -1,
+ 40, 37, 217, 142, 39, 37, 217, 142, 238, 16,
+ -1, 217, 16, -1, 16, -1, -1, 89, -1, 25,
+ 4, -1, -1, -1, 243, 16, 4, -1, -1, -1,
+ -1, -1, 244, 4, 245, 56, 189, 57, 246, 243,
+ 192, 247, 196, -1, 47, 56, 249, 57, -1, -1,
+ 249, 250, -1, -1, -1, 4, 251, 253, 254, 252,
+ 141, -1, 217, -1, -1, 4, 255, 254, -1, 99,
+ 37, 217, 142, 254, -1, -1, 37, 217, 142, -1,
+ -1, 257, 258, -1, 259, -1, 258, 259, -1, 56,
+ 260, 57, 141, -1, 269, 141, -1, -1, 262, 265,
+ -1, -1, 264, 131, 56, 265, 57, -1, 266, -1,
+ 265, 266, -1, 56, 268, 57, 141, -1, 127, 56,
+ 268, 57, 141, -1, 127, 56, 268, 57, 267, 141,
+ -1, 127, -1, 267, 127, -1, -1, 269, 141, -1,
+ 129, 16, 269, 141, -1, 130, 16, 269, 141, -1,
+ 129, 16, 269, 141, 130, 16, 269, 141, -1, 128,
+ -1, 4, -1, 269, 141, 128, -1, 269, 141, 4,
+ -1, -1, 269, 141, 125, 4, 56, 270, 269, 272,
+ 57, -1, -1, 125, 4, 56, 271, 269, 272, 57,
+ -1, 129, -1, 269, 141, 129, -1, 130, -1, 269,
+ 141, 130, -1, 125, -1, 269, 141, 125, -1, -1,
+ 141, -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+static const yytype_uint16 yyrline[] =
+{
+ 0, 162, 162, 163, 164, 165, 166, 170, 174, 174,
+ 184, 184, 197, 198, 202, 203, 204, 207, 210, 211,
+ 212, 214, 216, 218, 220, 222, 224, 226, 228, 230,
+ 232, 234, 235, 236, 238, 240, 242, 244, 246, 247,
+ 249, 248, 252, 254, 258, 259, 260, 264, 266, 270,
+ 272, 277, 278, 279, 284, 284, 289, 291, 293, 298,
+ 298, 304, 305, 310, 311, 312, 313, 314, 315, 316,
+ 317, 318, 319, 320, 322, 324, 326, 329, 331, 333,
+ 335, 337, 339, 338, 342, 345, 344, 348, 352, 353,
+ 355, 357, 362, 365, 368, 371, 374, 377, 381, 380,
+ 385, 384, 389, 388, 395, 399, 400, 401, 405, 407,
+ 408, 408, 416, 420, 424, 431, 437, 443, 449, 455,
+ 461, 467, 473, 479, 488, 497, 508, 517, 528, 536,
+ 540, 547, 549, 548, 555, 556, 560, 561, 566, 571,
+ 572, 577, 581, 581, 585, 584, 591, 592, 595, 597,
+ 601, 603, 605, 607, 609, 614, 621, 623, 627, 629,
+ 631, 633, 635, 637, 639, 641, 646, 646, 651, 655,
+ 663, 667, 675, 675, 679, 682, 682, 685, 686, 691,
+ 690, 696, 695, 702, 710, 718, 719, 723, 724, 728,
+ 730, 735, 740, 741, 746, 748, 754, 756, 758, 762,
+ 764, 770, 773, 782, 793, 793, 799, 801, 803, 805,
+ 807, 809, 812, 814, 816, 818, 820, 822, 824, 826,
+ 828, 830, 832, 834, 836, 838, 840, 842, 844, 846,
+ 848, 850, 852, 854, 857, 859, 861, 863, 865, 867,
+ 869, 871, 873, 875, 877, 879, 888, 890, 892, 894,
+ 896, 898, 900, 906, 907, 911, 912, 916, 917, 921,
+ 922, 926, 927, 928, 929, 932, 936, 939, 945, 947,
+ 932, 954, 956, 958, 963, 965, 953, 975, 977, 975,
+ 983, 982, 989, 990, 991, 992, 993, 997, 998, 999,
+ 1003, 1004, 1009, 1010, 1015, 1016, 1021, 1022, 1027, 1029,
+ 1034, 1037, 1050, 1054, 1059, 1061, 1052, 1069, 1072, 1074,
+ 1078, 1079, 1078, 1088, 1133, 1136, 1148, 1157, 1160, 1167,
+ 1167, 1179, 1180, 1184, 1188, 1197, 1197, 1211, 1211, 1221,
+ 1222, 1226, 1230, 1234, 1241, 1245, 1253, 1256, 1260, 1264,
+ 1268, 1275, 1279, 1283, 1287, 1292, 1291, 1305, 1304, 1314,
+ 1318, 1322, 1326, 1330, 1334, 1340, 1342
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+ First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+static const char *const yytname[] =
+{
+ "$end", "error", "$undefined", "INT", "NAME", "LNAME", "'='", "OREQ",
+ "ANDEQ", "RSHIFTEQ", "LSHIFTEQ", "DIVEQ", "MULTEQ", "MINUSEQ", "PLUSEQ",
+ "'?'", "':'", "OROR", "ANDAND", "'|'", "'^'", "'&'", "NE", "EQ", "'<'",
+ "'>'", "GE", "LE", "RSHIFT", "LSHIFT", "'+'", "'-'", "'*'", "'/'", "'%'",
+ "UNARY", "END", "'('", "ALIGN_K", "BLOCK", "BIND", "QUAD", "SQUAD",
+ "LONG", "SHORT", "BYTE", "SECTIONS", "PHDRS", "INSERT_K", "AFTER",
+ "BEFORE", "DATA_SEGMENT_ALIGN", "DATA_SEGMENT_RELRO_END",
+ "DATA_SEGMENT_END", "SORT_BY_NAME", "SORT_BY_ALIGNMENT", "'{'", "'}'",
+ "SIZEOF_HEADERS", "OUTPUT_FORMAT", "FORCE_COMMON_ALLOCATION",
+ "OUTPUT_ARCH", "INHIBIT_COMMON_ALLOCATION", "SEGMENT_START", "INCLUDE",
+ "MEMORY", "REGION_ALIAS", "NOLOAD", "DSECT", "COPY", "INFO", "OVERLAY",
+ "DEFINED", "TARGET_K", "SEARCH_DIR", "MAP", "ENTRY", "NEXT", "SIZEOF",
+ "ALIGNOF", "ADDR", "LOADADDR", "MAX_K", "MIN_K", "STARTUP", "HLL",
+ "SYSLIB", "FLOAT", "NOFLOAT", "NOCROSSREFS", "ORIGIN", "FILL", "LENGTH",
+ "CREATE_OBJECT_SYMBOLS", "INPUT", "GROUP", "OUTPUT", "CONSTRUCTORS",
+ "ALIGNMOD", "AT", "SUBALIGN", "PROVIDE", "PROVIDE_HIDDEN", "AS_NEEDED",
+ "CHIP", "LIST", "SECT", "ABSOLUTE", "LOAD", "NEWLINE", "ENDWORD",
+ "ORDER", "NAMEWORD", "ASSERT_K", "FORMAT", "PUBLIC", "DEFSYMEND", "BASE",
+ "ALIAS", "TRUNCATE", "REL", "INPUT_SCRIPT", "INPUT_MRI_SCRIPT",
+ "INPUT_DEFSYM", "CASE", "EXTERN", "START", "VERS_TAG", "VERS_IDENTIFIER",
+ "GLOBAL", "LOCAL", "VERSIONK", "INPUT_VERSION_SCRIPT", "KEEP",
+ "ONLY_IF_RO", "ONLY_IF_RW", "SPECIAL", "EXCLUDE_FILE", "CONSTANT",
+ "INPUT_DYNAMIC_LIST", "','", "';'", "')'", "'['", "']'", "'!'", "'~'",
+ "$accept", "file", "filename", "defsym_expr", "@1", "mri_script_file",
+ "@2", "mri_script_lines", "mri_script_command", "@3", "ordernamelist",
+ "mri_load_name_list", "mri_abs_name_list", "casesymlist",
+ "extern_name_list", "@4", "extern_name_list_body", "script_file", "@5",
+ "ifile_list", "ifile_p1", "@6", "@7", "input_list", "@8", "@9", "@10",
+ "sections", "sec_or_group_p1", "statement_anywhere", "@11",
+ "wildcard_name", "wildcard_spec", "exclude_name_list", "file_NAME_list",
+ "input_section_spec_no_keep", "input_section_spec", "@12", "statement",
+ "@13", "@14", "statement_list", "statement_list_opt", "length",
+ "fill_exp", "fill_opt", "assign_op", "end", "assignment", "opt_comma",
+ "memory", "memory_spec_list_opt", "memory_spec_list", "memory_spec",
+ "@15", "@16", "origin_spec", "length_spec", "attributes_opt",
+ "attributes_list", "attributes_string", "startup", "high_level_library",
+ "high_level_library_NAME_list", "low_level_library",
+ "low_level_library_NAME_list", "floating_point_support",
+ "nocrossref_list", "mustbe_exp", "@17", "exp", "memspec_at_opt",
+ "opt_at", "opt_align", "opt_subalign", "sect_constraint", "section",
+ "@18", "@19", "@20", "@21", "@22", "@23", "@24", "@25", "@26", "@27",
+ "@28", "@29", "@30", "type", "atype", "opt_exp_with_type",
+ "opt_exp_without_type", "opt_nocrossrefs", "memspec_opt", "phdr_opt",
+ "overlay_section", "@31", "@32", "@33", "phdrs", "phdr_list", "phdr",
+ "@34", "@35", "phdr_type", "phdr_qualifiers", "phdr_val",
+ "dynamic_list_file", "@36", "dynamic_list_nodes", "dynamic_list_node",
+ "dynamic_list_tag", "version_script_file", "@37", "version", "@38",
+ "vers_nodes", "vers_node", "verdep", "vers_tag", "vers_defns", "@39",
+ "@40", "opt_semicolon", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+ token YYLEX-NUM. */
+static const yytype_uint16 yytoknum[] =
+{
+ 0, 256, 257, 258, 259, 260, 61, 261, 262, 263,
+ 264, 265, 266, 267, 268, 63, 58, 269, 270, 124,
+ 94, 38, 271, 272, 60, 62, 273, 274, 275, 276,
+ 43, 45, 42, 47, 37, 277, 278, 40, 279, 280,
+ 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
+ 291, 292, 293, 294, 295, 296, 123, 125, 297, 298,
+ 299, 300, 301, 302, 303, 304, 305, 306, 307, 308,
+ 309, 310, 311, 312, 313, 314, 315, 316, 317, 318,
+ 319, 320, 321, 322, 323, 324, 325, 326, 327, 328,
+ 329, 330, 331, 332, 333, 334, 335, 336, 337, 338,
+ 339, 340, 341, 342, 343, 344, 345, 346, 347, 348,
+ 349, 350, 351, 352, 353, 354, 355, 356, 357, 358,
+ 359, 360, 361, 362, 363, 364, 365, 366, 367, 368,
+ 369, 370, 371, 372, 373, 374, 375, 376, 377, 378,
+ 44, 59, 41, 91, 93, 33, 126
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const yytype_uint16 yyr1[] =
+{
+ 0, 147, 148, 148, 148, 148, 148, 149, 151, 150,
+ 153, 152, 154, 154, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 156, 155, 155, 155, 157, 157, 157, 158, 158, 159,
+ 159, 160, 160, 160, 162, 161, 163, 163, 163, 165,
+ 164, 166, 166, 167, 167, 167, 167, 167, 167, 167,
+ 167, 167, 167, 167, 167, 167, 167, 167, 167, 167,
+ 167, 167, 168, 167, 167, 169, 167, 167, 167, 167,
+ 167, 167, 170, 170, 170, 170, 170, 170, 171, 170,
+ 172, 170, 173, 170, 174, 175, 175, 175, 176, 176,
+ 177, 176, 178, 178, 178, 179, 179, 179, 179, 179,
+ 179, 179, 179, 179, 180, 180, 181, 181, 182, 182,
+ 182, 183, 184, 183, 185, 185, 185, 185, 185, 185,
+ 185, 185, 186, 185, 187, 185, 188, 188, 189, 189,
+ 190, 190, 190, 190, 190, 191, 192, 192, 193, 193,
+ 193, 193, 193, 193, 193, 193, 194, 194, 195, 195,
+ 195, 195, 196, 196, 197, 198, 198, 199, 199, 201,
+ 200, 202, 200, 203, 204, 205, 205, 206, 206, 207,
+ 207, 208, 209, 209, 210, 210, 211, 212, 212, 213,
+ 213, 214, 214, 214, 216, 215, 217, 217, 217, 217,
+ 217, 217, 217, 217, 217, 217, 217, 217, 217, 217,
+ 217, 217, 217, 217, 217, 217, 217, 217, 217, 217,
+ 217, 217, 217, 217, 217, 217, 217, 217, 217, 217,
+ 217, 217, 217, 217, 217, 217, 217, 217, 217, 217,
+ 217, 217, 217, 218, 218, 219, 219, 220, 220, 221,
+ 221, 222, 222, 222, 222, 224, 225, 226, 227, 228,
+ 223, 229, 230, 231, 232, 233, 223, 234, 235, 223,
+ 236, 223, 237, 237, 237, 237, 237, 238, 238, 238,
+ 239, 239, 239, 239, 240, 240, 241, 241, 242, 242,
+ 243, 243, 244, 245, 246, 247, 244, 248, 249, 249,
+ 251, 252, 250, 253, 254, 254, 254, 255, 255, 257,
+ 256, 258, 258, 259, 260, 262, 261, 264, 263, 265,
+ 265, 266, 266, 266, 267, 267, 268, 268, 268, 268,
+ 268, 269, 269, 269, 269, 270, 269, 271, 269, 269,
+ 269, 269, 269, 269, 269, 272, 272
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const yytype_uint8 yyr2[] =
+{
+ 0, 2, 2, 2, 2, 2, 2, 1, 0, 4,
+ 0, 2, 3, 0, 2, 4, 1, 1, 2, 1,
+ 4, 4, 3, 2, 4, 3, 4, 4, 4, 4,
+ 4, 2, 2, 2, 4, 4, 2, 2, 2, 2,
+ 0, 5, 2, 0, 3, 2, 0, 1, 3, 1,
+ 3, 0, 1, 3, 0, 2, 1, 2, 3, 0,
+ 2, 2, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 4, 4, 4, 4, 8, 4, 1,
+ 1, 4, 0, 5, 4, 0, 5, 4, 4, 3,
+ 3, 6, 1, 3, 2, 1, 3, 2, 0, 5,
+ 0, 7, 0, 6, 4, 2, 2, 0, 4, 2,
+ 0, 7, 1, 1, 1, 1, 5, 4, 4, 7,
+ 7, 7, 7, 8, 2, 1, 3, 1, 1, 3,
+ 4, 1, 0, 5, 2, 1, 1, 1, 4, 1,
+ 4, 4, 0, 8, 0, 5, 2, 1, 0, 1,
+ 1, 1, 1, 1, 1, 1, 2, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 3, 3,
+ 6, 6, 1, 0, 4, 1, 0, 3, 1, 0,
+ 7, 0, 5, 3, 3, 0, 3, 1, 2, 1,
+ 2, 4, 4, 3, 3, 1, 4, 3, 0, 1,
+ 1, 0, 2, 3, 0, 2, 2, 3, 4, 2,
+ 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 5, 3,
+ 3, 4, 1, 1, 4, 4, 4, 4, 4, 4,
+ 4, 6, 6, 6, 4, 6, 4, 1, 6, 6,
+ 6, 4, 4, 3, 0, 4, 0, 4, 0, 4,
+ 0, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 19, 0, 0, 0, 0, 0, 18, 0, 0, 7,
+ 0, 5, 1, 1, 1, 1, 1, 3, 0, 2,
+ 3, 2, 6, 10, 2, 1, 0, 1, 2, 0,
+ 0, 3, 0, 0, 0, 0, 11, 4, 0, 2,
+ 0, 0, 6, 1, 0, 3, 5, 0, 3, 0,
+ 2, 1, 2, 4, 2, 0, 2, 0, 5, 1,
+ 2, 4, 5, 6, 1, 2, 0, 2, 4, 4,
+ 8, 1, 1, 3, 3, 0, 9, 0, 7, 1,
+ 3, 1, 3, 1, 3, 0, 1
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+ STATE-NUM when YYTABLE doesn't specify something else to do. Zero
+ means the default is an error. */
+static const yytype_uint16 yydefact[] =
+{
+ 0, 59, 10, 8, 325, 319, 0, 2, 62, 3,
+ 13, 6, 0, 4, 0, 5, 0, 1, 60, 11,
+ 0, 336, 0, 326, 329, 0, 320, 321, 0, 0,
+ 0, 0, 0, 79, 0, 80, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 199, 200, 0, 0,
+ 82, 0, 0, 0, 110, 0, 72, 61, 64, 70,
+ 0, 63, 66, 67, 68, 69, 65, 71, 0, 16,
+ 0, 0, 0, 0, 17, 0, 0, 0, 19, 46,
+ 0, 0, 0, 0, 0, 0, 51, 54, 0, 0,
+ 0, 342, 353, 341, 349, 351, 0, 0, 336, 330,
+ 349, 351, 0, 0, 322, 204, 165, 164, 163, 162,
+ 161, 160, 159, 158, 204, 107, 308, 0, 0, 0,
+ 0, 7, 85, 176, 0, 0, 0, 0, 0, 0,
+ 0, 198, 201, 0, 0, 0, 0, 0, 0, 54,
+ 167, 166, 109, 0, 0, 40, 0, 232, 247, 0,
+ 0, 0, 0, 0, 0, 0, 0, 233, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 14, 0, 49, 31, 47, 32,
+ 18, 33, 23, 0, 36, 0, 37, 52, 38, 39,
+ 0, 42, 12, 9, 0, 0, 0, 0, 337, 0,
+ 0, 324, 168, 0, 169, 0, 0, 89, 90, 0,
+ 0, 62, 179, 0, 0, 173, 178, 0, 0, 0,
+ 0, 0, 0, 193, 195, 173, 173, 201, 0, 92,
+ 95, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 13, 0, 0, 210, 206, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 209, 211, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 25, 0, 0, 45, 0, 0, 0, 22, 0,
+ 0, 56, 55, 347, 0, 0, 331, 344, 354, 343,
+ 350, 352, 0, 323, 205, 265, 104, 0, 271, 277,
+ 106, 105, 310, 307, 309, 0, 76, 78, 327, 185,
+ 181, 174, 172, 0, 0, 73, 74, 84, 108, 191,
+ 192, 0, 196, 0, 201, 202, 87, 98, 94, 97,
+ 0, 0, 81, 0, 75, 204, 204, 0, 88, 0,
+ 27, 28, 43, 29, 30, 207, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 230, 229, 227, 226,
+ 225, 220, 219, 223, 224, 222, 221, 218, 217, 215,
+ 216, 212, 213, 214, 15, 26, 24, 50, 48, 44,
+ 20, 21, 35, 34, 53, 57, 0, 0, 338, 339,
+ 0, 334, 332, 0, 288, 280, 0, 288, 0, 0,
+ 86, 0, 0, 176, 177, 0, 194, 197, 203, 0,
+ 102, 93, 96, 0, 83, 0, 0, 0, 328, 41,
+ 0, 240, 246, 0, 0, 244, 0, 231, 208, 235,
+ 234, 236, 237, 0, 0, 251, 252, 239, 0, 238,
+ 0, 58, 355, 352, 345, 335, 333, 0, 0, 288,
+ 0, 256, 107, 295, 0, 296, 278, 313, 314, 0,
+ 189, 0, 0, 187, 0, 0, 91, 0, 0, 100,
+ 170, 171, 0, 0, 0, 0, 0, 0, 0, 0,
+ 228, 356, 0, 0, 0, 282, 283, 284, 285, 286,
+ 289, 0, 0, 0, 0, 291, 0, 258, 0, 294,
+ 297, 256, 0, 317, 0, 311, 0, 190, 186, 188,
+ 0, 173, 182, 99, 0, 0, 111, 241, 242, 243,
+ 245, 248, 249, 250, 348, 0, 355, 287, 0, 290,
+ 0, 0, 260, 281, 260, 107, 0, 314, 0, 0,
+ 77, 204, 0, 103, 0, 340, 0, 288, 0, 0,
+ 0, 266, 272, 0, 0, 315, 0, 312, 183, 0,
+ 180, 101, 346, 0, 0, 255, 0, 0, 264, 0,
+ 279, 318, 314, 204, 0, 292, 257, 0, 261, 262,
+ 263, 0, 273, 316, 184, 0, 259, 267, 302, 288,
+ 148, 0, 0, 128, 114, 113, 150, 151, 152, 153,
+ 154, 0, 0, 0, 0, 135, 137, 142, 0, 0,
+ 136, 0, 115, 0, 131, 139, 147, 149, 0, 0,
+ 0, 303, 274, 293, 0, 0, 144, 204, 0, 132,
+ 0, 112, 0, 127, 173, 0, 146, 268, 204, 134,
+ 0, 299, 0, 0, 0, 0, 0, 0, 0, 0,
+ 148, 0, 155, 0, 0, 125, 0, 0, 129, 0,
+ 173, 299, 0, 148, 0, 254, 0, 0, 138, 0,
+ 117, 0, 0, 118, 0, 141, 0, 112, 0, 0,
+ 124, 126, 130, 254, 140, 0, 298, 0, 300, 0,
+ 0, 0, 0, 0, 145, 0, 133, 116, 300, 304,
+ 0, 157, 0, 0, 0, 0, 0, 0, 157, 300,
+ 253, 204, 0, 275, 120, 119, 0, 121, 122, 0,
+ 269, 157, 156, 301, 173, 123, 143, 173, 305, 276,
+ 270, 173, 306
+};
+
+/* YYDEFGOTO[NTERM-NUM]. */
+static const yytype_int16 yydefgoto[] =
+{
+ -1, 6, 122, 11, 12, 9, 10, 19, 89, 242,
+ 180, 179, 177, 188, 189, 190, 302, 7, 8, 18,
+ 57, 134, 211, 232, 439, 545, 498, 58, 205, 320,
+ 138, 642, 643, 686, 664, 644, 645, 684, 646, 658,
+ 680, 647, 648, 649, 681, 743, 114, 142, 60, 689,
+ 61, 214, 215, 216, 329, 433, 541, 590, 432, 492,
+ 493, 62, 63, 225, 64, 226, 65, 228, 682, 203,
+ 247, 718, 527, 562, 581, 611, 321, 424, 598, 620,
+ 691, 757, 426, 599, 618, 671, 754, 427, 532, 482,
+ 521, 480, 481, 485, 531, 695, 731, 621, 670, 739,
+ 761, 66, 206, 324, 428, 569, 488, 535, 567, 15,
+ 16, 26, 27, 102, 13, 14, 67, 68, 23, 24,
+ 423, 96, 97, 514, 417, 512
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+#define YYPACT_NINF -621
+static const yytype_int16 yypact[] =
+{
+ 180, -621, -621, -621, -621, -621, 27, -621, -621, -621,
+ -621, -621, 38, -621, -21, -621, 23, -621, 824, 1581,
+ 111, 112, 75, -21, -621, 120, 23, -621, 623, 95,
+ 128, 170, 153, -621, 201, -621, 242, 195, 220, 223,
+ 226, 238, 245, 252, 280, 285, -621, -621, 286, 288,
+ -621, 290, 291, 299, -621, 315, -621, -621, -621, -621,
+ 129, -621, -621, -621, -621, -621, -621, -621, 206, -621,
+ 352, 242, 354, 680, -621, 355, 359, 360, -621, -621,
+ 361, 363, 366, 680, 367, 369, 372, -621, 374, 266,
+ 680, -621, 378, -621, 373, 376, 331, 253, 112, -621,
+ -621, -621, 338, 255, -621, -621, -621, -621, -621, -621,
+ -621, -621, -621, -621, -621, -621, -621, 402, 404, 405,
+ 406, -621, -621, 24, 409, 411, 242, 242, 412, 242,
+ 4, -621, 418, 20, 388, 242, 423, 424, 392, -621,
+ -621, -621, -621, 375, 33, -621, 41, -621, -621, 680,
+ 680, 680, 393, 399, 400, 401, 403, -621, 408, 413,
+ 414, 415, 417, 419, 420, 428, 429, 430, 432, 433,
+ 435, 438, 680, 680, 1400, 228, -621, 301, -621, 302,
+ 5, -621, -621, 381, 1756, 303, -621, -621, 307, -621,
+ 444, -621, -621, 1756, 421, 120, 120, 314, 217, 422,
+ 335, 217, -621, 680, -621, 322, 46, -621, -621, 10,
+ 336, -621, -621, 242, 425, -2, -621, 340, 341, 342,
+ 343, 347, 348, -621, -621, 87, 114, 22, 349, -621,
+ -621, 455, 32, 20, 356, 490, 491, 680, 357, -21,
+ 680, 680, -621, 680, 680, -621, -621, 833, 680, 680,
+ 680, 680, 680, 497, 498, 680, 503, 504, 505, 506,
+ 680, 680, 509, 510, 680, 680, 511, -621, -621, 680,
+ 680, 680, 680, 680, 680, 680, 680, 680, 680, 680,
+ 680, 680, 680, 680, 680, 680, 680, 680, 680, 680,
+ 680, 1756, 512, 513, -621, 514, 680, 680, 1756, 310,
+ 516, -621, 25, -621, 384, 387, -621, -621, 518, -621,
+ -621, -621, -12, -621, 1756, 623, -621, 242, -621, -621,
+ -621, -621, -621, -621, -621, 525, -621, -621, 897, 493,
+ -621, -621, -621, 24, 528, -621, -621, -621, -621, -621,
+ -621, 242, -621, 242, 418, -621, -621, -621, -621, -621,
+ 496, 39, -621, 86, -621, -621, -621, 1420, -621, 6,
+ 1756, 1756, 691, 1756, 1756, -621, 1022, 1042, 1440, 1460,
+ 1062, 394, 395, 1082, 396, 426, 427, 436, 1480, 1500,
+ 437, 440, 1102, 1524, 441, 1716, 1773, 1789, 1804, 1002,
+ 1643, 987, 987, 371, 371, 371, 371, 300, 300, 37,
+ 37, -621, -621, -621, 1756, 1756, 1756, -621, -621, -621,
+ 1756, 1756, -621, -621, -621, -621, 531, 120, 232, 217,
+ 480, -621, -621, -7, 536, -621, 608, 536, 680, 407,
+ -621, 3, 527, 24, -621, 442, -621, -621, -621, 20,
+ -621, -621, -621, 507, -621, 443, 448, 537, -621, -621,
+ 680, -621, -621, 680, 680, -621, 680, -621, -621, -621,
+ -621, -621, -621, 680, 680, -621, -621, -621, 542, -621,
+ 680, -621, 431, 532, -621, -621, -621, 15, 522, 1693,
+ 545, 461, -621, -621, 1736, 473, -621, 1756, 19, 560,
+ -621, 566, 2, -621, 481, 541, -621, 122, 20, -621,
+ -621, -621, 449, 1122, 1148, 1168, 1188, 1208, 1228, 450,
+ 1756, 217, 523, 120, 120, -621, -621, -621, -621, -621,
+ -621, 451, 680, 227, 570, -621, 558, 559, 410, -621,
+ -621, 461, 540, 561, 563, -621, 459, -621, -621, -621,
+ 596, 463, -621, -621, 132, 20, -621, -621, -621, -621,
+ -621, -621, -621, -621, -621, 465, 431, -621, 1248, -621,
+ 680, 567, 520, -621, 520, -621, 680, 19, 680, 466,
+ -621, -621, 517, -621, 136, 217, 564, 248, 1274, 680,
+ 585, -621, -621, 601, 1294, -621, 1314, -621, -621, 617,
+ -621, -621, -621, 588, 611, -621, 1334, 680, 214, 584,
+ -621, -621, 19, -621, 680, -621, -621, 1354, -621, -621,
+ -621, 586, -621, -621, -621, 1374, -621, -621, -621, 604,
+ 736, 47, 628, 544, -621, -621, -621, -621, -621, -621,
+ -621, 613, 614, 242, 615, -621, -621, -621, 616, 618,
+ -621, 284, -621, 619, -621, -621, -621, 736, 591, 620,
+ 129, -621, -621, -621, 57, 229, -621, -621, 625, -621,
+ 151, -621, 626, -621, -31, 284, -621, -621, -621, -621,
+ 598, 639, 630, 631, 533, 632, 534, 633, 636, 550,
+ 736, 551, -621, 680, 26, -621, 16, 289, -621, 284,
+ 150, 639, 552, 736, 674, 580, 151, 151, -621, 151,
+ -621, 151, 151, -621, 661, -621, 1544, 557, 562, 151,
+ -621, -621, -621, 580, -621, 644, -621, 681, -621, 565,
+ 571, 17, 574, 578, -621, 701, -621, -621, -621, -621,
+ 704, 58, 581, 582, 151, 583, 592, 593, 58, -621,
+ -621, -621, 705, -621, -621, -621, 594, -621, -621, 129,
+ -621, 58, -621, -621, 463, -621, -621, 463, -621, -621,
+ -621, 463, -621
+};
+
+/* YYPGOTO[NTERM-NUM]. */
+static const yytype_int16 yypgoto[] =
+{
+ -621, -621, -70, -621, -621, -621, -621, 470, -621, -621,
+ -621, -621, -621, -621, 587, -621, -621, -621, -621, 519,
+ -621, -621, -621, -221, -621, -621, -621, -621, -444, -13,
+ -621, 927, -540, 29, 72, 55, -621, -621, 94, -621,
+ -621, -621, -500, -621, 1, -508, -621, -617, -425, -212,
+ -621, 311, -621, 389, -621, -621, -621, -621, -621, -621,
+ 256, -621, -621, -621, -621, -621, -621, -205, -103, -621,
+ -73, 34, 218, -621, 181, -621, -621, -621, -621, -621,
+ -621, -621, -621, -621, -621, -621, -621, -621, -621, -621,
+ -621, -463, 323, -621, -621, 65, -620, -621, -621, -621,
+ -621, -621, -621, -621, -621, -621, -621, -527, -621, -621,
+ -621, -621, 738, -621, -621, -621, -621, -621, 526, -19,
+ -621, 668, -10, -621, -621, 211
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule which
+ number is the opposite. If zero, do what YYDEFACT says.
+ If YYTABLE_NINF, syntax error. */
+#define YYTABLE_NINF -328
+static const yytype_int16 yytable[] =
+{
+ 174, 145, 202, 333, 99, 59, 490, 490, 121, 294,
+ 184, 204, 353, 341, 343, 103, 524, 193, 147, 148,
+ 661, 661, 345, 533, 229, 230, 227, 17, 212, 415,
+ 707, 624, 624, 669, -175, 21, 348, 349, 528, 240,
+ 585, 624, 20, 441, 442, 149, 150, 243, 625, 625,
+ 322, 651, 151, 152, 153, -175, 219, 220, 625, 222,
+ 224, 661, 21, 448, 741, 234, 154, 155, 156, 285,
+ 286, 287, 624, 157, 742, 613, 245, 246, 158, 25,
+ 662, 632, 515, 516, 517, 518, 519, 159, 213, 625,
+ 348, 349, 160, 161, 162, 163, 164, 165, 166, 267,
+ 268, 663, 291, 323, 652, 167, 22, 168, 738, 332,
+ 298, 672, 673, 688, 594, 421, 91, 90, 534, 751,
+ 475, 583, 169, 231, 91, 663, 348, 349, 170, 422,
+ 314, 98, 756, 22, 476, 350, 348, 349, 332, 438,
+ 348, 349, 443, 330, 538, 295, 223, 491, 491, 711,
+ 325, 115, 326, 171, 674, 661, 622, 520, 709, 734,
+ 172, 173, 344, 639, 357, 416, 624, 360, 361, 641,
+ 363, 364, 351, 241, 352, 366, 367, 368, 369, 370,
+ 704, 244, 373, 625, 116, 304, 305, 378, 379, 350,
+ 119, 382, 383, 715, 675, 650, 385, 386, 387, 388,
+ 389, 390, 391, 392, 393, 394, 395, 396, 397, 398,
+ 399, 400, 401, 402, 403, 404, 405, 406, 497, 117,
+ 118, 307, 650, 410, 411, 350, 351, 332, 444, 340,
+ 750, 147, 148, 661, 289, 350, 307, 92, 120, 350,
+ 93, 94, 95, 758, 624, 92, 121, 425, 93, 100,
+ 101, 123, 445, 446, 332, 650, 342, 124, 149, 150,
+ 125, 625, 351, 126, 543, 151, 152, 153, 650, 140,
+ 141, 436, 351, 437, 573, 127, 351, 544, 591, 154,
+ 155, 156, 128, 677, 678, 523, 157, 593, 661, 129,
+ 332, 158, 712, 661, 515, 516, 517, 518, 519, 624,
+ 159, 1, 2, 3, 624, 160, 161, 162, 163, 164,
+ 165, 166, 4, 412, 413, 59, 625, 130, 167, 5,
+ 168, 625, 131, 132, 574, 133, 315, 135, 136, 572,
+ 283, 284, 285, 286, 287, 169, 137, 143, 662, 632,
+ 99, 170, 308, 672, 673, 309, 310, 311, 608, 609,
+ 610, 479, 139, 484, 479, 487, 144, 308, 146, 175,
+ 309, 310, 473, 176, 178, 181, 171, 182, 290, 520,
+ 183, 185, 186, 172, 173, 192, 187, 503, 191, 316,
+ 504, 505, 194, 506, 147, 148, 317, 296, 197, 195,
+ 507, 508, 196, 318, 198, 200, 201, 510, 42, 281,
+ 282, 283, 284, 285, 286, 287, 207, 472, 208, 209,
+ 210, 149, 150, 217, 315, 218, 221, 319, 151, 152,
+ 153, 639, 227, 52, 53, 233, 675, 235, 236, 237,
+ 248, 239, 154, 155, 156, 54, 249, 250, 251, 157,
+ 252, 292, 293, 299, 158, 253, 563, 300, 301, 558,
+ 254, 255, 256, 159, 257, 306, 258, 259, 160, 161,
+ 162, 163, 164, 165, 166, 260, 261, 262, 588, 263,
+ 264, 167, 265, 168, 317, 266, 313, 303, 327, 312,
+ 334, 318, 331, 335, 336, 337, 42, 578, 169, 338,
+ 339, 346, 347, 584, 170, 586, 355, 356, 354, 358,
+ 614, 371, 372, 555, 556, 319, 596, 374, 375, 376,
+ 377, 52, 53, 380, 381, 384, 407, 408, 409, 171,
+ 414, 297, 420, 54, 607, 418, 172, 173, 419, 429,
+ 431, 615, 435, 440, 456, 471, 474, 457, 459, 147,
+ 148, 502, 759, 494, 499, 760, 509, 489, 513, 762,
+ 105, 106, 107, 108, 109, 110, 111, 112, 113, 522,
+ 526, 525, 530, 656, 536, 692, 149, 150, 460, 461,
+ 537, 540, 511, 477, 152, 153, 478, 542, 462, 465,
+ 554, -112, 466, 469, 496, 500, 559, 154, 155, 156,
+ 501, 546, 553, 557, 157, 560, 565, 561, 566, 158,
+ 568, 570, 571, 332, 579, 315, 575, 587, 159, 589,
+ 706, 147, 148, 160, 161, 162, 163, 164, 165, 166,
+ 580, 592, 597, 603, 483, 604, 167, 605, 168, 105,
+ 106, 107, 108, 109, 110, 111, 112, 113, 149, 150,
+ 612, 523, 617, 169, 653, 151, 152, 153, 667, 170,
+ 654, 655, 657, 659, 693, 660, 665, 668, 600, 154,
+ 155, 156, 683, 687, 694, 317, 157, 696, 697, 699,
+ 701, 158, 318, 702, 171, 698, 700, 42, 716, 717,
+ 159, 172, 173, 147, 148, 160, 161, 162, 163, 164,
+ 165, 166, 703, 705, 714, 69, 319, 724, 167, -128,
+ 168, 729, 52, 53, 726, 737, 730, 732, 740, 753,
+ 149, 150, 362, 733, 54, 169, 735, 151, 152, 153,
+ 736, 170, 434, 744, 745, 747, 238, 449, 721, 70,
+ 328, 154, 155, 156, 748, 749, 755, 690, 157, 708,
+ 623, 666, 752, 158, 495, 582, 171, 728, 539, 564,
+ 486, 624, 159, 172, 173, 71, 713, 160, 161, 162,
+ 163, 164, 165, 166, 104, 359, 199, 576, 625, 0,
+ 167, 0, 168, 0, 0, 0, 0, 626, 627, 628,
+ 629, 630, 0, 0, 0, 0, 0, 169, 0, 72,
+ 631, 632, 0, 170, 0, 73, 74, 75, 76, 77,
+ 633, 78, 79, 80, 0, 81, 82, 0, 83, 84,
+ 85, 0, 0, 0, 0, 86, 87, 88, 171, 0,
+ 0, 0, 0, 0, 0, 172, 173, 634, 28, 635,
+ 0, 0, 0, 636, 0, 0, 0, 52, 53, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 269, 637,
+ 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
+ 280, 281, 282, 283, 284, 285, 286, 287, 0, 638,
+ 29, 30, 31, 639, 0, 0, 0, 640, 0, 641,
+ 0, 0, 0, 32, 33, 34, 35, 0, 36, 37,
+ 38, 0, 0, 0, 0, 0, 0, 39, 40, 41,
+ 42, 28, 0, 0, 0, 0, 0, 0, 43, 44,
+ 45, 46, 47, 48, 0, 0, 0, 0, 49, 50,
+ 51, 0, 0, 0, 0, 52, 53, 0, 0, 0,
+ 0, 0, 0, 430, 0, 0, 0, 54, 0, 0,
+ 0, 0, 0, 29, 30, 31, 0, 0, 0, 55,
+ 0, 0, 0, 0, 0, -327, 32, 33, 34, 35,
+ 0, 36, 37, 38, 0, 56, 0, 0, 0, 0,
+ 39, 40, 41, 42, 0, 365, 0, 0, 0, 0,
+ 0, 43, 44, 45, 46, 47, 48, 0, 0, 0,
+ 0, 49, 50, 51, 0, 0, 0, 0, 52, 53,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 54, 277, 278, 279, 280, 281, 282, 283, 284, 285,
+ 286, 287, 55, 274, 275, 276, 277, 278, 279, 280,
+ 281, 282, 283, 284, 285, 286, 287, 269, 56, 270,
+ 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
+ 281, 282, 283, 284, 285, 286, 287, 269, 0, 270,
+ 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
+ 281, 282, 283, 284, 285, 286, 287, 269, 0, 270,
+ 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
+ 281, 282, 283, 284, 285, 286, 287, 269, 0, 270,
+ 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
+ 281, 282, 283, 284, 285, 286, 287, 269, 0, 270,
+ 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
+ 281, 282, 283, 284, 285, 286, 287, 269, 0, 270,
+ 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
+ 281, 282, 283, 284, 285, 286, 287, 0, 0, 0,
+ 0, 0, 450, 269, 451, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 269, 452, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 269, 455, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 269, 458, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 269, 467, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 269, 547, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 0, 0, 0, 0, 0, 0, 269,
+ 548, 270, 271, 272, 273, 274, 275, 276, 277, 278,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287, 269,
+ 549, 270, 271, 272, 273, 274, 275, 276, 277, 278,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287, 269,
+ 550, 270, 271, 272, 273, 274, 275, 276, 277, 278,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287, 269,
+ 551, 270, 271, 272, 273, 274, 275, 276, 277, 278,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287, 269,
+ 552, 270, 271, 272, 273, 274, 275, 276, 277, 278,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287, 269,
+ 577, 270, 271, 272, 273, 274, 275, 276, 277, 278,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287, 0,
+ 0, 0, 0, 0, 0, 269, 595, 270, 271, 272,
+ 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
+ 283, 284, 285, 286, 287, 269, 601, 270, 271, 272,
+ 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
+ 283, 284, 285, 286, 287, 269, 602, 270, 271, 272,
+ 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
+ 283, 284, 285, 286, 287, 269, 606, 270, 271, 272,
+ 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
+ 283, 284, 285, 286, 287, 269, 616, 270, 271, 272,
+ 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
+ 283, 284, 285, 286, 287, 269, 619, 270, 271, 272,
+ 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
+ 283, 284, 285, 286, 287, 0, 0, 0, 0, 269,
+ 288, 270, 271, 272, 273, 274, 275, 276, 277, 278,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287, 269,
+ 447, 270, 271, 272, 273, 274, 275, 276, 277, 278,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287, 0,
+ 453, 676, 679, 0, 0, 69, 0, 685, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 454, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 710, 676, 0, 0, 0, 0, 70,
+ 463, 0, 0, 719, 720, 0, 685, 0, 722, 723,
+ 0, 0, 0, 0, 0, 0, 727, 0, 0, 0,
+ 464, 0, 0, 0, 0, 71, 0, 0, 710, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 746, 0, 0, 468, 275, 276, 277, 278, 279,
+ 280, 281, 282, 283, 284, 285, 286, 287, 0, 72,
+ 0, 0, 0, 0, 725, 73, 74, 75, 76, 77,
+ -43, 78, 79, 80, 0, 81, 82, 0, 83, 84,
+ 85, 0, 0, 0, 0, 86, 87, 88, 269, 0,
+ 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
+ 280, 281, 282, 283, 284, 285, 286, 287, 0, 0,
+ 523, 269, 470, 270, 271, 272, 273, 274, 275, 276,
+ 277, 278, 279, 280, 281, 282, 283, 284, 285, 286,
+ 287, 269, 529, 270, 271, 272, 273, 274, 275, 276,
+ 277, 278, 279, 280, 281, 282, 283, 284, 285, 286,
+ 287, 269, 0, 270, 271, 272, 273, 274, 275, 276,
+ 277, 278, 279, 280, 281, 282, 283, 284, 285, 286,
+ 287, 271, 272, 273, 274, 275, 276, 277, 278, 279,
+ 280, 281, 282, 283, 284, 285, 286, 287, 272, 273,
+ 274, 275, 276, 277, 278, 279, 280, 281, 282, 283,
+ 284, 285, 286, 287, 273, 274, 275, 276, 277, 278,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287
+};
+
+static const yytype_int16 yycheck[] =
+{
+ 73, 71, 105, 215, 23, 18, 4, 4, 4, 4,
+ 83, 114, 233, 225, 226, 25, 479, 90, 3, 4,
+ 4, 4, 227, 4, 4, 5, 4, 0, 4, 4,
+ 4, 15, 15, 650, 36, 56, 4, 5, 482, 6,
+ 567, 15, 4, 4, 5, 30, 31, 6, 32, 32,
+ 4, 4, 37, 38, 39, 57, 126, 127, 32, 129,
+ 130, 4, 56, 57, 6, 135, 51, 52, 53, 32,
+ 33, 34, 15, 58, 16, 602, 149, 150, 63, 56,
+ 54, 55, 67, 68, 69, 70, 71, 72, 64, 32,
+ 4, 5, 77, 78, 79, 80, 81, 82, 83, 172,
+ 173, 641, 175, 57, 57, 90, 127, 92, 728, 140,
+ 183, 54, 55, 144, 577, 127, 4, 6, 99, 739,
+ 127, 565, 107, 103, 4, 665, 4, 5, 113, 141,
+ 203, 56, 749, 127, 141, 103, 4, 5, 140, 344,
+ 4, 5, 103, 213, 142, 140, 142, 145, 145, 689,
+ 140, 56, 142, 138, 97, 4, 619, 142, 142, 142,
+ 145, 146, 140, 137, 237, 140, 15, 240, 241, 143,
+ 243, 244, 140, 140, 142, 248, 249, 250, 251, 252,
+ 680, 140, 255, 32, 56, 195, 196, 260, 261, 103,
+ 37, 264, 265, 693, 137, 620, 269, 270, 271, 272,
+ 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
+ 283, 284, 285, 286, 287, 288, 289, 290, 439, 49,
+ 50, 4, 647, 296, 297, 103, 140, 140, 142, 142,
+ 738, 3, 4, 4, 6, 103, 4, 125, 37, 103,
+ 128, 129, 130, 751, 15, 125, 4, 317, 128, 129,
+ 130, 56, 355, 356, 140, 680, 142, 37, 30, 31,
+ 37, 32, 140, 37, 142, 37, 38, 39, 693, 140,
+ 141, 341, 140, 343, 142, 37, 140, 498, 142, 51,
+ 52, 53, 37, 54, 55, 37, 58, 39, 4, 37,
+ 140, 63, 142, 4, 67, 68, 69, 70, 71, 15,
+ 72, 121, 122, 123, 15, 77, 78, 79, 80, 81,
+ 82, 83, 132, 3, 4, 328, 32, 37, 90, 139,
+ 92, 32, 37, 37, 545, 37, 4, 37, 37, 541,
+ 30, 31, 32, 33, 34, 107, 37, 131, 54, 55,
+ 359, 113, 125, 54, 55, 128, 129, 130, 134, 135,
+ 136, 424, 37, 426, 427, 428, 4, 125, 4, 4,
+ 128, 129, 130, 4, 4, 4, 138, 4, 140, 142,
+ 4, 4, 3, 145, 146, 109, 4, 450, 4, 57,
+ 453, 454, 4, 456, 3, 4, 64, 6, 57, 16,
+ 463, 464, 16, 71, 141, 57, 141, 470, 76, 28,
+ 29, 30, 31, 32, 33, 34, 4, 417, 4, 4,
+ 4, 30, 31, 4, 4, 4, 4, 95, 37, 38,
+ 39, 137, 4, 101, 102, 37, 137, 4, 4, 37,
+ 37, 56, 51, 52, 53, 113, 37, 37, 37, 58,
+ 37, 140, 140, 140, 63, 37, 36, 140, 4, 522,
+ 37, 37, 37, 72, 37, 141, 37, 37, 77, 78,
+ 79, 80, 81, 82, 83, 37, 37, 37, 571, 37,
+ 37, 90, 37, 92, 64, 37, 141, 56, 142, 57,
+ 140, 71, 57, 142, 142, 142, 76, 560, 107, 142,
+ 142, 142, 37, 566, 113, 568, 6, 6, 142, 142,
+ 603, 4, 4, 513, 514, 95, 579, 4, 4, 4,
+ 4, 101, 102, 4, 4, 4, 4, 4, 4, 138,
+ 4, 140, 4, 113, 597, 141, 145, 146, 141, 4,
+ 37, 604, 4, 37, 140, 4, 56, 142, 142, 3,
+ 4, 4, 754, 16, 37, 757, 4, 140, 16, 761,
+ 6, 7, 8, 9, 10, 11, 12, 13, 14, 37,
+ 99, 16, 89, 633, 4, 668, 30, 31, 142, 142,
+ 4, 90, 141, 37, 38, 39, 40, 36, 142, 142,
+ 57, 37, 142, 142, 142, 142, 16, 51, 52, 53,
+ 142, 142, 142, 142, 58, 37, 56, 38, 37, 63,
+ 37, 142, 6, 140, 37, 4, 141, 141, 72, 92,
+ 683, 3, 4, 77, 78, 79, 80, 81, 82, 83,
+ 100, 57, 37, 6, 16, 37, 90, 16, 92, 6,
+ 7, 8, 9, 10, 11, 12, 13, 14, 30, 31,
+ 56, 37, 56, 107, 16, 37, 38, 39, 57, 113,
+ 37, 37, 37, 37, 56, 37, 37, 37, 57, 51,
+ 52, 53, 37, 37, 25, 64, 58, 37, 37, 37,
+ 37, 63, 71, 37, 138, 142, 142, 76, 4, 99,
+ 72, 145, 146, 3, 4, 77, 78, 79, 80, 81,
+ 82, 83, 142, 142, 142, 4, 95, 36, 90, 142,
+ 92, 57, 101, 102, 142, 4, 25, 142, 4, 4,
+ 30, 31, 242, 142, 113, 107, 142, 37, 38, 39,
+ 142, 113, 333, 142, 142, 142, 139, 36, 699, 38,
+ 211, 51, 52, 53, 142, 142, 142, 665, 58, 684,
+ 4, 647, 741, 63, 433, 564, 138, 713, 492, 531,
+ 427, 15, 72, 145, 146, 64, 691, 77, 78, 79,
+ 80, 81, 82, 83, 26, 239, 98, 556, 32, -1,
+ 90, -1, 92, -1, -1, -1, -1, 41, 42, 43,
+ 44, 45, -1, -1, -1, -1, -1, 107, -1, 98,
+ 54, 55, -1, 113, -1, 104, 105, 106, 107, 108,
+ 64, 110, 111, 112, -1, 114, 115, -1, 117, 118,
+ 119, -1, -1, -1, -1, 124, 125, 126, 138, -1,
+ -1, -1, -1, -1, -1, 145, 146, 91, 4, 93,
+ -1, -1, -1, 97, -1, -1, -1, 101, 102, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 15, 113,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, -1, 133,
+ 46, 47, 48, 137, -1, -1, -1, 141, -1, 143,
+ -1, -1, -1, 59, 60, 61, 62, -1, 64, 65,
+ 66, -1, -1, -1, -1, -1, -1, 73, 74, 75,
+ 76, 4, -1, -1, -1, -1, -1, -1, 84, 85,
+ 86, 87, 88, 89, -1, -1, -1, -1, 94, 95,
+ 96, -1, -1, -1, -1, 101, 102, -1, -1, -1,
+ -1, -1, -1, 36, -1, -1, -1, 113, -1, -1,
+ -1, -1, -1, 46, 47, 48, -1, -1, -1, 125,
+ -1, -1, -1, -1, -1, 131, 59, 60, 61, 62,
+ -1, 64, 65, 66, -1, 141, -1, -1, -1, -1,
+ 73, 74, 75, 76, -1, 142, -1, -1, -1, -1,
+ -1, 84, 85, 86, 87, 88, 89, -1, -1, -1,
+ -1, 94, 95, 96, -1, -1, -1, -1, 101, 102,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 113, 24, 25, 26, 27, 28, 29, 30, 31, 32,
+ 33, 34, 125, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 15, 141, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 15, -1, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 15, -1, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 15, -1, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 15, -1, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 15, -1, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, -1, -1, -1,
+ -1, -1, 140, 15, 142, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 15, 142, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 15, 142, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 15, 142, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 15, 142, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 15, 142, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, -1, -1, -1, -1, -1, -1, 15,
+ 142, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 15,
+ 142, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 15,
+ 142, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 15,
+ 142, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 15,
+ 142, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 15,
+ 142, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, -1,
+ -1, -1, -1, -1, -1, 15, 142, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 15, 142, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 15, 142, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 15, 142, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 15, 142, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 15, 142, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, -1, -1, -1, -1, 15,
+ 140, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 15,
+ 140, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, -1,
+ 140, 654, 655, -1, -1, 4, -1, 660, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 140, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 686, 687, -1, -1, -1, -1, 38,
+ 140, -1, -1, 696, 697, -1, 699, -1, 701, 702,
+ -1, -1, -1, -1, -1, -1, 709, -1, -1, -1,
+ 140, -1, -1, -1, -1, 64, -1, -1, 721, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 734, -1, -1, 140, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, -1, 98,
+ -1, -1, -1, -1, 140, 104, 105, 106, 107, 108,
+ 109, 110, 111, 112, -1, 114, 115, -1, 117, 118,
+ 119, -1, -1, -1, -1, 124, 125, 126, 15, -1,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, -1, -1,
+ 37, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34, 15, -1, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ symbol of state STATE-NUM. */
+static const yytype_uint16 yystos[] =
+{
+ 0, 121, 122, 123, 132, 139, 148, 164, 165, 152,
+ 153, 150, 151, 261, 262, 256, 257, 0, 166, 154,
+ 4, 56, 127, 265, 266, 56, 258, 259, 4, 46,
+ 47, 48, 59, 60, 61, 62, 64, 65, 66, 73,
+ 74, 75, 76, 84, 85, 86, 87, 88, 89, 94,
+ 95, 96, 101, 102, 113, 125, 141, 167, 174, 176,
+ 195, 197, 208, 209, 211, 213, 248, 263, 264, 4,
+ 38, 64, 98, 104, 105, 106, 107, 108, 110, 111,
+ 112, 114, 115, 117, 118, 119, 124, 125, 126, 155,
+ 6, 4, 125, 128, 129, 130, 268, 269, 56, 266,
+ 129, 130, 260, 269, 259, 6, 7, 8, 9, 10,
+ 11, 12, 13, 14, 193, 56, 56, 49, 50, 37,
+ 37, 4, 149, 56, 37, 37, 37, 37, 37, 37,
+ 37, 37, 37, 37, 168, 37, 37, 37, 177, 37,
+ 140, 141, 194, 131, 4, 149, 4, 3, 4, 30,
+ 31, 37, 38, 39, 51, 52, 53, 58, 63, 72,
+ 77, 78, 79, 80, 81, 82, 83, 90, 92, 107,
+ 113, 138, 145, 146, 217, 4, 4, 159, 4, 158,
+ 157, 4, 4, 4, 217, 4, 3, 4, 160, 161,
+ 162, 4, 109, 217, 4, 16, 16, 57, 141, 268,
+ 57, 141, 215, 216, 215, 175, 249, 4, 4, 4,
+ 4, 169, 4, 64, 198, 199, 200, 4, 4, 149,
+ 149, 4, 149, 142, 149, 210, 212, 4, 214, 4,
+ 5, 103, 170, 37, 149, 4, 4, 37, 161, 56,
+ 6, 140, 156, 6, 140, 217, 217, 217, 37, 37,
+ 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
+ 37, 37, 37, 37, 37, 37, 37, 217, 217, 15,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, 140, 6,
+ 140, 217, 140, 140, 4, 140, 6, 140, 217, 140,
+ 140, 4, 163, 56, 269, 269, 141, 4, 125, 128,
+ 129, 130, 57, 141, 217, 4, 57, 64, 71, 95,
+ 176, 223, 4, 57, 250, 140, 142, 142, 166, 201,
+ 149, 57, 140, 196, 140, 142, 142, 142, 142, 142,
+ 142, 196, 142, 196, 140, 214, 142, 37, 4, 5,
+ 103, 140, 142, 170, 142, 6, 6, 217, 142, 265,
+ 217, 217, 154, 217, 217, 142, 217, 217, 217, 217,
+ 217, 4, 4, 217, 4, 4, 4, 4, 217, 217,
+ 4, 4, 217, 217, 4, 217, 217, 217, 217, 217,
+ 217, 217, 217, 217, 217, 217, 217, 217, 217, 217,
+ 217, 217, 217, 217, 217, 217, 217, 4, 4, 4,
+ 217, 217, 3, 4, 4, 4, 140, 271, 141, 141,
+ 4, 127, 141, 267, 224, 149, 229, 234, 251, 4,
+ 36, 37, 205, 202, 200, 4, 149, 149, 214, 171,
+ 37, 4, 5, 103, 142, 215, 215, 140, 57, 36,
+ 140, 142, 142, 140, 140, 142, 140, 142, 142, 142,
+ 142, 142, 142, 140, 140, 142, 142, 142, 140, 142,
+ 16, 4, 269, 130, 56, 127, 141, 37, 40, 217,
+ 238, 239, 236, 16, 217, 240, 239, 217, 253, 140,
+ 4, 145, 206, 207, 16, 198, 142, 170, 173, 37,
+ 142, 142, 4, 217, 217, 217, 217, 217, 217, 4,
+ 217, 141, 272, 16, 270, 67, 68, 69, 70, 71,
+ 142, 237, 37, 37, 238, 16, 99, 219, 175, 16,
+ 89, 241, 235, 4, 99, 254, 4, 4, 142, 207,
+ 90, 203, 36, 142, 170, 172, 142, 142, 142, 142,
+ 142, 142, 142, 142, 57, 269, 269, 142, 217, 16,
+ 37, 38, 220, 36, 219, 56, 37, 255, 37, 252,
+ 142, 6, 196, 142, 170, 141, 272, 142, 217, 37,
+ 100, 221, 221, 175, 217, 254, 217, 141, 215, 92,
+ 204, 142, 57, 39, 238, 142, 217, 37, 225, 230,
+ 57, 142, 142, 6, 37, 16, 142, 217, 134, 135,
+ 136, 222, 56, 254, 215, 217, 142, 56, 231, 142,
+ 226, 244, 238, 4, 15, 32, 41, 42, 43, 44,
+ 45, 54, 55, 64, 91, 93, 97, 113, 133, 137,
+ 141, 143, 178, 179, 182, 183, 185, 188, 189, 190,
+ 195, 4, 57, 16, 37, 37, 149, 37, 186, 37,
+ 37, 4, 54, 179, 181, 37, 185, 57, 37, 194,
+ 245, 232, 54, 55, 97, 137, 178, 54, 55, 178,
+ 187, 191, 215, 37, 184, 178, 180, 37, 144, 196,
+ 181, 227, 215, 56, 25, 242, 37, 37, 142, 37,
+ 142, 37, 37, 142, 189, 142, 217, 4, 182, 142,
+ 178, 179, 142, 242, 142, 189, 4, 99, 218, 178,
+ 178, 180, 178, 178, 36, 140, 142, 178, 218, 57,
+ 25, 243, 142, 142, 142, 142, 142, 4, 243, 246,
+ 4, 6, 16, 192, 142, 142, 178, 142, 142, 142,
+ 192, 243, 191, 4, 233, 142, 194, 228, 192, 196,
+ 196, 247, 196
+};
+
+#define yyerrok (yyerrstatus = 0)
+#define yyclearin (yychar = YYEMPTY)
+#define YYEMPTY (-2)
+#define YYEOF 0
+
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror. This remains here temporarily
+ to ease the transition to the new meaning of YYERROR, for GCC.
+ Once GCC version 2 has supplanted version 1, this can go. */
+
+#define YYFAIL goto yyerrlab
+
+#define YYRECOVERING() (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value) \
+do \
+ if (yychar == YYEMPTY && yylen == 1) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ yytoken = YYTRANSLATE (yychar); \
+ YYPOPSTACK (1); \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror (YY_("syntax error: cannot back up")); \
+ YYERROR; \
+ } \
+while (YYID (0))
+
+
+#define YYTERROR 1
+#define YYERRCODE 256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+ If N is 0, then set CURRENT to the empty location which ends
+ the previous symbol: RHS[0] (always defined). */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N) \
+ do \
+ if (YYID (N)) \
+ { \
+ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
+ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
+ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
+ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
+ } \
+ else \
+ { \
+ (Current).first_line = (Current).last_line = \
+ YYRHSLOC (Rhs, 0).last_line; \
+ (Current).first_column = (Current).last_column = \
+ YYRHSLOC (Rhs, 0).last_column; \
+ } \
+ while (YYID (0))
+#endif
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+ This macro was not mandated originally: define only if we know
+ we won't break user code: when these are the locations we know. */
+
+#ifndef YY_LOCATION_PRINT
+# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
+# define YY_LOCATION_PRINT(File, Loc) \
+ fprintf (File, "%d.%d-%d.%d", \
+ (Loc).first_line, (Loc).first_column, \
+ (Loc).last_line, (Loc).last_column)
+# else
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments. */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
+#else
+# define YYLEX yylex ()
+#endif
+
+/* Enable debugging if requested. */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+# define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
+do { \
+ if (yydebug) \
+ { \
+ YYFPRINTF (stderr, "%s ", Title); \
+ yy_symbol_print (stderr, \
+ Type, Value); \
+ YYFPRINTF (stderr, "\n"); \
+ } \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+#endif
+{
+ if (!yyvaluep)
+ return;
+# ifdef YYPRINT
+ if (yytype < YYNTOKENS)
+ YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+ YYUSE (yyoutput);
+# endif
+ switch (yytype)
+ {
+ default:
+ break;
+ }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+#endif
+{
+ if (yytype < YYNTOKENS)
+ YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+ else
+ YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+ yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+ YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included). |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+#else
+static void
+yy_stack_print (bottom, top)
+ yytype_int16 *bottom;
+ yytype_int16 *top;
+#endif
+{
+ YYFPRINTF (stderr, "Stack now");
+ for (; bottom <= top; ++bottom)
+ YYFPRINTF (stderr, " %d", *bottom);
+ YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top) \
+do { \
+ if (yydebug) \
+ yy_stack_print ((Bottom), (Top)); \
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced. |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+ YYSTYPE *yyvsp;
+ int yyrule;
+#endif
+{
+ int yynrhs = yyr2[yyrule];
+ int yyi;
+ unsigned long int yylno = yyrline[yyrule];
+ YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+ yyrule - 1, yylno);
+ /* The symbols being reduced. */
+ for (yyi = 0; yyi < yynrhs; yyi++)
+ {
+ fprintf (stderr, " $%d = ", yyi + 1);
+ yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+ &(yyvsp[(yyi + 1) - (yynrhs)])
+ );
+ fprintf (stderr, "\n");
+ }
+}
+
+# define YY_REDUCE_PRINT(Rule) \
+do { \
+ if (yydebug) \
+ yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace. It is left uninitialized so that
+ multiple parsers can coexist. */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks. */
+#ifndef YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+ if the built-in stack extension method is used).
+
+ Do not make this value too large; the results are undefined if
+ YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+ evaluated with infinite-precision integer arithmetic. */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+# if defined __GLIBC__ && defined _STRING_H
+# define yystrlen strlen
+# else
+/* Return the length of YYSTR. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+ const char *yystr;
+#endif
+{
+ YYSIZE_T yylen;
+ for (yylen = 0; yystr[yylen]; yylen++)
+ continue;
+ return yylen;
+}
+# endif
+# endif
+
+# ifndef yystpcpy
+# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+# define yystpcpy stpcpy
+# else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+ YYDEST. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+ char *yydest;
+ const char *yysrc;
+#endif
+{
+ char *yyd = yydest;
+ const char *yys = yysrc;
+
+ while ((*yyd++ = *yys++) != '\0')
+ continue;
+
+ return yyd - 1;
+}
+# endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+ quotes and backslashes, so that it's suitable for yyerror. The
+ heuristic is that double-quoting is unnecessary unless the string
+ contains an apostrophe, a comma, or backslash (other than
+ backslash-backslash). YYSTR is taken from yytname. If YYRES is
+ null, do not copy; instead, return the length of what the result
+ would have been. */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+ if (*yystr == '"')
+ {
+ YYSIZE_T yyn = 0;
+ char const *yyp = yystr;
+
+ for (;;)
+ switch (*++yyp)
+ {
+ case '\'':
+ case ',':
+ goto do_not_strip_quotes;
+
+ case '\\':
+ if (*++yyp != '\\')
+ goto do_not_strip_quotes;
+ /* Fall through. */
+ default:
+ if (yyres)
+ yyres[yyn] = *yyp;
+ yyn++;
+ break;
+
+ case '"':
+ if (yyres)
+ yyres[yyn] = '\0';
+ return yyn;
+ }
+ do_not_strip_quotes: ;
+ }
+
+ if (! yyres)
+ return yystrlen (yystr);
+
+ return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into YYRESULT an error message about the unexpected token
+ YYCHAR while in state YYSTATE. Return the number of bytes copied,
+ including the terminating null byte. If YYRESULT is null, do not
+ copy anything; just return the number of bytes that would be
+ copied. As a special case, return 0 if an ordinary "syntax error"
+ message will do. Return YYSIZE_MAXIMUM if overflow occurs during
+ size calculation. */
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
+{
+ int yyn = yypact[yystate];
+
+ if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+ return 0;
+ else
+ {
+ int yytype = YYTRANSLATE (yychar);
+ YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+ YYSIZE_T yysize = yysize0;
+ YYSIZE_T yysize1;
+ int yysize_overflow = 0;
+ enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+ int yyx;
+
+# if 0
+ /* This is so xgettext sees the translatable formats that are
+ constructed on the fly. */
+ YY_("syntax error, unexpected %s");
+ YY_("syntax error, unexpected %s, expecting %s");
+ YY_("syntax error, unexpected %s, expecting %s or %s");
+ YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+ YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+ char *yyfmt;
+ char const *yyf;
+ static char const yyunexpected[] = "syntax error, unexpected %s";
+ static char const yyexpecting[] = ", expecting %s";
+ static char const yyor[] = " or %s";
+ char yyformat[sizeof yyunexpected
+ + sizeof yyexpecting - 1
+ + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+ * (sizeof yyor - 1))];
+ char const *yyprefix = yyexpecting;
+
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. */
+ int yyxbegin = yyn < 0 ? -yyn : 0;
+
+ /* Stay within bounds of both yycheck and yytname. */
+ int yychecklim = YYLAST - yyn + 1;
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ int yycount = 1;
+
+ yyarg[0] = yytname[yytype];
+ yyfmt = yystpcpy (yyformat, yyunexpected);
+
+ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+ {
+ if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+ {
+ yycount = 1;
+ yysize = yysize0;
+ yyformat[sizeof yyunexpected - 1] = '\0';
+ break;
+ }
+ yyarg[yycount++] = yytname[yyx];
+ yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+ yysize_overflow |= (yysize1 < yysize);
+ yysize = yysize1;
+ yyfmt = yystpcpy (yyfmt, yyprefix);
+ yyprefix = yyor;
+ }
+
+ yyf = YY_(yyformat);
+ yysize1 = yysize + yystrlen (yyf);
+ yysize_overflow |= (yysize1 < yysize);
+ yysize = yysize1;
+
+ if (yysize_overflow)
+ return YYSIZE_MAXIMUM;
+
+ if (yyresult)
+ {
+ /* Avoid sprintf, as that infringes on the user's name space.
+ Don't have undefined behavior even if the translation
+ produced a string with the wrong number of "%s"s. */
+ char *yyp = yyresult;
+ int yyi = 0;
+ while ((*yyp = *yyf) != '\0')
+ {
+ if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+ {
+ yyp += yytnamerr (yyp, yyarg[yyi++]);
+ yyf += 2;
+ }
+ else
+ {
+ yyp++;
+ yyf++;
+ }
+ }
+ }
+ return yysize;
+ }
+}
+#endif /* YYERROR_VERBOSE */
+
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol. |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+ const char *yymsg;
+ int yytype;
+ YYSTYPE *yyvaluep;
+#endif
+{
+ YYUSE (yyvaluep);
+
+ if (!yymsg)
+ yymsg = "Deleting";
+ YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+ switch (yytype)
+ {
+
+ default:
+ break;
+ }
+}
+
+
+/* Prevent warnings from -Wmissing-prototypes. */
+
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+
+/* The look-ahead symbol. */
+int yychar;
+
+/* The semantic value of the look-ahead symbol. */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far. */
+int yynerrs;
+
+
+
+/*----------.
+| yyparse. |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+ void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
+{
+
+ int yystate;
+ int yyn;
+ int yyresult;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus;
+ /* Look-ahead token as an internal (translated) token number. */
+ int yytoken = 0;
+#if YYERROR_VERBOSE
+ /* Buffer for error messages, and its allocated size. */
+ char yymsgbuf[128];
+ char *yymsg = yymsgbuf;
+ YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+ /* Three stacks and their tools:
+ `yyss': related to states,
+ `yyvs': related to semantic values,
+ `yyls': related to locations.
+
+ Refer to the stacks thru separate pointers, to allow yyoverflow
+ to reallocate them elsewhere. */
+
+ /* The state stack. */
+ yytype_int16 yyssa[YYINITDEPTH];
+ yytype_int16 *yyss = yyssa;
+ yytype_int16 *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs = yyvsa;
+ YYSTYPE *yyvsp;
+
+
+
+#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
+
+ YYSIZE_T yystacksize = YYINITDEPTH;
+
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+
+
+ /* The number of symbols on the RHS of the reduced rule.
+ Keep to zero when no symbol should be popped. */
+ int yylen = 0;
+
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yystate = 0;
+ yyerrstatus = 0;
+ yynerrs = 0;
+ yychar = YYEMPTY; /* Cause a token to be read. */
+
+ /* Initialize stack pointers.
+ Waste one element of value and location stack
+ so that they stay on the same level as the state stack.
+ The wasted elements are never initialized. */
+
+ yyssp = yyss;
+ yyvsp = yyvs;
+
+ goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate. |
+`------------------------------------------------------------*/
+ yynewstate:
+ /* In all cases, when you get here, the value and location stacks
+ have just been pushed. So pushing a state here evens the stacks. */
+ yyssp++;
+
+ yysetstate:
+ *yyssp = yystate;
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ {
+ /* Get the current used size of the three stacks, in elements. */
+ YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+ {
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+ yytype_int16 *yyss1 = yyss;
+
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. This used to be a
+ conditional around just the two extra args, but that might
+ be undefined if yyoverflow is a macro. */
+ yyoverflow (YY_("memory exhausted"),
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+
+ &yystacksize);
+
+ yyss = yyss1;
+ yyvs = yyvs1;
+ }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+ goto yyexhaustedlab;
+# else
+ /* Extend the stack our own way. */
+ if (YYMAXDEPTH <= yystacksize)
+ goto yyexhaustedlab;
+ yystacksize *= 2;
+ if (YYMAXDEPTH < yystacksize)
+ yystacksize = YYMAXDEPTH;
+
+ {
+ yytype_int16 *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+ goto yyexhaustedlab;
+ YYSTACK_RELOCATE (yyss);
+ YYSTACK_RELOCATE (yyvs);
+
+# undef YYSTACK_RELOCATE
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
+ }
+# endif
+#endif /* no yyoverflow */
+
+ yyssp = yyss + yysize - 1;
+ yyvsp = yyvs + yysize - 1;
+
+
+ YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+ (unsigned long int) yystacksize));
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ YYABORT;
+ }
+
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+ goto yybackup;
+
+/*-----------.
+| yybackup. |
+`-----------*/
+yybackup:
+
+ /* Do appropriate processing given the current state. Read a
+ look-ahead token if we need one and don't already have one. */
+
+ /* First try to decide what to do without reference to look-ahead token. */
+ yyn = yypact[yystate];
+ if (yyn == YYPACT_NINF)
+ goto yydefault;
+
+ /* Not known => get a look-ahead token if don't already have one. */
+
+ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
+ if (yychar == YYEMPTY)
+ {
+ YYDPRINTF ((stderr, "Reading a token: "));
+ yychar = YYLEX;
+ }
+
+ if (yychar <= YYEOF)
+ {
+ yychar = yytoken = YYEOF;
+ YYDPRINTF ((stderr, "Now at end of input.\n"));
+ }
+ else
+ {
+ yytoken = YYTRANSLATE (yychar);
+ YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+ }
+
+ /* If the proper action on seeing token YYTOKEN is to reduce or to
+ detect an error, take that action. */
+ yyn += yytoken;
+ if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+ goto yydefault;
+ yyn = yytable[yyn];
+ if (yyn <= 0)
+ {
+ if (yyn == 0 || yyn == YYTABLE_NINF)
+ goto yyerrlab;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
+ /* Shift the look-ahead token. */
+ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+ /* Discard the shifted token unless it is eof. */
+ if (yychar != YYEOF)
+ yychar = YYEMPTY;
+
+ yystate = yyn;
+ *++yyvsp = yylval;
+
+ goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state. |
+`-----------------------------------------------------------*/
+yydefault:
+ yyn = yydefact[yystate];
+ if (yyn == 0)
+ goto yyerrlab;
+ goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction. |
+`-----------------------------*/
+yyreduce:
+ /* yyn is the number of a rule to reduce with. */
+ yylen = yyr2[yyn];
+
+ /* If YYLEN is nonzero, implement the default value of the action:
+ `$$ = $1'.
+
+ Otherwise, the following line sets YYVAL to garbage.
+ This behavior is undocumented and Bison
+ users should not rely upon it. Assigning to YYVAL
+ unconditionally makes the parser a bit smaller, and it avoids a
+ GCC warning that YYVAL may be used uninitialized. */
+ yyval = yyvsp[1-yylen];
+
+
+ YY_REDUCE_PRINT (yyn);
+ switch (yyn)
+ {
+ case 8:
+#line 174 "ldgram.y"
+ { ldlex_defsym(); }
+ break;
+
+ case 9:
+#line 176 "ldgram.y"
+ {
+ ldlex_popstate();
+ lang_add_assignment(exp_assop((yyvsp[(3) - (4)].token),(yyvsp[(2) - (4)].name),(yyvsp[(4) - (4)].etree)));
+ }
+ break;
+
+ case 10:
+#line 184 "ldgram.y"
+ {
+ ldlex_mri_script ();
+ PUSH_ERROR (_("MRI style script"));
+ }
+ break;
+
+ case 11:
+#line 189 "ldgram.y"
+ {
+ ldlex_popstate ();
+ mri_draw_tree ();
+ POP_ERROR ();
+ }
+ break;
+
+ case 16:
+#line 204 "ldgram.y"
+ {
+ einfo(_("%P%F: unrecognised keyword in MRI style script '%s'\n"),(yyvsp[(1) - (1)].name));
+ }
+ break;
+
+ case 17:
+#line 207 "ldgram.y"
+ {
+ config.map_filename = "-";
+ }
+ break;
+
+ case 20:
+#line 213 "ldgram.y"
+ { mri_public((yyvsp[(2) - (4)].name), (yyvsp[(4) - (4)].etree)); }
+ break;
+
+ case 21:
+#line 215 "ldgram.y"
+ { mri_public((yyvsp[(2) - (4)].name), (yyvsp[(4) - (4)].etree)); }
+ break;
+
+ case 22:
+#line 217 "ldgram.y"
+ { mri_public((yyvsp[(2) - (3)].name), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 23:
+#line 219 "ldgram.y"
+ { mri_format((yyvsp[(2) - (2)].name)); }
+ break;
+
+ case 24:
+#line 221 "ldgram.y"
+ { mri_output_section((yyvsp[(2) - (4)].name), (yyvsp[(4) - (4)].etree));}
+ break;
+
+ case 25:
+#line 223 "ldgram.y"
+ { mri_output_section((yyvsp[(2) - (3)].name), (yyvsp[(3) - (3)].etree));}
+ break;
+
+ case 26:
+#line 225 "ldgram.y"
+ { mri_output_section((yyvsp[(2) - (4)].name), (yyvsp[(4) - (4)].etree));}
+ break;
+
+ case 27:
+#line 227 "ldgram.y"
+ { mri_align((yyvsp[(2) - (4)].name),(yyvsp[(4) - (4)].etree)); }
+ break;
+
+ case 28:
+#line 229 "ldgram.y"
+ { mri_align((yyvsp[(2) - (4)].name),(yyvsp[(4) - (4)].etree)); }
+ break;
+
+ case 29:
+#line 231 "ldgram.y"
+ { mri_alignmod((yyvsp[(2) - (4)].name),(yyvsp[(4) - (4)].etree)); }
+ break;
+
+ case 30:
+#line 233 "ldgram.y"
+ { mri_alignmod((yyvsp[(2) - (4)].name),(yyvsp[(4) - (4)].etree)); }
+ break;
+
+ case 33:
+#line 237 "ldgram.y"
+ { mri_name((yyvsp[(2) - (2)].name)); }
+ break;
+
+ case 34:
+#line 239 "ldgram.y"
+ { mri_alias((yyvsp[(2) - (4)].name),(yyvsp[(4) - (4)].name),0);}
+ break;
+
+ case 35:
+#line 241 "ldgram.y"
+ { mri_alias ((yyvsp[(2) - (4)].name), 0, (int) (yyvsp[(4) - (4)].bigint).integer); }
+ break;
+
+ case 36:
+#line 243 "ldgram.y"
+ { mri_base((yyvsp[(2) - (2)].etree)); }
+ break;
+
+ case 37:
+#line 245 "ldgram.y"
+ { mri_truncate ((unsigned int) (yyvsp[(2) - (2)].bigint).integer); }
+ break;
+
+ case 40:
+#line 249 "ldgram.y"
+ { ldlex_script (); ldfile_open_command_file((yyvsp[(2) - (2)].name)); }
+ break;
+
+ case 41:
+#line 251 "ldgram.y"
+ { ldlex_popstate (); }
+ break;
+
+ case 42:
+#line 253 "ldgram.y"
+ { lang_add_entry ((yyvsp[(2) - (2)].name), FALSE); }
+ break;
+
+ case 44:
+#line 258 "ldgram.y"
+ { mri_order((yyvsp[(3) - (3)].name)); }
+ break;
+
+ case 45:
+#line 259 "ldgram.y"
+ { mri_order((yyvsp[(2) - (2)].name)); }
+ break;
+
+ case 47:
+#line 265 "ldgram.y"
+ { mri_load((yyvsp[(1) - (1)].name)); }
+ break;
+
+ case 48:
+#line 266 "ldgram.y"
+ { mri_load((yyvsp[(3) - (3)].name)); }
+ break;
+
+ case 49:
+#line 271 "ldgram.y"
+ { mri_only_load((yyvsp[(1) - (1)].name)); }
+ break;
+
+ case 50:
+#line 273 "ldgram.y"
+ { mri_only_load((yyvsp[(3) - (3)].name)); }
+ break;
+
+ case 51:
+#line 277 "ldgram.y"
+ { (yyval.name) = NULL; }
+ break;
+
+ case 54:
+#line 284 "ldgram.y"
+ { ldlex_expression (); }
+ break;
+
+ case 55:
+#line 286 "ldgram.y"
+ { ldlex_popstate (); }
+ break;
+
+ case 56:
+#line 290 "ldgram.y"
+ { ldlang_add_undef ((yyvsp[(1) - (1)].name), FALSE); }
+ break;
+
+ case 57:
+#line 292 "ldgram.y"
+ { ldlang_add_undef ((yyvsp[(2) - (2)].name), FALSE); }
+ break;
+
+ case 58:
+#line 294 "ldgram.y"
+ { ldlang_add_undef ((yyvsp[(3) - (3)].name), FALSE); }
+ break;
+
+ case 59:
+#line 298 "ldgram.y"
+ { ldlex_both(); }
+ break;
+
+ case 60:
+#line 300 "ldgram.y"
+ { ldlex_popstate(); }
+ break;
+
+ case 73:
+#line 321 "ldgram.y"
+ { lang_add_target((yyvsp[(3) - (4)].name)); }
+ break;
+
+ case 74:
+#line 323 "ldgram.y"
+ { ldfile_add_library_path ((yyvsp[(3) - (4)].name), FALSE); }
+ break;
+
+ case 75:
+#line 325 "ldgram.y"
+ { lang_add_output((yyvsp[(3) - (4)].name), 1); }
+ break;
+
+ case 76:
+#line 327 "ldgram.y"
+ { lang_add_output_format ((yyvsp[(3) - (4)].name), (char *) NULL,
+ (char *) NULL, 1); }
+ break;
+
+ case 77:
+#line 330 "ldgram.y"
+ { lang_add_output_format ((yyvsp[(3) - (8)].name), (yyvsp[(5) - (8)].name), (yyvsp[(7) - (8)].name), 1); }
+ break;
+
+ case 78:
+#line 332 "ldgram.y"
+ { ldfile_set_output_arch ((yyvsp[(3) - (4)].name), bfd_arch_unknown); }
+ break;
+
+ case 79:
+#line 334 "ldgram.y"
+ { command_line.force_common_definition = TRUE ; }
+ break;
+
+ case 80:
+#line 336 "ldgram.y"
+ { command_line.inhibit_common_definition = TRUE ; }
+ break;
+
+ case 82:
+#line 339 "ldgram.y"
+ { lang_enter_group (); }
+ break;
+
+ case 83:
+#line 341 "ldgram.y"
+ { lang_leave_group (); }
+ break;
+
+ case 84:
+#line 343 "ldgram.y"
+ { lang_add_map((yyvsp[(3) - (4)].name)); }
+ break;
+
+ case 85:
+#line 345 "ldgram.y"
+ { ldlex_script (); ldfile_open_command_file((yyvsp[(2) - (2)].name)); }
+ break;
+
+ case 86:
+#line 347 "ldgram.y"
+ { ldlex_popstate (); }
+ break;
+
+ case 87:
+#line 349 "ldgram.y"
+ {
+ lang_add_nocrossref ((yyvsp[(3) - (4)].nocrossref));
+ }
+ break;
+
+ case 89:
+#line 354 "ldgram.y"
+ { lang_add_insert ((yyvsp[(3) - (3)].name), 0); }
+ break;
+
+ case 90:
+#line 356 "ldgram.y"
+ { lang_add_insert ((yyvsp[(3) - (3)].name), 1); }
+ break;
+
+ case 91:
+#line 358 "ldgram.y"
+ { lang_memory_region_alias ((yyvsp[(3) - (6)].name), (yyvsp[(5) - (6)].name)); }
+ break;
+
+ case 92:
+#line 363 "ldgram.y"
+ { lang_add_input_file((yyvsp[(1) - (1)].name),lang_input_file_is_search_file_enum,
+ (char *)NULL); }
+ break;
+
+ case 93:
+#line 366 "ldgram.y"
+ { lang_add_input_file((yyvsp[(3) - (3)].name),lang_input_file_is_search_file_enum,
+ (char *)NULL); }
+ break;
+
+ case 94:
+#line 369 "ldgram.y"
+ { lang_add_input_file((yyvsp[(2) - (2)].name),lang_input_file_is_search_file_enum,
+ (char *)NULL); }
+ break;
+
+ case 95:
+#line 372 "ldgram.y"
+ { lang_add_input_file((yyvsp[(1) - (1)].name),lang_input_file_is_l_enum,
+ (char *)NULL); }
+ break;
+
+ case 96:
+#line 375 "ldgram.y"
+ { lang_add_input_file((yyvsp[(3) - (3)].name),lang_input_file_is_l_enum,
+ (char *)NULL); }
+ break;
+
+ case 97:
+#line 378 "ldgram.y"
+ { lang_add_input_file((yyvsp[(2) - (2)].name),lang_input_file_is_l_enum,
+ (char *)NULL); }
+ break;
+
+ case 98:
+#line 381 "ldgram.y"
+ { (yyval.integer) = add_DT_NEEDED_for_regular; add_DT_NEEDED_for_regular = TRUE; }
+ break;
+
+ case 99:
+#line 383 "ldgram.y"
+ { add_DT_NEEDED_for_regular = (yyvsp[(3) - (5)].integer); }
+ break;
+
+ case 100:
+#line 385 "ldgram.y"
+ { (yyval.integer) = add_DT_NEEDED_for_regular; add_DT_NEEDED_for_regular = TRUE; }
+ break;
+
+ case 101:
+#line 387 "ldgram.y"
+ { add_DT_NEEDED_for_regular = (yyvsp[(5) - (7)].integer); }
+ break;
+
+ case 102:
+#line 389 "ldgram.y"
+ { (yyval.integer) = add_DT_NEEDED_for_regular; add_DT_NEEDED_for_regular = TRUE; }
+ break;
+
+ case 103:
+#line 391 "ldgram.y"
+ { add_DT_NEEDED_for_regular = (yyvsp[(4) - (6)].integer); }
+ break;
+
+ case 108:
+#line 406 "ldgram.y"
+ { lang_add_entry ((yyvsp[(3) - (4)].name), FALSE); }
+ break;
+
+ case 110:
+#line 408 "ldgram.y"
+ {ldlex_expression ();}
+ break;
+
+ case 111:
+#line 409 "ldgram.y"
+ { ldlex_popstate ();
+ lang_add_assignment (exp_assert ((yyvsp[(4) - (7)].etree), (yyvsp[(6) - (7)].name))); }
+ break;
+
+ case 112:
+#line 417 "ldgram.y"
+ {
+ (yyval.cname) = (yyvsp[(1) - (1)].name);
+ }
+ break;
+
+ case 113:
+#line 421 "ldgram.y"
+ {
+ (yyval.cname) = "*";
+ }
+ break;
+
+ case 114:
+#line 425 "ldgram.y"
+ {
+ (yyval.cname) = "?";
+ }
+ break;
+
+ case 115:
+#line 432 "ldgram.y"
+ {
+ (yyval.wildcard).name = (yyvsp[(1) - (1)].cname);
+ (yyval.wildcard).sorted = none;
+ (yyval.wildcard).exclude_name_list = NULL;
+ }
+ break;
+
+ case 116:
+#line 438 "ldgram.y"
+ {
+ (yyval.wildcard).name = (yyvsp[(5) - (5)].cname);
+ (yyval.wildcard).sorted = none;
+ (yyval.wildcard).exclude_name_list = (yyvsp[(3) - (5)].name_list);
+ }
+ break;
+
+ case 117:
+#line 444 "ldgram.y"
+ {
+ (yyval.wildcard).name = (yyvsp[(3) - (4)].cname);
+ (yyval.wildcard).sorted = by_name;
+ (yyval.wildcard).exclude_name_list = NULL;
+ }
+ break;
+
+ case 118:
+#line 450 "ldgram.y"
+ {
+ (yyval.wildcard).name = (yyvsp[(3) - (4)].cname);
+ (yyval.wildcard).sorted = by_alignment;
+ (yyval.wildcard).exclude_name_list = NULL;
+ }
+ break;
+
+ case 119:
+#line 456 "ldgram.y"
+ {
+ (yyval.wildcard).name = (yyvsp[(5) - (7)].cname);
+ (yyval.wildcard).sorted = by_name_alignment;
+ (yyval.wildcard).exclude_name_list = NULL;
+ }
+ break;
+
+ case 120:
+#line 462 "ldgram.y"
+ {
+ (yyval.wildcard).name = (yyvsp[(5) - (7)].cname);
+ (yyval.wildcard).sorted = by_name;
+ (yyval.wildcard).exclude_name_list = NULL;
+ }
+ break;
+
+ case 121:
+#line 468 "ldgram.y"
+ {
+ (yyval.wildcard).name = (yyvsp[(5) - (7)].cname);
+ (yyval.wildcard).sorted = by_alignment_name;
+ (yyval.wildcard).exclude_name_list = NULL;
+ }
+ break;
+
+ case 122:
+#line 474 "ldgram.y"
+ {
+ (yyval.wildcard).name = (yyvsp[(5) - (7)].cname);
+ (yyval.wildcard).sorted = by_alignment;
+ (yyval.wildcard).exclude_name_list = NULL;
+ }
+ break;
+
+ case 123:
+#line 480 "ldgram.y"
+ {
+ (yyval.wildcard).name = (yyvsp[(7) - (8)].cname);
+ (yyval.wildcard).sorted = by_name;
+ (yyval.wildcard).exclude_name_list = (yyvsp[(5) - (8)].name_list);
+ }
+ break;
+
+ case 124:
+#line 489 "ldgram.y"
+ {
+ struct name_list *tmp;
+ tmp = (struct name_list *) xmalloc (sizeof *tmp);
+ tmp->name = (yyvsp[(2) - (2)].cname);
+ tmp->next = (yyvsp[(1) - (2)].name_list);
+ (yyval.name_list) = tmp;
+ }
+ break;
+
+ case 125:
+#line 498 "ldgram.y"
+ {
+ struct name_list *tmp;
+ tmp = (struct name_list *) xmalloc (sizeof *tmp);
+ tmp->name = (yyvsp[(1) - (1)].cname);
+ tmp->next = NULL;
+ (yyval.name_list) = tmp;
+ }
+ break;
+
+ case 126:
+#line 509 "ldgram.y"
+ {
+ struct wildcard_list *tmp;
+ tmp = (struct wildcard_list *) xmalloc (sizeof *tmp);
+ tmp->next = (yyvsp[(1) - (3)].wildcard_list);
+ tmp->spec = (yyvsp[(3) - (3)].wildcard);
+ (yyval.wildcard_list) = tmp;
+ }
+ break;
+
+ case 127:
+#line 518 "ldgram.y"
+ {
+ struct wildcard_list *tmp;
+ tmp = (struct wildcard_list *) xmalloc (sizeof *tmp);
+ tmp->next = NULL;
+ tmp->spec = (yyvsp[(1) - (1)].wildcard);
+ (yyval.wildcard_list) = tmp;
+ }
+ break;
+
+ case 128:
+#line 529 "ldgram.y"
+ {
+ struct wildcard_spec tmp;
+ tmp.name = (yyvsp[(1) - (1)].name);
+ tmp.exclude_name_list = NULL;
+ tmp.sorted = none;
+ lang_add_wild (&tmp, NULL, ldgram_had_keep);
+ }
+ break;
+
+ case 129:
+#line 537 "ldgram.y"
+ {
+ lang_add_wild (NULL, (yyvsp[(2) - (3)].wildcard_list), ldgram_had_keep);
+ }
+ break;
+
+ case 130:
+#line 541 "ldgram.y"
+ {
+ lang_add_wild (&(yyvsp[(1) - (4)].wildcard), (yyvsp[(3) - (4)].wildcard_list), ldgram_had_keep);
+ }
+ break;
+
+ case 132:
+#line 549 "ldgram.y"
+ { ldgram_had_keep = TRUE; }
+ break;
+
+ case 133:
+#line 551 "ldgram.y"
+ { ldgram_had_keep = FALSE; }
+ break;
+
+ case 135:
+#line 557 "ldgram.y"
+ {
+ lang_add_attribute(lang_object_symbols_statement_enum);
+ }
+ break;
+
+ case 137:
+#line 562 "ldgram.y"
+ {
+
+ lang_add_attribute(lang_constructors_statement_enum);
+ }
+ break;
+
+ case 138:
+#line 567 "ldgram.y"
+ {
+ constructors_sorted = TRUE;
+ lang_add_attribute (lang_constructors_statement_enum);
+ }
+ break;
+
+ case 140:
+#line 573 "ldgram.y"
+ {
+ lang_add_data ((int) (yyvsp[(1) - (4)].integer), (yyvsp[(3) - (4)].etree));
+ }
+ break;
+
+ case 141:
+#line 578 "ldgram.y"
+ {
+ lang_add_fill ((yyvsp[(3) - (4)].fill));
+ }
+ break;
+
+ case 142:
+#line 581 "ldgram.y"
+ {ldlex_expression ();}
+ break;
+
+ case 143:
+#line 582 "ldgram.y"
+ { ldlex_popstate ();
+ lang_add_assignment (exp_assert ((yyvsp[(4) - (8)].etree), (yyvsp[(6) - (8)].name))); }
+ break;
+
+ case 144:
+#line 585 "ldgram.y"
+ { ldlex_script (); ldfile_open_command_file((yyvsp[(2) - (2)].name)); }
+ break;
+
+ case 145:
+#line 587 "ldgram.y"
+ { ldlex_popstate (); }
+ break;
+
+ case 150:
+#line 602 "ldgram.y"
+ { (yyval.integer) = (yyvsp[(1) - (1)].token); }
+ break;
+
+ case 151:
+#line 604 "ldgram.y"
+ { (yyval.integer) = (yyvsp[(1) - (1)].token); }
+ break;
+
+ case 152:
+#line 606 "ldgram.y"
+ { (yyval.integer) = (yyvsp[(1) - (1)].token); }
+ break;
+
+ case 153:
+#line 608 "ldgram.y"
+ { (yyval.integer) = (yyvsp[(1) - (1)].token); }
+ break;
+
+ case 154:
+#line 610 "ldgram.y"
+ { (yyval.integer) = (yyvsp[(1) - (1)].token); }
+ break;
+
+ case 155:
+#line 615 "ldgram.y"
+ {
+ (yyval.fill) = exp_get_fill ((yyvsp[(1) - (1)].etree), 0, "fill value");
+ }
+ break;
+
+ case 156:
+#line 622 "ldgram.y"
+ { (yyval.fill) = (yyvsp[(2) - (2)].fill); }
+ break;
+
+ case 157:
+#line 623 "ldgram.y"
+ { (yyval.fill) = (fill_type *) 0; }
+ break;
+
+ case 158:
+#line 628 "ldgram.y"
+ { (yyval.token) = '+'; }
+ break;
+
+ case 159:
+#line 630 "ldgram.y"
+ { (yyval.token) = '-'; }
+ break;
+
+ case 160:
+#line 632 "ldgram.y"
+ { (yyval.token) = '*'; }
+ break;
+
+ case 161:
+#line 634 "ldgram.y"
+ { (yyval.token) = '/'; }
+ break;
+
+ case 162:
+#line 636 "ldgram.y"
+ { (yyval.token) = LSHIFT; }
+ break;
+
+ case 163:
+#line 638 "ldgram.y"
+ { (yyval.token) = RSHIFT; }
+ break;
+
+ case 164:
+#line 640 "ldgram.y"
+ { (yyval.token) = '&'; }
+ break;
+
+ case 165:
+#line 642 "ldgram.y"
+ { (yyval.token) = '|'; }
+ break;
+
+ case 168:
+#line 652 "ldgram.y"
+ {
+ lang_add_assignment (exp_assop ((yyvsp[(2) - (3)].token), (yyvsp[(1) - (3)].name), (yyvsp[(3) - (3)].etree)));
+ }
+ break;
+
+ case 169:
+#line 656 "ldgram.y"
+ {
+ lang_add_assignment (exp_assop ('=', (yyvsp[(1) - (3)].name),
+ exp_binop ((yyvsp[(2) - (3)].token),
+ exp_nameop (NAME,
+ (yyvsp[(1) - (3)].name)),
+ (yyvsp[(3) - (3)].etree))));
+ }
+ break;
+
+ case 170:
+#line 664 "ldgram.y"
+ {
+ lang_add_assignment (exp_provide ((yyvsp[(3) - (6)].name), (yyvsp[(5) - (6)].etree), FALSE));
+ }
+ break;
+
+ case 171:
+#line 668 "ldgram.y"
+ {
+ lang_add_assignment (exp_provide ((yyvsp[(3) - (6)].name), (yyvsp[(5) - (6)].etree), TRUE));
+ }
+ break;
+
+ case 179:
+#line 691 "ldgram.y"
+ { region = lang_memory_region_lookup ((yyvsp[(1) - (1)].name), TRUE); }
+ break;
+
+ case 180:
+#line 694 "ldgram.y"
+ {}
+ break;
+
+ case 181:
+#line 696 "ldgram.y"
+ { ldlex_script (); ldfile_open_command_file((yyvsp[(2) - (2)].name)); }
+ break;
+
+ case 182:
+#line 698 "ldgram.y"
+ { ldlex_popstate (); }
+ break;
+
+ case 183:
+#line 703 "ldgram.y"
+ {
+ region->origin = exp_get_vma ((yyvsp[(3) - (3)].etree), 0, "origin");
+ region->current = region->origin;
+ }
+ break;
+
+ case 184:
+#line 711 "ldgram.y"
+ {
+ region->length = exp_get_vma ((yyvsp[(3) - (3)].etree), -1, "length");
+ }
+ break;
+
+ case 185:
+#line 718 "ldgram.y"
+ { /* dummy action to avoid bison 1.25 error message */ }
+ break;
+
+ case 189:
+#line 729 "ldgram.y"
+ { lang_set_flags (region, (yyvsp[(1) - (1)].name), 0); }
+ break;
+
+ case 190:
+#line 731 "ldgram.y"
+ { lang_set_flags (region, (yyvsp[(2) - (2)].name), 1); }
+ break;
+
+ case 191:
+#line 736 "ldgram.y"
+ { lang_startup((yyvsp[(3) - (4)].name)); }
+ break;
+
+ case 193:
+#line 742 "ldgram.y"
+ { ldemul_hll((char *)NULL); }
+ break;
+
+ case 194:
+#line 747 "ldgram.y"
+ { ldemul_hll((yyvsp[(3) - (3)].name)); }
+ break;
+
+ case 195:
+#line 749 "ldgram.y"
+ { ldemul_hll((yyvsp[(1) - (1)].name)); }
+ break;
+
+ case 197:
+#line 757 "ldgram.y"
+ { ldemul_syslib((yyvsp[(3) - (3)].name)); }
+ break;
+
+ case 199:
+#line 763 "ldgram.y"
+ { lang_float(TRUE); }
+ break;
+
+ case 200:
+#line 765 "ldgram.y"
+ { lang_float(FALSE); }
+ break;
+
+ case 201:
+#line 770 "ldgram.y"
+ {
+ (yyval.nocrossref) = NULL;
+ }
+ break;
+
+ case 202:
+#line 774 "ldgram.y"
+ {
+ struct lang_nocrossref *n;
+
+ n = (struct lang_nocrossref *) xmalloc (sizeof *n);
+ n->name = (yyvsp[(1) - (2)].name);
+ n->next = (yyvsp[(2) - (2)].nocrossref);
+ (yyval.nocrossref) = n;
+ }
+ break;
+
+ case 203:
+#line 783 "ldgram.y"
+ {
+ struct lang_nocrossref *n;
+
+ n = (struct lang_nocrossref *) xmalloc (sizeof *n);
+ n->name = (yyvsp[(1) - (3)].name);
+ n->next = (yyvsp[(3) - (3)].nocrossref);
+ (yyval.nocrossref) = n;
+ }
+ break;
+
+ case 204:
+#line 793 "ldgram.y"
+ { ldlex_expression (); }
+ break;
+
+ case 205:
+#line 795 "ldgram.y"
+ { ldlex_popstate (); (yyval.etree)=(yyvsp[(2) - (2)].etree);}
+ break;
+
+ case 206:
+#line 800 "ldgram.y"
+ { (yyval.etree) = exp_unop ('-', (yyvsp[(2) - (2)].etree)); }
+ break;
+
+ case 207:
+#line 802 "ldgram.y"
+ { (yyval.etree) = (yyvsp[(2) - (3)].etree); }
+ break;
+
+ case 208:
+#line 804 "ldgram.y"
+ { (yyval.etree) = exp_unop ((int) (yyvsp[(1) - (4)].integer),(yyvsp[(3) - (4)].etree)); }
+ break;
+
+ case 209:
+#line 806 "ldgram.y"
+ { (yyval.etree) = exp_unop ('!', (yyvsp[(2) - (2)].etree)); }
+ break;
+
+ case 210:
+#line 808 "ldgram.y"
+ { (yyval.etree) = (yyvsp[(2) - (2)].etree); }
+ break;
+
+ case 211:
+#line 810 "ldgram.y"
+ { (yyval.etree) = exp_unop ('~', (yyvsp[(2) - (2)].etree));}
+ break;
+
+ case 212:
+#line 813 "ldgram.y"
+ { (yyval.etree) = exp_binop ('*', (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 213:
+#line 815 "ldgram.y"
+ { (yyval.etree) = exp_binop ('/', (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 214:
+#line 817 "ldgram.y"
+ { (yyval.etree) = exp_binop ('%', (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 215:
+#line 819 "ldgram.y"
+ { (yyval.etree) = exp_binop ('+', (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 216:
+#line 821 "ldgram.y"
+ { (yyval.etree) = exp_binop ('-' , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 217:
+#line 823 "ldgram.y"
+ { (yyval.etree) = exp_binop (LSHIFT , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 218:
+#line 825 "ldgram.y"
+ { (yyval.etree) = exp_binop (RSHIFT , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 219:
+#line 827 "ldgram.y"
+ { (yyval.etree) = exp_binop (EQ , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 220:
+#line 829 "ldgram.y"
+ { (yyval.etree) = exp_binop (NE , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 221:
+#line 831 "ldgram.y"
+ { (yyval.etree) = exp_binop (LE , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 222:
+#line 833 "ldgram.y"
+ { (yyval.etree) = exp_binop (GE , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 223:
+#line 835 "ldgram.y"
+ { (yyval.etree) = exp_binop ('<' , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 224:
+#line 837 "ldgram.y"
+ { (yyval.etree) = exp_binop ('>' , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 225:
+#line 839 "ldgram.y"
+ { (yyval.etree) = exp_binop ('&' , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 226:
+#line 841 "ldgram.y"
+ { (yyval.etree) = exp_binop ('^' , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 227:
+#line 843 "ldgram.y"
+ { (yyval.etree) = exp_binop ('|' , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 228:
+#line 845 "ldgram.y"
+ { (yyval.etree) = exp_trinop ('?' , (yyvsp[(1) - (5)].etree), (yyvsp[(3) - (5)].etree), (yyvsp[(5) - (5)].etree)); }
+ break;
+
+ case 229:
+#line 847 "ldgram.y"
+ { (yyval.etree) = exp_binop (ANDAND , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 230:
+#line 849 "ldgram.y"
+ { (yyval.etree) = exp_binop (OROR , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 231:
+#line 851 "ldgram.y"
+ { (yyval.etree) = exp_nameop (DEFINED, (yyvsp[(3) - (4)].name)); }
+ break;
+
+ case 232:
+#line 853 "ldgram.y"
+ { (yyval.etree) = exp_bigintop ((yyvsp[(1) - (1)].bigint).integer, (yyvsp[(1) - (1)].bigint).str); }
+ break;
+
+ case 233:
+#line 855 "ldgram.y"
+ { (yyval.etree) = exp_nameop (SIZEOF_HEADERS,0); }
+ break;
+
+ case 234:
+#line 858 "ldgram.y"
+ { (yyval.etree) = exp_nameop (ALIGNOF,(yyvsp[(3) - (4)].name)); }
+ break;
+
+ case 235:
+#line 860 "ldgram.y"
+ { (yyval.etree) = exp_nameop (SIZEOF,(yyvsp[(3) - (4)].name)); }
+ break;
+
+ case 236:
+#line 862 "ldgram.y"
+ { (yyval.etree) = exp_nameop (ADDR,(yyvsp[(3) - (4)].name)); }
+ break;
+
+ case 237:
+#line 864 "ldgram.y"
+ { (yyval.etree) = exp_nameop (LOADADDR,(yyvsp[(3) - (4)].name)); }
+ break;
+
+ case 238:
+#line 866 "ldgram.y"
+ { (yyval.etree) = exp_nameop (CONSTANT,(yyvsp[(3) - (4)].name)); }
+ break;
+
+ case 239:
+#line 868 "ldgram.y"
+ { (yyval.etree) = exp_unop (ABSOLUTE, (yyvsp[(3) - (4)].etree)); }
+ break;
+
+ case 240:
+#line 870 "ldgram.y"
+ { (yyval.etree) = exp_unop (ALIGN_K,(yyvsp[(3) - (4)].etree)); }
+ break;
+
+ case 241:
+#line 872 "ldgram.y"
+ { (yyval.etree) = exp_binop (ALIGN_K,(yyvsp[(3) - (6)].etree),(yyvsp[(5) - (6)].etree)); }
+ break;
+
+ case 242:
+#line 874 "ldgram.y"
+ { (yyval.etree) = exp_binop (DATA_SEGMENT_ALIGN, (yyvsp[(3) - (6)].etree), (yyvsp[(5) - (6)].etree)); }
+ break;
+
+ case 243:
+#line 876 "ldgram.y"
+ { (yyval.etree) = exp_binop (DATA_SEGMENT_RELRO_END, (yyvsp[(5) - (6)].etree), (yyvsp[(3) - (6)].etree)); }
+ break;
+
+ case 244:
+#line 878 "ldgram.y"
+ { (yyval.etree) = exp_unop (DATA_SEGMENT_END, (yyvsp[(3) - (4)].etree)); }
+ break;
+
+ case 245:
+#line 880 "ldgram.y"
+ { /* The operands to the expression node are
+ placed in the opposite order from the way
+ in which they appear in the script as
+ that allows us to reuse more code in
+ fold_binary. */
+ (yyval.etree) = exp_binop (SEGMENT_START,
+ (yyvsp[(5) - (6)].etree),
+ exp_nameop (NAME, (yyvsp[(3) - (6)].name))); }
+ break;
+
+ case 246:
+#line 889 "ldgram.y"
+ { (yyval.etree) = exp_unop (ALIGN_K,(yyvsp[(3) - (4)].etree)); }
+ break;
+
+ case 247:
+#line 891 "ldgram.y"
+ { (yyval.etree) = exp_nameop (NAME,(yyvsp[(1) - (1)].name)); }
+ break;
+
+ case 248:
+#line 893 "ldgram.y"
+ { (yyval.etree) = exp_binop (MAX_K, (yyvsp[(3) - (6)].etree), (yyvsp[(5) - (6)].etree) ); }
+ break;
+
+ case 249:
+#line 895 "ldgram.y"
+ { (yyval.etree) = exp_binop (MIN_K, (yyvsp[(3) - (6)].etree), (yyvsp[(5) - (6)].etree) ); }
+ break;
+
+ case 250:
+#line 897 "ldgram.y"
+ { (yyval.etree) = exp_assert ((yyvsp[(3) - (6)].etree), (yyvsp[(5) - (6)].name)); }
+ break;
+
+ case 251:
+#line 899 "ldgram.y"
+ { (yyval.etree) = exp_nameop (ORIGIN, (yyvsp[(3) - (4)].name)); }
+ break;
+
+ case 252:
+#line 901 "ldgram.y"
+ { (yyval.etree) = exp_nameop (LENGTH, (yyvsp[(3) - (4)].name)); }
+ break;
+
+ case 253:
+#line 906 "ldgram.y"
+ { (yyval.name) = (yyvsp[(3) - (3)].name); }
+ break;
+
+ case 254:
+#line 907 "ldgram.y"
+ { (yyval.name) = 0; }
+ break;
+
+ case 255:
+#line 911 "ldgram.y"
+ { (yyval.etree) = (yyvsp[(3) - (4)].etree); }
+ break;
+
+ case 256:
+#line 912 "ldgram.y"
+ { (yyval.etree) = 0; }
+ break;
+
+ case 257:
+#line 916 "ldgram.y"
+ { (yyval.etree) = (yyvsp[(3) - (4)].etree); }
+ break;
+
+ case 258:
+#line 917 "ldgram.y"
+ { (yyval.etree) = 0; }
+ break;
+
+ case 259:
+#line 921 "ldgram.y"
+ { (yyval.etree) = (yyvsp[(3) - (4)].etree); }
+ break;
+
+ case 260:
+#line 922 "ldgram.y"
+ { (yyval.etree) = 0; }
+ break;
+
+ case 261:
+#line 926 "ldgram.y"
+ { (yyval.token) = ONLY_IF_RO; }
+ break;
+
+ case 262:
+#line 927 "ldgram.y"
+ { (yyval.token) = ONLY_IF_RW; }
+ break;
+
+ case 263:
+#line 928 "ldgram.y"
+ { (yyval.token) = SPECIAL; }
+ break;
+
+ case 264:
+#line 929 "ldgram.y"
+ { (yyval.token) = 0; }
+ break;
+
+ case 265:
+#line 932 "ldgram.y"
+ { ldlex_expression(); }
+ break;
+
+ case 266:
+#line 936 "ldgram.y"
+ { ldlex_popstate (); ldlex_script (); }
+ break;
+
+ case 267:
+#line 939 "ldgram.y"
+ {
+ lang_enter_output_section_statement((yyvsp[(1) - (9)].name), (yyvsp[(3) - (9)].etree),
+ sectype,
+ (yyvsp[(5) - (9)].etree), (yyvsp[(6) - (9)].etree), (yyvsp[(4) - (9)].etree), (yyvsp[(8) - (9)].token));
+ }
+ break;
+
+ case 268:
+#line 945 "ldgram.y"
+ { ldlex_popstate (); ldlex_expression (); }
+ break;
+
+ case 269:
+#line 947 "ldgram.y"
+ {
+ ldlex_popstate ();
+ lang_leave_output_section_statement ((yyvsp[(17) - (17)].fill), (yyvsp[(14) - (17)].name), (yyvsp[(16) - (17)].section_phdr), (yyvsp[(15) - (17)].name));
+ }
+ break;
+
+ case 270:
+#line 952 "ldgram.y"
+ {}
+ break;
+
+ case 271:
+#line 954 "ldgram.y"
+ { ldlex_expression (); }
+ break;
+
+ case 272:
+#line 956 "ldgram.y"
+ { ldlex_popstate (); ldlex_script (); }
+ break;
+
+ case 273:
+#line 958 "ldgram.y"
+ {
+ lang_enter_overlay ((yyvsp[(3) - (8)].etree), (yyvsp[(6) - (8)].etree));
+ }
+ break;
+
+ case 274:
+#line 963 "ldgram.y"
+ { ldlex_popstate (); ldlex_expression (); }
+ break;
+
+ case 275:
+#line 965 "ldgram.y"
+ {
+ ldlex_popstate ();
+ lang_leave_overlay ((yyvsp[(5) - (16)].etree), (int) (yyvsp[(4) - (16)].integer),
+ (yyvsp[(16) - (16)].fill), (yyvsp[(13) - (16)].name), (yyvsp[(15) - (16)].section_phdr), (yyvsp[(14) - (16)].name));
+ }
+ break;
+
+ case 277:
+#line 975 "ldgram.y"
+ { ldlex_expression (); }
+ break;
+
+ case 278:
+#line 977 "ldgram.y"
+ {
+ ldlex_popstate ();
+ lang_add_assignment (exp_assop ('=', ".", (yyvsp[(3) - (3)].etree)));
+ }
+ break;
+
+ case 280:
+#line 983 "ldgram.y"
+ { ldlex_script (); ldfile_open_command_file((yyvsp[(2) - (2)].name)); }
+ break;
+
+ case 281:
+#line 985 "ldgram.y"
+ { ldlex_popstate (); }
+ break;
+
+ case 282:
+#line 989 "ldgram.y"
+ { sectype = noload_section; }
+ break;
+
+ case 283:
+#line 990 "ldgram.y"
+ { sectype = noalloc_section; }
+ break;
+
+ case 284:
+#line 991 "ldgram.y"
+ { sectype = noalloc_section; }
+ break;
+
+ case 285:
+#line 992 "ldgram.y"
+ { sectype = noalloc_section; }
+ break;
+
+ case 286:
+#line 993 "ldgram.y"
+ { sectype = noalloc_section; }
+ break;
+
+ case 288:
+#line 998 "ldgram.y"
+ { sectype = normal_section; }
+ break;
+
+ case 289:
+#line 999 "ldgram.y"
+ { sectype = normal_section; }
+ break;
+
+ case 290:
+#line 1003 "ldgram.y"
+ { (yyval.etree) = (yyvsp[(1) - (3)].etree); }
+ break;
+
+ case 291:
+#line 1004 "ldgram.y"
+ { (yyval.etree) = (etree_type *)NULL; }
+ break;
+
+ case 292:
+#line 1009 "ldgram.y"
+ { (yyval.etree) = (yyvsp[(3) - (6)].etree); }
+ break;
+
+ case 293:
+#line 1011 "ldgram.y"
+ { (yyval.etree) = (yyvsp[(3) - (10)].etree); }
+ break;
+
+ case 294:
+#line 1015 "ldgram.y"
+ { (yyval.etree) = (yyvsp[(1) - (2)].etree); }
+ break;
+
+ case 295:
+#line 1016 "ldgram.y"
+ { (yyval.etree) = (etree_type *) NULL; }
+ break;
+
+ case 296:
+#line 1021 "ldgram.y"
+ { (yyval.integer) = 0; }
+ break;
+
+ case 297:
+#line 1023 "ldgram.y"
+ { (yyval.integer) = 1; }
+ break;
+
+ case 298:
+#line 1028 "ldgram.y"
+ { (yyval.name) = (yyvsp[(2) - (2)].name); }
+ break;
+
+ case 299:
+#line 1029 "ldgram.y"
+ { (yyval.name) = DEFAULT_MEMORY_REGION; }
+ break;
+
+ case 300:
+#line 1034 "ldgram.y"
+ {
+ (yyval.section_phdr) = NULL;
+ }
+ break;
+
+ case 301:
+#line 1038 "ldgram.y"
+ {
+ struct lang_output_section_phdr_list *n;
+
+ n = ((struct lang_output_section_phdr_list *)
+ xmalloc (sizeof *n));
+ n->name = (yyvsp[(3) - (3)].name);
+ n->used = FALSE;
+ n->next = (yyvsp[(1) - (3)].section_phdr);
+ (yyval.section_phdr) = n;
+ }
+ break;
+
+ case 303:
+#line 1054 "ldgram.y"
+ {
+ ldlex_script ();
+ lang_enter_overlay_section ((yyvsp[(2) - (2)].name));
+ }
+ break;
+
+ case 304:
+#line 1059 "ldgram.y"
+ { ldlex_popstate (); ldlex_expression (); }
+ break;
+
+ case 305:
+#line 1061 "ldgram.y"
+ {
+ ldlex_popstate ();
+ lang_leave_overlay_section ((yyvsp[(9) - (9)].fill), (yyvsp[(8) - (9)].section_phdr));
+ }
+ break;
+
+ case 310:
+#line 1078 "ldgram.y"
+ { ldlex_expression (); }
+ break;
+
+ case 311:
+#line 1079 "ldgram.y"
+ { ldlex_popstate (); }
+ break;
+
+ case 312:
+#line 1081 "ldgram.y"
+ {
+ lang_new_phdr ((yyvsp[(1) - (6)].name), (yyvsp[(3) - (6)].etree), (yyvsp[(4) - (6)].phdr).filehdr, (yyvsp[(4) - (6)].phdr).phdrs, (yyvsp[(4) - (6)].phdr).at,
+ (yyvsp[(4) - (6)].phdr).flags);
+ }
+ break;
+
+ case 313:
+#line 1089 "ldgram.y"
+ {
+ (yyval.etree) = (yyvsp[(1) - (1)].etree);
+
+ if ((yyvsp[(1) - (1)].etree)->type.node_class == etree_name
+ && (yyvsp[(1) - (1)].etree)->type.node_code == NAME)
+ {
+ const char *s;
+ unsigned int i;
+ static const char * const phdr_types[] =
+ {
+ "PT_NULL", "PT_LOAD", "PT_DYNAMIC",
+ "PT_INTERP", "PT_NOTE", "PT_SHLIB",
+ "PT_PHDR", "PT_TLS"
+ };
+
+ s = (yyvsp[(1) - (1)].etree)->name.name;
+ for (i = 0;
+ i < sizeof phdr_types / sizeof phdr_types[0];
+ i++)
+ if (strcmp (s, phdr_types[i]) == 0)
+ {
+ (yyval.etree) = exp_intop (i);
+ break;
+ }
+ if (i == sizeof phdr_types / sizeof phdr_types[0])
+ {
+ if (strcmp (s, "PT_GNU_EH_FRAME") == 0)
+ (yyval.etree) = exp_intop (0x6474e550);
+ else if (strcmp (s, "PT_GNU_STACK") == 0)
+ (yyval.etree) = exp_intop (0x6474e551);
+ else
+ {
+ einfo (_("\
+%X%P:%S: unknown phdr type `%s' (try integer literal)\n"),
+ s);
+ (yyval.etree) = exp_intop (0);
+ }
+ }
+ }
+ }
+ break;
+
+ case 314:
+#line 1133 "ldgram.y"
+ {
+ memset (&(yyval.phdr), 0, sizeof (struct phdr_info));
+ }
+ break;
+
+ case 315:
+#line 1137 "ldgram.y"
+ {
+ (yyval.phdr) = (yyvsp[(3) - (3)].phdr);
+ if (strcmp ((yyvsp[(1) - (3)].name), "FILEHDR") == 0 && (yyvsp[(2) - (3)].etree) == NULL)
+ (yyval.phdr).filehdr = TRUE;
+ else if (strcmp ((yyvsp[(1) - (3)].name), "PHDRS") == 0 && (yyvsp[(2) - (3)].etree) == NULL)
+ (yyval.phdr).phdrs = TRUE;
+ else if (strcmp ((yyvsp[(1) - (3)].name), "FLAGS") == 0 && (yyvsp[(2) - (3)].etree) != NULL)
+ (yyval.phdr).flags = (yyvsp[(2) - (3)].etree);
+ else
+ einfo (_("%X%P:%S: PHDRS syntax error at `%s'\n"), (yyvsp[(1) - (3)].name));
+ }
+ break;
+
+ case 316:
+#line 1149 "ldgram.y"
+ {
+ (yyval.phdr) = (yyvsp[(5) - (5)].phdr);
+ (yyval.phdr).at = (yyvsp[(3) - (5)].etree);
+ }
+ break;
+
+ case 317:
+#line 1157 "ldgram.y"
+ {
+ (yyval.etree) = NULL;
+ }
+ break;
+
+ case 318:
+#line 1161 "ldgram.y"
+ {
+ (yyval.etree) = (yyvsp[(2) - (3)].etree);
+ }
+ break;
+
+ case 319:
+#line 1167 "ldgram.y"
+ {
+ ldlex_version_file ();
+ PUSH_ERROR (_("dynamic list"));
+ }
+ break;
+
+ case 320:
+#line 1172 "ldgram.y"
+ {
+ ldlex_popstate ();
+ POP_ERROR ();
+ }
+ break;
+
+ case 324:
+#line 1189 "ldgram.y"
+ {
+ lang_append_dynamic_list ((yyvsp[(1) - (2)].versyms));
+ }
+ break;
+
+ case 325:
+#line 1197 "ldgram.y"
+ {
+ ldlex_version_file ();
+ PUSH_ERROR (_("VERSION script"));
+ }
+ break;
+
+ case 326:
+#line 1202 "ldgram.y"
+ {
+ ldlex_popstate ();
+ POP_ERROR ();
+ }
+ break;
+
+ case 327:
+#line 1211 "ldgram.y"
+ {
+ ldlex_version_script ();
+ }
+ break;
+
+ case 328:
+#line 1215 "ldgram.y"
+ {
+ ldlex_popstate ();
+ }
+ break;
+
+ case 331:
+#line 1227 "ldgram.y"
+ {
+ lang_register_vers_node (NULL, (yyvsp[(2) - (4)].versnode), NULL);
+ }
+ break;
+
+ case 332:
+#line 1231 "ldgram.y"
+ {
+ lang_register_vers_node ((yyvsp[(1) - (5)].name), (yyvsp[(3) - (5)].versnode), NULL);
+ }
+ break;
+
+ case 333:
+#line 1235 "ldgram.y"
+ {
+ lang_register_vers_node ((yyvsp[(1) - (6)].name), (yyvsp[(3) - (6)].versnode), (yyvsp[(5) - (6)].deflist));
+ }
+ break;
+
+ case 334:
+#line 1242 "ldgram.y"
+ {
+ (yyval.deflist) = lang_add_vers_depend (NULL, (yyvsp[(1) - (1)].name));
+ }
+ break;
+
+ case 335:
+#line 1246 "ldgram.y"
+ {
+ (yyval.deflist) = lang_add_vers_depend ((yyvsp[(1) - (2)].deflist), (yyvsp[(2) - (2)].name));
+ }
+ break;
+
+ case 336:
+#line 1253 "ldgram.y"
+ {
+ (yyval.versnode) = lang_new_vers_node (NULL, NULL);
+ }
+ break;
+
+ case 337:
+#line 1257 "ldgram.y"
+ {
+ (yyval.versnode) = lang_new_vers_node ((yyvsp[(1) - (2)].versyms), NULL);
+ }
+ break;
+
+ case 338:
+#line 1261 "ldgram.y"
+ {
+ (yyval.versnode) = lang_new_vers_node ((yyvsp[(3) - (4)].versyms), NULL);
+ }
+ break;
+
+ case 339:
+#line 1265 "ldgram.y"
+ {
+ (yyval.versnode) = lang_new_vers_node (NULL, (yyvsp[(3) - (4)].versyms));
+ }
+ break;
+
+ case 340:
+#line 1269 "ldgram.y"
+ {
+ (yyval.versnode) = lang_new_vers_node ((yyvsp[(3) - (8)].versyms), (yyvsp[(7) - (8)].versyms));
+ }
+ break;
+
+ case 341:
+#line 1276 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern (NULL, (yyvsp[(1) - (1)].name), ldgram_vers_current_lang, FALSE);
+ }
+ break;
+
+ case 342:
+#line 1280 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern (NULL, (yyvsp[(1) - (1)].name), ldgram_vers_current_lang, TRUE);
+ }
+ break;
+
+ case 343:
+#line 1284 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern ((yyvsp[(1) - (3)].versyms), (yyvsp[(3) - (3)].name), ldgram_vers_current_lang, FALSE);
+ }
+ break;
+
+ case 344:
+#line 1288 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern ((yyvsp[(1) - (3)].versyms), (yyvsp[(3) - (3)].name), ldgram_vers_current_lang, TRUE);
+ }
+ break;
+
+ case 345:
+#line 1292 "ldgram.y"
+ {
+ (yyval.name) = ldgram_vers_current_lang;
+ ldgram_vers_current_lang = (yyvsp[(4) - (5)].name);
+ }
+ break;
+
+ case 346:
+#line 1297 "ldgram.y"
+ {
+ struct bfd_elf_version_expr *pat;
+ for (pat = (yyvsp[(7) - (9)].versyms); pat->next != NULL; pat = pat->next);
+ pat->next = (yyvsp[(1) - (9)].versyms);
+ (yyval.versyms) = (yyvsp[(7) - (9)].versyms);
+ ldgram_vers_current_lang = (yyvsp[(6) - (9)].name);
+ }
+ break;
+
+ case 347:
+#line 1305 "ldgram.y"
+ {
+ (yyval.name) = ldgram_vers_current_lang;
+ ldgram_vers_current_lang = (yyvsp[(2) - (3)].name);
+ }
+ break;
+
+ case 348:
+#line 1310 "ldgram.y"
+ {
+ (yyval.versyms) = (yyvsp[(5) - (7)].versyms);
+ ldgram_vers_current_lang = (yyvsp[(4) - (7)].name);
+ }
+ break;
+
+ case 349:
+#line 1315 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern (NULL, "global", ldgram_vers_current_lang, FALSE);
+ }
+ break;
+
+ case 350:
+#line 1319 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern ((yyvsp[(1) - (3)].versyms), "global", ldgram_vers_current_lang, FALSE);
+ }
+ break;
+
+ case 351:
+#line 1323 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern (NULL, "local", ldgram_vers_current_lang, FALSE);
+ }
+ break;
+
+ case 352:
+#line 1327 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern ((yyvsp[(1) - (3)].versyms), "local", ldgram_vers_current_lang, FALSE);
+ }
+ break;
+
+ case 353:
+#line 1331 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern (NULL, "extern", ldgram_vers_current_lang, FALSE);
+ }
+ break;
+
+ case 354:
+#line 1335 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern ((yyvsp[(1) - (3)].versyms), "extern", ldgram_vers_current_lang, FALSE);
+ }
+ break;
+
+
+/* Line 1267 of yacc.c. */
+#line 4268 "ldgram.c"
+ default: break;
+ }
+ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+
+ *++yyvsp = yyval;
+
+
+ /* Now `shift' the result of the reduction. Determine what state
+ that goes to, based on the state we popped back to and the rule
+ number reduced by. */
+
+ yyn = yyr1[yyn];
+
+ yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+ if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+ yystate = yytable[yystate];
+ else
+ yystate = yydefgoto[yyn - YYNTOKENS];
+
+ goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+ /* If not already recovering from an error, report this error. */
+ if (!yyerrstatus)
+ {
+ ++yynerrs;
+#if ! YYERROR_VERBOSE
+ yyerror (YY_("syntax error"));
+#else
+ {
+ YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+ if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+ {
+ YYSIZE_T yyalloc = 2 * yysize;
+ if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+ yyalloc = YYSTACK_ALLOC_MAXIMUM;
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+ yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+ if (yymsg)
+ yymsg_alloc = yyalloc;
+ else
+ {
+ yymsg = yymsgbuf;
+ yymsg_alloc = sizeof yymsgbuf;
+ }
+ }
+
+ if (0 < yysize && yysize <= yymsg_alloc)
+ {
+ (void) yysyntax_error (yymsg, yystate, yychar);
+ yyerror (yymsg);
+ }
+ else
+ {
+ yyerror (YY_("syntax error"));
+ if (yysize != 0)
+ goto yyexhaustedlab;
+ }
+ }
+#endif
+ }
+
+
+
+ if (yyerrstatus == 3)
+ {
+ /* If just tried and failed to reuse look-ahead token after an
+ error, discard it. */
+
+ if (yychar <= YYEOF)
+ {
+ /* Return failure if at end of input. */
+ if (yychar == YYEOF)
+ YYABORT;
+ }
+ else
+ {
+ yydestruct ("Error: discarding",
+ yytoken, &yylval);
+ yychar = YYEMPTY;
+ }
+ }
+
+ /* Else will try to reuse look-ahead token after shifting the error
+ token. */
+ goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR. |
+`---------------------------------------------------*/
+yyerrorlab:
+
+ /* Pacify compilers like GCC when the user code never invokes
+ YYERROR and the label yyerrorlab therefore never appears in user
+ code. */
+ if (/*CONSTCOND*/ 0)
+ goto yyerrorlab;
+
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYERROR. */
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+ yystate = *yyssp;
+ goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR. |
+`-------------------------------------------------------------*/
+yyerrlab1:
+ yyerrstatus = 3; /* Each real token shifted decrements this. */
+
+ for (;;)
+ {
+ yyn = yypact[yystate];
+ if (yyn != YYPACT_NINF)
+ {
+ yyn += YYTERROR;
+ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+ {
+ yyn = yytable[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
+
+ /* Pop the current state because it cannot handle the error token. */
+ if (yyssp == yyss)
+ YYABORT;
+
+
+ yydestruct ("Error: popping",
+ yystos[yystate], yyvsp);
+ YYPOPSTACK (1);
+ yystate = *yyssp;
+ YY_STACK_PRINT (yyss, yyssp);
+ }
+
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
+ *++yyvsp = yylval;
+
+
+ /* Shift the error token. */
+ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here. |
+`-------------------------------------*/
+yyacceptlab:
+ yyresult = 0;
+ goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here. |
+`-----------------------------------*/
+yyabortlab:
+ yyresult = 1;
+ goto yyreturn;
+
+#ifndef yyoverflow
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here. |
+`-------------------------------------------------*/
+yyexhaustedlab:
+ yyerror (YY_("memory exhausted"));
+ yyresult = 2;
+ /* Fall through. */
+#endif
+
+yyreturn:
+ if (yychar != YYEOF && yychar != YYEMPTY)
+ yydestruct ("Cleanup: discarding lookahead",
+ yytoken, &yylval);
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYABORT or YYACCEPT. */
+ YYPOPSTACK (yylen);
+ YY_STACK_PRINT (yyss, yyssp);
+ while (yyssp != yyss)
+ {
+ yydestruct ("Cleanup: popping",
+ yystos[*yyssp], yyvsp);
+ YYPOPSTACK (1);
+ }
+#ifndef yyoverflow
+ if (yyss != yyssa)
+ YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+#endif
+ /* Make sure YYID is used. */
+ return YYID (yyresult);
+}
+
+
+#line 1345 "ldgram.y"
+
+void
+yyerror(arg)
+ const char *arg;
+{
+ if (ldfile_assumed_script)
+ einfo (_("%P:%s: file format not recognized; treating as linker script\n"),
+ ldfile_input_filename);
+ if (error_index > 0 && error_index < ERROR_NAME_MAX)
+ einfo ("%P%F:%S: %s in %s\n", arg, error_names[error_index-1]);
+ else
+ einfo ("%P%F:%S: %s\n", arg);
+}
+
diff --git a/binutils-2.21/ld/ldgram.h b/binutils-2.21/ld/ldgram.h
new file mode 100644
index 0000000..25b847f
--- /dev/null
+++ b/binutils-2.21/ld/ldgram.h
@@ -0,0 +1,331 @@
+/* A Bison parser, made by GNU Bison 2.3. */
+
+/* Skeleton interface for Bison's Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Free Software Foundation, Inc.
+
+ 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, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+/* Tokens. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ INT = 258,
+ NAME = 259,
+ LNAME = 260,
+ OREQ = 261,
+ ANDEQ = 262,
+ RSHIFTEQ = 263,
+ LSHIFTEQ = 264,
+ DIVEQ = 265,
+ MULTEQ = 266,
+ MINUSEQ = 267,
+ PLUSEQ = 268,
+ OROR = 269,
+ ANDAND = 270,
+ NE = 271,
+ EQ = 272,
+ GE = 273,
+ LE = 274,
+ RSHIFT = 275,
+ LSHIFT = 276,
+ UNARY = 277,
+ END = 278,
+ ALIGN_K = 279,
+ BLOCK = 280,
+ BIND = 281,
+ QUAD = 282,
+ SQUAD = 283,
+ LONG = 284,
+ SHORT = 285,
+ BYTE = 286,
+ SECTIONS = 287,
+ PHDRS = 288,
+ INSERT_K = 289,
+ AFTER = 290,
+ BEFORE = 291,
+ DATA_SEGMENT_ALIGN = 292,
+ DATA_SEGMENT_RELRO_END = 293,
+ DATA_SEGMENT_END = 294,
+ SORT_BY_NAME = 295,
+ SORT_BY_ALIGNMENT = 296,
+ SIZEOF_HEADERS = 297,
+ OUTPUT_FORMAT = 298,
+ FORCE_COMMON_ALLOCATION = 299,
+ OUTPUT_ARCH = 300,
+ INHIBIT_COMMON_ALLOCATION = 301,
+ SEGMENT_START = 302,
+ INCLUDE = 303,
+ MEMORY = 304,
+ REGION_ALIAS = 305,
+ NOLOAD = 306,
+ DSECT = 307,
+ COPY = 308,
+ INFO = 309,
+ OVERLAY = 310,
+ DEFINED = 311,
+ TARGET_K = 312,
+ SEARCH_DIR = 313,
+ MAP = 314,
+ ENTRY = 315,
+ NEXT = 316,
+ SIZEOF = 317,
+ ALIGNOF = 318,
+ ADDR = 319,
+ LOADADDR = 320,
+ MAX_K = 321,
+ MIN_K = 322,
+ STARTUP = 323,
+ HLL = 324,
+ SYSLIB = 325,
+ FLOAT = 326,
+ NOFLOAT = 327,
+ NOCROSSREFS = 328,
+ ORIGIN = 329,
+ FILL = 330,
+ LENGTH = 331,
+ CREATE_OBJECT_SYMBOLS = 332,
+ INPUT = 333,
+ GROUP = 334,
+ OUTPUT = 335,
+ CONSTRUCTORS = 336,
+ ALIGNMOD = 337,
+ AT = 338,
+ SUBALIGN = 339,
+ PROVIDE = 340,
+ PROVIDE_HIDDEN = 341,
+ AS_NEEDED = 342,
+ CHIP = 343,
+ LIST = 344,
+ SECT = 345,
+ ABSOLUTE = 346,
+ LOAD = 347,
+ NEWLINE = 348,
+ ENDWORD = 349,
+ ORDER = 350,
+ NAMEWORD = 351,
+ ASSERT_K = 352,
+ FORMAT = 353,
+ PUBLIC = 354,
+ DEFSYMEND = 355,
+ BASE = 356,
+ ALIAS = 357,
+ TRUNCATE = 358,
+ REL = 359,
+ INPUT_SCRIPT = 360,
+ INPUT_MRI_SCRIPT = 361,
+ INPUT_DEFSYM = 362,
+ CASE = 363,
+ EXTERN = 364,
+ START = 365,
+ VERS_TAG = 366,
+ VERS_IDENTIFIER = 367,
+ GLOBAL = 368,
+ LOCAL = 369,
+ VERSIONK = 370,
+ INPUT_VERSION_SCRIPT = 371,
+ KEEP = 372,
+ ONLY_IF_RO = 373,
+ ONLY_IF_RW = 374,
+ SPECIAL = 375,
+ EXCLUDE_FILE = 376,
+ CONSTANT = 377,
+ INPUT_DYNAMIC_LIST = 378
+ };
+#endif
+/* Tokens. */
+#define INT 258
+#define NAME 259
+#define LNAME 260
+#define OREQ 261
+#define ANDEQ 262
+#define RSHIFTEQ 263
+#define LSHIFTEQ 264
+#define DIVEQ 265
+#define MULTEQ 266
+#define MINUSEQ 267
+#define PLUSEQ 268
+#define OROR 269
+#define ANDAND 270
+#define NE 271
+#define EQ 272
+#define GE 273
+#define LE 274
+#define RSHIFT 275
+#define LSHIFT 276
+#define UNARY 277
+#define END 278
+#define ALIGN_K 279
+#define BLOCK 280
+#define BIND 281
+#define QUAD 282
+#define SQUAD 283
+#define LONG 284
+#define SHORT 285
+#define BYTE 286
+#define SECTIONS 287
+#define PHDRS 288
+#define INSERT_K 289
+#define AFTER 290
+#define BEFORE 291
+#define DATA_SEGMENT_ALIGN 292
+#define DATA_SEGMENT_RELRO_END 293
+#define DATA_SEGMENT_END 294
+#define SORT_BY_NAME 295
+#define SORT_BY_ALIGNMENT 296
+#define SIZEOF_HEADERS 297
+#define OUTPUT_FORMAT 298
+#define FORCE_COMMON_ALLOCATION 299
+#define OUTPUT_ARCH 300
+#define INHIBIT_COMMON_ALLOCATION 301
+#define SEGMENT_START 302
+#define INCLUDE 303
+#define MEMORY 304
+#define REGION_ALIAS 305
+#define NOLOAD 306
+#define DSECT 307
+#define COPY 308
+#define INFO 309
+#define OVERLAY 310
+#define DEFINED 311
+#define TARGET_K 312
+#define SEARCH_DIR 313
+#define MAP 314
+#define ENTRY 315
+#define NEXT 316
+#define SIZEOF 317
+#define ALIGNOF 318
+#define ADDR 319
+#define LOADADDR 320
+#define MAX_K 321
+#define MIN_K 322
+#define STARTUP 323
+#define HLL 324
+#define SYSLIB 325
+#define FLOAT 326
+#define NOFLOAT 327
+#define NOCROSSREFS 328
+#define ORIGIN 329
+#define FILL 330
+#define LENGTH 331
+#define CREATE_OBJECT_SYMBOLS 332
+#define INPUT 333
+#define GROUP 334
+#define OUTPUT 335
+#define CONSTRUCTORS 336
+#define ALIGNMOD 337
+#define AT 338
+#define SUBALIGN 339
+#define PROVIDE 340
+#define PROVIDE_HIDDEN 341
+#define AS_NEEDED 342
+#define CHIP 343
+#define LIST 344
+#define SECT 345
+#define ABSOLUTE 346
+#define LOAD 347
+#define NEWLINE 348
+#define ENDWORD 349
+#define ORDER 350
+#define NAMEWORD 351
+#define ASSERT_K 352
+#define FORMAT 353
+#define PUBLIC 354
+#define DEFSYMEND 355
+#define BASE 356
+#define ALIAS 357
+#define TRUNCATE 358
+#define REL 359
+#define INPUT_SCRIPT 360
+#define INPUT_MRI_SCRIPT 361
+#define INPUT_DEFSYM 362
+#define CASE 363
+#define EXTERN 364
+#define START 365
+#define VERS_TAG 366
+#define VERS_IDENTIFIER 367
+#define GLOBAL 368
+#define LOCAL 369
+#define VERSIONK 370
+#define INPUT_VERSION_SCRIPT 371
+#define KEEP 372
+#define ONLY_IF_RO 373
+#define ONLY_IF_RW 374
+#define SPECIAL 375
+#define EXCLUDE_FILE 376
+#define CONSTANT 377
+#define INPUT_DYNAMIC_LIST 378
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+#line 62 "ldgram.y"
+{
+ bfd_vma integer;
+ struct big_int
+ {
+ bfd_vma integer;
+ char *str;
+ } bigint;
+ fill_type *fill;
+ char *name;
+ const char *cname;
+ struct wildcard_spec wildcard;
+ struct wildcard_list *wildcard_list;
+ struct name_list *name_list;
+ int token;
+ union etree_union *etree;
+ struct phdr_info
+ {
+ bfd_boolean filehdr;
+ bfd_boolean phdrs;
+ union etree_union *at;
+ union etree_union *flags;
+ } phdr;
+ struct lang_nocrossref *nocrossref;
+ struct lang_output_section_phdr_list *section_phdr;
+ struct bfd_elf_version_deps *deflist;
+ struct bfd_elf_version_expr *versyms;
+ struct bfd_elf_version_tree *versnode;
+}
+/* Line 1529 of yacc.c. */
+#line 324 "ldgram.h"
+ YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+extern YYSTYPE yylval;
+
diff --git a/binutils-2.21/ld/ldgram.y b/binutils-2.21/ld/ldgram.y
new file mode 100644
index 0000000..69a84c7
--- /dev/null
+++ b/binutils-2.21/ld/ldgram.y
@@ -0,0 +1,1357 @@
+/* A YACC grammar to parse a superset of the AT&T linker scripting language.
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+ Free Software Foundation, Inc.
+ Written by Steve Chamberlain of Cygnus Support (steve@cygnus.com).
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+%{
+/*
+
+ */
+
+#define DONTDECLARE_MALLOC
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+#include "ld.h"
+#include "ldexp.h"
+#include "ldver.h"
+#include "ldlang.h"
+#include "ldfile.h"
+#include "ldemul.h"
+#include "ldmisc.h"
+#include "ldmain.h"
+#include "mri.h"
+#include "ldctor.h"
+#include "ldlex.h"
+
+#ifndef YYDEBUG
+#define YYDEBUG 1
+#endif
+
+static enum section_type sectype;
+static lang_memory_region_type *region;
+
+bfd_boolean ldgram_had_keep = FALSE;
+char *ldgram_vers_current_lang = NULL;
+
+#define ERROR_NAME_MAX 20
+static char *error_names[ERROR_NAME_MAX];
+static int error_index;
+#define PUSH_ERROR(x) if (error_index < ERROR_NAME_MAX) error_names[error_index] = x; error_index++;
+#define POP_ERROR() error_index--;
+%}
+%union {
+ bfd_vma integer;
+ struct big_int
+ {
+ bfd_vma integer;
+ char *str;
+ } bigint;
+ fill_type *fill;
+ char *name;
+ const char *cname;
+ struct wildcard_spec wildcard;
+ struct wildcard_list *wildcard_list;
+ struct name_list *name_list;
+ int token;
+ union etree_union *etree;
+ struct phdr_info
+ {
+ bfd_boolean filehdr;
+ bfd_boolean phdrs;
+ union etree_union *at;
+ union etree_union *flags;
+ } phdr;
+ struct lang_nocrossref *nocrossref;
+ struct lang_output_section_phdr_list *section_phdr;
+ struct bfd_elf_version_deps *deflist;
+ struct bfd_elf_version_expr *versyms;
+ struct bfd_elf_version_tree *versnode;
+}
+
+%type <etree> exp opt_exp_with_type mustbe_exp opt_at phdr_type phdr_val
+%type <etree> opt_exp_without_type opt_subalign opt_align
+%type <fill> fill_opt fill_exp
+%type <name_list> exclude_name_list
+%type <wildcard_list> file_NAME_list
+%type <name> memspec_opt casesymlist
+%type <name> memspec_at_opt
+%type <cname> wildcard_name
+%type <wildcard> wildcard_spec
+%token <bigint> INT
+%token <name> NAME LNAME
+%type <integer> length
+%type <phdr> phdr_qualifiers
+%type <nocrossref> nocrossref_list
+%type <section_phdr> phdr_opt
+%type <integer> opt_nocrossrefs
+
+%right <token> PLUSEQ MINUSEQ MULTEQ DIVEQ '=' LSHIFTEQ RSHIFTEQ ANDEQ OREQ
+%right <token> '?' ':'
+%left <token> OROR
+%left <token> ANDAND
+%left <token> '|'
+%left <token> '^'
+%left <token> '&'
+%left <token> EQ NE
+%left <token> '<' '>' LE GE
+%left <token> LSHIFT RSHIFT
+
+%left <token> '+' '-'
+%left <token> '*' '/' '%'
+
+%right UNARY
+%token END
+%left <token> '('
+%token <token> ALIGN_K BLOCK BIND QUAD SQUAD LONG SHORT BYTE
+%token SECTIONS PHDRS INSERT_K AFTER BEFORE
+%token DATA_SEGMENT_ALIGN DATA_SEGMENT_RELRO_END DATA_SEGMENT_END
+%token SORT_BY_NAME SORT_BY_ALIGNMENT
+%token '{' '}'
+%token SIZEOF_HEADERS OUTPUT_FORMAT FORCE_COMMON_ALLOCATION OUTPUT_ARCH
+%token INHIBIT_COMMON_ALLOCATION
+%token SEGMENT_START
+%token INCLUDE
+%token MEMORY
+%token REGION_ALIAS
+%token NOLOAD DSECT COPY INFO OVERLAY
+%token DEFINED TARGET_K SEARCH_DIR MAP ENTRY
+%token <integer> NEXT
+%token SIZEOF ALIGNOF ADDR LOADADDR MAX_K MIN_K
+%token STARTUP HLL SYSLIB FLOAT NOFLOAT NOCROSSREFS
+%token ORIGIN FILL
+%token LENGTH CREATE_OBJECT_SYMBOLS INPUT GROUP OUTPUT CONSTRUCTORS
+%token ALIGNMOD AT SUBALIGN PROVIDE PROVIDE_HIDDEN AS_NEEDED
+%type <token> assign_op atype attributes_opt sect_constraint
+%type <name> filename
+%token CHIP LIST SECT ABSOLUTE LOAD NEWLINE ENDWORD ORDER NAMEWORD ASSERT_K
+%token FORMAT PUBLIC DEFSYMEND BASE ALIAS TRUNCATE REL
+%token INPUT_SCRIPT INPUT_MRI_SCRIPT INPUT_DEFSYM CASE EXTERN START
+%token <name> VERS_TAG VERS_IDENTIFIER
+%token GLOBAL LOCAL VERSIONK INPUT_VERSION_SCRIPT
+%token KEEP ONLY_IF_RO ONLY_IF_RW SPECIAL
+%token EXCLUDE_FILE
+%token CONSTANT
+%type <versyms> vers_defns
+%type <versnode> vers_tag
+%type <deflist> verdep
+%token INPUT_DYNAMIC_LIST
+
+%%
+
+file:
+ INPUT_SCRIPT script_file
+ | INPUT_MRI_SCRIPT mri_script_file
+ | INPUT_VERSION_SCRIPT version_script_file
+ | INPUT_DYNAMIC_LIST dynamic_list_file
+ | INPUT_DEFSYM defsym_expr
+ ;
+
+
+filename: NAME;
+
+
+defsym_expr:
+ { ldlex_defsym(); }
+ NAME '=' exp
+ {
+ ldlex_popstate();
+ lang_add_assignment(exp_assop($3,$2,$4));
+ }
+ ;
+
+/* SYNTAX WITHIN AN MRI SCRIPT FILE */
+mri_script_file:
+ {
+ ldlex_mri_script ();
+ PUSH_ERROR (_("MRI style script"));
+ }
+ mri_script_lines
+ {
+ ldlex_popstate ();
+ mri_draw_tree ();
+ POP_ERROR ();
+ }
+ ;
+
+mri_script_lines:
+ mri_script_lines mri_script_command NEWLINE
+ |
+ ;
+
+mri_script_command:
+ CHIP exp
+ | CHIP exp ',' exp
+ | NAME {
+ einfo(_("%P%F: unrecognised keyword in MRI style script '%s'\n"),$1);
+ }
+ | LIST {
+ config.map_filename = "-";
+ }
+ | ORDER ordernamelist
+ | ENDWORD
+ | PUBLIC NAME '=' exp
+ { mri_public($2, $4); }
+ | PUBLIC NAME ',' exp
+ { mri_public($2, $4); }
+ | PUBLIC NAME exp
+ { mri_public($2, $3); }
+ | FORMAT NAME
+ { mri_format($2); }
+ | SECT NAME ',' exp
+ { mri_output_section($2, $4);}
+ | SECT NAME exp
+ { mri_output_section($2, $3);}
+ | SECT NAME '=' exp
+ { mri_output_section($2, $4);}
+ | ALIGN_K NAME '=' exp
+ { mri_align($2,$4); }
+ | ALIGN_K NAME ',' exp
+ { mri_align($2,$4); }
+ | ALIGNMOD NAME '=' exp
+ { mri_alignmod($2,$4); }
+ | ALIGNMOD NAME ',' exp
+ { mri_alignmod($2,$4); }
+ | ABSOLUTE mri_abs_name_list
+ | LOAD mri_load_name_list
+ | NAMEWORD NAME
+ { mri_name($2); }
+ | ALIAS NAME ',' NAME
+ { mri_alias($2,$4,0);}
+ | ALIAS NAME ',' INT
+ { mri_alias ($2, 0, (int) $4.integer); }
+ | BASE exp
+ { mri_base($2); }
+ | TRUNCATE INT
+ { mri_truncate ((unsigned int) $2.integer); }
+ | CASE casesymlist
+ | EXTERN extern_name_list
+ | INCLUDE filename
+ { ldlex_script (); ldfile_open_command_file($2); }
+ mri_script_lines END
+ { ldlex_popstate (); }
+ | START NAME
+ { lang_add_entry ($2, FALSE); }
+ |
+ ;
+
+ordernamelist:
+ ordernamelist ',' NAME { mri_order($3); }
+ | ordernamelist NAME { mri_order($2); }
+ |
+ ;
+
+mri_load_name_list:
+ NAME
+ { mri_load($1); }
+ | mri_load_name_list ',' NAME { mri_load($3); }
+ ;
+
+mri_abs_name_list:
+ NAME
+ { mri_only_load($1); }
+ | mri_abs_name_list ',' NAME
+ { mri_only_load($3); }
+ ;
+
+casesymlist:
+ /* empty */ { $$ = NULL; }
+ | NAME
+ | casesymlist ',' NAME
+ ;
+
+/* Parsed as expressions so that commas separate entries */
+extern_name_list:
+ { ldlex_expression (); }
+ extern_name_list_body
+ { ldlex_popstate (); }
+
+extern_name_list_body:
+ NAME
+ { ldlang_add_undef ($1, FALSE); }
+ | extern_name_list_body NAME
+ { ldlang_add_undef ($2, FALSE); }
+ | extern_name_list_body ',' NAME
+ { ldlang_add_undef ($3, FALSE); }
+ ;
+
+script_file:
+ { ldlex_both(); }
+ ifile_list
+ { ldlex_popstate(); }
+ ;
+
+ifile_list:
+ ifile_list ifile_p1
+ |
+ ;
+
+
+ifile_p1:
+ memory
+ | sections
+ | phdrs
+ | startup
+ | high_level_library
+ | low_level_library
+ | floating_point_support
+ | statement_anywhere
+ | version
+ | ';'
+ | TARGET_K '(' NAME ')'
+ { lang_add_target($3); }
+ | SEARCH_DIR '(' filename ')'
+ { ldfile_add_library_path ($3, FALSE); }
+ | OUTPUT '(' filename ')'
+ { lang_add_output($3, 1); }
+ | OUTPUT_FORMAT '(' NAME ')'
+ { lang_add_output_format ($3, (char *) NULL,
+ (char *) NULL, 1); }
+ | OUTPUT_FORMAT '(' NAME ',' NAME ',' NAME ')'
+ { lang_add_output_format ($3, $5, $7, 1); }
+ | OUTPUT_ARCH '(' NAME ')'
+ { ldfile_set_output_arch ($3, bfd_arch_unknown); }
+ | FORCE_COMMON_ALLOCATION
+ { command_line.force_common_definition = TRUE ; }
+ | INHIBIT_COMMON_ALLOCATION
+ { command_line.inhibit_common_definition = TRUE ; }
+ | INPUT '(' input_list ')'
+ | GROUP
+ { lang_enter_group (); }
+ '(' input_list ')'
+ { lang_leave_group (); }
+ | MAP '(' filename ')'
+ { lang_add_map($3); }
+ | INCLUDE filename
+ { ldlex_script (); ldfile_open_command_file($2); }
+ ifile_list END
+ { ldlex_popstate (); }
+ | NOCROSSREFS '(' nocrossref_list ')'
+ {
+ lang_add_nocrossref ($3);
+ }
+ | EXTERN '(' extern_name_list ')'
+ | INSERT_K AFTER NAME
+ { lang_add_insert ($3, 0); }
+ | INSERT_K BEFORE NAME
+ { lang_add_insert ($3, 1); }
+ | REGION_ALIAS '(' NAME ',' NAME ')'
+ { lang_memory_region_alias ($3, $5); }
+ ;
+
+input_list:
+ NAME
+ { lang_add_input_file($1,lang_input_file_is_search_file_enum,
+ (char *)NULL); }
+ | input_list ',' NAME
+ { lang_add_input_file($3,lang_input_file_is_search_file_enum,
+ (char *)NULL); }
+ | input_list NAME
+ { lang_add_input_file($2,lang_input_file_is_search_file_enum,
+ (char *)NULL); }
+ | LNAME
+ { lang_add_input_file($1,lang_input_file_is_l_enum,
+ (char *)NULL); }
+ | input_list ',' LNAME
+ { lang_add_input_file($3,lang_input_file_is_l_enum,
+ (char *)NULL); }
+ | input_list LNAME
+ { lang_add_input_file($2,lang_input_file_is_l_enum,
+ (char *)NULL); }
+ | AS_NEEDED '('
+ { $<integer>$ = add_DT_NEEDED_for_regular; add_DT_NEEDED_for_regular = TRUE; }
+ input_list ')'
+ { add_DT_NEEDED_for_regular = $<integer>3; }
+ | input_list ',' AS_NEEDED '('
+ { $<integer>$ = add_DT_NEEDED_for_regular; add_DT_NEEDED_for_regular = TRUE; }
+ input_list ')'
+ { add_DT_NEEDED_for_regular = $<integer>5; }
+ | input_list AS_NEEDED '('
+ { $<integer>$ = add_DT_NEEDED_for_regular; add_DT_NEEDED_for_regular = TRUE; }
+ input_list ')'
+ { add_DT_NEEDED_for_regular = $<integer>4; }
+ ;
+
+sections:
+ SECTIONS '{' sec_or_group_p1 '}'
+ ;
+
+sec_or_group_p1:
+ sec_or_group_p1 section
+ | sec_or_group_p1 statement_anywhere
+ |
+ ;
+
+statement_anywhere:
+ ENTRY '(' NAME ')'
+ { lang_add_entry ($3, FALSE); }
+ | assignment end
+ | ASSERT_K {ldlex_expression ();} '(' exp ',' NAME ')'
+ { ldlex_popstate ();
+ lang_add_assignment (exp_assert ($4, $6)); }
+ ;
+
+/* The '*' and '?' cases are there because the lexer returns them as
+ separate tokens rather than as NAME. */
+wildcard_name:
+ NAME
+ {
+ $$ = $1;
+ }
+ | '*'
+ {
+ $$ = "*";
+ }
+ | '?'
+ {
+ $$ = "?";
+ }
+ ;
+
+wildcard_spec:
+ wildcard_name
+ {
+ $$.name = $1;
+ $$.sorted = none;
+ $$.exclude_name_list = NULL;
+ }
+ | EXCLUDE_FILE '(' exclude_name_list ')' wildcard_name
+ {
+ $$.name = $5;
+ $$.sorted = none;
+ $$.exclude_name_list = $3;
+ }
+ | SORT_BY_NAME '(' wildcard_name ')'
+ {
+ $$.name = $3;
+ $$.sorted = by_name;
+ $$.exclude_name_list = NULL;
+ }
+ | SORT_BY_ALIGNMENT '(' wildcard_name ')'
+ {
+ $$.name = $3;
+ $$.sorted = by_alignment;
+ $$.exclude_name_list = NULL;
+ }
+ | SORT_BY_NAME '(' SORT_BY_ALIGNMENT '(' wildcard_name ')' ')'
+ {
+ $$.name = $5;
+ $$.sorted = by_name_alignment;
+ $$.exclude_name_list = NULL;
+ }
+ | SORT_BY_NAME '(' SORT_BY_NAME '(' wildcard_name ')' ')'
+ {
+ $$.name = $5;
+ $$.sorted = by_name;
+ $$.exclude_name_list = NULL;
+ }
+ | SORT_BY_ALIGNMENT '(' SORT_BY_NAME '(' wildcard_name ')' ')'
+ {
+ $$.name = $5;
+ $$.sorted = by_alignment_name;
+ $$.exclude_name_list = NULL;
+ }
+ | SORT_BY_ALIGNMENT '(' SORT_BY_ALIGNMENT '(' wildcard_name ')' ')'
+ {
+ $$.name = $5;
+ $$.sorted = by_alignment;
+ $$.exclude_name_list = NULL;
+ }
+ | SORT_BY_NAME '(' EXCLUDE_FILE '(' exclude_name_list ')' wildcard_name ')'
+ {
+ $$.name = $7;
+ $$.sorted = by_name;
+ $$.exclude_name_list = $5;
+ }
+ ;
+
+exclude_name_list:
+ exclude_name_list wildcard_name
+ {
+ struct name_list *tmp;
+ tmp = (struct name_list *) xmalloc (sizeof *tmp);
+ tmp->name = $2;
+ tmp->next = $1;
+ $$ = tmp;
+ }
+ |
+ wildcard_name
+ {
+ struct name_list *tmp;
+ tmp = (struct name_list *) xmalloc (sizeof *tmp);
+ tmp->name = $1;
+ tmp->next = NULL;
+ $$ = tmp;
+ }
+ ;
+
+file_NAME_list:
+ file_NAME_list opt_comma wildcard_spec
+ {
+ struct wildcard_list *tmp;
+ tmp = (struct wildcard_list *) xmalloc (sizeof *tmp);
+ tmp->next = $1;
+ tmp->spec = $3;
+ $$ = tmp;
+ }
+ |
+ wildcard_spec
+ {
+ struct wildcard_list *tmp;
+ tmp = (struct wildcard_list *) xmalloc (sizeof *tmp);
+ tmp->next = NULL;
+ tmp->spec = $1;
+ $$ = tmp;
+ }
+ ;
+
+input_section_spec_no_keep:
+ NAME
+ {
+ struct wildcard_spec tmp;
+ tmp.name = $1;
+ tmp.exclude_name_list = NULL;
+ tmp.sorted = none;
+ lang_add_wild (&tmp, NULL, ldgram_had_keep);
+ }
+ | '[' file_NAME_list ']'
+ {
+ lang_add_wild (NULL, $2, ldgram_had_keep);
+ }
+ | wildcard_spec '(' file_NAME_list ')'
+ {
+ lang_add_wild (&$1, $3, ldgram_had_keep);
+ }
+ ;
+
+input_section_spec:
+ input_section_spec_no_keep
+ | KEEP '('
+ { ldgram_had_keep = TRUE; }
+ input_section_spec_no_keep ')'
+ { ldgram_had_keep = FALSE; }
+ ;
+
+statement:
+ assignment end
+ | CREATE_OBJECT_SYMBOLS
+ {
+ lang_add_attribute(lang_object_symbols_statement_enum);
+ }
+ | ';'
+ | CONSTRUCTORS
+ {
+
+ lang_add_attribute(lang_constructors_statement_enum);
+ }
+ | SORT_BY_NAME '(' CONSTRUCTORS ')'
+ {
+ constructors_sorted = TRUE;
+ lang_add_attribute (lang_constructors_statement_enum);
+ }
+ | input_section_spec
+ | length '(' mustbe_exp ')'
+ {
+ lang_add_data ((int) $1, $3);
+ }
+
+ | FILL '(' fill_exp ')'
+ {
+ lang_add_fill ($3);
+ }
+ | ASSERT_K {ldlex_expression ();} '(' exp ',' NAME ')' end
+ { ldlex_popstate ();
+ lang_add_assignment (exp_assert ($4, $6)); }
+ | INCLUDE filename
+ { ldlex_script (); ldfile_open_command_file($2); }
+ statement_list_opt END
+ { ldlex_popstate (); }
+ ;
+
+statement_list:
+ statement_list statement
+ | statement
+ ;
+
+statement_list_opt:
+ /* empty */
+ | statement_list
+ ;
+
+length:
+ QUAD
+ { $$ = $1; }
+ | SQUAD
+ { $$ = $1; }
+ | LONG
+ { $$ = $1; }
+ | SHORT
+ { $$ = $1; }
+ | BYTE
+ { $$ = $1; }
+ ;
+
+fill_exp:
+ mustbe_exp
+ {
+ $$ = exp_get_fill ($1, 0, "fill value");
+ }
+ ;
+
+fill_opt:
+ '=' fill_exp
+ { $$ = $2; }
+ | { $$ = (fill_type *) 0; }
+ ;
+
+assign_op:
+ PLUSEQ
+ { $$ = '+'; }
+ | MINUSEQ
+ { $$ = '-'; }
+ | MULTEQ
+ { $$ = '*'; }
+ | DIVEQ
+ { $$ = '/'; }
+ | LSHIFTEQ
+ { $$ = LSHIFT; }
+ | RSHIFTEQ
+ { $$ = RSHIFT; }
+ | ANDEQ
+ { $$ = '&'; }
+ | OREQ
+ { $$ = '|'; }
+
+ ;
+
+end: ';' | ','
+ ;
+
+
+assignment:
+ NAME '=' mustbe_exp
+ {
+ lang_add_assignment (exp_assop ($2, $1, $3));
+ }
+ | NAME assign_op mustbe_exp
+ {
+ lang_add_assignment (exp_assop ('=', $1,
+ exp_binop ($2,
+ exp_nameop (NAME,
+ $1),
+ $3)));
+ }
+ | PROVIDE '(' NAME '=' mustbe_exp ')'
+ {
+ lang_add_assignment (exp_provide ($3, $5, FALSE));
+ }
+ | PROVIDE_HIDDEN '(' NAME '=' mustbe_exp ')'
+ {
+ lang_add_assignment (exp_provide ($3, $5, TRUE));
+ }
+ ;
+
+
+opt_comma:
+ ',' | ;
+
+
+memory:
+ MEMORY '{' memory_spec_list_opt '}'
+ ;
+
+memory_spec_list_opt: memory_spec_list | ;
+
+memory_spec_list:
+ memory_spec_list opt_comma memory_spec
+ | memory_spec
+ ;
+
+
+memory_spec: NAME
+ { region = lang_memory_region_lookup ($1, TRUE); }
+ attributes_opt ':'
+ origin_spec opt_comma length_spec
+ {}
+ | INCLUDE filename
+ { ldlex_script (); ldfile_open_command_file($2); }
+ memory_spec_list_opt END
+ { ldlex_popstate (); }
+ ;
+
+origin_spec:
+ ORIGIN '=' mustbe_exp
+ {
+ region->origin = exp_get_vma ($3, 0, "origin");
+ region->current = region->origin;
+ }
+ ;
+
+length_spec:
+ LENGTH '=' mustbe_exp
+ {
+ region->length = exp_get_vma ($3, -1, "length");
+ }
+ ;
+
+attributes_opt:
+ /* empty */
+ { /* dummy action to avoid bison 1.25 error message */ }
+ | '(' attributes_list ')'
+ ;
+
+attributes_list:
+ attributes_string
+ | attributes_list attributes_string
+ ;
+
+attributes_string:
+ NAME
+ { lang_set_flags (region, $1, 0); }
+ | '!' NAME
+ { lang_set_flags (region, $2, 1); }
+ ;
+
+startup:
+ STARTUP '(' filename ')'
+ { lang_startup($3); }
+ ;
+
+high_level_library:
+ HLL '(' high_level_library_NAME_list ')'
+ | HLL '(' ')'
+ { ldemul_hll((char *)NULL); }
+ ;
+
+high_level_library_NAME_list:
+ high_level_library_NAME_list opt_comma filename
+ { ldemul_hll($3); }
+ | filename
+ { ldemul_hll($1); }
+
+ ;
+
+low_level_library:
+ SYSLIB '(' low_level_library_NAME_list ')'
+ ; low_level_library_NAME_list:
+ low_level_library_NAME_list opt_comma filename
+ { ldemul_syslib($3); }
+ |
+ ;
+
+floating_point_support:
+ FLOAT
+ { lang_float(TRUE); }
+ | NOFLOAT
+ { lang_float(FALSE); }
+ ;
+
+nocrossref_list:
+ /* empty */
+ {
+ $$ = NULL;
+ }
+ | NAME nocrossref_list
+ {
+ struct lang_nocrossref *n;
+
+ n = (struct lang_nocrossref *) xmalloc (sizeof *n);
+ n->name = $1;
+ n->next = $2;
+ $$ = n;
+ }
+ | NAME ',' nocrossref_list
+ {
+ struct lang_nocrossref *n;
+
+ n = (struct lang_nocrossref *) xmalloc (sizeof *n);
+ n->name = $1;
+ n->next = $3;
+ $$ = n;
+ }
+ ;
+
+mustbe_exp: { ldlex_expression (); }
+ exp
+ { ldlex_popstate (); $$=$2;}
+ ;
+
+exp :
+ '-' exp %prec UNARY
+ { $$ = exp_unop ('-', $2); }
+ | '(' exp ')'
+ { $$ = $2; }
+ | NEXT '(' exp ')' %prec UNARY
+ { $$ = exp_unop ((int) $1,$3); }
+ | '!' exp %prec UNARY
+ { $$ = exp_unop ('!', $2); }
+ | '+' exp %prec UNARY
+ { $$ = $2; }
+ | '~' exp %prec UNARY
+ { $$ = exp_unop ('~', $2);}
+
+ | exp '*' exp
+ { $$ = exp_binop ('*', $1, $3); }
+ | exp '/' exp
+ { $$ = exp_binop ('/', $1, $3); }
+ | exp '%' exp
+ { $$ = exp_binop ('%', $1, $3); }
+ | exp '+' exp
+ { $$ = exp_binop ('+', $1, $3); }
+ | exp '-' exp
+ { $$ = exp_binop ('-' , $1, $3); }
+ | exp LSHIFT exp
+ { $$ = exp_binop (LSHIFT , $1, $3); }
+ | exp RSHIFT exp
+ { $$ = exp_binop (RSHIFT , $1, $3); }
+ | exp EQ exp
+ { $$ = exp_binop (EQ , $1, $3); }
+ | exp NE exp
+ { $$ = exp_binop (NE , $1, $3); }
+ | exp LE exp
+ { $$ = exp_binop (LE , $1, $3); }
+ | exp GE exp
+ { $$ = exp_binop (GE , $1, $3); }
+ | exp '<' exp
+ { $$ = exp_binop ('<' , $1, $3); }
+ | exp '>' exp
+ { $$ = exp_binop ('>' , $1, $3); }
+ | exp '&' exp
+ { $$ = exp_binop ('&' , $1, $3); }
+ | exp '^' exp
+ { $$ = exp_binop ('^' , $1, $3); }
+ | exp '|' exp
+ { $$ = exp_binop ('|' , $1, $3); }
+ | exp '?' exp ':' exp
+ { $$ = exp_trinop ('?' , $1, $3, $5); }
+ | exp ANDAND exp
+ { $$ = exp_binop (ANDAND , $1, $3); }
+ | exp OROR exp
+ { $$ = exp_binop (OROR , $1, $3); }
+ | DEFINED '(' NAME ')'
+ { $$ = exp_nameop (DEFINED, $3); }
+ | INT
+ { $$ = exp_bigintop ($1.integer, $1.str); }
+ | SIZEOF_HEADERS
+ { $$ = exp_nameop (SIZEOF_HEADERS,0); }
+
+ | ALIGNOF '(' NAME ')'
+ { $$ = exp_nameop (ALIGNOF,$3); }
+ | SIZEOF '(' NAME ')'
+ { $$ = exp_nameop (SIZEOF,$3); }
+ | ADDR '(' NAME ')'
+ { $$ = exp_nameop (ADDR,$3); }
+ | LOADADDR '(' NAME ')'
+ { $$ = exp_nameop (LOADADDR,$3); }
+ | CONSTANT '(' NAME ')'
+ { $$ = exp_nameop (CONSTANT,$3); }
+ | ABSOLUTE '(' exp ')'
+ { $$ = exp_unop (ABSOLUTE, $3); }
+ | ALIGN_K '(' exp ')'
+ { $$ = exp_unop (ALIGN_K,$3); }
+ | ALIGN_K '(' exp ',' exp ')'
+ { $$ = exp_binop (ALIGN_K,$3,$5); }
+ | DATA_SEGMENT_ALIGN '(' exp ',' exp ')'
+ { $$ = exp_binop (DATA_SEGMENT_ALIGN, $3, $5); }
+ | DATA_SEGMENT_RELRO_END '(' exp ',' exp ')'
+ { $$ = exp_binop (DATA_SEGMENT_RELRO_END, $5, $3); }
+ | DATA_SEGMENT_END '(' exp ')'
+ { $$ = exp_unop (DATA_SEGMENT_END, $3); }
+ | SEGMENT_START '(' NAME ',' exp ')'
+ { /* The operands to the expression node are
+ placed in the opposite order from the way
+ in which they appear in the script as
+ that allows us to reuse more code in
+ fold_binary. */
+ $$ = exp_binop (SEGMENT_START,
+ $5,
+ exp_nameop (NAME, $3)); }
+ | BLOCK '(' exp ')'
+ { $$ = exp_unop (ALIGN_K,$3); }
+ | NAME
+ { $$ = exp_nameop (NAME,$1); }
+ | MAX_K '(' exp ',' exp ')'
+ { $$ = exp_binop (MAX_K, $3, $5 ); }
+ | MIN_K '(' exp ',' exp ')'
+ { $$ = exp_binop (MIN_K, $3, $5 ); }
+ | ASSERT_K '(' exp ',' NAME ')'
+ { $$ = exp_assert ($3, $5); }
+ | ORIGIN '(' NAME ')'
+ { $$ = exp_nameop (ORIGIN, $3); }
+ | LENGTH '(' NAME ')'
+ { $$ = exp_nameop (LENGTH, $3); }
+ ;
+
+
+memspec_at_opt:
+ AT '>' NAME { $$ = $3; }
+ | { $$ = 0; }
+ ;
+
+opt_at:
+ AT '(' exp ')' { $$ = $3; }
+ | { $$ = 0; }
+ ;
+
+opt_align:
+ ALIGN_K '(' exp ')' { $$ = $3; }
+ | { $$ = 0; }
+ ;
+
+opt_subalign:
+ SUBALIGN '(' exp ')' { $$ = $3; }
+ | { $$ = 0; }
+ ;
+
+sect_constraint:
+ ONLY_IF_RO { $$ = ONLY_IF_RO; }
+ | ONLY_IF_RW { $$ = ONLY_IF_RW; }
+ | SPECIAL { $$ = SPECIAL; }
+ | { $$ = 0; }
+ ;
+
+section: NAME { ldlex_expression(); }
+ opt_exp_with_type
+ opt_at
+ opt_align
+ opt_subalign { ldlex_popstate (); ldlex_script (); }
+ sect_constraint
+ '{'
+ {
+ lang_enter_output_section_statement($1, $3,
+ sectype,
+ $5, $6, $4, $8);
+ }
+ statement_list_opt
+ '}' { ldlex_popstate (); ldlex_expression (); }
+ memspec_opt memspec_at_opt phdr_opt fill_opt
+ {
+ ldlex_popstate ();
+ lang_leave_output_section_statement ($17, $14, $16, $15);
+ }
+ opt_comma
+ {}
+ | OVERLAY
+ { ldlex_expression (); }
+ opt_exp_without_type opt_nocrossrefs opt_at opt_subalign
+ { ldlex_popstate (); ldlex_script (); }
+ '{'
+ {
+ lang_enter_overlay ($3, $6);
+ }
+ overlay_section
+ '}'
+ { ldlex_popstate (); ldlex_expression (); }
+ memspec_opt memspec_at_opt phdr_opt fill_opt
+ {
+ ldlex_popstate ();
+ lang_leave_overlay ($5, (int) $4,
+ $16, $13, $15, $14);
+ }
+ opt_comma
+ | /* The GROUP case is just enough to support the gcc
+ svr3.ifile script. It is not intended to be full
+ support. I'm not even sure what GROUP is supposed
+ to mean. */
+ GROUP { ldlex_expression (); }
+ opt_exp_with_type
+ {
+ ldlex_popstate ();
+ lang_add_assignment (exp_assop ('=', ".", $3));
+ }
+ '{' sec_or_group_p1 '}'
+ | INCLUDE filename
+ { ldlex_script (); ldfile_open_command_file($2); }
+ sec_or_group_p1 END
+ { ldlex_popstate (); }
+ ;
+
+type:
+ NOLOAD { sectype = noload_section; }
+ | DSECT { sectype = noalloc_section; }
+ | COPY { sectype = noalloc_section; }
+ | INFO { sectype = noalloc_section; }
+ | OVERLAY { sectype = noalloc_section; }
+ ;
+
+atype:
+ '(' type ')'
+ | /* EMPTY */ { sectype = normal_section; }
+ | '(' ')' { sectype = normal_section; }
+ ;
+
+opt_exp_with_type:
+ exp atype ':' { $$ = $1; }
+ | atype ':' { $$ = (etree_type *)NULL; }
+ | /* The BIND cases are to support the gcc svr3.ifile
+ script. They aren't intended to implement full
+ support for the BIND keyword. I'm not even sure
+ what BIND is supposed to mean. */
+ BIND '(' exp ')' atype ':' { $$ = $3; }
+ | BIND '(' exp ')' BLOCK '(' exp ')' atype ':'
+ { $$ = $3; }
+ ;
+
+opt_exp_without_type:
+ exp ':' { $$ = $1; }
+ | ':' { $$ = (etree_type *) NULL; }
+ ;
+
+opt_nocrossrefs:
+ /* empty */
+ { $$ = 0; }
+ | NOCROSSREFS
+ { $$ = 1; }
+ ;
+
+memspec_opt:
+ '>' NAME
+ { $$ = $2; }
+ | { $$ = DEFAULT_MEMORY_REGION; }
+ ;
+
+phdr_opt:
+ /* empty */
+ {
+ $$ = NULL;
+ }
+ | phdr_opt ':' NAME
+ {
+ struct lang_output_section_phdr_list *n;
+
+ n = ((struct lang_output_section_phdr_list *)
+ xmalloc (sizeof *n));
+ n->name = $3;
+ n->used = FALSE;
+ n->next = $1;
+ $$ = n;
+ }
+ ;
+
+overlay_section:
+ /* empty */
+ | overlay_section
+ NAME
+ {
+ ldlex_script ();
+ lang_enter_overlay_section ($2);
+ }
+ '{' statement_list_opt '}'
+ { ldlex_popstate (); ldlex_expression (); }
+ phdr_opt fill_opt
+ {
+ ldlex_popstate ();
+ lang_leave_overlay_section ($9, $8);
+ }
+ opt_comma
+ ;
+
+phdrs:
+ PHDRS '{' phdr_list '}'
+ ;
+
+phdr_list:
+ /* empty */
+ | phdr_list phdr
+ ;
+
+phdr:
+ NAME { ldlex_expression (); }
+ phdr_type phdr_qualifiers { ldlex_popstate (); }
+ ';'
+ {
+ lang_new_phdr ($1, $3, $4.filehdr, $4.phdrs, $4.at,
+ $4.flags);
+ }
+ ;
+
+phdr_type:
+ exp
+ {
+ $$ = $1;
+
+ if ($1->type.node_class == etree_name
+ && $1->type.node_code == NAME)
+ {
+ const char *s;
+ unsigned int i;
+ static const char * const phdr_types[] =
+ {
+ "PT_NULL", "PT_LOAD", "PT_DYNAMIC",
+ "PT_INTERP", "PT_NOTE", "PT_SHLIB",
+ "PT_PHDR", "PT_TLS"
+ };
+
+ s = $1->name.name;
+ for (i = 0;
+ i < sizeof phdr_types / sizeof phdr_types[0];
+ i++)
+ if (strcmp (s, phdr_types[i]) == 0)
+ {
+ $$ = exp_intop (i);
+ break;
+ }
+ if (i == sizeof phdr_types / sizeof phdr_types[0])
+ {
+ if (strcmp (s, "PT_GNU_EH_FRAME") == 0)
+ $$ = exp_intop (0x6474e550);
+ else if (strcmp (s, "PT_GNU_STACK") == 0)
+ $$ = exp_intop (0x6474e551);
+ else
+ {
+ einfo (_("\
+%X%P:%S: unknown phdr type `%s' (try integer literal)\n"),
+ s);
+ $$ = exp_intop (0);
+ }
+ }
+ }
+ }
+ ;
+
+phdr_qualifiers:
+ /* empty */
+ {
+ memset (&$$, 0, sizeof (struct phdr_info));
+ }
+ | NAME phdr_val phdr_qualifiers
+ {
+ $$ = $3;
+ if (strcmp ($1, "FILEHDR") == 0 && $2 == NULL)
+ $$.filehdr = TRUE;
+ else if (strcmp ($1, "PHDRS") == 0 && $2 == NULL)
+ $$.phdrs = TRUE;
+ else if (strcmp ($1, "FLAGS") == 0 && $2 != NULL)
+ $$.flags = $2;
+ else
+ einfo (_("%X%P:%S: PHDRS syntax error at `%s'\n"), $1);
+ }
+ | AT '(' exp ')' phdr_qualifiers
+ {
+ $$ = $5;
+ $$.at = $3;
+ }
+ ;
+
+phdr_val:
+ /* empty */
+ {
+ $$ = NULL;
+ }
+ | '(' exp ')'
+ {
+ $$ = $2;
+ }
+ ;
+
+dynamic_list_file:
+ {
+ ldlex_version_file ();
+ PUSH_ERROR (_("dynamic list"));
+ }
+ dynamic_list_nodes
+ {
+ ldlex_popstate ();
+ POP_ERROR ();
+ }
+ ;
+
+dynamic_list_nodes:
+ dynamic_list_node
+ | dynamic_list_nodes dynamic_list_node
+ ;
+
+dynamic_list_node:
+ '{' dynamic_list_tag '}' ';'
+ ;
+
+dynamic_list_tag:
+ vers_defns ';'
+ {
+ lang_append_dynamic_list ($1);
+ }
+ ;
+
+/* This syntax is used within an external version script file. */
+
+version_script_file:
+ {
+ ldlex_version_file ();
+ PUSH_ERROR (_("VERSION script"));
+ }
+ vers_nodes
+ {
+ ldlex_popstate ();
+ POP_ERROR ();
+ }
+ ;
+
+/* This is used within a normal linker script file. */
+
+version:
+ {
+ ldlex_version_script ();
+ }
+ VERSIONK '{' vers_nodes '}'
+ {
+ ldlex_popstate ();
+ }
+ ;
+
+vers_nodes:
+ vers_node
+ | vers_nodes vers_node
+ ;
+
+vers_node:
+ '{' vers_tag '}' ';'
+ {
+ lang_register_vers_node (NULL, $2, NULL);
+ }
+ | VERS_TAG '{' vers_tag '}' ';'
+ {
+ lang_register_vers_node ($1, $3, NULL);
+ }
+ | VERS_TAG '{' vers_tag '}' verdep ';'
+ {
+ lang_register_vers_node ($1, $3, $5);
+ }
+ ;
+
+verdep:
+ VERS_TAG
+ {
+ $$ = lang_add_vers_depend (NULL, $1);
+ }
+ | verdep VERS_TAG
+ {
+ $$ = lang_add_vers_depend ($1, $2);
+ }
+ ;
+
+vers_tag:
+ /* empty */
+ {
+ $$ = lang_new_vers_node (NULL, NULL);
+ }
+ | vers_defns ';'
+ {
+ $$ = lang_new_vers_node ($1, NULL);
+ }
+ | GLOBAL ':' vers_defns ';'
+ {
+ $$ = lang_new_vers_node ($3, NULL);
+ }
+ | LOCAL ':' vers_defns ';'
+ {
+ $$ = lang_new_vers_node (NULL, $3);
+ }
+ | GLOBAL ':' vers_defns ';' LOCAL ':' vers_defns ';'
+ {
+ $$ = lang_new_vers_node ($3, $7);
+ }
+ ;
+
+vers_defns:
+ VERS_IDENTIFIER
+ {
+ $$ = lang_new_vers_pattern (NULL, $1, ldgram_vers_current_lang, FALSE);
+ }
+ | NAME
+ {
+ $$ = lang_new_vers_pattern (NULL, $1, ldgram_vers_current_lang, TRUE);
+ }
+ | vers_defns ';' VERS_IDENTIFIER
+ {
+ $$ = lang_new_vers_pattern ($1, $3, ldgram_vers_current_lang, FALSE);
+ }
+ | vers_defns ';' NAME
+ {
+ $$ = lang_new_vers_pattern ($1, $3, ldgram_vers_current_lang, TRUE);
+ }
+ | vers_defns ';' EXTERN NAME '{'
+ {
+ $<name>$ = ldgram_vers_current_lang;
+ ldgram_vers_current_lang = $4;
+ }
+ vers_defns opt_semicolon '}'
+ {
+ struct bfd_elf_version_expr *pat;
+ for (pat = $7; pat->next != NULL; pat = pat->next);
+ pat->next = $1;
+ $$ = $7;
+ ldgram_vers_current_lang = $<name>6;
+ }
+ | EXTERN NAME '{'
+ {
+ $<name>$ = ldgram_vers_current_lang;
+ ldgram_vers_current_lang = $2;
+ }
+ vers_defns opt_semicolon '}'
+ {
+ $$ = $5;
+ ldgram_vers_current_lang = $<name>4;
+ }
+ | GLOBAL
+ {
+ $$ = lang_new_vers_pattern (NULL, "global", ldgram_vers_current_lang, FALSE);
+ }
+ | vers_defns ';' GLOBAL
+ {
+ $$ = lang_new_vers_pattern ($1, "global", ldgram_vers_current_lang, FALSE);
+ }
+ | LOCAL
+ {
+ $$ = lang_new_vers_pattern (NULL, "local", ldgram_vers_current_lang, FALSE);
+ }
+ | vers_defns ';' LOCAL
+ {
+ $$ = lang_new_vers_pattern ($1, "local", ldgram_vers_current_lang, FALSE);
+ }
+ | EXTERN
+ {
+ $$ = lang_new_vers_pattern (NULL, "extern", ldgram_vers_current_lang, FALSE);
+ }
+ | vers_defns ';' EXTERN
+ {
+ $$ = lang_new_vers_pattern ($1, "extern", ldgram_vers_current_lang, FALSE);
+ }
+ ;
+
+opt_semicolon:
+ /* empty */
+ | ';'
+ ;
+
+%%
+void
+yyerror(arg)
+ const char *arg;
+{
+ if (ldfile_assumed_script)
+ einfo (_("%P:%s: file format not recognized; treating as linker script\n"),
+ ldfile_input_filename);
+ if (error_index > 0 && error_index < ERROR_NAME_MAX)
+ einfo ("%P%F:%S: %s in %s\n", arg, error_names[error_index-1]);
+ else
+ einfo ("%P%F:%S: %s\n", arg);
+}
diff --git a/binutils-2.21/ld/ldint.texinfo b/binutils-2.21/ld/ldint.texinfo
new file mode 100644
index 0000000..19272c5
--- /dev/null
+++ b/binutils-2.21/ld/ldint.texinfo
@@ -0,0 +1,704 @@
+\input texinfo
+@setfilename ldint.info
+@c Copyright 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+@c 2003, 2005, 2006, 2007
+@c Free Software Foundation, Inc.
+
+@ifnottex
+@dircategory Software development
+@direntry
+* Ld-Internals: (ldint). The GNU linker internals.
+@end direntry
+@end ifnottex
+
+@copying
+This file documents the internals of the GNU linker ld.
+
+Copyright @copyright{} 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2007
+Free Software Foundation, Inc.
+Contributed by Cygnus Support.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being ``GNU General Public License'' and ``Funding
+Free Software'', the Front-Cover texts being (a) (see below), and with
+the Back-Cover Texts being (b) (see below). A copy of the license is
+included in the section entitled ``GNU Free Documentation License''.
+
+(a) The FSF's Front-Cover Text is:
+
+ A GNU Manual
+
+(b) The FSF's Back-Cover Text is:
+
+ You have freedom to copy and modify this GNU Manual, like GNU
+ software. Copies published by the Free Software Foundation raise
+ funds for GNU development.
+@end copying
+
+@iftex
+@finalout
+@setchapternewpage off
+@settitle GNU Linker Internals
+@titlepage
+@title{A guide to the internals of the GNU linker}
+@author Per Bothner, Steve Chamberlain, Ian Lance Taylor, DJ Delorie
+@author Cygnus Support
+@page
+
+@tex
+\def\$#1${{#1}} % Kluge: collect RCS revision info without $...$
+\xdef\manvers{2.10.91} % For use in headers, footers too
+{\parskip=0pt
+\hfill Cygnus Support\par
+\hfill \manvers\par
+\hfill \TeX{}info \texinfoversion\par
+}
+@end tex
+
+@vskip 0pt plus 1filll
+Copyright @copyright{} 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000
+Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, with no Front-Cover Texts, and with no
+ Back-Cover Texts. A copy of the license is included in the
+ section entitled "GNU Free Documentation License".
+
+@end titlepage
+@end iftex
+
+@node Top
+@top
+
+This file documents the internals of the GNU linker @code{ld}. It is a
+collection of miscellaneous information with little form at this point.
+Mostly, it is a repository into which you can put information about
+GNU @code{ld} as you discover it (or as you design changes to @code{ld}).
+
+This document is distributed under the terms of the GNU Free
+Documentation License. A copy of the license is included in the
+section entitled "GNU Free Documentation License".
+
+@menu
+* README:: The README File
+* Emulations:: How linker emulations are generated
+* Emulation Walkthrough:: A Walkthrough of a Typical Emulation
+* Architecture Specific:: Some Architecture Specific Notes
+* GNU Free Documentation License:: GNU Free Documentation License
+@end menu
+
+@node README
+@chapter The @file{README} File
+
+Check the @file{README} file; it often has useful information that does not
+appear anywhere else in the directory.
+
+@node Emulations
+@chapter How linker emulations are generated
+
+Each linker target has an @dfn{emulation}. The emulation includes the
+default linker script, and certain emulations also modify certain types
+of linker behaviour.
+
+Emulations are created during the build process by the shell script
+@file{genscripts.sh}.
+
+The @file{genscripts.sh} script starts by reading a file in the
+@file{emulparams} directory. This is a shell script which sets various
+shell variables used by @file{genscripts.sh} and the other shell scripts
+it invokes.
+
+The @file{genscripts.sh} script will invoke a shell script in the
+@file{scripttempl} directory in order to create default linker scripts
+written in the linker command language. The @file{scripttempl} script
+will be invoked 5 (or, in some cases, 6) times, with different
+assignments to shell variables, to create different default scripts.
+The choice of script is made based on the command line options.
+
+After creating the scripts, @file{genscripts.sh} will invoke yet another
+shell script, this time in the @file{emultempl} directory. That shell
+script will create the emulation source file, which contains C code.
+This C code permits the linker emulation to override various linker
+behaviours. Most targets use the generic emulation code, which is in
+@file{emultempl/generic.em}.
+
+To summarize, @file{genscripts.sh} reads three shell scripts: an
+emulation parameters script in the @file{emulparams} directory, a linker
+script generation script in the @file{scripttempl} directory, and an
+emulation source file generation script in the @file{emultempl}
+directory.
+
+For example, the Sun 4 linker sets up variables in
+@file{emulparams/sun4.sh}, creates linker scripts using
+@file{scripttempl/aout.sc}, and creates the emulation code using
+@file{emultempl/sunos.em}.
+
+Note that the linker can support several emulations simultaneously,
+depending upon how it is configured. An emulation can be selected with
+the @code{-m} option. The @code{-V} option will list all supported
+emulations.
+
+@menu
+* emulation parameters:: @file{emulparams} scripts
+* linker scripts:: @file{scripttempl} scripts
+* linker emulations:: @file{emultempl} scripts
+@end menu
+
+@node emulation parameters
+@section @file{emulparams} scripts
+
+Each target selects a particular file in the @file{emulparams} directory
+by setting the shell variable @code{targ_emul} in @file{configure.tgt}.
+This shell variable is used by the @file{configure} script to control
+building an emulation source file.
+
+Certain conventions are enforced. Suppose the @code{targ_emul} variable
+is set to @var{emul} in @file{configure.tgt}. The name of the emulation
+shell script will be @file{emulparams/@var{emul}.sh}. The
+@file{Makefile} must have a target named @file{e@var{emul}.c}; this
+target must depend upon @file{emulparams/@var{emul}.sh}, as well as the
+appropriate scripts in the @file{scripttempl} and @file{emultempl}
+directories. The @file{Makefile} target must invoke @code{GENSCRIPTS}
+with two arguments: @var{emul}, and the value of the make variable
+@code{tdir_@var{emul}}. The value of the latter variable will be set by
+the @file{configure} script, and is used to set the default target
+directory to search.
+
+By convention, the @file{emulparams/@var{emul}.sh} shell script should
+only set shell variables. It may set shell variables which are to be
+interpreted by the @file{scripttempl} and the @file{emultempl} scripts.
+Certain shell variables are interpreted directly by the
+@file{genscripts.sh} script.
+
+Here is a list of shell variables interpreted by @file{genscripts.sh},
+as well as some conventional shell variables interpreted by the
+@file{scripttempl} and @file{emultempl} scripts.
+
+@table @code
+@item SCRIPT_NAME
+This is the name of the @file{scripttempl} script to use. If
+@code{SCRIPT_NAME} is set to @var{script}, @file{genscripts.sh} will use
+the script @file{scripttempl/@var{script}.sc}.
+
+@item TEMPLATE_NAME
+This is the name of the @file{emultempl} script to use. If
+@code{TEMPLATE_NAME} is set to @var{template}, @file{genscripts.sh} will
+use the script @file{emultempl/@var{template}.em}. If this variable is
+not set, the default value is @samp{generic}.
+
+@item GENERATE_SHLIB_SCRIPT
+If this is set to a nonempty string, @file{genscripts.sh} will invoke
+the @file{scripttempl} script an extra time to create a shared library
+script. @ref{linker scripts}.
+
+@item OUTPUT_FORMAT
+This is normally set to indicate the BFD output format use (e.g.,
+@samp{"a.out-sunos-big"}. The @file{scripttempl} script will normally
+use it in an @code{OUTPUT_FORMAT} expression in the linker script.
+
+@item ARCH
+This is normally set to indicate the architecture to use (e.g.,
+@samp{sparc}). The @file{scripttempl} script will normally use it in an
+@code{OUTPUT_ARCH} expression in the linker script.
+
+@item ENTRY
+Some @file{scripttempl} scripts use this to set the entry address, in an
+@code{ENTRY} expression in the linker script.
+
+@item TEXT_START_ADDR
+Some @file{scripttempl} scripts use this to set the start address of the
+@samp{.text} section.
+
+@item SEGMENT_SIZE
+The @file{genscripts.sh} script uses this to set the default value of
+@code{DATA_ALIGNMENT} when running the @file{scripttempl} script.
+
+@item TARGET_PAGE_SIZE
+If @code{SEGMENT_SIZE} is not defined, the @file{genscripts.sh} script
+uses this to define it.
+
+@item ALIGNMENT
+Some @file{scripttempl} scripts set this to a number to pass to
+@code{ALIGN} to set the required alignment for the @code{end} symbol.
+@end table
+
+@node linker scripts
+@section @file{scripttempl} scripts
+
+Each linker target uses a @file{scripttempl} script to generate the
+default linker scripts. The name of the @file{scripttempl} script is
+set by the @code{SCRIPT_NAME} variable in the @file{emulparams} script.
+If @code{SCRIPT_NAME} is set to @var{script}, @code{genscripts.sh} will
+invoke @file{scripttempl/@var{script}.sc}.
+
+The @file{genscripts.sh} script will invoke the @file{scripttempl}
+script 5 to 9 times. Each time it will set the shell variable
+@code{LD_FLAG} to a different value. When the linker is run, the
+options used will direct it to select a particular script. (Script
+selection is controlled by the @code{get_script} emulation entry point;
+this describes the conventional behaviour).
+
+The @file{scripttempl} script should just write a linker script, written
+in the linker command language, to standard output. If the emulation
+name--the name of the @file{emulparams} file without the @file{.sc}
+extension--is @var{emul}, then the output will be directed to
+@file{ldscripts/@var{emul}.@var{extension}} in the build directory,
+where @var{extension} changes each time the @file{scripttempl} script is
+invoked.
+
+Here is the list of values assigned to @code{LD_FLAG}.
+
+@table @code
+@item (empty)
+The script generated is used by default (when none of the following
+cases apply). The output has an extension of @file{.x}.
+@item n
+The script generated is used when the linker is invoked with the
+@code{-n} option. The output has an extension of @file{.xn}.
+@item N
+The script generated is used when the linker is invoked with the
+@code{-N} option. The output has an extension of @file{.xbn}.
+@item r
+The script generated is used when the linker is invoked with the
+@code{-r} option. The output has an extension of @file{.xr}.
+@item u
+The script generated is used when the linker is invoked with the
+@code{-Ur} option. The output has an extension of @file{.xu}.
+@item shared
+The @file{scripttempl} script is only invoked with @code{LD_FLAG} set to
+this value if @code{GENERATE_SHLIB_SCRIPT} is defined in the
+@file{emulparams} file. The @file{emultempl} script must arrange to use
+this script at the appropriate time, normally when the linker is invoked
+with the @code{-shared} option. The output has an extension of
+@file{.xs}.
+@item c
+The @file{scripttempl} script is only invoked with @code{LD_FLAG} set to
+this value if @code{GENERATE_COMBRELOC_SCRIPT} is defined in the
+@file{emulparams} file or if @code{SCRIPT_NAME} is @code{elf}. The
+@file{emultempl} script must arrange to use this script at the appropriate
+time, normally when the linker is invoked with the @code{-z combreloc}
+option. The output has an extension of
+@file{.xc}.
+@item cshared
+The @file{scripttempl} script is only invoked with @code{LD_FLAG} set to
+this value if @code{GENERATE_COMBRELOC_SCRIPT} is defined in the
+@file{emulparams} file or if @code{SCRIPT_NAME} is @code{elf} and
+@code{GENERATE_SHLIB_SCRIPT} is defined in the @file{emulparams} file.
+The @file{emultempl} script must arrange to use this script at the
+appropriate time, normally when the linker is invoked with the @code{-shared
+-z combreloc} option. The output has an extension of @file{.xsc}.
+@item auto_import
+The @file{scripttempl} script is only invoked with @code{LD_FLAG} set to
+this value if @code{GENERATE_AUTO_IMPORT_SCRIPT} is defined in the
+@file{emulparams} file. The @file{emultempl} script must arrange to
+use this script at the appropriate time, normally when the linker is
+invoked with the @code{--enable-auto-import} option. The output has
+an extension of @file{.xa}.
+@end table
+
+Besides the shell variables set by the @file{emulparams} script, and the
+@code{LD_FLAG} variable, the @file{genscripts.sh} script will set
+certain variables for each run of the @file{scripttempl} script.
+
+@table @code
+@item RELOCATING
+This will be set to a non-empty string when the linker is doing a final
+relocation (e.g., all scripts other than @code{-r} and @code{-Ur}).
+
+@item CONSTRUCTING
+This will be set to a non-empty string when the linker is building
+global constructor and destructor tables (e.g., all scripts other than
+@code{-r}).
+
+@item DATA_ALIGNMENT
+This will be set to an @code{ALIGN} expression when the output should be
+page aligned, or to @samp{.} when generating the @code{-N} script.
+
+@item CREATE_SHLIB
+This will be set to a non-empty string when generating a @code{-shared}
+script.
+
+@item COMBRELOC
+This will be set to a non-empty string when generating @code{-z combreloc}
+scripts to a temporary file name which can be used during script generation.
+@end table
+
+The conventional way to write a @file{scripttempl} script is to first
+set a few shell variables, and then write out a linker script using
+@code{cat} with a here document. The linker script will use variable
+substitutions, based on the above variables and those set in the
+@file{emulparams} script, to control its behaviour.
+
+When there are parts of the @file{scripttempl} script which should only
+be run when doing a final relocation, they should be enclosed within a
+variable substitution based on @code{RELOCATING}. For example, on many
+targets special symbols such as @code{_end} should be defined when doing
+a final link. Naturally, those symbols should not be defined when doing
+a relocatable link using @code{-r}. The @file{scripttempl} script
+could use a construct like this to define those symbols:
+@smallexample
+ $@{RELOCATING+ _end = .;@}
+@end smallexample
+This will do the symbol assignment only if the @code{RELOCATING}
+variable is defined.
+
+The basic job of the linker script is to put the sections in the correct
+order, and at the correct memory addresses. For some targets, the
+linker script may have to do some other operations.
+
+For example, on most MIPS platforms, the linker is responsible for
+defining the special symbol @code{_gp}, used to initialize the
+@code{$gp} register. It must be set to the start of the small data
+section plus @code{0x8000}. Naturally, it should only be defined when
+doing a final relocation. This will typically be done like this:
+@smallexample
+ $@{RELOCATING+ _gp = ALIGN(16) + 0x8000;@}
+@end smallexample
+This line would appear just before the sections which compose the small
+data section (@samp{.sdata}, @samp{.sbss}). All those sections would be
+contiguous in memory.
+
+Many COFF systems build constructor tables in the linker script. The
+compiler will arrange to output the address of each global constructor
+in a @samp{.ctor} section, and the address of each global destructor in
+a @samp{.dtor} section (this is done by defining
+@code{ASM_OUTPUT_CONSTRUCTOR} and @code{ASM_OUTPUT_DESTRUCTOR} in the
+@code{gcc} configuration files). The @code{gcc} runtime support
+routines expect the constructor table to be named @code{__CTOR_LIST__}.
+They expect it to be a list of words, with the first word being the
+count of the number of entries. There should be a trailing zero word.
+(Actually, the count may be -1 if the trailing word is present, and the
+trailing word may be omitted if the count is correct, but, as the
+@code{gcc} behaviour has changed slightly over the years, it is safest
+to provide both). Here is a typical way that might be handled in a
+@file{scripttempl} file.
+@smallexample
+ $@{CONSTRUCTING+ __CTOR_LIST__ = .;@}
+ $@{CONSTRUCTING+ LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)@}
+ $@{CONSTRUCTING+ *(.ctors)@}
+ $@{CONSTRUCTING+ LONG(0)@}
+ $@{CONSTRUCTING+ __CTOR_END__ = .;@}
+ $@{CONSTRUCTING+ __DTOR_LIST__ = .;@}
+ $@{CONSTRUCTING+ LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)@}
+ $@{CONSTRUCTING+ *(.dtors)@}
+ $@{CONSTRUCTING+ LONG(0)@}
+ $@{CONSTRUCTING+ __DTOR_END__ = .;@}
+@end smallexample
+The use of @code{CONSTRUCTING} ensures that these linker script commands
+will only appear when the linker is supposed to be building the
+constructor and destructor tables. This example is written for a target
+which uses 4 byte pointers.
+
+Embedded systems often need to set a stack address. This is normally
+best done by using the @code{PROVIDE} construct with a default stack
+address. This permits the user to easily override the stack address
+using the @code{--defsym} option. Here is an example:
+@smallexample
+ $@{RELOCATING+ PROVIDE (__stack = 0x80000000);@}
+@end smallexample
+The value of the symbol @code{__stack} would then be used in the startup
+code to initialize the stack pointer.
+
+@node linker emulations
+@section @file{emultempl} scripts
+
+Each linker target uses an @file{emultempl} script to generate the
+emulation code. The name of the @file{emultempl} script is set by the
+@code{TEMPLATE_NAME} variable in the @file{emulparams} script. If the
+@code{TEMPLATE_NAME} variable is not set, the default is
+@samp{generic}. If the value of @code{TEMPLATE_NAME} is @var{template},
+@file{genscripts.sh} will use @file{emultempl/@var{template}.em}.
+
+Most targets use the generic @file{emultempl} script,
+@file{emultempl/generic.em}. A different @file{emultempl} script is
+only needed if the linker must support unusual actions, such as linking
+against shared libraries.
+
+The @file{emultempl} script is normally written as a simple invocation
+of @code{cat} with a here document. The document will use a few
+variable substitutions. Typically each function names uses a
+substitution involving @code{EMULATION_NAME}, for ease of debugging when
+the linker supports multiple emulations.
+
+Every function and variable in the emitted file should be static. The
+only globally visible object must be named
+@code{ld_@var{EMULATION_NAME}_emulation}, where @var{EMULATION_NAME} is
+the name of the emulation set in @file{configure.tgt} (this is also the
+name of the @file{emulparams} file without the @file{.sh} extension).
+The @file{genscripts.sh} script will set the shell variable
+@code{EMULATION_NAME} before invoking the @file{emultempl} script.
+
+The @code{ld_@var{EMULATION_NAME}_emulation} variable must be a
+@code{struct ld_emulation_xfer_struct}, as defined in @file{ldemul.h}.
+It defines a set of function pointers which are invoked by the linker,
+as well as strings for the emulation name (normally set from the shell
+variable @code{EMULATION_NAME} and the default BFD target name (normally
+set from the shell variable @code{OUTPUT_FORMAT} which is normally set
+by the @file{emulparams} file).
+
+The @file{genscripts.sh} script will set the shell variable
+@code{COMPILE_IN} when it invokes the @file{emultempl} script for the
+default emulation. In this case, the @file{emultempl} script should
+include the linker scripts directly, and return them from the
+@code{get_scripts} entry point. When the emulation is not the default,
+the @code{get_scripts} entry point should just return a file name. See
+@file{emultempl/generic.em} for an example of how this is done.
+
+At some point, the linker emulation entry points should be documented.
+
+@node Emulation Walkthrough
+@chapter A Walkthrough of a Typical Emulation
+
+This chapter is to help people who are new to the way emulations
+interact with the linker, or who are suddenly thrust into the position
+of having to work with existing emulations. It will discuss the files
+you need to be aware of. It will tell you when the given "hooks" in
+the emulation will be called. It will, hopefully, give you enough
+information about when and how things happen that you'll be able to
+get by. As always, the source is the definitive reference to this.
+
+The starting point for the linker is in @file{ldmain.c} where
+@code{main} is defined. The bulk of the code that's emulation
+specific will initially be in @code{emultempl/@var{emulation}.em} but
+will end up in @code{e@var{emulation}.c} when the build is done.
+Most of the work to select and interface with emulations is in
+@code{ldemul.h} and @code{ldemul.c}. Specifically, @code{ldemul.h}
+defines the @code{ld_emulation_xfer_struct} structure your emulation
+exports.
+
+Your emulation file exports a symbol
+@code{ld_@var{EMULATION_NAME}_emulation}. If your emulation is
+selected (it usually is, since usually there's only one),
+@code{ldemul.c} sets the variable @var{ld_emulation} to point to it.
+@code{ldemul.c} also defines a number of API functions that interface
+to your emulation, like @code{ldemul_after_parse} which simply calls
+your @code{ld_@var{EMULATION}_emulation.after_parse} function. For
+the rest of this section, the functions will be mentioned, but you
+should assume the indirect reference to your emulation also.
+
+We will also skip or gloss over parts of the link process that don't
+relate to emulations, like setting up internationalization.
+
+After initialization, @code{main} selects an emulation by pre-scanning
+the command line arguments. It calls @code{ldemul_choose_target} to
+choose a target. If you set @code{choose_target} to
+@code{ldemul_default_target}, it picks your @code{target_name} by
+default.
+
+@code{main} calls @code{ldemul_before_parse}, then @code{parse_args}.
+@code{parse_args} calls @code{ldemul_parse_args} for each arg, which
+must update the @code{getopt} globals if it recognizes the argument.
+If the emulation doesn't recognize it, then parse_args checks to see
+if it recognizes it.
+
+Now that the emulation has had access to all its command-line options,
+@code{main} calls @code{ldemul_set_symbols}. This can be used for any
+initialization that may be affected by options. It is also supposed
+to set up any variables needed by the emulation script.
+
+@code{main} now calls @code{ldemul_get_script} to get the emulation
+script to use (based on arguments, no doubt, @pxref{Emulations}) and
+runs it. While parsing, @code{ldgram.y} may call @code{ldemul_hll} or
+@code{ldemul_syslib} to handle the @code{HLL} or @code{SYSLIB}
+commands. It may call @code{ldemul_unrecognized_file} if you asked
+the linker to link a file it doesn't recognize. It will call
+@code{ldemul_recognized_file} for each file it does recognize, in case
+the emulation wants to handle some files specially. All the while,
+it's loading the files (possibly calling
+@code{ldemul_open_dynamic_archive}) and symbols and stuff. After it's
+done reading the script, @code{main} calls @code{ldemul_after_parse}.
+Use the after-parse hook to set up anything that depends on stuff the
+script might have set up, like the entry point.
+
+@code{main} next calls @code{lang_process} in @code{ldlang.c}. This
+appears to be the main core of the linking itself, as far as emulation
+hooks are concerned(*). It first opens the output file's BFD, calling
+@code{ldemul_set_output_arch}, and calls
+@code{ldemul_create_output_section_statements} in case you need to use
+other means to find or create object files (i.e. shared libraries
+found on a path, or fake stub objects). Despite the name, nobody
+creates output sections here.
+
+(*) In most cases, the BFD library does the bulk of the actual
+linking, handling symbol tables, symbol resolution, relocations, and
+building the final output file. See the BFD reference for all the
+details. Your emulation is usually concerned more with managing
+things at the file and section level, like "put this here, add this
+section", etc.
+
+Next, the objects to be linked are opened and BFDs created for them,
+and @code{ldemul_after_open} is called. At this point, you have all
+the objects and symbols loaded, but none of the data has been placed
+yet.
+
+Next comes the Big Linking Thingy (except for the parts BFD does).
+All input sections are mapped to output sections according to the
+script. If a section doesn't get mapped by default,
+@code{ldemul_place_orphan} will get called to figure out where it goes.
+Next it figures out the offsets for each section, calling
+@code{ldemul_before_allocation} before and
+@code{ldemul_after_allocation} after deciding where each input section
+ends up in the output sections.
+
+The last part of @code{lang_process} is to figure out all the symbols'
+values. After assigning final values to the symbols,
+@code{ldemul_finish} is called, and after that, any undefined symbols
+are turned into fatal errors.
+
+OK, back to @code{main}, which calls @code{ldwrite} in
+@file{ldwrite.c}. @code{ldwrite} calls BFD's final_link, which does
+all the relocation fixups and writes the output bfd to disk, and we're
+done.
+
+In summary,
+
+@itemize @bullet
+
+@item @code{main()} in @file{ldmain.c}
+@item @file{emultempl/@var{EMULATION}.em} has your code
+@item @code{ldemul_choose_target} (defaults to your @code{target_name})
+@item @code{ldemul_before_parse}
+@item Parse argv, calls @code{ldemul_parse_args} for each
+@item @code{ldemul_set_symbols}
+@item @code{ldemul_get_script}
+@item parse script
+
+@itemize @bullet
+@item may call @code{ldemul_hll} or @code{ldemul_syslib}
+@item may call @code{ldemul_open_dynamic_archive}
+@end itemize
+
+@item @code{ldemul_after_parse}
+@item @code{lang_process()} in @file{ldlang.c}
+
+@itemize @bullet
+@item create @code{output_bfd}
+@item @code{ldemul_set_output_arch}
+@item @code{ldemul_create_output_section_statements}
+@item read objects, create input bfds - all symbols exist, but have no values
+@item may call @code{ldemul_unrecognized_file}
+@item will call @code{ldemul_recognized_file}
+@item @code{ldemul_after_open}
+@item map input sections to output sections
+@item may call @code{ldemul_place_orphan} for remaining sections
+@item @code{ldemul_before_allocation}
+@item gives input sections offsets into output sections, places output sections
+@item @code{ldemul_after_allocation} - section addresses valid
+@item assigns values to symbols
+@item @code{ldemul_finish} - symbol values valid
+@end itemize
+
+@item output bfd is written to disk
+
+@end itemize
+
+@node Architecture Specific
+@chapter Some Architecture Specific Notes
+
+This is the place for notes on the behavior of @code{ld} on
+specific platforms. Currently, only Intel x86 is documented (and
+of that, only the auto-import behavior for DLLs).
+
+@menu
+* ix86:: Intel x86
+@end menu
+
+@node ix86
+@section Intel x86
+
+@table @emph
+@code{ld} can create DLLs that operate with various runtimes available
+on a common x86 operating system. These runtimes include native (using
+the mingw "platform"), cygwin, and pw.
+
+@item auto-import from DLLs
+@enumerate
+@item
+With this feature on, DLL clients can import variables from DLL
+without any concern from their side (for example, without any source
+code modifications). Auto-import can be enabled using the
+@code{--enable-auto-import} flag, or disabled via the
+@code{--disable-auto-import} flag. Auto-import is disabled by default.
+
+@item
+This is done completely in bounds of the PE specification (to be fair,
+there's a minor violation of the spec at one point, but in practice
+auto-import works on all known variants of that common x86 operating
+system) So, the resulting DLL can be used with any other PE
+compiler/linker.
+
+@item
+Auto-import is fully compatible with standard import method, in which
+variables are decorated using attribute modifiers. Libraries of either
+type may be mixed together.
+
+@item
+Overhead (space): 8 bytes per imported symbol, plus 20 for each
+reference to it; Overhead (load time): negligible; Overhead
+(virtual/physical memory): should be less than effect of DLL
+relocation.
+@end enumerate
+
+Motivation
+
+The obvious and only way to get rid of dllimport insanity is
+to make client access variable directly in the DLL, bypassing
+the extra dereference imposed by ordinary DLL runtime linking.
+I.e., whenever client contains something like
+
+@code{mov dll_var,%eax,}
+
+address of dll_var in the command should be relocated to point
+into loaded DLL. The aim is to make OS loader do so, and than
+make ld help with that. Import section of PE made following
+way: there's a vector of structures each describing imports
+from particular DLL. Each such structure points to two other
+parallel vectors: one holding imported names, and one which
+will hold address of corresponding imported name. So, the
+solution is de-vectorize these structures, making import
+locations be sparse and pointing directly into code.
+
+Implementation
+
+For each reference of data symbol to be imported from DLL (to
+set of which belong symbols with name <sym>, if __imp_<sym> is
+found in implib), the import fixup entry is generated. That
+entry is of type IMAGE_IMPORT_DESCRIPTOR and stored in .idata$3
+subsection. Each fixup entry contains pointer to symbol's address
+within .text section (marked with __fuN_<sym> symbol, where N is
+integer), pointer to DLL name (so, DLL name is referenced by
+multiple entries), and pointer to symbol name thunk. Symbol name
+thunk is singleton vector (__nm_th_<symbol>) pointing to
+IMAGE_IMPORT_BY_NAME structure (__nm_<symbol>) directly containing
+imported name. Here comes that "om the edge" problem mentioned above:
+PE specification rambles that name vector (OriginalFirstThunk) should
+run in parallel with addresses vector (FirstThunk), i.e. that they
+should have same number of elements and terminated with zero. We violate
+this, since FirstThunk points directly into machine code. But in
+practice, OS loader implemented the sane way: it goes thru
+OriginalFirstThunk and puts addresses to FirstThunk, not something
+else. It once again should be noted that dll and symbol name
+structures are reused across fixup entries and should be there
+anyway to support standard import stuff, so sustained overhead is
+20 bytes per reference. Other question is whether having several
+IMAGE_IMPORT_DESCRIPTORS for the same DLL is possible. Answer is yes,
+it is done even by native compiler/linker (libth32's functions are in
+fact resident in windows9x kernel32.dll, so if you use it, you have
+two IMAGE_IMPORT_DESCRIPTORS for kernel32.dll). Yet other question is
+whether referencing the same PE structures several times is valid.
+The answer is why not, prohibiting that (detecting violation) would
+require more work on behalf of loader than not doing it.
+
+@end table
+
+@node GNU Free Documentation License
+@chapter GNU Free Documentation License
+
+@include fdl.texi
+
+@contents
+@bye
diff --git a/binutils-2.21/ld/ldlang.c b/binutils-2.21/ld/ldlang.c
new file mode 100644
index 0000000..9038ebf
--- /dev/null
+++ b/binutils-2.21/ld/ldlang.c
@@ -0,0 +1,7855 @@
+/* Linker command language support.
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+ Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libiberty.h"
+#include "safe-ctype.h"
+#include "obstack.h"
+#include "bfdlink.h"
+
+#include "ld.h"
+#include "ldmain.h"
+#include "ldexp.h"
+#include "ldlang.h"
+#include <ldgram.h>
+#include "ldlex.h"
+#include "ldmisc.h"
+#include "ldctor.h"
+#include "ldfile.h"
+#include "ldemul.h"
+#include "fnmatch.h"
+#include "demangle.h"
+#include "hashtab.h"
+#include "libbfd.h"
+#ifdef ENABLE_PLUGINS
+#include "plugin.h"
+#endif /* ENABLE_PLUGINS */
+
+#ifndef offsetof
+#define offsetof(TYPE, MEMBER) ((size_t) & (((TYPE*) 0)->MEMBER))
+#endif
+
+/* Locals variables. */
+static struct obstack stat_obstack;
+static struct obstack map_obstack;
+
+#define obstack_chunk_alloc xmalloc
+#define obstack_chunk_free free
+static const char *startup_file;
+static const char *entry_symbol_default = "start";
+static bfd_boolean placed_commons = FALSE;
+static bfd_boolean stripped_excluded_sections = FALSE;
+static lang_output_section_statement_type *default_common_section;
+static bfd_boolean map_option_f;
+static bfd_vma print_dot;
+static lang_input_statement_type *first_file;
+static const char *current_target;
+static lang_statement_list_type statement_list;
+static struct bfd_hash_table lang_definedness_table;
+static lang_statement_list_type *stat_save[10];
+static lang_statement_list_type **stat_save_ptr = &stat_save[0];
+static struct unique_sections *unique_section_list;
+static bfd_boolean ldlang_sysrooted_script = FALSE;
+
+/* Forward declarations. */
+static void exp_init_os (etree_type *);
+static void init_map_userdata (bfd *, asection *, void *);
+static lang_input_statement_type *lookup_name (const char *);
+static struct bfd_hash_entry *lang_definedness_newfunc
+ (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
+static void insert_undefined (const char *);
+static bfd_boolean sort_def_symbol (struct bfd_link_hash_entry *, void *);
+static void print_statement (lang_statement_union_type *,
+ lang_output_section_statement_type *);
+static void print_statement_list (lang_statement_union_type *,
+ lang_output_section_statement_type *);
+static void print_statements (void);
+static void print_input_section (asection *, bfd_boolean);
+static bfd_boolean lang_one_common (struct bfd_link_hash_entry *, void *);
+static void lang_record_phdrs (void);
+static void lang_do_version_exports_section (void);
+static void lang_finalize_version_expr_head
+ (struct bfd_elf_version_expr_head *);
+
+/* Exported variables. */
+const char *output_target;
+lang_output_section_statement_type *abs_output_section;
+lang_statement_list_type lang_output_section_statement;
+lang_statement_list_type *stat_ptr = &statement_list;
+lang_statement_list_type file_chain = { NULL, NULL };
+lang_statement_list_type input_file_chain;
+struct bfd_sym_chain entry_symbol = { NULL, NULL };
+const char *entry_section = ".text";
+bfd_boolean entry_from_cmdline;
+bfd_boolean undef_from_cmdline;
+bfd_boolean lang_has_input_file = FALSE;
+bfd_boolean had_output_filename = FALSE;
+bfd_boolean lang_float_flag = FALSE;
+bfd_boolean delete_output_file_on_failure = FALSE;
+struct lang_phdr *lang_phdr_list;
+struct lang_nocrossrefs *nocrossref_list;
+bfd_boolean missing_file = FALSE;
+
+ /* Functions that traverse the linker script and might evaluate
+ DEFINED() need to increment this. */
+int lang_statement_iteration = 0;
+
+etree_type *base; /* Relocation base - or null */
+
+/* Return TRUE if the PATTERN argument is a wildcard pattern.
+ Although backslashes are treated specially if a pattern contains
+ wildcards, we do not consider the mere presence of a backslash to
+ be enough to cause the pattern to be treated as a wildcard.
+ That lets us handle DOS filenames more naturally. */
+#define wildcardp(pattern) (strpbrk ((pattern), "?*[") != NULL)
+
+#define new_stat(x, y) \
+ (x##_type *) new_statement (x##_enum, sizeof (x##_type), y)
+
+#define outside_section_address(q) \
+ ((q)->output_offset + (q)->output_section->vma)
+
+#define outside_symbol_address(q) \
+ ((q)->value + outside_section_address (q->section))
+
+#define SECTION_NAME_MAP_LENGTH (16)
+
+void *
+stat_alloc (size_t size)
+{
+ return obstack_alloc (&stat_obstack, size);
+}
+
+static int
+name_match (const char *pattern, const char *name)
+{
+ if (wildcardp (pattern))
+ return fnmatch (pattern, name, 0);
+ return strcmp (pattern, name);
+}
+
+/* If PATTERN is of the form archive:file, return a pointer to the
+ separator. If not, return NULL. */
+
+static char *
+archive_path (const char *pattern)
+{
+ char *p = NULL;
+
+ if (link_info.path_separator == 0)
+ return p;
+
+ p = strchr (pattern, link_info.path_separator);
+#ifdef HAVE_DOS_BASED_FILE_SYSTEM
+ if (p == NULL || link_info.path_separator != ':')
+ return p;
+
+ /* Assume a match on the second char is part of drive specifier,
+ as in "c:\silly.dos". */
+ if (p == pattern + 1 && ISALPHA (*pattern))
+ p = strchr (p + 1, link_info.path_separator);
+#endif
+ return p;
+}
+
+/* Given that FILE_SPEC results in a non-NULL SEP result from archive_path,
+ return whether F matches FILE_SPEC. */
+
+static bfd_boolean
+input_statement_is_archive_path (const char *file_spec, char *sep,
+ lang_input_statement_type *f)
+{
+ bfd_boolean match = FALSE;
+
+ if ((*(sep + 1) == 0
+ || name_match (sep + 1, f->filename) == 0)
+ && ((sep != file_spec)
+ == (f->the_bfd != NULL && f->the_bfd->my_archive != NULL)))
+ {
+ match = TRUE;
+
+ if (sep != file_spec)
+ {
+ const char *aname = f->the_bfd->my_archive->filename;
+ *sep = 0;
+ match = name_match (file_spec, aname) == 0;
+ *sep = link_info.path_separator;
+ }
+ }
+ return match;
+}
+
+static bfd_boolean
+unique_section_p (const asection *sec,
+ const lang_output_section_statement_type *os)
+{
+ struct unique_sections *unam;
+ const char *secnam;
+
+ if (link_info.relocatable
+ && sec->owner != NULL
+ && bfd_is_group_section (sec->owner, sec))
+ return !(os != NULL
+ && strcmp (os->name, DISCARD_SECTION_NAME) == 0);
+
+ secnam = sec->name;
+ for (unam = unique_section_list; unam; unam = unam->next)
+ if (name_match (unam->name, secnam) == 0)
+ return TRUE;
+
+ return FALSE;
+}
+
+/* Generic traversal routines for finding matching sections. */
+
+/* Try processing a section against a wildcard. This just calls
+ the callback unless the filename exclusion list is present
+ and excludes the file. It's hardly ever present so this
+ function is very fast. */
+
+static void
+walk_wild_consider_section (lang_wild_statement_type *ptr,
+ lang_input_statement_type *file,
+ asection *s,
+ struct wildcard_list *sec,
+ callback_t callback,
+ void *data)
+{
+ struct name_list *list_tmp;
+
+ /* Don't process sections from files which were excluded. */
+ for (list_tmp = sec->spec.exclude_name_list;
+ list_tmp;
+ list_tmp = list_tmp->next)
+ {
+ char *p = archive_path (list_tmp->name);
+
+ if (p != NULL)
+ {
+ if (input_statement_is_archive_path (list_tmp->name, p, file))
+ return;
+ }
+
+ else if (name_match (list_tmp->name, file->filename) == 0)
+ return;
+
+ /* FIXME: Perhaps remove the following at some stage? Matching
+ unadorned archives like this was never documented and has
+ been superceded by the archive:path syntax. */
+ else if (file->the_bfd != NULL
+ && file->the_bfd->my_archive != NULL
+ && name_match (list_tmp->name,
+ file->the_bfd->my_archive->filename) == 0)
+ return;
+ }
+
+ (*callback) (ptr, sec, s, file, data);
+}
+
+/* Lowest common denominator routine that can handle everything correctly,
+ but slowly. */
+
+static void
+walk_wild_section_general (lang_wild_statement_type *ptr,
+ lang_input_statement_type *file,
+ callback_t callback,
+ void *data)
+{
+ asection *s;
+ struct wildcard_list *sec;
+
+ for (s = file->the_bfd->sections; s != NULL; s = s->next)
+ {
+ sec = ptr->section_list;
+ if (sec == NULL)
+ (*callback) (ptr, sec, s, file, data);
+
+ while (sec != NULL)
+ {
+ bfd_boolean skip = FALSE;
+
+ if (sec->spec.name != NULL)
+ {
+ const char *sname = bfd_get_section_name (file->the_bfd, s);
+
+ skip = name_match (sec->spec.name, sname) != 0;
+ }
+
+ if (!skip)
+ walk_wild_consider_section (ptr, file, s, sec, callback, data);
+
+ sec = sec->next;
+ }
+ }
+}
+
+/* Routines to find a single section given its name. If there's more
+ than one section with that name, we report that. */
+
+typedef struct
+{
+ asection *found_section;
+ bfd_boolean multiple_sections_found;
+} section_iterator_callback_data;
+
+static bfd_boolean
+section_iterator_callback (bfd *abfd ATTRIBUTE_UNUSED, asection *s, void *data)
+{
+ section_iterator_callback_data *d = (section_iterator_callback_data *) data;
+
+ if (d->found_section != NULL)
+ {
+ d->multiple_sections_found = TRUE;
+ return TRUE;
+ }
+
+ d->found_section = s;
+ return FALSE;
+}
+
+static asection *
+find_section (lang_input_statement_type *file,
+ struct wildcard_list *sec,
+ bfd_boolean *multiple_sections_found)
+{
+ section_iterator_callback_data cb_data = { NULL, FALSE };
+
+ bfd_get_section_by_name_if (file->the_bfd, sec->spec.name,
+ section_iterator_callback, &cb_data);
+ *multiple_sections_found = cb_data.multiple_sections_found;
+ return cb_data.found_section;
+}
+
+/* Code for handling simple wildcards without going through fnmatch,
+ which can be expensive because of charset translations etc. */
+
+/* A simple wild is a literal string followed by a single '*',
+ where the literal part is at least 4 characters long. */
+
+static bfd_boolean
+is_simple_wild (const char *name)
+{
+ size_t len = strcspn (name, "*?[");
+ return len >= 4 && name[len] == '*' && name[len + 1] == '\0';
+}
+
+static bfd_boolean
+match_simple_wild (const char *pattern, const char *name)
+{
+ /* The first four characters of the pattern are guaranteed valid
+ non-wildcard characters. So we can go faster. */
+ if (pattern[0] != name[0] || pattern[1] != name[1]
+ || pattern[2] != name[2] || pattern[3] != name[3])
+ return FALSE;
+
+ pattern += 4;
+ name += 4;
+ while (*pattern != '*')
+ if (*name++ != *pattern++)
+ return FALSE;
+
+ return TRUE;
+}
+
+/* Compare sections ASEC and BSEC according to SORT. */
+
+static int
+compare_section (sort_type sort, asection *asec, asection *bsec)
+{
+ int ret;
+
+ switch (sort)
+ {
+ default:
+ abort ();
+
+ case by_alignment_name:
+ ret = (bfd_section_alignment (bsec->owner, bsec)
+ - bfd_section_alignment (asec->owner, asec));
+ if (ret)
+ break;
+ /* Fall through. */
+
+ case by_name:
+ ret = strcmp (bfd_get_section_name (asec->owner, asec),
+ bfd_get_section_name (bsec->owner, bsec));
+ break;
+
+ case by_name_alignment:
+ ret = strcmp (bfd_get_section_name (asec->owner, asec),
+ bfd_get_section_name (bsec->owner, bsec));
+ if (ret)
+ break;
+ /* Fall through. */
+
+ case by_alignment:
+ ret = (bfd_section_alignment (bsec->owner, bsec)
+ - bfd_section_alignment (asec->owner, asec));
+ break;
+ }
+
+ return ret;
+}
+
+/* Build a Binary Search Tree to sort sections, unlike insertion sort
+ used in wild_sort(). BST is considerably faster if the number of
+ of sections are large. */
+
+static lang_section_bst_type **
+wild_sort_fast (lang_wild_statement_type *wild,
+ struct wildcard_list *sec,
+ lang_input_statement_type *file ATTRIBUTE_UNUSED,
+ asection *section)
+{
+ lang_section_bst_type **tree;
+
+ tree = &wild->tree;
+ if (!wild->filenames_sorted
+ && (sec == NULL || sec->spec.sorted == none))
+ {
+ /* Append at the right end of tree. */
+ while (*tree)
+ tree = &((*tree)->right);
+ return tree;
+ }
+
+ while (*tree)
+ {
+ /* Find the correct node to append this section. */
+ if (compare_section (sec->spec.sorted, section, (*tree)->section) < 0)
+ tree = &((*tree)->left);
+ else
+ tree = &((*tree)->right);
+ }
+
+ return tree;
+}
+
+/* Use wild_sort_fast to build a BST to sort sections. */
+
+static void
+output_section_callback_fast (lang_wild_statement_type *ptr,
+ struct wildcard_list *sec,
+ asection *section,
+ lang_input_statement_type *file,
+ void *output)
+{
+ lang_section_bst_type *node;
+ lang_section_bst_type **tree;
+ lang_output_section_statement_type *os;
+
+ os = (lang_output_section_statement_type *) output;
+
+ if (unique_section_p (section, os))
+ return;
+
+ node = (lang_section_bst_type *) xmalloc (sizeof (lang_section_bst_type));
+ node->left = 0;
+ node->right = 0;
+ node->section = section;
+
+ tree = wild_sort_fast (ptr, sec, file, section);
+ if (tree != NULL)
+ *tree = node;
+}
+
+/* Convert a sorted sections' BST back to list form. */
+
+static void
+output_section_callback_tree_to_list (lang_wild_statement_type *ptr,
+ lang_section_bst_type *tree,
+ void *output)
+{
+ if (tree->left)
+ output_section_callback_tree_to_list (ptr, tree->left, output);
+
+ lang_add_section (&ptr->children, tree->section,
+ (lang_output_section_statement_type *) output);
+
+ if (tree->right)
+ output_section_callback_tree_to_list (ptr, tree->right, output);
+
+ free (tree);
+}
+
+/* Specialized, optimized routines for handling different kinds of
+ wildcards */
+
+static void
+walk_wild_section_specs1_wild0 (lang_wild_statement_type *ptr,
+ lang_input_statement_type *file,
+ callback_t callback,
+ void *data)
+{
+ /* We can just do a hash lookup for the section with the right name.
+ But if that lookup discovers more than one section with the name
+ (should be rare), we fall back to the general algorithm because
+ we would otherwise have to sort the sections to make sure they
+ get processed in the bfd's order. */
+ bfd_boolean multiple_sections_found;
+ struct wildcard_list *sec0 = ptr->handler_data[0];
+ asection *s0 = find_section (file, sec0, &multiple_sections_found);
+
+ if (multiple_sections_found)
+ walk_wild_section_general (ptr, file, callback, data);
+ else if (s0)
+ walk_wild_consider_section (ptr, file, s0, sec0, callback, data);
+}
+
+static void
+walk_wild_section_specs1_wild1 (lang_wild_statement_type *ptr,
+ lang_input_statement_type *file,
+ callback_t callback,
+ void *data)
+{
+ asection *s;
+ struct wildcard_list *wildsec0 = ptr->handler_data[0];
+
+ for (s = file->the_bfd->sections; s != NULL; s = s->next)
+ {
+ const char *sname = bfd_get_section_name (file->the_bfd, s);
+ bfd_boolean skip = !match_simple_wild (wildsec0->spec.name, sname);
+
+ if (!skip)
+ walk_wild_consider_section (ptr, file, s, wildsec0, callback, data);
+ }
+}
+
+static void
+walk_wild_section_specs2_wild1 (lang_wild_statement_type *ptr,
+ lang_input_statement_type *file,
+ callback_t callback,
+ void *data)
+{
+ asection *s;
+ struct wildcard_list *sec0 = ptr->handler_data[0];
+ struct wildcard_list *wildsec1 = ptr->handler_data[1];
+ bfd_boolean multiple_sections_found;
+ asection *s0 = find_section (file, sec0, &multiple_sections_found);
+
+ if (multiple_sections_found)
+ {
+ walk_wild_section_general (ptr, file, callback, data);
+ return;
+ }
+
+ /* Note that if the section was not found, s0 is NULL and
+ we'll simply never succeed the s == s0 test below. */
+ for (s = file->the_bfd->sections; s != NULL; s = s->next)
+ {
+ /* Recall that in this code path, a section cannot satisfy more
+ than one spec, so if s == s0 then it cannot match
+ wildspec1. */
+ if (s == s0)
+ walk_wild_consider_section (ptr, file, s, sec0, callback, data);
+ else
+ {
+ const char *sname = bfd_get_section_name (file->the_bfd, s);
+ bfd_boolean skip = !match_simple_wild (wildsec1->spec.name, sname);
+
+ if (!skip)
+ walk_wild_consider_section (ptr, file, s, wildsec1, callback,
+ data);
+ }
+ }
+}
+
+static void
+walk_wild_section_specs3_wild2 (lang_wild_statement_type *ptr,
+ lang_input_statement_type *file,
+ callback_t callback,
+ void *data)
+{
+ asection *s;
+ struct wildcard_list *sec0 = ptr->handler_data[0];
+ struct wildcard_list *wildsec1 = ptr->handler_data[1];
+ struct wildcard_list *wildsec2 = ptr->handler_data[2];
+ bfd_boolean multiple_sections_found;
+ asection *s0 = find_section (file, sec0, &multiple_sections_found);
+
+ if (multiple_sections_found)
+ {
+ walk_wild_section_general (ptr, file, callback, data);
+ return;
+ }
+
+ for (s = file->the_bfd->sections; s != NULL; s = s->next)
+ {
+ if (s == s0)
+ walk_wild_consider_section (ptr, file, s, sec0, callback, data);
+ else
+ {
+ const char *sname = bfd_get_section_name (file->the_bfd, s);
+ bfd_boolean skip = !match_simple_wild (wildsec1->spec.name, sname);
+
+ if (!skip)
+ walk_wild_consider_section (ptr, file, s, wildsec1, callback, data);
+ else
+ {
+ skip = !match_simple_wild (wildsec2->spec.name, sname);
+ if (!skip)
+ walk_wild_consider_section (ptr, file, s, wildsec2, callback,
+ data);
+ }
+ }
+ }
+}
+
+static void
+walk_wild_section_specs4_wild2 (lang_wild_statement_type *ptr,
+ lang_input_statement_type *file,
+ callback_t callback,
+ void *data)
+{
+ asection *s;
+ struct wildcard_list *sec0 = ptr->handler_data[0];
+ struct wildcard_list *sec1 = ptr->handler_data[1];
+ struct wildcard_list *wildsec2 = ptr->handler_data[2];
+ struct wildcard_list *wildsec3 = ptr->handler_data[3];
+ bfd_boolean multiple_sections_found;
+ asection *s0 = find_section (file, sec0, &multiple_sections_found), *s1;
+
+ if (multiple_sections_found)
+ {
+ walk_wild_section_general (ptr, file, callback, data);
+ return;
+ }
+
+ s1 = find_section (file, sec1, &multiple_sections_found);
+ if (multiple_sections_found)
+ {
+ walk_wild_section_general (ptr, file, callback, data);
+ return;
+ }
+
+ for (s = file->the_bfd->sections; s != NULL; s = s->next)
+ {
+ if (s == s0)
+ walk_wild_consider_section (ptr, file, s, sec0, callback, data);
+ else
+ if (s == s1)
+ walk_wild_consider_section (ptr, file, s, sec1, callback, data);
+ else
+ {
+ const char *sname = bfd_get_section_name (file->the_bfd, s);
+ bfd_boolean skip = !match_simple_wild (wildsec2->spec.name,
+ sname);
+
+ if (!skip)
+ walk_wild_consider_section (ptr, file, s, wildsec2, callback,
+ data);
+ else
+ {
+ skip = !match_simple_wild (wildsec3->spec.name, sname);
+ if (!skip)
+ walk_wild_consider_section (ptr, file, s, wildsec3,
+ callback, data);
+ }
+ }
+ }
+}
+
+static void
+walk_wild_section (lang_wild_statement_type *ptr,
+ lang_input_statement_type *file,
+ callback_t callback,
+ void *data)
+{
+ if (file->just_syms_flag)
+ return;
+
+ (*ptr->walk_wild_section_handler) (ptr, file, callback, data);
+}
+
+/* Returns TRUE when name1 is a wildcard spec that might match
+ something name2 can match. We're conservative: we return FALSE
+ only if the prefixes of name1 and name2 are different up to the
+ first wildcard character. */
+
+static bfd_boolean
+wild_spec_can_overlap (const char *name1, const char *name2)
+{
+ size_t prefix1_len = strcspn (name1, "?*[");
+ size_t prefix2_len = strcspn (name2, "?*[");
+ size_t min_prefix_len;
+
+ /* Note that if there is no wildcard character, then we treat the
+ terminating 0 as part of the prefix. Thus ".text" won't match
+ ".text." or ".text.*", for example. */
+ if (name1[prefix1_len] == '\0')
+ prefix1_len++;
+ if (name2[prefix2_len] == '\0')
+ prefix2_len++;
+
+ min_prefix_len = prefix1_len < prefix2_len ? prefix1_len : prefix2_len;
+
+ return memcmp (name1, name2, min_prefix_len) == 0;
+}
+
+/* Select specialized code to handle various kinds of wildcard
+ statements. */
+
+static void
+analyze_walk_wild_section_handler (lang_wild_statement_type *ptr)
+{
+ int sec_count = 0;
+ int wild_name_count = 0;
+ struct wildcard_list *sec;
+ int signature;
+ int data_counter;
+
+ ptr->walk_wild_section_handler = walk_wild_section_general;
+ ptr->handler_data[0] = NULL;
+ ptr->handler_data[1] = NULL;
+ ptr->handler_data[2] = NULL;
+ ptr->handler_data[3] = NULL;
+ ptr->tree = NULL;
+
+ /* Count how many wildcard_specs there are, and how many of those
+ actually use wildcards in the name. Also, bail out if any of the
+ wildcard names are NULL. (Can this actually happen?
+ walk_wild_section used to test for it.) And bail out if any
+ of the wildcards are more complex than a simple string
+ ending in a single '*'. */
+ for (sec = ptr->section_list; sec != NULL; sec = sec->next)
+ {
+ ++sec_count;
+ if (sec->spec.name == NULL)
+ return;
+ if (wildcardp (sec->spec.name))
+ {
+ ++wild_name_count;
+ if (!is_simple_wild (sec->spec.name))
+ return;
+ }
+ }
+
+ /* The zero-spec case would be easy to optimize but it doesn't
+ happen in practice. Likewise, more than 4 specs doesn't
+ happen in practice. */
+ if (sec_count == 0 || sec_count > 4)
+ return;
+
+ /* Check that no two specs can match the same section. */
+ for (sec = ptr->section_list; sec != NULL; sec = sec->next)
+ {
+ struct wildcard_list *sec2;
+ for (sec2 = sec->next; sec2 != NULL; sec2 = sec2->next)
+ {
+ if (wild_spec_can_overlap (sec->spec.name, sec2->spec.name))
+ return;
+ }
+ }
+
+ signature = (sec_count << 8) + wild_name_count;
+ switch (signature)
+ {
+ case 0x0100:
+ ptr->walk_wild_section_handler = walk_wild_section_specs1_wild0;
+ break;
+ case 0x0101:
+ ptr->walk_wild_section_handler = walk_wild_section_specs1_wild1;
+ break;
+ case 0x0201:
+ ptr->walk_wild_section_handler = walk_wild_section_specs2_wild1;
+ break;
+ case 0x0302:
+ ptr->walk_wild_section_handler = walk_wild_section_specs3_wild2;
+ break;
+ case 0x0402:
+ ptr->walk_wild_section_handler = walk_wild_section_specs4_wild2;
+ break;
+ default:
+ return;
+ }
+
+ /* Now fill the data array with pointers to the specs, first the
+ specs with non-wildcard names, then the specs with wildcard
+ names. It's OK to process the specs in different order from the
+ given order, because we've already determined that no section
+ will match more than one spec. */
+ data_counter = 0;
+ for (sec = ptr->section_list; sec != NULL; sec = sec->next)
+ if (!wildcardp (sec->spec.name))
+ ptr->handler_data[data_counter++] = sec;
+ for (sec = ptr->section_list; sec != NULL; sec = sec->next)
+ if (wildcardp (sec->spec.name))
+ ptr->handler_data[data_counter++] = sec;
+}
+
+/* Handle a wild statement for a single file F. */
+
+static void
+walk_wild_file (lang_wild_statement_type *s,
+ lang_input_statement_type *f,
+ callback_t callback,
+ void *data)
+{
+ if (f->the_bfd == NULL
+ || ! bfd_check_format (f->the_bfd, bfd_archive))
+ walk_wild_section (s, f, callback, data);
+ else
+ {
+ bfd *member;
+
+ /* This is an archive file. We must map each member of the
+ archive separately. */
+ member = bfd_openr_next_archived_file (f->the_bfd, NULL);
+ while (member != NULL)
+ {
+ /* When lookup_name is called, it will call the add_symbols
+ entry point for the archive. For each element of the
+ archive which is included, BFD will call ldlang_add_file,
+ which will set the usrdata field of the member to the
+ lang_input_statement. */
+ if (member->usrdata != NULL)
+ {
+ walk_wild_section (s,
+ (lang_input_statement_type *) member->usrdata,
+ callback, data);
+ }
+
+ member = bfd_openr_next_archived_file (f->the_bfd, member);
+ }
+ }
+}
+
+static void
+walk_wild (lang_wild_statement_type *s, callback_t callback, void *data)
+{
+ const char *file_spec = s->filename;
+ char *p;
+
+ if (file_spec == NULL)
+ {
+ /* Perform the iteration over all files in the list. */
+ LANG_FOR_EACH_INPUT_STATEMENT (f)
+ {
+ walk_wild_file (s, f, callback, data);
+ }
+ }
+ else if ((p = archive_path (file_spec)) != NULL)
+ {
+ LANG_FOR_EACH_INPUT_STATEMENT (f)
+ {
+ if (input_statement_is_archive_path (file_spec, p, f))
+ walk_wild_file (s, f, callback, data);
+ }
+ }
+ else if (wildcardp (file_spec))
+ {
+ LANG_FOR_EACH_INPUT_STATEMENT (f)
+ {
+ if (fnmatch (file_spec, f->filename, 0) == 0)
+ walk_wild_file (s, f, callback, data);
+ }
+ }
+ else
+ {
+ lang_input_statement_type *f;
+
+ /* Perform the iteration over a single file. */
+ f = lookup_name (file_spec);
+ if (f)
+ walk_wild_file (s, f, callback, data);
+ }
+}
+
+/* lang_for_each_statement walks the parse tree and calls the provided
+ function for each node, except those inside output section statements
+ with constraint set to -1. */
+
+void
+lang_for_each_statement_worker (void (*func) (lang_statement_union_type *),
+ lang_statement_union_type *s)
+{
+ for (; s != NULL; s = s->header.next)
+ {
+ func (s);
+
+ switch (s->header.type)
+ {
+ case lang_constructors_statement_enum:
+ lang_for_each_statement_worker (func, constructor_list.head);
+ break;
+ case lang_output_section_statement_enum:
+ if (s->output_section_statement.constraint != -1)
+ lang_for_each_statement_worker
+ (func, s->output_section_statement.children.head);
+ break;
+ case lang_wild_statement_enum:
+ lang_for_each_statement_worker (func,
+ s->wild_statement.children.head);
+ break;
+ case lang_group_statement_enum:
+ lang_for_each_statement_worker (func,
+ s->group_statement.children.head);
+ break;
+ case lang_data_statement_enum:
+ case lang_reloc_statement_enum:
+ case lang_object_symbols_statement_enum:
+ case lang_output_statement_enum:
+ case lang_target_statement_enum:
+ case lang_input_section_enum:
+ case lang_input_statement_enum:
+ case lang_assignment_statement_enum:
+ case lang_padding_statement_enum:
+ case lang_address_statement_enum:
+ case lang_fill_statement_enum:
+ case lang_insert_statement_enum:
+ break;
+ default:
+ FAIL ();
+ break;
+ }
+ }
+}
+
+void
+lang_for_each_statement (void (*func) (lang_statement_union_type *))
+{
+ lang_for_each_statement_worker (func, statement_list.head);
+}
+
+/*----------------------------------------------------------------------*/
+
+void
+lang_list_init (lang_statement_list_type *list)
+{
+ list->head = NULL;
+ list->tail = &list->head;
+}
+
+void
+push_stat_ptr (lang_statement_list_type *new_ptr)
+{
+ if (stat_save_ptr >= stat_save + sizeof (stat_save) / sizeof (stat_save[0]))
+ abort ();
+ *stat_save_ptr++ = stat_ptr;
+ stat_ptr = new_ptr;
+}
+
+void
+pop_stat_ptr (void)
+{
+ if (stat_save_ptr <= stat_save)
+ abort ();
+ stat_ptr = *--stat_save_ptr;
+}
+
+/* Build a new statement node for the parse tree. */
+
+static lang_statement_union_type *
+new_statement (enum statement_enum type,
+ size_t size,
+ lang_statement_list_type *list)
+{
+ lang_statement_union_type *new_stmt;
+
+ new_stmt = (lang_statement_union_type *) stat_alloc (size);
+ new_stmt->header.type = type;
+ new_stmt->header.next = NULL;
+ lang_statement_append (list, new_stmt, &new_stmt->header.next);
+ return new_stmt;
+}
+
+/* Build a new input file node for the language. There are several
+ ways in which we treat an input file, eg, we only look at symbols,
+ or prefix it with a -l etc.
+
+ We can be supplied with requests for input files more than once;
+ they may, for example be split over several lines like foo.o(.text)
+ foo.o(.data) etc, so when asked for a file we check that we haven't
+ got it already so we don't duplicate the bfd. */
+
+static lang_input_statement_type *
+new_afile (const char *name,
+ lang_input_file_enum_type file_type,
+ const char *target,
+ bfd_boolean add_to_list)
+{
+ lang_input_statement_type *p;
+
+ if (add_to_list)
+ p = (lang_input_statement_type *) new_stat (lang_input_statement, stat_ptr);
+ else
+ {
+ p = (lang_input_statement_type *)
+ stat_alloc (sizeof (lang_input_statement_type));
+ p->header.type = lang_input_statement_enum;
+ p->header.next = NULL;
+ }
+
+ lang_has_input_file = TRUE;
+ p->target = target;
+ p->sysrooted = FALSE;
+
+ if (file_type == lang_input_file_is_l_enum
+ && name[0] == ':' && name[1] != '\0')
+ {
+ file_type = lang_input_file_is_search_file_enum;
+ name = name + 1;
+ }
+
+ switch (file_type)
+ {
+ case lang_input_file_is_symbols_only_enum:
+ p->filename = name;
+ p->is_archive = FALSE;
+ p->real = TRUE;
+ p->local_sym_name = name;
+ p->just_syms_flag = TRUE;
+ p->search_dirs_flag = FALSE;
+ break;
+ case lang_input_file_is_fake_enum:
+ p->filename = name;
+ p->is_archive = FALSE;
+ p->real = FALSE;
+ p->local_sym_name = name;
+ p->just_syms_flag = FALSE;
+ p->search_dirs_flag = FALSE;
+ break;
+ case lang_input_file_is_l_enum:
+ p->is_archive = TRUE;
+ p->filename = name;
+ p->real = TRUE;
+ p->local_sym_name = concat ("-l", name, (const char *) NULL);
+ p->just_syms_flag = FALSE;
+ p->search_dirs_flag = TRUE;
+ break;
+ case lang_input_file_is_marker_enum:
+ p->filename = name;
+ p->is_archive = FALSE;
+ p->real = FALSE;
+ p->local_sym_name = name;
+ p->just_syms_flag = FALSE;
+ p->search_dirs_flag = TRUE;
+ break;
+ case lang_input_file_is_search_file_enum:
+ p->sysrooted = ldlang_sysrooted_script;
+ p->filename = name;
+ p->is_archive = FALSE;
+ p->real = TRUE;
+ p->local_sym_name = name;
+ p->just_syms_flag = FALSE;
+ p->search_dirs_flag = TRUE;
+ break;
+ case lang_input_file_is_file_enum:
+ p->filename = name;
+ p->is_archive = FALSE;
+ p->real = TRUE;
+ p->local_sym_name = name;
+ p->just_syms_flag = FALSE;
+ p->search_dirs_flag = FALSE;
+ break;
+ default:
+ FAIL ();
+ }
+ p->the_bfd = NULL;
+ p->next_real_file = NULL;
+ p->next = NULL;
+ p->dynamic = config.dynamic_link;
+ p->add_DT_NEEDED_for_dynamic = add_DT_NEEDED_for_dynamic;
+ p->add_DT_NEEDED_for_regular = add_DT_NEEDED_for_regular;
+ p->whole_archive = whole_archive;
+ p->loaded = FALSE;
+ p->missing_file = FALSE;
+
+ lang_statement_append (&input_file_chain,
+ (lang_statement_union_type *) p,
+ &p->next_real_file);
+ return p;
+}
+
+lang_input_statement_type *
+lang_add_input_file (const char *name,
+ lang_input_file_enum_type file_type,
+ const char *target)
+{
+ return new_afile (name, file_type, target, TRUE);
+}
+
+struct out_section_hash_entry
+{
+ struct bfd_hash_entry root;
+ lang_statement_union_type s;
+};
+
+/* The hash table. */
+
+static struct bfd_hash_table output_section_statement_table;
+
+/* Support routines for the hash table used by lang_output_section_find,
+ initialize the table, fill in an entry and remove the table. */
+
+static struct bfd_hash_entry *
+output_section_statement_newfunc (struct bfd_hash_entry *entry,
+ struct bfd_hash_table *table,
+ const char *string)
+{
+ lang_output_section_statement_type **nextp;
+ struct out_section_hash_entry *ret;
+
+ if (entry == NULL)
+ {
+ entry = (struct bfd_hash_entry *) bfd_hash_allocate (table,
+ sizeof (*ret));
+ if (entry == NULL)
+ return entry;
+ }
+
+ entry = bfd_hash_newfunc (entry, table, string);
+ if (entry == NULL)
+ return entry;
+
+ ret = (struct out_section_hash_entry *) entry;
+ memset (&ret->s, 0, sizeof (ret->s));
+ ret->s.header.type = lang_output_section_statement_enum;
+ ret->s.output_section_statement.subsection_alignment = -1;
+ ret->s.output_section_statement.section_alignment = -1;
+ ret->s.output_section_statement.block_value = 1;
+ lang_list_init (&ret->s.output_section_statement.children);
+ lang_statement_append (stat_ptr, &ret->s, &ret->s.header.next);
+
+ /* For every output section statement added to the list, except the
+ first one, lang_output_section_statement.tail points to the "next"
+ field of the last element of the list. */
+ if (lang_output_section_statement.head != NULL)
+ ret->s.output_section_statement.prev
+ = ((lang_output_section_statement_type *)
+ ((char *) lang_output_section_statement.tail
+ - offsetof (lang_output_section_statement_type, next)));
+
+ /* GCC's strict aliasing rules prevent us from just casting the
+ address, so we store the pointer in a variable and cast that
+ instead. */
+ nextp = &ret->s.output_section_statement.next;
+ lang_statement_append (&lang_output_section_statement,
+ &ret->s,
+ (lang_statement_union_type **) nextp);
+ return &ret->root;
+}
+
+static void
+output_section_statement_table_init (void)
+{
+ if (!bfd_hash_table_init_n (&output_section_statement_table,
+ output_section_statement_newfunc,
+ sizeof (struct out_section_hash_entry),
+ 61))
+ einfo (_("%P%F: can not create hash table: %E\n"));
+}
+
+static void
+output_section_statement_table_free (void)
+{
+ bfd_hash_table_free (&output_section_statement_table);
+}
+
+/* Build enough state so that the parser can build its tree. */
+
+void
+lang_init (void)
+{
+ obstack_begin (&stat_obstack, 1000);
+
+ stat_ptr = &statement_list;
+
+ output_section_statement_table_init ();
+
+ lang_list_init (stat_ptr);
+
+ lang_list_init (&input_file_chain);
+ lang_list_init (&lang_output_section_statement);
+ lang_list_init (&file_chain);
+ first_file = lang_add_input_file (NULL, lang_input_file_is_marker_enum,
+ NULL);
+ abs_output_section =
+ lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME, 0, TRUE);
+
+ abs_output_section->bfd_section = bfd_abs_section_ptr;
+
+ /* The value "3" is ad-hoc, somewhat related to the expected number of
+ DEFINED expressions in a linker script. For most default linker
+ scripts, there are none. Why a hash table then? Well, it's somewhat
+ simpler to re-use working machinery than using a linked list in terms
+ of code-complexity here in ld, besides the initialization which just
+ looks like other code here. */
+ if (!bfd_hash_table_init_n (&lang_definedness_table,
+ lang_definedness_newfunc,
+ sizeof (struct lang_definedness_hash_entry),
+ 3))
+ einfo (_("%P%F: can not create hash table: %E\n"));
+}
+
+void
+lang_finish (void)
+{
+ output_section_statement_table_free ();
+}
+
+/*----------------------------------------------------------------------
+ A region is an area of memory declared with the
+ MEMORY { name:org=exp, len=exp ... }
+ syntax.
+
+ We maintain a list of all the regions here.
+
+ If no regions are specified in the script, then the default is used
+ which is created when looked up to be the entire data space.
+
+ If create is true we are creating a region inside a MEMORY block.
+ In this case it is probably an error to create a region that has
+ already been created. If we are not inside a MEMORY block it is
+ dubious to use an undeclared region name (except DEFAULT_MEMORY_REGION)
+ and so we issue a warning.
+
+ Each region has at least one name. The first name is either
+ DEFAULT_MEMORY_REGION or the name given in the MEMORY block. You can add
+ alias names to an existing region within a script with
+ REGION_ALIAS (alias, region_name). Each name corresponds to at most one
+ region. */
+
+static lang_memory_region_type *lang_memory_region_list;
+static lang_memory_region_type **lang_memory_region_list_tail
+ = &lang_memory_region_list;
+
+lang_memory_region_type *
+lang_memory_region_lookup (const char *const name, bfd_boolean create)
+{
+ lang_memory_region_name *n;
+ lang_memory_region_type *r;
+ lang_memory_region_type *new_region;
+
+ /* NAME is NULL for LMA memspecs if no region was specified. */
+ if (name == NULL)
+ return NULL;
+
+ for (r = lang_memory_region_list; r != NULL; r = r->next)
+ for (n = &r->name_list; n != NULL; n = n->next)
+ if (strcmp (n->name, name) == 0)
+ {
+ if (create)
+ einfo (_("%P:%S: warning: redeclaration of memory region `%s'\n"),
+ name);
+ return r;
+ }
+
+ if (!create && strcmp (name, DEFAULT_MEMORY_REGION))
+ einfo (_("%P:%S: warning: memory region `%s' not declared\n"), name);
+
+ new_region = (lang_memory_region_type *)
+ stat_alloc (sizeof (lang_memory_region_type));
+
+ new_region->name_list.name = xstrdup (name);
+ new_region->name_list.next = NULL;
+ new_region->next = NULL;
+ new_region->origin = 0;
+ new_region->length = ~(bfd_size_type) 0;
+ new_region->current = 0;
+ new_region->last_os = NULL;
+ new_region->flags = 0;
+ new_region->not_flags = 0;
+ new_region->had_full_message = FALSE;
+
+ *lang_memory_region_list_tail = new_region;
+ lang_memory_region_list_tail = &new_region->next;
+
+ return new_region;
+}
+
+void
+lang_memory_region_alias (const char * alias, const char * region_name)
+{
+ lang_memory_region_name * n;
+ lang_memory_region_type * r;
+ lang_memory_region_type * region;
+
+ /* The default region must be unique. This ensures that it is not necessary
+ to iterate through the name list if someone wants the check if a region is
+ the default memory region. */
+ if (strcmp (region_name, DEFAULT_MEMORY_REGION) == 0
+ || strcmp (alias, DEFAULT_MEMORY_REGION) == 0)
+ einfo (_("%F%P:%S: error: alias for default memory region\n"));
+
+ /* Look for the target region and check if the alias is not already
+ in use. */
+ region = NULL;
+ for (r = lang_memory_region_list; r != NULL; r = r->next)
+ for (n = &r->name_list; n != NULL; n = n->next)
+ {
+ if (region == NULL && strcmp (n->name, region_name) == 0)
+ region = r;
+ if (strcmp (n->name, alias) == 0)
+ einfo (_("%F%P:%S: error: redefinition of memory region "
+ "alias `%s'\n"),
+ alias);
+ }
+
+ /* Check if the target region exists. */
+ if (region == NULL)
+ einfo (_("%F%P:%S: error: memory region `%s' "
+ "for alias `%s' does not exist\n"),
+ region_name,
+ alias);
+
+ /* Add alias to region name list. */
+ n = (lang_memory_region_name *) stat_alloc (sizeof (lang_memory_region_name));
+ n->name = xstrdup (alias);
+ n->next = region->name_list.next;
+ region->name_list.next = n;
+}
+
+static lang_memory_region_type *
+lang_memory_default (asection * section)
+{
+ lang_memory_region_type *p;
+
+ flagword sec_flags = section->flags;
+
+ /* Override SEC_DATA to mean a writable section. */
+ if ((sec_flags & (SEC_ALLOC | SEC_READONLY | SEC_CODE)) == SEC_ALLOC)
+ sec_flags |= SEC_DATA;
+
+ for (p = lang_memory_region_list; p != NULL; p = p->next)
+ {
+ if ((p->flags & sec_flags) != 0
+ && (p->not_flags & sec_flags) == 0)
+ {
+ return p;
+ }
+ }
+ return lang_memory_region_lookup (DEFAULT_MEMORY_REGION, FALSE);
+}
+
+/* Find or create an output_section_statement with the given NAME.
+ If CONSTRAINT is non-zero match one with that constraint, otherwise
+ match any non-negative constraint. If CREATE, always make a
+ new output_section_statement for SPECIAL CONSTRAINT. */
+
+lang_output_section_statement_type *
+lang_output_section_statement_lookup (const char *name,
+ int constraint,
+ bfd_boolean create)
+{
+ struct out_section_hash_entry *entry;
+
+ entry = ((struct out_section_hash_entry *)
+ bfd_hash_lookup (&output_section_statement_table, name,
+ create, FALSE));
+ if (entry == NULL)
+ {
+ if (create)
+ einfo (_("%P%F: failed creating section `%s': %E\n"), name);
+ return NULL;
+ }
+
+ if (entry->s.output_section_statement.name != NULL)
+ {
+ /* We have a section of this name, but it might not have the correct
+ constraint. */
+ struct out_section_hash_entry *last_ent;
+
+ name = entry->s.output_section_statement.name;
+ if (create && constraint == SPECIAL)
+ /* Not traversing to the end reverses the order of the second
+ and subsequent SPECIAL sections in the hash table chain,
+ but that shouldn't matter. */
+ last_ent = entry;
+ else
+ do
+ {
+ if (constraint == entry->s.output_section_statement.constraint
+ || (constraint == 0
+ && entry->s.output_section_statement.constraint >= 0))
+ return &entry->s.output_section_statement;
+ last_ent = entry;
+ entry = (struct out_section_hash_entry *) entry->root.next;
+ }
+ while (entry != NULL
+ && name == entry->s.output_section_statement.name);
+
+ if (!create)
+ return NULL;
+
+ entry
+ = ((struct out_section_hash_entry *)
+ output_section_statement_newfunc (NULL,
+ &output_section_statement_table,
+ name));
+ if (entry == NULL)
+ {
+ einfo (_("%P%F: failed creating section `%s': %E\n"), name);
+ return NULL;
+ }
+ entry->root = last_ent->root;
+ last_ent->root.next = &entry->root;
+ }
+
+ entry->s.output_section_statement.name = name;
+ entry->s.output_section_statement.constraint = constraint;
+ return &entry->s.output_section_statement;
+}
+
+/* Find the next output_section_statement with the same name as OS.
+ If CONSTRAINT is non-zero, find one with that constraint otherwise
+ match any non-negative constraint. */
+
+lang_output_section_statement_type *
+next_matching_output_section_statement (lang_output_section_statement_type *os,
+ int constraint)
+{
+ /* All output_section_statements are actually part of a
+ struct out_section_hash_entry. */
+ struct out_section_hash_entry *entry = (struct out_section_hash_entry *)
+ ((char *) os
+ - offsetof (struct out_section_hash_entry, s.output_section_statement));
+ const char *name = os->name;
+
+ ASSERT (name == entry->root.string);
+ do
+ {
+ entry = (struct out_section_hash_entry *) entry->root.next;
+ if (entry == NULL
+ || name != entry->s.output_section_statement.name)
+ return NULL;
+ }
+ while (constraint != entry->s.output_section_statement.constraint
+ && (constraint != 0
+ || entry->s.output_section_statement.constraint < 0));
+
+ return &entry->s.output_section_statement;
+}
+
+/* A variant of lang_output_section_find used by place_orphan.
+ Returns the output statement that should precede a new output
+ statement for SEC. If an exact match is found on certain flags,
+ sets *EXACT too. */
+
+lang_output_section_statement_type *
+lang_output_section_find_by_flags (const asection *sec,
+ lang_output_section_statement_type **exact,
+ lang_match_sec_type_func match_type)
+{
+ lang_output_section_statement_type *first, *look, *found;
+ flagword flags;
+
+ /* We know the first statement on this list is *ABS*. May as well
+ skip it. */
+ first = &lang_output_section_statement.head->output_section_statement;
+ first = first->next;
+
+ /* First try for an exact match. */
+ found = NULL;
+ for (look = first; look; look = look->next)
+ {
+ flags = look->flags;
+ if (look->bfd_section != NULL)
+ {
+ flags = look->bfd_section->flags;
+ if (match_type && !match_type (link_info.output_bfd,
+ look->bfd_section,
+ sec->owner, sec))
+ continue;
+ }
+ flags ^= sec->flags;
+ if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY
+ | SEC_CODE | SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
+ found = look;
+ }
+ if (found != NULL)
+ {
+ if (exact != NULL)
+ *exact = found;
+ return found;
+ }
+
+ if ((sec->flags & SEC_CODE) != 0
+ && (sec->flags & SEC_ALLOC) != 0)
+ {
+ /* Try for a rw code section. */
+ for (look = first; look; look = look->next)
+ {
+ flags = look->flags;
+ if (look->bfd_section != NULL)
+ {
+ flags = look->bfd_section->flags;
+ if (match_type && !match_type (link_info.output_bfd,
+ look->bfd_section,
+ sec->owner, sec))
+ continue;
+ }
+ flags ^= sec->flags;
+ if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
+ | SEC_CODE | SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
+ found = look;
+ }
+ }
+ else if ((sec->flags & (SEC_READONLY | SEC_THREAD_LOCAL)) != 0
+ && (sec->flags & SEC_ALLOC) != 0)
+ {
+ /* .rodata can go after .text, .sdata2 after .rodata. */
+ for (look = first; look; look = look->next)
+ {
+ flags = look->flags;
+ if (look->bfd_section != NULL)
+ {
+ flags = look->bfd_section->flags;
+ if (match_type && !match_type (link_info.output_bfd,
+ look->bfd_section,
+ sec->owner, sec))
+ continue;
+ }
+ flags ^= sec->flags;
+ if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
+ | SEC_READONLY))
+ && !(look->flags & (SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
+ found = look;
+ }
+ }
+ else if ((sec->flags & SEC_SMALL_DATA) != 0
+ && (sec->flags & SEC_ALLOC) != 0)
+ {
+ /* .sdata goes after .data, .sbss after .sdata. */
+ for (look = first; look; look = look->next)
+ {
+ flags = look->flags;
+ if (look->bfd_section != NULL)
+ {
+ flags = look->bfd_section->flags;
+ if (match_type && !match_type (link_info.output_bfd,
+ look->bfd_section,
+ sec->owner, sec))
+ continue;
+ }
+ flags ^= sec->flags;
+ if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
+ | SEC_THREAD_LOCAL))
+ || ((look->flags & SEC_SMALL_DATA)
+ && !(sec->flags & SEC_HAS_CONTENTS)))
+ found = look;
+ }
+ }
+ else if ((sec->flags & SEC_HAS_CONTENTS) != 0
+ && (sec->flags & SEC_ALLOC) != 0)
+ {
+ /* .data goes after .rodata. */
+ for (look = first; look; look = look->next)
+ {
+ flags = look->flags;
+ if (look->bfd_section != NULL)
+ {
+ flags = look->bfd_section->flags;
+ if (match_type && !match_type (link_info.output_bfd,
+ look->bfd_section,
+ sec->owner, sec))
+ continue;
+ }
+ flags ^= sec->flags;
+ if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
+ | SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
+ found = look;
+ }
+ }
+ else if ((sec->flags & SEC_ALLOC) != 0)
+ {
+ /* .bss goes after any other alloc section. */
+ for (look = first; look; look = look->next)
+ {
+ flags = look->flags;
+ if (look->bfd_section != NULL)
+ {
+ flags = look->bfd_section->flags;
+ if (match_type && !match_type (link_info.output_bfd,
+ look->bfd_section,
+ sec->owner, sec))
+ continue;
+ }
+ flags ^= sec->flags;
+ if (!(flags & SEC_ALLOC))
+ found = look;
+ }
+ }
+ else
+ {
+ /* non-alloc go last. */
+ for (look = first; look; look = look->next)
+ {
+ flags = look->flags;
+ if (look->bfd_section != NULL)
+ flags = look->bfd_section->flags;
+ flags ^= sec->flags;
+ if (!(flags & SEC_DEBUGGING))
+ found = look;
+ }
+ return found;
+ }
+
+ if (found || !match_type)
+ return found;
+
+ return lang_output_section_find_by_flags (sec, NULL, NULL);
+}
+
+/* Find the last output section before given output statement.
+ Used by place_orphan. */
+
+static asection *
+output_prev_sec_find (lang_output_section_statement_type *os)
+{
+ lang_output_section_statement_type *lookup;
+
+ for (lookup = os->prev; lookup != NULL; lookup = lookup->prev)
+ {
+ if (lookup->constraint < 0)
+ continue;
+
+ if (lookup->bfd_section != NULL && lookup->bfd_section->owner != NULL)
+ return lookup->bfd_section;
+ }
+
+ return NULL;
+}
+
+/* Look for a suitable place for a new output section statement. The
+ idea is to skip over anything that might be inside a SECTIONS {}
+ statement in a script, before we find another output section
+ statement. Assignments to "dot" before an output section statement
+ are assumed to belong to it, except in two cases; The first
+ assignment to dot, and assignments before non-alloc sections.
+ Otherwise we might put an orphan before . = . + SIZEOF_HEADERS or
+ similar assignments that set the initial address, or we might
+ insert non-alloc note sections among assignments setting end of
+ image symbols. */
+
+static lang_statement_union_type **
+insert_os_after (lang_output_section_statement_type *after)
+{
+ lang_statement_union_type **where;
+ lang_statement_union_type **assign = NULL;
+ bfd_boolean ignore_first;
+
+ ignore_first
+ = after == &lang_output_section_statement.head->output_section_statement;
+
+ for (where = &after->header.next;
+ *where != NULL;
+ where = &(*where)->header.next)
+ {
+ switch ((*where)->header.type)
+ {
+ case lang_assignment_statement_enum:
+ if (assign == NULL)
+ {
+ lang_assignment_statement_type *ass;
+
+ ass = &(*where)->assignment_statement;
+ if (ass->exp->type.node_class != etree_assert
+ && ass->exp->assign.dst[0] == '.'
+ && ass->exp->assign.dst[1] == 0
+ && !ignore_first)
+ assign = where;
+ }
+ ignore_first = FALSE;
+ continue;
+ case lang_wild_statement_enum:
+ case lang_input_section_enum:
+ case lang_object_symbols_statement_enum:
+ case lang_fill_statement_enum:
+ case lang_data_statement_enum:
+ case lang_reloc_statement_enum:
+ case lang_padding_statement_enum:
+ case lang_constructors_statement_enum:
+ assign = NULL;
+ continue;
+ case lang_output_section_statement_enum:
+ if (assign != NULL)
+ {
+ asection *s = (*where)->output_section_statement.bfd_section;
+
+ if (s == NULL
+ || s->map_head.s == NULL
+ || (s->flags & SEC_ALLOC) != 0)
+ where = assign;
+ }
+ break;
+ case lang_input_statement_enum:
+ case lang_address_statement_enum:
+ case lang_target_statement_enum:
+ case lang_output_statement_enum:
+ case lang_group_statement_enum:
+ case lang_insert_statement_enum:
+ continue;
+ }
+ break;
+ }
+
+ return where;
+}
+
+lang_output_section_statement_type *
+lang_insert_orphan (asection *s,
+ const char *secname,
+ int constraint,
+ lang_output_section_statement_type *after,
+ struct orphan_save *place,
+ etree_type *address,
+ lang_statement_list_type *add_child)
+{
+ lang_statement_list_type add;
+ const char *ps;
+ lang_output_section_statement_type *os;
+ lang_output_section_statement_type **os_tail;
+
+ /* If we have found an appropriate place for the output section
+ statements for this orphan, add them to our own private list,
+ inserting them later into the global statement list. */
+ if (after != NULL)
+ {
+ lang_list_init (&add);
+ push_stat_ptr (&add);
+ }
+
+ if (link_info.relocatable || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0)
+ address = exp_intop (0);
+
+ os_tail = ((lang_output_section_statement_type **)
+ lang_output_section_statement.tail);
+ os = lang_enter_output_section_statement (secname, address, normal_section,
+ NULL, NULL, NULL, constraint);
+
+ ps = NULL;
+ if (config.build_constructors && *os_tail == os)
+ {
+ /* If the name of the section is representable in C, then create
+ symbols to mark the start and the end of the section. */
+ for (ps = secname; *ps != '\0'; ps++)
+ if (! ISALNUM ((unsigned char) *ps) && *ps != '_')
+ break;
+ if (*ps == '\0')
+ {
+ char *symname;
+ etree_type *e_align;
+
+ symname = (char *) xmalloc (ps - secname + sizeof "__start_" + 1);
+ symname[0] = bfd_get_symbol_leading_char (link_info.output_bfd);
+ sprintf (symname + (symname[0] != 0), "__start_%s", secname);
+ e_align = exp_unop (ALIGN_K,
+ exp_intop ((bfd_vma) 1 << s->alignment_power));
+ lang_add_assignment (exp_assop ('=', ".", e_align));
+ lang_add_assignment (exp_provide (symname,
+ exp_unop (ABSOLUTE,
+ exp_nameop (NAME, ".")),
+ FALSE));
+ }
+ }
+
+ if (add_child == NULL)
+ add_child = &os->children;
+ lang_add_section (add_child, s, os);
+
+ if (after && (s->flags & (SEC_LOAD | SEC_ALLOC)) != 0)
+ {
+ const char *region = (after->region
+ ? after->region->name_list.name
+ : DEFAULT_MEMORY_REGION);
+ const char *lma_region = (after->lma_region
+ ? after->lma_region->name_list.name
+ : NULL);
+ lang_leave_output_section_statement (NULL, region, after->phdrs,
+ lma_region);
+ }
+ else
+ lang_leave_output_section_statement (NULL, DEFAULT_MEMORY_REGION, NULL,
+ NULL);
+
+ if (ps != NULL && *ps == '\0')
+ {
+ char *symname;
+
+ symname = (char *) xmalloc (ps - secname + sizeof "__stop_" + 1);
+ symname[0] = bfd_get_symbol_leading_char (link_info.output_bfd);
+ sprintf (symname + (symname[0] != 0), "__stop_%s", secname);
+ lang_add_assignment (exp_provide (symname,
+ exp_nameop (NAME, "."),
+ FALSE));
+ }
+
+ /* Restore the global list pointer. */
+ if (after != NULL)
+ pop_stat_ptr ();
+
+ if (after != NULL && os->bfd_section != NULL)
+ {
+ asection *snew, *as;
+
+ snew = os->bfd_section;
+
+ /* Shuffle the bfd section list to make the output file look
+ neater. This is really only cosmetic. */
+ if (place->section == NULL
+ && after != (&lang_output_section_statement.head
+ ->output_section_statement))
+ {
+ asection *bfd_section = after->bfd_section;
+
+ /* If the output statement hasn't been used to place any input
+ sections (and thus doesn't have an output bfd_section),
+ look for the closest prior output statement having an
+ output section. */
+ if (bfd_section == NULL)
+ bfd_section = output_prev_sec_find (after);
+
+ if (bfd_section != NULL && bfd_section != snew)
+ place->section = &bfd_section->next;
+ }
+
+ if (place->section == NULL)
+ place->section = &link_info.output_bfd->sections;
+
+ as = *place->section;
+
+ if (!as)
+ {
+ /* Put the section at the end of the list. */
+
+ /* Unlink the section. */
+ bfd_section_list_remove (link_info.output_bfd, snew);
+
+ /* Now tack it back on in the right place. */
+ bfd_section_list_append (link_info.output_bfd, snew);
+ }
+ else if (as != snew && as->prev != snew)
+ {
+ /* Unlink the section. */
+ bfd_section_list_remove (link_info.output_bfd, snew);
+
+ /* Now tack it back on in the right place. */
+ bfd_section_list_insert_before (link_info.output_bfd, as, snew);
+ }
+
+ /* Save the end of this list. Further ophans of this type will
+ follow the one we've just added. */
+ place->section = &snew->next;
+
+ /* The following is non-cosmetic. We try to put the output
+ statements in some sort of reasonable order here, because they
+ determine the final load addresses of the orphan sections.
+ In addition, placing output statements in the wrong order may
+ require extra segments. For instance, given a typical
+ situation of all read-only sections placed in one segment and
+ following that a segment containing all the read-write
+ sections, we wouldn't want to place an orphan read/write
+ section before or amongst the read-only ones. */
+ if (add.head != NULL)
+ {
+ lang_output_section_statement_type *newly_added_os;
+
+ if (place->stmt == NULL)
+ {
+ lang_statement_union_type **where = insert_os_after (after);
+
+ *add.tail = *where;
+ *where = add.head;
+
+ place->os_tail = &after->next;
+ }
+ else
+ {
+ /* Put it after the last orphan statement we added. */
+ *add.tail = *place->stmt;
+ *place->stmt = add.head;
+ }
+
+ /* Fix the global list pointer if we happened to tack our
+ new list at the tail. */
+ if (*stat_ptr->tail == add.head)
+ stat_ptr->tail = add.tail;
+
+ /* Save the end of this list. */
+ place->stmt = add.tail;
+
+ /* Do the same for the list of output section statements. */
+ newly_added_os = *os_tail;
+ *os_tail = NULL;
+ newly_added_os->prev = (lang_output_section_statement_type *)
+ ((char *) place->os_tail
+ - offsetof (lang_output_section_statement_type, next));
+ newly_added_os->next = *place->os_tail;
+ if (newly_added_os->next != NULL)
+ newly_added_os->next->prev = newly_added_os;
+ *place->os_tail = newly_added_os;
+ place->os_tail = &newly_added_os->next;
+
+ /* Fixing the global list pointer here is a little different.
+ We added to the list in lang_enter_output_section_statement,
+ trimmed off the new output_section_statment above when
+ assigning *os_tail = NULL, but possibly added it back in
+ the same place when assigning *place->os_tail. */
+ if (*os_tail == NULL)
+ lang_output_section_statement.tail
+ = (lang_statement_union_type **) os_tail;
+ }
+ }
+ return os;
+}
+
+static void
+lang_map_flags (flagword flag)
+{
+ if (flag & SEC_ALLOC)
+ minfo ("a");
+
+ if (flag & SEC_CODE)
+ minfo ("x");
+
+ if (flag & SEC_READONLY)
+ minfo ("r");
+
+ if (flag & SEC_DATA)
+ minfo ("w");
+
+ if (flag & SEC_LOAD)
+ minfo ("l");
+}
+
+void
+lang_map (void)
+{
+ lang_memory_region_type *m;
+ bfd_boolean dis_header_printed = FALSE;
+ bfd *p;
+
+ LANG_FOR_EACH_INPUT_STATEMENT (file)
+ {
+ asection *s;
+
+ if ((file->the_bfd->flags & (BFD_LINKER_CREATED | DYNAMIC)) != 0
+ || file->just_syms_flag)
+ continue;
+
+ for (s = file->the_bfd->sections; s != NULL; s = s->next)
+ if ((s->output_section == NULL
+ || s->output_section->owner != link_info.output_bfd)
+ && (s->flags & (SEC_LINKER_CREATED | SEC_KEEP)) == 0)
+ {
+ if (! dis_header_printed)
+ {
+ fprintf (config.map_file, _("\nDiscarded input sections\n\n"));
+ dis_header_printed = TRUE;
+ }
+
+ print_input_section (s, TRUE);
+ }
+ }
+
+ minfo (_("\nMemory Configuration\n\n"));
+ fprintf (config.map_file, "%-16s %-18s %-18s %s\n",
+ _("Name"), _("Origin"), _("Length"), _("Attributes"));
+
+ for (m = lang_memory_region_list; m != NULL; m = m->next)
+ {
+ char buf[100];
+ int len;
+
+ fprintf (config.map_file, "%-16s ", m->name_list.name);
+
+ sprintf_vma (buf, m->origin);
+ minfo ("0x%s ", buf);
+ len = strlen (buf);
+ while (len < 16)
+ {
+ print_space ();
+ ++len;
+ }
+
+ minfo ("0x%V", m->length);
+ if (m->flags || m->not_flags)
+ {
+#ifndef BFD64
+ minfo (" ");
+#endif
+ if (m->flags)
+ {
+ print_space ();
+ lang_map_flags (m->flags);
+ }
+
+ if (m->not_flags)
+ {
+ minfo (" !");
+ lang_map_flags (m->not_flags);
+ }
+ }
+
+ print_nl ();
+ }
+
+ fprintf (config.map_file, _("\nLinker script and memory map\n\n"));
+
+ if (! link_info.reduce_memory_overheads)
+ {
+ obstack_begin (&map_obstack, 1000);
+ for (p = link_info.input_bfds; p != (bfd *) NULL; p = p->link_next)
+ bfd_map_over_sections (p, init_map_userdata, 0);
+ bfd_link_hash_traverse (link_info.hash, sort_def_symbol, 0);
+ }
+ lang_statement_iteration ++;
+ print_statements ();
+}
+
+static void
+init_map_userdata (bfd *abfd ATTRIBUTE_UNUSED,
+ asection *sec,
+ void *data ATTRIBUTE_UNUSED)
+{
+ fat_section_userdata_type *new_data
+ = ((fat_section_userdata_type *) (stat_alloc
+ (sizeof (fat_section_userdata_type))));
+
+ ASSERT (get_userdata (sec) == NULL);
+ get_userdata (sec) = new_data;
+ new_data->map_symbol_def_tail = &new_data->map_symbol_def_head;
+ new_data->map_symbol_def_count = 0;
+}
+
+static bfd_boolean
+sort_def_symbol (struct bfd_link_hash_entry *hash_entry,
+ void *info ATTRIBUTE_UNUSED)
+{
+ if (hash_entry->type == bfd_link_hash_defined
+ || hash_entry->type == bfd_link_hash_defweak)
+ {
+ struct fat_user_section_struct *ud;
+ struct map_symbol_def *def;
+
+ ud = (struct fat_user_section_struct *)
+ get_userdata (hash_entry->u.def.section);
+ if (! ud)
+ {
+ /* ??? What do we have to do to initialize this beforehand? */
+ /* The first time we get here is bfd_abs_section... */
+ init_map_userdata (0, hash_entry->u.def.section, 0);
+ ud = (struct fat_user_section_struct *)
+ get_userdata (hash_entry->u.def.section);
+ }
+ else if (!ud->map_symbol_def_tail)
+ ud->map_symbol_def_tail = &ud->map_symbol_def_head;
+
+ def = (struct map_symbol_def *) obstack_alloc (&map_obstack, sizeof *def);
+ def->entry = hash_entry;
+ *(ud->map_symbol_def_tail) = def;
+ ud->map_symbol_def_tail = &def->next;
+ ud->map_symbol_def_count++;
+ }
+ return TRUE;
+}
+
+/* Initialize an output section. */
+
+static void
+init_os (lang_output_section_statement_type *s, flagword flags)
+{
+ if (strcmp (s->name, DISCARD_SECTION_NAME) == 0)
+ einfo (_("%P%F: Illegal use of `%s' section\n"), DISCARD_SECTION_NAME);
+
+ if (s->constraint != SPECIAL)
+ s->bfd_section = bfd_get_section_by_name (link_info.output_bfd, s->name);
+ if (s->bfd_section == NULL)
+ s->bfd_section = bfd_make_section_anyway_with_flags (link_info.output_bfd,
+ s->name, flags);
+ if (s->bfd_section == NULL)
+ {
+ einfo (_("%P%F: output format %s cannot represent section called %s\n"),
+ link_info.output_bfd->xvec->name, s->name);
+ }
+ s->bfd_section->output_section = s->bfd_section;
+ s->bfd_section->output_offset = 0;
+
+ if (!link_info.reduce_memory_overheads)
+ {
+ fat_section_userdata_type *new_userdata = (fat_section_userdata_type *)
+ stat_alloc (sizeof (fat_section_userdata_type));
+ memset (new_userdata, 0, sizeof (fat_section_userdata_type));
+ get_userdata (s->bfd_section) = new_userdata;
+ }
+
+ /* If there is a base address, make sure that any sections it might
+ mention are initialized. */
+ if (s->addr_tree != NULL)
+ exp_init_os (s->addr_tree);
+
+ if (s->load_base != NULL)
+ exp_init_os (s->load_base);
+
+ /* If supplied an alignment, set it. */
+ if (s->section_alignment != -1)
+ s->bfd_section->alignment_power = s->section_alignment;
+}
+
+/* Make sure that all output sections mentioned in an expression are
+ initialized. */
+
+static void
+exp_init_os (etree_type *exp)
+{
+ switch (exp->type.node_class)
+ {
+ case etree_assign:
+ case etree_provide:
+ exp_init_os (exp->assign.src);
+ break;
+
+ case etree_binary:
+ exp_init_os (exp->binary.lhs);
+ exp_init_os (exp->binary.rhs);
+ break;
+
+ case etree_trinary:
+ exp_init_os (exp->trinary.cond);
+ exp_init_os (exp->trinary.lhs);
+ exp_init_os (exp->trinary.rhs);
+ break;
+
+ case etree_assert:
+ exp_init_os (exp->assert_s.child);
+ break;
+
+ case etree_unary:
+ exp_init_os (exp->unary.child);
+ break;
+
+ case etree_name:
+ switch (exp->type.node_code)
+ {
+ case ADDR:
+ case LOADADDR:
+ case SIZEOF:
+ {
+ lang_output_section_statement_type *os;
+
+ os = lang_output_section_find (exp->name.name);
+ if (os != NULL && os->bfd_section == NULL)
+ init_os (os, 0);
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+}
+
+static void
+section_already_linked (bfd *abfd, asection *sec, void *data)
+{
+ lang_input_statement_type *entry = (lang_input_statement_type *) data;
+
+ /* If we are only reading symbols from this object, then we want to
+ discard all sections. */
+ if (entry->just_syms_flag)
+ {
+ bfd_link_just_syms (abfd, sec, &link_info);
+ return;
+ }
+
+ if (!(abfd->flags & DYNAMIC))
+ bfd_section_already_linked (abfd, sec, &link_info);
+}
+
+/* The wild routines.
+
+ These expand statements like *(.text) and foo.o to a list of
+ explicit actions, like foo.o(.text), bar.o(.text) and
+ foo.o(.text, .data). */
+
+/* Add SECTION to the output section OUTPUT. Do this by creating a
+ lang_input_section statement which is placed at PTR. FILE is the
+ input file which holds SECTION. */
+
+void
+lang_add_section (lang_statement_list_type *ptr,
+ asection *section,
+ lang_output_section_statement_type *output)
+{
+ flagword flags = section->flags;
+ bfd_boolean discard;
+ lang_input_section_type *new_section;
+
+ /* Discard sections marked with SEC_EXCLUDE. */
+ discard = (flags & SEC_EXCLUDE) != 0;
+
+ /* Discard input sections which are assigned to a section named
+ DISCARD_SECTION_NAME. */
+ if (strcmp (output->name, DISCARD_SECTION_NAME) == 0)
+ discard = TRUE;
+
+ /* Discard debugging sections if we are stripping debugging
+ information. */
+ if ((link_info.strip == strip_debugger || link_info.strip == strip_all)
+ && (flags & SEC_DEBUGGING) != 0)
+ discard = TRUE;
+
+ if (discard)
+ {
+ if (section->output_section == NULL)
+ {
+ /* This prevents future calls from assigning this section. */
+ section->output_section = bfd_abs_section_ptr;
+ }
+ return;
+ }
+
+ if (section->output_section != NULL)
+ return;
+
+ /* We don't copy the SEC_NEVER_LOAD flag from an input section
+ to an output section, because we want to be able to include a
+ SEC_NEVER_LOAD section in the middle of an otherwise loaded
+ section (I don't know why we want to do this, but we do).
+ build_link_order in ldwrite.c handles this case by turning
+ the embedded SEC_NEVER_LOAD section into a fill. */
+ flags &= ~ SEC_NEVER_LOAD;
+
+ /* If final link, don't copy the SEC_LINK_ONCE flags, they've
+ already been processed. One reason to do this is that on pe
+ format targets, .text$foo sections go into .text and it's odd
+ to see .text with SEC_LINK_ONCE set. */
+
+ if (!link_info.relocatable)
+ flags &= ~(SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_RELOC);
+
+ switch (output->sectype)
+ {
+ case normal_section:
+ case overlay_section:
+ break;
+ case noalloc_section:
+ flags &= ~SEC_ALLOC;
+ break;
+ case noload_section:
+ flags &= ~SEC_LOAD;
+ flags |= SEC_NEVER_LOAD;
+ /* Unfortunately GNU ld has managed to evolve two different
+ meanings to NOLOAD in scripts. ELF gets a .bss style noload,
+ alloc, no contents section. All others get a noload, noalloc
+ section. */
+ if (bfd_get_flavour (link_info.output_bfd) == bfd_target_elf_flavour)
+ flags &= ~SEC_HAS_CONTENTS;
+ else
+ flags &= ~SEC_ALLOC;
+ break;
+ }
+
+ if (output->bfd_section == NULL)
+ init_os (output, flags);
+
+ /* If SEC_READONLY is not set in the input section, then clear
+ it from the output section. */
+ output->bfd_section->flags &= flags | ~SEC_READONLY;
+
+ if (output->bfd_section->linker_has_input)
+ {
+ /* Only set SEC_READONLY flag on the first input section. */
+ flags &= ~ SEC_READONLY;
+
+ /* Keep SEC_MERGE and SEC_STRINGS only if they are the same. */
+ if ((output->bfd_section->flags & (SEC_MERGE | SEC_STRINGS))
+ != (flags & (SEC_MERGE | SEC_STRINGS))
+ || ((flags & SEC_MERGE) != 0
+ && output->bfd_section->entsize != section->entsize))
+ {
+ output->bfd_section->flags &= ~ (SEC_MERGE | SEC_STRINGS);
+ flags &= ~ (SEC_MERGE | SEC_STRINGS);
+ }
+ }
+ output->bfd_section->flags |= flags;
+
+ if (!output->bfd_section->linker_has_input)
+ {
+ output->bfd_section->linker_has_input = 1;
+ /* This must happen after flags have been updated. The output
+ section may have been created before we saw its first input
+ section, eg. for a data statement. */
+ bfd_init_private_section_data (section->owner, section,
+ link_info.output_bfd,
+ output->bfd_section,
+ &link_info);
+ if ((flags & SEC_MERGE) != 0)
+ output->bfd_section->entsize = section->entsize;
+ }
+
+ if ((flags & SEC_TIC54X_BLOCK) != 0
+ && bfd_get_arch (section->owner) == bfd_arch_tic54x)
+ {
+ /* FIXME: This value should really be obtained from the bfd... */
+ output->block_value = 128;
+ }
+
+ if (section->alignment_power > output->bfd_section->alignment_power)
+ output->bfd_section->alignment_power = section->alignment_power;
+
+ section->output_section = output->bfd_section;
+
+ if (!link_info.relocatable
+ && !stripped_excluded_sections)
+ {
+ asection *s = output->bfd_section->map_tail.s;
+ output->bfd_section->map_tail.s = section;
+ section->map_head.s = NULL;
+ section->map_tail.s = s;
+ if (s != NULL)
+ s->map_head.s = section;
+ else
+ output->bfd_section->map_head.s = section;
+ }
+
+ /* Add a section reference to the list. */
+ new_section = new_stat (lang_input_section, ptr);
+ new_section->section = section;
+}
+
+/* Handle wildcard sorting. This returns the lang_input_section which
+ should follow the one we are going to create for SECTION and FILE,
+ based on the sorting requirements of WILD. It returns NULL if the
+ new section should just go at the end of the current list. */
+
+static lang_statement_union_type *
+wild_sort (lang_wild_statement_type *wild,
+ struct wildcard_list *sec,
+ lang_input_statement_type *file,
+ asection *section)
+{
+ lang_statement_union_type *l;
+
+ if (!wild->filenames_sorted
+ && (sec == NULL || sec->spec.sorted == none))
+ return NULL;
+
+ for (l = wild->children.head; l != NULL; l = l->header.next)
+ {
+ lang_input_section_type *ls;
+
+ if (l->header.type != lang_input_section_enum)
+ continue;
+ ls = &l->input_section;
+
+ /* Sorting by filename takes precedence over sorting by section
+ name. */
+
+ if (wild->filenames_sorted)
+ {
+ const char *fn, *ln;
+ bfd_boolean fa, la;
+ int i;
+
+ /* The PE support for the .idata section as generated by
+ dlltool assumes that files will be sorted by the name of
+ the archive and then the name of the file within the
+ archive. */
+
+ if (file->the_bfd != NULL
+ && bfd_my_archive (file->the_bfd) != NULL)
+ {
+ fn = bfd_get_filename (bfd_my_archive (file->the_bfd));
+ fa = TRUE;
+ }
+ else
+ {
+ fn = file->filename;
+ fa = FALSE;
+ }
+
+ if (bfd_my_archive (ls->section->owner) != NULL)
+ {
+ ln = bfd_get_filename (bfd_my_archive (ls->section->owner));
+ la = TRUE;
+ }
+ else
+ {
+ ln = ls->section->owner->filename;
+ la = FALSE;
+ }
+
+ i = strcmp (fn, ln);
+ if (i > 0)
+ continue;
+ else if (i < 0)
+ break;
+
+ if (fa || la)
+ {
+ if (fa)
+ fn = file->filename;
+ if (la)
+ ln = ls->section->owner->filename;
+
+ i = strcmp (fn, ln);
+ if (i > 0)
+ continue;
+ else if (i < 0)
+ break;
+ }
+ }
+
+ /* Here either the files are not sorted by name, or we are
+ looking at the sections for this file. */
+
+ if (sec != NULL && sec->spec.sorted != none)
+ if (compare_section (sec->spec.sorted, section, ls->section) < 0)
+ break;
+ }
+
+ return l;
+}
+
+/* Expand a wild statement for a particular FILE. SECTION may be
+ NULL, in which case it is a wild card. */
+
+static void
+output_section_callback (lang_wild_statement_type *ptr,
+ struct wildcard_list *sec,
+ asection *section,
+ lang_input_statement_type *file,
+ void *output)
+{
+ lang_statement_union_type *before;
+ lang_output_section_statement_type *os;
+
+ os = (lang_output_section_statement_type *) output;
+
+ /* Exclude sections that match UNIQUE_SECTION_LIST. */
+ if (unique_section_p (section, os))
+ return;
+
+ before = wild_sort (ptr, sec, file, section);
+
+ /* Here BEFORE points to the lang_input_section which
+ should follow the one we are about to add. If BEFORE
+ is NULL, then the section should just go at the end
+ of the current list. */
+
+ if (before == NULL)
+ lang_add_section (&ptr->children, section, os);
+ else
+ {
+ lang_statement_list_type list;
+ lang_statement_union_type **pp;
+
+ lang_list_init (&list);
+ lang_add_section (&list, section, os);
+
+ /* If we are discarding the section, LIST.HEAD will
+ be NULL. */
+ if (list.head != NULL)
+ {
+ ASSERT (list.head->header.next == NULL);
+
+ for (pp = &ptr->children.head;
+ *pp != before;
+ pp = &(*pp)->header.next)
+ ASSERT (*pp != NULL);
+
+ list.head->header.next = *pp;
+ *pp = list.head;
+ }
+ }
+}
+
+/* Check if all sections in a wild statement for a particular FILE
+ are readonly. */
+
+static void
+check_section_callback (lang_wild_statement_type *ptr ATTRIBUTE_UNUSED,
+ struct wildcard_list *sec ATTRIBUTE_UNUSED,
+ asection *section,
+ lang_input_statement_type *file ATTRIBUTE_UNUSED,
+ void *output)
+{
+ lang_output_section_statement_type *os;
+
+ os = (lang_output_section_statement_type *) output;
+
+ /* Exclude sections that match UNIQUE_SECTION_LIST. */
+ if (unique_section_p (section, os))
+ return;
+
+ if (section->output_section == NULL && (section->flags & SEC_READONLY) == 0)
+ os->all_input_readonly = FALSE;
+}
+
+/* This is passed a file name which must have been seen already and
+ added to the statement tree. We will see if it has been opened
+ already and had its symbols read. If not then we'll read it. */
+
+static lang_input_statement_type *
+lookup_name (const char *name)
+{
+ lang_input_statement_type *search;
+
+ for (search = (lang_input_statement_type *) input_file_chain.head;
+ search != NULL;
+ search = (lang_input_statement_type *) search->next_real_file)
+ {
+ /* Use the local_sym_name as the name of the file that has
+ already been loaded as filename might have been transformed
+ via the search directory lookup mechanism. */
+ const char *filename = search->local_sym_name;
+
+ if (filename != NULL
+ && strcmp (filename, name) == 0)
+ break;
+ }
+
+ if (search == NULL)
+ search = new_afile (name, lang_input_file_is_search_file_enum,
+ default_target, FALSE);
+
+ /* If we have already added this file, or this file is not real
+ don't add this file. */
+ if (search->loaded || !search->real)
+ return search;
+
+ if (! load_symbols (search, NULL))
+ return NULL;
+
+ return search;
+}
+
+/* Save LIST as a list of libraries whose symbols should not be exported. */
+
+struct excluded_lib
+{
+ char *name;
+ struct excluded_lib *next;
+};
+static struct excluded_lib *excluded_libs;
+
+void
+add_excluded_libs (const char *list)
+{
+ const char *p = list, *end;
+
+ while (*p != '\0')
+ {
+ struct excluded_lib *entry;
+ end = strpbrk (p, ",:");
+ if (end == NULL)
+ end = p + strlen (p);
+ entry = (struct excluded_lib *) xmalloc (sizeof (*entry));
+ entry->next = excluded_libs;
+ entry->name = (char *) xmalloc (end - p + 1);
+ memcpy (entry->name, p, end - p);
+ entry->name[end - p] = '\0';
+ excluded_libs = entry;
+ if (*end == '\0')
+ break;
+ p = end + 1;
+ }
+}
+
+static void
+check_excluded_libs (bfd *abfd)
+{
+ struct excluded_lib *lib = excluded_libs;
+
+ while (lib)
+ {
+ int len = strlen (lib->name);
+ const char *filename = lbasename (abfd->filename);
+
+ if (strcmp (lib->name, "ALL") == 0)
+ {
+ abfd->no_export = TRUE;
+ return;
+ }
+
+ if (strncmp (lib->name, filename, len) == 0
+ && (filename[len] == '\0'
+ || (filename[len] == '.' && filename[len + 1] == 'a'
+ && filename[len + 2] == '\0')))
+ {
+ abfd->no_export = TRUE;
+ return;
+ }
+
+ lib = lib->next;
+ }
+}
+
+/* Get the symbols for an input file. */
+
+bfd_boolean
+load_symbols (lang_input_statement_type *entry,
+ lang_statement_list_type *place)
+{
+ char **matching;
+
+ if (entry->loaded)
+ return TRUE;
+
+ ldfile_open_file (entry);
+
+ /* Do not process further if the file was missing. */
+ if (entry->missing_file)
+ return TRUE;
+
+ if (! bfd_check_format (entry->the_bfd, bfd_archive)
+ && ! bfd_check_format_matches (entry->the_bfd, bfd_object, &matching))
+ {
+ bfd_error_type err;
+ bfd_boolean save_ldlang_sysrooted_script;
+ bfd_boolean save_add_DT_NEEDED_for_regular;
+ bfd_boolean save_add_DT_NEEDED_for_dynamic;
+ bfd_boolean save_whole_archive;
+
+ err = bfd_get_error ();
+
+ /* See if the emulation has some special knowledge. */
+ if (ldemul_unrecognized_file (entry))
+ return TRUE;
+
+ if (err == bfd_error_file_ambiguously_recognized)
+ {
+ char **p;
+
+ einfo (_("%B: file not recognized: %E\n"), entry->the_bfd);
+ einfo (_("%B: matching formats:"), entry->the_bfd);
+ for (p = matching; *p != NULL; p++)
+ einfo (" %s", *p);
+ einfo ("%F\n");
+ }
+ else if (err != bfd_error_file_not_recognized
+ || place == NULL)
+ einfo (_("%F%B: file not recognized: %E\n"), entry->the_bfd);
+
+ bfd_close (entry->the_bfd);
+ entry->the_bfd = NULL;
+
+ /* Try to interpret the file as a linker script. */
+ ldfile_open_command_file (entry->filename);
+
+ push_stat_ptr (place);
+ save_ldlang_sysrooted_script = ldlang_sysrooted_script;
+ ldlang_sysrooted_script = entry->sysrooted;
+ save_add_DT_NEEDED_for_regular = add_DT_NEEDED_for_regular;
+ add_DT_NEEDED_for_regular = entry->add_DT_NEEDED_for_regular;
+ save_add_DT_NEEDED_for_dynamic = add_DT_NEEDED_for_dynamic;
+ add_DT_NEEDED_for_dynamic = entry->add_DT_NEEDED_for_dynamic;
+ save_whole_archive = whole_archive;
+ whole_archive = entry->whole_archive;
+
+ ldfile_assumed_script = TRUE;
+ parser_input = input_script;
+ /* We want to use the same -Bdynamic/-Bstatic as the one for
+ ENTRY. */
+ config.dynamic_link = entry->dynamic;
+ yyparse ();
+ ldfile_assumed_script = FALSE;
+
+ ldlang_sysrooted_script = save_ldlang_sysrooted_script;
+ add_DT_NEEDED_for_regular = save_add_DT_NEEDED_for_regular;
+ add_DT_NEEDED_for_dynamic = save_add_DT_NEEDED_for_dynamic;
+ whole_archive = save_whole_archive;
+ pop_stat_ptr ();
+
+ return TRUE;
+ }
+
+ if (ldemul_recognized_file (entry))
+ return TRUE;
+
+ /* We don't call ldlang_add_file for an archive. Instead, the
+ add_symbols entry point will call ldlang_add_file, via the
+ add_archive_element callback, for each element of the archive
+ which is used. */
+ switch (bfd_get_format (entry->the_bfd))
+ {
+ default:
+ break;
+
+ case bfd_object:
+ ldlang_add_file (entry);
+ if (trace_files || trace_file_tries)
+ info_msg ("%I\n", entry);
+ break;
+
+ case bfd_archive:
+ check_excluded_libs (entry->the_bfd);
+
+ if (entry->whole_archive)
+ {
+ bfd *member = NULL;
+ bfd_boolean loaded = TRUE;
+
+ for (;;)
+ {
+ bfd *subsbfd;
+ member = bfd_openr_next_archived_file (entry->the_bfd, member);
+
+ if (member == NULL)
+ break;
+
+ if (! bfd_check_format (member, bfd_object))
+ {
+ einfo (_("%F%B: member %B in archive is not an object\n"),
+ entry->the_bfd, member);
+ loaded = FALSE;
+ }
+
+ subsbfd = NULL;
+ if (! ((*link_info.callbacks->add_archive_element)
+ (&link_info, member, "--whole-archive", &subsbfd)))
+ abort ();
+
+ /* Potentially, the add_archive_element hook may have set a
+ substitute BFD for us. */
+ if (! bfd_link_add_symbols (subsbfd ? subsbfd : member,
+ &link_info))
+ {
+ einfo (_("%F%B: could not read symbols: %E\n"), member);
+ loaded = FALSE;
+ }
+ }
+
+ entry->loaded = loaded;
+ return loaded;
+ }
+ break;
+ }
+
+ if (bfd_link_add_symbols (entry->the_bfd, &link_info))
+ entry->loaded = TRUE;
+ else
+ einfo (_("%F%B: could not read symbols: %E\n"), entry->the_bfd);
+
+ return entry->loaded;
+}
+
+/* Handle a wild statement. S->FILENAME or S->SECTION_LIST or both
+ may be NULL, indicating that it is a wildcard. Separate
+ lang_input_section statements are created for each part of the
+ expansion; they are added after the wild statement S. OUTPUT is
+ the output section. */
+
+static void
+wild (lang_wild_statement_type *s,
+ const char *target ATTRIBUTE_UNUSED,
+ lang_output_section_statement_type *output)
+{
+ struct wildcard_list *sec;
+
+ if (s->handler_data[0]
+ && s->handler_data[0]->spec.sorted == by_name
+ && !s->filenames_sorted)
+ {
+ lang_section_bst_type *tree;
+
+ walk_wild (s, output_section_callback_fast, output);
+
+ tree = s->tree;
+ if (tree)
+ {
+ output_section_callback_tree_to_list (s, tree, output);
+ s->tree = NULL;
+ }
+ }
+ else
+ walk_wild (s, output_section_callback, output);
+
+ if (default_common_section == NULL)
+ for (sec = s->section_list; sec != NULL; sec = sec->next)
+ if (sec->spec.name != NULL && strcmp (sec->spec.name, "COMMON") == 0)
+ {
+ /* Remember the section that common is going to in case we
+ later get something which doesn't know where to put it. */
+ default_common_section = output;
+ break;
+ }
+}
+
+/* Return TRUE iff target is the sought target. */
+
+static int
+get_target (const bfd_target *target, void *data)
+{
+ const char *sought = (const char *) data;
+
+ return strcmp (target->name, sought) == 0;
+}
+
+/* Like strcpy() but convert to lower case as well. */
+
+static void
+stricpy (char *dest, char *src)
+{
+ char c;
+
+ while ((c = *src++) != 0)
+ *dest++ = TOLOWER (c);
+
+ *dest = 0;
+}
+
+/* Remove the first occurrence of needle (if any) in haystack
+ from haystack. */
+
+static void
+strcut (char *haystack, char *needle)
+{
+ haystack = strstr (haystack, needle);
+
+ if (haystack)
+ {
+ char *src;
+
+ for (src = haystack + strlen (needle); *src;)
+ *haystack++ = *src++;
+
+ *haystack = 0;
+ }
+}
+
+/* Compare two target format name strings.
+ Return a value indicating how "similar" they are. */
+
+static int
+name_compare (char *first, char *second)
+{
+ char *copy1;
+ char *copy2;
+ int result;
+
+ copy1 = (char *) xmalloc (strlen (first) + 1);
+ copy2 = (char *) xmalloc (strlen (second) + 1);
+
+ /* Convert the names to lower case. */
+ stricpy (copy1, first);
+ stricpy (copy2, second);
+
+ /* Remove size and endian strings from the name. */
+ strcut (copy1, "big");
+ strcut (copy1, "little");
+ strcut (copy2, "big");
+ strcut (copy2, "little");
+
+ /* Return a value based on how many characters match,
+ starting from the beginning. If both strings are
+ the same then return 10 * their length. */
+ for (result = 0; copy1[result] == copy2[result]; result++)
+ if (copy1[result] == 0)
+ {
+ result *= 10;
+ break;
+ }
+
+ free (copy1);
+ free (copy2);
+
+ return result;
+}
+
+/* Set by closest_target_match() below. */
+static const bfd_target *winner;
+
+/* Scan all the valid bfd targets looking for one that has the endianness
+ requirement that was specified on the command line, and is the nearest
+ match to the original output target. */
+
+static int
+closest_target_match (const bfd_target *target, void *data)
+{
+ const bfd_target *original = (const bfd_target *) data;
+
+ if (command_line.endian == ENDIAN_BIG
+ && target->byteorder != BFD_ENDIAN_BIG)
+ return 0;
+
+ if (command_line.endian == ENDIAN_LITTLE
+ && target->byteorder != BFD_ENDIAN_LITTLE)
+ return 0;
+
+ /* Must be the same flavour. */
+ if (target->flavour != original->flavour)
+ return 0;
+
+ /* Ignore generic big and little endian elf vectors. */
+ if (strcmp (target->name, "elf32-big") == 0
+ || strcmp (target->name, "elf64-big") == 0
+ || strcmp (target->name, "elf32-little") == 0
+ || strcmp (target->name, "elf64-little") == 0)
+ return 0;
+
+ /* If we have not found a potential winner yet, then record this one. */
+ if (winner == NULL)
+ {
+ winner = target;
+ return 0;
+ }
+
+ /* Oh dear, we now have two potential candidates for a successful match.
+ Compare their names and choose the better one. */
+ if (name_compare (target->name, original->name)
+ > name_compare (winner->name, original->name))
+ winner = target;
+
+ /* Keep on searching until wqe have checked them all. */
+ return 0;
+}
+
+/* Return the BFD target format of the first input file. */
+
+static char *
+get_first_input_target (void)
+{
+ char *target = NULL;
+
+ LANG_FOR_EACH_INPUT_STATEMENT (s)
+ {
+ if (s->header.type == lang_input_statement_enum
+ && s->real)
+ {
+ ldfile_open_file (s);
+
+ if (s->the_bfd != NULL
+ && bfd_check_format (s->the_bfd, bfd_object))
+ {
+ target = bfd_get_target (s->the_bfd);
+
+ if (target != NULL)
+ break;
+ }
+ }
+ }
+
+ return target;
+}
+
+const char *
+lang_get_output_target (void)
+{
+ const char *target;
+
+ /* Has the user told us which output format to use? */
+ if (output_target != NULL)
+ return output_target;
+
+ /* No - has the current target been set to something other than
+ the default? */
+ if (current_target != default_target)
+ return current_target;
+
+ /* No - can we determine the format of the first input file? */
+ target = get_first_input_target ();
+ if (target != NULL)
+ return target;
+
+ /* Failed - use the default output target. */
+ return default_target;
+}
+
+/* Open the output file. */
+
+static void
+open_output (const char *name)
+{
+ output_target = lang_get_output_target ();
+
+ /* Has the user requested a particular endianness on the command
+ line? */
+ if (command_line.endian != ENDIAN_UNSET)
+ {
+ const bfd_target *target;
+ enum bfd_endian desired_endian;
+
+ /* Get the chosen target. */
+ target = bfd_search_for_target (get_target, (void *) output_target);
+
+ /* If the target is not supported, we cannot do anything. */
+ if (target != NULL)
+ {
+ if (command_line.endian == ENDIAN_BIG)
+ desired_endian = BFD_ENDIAN_BIG;
+ else
+ desired_endian = BFD_ENDIAN_LITTLE;
+
+ /* See if the target has the wrong endianness. This should
+ not happen if the linker script has provided big and
+ little endian alternatives, but some scrips don't do
+ this. */
+ if (target->byteorder != desired_endian)
+ {
+ /* If it does, then see if the target provides
+ an alternative with the correct endianness. */
+ if (target->alternative_target != NULL
+ && (target->alternative_target->byteorder == desired_endian))
+ output_target = target->alternative_target->name;
+ else
+ {
+ /* Try to find a target as similar as possible to
+ the default target, but which has the desired
+ endian characteristic. */
+ bfd_search_for_target (closest_target_match,
+ (void *) target);
+
+ /* Oh dear - we could not find any targets that
+ satisfy our requirements. */
+ if (winner == NULL)
+ einfo (_("%P: warning: could not find any targets"
+ " that match endianness requirement\n"));
+ else
+ output_target = winner->name;
+ }
+ }
+ }
+ }
+
+ link_info.output_bfd = bfd_openw (name, output_target);
+
+ if (link_info.output_bfd == NULL)
+ {
+ if (bfd_get_error () == bfd_error_invalid_target)
+ einfo (_("%P%F: target %s not found\n"), output_target);
+
+ einfo (_("%P%F: cannot open output file %s: %E\n"), name);
+ }
+
+ delete_output_file_on_failure = TRUE;
+
+ if (! bfd_set_format (link_info.output_bfd, bfd_object))
+ einfo (_("%P%F:%s: can not make object file: %E\n"), name);
+ if (! bfd_set_arch_mach (link_info.output_bfd,
+ ldfile_output_architecture,
+ ldfile_output_machine))
+ einfo (_("%P%F:%s: can not set architecture: %E\n"), name);
+
+ link_info.hash = bfd_link_hash_table_create (link_info.output_bfd);
+ if (link_info.hash == NULL)
+ einfo (_("%P%F: can not create hash table: %E\n"));
+
+ bfd_set_gp_size (link_info.output_bfd, g_switch_value);
+}
+
+static void
+ldlang_open_output (lang_statement_union_type *statement)
+{
+ switch (statement->header.type)
+ {
+ case lang_output_statement_enum:
+ ASSERT (link_info.output_bfd == NULL);
+ open_output (statement->output_statement.name);
+ ldemul_set_output_arch ();
+ if (config.magic_demand_paged && !link_info.relocatable)
+ link_info.output_bfd->flags |= D_PAGED;
+ else
+ link_info.output_bfd->flags &= ~D_PAGED;
+ if (config.text_read_only)
+ link_info.output_bfd->flags |= WP_TEXT;
+ else
+ link_info.output_bfd->flags &= ~WP_TEXT;
+ if (link_info.traditional_format)
+ link_info.output_bfd->flags |= BFD_TRADITIONAL_FORMAT;
+ else
+ link_info.output_bfd->flags &= ~BFD_TRADITIONAL_FORMAT;
+ break;
+
+ case lang_target_statement_enum:
+ current_target = statement->target_statement.target;
+ break;
+ default:
+ break;
+ }
+}
+
+/* Convert between addresses in bytes and sizes in octets.
+ For currently supported targets, octets_per_byte is always a power
+ of two, so we can use shifts. */
+#define TO_ADDR(X) ((X) >> opb_shift)
+#define TO_SIZE(X) ((X) << opb_shift)
+
+/* Support the above. */
+static unsigned int opb_shift = 0;
+
+static void
+init_opb (void)
+{
+ unsigned x = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
+ ldfile_output_machine);
+ opb_shift = 0;
+ if (x > 1)
+ while ((x & 1) == 0)
+ {
+ x >>= 1;
+ ++opb_shift;
+ }
+ ASSERT (x == 1);
+}
+
+/* Open all the input files. */
+
+static void
+open_input_bfds (lang_statement_union_type *s, bfd_boolean force)
+{
+ for (; s != NULL; s = s->header.next)
+ {
+ switch (s->header.type)
+ {
+ case lang_constructors_statement_enum:
+ open_input_bfds (constructor_list.head, force);
+ break;
+ case lang_output_section_statement_enum:
+ open_input_bfds (s->output_section_statement.children.head, force);
+ break;
+ case lang_wild_statement_enum:
+ /* Maybe we should load the file's symbols. */
+ if (s->wild_statement.filename
+ && !wildcardp (s->wild_statement.filename)
+ && !archive_path (s->wild_statement.filename))
+ lookup_name (s->wild_statement.filename);
+ open_input_bfds (s->wild_statement.children.head, force);
+ break;
+ case lang_group_statement_enum:
+ {
+ struct bfd_link_hash_entry *undefs;
+
+ /* We must continually search the entries in the group
+ until no new symbols are added to the list of undefined
+ symbols. */
+
+ do
+ {
+ undefs = link_info.hash->undefs_tail;
+ open_input_bfds (s->group_statement.children.head, TRUE);
+ }
+ while (undefs != link_info.hash->undefs_tail);
+ }
+ break;
+ case lang_target_statement_enum:
+ current_target = s->target_statement.target;
+ break;
+ case lang_input_statement_enum:
+ if (s->input_statement.real)
+ {
+ lang_statement_union_type **os_tail;
+ lang_statement_list_type add;
+
+ s->input_statement.target = current_target;
+
+ /* If we are being called from within a group, and this
+ is an archive which has already been searched, then
+ force it to be researched unless the whole archive
+ has been loaded already. */
+ if (force
+ && !s->input_statement.whole_archive
+ && s->input_statement.loaded
+ && bfd_check_format (s->input_statement.the_bfd,
+ bfd_archive))
+ s->input_statement.loaded = FALSE;
+
+ os_tail = lang_output_section_statement.tail;
+ lang_list_init (&add);
+
+ if (! load_symbols (&s->input_statement, &add))
+ config.make_executable = FALSE;
+
+ if (add.head != NULL)
+ {
+ /* If this was a script with output sections then
+ tack any added statements on to the end of the
+ list. This avoids having to reorder the output
+ section statement list. Very likely the user
+ forgot -T, and whatever we do here will not meet
+ naive user expectations. */
+ if (os_tail != lang_output_section_statement.tail)
+ {
+ einfo (_("%P: warning: %s contains output sections;"
+ " did you forget -T?\n"),
+ s->input_statement.filename);
+ *stat_ptr->tail = add.head;
+ stat_ptr->tail = add.tail;
+ }
+ else
+ {
+ *add.tail = s->header.next;
+ s->header.next = add.head;
+ }
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ /* Exit if any of the files were missing. */
+ if (missing_file)
+ einfo ("%F");
+}
+
+/* Add a symbol to a hash of symbols used in DEFINED (NAME) expressions. */
+
+void
+lang_track_definedness (const char *name)
+{
+ if (bfd_hash_lookup (&lang_definedness_table, name, TRUE, FALSE) == NULL)
+ einfo (_("%P%F: bfd_hash_lookup failed creating symbol %s\n"), name);
+}
+
+/* New-function for the definedness hash table. */
+
+static struct bfd_hash_entry *
+lang_definedness_newfunc (struct bfd_hash_entry *entry,
+ struct bfd_hash_table *table ATTRIBUTE_UNUSED,
+ const char *name ATTRIBUTE_UNUSED)
+{
+ struct lang_definedness_hash_entry *ret
+ = (struct lang_definedness_hash_entry *) entry;
+
+ if (ret == NULL)
+ ret = (struct lang_definedness_hash_entry *)
+ bfd_hash_allocate (table, sizeof (struct lang_definedness_hash_entry));
+
+ if (ret == NULL)
+ einfo (_("%P%F: bfd_hash_allocate failed creating symbol %s\n"), name);
+
+ ret->iteration = -1;
+ return &ret->root;
+}
+
+/* Return the iteration when the definition of NAME was last updated. A
+ value of -1 means that the symbol is not defined in the linker script
+ or the command line, but may be defined in the linker symbol table. */
+
+int
+lang_symbol_definition_iteration (const char *name)
+{
+ struct lang_definedness_hash_entry *defentry
+ = (struct lang_definedness_hash_entry *)
+ bfd_hash_lookup (&lang_definedness_table, name, FALSE, FALSE);
+
+ /* We've already created this one on the presence of DEFINED in the
+ script, so it can't be NULL unless something is borked elsewhere in
+ the code. */
+ if (defentry == NULL)
+ FAIL ();
+
+ return defentry->iteration;
+}
+
+/* Update the definedness state of NAME. */
+
+void
+lang_update_definedness (const char *name, struct bfd_link_hash_entry *h)
+{
+ struct lang_definedness_hash_entry *defentry
+ = (struct lang_definedness_hash_entry *)
+ bfd_hash_lookup (&lang_definedness_table, name, FALSE, FALSE);
+
+ /* We don't keep track of symbols not tested with DEFINED. */
+ if (defentry == NULL)
+ return;
+
+ /* If the symbol was already defined, and not from an earlier statement
+ iteration, don't update the definedness iteration, because that'd
+ make the symbol seem defined in the linker script at this point, and
+ it wasn't; it was defined in some object. If we do anyway, DEFINED
+ would start to yield false before this point and the construct "sym =
+ DEFINED (sym) ? sym : X;" would change sym to X despite being defined
+ in an object. */
+ if (h->type != bfd_link_hash_undefined
+ && h->type != bfd_link_hash_common
+ && h->type != bfd_link_hash_new
+ && defentry->iteration == -1)
+ return;
+
+ defentry->iteration = lang_statement_iteration;
+}
+
+/* Add the supplied name to the symbol table as an undefined reference.
+ This is a two step process as the symbol table doesn't even exist at
+ the time the ld command line is processed. First we put the name
+ on a list, then, once the output file has been opened, transfer the
+ name to the symbol table. */
+
+typedef struct bfd_sym_chain ldlang_undef_chain_list_type;
+
+#define ldlang_undef_chain_list_head entry_symbol.next
+
+void
+ldlang_add_undef (const char *const name, bfd_boolean cmdline)
+{
+ ldlang_undef_chain_list_type *new_undef;
+
+ undef_from_cmdline = undef_from_cmdline || cmdline;
+ new_undef = (ldlang_undef_chain_list_type *) stat_alloc (sizeof (*new_undef));
+ new_undef->next = ldlang_undef_chain_list_head;
+ ldlang_undef_chain_list_head = new_undef;
+
+ new_undef->name = xstrdup (name);
+
+ if (link_info.output_bfd != NULL)
+ insert_undefined (new_undef->name);
+}
+
+/* Insert NAME as undefined in the symbol table. */
+
+static void
+insert_undefined (const char *name)
+{
+ struct bfd_link_hash_entry *h;
+
+ h = bfd_link_hash_lookup (link_info.hash, name, TRUE, FALSE, TRUE);
+ if (h == NULL)
+ einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
+ if (h->type == bfd_link_hash_new)
+ {
+ h->type = bfd_link_hash_undefined;
+ h->u.undef.abfd = NULL;
+ bfd_link_add_undef (link_info.hash, h);
+ }
+}
+
+/* Run through the list of undefineds created above and place them
+ into the linker hash table as undefined symbols belonging to the
+ script file. */
+
+static void
+lang_place_undefineds (void)
+{
+ ldlang_undef_chain_list_type *ptr;
+
+ for (ptr = ldlang_undef_chain_list_head; ptr != NULL; ptr = ptr->next)
+ insert_undefined (ptr->name);
+}
+
+typedef struct bfd_sym_chain ldlang_def_chain_list_type;
+
+static ldlang_def_chain_list_type ldlang_def_chain_list_head;
+
+/* Insert NAME as defined in the symbol table. */
+
+static void
+insert_defined (const char *name)
+{
+ struct bfd_link_hash_entry *h;
+
+ h = bfd_link_hash_lookup (link_info.hash, name, TRUE, FALSE, TRUE);
+ if (h == NULL)
+ einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
+ if (h->type == bfd_link_hash_new
+ || h->type == bfd_link_hash_undefined
+ || h->type == bfd_link_hash_undefweak)
+ {
+ h->type = bfd_link_hash_defined;
+ h->u.def.section = bfd_abs_section_ptr;
+ h->u.def.value = 0;
+ }
+}
+
+/* Like lang_add_undef, but this time for symbols defined on the
+ command line. */
+
+static void
+ldlang_add_def (const char *const name)
+{
+ if (link_info.output_bfd != NULL)
+ insert_defined (xstrdup (name));
+ else
+ {
+ ldlang_def_chain_list_type *new_def;
+
+ new_def = (ldlang_def_chain_list_type *) stat_alloc (sizeof (*new_def));
+ new_def->next = ldlang_def_chain_list_head.next;
+ ldlang_def_chain_list_head.next = new_def;
+
+ new_def->name = xstrdup (name);
+ }
+}
+
+/* Run through the list of defineds created above and place them
+ into the linker hash table as defined symbols belonging to the
+ script file. */
+
+static void
+lang_place_defineds (void)
+{
+ ldlang_def_chain_list_type *ptr;
+
+ for (ptr = ldlang_def_chain_list_head.next;
+ ptr != NULL;
+ ptr = ptr->next)
+ insert_defined (ptr->name);
+}
+
+/* Check for all readonly or some readwrite sections. */
+
+static void
+check_input_sections
+ (lang_statement_union_type *s,
+ lang_output_section_statement_type *output_section_statement)
+{
+ for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
+ {
+ switch (s->header.type)
+ {
+ case lang_wild_statement_enum:
+ walk_wild (&s->wild_statement, check_section_callback,
+ output_section_statement);
+ if (! output_section_statement->all_input_readonly)
+ return;
+ break;
+ case lang_constructors_statement_enum:
+ check_input_sections (constructor_list.head,
+ output_section_statement);
+ if (! output_section_statement->all_input_readonly)
+ return;
+ break;
+ case lang_group_statement_enum:
+ check_input_sections (s->group_statement.children.head,
+ output_section_statement);
+ if (! output_section_statement->all_input_readonly)
+ return;
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+/* Update wildcard statements if needed. */
+
+static void
+update_wild_statements (lang_statement_union_type *s)
+{
+ struct wildcard_list *sec;
+
+ switch (sort_section)
+ {
+ default:
+ FAIL ();
+
+ case none:
+ break;
+
+ case by_name:
+ case by_alignment:
+ for (; s != NULL; s = s->header.next)
+ {
+ switch (s->header.type)
+ {
+ default:
+ break;
+
+ case lang_wild_statement_enum:
+ sec = s->wild_statement.section_list;
+ for (sec = s->wild_statement.section_list; sec != NULL;
+ sec = sec->next)
+ {
+ switch (sec->spec.sorted)
+ {
+ case none:
+ sec->spec.sorted = sort_section;
+ break;
+ case by_name:
+ if (sort_section == by_alignment)
+ sec->spec.sorted = by_name_alignment;
+ break;
+ case by_alignment:
+ if (sort_section == by_name)
+ sec->spec.sorted = by_alignment_name;
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+
+ case lang_constructors_statement_enum:
+ update_wild_statements (constructor_list.head);
+ break;
+
+ case lang_output_section_statement_enum:
+ update_wild_statements
+ (s->output_section_statement.children.head);
+ break;
+
+ case lang_group_statement_enum:
+ update_wild_statements (s->group_statement.children.head);
+ break;
+ }
+ }
+ break;
+ }
+}
+
+/* Open input files and attach to output sections. */
+
+static void
+map_input_to_output_sections
+ (lang_statement_union_type *s, const char *target,
+ lang_output_section_statement_type *os)
+{
+ for (; s != NULL; s = s->header.next)
+ {
+ lang_output_section_statement_type *tos;
+ flagword flags;
+
+ switch (s->header.type)
+ {
+ case lang_wild_statement_enum:
+ wild (&s->wild_statement, target, os);
+ break;
+ case lang_constructors_statement_enum:
+ map_input_to_output_sections (constructor_list.head,
+ target,
+ os);
+ break;
+ case lang_output_section_statement_enum:
+ tos = &s->output_section_statement;
+ if (tos->constraint != 0)
+ {
+ if (tos->constraint != ONLY_IF_RW
+ && tos->constraint != ONLY_IF_RO)
+ break;
+ tos->all_input_readonly = TRUE;
+ check_input_sections (tos->children.head, tos);
+ if (tos->all_input_readonly != (tos->constraint == ONLY_IF_RO))
+ {
+ tos->constraint = -1;
+ break;
+ }
+ }
+ map_input_to_output_sections (tos->children.head,
+ target,
+ tos);
+ break;
+ case lang_output_statement_enum:
+ break;
+ case lang_target_statement_enum:
+ target = s->target_statement.target;
+ break;
+ case lang_group_statement_enum:
+ map_input_to_output_sections (s->group_statement.children.head,
+ target,
+ os);
+ break;
+ case lang_data_statement_enum:
+ /* Make sure that any sections mentioned in the expression
+ are initialized. */
+ exp_init_os (s->data_statement.exp);
+ /* The output section gets CONTENTS, ALLOC and LOAD, but
+ these may be overridden by the script. */
+ flags = SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD;
+ switch (os->sectype)
+ {
+ case normal_section:
+ case overlay_section:
+ break;
+ case noalloc_section:
+ flags = SEC_HAS_CONTENTS;
+ break;
+ case noload_section:
+ if (bfd_get_flavour (link_info.output_bfd)
+ == bfd_target_elf_flavour)
+ flags = SEC_NEVER_LOAD | SEC_ALLOC;
+ else
+ flags = SEC_NEVER_LOAD | SEC_HAS_CONTENTS;
+ break;
+ }
+ if (os->bfd_section == NULL)
+ init_os (os, flags);
+ else
+ os->bfd_section->flags |= flags;
+ break;
+ case lang_input_section_enum:
+ break;
+ case lang_fill_statement_enum:
+ case lang_object_symbols_statement_enum:
+ case lang_reloc_statement_enum:
+ case lang_padding_statement_enum:
+ case lang_input_statement_enum:
+ if (os != NULL && os->bfd_section == NULL)
+ init_os (os, 0);
+ break;
+ case lang_assignment_statement_enum:
+ if (os != NULL && os->bfd_section == NULL)
+ init_os (os, 0);
+
+ /* Make sure that any sections mentioned in the assignment
+ are initialized. */
+ exp_init_os (s->assignment_statement.exp);
+ break;
+ case lang_address_statement_enum:
+ /* Mark the specified section with the supplied address.
+ If this section was actually a segment marker, then the
+ directive is ignored if the linker script explicitly
+ processed the segment marker. Originally, the linker
+ treated segment directives (like -Ttext on the
+ command-line) as section directives. We honor the
+ section directive semantics for backwards compatibilty;
+ linker scripts that do not specifically check for
+ SEGMENT_START automatically get the old semantics. */
+ if (!s->address_statement.segment
+ || !s->address_statement.segment->used)
+ {
+ const char *name = s->address_statement.section_name;
+
+ /* Create the output section statement here so that
+ orphans with a set address will be placed after other
+ script sections. If we let the orphan placement code
+ place them in amongst other sections then the address
+ will affect following script sections, which is
+ likely to surprise naive users. */
+ tos = lang_output_section_statement_lookup (name, 0, TRUE);
+ tos->addr_tree = s->address_statement.address;
+ if (tos->bfd_section == NULL)
+ init_os (tos, 0);
+ }
+ break;
+ case lang_insert_statement_enum:
+ break;
+ }
+ }
+}
+
+/* An insert statement snips out all the linker statements from the
+ start of the list and places them after the output section
+ statement specified by the insert. This operation is complicated
+ by the fact that we keep a doubly linked list of output section
+ statements as well as the singly linked list of all statements. */
+
+static void
+process_insert_statements (void)
+{
+ lang_statement_union_type **s;
+ lang_output_section_statement_type *first_os = NULL;
+ lang_output_section_statement_type *last_os = NULL;
+ lang_output_section_statement_type *os;
+
+ /* "start of list" is actually the statement immediately after
+ the special abs_section output statement, so that it isn't
+ reordered. */
+ s = &lang_output_section_statement.head;
+ while (*(s = &(*s)->header.next) != NULL)
+ {
+ if ((*s)->header.type == lang_output_section_statement_enum)
+ {
+ /* Keep pointers to the first and last output section
+ statement in the sequence we may be about to move. */
+ os = &(*s)->output_section_statement;
+
+ ASSERT (last_os == NULL || last_os->next == os);
+ last_os = os;
+
+ /* Set constraint negative so that lang_output_section_find
+ won't match this output section statement. At this
+ stage in linking constraint has values in the range
+ [-1, ONLY_IN_RW]. */
+ last_os->constraint = -2 - last_os->constraint;
+ if (first_os == NULL)
+ first_os = last_os;
+ }
+ else if ((*s)->header.type == lang_insert_statement_enum)
+ {
+ lang_insert_statement_type *i = &(*s)->insert_statement;
+ lang_output_section_statement_type *where;
+ lang_statement_union_type **ptr;
+ lang_statement_union_type *first;
+
+ where = lang_output_section_find (i->where);
+ if (where != NULL && i->is_before)
+ {
+ do
+ where = where->prev;
+ while (where != NULL && where->constraint < 0);
+ }
+ if (where == NULL)
+ {
+ einfo (_("%F%P: %s not found for insert\n"), i->where);
+ return;
+ }
+
+ /* Deal with reordering the output section statement list. */
+ if (last_os != NULL)
+ {
+ asection *first_sec, *last_sec;
+ struct lang_output_section_statement_struct **next;
+
+ /* Snip out the output sections we are moving. */
+ first_os->prev->next = last_os->next;
+ if (last_os->next == NULL)
+ {
+ next = &first_os->prev->next;
+ lang_output_section_statement.tail
+ = (lang_statement_union_type **) next;
+ }
+ else
+ last_os->next->prev = first_os->prev;
+ /* Add them in at the new position. */
+ last_os->next = where->next;
+ if (where->next == NULL)
+ {
+ next = &last_os->next;
+ lang_output_section_statement.tail
+ = (lang_statement_union_type **) next;
+ }
+ else
+ where->next->prev = last_os;
+ first_os->prev = where;
+ where->next = first_os;
+
+ /* Move the bfd sections in the same way. */
+ first_sec = NULL;
+ last_sec = NULL;
+ for (os = first_os; os != NULL; os = os->next)
+ {
+ os->constraint = -2 - os->constraint;
+ if (os->bfd_section != NULL
+ && os->bfd_section->owner != NULL)
+ {
+ last_sec = os->bfd_section;
+ if (first_sec == NULL)
+ first_sec = last_sec;
+ }
+ if (os == last_os)
+ break;
+ }
+ if (last_sec != NULL)
+ {
+ asection *sec = where->bfd_section;
+ if (sec == NULL)
+ sec = output_prev_sec_find (where);
+
+ /* The place we want to insert must come after the
+ sections we are moving. So if we find no
+ section or if the section is the same as our
+ last section, then no move is needed. */
+ if (sec != NULL && sec != last_sec)
+ {
+ /* Trim them off. */
+ if (first_sec->prev != NULL)
+ first_sec->prev->next = last_sec->next;
+ else
+ link_info.output_bfd->sections = last_sec->next;
+ if (last_sec->next != NULL)
+ last_sec->next->prev = first_sec->prev;
+ else
+ link_info.output_bfd->section_last = first_sec->prev;
+ /* Add back. */
+ last_sec->next = sec->next;
+ if (sec->next != NULL)
+ sec->next->prev = last_sec;
+ else
+ link_info.output_bfd->section_last = last_sec;
+ first_sec->prev = sec;
+ sec->next = first_sec;
+ }
+ }
+
+ first_os = NULL;
+ last_os = NULL;
+ }
+
+ ptr = insert_os_after (where);
+ /* Snip everything after the abs_section output statement we
+ know is at the start of the list, up to and including
+ the insert statement we are currently processing. */
+ first = lang_output_section_statement.head->header.next;
+ lang_output_section_statement.head->header.next = (*s)->header.next;
+ /* Add them back where they belong. */
+ *s = *ptr;
+ if (*s == NULL)
+ statement_list.tail = s;
+ *ptr = first;
+ s = &lang_output_section_statement.head;
+ }
+ }
+
+ /* Undo constraint twiddling. */
+ for (os = first_os; os != NULL; os = os->next)
+ {
+ os->constraint = -2 - os->constraint;
+ if (os == last_os)
+ break;
+ }
+}
+
+/* An output section might have been removed after its statement was
+ added. For example, ldemul_before_allocation can remove dynamic
+ sections if they turn out to be not needed. Clean them up here. */
+
+void
+strip_excluded_output_sections (void)
+{
+ lang_output_section_statement_type *os;
+
+ /* Run lang_size_sections (if not already done). */
+ if (expld.phase != lang_mark_phase_enum)
+ {
+ expld.phase = lang_mark_phase_enum;
+ expld.dataseg.phase = exp_dataseg_none;
+ one_lang_size_sections_pass (NULL, FALSE);
+ lang_reset_memory_regions ();
+ }
+
+ for (os = &lang_output_section_statement.head->output_section_statement;
+ os != NULL;
+ os = os->next)
+ {
+ asection *output_section;
+ bfd_boolean exclude;
+
+ if (os->constraint < 0)
+ continue;
+
+ output_section = os->bfd_section;
+ if (output_section == NULL)
+ continue;
+
+ exclude = (output_section->rawsize == 0
+ && (output_section->flags & SEC_KEEP) == 0
+ && !bfd_section_removed_from_list (link_info.output_bfd,
+ output_section));
+
+ /* Some sections have not yet been sized, notably .gnu.version,
+ .dynsym, .dynstr and .hash. These all have SEC_LINKER_CREATED
+ input sections, so don't drop output sections that have such
+ input sections unless they are also marked SEC_EXCLUDE. */
+ if (exclude && output_section->map_head.s != NULL)
+ {
+ asection *s;
+
+ for (s = output_section->map_head.s; s != NULL; s = s->map_head.s)
+ if ((s->flags & SEC_LINKER_CREATED) != 0
+ && (s->flags & SEC_EXCLUDE) == 0)
+ {
+ exclude = FALSE;
+ break;
+ }
+ }
+
+ /* TODO: Don't just junk map_head.s, turn them into link_orders. */
+ output_section->map_head.link_order = NULL;
+ output_section->map_tail.link_order = NULL;
+
+ if (exclude)
+ {
+ /* We don't set bfd_section to NULL since bfd_section of the
+ removed output section statement may still be used. */
+ if (!os->section_relative_symbol
+ && !os->update_dot_tree)
+ os->ignored = TRUE;
+ output_section->flags |= SEC_EXCLUDE;
+ bfd_section_list_remove (link_info.output_bfd, output_section);
+ link_info.output_bfd->section_count--;
+ }
+ }
+
+ /* Stop future calls to lang_add_section from messing with map_head
+ and map_tail link_order fields. */
+ stripped_excluded_sections = TRUE;
+}
+
+static void
+print_output_section_statement
+ (lang_output_section_statement_type *output_section_statement)
+{
+ asection *section = output_section_statement->bfd_section;
+ int len;
+
+ if (output_section_statement != abs_output_section)
+ {
+ minfo ("\n%s", output_section_statement->name);
+
+ if (section != NULL)
+ {
+ print_dot = section->vma;
+
+ len = strlen (output_section_statement->name);
+ if (len >= SECTION_NAME_MAP_LENGTH - 1)
+ {
+ print_nl ();
+ len = 0;
+ }
+ while (len < SECTION_NAME_MAP_LENGTH)
+ {
+ print_space ();
+ ++len;
+ }
+
+ minfo ("0x%V %W", section->vma, section->size);
+
+ if (section->vma != section->lma)
+ minfo (_(" load address 0x%V"), section->lma);
+
+ if (output_section_statement->update_dot_tree != NULL)
+ exp_fold_tree (output_section_statement->update_dot_tree,
+ bfd_abs_section_ptr, &print_dot);
+ }
+
+ print_nl ();
+ }
+
+ print_statement_list (output_section_statement->children.head,
+ output_section_statement);
+}
+
+/* Scan for the use of the destination in the right hand side
+ of an expression. In such cases we will not compute the
+ correct expression, since the value of DST that is used on
+ the right hand side will be its final value, not its value
+ just before this expression is evaluated. */
+
+static bfd_boolean
+scan_for_self_assignment (const char * dst, etree_type * rhs)
+{
+ if (rhs == NULL || dst == NULL)
+ return FALSE;
+
+ switch (rhs->type.node_class)
+ {
+ case etree_binary:
+ return scan_for_self_assignment (dst, rhs->binary.lhs)
+ || scan_for_self_assignment (dst, rhs->binary.rhs);
+
+ case etree_trinary:
+ return scan_for_self_assignment (dst, rhs->trinary.lhs)
+ || scan_for_self_assignment (dst, rhs->trinary.rhs);
+
+ case etree_assign:
+ case etree_provided:
+ case etree_provide:
+ if (strcmp (dst, rhs->assign.dst) == 0)
+ return TRUE;
+ return scan_for_self_assignment (dst, rhs->assign.src);
+
+ case etree_unary:
+ return scan_for_self_assignment (dst, rhs->unary.child);
+
+ case etree_value:
+ if (rhs->value.str)
+ return strcmp (dst, rhs->value.str) == 0;
+ return FALSE;
+
+ case etree_name:
+ if (rhs->name.name)
+ return strcmp (dst, rhs->name.name) == 0;
+ return FALSE;
+
+ default:
+ break;
+ }
+
+ return FALSE;
+}
+
+
+static void
+print_assignment (lang_assignment_statement_type *assignment,
+ lang_output_section_statement_type *output_section)
+{
+ unsigned int i;
+ bfd_boolean is_dot;
+ bfd_boolean computation_is_valid = TRUE;
+ etree_type *tree;
+ asection *osec;
+
+ for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
+ print_space ();
+
+ if (assignment->exp->type.node_class == etree_assert)
+ {
+ is_dot = FALSE;
+ tree = assignment->exp->assert_s.child;
+ computation_is_valid = TRUE;
+ }
+ else
+ {
+ const char *dst = assignment->exp->assign.dst;
+
+ is_dot = (dst[0] == '.' && dst[1] == 0);
+ tree = assignment->exp->assign.src;
+ computation_is_valid = is_dot || (scan_for_self_assignment (dst, tree) == FALSE);
+ }
+
+ osec = output_section->bfd_section;
+ if (osec == NULL)
+ osec = bfd_abs_section_ptr;
+ exp_fold_tree (tree, osec, &print_dot);
+ if (expld.result.valid_p)
+ {
+ bfd_vma value;
+
+ if (computation_is_valid)
+ {
+ value = expld.result.value;
+
+ if (expld.result.section != NULL)
+ value += expld.result.section->vma;
+
+ minfo ("0x%V", value);
+ if (is_dot)
+ print_dot = value;
+ }
+ else
+ {
+ struct bfd_link_hash_entry *h;
+
+ h = bfd_link_hash_lookup (link_info.hash, assignment->exp->assign.dst,
+ FALSE, FALSE, TRUE);
+ if (h)
+ {
+ value = h->u.def.value;
+
+ if (expld.result.section != NULL)
+ value += expld.result.section->vma;
+
+ minfo ("[0x%V]", value);
+ }
+ else
+ minfo ("[unresolved]");
+ }
+ }
+ else
+ {
+ minfo ("*undef* ");
+#ifdef BFD64
+ minfo (" ");
+#endif
+ }
+
+ minfo (" ");
+ exp_print_tree (assignment->exp);
+ print_nl ();
+}
+
+static void
+print_input_statement (lang_input_statement_type *statm)
+{
+ if (statm->filename != NULL
+ && (statm->the_bfd == NULL
+ || (statm->the_bfd->flags & BFD_LINKER_CREATED) == 0))
+ fprintf (config.map_file, "LOAD %s\n", statm->filename);
+}
+
+/* Print all symbols defined in a particular section. This is called
+ via bfd_link_hash_traverse, or by print_all_symbols. */
+
+static bfd_boolean
+print_one_symbol (struct bfd_link_hash_entry *hash_entry, void *ptr)
+{
+ asection *sec = (asection *) ptr;
+
+ if ((hash_entry->type == bfd_link_hash_defined
+ || hash_entry->type == bfd_link_hash_defweak)
+ && sec == hash_entry->u.def.section)
+ {
+ int i;
+
+ for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
+ print_space ();
+ minfo ("0x%V ",
+ (hash_entry->u.def.value
+ + hash_entry->u.def.section->output_offset
+ + hash_entry->u.def.section->output_section->vma));
+
+ minfo (" %T\n", hash_entry->root.string);
+ }
+
+ return TRUE;
+}
+
+static int
+hash_entry_addr_cmp (const void *a, const void *b)
+{
+ const struct bfd_link_hash_entry *l = *(const struct bfd_link_hash_entry **)a;
+ const struct bfd_link_hash_entry *r = *(const struct bfd_link_hash_entry **)b;
+
+ if (l->u.def.value < r->u.def.value)
+ return -1;
+ else if (l->u.def.value > r->u.def.value)
+ return 1;
+ else
+ return 0;
+}
+
+static void
+print_all_symbols (asection *sec)
+{
+ struct fat_user_section_struct *ud =
+ (struct fat_user_section_struct *) get_userdata (sec);
+ struct map_symbol_def *def;
+ struct bfd_link_hash_entry **entries;
+ unsigned int i;
+
+ if (!ud)
+ return;
+
+ *ud->map_symbol_def_tail = 0;
+
+ /* Sort the symbols by address. */
+ entries = (struct bfd_link_hash_entry **)
+ obstack_alloc (&map_obstack, ud->map_symbol_def_count * sizeof (*entries));
+
+ for (i = 0, def = ud->map_symbol_def_head; def; def = def->next, i++)
+ entries[i] = def->entry;
+
+ qsort (entries, ud->map_symbol_def_count, sizeof (*entries),
+ hash_entry_addr_cmp);
+
+ /* Print the symbols. */
+ for (i = 0; i < ud->map_symbol_def_count; i++)
+ print_one_symbol (entries[i], sec);
+
+ obstack_free (&map_obstack, entries);
+}
+
+/* Print information about an input section to the map file. */
+
+static void
+print_input_section (asection *i, bfd_boolean is_discarded)
+{
+ bfd_size_type size = i->size;
+ int len;
+ bfd_vma addr;
+
+ init_opb ();
+
+ print_space ();
+ minfo ("%s", i->name);
+
+ len = 1 + strlen (i->name);
+ if (len >= SECTION_NAME_MAP_LENGTH - 1)
+ {
+ print_nl ();
+ len = 0;
+ }
+ while (len < SECTION_NAME_MAP_LENGTH)
+ {
+ print_space ();
+ ++len;
+ }
+
+ if (i->output_section != NULL
+ && i->output_section->owner == link_info.output_bfd)
+ addr = i->output_section->vma + i->output_offset;
+ else
+ {
+ addr = print_dot;
+ if (!is_discarded)
+ size = 0;
+ }
+
+ minfo ("0x%V %W %B\n", addr, TO_ADDR (size), i->owner);
+
+ if (size != i->rawsize && i->rawsize != 0)
+ {
+ len = SECTION_NAME_MAP_LENGTH + 3;
+#ifdef BFD64
+ len += 16;
+#else
+ len += 8;
+#endif
+ while (len > 0)
+ {
+ print_space ();
+ --len;
+ }
+
+ minfo (_("%W (size before relaxing)\n"), i->rawsize);
+ }
+
+ if (i->output_section != NULL
+ && i->output_section->owner == link_info.output_bfd)
+ {
+ if (link_info.reduce_memory_overheads)
+ bfd_link_hash_traverse (link_info.hash, print_one_symbol, i);
+ else
+ print_all_symbols (i);
+
+ /* Update print_dot, but make sure that we do not move it
+ backwards - this could happen if we have overlays and a
+ later overlay is shorter than an earier one. */
+ if (addr + TO_ADDR (size) > print_dot)
+ print_dot = addr + TO_ADDR (size);
+ }
+}
+
+static void
+print_fill_statement (lang_fill_statement_type *fill)
+{
+ size_t size;
+ unsigned char *p;
+ fputs (" FILL mask 0x", config.map_file);
+ for (p = fill->fill->data, size = fill->fill->size; size != 0; p++, size--)
+ fprintf (config.map_file, "%02x", *p);
+ fputs ("\n", config.map_file);
+}
+
+static void
+print_data_statement (lang_data_statement_type *data)
+{
+ int i;
+ bfd_vma addr;
+ bfd_size_type size;
+ const char *name;
+
+ init_opb ();
+ for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
+ print_space ();
+
+ addr = data->output_offset;
+ if (data->output_section != NULL)
+ addr += data->output_section->vma;
+
+ switch (data->type)
+ {
+ default:
+ abort ();
+ case BYTE:
+ size = BYTE_SIZE;
+ name = "BYTE";
+ break;
+ case SHORT:
+ size = SHORT_SIZE;
+ name = "SHORT";
+ break;
+ case LONG:
+ size = LONG_SIZE;
+ name = "LONG";
+ break;
+ case QUAD:
+ size = QUAD_SIZE;
+ name = "QUAD";
+ break;
+ case SQUAD:
+ size = QUAD_SIZE;
+ name = "SQUAD";
+ break;
+ }
+
+ minfo ("0x%V %W %s 0x%v", addr, size, name, data->value);
+
+ if (data->exp->type.node_class != etree_value)
+ {
+ print_space ();
+ exp_print_tree (data->exp);
+ }
+
+ print_nl ();
+
+ print_dot = addr + TO_ADDR (size);
+}
+
+/* Print an address statement. These are generated by options like
+ -Ttext. */
+
+static void
+print_address_statement (lang_address_statement_type *address)
+{
+ minfo (_("Address of section %s set to "), address->section_name);
+ exp_print_tree (address->address);
+ print_nl ();
+}
+
+/* Print a reloc statement. */
+
+static void
+print_reloc_statement (lang_reloc_statement_type *reloc)
+{
+ int i;
+ bfd_vma addr;
+ bfd_size_type size;
+
+ init_opb ();
+ for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
+ print_space ();
+
+ addr = reloc->output_offset;
+ if (reloc->output_section != NULL)
+ addr += reloc->output_section->vma;
+
+ size = bfd_get_reloc_size (reloc->howto);
+
+ minfo ("0x%V %W RELOC %s ", addr, size, reloc->howto->name);
+
+ if (reloc->name != NULL)
+ minfo ("%s+", reloc->name);
+ else
+ minfo ("%s+", reloc->section->name);
+
+ exp_print_tree (reloc->addend_exp);
+
+ print_nl ();
+
+ print_dot = addr + TO_ADDR (size);
+}
+
+static void
+print_padding_statement (lang_padding_statement_type *s)
+{
+ int len;
+ bfd_vma addr;
+
+ init_opb ();
+ minfo (" *fill*");
+
+ len = sizeof " *fill*" - 1;
+ while (len < SECTION_NAME_MAP_LENGTH)
+ {
+ print_space ();
+ ++len;
+ }
+
+ addr = s->output_offset;
+ if (s->output_section != NULL)
+ addr += s->output_section->vma;
+ minfo ("0x%V %W ", addr, (bfd_vma) s->size);
+
+ if (s->fill->size != 0)
+ {
+ size_t size;
+ unsigned char *p;
+ for (p = s->fill->data, size = s->fill->size; size != 0; p++, size--)
+ fprintf (config.map_file, "%02x", *p);
+ }
+
+ print_nl ();
+
+ print_dot = addr + TO_ADDR (s->size);
+}
+
+static void
+print_wild_statement (lang_wild_statement_type *w,
+ lang_output_section_statement_type *os)
+{
+ struct wildcard_list *sec;
+
+ print_space ();
+
+ if (w->filenames_sorted)
+ minfo ("SORT(");
+ if (w->filename != NULL)
+ minfo ("%s", w->filename);
+ else
+ minfo ("*");
+ if (w->filenames_sorted)
+ minfo (")");
+
+ minfo ("(");
+ for (sec = w->section_list; sec; sec = sec->next)
+ {
+ if (sec->spec.sorted)
+ minfo ("SORT(");
+ if (sec->spec.exclude_name_list != NULL)
+ {
+ name_list *tmp;
+ minfo ("EXCLUDE_FILE(%s", sec->spec.exclude_name_list->name);
+ for (tmp = sec->spec.exclude_name_list->next; tmp; tmp = tmp->next)
+ minfo (" %s", tmp->name);
+ minfo (") ");
+ }
+ if (sec->spec.name != NULL)
+ minfo ("%s", sec->spec.name);
+ else
+ minfo ("*");
+ if (sec->spec.sorted)
+ minfo (")");
+ if (sec->next)
+ minfo (" ");
+ }
+ minfo (")");
+
+ print_nl ();
+
+ print_statement_list (w->children.head, os);
+}
+
+/* Print a group statement. */
+
+static void
+print_group (lang_group_statement_type *s,
+ lang_output_section_statement_type *os)
+{
+ fprintf (config.map_file, "START GROUP\n");
+ print_statement_list (s->children.head, os);
+ fprintf (config.map_file, "END GROUP\n");
+}
+
+/* Print the list of statements in S.
+ This can be called for any statement type. */
+
+static void
+print_statement_list (lang_statement_union_type *s,
+ lang_output_section_statement_type *os)
+{
+ while (s != NULL)
+ {
+ print_statement (s, os);
+ s = s->header.next;
+ }
+}
+
+/* Print the first statement in statement list S.
+ This can be called for any statement type. */
+
+static void
+print_statement (lang_statement_union_type *s,
+ lang_output_section_statement_type *os)
+{
+ switch (s->header.type)
+ {
+ default:
+ fprintf (config.map_file, _("Fail with %d\n"), s->header.type);
+ FAIL ();
+ break;
+ case lang_constructors_statement_enum:
+ if (constructor_list.head != NULL)
+ {
+ if (constructors_sorted)
+ minfo (" SORT (CONSTRUCTORS)\n");
+ else
+ minfo (" CONSTRUCTORS\n");
+ print_statement_list (constructor_list.head, os);
+ }
+ break;
+ case lang_wild_statement_enum:
+ print_wild_statement (&s->wild_statement, os);
+ break;
+ case lang_address_statement_enum:
+ print_address_statement (&s->address_statement);
+ break;
+ case lang_object_symbols_statement_enum:
+ minfo (" CREATE_OBJECT_SYMBOLS\n");
+ break;
+ case lang_fill_statement_enum:
+ print_fill_statement (&s->fill_statement);
+ break;
+ case lang_data_statement_enum:
+ print_data_statement (&s->data_statement);
+ break;
+ case lang_reloc_statement_enum:
+ print_reloc_statement (&s->reloc_statement);
+ break;
+ case lang_input_section_enum:
+ print_input_section (s->input_section.section, FALSE);
+ break;
+ case lang_padding_statement_enum:
+ print_padding_statement (&s->padding_statement);
+ break;
+ case lang_output_section_statement_enum:
+ print_output_section_statement (&s->output_section_statement);
+ break;
+ case lang_assignment_statement_enum:
+ print_assignment (&s->assignment_statement, os);
+ break;
+ case lang_target_statement_enum:
+ fprintf (config.map_file, "TARGET(%s)\n", s->target_statement.target);
+ break;
+ case lang_output_statement_enum:
+ minfo ("OUTPUT(%s", s->output_statement.name);
+ if (output_target != NULL)
+ minfo (" %s", output_target);
+ minfo (")\n");
+ break;
+ case lang_input_statement_enum:
+ print_input_statement (&s->input_statement);
+ break;
+ case lang_group_statement_enum:
+ print_group (&s->group_statement, os);
+ break;
+ case lang_insert_statement_enum:
+ minfo ("INSERT %s %s\n",
+ s->insert_statement.is_before ? "BEFORE" : "AFTER",
+ s->insert_statement.where);
+ break;
+ }
+}
+
+static void
+print_statements (void)
+{
+ print_statement_list (statement_list.head, abs_output_section);
+}
+
+/* Print the first N statements in statement list S to STDERR.
+ If N == 0, nothing is printed.
+ If N < 0, the entire list is printed.
+ Intended to be called from GDB. */
+
+void
+dprint_statement (lang_statement_union_type *s, int n)
+{
+ FILE *map_save = config.map_file;
+
+ config.map_file = stderr;
+
+ if (n < 0)
+ print_statement_list (s, abs_output_section);
+ else
+ {
+ while (s && --n >= 0)
+ {
+ print_statement (s, abs_output_section);
+ s = s->header.next;
+ }
+ }
+
+ config.map_file = map_save;
+}
+
+static void
+insert_pad (lang_statement_union_type **ptr,
+ fill_type *fill,
+ unsigned int alignment_needed,
+ asection *output_section,
+ bfd_vma dot)
+{
+ static fill_type zero_fill = { 1, { 0 } };
+ lang_statement_union_type *pad = NULL;
+
+ if (ptr != &statement_list.head)
+ pad = ((lang_statement_union_type *)
+ ((char *) ptr - offsetof (lang_statement_union_type, header.next)));
+ if (pad != NULL
+ && pad->header.type == lang_padding_statement_enum
+ && pad->padding_statement.output_section == output_section)
+ {
+ /* Use the existing pad statement. */
+ }
+ else if ((pad = *ptr) != NULL
+ && pad->header.type == lang_padding_statement_enum
+ && pad->padding_statement.output_section == output_section)
+ {
+ /* Use the existing pad statement. */
+ }
+ else
+ {
+ /* Make a new padding statement, linked into existing chain. */
+ pad = (lang_statement_union_type *)
+ stat_alloc (sizeof (lang_padding_statement_type));
+ pad->header.next = *ptr;
+ *ptr = pad;
+ pad->header.type = lang_padding_statement_enum;
+ pad->padding_statement.output_section = output_section;
+ if (fill == NULL)
+ fill = &zero_fill;
+ pad->padding_statement.fill = fill;
+ }
+ pad->padding_statement.output_offset = dot - output_section->vma;
+ pad->padding_statement.size = alignment_needed;
+ output_section->size += alignment_needed;
+}
+
+/* Work out how much this section will move the dot point. */
+
+static bfd_vma
+size_input_section
+ (lang_statement_union_type **this_ptr,
+ lang_output_section_statement_type *output_section_statement,
+ fill_type *fill,
+ bfd_vma dot)
+{
+ lang_input_section_type *is = &((*this_ptr)->input_section);
+ asection *i = is->section;
+
+ if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
+ && (i->flags & SEC_EXCLUDE) == 0)
+ {
+ unsigned int alignment_needed;
+ asection *o;
+
+ /* Align this section first to the input sections requirement,
+ then to the output section's requirement. If this alignment
+ is greater than any seen before, then record it too. Perform
+ the alignment by inserting a magic 'padding' statement. */
+
+ if (output_section_statement->subsection_alignment != -1)
+ i->alignment_power = output_section_statement->subsection_alignment;
+
+ o = output_section_statement->bfd_section;
+ if (o->alignment_power < i->alignment_power)
+ o->alignment_power = i->alignment_power;
+
+ alignment_needed = align_power (dot, i->alignment_power) - dot;
+
+ if (alignment_needed != 0)
+ {
+ insert_pad (this_ptr, fill, TO_SIZE (alignment_needed), o, dot);
+ dot += alignment_needed;
+ }
+
+ /* Remember where in the output section this input section goes. */
+
+ i->output_offset = dot - o->vma;
+
+ /* Mark how big the output section must be to contain this now. */
+ dot += TO_ADDR (i->size);
+ o->size = TO_SIZE (dot - o->vma);
+ }
+ else
+ {
+ i->output_offset = i->vma - output_section_statement->bfd_section->vma;
+ }
+
+ return dot;
+}
+
+static int
+sort_sections_by_lma (const void *arg1, const void *arg2)
+{
+ const asection *sec1 = *(const asection **) arg1;
+ const asection *sec2 = *(const asection **) arg2;
+
+ if (bfd_section_lma (sec1->owner, sec1)
+ < bfd_section_lma (sec2->owner, sec2))
+ return -1;
+ else if (bfd_section_lma (sec1->owner, sec1)
+ > bfd_section_lma (sec2->owner, sec2))
+ return 1;
+ else if (sec1->id < sec2->id)
+ return -1;
+ else if (sec1->id > sec2->id)
+ return 1;
+
+ return 0;
+}
+
+#define IGNORE_SECTION(s) \
+ ((s->flags & SEC_ALLOC) == 0 \
+ || ((s->flags & SEC_THREAD_LOCAL) != 0 \
+ && (s->flags & SEC_LOAD) == 0))
+
+/* Check to see if any allocated sections overlap with other allocated
+ sections. This can happen if a linker script specifies the output
+ section addresses of the two sections. Also check whether any memory
+ region has overflowed. */
+
+static void
+lang_check_section_addresses (void)
+{
+ asection *s, *p;
+ asection **sections, **spp;
+ unsigned int count;
+ bfd_vma s_start;
+ bfd_vma s_end;
+ bfd_vma p_start;
+ bfd_vma p_end;
+ bfd_size_type amt;
+ lang_memory_region_type *m;
+
+ if (bfd_count_sections (link_info.output_bfd) <= 1)
+ return;
+
+ amt = bfd_count_sections (link_info.output_bfd) * sizeof (asection *);
+ sections = (asection **) xmalloc (amt);
+
+ /* Scan all sections in the output list. */
+ count = 0;
+ for (s = link_info.output_bfd->sections; s != NULL; s = s->next)
+ {
+ /* Only consider loadable sections with real contents. */
+ if (!(s->flags & SEC_LOAD)
+ || !(s->flags & SEC_ALLOC)
+ || s->size == 0)
+ continue;
+
+ sections[count] = s;
+ count++;
+ }
+
+ if (count <= 1)
+ return;
+
+ qsort (sections, (size_t) count, sizeof (asection *),
+ sort_sections_by_lma);
+
+ spp = sections;
+ s = *spp++;
+ s_start = s->lma;
+ s_end = s_start + TO_ADDR (s->size) - 1;
+ for (count--; count; count--)
+ {
+ /* We must check the sections' LMA addresses not their VMA
+ addresses because overlay sections can have overlapping VMAs
+ but they must have distinct LMAs. */
+ p = s;
+ p_start = s_start;
+ p_end = s_end;
+ s = *spp++;
+ s_start = s->lma;
+ s_end = s_start + TO_ADDR (s->size) - 1;
+
+ /* Look for an overlap. We have sorted sections by lma, so we
+ know that s_start >= p_start. Besides the obvious case of
+ overlap when the current section starts before the previous
+ one ends, we also must have overlap if the previous section
+ wraps around the address space. */
+ if (s_start <= p_end
+ || p_end < p_start)
+ einfo (_("%X%P: section %s loaded at [%V,%V] overlaps section %s loaded at [%V,%V]\n"),
+ s->name, s_start, s_end, p->name, p_start, p_end);
+ }
+
+ free (sections);
+
+ /* If any memory region has overflowed, report by how much.
+ We do not issue this diagnostic for regions that had sections
+ explicitly placed outside their bounds; os_region_check's
+ diagnostics are adequate for that case.
+
+ FIXME: It is conceivable that m->current - (m->origin + m->length)
+ might overflow a 32-bit integer. There is, alas, no way to print
+ a bfd_vma quantity in decimal. */
+ for (m = lang_memory_region_list; m; m = m->next)
+ if (m->had_full_message)
+ einfo (_("%X%P: region `%s' overflowed by %ld bytes\n"),
+ m->name_list.name, (long)(m->current - (m->origin + m->length)));
+
+}
+
+/* Make sure the new address is within the region. We explicitly permit the
+ current address to be at the exact end of the region when the address is
+ non-zero, in case the region is at the end of addressable memory and the
+ calculation wraps around. */
+
+static void
+os_region_check (lang_output_section_statement_type *os,
+ lang_memory_region_type *region,
+ etree_type *tree,
+ bfd_vma rbase)
+{
+ if ((region->current < region->origin
+ || (region->current - region->origin > region->length))
+ && ((region->current != region->origin + region->length)
+ || rbase == 0))
+ {
+ if (tree != NULL)
+ {
+ einfo (_("%X%P: address 0x%v of %B section `%s'"
+ " is not within region `%s'\n"),
+ region->current,
+ os->bfd_section->owner,
+ os->bfd_section->name,
+ region->name_list.name);
+ }
+ else if (!region->had_full_message)
+ {
+ region->had_full_message = TRUE;
+
+ einfo (_("%X%P: %B section `%s' will not fit in region `%s'\n"),
+ os->bfd_section->owner,
+ os->bfd_section->name,
+ region->name_list.name);
+ }
+ }
+}
+
+/* Set the sizes for all the output sections. */
+
+static bfd_vma
+lang_size_sections_1
+ (lang_statement_union_type **prev,
+ lang_output_section_statement_type *output_section_statement,
+ fill_type *fill,
+ bfd_vma dot,
+ bfd_boolean *relax,
+ bfd_boolean check_regions)
+{
+ lang_statement_union_type *s;
+
+ /* Size up the sections from their constituent parts. */
+ for (s = *prev; s != NULL; s = s->header.next)
+ {
+ switch (s->header.type)
+ {
+ case lang_output_section_statement_enum:
+ {
+ bfd_vma newdot, after;
+ lang_output_section_statement_type *os;
+ lang_memory_region_type *r;
+
+ os = &s->output_section_statement;
+ if (os->constraint == -1)
+ break;
+
+ /* FIXME: We shouldn't need to zero section vmas for ld -r
+ here, in lang_insert_orphan, or in the default linker scripts.
+ This is covering for coff backend linker bugs. See PR6945. */
+ if (os->addr_tree == NULL
+ && link_info.relocatable
+ && (bfd_get_flavour (link_info.output_bfd)
+ == bfd_target_coff_flavour))
+ os->addr_tree = exp_intop (0);
+ if (os->addr_tree != NULL)
+ {
+ os->processed_vma = FALSE;
+ exp_fold_tree (os->addr_tree, bfd_abs_section_ptr, &dot);
+
+ if (expld.result.valid_p)
+ {
+ dot = expld.result.value;
+ if (expld.result.section != NULL)
+ dot += expld.result.section->vma;
+ }
+ else if (expld.phase != lang_mark_phase_enum)
+ einfo (_("%F%S: non constant or forward reference"
+ " address expression for section %s\n"),
+ os->name);
+ }
+
+ if (os->bfd_section == NULL)
+ /* This section was removed or never actually created. */
+ break;
+
+ /* If this is a COFF shared library section, use the size and
+ address from the input section. FIXME: This is COFF
+ specific; it would be cleaner if there were some other way
+ to do this, but nothing simple comes to mind. */
+ if (((bfd_get_flavour (link_info.output_bfd)
+ == bfd_target_ecoff_flavour)
+ || (bfd_get_flavour (link_info.output_bfd)
+ == bfd_target_coff_flavour))
+ && (os->bfd_section->flags & SEC_COFF_SHARED_LIBRARY) != 0)
+ {
+ asection *input;
+
+ if (os->children.head == NULL
+ || os->children.head->header.next != NULL
+ || (os->children.head->header.type
+ != lang_input_section_enum))
+ einfo (_("%P%X: Internal error on COFF shared library"
+ " section %s\n"), os->name);
+
+ input = os->children.head->input_section.section;
+ bfd_set_section_vma (os->bfd_section->owner,
+ os->bfd_section,
+ bfd_section_vma (input->owner, input));
+ os->bfd_section->size = input->size;
+ break;
+ }
+
+ newdot = dot;
+ if (bfd_is_abs_section (os->bfd_section))
+ {
+ /* No matter what happens, an abs section starts at zero. */
+ ASSERT (os->bfd_section->vma == 0);
+ }
+ else
+ {
+ int align;
+
+ if (os->addr_tree == NULL)
+ {
+ /* No address specified for this section, get one
+ from the region specification. */
+ if (os->region == NULL
+ || ((os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD))
+ && os->region->name_list.name[0] == '*'
+ && strcmp (os->region->name_list.name,
+ DEFAULT_MEMORY_REGION) == 0))
+ {
+ os->region = lang_memory_default (os->bfd_section);
+ }
+
+ /* If a loadable section is using the default memory
+ region, and some non default memory regions were
+ defined, issue an error message. */
+ if (!os->ignored
+ && !IGNORE_SECTION (os->bfd_section)
+ && ! link_info.relocatable
+ && check_regions
+ && strcmp (os->region->name_list.name,
+ DEFAULT_MEMORY_REGION) == 0
+ && lang_memory_region_list != NULL
+ && (strcmp (lang_memory_region_list->name_list.name,
+ DEFAULT_MEMORY_REGION) != 0
+ || lang_memory_region_list->next != NULL)
+ && expld.phase != lang_mark_phase_enum)
+ {
+ /* By default this is an error rather than just a
+ warning because if we allocate the section to the
+ default memory region we can end up creating an
+ excessively large binary, or even seg faulting when
+ attempting to perform a negative seek. See
+ sources.redhat.com/ml/binutils/2003-04/msg00423.html
+ for an example of this. This behaviour can be
+ overridden by the using the --no-check-sections
+ switch. */
+ if (command_line.check_section_addresses)
+ einfo (_("%P%F: error: no memory region specified"
+ " for loadable section `%s'\n"),
+ bfd_get_section_name (link_info.output_bfd,
+ os->bfd_section));
+ else
+ einfo (_("%P: warning: no memory region specified"
+ " for loadable section `%s'\n"),
+ bfd_get_section_name (link_info.output_bfd,
+ os->bfd_section));
+ }
+
+ newdot = os->region->current;
+ align = os->bfd_section->alignment_power;
+ }
+ else
+ align = os->section_alignment;
+
+ /* Align to what the section needs. */
+ if (align > 0)
+ {
+ bfd_vma savedot = newdot;
+ newdot = align_power (newdot, align);
+
+ if (newdot != savedot
+ && (config.warn_section_align
+ || os->addr_tree != NULL)
+ && expld.phase != lang_mark_phase_enum)
+ einfo (_("%P: warning: changing start of section"
+ " %s by %lu bytes\n"),
+ os->name, (unsigned long) (newdot - savedot));
+ }
+
+ bfd_set_section_vma (0, os->bfd_section, newdot);
+
+ os->bfd_section->output_offset = 0;
+ }
+
+ lang_size_sections_1 (&os->children.head, os,
+ os->fill, newdot, relax, check_regions);
+
+ os->processed_vma = TRUE;
+
+ if (bfd_is_abs_section (os->bfd_section) || os->ignored)
+ /* Except for some special linker created sections,
+ no output section should change from zero size
+ after strip_excluded_output_sections. A non-zero
+ size on an ignored section indicates that some
+ input section was not sized early enough. */
+ ASSERT (os->bfd_section->size == 0);
+ else
+ {
+ dot = os->bfd_section->vma;
+
+ /* Put the section within the requested block size, or
+ align at the block boundary. */
+ after = ((dot
+ + TO_ADDR (os->bfd_section->size)
+ + os->block_value - 1)
+ & - (bfd_vma) os->block_value);
+
+ os->bfd_section->size = TO_SIZE (after - os->bfd_section->vma);
+ }
+
+ /* Set section lma. */
+ r = os->region;
+ if (r == NULL)
+ r = lang_memory_region_lookup (DEFAULT_MEMORY_REGION, FALSE);
+
+ if (os->load_base)
+ {
+ bfd_vma lma = exp_get_abs_int (os->load_base, 0, "load base");
+ os->bfd_section->lma = lma;
+ }
+ else if (os->lma_region != NULL)
+ {
+ bfd_vma lma = os->lma_region->current;
+
+ if (os->section_alignment != -1)
+ lma = align_power (lma, os->section_alignment);
+ os->bfd_section->lma = lma;
+ }
+ else if (r->last_os != NULL
+ && (os->bfd_section->flags & SEC_ALLOC) != 0)
+ {
+ bfd_vma lma;
+ asection *last;
+
+ last = r->last_os->output_section_statement.bfd_section;
+
+ /* A backwards move of dot should be accompanied by
+ an explicit assignment to the section LMA (ie.
+ os->load_base set) because backwards moves can
+ create overlapping LMAs. */
+ if (dot < last->vma
+ && os->bfd_section->size != 0
+ && dot + os->bfd_section->size <= last->vma)
+ {
+ /* If dot moved backwards then leave lma equal to
+ vma. This is the old default lma, which might
+ just happen to work when the backwards move is
+ sufficiently large. Nag if this changes anything,
+ so people can fix their linker scripts. */
+
+ if (last->vma != last->lma)
+ einfo (_("%P: warning: dot moved backwards before `%s'\n"),
+ os->name);
+ }
+ else
+ {
+ /* If this is an overlay, set the current lma to that
+ at the end of the previous section. */
+ if (os->sectype == overlay_section)
+ lma = last->lma + last->size;
+
+ /* Otherwise, keep the same lma to vma relationship
+ as the previous section. */
+ else
+ lma = dot + last->lma - last->vma;
+
+ if (os->section_alignment != -1)
+ lma = align_power (lma, os->section_alignment);
+ os->bfd_section->lma = lma;
+ }
+ }
+ os->processed_lma = TRUE;
+
+ if (bfd_is_abs_section (os->bfd_section) || os->ignored)
+ break;
+
+ /* Keep track of normal sections using the default
+ lma region. We use this to set the lma for
+ following sections. Overlays or other linker
+ script assignment to lma might mean that the
+ default lma == vma is incorrect.
+ To avoid warnings about dot moving backwards when using
+ -Ttext, don't start tracking sections until we find one
+ of non-zero size or with lma set differently to vma. */
+ if (((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
+ || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0)
+ && (os->bfd_section->flags & SEC_ALLOC) != 0
+ && (os->bfd_section->size != 0
+ || (r->last_os == NULL
+ && os->bfd_section->vma != os->bfd_section->lma)
+ || (r->last_os != NULL
+ && dot >= (r->last_os->output_section_statement
+ .bfd_section->vma)))
+ && os->lma_region == NULL
+ && !link_info.relocatable)
+ r->last_os = s;
+
+ /* .tbss sections effectively have zero size. */
+ if ((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
+ || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0
+ || link_info.relocatable)
+ dot += TO_ADDR (os->bfd_section->size);
+
+ if (os->update_dot_tree != 0)
+ exp_fold_tree (os->update_dot_tree, bfd_abs_section_ptr, &dot);
+
+ /* Update dot in the region ?
+ We only do this if the section is going to be allocated,
+ since unallocated sections do not contribute to the region's
+ overall size in memory. */
+ if (os->region != NULL
+ && (os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD)))
+ {
+ os->region->current = dot;
+
+ if (check_regions)
+ /* Make sure the new address is within the region. */
+ os_region_check (os, os->region, os->addr_tree,
+ os->bfd_section->vma);
+
+ if (os->lma_region != NULL && os->lma_region != os->region
+ && (os->bfd_section->flags & SEC_LOAD))
+ {
+ os->lma_region->current
+ = os->bfd_section->lma + TO_ADDR (os->bfd_section->size);
+
+ if (check_regions)
+ os_region_check (os, os->lma_region, NULL,
+ os->bfd_section->lma);
+ }
+ }
+ }
+ break;
+
+ case lang_constructors_statement_enum:
+ dot = lang_size_sections_1 (&constructor_list.head,
+ output_section_statement,
+ fill, dot, relax, check_regions);
+ break;
+
+ case lang_data_statement_enum:
+ {
+ unsigned int size = 0;
+
+ s->data_statement.output_offset =
+ dot - output_section_statement->bfd_section->vma;
+ s->data_statement.output_section =
+ output_section_statement->bfd_section;
+
+ /* We might refer to provided symbols in the expression, and
+ need to mark them as needed. */
+ exp_fold_tree (s->data_statement.exp, bfd_abs_section_ptr, &dot);
+
+ switch (s->data_statement.type)
+ {
+ default:
+ abort ();
+ case QUAD:
+ case SQUAD:
+ size = QUAD_SIZE;
+ break;
+ case LONG:
+ size = LONG_SIZE;
+ break;
+ case SHORT:
+ size = SHORT_SIZE;
+ break;
+ case BYTE:
+ size = BYTE_SIZE;
+ break;
+ }
+ if (size < TO_SIZE ((unsigned) 1))
+ size = TO_SIZE ((unsigned) 1);
+ dot += TO_ADDR (size);
+ output_section_statement->bfd_section->size += size;
+ }
+ break;
+
+ case lang_reloc_statement_enum:
+ {
+ int size;
+
+ s->reloc_statement.output_offset =
+ dot - output_section_statement->bfd_section->vma;
+ s->reloc_statement.output_section =
+ output_section_statement->bfd_section;
+ size = bfd_get_reloc_size (s->reloc_statement.howto);
+ dot += TO_ADDR (size);
+ output_section_statement->bfd_section->size += size;
+ }
+ break;
+
+ case lang_wild_statement_enum:
+ dot = lang_size_sections_1 (&s->wild_statement.children.head,
+ output_section_statement,
+ fill, dot, relax, check_regions);
+ break;
+
+ case lang_object_symbols_statement_enum:
+ link_info.create_object_symbols_section =
+ output_section_statement->bfd_section;
+ break;
+
+ case lang_output_statement_enum:
+ case lang_target_statement_enum:
+ break;
+
+ case lang_input_section_enum:
+ {
+ asection *i;
+
+ i = s->input_section.section;
+ if (relax)
+ {
+ bfd_boolean again;
+
+ if (! bfd_relax_section (i->owner, i, &link_info, &again))
+ einfo (_("%P%F: can't relax section: %E\n"));
+ if (again)
+ *relax = TRUE;
+ }
+ dot = size_input_section (prev, output_section_statement,
+ output_section_statement->fill, dot);
+ }
+ break;
+
+ case lang_input_statement_enum:
+ break;
+
+ case lang_fill_statement_enum:
+ s->fill_statement.output_section =
+ output_section_statement->bfd_section;
+
+ fill = s->fill_statement.fill;
+ break;
+
+ case lang_assignment_statement_enum:
+ {
+ bfd_vma newdot = dot;
+ etree_type *tree = s->assignment_statement.exp;
+
+ expld.dataseg.relro = exp_dataseg_relro_none;
+
+ exp_fold_tree (tree,
+ output_section_statement->bfd_section,
+ &newdot);
+
+ if (expld.dataseg.relro == exp_dataseg_relro_start)
+ {
+ if (!expld.dataseg.relro_start_stat)
+ expld.dataseg.relro_start_stat = s;
+ else
+ {
+ ASSERT (expld.dataseg.relro_start_stat == s);
+ }
+ }
+ else if (expld.dataseg.relro == exp_dataseg_relro_end)
+ {
+ if (!expld.dataseg.relro_end_stat)
+ expld.dataseg.relro_end_stat = s;
+ else
+ {
+ ASSERT (expld.dataseg.relro_end_stat == s);
+ }
+ }
+ expld.dataseg.relro = exp_dataseg_relro_none;
+
+ /* This symbol is relative to this section. */
+ if ((tree->type.node_class == etree_provided
+ || tree->type.node_class == etree_assign)
+ && (tree->assign.dst [0] != '.'
+ || tree->assign.dst [1] != '\0'))
+ output_section_statement->section_relative_symbol = 1;
+
+ if (!output_section_statement->ignored)
+ {
+ if (output_section_statement == abs_output_section)
+ {
+ /* If we don't have an output section, then just adjust
+ the default memory address. */
+ lang_memory_region_lookup (DEFAULT_MEMORY_REGION,
+ FALSE)->current = newdot;
+ }
+ else if (newdot != dot)
+ {
+ /* Insert a pad after this statement. We can't
+ put the pad before when relaxing, in case the
+ assignment references dot. */
+ insert_pad (&s->header.next, fill, TO_SIZE (newdot - dot),
+ output_section_statement->bfd_section, dot);
+
+ /* Don't neuter the pad below when relaxing. */
+ s = s->header.next;
+
+ /* If dot is advanced, this implies that the section
+ should have space allocated to it, unless the
+ user has explicitly stated that the section
+ should not be allocated. */
+ if (output_section_statement->sectype != noalloc_section
+ && (output_section_statement->sectype != noload_section
+ || (bfd_get_flavour (link_info.output_bfd)
+ == bfd_target_elf_flavour)))
+ output_section_statement->bfd_section->flags |= SEC_ALLOC;
+ }
+ dot = newdot;
+ }
+ }
+ break;
+
+ case lang_padding_statement_enum:
+ /* If this is the first time lang_size_sections is called,
+ we won't have any padding statements. If this is the
+ second or later passes when relaxing, we should allow
+ padding to shrink. If padding is needed on this pass, it
+ will be added back in. */
+ s->padding_statement.size = 0;
+
+ /* Make sure output_offset is valid. If relaxation shrinks
+ the section and this pad isn't needed, it's possible to
+ have output_offset larger than the final size of the
+ section. bfd_set_section_contents will complain even for
+ a pad size of zero. */
+ s->padding_statement.output_offset
+ = dot - output_section_statement->bfd_section->vma;
+ break;
+
+ case lang_group_statement_enum:
+ dot = lang_size_sections_1 (&s->group_statement.children.head,
+ output_section_statement,
+ fill, dot, relax, check_regions);
+ break;
+
+ case lang_insert_statement_enum:
+ break;
+
+ /* We can only get here when relaxing is turned on. */
+ case lang_address_statement_enum:
+ break;
+
+ default:
+ FAIL ();
+ break;
+ }
+ prev = &s->header.next;
+ }
+ return dot;
+}
+
+/* Callback routine that is used in _bfd_elf_map_sections_to_segments.
+ The BFD library has set NEW_SEGMENT to TRUE iff it thinks that
+ CURRENT_SECTION and PREVIOUS_SECTION ought to be placed into different
+ segments. We are allowed an opportunity to override this decision. */
+
+bfd_boolean
+ldlang_override_segment_assignment (struct bfd_link_info * info ATTRIBUTE_UNUSED,
+ bfd * abfd ATTRIBUTE_UNUSED,
+ asection * current_section,
+ asection * previous_section,
+ bfd_boolean new_segment)
+{
+ lang_output_section_statement_type * cur;
+ lang_output_section_statement_type * prev;
+
+ /* The checks below are only necessary when the BFD library has decided
+ that the two sections ought to be placed into the same segment. */
+ if (new_segment)
+ return TRUE;
+
+ /* Paranoia checks. */
+ if (current_section == NULL || previous_section == NULL)
+ return new_segment;
+
+ /* Find the memory regions associated with the two sections.
+ We call lang_output_section_find() here rather than scanning the list
+ of output sections looking for a matching section pointer because if
+ we have a large number of sections then a hash lookup is faster. */
+ cur = lang_output_section_find (current_section->name);
+ prev = lang_output_section_find (previous_section->name);
+
+ /* More paranoia. */
+ if (cur == NULL || prev == NULL)
+ return new_segment;
+
+ /* If the regions are different then force the sections to live in
+ different segments. See the email thread starting at the following
+ URL for the reasons why this is necessary:
+ http://sourceware.org/ml/binutils/2007-02/msg00216.html */
+ return cur->region != prev->region;
+}
+
+void
+one_lang_size_sections_pass (bfd_boolean *relax, bfd_boolean check_regions)
+{
+ lang_statement_iteration++;
+ lang_size_sections_1 (&statement_list.head, abs_output_section,
+ 0, 0, relax, check_regions);
+}
+
+void
+lang_size_sections (bfd_boolean *relax, bfd_boolean check_regions)
+{
+ expld.phase = lang_allocating_phase_enum;
+ expld.dataseg.phase = exp_dataseg_none;
+
+ one_lang_size_sections_pass (relax, check_regions);
+ if (expld.dataseg.phase == exp_dataseg_end_seen
+ && link_info.relro && expld.dataseg.relro_end)
+ {
+ /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_RELRO_END pair was seen, try
+ to put expld.dataseg.relro on a (common) page boundary. */
+ bfd_vma min_base, old_base, relro_end, maxpage;
+
+ expld.dataseg.phase = exp_dataseg_relro_adjust;
+ maxpage = expld.dataseg.maxpagesize;
+ /* MIN_BASE is the absolute minimum address we are allowed to start the
+ read-write segment (byte before will be mapped read-only). */
+ min_base = (expld.dataseg.min_base + maxpage - 1) & ~(maxpage - 1);
+ /* OLD_BASE is the address for a feasible minimum address which will
+ still not cause a data overlap inside MAXPAGE causing file offset skip
+ by MAXPAGE. */
+ old_base = expld.dataseg.base;
+ expld.dataseg.base += (-expld.dataseg.relro_end
+ & (expld.dataseg.pagesize - 1));
+ /* Compute the expected PT_GNU_RELRO segment end. */
+ relro_end = ((expld.dataseg.relro_end + expld.dataseg.pagesize - 1)
+ & ~(expld.dataseg.pagesize - 1));
+ if (min_base + maxpage < expld.dataseg.base)
+ {
+ expld.dataseg.base -= maxpage;
+ relro_end -= maxpage;
+ }
+ lang_reset_memory_regions ();
+ one_lang_size_sections_pass (relax, check_regions);
+ if (expld.dataseg.relro_end > relro_end)
+ {
+ /* The alignment of sections between DATA_SEGMENT_ALIGN
+ and DATA_SEGMENT_RELRO_END caused huge padding to be
+ inserted at DATA_SEGMENT_RELRO_END. Try to start a bit lower so
+ that the section alignments will fit in. */
+ asection *sec;
+ unsigned int max_alignment_power = 0;
+
+ /* Find maximum alignment power of sections between
+ DATA_SEGMENT_ALIGN and DATA_SEGMENT_RELRO_END. */
+ for (sec = link_info.output_bfd->sections; sec; sec = sec->next)
+ if (sec->vma >= expld.dataseg.base
+ && sec->vma < expld.dataseg.relro_end
+ && sec->alignment_power > max_alignment_power)
+ max_alignment_power = sec->alignment_power;
+
+ if (((bfd_vma) 1 << max_alignment_power) < expld.dataseg.pagesize)
+ {
+ if (expld.dataseg.base - (1 << max_alignment_power) < old_base)
+ expld.dataseg.base += expld.dataseg.pagesize;
+ expld.dataseg.base -= (1 << max_alignment_power);
+ lang_reset_memory_regions ();
+ one_lang_size_sections_pass (relax, check_regions);
+ }
+ }
+ link_info.relro_start = expld.dataseg.base;
+ link_info.relro_end = expld.dataseg.relro_end;
+ }
+ else if (expld.dataseg.phase == exp_dataseg_end_seen)
+ {
+ /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_END pair was seen, check whether
+ a page could be saved in the data segment. */
+ bfd_vma first, last;
+
+ first = -expld.dataseg.base & (expld.dataseg.pagesize - 1);
+ last = expld.dataseg.end & (expld.dataseg.pagesize - 1);
+ if (first && last
+ && ((expld.dataseg.base & ~(expld.dataseg.pagesize - 1))
+ != (expld.dataseg.end & ~(expld.dataseg.pagesize - 1)))
+ && first + last <= expld.dataseg.pagesize)
+ {
+ expld.dataseg.phase = exp_dataseg_adjust;
+ lang_reset_memory_regions ();
+ one_lang_size_sections_pass (relax, check_regions);
+ }
+ }
+
+ expld.phase = lang_final_phase_enum;
+}
+
+/* Worker function for lang_do_assignments. Recursiveness goes here. */
+
+static bfd_vma
+lang_do_assignments_1 (lang_statement_union_type *s,
+ lang_output_section_statement_type *current_os,
+ fill_type *fill,
+ bfd_vma dot)
+{
+ for (; s != NULL; s = s->header.next)
+ {
+ switch (s->header.type)
+ {
+ case lang_constructors_statement_enum:
+ dot = lang_do_assignments_1 (constructor_list.head,
+ current_os, fill, dot);
+ break;
+
+ case lang_output_section_statement_enum:
+ {
+ lang_output_section_statement_type *os;
+
+ os = &(s->output_section_statement);
+ if (os->bfd_section != NULL && !os->ignored)
+ {
+ dot = os->bfd_section->vma;
+
+ lang_do_assignments_1 (os->children.head, os, os->fill, dot);
+
+ /* .tbss sections effectively have zero size. */
+ if ((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
+ || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0
+ || link_info.relocatable)
+ dot += TO_ADDR (os->bfd_section->size);
+
+ if (os->update_dot_tree != NULL)
+ exp_fold_tree (os->update_dot_tree, bfd_abs_section_ptr, &dot);
+ }
+ }
+ break;
+
+ case lang_wild_statement_enum:
+
+ dot = lang_do_assignments_1 (s->wild_statement.children.head,
+ current_os, fill, dot);
+ break;
+
+ case lang_object_symbols_statement_enum:
+ case lang_output_statement_enum:
+ case lang_target_statement_enum:
+ break;
+
+ case lang_data_statement_enum:
+ exp_fold_tree (s->data_statement.exp, bfd_abs_section_ptr, &dot);
+ if (expld.result.valid_p)
+ {
+ s->data_statement.value = expld.result.value;
+ if (expld.result.section != NULL)
+ s->data_statement.value += expld.result.section->vma;
+ }
+ else
+ einfo (_("%F%P: invalid data statement\n"));
+ {
+ unsigned int size;
+ switch (s->data_statement.type)
+ {
+ default:
+ abort ();
+ case QUAD:
+ case SQUAD:
+ size = QUAD_SIZE;
+ break;
+ case LONG:
+ size = LONG_SIZE;
+ break;
+ case SHORT:
+ size = SHORT_SIZE;
+ break;
+ case BYTE:
+ size = BYTE_SIZE;
+ break;
+ }
+ if (size < TO_SIZE ((unsigned) 1))
+ size = TO_SIZE ((unsigned) 1);
+ dot += TO_ADDR (size);
+ }
+ break;
+
+ case lang_reloc_statement_enum:
+ exp_fold_tree (s->reloc_statement.addend_exp,
+ bfd_abs_section_ptr, &dot);
+ if (expld.result.valid_p)
+ s->reloc_statement.addend_value = expld.result.value;
+ else
+ einfo (_("%F%P: invalid reloc statement\n"));
+ dot += TO_ADDR (bfd_get_reloc_size (s->reloc_statement.howto));
+ break;
+
+ case lang_input_section_enum:
+ {
+ asection *in = s->input_section.section;
+
+ if ((in->flags & SEC_EXCLUDE) == 0)
+ dot += TO_ADDR (in->size);
+ }
+ break;
+
+ case lang_input_statement_enum:
+ break;
+
+ case lang_fill_statement_enum:
+ fill = s->fill_statement.fill;
+ break;
+
+ case lang_assignment_statement_enum:
+ exp_fold_tree (s->assignment_statement.exp,
+ current_os->bfd_section,
+ &dot);
+ break;
+
+ case lang_padding_statement_enum:
+ dot += TO_ADDR (s->padding_statement.size);
+ break;
+
+ case lang_group_statement_enum:
+ dot = lang_do_assignments_1 (s->group_statement.children.head,
+ current_os, fill, dot);
+ break;
+
+ case lang_insert_statement_enum:
+ break;
+
+ case lang_address_statement_enum:
+ break;
+
+ default:
+ FAIL ();
+ break;
+ }
+ }
+ return dot;
+}
+
+void
+lang_do_assignments (void)
+{
+ lang_statement_iteration++;
+ lang_do_assignments_1 (statement_list.head, abs_output_section, NULL, 0);
+}
+
+/* Fix any .startof. or .sizeof. symbols. When the assemblers see the
+ operator .startof. (section_name), it produces an undefined symbol
+ .startof.section_name. Similarly, when it sees
+ .sizeof. (section_name), it produces an undefined symbol
+ .sizeof.section_name. For all the output sections, we look for
+ such symbols, and set them to the correct value. */
+
+static void
+lang_set_startof (void)
+{
+ asection *s;
+
+ if (link_info.relocatable)
+ return;
+
+ for (s = link_info.output_bfd->sections; s != NULL; s = s->next)
+ {
+ const char *secname;
+ char *buf;
+ struct bfd_link_hash_entry *h;
+
+ secname = bfd_get_section_name (link_info.output_bfd, s);
+ buf = (char *) xmalloc (10 + strlen (secname));
+
+ sprintf (buf, ".startof.%s", secname);
+ h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
+ if (h != NULL && h->type == bfd_link_hash_undefined)
+ {
+ h->type = bfd_link_hash_defined;
+ h->u.def.value = bfd_get_section_vma (link_info.output_bfd, s);
+ h->u.def.section = bfd_abs_section_ptr;
+ }
+
+ sprintf (buf, ".sizeof.%s", secname);
+ h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
+ if (h != NULL && h->type == bfd_link_hash_undefined)
+ {
+ h->type = bfd_link_hash_defined;
+ h->u.def.value = TO_ADDR (s->size);
+ h->u.def.section = bfd_abs_section_ptr;
+ }
+
+ free (buf);
+ }
+}
+
+static void
+lang_end (void)
+{
+ struct bfd_link_hash_entry *h;
+ bfd_boolean warn;
+
+ if ((link_info.relocatable && !link_info.gc_sections)
+ || (link_info.shared && !link_info.executable))
+ warn = entry_from_cmdline;
+ else
+ warn = TRUE;
+
+ /* Force the user to specify a root when generating a relocatable with
+ --gc-sections. */
+ if (link_info.gc_sections && link_info.relocatable
+ && !(entry_from_cmdline || undef_from_cmdline))
+ einfo (_("%P%F: gc-sections requires either an entry or "
+ "an undefined symbol\n"));
+
+ if (entry_symbol.name == NULL)
+ {
+ /* No entry has been specified. Look for the default entry, but
+ don't warn if we don't find it. */
+ entry_symbol.name = entry_symbol_default;
+ warn = FALSE;
+ }
+
+ h = bfd_link_hash_lookup (link_info.hash, entry_symbol.name,
+ FALSE, FALSE, TRUE);
+ if (h != NULL
+ && (h->type == bfd_link_hash_defined
+ || h->type == bfd_link_hash_defweak)
+ && h->u.def.section->output_section != NULL)
+ {
+ bfd_vma val;
+
+ val = (h->u.def.value
+ + bfd_get_section_vma (link_info.output_bfd,
+ h->u.def.section->output_section)
+ + h->u.def.section->output_offset);
+ if (! bfd_set_start_address (link_info.output_bfd, val))
+ einfo (_("%P%F:%s: can't set start address\n"), entry_symbol.name);
+ }
+ else
+ {
+ bfd_vma val;
+ const char *send;
+
+ /* We couldn't find the entry symbol. Try parsing it as a
+ number. */
+ val = bfd_scan_vma (entry_symbol.name, &send, 0);
+ if (*send == '\0')
+ {
+ if (! bfd_set_start_address (link_info.output_bfd, val))
+ einfo (_("%P%F: can't set start address\n"));
+ }
+ else
+ {
+ asection *ts;
+
+ /* Can't find the entry symbol, and it's not a number. Use
+ the first address in the text section. */
+ ts = bfd_get_section_by_name (link_info.output_bfd, entry_section);
+ if (ts != NULL)
+ {
+ if (warn)
+ einfo (_("%P: warning: cannot find entry symbol %s;"
+ " defaulting to %V\n"),
+ entry_symbol.name,
+ bfd_get_section_vma (link_info.output_bfd, ts));
+ if (!(bfd_set_start_address
+ (link_info.output_bfd,
+ bfd_get_section_vma (link_info.output_bfd, ts))))
+ einfo (_("%P%F: can't set start address\n"));
+ }
+ else
+ {
+ if (warn)
+ einfo (_("%P: warning: cannot find entry symbol %s;"
+ " not setting start address\n"),
+ entry_symbol.name);
+ }
+ }
+ }
+
+ /* Don't bfd_hash_table_free (&lang_definedness_table);
+ map file output may result in a call of lang_track_definedness. */
+}
+
+/* This is a small function used when we want to ignore errors from
+ BFD. */
+
+static void
+ignore_bfd_errors (const char *s ATTRIBUTE_UNUSED, ...)
+{
+ /* Don't do anything. */
+}
+
+/* Check that the architecture of all the input files is compatible
+ with the output file. Also call the backend to let it do any
+ other checking that is needed. */
+
+static void
+lang_check (void)
+{
+ lang_statement_union_type *file;
+ bfd *input_bfd;
+ const bfd_arch_info_type *compatible;
+
+ for (file = file_chain.head; file != NULL; file = file->input_statement.next)
+ {
+ input_bfd = file->input_statement.the_bfd;
+ compatible
+ = bfd_arch_get_compatible (input_bfd, link_info.output_bfd,
+ command_line.accept_unknown_input_arch);
+
+ /* In general it is not possible to perform a relocatable
+ link between differing object formats when the input
+ file has relocations, because the relocations in the
+ input format may not have equivalent representations in
+ the output format (and besides BFD does not translate
+ relocs for other link purposes than a final link). */
+ if ((link_info.relocatable || link_info.emitrelocations)
+ && (compatible == NULL
+ || (bfd_get_flavour (input_bfd)
+ != bfd_get_flavour (link_info.output_bfd)))
+ && (bfd_get_file_flags (input_bfd) & HAS_RELOC) != 0)
+ {
+ einfo (_("%P%F: Relocatable linking with relocations from"
+ " format %s (%B) to format %s (%B) is not supported\n"),
+ bfd_get_target (input_bfd), input_bfd,
+ bfd_get_target (link_info.output_bfd), link_info.output_bfd);
+ /* einfo with %F exits. */
+ }
+
+ if (compatible == NULL)
+ {
+ if (command_line.warn_mismatch)
+ einfo (_("%P%X: %s architecture of input file `%B'"
+ " is incompatible with %s output\n"),
+ bfd_printable_name (input_bfd), input_bfd,
+ bfd_printable_name (link_info.output_bfd));
+ }
+ else if (bfd_count_sections (input_bfd))
+ {
+ /* If the input bfd has no contents, it shouldn't set the
+ private data of the output bfd. */
+
+ bfd_error_handler_type pfn = NULL;
+
+ /* If we aren't supposed to warn about mismatched input
+ files, temporarily set the BFD error handler to a
+ function which will do nothing. We still want to call
+ bfd_merge_private_bfd_data, since it may set up
+ information which is needed in the output file. */
+ if (! command_line.warn_mismatch)
+ pfn = bfd_set_error_handler (ignore_bfd_errors);
+ if (! bfd_merge_private_bfd_data (input_bfd, link_info.output_bfd))
+ {
+ if (command_line.warn_mismatch)
+ einfo (_("%P%X: failed to merge target specific data"
+ " of file %B\n"), input_bfd);
+ }
+ if (! command_line.warn_mismatch)
+ bfd_set_error_handler (pfn);
+ }
+ }
+}
+
+/* Look through all the global common symbols and attach them to the
+ correct section. The -sort-common command line switch may be used
+ to roughly sort the entries by alignment. */
+
+static void
+lang_common (void)
+{
+ if (command_line.inhibit_common_definition)
+ return;
+ if (link_info.relocatable
+ && ! command_line.force_common_definition)
+ return;
+
+ if (! config.sort_common)
+ bfd_link_hash_traverse (link_info.hash, lang_one_common, NULL);
+ else
+ {
+ unsigned int power;
+
+ if (config.sort_common == sort_descending)
+ {
+ for (power = 4; power > 0; power--)
+ bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
+
+ power = 0;
+ bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
+ }
+ else
+ {
+ for (power = 0; power <= 4; power++)
+ bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
+
+ power = UINT_MAX;
+ bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
+ }
+ }
+}
+
+/* Place one common symbol in the correct section. */
+
+static bfd_boolean
+lang_one_common (struct bfd_link_hash_entry *h, void *info)
+{
+ unsigned int power_of_two;
+ bfd_vma size;
+ asection *section;
+
+ if (h->type != bfd_link_hash_common)
+ return TRUE;
+
+ size = h->u.c.size;
+ power_of_two = h->u.c.p->alignment_power;
+
+ if (config.sort_common == sort_descending
+ && power_of_two < *(unsigned int *) info)
+ return TRUE;
+ else if (config.sort_common == sort_ascending
+ && power_of_two > *(unsigned int *) info)
+ return TRUE;
+
+ section = h->u.c.p->section;
+ if (!bfd_define_common_symbol (link_info.output_bfd, &link_info, h))
+ einfo (_("%P%F: Could not define common symbol `%T': %E\n"),
+ h->root.string);
+
+ if (config.map_file != NULL)
+ {
+ static bfd_boolean header_printed;
+ int len;
+ char *name;
+ char buf[50];
+
+ if (! header_printed)
+ {
+ minfo (_("\nAllocating common symbols\n"));
+ minfo (_("Common symbol size file\n\n"));
+ header_printed = TRUE;
+ }
+
+ name = bfd_demangle (link_info.output_bfd, h->root.string,
+ DMGL_ANSI | DMGL_PARAMS);
+ if (name == NULL)
+ {
+ minfo ("%s", h->root.string);
+ len = strlen (h->root.string);
+ }
+ else
+ {
+ minfo ("%s", name);
+ len = strlen (name);
+ free (name);
+ }
+
+ if (len >= 19)
+ {
+ print_nl ();
+ len = 0;
+ }
+ while (len < 20)
+ {
+ print_space ();
+ ++len;
+ }
+
+ minfo ("0x");
+ if (size <= 0xffffffff)
+ sprintf (buf, "%lx", (unsigned long) size);
+ else
+ sprintf_vma (buf, size);
+ minfo ("%s", buf);
+ len = strlen (buf);
+
+ while (len < 16)
+ {
+ print_space ();
+ ++len;
+ }
+
+ minfo ("%B\n", section->owner);
+ }
+
+ return TRUE;
+}
+
+/* Run through the input files and ensure that every input section has
+ somewhere to go. If one is found without a destination then create
+ an input request and place it into the statement tree. */
+
+static void
+lang_place_orphans (void)
+{
+ LANG_FOR_EACH_INPUT_STATEMENT (file)
+ {
+ asection *s;
+
+ for (s = file->the_bfd->sections; s != NULL; s = s->next)
+ {
+ if (s->output_section == NULL)
+ {
+ /* This section of the file is not attached, root
+ around for a sensible place for it to go. */
+
+ if (file->just_syms_flag)
+ bfd_link_just_syms (file->the_bfd, s, &link_info);
+ else if ((s->flags & SEC_EXCLUDE) != 0)
+ s->output_section = bfd_abs_section_ptr;
+ else if (strcmp (s->name, "COMMON") == 0)
+ {
+ /* This is a lonely common section which must have
+ come from an archive. We attach to the section
+ with the wildcard. */
+ if (! link_info.relocatable
+ || command_line.force_common_definition)
+ {
+ if (default_common_section == NULL)
+ default_common_section
+ = lang_output_section_statement_lookup (".bss", 0,
+ TRUE);
+ lang_add_section (&default_common_section->children, s,
+ default_common_section);
+ }
+ }
+ else
+ {
+ const char *name = s->name;
+ int constraint = 0;
+
+ if (config.unique_orphan_sections
+ || unique_section_p (s, NULL))
+ constraint = SPECIAL;
+
+ if (!ldemul_place_orphan (s, name, constraint))
+ {
+ lang_output_section_statement_type *os;
+ os = lang_output_section_statement_lookup (name,
+ constraint,
+ TRUE);
+ if (os->addr_tree == NULL
+ && (link_info.relocatable
+ || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0))
+ os->addr_tree = exp_intop (0);
+ lang_add_section (&os->children, s, os);
+ }
+ }
+ }
+ }
+ }
+}
+
+void
+lang_set_flags (lang_memory_region_type *ptr, const char *flags, int invert)
+{
+ flagword *ptr_flags;
+
+ ptr_flags = invert ? &ptr->not_flags : &ptr->flags;
+ while (*flags)
+ {
+ switch (*flags)
+ {
+ case 'A': case 'a':
+ *ptr_flags |= SEC_ALLOC;
+ break;
+
+ case 'R': case 'r':
+ *ptr_flags |= SEC_READONLY;
+ break;
+
+ case 'W': case 'w':
+ *ptr_flags |= SEC_DATA;
+ break;
+
+ case 'X': case 'x':
+ *ptr_flags |= SEC_CODE;
+ break;
+
+ case 'L': case 'l':
+ case 'I': case 'i':
+ *ptr_flags |= SEC_LOAD;
+ break;
+
+ default:
+ einfo (_("%P%F: invalid syntax in flags\n"));
+ break;
+ }
+ flags++;
+ }
+}
+
+/* Call a function on each input file. This function will be called
+ on an archive, but not on the elements. */
+
+void
+lang_for_each_input_file (void (*func) (lang_input_statement_type *))
+{
+ lang_input_statement_type *f;
+
+ for (f = (lang_input_statement_type *) input_file_chain.head;
+ f != NULL;
+ f = (lang_input_statement_type *) f->next_real_file)
+ func (f);
+}
+
+/* Call a function on each file. The function will be called on all
+ the elements of an archive which are included in the link, but will
+ not be called on the archive file itself. */
+
+void
+lang_for_each_file (void (*func) (lang_input_statement_type *))
+{
+ LANG_FOR_EACH_INPUT_STATEMENT (f)
+ {
+ func (f);
+ }
+}
+
+void
+ldlang_add_file (lang_input_statement_type *entry)
+{
+ lang_statement_append (&file_chain,
+ (lang_statement_union_type *) entry,
+ &entry->next);
+
+ /* The BFD linker needs to have a list of all input BFDs involved in
+ a link. */
+ ASSERT (entry->the_bfd->link_next == NULL);
+ ASSERT (entry->the_bfd != link_info.output_bfd);
+
+ *link_info.input_bfds_tail = entry->the_bfd;
+ link_info.input_bfds_tail = &entry->the_bfd->link_next;
+ entry->the_bfd->usrdata = entry;
+ bfd_set_gp_size (entry->the_bfd, g_switch_value);
+
+ /* Look through the sections and check for any which should not be
+ included in the link. We need to do this now, so that we can
+ notice when the backend linker tries to report multiple
+ definition errors for symbols which are in sections we aren't
+ going to link. FIXME: It might be better to entirely ignore
+ symbols which are defined in sections which are going to be
+ discarded. This would require modifying the backend linker for
+ each backend which might set the SEC_LINK_ONCE flag. If we do
+ this, we should probably handle SEC_EXCLUDE in the same way. */
+
+ bfd_map_over_sections (entry->the_bfd, section_already_linked, entry);
+}
+
+void
+lang_add_output (const char *name, int from_script)
+{
+ /* Make -o on command line override OUTPUT in script. */
+ if (!had_output_filename || !from_script)
+ {
+ output_filename = name;
+ had_output_filename = TRUE;
+ }
+}
+
+static lang_output_section_statement_type *current_section;
+
+static int
+topower (int x)
+{
+ unsigned int i = 1;
+ int l;
+
+ if (x < 0)
+ return -1;
+
+ for (l = 0; l < 32; l++)
+ {
+ if (i >= (unsigned int) x)
+ return l;
+ i <<= 1;
+ }
+
+ return 0;
+}
+
+lang_output_section_statement_type *
+lang_enter_output_section_statement (const char *output_section_statement_name,
+ etree_type *address_exp,
+ enum section_type sectype,
+ etree_type *align,
+ etree_type *subalign,
+ etree_type *ebase,
+ int constraint)
+{
+ lang_output_section_statement_type *os;
+
+ os = lang_output_section_statement_lookup (output_section_statement_name,
+ constraint, TRUE);
+ current_section = os;
+
+ if (os->addr_tree == NULL)
+ {
+ os->addr_tree = address_exp;
+ }
+ os->sectype = sectype;
+ if (sectype != noload_section)
+ os->flags = SEC_NO_FLAGS;
+ else
+ os->flags = SEC_NEVER_LOAD;
+ os->block_value = 1;
+
+ /* Make next things chain into subchain of this. */
+ push_stat_ptr (&os->children);
+
+ os->subsection_alignment =
+ topower (exp_get_value_int (subalign, -1, "subsection alignment"));
+ os->section_alignment =
+ topower (exp_get_value_int (align, -1, "section alignment"));
+
+ os->load_base = ebase;
+ return os;
+}
+
+void
+lang_final (void)
+{
+ lang_output_statement_type *new_stmt;
+
+ new_stmt = new_stat (lang_output_statement, stat_ptr);
+ new_stmt->name = output_filename;
+
+}
+
+/* Reset the current counters in the regions. */
+
+void
+lang_reset_memory_regions (void)
+{
+ lang_memory_region_type *p = lang_memory_region_list;
+ asection *o;
+ lang_output_section_statement_type *os;
+
+ for (p = lang_memory_region_list; p != NULL; p = p->next)
+ {
+ p->current = p->origin;
+ p->last_os = NULL;
+ }
+
+ for (os = &lang_output_section_statement.head->output_section_statement;
+ os != NULL;
+ os = os->next)
+ {
+ os->processed_vma = FALSE;
+ os->processed_lma = FALSE;
+ }
+
+ for (o = link_info.output_bfd->sections; o != NULL; o = o->next)
+ {
+ /* Save the last size for possible use by bfd_relax_section. */
+ o->rawsize = o->size;
+ o->size = 0;
+ }
+}
+
+/* Worker for lang_gc_sections_1. */
+
+static void
+gc_section_callback (lang_wild_statement_type *ptr,
+ struct wildcard_list *sec ATTRIBUTE_UNUSED,
+ asection *section,
+ lang_input_statement_type *file ATTRIBUTE_UNUSED,
+ void *data ATTRIBUTE_UNUSED)
+{
+ /* If the wild pattern was marked KEEP, the member sections
+ should be as well. */
+ if (ptr->keep_sections)
+ section->flags |= SEC_KEEP;
+}
+
+/* Iterate over sections marking them against GC. */
+
+static void
+lang_gc_sections_1 (lang_statement_union_type *s)
+{
+ for (; s != NULL; s = s->header.next)
+ {
+ switch (s->header.type)
+ {
+ case lang_wild_statement_enum:
+ walk_wild (&s->wild_statement, gc_section_callback, NULL);
+ break;
+ case lang_constructors_statement_enum:
+ lang_gc_sections_1 (constructor_list.head);
+ break;
+ case lang_output_section_statement_enum:
+ lang_gc_sections_1 (s->output_section_statement.children.head);
+ break;
+ case lang_group_statement_enum:
+ lang_gc_sections_1 (s->group_statement.children.head);
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+static void
+lang_gc_sections (void)
+{
+ /* Keep all sections so marked in the link script. */
+
+ lang_gc_sections_1 (statement_list.head);
+
+ /* SEC_EXCLUDE is ignored when doing a relocatable link, except in
+ the special case of debug info. (See bfd/stabs.c)
+ Twiddle the flag here, to simplify later linker code. */
+ if (link_info.relocatable)
+ {
+ LANG_FOR_EACH_INPUT_STATEMENT (f)
+ {
+ asection *sec;
+ for (sec = f->the_bfd->sections; sec != NULL; sec = sec->next)
+ if ((sec->flags & SEC_DEBUGGING) == 0)
+ sec->flags &= ~SEC_EXCLUDE;
+ }
+ }
+
+ if (link_info.gc_sections)
+ bfd_gc_sections (link_info.output_bfd, &link_info);
+}
+
+/* Worker for lang_find_relro_sections_1. */
+
+static void
+find_relro_section_callback (lang_wild_statement_type *ptr ATTRIBUTE_UNUSED,
+ struct wildcard_list *sec ATTRIBUTE_UNUSED,
+ asection *section,
+ lang_input_statement_type *file ATTRIBUTE_UNUSED,
+ void *data)
+{
+ /* Discarded, excluded and ignored sections effectively have zero
+ size. */
+ if (section->output_section != NULL
+ && section->output_section->owner == link_info.output_bfd
+ && (section->output_section->flags & SEC_EXCLUDE) == 0
+ && !IGNORE_SECTION (section)
+ && section->size != 0)
+ {
+ bfd_boolean *has_relro_section = (bfd_boolean *) data;
+ *has_relro_section = TRUE;
+ }
+}
+
+/* Iterate over sections for relro sections. */
+
+static void
+lang_find_relro_sections_1 (lang_statement_union_type *s,
+ bfd_boolean *has_relro_section)
+{
+ if (*has_relro_section)
+ return;
+
+ for (; s != NULL; s = s->header.next)
+ {
+ if (s == expld.dataseg.relro_end_stat)
+ break;
+
+ switch (s->header.type)
+ {
+ case lang_wild_statement_enum:
+ walk_wild (&s->wild_statement,
+ find_relro_section_callback,
+ has_relro_section);
+ break;
+ case lang_constructors_statement_enum:
+ lang_find_relro_sections_1 (constructor_list.head,
+ has_relro_section);
+ break;
+ case lang_output_section_statement_enum:
+ lang_find_relro_sections_1 (s->output_section_statement.children.head,
+ has_relro_section);
+ break;
+ case lang_group_statement_enum:
+ lang_find_relro_sections_1 (s->group_statement.children.head,
+ has_relro_section);
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+static void
+lang_find_relro_sections (void)
+{
+ bfd_boolean has_relro_section = FALSE;
+
+ /* Check all sections in the link script. */
+
+ lang_find_relro_sections_1 (expld.dataseg.relro_start_stat,
+ &has_relro_section);
+
+ if (!has_relro_section)
+ link_info.relro = FALSE;
+}
+
+/* Relax all sections until bfd_relax_section gives up. */
+
+void
+lang_relax_sections (bfd_boolean need_layout)
+{
+ if (RELAXATION_ENABLED)
+ {
+ /* We may need more than one relaxation pass. */
+ int i = link_info.relax_pass;
+
+ /* The backend can use it to determine the current pass. */
+ link_info.relax_pass = 0;
+
+ while (i--)
+ {
+ /* Keep relaxing until bfd_relax_section gives up. */
+ bfd_boolean relax_again;
+
+ link_info.relax_trip = -1;
+ do
+ {
+ link_info.relax_trip++;
+
+ /* Note: pe-dll.c does something like this also. If you find
+ you need to change this code, you probably need to change
+ pe-dll.c also. DJ */
+
+ /* Do all the assignments with our current guesses as to
+ section sizes. */
+ lang_do_assignments ();
+
+ /* We must do this after lang_do_assignments, because it uses
+ size. */
+ lang_reset_memory_regions ();
+
+ /* Perform another relax pass - this time we know where the
+ globals are, so can make a better guess. */
+ relax_again = FALSE;
+ lang_size_sections (&relax_again, FALSE);
+ }
+ while (relax_again);
+
+ link_info.relax_pass++;
+ }
+ need_layout = TRUE;
+ }
+
+ if (need_layout)
+ {
+ /* Final extra sizing to report errors. */
+ lang_do_assignments ();
+ lang_reset_memory_regions ();
+ lang_size_sections (NULL, TRUE);
+ }
+}
+
+void
+lang_process (void)
+{
+ /* Finalize dynamic list. */
+ if (link_info.dynamic_list)
+ lang_finalize_version_expr_head (&link_info.dynamic_list->head);
+
+ current_target = default_target;
+
+ /* Open the output file. */
+ lang_for_each_statement (ldlang_open_output);
+ init_opb ();
+
+ ldemul_create_output_section_statements ();
+
+ /* Add to the hash table all undefineds on the command line. */
+ lang_place_undefineds ();
+ lang_place_defineds ();
+
+ if (!bfd_section_already_linked_table_init ())
+ einfo (_("%P%F: Failed to create hash table\n"));
+
+ /* Create a bfd for each input file. */
+ current_target = default_target;
+ open_input_bfds (statement_list.head, FALSE);
+
+#ifdef ENABLE_PLUGINS
+ {
+ union lang_statement_union **listend;
+ /* Now all files are read, let the plugin(s) decide if there
+ are any more to be added to the link before we call the
+ emulation's after_open hook. */
+ listend = statement_list.tail;
+ ASSERT (!*listend);
+ if (plugin_call_all_symbols_read ())
+ einfo (_("%P%F: %s: plugin reported error after all symbols read\n"),
+ plugin_error_plugin ());
+ /* If any new files were added, they will be on the end of the
+ statement list, and we can open them now by getting open_input_bfds
+ to carry on from where it ended last time. */
+ if (*listend)
+ open_input_bfds (*listend, FALSE);
+ }
+#endif /* ENABLE_PLUGINS */
+
+ link_info.gc_sym_list = &entry_symbol;
+ if (entry_symbol.name == NULL)
+ link_info.gc_sym_list = ldlang_undef_chain_list_head;
+
+ ldemul_after_open ();
+
+ bfd_section_already_linked_table_free ();
+
+ /* Make sure that we're not mixing architectures. We call this
+ after all the input files have been opened, but before we do any
+ other processing, so that any operations merge_private_bfd_data
+ does on the output file will be known during the rest of the
+ link. */
+ lang_check ();
+
+ /* Handle .exports instead of a version script if we're told to do so. */
+ if (command_line.version_exports_section)
+ lang_do_version_exports_section ();
+
+ /* Build all sets based on the information gathered from the input
+ files. */
+ ldctor_build_sets ();
+
+ /* Remove unreferenced sections if asked to. */
+ lang_gc_sections ();
+
+ /* Size up the common data. */
+ lang_common ();
+
+ /* Update wild statements. */
+ update_wild_statements (statement_list.head);
+
+ /* Run through the contours of the script and attach input sections
+ to the correct output sections. */
+ map_input_to_output_sections (statement_list.head, NULL, NULL);
+
+ process_insert_statements ();
+
+ /* Find any sections not attached explicitly and handle them. */
+ lang_place_orphans ();
+
+ if (! link_info.relocatable)
+ {
+ asection *found;
+
+ /* Merge SEC_MERGE sections. This has to be done after GC of
+ sections, so that GCed sections are not merged, but before
+ assigning dynamic symbols, since removing whole input sections
+ is hard then. */
+ bfd_merge_sections (link_info.output_bfd, &link_info);
+
+ /* Look for a text section and set the readonly attribute in it. */
+ found = bfd_get_section_by_name (link_info.output_bfd, ".text");
+
+ if (found != NULL)
+ {
+ if (config.text_read_only)
+ found->flags |= SEC_READONLY;
+ else
+ found->flags &= ~SEC_READONLY;
+ }
+ }
+
+ /* Do anything special before sizing sections. This is where ELF
+ and other back-ends size dynamic sections. */
+ ldemul_before_allocation ();
+
+ /* We must record the program headers before we try to fix the
+ section positions, since they will affect SIZEOF_HEADERS. */
+ lang_record_phdrs ();
+
+ /* Check relro sections. */
+ if (link_info.relro && ! link_info.relocatable)
+ lang_find_relro_sections ();
+
+ /* Size up the sections. */
+ lang_size_sections (NULL, ! RELAXATION_ENABLED);
+
+ /* See if anything special should be done now we know how big
+ everything is. This is where relaxation is done. */
+ ldemul_after_allocation ();
+
+ /* Fix any .startof. or .sizeof. symbols. */
+ lang_set_startof ();
+
+ /* Do all the assignments, now that we know the final resting places
+ of all the symbols. */
+
+ lang_do_assignments ();
+
+ ldemul_finish ();
+
+ /* Make sure that the section addresses make sense. */
+ if (command_line.check_section_addresses)
+ lang_check_section_addresses ();
+
+ lang_end ();
+}
+
+/* EXPORTED TO YACC */
+
+void
+lang_add_wild (struct wildcard_spec *filespec,
+ struct wildcard_list *section_list,
+ bfd_boolean keep_sections)
+{
+ struct wildcard_list *curr, *next;
+ lang_wild_statement_type *new_stmt;
+
+ /* Reverse the list as the parser puts it back to front. */
+ for (curr = section_list, section_list = NULL;
+ curr != NULL;
+ section_list = curr, curr = next)
+ {
+ if (curr->spec.name != NULL && strcmp (curr->spec.name, "COMMON") == 0)
+ placed_commons = TRUE;
+
+ next = curr->next;
+ curr->next = section_list;
+ }
+
+ if (filespec != NULL && filespec->name != NULL)
+ {
+ if (strcmp (filespec->name, "*") == 0)
+ filespec->name = NULL;
+ else if (! wildcardp (filespec->name))
+ lang_has_input_file = TRUE;
+ }
+
+ new_stmt = new_stat (lang_wild_statement, stat_ptr);
+ new_stmt->filename = NULL;
+ new_stmt->filenames_sorted = FALSE;
+ if (filespec != NULL)
+ {
+ new_stmt->filename = filespec->name;
+ new_stmt->filenames_sorted = filespec->sorted == by_name;
+ }
+ new_stmt->section_list = section_list;
+ new_stmt->keep_sections = keep_sections;
+ lang_list_init (&new_stmt->children);
+ analyze_walk_wild_section_handler (new_stmt);
+}
+
+void
+lang_section_start (const char *name, etree_type *address,
+ const segment_type *segment)
+{
+ lang_address_statement_type *ad;
+
+ ad = new_stat (lang_address_statement, stat_ptr);
+ ad->section_name = name;
+ ad->address = address;
+ ad->segment = segment;
+}
+
+/* Set the start symbol to NAME. CMDLINE is nonzero if this is called
+ because of a -e argument on the command line, or zero if this is
+ called by ENTRY in a linker script. Command line arguments take
+ precedence. */
+
+void
+lang_add_entry (const char *name, bfd_boolean cmdline)
+{
+ if (entry_symbol.name == NULL
+ || cmdline
+ || ! entry_from_cmdline)
+ {
+ entry_symbol.name = name;
+ entry_from_cmdline = cmdline;
+ }
+}
+
+/* Set the default start symbol to NAME. .em files should use this,
+ not lang_add_entry, to override the use of "start" if neither the
+ linker script nor the command line specifies an entry point. NAME
+ must be permanently allocated. */
+void
+lang_default_entry (const char *name)
+{
+ entry_symbol_default = name;
+}
+
+void
+lang_add_target (const char *name)
+{
+ lang_target_statement_type *new_stmt;
+
+ new_stmt = new_stat (lang_target_statement, stat_ptr);
+ new_stmt->target = name;
+}
+
+void
+lang_add_map (const char *name)
+{
+ while (*name)
+ {
+ switch (*name)
+ {
+ case 'F':
+ map_option_f = TRUE;
+ break;
+ }
+ name++;
+ }
+}
+
+void
+lang_add_fill (fill_type *fill)
+{
+ lang_fill_statement_type *new_stmt;
+
+ new_stmt = new_stat (lang_fill_statement, stat_ptr);
+ new_stmt->fill = fill;
+}
+
+void
+lang_add_data (int type, union etree_union *exp)
+{
+ lang_data_statement_type *new_stmt;
+
+ new_stmt = new_stat (lang_data_statement, stat_ptr);
+ new_stmt->exp = exp;
+ new_stmt->type = type;
+}
+
+/* Create a new reloc statement. RELOC is the BFD relocation type to
+ generate. HOWTO is the corresponding howto structure (we could
+ look this up, but the caller has already done so). SECTION is the
+ section to generate a reloc against, or NAME is the name of the
+ symbol to generate a reloc against. Exactly one of SECTION and
+ NAME must be NULL. ADDEND is an expression for the addend. */
+
+void
+lang_add_reloc (bfd_reloc_code_real_type reloc,
+ reloc_howto_type *howto,
+ asection *section,
+ const char *name,
+ union etree_union *addend)
+{
+ lang_reloc_statement_type *p = new_stat (lang_reloc_statement, stat_ptr);
+
+ p->reloc = reloc;
+ p->howto = howto;
+ p->section = section;
+ p->name = name;
+ p->addend_exp = addend;
+
+ p->addend_value = 0;
+ p->output_section = NULL;
+ p->output_offset = 0;
+}
+
+lang_assignment_statement_type *
+lang_add_assignment (etree_type *exp)
+{
+ lang_assignment_statement_type *new_stmt;
+
+ extern int parsing_defsym;
+ if (parsing_defsym)
+ ldlang_add_def (exp->assign.dst);
+
+ new_stmt = new_stat (lang_assignment_statement, stat_ptr);
+ new_stmt->exp = exp;
+ return new_stmt;
+}
+
+void
+lang_add_attribute (enum statement_enum attribute)
+{
+ new_statement (attribute, sizeof (lang_statement_header_type), stat_ptr);
+}
+
+void
+lang_startup (const char *name)
+{
+ if (startup_file != NULL)
+ {
+ einfo (_("%P%F: multiple STARTUP files\n"));
+ }
+ first_file->filename = name;
+ first_file->local_sym_name = name;
+ first_file->real = TRUE;
+
+ startup_file = name;
+}
+
+void
+lang_float (bfd_boolean maybe)
+{
+ lang_float_flag = maybe;
+}
+
+
+/* Work out the load- and run-time regions from a script statement, and
+ store them in *LMA_REGION and *REGION respectively.
+
+ MEMSPEC is the name of the run-time region, or the value of
+ DEFAULT_MEMORY_REGION if the statement didn't specify one.
+ LMA_MEMSPEC is the name of the load-time region, or null if the
+ statement didn't specify one.HAVE_LMA_P is TRUE if the statement
+ had an explicit load address.
+
+ It is an error to specify both a load region and a load address. */
+
+static void
+lang_get_regions (lang_memory_region_type **region,
+ lang_memory_region_type **lma_region,
+ const char *memspec,
+ const char *lma_memspec,
+ bfd_boolean have_lma,
+ bfd_boolean have_vma)
+{
+ *lma_region = lang_memory_region_lookup (lma_memspec, FALSE);
+
+ /* If no runtime region or VMA has been specified, but the load region
+ has been specified, then use the load region for the runtime region
+ as well. */
+ if (lma_memspec != NULL
+ && ! have_vma
+ && strcmp (memspec, DEFAULT_MEMORY_REGION) == 0)
+ *region = *lma_region;
+ else
+ *region = lang_memory_region_lookup (memspec, FALSE);
+
+ if (have_lma && lma_memspec != 0)
+ einfo (_("%X%P:%S: section has both a load address and a load region\n"));
+}
+
+void
+lang_leave_output_section_statement (fill_type *fill, const char *memspec,
+ lang_output_section_phdr_list *phdrs,
+ const char *lma_memspec)
+{
+ lang_get_regions (&current_section->region,
+ &current_section->lma_region,
+ memspec, lma_memspec,
+ current_section->load_base != NULL,
+ current_section->addr_tree != NULL);
+
+ /* If this section has no load region or base, but has the same
+ region as the previous section, then propagate the previous
+ section's load region. */
+
+ if (!current_section->lma_region && !current_section->load_base
+ && current_section->region == current_section->prev->region)
+ current_section->lma_region = current_section->prev->lma_region;
+
+ current_section->fill = fill;
+ current_section->phdrs = phdrs;
+ pop_stat_ptr ();
+}
+
+/* Create an absolute symbol with the given name with the value of the
+ address of first byte of the section named.
+
+ If the symbol already exists, then do nothing. */
+
+void
+lang_abs_symbol_at_beginning_of (const char *secname, const char *name)
+{
+ struct bfd_link_hash_entry *h;
+
+ h = bfd_link_hash_lookup (link_info.hash, name, TRUE, TRUE, TRUE);
+ if (h == NULL)
+ einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
+
+ if (h->type == bfd_link_hash_new
+ || h->type == bfd_link_hash_undefined)
+ {
+ asection *sec;
+
+ h->type = bfd_link_hash_defined;
+
+ sec = bfd_get_section_by_name (link_info.output_bfd, secname);
+ if (sec == NULL)
+ h->u.def.value = 0;
+ else
+ h->u.def.value = bfd_get_section_vma (link_info.output_bfd, sec);
+
+ h->u.def.section = bfd_abs_section_ptr;
+ }
+}
+
+/* Create an absolute symbol with the given name with the value of the
+ address of the first byte after the end of the section named.
+
+ If the symbol already exists, then do nothing. */
+
+void
+lang_abs_symbol_at_end_of (const char *secname, const char *name)
+{
+ struct bfd_link_hash_entry *h;
+
+ h = bfd_link_hash_lookup (link_info.hash, name, TRUE, TRUE, TRUE);
+ if (h == NULL)
+ einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
+
+ if (h->type == bfd_link_hash_new
+ || h->type == bfd_link_hash_undefined)
+ {
+ asection *sec;
+
+ h->type = bfd_link_hash_defined;
+
+ sec = bfd_get_section_by_name (link_info.output_bfd, secname);
+ if (sec == NULL)
+ h->u.def.value = 0;
+ else
+ h->u.def.value = (bfd_get_section_vma (link_info.output_bfd, sec)
+ + TO_ADDR (sec->size));
+
+ h->u.def.section = bfd_abs_section_ptr;
+ }
+}
+
+void
+lang_statement_append (lang_statement_list_type *list,
+ lang_statement_union_type *element,
+ lang_statement_union_type **field)
+{
+ *(list->tail) = element;
+ list->tail = field;
+}
+
+/* Set the output format type. -oformat overrides scripts. */
+
+void
+lang_add_output_format (const char *format,
+ const char *big,
+ const char *little,
+ int from_script)
+{
+ if (output_target == NULL || !from_script)
+ {
+ if (command_line.endian == ENDIAN_BIG
+ && big != NULL)
+ format = big;
+ else if (command_line.endian == ENDIAN_LITTLE
+ && little != NULL)
+ format = little;
+
+ output_target = format;
+ }
+}
+
+void
+lang_add_insert (const char *where, int is_before)
+{
+ lang_insert_statement_type *new_stmt;
+
+ new_stmt = new_stat (lang_insert_statement, stat_ptr);
+ new_stmt->where = where;
+ new_stmt->is_before = is_before;
+ saved_script_handle = previous_script_handle;
+}
+
+/* Enter a group. This creates a new lang_group_statement, and sets
+ stat_ptr to build new statements within the group. */
+
+void
+lang_enter_group (void)
+{
+ lang_group_statement_type *g;
+
+ g = new_stat (lang_group_statement, stat_ptr);
+ lang_list_init (&g->children);
+ push_stat_ptr (&g->children);
+}
+
+/* Leave a group. This just resets stat_ptr to start writing to the
+ regular list of statements again. Note that this will not work if
+ groups can occur inside anything else which can adjust stat_ptr,
+ but currently they can't. */
+
+void
+lang_leave_group (void)
+{
+ pop_stat_ptr ();
+}
+
+/* Add a new program header. This is called for each entry in a PHDRS
+ command in a linker script. */
+
+void
+lang_new_phdr (const char *name,
+ etree_type *type,
+ bfd_boolean filehdr,
+ bfd_boolean phdrs,
+ etree_type *at,
+ etree_type *flags)
+{
+ struct lang_phdr *n, **pp;
+ bfd_boolean hdrs;
+
+ n = (struct lang_phdr *) stat_alloc (sizeof (struct lang_phdr));
+ n->next = NULL;
+ n->name = name;
+ n->type = exp_get_value_int (type, 0, "program header type");
+ n->filehdr = filehdr;
+ n->phdrs = phdrs;
+ n->at = at;
+ n->flags = flags;
+
+ hdrs = n->type == 1 && (phdrs || filehdr);
+
+ for (pp = &lang_phdr_list; *pp != NULL; pp = &(*pp)->next)
+ if (hdrs
+ && (*pp)->type == 1
+ && !((*pp)->filehdr || (*pp)->phdrs))
+ {
+ einfo (_("%X%P:%S: PHDRS and FILEHDR are not supported when prior PT_LOAD headers lack them\n"));
+ hdrs = FALSE;
+ }
+
+ *pp = n;
+}
+
+/* Record the program header information in the output BFD. FIXME: We
+ should not be calling an ELF specific function here. */
+
+static void
+lang_record_phdrs (void)
+{
+ unsigned int alc;
+ asection **secs;
+ lang_output_section_phdr_list *last;
+ struct lang_phdr *l;
+ lang_output_section_statement_type *os;
+
+ alc = 10;
+ secs = (asection **) xmalloc (alc * sizeof (asection *));
+ last = NULL;
+
+ for (l = lang_phdr_list; l != NULL; l = l->next)
+ {
+ unsigned int c;
+ flagword flags;
+ bfd_vma at;
+
+ c = 0;
+ for (os = &lang_output_section_statement.head->output_section_statement;
+ os != NULL;
+ os = os->next)
+ {
+ lang_output_section_phdr_list *pl;
+
+ if (os->constraint < 0)
+ continue;
+
+ pl = os->phdrs;
+ if (pl != NULL)
+ last = pl;
+ else
+ {
+ if (os->sectype == noload_section
+ || os->bfd_section == NULL
+ || (os->bfd_section->flags & SEC_ALLOC) == 0)
+ continue;
+
+ /* Don't add orphans to PT_INTERP header. */
+ if (l->type == 3)
+ continue;
+
+ if (last == NULL)
+ {
+ lang_output_section_statement_type * tmp_os;
+
+ /* If we have not run across a section with a program
+ header assigned to it yet, then scan forwards to find
+ one. This prevents inconsistencies in the linker's
+ behaviour when a script has specified just a single
+ header and there are sections in that script which are
+ not assigned to it, and which occur before the first
+ use of that header. See here for more details:
+ http://sourceware.org/ml/binutils/2007-02/msg00291.html */
+ for (tmp_os = os; tmp_os; tmp_os = tmp_os->next)
+ if (tmp_os->phdrs)
+ {
+ last = tmp_os->phdrs;
+ break;
+ }
+ if (last == NULL)
+ einfo (_("%F%P: no sections assigned to phdrs\n"));
+ }
+ pl = last;
+ }
+
+ if (os->bfd_section == NULL)
+ continue;
+
+ for (; pl != NULL; pl = pl->next)
+ {
+ if (strcmp (pl->name, l->name) == 0)
+ {
+ if (c >= alc)
+ {
+ alc *= 2;
+ secs = (asection **) xrealloc (secs,
+ alc * sizeof (asection *));
+ }
+ secs[c] = os->bfd_section;
+ ++c;
+ pl->used = TRUE;
+ }
+ }
+ }
+
+ if (l->flags == NULL)
+ flags = 0;
+ else
+ flags = exp_get_vma (l->flags, 0, "phdr flags");
+
+ if (l->at == NULL)
+ at = 0;
+ else
+ at = exp_get_vma (l->at, 0, "phdr load address");
+
+ if (! bfd_record_phdr (link_info.output_bfd, l->type,
+ l->flags != NULL, flags, l->at != NULL,
+ at, l->filehdr, l->phdrs, c, secs))
+ einfo (_("%F%P: bfd_record_phdr failed: %E\n"));
+ }
+
+ free (secs);
+
+ /* Make sure all the phdr assignments succeeded. */
+ for (os = &lang_output_section_statement.head->output_section_statement;
+ os != NULL;
+ os = os->next)
+ {
+ lang_output_section_phdr_list *pl;
+
+ if (os->constraint < 0
+ || os->bfd_section == NULL)
+ continue;
+
+ for (pl = os->phdrs;
+ pl != NULL;
+ pl = pl->next)
+ if (! pl->used && strcmp (pl->name, "NONE") != 0)
+ einfo (_("%X%P: section `%s' assigned to non-existent phdr `%s'\n"),
+ os->name, pl->name);
+ }
+}
+
+/* Record a list of sections which may not be cross referenced. */
+
+void
+lang_add_nocrossref (lang_nocrossref_type *l)
+{
+ struct lang_nocrossrefs *n;
+
+ n = (struct lang_nocrossrefs *) xmalloc (sizeof *n);
+ n->next = nocrossref_list;
+ n->list = l;
+ nocrossref_list = n;
+
+ /* Set notice_all so that we get informed about all symbols. */
+ link_info.notice_all = TRUE;
+}
+
+/* Overlay handling. We handle overlays with some static variables. */
+
+/* The overlay virtual address. */
+static etree_type *overlay_vma;
+/* And subsection alignment. */
+static etree_type *overlay_subalign;
+
+/* An expression for the maximum section size seen so far. */
+static etree_type *overlay_max;
+
+/* A list of all the sections in this overlay. */
+
+struct overlay_list {
+ struct overlay_list *next;
+ lang_output_section_statement_type *os;
+};
+
+static struct overlay_list *overlay_list;
+
+/* Start handling an overlay. */
+
+void
+lang_enter_overlay (etree_type *vma_expr, etree_type *subalign)
+{
+ /* The grammar should prevent nested overlays from occurring. */
+ ASSERT (overlay_vma == NULL
+ && overlay_subalign == NULL
+ && overlay_max == NULL);
+
+ overlay_vma = vma_expr;
+ overlay_subalign = subalign;
+}
+
+/* Start a section in an overlay. We handle this by calling
+ lang_enter_output_section_statement with the correct VMA.
+ lang_leave_overlay sets up the LMA and memory regions. */
+
+void
+lang_enter_overlay_section (const char *name)
+{
+ struct overlay_list *n;
+ etree_type *size;
+
+ lang_enter_output_section_statement (name, overlay_vma, overlay_section,
+ 0, overlay_subalign, 0, 0);
+
+ /* If this is the first section, then base the VMA of future
+ sections on this one. This will work correctly even if `.' is
+ used in the addresses. */
+ if (overlay_list == NULL)
+ overlay_vma = exp_nameop (ADDR, name);
+
+ /* Remember the section. */
+ n = (struct overlay_list *) xmalloc (sizeof *n);
+ n->os = current_section;
+ n->next = overlay_list;
+ overlay_list = n;
+
+ size = exp_nameop (SIZEOF, name);
+
+ /* Arrange to work out the maximum section end address. */
+ if (overlay_max == NULL)
+ overlay_max = size;
+ else
+ overlay_max = exp_binop (MAX_K, overlay_max, size);
+}
+
+/* Finish a section in an overlay. There isn't any special to do
+ here. */
+
+void
+lang_leave_overlay_section (fill_type *fill,
+ lang_output_section_phdr_list *phdrs)
+{
+ const char *name;
+ char *clean, *s2;
+ const char *s1;
+ char *buf;
+
+ name = current_section->name;
+
+ /* For now, assume that DEFAULT_MEMORY_REGION is the run-time memory
+ region and that no load-time region has been specified. It doesn't
+ really matter what we say here, since lang_leave_overlay will
+ override it. */
+ lang_leave_output_section_statement (fill, DEFAULT_MEMORY_REGION, phdrs, 0);
+
+ /* Define the magic symbols. */
+
+ clean = (char *) xmalloc (strlen (name) + 1);
+ s2 = clean;
+ for (s1 = name; *s1 != '\0'; s1++)
+ if (ISALNUM (*s1) || *s1 == '_')
+ *s2++ = *s1;
+ *s2 = '\0';
+
+ buf = (char *) xmalloc (strlen (clean) + sizeof "__load_start_");
+ sprintf (buf, "__load_start_%s", clean);
+ lang_add_assignment (exp_provide (buf,
+ exp_nameop (LOADADDR, name),
+ FALSE));
+
+ buf = (char *) xmalloc (strlen (clean) + sizeof "__load_stop_");
+ sprintf (buf, "__load_stop_%s", clean);
+ lang_add_assignment (exp_provide (buf,
+ exp_binop ('+',
+ exp_nameop (LOADADDR, name),
+ exp_nameop (SIZEOF, name)),
+ FALSE));
+
+ free (clean);
+}
+
+/* Finish an overlay. If there are any overlay wide settings, this
+ looks through all the sections in the overlay and sets them. */
+
+void
+lang_leave_overlay (etree_type *lma_expr,
+ int nocrossrefs,
+ fill_type *fill,
+ const char *memspec,
+ lang_output_section_phdr_list *phdrs,
+ const char *lma_memspec)
+{
+ lang_memory_region_type *region;
+ lang_memory_region_type *lma_region;
+ struct overlay_list *l;
+ lang_nocrossref_type *nocrossref;
+
+ lang_get_regions (&region, &lma_region,
+ memspec, lma_memspec,
+ lma_expr != NULL, FALSE);
+
+ nocrossref = NULL;
+
+ /* After setting the size of the last section, set '.' to end of the
+ overlay region. */
+ if (overlay_list != NULL)
+ overlay_list->os->update_dot_tree
+ = exp_assop ('=', ".", exp_binop ('+', overlay_vma, overlay_max));
+
+ l = overlay_list;
+ while (l != NULL)
+ {
+ struct overlay_list *next;
+
+ if (fill != NULL && l->os->fill == NULL)
+ l->os->fill = fill;
+
+ l->os->region = region;
+ l->os->lma_region = lma_region;
+
+ /* The first section has the load address specified in the
+ OVERLAY statement. The rest are worked out from that.
+ The base address is not needed (and should be null) if
+ an LMA region was specified. */
+ if (l->next == 0)
+ {
+ l->os->load_base = lma_expr;
+ l->os->sectype = normal_section;
+ }
+ if (phdrs != NULL && l->os->phdrs == NULL)
+ l->os->phdrs = phdrs;
+
+ if (nocrossrefs)
+ {
+ lang_nocrossref_type *nc;
+
+ nc = (lang_nocrossref_type *) xmalloc (sizeof *nc);
+ nc->name = l->os->name;
+ nc->next = nocrossref;
+ nocrossref = nc;
+ }
+
+ next = l->next;
+ free (l);
+ l = next;
+ }
+
+ if (nocrossref != NULL)
+ lang_add_nocrossref (nocrossref);
+
+ overlay_vma = NULL;
+ overlay_list = NULL;
+ overlay_max = NULL;
+}
+
+/* Version handling. This is only useful for ELF. */
+
+/* This global variable holds the version tree that we build. */
+
+struct bfd_elf_version_tree *lang_elf_version_info;
+
+/* If PREV is NULL, return first version pattern matching particular symbol.
+ If PREV is non-NULL, return first version pattern matching particular
+ symbol after PREV (previously returned by lang_vers_match). */
+
+static struct bfd_elf_version_expr *
+lang_vers_match (struct bfd_elf_version_expr_head *head,
+ struct bfd_elf_version_expr *prev,
+ const char *sym)
+{
+ const char *cxx_sym = sym;
+ const char *java_sym = sym;
+ struct bfd_elf_version_expr *expr = NULL;
+
+ if (head->mask & BFD_ELF_VERSION_CXX_TYPE)
+ {
+ cxx_sym = cplus_demangle (sym, DMGL_PARAMS | DMGL_ANSI);
+ if (!cxx_sym)
+ cxx_sym = sym;
+ }
+ if (head->mask & BFD_ELF_VERSION_JAVA_TYPE)
+ {
+ java_sym = cplus_demangle (sym, DMGL_JAVA);
+ if (!java_sym)
+ java_sym = sym;
+ }
+
+ if (head->htab && (prev == NULL || prev->literal))
+ {
+ struct bfd_elf_version_expr e;
+
+ switch (prev ? prev->mask : 0)
+ {
+ case 0:
+ if (head->mask & BFD_ELF_VERSION_C_TYPE)
+ {
+ e.pattern = sym;
+ expr = (struct bfd_elf_version_expr *)
+ htab_find ((htab_t) head->htab, &e);
+ while (expr && strcmp (expr->pattern, sym) == 0)
+ if (expr->mask == BFD_ELF_VERSION_C_TYPE)
+ goto out_ret;
+ else
+ expr = expr->next;
+ }
+ /* Fallthrough */
+ case BFD_ELF_VERSION_C_TYPE:
+ if (head->mask & BFD_ELF_VERSION_CXX_TYPE)
+ {
+ e.pattern = cxx_sym;
+ expr = (struct bfd_elf_version_expr *)
+ htab_find ((htab_t) head->htab, &e);
+ while (expr && strcmp (expr->pattern, cxx_sym) == 0)
+ if (expr->mask == BFD_ELF_VERSION_CXX_TYPE)
+ goto out_ret;
+ else
+ expr = expr->next;
+ }
+ /* Fallthrough */
+ case BFD_ELF_VERSION_CXX_TYPE:
+ if (head->mask & BFD_ELF_VERSION_JAVA_TYPE)
+ {
+ e.pattern = java_sym;
+ expr = (struct bfd_elf_version_expr *)
+ htab_find ((htab_t) head->htab, &e);
+ while (expr && strcmp (expr->pattern, java_sym) == 0)
+ if (expr->mask == BFD_ELF_VERSION_JAVA_TYPE)
+ goto out_ret;
+ else
+ expr = expr->next;
+ }
+ /* Fallthrough */
+ default:
+ break;
+ }
+ }
+
+ /* Finally, try the wildcards. */
+ if (prev == NULL || prev->literal)
+ expr = head->remaining;
+ else
+ expr = prev->next;
+ for (; expr; expr = expr->next)
+ {
+ const char *s;
+
+ if (!expr->pattern)
+ continue;
+
+ if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
+ break;
+
+ if (expr->mask == BFD_ELF_VERSION_JAVA_TYPE)
+ s = java_sym;
+ else if (expr->mask == BFD_ELF_VERSION_CXX_TYPE)
+ s = cxx_sym;
+ else
+ s = sym;
+ if (fnmatch (expr->pattern, s, 0) == 0)
+ break;
+ }
+
+ out_ret:
+ if (cxx_sym != sym)
+ free ((char *) cxx_sym);
+ if (java_sym != sym)
+ free ((char *) java_sym);
+ return expr;
+}
+
+/* Return NULL if the PATTERN argument is a glob pattern, otherwise,
+ return a pointer to the symbol name with any backslash quotes removed. */
+
+static const char *
+realsymbol (const char *pattern)
+{
+ const char *p;
+ bfd_boolean changed = FALSE, backslash = FALSE;
+ char *s, *symbol = (char *) xmalloc (strlen (pattern) + 1);
+
+ for (p = pattern, s = symbol; *p != '\0'; ++p)
+ {
+ /* It is a glob pattern only if there is no preceding
+ backslash. */
+ if (backslash)
+ {
+ /* Remove the preceding backslash. */
+ *(s - 1) = *p;
+ backslash = FALSE;
+ changed = TRUE;
+ }
+ else
+ {
+ if (*p == '?' || *p == '*' || *p == '[')
+ {
+ free (symbol);
+ return NULL;
+ }
+
+ *s++ = *p;
+ backslash = *p == '\\';
+ }
+ }
+
+ if (changed)
+ {
+ *s = '\0';
+ return symbol;
+ }
+ else
+ {
+ free (symbol);
+ return pattern;
+ }
+}
+
+/* This is called for each variable name or match expression. NEW_NAME is
+ the name of the symbol to match, or, if LITERAL_P is FALSE, a glob
+ pattern to be matched against symbol names. */
+
+struct bfd_elf_version_expr *
+lang_new_vers_pattern (struct bfd_elf_version_expr *orig,
+ const char *new_name,
+ const char *lang,
+ bfd_boolean literal_p)
+{
+ struct bfd_elf_version_expr *ret;
+
+ ret = (struct bfd_elf_version_expr *) xmalloc (sizeof *ret);
+ ret->next = orig;
+ ret->symver = 0;
+ ret->script = 0;
+ ret->literal = TRUE;
+ ret->pattern = literal_p ? new_name : realsymbol (new_name);
+ if (ret->pattern == NULL)
+ {
+ ret->pattern = new_name;
+ ret->literal = FALSE;
+ }
+
+ if (lang == NULL || strcasecmp (lang, "C") == 0)
+ ret->mask = BFD_ELF_VERSION_C_TYPE;
+ else if (strcasecmp (lang, "C++") == 0)
+ ret->mask = BFD_ELF_VERSION_CXX_TYPE;
+ else if (strcasecmp (lang, "Java") == 0)
+ ret->mask = BFD_ELF_VERSION_JAVA_TYPE;
+ else
+ {
+ einfo (_("%X%P: unknown language `%s' in version information\n"),
+ lang);
+ ret->mask = BFD_ELF_VERSION_C_TYPE;
+ }
+
+ return ldemul_new_vers_pattern (ret);
+}
+
+/* This is called for each set of variable names and match
+ expressions. */
+
+struct bfd_elf_version_tree *
+lang_new_vers_node (struct bfd_elf_version_expr *globals,
+ struct bfd_elf_version_expr *locals)
+{
+ struct bfd_elf_version_tree *ret;
+
+ ret = (struct bfd_elf_version_tree *) xcalloc (1, sizeof *ret);
+ ret->globals.list = globals;
+ ret->locals.list = locals;
+ ret->match = lang_vers_match;
+ ret->name_indx = (unsigned int) -1;
+ return ret;
+}
+
+/* This static variable keeps track of version indices. */
+
+static int version_index;
+
+static hashval_t
+version_expr_head_hash (const void *p)
+{
+ const struct bfd_elf_version_expr *e =
+ (const struct bfd_elf_version_expr *) p;
+
+ return htab_hash_string (e->pattern);
+}
+
+static int
+version_expr_head_eq (const void *p1, const void *p2)
+{
+ const struct bfd_elf_version_expr *e1 =
+ (const struct bfd_elf_version_expr *) p1;
+ const struct bfd_elf_version_expr *e2 =
+ (const struct bfd_elf_version_expr *) p2;
+
+ return strcmp (e1->pattern, e2->pattern) == 0;
+}
+
+static void
+lang_finalize_version_expr_head (struct bfd_elf_version_expr_head *head)
+{
+ size_t count = 0;
+ struct bfd_elf_version_expr *e, *next;
+ struct bfd_elf_version_expr **list_loc, **remaining_loc;
+
+ for (e = head->list; e; e = e->next)
+ {
+ if (e->literal)
+ count++;
+ head->mask |= e->mask;
+ }
+
+ if (count)
+ {
+ head->htab = htab_create (count * 2, version_expr_head_hash,
+ version_expr_head_eq, NULL);
+ list_loc = &head->list;
+ remaining_loc = &head->remaining;
+ for (e = head->list; e; e = next)
+ {
+ next = e->next;
+ if (!e->literal)
+ {
+ *remaining_loc = e;
+ remaining_loc = &e->next;
+ }
+ else
+ {
+ void **loc = htab_find_slot ((htab_t) head->htab, e, INSERT);
+
+ if (*loc)
+ {
+ struct bfd_elf_version_expr *e1, *last;
+
+ e1 = (struct bfd_elf_version_expr *) *loc;
+ last = NULL;
+ do
+ {
+ if (e1->mask == e->mask)
+ {
+ last = NULL;
+ break;
+ }
+ last = e1;
+ e1 = e1->next;
+ }
+ while (e1 && strcmp (e1->pattern, e->pattern) == 0);
+
+ if (last == NULL)
+ {
+ /* This is a duplicate. */
+ /* FIXME: Memory leak. Sometimes pattern is not
+ xmalloced alone, but in larger chunk of memory. */
+ /* free (e->pattern); */
+ free (e);
+ }
+ else
+ {
+ e->next = last->next;
+ last->next = e;
+ }
+ }
+ else
+ {
+ *loc = e;
+ *list_loc = e;
+ list_loc = &e->next;
+ }
+ }
+ }
+ *remaining_loc = NULL;
+ *list_loc = head->remaining;
+ }
+ else
+ head->remaining = head->list;
+}
+
+/* This is called when we know the name and dependencies of the
+ version. */
+
+void
+lang_register_vers_node (const char *name,
+ struct bfd_elf_version_tree *version,
+ struct bfd_elf_version_deps *deps)
+{
+ struct bfd_elf_version_tree *t, **pp;
+ struct bfd_elf_version_expr *e1;
+
+ if (name == NULL)
+ name = "";
+
+ if ((name[0] == '\0' && lang_elf_version_info != NULL)
+ || (lang_elf_version_info && lang_elf_version_info->name[0] == '\0'))
+ {
+ einfo (_("%X%P: anonymous version tag cannot be combined"
+ " with other version tags\n"));
+ free (version);
+ return;
+ }
+
+ /* Make sure this node has a unique name. */
+ for (t = lang_elf_version_info; t != NULL; t = t->next)
+ if (strcmp (t->name, name) == 0)
+ einfo (_("%X%P: duplicate version tag `%s'\n"), name);
+
+ lang_finalize_version_expr_head (&version->globals);
+ lang_finalize_version_expr_head (&version->locals);
+
+ /* Check the global and local match names, and make sure there
+ aren't any duplicates. */
+
+ for (e1 = version->globals.list; e1 != NULL; e1 = e1->next)
+ {
+ for (t = lang_elf_version_info; t != NULL; t = t->next)
+ {
+ struct bfd_elf_version_expr *e2;
+
+ if (t->locals.htab && e1->literal)
+ {
+ e2 = (struct bfd_elf_version_expr *)
+ htab_find ((htab_t) t->locals.htab, e1);
+ while (e2 && strcmp (e1->pattern, e2->pattern) == 0)
+ {
+ if (e1->mask == e2->mask)
+ einfo (_("%X%P: duplicate expression `%s'"
+ " in version information\n"), e1->pattern);
+ e2 = e2->next;
+ }
+ }
+ else if (!e1->literal)
+ for (e2 = t->locals.remaining; e2 != NULL; e2 = e2->next)
+ if (strcmp (e1->pattern, e2->pattern) == 0
+ && e1->mask == e2->mask)
+ einfo (_("%X%P: duplicate expression `%s'"
+ " in version information\n"), e1->pattern);
+ }
+ }
+
+ for (e1 = version->locals.list; e1 != NULL; e1 = e1->next)
+ {
+ for (t = lang_elf_version_info; t != NULL; t = t->next)
+ {
+ struct bfd_elf_version_expr *e2;
+
+ if (t->globals.htab && e1->literal)
+ {
+ e2 = (struct bfd_elf_version_expr *)
+ htab_find ((htab_t) t->globals.htab, e1);
+ while (e2 && strcmp (e1->pattern, e2->pattern) == 0)
+ {
+ if (e1->mask == e2->mask)
+ einfo (_("%X%P: duplicate expression `%s'"
+ " in version information\n"),
+ e1->pattern);
+ e2 = e2->next;
+ }
+ }
+ else if (!e1->literal)
+ for (e2 = t->globals.remaining; e2 != NULL; e2 = e2->next)
+ if (strcmp (e1->pattern, e2->pattern) == 0
+ && e1->mask == e2->mask)
+ einfo (_("%X%P: duplicate expression `%s'"
+ " in version information\n"), e1->pattern);
+ }
+ }
+
+ version->deps = deps;
+ version->name = name;
+ if (name[0] != '\0')
+ {
+ ++version_index;
+ version->vernum = version_index;
+ }
+ else
+ version->vernum = 0;
+
+ for (pp = &lang_elf_version_info; *pp != NULL; pp = &(*pp)->next)
+ ;
+ *pp = version;
+}
+
+/* This is called when we see a version dependency. */
+
+struct bfd_elf_version_deps *
+lang_add_vers_depend (struct bfd_elf_version_deps *list, const char *name)
+{
+ struct bfd_elf_version_deps *ret;
+ struct bfd_elf_version_tree *t;
+
+ ret = (struct bfd_elf_version_deps *) xmalloc (sizeof *ret);
+ ret->next = list;
+
+ for (t = lang_elf_version_info; t != NULL; t = t->next)
+ {
+ if (strcmp (t->name, name) == 0)
+ {
+ ret->version_needed = t;
+ return ret;
+ }
+ }
+
+ einfo (_("%X%P: unable to find version dependency `%s'\n"), name);
+
+ ret->version_needed = NULL;
+ return ret;
+}
+
+static void
+lang_do_version_exports_section (void)
+{
+ struct bfd_elf_version_expr *greg = NULL, *lreg;
+
+ LANG_FOR_EACH_INPUT_STATEMENT (is)
+ {
+ asection *sec = bfd_get_section_by_name (is->the_bfd, ".exports");
+ char *contents, *p;
+ bfd_size_type len;
+
+ if (sec == NULL)
+ continue;
+
+ len = sec->size;
+ contents = (char *) xmalloc (len);
+ if (!bfd_get_section_contents (is->the_bfd, sec, contents, 0, len))
+ einfo (_("%X%P: unable to read .exports section contents\n"), sec);
+
+ p = contents;
+ while (p < contents + len)
+ {
+ greg = lang_new_vers_pattern (greg, p, NULL, FALSE);
+ p = strchr (p, '\0') + 1;
+ }
+
+ /* Do not free the contents, as we used them creating the regex. */
+
+ /* Do not include this section in the link. */
+ sec->flags |= SEC_EXCLUDE | SEC_KEEP;
+ }
+
+ lreg = lang_new_vers_pattern (NULL, "*", NULL, FALSE);
+ lang_register_vers_node (command_line.version_exports_section,
+ lang_new_vers_node (greg, lreg), NULL);
+}
+
+void
+lang_add_unique (const char *name)
+{
+ struct unique_sections *ent;
+
+ for (ent = unique_section_list; ent; ent = ent->next)
+ if (strcmp (ent->name, name) == 0)
+ return;
+
+ ent = (struct unique_sections *) xmalloc (sizeof *ent);
+ ent->name = xstrdup (name);
+ ent->next = unique_section_list;
+ unique_section_list = ent;
+}
+
+/* Append the list of dynamic symbols to the existing one. */
+
+void
+lang_append_dynamic_list (struct bfd_elf_version_expr *dynamic)
+{
+ if (link_info.dynamic_list)
+ {
+ struct bfd_elf_version_expr *tail;
+ for (tail = dynamic; tail->next != NULL; tail = tail->next)
+ ;
+ tail->next = link_info.dynamic_list->head.list;
+ link_info.dynamic_list->head.list = dynamic;
+ }
+ else
+ {
+ struct bfd_elf_dynamic_list *d;
+
+ d = (struct bfd_elf_dynamic_list *) xcalloc (1, sizeof *d);
+ d->head.list = dynamic;
+ d->match = lang_vers_match;
+ link_info.dynamic_list = d;
+ }
+}
+
+/* Append the list of C++ typeinfo dynamic symbols to the existing
+ one. */
+
+void
+lang_append_dynamic_list_cpp_typeinfo (void)
+{
+ const char * symbols [] =
+ {
+ "typeinfo name for*",
+ "typeinfo for*"
+ };
+ struct bfd_elf_version_expr *dynamic = NULL;
+ unsigned int i;
+
+ for (i = 0; i < ARRAY_SIZE (symbols); i++)
+ dynamic = lang_new_vers_pattern (dynamic, symbols [i], "C++",
+ FALSE);
+
+ lang_append_dynamic_list (dynamic);
+}
+
+/* Append the list of C++ operator new and delete dynamic symbols to the
+ existing one. */
+
+void
+lang_append_dynamic_list_cpp_new (void)
+{
+ const char * symbols [] =
+ {
+ "operator new*",
+ "operator delete*"
+ };
+ struct bfd_elf_version_expr *dynamic = NULL;
+ unsigned int i;
+
+ for (i = 0; i < ARRAY_SIZE (symbols); i++)
+ dynamic = lang_new_vers_pattern (dynamic, symbols [i], "C++",
+ FALSE);
+
+ lang_append_dynamic_list (dynamic);
+}
diff --git a/binutils-2.21/ld/ldlang.h b/binutils-2.21/ld/ldlang.h
new file mode 100644
index 0000000..0b7b43b
--- /dev/null
+++ b/binutils-2.21/ld/ldlang.h
@@ -0,0 +1,653 @@
+/* ldlang.h - linker command language support
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+ Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef LDLANG_H
+#define LDLANG_H
+
+#define DEFAULT_MEMORY_REGION "*default*"
+
+typedef enum
+{
+ lang_input_file_is_l_enum,
+ lang_input_file_is_symbols_only_enum,
+ lang_input_file_is_marker_enum,
+ lang_input_file_is_fake_enum,
+ lang_input_file_is_search_file_enum,
+ lang_input_file_is_file_enum
+} lang_input_file_enum_type;
+
+struct _fill_type
+{
+ size_t size;
+ unsigned char data[1];
+};
+
+typedef struct statement_list
+{
+ union lang_statement_union * head;
+ union lang_statement_union ** tail;
+} lang_statement_list_type;
+
+typedef struct memory_region_name_struct
+{
+ const char * name;
+ struct memory_region_name_struct * next;
+} lang_memory_region_name;
+
+typedef struct memory_region_struct
+{
+ lang_memory_region_name name_list;
+ struct memory_region_struct *next;
+ bfd_vma origin;
+ bfd_size_type length;
+ bfd_vma current;
+ union lang_statement_union *last_os;
+ flagword flags;
+ flagword not_flags;
+ bfd_boolean had_full_message;
+} lang_memory_region_type;
+
+enum statement_enum
+{
+ lang_output_section_statement_enum,
+ lang_assignment_statement_enum,
+ lang_input_statement_enum,
+ lang_address_statement_enum,
+ lang_wild_statement_enum,
+ lang_input_section_enum,
+ lang_object_symbols_statement_enum,
+ lang_fill_statement_enum,
+ lang_data_statement_enum,
+ lang_reloc_statement_enum,
+ lang_target_statement_enum,
+ lang_output_statement_enum,
+ lang_padding_statement_enum,
+ lang_group_statement_enum,
+ lang_insert_statement_enum,
+ lang_constructors_statement_enum
+};
+
+typedef struct lang_statement_header_struct
+{
+ union lang_statement_union *next;
+ enum statement_enum type;
+} lang_statement_header_type;
+
+typedef struct
+{
+ lang_statement_header_type header;
+ union etree_union *exp;
+} lang_assignment_statement_type;
+
+typedef struct lang_target_statement_struct
+{
+ lang_statement_header_type header;
+ const char *target;
+} lang_target_statement_type;
+
+typedef struct lang_output_statement_struct
+{
+ lang_statement_header_type header;
+ const char *name;
+} lang_output_statement_type;
+
+/* Section types specified in a linker script. */
+
+enum section_type
+{
+ normal_section,
+ overlay_section,
+ noload_section,
+ noalloc_section
+};
+
+/* This structure holds a list of program headers describing
+ segments in which this section should be placed. */
+
+typedef struct lang_output_section_phdr_list
+{
+ struct lang_output_section_phdr_list *next;
+ const char *name;
+ bfd_boolean used;
+} lang_output_section_phdr_list;
+
+typedef struct lang_output_section_statement_struct
+{
+ lang_statement_header_type header;
+ lang_statement_list_type children;
+ struct lang_output_section_statement_struct *next;
+ struct lang_output_section_statement_struct *prev;
+ const char *name;
+ asection *bfd_section;
+ lang_memory_region_type *region;
+ lang_memory_region_type *lma_region;
+ fill_type *fill;
+ union etree_union *addr_tree;
+ union etree_union *load_base;
+
+ /* If non-null, an expression to evaluate after setting the section's
+ size. The expression is evaluated inside REGION (above) with '.'
+ set to the end of the section. Used in the last overlay section
+ to move '.' past all the overlaid sections. */
+ union etree_union *update_dot_tree;
+
+ lang_output_section_phdr_list *phdrs;
+
+ unsigned int block_value;
+ int subsection_alignment; /* Alignment of components. */
+ int section_alignment; /* Alignment of start of section. */
+ int constraint;
+ flagword flags;
+ enum section_type sectype;
+ unsigned int processed_vma : 1;
+ unsigned int processed_lma : 1;
+ unsigned int all_input_readonly : 1;
+ /* If this section should be ignored. */
+ unsigned int ignored : 1;
+ /* If there is a symbol relative to this section. */
+ unsigned int section_relative_symbol : 1;
+} lang_output_section_statement_type;
+
+typedef struct
+{
+ lang_statement_header_type header;
+} lang_common_statement_type;
+
+typedef struct
+{
+ lang_statement_header_type header;
+} lang_object_symbols_statement_type;
+
+typedef struct
+{
+ lang_statement_header_type header;
+ fill_type *fill;
+ int size;
+ asection *output_section;
+} lang_fill_statement_type;
+
+typedef struct
+{
+ lang_statement_header_type header;
+ unsigned int type;
+ union etree_union *exp;
+ bfd_vma value;
+ asection *output_section;
+ bfd_vma output_offset;
+} lang_data_statement_type;
+
+/* Generate a reloc in the output file. */
+
+typedef struct
+{
+ lang_statement_header_type header;
+
+ /* Reloc to generate. */
+ bfd_reloc_code_real_type reloc;
+
+ /* Reloc howto structure. */
+ reloc_howto_type *howto;
+
+ /* Section to generate reloc against.
+ Exactly one of section and name must be NULL. */
+ asection *section;
+
+ /* Name of symbol to generate reloc against.
+ Exactly one of section and name must be NULL. */
+ const char *name;
+
+ /* Expression for addend. */
+ union etree_union *addend_exp;
+
+ /* Resolved addend. */
+ bfd_vma addend_value;
+
+ /* Output section where reloc should be performed. */
+ asection *output_section;
+
+ /* Offset within output section. */
+ bfd_vma output_offset;
+} lang_reloc_statement_type;
+
+typedef struct lang_input_statement_struct
+{
+ lang_statement_header_type header;
+ /* Name of this file. */
+ const char *filename;
+ /* Name to use for the symbol giving address of text start.
+ Usually the same as filename, but for a file spec'd with
+ -l this is the -l switch itself rather than the filename. */
+ const char *local_sym_name;
+
+ bfd *the_bfd;
+
+ /* Point to the next file - whatever it is, wanders up and down
+ archives */
+ union lang_statement_union *next;
+
+ /* Point to the next file, but skips archive contents. */
+ union lang_statement_union *next_real_file;
+
+ const char *target;
+
+ unsigned int is_archive : 1;
+
+ /* 1 means search a set of directories for this file. */
+ unsigned int search_dirs_flag : 1;
+
+ /* 1 means this was found in a search directory marked as sysrooted,
+ if search_dirs_flag is false, otherwise, that it should be
+ searched in ld_sysroot before any other location, as long as it
+ starts with a slash. */
+ unsigned int sysrooted : 1;
+
+ /* 1 means this is base file of incremental load.
+ Do not load this file's text or data.
+ Also default text_start to after this file's bss. */
+ unsigned int just_syms_flag : 1;
+
+ /* Whether to search for this entry as a dynamic archive. */
+ unsigned int dynamic : 1;
+
+ /* Whether DT_NEEDED tags should be added for dynamic libraries in
+ DT_NEEDED tags from this entry. */
+ unsigned int add_DT_NEEDED_for_dynamic : 1;
+
+ /* Whether this entry should cause a DT_NEEDED tag only when
+ satisfying references from regular files, or always. */
+ unsigned int add_DT_NEEDED_for_regular : 1;
+
+ /* Whether to include the entire contents of an archive. */
+ unsigned int whole_archive : 1;
+
+ /* Set when bfd opening is successful. */
+ unsigned int loaded : 1;
+
+ unsigned int real : 1;
+
+ /* Set if the file does not exist. */
+ unsigned int missing_file : 1;
+
+ /* Set if the file was claimed by a plugin. */
+ unsigned int claimed : 1;
+
+} lang_input_statement_type;
+
+typedef struct
+{
+ lang_statement_header_type header;
+ asection *section;
+} lang_input_section_type;
+
+typedef struct lang_wild_statement_struct lang_wild_statement_type;
+
+typedef void (*callback_t) (lang_wild_statement_type *, struct wildcard_list *,
+ asection *, lang_input_statement_type *, void *);
+
+typedef void (*walk_wild_section_handler_t) (lang_wild_statement_type *,
+ lang_input_statement_type *,
+ callback_t callback,
+ void *data);
+
+typedef bfd_boolean (*lang_match_sec_type_func) (bfd *, const asection *,
+ bfd *, const asection *);
+
+/* Binary search tree structure to efficiently sort sections by
+ name. */
+typedef struct lang_section_bst
+{
+ asection *section;
+ struct lang_section_bst *left;
+ struct lang_section_bst *right;
+} lang_section_bst_type;
+
+struct lang_wild_statement_struct
+{
+ lang_statement_header_type header;
+ const char *filename;
+ bfd_boolean filenames_sorted;
+ struct wildcard_list *section_list;
+ bfd_boolean keep_sections;
+ lang_statement_list_type children;
+
+ walk_wild_section_handler_t walk_wild_section_handler;
+ struct wildcard_list *handler_data[4];
+ lang_section_bst_type *tree;
+};
+
+typedef struct lang_address_statement_struct
+{
+ lang_statement_header_type header;
+ const char *section_name;
+ union etree_union *address;
+ const segment_type *segment;
+} lang_address_statement_type;
+
+typedef struct
+{
+ lang_statement_header_type header;
+ bfd_vma output_offset;
+ size_t size;
+ asection *output_section;
+ fill_type *fill;
+} lang_padding_statement_type;
+
+/* A group statement collects a set of libraries together. The
+ libraries are searched multiple times, until no new undefined
+ symbols are found. The effect is to search a group of libraries as
+ though they were a single library. */
+
+typedef struct
+{
+ lang_statement_header_type header;
+ lang_statement_list_type children;
+} lang_group_statement_type;
+
+typedef struct
+{
+ lang_statement_header_type header;
+ const char *where;
+ bfd_boolean is_before;
+} lang_insert_statement_type;
+
+typedef union lang_statement_union
+{
+ lang_statement_header_type header;
+ lang_wild_statement_type wild_statement;
+ lang_data_statement_type data_statement;
+ lang_reloc_statement_type reloc_statement;
+ lang_address_statement_type address_statement;
+ lang_output_section_statement_type output_section_statement;
+ lang_assignment_statement_type assignment_statement;
+ lang_input_statement_type input_statement;
+ lang_target_statement_type target_statement;
+ lang_output_statement_type output_statement;
+ lang_input_section_type input_section;
+ lang_common_statement_type common_statement;
+ lang_object_symbols_statement_type object_symbols_statement;
+ lang_fill_statement_type fill_statement;
+ lang_padding_statement_type padding_statement;
+ lang_group_statement_type group_statement;
+ lang_insert_statement_type insert_statement;
+} lang_statement_union_type;
+
+/* This structure holds information about a program header, from the
+ PHDRS command in the linker script. */
+
+struct lang_phdr
+{
+ struct lang_phdr *next;
+ const char *name;
+ unsigned long type;
+ bfd_boolean filehdr;
+ bfd_boolean phdrs;
+ etree_type *at;
+ etree_type *flags;
+};
+
+extern struct lang_phdr *lang_phdr_list;
+
+/* This structure is used to hold a list of sections which may not
+ cross reference each other. */
+
+typedef struct lang_nocrossref
+{
+ struct lang_nocrossref *next;
+ const char *name;
+} lang_nocrossref_type;
+
+/* The list of nocrossref lists. */
+
+struct lang_nocrossrefs
+{
+ struct lang_nocrossrefs *next;
+ lang_nocrossref_type *list;
+};
+
+extern struct lang_nocrossrefs *nocrossref_list;
+
+/* This structure is used to hold a list of input section names which
+ will not match an output section in the linker script. */
+
+struct unique_sections
+{
+ struct unique_sections *next;
+ const char *name;
+};
+
+/* This structure records symbols for which we need to keep track of
+ definedness for use in the DEFINED () test. */
+
+struct lang_definedness_hash_entry
+{
+ struct bfd_hash_entry root;
+ int iteration;
+};
+
+/* Used by place_orphan to keep track of orphan sections and statements. */
+
+struct orphan_save
+{
+ const char *name;
+ flagword flags;
+ lang_output_section_statement_type *os;
+ asection **section;
+ lang_statement_union_type **stmt;
+ lang_output_section_statement_type **os_tail;
+};
+
+extern const char *output_target;
+extern lang_output_section_statement_type *abs_output_section;
+extern lang_statement_list_type lang_output_section_statement;
+extern bfd_boolean lang_has_input_file;
+extern etree_type *base;
+extern lang_statement_list_type *stat_ptr;
+extern bfd_boolean delete_output_file_on_failure;
+
+extern struct bfd_sym_chain entry_symbol;
+extern const char *entry_section;
+extern bfd_boolean entry_from_cmdline;
+extern lang_statement_list_type file_chain;
+extern lang_statement_list_type input_file_chain;
+
+extern int lang_statement_iteration;
+extern bfd_boolean missing_file;
+
+extern void lang_init
+ (void);
+extern void lang_finish
+ (void);
+extern lang_memory_region_type * lang_memory_region_lookup
+ (const char * const, bfd_boolean);
+extern void lang_memory_region_alias
+ (const char *, const char *);
+extern void lang_map
+ (void);
+extern void lang_set_flags
+ (lang_memory_region_type *, const char *, int);
+extern void lang_add_output
+ (const char *, int from_script);
+extern lang_output_section_statement_type *lang_enter_output_section_statement
+ (const char *output_section_statement_name,
+ etree_type *address_exp,
+ enum section_type sectype,
+ etree_type *align,
+ etree_type *subalign,
+ etree_type *, int);
+extern void lang_final
+ (void);
+extern void lang_relax_sections
+ (bfd_boolean);
+extern void lang_process
+ (void);
+extern void lang_section_start
+ (const char *, union etree_union *, const segment_type *);
+extern void lang_add_entry
+ (const char *, bfd_boolean);
+extern void lang_default_entry
+ (const char *);
+extern void lang_add_target
+ (const char *);
+extern void lang_add_wild
+ (struct wildcard_spec *, struct wildcard_list *, bfd_boolean);
+extern void lang_add_map
+ (const char *);
+extern void lang_add_fill
+ (fill_type *);
+extern lang_assignment_statement_type *lang_add_assignment
+ (union etree_union *);
+extern void lang_add_attribute
+ (enum statement_enum);
+extern void lang_startup
+ (const char *);
+extern void lang_float
+ (bfd_boolean);
+extern void lang_leave_output_section_statement
+ (fill_type *, const char *, lang_output_section_phdr_list *,
+ const char *);
+extern void lang_abs_symbol_at_end_of
+ (const char *, const char *);
+extern void lang_abs_symbol_at_beginning_of
+ (const char *, const char *);
+extern void lang_statement_append
+ (lang_statement_list_type *, lang_statement_union_type *,
+ lang_statement_union_type **);
+extern void lang_for_each_input_file
+ (void (*dothis) (lang_input_statement_type *));
+extern void lang_for_each_file
+ (void (*dothis) (lang_input_statement_type *));
+extern void lang_reset_memory_regions
+ (void);
+extern void lang_do_assignments
+ (void);
+
+#define LANG_FOR_EACH_INPUT_STATEMENT(statement) \
+ lang_input_statement_type *statement; \
+ for (statement = (lang_input_statement_type *) file_chain.head; \
+ statement != (lang_input_statement_type *) NULL; \
+ statement = (lang_input_statement_type *) statement->next) \
+
+#define lang_output_section_find(NAME) \
+ lang_output_section_statement_lookup (NAME, 0, FALSE)
+
+extern void lang_process
+ (void);
+extern void ldlang_add_file
+ (lang_input_statement_type *);
+extern lang_output_section_statement_type *lang_output_section_find_by_flags
+ (const asection *, lang_output_section_statement_type **,
+ lang_match_sec_type_func);
+extern lang_output_section_statement_type *lang_insert_orphan
+ (asection *, const char *, int, lang_output_section_statement_type *,
+ struct orphan_save *, etree_type *, lang_statement_list_type *);
+extern lang_input_statement_type *lang_add_input_file
+ (const char *, lang_input_file_enum_type, const char *);
+extern void lang_add_keepsyms_file
+ (const char *);
+extern lang_output_section_statement_type *lang_output_section_statement_lookup
+ (const char *, int, bfd_boolean);
+extern lang_output_section_statement_type *next_matching_output_section_statement
+ (lang_output_section_statement_type *, int);
+extern void ldlang_add_undef
+ (const char *const, bfd_boolean);
+extern void lang_add_output_format
+ (const char *, const char *, const char *, int);
+extern void lang_list_init
+ (lang_statement_list_type *);
+extern void push_stat_ptr
+ (lang_statement_list_type *);
+extern void pop_stat_ptr
+ (void);
+extern void lang_add_data
+ (int type, union etree_union *);
+extern void lang_add_reloc
+ (bfd_reloc_code_real_type, reloc_howto_type *, asection *, const char *,
+ union etree_union *);
+extern void lang_for_each_statement
+ (void (*) (lang_statement_union_type *));
+extern void lang_for_each_statement_worker
+ (void (*) (lang_statement_union_type *), lang_statement_union_type *);
+extern void *stat_alloc
+ (size_t);
+extern void strip_excluded_output_sections
+ (void);
+extern void dprint_statement
+ (lang_statement_union_type *, int);
+extern void lang_size_sections
+ (bfd_boolean *, bfd_boolean);
+extern void one_lang_size_sections_pass
+ (bfd_boolean *, bfd_boolean);
+extern void lang_add_insert
+ (const char *, int);
+extern void lang_enter_group
+ (void);
+extern void lang_leave_group
+ (void);
+extern void lang_add_section
+ (lang_statement_list_type *, asection *,
+ lang_output_section_statement_type *);
+extern void lang_new_phdr
+ (const char *, etree_type *, bfd_boolean, bfd_boolean, etree_type *,
+ etree_type *);
+extern void lang_add_nocrossref
+ (lang_nocrossref_type *);
+extern void lang_enter_overlay
+ (etree_type *, etree_type *);
+extern void lang_enter_overlay_section
+ (const char *);
+extern void lang_leave_overlay_section
+ (fill_type *, lang_output_section_phdr_list *);
+extern void lang_leave_overlay
+ (etree_type *, int, fill_type *, const char *,
+ lang_output_section_phdr_list *, const char *);
+
+extern struct bfd_elf_version_tree *lang_elf_version_info;
+
+extern struct bfd_elf_version_expr *lang_new_vers_pattern
+ (struct bfd_elf_version_expr *, const char *, const char *, bfd_boolean);
+extern struct bfd_elf_version_tree *lang_new_vers_node
+ (struct bfd_elf_version_expr *, struct bfd_elf_version_expr *);
+extern struct bfd_elf_version_deps *lang_add_vers_depend
+ (struct bfd_elf_version_deps *, const char *);
+extern void lang_register_vers_node
+ (const char *, struct bfd_elf_version_tree *, struct bfd_elf_version_deps *);
+extern void lang_append_dynamic_list (struct bfd_elf_version_expr *);
+extern void lang_append_dynamic_list_cpp_typeinfo (void);
+extern void lang_append_dynamic_list_cpp_new (void);
+extern void lang_add_unique
+ (const char *);
+extern const char *lang_get_output_target
+ (void);
+extern void lang_track_definedness (const char *);
+extern int lang_symbol_definition_iteration (const char *);
+extern void lang_update_definedness
+ (const char *, struct bfd_link_hash_entry *);
+
+extern void add_excluded_libs (const char *);
+extern bfd_boolean load_symbols
+ (lang_input_statement_type *, lang_statement_list_type *);
+
+extern bfd_boolean
+ldlang_override_segment_assignment
+ (struct bfd_link_info *, bfd *, asection *, asection *, bfd_boolean);
+
+#endif
diff --git a/binutils-2.21/ld/ldlex-wrapper.c b/binutils-2.21/ld/ldlex-wrapper.c
new file mode 100644
index 0000000..ef2beba
--- /dev/null
+++ b/binutils-2.21/ld/ldlex-wrapper.c
@@ -0,0 +1,6 @@
+/* The flex output (ldlex.c) includes stdio.h before any of the C code
+ in ldlex.l. Make sure we include sysdep.h first, so that config.h
+ can select the correct value of things like _FILE_OFFSET_BITS and
+ _LARGE_FILES. */
+#include "sysdep.h"
+#include "ldlex.c"
diff --git a/binutils-2.21/ld/ldlex.c b/binutils-2.21/ld/ldlex.c
new file mode 100644
index 0000000..eb198d0
--- /dev/null
+++ b/binutils-2.21/ld/ldlex.c
@@ -0,0 +1,4215 @@
+
+#line 3 "ldlex.c"
+
+#define YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 35
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types.
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t;
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX (4294967295U)
+#endif
+
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else /* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif /* defined (__STDC__) */
+#endif /* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index. If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition. This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN (yy_start) = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state. The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START (((yy_start) - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart(yyin )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+extern yy_size_t yyleng;
+
+extern FILE *yyin, *yyout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+ #define YY_LESS_LINENO(n)
+
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ *yy_cp = (yy_hold_char); \
+ YY_RESTORE_YY_MORE_OFFSET \
+ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+ YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+ } \
+ while ( 0 )
+
+#define unput(c) yyunput( c, (yytext_ptr) )
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+ {
+ FILE *yy_input_file;
+
+ char *yy_ch_buf; /* input buffer */
+ char *yy_buf_pos; /* current position in input buffer */
+
+ /* Size of input buffer in bytes, not including room for EOB
+ * characters.
+ */
+ yy_size_t yy_buf_size;
+
+ /* Number of characters read into yy_ch_buf, not including EOB
+ * characters.
+ */
+ yy_size_t yy_n_chars;
+
+ /* Whether we "own" the buffer - i.e., we know we created it,
+ * and can realloc() it to grow it, and should free() it to
+ * delete it.
+ */
+ int yy_is_our_buffer;
+
+ /* Whether this is an "interactive" input source; if so, and
+ * if we're using stdio for input, then we want to use getc()
+ * instead of fread(), to make sure we stop fetching input after
+ * each newline.
+ */
+ int yy_is_interactive;
+
+ /* Whether we're considered to be at the beginning of a line.
+ * If so, '^' rules will be active on the next match, otherwise
+ * not.
+ */
+ int yy_at_bol;
+
+ int yy_bs_lineno; /**< The line count. */
+ int yy_bs_column; /**< The column count. */
+
+ /* Whether to try to fill the input buffer when we reach the
+ * end of it.
+ */
+ int yy_fill_buffer;
+
+ int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+ /* When an EOF's been seen but there's still some text to process
+ * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+ * shouldn't try reading from the input source any more. We might
+ * still have a bunch of tokens to match, though, because of
+ * possible backing-up.
+ *
+ * When we actually see the EOF, we change the status to "new"
+ * (via yyrestart()), so that the user can continue scanning by
+ * just pointing yyin at a new input file.
+ */
+#define YY_BUFFER_EOF_PENDING 2
+
+ };
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+ : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
+
+/* yy_hold_char holds the character lost when yytext is formed. */
+static char yy_hold_char;
+static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */
+yy_size_t yyleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 0; /* whether we need to initialize */
+static int yy_start = 0; /* start state number */
+
+/* Flag which is used to allow yywrap()'s to do buffer switches
+ * instead of setting up a fresh yyin. A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void yyrestart (FILE *input_file );
+void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer );
+YY_BUFFER_STATE yy_create_buffer (FILE *file,int size );
+void yy_delete_buffer (YY_BUFFER_STATE b );
+void yy_flush_buffer (YY_BUFFER_STATE b );
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer );
+void yypop_buffer_state (void );
+
+static void yyensure_buffer_stack (void );
+static void yy_load_buffer_state (void );
+static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file );
+
+#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
+
+YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size );
+YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str );
+YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len );
+
+void *yyalloc (yy_size_t );
+void *yyrealloc (void *,yy_size_t );
+void yyfree (void * );
+
+#define yy_new_buffer yy_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+ { \
+ if ( ! YY_CURRENT_BUFFER ){ \
+ yyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer(yyin,YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+ }
+
+#define yy_set_bol(at_bol) \
+ { \
+ if ( ! YY_CURRENT_BUFFER ){\
+ yyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer(yyin,YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+ }
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* Begin user sect3 */
+
+typedef unsigned char YY_CHAR;
+
+FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+
+typedef int yy_state_type;
+
+extern int yylineno;
+
+int yylineno = 1;
+
+extern char *yytext;
+#define yytext_ptr yytext
+
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
+static int yy_get_next_buffer (void );
+static void yy_fatal_error (yyconst char msg[] );
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+ (yytext_ptr) = yy_bp; \
+ yyleng = (size_t) (yy_cp - yy_bp); \
+ (yy_hold_char) = *yy_cp; \
+ *yy_cp = '\0'; \
+ (yy_c_buf_p) = yy_cp;
+
+#define YY_NUM_RULES 190
+#define YY_END_OF_BUFFER 191
+/* This struct is not used in this scanner,
+ but its presence is necessary. */
+struct yy_trans_info
+ {
+ flex_int32_t yy_verify;
+ flex_int32_t yy_nxt;
+ };
+static yyconst flex_int16_t yy_accept[1593] =
+ { 0,
+ 0, 0, 170, 170, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 191, 190,
+ 188, 173, 172, 32, 188, 170, 38, 29, 44, 43,
+ 34, 35, 28, 36, 170, 37, 8, 8, 45, 46,
+ 39, 40, 27, 33, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 10, 9, 170, 115, 113, 170,
+ 42, 30, 41, 31, 189, 173, 32, 189, 168, 38,
+ 29, 44, 43, 34, 35, 28, 36, 168, 37, 8,
+ 8, 45, 46, 39, 40, 27, 33, 168, 168, 168,
+
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 168, 168, 10, 9, 168, 168, 42, 30, 41, 31,
+ 166, 36, 166, 37, 8, 8, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 166, 166, 115, 113, 166,
+ 31, 4, 3, 2, 4, 5, 127, 32, 126, 165,
+ 34, 35, 28, 36, 165, 37, 8, 8, 45, 46,
+ 40, 33, 165, 165, 165, 165, 165, 165, 165, 165,
+ 165, 165, 165, 165, 10, 9, 165, 165, 165, 165,
+ 165, 165, 165, 165, 165, 165, 165, 31, 187, 185,
+
+ 186, 188, 180, 179, 174, 181, 182, 178, 178, 178,
+ 178, 183, 184, 173, 170, 15, 0, 171, 8, 26,
+ 24, 22, 20, 21, 1, 23, 8, 8, 170, 18,
+ 17, 14, 16, 19, 170, 170, 170, 170, 170, 119,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 25, 13, 15,
+ 168, 6, 22, 20, 21, 0, 1, 23, 8, 0,
+
+ 7, 7, 8, 7, 14, 168, 7, 7, 7, 168,
+ 168, 119, 7, 168, 168, 7, 168, 168, 168, 7,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 168, 168, 168, 168, 168, 168, 168, 7, 168, 166,
+ 8, 0, 23, 8, 0, 166, 166, 166, 166, 166,
+ 119, 166, 166, 166, 166, 166, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 166, 166, 166, 166, 4,
+
+ 4, 126, 126, 165, 6, 128, 22, 129, 165, 7,
+ 7, 7, 165, 165, 165, 7, 165, 7, 7, 165,
+ 165, 165, 165, 165, 165, 165, 165, 7, 165, 165,
+ 165, 7, 165, 7, 7, 165, 165, 165, 165, 165,
+ 165, 165, 165, 187, 186, 179, 178, 0, 178, 178,
+ 178, 11, 12, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 91, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 70, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 116, 114, 170, 8, 169, 8,
+ 168, 7, 168, 168, 168, 168, 168, 168, 168, 168,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 61,
+ 62, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 168, 168, 168, 168, 8, 167, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 166, 166, 166, 166, 91,
+ 166, 166, 166, 166, 166, 166, 166, 166, 166, 70,
+ 61, 166, 62, 166, 166, 166, 166, 166, 166, 166,
+
+ 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 166, 166, 166, 166, 116,
+ 114, 166, 4, 8, 165, 165, 165, 165, 165, 130,
+ 165, 165, 165, 165, 165, 165, 165, 165, 165, 165,
+ 165, 165, 165, 165, 165, 147, 165, 165, 165, 165,
+ 165, 165, 165, 165, 165, 165, 178, 178, 178, 170,
+ 58, 170, 170, 170, 170, 170, 52, 170, 98, 170,
+ 107, 170, 170, 170, 170, 170, 170, 170, 87, 170,
+ 170, 170, 170, 108, 170, 170, 170, 123, 170, 170,
+ 96, 170, 66, 170, 170, 170, 170, 170, 170, 170,
+
+ 170, 170, 94, 170, 170, 170, 170, 170, 170, 104,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 168,
+ 58, 168, 168, 168, 52, 168, 168, 107, 168, 168,
+ 168, 168, 168, 168, 108, 123, 168, 168, 66, 168,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 168, 166, 58, 166, 166, 166, 166, 166, 52, 166,
+ 98, 166, 107, 166, 166, 166, 166, 166, 166, 166,
+ 87, 166, 166, 166, 166, 108, 166, 166, 166, 123,
+ 166, 166, 96, 166, 66, 166, 166, 166, 166, 166,
+ 166, 166, 166, 166, 94, 166, 166, 166, 166, 166,
+
+ 166, 104, 166, 166, 166, 166, 166, 166, 166, 166,
+ 166, 165, 165, 165, 134, 142, 133, 165, 165, 144,
+ 137, 140, 165, 165, 145, 165, 165, 165, 165, 165,
+ 151, 159, 150, 165, 165, 162, 154, 157, 165, 165,
+ 163, 165, 165, 178, 178, 178, 170, 85, 54, 170,
+ 170, 170, 51, 170, 170, 170, 170, 106, 64, 170,
+ 170, 93, 170, 76, 170, 170, 75, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 118, 170,
+ 170, 170, 170, 170, 97, 170, 170, 170, 95, 170,
+ 170, 170, 170, 170, 170, 170, 168, 54, 168, 168,
+
+ 51, 168, 168, 168, 106, 168, 76, 168, 168, 168,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 168, 168, 166, 85, 54, 166, 166, 166, 51, 166,
+ 166, 166, 166, 106, 64, 166, 166, 93, 166, 76,
+ 166, 166, 75, 166, 166, 166, 166, 166, 166, 166,
+ 166, 166, 166, 166, 118, 166, 166, 166, 166, 166,
+ 97, 166, 166, 166, 95, 166, 166, 166, 166, 166,
+ 166, 166, 165, 135, 132, 165, 165, 144, 144, 139,
+ 165, 143, 165, 165, 152, 149, 165, 165, 162, 162,
+ 156, 165, 161, 165, 178, 178, 176, 170, 170, 63,
+
+ 170, 86, 170, 170, 170, 170, 170, 170, 65, 170,
+ 170, 170, 84, 53, 170, 47, 170, 170, 105, 170,
+ 49, 74, 170, 170, 170, 170, 170, 170, 71, 170,
+ 170, 170, 170, 92, 72, 170, 170, 170, 168, 168,
+ 63, 168, 168, 168, 168, 168, 168, 53, 168, 168,
+ 105, 168, 49, 168, 168, 168, 71, 168, 168, 168,
+ 168, 166, 166, 63, 166, 86, 166, 166, 166, 166,
+ 166, 166, 65, 166, 166, 166, 84, 53, 166, 47,
+ 166, 166, 105, 166, 49, 74, 166, 166, 166, 166,
+ 166, 166, 71, 166, 166, 166, 166, 92, 72, 166,
+
+ 166, 166, 165, 165, 65, 141, 138, 165, 165, 165,
+ 160, 158, 155, 165, 177, 175, 170, 60, 170, 170,
+ 170, 170, 170, 78, 170, 170, 117, 170, 170, 170,
+ 99, 170, 170, 101, 121, 170, 170, 170, 170, 170,
+ 170, 112, 88, 170, 50, 170, 170, 168, 60, 168,
+ 168, 168, 78, 168, 117, 168, 168, 168, 109, 121,
+ 168, 168, 112, 168, 168, 168, 166, 60, 166, 166,
+ 166, 166, 166, 78, 166, 166, 117, 166, 166, 166,
+ 99, 166, 166, 101, 121, 166, 166, 166, 166, 166,
+ 166, 112, 88, 166, 50, 166, 166, 165, 165, 165,
+
+ 165, 165, 165, 146, 170, 125, 170, 170, 170, 170,
+ 170, 170, 59, 170, 170, 170, 170, 170, 170, 170,
+ 83, 170, 170, 170, 120, 164, 170, 146, 168, 125,
+ 168, 168, 59, 168, 168, 168, 168, 168, 120, 164,
+ 168, 146, 166, 125, 166, 166, 166, 166, 166, 166,
+ 59, 166, 166, 166, 166, 166, 166, 166, 83, 166,
+ 166, 166, 120, 164, 166, 146, 131, 136, 164, 148,
+ 153, 77, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 77, 168, 168, 168, 168, 168, 168, 168, 168, 77,
+
+ 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 166, 166, 166, 170, 170,
+ 170, 170, 170, 170, 170, 110, 111, 170, 170, 170,
+ 170, 73, 170, 170, 170, 170, 170, 168, 168, 168,
+ 110, 111, 168, 168, 168, 168, 166, 166, 166, 166,
+ 166, 166, 166, 110, 111, 166, 166, 166, 166, 73,
+ 166, 166, 166, 166, 166, 170, 170, 170, 170, 170,
+ 170, 100, 90, 170, 170, 170, 170, 170, 170, 170,
+ 170, 168, 168, 100, 168, 168, 168, 168, 166, 166,
+ 166, 166, 166, 166, 100, 90, 166, 166, 166, 166,
+
+ 166, 166, 166, 166, 80, 170, 170, 124, 170, 170,
+ 170, 170, 48, 170, 170, 170, 102, 170, 168, 124,
+ 168, 168, 168, 168, 80, 166, 166, 124, 166, 166,
+ 166, 166, 48, 166, 166, 166, 102, 166, 170, 170,
+ 170, 170, 89, 170, 69, 170, 170, 170, 168, 168,
+ 69, 168, 168, 166, 166, 166, 166, 89, 166, 69,
+ 166, 166, 166, 170, 170, 170, 170, 170, 170, 122,
+ 68, 170, 67, 168, 168, 168, 122, 68, 67, 166,
+ 166, 166, 166, 166, 166, 122, 68, 166, 67, 170,
+ 170, 170, 170, 170, 170, 170, 168, 168, 168, 166,
+
+ 166, 166, 166, 166, 166, 166, 170, 170, 57, 170,
+ 170, 170, 170, 168, 57, 168, 166, 166, 57, 166,
+ 166, 166, 166, 170, 170, 170, 170, 170, 103, 168,
+ 168, 166, 166, 166, 166, 166, 103, 170, 55, 170,
+ 170, 170, 55, 168, 166, 55, 166, 166, 166, 170,
+ 170, 170, 170, 168, 166, 166, 166, 166, 170, 170,
+ 170, 170, 168, 166, 166, 166, 166, 79, 170, 170,
+ 170, 168, 79, 166, 166, 166, 56, 170, 170, 56,
+ 56, 166, 166, 81, 170, 81, 166, 170, 166, 82,
+ 82, 0
+
+ } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+ { 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
+ 1, 1, 2, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 4, 5, 6, 7, 8, 9, 1, 10,
+ 11, 12, 13, 14, 15, 16, 17, 18, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 20, 21, 22,
+ 23, 24, 25, 1, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
+ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, 1, 57, 58, 59, 60,
+
+ 61, 62, 63, 64, 65, 16, 66, 67, 68, 69,
+ 70, 71, 16, 72, 73, 74, 75, 16, 16, 76,
+ 16, 77, 78, 79, 80, 81, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1
+ } ;
+
+static yyconst flex_int32_t yy_meta[82] =
+ { 0,
+ 1, 1, 2, 3, 1, 1, 4, 1, 1, 1,
+ 1, 3, 5, 6, 7, 8, 9, 10, 10, 7,
+ 1, 1, 6, 1, 3, 10, 10, 10, 10, 10,
+ 10, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 7, 4, 7, 3, 8, 10, 10, 10, 10,
+ 10, 10, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 1, 1, 1,
+ 9
+ } ;
+
+static yyconst flex_int16_t yy_base[1617] =
+ { 0,
+ 0, 0, 0, 0, 81, 0, 162, 0, 243, 323,
+ 403, 0, 271, 273, 484, 565, 646, 727, 2517, 2518,
+ 2518, 2514, 2518, 2492, 2509, 791, 2518, 260, 2518, 2518,
+ 2490, 2489, 0, 2488, 0, 247, 321, 492, 0, 2518,
+ 249, 2487, 257, 0, 255, 257, 253, 259, 262, 268,
+ 2466, 2471, 2468, 2476, 274, 280, 279, 315, 317, 2459,
+ 2474, 350, 2477, 2472, 0, 0, 2443, 2439, 2427, 2433,
+ 2518, 237, 2518, 0, 2518, 2495, 2473, 2490, 836, 2518,
+ 343, 2518, 2518, 2471, 2470, 2518, 289, 0, 341, 881,
+ 306, 2518, 2518, 295, 2469, 344, 2518, 940, 487, 506,
+
+ 565, 577, 571, 2448, 2451, 2459, 333, 345, 346, 476,
+ 2445, 488, 2518, 2518, 644, 2422, 2518, 290, 2518, 0,
+ 999, 477, 0, 362, 735, 747, 596, 511, 477, 567,
+ 349, 515, 2443, 2448, 2445, 2453, 517, 573, 594, 589,
+ 596, 2436, 2451, 645, 2454, 2449, 2420, 2416, 2404, 2410,
+ 0, 1044, 2518, 2518, 0, 2518, 2518, 2451, 2470, 1089,
+ 2449, 2448, 2518, 2447, 0, 2446, 0, 323, 2518, 0,
+ 2445, 2518, 1134, 635, 666, 647, 667, 671, 519, 2441,
+ 2423, 2419, 482, 2421, 2518, 2518, 685, 730, 732, 694,
+ 754, 250, 2406, 2390, 2386, 320, 2388, 0, 2457, 2518,
+
+ 0, 2446, 2518, 0, 2518, 2518, 2518, 2437, 505, 534,
+ 610, 2518, 2518, 2454, 0, 0, 2450, 2518, 736, 2518,
+ 2518, 0, 0, 0, 0, 0, 757, 0, 0, 2431,
+ 2518, 0, 2518, 2430, 2408, 2422, 2405, 2415, 594, 0,
+ 2417, 2408, 2406, 2400, 501, 2414, 2398, 2411, 2411, 2395,
+ 568, 2402, 2398, 2394, 2396, 2398, 798, 2404, 2394, 487,
+ 2391, 2393, 2381, 686, 2392, 2394, 2382, 2396, 2396, 2384,
+ 2397, 2390, 730, 2381, 2369, 2376, 2388, 2371, 2390, 2388,
+ 2370, 2370, 2369, 2338, 2341, 2346, 2331, 2518, 2518, 2518,
+ 0, 1193, 2518, 2518, 2518, 0, 2518, 2518, 582, 809,
+
+ 0, 2518, 2518, 0, 2518, 842, 845, 889, 0, 2373,
+ 724, 0, 917, 2367, 2365, 679, 949, 976, 2374, 2375,
+ 2362, 669, 2371, 2361, 2373, 2349, 2358, 2347, 668, 2358,
+ 2360, 2363, 2352, 2359, 2339, 2359, 2361, 995, 2310, 0,
+ 1244, 0, 0, 884, 0, 2342, 2356, 2339, 2349, 742,
+ 0, 2351, 2342, 2340, 2334, 738, 2348, 2332, 2345, 2345,
+ 2329, 733, 2336, 2332, 2328, 2330, 2332, 802, 2338, 2328,
+ 716, 751, 2328, 2326, 2315, 900, 2326, 2328, 2316, 2330,
+ 2330, 2318, 2331, 2324, 806, 2315, 2303, 2310, 2322, 2305,
+ 2324, 2322, 2304, 2304, 2303, 2272, 2275, 2280, 2265, 0,
+
+ 1295, 2338, 2518, 0, 1346, 0, 0, 0, 833, 888,
+ 841, 0, 2306, 928, 937, 2305, 2309, 2292, 2293, 2291,
+ 2308, 2295, 2303, 2304, 2302, 2303, 2282, 854, 2262, 969,
+ 982, 2261, 2265, 2250, 2251, 2249, 2264, 2252, 2259, 2260,
+ 2258, 2259, 2240, 2312, 0, 0, 2293, 2292, 690, 836,
+ 617, 2518, 2518, 2271, 2267, 2279, 2276, 2277, 2267, 2265,
+ 2275, 2275, 2272, 2257, 2250, 2273, 2272, 2263, 2268, 2252,
+ 2257, 2263, 2255, 2265, 2262, 2243, 0, 2251, 2247, 2252,
+ 2239, 2254, 2242, 2250, 2252, 2248, 0, 2239, 2233, 2234,
+ 2239, 2235, 2224, 2241, 2231, 2228, 2227, 2222, 2239, 2233,
+
+ 2223, 2220, 2226, 2220, 2232, 2216, 2232, 2233, 2215, 2231,
+ 2219, 2223, 2210, 2183, 0, 0, 2191, 0, 0, 998,
+ 2211, 1004, 2218, 2219, 2209, 2218, 2218, 2201, 2194, 2217,
+ 1049, 2214, 2204, 2194, 2202, 2198, 2196, 2204, 2206, 0,
+ 0, 2189, 2190, 2192, 2181, 2198, 2186, 2181, 2189, 2196,
+ 2197, 2198, 2153, 2161, 0, 0, 2181, 2177, 2189, 2186,
+ 2187, 2177, 2175, 2185, 2185, 2182, 2167, 2160, 2183, 2182,
+ 2173, 2178, 2162, 2167, 2173, 2165, 2175, 2172, 2153, 0,
+ 2161, 2157, 2162, 2149, 2164, 2152, 2160, 2162, 2158, 0,
+ 0, 2149, 0, 2143, 2144, 2149, 2145, 2134, 2151, 2141,
+
+ 2138, 2137, 2132, 2149, 2143, 2133, 2130, 2136, 2130, 2142,
+ 2126, 2142, 2143, 2125, 2141, 2129, 2133, 2120, 2093, 0,
+ 0, 2101, 0, 0, 2121, 651, 2130, 2129, 2117, 0,
+ 2127, 2118, 2110, 2125, 2123, 2122, 2114, 2105, 2106, 2109,
+ 2077, 866, 2085, 2084, 2073, 0, 2082, 2074, 2067, 2080,
+ 2078, 2077, 2070, 2062, 2063, 2065, 592, 681, 585, 2096,
+ 0, 2089, 2092, 2087, 2099, 2085, 0, 2091, 0, 2081,
+ 0, 2080, 2068, 2084, 2077, 2071, 2074, 2076, 0, 2073,
+ 2087, 2075, 2069, 0, 2087, 2068, 2069, 0, 2066, 2084,
+ 0, 2066, 0, 2068, 2067, 2080, 2049, 2070, 2057, 2065,
+
+ 2057, 2066, 0, 2059, 2070, 2063, 2066, 2050, 2054, 2037,
+ 2058, 2062, 2045, 2052, 2054, 2057, 2052, 2018, 2014, 2046,
+ 0, 2043, 2038, 2050, 0, 2043, 2033, 0, 2021, 2037,
+ 2030, 2028, 2032, 2026, 0, 0, 2026, 2044, 0, 2029,
+ 2042, 2011, 2032, 2028, 2030, 2033, 2022, 2027, 2023, 1992,
+ 1988, 2020, 0, 2013, 2016, 2011, 2023, 2009, 0, 2015,
+ 0, 2005, 0, 2004, 1992, 2008, 2001, 1995, 1998, 2000,
+ 0, 1997, 2011, 1999, 1993, 0, 2011, 1992, 1993, 0,
+ 1990, 2000, 0, 1973, 0, 1966, 1956, 1957, 1923, 1942,
+ 1929, 1934, 1917, 1917, 0, 1901, 1907, 1885, 1888, 1872,
+
+ 238, 309, 359, 462, 511, 535, 648, 685, 685, 667,
+ 690, 745, 753, 760, 0, 0, 0, 769, 788, 1414,
+ 0, 0, 773, 802, 0, 792, 812, 774, 771, 788,
+ 0, 0, 0, 787, 804, 1494, 0, 0, 801, 811,
+ 0, 806, 824, 864, 933, 868, 846, 0, 861, 859,
+ 875, 883, 0, 949, 894, 904, 926, 0, 0, 931,
+ 924, 0, 923, 0, 953, 949, 0, 942, 955, 962,
+ 945, 964, 985, 983, 980, 976, 978, 1009, 0, 1008,
+ 999, 1010, 1004, 1006, 0, 1015, 1023, 1025, 0, 1006,
+ 1019, 1027, 1020, 1027, 994, 1015, 1033, 1040, 1036, 1052,
+
+ 0, 1058, 1041, 1057, 0, 1059, 0, 1060, 1057, 1062,
+ 1048, 1066, 1062, 1058, 1072, 1070, 1061, 1078, 1084, 1077,
+ 1037, 1051, 1068, 0, 1081, 1077, 1093, 1094, 0, 1099,
+ 1096, 1083, 1098, 0, 0, 1100, 1091, 0, 1075, 0,
+ 1103, 1099, 0, 1089, 1102, 1107, 1087, 1094, 1113, 1111,
+ 1107, 1104, 1099, 1119, 0, 1125, 1116, 1123, 1117, 1119,
+ 0, 1128, 1139, 1142, 0, 1123, 1136, 1145, 1128, 1135,
+ 1101, 1115, 1132, 0, 1141, 1141, 1136, 0, 1574, 0,
+ 1154, 0, 1158, 1110, 0, 1118, 1118, 1114, 0, 1654,
+ 0, 1130, 0, 1133, 1177, 1180, 1179, 1156, 1171, 0,
+
+ 1174, 0, 1166, 1160, 1151, 1178, 1180, 1183, 0, 1186,
+ 1185, 1171, 0, 0, 1188, 0, 1174, 1180, 0, 1195,
+ 0, 1171, 1178, 1200, 1176, 1177, 1195, 1190, 1180, 1187,
+ 1201, 1198, 1208, 0, 0, 1202, 1168, 1187, 1199, 1214,
+ 0, 1219, 1210, 1226, 1228, 1228, 1230, 0, 1235, 1221,
+ 0, 1235, 0, 1217, 1238, 1224, 1220, 1240, 1246, 1205,
+ 1225, 1238, 1253, 0, 1256, 0, 1247, 1241, 1232, 1259,
+ 1261, 1261, 0, 1264, 1263, 1249, 0, 0, 1266, 0,
+ 1252, 1252, 0, 1267, 0, 1243, 1250, 1277, 1252, 1253,
+ 1272, 1270, 1260, 1267, 1281, 1278, 1288, 0, 0, 1288,
+
+ 1254, 1273, 1285, 1292, 0, 0, 0, 1289, 1261, 1266,
+ 0, 0, 0, 1263, 1318, 1319, 1310, 0, 1311, 1297,
+ 1315, 1304, 1313, 0, 1290, 1307, 0, 1292, 1306, 1307,
+ 0, 1295, 1336, 0, 1302, 1333, 1331, 1322, 1312, 1336,
+ 1314, 0, 0, 1332, 0, 1317, 1315, 1350, 0, 1351,
+ 1338, 1353, 0, 1330, 0, 1344, 1345, 1333, 0, 1334,
+ 1335, 1359, 0, 1354, 1333, 1331, 1366, 0, 1367, 1353,
+ 1371, 1360, 1369, 0, 1346, 1369, 0, 1354, 1368, 1370,
+ 0, 1361, 1401, 0, 1365, 1403, 1401, 1387, 1377, 1401,
+ 1384, 0, 0, 1402, 0, 1381, 1379, 1414, 1416, 1416,
+
+ 1386, 1388, 1388, 0, 1421, 0, 1406, 1425, 1415, 1423,
+ 1417, 1428, 0, 1427, 1415, 1416, 1420, 1428, 1425, 1429,
+ 0, 1420, 1435, 1440, 0, 0, 1406, 0, 1439, 0,
+ 1432, 1440, 0, 1442, 1430, 1441, 1431, 1446, 0, 0,
+ 1416, 0, 1449, 0, 1435, 1454, 1444, 1452, 1446, 1457,
+ 0, 1456, 1444, 1445, 1449, 1457, 1454, 1463, 0, 1457,
+ 1477, 1483, 0, 0, 1449, 0, 0, 0, 0, 0,
+ 0, 0, 1471, 1477, 1483, 1480, 1482, 1481, 1492, 1484,
+ 1497, 1483, 1493, 1494, 1486, 1485, 1505, 1496, 1508, 1478,
+ 0, 1506, 1503, 1507, 1499, 1506, 1496, 1516, 1486, 0,
+
+ 1504, 1510, 1516, 1514, 1512, 1511, 1521, 1513, 1526, 1512,
+ 1522, 1523, 1515, 1514, 1534, 1525, 1537, 1507, 1522, 1536,
+ 1528, 1531, 1529, 1532, 1527, 0, 0, 1544, 1543, 1558,
+ 1563, 0, 1564, 1562, 1558, 1555, 1534, 1561, 1564, 1558,
+ 0, 0, 1574, 1578, 1576, 1546, 1564, 1578, 1570, 1573,
+ 1571, 1574, 1569, 0, 0, 1581, 1577, 1587, 1591, 0,
+ 1592, 1590, 1586, 1583, 1562, 1579, 1596, 1580, 1596, 1588,
+ 1590, 0, 0, 1604, 1602, 1588, 1590, 1604, 1603, 1606,
+ 1576, 1593, 1609, 0, 1611, 1598, 1612, 1582, 1600, 1617,
+ 1601, 1617, 1609, 1611, 0, 0, 1624, 1622, 1613, 1618,
+
+ 1637, 1637, 1640, 1610, 0, 1627, 1617, 0, 1618, 1640,
+ 1636, 1652, 0, 1638, 1641, 1646, 0, 1614, 1631, 0,
+ 1658, 1644, 1647, 1619, 0, 1647, 1637, 0, 1638, 1655,
+ 1651, 1667, 0, 1653, 1656, 1661, 0, 1629, 1646, 1677,
+ 1678, 1666, 0, 1667, 0, 1664, 1672, 1638, 1686, 1674,
+ 0, 1670, 1642, 1661, 1692, 1693, 1682, 0, 1684, 0,
+ 1680, 1687, 1653, 1683, 1691, 1691, 1701, 1699, 1681, 0,
+ 0, 1708, 0, 1702, 1701, 1711, 0, 0, 0, 1698,
+ 1706, 1705, 1715, 1709, 1691, 0, 0, 1718, 0, 1699,
+ 1716, 1722, 1715, 1716, 1728, 1716, 1722, 1728, 1721, 1709,
+
+ 1726, 1732, 1725, 1726, 1738, 1726, 1728, 1735, 0, 1725,
+ 1729, 1733, 1726, 1740, 0, 1730, 1736, 1743, 0, 1733,
+ 1737, 1741, 1734, 1753, 1742, 1742, 1755, 1747, 0, 1746,
+ 1746, 1760, 1749, 1749, 1762, 1754, 0, 1752, 0, 1737,
+ 1768, 1755, 0, 1740, 1757, 0, 1742, 1773, 1760, 1764,
+ 1772, 1758, 1776, 1775, 1769, 1777, 1763, 1781, 1766, 1772,
+ 1778, 1787, 1775, 1771, 1777, 1783, 1792, 0, 1790, 1780,
+ 1776, 1793, 0, 1794, 1784, 1780, 0, 1787, 1793, 0,
+ 0, 1789, 1795, 0, 1790, 0, 1791, 1793, 1794, 0,
+ 0, 2518, 1833, 1843, 1853, 1863, 1873, 1881, 1891, 1898,
+
+ 1905, 1912, 1922, 1929, 1939, 1949, 1959, 1962, 1970, 1977,
+ 1894, 1984, 1994, 2004, 2014, 2024
+ } ;
+
+static yyconst flex_int16_t yy_def[1617] =
+ { 0,
+ 1593, 1593, 1592, 3, 1592, 5, 1592, 7, 1594, 1594,
+ 1592, 11, 1595, 1595, 1596, 1596, 1597, 1597, 1592, 1592,
+ 1592, 1592, 1592, 1598, 1599, 1598, 1592, 1592, 1592, 1592,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1592,
+ 1592, 1598, 1592, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1592, 1592, 1592, 1598, 1592, 1592, 1592, 1599, 1600, 1592,
+ 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1600, 1600, 1592,
+ 90, 1592, 1592, 1592, 1592, 1592, 1592, 1600, 98, 98,
+
+ 98, 98, 98, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
+ 1600, 1600, 1592, 1592, 98, 1600, 1592, 1592, 1592, 1600,
+ 1601, 1592, 1601, 1601, 1592, 1592, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1602, 1592, 1592, 1602, 1592, 1592, 1592, 1603, 1604,
+ 1605, 1592, 1592, 1592, 1604, 1604, 90, 90, 1592, 1606,
+ 1592, 1592, 1604, 173, 173, 173, 173, 173, 1604, 1604,
+ 1604, 1604, 1604, 1604, 1592, 1592, 173, 173, 173, 173,
+ 173, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1592, 1592,
+
+ 1607, 1592, 1592, 1608, 1592, 1592, 1592, 1609, 1609, 1609,
+ 1609, 1592, 1592, 1592, 1598, 1598, 1599, 1592, 26, 1592,
+ 1592, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 26, 1592,
+ 1592, 1598, 1592, 1592, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1592, 1592, 1592,
+ 1600, 1600, 1592, 1592, 1592, 1610, 1592, 1592, 90, 90,
+
+ 300, 1592, 1592, 1611, 1592, 98, 98, 98, 1600, 1600,
+ 1600, 1600, 98, 1600, 1600, 1600, 98, 98, 1600, 1600,
+ 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
+ 1600, 1600, 1600, 1600, 1600, 1600, 1600, 98, 1600, 1601,
+ 1601, 1612, 1601, 1592, 1611, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1602,
+
+ 1602, 1603, 1592, 1604, 1604, 1605, 1605, 1606, 173, 173,
+ 173, 1604, 1604, 173, 173, 1604, 1604, 1604, 1604, 1604,
+ 1604, 1604, 1604, 1604, 1604, 1604, 1604, 173, 1604, 173,
+ 173, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604,
+ 1604, 1604, 1604, 1592, 1607, 1608, 1609, 1592, 1609, 1609,
+ 1609, 1592, 1592, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1600, 1610, 1611,
+ 1600, 98, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
+ 98, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
+ 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
+ 1600, 1600, 1600, 1600, 1601, 1612, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1602, 1604, 1604, 1604, 1604, 1604, 1604, 1604,
+ 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604,
+ 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604,
+ 1604, 1604, 1604, 1604, 1604, 1604, 1609, 1609, 1609, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1600,
+ 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
+ 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
+ 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
+ 1600, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1613,
+ 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604,
+ 1604, 1604, 1604, 1604, 1604, 1614, 1604, 1604, 1604, 1604,
+ 1604, 1604, 1604, 1609, 1609, 1609, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1600, 1600, 1600, 1600,
+
+ 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
+ 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
+ 1600, 1600, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1604, 1604, 1604, 1604, 1604, 1615, 1613, 1604,
+ 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1616, 1614,
+ 1604, 1604, 1604, 1604, 1609, 1609, 1609, 1598, 1598, 1598,
+
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1600, 1600,
+ 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
+ 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
+ 1600, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+
+ 1601, 1601, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604,
+ 1604, 1604, 1604, 1604, 1609, 1609, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1600, 1600, 1600,
+ 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
+ 1600, 1600, 1600, 1600, 1600, 1600, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1604, 1604, 1604,
+
+ 1604, 1604, 1604, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1600, 1600, 1600,
+ 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
+ 1600, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1604, 1604, 1604, 1604, 1604,
+ 1604, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1601,
+
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1600, 1600, 1600,
+ 1600, 1600, 1600, 1600, 1600, 1600, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+
+ 1601, 1601, 1601, 1601, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1600, 1600,
+ 1600, 1600, 1600, 1600, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1600, 1600,
+ 1600, 1600, 1600, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1600, 1600, 1600, 1600, 1600, 1600, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1600, 1600, 1600, 1601,
+
+ 1601, 1601, 1601, 1601, 1601, 1601, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1600, 1600, 1600, 1601, 1601, 1601, 1601,
+ 1601, 1601, 1601, 1598, 1598, 1598, 1598, 1598, 1598, 1600,
+ 1600, 1601, 1601, 1601, 1601, 1601, 1601, 1598, 1598, 1598,
+ 1598, 1598, 1600, 1600, 1601, 1601, 1601, 1601, 1601, 1598,
+ 1598, 1598, 1598, 1600, 1601, 1601, 1601, 1601, 1598, 1598,
+ 1598, 1598, 1600, 1601, 1601, 1601, 1601, 1598, 1598, 1598,
+ 1598, 1600, 1601, 1601, 1601, 1601, 1598, 1598, 1598, 1600,
+ 1601, 1601, 1601, 1598, 1598, 1601, 1601, 1598, 1601, 1598,
+ 1601, 0, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592,
+
+ 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592,
+ 1592, 1592, 1592, 1592, 1592, 1592
+ } ;
+
+static yyconst flex_int16_t yy_nxt[2600] =
+ { 0,
+ 21, 22, 23, 24, 25, 21, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
+ 50, 51, 52, 53, 35, 54, 55, 56, 57, 58,
+ 59, 60, 61, 62, 63, 35, 64, 35, 35, 35,
+ 35, 65, 35, 66, 35, 35, 67, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 68, 35, 35, 69,
+ 35, 35, 70, 35, 35, 35, 35, 71, 72, 73,
+ 74, 75, 76, 23, 77, 78, 75, 79, 80, 81,
+ 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
+
+ 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
+ 102, 103, 104, 88, 105, 88, 106, 107, 108, 109,
+ 110, 111, 88, 88, 112, 88, 88, 88, 88, 88,
+ 88, 88, 113, 88, 114, 75, 88, 115, 103, 103,
+ 103, 103, 103, 88, 88, 88, 88, 88, 88, 88,
+ 88, 88, 88, 116, 88, 88, 88, 88, 117, 118,
+ 119, 120, 75, 76, 23, 77, 78, 75, 121, 80,
+ 81, 82, 83, 84, 85, 86, 122, 123, 124, 125,
+ 126, 92, 93, 94, 95, 96, 97, 127, 128, 129,
+ 130, 131, 132, 133, 134, 135, 123, 136, 137, 138,
+
+ 139, 140, 141, 142, 143, 144, 145, 123, 146, 123,
+ 123, 123, 123, 113, 123, 114, 75, 123, 147, 123,
+ 123, 123, 123, 123, 123, 123, 123, 123, 148, 123,
+ 123, 149, 123, 123, 150, 123, 123, 123, 123, 117,
+ 118, 119, 151, 75, 75, 20, 75, 75, 75, 152,
+ 75, 75, 75, 75, 75, 153, 75, 154, 225, 288,
+ 125, 126, 75, 75, 75, 156, 75, 75, 220, 226,
+ 230, 231, 199, 200, 199, 200, 201, 962, 201, 233,
+ 234, 235, 221, 236, 247, 237, 241, 202, 248, 202,
+ 242, 238, 245, 243, 75, 246, 75, 75, 239, 240,
+
+ 250, 252, 249, 259, 253, 261, 244, 254, 263, 262,
+ 251, 295, 288, 260, 436, 289, 230, 231, 264, 437,
+ 75, 75, 75, 75, 75, 20, 75, 75, 75, 152,
+ 75, 75, 75, 75, 75, 153, 75, 154, 227, 227,
+ 125, 126, 75, 75, 75, 156, 75, 75, 203, 269,
+ 203, 220, 297, 265, 302, 296, 228, 266, 228, 270,
+ 267, 268, 324, 298, 963, 221, 233, 234, 289, 229,
+ 326, 302, 325, 297, 75, 328, 75, 75, 327, 273,
+ 441, 302, 274, 275, 343, 329, 228, 361, 228, 276,
+ 277, 278, 964, 442, 279, 280, 229, 362, 302, 281,
+
+ 75, 75, 75, 21, 22, 157, 158, 21, 159, 160,
+ 27, 28, 29, 30, 161, 162, 163, 164, 165, 166,
+ 167, 168, 169, 170, 41, 171, 43, 172, 173, 174,
+ 175, 176, 177, 178, 165, 165, 165, 165, 165, 179,
+ 165, 180, 181, 182, 165, 165, 183, 184, 165, 165,
+ 165, 165, 165, 165, 185, 165, 186, 21, 165, 187,
+ 188, 189, 176, 190, 191, 165, 165, 165, 165, 192,
+ 165, 193, 194, 195, 165, 196, 197, 165, 165, 165,
+ 71, 72, 73, 198, 21, 199, 200, 21, 21, 201,
+ 965, 21, 21, 21, 21, 21, 21, 205, 21, 295,
+
+ 202, 21, 21, 205, 205, 21, 21, 21, 21, 227,
+ 227, 425, 485, 313, 330, 313, 356, 334, 331, 357,
+ 314, 335, 332, 315, 448, 486, 426, 228, 336, 228,
+ 291, 291, 313, 337, 313, 21, 21, 21, 21, 464,
+ 352, 465, 291, 342, 353, 316, 370, 354, 363, 291,
+ 291, 364, 420, 448, 365, 966, 371, 228, 421, 228,
+ 355, 206, 21, 207, 21, 21, 199, 200, 21, 21,
+ 201, 967, 21, 21, 21, 21, 21, 21, 205, 21,
+ 449, 202, 21, 21, 205, 205, 21, 21, 21, 21,
+ 317, 313, 358, 313, 318, 471, 359, 313, 372, 313,
+
+ 450, 291, 373, 313, 448, 313, 374, 291, 319, 291,
+ 360, 448, 472, 291, 291, 291, 21, 21, 21, 21,
+ 291, 291, 346, 375, 347, 320, 348, 377, 381, 448,
+ 302, 378, 349, 376, 379, 380, 448, 458, 382, 350,
+ 351, 846, 206, 21, 207, 21, 21, 199, 200, 459,
+ 25, 201, 844, 21, 21, 21, 21, 302, 21, 205,
+ 414, 411, 202, 21, 21, 205, 205, 21, 21, 21,
+ 313, 404, 313, 411, 385, 659, 813, 386, 387, 451,
+ 291, 968, 814, 404, 388, 389, 390, 291, 291, 391,
+ 392, 415, 411, 411, 393, 543, 535, 411, 416, 536,
+
+ 448, 338, 404, 404, 544, 417, 209, 404, 210, 448,
+ 419, 411, 211, 490, 969, 418, 491, 528, 970, 529,
+ 411, 404, 492, 212, 21, 213, 21, 21, 199, 200,
+ 404, 25, 201, 971, 21, 21, 21, 21, 845, 21,
+ 205, 588, 428, 202, 21, 21, 205, 205, 21, 21,
+ 21, 429, 344, 344, 589, 501, 411, 502, 411, 972,
+ 574, 503, 433, 657, 344, 344, 404, 524, 404, 434,
+ 303, 228, 303, 228, 227, 227, 567, 575, 568, 525,
+ 411, 973, 303, 345, 303, 561, 430, 209, 431, 210,
+ 404, 590, 228, 211, 228, 432, 974, 562, 975, 591,
+
+ 303, 228, 303, 228, 212, 21, 213, 21, 219, 219,
+ 345, 976, 303, 977, 303, 980, 219, 219, 219, 219,
+ 219, 219, 228, 435, 228, 478, 300, 300, 479, 581,
+ 480, 606, 582, 607, 583, 981, 982, 608, 481, 983,
+ 984, 482, 584, 985, 1592, 585, 1592, 219, 219, 219,
+ 219, 219, 219, 292, 292, 448, 986, 302, 987, 411,
+ 988, 292, 292, 292, 292, 292, 292, 411, 313, 404,
+ 313, 313, 991, 313, 1592, 992, 1592, 404, 291, 993,
+ 411, 291, 994, 448, 302, 291, 291, 448, 521, 291,
+ 404, 998, 292, 292, 292, 292, 292, 292, 299, 299,
+
+ 999, 344, 344, 1000, 1001, 658, 300, 301, 300, 301,
+ 300, 300, 1002, 302, 411, 313, 303, 522, 303, 303,
+ 302, 303, 829, 1005, 404, 291, 641, 595, 830, 304,
+ 596, 625, 291, 291, 997, 995, 597, 300, 301, 300,
+ 301, 300, 300, 313, 302, 313, 303, 1006, 303, 303,
+ 302, 303, 448, 291, 411, 1007, 304, 306, 306, 1008,
+ 291, 291, 1009, 411, 404, 306, 307, 306, 308, 306,
+ 306, 627, 309, 404, 1003, 313, 310, 313, 1010, 309,
+ 628, 1011, 1012, 311, 312, 291, 1013, 1014, 309, 996,
+ 1015, 1004, 291, 530, 1016, 411, 306, 313, 306, 313,
+
+ 306, 306, 313, 309, 313, 404, 531, 1017, 411, 309,
+ 1018, 1019, 291, 1020, 1021, 309, 341, 341, 404, 291,
+ 291, 313, 1022, 313, 341, 341, 341, 341, 341, 341,
+ 313, 291, 313, 303, 1023, 303, 1024, 1025, 291, 291,
+ 291, 643, 1026, 1027, 1028, 1029, 721, 291, 291, 1030,
+ 1031, 1032, 1033, 1034, 644, 341, 341, 341, 341, 341,
+ 341, 401, 401, 303, 1035, 303, 1036, 553, 1037, 401,
+ 401, 401, 401, 401, 401, 313, 1038, 313, 1039, 1040,
+ 1041, 1042, 730, 1043, 1044, 291, 1045, 1046, 1047, 1048,
+ 1049, 1050, 291, 291, 1051, 1052, 1053, 1054, 1055, 1056,
+
+ 401, 401, 401, 401, 401, 401, 405, 405, 1057, 1058,
+ 1059, 1060, 1061, 1062, 405, 405, 405, 405, 405, 405,
+ 1063, 1064, 1065, 1066, 1067, 1069, 1070, 1071, 1072, 1073,
+ 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083,
+ 1084, 1068, 1085, 1086, 1087, 405, 405, 405, 405, 405,
+ 405, 409, 409, 1088, 1089, 1090, 1091, 1092, 1093, 409,
+ 410, 409, 411, 409, 409, 1094, 412, 1095, 1096, 1097,
+ 413, 1098, 1099, 412, 1100, 1101, 1102, 1103, 1104, 1105,
+ 1106, 1107, 412, 1108, 1109, 1110, 1111, 1112, 1113, 1114,
+ 409, 411, 409, 411, 409, 409, 448, 412, 448, 448,
+
+ 1117, 1118, 1119, 412, 1120, 1121, 1122, 1123, 1124, 412,
+ 292, 292, 1125, 1126, 1127, 1128, 1129, 1130, 292, 292,
+ 292, 292, 292, 292, 1131, 1132, 1133, 1134, 518, 1135,
+ 518, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144,
+ 1145, 1146, 1147, 1148, 1149, 1115, 1116, 1150, 1151, 292,
+ 292, 292, 292, 292, 292, 1152, 1153, 1154, 518, 1155,
+ 518, 341, 341, 1156, 1157, 1158, 1159, 1160, 1161, 341,
+ 341, 341, 341, 341, 341, 1162, 1163, 1164, 1165, 555,
+ 1166, 555, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174,
+ 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184,
+
+ 341, 341, 341, 341, 341, 341, 1185, 1186, 1187, 555,
+ 1188, 555, 401, 401, 1189, 1190, 1191, 1192, 1193, 1194,
+ 401, 401, 401, 401, 401, 401, 1195, 1196, 1197, 1198,
+ 623, 1199, 623, 1200, 1201, 1202, 1203, 448, 448, 1204,
+ 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214,
+ 1215, 401, 401, 401, 401, 401, 401, 1218, 1219, 1220,
+ 623, 1216, 623, 405, 405, 1221, 1217, 1222, 1223, 1224,
+ 1225, 405, 405, 405, 405, 405, 405, 1226, 1227, 1228,
+ 1229, 624, 1230, 624, 1231, 1232, 1233, 1234, 1235, 1236,
+ 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246,
+
+ 1247, 1248, 405, 405, 405, 405, 405, 405, 1249, 1250,
+ 1251, 624, 1252, 624, 978, 978, 1253, 978, 978, 978,
+ 1256, 978, 978, 978, 978, 978, 1254, 978, 1257, 1258,
+ 1259, 1255, 1260, 1261, 978, 978, 978, 978, 978, 1262,
+ 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272,
+ 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282,
+ 1283, 1284, 1285, 1286, 1287, 1288, 1290, 1291, 978, 1292,
+ 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1289, 1301,
+ 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311,
+ 1312, 978, 978, 978, 989, 989, 1313, 989, 989, 989,
+
+ 1314, 989, 989, 989, 989, 989, 1315, 989, 1316, 1318,
+ 1319, 1320, 1321, 1322, 989, 989, 989, 989, 989, 1323,
+ 1324, 1317, 1325, 1326, 1328, 1329, 1330, 1331, 1332, 1333,
+ 1334, 1327, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1343,
+ 1344, 1345, 1346, 1347, 1348, 1349, 1342, 1350, 989, 1351,
+ 1352, 1353, 1354, 1356, 1357, 1358, 1359, 1360, 1361, 1362,
+ 1355, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371,
+ 1372, 989, 989, 989, 978, 978, 1373, 978, 978, 978,
+ 1374, 978, 978, 978, 978, 978, 1375, 978, 1376, 1377,
+ 1378, 1379, 1380, 1381, 978, 978, 978, 978, 978, 1382,
+
+ 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392,
+ 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402,
+ 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 978, 1411,
+ 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421,
+ 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431,
+ 1432, 978, 978, 978, 989, 989, 1433, 989, 989, 989,
+ 1434, 989, 989, 989, 989, 989, 1435, 989, 1436, 1437,
+ 1438, 1439, 1440, 1441, 989, 989, 989, 989, 989, 1442,
+ 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452,
+ 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462,
+
+ 1463, 1464, 1465, 1468, 1469, 1470, 1466, 1471, 989, 1472,
+ 1473, 1474, 1477, 1478, 1479, 1475, 1480, 1481, 1484, 1467,
+ 1485, 1482, 1486, 1487, 1488, 1489, 1490, 1491, 1476, 1492,
+ 1493, 989, 989, 989, 1483, 1494, 1495, 1496, 1497, 1498,
+ 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508,
+ 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518,
+ 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528,
+ 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538,
+ 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548,
+ 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558,
+
+ 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568,
+ 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578,
+ 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588,
+ 1589, 1590, 1591, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 215, 215, 215, 215, 215, 215, 215,
+ 215, 217, 217, 217, 217, 217, 217, 217, 217, 217,
+
+ 217, 291, 291, 520, 291, 291, 291, 291, 340, 340,
+ 340, 340, 340, 340, 340, 400, 961, 960, 959, 400,
+ 400, 400, 402, 402, 402, 402, 402, 402, 402, 402,
+ 402, 402, 404, 404, 958, 404, 404, 404, 404, 406,
+ 957, 406, 406, 406, 406, 406, 406, 406, 406, 408,
+ 956, 408, 408, 408, 408, 408, 408, 408, 408, 445,
+ 955, 445, 445, 445, 445, 445, 445, 445, 445, 446,
+ 954, 446, 447, 447, 953, 952, 447, 447, 951, 447,
+ 519, 519, 950, 519, 519, 519, 519, 556, 556, 556,
+ 556, 556, 556, 556, 979, 949, 979, 979, 979, 979,
+
+ 979, 979, 979, 979, 990, 948, 990, 990, 990, 990,
+ 990, 990, 990, 990, 978, 947, 978, 978, 978, 978,
+ 978, 978, 978, 978, 989, 946, 989, 989, 989, 989,
+ 989, 989, 989, 989, 945, 944, 943, 942, 941, 940,
+ 939, 938, 937, 936, 935, 934, 933, 932, 931, 930,
+ 929, 928, 927, 926, 925, 924, 923, 922, 921, 920,
+ 919, 918, 917, 916, 915, 914, 913, 912, 911, 910,
+ 909, 908, 907, 906, 905, 904, 903, 902, 901, 900,
+ 899, 898, 897, 896, 895, 894, 893, 892, 891, 890,
+ 889, 888, 887, 886, 885, 884, 883, 882, 881, 880,
+
+ 879, 878, 877, 876, 875, 874, 873, 872, 871, 870,
+ 869, 868, 867, 866, 865, 864, 863, 862, 861, 860,
+ 859, 858, 857, 856, 855, 854, 853, 852, 851, 850,
+ 849, 848, 847, 843, 842, 841, 840, 839, 838, 837,
+ 836, 835, 834, 833, 832, 831, 828, 827, 826, 825,
+ 824, 823, 822, 821, 820, 819, 818, 817, 816, 815,
+ 812, 811, 810, 809, 808, 807, 806, 805, 804, 803,
+ 802, 801, 800, 799, 798, 797, 796, 795, 794, 793,
+ 792, 791, 790, 789, 788, 787, 786, 785, 784, 783,
+ 782, 781, 780, 779, 778, 777, 776, 775, 774, 773,
+
+ 772, 771, 770, 769, 768, 767, 766, 765, 764, 763,
+ 762, 761, 760, 759, 758, 757, 756, 755, 754, 753,
+ 752, 751, 750, 749, 748, 747, 746, 745, 744, 743,
+ 742, 741, 740, 739, 738, 737, 736, 735, 734, 733,
+ 732, 731, 729, 728, 727, 726, 725, 724, 723, 722,
+ 720, 719, 718, 717, 716, 715, 714, 713, 712, 711,
+ 710, 709, 708, 707, 706, 705, 704, 703, 702, 701,
+ 700, 699, 698, 697, 696, 695, 694, 693, 692, 691,
+ 690, 689, 688, 687, 686, 685, 684, 683, 682, 681,
+ 680, 679, 678, 677, 676, 675, 674, 673, 672, 671,
+
+ 670, 669, 668, 667, 666, 665, 664, 663, 662, 661,
+ 660, 447, 448, 444, 656, 655, 654, 653, 652, 651,
+ 650, 649, 648, 647, 646, 645, 642, 640, 639, 638,
+ 637, 636, 635, 634, 633, 632, 631, 630, 629, 626,
+ 403, 622, 621, 620, 619, 618, 617, 616, 615, 614,
+ 613, 612, 611, 610, 609, 605, 604, 603, 602, 601,
+ 600, 599, 598, 594, 593, 592, 587, 586, 580, 579,
+ 578, 577, 576, 573, 572, 571, 570, 569, 566, 565,
+ 564, 563, 560, 559, 558, 557, 554, 552, 551, 550,
+ 549, 548, 547, 546, 545, 542, 541, 540, 539, 538,
+
+ 537, 534, 533, 532, 527, 526, 523, 517, 516, 515,
+ 514, 513, 512, 511, 510, 509, 508, 507, 506, 505,
+ 504, 500, 499, 498, 497, 496, 495, 494, 493, 489,
+ 488, 487, 484, 483, 477, 476, 475, 474, 473, 470,
+ 469, 468, 467, 466, 463, 462, 461, 460, 457, 456,
+ 455, 454, 453, 452, 218, 214, 448, 297, 444, 443,
+ 440, 439, 438, 427, 424, 423, 422, 305, 298, 295,
+ 294, 407, 403, 290, 399, 398, 397, 396, 395, 394,
+ 384, 383, 369, 368, 367, 366, 339, 333, 323, 322,
+ 321, 305, 294, 293, 218, 290, 214, 287, 286, 285,
+
+ 284, 283, 282, 272, 271, 258, 257, 256, 255, 232,
+ 224, 223, 222, 218, 216, 214, 1592, 19, 1592, 1592,
+ 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592,
+ 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592,
+ 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592,
+ 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592,
+ 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592,
+ 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592,
+ 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592,
+ 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592
+
+ } ;
+
+static yyconst flex_int16_t yy_chk[2600] =
+ { 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 36, 72,
+ 9, 9, 9, 9, 9, 9, 9, 9, 28, 36,
+ 41, 41, 13, 13, 14, 14, 13, 801, 14, 43,
+ 43, 45, 28, 45, 48, 45, 46, 13, 48, 14,
+ 46, 45, 47, 46, 9, 47, 9, 9, 45, 45,
+
+ 49, 50, 48, 55, 50, 56, 46, 50, 57, 56,
+ 49, 87, 118, 55, 192, 72, 94, 94, 57, 192,
+ 9, 9, 9, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 37, 37,
+ 10, 10, 10, 10, 10, 10, 10, 10, 13, 59,
+ 14, 81, 89, 58, 91, 87, 37, 58, 37, 59,
+ 58, 58, 107, 89, 802, 81, 96, 96, 118, 37,
+ 108, 168, 107, 124, 10, 109, 10, 10, 108, 62,
+ 196, 91, 62, 62, 124, 109, 37, 131, 37, 62,
+ 62, 62, 803, 196, 62, 62, 37, 131, 168, 62,
+
+ 10, 10, 10, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 15, 15, 15, 15, 15, 15,
+ 804, 15, 15, 15, 15, 15, 15, 15, 15, 122,
+
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 38,
+ 38, 183, 260, 99, 110, 99, 129, 112, 110, 129,
+ 99, 112, 110, 99, 209, 260, 183, 38, 112, 38,
+ 99, 99, 100, 112, 100, 15, 15, 15, 15, 245,
+ 128, 245, 100, 122, 128, 100, 137, 128, 132, 100,
+ 100, 132, 179, 210, 132, 805, 137, 38, 179, 38,
+ 128, 15, 15, 15, 15, 16, 16, 16, 16, 16,
+ 16, 806, 16, 16, 16, 16, 16, 16, 16, 16,
+ 209, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 101, 101, 130, 101, 101, 251, 130, 103, 138, 103,
+
+ 210, 101, 138, 102, 659, 102, 138, 103, 101, 101,
+ 130, 657, 251, 102, 103, 103, 16, 16, 16, 16,
+ 102, 102, 127, 139, 127, 102, 127, 140, 141, 211,
+ 299, 140, 127, 139, 140, 140, 451, 239, 141, 127,
+ 127, 659, 16, 16, 16, 16, 17, 17, 17, 239,
+ 17, 17, 657, 17, 17, 17, 17, 299, 17, 17,
+ 174, 174, 17, 17, 17, 17, 17, 17, 17, 17,
+ 115, 174, 115, 176, 144, 451, 626, 144, 144, 211,
+ 115, 807, 626, 176, 144, 144, 144, 115, 115, 144,
+ 144, 175, 175, 177, 144, 329, 322, 178, 175, 322,
+
+ 658, 115, 175, 177, 329, 177, 17, 178, 17, 449,
+ 178, 187, 17, 264, 808, 177, 264, 316, 809, 316,
+ 190, 187, 264, 17, 17, 17, 17, 18, 18, 18,
+ 190, 18, 18, 810, 18, 18, 18, 18, 658, 18,
+ 18, 371, 187, 18, 18, 18, 18, 18, 18, 18,
+ 18, 187, 125, 125, 371, 273, 188, 273, 189, 811,
+ 362, 273, 190, 449, 126, 126, 188, 311, 189, 190,
+ 125, 219, 125, 219, 227, 227, 356, 362, 356, 311,
+ 191, 812, 126, 125, 126, 350, 188, 18, 189, 18,
+ 191, 372, 227, 18, 227, 189, 813, 350, 814, 372,
+
+ 125, 219, 125, 219, 18, 18, 18, 18, 26, 26,
+ 125, 818, 126, 819, 126, 823, 26, 26, 26, 26,
+ 26, 26, 227, 191, 227, 257, 300, 300, 257, 368,
+ 257, 385, 368, 385, 368, 824, 826, 385, 257, 827,
+ 828, 257, 368, 829, 300, 368, 300, 26, 26, 26,
+ 26, 26, 26, 79, 79, 450, 830, 300, 834, 409,
+ 835, 79, 79, 79, 79, 79, 79, 411, 306, 409,
+ 306, 307, 839, 307, 300, 840, 300, 411, 306, 842,
+ 428, 307, 843, 844, 300, 306, 306, 846, 307, 307,
+ 428, 847, 79, 79, 79, 79, 79, 79, 90, 90,
+
+ 849, 344, 344, 850, 851, 450, 90, 90, 90, 90,
+ 90, 90, 852, 90, 410, 308, 90, 308, 90, 344,
+ 90, 344, 642, 855, 410, 308, 428, 376, 642, 90,
+ 376, 410, 308, 308, 846, 844, 376, 90, 90, 90,
+ 90, 90, 90, 313, 90, 313, 90, 856, 90, 344,
+ 90, 344, 845, 313, 414, 857, 90, 98, 98, 860,
+ 313, 313, 861, 415, 414, 98, 98, 98, 98, 98,
+ 98, 414, 98, 415, 854, 317, 98, 317, 863, 98,
+ 415, 865, 866, 98, 98, 317, 868, 869, 98, 845,
+ 870, 854, 317, 317, 871, 430, 98, 98, 98, 98,
+
+ 98, 98, 318, 98, 318, 430, 318, 872, 431, 98,
+ 873, 874, 318, 875, 876, 98, 121, 121, 431, 318,
+ 318, 338, 877, 338, 121, 121, 121, 121, 121, 121,
+ 522, 338, 522, 520, 878, 520, 880, 881, 338, 338,
+ 522, 430, 882, 883, 884, 886, 522, 522, 522, 887,
+ 888, 890, 891, 892, 431, 121, 121, 121, 121, 121,
+ 121, 152, 152, 520, 893, 520, 894, 338, 895, 152,
+ 152, 152, 152, 152, 152, 531, 896, 531, 897, 898,
+ 899, 900, 531, 902, 903, 531, 904, 906, 908, 909,
+ 910, 911, 531, 531, 912, 913, 914, 915, 916, 917,
+
+ 152, 152, 152, 152, 152, 152, 160, 160, 918, 919,
+ 920, 921, 922, 923, 160, 160, 160, 160, 160, 160,
+ 925, 926, 927, 928, 930, 931, 932, 933, 936, 937,
+ 939, 941, 942, 944, 945, 946, 947, 948, 949, 950,
+ 951, 930, 952, 953, 954, 160, 160, 160, 160, 160,
+ 160, 173, 173, 956, 957, 958, 959, 960, 962, 173,
+ 173, 173, 173, 173, 173, 963, 173, 964, 966, 967,
+ 173, 968, 969, 173, 970, 971, 972, 973, 975, 976,
+ 977, 981, 173, 983, 984, 986, 987, 988, 992, 994,
+ 173, 173, 173, 173, 173, 173, 995, 173, 997, 996,
+
+ 998, 999, 1001, 173, 1003, 1004, 1005, 1006, 1007, 173,
+ 292, 292, 1008, 1010, 1011, 1012, 1015, 1017, 292, 292,
+ 292, 292, 292, 292, 1018, 1020, 1022, 1023, 292, 1024,
+ 292, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033,
+ 1036, 1037, 1038, 1039, 1040, 995, 996, 1042, 1043, 292,
+ 292, 292, 292, 292, 292, 1044, 1045, 1046, 292, 1047,
+ 292, 341, 341, 1049, 1050, 1052, 1054, 1055, 1056, 341,
+ 341, 341, 341, 341, 341, 1057, 1058, 1059, 1060, 341,
+ 1061, 341, 1062, 1063, 1065, 1067, 1068, 1069, 1070, 1071,
+ 1072, 1074, 1075, 1076, 1079, 1081, 1082, 1084, 1086, 1087,
+
+ 341, 341, 341, 341, 341, 341, 1088, 1089, 1090, 341,
+ 1091, 341, 401, 401, 1092, 1093, 1094, 1095, 1096, 1097,
+ 401, 401, 401, 401, 401, 401, 1100, 1101, 1102, 1103,
+ 401, 1104, 401, 1108, 1109, 1110, 1114, 1115, 1116, 1117,
+ 1119, 1120, 1121, 1122, 1123, 1125, 1126, 1128, 1129, 1130,
+ 1132, 401, 401, 401, 401, 401, 401, 1135, 1136, 1137,
+ 401, 1133, 401, 405, 405, 1138, 1133, 1139, 1140, 1141,
+ 1144, 405, 405, 405, 405, 405, 405, 1146, 1147, 1148,
+ 1150, 405, 1151, 405, 1152, 1154, 1156, 1157, 1158, 1160,
+ 1161, 1162, 1164, 1165, 1166, 1167, 1169, 1170, 1171, 1172,
+
+ 1173, 1175, 405, 405, 405, 405, 405, 405, 1176, 1178,
+ 1179, 405, 1180, 405, 820, 820, 1182, 820, 820, 820,
+ 1185, 820, 820, 820, 820, 820, 1183, 820, 1186, 1187,
+ 1188, 1183, 1189, 1190, 820, 820, 820, 820, 820, 1191,
+ 1194, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1205,
+ 1207, 1208, 1209, 1210, 1211, 1212, 1214, 1215, 1216, 1217,
+ 1218, 1219, 1220, 1222, 1223, 1224, 1227, 1229, 820, 1231,
+ 1232, 1234, 1235, 1236, 1237, 1238, 1241, 1243, 1224, 1245,
+ 1246, 1247, 1248, 1249, 1250, 1252, 1253, 1254, 1255, 1256,
+ 1257, 820, 820, 820, 836, 836, 1258, 836, 836, 836,
+
+ 1260, 836, 836, 836, 836, 836, 1261, 836, 1262, 1265,
+ 1273, 1274, 1275, 1276, 836, 836, 836, 836, 836, 1277,
+ 1278, 1262, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286,
+ 1287, 1280, 1288, 1289, 1290, 1292, 1293, 1294, 1295, 1296,
+ 1297, 1298, 1299, 1301, 1302, 1303, 1295, 1304, 836, 1305,
+ 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315,
+ 1308, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324,
+ 1325, 836, 836, 836, 979, 979, 1328, 979, 979, 979,
+ 1329, 979, 979, 979, 979, 979, 1330, 979, 1331, 1333,
+ 1334, 1335, 1336, 1337, 979, 979, 979, 979, 979, 1338,
+
+ 1339, 1340, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350,
+ 1351, 1352, 1353, 1356, 1357, 1358, 1359, 1361, 1362, 1363,
+ 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 979, 1374,
+ 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1385,
+ 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1397,
+ 1398, 979, 979, 979, 990, 990, 1399, 990, 990, 990,
+ 1400, 990, 990, 990, 990, 990, 1401, 990, 1402, 1403,
+ 1404, 1406, 1407, 1409, 990, 990, 990, 990, 990, 1410,
+ 1411, 1412, 1414, 1415, 1416, 1418, 1419, 1421, 1422, 1423,
+ 1424, 1426, 1427, 1429, 1430, 1431, 1432, 1434, 1435, 1436,
+
+ 1438, 1439, 1440, 1441, 1442, 1444, 1440, 1446, 990, 1447,
+ 1448, 1449, 1450, 1452, 1453, 1449, 1454, 1455, 1456, 1440,
+ 1457, 1455, 1459, 1461, 1462, 1463, 1464, 1465, 1449, 1466,
+ 1467, 990, 990, 990, 1455, 1468, 1469, 1472, 1474, 1475,
+ 1476, 1480, 1481, 1482, 1483, 1484, 1485, 1488, 1490, 1491,
+ 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501,
+ 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1510, 1511, 1512,
+ 1513, 1514, 1516, 1517, 1518, 1520, 1521, 1522, 1523, 1524,
+ 1525, 1526, 1527, 1528, 1530, 1531, 1532, 1533, 1534, 1535,
+ 1536, 1538, 1540, 1541, 1542, 1544, 1545, 1547, 1548, 1549,
+
+ 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559,
+ 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1569, 1570,
+ 1571, 1572, 1574, 1575, 1576, 1578, 1579, 1582, 1583, 1585,
+ 1587, 1588, 1589, 1593, 1593, 1593, 1593, 1593, 1593, 1593,
+ 1593, 1593, 1593, 1594, 1594, 1594, 1594, 1594, 1594, 1594,
+ 1594, 1594, 1594, 1595, 1595, 1595, 1595, 1595, 1595, 1595,
+ 1595, 1595, 1595, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
+ 1596, 1596, 1596, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+
+ 1599, 1600, 1600, 1611, 1600, 1600, 1600, 1600, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1602, 800, 799, 798, 1602,
+ 1602, 1602, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603,
+ 1603, 1603, 1604, 1604, 797, 1604, 1604, 1604, 1604, 1605,
+ 796, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1606,
+ 794, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1607,
+ 793, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1608,
+ 792, 1608, 1609, 1609, 791, 790, 1609, 1609, 789, 1609,
+ 1610, 1610, 788, 1610, 1610, 1610, 1610, 1612, 1612, 1612,
+ 1612, 1612, 1612, 1612, 1613, 787, 1613, 1613, 1613, 1613,
+
+ 1613, 1613, 1613, 1613, 1614, 786, 1614, 1614, 1614, 1614,
+ 1614, 1614, 1614, 1614, 1615, 784, 1615, 1615, 1615, 1615,
+ 1615, 1615, 1615, 1615, 1616, 782, 1616, 1616, 1616, 1616,
+ 1616, 1616, 1616, 1616, 781, 779, 778, 777, 775, 774,
+ 773, 772, 770, 769, 768, 767, 766, 765, 764, 762,
+ 760, 758, 757, 756, 755, 754, 752, 751, 750, 749,
+ 748, 747, 746, 745, 744, 743, 742, 741, 740, 738,
+ 737, 734, 733, 732, 731, 730, 729, 727, 726, 724,
+ 723, 722, 720, 719, 718, 717, 716, 715, 714, 713,
+ 712, 711, 710, 709, 708, 707, 706, 705, 704, 702,
+
+ 701, 700, 699, 698, 697, 696, 695, 694, 692, 690,
+ 689, 687, 686, 685, 683, 682, 681, 680, 678, 677,
+ 676, 675, 674, 673, 672, 670, 668, 666, 665, 664,
+ 663, 662, 660, 656, 655, 654, 653, 652, 651, 650,
+ 649, 648, 647, 645, 644, 643, 641, 640, 639, 638,
+ 637, 636, 635, 634, 633, 632, 631, 629, 628, 627,
+ 625, 622, 619, 618, 617, 616, 615, 614, 613, 612,
+ 611, 610, 609, 608, 607, 606, 605, 604, 603, 602,
+ 601, 600, 599, 598, 597, 596, 595, 594, 592, 589,
+ 588, 587, 586, 585, 584, 583, 582, 581, 579, 578,
+
+ 577, 576, 575, 574, 573, 572, 571, 570, 569, 568,
+ 567, 566, 565, 564, 563, 562, 561, 560, 559, 558,
+ 557, 554, 553, 552, 551, 550, 549, 548, 547, 546,
+ 545, 544, 543, 542, 539, 538, 537, 536, 535, 534,
+ 533, 532, 530, 529, 528, 527, 526, 525, 524, 523,
+ 521, 517, 514, 513, 512, 511, 510, 509, 508, 507,
+ 506, 505, 504, 503, 502, 501, 500, 499, 498, 497,
+ 496, 495, 494, 493, 492, 491, 490, 489, 488, 486,
+ 485, 484, 483, 482, 481, 480, 479, 478, 476, 475,
+ 474, 473, 472, 471, 470, 469, 468, 467, 466, 465,
+
+ 464, 463, 462, 461, 460, 459, 458, 457, 456, 455,
+ 454, 448, 447, 444, 443, 442, 441, 440, 439, 438,
+ 437, 436, 435, 434, 433, 432, 429, 427, 426, 425,
+ 424, 423, 422, 421, 420, 419, 418, 417, 416, 413,
+ 402, 399, 398, 397, 396, 395, 394, 393, 392, 391,
+ 390, 389, 388, 387, 386, 384, 383, 382, 381, 380,
+ 379, 378, 377, 375, 374, 373, 370, 369, 367, 366,
+ 365, 364, 363, 361, 360, 359, 358, 357, 355, 354,
+ 353, 352, 349, 348, 347, 346, 339, 337, 336, 335,
+ 334, 333, 332, 331, 330, 328, 327, 326, 325, 324,
+
+ 323, 321, 320, 319, 315, 314, 310, 287, 286, 285,
+ 284, 283, 282, 281, 280, 279, 278, 277, 276, 275,
+ 274, 272, 271, 270, 269, 268, 267, 266, 265, 263,
+ 262, 261, 259, 258, 256, 255, 254, 253, 252, 250,
+ 249, 248, 247, 246, 244, 243, 242, 241, 238, 237,
+ 236, 235, 234, 230, 217, 214, 208, 202, 199, 197,
+ 195, 194, 193, 184, 182, 181, 180, 171, 166, 164,
+ 162, 161, 159, 158, 150, 149, 148, 147, 146, 145,
+ 143, 142, 136, 135, 134, 133, 116, 111, 106, 105,
+ 104, 95, 85, 84, 78, 77, 76, 70, 69, 68,
+
+ 67, 64, 63, 61, 60, 54, 53, 52, 51, 42,
+ 34, 32, 31, 25, 24, 22, 19, 1592, 1592, 1592,
+ 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592,
+ 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592,
+ 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592,
+ 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592,
+ 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592,
+ 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592,
+ 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592,
+ 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592
+
+ } ;
+
+static yy_state_type yy_last_accepting_state;
+static char *yy_last_accepting_cpos;
+
+extern int yy_flex_debug;
+int yy_flex_debug = 0;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *yytext;
+#line 1 "ldlex.l"
+#line 4 "ldlex.l"
+
+/* Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+ Free Software Foundation, Inc.
+ Written by Steve Chamberlain of Cygnus Support.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "bfd.h"
+#include "safe-ctype.h"
+#include "bfdlink.h"
+#include "ld.h"
+#include "ldmisc.h"
+#include "ldexp.h"
+#include "ldlang.h"
+#include <ldgram.h>
+#include "ldfile.h"
+#include "ldlex.h"
+#include "ldmain.h"
+#include "libiberty.h"
+
+/* The type of top-level parser input.
+ yylex and yyparse (indirectly) both check this. */
+input_type parser_input;
+
+/* Line number in the current input file.
+ (FIXME Actually, it doesn't appear to get reset for each file?) */
+unsigned int lineno = 1;
+
+/* The string we are currently lexing, or NULL if we are reading a
+ file. */
+const char *lex_string = NULL;
+
+/* Support for flex reading from more than one input file (stream).
+ `include_stack' is flex's input state for each open file;
+ `file_name_stack' is the file names. `lineno_stack' is the current
+ line numbers.
+
+ If `include_stack_ptr' is 0, we haven't started reading anything yet.
+ Otherwise, stack elements 0 through `include_stack_ptr - 1' are valid. */
+
+#undef YY_INPUT
+#define YY_INPUT(buf,result,max_size) result = yy_input (buf, max_size)
+
+#define YY_NO_UNPUT
+
+#define MAX_INCLUDE_DEPTH 10
+static YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH];
+static const char *file_name_stack[MAX_INCLUDE_DEPTH];
+static unsigned int lineno_stack[MAX_INCLUDE_DEPTH];
+static unsigned int include_stack_ptr = 0;
+static int vers_node_nesting = 0;
+
+static int yy_input (char *, int);
+static void comment (void);
+static void lex_warn_invalid (char *where, char *what);
+
+/* STATES
+ EXPRESSION definitely in an expression
+ SCRIPT definitely in a script
+ BOTH either EXPRESSION or SCRIPT
+ DEFSYMEXP in an argument to -defsym
+ MRI in an MRI script
+ VERS_START starting a Sun style mapfile
+ VERS_SCRIPT a Sun style mapfile
+ VERS_NODE a node within a Sun style mapfile
+*/
+#define RTOKEN(x) { yylval.token = x; return x; }
+
+/* Some versions of flex want this. */
+#ifndef yywrap
+int yywrap (void) { return 1; }
+#endif
+
+
+
+
+
+
+
+
+#line 1653 "ldlex.c"
+
+#define INITIAL 0
+#define SCRIPT 1
+#define EXPRESSION 2
+#define BOTH 3
+#define DEFSYMEXP 4
+#define MRI 5
+#define VERS_START 6
+#define VERS_SCRIPT 7
+#define VERS_NODE 8
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+static int yy_init_globals (void );
+
+/* Accessor methods to globals.
+ These are made visible to non-reentrant scanners for convenience. */
+
+int yylex_destroy (void );
+
+int yyget_debug (void );
+
+void yyset_debug (int debug_flag );
+
+YY_EXTRA_TYPE yyget_extra (void );
+
+void yyset_extra (YY_EXTRA_TYPE user_defined );
+
+FILE *yyget_in (void );
+
+void yyset_in (FILE * in_str );
+
+FILE *yyget_out (void );
+
+void yyset_out (FILE * out_str );
+
+yy_size_t yyget_leng (void );
+
+char *yyget_text (void );
+
+int yyget_lineno (void );
+
+void yyset_lineno (int line_number );
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap (void );
+#else
+extern int yywrap (void );
+#endif
+#endif
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int );
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * );
+#endif
+
+#ifndef YY_NO_INPUT
+
+#ifdef __cplusplus
+static int yyinput (void );
+#else
+static int input (void );
+#endif
+
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO fwrite( yytext, yyleng, 1, yyout )
+#endif
+
+/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+ { \
+ int c = '*'; \
+ yy_size_t n; \
+ for ( n = 0; n < max_size && \
+ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+ buf[n] = (char) c; \
+ if ( c == '\n' ) \
+ buf[n++] = (char) c; \
+ if ( c == EOF && ferror( yyin ) ) \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ result = n; \
+ } \
+ else \
+ { \
+ errno=0; \
+ while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+ { \
+ if( errno != EINTR) \
+ { \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ break; \
+ } \
+ errno=0; \
+ clearerr(yyin); \
+ } \
+ }\
+\
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* end tables serialization structures and prototypes */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+
+extern int yylex (void);
+
+#define YY_DECL int yylex (void)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+ YY_USER_ACTION
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+ register yy_state_type yy_current_state;
+ register char *yy_cp, *yy_bp;
+ register int yy_act;
+
+#line 118 "ldlex.l"
+
+
+ if (parser_input != input_selected)
+ {
+ /* The first token of the input determines the initial parser state. */
+ input_type t = parser_input;
+ parser_input = input_selected;
+ switch (t)
+ {
+ case input_script: return INPUT_SCRIPT; break;
+ case input_mri_script: return INPUT_MRI_SCRIPT; break;
+ case input_version_script: return INPUT_VERSION_SCRIPT; break;
+ case input_dynamic_list: return INPUT_DYNAMIC_LIST; break;
+ case input_defsym: return INPUT_DEFSYM; break;
+ default: abort ();
+ }
+ }
+
+#line 1860 "ldlex.c"
+
+ if ( !(yy_init) )
+ {
+ (yy_init) = 1;
+
+#ifdef YY_USER_INIT
+ YY_USER_INIT;
+#endif
+
+ if ( ! (yy_start) )
+ (yy_start) = 1; /* first start state */
+
+ if ( ! yyin )
+ yyin = stdin;
+
+ if ( ! yyout )
+ yyout = stdout;
+
+ if ( ! YY_CURRENT_BUFFER ) {
+ yyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer(yyin,YY_BUF_SIZE );
+ }
+
+ yy_load_buffer_state( );
+ }
+
+ while ( 1 ) /* loops until end-of-file is reached */
+ {
+ yy_cp = (yy_c_buf_p);
+
+ /* Support of yytext. */
+ *yy_cp = (yy_hold_char);
+
+ /* yy_bp points to the position in yy_ch_buf of the start of
+ * the current run.
+ */
+ yy_bp = yy_cp;
+
+ yy_current_state = (yy_start);
+yy_match:
+ do
+ {
+ register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 1593 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ ++yy_cp;
+ }
+ while ( yy_base[yy_current_state] != 2518 );
+
+yy_find_action:
+ yy_act = yy_accept[yy_current_state];
+ if ( yy_act == 0 )
+ { /* have to back up */
+ yy_cp = (yy_last_accepting_cpos);
+ yy_current_state = (yy_last_accepting_state);
+ yy_act = yy_accept[yy_current_state];
+ }
+
+ YY_DO_BEFORE_ACTION;
+
+do_action: /* This label is used only to access EOF actions. */
+
+ switch ( yy_act )
+ { /* beginning of action switch */
+ case 0: /* must back up */
+ /* undo the effects of YY_DO_BEFORE_ACTION */
+ *yy_cp = (yy_hold_char);
+ yy_cp = (yy_last_accepting_cpos);
+ yy_current_state = (yy_last_accepting_state);
+ goto yy_find_action;
+
+case 1:
+YY_RULE_SETUP
+#line 136 "ldlex.l"
+{ comment (); }
+ YY_BREAK
+case 2:
+YY_RULE_SETUP
+#line 139 "ldlex.l"
+{ RTOKEN('-');}
+ YY_BREAK
+case 3:
+YY_RULE_SETUP
+#line 140 "ldlex.l"
+{ RTOKEN('+');}
+ YY_BREAK
+case 4:
+YY_RULE_SETUP
+#line 141 "ldlex.l"
+{ yylval.name = xstrdup (yytext); return NAME; }
+ YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 142 "ldlex.l"
+{ RTOKEN('='); }
+ YY_BREAK
+case 6:
+YY_RULE_SETUP
+#line 144 "ldlex.l"
+{
+ yylval.integer = bfd_scan_vma (yytext + 1, 0, 16);
+ yylval.bigint.str = NULL;
+ return INT;
+ }
+ YY_BREAK
+case 7:
+YY_RULE_SETUP
+#line 150 "ldlex.l"
+{
+ int ibase ;
+ switch (yytext[yyleng - 1]) {
+ case 'X':
+ case 'x':
+ case 'H':
+ case 'h':
+ ibase = 16;
+ break;
+ case 'O':
+ case 'o':
+ ibase = 8;
+ break;
+ case 'B':
+ case 'b':
+ ibase = 2;
+ break;
+ default:
+ ibase = 10;
+ }
+ yylval.integer = bfd_scan_vma (yytext, 0,
+ ibase);
+ yylval.bigint.str = NULL;
+ return INT;
+ }
+ YY_BREAK
+case 8:
+YY_RULE_SETUP
+#line 175 "ldlex.l"
+{
+ char *s = yytext;
+ int ibase = 0;
+
+ if (*s == '$')
+ {
+ ++s;
+ ibase = 16;
+ }
+ yylval.integer = bfd_scan_vma (s, 0, ibase);
+ yylval.bigint.str = NULL;
+ if (yytext[yyleng - 1] == 'M'
+ || yytext[yyleng - 1] == 'm')
+ {
+ yylval.integer *= 1024 * 1024;
+ }
+ else if (yytext[yyleng - 1] == 'K'
+ || yytext[yyleng - 1]=='k')
+ {
+ yylval.integer *= 1024;
+ }
+ else if (yytext[0] == '0'
+ && (yytext[1] == 'x'
+ || yytext[1] == 'X'))
+ {
+ yylval.bigint.str = xstrdup (yytext + 2);
+ }
+ return INT;
+ }
+ YY_BREAK
+case 9:
+YY_RULE_SETUP
+#line 204 "ldlex.l"
+{ RTOKEN(']');}
+ YY_BREAK
+case 10:
+YY_RULE_SETUP
+#line 205 "ldlex.l"
+{ RTOKEN('[');}
+ YY_BREAK
+case 11:
+YY_RULE_SETUP
+#line 206 "ldlex.l"
+{ RTOKEN(LSHIFTEQ);}
+ YY_BREAK
+case 12:
+YY_RULE_SETUP
+#line 207 "ldlex.l"
+{ RTOKEN(RSHIFTEQ);}
+ YY_BREAK
+case 13:
+YY_RULE_SETUP
+#line 208 "ldlex.l"
+{ RTOKEN(OROR);}
+ YY_BREAK
+case 14:
+YY_RULE_SETUP
+#line 209 "ldlex.l"
+{ RTOKEN(EQ);}
+ YY_BREAK
+case 15:
+YY_RULE_SETUP
+#line 210 "ldlex.l"
+{ RTOKEN(NE);}
+ YY_BREAK
+case 16:
+YY_RULE_SETUP
+#line 211 "ldlex.l"
+{ RTOKEN(GE);}
+ YY_BREAK
+case 17:
+YY_RULE_SETUP
+#line 212 "ldlex.l"
+{ RTOKEN(LE);}
+ YY_BREAK
+case 18:
+YY_RULE_SETUP
+#line 213 "ldlex.l"
+{ RTOKEN(LSHIFT);}
+ YY_BREAK
+case 19:
+YY_RULE_SETUP
+#line 214 "ldlex.l"
+{ RTOKEN(RSHIFT);}
+ YY_BREAK
+case 20:
+YY_RULE_SETUP
+#line 215 "ldlex.l"
+{ RTOKEN(PLUSEQ);}
+ YY_BREAK
+case 21:
+YY_RULE_SETUP
+#line 216 "ldlex.l"
+{ RTOKEN(MINUSEQ);}
+ YY_BREAK
+case 22:
+YY_RULE_SETUP
+#line 217 "ldlex.l"
+{ RTOKEN(MULTEQ);}
+ YY_BREAK
+case 23:
+YY_RULE_SETUP
+#line 218 "ldlex.l"
+{ RTOKEN(DIVEQ);}
+ YY_BREAK
+case 24:
+YY_RULE_SETUP
+#line 219 "ldlex.l"
+{ RTOKEN(ANDEQ);}
+ YY_BREAK
+case 25:
+YY_RULE_SETUP
+#line 220 "ldlex.l"
+{ RTOKEN(OREQ);}
+ YY_BREAK
+case 26:
+YY_RULE_SETUP
+#line 221 "ldlex.l"
+{ RTOKEN(ANDAND);}
+ YY_BREAK
+case 27:
+YY_RULE_SETUP
+#line 222 "ldlex.l"
+{ RTOKEN('>');}
+ YY_BREAK
+case 28:
+YY_RULE_SETUP
+#line 223 "ldlex.l"
+{ RTOKEN(',');}
+ YY_BREAK
+case 29:
+YY_RULE_SETUP
+#line 224 "ldlex.l"
+{ RTOKEN('&');}
+ YY_BREAK
+case 30:
+YY_RULE_SETUP
+#line 225 "ldlex.l"
+{ RTOKEN('|');}
+ YY_BREAK
+case 31:
+YY_RULE_SETUP
+#line 226 "ldlex.l"
+{ RTOKEN('~');}
+ YY_BREAK
+case 32:
+YY_RULE_SETUP
+#line 227 "ldlex.l"
+{ RTOKEN('!');}
+ YY_BREAK
+case 33:
+YY_RULE_SETUP
+#line 228 "ldlex.l"
+{ RTOKEN('?');}
+ YY_BREAK
+case 34:
+YY_RULE_SETUP
+#line 229 "ldlex.l"
+{ RTOKEN('*');}
+ YY_BREAK
+case 35:
+YY_RULE_SETUP
+#line 230 "ldlex.l"
+{ RTOKEN('+');}
+ YY_BREAK
+case 36:
+YY_RULE_SETUP
+#line 231 "ldlex.l"
+{ RTOKEN('-');}
+ YY_BREAK
+case 37:
+YY_RULE_SETUP
+#line 232 "ldlex.l"
+{ RTOKEN('/');}
+ YY_BREAK
+case 38:
+YY_RULE_SETUP
+#line 233 "ldlex.l"
+{ RTOKEN('%');}
+ YY_BREAK
+case 39:
+YY_RULE_SETUP
+#line 234 "ldlex.l"
+{ RTOKEN('<');}
+ YY_BREAK
+case 40:
+YY_RULE_SETUP
+#line 235 "ldlex.l"
+{ RTOKEN('=');}
+ YY_BREAK
+case 41:
+YY_RULE_SETUP
+#line 236 "ldlex.l"
+{ RTOKEN('}') ; }
+ YY_BREAK
+case 42:
+YY_RULE_SETUP
+#line 237 "ldlex.l"
+{ RTOKEN('{'); }
+ YY_BREAK
+case 43:
+YY_RULE_SETUP
+#line 238 "ldlex.l"
+{ RTOKEN(')');}
+ YY_BREAK
+case 44:
+YY_RULE_SETUP
+#line 239 "ldlex.l"
+{ RTOKEN('(');}
+ YY_BREAK
+case 45:
+YY_RULE_SETUP
+#line 240 "ldlex.l"
+{ RTOKEN(':'); }
+ YY_BREAK
+case 46:
+YY_RULE_SETUP
+#line 241 "ldlex.l"
+{ RTOKEN(';');}
+ YY_BREAK
+case 47:
+YY_RULE_SETUP
+#line 242 "ldlex.l"
+{ RTOKEN(MEMORY);}
+ YY_BREAK
+case 48:
+YY_RULE_SETUP
+#line 243 "ldlex.l"
+{ RTOKEN(REGION_ALIAS);}
+ YY_BREAK
+case 49:
+YY_RULE_SETUP
+#line 244 "ldlex.l"
+{ RTOKEN(ORIGIN);}
+ YY_BREAK
+case 50:
+YY_RULE_SETUP
+#line 245 "ldlex.l"
+{ RTOKEN(VERSIONK);}
+ YY_BREAK
+case 51:
+YY_RULE_SETUP
+#line 246 "ldlex.l"
+{ RTOKEN(BLOCK);}
+ YY_BREAK
+case 52:
+YY_RULE_SETUP
+#line 247 "ldlex.l"
+{ RTOKEN(BIND);}
+ YY_BREAK
+case 53:
+YY_RULE_SETUP
+#line 248 "ldlex.l"
+{ RTOKEN(LENGTH);}
+ YY_BREAK
+case 54:
+YY_RULE_SETUP
+#line 249 "ldlex.l"
+{ RTOKEN(ALIGN_K);}
+ YY_BREAK
+case 55:
+YY_RULE_SETUP
+#line 250 "ldlex.l"
+{ RTOKEN(DATA_SEGMENT_ALIGN);}
+ YY_BREAK
+case 56:
+YY_RULE_SETUP
+#line 251 "ldlex.l"
+{ RTOKEN(DATA_SEGMENT_RELRO_END);}
+ YY_BREAK
+case 57:
+YY_RULE_SETUP
+#line 252 "ldlex.l"
+{ RTOKEN(DATA_SEGMENT_END);}
+ YY_BREAK
+case 58:
+YY_RULE_SETUP
+#line 253 "ldlex.l"
+{ RTOKEN(ADDR);}
+ YY_BREAK
+case 59:
+YY_RULE_SETUP
+#line 254 "ldlex.l"
+{ RTOKEN(LOADADDR);}
+ YY_BREAK
+case 60:
+YY_RULE_SETUP
+#line 255 "ldlex.l"
+{ RTOKEN(ALIGNOF); }
+ YY_BREAK
+case 61:
+YY_RULE_SETUP
+#line 256 "ldlex.l"
+{ RTOKEN(MAX_K); }
+ YY_BREAK
+case 62:
+YY_RULE_SETUP
+#line 257 "ldlex.l"
+{ RTOKEN(MIN_K); }
+ YY_BREAK
+case 63:
+YY_RULE_SETUP
+#line 258 "ldlex.l"
+{ RTOKEN(ASSERT_K); }
+ YY_BREAK
+case 64:
+YY_RULE_SETUP
+#line 259 "ldlex.l"
+{ RTOKEN(ENTRY);}
+ YY_BREAK
+case 65:
+YY_RULE_SETUP
+#line 260 "ldlex.l"
+{ RTOKEN(EXTERN);}
+ YY_BREAK
+case 66:
+YY_RULE_SETUP
+#line 261 "ldlex.l"
+{ RTOKEN(NEXT);}
+ YY_BREAK
+case 67:
+YY_RULE_SETUP
+#line 262 "ldlex.l"
+{ RTOKEN(SIZEOF_HEADERS);}
+ YY_BREAK
+case 68:
+YY_RULE_SETUP
+#line 263 "ldlex.l"
+{ RTOKEN(SIZEOF_HEADERS);}
+ YY_BREAK
+case 69:
+YY_RULE_SETUP
+#line 264 "ldlex.l"
+{ RTOKEN(SEGMENT_START);}
+ YY_BREAK
+case 70:
+YY_RULE_SETUP
+#line 265 "ldlex.l"
+{ RTOKEN(MAP);}
+ YY_BREAK
+case 71:
+YY_RULE_SETUP
+#line 266 "ldlex.l"
+{ RTOKEN(SIZEOF);}
+ YY_BREAK
+case 72:
+YY_RULE_SETUP
+#line 267 "ldlex.l"
+{ RTOKEN(TARGET_K);}
+ YY_BREAK
+case 73:
+YY_RULE_SETUP
+#line 268 "ldlex.l"
+{ RTOKEN(SEARCH_DIR);}
+ YY_BREAK
+case 74:
+YY_RULE_SETUP
+#line 269 "ldlex.l"
+{ RTOKEN(OUTPUT);}
+ YY_BREAK
+case 75:
+YY_RULE_SETUP
+#line 270 "ldlex.l"
+{ RTOKEN(INPUT);}
+ YY_BREAK
+case 76:
+YY_RULE_SETUP
+#line 271 "ldlex.l"
+{ RTOKEN(GROUP);}
+ YY_BREAK
+case 77:
+YY_RULE_SETUP
+#line 272 "ldlex.l"
+{ RTOKEN(AS_NEEDED);}
+ YY_BREAK
+case 78:
+YY_RULE_SETUP
+#line 273 "ldlex.l"
+{ RTOKEN(DEFINED);}
+ YY_BREAK
+case 79:
+YY_RULE_SETUP
+#line 274 "ldlex.l"
+{ RTOKEN(CREATE_OBJECT_SYMBOLS);}
+ YY_BREAK
+case 80:
+YY_RULE_SETUP
+#line 275 "ldlex.l"
+{ RTOKEN( CONSTRUCTORS);}
+ YY_BREAK
+case 81:
+YY_RULE_SETUP
+#line 276 "ldlex.l"
+{ RTOKEN(FORCE_COMMON_ALLOCATION);}
+ YY_BREAK
+case 82:
+YY_RULE_SETUP
+#line 277 "ldlex.l"
+{ RTOKEN(INHIBIT_COMMON_ALLOCATION);}
+ YY_BREAK
+case 83:
+YY_RULE_SETUP
+#line 278 "ldlex.l"
+{ RTOKEN(SECTIONS);}
+ YY_BREAK
+case 84:
+YY_RULE_SETUP
+#line 279 "ldlex.l"
+{ RTOKEN(INSERT_K);}
+ YY_BREAK
+case 85:
+YY_RULE_SETUP
+#line 280 "ldlex.l"
+{ RTOKEN(AFTER);}
+ YY_BREAK
+case 86:
+YY_RULE_SETUP
+#line 281 "ldlex.l"
+{ RTOKEN(BEFORE);}
+ YY_BREAK
+case 87:
+YY_RULE_SETUP
+#line 282 "ldlex.l"
+{ RTOKEN(FILL);}
+ YY_BREAK
+case 88:
+YY_RULE_SETUP
+#line 283 "ldlex.l"
+{ RTOKEN(STARTUP);}
+ YY_BREAK
+case 89:
+YY_RULE_SETUP
+#line 284 "ldlex.l"
+{ RTOKEN(OUTPUT_FORMAT);}
+ YY_BREAK
+case 90:
+YY_RULE_SETUP
+#line 285 "ldlex.l"
+{ RTOKEN( OUTPUT_ARCH);}
+ YY_BREAK
+case 91:
+YY_RULE_SETUP
+#line 286 "ldlex.l"
+{ RTOKEN(HLL);}
+ YY_BREAK
+case 92:
+YY_RULE_SETUP
+#line 287 "ldlex.l"
+{ RTOKEN(SYSLIB);}
+ YY_BREAK
+case 93:
+YY_RULE_SETUP
+#line 288 "ldlex.l"
+{ RTOKEN(FLOAT);}
+ YY_BREAK
+case 94:
+YY_RULE_SETUP
+#line 289 "ldlex.l"
+{ RTOKEN( QUAD);}
+ YY_BREAK
+case 95:
+YY_RULE_SETUP
+#line 290 "ldlex.l"
+{ RTOKEN( SQUAD);}
+ YY_BREAK
+case 96:
+YY_RULE_SETUP
+#line 291 "ldlex.l"
+{ RTOKEN( LONG);}
+ YY_BREAK
+case 97:
+YY_RULE_SETUP
+#line 292 "ldlex.l"
+{ RTOKEN( SHORT);}
+ YY_BREAK
+case 98:
+YY_RULE_SETUP
+#line 293 "ldlex.l"
+{ RTOKEN( BYTE);}
+ YY_BREAK
+case 99:
+YY_RULE_SETUP
+#line 294 "ldlex.l"
+{ RTOKEN(NOFLOAT);}
+ YY_BREAK
+case 100:
+YY_RULE_SETUP
+#line 295 "ldlex.l"
+{ RTOKEN(NOCROSSREFS);}
+ YY_BREAK
+case 101:
+YY_RULE_SETUP
+#line 296 "ldlex.l"
+{ RTOKEN(OVERLAY); }
+ YY_BREAK
+case 102:
+YY_RULE_SETUP
+#line 297 "ldlex.l"
+{ RTOKEN(SORT_BY_NAME); }
+ YY_BREAK
+case 103:
+YY_RULE_SETUP
+#line 298 "ldlex.l"
+{ RTOKEN(SORT_BY_ALIGNMENT); }
+ YY_BREAK
+case 104:
+YY_RULE_SETUP
+#line 299 "ldlex.l"
+{ RTOKEN(SORT_BY_NAME); }
+ YY_BREAK
+case 105:
+YY_RULE_SETUP
+#line 300 "ldlex.l"
+{ RTOKEN(NOLOAD);}
+ YY_BREAK
+case 106:
+YY_RULE_SETUP
+#line 301 "ldlex.l"
+{ RTOKEN(DSECT);}
+ YY_BREAK
+case 107:
+YY_RULE_SETUP
+#line 302 "ldlex.l"
+{ RTOKEN(COPY);}
+ YY_BREAK
+case 108:
+YY_RULE_SETUP
+#line 303 "ldlex.l"
+{ RTOKEN(INFO);}
+ YY_BREAK
+case 109:
+YY_RULE_SETUP
+#line 304 "ldlex.l"
+{ RTOKEN(OVERLAY);}
+ YY_BREAK
+case 110:
+YY_RULE_SETUP
+#line 305 "ldlex.l"
+{ RTOKEN(ONLY_IF_RO); }
+ YY_BREAK
+case 111:
+YY_RULE_SETUP
+#line 306 "ldlex.l"
+{ RTOKEN(ONLY_IF_RW); }
+ YY_BREAK
+case 112:
+YY_RULE_SETUP
+#line 307 "ldlex.l"
+{ RTOKEN(SPECIAL); }
+ YY_BREAK
+case 113:
+YY_RULE_SETUP
+#line 308 "ldlex.l"
+{ RTOKEN(ORIGIN);}
+ YY_BREAK
+case 114:
+YY_RULE_SETUP
+#line 309 "ldlex.l"
+{ RTOKEN(ORIGIN);}
+ YY_BREAK
+case 115:
+YY_RULE_SETUP
+#line 310 "ldlex.l"
+{ RTOKEN( LENGTH);}
+ YY_BREAK
+case 116:
+YY_RULE_SETUP
+#line 311 "ldlex.l"
+{ RTOKEN( LENGTH);}
+ YY_BREAK
+case 117:
+YY_RULE_SETUP
+#line 312 "ldlex.l"
+{ RTOKEN(INCLUDE);}
+ YY_BREAK
+case 118:
+YY_RULE_SETUP
+#line 313 "ldlex.l"
+{ RTOKEN (PHDRS); }
+ YY_BREAK
+case 119:
+YY_RULE_SETUP
+#line 314 "ldlex.l"
+{ RTOKEN(AT);}
+ YY_BREAK
+case 120:
+YY_RULE_SETUP
+#line 315 "ldlex.l"
+{ RTOKEN(SUBALIGN);}
+ YY_BREAK
+case 121:
+YY_RULE_SETUP
+#line 316 "ldlex.l"
+{ RTOKEN(PROVIDE); }
+ YY_BREAK
+case 122:
+YY_RULE_SETUP
+#line 317 "ldlex.l"
+{ RTOKEN(PROVIDE_HIDDEN); }
+ YY_BREAK
+case 123:
+YY_RULE_SETUP
+#line 318 "ldlex.l"
+{ RTOKEN(KEEP); }
+ YY_BREAK
+case 124:
+YY_RULE_SETUP
+#line 319 "ldlex.l"
+{ RTOKEN(EXCLUDE_FILE); }
+ YY_BREAK
+case 125:
+YY_RULE_SETUP
+#line 320 "ldlex.l"
+{ RTOKEN(CONSTANT);}
+ YY_BREAK
+case 126:
+/* rule 126 can match eol */
+YY_RULE_SETUP
+#line 321 "ldlex.l"
+{ ++ lineno; }
+ YY_BREAK
+case 127:
+/* rule 127 can match eol */
+YY_RULE_SETUP
+#line 322 "ldlex.l"
+{ ++ lineno; RTOKEN(NEWLINE); }
+ YY_BREAK
+case 128:
+YY_RULE_SETUP
+#line 323 "ldlex.l"
+{ /* Mri comment line */ }
+ YY_BREAK
+case 129:
+YY_RULE_SETUP
+#line 324 "ldlex.l"
+{ /* Mri comment line */ }
+ YY_BREAK
+case 130:
+YY_RULE_SETUP
+#line 325 "ldlex.l"
+{ RTOKEN(ENDWORD); }
+ YY_BREAK
+case 131:
+YY_RULE_SETUP
+#line 326 "ldlex.l"
+{ RTOKEN(ALIGNMOD);}
+ YY_BREAK
+case 132:
+YY_RULE_SETUP
+#line 327 "ldlex.l"
+{ RTOKEN(ALIGN_K);}
+ YY_BREAK
+case 133:
+YY_RULE_SETUP
+#line 328 "ldlex.l"
+{ RTOKEN(CHIP); }
+ YY_BREAK
+case 134:
+YY_RULE_SETUP
+#line 329 "ldlex.l"
+{ RTOKEN(BASE); }
+ YY_BREAK
+case 135:
+YY_RULE_SETUP
+#line 330 "ldlex.l"
+{ RTOKEN(ALIAS); }
+ YY_BREAK
+case 136:
+YY_RULE_SETUP
+#line 331 "ldlex.l"
+{ RTOKEN(TRUNCATE); }
+ YY_BREAK
+case 137:
+YY_RULE_SETUP
+#line 332 "ldlex.l"
+{ RTOKEN(LOAD); }
+ YY_BREAK
+case 138:
+YY_RULE_SETUP
+#line 333 "ldlex.l"
+{ RTOKEN(PUBLIC); }
+ YY_BREAK
+case 139:
+YY_RULE_SETUP
+#line 334 "ldlex.l"
+{ RTOKEN(ORDER); }
+ YY_BREAK
+case 140:
+YY_RULE_SETUP
+#line 335 "ldlex.l"
+{ RTOKEN(NAMEWORD); }
+ YY_BREAK
+case 141:
+YY_RULE_SETUP
+#line 336 "ldlex.l"
+{ RTOKEN(FORMAT); }
+ YY_BREAK
+case 142:
+YY_RULE_SETUP
+#line 337 "ldlex.l"
+{ RTOKEN(CASE); }
+ YY_BREAK
+case 143:
+YY_RULE_SETUP
+#line 338 "ldlex.l"
+{ RTOKEN(START); }
+ YY_BREAK
+case 144:
+YY_RULE_SETUP
+#line 339 "ldlex.l"
+{ RTOKEN(LIST); /* LIST and ignore to end of line */ }
+ YY_BREAK
+case 145:
+YY_RULE_SETUP
+#line 340 "ldlex.l"
+{ RTOKEN(SECT); }
+ YY_BREAK
+case 146:
+YY_RULE_SETUP
+#line 341 "ldlex.l"
+{ RTOKEN(ABSOLUTE); }
+ YY_BREAK
+case 147:
+YY_RULE_SETUP
+#line 342 "ldlex.l"
+{ RTOKEN(ENDWORD); }
+ YY_BREAK
+case 148:
+YY_RULE_SETUP
+#line 343 "ldlex.l"
+{ RTOKEN(ALIGNMOD);}
+ YY_BREAK
+case 149:
+YY_RULE_SETUP
+#line 344 "ldlex.l"
+{ RTOKEN(ALIGN_K);}
+ YY_BREAK
+case 150:
+YY_RULE_SETUP
+#line 345 "ldlex.l"
+{ RTOKEN(CHIP); }
+ YY_BREAK
+case 151:
+YY_RULE_SETUP
+#line 346 "ldlex.l"
+{ RTOKEN(BASE); }
+ YY_BREAK
+case 152:
+YY_RULE_SETUP
+#line 347 "ldlex.l"
+{ RTOKEN(ALIAS); }
+ YY_BREAK
+case 153:
+YY_RULE_SETUP
+#line 348 "ldlex.l"
+{ RTOKEN(TRUNCATE); }
+ YY_BREAK
+case 154:
+YY_RULE_SETUP
+#line 349 "ldlex.l"
+{ RTOKEN(LOAD); }
+ YY_BREAK
+case 155:
+YY_RULE_SETUP
+#line 350 "ldlex.l"
+{ RTOKEN(PUBLIC); }
+ YY_BREAK
+case 156:
+YY_RULE_SETUP
+#line 351 "ldlex.l"
+{ RTOKEN(ORDER); }
+ YY_BREAK
+case 157:
+YY_RULE_SETUP
+#line 352 "ldlex.l"
+{ RTOKEN(NAMEWORD); }
+ YY_BREAK
+case 158:
+YY_RULE_SETUP
+#line 353 "ldlex.l"
+{ RTOKEN(FORMAT); }
+ YY_BREAK
+case 159:
+YY_RULE_SETUP
+#line 354 "ldlex.l"
+{ RTOKEN(CASE); }
+ YY_BREAK
+case 160:
+YY_RULE_SETUP
+#line 355 "ldlex.l"
+{ RTOKEN(EXTERN); }
+ YY_BREAK
+case 161:
+YY_RULE_SETUP
+#line 356 "ldlex.l"
+{ RTOKEN(START); }
+ YY_BREAK
+case 162:
+YY_RULE_SETUP
+#line 357 "ldlex.l"
+{ RTOKEN(LIST); /* LIST and ignore to end of line */ }
+ YY_BREAK
+case 163:
+YY_RULE_SETUP
+#line 358 "ldlex.l"
+{ RTOKEN(SECT); }
+ YY_BREAK
+case 164:
+YY_RULE_SETUP
+#line 359 "ldlex.l"
+{ RTOKEN(ABSOLUTE); }
+ YY_BREAK
+case 165:
+YY_RULE_SETUP
+#line 361 "ldlex.l"
+{
+/* Filename without commas, needed to parse mri stuff */
+ yylval.name = xstrdup (yytext);
+ return NAME;
+ }
+ YY_BREAK
+case 166:
+YY_RULE_SETUP
+#line 368 "ldlex.l"
+{
+ yylval.name = xstrdup (yytext);
+ return NAME;
+ }
+ YY_BREAK
+case 167:
+YY_RULE_SETUP
+#line 372 "ldlex.l"
+{
+ yylval.name = xstrdup (yytext + 2);
+ return LNAME;
+ }
+ YY_BREAK
+case 168:
+YY_RULE_SETUP
+#line 376 "ldlex.l"
+{
+ yylval.name = xstrdup (yytext);
+ return NAME;
+ }
+ YY_BREAK
+case 169:
+YY_RULE_SETUP
+#line 380 "ldlex.l"
+{
+ yylval.name = xstrdup (yytext + 2);
+ return LNAME;
+ }
+ YY_BREAK
+case 170:
+YY_RULE_SETUP
+#line 384 "ldlex.l"
+{
+ /* Annoyingly, this pattern can match comments, and we have
+ longest match issues to consider. So if the first two
+ characters are a comment opening, put the input back and
+ try again. */
+ if (yytext[0] == '/' && yytext[1] == '*')
+ {
+ yyless (2);
+ comment ();
+ }
+ else
+ {
+ yylval.name = xstrdup (yytext);
+ return NAME;
+ }
+ }
+ YY_BREAK
+case 171:
+/* rule 171 can match eol */
+YY_RULE_SETUP
+#line 401 "ldlex.l"
+{
+ /* No matter the state, quotes
+ give what's inside */
+ yylval.name = xstrdup (yytext + 1);
+ yylval.name[yyleng - 2] = 0;
+ return NAME;
+ }
+ YY_BREAK
+case 172:
+/* rule 172 can match eol */
+YY_RULE_SETUP
+#line 408 "ldlex.l"
+{ lineno++;}
+ YY_BREAK
+case 173:
+YY_RULE_SETUP
+#line 409 "ldlex.l"
+{ }
+ YY_BREAK
+case 174:
+YY_RULE_SETUP
+#line 411 "ldlex.l"
+{ return *yytext; }
+ YY_BREAK
+case 175:
+YY_RULE_SETUP
+#line 413 "ldlex.l"
+{ RTOKEN(GLOBAL); }
+ YY_BREAK
+case 176:
+YY_RULE_SETUP
+#line 415 "ldlex.l"
+{ RTOKEN(LOCAL); }
+ YY_BREAK
+case 177:
+YY_RULE_SETUP
+#line 417 "ldlex.l"
+{ RTOKEN(EXTERN); }
+ YY_BREAK
+case 178:
+YY_RULE_SETUP
+#line 419 "ldlex.l"
+{ yylval.name = xstrdup (yytext);
+ return VERS_IDENTIFIER; }
+ YY_BREAK
+case 179:
+YY_RULE_SETUP
+#line 422 "ldlex.l"
+{ yylval.name = xstrdup (yytext);
+ return VERS_TAG; }
+ YY_BREAK
+case 180:
+YY_RULE_SETUP
+#line 425 "ldlex.l"
+{ BEGIN(VERS_SCRIPT); return *yytext; }
+ YY_BREAK
+case 181:
+YY_RULE_SETUP
+#line 427 "ldlex.l"
+{ BEGIN(VERS_NODE);
+ vers_node_nesting = 0;
+ return *yytext;
+ }
+ YY_BREAK
+case 182:
+YY_RULE_SETUP
+#line 431 "ldlex.l"
+{ return *yytext; }
+ YY_BREAK
+case 183:
+YY_RULE_SETUP
+#line 432 "ldlex.l"
+{ vers_node_nesting++; return *yytext; }
+ YY_BREAK
+case 184:
+YY_RULE_SETUP
+#line 433 "ldlex.l"
+{ if (--vers_node_nesting < 0)
+ BEGIN(VERS_SCRIPT);
+ return *yytext;
+ }
+ YY_BREAK
+case 185:
+/* rule 185 can match eol */
+YY_RULE_SETUP
+#line 438 "ldlex.l"
+{ lineno++; }
+ YY_BREAK
+case 186:
+YY_RULE_SETUP
+#line 440 "ldlex.l"
+{ /* Eat up comments */ }
+ YY_BREAK
+case 187:
+YY_RULE_SETUP
+#line 442 "ldlex.l"
+{ /* Eat up whitespace */ }
+ YY_BREAK
+case YY_STATE_EOF(INITIAL):
+case YY_STATE_EOF(SCRIPT):
+case YY_STATE_EOF(EXPRESSION):
+case YY_STATE_EOF(BOTH):
+case YY_STATE_EOF(DEFSYMEXP):
+case YY_STATE_EOF(MRI):
+case YY_STATE_EOF(VERS_START):
+case YY_STATE_EOF(VERS_SCRIPT):
+case YY_STATE_EOF(VERS_NODE):
+#line 444 "ldlex.l"
+{
+ include_stack_ptr--;
+
+ if (include_stack_ptr == 0)
+ {
+ yyterminate ();
+ }
+ else
+ {
+ yy_switch_to_buffer (include_stack[include_stack_ptr]);
+ }
+
+ ldfile_input_filename = file_name_stack[include_stack_ptr - 1];
+ lineno = lineno_stack[include_stack_ptr];
+
+ return END;
+}
+ YY_BREAK
+case 188:
+YY_RULE_SETUP
+#line 462 "ldlex.l"
+lex_warn_invalid (" in script", yytext);
+ YY_BREAK
+case 189:
+YY_RULE_SETUP
+#line 463 "ldlex.l"
+lex_warn_invalid (" in expression", yytext);
+ YY_BREAK
+case 190:
+YY_RULE_SETUP
+#line 465 "ldlex.l"
+ECHO;
+ YY_BREAK
+#line 3027 "ldlex.c"
+
+ case YY_END_OF_BUFFER:
+ {
+ /* Amount of text matched not including the EOB char. */
+ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+
+ /* Undo the effects of YY_DO_BEFORE_ACTION. */
+ *yy_cp = (yy_hold_char);
+ YY_RESTORE_YY_MORE_OFFSET
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+ {
+ /* We're scanning a new file or input source. It's
+ * possible that this happened because the user
+ * just pointed yyin at a new source and called
+ * yylex(). If so, then we have to assure
+ * consistency between YY_CURRENT_BUFFER and our
+ * globals. Here is the right place to do so, because
+ * this is the first action (other than possibly a
+ * back-up) that will match for the new input source.
+ */
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+ }
+
+ /* Note that here we test for yy_c_buf_p "<=" to the position
+ * of the first EOB in the buffer, since yy_c_buf_p will
+ * already have been incremented past the NUL character
+ * (since all states make transitions on EOB to the
+ * end-of-buffer state). Contrast this with the test
+ * in input().
+ */
+ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+ { /* This was really a NUL. */
+ yy_state_type yy_next_state;
+
+ (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state( );
+
+ /* Okay, we're now positioned to make the NUL
+ * transition. We couldn't have
+ * yy_get_previous_state() go ahead and do it
+ * for us because it doesn't know how to deal
+ * with the possibility of jamming (and we don't
+ * want to build jamming into it because then it
+ * will run more slowly).
+ */
+
+ yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+
+ if ( yy_next_state )
+ {
+ /* Consume the NUL. */
+ yy_cp = ++(yy_c_buf_p);
+ yy_current_state = yy_next_state;
+ goto yy_match;
+ }
+
+ else
+ {
+ yy_cp = (yy_c_buf_p);
+ goto yy_find_action;
+ }
+ }
+
+ else switch ( yy_get_next_buffer( ) )
+ {
+ case EOB_ACT_END_OF_FILE:
+ {
+ (yy_did_buffer_switch_on_eof) = 0;
+
+ if ( yywrap( ) )
+ {
+ /* Note: because we've taken care in
+ * yy_get_next_buffer() to have set up
+ * yytext, we can now set up
+ * yy_c_buf_p so that if some total
+ * hoser (like flex itself) wants to
+ * call the scanner after we return the
+ * YY_NULL, it'll still work - another
+ * YY_NULL will get returned.
+ */
+ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+
+ yy_act = YY_STATE_EOF(YY_START);
+ goto do_action;
+ }
+
+ else
+ {
+ if ( ! (yy_did_buffer_switch_on_eof) )
+ YY_NEW_FILE;
+ }
+ break;
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ (yy_c_buf_p) =
+ (yytext_ptr) + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state( );
+
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+ goto yy_match;
+
+ case EOB_ACT_LAST_MATCH:
+ (yy_c_buf_p) =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+
+ yy_current_state = yy_get_previous_state( );
+
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+ goto yy_find_action;
+ }
+ break;
+ }
+
+ default:
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--no action found" );
+ } /* end of action switch */
+ } /* end of scanning one token */
+} /* end of yylex */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ * EOB_ACT_LAST_MATCH -
+ * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ * EOB_ACT_END_OF_FILE - end of file
+ */
+static int yy_get_next_buffer (void)
+{
+ register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+ register char *source = (yytext_ptr);
+ register int number_to_move, i;
+ int ret_val;
+
+ if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--end of buffer missed" );
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+ { /* Don't try to fill the buffer, so this is an EOF. */
+ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+ {
+ /* We matched a single character, the EOB, so
+ * treat this as a final EOF.
+ */
+ return EOB_ACT_END_OF_FILE;
+ }
+
+ else
+ {
+ /* We matched some text prior to the EOB, first
+ * process it.
+ */
+ return EOB_ACT_LAST_MATCH;
+ }
+ }
+
+ /* Try to read more data. */
+
+ /* First move last chars to start of buffer. */
+ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+
+ for ( i = 0; i < number_to_move; ++i )
+ *(dest++) = *(source++);
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+ /* don't do the read, it's not guaranteed to return an EOF,
+ * just force an EOF
+ */
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+
+ else
+ {
+ yy_size_t num_to_read =
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+ while ( num_to_read <= 0 )
+ { /* Not enough room in the buffer - grow it. */
+
+ /* just a shorter name for the current buffer */
+ YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
+
+ int yy_c_buf_p_offset =
+ (int) ((yy_c_buf_p) - b->yy_ch_buf);
+
+ if ( b->yy_is_our_buffer )
+ {
+ yy_size_t new_size = b->yy_buf_size * 2;
+
+ if ( new_size <= 0 )
+ b->yy_buf_size += b->yy_buf_size / 8;
+ else
+ b->yy_buf_size *= 2;
+
+ b->yy_ch_buf = (char *)
+ /* Include room in for 2 EOB chars. */
+ yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 );
+ }
+ else
+ /* Can't grow it, we don't own it. */
+ b->yy_ch_buf = 0;
+
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR(
+ "fatal error - scanner input buffer overflow" );
+
+ (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+ num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+ number_to_move - 1;
+
+ }
+
+ if ( num_to_read > YY_READ_BUF_SIZE )
+ num_to_read = YY_READ_BUF_SIZE;
+
+ /* Read in more data. */
+ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+ (yy_n_chars), num_to_read );
+
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ if ( (yy_n_chars) == 0 )
+ {
+ if ( number_to_move == YY_MORE_ADJ )
+ {
+ ret_val = EOB_ACT_END_OF_FILE;
+ yyrestart(yyin );
+ }
+
+ else
+ {
+ ret_val = EOB_ACT_LAST_MATCH;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+ YY_BUFFER_EOF_PENDING;
+ }
+ }
+
+ else
+ ret_val = EOB_ACT_CONTINUE_SCAN;
+
+ if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+ /* Extend the array by 50%, plus the number we really need. */
+ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size );
+ if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+ }
+
+ (yy_n_chars) += number_to_move;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+
+ (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+ return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+ static yy_state_type yy_get_previous_state (void)
+{
+ register yy_state_type yy_current_state;
+ register char *yy_cp;
+
+ yy_current_state = (yy_start);
+
+ for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+ {
+ register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 1593 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ }
+
+ return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ * next_state = yy_try_NUL_trans( current_state );
+ */
+ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
+{
+ register int yy_is_jam;
+ register char *yy_cp = (yy_c_buf_p);
+
+ register YY_CHAR yy_c = 1;
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 1593 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ yy_is_jam = (yy_current_state == 1592);
+
+ return yy_is_jam ? 0 : yy_current_state;
+}
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+ static int yyinput (void)
+#else
+ static int input (void)
+#endif
+
+{
+ int c;
+
+ *(yy_c_buf_p) = (yy_hold_char);
+
+ if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+ {
+ /* yy_c_buf_p now points to the character we want to return.
+ * If this occurs *before* the EOB characters, then it's a
+ * valid NUL; if not, then we've hit the end of the buffer.
+ */
+ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+ /* This was really a NUL. */
+ *(yy_c_buf_p) = '\0';
+
+ else
+ { /* need more input */
+ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
+ ++(yy_c_buf_p);
+
+ switch ( yy_get_next_buffer( ) )
+ {
+ case EOB_ACT_LAST_MATCH:
+ /* This happens because yy_g_n_b()
+ * sees that we've accumulated a
+ * token and flags that we need to
+ * try matching the token before
+ * proceeding. But for input(),
+ * there's no matching to consider.
+ * So convert the EOB_ACT_LAST_MATCH
+ * to EOB_ACT_END_OF_FILE.
+ */
+
+ /* Reset buffer status. */
+ yyrestart(yyin );
+
+ /*FALLTHROUGH*/
+
+ case EOB_ACT_END_OF_FILE:
+ {
+ if ( yywrap( ) )
+ return 0;
+
+ if ( ! (yy_did_buffer_switch_on_eof) )
+ YY_NEW_FILE;
+#ifdef __cplusplus
+ return yyinput();
+#else
+ return input();
+#endif
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ (yy_c_buf_p) = (yytext_ptr) + offset;
+ break;
+ }
+ }
+ }
+
+ c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
+ *(yy_c_buf_p) = '\0'; /* preserve yytext */
+ (yy_hold_char) = *++(yy_c_buf_p);
+
+ return c;
+}
+#endif /* ifndef YY_NO_INPUT */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ *
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+ void yyrestart (FILE * input_file )
+{
+
+ if ( ! YY_CURRENT_BUFFER ){
+ yyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer(yyin,YY_BUF_SIZE );
+ }
+
+ yy_init_buffer(YY_CURRENT_BUFFER,input_file );
+ yy_load_buffer_state( );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ *
+ */
+ void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer )
+{
+
+ /* TODO. We should be able to replace this entire function body
+ * with
+ * yypop_buffer_state();
+ * yypush_buffer_state(new_buffer);
+ */
+ yyensure_buffer_stack ();
+ if ( YY_CURRENT_BUFFER == new_buffer )
+ return;
+
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+ yy_load_buffer_state( );
+
+ /* We don't actually know whether we did this switch during
+ * EOF (yywrap()) processing, but the only time this flag
+ * is looked at is after yywrap() is called, so it's safe
+ * to go ahead and always set it.
+ */
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+
+static void yy_load_buffer_state (void)
+{
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+ yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+ (yy_hold_char) = *(yy_c_buf_p);
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ *
+ * @return the allocated buffer state.
+ */
+ YY_BUFFER_STATE yy_create_buffer (FILE * file, int size )
+{
+ YY_BUFFER_STATE b;
+
+ b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_buf_size = size;
+
+ /* yy_ch_buf has to be 2 characters longer than the size given because
+ * we need to put in 2 end-of-buffer characters.
+ */
+ b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 );
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_is_our_buffer = 1;
+
+ yy_init_buffer(b,file );
+
+ return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with yy_create_buffer()
+ *
+ */
+ void yy_delete_buffer (YY_BUFFER_STATE b )
+{
+
+ if ( ! b )
+ return;
+
+ if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+ if ( b->yy_is_our_buffer )
+ yyfree((void *) b->yy_ch_buf );
+
+ yyfree((void *) b );
+}
+
+#ifndef __cplusplus
+extern int isatty (int );
+#endif /* __cplusplus */
+
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a yyrestart() or at EOF.
+ */
+ static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file )
+
+{
+ int oerrno = errno;
+
+ yy_flush_buffer(b );
+
+ b->yy_input_file = file;
+ b->yy_fill_buffer = 1;
+
+ /* If b is the current buffer, then yy_init_buffer was _probably_
+ * called from yyrestart() or through yy_get_next_buffer.
+ * In that case, we don't want to reset the lineno or column.
+ */
+ if (b != YY_CURRENT_BUFFER){
+ b->yy_bs_lineno = 1;
+ b->yy_bs_column = 0;
+ }
+
+ b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+
+ errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ *
+ */
+ void yy_flush_buffer (YY_BUFFER_STATE b )
+{
+ if ( ! b )
+ return;
+
+ b->yy_n_chars = 0;
+
+ /* We always need two end-of-buffer characters. The first causes
+ * a transition to the end-of-buffer state. The second causes
+ * a jam in that state.
+ */
+ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+ b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+ b->yy_buf_pos = &b->yy_ch_buf[0];
+
+ b->yy_at_bol = 1;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ if ( b == YY_CURRENT_BUFFER )
+ yy_load_buffer_state( );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ * the current state. This function will allocate the stack
+ * if necessary.
+ * @param new_buffer The new state.
+ *
+ */
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
+{
+ if (new_buffer == NULL)
+ return;
+
+ yyensure_buffer_stack();
+
+ /* This block is copied from yy_switch_to_buffer. */
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ /* Only push if top exists. Otherwise, replace top. */
+ if (YY_CURRENT_BUFFER)
+ (yy_buffer_stack_top)++;
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+ /* copied from yy_switch_to_buffer. */
+ yy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ * The next element becomes the new top.
+ *
+ */
+void yypop_buffer_state (void)
+{
+ if (!YY_CURRENT_BUFFER)
+ return;
+
+ yy_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ if ((yy_buffer_stack_top) > 0)
+ --(yy_buffer_stack_top);
+
+ if (YY_CURRENT_BUFFER) {
+ yy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
+ }
+}
+
+/* Allocates the stack if it does not exist.
+ * Guarantees space for at least one push.
+ */
+static void yyensure_buffer_stack (void)
+{
+ yy_size_t num_to_alloc;
+
+ if (!(yy_buffer_stack)) {
+
+ /* First allocation is just for 2 elements, since we don't know if this
+ * scanner will even need a stack. We use 2 instead of 1 to avoid an
+ * immediate realloc on the next call.
+ */
+ num_to_alloc = 1;
+ (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
+ (num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+ memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+
+ (yy_buffer_stack_max) = num_to_alloc;
+ (yy_buffer_stack_top) = 0;
+ return;
+ }
+
+ if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+
+ /* Increase the buffer to prepare for a possible push. */
+ int grow_size = 8 /* arbitrary grow size */;
+
+ num_to_alloc = (yy_buffer_stack_max) + grow_size;
+ (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
+ ((yy_buffer_stack),
+ num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+ /* zero only the new slots.*/
+ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+ (yy_buffer_stack_max) = num_to_alloc;
+ }
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size )
+{
+ YY_BUFFER_STATE b;
+
+ if ( size < 2 ||
+ base[size-2] != YY_END_OF_BUFFER_CHAR ||
+ base[size-1] != YY_END_OF_BUFFER_CHAR )
+ /* They forgot to leave room for the EOB's. */
+ return 0;
+
+ b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+ b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
+ b->yy_buf_pos = b->yy_ch_buf = base;
+ b->yy_is_our_buffer = 0;
+ b->yy_input_file = 0;
+ b->yy_n_chars = b->yy_buf_size;
+ b->yy_is_interactive = 0;
+ b->yy_at_bol = 1;
+ b->yy_fill_buffer = 0;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ yy_switch_to_buffer(b );
+
+ return b;
+}
+
+/** Setup the input buffer state to scan a string. The next call to yylex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ *
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ * yy_scan_bytes() instead.
+ */
+YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
+{
+
+ return yy_scan_bytes(yystr,strlen(yystr) );
+}
+
+/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+ * scan from a @e copy of @a bytes.
+ * @param bytes the byte buffer to scan
+ * @param len the number of bytes in the buffer pointed to by @a bytes.
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len )
+{
+ YY_BUFFER_STATE b;
+ char *buf;
+ yy_size_t n, i;
+
+ /* Get memory for full buffer, including space for trailing EOB's. */
+ n = _yybytes_len + 2;
+ buf = (char *) yyalloc(n );
+ if ( ! buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+ for ( i = 0; i < _yybytes_len; ++i )
+ buf[i] = yybytes[i];
+
+ buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+ b = yy_scan_buffer(buf,n );
+ if ( ! b )
+ YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+ /* It's okay to grow etc. this buffer, and we should throw it
+ * away when we're done.
+ */
+ b->yy_is_our_buffer = 1;
+
+ return b;
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+static void yy_fatal_error (yyconst char* msg )
+{
+ (void) fprintf( stderr, "%s\n", msg );
+ exit( YY_EXIT_FAILURE );
+}
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ yytext[yyleng] = (yy_hold_char); \
+ (yy_c_buf_p) = yytext + yyless_macro_arg; \
+ (yy_hold_char) = *(yy_c_buf_p); \
+ *(yy_c_buf_p) = '\0'; \
+ yyleng = yyless_macro_arg; \
+ } \
+ while ( 0 )
+
+/* Accessor methods (get/set functions) to struct members. */
+
+/** Get the current line number.
+ *
+ */
+int yyget_lineno (void)
+{
+
+ return yylineno;
+}
+
+/** Get the input stream.
+ *
+ */
+FILE *yyget_in (void)
+{
+ return yyin;
+}
+
+/** Get the output stream.
+ *
+ */
+FILE *yyget_out (void)
+{
+ return yyout;
+}
+
+/** Get the length of the current token.
+ *
+ */
+yy_size_t yyget_leng (void)
+{
+ return yyleng;
+}
+
+/** Get the current token.
+ *
+ */
+
+char *yyget_text (void)
+{
+ return yytext;
+}
+
+/** Set the current line number.
+ * @param line_number
+ *
+ */
+void yyset_lineno (int line_number )
+{
+
+ yylineno = line_number;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ *
+ * @see yy_switch_to_buffer
+ */
+void yyset_in (FILE * in_str )
+{
+ yyin = in_str ;
+}
+
+void yyset_out (FILE * out_str )
+{
+ yyout = out_str ;
+}
+
+int yyget_debug (void)
+{
+ return yy_flex_debug;
+}
+
+void yyset_debug (int bdebug )
+{
+ yy_flex_debug = bdebug ;
+}
+
+static int yy_init_globals (void)
+{
+ /* Initialization is the same as for the non-reentrant scanner.
+ * This function is called from yylex_destroy(), so don't allocate here.
+ */
+
+ (yy_buffer_stack) = 0;
+ (yy_buffer_stack_top) = 0;
+ (yy_buffer_stack_max) = 0;
+ (yy_c_buf_p) = (char *) 0;
+ (yy_init) = 0;
+ (yy_start) = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+ yyin = stdin;
+ yyout = stdout;
+#else
+ yyin = (FILE *) 0;
+ yyout = (FILE *) 0;
+#endif
+
+ /* For future reference: Set errno on error, since we are called by
+ * yylex_init()
+ */
+ return 0;
+}
+
+/* yylex_destroy is for both reentrant and non-reentrant scanners. */
+int yylex_destroy (void)
+{
+
+ /* Pop the buffer stack, destroying each element. */
+ while(YY_CURRENT_BUFFER){
+ yy_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ yypop_buffer_state();
+ }
+
+ /* Destroy the stack itself. */
+ yyfree((yy_buffer_stack) );
+ (yy_buffer_stack) = NULL;
+
+ /* Reset the globals. This is important in a non-reentrant scanner so the next time
+ * yylex() is called, initialization will occur. */
+ yy_init_globals( );
+
+ return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+{
+ register int i;
+ for ( i = 0; i < n; ++i )
+ s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s )
+{
+ register int n;
+ for ( n = 0; s[n]; ++n )
+ ;
+
+ return n;
+}
+#endif
+
+void *yyalloc (yy_size_t size )
+{
+ return (void *) malloc( size );
+}
+
+void *yyrealloc (void * ptr, yy_size_t size )
+{
+ /* The cast to (char *) in the following accommodates both
+ * implementations that use char* generic pointers, and those
+ * that use void* generic pointers. It works with the latter
+ * because both ANSI C and C++ allow castless assignment from
+ * any pointer type to void*, and deal with argument conversions
+ * as though doing an assignment.
+ */
+ return (void *) realloc( (char *) ptr, size );
+}
+
+void yyfree (void * ptr )
+{
+ free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+#line 465 "ldlex.l"
+
+
+
+
+/* Switch flex to reading script file NAME, open on FILE,
+ saving the current input info on the include stack. */
+
+void
+lex_push_file (FILE *file, const char *name)
+{
+ if (include_stack_ptr >= MAX_INCLUDE_DEPTH)
+ {
+ einfo ("%F:includes nested too deeply\n");
+ }
+ file_name_stack[include_stack_ptr] = name;
+ lineno_stack[include_stack_ptr] = lineno;
+ include_stack[include_stack_ptr] = YY_CURRENT_BUFFER;
+
+ include_stack_ptr++;
+ lineno = 1;
+ yyin = file;
+ yy_switch_to_buffer (yy_create_buffer (yyin, YY_BUF_SIZE));
+}
+
+/* Return a newly created flex input buffer containing STRING,
+ which is SIZE bytes long. */
+
+static YY_BUFFER_STATE
+yy_create_string_buffer (const char *string, size_t size)
+{
+ YY_BUFFER_STATE b;
+
+ /* Calls to m-alloc get turned by sed into xm-alloc. */
+ b = malloc (sizeof (struct yy_buffer_state));
+ b->yy_input_file = 0;
+ b->yy_buf_size = size;
+
+ /* yy_ch_buf has to be 2 characters longer than the size given because
+ we need to put in 2 end-of-buffer characters. */
+ b->yy_ch_buf = malloc ((unsigned) (b->yy_buf_size + 3));
+
+ b->yy_ch_buf[0] = '\n';
+ strcpy (b->yy_ch_buf+1, string);
+ b->yy_ch_buf[size+1] = YY_END_OF_BUFFER_CHAR;
+ b->yy_ch_buf[size+2] = YY_END_OF_BUFFER_CHAR;
+ b->yy_n_chars = size+1;
+ b->yy_buf_pos = &b->yy_ch_buf[1];
+
+ b->yy_is_our_buffer = 1;
+ b->yy_is_interactive = 0;
+ b->yy_at_bol = 1;
+ b->yy_fill_buffer = 0;
+
+ /* flex 2.4.7 changed the interface. FIXME: We should not be using
+ a flex internal interface in the first place! */
+#ifdef YY_BUFFER_NEW
+ b->yy_buffer_status = YY_BUFFER_NEW;
+#else
+ b->yy_eof_status = EOF_NOT_SEEN;
+#endif
+
+ return b;
+}
+
+/* Switch flex to reading from STRING, saving the current input info
+ on the include stack. */
+
+void
+lex_redirect (const char *string)
+{
+ YY_BUFFER_STATE tmp;
+
+ yy_init = 0;
+ if (include_stack_ptr >= MAX_INCLUDE_DEPTH)
+ {
+ einfo("%F: macros nested too deeply\n");
+ }
+ file_name_stack[include_stack_ptr] = "redirect";
+ lineno_stack[include_stack_ptr] = lineno;
+ include_stack[include_stack_ptr] = YY_CURRENT_BUFFER;
+ include_stack_ptr++;
+ lineno = 1;
+ tmp = yy_create_string_buffer (string, strlen (string));
+ yy_switch_to_buffer (tmp);
+}
+
+/* Functions to switch to a different flex start condition,
+ saving the current start condition on `state_stack'. */
+
+static int state_stack[MAX_INCLUDE_DEPTH * 2];
+static int *state_stack_p = state_stack;
+
+void
+ldlex_script (void)
+{
+ *(state_stack_p)++ = yy_start;
+ BEGIN (SCRIPT);
+}
+
+void
+ldlex_mri_script (void)
+{
+ *(state_stack_p)++ = yy_start;
+ BEGIN (MRI);
+}
+
+void
+ldlex_version_script (void)
+{
+ *(state_stack_p)++ = yy_start;
+ BEGIN (VERS_START);
+}
+
+void
+ldlex_version_file (void)
+{
+ *(state_stack_p)++ = yy_start;
+ BEGIN (VERS_SCRIPT);
+}
+
+void
+ldlex_defsym (void)
+{
+ *(state_stack_p)++ = yy_start;
+ BEGIN (DEFSYMEXP);
+}
+
+void
+ldlex_expression (void)
+{
+ *(state_stack_p)++ = yy_start;
+ BEGIN (EXPRESSION);
+}
+
+void
+ldlex_both (void)
+{
+ *(state_stack_p)++ = yy_start;
+ BEGIN (BOTH);
+}
+
+void
+ldlex_popstate (void)
+{
+ yy_start = *(--state_stack_p);
+}
+
+
+/* Place up to MAX_SIZE characters in BUF and return
+ either the number of characters read, or 0 to indicate EOF. */
+
+static int
+yy_input (char *buf, int max_size)
+{
+ int result = 0;
+ if (YY_CURRENT_BUFFER->yy_input_file)
+ {
+ if (yyin)
+ {
+ result = fread (buf, 1, max_size, yyin);
+ if (result < max_size && ferror (yyin))
+ einfo ("%F%P: read in flex scanner failed\n");
+ }
+ }
+ return result;
+}
+
+/* Eat the rest of a C-style comment. */
+
+static void
+comment (void)
+{
+ int c;
+
+ while (1)
+ {
+ c = input();
+ while (c != '*' && c != EOF)
+ {
+ if (c == '\n')
+ lineno++;
+ c = input();
+ }
+
+ if (c == '*')
+ {
+ c = input();
+ while (c == '*')
+ c = input();
+ if (c == '/')
+ break; /* found the end */
+ }
+
+ if (c == '\n')
+ lineno++;
+
+ if (c == EOF)
+ {
+ einfo( "%F%P: EOF in comment\n");
+ break;
+ }
+ }
+}
+
+/* Warn the user about a garbage character WHAT in the input
+ in context WHERE. */
+
+static void
+lex_warn_invalid (char *where, char *what)
+{
+ char buf[5];
+
+ /* If we have found an input file whose format we do not recognize,
+ and we are therefore treating it as a linker script, and we find
+ an invalid character, then most likely this is a real object file
+ of some different format. Treat it as such. */
+ if (ldfile_assumed_script)
+ {
+ bfd_set_error (bfd_error_file_not_recognized);
+ einfo ("%F%s: file not recognized: %E\n", ldfile_input_filename);
+ }
+
+ if (! ISPRINT (*what))
+ {
+ sprintf (buf, "\\%03o", (unsigned int) *what);
+ what = buf;
+ }
+
+ einfo ("%P:%S: ignoring invalid character `%s'%s\n", what, where);
+}
+
diff --git a/binutils-2.21/ld/ldlex.h b/binutils-2.21/ld/ldlex.h
new file mode 100644
index 0000000..9663ce0
--- /dev/null
+++ b/binutils-2.21/ld/ldlex.h
@@ -0,0 +1,64 @@
+/* ldlex.h -
+ Copyright 1991, 1992, 1993, 1994, 1995, 1997, 2000, 2003, 2005, 2006, 2007
+ Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef LDLEX_H
+#define LDLEX_H
+
+#include <stdio.h>
+
+/* The initial parser states. */
+typedef enum input_enum {
+ input_selected, /* We've set the initial state. */
+ input_script,
+ input_mri_script,
+ input_version_script,
+ input_dynamic_list,
+ input_defsym
+} input_type;
+
+extern input_type parser_input;
+
+extern unsigned int lineno;
+extern const char *lex_string;
+
+/* In ldlex.l. */
+extern int yylex (void);
+extern void lex_push_file (FILE *, const char *);
+extern void lex_redirect (const char *);
+extern void ldlex_script (void);
+extern void ldlex_mri_script (void);
+extern void ldlex_version_script (void);
+extern void ldlex_version_file (void);
+extern void ldlex_defsym (void);
+extern void ldlex_expression (void);
+extern void ldlex_both (void);
+extern void ldlex_command (void);
+extern void ldlex_popstate (void);
+
+/* In lexsup.c. */
+extern int lex_input (void);
+extern void lex_unput (int);
+#ifndef yywrap
+extern int yywrap (void);
+#endif
+extern void parse_args (unsigned, char **);
+
+#endif
diff --git a/binutils-2.21/ld/ldlex.l b/binutils-2.21/ld/ldlex.l
new file mode 100644
index 0000000..7f038b3
--- /dev/null
+++ b/binutils-2.21/ld/ldlex.l
@@ -0,0 +1,693 @@
+%option nounput
+
+%{
+
+/* Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+ Free Software Foundation, Inc.
+ Written by Steve Chamberlain of Cygnus Support.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "bfd.h"
+#include "safe-ctype.h"
+#include "bfdlink.h"
+#include "ld.h"
+#include "ldmisc.h"
+#include "ldexp.h"
+#include "ldlang.h"
+#include <ldgram.h>
+#include "ldfile.h"
+#include "ldlex.h"
+#include "ldmain.h"
+#include "libiberty.h"
+
+/* The type of top-level parser input.
+ yylex and yyparse (indirectly) both check this. */
+input_type parser_input;
+
+/* Line number in the current input file.
+ (FIXME Actually, it doesn't appear to get reset for each file?) */
+unsigned int lineno = 1;
+
+/* The string we are currently lexing, or NULL if we are reading a
+ file. */
+const char *lex_string = NULL;
+
+/* Support for flex reading from more than one input file (stream).
+ `include_stack' is flex's input state for each open file;
+ `file_name_stack' is the file names. `lineno_stack' is the current
+ line numbers.
+
+ If `include_stack_ptr' is 0, we haven't started reading anything yet.
+ Otherwise, stack elements 0 through `include_stack_ptr - 1' are valid. */
+
+#undef YY_INPUT
+#define YY_INPUT(buf,result,max_size) result = yy_input (buf, max_size)
+
+#define YY_NO_UNPUT
+
+#define MAX_INCLUDE_DEPTH 10
+static YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH];
+static const char *file_name_stack[MAX_INCLUDE_DEPTH];
+static unsigned int lineno_stack[MAX_INCLUDE_DEPTH];
+static unsigned int include_stack_ptr = 0;
+static int vers_node_nesting = 0;
+
+static int yy_input (char *, int);
+static void comment (void);
+static void lex_warn_invalid (char *where, char *what);
+
+/* STATES
+ EXPRESSION definitely in an expression
+ SCRIPT definitely in a script
+ BOTH either EXPRESSION or SCRIPT
+ DEFSYMEXP in an argument to -defsym
+ MRI in an MRI script
+ VERS_START starting a Sun style mapfile
+ VERS_SCRIPT a Sun style mapfile
+ VERS_NODE a node within a Sun style mapfile
+*/
+#define RTOKEN(x) { yylval.token = x; return x; }
+
+/* Some versions of flex want this. */
+#ifndef yywrap
+int yywrap (void) { return 1; }
+#endif
+%}
+
+%a 4000
+%o 5000
+
+CMDFILENAMECHAR [_a-zA-Z0-9\/\.\\_\+\$\:\[\]\\\,\=\&\!\<\>\-\~]
+CMDFILENAMECHAR1 [_a-zA-Z0-9\/\.\\_\+\$\:\[\]\\\,\=\&\!\<\>\~]
+FILENAMECHAR1 [_a-zA-Z\/\.\\\$\_\~]
+SYMBOLCHARN [_a-zA-Z\/\.\\\$\_\~0-9]
+FILENAMECHAR [_a-zA-Z0-9\/\.\-\_\+\=\$\:\[\]\\\,\~]
+WILDCHAR [_a-zA-Z0-9\/\.\-\_\+\=\$\:\[\]\\\,\~\?\*\^\!]
+WHITE [ \t\n\r]+
+
+NOCFILENAMECHAR [_a-zA-Z0-9\/\.\-\_\+\$\:\[\]\\\~]
+
+V_TAG [.$_a-zA-Z][._a-zA-Z0-9]*
+V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)*
+
+%s SCRIPT
+%s EXPRESSION
+%s BOTH
+%s DEFSYMEXP
+%s MRI
+%s VERS_START
+%s VERS_SCRIPT
+%s VERS_NODE
+%%
+
+ if (parser_input != input_selected)
+ {
+ /* The first token of the input determines the initial parser state. */
+ input_type t = parser_input;
+ parser_input = input_selected;
+ switch (t)
+ {
+ case input_script: return INPUT_SCRIPT; break;
+ case input_mri_script: return INPUT_MRI_SCRIPT; break;
+ case input_version_script: return INPUT_VERSION_SCRIPT; break;
+ case input_dynamic_list: return INPUT_DYNAMIC_LIST; break;
+ case input_defsym: return INPUT_DEFSYM; break;
+ default: abort ();
+ }
+ }
+
+<BOTH,SCRIPT,EXPRESSION,VERS_START,VERS_NODE,VERS_SCRIPT>"/*" { comment (); }
+
+
+<DEFSYMEXP>"-" { RTOKEN('-');}
+<DEFSYMEXP>"+" { RTOKEN('+');}
+<DEFSYMEXP>{FILENAMECHAR1}{SYMBOLCHARN}* { yylval.name = xstrdup (yytext); return NAME; }
+<DEFSYMEXP>"=" { RTOKEN('='); }
+
+<MRI,EXPRESSION>"$"([0-9A-Fa-f])+ {
+ yylval.integer = bfd_scan_vma (yytext + 1, 0, 16);
+ yylval.bigint.str = NULL;
+ return INT;
+ }
+
+<MRI,EXPRESSION>([0-9A-Fa-f])+(H|h|X|x|B|b|O|o|D|d) {
+ int ibase ;
+ switch (yytext[yyleng - 1]) {
+ case 'X':
+ case 'x':
+ case 'H':
+ case 'h':
+ ibase = 16;
+ break;
+ case 'O':
+ case 'o':
+ ibase = 8;
+ break;
+ case 'B':
+ case 'b':
+ ibase = 2;
+ break;
+ default:
+ ibase = 10;
+ }
+ yylval.integer = bfd_scan_vma (yytext, 0,
+ ibase);
+ yylval.bigint.str = NULL;
+ return INT;
+ }
+<SCRIPT,DEFSYMEXP,MRI,BOTH,EXPRESSION>((("$"|0[xX])([0-9A-Fa-f])+)|(([0-9])+))(M|K|m|k)? {
+ char *s = yytext;
+ int ibase = 0;
+
+ if (*s == '$')
+ {
+ ++s;
+ ibase = 16;
+ }
+ yylval.integer = bfd_scan_vma (s, 0, ibase);
+ yylval.bigint.str = NULL;
+ if (yytext[yyleng - 1] == 'M'
+ || yytext[yyleng - 1] == 'm')
+ {
+ yylval.integer *= 1024 * 1024;
+ }
+ else if (yytext[yyleng - 1] == 'K'
+ || yytext[yyleng - 1]=='k')
+ {
+ yylval.integer *= 1024;
+ }
+ else if (yytext[0] == '0'
+ && (yytext[1] == 'x'
+ || yytext[1] == 'X'))
+ {
+ yylval.bigint.str = xstrdup (yytext + 2);
+ }
+ return INT;
+ }
+<BOTH,SCRIPT,EXPRESSION,MRI>"]" { RTOKEN(']');}
+<BOTH,SCRIPT,EXPRESSION,MRI>"[" { RTOKEN('[');}
+<BOTH,SCRIPT,EXPRESSION,MRI>"<<=" { RTOKEN(LSHIFTEQ);}
+<BOTH,SCRIPT,EXPRESSION,MRI>">>=" { RTOKEN(RSHIFTEQ);}
+<BOTH,SCRIPT,EXPRESSION,MRI>"||" { RTOKEN(OROR);}
+<BOTH,SCRIPT,EXPRESSION,MRI>"==" { RTOKEN(EQ);}
+<BOTH,SCRIPT,EXPRESSION,MRI>"!=" { RTOKEN(NE);}
+<BOTH,SCRIPT,EXPRESSION,MRI>">=" { RTOKEN(GE);}
+<BOTH,SCRIPT,EXPRESSION,MRI>"<=" { RTOKEN(LE);}
+<BOTH,SCRIPT,EXPRESSION,MRI>"<<" { RTOKEN(LSHIFT);}
+<BOTH,SCRIPT,EXPRESSION,MRI>">>" { RTOKEN(RSHIFT);}
+<BOTH,SCRIPT,EXPRESSION,MRI>"+=" { RTOKEN(PLUSEQ);}
+<BOTH,SCRIPT,EXPRESSION,MRI>"-=" { RTOKEN(MINUSEQ);}
+<BOTH,SCRIPT,EXPRESSION,MRI>"*=" { RTOKEN(MULTEQ);}
+<BOTH,SCRIPT,EXPRESSION,MRI>"/=" { RTOKEN(DIVEQ);}
+<BOTH,SCRIPT,EXPRESSION,MRI>"&=" { RTOKEN(ANDEQ);}
+<BOTH,SCRIPT,EXPRESSION,MRI>"|=" { RTOKEN(OREQ);}
+<BOTH,SCRIPT,EXPRESSION,MRI>"&&" { RTOKEN(ANDAND);}
+<BOTH,SCRIPT,EXPRESSION,MRI>">" { RTOKEN('>');}
+<BOTH,SCRIPT,EXPRESSION,MRI>"," { RTOKEN(',');}
+<BOTH,SCRIPT,EXPRESSION,MRI>"&" { RTOKEN('&');}
+<BOTH,SCRIPT,EXPRESSION,MRI>"|" { RTOKEN('|');}
+<BOTH,SCRIPT,EXPRESSION,MRI>"~" { RTOKEN('~');}
+<BOTH,SCRIPT,EXPRESSION,MRI>"!" { RTOKEN('!');}
+<BOTH,SCRIPT,EXPRESSION,MRI>"?" { RTOKEN('?');}
+<BOTH,SCRIPT,EXPRESSION,MRI>"*" { RTOKEN('*');}
+<BOTH,SCRIPT,EXPRESSION,MRI>"+" { RTOKEN('+');}
+<BOTH,SCRIPT,EXPRESSION,MRI>"-" { RTOKEN('-');}
+<BOTH,SCRIPT,EXPRESSION,MRI>"/" { RTOKEN('/');}
+<BOTH,SCRIPT,EXPRESSION,MRI>"%" { RTOKEN('%');}
+<BOTH,SCRIPT,EXPRESSION,MRI>"<" { RTOKEN('<');}
+<BOTH,SCRIPT,EXPRESSION,MRI>"=" { RTOKEN('=');}
+<BOTH,SCRIPT,EXPRESSION,MRI>"}" { RTOKEN('}') ; }
+<BOTH,SCRIPT,EXPRESSION,MRI>"{" { RTOKEN('{'); }
+<BOTH,SCRIPT,EXPRESSION,MRI>")" { RTOKEN(')');}
+<BOTH,SCRIPT,EXPRESSION,MRI>"(" { RTOKEN('(');}
+<BOTH,SCRIPT,EXPRESSION,MRI>":" { RTOKEN(':'); }
+<BOTH,SCRIPT,EXPRESSION,MRI>";" { RTOKEN(';');}
+<BOTH,SCRIPT>"MEMORY" { RTOKEN(MEMORY);}
+<BOTH,SCRIPT>"REGION_ALIAS" { RTOKEN(REGION_ALIAS);}
+<BOTH,SCRIPT,EXPRESSION>"ORIGIN" { RTOKEN(ORIGIN);}
+<BOTH,SCRIPT>"VERSION" { RTOKEN(VERSIONK);}
+<EXPRESSION,BOTH,SCRIPT>"BLOCK" { RTOKEN(BLOCK);}
+<EXPRESSION,BOTH,SCRIPT>"BIND" { RTOKEN(BIND);}
+<BOTH,SCRIPT,EXPRESSION>"LENGTH" { RTOKEN(LENGTH);}
+<EXPRESSION,BOTH,SCRIPT>"ALIGN" { RTOKEN(ALIGN_K);}
+<EXPRESSION,BOTH,SCRIPT>"DATA_SEGMENT_ALIGN" { RTOKEN(DATA_SEGMENT_ALIGN);}
+<EXPRESSION,BOTH,SCRIPT>"DATA_SEGMENT_RELRO_END" { RTOKEN(DATA_SEGMENT_RELRO_END);}
+<EXPRESSION,BOTH,SCRIPT>"DATA_SEGMENT_END" { RTOKEN(DATA_SEGMENT_END);}
+<EXPRESSION,BOTH,SCRIPT>"ADDR" { RTOKEN(ADDR);}
+<EXPRESSION,BOTH,SCRIPT>"LOADADDR" { RTOKEN(LOADADDR);}
+<EXPRESSION,BOTH,SCRIPT>"ALIGNOF" { RTOKEN(ALIGNOF); }
+<EXPRESSION,BOTH>"MAX" { RTOKEN(MAX_K); }
+<EXPRESSION,BOTH>"MIN" { RTOKEN(MIN_K); }
+<EXPRESSION,BOTH,SCRIPT>"ASSERT" { RTOKEN(ASSERT_K); }
+<BOTH,SCRIPT>"ENTRY" { RTOKEN(ENTRY);}
+<BOTH,SCRIPT,MRI>"EXTERN" { RTOKEN(EXTERN);}
+<EXPRESSION,BOTH,SCRIPT>"NEXT" { RTOKEN(NEXT);}
+<EXPRESSION,BOTH,SCRIPT>"sizeof_headers" { RTOKEN(SIZEOF_HEADERS);}
+<EXPRESSION,BOTH,SCRIPT>"SIZEOF_HEADERS" { RTOKEN(SIZEOF_HEADERS);}
+<EXPRESSION,BOTH,SCRIPT>"SEGMENT_START" { RTOKEN(SEGMENT_START);}
+<BOTH,SCRIPT>"MAP" { RTOKEN(MAP);}
+<EXPRESSION,BOTH,SCRIPT>"SIZEOF" { RTOKEN(SIZEOF);}
+<BOTH,SCRIPT>"TARGET" { RTOKEN(TARGET_K);}
+<BOTH,SCRIPT>"SEARCH_DIR" { RTOKEN(SEARCH_DIR);}
+<BOTH,SCRIPT>"OUTPUT" { RTOKEN(OUTPUT);}
+<BOTH,SCRIPT>"INPUT" { RTOKEN(INPUT);}
+<EXPRESSION,BOTH,SCRIPT>"GROUP" { RTOKEN(GROUP);}
+<EXPRESSION,BOTH,SCRIPT>"AS_NEEDED" { RTOKEN(AS_NEEDED);}
+<EXPRESSION,BOTH,SCRIPT>"DEFINED" { RTOKEN(DEFINED);}
+<BOTH,SCRIPT>"CREATE_OBJECT_SYMBOLS" { RTOKEN(CREATE_OBJECT_SYMBOLS);}
+<BOTH,SCRIPT>"CONSTRUCTORS" { RTOKEN( CONSTRUCTORS);}
+<BOTH,SCRIPT>"FORCE_COMMON_ALLOCATION" { RTOKEN(FORCE_COMMON_ALLOCATION);}
+<BOTH,SCRIPT>"INHIBIT_COMMON_ALLOCATION" { RTOKEN(INHIBIT_COMMON_ALLOCATION);}
+<BOTH,SCRIPT>"SECTIONS" { RTOKEN(SECTIONS);}
+<BOTH,SCRIPT>"INSERT" { RTOKEN(INSERT_K);}
+<BOTH,SCRIPT>"AFTER" { RTOKEN(AFTER);}
+<BOTH,SCRIPT>"BEFORE" { RTOKEN(BEFORE);}
+<BOTH,SCRIPT>"FILL" { RTOKEN(FILL);}
+<BOTH,SCRIPT>"STARTUP" { RTOKEN(STARTUP);}
+<BOTH,SCRIPT>"OUTPUT_FORMAT" { RTOKEN(OUTPUT_FORMAT);}
+<BOTH,SCRIPT>"OUTPUT_ARCH" { RTOKEN( OUTPUT_ARCH);}
+<BOTH,SCRIPT>"HLL" { RTOKEN(HLL);}
+<BOTH,SCRIPT>"SYSLIB" { RTOKEN(SYSLIB);}
+<BOTH,SCRIPT>"FLOAT" { RTOKEN(FLOAT);}
+<BOTH,SCRIPT>"QUAD" { RTOKEN( QUAD);}
+<BOTH,SCRIPT>"SQUAD" { RTOKEN( SQUAD);}
+<BOTH,SCRIPT>"LONG" { RTOKEN( LONG);}
+<BOTH,SCRIPT>"SHORT" { RTOKEN( SHORT);}
+<BOTH,SCRIPT>"BYTE" { RTOKEN( BYTE);}
+<BOTH,SCRIPT>"NOFLOAT" { RTOKEN(NOFLOAT);}
+<EXPRESSION,BOTH,SCRIPT>"NOCROSSREFS" { RTOKEN(NOCROSSREFS);}
+<BOTH,SCRIPT>"OVERLAY" { RTOKEN(OVERLAY); }
+<BOTH,SCRIPT>"SORT_BY_NAME" { RTOKEN(SORT_BY_NAME); }
+<BOTH,SCRIPT>"SORT_BY_ALIGNMENT" { RTOKEN(SORT_BY_ALIGNMENT); }
+<BOTH,SCRIPT>"SORT" { RTOKEN(SORT_BY_NAME); }
+<EXPRESSION,BOTH,SCRIPT>"NOLOAD" { RTOKEN(NOLOAD);}
+<EXPRESSION,BOTH,SCRIPT>"DSECT" { RTOKEN(DSECT);}
+<EXPRESSION,BOTH,SCRIPT>"COPY" { RTOKEN(COPY);}
+<EXPRESSION,BOTH,SCRIPT>"INFO" { RTOKEN(INFO);}
+<EXPRESSION,BOTH,SCRIPT>"OVERLAY" { RTOKEN(OVERLAY);}
+<EXPRESSION,BOTH,SCRIPT>"ONLY_IF_RO" { RTOKEN(ONLY_IF_RO); }
+<EXPRESSION,BOTH,SCRIPT>"ONLY_IF_RW" { RTOKEN(ONLY_IF_RW); }
+<EXPRESSION,BOTH,SCRIPT>"SPECIAL" { RTOKEN(SPECIAL); }
+<BOTH,SCRIPT>"o" { RTOKEN(ORIGIN);}
+<BOTH,SCRIPT>"org" { RTOKEN(ORIGIN);}
+<BOTH,SCRIPT>"l" { RTOKEN( LENGTH);}
+<BOTH,SCRIPT>"len" { RTOKEN( LENGTH);}
+<EXPRESSION,BOTH,SCRIPT>"INCLUDE" { RTOKEN(INCLUDE);}
+<BOTH,SCRIPT>"PHDRS" { RTOKEN (PHDRS); }
+<EXPRESSION,BOTH,SCRIPT>"AT" { RTOKEN(AT);}
+<EXPRESSION,BOTH,SCRIPT>"SUBALIGN" { RTOKEN(SUBALIGN);}
+<EXPRESSION,BOTH,SCRIPT>"PROVIDE" { RTOKEN(PROVIDE); }
+<EXPRESSION,BOTH,SCRIPT>"PROVIDE_HIDDEN" { RTOKEN(PROVIDE_HIDDEN); }
+<EXPRESSION,BOTH,SCRIPT>"KEEP" { RTOKEN(KEEP); }
+<EXPRESSION,BOTH,SCRIPT>"EXCLUDE_FILE" { RTOKEN(EXCLUDE_FILE); }
+<EXPRESSION,BOTH,SCRIPT>"CONSTANT" { RTOKEN(CONSTANT);}
+<MRI>"#".*\n? { ++ lineno; }
+<MRI>"\n" { ++ lineno; RTOKEN(NEWLINE); }
+<MRI>"*".* { /* Mri comment line */ }
+<MRI>";".* { /* Mri comment line */ }
+<MRI>"END" { RTOKEN(ENDWORD); }
+<MRI>"ALIGNMOD" { RTOKEN(ALIGNMOD);}
+<MRI>"ALIGN" { RTOKEN(ALIGN_K);}
+<MRI>"CHIP" { RTOKEN(CHIP); }
+<MRI>"BASE" { RTOKEN(BASE); }
+<MRI>"ALIAS" { RTOKEN(ALIAS); }
+<MRI>"TRUNCATE" { RTOKEN(TRUNCATE); }
+<MRI>"LOAD" { RTOKEN(LOAD); }
+<MRI>"PUBLIC" { RTOKEN(PUBLIC); }
+<MRI>"ORDER" { RTOKEN(ORDER); }
+<MRI>"NAME" { RTOKEN(NAMEWORD); }
+<MRI>"FORMAT" { RTOKEN(FORMAT); }
+<MRI>"CASE" { RTOKEN(CASE); }
+<MRI>"START" { RTOKEN(START); }
+<MRI>"LIST".* { RTOKEN(LIST); /* LIST and ignore to end of line */ }
+<MRI>"SECT" { RTOKEN(SECT); }
+<EXPRESSION,BOTH,SCRIPT,MRI>"ABSOLUTE" { RTOKEN(ABSOLUTE); }
+<MRI>"end" { RTOKEN(ENDWORD); }
+<MRI>"alignmod" { RTOKEN(ALIGNMOD);}
+<MRI>"align" { RTOKEN(ALIGN_K);}
+<MRI>"chip" { RTOKEN(CHIP); }
+<MRI>"base" { RTOKEN(BASE); }
+<MRI>"alias" { RTOKEN(ALIAS); }
+<MRI>"truncate" { RTOKEN(TRUNCATE); }
+<MRI>"load" { RTOKEN(LOAD); }
+<MRI>"public" { RTOKEN(PUBLIC); }
+<MRI>"order" { RTOKEN(ORDER); }
+<MRI>"name" { RTOKEN(NAMEWORD); }
+<MRI>"format" { RTOKEN(FORMAT); }
+<MRI>"case" { RTOKEN(CASE); }
+<MRI>"extern" { RTOKEN(EXTERN); }
+<MRI>"start" { RTOKEN(START); }
+<MRI>"list".* { RTOKEN(LIST); /* LIST and ignore to end of line */ }
+<MRI>"sect" { RTOKEN(SECT); }
+<EXPRESSION,BOTH,SCRIPT,MRI>"absolute" { RTOKEN(ABSOLUTE); }
+
+<MRI>{FILENAMECHAR1}{NOCFILENAMECHAR}* {
+/* Filename without commas, needed to parse mri stuff */
+ yylval.name = xstrdup (yytext);
+ return NAME;
+ }
+
+
+<BOTH>{FILENAMECHAR1}{FILENAMECHAR}* {
+ yylval.name = xstrdup (yytext);
+ return NAME;
+ }
+<BOTH>"-l"{FILENAMECHAR}+ {
+ yylval.name = xstrdup (yytext + 2);
+ return LNAME;
+ }
+<EXPRESSION>{FILENAMECHAR1}{NOCFILENAMECHAR}* {
+ yylval.name = xstrdup (yytext);
+ return NAME;
+ }
+<EXPRESSION>"-l"{NOCFILENAMECHAR}+ {
+ yylval.name = xstrdup (yytext + 2);
+ return LNAME;
+ }
+<SCRIPT>{WILDCHAR}* {
+ /* Annoyingly, this pattern can match comments, and we have
+ longest match issues to consider. So if the first two
+ characters are a comment opening, put the input back and
+ try again. */
+ if (yytext[0] == '/' && yytext[1] == '*')
+ {
+ yyless (2);
+ comment ();
+ }
+ else
+ {
+ yylval.name = xstrdup (yytext);
+ return NAME;
+ }
+ }
+
+<EXPRESSION,BOTH,SCRIPT,VERS_NODE>"\""[^\"]*"\"" {
+ /* No matter the state, quotes
+ give what's inside */
+ yylval.name = xstrdup (yytext + 1);
+ yylval.name[yyleng - 2] = 0;
+ return NAME;
+ }
+<BOTH,SCRIPT,EXPRESSION>"\n" { lineno++;}
+<MRI,BOTH,SCRIPT,EXPRESSION>[ \t\r]+ { }
+
+<VERS_NODE,VERS_SCRIPT>[:,;] { return *yytext; }
+
+<VERS_NODE>global { RTOKEN(GLOBAL); }
+
+<VERS_NODE>local { RTOKEN(LOCAL); }
+
+<VERS_NODE>extern { RTOKEN(EXTERN); }
+
+<VERS_NODE>{V_IDENTIFIER} { yylval.name = xstrdup (yytext);
+ return VERS_IDENTIFIER; }
+
+<VERS_SCRIPT>{V_TAG} { yylval.name = xstrdup (yytext);
+ return VERS_TAG; }
+
+<VERS_START>"{" { BEGIN(VERS_SCRIPT); return *yytext; }
+
+<VERS_SCRIPT>"{" { BEGIN(VERS_NODE);
+ vers_node_nesting = 0;
+ return *yytext;
+ }
+<VERS_SCRIPT>"}" { return *yytext; }
+<VERS_NODE>"{" { vers_node_nesting++; return *yytext; }
+<VERS_NODE>"}" { if (--vers_node_nesting < 0)
+ BEGIN(VERS_SCRIPT);
+ return *yytext;
+ }
+
+<VERS_START,VERS_NODE,VERS_SCRIPT>[\n] { lineno++; }
+
+<VERS_START,VERS_NODE,VERS_SCRIPT>#.* { /* Eat up comments */ }
+
+<VERS_START,VERS_NODE,VERS_SCRIPT>[ \t\r]+ { /* Eat up whitespace */ }
+
+<<EOF>> {
+ include_stack_ptr--;
+
+ if (include_stack_ptr == 0)
+ {
+ yyterminate ();
+ }
+ else
+ {
+ yy_switch_to_buffer (include_stack[include_stack_ptr]);
+ }
+
+ ldfile_input_filename = file_name_stack[include_stack_ptr - 1];
+ lineno = lineno_stack[include_stack_ptr];
+
+ return END;
+}
+
+<SCRIPT,MRI,VERS_START,VERS_SCRIPT,VERS_NODE>. lex_warn_invalid (" in script", yytext);
+<EXPRESSION,DEFSYMEXP,BOTH>. lex_warn_invalid (" in expression", yytext);
+
+%%
+
+
+/* Switch flex to reading script file NAME, open on FILE,
+ saving the current input info on the include stack. */
+
+void
+lex_push_file (FILE *file, const char *name)
+{
+ if (include_stack_ptr >= MAX_INCLUDE_DEPTH)
+ {
+ einfo ("%F:includes nested too deeply\n");
+ }
+ file_name_stack[include_stack_ptr] = name;
+ lineno_stack[include_stack_ptr] = lineno;
+ include_stack[include_stack_ptr] = YY_CURRENT_BUFFER;
+
+ include_stack_ptr++;
+ lineno = 1;
+ yyin = file;
+ yy_switch_to_buffer (yy_create_buffer (yyin, YY_BUF_SIZE));
+}
+
+/* Return a newly created flex input buffer containing STRING,
+ which is SIZE bytes long. */
+
+static YY_BUFFER_STATE
+yy_create_string_buffer (const char *string, size_t size)
+{
+ YY_BUFFER_STATE b;
+
+ /* Calls to m-alloc get turned by sed into xm-alloc. */
+ b = malloc (sizeof (struct yy_buffer_state));
+ b->yy_input_file = 0;
+ b->yy_buf_size = size;
+
+ /* yy_ch_buf has to be 2 characters longer than the size given because
+ we need to put in 2 end-of-buffer characters. */
+ b->yy_ch_buf = malloc ((unsigned) (b->yy_buf_size + 3));
+
+ b->yy_ch_buf[0] = '\n';
+ strcpy (b->yy_ch_buf+1, string);
+ b->yy_ch_buf[size+1] = YY_END_OF_BUFFER_CHAR;
+ b->yy_ch_buf[size+2] = YY_END_OF_BUFFER_CHAR;
+ b->yy_n_chars = size+1;
+ b->yy_buf_pos = &b->yy_ch_buf[1];
+
+ b->yy_is_our_buffer = 1;
+ b->yy_is_interactive = 0;
+ b->yy_at_bol = 1;
+ b->yy_fill_buffer = 0;
+
+ /* flex 2.4.7 changed the interface. FIXME: We should not be using
+ a flex internal interface in the first place! */
+#ifdef YY_BUFFER_NEW
+ b->yy_buffer_status = YY_BUFFER_NEW;
+#else
+ b->yy_eof_status = EOF_NOT_SEEN;
+#endif
+
+ return b;
+}
+
+/* Switch flex to reading from STRING, saving the current input info
+ on the include stack. */
+
+void
+lex_redirect (const char *string)
+{
+ YY_BUFFER_STATE tmp;
+
+ yy_init = 0;
+ if (include_stack_ptr >= MAX_INCLUDE_DEPTH)
+ {
+ einfo("%F: macros nested too deeply\n");
+ }
+ file_name_stack[include_stack_ptr] = "redirect";
+ lineno_stack[include_stack_ptr] = lineno;
+ include_stack[include_stack_ptr] = YY_CURRENT_BUFFER;
+ include_stack_ptr++;
+ lineno = 1;
+ tmp = yy_create_string_buffer (string, strlen (string));
+ yy_switch_to_buffer (tmp);
+}
+
+/* Functions to switch to a different flex start condition,
+ saving the current start condition on `state_stack'. */
+
+static int state_stack[MAX_INCLUDE_DEPTH * 2];
+static int *state_stack_p = state_stack;
+
+void
+ldlex_script (void)
+{
+ *(state_stack_p)++ = yy_start;
+ BEGIN (SCRIPT);
+}
+
+void
+ldlex_mri_script (void)
+{
+ *(state_stack_p)++ = yy_start;
+ BEGIN (MRI);
+}
+
+void
+ldlex_version_script (void)
+{
+ *(state_stack_p)++ = yy_start;
+ BEGIN (VERS_START);
+}
+
+void
+ldlex_version_file (void)
+{
+ *(state_stack_p)++ = yy_start;
+ BEGIN (VERS_SCRIPT);
+}
+
+void
+ldlex_defsym (void)
+{
+ *(state_stack_p)++ = yy_start;
+ BEGIN (DEFSYMEXP);
+}
+
+void
+ldlex_expression (void)
+{
+ *(state_stack_p)++ = yy_start;
+ BEGIN (EXPRESSION);
+}
+
+void
+ldlex_both (void)
+{
+ *(state_stack_p)++ = yy_start;
+ BEGIN (BOTH);
+}
+
+void
+ldlex_popstate (void)
+{
+ yy_start = *(--state_stack_p);
+}
+
+
+/* Place up to MAX_SIZE characters in BUF and return
+ either the number of characters read, or 0 to indicate EOF. */
+
+static int
+yy_input (char *buf, int max_size)
+{
+ int result = 0;
+ if (YY_CURRENT_BUFFER->yy_input_file)
+ {
+ if (yyin)
+ {
+ result = fread (buf, 1, max_size, yyin);
+ if (result < max_size && ferror (yyin))
+ einfo ("%F%P: read in flex scanner failed\n");
+ }
+ }
+ return result;
+}
+
+/* Eat the rest of a C-style comment. */
+
+static void
+comment (void)
+{
+ int c;
+
+ while (1)
+ {
+ c = input();
+ while (c != '*' && c != EOF)
+ {
+ if (c == '\n')
+ lineno++;
+ c = input();
+ }
+
+ if (c == '*')
+ {
+ c = input();
+ while (c == '*')
+ c = input();
+ if (c == '/')
+ break; /* found the end */
+ }
+
+ if (c == '\n')
+ lineno++;
+
+ if (c == EOF)
+ {
+ einfo( "%F%P: EOF in comment\n");
+ break;
+ }
+ }
+}
+
+/* Warn the user about a garbage character WHAT in the input
+ in context WHERE. */
+
+static void
+lex_warn_invalid (char *where, char *what)
+{
+ char buf[5];
+
+ /* If we have found an input file whose format we do not recognize,
+ and we are therefore treating it as a linker script, and we find
+ an invalid character, then most likely this is a real object file
+ of some different format. Treat it as such. */
+ if (ldfile_assumed_script)
+ {
+ bfd_set_error (bfd_error_file_not_recognized);
+ einfo ("%F%s: file not recognized: %E\n", ldfile_input_filename);
+ }
+
+ if (! ISPRINT (*what))
+ {
+ sprintf (buf, "\\%03o", (unsigned int) *what);
+ what = buf;
+ }
+
+ einfo ("%P:%S: ignoring invalid character `%s'%s\n", what, where);
+}
diff --git a/binutils-2.21/ld/ldmain.c b/binutils-2.21/ld/ldmain.c
new file mode 100644
index 0000000..e9b804a
--- /dev/null
+++ b/binutils-2.21/ld/ldmain.c
@@ -0,0 +1,1485 @@
+/* Main program of GNU linker.
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+ 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+ Free Software Foundation, Inc.
+ Written by Steve Chamberlain steve@cygnus.com
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "safe-ctype.h"
+#include "libiberty.h"
+#include "progress.h"
+#include "bfdlink.h"
+#include "filenames.h"
+
+#include "ld.h"
+#include "ldmain.h"
+#include "ldmisc.h"
+#include "ldwrite.h"
+#include "ldexp.h"
+#include "ldlang.h"
+#include <ldgram.h>
+#include "ldlex.h"
+#include "ldfile.h"
+#include "ldemul.h"
+#include "ldctor.h"
+#ifdef ENABLE_PLUGINS
+#include "plugin.h"
+#include "plugin-api.h"
+#include "libbfd.h"
+#endif /* ENABLE_PLUGINS */
+
+/* Somewhere above, sys/stat.h got included. */
+#if !defined(S_ISDIR) && defined(S_IFDIR)
+#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+#endif
+
+#include <string.h>
+
+#ifdef HAVE_SBRK
+#if !HAVE_DECL_SBRK
+extern void *sbrk ();
+#endif
+#endif
+
+#ifndef TARGET_SYSTEM_ROOT
+#define TARGET_SYSTEM_ROOT ""
+#endif
+
+/* EXPORTS */
+
+FILE *saved_script_handle = NULL;
+FILE *previous_script_handle = NULL;
+bfd_boolean force_make_executable = FALSE;
+
+char *default_target;
+const char *output_filename = "a.out";
+
+/* Name this program was invoked by. */
+char *program_name;
+
+/* The prefix for system library directories. */
+const char *ld_sysroot;
+
+/* The canonical representation of ld_sysroot. */
+char * ld_canon_sysroot;
+int ld_canon_sysroot_len;
+
+/* Set by -G argument, for MIPS ECOFF target. */
+int g_switch_value = 8;
+
+/* Nonzero means print names of input files as processed. */
+bfd_boolean trace_files;
+
+/* Nonzero means same, but note open failures, too. */
+bfd_boolean trace_file_tries;
+
+/* Nonzero means version number was printed, so exit successfully
+ instead of complaining if no input files are given. */
+bfd_boolean version_printed;
+
+/* Nonzero means link in every member of an archive. */
+bfd_boolean whole_archive;
+
+/* True means only create DT_NEEDED entries for dynamic libraries
+ if they actually satisfy some reference in a regular object. */
+bfd_boolean add_DT_NEEDED_for_regular;
+
+/* True means create DT_NEEDED entries for dynamic libraries that
+ are DT_NEEDED by dynamic libraries specifically mentioned on
+ the command line. */
+bfd_boolean add_DT_NEEDED_for_dynamic = TRUE;
+
+/* TRUE if we should demangle symbol names. */
+bfd_boolean demangling;
+
+args_type command_line;
+
+ld_config_type config;
+
+sort_type sort_section;
+
+static const char *get_sysroot
+ (int, char **);
+static char *get_emulation
+ (int, char **);
+static bfd_boolean add_archive_element
+ (struct bfd_link_info *, bfd *, const char *, bfd **);
+static bfd_boolean multiple_definition
+ (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma,
+ bfd *, asection *, bfd_vma);
+static bfd_boolean multiple_common
+ (struct bfd_link_info *, const char *, bfd *, enum bfd_link_hash_type,
+ bfd_vma, bfd *, enum bfd_link_hash_type, bfd_vma);
+static bfd_boolean add_to_set
+ (struct bfd_link_info *, struct bfd_link_hash_entry *,
+ bfd_reloc_code_real_type, bfd *, asection *, bfd_vma);
+static bfd_boolean constructor_callback
+ (struct bfd_link_info *, bfd_boolean, const char *, bfd *,
+ asection *, bfd_vma);
+static bfd_boolean warning_callback
+ (struct bfd_link_info *, const char *, const char *, bfd *,
+ asection *, bfd_vma);
+static void warning_find_reloc
+ (bfd *, asection *, void *);
+static bfd_boolean undefined_symbol
+ (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma,
+ bfd_boolean);
+static bfd_boolean reloc_overflow
+ (struct bfd_link_info *, struct bfd_link_hash_entry *, const char *,
+ const char *, bfd_vma, bfd *, asection *, bfd_vma);
+static bfd_boolean reloc_dangerous
+ (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma);
+static bfd_boolean unattached_reloc
+ (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma);
+static bfd_boolean notice
+ (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma);
+
+static struct bfd_link_callbacks link_callbacks =
+{
+ add_archive_element,
+ multiple_definition,
+ multiple_common,
+ add_to_set,
+ constructor_callback,
+ warning_callback,
+ undefined_symbol,
+ reloc_overflow,
+ reloc_dangerous,
+ unattached_reloc,
+ notice,
+ einfo,
+ info_msg,
+ minfo,
+ ldlang_override_segment_assignment
+};
+
+struct bfd_link_info link_info;
+
+static void
+remove_output (void)
+{
+ if (output_filename)
+ {
+ if (link_info.output_bfd)
+ bfd_cache_close (link_info.output_bfd);
+ if (delete_output_file_on_failure)
+ unlink_if_ordinary (output_filename);
+ }
+}
+
+int
+main (int argc, char **argv)
+{
+ char *emulation;
+ long start_time = get_run_time ();
+
+#if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
+ setlocale (LC_MESSAGES, "");
+#endif
+#if defined (HAVE_SETLOCALE)
+ setlocale (LC_CTYPE, "");
+#endif
+ bindtextdomain (PACKAGE, LOCALEDIR);
+ textdomain (PACKAGE);
+
+ program_name = argv[0];
+ xmalloc_set_program_name (program_name);
+
+ START_PROGRESS (program_name, 0);
+
+ expandargv (&argc, &argv);
+
+ bfd_init ();
+
+ bfd_set_error_program_name (program_name);
+
+ xatexit (remove_output);
+
+ /* Set up the sysroot directory. */
+ ld_sysroot = get_sysroot (argc, argv);
+ if (*ld_sysroot)
+ {
+ if (*TARGET_SYSTEM_ROOT == 0)
+ {
+ einfo ("%P%F: this linker was not configured to use sysroots\n");
+ ld_sysroot = "";
+ }
+ else
+ ld_canon_sysroot = lrealpath (ld_sysroot);
+ }
+ if (ld_canon_sysroot)
+ ld_canon_sysroot_len = strlen (ld_canon_sysroot);
+ else
+ ld_canon_sysroot_len = -1;
+
+ /* Set the default BFD target based on the configured target. Doing
+ this permits the linker to be configured for a particular target,
+ and linked against a shared BFD library which was configured for
+ a different target. The macro TARGET is defined by Makefile. */
+ if (! bfd_set_default_target (TARGET))
+ {
+ einfo (_("%X%P: can't set BFD default target to `%s': %E\n"), TARGET);
+ xexit (1);
+ }
+
+#if YYDEBUG
+ {
+ extern int yydebug;
+ yydebug = 1;
+ }
+#endif
+
+ config.build_constructors = TRUE;
+ config.rpath_separator = ':';
+ config.split_by_reloc = (unsigned) -1;
+ config.split_by_file = (bfd_size_type) -1;
+ config.make_executable = TRUE;
+ config.magic_demand_paged = TRUE;
+ config.text_read_only = TRUE;
+
+ command_line.warn_mismatch = TRUE;
+ command_line.warn_search_mismatch = TRUE;
+ command_line.check_section_addresses = -1;
+ command_line.disable_target_specific_optimizations = -1;
+
+ /* We initialize DEMANGLING based on the environment variable
+ COLLECT_NO_DEMANGLE. The gcc collect2 program will demangle the
+ output of the linker, unless COLLECT_NO_DEMANGLE is set in the
+ environment. Acting the same way here lets us provide the same
+ interface by default. */
+ demangling = getenv ("COLLECT_NO_DEMANGLE") == NULL;
+
+ link_info.allow_undefined_version = TRUE;
+ link_info.keep_memory = TRUE;
+ link_info.combreloc = TRUE;
+ link_info.strip_discarded = TRUE;
+ link_info.emit_hash = TRUE;
+ link_info.callbacks = &link_callbacks;
+ link_info.input_bfds_tail = &link_info.input_bfds;
+ /* SVR4 linkers seem to set DT_INIT and DT_FINI based on magic _init
+ and _fini symbols. We are compatible. */
+ link_info.init_function = "_init";
+ link_info.fini_function = "_fini";
+ link_info.relax_pass = 1;
+ link_info.pei386_auto_import = -1;
+ link_info.spare_dynamic_tags = 5;
+ link_info.path_separator = ':';
+
+ ldfile_add_arch ("");
+ emulation = get_emulation (argc, argv);
+ ldemul_choose_mode (emulation);
+ default_target = ldemul_choose_target (argc, argv);
+ config.maxpagesize = bfd_emul_get_maxpagesize (default_target);
+ config.commonpagesize = bfd_emul_get_commonpagesize (default_target);
+ lang_init ();
+ ldemul_before_parse ();
+ lang_has_input_file = FALSE;
+ parse_args (argc, argv);
+
+ if (config.hash_table_size != 0)
+ bfd_hash_set_default_size (config.hash_table_size);
+
+ ldemul_set_symbols ();
+
+ if (link_info.relocatable)
+ {
+ if (command_line.check_section_addresses < 0)
+ command_line.check_section_addresses = 0;
+ if (link_info.shared)
+ einfo (_("%P%F: -r and -shared may not be used together\n"));
+ }
+
+ /* We may have -Bsymbolic, -Bsymbolic-functions, --dynamic-list-data,
+ --dynamic-list-cpp-new, --dynamic-list-cpp-typeinfo and
+ --dynamic-list FILE. -Bsymbolic and -Bsymbolic-functions are
+ for shared libraries. -Bsymbolic overrides all others and vice
+ versa. */
+ switch (command_line.symbolic)
+ {
+ case symbolic_unset:
+ break;
+ case symbolic:
+ /* -Bsymbolic is for shared library only. */
+ if (link_info.shared)
+ {
+ link_info.symbolic = TRUE;
+ /* Should we free the unused memory? */
+ link_info.dynamic_list = NULL;
+ command_line.dynamic_list = dynamic_list_unset;
+ }
+ break;
+ case symbolic_functions:
+ /* -Bsymbolic-functions is for shared library only. */
+ if (link_info.shared)
+ command_line.dynamic_list = dynamic_list_data;
+ break;
+ }
+
+ switch (command_line.dynamic_list)
+ {
+ case dynamic_list_unset:
+ break;
+ case dynamic_list_data:
+ link_info.dynamic_data = TRUE;
+ case dynamic_list:
+ link_info.dynamic = TRUE;
+ break;
+ }
+
+ if (! link_info.shared)
+ {
+ if (command_line.filter_shlib)
+ einfo (_("%P%F: -F may not be used without -shared\n"));
+ if (command_line.auxiliary_filters)
+ einfo (_("%P%F: -f may not be used without -shared\n"));
+ }
+
+ if (! link_info.shared || link_info.pie)
+ link_info.executable = TRUE;
+
+ /* Treat ld -r -s as ld -r -S -x (i.e., strip all local symbols). I
+ don't see how else this can be handled, since in this case we
+ must preserve all externally visible symbols. */
+ if (link_info.relocatable && link_info.strip == strip_all)
+ {
+ link_info.strip = strip_debugger;
+ if (link_info.discard == discard_sec_merge)
+ link_info.discard = discard_all;
+ }
+
+ /* If we have not already opened and parsed a linker script,
+ try the default script from command line first. */
+ if (saved_script_handle == NULL
+ && command_line.default_script != NULL)
+ {
+ ldfile_open_command_file (command_line.default_script);
+ parser_input = input_script;
+ yyparse ();
+ }
+
+ /* If we have not already opened and parsed a linker script
+ read the emulation's appropriate default script. */
+ if (saved_script_handle == NULL)
+ {
+ int isfile;
+ char *s = ldemul_get_script (&isfile);
+
+ if (isfile)
+ ldfile_open_default_command_file (s);
+ else
+ {
+ lex_string = s;
+ lex_redirect (s);
+ }
+ parser_input = input_script;
+ yyparse ();
+ lex_string = NULL;
+ }
+
+ if (trace_file_tries)
+ {
+ if (saved_script_handle)
+ info_msg (_("using external linker script:"));
+ else
+ info_msg (_("using internal linker script:"));
+ info_msg ("\n==================================================\n");
+
+ if (saved_script_handle)
+ {
+ static const int ld_bufsz = 8193;
+ size_t n;
+ char *buf = (char *) xmalloc (ld_bufsz);
+
+ rewind (saved_script_handle);
+ while ((n = fread (buf, 1, ld_bufsz - 1, saved_script_handle)) > 0)
+ {
+ buf[n] = 0;
+ info_msg (buf);
+ }
+ rewind (saved_script_handle);
+ free (buf);
+ }
+ else
+ {
+ int isfile;
+
+ info_msg (ldemul_get_script (&isfile));
+ }
+
+ info_msg ("\n==================================================\n");
+ }
+
+ lang_final ();
+
+ if (!lang_has_input_file)
+ {
+ if (version_printed)
+ xexit (0);
+ einfo (_("%P%F: no input files\n"));
+ }
+
+ if (trace_files)
+ info_msg (_("%P: mode %s\n"), emulation);
+
+ ldemul_after_parse ();
+
+ if (config.map_filename)
+ {
+ if (strcmp (config.map_filename, "-") == 0)
+ {
+ config.map_file = stdout;
+ }
+ else
+ {
+ config.map_file = fopen (config.map_filename, FOPEN_WT);
+ if (config.map_file == (FILE *) NULL)
+ {
+ bfd_set_error (bfd_error_system_call);
+ einfo (_("%P%F: cannot open map file %s: %E\n"),
+ config.map_filename);
+ }
+ }
+ }
+
+ lang_process ();
+
+ /* Print error messages for any missing symbols, for any warning
+ symbols, and possibly multiple definitions. */
+ if (link_info.relocatable)
+ link_info.output_bfd->flags &= ~EXEC_P;
+ else
+ link_info.output_bfd->flags |= EXEC_P;
+
+ ldwrite ();
+
+ if (config.map_file != NULL)
+ lang_map ();
+ if (command_line.cref)
+ output_cref (config.map_file != NULL ? config.map_file : stdout);
+ if (nocrossref_list != NULL)
+ check_nocrossrefs ();
+
+ lang_finish ();
+
+#ifdef ENABLE_PLUGINS
+ /* Now everything is finished, we can tell the plugins to clean up. */
+ if (plugin_call_cleanup ())
+ info_msg (_("%P: %s: error in plugin cleanup (ignored)\n"), plugin_error_plugin ());
+#endif /* ENABLE_PLUGINS */
+
+ /* Even if we're producing relocatable output, some non-fatal errors should
+ be reported in the exit status. (What non-fatal errors, if any, do we
+ want to ignore for relocatable output?) */
+ if (!config.make_executable && !force_make_executable)
+ {
+ if (trace_files)
+ einfo (_("%P: link errors found, deleting executable `%s'\n"),
+ output_filename);
+
+ /* The file will be removed by remove_output. */
+ xexit (1);
+ }
+ else
+ {
+ if (! bfd_close (link_info.output_bfd))
+ einfo (_("%F%B: final close failed: %E\n"), link_info.output_bfd);
+
+ /* If the --force-exe-suffix is enabled, and we're making an
+ executable file and it doesn't end in .exe, copy it to one
+ which does. */
+ if (! link_info.relocatable && command_line.force_exe_suffix)
+ {
+ int len = strlen (output_filename);
+
+ if (len < 4
+ || (strcasecmp (output_filename + len - 4, ".exe") != 0
+ && strcasecmp (output_filename + len - 4, ".dll") != 0))
+ {
+ FILE *src;
+ FILE *dst;
+ const int bsize = 4096;
+ char *buf = (char *) xmalloc (bsize);
+ int l;
+ char *dst_name = (char *) xmalloc (len + 5);
+
+ strcpy (dst_name, output_filename);
+ strcat (dst_name, ".exe");
+ src = fopen (output_filename, FOPEN_RB);
+ dst = fopen (dst_name, FOPEN_WB);
+
+ if (!src)
+ einfo (_("%X%P: unable to open for source of copy `%s'\n"),
+ output_filename);
+ if (!dst)
+ einfo (_("%X%P: unable to open for destination of copy `%s'\n"),
+ dst_name);
+ while ((l = fread (buf, 1, bsize, src)) > 0)
+ {
+ int done = fwrite (buf, 1, l, dst);
+
+ if (done != l)
+ einfo (_("%P: Error writing file `%s'\n"), dst_name);
+ }
+
+ fclose (src);
+ if (fclose (dst) == EOF)
+ einfo (_("%P: Error closing file `%s'\n"), dst_name);
+ free (dst_name);
+ free (buf);
+ }
+ }
+ }
+
+ END_PROGRESS (program_name);
+
+ if (config.stats)
+ {
+#ifdef HAVE_SBRK
+ char *lim = (char *) sbrk (0);
+#endif
+ long run_time = get_run_time () - start_time;
+
+ fprintf (stderr, _("%s: total time in link: %ld.%06ld\n"),
+ program_name, run_time / 1000000, run_time % 1000000);
+#ifdef HAVE_SBRK
+ fprintf (stderr, _("%s: data size %ld\n"), program_name,
+ (long) (lim - (char *) &environ));
+#endif
+ }
+
+ /* Prevent remove_output from doing anything, after a successful link. */
+ output_filename = NULL;
+
+ xexit (0);
+ return 0;
+}
+
+/* If the configured sysroot is relocatable, try relocating it based on
+ default prefix FROM. Return the relocated directory if it exists,
+ otherwise return null. */
+
+static char *
+get_relative_sysroot (const char *from ATTRIBUTE_UNUSED)
+{
+#ifdef TARGET_SYSTEM_ROOT_RELOCATABLE
+ char *path;
+ struct stat s;
+
+ path = make_relative_prefix (program_name, from, TARGET_SYSTEM_ROOT);
+ if (path)
+ {
+ if (stat (path, &s) == 0 && S_ISDIR (s.st_mode))
+ return path;
+ free (path);
+ }
+#endif
+ return 0;
+}
+
+/* Return the sysroot directory. Return "" if no sysroot is being used. */
+
+static const char *
+get_sysroot (int argc, char **argv)
+{
+ int i;
+ const char *path;
+
+ for (i = 1; i < argc; i++)
+ if (CONST_STRNEQ (argv[i], "--sysroot="))
+ return argv[i] + strlen ("--sysroot=");
+
+ path = get_relative_sysroot (BINDIR);
+ if (path)
+ return path;
+
+ path = get_relative_sysroot (TOOLBINDIR);
+ if (path)
+ return path;
+
+ return TARGET_SYSTEM_ROOT;
+}
+
+/* We need to find any explicitly given emulation in order to initialize the
+ state that's needed by the lex&yacc argument parser (parse_args). */
+
+static char *
+get_emulation (int argc, char **argv)
+{
+ char *emulation;
+ int i;
+
+ emulation = getenv (EMULATION_ENVIRON);
+ if (emulation == NULL)
+ emulation = DEFAULT_EMULATION;
+
+ for (i = 1; i < argc; i++)
+ {
+ if (CONST_STRNEQ (argv[i], "-m"))
+ {
+ if (argv[i][2] == '\0')
+ {
+ /* -m EMUL */
+ if (i < argc - 1)
+ {
+ emulation = argv[i + 1];
+ i++;
+ }
+ else
+ einfo (_("%P%F: missing argument to -m\n"));
+ }
+ else if (strcmp (argv[i], "-mips1") == 0
+ || strcmp (argv[i], "-mips2") == 0
+ || strcmp (argv[i], "-mips3") == 0
+ || strcmp (argv[i], "-mips4") == 0
+ || strcmp (argv[i], "-mips5") == 0
+ || strcmp (argv[i], "-mips32") == 0
+ || strcmp (argv[i], "-mips32r2") == 0
+ || strcmp (argv[i], "-mips64") == 0
+ || strcmp (argv[i], "-mips64r2") == 0)
+ {
+ /* FIXME: The arguments -mips1, -mips2, -mips3, etc. are
+ passed to the linker by some MIPS compilers. They
+ generally tell the linker to use a slightly different
+ library path. Perhaps someday these should be
+ implemented as emulations; until then, we just ignore
+ the arguments and hope that nobody ever creates
+ emulations named ips1, ips2 or ips3. */
+ }
+ else if (strcmp (argv[i], "-m486") == 0)
+ {
+ /* FIXME: The argument -m486 is passed to the linker on
+ some Linux systems. Hope that nobody creates an
+ emulation named 486. */
+ }
+ else
+ {
+ /* -mEMUL */
+ emulation = &argv[i][2];
+ }
+ }
+ }
+
+ return emulation;
+}
+
+void
+add_ysym (const char *name)
+{
+ if (link_info.notice_hash == NULL)
+ {
+ link_info.notice_hash =
+ (struct bfd_hash_table *) xmalloc (sizeof (struct bfd_hash_table));
+ if (!bfd_hash_table_init_n (link_info.notice_hash,
+ bfd_hash_newfunc,
+ sizeof (struct bfd_hash_entry),
+ 61))
+ einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
+ }
+
+ if (bfd_hash_lookup (link_info.notice_hash, name, TRUE, TRUE) == NULL)
+ einfo (_("%P%F: bfd_hash_lookup failed: %E\n"));
+}
+
+/* Record a symbol to be wrapped, from the --wrap option. */
+
+void
+add_wrap (const char *name)
+{
+ if (link_info.wrap_hash == NULL)
+ {
+ link_info.wrap_hash =
+ (struct bfd_hash_table *) xmalloc (sizeof (struct bfd_hash_table));
+ if (!bfd_hash_table_init_n (link_info.wrap_hash,
+ bfd_hash_newfunc,
+ sizeof (struct bfd_hash_entry),
+ 61))
+ einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
+ }
+
+ if (bfd_hash_lookup (link_info.wrap_hash, name, TRUE, TRUE) == NULL)
+ einfo (_("%P%F: bfd_hash_lookup failed: %E\n"));
+}
+
+/* Handle the -retain-symbols-file option. */
+
+void
+add_keepsyms_file (const char *filename)
+{
+ FILE *file;
+ char *buf;
+ size_t bufsize;
+ int c;
+
+ if (link_info.strip == strip_some)
+ einfo (_("%X%P: error: duplicate retain-symbols-file\n"));
+
+ file = fopen (filename, "r");
+ if (file == NULL)
+ {
+ bfd_set_error (bfd_error_system_call);
+ einfo ("%X%P: %s: %E\n", filename);
+ return;
+ }
+
+ link_info.keep_hash = (struct bfd_hash_table *)
+ xmalloc (sizeof (struct bfd_hash_table));
+ if (!bfd_hash_table_init (link_info.keep_hash, bfd_hash_newfunc,
+ sizeof (struct bfd_hash_entry)))
+ einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
+
+ bufsize = 100;
+ buf = (char *) xmalloc (bufsize);
+
+ c = getc (file);
+ while (c != EOF)
+ {
+ while (ISSPACE (c))
+ c = getc (file);
+
+ if (c != EOF)
+ {
+ size_t len = 0;
+
+ while (! ISSPACE (c) && c != EOF)
+ {
+ buf[len] = c;
+ ++len;
+ if (len >= bufsize)
+ {
+ bufsize *= 2;
+ buf = (char *) xrealloc (buf, bufsize);
+ }
+ c = getc (file);
+ }
+
+ buf[len] = '\0';
+
+ if (bfd_hash_lookup (link_info.keep_hash, buf, TRUE, TRUE) == NULL)
+ einfo (_("%P%F: bfd_hash_lookup for insertion failed: %E\n"));
+ }
+ }
+
+ if (link_info.strip != strip_none)
+ einfo (_("%P: `-retain-symbols-file' overrides `-s' and `-S'\n"));
+
+ free (buf);
+ link_info.strip = strip_some;
+}
+
+/* Callbacks from the BFD linker routines. */
+
+/* This is called when BFD has decided to include an archive member in
+ a link. */
+
+static bfd_boolean
+add_archive_element (struct bfd_link_info *info,
+ bfd *abfd,
+ const char *name,
+ bfd **subsbfd ATTRIBUTE_UNUSED)
+{
+ lang_input_statement_type *input;
+ lang_input_statement_type orig_input;
+
+ input = (lang_input_statement_type *)
+ xcalloc (1, sizeof (lang_input_statement_type));
+ input->filename = abfd->filename;
+ input->local_sym_name = abfd->filename;
+ input->the_bfd = abfd;
+
+ /* Save the original data for trace files/tries below, as plugins
+ (if enabled) may possibly alter it to point to a replacement
+ BFD, but we still want to output the original BFD filename. */
+ orig_input = *input;
+#ifdef ENABLE_PLUGINS
+ if (bfd_my_archive (abfd) != NULL && plugin_active_plugins_p ())
+ {
+ /* We must offer this archive member to the plugins to claim. */
+ int fd = open (bfd_my_archive (abfd)->filename, O_RDONLY | O_BINARY);
+ if (fd >= 0)
+ {
+ struct ld_plugin_input_file file;
+ int claimed = 0;
+ /* Offset and filesize must refer to the individual archive
+ member, not the whole file, and must exclude the header.
+ Fortunately for us, that is how the data is stored in the
+ origin field of the bfd and in the arelt_data. */
+ file.name = bfd_my_archive (abfd)->filename;
+ file.offset = abfd->origin;
+ file.filesize = arelt_size (abfd);
+ file.fd = fd;
+ /* We create a dummy BFD, initially empty, to house
+ whatever symbols the plugin may want to add. */
+ file.handle = plugin_get_ir_dummy_bfd (abfd->filename, abfd);
+ if (plugin_call_claim_file (&file, &claimed))
+ einfo (_("%P%F: %s: plugin reported error claiming file\n"),
+ plugin_error_plugin ());
+ /* fd belongs to us, not the plugin; but we don't need it. */
+ close (fd);
+ if (claimed)
+ {
+ /* Substitute the dummy BFD. */
+ input->the_bfd = file.handle;
+ input->claimed = TRUE;
+ bfd_make_readable (input->the_bfd);
+ *subsbfd = input->the_bfd;
+ }
+ else
+ {
+ /* Abandon the dummy BFD. */
+ bfd_close_all_done (file.handle);
+ input->claimed = FALSE;
+ }
+ }
+ }
+#endif /* ENABLE_PLUGINS */
+
+ ldlang_add_file (input);
+
+ if (config.map_file != NULL)
+ {
+ static bfd_boolean header_printed;
+ struct bfd_link_hash_entry *h;
+ bfd *from;
+ int len;
+
+ h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, TRUE);
+
+ if (h == NULL)
+ from = NULL;
+ else
+ {
+ switch (h->type)
+ {
+ default:
+ from = NULL;
+ break;
+
+ case bfd_link_hash_defined:
+ case bfd_link_hash_defweak:
+ from = h->u.def.section->owner;
+ break;
+
+ case bfd_link_hash_undefined:
+ case bfd_link_hash_undefweak:
+ from = h->u.undef.abfd;
+ break;
+
+ case bfd_link_hash_common:
+ from = h->u.c.p->section->owner;
+ break;
+ }
+ }
+
+ if (! header_printed)
+ {
+ char buf[100];
+
+ sprintf (buf, _("Archive member included because of file (symbol)\n\n"));
+ minfo ("%s", buf);
+ header_printed = TRUE;
+ }
+
+ if (bfd_my_archive (abfd) == NULL)
+ {
+ minfo ("%s", bfd_get_filename (abfd));
+ len = strlen (bfd_get_filename (abfd));
+ }
+ else
+ {
+ minfo ("%s(%s)", bfd_get_filename (bfd_my_archive (abfd)),
+ bfd_get_filename (abfd));
+ len = (strlen (bfd_get_filename (bfd_my_archive (abfd)))
+ + strlen (bfd_get_filename (abfd))
+ + 2);
+ }
+
+ if (len >= 29)
+ {
+ print_nl ();
+ len = 0;
+ }
+ while (len < 30)
+ {
+ print_space ();
+ ++len;
+ }
+
+ if (from != NULL)
+ minfo ("%B ", from);
+ if (h != NULL)
+ minfo ("(%T)\n", h->root.string);
+ else
+ minfo ("(%s)\n", name);
+ }
+
+ if (trace_files || trace_file_tries)
+ info_msg ("%I\n", &orig_input);
+ return TRUE;
+}
+
+/* This is called when BFD has discovered a symbol which is defined
+ multiple times. */
+
+static bfd_boolean
+multiple_definition (struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ const char *name,
+ bfd *obfd,
+ asection *osec,
+ bfd_vma oval,
+ bfd *nbfd,
+ asection *nsec,
+ bfd_vma nval)
+{
+#ifdef ENABLE_PLUGINS
+ /* We may get called back even when --allow-multiple-definition is in
+ effect, as the plugin infrastructure needs to use this hook in
+ order to swap out IR-only symbols for real ones. In that case,
+ it will let us know not to continue by returning TRUE even if this
+ is not an IR-only vs. non-IR symbol conflict. */
+ if (plugin_multiple_definition (info, name, obfd, osec, oval, nbfd,
+ nsec, nval))
+ return TRUE;
+#endif /* ENABLE_PLUGINS */
+
+ /* If either section has the output_section field set to
+ bfd_abs_section_ptr, it means that the section is being
+ discarded, and this is not really a multiple definition at all.
+ FIXME: It would be cleaner to somehow ignore symbols defined in
+ sections which are being discarded. */
+ if ((osec->output_section != NULL
+ && ! bfd_is_abs_section (osec)
+ && bfd_is_abs_section (osec->output_section))
+ || (nsec->output_section != NULL
+ && ! bfd_is_abs_section (nsec)
+ && bfd_is_abs_section (nsec->output_section)))
+ return TRUE;
+
+ einfo (_("%X%C: multiple definition of `%T'\n"),
+ nbfd, nsec, nval, name);
+ if (obfd != NULL)
+ einfo (_("%D: first defined here\n"), obfd, osec, oval);
+
+ if (RELAXATION_ENABLED)
+ {
+ einfo (_("%P: Disabling relaxation: it will not work with multiple definitions\n"));
+ command_line.disable_target_specific_optimizations = -1;
+ }
+
+ return TRUE;
+}
+
+/* This is called when there is a definition of a common symbol, or
+ when a common symbol is found for a symbol that is already defined,
+ or when two common symbols are found. We only do something if
+ -warn-common was used. */
+
+static bfd_boolean
+multiple_common (struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ const char *name,
+ bfd *obfd,
+ enum bfd_link_hash_type otype,
+ bfd_vma osize,
+ bfd *nbfd,
+ enum bfd_link_hash_type ntype,
+ bfd_vma nsize)
+{
+ if (! config.warn_common)
+ return TRUE;
+
+ if (ntype == bfd_link_hash_defined
+ || ntype == bfd_link_hash_defweak
+ || ntype == bfd_link_hash_indirect)
+ {
+ ASSERT (otype == bfd_link_hash_common);
+ einfo (_("%B: warning: definition of `%T' overriding common\n"),
+ nbfd, name);
+ if (obfd != NULL)
+ einfo (_("%B: warning: common is here\n"), obfd);
+ }
+ else if (otype == bfd_link_hash_defined
+ || otype == bfd_link_hash_defweak
+ || otype == bfd_link_hash_indirect)
+ {
+ ASSERT (ntype == bfd_link_hash_common);
+ einfo (_("%B: warning: common of `%T' overridden by definition\n"),
+ nbfd, name);
+ if (obfd != NULL)
+ einfo (_("%B: warning: defined here\n"), obfd);
+ }
+ else
+ {
+ ASSERT (otype == bfd_link_hash_common && ntype == bfd_link_hash_common);
+ if (osize > nsize)
+ {
+ einfo (_("%B: warning: common of `%T' overridden by larger common\n"),
+ nbfd, name);
+ if (obfd != NULL)
+ einfo (_("%B: warning: larger common is here\n"), obfd);
+ }
+ else if (nsize > osize)
+ {
+ einfo (_("%B: warning: common of `%T' overriding smaller common\n"),
+ nbfd, name);
+ if (obfd != NULL)
+ einfo (_("%B: warning: smaller common is here\n"), obfd);
+ }
+ else
+ {
+ einfo (_("%B: warning: multiple common of `%T'\n"), nbfd, name);
+ if (obfd != NULL)
+ einfo (_("%B: warning: previous common is here\n"), obfd);
+ }
+ }
+
+ return TRUE;
+}
+
+/* This is called when BFD has discovered a set element. H is the
+ entry in the linker hash table for the set. SECTION and VALUE
+ represent a value which should be added to the set. */
+
+static bfd_boolean
+add_to_set (struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ struct bfd_link_hash_entry *h,
+ bfd_reloc_code_real_type reloc,
+ bfd *abfd,
+ asection *section,
+ bfd_vma value)
+{
+ if (config.warn_constructors)
+ einfo (_("%P: warning: global constructor %s used\n"),
+ h->root.string);
+
+ if (! config.build_constructors)
+ return TRUE;
+
+ ldctor_add_set_entry (h, reloc, NULL, section, value);
+
+ if (h->type == bfd_link_hash_new)
+ {
+ h->type = bfd_link_hash_undefined;
+ h->u.undef.abfd = abfd;
+ /* We don't call bfd_link_add_undef to add this to the list of
+ undefined symbols because we are going to define it
+ ourselves. */
+ }
+
+ return TRUE;
+}
+
+/* This is called when BFD has discovered a constructor. This is only
+ called for some object file formats--those which do not handle
+ constructors in some more clever fashion. This is similar to
+ adding an element to a set, but less general. */
+
+static bfd_boolean
+constructor_callback (struct bfd_link_info *info,
+ bfd_boolean constructor,
+ const char *name,
+ bfd *abfd,
+ asection *section,
+ bfd_vma value)
+{
+ char *s;
+ struct bfd_link_hash_entry *h;
+ char set_name[1 + sizeof "__CTOR_LIST__"];
+
+ if (config.warn_constructors)
+ einfo (_("%P: warning: global constructor %s used\n"), name);
+
+ if (! config.build_constructors)
+ return TRUE;
+
+ /* Ensure that BFD_RELOC_CTOR exists now, so that we can give a
+ useful error message. */
+ if (bfd_reloc_type_lookup (link_info.output_bfd, BFD_RELOC_CTOR) == NULL
+ && (info->relocatable
+ || bfd_reloc_type_lookup (abfd, BFD_RELOC_CTOR) == NULL))
+ einfo (_("%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"));
+
+ s = set_name;
+ if (bfd_get_symbol_leading_char (abfd) != '\0')
+ *s++ = bfd_get_symbol_leading_char (abfd);
+ if (constructor)
+ strcpy (s, "__CTOR_LIST__");
+ else
+ strcpy (s, "__DTOR_LIST__");
+
+ h = bfd_link_hash_lookup (info->hash, set_name, TRUE, TRUE, TRUE);
+ if (h == (struct bfd_link_hash_entry *) NULL)
+ einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
+ if (h->type == bfd_link_hash_new)
+ {
+ h->type = bfd_link_hash_undefined;
+ h->u.undef.abfd = abfd;
+ /* We don't call bfd_link_add_undef to add this to the list of
+ undefined symbols because we are going to define it
+ ourselves. */
+ }
+
+ ldctor_add_set_entry (h, BFD_RELOC_CTOR, name, section, value);
+ return TRUE;
+}
+
+/* A structure used by warning_callback to pass information through
+ bfd_map_over_sections. */
+
+struct warning_callback_info
+{
+ bfd_boolean found;
+ const char *warning;
+ const char *symbol;
+ asymbol **asymbols;
+};
+
+/* This is called when there is a reference to a warning symbol. */
+
+static bfd_boolean
+warning_callback (struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ const char *warning,
+ const char *symbol,
+ bfd *abfd,
+ asection *section,
+ bfd_vma address)
+{
+ /* This is a hack to support warn_multiple_gp. FIXME: This should
+ have a cleaner interface, but what? */
+ if (! config.warn_multiple_gp
+ && strcmp (warning, "using multiple gp values") == 0)
+ return TRUE;
+
+ if (section != NULL)
+ einfo ("%C: %s%s\n", abfd, section, address, _("warning: "), warning);
+ else if (abfd == NULL)
+ einfo ("%P: %s%s\n", _("warning: "), warning);
+ else if (symbol == NULL)
+ einfo ("%B: %s%s\n", abfd, _("warning: "), warning);
+ else
+ {
+ struct warning_callback_info cinfo;
+
+ /* Look through the relocs to see if we can find a plausible
+ address. */
+
+ if (!bfd_generic_link_read_symbols (abfd))
+ einfo (_("%B%F: could not read symbols: %E\n"), abfd);
+
+ cinfo.found = FALSE;
+ cinfo.warning = warning;
+ cinfo.symbol = symbol;
+ cinfo.asymbols = bfd_get_outsymbols (abfd);
+ bfd_map_over_sections (abfd, warning_find_reloc, &cinfo);
+
+ if (! cinfo.found)
+ einfo ("%B: %s%s\n", abfd, _("warning: "), warning);
+ }
+
+ return TRUE;
+}
+
+/* This is called by warning_callback for each section. It checks the
+ relocs of the section to see if it can find a reference to the
+ symbol which triggered the warning. If it can, it uses the reloc
+ to give an error message with a file and line number. */
+
+static void
+warning_find_reloc (bfd *abfd, asection *sec, void *iarg)
+{
+ struct warning_callback_info *info = (struct warning_callback_info *) iarg;
+ long relsize;
+ arelent **relpp;
+ long relcount;
+ arelent **p, **pend;
+
+ if (info->found)
+ return;
+
+ relsize = bfd_get_reloc_upper_bound (abfd, sec);
+ if (relsize < 0)
+ einfo (_("%B%F: could not read relocs: %E\n"), abfd);
+ if (relsize == 0)
+ return;
+
+ relpp = (arelent **) xmalloc (relsize);
+ relcount = bfd_canonicalize_reloc (abfd, sec, relpp, info->asymbols);
+ if (relcount < 0)
+ einfo (_("%B%F: could not read relocs: %E\n"), abfd);
+
+ p = relpp;
+ pend = p + relcount;
+ for (; p < pend && *p != NULL; p++)
+ {
+ arelent *q = *p;
+
+ if (q->sym_ptr_ptr != NULL
+ && *q->sym_ptr_ptr != NULL
+ && strcmp (bfd_asymbol_name (*q->sym_ptr_ptr), info->symbol) == 0)
+ {
+ /* We found a reloc for the symbol we are looking for. */
+ einfo ("%C: %s%s\n", abfd, sec, q->address, _("warning: "),
+ info->warning);
+ info->found = TRUE;
+ break;
+ }
+ }
+
+ free (relpp);
+}
+
+/* This is called when an undefined symbol is found. */
+
+static bfd_boolean
+undefined_symbol (struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ const char *name,
+ bfd *abfd,
+ asection *section,
+ bfd_vma address,
+ bfd_boolean error)
+{
+ static char *error_name;
+ static unsigned int error_count;
+
+#define MAX_ERRORS_IN_A_ROW 5
+
+ if (config.warn_once)
+ {
+ static struct bfd_hash_table *hash;
+
+ /* Only warn once about a particular undefined symbol. */
+ if (hash == NULL)
+ {
+ hash = (struct bfd_hash_table *)
+ xmalloc (sizeof (struct bfd_hash_table));
+ if (!bfd_hash_table_init (hash, bfd_hash_newfunc,
+ sizeof (struct bfd_hash_entry)))
+ einfo (_("%F%P: bfd_hash_table_init failed: %E\n"));
+ }
+
+ if (bfd_hash_lookup (hash, name, FALSE, FALSE) != NULL)
+ return TRUE;
+
+ if (bfd_hash_lookup (hash, name, TRUE, TRUE) == NULL)
+ einfo (_("%F%P: bfd_hash_lookup failed: %E\n"));
+ }
+
+ /* We never print more than a reasonable number of errors in a row
+ for a single symbol. */
+ if (error_name != NULL
+ && strcmp (name, error_name) == 0)
+ ++error_count;
+ else
+ {
+ error_count = 0;
+ if (error_name != NULL)
+ free (error_name);
+ error_name = xstrdup (name);
+ }
+
+ if (section != NULL)
+ {
+ if (error_count < MAX_ERRORS_IN_A_ROW)
+ {
+ if (error)
+ einfo (_("%X%C: undefined reference to `%T'\n"),
+ abfd, section, address, name);
+ else
+ einfo (_("%C: warning: undefined reference to `%T'\n"),
+ abfd, section, address, name);
+ }
+ else if (error_count == MAX_ERRORS_IN_A_ROW)
+ {
+ if (error)
+ einfo (_("%X%D: more undefined references to `%T' follow\n"),
+ abfd, section, address, name);
+ else
+ einfo (_("%D: warning: more undefined references to `%T' follow\n"),
+ abfd, section, address, name);
+ }
+ else if (error)
+ einfo ("%X");
+ }
+ else
+ {
+ if (error_count < MAX_ERRORS_IN_A_ROW)
+ {
+ if (error)
+ einfo (_("%X%B: undefined reference to `%T'\n"),
+ abfd, name);
+ else
+ einfo (_("%B: warning: undefined reference to `%T'\n"),
+ abfd, name);
+ }
+ else if (error_count == MAX_ERRORS_IN_A_ROW)
+ {
+ if (error)
+ einfo (_("%X%B: more undefined references to `%T' follow\n"),
+ abfd, name);
+ else
+ einfo (_("%B: warning: more undefined references to `%T' follow\n"),
+ abfd, name);
+ }
+ else if (error)
+ einfo ("%X");
+ }
+
+ return TRUE;
+}
+
+/* Counter to limit the number of relocation overflow error messages
+ to print. Errors are printed as it is decremented. When it's
+ called and the counter is zero, a final message is printed
+ indicating more relocations were omitted. When it gets to -1, no
+ such errors are printed. If it's initially set to a value less
+ than -1, all such errors will be printed (--verbose does this). */
+
+int overflow_cutoff_limit = 10;
+
+/* This is called when a reloc overflows. */
+
+static bfd_boolean
+reloc_overflow (struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ struct bfd_link_hash_entry *entry,
+ const char *name,
+ const char *reloc_name,
+ bfd_vma addend,
+ bfd *abfd,
+ asection *section,
+ bfd_vma address)
+{
+ if (overflow_cutoff_limit == -1)
+ return TRUE;
+
+ einfo ("%X%C:", abfd, section, address);
+
+ if (overflow_cutoff_limit >= 0
+ && overflow_cutoff_limit-- == 0)
+ {
+ einfo (_(" additional relocation overflows omitted from the output\n"));
+ return TRUE;
+ }
+
+ if (entry)
+ {
+ while (entry->type == bfd_link_hash_indirect
+ || entry->type == bfd_link_hash_warning)
+ entry = entry->u.i.link;
+ switch (entry->type)
+ {
+ case bfd_link_hash_undefined:
+ case bfd_link_hash_undefweak:
+ einfo (_(" relocation truncated to fit: %s against undefined symbol `%T'"),
+ reloc_name, entry->root.string);
+ break;
+ case bfd_link_hash_defined:
+ case bfd_link_hash_defweak:
+ einfo (_(" relocation truncated to fit: %s against symbol `%T' defined in %A section in %B"),
+ reloc_name, entry->root.string,
+ entry->u.def.section,
+ entry->u.def.section == bfd_abs_section_ptr
+ ? link_info.output_bfd : entry->u.def.section->owner);
+ break;
+ default:
+ abort ();
+ break;
+ }
+ }
+ else
+ einfo (_(" relocation truncated to fit: %s against `%T'"),
+ reloc_name, name);
+ if (addend != 0)
+ einfo ("+%v", addend);
+ einfo ("\n");
+ return TRUE;
+}
+
+/* This is called when a dangerous relocation is made. */
+
+static bfd_boolean
+reloc_dangerous (struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ const char *message,
+ bfd *abfd,
+ asection *section,
+ bfd_vma address)
+{
+ einfo (_("%X%C: dangerous relocation: %s\n"),
+ abfd, section, address, message);
+ return TRUE;
+}
+
+/* This is called when a reloc is being generated attached to a symbol
+ that is not being output. */
+
+static bfd_boolean
+unattached_reloc (struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ const char *name,
+ bfd *abfd,
+ asection *section,
+ bfd_vma address)
+{
+ einfo (_("%X%C: reloc refers to symbol `%T' which is not being output\n"),
+ abfd, section, address, name);
+ return TRUE;
+}
+
+/* This is called if link_info.notice_all is set, or when a symbol in
+ link_info.notice_hash is found. Symbols are put in notice_hash
+ using the -y option, while notice_all is set if the --cref option
+ has been supplied, or if there are any NOCROSSREFS sections in the
+ linker script; and if plugins are active, since they need to monitor
+ all references from non-IR files. */
+
+static bfd_boolean
+notice (struct bfd_link_info *info,
+ const char *name,
+ bfd *abfd,
+ asection *section,
+ bfd_vma value)
+{
+ if (name == NULL)
+ {
+ if (command_line.cref || nocrossref_list != NULL)
+ return handle_asneeded_cref (abfd, (enum notice_asneeded_action) value);
+ return TRUE;
+ }
+
+#ifdef ENABLE_PLUGINS
+ /* We should hide symbols in the dummy IR BFDs from the nocrossrefs list
+ and let the real object files that are generated and added later trip
+ the error instead. Similarly would be better to trace the real symbol
+ from the real file than the temporary dummy. */
+ if (!plugin_notice (info, name, abfd, section, value))
+ return TRUE;
+#endif /* ENABLE_PLUGINS */
+
+ if (info->notice_hash != NULL
+ && bfd_hash_lookup (info->notice_hash, name, FALSE, FALSE) != NULL)
+ {
+ if (bfd_is_und_section (section))
+ einfo ("%B: reference to %s\n", abfd, name);
+ else
+ einfo ("%B: definition of %s\n", abfd, name);
+ }
+
+ if (command_line.cref || nocrossref_list != NULL)
+ add_cref (name, abfd, section, value);
+
+ return TRUE;
+}
diff --git a/binutils-2.21/ld/ldmain.h b/binutils-2.21/ld/ldmain.h
new file mode 100644
index 0000000..57ce8d7
--- /dev/null
+++ b/binutils-2.21/ld/ldmain.h
@@ -0,0 +1,49 @@
+/* ldmain.h -
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2002, 2003, 2004,
+ 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef LDMAIN_H
+#define LDMAIN_H
+
+extern char *program_name;
+extern const char *ld_sysroot;
+extern char *ld_canon_sysroot;
+extern int ld_canon_sysroot_len;
+extern FILE *saved_script_handle;
+extern FILE *previous_script_handle;
+extern bfd_boolean force_make_executable;
+extern char *default_target;
+extern bfd_boolean trace_files;
+extern bfd_boolean trace_file_tries;
+extern bfd_boolean version_printed;
+extern bfd_boolean whole_archive;
+extern bfd_boolean add_DT_NEEDED_for_regular;
+extern bfd_boolean add_DT_NEEDED_for_dynamic;
+extern bfd_boolean demangling;
+extern int g_switch_value;
+extern const char *output_filename;
+extern struct bfd_link_info link_info;
+extern int overflow_cutoff_limit;
+
+extern void add_ysym (const char *);
+extern void add_wrap (const char *);
+extern void add_keepsyms_file (const char *);
+
+#endif
diff --git a/binutils-2.21/ld/ldmisc.c b/binutils-2.21/ld/ldmisc.c
new file mode 100644
index 0000000..74baa98
--- /dev/null
+++ b/binutils-2.21/ld/ldmisc.c
@@ -0,0 +1,507 @@
+/* ldmisc.c
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+ Free Software Foundation, Inc.
+ Written by Steve Chamberlain of Cygnus Support.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+#include "libiberty.h"
+#include "demangle.h"
+#include <stdarg.h>
+#include "ld.h"
+#include "ldmisc.h"
+#include "ldexp.h"
+#include "ldlang.h"
+#include <ldgram.h>
+#include "ldlex.h"
+#include "ldmain.h"
+#include "ldfile.h"
+#include "elf-bfd.h"
+
+/*
+ %% literal %
+ %A section name from a section
+ %B filename from a bfd
+ %C clever filename:linenumber with function
+ %D like %C, but no function name
+ %E current bfd error or errno
+ %F error is fatal
+ %G like %D, but only function name
+ %I filename from a lang_input_statement_type
+ %P print program name
+ %R info about a relent
+ %S print script file and linenumber
+ %T symbol name
+ %V hex bfd_vma
+ %W hex bfd_vma with 0x with no leading zeros taking up 8 spaces
+ %X no object output, fail return
+ %d integer, like printf
+ %ld long, like printf
+ %lu unsigned long, like printf
+ %p native (host) void* pointer, like printf
+ %s arbitrary string, like printf
+ %u integer, like printf
+ %v hex bfd_vma, no leading zeros
+*/
+
+void
+vfinfo (FILE *fp, const char *fmt, va_list arg, bfd_boolean is_warning)
+{
+ bfd_boolean fatal = FALSE;
+
+ while (*fmt != '\0')
+ {
+ while (*fmt != '%' && *fmt != '\0')
+ {
+ putc (*fmt, fp);
+ fmt++;
+ }
+
+ if (*fmt == '%')
+ {
+ fmt++;
+ switch (*fmt++)
+ {
+ case '%':
+ /* literal % */
+ putc ('%', fp);
+ break;
+
+ case 'X':
+ /* no object output, fail return */
+ config.make_executable = FALSE;
+ break;
+
+ case 'V':
+ /* hex bfd_vma */
+ {
+ bfd_vma value = va_arg (arg, bfd_vma);
+ fprintf_vma (fp, value);
+ }
+ break;
+
+ case 'v':
+ /* hex bfd_vma, no leading zeros */
+ {
+ char buf[100];
+ char *p = buf;
+ bfd_vma value = va_arg (arg, bfd_vma);
+ sprintf_vma (p, value);
+ while (*p == '0')
+ p++;
+ if (!*p)
+ p--;
+ fputs (p, fp);
+ }
+ break;
+
+ case 'W':
+ /* hex bfd_vma with 0x with no leading zeroes taking up
+ 8 spaces. */
+ {
+ char buf[100];
+ bfd_vma value;
+ char *p;
+ int len;
+
+ value = va_arg (arg, bfd_vma);
+ sprintf_vma (buf, value);
+ for (p = buf; *p == '0'; ++p)
+ ;
+ if (*p == '\0')
+ --p;
+ len = strlen (p);
+ while (len < 8)
+ {
+ putc (' ', fp);
+ ++len;
+ }
+ fprintf (fp, "0x%s", p);
+ }
+ break;
+
+ case 'T':
+ /* Symbol name. */
+ {
+ const char *name = va_arg (arg, const char *);
+
+ if (name == NULL || *name == 0)
+ {
+ fprintf (fp, _("no symbol"));
+ break;
+ }
+ else if (demangling)
+ {
+ char *demangled;
+
+ demangled = bfd_demangle (link_info.output_bfd, name,
+ DMGL_ANSI | DMGL_PARAMS);
+ if (demangled != NULL)
+ {
+ fprintf (fp, "%s", demangled);
+ free (demangled);
+ break;
+ }
+ }
+ fprintf (fp, "%s", name);
+ }
+ break;
+
+ case 'A':
+ /* section name from a section */
+ {
+ asection *sec = va_arg (arg, asection *);
+ bfd *abfd = sec->owner;
+ const char *group = NULL;
+ struct coff_comdat_info *ci;
+
+ fprintf (fp, "%s", sec->name);
+ if (abfd != NULL
+ && bfd_get_flavour (abfd) == bfd_target_elf_flavour
+ && elf_next_in_group (sec) != NULL
+ && (sec->flags & SEC_GROUP) == 0)
+ group = elf_group_name (sec);
+ else if (abfd != NULL
+ && bfd_get_flavour (abfd) == bfd_target_coff_flavour
+ && (ci = bfd_coff_get_comdat_section (sec->owner,
+ sec)) != NULL)
+ group = ci->name;
+ if (group != NULL)
+ fprintf (fp, "[%s]", group);
+ }
+ break;
+
+ case 'B':
+ /* filename from a bfd */
+ {
+ bfd *abfd = va_arg (arg, bfd *);
+
+ if (abfd == NULL)
+ fprintf (fp, "%s generated", program_name);
+ else if (abfd->my_archive)
+ fprintf (fp, "%s(%s)", abfd->my_archive->filename,
+ abfd->filename);
+ else
+ fprintf (fp, "%s", abfd->filename);
+ }
+ break;
+
+ case 'F':
+ /* Error is fatal. */
+ fatal = TRUE;
+ break;
+
+ case 'P':
+ /* Print program name. */
+ fprintf (fp, "%s", program_name);
+ break;
+
+ case 'E':
+ /* current bfd error or errno */
+ fprintf (fp, "%s", bfd_errmsg (bfd_get_error ()));
+ break;
+
+ case 'I':
+ /* filename from a lang_input_statement_type */
+ {
+ lang_input_statement_type *i;
+
+ i = va_arg (arg, lang_input_statement_type *);
+ if (bfd_my_archive (i->the_bfd) != NULL)
+ fprintf (fp, "(%s)",
+ bfd_get_filename (bfd_my_archive (i->the_bfd)));
+ fprintf (fp, "%s", i->local_sym_name);
+ if (bfd_my_archive (i->the_bfd) == NULL
+ && strcmp (i->local_sym_name, i->filename) != 0)
+ fprintf (fp, " (%s)", i->filename);
+ }
+ break;
+
+ case 'S':
+ /* Print script file and linenumber. */
+ if (parsing_defsym)
+ fprintf (fp, "--defsym %s", lex_string);
+ else if (ldfile_input_filename != NULL)
+ fprintf (fp, "%s:%u", ldfile_input_filename, lineno);
+ else
+ fprintf (fp, _("built in linker script:%u"), lineno);
+ break;
+
+ case 'R':
+ /* Print all that's interesting about a relent. */
+ {
+ arelent *relent = va_arg (arg, arelent *);
+
+ lfinfo (fp, "%s+0x%v (type %s)",
+ (*(relent->sym_ptr_ptr))->name,
+ relent->addend,
+ relent->howto->name);
+ }
+ break;
+
+ case 'C':
+ case 'D':
+ case 'G':
+ /* Clever filename:linenumber with function name if possible.
+ The arguments are a BFD, a section, and an offset. */
+ {
+ static bfd *last_bfd;
+ static char *last_file = NULL;
+ static char *last_function = NULL;
+ bfd *abfd;
+ asection *section;
+ bfd_vma offset;
+ asymbol **asymbols = NULL;
+ const char *filename;
+ const char *functionname;
+ unsigned int linenumber;
+ bfd_boolean discard_last;
+
+ abfd = va_arg (arg, bfd *);
+ section = va_arg (arg, asection *);
+ offset = va_arg (arg, bfd_vma);
+
+ if (abfd != NULL)
+ {
+ if (!bfd_generic_link_read_symbols (abfd))
+ einfo (_("%B%F: could not read symbols: %E\n"), abfd);
+
+ asymbols = bfd_get_outsymbols (abfd);
+ }
+
+ /* The GNU Coding Standard requires that error messages
+ be of the form:
+
+ source-file-name:lineno: message
+
+ We do not always have a line number available so if
+ we cannot find them we print out the section name and
+ offset instread. */
+ discard_last = TRUE;
+ if (abfd != NULL
+ && bfd_find_nearest_line (abfd, section, asymbols, offset,
+ &filename, &functionname,
+ &linenumber))
+ {
+ if (functionname != NULL && fmt[-1] == 'C')
+ {
+ /* Detect the case where we are printing out a
+ message for the same function as the last
+ call to vinfo ("%C"). In this situation do
+ not print out the ABFD filename or the
+ function name again. Note - we do still
+ print out the source filename, as this will
+ allow programs that parse the linker's output
+ (eg emacs) to correctly locate multiple
+ errors in the same source file. */
+ if (last_bfd == NULL
+ || last_file == NULL
+ || last_function == NULL
+ || last_bfd != abfd
+ || (filename != NULL
+ && strcmp (last_file, filename) != 0)
+ || strcmp (last_function, functionname) != 0)
+ {
+ lfinfo (fp, _("%B: In function `%T':\n"),
+ abfd, functionname);
+
+ last_bfd = abfd;
+ if (last_file != NULL)
+ free (last_file);
+ last_file = NULL;
+ if (filename)
+ last_file = xstrdup (filename);
+ if (last_function != NULL)
+ free (last_function);
+ last_function = xstrdup (functionname);
+ }
+ discard_last = FALSE;
+ }
+ else
+ lfinfo (fp, "%B:", abfd);
+
+ if (filename != NULL)
+ fprintf (fp, "%s:", filename);
+
+ if (functionname != NULL && fmt[-1] == 'G')
+ lfinfo (fp, "%T", functionname);
+ else if (filename != NULL && linenumber != 0)
+ fprintf (fp, "%u", linenumber);
+ else
+ lfinfo (fp, "(%A+0x%v)", section, offset);
+ }
+ else
+ lfinfo (fp, "%B:(%A+0x%v)", abfd, section, offset);
+
+ if (discard_last)
+ {
+ last_bfd = NULL;
+ if (last_file != NULL)
+ {
+ free (last_file);
+ last_file = NULL;
+ }
+ if (last_function != NULL)
+ {
+ free (last_function);
+ last_function = NULL;
+ }
+ }
+ }
+ break;
+
+ case 'p':
+ /* native (host) void* pointer, like printf */
+ fprintf (fp, "%p", va_arg (arg, void *));
+ break;
+
+ case 's':
+ /* arbitrary string, like printf */
+ fprintf (fp, "%s", va_arg (arg, char *));
+ break;
+
+ case 'd':
+ /* integer, like printf */
+ fprintf (fp, "%d", va_arg (arg, int));
+ break;
+
+ case 'u':
+ /* unsigned integer, like printf */
+ fprintf (fp, "%u", va_arg (arg, unsigned int));
+ break;
+
+ case 'l':
+ if (*fmt == 'd')
+ {
+ fprintf (fp, "%ld", va_arg (arg, long));
+ ++fmt;
+ break;
+ }
+ else if (*fmt == 'u')
+ {
+ fprintf (fp, "%lu", va_arg (arg, unsigned long));
+ ++fmt;
+ break;
+ }
+ /* Fall thru */
+
+ default:
+ fprintf (fp, "%%%c", fmt[-1]);
+ break;
+ }
+ }
+ }
+
+ if (is_warning && config.fatal_warnings)
+ config.make_executable = FALSE;
+
+ if (fatal)
+ xexit (1);
+}
+
+/* Format info message and print on stdout. */
+
+/* (You would think this should be called just "info", but then you
+ would be hosed by LynxOS, which defines that name in its libc.) */
+
+void
+info_msg (const char *fmt, ...)
+{
+ va_list arg;
+
+ va_start (arg, fmt);
+ vfinfo (stdout, fmt, arg, FALSE);
+ va_end (arg);
+}
+
+/* ('e' for error.) Format info message and print on stderr. */
+
+void
+einfo (const char *fmt, ...)
+{
+ va_list arg;
+
+ va_start (arg, fmt);
+ vfinfo (stderr, fmt, arg, TRUE);
+ va_end (arg);
+}
+
+void
+info_assert (const char *file, unsigned int line)
+{
+ einfo (_("%F%P: internal error %s %d\n"), file, line);
+}
+
+/* ('m' for map) Format info message and print on map. */
+
+void
+minfo (const char *fmt, ...)
+{
+ if (config.map_file != NULL)
+ {
+ va_list arg;
+
+ va_start (arg, fmt);
+ vfinfo (config.map_file, fmt, arg, FALSE);
+ va_end (arg);
+ }
+}
+
+void
+lfinfo (FILE *file, const char *fmt, ...)
+{
+ va_list arg;
+
+ va_start (arg, fmt);
+ vfinfo (file, fmt, arg, FALSE);
+ va_end (arg);
+}
+
+/* Functions to print the link map. */
+
+void
+print_space (void)
+{
+ fprintf (config.map_file, " ");
+}
+
+void
+print_nl (void)
+{
+ fprintf (config.map_file, "\n");
+}
+
+/* A more or less friendly abort message. In ld.h abort is defined to
+ call this function. */
+
+void
+ld_abort (const char *file, int line, const char *fn)
+{
+ if (fn != NULL)
+ einfo (_("%P: internal error: aborting at %s line %d in %s\n"),
+ file, line, fn);
+ else
+ einfo (_("%P: internal error: aborting at %s line %d\n"),
+ file, line);
+ einfo (_("%P%F: please report this bug\n"));
+ xexit (1);
+}
diff --git a/binutils-2.21/ld/ldmisc.h b/binutils-2.21/ld/ldmisc.h
new file mode 100644
index 0000000..82a498d
--- /dev/null
+++ b/binutils-2.21/ld/ldmisc.h
@@ -0,0 +1,45 @@
+/* ldmisc.h -
+ Copyright 1991, 1992, 1993, 1994, 1996, 1997, 2001, 2003, 2004, 2005, 2007
+ Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef LDMISC_H
+#define LDMISC_H
+
+extern void vfinfo (FILE *fp, const char *fmt, va_list arg, bfd_boolean is_warning);
+extern void einfo (const char *, ...);
+extern void minfo (const char *, ...);
+extern void info_msg (const char *, ...);
+extern void lfinfo (FILE *, const char *, ...);
+extern void info_assert (const char *, unsigned int);
+extern void yyerror (const char *);
+extern void *xmalloc (size_t);
+extern void *xrealloc (void *, size_t);
+extern void xexit (int);
+
+#define ASSERT(x) \
+do { if (!(x)) info_assert(__FILE__,__LINE__); } while (0)
+
+#define FAIL() \
+do { info_assert(__FILE__,__LINE__); } while (0)
+
+extern void print_space (void);
+extern void print_nl (void);
+
+#endif
diff --git a/binutils-2.21/ld/ldver.c b/binutils-2.21/ld/ldver.c
new file mode 100644
index 0000000..df4fdca
--- /dev/null
+++ b/binutils-2.21/ld/ldver.c
@@ -0,0 +1,61 @@
+/* ldver.c -- Print linker version.
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000, 2001, 2002,
+ 2003, 2005, 2007, 2008, 2009, 2010
+ Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdver.h"
+
+#include "ld.h"
+#include "ldver.h"
+#include "ldexp.h"
+#include "ldlang.h"
+#include "ldfile.h"
+#include "ldemul.h"
+#include "ldmain.h"
+
+void
+ldversion (int noisy)
+{
+ /* Output for noisy == 2 is intended to follow the GNU standards. */
+ fprintf (stdout, _("GNU ld %s\n"), BFD_VERSION_STRING);
+
+ if (noisy & 2)
+ {
+ printf (_("Copyright 2010 Free Software Foundation, Inc.\n"));
+ printf (_("\
+This program is free software; you may redistribute it under the terms of\n\
+the GNU General Public License version 3 or (at your option) a later version.\n\
+This program has absolutely no warranty.\n"));
+ }
+
+ if (noisy & 1)
+ {
+ ld_emulation_xfer_type **ptr = ld_emulations;
+
+ printf (_(" Supported emulations:\n"));
+ while (*ptr)
+ {
+ printf (" %s\n", (*ptr)->emulation_name);
+ ptr++;
+ }
+ }
+}
diff --git a/binutils-2.21/ld/ldver.h b/binutils-2.21/ld/ldver.h
new file mode 100644
index 0000000..0779ce8
--- /dev/null
+++ b/binutils-2.21/ld/ldver.h
@@ -0,0 +1,22 @@
+/* ldver.h -- Header file for ldver.c.
+ Copyright 1991, 1992, 1993, 1996, 2001, 2003, 2005, 2007
+ Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+void ldversion (int);
diff --git a/binutils-2.21/ld/ldwrite.c b/binutils-2.21/ld/ldwrite.c
new file mode 100644
index 0000000..b7a1469
--- /dev/null
+++ b/binutils-2.21/ld/ldwrite.c
@@ -0,0 +1,592 @@
+/* ldwrite.c -- write out the linked file
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2002,
+ 2003, 2004, 2005, 2006, 2007, 2008, 2010
+ Free Software Foundation, Inc.
+ Written by Steve Chamberlain sac@cygnus.com
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+#include "libiberty.h"
+#include "safe-ctype.h"
+
+#include "ld.h"
+#include "ldexp.h"
+#include "ldlang.h"
+#include "ldwrite.h"
+#include "ldmisc.h"
+#include <ldgram.h>
+#include "ldmain.h"
+
+/* Build link_order structures for the BFD linker. */
+
+static void
+build_link_order (lang_statement_union_type *statement)
+{
+ switch (statement->header.type)
+ {
+ case lang_data_statement_enum:
+ {
+ asection *output_section;
+ struct bfd_link_order *link_order;
+ bfd_vma value;
+ bfd_boolean big_endian = FALSE;
+
+ output_section = statement->data_statement.output_section;
+ ASSERT (output_section->owner == link_info.output_bfd);
+
+ if (!((output_section->flags & SEC_HAS_CONTENTS) != 0
+ || ((output_section->flags & SEC_LOAD) != 0
+ && (output_section->flags & SEC_THREAD_LOCAL))))
+ break;
+
+ link_order = bfd_new_link_order (link_info.output_bfd, output_section);
+ if (link_order == NULL)
+ einfo (_("%P%F: bfd_new_link_order failed\n"));
+
+ link_order->type = bfd_data_link_order;
+ link_order->offset = statement->data_statement.output_offset;
+ link_order->u.data.contents = (bfd_byte *) xmalloc (QUAD_SIZE);
+
+ value = statement->data_statement.value;
+
+ /* If the endianness of the output BFD is not known, then we
+ base the endianness of the data on the first input file.
+ By convention, the bfd_put routines for an unknown
+ endianness are big endian, so we must swap here if the
+ input file is little endian. */
+ if (bfd_big_endian (link_info.output_bfd))
+ big_endian = TRUE;
+ else if (bfd_little_endian (link_info.output_bfd))
+ big_endian = FALSE;
+ else
+ {
+ bfd_boolean swap;
+
+ swap = FALSE;
+ if (command_line.endian == ENDIAN_BIG)
+ big_endian = TRUE;
+ else if (command_line.endian == ENDIAN_LITTLE)
+ {
+ big_endian = FALSE;
+ swap = TRUE;
+ }
+ else if (command_line.endian == ENDIAN_UNSET)
+ {
+ big_endian = TRUE;
+ {
+ LANG_FOR_EACH_INPUT_STATEMENT (s)
+ {
+ if (s->the_bfd != NULL)
+ {
+ if (bfd_little_endian (s->the_bfd))
+ {
+ big_endian = FALSE;
+ swap = TRUE;
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ if (swap)
+ {
+ bfd_byte buffer[8];
+
+ switch (statement->data_statement.type)
+ {
+ case QUAD:
+ case SQUAD:
+ if (sizeof (bfd_vma) >= QUAD_SIZE)
+ {
+ bfd_putl64 (value, buffer);
+ value = bfd_getb64 (buffer);
+ break;
+ }
+ /* Fall through. */
+ case LONG:
+ bfd_putl32 (value, buffer);
+ value = bfd_getb32 (buffer);
+ break;
+ case SHORT:
+ bfd_putl16 (value, buffer);
+ value = bfd_getb16 (buffer);
+ break;
+ case BYTE:
+ break;
+ default:
+ abort ();
+ }
+ }
+ }
+
+ ASSERT (output_section->owner == link_info.output_bfd);
+ switch (statement->data_statement.type)
+ {
+ case QUAD:
+ case SQUAD:
+ if (sizeof (bfd_vma) >= QUAD_SIZE)
+ bfd_put_64 (link_info.output_bfd, value,
+ link_order->u.data.contents);
+ else
+ {
+ bfd_vma high;
+
+ if (statement->data_statement.type == QUAD)
+ high = 0;
+ else if ((value & 0x80000000) == 0)
+ high = 0;
+ else
+ high = (bfd_vma) -1;
+ bfd_put_32 (link_info.output_bfd, high,
+ (link_order->u.data.contents
+ + (big_endian ? 0 : 4)));
+ bfd_put_32 (link_info.output_bfd, value,
+ (link_order->u.data.contents
+ + (big_endian ? 4 : 0)));
+ }
+ link_order->size = QUAD_SIZE;
+ break;
+ case LONG:
+ bfd_put_32 (link_info.output_bfd, value,
+ link_order->u.data.contents);
+ link_order->size = LONG_SIZE;
+ break;
+ case SHORT:
+ bfd_put_16 (link_info.output_bfd, value,
+ link_order->u.data.contents);
+ link_order->size = SHORT_SIZE;
+ break;
+ case BYTE:
+ bfd_put_8 (link_info.output_bfd, value,
+ link_order->u.data.contents);
+ link_order->size = BYTE_SIZE;
+ break;
+ default:
+ abort ();
+ }
+ }
+ break;
+
+ case lang_reloc_statement_enum:
+ {
+ lang_reloc_statement_type *rs;
+ asection *output_section;
+ struct bfd_link_order *link_order;
+
+ rs = &statement->reloc_statement;
+
+ output_section = rs->output_section;
+ ASSERT (output_section->owner == link_info.output_bfd);
+
+ if (!((output_section->flags & SEC_HAS_CONTENTS) != 0
+ || ((output_section->flags & SEC_LOAD) != 0
+ && (output_section->flags & SEC_THREAD_LOCAL))))
+ break;
+
+ link_order = bfd_new_link_order (link_info.output_bfd, output_section);
+ if (link_order == NULL)
+ einfo (_("%P%F: bfd_new_link_order failed\n"));
+
+ link_order->offset = rs->output_offset;
+ link_order->size = bfd_get_reloc_size (rs->howto);
+
+ link_order->u.reloc.p = (struct bfd_link_order_reloc *)
+ xmalloc (sizeof (struct bfd_link_order_reloc));
+
+ link_order->u.reloc.p->reloc = rs->reloc;
+ link_order->u.reloc.p->addend = rs->addend_value;
+
+ if (rs->name == NULL)
+ {
+ link_order->type = bfd_section_reloc_link_order;
+ if (rs->section->owner == link_info.output_bfd)
+ link_order->u.reloc.p->u.section = rs->section;
+ else
+ {
+ link_order->u.reloc.p->u.section = rs->section->output_section;
+ link_order->u.reloc.p->addend += rs->section->output_offset;
+ }
+ }
+ else
+ {
+ link_order->type = bfd_symbol_reloc_link_order;
+ link_order->u.reloc.p->u.name = rs->name;
+ }
+ }
+ break;
+
+ case lang_input_section_enum:
+ {
+ /* Create a new link_order in the output section with this
+ attached */
+ asection *i = statement->input_section.section;
+
+ if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
+ && (i->flags & SEC_EXCLUDE) == 0)
+ {
+ asection *output_section = i->output_section;
+ struct bfd_link_order *link_order;
+
+ ASSERT (output_section->owner == link_info.output_bfd);
+
+ if (!((output_section->flags & SEC_HAS_CONTENTS) != 0
+ || ((output_section->flags & SEC_LOAD) != 0
+ && (output_section->flags & SEC_THREAD_LOCAL))))
+ break;
+
+ link_order = bfd_new_link_order (link_info.output_bfd,
+ output_section);
+
+ if ((i->flags & SEC_NEVER_LOAD) != 0
+ && (i->flags & SEC_DEBUGGING) == 0)
+ {
+ /* We've got a never load section inside one which is
+ going to be output, we'll change it into a fill. */
+ link_order->type = bfd_data_link_order;
+ link_order->u.data.contents = (unsigned char *) "";
+ link_order->u.data.size = 1;
+ }
+ else
+ {
+ link_order->type = bfd_indirect_link_order;
+ link_order->u.indirect.section = i;
+ ASSERT (i->output_section == output_section);
+ }
+ link_order->size = i->size;
+ link_order->offset = i->output_offset;
+ }
+ }
+ break;
+
+ case lang_padding_statement_enum:
+ /* Make a new link_order with the right filler */
+ {
+ asection *output_section;
+ struct bfd_link_order *link_order;
+
+ output_section = statement->padding_statement.output_section;
+ ASSERT (statement->padding_statement.output_section->owner
+ == link_info.output_bfd);
+
+ if (!((output_section->flags & SEC_HAS_CONTENTS) != 0
+ || ((output_section->flags & SEC_LOAD) != 0
+ && (output_section->flags & SEC_THREAD_LOCAL))))
+ break;
+
+ link_order = bfd_new_link_order (link_info.output_bfd,
+ output_section);
+ link_order->type = bfd_data_link_order;
+ link_order->size = statement->padding_statement.size;
+ link_order->offset = statement->padding_statement.output_offset;
+ link_order->u.data.contents = statement->padding_statement.fill->data;
+ link_order->u.data.size = statement->padding_statement.fill->size;
+ }
+ break;
+
+ default:
+ /* All the other ones fall through */
+ break;
+ }
+}
+
+/* Return true if NAME is the name of an unsplittable section. These
+ are the stabs strings, dwarf strings. */
+
+static bfd_boolean
+unsplittable_name (const char *name)
+{
+ if (CONST_STRNEQ (name, ".stab"))
+ {
+ /* There are several stab like string sections. We pattern match on
+ ".stab...str" */
+ unsigned len = strlen (name);
+ if (strcmp (&name[len-3], "str") == 0)
+ return TRUE;
+ }
+ else if (strcmp (name, "$GDB_STRINGS$") == 0)
+ return TRUE;
+ return FALSE;
+}
+
+/* Wander around the input sections, make sure that
+ we'll never try and create an output section with more relocs
+ than will fit.. Do this by always assuming the worst case, and
+ creating new output sections with all the right bits. */
+#define TESTIT 1
+static asection *
+clone_section (bfd *abfd, asection *s, const char *name, int *count)
+{
+ char *tname;
+ char *sname;
+ unsigned int len;
+ asection *n;
+ struct bfd_link_hash_entry *h;
+
+ /* Invent a section name from the section name and a dotted numeric
+ suffix. */
+ len = strlen (name);
+ tname = (char *) xmalloc (len + 1);
+ memcpy (tname, name, len + 1);
+ /* Remove a dotted number suffix, from a previous split link. */
+ while (len && ISDIGIT (tname[len-1]))
+ len--;
+ if (len > 1 && tname[len-1] == '.')
+ /* It was a dotted number. */
+ tname[len-1] = 0;
+
+ /* We want to use the whole of the original section name for the
+ split name, but coff can be restricted to 8 character names. */
+ if (bfd_family_coff (abfd) && strlen (tname) > 5)
+ {
+ /* Some section names cannot be truncated, as the name is
+ used to locate some other section. */
+ if (CONST_STRNEQ (name, ".stab")
+ || strcmp (name, "$GDB_SYMBOLS$") == 0)
+ {
+ einfo (_ ("%F%P: cannot create split section name for %s\n"), name);
+ /* Silence gcc warnings. einfo exits, so we never reach here. */
+ return NULL;
+ }
+ tname[5] = 0;
+ }
+
+ if ((sname = bfd_get_unique_section_name (abfd, tname, count)) == NULL
+ || (n = bfd_make_section_anyway (abfd, sname)) == NULL
+ || (h = bfd_link_hash_lookup (link_info.hash,
+ sname, TRUE, TRUE, FALSE)) == NULL)
+ {
+ einfo (_("%F%P: clone section failed: %E\n"));
+ /* Silence gcc warnings. einfo exits, so we never reach here. */
+ return NULL;
+ }
+ free (tname);
+
+ /* Set up section symbol. */
+ h->type = bfd_link_hash_defined;
+ h->u.def.value = 0;
+ h->u.def.section = n;
+
+ n->flags = s->flags;
+ n->vma = s->vma;
+ n->user_set_vma = s->user_set_vma;
+ n->lma = s->lma;
+ n->size = 0;
+ n->output_offset = s->output_offset;
+ n->output_section = n;
+ n->orelocation = 0;
+ n->reloc_count = 0;
+ n->alignment_power = s->alignment_power;
+
+ bfd_copy_private_section_data (abfd, s, abfd, n);
+
+ return n;
+}
+
+#if TESTING
+static void
+ds (asection *s)
+{
+ struct bfd_link_order *l = s->map_head.link_order;
+ printf ("vma %x size %x\n", s->vma, s->size);
+ while (l)
+ {
+ if (l->type == bfd_indirect_link_order)
+ {
+ printf ("%8x %s\n", l->offset, l->u.indirect.section->owner->filename);
+ }
+ else
+ {
+ printf (_("%8x something else\n"), l->offset);
+ }
+ l = l->next;
+ }
+ printf ("\n");
+}
+
+dump (char *s, asection *a1, asection *a2)
+{
+ printf ("%s\n", s);
+ ds (a1);
+ ds (a2);
+}
+
+static void
+sanity_check (bfd *abfd)
+{
+ asection *s;
+ for (s = abfd->sections; s; s = s->next)
+ {
+ struct bfd_link_order *p;
+ bfd_vma prev = 0;
+ for (p = s->map_head.link_order; p; p = p->next)
+ {
+ if (p->offset > 100000)
+ abort ();
+ if (p->offset < prev)
+ abort ();
+ prev = p->offset;
+ }
+ }
+}
+#else
+#define sanity_check(a)
+#define dump(a, b, c)
+#endif
+
+static void
+split_sections (bfd *abfd, struct bfd_link_info *info)
+{
+ asection *original_sec;
+ int nsecs = abfd->section_count;
+ sanity_check (abfd);
+ /* Look through all the original sections. */
+ for (original_sec = abfd->sections;
+ original_sec && nsecs;
+ original_sec = original_sec->next, nsecs--)
+ {
+ int count = 0;
+ unsigned int lines = 0;
+ unsigned int relocs = 0;
+ bfd_size_type sec_size = 0;
+ struct bfd_link_order *l;
+ struct bfd_link_order *p;
+ bfd_vma vma = original_sec->vma;
+ asection *cursor = original_sec;
+
+ /* Count up the relocations and line entries to see if anything
+ would be too big to fit. Accumulate section size too. */
+ for (l = NULL, p = cursor->map_head.link_order; p != NULL; p = l->next)
+ {
+ unsigned int thislines = 0;
+ unsigned int thisrelocs = 0;
+ bfd_size_type thissize = 0;
+ if (p->type == bfd_indirect_link_order)
+ {
+ asection *sec;
+
+ sec = p->u.indirect.section;
+
+ if (info->strip == strip_none
+ || info->strip == strip_some)
+ thislines = sec->lineno_count;
+
+ if (info->relocatable)
+ thisrelocs = sec->reloc_count;
+
+ thissize = sec->size;
+
+ }
+ else if (info->relocatable
+ && (p->type == bfd_section_reloc_link_order
+ || p->type == bfd_symbol_reloc_link_order))
+ thisrelocs++;
+
+ if (l != NULL
+ && (thisrelocs + relocs >= config.split_by_reloc
+ || thislines + lines >= config.split_by_reloc
+ || (thissize + sec_size >= config.split_by_file))
+ && !unsplittable_name (cursor->name))
+ {
+ /* Create a new section and put this link order and the
+ following link orders into it. */
+ bfd_vma shift_offset;
+ asection *n;
+
+ n = clone_section (abfd, cursor, original_sec->name, &count);
+
+ /* Attach the link orders to the new section and snip
+ them off from the old section. */
+ n->map_head.link_order = p;
+ n->map_tail.link_order = cursor->map_tail.link_order;
+ cursor->map_tail.link_order = l;
+ l->next = NULL;
+ l = p;
+
+ /* Change the size of the original section and
+ update the vma of the new one. */
+
+ dump ("before snip", cursor, n);
+
+ shift_offset = p->offset;
+ n->size = cursor->size - shift_offset;
+ cursor->size = shift_offset;
+
+ vma += shift_offset;
+ n->lma = n->vma = vma;
+
+ /* Run down the chain and change the output section to
+ the right one, update the offsets too. */
+ do
+ {
+ p->offset -= shift_offset;
+ if (p->type == bfd_indirect_link_order)
+ {
+ p->u.indirect.section->output_section = n;
+ p->u.indirect.section->output_offset = p->offset;
+ }
+ p = p->next;
+ }
+ while (p);
+
+ dump ("after snip", cursor, n);
+ cursor = n;
+ relocs = thisrelocs;
+ lines = thislines;
+ sec_size = thissize;
+ }
+ else
+ {
+ l = p;
+ relocs += thisrelocs;
+ lines += thislines;
+ sec_size += thissize;
+ }
+ }
+ }
+ sanity_check (abfd);
+}
+
+/* Call BFD to write out the linked file. */
+
+void
+ldwrite (void)
+{
+ /* Reset error indicator, which can typically something like invalid
+ format from opening up the .o files. */
+ bfd_set_error (bfd_error_no_error);
+ lang_for_each_statement (build_link_order);
+
+ if (config.split_by_reloc != (unsigned) -1
+ || config.split_by_file != (bfd_size_type) -1)
+ split_sections (link_info.output_bfd, &link_info);
+ if (!bfd_final_link (link_info.output_bfd, &link_info))
+ {
+ /* If there was an error recorded, print it out. Otherwise assume
+ an appropriate error message like unknown symbol was printed
+ out. */
+
+ if (bfd_get_error () != bfd_error_no_error)
+ einfo (_("%F%P: final link failed: %E\n"));
+ else
+ xexit (1);
+ }
+}
diff --git a/binutils-2.21/ld/ldwrite.h b/binutils-2.21/ld/ldwrite.h
new file mode 100644
index 0000000..521f467
--- /dev/null
+++ b/binutils-2.21/ld/ldwrite.h
@@ -0,0 +1,21 @@
+/* ldwrite.h -
+ Copyright 1991, 1992, 1993, 2003, 2005, 2007 Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+extern void ldwrite (void);
diff --git a/binutils-2.21/ld/lexsup.c b/binutils-2.21/ld/lexsup.c
new file mode 100644
index 0000000..39ca326
--- /dev/null
+++ b/binutils-2.21/ld/lexsup.c
@@ -0,0 +1,1734 @@
+/* Parse options for the GNU linker.
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+ Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdver.h"
+#include "libiberty.h"
+#include <stdio.h>
+#include <string.h>
+#include "safe-ctype.h"
+#include "getopt.h"
+#include "bfdlink.h"
+#include "ld.h"
+#include "ldmain.h"
+#include "ldmisc.h"
+#include "ldexp.h"
+#include "ldlang.h"
+#include <ldgram.h>
+#include "ldlex.h"
+#include "ldfile.h"
+#include "ldver.h"
+#include "ldemul.h"
+#include "demangle.h"
+#ifdef ENABLE_PLUGINS
+#include "plugin.h"
+#endif /* ENABLE_PLUGINS */
+
+#ifndef PATH_SEPARATOR
+#if defined (__MSDOS__) || (defined (_WIN32) && ! defined (__CYGWIN32__))
+#define PATH_SEPARATOR ';'
+#else
+#define PATH_SEPARATOR ':'
+#endif
+#endif
+
+/* Somewhere above, sys/stat.h got included . . . . */
+#if !defined(S_ISDIR) && defined(S_IFDIR)
+#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+#endif
+
+static void set_default_dirlist (char *);
+static void set_section_start (char *, char *);
+static void set_segment_start (const char *, char *);
+static void help (void);
+
+/* Non-zero if we are processing a --defsym from the command line. */
+int parsing_defsym = 0;
+
+/* Codes used for the long options with no short synonyms. 150 isn't
+ special; it's just an arbitrary non-ASCII char value. */
+enum option_values
+{
+ OPTION_ASSERT = 150,
+ OPTION_CALL_SHARED,
+ OPTION_CREF,
+ OPTION_DEFSYM,
+ OPTION_DEMANGLE,
+ OPTION_DYNAMIC_LINKER,
+ OPTION_SYSROOT,
+ OPTION_EB,
+ OPTION_EL,
+ OPTION_EMBEDDED_RELOCS,
+ OPTION_EXPORT_DYNAMIC,
+ OPTION_NO_EXPORT_DYNAMIC,
+ OPTION_HELP,
+ OPTION_IGNORE,
+ OPTION_MAP,
+ OPTION_NO_DEMANGLE,
+ OPTION_NO_KEEP_MEMORY,
+ OPTION_NO_WARN_MISMATCH,
+ OPTION_NO_WARN_SEARCH_MISMATCH,
+ OPTION_NOINHIBIT_EXEC,
+ OPTION_NON_SHARED,
+ OPTION_NO_WHOLE_ARCHIVE,
+ OPTION_OFORMAT,
+ OPTION_RELAX,
+ OPTION_NO_RELAX,
+ OPTION_RETAIN_SYMBOLS_FILE,
+ OPTION_RPATH,
+ OPTION_RPATH_LINK,
+ OPTION_SHARED,
+ OPTION_SONAME,
+ OPTION_SORT_COMMON,
+ OPTION_SORT_SECTION,
+ OPTION_STATS,
+ OPTION_SYMBOLIC,
+ OPTION_SYMBOLIC_FUNCTIONS,
+ OPTION_TASK_LINK,
+ OPTION_TBSS,
+ OPTION_TDATA,
+ OPTION_TTEXT,
+ OPTION_TTEXT_SEGMENT,
+ OPTION_TRADITIONAL_FORMAT,
+ OPTION_UR,
+ OPTION_VERBOSE,
+ OPTION_VERSION,
+ OPTION_VERSION_SCRIPT,
+ OPTION_VERSION_EXPORTS_SECTION,
+ OPTION_DYNAMIC_LIST,
+ OPTION_DYNAMIC_LIST_CPP_NEW,
+ OPTION_DYNAMIC_LIST_CPP_TYPEINFO,
+ OPTION_DYNAMIC_LIST_DATA,
+ OPTION_WARN_COMMON,
+ OPTION_WARN_CONSTRUCTORS,
+ OPTION_WARN_FATAL,
+ OPTION_NO_WARN_FATAL,
+ OPTION_WARN_MULTIPLE_GP,
+ OPTION_WARN_ONCE,
+ OPTION_WARN_SECTION_ALIGN,
+ OPTION_SPLIT_BY_RELOC,
+ OPTION_SPLIT_BY_FILE ,
+ OPTION_WHOLE_ARCHIVE,
+ OPTION_ADD_DT_NEEDED_FOR_DYNAMIC,
+ OPTION_NO_ADD_DT_NEEDED_FOR_DYNAMIC,
+ OPTION_ADD_DT_NEEDED_FOR_REGULAR,
+ OPTION_NO_ADD_DT_NEEDED_FOR_REGULAR,
+ OPTION_WRAP,
+ OPTION_FORCE_EXE_SUFFIX,
+ OPTION_GC_SECTIONS,
+ OPTION_NO_GC_SECTIONS,
+ OPTION_PRINT_GC_SECTIONS,
+ OPTION_NO_PRINT_GC_SECTIONS,
+ OPTION_HASH_SIZE,
+ OPTION_CHECK_SECTIONS,
+ OPTION_NO_CHECK_SECTIONS,
+ OPTION_NO_UNDEFINED,
+ OPTION_INIT,
+ OPTION_FINI,
+ OPTION_SECTION_START,
+ OPTION_UNIQUE,
+ OPTION_TARGET_HELP,
+ OPTION_ALLOW_SHLIB_UNDEFINED,
+ OPTION_NO_ALLOW_SHLIB_UNDEFINED,
+ OPTION_ALLOW_MULTIPLE_DEFINITION,
+ OPTION_NO_UNDEFINED_VERSION,
+ OPTION_DEFAULT_SYMVER,
+ OPTION_DEFAULT_IMPORTED_SYMVER,
+ OPTION_DISCARD_NONE,
+ OPTION_SPARE_DYNAMIC_TAGS,
+ OPTION_NO_DEFINE_COMMON,
+ OPTION_NOSTDLIB,
+ OPTION_NO_OMAGIC,
+ OPTION_STRIP_DISCARDED,
+ OPTION_NO_STRIP_DISCARDED,
+ OPTION_ACCEPT_UNKNOWN_INPUT_ARCH,
+ OPTION_NO_ACCEPT_UNKNOWN_INPUT_ARCH,
+ OPTION_PIE,
+ OPTION_UNRESOLVED_SYMBOLS,
+ OPTION_WARN_UNRESOLVED_SYMBOLS,
+ OPTION_ERROR_UNRESOLVED_SYMBOLS,
+ OPTION_WARN_SHARED_TEXTREL,
+ OPTION_WARN_ALTERNATE_EM,
+ OPTION_REDUCE_MEMORY_OVERHEADS,
+#ifdef ENABLE_PLUGINS
+ OPTION_PLUGIN,
+ OPTION_PLUGIN_OPT,
+#endif /* ENABLE_PLUGINS */
+ OPTION_DEFAULT_SCRIPT,
+};
+
+/* The long options. This structure is used for both the option
+ parsing and the help text. */
+
+enum control_enum {
+ /* Use one dash before long option name. */
+ ONE_DASH,
+ /* Use two dashes before long option name. */
+ TWO_DASHES,
+ /* Only accept two dashes before the long option name.
+ This is an overloading of the use of this enum, since originally it
+ was only intended to tell the --help display function how to display
+ the long option name. This feature was added in order to resolve
+ the confusion about the -omagic command line switch. Is it setting
+ the output file name to "magic" or is it setting the NMAGIC flag on
+ the output ? It has been decided that it is setting the output file
+ name, and that if you want to set the NMAGIC flag you should use -N
+ or --omagic. */
+ EXACTLY_TWO_DASHES,
+ /* Don't mention this option in --help output. */
+ NO_HELP
+};
+
+struct ld_option
+{
+ /* The long option information. */
+ struct option opt;
+ /* The short option with the same meaning ('\0' if none). */
+ char shortopt;
+ /* The name of the argument (NULL if none). */
+ const char *arg;
+ /* The documentation string. If this is NULL, this is a synonym for
+ the previous option. */
+ const char *doc;
+ enum control_enum control;
+};
+
+static const struct ld_option ld_options[] =
+{
+ { {NULL, required_argument, NULL, '\0'},
+ 'a', N_("KEYWORD"), N_("Shared library control for HP/UX compatibility"),
+ ONE_DASH },
+ { {"architecture", required_argument, NULL, 'A'},
+ 'A', N_("ARCH"), N_("Set architecture") , TWO_DASHES },
+ { {"format", required_argument, NULL, 'b'},
+ 'b', N_("TARGET"), N_("Specify target for following input files"),
+ TWO_DASHES },
+ { {"mri-script", required_argument, NULL, 'c'},
+ 'c', N_("FILE"), N_("Read MRI format linker script"), TWO_DASHES },
+ { {"dc", no_argument, NULL, 'd'},
+ 'd', NULL, N_("Force common symbols to be defined"), ONE_DASH },
+ { {"dp", no_argument, NULL, 'd'},
+ '\0', NULL, NULL, ONE_DASH },
+ { {"entry", required_argument, NULL, 'e'},
+ 'e', N_("ADDRESS"), N_("Set start address"), TWO_DASHES },
+ { {"export-dynamic", no_argument, NULL, OPTION_EXPORT_DYNAMIC},
+ 'E', NULL, N_("Export all dynamic symbols"), TWO_DASHES },
+ { {"no-export-dynamic", no_argument, NULL, OPTION_NO_EXPORT_DYNAMIC},
+ '\0', NULL, N_("Undo the effect of --export-dynamic"), TWO_DASHES },
+ { {"EB", no_argument, NULL, OPTION_EB},
+ '\0', NULL, N_("Link big-endian objects"), ONE_DASH },
+ { {"EL", no_argument, NULL, OPTION_EL},
+ '\0', NULL, N_("Link little-endian objects"), ONE_DASH },
+ { {"auxiliary", required_argument, NULL, 'f'},
+ 'f', N_("SHLIB"), N_("Auxiliary filter for shared object symbol table"),
+ TWO_DASHES },
+ { {"filter", required_argument, NULL, 'F'},
+ 'F', N_("SHLIB"), N_("Filter for shared object symbol table"),
+ TWO_DASHES },
+ { {NULL, no_argument, NULL, '\0'},
+ 'g', NULL, N_("Ignored"), ONE_DASH },
+ { {"gpsize", required_argument, NULL, 'G'},
+ 'G', N_("SIZE"), N_("Small data size (if no size, same as --shared)"),
+ TWO_DASHES },
+ { {"soname", required_argument, NULL, OPTION_SONAME},
+ 'h', N_("FILENAME"), N_("Set internal name of shared library"), ONE_DASH },
+ { {"dynamic-linker", required_argument, NULL, OPTION_DYNAMIC_LINKER},
+ 'I', N_("PROGRAM"), N_("Set PROGRAM as the dynamic linker to use"),
+ TWO_DASHES },
+ { {"library", required_argument, NULL, 'l'},
+ 'l', N_("LIBNAME"), N_("Search for library LIBNAME"), TWO_DASHES },
+ { {"library-path", required_argument, NULL, 'L'},
+ 'L', N_("DIRECTORY"), N_("Add DIRECTORY to library search path"),
+ TWO_DASHES },
+ { {"sysroot=<DIRECTORY>", required_argument, NULL, OPTION_SYSROOT},
+ '\0', NULL, N_("Override the default sysroot location"), TWO_DASHES },
+ { {NULL, required_argument, NULL, '\0'},
+ 'm', N_("EMULATION"), N_("Set emulation"), ONE_DASH },
+ { {"print-map", no_argument, NULL, 'M'},
+ 'M', NULL, N_("Print map file on standard output"), TWO_DASHES },
+ { {"nmagic", no_argument, NULL, 'n'},
+ 'n', NULL, N_("Do not page align data"), TWO_DASHES },
+ { {"omagic", no_argument, NULL, 'N'},
+ 'N', NULL, N_("Do not page align data, do not make text readonly"),
+ EXACTLY_TWO_DASHES },
+ { {"no-omagic", no_argument, NULL, OPTION_NO_OMAGIC},
+ '\0', NULL, N_("Page align data, make text readonly"),
+ EXACTLY_TWO_DASHES },
+ { {"output", required_argument, NULL, 'o'},
+ 'o', N_("FILE"), N_("Set output file name"), EXACTLY_TWO_DASHES },
+ { {NULL, required_argument, NULL, '\0'},
+ 'O', NULL, N_("Optimize output file"), ONE_DASH },
+#ifdef ENABLE_PLUGINS
+ { {"plugin", required_argument, NULL, OPTION_PLUGIN},
+ '\0', N_("PLUGIN"), N_("Load named plugin"), ONE_DASH },
+ { {"plugin-opt", required_argument, NULL, OPTION_PLUGIN_OPT},
+ '\0', N_("ARG"), N_("Send arg to last-loaded plugin"), ONE_DASH },
+#endif /* ENABLE_PLUGINS */
+ { {"Qy", no_argument, NULL, OPTION_IGNORE},
+ '\0', NULL, N_("Ignored for SVR4 compatibility"), ONE_DASH },
+ { {"emit-relocs", no_argument, NULL, 'q'},
+ 'q', NULL, "Generate relocations in final output", TWO_DASHES },
+ { {"relocatable", no_argument, NULL, 'r'},
+ 'r', NULL, N_("Generate relocatable output"), TWO_DASHES },
+ { {NULL, no_argument, NULL, '\0'},
+ 'i', NULL, NULL, ONE_DASH },
+ { {"just-symbols", required_argument, NULL, 'R'},
+ 'R', N_("FILE"), N_("Just link symbols (if directory, same as --rpath)"),
+ TWO_DASHES },
+ { {"strip-all", no_argument, NULL, 's'},
+ 's', NULL, N_("Strip all symbols"), TWO_DASHES },
+ { {"strip-debug", no_argument, NULL, 'S'},
+ 'S', NULL, N_("Strip debugging symbols"), TWO_DASHES },
+ { {"strip-discarded", no_argument, NULL, OPTION_STRIP_DISCARDED},
+ '\0', NULL, N_("Strip symbols in discarded sections"), TWO_DASHES },
+ { {"no-strip-discarded", no_argument, NULL, OPTION_NO_STRIP_DISCARDED},
+ '\0', NULL, N_("Do not strip symbols in discarded sections"), TWO_DASHES },
+ { {"trace", no_argument, NULL, 't'},
+ 't', NULL, N_("Trace file opens"), TWO_DASHES },
+ { {"script", required_argument, NULL, 'T'},
+ 'T', N_("FILE"), N_("Read linker script"), TWO_DASHES },
+ { {"default-script", required_argument, NULL, OPTION_DEFAULT_SCRIPT},
+ '\0', N_("FILE"), N_("Read default linker script"), TWO_DASHES },
+ { {"dT", required_argument, NULL, OPTION_DEFAULT_SCRIPT},
+ '\0', NULL, NULL, ONE_DASH },
+ { {"undefined", required_argument, NULL, 'u'},
+ 'u', N_("SYMBOL"), N_("Start with undefined reference to SYMBOL"),
+ TWO_DASHES },
+ { {"unique", optional_argument, NULL, OPTION_UNIQUE},
+ '\0', N_("[=SECTION]"),
+ N_("Don't merge input [SECTION | orphan] sections"), TWO_DASHES },
+ { {"Ur", no_argument, NULL, OPTION_UR},
+ '\0', NULL, N_("Build global constructor/destructor tables"), ONE_DASH },
+ { {"version", no_argument, NULL, OPTION_VERSION},
+ 'v', NULL, N_("Print version information"), TWO_DASHES },
+ { {NULL, no_argument, NULL, '\0'},
+ 'V', NULL, N_("Print version and emulation information"), ONE_DASH },
+ { {"discard-all", no_argument, NULL, 'x'},
+ 'x', NULL, N_("Discard all local symbols"), TWO_DASHES },
+ { {"discard-locals", no_argument, NULL, 'X'},
+ 'X', NULL, N_("Discard temporary local symbols (default)"), TWO_DASHES },
+ { {"discard-none", no_argument, NULL, OPTION_DISCARD_NONE},
+ '\0', NULL, N_("Don't discard any local symbols"), TWO_DASHES },
+ { {"trace-symbol", required_argument, NULL, 'y'},
+ 'y', N_("SYMBOL"), N_("Trace mentions of SYMBOL"), TWO_DASHES },
+ { {NULL, required_argument, NULL, '\0'},
+ 'Y', N_("PATH"), N_("Default search path for Solaris compatibility"),
+ ONE_DASH },
+ { {"start-group", no_argument, NULL, '('},
+ '(', NULL, N_("Start a group"), TWO_DASHES },
+ { {"end-group", no_argument, NULL, ')'},
+ ')', NULL, N_("End a group"), TWO_DASHES },
+ { {"accept-unknown-input-arch", no_argument, NULL,
+ OPTION_ACCEPT_UNKNOWN_INPUT_ARCH},
+ '\0', NULL,
+ N_("Accept input files whose architecture cannot be determined"),
+ TWO_DASHES },
+ { {"no-accept-unknown-input-arch", no_argument, NULL,
+ OPTION_NO_ACCEPT_UNKNOWN_INPUT_ARCH},
+ '\0', NULL, N_("Reject input files whose architecture is unknown"),
+ TWO_DASHES },
+
+ /* The next two options are deprecated because of their similarity to
+ --as-needed and --no-as-needed. They have been replaced by
+ --resolve-implicit-dynamic-symbols and
+ --no-resolve-implicit-dynamic-symbols. */
+ { {"add-needed", no_argument, NULL, OPTION_ADD_DT_NEEDED_FOR_DYNAMIC},
+ '\0', NULL, NULL, NO_HELP },
+ { {"no-add-needed", no_argument, NULL, OPTION_NO_ADD_DT_NEEDED_FOR_DYNAMIC},
+ '\0', NULL, NULL, NO_HELP },
+
+ { {"as-needed", no_argument, NULL, OPTION_ADD_DT_NEEDED_FOR_REGULAR},
+ '\0', NULL, N_("Only set DT_NEEDED for following dynamic libs if used"),
+ TWO_DASHES },
+ { {"no-as-needed", no_argument, NULL, OPTION_NO_ADD_DT_NEEDED_FOR_REGULAR},
+ '\0', NULL, N_("Always set DT_NEEDED for dynamic libraries mentioned on\n"
+ " the command line"),
+ TWO_DASHES },
+ { {"assert", required_argument, NULL, OPTION_ASSERT},
+ '\0', N_("KEYWORD"), N_("Ignored for SunOS compatibility"), ONE_DASH },
+ { {"Bdynamic", no_argument, NULL, OPTION_CALL_SHARED},
+ '\0', NULL, N_("Link against shared libraries"), ONE_DASH },
+ { {"dy", no_argument, NULL, OPTION_CALL_SHARED},
+ '\0', NULL, NULL, ONE_DASH },
+ { {"call_shared", no_argument, NULL, OPTION_CALL_SHARED},
+ '\0', NULL, NULL, ONE_DASH },
+ { {"Bstatic", no_argument, NULL, OPTION_NON_SHARED},
+ '\0', NULL, N_("Do not link against shared libraries"), ONE_DASH },
+ { {"dn", no_argument, NULL, OPTION_NON_SHARED},
+ '\0', NULL, NULL, ONE_DASH },
+ { {"non_shared", no_argument, NULL, OPTION_NON_SHARED},
+ '\0', NULL, NULL, ONE_DASH },
+ { {"static", no_argument, NULL, OPTION_NON_SHARED},
+ '\0', NULL, NULL, ONE_DASH },
+ { {"Bsymbolic", no_argument, NULL, OPTION_SYMBOLIC},
+ '\0', NULL, N_("Bind global references locally"), ONE_DASH },
+ { {"Bsymbolic-functions", no_argument, NULL, OPTION_SYMBOLIC_FUNCTIONS},
+ '\0', NULL, N_("Bind global function references locally"), ONE_DASH },
+ { {"check-sections", no_argument, NULL, OPTION_CHECK_SECTIONS},
+ '\0', NULL, N_("Check section addresses for overlaps (default)"),
+ TWO_DASHES },
+ { {"no-check-sections", no_argument, NULL, OPTION_NO_CHECK_SECTIONS},
+ '\0', NULL, N_("Do not check section addresses for overlaps"),
+ TWO_DASHES },
+ { {"copy-dt-needed-entries", no_argument, NULL,
+ OPTION_ADD_DT_NEEDED_FOR_DYNAMIC},
+ '\0', NULL, N_("Copy DT_NEEDED links mentioned inside DSOs that follow"),
+ TWO_DASHES },
+ { {"no-copy-dt-needed-entries", no_argument, NULL,
+ OPTION_NO_ADD_DT_NEEDED_FOR_DYNAMIC},
+ '\0', NULL, N_("Do not copy DT_NEEDED links mentioned inside DSOs that follow"),
+ TWO_DASHES },
+
+ { {"cref", no_argument, NULL, OPTION_CREF},
+ '\0', NULL, N_("Output cross reference table"), TWO_DASHES },
+ { {"defsym", required_argument, NULL, OPTION_DEFSYM},
+ '\0', N_("SYMBOL=EXPRESSION"), N_("Define a symbol"), TWO_DASHES },
+ { {"demangle", optional_argument, NULL, OPTION_DEMANGLE},
+ '\0', N_("[=STYLE]"), N_("Demangle symbol names [using STYLE]"),
+ TWO_DASHES },
+ { {"embedded-relocs", no_argument, NULL, OPTION_EMBEDDED_RELOCS},
+ '\0', NULL, N_("Generate embedded relocs"), TWO_DASHES},
+ { {"fatal-warnings", no_argument, NULL, OPTION_WARN_FATAL},
+ '\0', NULL, N_("Treat warnings as errors"),
+ TWO_DASHES },
+ { {"no-fatal-warnings", no_argument, NULL, OPTION_NO_WARN_FATAL},
+ '\0', NULL, N_("Do not treat warnings as errors (default)"),
+ TWO_DASHES },
+ { {"fini", required_argument, NULL, OPTION_FINI},
+ '\0', N_("SYMBOL"), N_("Call SYMBOL at unload-time"), ONE_DASH },
+ { {"force-exe-suffix", no_argument, NULL, OPTION_FORCE_EXE_SUFFIX},
+ '\0', NULL, N_("Force generation of file with .exe suffix"), TWO_DASHES},
+ { {"gc-sections", no_argument, NULL, OPTION_GC_SECTIONS},
+ '\0', NULL, N_("Remove unused sections (on some targets)"),
+ TWO_DASHES },
+ { {"no-gc-sections", no_argument, NULL, OPTION_NO_GC_SECTIONS},
+ '\0', NULL, N_("Don't remove unused sections (default)"),
+ TWO_DASHES },
+ { {"print-gc-sections", no_argument, NULL, OPTION_PRINT_GC_SECTIONS},
+ '\0', NULL, N_("List removed unused sections on stderr"),
+ TWO_DASHES },
+ { {"no-print-gc-sections", no_argument, NULL, OPTION_NO_PRINT_GC_SECTIONS},
+ '\0', NULL, N_("Do not list removed unused sections"),
+ TWO_DASHES },
+ { {"hash-size=<NUMBER>", required_argument, NULL, OPTION_HASH_SIZE},
+ '\0', NULL, N_("Set default hash table size close to <NUMBER>"),
+ TWO_DASHES },
+ { {"help", no_argument, NULL, OPTION_HELP},
+ '\0', NULL, N_("Print option help"), TWO_DASHES },
+ { {"init", required_argument, NULL, OPTION_INIT},
+ '\0', N_("SYMBOL"), N_("Call SYMBOL at load-time"), ONE_DASH },
+ { {"Map", required_argument, NULL, OPTION_MAP},
+ '\0', N_("FILE"), N_("Write a map file"), ONE_DASH },
+ { {"no-define-common", no_argument, NULL, OPTION_NO_DEFINE_COMMON},
+ '\0', NULL, N_("Do not define Common storage"), TWO_DASHES },
+ { {"no-demangle", no_argument, NULL, OPTION_NO_DEMANGLE },
+ '\0', NULL, N_("Do not demangle symbol names"), TWO_DASHES },
+ { {"no-keep-memory", no_argument, NULL, OPTION_NO_KEEP_MEMORY},
+ '\0', NULL, N_("Use less memory and more disk I/O"), TWO_DASHES },
+ { {"no-undefined", no_argument, NULL, OPTION_NO_UNDEFINED},
+ '\0', NULL, N_("Do not allow unresolved references in object files"),
+ TWO_DASHES },
+ { {"allow-shlib-undefined", no_argument, NULL, OPTION_ALLOW_SHLIB_UNDEFINED},
+ '\0', NULL, N_("Allow unresolved references in shared libaries"),
+ TWO_DASHES },
+ { {"no-allow-shlib-undefined", no_argument, NULL,
+ OPTION_NO_ALLOW_SHLIB_UNDEFINED},
+ '\0', NULL, N_("Do not allow unresolved references in shared libs"),
+ TWO_DASHES },
+ { {"allow-multiple-definition", no_argument, NULL,
+ OPTION_ALLOW_MULTIPLE_DEFINITION},
+ '\0', NULL, N_("Allow multiple definitions"), TWO_DASHES },
+ { {"no-undefined-version", no_argument, NULL, OPTION_NO_UNDEFINED_VERSION},
+ '\0', NULL, N_("Disallow undefined version"), TWO_DASHES },
+ { {"default-symver", no_argument, NULL, OPTION_DEFAULT_SYMVER},
+ '\0', NULL, N_("Create default symbol version"), TWO_DASHES },
+ { {"default-imported-symver", no_argument, NULL,
+ OPTION_DEFAULT_IMPORTED_SYMVER},
+ '\0', NULL, N_("Create default symbol version for imported symbols"),
+ TWO_DASHES },
+ { {"no-warn-mismatch", no_argument, NULL, OPTION_NO_WARN_MISMATCH},
+ '\0', NULL, N_("Don't warn about mismatched input files"), TWO_DASHES},
+ { {"no-warn-search-mismatch", no_argument, NULL,
+ OPTION_NO_WARN_SEARCH_MISMATCH},
+ '\0', NULL, N_("Don't warn on finding an incompatible library"),
+ TWO_DASHES},
+ { {"no-whole-archive", no_argument, NULL, OPTION_NO_WHOLE_ARCHIVE},
+ '\0', NULL, N_("Turn off --whole-archive"), TWO_DASHES },
+ { {"noinhibit-exec", no_argument, NULL, OPTION_NOINHIBIT_EXEC},
+ '\0', NULL, N_("Create an output file even if errors occur"),
+ TWO_DASHES },
+ { {"noinhibit_exec", no_argument, NULL, OPTION_NOINHIBIT_EXEC},
+ '\0', NULL, NULL, NO_HELP },
+ { {"nostdlib", no_argument, NULL, OPTION_NOSTDLIB},
+ '\0', NULL, N_("Only use library directories specified on\n"
+ " the command line"),
+ ONE_DASH },
+ { {"oformat", required_argument, NULL, OPTION_OFORMAT},
+ '\0', N_("TARGET"), N_("Specify target of output file"),
+ EXACTLY_TWO_DASHES },
+ { {"qmagic", no_argument, NULL, OPTION_IGNORE},
+ '\0', NULL, N_("Ignored for Linux compatibility"), ONE_DASH },
+ { {"reduce-memory-overheads", no_argument, NULL,
+ OPTION_REDUCE_MEMORY_OVERHEADS},
+ '\0', NULL, N_("Reduce memory overheads, possibly taking much longer"),
+ TWO_DASHES },
+ { {"relax", no_argument, NULL, OPTION_RELAX},
+ '\0', NULL, N_("Reduce code size by using target specific optimizations"), TWO_DASHES },
+ { {"no-relax", no_argument, NULL, OPTION_NO_RELAX},
+ '\0', NULL, N_("Do not use relaxation techniques to reduce code size"), TWO_DASHES },
+ { {"retain-symbols-file", required_argument, NULL,
+ OPTION_RETAIN_SYMBOLS_FILE},
+ '\0', N_("FILE"), N_("Keep only symbols listed in FILE"), TWO_DASHES },
+ { {"rpath", required_argument, NULL, OPTION_RPATH},
+ '\0', N_("PATH"), N_("Set runtime shared library search path"), ONE_DASH },
+ { {"rpath-link", required_argument, NULL, OPTION_RPATH_LINK},
+ '\0', N_("PATH"), N_("Set link time shared library search path"),
+ ONE_DASH },
+ { {"shared", no_argument, NULL, OPTION_SHARED},
+ '\0', NULL, N_("Create a shared library"), ONE_DASH },
+ { {"Bshareable", no_argument, NULL, OPTION_SHARED }, /* FreeBSD. */
+ '\0', NULL, NULL, ONE_DASH },
+ { {"pie", no_argument, NULL, OPTION_PIE},
+ '\0', NULL, N_("Create a position independent executable"), ONE_DASH },
+ { {"pic-executable", no_argument, NULL, OPTION_PIE},
+ '\0', NULL, NULL, TWO_DASHES },
+ { {"sort-common", optional_argument, NULL, OPTION_SORT_COMMON},
+ '\0', N_("[=ascending|descending]"),
+ N_("Sort common symbols by alignment [in specified order]"),
+ TWO_DASHES },
+ { {"sort_common", no_argument, NULL, OPTION_SORT_COMMON},
+ '\0', NULL, NULL, NO_HELP },
+ { {"sort-section", required_argument, NULL, OPTION_SORT_SECTION},
+ '\0', N_("name|alignment"),
+ N_("Sort sections by name or maximum alignment"), TWO_DASHES },
+ { {"spare-dynamic-tags", required_argument, NULL, OPTION_SPARE_DYNAMIC_TAGS},
+ '\0', N_("COUNT"), N_("How many tags to reserve in .dynamic section"),
+ TWO_DASHES },
+ { {"split-by-file", optional_argument, NULL, OPTION_SPLIT_BY_FILE},
+ '\0', N_("[=SIZE]"), N_("Split output sections every SIZE octets"),
+ TWO_DASHES },
+ { {"split-by-reloc", optional_argument, NULL, OPTION_SPLIT_BY_RELOC},
+ '\0', N_("[=COUNT]"), N_("Split output sections every COUNT relocs"),
+ TWO_DASHES },
+ { {"stats", no_argument, NULL, OPTION_STATS},
+ '\0', NULL, N_("Print memory usage statistics"), TWO_DASHES },
+ { {"target-help", no_argument, NULL, OPTION_TARGET_HELP},
+ '\0', NULL, N_("Display target specific options"), TWO_DASHES },
+ { {"task-link", required_argument, NULL, OPTION_TASK_LINK},
+ '\0', N_("SYMBOL"), N_("Do task level linking"), TWO_DASHES },
+ { {"traditional-format", no_argument, NULL, OPTION_TRADITIONAL_FORMAT},
+ '\0', NULL, N_("Use same format as native linker"), TWO_DASHES },
+ { {"section-start", required_argument, NULL, OPTION_SECTION_START},
+ '\0', N_("SECTION=ADDRESS"), N_("Set address of named section"),
+ TWO_DASHES },
+ { {"Tbss", required_argument, NULL, OPTION_TBSS},
+ '\0', N_("ADDRESS"), N_("Set address of .bss section"), ONE_DASH },
+ { {"Tdata", required_argument, NULL, OPTION_TDATA},
+ '\0', N_("ADDRESS"), N_("Set address of .data section"), ONE_DASH },
+ { {"Ttext", required_argument, NULL, OPTION_TTEXT},
+ '\0', N_("ADDRESS"), N_("Set address of .text section"), ONE_DASH },
+ { {"Ttext-segment", required_argument, NULL, OPTION_TTEXT_SEGMENT},
+ '\0', N_("ADDRESS"), N_("Set address of text segment"), ONE_DASH },
+ { {"unresolved-symbols=<method>", required_argument, NULL,
+ OPTION_UNRESOLVED_SYMBOLS},
+ '\0', NULL, N_("How to handle unresolved symbols. <method> is:\n"
+ " ignore-all, report-all, ignore-in-object-files,\n"
+ " ignore-in-shared-libs"),
+ TWO_DASHES },
+ { {"verbose", no_argument, NULL, OPTION_VERBOSE},
+ '\0', NULL, N_("Output lots of information during link"), TWO_DASHES },
+ { {"dll-verbose", no_argument, NULL, OPTION_VERBOSE}, /* Linux. */
+ '\0', NULL, NULL, NO_HELP },
+ { {"version-script", required_argument, NULL, OPTION_VERSION_SCRIPT },
+ '\0', N_("FILE"), N_("Read version information script"), TWO_DASHES },
+ { {"version-exports-section", required_argument, NULL,
+ OPTION_VERSION_EXPORTS_SECTION },
+ '\0', N_("SYMBOL"), N_("Take export symbols list from .exports, using\n"
+ " SYMBOL as the version."),
+ TWO_DASHES },
+ { {"dynamic-list-data", no_argument, NULL, OPTION_DYNAMIC_LIST_DATA},
+ '\0', NULL, N_("Add data symbols to dynamic list"), TWO_DASHES },
+ { {"dynamic-list-cpp-new", no_argument, NULL, OPTION_DYNAMIC_LIST_CPP_NEW},
+ '\0', NULL, N_("Use C++ operator new/delete dynamic list"), TWO_DASHES },
+ { {"dynamic-list-cpp-typeinfo", no_argument, NULL, OPTION_DYNAMIC_LIST_CPP_TYPEINFO},
+ '\0', NULL, N_("Use C++ typeinfo dynamic list"), TWO_DASHES },
+ { {"dynamic-list", required_argument, NULL, OPTION_DYNAMIC_LIST},
+ '\0', N_("FILE"), N_("Read dynamic list"), TWO_DASHES },
+ { {"warn-common", no_argument, NULL, OPTION_WARN_COMMON},
+ '\0', NULL, N_("Warn about duplicate common symbols"), TWO_DASHES },
+ { {"warn-constructors", no_argument, NULL, OPTION_WARN_CONSTRUCTORS},
+ '\0', NULL, N_("Warn if global constructors/destructors are seen"),
+ TWO_DASHES },
+ { {"warn-multiple-gp", no_argument, NULL, OPTION_WARN_MULTIPLE_GP},
+ '\0', NULL, N_("Warn if the multiple GP values are used"), TWO_DASHES },
+ { {"warn-once", no_argument, NULL, OPTION_WARN_ONCE},
+ '\0', NULL, N_("Warn only once per undefined symbol"), TWO_DASHES },
+ { {"warn-section-align", no_argument, NULL, OPTION_WARN_SECTION_ALIGN},
+ '\0', NULL, N_("Warn if start of section changes due to alignment"),
+ TWO_DASHES },
+ { {"warn-shared-textrel", no_argument, NULL, OPTION_WARN_SHARED_TEXTREL},
+ '\0', NULL, N_("Warn if shared object has DT_TEXTREL"),
+ TWO_DASHES },
+ { {"warn-alternate-em", no_argument, NULL, OPTION_WARN_ALTERNATE_EM},
+ '\0', NULL, N_("Warn if an object has alternate ELF machine code"),
+ TWO_DASHES },
+ { {"warn-unresolved-symbols", no_argument, NULL,
+ OPTION_WARN_UNRESOLVED_SYMBOLS},
+ '\0', NULL, N_("Report unresolved symbols as warnings"), TWO_DASHES },
+ { {"error-unresolved-symbols", no_argument, NULL,
+ OPTION_ERROR_UNRESOLVED_SYMBOLS},
+ '\0', NULL, N_("Report unresolved symbols as errors"), TWO_DASHES },
+ { {"whole-archive", no_argument, NULL, OPTION_WHOLE_ARCHIVE},
+ '\0', NULL, N_("Include all objects from following archives"),
+ TWO_DASHES },
+ { {"wrap", required_argument, NULL, OPTION_WRAP},
+ '\0', N_("SYMBOL"), N_("Use wrapper functions for SYMBOL"), TWO_DASHES },
+};
+
+#define OPTION_COUNT ARRAY_SIZE (ld_options)
+
+void
+parse_args (unsigned argc, char **argv)
+{
+ unsigned i;
+ int is, il, irl;
+ int ingroup = 0;
+ char *default_dirlist = NULL;
+ char *shortopts;
+ struct option *longopts;
+ struct option *really_longopts;
+ int last_optind;
+ enum report_method how_to_report_unresolved_symbols = RM_GENERATE_ERROR;
+
+ shortopts = (char *) xmalloc (OPTION_COUNT * 3 + 2);
+ longopts = (struct option *)
+ xmalloc (sizeof (*longopts) * (OPTION_COUNT + 1));
+ really_longopts = (struct option *)
+ malloc (sizeof (*really_longopts) * (OPTION_COUNT + 1));
+
+ /* Starting the short option string with '-' is for programs that
+ expect options and other ARGV-elements in any order and that care about
+ the ordering of the two. We describe each non-option ARGV-element
+ as if it were the argument of an option with character code 1. */
+ shortopts[0] = '-';
+ is = 1;
+ il = 0;
+ irl = 0;
+ for (i = 0; i < OPTION_COUNT; i++)
+ {
+ if (ld_options[i].shortopt != '\0')
+ {
+ shortopts[is] = ld_options[i].shortopt;
+ ++is;
+ if (ld_options[i].opt.has_arg == required_argument
+ || ld_options[i].opt.has_arg == optional_argument)
+ {
+ shortopts[is] = ':';
+ ++is;
+ if (ld_options[i].opt.has_arg == optional_argument)
+ {
+ shortopts[is] = ':';
+ ++is;
+ }
+ }
+ }
+ if (ld_options[i].opt.name != NULL)
+ {
+ if (ld_options[i].control == EXACTLY_TWO_DASHES)
+ {
+ really_longopts[irl] = ld_options[i].opt;
+ ++irl;
+ }
+ else
+ {
+ longopts[il] = ld_options[i].opt;
+ ++il;
+ }
+ }
+ }
+ shortopts[is] = '\0';
+ longopts[il].name = NULL;
+ really_longopts[irl].name = NULL;
+
+ ldemul_add_options (is, &shortopts, il, &longopts, irl, &really_longopts);
+
+ /* The -G option is ambiguous on different platforms. Sometimes it
+ specifies the largest data size to put into the small data
+ section. Sometimes it is equivalent to --shared. Unfortunately,
+ the first form takes an argument, while the second does not.
+
+ We need to permit the --shared form because on some platforms,
+ such as Solaris, gcc -shared will pass -G to the linker.
+
+ To permit either usage, we look through the argument list. If we
+ find -G not followed by a number, we change it into --shared.
+ This will work for most normal cases. */
+ for (i = 1; i < argc; i++)
+ if (strcmp (argv[i], "-G") == 0
+ && (i + 1 >= argc
+ || ! ISDIGIT (argv[i + 1][0])))
+ argv[i] = (char *) "--shared";
+
+ /* Because we permit long options to start with a single dash, and
+ we have a --library option, and the -l option is conventionally
+ used with an immediately following argument, we can have bad
+ results if somebody tries to use -l with a library whose name
+ happens to start with "ibrary", as in -li. We avoid problems by
+ simply turning -l into --library. This means that users will
+ have to use two dashes in order to use --library, which is OK
+ since that's how it is documented.
+
+ FIXME: It's possible that this problem can arise for other short
+ options as well, although the user does always have the recourse
+ of adding a space between the option and the argument. */
+ for (i = 1; i < argc; i++)
+ {
+ if (argv[i][0] == '-'
+ && argv[i][1] == 'l'
+ && argv[i][2] != '\0')
+ {
+ char *n;
+
+ n = (char *) xmalloc (strlen (argv[i]) + 20);
+ sprintf (n, "--library=%s", argv[i] + 2);
+ argv[i] = n;
+ }
+ }
+
+ last_optind = -1;
+ while (1)
+ {
+ int longind;
+ int optc;
+
+ /* Using last_optind lets us avoid calling ldemul_parse_args
+ multiple times on a single option, which would lead to
+ confusion in the internal static variables maintained by
+ getopt. This could otherwise happen for an argument like
+ -nx, in which the -n is parsed as a single option, and we
+ loop around to pick up the -x. */
+ if (optind != last_optind)
+ if (ldemul_parse_args (argc, argv))
+ continue;
+
+ /* getopt_long_only is like getopt_long, but '-' as well as '--'
+ can indicate a long option. */
+ opterr = 0;
+ last_optind = optind;
+ optc = getopt_long_only (argc, argv, shortopts, longopts, &longind);
+ if (optc == '?')
+ {
+ optind = last_optind;
+ optc = getopt_long (argc, argv, "-", really_longopts, &longind);
+ }
+
+ if (ldemul_handle_option (optc))
+ continue;
+
+ if (optc == -1)
+ break;
+
+ switch (optc)
+ {
+ case '?':
+ einfo (_("%P: unrecognized option '%s'\n"), argv[last_optind]);
+ /* Fall through. */
+
+ default:
+ einfo (_("%P%F: use the --help option for usage information\n"));
+
+ case 1: /* File name. */
+ lang_add_input_file (optarg, lang_input_file_is_file_enum, NULL);
+ break;
+
+ case OPTION_IGNORE:
+ break;
+ case 'a':
+ /* For HP/UX compatibility. Actually -a shared should mean
+ ``use only shared libraries'' but, then, we don't
+ currently support shared libraries on HP/UX anyhow. */
+ if (strcmp (optarg, "archive") == 0)
+ config.dynamic_link = FALSE;
+ else if (strcmp (optarg, "shared") == 0
+ || strcmp (optarg, "default") == 0)
+ config.dynamic_link = TRUE;
+ else
+ einfo (_("%P%F: unrecognized -a option `%s'\n"), optarg);
+ break;
+ case OPTION_ASSERT:
+ /* FIXME: We just ignore these, but we should handle them. */
+ if (strcmp (optarg, "definitions") == 0)
+ ;
+ else if (strcmp (optarg, "nodefinitions") == 0)
+ ;
+ else if (strcmp (optarg, "nosymbolic") == 0)
+ ;
+ else if (strcmp (optarg, "pure-text") == 0)
+ ;
+ else
+ einfo (_("%P%F: unrecognized -assert option `%s'\n"), optarg);
+ break;
+ case 'A':
+ ldfile_add_arch (optarg);
+ break;
+ case 'b':
+ lang_add_target (optarg);
+ break;
+ case 'c':
+ ldfile_open_command_file (optarg);
+ parser_input = input_mri_script;
+ yyparse ();
+ break;
+ case OPTION_CALL_SHARED:
+ config.dynamic_link = TRUE;
+ break;
+ case OPTION_NON_SHARED:
+ config.dynamic_link = FALSE;
+ break;
+ case OPTION_CREF:
+ command_line.cref = TRUE;
+ link_info.notice_all = TRUE;
+ break;
+ case 'd':
+ command_line.force_common_definition = TRUE;
+ break;
+ case OPTION_DEFSYM:
+ lex_string = optarg;
+ lex_redirect (optarg);
+ parser_input = input_defsym;
+ parsing_defsym = 1;
+ yyparse ();
+ parsing_defsym = 0;
+ lex_string = NULL;
+ break;
+ case OPTION_DEMANGLE:
+ demangling = TRUE;
+ if (optarg != NULL)
+ {
+ enum demangling_styles style;
+
+ style = cplus_demangle_name_to_style (optarg);
+ if (style == unknown_demangling)
+ einfo (_("%F%P: unknown demangling style `%s'"),
+ optarg);
+
+ cplus_demangle_set_style (style);
+ }
+ break;
+ case 'I': /* Used on Solaris. */
+ case OPTION_DYNAMIC_LINKER:
+ command_line.interpreter = optarg;
+ break;
+ case OPTION_SYSROOT:
+ /* Already handled in ldmain.c. */
+ break;
+ case OPTION_EB:
+ command_line.endian = ENDIAN_BIG;
+ break;
+ case OPTION_EL:
+ command_line.endian = ENDIAN_LITTLE;
+ break;
+ case OPTION_EMBEDDED_RELOCS:
+ command_line.embedded_relocs = TRUE;
+ break;
+ case OPTION_EXPORT_DYNAMIC:
+ case 'E': /* HP/UX compatibility. */
+ link_info.export_dynamic = TRUE;
+ break;
+ case OPTION_NO_EXPORT_DYNAMIC:
+ link_info.export_dynamic = FALSE;
+ break;
+ case 'e':
+ lang_add_entry (optarg, TRUE);
+ break;
+ case 'f':
+ if (command_line.auxiliary_filters == NULL)
+ {
+ command_line.auxiliary_filters = (char **)
+ xmalloc (2 * sizeof (char *));
+ command_line.auxiliary_filters[0] = optarg;
+ command_line.auxiliary_filters[1] = NULL;
+ }
+ else
+ {
+ int c;
+ char **p;
+
+ c = 0;
+ for (p = command_line.auxiliary_filters; *p != NULL; p++)
+ ++c;
+ command_line.auxiliary_filters = (char **)
+ xrealloc (command_line.auxiliary_filters,
+ (c + 2) * sizeof (char *));
+ command_line.auxiliary_filters[c] = optarg;
+ command_line.auxiliary_filters[c + 1] = NULL;
+ }
+ break;
+ case 'F':
+ command_line.filter_shlib = optarg;
+ break;
+ case OPTION_FORCE_EXE_SUFFIX:
+ command_line.force_exe_suffix = TRUE;
+ break;
+ case 'G':
+ {
+ char *end;
+ g_switch_value = strtoul (optarg, &end, 0);
+ if (*end)
+ einfo (_("%P%F: invalid number `%s'\n"), optarg);
+ }
+ break;
+ case 'g':
+ /* Ignore. */
+ break;
+ case OPTION_GC_SECTIONS:
+ link_info.gc_sections = TRUE;
+ break;
+ case OPTION_PRINT_GC_SECTIONS:
+ link_info.print_gc_sections = TRUE;
+ break;
+ case OPTION_HELP:
+ help ();
+ xexit (0);
+ break;
+ case 'L':
+ ldfile_add_library_path (optarg, TRUE);
+ break;
+ case 'l':
+ lang_add_input_file (optarg, lang_input_file_is_l_enum, NULL);
+ break;
+ case 'M':
+ config.map_filename = "-";
+ break;
+ case 'm':
+ /* Ignore. Was handled in a pre-parse. */
+ break;
+ case OPTION_MAP:
+ config.map_filename = optarg;
+ break;
+ case 'N':
+ config.text_read_only = FALSE;
+ config.magic_demand_paged = FALSE;
+ config.dynamic_link = FALSE;
+ break;
+ case OPTION_NO_OMAGIC:
+ config.text_read_only = TRUE;
+ config.magic_demand_paged = TRUE;
+ /* NB/ Does not set dynamic_link to TRUE.
+ Use --call-shared or -Bdynamic for this. */
+ break;
+ case 'n':
+ config.magic_demand_paged = FALSE;
+ config.dynamic_link = FALSE;
+ break;
+ case OPTION_NO_DEFINE_COMMON:
+ command_line.inhibit_common_definition = TRUE;
+ break;
+ case OPTION_NO_DEMANGLE:
+ demangling = FALSE;
+ break;
+ case OPTION_NO_GC_SECTIONS:
+ link_info.gc_sections = FALSE;
+ break;
+ case OPTION_NO_PRINT_GC_SECTIONS:
+ link_info.print_gc_sections = FALSE;
+ break;
+ case OPTION_NO_KEEP_MEMORY:
+ link_info.keep_memory = FALSE;
+ break;
+ case OPTION_NO_UNDEFINED:
+ link_info.unresolved_syms_in_objects
+ = how_to_report_unresolved_symbols;
+ break;
+ case OPTION_ALLOW_SHLIB_UNDEFINED:
+ link_info.unresolved_syms_in_shared_libs = RM_IGNORE;
+ break;
+ case OPTION_NO_ALLOW_SHLIB_UNDEFINED:
+ link_info.unresolved_syms_in_shared_libs
+ = how_to_report_unresolved_symbols;
+ break;
+ case OPTION_UNRESOLVED_SYMBOLS:
+ if (strcmp (optarg, "ignore-all") == 0)
+ {
+ link_info.unresolved_syms_in_objects = RM_IGNORE;
+ link_info.unresolved_syms_in_shared_libs = RM_IGNORE;
+ }
+ else if (strcmp (optarg, "report-all") == 0)
+ {
+ link_info.unresolved_syms_in_objects
+ = how_to_report_unresolved_symbols;
+ link_info.unresolved_syms_in_shared_libs
+ = how_to_report_unresolved_symbols;
+ }
+ else if (strcmp (optarg, "ignore-in-object-files") == 0)
+ {
+ link_info.unresolved_syms_in_objects = RM_IGNORE;
+ link_info.unresolved_syms_in_shared_libs
+ = how_to_report_unresolved_symbols;
+ }
+ else if (strcmp (optarg, "ignore-in-shared-libs") == 0)
+ {
+ link_info.unresolved_syms_in_objects
+ = how_to_report_unresolved_symbols;
+ link_info.unresolved_syms_in_shared_libs = RM_IGNORE;
+ }
+ else
+ einfo (_("%P%F: bad --unresolved-symbols option: %s\n"), optarg);
+ break;
+ case OPTION_WARN_UNRESOLVED_SYMBOLS:
+ how_to_report_unresolved_symbols = RM_GENERATE_WARNING;
+ if (link_info.unresolved_syms_in_objects == RM_GENERATE_ERROR)
+ link_info.unresolved_syms_in_objects = RM_GENERATE_WARNING;
+ if (link_info.unresolved_syms_in_shared_libs == RM_GENERATE_ERROR)
+ link_info.unresolved_syms_in_shared_libs = RM_GENERATE_WARNING;
+ break;
+
+ case OPTION_ERROR_UNRESOLVED_SYMBOLS:
+ how_to_report_unresolved_symbols = RM_GENERATE_ERROR;
+ if (link_info.unresolved_syms_in_objects == RM_GENERATE_WARNING)
+ link_info.unresolved_syms_in_objects = RM_GENERATE_ERROR;
+ if (link_info.unresolved_syms_in_shared_libs == RM_GENERATE_WARNING)
+ link_info.unresolved_syms_in_shared_libs = RM_GENERATE_ERROR;
+ break;
+ case OPTION_ALLOW_MULTIPLE_DEFINITION:
+ link_info.allow_multiple_definition = TRUE;
+ break;
+ case OPTION_NO_UNDEFINED_VERSION:
+ link_info.allow_undefined_version = FALSE;
+ break;
+ case OPTION_DEFAULT_SYMVER:
+ link_info.create_default_symver = TRUE;
+ break;
+ case OPTION_DEFAULT_IMPORTED_SYMVER:
+ link_info.default_imported_symver = TRUE;
+ break;
+ case OPTION_NO_WARN_MISMATCH:
+ command_line.warn_mismatch = FALSE;
+ break;
+ case OPTION_NO_WARN_SEARCH_MISMATCH:
+ command_line.warn_search_mismatch = FALSE;
+ break;
+ case OPTION_NOINHIBIT_EXEC:
+ force_make_executable = TRUE;
+ break;
+ case OPTION_NOSTDLIB:
+ config.only_cmd_line_lib_dirs = TRUE;
+ break;
+ case OPTION_NO_WHOLE_ARCHIVE:
+ whole_archive = FALSE;
+ break;
+ case 'O':
+ /* FIXME "-O<non-digits> <value>" used to set the address of
+ section <non-digits>. Was this for compatibility with
+ something, or can we create a new option to do that
+ (with a syntax similar to -defsym)?
+ getopt can't handle two args to an option without kludges. */
+
+ /* Enable optimizations of output files. */
+ link_info.optimize = strtoul (optarg, NULL, 0) ? TRUE : FALSE;
+ break;
+ case 'o':
+ lang_add_output (optarg, 0);
+ break;
+ case OPTION_OFORMAT:
+ lang_add_output_format (optarg, NULL, NULL, 0);
+ break;
+#ifdef ENABLE_PLUGINS
+ case OPTION_PLUGIN:
+ if (plugin_opt_plugin (optarg))
+ einfo(_("%P%F: bad -plugin option\n"));
+ break;
+ case OPTION_PLUGIN_OPT:
+ if (plugin_opt_plugin_arg (optarg))
+ einfo(_("%P%F: bad -plugin-opt option\n"));
+ break;
+#endif /* ENABLE_PLUGINS */
+ case 'q':
+ link_info.emitrelocations = TRUE;
+ break;
+ case 'i':
+ case 'r':
+ if (optind == last_optind)
+ /* This can happen if the user put "-rpath,a" on the command
+ line. (Or something similar. The comma is important).
+ Getopt becomes confused and thinks that this is a -r option
+ but it cannot parse the text after the -r so it refuses to
+ increment the optind counter. Detect this case and issue
+ an error message here. We cannot just make this a warning,
+ increment optind, and continue because getopt is too confused
+ and will seg-fault the next time around. */
+ einfo(_("%P%F: bad -rpath option\n"));
+
+ link_info.relocatable = TRUE;
+ config.build_constructors = FALSE;
+ config.magic_demand_paged = FALSE;
+ config.text_read_only = FALSE;
+ config.dynamic_link = FALSE;
+ break;
+ case 'R':
+ /* The GNU linker traditionally uses -R to mean to include
+ only the symbols from a file. The Solaris linker uses -R
+ to set the path used by the runtime linker to find
+ libraries. This is the GNU linker -rpath argument. We
+ try to support both simultaneously by checking the file
+ named. If it is a directory, rather than a regular file,
+ we assume -rpath was meant. */
+ {
+ struct stat s;
+
+ if (stat (optarg, &s) >= 0
+ && ! S_ISDIR (s.st_mode))
+ {
+ lang_add_input_file (optarg,
+ lang_input_file_is_symbols_only_enum,
+ NULL);
+ break;
+ }
+ }
+ /* Fall through. */
+ case OPTION_RPATH:
+ if (command_line.rpath == NULL)
+ command_line.rpath = xstrdup (optarg);
+ else
+ {
+ size_t rpath_len = strlen (command_line.rpath);
+ size_t optarg_len = strlen (optarg);
+ char *buf;
+ char *cp = command_line.rpath;
+
+ /* First see whether OPTARG is already in the path. */
+ do
+ {
+ if (strncmp (optarg, cp, optarg_len) == 0
+ && (cp[optarg_len] == 0
+ || cp[optarg_len] == config.rpath_separator))
+ /* We found it. */
+ break;
+
+ /* Not yet found. */
+ cp = strchr (cp, config.rpath_separator);
+ if (cp != NULL)
+ ++cp;
+ }
+ while (cp != NULL);
+
+ if (cp == NULL)
+ {
+ buf = (char *) xmalloc (rpath_len + optarg_len + 2);
+ sprintf (buf, "%s%c%s", command_line.rpath,
+ config.rpath_separator, optarg);
+ free (command_line.rpath);
+ command_line.rpath = buf;
+ }
+ }
+ break;
+ case OPTION_RPATH_LINK:
+ if (command_line.rpath_link == NULL)
+ command_line.rpath_link = xstrdup (optarg);
+ else
+ {
+ char *buf;
+
+ buf = (char *) xmalloc (strlen (command_line.rpath_link)
+ + strlen (optarg)
+ + 2);
+ sprintf (buf, "%s%c%s", command_line.rpath_link,
+ config.rpath_separator, optarg);
+ free (command_line.rpath_link);
+ command_line.rpath_link = buf;
+ }
+ break;
+ case OPTION_NO_RELAX:
+ DISABLE_RELAXATION;
+ break;
+ case OPTION_RELAX:
+ ENABLE_RELAXATION;
+ break;
+ case OPTION_RETAIN_SYMBOLS_FILE:
+ add_keepsyms_file (optarg);
+ break;
+ case 'S':
+ link_info.strip = strip_debugger;
+ break;
+ case 's':
+ link_info.strip = strip_all;
+ break;
+ case OPTION_STRIP_DISCARDED:
+ link_info.strip_discarded = TRUE;
+ break;
+ case OPTION_NO_STRIP_DISCARDED:
+ link_info.strip_discarded = FALSE;
+ break;
+ case OPTION_SHARED:
+ if (config.has_shared)
+ {
+ link_info.shared = TRUE;
+ /* When creating a shared library, the default
+ behaviour is to ignore any unresolved references. */
+ if (link_info.unresolved_syms_in_objects == RM_NOT_YET_SET)
+ link_info.unresolved_syms_in_objects = RM_IGNORE;
+ if (link_info.unresolved_syms_in_shared_libs == RM_NOT_YET_SET)
+ link_info.unresolved_syms_in_shared_libs = RM_IGNORE;
+ }
+ else
+ einfo (_("%P%F: -shared not supported\n"));
+ break;
+ case OPTION_PIE:
+ if (config.has_shared)
+ {
+ link_info.shared = TRUE;
+ link_info.pie = TRUE;
+ }
+ else
+ einfo (_("%P%F: -pie not supported\n"));
+ break;
+ case 'h': /* Used on Solaris. */
+ case OPTION_SONAME:
+ command_line.soname = optarg;
+ break;
+ case OPTION_SORT_COMMON:
+ if (optarg == NULL
+ || strcmp (optarg, N_("descending")) == 0)
+ config.sort_common = sort_descending;
+ else if (strcmp (optarg, N_("ascending")) == 0)
+ config.sort_common = sort_ascending;
+ else
+ einfo (_("%P%F: invalid common section sorting option: %s\n"),
+ optarg);
+ break;
+ case OPTION_SORT_SECTION:
+ if (strcmp (optarg, N_("name")) == 0)
+ sort_section = by_name;
+ else if (strcmp (optarg, N_("alignment")) == 0)
+ sort_section = by_alignment;
+ else
+ einfo (_("%P%F: invalid section sorting option: %s\n"),
+ optarg);
+ break;
+ case OPTION_STATS:
+ config.stats = TRUE;
+ break;
+ case OPTION_SYMBOLIC:
+ command_line.symbolic = symbolic;
+ break;
+ case OPTION_SYMBOLIC_FUNCTIONS:
+ command_line.symbolic = symbolic_functions;
+ break;
+ case 't':
+ trace_files = TRUE;
+ break;
+ case 'T':
+ previous_script_handle = saved_script_handle;
+ ldfile_open_command_file (optarg);
+ parser_input = input_script;
+ yyparse ();
+ previous_script_handle = NULL;
+ break;
+ case OPTION_DEFAULT_SCRIPT:
+ command_line.default_script = optarg;
+ break;
+ case OPTION_SECTION_START:
+ {
+ char *optarg2;
+ char *sec_name;
+ int len;
+
+ /* Check for <something>=<somthing>... */
+ optarg2 = strchr (optarg, '=');
+ if (optarg2 == NULL)
+ einfo (_("%P%F: invalid argument to option"
+ " \"--section-start\"\n"));
+
+ optarg2++;
+
+ /* So far so good. Are all the args present? */
+ if ((*optarg == '\0') || (*optarg2 == '\0'))
+ einfo (_("%P%F: missing argument(s) to option"
+ " \"--section-start\"\n"));
+
+ /* We must copy the section name as set_section_start
+ doesn't do it for us. */
+ len = optarg2 - optarg;
+ sec_name = (char *) xmalloc (len);
+ memcpy (sec_name, optarg, len - 1);
+ sec_name[len - 1] = 0;
+
+ /* Then set it... */
+ set_section_start (sec_name, optarg2);
+ }
+ break;
+ case OPTION_TARGET_HELP:
+ /* Mention any target specific options. */
+ ldemul_list_emulation_options (stdout);
+ exit (0);
+ case OPTION_TBSS:
+ set_segment_start (".bss", optarg);
+ break;
+ case OPTION_TDATA:
+ set_segment_start (".data", optarg);
+ break;
+ case OPTION_TTEXT:
+ set_segment_start (".text", optarg);
+ break;
+ case OPTION_TTEXT_SEGMENT:
+ set_segment_start (".text-segment", optarg);
+ break;
+ case OPTION_TRADITIONAL_FORMAT:
+ link_info.traditional_format = TRUE;
+ break;
+ case OPTION_TASK_LINK:
+ link_info.task_link = TRUE;
+ /* Fall through - do an implied -r option. */
+ case OPTION_UR:
+ link_info.relocatable = TRUE;
+ config.build_constructors = TRUE;
+ config.magic_demand_paged = FALSE;
+ config.text_read_only = FALSE;
+ config.dynamic_link = FALSE;
+ break;
+ case 'u':
+ ldlang_add_undef (optarg, TRUE);
+ break;
+ case OPTION_UNIQUE:
+ if (optarg != NULL)
+ lang_add_unique (optarg);
+ else
+ config.unique_orphan_sections = TRUE;
+ break;
+ case OPTION_VERBOSE:
+ ldversion (1);
+ version_printed = TRUE;
+ trace_file_tries = TRUE;
+ overflow_cutoff_limit = -2;
+ break;
+ case 'v':
+ ldversion (0);
+ version_printed = TRUE;
+ break;
+ case 'V':
+ ldversion (1);
+ version_printed = TRUE;
+ break;
+ case OPTION_VERSION:
+ ldversion (2);
+ xexit (0);
+ break;
+ case OPTION_VERSION_SCRIPT:
+ /* This option indicates a small script that only specifies
+ version information. Read it, but don't assume that
+ we've seen a linker script. */
+ {
+ FILE *hold_script_handle;
+
+ hold_script_handle = saved_script_handle;
+ ldfile_open_command_file (optarg);
+ saved_script_handle = hold_script_handle;
+ parser_input = input_version_script;
+ yyparse ();
+ }
+ break;
+ case OPTION_VERSION_EXPORTS_SECTION:
+ /* This option records a version symbol to be applied to the
+ symbols listed for export to be found in the object files
+ .exports sections. */
+ command_line.version_exports_section = optarg;
+ break;
+ case OPTION_DYNAMIC_LIST_DATA:
+ command_line.dynamic_list = dynamic_list_data;
+ if (command_line.symbolic == symbolic)
+ command_line.symbolic = symbolic_unset;
+ break;
+ case OPTION_DYNAMIC_LIST_CPP_TYPEINFO:
+ lang_append_dynamic_list_cpp_typeinfo ();
+ if (command_line.dynamic_list != dynamic_list_data)
+ command_line.dynamic_list = dynamic_list;
+ if (command_line.symbolic == symbolic)
+ command_line.symbolic = symbolic_unset;
+ break;
+ case OPTION_DYNAMIC_LIST_CPP_NEW:
+ lang_append_dynamic_list_cpp_new ();
+ if (command_line.dynamic_list != dynamic_list_data)
+ command_line.dynamic_list = dynamic_list;
+ if (command_line.symbolic == symbolic)
+ command_line.symbolic = symbolic_unset;
+ break;
+ case OPTION_DYNAMIC_LIST:
+ /* This option indicates a small script that only specifies
+ a dynamic list. Read it, but don't assume that we've
+ seen a linker script. */
+ {
+ FILE *hold_script_handle;
+
+ hold_script_handle = saved_script_handle;
+ ldfile_open_command_file (optarg);
+ saved_script_handle = hold_script_handle;
+ parser_input = input_dynamic_list;
+ yyparse ();
+ }
+ if (command_line.dynamic_list != dynamic_list_data)
+ command_line.dynamic_list = dynamic_list;
+ if (command_line.symbolic == symbolic)
+ command_line.symbolic = symbolic_unset;
+ break;
+ case OPTION_WARN_COMMON:
+ config.warn_common = TRUE;
+ break;
+ case OPTION_WARN_CONSTRUCTORS:
+ config.warn_constructors = TRUE;
+ break;
+ case OPTION_WARN_FATAL:
+ config.fatal_warnings = TRUE;
+ break;
+ case OPTION_NO_WARN_FATAL:
+ config.fatal_warnings = FALSE;
+ break;
+ case OPTION_WARN_MULTIPLE_GP:
+ config.warn_multiple_gp = TRUE;
+ break;
+ case OPTION_WARN_ONCE:
+ config.warn_once = TRUE;
+ break;
+ case OPTION_WARN_SECTION_ALIGN:
+ config.warn_section_align = TRUE;
+ break;
+ case OPTION_WARN_SHARED_TEXTREL:
+ link_info.warn_shared_textrel = TRUE;
+ break;
+ case OPTION_WARN_ALTERNATE_EM:
+ link_info.warn_alternate_em = TRUE;
+ break;
+ case OPTION_WHOLE_ARCHIVE:
+ whole_archive = TRUE;
+ break;
+ case OPTION_ADD_DT_NEEDED_FOR_DYNAMIC:
+ add_DT_NEEDED_for_dynamic = TRUE;
+ break;
+ case OPTION_NO_ADD_DT_NEEDED_FOR_DYNAMIC:
+ add_DT_NEEDED_for_dynamic = FALSE;
+ break;
+ case OPTION_ADD_DT_NEEDED_FOR_REGULAR:
+ add_DT_NEEDED_for_regular = TRUE;
+ break;
+ case OPTION_NO_ADD_DT_NEEDED_FOR_REGULAR:
+ add_DT_NEEDED_for_regular = FALSE;
+ break;
+ case OPTION_WRAP:
+ add_wrap (optarg);
+ break;
+ case OPTION_DISCARD_NONE:
+ link_info.discard = discard_none;
+ break;
+ case 'X':
+ link_info.discard = discard_l;
+ break;
+ case 'x':
+ link_info.discard = discard_all;
+ break;
+ case 'Y':
+ if (CONST_STRNEQ (optarg, "P,"))
+ optarg += 2;
+ if (default_dirlist != NULL)
+ free (default_dirlist);
+ default_dirlist = xstrdup (optarg);
+ break;
+ case 'y':
+ add_ysym (optarg);
+ break;
+ case OPTION_SPARE_DYNAMIC_TAGS:
+ link_info.spare_dynamic_tags = strtoul (optarg, NULL, 0);
+ break;
+ case OPTION_SPLIT_BY_RELOC:
+ if (optarg != NULL)
+ config.split_by_reloc = strtoul (optarg, NULL, 0);
+ else
+ config.split_by_reloc = 32768;
+ break;
+ case OPTION_SPLIT_BY_FILE:
+ if (optarg != NULL)
+ config.split_by_file = bfd_scan_vma (optarg, NULL, 0);
+ else
+ config.split_by_file = 1;
+ break;
+ case OPTION_CHECK_SECTIONS:
+ command_line.check_section_addresses = 1;
+ break;
+ case OPTION_NO_CHECK_SECTIONS:
+ command_line.check_section_addresses = 0;
+ break;
+ case OPTION_ACCEPT_UNKNOWN_INPUT_ARCH:
+ command_line.accept_unknown_input_arch = TRUE;
+ break;
+ case OPTION_NO_ACCEPT_UNKNOWN_INPUT_ARCH:
+ command_line.accept_unknown_input_arch = FALSE;
+ break;
+ case '(':
+ lang_enter_group ();
+ ingroup++;
+ break;
+ case ')':
+ if (! ingroup)
+ einfo (_("%P%F: group ended before it began (--help for usage)\n"));
+
+ lang_leave_group ();
+ ingroup--;
+ break;
+
+ case OPTION_INIT:
+ link_info.init_function = optarg;
+ break;
+
+ case OPTION_FINI:
+ link_info.fini_function = optarg;
+ break;
+
+ case OPTION_REDUCE_MEMORY_OVERHEADS:
+ link_info.reduce_memory_overheads = TRUE;
+ if (config.hash_table_size == 0)
+ config.hash_table_size = 1021;
+ break;
+
+ case OPTION_HASH_SIZE:
+ {
+ bfd_size_type new_size;
+
+ new_size = strtoul (optarg, NULL, 0);
+ if (new_size)
+ config.hash_table_size = new_size;
+ else
+ einfo (_("%P%X: --hash-size needs a numeric argument\n"));
+ }
+ break;
+ }
+ }
+
+ while (ingroup)
+ {
+ lang_leave_group ();
+ ingroup--;
+ }
+
+ if (default_dirlist != NULL)
+ {
+ set_default_dirlist (default_dirlist);
+ free (default_dirlist);
+ }
+
+ if (link_info.unresolved_syms_in_objects == RM_NOT_YET_SET)
+ /* FIXME: Should we allow emulations a chance to set this ? */
+ link_info.unresolved_syms_in_objects = how_to_report_unresolved_symbols;
+
+ if (link_info.unresolved_syms_in_shared_libs == RM_NOT_YET_SET)
+ /* FIXME: Should we allow emulations a chance to set this ? */
+ link_info.unresolved_syms_in_shared_libs = how_to_report_unresolved_symbols;
+
+#ifdef ENABLE_PLUGINS
+ /* Now all the plugin arguments have been gathered, we can load them. */
+ if (plugin_load_plugins ())
+ einfo (_("%P%F: %s: error loading plugin\n"), plugin_error_plugin ());
+#endif /* ENABLE_PLUGINS */
+}
+
+/* Add the (colon-separated) elements of DIRLIST_PTR to the
+ library search path. */
+
+static void
+set_default_dirlist (char *dirlist_ptr)
+{
+ char *p;
+
+ while (1)
+ {
+ p = strchr (dirlist_ptr, PATH_SEPARATOR);
+ if (p != NULL)
+ *p = '\0';
+ if (*dirlist_ptr != '\0')
+ ldfile_add_library_path (dirlist_ptr, TRUE);
+ if (p == NULL)
+ break;
+ dirlist_ptr = p + 1;
+ }
+}
+
+static void
+set_section_start (char *sect, char *valstr)
+{
+ const char *end;
+ bfd_vma val = bfd_scan_vma (valstr, &end, 16);
+ if (*end)
+ einfo (_("%P%F: invalid hex number `%s'\n"), valstr);
+ lang_section_start (sect, exp_intop (val), NULL);
+}
+
+static void
+set_segment_start (const char *section, char *valstr)
+{
+ const char *name;
+ const char *end;
+ segment_type *seg;
+
+ bfd_vma val = bfd_scan_vma (valstr, &end, 16);
+ if (*end)
+ einfo (_("%P%F: invalid hex number `%s'\n"), valstr);
+ /* If we already have an entry for this segment, update the existing
+ value. */
+ name = section + 1;
+ for (seg = segments; seg; seg = seg->next)
+ if (strcmp (seg->name, name) == 0)
+ {
+ seg->value = val;
+ return;
+ }
+ /* There was no existing value so we must create a new segment
+ entry. */
+ seg = (segment_type *) stat_alloc (sizeof (*seg));
+ seg->name = name;
+ seg->value = val;
+ seg->used = FALSE;
+ /* Add it to the linked list of segments. */
+ seg->next = segments;
+ segments = seg;
+ /* Historically, -Ttext and friends set the base address of a
+ particular section. For backwards compatibility, we still do
+ that. If a SEGMENT_START directive is seen, the section address
+ assignment will be disabled. */
+ lang_section_start (section, exp_intop (val), seg);
+}
+
+
+/* Print help messages for the options. */
+
+static void
+help (void)
+{
+ unsigned i;
+ const char **targets, **pp;
+ int len;
+
+ printf (_("Usage: %s [options] file...\n"), program_name);
+
+ printf (_("Options:\n"));
+ for (i = 0; i < OPTION_COUNT; i++)
+ {
+ if (ld_options[i].doc != NULL)
+ {
+ bfd_boolean comma;
+ unsigned j;
+
+ printf (" ");
+
+ comma = FALSE;
+ len = 2;
+
+ j = i;
+ do
+ {
+ if (ld_options[j].shortopt != '\0'
+ && ld_options[j].control != NO_HELP)
+ {
+ printf ("%s-%c", comma ? ", " : "", ld_options[j].shortopt);
+ len += (comma ? 2 : 0) + 2;
+ if (ld_options[j].arg != NULL)
+ {
+ if (ld_options[j].opt.has_arg != optional_argument)
+ {
+ printf (" ");
+ ++len;
+ }
+ printf ("%s", _(ld_options[j].arg));
+ len += strlen (_(ld_options[j].arg));
+ }
+ comma = TRUE;
+ }
+ ++j;
+ }
+ while (j < OPTION_COUNT && ld_options[j].doc == NULL);
+
+ j = i;
+ do
+ {
+ if (ld_options[j].opt.name != NULL
+ && ld_options[j].control != NO_HELP)
+ {
+ int two_dashes =
+ (ld_options[j].control == TWO_DASHES
+ || ld_options[j].control == EXACTLY_TWO_DASHES);
+
+ printf ("%s-%s%s",
+ comma ? ", " : "",
+ two_dashes ? "-" : "",
+ ld_options[j].opt.name);
+ len += ((comma ? 2 : 0)
+ + 1
+ + (two_dashes ? 1 : 0)
+ + strlen (ld_options[j].opt.name));
+ if (ld_options[j].arg != NULL)
+ {
+ printf (" %s", _(ld_options[j].arg));
+ len += 1 + strlen (_(ld_options[j].arg));
+ }
+ comma = TRUE;
+ }
+ ++j;
+ }
+ while (j < OPTION_COUNT && ld_options[j].doc == NULL);
+
+ if (len >= 30)
+ {
+ printf ("\n");
+ len = 0;
+ }
+
+ for (; len < 30; len++)
+ putchar (' ');
+
+ printf ("%s\n", _(ld_options[i].doc));
+ }
+ }
+ printf (_(" @FILE"));
+ for (len = strlen (" @FILE"); len < 30; len++)
+ putchar (' ');
+ printf (_("Read options from FILE\n"));
+
+ /* Note: Various tools (such as libtool) depend upon the
+ format of the listings below - do not change them. */
+ /* xgettext:c-format */
+ printf (_("%s: supported targets:"), program_name);
+ targets = bfd_target_list ();
+ for (pp = targets; *pp != NULL; pp++)
+ printf (" %s", *pp);
+ free (targets);
+ printf ("\n");
+
+ /* xgettext:c-format */
+ printf (_("%s: supported emulations: "), program_name);
+ ldemul_list_emulations (stdout);
+ printf ("\n");
+
+ /* xgettext:c-format */
+ printf (_("%s: emulation specific options:\n"), program_name);
+ ldemul_list_emulation_options (stdout);
+ printf ("\n");
+
+ if (REPORT_BUGS_TO[0])
+ printf (_("Report bugs to %s\n"), REPORT_BUGS_TO);
+}
diff --git a/binutils-2.21/ld/mri.c b/binutils-2.21/ld/mri.c
new file mode 100644
index 0000000..1932a93
--- /dev/null
+++ b/binutils-2.21/ld/mri.c
@@ -0,0 +1,317 @@
+/* mri.c -- handle MRI style linker scripts
+ Copyright 1991, 1992, 1993, 1994, 1996, 1997, 1998, 1999, 2000, 2001,
+ 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
+ Contributed by Steve Chamberlain <sac@cygnus.com>.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+
+/* This bit does the tree decoration when MRI style link scripts
+ are parsed. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "ld.h"
+#include "ldexp.h"
+#include "ldlang.h"
+#include "ldmisc.h"
+#include "mri.h"
+#include <ldgram.h>
+#include "libiberty.h"
+
+struct section_name_struct {
+ struct section_name_struct *next;
+ const char *name;
+ const char *alias;
+ etree_type *vma;
+ etree_type *align;
+ etree_type *subalign;
+ int ok_to_load;
+};
+
+static unsigned int symbol_truncate = 10000;
+static struct section_name_struct *order;
+static struct section_name_struct *only_load;
+static struct section_name_struct *address;
+static struct section_name_struct *alias;
+
+static struct section_name_struct *alignment;
+static struct section_name_struct *subalignment;
+
+static struct section_name_struct **
+lookup (const char *name, struct section_name_struct **list)
+{
+ struct section_name_struct **ptr = list;
+
+ while (*ptr)
+ {
+ if (strcmp (name, (*ptr)->name) == 0)
+ /* If this is a match, delete it, we only keep the last instance
+ of any name. */
+ *ptr = (*ptr)->next;
+ else
+ ptr = &((*ptr)->next);
+ }
+
+ *ptr = (struct section_name_struct *)
+ xmalloc (sizeof (struct section_name_struct));
+ return ptr;
+}
+
+static void
+mri_add_to_list (struct section_name_struct **list,
+ const char *name,
+ etree_type *vma,
+ const char *zalias,
+ etree_type *align,
+ etree_type *subalign)
+{
+ struct section_name_struct **ptr = lookup (name, list);
+
+ (*ptr)->name = name;
+ (*ptr)->vma = vma;
+ (*ptr)->next = NULL;
+ (*ptr)->ok_to_load = 0;
+ (*ptr)->alias = zalias;
+ (*ptr)->align = align;
+ (*ptr)->subalign = subalign;
+}
+
+void
+mri_output_section (const char *name, etree_type *vma)
+{
+ mri_add_to_list (&address, name, vma, 0, 0, 0);
+}
+
+/* If any ABSOLUTE <name> are in the script, only load those files
+ marked thus. */
+
+void
+mri_only_load (const char *name)
+{
+ mri_add_to_list (&only_load, name, 0, 0, 0, 0);
+}
+
+void
+mri_base (etree_type *exp)
+{
+ base = exp;
+}
+
+static int done_tree = 0;
+
+void
+mri_draw_tree (void)
+{
+ if (done_tree)
+ return;
+
+ /* Now build the statements for the ldlang machine. */
+
+ /* Attach the addresses of any which have addresses,
+ and add the ones not mentioned. */
+ if (address != NULL)
+ {
+ struct section_name_struct *alist;
+ struct section_name_struct *olist;
+
+ if (order == NULL)
+ order = address;
+
+ for (alist = address;
+ alist != NULL;
+ alist = alist->next)
+ {
+ int done = 0;
+
+ for (olist = order; done == 0 && olist != NULL; olist = olist->next)
+ {
+ if (strcmp (alist->name, olist->name) == 0)
+ {
+ olist->vma = alist->vma;
+ done = 1;
+ }
+ }
+
+ if (!done)
+ {
+ /* Add this onto end of order list. */
+ mri_add_to_list (&order, alist->name, alist->vma, 0, 0, 0);
+ }
+ }
+ }
+
+ /* If we're only supposed to load a subset of them in, then prune
+ the list. */
+ if (only_load != NULL)
+ {
+ struct section_name_struct *ptr1;
+ struct section_name_struct *ptr2;
+
+ if (order == NULL)
+ order = only_load;
+
+ /* See if this name is in the list, if it is then we can load it. */
+ for (ptr1 = only_load; ptr1; ptr1 = ptr1->next)
+ for (ptr2 = order; ptr2; ptr2 = ptr2->next)
+ if (strcmp (ptr2->name, ptr1->name) == 0)
+ ptr2->ok_to_load = 1;
+ }
+ else
+ {
+ /* No only load list, so everything is ok to load. */
+ struct section_name_struct *ptr;
+
+ for (ptr = order; ptr; ptr = ptr->next)
+ ptr->ok_to_load = 1;
+ }
+
+ /* Create the order of sections to load. */
+ if (order != NULL)
+ {
+ /* Been told to output the sections in a certain order. */
+ struct section_name_struct *p = order;
+
+ while (p)
+ {
+ struct section_name_struct *aptr;
+ etree_type *align = 0;
+ etree_type *subalign = 0;
+ struct wildcard_list *tmp;
+
+ /* See if an alignment has been specified. */
+ for (aptr = alignment; aptr; aptr = aptr->next)
+ if (strcmp (aptr->name, p->name) == 0)
+ align = aptr->align;
+
+ for (aptr = subalignment; aptr; aptr = aptr->next)
+ if (strcmp (aptr->name, p->name) == 0)
+ subalign = aptr->subalign;
+
+ if (base == 0)
+ base = p->vma ? p->vma : exp_nameop (NAME, ".");
+
+ lang_enter_output_section_statement (p->name, base,
+ p->ok_to_load ? normal_section : noload_section,
+ align, subalign, NULL, 0);
+ base = 0;
+ tmp = (struct wildcard_list *) xmalloc (sizeof *tmp);
+ tmp->next = NULL;
+ tmp->spec.name = p->name;
+ tmp->spec.exclude_name_list = NULL;
+ tmp->spec.sorted = none;
+ lang_add_wild (NULL, tmp, FALSE);
+
+ /* If there is an alias for this section, add it too. */
+ for (aptr = alias; aptr; aptr = aptr->next)
+ if (strcmp (aptr->alias, p->name) == 0)
+ {
+ tmp = (struct wildcard_list *) xmalloc (sizeof *tmp);
+ tmp->next = NULL;
+ tmp->spec.name = aptr->name;
+ tmp->spec.exclude_name_list = NULL;
+ tmp->spec.sorted = none;
+ lang_add_wild (NULL, tmp, FALSE);
+ }
+
+ lang_leave_output_section_statement (0, "*default*", NULL, NULL);
+
+ p = p->next;
+ }
+ }
+
+ done_tree = 1;
+}
+
+void
+mri_load (const char *name)
+{
+ base = 0;
+ lang_add_input_file (name, lang_input_file_is_file_enum, NULL);
+}
+
+void
+mri_order (const char *name)
+{
+ mri_add_to_list (&order, name, 0, 0, 0, 0);
+}
+
+void
+mri_alias (const char *want, const char *is, int isn)
+{
+ if (!is)
+ {
+ char buf[20];
+
+ /* Some sections are digits. */
+ sprintf (buf, "%d", isn);
+
+ is = xstrdup (buf);
+
+ if (is == NULL)
+ abort ();
+ }
+
+ mri_add_to_list (&alias, is, 0, want, 0, 0);
+}
+
+void
+mri_name (const char *name)
+{
+ lang_add_output (name, 1);
+}
+
+void
+mri_format (const char *name)
+{
+ if (strcmp (name, "S") == 0)
+ lang_add_output_format ("srec", NULL, NULL, 1);
+
+ else if (strcmp (name, "IEEE") == 0)
+ lang_add_output_format ("ieee", NULL, NULL, 1);
+
+ else if (strcmp (name, "COFF") == 0)
+ lang_add_output_format ("coff-m68k", NULL, NULL, 1);
+
+ else
+ einfo (_("%P%F: unknown format type %s\n"), name);
+}
+
+void
+mri_public (const char *name, etree_type *exp)
+{
+ lang_add_assignment (exp_assop ('=', name, exp));
+}
+
+void
+mri_align (const char *name, etree_type *exp)
+{
+ mri_add_to_list (&alignment, name, 0, 0, exp, 0);
+}
+
+void
+mri_alignmod (const char *name, etree_type *exp)
+{
+ mri_add_to_list (&subalignment, name, 0, 0, 0, exp);
+}
+
+void
+mri_truncate (unsigned int exp)
+{
+ symbol_truncate = exp;
+}
diff --git a/binutils-2.21/ld/mri.h b/binutils-2.21/ld/mri.h
new file mode 100644
index 0000000..24dd322
--- /dev/null
+++ b/binutils-2.21/ld/mri.h
@@ -0,0 +1,38 @@
+/* mri.h -- header file for MRI scripting functions
+ Copyright 1993, 1995, 1996, 2003, 2005, 2007 Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef MRI_H
+#define MRI_H
+
+extern void mri_output_section (const char *, etree_type *);
+extern void mri_only_load (const char *);
+extern void mri_base (etree_type *);
+extern void mri_load (const char *);
+extern void mri_order (const char *);
+extern void mri_alias (const char *, const char *, int);
+extern void mri_name (const char *);
+extern void mri_format (const char *);
+extern void mri_public (const char *, etree_type *);
+extern void mri_align (const char *, etree_type *);
+extern void mri_alignmod (const char *, etree_type *);
+extern void mri_truncate (unsigned int);
+extern void mri_draw_tree (void);
+
+#endif
diff --git a/binutils-2.21/ld/pe-dll.c b/binutils-2.21/ld/pe-dll.c
new file mode 100644
index 0000000..9d3ee5d
--- /dev/null
+++ b/binutils-2.21/ld/pe-dll.c
@@ -0,0 +1,3272 @@
+/* Routines to help build PEI-format DLLs (Win32 etc)
+ Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
+ 2008, 2009, 2010 Free Software Foundation, Inc.
+ Written by DJ Delorie <dj@cygnus.com>
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+#include "libiberty.h"
+#include "safe-ctype.h"
+
+#include <time.h>
+
+#include "ld.h"
+#include "ldexp.h"
+#include "ldlang.h"
+#include "ldwrite.h"
+#include "ldmisc.h"
+#include <ldgram.h>
+#include "ldmain.h"
+#include "ldfile.h"
+#include "ldemul.h"
+#include "coff/internal.h"
+#include "../bfd/libcoff.h"
+#include "deffile.h"
+
+#ifdef pe_use_x86_64
+
+#define PE_IDATA4_SIZE 8
+#define PE_IDATA5_SIZE 8
+#include "pep-dll.h"
+#undef AOUTSZ
+#define AOUTSZ PEPAOUTSZ
+#define PEAOUTHDR PEPAOUTHDR
+
+#else
+
+#include "pe-dll.h"
+
+#endif
+
+#ifndef PE_IDATA4_SIZE
+#define PE_IDATA4_SIZE 4
+#endif
+
+#ifndef PE_IDATA5_SIZE
+#define PE_IDATA5_SIZE 4
+#endif
+
+/* This file turns a regular Windows PE image into a DLL. Because of
+ the complexity of this operation, it has been broken down into a
+ number of separate modules which are all called by the main function
+ at the end of this file. This function is not re-entrant and is
+ normally only called once, so static variables are used to reduce
+ the number of parameters and return values required.
+
+ See also: ld/emultempl/pe.em and ld/emultempl/pep.em. */
+
+/* Auto-import feature by Paul Sokolovsky
+
+ Quick facts:
+
+ 1. With this feature on, DLL clients can import variables from DLL
+ without any concern from their side (for example, without any source
+ code modifications).
+
+ 2. This is done completely in bounds of the PE specification (to be fair,
+ there's a place where it pokes nose out of, but in practice it works).
+ So, resulting module can be used with any other PE compiler/linker.
+
+ 3. Auto-import is fully compatible with standard import method and they
+ can be mixed together.
+
+ 4. Overheads: space: 8 bytes per imported symbol, plus 20 for each
+ reference to it; load time: negligible; virtual/physical memory: should be
+ less than effect of DLL relocation, and I sincerely hope it doesn't affect
+ DLL sharability (too much).
+
+ Idea
+
+ The obvious and only way to get rid of dllimport insanity is to make client
+ access variable directly in the DLL, bypassing extra dereference. I.e.,
+ whenever client contains something like
+
+ mov dll_var,%eax,
+
+ address of dll_var in the command should be relocated to point into loaded
+ DLL. The aim is to make OS loader do so, and than make ld help with that.
+ Import section of PE made following way: there's a vector of structures
+ each describing imports from particular DLL. Each such structure points
+ to two other parallel vectors: one holding imported names, and one which
+ will hold address of corresponding imported name. So, the solution is
+ de-vectorize these structures, making import locations be sparse and
+ pointing directly into code. Before continuing, it is worth a note that,
+ while authors strives to make PE act ELF-like, there're some other people
+ make ELF act PE-like: elfvector, ;-) .
+
+ Implementation
+
+ For each reference of data symbol to be imported from DLL (to set of which
+ belong symbols with name <sym>, if __imp_<sym> is found in implib), the
+ import fixup entry is generated. That entry is of type
+ IMAGE_IMPORT_DESCRIPTOR and stored in .idata$2 subsection. Each
+ fixup entry contains pointer to symbol's address within .text section
+ (marked with __fuN_<sym> symbol, where N is integer), pointer to DLL name
+ (so, DLL name is referenced by multiple entries), and pointer to symbol
+ name thunk. Symbol name thunk is singleton vector (__nm_th_<symbol>)
+ pointing to IMAGE_IMPORT_BY_NAME structure (__nm_<symbol>) directly
+ containing imported name. Here comes that "on the edge" problem mentioned
+ above: PE specification rambles that name vector (OriginalFirstThunk)
+ should run in parallel with addresses vector (FirstThunk), i.e. that they
+ should have same number of elements and terminated with zero. We violate
+ this, since FirstThunk points directly into machine code. But in practice,
+ OS loader implemented the sane way: it goes thru OriginalFirstThunk and
+ puts addresses to FirstThunk, not something else. It once again should be
+ noted that dll and symbol name structures are reused across fixup entries
+ and should be there anyway to support standard import stuff, so sustained
+ overhead is 20 bytes per reference. Other question is whether having several
+ IMAGE_IMPORT_DESCRIPTORS for the same DLL is possible. Answer is yes, it is
+ done even by native compiler/linker (libth32's functions are in fact reside
+ in windows9x kernel32.dll, so if you use it, you have two
+ IMAGE_IMPORT_DESCRIPTORS for kernel32.dll). Yet other question is whether
+ referencing the same PE structures several times is valid. The answer is why
+ not, prohibiting that (detecting violation) would require more work on
+ behalf of loader than not doing it.
+
+ See also: ld/emultempl/pe.em and ld/emultempl/pep.em. */
+
+static void add_bfd_to_link (bfd *, const char *, struct bfd_link_info *);
+
+/* For emultempl/pe.em. */
+
+def_file * pe_def_file = 0;
+int pe_dll_export_everything = 0;
+int pe_dll_exclude_all_symbols = 0;
+int pe_dll_do_default_excludes = 1;
+int pe_dll_kill_ats = 0;
+int pe_dll_stdcall_aliases = 0;
+int pe_dll_warn_dup_exports = 0;
+int pe_dll_compat_implib = 0;
+int pe_dll_extra_pe_debug = 0;
+int pe_use_nul_prefixed_import_tables = 0;
+int pe_use_coff_long_section_names = -1;
+int pe_leading_underscore = -1;
+
+/* Static variables and types. */
+
+static bfd_vma image_base;
+static bfd *filler_bfd;
+static struct bfd_section *edata_s, *reloc_s;
+static unsigned char *edata_d, *reloc_d;
+static size_t edata_sz, reloc_sz;
+static int runtime_pseudo_relocs_created = 0;
+static int runtime_pseudp_reloc_v2_init = 0;
+
+typedef struct
+{
+ const char *name;
+ int len;
+}
+autofilter_entry_type;
+
+typedef struct
+{
+ const char *target_name;
+ const char *object_target;
+ unsigned int imagebase_reloc;
+ int pe_arch;
+ int bfd_arch;
+ bfd_boolean underscored;
+ const autofilter_entry_type* autofilter_symbollist;
+}
+pe_details_type;
+
+static const autofilter_entry_type autofilter_symbollist_generic[] =
+{
+ { STRING_COMMA_LEN ("_NULL_IMPORT_DESCRIPTOR") },
+ /* Entry point symbols. */
+ { STRING_COMMA_LEN ("DllMain") },
+ { STRING_COMMA_LEN ("DllMainCRTStartup") },
+ { STRING_COMMA_LEN ("_DllMainCRTStartup") },
+ /* Runtime pseudo-reloc. */
+ { STRING_COMMA_LEN ("_pei386_runtime_relocator") },
+ { STRING_COMMA_LEN ("do_pseudo_reloc") },
+ { NULL, 0 }
+};
+
+static const autofilter_entry_type autofilter_symbollist_i386[] =
+{
+ { STRING_COMMA_LEN ("_NULL_IMPORT_DESCRIPTOR") },
+ /* Entry point symbols, and entry hooks. */
+ { STRING_COMMA_LEN ("cygwin_crt0") },
+#ifdef pe_use_x86_64
+ { STRING_COMMA_LEN ("DllMain") },
+ { STRING_COMMA_LEN ("DllEntryPoint") },
+ { STRING_COMMA_LEN ("DllMainCRTStartup") },
+ { STRING_COMMA_LEN ("_cygwin_dll_entry") },
+ { STRING_COMMA_LEN ("_cygwin_crt0_common") },
+ { STRING_COMMA_LEN ("_cygwin_noncygwin_dll_entry") },
+#else
+ { STRING_COMMA_LEN ("DllMain@12") },
+ { STRING_COMMA_LEN ("DllEntryPoint@0") },
+ { STRING_COMMA_LEN ("DllMainCRTStartup@12") },
+ { STRING_COMMA_LEN ("_cygwin_dll_entry@12") },
+ { STRING_COMMA_LEN ("_cygwin_crt0_common@8") },
+ { STRING_COMMA_LEN ("_cygwin_noncygwin_dll_entry@12") },
+ { STRING_COMMA_LEN ("cygwin_attach_dll") },
+#endif
+ { STRING_COMMA_LEN ("cygwin_premain0") },
+ { STRING_COMMA_LEN ("cygwin_premain1") },
+ { STRING_COMMA_LEN ("cygwin_premain2") },
+ { STRING_COMMA_LEN ("cygwin_premain3") },
+ /* Runtime pseudo-reloc. */
+ { STRING_COMMA_LEN ("_pei386_runtime_relocator") },
+ { STRING_COMMA_LEN ("do_pseudo_reloc") },
+ /* Global vars that should not be exported. */
+ { STRING_COMMA_LEN ("impure_ptr") },
+ { STRING_COMMA_LEN ("_impure_ptr") },
+ { STRING_COMMA_LEN ("_fmode") },
+ { STRING_COMMA_LEN ("environ") },
+ { NULL, 0 }
+};
+
+#define PE_ARCH_i386 1
+#define PE_ARCH_sh 2
+#define PE_ARCH_mips 3
+#define PE_ARCH_arm 4
+#define PE_ARCH_arm_epoc 5
+#define PE_ARCH_arm_wince 6
+
+/* Don't make it constant as underscore mode gets possibly overriden
+ by target or -(no-)leading-underscore option. */
+static pe_details_type pe_detail_list[] =
+{
+ {
+#ifdef pe_use_x86_64
+ "pei-x86-64",
+ "pe-x86-64",
+ 3 /* R_IMAGEBASE */,
+#else
+ "pei-i386",
+ "pe-i386",
+ 7 /* R_IMAGEBASE */,
+#endif
+ PE_ARCH_i386,
+ bfd_arch_i386,
+#ifdef pe_use_x86_64
+ FALSE,
+#else
+ TRUE,
+#endif
+ autofilter_symbollist_i386
+ },
+ {
+ "pei-shl",
+ "pe-shl",
+ 16 /* R_SH_IMAGEBASE */,
+ PE_ARCH_sh,
+ bfd_arch_sh,
+ TRUE,
+ autofilter_symbollist_generic
+ },
+ {
+ "pei-mips",
+ "pe-mips",
+ 34 /* MIPS_R_RVA */,
+ PE_ARCH_mips,
+ bfd_arch_mips,
+ FALSE,
+ autofilter_symbollist_generic
+ },
+ {
+ "pei-arm-little",
+ "pe-arm-little",
+ 11 /* ARM_RVA32 */,
+ PE_ARCH_arm,
+ bfd_arch_arm,
+ TRUE,
+ autofilter_symbollist_generic
+ },
+ {
+ "epoc-pei-arm-little",
+ "epoc-pe-arm-little",
+ 11 /* ARM_RVA32 */,
+ PE_ARCH_arm_epoc,
+ bfd_arch_arm,
+ FALSE,
+ autofilter_symbollist_generic
+ },
+ {
+ "pei-arm-wince-little",
+ "pe-arm-wince-little",
+ 2, /* ARM_RVA32 on Windows CE, see bfd/coff-arm.c. */
+ PE_ARCH_arm_wince,
+ bfd_arch_arm,
+ FALSE,
+ autofilter_symbollist_generic
+ },
+ { NULL, NULL, 0, 0, 0, FALSE, NULL }
+};
+
+static const pe_details_type *pe_details;
+
+/* Do not specify library suffix explicitly, to allow for dllized versions. */
+static const autofilter_entry_type autofilter_liblist[] =
+{
+ { STRING_COMMA_LEN ("libcegcc") },
+ { STRING_COMMA_LEN ("libcygwin") },
+ { STRING_COMMA_LEN ("libgcc") },
+ { STRING_COMMA_LEN ("libgcc_s") },
+ { STRING_COMMA_LEN ("libstdc++") },
+ { STRING_COMMA_LEN ("libmingw32") },
+ { STRING_COMMA_LEN ("libmingwex") },
+ { STRING_COMMA_LEN ("libg2c") },
+ { STRING_COMMA_LEN ("libsupc++") },
+ { STRING_COMMA_LEN ("libobjc") },
+ { STRING_COMMA_LEN ("libgcj") },
+ { NULL, 0 }
+};
+
+/* Regardless of the suffix issue mentioned above, we must ensure that
+ we do not falsely match on a leading substring, such as when libtool
+ builds libstdc++ as a DLL using libsupc++convenience.a as an intermediate.
+ This routine ensures that the leading part of the name matches and that
+ it is followed by only an optional version suffix and a file extension,
+ returning zero if so or -1 if not. */
+static int libnamencmp (const char *libname, const autofilter_entry_type *afptr)
+{
+ if (strncmp (libname, afptr->name, afptr->len))
+ return -1;
+
+ libname += afptr->len;
+
+ /* Be liberal in interpreting what counts as a version suffix; we
+ accept anything that has a dash to separate it from the name and
+ begins with a digit. */
+ if (libname[0] == '-')
+ {
+ if (!ISDIGIT (*++libname))
+ return -1;
+ /* Ensure the filename has an extension. */
+ while (*++libname != '.')
+ if (!*libname)
+ return -1;
+ }
+ else if (libname[0] != '.')
+ return -1;
+
+ return 0;
+}
+
+static const autofilter_entry_type autofilter_objlist[] =
+{
+ { STRING_COMMA_LEN ("crt0.o") },
+ { STRING_COMMA_LEN ("crt1.o") },
+ { STRING_COMMA_LEN ("crt2.o") },
+ { STRING_COMMA_LEN ("dllcrt1.o") },
+ { STRING_COMMA_LEN ("dllcrt2.o") },
+ { STRING_COMMA_LEN ("gcrt0.o") },
+ { STRING_COMMA_LEN ("gcrt1.o") },
+ { STRING_COMMA_LEN ("gcrt2.o") },
+ { STRING_COMMA_LEN ("crtbegin.o") },
+ { STRING_COMMA_LEN ("crtend.o") },
+ { NULL, 0 }
+};
+
+static const autofilter_entry_type autofilter_symbolprefixlist[] =
+{
+ /* _imp_ is treated specially, as it is always underscored. */
+ /* { STRING_COMMA_LEN ("_imp_") }, */
+ /* Don't export some c++ symbols. */
+ { STRING_COMMA_LEN ("__rtti_") },
+ { STRING_COMMA_LEN ("__builtin_") },
+ /* Don't re-export auto-imported symbols. */
+ { STRING_COMMA_LEN ("__nm_") },
+ /* Don't export symbols specifying internal DLL layout. */
+ { STRING_COMMA_LEN ("_head_") },
+ { STRING_COMMA_LEN ("_IMPORT_DESCRIPTOR_") },
+ /* Don't export section labels or artificial symbols
+ (eg ".weak.foo". */
+ { STRING_COMMA_LEN (".") },
+ { NULL, 0 }
+};
+
+static const autofilter_entry_type autofilter_symbolsuffixlist[] =
+{
+ { STRING_COMMA_LEN ("_iname") },
+ { STRING_COMMA_LEN ("_NULL_THUNK_DATA") },
+ { NULL, 0 }
+};
+
+#define U(str) (pe_details->underscored ? "_" str : str)
+
+void
+pe_dll_id_target (const char *target)
+{
+ int i;
+
+ for (i = 0; pe_detail_list[i].target_name; i++)
+ if (strcmp (pe_detail_list[i].target_name, target) == 0
+ || strcmp (pe_detail_list[i].object_target, target) == 0)
+ {
+ int u = pe_leading_underscore; /* Underscoring mode. -1 for use default. */
+ if (u == -1)
+ bfd_get_target_info (target, NULL, NULL, &u, NULL);
+ if (u == -1)
+ abort ();
+ pe_detail_list[i].underscored = (u != 0 ? TRUE : FALSE);
+ pe_details = pe_detail_list + i;
+ pe_leading_underscore = (u != 0 ? 1 : 0);
+ return;
+ }
+ einfo (_("%XUnsupported PEI architecture: %s\n"), target);
+ exit (1);
+}
+
+/* Helper functions for qsort. Relocs must be sorted so that we can write
+ them out by pages. */
+
+typedef struct
+ {
+ bfd_vma vma;
+ char type;
+ short extra;
+ }
+reloc_data_type;
+
+static int
+reloc_sort (const void *va, const void *vb)
+{
+ bfd_vma a = ((const reloc_data_type *) va)->vma;
+ bfd_vma b = ((const reloc_data_type *) vb)->vma;
+
+ return (a > b) ? 1 : ((a < b) ? -1 : 0);
+}
+
+static int
+pe_export_sort (const void *va, const void *vb)
+{
+ const def_file_export *a = va;
+ const def_file_export *b = vb;
+ char *an = a->name;
+ char *bn = b->name;
+ if (a->its_name)
+ an = a->its_name;
+ if (b->its_name)
+ bn = b->its_name;
+
+ return strcmp (an, bn);
+}
+
+/* Read and process the .DEF file. */
+
+/* These correspond to the entries in pe_def_file->exports[]. I use
+ exported_symbol_sections[i] to tag whether or not the symbol was
+ defined, since we can't export symbols we don't have. */
+
+static bfd_vma *exported_symbol_offsets;
+static struct bfd_section **exported_symbol_sections;
+static int export_table_size;
+static int count_exported;
+static int count_exported_byname;
+static int count_with_ordinals;
+static const char *dll_name;
+static int min_ordinal, max_ordinal;
+static int *exported_symbols;
+
+typedef struct exclude_list_struct
+ {
+ char *string;
+ struct exclude_list_struct *next;
+ exclude_type type;
+ }
+exclude_list_struct;
+
+static struct exclude_list_struct *excludes = 0;
+
+void
+pe_dll_add_excludes (const char *new_excludes, const exclude_type type)
+{
+ char *local_copy;
+ char *exclude_string;
+
+ local_copy = xstrdup (new_excludes);
+
+ exclude_string = strtok (local_copy, ",:");
+ for (; exclude_string; exclude_string = strtok (NULL, ",:"))
+ {
+ struct exclude_list_struct *new_exclude;
+
+ new_exclude = xmalloc (sizeof (struct exclude_list_struct));
+ new_exclude->string = xmalloc (strlen (exclude_string) + 1);
+ strcpy (new_exclude->string, exclude_string);
+ new_exclude->type = type;
+ new_exclude->next = excludes;
+ excludes = new_exclude;
+ }
+
+ free (local_copy);
+}
+
+static bfd_boolean
+is_import (const char* n)
+{
+ return (CONST_STRNEQ (n, "__imp_"));
+}
+
+/* abfd is a bfd containing n (or NULL)
+ It can be used for contextual checks. */
+
+static int
+auto_export (bfd *abfd, def_file *d, const char *n)
+{
+ int i;
+ struct exclude_list_struct *ex;
+ const autofilter_entry_type *afptr;
+ const char * libname = 0;
+ if (abfd && abfd->my_archive)
+ libname = lbasename (abfd->my_archive->filename);
+
+ for (i = 0; i < d->num_exports; i++)
+ if (strcmp (d->exports[i].name, n) == 0)
+ return 0;
+
+ if (pe_dll_do_default_excludes)
+ {
+ const char * p;
+ int len;
+
+ if (pe_dll_extra_pe_debug)
+ printf ("considering exporting: %s, abfd=%p, abfd->my_arc=%p\n",
+ n, abfd, abfd->my_archive);
+
+ /* First of all, make context checks:
+ Don't export anything from standard libs. */
+ if (libname)
+ {
+ afptr = autofilter_liblist;
+
+ while (afptr->name)
+ {
+ if (libnamencmp (libname, afptr) == 0 )
+ return 0;
+ afptr++;
+ }
+ }
+
+ /* Next, exclude symbols from certain startup objects. */
+
+ if (abfd && (p = lbasename (abfd->filename)))
+ {
+ afptr = autofilter_objlist;
+ while (afptr->name)
+ {
+ if (strcmp (p, afptr->name) == 0)
+ return 0;
+ afptr++;
+ }
+ }
+
+ /* Don't try to blindly exclude all symbols
+ that begin with '__'; this was tried and
+ it is too restrictive. Instead we have
+ a target specific list to use: */
+ afptr = pe_details->autofilter_symbollist;
+
+ while (afptr->name)
+ {
+ if (strcmp (n, afptr->name) == 0)
+ return 0;
+
+ afptr++;
+ }
+
+ /* Next, exclude symbols starting with ... */
+ afptr = autofilter_symbolprefixlist;
+ while (afptr->name)
+ {
+ if (strncmp (n, afptr->name, afptr->len) == 0)
+ return 0;
+
+ afptr++;
+ }
+
+ /* Finally, exclude symbols ending with ... */
+ len = strlen (n);
+ afptr = autofilter_symbolsuffixlist;
+ while (afptr->name)
+ {
+ if ((len >= afptr->len)
+ /* Add 1 to insure match with trailing '\0'. */
+ && strncmp (n + len - afptr->len, afptr->name,
+ afptr->len + 1) == 0)
+ return 0;
+
+ afptr++;
+ }
+ }
+
+ for (ex = excludes; ex; ex = ex->next)
+ {
+ if (ex->type == EXCLUDELIBS)
+ {
+ if (libname
+ && ((strcmp (libname, ex->string) == 0)
+ || (strcasecmp ("ALL", ex->string) == 0)))
+ return 0;
+ }
+ else if (ex->type == EXCLUDEFORIMPLIB)
+ {
+ if (strcmp (abfd->filename, ex->string) == 0)
+ return 0;
+ }
+ else if (strcmp (n, ex->string) == 0)
+ return 0;
+ }
+
+ return 1;
+}
+
+static void
+process_def_file_and_drectve (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info *info)
+{
+ int i, j;
+ struct bfd_link_hash_entry *blhe;
+ bfd *b;
+ struct bfd_section *s;
+ def_file_export *e = 0;
+
+ if (!pe_def_file)
+ pe_def_file = def_file_empty ();
+
+ /* First, run around to all the objects looking for the .drectve
+ sections, and push those into the def file too. */
+ for (b = info->input_bfds; b; b = b->link_next)
+ {
+ s = bfd_get_section_by_name (b, ".drectve");
+ if (s)
+ {
+ long size = s->size;
+ char *buf = xmalloc (size);
+
+ bfd_get_section_contents (b, s, buf, 0, size);
+ def_file_add_directive (pe_def_file, buf, size);
+ free (buf);
+ }
+ }
+
+ /* Process aligned common symbol information from the
+ .drectve sections now; common symbol allocation is
+ done before final link, so it will be too late to
+ process them in process_embedded_commands() called
+ from _bfd_coff_link_input_bfd(). */
+ if (pe_def_file->aligncomms)
+ {
+ def_file_aligncomm *ac = pe_def_file->aligncomms;
+ while (ac)
+ {
+ struct coff_link_hash_entry *sym_hash;
+ sym_hash = coff_link_hash_lookup (coff_hash_table (info),
+ ac->symbol_name, FALSE, FALSE, FALSE);
+ if (sym_hash && sym_hash->root.type == bfd_link_hash_common
+ && sym_hash->root.u.c.p->alignment_power < (unsigned) ac->alignment)
+ {
+ sym_hash->root.u.c.p->alignment_power = (unsigned) ac->alignment;
+ }
+ ac = ac->next;
+ }
+ }
+
+ /* If we are building an executable and there is nothing
+ to export, we do not build an export table at all. */
+ if (info->executable && pe_def_file->num_exports == 0
+ && (!pe_dll_export_everything || pe_dll_exclude_all_symbols))
+ return;
+
+ /* Now, maybe export everything else the default way. */
+ if ((pe_dll_export_everything || pe_def_file->num_exports == 0)
+ && !pe_dll_exclude_all_symbols)
+ {
+ for (b = info->input_bfds; b; b = b->link_next)
+ {
+ asymbol **symbols;
+ int nsyms;
+
+ if (!bfd_generic_link_read_symbols (b))
+ {
+ einfo (_("%B%F: could not read symbols: %E\n"), b);
+ return;
+ }
+
+ symbols = bfd_get_outsymbols (b);
+ nsyms = bfd_get_symcount (b);
+
+ for (j = 0; j < nsyms; j++)
+ {
+ /* We should export symbols which are either global or not
+ anything at all. (.bss data is the latter)
+ We should not export undefined symbols. */
+ bfd_boolean would_export = symbols[j]->section != &bfd_und_section
+ && ((symbols[j]->flags & BSF_GLOBAL)
+ || (symbols[j]->flags == 0));
+ if (lang_elf_version_info && would_export)
+ {
+ bfd_boolean hide = 0;
+ char ofs = pe_details->underscored && symbols[j]->name[0] == '_';
+ (void) bfd_find_version_for_sym (lang_elf_version_info,
+ symbols[j]->name + ofs, &hide);
+ would_export = !hide;
+ }
+ if (would_export)
+ {
+ const char *sn = symbols[j]->name;
+
+ /* We should not re-export imported stuff. */
+ {
+ char *name;
+ if (is_import (sn))
+ continue;
+
+ name = xmalloc (strlen ("__imp_") + strlen (sn) + 1);
+ sprintf (name, "%s%s", "__imp_", sn);
+
+ blhe = bfd_link_hash_lookup (info->hash, name,
+ FALSE, FALSE, FALSE);
+ free (name);
+
+ if (blhe && blhe->type == bfd_link_hash_defined)
+ continue;
+ }
+
+ if (pe_details->underscored && *sn == '_')
+ sn++;
+
+ if (auto_export (b, pe_def_file, sn))
+ {
+ def_file_export *p;
+ p=def_file_add_export (pe_def_file, sn, 0, -1, NULL);
+ /* Fill data flag properly, from dlltool.c. */
+ p->flag_data = !(symbols[j]->flags & BSF_FUNCTION);
+ }
+ }
+ }
+ }
+ }
+
+#undef NE
+#define NE pe_def_file->num_exports
+
+ /* Don't create an empty export table. */
+ if (NE == 0)
+ return;
+
+ /* Canonicalize the export list. */
+ if (pe_dll_kill_ats)
+ {
+ for (i = 0; i < NE; i++)
+ {
+ if (strchr (pe_def_file->exports[i].name, '@'))
+ {
+ /* This will preserve internal_name, which may have been
+ pointing to the same memory as name, or might not
+ have. */
+ int lead_at = (*pe_def_file->exports[i].name == '@');
+ char *tmp = xstrdup (pe_def_file->exports[i].name + lead_at);
+ char *tmp_at = strchr (tmp, '@');
+
+ if (tmp_at)
+ *tmp_at = 0;
+ else
+ einfo (_("%XCannot export %s: invalid export name\n"),
+ pe_def_file->exports[i].name);
+ pe_def_file->exports[i].name = tmp;
+ }
+ }
+ }
+
+ if (pe_dll_stdcall_aliases)
+ {
+ for (i = 0; i < NE; i++)
+ {
+ if (is_import (pe_def_file->exports[i].name))
+ continue;
+
+ if (strchr (pe_def_file->exports[i].name, '@'))
+ {
+ int lead_at = (*pe_def_file->exports[i].name == '@');
+ char *tmp = xstrdup (pe_def_file->exports[i].name + lead_at);
+
+ *(strchr (tmp, '@')) = 0;
+ if (auto_export (NULL, pe_def_file, tmp))
+ def_file_add_export (pe_def_file, tmp,
+ pe_def_file->exports[i].internal_name,
+ -1, NULL);
+ else
+ free (tmp);
+ }
+ }
+ }
+
+ /* Convenience, but watch out for it changing. */
+ e = pe_def_file->exports;
+
+ exported_symbol_offsets = xmalloc (NE * sizeof (bfd_vma));
+ exported_symbol_sections = xmalloc (NE * sizeof (struct bfd_section *));
+
+ memset (exported_symbol_sections, 0, NE * sizeof (struct bfd_section *));
+ max_ordinal = 0;
+ min_ordinal = 65536;
+ count_exported = 0;
+ count_exported_byname = 0;
+ count_with_ordinals = 0;
+
+ qsort (pe_def_file->exports, NE, sizeof (pe_def_file->exports[0]),
+ pe_export_sort);
+ for (i = 0, j = 0; i < NE; i++)
+ {
+ if (i > 0 && strcmp (e[i].name, e[i - 1].name) == 0)
+ {
+ /* This is a duplicate. */
+ if (e[j - 1].ordinal != -1
+ && e[i].ordinal != -1
+ && e[j - 1].ordinal != e[i].ordinal)
+ {
+ if (pe_dll_warn_dup_exports)
+ /* xgettext:c-format */
+ einfo (_("%XError, duplicate EXPORT with ordinals: %s (%d vs %d)\n"),
+ e[j - 1].name, e[j - 1].ordinal, e[i].ordinal);
+ }
+ else
+ {
+ if (pe_dll_warn_dup_exports)
+ /* xgettext:c-format */
+ einfo (_("Warning, duplicate EXPORT: %s\n"),
+ e[j - 1].name);
+ }
+
+ if (e[i].ordinal != -1)
+ e[j - 1].ordinal = e[i].ordinal;
+ e[j - 1].flag_private |= e[i].flag_private;
+ e[j - 1].flag_constant |= e[i].flag_constant;
+ e[j - 1].flag_noname |= e[i].flag_noname;
+ e[j - 1].flag_data |= e[i].flag_data;
+ }
+ else
+ {
+ if (i != j)
+ e[j] = e[i];
+ j++;
+ }
+ }
+ pe_def_file->num_exports = j; /* == NE */
+
+ for (i = 0; i < NE; i++)
+ {
+ char *name;
+ name = xmalloc (strlen (pe_def_file->exports[i].internal_name) + 2);
+ if (pe_details->underscored
+ && (*pe_def_file->exports[i].internal_name != '@'))
+ {
+ *name = '_';
+ strcpy (name + 1, pe_def_file->exports[i].internal_name);
+ }
+ else
+ strcpy (name, pe_def_file->exports[i].internal_name);
+
+ blhe = bfd_link_hash_lookup (info->hash,
+ name,
+ FALSE, FALSE, TRUE);
+
+ if (blhe
+ && (blhe->type == bfd_link_hash_defined
+ || (blhe->type == bfd_link_hash_common)))
+ {
+ count_exported++;
+ if (!pe_def_file->exports[i].flag_noname)
+ count_exported_byname++;
+
+ /* Only fill in the sections. The actual offsets are computed
+ in fill_exported_offsets() after common symbols are laid
+ out. */
+ if (blhe->type == bfd_link_hash_defined)
+ exported_symbol_sections[i] = blhe->u.def.section;
+ else
+ exported_symbol_sections[i] = blhe->u.c.p->section;
+
+ if (pe_def_file->exports[i].ordinal != -1)
+ {
+ if (max_ordinal < pe_def_file->exports[i].ordinal)
+ max_ordinal = pe_def_file->exports[i].ordinal;
+ if (min_ordinal > pe_def_file->exports[i].ordinal)
+ min_ordinal = pe_def_file->exports[i].ordinal;
+ count_with_ordinals++;
+ }
+ }
+ /* Check for forward exports. These are indicated in DEF files by an
+ export directive of the form NAME1 = MODULE-NAME.EXTERNAL-NAME
+ but we must take care not to be fooled when the user wants to export
+ a symbol that actually really has a dot in it, so we only check
+ for them here, after real defined symbols have already been matched. */
+ else if (strchr (pe_def_file->exports[i].internal_name, '.'))
+ {
+ count_exported++;
+ if (!pe_def_file->exports[i].flag_noname)
+ count_exported_byname++;
+
+ pe_def_file->exports[i].flag_forward = 1;
+
+ if (pe_def_file->exports[i].ordinal != -1)
+ {
+ if (max_ordinal < pe_def_file->exports[i].ordinal)
+ max_ordinal = pe_def_file->exports[i].ordinal;
+ if (min_ordinal > pe_def_file->exports[i].ordinal)
+ min_ordinal = pe_def_file->exports[i].ordinal;
+ count_with_ordinals++;
+ }
+ }
+ else if (blhe && blhe->type == bfd_link_hash_undefined)
+ {
+ /* xgettext:c-format */
+ einfo (_("%XCannot export %s: symbol not defined\n"),
+ pe_def_file->exports[i].internal_name);
+ }
+ else if (blhe)
+ {
+ /* xgettext:c-format */
+ einfo (_("%XCannot export %s: symbol wrong type (%d vs %d)\n"),
+ pe_def_file->exports[i].internal_name,
+ blhe->type, bfd_link_hash_defined);
+ }
+ else
+ {
+ /* xgettext:c-format */
+ einfo (_("%XCannot export %s: symbol not found\n"),
+ pe_def_file->exports[i].internal_name);
+ }
+ free (name);
+ }
+}
+
+/* Build the bfd that will contain .edata and .reloc sections. */
+
+static void
+build_filler_bfd (int include_edata)
+{
+ lang_input_statement_type *filler_file;
+ filler_file = lang_add_input_file ("dll stuff",
+ lang_input_file_is_fake_enum,
+ NULL);
+ filler_file->the_bfd = filler_bfd = bfd_create ("dll stuff",
+ link_info.output_bfd);
+ if (filler_bfd == NULL
+ || !bfd_set_arch_mach (filler_bfd,
+ bfd_get_arch (link_info.output_bfd),
+ bfd_get_mach (link_info.output_bfd)))
+ {
+ einfo ("%X%P: can not create BFD: %E\n");
+ return;
+ }
+
+ if (include_edata)
+ {
+ edata_s = bfd_make_section_old_way (filler_bfd, ".edata");
+ if (edata_s == NULL
+ || !bfd_set_section_flags (filler_bfd, edata_s,
+ (SEC_HAS_CONTENTS
+ | SEC_ALLOC
+ | SEC_LOAD
+ | SEC_KEEP
+ | SEC_IN_MEMORY)))
+ {
+ einfo ("%X%P: can not create .edata section: %E\n");
+ return;
+ }
+ bfd_set_section_size (filler_bfd, edata_s, edata_sz);
+ }
+
+ reloc_s = bfd_make_section_old_way (filler_bfd, ".reloc");
+ if (reloc_s == NULL
+ || !bfd_set_section_flags (filler_bfd, reloc_s,
+ (SEC_HAS_CONTENTS
+ | SEC_ALLOC
+ | SEC_LOAD
+ | SEC_KEEP
+ | SEC_IN_MEMORY)))
+ {
+ einfo ("%X%P: can not create .reloc section: %E\n");
+ return;
+ }
+
+ bfd_set_section_size (filler_bfd, reloc_s, 0);
+
+ ldlang_add_file (filler_file);
+}
+
+/* Gather all the exported symbols and build the .edata section. */
+
+static void
+generate_edata (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
+{
+ int i, next_ordinal;
+ int name_table_size = 0;
+ const char *dlnp;
+
+ /* First, we need to know how many exported symbols there are,
+ and what the range of ordinals is. */
+ if (pe_def_file->name)
+ dll_name = pe_def_file->name;
+ else
+ {
+ dll_name = abfd->filename;
+
+ for (dlnp = dll_name; *dlnp; dlnp++)
+ if (*dlnp == '\\' || *dlnp == '/' || *dlnp == ':')
+ dll_name = dlnp + 1;
+ }
+
+ if (count_with_ordinals && max_ordinal > count_exported)
+ {
+ if (min_ordinal > max_ordinal - count_exported + 1)
+ min_ordinal = max_ordinal - count_exported + 1;
+ }
+ else
+ {
+ min_ordinal = 1;
+ max_ordinal = count_exported;
+ }
+
+ export_table_size = max_ordinal - min_ordinal + 1;
+ exported_symbols = xmalloc (export_table_size * sizeof (int));
+ for (i = 0; i < export_table_size; i++)
+ exported_symbols[i] = -1;
+
+ /* Now we need to assign ordinals to those that don't have them. */
+ for (i = 0; i < NE; i++)
+ {
+ if (exported_symbol_sections[i] ||
+ pe_def_file->exports[i].flag_forward)
+ {
+ if (pe_def_file->exports[i].ordinal != -1)
+ {
+ int ei = pe_def_file->exports[i].ordinal - min_ordinal;
+ int pi = exported_symbols[ei];
+
+ if (pi != -1)
+ {
+ /* xgettext:c-format */
+ einfo (_("%XError, ordinal used twice: %d (%s vs %s)\n"),
+ pe_def_file->exports[i].ordinal,
+ pe_def_file->exports[i].name,
+ pe_def_file->exports[pi].name);
+ }
+ exported_symbols[ei] = i;
+ }
+ if (pe_def_file->exports[i].its_name)
+ name_table_size += strlen (pe_def_file->exports[i].its_name) + 1;
+ else
+ name_table_size += strlen (pe_def_file->exports[i].name) + 1;
+ }
+
+ /* Reserve space for the forward name. */
+ if (pe_def_file->exports[i].flag_forward)
+ {
+ name_table_size += strlen (pe_def_file->exports[i].internal_name) + 1;
+ }
+ }
+
+ next_ordinal = min_ordinal;
+ for (i = 0; i < NE; i++)
+ if ((exported_symbol_sections[i] ||
+ pe_def_file->exports[i].flag_forward) &&
+ pe_def_file->exports[i].ordinal == -1)
+ {
+ while (exported_symbols[next_ordinal - min_ordinal] != -1)
+ next_ordinal++;
+
+ exported_symbols[next_ordinal - min_ordinal] = i;
+ pe_def_file->exports[i].ordinal = next_ordinal;
+ }
+
+ /* OK, now we can allocate some memory. */
+ edata_sz = (40 /* directory */
+ + 4 * export_table_size /* addresses */
+ + 4 * count_exported_byname /* name ptrs */
+ + 2 * count_exported_byname /* ordinals */
+ + name_table_size + strlen (dll_name) + 1);
+}
+
+/* Fill the exported symbol offsets. The preliminary work has already
+ been done in process_def_file_and_drectve(). */
+
+static void
+fill_exported_offsets (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info *info)
+{
+ int i;
+ struct bfd_link_hash_entry *blhe;
+
+ for (i = 0; i < pe_def_file->num_exports; i++)
+ {
+ char *name;
+
+ name = xmalloc (strlen (pe_def_file->exports[i].internal_name) + 2);
+ if (pe_details->underscored
+ && *pe_def_file->exports[i].internal_name != '@')
+ {
+ *name = '_';
+ strcpy (name + 1, pe_def_file->exports[i].internal_name);
+ }
+ else
+ strcpy (name, pe_def_file->exports[i].internal_name);
+
+ blhe = bfd_link_hash_lookup (info->hash,
+ name,
+ FALSE, FALSE, TRUE);
+
+ if (blhe && blhe->type == bfd_link_hash_defined)
+ exported_symbol_offsets[i] = blhe->u.def.value;
+
+ free (name);
+ }
+}
+
+static void
+fill_edata (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
+{
+ int s, hint;
+ unsigned char *edirectory;
+ unsigned char *eaddresses;
+ unsigned char *enameptrs;
+ unsigned char *eordinals;
+ char *enamestr;
+ time_t now;
+
+ time (&now);
+
+ edata_d = xmalloc (edata_sz);
+
+ /* Note use of array pointer math here. */
+ edirectory = edata_d;
+ eaddresses = edirectory + 40;
+ enameptrs = eaddresses + 4 * export_table_size;
+ eordinals = enameptrs + 4 * count_exported_byname;
+ enamestr = (char *) eordinals + 2 * count_exported_byname;
+
+#define ERVA(ptr) (((unsigned char *)(ptr) - edata_d) \
+ + edata_s->output_section->vma - image_base)
+
+ memset (edata_d, 0, edata_sz);
+ bfd_put_32 (abfd, now, edata_d + 4);
+ if (pe_def_file->version_major != -1)
+ {
+ bfd_put_16 (abfd, pe_def_file->version_major, edata_d + 8);
+ bfd_put_16 (abfd, pe_def_file->version_minor, edata_d + 10);
+ }
+
+ bfd_put_32 (abfd, ERVA (enamestr), edata_d + 12);
+ strcpy (enamestr, dll_name);
+ enamestr += strlen (enamestr) + 1;
+ bfd_put_32 (abfd, min_ordinal, edata_d + 16);
+ bfd_put_32 (abfd, export_table_size, edata_d + 20);
+ bfd_put_32 (abfd, count_exported_byname, edata_d + 24);
+ bfd_put_32 (abfd, ERVA (eaddresses), edata_d + 28);
+ bfd_put_32 (abfd, ERVA (enameptrs), edata_d + 32);
+ bfd_put_32 (abfd, ERVA (eordinals), edata_d + 36);
+
+ fill_exported_offsets (abfd, info);
+
+ /* Ok, now for the filling in part.
+ Scan alphabetically - ie the ordering in the exports[] table,
+ rather than by ordinal - the ordering in the exported_symbol[]
+ table. See dlltool.c and:
+ http://sources.redhat.com/ml/binutils/2003-04/msg00379.html
+ for more information. */
+ hint = 0;
+ for (s = 0; s < NE; s++)
+ {
+ struct bfd_section *ssec = exported_symbol_sections[s];
+ if (pe_def_file->exports[s].ordinal != -1 &&
+ (pe_def_file->exports[s].flag_forward || ssec != NULL))
+ {
+ int ord = pe_def_file->exports[s].ordinal;
+
+ if (pe_def_file->exports[s].flag_forward)
+ {
+ bfd_put_32 (abfd, ERVA (enamestr),
+ eaddresses + 4 * (ord - min_ordinal));
+
+ strcpy (enamestr, pe_def_file->exports[s].internal_name);
+ enamestr += strlen (pe_def_file->exports[s].internal_name) + 1;
+ }
+ else
+ {
+ bfd_vma srva = (exported_symbol_offsets[s]
+ + ssec->output_section->vma
+ + ssec->output_offset);
+
+ bfd_put_32 (abfd, srva - image_base,
+ eaddresses + 4 * (ord - min_ordinal));
+ }
+
+ if (!pe_def_file->exports[s].flag_noname)
+ {
+ char *ename = pe_def_file->exports[s].name;
+ if (pe_def_file->exports[s].its_name)
+ ename = pe_def_file->exports[s].its_name;
+
+ bfd_put_32 (abfd, ERVA (enamestr), enameptrs);
+ enameptrs += 4;
+ strcpy (enamestr, ename);
+ enamestr += strlen (enamestr) + 1;
+ bfd_put_16 (abfd, ord - min_ordinal, eordinals);
+ eordinals += 2;
+ pe_def_file->exports[s].hint = hint++;
+ }
+ }
+ }
+}
+
+
+static struct bfd_section *current_sec;
+
+void
+pe_walk_relocs_of_symbol (struct bfd_link_info *info,
+ const char *name,
+ int (*cb) (arelent *, asection *))
+{
+ bfd *b;
+ asection *s;
+
+ for (b = info->input_bfds; b; b = b->link_next)
+ {
+ asymbol **symbols;
+
+ if (!bfd_generic_link_read_symbols (b))
+ {
+ einfo (_("%B%F: could not read symbols: %E\n"), b);
+ return;
+ }
+
+ symbols = bfd_get_outsymbols (b);
+
+ for (s = b->sections; s; s = s->next)
+ {
+ arelent **relocs;
+ int relsize, nrelocs, i;
+ int flags = bfd_get_section_flags (b, s);
+
+ /* Skip discarded linkonce sections. */
+ if (flags & SEC_LINK_ONCE
+ && s->output_section == bfd_abs_section_ptr)
+ continue;
+
+ current_sec = s;
+
+ relsize = bfd_get_reloc_upper_bound (b, s);
+ relocs = xmalloc (relsize);
+ nrelocs = bfd_canonicalize_reloc (b, s, relocs, symbols);
+
+ for (i = 0; i < nrelocs; i++)
+ {
+ struct bfd_symbol *sym = *relocs[i]->sym_ptr_ptr;
+
+ if (!strcmp (name, sym->name))
+ cb (relocs[i], s);
+ }
+
+ free (relocs);
+
+ /* Warning: the allocated symbols are remembered in BFD and reused
+ later, so don't free them! */
+ /* free (symbols); */
+ }
+ }
+}
+
+/* Gather all the relocations and build the .reloc section. */
+
+static void
+generate_reloc (bfd *abfd, struct bfd_link_info *info)
+{
+
+ /* For .reloc stuff. */
+ reloc_data_type *reloc_data;
+ int total_relocs = 0;
+ int i;
+ bfd_vma sec_page = (bfd_vma) -1;
+ bfd_vma page_ptr, page_count;
+ int bi;
+ bfd *b;
+ struct bfd_section *s;
+
+ total_relocs = 0;
+ for (b = info->input_bfds; b; b = b->link_next)
+ for (s = b->sections; s; s = s->next)
+ total_relocs += s->reloc_count;
+
+ reloc_data = xmalloc (total_relocs * sizeof (reloc_data_type));
+
+ total_relocs = 0;
+ bi = 0;
+ for (bi = 0, b = info->input_bfds; b; bi++, b = b->link_next)
+ {
+ arelent **relocs;
+ int relsize, nrelocs;
+
+ for (s = b->sections; s; s = s->next)
+ {
+ bfd_vma sec_vma = s->output_section->vma + s->output_offset;
+ asymbol **symbols;
+
+ /* If it's not loaded, we don't need to relocate it this way. */
+ if (!(s->output_section->flags & SEC_LOAD))
+ continue;
+
+ /* I don't know why there would be a reloc for these, but I've
+ seen it happen - DJ */
+ if (s->output_section == &bfd_abs_section)
+ continue;
+
+ if (s->output_section->vma == 0)
+ {
+ /* Huh? Shouldn't happen, but punt if it does. */
+ einfo ("DJ: zero vma section reloc detected: `%s' #%d f=%d\n",
+ s->output_section->name, s->output_section->index,
+ s->output_section->flags);
+ continue;
+ }
+
+ if (!bfd_generic_link_read_symbols (b))
+ {
+ einfo (_("%B%F: could not read symbols: %E\n"), b);
+ return;
+ }
+
+ symbols = bfd_get_outsymbols (b);
+ relsize = bfd_get_reloc_upper_bound (b, s);
+ relocs = xmalloc (relsize);
+ nrelocs = bfd_canonicalize_reloc (b, s, relocs, symbols);
+
+ for (i = 0; i < nrelocs; i++)
+ {
+ if (pe_dll_extra_pe_debug)
+ {
+ struct bfd_symbol *sym = *relocs[i]->sym_ptr_ptr;
+ printf ("rel: %s\n", sym->name);
+ }
+ if (!relocs[i]->howto->pc_relative
+ && relocs[i]->howto->type != pe_details->imagebase_reloc)
+ {
+ struct bfd_symbol *sym = *relocs[i]->sym_ptr_ptr;
+
+ /* Don't create relocs for undefined weak symbols. */
+ if (sym->flags == BSF_WEAK)
+ {
+ struct bfd_link_hash_entry *blhe
+ = bfd_wrapped_link_hash_lookup (abfd, info, sym->name,
+ FALSE, FALSE, FALSE);
+ if (blhe && blhe->type == bfd_link_hash_undefweak)
+ {
+ /* Check aux sym and see if it is defined or not. */
+ struct coff_link_hash_entry *h, *h2;
+ h = (struct coff_link_hash_entry *)blhe;
+ if (h->symbol_class != C_NT_WEAK || h->numaux != 1)
+ continue;
+ h2 = h->auxbfd->tdata.coff_obj_data->sym_hashes
+ [h->aux->x_sym.x_tagndx.l];
+ /* We don't want a base reloc if the aux sym is not
+ found, undefined, or if it is the constant ABS
+ zero default value. (We broaden that slightly by
+ not testing the value, just the section; there's
+ no reason we'd want a reference to any absolute
+ address to get relocated during rebasing). */
+ if (!h2 || h2->root.type == bfd_link_hash_undefined
+ || h2->root.u.def.section == &bfd_abs_section)
+ continue;
+ }
+ else if (!blhe || blhe->type != bfd_link_hash_defined)
+ continue;
+ }
+
+ reloc_data[total_relocs].vma = sec_vma + relocs[i]->address;
+
+#define BITS_AND_SHIFT(bits, shift) (bits * 1000 | shift)
+
+ switch BITS_AND_SHIFT (relocs[i]->howto->bitsize,
+ relocs[i]->howto->rightshift)
+ {
+#ifdef pe_use_x86_64
+ case BITS_AND_SHIFT (64, 0):
+ reloc_data[total_relocs].type = 10;
+ total_relocs++;
+ break;
+#endif
+ case BITS_AND_SHIFT (32, 0):
+ reloc_data[total_relocs].type = 3;
+ total_relocs++;
+ break;
+ case BITS_AND_SHIFT (16, 0):
+ reloc_data[total_relocs].type = 2;
+ total_relocs++;
+ break;
+ case BITS_AND_SHIFT (16, 16):
+ reloc_data[total_relocs].type = 4;
+ /* FIXME: we can't know the symbol's right value
+ yet, but we probably can safely assume that
+ CE will relocate us in 64k blocks, so leaving
+ it zero is safe. */
+ reloc_data[total_relocs].extra = 0;
+ total_relocs++;
+ break;
+ case BITS_AND_SHIFT (26, 2):
+ reloc_data[total_relocs].type = 5;
+ total_relocs++;
+ break;
+ case BITS_AND_SHIFT (24, 2):
+ /* FIXME: 0 is ARM_26D, it is defined in bfd/coff-arm.c
+ Those ARM_xxx definitions should go in proper
+ header someday. */
+ if (relocs[i]->howto->type == 0
+ /* Older GNU linkers used 5 instead of 0 for this reloc. */
+ || relocs[i]->howto->type == 5)
+ /* This is an ARM_26D reloc, which is an ARM_26 reloc
+ that has already been fully processed during a
+ previous link stage, so ignore it here. */
+ break;
+ /* Fall through. */
+ default:
+ /* xgettext:c-format */
+ einfo (_("%XError: %d-bit reloc in dll\n"),
+ relocs[i]->howto->bitsize);
+ break;
+ }
+ }
+ }
+ free (relocs);
+ /* Warning: the allocated symbols are remembered in BFD and
+ reused later, so don't free them! */
+ }
+ }
+
+ /* At this point, we have total_relocs relocation addresses in
+ reloc_addresses, which are all suitable for the .reloc section.
+ We must now create the new sections. */
+ qsort (reloc_data, total_relocs, sizeof (*reloc_data), reloc_sort);
+
+ for (i = 0; i < total_relocs; i++)
+ {
+ bfd_vma this_page = (reloc_data[i].vma >> 12);
+
+ if (this_page != sec_page)
+ {
+ reloc_sz = (reloc_sz + 3) & ~3; /* 4-byte align. */
+ reloc_sz += 8;
+ sec_page = this_page;
+ }
+
+ reloc_sz += 2;
+
+ if (reloc_data[i].type == 4)
+ reloc_sz += 2;
+ }
+
+ reloc_sz = (reloc_sz + 3) & ~3; /* 4-byte align. */
+ reloc_d = xmalloc (reloc_sz);
+ sec_page = (bfd_vma) -1;
+ reloc_sz = 0;
+ page_ptr = (bfd_vma) -1;
+ page_count = 0;
+
+ for (i = 0; i < total_relocs; i++)
+ {
+ bfd_vma rva = reloc_data[i].vma - image_base;
+ bfd_vma this_page = (rva & ~0xfff);
+
+ if (this_page != sec_page)
+ {
+ while (reloc_sz & 3)
+ reloc_d[reloc_sz++] = 0;
+
+ if (page_ptr != (bfd_vma) -1)
+ bfd_put_32 (abfd, reloc_sz - page_ptr, reloc_d + page_ptr + 4);
+
+ bfd_put_32 (abfd, this_page, reloc_d + reloc_sz);
+ page_ptr = reloc_sz;
+ reloc_sz += 8;
+ sec_page = this_page;
+ page_count = 0;
+ }
+
+ bfd_put_16 (abfd, (rva & 0xfff) + (reloc_data[i].type << 12),
+ reloc_d + reloc_sz);
+ reloc_sz += 2;
+
+ if (reloc_data[i].type == 4)
+ {
+ bfd_put_16 (abfd, reloc_data[i].extra, reloc_d + reloc_sz);
+ reloc_sz += 2;
+ }
+
+ page_count++;
+ }
+
+ while (reloc_sz & 3)
+ reloc_d[reloc_sz++] = 0;
+
+ if (page_ptr != (bfd_vma) -1)
+ bfd_put_32 (abfd, reloc_sz - page_ptr, reloc_d + page_ptr + 4);
+
+ while (reloc_sz < reloc_s->size)
+ reloc_d[reloc_sz++] = 0;
+}
+
+/* Given the exiting def_file structure, print out a .DEF file that
+ corresponds to it. */
+
+static void
+quoteput (char *s, FILE *f, int needs_quotes)
+{
+ char *cp;
+
+ for (cp = s; *cp; cp++)
+ if (*cp == '\''
+ || *cp == '"'
+ || *cp == '\\'
+ || ISSPACE (*cp)
+ || *cp == ','
+ || *cp == ';')
+ needs_quotes = 1;
+
+ if (needs_quotes)
+ {
+ putc ('"', f);
+
+ while (*s)
+ {
+ if (*s == '"' || *s == '\\')
+ putc ('\\', f);
+
+ putc (*s, f);
+ s++;
+ }
+
+ putc ('"', f);
+ }
+ else
+ fputs (s, f);
+}
+
+void
+pe_dll_generate_def_file (const char *pe_out_def_filename)
+{
+ int i;
+ FILE *out = fopen (pe_out_def_filename, "w");
+
+ if (out == NULL)
+ /* xgettext:c-format */
+ einfo (_("%s: Can't open output def file %s\n"),
+ program_name, pe_out_def_filename);
+
+ if (pe_def_file)
+ {
+ if (pe_def_file->name)
+ {
+ if (pe_def_file->is_dll)
+ fprintf (out, "LIBRARY ");
+ else
+ fprintf (out, "NAME ");
+
+ quoteput (pe_def_file->name, out, 1);
+
+ if (pe_data (link_info.output_bfd)->pe_opthdr.ImageBase)
+ {
+ fprintf (out, " BASE=0x");
+ fprintf_vma (out, ((bfd_vma) pe_data (link_info.output_bfd)->pe_opthdr.ImageBase));
+ }
+ fprintf (out, "\n");
+ }
+
+ if (pe_def_file->description)
+ {
+ fprintf (out, "DESCRIPTION ");
+ quoteput (pe_def_file->description, out, 1);
+ fprintf (out, "\n");
+ }
+
+ if (pe_def_file->version_minor != -1)
+ fprintf (out, "VERSION %d.%d\n", pe_def_file->version_major,
+ pe_def_file->version_minor);
+ else if (pe_def_file->version_major != -1)
+ fprintf (out, "VERSION %d\n", pe_def_file->version_major);
+
+ if (pe_def_file->stack_reserve != -1 || pe_def_file->heap_reserve != -1)
+ fprintf (out, "\n");
+
+ if (pe_def_file->stack_commit != -1)
+ fprintf (out, "STACKSIZE 0x%x,0x%x\n",
+ pe_def_file->stack_reserve, pe_def_file->stack_commit);
+ else if (pe_def_file->stack_reserve != -1)
+ fprintf (out, "STACKSIZE 0x%x\n", pe_def_file->stack_reserve);
+
+ if (pe_def_file->heap_commit != -1)
+ fprintf (out, "HEAPSIZE 0x%x,0x%x\n",
+ pe_def_file->heap_reserve, pe_def_file->heap_commit);
+ else if (pe_def_file->heap_reserve != -1)
+ fprintf (out, "HEAPSIZE 0x%x\n", pe_def_file->heap_reserve);
+
+ if (pe_def_file->num_section_defs > 0)
+ {
+ fprintf (out, "\nSECTIONS\n\n");
+
+ for (i = 0; i < pe_def_file->num_section_defs; i++)
+ {
+ fprintf (out, " ");
+ quoteput (pe_def_file->section_defs[i].name, out, 0);
+
+ if (pe_def_file->section_defs[i].class)
+ {
+ fprintf (out, " CLASS ");
+ quoteput (pe_def_file->section_defs[i].class, out, 0);
+ }
+
+ if (pe_def_file->section_defs[i].flag_read)
+ fprintf (out, " READ");
+
+ if (pe_def_file->section_defs[i].flag_write)
+ fprintf (out, " WRITE");
+
+ if (pe_def_file->section_defs[i].flag_execute)
+ fprintf (out, " EXECUTE");
+
+ if (pe_def_file->section_defs[i].flag_shared)
+ fprintf (out, " SHARED");
+
+ fprintf (out, "\n");
+ }
+ }
+
+ if (pe_def_file->num_exports > 0)
+ {
+ fprintf (out, "EXPORTS\n");
+
+ for (i = 0; i < pe_def_file->num_exports; i++)
+ {
+ def_file_export *e = pe_def_file->exports + i;
+ fprintf (out, " ");
+ quoteput (e->name, out, 0);
+
+ if (e->internal_name && strcmp (e->internal_name, e->name))
+ {
+ fprintf (out, " = ");
+ quoteput (e->internal_name, out, 0);
+ }
+
+ if (e->ordinal != -1)
+ fprintf (out, " @%d", e->ordinal);
+
+ if (e->flag_private)
+ fprintf (out, " PRIVATE");
+
+ if (e->flag_constant)
+ fprintf (out, " CONSTANT");
+
+ if (e->flag_noname)
+ fprintf (out, " NONAME");
+
+ if (e->flag_data)
+ fprintf (out, " DATA");
+
+ fprintf (out, "\n");
+ }
+ }
+
+ if (pe_def_file->num_imports > 0)
+ {
+ fprintf (out, "\nIMPORTS\n\n");
+
+ for (i = 0; i < pe_def_file->num_imports; i++)
+ {
+ def_file_import *im = pe_def_file->imports + i;
+ fprintf (out, " ");
+
+ if (im->internal_name
+ && (!im->name || strcmp (im->internal_name, im->name)))
+ {
+ quoteput (im->internal_name, out, 0);
+ fprintf (out, " = ");
+ }
+
+ quoteput (im->module->name, out, 0);
+ fprintf (out, ".");
+
+ if (im->name)
+ quoteput (im->name, out, 0);
+ else
+ fprintf (out, "%d", im->ordinal);
+
+ if (im->its_name)
+ {
+ fprintf (out, " == ");
+ quoteput (im->its_name, out, 0);
+ }
+
+ fprintf (out, "\n");
+ }
+ }
+ }
+ else
+ fprintf (out, _("; no contents available\n"));
+
+ if (fclose (out) == EOF)
+ /* xgettext:c-format */
+ einfo (_("%P: Error closing file `%s'\n"), pe_out_def_filename);
+}
+
+/* Generate the import library. */
+
+static asymbol **symtab;
+static int symptr;
+static int tmp_seq;
+static int tmp_seq2;
+static const char *dll_filename;
+static char *dll_symname;
+
+#define UNDSEC (asection *) &bfd_und_section
+
+static asection *
+quick_section (bfd *abfd, const char *name, int flags, int align)
+{
+ asection *sec;
+ asymbol *sym;
+
+ sec = bfd_make_section_old_way (abfd, name);
+ bfd_set_section_flags (abfd, sec, flags | SEC_ALLOC | SEC_LOAD | SEC_KEEP);
+ bfd_set_section_alignment (abfd, sec, align);
+ /* Remember to undo this before trying to link internally! */
+ sec->output_section = sec;
+
+ sym = bfd_make_empty_symbol (abfd);
+ symtab[symptr++] = sym;
+ sym->name = sec->name;
+ sym->section = sec;
+ sym->flags = BSF_LOCAL;
+ sym->value = 0;
+
+ return sec;
+}
+
+static void
+quick_symbol (bfd *abfd,
+ const char *n1,
+ const char *n2,
+ const char *n3,
+ asection *sec,
+ int flags,
+ int addr)
+{
+ asymbol *sym;
+ char *name = xmalloc (strlen (n1) + strlen (n2) + strlen (n3) + 1);
+
+ strcpy (name, n1);
+ strcat (name, n2);
+ strcat (name, n3);
+ sym = bfd_make_empty_symbol (abfd);
+ sym->name = name;
+ sym->section = sec;
+ sym->flags = flags;
+ sym->value = addr;
+ symtab[symptr++] = sym;
+}
+
+static arelent *reltab = 0;
+static int relcount = 0, relsize = 0;
+
+static void
+quick_reloc (bfd *abfd, bfd_size_type address, int which_howto, int symidx)
+{
+ if (relcount >= relsize - 1)
+ {
+ relsize += 10;
+ if (reltab)
+ reltab = xrealloc (reltab, relsize * sizeof (arelent));
+ else
+ reltab = xmalloc (relsize * sizeof (arelent));
+ }
+ reltab[relcount].address = address;
+ reltab[relcount].addend = 0;
+ reltab[relcount].howto = bfd_reloc_type_lookup (abfd, which_howto);
+ reltab[relcount].sym_ptr_ptr = symtab + symidx;
+ relcount++;
+}
+
+static void
+save_relocs (asection *sec)
+{
+ int i;
+
+ sec->relocation = reltab;
+ sec->reloc_count = relcount;
+ sec->orelocation = xmalloc ((relcount + 1) * sizeof (arelent *));
+ for (i = 0; i < relcount; i++)
+ sec->orelocation[i] = sec->relocation + i;
+ sec->orelocation[relcount] = 0;
+ sec->flags |= SEC_RELOC;
+ reltab = 0;
+ relcount = relsize = 0;
+}
+
+/* .section .idata$2
+ .global __head_my_dll
+ __head_my_dll:
+ .rva hname
+ .long 0
+ .long 0
+ .rva __my_dll_iname
+ .rva fthunk
+
+ .section .idata$5
+ .long 0
+ fthunk:
+
+ .section .idata$4
+ .long 0
+ hname: */
+
+static bfd *
+make_head (bfd *parent)
+{
+ asection *id2, *id5, *id4;
+ unsigned char *d2, *d5, *d4;
+ char *oname;
+ bfd *abfd;
+
+ oname = xmalloc (20);
+ sprintf (oname, "d%06d.o", tmp_seq);
+ tmp_seq++;
+
+ abfd = bfd_create (oname, parent);
+ bfd_find_target (pe_details->object_target, abfd);
+ bfd_make_writable (abfd);
+
+ bfd_set_format (abfd, bfd_object);
+ bfd_set_arch_mach (abfd, pe_details->bfd_arch, 0);
+
+ symptr = 0;
+ symtab = xmalloc (6 * sizeof (asymbol *));
+ id2 = quick_section (abfd, ".idata$2", SEC_HAS_CONTENTS, 2);
+ id5 = quick_section (abfd, ".idata$5", SEC_HAS_CONTENTS, 2);
+ id4 = quick_section (abfd, ".idata$4", SEC_HAS_CONTENTS, 2);
+ quick_symbol (abfd, U ("_head_"), dll_symname, "", id2, BSF_GLOBAL, 0);
+ quick_symbol (abfd, U (""), dll_symname, "_iname", UNDSEC, BSF_GLOBAL, 0);
+
+ /* OK, pay attention here. I got confused myself looking back at
+ it. We create a four-byte section to mark the beginning of the
+ list, and we include an offset of 4 in the section, so that the
+ pointer to the list points to the *end* of this section, which is
+ the start of the list of sections from other objects. */
+
+ bfd_set_section_size (abfd, id2, 20);
+ d2 = xmalloc (20);
+ id2->contents = d2;
+ memset (d2, 0, 20);
+ if (pe_use_nul_prefixed_import_tables)
+ d2[0] = d2[16] = PE_IDATA5_SIZE; /* Reloc addend. */
+ quick_reloc (abfd, 0, BFD_RELOC_RVA, 2);
+ quick_reloc (abfd, 12, BFD_RELOC_RVA, 4);
+ quick_reloc (abfd, 16, BFD_RELOC_RVA, 1);
+ save_relocs (id2);
+
+ if (pe_use_nul_prefixed_import_tables)
+ bfd_set_section_size (abfd, id5, PE_IDATA5_SIZE);
+ else
+ bfd_set_section_size (abfd, id5, 0);
+ d5 = xmalloc (PE_IDATA5_SIZE);
+ id5->contents = d5;
+ memset (d5, 0, PE_IDATA5_SIZE);
+ if (pe_use_nul_prefixed_import_tables)
+ bfd_set_section_size (abfd, id4, PE_IDATA4_SIZE);
+ else
+ bfd_set_section_size (abfd, id4, 0);
+ d4 = xmalloc (PE_IDATA4_SIZE);
+ id4->contents = d4;
+ memset (d4, 0, PE_IDATA4_SIZE);
+
+ bfd_set_symtab (abfd, symtab, symptr);
+
+ bfd_set_section_contents (abfd, id2, d2, 0, 20);
+ if (pe_use_nul_prefixed_import_tables)
+ {
+ bfd_set_section_contents (abfd, id5, d5, 0, PE_IDATA5_SIZE);
+ bfd_set_section_contents (abfd, id4, d4, 0, PE_IDATA4_SIZE);
+ }
+ else
+ {
+ bfd_set_section_contents (abfd, id5, d5, 0, 0);
+ bfd_set_section_contents (abfd, id4, d4, 0, 0);
+ }
+
+ bfd_make_readable (abfd);
+ return abfd;
+}
+
+/* .section .idata$4
+ .long 0
+ [.long 0] for PE+
+ .section .idata$5
+ .long 0
+ [.long 0] for PE+
+ .section idata$7
+ .global __my_dll_iname
+ __my_dll_iname:
+ .asciz "my.dll" */
+
+static bfd *
+make_tail (bfd *parent)
+{
+ asection *id4, *id5, *id7;
+ unsigned char *d4, *d5, *d7;
+ int len;
+ char *oname;
+ bfd *abfd;
+
+ oname = xmalloc (20);
+ sprintf (oname, "d%06d.o", tmp_seq);
+ tmp_seq++;
+
+ abfd = bfd_create (oname, parent);
+ bfd_find_target (pe_details->object_target, abfd);
+ bfd_make_writable (abfd);
+
+ bfd_set_format (abfd, bfd_object);
+ bfd_set_arch_mach (abfd, pe_details->bfd_arch, 0);
+
+ symptr = 0;
+ symtab = xmalloc (5 * sizeof (asymbol *));
+ id4 = quick_section (abfd, ".idata$4", SEC_HAS_CONTENTS, 2);
+ id5 = quick_section (abfd, ".idata$5", SEC_HAS_CONTENTS, 2);
+ id7 = quick_section (abfd, ".idata$7", SEC_HAS_CONTENTS, 2);
+ quick_symbol (abfd, U (""), dll_symname, "_iname", id7, BSF_GLOBAL, 0);
+
+ bfd_set_section_size (abfd, id4, PE_IDATA4_SIZE);
+ d4 = xmalloc (PE_IDATA4_SIZE);
+ id4->contents = d4;
+ memset (d4, 0, PE_IDATA4_SIZE);
+
+ bfd_set_section_size (abfd, id5, PE_IDATA5_SIZE);
+ d5 = xmalloc (PE_IDATA5_SIZE);
+ id5->contents = d5;
+ memset (d5, 0, PE_IDATA5_SIZE);
+
+ len = strlen (dll_filename) + 1;
+ if (len & 1)
+ len++;
+ bfd_set_section_size (abfd, id7, len);
+ d7 = xmalloc (len);
+ id7->contents = d7;
+ strcpy ((char *) d7, dll_filename);
+ /* If len was odd, the above
+ strcpy leaves behind an undefined byte. That is harmless,
+ but we set it to 0 just so the binary dumps are pretty. */
+ d7[len - 1] = 0;
+
+ bfd_set_symtab (abfd, symtab, symptr);
+
+ bfd_set_section_contents (abfd, id4, d4, 0, PE_IDATA4_SIZE);
+ bfd_set_section_contents (abfd, id5, d5, 0, PE_IDATA5_SIZE);
+ bfd_set_section_contents (abfd, id7, d7, 0, len);
+
+ bfd_make_readable (abfd);
+ return abfd;
+}
+
+/* .text
+ .global _function
+ .global ___imp_function
+ .global __imp__function
+ _function:
+ jmp *__imp__function:
+
+ .section idata$7
+ .long __head_my_dll
+
+ .section .idata$5
+ ___imp_function:
+ __imp__function:
+ iat?
+ .section .idata$4
+ iat?
+ .section .idata$6
+ ID<ordinal>:
+ .short <hint>
+ .asciz "function" xlate? (add underscore, kill at) */
+
+static const unsigned char jmp_ix86_bytes[] =
+{
+ 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90
+};
+
+/* _function:
+ mov.l ip+8,r0
+ mov.l @r0,r0
+ jmp @r0
+ nop
+ .dw __imp_function */
+
+static const unsigned char jmp_sh_bytes[] =
+{
+ 0x01, 0xd0, 0x02, 0x60, 0x2b, 0x40, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+/* _function:
+ lui $t0,<high:__imp_function>
+ lw $t0,<low:__imp_function>
+ jr $t0
+ nop */
+
+static const unsigned char jmp_mips_bytes[] =
+{
+ 0x00, 0x00, 0x08, 0x3c, 0x00, 0x00, 0x08, 0x8d,
+ 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char jmp_arm_bytes[] =
+{
+ 0x00, 0xc0, 0x9f, 0xe5, /* ldr ip, [pc] */
+ 0x00, 0xf0, 0x9c, 0xe5, /* ldr pc, [ip] */
+ 0, 0, 0, 0
+};
+
+
+static bfd *
+make_one (def_file_export *exp, bfd *parent, bfd_boolean include_jmp_stub)
+{
+ asection *tx, *id7, *id5, *id4, *id6;
+ unsigned char *td = NULL, *d7, *d5, *d4, *d6 = NULL;
+ int len;
+ char *oname;
+ bfd *abfd;
+ const unsigned char *jmp_bytes = NULL;
+ int jmp_byte_count = 0;
+
+ /* Include the jump stub section only if it is needed. A jump
+ stub is needed if the symbol being imported <sym> is a function
+ symbol and there is at least one undefined reference to that
+ symbol. In other words, if all the import references to <sym> are
+ explicitly through _declspec(dllimport) then the jump stub is not
+ needed. */
+ if (include_jmp_stub)
+ {
+ switch (pe_details->pe_arch)
+ {
+ case PE_ARCH_i386:
+ jmp_bytes = jmp_ix86_bytes;
+ jmp_byte_count = sizeof (jmp_ix86_bytes);
+ break;
+ case PE_ARCH_sh:
+ jmp_bytes = jmp_sh_bytes;
+ jmp_byte_count = sizeof (jmp_sh_bytes);
+ break;
+ case PE_ARCH_mips:
+ jmp_bytes = jmp_mips_bytes;
+ jmp_byte_count = sizeof (jmp_mips_bytes);
+ break;
+ case PE_ARCH_arm:
+ case PE_ARCH_arm_epoc:
+ case PE_ARCH_arm_wince:
+ jmp_bytes = jmp_arm_bytes;
+ jmp_byte_count = sizeof (jmp_arm_bytes);
+ break;
+ default:
+ abort ();
+ }
+ }
+
+ oname = xmalloc (20);
+ sprintf (oname, "d%06d.o", tmp_seq);
+ tmp_seq++;
+
+ abfd = bfd_create (oname, parent);
+ bfd_find_target (pe_details->object_target, abfd);
+ bfd_make_writable (abfd);
+
+ bfd_set_format (abfd, bfd_object);
+ bfd_set_arch_mach (abfd, pe_details->bfd_arch, 0);
+
+ symptr = 0;
+ symtab = xmalloc (12 * sizeof (asymbol *));
+
+ tx = quick_section (abfd, ".text", SEC_CODE | SEC_HAS_CONTENTS | SEC_READONLY, 2);
+ id7 = quick_section (abfd, ".idata$7", SEC_HAS_CONTENTS, 2);
+ id5 = quick_section (abfd, ".idata$5", SEC_HAS_CONTENTS, 2);
+ id4 = quick_section (abfd, ".idata$4", SEC_HAS_CONTENTS, 2);
+ id6 = quick_section (abfd, ".idata$6", SEC_HAS_CONTENTS, 2);
+
+ if (*exp->internal_name == '@')
+ {
+ quick_symbol (abfd, U ("_head_"), dll_symname, "", UNDSEC,
+ BSF_GLOBAL, 0);
+ if (include_jmp_stub)
+ quick_symbol (abfd, "", exp->internal_name, "", tx, BSF_GLOBAL, 0);
+ quick_symbol (abfd, "__imp_", exp->internal_name, "", id5,
+ BSF_GLOBAL, 0);
+ /* Fastcall applies only to functions,
+ so no need for auto-import symbol. */
+ }
+ else
+ {
+ quick_symbol (abfd, U ("_head_"), dll_symname, "", UNDSEC,
+ BSF_GLOBAL, 0);
+ if (include_jmp_stub)
+ quick_symbol (abfd, U (""), exp->internal_name, "", tx,
+ BSF_GLOBAL, 0);
+ quick_symbol (abfd, "__imp_", U (""), exp->internal_name, id5,
+ BSF_GLOBAL, 0);
+ /* Symbol to reference ord/name of imported
+ data symbol, used to implement auto-import. */
+ if (exp->flag_data)
+ quick_symbol (abfd, "__nm_", U (""), exp->internal_name, id6,
+ BSF_GLOBAL,0);
+ }
+ if (pe_dll_compat_implib)
+ quick_symbol (abfd, "___imp_", exp->internal_name, "", id5,
+ BSF_GLOBAL, 0);
+
+ if (include_jmp_stub)
+ {
+ bfd_set_section_size (abfd, tx, jmp_byte_count);
+ td = xmalloc (jmp_byte_count);
+ tx->contents = td;
+ memcpy (td, jmp_bytes, jmp_byte_count);
+
+ switch (pe_details->pe_arch)
+ {
+ case PE_ARCH_i386:
+#ifdef pe_use_x86_64
+ quick_reloc (abfd, 2, BFD_RELOC_32_PCREL, 2);
+#else
+ /* Mark this object as SAFESEH compatible. */
+ quick_symbol (abfd, "", "@feat.00", "", bfd_abs_section_ptr,
+ BSF_LOCAL, 1);
+ quick_reloc (abfd, 2, BFD_RELOC_32, 2);
+#endif
+ break;
+ case PE_ARCH_sh:
+ quick_reloc (abfd, 8, BFD_RELOC_32, 2);
+ break;
+ case PE_ARCH_mips:
+ quick_reloc (abfd, 0, BFD_RELOC_HI16_S, 2);
+ quick_reloc (abfd, 0, BFD_RELOC_LO16, 0); /* MIPS_R_PAIR */
+ quick_reloc (abfd, 4, BFD_RELOC_LO16, 2);
+ break;
+ case PE_ARCH_arm:
+ case PE_ARCH_arm_epoc:
+ case PE_ARCH_arm_wince:
+ quick_reloc (abfd, 8, BFD_RELOC_32, 2);
+ break;
+ default:
+ abort ();
+ }
+ save_relocs (tx);
+ }
+ else
+ bfd_set_section_size (abfd, tx, 0);
+
+ bfd_set_section_size (abfd, id7, 4);
+ d7 = xmalloc (4);
+ id7->contents = d7;
+ memset (d7, 0, 4);
+ quick_reloc (abfd, 0, BFD_RELOC_RVA, 5);
+ save_relocs (id7);
+
+ bfd_set_section_size (abfd, id5, PE_IDATA5_SIZE);
+ d5 = xmalloc (PE_IDATA5_SIZE);
+ id5->contents = d5;
+ memset (d5, 0, PE_IDATA5_SIZE);
+
+ if (exp->flag_noname)
+ {
+ d5[0] = exp->ordinal;
+ d5[1] = exp->ordinal >> 8;
+ d5[PE_IDATA5_SIZE - 1] = 0x80;
+ }
+ else
+ {
+ quick_reloc (abfd, 0, BFD_RELOC_RVA, 4);
+ save_relocs (id5);
+ }
+
+ bfd_set_section_size (abfd, id4, PE_IDATA4_SIZE);
+ d4 = xmalloc (PE_IDATA4_SIZE);
+ id4->contents = d4;
+ memset (d4, 0, PE_IDATA4_SIZE);
+
+ if (exp->flag_noname)
+ {
+ d4[0] = exp->ordinal;
+ d4[1] = exp->ordinal >> 8;
+ d4[PE_IDATA4_SIZE - 1] = 0x80;
+ }
+ else
+ {
+ quick_reloc (abfd, 0, BFD_RELOC_RVA, 4);
+ save_relocs (id4);
+ }
+
+ if (exp->flag_noname)
+ {
+ len = 0;
+ bfd_set_section_size (abfd, id6, 0);
+ }
+ else
+ {
+ /* { short, asciz } */
+ if (exp->its_name)
+ len = 2 + strlen (exp->its_name) + 1;
+ else
+ len = 2 + strlen (exp->name) + 1;
+ if (len & 1)
+ len++;
+ bfd_set_section_size (abfd, id6, len);
+ d6 = xmalloc (len);
+ id6->contents = d6;
+ memset (d6, 0, len);
+ d6[0] = exp->hint & 0xff;
+ d6[1] = exp->hint >> 8;
+ if (exp->its_name)
+ strcpy ((char*) d6 + 2, exp->its_name);
+ else
+ strcpy ((char *) d6 + 2, exp->name);
+ }
+
+ bfd_set_symtab (abfd, symtab, symptr);
+
+ if (include_jmp_stub)
+ bfd_set_section_contents (abfd, tx, td, 0, jmp_byte_count);
+ bfd_set_section_contents (abfd, id7, d7, 0, 4);
+ bfd_set_section_contents (abfd, id5, d5, 0, PE_IDATA5_SIZE);
+ bfd_set_section_contents (abfd, id4, d4, 0, PE_IDATA4_SIZE);
+ if (!exp->flag_noname)
+ bfd_set_section_contents (abfd, id6, d6, 0, len);
+
+ bfd_make_readable (abfd);
+ return abfd;
+}
+
+static bfd *
+make_singleton_name_imp (const char *import, bfd *parent)
+{
+ /* Name thunks go to idata$4. */
+ asection *id5;
+ unsigned char *d5;
+ char *oname;
+ bfd *abfd;
+
+ oname = xmalloc (20);
+ sprintf (oname, "nmimp%06d.o", tmp_seq2);
+ tmp_seq2++;
+
+ abfd = bfd_create (oname, parent);
+ bfd_find_target (pe_details->object_target, abfd);
+ bfd_make_writable (abfd);
+
+ bfd_set_format (abfd, bfd_object);
+ bfd_set_arch_mach (abfd, pe_details->bfd_arch, 0);
+
+ symptr = 0;
+ symtab = xmalloc (3 * sizeof (asymbol *));
+ id5 = quick_section (abfd, ".idata$5", SEC_HAS_CONTENTS, 2);
+ quick_symbol (abfd, "__imp_", import, "", id5, BSF_GLOBAL, 0);
+
+ /* We need space for the real thunk and for the null terminator. */
+ bfd_set_section_size (abfd, id5, PE_IDATA5_SIZE * 2);
+ d5 = xmalloc (PE_IDATA5_SIZE * 2);
+ id5->contents = d5;
+ memset (d5, 0, PE_IDATA5_SIZE * 2);
+ quick_reloc (abfd, 0, BFD_RELOC_RVA, 2);
+ save_relocs (id5);
+
+ bfd_set_symtab (abfd, symtab, symptr);
+
+ bfd_set_section_contents (abfd, id5, d5, 0, PE_IDATA4_SIZE * 2);
+
+ bfd_make_readable (abfd);
+ return abfd;
+}
+
+static bfd *
+make_singleton_name_thunk (const char *import, bfd *parent)
+{
+ /* Name thunks go to idata$4. */
+ asection *id4;
+ unsigned char *d4;
+ char *oname;
+ bfd *abfd;
+
+ oname = xmalloc (20);
+ sprintf (oname, "nmth%06d.o", tmp_seq);
+ tmp_seq++;
+
+ abfd = bfd_create (oname, parent);
+ bfd_find_target (pe_details->object_target, abfd);
+ bfd_make_writable (abfd);
+
+ bfd_set_format (abfd, bfd_object);
+ bfd_set_arch_mach (abfd, pe_details->bfd_arch, 0);
+
+ symptr = 0;
+ symtab = xmalloc (3 * sizeof (asymbol *));
+ id4 = quick_section (abfd, ".idata$4", SEC_HAS_CONTENTS, 2);
+ quick_symbol (abfd, "__nm_thnk_", import, "", id4, BSF_GLOBAL, 0);
+ quick_symbol (abfd, "__nm_", import, "", UNDSEC, BSF_GLOBAL, 0);
+
+ /* We need space for the real thunk and for the null terminator. */
+ bfd_set_section_size (abfd, id4, PE_IDATA4_SIZE * 2);
+ d4 = xmalloc (PE_IDATA4_SIZE * 2);
+ id4->contents = d4;
+ memset (d4, 0, PE_IDATA4_SIZE * 2);
+ quick_reloc (abfd, 0, BFD_RELOC_RVA, 2);
+ save_relocs (id4);
+
+ bfd_set_symtab (abfd, symtab, symptr);
+
+ bfd_set_section_contents (abfd, id4, d4, 0, PE_IDATA4_SIZE * 2);
+
+ bfd_make_readable (abfd);
+ return abfd;
+}
+
+static char *
+make_import_fixup_mark (arelent *rel)
+{
+ /* We convert reloc to symbol, for later reference. */
+ static int counter;
+ static char *fixup_name = NULL;
+ static size_t buffer_len = 0;
+
+ struct bfd_symbol *sym = *rel->sym_ptr_ptr;
+
+ bfd *abfd = bfd_asymbol_bfd (sym);
+ struct bfd_link_hash_entry *bh;
+
+ if (!fixup_name)
+ {
+ fixup_name = xmalloc (384);
+ buffer_len = 384;
+ }
+
+ if (strlen (sym->name) + 25 > buffer_len)
+ /* Assume 25 chars for "__fu" + counter + "_". If counter is
+ bigger than 20 digits long, we've got worse problems than
+ overflowing this buffer... */
+ {
+ free (fixup_name);
+ /* New buffer size is length of symbol, plus 25, but
+ then rounded up to the nearest multiple of 128. */
+ buffer_len = ((strlen (sym->name) + 25) + 127) & ~127;
+ fixup_name = xmalloc (buffer_len);
+ }
+
+ sprintf (fixup_name, "__fu%d_%s", counter++, sym->name);
+
+ bh = NULL;
+ bfd_coff_link_add_one_symbol (&link_info, abfd, fixup_name, BSF_GLOBAL,
+ current_sec, /* sym->section, */
+ rel->address, NULL, TRUE, FALSE, &bh);
+
+ return fixup_name;
+}
+
+/* .section .idata$2
+ .rva __nm_thnk_SYM (singleton thunk with name of func)
+ .long 0
+ .long 0
+ .rva __my_dll_iname (name of dll)
+ .rva __fuNN_SYM (pointer to reference (address) in text) */
+
+static bfd *
+make_import_fixup_entry (const char *name,
+ const char *fixup_name,
+ const char *symname,
+ bfd *parent)
+{
+ asection *id2;
+ unsigned char *d2;
+ char *oname;
+ bfd *abfd;
+
+ oname = xmalloc (20);
+ sprintf (oname, "fu%06d.o", tmp_seq);
+ tmp_seq++;
+
+ abfd = bfd_create (oname, parent);
+ bfd_find_target (pe_details->object_target, abfd);
+ bfd_make_writable (abfd);
+
+ bfd_set_format (abfd, bfd_object);
+ bfd_set_arch_mach (abfd, pe_details->bfd_arch, 0);
+
+ symptr = 0;
+ symtab = xmalloc (6 * sizeof (asymbol *));
+ id2 = quick_section (abfd, ".idata$2", SEC_HAS_CONTENTS, 2);
+
+ quick_symbol (abfd, "__nm_thnk_", name, "", UNDSEC, BSF_GLOBAL, 0);
+ quick_symbol (abfd, U (""), symname, "_iname", UNDSEC, BSF_GLOBAL, 0);
+ /* For relocator v2 we have to use the .idata$5 element and not
+ fixup_name. */
+ if (link_info.pei386_runtime_pseudo_reloc == 2)
+ quick_symbol (abfd, "__imp_", name, "", UNDSEC, BSF_GLOBAL, 0);
+ else
+ quick_symbol (abfd, "", fixup_name, "", UNDSEC, BSF_GLOBAL, 0);
+
+ bfd_set_section_size (abfd, id2, 20);
+ d2 = xmalloc (20);
+ id2->contents = d2;
+ memset (d2, 0, 20);
+
+ quick_reloc (abfd, 0, BFD_RELOC_RVA, 1);
+ quick_reloc (abfd, 12, BFD_RELOC_RVA, 2);
+ quick_reloc (abfd, 16, BFD_RELOC_RVA, 3);
+ save_relocs (id2);
+
+ bfd_set_symtab (abfd, symtab, symptr);
+
+ bfd_set_section_contents (abfd, id2, d2, 0, 20);
+
+ bfd_make_readable (abfd);
+ return abfd;
+}
+
+/* .section .rdata_runtime_pseudo_reloc
+ .long addend
+ .rva __fuNN_SYM (pointer to reference (address) in text) */
+
+static bfd *
+make_runtime_pseudo_reloc (const char *name ATTRIBUTE_UNUSED,
+ const char *fixup_name,
+ bfd_vma addend ATTRIBUTE_UNUSED,
+ bfd_vma bitsize,
+ bfd *parent)
+{
+ asection *rt_rel;
+ unsigned char *rt_rel_d;
+ char *oname;
+ bfd *abfd;
+ oname = xmalloc (20);
+ sprintf (oname, "rtr%06d.o", tmp_seq);
+ tmp_seq++;
+
+ abfd = bfd_create (oname, parent);
+ bfd_find_target (pe_details->object_target, abfd);
+ bfd_make_writable (abfd);
+
+ bfd_set_format (abfd, bfd_object);
+ bfd_set_arch_mach (abfd, pe_details->bfd_arch, 0);
+
+ symptr = 0;
+ if (link_info.pei386_runtime_pseudo_reloc == 2)
+ {
+ symtab = xmalloc ((runtime_pseudp_reloc_v2_init ? 3 : 6) * sizeof (asymbol *));
+ }
+ else
+ {
+ symtab = xmalloc (2 * sizeof (asymbol *));
+ }
+ rt_rel = quick_section (abfd, ".rdata_runtime_pseudo_reloc",
+ SEC_HAS_CONTENTS, 2);
+
+ quick_symbol (abfd, "", fixup_name, "", UNDSEC, BSF_GLOBAL, 0);
+
+ if (link_info.pei386_runtime_pseudo_reloc == 2)
+ {
+ size_t size = 12;
+ if (! runtime_pseudp_reloc_v2_init)
+ {
+ size += 12;
+ runtime_pseudp_reloc_v2_init = 1;
+ }
+ quick_symbol (abfd, "__imp_", name, "", UNDSEC, BSF_GLOBAL, 0);
+
+ bfd_set_section_size (abfd, rt_rel, size);
+ rt_rel_d = xmalloc (size);
+ rt_rel->contents = rt_rel_d;
+ memset (rt_rel_d, 0, size);
+ quick_reloc (abfd, size - 8, BFD_RELOC_RVA, 1);
+ quick_reloc (abfd, size - 12, BFD_RELOC_RVA, 2);
+ bfd_put_32 (abfd, bitsize, rt_rel_d + (size - 4));
+ if (size != 12)
+ bfd_put_32 (abfd, 1, rt_rel_d + 8);
+ save_relocs (rt_rel);
+
+ bfd_set_symtab (abfd, symtab, symptr);
+
+ bfd_set_section_contents (abfd, rt_rel, rt_rel_d, 0, size);
+ }
+ else
+ {
+ bfd_set_section_size (abfd, rt_rel, 8);
+ rt_rel_d = xmalloc (8);
+ rt_rel->contents = rt_rel_d;
+ memset (rt_rel_d, 0, 8);
+
+ bfd_put_32 (abfd, addend, rt_rel_d);
+ quick_reloc (abfd, 4, BFD_RELOC_RVA, 1);
+
+ save_relocs (rt_rel);
+
+ bfd_set_symtab (abfd, symtab, symptr);
+
+ bfd_set_section_contents (abfd, rt_rel, rt_rel_d, 0, 8);
+ }
+ bfd_make_readable (abfd);
+ return abfd;
+}
+
+/* .section .rdata
+ .rva __pei386_runtime_relocator */
+
+static bfd *
+pe_create_runtime_relocator_reference (bfd *parent)
+{
+ asection *extern_rt_rel;
+ unsigned char *extern_rt_rel_d;
+ char *oname;
+ bfd *abfd;
+
+ oname = xmalloc (20);
+ sprintf (oname, "ertr%06d.o", tmp_seq);
+ tmp_seq++;
+
+ abfd = bfd_create (oname, parent);
+ bfd_find_target (pe_details->object_target, abfd);
+ bfd_make_writable (abfd);
+
+ bfd_set_format (abfd, bfd_object);
+ bfd_set_arch_mach (abfd, pe_details->bfd_arch, 0);
+
+ symptr = 0;
+ symtab = xmalloc (2 * sizeof (asymbol *));
+ extern_rt_rel = quick_section (abfd, ".rdata", SEC_HAS_CONTENTS, 2);
+
+ quick_symbol (abfd, "", U ("_pei386_runtime_relocator"), "", UNDSEC,
+ BSF_NO_FLAGS, 0);
+
+ bfd_set_section_size (abfd, extern_rt_rel, PE_IDATA5_SIZE);
+ extern_rt_rel_d = xmalloc (PE_IDATA5_SIZE);
+ extern_rt_rel->contents = extern_rt_rel_d;
+
+ quick_reloc (abfd, 0, BFD_RELOC_RVA, 1);
+ save_relocs (extern_rt_rel);
+
+ bfd_set_symtab (abfd, symtab, symptr);
+
+ bfd_set_section_contents (abfd, extern_rt_rel, extern_rt_rel_d, 0, PE_IDATA5_SIZE);
+
+ bfd_make_readable (abfd);
+ return abfd;
+}
+
+void
+pe_create_import_fixup (arelent *rel, asection *s, bfd_vma addend)
+{
+ char buf[300];
+ struct bfd_symbol *sym = *rel->sym_ptr_ptr;
+ struct bfd_link_hash_entry *name_thunk_sym;
+ struct bfd_link_hash_entry *name_imp_sym;
+ const char *name = sym->name;
+ char *fixup_name = make_import_fixup_mark (rel);
+ bfd *b;
+ int need_import_table = 1;
+
+ sprintf (buf, "__imp_%s", name);
+ name_imp_sym = bfd_link_hash_lookup (link_info.hash, buf, 0, 0, 1);
+
+ sprintf (buf, "__nm_thnk_%s", name);
+
+ name_thunk_sym = bfd_link_hash_lookup (link_info.hash, buf, 0, 0, 1);
+
+ /* For version 2 pseudo relocation we don't need to add an import
+ if the import symbol is already present. */
+ if (link_info.pei386_runtime_pseudo_reloc == 2
+ && name_imp_sym
+ && name_imp_sym->type == bfd_link_hash_defined)
+ need_import_table = 0;
+
+ if (need_import_table == 1
+ && (!name_thunk_sym || name_thunk_sym->type != bfd_link_hash_defined))
+ {
+ b = make_singleton_name_thunk (name, link_info.output_bfd);
+ add_bfd_to_link (b, b->filename, &link_info);
+
+ /* If we ever use autoimport, we have to cast text section writable.
+ But not for version 2. */
+ if (link_info.pei386_runtime_pseudo_reloc != 2)
+ {
+ config.text_read_only = FALSE;
+ link_info.output_bfd->flags &= ~WP_TEXT;
+ }
+ if (link_info.pei386_runtime_pseudo_reloc == 2)
+ {
+ b = make_singleton_name_imp (name, link_info.output_bfd);
+ add_bfd_to_link (b, b->filename, &link_info);
+ }
+ }
+
+ if ((addend == 0 || link_info.pei386_runtime_pseudo_reloc)
+ && need_import_table == 1)
+ {
+ extern char * pe_data_import_dll;
+ char * symname = pe_data_import_dll ? pe_data_import_dll : "unknown";
+
+ b = make_import_fixup_entry (name, fixup_name, symname,
+ link_info.output_bfd);
+ add_bfd_to_link (b, b->filename, &link_info);
+ }
+
+ if ((link_info.pei386_runtime_pseudo_reloc != 0 && addend != 0)
+ || link_info.pei386_runtime_pseudo_reloc == 2)
+ {
+ if (pe_dll_extra_pe_debug)
+ printf ("creating runtime pseudo-reloc entry for %s (addend=%d)\n",
+ fixup_name, (int) addend);
+
+ b = make_runtime_pseudo_reloc (name, fixup_name, addend, rel->howto->bitsize,
+ link_info.output_bfd);
+ add_bfd_to_link (b, b->filename, &link_info);
+
+ if (runtime_pseudo_relocs_created == 0)
+ {
+ b = pe_create_runtime_relocator_reference (link_info.output_bfd);
+ add_bfd_to_link (b, b->filename, &link_info);
+ }
+ runtime_pseudo_relocs_created++;
+ }
+ else if (addend != 0)
+ {
+ einfo (_("%C: variable '%T' can't be auto-imported. Please read the documentation for ld's --enable-auto-import for details.\n"),
+ s->owner, s, rel->address, sym->name);
+ einfo ("%X");
+ }
+}
+
+
+void
+pe_dll_generate_implib (def_file *def, const char *impfilename, struct bfd_link_info *info)
+{
+ int i;
+ bfd *ar_head;
+ bfd *ar_tail;
+ bfd *outarch;
+ bfd *ibfd;
+ bfd *head = 0;
+
+ dll_filename = (def->name) ? def->name : dll_name;
+ dll_symname = xstrdup (dll_filename);
+ for (i = 0; dll_symname[i]; i++)
+ if (!ISALNUM (dll_symname[i]))
+ dll_symname[i] = '_';
+
+ unlink_if_ordinary (impfilename);
+
+ outarch = bfd_openw (impfilename, 0);
+
+ if (!outarch)
+ {
+ /* xgettext:c-format */
+ einfo (_("%XCan't open .lib file: %s\n"), impfilename);
+ return;
+ }
+
+ /* xgettext:c-format */
+ info_msg (_("Creating library file: %s\n"), impfilename);
+
+ bfd_set_format (outarch, bfd_archive);
+ outarch->has_armap = 1;
+
+ /* Work out a reasonable size of things to put onto one line. */
+ ar_head = make_head (outarch);
+
+ /* Iterate the input BFDs, looking for exclude-modules-for-implib. */
+ for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link_next)
+ {
+ /* Iterate the exclude list. */
+ struct exclude_list_struct *ex;
+ char found;
+ for (ex = excludes, found = 0; ex && !found; ex = ex->next)
+ {
+ if (ex->type != EXCLUDEFORIMPLIB)
+ continue;
+ found = (strcmp (ex->string, ibfd->filename) == 0);
+ }
+ /* If it matched, we must open a fresh BFD for it (the original
+ input BFD is still needed for the DLL's final link) and add
+ it into the archive member chain. */
+ if (found)
+ {
+ bfd *newbfd = bfd_openr (ibfd->my_archive
+ ? ibfd->my_archive->filename : ibfd->filename, NULL);
+ if (!newbfd)
+ {
+ einfo (_("%Xbfd_openr %s: %E\n"), ibfd->filename);
+ return;
+ }
+ if (ibfd->my_archive)
+ {
+ /* Must now iterate through archive until we find the
+ required member. A minor shame that we'll open the
+ archive once per member that we require from it, and
+ leak those archive bfds rather than reuse them. */
+ bfd *arbfd = newbfd;
+ if (!bfd_check_format_matches (arbfd, bfd_archive, NULL))
+ {
+ einfo (_("%X%s(%s): can't find member in non-archive file"),
+ ibfd->my_archive->filename, ibfd->filename);
+ return;
+ }
+ newbfd = NULL;
+ while ((newbfd = bfd_openr_next_archived_file (arbfd, newbfd)) != 0)
+ {
+ if (strcmp (newbfd->filename, ibfd->filename) == 0)
+ break;
+ }
+ if (!newbfd)
+ {
+ einfo (_("%X%s(%s): can't find member in archive"),
+ ibfd->my_archive->filename, ibfd->filename);
+ return;
+ }
+ }
+ newbfd->archive_next = head;
+ head = newbfd;
+ }
+ }
+
+ for (i = 0; i < def->num_exports; i++)
+ {
+ /* The import library doesn't know about the internal name. */
+ char *internal = def->exports[i].internal_name;
+ bfd *n;
+
+ /* Don't add PRIVATE entries to import lib. */
+ if (pe_def_file->exports[i].flag_private)
+ continue;
+ def->exports[i].internal_name = def->exports[i].name;
+ n = make_one (def->exports + i, outarch,
+ ! (def->exports + i)->flag_data);
+ n->archive_next = head;
+ head = n;
+ def->exports[i].internal_name = internal;
+ }
+
+ ar_tail = make_tail (outarch);
+
+ if (ar_head == NULL || ar_tail == NULL)
+ return;
+
+ /* Now stick them all into the archive. */
+ ar_head->archive_next = head;
+ ar_tail->archive_next = ar_head;
+ head = ar_tail;
+
+ if (! bfd_set_archive_head (outarch, head))
+ einfo ("%Xbfd_set_archive_head: %E\n");
+
+ if (! bfd_close (outarch))
+ einfo ("%Xbfd_close %s: %E\n", impfilename);
+
+ while (head != NULL)
+ {
+ bfd *n = head->archive_next;
+ bfd_close (head);
+ head = n;
+ }
+}
+
+static struct bfd_link_hash_entry *found_sym;
+
+static bfd_boolean
+pe_undef_alias_cdecl_match (struct bfd_link_hash_entry *h, void *inf)
+{
+ int sl;
+ char *string = inf;
+ const char *hs = h->root.string;
+
+ sl = strlen (string);
+ if (h->type == bfd_link_hash_undefined
+ && ((*hs == '@' && (!pe_details->underscored || *string == '_')
+ && strncmp (hs + 1, string + (pe_details->underscored != 0),
+ sl - (pe_details->underscored != 0)) == 0)
+ || strncmp (hs, string, sl) == 0)
+ && h->root.string[sl] == '@')
+ {
+ found_sym = h;
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static struct bfd_link_hash_entry *
+pe_find_cdecl_alias_match (char *name)
+{
+ found_sym = 0;
+ bfd_link_hash_traverse (link_info.hash, pe_undef_alias_cdecl_match,
+ (char *) name);
+ return found_sym;
+}
+
+static void
+add_bfd_to_link (bfd *abfd, const char *name, struct bfd_link_info *linfo)
+{
+ lang_input_statement_type *fake_file;
+
+ fake_file = lang_add_input_file (name,
+ lang_input_file_is_fake_enum,
+ NULL);
+ fake_file->the_bfd = abfd;
+ ldlang_add_file (fake_file);
+
+ if (!bfd_link_add_symbols (abfd, linfo))
+ einfo ("%Xaddsym %s: %E\n", name);
+}
+
+void
+pe_process_import_defs (bfd *output_bfd, struct bfd_link_info *linfo)
+{
+ def_file_module *module;
+
+ pe_dll_id_target (bfd_get_target (output_bfd));
+
+ if (!pe_def_file)
+ return;
+
+ for (module = pe_def_file->modules; module; module = module->next)
+ {
+ int i, do_this_dll;
+
+ dll_filename = module->name;
+ dll_symname = xstrdup (module->name);
+ for (i = 0; dll_symname[i]; i++)
+ if (!ISALNUM (dll_symname[i]))
+ dll_symname[i] = '_';
+
+ do_this_dll = 0;
+
+ for (i = 0; i < pe_def_file->num_imports; i++)
+ if (pe_def_file->imports[i].module == module)
+ {
+ def_file_export exp;
+ struct bfd_link_hash_entry *blhe;
+ int lead_at = (*pe_def_file->imports[i].internal_name == '@');
+ /* See if we need this import. */
+ size_t len = strlen (pe_def_file->imports[i].internal_name);
+ char *name = xmalloc (len + 2 + 6);
+ bfd_boolean include_jmp_stub = FALSE;
+ bfd_boolean is_cdecl = FALSE;
+ if (!lead_at && strchr (pe_def_file->imports[i].internal_name, '@') == NULL)
+ is_cdecl = TRUE;
+
+ if (lead_at)
+ sprintf (name, "%s",
+ pe_def_file->imports[i].internal_name);
+ else
+ sprintf (name, "%s%s",U (""),
+ pe_def_file->imports[i].internal_name);
+
+ blhe = bfd_link_hash_lookup (linfo->hash, name,
+ FALSE, FALSE, FALSE);
+
+ /* Include the jump stub for <sym> only if the <sym>
+ is undefined. */
+ if (!blhe || (blhe && blhe->type != bfd_link_hash_undefined))
+ {
+ if (lead_at)
+ sprintf (name, "%s%s", "__imp_",
+ pe_def_file->imports[i].internal_name);
+ else
+ sprintf (name, "%s%s%s", "__imp_", U (""),
+ pe_def_file->imports[i].internal_name);
+
+ blhe = bfd_link_hash_lookup (linfo->hash, name,
+ FALSE, FALSE, FALSE);
+ }
+ else
+ include_jmp_stub = TRUE;
+
+ if (is_cdecl && !blhe)
+ {
+ sprintf (name, "%s%s",U (""),
+ pe_def_file->imports[i].internal_name);
+ blhe = pe_find_cdecl_alias_match (name);
+ include_jmp_stub = TRUE;
+ }
+
+ free (name);
+
+ if (blhe && blhe->type == bfd_link_hash_undefined)
+ {
+ bfd *one;
+ /* We do. */
+ if (!do_this_dll)
+ {
+ bfd *ar_head = make_head (output_bfd);
+ add_bfd_to_link (ar_head, ar_head->filename, linfo);
+ do_this_dll = 1;
+ }
+ exp.internal_name = pe_def_file->imports[i].internal_name;
+ exp.name = pe_def_file->imports[i].name;
+ exp.its_name = pe_def_file->imports[i].its_name;
+ exp.ordinal = pe_def_file->imports[i].ordinal;
+ exp.hint = exp.ordinal >= 0 ? exp.ordinal : 0;
+ exp.flag_private = 0;
+ exp.flag_constant = 0;
+ exp.flag_data = pe_def_file->imports[i].data;
+ exp.flag_noname = exp.name ? 0 : 1;
+ one = make_one (&exp, output_bfd, (! exp.flag_data) && include_jmp_stub);
+ add_bfd_to_link (one, one->filename, linfo);
+ }
+ }
+ if (do_this_dll)
+ {
+ bfd *ar_tail = make_tail (output_bfd);
+ add_bfd_to_link (ar_tail, ar_tail->filename, linfo);
+ }
+
+ free (dll_symname);
+ }
+}
+
+/* We were handed a *.DLL file. Parse it and turn it into a set of
+ IMPORTS directives in the def file. Return TRUE if the file was
+ handled, FALSE if not. */
+
+static unsigned int
+pe_get16 (bfd *abfd, int where)
+{
+ unsigned char b[2];
+
+ bfd_seek (abfd, (file_ptr) where, SEEK_SET);
+ bfd_bread (b, (bfd_size_type) 2, abfd);
+ return b[0] + (b[1] << 8);
+}
+
+static unsigned int
+pe_get32 (bfd *abfd, int where)
+{
+ unsigned char b[4];
+
+ bfd_seek (abfd, (file_ptr) where, SEEK_SET);
+ bfd_bread (b, (bfd_size_type) 4, abfd);
+ return b[0] + (b[1] << 8) + (b[2] << 16) + (b[3] << 24);
+}
+
+static unsigned int
+pe_as32 (void *ptr)
+{
+ unsigned char *b = ptr;
+
+ return b[0] + (b[1] << 8) + (b[2] << 16) + (b[3] << 24);
+}
+
+bfd_boolean
+pe_implied_import_dll (const char *filename)
+{
+ bfd *dll;
+ bfd_vma pe_header_offset, opthdr_ofs, num_entries, i;
+ bfd_vma export_rva, export_size, nsections, secptr, expptr;
+ bfd_vma exp_funcbase;
+ unsigned char *expdata;
+ char *erva;
+ bfd_vma name_rvas, nexp;
+ const char *dllname;
+ /* Initialization with start > end guarantees that is_data
+ will not be set by mistake, and avoids compiler warning. */
+ bfd_vma data_start = 1;
+ bfd_vma data_end = 0;
+ bfd_vma rdata_start = 1;
+ bfd_vma rdata_end = 0;
+ bfd_vma bss_start = 1;
+ bfd_vma bss_end = 0;
+
+ /* No, I can't use bfd here. kernel32.dll puts its export table in
+ the middle of the .rdata section. */
+ dll = bfd_openr (filename, pe_details->target_name);
+ if (!dll)
+ {
+ einfo ("%Xopen %s: %E\n", filename);
+ return FALSE;
+ }
+
+ /* PEI dlls seem to be bfd_objects. */
+ if (!bfd_check_format (dll, bfd_object))
+ {
+ einfo ("%X%s: this doesn't appear to be a DLL\n", filename);
+ return FALSE;
+ }
+
+ /* Get pe_header, optional header and numbers of directory entries. */
+ pe_header_offset = pe_get32 (dll, 0x3c);
+ opthdr_ofs = pe_header_offset + 4 + 20;
+#ifdef pe_use_x86_64
+ num_entries = pe_get32 (dll, opthdr_ofs + 92 + 4 * 4); /* & NumberOfRvaAndSizes. */
+#else
+ num_entries = pe_get32 (dll, opthdr_ofs + 92);
+#endif
+
+ /* No import or export directory entry. */
+ if (num_entries < 1)
+ return FALSE;
+
+#ifdef pe_use_x86_64
+ export_rva = pe_get32 (dll, opthdr_ofs + 96 + 4 * 4);
+ export_size = pe_get32 (dll, opthdr_ofs + 100 + 4 * 4);
+#else
+ export_rva = pe_get32 (dll, opthdr_ofs + 96);
+ export_size = pe_get32 (dll, opthdr_ofs + 100);
+#endif
+
+ /* No export table - nothing to export. */
+ if (export_size == 0)
+ return FALSE;
+
+ nsections = pe_get16 (dll, pe_header_offset + 4 + 2);
+ secptr = (pe_header_offset + 4 + 20 +
+ pe_get16 (dll, pe_header_offset + 4 + 16));
+ expptr = 0;
+
+ /* Get the rva and size of the export section. */
+ for (i = 0; i < nsections; i++)
+ {
+ char sname[8];
+ bfd_vma secptr1 = secptr + 40 * i;
+ bfd_vma vaddr = pe_get32 (dll, secptr1 + 12);
+ bfd_vma vsize = pe_get32 (dll, secptr1 + 16);
+ bfd_vma fptr = pe_get32 (dll, secptr1 + 20);
+
+ bfd_seek (dll, (file_ptr) secptr1, SEEK_SET);
+ bfd_bread (sname, (bfd_size_type) 8, dll);
+
+ if (vaddr <= export_rva && vaddr + vsize > export_rva)
+ {
+ expptr = fptr + (export_rva - vaddr);
+ if (export_rva + export_size > vaddr + vsize)
+ export_size = vsize - (export_rva - vaddr);
+ break;
+ }
+ }
+
+ /* Scan sections and store the base and size of the
+ data and bss segments in data/base_start/end. */
+ for (i = 0; i < nsections; i++)
+ {
+ bfd_vma secptr1 = secptr + 40 * i;
+ bfd_vma vsize = pe_get32 (dll, secptr1 + 8);
+ bfd_vma vaddr = pe_get32 (dll, secptr1 + 12);
+ bfd_vma flags = pe_get32 (dll, secptr1 + 36);
+ char sec_name[9];
+
+ sec_name[8] = '\0';
+ bfd_seek (dll, (file_ptr) secptr1 + 0, SEEK_SET);
+ bfd_bread (sec_name, (bfd_size_type) 8, dll);
+
+ if (strcmp(sec_name,".data") == 0)
+ {
+ data_start = vaddr;
+ data_end = vaddr + vsize;
+
+ if (pe_dll_extra_pe_debug)
+ printf ("%s %s: 0x%08lx-0x%08lx (0x%08lx)\n",
+ __FUNCTION__, sec_name, (unsigned long) vaddr,
+ (unsigned long) (vaddr + vsize), (unsigned long) flags);
+ }
+ else if (strcmp(sec_name,".rdata") == 0)
+ {
+ rdata_start = vaddr;
+ rdata_end = vaddr + vsize;
+
+ if (pe_dll_extra_pe_debug)
+ printf ("%s %s: 0x%08lx-0x%08lx (0x%08lx)\n",
+ __FUNCTION__, sec_name, (unsigned long) vaddr,
+ (unsigned long) (vaddr + vsize), (unsigned long) flags);
+ }
+ else if (strcmp (sec_name,".bss") == 0)
+ {
+ bss_start = vaddr;
+ bss_end = vaddr + vsize;
+
+ if (pe_dll_extra_pe_debug)
+ printf ("%s %s: 0x%08lx-0x%08lx (0x%08lx)\n",
+ __FUNCTION__, sec_name, (unsigned long) vaddr,
+ (unsigned long) (vaddr + vsize), (unsigned long) flags);
+ }
+ }
+
+ expdata = xmalloc (export_size);
+ bfd_seek (dll, (file_ptr) expptr, SEEK_SET);
+ bfd_bread (expdata, (bfd_size_type) export_size, dll);
+ erva = (char *) expdata - export_rva;
+
+ if (pe_def_file == 0)
+ pe_def_file = def_file_empty ();
+
+ nexp = pe_as32 (expdata + 24);
+ name_rvas = pe_as32 (expdata + 32);
+ exp_funcbase = pe_as32 (expdata + 28);
+
+ /* Use internal dll name instead of filename
+ to enable symbolic dll linking. */
+ dllname = erva + pe_as32 (expdata + 12);
+
+ /* Check to see if the dll has already been added to
+ the definition list and if so return without error.
+ This avoids multiple symbol definitions. */
+ if (def_get_module (pe_def_file, dllname))
+ {
+ if (pe_dll_extra_pe_debug)
+ printf ("%s is already loaded\n", dllname);
+ return TRUE;
+ }
+
+ /* Iterate through the list of symbols. */
+ for (i = 0; i < nexp; i++)
+ {
+ /* Pointer to the names vector. */
+ bfd_vma name_rva = pe_as32 (erva + name_rvas + i * 4);
+ def_file_import *imp;
+ /* Pointer to the function address vector. */
+ bfd_vma func_rva = pe_as32 (erva + exp_funcbase + i * 4);
+ int is_data = 0;
+
+ /* Skip unwanted symbols, which are
+ exported in buggy auto-import releases. */
+ if (! CONST_STRNEQ (erva + name_rva, "__nm_"))
+ {
+ /* is_data is true if the address is in the data, rdata or bss
+ segment. */
+ is_data =
+ (func_rva >= data_start && func_rva < data_end)
+ || (func_rva >= rdata_start && func_rva < rdata_end)
+ || (func_rva >= bss_start && func_rva < bss_end);
+
+ imp = def_file_add_import (pe_def_file, erva + name_rva,
+ dllname, i, 0, NULL);
+ /* Mark symbol type. */
+ imp->data = is_data;
+
+ if (pe_dll_extra_pe_debug)
+ printf ("%s dll-name: %s sym: %s addr: 0x%lx %s\n",
+ __FUNCTION__, dllname, erva + name_rva,
+ (unsigned long) func_rva, is_data ? "(data)" : "");
+ }
+ }
+
+ return TRUE;
+}
+
+void
+pe_output_file_set_long_section_names (bfd *abfd)
+{
+ if (pe_use_coff_long_section_names < 0)
+ return;
+ if (!bfd_coff_set_long_section_names (abfd, pe_use_coff_long_section_names))
+ einfo (_("%XError: can't use long section names on this arch\n"));
+}
+
+/* These are the main functions, called from the emulation. The first
+ is called after the bfds are read, so we can guess at how much space
+ we need. The second is called after everything is placed, so we
+ can put the right values in place. */
+
+void
+pe_dll_build_sections (bfd *abfd, struct bfd_link_info *info)
+{
+ pe_dll_id_target (bfd_get_target (abfd));
+ pe_output_file_set_long_section_names (abfd);
+ process_def_file_and_drectve (abfd, info);
+
+ if (pe_def_file->num_exports == 0 && !info->shared)
+ return;
+
+ generate_edata (abfd, info);
+ build_filler_bfd (1);
+ pe_output_file_set_long_section_names (filler_bfd);
+}
+
+void
+pe_exe_build_sections (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
+{
+ pe_dll_id_target (bfd_get_target (abfd));
+ pe_output_file_set_long_section_names (abfd);
+ build_filler_bfd (0);
+ pe_output_file_set_long_section_names (filler_bfd);
+}
+
+void
+pe_dll_fill_sections (bfd *abfd, struct bfd_link_info *info)
+{
+ pe_dll_id_target (bfd_get_target (abfd));
+ pe_output_file_set_long_section_names (abfd);
+ image_base = pe_data (abfd)->pe_opthdr.ImageBase;
+
+ generate_reloc (abfd, info);
+ if (reloc_sz > 0)
+ {
+ bfd_set_section_size (filler_bfd, reloc_s, reloc_sz);
+
+ /* Resize the sections. */
+ lang_reset_memory_regions ();
+ lang_size_sections (NULL, TRUE);
+
+ /* Redo special stuff. */
+ ldemul_after_allocation ();
+
+ /* Do the assignments again. */
+ lang_do_assignments ();
+ }
+
+ fill_edata (abfd, info);
+
+ if (info->shared && !info->pie)
+ pe_data (abfd)->dll = 1;
+
+ edata_s->contents = edata_d;
+ reloc_s->contents = reloc_d;
+}
+
+void
+pe_exe_fill_sections (bfd *abfd, struct bfd_link_info *info)
+{
+ pe_dll_id_target (bfd_get_target (abfd));
+ pe_output_file_set_long_section_names (abfd);
+ image_base = pe_data (abfd)->pe_opthdr.ImageBase;
+
+ generate_reloc (abfd, info);
+ if (reloc_sz > 0)
+ {
+ bfd_set_section_size (filler_bfd, reloc_s, reloc_sz);
+
+ /* Resize the sections. */
+ lang_reset_memory_regions ();
+ lang_size_sections (NULL, TRUE);
+
+ /* Redo special stuff. */
+ ldemul_after_allocation ();
+
+ /* Do the assignments again. */
+ lang_do_assignments ();
+ }
+ reloc_s->contents = reloc_d;
+}
+
+bfd_boolean
+pe_bfd_is_dll (bfd *abfd)
+{
+ return (bfd_get_format (abfd) == bfd_object
+ && obj_pe (abfd)
+ && pe_data (abfd)->dll);
+}
diff --git a/binutils-2.21/ld/pe-dll.h b/binutils-2.21/ld/pe-dll.h
new file mode 100644
index 0000000..4697390
--- /dev/null
+++ b/binutils-2.21/ld/pe-dll.h
@@ -0,0 +1,74 @@
+/* pe-dll.h: Header file for routines used to build Windows DLLs.
+ Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007, 2008, 2009
+ Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef PE_DLL_H
+#define PE_DLL_H
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+#include "deffile.h"
+
+extern def_file *pe_def_file;
+extern int pe_dll_export_everything;
+extern int pe_dll_exclude_all_symbols;
+extern int pe_dll_do_default_excludes;
+extern int pe_dll_kill_ats;
+extern int pe_dll_stdcall_aliases;
+extern int pe_dll_warn_dup_exports;
+extern int pe_dll_compat_implib;
+extern int pe_dll_extra_pe_debug;
+extern int pe_use_nul_prefixed_import_tables;
+extern int pe_use_coff_long_section_names;
+extern int pe_leading_underscore;
+
+typedef enum { EXCLUDESYMS, EXCLUDELIBS, EXCLUDEFORIMPLIB } exclude_type;
+
+extern void pe_dll_id_target
+ (const char *);
+extern void pe_dll_add_excludes
+ (const char *, const exclude_type);
+extern void pe_dll_generate_def_file
+ (const char *);
+extern void pe_dll_generate_implib
+ (def_file *, const char *, struct bfd_link_info *);
+extern void pe_process_import_defs
+ (bfd *, struct bfd_link_info *);
+extern bfd_boolean pe_implied_import_dll
+ (const char *);
+extern void pe_dll_build_sections
+ (bfd *, struct bfd_link_info *);
+extern void pe_exe_build_sections
+ (bfd *, struct bfd_link_info *);
+extern void pe_dll_fill_sections
+ (bfd *, struct bfd_link_info *);
+extern void pe_exe_fill_sections
+ (bfd *, struct bfd_link_info *);
+extern void pe_walk_relocs_of_symbol
+ (struct bfd_link_info *, const char *, int (*) (arelent *, asection *));
+extern void pe_create_import_fixup
+ (arelent * rel, asection *, bfd_vma);
+extern bfd_boolean pe_bfd_is_dll
+ (bfd *);
+extern void pe_output_file_set_long_section_names
+ (bfd *);
+
+#endif /* PE_DLL_H */
diff --git a/binutils-2.21/ld/pep-dll.c b/binutils-2.21/ld/pep-dll.c
new file mode 100644
index 0000000..0e5e8b1
--- /dev/null
+++ b/binutils-2.21/ld/pep-dll.c
@@ -0,0 +1,66 @@
+/* Routines to help build PEPI-format DLLs (Win64 etc)
+ Copyright 2006, 2007, 2009 Free Software Foundation, Inc.
+ Written by Kai Tietz, OneVision Software GmbH&CoKg.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#define COFF_IMAGE_WITH_PE
+#define COFF_WITH_PE
+#define COFF_WITH_pex64
+
+/* Local defined globals. */
+#define pe_def_file pep_def_file
+#define pe_details pep_details
+#define pe_dll_compat_implib pep_dll_compat_implib
+#define pe_dll_extra_pe_debug pep_dll_extra_pe_debug
+#define pe_dll_export_everything pep_dll_export_everything
+#define pe_dll_exclude_all_symbols pep_dll_exclude_all_symbols
+#define pe_dll_do_default_excludes pep_dll_do_default_excludes
+#define pe_dll_kill_ats pep_dll_kill_ats
+#define pe_dll_stdcall_aliases pep_dll_stdcall_aliases
+#define pe_dll_warn_dup_exports pep_dll_warn_dup_exports
+#define pe_use_nul_prefixed_import_tables \
+ pep_use_nul_prefixed_import_tables
+#define pe_use_coff_long_section_names \
+ pep_use_coff_long_section_names
+#define pe_leading_underscore pep_leading_underscore
+
+/* External globals. */
+#define pe_data_import_dll pep_data_import_dll
+
+/* Unique global name for functions to avoid double defined symbols. */
+#define pe_create_import_fixup pep_create_import_fixup
+#define pe_dll_generate_def_file pep_dll_generate_def_file
+#define pe_process_import_defs pep_process_import_defs
+#define pe_dll_id_target pep_dll_id_target
+#define pe_implied_import_dll pep_implied_import_dll
+#define pe_dll_build_sections pep_dll_build_sections
+#define pe_exe_build_sections pep_exe_build_sections
+#define pe_dll_fill_sections pep_dll_fill_sections
+#define pe_exe_fill_sections pep_exe_fill_sections
+#define pe_dll_generate_implib pep_dll_generate_implib
+#define pe_dll_add_excludes pep_dll_add_excludes
+#define pe_walk_relocs_of_symbol pep_walk_relocs_of_symbol
+#define pe_bfd_is_dll pep_bfd_is_dll
+#define pe_output_file_set_long_section_names \
+ pep_output_file_set_long_section_names
+
+/* Uses x86_64 PE+. */
+#define pe_use_x86_64
+
+#include "pe-dll.c"
diff --git a/binutils-2.21/ld/pep-dll.h b/binutils-2.21/ld/pep-dll.h
new file mode 100644
index 0000000..1e7e3d6
--- /dev/null
+++ b/binutils-2.21/ld/pep-dll.h
@@ -0,0 +1,61 @@
+/* pep-dll.h: Header file for routines used to build Windows DLLs.
+ Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+ Written by Kai Tietz, OneVision Software GmbH&CoKg.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef PEP_DLL_H
+#define PEP_DLL_H
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+#include "deffile.h"
+
+extern def_file * pep_def_file;
+extern int pep_dll_export_everything;
+extern int pep_dll_exclude_all_symbols;
+extern int pep_dll_do_default_excludes;
+extern int pep_dll_kill_ats;
+extern int pep_dll_stdcall_aliases;
+extern int pep_dll_warn_dup_exports;
+extern int pep_dll_compat_implib;
+extern int pep_dll_extra_pe_debug;
+extern int pep_use_nul_prefixed_import_tables;
+extern int pep_use_coff_long_section_names;
+extern int pep_leading_underscore;
+
+typedef enum { EXCLUDESYMS, EXCLUDELIBS, EXCLUDEFORIMPLIB } exclude_type;
+
+extern void pep_dll_id_target (const char *);
+extern void pep_dll_add_excludes (const char *, const exclude_type);
+extern void pep_dll_generate_def_file (const char *);
+extern void pep_dll_generate_implib (def_file *, const char *, struct bfd_link_info *);
+extern void pep_process_import_defs (bfd *, struct bfd_link_info *);
+extern bfd_boolean pep_implied_import_dll (const char *);
+extern void pep_dll_build_sections (bfd *, struct bfd_link_info *);
+extern void pep_exe_build_sections (bfd *, struct bfd_link_info *);
+extern void pep_dll_fill_sections (bfd *, struct bfd_link_info *);
+extern void pep_exe_fill_sections (bfd *, struct bfd_link_info *);
+extern void pep_walk_relocs_of_symbol
+ (struct bfd_link_info *, const char *, int (*) (arelent *, asection *));
+extern void pep_create_import_fixup (arelent * rel, asection *, bfd_vma);
+extern bfd_boolean pep_bfd_is_dll (bfd *);
+extern void pep_output_file_set_long_section_names (bfd *);
+
+#endif /* PEP_DLL_H */
diff --git a/binutils-2.21/ld/plugin.c b/binutils-2.21/ld/plugin.c
new file mode 100644
index 0000000..79b39e8
--- /dev/null
+++ b/binutils-2.21/ld/plugin.c
@@ -0,0 +1,889 @@
+/* Plugin control for the GNU linker.
+ Copyright 2010 Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "libiberty.h"
+#include "bfd.h"
+#include "bfdlink.h"
+#include "bfdver.h"
+#include "ld.h"
+#include "ldmain.h"
+#include "ldmisc.h"
+#include "ldexp.h"
+#include "ldlang.h"
+#include "ldfile.h"
+#include "plugin.h"
+#include "plugin-api.h"
+#include "elf-bfd.h"
+#if !defined (HAVE_DLFCN_H) && defined (HAVE_WINDOWS_H)
+#include <Windows.h>
+#endif
+
+/* The suffix to append to the name of the real (claimed) object file
+ when generating a dummy BFD to hold the IR symbols sent from the
+ plugin. */
+#define IRONLY_SUFFIX ".ironly\004"
+
+/* This is sizeof an array of chars, not sizeof a const char *. We
+ also have to avoid inadvertently counting the trailing NUL. */
+#define IRONLY_SUFFIX_LEN (sizeof (IRONLY_SUFFIX) - 1)
+
+/* Stores a single argument passed to a plugin. */
+typedef struct plugin_arg
+{
+ struct plugin_arg *next;
+ const char *arg;
+} plugin_arg_t;
+
+/* Holds all details of a single plugin. */
+typedef struct plugin
+{
+ /* Next on the list of plugins, or NULL at end of chain. */
+ struct plugin *next;
+ /* The argument string given to --plugin. */
+ const char *name;
+ /* The shared library handle returned by dlopen. */
+ void *dlhandle;
+ /* The list of argument string given to --plugin-opt. */
+ plugin_arg_t *args;
+ /* Number of args in the list, for convenience. */
+ size_t n_args;
+ /* The plugin's event handlers. */
+ ld_plugin_claim_file_handler claim_file_handler;
+ ld_plugin_all_symbols_read_handler all_symbols_read_handler;
+ ld_plugin_cleanup_handler cleanup_handler;
+ /* TRUE if the cleanup handlers have been called. */
+ bfd_boolean cleanup_done;
+} plugin_t;
+
+/* The master list of all plugins. */
+static plugin_t *plugins_list = NULL;
+
+/* We keep a tail pointer for easy linking on the end. */
+static plugin_t **plugins_tail_chain_ptr = &plugins_list;
+
+/* The last plugin added to the list, for receiving args. */
+static plugin_t *last_plugin = NULL;
+
+/* The tail of the arg chain of the last plugin added to the list. */
+static plugin_arg_t **last_plugin_args_tail_chain_ptr = NULL;
+
+/* The plugin which is currently having a callback executed. */
+static plugin_t *called_plugin = NULL;
+
+/* Last plugin to cause an error, if any. */
+static const char *error_plugin = NULL;
+
+/* A hash table that records symbols referenced by non-IR files. Used
+ at get_symbols time to determine whether any prevailing defs from
+ IR files are referenced only from other IR files, so tthat we can
+ we can distinguish the LDPR_PREVAILING_DEF and LDPR_PREVAILING_DEF_IRONLY
+ cases when establishing symbol resolutions. */
+static struct bfd_hash_table *non_ironly_hash = NULL;
+
+/* Set at all symbols read time, to avoid recursively offering the plugin
+ its own newly-added input files and libs to claim. */
+static bfd_boolean no_more_claiming = FALSE;
+
+/* If the --allow-multiple-definition command-line option is active, we
+ have to disable it so that BFD always calls our hook, and simulate the
+ effect (when not resolving IR vs. real symbols) ourselves by ensuring
+ TRUE is returned from the hook. */
+static bfd_boolean plugin_cached_allow_multiple_defs = FALSE;
+
+/* List of tags to set in the constant leading part of the tv array. */
+static const enum ld_plugin_tag tv_header_tags[] =
+{
+ LDPT_MESSAGE,
+ LDPT_API_VERSION,
+ LDPT_GNU_LD_VERSION,
+ LDPT_LINKER_OUTPUT,
+ LDPT_OUTPUT_NAME,
+ LDPT_REGISTER_CLAIM_FILE_HOOK,
+ LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK,
+ LDPT_REGISTER_CLEANUP_HOOK,
+ LDPT_ADD_SYMBOLS,
+ LDPT_GET_INPUT_FILE,
+ LDPT_RELEASE_INPUT_FILE,
+ LDPT_GET_SYMBOLS,
+ LDPT_ADD_INPUT_FILE,
+ LDPT_ADD_INPUT_LIBRARY,
+ LDPT_SET_EXTRA_LIBRARY_PATH
+};
+
+/* How many entries in the constant leading part of the tv array. */
+static const size_t tv_header_size = ARRAY_SIZE (tv_header_tags);
+
+#if !defined (HAVE_DLFCN_H) && defined (HAVE_WINDOWS_H)
+
+#define RTLD_NOW 0 /* Dummy value. */
+
+static void *
+dlopen (const char *file, int mode ATTRIBUTE_UNUSED)
+{
+ return LoadLibrary (file);
+}
+
+static void *
+dlsym (void *handle, const char *name)
+{
+ return GetProcAddress (handle, name);
+}
+
+static int
+dlclose (void *handle)
+{
+ FreeLibrary (handle);
+ return 0;
+}
+
+#endif /* !defined (HAVE_DLFCN_H) && defined (HAVE_WINDOWS_H) */
+
+/* Helper function for exiting with error status. */
+static int
+set_plugin_error (const char *plugin)
+{
+ error_plugin = plugin;
+ return -1;
+}
+
+/* Test if an error occurred. */
+static bfd_boolean
+plugin_error_p (void)
+{
+ return error_plugin != NULL;
+}
+
+/* Return name of plugin which caused an error if any. */
+const char *
+plugin_error_plugin (void)
+{
+ return error_plugin ? error_plugin : _("<no plugin>");
+}
+
+/* Handle -plugin arg: find and load plugin, or return error. */
+int
+plugin_opt_plugin (const char *plugin)
+{
+ plugin_t *newplug;
+
+ newplug = xmalloc (sizeof *newplug);
+ memset (newplug, 0, sizeof *newplug);
+ newplug->name = plugin;
+ newplug->dlhandle = dlopen (plugin, RTLD_NOW);
+ if (!newplug->dlhandle)
+ return set_plugin_error (plugin);
+
+ /* Chain on end, so when we run list it is in command-line order. */
+ *plugins_tail_chain_ptr = newplug;
+ plugins_tail_chain_ptr = &newplug->next;
+
+ /* Record it as current plugin for receiving args. */
+ last_plugin = newplug;
+ last_plugin_args_tail_chain_ptr = &newplug->args;
+ return 0;
+}
+
+/* Accumulate option arguments for last-loaded plugin, or return
+ error if none. */
+int
+plugin_opt_plugin_arg (const char *arg)
+{
+ plugin_arg_t *newarg;
+
+ if (!last_plugin)
+ return set_plugin_error (_("<no plugin>"));
+
+ newarg = xmalloc (sizeof *newarg);
+ newarg->arg = arg;
+ newarg->next = NULL;
+
+ /* Chain on end to preserve command-line order. */
+ *last_plugin_args_tail_chain_ptr = newarg;
+ last_plugin_args_tail_chain_ptr = &newarg->next;
+ last_plugin->n_args++;
+ return 0;
+}
+
+/* Create a dummy BFD. */
+bfd *
+plugin_get_ir_dummy_bfd (const char *name, bfd *srctemplate)
+{
+ asection *sec;
+ bfd *abfd;
+
+ bfd_use_reserved_id = 1;
+ abfd = bfd_create (concat (name, IRONLY_SUFFIX, (const char *)NULL),
+ srctemplate);
+ bfd_set_arch_info (abfd, bfd_get_arch_info (srctemplate));
+ bfd_make_writable (abfd);
+ /* Create a minimal set of sections to own the symbols. */
+ sec = bfd_make_section_old_way (abfd, ".text");
+ bfd_set_section_flags (abfd, sec,
+ (SEC_CODE | SEC_HAS_CONTENTS | SEC_READONLY
+ | SEC_ALLOC | SEC_LOAD | SEC_KEEP));
+ sec->output_section = sec;
+ sec->output_offset = 0;
+ return abfd;
+}
+
+/* Check if the BFD passed in is an IR dummy object file. */
+static bfd_boolean
+is_ir_dummy_bfd (const bfd *abfd)
+{
+ size_t namlen;
+
+ if (abfd == NULL)
+ return FALSE;
+ namlen = strlen (abfd->filename);
+ if (namlen < IRONLY_SUFFIX_LEN)
+ return FALSE;
+ return !strcmp (abfd->filename + namlen - IRONLY_SUFFIX_LEN, IRONLY_SUFFIX);
+}
+
+/* Helpers to convert between BFD and GOLD symbol formats. */
+static enum ld_plugin_status
+asymbol_from_plugin_symbol (bfd *abfd, asymbol *asym,
+ const struct ld_plugin_symbol *ldsym)
+{
+ flagword flags = BSF_NO_FLAGS;
+ struct bfd_section *section;
+
+ asym->the_bfd = abfd;
+ asym->name = ldsym->version
+ ? concat (ldsym->name, "@", ldsym->version, NULL)
+ : ldsym->name;
+ asym->value = 0;
+ switch (ldsym->def)
+ {
+ case LDPK_WEAKDEF:
+ flags = BSF_WEAK;
+ /* FALLTHRU */
+ case LDPK_DEF:
+ flags |= BSF_GLOBAL;
+ section = bfd_get_section_by_name (abfd, ".text");
+ break;
+
+ case LDPK_WEAKUNDEF:
+ flags = BSF_WEAK;
+ /* FALLTHRU */
+ case LDPK_UNDEF:
+ section = bfd_und_section_ptr;
+ break;
+
+ case LDPK_COMMON:
+ flags = BSF_GLOBAL;
+ section = bfd_com_section_ptr;
+ asym->value = ldsym->size;
+ break;
+
+ default:
+ return LDPS_ERR;
+ }
+ asym->flags = flags;
+ asym->section = section;
+
+ /* Visibility only applies on ELF targets. */
+ if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
+ {
+ elf_symbol_type *elfsym = elf_symbol_from (abfd, asym);
+ if (!elfsym)
+ einfo (_("%P%F: %s: non-ELF symbol in ELF BFD!"), asym->name);
+ elfsym->internal_elf_sym.st_other &= ~3;
+ elfsym->internal_elf_sym.st_other |= ldsym->visibility;
+ }
+
+ return LDPS_OK;
+}
+
+/* Register a claim-file handler. */
+static enum ld_plugin_status
+register_claim_file (ld_plugin_claim_file_handler handler)
+{
+ ASSERT (called_plugin);
+ called_plugin->claim_file_handler = handler;
+ return LDPS_OK;
+}
+
+/* Register an all-symbols-read handler. */
+static enum ld_plugin_status
+register_all_symbols_read (ld_plugin_all_symbols_read_handler handler)
+{
+ ASSERT (called_plugin);
+ called_plugin->all_symbols_read_handler = handler;
+ return LDPS_OK;
+}
+
+/* Register a cleanup handler. */
+static enum ld_plugin_status
+register_cleanup (ld_plugin_cleanup_handler handler)
+{
+ ASSERT (called_plugin);
+ called_plugin->cleanup_handler = handler;
+ return LDPS_OK;
+}
+
+/* Add symbols from a plugin-claimed input file. */
+static enum ld_plugin_status
+add_symbols (void *handle, int nsyms, const struct ld_plugin_symbol *syms)
+{
+ asymbol **symptrs;
+ bfd *abfd = handle;
+ int n;
+ ASSERT (called_plugin);
+ symptrs = xmalloc (nsyms * sizeof *symptrs);
+ for (n = 0; n < nsyms; n++)
+ {
+ enum ld_plugin_status rv;
+ asymbol *bfdsym = bfd_make_empty_symbol (abfd);
+ symptrs[n] = bfdsym;
+ rv = asymbol_from_plugin_symbol (abfd, bfdsym, syms + n);
+ if (rv != LDPS_OK)
+ return rv;
+ }
+ bfd_set_symtab (abfd, symptrs, nsyms);
+ return LDPS_OK;
+}
+
+/* Get the input file information with an open (possibly re-opened)
+ file descriptor. */
+static enum ld_plugin_status
+get_input_file (const void *handle, struct ld_plugin_input_file *file)
+{
+ ASSERT (called_plugin);
+ handle = handle;
+ file = file;
+ return LDPS_ERR;
+}
+
+/* Release the input file. */
+static enum ld_plugin_status
+release_input_file (const void *handle)
+{
+ ASSERT (called_plugin);
+ handle = handle;
+ return LDPS_ERR;
+}
+
+/* Return TRUE if a defined symbol might be reachable from outside the
+ universe of claimed objects. */
+static inline bfd_boolean
+is_visible_from_outside (struct ld_plugin_symbol *lsym, asection *section,
+ struct bfd_link_hash_entry *blhe)
+{
+ /* Section's owner may be NULL if it is the absolute
+ section, fortunately is_ir_dummy_bfd handles that. */
+ if (!is_ir_dummy_bfd (section->owner))
+ return TRUE;
+ if (link_info.relocatable)
+ return TRUE;
+ if (link_info.export_dynamic || link_info.shared)
+ {
+ /* Only ELF symbols really have visibility. */
+ if (bfd_get_flavour (link_info.output_bfd) == bfd_target_elf_flavour)
+ {
+ struct elf_link_hash_entry *el = (struct elf_link_hash_entry *)blhe;
+ int vis = ELF_ST_VISIBILITY (el->other);
+ return vis == STV_DEFAULT || vis == STV_PROTECTED;
+ }
+ /* On non-ELF targets, we can safely make inferences by considering
+ what visibility the plugin would have liked to apply when it first
+ sent us the symbol. During ELF symbol processing, visibility only
+ ever becomes more restrictive, not less, when symbols are merged,
+ so this is a conservative estimate; it may give false positives,
+ declaring something visible from outside when it in fact would
+ not have been, but this will only lead to missed optimisation
+ opportunities during LTRANS at worst; it will not give false
+ negatives, which can lead to the disastrous conclusion that the
+ related symbol is IRONLY. (See GCC PR46319 for an example.) */
+ return lsym->visibility == LDPV_DEFAULT
+ || lsym->visibility == LDPV_PROTECTED;
+ }
+ return FALSE;
+}
+
+/* Get the symbol resolution info for a plugin-claimed input file. */
+static enum ld_plugin_status
+get_symbols (const void *handle, int nsyms, struct ld_plugin_symbol *syms)
+{
+ const bfd *abfd = handle;
+ int n;
+ ASSERT (called_plugin);
+ for (n = 0; n < nsyms; n++)
+ {
+ struct bfd_link_hash_entry *blhe;
+ bfd_boolean ironly;
+ asection *owner_sec;
+
+ blhe = bfd_link_hash_lookup (link_info.hash, syms[n].name,
+ FALSE, FALSE, TRUE);
+ if (!blhe)
+ {
+ syms[n].resolution = LDPR_UNKNOWN;
+ continue;
+ }
+
+ /* Determine resolution from blhe type and symbol's original type. */
+ if (blhe->type == bfd_link_hash_undefined
+ || blhe->type == bfd_link_hash_undefweak)
+ {
+ syms[n].resolution = LDPR_UNDEF;
+ continue;
+ }
+ if (blhe->type != bfd_link_hash_defined
+ && blhe->type != bfd_link_hash_defweak
+ && blhe->type != bfd_link_hash_common)
+ {
+ /* We should not have a new, indirect or warning symbol here. */
+ einfo ("%P%F: %s: plugin symbol table corrupt (sym type %d)",
+ called_plugin->name, blhe->type);
+ }
+
+ /* Find out which section owns the symbol. Since it's not undef,
+ it must have an owner; if it's not a common symbol, both defs
+ and weakdefs keep it in the same place. */
+ owner_sec = (blhe->type == bfd_link_hash_common)
+ ? blhe->u.c.p->section
+ : blhe->u.def.section;
+
+ /* We need to know if the sym is referenced from non-IR files. Or
+ even potentially-referenced, perhaps in a future final link if
+ this is a partial one, perhaps dynamically at load-time if the
+ symbol is externally visible. */
+ ironly = !is_visible_from_outside (&syms[n], owner_sec, blhe)
+ && !bfd_hash_lookup (non_ironly_hash, syms[n].name, FALSE, FALSE);
+
+ /* If it was originally undefined or common, then it has been
+ resolved; determine how. */
+ if (syms[n].def == LDPK_UNDEF || syms[n].def == LDPK_WEAKUNDEF
+ || syms[n].def == LDPK_COMMON)
+ {
+ if (owner_sec->owner == link_info.output_bfd)
+ syms[n].resolution = LDPR_RESOLVED_EXEC;
+ else if (owner_sec->owner == abfd)
+ syms[n].resolution = (ironly)
+ ? LDPR_PREVAILING_DEF_IRONLY
+ : LDPR_PREVAILING_DEF;
+ else if (is_ir_dummy_bfd (owner_sec->owner))
+ syms[n].resolution = LDPR_RESOLVED_IR;
+ else if (owner_sec->owner->flags & DYNAMIC)
+ syms[n].resolution = LDPR_RESOLVED_DYN;
+ else
+ syms[n].resolution = LDPR_RESOLVED_EXEC;
+ continue;
+ }
+
+ /* Was originally def, or weakdef. Does it prevail? If the
+ owner is the original dummy bfd that supplied it, then this
+ is the definition that has prevailed. */
+ if (owner_sec->owner == link_info.output_bfd)
+ syms[n].resolution = LDPR_PREEMPTED_REG;
+ else if (owner_sec->owner == abfd)
+ {
+ syms[n].resolution = (ironly)
+ ? LDPR_PREVAILING_DEF_IRONLY
+ : LDPR_PREVAILING_DEF;
+ continue;
+ }
+
+ /* Was originally def, weakdef, or common, but has been pre-empted. */
+ syms[n].resolution = is_ir_dummy_bfd (owner_sec->owner)
+ ? LDPR_PREEMPTED_IR
+ : LDPR_PREEMPTED_REG;
+ }
+ return LDPS_OK;
+}
+
+/* Add a new (real) input file generated by a plugin. */
+static enum ld_plugin_status
+add_input_file (const char *pathname)
+{
+ ASSERT (called_plugin);
+ if (!lang_add_input_file (xstrdup (pathname), lang_input_file_is_file_enum,
+ NULL))
+ return LDPS_ERR;
+ return LDPS_OK;
+}
+
+/* Add a new (real) library required by a plugin. */
+static enum ld_plugin_status
+add_input_library (const char *pathname)
+{
+ ASSERT (called_plugin);
+ if (!lang_add_input_file (xstrdup (pathname), lang_input_file_is_l_enum,
+ NULL))
+ return LDPS_ERR;
+ return LDPS_OK;
+}
+
+/* Set the extra library path to be used by libraries added via
+ add_input_library. */
+static enum ld_plugin_status
+set_extra_library_path (const char *path)
+{
+ ASSERT (called_plugin);
+ ldfile_add_library_path (xstrdup (path), FALSE);
+ return LDPS_OK;
+}
+
+/* Issue a diagnostic message from a plugin. */
+static enum ld_plugin_status
+message (int level, const char *format, ...)
+{
+ va_list args;
+ va_start (args, format);
+
+ switch (level)
+ {
+ case LDPL_INFO:
+ vfinfo (stdout, format, args, FALSE);
+ break;
+ case LDPL_WARNING:
+ vfinfo (stdout, format, args, TRUE);
+ break;
+ case LDPL_FATAL:
+ case LDPL_ERROR:
+ default:
+ {
+ char *newfmt = ACONCAT ((level == LDPL_FATAL ? "%F" : "%X",
+ format, NULL));
+ vfinfo (stderr, newfmt, args, TRUE);
+ }
+ break;
+ }
+
+ va_end (args);
+ return LDPS_OK;
+}
+
+/* Helper to size leading part of tv array and set it up. */
+static size_t
+set_tv_header (struct ld_plugin_tv *tv)
+{
+ size_t i;
+
+ /* Version info. */
+ static const unsigned int major = (unsigned)(BFD_VERSION / 100000000UL);
+ static const unsigned int minor = (unsigned)(BFD_VERSION / 1000000UL) % 100;
+
+ if (!tv)
+ return tv_header_size;
+
+ for (i = 0; i < tv_header_size; i++)
+ {
+ tv[i].tv_tag = tv_header_tags[i];
+#define TVU(x) tv[i].tv_u.tv_ ## x
+ switch (tv[i].tv_tag)
+ {
+ case LDPT_MESSAGE:
+ TVU(message) = message;
+ break;
+ case LDPT_API_VERSION:
+ TVU(val) = LD_PLUGIN_API_VERSION;
+ break;
+ case LDPT_GNU_LD_VERSION:
+ TVU(val) = major * 100 + minor;
+ break;
+ case LDPT_LINKER_OUTPUT:
+ TVU(val) = link_info.relocatable ? LDPO_REL
+ : (link_info.shared ? LDPO_DYN : LDPO_EXEC);
+ break;
+ case LDPT_OUTPUT_NAME:
+ TVU(string) = output_filename;
+ break;
+ case LDPT_REGISTER_CLAIM_FILE_HOOK:
+ TVU(register_claim_file) = register_claim_file;
+ break;
+ case LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK:
+ TVU(register_all_symbols_read) = register_all_symbols_read;
+ break;
+ case LDPT_REGISTER_CLEANUP_HOOK:
+ TVU(register_cleanup) = register_cleanup;
+ break;
+ case LDPT_ADD_SYMBOLS:
+ TVU(add_symbols) = add_symbols;
+ break;
+ case LDPT_GET_INPUT_FILE:
+ TVU(get_input_file) = get_input_file;
+ break;
+ case LDPT_RELEASE_INPUT_FILE:
+ TVU(release_input_file) = release_input_file;
+ break;
+ case LDPT_GET_SYMBOLS:
+ TVU(get_symbols) = get_symbols;
+ break;
+ case LDPT_ADD_INPUT_FILE:
+ TVU(add_input_file) = add_input_file;
+ break;
+ case LDPT_ADD_INPUT_LIBRARY:
+ TVU(add_input_library) = add_input_library;
+ break;
+ case LDPT_SET_EXTRA_LIBRARY_PATH:
+ TVU(set_extra_library_path) = set_extra_library_path;
+ break;
+ default:
+ /* Added a new entry to the array without adding
+ a new case to set up its value is a bug. */
+ FAIL ();
+ }
+#undef TVU
+ }
+ return tv_header_size;
+}
+
+/* Append the per-plugin args list and trailing LDPT_NULL to tv. */
+static void
+set_tv_plugin_args (plugin_t *plugin, struct ld_plugin_tv *tv)
+{
+ plugin_arg_t *arg = plugin->args;
+ while (arg)
+ {
+ tv->tv_tag = LDPT_OPTION;
+ tv->tv_u.tv_string = arg->arg;
+ arg = arg->next;
+ tv++;
+ }
+ tv->tv_tag = LDPT_NULL;
+ tv->tv_u.tv_val = 0;
+}
+
+/* Return true if any plugins are active this run. Only valid
+ after options have been processed. */
+bfd_boolean
+plugin_active_plugins_p (void)
+{
+ return plugins_list != NULL;
+}
+
+/* Load up and initialise all plugins after argument parsing. */
+int
+plugin_load_plugins (void)
+{
+ struct ld_plugin_tv *my_tv;
+ unsigned int max_args = 0;
+ plugin_t *curplug = plugins_list;
+
+ /* If there are no plugins, we need do nothing this run. */
+ if (!curplug)
+ return 0;
+
+ /* First pass over plugins to find max # args needed so that we
+ can size and allocate the tv array. */
+ while (curplug)
+ {
+ if (curplug->n_args > max_args)
+ max_args = curplug->n_args;
+ curplug = curplug->next;
+ }
+
+ /* Allocate tv array and initialise constant part. */
+ my_tv = xmalloc ((max_args + 1 + tv_header_size) * sizeof *my_tv);
+ set_tv_header (my_tv);
+
+ /* Pass over plugins again, activating them. */
+ curplug = plugins_list;
+ while (curplug)
+ {
+ enum ld_plugin_status rv;
+ ld_plugin_onload onloadfn = dlsym (curplug->dlhandle, "onload");
+ if (!onloadfn)
+ onloadfn = dlsym (curplug->dlhandle, "_onload");
+ if (!onloadfn)
+ return set_plugin_error (curplug->name);
+ set_tv_plugin_args (curplug, &my_tv[tv_header_size]);
+ called_plugin = curplug;
+ rv = (*onloadfn) (my_tv);
+ called_plugin = NULL;
+ if (rv != LDPS_OK)
+ return set_plugin_error (curplug->name);
+ curplug = curplug->next;
+ }
+
+ /* Since plugin(s) inited ok, assume they're going to want symbol
+ resolutions, which needs us to track which symbols are referenced
+ by non-IR files using the linker's notice callback. */
+ link_info.notice_all = TRUE;
+
+ return 0;
+}
+
+/* Call 'claim file' hook for all plugins. */
+int
+plugin_call_claim_file (const struct ld_plugin_input_file *file, int *claimed)
+{
+ plugin_t *curplug = plugins_list;
+ *claimed = FALSE;
+ if (no_more_claiming)
+ return 0;
+ while (curplug && !*claimed)
+ {
+ if (curplug->claim_file_handler)
+ {
+ enum ld_plugin_status rv;
+ called_plugin = curplug;
+ rv = (*curplug->claim_file_handler) (file, claimed);
+ called_plugin = NULL;
+ if (rv != LDPS_OK)
+ set_plugin_error (curplug->name);
+ }
+ curplug = curplug->next;
+ }
+ return plugin_error_p () ? -1 : 0;
+}
+
+/* Call 'all symbols read' hook for all plugins. */
+int
+plugin_call_all_symbols_read (void)
+{
+ plugin_t *curplug = plugins_list;
+
+ /* Disable any further file-claiming. */
+ no_more_claiming = TRUE;
+
+ /* If --allow-multiple-definition is in effect, we need to disable it,
+ as the plugin infrastructure relies on the multiple_definition
+ callback to swap out the dummy IR-only BFDs for new real ones
+ when it starts opening the files added during this callback. */
+ plugin_cached_allow_multiple_defs = link_info.allow_multiple_definition;
+ link_info.allow_multiple_definition = FALSE;
+
+ while (curplug)
+ {
+ if (curplug->all_symbols_read_handler)
+ {
+ enum ld_plugin_status rv;
+ called_plugin = curplug;
+ rv = (*curplug->all_symbols_read_handler) ();
+ called_plugin = NULL;
+ if (rv != LDPS_OK)
+ set_plugin_error (curplug->name);
+ }
+ curplug = curplug->next;
+ }
+ return plugin_error_p () ? -1 : 0;
+}
+
+/* Call 'cleanup' hook for all plugins. */
+int
+plugin_call_cleanup (void)
+{
+ plugin_t *curplug = plugins_list;
+ while (curplug)
+ {
+ if (curplug->cleanup_handler && !curplug->cleanup_done)
+ {
+ enum ld_plugin_status rv;
+ curplug->cleanup_done = TRUE;
+ called_plugin = curplug;
+ rv = (*curplug->cleanup_handler) ();
+ called_plugin = NULL;
+ if (rv != LDPS_OK)
+ set_plugin_error (curplug->name);
+ dlclose (curplug->dlhandle);
+ }
+ curplug = curplug->next;
+ }
+ return plugin_error_p () ? -1 : 0;
+}
+
+/* Lazily init the non_ironly hash table. */
+static void
+init_non_ironly_hash (void)
+{
+ if (non_ironly_hash == NULL)
+ {
+ non_ironly_hash =
+ (struct bfd_hash_table *) xmalloc (sizeof (struct bfd_hash_table));
+ if (!bfd_hash_table_init_n (non_ironly_hash,
+ bfd_hash_newfunc,
+ sizeof (struct bfd_hash_entry),
+ 61))
+ einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
+ }
+}
+
+/* To determine which symbols should be resolved LDPR_PREVAILING_DEF
+ and which LDPR_PREVAILING_DEF_IRONLY, we notice all the symbols as
+ the linker adds them to the linker hash table. If we see a symbol
+ being referenced from a non-IR file, we add it to the non_ironly hash
+ table. If we can't find it there at get_symbols time, we know that
+ it was referenced only by IR files. We have to notice_all symbols,
+ because we won't necessarily know until later which ones will be
+ contributed by IR files. */
+bfd_boolean
+plugin_notice (struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ const char *name, bfd *abfd,
+ asection *section, bfd_vma value ATTRIBUTE_UNUSED)
+{
+ bfd_boolean is_ref = bfd_is_und_section (section);
+ bfd_boolean is_dummy = is_ir_dummy_bfd (abfd);
+ init_non_ironly_hash ();
+ /* We only care about refs, not defs, indicated by section pointing
+ to the undefined section (according to the bfd linker notice callback
+ interface definition). */
+ if (is_ref && !is_dummy)
+ {
+ /* This is a ref from a non-IR file, so note the ref'd symbol
+ in the non-IR-only hash. */
+ if (!bfd_hash_lookup (non_ironly_hash, name, TRUE, TRUE))
+ einfo (_("%P%X: %s: hash table failure adding symbol %s"),
+ abfd->filename, name);
+ }
+ else if (!is_ref && is_dummy)
+ {
+ /* No further processing since this is a def from an IR dummy BFD. */
+ return FALSE;
+ }
+
+ /* Continue with cref/nocrossref/trace-sym processing. */
+ return TRUE;
+}
+
+/* When we add new object files to the link at all symbols read time,
+ these contain the real code and symbols generated from the IR files,
+ and so duplicate all the definitions already supplied by the dummy
+ IR-only BFDs that we created at claim files time. We use the linker's
+ multiple-definitions callback hook to fix up the clash, discarding
+ the symbol from the IR-only BFD in favour of the symbol from the
+ real BFD. We return true if this was not-really-a-clash because
+ we've fixed it up, or anyway if --allow-multiple-definition was in
+ effect (before we disabled it to ensure we got called back). */
+bfd_boolean
+plugin_multiple_definition (struct bfd_link_info *info, const char *name,
+ bfd *obfd, asection *osec ATTRIBUTE_UNUSED,
+ bfd_vma oval ATTRIBUTE_UNUSED,
+ bfd *nbfd, asection *nsec, bfd_vma nval)
+{
+ if (is_ir_dummy_bfd (obfd))
+ {
+ struct bfd_link_hash_entry *blhe = bfd_link_hash_lookup (info->hash,
+ name, FALSE, FALSE, FALSE);
+ if (!blhe)
+ einfo (_("%P%X: %s: can't find IR symbol '%s'"), nbfd->filename,
+ name);
+ else if (blhe->type != bfd_link_hash_defined)
+ einfo (_("%P%x: %s: bad IR symbol type %d"), name, blhe->type);
+ /* Replace it with new details. */
+ blhe->u.def.section = nsec;
+ blhe->u.def.value = nval;
+ return TRUE;
+ }
+ return plugin_cached_allow_multiple_defs;
+}
diff --git a/binutils-2.21/ld/plugin.h b/binutils-2.21/ld/plugin.h
new file mode 100644
index 0000000..b79e739
--- /dev/null
+++ b/binutils-2.21/ld/plugin.h
@@ -0,0 +1,74 @@
+/* Plugin control for the GNU linker.
+ Copyright 2010 Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef GLD_PLUGIN_H
+#define GLD_PLUGIN_H
+
+
+/* This is the only forward declaration we need to avoid having
+ to include the plugin-api.h header in order to use this file. */
+struct ld_plugin_input_file;
+
+/* Handle -plugin arg: find and load plugin, or return error. */
+extern int plugin_opt_plugin (const char *plugin);
+
+/* Accumulate option arguments for last-loaded plugin, or return
+ error if none. */
+extern int plugin_opt_plugin_arg (const char *arg);
+
+/* Return true if any plugins are active this run. Only valid
+ after options have been processed. */
+extern bfd_boolean plugin_active_plugins_p (void);
+
+/* Load up and initialise all plugins after argument parsing. */
+extern int plugin_load_plugins (void);
+
+/* Return name of plugin which caused an error in any of the above. */
+extern const char *plugin_error_plugin (void);
+
+/* Call 'claim file' hook for all plugins. */
+extern int plugin_call_claim_file (const struct ld_plugin_input_file *file,
+ int *claimed);
+
+/* Call 'all symbols read' hook for all plugins. */
+extern int plugin_call_all_symbols_read (void);
+
+/* Call 'cleanup' hook for all plugins. */
+extern int plugin_call_cleanup (void);
+
+/* Generate a dummy BFD to represent an IR file, for any callers of
+ plugin_call_claim_file to use as the handle in the ld_plugin_input_file
+ struct that they build to pass in. The BFD is initially writable, so
+ that symbols can be added to it; it must be made readable after the
+ add_symbols hook has been called so that it can be read when linking. */
+extern bfd *plugin_get_ir_dummy_bfd (const char *name, bfd *template);
+
+/* Notice-symbol bfd linker callback hook. */
+extern bfd_boolean plugin_notice (struct bfd_link_info *info,
+ const char *name, bfd *abfd, asection *section,
+ bfd_vma value);
+
+/* Multiple-definition bfd linker callback hook. */
+extern bfd_boolean plugin_multiple_definition (struct bfd_link_info *info,
+ const char *name,
+ bfd *obfd, asection *osec, bfd_vma oval,
+ bfd *nbfd, asection *nsec, bfd_vma nval);
+
+#endif /* !def GLD_PLUGIN_H */
diff --git a/binutils-2.21/ld/po/Make-in b/binutils-2.21/ld/po/Make-in
new file mode 100644
index 0000000..5e0798b
--- /dev/null
+++ b/binutils-2.21/ld/po/Make-in
@@ -0,0 +1,258 @@
+# Makefile for program source directory in GNU NLS utilities package.
+# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+# Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc.
+#
+# This file may be copied and used freely without restrictions. It can
+# be used in projects which are not available under the GNU Public License
+# but which still want to provide support for the GNU gettext functionality.
+# Please note that the actual code is *not* freely available.
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+top_builddir = @top_builddir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datadir = $(prefix)/@DATADIRNAME@
+localedir = $(datadir)/locale
+gnulocaledir = $(prefix)/share/locale
+gettextsrcdir = $(prefix)/share/gettext/po
+subdir = po
+
+DESTDIR =
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+
+CC = @CC@
+GENCAT = @GENCAT@
+GMSGFMT = PATH=../src:$$PATH @GMSGFMT@
+MSGFMT = @MSGFMT@
+XGETTEXT = PATH=../src:$$PATH @XGETTEXT@
+MSGMERGE = PATH=../src:$$PATH msgmerge
+
+DEFS = @DEFS@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+
+INCLUDES = -I.. -I$(top_srcdir)/intl
+
+COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
+
+SOURCES = cat-id-tbl.c
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \
+stamp-cat-id $(POFILES) $(GMOFILES) $(SOURCES)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+INSTOBJEXT = @INSTOBJEXT@
+
+.SUFFIXES:
+.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat
+
+.c.o:
+ $(COMPILE) $<
+
+.po.pox:
+ $(MAKE) $(PACKAGE).pot
+ $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox
+
+.po.mo:
+ $(MSGFMT) -o $@ $<
+
+.po.gmo:
+ file=`echo $* | sed 's,.*/,,'`.gmo \
+ && rm -f $$file && $(GMSGFMT) -o $$file $<
+
+.po.cat:
+ sed -f ../intl/po2msg.sed < $< > $*.msg \
+ && rm -f $@ && $(GENCAT) $@ $*.msg
+
+
+all: all-@USE_NLS@
+
+all-yes: $(CATALOGS) @MAINT@ $(PACKAGE).pot
+all-no:
+
+$(srcdir)/$(PACKAGE).pot: $(POTFILES)
+ $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \
+ --add-comments -C --keyword=_ --keyword=N_ \
+ --msgid-bugs-address=bug-binutils@gnu.org \
+ --files-from=$(srcdir)/POTFILES.in
+ rm -f $(srcdir)/$(PACKAGE).pot
+ mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot
+
+$(srcdir)/cat-id-tbl.c: stamp-cat-id; @:
+$(srcdir)/stamp-cat-id: $(PACKAGE).pot
+ rm -f cat-id-tbl.tmp
+ sed -f ../intl/po2tbl.sed $(srcdir)/$(PACKAGE).pot \
+ | sed -e "s/@PACKAGE NAME@/$(PACKAGE)/" > cat-id-tbl.tmp
+ if cmp -s cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; then \
+ rm cat-id-tbl.tmp; \
+ else \
+ echo cat-id-tbl.c changed; \
+ rm -f $(srcdir)/cat-id-tbl.c; \
+ mv cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; \
+ fi
+ cd $(srcdir) && rm -f stamp-cat-id && echo timestamp > stamp-cat-id
+
+
+install: install-exec install-data
+install-exec:
+install-info:
+install-html:
+install-pdf:
+install-data: install-data-@USE_NLS@
+install-data-no: all
+install-data-yes: all
+ if test -r $(MKINSTALLDIRS); then \
+ $(MKINSTALLDIRS) $(DESTDIR)$(datadir); \
+ else \
+ $(top_srcdir)/mkinstalldirs $(DESTDIR)$(datadir); \
+ fi
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ case "$$cat" in \
+ *.gmo) destdir=$(gnulocaledir);; \
+ *) destdir=$(localedir);; \
+ esac; \
+ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+ dir=$(DESTDIR)$$destdir/$$lang/LC_MESSAGES; \
+ if test -r $(MKINSTALLDIRS); then \
+ $(MKINSTALLDIRS) $$dir; \
+ else \
+ $(top_srcdir)/mkinstalldirs $$dir; \
+ fi; \
+ if test -r $$cat; then \
+ $(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
+ echo "installing $$cat as $$dir/$(PACKAGE)$(INSTOBJEXT)"; \
+ else \
+ $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
+ echo "installing $(srcdir)/$$cat as" \
+ "$$dir/$(PACKAGE)$(INSTOBJEXT)"; \
+ fi; \
+ if test -r $$cat.m; then \
+ $(INSTALL_DATA) $$cat.m $$dir/$(PACKAGE)$(INSTOBJEXT).m; \
+ echo "installing $$cat.m as $$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
+ else \
+ if test -r $(srcdir)/$$cat.m ; then \
+ $(INSTALL_DATA) $(srcdir)/$$cat.m \
+ $$dir/$(PACKAGE)$(INSTOBJEXT).m; \
+ echo "installing $(srcdir)/$$cat as" \
+ "$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
+ else \
+ true; \
+ fi; \
+ fi; \
+ done
+ if test "$(PACKAGE)" = "gettext"; then \
+ if test -r $(MKINSTALLDIRS); then \
+ $(MKINSTALLDIRS) $(DESTDIR)$(gettextsrcdir); \
+ else \
+ $(top_srcdir)/mkinstalldirs $(DESTDIR)$(gettextsrcdir); \
+ fi; \
+ $(INSTALL_DATA) $(srcdir)/Makefile.in.in \
+ $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \
+ else \
+ : ; \
+ fi
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall:
+ catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+ rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \
+ rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \
+ rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \
+ rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \
+ done
+ rm -f $(DESTDIR)$(gettextsrcdir)/po-Makefile.in.in
+
+check: all
+
+cat-id-tbl.o: ../intl/libgettext.h
+
+html dvi pdf ps info tags TAGS ID:
+
+mostlyclean:
+ rm -f core core.* *.pox $(PACKAGE).po *.old.po cat-id-tbl.tmp
+ rm -fr *.o
+
+clean: mostlyclean
+
+distclean: clean
+ rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m
+
+maintainer-clean: distclean
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+ rm -f $(GMOFILES)
+
+distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir: update-po $(DISTFILES)
+ dists="$(DISTFILES)"; \
+ for file in $$dists; do \
+ ln $(srcdir)/$$file $(distdir) 2> /dev/null \
+ || cp -p $(srcdir)/$$file $(distdir); \
+ done
+
+update-po: Makefile
+ $(MAKE) $(PACKAGE).pot
+ PATH=`pwd`/../src:$$PATH; \
+ cd $(srcdir); \
+ catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+ mv $$lang.po $$lang.old.po; \
+ echo "$$lang:"; \
+ if $(MSGMERGE) $$lang.old.po $(PACKAGE).pot -o $$lang.po; then \
+ rm -f $$lang.old.po; \
+ else \
+ echo "msgmerge for $$cat failed!"; \
+ rm -f $$lang.po; \
+ mv $$lang.old.po $$lang.po; \
+ fi; \
+ done
+
+POTFILES: POTFILES.in
+ ( if test 'x$(srcdir)' != 'x.'; then \
+ posrcprefix='$(top_srcdir)/'; \
+ else \
+ posrcprefix="../"; \
+ fi; \
+ rm -f $@-t $@ \
+ && (sed -e '/^#/d' -e '/^[ ]*$$/d' \
+ -e "s@.*@ $$posrcprefix& \\\\@" < $(srcdir)/$@.in \
+ | sed -e '$$s/\\$$//') > $@-t \
+ && chmod a-w $@-t \
+ && mv $@-t $@ )
+
+POTFILES.in: @MAINT@ ../Makefile
+ cd .. && $(MAKE) po/POTFILES.in
+
+Makefile: Make-in ../config.status POTFILES
+ cd .. \
+ && CONFIG_FILES=$(subdir)/Makefile.in:$(subdir)/Make-in \
+ CONFIG_HEADERS= $(SHELL) ./config.status
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/binutils-2.21/ld/po/POTFILES.in b/binutils-2.21/ld/po/POTFILES.in
new file mode 100644
index 0000000..55cbd13
--- /dev/null
+++ b/binutils-2.21/ld/po/POTFILES.in
@@ -0,0 +1,35 @@
+deffile.h
+elf-hints-local.h
+emultempl/armcoff.em
+emultempl/pe.em
+ld.h
+ldcref.c
+ldctor.c
+ldctor.h
+ldemul.c
+ldemul.h
+ldexp.c
+ldexp.h
+ldfile.c
+ldfile.h
+ldlang.c
+ldlang.h
+ldlex-wrapper.c
+ldlex.h
+ldmain.c
+ldmain.h
+ldmisc.c
+ldmisc.h
+ldver.c
+ldver.h
+ldwrite.c
+ldwrite.h
+lexsup.c
+mri.c
+mri.h
+pe-dll.c
+pe-dll.h
+pep-dll.c
+pep-dll.h
+plugin.c
+plugin.h
diff --git a/binutils-2.21/ld/po/bg.gmo b/binutils-2.21/ld/po/bg.gmo
new file mode 100644
index 0000000..7562e74
--- /dev/null
+++ b/binutils-2.21/ld/po/bg.gmo
Binary files differ
diff --git a/binutils-2.21/ld/po/bg.po b/binutils-2.21/ld/po/bg.po
new file mode 100644
index 0000000..123d2a2
--- /dev/null
+++ b/binutils-2.21/ld/po/bg.po
@@ -0,0 +1,2231 @@
+# Translation of binutils ld to Bulgarian
+# Copyright (C) 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the binutils package.
+# Roumen Petrov <transl@roumenpetrov.info>, 2010.
+#
+# Abbreviations:
+# BFD - Binary Format Description
+# IR - Intermediate Representation
+msgid ""
+msgstr ""
+"Project-Id-Version: ld 2.20.90\n"
+"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
+"POT-Creation-Date: 2010-11-05 11:34+0100\n"
+"PO-Revision-Date: 2010-11-10 22:47+0200\n"
+"Last-Translator: Roumen Petrov <transl@roumenpetrov.info>\n"
+"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: emultempl/armcoff.em:73
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code Поддръжка на работоÑпоÑобноÑÑ‚ Ñ Ð¿Ñ€ÐµÐ´Ð¸ÑˆÐµÐ½ код\n"
+
+#: emultempl/armcoff.em:74
+#, c-format
+msgid " --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"
+msgstr " --thumb-entry=<знак> УÑтановÑване на входÑща точка да е отбелÑÐ·Ð°Ð½Ð¸Ñ <знак>\n"
+
+#: emultempl/armcoff.em:122
+#, c-format
+msgid "Errors encountered processing file %s"
+msgstr "СблъÑкване Ñ Ð³Ñ€ÐµÑˆÐºÐ¸ при обработване на файл %s"
+
+#: emultempl/armcoff.em:190 emultempl/pe.em:1812
+msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"
+msgstr "%P: предупреждение: '--thumb-entry %s' прегазва '-e %s'\n"
+
+#: emultempl/armcoff.em:195 emultempl/pe.em:1817
+msgid "%P: warning: cannot find thumb start symbol %s\n"
+msgstr "%P: предупреждение: не е намерен, като начален, отбелÑÐ·Ð°Ð½Ð¸Ñ Ð·Ð½Ð°Ðº %s\n"
+
+#: emultempl/pe.em:418
+#, c-format
+msgid " --base_file <basefile> Generate a base file for relocatable DLLs\n"
+msgstr " --base_file <базов_файл> Създаване на базов файл за премеÑтваеми DLLs\n"
+
+#: emultempl/pe.em:419
+#, c-format
+msgid " --dll Set image base to the default for DLLs\n"
+msgstr " --dll УÑтановÑва Ð±Ð°Ð·Ð¾Ð²Ð¸Ñ Ð°Ð´Ñ€ÐµÑ Ð½Ð° Ð¿Ð¾Ð´Ñ€Ð°Ð·Ð±Ð¸Ñ€Ð°Ñ‰Ð¸Ñ Ñе за DLLs\n"
+
+#: emultempl/pe.em:420
+#, c-format
+msgid " --file-alignment <size> Set file alignment\n"
+msgstr " --file-alignment <размер> УÑтановÑва подравнÑване за файла\n"
+
+#: emultempl/pe.em:421
+#, c-format
+msgid " --heap <size> Set initial size of the heap\n"
+msgstr " --heap <размер> УÑтановÑва Ð½Ð°Ñ‡Ð°Ð»Ð½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€ на динамичната памет\n"
+
+#: emultempl/pe.em:422
+#, c-format
+msgid " --image-base <address> Set start address of the executable\n"
+msgstr " --image-base <адреÑ> УÑтановÑва начален Ð°Ð´Ñ€ÐµÑ Ð½Ð° Ð¸Ð·Ð¿ÑŠÐ»Ð½Ð¸Ð¼Ð¸Ñ Ñ„Ð°Ð¹Ð»\n"
+
+#: emultempl/pe.em:423
+#, c-format
+msgid " --major-image-version <number> Set version number of the executable\n"
+msgstr " --major-image-version <чиÑло> УÑтановÑва номер на верÑÐ¸Ñ Ð½Ð° Ð¸Ð·Ð¿ÑŠÐ»Ð½Ð¸Ð¼Ð¸Ñ Ñ„Ð°Ð¹Ð»\n"
+
+#: emultempl/pe.em:424
+#, c-format
+msgid " --major-os-version <number> Set minimum required OS version\n"
+msgstr " --major-os-version <чиÑло> УÑтановÑва необходима минимална верÑÐ¸Ñ Ð½Ð° ОС\n"
+
+#: emultempl/pe.em:425
+#, c-format
+msgid " --major-subsystem-version <number> Set minimum required OS subsystem version\n"
+msgstr " --major-subsystem-version <чиÑло> УÑтановÑва необходима минимална подверÑÐ¸Ñ Ð½Ð° ОС\n"
+
+#: emultempl/pe.em:426
+#, c-format
+msgid " --minor-image-version <number> Set revision number of the executable\n"
+msgstr " --minor-image-version <чиÑло> УÑтановÑва номер на изданието на Ð¸Ð·Ð¿ÑŠÐ»Ð½Ð¸Ð¼Ð¸Ñ Ñ„Ð°Ð¹Ð»\n"
+
+#: emultempl/pe.em:427
+#, c-format
+msgid " --minor-os-version <number> Set minimum required OS revision\n"
+msgstr " --minor-os-version <чиÑло> УÑтановÑва необходимо минимално издание на ОС\n"
+
+#: emultempl/pe.em:428
+#, c-format
+msgid " --minor-subsystem-version <number> Set minimum required OS subsystem revision\n"
+msgstr " --minor-subsystem-version <чиÑло> УÑтановÑва необходимо минимално подиздание на ОС\n"
+
+#: emultempl/pe.em:429
+#, c-format
+msgid " --section-alignment <size> Set section alignment\n"
+msgstr " --section-alignment <размер> УÑтановÑва подравнÑване на раздел\n"
+
+#: emultempl/pe.em:430
+#, c-format
+msgid " --stack <size> Set size of the initial stack\n"
+msgstr " --stack <размер> УÑтановÑва размера на Ð¿ÑŠÑ€Ð²Ð¾Ð½Ð°Ñ‡Ð°Ð»Ð½Ð¸Ñ Ñтек\n"
+
+#: emultempl/pe.em:431
+#, c-format
+msgid " --subsystem <name>[:<version>] Set required OS subsystem [& version]\n"
+msgstr " --subsystem <име>[:<верÑиÑ>] УÑтановÑва необходима подÑиÑтема [и верÑиÑ] на ОС\n"
+
+#: emultempl/pe.em:432
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code Поддръжка на работоÑпоÑобноÑÑ‚ Ñ Ð¿Ñ€ÐµÐ´Ð¸ÑˆÐµÐ½ код\n"
+
+#: emultempl/pe.em:433
+#, c-format
+msgid " --[no-]leading-underscore Set explicit symbol underscore prefix mode\n"
+msgstr " --[no-]leading-underscore Изрично уÑтановÑва режим Ñ Ð¿Ð¾Ð´Ñ‡ÐµÑ€Ñ‚Ð°Ð²ÐºÐ° като предÑтавка за име\n"
+
+#: emultempl/pe.em:434
+#, c-format
+msgid " --thumb-entry=<symbol> Set the entry point to be Thumb <symbol>\n"
+msgstr " --thumb-entry=<знак> УÑтановÑване на входÑща точка да е отбелÑÐ·Ð°Ð½Ð¸Ñ <знак>\n"
+
+#: emultempl/pe.em:436
+#, c-format
+msgid " --add-stdcall-alias Export symbols with and without @nn\n"
+msgstr " --add-stdcall-alias ИзнаÑÑне на имена Ñ Ð¸ без @nn\n"
+
+#: emultempl/pe.em:437
+#, c-format
+msgid " --disable-stdcall-fixup Don't link _sym to _sym@nn\n"
+msgstr " --disable-stdcall-fixup Без Ñвързване на _име към _име@nn\n"
+
+#: emultempl/pe.em:438
+#, c-format
+msgid " --enable-stdcall-fixup Link _sym to _sym@nn without warnings\n"
+msgstr " --enable-stdcall-fixup Свързва _име ÑÑŠÑ _име@nn без предупреждениÑ\n"
+
+#: emultempl/pe.em:439
+#, c-format
+msgid " --exclude-symbols sym,sym,... Exclude symbols from automatic export\n"
+msgstr " --exclude-symbols име,име,... Изключва имена от автоматичното изнаÑÑне\n"
+
+#: emultempl/pe.em:440
+#, c-format
+msgid " --exclude-all-symbols Exclude all symbols from automatic export\n"
+msgstr " --exclude-all-symbols Изключва вÑички имена от автоматичното изнаÑÑне\n"
+
+#: emultempl/pe.em:441
+#, c-format
+msgid " --exclude-libs lib,lib,... Exclude libraries from automatic export\n"
+msgstr " --exclude-libs библ.,библ.,... Изключва библиотеки от автоматичното изнаÑÑне\n"
+
+#: emultempl/pe.em:442
+#, c-format
+msgid " --exclude-modules-for-implib mod,mod,...\n"
+msgstr " --exclude-modules-for-implib модул,модул,...\n"
+
+#: emultempl/pe.em:443
+#, c-format
+msgid " Exclude objects, archive members from auto\n"
+msgstr " Изключва обекти, библиотечни обекти от автоматично\n"
+
+#: emultempl/pe.em:444
+#, c-format
+msgid " export, place into import library instead.\n"
+msgstr " изнаÑÑне, в замÑна поÑтавÑне в библиотека за внаÑÑне.\n"
+
+#: emultempl/pe.em:445
+#, c-format
+msgid " --export-all-symbols Automatically export all globals to DLL\n"
+msgstr " --export-all-symbols Ðвтоматично изнаÑÑне на вÑички общи в DLL\n"
+
+#: emultempl/pe.em:446
+#, c-format
+msgid " --kill-at Remove @nn from exported symbols\n"
+msgstr " --kill-at Премахва @nn от изнеÑените имена\n"
+
+#: emultempl/pe.em:447
+#, c-format
+msgid " --out-implib <file> Generate import library\n"
+msgstr " --out-implib <файл> Създава библиотека за внаÑÑне\n"
+
+#: emultempl/pe.em:448
+#, c-format
+msgid " --output-def <file> Generate a .DEF file for the built DLL\n"
+msgstr " --output-def <файл> Генерира DEF-файл за Ñъздадената DLL\n"
+
+#: emultempl/pe.em:449
+#, c-format
+msgid " --warn-duplicate-exports Warn about duplicate exports.\n"
+msgstr " --warn-duplicate-exports ÐŸÑ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ Ð·Ð° повторени екÑпорти.\n"
+
+#: emultempl/pe.em:450
+#, c-format
+msgid ""
+" --compat-implib Create backward compatible import libs;\n"
+" create __imp_<SYMBOL> as well.\n"
+msgstr ""
+" --compat-implib Създава ÑъвмеÑтими Ñ Ð¿Ñ€ÐµÐ´Ð¸ библиотеки за внÑÑÑне;\n"
+" Ñъщо така Ñъздава __imp_<ИМЕ>.\n"
+
+#: emultempl/pe.em:452
+#, c-format
+msgid ""
+" --enable-auto-image-base Automatically choose image base for DLLs\n"
+" unless user specifies one\n"
+msgstr ""
+" --enable-auto-image-base Ðвтоматично избира база на образа за DLLs,\n"
+" оÑвен ако Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð½Ðµ Ñ Ð·Ð°Ð´Ð°Ð´Ðµ\n"
+
+#: emultempl/pe.em:454
+#, c-format
+msgid " --disable-auto-image-base Do not auto-choose image base. (default)\n"
+msgstr " --disable-auto-image-base Да не Ñе избира автоматично база на образа. (по подразбиране)\n"
+
+#: emultempl/pe.em:455
+#, c-format
+msgid ""
+" --dll-search-prefix=<string> When linking dynamically to a dll without\n"
+" an importlib, use <string><basename>.dll\n"
+" in preference to lib<basename>.dll \n"
+msgstr ""
+" --dll-search-prefix=<низ> Когато Ñе Ñвързва динамично Ñ dll без\n"
+" библиотека за внаÑÑне, да Ñе\n"
+" предпочете <низ><базовоиме>.dll пред\n"
+" lib<базовоиме>.dll \n"
+
+#: emultempl/pe.em:458
+#, c-format
+msgid ""
+" --enable-auto-import Do sophistcated linking of _sym to\n"
+" __imp_sym for DATA references\n"
+msgstr ""
+" --enable-auto-import \"Изтънчено\" Ñвързване на _sym ÑÑŠÑ\n"
+" __imp_sym при отпратки за данни\n"
+
+#: emultempl/pe.em:460
+#, c-format
+msgid " --disable-auto-import Do not auto-import DATA items from DLLs\n"
+msgstr " --disable-auto-import Да не Ñе внаÑÑÑ‚ автоматично данни от DLL-ли\n"
+
+#: emultempl/pe.em:461
+#, c-format
+msgid ""
+" --enable-runtime-pseudo-reloc Work around auto-import limitations by\n"
+" adding pseudo-relocations resolved at\n"
+" runtime.\n"
+msgstr ""
+" --enable-runtime-pseudo-reloc ПреодолÑване на ограничениÑта на автоматичните\n"
+" внаÑÑÐ½Ð¸Ñ Ñ Ð´Ð¾Ð±Ð°Ð²Ñне на лъже-премеÑтваниÑ,\n"
+" определÑни по време на работа.\n"
+
+#: emultempl/pe.em:464
+#, c-format
+msgid ""
+" --disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations for\n"
+" auto-imported DATA.\n"
+msgstr ""
+" --disable-runtime-pseudo-reloc Без лъже-премеÑтваниÑ, по време на работа,\n"
+" за автоматично внеÑени данни.\n"
+
+#: emultempl/pe.em:466
+#, c-format
+msgid ""
+" --enable-extra-pe-debug Enable verbose debug output when building\n"
+" or linking to DLLs (esp. auto-import)\n"
+msgstr ""
+" --enable-extra-pe-debug Разрешава извеждане на подробна Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¸ Ñъздаване\n"
+" или Ñвързване на DLL-ли (Ñъотв. ÑамовнаÑÑне)\n"
+
+#: emultempl/pe.em:469
+#, c-format
+msgid ""
+" --large-address-aware Executable supports virtual addresses\n"
+" greater than 2 gigabytes\n"
+msgstr ""
+" --large-address-aware Програмата поддържа виртуални адреÑи\n"
+" по-голÑми от 2 гигабайта\n"
+
+#: emultempl/pe.em:471
+#, c-format
+msgid ""
+" --enable-long-section-names Use long COFF section names even in\n"
+" executable image files\n"
+msgstr ""
+" --enable-long-section-names Използване на дълги имена за COFF\n"
+" раздели, дори в изпълними файлове\n"
+
+#: emultempl/pe.em:473
+#, c-format
+msgid ""
+" --disable-long-section-names Never use long COFF section names, even\n"
+" in object files\n"
+msgstr ""
+" --disable-long-section-names Да не Ñе използват дълги имена на COFF\n"
+" раздели, дори в обектни файлове\n"
+
+#: emultempl/pe.em:475
+#, c-format
+msgid ""
+" --dynamicbase\t\t\t Image base address may be relocated using\n"
+"\t\t\t\t address space layout randomization (ASLR)\n"
+msgstr ""
+" --dynamicbase\t\t\t БазовиÑÑ‚ Ð°Ð´Ñ€ÐµÑ Ð½Ð° образа може да бъде премеÑтен\n"
+"\t\t\t\t като Ñе използва Ñлучаен адреÑ\n"
+
+#: emultempl/pe.em:477
+#, c-format
+msgid " --forceinteg\t\t Code integrity checks are enforced\n"
+msgstr " --forceinteg\t\t Ðалагане на проверка за цÑлоÑтноÑÑ‚ на кода\n"
+
+#: emultempl/pe.em:478
+#, c-format
+msgid " --nxcompat\t\t Image is compatible with data execution prevention\n"
+msgstr " --nxcompat\t\t Образа е ÑъвмеÑтим Ñ Ð¿Ñ€ÐµÐ´Ð¾Ñ‚Ð²Ñ€Ð°Ñ‚Ñване на изпълнение на данни\n"
+
+#: emultempl/pe.em:479
+#, c-format
+msgid " --no-isolation\t\t Image understands isolation but do not isolate the image\n"
+msgstr " --no-isolation\t\t Образа поддържа изолиране, но да не Ñе изолира\n"
+
+#: emultempl/pe.em:480
+#, c-format
+msgid ""
+" --no-seh\t\t\t Image does not use SEH. No SE handler may\n"
+"\t\t\t\t be called in this image\n"
+msgstr ""
+" --no-seh\t\t\t Образа не използва SEH. Ðе може да Ñе извиква\n"
+"\t\t\t\t SE подръжка в този образ\n"
+
+#: emultempl/pe.em:482
+#, c-format
+msgid " --no-bind\t\t\t Do not bind this image\n"
+msgstr " --no-bind\t\t\t Образ без таблица за Ñвързване\n"
+
+#: emultempl/pe.em:483
+#, c-format
+msgid " --wdmdriver\t\t Driver uses the WDM model\n"
+msgstr " --wdmdriver\t\t Използване на WDM модел за driver\n"
+
+#: emultempl/pe.em:484
+#, c-format
+msgid " --tsaware Image is Terminal Server aware\n"
+msgstr " --tsaware Образа поддържа \"Terminal Server\"\n"
+
+#: emultempl/pe.em:613
+msgid "%P: warning: bad version number in -subsystem option\n"
+msgstr "%P: предупреждение: непревилен номер на верÑÐ¸Ñ Ð·Ð° командата -subsystem\n"
+
+#: emultempl/pe.em:638
+msgid "%P%F: invalid subsystem type %s\n"
+msgstr "%P%F: неправилен тип на подÑиÑтема %s\n"
+
+#: emultempl/pe.em:659
+msgid "%P%F: invalid hex number for PE parameter '%s'\n"
+msgstr "%P%F: непревилен шеÑнайÑетично чиÑло за \"PE\" параметър '%s'\n"
+
+#: emultempl/pe.em:676
+msgid "%P%F: strange hex info for PE parameter '%s'\n"
+msgstr "%P%F: неизвеÑтни шеÑÑ‚. данни за PE параметър '%s'\n"
+
+#: emultempl/pe.em:693
+#, c-format
+msgid "%s: Can't open base file %s\n"
+msgstr "%s: Ðе може да Ñе отвори базов файл %s\n"
+
+#: emultempl/pe.em:969
+msgid "%P: warning, file alignment > section alignment.\n"
+msgstr "%P: предупреждение, подравнÑване за файл > подравнÑване за раздел.\n"
+
+#: emultempl/pe.em:982
+msgid "%P: warning: --export-dynamic is not supported for PE targets, did you mean --export-all-symbols?\n"
+msgstr "%P: предупреждение: --export-dynamic не Ñе поддържа при PE резултат, може би --export-all-symbols?\n"
+
+#: emultempl/pe.em:1058 emultempl/pe.em:1085
+#, c-format
+msgid "Warning: resolving %s by linking to %s\n"
+msgstr "Предупрежение: разрешаване на %s ÑÑŠÑ Ñвързване към %s\n"
+
+#: emultempl/pe.em:1063 emultempl/pe.em:1090
+msgid "Use --enable-stdcall-fixup to disable these warnings\n"
+msgstr "Да Ñе използва --enable-stdcall-fixup, за да Ñе забранÑÑ‚ тези предупреждениÑ\n"
+
+#: emultempl/pe.em:1064 emultempl/pe.em:1091
+msgid "Use --disable-stdcall-fixup to disable these fixups\n"
+msgstr "Да Ñе използва --disable-stdcall-fixup, за да Ñе забранÑÑ‚ тези предупреждениÑ\n"
+
+#: emultempl/pe.em:1110
+#, c-format
+msgid "%C: Cannot get section contents - auto-import exception\n"
+msgstr "%C: Ðе можа да Ñе вземе Ñъдържанието на раздел - изключение при автоматично внаÑÑне\n"
+
+#: emultempl/pe.em:1150
+#, c-format
+msgid "Info: resolving %s by linking to %s (auto-import)\n"
+msgstr "ИнформациÑ: разрешаване на %s ÑÑŠÑ Ñвързване към %s (Ñамо-внаÑÑне)\n"
+
+#: emultempl/pe.em:1157
+msgid ""
+"%P: warning: auto-importing has been activated without --enable-auto-import specified on the command line.\n"
+"This should work unless it involves constant data structures referencing symbols from auto-imported DLLs.\n"
+msgstr ""
+"%P: предупр.: Ñамо-внаÑÑне е активирано без да Ñе зададе --enable-auto-import на ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¸Ñ Ñ€ÐµÐ´.\n"
+"Това работи, оÑвен ако не е Ñвързано Ñ ÐºÐ¾Ð½Ñтантни Ñтруктури за данни, които указват към имена от Ñамо-внаÑÑни DLL-ли.\n"
+
+#: emultempl/pe.em:1164 emultempl/pe.em:1369 emultempl/pe.em:1575 ldcref.c:490
+#: ldcref.c:588 ldmain.c:1183 ldmisc.c:286 pe-dll.c:705 pe-dll.c:1253
+#: pe-dll.c:1348
+msgid "%B%F: could not read symbols: %E\n"
+msgstr "%B%F: не могат да Ñе прочетат имената: %E\n"
+
+#: emultempl/pe.em:1245
+msgid "%F%P: cannot perform PE operations on non PE output file '%B'.\n"
+msgstr "%F%P: не може да Ñе извърши \"PE\"-операции на изходен файл '%B', който не е \"PE\".\n"
+
+#: emultempl/pe.em:1616
+#, c-format
+msgid "Errors encountered processing file %s\n"
+msgstr "Открити Ñа грешки при обработката на файл %s\n"
+
+#: emultempl/pe.em:1639
+#, c-format
+msgid "Errors encountered processing file %s for interworking\n"
+msgstr "Открити Ñа грешки при обработката на файл %s за ÑъвмеÑтна работа\n"
+
+#: emultempl/pe.em:1701 ldexp.c:542 ldlang.c:3323 ldlang.c:3358 ldlang.c:6804
+#: ldlang.c:6835 ldmain.c:1128
+msgid "%P%F: bfd_link_hash_lookup failed: %E\n"
+msgstr "%P%F: bfd_link_hash_lookup не уÑпÑ: %E\n"
+
+#: ldcref.c:168
+msgid "%X%P: bfd_hash_table_init of cref table failed: %E\n"
+msgstr "%X%P: bfd_hash_table_init, за cref таблица, не уÑпÑ: %E\n"
+
+#: ldcref.c:174
+msgid "%X%P: cref_hash_lookup failed: %E\n"
+msgstr "%X%P: cref_hash_lookup не уÑпÑ: %E\n"
+
+#: ldcref.c:184
+msgid "%X%P: cref alloc failed: %E\n"
+msgstr "%X%P: пропадна заделÑне(на памет) за cref: %E\n"
+
+#: ldcref.c:366
+#, c-format
+msgid ""
+"\n"
+"Cross Reference Table\n"
+"\n"
+msgstr ""
+"\n"
+"Таблица на кръÑтоÑани връзки\n"
+"\n"
+
+#: ldcref.c:367
+msgid "Symbol"
+msgstr "Символ"
+
+#: ldcref.c:375
+#, c-format
+msgid "File\n"
+msgstr "Файл\n"
+
+#: ldcref.c:379
+#, c-format
+msgid "No symbols\n"
+msgstr "Без имена\n"
+
+#: ldcref.c:532
+msgid "%P: symbol `%T' missing from main hash table\n"
+msgstr "%P: име '%T' липÑва в главната хеш-таблица\n"
+
+#: ldcref.c:650 ldcref.c:657 ldmain.c:1217 ldmain.c:1224
+msgid "%B%F: could not read relocs: %E\n"
+msgstr "%B%F: не могат да Ñе прочетат \"премеÑтваниÑта\": %E\n"
+
+#. We found a reloc for the symbol. The symbol is defined
+#. in OUTSECNAME. This reloc is from a section which is
+#. mapped into a section from which references to OUTSECNAME
+#. are prohibited. We must report an error.
+#: ldcref.c:684
+msgid "%X%C: prohibited cross reference from %s to `%T' in %s\n"
+msgstr "%X%C: забранено е кръÑтоÑана отпратка от %s към `%T' в %s\n"
+
+#: ldctor.c:85
+msgid "%P%X: Different relocs used in set %s\n"
+msgstr "%P%X: Различни \"премеÑтваниÑта\" Ñе използват в множеÑтвото %s\n"
+
+#: ldctor.c:103
+msgid "%P%X: Different object file formats composing set %s\n"
+msgstr "%P%X: Различни формати на обектни файлове в набора %s\n"
+
+#: ldctor.c:281 ldctor.c:295
+msgid "%P%X: %s does not support reloc %s for set %s\n"
+msgstr "%P%X: %s не Ñе поддържа премеÑтване %s за набор %s\n"
+
+#: ldctor.c:316
+msgid "%P%X: Unsupported size %d for set %s\n"
+msgstr "%P%X: Ðеподдържан размер %d за множеÑтвото %s\n"
+
+#: ldctor.c:337
+msgid ""
+"\n"
+"Set Symbol\n"
+"\n"
+msgstr ""
+"\n"
+"МножеÑтво Символ\n"
+"\n"
+
+#: ldemul.c:265
+#, c-format
+msgid "%S SYSLIB ignored\n"
+msgstr "%S SYSLIB е изоÑтавен\n"
+
+#: ldemul.c:271
+#, c-format
+msgid "%S HLL ignored\n"
+msgstr "%S HLL е изоÑтавен\n"
+
+#: ldemul.c:291
+msgid "%P: unrecognised emulation mode: %s\n"
+msgstr "%P: неразпознат режим за подражаване: %s\n"
+
+#: ldemul.c:292
+msgid "Supported emulations: "
+msgstr "Поддържани подражаваниÑ: "
+
+#: ldemul.c:334
+#, c-format
+msgid " no emulation specific options.\n"
+msgstr " без оÑобени възможноÑти за подражаване.\n"
+
+#: ldexp.c:313
+msgid "%P: warning: address of `%s' isn't multiple of maximum page size\n"
+msgstr "%P: предупреждение: адреÑа на '%s' не е кратен на макÑÐ¸Ð¼Ð°Ð»Ð½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€ на Ñтраница\n"
+
+#: ldexp.c:351
+#, c-format
+msgid "%F%S %% by zero\n"
+msgstr "%F%S %% на нула\n"
+
+#: ldexp.c:359
+#, c-format
+msgid "%F%S / by zero\n"
+msgstr "%F%S / на нула\n"
+
+#: ldexp.c:552
+#, c-format
+msgid "%X%S: unresolvable symbol `%s' referenced in expression\n"
+msgstr "%X%S: неразгадано име '%s' е указано в израза\n"
+
+#: ldexp.c:564
+#, c-format
+msgid "%F%S: undefined symbol `%s' referenced in expression\n"
+msgstr "%F%S: неопределено име '%s' е указано в израза\n"
+
+#: ldexp.c:585 ldexp.c:602 ldexp.c:629
+#, c-format
+msgid "%F%S: undefined section `%s' referenced in expression\n"
+msgstr "%F%S: в израза е указан неопределен раздел '%s'\n"
+
+#: ldexp.c:656 ldexp.c:670
+#, c-format
+msgid "%F%S: undefined MEMORY region `%s' referenced in expression\n"
+msgstr "%F%S: неопределен MEMORY регион '%s' е указан в израза\n"
+
+#: ldexp.c:681
+#, c-format
+msgid "%F%S: unknown constant `%s' referenced in expression\n"
+msgstr "%F%S: непозната конÑтанта '%s' е указана в израза\n"
+
+#: ldexp.c:743
+#, c-format
+msgid "%F%S can not PROVIDE assignment to location counter\n"
+msgstr "%F%S не може да Ñе приÑвои на броÑч за меÑтоположение\n"
+
+#: ldexp.c:757
+#, c-format
+msgid "%F%S invalid assignment to location counter\n"
+msgstr "%F%S неправилно приÑвоÑване на броÑч за меÑтоположение\n"
+
+#: ldexp.c:760
+#, c-format
+msgid "%F%S assignment to location counter invalid outside of SECTION\n"
+msgstr "%F%S неправилно приÑвоÑване на броÑч за меÑтоположение извън РÐЗДЕЛ\n"
+
+#: ldexp.c:773
+msgid "%F%S cannot move location counter backwards (from %V to %V)\n"
+msgstr "%F%S не може да Ñе върне обратно броÑч на меÑтоположение (от %V към %V)\n"
+
+#: ldexp.c:812
+msgid "%P%F:%s: hash creation failed\n"
+msgstr "%P%F:%s: пропадна Ñъздаването на хеш\n"
+
+#: ldexp.c:1119 ldexp.c:1144 ldexp.c:1204
+#, c-format
+msgid "%F%S: nonconstant expression for %s\n"
+msgstr "%F%S: не е конÑтантен изразът за %s\n"
+
+#: ldfile.c:141
+#, c-format
+msgid "attempt to open %s failed\n"
+msgstr "опита да Ñе отвори %s не уÑпÑ\n"
+
+#: ldfile.c:143
+#, c-format
+msgid "attempt to open %s succeeded\n"
+msgstr "опита да Ñе отвори %s уÑпÑ\n"
+
+#: ldfile.c:149
+msgid "%F%P: invalid BFD target `%s'\n"
+msgstr "%F%P: неправилна BFD цел '%s'\n"
+
+#: ldfile.c:266 ldfile.c:295
+msgid "%P: skipping incompatible %s when searching for %s\n"
+msgstr "%P: пропуÑкане на неÑъвмеÑтим %s при Ñ‚ÑŠÑ€Ñене на %s\n"
+
+#: ldfile.c:279
+msgid "%F%P: attempted static link of dynamic object `%s'\n"
+msgstr "%F%P: опитано Ñтатично Ñвързване на динамичен обект '%s'\n"
+
+#: ldfile.c:332 ldmain.c:832
+msgid "%P%F: %s: plugin reported error claiming file\n"
+msgstr "%P%F: %s: приÑтавката рапортува грешка, при твърдениÑта за файла\n"
+
+#: ldfile.c:447
+msgid "%P: cannot find %s (%s): %E\n"
+msgstr "%P: не Ñе намира %s в %s: %E\n"
+
+#: ldfile.c:450
+msgid "%P: cannot find %s: %E\n"
+msgstr "%P: не Ñе намира %s: %E\n"
+
+#: ldfile.c:485
+msgid "%P: cannot find %s inside %s\n"
+msgstr "%P: не Ñе намера %s в %s\n"
+
+#: ldfile.c:488
+msgid "%P: cannot find %s\n"
+msgstr "%P: не Ñе намира %s\n"
+
+#: ldfile.c:507 ldfile.c:525
+#, c-format
+msgid "cannot find script file %s\n"
+msgstr "не Ñе намира \"Ñкрипт\"-файл %s\n"
+
+#: ldfile.c:509 ldfile.c:527
+#, c-format
+msgid "opened script file %s\n"
+msgstr "отворен \"Ñкрипт\"-файл %s\n"
+
+#: ldfile.c:657
+msgid "%P%F: cannot open linker script file %s: %E\n"
+msgstr "%P%F: не може да Ñе отвори \"Ñкрипт\"-файл при Ñвързване %s: %E\n"
+
+#: ldfile.c:722
+msgid "%P%F: cannot represent machine `%s'\n"
+msgstr "%P%F: не може да Ñе предÑтави машина '%s'\n"
+
+#: ldlang.c:1160 ldlang.c:1202 ldlang.c:3048
+msgid "%P%F: can not create hash table: %E\n"
+msgstr "%P%F: н може да Ñе Ñъздаде хеш-таблицата: %E\n"
+
+#: ldlang.c:1253
+msgid "%P:%S: warning: redeclaration of memory region `%s'\n"
+msgstr "%P:%S: предупреждение: повторно определение за регион памет '%s'\n"
+
+#: ldlang.c:1259
+msgid "%P:%S: warning: memory region `%s' not declared\n"
+msgstr "%P: %S: предупр.: региона за памет '%s' не е обÑвен\n"
+
+#: ldlang.c:1293
+msgid "%F%P:%S: error: alias for default memory region\n"
+msgstr "%F%P:%S: грешка: Ñиноним за регион памет по подразбиране\n"
+
+#: ldlang.c:1304
+msgid "%F%P:%S: error: redefinition of memory region alias `%s'\n"
+msgstr "%F%P:%S: грешка: повторен определение на Ñиноним за регион памет '%s'\n"
+
+#: ldlang.c:1311
+msgid "%F%P:%S: error: memory region `%s' for alias `%s' does not exist\n"
+msgstr "%F%P:%S: грешка: региона памет '%s' за Ñинонима '%s' не ÑъщеÑтвува\n"
+
+#: ldlang.c:1363 ldlang.c:1402
+msgid "%P%F: failed creating section `%s': %E\n"
+msgstr "%P%F: пропадна Ñъздаването на раздел '%s': %E\n"
+
+#: ldlang.c:1958
+#, c-format
+msgid ""
+"\n"
+"Discarded input sections\n"
+"\n"
+msgstr ""
+"\n"
+"Отхвърлени входни раздели\n"
+"\n"
+
+#: ldlang.c:1966
+msgid ""
+"\n"
+"Memory Configuration\n"
+"\n"
+msgstr ""
+"\n"
+"ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð½Ð° паметта\n"
+"\n"
+
+#: ldlang.c:1968
+msgid "Name"
+msgstr "Име"
+
+#: ldlang.c:1968
+msgid "Origin"
+msgstr "Произход"
+
+#: ldlang.c:1968
+msgid "Length"
+msgstr "Дължина"
+
+#: ldlang.c:1968
+msgid "Attributes"
+msgstr "Ðтрибути"
+
+#: ldlang.c:2008
+#, c-format
+msgid ""
+"\n"
+"Linker script and memory map\n"
+"\n"
+msgstr ""
+"\n"
+"ТекÑÑ‚ при Ñвързване и Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° паметта\n"
+"\n"
+
+#: ldlang.c:2074
+msgid "%P%F: Illegal use of `%s' section\n"
+msgstr "%P%F: Ðеправилно използване на раздел '%s'\n"
+
+#: ldlang.c:2083
+msgid "%P%F: output format %s cannot represent section called %s\n"
+msgstr "%P%F: в Ð¸Ð·Ñ…Ð¾Ð´Ð½Ð¸Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ %s, не може да Ñе предÑтави раздел именуван %s\n"
+
+#: ldlang.c:2636
+msgid "%B: file not recognized: %E\n"
+msgstr "%B: файлът не е разпознат: %E\n"
+
+#: ldlang.c:2637
+msgid "%B: matching formats:"
+msgstr "%B: Ñъвпадащи формати:"
+
+#: ldlang.c:2644
+msgid "%F%B: file not recognized: %E\n"
+msgstr "%F%B: файлът не е разпознат: %E\n"
+
+#: ldlang.c:2715
+msgid "%F%B: member %B in archive is not an object\n"
+msgstr "%F%B: членът, на архива %B, не е обект\n"
+
+#: ldlang.c:2730 ldlang.c:2744
+msgid "%F%B: could not read symbols: %E\n"
+msgstr "%F%B: не може да Ñе прочетат имената: %E\n"
+
+#: ldlang.c:3018
+msgid "%P: warning: could not find any targets that match endianness requirement\n"
+msgstr "%P: предупреждение: не може да Ñе открие резултат, който да Ð¾Ñ‚Ð³Ð¾Ð²Ð°Ñ€Ñ Ð½Ð° изиÑкваниÑта за подредба(на байтовете)\n"
+
+#: ldlang.c:3032
+msgid "%P%F: target %s not found\n"
+msgstr "%P%F: целта %s не е намерена\n"
+
+#: ldlang.c:3034
+msgid "%P%F: cannot open output file %s: %E\n"
+msgstr "%P%F: не може да Ñе отвори входÑщ файл %s: %E\n"
+
+#: ldlang.c:3040
+msgid "%P%F:%s: can not make object file: %E\n"
+msgstr "%P%F:%s: не може да Ñе Ñъздаде обектен файл: %E\n"
+
+#: ldlang.c:3044
+msgid "%P%F:%s: can not set architecture: %E\n"
+msgstr "%P%F:%s: не може да Ñе зададе архитектура: %E\n"
+
+#: ldlang.c:3185
+msgid "%P: warning: %s contains output sections; did you forget -T?\n"
+msgstr "%P: предупр.: %s Ñъдържа изходÑщ раздел; забравен -T?\n"
+
+#: ldlang.c:3215
+msgid "%P%F: bfd_hash_lookup failed creating symbol %s\n"
+msgstr "%P%F: bfd_hash_lookup не уÑÐ¿Ñ Ð´Ð° Ñъздаде име %s\n"
+
+#: ldlang.c:3233
+msgid "%P%F: bfd_hash_allocate failed creating symbol %s\n"
+msgstr "%P%F: bfd_hash_allocate не уÑÐ¿Ñ Ð´Ð° Ñъздаде име %s\n"
+
+#: ldlang.c:3688
+msgid "%F%P: %s not found for insert\n"
+msgstr "%F%P: %s не е намерен(за добавÑне)\n"
+
+#: ldlang.c:3903
+msgid " load address 0x%V"
+msgstr " Ð°Ð´Ñ€ÐµÑ Ð½Ð° зареждане 0x%V"
+
+#: ldlang.c:4179
+msgid "%W (size before relaxing)\n"
+msgstr "%W (размер преди намалÑване)\n"
+
+#: ldlang.c:4270
+#, c-format
+msgid "Address of section %s set to "
+msgstr "ÐдреÑÑŠÑ‚ на раздел %s е уÑтановен на "
+
+#: ldlang.c:4423
+#, c-format
+msgid "Fail with %d\n"
+msgstr "Ðе уÑÐ¿Ñ Ð¿Ñ€Ð¸ %d\n"
+
+#: ldlang.c:4710
+msgid "%X%P: section %s loaded at [%V,%V] overlaps section %s loaded at [%V,%V]\n"
+msgstr "%X%P: раздел %s зареден в [%V,%V] припокрива раздел %s зареден в [%V,%V]\n"
+
+#: ldlang.c:4726
+msgid "%X%P: region `%s' overflowed by %ld bytes\n"
+msgstr "%X%P: регионът '%s' е препълнен Ñ %ld байта\n"
+
+#: ldlang.c:4749
+msgid "%X%P: address 0x%v of %B section `%s' is not within region `%s'\n"
+msgstr "%X%P: адреÑÑŠÑ‚ 0x%v от %B, раздел '%s', не е в регион '%s'\n"
+
+#: ldlang.c:4760
+msgid "%X%P: %B section `%s' will not fit in region `%s'\n"
+msgstr "%X%P: %B раздел '%s' не Ñе побира в регион '%s'\n"
+
+#: ldlang.c:4816
+#, c-format
+msgid "%F%S: non constant or forward reference address expression for section %s\n"
+msgstr "%F%S: адреÑÐ½Ð¸Ñ Ð¸Ð·Ñ€Ð°Ð· не е конÑтантен или отпратка за по нататък при раздел %s\n"
+
+#: ldlang.c:4841
+msgid "%P%X: Internal error on COFF shared library section %s\n"
+msgstr "%P%X: Вътрешна грешка при раздел от COFF Ñподелена библиотека %s\n"
+
+#: ldlang.c:4900
+msgid "%P%F: error: no memory region specified for loadable section `%s'\n"
+msgstr "%P%F: грешка: без зададени региони памет за заредим раздел '%s'\n"
+
+#: ldlang.c:4905
+msgid "%P: warning: no memory region specified for loadable section `%s'\n"
+msgstr "%P: предупреждение: без зададени региони памет за заредим раздел '%s'\n"
+
+#: ldlang.c:4927
+msgid "%P: warning: changing start of section %s by %lu bytes\n"
+msgstr "%P: предупреждение: промÑна на началото на раздел %s Ñ %lu байта\n"
+
+#: ldlang.c:5004
+msgid "%P: warning: dot moved backwards before `%s'\n"
+msgstr "%P: предупреждение: точката е премеÑтена назад преди '%s'\n"
+
+#: ldlang.c:5170
+msgid "%P%F: can't relax section: %E\n"
+msgstr "%P%F: не може да Ñе намали раздел: %E\n"
+
+#: ldlang.c:5497
+msgid "%F%P: invalid data statement\n"
+msgstr "%F%P: неправилен Ñегмент за данни\n"
+
+#: ldlang.c:5530
+msgid "%F%P: invalid reloc statement\n"
+msgstr "%F%P: неправилен Ñегмент за премеÑтване\n"
+
+#: ldlang.c:5648
+msgid "%P%F: gc-sections requires either an entry or an undefined symbol\n"
+msgstr "%P%F: gc-раздели изиÑкват или вход или неопределено име\n"
+
+#: ldlang.c:5673
+msgid "%P%F:%s: can't set start address\n"
+msgstr "%P%F:%s: не може да Ñе уÑтанови начален адреÑ\n"
+
+#: ldlang.c:5686 ldlang.c:5705
+msgid "%P%F: can't set start address\n"
+msgstr "%P%F: не може да Ñе уÑтанови начален адреÑ\n"
+
+#: ldlang.c:5698
+msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n"
+msgstr "%P: предупреждение: не е намерено входно име %s; по подразбиране - %V\n"
+
+#: ldlang.c:5710
+msgid "%P: warning: cannot find entry symbol %s; not setting start address\n"
+msgstr "%P: предупреждение: не е намерен входно име %s; без начален адреÑ\n"
+
+#: ldlang.c:5760
+msgid "%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"
+msgstr "%P%F: Свързване Ñ Ð¿Ñ€ÐµÐ¼ÐµÑÑ‚Ð²Ð°Ð½Ð¸Ñ Ð¾Ñ‚ формат %s (%B) към формат %s (%B) не Ñе поддържа\n"
+
+#: ldlang.c:5770
+msgid "%P%X: %s architecture of input file `%B' is incompatible with %s output\n"
+msgstr "%P%X: %s архитектурата на входен файл '%B' е неÑъвмеÑтима Ñ %s изход\n"
+
+#: ldlang.c:5792
+msgid "%P%X: failed to merge target specific data of file %B\n"
+msgstr "%P%X: пропадна Ñливането, на Ñпецифични за резултата данни, от файл %B\n"
+
+#: ldlang.c:5863
+msgid "%P%F: Could not define common symbol `%T': %E\n"
+msgstr "%P%F: Ðе може да Ñе определÑÑ‚ общите имена '%T': %E\n"
+
+#: ldlang.c:5875
+msgid ""
+"\n"
+"Allocating common symbols\n"
+msgstr ""
+"\n"
+"ЗаделÑне на общи имена\n"
+
+#: ldlang.c:5876
+msgid ""
+"Common symbol size file\n"
+"\n"
+msgstr ""
+"Общо име размер файл\n"
+"\n"
+
+#: ldlang.c:6022
+msgid "%P%F: invalid syntax in flags\n"
+msgstr "%P%F: неправилен ÑинтакÑÐ¸Ñ Ð¿Ñ€Ð¸ флаговете\n"
+
+#: ldlang.c:6415
+msgid "%P%F: Failed to create hash table\n"
+msgstr "%P%F: Ðе уÑÐ¿Ñ Ñъздаването на хеш-таблица\n"
+
+#: ldlang.c:6430
+msgid "%P%F: %s: plugin reported error after all symbols read\n"
+msgstr "%P%F: %s: приÑтавката рапортува грешка, Ñлед прочитане на вÑички имена\n"
+
+#: ldlang.c:6717
+msgid "%P%F: multiple STARTUP files\n"
+msgstr "%P%F: многократни STARTUP файлове\n"
+
+#: ldlang.c:6765
+msgid "%X%P:%S: section has both a load address and a load region\n"
+msgstr "%X%P:%S: раздел едновременно Ñ Ð°Ð´Ñ€ÐµÑ Ð¸ регион за зареждане\n"
+
+#: ldlang.c:6950
+msgid "%X%P:%S: PHDRS and FILEHDR are not supported when prior PT_LOAD headers lack them\n"
+msgstr "%X%P:%S: не Ñе поддържат PHDRS и FILEHDR, ако липÑват в предишни PT_LOAD заглавиÑ\n"
+
+#: ldlang.c:7022
+msgid "%F%P: no sections assigned to phdrs\n"
+msgstr "%F%P: към phdrs не Ñа приÑвоени раздели\n"
+
+#: ldlang.c:7060
+msgid "%F%P: bfd_record_phdr failed: %E\n"
+msgstr "%F%P: bfd_record_phdr не уÑпÑ: %E\n"
+
+#: ldlang.c:7080
+msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n"
+msgstr "%X%P: раздел '%s' е приÑвоен към неÑъщеÑтвуващ phdr `%s'\n"
+
+#: ldlang.c:7481
+msgid "%X%P: unknown language `%s' in version information\n"
+msgstr "%X%P: непоÑнат език '%s' при Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° верÑиÑ\n"
+
+#: ldlang.c:7626
+msgid "%X%P: anonymous version tag cannot be combined with other version tags\n"
+msgstr "%X%P: безименна отметка за верÑÐ¸Ñ Ð½Ðµ може да Ñе ÑмеÑва Ñ Ð´Ñ€ÑƒÐ³Ð¸ отметки за верÑии\n"
+
+#: ldlang.c:7635
+msgid "%X%P: duplicate version tag `%s'\n"
+msgstr "%X%P: повторена отметка за верÑÐ¸Ñ '%s'\n"
+
+#: ldlang.c:7656 ldlang.c:7665 ldlang.c:7683 ldlang.c:7693
+msgid "%X%P: duplicate expression `%s' in version information\n"
+msgstr "%X%P: повторен израз '%s'при Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° верÑиÑ\n"
+
+#: ldlang.c:7733
+msgid "%X%P: unable to find version dependency `%s'\n"
+msgstr "%X%P: не може да Ñе намери завиÑимоÑÑ‚ за верÑÐ¸Ñ '%s'\n"
+
+#: ldlang.c:7756
+msgid "%X%P: unable to read .exports section contents\n"
+msgstr "%X%P: не може да Ñе прочете Ñъдържанието на раздел .exports\n"
+
+#: ldmain.c:239
+msgid "%X%P: can't set BFD default target to `%s': %E\n"
+msgstr "%X%P: цел по подразбиране на BFD, не можа да Ñе уÑтанови на '%s': %E\n"
+
+#: ldmain.c:307
+msgid "%P%F: -r and -shared may not be used together\n"
+msgstr "%P%F: -r и -shared не може да Ñе използват заедно\n"
+
+#: ldmain.c:350
+msgid "%P%F: -F may not be used without -shared\n"
+msgstr "%P%F: -F не може да Ñе използва без -shared\n"
+
+#: ldmain.c:352
+msgid "%P%F: -f may not be used without -shared\n"
+msgstr "%P%F: -f не може да Ñе използва без -shared\n"
+
+#: ldmain.c:400
+msgid "using external linker script:"
+msgstr "използване на външен Ñкрипт за Ñвързване:"
+
+#: ldmain.c:402
+msgid "using internal linker script:"
+msgstr "използване на вътрешен Ñкрипт за Ñвързване:"
+
+#: ldmain.c:436
+msgid "%P%F: no input files\n"
+msgstr "%P%F: без входни файлове\n"
+
+#: ldmain.c:440
+msgid "%P: mode %s\n"
+msgstr "%P: режим %s\n"
+
+#: ldmain.c:456
+msgid "%P%F: cannot open map file %s: %E\n"
+msgstr "%P%F: не можа да Ñе отвори файл Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð·ÑÐ²Ð°Ð½Ð¸Ñ %s: %E\n"
+
+#: ldmain.c:485
+msgid "%P: %s: error in plugin cleanup (ignored)\n"
+msgstr "%P: %s: грешка при почиÑтване на приÑтавка, пренебрегната\n"
+
+#: ldmain.c:494
+msgid "%P: link errors found, deleting executable `%s'\n"
+msgstr "%P: грешка при Ñвързване, изтриване на Ð¸Ð·Ð¿ÑŠÐ»Ð½Ð¸Ð¼Ð¸Ñ Ñ„Ð°Ð¹Ð» '%s'\n"
+
+#: ldmain.c:503
+msgid "%F%B: final close failed: %E\n"
+msgstr "%F%B: пропадна заключителното затварÑне: %E\n"
+
+#: ldmain.c:529
+msgid "%X%P: unable to open for source of copy `%s'\n"
+msgstr "%X%P: не можа да Ñе отвори източника на копието '%s'\n"
+
+#: ldmain.c:532
+msgid "%X%P: unable to open for destination of copy `%s'\n"
+msgstr "%X%P: не можа да Ñе отвори целта на копието '%s'\n"
+
+#: ldmain.c:539
+msgid "%P: Error writing file `%s'\n"
+msgstr "%P: Грешка при Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° файла '%s'\n"
+
+#: ldmain.c:544 pe-dll.c:1729
+#, c-format
+msgid "%P: Error closing file `%s'\n"
+msgstr "%P: Грешка при затварÑне на файла '%s'\n"
+
+#: ldmain.c:560
+#, c-format
+msgid "%s: total time in link: %ld.%06ld\n"
+msgstr "%s: общо време за Ñвързване: %ld.%06ld\n"
+
+#: ldmain.c:563
+#, c-format
+msgid "%s: data size %ld\n"
+msgstr "%s: размер на данни %ld\n"
+
+#: ldmain.c:646
+msgid "%P%F: missing argument to -m\n"
+msgstr "%P%F: липÑва аргумент за -m\n"
+
+#: ldmain.c:694 ldmain.c:714 ldmain.c:746 plugin.c:772
+msgid "%P%F: bfd_hash_table_init failed: %E\n"
+msgstr "%P%F: bfd_hash_table_init не уÑпÑ: %E\n"
+
+#: ldmain.c:698 ldmain.c:718
+msgid "%P%F: bfd_hash_lookup failed: %E\n"
+msgstr "%P%F: bfd_hash_lookup не уÑпÑ: %E\n"
+
+#: ldmain.c:732
+msgid "%X%P: error: duplicate retain-symbols-file\n"
+msgstr "%X%P: грешка: повторен retain-symbols-file\n"
+
+#: ldmain.c:776
+msgid "%P%F: bfd_hash_lookup for insertion failed: %E\n"
+msgstr "%P%F: bfd_hash_lookup не уÑÐ¿Ñ Ð¿Ñ€Ð¸ вмъкване: %E\n"
+
+#: ldmain.c:781
+msgid "%P: `-retain-symbols-file' overrides `-s' and `-S'\n"
+msgstr "%P: '-retain-symbols-file' Ð¾Ñ‚Ð¼ÐµÐ½Ñ '-s' и '-S'\n"
+
+#: ldmain.c:895
+#, c-format
+msgid ""
+"Archive member included because of file (symbol)\n"
+"\n"
+msgstr ""
+"Членове на архива включени заради файл(име)\n"
+"\n"
+
+#: ldmain.c:975
+msgid "%X%C: multiple definition of `%T'\n"
+msgstr "%X%C: многократни Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð·Ð° '%T'\n"
+
+#: ldmain.c:978
+msgid "%D: first defined here\n"
+msgstr "%D: първото определение тук\n"
+
+#: ldmain.c:982
+msgid "%P: Disabling relaxation: it will not work with multiple definitions\n"
+msgstr "%P: ЗабранÑва намалÑването: не работи Ñ Ð¼Ð½Ð¾Ð³Ð¾ÐºÑ€Ð°Ñ‚Ð½Ð¸ определениÑ\n"
+
+#: ldmain.c:1012
+msgid "%B: warning: definition of `%T' overriding common\n"
+msgstr "%B: предупр.: определението за '%T' припокрива общ\n"
+
+#: ldmain.c:1015
+msgid "%B: warning: common is here\n"
+msgstr "%B: предупр.: Ð¾Ð±Ñ‰Ð¸Ñ Ðµ тук\n"
+
+#: ldmain.c:1022
+msgid "%B: warning: common of `%T' overridden by definition\n"
+msgstr "%B: предупр.: Ð¾Ð±Ñ‰Ð¸Ñ Ð½Ð° '%T' е припокрит от определение\n"
+
+#: ldmain.c:1025
+msgid "%B: warning: defined here\n"
+msgstr "%B: предупр.: определено тук\n"
+
+#: ldmain.c:1032
+msgid "%B: warning: common of `%T' overridden by larger common\n"
+msgstr "B: предупр.: Ð¾Ð±Ñ‰Ð¸Ñ Ð½Ð° '%T' е припокрит от по-голÑм общ\n"
+
+#: ldmain.c:1035
+msgid "%B: warning: larger common is here\n"
+msgstr "%B: предупр.: по-големиÑÑ‚ общ е тук\n"
+
+#: ldmain.c:1039
+msgid "%B: warning: common of `%T' overriding smaller common\n"
+msgstr "%B: предупр.: Ð¾Ð±Ñ‰Ð¸Ñ Ð½Ð° '%T' припокрива по-малък общ\n"
+
+#: ldmain.c:1042
+msgid "%B: warning: smaller common is here\n"
+msgstr "%B: предупр.: тук е по-малкиÑÑ‚ общ\n"
+
+#: ldmain.c:1046
+msgid "%B: warning: multiple common of `%T'\n"
+msgstr "%B: предупр.: многократeн общ за '%T'\n"
+
+#: ldmain.c:1048
+msgid "%B: warning: previous common is here\n"
+msgstr "%B: предупр.: тук е предишниÑÑ‚ общ\n"
+
+#: ldmain.c:1068 ldmain.c:1106
+msgid "%P: warning: global constructor %s used\n"
+msgstr "%P: предупр.: използван общ конÑтруктор %s\n"
+
+#: ldmain.c:1116
+msgid "%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"
+msgstr "%P%F: BFD грешка: BFD_RELOC_CTOR неподдържан\n"
+
+#. We found a reloc for the symbol we are looking for.
+#: ldmain.c:1170 ldmain.c:1172 ldmain.c:1174 ldmain.c:1192 ldmain.c:1237
+msgid "warning: "
+msgstr "предупр.: "
+
+#: ldmain.c:1273
+msgid "%F%P: bfd_hash_table_init failed: %E\n"
+msgstr "%F%P: bfd_hash_table_init не уÑпÑ: %E\n"
+
+#: ldmain.c:1280
+msgid "%F%P: bfd_hash_lookup failed: %E\n"
+msgstr "%F%P: bfd_hash_lookup не уÑпÑ: %E\n"
+
+#: ldmain.c:1301
+msgid "%X%C: undefined reference to `%T'\n"
+msgstr "%X%C: неопределена отпратка към '%T'\n"
+
+#: ldmain.c:1304
+msgid "%C: warning: undefined reference to `%T'\n"
+msgstr "%C: предупр.: неопределена отпратка към '%T'\n"
+
+#: ldmain.c:1310
+msgid "%X%D: more undefined references to `%T' follow\n"
+msgstr "%X%D: Ñледват още неопределени отпратки към '%T'\n"
+
+#: ldmain.c:1313
+msgid "%D: warning: more undefined references to `%T' follow\n"
+msgstr "%D: предупр.: Ñледват още неопределени отпратки към '%T'\n"
+
+#: ldmain.c:1324
+msgid "%X%B: undefined reference to `%T'\n"
+msgstr "%X%B: неопределена отпратка към '%T'\n"
+
+#: ldmain.c:1327
+msgid "%B: warning: undefined reference to `%T'\n"
+msgstr "%B: предупр.: неопределена отпратка към '%T'\n"
+
+#: ldmain.c:1333
+msgid "%X%B: more undefined references to `%T' follow\n"
+msgstr "%X%B: още неопределени отпратки към '%T' Ñледват\n"
+
+#: ldmain.c:1336
+msgid "%B: warning: more undefined references to `%T' follow\n"
+msgstr "%B: предупр.: още неопределени отпратки към '%T' Ñледват\n"
+
+#: ldmain.c:1375
+msgid " additional relocation overflows omitted from the output\n"
+msgstr " допълнителен излишък за премеÑÑ‚Ð²Ð°Ð½Ð¸Ñ Ð¸Ð·Ð¿ÑƒÑнат в резултата\n"
+
+#: ldmain.c:1388
+msgid " relocation truncated to fit: %s against undefined symbol `%T'"
+msgstr " премеÑтването отрÑзано, за да Ñъвпадне: %s Ñрещу неопределеното име '%T'"
+
+#: ldmain.c:1393
+msgid " relocation truncated to fit: %s against symbol `%T' defined in %A section in %B"
+msgstr " премеÑтването отрÑзано, за да Ñъвпадне: %s Ñрещу име '%T' определено в раздел %A от %B"
+
+#: ldmain.c:1405
+msgid " relocation truncated to fit: %s against `%T'"
+msgstr " премеÑтването отрÑзано, за да Ñъвпадне: %s Ñрещу '%T'"
+
+#: ldmain.c:1422
+#, c-format
+msgid "%X%C: dangerous relocation: %s\n"
+msgstr "%X%C: опаÑно премеÑтване: %s\n"
+
+#: ldmain.c:1437
+msgid "%X%C: reloc refers to symbol `%T' which is not being output\n"
+msgstr "%X%C: премеÑтването указва към име '%T', което не е изходÑщо\n"
+
+#: ldmisc.c:149
+#, c-format
+msgid "no symbol"
+msgstr "без имена"
+
+#: ldmisc.c:246
+#, c-format
+msgid "built in linker script:%u"
+msgstr "вграден Ñкрипт за Ñвързване:%u"
+
+#: ldmisc.c:324
+msgid "%B: In function `%T':\n"
+msgstr "%B: Във Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ '%T':\n"
+
+#: ldmisc.c:451
+msgid "%F%P: internal error %s %d\n"
+msgstr "%F%P: вътрешна грешка %s %d\n"
+
+#: ldmisc.c:500
+msgid "%P: internal error: aborting at %s line %d in %s\n"
+msgstr "%P: вътрешна грешка: прекратÑване в %s ред %d от %s\n"
+
+#: ldmisc.c:503
+msgid "%P: internal error: aborting at %s line %d\n"
+msgstr "%P: вътрешна грешка: прекратÑване в %s ред %d\n"
+
+#: ldmisc.c:505
+msgid "%P%F: please report this bug\n"
+msgstr "%P%F: молÑ, рапортувайте този проблем\n"
+
+#. Output for noisy == 2 is intended to follow the GNU standards.
+#: ldver.c:39
+#, c-format
+msgid "GNU ld %s\n"
+msgstr "ГÐУ ld %s\n"
+
+#: ldver.c:43
+#, c-format
+msgid "Copyright 2010 Free Software Foundation, Inc.\n"
+msgstr "ÐвторÑко право: 2010 Free Software Foundation, Inc.\n"
+
+#: ldver.c:44
+#, c-format
+msgid ""
+"This program is free software; you may redistribute it under the terms of\n"
+"the GNU General Public License version 3 or (at your option) a later version.\n"
+"This program has absolutely no warranty.\n"
+msgstr ""
+"Тази програма е Ñвободен Ñофтуер: можете да Ñ Ñ€Ð°Ð·Ð¿Ñ€Ð¾ÑтранÑвате под уÑловиÑта\n"
+"на Ð’Ñеобщ Публичен Лиценз ГÐУ верÑÐ¸Ñ 3 или по ваш избор, Ñледваща верÑиÑ.\n"
+"Тази програма е без гаранции.\n"
+
+#: ldver.c:54
+#, c-format
+msgid " Supported emulations:\n"
+msgstr " Поддържани подражаваниÑ:\n"
+
+#: ldwrite.c:62 ldwrite.c:207
+msgid "%P%F: bfd_new_link_order failed\n"
+msgstr "%P%F: пропадна bfd_new_link_order\n"
+
+#: ldwrite.c:365
+msgid "%F%P: cannot create split section name for %s\n"
+msgstr "%F%P: при разцепване на раздел, не можа да Ñе Ñъздаде име за %s\n"
+
+#: ldwrite.c:377
+msgid "%F%P: clone section failed: %E\n"
+msgstr "%F%P: пропадна копирането на раздел: %E\n"
+
+#: ldwrite.c:418
+#, c-format
+msgid "%8x something else\n"
+msgstr "%8x други\n"
+
+#: ldwrite.c:588
+msgid "%F%P: final link failed: %E\n"
+msgstr "%F%P: пропадна заключителното Ñвързване: %E\n"
+
+#: lexsup.c:219 lexsup.c:368
+msgid "KEYWORD"
+msgstr "КЛЮЧ"
+
+#: lexsup.c:219
+msgid "Shared library control for HP/UX compatibility"
+msgstr "Управление на Ñподелени библиотеки за ÑъвмеÑтимоÑÑ‚ Ñ HP/UX"
+
+#: lexsup.c:222
+msgid "ARCH"
+msgstr "ÐРХИТЕКТУРÐ"
+
+#: lexsup.c:222
+msgid "Set architecture"
+msgstr "Задава архитектура"
+
+#: lexsup.c:224 lexsup.c:487
+msgid "TARGET"
+msgstr "РЕЗУЛТÐТ"
+
+#: lexsup.c:224
+msgid "Specify target for following input files"
+msgstr "Задава вида на резултата за Ñледващите входни файлове"
+
+#: lexsup.c:227 lexsup.c:278 lexsup.c:296 lexsup.c:309 lexsup.c:311
+#: lexsup.c:441 lexsup.c:501 lexsup.c:563 lexsup.c:576
+msgid "FILE"
+msgstr "ФÐЙЛ"
+
+#: lexsup.c:227
+msgid "Read MRI format linker script"
+msgstr "Използва Ñкрипт за Ñвързване в MRI формат"
+
+#: lexsup.c:229
+msgid "Force common symbols to be defined"
+msgstr "Принудително определÑне на общи имена"
+
+#: lexsup.c:233 lexsup.c:545 lexsup.c:547 lexsup.c:549 lexsup.c:551
+msgid "ADDRESS"
+msgstr "ÐДРЕС"
+
+#: lexsup.c:233
+msgid "Set start address"
+msgstr "Задава начален адреÑ"
+
+#: lexsup.c:235
+msgid "Export all dynamic symbols"
+msgstr "ИзнаÑÑне на вÑички динамични имена"
+
+#: lexsup.c:237
+msgid "Undo the effect of --export-dynamic"
+msgstr "ÐžÑ‚Ð¼ÐµÐ½Ñ Ð´ÐµÐ¹Ñтвието на --export-dynamic"
+
+#: lexsup.c:239
+msgid "Link big-endian objects"
+msgstr "Свързване на обекти ÑÑŠÑ Ñтарши байт първи"
+
+#: lexsup.c:241
+msgid "Link little-endian objects"
+msgstr "Свързване на обекти ÑÑŠÑ Ð¼Ð»Ð°Ð´ÑˆÐ¸ байт първи"
+
+#: lexsup.c:243 lexsup.c:246
+msgid "SHLIB"
+msgstr "СПОД_БИБЛ"
+
+#: lexsup.c:243
+msgid "Auxiliary filter for shared object symbol table"
+msgstr "Допълнителен филтър за таблицата Ñ Ð¸Ð¼ÐµÐ½Ð° на Ñподелени обекти"
+
+#: lexsup.c:246
+msgid "Filter for shared object symbol table"
+msgstr "Филтър за таблицата Ñ Ð¸Ð¼ÐµÐ½Ð° на Ñподелени обекти"
+
+#: lexsup.c:249
+msgid "Ignored"
+msgstr "Пренебрегнат"
+
+#: lexsup.c:251
+msgid "SIZE"
+msgstr "РÐЗМЕР"
+
+#: lexsup.c:251
+msgid "Small data size (if no size, same as --shared)"
+msgstr "Данни Ñ Ð¿Ð¾-малък размер (без размер е като --shared)"
+
+#: lexsup.c:254
+msgid "FILENAME"
+msgstr "ИМЕ_ФÐЙЛ"
+
+#: lexsup.c:254
+msgid "Set internal name of shared library"
+msgstr "Ð—Ð°Ð´Ð°Ð²Ñ Ð²ÑŠÑ‚Ñ€ÐµÑˆÐ½Ð¾ име на Ñподелена библиотека"
+
+#: lexsup.c:256
+msgid "PROGRAM"
+msgstr "ПРОГРÐÐœÐ"
+
+#: lexsup.c:256
+msgid "Set PROGRAM as the dynamic linker to use"
+msgstr "Задава ПРОГРÐМРза използване при динамично Ñвързване"
+
+#: lexsup.c:259
+msgid "LIBNAME"
+msgstr "БИБЛ_ИМЕ"
+
+#: lexsup.c:259
+msgid "Search for library LIBNAME"
+msgstr "ТърÑене на библиотека БИБЛ_ИМЕ"
+
+#: lexsup.c:261
+msgid "DIRECTORY"
+msgstr "ДИРЕКТОРИЯ"
+
+#: lexsup.c:261
+msgid "Add DIRECTORY to library search path"
+msgstr "Ð”Ð¾Ð±Ð°Ð²Ñ Ð”Ð˜Ð Ð•ÐšÐ¢ÐžÐ Ð˜Ð¯ към Ð¿ÑŠÑ‚Ñ Ð·Ð° Ñ‚ÑŠÑ€Ñене на библиотеки"
+
+#: lexsup.c:264
+msgid "Override the default sysroot location"
+msgstr "Припокрива Ð¿Ð¾Ð´Ñ€Ð°Ð·Ð±Ð¸Ñ€Ð°Ñ‰Ð¸Ñ Ñе systoot"
+
+#: lexsup.c:266
+msgid "EMULATION"
+msgstr "ПОДРÐЖÐÐ’ÐÐЕ"
+
+#: lexsup.c:266
+msgid "Set emulation"
+msgstr "Задава подражаване"
+
+#: lexsup.c:268
+msgid "Print map file on standard output"
+msgstr "Извежда на ÑÑ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¸Ñ Ð¸Ð·Ñ…Ð¾Ð´ файл Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð·ÑваниÑта"
+
+#: lexsup.c:270
+msgid "Do not page align data"
+msgstr "Да не Ñе подравнÑват данните на Ñтраници"
+
+#: lexsup.c:272
+msgid "Do not page align data, do not make text readonly"
+msgstr "Да не Ñе подравнÑват данните на Ñтраници, кода да не е Ñамо за четене"
+
+#: lexsup.c:275
+msgid "Page align data, make text readonly"
+msgstr "ПодравнÑват данните на Ñтраници, кода да е Ñамо за четене"
+
+#: lexsup.c:278
+msgid "Set output file name"
+msgstr "Задава име на файл за извеждане"
+
+#: lexsup.c:280
+msgid "Optimize output file"
+msgstr "Оптимизиране на Ð¸Ð·Ð²ÐµÐ¶Ð´Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»"
+
+#: lexsup.c:283
+msgid "PLUGIN"
+msgstr "ПРИСТÐВКÐ"
+
+#: lexsup.c:283
+msgid "Load named plugin"
+msgstr "Зарежда именувана приÑтавка"
+
+#: lexsup.c:285
+msgid "ARG"
+msgstr "ÐРГ"
+
+#: lexsup.c:285
+msgid "Send arg to last-loaded plugin"
+msgstr "Изпраща арг. към поÑледно заредената приÑтавка"
+
+#: lexsup.c:288
+msgid "Ignored for SVR4 compatibility"
+msgstr "Пренебрегнат(ÑъвмеÑтимоÑÑ‚ ÑÑŠÑ SVR4)"
+
+#: lexsup.c:292
+msgid "Generate relocatable output"
+msgstr "Създаване на премеÑтваем резултат"
+
+#: lexsup.c:296
+msgid "Just link symbols (if directory, same as --rpath)"
+msgstr "Само Ñвързване на имената (ако е директориÑ, като --rpath)"
+
+#: lexsup.c:299
+msgid "Strip all symbols"
+msgstr "Премахване на вÑички имена"
+
+#: lexsup.c:301
+msgid "Strip debugging symbols"
+msgstr "Премахване на имена за траÑиране"
+
+#: lexsup.c:303
+msgid "Strip symbols in discarded sections"
+msgstr "Премахване на имена в отхвърлени раздели"
+
+#: lexsup.c:305
+msgid "Do not strip symbols in discarded sections"
+msgstr "Без премахване на имена в отхвърлени раздели"
+
+#: lexsup.c:307
+msgid "Trace file opens"
+msgstr "ПроÑледÑване на отварÑните файлове"
+
+#: lexsup.c:309
+msgid "Read linker script"
+msgstr "Използва Ñкрипт за Ñвързване"
+
+#: lexsup.c:311
+msgid "Read default linker script"
+msgstr "Използва Ñкрипт за Ñвързване по подразбиране"
+
+#: lexsup.c:315 lexsup.c:333 lexsup.c:418 lexsup.c:439 lexsup.c:538
+#: lexsup.c:566 lexsup.c:605
+msgid "SYMBOL"
+msgstr "ИМЕ"
+
+#: lexsup.c:315
+msgid "Start with undefined reference to SYMBOL"
+msgstr "Ðачало Ñ Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð° отпратка към ИМЕ"
+
+#: lexsup.c:318
+msgid "[=SECTION]"
+msgstr "=РÐЗДЕЛ"
+
+#: lexsup.c:319
+msgid "Don't merge input [SECTION | orphan] sections"
+msgstr "Без Ñливане на входÑщи [РÐЗДЕЛ | оÑиротÑл] раздели"
+
+#: lexsup.c:321
+msgid "Build global constructor/destructor tables"
+msgstr "Изграждане на общи конÑтрутор/деÑтруктор таблици"
+
+#: lexsup.c:323
+msgid "Print version information"
+msgstr "Извеждане на Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° верÑиÑ"
+
+#: lexsup.c:325
+msgid "Print version and emulation information"
+msgstr "Извеждане на Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° верÑÐ¸Ñ Ð¸ подражаване"
+
+#: lexsup.c:327
+msgid "Discard all local symbols"
+msgstr "ОтхвърлÑне на вÑички меÑтни имена"
+
+#: lexsup.c:329
+msgid "Discard temporary local symbols (default)"
+msgstr "ОтхвърлÑне на временни меÑтни имена (по подразбиране)"
+
+#: lexsup.c:331
+msgid "Don't discard any local symbols"
+msgstr "Без отхвърлÑне на меÑтни имена"
+
+#: lexsup.c:333
+msgid "Trace mentions of SYMBOL"
+msgstr "ПроÑледÑване на поÑочваниÑта на ИМЕ"
+
+#: lexsup.c:335 lexsup.c:503 lexsup.c:505
+msgid "PATH"
+msgstr "ПЪТ"
+
+#: lexsup.c:335
+msgid "Default search path for Solaris compatibility"
+msgstr "Път за Ñ‚ÑŠÑ€Ñене по подразбиране за ÑъвмеÑтимоÑÑ‚ ÑÑŠÑ Ð¡Ð¾Ð»Ð°Ñ€Ð¸Ñ"
+
+#: lexsup.c:338
+msgid "Start a group"
+msgstr "Ðачало на група"
+
+#: lexsup.c:340
+msgid "End a group"
+msgstr "Край на група"
+
+#: lexsup.c:344
+msgid "Accept input files whose architecture cannot be determined"
+msgstr "Приемане на входÑщи файлове, чиÑто архитектура не може да Ñе определи"
+
+#: lexsup.c:348
+msgid "Reject input files whose architecture is unknown"
+msgstr "Игнориране на входни файлове Ñ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° архитектура"
+
+#: lexsup.c:361
+msgid "Only set DT_NEEDED for following dynamic libs if used"
+msgstr "УÑтановÑва Ñе DT_NEEDED за Ñледните динамични библ., Ñамо ако Ñе използва"
+
+#: lexsup.c:364
+msgid ""
+"Always set DT_NEEDED for dynamic libraries mentioned on\n"
+" the command line"
+msgstr ""
+"Винаги Ñе уÑтановÑва DT_NEEDED за динамичните библиотеки\n"
+" поÑочени на ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¸Ñ Ñ€ÐµÐ´"
+
+#: lexsup.c:368
+msgid "Ignored for SunOS compatibility"
+msgstr "Пренебрегнат(ÑъвмеÑтимоÑÑ‚ ÑÑŠÑ SunOS)"
+
+#: lexsup.c:370
+msgid "Link against shared libraries"
+msgstr "Свързване ÑÑŠÑ Ñподелени библиотеки"
+
+#: lexsup.c:376
+msgid "Do not link against shared libraries"
+msgstr "Без Ñвързване ÑÑŠÑ Ñподелени библиотеки"
+
+#: lexsup.c:384
+msgid "Bind global references locally"
+msgstr "Привързване на общи препратки като меÑтни"
+
+#: lexsup.c:386
+msgid "Bind global function references locally"
+msgstr "Привързване на общи препратки за функции като меÑтни"
+
+#: lexsup.c:388
+msgid "Check section addresses for overlaps (default)"
+msgstr "Проверка за припокриване на адреÑите на раздели (по подразбиране)"
+
+#: lexsup.c:391
+msgid "Do not check section addresses for overlaps"
+msgstr "Без проверка за припокриване за адреÑите на раздели"
+
+#: lexsup.c:395
+msgid "Copy DT_NEEDED links mentioned inside DSOs that follow"
+msgstr "Копиране на DT_NEEDED връзки Ñпоменати в DSO-то, което Ñледва"
+
+#: lexsup.c:399
+msgid "Do not copy DT_NEEDED links mentioned inside DSOs that follow"
+msgstr "Да не Ñе копират DT_NEEDED връзки Ñпоменати в DSO-то, което Ñледва"
+
+#: lexsup.c:403
+msgid "Output cross reference table"
+msgstr "Извежда таблица Ñ ÐºÑ€ÑŠÑтоÑани отпратки"
+
+#: lexsup.c:405
+msgid "SYMBOL=EXPRESSION"
+msgstr "ИМЕ=ИЗРÐЗ"
+
+#: lexsup.c:405
+msgid "Define a symbol"
+msgstr "Задаване на име"
+
+#: lexsup.c:407
+msgid "[=STYLE]"
+msgstr "[=ÐÐЧИÐ]"
+
+#: lexsup.c:407
+msgid "Demangle symbol names [using STYLE]"
+msgstr "Декориране на имена [използвайки ÐÐЧИÐ]"
+
+#: lexsup.c:410
+msgid "Generate embedded relocs"
+msgstr "Създаване на вградени премеÑтваниÑ"
+
+#: lexsup.c:412
+msgid "Treat warnings as errors"
+msgstr "Третиране на Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ ÐºÐ°Ñ‚Ð¾ грешки"
+
+#: lexsup.c:415
+msgid "Do not treat warnings as errors (default)"
+msgstr "Да не Ñе третиране Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ ÐºÐ°Ñ‚Ð¾ грешки (по подразбиране)"
+
+#: lexsup.c:418
+msgid "Call SYMBOL at unload-time"
+msgstr "Извикване на ИМЕ по време разтоварване"
+
+#: lexsup.c:420
+msgid "Force generation of file with .exe suffix"
+msgstr "Принудително Ñъздаване на файл Ñ Ð½Ð°Ñтавка .exe "
+
+#: lexsup.c:422
+msgid "Remove unused sections (on some targets)"
+msgstr "Изтриване на неизползвани раздели (за нÑкои резултати)"
+
+#: lexsup.c:425
+msgid "Don't remove unused sections (default)"
+msgstr "Без изтриване на неизползвани раздели (по подразбиране)"
+
+#: lexsup.c:428
+msgid "List removed unused sections on stderr"
+msgstr "Извеждане, на изхода за грешки, на изтритите неизползвани раздели"
+
+#: lexsup.c:431
+msgid "Do not list removed unused sections"
+msgstr "Без извеждане на изтритите неизползвани раздели"
+
+#: lexsup.c:434
+msgid "Set default hash table size close to <NUMBER>"
+msgstr "УÑтановÑва размер по подразбиране на таблицат за хеш близък до <ЧИСЛО>"
+
+#: lexsup.c:437
+msgid "Print option help"
+msgstr "Извеждане на помощ за опците"
+
+#: lexsup.c:439
+msgid "Call SYMBOL at load-time"
+msgstr "Извикване на ИМЕ по време на зареждане"
+
+#: lexsup.c:441
+msgid "Write a map file"
+msgstr "ЗапиÑване на файл Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð·ÑваниÑ"
+
+#: lexsup.c:443
+msgid "Do not define Common storage"
+msgstr "Без определÑне на Ð°Ð´Ñ€ÐµÑ Ð·Ð° общи имена"
+
+#: lexsup.c:445
+msgid "Do not demangle symbol names"
+msgstr "Без Ð´ÐµÐºÐ¾Ñ€Ð°Ñ†Ð¸Ñ Ð·Ð° имената"
+
+#: lexsup.c:447
+msgid "Use less memory and more disk I/O"
+msgstr "Използване на по-малко памет и повече диÑкови операции"
+
+#: lexsup.c:449
+msgid "Do not allow unresolved references in object files"
+msgstr "ÐепозволÑва неÑвързани отпратки при обектни файлове"
+
+#: lexsup.c:452
+msgid "Allow unresolved references in shared libaries"
+msgstr "ПозволÑва неÑвързани отпратки при Ñподелени библиотеки"
+
+#: lexsup.c:456
+msgid "Do not allow unresolved references in shared libs"
+msgstr "ÐепозволÑва неÑвързани отпратки при Ñподелени библиотеки"
+
+#: lexsup.c:460
+msgid "Allow multiple definitions"
+msgstr "ПозволÑва повтарÑне на определениÑ"
+
+#: lexsup.c:462
+msgid "Disallow undefined version"
+msgstr "ÐепозволÑва неопределена верÑиÑ"
+
+#: lexsup.c:464
+msgid "Create default symbol version"
+msgstr "Създаване на подразбираща Ñе верÑÐ¸Ñ Ð·Ð° име"
+
+#: lexsup.c:467
+msgid "Create default symbol version for imported symbols"
+msgstr "Създаване на подразбираща Ñе верÑÐ¸Ñ Ð·Ð° име при внеÑените имена"
+
+#: lexsup.c:470
+msgid "Don't warn about mismatched input files"
+msgstr "Без предупреждениe за неÑъответÑтващи входÑщи файлове"
+
+#: lexsup.c:473
+msgid "Don't warn on finding an incompatible library"
+msgstr "Без Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ откриване на неÑъвмеÑтими библиотеки"
+
+#: lexsup.c:476
+msgid "Turn off --whole-archive"
+msgstr "Изключване на --whole-archive"
+
+#: lexsup.c:478
+msgid "Create an output file even if errors occur"
+msgstr "Създаване на изходен файл, дори при грешки"
+
+#: lexsup.c:483
+msgid ""
+"Only use library directories specified on\n"
+" the command line"
+msgstr ""
+"Използване Ñамо на директорите за библиотеки\n"
+" зададени на ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¸Ñ Ñ€ÐµÐ´"
+
+#: lexsup.c:487
+msgid "Specify target of output file"
+msgstr "Задаване на целта за резултата"
+
+#: lexsup.c:490
+msgid "Ignored for Linux compatibility"
+msgstr "Пренебрегнат(ÑъвмеÑтимоÑÑ‚ Ñ Ð»Ð¸Ð½ÑƒÐºÑ)"
+
+#: lexsup.c:493
+msgid "Reduce memory overheads, possibly taking much longer"
+msgstr "ÐамалÑване на използваната памет, възможно е Ñвързването да протече по-дълго"
+
+#: lexsup.c:496
+msgid "Reduce code size by using target specific optimizations"
+msgstr "ÐамалÑване на размера на кода Ñ Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ð½Ðµ на Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñ…Ð°Ñ€Ð°ÐºÑ‚ÐµÑ€Ð½Ð° за целта"
+
+#: lexsup.c:498
+msgid "Do not use relaxation techniques to reduce code size"
+msgstr "Да не Ñе използват намалÑващи похвати, за да Ñе ограничи размера на кода"
+
+#: lexsup.c:501
+msgid "Keep only symbols listed in FILE"
+msgstr "Запазване Ñамо на имената изброени във ФÐЙЛ"
+
+#: lexsup.c:503
+msgid "Set runtime shared library search path"
+msgstr "Задава път за Ñ‚ÑŠÑ€Ñене на Ñподелена библиотека по време на изпълнение"
+
+#: lexsup.c:505
+msgid "Set link time shared library search path"
+msgstr "Задава път за Ñ‚ÑŠÑ€Ñене на Ñподелена библиотека по време на Ñвързване"
+
+#: lexsup.c:508
+msgid "Create a shared library"
+msgstr "Създаване на Ñподелена библиотека"
+
+#: lexsup.c:512
+msgid "Create a position independent executable"
+msgstr "Създаване на позиционно незавиÑим изпълним файл"
+
+#: lexsup.c:516
+msgid "[=ascending|descending]"
+msgstr "[=възходÑщ|низходÑщ]"
+
+#: lexsup.c:517
+msgid "Sort common symbols by alignment [in specified order]"
+msgstr "Подреждане на общите имена по подравнÑване [в Ð·Ð°Ð´Ð°Ð´ÐµÐ½Ð¸Ñ Ñ€ÐµÐ´]"
+
+#: lexsup.c:522
+msgid "name|alignment"
+msgstr "име|подравнÑване"
+
+#: lexsup.c:523
+msgid "Sort sections by name or maximum alignment"
+msgstr "Подреждане на раздели по име или макÑимално подравнÑваме"
+
+#: lexsup.c:525
+msgid "COUNT"
+msgstr "БРОЙ"
+
+#: lexsup.c:525
+msgid "How many tags to reserve in .dynamic section"
+msgstr "Колко отметки да Ñе заделÑÑ‚ за раздел .dynamic"
+
+#: lexsup.c:528
+msgid "[=SIZE]"
+msgstr "[=РÐЗМЕР]"
+
+#: lexsup.c:528
+msgid "Split output sections every SIZE octets"
+msgstr "РазделÑне на резултатните раздели на вÑеки РÐЗМЕР оÑморки"
+
+#: lexsup.c:531
+msgid "[=COUNT]"
+msgstr "[=БРОЙ]"
+
+#: lexsup.c:531
+msgid "Split output sections every COUNT relocs"
+msgstr "РазделÑне на резултатните раздели на вÑеки БРОЙ премеÑтваниÑ"
+
+#: lexsup.c:534
+msgid "Print memory usage statistics"
+msgstr "Извеждане на ÑтатиÑтика за изполване на паметта"
+
+#: lexsup.c:536
+msgid "Display target specific options"
+msgstr "Извеждане на опции, Ñпецифични за целта"
+
+#: lexsup.c:538
+msgid "Do task level linking"
+msgstr "Свързване на ниво задача"
+
+#: lexsup.c:540
+msgid "Use same format as native linker"
+msgstr "Използване на ÑÑŠÑ‰Ð¸Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ като Ñтандартната програма за Ñвързване"
+
+#: lexsup.c:542
+msgid "SECTION=ADDRESS"
+msgstr "РÐЗДЕЛ=ÐДРЕС"
+
+#: lexsup.c:542
+msgid "Set address of named section"
+msgstr "Задаване на Ð°Ð´Ñ€ÐµÑ Ð½Ð° именуван раздел"
+
+#: lexsup.c:545
+msgid "Set address of .bss section"
+msgstr "Задаване на Ð°Ð´Ñ€ÐµÑ Ð½Ð° раздел .bss"
+
+#: lexsup.c:547
+msgid "Set address of .data section"
+msgstr "Задаване на Ð°Ð´Ñ€ÐµÑ Ð½Ð° раздел .data"
+
+#: lexsup.c:549
+msgid "Set address of .text section"
+msgstr "Задаване на Ð°Ð´Ñ€ÐµÑ Ð½Ð° раздел .text"
+
+#: lexsup.c:551
+msgid "Set address of text segment"
+msgstr "Задаване Ð°Ð´Ñ€ÐµÑ Ð½Ð° раздел .text"
+
+#: lexsup.c:554
+msgid ""
+"How to handle unresolved symbols. <method> is:\n"
+" ignore-all, report-all, ignore-in-object-files,\n"
+" ignore-in-shared-libs"
+msgstr ""
+"Как да Ñе обработват неÑвързани имена. <метод> може да е:\n"
+" ignore-all, report-all, ignore-in-object-files,\n"
+" ignore-in-shared-libs"
+
+#: lexsup.c:559
+msgid "Output lots of information during link"
+msgstr "Извеждане, при Ñвързване, на допълнителна информациÑ"
+
+#: lexsup.c:563
+msgid "Read version information script"
+msgstr "Използва Ñкрипт Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° верÑии"
+
+#: lexsup.c:566
+msgid ""
+"Take export symbols list from .exports, using\n"
+" SYMBOL as the version."
+msgstr ""
+"Използване на ÑпиÑък Ñ Ð¸Ð¼ÐµÐ½Ð° за екÑпорт от .exports, използвайки\n"
+" ИМЕ като верÑиÑ."
+
+#: lexsup.c:570
+msgid "Add data symbols to dynamic list"
+msgstr "ДобавÑне на имената на данните към динамичен ÑпиÑък"
+
+#: lexsup.c:572
+msgid "Use C++ operator new/delete dynamic list"
+msgstr "Използване на динамичен ÑпиÑък за C++ оператори new/delete"
+
+#: lexsup.c:574
+msgid "Use C++ typeinfo dynamic list"
+msgstr "Използване на динамичен ÑпиÑък за \"C++ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° тип\""
+
+#: lexsup.c:576
+msgid "Read dynamic list"
+msgstr "Използва динамичен ÑпиÑък"
+
+#: lexsup.c:578
+msgid "Warn about duplicate common symbols"
+msgstr "Предупреждение при повторени общи имена"
+
+#: lexsup.c:580
+msgid "Warn if global constructors/destructors are seen"
+msgstr "Предупреждение, ако Ñе Ñрещнат общи конÑтрутори/деÑтруктори"
+
+#: lexsup.c:583
+msgid "Warn if the multiple GP values are used"
+msgstr "Предупреждение за използване на нÑколко GP ÑтойноÑти"
+
+#: lexsup.c:585
+msgid "Warn only once per undefined symbol"
+msgstr "Еднократно предупреждение за неопределено име"
+
+#: lexsup.c:587
+msgid "Warn if start of section changes due to alignment"
+msgstr "Предупреждение, ако началото на раздел Ñе Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ Ð·Ð°Ñ€Ð°Ð´Ð¸ подравнÑване"
+
+#: lexsup.c:590
+msgid "Warn if shared object has DT_TEXTREL"
+msgstr "Предупреждение, ако Ñподелен обект Ñъдържа DT_TEXTREL"
+
+#: lexsup.c:593
+msgid "Warn if an object has alternate ELF machine code"
+msgstr "Предупреждение ако обекта е Ñ Ð´Ñ€ÑƒÐ³ ELF ELF код за машина"
+
+#: lexsup.c:597
+msgid "Report unresolved symbols as warnings"
+msgstr "Рапортуване като предупреждениÑ, на неÑвързани имена"
+
+#: lexsup.c:600
+msgid "Report unresolved symbols as errors"
+msgstr "Рапортуване, като грешки, на неÑвързани имена"
+
+#: lexsup.c:602
+msgid "Include all objects from following archives"
+msgstr "Включване на вÑички обекти от Ñледните архиви"
+
+#: lexsup.c:605
+msgid "Use wrapper functions for SYMBOL"
+msgstr "Използване на 'обвиващи' функции за ИМЕ"
+
+#: lexsup.c:754
+msgid "%P: unrecognized option '%s'\n"
+msgstr "%P: неразпозната Ð¾Ð¿Ñ†Ð¸Ñ '%s'\n"
+
+#: lexsup.c:758
+msgid "%P%F: use the --help option for usage information\n"
+msgstr "%P%F: за Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° употреба Ñе използва Ð¾Ð¿Ñ†Ð¸Ñ --help \n"
+
+#: lexsup.c:776
+msgid "%P%F: unrecognized -a option `%s'\n"
+msgstr "%P%F: неразпозната Ð¾Ð¿Ñ†Ð¸Ñ -a '%s'\n"
+
+#: lexsup.c:789
+msgid "%P%F: unrecognized -assert option `%s'\n"
+msgstr "%P%F: неразпозната Ð¾Ð¿Ñ†Ð¸Ñ -assert '%s'\n"
+
+#: lexsup.c:832
+msgid "%F%P: unknown demangling style `%s'"
+msgstr "%F%P: непознат начин за декориране на имена '%s'"
+
+#: lexsup.c:898
+msgid "%P%F: invalid number `%s'\n"
+msgstr "%P%F: неправилно чиÑло '%s'\n"
+
+#: lexsup.c:996
+msgid "%P%F: bad --unresolved-symbols option: %s\n"
+msgstr "%P%F: грешна Ð¾Ð¿Ñ†Ð¸Ñ --unresolved-symbols: %s\n"
+
+#: lexsup.c:1059
+msgid "%P%F: bad -plugin option\n"
+msgstr "%P%F: грешна Ð¾Ð¿Ñ†Ð¸Ñ -plugin\n"
+
+#: lexsup.c:1063
+msgid "%P%F: bad -plugin-opt option\n"
+msgstr "%P%F: грешна Ð¾Ð¿Ñ†Ð¸Ñ -plugin-opt\n"
+
+#. This can happen if the user put "-rpath,a" on the command
+#. line. (Or something similar. The comma is important).
+#. Getopt becomes confused and thinks that this is a -r option
+#. but it cannot parse the text after the -r so it refuses to
+#. increment the optind counter. Detect this case and issue
+#. an error message here. We cannot just make this a warning,
+#. increment optind, and continue because getopt is too confused
+#. and will seg-fault the next time around.
+#: lexsup.c:1080
+msgid "%P%F: bad -rpath option\n"
+msgstr "%P%F: грешна Ð¾Ð¿Ñ†Ð¸Ñ -rpath\n"
+
+#: lexsup.c:1194
+msgid "%P%F: -shared not supported\n"
+msgstr "%P%F: -shared не Ñе поддържа\n"
+
+#: lexsup.c:1203
+msgid "%P%F: -pie not supported\n"
+msgstr "%P%F: -pie не Ñе поддържа\n"
+
+#: lexsup.c:1211
+msgid "descending"
+msgstr "низходÑщ"
+
+#: lexsup.c:1213
+msgid "ascending"
+msgstr "възходÑщ"
+
+#: lexsup.c:1216
+msgid "%P%F: invalid common section sorting option: %s\n"
+msgstr "%P%F: неправилна обща Ð¾Ð¿Ñ†Ð¸Ñ Ð·Ð° подреждане на : %s\n"
+
+#: lexsup.c:1220
+msgid "name"
+msgstr "име"
+
+#: lexsup.c:1222
+msgid "alignment"
+msgstr "подравнÑване"
+
+#: lexsup.c:1225
+msgid "%P%F: invalid section sorting option: %s\n"
+msgstr "%P%F: неправилна Ð¾Ð¿Ñ†Ð¸Ñ Ð·Ð° подреждане на раздел: %s\n"
+
+#: lexsup.c:1259
+msgid "%P%F: invalid argument to option \"--section-start\"\n"
+msgstr "%P%F: неправилен аргумент за опциÑта \"--section-start\"\n"
+
+#: lexsup.c:1266
+msgid "%P%F: missing argument(s) to option \"--section-start\"\n"
+msgstr "%P%F: липÑват аргументи за опциÑта \"--section-start\"\n"
+
+#: lexsup.c:1490
+msgid "%P%F: group ended before it began (--help for usage)\n"
+msgstr "%P%F: групата завърши преди да е започната (--help за употреба)\n"
+
+#: lexsup.c:1518
+msgid "%P%X: --hash-size needs a numeric argument\n"
+msgstr "%P%X: --hash-size изиÑква чиÑло за аргумент\n"
+
+#: lexsup.c:1547
+msgid "%P%F: %s: error loading plugin\n"
+msgstr "%P%F: %s: грешка при зареждане на приÑтавка\n"
+
+#: lexsup.c:1578 lexsup.c:1591
+msgid "%P%F: invalid hex number `%s'\n"
+msgstr "%P%F: неправилно шеÑÑ‚. чиÑло '%s'\n"
+
+#: lexsup.c:1627
+#, c-format
+msgid "Usage: %s [options] file...\n"
+msgstr "Употреба: %s [опции] файл...\n"
+
+#: lexsup.c:1629
+#, c-format
+msgid "Options:\n"
+msgstr "Команди:\n"
+
+#: lexsup.c:1707
+#, c-format
+msgid " @FILE"
+msgstr " @ФÐЙЛ"
+
+#: lexsup.c:1710
+#, c-format
+msgid "Read options from FILE\n"
+msgstr "Използва опции от ФÐЙЛ\n"
+
+#. Note: Various tools (such as libtool) depend upon the
+#. format of the listings below - do not change them.
+#: lexsup.c:1715
+#, c-format
+msgid "%s: supported targets:"
+msgstr "%s: поддържани цели:"
+
+#: lexsup.c:1723
+#, c-format
+msgid "%s: supported emulations: "
+msgstr "%s: поддържани емулации: "
+
+#: lexsup.c:1728
+#, c-format
+msgid "%s: emulation specific options:\n"
+msgstr "%s: Ñпецифични опции при емулациÑ:\n"
+
+#: lexsup.c:1733
+#, c-format
+msgid "Report bugs to %s\n"
+msgstr "Подавайте доклади за грешки на %s\n"
+
+#: mri.c:292
+msgid "%P%F: unknown format type %s\n"
+msgstr "%P%F: непознат формат %s\n"
+
+#: pe-dll.c:430
+#, c-format
+msgid "%XUnsupported PEI architecture: %s\n"
+msgstr "%XÐеподдържна PEI архитектура: %s\n"
+
+#: pe-dll.c:788
+#, c-format
+msgid "%XCannot export %s: invalid export name\n"
+msgstr "%XÐе може да Ñе изнеÑе %s: неправилно име за екÑпорт\n"
+
+#: pe-dll.c:844
+#, c-format
+msgid "%XError, duplicate EXPORT with ordinals: %s (%d vs %d)\n"
+msgstr "%XГрешка, повторен EXPORT Ñ Ð½Ð¾Ð¼ÐµÑ€Ð°: %s (%d Ñ/у %d)\n"
+
+#: pe-dll.c:851
+#, c-format
+msgid "Warning, duplicate EXPORT: %s\n"
+msgstr "Предупреждение, повторен EXPORT: %s\n"
+
+#: pe-dll.c:938
+#, c-format
+msgid "%XCannot export %s: symbol not defined\n"
+msgstr "%XÐе може да Ñе изнеÑе %s: името не е определено\n"
+
+#: pe-dll.c:944
+#, c-format
+msgid "%XCannot export %s: symbol wrong type (%d vs %d)\n"
+msgstr "%XÐе може да Ñе изнеÑе %s: име ÑÑŠÑ Ñгрешен тип (%d Ñ/у %d)\n"
+
+#: pe-dll.c:951
+#, c-format
+msgid "%XCannot export %s: symbol not found\n"
+msgstr "%XÐе може да Ñе изнеÑе %s: името липÑва\n"
+
+#: pe-dll.c:1065
+#, c-format
+msgid "%XError, ordinal used twice: %d (%s vs %s)\n"
+msgstr "%XГрешка, номера е използван два пъти: %d (%s Ñ/у %s)\n"
+
+#: pe-dll.c:1446
+#, c-format
+msgid "%XError: %d-bit reloc in dll\n"
+msgstr "%XГрешка: %d-битово премеÑтване в dll\n"
+
+#: pe-dll.c:1574
+#, c-format
+msgid "%s: Can't open output def file %s\n"
+msgstr "%s: Ðе може да Ñе отвори за извеждане def-файл %s\n"
+
+#: pe-dll.c:1725
+#, c-format
+msgid "; no contents available\n"
+msgstr "; липÑва Ñъдържание\n"
+
+#: pe-dll.c:2652
+msgid "%C: variable '%T' can't be auto-imported. Please read the documentation for ld's --enable-auto-import for details.\n"
+msgstr "%C: променливата '%T' не може да Ñе внеÑе автоматично. Да Ñе прочете документациÑта на ld --enable-auto-import за повече информациÑ.\n"
+
+#: pe-dll.c:2682
+#, c-format
+msgid "%XCan't open .lib file: %s\n"
+msgstr "%XÐе може да Ñе отвори lib-файл: %s\n"
+
+#: pe-dll.c:2687
+#, c-format
+msgid "Creating library file: %s\n"
+msgstr "Създаване на библиотека: %s\n"
+
+#: pe-dll.c:2716
+#, c-format
+msgid "%Xbfd_openr %s: %E\n"
+msgstr "%Xbfd_openr %s: %E\n"
+
+#: pe-dll.c:2728
+#, c-format
+msgid "%X%s(%s): can't find member in non-archive file"
+msgstr "%X%s(%s): не е намерена член в файл, който не е архив"
+
+#: pe-dll.c:2740
+#, c-format
+msgid "%X%s(%s): can't find member in archive"
+msgstr "%X%s(%s): не е намерен член в архива"
+
+#: pe-dll.c:3177
+#, c-format
+msgid "%XError: can't use long section names on this arch\n"
+msgstr "%XError: на тази архитектура не може да Ñе използват дълги имена за раздели\n"
+
+#: plugin.c:178 plugin.c:212
+msgid "<no plugin>"
+msgstr "<без приÑтавка>"
+
+#: plugin.c:308
+msgid "%P%F: %s: non-ELF symbol in ELF BFD!"
+msgstr "%P%F: %s: не е ELF име за ELF BFD!"
+
+#: plugin.c:800
+msgid "%P%X: %s: hash table failure adding symbol %s"
+msgstr "%P%X: %s: грешка в хеш-таблицата при добавÑне на име %s"
+
+#: plugin.c:833
+msgid "%P%X: %s: can't find IR symbol '%s'"
+msgstr "%P%X: %s: не може да Ñе открие 'междинно' име '%s'"
+
+#: plugin.c:836
+msgid "%P%x: %s: bad IR symbol type %d"
+msgstr "%P%x: %s: неправилен тип за 'междинно' име %d"
diff --git a/binutils-2.21/ld/po/da.gmo b/binutils-2.21/ld/po/da.gmo
new file mode 100644
index 0000000..495c603
--- /dev/null
+++ b/binutils-2.21/ld/po/da.gmo
Binary files differ
diff --git a/binutils-2.21/ld/po/da.po b/binutils-2.21/ld/po/da.po
new file mode 100644
index 0000000..37457b7
--- /dev/null
+++ b/binutils-2.21/ld/po/da.po
@@ -0,0 +1,1702 @@
+# Danish messages for ld.
+# Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+# Keld Simonsen <keld@dkuug.dk>, 2002
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ld 2.12.91\n"
+"POT-Creation-Date: 2002-07-23 15:58-0400\n"
+"PO-Revision-Date: 2002-11-10 12:31+0100\n"
+"Last-Translator: Keld Simonsen <keld@dkuug.dk>\n"
+"Language-Team: Danish <dansk@klid.dk>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: emultempl/armcoff.em:71
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code Understøt samvirke med gammel kode\n"
+
+#: emultempl/armcoff.em:72
+msgid " --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"
+msgstr ""
+" --thumb-entry=<sym> Indstil indgangspunktet til at være tommelsymbolet\n"
+" <sym>\n"
+
+#: emultempl/armcoff.em:141
+#, c-format
+msgid "Errors encountered processing file %s"
+msgstr "Fejl skete ved behandling af filen %s"
+
+#: emultempl/armcoff.em:207 emultempl/pe.em:1422
+msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"
+msgstr "%P: advarsel: \"--thumb-entry %s\" tilsidesætter \"-e %s\"\n"
+
+#: emultempl/armcoff.em:212 emultempl/pe.em:1427
+msgid "%P: warning: connot find thumb start symbol %s\n"
+msgstr "%P: advarsel: kan ikke finde tommelstartsymbol %s\n"
+
+#: emultempl/pe.em:317
+msgid " --base_file <basefile> Generate a base file for relocatable DLLs\n"
+msgstr ""
+" --base_file <basefil> Generér en basefil for\n"
+" relokérbare DLL'er\n"
+
+#: emultempl/pe.em:318
+msgid " --dll Set image base to the default for DLLs\n"
+msgstr ""
+" --dll Sæt billedbase til standard for\n"
+" DLL'er\n"
+
+#: emultempl/pe.em:319
+msgid " --file-alignment <size> Set file alignment\n"
+msgstr " --file-alignment <størrelse> Sæt filjustering\n"
+
+#: emultempl/pe.em:320
+msgid " --heap <size> Set initial size of the heap\n"
+msgstr " --heap <størrelse> Sæt initiel størrelse på bunken\n"
+
+#: emultempl/pe.em:321
+msgid " --image-base <address> Set start address of the executable\n"
+msgstr " --image-base <adresse> Sæt startadressen for den kørbare\n"
+
+#: emultempl/pe.em:322
+msgid " --major-image-version <number> Set version number of the executable\n"
+msgstr " --major-image-version <nummer> Sæt versionsnummer for den kørbare\n"
+
+#: emultempl/pe.em:323
+msgid " --major-os-version <number> Set minimum required OS version\n"
+msgstr " --major-os-version <nummer> Sæt laveste krævet OS-version\n"
+
+#: emultempl/pe.em:324
+msgid " --major-subsystem-version <number> Set minimum required OS subsystem version\n"
+msgstr ""
+" --major-subsystem-version <nummer> Sæt laveste nødvendige\n"
+" OS-undersystemsversion\n"
+
+#: emultempl/pe.em:325
+msgid " --minor-image-version <number> Set revision number of the executable\n"
+msgstr ""
+" --minor-image-version <nummer> Sæt underrevisionsnummer for\n"
+" den kørbare\n"
+
+#: emultempl/pe.em:326
+msgid " --minor-os-version <number> Set minimum required OS revision\n"
+msgstr " --minor-os-version <nummer> Sæt laveste krævet OS-revision\n"
+
+#: emultempl/pe.em:327
+msgid " --minor-subsystem-version <number> Set minimum required OS subsystem revision\n"
+msgstr ""
+" --minor-subsystem-version <nummer> Sæt laveste nødvendige\n"
+" OS-undersystemsrevision\n"
+
+#: emultempl/pe.em:328
+msgid " --section-alignment <size> Set section alignment\n"
+msgstr " --section-alignment <størrelse> Sæt sektionsjustering\n"
+
+#: emultempl/pe.em:329
+msgid " --stack <size> Set size of the initial stack\n"
+msgstr " --stack <størrelse> Sæt størrelse på initiel stak\n"
+
+#: emultempl/pe.em:330
+msgid " --subsystem <name>[:<version>] Set required OS subsystem [& version]\n"
+msgstr ""
+" --subsystem <navn>[:<version>] Sæt nødvendigt OS-undersystem\n"
+" [og krævet version]\n"
+
+#: emultempl/pe.em:331
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code Understøttelse samvirken med gammel kode\n"
+
+#: emultempl/pe.em:332
+msgid " --thumb-entry=<symbol> Set the entry point to be Thumb <symbol>\n"
+msgstr ""
+" --thumb-entry=<symbol> Sæt indgangspunktet til at\n"
+" være tommel <symbol>\n"
+
+#: emultempl/pe.em:334
+msgid " --add-stdcall-alias Export symbols with and without @nn\n"
+msgstr " --add-stdcall-alias Eksportér symboler med og uden @nn\n"
+
+#: emultempl/pe.em:335
+msgid " --disable-stdcall-fixup Don't link _sym to _sym@nn\n"
+msgstr " --disable-stdcall-fixup Lænk ikke _sym til _sym@nn\n"
+
+#: emultempl/pe.em:336
+msgid " --enable-stdcall-fixup Link _sym to _sym@nn without warnings\n"
+msgstr " --enable-stdcall-fixup Lænk _sym til _sym@nn uden advarsler\n"
+
+#: emultempl/pe.em:337
+msgid " --exclude-symbols sym,sym,... Exclude symbols from automatic export\n"
+msgstr ""
+" --exclude-symbols sym,sym,... Udelad symboler fra automatisk\n"
+" export\n"
+
+#: emultempl/pe.em:338
+msgid " --exclude-libs lib,lib,... Exclude libraries from automatic export\n"
+msgstr ""
+" --exclude-libs bibl,bibl,... Udelad bibliotek fra automatisk\n"
+" export\n"
+
+#: emultempl/pe.em:339
+msgid " --export-all-symbols Automatically export all globals to DLL\n"
+msgstr ""
+" --export-all-symbols Eksportér automatisk alle symboler\n"
+" til DLL\n"
+
+#: emultempl/pe.em:340
+msgid " --kill-at Remove @nn from exported symbols\n"
+msgstr " --kill-at Fjern @nn fra eksporterede symboler\n"
+
+#: emultempl/pe.em:341
+msgid " --out-implib <file> Generate import library\n"
+msgstr " --out-implib <fil> Generér importbibliotek\n"
+
+#: emultempl/pe.em:342
+msgid " --output-def <file> Generate a .DEF file for the built DLL\n"
+msgstr " --output-def <fil> Generér en .DEF-fil for bygget DLL\n"
+
+#: emultempl/pe.em:343
+msgid " --warn-duplicate-exports Warn about duplicate exports.\n"
+msgstr " --warn-duplicate-exports Advar om dublet-eksporter.\n"
+
+#: emultempl/pe.em:344
+msgid ""
+" --compat-implib Create backward compatible import libs;\n"
+" create __imp_<SYMBOL> as well.\n"
+msgstr ""
+" --compat-implib Opret bagudkompatible importbiblioteker;\n"
+" og opret også __imp_<SYMBOL>.\n"
+
+#: emultempl/pe.em:346
+msgid ""
+" --enable-auto-image-base Automatically choose image base for DLLs\n"
+" unless user specifies one\n"
+msgstr ""
+" --enable-auto-image-base Vælg automatisk billedbase for DLL'er\n"
+" med mindre brugeren ikke angiver én\n"
+
+#: emultempl/pe.em:348
+msgid " --disable-auto-image-base Do not auto-choose image base. (default)\n"
+msgstr ""
+" --disable-auto-image-base Vælg ikke billedbase automatisk\n"
+" (standard).\n"
+
+#: emultempl/pe.em:349
+msgid ""
+" --dll-search-prefix=<string> When linking dynamically to a dll without an\n"
+" importlib, use <string><basename>.dll \n"
+" in preference to lib<basename>.dll \n"
+msgstr ""
+" --dll-search-prefix=<streng> Brug <streng><basenavn>.dll i stedet\n"
+" for lib<basenavn>.dll ved dynamisk\n"
+" lænkning uden et importbibliotek\n"
+
+#: emultempl/pe.em:352
+msgid ""
+" --enable-auto-import Do sophistcated linking of _sym to \n"
+" __imp_sym for DATA references\n"
+msgstr ""
+" --enable-auto-import Udfør sofistikeret lænkning af _sym til\n"
+" __imp_sym for DATA-referencer\n"
+
+#: emultempl/pe.em:354
+msgid " --disable-auto-import Do not auto-import DATA items from DLLs\n"
+msgstr ""
+" --disable-auto-import Importér ikke DATA-objekter fra DLL'er\n"
+" automatisk\n"
+
+#: emultempl/pe.em:355
+msgid ""
+" --enable-extra-pe-debug Enable verbose debug output when building\n"
+" or linking to DLLs (esp. auto-import)\n"
+msgstr ""
+" --enable-extra-pe-debug Brug udførlig fejlsøgningsuddata ved\n"
+" bygning af eller lænkning til DLL'er\n"
+" (især automatisk import)\n"
+
+#: emultempl/pe.em:424
+msgid "%P: warning: bad version number in -subsystem option\n"
+msgstr "%P: advarsel: fejlagtigt nummer i flaget -subsystem\n"
+
+#: emultempl/pe.em:460
+msgid "%P%F: invalid subsystem type %s\n"
+msgstr "%P%F: ugyldig type af undersystem %s\n"
+
+#: emultempl/pe.em:475
+msgid "%P%F: invalid hex number for PE parameter '%s'\n"
+msgstr "%P%F: ugyldigt heksadecimalt tal for PE-parameteren \"%s\"\n"
+
+#: emultempl/pe.em:493
+msgid "%P%F: strange hex info for PE parameter '%s'\n"
+msgstr "%P%F: mærkelig heksadecimal information for PE-parameteren \"%s\"\n"
+
+#: emultempl/pe.em:532
+#, c-format
+msgid "%s: Can't open base file %s\n"
+msgstr "%s: Kan ikke åbne basefilen %s\n"
+
+#: emultempl/pe.em:738
+msgid "%P: warning, file alignment > section alignment.\n"
+msgstr "%P: advarsel, filjusteringen > sektionsjusteringen.\n"
+
+#: emultempl/pe.em:822 emultempl/pe.em:848
+#, c-format
+msgid "Warning: resolving %s by linking to %s\n"
+msgstr "Advarsel: løser %s ved at lænke til %s\n"
+
+#: emultempl/pe.em:827 emultempl/pe.em:853
+msgid "Use --enable-stdcall-fixup to disable these warnings\n"
+msgstr "Brug --enable-stdcall-fixup til at deaktivere disse advarsler\n"
+
+#: emultempl/pe.em:828 emultempl/pe.em:854
+msgid "Use --disable-stdcall-fixup to disable these fixups\n"
+msgstr "Brug --disable-stdcall-fixup til at deaktivere disse rettelser\n"
+
+#: emultempl/pe.em:879
+msgid "%C: Cannot get section contents - auto-import exception\n"
+msgstr "%C: Kan ikke få fat i sektionsindhold - undtagen i automatisk import\n"
+
+#: emultempl/pe.em:887
+msgid "%C: variable '%T' can't be auto-imported. Please read the documentation for ld's --enable-auto-import for details.\n"
+msgstr "%C: variablen \"%T\" kan ikke importeres automatisk. Læs dokumentationen for ld's --enable-auto-import for detaljer.\n"
+
+#: emultempl/pe.em:916
+#, c-format
+msgid "Info: resolving %s by linking to %s (auto-import)\n"
+msgstr "Info: løser %s ved at lænke til %s (automatisk import)\n"
+
+#: emultempl/pe.em:997
+msgid "%F%P: PE operations on non PE file.\n"
+msgstr "%F%P: PE-operationer på fil som ikke er PE.\n"
+
+#: emultempl/pe.em:1226
+#, c-format
+msgid "Errors encountered processing file %s\n"
+msgstr "Fejl opstod ved behandling af filen %s\n"
+
+#: emultempl/pe.em:1249
+#, c-format
+msgid "Errors encountered processing file %s for interworking"
+msgstr "Fejl opstod ved behandling af filen %s for interaktion"
+
+#: emultempl/pe.em:1305 ldlang.c:2065 ldlang.c:4608 ldlang.c:4641
+#: ldmain.c:1061
+msgid "%P%F: bfd_link_hash_lookup failed: %E\n"
+msgstr "%P%F: bfd_link_hash_lookup mislykkedes: %E\n"
+
+#: ldcref.c:158
+msgid "%X%P: bfd_hash_table_init of cref table failed: %E\n"
+msgstr "%X%P: bfd_hash_table_init af krydsreferencetabellen mislykkedes: %E\n"
+
+#: ldcref.c:164
+msgid "%X%P: cref_hash_lookup failed: %E\n"
+msgstr "%X%P: cref_hash_lookup mislykkedes: %E\n"
+
+#: ldcref.c:235
+msgid ""
+"\n"
+"Cross Reference Table\n"
+"\n"
+msgstr ""
+"\n"
+"Krydsreferencetabel\n"
+"\n"
+
+#: ldcref.c:236
+msgid "Symbol"
+msgstr "Symbol"
+
+#: ldcref.c:244
+msgid "File\n"
+msgstr "Fil\n"
+
+#: ldcref.c:248
+msgid "No symbols\n"
+msgstr "Ingen symboler\n"
+
+#: ldcref.c:400
+msgid "%P: symbol `%T' missing from main hash table\n"
+msgstr "%P: symbol \"%T\" mangler fra hastabellen\n"
+
+#: ldcref.c:465
+msgid "%B%F: could not read symbols; %E\n"
+msgstr "%B%F: kunne ikke læse symboler; %E\n"
+
+#: ldcref.c:469 ldmain.c:1127 ldmain.c:1131
+msgid "%B%F: could not read symbols: %E\n"
+msgstr "%B%F: kunne ikke læse symboler: %E\n"
+
+#: ldcref.c:537 ldcref.c:544 ldmain.c:1177 ldmain.c:1184
+msgid "%B%F: could not read relocs: %E\n"
+msgstr "%B%F: kunne ikke læse relokeringer: %E\n"
+
+#. We found a reloc for the symbol. The symbol is defined
+#. in OUTSECNAME. This reloc is from a section which is
+#. mapped into a section from which references to OUTSECNAME
+#. are prohibited. We must report an error.
+#: ldcref.c:563
+msgid "%X%C: prohibited cross reference from %s to `%T' in %s\n"
+msgstr "%X%C: forbudt krydsreference fra %s til \"%T\" i %s\n"
+
+#: ldctor.c:88
+msgid "%P%X: Different relocs used in set %s\n"
+msgstr "%P%X: Forskellige relokeringer brugt i gruppen %s\n"
+
+#: ldctor.c:106
+msgid "%P%X: Different object file formats composing set %s\n"
+msgstr "%P%X: Forskellige objektfilformater udgør gruppen %s\n"
+
+#: ldctor.c:288 ldctor.c:302
+msgid "%P%X: %s does not support reloc %s for set %s\n"
+msgstr "%P%X: %s understøtter ikke relokeringen %s for gruppen %s\n"
+
+#: ldctor.c:323
+msgid "%P%X: Unsupported size %d for set %s\n"
+msgstr "%P%X: Størrelsen %d for gruppen %s understøttes ikke\n"
+
+#: ldctor.c:344
+msgid ""
+"\n"
+"Set Symbol\n"
+"\n"
+msgstr ""
+"\n"
+"Gruppe Symbol\n"
+"\n"
+
+#: ldemul.c:225
+msgid "%S SYSLIB ignored\n"
+msgstr "%S SYSLIB ignoreredes\n"
+
+#: ldemul.c:232
+msgid "%S HLL ignored\n"
+msgstr "%S HLL ignoreredes\n"
+
+#: ldemul.c:253
+msgid "%P: unrecognised emulation mode: %s\n"
+msgstr "%P: ukendt emuleringstilstand: %s\n"
+
+#: ldemul.c:254
+msgid "Supported emulations: "
+msgstr "Emuleringer som understøttes: "
+
+#: ldemul.c:298
+msgid " no emulation specific options.\n"
+msgstr " ingen emuleringsspecifikke flag.\n"
+
+#: ldexp.c:174
+msgid "%F%P: %s uses undefined section %s\n"
+msgstr "%F%P: %s bruger udefineret sektion %s\n"
+
+#: ldexp.c:176
+msgid "%F%P: %s forward reference of section %s\n"
+msgstr "%F%P: %s fremadreference af sektionen %s\n"
+
+#: ldexp.c:304
+msgid "%F%S %% by zero\n"
+msgstr "%F%S %% med nul\n"
+
+#: ldexp.c:311
+msgid "%F%S / by zero\n"
+msgstr "%F%S / med nul\n"
+
+#: ldexp.c:463
+msgid "%X%S: unresolvable symbol `%s' referenced in expression\n"
+msgstr "%X%S: uløseligt symbol \"%s\" refereredes i udtrykket\n"
+
+#: ldexp.c:483
+msgid "%F%S: undefined symbol `%s' referenced in expression\n"
+msgstr "%F%S: udefinerede symbol \"%s\" refereredes i udtrykket\n"
+
+#: ldexp.c:685
+msgid "%F%S can not PROVIDE assignment to location counter\n"
+msgstr "%F%S kan ikke LEVERE tildeling til pladsregnere\n"
+
+#: ldexp.c:695
+msgid "%F%S invalid assignment to location counter\n"
+msgstr "%F%S ugyldig tildeling til pladsregnere\n"
+
+#: ldexp.c:699
+msgid "%F%S assignment to location counter invalid outside of SECTION\n"
+msgstr "%F%S tildeling til pladsregnere som er ugyldig uden for SEKTION\n"
+
+#: ldexp.c:708
+msgid "%F%S cannot move location counter backwards (from %V to %V)\n"
+msgstr "%F%S kan ikke flytte pladsregnere bagud (fra %V til %V)\n"
+
+#: ldexp.c:735
+msgid "%P%F:%s: hash creation failed\n"
+msgstr "%P%F:%s: oprettelse af hash mislykkedes\n"
+
+#: ldexp.c:1037 ldexp.c:1071
+msgid "%F%S nonconstant expression for %s\n"
+msgstr "%F%S ikke-konstant udtryk for %s\n"
+
+#: ldexp.c:1126
+msgid "%F%S non constant expression for %s\n"
+msgstr "%F%S ikke-konstant udtryk for %s\n"
+
+#: ldfile.c:105
+#, c-format
+msgid "attempt to open %s failed\n"
+msgstr "forsøg på at åbne %s mislykkedes\n"
+
+#: ldfile.c:107
+#, c-format
+msgid "attempt to open %s succeeded\n"
+msgstr "forsøg på at åbne %s lykkedes\n"
+
+#: ldfile.c:113
+msgid "%F%P: invalid BFD target `%s'\n"
+msgstr "%F%P: ugyldigt BFD-mål \"%s\"\n"
+
+#: ldfile.c:142
+msgid "%P: skipping incompatible %s when searching for %s\n"
+msgstr "%P: hopper over inkompatibel %s ved søgning af %s\n"
+
+#: ldfile.c:234
+msgid "%F%P: cannot open %s for %s: %E\n"
+msgstr "%F%P: kan ikke åbne %s for %s: %E\n"
+
+#: ldfile.c:237
+msgid "%F%P: cannot open %s: %E\n"
+msgstr "%F%P: kan ikke åbne %s: %E\n"
+
+#: ldfile.c:267
+msgid "%F%P: cannot find %s\n"
+msgstr "%F%P: kan ikke finde %s\n"
+
+#: ldfile.c:286 ldfile.c:302
+#, c-format
+msgid "cannot find script file %s\n"
+msgstr "kan ikke finde skriptfilen %s\n"
+
+#: ldfile.c:288 ldfile.c:304
+#, c-format
+msgid "opened script file %s\n"
+msgstr "åbnede skriptfilen %s\n"
+
+#: ldfile.c:353
+msgid "%P%F: cannot open linker script file %s: %E\n"
+msgstr "%P%F: kan ikke åbne lænkerskriptfilen %s: %E\n"
+
+#: ldfile.c:391
+msgid "%P%F: unknown architecture: %s\n"
+msgstr "%P%F: ukendt arkitektur: %s\n"
+
+#: ldfile.c:407
+msgid "%P%F: target architecture respecified\n"
+msgstr "%P%F: målarkitekturen specificeredes igen\n"
+
+#: ldfile.c:461
+msgid "%P%F: cannot represent machine `%s'\n"
+msgstr "%P%F: kan ikke repræsentere maskinen \"%s\"\n"
+
+#: ldlang.c:784
+msgid ""
+"\n"
+"Memory Configuration\n"
+"\n"
+msgstr ""
+"\n"
+"Hukommelseskonfiguration\n"
+"\n"
+
+#: ldlang.c:786
+msgid "Name"
+msgstr "Navn"
+
+#: ldlang.c:786
+msgid "Origin"
+msgstr "Begyndelse"
+
+#: ldlang.c:786
+msgid "Length"
+msgstr "Længde"
+
+#: ldlang.c:786
+msgid "Attributes"
+msgstr "Attributter"
+
+#: ldlang.c:828
+msgid ""
+"\n"
+"Linker script and memory map\n"
+"\n"
+msgstr ""
+"\n"
+"Lænkerskript og hukommelsestabel\n"
+"\n"
+
+#: ldlang.c:845
+msgid "%P%F: Illegal use of `%s' section\n"
+msgstr "%P%F: Ikke tilladt brug af sektionen \"%s\"\n"
+
+#: ldlang.c:855
+msgid "%P%F: output format %s cannot represent section called %s\n"
+msgstr "%P%F: uddataformatet %s kan ikke repræsentere sektionen kaldet %s\n"
+
+#: ldlang.c:1016
+msgid "%P: %B: warning: ignoring duplicate section `%s'\n"
+msgstr "%P: %B: advarsel: ignorerer dublet-sektion \"%s\"\n"
+
+#: ldlang.c:1019
+msgid "%P: %B: warning: ignoring duplicate `%s' section symbol `%s'\n"
+msgstr "%P: %B: advarsel: ignorerer dobbelt \"%s\"-sektionssymbol \"%s\"\n"
+
+#: ldlang.c:1033
+msgid "%P: %B: warning: duplicate section `%s' has different size\n"
+msgstr "%P: %B: advarsel: dublet-sektion \"%s\" har anden størrelse\n"
+
+#: ldlang.c:1084
+msgid "%P%F: Failed to create hash table\n"
+msgstr "%P%F: Mislykkedes med at oprette hashtabel\n"
+
+#: ldlang.c:1503
+msgid "%B: file not recognized: %E\n"
+msgstr "%B: filen ikke genkendt: %E\n"
+
+#: ldlang.c:1504
+msgid "%B: matching formats:"
+msgstr "%B: matchende format:"
+
+#: ldlang.c:1511
+msgid "%F%B: file not recognized: %E\n"
+msgstr "%F%B: filen ikke genkendt: %E\n"
+
+#: ldlang.c:1567
+msgid "%F%B: member %B in archive is not an object\n"
+msgstr "%F%B: medlem %B i arkivet er ikke et objekt\n"
+
+#: ldlang.c:1578 ldlang.c:1592
+msgid "%F%B: could not read symbols: %E\n"
+msgstr "%F%B: kunne ikke læse symboler: %E\n"
+
+#: ldlang.c:1853
+msgid "%P: warning: could not find any targets that match endianness requirement\n"
+msgstr "%P: advarsel: kunne ikke finde nogen mål som matcher kravet på endianess\n"
+
+#: ldlang.c:1866
+msgid "%P%F: target %s not found\n"
+msgstr "%P%F: målet %s fandtes ikke\n"
+
+#: ldlang.c:1868
+msgid "%P%F: cannot open output file %s: %E\n"
+msgstr "%P%F: kan ikke åbne uddatafilen %s: %E\n"
+
+#: ldlang.c:1878
+msgid "%P%F:%s: can not make object file: %E\n"
+msgstr "%P%F:%s: kan ikke oprette objektfilen: %E\n"
+
+#: ldlang.c:1882
+msgid "%P%F:%s: can not set architecture: %E\n"
+msgstr "%P%F:%s: kan ikke sætte arkitektur: %E\n"
+
+#: ldlang.c:1886
+msgid "%P%F: can not create link hash table: %E\n"
+msgstr "%P%F: kan ikke oprette hashtabel over lænker: %E\n"
+
+#: ldlang.c:2235
+msgid " load address 0x%V"
+msgstr " indlæsningsadresse 0x%V"
+
+#: ldlang.c:2375
+msgid "%W (size before relaxing)\n"
+msgstr "%W (størrelse inden forenkling)\n"
+
+#: ldlang.c:2462
+#, c-format
+msgid "Address of section %s set to "
+msgstr "Adressen på sektionen %s sat til "
+
+#: ldlang.c:2623
+#, c-format
+msgid "Fail with %d\n"
+msgstr "Mislykkes med %d\n"
+
+#: ldlang.c:2868
+msgid "%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"
+msgstr "%X%P: sektionen %s [%V -> %V] overlapper med sektionen %s [%V -> %V]\n"
+
+#: ldlang.c:2897
+msgid "%X%P: address 0x%v of %B section %s is not within region %s\n"
+msgstr "%X%P: adressen 0x%v i %B-sektionen %s er ikke inden for området %s\n"
+
+#: ldlang.c:2905
+msgid "%X%P: region %s is full (%B section %s)\n"
+msgstr "%X%P: området %s er fuldt (%B-sektion %s)\n"
+
+#: ldlang.c:2955
+msgid "%P%X: Internal error on COFF shared library section %s\n"
+msgstr "%P%X: Intern fejl i delt COFF-bibliotek sektion %s\n"
+
+#: ldlang.c:2999
+msgid "%P: warning: no memory region specified for section `%s'\n"
+msgstr "%P: advarsel: intet hukommelsesområde angivet for sektionen \"%s\"\n"
+
+#: ldlang.c:3014
+msgid "%P: warning: changing start of section %s by %u bytes\n"
+msgstr "%P: advarsel: ændrer start på sektionen %s med %u byte\n"
+
+#: ldlang.c:3028
+msgid "%F%S: non constant address expression for section %s\n"
+msgstr "%F%S: ikke-konstant adresseudtryk for sektionen %s\n"
+
+#: ldlang.c:3203
+msgid "%P%F: can't relax section: %E\n"
+msgstr "%P%F: kan ikke forenkle sektion: %E\n"
+
+#: ldlang.c:3398
+msgid "%F%P: invalid data statement\n"
+msgstr "%F%P: ugyldig datasætning\n"
+
+#: ldlang.c:3435
+msgid "%F%P: invalid reloc statement\n"
+msgstr "%F%P: ugyldig relokeringssætning\n"
+
+#: ldlang.c:3574
+msgid "%P%F:%s: can't set start address\n"
+msgstr "%P%F:%s: kan ikke sætte startadresse\n"
+
+#: ldlang.c:3587 ldlang.c:3605
+msgid "%P%F: can't set start address\n"
+msgstr "%P%F: kan ikke sætte startadresse\n"
+
+#: ldlang.c:3599
+msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n"
+msgstr "%P: advarsel: kan ikke finde indgangssymbol %s; bruger som standard %V\n"
+
+#: ldlang.c:3610
+msgid "%P: warning: cannot find entry symbol %s; not setting start address\n"
+msgstr "%P: advarsel: kan ikke finde indgangssymbol %s; sætter ikke startadresse\n"
+
+#: ldlang.c:3660
+msgid "%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"
+msgstr "%P%F: Relokérbar lænkning med omlænkninger fra formatet %s (%B) til formatet %s (%B) understøttes ikke\n"
+
+#: ldlang.c:3669
+msgid "%P: warning: %s architecture of input file `%B' is incompatible with %s output\n"
+msgstr "%P: advarsel: %s-arkitekturen i inddatafilen \"%B\" er inkompatibel med %s-uddata\n"
+
+#: ldlang.c:3690
+msgid "%E%X: failed to merge target specific data of file %B\n"
+msgstr "%E%X: mislykkedes at sammenslå målspecifik data i filen %B\n"
+
+#: ldlang.c:3779
+msgid ""
+"\n"
+"Allocating common symbols\n"
+msgstr ""
+"\n"
+"Allokerer fælles symboler\n"
+
+#: ldlang.c:3780
+msgid ""
+"Common symbol size file\n"
+"\n"
+msgstr ""
+"Fælles symbol størrelse fil\n"
+"\n"
+
+#. This message happens when using the
+#. svr3.ifile linker script, so I have
+#. disabled it.
+#: ldlang.c:3858
+msgid "%P: no [COMMON] command, defaulting to .bss\n"
+msgstr "%P: ingen [COMMON]-kommando, bruger standardalternativet .bss\n"
+
+#: ldlang.c:3917
+msgid "%P%F: invalid syntax in flags\n"
+msgstr "%P%F: ugyldig syntaks i flag\n"
+
+#: ldlang.c:4532
+msgid "%P%Fmultiple STARTUP files\n"
+msgstr "%P%Fflere samtidige STARTUP-filer\n"
+
+#: ldlang.c:4575
+msgid "%X%P:%S: section has both a load address and a load region\n"
+msgstr "%X%P:%S: sektionen har både en indlæsningsadresse og et hukommelsesindlæsningsområde\n"
+
+#: ldlang.c:4825
+msgid "%F%P: bfd_record_phdr failed: %E\n"
+msgstr "%F%P: bfd_record_phdr mislykkedes: %E\n"
+
+#: ldlang.c:4844
+msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n"
+msgstr "%X%P: sektionen \"%s\" er tildelt til ikke-eksisterende phvd \"%s\"\n"
+
+#: ldlang.c:5143
+msgid "%X%P: unknown language `%s' in version information\n"
+msgstr "%X%P: ukendt sprog i \"%s\" i versionsinformation\n"
+
+#: ldlang.c:5195
+msgid "%X%P: anonymous version tag cannot be combined with other version tags\n"
+msgstr "%X%P: anonym versionsmærke kan ikke kombineres med andre versionsmærker\n"
+
+#: ldlang.c:5202
+msgid "%X%P: duplicate version tag `%s'\n"
+msgstr "%X%P: dobbelt versionsmærke \"%s\"\n"
+
+#: ldlang.c:5215 ldlang.c:5228
+msgid "%X%P: duplicate expression `%s' in version information\n"
+msgstr "%X%P: dobbelt udtryk \"%s\" i versionsinformation\n"
+
+#: ldlang.c:5270
+msgid "%X%P: unable to find version dependency `%s'\n"
+msgstr "%X%P: kan ikke finde versionsafhængighed \"%s\"\n"
+
+#: ldlang.c:5292
+msgid "%X%P: unable to read .exports section contents\n"
+msgstr "%X%P: kan ikke læse indeholdet i .exports-sektionen\n"
+
+#: ldmain.c:198
+msgid "%X%P: can't set BFD default target to `%s': %E\n"
+msgstr "%X%P: kan ikke sætte BSD-standardmålet til \"%s\": %E\n"
+
+#: ldmain.c:290
+msgid "%P%F: -r and --mpc860c0 may not be used together\n"
+msgstr "%P%F: -r og --mpc860c0 kan ikke bruges sammen\n"
+
+#: ldmain.c:292
+msgid "%P%F: --relax and -r may not be used together\n"
+msgstr "%P%F: --relax og -r kan ikke bruges sammen\n"
+
+#: ldmain.c:294
+msgid "%P%F: -r and -shared may not be used together\n"
+msgstr "%P%F: -r og -shared kan ikke bruges sammen\n"
+
+#: ldmain.c:300
+msgid "%P%F: -F may not be used without -shared\n"
+msgstr "%P%F: -F kan ikke bruges uden -shared\n"
+
+#: ldmain.c:302
+msgid "%P%F: -f may not be used without -shared\n"
+msgstr "%P%F: -f kan ikke bruges uden -shared\n"
+
+#: ldmain.c:341
+msgid "using external linker script:"
+msgstr "bruger eksternt lænkerskript:"
+
+#: ldmain.c:343
+msgid "using internal linker script:"
+msgstr "bruger internt lænkerskript:"
+
+#: ldmain.c:377
+msgid "%P%F: no input files\n"
+msgstr "%P%F: ingen inddatafiler\n"
+
+#: ldmain.c:382
+msgid "%P: mode %s\n"
+msgstr "%P: tilstand %s\n"
+
+#: ldmain.c:399
+msgid "%P%F: cannot open map file %s: %E\n"
+msgstr "%P%F: kan ikke åbne tabelfil %s: %E\n"
+
+#: ldmain.c:432
+msgid "%P: link errors found, deleting executable `%s'\n"
+msgstr "%P: lænkefejl fandtes, fjerner den kørbare fil \"%s\"\n"
+
+#: ldmain.c:443
+msgid "%F%B: final close failed: %E\n"
+msgstr "%F%B: afsluttende lukning mislykkedes: %E\n"
+
+#: ldmain.c:467
+msgid "%X%P: unable to open for source of copy `%s'\n"
+msgstr "%X%P: kan ikke åbne for kildekoden til kopien \"%s\"\n"
+
+#: ldmain.c:469
+msgid "%X%P: unable to open for destination of copy `%s'\n"
+msgstr "%X%P: kan ikke åbne for mål af kopien \"%s\"\n"
+
+#: ldmain.c:475
+msgid "%P: Error writing file `%s'\n"
+msgstr "%P: Fejl ved skrivning af filen \"%s\"\n"
+
+#: ldmain.c:481 pe-dll.c:1463
+#, c-format
+msgid "%P: Error closing file `%s'\n"
+msgstr "%P: Fejl ved lukning af filen \"%s\"\n"
+
+#: ldmain.c:498
+#, c-format
+msgid "%s: total time in link: %ld.%06ld\n"
+msgstr "%s: total tid i lænkning: %ld.%06ld\n"
+
+#: ldmain.c:501
+#, c-format
+msgid "%s: data size %ld\n"
+msgstr "%s: datastørrelse %ld\n"
+
+#: ldmain.c:542
+msgid "%P%F: missing argument to -m\n"
+msgstr "%P%F: argument mangler til -m\n"
+
+#: ldmain.c:670 ldmain.c:691 ldmain.c:722
+msgid "%P%F: bfd_hash_table_init failed: %E\n"
+msgstr "%P%F: bfd_hash_table_init mislykkedes: %E\n"
+
+#: ldmain.c:675 ldmain.c:694
+msgid "%P%F: bfd_hash_lookup failed: %E\n"
+msgstr "%P%F: bfd_hash_lookup mislykkedes: %E\n"
+
+#: ldmain.c:709
+msgid "%X%P: error: duplicate retain-symbols-file\n"
+msgstr "%X%P: fejl: dobbelt retain-symbols-file\n"
+
+#: ldmain.c:753
+msgid "%P%F: bfd_hash_lookup for insertion failed: %E\n"
+msgstr "%P%F: bfd_hash_lookup for indgang mislykkedes: %E\n"
+
+#: ldmain.c:758
+msgid "%P: `-retain-symbols-file' overrides `-s' and `-S'\n"
+msgstr "%P: \"-retain-symbols-file\" tilsidesætter \"-s\" og \"-S\"\n"
+
+#: ldmain.c:834
+msgid ""
+"Archive member included because of file (symbol)\n"
+"\n"
+msgstr ""
+"Arkivmedlem inkluderet på grund af fil (symbol)\n"
+"\n"
+
+#: ldmain.c:905
+msgid "%X%C: multiple definition of `%T'\n"
+msgstr "%X%C: flere definitioner af \"%T\"\n"
+
+#: ldmain.c:908
+msgid "%D: first defined here\n"
+msgstr "%D: først defineret hér\n"
+
+#: ldmain.c:912
+msgid "%P: Disabling relaxation: it will not work with multiple definitions\n"
+msgstr "%P: Deaktiverer forenkling: det vil ikke fungere med flere definitioner\n"
+
+#: ldmain.c:943
+msgid "%B: warning: definition of `%T' overriding common\n"
+msgstr "%B: advarsel: definitioner af \"%T\" tilsidesætter fælles\n"
+
+#: ldmain.c:946
+msgid "%B: warning: common is here\n"
+msgstr "%B: advarsel: fælles er hér\n"
+
+#: ldmain.c:953
+msgid "%B: warning: common of `%T' overridden by definition\n"
+msgstr "%B: advarsel: fælles i \"%T\" tilsidesattes af definition\n"
+
+#: ldmain.c:956
+msgid "%B: warning: defined here\n"
+msgstr "%B: advarsel: defineret hér\n"
+
+#: ldmain.c:963
+msgid "%B: warning: common of `%T' overridden by larger common\n"
+msgstr "%B: advarsel: fælles i \"%T\" tilsidesattes af større fælles\n"
+
+#: ldmain.c:966
+msgid "%B: warning: larger common is here\n"
+msgstr "%B: advarsel: større fælles er hér\n"
+
+#: ldmain.c:970
+msgid "%B: warning: common of `%T' overriding smaller common\n"
+msgstr "%B: advarsel: fælles i \"%T\" tilsidesætter mindre fælles\n"
+
+#: ldmain.c:973
+msgid "%B: warning: smaller common is here\n"
+msgstr "%B: advarsel: mindre fælles er hér\n"
+
+#: ldmain.c:977
+msgid "%B: warning: multiple common of `%T'\n"
+msgstr "%B: advarsel: flere fælles i \"%T\"\n"
+
+#: ldmain.c:979
+msgid "%B: warning: previous common is here\n"
+msgstr "%B: advarsel: foregående fælles er hér\n"
+
+#: ldmain.c:1000 ldmain.c:1039
+msgid "%P: warning: global constructor %s used\n"
+msgstr "%P: advarsel: global konstruktor %s bruges\n"
+
+#: ldmain.c:1049
+msgid "%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"
+msgstr "%P%F: Fejl i BFD-bagende: BFD_RELOC_CTOR understøttes ikke\n"
+
+#: ldmain.c:1233
+msgid "%F%P: bfd_hash_table_init failed: %E\n"
+msgstr "%F%P: bfd_hash_table_init mislykkedes: %E\n"
+
+#: ldmain.c:1240
+msgid "%F%P: bfd_hash_lookup failed: %E\n"
+msgstr "%F%P: bfd_hash_lookup mislykkedes: %E\n"
+
+#: ldmain.c:1260
+msgid "%C: undefined reference to `%T'\n"
+msgstr "%C: udefineret reference til \"%T\"\n"
+
+#: ldmain.c:1266
+msgid "%D: more undefined references to `%T' follow\n"
+msgstr "%D: flere udefinerede referencer til \"%T\" følger\n"
+
+#: ldmain.c:1273
+msgid "%B: undefined reference to `%T'\n"
+msgstr "%B: udefineret reference til \"%T\"\n"
+
+#: ldmain.c:1279
+msgid "%B: more undefined references to `%T' follow\n"
+msgstr "%B: flere udefinerede referencer til \"%T\" følger\n"
+
+#: ldmain.c:1299 ldmain.c:1320 ldmain.c:1339
+msgid "%P%X: generated"
+msgstr "%P%X: genereret"
+
+#: ldmain.c:1302
+msgid " relocation truncated to fit: %s %T"
+msgstr " relokering trunkeret til at passe til: %s %T"
+
+#: ldmain.c:1323
+#, c-format
+msgid "dangerous relocation: %s\n"
+msgstr "farlig relokering: %s\n"
+
+#: ldmain.c:1342
+msgid " reloc refers to symbol `%T' which is not being output\n"
+msgstr " relokering refererer til symbol \"%T\" som ikke skrives ud\n"
+
+#: ldmisc.c:157
+msgid "no symbol"
+msgstr "intet symbol"
+
+#: ldmisc.c:221
+#, c-format
+msgid "built in linker script:%u"
+msgstr "indbygget lænkerskript:%u"
+
+#: ldmisc.c:271 ldmisc.c:275
+msgid "%B%F: could not read symbols\n"
+msgstr "%B%F: kunne ikke læse symboler\n"
+
+#. We use abfd->filename in this initial line,
+#. in case filename is a .h file or something
+#. similarly unhelpful.
+#: ldmisc.c:311
+msgid "%B: In function `%T':\n"
+msgstr "%B: I funktionen \"%T\":\n"
+
+#: ldmisc.c:463
+msgid "%F%P: internal error %s %d\n"
+msgstr "%F%P: intern fejl %s %d\n"
+
+#: ldmisc.c:513
+msgid "%P: internal error: aborting at %s line %d in %s\n"
+msgstr "%P: intern fejl: afbryder ved %s linje %d i %s\n"
+
+#: ldmisc.c:516
+msgid "%P: internal error: aborting at %s line %d\n"
+msgstr "%P: intern fejl: afbryder ved %s linje %d\n"
+
+#: ldmisc.c:518
+msgid "%P%F: please report this bug\n"
+msgstr "%P%F: rapportér denne fejl\n"
+
+#. Output for noisy == 2 is intended to follow the GNU standards.
+#: ldver.c:38
+#, c-format
+msgid "GNU ld version %s\n"
+msgstr "GNU ld version %s\n"
+
+#: ldver.c:42
+msgid "Copyright 2002 Free Software Foundation, Inc.\n"
+msgstr "Copyright 2002 Free Software Foundation, Inc.\n"
+
+#: ldver.c:43
+msgid ""
+"This program is free software; you may redistribute it under the terms of\n"
+"the GNU General Public License. This program has absolutely no warranty.\n"
+msgstr ""
+"Dette program er frit programmel. Du kan videredistribuere det under\n"
+"betingelserne i GNU General Public License. Dette program har ingen som\n"
+"helst garanti.\n"
+
+#: ldver.c:52
+msgid " Supported emulations:\n"
+msgstr " Emuleringer som understøttes:\n"
+
+#: ldwrite.c:59 ldwrite.c:195
+msgid "%P%F: bfd_new_link_order failed\n"
+msgstr "%P%F: bfd_new_link_order mislykkedes\n"
+
+#: ldwrite.c:325
+msgid "%F%P: clone section failed: %E\n"
+msgstr "%F%P: klonsektion mislykkedes: %E\n"
+
+#: ldwrite.c:364
+#, c-format
+msgid "%8x something else\n"
+msgstr "%8x noget andet\n"
+
+#: ldwrite.c:547
+msgid "%F%P: final link failed: %E\n"
+msgstr "%F%P: afsluttende lænkning mislykkedes: %E\n"
+
+#: lexsup.c:172 lexsup.c:267
+msgid "KEYWORD"
+msgstr "NØGLEORD"
+
+#: lexsup.c:172
+msgid "Shared library control for HP/UX compatibility"
+msgstr "Styrelse af delte biblioteker for kompatibilitet med HP/UX"
+
+#: lexsup.c:175
+msgid "ARCH"
+msgstr "ARK"
+
+#: lexsup.c:175
+msgid "Set architecture"
+msgstr "Sæt arkitektur"
+
+#: lexsup.c:177 lexsup.c:336
+msgid "TARGET"
+msgstr "MÅL"
+
+#: lexsup.c:177
+msgid "Specify target for following input files"
+msgstr "Angiv mål for følgende inddatafiler"
+
+#: lexsup.c:179 lexsup.c:220 lexsup.c:232 lexsup.c:241 lexsup.c:312
+#: lexsup.c:343 lexsup.c:383
+msgid "FILE"
+msgstr "FIL"
+
+#: lexsup.c:179
+msgid "Read MRI format linker script"
+msgstr "Læs lænkerskript i MRI-format"
+
+#: lexsup.c:181
+msgid "Force common symbols to be defined"
+msgstr "Tving fælles symboler til at være definerede"
+
+#: lexsup.c:185 lexsup.c:373 lexsup.c:375 lexsup.c:377
+msgid "ADDRESS"
+msgstr "ADRESSE"
+
+#: lexsup.c:185
+msgid "Set start address"
+msgstr "Sæt startadresse"
+
+#: lexsup.c:187
+msgid "Export all dynamic symbols"
+msgstr "Eksportér alle dynamiske symboler"
+
+#: lexsup.c:189
+msgid "Link big-endian objects"
+msgstr "Lænk objekt som er big-endian"
+
+#: lexsup.c:191
+msgid "Link little-endian objects"
+msgstr "Lænk objekt som er little-endian"
+
+#: lexsup.c:193 lexsup.c:196
+msgid "SHLIB"
+msgstr "DELBIBL"
+
+#: lexsup.c:193
+msgid "Auxiliary filter for shared object symbol table"
+msgstr "Ydre filter for symboltabel over delte objekter"
+
+#: lexsup.c:196
+msgid "Filter for shared object symbol table"
+msgstr "Filter for symboltabel over delte objekter"
+
+#: lexsup.c:198
+msgid "Ignored"
+msgstr "Ignoreret"
+
+#: lexsup.c:200
+msgid "SIZE"
+msgstr "STØRRELSE"
+
+#: lexsup.c:200
+msgid "Small data size (if no size, same as --shared)"
+msgstr "Lille datastørrelse (hvis ingen størrelse, samme som --shared)"
+
+#: lexsup.c:203
+msgid "FILENAME"
+msgstr "FILNAVN"
+
+#: lexsup.c:203
+msgid "Set internal name of shared library"
+msgstr "Sæt internt navn på delt bibliotek"
+
+#: lexsup.c:205
+msgid "PROGRAM"
+msgstr "PROGRAM"
+
+#: lexsup.c:205
+msgid "Set PROGRAM as the dynamic linker to use"
+msgstr "Sæt PROGRAM som den dynamiske lænker der bruges"
+
+#: lexsup.c:207
+msgid "LIBNAME"
+msgstr "BIBLNAVN"
+
+#: lexsup.c:207
+msgid "Search for library LIBNAME"
+msgstr "Søg efter biblioteket BIBLNAVN"
+
+#: lexsup.c:209
+msgid "DIRECTORY"
+msgstr "KATALOG"
+
+#: lexsup.c:209
+msgid "Add DIRECTORY to library search path"
+msgstr "Tilføj KATALOG til bibliotekssøgestien"
+
+#: lexsup.c:211
+msgid "EMULATION"
+msgstr "EMULERING"
+
+#: lexsup.c:211
+msgid "Set emulation"
+msgstr "Sæt emulering"
+
+#: lexsup.c:213
+msgid "Print map file on standard output"
+msgstr "Vis tabelfil på standard ud"
+
+#: lexsup.c:215
+msgid "Do not page align data"
+msgstr "Justér ikke data efter lige sider"
+
+#: lexsup.c:217
+msgid "Do not page align data, do not make text readonly"
+msgstr "Justér ikke data efter lige sider, gør ikke teksten kun læsbar"
+
+#: lexsup.c:220
+msgid "Set output file name"
+msgstr "Sæt uddatafilnavnet"
+
+#: lexsup.c:222
+msgid "Optimize output file"
+msgstr "Optimér uddatafil"
+
+#: lexsup.c:224
+msgid "Ignored for SVR4 compatibility"
+msgstr "Ignoreret for kompatibilitet med SVR4"
+
+#: lexsup.c:228
+msgid "Generate relocateable output"
+msgstr "Generér relokérbar uddata"
+
+#: lexsup.c:232
+msgid "Just link symbols (if directory, same as --rpath)"
+msgstr "Lænk kun symboler (hvis katalog, samme som --rpath)"
+
+#: lexsup.c:235
+msgid "Strip all symbols"
+msgstr "Fjern alle symboler"
+
+#: lexsup.c:237
+msgid "Strip debugging symbols"
+msgstr "Fjern fejlsøgningssymboler"
+
+#: lexsup.c:239
+msgid "Trace file opens"
+msgstr "Udskriv filåbninger"
+
+#: lexsup.c:241
+msgid "Read linker script"
+msgstr "Læs lænkerskript"
+
+#: lexsup.c:243 lexsup.c:259 lexsup.c:298 lexsup.c:310 lexsup.c:367
+#: lexsup.c:386 lexsup.c:406
+msgid "SYMBOL"
+msgstr "SYMBOL"
+
+#: lexsup.c:243
+msgid "Start with undefined reference to SYMBOL"
+msgstr "Begynd med udefineret reference til SYMBOL"
+
+#: lexsup.c:245
+msgid "[=SECTION]"
+msgstr "[=SEKTION]"
+
+#: lexsup.c:245
+msgid "Don't merge input [SECTION | orphan] sections"
+msgstr "Flet ikke [SEKTION | forælderløse] sektioner"
+
+#: lexsup.c:247
+msgid "Build global constructor/destructor tables"
+msgstr "Byg globale konstruktors-/destruktorstabeller"
+
+#: lexsup.c:249
+msgid "Print version information"
+msgstr "Vis versionsinformation"
+
+#: lexsup.c:251
+msgid "Print version and emulation information"
+msgstr "Vis versions- og emuleringsinformation"
+
+#: lexsup.c:253
+msgid "Discard all local symbols"
+msgstr "Smid alle lokale symboler væk"
+
+#: lexsup.c:255
+msgid "Discard temporary local symbols (default)"
+msgstr "Smid temporære lokale symboler væk (standard)"
+
+#: lexsup.c:257
+msgid "Don't discard any local symbols"
+msgstr "Smid ikke nogen lokale symboler væk"
+
+#: lexsup.c:259
+msgid "Trace mentions of SYMBOL"
+msgstr "Udskriv omtale af SYMBOL"
+
+#: lexsup.c:261 lexsup.c:345 lexsup.c:347
+msgid "PATH"
+msgstr "SØGESTI"
+
+#: lexsup.c:261
+msgid "Default search path for Solaris compatibility"
+msgstr "Standardsøgesti for Solaris-kompatibilitet"
+
+#: lexsup.c:263
+msgid "Start a group"
+msgstr "Start en gruppe"
+
+#: lexsup.c:265
+msgid "End a group"
+msgstr "Slut en gruppe"
+
+#: lexsup.c:267
+msgid "Ignored for SunOS compatibility"
+msgstr "Ignoreret for SunOS-kompatibilitet"
+
+#: lexsup.c:269
+msgid "Link against shared libraries"
+msgstr "Lænk mod delte biblioteker"
+
+#: lexsup.c:275
+msgid "Do not link against shared libraries"
+msgstr "Lænk ikke mod delte biblioteker"
+
+#: lexsup.c:283
+msgid "Bind global references locally"
+msgstr "Bind globale referencer lokalt"
+
+#: lexsup.c:285
+msgid "Check section addresses for overlaps (default)"
+msgstr "Kontrollér sektionsadresser for overlapninger (standard)"
+
+#: lexsup.c:287
+msgid "Do not check section addresses for overlaps"
+msgstr "Kontrollér ikke sektionsadresser for overlapninger"
+
+#: lexsup.c:290
+msgid "Output cross reference table"
+msgstr "Opret krydsreferencetabel"
+
+#: lexsup.c:292
+msgid "SYMBOL=EXPRESSION"
+msgstr "SYMBOL=UDTRYK"
+
+#: lexsup.c:292
+msgid "Define a symbol"
+msgstr "Definér en symbol"
+
+#: lexsup.c:294
+msgid "[=STYLE]"
+msgstr "[=STIL]"
+
+#: lexsup.c:294
+msgid "Demangle symbol names [using STYLE]"
+msgstr "Afkod symbolnavn [brug STIL]"
+
+#: lexsup.c:296
+msgid "Generate embedded relocs"
+msgstr "Generér indlejrede relokeringer"
+
+#: lexsup.c:298
+msgid "Call SYMBOL at unload-time"
+msgstr "Kald SYMBOL ved udlæsning"
+
+#: lexsup.c:300
+msgid "Force generation of file with .exe suffix"
+msgstr "Tving generering af fil med endelsen .exe"
+
+#: lexsup.c:302
+msgid "Remove unused sections (on some targets)"
+msgstr "Fjern ubrugte sektioner (på visse mål)"
+
+#: lexsup.c:305
+msgid "Don't remove unused sections (default)"
+msgstr "Fjern ikke ubrugte sektioner (standard)"
+
+#: lexsup.c:308
+msgid "Print option help"
+msgstr "Vis hjælp om flag"
+
+#: lexsup.c:310
+msgid "Call SYMBOL at load-time"
+msgstr "Kald SYMBOL ved indlæsning"
+
+#: lexsup.c:312
+msgid "Write a map file"
+msgstr "Skriv en tabelfil"
+
+#: lexsup.c:314
+msgid "Do not define Common storage"
+msgstr "Definér ikke fælles lagring"
+
+#: lexsup.c:316
+msgid "Do not demangle symbol names"
+msgstr "Afkod ikke symbolnavne"
+
+#: lexsup.c:318
+msgid "Use less memory and more disk I/O"
+msgstr "Brug mindre hukommelse og mere disk-I/O"
+
+#: lexsup.c:320
+msgid "Allow no undefined symbols"
+msgstr "Tillad ingen udefinerede symboler"
+
+#: lexsup.c:322
+msgid "Allow undefined symbols in shared objects"
+msgstr "Tillad udefinerede symboler i delte objekter"
+
+#: lexsup.c:324
+msgid "Allow multiple definitions"
+msgstr "Tillad flere definitioner"
+
+# src/prefs.c:170
+#: lexsup.c:326
+msgid "Don't warn about mismatched input files"
+msgstr "Advar ikke om uparrede inddatafiler"
+
+#: lexsup.c:328
+msgid "Turn off --whole-archive"
+msgstr "Deaktivér ---whole-archive"
+
+#: lexsup.c:330
+msgid "Create an output file even if errors occur"
+msgstr "Opret en uddatafil også hvis fejl forekommer"
+
+#: lexsup.c:334
+msgid ""
+"Only use library directories specified on\n"
+"\t\t\t\tthe command line"
+msgstr ""
+"Brug kun bibliotekskataloger som angives\n"
+"\t\t\t\tpå kommandolinjen"
+
+#: lexsup.c:336
+msgid "Specify target of output file"
+msgstr "Angiv mål for uddatafil"
+
+#: lexsup.c:338
+msgid "Ignored for Linux compatibility"
+msgstr "Ignoreret for kompatibilitet med Linux"
+
+#: lexsup.c:340
+msgid "Relax branches on certain targets"
+msgstr "Forenkl greninger på visse mål"
+
+#: lexsup.c:343
+msgid "Keep only symbols listed in FILE"
+msgstr "Behold kun symboler angivne i FIL"
+
+#: lexsup.c:345
+msgid "Set runtime shared library search path"
+msgstr "Sæt kørselstidssøgesti for delte biblioteker"
+
+#: lexsup.c:347
+msgid "Set link time shared library search path"
+msgstr "Sæt lænkningstidssøgesti for delte biblioteker"
+
+#: lexsup.c:349
+msgid "Create a shared library"
+msgstr "Opret et delt bibliotek"
+
+#: lexsup.c:353
+msgid "Sort common symbols by size"
+msgstr "Sortér fælles symboler efter størrelse"
+
+#: lexsup.c:357
+msgid "COUNT"
+msgstr "ANTAL"
+
+#: lexsup.c:357
+msgid "How many tags to reserve in .dynamic section"
+msgstr "Hvor mange mærker som skal reserveres i .dynamic-sektion"
+
+#: lexsup.c:359
+msgid "[=SIZE]"
+msgstr "[=STØRRELSE]"
+
+#: lexsup.c:359
+msgid "Split output sections every SIZE octets"
+msgstr "Del uddatasektioner hver STØRRELSE oktetter"
+
+#: lexsup.c:361
+msgid "[=COUNT]"
+msgstr "[=ANTAL]"
+
+#: lexsup.c:361
+msgid "Split output sections every COUNT relocs"
+msgstr "Del uddatasektioner hver ANTAL relokeringer"
+
+#: lexsup.c:363
+msgid "Print memory usage statistics"
+msgstr "Vis statistik over hukommelsesbrug"
+
+#: lexsup.c:365
+msgid "Display target specific options"
+msgstr "Vis målspecifikke flag"
+
+#: lexsup.c:367
+msgid "Do task level linking"
+msgstr "Udfør lænkning på opgaveniveau"
+
+#: lexsup.c:369
+msgid "Use same format as native linker"
+msgstr "Brug samme format som indbygget lænker"
+
+#: lexsup.c:371
+msgid "SECTION=ADDRESS"
+msgstr "SEKTION=ADRESSE"
+
+#: lexsup.c:371
+msgid "Set address of named section"
+msgstr "Sæt adresse på navngiven sektion"
+
+#: lexsup.c:373
+msgid "Set address of .bss section"
+msgstr "Sæt adresse på .bss-sektion"
+
+#: lexsup.c:375
+msgid "Set address of .data section"
+msgstr "Sæt adresse på .data-sektion"
+
+#: lexsup.c:377
+msgid "Set address of .text section"
+msgstr "Sæt adresse på .text-sektion"
+
+#: lexsup.c:379
+msgid "Output lots of information during link"
+msgstr "Vis meget information under lænkning"
+
+#: lexsup.c:383
+msgid "Read version information script"
+msgstr "Læs skript med versionsinformation"
+
+#: lexsup.c:386
+msgid ""
+"Take export symbols list from .exports, using\n"
+"\t\t\t\tSYMBOL as the version."
+msgstr ""
+"Tag liste med eksportsymboler fra .exports og\n"
+"\t\t\t\tbrug SYMBOL som version."
+
+#: lexsup.c:389
+msgid "Warn about duplicate common symbols"
+msgstr "Advar for duplerede fælles symboler"
+
+#: lexsup.c:391
+msgid "Warn if global constructors/destructors are seen"
+msgstr "Advar hvis globale konstruktorer/destruktorer findes"
+
+#: lexsup.c:394
+msgid "Warn if the multiple GP values are used"
+msgstr "Advar hvis flere GP-værdier bruges"
+
+#: lexsup.c:396
+msgid "Warn only once per undefined symbol"
+msgstr "Advar kun én gang per udefineret symbol"
+
+#: lexsup.c:398
+msgid "Warn if start of section changes due to alignment"
+msgstr "Advar hvis begyndelsen på sektionen ændres på grund af justering"
+
+#: lexsup.c:401
+msgid "Treat warnings as errors"
+msgstr "Behandl advarsler som fejl"
+
+#: lexsup.c:404
+msgid "Include all objects from following archives"
+msgstr "Inkludér alle objekter fra følgende arkiver"
+
+#: lexsup.c:406
+msgid "Use wrapper functions for SYMBOL"
+msgstr "Brug indkapslingsfunktioner for SYMBOL"
+
+#: lexsup.c:408
+msgid "[=WORDS]"
+msgstr "[=ORD]"
+
+#: lexsup.c:408
+msgid ""
+"Modify problematic branches in last WORDS (1-10,\n"
+"\t\t\t\tdefault 5) words of a page"
+msgstr ""
+"Ændr problematiske greninger i sidste ORD (1-10,\n"
+"\t\t\t\tstandardværdi 5) ord på en side"
+
+#: lexsup.c:574
+msgid "%P: unrecognized option '%s'\n"
+msgstr "%P: ukendt flag \"%s\"\n"
+
+#: lexsup.c:576
+msgid "%P%F: use the --help option for usage information\n"
+msgstr "%P%F: brug flaget --help for brugsinformation\n"
+
+#: lexsup.c:595
+msgid "%P%F: unrecognized -a option `%s'\n"
+msgstr "%P%F: ukendt -a-flag \"%s\"\n"
+
+#: lexsup.c:608
+msgid "%P%F: unrecognized -assert option `%s'\n"
+msgstr "%P%F: ukendt -assert-flag \"%s\"\n"
+
+#: lexsup.c:651
+msgid "%F%P: unknown demangling style `%s'"
+msgstr "%F%P: ukendt afkodningsstil \"%s\""
+
+#: lexsup.c:711
+msgid "%P%F: invalid number `%s'\n"
+msgstr "%P%F: ugyldigt tal \"%s\"\n"
+
+#. This can happen if the user put "-rpath,a" on the command
+#. line. (Or something similar. The comma is important).
+#. Getopt becomes confused and thinks that this is a -r option
+#. but it cannot parse the text after the -r so it refuses to
+#. increment the optind counter. Detect this case and issue
+#. an error message here. We cannot just make this a warning,
+#. increment optind, and continue because getopt is too confused
+#. and will seg-fault the next time around.
+#: lexsup.c:812
+msgid "%P%F: bad -rpath option\n"
+msgstr "%P%F: ukendt -rpath-flag\n"
+
+#: lexsup.c:910
+msgid "%P%F: -shared not supported\n"
+msgstr "%P%F: -shared understøttes ikke\n"
+
+#: lexsup.c:942
+msgid "%P%F: invalid argument to option \"--section-start\"\n"
+msgstr "%P%F: ugyldigt argument til flaget \"--section-start\"\n"
+
+#: lexsup.c:948
+msgid "%P%F: missing argument(s) to option \"--section-start\"\n"
+msgstr "%P%F: argumenter mangler til flaget \"--section-start\"\n"
+
+#: lexsup.c:1097
+msgid "%P%F: may not nest groups (--help for usage)\n"
+msgstr "%P%F: må ikke neste grupper (--help for brug)\n"
+
+#: lexsup.c:1104
+msgid "%P%F: group ended before it began (--help for usage)\n"
+msgstr "%P%F: gruppen sluttede inden den begyndte (--help for brug)\n"
+
+#: lexsup.c:1118
+msgid "%P%F: invalid argument to option \"mpc860c0\"\n"
+msgstr "%P%F: ugyldigt argument til flaget \"mpc860c0\"\n"
+
+#: lexsup.c:1173
+msgid "%P%F: invalid hex number `%s'\n"
+msgstr "%P%F: ugyldigt heksadecimalt tal \"%s\"\n"
+
+#: lexsup.c:1185
+#, c-format
+msgid "Usage: %s [options] file...\n"
+msgstr "Brug: %s [flag] fil...\n"
+
+#: lexsup.c:1187
+msgid "Options:\n"
+msgstr "Alternativer:\n"
+
+#. Note: Various tools (such as libtool) depend upon the
+#. format of the listings below - do not change them.
+#: lexsup.c:1270
+#, c-format
+msgid "%s: supported targets:"
+msgstr "%s: mål som understøttes:"
+
+#: lexsup.c:1278
+#, c-format
+msgid "%s: supported emulations: "
+msgstr "%s: emuleringer som understøttes: "
+
+#: lexsup.c:1283
+#, c-format
+msgid "%s: emulation specific options:\n"
+msgstr "%s: emuleringsspecifikke flag:\n"
+
+#: lexsup.c:1287
+#, c-format
+msgid "Report bugs to %s\n"
+msgstr ""
+"Rapportér fejl til %s\n"
+"Rapportér fejl i oversættelsen til dansk@klid.dk\n"
+
+#: mri.c:334
+msgid "%P%F: unknown format type %s\n"
+msgstr "%P%F: ukendt formattype %s\n"
+
+#: pe-dll.c:321
+#, c-format
+msgid "%XUnsupported PEI architecture: %s\n"
+msgstr "%XPEI-arkitekturen understøttes ikke: %s\n"
+
+#: pe-dll.c:671
+#, c-format
+msgid "%XError, duplicate EXPORT with ordinals: %s (%d vs %d)\n"
+msgstr "%XFejl, dubleret EXPORT med ordinaler: %s (%d mod %d)\n"
+
+#: pe-dll.c:678
+#, c-format
+msgid "Warning, duplicate EXPORT: %s\n"
+msgstr "Advarsel, dubleret EXPORT: %s\n"
+
+#: pe-dll.c:742
+#, c-format
+msgid "%XCannot export %s: symbol not defined\n"
+msgstr "%XKan ikke eksportere %s: symbol er ikke defineret\n"
+
+#: pe-dll.c:748
+#, c-format
+msgid "%XCannot export %s: symbol wrong type (%d vs %d)\n"
+msgstr "%XKan ikke eksportere %s: symbol er af forkert type (%d mod %d)\n"
+
+#: pe-dll.c:755
+#, c-format
+msgid "%XCannot export %s: symbol not found\n"
+msgstr "%XKan ikke eksportere %s: symbol fandtes ikke\n"
+
+#: pe-dll.c:870
+#, c-format
+msgid "%XError, ordinal used twice: %d (%s vs %s)\n"
+msgstr "%XFejl, ordinalen bruges to gange: %d (%s mod %s)\n"
+
+#: pe-dll.c:1181
+#, c-format
+msgid "%XError: %d-bit reloc in dll\n"
+msgstr "%XFejl: %d-bit relokering i dll\n"
+
+#: pe-dll.c:1316
+#, c-format
+msgid "%s: Can't open output def file %s\n"
+msgstr "%s: Kan ikke åbne uddatadefinitionsfilen %s\n"
+
+#: pe-dll.c:1459
+msgid "; no contents available\n"
+msgstr "; intet indhold er tilgængeligt\n"
+
+#: pe-dll.c:2128
+#, c-format
+msgid "%XCan't open .lib file: %s\n"
+msgstr "%XKan ikke åbne .lib-filen: %s\n"
+
+#: pe-dll.c:2133
+#, c-format
+msgid "Creating library file: %s\n"
+msgstr "Opretter biblioteksfil: %s\n"
diff --git a/binutils-2.21/ld/po/es.gmo b/binutils-2.21/ld/po/es.gmo
new file mode 100644
index 0000000..8dedeeb
--- /dev/null
+++ b/binutils-2.21/ld/po/es.gmo
Binary files differ
diff --git a/binutils-2.21/ld/po/es.po b/binutils-2.21/ld/po/es.po
new file mode 100644
index 0000000..544e953
--- /dev/null
+++ b/binutils-2.21/ld/po/es.po
@@ -0,0 +1,2354 @@
+# Mensajes en español para ld 2.20.90.
+# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the binutils package.
+# Cristian Othón Martínez Vera <cfuga@itam.mx>, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ld 2.20.90\n"
+"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
+"POT-Creation-Date: 2010-11-05 11:34+0100\n"
+"PO-Revision-Date: 2010-11-18 12:31-0600\n"
+"Last-Translator: Cristian Othón Martínez Vera <cfuga@itam.mx>\n"
+"Language-Team: Spanish <es@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: emultempl/armcoff.em:73
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code Admite interoperar con código antiguo\n"
+
+#: emultempl/armcoff.em:74
+#, c-format
+msgid " --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"
+msgstr " --thumb-entry=<sim> Establece el punto de entrada para el símbolo Thumb <sim>\n"
+
+#: emultempl/armcoff.em:122
+#, c-format
+msgid "Errors encountered processing file %s"
+msgstr "Se encontraron errores al procesar el fichero %s"
+
+#: emultempl/armcoff.em:190 emultempl/pe.em:1812
+msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"
+msgstr "%P: aviso: '--thumb-entry %s' se impone a '-e %s'\n"
+
+#: emultempl/armcoff.em:195 emultempl/pe.em:1817
+msgid "%P: warning: cannot find thumb start symbol %s\n"
+msgstr "%P: aviso: no se puede encontrar el símbolo de inicio thumb %s\n"
+
+#: emultempl/pe.em:418
+#, c-format
+msgid " --base_file <basefile> Generate a base file for relocatable DLLs\n"
+msgstr " --base_file <ficherobase> Genera un fichero base para DLLs reubicables\n"
+
+# DLL son las siglas en inglés de `Biblioteca de Enlace Dinámico'.
+# El problema es que las siglas en español (BED) no están muy extendidas.
+# Se dejó `DLL' sin traducir en todas las ocasiones. cfuga
+#: emultempl/pe.em:419
+#, c-format
+msgid " --dll Set image base to the default for DLLs\n"
+msgstr " --dll Establece la imagen base por defecto para las DLLs\n"
+
+#: emultempl/pe.em:420
+#, c-format
+msgid " --file-alignment <size> Set file alignment\n"
+msgstr " --file-alignment <tamaño> Establece el fichero de alineación\n"
+
+#: emultempl/pe.em:421
+#, c-format
+msgid " --heap <size> Set initial size of the heap\n"
+msgstr " --heap <tamaño> Establece el tamaño inicial del montón\n"
+
+#: emultempl/pe.em:422
+#, c-format
+msgid " --image-base <address> Set start address of the executable\n"
+msgstr " --image-base <dirección> Establece la dirección de inicio del ejecutable\n"
+
+#: emultempl/pe.em:423
+#, c-format
+msgid " --major-image-version <number> Set version number of the executable\n"
+msgstr " --major-image-version <número> Establece el número de versión del ejecutable\n"
+
+#: emultempl/pe.em:424
+#, c-format
+msgid " --major-os-version <number> Set minimum required OS version\n"
+msgstr " --major-os-version <número> Establece la versión mínima requerida del SO\n"
+
+#: emultempl/pe.em:425
+#, c-format
+msgid " --major-subsystem-version <number> Set minimum required OS subsystem version\n"
+msgstr " --major-subsystem-version <número> Establece la versión mínima requerida del subsistema del SO\n"
+
+#: emultempl/pe.em:426
+#, c-format
+msgid " --minor-image-version <number> Set revision number of the executable\n"
+msgstr " --minor-image-version <número> Establece el número de revisión del ejecutable\n"
+
+#: emultempl/pe.em:427
+#, c-format
+msgid " --minor-os-version <number> Set minimum required OS revision\n"
+msgstr " --minor-os-version <número> Establece la revisión mínima requerida del SO\n"
+
+#: emultempl/pe.em:428
+#, c-format
+msgid " --minor-subsystem-version <number> Set minimum required OS subsystem revision\n"
+msgstr " --minor-subsystem-version <número> Establece la revisión mínima requerida del subsistema del SO\n"
+
+#: emultempl/pe.em:429
+#, c-format
+msgid " --section-alignment <size> Set section alignment\n"
+msgstr " --section-alignment <tamaño> Establece la alineación de la sección\n"
+
+#: emultempl/pe.em:430
+#, c-format
+msgid " --stack <size> Set size of the initial stack\n"
+msgstr " --stack <size> Establece el tamaño de la pila inicial\n"
+
+#: emultempl/pe.em:431
+#, c-format
+msgid " --subsystem <name>[:<version>] Set required OS subsystem [& version]\n"
+msgstr " --subsystem <nombre>[:<versión>] Establece el subsistema [y versión] requeridos del SO\n"
+
+#: emultempl/pe.em:432
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code Admite interoperar con código antiguo\n"
+
+#: emultempl/pe.em:433
+#, c-format
+msgid " --[no-]leading-underscore Set explicit symbol underscore prefix mode\n"
+msgstr " --[no-]leading-underscore Establece el modo explícito de prefijo de símbolo con subrayado\n"
+
+#: emultempl/pe.em:434
+#, c-format
+msgid " --thumb-entry=<symbol> Set the entry point to be Thumb <symbol>\n"
+msgstr " --thumb-entry=<símbolo> Establece el punto de entrada para el símbolo Thumb <símbolo>\n"
+
+#: emultempl/pe.em:436
+#, c-format
+msgid " --add-stdcall-alias Export symbols with and without @nn\n"
+msgstr " --add-stdcall-alias Exporta símbolos con y sin @nn\n"
+
+#: emultempl/pe.em:437
+#, c-format
+msgid " --disable-stdcall-fixup Don't link _sym to _sym@nn\n"
+msgstr " --disable-stdcall-fixup No enlaza _sym con _sym@nn\n"
+
+#: emultempl/pe.em:438
+#, c-format
+msgid " --enable-stdcall-fixup Link _sym to _sym@nn without warnings\n"
+msgstr " --enable-stdcall-fixup Enlaza _sym con _sym@nn sin avisos\n"
+
+#: emultempl/pe.em:439
+#, c-format
+msgid " --exclude-symbols sym,sym,... Exclude symbols from automatic export\n"
+msgstr " --exclude-symbols sim,sim,... Excluye símbolos de la exportación automática\n"
+
+#: emultempl/pe.em:440
+#, c-format
+msgid " --exclude-all-symbols Exclude all symbols from automatic export\n"
+msgstr " --exclude-all-symbols Excluye todos los símbolos de la exportación automática\n"
+
+#: emultempl/pe.em:441
+#, c-format
+msgid " --exclude-libs lib,lib,... Exclude libraries from automatic export\n"
+msgstr " --exclude-libs bib,bib,... Excluye bibliotecas de la exportación automática\n"
+
+#: emultempl/pe.em:442
+#, c-format
+msgid " --exclude-modules-for-implib mod,mod,...\n"
+msgstr " --exclude-modules-for-implib mod,mod,...\n"
+
+#: emultempl/pe.em:443
+#, c-format
+msgid " Exclude objects, archive members from auto\n"
+msgstr " Excluye objetos, miembros de archivo de la exportación\n"
+
+#: emultempl/pe.em:444
+#, c-format
+msgid " export, place into import library instead.\n"
+msgstr " automática, los coloca en la biblioteca de importación.\n"
+
+#: emultempl/pe.em:445
+#, c-format
+msgid " --export-all-symbols Automatically export all globals to DLL\n"
+msgstr " --export-all-symbols Exporta automáticamente todos los globales a la DLL\n"
+
+#: emultempl/pe.em:446
+#, c-format
+msgid " --kill-at Remove @nn from exported symbols\n"
+msgstr " --kill-at Elimina @nn de los símbolos exportados\n"
+
+#: emultempl/pe.em:447
+#, c-format
+msgid " --out-implib <file> Generate import library\n"
+msgstr " --out-implib <fichero> Genera una biblioteca de importación\n"
+
+#: emultempl/pe.em:448
+#, c-format
+msgid " --output-def <file> Generate a .DEF file for the built DLL\n"
+msgstr " --output-def <fichero> Genera un fichero .DEF para la DLL construida\n"
+
+#: emultempl/pe.em:449
+#, c-format
+msgid " --warn-duplicate-exports Warn about duplicate exports.\n"
+msgstr " --warn-duplicate-exports Avisa sobre exportaciones duplicadas.\n"
+
+#: emultempl/pe.em:450
+#, c-format
+msgid ""
+" --compat-implib Create backward compatible import libs;\n"
+" create __imp_<SYMBOL> as well.\n"
+msgstr ""
+" --compat-implib Crea bibliotecas de importación compatibles hacia atrás;\n"
+" crea además __imp_<SÍMBOLO>.\n"
+
+#: emultempl/pe.em:452
+#, c-format
+msgid ""
+" --enable-auto-image-base Automatically choose image base for DLLs\n"
+" unless user specifies one\n"
+msgstr ""
+" --enable-auto-image-base Escoge automáticamente la imagen base para las DLLs\n"
+" a menos que el usuario especifique una\n"
+
+#: emultempl/pe.em:454
+#, c-format
+msgid " --disable-auto-image-base Do not auto-choose image base. (default)\n"
+msgstr " --disable-auto-image-base No escoge automáticamente una imagen base. (por defecto)\n"
+
+#: emultempl/pe.em:455
+#, c-format
+msgid ""
+" --dll-search-prefix=<string> When linking dynamically to a dll without\n"
+" an importlib, use <string><basename>.dll\n"
+" in preference to lib<basename>.dll \n"
+msgstr ""
+" --dll-search-prefix=<cadena> Al enlazar dinámicamente con una dll sin una\n"
+" biblioteca de importación, usa <cadena><nombrebase>.dll \n"
+" en lugar de lib<nombrebase>.dll \n"
+
+#: emultempl/pe.em:458
+#, c-format
+msgid ""
+" --enable-auto-import Do sophistcated linking of _sym to\n"
+" __imp_sym for DATA references\n"
+msgstr ""
+" --enable-auto-import Hace enlazado sofisticado de _sym a\n"
+" __imp_sym para las referencias DATA\n"
+
+#: emultempl/pe.em:460
+#, c-format
+msgid " --disable-auto-import Do not auto-import DATA items from DLLs\n"
+msgstr " --disable-auto-import No importa automáticamente elementos DATA de las DLLs\n"
+
+#: emultempl/pe.em:461
+#, c-format
+msgid ""
+" --enable-runtime-pseudo-reloc Work around auto-import limitations by\n"
+" adding pseudo-relocations resolved at\n"
+" runtime.\n"
+msgstr ""
+" --enable-runtime-pseudo-reloc Evita limitaciones de autoimportación\n"
+" agregando pseudo-reubicaciones resueltas\n"
+" al momento de ejecución.\n"
+
+#: emultempl/pe.em:464
+#, c-format
+msgid ""
+" --disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations for\n"
+" auto-imported DATA.\n"
+msgstr ""
+" --disable-runtime-pseudo-reloc No agrega pseudo-reubicaciones al momento\n"
+" de ejecución para DATOS autoimportados.\n"
+
+#: emultempl/pe.em:466
+#, c-format
+msgid ""
+" --enable-extra-pe-debug Enable verbose debug output when building\n"
+" or linking to DLLs (esp. auto-import)\n"
+msgstr ""
+" --enable-extra-pe-debug Activa la salida de depuración detallada al construir\n"
+" o enlazar a DLLs (en part. con auto-importación)\n"
+
+#: emultempl/pe.em:469
+#, c-format
+msgid ""
+" --large-address-aware Executable supports virtual addresses\n"
+" greater than 2 gigabytes\n"
+msgstr ""
+" --large-address-aware El ejecutable admite direcciones\n"
+" virtuales mayores a 2 gigabytes\n"
+
+#: emultempl/pe.em:471
+#, c-format
+msgid ""
+" --enable-long-section-names Use long COFF section names even in\n"
+" executable image files\n"
+msgstr ""
+" --enable-long-section-names Usa nombres de sección COFF largos aún\n"
+" en ficheros de imágenes ejecutables\n"
+
+#: emultempl/pe.em:473
+#, c-format
+msgid ""
+" --disable-long-section-names Never use long COFF section names, even\n"
+" in object files\n"
+msgstr ""
+" --disable-long-section-names Nunca usa nombres de sección COFF largos,\n"
+" aún en ficheros objeto\n"
+
+#: emultempl/pe.em:475
+#, c-format
+msgid ""
+" --dynamicbase\t\t\t Image base address may be relocated using\n"
+"\t\t\t\t address space layout randomization (ASLR)\n"
+msgstr ""
+" --dynamicbase\t\t\t La dirección base de la imagen se puede\n"
+"\t\t\t\t reubicar usando la disposición aleatoria\n"
+"\t\t\t\t del espacio de direcciones (en inglés: ASLR)\n"
+
+#: emultempl/pe.em:477
+#, c-format
+msgid " --forceinteg\t\t Code integrity checks are enforced\n"
+msgstr " --forceinteg\t\t Activa la revisión de integridad de código\n"
+
+#: emultempl/pe.em:478
+#, c-format
+msgid " --nxcompat\t\t Image is compatible with data execution prevention\n"
+msgstr " --nxcompat\t\t La imagen es compatible con la prevención de ejecución de datos\n"
+
+#: emultempl/pe.em:479
+#, c-format
+msgid " --no-isolation\t\t Image understands isolation but do not isolate the image\n"
+msgstr " --no-isolation\t\t La imagen entiende aislamiento, pero no aísla la imagen\n"
+
+#: emultempl/pe.em:480
+#, c-format
+msgid ""
+" --no-seh\t\t\t Image does not use SEH. No SE handler may\n"
+"\t\t\t\t be called in this image\n"
+msgstr ""
+" --no-seh\t\t\t La imagen no usa SEH. No se puede llamar\n"
+"\t\t\t\t un manejador SE en esta imagen\n"
+
+#: emultempl/pe.em:482
+#, c-format
+msgid " --no-bind\t\t\t Do not bind this image\n"
+msgstr " --no-bind\t\t\t No enlaza esta imagen\n"
+
+#: emultempl/pe.em:483
+#, c-format
+msgid " --wdmdriver\t\t Driver uses the WDM model\n"
+msgstr " --wdmdriver\t\t El controlador usa el modelo WDB\n"
+
+#: emultempl/pe.em:484
+#, c-format
+msgid " --tsaware Image is Terminal Server aware\n"
+msgstr " --tsaware La imagen funciona con Terminal Server\n"
+
+#: emultempl/pe.em:613
+msgid "%P: warning: bad version number in -subsystem option\n"
+msgstr "%P: aviso: número de versión erróneo en la opción -subsystem\n"
+
+#: emultempl/pe.em:638
+msgid "%P%F: invalid subsystem type %s\n"
+msgstr "%P%F: tipo de subsistema %s inválido\n"
+
+#: emultempl/pe.em:659
+msgid "%P%F: invalid hex number for PE parameter '%s'\n"
+msgstr "%P%F: número hexadecimal inválido para el parámetro PE '%s'\n"
+
+#: emultempl/pe.em:676
+msgid "%P%F: strange hex info for PE parameter '%s'\n"
+msgstr "%P%F: información hexadecimal extraña para el parámetro PE '%s'\n"
+
+#: emultempl/pe.em:693
+#, c-format
+msgid "%s: Can't open base file %s\n"
+msgstr "%s: No se puede abrir el fichero base %s\n"
+
+#: emultempl/pe.em:969
+msgid "%P: warning, file alignment > section alignment.\n"
+msgstr "%P: aviso, alineación del fichero > alineación de la sección.\n"
+
+#: emultempl/pe.em:982
+msgid "%P: warning: --export-dynamic is not supported for PE targets, did you mean --export-all-symbols?\n"
+msgstr "%P: aviso: --export-dynamic no se admite para objetivos PE, ¿quiso decir --export-all-symbols?\n"
+
+#: emultempl/pe.em:1058 emultempl/pe.em:1085
+#, c-format
+msgid "Warning: resolving %s by linking to %s\n"
+msgstr "Aviso: se resuelve %s al enlazar con %s\n"
+
+#: emultempl/pe.em:1063 emultempl/pe.em:1090
+msgid "Use --enable-stdcall-fixup to disable these warnings\n"
+msgstr "Use --enable-stdcall-fixup para desactivar estos avisos\n"
+
+#: emultempl/pe.em:1064 emultempl/pe.em:1091
+msgid "Use --disable-stdcall-fixup to disable these fixups\n"
+msgstr "Use --disable-stdcall-fixup para desactivar estas composturas\n"
+
+#: emultempl/pe.em:1110
+#, c-format
+msgid "%C: Cannot get section contents - auto-import exception\n"
+msgstr "%C: No se puede obtener el contenido de la sección - excepción de auto-importación\n"
+
+#: emultempl/pe.em:1150
+#, c-format
+msgid "Info: resolving %s by linking to %s (auto-import)\n"
+msgstr "Información: se resuelve %s al enlazar con %s (auto-importación)\n"
+
+#: emultempl/pe.em:1157
+msgid ""
+"%P: warning: auto-importing has been activated without --enable-auto-import specified on the command line.\n"
+"This should work unless it involves constant data structures referencing symbols from auto-imported DLLs.\n"
+msgstr ""
+"%P: aviso: la importación automática se activó sin especificar --enable-auto-import en la línea de órdenes.\n"
+"Esto debe funcionar a menos que involucre estructuras de datos constantes que referencíen símbolos de DLLs auto-importadas.\n"
+
+#: emultempl/pe.em:1164 emultempl/pe.em:1369 emultempl/pe.em:1575 ldcref.c:490
+#: ldcref.c:588 ldmain.c:1183 ldmisc.c:286 pe-dll.c:705 pe-dll.c:1253
+#: pe-dll.c:1348
+msgid "%B%F: could not read symbols: %E\n"
+msgstr "%B%F: no se pueden leer símbolos: %E\n"
+
+#: emultempl/pe.em:1245
+msgid "%F%P: cannot perform PE operations on non PE output file '%B'.\n"
+msgstr "%F%P: no se pueden realizar operaciones PE en el fichero de salida '%B' que no es PE.\n"
+
+#: emultempl/pe.em:1616
+#, c-format
+msgid "Errors encountered processing file %s\n"
+msgstr "Se encontraron errores al procesar el fichero %s\n"
+
+#: emultempl/pe.em:1639
+#, c-format
+msgid "Errors encountered processing file %s for interworking\n"
+msgstr "Se encontraron errores al procesar el fichero %s para interoperabilidad\n"
+
+#: emultempl/pe.em:1701 ldexp.c:542 ldlang.c:3323 ldlang.c:3358 ldlang.c:6804
+#: ldlang.c:6835 ldmain.c:1128
+msgid "%P%F: bfd_link_hash_lookup failed: %E\n"
+msgstr "%P%F: falló bfd_link_hash_lookup: %E\n"
+
+#: ldcref.c:168
+msgid "%X%P: bfd_hash_table_init of cref table failed: %E\n"
+msgstr "%X%P: falló bfd_hash_table_init de la tabla cref: %E\n"
+
+#: ldcref.c:174
+msgid "%X%P: cref_hash_lookup failed: %E\n"
+msgstr "%X%P: falló cref_hash_lookup: %E\n"
+
+#: ldcref.c:184
+msgid "%X%P: cref alloc failed: %E\n"
+msgstr "%X%P: falló la reubicación cref: %E\n"
+
+#: ldcref.c:366
+#, c-format
+msgid ""
+"\n"
+"Cross Reference Table\n"
+"\n"
+msgstr ""
+"\n"
+"Tabla de Referencias Cruzadas\n"
+"\n"
+
+#: ldcref.c:367
+msgid "Symbol"
+msgstr "Símbolo"
+
+#: ldcref.c:375
+#, c-format
+msgid "File\n"
+msgstr "Fichero\n"
+
+#: ldcref.c:379
+#, c-format
+msgid "No symbols\n"
+msgstr "No hay símbolos\n"
+
+#: ldcref.c:532
+msgid "%P: symbol `%T' missing from main hash table\n"
+msgstr "%P: falta el símbolo `%T' de la tabla principal de dispersión\n"
+
+#: ldcref.c:650 ldcref.c:657 ldmain.c:1217 ldmain.c:1224
+msgid "%B%F: could not read relocs: %E\n"
+msgstr "%B%F: no se pueden leer las reubicaciones: %E\n"
+
+#. We found a reloc for the symbol. The symbol is defined
+#. in OUTSECNAME. This reloc is from a section which is
+#. mapped into a section from which references to OUTSECNAME
+#. are prohibited. We must report an error.
+#: ldcref.c:684
+msgid "%X%C: prohibited cross reference from %s to `%T' in %s\n"
+msgstr "%X%C: referencia cruzada prohibida de %s a `%T' en %s\n"
+
+#: ldctor.c:85
+msgid "%P%X: Different relocs used in set %s\n"
+msgstr "%P%X: Se usaron diferentes reubicaciones en el conjunto %s\n"
+
+#: ldctor.c:103
+msgid "%P%X: Different object file formats composing set %s\n"
+msgstr "%P%X: Formatos diferentes de fichero objeto componen al conjunto %s\n"
+
+#: ldctor.c:281 ldctor.c:295
+msgid "%P%X: %s does not support reloc %s for set %s\n"
+msgstr "%P%X: %s no se admite la reubicación %s para el conjunto %s\n"
+
+#: ldctor.c:316
+msgid "%P%X: Unsupported size %d for set %s\n"
+msgstr "%P%X: No se admite el tamaño %d para el conjunto %s\n"
+
+#: ldctor.c:337
+msgid ""
+"\n"
+"Set Symbol\n"
+"\n"
+msgstr ""
+"\n"
+"Conjunto Símbolo\n"
+"\n"
+
+#: ldemul.c:265
+#, c-format
+msgid "%S SYSLIB ignored\n"
+msgstr "%S se descarta SYSLIB\n"
+
+#: ldemul.c:271
+#, c-format
+msgid "%S HLL ignored\n"
+msgstr "%S se descarta HLL\n"
+
+#: ldemul.c:291
+msgid "%P: unrecognised emulation mode: %s\n"
+msgstr "%P: no se reconoce el modo de emulación: %s\n"
+
+#: ldemul.c:292
+msgid "Supported emulations: "
+msgstr "Emulaciones admitidas: "
+
+#: ldemul.c:334
+#, c-format
+msgid " no emulation specific options.\n"
+msgstr " no hay opciones específicas de emulación.\n"
+
+#: ldexp.c:313
+msgid "%P: warning: address of `%s' isn't multiple of maximum page size\n"
+msgstr "%P: aviso: la dirección de `%s' no es un múltiplo del tamaño máximo de página\n"
+
+#: ldexp.c:351
+#, c-format
+msgid "%F%S %% by zero\n"
+msgstr "%F%S %% por cero\n"
+
+#: ldexp.c:359
+#, c-format
+msgid "%F%S / by zero\n"
+msgstr "%F%S / por cero\n"
+
+#: ldexp.c:552
+#, c-format
+msgid "%X%S: unresolvable symbol `%s' referenced in expression\n"
+msgstr "%X%S: se referencía el símbolo sin resolución `%s' en la expresión\n"
+
+#: ldexp.c:564
+#, c-format
+msgid "%F%S: undefined symbol `%s' referenced in expression\n"
+msgstr "%F%S: se referencía el símbolo sin definir `%s' en la expresión\n"
+
+#: ldexp.c:585 ldexp.c:602 ldexp.c:629
+#, c-format
+msgid "%F%S: undefined section `%s' referenced in expression\n"
+msgstr "%F%S: se referencía la sección sin definir `%s' en la expresión\n"
+
+#: ldexp.c:656 ldexp.c:670
+#, c-format
+msgid "%F%S: undefined MEMORY region `%s' referenced in expression\n"
+msgstr "%F%S: se referencía la región MEMORY sin definir `%s' en la expresión\n"
+
+#: ldexp.c:681
+#, c-format
+msgid "%F%S: unknown constant `%s' referenced in expression\n"
+msgstr "%F%S: se referencía la constante sin definir `%s' en la expresión\n"
+
+#: ldexp.c:743
+#, c-format
+msgid "%F%S can not PROVIDE assignment to location counter\n"
+msgstr "%F%S no se puede hacer una asignación PROVIDE al contador de ubicación\n"
+
+#: ldexp.c:757
+#, c-format
+msgid "%F%S invalid assignment to location counter\n"
+msgstr "%F%S asignación inválida al contador de ubicación\n"
+
+#: ldexp.c:760
+#, c-format
+msgid "%F%S assignment to location counter invalid outside of SECTION\n"
+msgstr "%F%S asignación al contador de ubicación inválida fuera de SECTION\n"
+
+#: ldexp.c:773
+msgid "%F%S cannot move location counter backwards (from %V to %V)\n"
+msgstr "%F%S no se puede mover el contador de ubicación hacia atrás (de %V a %V)\n"
+
+#: ldexp.c:812
+msgid "%P%F:%s: hash creation failed\n"
+msgstr "%P%F:%s: falló la creación de la dispersión\n"
+
+#: ldexp.c:1119 ldexp.c:1144 ldexp.c:1204
+#, c-format
+msgid "%F%S: nonconstant expression for %s\n"
+msgstr "%F%S: la expresión no es constante para %s\n"
+
+#: ldfile.c:141
+#, c-format
+msgid "attempt to open %s failed\n"
+msgstr "falló el intento de abrir %s\n"
+
+#: ldfile.c:143
+#, c-format
+msgid "attempt to open %s succeeded\n"
+msgstr "tuvo éxito el intento de abrir %s\n"
+
+#: ldfile.c:149
+msgid "%F%P: invalid BFD target `%s'\n"
+msgstr "%F%P: objetivo BFD inválido `%s'\n"
+
+#: ldfile.c:266 ldfile.c:295
+msgid "%P: skipping incompatible %s when searching for %s\n"
+msgstr "%P: se salta el %s incompatible mientras se busca %s\n"
+
+#: ldfile.c:279
+msgid "%F%P: attempted static link of dynamic object `%s'\n"
+msgstr "%F%P: se intentó el enlazado estático del objeto dinámico `%s'\n"
+
+#: ldfile.c:332 ldmain.c:832
+msgid "%P%F: %s: plugin reported error claiming file\n"
+msgstr "%P%F: %s: el plugin reportó error al reclamar el fichero\n"
+
+#: ldfile.c:447
+msgid "%P: cannot find %s (%s): %E\n"
+msgstr "%P: no se puede encontrar %s (%s): %E\n"
+
+#: ldfile.c:450
+msgid "%P: cannot find %s: %E\n"
+msgstr "%P: no se puede encontrar %s: %E\n"
+
+#: ldfile.c:485
+msgid "%P: cannot find %s inside %s\n"
+msgstr "%P: no se puede encontrar %s dentro de %s\n"
+
+#: ldfile.c:488
+msgid "%P: cannot find %s\n"
+msgstr "%P: no se puede encontrar %s\n"
+
+#: ldfile.c:507 ldfile.c:525
+#, c-format
+msgid "cannot find script file %s\n"
+msgstr "no se puede encontrar el fichero de guión %s\n"
+
+#: ldfile.c:509 ldfile.c:527
+#, c-format
+msgid "opened script file %s\n"
+msgstr "fichero de guión %s abierto\n"
+
+#: ldfile.c:657
+msgid "%P%F: cannot open linker script file %s: %E\n"
+msgstr "%P%F: no se puede abrir el fichero de guión del enlazador %s: %E\n"
+
+#: ldfile.c:722
+msgid "%P%F: cannot represent machine `%s'\n"
+msgstr "%P%F: no se puede representar la máquina `%s'\n"
+
+#: ldlang.c:1160 ldlang.c:1202 ldlang.c:3048
+msgid "%P%F: can not create hash table: %E\n"
+msgstr "%P%F: no se puede crear la tabla de dispersión: %E\n"
+
+#: ldlang.c:1253
+msgid "%P:%S: warning: redeclaration of memory region `%s'\n"
+msgstr "%P:%S: aviso: redeclaración de la región de memoria `%s'\n"
+
+#: ldlang.c:1259
+msgid "%P:%S: warning: memory region `%s' not declared\n"
+msgstr "%P:%S: aviso: no se declaró la región de memoria `%s'\n"
+
+#: ldlang.c:1293
+msgid "%F%P:%S: error: alias for default memory region\n"
+msgstr "%F%P:%S: aviso: alias para la región de memoria por defecto\n"
+
+#: ldlang.c:1304
+msgid "%F%P:%S: error: redefinition of memory region alias `%s'\n"
+msgstr "%F%P:%S: aviso: redefinición del alias de la región de memoria '%s'\n"
+
+#: ldlang.c:1311
+msgid "%F%P:%S: error: memory region `%s' for alias `%s' does not exist\n"
+msgstr "%F%P:%S: aviso: no existe la región de memoria `%s' para el alias `%s'\n"
+
+#: ldlang.c:1363 ldlang.c:1402
+msgid "%P%F: failed creating section `%s': %E\n"
+msgstr "%P%F: falló la creación de la sección `%s': %E\n"
+
+#: ldlang.c:1958
+#, c-format
+msgid ""
+"\n"
+"Discarded input sections\n"
+"\n"
+msgstr ""
+"\n"
+"Secciones de salida descartadas\n"
+"\n"
+
+#: ldlang.c:1966
+msgid ""
+"\n"
+"Memory Configuration\n"
+"\n"
+msgstr ""
+"\n"
+"Configuración de la Memoria\n"
+"\n"
+
+#: ldlang.c:1968
+msgid "Name"
+msgstr "Nombre"
+
+#: ldlang.c:1968
+msgid "Origin"
+msgstr "Origen"
+
+#: ldlang.c:1968
+msgid "Length"
+msgstr "Longitud"
+
+#: ldlang.c:1968
+msgid "Attributes"
+msgstr "Atributos"
+
+#: ldlang.c:2008
+#, c-format
+msgid ""
+"\n"
+"Linker script and memory map\n"
+"\n"
+msgstr ""
+"\n"
+"Guión del enlazador y mapa de memoria\n"
+"\n"
+
+#: ldlang.c:2074
+msgid "%P%F: Illegal use of `%s' section\n"
+msgstr "%P%F: Uso ilegal de la sección `%s'\n"
+
+#: ldlang.c:2083
+msgid "%P%F: output format %s cannot represent section called %s\n"
+msgstr "%P%F: el formato de salida %s no puede representar la sección llamada %s\n"
+
+#: ldlang.c:2636
+msgid "%B: file not recognized: %E\n"
+msgstr "%B: no se reconoce el fichero: %E\n"
+
+#: ldlang.c:2637
+msgid "%B: matching formats:"
+msgstr "%B: formatos coincidentes:"
+
+#: ldlang.c:2644
+msgid "%F%B: file not recognized: %E\n"
+msgstr "%F%B: no se reconoce el fichero: %E\n"
+
+#: ldlang.c:2715
+msgid "%F%B: member %B in archive is not an object\n"
+msgstr "%F%B: el miembro %B en el archivo no es un objeto\n"
+
+#: ldlang.c:2730 ldlang.c:2744
+msgid "%F%B: could not read symbols: %E\n"
+msgstr "%F%B: no se puede leer símbolos: %E\n"
+
+#: ldlang.c:3018
+msgid "%P: warning: could not find any targets that match endianness requirement\n"
+msgstr "%P: aviso: no se puede encontrar ningún objetivo que coincida con los requerimientos de `endianez'\n"
+
+#: ldlang.c:3032
+msgid "%P%F: target %s not found\n"
+msgstr "%P%F: no se encontró el objetivo %s\n"
+
+#: ldlang.c:3034
+msgid "%P%F: cannot open output file %s: %E\n"
+msgstr "%P%F: no se puede abrir el fichero de salida %s: %E\n"
+
+#: ldlang.c:3040
+msgid "%P%F:%s: can not make object file: %E\n"
+msgstr "%P%F:%s: no se puede hacer el fichero objeto: %E\n"
+
+#: ldlang.c:3044
+msgid "%P%F:%s: can not set architecture: %E\n"
+msgstr "%P%F:%s: no se puede establecer la arquitectura: %E\n"
+
+#: ldlang.c:3185
+msgid "%P: warning: %s contains output sections; did you forget -T?\n"
+msgstr "%P: aviso: %s contiene secciones de salida. ¿Olvidó -T?\n"
+
+#: ldlang.c:3215
+msgid "%P%F: bfd_hash_lookup failed creating symbol %s\n"
+msgstr "%P%F: falló bfd_hash_lookup al crear el símbolo %s\n"
+
+#: ldlang.c:3233
+msgid "%P%F: bfd_hash_allocate failed creating symbol %s\n"
+msgstr "%P%F: falló bfd_hash_allocate al crear el símbolo %s\n"
+
+#: ldlang.c:3688
+msgid "%F%P: %s not found for insert\n"
+msgstr "%F%P: no se puede encontrar %s para insert\n"
+
+#: ldlang.c:3903
+msgid " load address 0x%V"
+msgstr " dirección de carga 0x%V"
+
+#: ldlang.c:4179
+msgid "%W (size before relaxing)\n"
+msgstr "%W (tamaño antes de la relajación)\n"
+
+#: ldlang.c:4270
+#, c-format
+msgid "Address of section %s set to "
+msgstr "La dirección de la sección %s se estableció a "
+
+#: ldlang.c:4423
+#, c-format
+msgid "Fail with %d\n"
+msgstr "Falló con %d\n"
+
+#: ldlang.c:4710
+msgid "%X%P: section %s loaded at [%V,%V] overlaps section %s loaded at [%V,%V]\n"
+msgstr "%X%P: la sección %s cargada en [%V,%V] sobreescribe la sección %s cargada en [%V,%V]\n"
+
+#: ldlang.c:4726
+msgid "%X%P: region `%s' overflowed by %ld bytes\n"
+msgstr "%X%P: la región `%s' se desborda por %ld bytes\n"
+
+#: ldlang.c:4749
+msgid "%X%P: address 0x%v of %B section `%s' is not within region `%s'\n"
+msgstr "%X%P: la dirección 0x%v de la sección %B %s no está dentro de la región `%s'\n"
+
+#: ldlang.c:4760
+msgid "%X%P: %B section `%s' will not fit in region `%s'\n"
+msgstr "%X%P: la sección %B `%s' no cabe en la región `%s'\n"
+
+#: ldlang.c:4816
+#, c-format
+msgid "%F%S: non constant or forward reference address expression for section %s\n"
+msgstr "%F%S: expresión de dirección de referencia hacia adelante o no constante para la sección %s\n"
+
+#: ldlang.c:4841
+msgid "%P%X: Internal error on COFF shared library section %s\n"
+msgstr "%P%X: Error interno en la sección de biblioteca compartida COFF %s\n"
+
+#: ldlang.c:4900
+msgid "%P%F: error: no memory region specified for loadable section `%s'\n"
+msgstr "%P%F: aviso: no se especificó una región de memoria para la sección cargable `%s'\n"
+
+#: ldlang.c:4905
+msgid "%P: warning: no memory region specified for loadable section `%s'\n"
+msgstr "%P: aviso: no se especificó una región de memoria para la sección cargable `%s'\n"
+
+#: ldlang.c:4927
+msgid "%P: warning: changing start of section %s by %lu bytes\n"
+msgstr "%P: aviso: se cambia el inicio de la sección %s por %lu bytes\n"
+
+#: ldlang.c:5004
+msgid "%P: warning: dot moved backwards before `%s'\n"
+msgstr "%P: aviso: el punto se movió hacia atrás antes de `%s'\n"
+
+#: ldlang.c:5170
+msgid "%P%F: can't relax section: %E\n"
+msgstr "%P%F: no se puede relajar la sección: %E\n"
+
+#: ldlang.c:5497
+msgid "%F%P: invalid data statement\n"
+msgstr "%F%P: declaración de datos inválida\n"
+
+#: ldlang.c:5530
+msgid "%F%P: invalid reloc statement\n"
+msgstr "%F%P: declaración de reubicación inválida\n"
+
+#: ldlang.c:5648
+msgid "%P%F: gc-sections requires either an entry or an undefined symbol\n"
+msgstr "%P%F: las secciones-gc requieren de una entrada o un símbolo indefinido\n"
+
+#: ldlang.c:5673
+msgid "%P%F:%s: can't set start address\n"
+msgstr "%P%F:%s: no se puede establecer la dirección de inicio\n"
+
+#: ldlang.c:5686 ldlang.c:5705
+msgid "%P%F: can't set start address\n"
+msgstr "%P%F: no se puede establecer la dirección de inicio\n"
+
+#: ldlang.c:5698
+msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n"
+msgstr "%P: aviso: no se puede encontrar el símbolo de entrada %s; se usa por defecto %V\n"
+
+#: ldlang.c:5710
+msgid "%P: warning: cannot find entry symbol %s; not setting start address\n"
+msgstr "%P: aviso: no se puede encontrar el símbolo de entrada %s; no se establece la dirección de inicio\n"
+
+#: ldlang.c:5760
+msgid "%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"
+msgstr "%P%F: No se admite el enlazado reubicable con reubicaciones del formato %s (%B) al formato %s (%B)\n"
+
+#: ldlang.c:5770
+msgid "%P%X: %s architecture of input file `%B' is incompatible with %s output\n"
+msgstr "%P%X: la arquitectura %s del fichero de entrada `%B' es incompatible con la salida %s\n"
+
+#: ldlang.c:5792
+msgid "%P%X: failed to merge target specific data of file %B\n"
+msgstr "%P%X: falló la mezcla de datos específicos de objetivo del fichero %B\n"
+
+#: ldlang.c:5863
+msgid "%P%F: Could not define common symbol `%T': %E\n"
+msgstr "%P%F: No se puede definir el símbolo común `%T': %E\n"
+
+#: ldlang.c:5875
+msgid ""
+"\n"
+"Allocating common symbols\n"
+msgstr ""
+"\n"
+"Se asignan símbolos comunes\n"
+
+#: ldlang.c:5876
+msgid ""
+"Common symbol size file\n"
+"\n"
+msgstr ""
+"Símbolo común tamaño fichero\n"
+"\n"
+
+#: ldlang.c:6022
+msgid "%P%F: invalid syntax in flags\n"
+msgstr "%P%F: sintaxis inválida en los interruptores\n"
+
+#: ldlang.c:6415
+msgid "%P%F: Failed to create hash table\n"
+msgstr "%P%F: Falló al crear la tabla de dispersión\n"
+
+#: ldlang.c:6430
+msgid "%P%F: %s: plugin reported error after all symbols read\n"
+msgstr "%P%F: %s: el plugin reportó error después de leer todos los símbolos\n"
+
+#: ldlang.c:6717
+msgid "%P%F: multiple STARTUP files\n"
+msgstr "%P%F: ficheros STARTUP múltiples\n"
+
+#: ldlang.c:6765
+msgid "%X%P:%S: section has both a load address and a load region\n"
+msgstr "%X%P:%S: la sección tiene tanto una dirección de carga como una región de carga\n"
+
+#: ldlang.c:6950
+msgid "%X%P:%S: PHDRS and FILEHDR are not supported when prior PT_LOAD headers lack them\n"
+msgstr "%X%P:%S: no se admiten PHDRS y FILEHDR cuando los encabezados PT_LOAD previso no los tienen\n"
+
+#: ldlang.c:7022
+msgid "%F%P: no sections assigned to phdrs\n"
+msgstr "%F%P: no se asignaron secciones a phdrs\n"
+
+#: ldlang.c:7060
+msgid "%F%P: bfd_record_phdr failed: %E\n"
+msgstr "%F%P: falló bfd_record_phdr: %E\n"
+
+#: ldlang.c:7080
+msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n"
+msgstr "%X%P: se asignó la sección `%s' al phdr que no existe `%s'\n"
+
+#: ldlang.c:7481
+msgid "%X%P: unknown language `%s' in version information\n"
+msgstr "%X%P: lenguaje `%s' desconocido en la información de la versión\n"
+
+#: ldlang.c:7626
+msgid "%X%P: anonymous version tag cannot be combined with other version tags\n"
+msgstr "%X%P: la marca de versión anónima no se puede combinar con otras marcas de versión\n"
+
+#: ldlang.c:7635
+msgid "%X%P: duplicate version tag `%s'\n"
+msgstr "%X%P: marca de versión `%s' duplicada\n"
+
+#: ldlang.c:7656 ldlang.c:7665 ldlang.c:7683 ldlang.c:7693
+msgid "%X%P: duplicate expression `%s' in version information\n"
+msgstr "%X%P: expresión `%s' duplicada en la información de la versión\n"
+
+#: ldlang.c:7733
+msgid "%X%P: unable to find version dependency `%s'\n"
+msgstr "%X%P: no se puede encontrar la dependencia de versión `%s'\n"
+
+#: ldlang.c:7756
+msgid "%X%P: unable to read .exports section contents\n"
+msgstr "%X%P: no se pueden leer los contenidos de la sección .exports\n"
+
+#: ldmain.c:239
+msgid "%X%P: can't set BFD default target to `%s': %E\n"
+msgstr "%X%P: no se puede establecer el objetivo BFD por defecto a `%s': %E\n"
+
+#: ldmain.c:307
+msgid "%P%F: -r and -shared may not be used together\n"
+msgstr "%P%F: no se pueden usar juntos -r y -shared\n"
+
+#: ldmain.c:350
+msgid "%P%F: -F may not be used without -shared\n"
+msgstr "%P%F: no se puede usar -F sin -shared\n"
+
+#: ldmain.c:352
+msgid "%P%F: -f may not be used without -shared\n"
+msgstr "%P%F: no se puede usar -f sin -shared\n"
+
+#: ldmain.c:400
+msgid "using external linker script:"
+msgstr "se usa el guión externo del enlazador:"
+
+#: ldmain.c:402
+msgid "using internal linker script:"
+msgstr "se usa el guión interno del enlazador:"
+
+#: ldmain.c:436
+msgid "%P%F: no input files\n"
+msgstr "%P%F: no hay ficheros de entrada\n"
+
+#: ldmain.c:440
+msgid "%P: mode %s\n"
+msgstr "%P: modo %s\n"
+
+#: ldmain.c:456
+msgid "%P%F: cannot open map file %s: %E\n"
+msgstr "%P%F: no se puede encontrar el fichero de mapeo %s: %E\n"
+
+#: ldmain.c:485
+msgid "%P: %s: error in plugin cleanup (ignored)\n"
+msgstr "%P %s: error en la limpieza de plugin (se descarta)\n"
+
+#: ldmain.c:494
+msgid "%P: link errors found, deleting executable `%s'\n"
+msgstr "%P: se encontraron errores de enlace, se borra el ejecutable `%s'\n"
+
+#: ldmain.c:503
+msgid "%F%B: final close failed: %E\n"
+msgstr "%F%B: falló el cerrado final: %E\n"
+
+#: ldmain.c:529
+msgid "%X%P: unable to open for source of copy `%s'\n"
+msgstr "%X%P: no se puede abrir para la fuente de la copia `%s'\n"
+
+#: ldmain.c:532
+msgid "%X%P: unable to open for destination of copy `%s'\n"
+msgstr "%X%P: no se puede abrir para el destino de la copia `%s'\n"
+
+#: ldmain.c:539
+msgid "%P: Error writing file `%s'\n"
+msgstr "%P: Error al escribir el fichero `%s'\n"
+
+#: ldmain.c:544 pe-dll.c:1729
+#, c-format
+msgid "%P: Error closing file `%s'\n"
+msgstr "%P: Error al cerrar el fichero `%s'\n"
+
+#: ldmain.c:560
+#, c-format
+msgid "%s: total time in link: %ld.%06ld\n"
+msgstr "%s: tiempo total de enlazado: %ld.%06ld\n"
+
+#: ldmain.c:563
+#, c-format
+msgid "%s: data size %ld\n"
+msgstr "%s: tamaño de los datos %ld\n"
+
+#: ldmain.c:646
+msgid "%P%F: missing argument to -m\n"
+msgstr "%P%F: falta el argumento para -m\n"
+
+#: ldmain.c:694 ldmain.c:714 ldmain.c:746 plugin.c:772
+msgid "%P%F: bfd_hash_table_init failed: %E\n"
+msgstr "%P%F: falló bfd_hash_table_init: %E\n"
+
+#: ldmain.c:698 ldmain.c:718
+msgid "%P%F: bfd_hash_lookup failed: %E\n"
+msgstr "%P%F: falló bfd_hash_lookup: %E\n"
+
+#: ldmain.c:732
+msgid "%X%P: error: duplicate retain-symbols-file\n"
+msgstr "%X%P: error: fichero de símbolos a retener duplicado\n"
+
+#: ldmain.c:776
+msgid "%P%F: bfd_hash_lookup for insertion failed: %E\n"
+msgstr "%P%F: falló bfd_hash_lookup para la inserción: %E\n"
+
+#: ldmain.c:781
+msgid "%P: `-retain-symbols-file' overrides `-s' and `-S'\n"
+msgstr "%P `-retain-symbols-file' se impone a `-s' y `-S'\n"
+
+#: ldmain.c:895
+#, c-format
+msgid ""
+"Archive member included because of file (symbol)\n"
+"\n"
+msgstr ""
+"Se incluyó el miembro del archivo debido al fichero (símbolo)\n"
+"\n"
+
+#: ldmain.c:975
+msgid "%X%C: multiple definition of `%T'\n"
+msgstr "%X%C: definiciones múltiples de `%T'\n"
+
+#: ldmain.c:978
+msgid "%D: first defined here\n"
+msgstr "%D: primero se definió aquí\n"
+
+#: ldmain.c:982
+msgid "%P: Disabling relaxation: it will not work with multiple definitions\n"
+msgstr "%P: Se desactiva la relajación: no funcionará con definiciones múltiples\n"
+
+# FIXME: Revisar en el código fuente si `common' se refiere a una orden o
+# se puede sustituir por `común'. cfuga
+#: ldmain.c:1012
+msgid "%B: warning: definition of `%T' overriding common\n"
+msgstr "%B: aviso: la definición de `%T' se impone a common\n"
+
+#: ldmain.c:1015
+msgid "%B: warning: common is here\n"
+msgstr "%B: aviso: common está aquí\n"
+
+#: ldmain.c:1022
+msgid "%B: warning: common of `%T' overridden by definition\n"
+msgstr "%B: aviso: el common de `%T' se sobrepasa por definición\n"
+
+#: ldmain.c:1025
+msgid "%B: warning: defined here\n"
+msgstr "%B: aviso: se definió aquí\n"
+
+#: ldmain.c:1032
+msgid "%B: warning: common of `%T' overridden by larger common\n"
+msgstr "%B: aviso: el common de `%T' se sobrepasa con un common más grande\n"
+
+#: ldmain.c:1035
+msgid "%B: warning: larger common is here\n"
+msgstr "%B: aviso: el common más grande está aquí\n"
+
+#: ldmain.c:1039
+msgid "%B: warning: common of `%T' overriding smaller common\n"
+msgstr "%B: aviso: el common de `%T' se sobrepasa con un common más pequeño\n"
+
+#: ldmain.c:1042
+msgid "%B: warning: smaller common is here\n"
+msgstr "%B: aviso: el common más pequeño está aquí\n"
+
+#: ldmain.c:1046
+msgid "%B: warning: multiple common of `%T'\n"
+msgstr "%B: aviso: common múltiple de `%T'\n"
+
+#: ldmain.c:1048
+msgid "%B: warning: previous common is here\n"
+msgstr "%B: aviso: el common previo está aquí\n"
+
+#: ldmain.c:1068 ldmain.c:1106
+msgid "%P: warning: global constructor %s used\n"
+msgstr "%P: aviso: se usó el constructor global %s\n"
+
+#: ldmain.c:1116
+msgid "%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"
+msgstr "%P%F: error del frente trasero de BFD: no se admite BFD_RELOC_CTOR\n"
+
+#. We found a reloc for the symbol we are looking for.
+#: ldmain.c:1170 ldmain.c:1172 ldmain.c:1174 ldmain.c:1192 ldmain.c:1237
+msgid "warning: "
+msgstr "aviso: "
+
+#: ldmain.c:1273
+msgid "%F%P: bfd_hash_table_init failed: %E\n"
+msgstr "%F%P: falló bfd_hash_table_init: %E\n"
+
+#: ldmain.c:1280
+msgid "%F%P: bfd_hash_lookup failed: %E\n"
+msgstr "%F%P: falló bfd_hash_lookup: %E\n"
+
+#: ldmain.c:1301
+msgid "%X%C: undefined reference to `%T'\n"
+msgstr "%X%C: referencia a `%T' sin definir\n"
+
+#: ldmain.c:1304
+msgid "%C: warning: undefined reference to `%T'\n"
+msgstr "%C: aviso: referencia a `%T' sin definir\n"
+
+#: ldmain.c:1310
+msgid "%X%D: more undefined references to `%T' follow\n"
+msgstr "%X%D: más referencias a `%T' sin definir a continuación\n"
+
+#: ldmain.c:1313
+msgid "%D: warning: more undefined references to `%T' follow\n"
+msgstr "%D: aviso: más referencias a `%T' sin definir a continuación\n"
+
+#: ldmain.c:1324
+msgid "%X%B: undefined reference to `%T'\n"
+msgstr "%X%B: referencia a `%T' sin definir\n"
+
+#: ldmain.c:1327
+msgid "%B: warning: undefined reference to `%T'\n"
+msgstr "%B: aviso: referencia a `%T' sin definir\n"
+
+#: ldmain.c:1333
+msgid "%X%B: more undefined references to `%T' follow\n"
+msgstr "%X%B: más referencias a `%T' sin definir a continuación\n"
+
+#: ldmain.c:1336
+msgid "%B: warning: more undefined references to `%T' follow\n"
+msgstr "%B: aviso: más referencias a `%T' sin definir a continuación\n"
+
+#: ldmain.c:1375
+msgid " additional relocation overflows omitted from the output\n"
+msgstr " se omitieron desbordamientos de reubicación adicionales de la salida\n"
+
+#: ldmain.c:1388
+msgid " relocation truncated to fit: %s against undefined symbol `%T'"
+msgstr " reubicación truncada para ajustar: %s contra el símbolo `%T' sin definir"
+
+#: ldmain.c:1393
+msgid " relocation truncated to fit: %s against symbol `%T' defined in %A section in %B"
+msgstr " reubicación truncada para ajustar: %s contra el símbolo `%T' definido en la sección %A en %B"
+
+#: ldmain.c:1405
+msgid " relocation truncated to fit: %s against `%T'"
+msgstr " reubicación truncada para ajustar: %s contra `%T'"
+
+#: ldmain.c:1422
+#, c-format
+msgid "%X%C: dangerous relocation: %s\n"
+msgstr "%X%C: reubicación peligrosa: %s\n"
+
+#: ldmain.c:1437
+msgid "%X%C: reloc refers to symbol `%T' which is not being output\n"
+msgstr "%X%C: la reubicación se refiere al símbolo `%T' el cual no se muestra\n"
+
+#: ldmisc.c:149
+#, c-format
+msgid "no symbol"
+msgstr "no hay símbolo"
+
+#: ldmisc.c:246
+#, c-format
+msgid "built in linker script:%u"
+msgstr "guión interno del enlazador:%u"
+
+#: ldmisc.c:324
+msgid "%B: In function `%T':\n"
+msgstr "%B: En la función `%T':\n"
+
+#: ldmisc.c:451
+msgid "%F%P: internal error %s %d\n"
+msgstr "%F%P: error interno %s %d\n"
+
+#: ldmisc.c:500
+msgid "%P: internal error: aborting at %s line %d in %s\n"
+msgstr "%P: error interno: se aborta en %s línea %d en %s\n"
+
+#: ldmisc.c:503
+msgid "%P: internal error: aborting at %s line %d\n"
+msgstr "%P: error interno: se aborta en %s línea %d\n"
+
+#: ldmisc.c:505
+msgid "%P%F: please report this bug\n"
+msgstr "%P%F: por favor reporte este bicho\n"
+
+#. Output for noisy == 2 is intended to follow the GNU standards.
+#: ldver.c:39
+#, c-format
+msgid "GNU ld %s\n"
+msgstr "GNU ld %s\n"
+
+#: ldver.c:43
+#, c-format
+msgid "Copyright 2010 Free Software Foundation, Inc.\n"
+msgstr "Copyright 2010 Free Software Foundation, Inc.\n"
+
+#: ldver.c:44
+#, c-format
+msgid ""
+"This program is free software; you may redistribute it under the terms of\n"
+"the GNU General Public License version 3 or (at your option) a later version.\n"
+"This program has absolutely no warranty.\n"
+msgstr ""
+"Este programa es software libre; se puede redistribuir bajo los términos de\n"
+"la Licencia Pública General de GNU versión 3 o (a su elección) una versión\n"
+"posterior.\n"
+"Este programa no tiene absolutamente ninguna garantía.\n"
+
+#: ldver.c:54
+#, c-format
+msgid " Supported emulations:\n"
+msgstr " Emulaciones admitidas:\n"
+
+#: ldwrite.c:62 ldwrite.c:207
+msgid "%P%F: bfd_new_link_order failed\n"
+msgstr "%P%F: falló bfd_new_link_order\n"
+
+#: ldwrite.c:365
+msgid "%F%P: cannot create split section name for %s\n"
+msgstr "%F%P: no se puede crear el nombre de sección dividida para %s\n"
+
+#: ldwrite.c:377
+msgid "%F%P: clone section failed: %E\n"
+msgstr "%F%P: falló la clonación de la sección: %E\n"
+
+#: ldwrite.c:418
+#, c-format
+msgid "%8x something else\n"
+msgstr "%8x algo más\n"
+
+#: ldwrite.c:588
+msgid "%F%P: final link failed: %E\n"
+msgstr "%F%P: falló el enlace final: %E\n"
+
+#: lexsup.c:219 lexsup.c:368
+msgid "KEYWORD"
+msgstr "PALABRA CLAVE"
+
+#: lexsup.c:219
+msgid "Shared library control for HP/UX compatibility"
+msgstr "Control de biblioteca compartida para compatibilidad con HP/UX"
+
+#: lexsup.c:222
+msgid "ARCH"
+msgstr "ARQ"
+
+#: lexsup.c:222
+msgid "Set architecture"
+msgstr "Establece la arquitectura"
+
+#: lexsup.c:224 lexsup.c:487
+msgid "TARGET"
+msgstr "OBJETIVO"
+
+#: lexsup.c:224
+msgid "Specify target for following input files"
+msgstr "Especifica el objetivo para los siguientes ficheros de entrada"
+
+#: lexsup.c:227 lexsup.c:278 lexsup.c:296 lexsup.c:309 lexsup.c:311
+#: lexsup.c:441 lexsup.c:501 lexsup.c:563 lexsup.c:576
+msgid "FILE"
+msgstr "FICHERO"
+
+#: lexsup.c:227
+msgid "Read MRI format linker script"
+msgstr "Lee el guión del enlazador de formato MRI"
+
+#: lexsup.c:229
+msgid "Force common symbols to be defined"
+msgstr "Fuerza que se definan los símbolos comunes"
+
+#: lexsup.c:233 lexsup.c:545 lexsup.c:547 lexsup.c:549 lexsup.c:551
+msgid "ADDRESS"
+msgstr "DIRECCIÓN"
+
+#: lexsup.c:233
+msgid "Set start address"
+msgstr "Establece la dirección de inicio"
+
+#: lexsup.c:235
+msgid "Export all dynamic symbols"
+msgstr "Exporta todos los símbolos dinámicos"
+
+#: lexsup.c:237
+msgid "Undo the effect of --export-dynamic"
+msgstr "Deshace el efecto de --export-dynamic"
+
+#: lexsup.c:239
+msgid "Link big-endian objects"
+msgstr "Enlaza objetos big-endian"
+
+#: lexsup.c:241
+msgid "Link little-endian objects"
+msgstr "Enlaza objetos little-endian"
+
+#: lexsup.c:243 lexsup.c:246
+msgid "SHLIB"
+msgstr "BIBCOMP"
+
+#: lexsup.c:243
+msgid "Auxiliary filter for shared object symbol table"
+msgstr "Filtro auxiliar para la tabla de símbolos de objetos compartidos"
+
+#: lexsup.c:246
+msgid "Filter for shared object symbol table"
+msgstr "Filtro para la tabla de símbolos de objetos compartidos"
+
+#: lexsup.c:249
+msgid "Ignored"
+msgstr "Se descarta"
+
+#: lexsup.c:251
+msgid "SIZE"
+msgstr "TAMAÑO"
+
+#: lexsup.c:251
+msgid "Small data size (if no size, same as --shared)"
+msgstr "Tamaño de los datos small (si no se especifica, es el mismo que --shared)"
+
+#: lexsup.c:254
+msgid "FILENAME"
+msgstr "FICHERO"
+
+#: lexsup.c:254
+msgid "Set internal name of shared library"
+msgstr "Establece el nombre interno de la biblioteca compartida"
+
+#: lexsup.c:256
+msgid "PROGRAM"
+msgstr "PROGRAMA"
+
+#: lexsup.c:256
+msgid "Set PROGRAM as the dynamic linker to use"
+msgstr "Establece el PROGRAMA como el enlazador dinámico a utilizar"
+
+#: lexsup.c:259
+msgid "LIBNAME"
+msgstr "NOMBREBIB"
+
+#: lexsup.c:259
+msgid "Search for library LIBNAME"
+msgstr "Busca la biblioteca NOMBREBIB"
+
+#: lexsup.c:261
+msgid "DIRECTORY"
+msgstr "DIRECTORIO"
+
+#: lexsup.c:261
+msgid "Add DIRECTORY to library search path"
+msgstr "Agrega el DIRECTORIO a la ruta de búsqueda de bibliotecas"
+
+#: lexsup.c:264
+msgid "Override the default sysroot location"
+msgstr "Sobreescribe la ubicación de sysroot por defecto"
+
+#: lexsup.c:266
+msgid "EMULATION"
+msgstr "EMULACIÓN"
+
+#: lexsup.c:266
+msgid "Set emulation"
+msgstr "Establece la emulación"
+
+#: lexsup.c:268
+msgid "Print map file on standard output"
+msgstr "Muestra el fichero mapa en la salida estándar"
+
+#: lexsup.c:270
+msgid "Do not page align data"
+msgstr "No pagina los datos alineados"
+
+#: lexsup.c:272
+msgid "Do not page align data, do not make text readonly"
+msgstr "No pagina los datos alineados, no hace el texto de sólo lectura"
+
+#: lexsup.c:275
+msgid "Page align data, make text readonly"
+msgstr "Pagina los datos alineados, hace el texto de sólo lectura"
+
+#: lexsup.c:278
+msgid "Set output file name"
+msgstr "Establece el nombre del fichero de salida"
+
+#: lexsup.c:280
+msgid "Optimize output file"
+msgstr "Optimiza la salida del fichero"
+
+#: lexsup.c:283
+msgid "PLUGIN"
+msgstr "PLUGIN"
+
+#: lexsup.c:283
+msgid "Load named plugin"
+msgstr "Carga el plugin nombrado"
+
+#: lexsup.c:285
+msgid "ARG"
+msgstr "ARG"
+
+#: lexsup.c:285
+msgid "Send arg to last-loaded plugin"
+msgstr "Envía el argumento al último plugin cargado"
+
+#: lexsup.c:288
+msgid "Ignored for SVR4 compatibility"
+msgstr "Se descarta por compatibilidad con SVR4"
+
+#: lexsup.c:292
+msgid "Generate relocatable output"
+msgstr "Genera salida reubicable"
+
+#: lexsup.c:296
+msgid "Just link symbols (if directory, same as --rpath)"
+msgstr "Sólo enlaza símbolos (si es un directorio, es igual que --rpath)"
+
+#: lexsup.c:299
+msgid "Strip all symbols"
+msgstr "Descarta todos los símbolos"
+
+#: lexsup.c:301
+msgid "Strip debugging symbols"
+msgstr "Descarta los símbolos de depuración"
+
+#: lexsup.c:303
+msgid "Strip symbols in discarded sections"
+msgstr "Descarta símbolos en las secciones descartadas"
+
+#: lexsup.c:305
+msgid "Do not strip symbols in discarded sections"
+msgstr "No descarta símbolos en las secciones descartadas"
+
+#: lexsup.c:307
+msgid "Trace file opens"
+msgstr "Rastrea la apertura de ficheros"
+
+#: lexsup.c:309
+msgid "Read linker script"
+msgstr "Lee el guión del enlazador"
+
+#: lexsup.c:311
+msgid "Read default linker script"
+msgstr "Lee el guión del enlazador por defecto"
+
+#: lexsup.c:315 lexsup.c:333 lexsup.c:418 lexsup.c:439 lexsup.c:538
+#: lexsup.c:566 lexsup.c:605
+msgid "SYMBOL"
+msgstr "SÍMBOLO"
+
+#: lexsup.c:315
+msgid "Start with undefined reference to SYMBOL"
+msgstr "Inicia con una referencia sin definir hacia el SÍMBOLO"
+
+#: lexsup.c:318
+msgid "[=SECTION]"
+msgstr "[=SECCIÓN]"
+
+#: lexsup.c:319
+msgid "Don't merge input [SECTION | orphan] sections"
+msgstr "No mezcla secciones de entrada [SECCIÓN | huérfanas]"
+
+#: lexsup.c:321
+msgid "Build global constructor/destructor tables"
+msgstr "Construye tablas globales de constructores/destructores"
+
+#: lexsup.c:323
+msgid "Print version information"
+msgstr "Muestra la información de la versión"
+
+#: lexsup.c:325
+msgid "Print version and emulation information"
+msgstr "Muestra la información de la versión y de la emulación"
+
+#: lexsup.c:327
+msgid "Discard all local symbols"
+msgstr "Descarta todos los símbolos locales"
+
+#: lexsup.c:329
+msgid "Discard temporary local symbols (default)"
+msgstr "Descarta los símbolos locales temporales (por defecto)"
+
+#: lexsup.c:331
+msgid "Don't discard any local symbols"
+msgstr "No descarta ningún símbolo local"
+
+#: lexsup.c:333
+msgid "Trace mentions of SYMBOL"
+msgstr "Rastrea las menciones del SÍMBOLO"
+
+#: lexsup.c:335 lexsup.c:503 lexsup.c:505
+msgid "PATH"
+msgstr "RUTA"
+
+#: lexsup.c:335
+msgid "Default search path for Solaris compatibility"
+msgstr "Ruta de búsqueda por defecto para compatibilidad con Solaris"
+
+#: lexsup.c:338
+msgid "Start a group"
+msgstr "Inicia un grupo"
+
+#: lexsup.c:340
+msgid "End a group"
+msgstr "Termina un grupo"
+
+#: lexsup.c:344
+msgid "Accept input files whose architecture cannot be determined"
+msgstr "Acepta ficheros de entrada cuya arquitectura no se pueda determinar"
+
+#: lexsup.c:348
+msgid "Reject input files whose architecture is unknown"
+msgstr "Rechaza ficheros de entrada cuya arquitectura es desconocida"
+
+#: lexsup.c:361
+msgid "Only set DT_NEEDED for following dynamic libs if used"
+msgstr "Sólo establece DT_NEEDED para las siguientes bibliotecas dinámicas si se usan"
+
+#: lexsup.c:364
+msgid ""
+"Always set DT_NEEDED for dynamic libraries mentioned on\n"
+" the command line"
+msgstr ""
+"Siempre establece DT_NEEDED para las bibliotecas dinámicas\n"
+" mencionadas en la línea de órdenes"
+
+#: lexsup.c:368
+msgid "Ignored for SunOS compatibility"
+msgstr "Se descarta por compatibilidad con SunOS"
+
+#: lexsup.c:370
+msgid "Link against shared libraries"
+msgstr "Enlaza contra bibliotecas compartidas"
+
+#: lexsup.c:376
+msgid "Do not link against shared libraries"
+msgstr "No enlaza contra bibliotecas compartidas"
+
+#: lexsup.c:384
+msgid "Bind global references locally"
+msgstr "Asocia localmente las referencias globlales"
+
+#: lexsup.c:386
+msgid "Bind global function references locally"
+msgstr "Asocia localmente las referencias a función globales"
+
+#: lexsup.c:388
+msgid "Check section addresses for overlaps (default)"
+msgstr "Revisa las direcciones de las secciones por traslapes (por defecto)"
+
+#: lexsup.c:391
+msgid "Do not check section addresses for overlaps"
+msgstr "No revisa las direcciones de las secciones por traslapes"
+
+#: lexsup.c:395
+msgid "Copy DT_NEEDED links mentioned inside DSOs that follow"
+msgstr "Copia los enlaces DT_NEEDED mencionados dentro de los DSOs a continuación"
+
+#: lexsup.c:399
+msgid "Do not copy DT_NEEDED links mentioned inside DSOs that follow"
+msgstr "No copia los enlaces DT_NEEDED mencionados dentro de los DSOs a continuación"
+
+#: lexsup.c:403
+msgid "Output cross reference table"
+msgstr "Muestra la tabla de referencias cruzadas"
+
+#: lexsup.c:405
+msgid "SYMBOL=EXPRESSION"
+msgstr "SÍMBOLO=EXPRESIÓN"
+
+#: lexsup.c:405
+msgid "Define a symbol"
+msgstr "Define un símbolo"
+
+#: lexsup.c:407
+msgid "[=STYLE]"
+msgstr "[=ESTILO]"
+
+#: lexsup.c:407
+msgid "Demangle symbol names [using STYLE]"
+msgstr "Desenreda los nombres de los símbolos [utilizando el ESTILO]"
+
+# No me convence mucho la traducción de `embedded' por imbuído. cfuga
+#: lexsup.c:410
+msgid "Generate embedded relocs"
+msgstr "Genera reubicaciones imbuídas"
+
+#: lexsup.c:412
+msgid "Treat warnings as errors"
+msgstr "Trata los avisos como errores"
+
+#: lexsup.c:415
+msgid "Do not treat warnings as errors (default)"
+msgstr "No trata los avisos como errores (por defecto)"
+
+#: lexsup.c:418
+msgid "Call SYMBOL at unload-time"
+msgstr "Llama al SÍMBOLO al momento de descargar"
+
+#: lexsup.c:420
+msgid "Force generation of file with .exe suffix"
+msgstr "Fuerza la generación del fichero con sufijo .exe"
+
+#: lexsup.c:422
+msgid "Remove unused sections (on some targets)"
+msgstr "Elimina las secciones sin uso (en algunos objetivos)"
+
+#: lexsup.c:425
+msgid "Don't remove unused sections (default)"
+msgstr "No elimina las secciones sin uso (por defecto)"
+
+#: lexsup.c:428
+msgid "List removed unused sections on stderr"
+msgstr "Muestra las secciones sin uso eliminadas en la salida de error estándar"
+
+#: lexsup.c:431
+msgid "Do not list removed unused sections"
+msgstr "No muestra las secciones sin uso eliminadas"
+
+#: lexsup.c:434
+msgid "Set default hash table size close to <NUMBER>"
+msgstr "Establece el tamaño de de la tabla de dispersión cercano al <NÚMERO>"
+
+#: lexsup.c:437
+msgid "Print option help"
+msgstr "Muestra la ayuda de opciones"
+
+#: lexsup.c:439
+msgid "Call SYMBOL at load-time"
+msgstr "Llama al SÍMBOLO al momento de cargar"
+
+#: lexsup.c:441
+msgid "Write a map file"
+msgstr "Escribe un fichero mapa"
+
+#: lexsup.c:443
+msgid "Do not define Common storage"
+msgstr "No define almacenamiento Common"
+
+#: lexsup.c:445
+msgid "Do not demangle symbol names"
+msgstr "No desenreda los nombres de los símbolos"
+
+#: lexsup.c:447
+msgid "Use less memory and more disk I/O"
+msgstr "Usa menos memoria y más E/S de disco"
+
+#: lexsup.c:449
+msgid "Do not allow unresolved references in object files"
+msgstr "No permite referencias sin resolver en ficheros objeto"
+
+#: lexsup.c:452
+msgid "Allow unresolved references in shared libaries"
+msgstr "Permite referencias sin resolver en bibliotecas compartidas"
+
+#: lexsup.c:456
+msgid "Do not allow unresolved references in shared libs"
+msgstr "No permite referencias sin resolver en bibliotecas compartidas"
+
+#: lexsup.c:460
+msgid "Allow multiple definitions"
+msgstr "Permite definiciones múltiples"
+
+#: lexsup.c:462
+msgid "Disallow undefined version"
+msgstr "No permite versiones sin definir"
+
+#: lexsup.c:464
+msgid "Create default symbol version"
+msgstr "Crea la versión de símbolo por defecto"
+
+#: lexsup.c:467
+msgid "Create default symbol version for imported symbols"
+msgstr "Crea la versión de símbolo por defecto para símbolos importados"
+
+#: lexsup.c:470
+msgid "Don't warn about mismatched input files"
+msgstr "No avisa sobre ficheros de entrada sin coincidencia"
+
+#: lexsup.c:473
+msgid "Don't warn on finding an incompatible library"
+msgstr "No avisa al encontrar una biblioteca incompatible"
+
+#: lexsup.c:476
+msgid "Turn off --whole-archive"
+msgstr "Apaga --whole-archive"
+
+#: lexsup.c:478
+msgid "Create an output file even if errors occur"
+msgstr "Crea un fichero de salida aún si ocurren errores"
+
+#: lexsup.c:483
+msgid ""
+"Only use library directories specified on\n"
+" the command line"
+msgstr ""
+"Utiliza solamente los directorios de bibliotecas\n"
+" especificados en la línea de órdenes"
+
+#: lexsup.c:487
+msgid "Specify target of output file"
+msgstr "Especifica el objetivo del fichero de salida"
+
+#: lexsup.c:490
+msgid "Ignored for Linux compatibility"
+msgstr "Se descarta por compatibilidad con Linux"
+
+#: lexsup.c:493
+msgid "Reduce memory overheads, possibly taking much longer"
+msgstr "Reduce las saturaciones de memoria, tal vez tomando más tiempo"
+
+#: lexsup.c:496
+msgid "Reduce code size by using target specific optimizations"
+msgstr "Reduce el tamaño del código usando optimizaciones específicas del objetivo"
+
+#: lexsup.c:498
+msgid "Do not use relaxation techniques to reduce code size"
+msgstr "No utiliza técnicas de relajación para reducir el tamaño del código"
+
+#: lexsup.c:501
+msgid "Keep only symbols listed in FILE"
+msgstr "Conserva solamente los símbolos enlistados en el FICHERO"
+
+#: lexsup.c:503
+msgid "Set runtime shared library search path"
+msgstr "Establece la ruta de búsqueda de bibliotecas compartidas en tiempo de ejecución"
+
+#: lexsup.c:505
+msgid "Set link time shared library search path"
+msgstr "Establece la ruta de búsqueda de bibliotecas compartidas en tiempo de enlace"
+
+#: lexsup.c:508
+msgid "Create a shared library"
+msgstr "Crea una biblioteca compartida"
+
+#: lexsup.c:512
+msgid "Create a position independent executable"
+msgstr "Crea un ejecutable independiente de posición"
+
+#: lexsup.c:516
+msgid "[=ascending|descending]"
+msgstr "[=ascending|descending]"
+
+#: lexsup.c:517
+msgid "Sort common symbols by alignment [in specified order]"
+msgstr "Ordena los símbolos comunes por alineación [en orden específico]"
+
+#: lexsup.c:522
+msgid "name|alignment"
+msgstr "nombre|alineación"
+
+#: lexsup.c:523
+msgid "Sort sections by name or maximum alignment"
+msgstr "Ordena secciones por nombre o alineación máxima"
+
+#: lexsup.c:525
+msgid "COUNT"
+msgstr "CUENTA"
+
+#: lexsup.c:525
+msgid "How many tags to reserve in .dynamic section"
+msgstr "Cúantas marcas reserva en la sección .dynamic"
+
+#: lexsup.c:528
+msgid "[=SIZE]"
+msgstr "[=TAMAÑO]"
+
+#: lexsup.c:528
+msgid "Split output sections every SIZE octets"
+msgstr "Divide las secciones de salida cada TAMAÑO octetos"
+
+#: lexsup.c:531
+msgid "[=COUNT]"
+msgstr "[=CUENTA]"
+
+#: lexsup.c:531
+msgid "Split output sections every COUNT relocs"
+msgstr "Divide las secciones de salida cada CUENTA reubicaciones"
+
+#: lexsup.c:534
+msgid "Print memory usage statistics"
+msgstr "Muestra las estadísticas de uso de memoria"
+
+#: lexsup.c:536
+msgid "Display target specific options"
+msgstr "Muestra las opciones específicas del objetivo"
+
+#: lexsup.c:538
+msgid "Do task level linking"
+msgstr "Enlaza a nivel de tarea"
+
+#: lexsup.c:540
+msgid "Use same format as native linker"
+msgstr "Usa el mismo formato que el enlazador nativo"
+
+#: lexsup.c:542
+msgid "SECTION=ADDRESS"
+msgstr "SECCIÓN=DIRECCIÓN"
+
+#: lexsup.c:542
+msgid "Set address of named section"
+msgstr "Establece la dirección de la sección nombrada"
+
+#: lexsup.c:545
+msgid "Set address of .bss section"
+msgstr "Establece la dirección de la sección .bss"
+
+#: lexsup.c:547
+msgid "Set address of .data section"
+msgstr "Establece la dirección de la sección .data"
+
+#: lexsup.c:549
+msgid "Set address of .text section"
+msgstr "Establece la dirección de la sección .text"
+
+#: lexsup.c:551
+msgid "Set address of text segment"
+msgstr "Establece la dirección del segmento de texto"
+
+#: lexsup.c:554
+msgid ""
+"How to handle unresolved symbols. <method> is:\n"
+" ignore-all, report-all, ignore-in-object-files,\n"
+" ignore-in-shared-libs"
+msgstr ""
+"Cómo manejar símbolos sin resolver. <método> es:\n"
+" ignore-all, report-all, ignore-in-object-files,\n"
+" ignore-in-shared-libs"
+
+#: lexsup.c:559
+msgid "Output lots of information during link"
+msgstr "Muestra mucha información durante el enlace"
+
+#: lexsup.c:563
+msgid "Read version information script"
+msgstr "Lee la información de la versión del guión"
+
+#: lexsup.c:566
+msgid ""
+"Take export symbols list from .exports, using\n"
+" SYMBOL as the version."
+msgstr ""
+"Toma la lista de exportación de símbolos de .exports, usando\n"
+" el SÍMBOLO como la versión."
+
+#: lexsup.c:570
+msgid "Add data symbols to dynamic list"
+msgstr "Agrega símbolos de datos a la lista dinámica"
+
+#: lexsup.c:572
+msgid "Use C++ operator new/delete dynamic list"
+msgstr "Usa la lista dinámica de los operadores de C++ new/delete"
+
+#: lexsup.c:574
+msgid "Use C++ typeinfo dynamic list"
+msgstr "Usa la lista dinámica de tipo de dato de C++"
+
+#: lexsup.c:576
+msgid "Read dynamic list"
+msgstr "Lee la lista dinámica"
+
+#: lexsup.c:578
+msgid "Warn about duplicate common symbols"
+msgstr "Avisa sobre símbolos comunes duplicados"
+
+#: lexsup.c:580
+msgid "Warn if global constructors/destructors are seen"
+msgstr "Avisa si se ven constructores/destructores globales"
+
+#: lexsup.c:583
+msgid "Warn if the multiple GP values are used"
+msgstr "Avisa si se usan valores múltiples de GP"
+
+#: lexsup.c:585
+msgid "Warn only once per undefined symbol"
+msgstr "Avisa sólo una vez por cada símbolo sin definir"
+
+#: lexsup.c:587
+msgid "Warn if start of section changes due to alignment"
+msgstr "Avisa si el inicio de la sección cambia debido a la alineación"
+
+#: lexsup.c:590
+msgid "Warn if shared object has DT_TEXTREL"
+msgstr "Avisa si el objeto compartido tiene DT_TEXTREL"
+
+#: lexsup.c:593
+msgid "Warn if an object has alternate ELF machine code"
+msgstr "Avisa si el objeto tiene código máquina ELF alternativo"
+
+#: lexsup.c:597
+msgid "Report unresolved symbols as warnings"
+msgstr "Reporta símbolos sin resolver como avisos"
+
+#: lexsup.c:600
+msgid "Report unresolved symbols as errors"
+msgstr "Reporta símbolos sin resolver como errores"
+
+#: lexsup.c:602
+msgid "Include all objects from following archives"
+msgstr "Incluye todos los objetos de los siguientes ficheros"
+
+#: lexsup.c:605
+msgid "Use wrapper functions for SYMBOL"
+msgstr "Usa funciones de envoltura para el SÍMBOLO"
+
+#: lexsup.c:754
+msgid "%P: unrecognized option '%s'\n"
+msgstr "%P: no se reconoce la opción `%s'\n"
+
+#: lexsup.c:758
+msgid "%P%F: use the --help option for usage information\n"
+msgstr "%P%F: use la opción --help para información de modo de empleo\n"
+
+#: lexsup.c:776
+msgid "%P%F: unrecognized -a option `%s'\n"
+msgstr "%P%F: no se reconoce la opción -a `%s'\n"
+
+#: lexsup.c:789
+msgid "%P%F: unrecognized -assert option `%s'\n"
+msgstr "%P%F: no se reconoce la opción -assert `%s'\n"
+
+#: lexsup.c:832
+msgid "%F%P: unknown demangling style `%s'"
+msgstr "%F%P: estilo de desenredo `%s' desconocido"
+
+#: lexsup.c:898
+msgid "%P%F: invalid number `%s'\n"
+msgstr "%P%F: número `%s' inválido\n"
+
+#: lexsup.c:996
+msgid "%P%F: bad --unresolved-symbols option: %s\n"
+msgstr "%P%F: opción --unresolved-symbols errónea: %s\n"
+
+#: lexsup.c:1059
+msgid "%P%F: bad -plugin option\n"
+msgstr "%P%F: opción -plugin errónea\n"
+
+#: lexsup.c:1063
+msgid "%P%F: bad -plugin-opt option\n"
+msgstr "%P%F: opción -plugin-opt errónea\n"
+
+#. This can happen if the user put "-rpath,a" on the command
+#. line. (Or something similar. The comma is important).
+#. Getopt becomes confused and thinks that this is a -r option
+#. but it cannot parse the text after the -r so it refuses to
+#. increment the optind counter. Detect this case and issue
+#. an error message here. We cannot just make this a warning,
+#. increment optind, and continue because getopt is too confused
+#. and will seg-fault the next time around.
+#: lexsup.c:1080
+msgid "%P%F: bad -rpath option\n"
+msgstr "%P%F: opción -rpath errónea\n"
+
+#: lexsup.c:1194
+msgid "%P%F: -shared not supported\n"
+msgstr "%P%F: no se admite -shared\n"
+
+#: lexsup.c:1203
+msgid "%P%F: -pie not supported\n"
+msgstr "%P%F: no se admite -pie\n"
+
+#: lexsup.c:1211
+msgid "descending"
+msgstr "descendente"
+
+#: lexsup.c:1213
+msgid "ascending"
+msgstr "ascendente"
+
+#: lexsup.c:1216
+msgid "%P%F: invalid common section sorting option: %s\n"
+msgstr "%P%F: opción de ordenado de sección común inválida: %s\n"
+
+#: lexsup.c:1220
+msgid "name"
+msgstr "nombre"
+
+#: lexsup.c:1222
+msgid "alignment"
+msgstr "alineación"
+
+#: lexsup.c:1225
+msgid "%P%F: invalid section sorting option: %s\n"
+msgstr "%P%F: opción de ordenado de sección inválida: %s\n"
+
+#: lexsup.c:1259
+msgid "%P%F: invalid argument to option \"--section-start\"\n"
+msgstr "%P%F: argumento inválido para la opción \"--section-start\"\n"
+
+#: lexsup.c:1266
+msgid "%P%F: missing argument(s) to option \"--section-start\"\n"
+msgstr "%P%F: falta(n) argumento(s) para la opción \"--section-start\"\n"
+
+#: lexsup.c:1490
+msgid "%P%F: group ended before it began (--help for usage)\n"
+msgstr "%P%F: el grupo terminó antes de empezar (--help para modo de empleo)\n"
+
+#: lexsup.c:1518
+msgid "%P%X: --hash-size needs a numeric argument\n"
+msgstr "%P%X: --hash-size necesita un argumento numérico\n"
+
+#: lexsup.c:1547
+msgid "%P%F: %s: error loading plugin\n"
+msgstr "%P%F: %s: error al cargar el plugin\n"
+
+#: lexsup.c:1578 lexsup.c:1591
+msgid "%P%F: invalid hex number `%s'\n"
+msgstr "%P%F: número hexadecimal `%s' inválido\n"
+
+#: lexsup.c:1627
+#, c-format
+msgid "Usage: %s [options] file...\n"
+msgstr "Modo de empleo: %s [opciones] fichero...\n"
+
+#: lexsup.c:1629
+#, c-format
+msgid "Options:\n"
+msgstr "Opciones:\n"
+
+#: lexsup.c:1707
+#, c-format
+msgid " @FILE"
+msgstr " @FICHERO"
+
+#: lexsup.c:1710
+#, c-format
+msgid "Read options from FILE\n"
+msgstr "Lee opciones del FICHERO\n"
+
+#. Note: Various tools (such as libtool) depend upon the
+#. format of the listings below - do not change them.
+#: lexsup.c:1715
+#, c-format
+msgid "%s: supported targets:"
+msgstr "%s: objetivos admitidos:"
+
+#: lexsup.c:1723
+#, c-format
+msgid "%s: supported emulations: "
+msgstr "%s: emulaciones admitidas: "
+
+#: lexsup.c:1728
+#, c-format
+msgid "%s: emulation specific options:\n"
+msgstr "%s: opciones específicas de emulación:\n"
+
+#: lexsup.c:1733
+#, c-format
+msgid "Report bugs to %s\n"
+msgstr "Reporte bichos a %s\n"
+
+#: mri.c:292
+msgid "%P%F: unknown format type %s\n"
+msgstr "%P%F: tipo de formato %s desconocido\n"
+
+#: pe-dll.c:430
+#, c-format
+msgid "%XUnsupported PEI architecture: %s\n"
+msgstr "%XNo se admite la arquitectura PEI: %s\n"
+
+#: pe-dll.c:788
+#, c-format
+msgid "%XCannot export %s: invalid export name\n"
+msgstr "%XNo se puede exportar %s: nombre de exportación inválido\n"
+
+#: pe-dll.c:844
+#, c-format
+msgid "%XError, duplicate EXPORT with ordinals: %s (%d vs %d)\n"
+msgstr "%XError, EXPORT duplicado con ordinales: %s (%d vs %d)\n"
+
+#: pe-dll.c:851
+#, c-format
+msgid "Warning, duplicate EXPORT: %s\n"
+msgstr "Aviso, EXPORT duplicado: %s\n"
+
+#: pe-dll.c:938
+#, c-format
+msgid "%XCannot export %s: symbol not defined\n"
+msgstr "%XNo se puede exportar %s: símbolo sin definir\n"
+
+#: pe-dll.c:944
+#, c-format
+msgid "%XCannot export %s: symbol wrong type (%d vs %d)\n"
+msgstr "%XNo se puede exportar %s: tipo erróneo del símbolo (%d vs %d)\n"
+
+#: pe-dll.c:951
+#, c-format
+msgid "%XCannot export %s: symbol not found\n"
+msgstr "%XNo se puede exportar %s: no se encuentra el símbolo\n"
+
+#: pe-dll.c:1065
+#, c-format
+msgid "%XError, ordinal used twice: %d (%s vs %s)\n"
+msgstr "%XError, ordinal utilizado dos veces: %d (%s vs %s)\n"
+
+#: pe-dll.c:1446
+#, c-format
+msgid "%XError: %d-bit reloc in dll\n"
+msgstr "%XError: reubicación de %d-bit en la dll\n"
+
+#: pe-dll.c:1574
+#, c-format
+msgid "%s: Can't open output def file %s\n"
+msgstr "%s: No se puede abrir el fichero por defecto de salida %s\n"
+
+#: pe-dll.c:1725
+#, c-format
+msgid "; no contents available\n"
+msgstr "; no hay contenido disponible\n"
+
+#: pe-dll.c:2652
+msgid "%C: variable '%T' can't be auto-imported. Please read the documentation for ld's --enable-auto-import for details.\n"
+msgstr "%C: no se puede auto-importar la variable '%T'. Por favor lea la documentación para --enable-auto-import de ld para más detalles.\n"
+
+#: pe-dll.c:2682
+#, c-format
+msgid "%XCan't open .lib file: %s\n"
+msgstr "%XNo se puede abrir el fichero .lib: %s\n"
+
+#: pe-dll.c:2687
+#, c-format
+msgid "Creating library file: %s\n"
+msgstr "Se crea el fichero de biblioteca: %s\n"
+
+#: pe-dll.c:2716
+#, c-format
+msgid "%Xbfd_openr %s: %E\n"
+msgstr "%Xbfd_openr %s: %E\n"
+
+#: pe-dll.c:2728
+#, c-format
+msgid "%X%s(%s): can't find member in non-archive file"
+msgstr "%X%s(%s): no se puede encontrar el miembro en un fichero que no es archivo"
+
+#: pe-dll.c:2740
+#, c-format
+msgid "%X%s(%s): can't find member in archive"
+msgstr "%X%s(%s): no se puede encontrar el miembro en el archivo"
+
+#: pe-dll.c:3177
+#, c-format
+msgid "%XError: can't use long section names on this arch\n"
+msgstr "%XError: no se pueden usar nombres de sección largos en esta arquitectura\n"
+
+#: plugin.c:178 plugin.c:212
+msgid "<no plugin>"
+msgstr "<sin plugin>"
+
+#: plugin.c:308
+msgid "%P%F: %s: non-ELF symbol in ELF BFD!"
+msgstr "%P%F: %s: ¡Símbolo que no es ELF en el BFD ELF!"
+
+#: plugin.c:800
+msgid "%P%X: %s: hash table failure adding symbol %s"
+msgstr "%P%X: %s: falló la tabla de dispersión al agregar el símbolo %s"
+
+#: plugin.c:833
+msgid "%P%X: %s: can't find IR symbol '%s'"
+msgstr "%P%X: %s: no se puede encontrar el símbolo IR '%s'"
+
+#: plugin.c:836
+msgid "%P%x: %s: bad IR symbol type %d"
+msgstr "%P%x: %s: tipo de símbolo IR %d erróneo"
+
+#~ msgid "%F%P: %s (%s): No such file: %E\n"
+#~ msgstr "%F%P: %s (%s): No hay tal fichero: %E\n"
+
+#~ msgid "%F%P: %s: No such file: %E\n"
+#~ msgstr "%F%P: %s No hay tal fichero: %E\n"
+
+#~ msgid ""
+#~ "Set DT_NEEDED tags for DT_NEEDED entries in\n"
+#~ " following dynamic libs"
+#~ msgstr ""
+#~ "Establece marcas DT_NEEDED para entradas DT_NEEDED en\n"
+#~ " las siguientes bibliotecas dinámicas"
+
+#~ msgid ""
+#~ "Do not set DT_NEEDED tags for DT_NEEDED entries\n"
+#~ " in following dynamic libs"
+#~ msgstr ""
+#~ "No establece marcas DT_NEEDED para entradas DT_NEEDED en\n"
+#~ " las siguientes bibliotecas dinámicas"
+
+#~ msgid "Always set DT_NEEDED for following dynamic libs"
+#~ msgstr "Siempre establece DT_NEEDED para las siguientes bibliotecas dinámicas"
+
+#~ msgid "Relax branches on certain targets"
+#~ msgstr "Relaja ramificaciones en ciertos objetivos"
+
+#~ msgid "%P%F: may not nest groups (--help for usage)\n"
+#~ msgstr "%P%F: no se pueden anidar grupos (--help para modo de empleo)\n"
+
+#~ msgid "%P%F: --relax and -r may not be used together\n"
+#~ msgstr "%P%F: no se pueden usar juntos -relax y -r\n"
+
+#~ msgid " --support-old-code Support interworking with old code\n"
+#~ msgstr " --support-old-code Admite interoperar con código antiguo\n"
+
+#~ msgid "%B%F: could not read symbols; %E\n"
+#~ msgstr "%B%F: no se pueden leer símbolos; %E\n"
+
+#~ msgid "%F%S nonconstant expression for %s\n"
+#~ msgstr "%F%S expresión no constante para %s\n"
+
+#~ msgid "%B%F: could not read symbols\n"
+#~ msgstr "%B%F: no se pueden leer los símbolos\n"
+
+#~ msgid "%F%S non constant expression for %s\n"
+#~ msgstr "%F%S expresión no constante para %s\n"
+
+#~ msgid "%P%F: out of memory during initialization"
+#~ msgstr "%P%F: memoria agotada durante la inicialización"
+
+#~ msgid "%P%F: -static and -shared may not be used together\n"
+#~ msgstr "%P%F: no se pueden usar juntos -static y -shared\n"
+
+#~ msgid "%P%X: generated"
+#~ msgstr "%P%X: generado"
+
+#~ msgid "%F%P: %s uses undefined section %s\n"
+#~ msgstr "%F%P: %s usa la sección sin definir %s\n"
+
+#~ msgid "%F%P: %s forward reference of section %s\n"
+#~ msgstr "%F%P: %s es una referencia hacia adelante de la sección %s\n"
+
+#~ msgid "%F%P: cannot open %s for %s: %E\n"
+#~ msgstr "%F%P: no se puede abrir %s para %s: %E\n"
+
+#~ msgid "%F%P: cannot open %s: %E\n"
+#~ msgstr "%F%P: no se puede abrir %s: %E\n"
+
+#~ msgid "%P%F: unknown architecture: %s\n"
+#~ msgstr "%P%F: arquitectura desconocida: %s\n"
+
+#~ msgid "%P%F: target architecture respecified\n"
+#~ msgstr "%P%F: arquitectura destino reespecificada\n"
+
+#~ msgid "%P: %B: warning: ignoring duplicate `%s' section symbol `%s'\n"
+#~ msgstr "%P: %B: aviso: ignorando el símbolo duplicado `%s' de la sección `%s'\n"
+
+#~ msgid "%P: %B: warning: duplicate section `%s' has different size\n"
+#~ msgstr "%P: %B: aviso: la sección duplicada `%s' tiene tamaño diferente\n"
+
+#~ msgid "%P: no [COMMON] command, defaulting to .bss\n"
+#~ msgstr "%P: no hay una orden [COMMON], usando .bss por defecto\n"
+
+#~ msgid "%P%F: -r and --mpc860c0 may not be used together\n"
+#~ msgstr "%P%F: no se pueden usar juntos -r y --mpc860c0\n"
+
+#~ msgid "Allow no undefined symbols"
+#~ msgstr "No permitir símbolos sin definir"
+
+#~ msgid "Allow undefined symbols in shared objects (the default)"
+#~ msgstr "Permitir símbolos sin definir en objetos compartidos (por defecto)"
+
+#~ msgid "[=WORDS]"
+#~ msgstr "[=PALABRAS]"
+
+#~ msgid ""
+#~ "Modify problematic branches in last WORDS (1-10,\n"
+#~ "\t\t\t\tdefault 5) words of a page"
+#~ msgstr ""
+#~ "Modificar las ramificaciones problemáticas en las últimas PALABRAS (1-10,\n"
+#~ "\t\t\t5 por defecto) palabras de una página"
+
+#~ msgid "%P%F: invalid argument to option \"mpc860c0\"\n"
+#~ msgstr "%P%F: Argumento inválido para la opción \"mpc860c0\"\n"
+
+#~ msgid " create __imp_<SYMBOL> as well.\n"
+#~ msgstr " creando también __imp_<SÍMBOLO>.\n"
+
+#~ msgid " --dll-search-prefix=<string> When linking dynamically to a dll witout an\n"
+#~ msgstr " --dll-search-prefix=<cadena> Al enlazar dinámicamente con una dll sin una\n"
+
+#~ msgid " importlib, use <string><basename>.dll \n"
+#~ msgstr " biblioteca de importación, usar <cadena><nombrebase>.dll\n"
+
+#~ msgid "Archive member included"
+#~ msgstr "Se incluyó el fichero miembro"
+
+#~ msgid "Don't merge orphan sections with the same name"
+#~ msgstr "No mezclar secciones huérfanas con el mismo nombre"
diff --git a/binutils-2.21/ld/po/fi.gmo b/binutils-2.21/ld/po/fi.gmo
new file mode 100644
index 0000000..1d4f6d6
--- /dev/null
+++ b/binutils-2.21/ld/po/fi.gmo
Binary files differ
diff --git a/binutils-2.21/ld/po/fi.po b/binutils-2.21/ld/po/fi.po
new file mode 100644
index 0000000..6c28a38
--- /dev/null
+++ b/binutils-2.21/ld/po/fi.po
@@ -0,0 +1,2268 @@
+# Finnish messages for ld
+# Copyright © 2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the binutils package.
+# Jorma Karvonen <karvjorm@users.sf.net>, 2007-2009.
+# Jorma Karvonen <karvonen.jorma@gmail.com>, 2009-2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ld 2.20.90\n"
+"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
+"POT-Creation-Date: 2010-11-05 11:34+0100\n"
+"PO-Revision-Date: 2010-11-10 19:55+0200\n"
+"Last-Translator: Jorma Karvonen <karvonen.jorma@gmail.com>\n"
+"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.2\n"
+"X-Poedit-Language: Finnish\n"
+"X-Poedit-Country: FINLAND\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: emultempl/armcoff.em:73
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code Tue yhteistoimivuutta vanhan koodin kanssa\n"
+
+#: emultempl/armcoff.em:74
+#, c-format
+msgid " --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"
+msgstr " --thumb-entry=<sym> Aseta tulokohta Thumb-symboliksi <sym>\n"
+
+#: emultempl/armcoff.em:122
+#, c-format
+msgid "Errors encountered processing file %s"
+msgstr "Löydettiin virheitä käsiteltäessä tiedostoa %s"
+
+#: emultempl/armcoff.em:190 emultempl/pe.em:1812
+msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"
+msgstr "%P: varoitus: â€--thumb-entry %s†korvaa argumentin â€-e %sâ€\n"
+
+#: emultempl/armcoff.em:195 emultempl/pe.em:1817
+msgid "%P: warning: cannot find thumb start symbol %s\n"
+msgstr "%P: varoitus: thumb-aloitussymbolia â€%s†ei löydy\n"
+
+#: emultempl/pe.em:418
+#, c-format
+msgid " --base_file <basefile> Generate a base file for relocatable DLLs\n"
+msgstr " --base_file <kantatiedosto> Luo uudelleensijoitettavien DLL:ien kantatiedosto\n"
+
+#: emultempl/pe.em:419
+#, c-format
+msgid " --dll Set image base to the default for DLLs\n"
+msgstr " --dll Aseta vedoskanta DLL:ien oletukseksi\n"
+
+#: emultempl/pe.em:420
+#, c-format
+msgid " --file-alignment <size> Set file alignment\n"
+msgstr " --file-alignment <koko> Aseta tiedostotasaus\n"
+
+#: emultempl/pe.em:421
+#, c-format
+msgid " --heap <size> Set initial size of the heap\n"
+msgstr " --heap <koko> Aseta keon aloituskoko\n"
+
+#: emultempl/pe.em:422
+#, c-format
+msgid " --image-base <address> Set start address of the executable\n"
+msgstr " --image-base <osoite> Aseta suoritettavien tiedostojen aloitusosoite\n"
+
+#: emultempl/pe.em:423
+#, c-format
+msgid " --major-image-version <number> Set version number of the executable\n"
+msgstr " --major-image-version <numero> Aseta suoritettavien tiedostojen versionumero\n"
+
+#: emultempl/pe.em:424
+#, c-format
+msgid " --major-os-version <number> Set minimum required OS version\n"
+msgstr " --major-os-version <numero> Aseta pienin vaadittu käyttöjärjestelmäversio\n"
+
+#: emultempl/pe.em:425
+#, c-format
+msgid " --major-subsystem-version <number> Set minimum required OS subsystem version\n"
+msgstr " --major-subsystem-version <numero> Aseta pienin vaadittu käyttöjärjestelmän alijärjestelmän versio\n"
+
+#: emultempl/pe.em:426
+#, c-format
+msgid " --minor-image-version <number> Set revision number of the executable\n"
+msgstr " --minor-image-version <numero> Asettaa suoritettavan tiedoston revisionumeron\n"
+
+#: emultempl/pe.em:427
+#, c-format
+msgid " --minor-os-version <number> Set minimum required OS revision\n"
+msgstr " --minor-os-version <numero> Aseta pienin vaadittu käyttöjärjestelmän revisionumero\n"
+
+#: emultempl/pe.em:428
+#, c-format
+msgid " --minor-subsystem-version <number> Set minimum required OS subsystem revision\n"
+msgstr " --minor-subsystem-version <numero> Aseta pienin vaadittu käyttöjärjestelmän alijärjestelmän revisionumero\n"
+
+#: emultempl/pe.em:429
+#, c-format
+msgid " --section-alignment <size> Set section alignment\n"
+msgstr " --section-alignment <koko> Aseta lohkotasaus\n"
+
+#: emultempl/pe.em:430
+#, c-format
+msgid " --stack <size> Set size of the initial stack\n"
+msgstr " --stack <koko> Aseta pinon aloituskoko\n"
+
+#: emultempl/pe.em:431
+#, c-format
+msgid " --subsystem <name>[:<version>] Set required OS subsystem [& version]\n"
+msgstr " --subsystem <nimi>[:<versio>] Aseta vaadittu käyttöjärjestelmän alijärjestelmä [& versio]\n"
+
+#: emultempl/pe.em:432
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code Tue yhteistoimivuutta vanhan koodin kanssa\n"
+
+#: emultempl/pe.em:433
+#, c-format
+msgid " --[no-]leading-underscore Set explicit symbol underscore prefix mode\n"
+msgstr " --[no-]leading-underscore Aseta eksplisiittinen symbolin alaviivaetuliitetila\n"
+
+#: emultempl/pe.em:434
+#, c-format
+msgid " --thumb-entry=<symbol> Set the entry point to be Thumb <symbol>\n"
+msgstr " --thumb-entry=<symboli> Aseta tulokohdaksi â€Thumb <symboli>â€\n"
+
+#: emultempl/pe.em:436
+#, c-format
+msgid " --add-stdcall-alias Export symbols with and without @nn\n"
+msgstr " --add-stdcall-alias Vie symbolit ilman @nn:ää ja sen kanssa\n"
+
+#: emultempl/pe.em:437
+#, c-format
+msgid " --disable-stdcall-fixup Don't link _sym to _sym@nn\n"
+msgstr " --disable-stdcall-fixup Älä linkitä symbolia _sym symboliin _sym@nn\n"
+
+#: emultempl/pe.em:438
+#, c-format
+msgid " --enable-stdcall-fixup Link _sym to _sym@nn without warnings\n"
+msgstr " --enable-stdcall-fixup Linkitä symboli _sym symboliin _sym@nn ilman varoituksia\n"
+
+#: emultempl/pe.em:439
+#, c-format
+msgid " --exclude-symbols sym,sym,... Exclude symbols from automatic export\n"
+msgstr " --exclude-symbols sym,sym,... Jätä symbolit pois automaattisesta viennistä\n"
+
+#: emultempl/pe.em:440
+#, c-format
+msgid " --exclude-all-symbols Exclude all symbols from automatic export\n"
+msgstr " --exclude-all-symbols Jätä kaikki symbolit pois automaattisesta viennistä\n"
+
+#: emultempl/pe.em:441
+#, c-format
+msgid " --exclude-libs lib,lib,... Exclude libraries from automatic export\n"
+msgstr " --exclude-libs lib,lib,... Jätä kirjastot pois automaattisesta viennistä\n"
+
+#: emultempl/pe.em:442
+#, c-format
+msgid " --exclude-modules-for-implib mod,mod,...\n"
+msgstr " --exclude-modules-for-implib moduli,moduli,...\n"
+
+# Tämä teksti jatkuu seuraavassa merkkijonossa
+#: emultempl/pe.em:443
+#, c-format
+msgid " Exclude objects, archive members from auto\n"
+msgstr " Jätä pois objektit, arkistojäsenet automaattisesta\n"
+
+# Tämä teksti on jatkoa edelliselle merkkijonolle
+#: emultempl/pe.em:444
+#, c-format
+msgid " export, place into import library instead.\n"
+msgstr " viennistä, sijoita ne sen sijaan tuontikirjastoon.\n"
+
+#: emultempl/pe.em:445
+#, c-format
+msgid " --export-all-symbols Automatically export all globals to DLL\n"
+msgstr " --export-all-symbols Vie kaikki yleismuuttujat automaattisesti DLL:ään\n"
+
+#: emultempl/pe.em:446
+#, c-format
+msgid " --kill-at Remove @nn from exported symbols\n"
+msgstr " --kill-at Poista @nn viedyistä symboleista\n"
+
+#: emultempl/pe.em:447
+#, c-format
+msgid " --out-implib <file> Generate import library\n"
+msgstr " --out-implib <tiedosto> Luo tuontikirjasto\n"
+
+#: emultempl/pe.em:448
+#, c-format
+msgid " --output-def <file> Generate a .DEF file for the built DLL\n"
+msgstr " --output-def <tiedosto> Luo .DEF-tiedosto DLL:n rakentamiseen\n"
+
+#: emultempl/pe.em:449
+#, c-format
+msgid " --warn-duplicate-exports Warn about duplicate exports.\n"
+msgstr " --warn-duplicate-exports Varoita kaksoiskappalevienneistä.\n"
+
+#: emultempl/pe.em:450
+#, c-format
+msgid ""
+" --compat-implib Create backward compatible import libs;\n"
+" create __imp_<SYMBOL> as well.\n"
+msgstr ""
+" --compat-implib Luo taaksepäin yhteensopivat tuontikirjastot;\n"
+" luo myös __imp_<SYMBOLI>.\n"
+
+#: emultempl/pe.em:452
+#, c-format
+msgid ""
+" --enable-auto-image-base Automatically choose image base for DLLs\n"
+" unless user specifies one\n"
+msgstr ""
+" --enable-auto-image-base Valitse automaattisesti vedoskanta DLL:ille\n"
+" jollei käyttäjä määrittele sellaista\n"
+
+#: emultempl/pe.em:454
+#, c-format
+msgid " --disable-auto-image-base Do not auto-choose image base. (default)\n"
+msgstr " --disable-auto-image-base Älä valitse automaattisesti vedoskantaa. (oletus)\n"
+
+#: emultempl/pe.em:455
+#, c-format
+msgid ""
+" --dll-search-prefix=<string> When linking dynamically to a dll without\n"
+" an importlib, use <string><basename>.dll\n"
+" in preference to lib<basename>.dll \n"
+msgstr ""
+" --dll-search-prefix=<merkkijono> Kun linkitetään dynaamisesti dll:ään ilman\n"
+" tuontikirjastoa, käytä â€<merkkijono><kantanimi>.dllâ€\n"
+" mieluimmin kuin â€lib<kantanimi>.dll†\n"
+
+#: emultempl/pe.em:458
+#, c-format
+msgid ""
+" --enable-auto-import Do sophistcated linking of _sym to\n"
+" __imp_sym for DATA references\n"
+msgstr ""
+" --enable-auto-import Linkitä symboli _sym edistyksellisesti\n"
+" symboliin __imp_sym DATA-viitteille\n"
+
+#: emultempl/pe.em:460
+#, c-format
+msgid " --disable-auto-import Do not auto-import DATA items from DLLs\n"
+msgstr " --disable-auto-import Älä tuo DATA-alkioita DLL:stä automaattisesti\n"
+
+#: emultempl/pe.em:461
+#, c-format
+msgid ""
+" --enable-runtime-pseudo-reloc Work around auto-import limitations by\n"
+" adding pseudo-relocations resolved at\n"
+" runtime.\n"
+msgstr ""
+" --enable-runtime-pseudo-reloc Kierrä automaattisen tuonnin rajoitukset\n"
+" lisäämällä ajoaikaisesti ratkaistavia pseudo-\n"
+" uudelleensijoitusalkioita.\n"
+
+#: emultempl/pe.em:464
+#, c-format
+msgid ""
+" --disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations for\n"
+" auto-imported DATA.\n"
+msgstr ""
+" --disable-runtime-pseudo-reloc Älä lisää ajoaikaisia pseudo-uudelleensijoitusalkioita\n"
+" automaattisesti tuotuun DATA:an.\n"
+
+#: emultempl/pe.em:466
+#, c-format
+msgid ""
+" --enable-extra-pe-debug Enable verbose debug output when building\n"
+" or linking to DLLs (esp. auto-import)\n"
+msgstr ""
+" --enable-extra-pe-debug Salli lavea debug-tulostus kun muodostetaan\n"
+" tai linkitetään DLL:ään (erityisesti automaattisessa tuonnissa)\n"
+
+#: emultempl/pe.em:469
+#, c-format
+msgid ""
+" --large-address-aware Executable supports virtual addresses\n"
+" greater than 2 gigabytes\n"
+msgstr ""
+" --large-address-aware Suoritettava tiedosto tukee virtuaaliosoitteita,\n"
+" jotka ovat suurempia kuin 2 gigatavua\n"
+
+#: emultempl/pe.em:471
+#, c-format
+msgid ""
+" --enable-long-section-names Use long COFF section names even in\n"
+" executable image files\n"
+msgstr ""
+" --enable-long-section-names Käytä pitkiä COFF-lohkonimiä myös suoritettavissa\n"
+" vedostiedostoissa\n"
+
+#: emultempl/pe.em:473
+#, c-format
+msgid ""
+" --disable-long-section-names Never use long COFF section names, even\n"
+" in object files\n"
+msgstr ""
+" --disable-long-section-names Älä koskaan käytä pitkiä COFF-lohkonimiä, ei edes\n"
+" objektitiedostoissa\n"
+
+#: emultempl/pe.em:475
+#, c-format
+msgid ""
+" --dynamicbase\t\t\t Image base address may be relocated using\n"
+"\t\t\t\t address space layout randomization (ASLR)\n"
+msgstr ""
+" --dynamicbase\t\t\t Vedoksen perusosoite voidaan sijoittaa uudelleen\n"
+"\t\t\t\t käyttäen osoitetilan asettelun satunnaislukuhajautusta (ASLR)\n"
+
+#: emultempl/pe.em:477
+#, c-format
+msgid " --forceinteg\t\t Code integrity checks are enforced\n"
+msgstr " --forceinteg\t\t Koodin eheystarkistukset ovat valvottuja\n"
+
+#: emultempl/pe.em:478
+#, c-format
+msgid " --nxcompat\t\t Image is compatible with data execution prevention\n"
+msgstr " --nxcompat\t\t Vedos on yhteneväinen datasuorituseston kanssa\n"
+
+#: emultempl/pe.em:479
+#, c-format
+msgid " --no-isolation\t\t Image understands isolation but do not isolate the image\n"
+msgstr " --no-isolation\t\t Vedos ymmärtää eristyksen, mutta ei eristä vedosta\n"
+
+# SEH on lyhenne sanoista "SE Handler"
+#: emultempl/pe.em:480
+#, c-format
+msgid ""
+" --no-seh\t\t\t Image does not use SEH. No SE handler may\n"
+"\t\t\t\t be called in this image\n"
+msgstr ""
+" --no-seh\t\t\t Vedos ei käytä SE-käsittelijää. SE-käsittelijää ei\n"
+"\t\t\t\t saa kutsua tässä vedoksessa\n"
+
+#: emultempl/pe.em:482
+#, c-format
+msgid " --no-bind\t\t\t Do not bind this image\n"
+msgstr " --no-bind\t\t\t Älä sido tätä vedosta\n"
+
+#: emultempl/pe.em:483
+#, c-format
+msgid " --wdmdriver\t\t Driver uses the WDM model\n"
+msgstr " --wdmdriver\t\t Ajuri käyttää WDM-mallia\n"
+
+#: emultempl/pe.em:484
+#, c-format
+msgid " --tsaware Image is Terminal Server aware\n"
+msgstr " --tsaware Vedos on tietoinen pääteikkunapalvelimesta\n"
+
+#: emultempl/pe.em:613
+msgid "%P: warning: bad version number in -subsystem option\n"
+msgstr "%P: varoitus: virheellinen versionumero â€-subsystemâ€-valitsimessa\n"
+
+#: emultempl/pe.em:638
+msgid "%P%F: invalid subsystem type %s\n"
+msgstr "%P%F: Virheellinen alijärjestelmätyyppi %s\n"
+
+#: emultempl/pe.em:659
+msgid "%P%F: invalid hex number for PE parameter '%s'\n"
+msgstr "%P%F: virheellinen heksadesimaalinumero PE-parametrille â€%sâ€\n"
+
+#: emultempl/pe.em:676
+msgid "%P%F: strange hex info for PE parameter '%s'\n"
+msgstr "%P%F: outo heksadesimaalinumerotieto PE-parameterílle â€%sâ€\n"
+
+#: emultempl/pe.em:693
+#, c-format
+msgid "%s: Can't open base file %s\n"
+msgstr "%s: Ei voi avata kantatiedostoa %s\n"
+
+#: emultempl/pe.em:969
+msgid "%P: warning, file alignment > section alignment.\n"
+msgstr "%P: varoitus, tiedostotasaus > lohkotasaus.\n"
+
+#: emultempl/pe.em:982
+msgid "%P: warning: --export-dynamic is not supported for PE targets, did you mean --export-all-symbols?\n"
+msgstr "%P: varoitus: --export-dynamic ei tueta PE-kohteille, tarkoititko --export-all-symbols?\n"
+
+#: emultempl/pe.em:1058 emultempl/pe.em:1085
+#, c-format
+msgid "Warning: resolving %s by linking to %s\n"
+msgstr "Varoitus: ratkaistaan %s linkittämällä kohteeseen %s\n"
+
+# enable -> disable ???
+#: emultempl/pe.em:1063 emultempl/pe.em:1090
+msgid "Use --enable-stdcall-fixup to disable these warnings\n"
+msgstr "Käytä --enable-stdcall-fixup poistamaan nämä varoitukset käytöstä\n"
+
+#: emultempl/pe.em:1064 emultempl/pe.em:1091
+msgid "Use --disable-stdcall-fixup to disable these fixups\n"
+msgstr "Käytä --disable-stdcall-fixup poistamaan nämä korjaukset käytöstä\n"
+
+#: emultempl/pe.em:1110
+#, c-format
+msgid "%C: Cannot get section contents - auto-import exception\n"
+msgstr "%C: Lohkosisältöä ei saada - automaattituonnin poikkeus\n"
+
+#: emultempl/pe.em:1150
+#, c-format
+msgid "Info: resolving %s by linking to %s (auto-import)\n"
+msgstr "Tieto: ratkaistaan %s linkittämällä kohteeseen %s (automaattituonti)\n"
+
+#: emultempl/pe.em:1157
+msgid ""
+"%P: warning: auto-importing has been activated without --enable-auto-import specified on the command line.\n"
+"This should work unless it involves constant data structures referencing symbols from auto-imported DLLs.\n"
+msgstr ""
+"%P: varoitus: automaattinen tuonti on aktivoitu määrittelemättä â€--enable-auto-importâ€-argumenttia komentorivillä.\n"
+"Tämän pitäisi toimia ellei se sisällä vakiodatarakenteita, jotka viittaavat automaattisesti tuotujen DLL:ien symboleihin.\n"
+
+#: emultempl/pe.em:1164 emultempl/pe.em:1369 emultempl/pe.em:1575 ldcref.c:490
+#: ldcref.c:588 ldmain.c:1183 ldmisc.c:286 pe-dll.c:705 pe-dll.c:1253
+#: pe-dll.c:1348
+msgid "%B%F: could not read symbols: %E\n"
+msgstr "%B%F: ei voinut lukea symboleja: %E\n"
+
+#: emultempl/pe.em:1245
+msgid "%F%P: cannot perform PE operations on non PE output file '%B'.\n"
+msgstr "%F%P: ei voi suorittaa PE-toimintoja ei-PE-tulostetiedostossa â€%Bâ€.\n"
+
+#: emultempl/pe.em:1616
+#, c-format
+msgid "Errors encountered processing file %s\n"
+msgstr "Tiedostoa %s käsitellessä syntyi virheitä\n"
+
+#: emultempl/pe.em:1639
+#, c-format
+msgid "Errors encountered processing file %s for interworking\n"
+msgstr "Virheitä syntyi käsiteltäessä tiedostoa %s yhteistoimivuutta varten\n"
+
+#: emultempl/pe.em:1701 ldexp.c:542 ldlang.c:3323 ldlang.c:3358 ldlang.c:6804
+#: ldlang.c:6835 ldmain.c:1128
+msgid "%P%F: bfd_link_hash_lookup failed: %E\n"
+msgstr "%P%F: bfd_link_hash_lookup epäonnistui: %E\n"
+
+#: ldcref.c:168
+msgid "%X%P: bfd_hash_table_init of cref table failed: %E\n"
+msgstr "%X%P: ristiviitetaulun bfd_hash_table_init epäonnistui: %E\n"
+
+#: ldcref.c:174
+msgid "%X%P: cref_hash_lookup failed: %E\n"
+msgstr "%X%P: cref_hash_lookup epäonnistui: %E\n"
+
+#: ldcref.c:184
+msgid "%X%P: cref alloc failed: %E\n"
+msgstr "%X%P: ristiviitemuistinvaraus epäonnistui: %E\n"
+
+#: ldcref.c:366
+#, c-format
+msgid ""
+"\n"
+"Cross Reference Table\n"
+"\n"
+msgstr ""
+"\n"
+"Ristiviitetaulu\n"
+"\n"
+
+#: ldcref.c:367
+msgid "Symbol"
+msgstr "Symboli"
+
+#: ldcref.c:375
+#, c-format
+msgid "File\n"
+msgstr "Tiedosto\n"
+
+#: ldcref.c:379
+#, c-format
+msgid "No symbols\n"
+msgstr "Ei symboleja\n"
+
+#: ldcref.c:532
+msgid "%P: symbol `%T' missing from main hash table\n"
+msgstr "%P: puuttuu symboli â€%T†pää-hash-taulusta\n"
+
+#: ldcref.c:650 ldcref.c:657 ldmain.c:1217 ldmain.c:1224
+msgid "%B%F: could not read relocs: %E\n"
+msgstr "%B%F: ei voitu lukea reloc-alkioita: %E\n"
+
+#. We found a reloc for the symbol. The symbol is defined
+#. in OUTSECNAME. This reloc is from a section which is
+#. mapped into a section from which references to OUTSECNAME
+#. are prohibited. We must report an error.
+#: ldcref.c:684
+msgid "%X%C: prohibited cross reference from %s to `%T' in %s\n"
+msgstr "%X%C: kielletyt ristiviitteet lohkosta %s lohkoon â€%T†kohteessa %s\n"
+
+#: ldctor.c:85
+msgid "%P%X: Different relocs used in set %s\n"
+msgstr "%P%X: Erilaisia reloc-alkioita käytetty joukossa %s\n"
+
+#: ldctor.c:103
+msgid "%P%X: Different object file formats composing set %s\n"
+msgstr "%P%X: Erilaisia objektitiedostomuotoja koottaessa joukkoa %s\n"
+
+#: ldctor.c:281 ldctor.c:295
+msgid "%P%X: %s does not support reloc %s for set %s\n"
+msgstr "%P%X: %s ei tue reloc-alkiota %s joukolle %s\n"
+
+#: ldctor.c:316
+msgid "%P%X: Unsupported size %d for set %s\n"
+msgstr "%P%X: Kokoa %d ei tueta joukolle %s\n"
+
+#: ldctor.c:337
+msgid ""
+"\n"
+"Set Symbol\n"
+"\n"
+msgstr ""
+"\n"
+"Joukko Symboli\n"
+"\n"
+
+#: ldemul.c:265
+#, c-format
+msgid "%S SYSLIB ignored\n"
+msgstr "%S SYSLIB:ä ei oteta huomioon\n"
+
+#: ldemul.c:271
+#, c-format
+msgid "%S HLL ignored\n"
+msgstr "%S HLL:ä ei oteta huomioon\n"
+
+#: ldemul.c:291
+msgid "%P: unrecognised emulation mode: %s\n"
+msgstr "%P: tunnistamaton emulointitila: %s\n"
+
+#: ldemul.c:292
+msgid "Supported emulations: "
+msgstr "Tuetut emuloinnit:"
+
+#: ldemul.c:334
+#, c-format
+msgid " no emulation specific options.\n"
+msgstr " ei emulointikohtaisia valitsimia.\n"
+
+#: ldexp.c:313
+msgid "%P: warning: address of `%s' isn't multiple of maximum page size\n"
+msgstr "%P: varoitus: â€%sâ€:n osoite ei ole enimmäissivukoon monikerta\n"
+
+#: ldexp.c:351
+#, c-format
+msgid "%F%S %% by zero\n"
+msgstr "%F%S %% nollalla\n"
+
+#: ldexp.c:359
+#, c-format
+msgid "%F%S / by zero\n"
+msgstr "%F%S / nollalla\n"
+
+#: ldexp.c:552
+#, c-format
+msgid "%X%S: unresolvable symbol `%s' referenced in expression\n"
+msgstr "%X%S: lausekkeessa viitattu ratkaisemattomaan symboliin â€%sâ€\n"
+
+#: ldexp.c:564
+#, c-format
+msgid "%F%S: undefined symbol `%s' referenced in expression\n"
+msgstr "%F%S: lausekkeessa viitattu ratkaisemattomaan symboliin â€%sâ€\n"
+
+#: ldexp.c:585 ldexp.c:602 ldexp.c:629
+#, c-format
+msgid "%F%S: undefined section `%s' referenced in expression\n"
+msgstr "%F%S: lausekkeessa viitattu määrittelemättömään lohkoon â€%sâ€\n"
+
+#: ldexp.c:656 ldexp.c:670
+#, c-format
+msgid "%F%S: undefined MEMORY region `%s' referenced in expression\n"
+msgstr "%F%S: lausekkeessa viitattu määrittelemättömään MEMORY-alueeseen â€%sâ€\n"
+
+#: ldexp.c:681
+#, c-format
+msgid "%F%S: unknown constant `%s' referenced in expression\n"
+msgstr "%F%S: lausekkeessa viitattu tuntemattomaan vakioon â€%sâ€\n"
+
+#: ldexp.c:743
+#, c-format
+msgid "%F%S can not PROVIDE assignment to location counter\n"
+msgstr "%F%S ei voi ANTAA sijoitusta sijoituslaskuriin\n"
+
+#: ldexp.c:757
+#, c-format
+msgid "%F%S invalid assignment to location counter\n"
+msgstr "%F%S virheellinen sijoitus sijoituslaskuriin\n"
+
+#: ldexp.c:760
+#, c-format
+msgid "%F%S assignment to location counter invalid outside of SECTION\n"
+msgstr "%F%S sijoitus sijoituslaskuriin virheellinen SECTION-lohkon ulkopuolella\n"
+
+#: ldexp.c:773
+msgid "%F%S cannot move location counter backwards (from %V to %V)\n"
+msgstr "%F%S ei voi siirtää sijoituslaskuria taaksepäin (arvosta %V arvoon %V)\n"
+
+#: ldexp.c:812
+msgid "%P%F:%s: hash creation failed\n"
+msgstr "%P%F:%s: hash-luonti ei onnistunut\n"
+
+#: ldexp.c:1119 ldexp.c:1144 ldexp.c:1204
+#, c-format
+msgid "%F%S: nonconstant expression for %s\n"
+msgstr "%F%S: ei-vakio lauseke kohteelle %s\n"
+
+#: ldfile.c:141
+#, c-format
+msgid "attempt to open %s failed\n"
+msgstr "yritys avata %s ei onnistunut\n"
+
+#: ldfile.c:143
+#, c-format
+msgid "attempt to open %s succeeded\n"
+msgstr "yritettiin avata %s menestyksellisesti\n"
+
+# Binary File Descriptor
+#: ldfile.c:149
+msgid "%F%P: invalid BFD target `%s'\n"
+msgstr "%F%P: virheellinen BFD-kohde â€%sâ€\n"
+
+#: ldfile.c:266 ldfile.c:295
+msgid "%P: skipping incompatible %s when searching for %s\n"
+msgstr "%P: hypättiin ei-yhteensopivan kohteen %s yli kun haettiin kohdetta %s\n"
+
+#: ldfile.c:279
+msgid "%F%P: attempted static link of dynamic object `%s'\n"
+msgstr "%F%P: yritettiin dynaamisen objektin â€%s†staattista linkkiä\n"
+
+#: ldfile.c:332 ldmain.c:832
+msgid "%P%F: %s: plugin reported error claiming file\n"
+msgstr "%P%F: %s: lisäosa ilmoitettu virhevaatimustiedostoon\n"
+
+#: ldfile.c:447
+msgid "%P: cannot find %s (%s): %E\n"
+msgstr "%P: ei voi löytää kohdetta %s (%s): %E\n"
+
+#: ldfile.c:450
+msgid "%P: cannot find %s: %E\n"
+msgstr "%P: ei voi löytää kohdetta %s: %E\n"
+
+#: ldfile.c:485
+msgid "%P: cannot find %s inside %s\n"
+msgstr "%P: kohdetta %s ei löydy kohteen %s sisältä\n"
+
+#: ldfile.c:488
+msgid "%P: cannot find %s\n"
+msgstr "%P: ei löydy kohdetta %s\n"
+
+#: ldfile.c:507 ldfile.c:525
+#, c-format
+msgid "cannot find script file %s\n"
+msgstr "ei löydy skriptitiedostoa %s\n"
+
+#: ldfile.c:509 ldfile.c:527
+#, c-format
+msgid "opened script file %s\n"
+msgstr "avattiin skriptitiedosto %s\n"
+
+#: ldfile.c:657
+msgid "%P%F: cannot open linker script file %s: %E\n"
+msgstr "%P%F: ei voi avata linkkerin skriptitiedostoa %s: %E\n"
+
+#: ldfile.c:722
+msgid "%P%F: cannot represent machine `%s'\n"
+msgstr "%P%F: ei voi edustaa konetta â€%sâ€\n"
+
+#: ldlang.c:1160 ldlang.c:1202 ldlang.c:3048
+msgid "%P%F: can not create hash table: %E\n"
+msgstr "%P%F: ei voida luoda hash-taulua: %E\n"
+
+#: ldlang.c:1253
+msgid "%P:%S: warning: redeclaration of memory region `%s'\n"
+msgstr "%P:%S: varoitus: uudelleenesitelty muistialue â€%sâ€\n"
+
+#: ldlang.c:1259
+msgid "%P:%S: warning: memory region `%s' not declared\n"
+msgstr "%P:%S: varoitus: muistialuetta â€%s†ei ole esitelty\n"
+
+#: ldlang.c:1293
+msgid "%F%P:%S: error: alias for default memory region\n"
+msgstr "%F%P:%S: virhe: alias oletusmuistialueelle\n"
+
+#: ldlang.c:1304
+msgid "%F%P:%S: error: redefinition of memory region alias `%s'\n"
+msgstr "%F%P:%S: virhe: uudelleenmäärittely muistialuealiakselle â€%sâ€\n"
+
+#: ldlang.c:1311
+msgid "%F%P:%S: error: memory region `%s' for alias `%s' does not exist\n"
+msgstr "%F%P:%S: virhe: muistialuetta â€%s†aliakselle â€%s†ei ole olemassa\n"
+
+#: ldlang.c:1363 ldlang.c:1402
+msgid "%P%F: failed creating section `%s': %E\n"
+msgstr "%P%F: ei onnistuttu luomaan lohkoa â€%sâ€: %E\n"
+
+#: ldlang.c:1958
+#, c-format
+msgid ""
+"\n"
+"Discarded input sections\n"
+"\n"
+msgstr ""
+"\n"
+"Hylätyt syötelohkot\n"
+"\n"
+
+#: ldlang.c:1966
+msgid ""
+"\n"
+"Memory Configuration\n"
+"\n"
+msgstr ""
+"\n"
+"Muistiasetukset\n"
+"\n"
+
+#: ldlang.c:1968
+msgid "Name"
+msgstr "Nimi"
+
+#: ldlang.c:1968
+msgid "Origin"
+msgstr "Alkupiste"
+
+#: ldlang.c:1968
+msgid "Length"
+msgstr "Pituus"
+
+#: ldlang.c:1968
+msgid "Attributes"
+msgstr "Attribuutit"
+
+#: ldlang.c:2008
+#, c-format
+msgid ""
+"\n"
+"Linker script and memory map\n"
+"\n"
+msgstr ""
+"\n"
+"Linkitysskripti ja muistikartta\n"
+"\n"
+
+#: ldlang.c:2074
+msgid "%P%F: Illegal use of `%s' section\n"
+msgstr "%P%F: â€%sâ€-lohkon virheellinen käyttö\n"
+
+#: ldlang.c:2083
+msgid "%P%F: output format %s cannot represent section called %s\n"
+msgstr "%P%F: tulostemuoto %s ei voi edustaa lohkoa, jonka nimi on %s\n"
+
+#: ldlang.c:2636
+msgid "%B: file not recognized: %E\n"
+msgstr "%B: tiedostoa ei ole tunnistettu: %E\n"
+
+#: ldlang.c:2637
+msgid "%B: matching formats:"
+msgstr "%B: täsmäävät muodot:"
+
+#: ldlang.c:2644
+msgid "%F%B: file not recognized: %E\n"
+msgstr "%F%B: tiedostoa ei ole tunnistettu: %E\n"
+
+#: ldlang.c:2715
+msgid "%F%B: member %B in archive is not an object\n"
+msgstr "%F%B: arkiston jäsen %B ei ole objekti\n"
+
+#: ldlang.c:2730 ldlang.c:2744
+msgid "%F%B: could not read symbols: %E\n"
+msgstr "%F%B: ei voitu lukea symboleja: %E\n"
+
+#: ldlang.c:3018
+msgid "%P: warning: could not find any targets that match endianness requirement\n"
+msgstr "%P: varoitus: ei löytynyt yhtään kohdetta, joka olisi täsmännyt tavujärjestysvaatimuksen kanssa\n"
+
+# Binary File Descriptor -kohde
+#: ldlang.c:3032
+msgid "%P%F: target %s not found\n"
+msgstr "%P%F: bfd-kohdetta %s ei löytynyt\n"
+
+#: ldlang.c:3034
+msgid "%P%F: cannot open output file %s: %E\n"
+msgstr "%P%F: ei voi avata tulostetiedostoa %s: %E\n"
+
+#: ldlang.c:3040
+msgid "%P%F:%s: can not make object file: %E\n"
+msgstr "%P%F:%s: ei voi tehdä objektitiedostoa: %E\n"
+
+#: ldlang.c:3044
+msgid "%P%F:%s: can not set architecture: %E\n"
+msgstr "%P%F:%s: ei voi asettaa arkkitehtuuria: %E\n"
+
+#: ldlang.c:3185
+msgid "%P: warning: %s contains output sections; did you forget -T?\n"
+msgstr "%P: varoitus: %s sisältää tulostelohkoja; unohditko valitsimen -T?\n"
+
+#: ldlang.c:3215
+msgid "%P%F: bfd_hash_lookup failed creating symbol %s\n"
+msgstr "%P%F: bfd_hash_lookup ei onnistunut luomaan symbolia %s\n"
+
+#: ldlang.c:3233
+msgid "%P%F: bfd_hash_allocate failed creating symbol %s\n"
+msgstr "%P%F: bfd_hash_allocate ei onnistunut luomaan symbolia %s\n"
+
+#: ldlang.c:3688
+msgid "%F%P: %s not found for insert\n"
+msgstr "%F%P: kohdetta %s ei löydy sijoitusta varten\n"
+
+#: ldlang.c:3903
+msgid " load address 0x%V"
+msgstr " latausosoite 0x%V"
+
+# Kun käskykohdemuuttuja on sen lukualueen ulkopuolella, joka sallitaan kullekin käskykentälle, assembler voi muuntaa koodin käyttämään toiminnallisesti samanlaista käskyä tai käskysekvenssiä. Tämä prosessi tunnetaan nimellä relaxation. Tätä tehdään tyypillisesti haarautumiskäskyissä, koska haarautumiskohteen etäisyyttä ei tunneta ennen linkitystä. Tavallaan tällä tavalla kumotaan lukualueen rajoitteet (constraints). Siksi olen suomentanut sen termillä avartaminen.
+#: ldlang.c:4179
+msgid "%W (size before relaxing)\n"
+msgstr "%W (koko ennen avartamista)\n"
+
+#: ldlang.c:4270
+#, c-format
+msgid "Address of section %s set to "
+msgstr "Lohkon %s osoitteeksi asetetaan "
+
+#: ldlang.c:4423
+#, c-format
+msgid "Fail with %d\n"
+msgstr "Ei onnistuttu kohteella %d\n"
+
+#: ldlang.c:4710
+msgid "%X%P: section %s loaded at [%V,%V] overlaps section %s loaded at [%V,%V]\n"
+msgstr "%X%P: lohko %s, joka on ladattu osoitteesta [%V,%V] menee päällekkäin lohkon %s, joka on ladattu osoitteesta [%V,%V]\n"
+
+#: ldlang.c:4726
+msgid "%X%P: region `%s' overflowed by %ld bytes\n"
+msgstr "%X%P: alueen â€%s†ylitys on %ld tavua\n"
+
+#: ldlang.c:4749
+msgid "%X%P: address 0x%v of %B section `%s' is not within region `%s'\n"
+msgstr "%X%P: osoite 0x%v kohteen %B lohkossa â€%s†ei ole alueen â€%s†sisällä\n"
+
+#: ldlang.c:4760
+msgid "%X%P: %B section `%s' will not fit in region `%s'\n"
+msgstr "%X%P: kohteen %B lohko â€%s†ei mahdu alueen â€%s†sisälle\n"
+
+#: ldlang.c:4816
+#, c-format
+msgid "%F%S: non constant or forward reference address expression for section %s\n"
+msgstr "%F%S: ei-vakio tai edelleenviiteosoitelauseke lohkolle %s\n"
+
+#: ldlang.c:4841
+msgid "%P%X: Internal error on COFF shared library section %s\n"
+msgstr "%P%X: Sisäinen virhe COFF-tiedoston jaetussa kirjastolohkossa %s\n"
+
+#: ldlang.c:4900
+msgid "%P%F: error: no memory region specified for loadable section `%s'\n"
+msgstr "%P%F: virhe: ladattavalle lohkolle â€%s†ei ole määritelty muistialuetta\n"
+
+#: ldlang.c:4905
+msgid "%P: warning: no memory region specified for loadable section `%s'\n"
+msgstr "%P: varoitus: ladattavalle lohkolle â€%s†ei ole määritelty muistialuetta\n"
+
+#: ldlang.c:4927
+msgid "%P: warning: changing start of section %s by %lu bytes\n"
+msgstr "%P: varoitus: vaihdetaan lohkon %s alkua %lu tavulla\n"
+
+#: ldlang.c:5004
+msgid "%P: warning: dot moved backwards before `%s'\n"
+msgstr "%P: varoitus: pistettä siirretty taaksepäin ennen kohdetta â€%sâ€\n"
+
+# Kun käskyoperandi on sen lukualueen ulkopuolella, joka sallitaan kullekin käskykentälle, assembler voi muuntaa koodin käyttämään toiminnallisesti samanlaista käskyä tai käskysekvenssiä. Tämä prosessi tunnetaan nimellä relaxation. Tätä tehdään tyypillisesti haarautumiskäskyissä, koska haarautumiskohteen etäisyyttä ei tunneta ennen linkitystä. Tavallaan tällä tavalla kumotaan lukualueen rajoitteet (constraints). Siksi olen suomentanut sen termillä avartaminen.
+#: ldlang.c:5170
+msgid "%P%F: can't relax section: %E\n"
+msgstr "%P%F: ei voi avartaa lohkoa: %E\n"
+
+#: ldlang.c:5497
+msgid "%F%P: invalid data statement\n"
+msgstr "%F%P: virheellinen data-lause\n"
+
+#: ldlang.c:5530
+msgid "%F%P: invalid reloc statement\n"
+msgstr "%F%P: virheellinen reloc-lause\n"
+
+#: ldlang.c:5648
+msgid "%P%F: gc-sections requires either an entry or an undefined symbol\n"
+msgstr "%P%F: gc-lohkot vaativat joko alkion tai määrittelemättömän symbolin\n"
+
+#: ldlang.c:5673
+msgid "%P%F:%s: can't set start address\n"
+msgstr "%P%F:%s: ei voi asettaa aloitusosoitetta\n"
+
+#: ldlang.c:5686 ldlang.c:5705
+msgid "%P%F: can't set start address\n"
+msgstr "%P%F: ei voi asettaa aloitusosoitetta\n"
+
+#: ldlang.c:5698
+msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n"
+msgstr "%P: varoitus: tulosymbolia %s ei löydy, asetaan oletukseksi %V\n"
+
+#: ldlang.c:5710
+msgid "%P: warning: cannot find entry symbol %s; not setting start address\n"
+msgstr "%P: varoitus: tulosymbolia %s ei löydy, ei aseta aloitusosoitetta\n"
+
+#: ldlang.c:5760
+msgid "%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"
+msgstr "%P%F: Uudelleensijoituslinkitystä uudelleensijoituksilla muodosta %s (%B) muotoon %s (%B) ei tueta\n"
+
+#: ldlang.c:5770
+msgid "%P%X: %s architecture of input file `%B' is incompatible with %s output\n"
+msgstr "%P%X: %s syötetiedoston â€%B†arkkitehtuuri ei täsmää tulosteen %s kanssa\n"
+
+#: ldlang.c:5792
+msgid "%P%X: failed to merge target specific data of file %B\n"
+msgstr "%P%X: ei onnistuttu yhdistää kohdekohtaista tiedostodataa %B\n"
+
+#: ldlang.c:5863
+msgid "%P%F: Could not define common symbol `%T': %E\n"
+msgstr "%B%F: Ei voitu määritellä yhteissymbolia â€%Tâ€: %E\n"
+
+#: ldlang.c:5875
+msgid ""
+"\n"
+"Allocating common symbols\n"
+msgstr ""
+"\n"
+"Varataan muistia yhteissymboleille\n"
+
+#: ldlang.c:5876
+msgid ""
+"Common symbol size file\n"
+"\n"
+msgstr ""
+"Yhteissymboli koko tiedosto\n"
+"\n"
+
+#: ldlang.c:6022
+msgid "%P%F: invalid syntax in flags\n"
+msgstr "%P%F: virheellinen syntaksi lipussa\n"
+
+#: ldlang.c:6415
+msgid "%P%F: Failed to create hash table\n"
+msgstr "%P%F: ei onnistuttu luomaan hash-taulua\n"
+
+#: ldlang.c:6430
+msgid "%P%F: %s: plugin reported error after all symbols read\n"
+msgstr "%P%F: %s: lisäosa ilmoitti virheestä kaikkien symbolien lukemisen jälkeen\n"
+
+#: ldlang.c:6717
+msgid "%P%F: multiple STARTUP files\n"
+msgstr "%P%F: useita STARTUP-tiedostoja\n"
+
+#: ldlang.c:6765
+msgid "%X%P:%S: section has both a load address and a load region\n"
+msgstr "%X%P:%S: lohkossa on sekä latausosoite että latausalue\n"
+
+#: ldlang.c:6950
+msgid "%X%P:%S: PHDRS and FILEHDR are not supported when prior PT_LOAD headers lack them\n"
+msgstr "%X%P:%S: PHDRS ja FILEHDR eivät ole tuettuja, kun edeltävät PT_LOAD-otsakkeet puuttuvat niistä\n"
+
+#: ldlang.c:7022
+msgid "%F%P: no sections assigned to phdrs\n"
+msgstr "%F%P: kohteeseen â€phdrs†ei ole liitetty lohkoja\n"
+
+#: ldlang.c:7060
+msgid "%F%P: bfd_record_phdr failed: %E\n"
+msgstr "%F%P: bfd_record_phdr ei onnistunut: %E\n"
+
+#: ldlang.c:7080
+msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n"
+msgstr "%X%P: lohko â€%s†liitetty phdr-kohteeseen â€%sâ€, joka ei ole olemassa\n"
+
+#: ldlang.c:7481
+msgid "%X%P: unknown language `%s' in version information\n"
+msgstr "%X%P: tuntematon kieli â€%s†versiotiedoissa\n"
+
+#: ldlang.c:7626
+msgid "%X%P: anonymous version tag cannot be combined with other version tags\n"
+msgstr "%X%P: nimetöntä versiotunnistetta ei voi yhdistää muihin versiotunnisteisiin\n"
+
+#: ldlang.c:7635
+msgid "%X%P: duplicate version tag `%s'\n"
+msgstr "%X%P: kaksoiskappaleversiotunniste â€%sâ€\n"
+
+#: ldlang.c:7656 ldlang.c:7665 ldlang.c:7683 ldlang.c:7693
+msgid "%X%P: duplicate expression `%s' in version information\n"
+msgstr "%X%P: kaksoiskappalelauseke â€%s†versiotiedoissa\n"
+
+#: ldlang.c:7733
+msgid "%X%P: unable to find version dependency `%s'\n"
+msgstr "%X%P: ei voi löytää versioriippuvuutta â€%sâ€\n"
+
+#: ldlang.c:7756
+msgid "%X%P: unable to read .exports section contents\n"
+msgstr "%X%P: ei voi lukea .exports-lohkon sisältöä\n"
+
+# Binary File Descriptor
+#: ldmain.c:239
+msgid "%X%P: can't set BFD default target to `%s': %E\n"
+msgstr "%X%P: ei voi asettaa BFD-oletuskohteeksi arvoa â€%sâ€: %E\n"
+
+#: ldmain.c:307
+msgid "%P%F: -r and -shared may not be used together\n"
+msgstr "%P%F: argumentteja -r ja -shared ei saa käyttää yhdessä\n"
+
+#: ldmain.c:350
+msgid "%P%F: -F may not be used without -shared\n"
+msgstr "%P%F: argumenttia -F ei saa käyttää ilman argumenttia -shared\n"
+
+#: ldmain.c:352
+msgid "%P%F: -f may not be used without -shared\n"
+msgstr "%P%F: argumenttia -f ei saa käyttää ilman argumenttia -shared\n"
+
+#: ldmain.c:400
+msgid "using external linker script:"
+msgstr "käytetään ulkoista linkitysskriptiä:"
+
+#: ldmain.c:402
+msgid "using internal linker script:"
+msgstr "käytetään sisäistä linkitysskriptiä:"
+
+#: ldmain.c:436
+msgid "%P%F: no input files\n"
+msgstr "%P%F: ei syötetiedostoja\n"
+
+#: ldmain.c:440
+msgid "%P: mode %s\n"
+msgstr "%P: tila %s\n"
+
+#: ldmain.c:456
+msgid "%P%F: cannot open map file %s: %E\n"
+msgstr "%P%F: ei voi avata map-tiedostoa %s: %E\n"
+
+#: ldmain.c:485
+msgid "%P: %s: error in plugin cleanup (ignored)\n"
+msgstr "%P: %s: virhe lisäosan puhdistuksessa (ohitettu)\n"
+
+#: ldmain.c:494
+msgid "%P: link errors found, deleting executable `%s'\n"
+msgstr "%P: linkitysvirheitä löytyi, poistetaan suoritettava tiedosto â€%sâ€\n"
+
+#: ldmain.c:503
+msgid "%F%B: final close failed: %E\n"
+msgstr "%F%B: loppusulkeminen ei onnistunut: %E\n"
+
+#: ldmain.c:529
+msgid "%X%P: unable to open for source of copy `%s'\n"
+msgstr "%X%P: ei voitu avata kopion â€%s†lähdekoodia\n"
+
+#: ldmain.c:532
+msgid "%X%P: unable to open for destination of copy `%s'\n"
+msgstr "%X%P: ei voitu avata kopion â€%s†kohdetta\n"
+
+#: ldmain.c:539
+msgid "%P: Error writing file `%s'\n"
+msgstr "%P: Virhe kirjoitettaessa tiedostoa â€%sâ€\n"
+
+#: ldmain.c:544 pe-dll.c:1729
+#, c-format
+msgid "%P: Error closing file `%s'\n"
+msgstr "%P: Virhe suljettaessa tiedostoa â€%sâ€\n"
+
+#: ldmain.c:560
+#, c-format
+msgid "%s: total time in link: %ld.%06ld\n"
+msgstr "%s: kokonaisaika linkityksessä: %ld.%06ld\n"
+
+#: ldmain.c:563
+#, c-format
+msgid "%s: data size %ld\n"
+msgstr "%s: data-koko %ld\n"
+
+#: ldmain.c:646
+msgid "%P%F: missing argument to -m\n"
+msgstr "%P%F: puuttuva argumentti kohteelle -m\n"
+
+#: ldmain.c:694 ldmain.c:714 ldmain.c:746 plugin.c:772
+msgid "%P%F: bfd_hash_table_init failed: %E\n"
+msgstr "%P%F: bfd_hash_table_init ei onnistunut: %E\n"
+
+#: ldmain.c:698 ldmain.c:718
+msgid "%P%F: bfd_hash_lookup failed: %E\n"
+msgstr "%P%F: bfd_hash_lookup ei onnistunut: %E\n"
+
+#: ldmain.c:732
+msgid "%X%P: error: duplicate retain-symbols-file\n"
+msgstr "%X%P: virhe: retain-symbols-file-kaksoiskappale\n"
+
+#: ldmain.c:776
+msgid "%P%F: bfd_hash_lookup for insertion failed: %E\n"
+msgstr "%P%F: bfd_hash_lookup-lisäys ei onnistunut: %E\n"
+
+#: ldmain.c:781
+msgid "%P: `-retain-symbols-file' overrides `-s' and `-S'\n"
+msgstr "%P: â€-retain-symbols-file†korvaa argumentit â€-s†ja â€-Sâ€\n"
+
+#: ldmain.c:895
+#, c-format
+msgid ""
+"Archive member included because of file (symbol)\n"
+"\n"
+msgstr ""
+"Arkistojäsen sisällytetty tiedoston vuoksi (symboli)\n"
+"\n"
+
+#: ldmain.c:975
+msgid "%X%C: multiple definition of `%T'\n"
+msgstr "%X%C: useita â€%Tâ€-määrittelyjä\n"
+
+#: ldmain.c:978
+msgid "%D: first defined here\n"
+msgstr "%D: ensimmäinen määritelty täällä\n"
+
+# Kun käskyoperandi on sen lukualueen ulkopuolella, joka sallitaan kullekin käskykentälle, assembler voi muuntaa koodin käyttämään toiminnallisesti samanlaista käskyä tai käskysekvenssiä. Tämä prosessi tunnetaan nimellä relaxation. Tätä tehdään tyypillisesti haarautumiskäskyissä, koska haarautumiskohteen etäisyyttä ei tunneta ennen linkitystä. Tavallaan tällä tavalla kumotaan lukualueen rajoitteet (constraints). Siksi olen suomentanut sen termillä avartaminen.
+#: ldmain.c:982
+msgid "%P: Disabling relaxation: it will not work with multiple definitions\n"
+msgstr "%P: Otetaan avartaminen pois käytöstä: se ei toimi kun määrittelyjä on useita\n"
+
+#: ldmain.c:1012
+msgid "%B: warning: definition of `%T' overriding common\n"
+msgstr "%B: varoitus: â€%Tâ€-määrittely korvaa yhteisen\n"
+
+#: ldmain.c:1015
+msgid "%B: warning: common is here\n"
+msgstr "%B: varoitus: yhteinen on täällä\n"
+
+#: ldmain.c:1022
+msgid "%B: warning: common of `%T' overridden by definition\n"
+msgstr "%B: varoitus: â€%Tâ€-yhteinen korvattu määrittelyllä\n"
+
+#: ldmain.c:1025
+msgid "%B: warning: defined here\n"
+msgstr "%B: varoitus: määritelty täällä\n"
+
+#: ldmain.c:1032
+msgid "%B: warning: common of `%T' overridden by larger common\n"
+msgstr "%B: varoitus: â€%Tâ€-yhteinen korvattu laajemmalla yhteisellä\n"
+
+#: ldmain.c:1035
+msgid "%B: warning: larger common is here\n"
+msgstr "%B: varoitus: laajempi yhteinen on täällä\n"
+
+#: ldmain.c:1039
+msgid "%B: warning: common of `%T' overriding smaller common\n"
+msgstr "%B: varoitus: â€%Tâ€-yhteinen korvaa pienemmän yhteisen\n"
+
+#: ldmain.c:1042
+msgid "%B: warning: smaller common is here\n"
+msgstr "%B: varoitus: pienempi yhteinen on täällä\n"
+
+#: ldmain.c:1046
+msgid "%B: warning: multiple common of `%T'\n"
+msgstr "%B: varoitus: useita â€%Tâ€-yhteisiä\n"
+
+#: ldmain.c:1048
+msgid "%B: warning: previous common is here\n"
+msgstr "%B: varoitus: edellinen yhteinen on täällä\n"
+
+#: ldmain.c:1068 ldmain.c:1106
+msgid "%P: warning: global constructor %s used\n"
+msgstr "%P: varoitus: yleiskonstruktoria %s käytetty\n"
+
+# Binary File Descriptor
+#: ldmain.c:1116
+msgid "%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"
+msgstr "%P%F: BFD-taustavirhe: kohdetta BFD_RELOC_CTOR ei ole tuettu\n"
+
+#. We found a reloc for the symbol we are looking for.
+#: ldmain.c:1170 ldmain.c:1172 ldmain.c:1174 ldmain.c:1192 ldmain.c:1237
+msgid "warning: "
+msgstr "varoitus: "
+
+#: ldmain.c:1273
+msgid "%F%P: bfd_hash_table_init failed: %E\n"
+msgstr "%F%P: bfd_hash_table_init ei onnistunut: %E\n"
+
+#: ldmain.c:1280
+msgid "%F%P: bfd_hash_lookup failed: %E\n"
+msgstr "%F%P: bfd_hash_lookup ei onnistunut: %E\n"
+
+#: ldmain.c:1301
+msgid "%X%C: undefined reference to `%T'\n"
+msgstr "%X%C: määrittelemätön viite kohteeseen â€%Tâ€\n"
+
+#: ldmain.c:1304
+msgid "%C: warning: undefined reference to `%T'\n"
+msgstr "%C: varoitus: määrittelemätön viite kohteeseen â€%Tâ€\n"
+
+#: ldmain.c:1310
+msgid "%X%D: more undefined references to `%T' follow\n"
+msgstr "%X%D: lisää määrittelemättömiä viitteitä kohteeseen â€%T†seuraa\n"
+
+#: ldmain.c:1313
+msgid "%D: warning: more undefined references to `%T' follow\n"
+msgstr "%D: varoitus: lisää määrittelemättömiä viitteitä kohteeseen â€%T†seuraa\n"
+
+#: ldmain.c:1324
+msgid "%X%B: undefined reference to `%T'\n"
+msgstr "%X%B: määrittelemätön viite kohteeseen â€%Tâ€\n"
+
+#: ldmain.c:1327
+msgid "%B: warning: undefined reference to `%T'\n"
+msgstr "%B: varoitus: määrittelemätön viite kohteeseen â€%Tâ€\n"
+
+#: ldmain.c:1333
+msgid "%X%B: more undefined references to `%T' follow\n"
+msgstr "%X%B: lisää määrittelemättömiä viitteitä kohteeseen â€%T†seuraa\n"
+
+#: ldmain.c:1336
+msgid "%B: warning: more undefined references to `%T' follow\n"
+msgstr "%B: varoitus: lisää määrittelemättömiä viitteitä kohteeseen â€%T†seuraa\n"
+
+#: ldmain.c:1375
+msgid " additional relocation overflows omitted from the output\n"
+msgstr " lisäuudelleensijoituskorvauksia ei lisätä tulosteeseen\n"
+
+#: ldmain.c:1388
+msgid " relocation truncated to fit: %s against undefined symbol `%T'"
+msgstr " uudelleensijoituksia typistetty sopimaan: %s vastaan määrittelemätön symboli â€%Tâ€"
+
+#: ldmain.c:1393
+msgid " relocation truncated to fit: %s against symbol `%T' defined in %A section in %B"
+msgstr " uudelleensijoituksia typistetty sopimaan: %s vastaan symboli â€%T†määritelty %A-lohkossa %B:ssä"
+
+#: ldmain.c:1405
+msgid " relocation truncated to fit: %s against `%T'"
+msgstr " uudelleensijoituksia typistetty sopimaan: %s vastaan â€%Tâ€"
+
+#: ldmain.c:1422
+#, c-format
+msgid "%X%C: dangerous relocation: %s\n"
+msgstr "%X%C: vaarallinen uudelleensijoitus: %s\n"
+
+#: ldmain.c:1437
+msgid "%X%C: reloc refers to symbol `%T' which is not being output\n"
+msgstr "%X%C: reloc viitaa symboliin â€%Tâ€, jota ei tulosteta\n"
+
+#: ldmisc.c:149
+#, c-format
+msgid "no symbol"
+msgstr "ei symbolia"
+
+#: ldmisc.c:246
+#, c-format
+msgid "built in linker script:%u"
+msgstr "sisäänrakennettu linkitysskripti:%u"
+
+#: ldmisc.c:324
+msgid "%B: In function `%T':\n"
+msgstr "%B: Funktiossa â€%Tâ€:\n"
+
+#: ldmisc.c:451
+msgid "%F%P: internal error %s %d\n"
+msgstr "%F%P: sisäinen virhe %s %d\n"
+
+#: ldmisc.c:500
+msgid "%P: internal error: aborting at %s line %d in %s\n"
+msgstr "%P: sisäinen virhe: hylätään %s rivillä %d kohteessa %s\n"
+
+#: ldmisc.c:503
+msgid "%P: internal error: aborting at %s line %d\n"
+msgstr "%P: sisäinen virhe: hylätään %s rivillä %d\n"
+
+#: ldmisc.c:505
+msgid "%P%F: please report this bug\n"
+msgstr "%P%F: ilmoita tästä virheestä\n"
+
+#. Output for noisy == 2 is intended to follow the GNU standards.
+#: ldver.c:39
+#, c-format
+msgid "GNU ld %s\n"
+msgstr "GNU ld-versio %s\n"
+
+#: ldver.c:43
+#, c-format
+msgid "Copyright 2010 Free Software Foundation, Inc.\n"
+msgstr "Copyright 2010 Free Software Foundation, Inc.\n"
+
+#: ldver.c:44
+#, c-format
+msgid ""
+"This program is free software; you may redistribute it under the terms of\n"
+"the GNU General Public License version 3 or (at your option) a later version.\n"
+"This program has absolutely no warranty.\n"
+msgstr ""
+"Tämä ohjelma on vapaa ohjelmisto; voit jakaa sitä edelleen GNU General Public License\n"
+"version 3 tai (valintasi mukaan) myöhäisemmän version ehtojen mukaisesti.\n"
+"Tällä ohjelmalla ei ehdottomasti ole mitään takuuta.\n"
+
+#: ldver.c:54
+#, c-format
+msgid " Supported emulations:\n"
+msgstr " Tuetut emuloinnit:\n"
+
+#: ldwrite.c:62 ldwrite.c:207
+msgid "%P%F: bfd_new_link_order failed\n"
+msgstr "%P%F: bfd_new_link_order ei onnistunut\n"
+
+#: ldwrite.c:365
+msgid "%F%P: cannot create split section name for %s\n"
+msgstr "%F%P: ei voi luoda jaettua lohkonimeä kohteelle %s\n"
+
+#: ldwrite.c:377
+msgid "%F%P: clone section failed: %E\n"
+msgstr "%F%P: kloonilohko ei onnistunut: %E\n"
+
+#: ldwrite.c:418
+#, c-format
+msgid "%8x something else\n"
+msgstr "%8x jotain muuta\n"
+
+#: ldwrite.c:588
+msgid "%F%P: final link failed: %E\n"
+msgstr "%F%P: loppulinkitys ei onnistunut: %E\n"
+
+#: lexsup.c:219 lexsup.c:368
+msgid "KEYWORD"
+msgstr "AVAINSANA"
+
+#: lexsup.c:219
+msgid "Shared library control for HP/UX compatibility"
+msgstr "Jaettu kirjasto-ohjain HP/UX-yhteensopivuutta varten"
+
+#: lexsup.c:222
+msgid "ARCH"
+msgstr "ARKISTO"
+
+#: lexsup.c:222
+msgid "Set architecture"
+msgstr "Aseta arkkitehtuuri"
+
+#: lexsup.c:224 lexsup.c:487
+msgid "TARGET"
+msgstr "KOHDE"
+
+#: lexsup.c:224
+msgid "Specify target for following input files"
+msgstr "Määrittele kohde seuraaville syötetiedostoille"
+
+#: lexsup.c:227 lexsup.c:278 lexsup.c:296 lexsup.c:309 lexsup.c:311
+#: lexsup.c:441 lexsup.c:501 lexsup.c:563 lexsup.c:576
+msgid "FILE"
+msgstr "TIEDOSTO"
+
+#: lexsup.c:227
+msgid "Read MRI format linker script"
+msgstr "Lue MRI-muotoinen linkitysskripti"
+
+#: lexsup.c:229
+msgid "Force common symbols to be defined"
+msgstr "Pakota yhteissymbolit määriteltäviksi"
+
+#: lexsup.c:233 lexsup.c:545 lexsup.c:547 lexsup.c:549 lexsup.c:551
+msgid "ADDRESS"
+msgstr "OSOITE"
+
+#: lexsup.c:233
+msgid "Set start address"
+msgstr "Aseta alkuosoite"
+
+#: lexsup.c:235
+msgid "Export all dynamic symbols"
+msgstr "Vie kaikki dynaamiset symbolit"
+
+#: lexsup.c:237
+msgid "Undo the effect of --export-dynamic"
+msgstr "Peru valitsimen --export-dynamic vaikutus"
+
+#: lexsup.c:239
+msgid "Link big-endian objects"
+msgstr "Linkitä big-endian-objektit"
+
+#: lexsup.c:241
+msgid "Link little-endian objects"
+msgstr "Linkitä little-endian-objektit"
+
+#: lexsup.c:243 lexsup.c:246
+msgid "SHLIB"
+msgstr "SHLIB"
+
+#: lexsup.c:243
+msgid "Auxiliary filter for shared object symbol table"
+msgstr "Lisäsuodatin jaetulle objektisymbolitaululle"
+
+#: lexsup.c:246
+msgid "Filter for shared object symbol table"
+msgstr "Suodatin jaetulle objektisymbolitaululle"
+
+#: lexsup.c:249
+msgid "Ignored"
+msgstr "Ei oteta huomioon"
+
+#: lexsup.c:251
+msgid "SIZE"
+msgstr "KOKO"
+
+#: lexsup.c:251
+msgid "Small data size (if no size, same as --shared)"
+msgstr "Pieni datakoko (jos kokoa ei ole, sama kuin --shared)"
+
+#: lexsup.c:254
+msgid "FILENAME"
+msgstr "TIEDOSTONIMI"
+
+#: lexsup.c:254
+msgid "Set internal name of shared library"
+msgstr "Aseta jaetun kirjaston sisäinen nimi"
+
+#: lexsup.c:256
+msgid "PROGRAM"
+msgstr "OHJELMA"
+
+#: lexsup.c:256
+msgid "Set PROGRAM as the dynamic linker to use"
+msgstr "Aseta OHJELMA dynaamisena linkkerinä käytettäväksi"
+
+#: lexsup.c:259
+msgid "LIBNAME"
+msgstr "KIRJASTONIMI"
+
+#: lexsup.c:259
+msgid "Search for library LIBNAME"
+msgstr "Haku kirjastolle KIRJASTONIMI"
+
+#: lexsup.c:261
+msgid "DIRECTORY"
+msgstr "HAKEMISTO"
+
+#: lexsup.c:261
+msgid "Add DIRECTORY to library search path"
+msgstr "Lisää HAKEMISTO kirjaston hakupolkuun"
+
+#: lexsup.c:264
+msgid "Override the default sysroot location"
+msgstr "Korvaa oletus sysroot-sijainti"
+
+#: lexsup.c:266
+msgid "EMULATION"
+msgstr "EMULOINTI"
+
+#: lexsup.c:266
+msgid "Set emulation"
+msgstr "Aseta emulointi"
+
+#: lexsup.c:268
+msgid "Print map file on standard output"
+msgstr "Tulosta map-tiedosto vakiotulosteessa"
+
+#: lexsup.c:270
+msgid "Do not page align data"
+msgstr "Älä sivuta tasausdataa"
+
+#: lexsup.c:272
+msgid "Do not page align data, do not make text readonly"
+msgstr "Älä sivuta tasausdataa, älä tee tekstistä kirjoitussuojattua"
+
+#: lexsup.c:275
+msgid "Page align data, make text readonly"
+msgstr "Sivuta tasausdataa, tee tekstistä kirjoitussuojattua"
+
+#: lexsup.c:278
+msgid "Set output file name"
+msgstr "Aseta tulostetiedoston nimi"
+
+#: lexsup.c:280
+msgid "Optimize output file"
+msgstr "Optimoi tulostetiedosto"
+
+#: lexsup.c:283
+msgid "PLUGIN"
+msgstr "LISÄOSA"
+
+#: lexsup.c:283
+msgid "Load named plugin"
+msgstr "Lataa lisätty lisäosa"
+
+#: lexsup.c:285
+msgid "ARG"
+msgstr "ARGUMENTTI"
+
+#: lexsup.c:285
+msgid "Send arg to last-loaded plugin"
+msgstr "Lähetä argumentti viimeksiladattuun lisäosaan"
+
+#: lexsup.c:288
+msgid "Ignored for SVR4 compatibility"
+msgstr "Ei oteta huomioon SVR4-yhteensopivuutta"
+
+#: lexsup.c:292
+msgid "Generate relocatable output"
+msgstr "Luo uudelleensijoitettava tuloste"
+
+#: lexsup.c:296
+msgid "Just link symbols (if directory, same as --rpath)"
+msgstr "Linkitä vain symbolit (jos hakemisto, sama kuin --rpath)"
+
+#: lexsup.c:299
+msgid "Strip all symbols"
+msgstr "Riisu kaikki symbolit"
+
+#: lexsup.c:301
+msgid "Strip debugging symbols"
+msgstr "Riisu vianjäljityssymbolit"
+
+#: lexsup.c:303
+msgid "Strip symbols in discarded sections"
+msgstr "Riisu symbolit hylätyissä lohkoissa"
+
+#: lexsup.c:305
+msgid "Do not strip symbols in discarded sections"
+msgstr "Älä riisu symboleja hylätyistä lohkoista"
+
+#: lexsup.c:307
+msgid "Trace file opens"
+msgstr "Jäljitä tiedoston avaukset"
+
+#: lexsup.c:309
+msgid "Read linker script"
+msgstr "Lue linkitysskripti"
+
+#: lexsup.c:311
+msgid "Read default linker script"
+msgstr "Lue oletus linkitysskripti"
+
+#: lexsup.c:315 lexsup.c:333 lexsup.c:418 lexsup.c:439 lexsup.c:538
+#: lexsup.c:566 lexsup.c:605
+msgid "SYMBOL"
+msgstr "SYMBOLI"
+
+#: lexsup.c:315
+msgid "Start with undefined reference to SYMBOL"
+msgstr "Aloita määrittelemättömällä viitteellä kohteeseen SYMBOLI"
+
+#: lexsup.c:318
+msgid "[=SECTION]"
+msgstr "[=LOHKO]"
+
+#: lexsup.c:319
+msgid "Don't merge input [SECTION | orphan] sections"
+msgstr "Älä yhdistä syöte[LOHKO | orpo]lohkoja"
+
+#: lexsup.c:321
+msgid "Build global constructor/destructor tables"
+msgstr "Muodosta yleiset konstruktori/destruktoritaulut"
+
+#: lexsup.c:323
+msgid "Print version information"
+msgstr "Tulosta versiotiedot"
+
+#: lexsup.c:325
+msgid "Print version and emulation information"
+msgstr "Tulosta versio- ja emulointitiedot"
+
+#: lexsup.c:327
+msgid "Discard all local symbols"
+msgstr "Hylkää kaikki paikalliset symbolit"
+
+#: lexsup.c:329
+msgid "Discard temporary local symbols (default)"
+msgstr "Hylkää tilapäiset paikalliset symbolit (oletus)"
+
+#: lexsup.c:331
+msgid "Don't discard any local symbols"
+msgstr "Älä hylkää mitään paikallisia symboleja"
+
+#: lexsup.c:333
+msgid "Trace mentions of SYMBOL"
+msgstr "Jäljitä SYMBOLIn maininnat"
+
+#: lexsup.c:335 lexsup.c:503 lexsup.c:505
+msgid "PATH"
+msgstr "POLKU"
+
+#: lexsup.c:335
+msgid "Default search path for Solaris compatibility"
+msgstr "Oletushakupolku Solaris-yhteensopivuutta varten"
+
+#: lexsup.c:338
+msgid "Start a group"
+msgstr "Käynnistä ryhmä"
+
+#: lexsup.c:340
+msgid "End a group"
+msgstr "Lopeta ryhmä"
+
+#: lexsup.c:344
+msgid "Accept input files whose architecture cannot be determined"
+msgstr "Hyväksy syötetiedostot, joiden arkkitehtuuria ei voida määritellä"
+
+#: lexsup.c:348
+msgid "Reject input files whose architecture is unknown"
+msgstr "Hylkää syötetiedostot, joiden arkkitehtuuri on tuntematon"
+
+#: lexsup.c:361
+msgid "Only set DT_NEEDED for following dynamic libs if used"
+msgstr "Aseta DT_NEEDED vain seuraavissa dynaamisissa kirjastoissa, jos niitä käytetään"
+
+#: lexsup.c:364
+msgid ""
+"Always set DT_NEEDED for dynamic libraries mentioned on\n"
+" the command line"
+msgstr ""
+"Aseta aina DT_NEEDED dynaamisille kirjastoille, jotka on\n"
+" määritelty komentorivillä"
+
+#: lexsup.c:368
+msgid "Ignored for SunOS compatibility"
+msgstr "Ei oteta huomioon SunOS-yhteensopivuutta"
+
+#: lexsup.c:370
+msgid "Link against shared libraries"
+msgstr "Linkitä käyttäen jaettuja kirjastoja"
+
+#: lexsup.c:376
+msgid "Do not link against shared libraries"
+msgstr "Älä linkitä käyttäen jaettuja kirjastoja"
+
+#: lexsup.c:384
+msgid "Bind global references locally"
+msgstr "Sido yleisviitteet paikallisesti"
+
+#: lexsup.c:386
+msgid "Bind global function references locally"
+msgstr "Sido yleisfunktioviitteet paikallisesti"
+
+#: lexsup.c:388
+msgid "Check section addresses for overlaps (default)"
+msgstr "Tarkista lohko-osoitteet päällekkäisyyksien varalta (oletus)"
+
+#: lexsup.c:391
+msgid "Do not check section addresses for overlaps"
+msgstr "Älä tarkista lohko-osoitteita päällekkäisyyksien varalta"
+
+#: lexsup.c:395
+msgid "Copy DT_NEEDED links mentioned inside DSOs that follow"
+msgstr "Kopioi DT_NEEDED-linkit, jotka on mainittu seuraavien DSO-kohteiden sisällä"
+
+#: lexsup.c:399
+msgid "Do not copy DT_NEEDED links mentioned inside DSOs that follow"
+msgstr "Älä kopioi DT_NEEDED-linkkejä, jotka on mainittu seuraavien DSO-kohteiden sisällä"
+
+#: lexsup.c:403
+msgid "Output cross reference table"
+msgstr "Tulosteristiviitetaulu"
+
+#: lexsup.c:405
+msgid "SYMBOL=EXPRESSION"
+msgstr "SYMBOLI=LAUSEKE"
+
+#: lexsup.c:405
+msgid "Define a symbol"
+msgstr "Määrittele symboli"
+
+#: lexsup.c:407
+msgid "[=STYLE]"
+msgstr "[=TYYLI]"
+
+#: lexsup.c:407
+msgid "Demangle symbol names [using STYLE]"
+msgstr "Eheytä symbolinnimet [käyttäen TYYLIä]"
+
+#: lexsup.c:410
+msgid "Generate embedded relocs"
+msgstr "luo upotettuja relocs-lohkoja"
+
+#: lexsup.c:412
+msgid "Treat warnings as errors"
+msgstr "Kohtele varoituksia virheinä"
+
+#: lexsup.c:415
+msgid "Do not treat warnings as errors (default)"
+msgstr "Älä kohtele varoituksia virheinä (oletus)"
+
+#: lexsup.c:418
+msgid "Call SYMBOL at unload-time"
+msgstr "Kutsu SYMBOLIa vapautushetkellä"
+
+#: lexsup.c:420
+msgid "Force generation of file with .exe suffix"
+msgstr "Pakota .exe-suffiksitiedoston luominen"
+
+#: lexsup.c:422
+msgid "Remove unused sections (on some targets)"
+msgstr "Poista käyttämättömät lohkot (joissakin kohteissa)"
+
+#: lexsup.c:425
+msgid "Don't remove unused sections (default)"
+msgstr "Älä poista käyttämättömiä lohkoja (oletus)"
+
+#: lexsup.c:428
+msgid "List removed unused sections on stderr"
+msgstr "Luettele poistetut käyttämättömät lohkot vakiovirheessä"
+
+#: lexsup.c:431
+msgid "Do not list removed unused sections"
+msgstr "Älä luettele poistettuja käyttämättömiä lohkoja"
+
+#: lexsup.c:434
+msgid "Set default hash table size close to <NUMBER>"
+msgstr "Aseta oletus-hash-taulukoko lähelle <NUMERO>"
+
+#: lexsup.c:437
+msgid "Print option help"
+msgstr "Tulosta valitsinopaste"
+
+#: lexsup.c:439
+msgid "Call SYMBOL at load-time"
+msgstr "Kutsu SYMBOLIa lataushetkellä"
+
+#: lexsup.c:441
+msgid "Write a map file"
+msgstr "Kirjoita map-tiedosto"
+
+#: lexsup.c:443
+msgid "Do not define Common storage"
+msgstr "Älä määrittele Yhteinen-varastoa"
+
+#: lexsup.c:445
+msgid "Do not demangle symbol names"
+msgstr "Älä eheytä symbolinimiä"
+
+#: lexsup.c:447
+msgid "Use less memory and more disk I/O"
+msgstr "Käytä vähemmän muistia ja enemmän levyn I/O-toimintoja"
+
+#: lexsup.c:449
+msgid "Do not allow unresolved references in object files"
+msgstr "Älä salli ratkaisemattomia viitteitä objektitiedostoissa"
+
+#: lexsup.c:452
+msgid "Allow unresolved references in shared libaries"
+msgstr "Salli ratkaisemattomia viitteitä jaetuissa kirjastoissa"
+
+#: lexsup.c:456
+msgid "Do not allow unresolved references in shared libs"
+msgstr "Älä salli ratkaisemattomia viitteitä jaetuissa kirjastoissa"
+
+#: lexsup.c:460
+msgid "Allow multiple definitions"
+msgstr "Salli useita määrittelyjä"
+
+#: lexsup.c:462
+msgid "Disallow undefined version"
+msgstr "Älä salli määrittelemätöntä versiota"
+
+#: lexsup.c:464
+msgid "Create default symbol version"
+msgstr "Luo oletussymboliversio"
+
+#: lexsup.c:467
+msgid "Create default symbol version for imported symbols"
+msgstr "Luo oletussymboliversio tuontisymboleille"
+
+#: lexsup.c:470
+msgid "Don't warn about mismatched input files"
+msgstr "Älä varoita täsmäämättömistä syötetiedostoista"
+
+#: lexsup.c:473
+msgid "Don't warn on finding an incompatible library"
+msgstr "Älä varoita yhteensopimattoman kirjaston löytymisestä"
+
+#: lexsup.c:476
+msgid "Turn off --whole-archive"
+msgstr "Käännä pois --whole-archive"
+
+#: lexsup.c:478
+msgid "Create an output file even if errors occur"
+msgstr "Luo tulostetiedosto myös silloin kun syntyy virheitä"
+
+#: lexsup.c:483
+msgid ""
+"Only use library directories specified on\n"
+" the command line"
+msgstr ""
+"Käytä vain kirjastohakemistoja, jotka on määritelty\n"
+" komentorivillä"
+
+#: lexsup.c:487
+msgid "Specify target of output file"
+msgstr "Määrittele tulostetiedoston kohde"
+
+#: lexsup.c:490
+msgid "Ignored for Linux compatibility"
+msgstr "Ei oteta huomioon Linux-yhteensopivuutta"
+
+#: lexsup.c:493
+msgid "Reduce memory overheads, possibly taking much longer"
+msgstr "Pienennä muistiyleisrasite, mahdollisesti ottamalla paljon pitemmän"
+
+#: lexsup.c:496
+msgid "Reduce code size by using target specific optimizations"
+msgstr "Pienennä koodikokoa käyttämällä kohdekohtaisia optimointeja"
+
+# Kun käskyoperandi on sen lukualueen ulkopuolella, joka sallitaan kullekin käskykentälle, assembler voi muuntaa koodin käyttämään toiminnallisesti samanlaista käskyä tai käskysekvenssiä. Tämä prosessi tunnetaan nimellä relaxation. Tätä tehdään tyypillisesti haarautumiskäskyissä, koska haarautumiskohteen etäisyyttä ei tunneta ennen linkitystä. Tavallaan tällä tavalla kumotaan lukualueen rajoitteet (constraints). Siksi olen suomentanut sen termillä avartaminen.
+#: lexsup.c:498
+msgid "Do not use relaxation techniques to reduce code size"
+msgstr "Älä käytä avartamistekniikoita koodikoon pienentämiseksi"
+
+#: lexsup.c:501
+msgid "Keep only symbols listed in FILE"
+msgstr "Pidä vain symbolit, jotka on lueteltu TIEDOSTOssa"
+
+#: lexsup.c:503
+msgid "Set runtime shared library search path"
+msgstr "Aseta ajoaikaisen jaetun kirjaston hakupolku"
+
+#: lexsup.c:505
+msgid "Set link time shared library search path"
+msgstr "Aseta linkkausaikaisen jaetun kirjaston hakupolku"
+
+#: lexsup.c:508
+msgid "Create a shared library"
+msgstr "Luo jaettu kirjasto"
+
+#: lexsup.c:512
+msgid "Create a position independent executable"
+msgstr "Luo paikkariippumaton suoritettava tiedosto"
+
+#: lexsup.c:516
+msgid "[=ascending|descending]"
+msgstr "[=nouseva|laskeva]"
+
+#: lexsup.c:517
+msgid "Sort common symbols by alignment [in specified order]"
+msgstr "Lajittele yhteissymbolit [määritellyn järjestyksen] mukaan"
+
+#: lexsup.c:522
+msgid "name|alignment"
+msgstr "nimi|tasaus"
+
+#: lexsup.c:523
+msgid "Sort sections by name or maximum alignment"
+msgstr "Lajittele lohkot nimen tai maksimitasauksen mukaan"
+
+#: lexsup.c:525
+msgid "COUNT"
+msgstr "LUKUMÄÄRÄ"
+
+#: lexsup.c:525
+msgid "How many tags to reserve in .dynamic section"
+msgstr "Kuinka monta tunnistetta â€.dynamicâ€-lohkon varaamiseen"
+
+#: lexsup.c:528
+msgid "[=SIZE]"
+msgstr "[=KOKO]"
+
+#: lexsup.c:528
+msgid "Split output sections every SIZE octets"
+msgstr "Halkaise tulostelohkot kaikkiin KOKO-oktetteihin"
+
+#: lexsup.c:531
+msgid "[=COUNT]"
+msgstr "[=LUKUMÄÄRÄ]"
+
+#: lexsup.c:531
+msgid "Split output sections every COUNT relocs"
+msgstr "Halkaise tulostelohkot kaikkiin COUNT-reloc-alkioihin"
+
+#: lexsup.c:534
+msgid "Print memory usage statistics"
+msgstr "Tulosta muistikäyttötilastot"
+
+#: lexsup.c:536
+msgid "Display target specific options"
+msgstr "Näytä kohdekohtaiset valitsimet"
+
+#: lexsup.c:538
+msgid "Do task level linking"
+msgstr "Tee tehtävätason linkitystä"
+
+#: lexsup.c:540
+msgid "Use same format as native linker"
+msgstr "Käytä samaa muotoa kuin kotoperäinen linkkeri"
+
+#: lexsup.c:542
+msgid "SECTION=ADDRESS"
+msgstr "LOHKO=OSOITE"
+
+#: lexsup.c:542
+msgid "Set address of named section"
+msgstr "Aseta nimetyn lohkon osoite"
+
+#: lexsup.c:545
+msgid "Set address of .bss section"
+msgstr "Aseta â€.bssâ€-lohkon osoite"
+
+#: lexsup.c:547
+msgid "Set address of .data section"
+msgstr "Aseta â€.dataâ€-lohkon osoite"
+
+#: lexsup.c:549
+msgid "Set address of .text section"
+msgstr "Aseta â€.textâ€-lohkon osoite"
+
+#: lexsup.c:551
+msgid "Set address of text segment"
+msgstr "Aseta text-lohkon osoite"
+
+#: lexsup.c:554
+msgid ""
+"How to handle unresolved symbols. <method> is:\n"
+" ignore-all, report-all, ignore-in-object-files,\n"
+" ignore-in-shared-libs"
+msgstr ""
+"Kuinka käsitellä ratkaisemattomia symboleja. <menetelmä> on:\n"
+" ei-oteta-huomioon-kaikissa, raportoi-kaikki, ei-oteta-huomioon-objektitiedostoista,\n"
+" ei-oteta-huomioon-jaetuissa-kirjastoissa"
+
+#: lexsup.c:559
+msgid "Output lots of information during link"
+msgstr "Tulosta paljon tietoja linkityksen aikana"
+
+#: lexsup.c:563
+msgid "Read version information script"
+msgstr "Lue versiotietoskripti"
+
+#: lexsup.c:566
+msgid ""
+"Take export symbols list from .exports, using\n"
+" SYMBOL as the version."
+msgstr ""
+"Ota vientisymbolit â€.exportsâ€-luettelosta, käytä\n"
+" SYMBOLIa versiona."
+
+#: lexsup.c:570
+msgid "Add data symbols to dynamic list"
+msgstr "Lisää datasymboleja dynaamiseen luetteloon"
+
+#: lexsup.c:572
+msgid "Use C++ operator new/delete dynamic list"
+msgstr "Käytä C++-operaattoria â€new/delete†dynaamiseen luetteloon"
+
+#: lexsup.c:574
+msgid "Use C++ typeinfo dynamic list"
+msgstr "Käytä C++ typeinfo-luokkaa dynaamiseen luetteloon"
+
+#: lexsup.c:576
+msgid "Read dynamic list"
+msgstr "Lue dynaamista luetteloa"
+
+#: lexsup.c:578
+msgid "Warn about duplicate common symbols"
+msgstr "Varoita yhteissymbolien kaksoiskappaleista"
+
+#: lexsup.c:580
+msgid "Warn if global constructors/destructors are seen"
+msgstr "Varoita, jos nähdään yleisiä konstruktoreja/destruktoreja"
+
+#: lexsup.c:583
+msgid "Warn if the multiple GP values are used"
+msgstr "Varoita, jos käytetään useita GP-arvoja"
+
+#: lexsup.c:585
+msgid "Warn only once per undefined symbol"
+msgstr "Varoita vain kerran määrittämättömästä symbolista"
+
+#: lexsup.c:587
+msgid "Warn if start of section changes due to alignment"
+msgstr "Varoita, jos lohkon alku muuttuu tasauksen vuoksi"
+
+#: lexsup.c:590
+msgid "Warn if shared object has DT_TEXTREL"
+msgstr "Varoita, jos jaetuilla objekteilla on DT_TEXTREL"
+
+#: lexsup.c:593
+msgid "Warn if an object has alternate ELF machine code"
+msgstr "Varoita, jos objektissa on vaihtoehtoisen ELF-koneen koodia"
+
+#: lexsup.c:597
+msgid "Report unresolved symbols as warnings"
+msgstr "Raportoi ratkaisemattomat symbolit varoituksina"
+
+#: lexsup.c:600
+msgid "Report unresolved symbols as errors"
+msgstr "Raportoi ratkaisemattomat symbolit virheinä"
+
+#: lexsup.c:602
+msgid "Include all objects from following archives"
+msgstr "Sisällytä kaikki objektit seuraavista arkistoista"
+
+#: lexsup.c:605
+msgid "Use wrapper functions for SYMBOL"
+msgstr "Käytä wrapper-toimintoja SYMBOLille"
+
+#: lexsup.c:754
+msgid "%P: unrecognized option '%s'\n"
+msgstr "%P: tunnistamaton valitsin â€%sâ€\n"
+
+#: lexsup.c:758
+msgid "%P%F: use the --help option for usage information\n"
+msgstr "%P%F: käytä â€--helpâ€-valitsinta käyttötietojen saamiseksi\n"
+
+#: lexsup.c:776
+msgid "%P%F: unrecognized -a option `%s'\n"
+msgstr "%P%F: tunnistamaton â€-aâ€-valitsin â€%sâ€\n"
+
+#: lexsup.c:789
+msgid "%P%F: unrecognized -assert option `%s'\n"
+msgstr "%P%F: tunnistamaton â€-assertâ€-valitsin â€%sâ€\n"
+
+#: lexsup.c:832
+msgid "%F%P: unknown demangling style `%s'"
+msgstr "%F%P: tuntematon eheytystyyli â€%sâ€"
+
+#: lexsup.c:898
+msgid "%P%F: invalid number `%s'\n"
+msgstr "%P%F: virheellinen numero â€%sâ€\n"
+
+#: lexsup.c:996
+msgid "%P%F: bad --unresolved-symbols option: %s\n"
+msgstr "%P%F: virheellinen â€--unresolved-symbolsâ€-valitsin: %s\n"
+
+#: lexsup.c:1059
+msgid "%P%F: bad -plugin option\n"
+msgstr "%P%F: virheellinen â€-pluginâ€-valitsin\n"
+
+#: lexsup.c:1063
+msgid "%P%F: bad -plugin-opt option\n"
+msgstr "%P%F: virheellinen â€-plugin-optâ€-valitsin\n"
+
+#. This can happen if the user put "-rpath,a" on the command
+#. line. (Or something similar. The comma is important).
+#. Getopt becomes confused and thinks that this is a -r option
+#. but it cannot parse the text after the -r so it refuses to
+#. increment the optind counter. Detect this case and issue
+#. an error message here. We cannot just make this a warning,
+#. increment optind, and continue because getopt is too confused
+#. and will seg-fault the next time around.
+#: lexsup.c:1080
+msgid "%P%F: bad -rpath option\n"
+msgstr "%P%F: virheellinen â€-rpathâ€-valitsin\n"
+
+#: lexsup.c:1194
+msgid "%P%F: -shared not supported\n"
+msgstr "%P%F: â€-shared†ei ole tuettu\n"
+
+#: lexsup.c:1203
+msgid "%P%F: -pie not supported\n"
+msgstr "%P%F: â€-pie†ei ole tuettu\n"
+
+#: lexsup.c:1211
+msgid "descending"
+msgstr "laskeva"
+
+#: lexsup.c:1213
+msgid "ascending"
+msgstr "nouseva"
+
+#: lexsup.c:1216
+msgid "%P%F: invalid common section sorting option: %s\n"
+msgstr "%P%F: virheellinen yhteisen lohkon lajitteluvalitsin: %s\n"
+
+#: lexsup.c:1220
+msgid "name"
+msgstr "nimi"
+
+#: lexsup.c:1222
+msgid "alignment"
+msgstr "tasaus"
+
+#: lexsup.c:1225
+msgid "%P%F: invalid section sorting option: %s\n"
+msgstr "%P%F: virheellinen lohkolajitteluvalitsin: %s\n"
+
+#: lexsup.c:1259
+msgid "%P%F: invalid argument to option \"--section-start\"\n"
+msgstr "%P%F: virheellinen argumentti valitsimelle â€--section-startâ€\n"
+
+#: lexsup.c:1266
+msgid "%P%F: missing argument(s) to option \"--section-start\"\n"
+msgstr "%P%F: argumentteja puuttuu valitsimelle â€--section-startâ€\n"
+
+#: lexsup.c:1490
+msgid "%P%F: group ended before it began (--help for usage)\n"
+msgstr "%P%F: ryhmä loppui ennen alkamista (--help opasteeksi)\n"
+
+#: lexsup.c:1518
+msgid "%P%X: --hash-size needs a numeric argument\n"
+msgstr "%P%X: â€--hash-size†tarvitsee numeerisen argumentin\n"
+
+#: lexsup.c:1547
+msgid "%P%F: %s: error loading plugin\n"
+msgstr "%P%F: %s: virhe ladattaessa lisäosaa\n"
+
+#: lexsup.c:1578 lexsup.c:1591
+msgid "%P%F: invalid hex number `%s'\n"
+msgstr "%P%F: virheellinen heksadesimaalinumero â€%sâ€\n"
+
+#: lexsup.c:1627
+#, c-format
+msgid "Usage: %s [options] file...\n"
+msgstr "Käyttö: %s [valitsimet] tiedosto...\n"
+
+#: lexsup.c:1629
+#, c-format
+msgid "Options:\n"
+msgstr "Valitsimet:\n"
+
+#: lexsup.c:1707
+#, c-format
+msgid " @FILE"
+msgstr " @TIEDOSTO"
+
+#: lexsup.c:1710
+#, c-format
+msgid "Read options from FILE\n"
+msgstr "Lue valitsimet tiedostosta TIEDOSTO\n"
+
+#. Note: Various tools (such as libtool) depend upon the
+#. format of the listings below - do not change them.
+#: lexsup.c:1715
+#, c-format
+msgid "%s: supported targets:"
+msgstr "%s: tuetut kohteet:"
+
+#: lexsup.c:1723
+#, c-format
+msgid "%s: supported emulations: "
+msgstr "%s: tuetut emuloinnit: "
+
+#: lexsup.c:1728
+#, c-format
+msgid "%s: emulation specific options:\n"
+msgstr "%s: emulointikohtaiset valitsimet:\n"
+
+#: lexsup.c:1733
+#, c-format
+msgid "Report bugs to %s\n"
+msgstr ""
+"Ilmoita virheet (englanniksi) osoitteeseen %s\n"
+"Ilmoita käännösvirheet osoitteeseen <translation-team-fi@lists.sourceforge.net>\n"
+
+#: mri.c:292
+msgid "%P%F: unknown format type %s\n"
+msgstr "%P%F: tuntematon muototyyppi %s\n"
+
+#: pe-dll.c:430
+#, c-format
+msgid "%XUnsupported PEI architecture: %s\n"
+msgstr "%XEi-tuettu PEI-arkkitehtuuri: %s\n"
+
+#: pe-dll.c:788
+#, c-format
+msgid "%XCannot export %s: invalid export name\n"
+msgstr "%XEi voi viedä %s: virheellinen vientinimi\n"
+
+#: pe-dll.c:844
+#, c-format
+msgid "%XError, duplicate EXPORT with ordinals: %s (%d vs %d)\n"
+msgstr "%XVirhe, EXPORT-kaksoiskappale järjestysnumeroilla: %s (%d vs %d)\n"
+
+#: pe-dll.c:851
+#, c-format
+msgid "Warning, duplicate EXPORT: %s\n"
+msgstr "Varoitus, EXPORT-kaksoiskappale: %s\n"
+
+#: pe-dll.c:938
+#, c-format
+msgid "%XCannot export %s: symbol not defined\n"
+msgstr "%XEi voi viedä symbolia %s: symbolia ei ole määritelty\n"
+
+#: pe-dll.c:944
+#, c-format
+msgid "%XCannot export %s: symbol wrong type (%d vs %d)\n"
+msgstr "%XEi voi viedä symbolia %s: symboli on väärän tyyppinen (%d vs %d)\n"
+
+#: pe-dll.c:951
+#, c-format
+msgid "%XCannot export %s: symbol not found\n"
+msgstr "%XEi voi viedä symbolia %s: symbolia ei löydy\n"
+
+#: pe-dll.c:1065
+#, c-format
+msgid "%XError, ordinal used twice: %d (%s vs %s)\n"
+msgstr "%XVirhe, järjestyslukua käytetty kahdesti: %d (%s vs %s)\n"
+
+#: pe-dll.c:1446
+#, c-format
+msgid "%XError: %d-bit reloc in dll\n"
+msgstr "%XVirhe: %d-bittinen reloc dll:ssä\n"
+
+#: pe-dll.c:1574
+#, c-format
+msgid "%s: Can't open output def file %s\n"
+msgstr "%s: Ei voi avata def-tulostetiedostoa %s\n"
+
+#: pe-dll.c:1725
+#, c-format
+msgid "; no contents available\n"
+msgstr "; sisältö ei ole saatavilla\n"
+
+#: pe-dll.c:2652
+msgid "%C: variable '%T' can't be auto-imported. Please read the documentation for ld's --enable-auto-import for details.\n"
+msgstr "%C: muuttujaa â€%T†ei voi tuoda automaattisesti. Lue yksityiskohtaiset dokumentit ld-ohjelman --enable-auto-import-valitsimesta.\n"
+
+#: pe-dll.c:2682
+#, c-format
+msgid "%XCan't open .lib file: %s\n"
+msgstr "%XEi voi avata .lib-tiedostoa: %s\n"
+
+#: pe-dll.c:2687
+#, c-format
+msgid "Creating library file: %s\n"
+msgstr "Luodaan kirjastotiedosto: %s\n"
+
+#: pe-dll.c:2716
+#, c-format
+msgid "%Xbfd_openr %s: %E\n"
+msgstr "%Xbfd_openr %s: %E\n"
+
+#: pe-dll.c:2728
+#, c-format
+msgid "%X%s(%s): can't find member in non-archive file"
+msgstr "%X%s(%s): ei voi löytää jäsentä ei-arkistotiedostossa"
+
+#: pe-dll.c:2740
+#, c-format
+msgid "%X%s(%s): can't find member in archive"
+msgstr "%X%s(%s): ei voi löytää jäsentä arkistossa"
+
+#: pe-dll.c:3177
+#, c-format
+msgid "%XError: can't use long section names on this arch\n"
+msgstr "%XError: ei voi käyttää pitkiä lohkonimiä tähän arkistoon\n"
+
+#: plugin.c:178 plugin.c:212
+msgid "<no plugin>"
+msgstr "<ei lisäosa>"
+
+#: plugin.c:308
+msgid "%P%F: %s: non-ELF symbol in ELF BFD!"
+msgstr "%P%F: %s: ei-ELF-symboli kohteessa ELF BFD!"
+
+#: plugin.c:800
+msgid "%P%X: %s: hash table failure adding symbol %s"
+msgstr "%P%X: %s: hash-tauluhäiriö lisättäesä symbolia %s"
+
+#: plugin.c:833
+msgid "%P%X: %s: can't find IR symbol '%s'"
+msgstr "%P%X: %s: ei löydy IR-symbolia ’%s’"
+
+#: plugin.c:836
+msgid "%P%x: %s: bad IR symbol type %d"
+msgstr "%P%x: %s: väärä IR-symbolityyppi %d"
+
+#~ msgid "%F%P: %s (%s): No such file: %E\n"
+#~ msgstr "%F%P: %s (%s): Ei löydy tiedostoa: %E\n"
+
+#~ msgid "%F%P: %s: No such file: %E\n"
+#~ msgstr "%F%P: %s: Ei löydy tiedostoa: %E\n"
+
+#~ msgid ""
+#~ "Set DT_NEEDED tags for DT_NEEDED entries in\n"
+#~ " following dynamic libs"
+#~ msgstr ""
+#~ "Aseta DT_NEEDED-tunnisteet DT_NEEDED-alkioille\n"
+#~ " seuraavissa dynaamisissa kirjastoissa"
+
+#~ msgid ""
+#~ "Do not set DT_NEEDED tags for DT_NEEDED entries\n"
+#~ " in following dynamic libs"
+#~ msgstr ""
+#~ "Älä aseta DT_NEEDED-tunnisteita DT_NEEDED-alkioille\n"
+#~ " seuraavissa dynaamisissa kirjastoissa"
+
+#~ msgid "Always set DT_NEEDED for following dynamic libs"
+#~ msgstr "Aseta DT_NEEDED aina seuraavissa dynaamisissa kirjastoissa"
diff --git a/binutils-2.21/ld/po/fr.gmo b/binutils-2.21/ld/po/fr.gmo
new file mode 100644
index 0000000..24c9ae1
--- /dev/null
+++ b/binutils-2.21/ld/po/fr.gmo
Binary files differ
diff --git a/binutils-2.21/ld/po/fr.po b/binutils-2.21/ld/po/fr.po
new file mode 100644
index 0000000..7c9c46a
--- /dev/null
+++ b/binutils-2.21/ld/po/fr.po
@@ -0,0 +1,2071 @@
+# Messages français pour ld.
+# Copyright © 2004 Free Software Foundation, Inc.
+# Michel Robitaille <robitail@IRO.UMontreal.CA>, traducteur depuis/since 1996.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ld 2.17.90\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-06-27 16:44+0930\n"
+"PO-Revision-Date: 2008-03-29 20:33+0000\n"
+"Last-Translator: François-Xavier Coudert <fxcoudert@gmail.com>\n"
+"Language-Team: French <traduc@traduc.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: emultempl/armcoff.em:72
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code supporter les veilles versions de code\n"
+
+#: emultempl/armcoff.em:73
+#, c-format
+msgid " --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"
+msgstr " --thumb-entry=<sym> initialiser le point d'entrée de Thumb symbol à <sym>\n"
+
+#: emultempl/armcoff.em:121
+#, c-format
+msgid "Errors encountered processing file %s"
+msgstr "Erreur rencontrées lors du traitement du fichier %s"
+
+#: emultempl/armcoff.em:189 emultempl/pe.em:1528
+msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"
+msgstr "%P: AVERTISSEMENT: « --thumb-entry %s » écrase « -e %s »\n"
+
+#: emultempl/armcoff.em:194 emultempl/pe.em:1533
+msgid "%P: warning: connot find thumb start symbol %s\n"
+msgstr "%P: AVERTISSEMENT: ne peut repérer le symbole thumb de départ %s\n"
+
+#: emultempl/pe.em:311
+#, c-format
+msgid " --base_file <basefile> Generate a base file for relocatable DLLs\n"
+msgstr " --base_file <fichier_de_base> générer une fichier de base les les DLL relocalisables\n"
+
+#: emultempl/pe.em:312
+#, c-format
+msgid " --dll Set image base to the default for DLLs\n"
+msgstr " --dll initialise l'image de base au DLL par défaut\n"
+
+#: emultempl/pe.em:313
+#, c-format
+msgid " --file-alignment <size> Set file alignment\n"
+msgstr " --file-alignment <taille> initialiser l'alignement du fichier\n"
+
+#: emultempl/pe.em:314
+#, c-format
+msgid " --heap <size> Set initial size of the heap\n"
+msgstr " --heap <taille> initialiser la taille initiale du monceau\n"
+
+#: emultempl/pe.em:315
+#, c-format
+msgid " --image-base <address> Set start address of the executable\n"
+msgstr " --image-base <adresse> initialiser l'adresse de début de l'exécutable\n"
+
+#: emultempl/pe.em:316
+#, c-format
+msgid " --major-image-version <number> Set version number of the executable\n"
+msgstr " --major-image-version <nombre> initialiser le numéro de version de l'exécutable\n"
+
+#: emultempl/pe.em:317
+#, c-format
+msgid " --major-os-version <number> Set minimum required OS version\n"
+msgstr " --major-os-version <nombre> initialiser le numéro minimum de version du système d'exploitation\n"
+
+#: emultempl/pe.em:318
+#, c-format
+msgid " --major-subsystem-version <number> Set minimum required OS subsystem version\n"
+msgstr " --major-subsystem-version <nombre> initialiser le numéro minimum de version du sous-système\n"
+
+#: emultempl/pe.em:319
+#, c-format
+msgid " --minor-image-version <number> Set revision number of the executable\n"
+msgstr " --minor-image-version <nombre> initialiser le numéro de révision de l'exécutable\n"
+
+#: emultempl/pe.em:320
+#, c-format
+msgid " --minor-os-version <number> Set minimum required OS revision\n"
+msgstr " --minor-os-version <nombre> initialiser le numéro minimum de version du système d'exploitation\n"
+
+#: emultempl/pe.em:321
+#, c-format
+msgid " --minor-subsystem-version <number> Set minimum required OS subsystem revision\n"
+msgstr " --minor-subsystem-version <nombre> initialiser le numéro minimum de version du sous-système\n"
+
+#: emultempl/pe.em:322
+#, c-format
+msgid " --section-alignment <size> Set section alignment\n"
+msgstr " --section-alignment <taille> initialiser l'alignement de section\n"
+
+#: emultempl/pe.em:323
+#, c-format
+msgid " --stack <size> Set size of the initial stack\n"
+msgstr " --stack <taille> initialiser la taille initiale de la pile\n"
+
+#: emultempl/pe.em:324
+#, c-format
+msgid " --subsystem <name>[:<version>] Set required OS subsystem [& version]\n"
+msgstr " --subsystem <nom>[:<version>] initialiser le sous-système de l'OS requis [&version]\n"
+
+#: emultempl/pe.em:325
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code supporter l'inter-réseautage avec le vieux code\n"
+
+#: emultempl/pe.em:326
+#, c-format
+msgid " --thumb-entry=<symbol> Set the entry point to be Thumb <symbol>\n"
+msgstr " --thumb-entry=<symbole> initialiser le point d'entrée de Thumb <symbole>\n"
+
+#: emultempl/pe.em:328
+#, c-format
+msgid " --add-stdcall-alias Export symbols with and without @nn\n"
+msgstr " --add-stdcall-alias exporter les symboles avec et sans @nn\n"
+
+#: emultempl/pe.em:329
+#, c-format
+msgid " --disable-stdcall-fixup Don't link _sym to _sym@nn\n"
+msgstr " --disable-stdcall-fixup ne lier _sym à _sym@nn\n"
+
+#: emultempl/pe.em:330
+#, c-format
+msgid " --enable-stdcall-fixup Link _sym to _sym@nn without warnings\n"
+msgstr " --enable-stdcall-fixup lier _sym à _sym@nn sans avertissement\n"
+
+#: emultempl/pe.em:331
+#, c-format
+msgid " --exclude-symbols sym,sym,... Exclude symbols from automatic export\n"
+msgstr " --exclude-symbols sym,sym,... exclure les symboles de l'exportation automatique\n"
+
+#: emultempl/pe.em:332
+#, c-format
+msgid " --exclude-libs lib,lib,... Exclude libraries from automatic export\n"
+msgstr " --exclude-libs bibli,... exclure les bibliothèques lors l'exportation automatique\n"
+
+#: emultempl/pe.em:333
+#, c-format
+msgid " --export-all-symbols Automatically export all globals to DLL\n"
+msgstr " --export-all-symbols exporter automatiquement tous les globaux au DLL\n"
+
+#: emultempl/pe.em:334
+#, c-format
+msgid " --kill-at Remove @nn from exported symbols\n"
+msgstr " --kill-at enlever les @nn des symboles exportés\n"
+
+#: emultempl/pe.em:335
+#, c-format
+msgid " --out-implib <file> Generate import library\n"
+msgstr " --out-implib <fichier> générer la bibliothèque d'importation\n"
+
+#: emultempl/pe.em:336
+#, c-format
+msgid " --output-def <file> Generate a .DEF file for the built DLL\n"
+msgstr " --output-def <fichier> générer le fichier .DEF pour le DLL construit\n"
+
+#: emultempl/pe.em:337
+#, c-format
+msgid " --warn-duplicate-exports Warn about duplicate exports.\n"
+msgstr " --warn-duplicate-exports avertir lors de l'exportation avec duplication\n"
+
+#: emultempl/pe.em:338
+#, c-format
+msgid ""
+" --compat-implib Create backward compatible import libs;\n"
+" create __imp_<SYMBOL> as well.\n"
+msgstr ""
+" --compat-implib créer des bibliothèques d'importation avec\n"
+" compatibilité arrière; \n"
+" créer __imp_<SYMBOL> aussi\n"
+
+#: emultempl/pe.em:340
+#, c-format
+msgid ""
+" --enable-auto-image-base Automatically choose image base for DLLs\n"
+" unless user specifies one\n"
+msgstr ""
+" --enable-auto-image-base automatiquement choisir l'image de base pour les DLL\n"
+" à moins que l'usager en ait spécifié une\n"
+
+#: emultempl/pe.em:342
+#, c-format
+msgid " --disable-auto-image-base Do not auto-choose image base. (default)\n"
+msgstr " --disable-auto-image-base ne pas choisir automatiquement l'image de base (par défaut)\n"
+
+#: emultempl/pe.em:343
+#, c-format
+msgid ""
+" --dll-search-prefix=<string> When linking dynamically to a dll without\n"
+" an importlib, use <string><basename>.dll\n"
+" in preference to lib<basename>.dll \n"
+msgstr ""
+" --dll-search-prefix=<chaîne> lors de l'édition dynamique de liens vers un DLL sans\n"
+" importlib, utiliser <chaîne><basename>.dll \n"
+" de préférence à lib<basename>.dll \n"
+
+#: emultempl/pe.em:346
+#, c-format
+msgid ""
+" --enable-auto-import Do sophistcated linking of _sym to\n"
+" __imp_sym for DATA references\n"
+msgstr ""
+" --enable-auto-import faire de l'édition sophitiquée de liens de _sym vers \n"
+" __imp_sym pour les références DATA\n"
+
+#: emultempl/pe.em:348
+#, c-format
+msgid " --disable-auto-import Do not auto-import DATA items from DLLs\n"
+msgstr " --disable-auto-image-base ne pas choisir des items DATA auto-importés à partir des DLLs\n"
+
+#: emultempl/pe.em:349
+#, c-format
+msgid ""
+" --enable-runtime-pseudo-reloc Work around auto-import limitations by\n"
+" adding pseudo-relocations resolved at\n"
+" runtime.\n"
+msgstr ""
+" --dll-search-prefix=<chaîne> traiter les limitation d'auto-importations en\n"
+" ajoutant des pseudo-relocalisations résolues\n"
+" lors de l'exécution\n"
+
+#: emultempl/pe.em:352
+#, c-format
+msgid ""
+" --disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations for\n"
+" auto-imported DATA.\n"
+msgstr ""
+" --enable-auto-import ne pas ajouter de pseudo-relocalisations lors\n"
+" lors de l'exécution pour les données auto-importées\n"
+
+#: emultempl/pe.em:354
+#, c-format
+msgid ""
+" --enable-extra-pe-debug Enable verbose debug output when building\n"
+" or linking to DLLs (esp. auto-import)\n"
+msgstr ""
+" --enable-extra-pe-debug permettre le mode informatif durant la sortie\n"
+" de mise au point lors de la construction ou du lien\n"
+" vers un DLLs (spécialement en auto-import)\n"
+
+#: emultempl/pe.em:357
+#, c-format
+msgid ""
+" --large-address-aware Executable supports virtual addresses\n"
+" greater than 2 gigabytes\n"
+msgstr ""
+" --large-address-aware supporter des adresses virtuelles pour les exécutables\n"
+" plus grande que 2 gigaoctets\n"
+
+#: emultempl/pe.em:424
+msgid "%P: warning: bad version number in -subsystem option\n"
+msgstr "%P: AVERTISSEMENT: mauvais numéro de version dans l'option -subsystem\n"
+
+#: emultempl/pe.em:455
+msgid "%P%F: invalid subsystem type %s\n"
+msgstr "%P%F: type de sous-système invalide %s\n"
+
+#: emultempl/pe.em:494
+msgid "%P%F: invalid hex number for PE parameter '%s'\n"
+msgstr "%P%F: nombre hexadécimal invalide pour un paramètre PE « %s »\n"
+
+#: emultempl/pe.em:511
+msgid "%P%F: strange hex info for PE parameter '%s'\n"
+msgstr "%P%F: info étrange en hexadécimal pour un paramètre PE « %s »\n"
+
+#: emultempl/pe.em:528
+#, c-format
+msgid "%s: Can't open base file %s\n"
+msgstr "%s: ne peut ouvrir le fichier de base %s\n"
+
+#: emultempl/pe.em:744
+msgid "%P: warning, file alignment > section alignment.\n"
+msgstr "%P: AVERTISSEMENT, alignement de fichier > alignement de section\n"
+
+#: emultempl/pe.em:831 emultempl/pe.em:858
+#, c-format
+msgid "Warning: resolving %s by linking to %s\n"
+msgstr "AVERTISSEMENT: résolution de %s par un lien vers %s\n"
+
+#: emultempl/pe.em:836 emultempl/pe.em:863
+msgid "Use --enable-stdcall-fixup to disable these warnings\n"
+msgstr "Utiliser --enable-stdcall-fixup pour inhiber les avertissements\n"
+
+#: emultempl/pe.em:837 emultempl/pe.em:864
+msgid "Use --disable-stdcall-fixup to disable these fixups\n"
+msgstr "Utiliser --disable-stdcall-fixup pour inhiber les correctifs\n"
+
+#: emultempl/pe.em:883
+#, c-format
+msgid "%C: Cannot get section contents - auto-import exception\n"
+msgstr "%C: ne peut obtenir le contenu de section - exception auto-import\n"
+
+#: emultempl/pe.em:920
+#, c-format
+msgid "Info: resolving %s by linking to %s (auto-import)\n"
+msgstr "Info: résolution de %s par un lien vers %s (auto-importé)\n"
+
+#: emultempl/pe.em:992
+msgid "%F%P: cannot perform PE operations on non PE output file '%B'.\n"
+msgstr "%F%P: ne peut effectuer des opérations PE sur le fichier de sortie « %B » qui n'est pas PE.\n"
+
+#: emultempl/pe.em:1334
+#, c-format
+msgid "Errors encountered processing file %s\n"
+msgstr "Erreurs rencontrées lors du traitement du fichier %s\n"
+
+#: emultempl/pe.em:1357
+#, c-format
+msgid "Errors encountered processing file %s for interworking"
+msgstr "Erreurs rencontrées lors du traitement du fichier %s pour l'inter-réseautage"
+
+#: emultempl/pe.em:1418 ldexp.c:530 ldlang.c:3082 ldlang.c:6087 ldlang.c:6118
+#: ldmain.c:1167
+msgid "%P%F: bfd_link_hash_lookup failed: %E\n"
+msgstr "%P%F: bfd_link_hash_lookup en échec: %E\n"
+
+#: ldcref.c:166
+msgid "%X%P: bfd_hash_table_init of cref table failed: %E\n"
+msgstr "%X%P: bfd_hash_table_init de la tacle cref en échec: %E\n"
+
+#: ldcref.c:172
+msgid "%X%P: cref_hash_lookup failed: %E\n"
+msgstr "%X%P: cref_hash_lookup en échec: %E\n"
+
+#: ldcref.c:182
+msgid "%X%P: cref alloc failed: %E\n"
+msgstr "%X%P: cref alloc en échec: %E\n"
+
+#: ldcref.c:362
+#, c-format
+msgid ""
+"\n"
+"Cross Reference Table\n"
+"\n"
+msgstr ""
+"\n"
+"Table de référence croisé\n"
+"\n"
+
+#: ldcref.c:363
+msgid "Symbol"
+msgstr "Symbole"
+
+#: ldcref.c:371
+#, c-format
+msgid "File\n"
+msgstr "Fichier\n"
+
+#: ldcref.c:375
+#, c-format
+msgid "No symbols\n"
+msgstr "Aucun symbol\n"
+
+#: ldcref.c:496 ldcref.c:618
+msgid "%B%F: could not read symbols; %E\n"
+msgstr "%B%F: ne peut lire les symboles; %E\n"
+
+#: ldcref.c:500 ldcref.c:622 ldmain.c:1232 ldmain.c:1236
+msgid "%B%F: could not read symbols: %E\n"
+msgstr "%B%F: ne peut lire les symboles: %E\n"
+
+#: ldcref.c:551
+msgid "%P: symbol `%T' missing from main hash table\n"
+msgstr "%P: symbole « %T » manquant dans la table de hachage principale\n"
+
+#: ldcref.c:693 ldcref.c:700 ldmain.c:1279 ldmain.c:1286
+msgid "%B%F: could not read relocs: %E\n"
+msgstr "%B%F: ne peut lire les relocalisations: %E\n"
+
+#. We found a reloc for the symbol. The symbol is defined
+#. in OUTSECNAME. This reloc is from a section which is
+#. mapped into a section from which references to OUTSECNAME
+#. are prohibited. We must report an error.
+#: ldcref.c:727
+msgid "%X%C: prohibited cross reference from %s to `%T' in %s\n"
+msgstr "%X%C: référence croisée prohibé de %s vers « %T » dans %s\n"
+
+#: ldctor.c:84
+msgid "%P%X: Different relocs used in set %s\n"
+msgstr "%P%X: différentes relocalisations utilisées dans l'ensemble %s\n"
+
+#: ldctor.c:102
+msgid "%P%X: Different object file formats composing set %s\n"
+msgstr "%P%X: différents format de fichiers objet composant l'ensemble %s\n"
+
+#: ldctor.c:281 ldctor.c:295
+msgid "%P%X: %s does not support reloc %s for set %s\n"
+msgstr "%P%X: %s ne supporter pas la relocalisation %s pour l'ensemble %s\n"
+
+#: ldctor.c:316
+msgid "%P%X: Unsupported size %d for set %s\n"
+msgstr "%P%X: taille non supportée %d pour l'ensemble %s\n"
+
+#: ldctor.c:337
+msgid ""
+"\n"
+"Set Symbol\n"
+"\n"
+msgstr ""
+"\n"
+"Ensemble Symbole\n"
+"\n"
+
+#: ldemul.c:235
+#, c-format
+msgid "%S SYSLIB ignored\n"
+msgstr "%S SYSLIB ignoré\n"
+
+#: ldemul.c:241
+#, c-format
+msgid "%S HLL ignored\n"
+msgstr "%S HLL ignoré\n"
+
+#: ldemul.c:261
+msgid "%P: unrecognised emulation mode: %s\n"
+msgstr "%P: mode d'émulation non reconnu: %s\n"
+
+#: ldemul.c:262
+msgid "Supported emulations: "
+msgstr "Émulations supportées: "
+
+#: ldemul.c:304
+#, c-format
+msgid " no emulation specific options.\n"
+msgstr " aucune option spécifique d'émulation.\n"
+
+#: ldexp.c:344
+#, c-format
+msgid "%F%S %% by zero\n"
+msgstr "%F%S %% par zéro\n"
+
+#: ldexp.c:352
+#, c-format
+msgid "%F%S / by zero\n"
+msgstr "%F%S / by zéro\n"
+
+#: ldexp.c:544
+#, c-format
+msgid "%X%S: unresolvable symbol `%s' referenced in expression\n"
+msgstr "%X%S: symbole non résolu « %s » référencé dans l'expression\n"
+
+#: ldexp.c:555
+#, c-format
+msgid "%F%S: undefined symbol `%s' referenced in expression\n"
+msgstr "%F%S: symbole non résolu « %s » référencé dans l'expression\n"
+
+#: ldexp.c:576 ldexp.c:593 ldexp.c:619
+#, c-format
+msgid "%F%S: undefined section `%s' referenced in expression\n"
+msgstr "%F%S: section non définie « %s » référencée dans l'expression\n"
+
+#: ldexp.c:645 ldexp.c:658
+#, c-format
+msgid "%F%S: undefined MEMORY region `%s' referenced in expression\n"
+msgstr "%F%S: région MÉMOIRE indéfinie « %s » référencé dans l'expression\n"
+
+#: ldexp.c:669
+#, c-format
+msgid "%F%S: unknown constant `%s' referenced in expression\n"
+msgstr "%F%S: constante inconnue « %s » référencée dans l'expression\n"
+
+#: ldexp.c:730
+#, c-format
+msgid "%F%S can not PROVIDE assignment to location counter\n"
+msgstr "%F%S ne peut FOURNIR une assignation au compteur de localisation\n"
+
+#: ldexp.c:744
+#, c-format
+msgid "%F%S invalid assignment to location counter\n"
+msgstr "%F%S affection invalide au compteur de localisation\n"
+
+#: ldexp.c:747
+#, c-format
+msgid "%F%S assignment to location counter invalid outside of SECTION\n"
+msgstr "%F%S affection au compteur de localisation invalide en dehors de la SECTION\n"
+
+#: ldexp.c:756
+msgid "%F%S cannot move location counter backwards (from %V to %V)\n"
+msgstr "%F%S ne peut déplacer le compteur de localisation par en arrière (de %V vers %V)\n"
+
+#: ldexp.c:795
+msgid "%P%F:%s: hash creation failed\n"
+msgstr "%P%F:%s: création de la table de hachage en échec\n"
+
+#: ldexp.c:1054 ldexp.c:1079
+#, c-format
+msgid "%F%S nonconstant expression for %s\n"
+msgstr "%F%S expression d'une non constante: %s\n"
+
+#: ldexp.c:1138
+#, c-format
+msgid "%F%S: nonconstant expression for %s\n"
+msgstr "%F%S expression non constante pour %s\n"
+
+#: ldfile.c:139
+#, c-format
+msgid "attempt to open %s failed\n"
+msgstr "échec de la tentative d'ouverture de %s\n"
+
+#: ldfile.c:141
+#, c-format
+msgid "attempt to open %s succeeded\n"
+msgstr "succès de la tentative d'ouverture de %s\n"
+
+#: ldfile.c:147
+msgid "%F%P: invalid BFD target `%s'\n"
+msgstr "%F%P: cible BFD invalide « %s »\n"
+
+#: ldfile.c:256 ldfile.c:285
+msgid "%P: skipping incompatible %s when searching for %s\n"
+msgstr "%P: escamotage incompatible %s lors de la recherche de %s\n"
+
+#: ldfile.c:269
+msgid "%F%P: attempted static link of dynamic object `%s'\n"
+msgstr "%F%P: tentative de liaison statique de l'objet dynamique `%s'\n"
+
+#: ldfile.c:388
+msgid "%F%P: %s (%s): No such file: %E\n"
+msgstr "%F%P: %s (%s): pas de fichier tel: %E\n"
+
+#: ldfile.c:391
+msgid "%F%P: %s: No such file: %E\n"
+msgstr "%F%P: %s: pas de fichier tel: %E\n"
+
+#: ldfile.c:421
+msgid "%F%P: cannot find %s inside %s\n"
+msgstr "%F%P: ne peut trouver %s à l'intérieur de %s\n"
+
+#: ldfile.c:424
+msgid "%F%P: cannot find %s\n"
+msgstr "%F%P: ne peut trouver %s\n"
+
+#: ldfile.c:441 ldfile.c:457
+#, c-format
+msgid "cannot find script file %s\n"
+msgstr "ne peut repérer le fichier de scripts %s\n"
+
+#: ldfile.c:443 ldfile.c:459
+#, c-format
+msgid "opened script file %s\n"
+msgstr "fichier de scripts ouvert %s\n"
+
+#: ldfile.c:503
+msgid "%P%F: cannot open linker script file %s: %E\n"
+msgstr "%P%F: ne peut ouvrir le fichier de scripts de l'éditeur de liens %s: %E\n"
+
+#: ldfile.c:550
+msgid "%P%F: cannot represent machine `%s'\n"
+msgstr "%P%F: ne peut représenter la machine « %s »\n"
+
+#: ldlang.c:1069 ldlang.c:1111 ldlang.c:2831
+msgid "%P%F: can not create hash table: %E\n"
+msgstr "%P%F: ne peut créer une table de hachage: %E\n"
+
+#: ldlang.c:1154
+msgid "%P:%S: warning: redeclaration of memory region '%s'\n"
+msgstr "%P:%S: AVERTISSEMENT: redéclaration de la région mémoire « %s »\n"
+
+#: ldlang.c:1160
+msgid "%P:%S: warning: memory region %s not declared\n"
+msgstr "%P:%S: AVERTISSEMENT: région mémoire %s non déclarée\n"
+
+#: ldlang.c:1240 ldlang.c:1270
+msgid "%P%F: failed creating section `%s': %E\n"
+msgstr "%P%F: ne peut créer la section « %s »: %E\n"
+
+#: ldlang.c:1754
+#, c-format
+msgid ""
+"\n"
+"Discarded input sections\n"
+"\n"
+msgstr ""
+"\n"
+"Sections d'entrée éliminées\n"
+"\n"
+
+#: ldlang.c:1762
+msgid ""
+"\n"
+"Memory Configuration\n"
+"\n"
+msgstr ""
+"\n"
+"Configuration mémoire\n"
+"\n"
+
+#: ldlang.c:1764
+msgid "Name"
+msgstr "Nom"
+
+#: ldlang.c:1764
+msgid "Origin"
+msgstr "Origine"
+
+#: ldlang.c:1764
+msgid "Length"
+msgstr "Longueur"
+
+#: ldlang.c:1764
+msgid "Attributes"
+msgstr "Attributs"
+
+#: ldlang.c:1804
+#, c-format
+msgid ""
+"\n"
+"Linker script and memory map\n"
+"\n"
+msgstr ""
+"\n"
+"Script de l'éditeurs de liens and table de projection mémoire\n"
+"\n"
+
+#: ldlang.c:1871
+msgid "%P%F: Illegal use of `%s' section\n"
+msgstr "%P%F: utilisation illégale de la section « %s »\n"
+
+#: ldlang.c:1879
+msgid "%P%F: output format %s cannot represent section called %s\n"
+msgstr "%P%F: format de sortie %s ne peut représenter la section %s\n"
+
+#: ldlang.c:2429
+msgid "%B: file not recognized: %E\n"
+msgstr "%B: fichier non reconnue: %E\n"
+
+#: ldlang.c:2430
+msgid "%B: matching formats:"
+msgstr "%B: formats concordants:"
+
+#: ldlang.c:2437
+msgid "%F%B: file not recognized: %E\n"
+msgstr "%F%B: fichier non reconnu: %E\n"
+
+#: ldlang.c:2507
+msgid "%F%B: member %B in archive is not an object\n"
+msgstr "%F%B: membre %B dans l'archive n'est pas un objet\n"
+
+#: ldlang.c:2518 ldlang.c:2532
+msgid "%F%B: could not read symbols: %E\n"
+msgstr "%F%B: ne peut lire les symboles: %E\n"
+
+#: ldlang.c:2801
+msgid "%P: warning: could not find any targets that match endianness requirement\n"
+msgstr ""
+"%P: AVERTISSEMENT: ne peut repérer les cibles qui concordent avec\n"
+"les types de système à octets de poids faible ou fort requis\n"
+
+#: ldlang.c:2815
+msgid "%P%F: target %s not found\n"
+msgstr "%P%F: cible %s non trouvée\n"
+
+#: ldlang.c:2817
+msgid "%P%F: cannot open output file %s: %E\n"
+msgstr "%P%F: ne peut ouvrir le fichier de sortie %s: %E\n"
+
+#: ldlang.c:2823
+msgid "%P%F:%s: can not make object file: %E\n"
+msgstr "%P%F:%s: ne peut créer le fichier objet: %E\n"
+
+#: ldlang.c:2827
+msgid "%P%F:%s: can not set architecture: %E\n"
+msgstr "%P%F:%s: ne peut initialiser l'architecture: %E\n"
+
+#: ldlang.c:2975
+msgid "%P%F: bfd_hash_lookup failed creating symbol %s\n"
+msgstr "%P%F: bfd_hash_lookup en échec lors de la création du symbole %s\n"
+
+#: ldlang.c:2993
+msgid "%P%F: bfd_hash_allocate failed creating symbol %s\n"
+msgstr "%P%F: bfd_hash_allocate en échec lors de la création dusymbole %s\n"
+
+#: ldlang.c:3426
+msgid " load address 0x%V"
+msgstr " address de chargement 0x%V"
+
+#: ldlang.c:3661
+msgid "%W (size before relaxing)\n"
+msgstr "%W (taille avant relaxe)\n"
+
+#: ldlang.c:3747
+#, c-format
+msgid "Address of section %s set to "
+msgstr "Adresse de la section %s initialisé à "
+
+#: ldlang.c:3900
+#, c-format
+msgid "Fail with %d\n"
+msgstr "Échec avec %d\n"
+
+#: ldlang.c:4172
+msgid "%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"
+msgstr "%X%P: section %s [%V -> %V] chevauche la section %s [%V -> %V]\n"
+
+#: ldlang.c:4197
+msgid "%X%P: address 0x%v of %B section %s is not within region %s\n"
+msgstr "%X%P: l'adresse 0x%v de %B de la section %s n'est pas dans la région %s\n"
+
+#: ldlang.c:4206
+msgid "%X%P: region %s is full (%B section %s)\n"
+msgstr "%X%P: région %s est pleine (%B section %s)\n"
+
+#: ldlang.c:4247
+#, c-format
+msgid "%F%S: non constant or forward reference address expression for section %s\n"
+msgstr "%F%S: référence d'adresse avant d'expression ou non constante pour la section %s\n"
+
+#: ldlang.c:4272
+msgid "%P%X: Internal error on COFF shared library section %s\n"
+msgstr "%P%X: erreur interne dans la section de bibliothèque partagée COFF %s\n"
+
+#: ldlang.c:4331
+msgid "%P%F: error: no memory region specified for loadable section `%s'\n"
+msgstr "%P%F: ERREUR: aucune région mémoire spécifiée pour la section chargeable « %s »\n"
+
+#: ldlang.c:4336
+msgid "%P: warning: no memory region specified for loadable section `%s'\n"
+msgstr "%P: AVERTISSEMENT: aucune région mémoire spécifiée pour la section chargeable « %s »\n"
+
+#: ldlang.c:4358
+msgid "%P: warning: changing start of section %s by %lu bytes\n"
+msgstr "%P: AVERTISSEMENT: modification du début de section %s de %lu octets\n"
+
+#: ldlang.c:4437
+msgid "%P: warning: dot moved backwards before `%s'\n"
+msgstr "%P: AVERTISSEMENT: point (.) déplacé avant « %s »\n"
+
+#: ldlang.c:4609
+msgid "%P%F: can't relax section: %E\n"
+msgstr "%P%F: ne peut relâcher la section: %E\n"
+
+#: ldlang.c:4898
+msgid "%F%P: invalid data statement\n"
+msgstr "%F%P: déclaration invalide de données\n"
+
+#: ldlang.c:4931
+msgid "%F%P: invalid reloc statement\n"
+msgstr "%F%P: déclaration invalide de relocalisation\n"
+
+#: ldlang.c:5063
+msgid "%P%F:%s: can't set start address\n"
+msgstr "%P%F:%s: ne peut initialiser l'adresse de départ\n"
+
+#: ldlang.c:5076 ldlang.c:5095
+msgid "%P%F: can't set start address\n"
+msgstr "%P%F: ne peut initialiser l'adresse de départ\n"
+
+#: ldlang.c:5088
+msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n"
+msgstr "%P: AVERTISSEMENT: ne peut trouver le symbole d'entrée %s; utilise par défaut %V\n"
+
+#: ldlang.c:5100
+msgid "%P: warning: cannot find entry symbol %s; not setting start address\n"
+msgstr "%P: AVERTISSEMENT: ne peut trouver le symbole d'entrée %s; pas d'initialisation de l'adresse de départ\n"
+
+#: ldlang.c:5149
+msgid "%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"
+msgstr "%P%F: liaison relocalisable avec relocalisation à partir du format %s (%B) au format %s (%B) n'est pas supportée\n"
+
+#: ldlang.c:5159
+msgid "%P%X: %s architecture of input file `%B' is incompatible with %s output\n"
+msgstr "%P%X: architecture %s du fichier d'entrée « %B » est incompatible avec la sortie %s\n"
+
+#: ldlang.c:5181
+msgid "%P%X: failed to merge target specific data of file %B\n"
+msgstr "%E%X: échec de fusion des données spécifiques cibles du fichier %B\n"
+
+#: ldlang.c:5265
+msgid ""
+"\n"
+"Allocating common symbols\n"
+msgstr ""
+"\n"
+"Allocation des symboles communs\n"
+
+#: ldlang.c:5266
+msgid ""
+"Common symbol size file\n"
+"\n"
+msgstr ""
+"Symbole commun taille fichier\n"
+"\n"
+
+#: ldlang.c:5401
+msgid "%P%F: invalid syntax in flags\n"
+msgstr "%P%F: syntaxe invalide dans les fanions\n"
+
+#: ldlang.c:5714
+msgid "%P%F: Failed to create hash table\n"
+msgstr "%P%F: échec de création de la table de hachage\n"
+
+#: ldlang.c:6009
+msgid "%P%F: multiple STARTUP files\n"
+msgstr "%P%F: fichiers DÉPART multiples\n"
+
+#: ldlang.c:6057
+msgid "%X%P:%S: section has both a load address and a load region\n"
+msgstr "%X%P:%S: section a à la fois une adresse de chargement et une région de chargement\n"
+
+#: ldlang.c:6314
+msgid "%F%P: bfd_record_phdr failed: %E\n"
+msgstr "%F%P: bfd_record_phdr en échec: %E\n"
+
+#: ldlang.c:6334
+msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n"
+msgstr "%X%P: section « %s » affectée à phdr inexistent « %s »\n"
+
+#: ldlang.c:6725
+msgid "%X%P: unknown language `%s' in version information\n"
+msgstr "%X%P: langage inconnue « %s » dans l'information de la version\n"
+
+#: ldlang.c:6867
+msgid "%X%P: anonymous version tag cannot be combined with other version tags\n"
+msgstr "%X%P: étiquette de version anonyme ne peut être combinée avec d'autres étiquettes de version\n"
+
+#: ldlang.c:6876
+msgid "%X%P: duplicate version tag `%s'\n"
+msgstr "%X%P: duplication de l'étiquette de version « %s »\n"
+
+#: ldlang.c:6896 ldlang.c:6905 ldlang.c:6922 ldlang.c:6932
+msgid "%X%P: duplicate expression `%s' in version information\n"
+msgstr "%X%P: duplication de l'expression « %s » dans l'information de version\n"
+
+#: ldlang.c:6972
+msgid "%X%P: unable to find version dependency `%s'\n"
+msgstr "%X%P: incapable de repérer les dépendences de version « %s »\n"
+
+#: ldlang.c:6994
+msgid "%X%P: unable to read .exports section contents\n"
+msgstr "%X%P: incapable de lire le contenu de la section .exports\n"
+
+#: ldmain.c:234
+msgid "%X%P: can't set BFD default target to `%s': %E\n"
+msgstr "%X%P: ne peut initialiser la cible par défaut BFD à « %s »: %E\n"
+
+#: ldmain.c:298
+msgid "%P%F: --relax and -r may not be used together\n"
+msgstr "%P%F: --relax et -r ne peuvent être utilisés ensemble\n"
+
+#: ldmain.c:300
+msgid "%P%F: -r and -shared may not be used together\n"
+msgstr "%P%F: -r et -shared ne peuvent être utilisés ensemble\n"
+
+#: ldmain.c:343
+msgid "%P%F: -F may not be used without -shared\n"
+msgstr "%P%F: -F ne peut être utilisé sans -shared\n"
+
+#: ldmain.c:345
+msgid "%P%F: -f may not be used without -shared\n"
+msgstr "%P%F: -f ne peut être utilisé sans -shared\n"
+
+#: ldmain.c:397
+msgid "using external linker script:"
+msgstr "utilisation du script externe d'édition de liens:"
+
+#: ldmain.c:399
+msgid "using internal linker script:"
+msgstr "utilisation du script interne d'édition de liens:"
+
+#: ldmain.c:433
+msgid "%P%F: no input files\n"
+msgstr "%P%F: aucun fichier d'entrée\n"
+
+#: ldmain.c:437
+msgid "%P: mode %s\n"
+msgstr "%P: mode %s\n"
+
+#: ldmain.c:453
+msgid "%P%F: cannot open map file %s: %E\n"
+msgstr "%P%F: ne peut ouvrir le fichier de la table de projection %s: %E\n"
+
+#: ldmain.c:485
+msgid "%P: link errors found, deleting executable `%s'\n"
+msgstr "%P: erreurs de lien trouvés, destruction de l'exécutable « %s »\n"
+
+#: ldmain.c:494
+msgid "%F%B: final close failed: %E\n"
+msgstr "%F%B: fermeture finale en échec: %E\n"
+
+#: ldmain.c:520
+msgid "%X%P: unable to open for source of copy `%s'\n"
+msgstr "%X%P: incapable d'ouvrir la copie source de « %s »\n"
+
+#: ldmain.c:523
+msgid "%X%P: unable to open for destination of copy `%s'\n"
+msgstr "%X%P: incpapable d'ouvrir la copie destination de « %s »\n"
+
+#: ldmain.c:530
+msgid "%P: Error writing file `%s'\n"
+msgstr "%P: erreur lors de l'écriture du fichier « %s »\n"
+
+#: ldmain.c:535 pe-dll.c:1572
+#, c-format
+msgid "%P: Error closing file `%s'\n"
+msgstr "%P: erreur lors de la fermeture du fichier « %s »\n"
+
+#: ldmain.c:551
+#, c-format
+msgid "%s: total time in link: %ld.%06ld\n"
+msgstr "%s: temps total d'édition de liens: %ld.%06ld\n"
+
+#: ldmain.c:554
+#, c-format
+msgid "%s: data size %ld\n"
+msgstr "%s: tailles des données %ld\n"
+
+#: ldmain.c:637
+msgid "%P%F: missing argument to -m\n"
+msgstr "%P%F: argument manquant pour -m\n"
+
+#: ldmain.c:784 ldmain.c:803 ldmain.c:834
+msgid "%P%F: bfd_hash_table_init failed: %E\n"
+msgstr "%P%F: bfd_hash_table_init en échec: %E\n"
+
+#: ldmain.c:788 ldmain.c:807
+msgid "%P%F: bfd_hash_lookup failed: %E\n"
+msgstr "%P%F: bfd_hash_lookup en échec: %E\n"
+
+#: ldmain.c:821
+msgid "%X%P: error: duplicate retain-symbols-file\n"
+msgstr "%X%P: erreur: duplication dans retain-symbols-file\n"
+
+#: ldmain.c:864
+msgid "%P%F: bfd_hash_lookup for insertion failed: %E\n"
+msgstr "%P%F: bfd_hash_lookup en échec lors d'une insertion: %E\n"
+
+#: ldmain.c:869
+msgid "%P: `-retain-symbols-file' overrides `-s' and `-S'\n"
+msgstr "%P: « -retain-symbols-file » écrase les options « -s » et « -S »\n"
+
+#: ldmain.c:944
+#, c-format
+msgid ""
+"Archive member included because of file (symbol)\n"
+"\n"
+msgstr ""
+"Membre de l'archive est inclu en raison du fichier (symbole)\n"
+"\n"
+
+#: ldmain.c:1014
+msgid "%X%C: multiple definition of `%T'\n"
+msgstr "%X%C: définitions multiples de « %T »\n"
+
+#: ldmain.c:1017
+msgid "%D: first defined here\n"
+msgstr "%D: défini pour la première fois ici\n"
+
+#: ldmain.c:1021
+msgid "%P: Disabling relaxation: it will not work with multiple definitions\n"
+msgstr "%P: désactivation de la relâche: il ne pourra pas travailler avec des définitions multiples\n"
+
+#: ldmain.c:1051
+msgid "%B: warning: definition of `%T' overriding common\n"
+msgstr "%B: AVERTISSEMENT: définition de « %T » écrase le commun\n"
+
+#: ldmain.c:1054
+msgid "%B: warning: common is here\n"
+msgstr "%B: AVERTISSEMENT: le commun est ici\n"
+
+#: ldmain.c:1061
+msgid "%B: warning: common of `%T' overridden by definition\n"
+msgstr "%B: AVERTISSEMENT: le commun de « %T » écrasé par définition\n"
+
+#: ldmain.c:1064
+msgid "%B: warning: defined here\n"
+msgstr "%B: AVERTISSEMENT: défini ici\n"
+
+#: ldmain.c:1071
+msgid "%B: warning: common of `%T' overridden by larger common\n"
+msgstr "%B: AVERTISSEMENT: le commun de « %T » écrasé par un commun de plus grande taille\n"
+
+#: ldmain.c:1074
+msgid "%B: warning: larger common is here\n"
+msgstr "%B: AVERTISSEMENT: le commun de plus grande taille est ici\n"
+
+#: ldmain.c:1078
+msgid "%B: warning: common of `%T' overriding smaller common\n"
+msgstr "%B: AVERTISSEMENT: le commun de « %T » écrasé par un commun de plus petite taille\n"
+
+#: ldmain.c:1081
+msgid "%B: warning: smaller common is here\n"
+msgstr "%B: AVERTISSEMENT: le commun de plus petite taille est ici\n"
+
+#: ldmain.c:1085
+msgid "%B: warning: multiple common of `%T'\n"
+msgstr "%B: AVERTISSEMENT: communs multiples de « %T »\n"
+
+#: ldmain.c:1087
+msgid "%B: warning: previous common is here\n"
+msgstr "%B: AVERTISSEMENT: commun précédent est ici\n"
+
+#: ldmain.c:1107 ldmain.c:1145
+msgid "%P: warning: global constructor %s used\n"
+msgstr "%P: AVERTISSEMENT: constructeur global %s est utilisé\n"
+
+#: ldmain.c:1155
+msgid "%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"
+msgstr "%P%F: BFD erreur de terminaison arrière (backend): BFD_RELOC_CTOR non supporté\n"
+
+#. We found a reloc for the symbol we are looking for.
+#: ldmain.c:1209 ldmain.c:1211 ldmain.c:1213 ldmain.c:1251 ldmain.c:1299
+msgid "warning: "
+msgstr "AVERTISSEMENT: "
+
+#: ldmain.c:1334
+msgid "%F%P: bfd_hash_table_init failed: %E\n"
+msgstr "%F%P: bfd_hash_table_init en échec: %E\n"
+
+#: ldmain.c:1341
+msgid "%F%P: bfd_hash_lookup failed: %E\n"
+msgstr "%F%P: bfd_hash_lookup en échec: %E\n"
+
+#: ldmain.c:1362
+msgid "%X%C: undefined reference to `%T'\n"
+msgstr "%X%C: référence indéfinie vers « %T »\n"
+
+#: ldmain.c:1365
+msgid "%C: warning: undefined reference to `%T'\n"
+msgstr "%C: AVERTISSEMENT: référence indéfinie vers « %T »\n"
+
+#: ldmain.c:1371
+msgid "%X%D: more undefined references to `%T' follow\n"
+msgstr "%X%D: encore plus de références indéfinies suivent vers « %T »\n"
+
+#: ldmain.c:1374
+msgid "%D: warning: more undefined references to `%T' follow\n"
+msgstr "%D: AVERTISSEMENT: encore plus de références indéfinies suivent vers « %T »\n"
+
+#: ldmain.c:1385
+msgid "%X%B: undefined reference to `%T'\n"
+msgstr "%X%B: référence indéfinie vers « %T »\n"
+
+#: ldmain.c:1388
+msgid "%B: warning: undefined reference to `%T'\n"
+msgstr "%B: AVERTISSMENT: référence indéfinie vers « %T »\n"
+
+#: ldmain.c:1394
+msgid "%X%B: more undefined references to `%T' follow\n"
+msgstr "%X%B: encore plus de références indéfinies suivent vers « %T »\n"
+
+#: ldmain.c:1397
+msgid "%B: warning: more undefined references to `%T' follow\n"
+msgstr "%B: AVERTISSEMENT: encore plus de références indéfinies suivent vers « %T »\n"
+
+#: ldmain.c:1436
+msgid " additional relocation overflows omitted from the output\n"
+msgstr " débordement de relocalisation additionnelle omise à partir de la sortie\n"
+
+#: ldmain.c:1449
+msgid " relocation truncated to fit: %s against undefined symbol `%T'"
+msgstr " relocalisation tronquée pour concorder avec la taille: %s vers le symbole indéfini %T"
+
+#: ldmain.c:1454
+msgid " relocation truncated to fit: %s against symbol `%T' defined in %A section in %B"
+msgstr " relocalisation tronquée pour concorder: %s vers le symbole %T défini sans la section %A dans %B"
+
+#: ldmain.c:1466
+msgid " relocation truncated to fit: %s against `%T'"
+msgstr " relocalisation tronquée pour concorder: %s avec %T"
+
+#: ldmain.c:1483
+#, c-format
+msgid "%X%C: dangerous relocation: %s\n"
+msgstr "%X%C: relocalisation dangereuse: %s\n"
+
+#: ldmain.c:1498
+msgid "%X%C: reloc refers to symbol `%T' which is not being output\n"
+msgstr "%X%C: relocalisation réfère au symbole « %T » qui n'est pas écrit\n"
+
+#: ldmisc.c:148
+#, c-format
+msgid "no symbol"
+msgstr "aucun symbole"
+
+#: ldmisc.c:245
+#, c-format
+msgid "built in linker script:%u"
+msgstr "construit dans le script d'édition de liens:%u"
+
+#: ldmisc.c:301 ldmisc.c:305
+msgid "%B%F: could not read symbols\n"
+msgstr "%B%F: ne peut lire les symboles\n"
+
+#: ldmisc.c:347
+msgid "%B: In function `%T':\n"
+msgstr "%B: dans la fonction « %T »:\n"
+
+#: ldmisc.c:472
+msgid "%F%P: internal error %s %d\n"
+msgstr "%F%P: erreur interne %s %d\n"
+
+#: ldmisc.c:521
+msgid "%P: internal error: aborting at %s line %d in %s\n"
+msgstr "%P: erreur interne: arrêt immédiat %s, ligne %d dans %s\n"
+
+#: ldmisc.c:524
+msgid "%P: internal error: aborting at %s line %d\n"
+msgstr "%P: erreur interne: arrêt immédiat à %s ligne %d\n"
+
+#: ldmisc.c:526
+msgid "%P%F: please report this bug\n"
+msgstr "%P%F: rapporter cette anomalie\n"
+
+#. Output for noisy == 2 is intended to follow the GNU standards.
+#: ldver.c:37
+#, c-format
+msgid "GNU ld %s\n"
+msgstr "GNU ld %s\n"
+
+#: ldver.c:41
+#, c-format
+msgid "Copyright 2007 Free Software Foundation, Inc.\n"
+msgstr "Copyright 2007 Free Software Foundation, Inc.\n"
+
+#: ldver.c:42
+#, c-format
+msgid ""
+"This program is free software; you may redistribute it under the terms of\n"
+"the GNU General Public License. This program has absolutely no warranty.\n"
+msgstr ""
+"Ce logiciel est libre; voir les sources pour les conditions de\n"
+"reproduction. AUCUNE garantie n'est donnée; tant pour des raisons\n"
+"COMMERCIALES que pour RÉPONDRE À UN BESOIN PARTICULIER.\n"
+
+#: ldver.c:51
+#, c-format
+msgid " Supported emulations:\n"
+msgstr " Émulations supportées:\n"
+
+#: ldwrite.c:55 ldwrite.c:191
+msgid "%P%F: bfd_new_link_order failed\n"
+msgstr "%P%F: bfd_new_link_order en échec\n"
+
+#: ldwrite.c:344
+msgid "%F%P: cannot create split section name for %s\n"
+msgstr "%F%P: ne peut créer un nom de section scindé pour %s\n"
+
+#: ldwrite.c:356
+msgid "%F%P: clone section failed: %E\n"
+msgstr "%F%P: section clone en échec: %E\n"
+
+#: ldwrite.c:394
+#, c-format
+msgid "%8x something else\n"
+msgstr "%8x quelque chose d'autre\n"
+
+#: ldwrite.c:564
+msgid "%F%P: final link failed: %E\n"
+msgstr "%F%P: édition de lien finale en échec: %E\n"
+
+#: lexsup.c:205 lexsup.c:341
+msgid "KEYWORD"
+msgstr "MOT CLÉ"
+
+#: lexsup.c:205
+msgid "Shared library control for HP/UX compatibility"
+msgstr "Bibliothèque partagée de contrôle pour compatibilité HP/UX"
+
+#: lexsup.c:208
+msgid "ARCH"
+msgstr "ARCH"
+
+#: lexsup.c:208
+msgid "Set architecture"
+msgstr "Initilisé l'architecture"
+
+#: lexsup.c:210 lexsup.c:447
+msgid "TARGET"
+msgstr "CIBLE"
+
+#: lexsup.c:210
+msgid "Specify target for following input files"
+msgstr "Spécifier la cible pour les règles suivantes pour les fichiers d'entrée"
+
+#: lexsup.c:213 lexsup.c:262 lexsup.c:274 lexsup.c:287 lexsup.c:289
+#: lexsup.c:402 lexsup.c:459 lexsup.c:516 lexsup.c:528
+msgid "FILE"
+msgstr "FICHIER"
+
+#: lexsup.c:213
+msgid "Read MRI format linker script"
+msgstr "Lecture du format MRI du script de l'éditeur de liens"
+
+#: lexsup.c:215
+msgid "Force common symbols to be defined"
+msgstr "Forcer les symboles communs à être définis"
+
+#: lexsup.c:219 lexsup.c:501 lexsup.c:503 lexsup.c:505
+msgid "ADDRESS"
+msgstr "ADRESSE"
+
+#: lexsup.c:219
+msgid "Set start address"
+msgstr "Initialiser l'adresse de début"
+
+#: lexsup.c:221
+msgid "Export all dynamic symbols"
+msgstr "Exportation de tous les symboles dynamiques"
+
+#: lexsup.c:223
+msgid "Link big-endian objects"
+msgstr "Lier les objets pour les systèmes à octet de poids fort (big endian)"
+
+#: lexsup.c:225
+msgid "Link little-endian objects"
+msgstr "Lier les objets pour les systèmes à octets de poids faible (little endian)"
+
+#: lexsup.c:227 lexsup.c:230
+msgid "SHLIB"
+msgstr "SHLIB"
+
+#: lexsup.c:227
+msgid "Auxiliary filter for shared object symbol table"
+msgstr "Filtre auxiliaire de la table de symboles de l'objet partagé"
+
+#: lexsup.c:230
+msgid "Filter for shared object symbol table"
+msgstr "Filtre de la table de symboles de l'objet partagé"
+
+#: lexsup.c:233
+msgid "Ignored"
+msgstr "Ignoré"
+
+#: lexsup.c:235
+msgid "SIZE"
+msgstr "TAILLE"
+
+#: lexsup.c:235
+msgid "Small data size (if no size, same as --shared)"
+msgstr "Petite taille des données (si aucune taille spécifié, identique à --shared)"
+
+#: lexsup.c:238
+msgid "FILENAME"
+msgstr "NOM DE FICHIER"
+
+#: lexsup.c:238
+msgid "Set internal name of shared library"
+msgstr "Initialisé le nom interne de la bibliothèque partagée"
+
+#: lexsup.c:240
+msgid "PROGRAM"
+msgstr "PROGRAMME"
+
+#: lexsup.c:240
+msgid "Set PROGRAM as the dynamic linker to use"
+msgstr "Utiliser le PROGRAM comme éditeur de liens dynamique"
+
+#: lexsup.c:243
+msgid "LIBNAME"
+msgstr "LIBNAME"
+
+#: lexsup.c:243
+msgid "Search for library LIBNAME"
+msgstr "Recherche de la bibliothèque LIBNAME"
+
+#: lexsup.c:245
+msgid "DIRECTORY"
+msgstr "RÉPERTOIRE"
+
+#: lexsup.c:245
+msgid "Add DIRECTORY to library search path"
+msgstr "Ajout du RÉPERTOIRE au chemin de recherche des bibliothèques"
+
+#: lexsup.c:248
+msgid "Override the default sysroot location"
+msgstr "Localisation de sysroot par défaut est écrasée"
+
+#: lexsup.c:250
+msgid "EMULATION"
+msgstr "ÉMULATION"
+
+#: lexsup.c:250
+msgid "Set emulation"
+msgstr "Initialisation de l'émuilation"
+
+#: lexsup.c:252
+msgid "Print map file on standard output"
+msgstr "Afficher le fichier de projection sur la sortie standard"
+
+#: lexsup.c:254
+msgid "Do not page align data"
+msgstr "Ne pas paginer l'alignement des données"
+
+#: lexsup.c:256
+msgid "Do not page align data, do not make text readonly"
+msgstr "Ne pas paginer l'alignement des donnnées, ne pas faire de texte en lecture seulement"
+
+#: lexsup.c:259
+msgid "Page align data, make text readonly"
+msgstr "Données d'alignement de page, texte en mis en mode lecture seulement"
+
+#: lexsup.c:262
+msgid "Set output file name"
+msgstr "Initialisé le nom du fichier de sortie"
+
+#: lexsup.c:264
+msgid "Optimize output file"
+msgstr "Optimisé le fichier de sortie"
+
+#: lexsup.c:266
+msgid "Ignored for SVR4 compatibility"
+msgstr "Ignoré pour la compatibilité avec SVR4"
+
+#: lexsup.c:270
+msgid "Generate relocatable output"
+msgstr "Générer une sortie relocalisable"
+
+#: lexsup.c:274
+msgid "Just link symbols (if directory, same as --rpath)"
+msgstr "Juste lier les symboles (si répertoire, identique à --rpath)"
+
+#: lexsup.c:277
+msgid "Strip all symbols"
+msgstr "Élaguer tous les symboles"
+
+#: lexsup.c:279
+msgid "Strip debugging symbols"
+msgstr "Élaguer tous les symboles de débug"
+
+#: lexsup.c:281
+msgid "Strip symbols in discarded sections"
+msgstr "Éliminer les symboles des sections éliminées"
+
+#: lexsup.c:283
+msgid "Do not strip symbols in discarded sections"
+msgstr "Ne pas éliminer les symboles des sections éliminées"
+
+#: lexsup.c:285
+msgid "Trace file opens"
+msgstr "Ouverture des fichiers de trace"
+
+#: lexsup.c:287
+msgid "Read linker script"
+msgstr "Lecture du script de l'éditeur de lien"
+
+#: lexsup.c:289
+msgid "Read default linker script"
+msgstr "Lecture du script par défaut de l'éditeur de lien"
+
+#: lexsup.c:293 lexsup.c:311 lexsup.c:379 lexsup.c:400 lexsup.c:494
+#: lexsup.c:519 lexsup.c:554
+msgid "SYMBOL"
+msgstr "SYMBOLE"
+
+#: lexsup.c:293
+msgid "Start with undefined reference to SYMBOL"
+msgstr "Débuter avec une référence indéfinie au SYMBOLE"
+
+#: lexsup.c:296
+msgid "[=SECTION]"
+msgstr "[=SECTION]"
+
+#: lexsup.c:297
+msgid "Don't merge input [SECTION | orphan] sections"
+msgstr "Ne pas fusionner les sections d'entrée [SECTION | orpheline]"
+
+#: lexsup.c:299
+msgid "Build global constructor/destructor tables"
+msgstr "Bâtir les tables de constructeurs/destructeurs globaux"
+
+#: lexsup.c:301
+msgid "Print version information"
+msgstr "Afficher les informations de version"
+
+#: lexsup.c:303
+msgid "Print version and emulation information"
+msgstr "Afficher les information de version et d'émulation"
+
+#: lexsup.c:305
+msgid "Discard all local symbols"
+msgstr "Ignorer tous les symboles locaux"
+
+#: lexsup.c:307
+msgid "Discard temporary local symbols (default)"
+msgstr "Ignorer tous les symboles locaux temporaires (par défaut)"
+
+#: lexsup.c:309
+msgid "Don't discard any local symbols"
+msgstr "Ne pas ignorer tous les symboles locaux"
+
+#: lexsup.c:311
+msgid "Trace mentions of SYMBOL"
+msgstr "Tracer les mentions de SYMBOLE"
+
+#: lexsup.c:313 lexsup.c:461 lexsup.c:463
+msgid "PATH"
+msgstr "CHEMIN"
+
+#: lexsup.c:313
+msgid "Default search path for Solaris compatibility"
+msgstr "Chemin par défaut de recherche pour la compatibilité Solaris"
+
+#: lexsup.c:316
+msgid "Start a group"
+msgstr "Débuter un groupe"
+
+#: lexsup.c:318
+msgid "End a group"
+msgstr "Terminer un groupe"
+
+#: lexsup.c:322
+msgid "Accept input files whose architecture cannot be determined"
+msgstr "Accepter les fichiers à l'entrée dont l'architecture ne peut être déterminée"
+
+#: lexsup.c:326
+msgid "Reject input files whose architecture is unknown"
+msgstr "Rejeter les fichiers à l'entrée dont l'architecture est inconnue"
+
+#: lexsup.c:329
+msgid ""
+"Set DT_NEEDED tags for DT_NEEDED entries in\n"
+"\t\t\t\tfollowing dynamic libs"
+msgstr ""
+"Initialiser les étiquettes DT_NEEDED pour les entrées DT_NEEDED dans\n"
+"\t\t\t\tsuivant les bibliothèques dynamiques"
+
+#: lexsup.c:332
+msgid ""
+"Do not set DT_NEEDED tags for DT_NEEDED entries\n"
+"\t\t\t\tin following dynamic libs"
+msgstr ""
+"Ne pas initialiser les étiquettes DT_NEEDED pour les entrées DT_NEEDED\n"
+"\t\t\t\tsuivant les bibliothèques dynamiques"
+
+#: lexsup.c:335
+msgid "Only set DT_NEEDED for following dynamic libs if used"
+msgstr "Initialiser seulement DT_NEEDED pour les bibliothèques dynamiques suivantes si utilisées"
+
+#: lexsup.c:338
+msgid "Always set DT_NEEDED for following dynamic libs"
+msgstr "Toujours initialiser DT_NEEDED pour les bibliothèques dynamiques suivantes"
+
+#: lexsup.c:341
+msgid "Ignored for SunOS compatibility"
+msgstr "Ignoré pour la compatibilité avec SunOS"
+
+#: lexsup.c:343
+msgid "Link against shared libraries"
+msgstr "Établir des liens vis à vis des bibliothèques partagées"
+
+#: lexsup.c:349
+msgid "Do not link against shared libraries"
+msgstr "Ne pas établir de liens vis à vis des bibliothèques partagées"
+
+#: lexsup.c:357
+msgid "Bind global references locally"
+msgstr "Lier les référence locales globales"
+
+#: lexsup.c:359
+msgid "Bind global function references locally"
+msgstr "Lier localement les référence globales à des fonctions"
+
+#: lexsup.c:361
+msgid "Check section addresses for overlaps (default)"
+msgstr "Vérifier les adresses de section pour le chevauchement (par défaut)"
+
+#: lexsup.c:364
+msgid "Do not check section addresses for overlaps"
+msgstr "Ne pas vérifier les adresses des sections pour le chevauchement"
+
+#: lexsup.c:367
+msgid "Output cross reference table"
+msgstr "Produire la table des références croisées"
+
+#: lexsup.c:369
+msgid "SYMBOL=EXPRESSION"
+msgstr "SYMBOLE=EXPRESSION"
+
+#: lexsup.c:369
+msgid "Define a symbol"
+msgstr "Définir un symbole"
+
+#: lexsup.c:371
+msgid "[=STYLE]"
+msgstr "[=STYLE]"
+
+#: lexsup.c:371
+msgid "Demangle symbol names [using STYLE]"
+msgstr "Recouvrir les noms des symboles encodés par mutilisation [utilisant le STYLE]"
+
+#: lexsup.c:374
+msgid "Generate embedded relocs"
+msgstr "Générer des relocalisations imbriqués"
+
+#: lexsup.c:376
+msgid "Treat warnings as errors"
+msgstr "Traiter les avertissements comme des erreurs"
+
+#: lexsup.c:379
+msgid "Call SYMBOL at unload-time"
+msgstr "Appeler le SYMBOLE au moment du déchargement"
+
+#: lexsup.c:381
+msgid "Force generation of file with .exe suffix"
+msgstr "Force la génération de fichier avec le suffixe .exe"
+
+#: lexsup.c:383
+msgid "Remove unused sections (on some targets)"
+msgstr "Enlever les sections inutilisées (sur quelques cibles)"
+
+#: lexsup.c:386
+msgid "Don't remove unused sections (default)"
+msgstr "Ne pas enlever les sections inutilisées (par défaut)"
+
+#: lexsup.c:389
+msgid "List removed unused sections on stderr"
+msgstr "Afficher sur stderr la liste des sections inutilisées et supprimées"
+
+#: lexsup.c:392
+msgid "Do not list removed unused sections"
+msgstr "Ne pas afficher la liste des sections inutilisées supprimées"
+
+#: lexsup.c:395
+msgid "Set default hash table size close to <NUMBER>"
+msgstr "Initialiser la table de hachage par défaut près de <NUMÉRO>"
+
+#: lexsup.c:398
+msgid "Print option help"
+msgstr "Afficher l'aide-mémoire"
+
+#: lexsup.c:400
+msgid "Call SYMBOL at load-time"
+msgstr "Appeler le SYMBOLE au moment du chargement"
+
+#: lexsup.c:402
+msgid "Write a map file"
+msgstr "Écrire un fichier de projection"
+
+#: lexsup.c:404
+msgid "Do not define Common storage"
+msgstr "Ne pas définir le stockage commun"
+
+#: lexsup.c:406
+msgid "Do not demangle symbol names"
+msgstr "Ne pas recouvrir les noms des symboles encodés par mutilisation"
+
+#: lexsup.c:408
+msgid "Use less memory and more disk I/O"
+msgstr "Utiliser moins de mémoire et plus d'espace disque"
+
+#: lexsup.c:410
+msgid "Do not allow unresolved references in object files"
+msgstr "Ne pas permettre les références indéfinis dans les objets partagés"
+
+#: lexsup.c:413
+msgid "Allow unresolved references in shared libaries"
+msgstr "Permettre les références non résolues dans les bibliothèques partagées"
+
+#: lexsup.c:417
+msgid "Do not allow unresolved references in shared libs"
+msgstr "Ne pas permettre les références non résolues dans les bibliothèques partagés"
+
+#: lexsup.c:421
+msgid "Allow multiple definitions"
+msgstr "Autoriser des définitions multiples"
+
+#: lexsup.c:423
+msgid "Disallow undefined version"
+msgstr "Ne pas permettre de version indéfinie"
+
+#: lexsup.c:425
+msgid "Create default symbol version"
+msgstr "Créer la version de symbole par défaut"
+
+#: lexsup.c:428
+msgid "Create default symbol version for imported symbols"
+msgstr "Créer la version de symbole par défaut pour les symboles importés"
+
+#: lexsup.c:431
+msgid "Don't warn about mismatched input files"
+msgstr "Ne pas avertir à propos des non-concordances dans les fichiers d'entrée"
+
+#: lexsup.c:434
+msgid "Don't warn on finding an incompatible library"
+msgstr "Ne pas avertir lorsqu'une bibliothèque incompatible est trouvée"
+
+#: lexsup.c:437
+msgid "Turn off --whole-archive"
+msgstr "Désactiver --whole-archive"
+
+#: lexsup.c:439
+msgid "Create an output file even if errors occur"
+msgstr "Créer un fichier de sortie même si des erreurs surviennent"
+
+#: lexsup.c:444
+msgid ""
+"Only use library directories specified on\n"
+"\t\t\t\tthe command line"
+msgstr ""
+"Utiliser seuelement les répertoires de bibliothèques spécifiés sur\n"
+"la ligne de commande"
+
+#: lexsup.c:447
+msgid "Specify target of output file"
+msgstr "Spécifier un fichier cible de sortie"
+
+#: lexsup.c:450
+msgid "Ignored for Linux compatibility"
+msgstr "Ignoré pour la compatibilité avec Linux"
+
+#: lexsup.c:453
+msgid "Reduce memory overheads, possibly taking much longer"
+msgstr "Réduire la surcharge en mémoire, en prenant possiblement plus de temps"
+
+#: lexsup.c:456
+msgid "Relax branches on certain targets"
+msgstr "Relâcher les branches de certaines cibles"
+
+#: lexsup.c:459
+msgid "Keep only symbols listed in FILE"
+msgstr "Conserver uniquement les symboles listés dans le FICHIER"
+
+#: lexsup.c:461
+msgid "Set runtime shared library search path"
+msgstr "Initialisé le chemin de recherche des bibliothèques partagées pour l'exécution"
+
+#: lexsup.c:463
+msgid "Set link time shared library search path"
+msgstr "Initialisé le chemin de recherche des bibliothèques partagées pour l'édition de liens"
+
+#: lexsup.c:466
+msgid "Create a shared library"
+msgstr "Créer une bibliothèque partagée"
+
+#: lexsup.c:470
+msgid "Create a position independent executable"
+msgstr "Créer un exécutable à position indépendante"
+
+#: lexsup.c:474
+msgid "Sort common symbols by size"
+msgstr "Trier les symboles communs par taille"
+
+#: lexsup.c:478
+msgid "name|alignment"
+msgstr "nom|alignement"
+
+#: lexsup.c:479
+msgid "Sort sections by name or maximum alignment"
+msgstr "Tries les sections par le nom ou l'alignement maximal"
+
+#: lexsup.c:481
+msgid "COUNT"
+msgstr "DÉCOMPTE"
+
+#: lexsup.c:481
+msgid "How many tags to reserve in .dynamic section"
+msgstr "Combien d'étiquettes réservées dans la section .dynamic"
+
+#: lexsup.c:484
+msgid "[=SIZE]"
+msgstr "[=TAILLE]"
+
+#: lexsup.c:484
+msgid "Split output sections every SIZE octets"
+msgstr "Découper à la sortie les sections à chaque NOMBRE d'octets"
+
+#: lexsup.c:487
+msgid "[=COUNT]"
+msgstr "[=DÉCOMPTE]"
+
+#: lexsup.c:487
+msgid "Split output sections every COUNT relocs"
+msgstr "Découper à la sortie les sections à chaque NOMBRE de relocalisations"
+
+#: lexsup.c:490
+msgid "Print memory usage statistics"
+msgstr "Afficher les statistiques de l'utilisation de la mémoire"
+
+#: lexsup.c:492
+msgid "Display target specific options"
+msgstr "Afficher les options spécifiques cibles"
+
+#: lexsup.c:494
+msgid "Do task level linking"
+msgstr "Composer des liens au niveau de l'exécution de la tache"
+
+#: lexsup.c:496
+msgid "Use same format as native linker"
+msgstr "Utiliser le même format que l'éditeur de lien natif"
+
+#: lexsup.c:498
+msgid "SECTION=ADDRESS"
+msgstr "SECTION=ADRESSE"
+
+#: lexsup.c:498
+msgid "Set address of named section"
+msgstr "Initialisé l'adresse de la section nommé"
+
+#: lexsup.c:501
+msgid "Set address of .bss section"
+msgstr "Initialisé l'adresse de la section .bss"
+
+#: lexsup.c:503
+msgid "Set address of .data section"
+msgstr "Initialisé l'adresse de la section .data"
+
+#: lexsup.c:505
+msgid "Set address of .text section"
+msgstr "Initialisé l'adresse de la section .text"
+
+#: lexsup.c:508
+msgid ""
+"How to handle unresolved symbols. <method> is:\n"
+"\t\t\t\tignore-all, report-all, ignore-in-object-files,\n"
+"\t\t\t\tignore-in-shared-libs"
+msgstr ""
+"Comment traiter les symboles non résolus. <méthode> est:\n"
+"\t\t\t\tignore-all, report-all, ignore-in-object-files,\n"
+"\t\t\t\tignore-in-shared-libs"
+
+#: lexsup.c:512
+msgid "Output lots of information during link"
+msgstr "Afficher des tas d'information durant l'édition de lien"
+
+#: lexsup.c:516
+msgid "Read version information script"
+msgstr "Lire le script des informations de version"
+
+#: lexsup.c:519
+msgid ""
+"Take export symbols list from .exports, using\n"
+"\t\t\t\tSYMBOL as the version."
+msgstr ""
+"Prendre la liste des symboles exportés de .exports, en utilisant\n"
+"\t\t\t\tSYMBOLE comme version."
+
+#: lexsup.c:522
+msgid "Add data symbols to dynamic list"
+msgstr "Ajouter les symboles de données à la liste dynamique"
+
+#: lexsup.c:524
+msgid "Use C++ operator new/delete dynamic list"
+msgstr "Utiliser la liste dynamique d'opérateur C++ new/delete"
+
+#: lexsup.c:526
+msgid "Use C++ typeinfo dynamic list"
+msgstr "Utiliser la liste dynamique C++ typeinfo"
+
+#: lexsup.c:528
+msgid "Read dynamic list"
+msgstr "Lire la liste dynamique"
+
+#: lexsup.c:530
+msgid "Warn about duplicate common symbols"
+msgstr "AVERTIR au sujet des symboles communs dupliqués"
+
+#: lexsup.c:532
+msgid "Warn if global constructors/destructors are seen"
+msgstr "AVERTIR si des constructeurs/destructeurs globaux sont détectés"
+
+#: lexsup.c:535
+msgid "Warn if the multiple GP values are used"
+msgstr "AVERTIR si des valeurs GP multiples sont utilisées"
+
+#: lexsup.c:537
+msgid "Warn only once per undefined symbol"
+msgstr "AVERTIR seulement une fois pour chaque symbole indéfini"
+
+#: lexsup.c:539
+msgid "Warn if start of section changes due to alignment"
+msgstr "AVERTIR si le début de la section est modifié en raison de l'alignement"
+
+#: lexsup.c:542
+msgid "Warn if shared object has DT_TEXTREL"
+msgstr "Avertir si l'objet partagé a DT_TEXTREL"
+
+#: lexsup.c:546
+msgid "Report unresolved symbols as warnings"
+msgstr "Rapporter les symboles non résolus par avertissement"
+
+#: lexsup.c:549
+msgid "Report unresolved symbols as errors"
+msgstr "Rapporter des symboles non résolus comme des errreurs"
+
+#: lexsup.c:551
+msgid "Include all objects from following archives"
+msgstr "Inclure tous les objets des archives suivantes"
+
+#: lexsup.c:554
+msgid "Use wrapper functions for SYMBOL"
+msgstr "Utiliser les fonctions d'emballage pour SYMBOLE"
+
+#: lexsup.c:701
+msgid "%P: unrecognized option '%s'\n"
+msgstr "%P: option « %s » non reocnnue\n"
+
+#: lexsup.c:705
+msgid "%P%F: use the --help option for usage information\n"
+msgstr "%P%F: utiliser --help pour afficher l'aide-mémoire\n"
+
+#: lexsup.c:723
+msgid "%P%F: unrecognized -a option `%s'\n"
+msgstr "%P%F: -a option non reocnnue « %s »\n"
+
+#: lexsup.c:736
+msgid "%P%F: unrecognized -assert option `%s'\n"
+msgstr "%P%F: -assert option non reconnue « %s »\n"
+
+#: lexsup.c:779
+msgid "%F%P: unknown demangling style `%s'"
+msgstr "%F%P: style inconnu de recouvrement du transcodage par mutilisation « %s »"
+
+#: lexsup.c:841
+msgid "%P%F: invalid number `%s'\n"
+msgstr "%P%F: nombre invalide « %s »\n"
+
+#: lexsup.c:939
+msgid "%P%F: bad --unresolved-symbols option: %s\n"
+msgstr "%P%F: option erronée de --unresolved-symbols: %s\n"
+
+#. This can happen if the user put "-rpath,a" on the command
+#. line. (Or something similar. The comma is important).
+#. Getopt becomes confused and thinks that this is a -r option
+#. but it cannot parse the text after the -r so it refuses to
+#. increment the optind counter. Detect this case and issue
+#. an error message here. We cannot just make this a warning,
+#. increment optind, and continue because getopt is too confused
+#. and will seg-fault the next time around.
+#: lexsup.c:1013
+msgid "%P%F: bad -rpath option\n"
+msgstr "%P%F: option -rpath non reconnue\n"
+
+#: lexsup.c:1124
+msgid "%P%F: -shared not supported\n"
+msgstr "%P%F: -shared non supporté\n"
+
+#: lexsup.c:1133
+msgid "%P%F: -pie not supported\n"
+msgstr "%P%F: -pie n'est pas supportée\n"
+
+#: lexsup.c:1143
+msgid "name"
+msgstr "nom"
+
+#: lexsup.c:1145
+msgid "alignment"
+msgstr "alignement"
+
+#: lexsup.c:1148
+msgid "%P%F: invalid section sorting option: %s\n"
+msgstr "%P%F:option de trie de section invalide: %s\n"
+
+#: lexsup.c:1180
+msgid "%P%F: invalid argument to option \"--section-start\"\n"
+msgstr "%P%F: argument invalide pour l'option \"--section-start\"\n"
+
+#: lexsup.c:1187
+msgid "%P%F: missing argument(s) to option \"--section-start\"\n"
+msgstr "%P%F: argument(s) manquant(s) pour l'option \"--section-start\"\n"
+
+#: lexsup.c:1398
+msgid "%P%F: may not nest groups (--help for usage)\n"
+msgstr "%P%F: ne peut imbriquer les groupes (--help pour l'usage)\n"
+
+#: lexsup.c:1405
+msgid "%P%F: group ended before it began (--help for usage)\n"
+msgstr "%P%F: fin du groupe avant son début (--help pour l'usage)\n"
+
+#: lexsup.c:1433
+msgid "%P%X: --hash-size needs a numeric argument\n"
+msgstr "%P%X: --hash-size a beoin d'un argument numérique\n"
+
+#: lexsup.c:1484 lexsup.c:1497
+msgid "%P%F: invalid hex number `%s'\n"
+msgstr "%P%F: nombre hexadécimal invalide « %s »\n"
+
+#: lexsup.c:1533
+#, c-format
+msgid "Usage: %s [options] file...\n"
+msgstr "Usage: %s [options] fichier...\n"
+
+#: lexsup.c:1535
+#, c-format
+msgid "Options:\n"
+msgstr "Options:\n"
+
+#: lexsup.c:1613
+#, c-format
+msgid " @FILE"
+msgstr " @FICHIER"
+
+#: lexsup.c:1616
+#, c-format
+msgid "Read options from FILE\n"
+msgstr "Lire les options à partir du FICHIER\n"
+
+#. Note: Various tools (such as libtool) depend upon the
+#. format of the listings below - do not change them.
+#: lexsup.c:1621
+#, c-format
+msgid "%s: supported targets:"
+msgstr "%s: cibles supportées:"
+
+#: lexsup.c:1629
+#, c-format
+msgid "%s: supported emulations: "
+msgstr "%s: émulations supportées: "
+
+#: lexsup.c:1634
+#, c-format
+msgid "%s: emulation specific options:\n"
+msgstr "%s: options spécifiques d'émulation:\n"
+
+#: lexsup.c:1639
+#, c-format
+msgid "Report bugs to %s\n"
+msgstr "Rapporter toutes anomalies à %s\n"
+
+#: mri.c:291
+msgid "%P%F: unknown format type %s\n"
+msgstr "%P%F: type de format inconnu %s\n"
+
+#: pe-dll.c:367
+#, c-format
+msgid "%XUnsupported PEI architecture: %s\n"
+msgstr "%XArchitecture PEI non supportée: %s\n"
+
+#: pe-dll.c:673
+#, c-format
+msgid "%XCannot export %s: invalid export name\n"
+msgstr "%XNe peut exporter %s: nom d'export invalide\n"
+
+#: pe-dll.c:729
+#, c-format
+msgid "%XError, duplicate EXPORT with ordinals: %s (%d vs %d)\n"
+msgstr "%XErreur, duplicattion EXPORT avec nombre ordinal: %s (%d vs %d)\n"
+
+#: pe-dll.c:736
+#, c-format
+msgid "Warning, duplicate EXPORT: %s\n"
+msgstr "AVERTISSEMENT, duplication EXPORT: %s\n"
+
+#: pe-dll.c:823
+#, c-format
+msgid "%XCannot export %s: symbol not defined\n"
+msgstr "%XNe peut exporter %s: symbole indéfini\n"
+
+#: pe-dll.c:829
+#, c-format
+msgid "%XCannot export %s: symbol wrong type (%d vs %d)\n"
+msgstr "%XNe peut exporter %s: mauvais type de symbole (%d vs %d)\n"
+
+#: pe-dll.c:836
+#, c-format
+msgid "%XCannot export %s: symbol not found\n"
+msgstr "%XNe peut exporter %s: symbole non repéré\n"
+
+#: pe-dll.c:949
+#, c-format
+msgid "%XError, ordinal used twice: %d (%s vs %s)\n"
+msgstr "%XErreur, ordinal utilisé 2 fois: %d (%s vs %s)\n"
+
+#: pe-dll.c:1297
+#, c-format
+msgid "%XError: %d-bit reloc in dll\n"
+msgstr "%XErreur: %d-bit relocalisation dans dll\n"
+
+#: pe-dll.c:1425
+#, c-format
+msgid "%s: Can't open output def file %s\n"
+msgstr "%s: ne peut ouvrir le fichier def %s\n"
+
+#: pe-dll.c:1568
+#, c-format
+msgid "; no contents available\n"
+msgstr "; aucun contenu disponible\n"
+
+#: pe-dll.c:2364
+msgid "%C: variable '%T' can't be auto-imported. Please read the documentation for ld's --enable-auto-import for details.\n"
+msgstr "%C: variable « %T » ne peut être auto-importée. SVP lire la documentation de ld --enable-auto-import pour plus de détails.\n"
+
+#: pe-dll.c:2394
+#, c-format
+msgid "%XCan't open .lib file: %s\n"
+msgstr "%XNe peut ouvrir le fichier .lib: %s\n"
+
+#: pe-dll.c:2399
+#, c-format
+msgid "Creating library file: %s\n"
+msgstr "Création du fichier de bibliothèque: %s\n"
+
+#~ msgid "%F%S non constant expression for %s\n"
+#~ msgstr "%F%S expression de non constante: %s\n"
+
+#~ msgid "%P%F: out of memory during initialization"
+#~ msgstr "%P%F: mémoire épuisée durant l'initialisation"
+
+#~ msgid "%P%F: -static and -shared may not be used together\n"
+#~ msgstr "%P%F: -static et -shared ne peuvent être utilisés ensemble\n"
+
+#~ msgid "%P%X: generated"
+#~ msgstr "%P%X: généré"
+
+#~ msgid "%F%P: %s uses undefined section %s\n"
+#~ msgstr "%F%P: %s utilise une section indéfinie %s\n"
+
+#~ msgid "%F%P: %s forward reference of section %s\n"
+#~ msgstr "%F%P: %s référence avant de la section %s\n"
+
+#~ msgid "%F%P: cannot open %s for %s: %E\n"
+#~ msgstr "%F%P: ne peut ouvrir %s pour %s: %E\n"
+
+#~ msgid "%F%P: cannot open %s: %E\n"
+#~ msgstr "%F%P: ne peut ouvrir %s: %E\n"
+
+#~ msgid "%P%F: unknown architecture: %s\n"
+#~ msgstr "%P%F: architecture inconnue: %s\n"
+
+#~ msgid "%P%F: target architecture respecified\n"
+#~ msgstr "%P%F: architecture cible re-spécifiée\n"
+
+#~ msgid "%P: %B: warning: ignoring duplicate `%s' section symbol `%s'\n"
+#~ msgstr "%P: %B: AVERTISSEMENT: duplication ignorée « %s » dans la section symbole « %s »\n"
+
+#~ msgid "%P: %B: warning: duplicate section `%s' has different size\n"
+#~ msgstr "%P: %B: AVERTISSEMENT: section dupliquée « %s » a un taille différente\n"
+
+#~ msgid "%P: no [COMMON] command, defaulting to .bss\n"
+#~ msgstr "%P: pas de commande [COMMUNE], utilisation par défaut de .bss\n"
+
+#~ msgid "%P%F: -r and --mpc860c0 may not be used together\n"
+#~ msgstr "%P%F: -r et --mpc860c0 ne peuvent être utilisés ensemble\n"
+
+#~ msgid "Allow no undefined symbols"
+#~ msgstr "Ne pas permettre de symboles indéfinis"
+
+#~ msgid "Allow undefined symbols in shared objects (the default)"
+#~ msgstr "Permettre les symboles indéfinis dans les objets partagés (par défaut)"
+
+#~ msgid "[=WORDS]"
+#~ msgstr "[=MOTS]"
+
+#~ msgid ""
+#~ "Modify problematic branches in last WORDS (1-10,\n"
+#~ "\t\t\t\tdefault 5) words of a page"
+#~ msgstr ""
+#~ "Modifier les branches problématiques dans les derniers MOTS (1-10,\n"
+#~ "\t\t\t\tpar défaut 5 derniers) mots de la page"
+
+#~ msgid "%P%F: invalid argument to option \"mpc860c0\"\n"
+#~ msgstr "%P%F: argument invalide pour l'option « mpc860c0 »\n"
+
+#~ msgid " create __imp_<SYMBOL> as well.\n"
+#~ msgstr " créer __imp_<SYMBOL> aussi.\n"
+
+#~ msgid " unless user specifies one\n"
+#~ msgstr " à moins que l'usager en spécifie une\n"
+
+#~ msgid " --dll-search-prefix=<string> When linking dynamically to a dll witout an\n"
+#~ msgstr " --dll-search-prefix=<chaîne> lors du lien dynamique à un DLL sans un\n"
+
+#~ msgid " importlib, use <string><basename>.dll \n"
+#~ msgstr " bibliothèque d'importation, utilier <chaîne><nom_de_base>.dll \n"
+
+#~ msgid " in preference to lib<basename>.dll \n"
+#~ msgstr " à la place de lib<nom_de_base>.dll \n"
+
+#~ msgid "Archive member included"
+#~ msgstr "Membre d'archive inclus"
+
+#~ msgid "Don't merge orphan sections with the same name"
+#~ msgstr "Ne pas fusionner les section orphelines avec le même nom"
diff --git a/binutils-2.21/ld/po/ga.gmo b/binutils-2.21/ld/po/ga.gmo
new file mode 100644
index 0000000..b308044
--- /dev/null
+++ b/binutils-2.21/ld/po/ga.gmo
Binary files differ
diff --git a/binutils-2.21/ld/po/ga.po b/binutils-2.21/ld/po/ga.po
new file mode 100644
index 0000000..54a43de
--- /dev/null
+++ b/binutils-2.21/ld/po/ga.po
@@ -0,0 +1,1998 @@
+# Irish translations for ld.
+# Copyright (C) 2005 Free Software Foundation, Inc.
+# This file is distributed under the same license as the ld package.
+# Kevin Patrick Scannell <kscanne@gmail.com>, 2005, 2006, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: ld 2.17.90\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-06-27 16:44+0930\n"
+"PO-Revision-Date: 2007-08-05 18:39-0500\n"
+"Last-Translator: Kevin Scannell <kscanne@gmail.com>\n"
+"Language-Team: Irish <gaeilge-gnulinux@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: emultempl/armcoff.em:72
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code Tacaigh le comh-inoibritheacht le seanchód\n"
+
+#: emultempl/armcoff.em:73
+#, c-format
+msgid " --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"
+msgstr " --thumb-entry=<siom> Socraigh siombail ordóige <siom> mar phointe iontrála\n"
+
+#: emultempl/armcoff.em:121
+#, c-format
+msgid "Errors encountered processing file %s"
+msgstr "Tharla earráidí agus comhad %s á phróiseáil"
+
+#: emultempl/armcoff.em:189 emultempl/pe.em:1528
+msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"
+msgstr "%P: rabhadh: sáraíonn '--thumb-entry %s' rogha '-e %s'\n"
+
+#: emultempl/armcoff.em:194 emultempl/pe.em:1533
+msgid "%P: warning: connot find thumb start symbol %s\n"
+msgstr "%P: rabhadh: ní féidir siombail ordóige tosaigh %s a aimsiú\n"
+
+#: emultempl/pe.em:311
+#, c-format
+msgid " --base_file <basefile> Generate a base file for relocatable DLLs\n"
+msgstr " --base_file <bunchomhad> Gin bunchomhad do DLLanna in-athshuite\n"
+
+#: emultempl/pe.em:312
+#, c-format
+msgid " --dll Set image base to the default for DLLs\n"
+msgstr " --dll Socraigh bun na híomhá de réir réamhshocraithe do DLLanna\n"
+
+#: emultempl/pe.em:313
+#, c-format
+msgid " --file-alignment <size> Set file alignment\n"
+msgstr " --file-alignment <méid> Socraigh ailíniú comhad\n"
+
+#: emultempl/pe.em:314
+#, c-format
+msgid " --heap <size> Set initial size of the heap\n"
+msgstr " --heap <méid> Socraigh bunmhéid an chairn\n"
+
+#: emultempl/pe.em:315
+#, c-format
+msgid " --image-base <address> Set start address of the executable\n"
+msgstr " --image-base <seoladh> Socraigh seoladh tosaigh an chláir inrite\n"
+
+#: emultempl/pe.em:316
+#, c-format
+msgid " --major-image-version <number> Set version number of the executable\n"
+msgstr " --major-image-version <uimhir> Socraigh uimhir leagan an chláir inrite\n"
+
+#: emultempl/pe.em:317
+#, c-format
+msgid " --major-os-version <number> Set minimum required OS version\n"
+msgstr " --major-os-version <uimhir> Socraigh an leasú CO is lú atá riachtanach\n"
+
+#: emultempl/pe.em:318
+#, c-format
+msgid " --major-subsystem-version <number> Set minimum required OS subsystem version\n"
+msgstr " --major-subsystem-version <uimhir> Socraigh an leagan fo-chórais is lú atá riachtanach\n"
+
+#: emultempl/pe.em:319
+#, c-format
+msgid " --minor-image-version <number> Set revision number of the executable\n"
+msgstr " --minor-image-version <uimhir> Socraigh uimhir leasaithe an chláir inrite\n"
+
+#: emultempl/pe.em:320
+#, c-format
+msgid " --minor-os-version <number> Set minimum required OS revision\n"
+msgstr " --minor-os-version <uimhir> Socraigh leasú CO is lú atá riachtanach\n"
+
+#: emultempl/pe.em:321
+#, c-format
+msgid " --minor-subsystem-version <number> Set minimum required OS subsystem revision\n"
+msgstr " --minor-subsystem-version <uimhir> Socraigh leasú fo-chórais is lú atá riachtanach\n"
+
+#: emultempl/pe.em:322
+#, c-format
+msgid " --section-alignment <size> Set section alignment\n"
+msgstr " --section-alignment <méid> Socraigh ailíniú rannán\n"
+
+#: emultempl/pe.em:323
+#, c-format
+msgid " --stack <size> Set size of the initial stack\n"
+msgstr " --stack <méid> Socraigh bunmhéid na cruaiche\n"
+
+#: emultempl/pe.em:324
+#, c-format
+msgid " --subsystem <name>[:<version>] Set required OS subsystem [& version]\n"
+msgstr " --subsystem <ainm>[:<leagan>] Socraigh fo-chóras CO [& leagan] is lú atá riachtanach\n"
+
+#: emultempl/pe.em:325
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code Tacaigh le comh-inoibritheacht le seanchód\n"
+
+#: emultempl/pe.em:326
+#, c-format
+msgid " --thumb-entry=<symbol> Set the entry point to be Thumb <symbol>\n"
+msgstr " --thumb-entry=<siom> Socraigh siombail ordóige <siom> mar phointe iontrála\n"
+
+#: emultempl/pe.em:328
+#, c-format
+msgid " --add-stdcall-alias Export symbols with and without @nn\n"
+msgstr " --add-stdcall-alias Easpórtáil siombailí le, agus gan @nn\n"
+
+#: emultempl/pe.em:329
+#, c-format
+msgid " --disable-stdcall-fixup Don't link _sym to _sym@nn\n"
+msgstr " --disable-stdcall-fixup Ná nasc _sym le _sym@nn\n"
+
+#: emultempl/pe.em:330
+#, c-format
+msgid " --enable-stdcall-fixup Link _sym to _sym@nn without warnings\n"
+msgstr " --enable-stdcall-fixup Nasc _sym le _sym@nn gan rabhaidh\n"
+
+#: emultempl/pe.em:331
+#, c-format
+msgid " --exclude-symbols sym,sym,... Exclude symbols from automatic export\n"
+msgstr " --exclude-symbols siom,siom,... Eisiaigh siombailí ó easpórtáil uathoibríoch\n"
+
+#: emultempl/pe.em:332
+#, c-format
+msgid " --exclude-libs lib,lib,... Exclude libraries from automatic export\n"
+msgstr " --exclude-symbols leabh,leabh,... Eisiaigh leabharlanna ó easpórtáil uathoibríoch\n"
+
+#: emultempl/pe.em:333
+#, c-format
+msgid " --export-all-symbols Automatically export all globals to DLL\n"
+msgstr " --export-all-symbols Easpórtáil gach siombail chomhchoiteann go DLL go huathoibríoch\n"
+
+#: emultempl/pe.em:334
+#, c-format
+msgid " --kill-at Remove @nn from exported symbols\n"
+msgstr " --kill-at Bain @nn ó shiombailí easpórtáilte\n"
+
+#: emultempl/pe.em:335
+#, c-format
+msgid " --out-implib <file> Generate import library\n"
+msgstr " --out-implib <comhad> Cruthaigh leabharlann iompórtála\n"
+
+#: emultempl/pe.em:336
+#, c-format
+msgid " --output-def <file> Generate a .DEF file for the built DLL\n"
+msgstr " --output-def <comhad> Cruthaigh comhad .DEF le haghaidh an DLL tógtha\n"
+
+#: emultempl/pe.em:337
+#, c-format
+msgid " --warn-duplicate-exports Warn about duplicate exports.\n"
+msgstr " --warn-duplicate-exports Tabhair rabhadh faoi easpórtálacha dúbailte.\n"
+
+#: emultempl/pe.em:338
+#, c-format
+msgid ""
+" --compat-implib Create backward compatible import libs;\n"
+" create __imp_<SYMBOL> as well.\n"
+msgstr ""
+" --compat-implib Cruthaigh leabharlanna iompórtála atá\n"
+" comhoiriúnach go siarghabhálach;\n"
+" cruthaigh __imp_<SIOMBAIL> freisin.\n"
+
+#: emultempl/pe.em:340
+#, c-format
+msgid ""
+" --enable-auto-image-base Automatically choose image base for DLLs\n"
+" unless user specifies one\n"
+msgstr ""
+" --enable-auto-image-base Roghnaigh bun na híomhá le haghaidh\n"
+" DLL mura bhfuil bun roghnaithe cheana\n"
+
+#: emultempl/pe.em:342
+#, c-format
+msgid " --disable-auto-image-base Do not auto-choose image base. (default)\n"
+msgstr " --disable-auto-image-base Ná roghnaigh bun na híomhá go huathoibríoch. (réamhshocrú)\n"
+
+#: emultempl/pe.em:343
+#, c-format
+msgid ""
+" --dll-search-prefix=<string> When linking dynamically to a dll without\n"
+" an importlib, use <string><basename>.dll\n"
+" in preference to lib<basename>.dll \n"
+msgstr ""
+" --dll-search-prefix=<teaghr> Agus nascadh le dll gan leabharlann\n"
+" iompórtála, úsáid <teaghr><bunainm>.dll\n"
+" in ionad lib<bunainm>.dll \n"
+
+#: emultempl/pe.em:346
+#, c-format
+msgid ""
+" --enable-auto-import Do sophistcated linking of _sym to\n"
+" __imp_sym for DATA references\n"
+msgstr ""
+" --enable-auto-import Déan nascadh sofaisticiúil de _sym le\n"
+" __imp_sym do thagairtí DATA\n"
+
+#: emultempl/pe.em:348
+#, c-format
+msgid " --disable-auto-import Do not auto-import DATA items from DLLs\n"
+msgstr " --disable-auto-import Ná hiompórtáil míreanna DATA ó DLLanna go huathoibríoch\n"
+
+#: emultempl/pe.em:349
+#, c-format
+msgid ""
+" --enable-runtime-pseudo-reloc Work around auto-import limitations by\n"
+" adding pseudo-relocations resolved at\n"
+" runtime.\n"
+msgstr ""
+" --enable-runtime-pseudo-reloc Sáraigh teoranta uathiompórtála trí\n"
+" shúda-athshuímh réitithe ag am rite\n"
+" a chur leis.\n"
+
+#: emultempl/pe.em:352
+#, c-format
+msgid ""
+" --disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations for\n"
+" auto-imported DATA.\n"
+msgstr ""
+" --disable-runtime-pseudo-reloc Ná cuir súda-athshuímh am-rite leis\n"
+" le haghaidh DATA uathiompórtáilte.\n"
+
+#: emultempl/pe.em:354
+#, c-format
+msgid ""
+" --enable-extra-pe-debug Enable verbose debug output when building\n"
+" or linking to DLLs (esp. auto-import)\n"
+msgstr ""
+" --enable-extra-pe-debug Cumasaigh aschur foclach dífhabhtaithe\n"
+" agus DLL á thógáil, nó le linn nasctha\n"
+" le DLL (uathiompórtáil go háirithe)\n"
+
+#: emultempl/pe.em:357
+#, c-format
+msgid ""
+" --large-address-aware Executable supports virtual addresses\n"
+" greater than 2 gigabytes\n"
+msgstr ""
+" --large-address-aware Tacaíonn an clár inrite le seoltaí\n"
+" fíorúla níos mó ná 2 ghigibheart\n"
+
+#: emultempl/pe.em:424
+msgid "%P: warning: bad version number in -subsystem option\n"
+msgstr "%P: rabhadh: drochuimhir leagain i rogha -subsystem\n"
+
+#: emultempl/pe.em:455
+msgid "%P%F: invalid subsystem type %s\n"
+msgstr "%P%F: cineál neamhbhailí fo-chóras %s\n"
+
+#: emultempl/pe.em:494
+msgid "%P%F: invalid hex number for PE parameter '%s'\n"
+msgstr "%P%F: uimhir neamhbhailí heicsidheachúlach le haghaidh paraiméadair PE '%s'\n"
+
+#: emultempl/pe.em:511
+msgid "%P%F: strange hex info for PE parameter '%s'\n"
+msgstr "%P%F: eolas aisteach heics le haghaidh paraiméadair PE '%s'\n"
+
+#: emultempl/pe.em:528
+#, c-format
+msgid "%s: Can't open base file %s\n"
+msgstr "%s: Ní féidir bunchomhad %s a oscailt\n"
+
+#: emultempl/pe.em:744
+msgid "%P: warning, file alignment > section alignment.\n"
+msgstr "%P: rabhadh, ailíniú comhaid > ailíniú rannáin.\n"
+
+#: emultempl/pe.em:831 emultempl/pe.em:858
+#, c-format
+msgid "Warning: resolving %s by linking to %s\n"
+msgstr "Rabhadh: %s á réiteach trí nascadh le %s\n"
+
+#: emultempl/pe.em:836 emultempl/pe.em:863
+msgid "Use --enable-stdcall-fixup to disable these warnings\n"
+msgstr "Úsáid --enable-stdcall-fixup chun na rabhaidh seo a dhíchumasú\n"
+
+#: emultempl/pe.em:837 emultempl/pe.em:864
+msgid "Use --disable-stdcall-fixup to disable these fixups\n"
+msgstr "Úsáid --disable-stdcall-fixup chun na ceartúcháin seo a dhíchumasú\n"
+
+#: emultempl/pe.em:883
+#, c-format
+msgid "%C: Cannot get section contents - auto-import exception\n"
+msgstr "%C: Ní féidir ábhar an rannáin a fháil - eisceacht uathiompórtála\n"
+
+#: emultempl/pe.em:920
+#, c-format
+msgid "Info: resolving %s by linking to %s (auto-import)\n"
+msgstr "Eolas: %s á réiteach trí nascadh le %s (uathiompórtáil)\n"
+
+#: emultempl/pe.em:992
+msgid "%F%P: cannot perform PE operations on non PE output file '%B'.\n"
+msgstr "%F%P: ní féidir oibríochtaí PE a dhéanamh ar aschomhad neamh-PE '%B'.\n"
+
+#: emultempl/pe.em:1334
+#, c-format
+msgid "Errors encountered processing file %s\n"
+msgstr "Tharla earráidí agus comhad %s á phróiseáil\n"
+
+#: emultempl/pe.em:1357
+#, c-format
+msgid "Errors encountered processing file %s for interworking"
+msgstr "Tharla earráidí agus comhad %s á phróiseáil le haghaidh comh-inoibritheachta"
+
+#: emultempl/pe.em:1418 ldexp.c:530 ldlang.c:3082 ldlang.c:6087 ldlang.c:6118
+#: ldmain.c:1167
+msgid "%P%F: bfd_link_hash_lookup failed: %E\n"
+msgstr "%P%F: theip ar bfd_link_hash_lookup: %E\n"
+
+#: ldcref.c:166
+msgid "%X%P: bfd_hash_table_init of cref table failed: %E\n"
+msgstr "%X%P: theip ar bfd_hash_table_init tábla crostagartha a thúsú: %E\n"
+
+#: ldcref.c:172
+msgid "%X%P: cref_hash_lookup failed: %E\n"
+msgstr "%X%P: theip ar cref_hash_lookup: %E\n"
+
+#: ldcref.c:182
+msgid "%X%P: cref alloc failed: %E\n"
+msgstr "%X%P: theip ar dháileadh cref: %E\n"
+
+#: ldcref.c:362
+#, c-format
+msgid ""
+"\n"
+"Cross Reference Table\n"
+"\n"
+msgstr ""
+"\n"
+"Tábla Crostagartha\n"
+"\n"
+
+#: ldcref.c:363
+msgid "Symbol"
+msgstr "Siombail"
+
+#: ldcref.c:371
+#, c-format
+msgid "File\n"
+msgstr "Comhad\n"
+
+#: ldcref.c:375
+#, c-format
+msgid "No symbols\n"
+msgstr "Gan siombailí\n"
+
+#: ldcref.c:496 ldcref.c:618
+msgid "%B%F: could not read symbols; %E\n"
+msgstr "%B%F: níorbh fhéidir siombailí a léamh; %E\n"
+
+#: ldcref.c:500 ldcref.c:622 ldmain.c:1232 ldmain.c:1236
+msgid "%B%F: could not read symbols: %E\n"
+msgstr "%B%F: níorbh fhéidir siombailí a léamh: %E\n"
+
+#: ldcref.c:551
+msgid "%P: symbol `%T' missing from main hash table\n"
+msgstr "%P: siombail `%T' ar iarraidh ón phríomh-hais-tábla\n"
+
+#: ldcref.c:693 ldcref.c:700 ldmain.c:1279 ldmain.c:1286
+msgid "%B%F: could not read relocs: %E\n"
+msgstr "%B%F: níorbh fhéidir na hathshuíonna a léamh: %E\n"
+
+#. We found a reloc for the symbol. The symbol is defined
+#. in OUTSECNAME. This reloc is from a section which is
+#. mapped into a section from which references to OUTSECNAME
+#. are prohibited. We must report an error.
+#: ldcref.c:727
+msgid "%X%C: prohibited cross reference from %s to `%T' in %s\n"
+msgstr "%X%C: crostagairt choiscthe do `%T' ó %s i %s\n"
+
+#: ldctor.c:84
+msgid "%P%X: Different relocs used in set %s\n"
+msgstr "%P%X: Úsáideadh athshuíonna difriúla i dtacar %s\n"
+
+#: ldctor.c:102
+msgid "%P%X: Different object file formats composing set %s\n"
+msgstr "%P%X: Formáidí difriúla ar chomhaid oibiachta i dtacar %s\n"
+
+#: ldctor.c:281 ldctor.c:295
+msgid "%P%X: %s does not support reloc %s for set %s\n"
+msgstr "%P%X: Ní thacaíonn %s le hathshuí %s i gcomhair tacair %s\n"
+
+#: ldctor.c:316
+msgid "%P%X: Unsupported size %d for set %s\n"
+msgstr "%P%X: Méid %d gan tacaíocht do thacar %s\n"
+
+#: ldctor.c:337
+msgid ""
+"\n"
+"Set Symbol\n"
+"\n"
+msgstr ""
+"\n"
+"Tacar Siombail\n"
+"\n"
+
+#: ldemul.c:235
+#, c-format
+msgid "%S SYSLIB ignored\n"
+msgstr "%S Rinneadh neamhshuim ar SYSLIB\n"
+
+#: ldemul.c:241
+#, c-format
+msgid "%S HLL ignored\n"
+msgstr "%S Rinneadh neamhshuim ar HLL\n"
+
+#: ldemul.c:261
+msgid "%P: unrecognised emulation mode: %s\n"
+msgstr "%P: mód anaithnid aithrise: %s\n"
+
+#: ldemul.c:262
+msgid "Supported emulations: "
+msgstr "Aithrisí a dtacaítear leo: "
+
+#: ldemul.c:304
+#, c-format
+msgid " no emulation specific options.\n"
+msgstr " gan roghanna a bhaineann le haithris.\n"
+
+#: ldexp.c:344
+#, c-format
+msgid "%F%S %% by zero\n"
+msgstr "%F%S %% le nialas\n"
+
+#: ldexp.c:352
+#, c-format
+msgid "%F%S / by zero\n"
+msgstr "%F%S / le nialas\n"
+
+#: ldexp.c:544
+#, c-format
+msgid "%X%S: unresolvable symbol `%s' referenced in expression\n"
+msgstr "%X%S: rinneadh tagairt do shiombail neamh-inréitithe `%s' i slonn\n"
+
+#: ldexp.c:555
+#, c-format
+msgid "%F%S: undefined symbol `%s' referenced in expression\n"
+msgstr "%F%S: rinneadh tagairt do shiombail `%s' gan sainmhíniú i slonn\n"
+
+#: ldexp.c:576 ldexp.c:593 ldexp.c:619
+#, c-format
+msgid "%F%S: undefined section `%s' referenced in expression\n"
+msgstr "%F%S: rinneadh tagairt do rannán `%s' gan sainmhíniú i slonn\n"
+
+#: ldexp.c:645 ldexp.c:658
+#, c-format
+msgid "%F%S: undefined MEMORY region `%s' referenced in expression\n"
+msgstr "%F%S: rinneadh tagairt do réigiún CUIMHNE `%s' gan sainmhíniú i slonn\n"
+
+#: ldexp.c:669
+#, c-format
+msgid "%F%S: unknown constant `%s' referenced in expression\n"
+msgstr "%F%S: rinneadh tagairt do thairiseach `%s' gan sainmhíniú i slonn\n"
+
+#: ldexp.c:730
+#, c-format
+msgid "%F%S can not PROVIDE assignment to location counter\n"
+msgstr "Ní féidir le %F%S sannadh a sholáthar d'áiritheoir suíomhanna\n"
+
+#: ldexp.c:744
+#, c-format
+msgid "%F%S invalid assignment to location counter\n"
+msgstr "%F%S sannadh neamhbhailí ar áiritheoir suíomhanna\n"
+
+#: ldexp.c:747
+#, c-format
+msgid "%F%S assignment to location counter invalid outside of SECTION\n"
+msgstr "%F%S níl sannadh don áiritheoir suíomhanna bailí taobh amuigh de RANNÁN\n"
+
+#: ldexp.c:756
+msgid "%F%S cannot move location counter backwards (from %V to %V)\n"
+msgstr "%F%S ní féidir an t-áiritheoir suíomhanna a bhogadh ar ais (ó %V go %V)\n"
+
+#: ldexp.c:795
+msgid "%P%F:%s: hash creation failed\n"
+msgstr "%P%F:%s: theip ar chruthú an hais-tábla\n"
+
+#: ldexp.c:1054 ldexp.c:1079
+#, c-format
+msgid "%F%S nonconstant expression for %s\n"
+msgstr "%F%S slonn inathraitheach do %s\n"
+
+#: ldexp.c:1138
+#, c-format
+msgid "%F%S: nonconstant expression for %s\n"
+msgstr "%F%S: slonn inathraitheach do %s\n"
+
+#: ldfile.c:139
+#, c-format
+msgid "attempt to open %s failed\n"
+msgstr "theip ar oscailt %s\n"
+
+#: ldfile.c:141
+#, c-format
+msgid "attempt to open %s succeeded\n"
+msgstr "d'éirigh le hiarracht %s a oscailt\n"
+
+#: ldfile.c:147
+msgid "%F%P: invalid BFD target `%s'\n"
+msgstr "%F%P: sprioc neamhbhailí BFD `%s'\n"
+
+#: ldfile.c:256 ldfile.c:285
+msgid "%P: skipping incompatible %s when searching for %s\n"
+msgstr "%P: gabh thar %s neamh-chomhoiriúnach agus %s á lorg\n"
+
+#: ldfile.c:269
+msgid "%F%P: attempted static link of dynamic object `%s'\n"
+msgstr "%F%P: iarracht ar nasc statach de réad dinimiciúil `%s' a dhéanamh\n"
+
+#: ldfile.c:388
+msgid "%F%P: %s (%s): No such file: %E\n"
+msgstr "%F%P: %s (%s): Níl a leithéid de chomhad: %E\n"
+
+#: ldfile.c:391
+msgid "%F%P: %s: No such file: %E\n"
+msgstr "%F%P: %s: Níl a leithéid de chomhad: %E\n"
+
+#: ldfile.c:421
+msgid "%F%P: cannot find %s inside %s\n"
+msgstr "%F%P: ní féidir %s a aimsiú i %s\n"
+
+#: ldfile.c:424
+msgid "%F%P: cannot find %s\n"
+msgstr "%F%P: ní féidir %s a aimsiú\n"
+
+#: ldfile.c:441 ldfile.c:457
+#, c-format
+msgid "cannot find script file %s\n"
+msgstr "ní féidir comhad scripte %s a aimsiú\n"
+
+#: ldfile.c:443 ldfile.c:459
+#, c-format
+msgid "opened script file %s\n"
+msgstr "osclaíodh comhad scripte %s\n"
+
+#: ldfile.c:503
+msgid "%P%F: cannot open linker script file %s: %E\n"
+msgstr "%P%F: ní féidir script nascóra %s a oscailt: %E\n"
+
+#: ldfile.c:550
+msgid "%P%F: cannot represent machine `%s'\n"
+msgstr "%P%F: ní féidir meaisín `%s' a léiriú\n"
+
+#: ldlang.c:1069 ldlang.c:1111 ldlang.c:2831
+msgid "%P%F: can not create hash table: %E\n"
+msgstr "%P%F: ní féidir an hais-tábla a chruthú: %E\n"
+
+#: ldlang.c:1154
+msgid "%P:%S: warning: redeclaration of memory region '%s'\n"
+msgstr "%P:%S: rabhadh: athfhógra ar réigiún cuimhne '%s'\n"
+
+#: ldlang.c:1160
+msgid "%P:%S: warning: memory region %s not declared\n"
+msgstr "%P:%S: rabhadh: réigiún cuimhne %s gan fógra\n"
+
+#: ldlang.c:1240 ldlang.c:1270
+msgid "%P%F: failed creating section `%s': %E\n"
+msgstr "%P%F: ní féidir rannán `%s' a chruthú: %E\n"
+
+#: ldlang.c:1754
+#, c-format
+msgid ""
+"\n"
+"Discarded input sections\n"
+"\n"
+msgstr ""
+"\n"
+"Rannáin ionchurtha a bhfuarthas réidh leo\n"
+"\n"
+
+#: ldlang.c:1762
+msgid ""
+"\n"
+"Memory Configuration\n"
+"\n"
+msgstr ""
+"\n"
+"Cumraíocht Chuimhne\n"
+"\n"
+
+#: ldlang.c:1764
+msgid "Name"
+msgstr "Ainm"
+
+#: ldlang.c:1764
+msgid "Origin"
+msgstr "Bunphointe"
+
+#: ldlang.c:1764
+msgid "Length"
+msgstr "Fad"
+
+#: ldlang.c:1764
+msgid "Attributes"
+msgstr "Tréithe"
+
+#: ldlang.c:1804
+#, c-format
+msgid ""
+"\n"
+"Linker script and memory map\n"
+"\n"
+msgstr ""
+"\n"
+"Script nascóra agus mapa cuimhne\n"
+"\n"
+
+#: ldlang.c:1871
+msgid "%P%F: Illegal use of `%s' section\n"
+msgstr "%P%F: Úsáid neamhcheadaithe de rannán `%s'\n"
+
+#: ldlang.c:1879
+msgid "%P%F: output format %s cannot represent section called %s\n"
+msgstr "%P%F: ní féidir le formáid aschurtha %s rannán darb ainm %s a léiriú\n"
+
+#: ldlang.c:2429
+msgid "%B: file not recognized: %E\n"
+msgstr "%B: comhad gan aithint: %E\n"
+
+#: ldlang.c:2430
+msgid "%B: matching formats:"
+msgstr "%B: formáidí comhoiriúnacha:"
+
+#: ldlang.c:2437
+msgid "%F%B: file not recognized: %E\n"
+msgstr "%F%B: comhad gan aimsiú: %E\n"
+
+#: ldlang.c:2507
+msgid "%F%B: member %B in archive is not an object\n"
+msgstr "%F%B: ní réad é ball %B sa chartlann\n"
+
+#: ldlang.c:2518 ldlang.c:2532
+msgid "%F%B: could not read symbols: %E\n"
+msgstr "%F%B: níorbh fhéidir na siombailí a léamh: %E\n"
+
+#: ldlang.c:2801
+msgid "%P: warning: could not find any targets that match endianness requirement\n"
+msgstr "%P: rabhadh: níorbh fhéidir aon spriocanna a aimsiú a bhí caolcheannach nó mórcheannach, mar is cuí\n"
+
+#: ldlang.c:2815
+msgid "%P%F: target %s not found\n"
+msgstr "%P%F: sprioc %s gan aimsiú\n"
+
+#: ldlang.c:2817
+msgid "%P%F: cannot open output file %s: %E\n"
+msgstr "%P%F: ní féidir aschomhad %s a oscailt: %E\n"
+
+#: ldlang.c:2823
+msgid "%P%F:%s: can not make object file: %E\n"
+msgstr "%P%F:%s: ní féidir comhad oibiachta a dhéanamh: %E\n"
+
+#: ldlang.c:2827
+msgid "%P%F:%s: can not set architecture: %E\n"
+msgstr "%P%F:%s: ní féidir an ailtireacht a shocrú: %E\n"
+
+#: ldlang.c:2975
+msgid "%P%F: bfd_hash_lookup failed creating symbol %s\n"
+msgstr "%P%F: theip ar bfd_hash_lookup siombail %s a chruthú\n"
+
+#: ldlang.c:2993
+msgid "%P%F: bfd_hash_allocate failed creating symbol %s\n"
+msgstr "%P%F: theip ar bfd_hash_allocate siombail %s a chruthú\n"
+
+#: ldlang.c:3426
+msgid " load address 0x%V"
+msgstr " luchtaigh seoladh 0x%V"
+
+#: ldlang.c:3661
+msgid "%W (size before relaxing)\n"
+msgstr "%W (méid roimh bhogadh)\n"
+
+#: ldlang.c:3747
+#, c-format
+msgid "Address of section %s set to "
+msgstr "Seoladh rannáin %s socraithe "
+
+#: ldlang.c:3900
+#, c-format
+msgid "Fail with %d\n"
+msgstr "Teipthe le %d\n"
+
+#: ldlang.c:4172
+msgid "%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"
+msgstr "%X%P: forluíonn rannán %s [%V -> %V] rannán %s [%V -> %V]\n"
+
+#: ldlang.c:4197
+msgid "%X%P: address 0x%v of %B section %s is not within region %s\n"
+msgstr "%X%P: níl seoladh 0x%v de %B rannán %s isteach i réigiún %s\n"
+
+#: ldlang.c:4206
+msgid "%X%P: region %s is full (%B section %s)\n"
+msgstr "%X%P: tá réigiún %s lán (%B rannán %s)\n"
+
+#: ldlang.c:4247
+#, c-format
+msgid "%F%S: non constant or forward reference address expression for section %s\n"
+msgstr "%F%S: slonn seolta tagartha ar aghaidh nó slonn inathraitheach do rannán %s\n"
+
+#: ldlang.c:4272
+msgid "%P%X: Internal error on COFF shared library section %s\n"
+msgstr "%P%X: Earráid inmheánach i gcomhleabharlann COFF, rannán %s\n"
+
+#: ldlang.c:4331
+msgid "%P%F: error: no memory region specified for loadable section `%s'\n"
+msgstr "%P%F: earráid: níor socraíodh réigiún cuimhne do rannán inluchtaithe `%s'\n"
+
+#: ldlang.c:4336
+msgid "%P: warning: no memory region specified for loadable section `%s'\n"
+msgstr "%P: rabhadh: níor socraíodh réigiún cuimhne do rannán inluchtaithe `%s'\n"
+
+#: ldlang.c:4358
+msgid "%P: warning: changing start of section %s by %lu bytes\n"
+msgstr "%P: rabhadh: tús rannáin %s á athrú (%lu beart)\n"
+
+#: ldlang.c:4437
+msgid "%P: warning: dot moved backwards before `%s'\n"
+msgstr "%P: rabhadh: bhog ponc ar gcúl roimh `%s'\n"
+
+#: ldlang.c:4609
+msgid "%P%F: can't relax section: %E\n"
+msgstr "%P%F: ní féidir rannán a bhogadh: %E\n"
+
+#: ldlang.c:4898
+msgid "%F%P: invalid data statement\n"
+msgstr "%F%P: ráiteas neamhbhailí sonraí\n"
+
+#: ldlang.c:4931
+msgid "%F%P: invalid reloc statement\n"
+msgstr "%F%P: ráiteas neamhbhailí athshuite\n"
+
+#: ldlang.c:5063
+msgid "%P%F:%s: can't set start address\n"
+msgstr "%P%F:%s: ní féidir an seoladh tosaigh a shocrú\n"
+
+#: ldlang.c:5076 ldlang.c:5095
+msgid "%P%F: can't set start address\n"
+msgstr "%P%F: ní féidir an seoladh tosaigh a shocrú\n"
+
+#: ldlang.c:5088
+msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n"
+msgstr "%P: rabhadh: ní féidir siombail iontrála %s a aimsiú; úsáidfear %V de réir réamhshocraithe\n"
+
+#: ldlang.c:5100
+msgid "%P: warning: cannot find entry symbol %s; not setting start address\n"
+msgstr "%P: rabhadh: ní féidir siombail iontrála %s a aimsiú; seoladh tosaigh gan socrú\n"
+
+#: ldlang.c:5149
+msgid "%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"
+msgstr "%P%F: Ní thacaítear le nascadh in-athshuite le hathshuímh ó fhormáid %s (%B) go formáid %s (%B)\n"
+
+#: ldlang.c:5159
+msgid "%P%X: %s architecture of input file `%B' is incompatible with %s output\n"
+msgstr "%P%X: níl ailtireacht %s d'inchomhad `%B' comhoiriúnach le haschur %s\n"
+
+#: ldlang.c:5181
+msgid "%P%X: failed to merge target specific data of file %B\n"
+msgstr "%P%X: theip ar chumasc na sonraí a bhaineann leis an sprioc ó chomhad %B\n"
+
+#: ldlang.c:5265
+msgid ""
+"\n"
+"Allocating common symbols\n"
+msgstr ""
+"\n"
+"Siombailí coitianta á leithdháileadh\n"
+
+#: ldlang.c:5266
+msgid ""
+"Common symbol size file\n"
+"\n"
+msgstr ""
+"Siombail choitianta méid comhad\n"
+"\n"
+
+#: ldlang.c:5401
+msgid "%P%F: invalid syntax in flags\n"
+msgstr "%P%F: comhréir neamhbhailí i mbratacha\n"
+
+#: ldlang.c:5714
+msgid "%P%F: Failed to create hash table\n"
+msgstr "%P%F: Theip ar chruthú hais-tábla\n"
+
+#: ldlang.c:6009
+msgid "%P%F: multiple STARTUP files\n"
+msgstr "%P%F: ilchomhad TOSAITHE\n"
+
+#: ldlang.c:6057
+msgid "%X%P:%S: section has both a load address and a load region\n"
+msgstr "%X%P:%S: tá seoladh luchtaithe agus réigiún luchtaithe sa rannán\n"
+
+#: ldlang.c:6314
+msgid "%F%P: bfd_record_phdr failed: %E\n"
+msgstr "%F%P: theip ar bfd_record_phdr: %E\n"
+
+#: ldlang.c:6334
+msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n"
+msgstr "%X%P: sannadh rannán `%s' go phdr `%s' nach bhfuil ann\n"
+
+#: ldlang.c:6725
+msgid "%X%P: unknown language `%s' in version information\n"
+msgstr "%X%P: teanga anaithnid `%s' in eolas faoin leagan\n"
+
+#: ldlang.c:6867
+msgid "%X%P: anonymous version tag cannot be combined with other version tags\n"
+msgstr "%X%P: ní féidir an chlib leagain gan ainm a cheangal le clibeanna leagain eile\n"
+
+#: ldlang.c:6876
+msgid "%X%P: duplicate version tag `%s'\n"
+msgstr "%X%P: clib leagain dhúbailte `%s'\n"
+
+#: ldlang.c:6896 ldlang.c:6905 ldlang.c:6922 ldlang.c:6932
+msgid "%X%P: duplicate expression `%s' in version information\n"
+msgstr "%X%P: slonn dúbailte `%s' in eolas faoin leagan\n"
+
+#: ldlang.c:6972
+msgid "%X%P: unable to find version dependency `%s'\n"
+msgstr "%X%P: ní féidir spleáchóg leagain `%s' a aimsiú\n"
+
+#: ldlang.c:6994
+msgid "%X%P: unable to read .exports section contents\n"
+msgstr "%X%P: ní féidir inneachar an rannáin .exports a léamh\n"
+
+#: ldmain.c:234
+msgid "%X%P: can't set BFD default target to `%s': %E\n"
+msgstr "%X%P: ní féidir an sprioc réamhshocraithe BFD a shocrú go `%s': %E\n"
+
+#: ldmain.c:298
+msgid "%P%F: --relax and -r may not be used together\n"
+msgstr "%P%F: ní cheadaítear roghanna --relax agus -r le chéile\n"
+
+#: ldmain.c:300
+msgid "%P%F: -r and -shared may not be used together\n"
+msgstr "%P%F: ní cheadaítear roghanna -r agus -shared le chéile\n"
+
+#: ldmain.c:343
+msgid "%P%F: -F may not be used without -shared\n"
+msgstr "%P%F: caithfidh tú -shared a úsáid in éineacht le -F\n"
+
+#: ldmain.c:345
+msgid "%P%F: -f may not be used without -shared\n"
+msgstr "%P%F: caithfidh tú -shared a úsáid in éineacht le -f\n"
+
+#: ldmain.c:397
+msgid "using external linker script:"
+msgstr "script sheachtrach nascóra in úsáid:"
+
+#: ldmain.c:399
+msgid "using internal linker script:"
+msgstr "script inmheánach nascóra in úsáid:"
+
+#: ldmain.c:433
+msgid "%P%F: no input files\n"
+msgstr "%P%F: gan inchomhaid\n"
+
+#: ldmain.c:437
+msgid "%P: mode %s\n"
+msgstr "%P: mód %s\n"
+
+#: ldmain.c:453
+msgid "%P%F: cannot open map file %s: %E\n"
+msgstr "%P%F: ní féidir comhad mapa %s a oscailt: %E\n"
+
+#: ldmain.c:485
+msgid "%P: link errors found, deleting executable `%s'\n"
+msgstr "%P: aimsíodh earráidí nasctha, clár inrite `%s' á scriosadh\n"
+
+#: ldmain.c:494
+msgid "%F%B: final close failed: %E\n"
+msgstr "%F%B: theip ar dhúnadh deiridh: %E\n"
+
+#: ldmain.c:520
+msgid "%X%P: unable to open for source of copy `%s'\n"
+msgstr "%X%P: ní féidir foinse na cóipeála `%s' a oscailt\n"
+
+#: ldmain.c:523
+msgid "%X%P: unable to open for destination of copy `%s'\n"
+msgstr "%X%P: ní féidir sprioc na cóipeála `%s' a oscailt\n"
+
+#: ldmain.c:530
+msgid "%P: Error writing file `%s'\n"
+msgstr "%P: Earráid agus comhad `%s' á scríobh\n"
+
+#: ldmain.c:535 pe-dll.c:1572
+#, c-format
+msgid "%P: Error closing file `%s'\n"
+msgstr "%P: Earráid agus comhad `%s' á dhúnadh\n"
+
+#: ldmain.c:551
+#, c-format
+msgid "%s: total time in link: %ld.%06ld\n"
+msgstr "%s: am iomlán nasctha: %ld.%06ld\n"
+
+#: ldmain.c:554
+#, c-format
+msgid "%s: data size %ld\n"
+msgstr "%s: méid sonraí %ld\n"
+
+#: ldmain.c:637
+msgid "%P%F: missing argument to -m\n"
+msgstr "%P%F: argóint ar iarraidh tar éis -m\n"
+
+#: ldmain.c:784 ldmain.c:803 ldmain.c:834
+msgid "%P%F: bfd_hash_table_init failed: %E\n"
+msgstr "%P%F: theip ar bfd_hash_table_init: %E\n"
+
+#: ldmain.c:788 ldmain.c:807
+msgid "%P%F: bfd_hash_lookup failed: %E\n"
+msgstr "%P%F: theip ar bfd_hash_lookup: %E\n"
+
+#: ldmain.c:821
+msgid "%X%P: error: duplicate retain-symbols-file\n"
+msgstr "%X%P: earráid: retain-symbols-file dúbailte\n"
+
+#: ldmain.c:864
+msgid "%P%F: bfd_hash_lookup for insertion failed: %E\n"
+msgstr "%P%F: theip ar bfd_hash_lookup le haghaidh ionsáite: %E\n"
+
+#: ldmain.c:869
+msgid "%P: `-retain-symbols-file' overrides `-s' and `-S'\n"
+msgstr "%P: sáraíonn `-retain-symbols-file' na roghanna `-s' agus `-S'\n"
+
+#: ldmain.c:944
+#, c-format
+msgid ""
+"Archive member included because of file (symbol)\n"
+"\n"
+msgstr ""
+"Cuireadh ball na cartlainne san áireamh mar gheall ar chomhad (siombail)\n"
+"\n"
+
+#: ldmain.c:1014
+msgid "%X%C: multiple definition of `%T'\n"
+msgstr "%X%C: ilmhíniú ar `%T'\n"
+
+#: ldmain.c:1017
+msgid "%D: first defined here\n"
+msgstr "%D: an chéad mhíniú anseo\n"
+
+#: ldmain.c:1021
+msgid "%P: Disabling relaxation: it will not work with multiple definitions\n"
+msgstr "%P: Bogadh á dhíchumasú: ní oibreoidh sé i gceart le sainmhínithe iomadúla\n"
+
+#: ldmain.c:1051
+msgid "%B: warning: definition of `%T' overriding common\n"
+msgstr "%B: rabhadh: sáraíonn an sainmhíniú ar `%T' an ceann coitianta\n"
+
+#: ldmain.c:1054
+msgid "%B: warning: common is here\n"
+msgstr "%B: rabhadh: coitianta anseo\n"
+
+#: ldmain.c:1061
+msgid "%B: warning: common of `%T' overridden by definition\n"
+msgstr "%B: rabhadh: bhí `%T' coitianta sáraithe ag sainmhíniú\n"
+
+#: ldmain.c:1064
+msgid "%B: warning: defined here\n"
+msgstr "%B: rabhadh: sainmhíniú anseo\n"
+
+#: ldmain.c:1071
+msgid "%B: warning: common of `%T' overridden by larger common\n"
+msgstr "%B: rabhadh: bhí `%T' coitianta sáraithe ag ceann coitianta níos mó\n"
+
+#: ldmain.c:1074
+msgid "%B: warning: larger common is here\n"
+msgstr "%B: rabhadh: ceann coitianta níos mó anseo\n"
+
+#: ldmain.c:1078
+msgid "%B: warning: common of `%T' overriding smaller common\n"
+msgstr "%B: rabhadh: sáraíonn `%T' coitianta an ceann coitianta níos lú\n"
+
+#: ldmain.c:1081
+msgid "%B: warning: smaller common is here\n"
+msgstr "%B: rabhadh: ceann coitianta níos lú anseo\n"
+
+#: ldmain.c:1085
+msgid "%B: warning: multiple common of `%T'\n"
+msgstr "%B: rabhadh: ilchoitianta `%T'\n"
+
+#: ldmain.c:1087
+msgid "%B: warning: previous common is here\n"
+msgstr "%B: rabhadh: ceann coitianta roimhe anseo\n"
+
+#: ldmain.c:1107 ldmain.c:1145
+msgid "%P: warning: global constructor %s used\n"
+msgstr "%P: rabhadh: úsáideadh cruthaitheoir comhchoiteann %s\n"
+
+#: ldmain.c:1155
+msgid "%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"
+msgstr "%P%F: earráid in inneall BFD: BFD_RELOC_CTOR gan tacaíocht\n"
+
+#. We found a reloc for the symbol we are looking for.
+#: ldmain.c:1209 ldmain.c:1211 ldmain.c:1213 ldmain.c:1251 ldmain.c:1299
+msgid "warning: "
+msgstr "rabhadh: "
+
+#: ldmain.c:1334
+msgid "%F%P: bfd_hash_table_init failed: %E\n"
+msgstr "%F%P: theip ar bfd_hash_table_init: %E\n"
+
+#: ldmain.c:1341
+msgid "%F%P: bfd_hash_lookup failed: %E\n"
+msgstr "%F%P: theip ar bfd_hash_lookup: %E\n"
+
+#: ldmain.c:1362
+msgid "%X%C: undefined reference to `%T'\n"
+msgstr "%X%C: tagairt do `%T' gan sainmhíniú\n"
+
+#: ldmain.c:1365
+msgid "%C: warning: undefined reference to `%T'\n"
+msgstr "%C: rabhadh: tagairt do `%T' gan sainmhíniú\n"
+
+#: ldmain.c:1371
+msgid "%X%D: more undefined references to `%T' follow\n"
+msgstr "%X%D: tá tuilleadh tagairtí do `%T' gan sainmhíniú thíos\n"
+
+#: ldmain.c:1374
+msgid "%D: warning: more undefined references to `%T' follow\n"
+msgstr "%D: rabhadh: tá tuilleadh tagairtí do `%T' gan sainmhíniú thíos\n"
+
+#: ldmain.c:1385
+msgid "%X%B: undefined reference to `%T'\n"
+msgstr "%X%B: tagairt do `%T' gan sainmhíniú\n"
+
+#: ldmain.c:1388
+msgid "%B: warning: undefined reference to `%T'\n"
+msgstr "%B: rabhadh: tagairt do `%T' gan sainmhíniú\n"
+
+#: ldmain.c:1394
+msgid "%X%B: more undefined references to `%T' follow\n"
+msgstr "%X%B: tá tuilleadh tagairtí do `%T' gan sainmhíniú thíos\n"
+
+#: ldmain.c:1397
+msgid "%B: warning: more undefined references to `%T' follow\n"
+msgstr "%B: rabhadh: tá tuilleadh tagairtí do `%T' gan sainmhíniú thíos\n"
+
+#: ldmain.c:1436
+msgid " additional relocation overflows omitted from the output\n"
+msgstr " fágadh forshreafaí athshuite breise as an aschur\n"
+
+#: ldmain.c:1449
+msgid " relocation truncated to fit: %s against undefined symbol `%T'"
+msgstr " teascadh an t-athshuíomh: %s in aghaidh siombaile `%T' gan sainmhíniú"
+
+#: ldmain.c:1454
+msgid " relocation truncated to fit: %s against symbol `%T' defined in %A section in %B"
+msgstr " teascadh an t-athshuíomh: %s in aghaidh siombaile `%T' a sainmhíníodh i rannán %A i %B"
+
+#: ldmain.c:1466
+msgid " relocation truncated to fit: %s against `%T'"
+msgstr " teascadh an t-athshuíomh: %s in aghaidh `%T'"
+
+#: ldmain.c:1483
+#, c-format
+msgid "%X%C: dangerous relocation: %s\n"
+msgstr "%X%C: athshuí contúirteach: %s\n"
+
+#: ldmain.c:1498
+msgid "%X%C: reloc refers to symbol `%T' which is not being output\n"
+msgstr "%X%C: déanann an t-athshuíomh tagairt do shiombail `%T' nach bhfuil á haschur\n"
+
+#: ldmisc.c:148
+#, c-format
+msgid "no symbol"
+msgstr "gan siombail"
+
+#: ldmisc.c:245
+#, c-format
+msgid "built in linker script:%u"
+msgstr "tógadh sa script nascóra:%u"
+
+#: ldmisc.c:301 ldmisc.c:305
+msgid "%B%F: could not read symbols\n"
+msgstr "%B%F: níorbh fhéidir siombailí a léamh\n"
+
+#: ldmisc.c:347
+msgid "%B: In function `%T':\n"
+msgstr "%B: I bhfeidhm `%T':\n"
+
+#: ldmisc.c:472
+msgid "%F%P: internal error %s %d\n"
+msgstr "%F%P: earráid inmheánach %s %d\n"
+
+#: ldmisc.c:521
+msgid "%P: internal error: aborting at %s line %d in %s\n"
+msgstr "%P: earráid inmheánach: á thobscor ag %s líne %d i %s\n"
+
+#: ldmisc.c:524
+msgid "%P: internal error: aborting at %s line %d\n"
+msgstr "%P: earráid inmheánach: á thobscor ag %s líne %d\n"
+
+#: ldmisc.c:526
+msgid "%P%F: please report this bug\n"
+msgstr "%P%F: seol tuairisc ar an bhfabht seo, le do thoil\n"
+
+#. Output for noisy == 2 is intended to follow the GNU standards.
+#: ldver.c:37
+#, c-format
+msgid "GNU ld %s\n"
+msgstr "ld GNU, leagan %s\n"
+
+#: ldver.c:41
+#, c-format
+msgid "Copyright 2007 Free Software Foundation, Inc.\n"
+msgstr "Copyright 2007 Free Software Foundation, Inc.\n"
+
+#: ldver.c:42
+#, c-format
+msgid ""
+"This program is free software; you may redistribute it under the terms of\n"
+"the GNU General Public License. This program has absolutely no warranty.\n"
+msgstr ""
+"Is saorbhogearra é an clár seo; is féidir leat é a scaipeadh de réir na\n"
+"gcoinníollacha den GNU General Public License. Níl baránta ar chor ar bith\n"
+"leis an gclár seo.\n"
+
+#: ldver.c:51
+#, c-format
+msgid " Supported emulations:\n"
+msgstr " Aithrisí a dtacaítear leo:\n"
+
+#: ldwrite.c:55 ldwrite.c:191
+msgid "%P%F: bfd_new_link_order failed\n"
+msgstr "%P%F: theip ar bfd_new_link_order\n"
+
+#: ldwrite.c:344
+msgid "%F%P: cannot create split section name for %s\n"
+msgstr "%F%P: ní féidir ainm roinnte a chruthú ar rannán %s\n"
+
+#: ldwrite.c:356
+msgid "%F%P: clone section failed: %E\n"
+msgstr "%F%P: theip ar chlónáil an rannáin: %E\n"
+
+#: ldwrite.c:394
+#, c-format
+msgid "%8x something else\n"
+msgstr "%8x rud éigin eile\n"
+
+#: ldwrite.c:564
+msgid "%F%P: final link failed: %E\n"
+msgstr "%F%P: theip ar an nascadh deiridh: %E\n"
+
+#: lexsup.c:205 lexsup.c:341
+msgid "KEYWORD"
+msgstr "LORGFHOCAL"
+
+#: lexsup.c:205
+msgid "Shared library control for HP/UX compatibility"
+msgstr "Rialú comhleabharlainne, ar son comhoiriúnachta le HP/UX"
+
+#: lexsup.c:208
+msgid "ARCH"
+msgstr "AILTIREACHT"
+
+#: lexsup.c:208
+msgid "Set architecture"
+msgstr "Socraigh an ailtireacht"
+
+#: lexsup.c:210 lexsup.c:447
+msgid "TARGET"
+msgstr "SPRIOC"
+
+#: lexsup.c:210
+msgid "Specify target for following input files"
+msgstr "Sonraigh sprioc do na hinchomhaid seo a leanas"
+
+#: lexsup.c:213 lexsup.c:262 lexsup.c:274 lexsup.c:287 lexsup.c:289
+#: lexsup.c:402 lexsup.c:459 lexsup.c:516 lexsup.c:528
+msgid "FILE"
+msgstr "COMHAD"
+
+#: lexsup.c:213
+msgid "Read MRI format linker script"
+msgstr "Léigh script nascóra i bhformáid MRI"
+
+#: lexsup.c:215
+msgid "Force common symbols to be defined"
+msgstr "Cuir iallach ar shiombailí coitianta a bheith sainmhínithe"
+
+#: lexsup.c:219 lexsup.c:501 lexsup.c:503 lexsup.c:505
+msgid "ADDRESS"
+msgstr "SEOLADH"
+
+#: lexsup.c:219
+msgid "Set start address"
+msgstr "Socraigh seoladh tosaithe"
+
+#: lexsup.c:221
+msgid "Export all dynamic symbols"
+msgstr "Easpórtáil gach siombail dhinimiciúil"
+
+#: lexsup.c:223
+msgid "Link big-endian objects"
+msgstr "Nasc réada mórcheannacha"
+
+#: lexsup.c:225
+msgid "Link little-endian objects"
+msgstr "Nasc réada caolcheannacha"
+
+#: lexsup.c:227 lexsup.c:230
+msgid "SHLIB"
+msgstr "SHLIB"
+
+#: lexsup.c:227
+msgid "Auxiliary filter for shared object symbol table"
+msgstr "Scagaire cúntach do thábla siombaile comhréada"
+
+#: lexsup.c:230
+msgid "Filter for shared object symbol table"
+msgstr "Scagaire do thábla siombaile comhréada"
+
+#: lexsup.c:233
+msgid "Ignored"
+msgstr "Neamhaird tugtha air"
+
+#: lexsup.c:235
+msgid "SIZE"
+msgstr "MÉID"
+
+#: lexsup.c:235
+msgid "Small data size (if no size, same as --shared)"
+msgstr "Méid bheag sonraí (mura bhfuil méid ann, ar comhbhrí le --shared)"
+
+#: lexsup.c:238
+msgid "FILENAME"
+msgstr "COMHADAINM"
+
+#: lexsup.c:238
+msgid "Set internal name of shared library"
+msgstr "Socraigh an t-ainm inmheánach ar an gcomhleabharlann"
+
+#: lexsup.c:240
+msgid "PROGRAM"
+msgstr "CLÁR"
+
+#: lexsup.c:240
+msgid "Set PROGRAM as the dynamic linker to use"
+msgstr "Úsáid CLÁR mar an nascóir dinimiciúil"
+
+#: lexsup.c:243
+msgid "LIBNAME"
+msgstr "AINM"
+
+#: lexsup.c:243
+msgid "Search for library LIBNAME"
+msgstr "Cuardach ar leabharlann AINM"
+
+#: lexsup.c:245
+msgid "DIRECTORY"
+msgstr "COMHADLANN"
+
+#: lexsup.c:245
+msgid "Add DIRECTORY to library search path"
+msgstr "Cuir COMHADLANN leis an gconair chuardaigh leabharlann"
+
+#: lexsup.c:248
+msgid "Override the default sysroot location"
+msgstr "Sáraigh an suíomh réamhshocraithe sysroot"
+
+#: lexsup.c:250
+msgid "EMULATION"
+msgstr "AITHRIS"
+
+#: lexsup.c:250
+msgid "Set emulation"
+msgstr "Socraigh aithris"
+
+#: lexsup.c:252
+msgid "Print map file on standard output"
+msgstr "Scríobh an comhad mapa ar an aschur caighdeánach"
+
+#: lexsup.c:254
+msgid "Do not page align data"
+msgstr "Ná hailínigh sonraí de réir leathanaigh"
+
+#: lexsup.c:256
+msgid "Do not page align data, do not make text readonly"
+msgstr "Ná hailínigh sonraí de réir leathanaigh, ná déan téacs inléite amháin"
+
+#: lexsup.c:259
+msgid "Page align data, make text readonly"
+msgstr "Ailínigh sonraí de réir leathanaigh, déan téacs inléite amháin"
+
+#: lexsup.c:262
+msgid "Set output file name"
+msgstr "Socraigh ainm an aschomhaid"
+
+#: lexsup.c:264
+msgid "Optimize output file"
+msgstr "Optamaigh an t-aschomhad"
+
+#: lexsup.c:266
+msgid "Ignored for SVR4 compatibility"
+msgstr "Rinneadh neamhshuim air, ar son comhoiriúnachta le SVR4"
+
+#: lexsup.c:270
+msgid "Generate relocatable output"
+msgstr "Gin aschur in-athshuite"
+
+#: lexsup.c:274
+msgid "Just link symbols (if directory, same as --rpath)"
+msgstr "Nasc siombailí amháin (más comhadlann é, ar comhbhrí le --rpath)"
+
+#: lexsup.c:277
+msgid "Strip all symbols"
+msgstr "Struipeáil na siombailí uile"
+
+#: lexsup.c:279
+msgid "Strip debugging symbols"
+msgstr "Struipeáil siombailí dífhabhtaithe"
+
+#: lexsup.c:281
+msgid "Strip symbols in discarded sections"
+msgstr "Struipeáil siombailí i rannáin chaite amach"
+
+#: lexsup.c:283
+msgid "Do not strip symbols in discarded sections"
+msgstr "Ná struipeáil siombailí i rannáin chaite amach"
+
+#: lexsup.c:285
+msgid "Trace file opens"
+msgstr "Lorg oscailtí comhad"
+
+#: lexsup.c:287
+msgid "Read linker script"
+msgstr "Léigh script nascóra"
+
+#: lexsup.c:289
+msgid "Read default linker script"
+msgstr "Léigh script réamhshocraithe nascóra"
+
+#: lexsup.c:293 lexsup.c:311 lexsup.c:379 lexsup.c:400 lexsup.c:494
+#: lexsup.c:519 lexsup.c:554
+msgid "SYMBOL"
+msgstr "SIOMBAIL"
+
+#: lexsup.c:293
+msgid "Start with undefined reference to SYMBOL"
+msgstr "Tosaigh le tagairt do SIOMBAIL gan sainmhíniú"
+
+#: lexsup.c:296
+msgid "[=SECTION]"
+msgstr "[=RANNÁN]"
+
+#: lexsup.c:297
+msgid "Don't merge input [SECTION | orphan] sections"
+msgstr "Ná cumaisc rannáin ionchurtha [RANNÁN | dílleachta]"
+
+#: lexsup.c:299
+msgid "Build global constructor/destructor tables"
+msgstr "Tóg táblaí comhchoiteanna cruthaitheora/scriostóra"
+
+#: lexsup.c:301
+msgid "Print version information"
+msgstr "Taispeáin eolas faoin leagan"
+
+#: lexsup.c:303
+msgid "Print version and emulation information"
+msgstr "Taispeáin eolas faoin leagan agus faoi aithris"
+
+#: lexsup.c:305
+msgid "Discard all local symbols"
+msgstr "Caith gach siombail logánta i dtraipisí"
+
+#: lexsup.c:307
+msgid "Discard temporary local symbols (default)"
+msgstr "Caith siombailí sealadacha logánta i dtraipisí (réamhshocrú)"
+
+#: lexsup.c:309
+msgid "Don't discard any local symbols"
+msgstr "Ná caith aon siombail i dtraipisí"
+
+#: lexsup.c:311
+msgid "Trace mentions of SYMBOL"
+msgstr "Lorg trácht ar SIOMBAIL"
+
+#: lexsup.c:313 lexsup.c:461 lexsup.c:463
+msgid "PATH"
+msgstr "CONAIR"
+
+#: lexsup.c:313
+msgid "Default search path for Solaris compatibility"
+msgstr "Conair réamhshocraithe chuardaigh, ar son comhoiriúnachta le Solaris"
+
+#: lexsup.c:316
+msgid "Start a group"
+msgstr "Tosaigh grúpa"
+
+#: lexsup.c:318
+msgid "End a group"
+msgstr "Cuir deireadh le grúpa"
+
+#: lexsup.c:322
+msgid "Accept input files whose architecture cannot be determined"
+msgstr "Glac le hinchomhaid nach féidir a n-ailtireacht a dhéanamh amach"
+
+#: lexsup.c:326
+msgid "Reject input files whose architecture is unknown"
+msgstr "Diúltaigh le hinchomhaid le hailtireacht anaithnid"
+
+#: lexsup.c:329
+msgid ""
+"Set DT_NEEDED tags for DT_NEEDED entries in\n"
+"\t\t\t\tfollowing dynamic libs"
+msgstr ""
+"Socraigh clibeanna DT_NEEDED d'iontrálacha DT_NEEDED sna\n"
+"\t\t\t\tleabharlanna dinimiciúla seo a leanas"
+
+#: lexsup.c:332
+msgid ""
+"Do not set DT_NEEDED tags for DT_NEEDED entries\n"
+"\t\t\t\tin following dynamic libs"
+msgstr ""
+"Ná socraigh clibeanna DT_NEEDED d'iontrálacha DT_NEEDED sna\n"
+"\t\t\t\tleabharlanna dinimiciúla seo a leanas"
+
+#: lexsup.c:335
+msgid "Only set DT_NEEDED for following dynamic libs if used"
+msgstr "Ná socraigh DT_NEEDED ach do na leabharlanna dinimiciúla seo a leanas, más gá"
+
+#: lexsup.c:338
+msgid "Always set DT_NEEDED for following dynamic libs"
+msgstr "Socraigh DT_NEEDED do na leabharlanna dinimiciúla seo a leanas i gcónaí"
+
+#: lexsup.c:341
+msgid "Ignored for SunOS compatibility"
+msgstr "Rinneadh neamhshuim air, ar son comhoiriúnachta le SunOS"
+
+#: lexsup.c:343
+msgid "Link against shared libraries"
+msgstr "Nasc le comhleabharlanna"
+
+#: lexsup.c:349
+msgid "Do not link against shared libraries"
+msgstr "Ná nasc le comhleabharlanna"
+
+#: lexsup.c:357
+msgid "Bind global references locally"
+msgstr "Ceangail tagairtí comhchoiteanna go logánta"
+
+#: lexsup.c:359
+msgid "Bind global function references locally"
+msgstr "Ceangail tagairtí comhchoiteanna feidhme go logánta"
+
+#: lexsup.c:361
+msgid "Check section addresses for overlaps (default)"
+msgstr "Lorg forluíonna i seoltaí rannáin (réamhshocrú)"
+
+#: lexsup.c:364
+msgid "Do not check section addresses for overlaps"
+msgstr "Ná lorg forluíonna i seoltaí rannáin"
+
+#: lexsup.c:367
+msgid "Output cross reference table"
+msgstr "Aschuir tábla crostagartha"
+
+#: lexsup.c:369
+msgid "SYMBOL=EXPRESSION"
+msgstr "SIOMBAIL=SLONN"
+
+#: lexsup.c:369
+msgid "Define a symbol"
+msgstr "Sainmhínigh siombail"
+
+#: lexsup.c:371
+msgid "[=STYLE]"
+msgstr "[=STÍL]"
+
+#: lexsup.c:371
+msgid "Demangle symbol names [using STYLE]"
+msgstr "Díchoscair ainmneacha siombaile [de réir STÍL]"
+
+#: lexsup.c:374
+msgid "Generate embedded relocs"
+msgstr "Gin athshuímh leabaithe"
+
+#: lexsup.c:376
+msgid "Treat warnings as errors"
+msgstr "Glac le rabhaidh mar earráidí"
+
+#: lexsup.c:379
+msgid "Call SYMBOL at unload-time"
+msgstr "Glaoigh SIOMBAIL ag am díluchtaithe"
+
+#: lexsup.c:381
+msgid "Force generation of file with .exe suffix"
+msgstr "Éiligh cruthú de chomhad le hiarmhír .exe"
+
+#: lexsup.c:383
+msgid "Remove unused sections (on some targets)"
+msgstr "Bain rannáin neamhúsáidte (ar spriocanna áirithe)"
+
+#: lexsup.c:386
+msgid "Don't remove unused sections (default)"
+msgstr "Ná bain rannáin neamhúsáidte (réamhshocrú)"
+
+#: lexsup.c:389
+msgid "List removed unused sections on stderr"
+msgstr "Taispeáin rannáin neamhúsáidte a baineadh ar stderr"
+
+#: lexsup.c:392
+msgid "Do not list removed unused sections"
+msgstr "Ná taispeáin rannáin neamhúsáidte a baineadh ar stderr"
+
+#: lexsup.c:395
+msgid "Set default hash table size close to <NUMBER>"
+msgstr "Socraigh méid réamhshocraithe an hais-tábla i ngar do <UIMHIR>"
+
+#: lexsup.c:398
+msgid "Print option help"
+msgstr "Taispeáin cabhair le roghanna"
+
+#: lexsup.c:400
+msgid "Call SYMBOL at load-time"
+msgstr "Glaoigh SIOMBAIL ag am luchtaithe"
+
+#: lexsup.c:402
+msgid "Write a map file"
+msgstr "Scríobh comhad mapála"
+
+#: lexsup.c:404
+msgid "Do not define Common storage"
+msgstr "Ná socraigh stóráil choitianta"
+
+#: lexsup.c:406
+msgid "Do not demangle symbol names"
+msgstr "Ná díchoscair ainmneacha siombaile"
+
+#: lexsup.c:408
+msgid "Use less memory and more disk I/O"
+msgstr "Úsáid níos lú cuimhne agus níos mó I/A diosca"
+
+#: lexsup.c:410
+msgid "Do not allow unresolved references in object files"
+msgstr "Ná ceadaigh tagairtí gan réiteach i gcomhaid réada"
+
+#: lexsup.c:413
+msgid "Allow unresolved references in shared libaries"
+msgstr "Ceadaigh tagairtí gan réiteach i gcomhleabharlanna"
+
+#: lexsup.c:417
+msgid "Do not allow unresolved references in shared libs"
+msgstr "Ná ceadaigh tagairtí gan réiteach i gcomhleabharlanna"
+
+#: lexsup.c:421
+msgid "Allow multiple definitions"
+msgstr "Ceadaigh sainmhínithe iomadúla"
+
+#: lexsup.c:423
+msgid "Disallow undefined version"
+msgstr "Ná ceadaigh leagan gan sainmhíniú"
+
+#: lexsup.c:425
+msgid "Create default symbol version"
+msgstr "Cruthaigh leagan réamhshocraithe siombaile"
+
+#: lexsup.c:428
+msgid "Create default symbol version for imported symbols"
+msgstr "Cruthaigh leagan réamhshocraithe siombaile le haghaidh siombailí iompórtáilte"
+
+#: lexsup.c:431
+msgid "Don't warn about mismatched input files"
+msgstr "Ná tabhair rabhadh maidir le hinchomhaid neamh-chomhoiriúnacha"
+
+#: lexsup.c:434
+msgid "Don't warn on finding an incompatible library"
+msgstr "Ná tabhair rabhadh faoi chomhadlann neamh-chomhoiriúnach"
+
+#: lexsup.c:437
+msgid "Turn off --whole-archive"
+msgstr "Ná húsáid --whole-archive"
+
+#: lexsup.c:439
+msgid "Create an output file even if errors occur"
+msgstr "Cruthaigh aschomhad fiú má tharlaíonn earráidí"
+
+#: lexsup.c:444
+msgid ""
+"Only use library directories specified on\n"
+"\t\t\t\tthe command line"
+msgstr ""
+"Ná húsáid ach na comhadlanna leabharlainne a shonraítear\n"
+"\t\t\t\tar líne na n-orduithe"
+
+#: lexsup.c:447
+msgid "Specify target of output file"
+msgstr "Sonraigh sprioc an aschomhaid"
+
+#: lexsup.c:450
+msgid "Ignored for Linux compatibility"
+msgstr "Rinneadh neamhshuim air, ar son comhoiriúnachta le Linux"
+
+#: lexsup.c:453
+msgid "Reduce memory overheads, possibly taking much longer"
+msgstr "Laghdaigh imúsáid chuimhne, ach b'fhéidir go mbeidh sé i bhfad níos moille"
+
+#: lexsup.c:456
+msgid "Relax branches on certain targets"
+msgstr "Bog brainsí ar spriocanna áirithe"
+
+#: lexsup.c:459
+msgid "Keep only symbols listed in FILE"
+msgstr "Ná coinnigh ach na siombailí atá i gCOMHAD"
+
+#: lexsup.c:461
+msgid "Set runtime shared library search path"
+msgstr "Socraigh conair chuardaigh do chomhleabharlanna am-rite"
+
+#: lexsup.c:463
+msgid "Set link time shared library search path"
+msgstr "Socraigh conair chuardaigh do chomhleabharlanna am-nasctha"
+
+#: lexsup.c:466
+msgid "Create a shared library"
+msgstr "Cruthaigh comhleabharlann"
+
+#: lexsup.c:470
+msgid "Create a position independent executable"
+msgstr "Cruthaigh clár inrite atá neamhspleách ar ionad"
+
+#: lexsup.c:474
+msgid "Sort common symbols by size"
+msgstr "Sórtáil siombailí coitianta de réir méide"
+
+#: lexsup.c:478
+msgid "name|alignment"
+msgstr "ainm|ailíniú"
+
+#: lexsup.c:479
+msgid "Sort sections by name or maximum alignment"
+msgstr "Sórtáil rannáin de réir ainm nó ailíniú uasta"
+
+#: lexsup.c:481
+msgid "COUNT"
+msgstr "LÍON"
+
+#: lexsup.c:481
+msgid "How many tags to reserve in .dynamic section"
+msgstr "Cé mhéad clib ba chóir a chur in áirithe i rannán .dynamic"
+
+#: lexsup.c:484
+msgid "[=SIZE]"
+msgstr "[=MÉID]"
+
+#: lexsup.c:484
+msgid "Split output sections every SIZE octets"
+msgstr "Roinn rannáin aschurtha gach MÉID beart"
+
+#: lexsup.c:487
+msgid "[=COUNT]"
+msgstr "[=LÍON]"
+
+#: lexsup.c:487
+msgid "Split output sections every COUNT relocs"
+msgstr "Roinn rannáin aschurtha gach LÍON athshuíomh"
+
+#: lexsup.c:490
+msgid "Print memory usage statistics"
+msgstr "Priontáil staitisticí úsáide cuimhne"
+
+#: lexsup.c:492
+msgid "Display target specific options"
+msgstr "Taispeáin roghanna a bhaineann leis an sprioc seo"
+
+#: lexsup.c:494
+msgid "Do task level linking"
+msgstr "Déan nascadh tascleibhéil"
+
+#: lexsup.c:496
+msgid "Use same format as native linker"
+msgstr "Úsáid formáid chéanna leis an nascóir dúchasach"
+
+#: lexsup.c:498
+msgid "SECTION=ADDRESS"
+msgstr "RANNÁN=SEOLADH"
+
+#: lexsup.c:498
+msgid "Set address of named section"
+msgstr "Socraigh seoladh an rannáin ainmnithe"
+
+#: lexsup.c:501
+msgid "Set address of .bss section"
+msgstr "Socraigh seoladh an rannáin .bss"
+
+#: lexsup.c:503
+msgid "Set address of .data section"
+msgstr "Socraigh seoladh an rannáin .data"
+
+#: lexsup.c:505
+msgid "Set address of .text section"
+msgstr "Socraigh seoladh an rannáin .text"
+
+#: lexsup.c:508
+msgid ""
+"How to handle unresolved symbols. <method> is:\n"
+"\t\t\t\tignore-all, report-all, ignore-in-object-files,\n"
+"\t\t\t\tignore-in-shared-libs"
+msgstr ""
+"Conas siombailí gan réiteach a láimhseáil. is <modh> ceann de:\n"
+"\t\t\t\tignore-all, report-all, ignore-in-object-files,\n"
+"\t\t\t\tignore-in-shared-libs"
+
+#: lexsup.c:512
+msgid "Output lots of information during link"
+msgstr "Taispeáin go leor faisnéise le linn nasctha"
+
+#: lexsup.c:516
+msgid "Read version information script"
+msgstr "Léigh script le heolas faoin leagan"
+
+#: lexsup.c:519
+msgid ""
+"Take export symbols list from .exports, using\n"
+"\t\t\t\tSYMBOL as the version."
+msgstr ""
+"Glac liosta de shiombailí easpórtáilte ó .exports, le\n"
+"\t\t\t\tSIOMBAIL mar leagan."
+
+#: lexsup.c:522
+msgid "Add data symbols to dynamic list"
+msgstr "Cuir siombailí sonraí le liosta dinimiciúil"
+
+#: lexsup.c:524
+msgid "Use C++ operator new/delete dynamic list"
+msgstr "Úsáid liosta dinimiciúil new/delete C++"
+
+#: lexsup.c:526
+msgid "Use C++ typeinfo dynamic list"
+msgstr "Úsáid liosta dinimiciúil typeinfo C++"
+
+#: lexsup.c:528
+msgid "Read dynamic list"
+msgstr "Léigh liosta dinimiciúil"
+
+#: lexsup.c:530
+msgid "Warn about duplicate common symbols"
+msgstr "Tabhair rabhadh má tá siombailí coitianta dúblacha ann"
+
+#: lexsup.c:532
+msgid "Warn if global constructors/destructors are seen"
+msgstr "Tabhair rabhadh má fheictear cruthaitheoirí/scriostóirí"
+
+#: lexsup.c:535
+msgid "Warn if the multiple GP values are used"
+msgstr "Tabhair rabhadh má tá luachanna iomadúla GP in úsáid"
+
+#: lexsup.c:537
+msgid "Warn only once per undefined symbol"
+msgstr "Ná tabhair ach rabhadh amháin do gach siombail neamhshainithe"
+
+#: lexsup.c:539
+msgid "Warn if start of section changes due to alignment"
+msgstr "Tabhair rabhadh má athraíonn tús an rannáin de bharr ailínithe"
+
+#: lexsup.c:542
+msgid "Warn if shared object has DT_TEXTREL"
+msgstr "Tabhair rabhadh má tá DT_TEXTREL ag comhréad"
+
+#: lexsup.c:546
+msgid "Report unresolved symbols as warnings"
+msgstr "Tabhair rabhadh má tá siombail gan réiteach ann"
+
+#: lexsup.c:549
+msgid "Report unresolved symbols as errors"
+msgstr "Tabhair earráid má tá siombail gan réiteach ann"
+
+#: lexsup.c:551
+msgid "Include all objects from following archives"
+msgstr "Cuir gach réad san áireamh as na cartlanna seo a leanas"
+
+#: lexsup.c:554
+msgid "Use wrapper functions for SYMBOL"
+msgstr "Úsáid feidhmeanna rapair do SIOMBAIL"
+
+#: lexsup.c:701
+msgid "%P: unrecognized option '%s'\n"
+msgstr "%P: rogha anaithnid '%s'\n"
+
+#: lexsup.c:705
+msgid "%P%F: use the --help option for usage information\n"
+msgstr "%P%F: úsáid an rogha --help chun tuilleadh eolais a fháil\n"
+
+#: lexsup.c:723
+msgid "%P%F: unrecognized -a option `%s'\n"
+msgstr "%P%F: rogha anaithnid -a: `%s'\n"
+
+#: lexsup.c:736
+msgid "%P%F: unrecognized -assert option `%s'\n"
+msgstr "%P%F: rogha anaithnid -assert: `%s'\n"
+
+#: lexsup.c:779
+msgid "%F%P: unknown demangling style `%s'"
+msgstr "%F%P: stíl anaithnid díchoscartha `%s'"
+
+#: lexsup.c:841
+msgid "%P%F: invalid number `%s'\n"
+msgstr "%P%F: uimhir neamhbhailí `%s'\n"
+
+#: lexsup.c:939
+msgid "%P%F: bad --unresolved-symbols option: %s\n"
+msgstr "%P%F: drochrogha --unresolved-symbols: %s\n"
+
+#. This can happen if the user put "-rpath,a" on the command
+#. line. (Or something similar. The comma is important).
+#. Getopt becomes confused and thinks that this is a -r option
+#. but it cannot parse the text after the -r so it refuses to
+#. increment the optind counter. Detect this case and issue
+#. an error message here. We cannot just make this a warning,
+#. increment optind, and continue because getopt is too confused
+#. and will seg-fault the next time around.
+#: lexsup.c:1013
+msgid "%P%F: bad -rpath option\n"
+msgstr "%P%F: drochrogha -rpath\n"
+
+#: lexsup.c:1124
+msgid "%P%F: -shared not supported\n"
+msgstr "%P%F: ní thacaítear le -shared\n"
+
+#: lexsup.c:1133
+msgid "%P%F: -pie not supported\n"
+msgstr "%P%F: ní thacaítear le -pie\n"
+
+#: lexsup.c:1143
+msgid "name"
+msgstr "ainm"
+
+#: lexsup.c:1145
+msgid "alignment"
+msgstr "ailíniú"
+
+#: lexsup.c:1148
+msgid "%P%F: invalid section sorting option: %s\n"
+msgstr "%P%F: rogha neamhbhailí sórtála rannán: %s\n"
+
+#: lexsup.c:1180
+msgid "%P%F: invalid argument to option \"--section-start\"\n"
+msgstr "%P%F: rogha neamhbhailí tar éis \"--section-start\"\n"
+
+#: lexsup.c:1187
+msgid "%P%F: missing argument(s) to option \"--section-start\"\n"
+msgstr "%P%F: argóint(í) ar iarraidh tar éis \"--section-start\"\n"
+
+#: lexsup.c:1398
+msgid "%P%F: may not nest groups (--help for usage)\n"
+msgstr "%P%F: ní cheadaítear grúpaí a bheith neadaithe (--help = cabhair)\n"
+
+#: lexsup.c:1405
+msgid "%P%F: group ended before it began (--help for usage)\n"
+msgstr "%P%F: deireadh an ghrúpa roimh a thús (--help = úsáid)\n"
+
+#: lexsup.c:1433
+msgid "%P%X: --hash-size needs a numeric argument\n"
+msgstr "%P%X: argóint uimhriúil de dhíth tar éis --hash-size\n"
+
+#: lexsup.c:1484 lexsup.c:1497
+msgid "%P%F: invalid hex number `%s'\n"
+msgstr "%P%F: uimhir neamhbhailí heicsidheachúlach `%s'\n"
+
+#: lexsup.c:1533
+#, c-format
+msgid "Usage: %s [options] file...\n"
+msgstr "Úsáid: %s [roghanna] comhad...\n"
+
+#: lexsup.c:1535
+#, c-format
+msgid "Options:\n"
+msgstr "Roghanna:\n"
+
+#: lexsup.c:1613
+#, c-format
+msgid " @FILE"
+msgstr " @COMHAD"
+
+#: lexsup.c:1616
+#, c-format
+msgid "Read options from FILE\n"
+msgstr "Léigh roghanna ón gCOMHAD\n"
+
+#. Note: Various tools (such as libtool) depend upon the
+#. format of the listings below - do not change them.
+#: lexsup.c:1621
+#, c-format
+msgid "%s: supported targets:"
+msgstr "%s: spriocanna tacaithe:"
+
+#: lexsup.c:1629
+#, c-format
+msgid "%s: supported emulations: "
+msgstr "%s: aithrisí a dtacaítear leo: "
+
+#: lexsup.c:1634
+#, c-format
+msgid "%s: emulation specific options:\n"
+msgstr "%s: roghanna a bhaineann le haithris:\n"
+
+#: lexsup.c:1639
+#, c-format
+msgid "Report bugs to %s\n"
+msgstr "Seol tuairiscí ar fhabhtanna chuig %s\n"
+
+#: mri.c:291
+msgid "%P%F: unknown format type %s\n"
+msgstr "%P%F: cineál anaithnid formáide %s\n"
+
+#: pe-dll.c:367
+#, c-format
+msgid "%XUnsupported PEI architecture: %s\n"
+msgstr "%XAiltireacht PEI gan tacaíocht: %s\n"
+
+#: pe-dll.c:673
+#, c-format
+msgid "%XCannot export %s: invalid export name\n"
+msgstr "%XNí féidir %s a easpórtáil: ainm neamhbhailí easpórtála\n"
+
+#: pe-dll.c:729
+#, c-format
+msgid "%XError, duplicate EXPORT with ordinals: %s (%d vs %d)\n"
+msgstr "%XEarráid, EXPORT dúblach le horduimhreacha: %s (%d vs %d)\n"
+
+#: pe-dll.c:736
+#, c-format
+msgid "Warning, duplicate EXPORT: %s\n"
+msgstr "Rabhadh, EXPORT dúblach: %s\n"
+
+#: pe-dll.c:823
+#, c-format
+msgid "%XCannot export %s: symbol not defined\n"
+msgstr "%XNí féidir %s a easpórtáil: siombail gan sainmhíniú\n"
+
+#: pe-dll.c:829
+#, c-format
+msgid "%XCannot export %s: symbol wrong type (%d vs %d)\n"
+msgstr "%XNí féidir %s a easpórtáil: siombail den chineál mícheart (%d vs %d)\n"
+
+#: pe-dll.c:836
+#, c-format
+msgid "%XCannot export %s: symbol not found\n"
+msgstr "%XNí féidir %s a easpórtáil: siombail gan aimsiú\n"
+
+#: pe-dll.c:949
+#, c-format
+msgid "%XError, ordinal used twice: %d (%s vs %s)\n"
+msgstr "%XEarráid, úsáideadh orduimhir faoi dhó: %d (%s vs %s)\n"
+
+#: pe-dll.c:1297
+#, c-format
+msgid "%XError: %d-bit reloc in dll\n"
+msgstr "%XEarráid: athshuíomh %d-giotán i dll\n"
+
+#: pe-dll.c:1425
+#, c-format
+msgid "%s: Can't open output def file %s\n"
+msgstr "%s: Ní féidir aschomhad %s a oscailt\n"
+
+#: pe-dll.c:1568
+#, c-format
+msgid "; no contents available\n"
+msgstr "; níl an t-ábhar ar fáil\n"
+
+#: pe-dll.c:2364
+msgid "%C: variable '%T' can't be auto-imported. Please read the documentation for ld's --enable-auto-import for details.\n"
+msgstr "%C: ní féidir athróg '%T' a uathiompórtáil. Léigh an doiciméadú \"ld\" ar --enable-auto-import chun na mionsonraí a fháil.\n"
+
+#: pe-dll.c:2394
+#, c-format
+msgid "%XCan't open .lib file: %s\n"
+msgstr "%XNí féidir comhad .lib a oscailt: %s\n"
+
+#: pe-dll.c:2399
+#, c-format
+msgid "Creating library file: %s\n"
+msgstr "Comhad leabharlainne á chruthú: %s\n"
+
+#~ msgid "%F%S non constant expression for %s\n"
+#~ msgstr "%F%S slonn inathraitheach do %s\n"
+
+#~ msgid "%P%F: out of memory during initialization"
+#~ msgstr "%P%F: cuimhne ídithe le linn túsaithe"
+
+#~ msgid "%P%F: -static and -shared may not be used together\n"
+#~ msgstr "%P%F: ní cheadaítear roghanna -static agus -shared le chéile\n"
+
+#~ msgid "%P%X: generated"
+#~ msgstr "%P%X: ginte"
diff --git a/binutils-2.21/ld/po/id.gmo b/binutils-2.21/ld/po/id.gmo
new file mode 100644
index 0000000..155f607
--- /dev/null
+++ b/binutils-2.21/ld/po/id.gmo
Binary files differ
diff --git a/binutils-2.21/ld/po/id.po b/binutils-2.21/ld/po/id.po
new file mode 100644
index 0000000..0e5de9e
--- /dev/null
+++ b/binutils-2.21/ld/po/id.po
@@ -0,0 +1,2155 @@
+# Pesan Bahasa Indonesia untuk LD
+# Copyright (C) 2008 Free Software Foundation, Inc.
+# This file is distributed under the same license as the binutils package.
+# Arif E. Nugroho <arif_endro@yahoo.com>, 2008, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ld 2.20\n"
+"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
+"POT-Creation-Date: 2009-09-07 14:10+0200\n"
+"PO-Revision-Date: 2009-11-11 08:00+0700\n"
+"Last-Translator: Arif E. Nugroho <arif_endro@yahoo.com>\n"
+"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: emultempl/armcoff.em:73
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code Dukung antar-kerja dengan kode lama\n"
+
+#: emultempl/armcoff.em:74
+#, c-format
+msgid " --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"
+msgstr " --thumb-entry=<sym> Set titik masukan ke simbol Thumb <sym>\n"
+
+#: emultempl/armcoff.em:122
+#, c-format
+msgid "Errors encountered processing file %s"
+msgstr "Error ditemui dalam pemrosesan berkas %s"
+
+#: emultempl/armcoff.em:190 emultempl/pe.em:1710
+msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"
+msgstr "%P: peringatan: '--thumb-entry %s' memaksa '-e %s'\n"
+
+#: emultempl/armcoff.em:195 emultempl/pe.em:1715
+msgid "%P: warning: cannot find thumb start symbol %s\n"
+msgstr "%P: warning: tidak dapat menemukan thumb awal simbol %s\n"
+
+#: emultempl/pe.em:371
+#, c-format
+msgid " --base_file <basefile> Generate a base file for relocatable DLLs\n"
+msgstr " --base_file <basefile> Buat sebuah berkas dasar untuk DLL yang dapat direlokasikan\n"
+
+#: emultempl/pe.em:372
+#, c-format
+msgid " --dll Set image base to the default for DLLs\n"
+msgstr " --dll Set dasar image ke default untuk DLLs\n"
+
+#: emultempl/pe.em:373
+#, c-format
+msgid " --file-alignment <size> Set file alignment\n"
+msgstr " --file-alignment <besar> Set berkas alignment\n"
+
+#: emultempl/pe.em:374
+#, c-format
+msgid " --heap <size> Set initial size of the heap\n"
+msgstr " --heap <besar> Set ukuran inisial dari heap\n"
+
+#: emultempl/pe.em:375
+#, c-format
+msgid " --image-base <address> Set start address of the executable\n"
+msgstr " --image-base <alamat> Set alamat awal dari executabel\n"
+
+#: emultempl/pe.em:376
+#, c-format
+msgid " --major-image-version <number> Set version number of the executable\n"
+msgstr " --major-image-version <nomor> Set nomor versi dari executabel\n"
+
+#: emultempl/pe.em:377
+#, c-format
+msgid " --major-os-version <number> Set minimum required OS version\n"
+msgstr " --major-os-version <nomor> Set versi minimum yang dibutuhkan oleh OS\n"
+
+#: emultempl/pe.em:378
+#, c-format
+msgid " --major-subsystem-version <number> Set minimum required OS subsystem version\n"
+msgstr " --major-subsystem-version <nomor> Set minimum versi OS subsistem yang dibutuhkan\n"
+
+#: emultempl/pe.em:379
+#, c-format
+msgid " --minor-image-version <number> Set revision number of the executable\n"
+msgstr " --minor-image-version <nomor> Set nomor revisi dari executabel\n"
+
+#: emultempl/pe.em:380
+#, c-format
+msgid " --minor-os-version <number> Set minimum required OS revision\n"
+msgstr " --minor-os-version <nomor> Set versi OS minimum yang dibutuhkan\n"
+
+#: emultempl/pe.em:381
+#, c-format
+msgid " --minor-subsystem-version <number> Set minimum required OS subsystem revision\n"
+msgstr " --minor-subsystem-version <nomor> Set versi OS subsistem minimum yang dibutuhkan\n"
+
+#: emultempl/pe.em:382
+#, c-format
+msgid " --section-alignment <size> Set section alignment\n"
+msgstr " --section-alignment <besar> Set daerah alignment\n"
+
+#: emultempl/pe.em:383
+#, c-format
+msgid " --stack <size> Set size of the initial stack\n"
+msgstr " --stack <besar> Set ukuran dari inisial stack\n"
+
+#: emultempl/pe.em:384
+#, c-format
+msgid " --subsystem <name>[:<version>] Set required OS subsystem [& version]\n"
+msgstr " --subsistem <nama>[:<versi>] Set OS subsistem yang dibutuhkan [& versi]\n"
+
+#: emultempl/pe.em:385
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code Dukung antar-kerja dengan kode lama\n"
+
+#: emultempl/pe.em:386
+#, c-format
+msgid " --thumb-entry=<symbol> Set the entry point to be Thumb <symbol>\n"
+msgstr " --thumb-entry=<simbol> Set titik masukan ke Thumb <simbol>\n"
+
+#: emultempl/pe.em:388
+#, c-format
+msgid " --add-stdcall-alias Export symbols with and without @nn\n"
+msgstr " --add-stdcall-alias Expor simbol dengan dan tanpa @nn\n"
+
+#: emultempl/pe.em:389
+#, c-format
+msgid " --disable-stdcall-fixup Don't link _sym to _sym@nn\n"
+msgstr " --disable-stdcall-fixup Jangan hubungkan _sym ke _sym@nn\n"
+
+#: emultempl/pe.em:390
+#, c-format
+msgid " --enable-stdcall-fixup Link _sym to _sym@nn without warnings\n"
+msgstr " --enable-stdcall-fixup Hubungkan _sym ke _sym@nn tanpa peringatan\n"
+
+#: emultempl/pe.em:391
+#, c-format
+msgid " --exclude-symbols sym,sym,... Exclude symbols from automatic export\n"
+msgstr " --exclude-symbols sym,sym,... Exclude simbol dari expor otomatis\n"
+
+#: emultempl/pe.em:392
+#, c-format
+msgid " --exclude-libs lib,lib,... Exclude libraries from automatic export\n"
+msgstr " --exclude-libs lib,lib,... Exclude perpustakaan dari otomatis expor\n"
+
+#: emultempl/pe.em:393
+#, c-format
+msgid " --exclude-modules-for-implib mod,mod,...\n"
+msgstr " --exclude-modules-for-implib mod,mod,...\n"
+
+#: emultempl/pe.em:394
+#, c-format
+msgid " Exclude objects, archive members from auto\n"
+msgstr " Abaikan objek, anggota archive dari auto\n"
+
+#: emultempl/pe.em:395
+#, c-format
+msgid " export, place into import library instead.\n"
+msgstr " ekpor, lebih baik tempatkan kedalam perpustakan impor.\n"
+
+#: emultempl/pe.em:396
+#, c-format
+msgid " --export-all-symbols Automatically export all globals to DLL\n"
+msgstr " --export-all-symbols Otomatis expor seluruh global ke DLL\n"
+
+#: emultempl/pe.em:397
+#, c-format
+msgid " --kill-at Remove @nn from exported symbols\n"
+msgstr " --kill-at Hapus @nn dari simbol terexpor\n"
+
+#: emultempl/pe.em:398
+#, c-format
+msgid " --out-implib <file> Generate import library\n"
+msgstr " --out-implib <berkas> Buat perpustakaan impor\n"
+
+#: emultempl/pe.em:399
+#, c-format
+msgid " --output-def <file> Generate a .DEF file for the built DLL\n"
+msgstr " --output-def <berkas> Buat sebuah berkas .DEF untuk membuat DLL\n"
+
+#: emultempl/pe.em:400
+#, c-format
+msgid " --warn-duplicate-exports Warn about duplicate exports.\n"
+msgstr " --warn-duplicate-exports Peringatkan tetang duplikasi expor.\n"
+
+#: emultempl/pe.em:401
+#, c-format
+msgid ""
+" --compat-implib Create backward compatible import libs;\n"
+" create __imp_<SYMBOL> as well.\n"
+msgstr ""
+" --compat-implib Buat backwar kompatibel impor libs;\n"
+" buat __imp_<SIMBOL> juga.\n"
+
+#: emultempl/pe.em:403
+#, c-format
+msgid ""
+" --enable-auto-image-base Automatically choose image base for DLLs\n"
+" unless user specifies one\n"
+msgstr ""
+" --enable-auto-image-base Otomatis pilih dasar image untuk DLL\n"
+" kecuali pengguna menspesifikasikannya\n"
+
+#: emultempl/pe.em:405
+#, c-format
+msgid " --disable-auto-image-base Do not auto-choose image base. (default)\n"
+msgstr " --disable-auto-image-base Jangan auto-choose image base. (default)\n"
+
+#: emultempl/pe.em:406
+#, c-format
+msgid ""
+" --dll-search-prefix=<string> When linking dynamically to a dll without\n"
+" an importlib, use <string><basename>.dll\n"
+" in preference to lib<basename>.dll \n"
+msgstr ""
+" --dll-search-prefix=<string> Ketika menghubungkan secra dinamis ke sebuah dll tanpa\n"
+" sebuah imporlib, gunakan <string><basename>.dll\n"
+" dalam kesukaan ke lib<nama dasar>.dll\n"
+
+#: emultempl/pe.em:409
+#, c-format
+msgid ""
+" --enable-auto-import Do sophistcated linking of _sym to\n"
+" __imp_sym for DATA references\n"
+msgstr ""
+" --enable-auto-import Lakukan penghubungan istimewa dari _sym ke\n"
+" __imp_sym untuk referensi DATA\n"
+
+#: emultempl/pe.em:411
+#, c-format
+msgid " --disable-auto-import Do not auto-import DATA items from DLLs\n"
+msgstr " --disable-auto-import Jangan auto-import DATA items dari DLL\n"
+
+#: emultempl/pe.em:412
+#, c-format
+msgid ""
+" --enable-runtime-pseudo-reloc Work around auto-import limitations by\n"
+" adding pseudo-relocations resolved at\n"
+" runtime.\n"
+msgstr ""
+" --enable-runtime-pseudo-reloc Atasi pembatasan auto-import dengan\n"
+" menambahkan pseudo-relocations diselesaikan di\n"
+" waktu-jalan.\n"
+
+#: emultempl/pe.em:415
+#, c-format
+msgid ""
+" --disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations for\n"
+" auto-imported DATA.\n"
+msgstr ""
+" --disable-runtime-pseudo-reloc Jangan tambahkan runtime pseudo-relocations untuk\n"
+" auto-imported DATA.\n"
+
+#: emultempl/pe.em:417
+#, c-format
+msgid ""
+" --enable-extra-pe-debug Enable verbose debug output when building\n"
+" or linking to DLLs (esp. auto-import)\n"
+msgstr ""
+" --enable-extra-pe-debug Aktifkan keluaran verbose debug ketika membuat\n"
+" atau menghubungkan ke DLL (lebih tepatnya auto-import)\n"
+
+#: emultempl/pe.em:420
+#, c-format
+msgid ""
+" --large-address-aware Executable supports virtual addresses\n"
+" greater than 2 gigabytes\n"
+msgstr ""
+" --large-address-aware Executable dukung alamat maya\n"
+" lebih besar dari 2 gigabytes\n"
+
+#: emultempl/pe.em:422
+#, c-format
+msgid ""
+" --enable-long-section-names Use long COFF section names even in\n"
+" executable image files\n"
+msgstr ""
+" --enable-long-section-names Gunakan nama daerah COFF panjang bahkan dalam\n"
+" berkas image eksekusi\n"
+
+#: emultempl/pe.em:424
+#, c-format
+msgid ""
+" --disable-long-section-names Never use long COFF section names, even\n"
+" in object files\n"
+msgstr ""
+" --disable-long-section-names Jangan pernah menggunakan nama daerah COFF panjang,\n"
+" bahkan dalam berkas objek.\n"
+
+#: emultempl/pe.em:426
+#, c-format
+msgid ""
+" --dynamicbase\t\t\t Image base address may be relocated using\n"
+"\t\t\t\t address space layout randomization (ASLR)\n"
+msgstr ""
+" --dynamicbase\t\t\t Alamat dasar image mungkin direlokasi menggunakan\n"
+"\t\t\t\t layout ruang alamat terandomisasi (ASLR)\n"
+
+#: emultempl/pe.em:428
+#, c-format
+msgid " --forceinteg\t\t Code integrity checks are enforced\n"
+msgstr " --forceinteg\t\t Pemeriksaan integritas kode diwajibkan\n"
+
+#: emultempl/pe.em:429
+#, c-format
+msgid " --nxcompat\t\t Image is compatible with data execution prevention\n"
+msgstr " --nxcompat\t\t Image yang kompatibel dengan eksekusi data prevention\n"
+
+#: emultempl/pe.em:430
+#, c-format
+msgid " --no-isolation\t\t Image understands isolation but do not isolate the image\n"
+msgstr " --no-isolation\t\t Image memahami isolasi tetapi tidak mengisolasi image itu sendiri\n"
+
+#: emultempl/pe.em:431
+#, c-format
+msgid ""
+" --no-seh\t\t\t Image does not use SEH. No SE handler may\n"
+"\t\t\t\t be called in this image\n"
+msgstr ""
+" --no-seh\t\t\t Image tidak menggunakan SEH. Tidak ada SE handler yang\n"
+"\t\t\t\t bisa dipanggil dalam image ini\n"
+
+#: emultempl/pe.em:433
+#, c-format
+msgid " --no-bind\t\t\t Do not bind this image\n"
+msgstr " --no-bind\t\t\t Jangan ikat image ini\n"
+
+#: emultempl/pe.em:434
+#, c-format
+msgid " --wdmdriver\t\t Driver uses the WDM model\n"
+msgstr " --wdmdriver\t\t Driver menggunakan model WDM\n"
+
+#: emultempl/pe.em:435
+#, c-format
+msgid " --tsaware \t\t Image is Terminal Server aware\n"
+msgstr " --tsaware \t\t Image memahami adanya Terminal Server\n"
+
+#: emultempl/pe.em:503
+msgid "%P: warning: bad version number in -subsystem option\n"
+msgstr "%P: peringatan: nomor versi buruk dalam pilihan -subsistem\n"
+
+#: emultempl/pe.em:534
+msgid "%P%F: invalid subsystem type %s\n"
+msgstr "%P%F: tipe subsistem %s tidak valid\n"
+
+#: emultempl/pe.em:573
+msgid "%P%F: invalid hex number for PE parameter '%s'\n"
+msgstr "%P%F: nomor hex untuk parameter PE '%s' tidak valid\n"
+
+#: emultempl/pe.em:590
+msgid "%P%F: strange hex info for PE parameter '%s'\n"
+msgstr "%P%F: informasi hex untuk paramter PE '%s' aneh\n"
+
+#: emultempl/pe.em:607
+#, c-format
+msgid "%s: Can't open base file %s\n"
+msgstr "%s: Tidak dapat membuka berkas dasar %s\n"
+
+#: emultempl/pe.em:870
+msgid "%P: warning, file alignment > section alignment.\n"
+msgstr "%P: peringatan, berkas alignment > daerah alignment.\n"
+
+#: emultempl/pe.em:899
+msgid "%P: warning: --export-dynamic is not supported for PE targets, did you mean --export-all-symbols?\n"
+msgstr "%P: peringatan: --export-dynmic tidak didukung untuk target PE, apakah yang anda maksud --export-all-symbols?\n"
+
+#: emultempl/pe.em:963 emultempl/pe.em:990
+#, c-format
+msgid "Warning: resolving %s by linking to %s\n"
+msgstr "Peringatan: meresolf %s dengan menghubungkan ke %s\n"
+
+#: emultempl/pe.em:968 emultempl/pe.em:995
+msgid "Use --enable-stdcall-fixup to disable these warnings\n"
+msgstr "Gunakan --enable-stdcall-fixup untuk menonaktifkan peringatan ini\n"
+
+#: emultempl/pe.em:969 emultempl/pe.em:996
+msgid "Use --disable-stdcall-fixup to disable these fixups\n"
+msgstr "Gunakan --disable-stdcall-fixup untuk menonaktifkan perbaikan ini\n"
+
+#: emultempl/pe.em:1015
+#, c-format
+msgid "%C: Cannot get section contents - auto-import exception\n"
+msgstr "%C: Tidak dpaat memperoleh isi daerah - auto-import exception\n"
+
+#: emultempl/pe.em:1055
+#, c-format
+msgid "Info: resolving %s by linking to %s (auto-import)\n"
+msgstr "Info: meresolf %s dengan menghubungkan ke %s (auto-import)\n"
+
+#: emultempl/pe.em:1062
+msgid ""
+"%P: warning: auto-importing has been activated without --enable-auto-import specified on the command line.\n"
+"This should work unless it involves constant data structures referencing symbols from auto-imported DLLs.\n"
+msgstr ""
+"%P: peringatan: auto-importing telah diaktifkan tanpa --enable-auto-import dispesifikasikan di baris perintah.\n"
+"Ini seharusnya bekerja kecuali ini melibatkan konstan struktur data mereferensikan simbol dari auto-imported DLL.\n"
+
+#: emultempl/pe.em:1069 emultempl/pe.em:1268 emultempl/pe.em:1474 ldcref.c:488
+#: ldcref.c:586 ldmain.c:1107 ldmisc.c:285 pe-dll.c:683 pe-dll.c:1227
+#: pe-dll.c:1324
+msgid "%B%F: could not read symbols: %E\n"
+msgstr "%B%F: tidak dapat membaca simbol: %E\n"
+
+#: emultempl/pe.em:1149
+msgid "%F%P: cannot perform PE operations on non PE output file '%B'.\n"
+msgstr "%F%P: tidak dapat melakukan operasi PE di berkas keluaran bukan PE '%B'.\n"
+
+#: emultempl/pe.em:1515
+#, c-format
+msgid "Errors encountered processing file %s\n"
+msgstr "Error ditemui dalam pemrosesan berkas %s\n"
+
+#: emultempl/pe.em:1538
+#, c-format
+msgid "Errors encountered processing file %s for interworking\n"
+msgstr "Error ditemui dalam pemrosesan berkas %s untuk antar-kerja\n"
+
+#: emultempl/pe.em:1599 ldexp.c:539 ldlang.c:3276 ldlang.c:6636 ldlang.c:6667
+#: ldmain.c:1052
+msgid "%P%F: bfd_link_hash_lookup failed: %E\n"
+msgstr "%P%F: bfd_link_hash_lookup gagal: %E\n"
+
+#: ldcref.c:168
+msgid "%X%P: bfd_hash_table_init of cref table failed: %E\n"
+msgstr "%X%P: bfd_hash_table_init dari cref tabel gagal: %E\n"
+
+#: ldcref.c:174
+msgid "%X%P: cref_hash_lookup failed: %E\n"
+msgstr "%X%P: cref_hash_lookup gagal: %E\n"
+
+#: ldcref.c:184
+msgid "%X%P: cref alloc failed: %E\n"
+msgstr "%X%P: cref alokasi gagal: %E\n"
+
+#: ldcref.c:364
+#, c-format
+msgid ""
+"\n"
+"Cross Reference Table\n"
+"\n"
+msgstr ""
+"\n"
+"Tabel Referensi Silang\n"
+"\n"
+
+#: ldcref.c:365
+msgid "Symbol"
+msgstr "Simbol"
+
+#: ldcref.c:373
+#, c-format
+msgid "File\n"
+msgstr "Berkas\n"
+
+#: ldcref.c:377
+#, c-format
+msgid "No symbols\n"
+msgstr "Tidak ada simbol\n"
+
+#: ldcref.c:530
+msgid "%P: symbol `%T' missing from main hash table\n"
+msgstr "%P: simbol `%T' hilang dari tabel hash utama\n"
+
+#: ldcref.c:648 ldcref.c:655 ldmain.c:1141 ldmain.c:1148
+msgid "%B%F: could not read relocs: %E\n"
+msgstr "%B%F: tidak dapat membaca relokasi: %E\n"
+
+#. We found a reloc for the symbol. The symbol is defined
+#. in OUTSECNAME. This reloc is from a section which is
+#. mapped into a section from which references to OUTSECNAME
+#. are prohibited. We must report an error.
+#: ldcref.c:682
+msgid "%X%C: prohibited cross reference from %s to `%T' in %s\n"
+msgstr "%X%C: dilarang menyilang referensi dari %s ke `%T' dalam %s\n"
+
+#: ldctor.c:85
+msgid "%P%X: Different relocs used in set %s\n"
+msgstr "%P%X: Relokasi berbeda digunakan dalam set %s\n"
+
+#: ldctor.c:103
+msgid "%P%X: Different object file formats composing set %s\n"
+msgstr "%P%X: Format berkas objek berbeda menyusun set %s\n"
+
+#: ldctor.c:279 ldctor.c:293
+msgid "%P%X: %s does not support reloc %s for set %s\n"
+msgstr "%P%X: %s tidak melayani relokasi %s untuk set %s\n"
+
+#: ldctor.c:314
+msgid "%P%X: Unsupported size %d for set %s\n"
+msgstr "%P%X: Ukuran %s tidak didukung untuk set %s\n"
+
+#: ldctor.c:335
+msgid ""
+"\n"
+"Set Symbol\n"
+"\n"
+msgstr ""
+"\n"
+"Set Simbol\n"
+"\n"
+
+#: ldemul.c:239
+#, c-format
+msgid "%S SYSLIB ignored\n"
+msgstr "%S SYSLIB diabaikan\n"
+
+#: ldemul.c:245
+#, c-format
+msgid "%S HLL ignored\n"
+msgstr "%S HLL diabaikan\n"
+
+#: ldemul.c:265
+msgid "%P: unrecognised emulation mode: %s\n"
+msgstr "%P: mode emulasi tidak dikenal: %s\n"
+
+#: ldemul.c:266
+msgid "Supported emulations: "
+msgstr "Emulasi yang didukung: "
+
+#: ldemul.c:308
+#, c-format
+msgid " no emulation specific options.\n"
+msgstr " tidak ada pilihan spesifik emulasi.\n"
+
+#: ldexp.c:352
+#, c-format
+msgid "%F%S %% by zero\n"
+msgstr "%F%S %% dengan nol\n"
+
+#: ldexp.c:360
+#, c-format
+msgid "%F%S / by zero\n"
+msgstr "%F%S / dengan nol\n"
+
+#: ldexp.c:553
+#, c-format
+msgid "%X%S: unresolvable symbol `%s' referenced in expression\n"
+msgstr "%X%S: simbol tidak ditemukan `%s' direferensikan dalam expresi\n"
+
+#: ldexp.c:564
+#, c-format
+msgid "%F%S: undefined symbol `%s' referenced in expression\n"
+msgstr "%F%S: simbol `%s' tidak terdefinisi direferensikan dalam ekspresi\n"
+
+#: ldexp.c:585 ldexp.c:602 ldexp.c:629
+#, c-format
+msgid "%F%S: undefined section `%s' referenced in expression\n"
+msgstr "%F%S: daerah `%s' tidak terdefinisi direferensikan dalam ekspresi\n"
+
+#: ldexp.c:656 ldexp.c:669
+#, c-format
+msgid "%F%S: undefined MEMORY region `%s' referenced in expression\n"
+msgstr "%F%S: daerah `%s' MEMORY tidak terdefinisi direferensikan dalam ekspresi\n"
+
+#: ldexp.c:680
+#, c-format
+msgid "%F%S: unknown constant `%s' referenced in expression\n"
+msgstr "%F%S: konstan `%s' tidak diketahui direferensikan dalam ekspresi\n"
+
+#: ldexp.c:741
+#, c-format
+msgid "%F%S can not PROVIDE assignment to location counter\n"
+msgstr "%F%S tidak dapat MENYEDIAKAN assignment ke lokasi counter\n"
+
+#: ldexp.c:755
+#, c-format
+msgid "%F%S invalid assignment to location counter\n"
+msgstr "%F%S assignment tidak valid ke lokasi counter\n"
+
+#: ldexp.c:758
+#, c-format
+msgid "%F%S assignment to location counter invalid outside of SECTION\n"
+msgstr "%F%S assignment ke lokasi counter tidak valid diluar dari DAERAH\n"
+
+#: ldexp.c:767
+msgid "%F%S cannot move location counter backwards (from %V to %V)\n"
+msgstr "%F%S tidak dapat memindahkan lokasi counter backward (dari %V ke %V)\n"
+
+#: ldexp.c:806
+msgid "%P%F:%s: hash creation failed\n"
+msgstr "%P%F:%s: pembuatan hash gagal\n"
+
+#: ldexp.c:1065 ldexp.c:1090 ldexp.c:1149
+#, c-format
+msgid "%F%S: nonconstant expression for %s\n"
+msgstr "%F%S: ekspresi tidak konstan untuk %s\n"
+
+#: ldfile.c:137
+#, c-format
+msgid "attempt to open %s failed\n"
+msgstr "mencoba untuk membuka %s gagal\n"
+
+#: ldfile.c:139
+#, c-format
+msgid "attempt to open %s succeeded\n"
+msgstr "mencoba untuk membuka %s sukses\n"
+
+#: ldfile.c:145
+msgid "%F%P: invalid BFD target `%s'\n"
+msgstr "%F%P: target BFD `%s' tidak valid\n"
+
+#: ldfile.c:254 ldfile.c:283
+msgid "%P: skipping incompatible %s when searching for %s\n"
+msgstr "%P: melewatkan tidak kompatibel %s ketika mencari untuk %s\n"
+
+#: ldfile.c:267
+msgid "%F%P: attempted static link of dynamic object `%s'\n"
+msgstr "%F%P: mencoba menhubungkan statik dari objek dinamis `%s'\n"
+
+#: ldfile.c:379
+msgid "%F%P: %s (%s): No such file: %E\n"
+msgstr "%F%P: %s (%s): Tidak ada berkas seperti itu: %E\n"
+
+#: ldfile.c:382
+msgid "%F%P: %s: No such file: %E\n"
+msgstr "%F%P: %s: Tidak ada berkas seperti itu: %E\n"
+
+#: ldfile.c:412
+msgid "%F%P: cannot find %s inside %s\n"
+msgstr "%F%P: tidak dapat menemukan %s didalam %s\n"
+
+#: ldfile.c:415
+msgid "%F%P: cannot find %s\n"
+msgstr "%F%P: tidak dapat menemukan %s\n"
+
+#: ldfile.c:431 ldfile.c:449
+#, c-format
+msgid "cannot find script file %s\n"
+msgstr "tidak dapat menemukan berkas script %s\n"
+
+#: ldfile.c:433 ldfile.c:451
+#, c-format
+msgid "opened script file %s\n"
+msgstr "membukan berkas script %s\n"
+
+#: ldfile.c:586
+msgid "%P%F: cannot open linker script file %s: %E\n"
+msgstr "%P%F: tidak dapat membukan berkas script penghubung %s: %E\n"
+
+#: ldfile.c:651
+msgid "%P%F: cannot represent machine `%s'\n"
+msgstr "%P%F: tidak dapat merepresent mesin `%s'\n"
+
+#: ldlang.c:1142 ldlang.c:1184 ldlang.c:3006
+msgid "%P%F: can not create hash table: %E\n"
+msgstr "%P%F: tidak dapat membuat tabel hash: %E\n"
+
+#: ldlang.c:1235
+msgid "%P:%S: warning: redeclaration of memory region `%s'\n"
+msgstr "%P:%S: peringatan: redeklarasi dari daerah memori `%s'\n"
+
+#: ldlang.c:1241
+msgid "%P:%S: warning: memory region `%s' not declared\n"
+msgstr "%P:%S: peringatan: daerah memori `%s' tidak dideklarasikan\n"
+
+#: ldlang.c:1275
+msgid "%F%P:%S: error: alias for default memory region\n"
+msgstr "%F%P:%S: error: alias untuk daerah memori baku\n"
+
+#: ldlang.c:1286
+msgid "%F%P:%S: error: redefinition of memory region alias `%s'\n"
+msgstr "%F%P:%S: error: redefinisi dari daerah memori alias `%s'\n"
+
+#: ldlang.c:1293
+msgid "%F%P:%S: error: memory region `%s' for alias `%s' does not exist\n"
+msgstr "%F%P:%S: error: daerah memori `%s' untuk alias `%s' tidak ada\n"
+
+#: ldlang.c:1345 ldlang.c:1384
+msgid "%P%F: failed creating section `%s': %E\n"
+msgstr "%P%F: gagal membuat daerah `%s': %E\n"
+
+#: ldlang.c:1927
+#, c-format
+msgid ""
+"\n"
+"Discarded input sections\n"
+"\n"
+msgstr ""
+"\n"
+"Daerah masukan diabaikan\n"
+"\n"
+
+#: ldlang.c:1935
+msgid ""
+"\n"
+"Memory Configuration\n"
+"\n"
+msgstr ""
+"\n"
+"Konfigurasi memori\n"
+"\n"
+
+#: ldlang.c:1937
+msgid "Name"
+msgstr "Nama"
+
+#: ldlang.c:1937
+msgid "Origin"
+msgstr "Asal"
+
+#: ldlang.c:1937
+msgid "Length"
+msgstr "Panjang"
+
+#: ldlang.c:1937
+msgid "Attributes"
+msgstr "Atribut"
+
+#: ldlang.c:1977
+#, c-format
+msgid ""
+"\n"
+"Linker script and memory map\n"
+"\n"
+msgstr ""
+"\n"
+"Scrip penghubung dan peta memori\n"
+"\n"
+
+#: ldlang.c:2045
+msgid "%P%F: Illegal use of `%s' section\n"
+msgstr "%P%F: Penggunaan ilegal dari daerah `%s'\n"
+
+#: ldlang.c:2054
+msgid "%P%F: output format %s cannot represent section called %s\n"
+msgstr "%P%F: format keluaran %s tidak dapat merepresentasikan daerah disebut %s\n"
+
+#: ldlang.c:2602
+msgid "%B: file not recognized: %E\n"
+msgstr "%B: berkas tidak dikenali: %E\n"
+
+#: ldlang.c:2603
+msgid "%B: matching formats:"
+msgstr "%B: format cocok:"
+
+#: ldlang.c:2610
+msgid "%F%B: file not recognized: %E\n"
+msgstr "%F%B: berkas tidak dikenali: %E\n"
+
+#: ldlang.c:2677
+msgid "%F%B: member %B in archive is not an object\n"
+msgstr "%F%B: anggota %B dalam archive bukan sebuah objek\n"
+
+#: ldlang.c:2688 ldlang.c:2702
+msgid "%F%B: could not read symbols: %E\n"
+msgstr "%F%B: tidak dapat membaca simbol: %E\n"
+
+#: ldlang.c:2976
+msgid "%P: warning: could not find any targets that match endianness requirement\n"
+msgstr "%P: peringatan: tidak dapat menemukan target apapun yan cocok dengan endianness yang dibutuhkan\n"
+
+#: ldlang.c:2990
+msgid "%P%F: target %s not found\n"
+msgstr "%P%F: target %s tidak ditemukan\n"
+
+#: ldlang.c:2992
+msgid "%P%F: cannot open output file %s: %E\n"
+msgstr "%P%F: tidak dapat membuka berkas keluaran %s: %E\n"
+
+#: ldlang.c:2998
+msgid "%P%F:%s: can not make object file: %E\n"
+msgstr "%P%F:%s: tidak dapat membuat berkas objek: %E\n"
+
+#: ldlang.c:3002
+msgid "%P%F:%s: can not set architecture: %E\n"
+msgstr "%P%F:%s: tidak dapat menset arsitektur: %E\n"
+
+#: ldlang.c:3143
+msgid "%P: warning: %s contains output sections; did you forget -T?\n"
+msgstr "%P: peringatan: %s berisi daerah keluaran; apakah anda melupakan -T?\n"
+
+#: ldlang.c:3169
+msgid "%P%F: bfd_hash_lookup failed creating symbol %s\n"
+msgstr "%P%F: bfd_hash_lookup gagal membuat simbol %s\n"
+
+#: ldlang.c:3187
+msgid "%P%F: bfd_hash_allocate failed creating symbol %s\n"
+msgstr "%P%F: bfd_hash_allocate gagal membuat simbol %s\n"
+
+#: ldlang.c:3566
+msgid "%F%P: %s not found for insert\n"
+msgstr "%F%P: %s tidak ditemukan untuk insert\n"
+
+#: ldlang.c:3781
+msgid " load address 0x%V"
+msgstr " alamat beban 0x%V"
+
+#: ldlang.c:4052
+msgid "%W (size before relaxing)\n"
+msgstr "%W (ukuran sebelum relaxing)\n"
+
+#: ldlang.c:4143
+#, c-format
+msgid "Address of section %s set to "
+msgstr "Alamat dari daerah %s diset ke "
+
+#: ldlang.c:4296
+#, c-format
+msgid "Fail with %d\n"
+msgstr "Gagal dengan %d\n"
+
+#: ldlang.c:4579
+msgid "%X%P: section %s loaded at [%V,%V] overlaps section %s loaded at [%V,%V]\n"
+msgstr "%X%P: daerah %s dimuat di [%V,%V] daerah overlaps %s dimuat di [%V,%V]\n"
+
+#: ldlang.c:4595
+msgid "%X%P: region `%s' overflowed by %ld bytes\n"
+msgstr "%X%P: daerah `%s' overflowed dengan %ld bytes\n"
+
+#: ldlang.c:4618
+msgid "%X%P: address 0x%v of %B section `%s' is not within region `%s'\n"
+msgstr "%X%P: alamat 0x%v dari %B daerah `%s' tidak dalam daerah `%s'\n"
+
+#: ldlang.c:4629
+msgid "%X%P: %B section `%s' will not fit in region `%s'\n"
+msgstr "%X%P: %B daerah `%s' tidak akan memenuhi dalam daerah `%s'\n"
+
+#: ldlang.c:4669
+#, c-format
+msgid "%F%S: non constant or forward reference address expression for section %s\n"
+msgstr "%F%S: bukan constant atau ekspresi alamat referensi kedepan untuk daerah %s\n"
+
+#: ldlang.c:4694
+msgid "%P%X: Internal error on COFF shared library section %s\n"
+msgstr "%P%X: Internal error di COFF daerah library terbagi %s\n"
+
+#: ldlang.c:4753
+msgid "%P%F: error: no memory region specified for loadable section `%s'\n"
+msgstr "%P%F: error: bukan daerah memori dispesifikasikan untuk daerah loadabel `%s'\n"
+
+#: ldlang.c:4758
+msgid "%P: warning: no memory region specified for loadable section `%s'\n"
+msgstr "%P: peringatan: bukan daerah memori dispesifikasikan untuk daerah loadable `%s'\n"
+
+#: ldlang.c:4780
+msgid "%P: warning: changing start of section %s by %lu bytes\n"
+msgstr "%P: peringatan: mengubah awal dari daerah %s dengan %lu bytes\n"
+
+#: ldlang.c:4862
+msgid "%P: warning: dot moved backwards before `%s'\n"
+msgstr "%P: peringatan: dot dipindahkan kebelakang sebelum `%s'\n"
+
+#: ldlang.c:5035
+msgid "%P%F: can't relax section: %E\n"
+msgstr "%P%F: tidak dapat relaks daerah: %E\n"
+
+#: ldlang.c:5357
+msgid "%F%P: invalid data statement\n"
+msgstr "%F%P: statemen data tidak valid\n"
+
+#: ldlang.c:5390
+msgid "%F%P: invalid reloc statement\n"
+msgstr "%F%P: relokasi statement tidak valid\n"
+
+#: ldlang.c:5509
+msgid "%P%F: gc-sections requires either an entry or an undefined symbol\n"
+msgstr "%P%F: gc-section membutuhkan baik sebuah masukan atau sebuah simbol tidak terdefinisi\n"
+
+#: ldlang.c:5534
+msgid "%P%F:%s: can't set start address\n"
+msgstr "%P%F:%s: tidak dapat menset awal alamat\n"
+
+#: ldlang.c:5547 ldlang.c:5566
+msgid "%P%F: can't set start address\n"
+msgstr "%P%F: tidak dapt menset awal alamat\n"
+
+#: ldlang.c:5559
+msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n"
+msgstr "%P: peringatan: tidak dapat menemukan simbol masukan %s; default ke %V\n"
+
+#: ldlang.c:5571
+msgid "%P: warning: cannot find entry symbol %s; not setting start address\n"
+msgstr "%P: peringatan: tidak dapat menemukan simbol masukan %s; tidak menset awal alamat\n"
+
+#: ldlang.c:5621
+msgid "%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"
+msgstr "%P%F: Relocatable linking dengan relokasi dari format %s (%B) ke format %s (%B) tidak didukung\n"
+
+#: ldlang.c:5631
+msgid "%P%X: %s architecture of input file `%B' is incompatible with %s output\n"
+msgstr "%P%X: %s arsitektur dari berkas masukan `%b' tidak kompatibel dengan keluaran %s\n"
+
+#: ldlang.c:5653
+msgid "%P%X: failed to merge target specific data of file %B\n"
+msgstr "%P%X: gagal menggabungkan target spesifik data dari berkas %B\n"
+
+#: ldlang.c:5724
+msgid "%P%F: Could not define common symbol `%T': %E\n"
+msgstr "%P%F: tidak dapat membaca simbol `%T': %E\n"
+
+#: ldlang.c:5736
+msgid ""
+"\n"
+"Allocating common symbols\n"
+msgstr ""
+"\n"
+"Mengalokasikan simbol umum\n"
+
+#: ldlang.c:5737
+msgid ""
+"Common symbol size file\n"
+"\n"
+msgstr ""
+"Simbol umum ukuran berkas\n"
+"\n"
+
+#: ldlang.c:5878
+msgid "%P%F: invalid syntax in flags\n"
+msgstr "%P%F: sintaks dalam tanda tidak valid\n"
+
+#: ldlang.c:6270
+msgid "%P%F: Failed to create hash table\n"
+msgstr "%P%F: Gagal membuat tabel hash\n"
+
+#: ldlang.c:6549
+msgid "%P%F: multiple STARTUP files\n"
+msgstr "%P%F: multiple berkas STARTUP\n"
+
+#: ldlang.c:6597
+msgid "%X%P:%S: section has both a load address and a load region\n"
+msgstr "%X%P:%S: bagian memiliki baik alamat beban dan daerah beban\n"
+
+#: ldlang.c:6844
+msgid "%F%P: no sections assigned to phdrs\n"
+msgstr "%F%P: tidak ada daerah ditempatkan ke phdrs\n"
+
+#: ldlang.c:6881
+msgid "%F%P: bfd_record_phdr failed: %E\n"
+msgstr "%F%P: bfd_record_phdr gagal: %E\n"
+
+#: ldlang.c:6901
+msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n"
+msgstr "%X%P: daerah `%s' ditempatkan ke phdr `%s' tidak-ada\n"
+
+#: ldlang.c:7299
+msgid "%X%P: unknown language `%s' in version information\n"
+msgstr "%X%P: bahasa tidak diketahui `%s' dalam informasi versi\n"
+
+#: ldlang.c:7441
+msgid "%X%P: anonymous version tag cannot be combined with other version tags\n"
+msgstr "%X%P: versi anonim tag tidak dapat dikombinasikan dengan versi lainnya\n"
+
+#: ldlang.c:7450
+msgid "%X%P: duplicate version tag `%s'\n"
+msgstr "%X%P: duplikasi versi tag `%s'\n"
+
+#: ldlang.c:7470 ldlang.c:7479 ldlang.c:7496 ldlang.c:7506
+msgid "%X%P: duplicate expression `%s' in version information\n"
+msgstr "%X%P: duplikasi ekspresi `%s' dalam informasi versi\n"
+
+#: ldlang.c:7546
+msgid "%X%P: unable to find version dependency `%s'\n"
+msgstr "%X%P: tidak dapat menemukan dependensi versi `%s'\n"
+
+#: ldlang.c:7568
+msgid "%X%P: unable to read .exports section contents\n"
+msgstr "%X%P: tidak dapat membaca isi daerah .exports\n"
+
+#: ldmain.c:233
+msgid "%X%P: can't set BFD default target to `%s': %E\n"
+msgstr "%X%P: tidak dapat menset BFD default target ke `%s': %E\n"
+
+#: ldmain.c:300
+msgid "%P%F: -r and -shared may not be used together\n"
+msgstr "%P%F: -r dan -shared tidak boleh digunakan bersama\n"
+
+#: ldmain.c:343
+msgid "%P%F: -F may not be used without -shared\n"
+msgstr "%P%F: -F tidak boleh digunakan tanpa -shared\n"
+
+#: ldmain.c:345
+msgid "%P%F: -f may not be used without -shared\n"
+msgstr "%P%F: -f tidak boleh digunakan tanpa -shared\n"
+
+#: ldmain.c:393
+msgid "using external linker script:"
+msgstr "menggunakan scrip penghubung eksternal:"
+
+#: ldmain.c:395
+msgid "using internal linker script:"
+msgstr "menggunakan scrip penghubung internal:"
+
+#: ldmain.c:429
+msgid "%P%F: no input files\n"
+msgstr "%P%F: bukan berkas masukan\n"
+
+#: ldmain.c:433
+msgid "%P: mode %s\n"
+msgstr "%P: mode %s\n"
+
+#: ldmain.c:449
+msgid "%P%F: cannot open map file %s: %E\n"
+msgstr "%P%F: tidak dapat membuka berkas map %s: %E\n"
+
+#: ldmain.c:481
+msgid "%P: link errors found, deleting executable `%s'\n"
+msgstr "%P: link error ditemukan, menghapus executabel `%s'\n"
+
+#: ldmain.c:490
+msgid "%F%B: final close failed: %E\n"
+msgstr "%F%B: penutupan akhir gagal: %E\n"
+
+#: ldmain.c:516
+msgid "%X%P: unable to open for source of copy `%s'\n"
+msgstr "%X%P: tidak dapat membuka untuk sumber dari penyalinan `%s'\n"
+
+#: ldmain.c:519
+msgid "%X%P: unable to open for destination of copy `%s'\n"
+msgstr "%X%P: tidak dapat membuka untuk tujuan dari penyalinan `%s'\n"
+
+#: ldmain.c:526
+msgid "%P: Error writing file `%s'\n"
+msgstr "%P: Error menulis berkas `%s'\n"
+
+#: ldmain.c:531 pe-dll.c:1687
+#, c-format
+msgid "%P: Error closing file `%s'\n"
+msgstr "%P: Error menutup berkas `%s'\n"
+
+#: ldmain.c:547
+#, c-format
+msgid "%s: total time in link: %ld.%06ld\n"
+msgstr "%s: total waktu dalam link: %ld.%06ld\n"
+
+#: ldmain.c:550
+#, c-format
+msgid "%s: data size %ld\n"
+msgstr "%s: ukuran data %ld\n"
+
+#: ldmain.c:633
+msgid "%P%F: missing argument to -m\n"
+msgstr "%P%F: hilang argumen ke -m\n"
+
+#: ldmain.c:680 ldmain.c:699 ldmain.c:730
+msgid "%P%F: bfd_hash_table_init failed: %E\n"
+msgstr "%P%F: bfd_hash_table_init gagal: %E\n"
+
+#: ldmain.c:684 ldmain.c:703
+msgid "%P%F: bfd_hash_lookup failed: %E\n"
+msgstr "%P%F: bfd_hash_lookup gagal: %E\n"
+
+#: ldmain.c:717
+msgid "%X%P: error: duplicate retain-symbols-file\n"
+msgstr "%X%P: error: duplikasi retain-symbols-file\n"
+
+#: ldmain.c:760
+msgid "%P%F: bfd_hash_lookup for insertion failed: %E\n"
+msgstr "%P%F: bfd_hash_lookup untuk insertion gagal: %E\n"
+
+#: ldmain.c:765
+msgid "%P: `-retain-symbols-file' overrides `-s' and `-S'\n"
+msgstr "%P: `-retain-symbols-file' memaksa `-s' dana `-S'\n"
+
+#: ldmain.c:829
+#, c-format
+msgid ""
+"Archive member included because of file (symbol)\n"
+"\n"
+msgstr ""
+"Anggota archive dimasukan karena berkas (simbol)\n"
+"\n"
+
+#: ldmain.c:899
+msgid "%X%C: multiple definition of `%T'\n"
+msgstr "%X%X: multiple definisi dari `%T'\n"
+
+#: ldmain.c:902
+msgid "%D: first defined here\n"
+msgstr "%D: pertama didefinisikan disini\n"
+
+#: ldmain.c:906
+msgid "%P: Disabling relaxation: it will not work with multiple definitions\n"
+msgstr "%P: Menonaktifkan relaksasi: ini tidak akan bekerja dengan multiple definisi\n"
+
+#: ldmain.c:936
+msgid "%B: warning: definition of `%T' overriding common\n"
+msgstr "%B: peringatan: definisi dari `%T' memaksa umum\n"
+
+#: ldmain.c:939
+msgid "%B: warning: common is here\n"
+msgstr "%B: peringatan: umum disini\n"
+
+#: ldmain.c:946
+msgid "%B: warning: common of `%T' overridden by definition\n"
+msgstr "%B: peringatan: umum dari `%T' dipaksa oleh definisi\n"
+
+#: ldmain.c:949
+msgid "%B: warning: defined here\n"
+msgstr "%B: peringatan: terdefinisi disini\n"
+
+#: ldmain.c:956
+msgid "%B: warning: common of `%T' overridden by larger common\n"
+msgstr "%B: peringatan: umum dari `%T' dipaksa oleh umum lebih besar\n"
+
+#: ldmain.c:959
+msgid "%B: warning: larger common is here\n"
+msgstr "%B: peringatan: umum lebih besar disini\n"
+
+#: ldmain.c:963
+msgid "%B: warning: common of `%T' overriding smaller common\n"
+msgstr "%B: peringatan: umum dari `%T' memaksa umum lebih kecil\n"
+
+#: ldmain.c:966
+msgid "%B: warning: smaller common is here\n"
+msgstr "%B: peringatan: umum lebih kecil disini\n"
+
+#: ldmain.c:970
+msgid "%B: warning: multiple common of `%T'\n"
+msgstr "%B: peringatan: multiple umum dari `%T'\n"
+
+#: ldmain.c:972
+msgid "%B: warning: previous common is here\n"
+msgstr "%B: peringatan: umum sebelumnya disini\n"
+
+#: ldmain.c:992 ldmain.c:1030
+msgid "%P: warning: global constructor %s used\n"
+msgstr "%P: peringatan: global konstruktor %s digunakan\n"
+
+#: ldmain.c:1040
+msgid "%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"
+msgstr "%P%F: BFD backed error: BFD_RELOC_CTOR tidak didukung\n"
+
+#. We found a reloc for the symbol we are looking for.
+#: ldmain.c:1094 ldmain.c:1096 ldmain.c:1098 ldmain.c:1116 ldmain.c:1161
+msgid "warning: "
+msgstr "peringatan: "
+
+#: ldmain.c:1196
+msgid "%F%P: bfd_hash_table_init failed: %E\n"
+msgstr "%F%P: bfd_hash_table_init gagal: %E\n"
+
+#: ldmain.c:1203
+msgid "%F%P: bfd_hash_lookup failed: %E\n"
+msgstr "%F%P: bfd_hash_lookup gagal: %E\n"
+
+#: ldmain.c:1224
+msgid "%X%C: undefined reference to `%T'\n"
+msgstr "%X%C: referensi ke `%T' tidak terdefinisi\n"
+
+#: ldmain.c:1227
+msgid "%C: warning: undefined reference to `%T'\n"
+msgstr "%C: peringatan: referensi ke `%T' tidak terdefinisi\n"
+
+#: ldmain.c:1233
+msgid "%X%D: more undefined references to `%T' follow\n"
+msgstr "%X%D: lebih referensi ke `%T' tidak terdefinisi mengikuti\n"
+
+#: ldmain.c:1236
+msgid "%D: warning: more undefined references to `%T' follow\n"
+msgstr "%D: peringatan: lebih referensi ke `%T' tidak terdefinisi mengikuti\n"
+
+#: ldmain.c:1247
+msgid "%X%B: undefined reference to `%T'\n"
+msgstr "%X%B: referensi ke `%T' tidak terdefinisi\n"
+
+#: ldmain.c:1250
+msgid "%B: warning: undefined reference to `%T'\n"
+msgstr "%B: peringatan: referensi ke `%T' tidak terdefinisi\n"
+
+#: ldmain.c:1256
+msgid "%X%B: more undefined references to `%T' follow\n"
+msgstr "%X%B: lebih referensi ke `%T' tidak terdefinisi mengikuti\n"
+
+#: ldmain.c:1259
+msgid "%B: warning: more undefined references to `%T' follow\n"
+msgstr "%B: peringatan: lebih referensi ke `%T' tidak terdefinisi mengikuti\n"
+
+#: ldmain.c:1298
+msgid " additional relocation overflows omitted from the output\n"
+msgstr " tambahan relokasi overflow diabaikan dari keluaran\n"
+
+#: ldmain.c:1311
+msgid " relocation truncated to fit: %s against undefined symbol `%T'"
+msgstr " relokasi dipotong supaya pas: %s terhadap simbol `%T' tidak terdefinisi"
+
+#: ldmain.c:1316
+msgid " relocation truncated to fit: %s against symbol `%T' defined in %A section in %B"
+msgstr " relokasi dipotong supaya pas: %s terhadap simbol `%T' terdefinisi dalam daerah %A dalam %B"
+
+#: ldmain.c:1328
+msgid " relocation truncated to fit: %s against `%T'"
+msgstr " relokasi dipotong supaya pas: %s terhadap `%T'"
+
+#: ldmain.c:1345
+#, c-format
+msgid "%X%C: dangerous relocation: %s\n"
+msgstr "%X%C: relokasi berbahaya: %s\n"
+
+#: ldmain.c:1360
+msgid "%X%C: reloc refers to symbol `%T' which is not being output\n"
+msgstr "%X%C: relokasi mereferensikan ke simbol `%T' dimana tidak dikeluarkan\n"
+
+#: ldmisc.c:148
+#, c-format
+msgid "no symbol"
+msgstr "bukan simbol"
+
+#: ldmisc.c:245
+#, c-format
+msgid "built in linker script:%u"
+msgstr "scrip penghubung built-in: %u"
+
+#: ldmisc.c:323
+msgid "%B: In function `%T':\n"
+msgstr "%B: Dalam fungsi `%T':\n"
+
+#: ldmisc.c:445
+msgid "%F%P: internal error %s %d\n"
+msgstr "%F%P: internal error %s %d\n"
+
+#: ldmisc.c:494
+msgid "%P: internal error: aborting at %s line %d in %s\n"
+msgstr "%P: internal error: membatalkan di %s baris %d dalam %s\n"
+
+#: ldmisc.c:497
+msgid "%P: internal error: aborting at %s line %d\n"
+msgstr "%P: internal error: membatalkan di %s baris %d\n"
+
+#: ldmisc.c:499
+msgid "%P%F: please report this bug\n"
+msgstr "%P%F: tolong laporkan bug ini\n"
+
+#. Output for noisy == 2 is intended to follow the GNU standards.
+#: ldver.c:38
+#, c-format
+msgid "GNU ld %s\n"
+msgstr "GNU ld %s\n"
+
+#: ldver.c:42
+#, c-format
+msgid "Copyright 2009 Free Software Foundation, Inc.\n"
+msgstr "Hak cipta 2009 Free Software Foundation, Inc.\n"
+
+#: ldver.c:43
+#, c-format
+msgid ""
+"This program is free software; you may redistribute it under the terms of\n"
+"the GNU General Public License version 3 or (at your option) a later version.\n"
+"This program has absolutely no warranty.\n"
+msgstr ""
+"Aplikasi ini adalah aplikasi bebas; anda boleh mendistribusikannya dibawah ketentuan dari\n"
+"Lisensi Umum Publik GNU versi 3 atau (menurut pendapat anda) untuk versi selanjutnya.\n"
+"Aplikasi ini tidak memiliki garansi apapun.\n"
+
+#: ldver.c:53
+#, c-format
+msgid " Supported emulations:\n"
+msgstr " Emulasi yang didukung:\n"
+
+#: ldwrite.c:56 ldwrite.c:196
+msgid "%P%F: bfd_new_link_order failed\n"
+msgstr "%P%F: bfd_new_link_order gagal\n"
+
+#: ldwrite.c:354
+msgid "%F%P: cannot create split section name for %s\n"
+msgstr "%F%P: tidak dapat membuat nama daerah split untuk %s\n"
+
+#: ldwrite.c:366
+msgid "%F%P: clone section failed: %E\n"
+msgstr "%F%P: penyalinan daerah gagal: %E\n"
+
+#: ldwrite.c:404
+#, c-format
+msgid "%8x something else\n"
+msgstr "%8x sesuatu yang lain\n"
+
+#: ldwrite.c:574
+msgid "%F%P: final link failed: %E\n"
+msgstr "%F%P: final link gagal: %E\n"
+
+#: lexsup.c:209 lexsup.c:349
+msgid "KEYWORD"
+msgstr "KATA-KUNCI"
+
+#: lexsup.c:209
+msgid "Shared library control for HP/UX compatibility"
+msgstr "Perpustakaan terbagi kontrol untuk kompatibilitas HP/UX"
+
+#: lexsup.c:212
+msgid "ARCH"
+msgstr "ARS"
+
+#: lexsup.c:212
+msgid "Set architecture"
+msgstr "Set arsitektur"
+
+#: lexsup.c:214 lexsup.c:459
+msgid "TARGET"
+msgstr "TARGET"
+
+#: lexsup.c:214
+msgid "Specify target for following input files"
+msgstr "Spesifikasikan target untuk berkas masukan berikut"
+
+#: lexsup.c:217 lexsup.c:268 lexsup.c:280 lexsup.c:293 lexsup.c:295
+#: lexsup.c:413 lexsup.c:471 lexsup.c:533 lexsup.c:546
+msgid "FILE"
+msgstr "BERKAS"
+
+#: lexsup.c:217
+msgid "Read MRI format linker script"
+msgstr "Baca format MRI scrip penghubung"
+
+#: lexsup.c:219
+msgid "Force common symbols to be defined"
+msgstr "Paksa simbol umum untuk didefinisikan"
+
+#: lexsup.c:223 lexsup.c:515 lexsup.c:517 lexsup.c:519 lexsup.c:521
+msgid "ADDRESS"
+msgstr "ALAMAT"
+
+#: lexsup.c:223
+msgid "Set start address"
+msgstr "Set awal alamat"
+
+#: lexsup.c:225
+msgid "Export all dynamic symbols"
+msgstr "Expor seluruh simbol dinamis"
+
+#: lexsup.c:227
+msgid "Undo the effect of --export-dynamic"
+msgstr "Undo effek dari --export-dynamic"
+
+#: lexsup.c:229
+msgid "Link big-endian objects"
+msgstr "Hubungkan objek big-endian"
+
+#: lexsup.c:231
+msgid "Link little-endian objects"
+msgstr "Hubungkan objek little-endian"
+
+#: lexsup.c:233 lexsup.c:236
+msgid "SHLIB"
+msgstr "SHLIB"
+
+#: lexsup.c:233
+msgid "Auxiliary filter for shared object symbol table"
+msgstr "Tambahan filter untuk simbol tabel objek terbagi"
+
+#: lexsup.c:236
+msgid "Filter for shared object symbol table"
+msgstr "Filter untuk simbol tabel objek terbagi"
+
+#: lexsup.c:239
+msgid "Ignored"
+msgstr "Diabaikan"
+
+#: lexsup.c:241
+msgid "SIZE"
+msgstr "UKURAN"
+
+#: lexsup.c:241
+msgid "Small data size (if no size, same as --shared)"
+msgstr "Ukuran data kecil (jika tidak ada ukuran, sama dengan --shared)"
+
+#: lexsup.c:244
+msgid "FILENAME"
+msgstr "NAMA-BERKAS"
+
+#: lexsup.c:244
+msgid "Set internal name of shared library"
+msgstr "Set nama internal dari perpustakaan terbagi"
+
+#: lexsup.c:246
+msgid "PROGRAM"
+msgstr "APLIKASI"
+
+#: lexsup.c:246
+msgid "Set PROGRAM as the dynamic linker to use"
+msgstr "Set APLIKASI sebagai penghubung dinamis yang akan digunakan"
+
+#: lexsup.c:249
+msgid "LIBNAME"
+msgstr "NAMA-LIB"
+
+#: lexsup.c:249
+msgid "Search for library LIBNAME"
+msgstr "Cari untuk perpustakaan NAMA-LIB"
+
+#: lexsup.c:251
+msgid "DIRECTORY"
+msgstr "DIREKTORI"
+
+#: lexsup.c:251
+msgid "Add DIRECTORY to library search path"
+msgstr "Tambahkan DIREKTORI ke jalur pencarian perpustakaan"
+
+#: lexsup.c:254
+msgid "Override the default sysroot location"
+msgstr "Paksa lokasi default sysroot"
+
+#: lexsup.c:256
+msgid "EMULATION"
+msgstr "EMULASI"
+
+#: lexsup.c:256
+msgid "Set emulation"
+msgstr "Set emulasi"
+
+#: lexsup.c:258
+msgid "Print map file on standard output"
+msgstr "Tampilkan peta berkas di standar keluaran"
+
+#: lexsup.c:260
+msgid "Do not page align data"
+msgstr "Jangan page align data"
+
+#: lexsup.c:262
+msgid "Do not page align data, do not make text readonly"
+msgstr "Jangan page align data, jangan buat text baca-saja"
+
+#: lexsup.c:265
+msgid "Page align data, make text readonly"
+msgstr "Page align data, buat text baca-saja"
+
+#: lexsup.c:268
+msgid "Set output file name"
+msgstr "Set keluaran nama berkas"
+
+#: lexsup.c:270
+msgid "Optimize output file"
+msgstr "Optimisasi berkas keluaran"
+
+#: lexsup.c:272
+msgid "Ignored for SVR4 compatibility"
+msgstr "Abaikan untuk kompabilitas SVR4"
+
+#: lexsup.c:276
+msgid "Generate relocatable output"
+msgstr "Buat keluaran yang dapat direlokasikan"
+
+#: lexsup.c:280
+msgid "Just link symbols (if directory, same as --rpath)"
+msgstr "Hubungkan saja simbol (jika direktori, sama dengan --rpath)"
+
+#: lexsup.c:283
+msgid "Strip all symbols"
+msgstr "Strip seluruh simbol"
+
+#: lexsup.c:285
+msgid "Strip debugging symbols"
+msgstr "Strip debugging simbol"
+
+#: lexsup.c:287
+msgid "Strip symbols in discarded sections"
+msgstr "Strip simbol dalam daerah yang diabaikan"
+
+#: lexsup.c:289
+msgid "Do not strip symbols in discarded sections"
+msgstr "Jangan strip simbol dalam daerah yang diabaikan"
+
+#: lexsup.c:291
+msgid "Trace file opens"
+msgstr "Telusuri berkas terbuka"
+
+#: lexsup.c:293
+msgid "Read linker script"
+msgstr "Baca scrip penghubung"
+
+#: lexsup.c:295
+msgid "Read default linker script"
+msgstr "Baca default scrip penghubung"
+
+#: lexsup.c:299 lexsup.c:317 lexsup.c:390 lexsup.c:411 lexsup.c:508
+#: lexsup.c:536 lexsup.c:575
+msgid "SYMBOL"
+msgstr "SIMBOL"
+
+#: lexsup.c:299
+msgid "Start with undefined reference to SYMBOL"
+msgstr "Awali dengan referensi ke SIMBOL tidak terdefinisi"
+
+#: lexsup.c:302
+msgid "[=SECTION]"
+msgstr "[=DAERAH]"
+
+#: lexsup.c:303
+msgid "Don't merge input [SECTION | orphan] sections"
+msgstr "Jangan gabungkan masukan [DAERAH | orphan] daerah"
+
+#: lexsup.c:305
+msgid "Build global constructor/destructor tables"
+msgstr "Buat tabel global konstruktor/desktruktor"
+
+#: lexsup.c:307
+msgid "Print version information"
+msgstr "Tampilkan informasi versi"
+
+#: lexsup.c:309
+msgid "Print version and emulation information"
+msgstr "Tampilkan versi dan informasi emulasi"
+
+#: lexsup.c:311
+msgid "Discard all local symbols"
+msgstr "Abaikan seluruh simbol lokal"
+
+#: lexsup.c:313
+msgid "Discard temporary local symbols (default)"
+msgstr "Abaikan simbol lokal sementara (baku)"
+
+#: lexsup.c:315
+msgid "Don't discard any local symbols"
+msgstr "Jangan abaikan simbol lokal apapun"
+
+#: lexsup.c:317
+msgid "Trace mentions of SYMBOL"
+msgstr "Telusuri SIMBOL yang disebutkan"
+
+#: lexsup.c:319 lexsup.c:473 lexsup.c:475
+msgid "PATH"
+msgstr "JALUR"
+
+#: lexsup.c:319
+msgid "Default search path for Solaris compatibility"
+msgstr "Jalur pencarian baku untuk kompabilitas Solaris"
+
+#: lexsup.c:322
+msgid "Start a group"
+msgstr "Awal dari grup"
+
+#: lexsup.c:324
+msgid "End a group"
+msgstr "Akhir dari grup"
+
+#: lexsup.c:328
+msgid "Accept input files whose architecture cannot be determined"
+msgstr "Terima berkas masukan dimana arsitektur tidak dapat ditentukan"
+
+#: lexsup.c:332
+msgid "Reject input files whose architecture is unknown"
+msgstr "Tolak berkas masukan dimana arsitektur tidak dikenal"
+
+#: lexsup.c:335
+msgid ""
+"Set DT_NEEDED tags for DT_NEEDED entries in\n"
+" following dynamic libs"
+msgstr ""
+"Set DT_NEEDED tags untuk DT_NEEDED masukan dalam\n"
+" mengikuti libs dinamis berikut"
+
+#: lexsup.c:339
+msgid ""
+"Do not set DT_NEEDED tags for DT_NEEDED entries\n"
+" in following dynamic libs"
+msgstr ""
+"Jangan menset DT_NEEDED tags untuk masukan DT_NEEDED\n"
+" dalam libs dinamis berikut"
+
+#: lexsup.c:343
+msgid "Only set DT_NEEDED for following dynamic libs if used"
+msgstr "Hanya set DT_NEEDED untuk dinamis libs berikut jika digunakan"
+
+#: lexsup.c:346
+msgid "Always set DT_NEEDED for following dynamic libs"
+msgstr "Selalu menset DT_NEEDED untuk dinamis libs berikut"
+
+#: lexsup.c:349
+msgid "Ignored for SunOS compatibility"
+msgstr "Abaikan untuk kompabilitas SunOS"
+
+#: lexsup.c:351
+msgid "Link against shared libraries"
+msgstr "Hubungkan terhadap library terbagi"
+
+#: lexsup.c:357
+msgid "Do not link against shared libraries"
+msgstr "Jangan hubungkan terhadap perpustakaan terbagi"
+
+#: lexsup.c:365
+msgid "Bind global references locally"
+msgstr "Ikat referensi global secara lokal"
+
+#: lexsup.c:367
+msgid "Bind global function references locally"
+msgstr "Ikat referensi fungsi global secara lokal"
+
+#: lexsup.c:369
+msgid "Check section addresses for overlaps (default)"
+msgstr "Periksa daerah alamat untuk tumpang-tindih (baku)"
+
+#: lexsup.c:372
+msgid "Do not check section addresses for overlaps"
+msgstr "Jangan periksa daerah alamat untuk tumpang-tindih"
+
+#: lexsup.c:375
+msgid "Output cross reference table"
+msgstr "Keluarkan tabel referensi silang"
+
+#: lexsup.c:377
+msgid "SYMBOL=EXPRESSION"
+msgstr "SIMBOL=EKSPRESI"
+
+#: lexsup.c:377
+msgid "Define a symbol"
+msgstr "Definisikan sebuah simbol"
+
+#: lexsup.c:379
+msgid "[=STYLE]"
+msgstr "[=GAYA]"
+
+#: lexsup.c:379
+msgid "Demangle symbol names [using STYLE]"
+msgstr "Demangle nama simbol [gunakan GAYA]"
+
+#: lexsup.c:382
+msgid "Generate embedded relocs"
+msgstr "Buat embedded relokasi"
+
+#: lexsup.c:384
+msgid "Treat warnings as errors"
+msgstr "Perlakukan peringatan sebagai error"
+
+#: lexsup.c:387
+msgid "Do not treat warnings as errors (default)"
+msgstr "Jangan perlakukan peringatan sebagai error (baku)"
+
+#: lexsup.c:390
+msgid "Call SYMBOL at unload-time"
+msgstr "Panggil SIMBOL di unload-time"
+
+#: lexsup.c:392
+msgid "Force generation of file with .exe suffix"
+msgstr "Paksa pembuatan dari berkas dengan akhiran .exe"
+
+#: lexsup.c:394
+msgid "Remove unused sections (on some targets)"
+msgstr "Hapus daerah yang tidak digunakan (di beberapa target)"
+
+#: lexsup.c:397
+msgid "Don't remove unused sections (default)"
+msgstr "Jangan hapus daerah yang tidak digunakan (baku)"
+
+#: lexsup.c:400
+msgid "List removed unused sections on stderr"
+msgstr "Tampilkan daerah tidak digunakan yang dihapus di stderr"
+
+#: lexsup.c:403
+msgid "Do not list removed unused sections"
+msgstr "Jangan tampilkan daerah tidak digunakan yang dihapus"
+
+#: lexsup.c:406
+msgid "Set default hash table size close to <NUMBER>"
+msgstr "Set ukuran default tabel hash mendekati ke <NOMOR>"
+
+#: lexsup.c:409
+msgid "Print option help"
+msgstr "Tampilkan pilihan bantuan"
+
+#: lexsup.c:411
+msgid "Call SYMBOL at load-time"
+msgstr "Panggil SIMBOL di load-time"
+
+#: lexsup.c:413
+msgid "Write a map file"
+msgstr "Tulis sebuah berkas peta"
+
+#: lexsup.c:415
+msgid "Do not define Common storage"
+msgstr "Jangan definisikan penyimpanan umum"
+
+#: lexsup.c:417
+msgid "Do not demangle symbol names"
+msgstr "Jangan demangle nama simbol"
+
+#: lexsup.c:419
+msgid "Use less memory and more disk I/O"
+msgstr "Gunakan sedikit memori dan lebih disk I/O"
+
+#: lexsup.c:421
+msgid "Do not allow unresolved references in object files"
+msgstr "Jangan perbolehkan referensi tidak terselesaikan dalam berkas objek"
+
+#: lexsup.c:424
+msgid "Allow unresolved references in shared libaries"
+msgstr "Ijinkan referensi tidak terselesaikan dalam perpustakaan terbagi"
+
+#: lexsup.c:428
+msgid "Do not allow unresolved references in shared libs"
+msgstr "Jangan ijinkan referensi tidak terselesaikan dalam perpustakaan terbagi"
+
+#: lexsup.c:432
+msgid "Allow multiple definitions"
+msgstr "Ijinkan multiple definisi"
+
+#: lexsup.c:434
+msgid "Disallow undefined version"
+msgstr "Larang versi tidak terdefinisi"
+
+#: lexsup.c:436
+msgid "Create default symbol version"
+msgstr "Buat default versi simbol"
+
+#: lexsup.c:439
+msgid "Create default symbol version for imported symbols"
+msgstr "Buat default versi simbol untuk simbol yang diimpor"
+
+#: lexsup.c:442
+msgid "Don't warn about mismatched input files"
+msgstr "Jangan peringatkan mengenai ketidakcocokan dalam berkas masukan"
+
+#: lexsup.c:445
+msgid "Don't warn on finding an incompatible library"
+msgstr "Jangan peringatkan dalam pencarian perpustakaan tidak kompatibel"
+
+#: lexsup.c:448
+msgid "Turn off --whole-archive"
+msgstr "Tidak aktifkan --whole-archive"
+
+#: lexsup.c:450
+msgid "Create an output file even if errors occur"
+msgstr "Buat sebuah berkas keluaran walaupun error terjadi"
+
+#: lexsup.c:455
+msgid ""
+"Only use library directories specified on\n"
+" the command line"
+msgstr ""
+"Hanya gunakan direktori perpustakaan yang dispesifikasikan dalam\n"
+" baris perintah"
+
+#: lexsup.c:459
+msgid "Specify target of output file"
+msgstr "Spesifikasikan target dari berkas keluaran"
+
+#: lexsup.c:462
+msgid "Ignored for Linux compatibility"
+msgstr "Abaikan untuk kompabilitas Linux"
+
+#: lexsup.c:465
+msgid "Reduce memory overheads, possibly taking much longer"
+msgstr "Kurangi memori overheads, mungkin membutuhkan waktu lebih lama"
+
+#: lexsup.c:468
+msgid "Relax branches on certain targets"
+msgstr "Relax cabang di beberapa targets"
+
+#: lexsup.c:471
+msgid "Keep only symbols listed in FILE"
+msgstr "Jaga hanya simbol terdaftar dalam BERKAS"
+
+#: lexsup.c:473
+msgid "Set runtime shared library search path"
+msgstr "Set waktu-jalan perpustakaan terbagi jalur pencarian"
+
+#: lexsup.c:475
+msgid "Set link time shared library search path"
+msgstr "Set waktu hubung perpustakaan terbagi jalur pencarian"
+
+#: lexsup.c:478
+msgid "Create a shared library"
+msgstr "Buat sebuah perpustakaan terbagi"
+
+#: lexsup.c:482
+msgid "Create a position independent executable"
+msgstr "Buat sebuat executable bebas posisi"
+
+#: lexsup.c:486
+msgid "[=ascending|descending]"
+msgstr "[=ascending|descending]"
+
+#: lexsup.c:487
+msgid "Sort common symbols by alignment [in specified order]"
+msgstr "Urutkan simbol umum dengan alignmen [dalam urutan yang dispesifikasikan]"
+
+#: lexsup.c:492
+msgid "name|alignment"
+msgstr "nama|alignment"
+
+#: lexsup.c:493
+msgid "Sort sections by name or maximum alignment"
+msgstr "Urutkan daerah dengan nama atau maksimal alignment"
+
+#: lexsup.c:495
+msgid "COUNT"
+msgstr "JUMLAH"
+
+#: lexsup.c:495
+msgid "How many tags to reserve in .dynamic section"
+msgstr "Berapa banyak tags untuk menyimpan dalam daerah .dynamic"
+
+#: lexsup.c:498
+msgid "[=SIZE]"
+msgstr "[=UKURAN]"
+
+#: lexsup.c:498
+msgid "Split output sections every SIZE octets"
+msgstr "Bagi daerah keluaran distiap UKURAN oktet"
+
+#: lexsup.c:501
+msgid "[=COUNT]"
+msgstr "[=JUMLAH]"
+
+#: lexsup.c:501
+msgid "Split output sections every COUNT relocs"
+msgstr "Bagi daerah keluaran disetiap JUMLAH relokasi"
+
+#: lexsup.c:504
+msgid "Print memory usage statistics"
+msgstr "Tampilkan statistik penggunaan memori"
+
+#: lexsup.c:506
+msgid "Display target specific options"
+msgstr "Tampilkan pilihan target spesifik"
+
+#: lexsup.c:508
+msgid "Do task level linking"
+msgstr "Lakukan tingkat kerja penghubung"
+
+#: lexsup.c:510
+msgid "Use same format as native linker"
+msgstr "Gunakan format sama seperti penghubung asal"
+
+#: lexsup.c:512
+msgid "SECTION=ADDRESS"
+msgstr "DAERAH=ALAMAT"
+
+#: lexsup.c:512
+msgid "Set address of named section"
+msgstr "Set alamat dari nama daerah"
+
+#: lexsup.c:515
+msgid "Set address of .bss section"
+msgstr "Set alamat dari daerah .bss"
+
+#: lexsup.c:517
+msgid "Set address of .data section"
+msgstr "Set alamat dari daerah .data"
+
+#: lexsup.c:519
+msgid "Set address of .text section"
+msgstr "Set alamat daeri daerah .text"
+
+#: lexsup.c:521
+msgid "Set address of text segment"
+msgstr "Set alamat dari bagian text"
+
+#: lexsup.c:524
+msgid ""
+"How to handle unresolved symbols. <method> is:\n"
+" ignore-all, report-all, ignore-in-object-files,\n"
+" ignore-in-shared-libs"
+msgstr ""
+"Bagaimana menangani simbol tidak terselesaikan. <metode> adalah:\n"
+" ignore-all, report-all, ignore-in-object-files,\n"
+" ignore-in-shared-libs"
+
+#: lexsup.c:529
+msgid "Output lots of information during link"
+msgstr "Keluarkan banyak informasi selama menghubungkan"
+
+#: lexsup.c:533
+msgid "Read version information script"
+msgstr "Baca informasi versi dari scrip"
+
+#: lexsup.c:536
+msgid ""
+"Take export symbols list from .exports, using\n"
+" SYMBOL as the version."
+msgstr ""
+"Ambil daftar simbol expor dari .expor, menggunakan\n"
+" SIMBOL sebagai versi."
+
+#: lexsup.c:540
+msgid "Add data symbols to dynamic list"
+msgstr "Tambahkan data simbol ke daftar dinamis"
+
+#: lexsup.c:542
+msgid "Use C++ operator new/delete dynamic list"
+msgstr "Gunakan C++ operator new/delete daftar dinamis"
+
+#: lexsup.c:544
+msgid "Use C++ typeinfo dynamic list"
+msgstr "Gunakan C++ typeinfo daftar dinamic"
+
+#: lexsup.c:546
+msgid "Read dynamic list"
+msgstr "Baca daftar dinamis"
+
+#: lexsup.c:548
+msgid "Warn about duplicate common symbols"
+msgstr "Peringatkan mengenai duplikasi simbol umum"
+
+#: lexsup.c:550
+msgid "Warn if global constructors/destructors are seen"
+msgstr "Peringatkan jika global konstruktor/destruktor terlihat"
+
+#: lexsup.c:553
+msgid "Warn if the multiple GP values are used"
+msgstr "Peringatkan jika nilai multiple GP digunakan"
+
+#: lexsup.c:555
+msgid "Warn only once per undefined symbol"
+msgstr "Peringatkan hanya sekali setiap simbol tidak terdefinisi"
+
+#: lexsup.c:557
+msgid "Warn if start of section changes due to alignment"
+msgstr "Peringatkan jika awal dari daerah berubah karena alignment"
+
+#: lexsup.c:560
+msgid "Warn if shared object has DT_TEXTREL"
+msgstr "Peringatkan jika objek terbagi memiliki DT_TEXTREL"
+
+#: lexsup.c:563
+msgid "Warn if an object has alternate ELF machine code"
+msgstr "Peringatkan jika sebuah objek memiliki kode mesin ELF alternatif"
+
+#: lexsup.c:567
+msgid "Report unresolved symbols as warnings"
+msgstr "Laporkan simbol tidak terselesaikan sebagai peringatan"
+
+#: lexsup.c:570
+msgid "Report unresolved symbols as errors"
+msgstr "Laporkan simbol tidak terselesaikan sebagai error"
+
+#: lexsup.c:572
+msgid "Include all objects from following archives"
+msgstr "Masukan seluruh objek dari archive berikut"
+
+#: lexsup.c:575
+msgid "Use wrapper functions for SYMBOL"
+msgstr "Gunakan fungsi wrapper untuk SIMBOL"
+
+#: lexsup.c:722
+msgid "%P: unrecognized option '%s'\n"
+msgstr "%P: pilihan tidak dikenal '%s'\n"
+
+#: lexsup.c:726
+msgid "%P%F: use the --help option for usage information\n"
+msgstr "%P%F: gunakan pilihan --help untuk informasi penggunaan\n"
+
+#: lexsup.c:744
+msgid "%P%F: unrecognized -a option `%s'\n"
+msgstr "%P%F: pilihan -a tidak dikenal `%s'\n"
+
+#: lexsup.c:757
+msgid "%P%F: unrecognized -assert option `%s'\n"
+msgstr "%P%F: pilihan -assert tidak dikenal `%s'\n"
+
+#: lexsup.c:800
+msgid "%F%P: unknown demangling style `%s'"
+msgstr "%F%P: gaya demangling tidak dikenal `%s'"
+
+#: lexsup.c:866
+msgid "%P%F: invalid number `%s'\n"
+msgstr "%P%F: nomor tidak valid `%s'\n"
+
+#: lexsup.c:964
+msgid "%P%F: bad --unresolved-symbols option: %s\n"
+msgstr "%P%F: buruk pilihan --unresolved-symbols: %s\n"
+
+#. This can happen if the user put "-rpath,a" on the command
+#. line. (Or something similar. The comma is important).
+#. Getopt becomes confused and thinks that this is a -r option
+#. but it cannot parse the text after the -r so it refuses to
+#. increment the optind counter. Detect this case and issue
+#. an error message here. We cannot just make this a warning,
+#. increment optind, and continue because getopt is too confused
+#. and will seg-fault the next time around.
+#: lexsup.c:1038
+msgid "%P%F: bad -rpath option\n"
+msgstr "%P%F: pilihan -rpath buruk\n"
+
+#: lexsup.c:1149
+msgid "%P%F: -shared not supported\n"
+msgstr "%P%F: -shared tidak didukung\n"
+
+#: lexsup.c:1158
+msgid "%P%F: -pie not supported\n"
+msgstr "%P%F: -pie tidak didukung\n"
+
+#: lexsup.c:1166
+msgid "descending"
+msgstr "menurun"
+
+#: lexsup.c:1168
+msgid "ascending"
+msgstr "meningkat"
+
+#: lexsup.c:1171
+msgid "%P%F: invalid common section sorting option: %s\n"
+msgstr "%P%F: pilihan pengurutan daerah umum tidak valid: %s\n"
+
+#: lexsup.c:1175
+msgid "name"
+msgstr "nama"
+
+#: lexsup.c:1177
+msgid "alignment"
+msgstr "alignment"
+
+#: lexsup.c:1180
+msgid "%P%F: invalid section sorting option: %s\n"
+msgstr "%P%F: pilihan pengurutan daerah tidak valid: %s\n"
+
+#: lexsup.c:1214
+msgid "%P%F: invalid argument to option \"--section-start\"\n"
+msgstr "%P%F: argumen ke pilihan \"--section-start\" tidak valid\n"
+
+#: lexsup.c:1221
+msgid "%P%F: missing argument(s) to option \"--section-start\"\n"
+msgstr "%P%F: hilang argumen ke pilihan \"--section-start\"\n"
+
+#: lexsup.c:1441
+msgid "%P%F: may not nest groups (--help for usage)\n"
+msgstr "%P%F: mungkin bukan nest grup (--help untuk penggunaan)\n"
+
+#: lexsup.c:1448
+msgid "%P%F: group ended before it began (--help for usage)\n"
+msgstr "%P%F: grup berakhir sebelum init mulai (--help untuk penggunaan)\n"
+
+#: lexsup.c:1476
+msgid "%P%X: --hash-size needs a numeric argument\n"
+msgstr "%P%X: --hash-size membutuhkan sebuah argumen numerik\n"
+
+#: lexsup.c:1527 lexsup.c:1540
+msgid "%P%F: invalid hex number `%s'\n"
+msgstr "%P%F: nomor hex tidak valid `%s'\n"
+
+#: lexsup.c:1576
+#, c-format
+msgid "Usage: %s [options] file...\n"
+msgstr "Penggunaan: %s [pilihan] berkas...\n"
+
+#: lexsup.c:1578
+#, c-format
+msgid "Options:\n"
+msgstr "Pilihan:\n"
+
+#: lexsup.c:1656
+#, c-format
+msgid " @FILE"
+msgstr " @BERKAS"
+
+#: lexsup.c:1659
+#, c-format
+msgid "Read options from FILE\n"
+msgstr "Baca pilihan dari BERKAS\n"
+
+#. Note: Various tools (such as libtool) depend upon the
+#. format of the listings below - do not change them.
+#: lexsup.c:1664
+#, c-format
+msgid "%s: supported targets:"
+msgstr "%s: target yang didukung:"
+
+#: lexsup.c:1672
+#, c-format
+msgid "%s: supported emulations: "
+msgstr "%s: emulasi yang didukung: "
+
+#: lexsup.c:1677
+#, c-format
+msgid "%s: emulation specific options:\n"
+msgstr "%s: pilihan spesifik emulasi:\n"
+
+#: lexsup.c:1682
+#, c-format
+msgid "Report bugs to %s\n"
+msgstr "Laporkan bugs ke %s\n"
+
+#: mri.c:291
+msgid "%P%F: unknown format type %s\n"
+msgstr "%P%F: tipe format %s tidak dikenal\n"
+
+#: pe-dll.c:415
+#, c-format
+msgid "%XUnsupported PEI architecture: %s\n"
+msgstr "%X Arsitektur PEI tidak didukung: %s\n"
+
+#: pe-dll.c:766
+#, c-format
+msgid "%XCannot export %s: invalid export name\n"
+msgstr "%X Tidak dapat expor %s: nama expor tidak valid\n"
+
+#: pe-dll.c:822
+#, c-format
+msgid "%XError, duplicate EXPORT with ordinals: %s (%d vs %d)\n"
+msgstr "%XError, duplikasi EKSPOR dengan ordinals: %s (%d vs %d)\n"
+
+#: pe-dll.c:829
+#, c-format
+msgid "Warning, duplicate EXPORT: %s\n"
+msgstr "Peringatan, duplikasi EKSPOR: %s\n"
+
+#: pe-dll.c:916
+#, c-format
+msgid "%XCannot export %s: symbol not defined\n"
+msgstr "%XTidak dapat ekspor %s: simbol tidak terdefinisi\n"
+
+#: pe-dll.c:922
+#, c-format
+msgid "%XCannot export %s: symbol wrong type (%d vs %d)\n"
+msgstr "%XTidak dapat ekspor %s: tipe simbol salah (%d vs %d)\n"
+
+#: pe-dll.c:929
+#, c-format
+msgid "%XCannot export %s: symbol not found\n"
+msgstr "%XTidak dapat ekspor %s: simbol tidak ditemukan\n"
+
+#: pe-dll.c:1043
+#, c-format
+msgid "%XError, ordinal used twice: %d (%s vs %s)\n"
+msgstr "%XError, ordinal digunakan dua kali: %d (%s vs %s)\n"
+
+#: pe-dll.c:1410
+#, c-format
+msgid "%XError: %d-bit reloc in dll\n"
+msgstr "%XError: %d-bit relokasi dalam dll\n"
+
+#: pe-dll.c:1538
+#, c-format
+msgid "%s: Can't open output def file %s\n"
+msgstr "%s: Tidak dapat membuka berkas keluaran default %s\n"
+
+#: pe-dll.c:1683
+#, c-format
+msgid "; no contents available\n"
+msgstr "; tidak ada kontent yang tersedia\n"
+
+#: pe-dll.c:2600
+msgid "%C: variable '%T' can't be auto-imported. Please read the documentation for ld's --enable-auto-import for details.\n"
+msgstr "%C: variabel '%T' tidak dapat auto-imported. Tolong baca dokumentasi untuk ld --enable-auto-import untuk lebih lengkapnya.\n"
+
+#: pe-dll.c:2630
+#, c-format
+msgid "%XCan't open .lib file: %s\n"
+msgstr "%XTidak dapat membuka berkas .lib: %s\n"
+
+#: pe-dll.c:2635
+#, c-format
+msgid "Creating library file: %s\n"
+msgstr "Membuat berkas library: %s\n"
+
+#: pe-dll.c:2664
+#, c-format
+msgid "%Xbfd_openr %s: %E\n"
+msgstr "%Xbfd_openr %s: %E\n"
+
+#: pe-dll.c:2676
+#, c-format
+msgid "%X%s(%s): can't find member in non-archive file"
+msgstr "%X%s(%s): tidak dapat menemukan anggota dalam berkas bukan-archive"
+
+#: pe-dll.c:2688
+#, c-format
+msgid "%X%s(%s): can't find member in archive"
+msgstr "%X%s(%s): tidak dapat menemukan anggota dalam archive"
+
+#: pe-dll.c:3078
+#, c-format
+msgid "%XError: can't use long section names on this arch\n"
+msgstr "%XError: tidak dapat menggunakan nama daerah panjang di arsitektur ini\n"
+
+#~ msgid "%P%F: --relax and -r may not be used together\n"
+#~ msgstr "%P%F: --relax dan -r tidak boleh digunakan bersama\n"
diff --git a/binutils-2.21/ld/po/ja.gmo b/binutils-2.21/ld/po/ja.gmo
new file mode 100644
index 0000000..bfbd0c9
--- /dev/null
+++ b/binutils-2.21/ld/po/ja.gmo
Binary files differ
diff --git a/binutils-2.21/ld/po/ja.po b/binutils-2.21/ld/po/ja.po
new file mode 100644
index 0000000..34910e5
--- /dev/null
+++ b/binutils-2.21/ld/po/ja.po
@@ -0,0 +1,2209 @@
+# Japanese messages for GNU ld
+# Copyright (C) 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the binutils package.
+# Yasuaki Taniguchi <yasuakit@gmail.com>, 2010
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ld 2.20.90\n"
+"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
+"POT-Creation-Date: 2010-11-05 11:34+0100\n"
+"PO-Revision-Date: 2010-11-25 19:58+0900\n"
+"Last-Translator: Yasuaki Taniguchi <yasuakit@gmail.com>\n"
+"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: emultempl/armcoff.em:73
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code å¤ã„コードã®ç›¸äº’利用をサãƒãƒ¼ãƒˆã™ã‚‹\n"
+
+#: emultempl/armcoff.em:74
+#, c-format
+msgid " --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"
+msgstr " --thumb-entry=<sym> エントリãƒã‚¤ãƒ³ãƒˆã‚’ Thumb シンボル <sym> ã«è¨­å®šã™ã‚‹\n"
+
+#: emultempl/armcoff.em:122
+#, c-format
+msgid "Errors encountered processing file %s"
+msgstr "ファイル %s を処ç†ä¸­ã«ã‚¨ãƒ©ãƒ¼ã«é­é‡ã—ã¾ã—ãŸ"
+
+#: emultempl/armcoff.em:190 emultempl/pe.em:1812
+msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"
+msgstr "%P: 警告: '--thumb-entry %s' 㯠'-e %s' を上書ãã—ã¾ã™\n"
+
+# thumb ã¨ãªã£ã¦ã„ã‚‹ãŒå…¬å¼ã«ã¯ Thumb ãªã®ã§å…ˆé ­ã‚’大文字ã«ã—ã¦ã„ã¾ã™
+#: emultempl/armcoff.em:195 emultempl/pe.em:1817
+msgid "%P: warning: cannot find thumb start symbol %s\n"
+msgstr "%P: 警告: Thumb 開始シンボル %s ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“\n"
+
+#: emultempl/pe.em:418
+#, c-format
+msgid " --base_file <basefile> Generate a base file for relocatable DLLs\n"
+msgstr " --base_file <basefile> å†é…ç½®å¯èƒ½ DLL ã®ãƒ™ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’生æˆã™ã‚‹\n"
+
+#: emultempl/pe.em:419
+#, c-format
+msgid " --dll Set image base to the default for DLLs\n"
+msgstr " --dll イメージã®ãƒ™ãƒ¼ã‚¹ã‚’ DLL ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã«è¨­å®šã™ã‚‹\n"
+
+#: emultempl/pe.em:420
+#, c-format
+msgid " --file-alignment <size> Set file alignment\n"
+msgstr " --file-alignment <size> ファイル整列を設定ã™ã‚‹\n"
+
+#: emultempl/pe.em:421
+#, c-format
+msgid " --heap <size> Set initial size of the heap\n"
+msgstr " --heap <size> ヒープã®åˆæœŸã‚µã‚¤ã‚ºã‚’設定ã™ã‚‹\n"
+
+#: emultempl/pe.em:422
+#, c-format
+msgid " --image-base <address> Set start address of the executable\n"
+msgstr " --image-base <address> 実行ファイルã®é–‹å§‹ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’設定ã™ã‚‹\n"
+
+#: emultempl/pe.em:423
+#, c-format
+msgid " --major-image-version <number> Set version number of the executable\n"
+msgstr " --major-image-version <number> 実行ファイルã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã‚’設定ã™ã‚‹\n"
+
+#: emultempl/pe.em:424
+#, c-format
+msgid " --major-os-version <number> Set minimum required OS version\n"
+msgstr " --major-os-version <number> 最å°ã®è¦æ±‚ã•ã‚Œã‚‹ OS ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’設定ã™ã‚‹\n"
+
+#: emultempl/pe.em:425
+#, c-format
+msgid " --major-subsystem-version <number> Set minimum required OS subsystem version\n"
+msgstr " --major-subsystem-version <number> 最å°ã®è¦æ±‚ã•ã‚Œã‚‹ OS サブシステムãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’設定ã™ã‚‹\n"
+
+#: emultempl/pe.em:426
+#, c-format
+msgid " --minor-image-version <number> Set revision number of the executable\n"
+msgstr " --minor-image-version <number> 実行ファイルã®ãƒªãƒ“ジョン番å·ã‚’設定ã™ã‚‹\n"
+
+#: emultempl/pe.em:427
+#, c-format
+msgid " --minor-os-version <number> Set minimum required OS revision\n"
+msgstr " --minor-os-version <number> 最å°ã®è¦æ±‚ã•ã‚Œã‚‹ OS リビジョンを設定ã™ã‚‹\n"
+
+#: emultempl/pe.em:428
+#, c-format
+msgid " --minor-subsystem-version <number> Set minimum required OS subsystem revision\n"
+msgstr " --minor-subsystem-version <number> 最å°ã®è¦æ±‚ã•ã‚Œã‚‹ OS å­ã‚µãƒ–システムリビジョンを設定ã™ã‚‹\n"
+
+#: emultempl/pe.em:429
+#, c-format
+msgid " --section-alignment <size> Set section alignment\n"
+msgstr " --section-alignment <size> セクション整列を設定ã™ã‚‹\n"
+
+#: emultempl/pe.em:430
+#, c-format
+msgid " --stack <size> Set size of the initial stack\n"
+msgstr " --stack <size> インラインスタックã®å¤§ãã•ã‚’設定ã™ã‚‹\n"
+
+#: emultempl/pe.em:431
+#, c-format
+msgid " --subsystem <name>[:<version>] Set required OS subsystem [& version]\n"
+msgstr " --subsystem <name>[:<version>] è¦æ±‚ã•ã‚Œã‚‹ OS ã®ã‚µãƒ–システム [ãŠã‚ˆã³ãƒãƒ¼ã‚¸ãƒ§ãƒ³] を設定ã™ã‚‹\n"
+
+#: emultempl/pe.em:432
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code å¤ã„コードã®ç›¸äº’利用をサãƒãƒ¼ãƒˆã™ã‚‹\n"
+
+#: emultempl/pe.em:433
+#, c-format
+msgid " --[no-]leading-underscore Set explicit symbol underscore prefix mode\n"
+msgstr " --[no-]leading-underscore シンボルã®ä¸‹ç·š (_) 接頭辞モードを明示的ã«è¨­å®šã™ã‚‹\n"
+
+#: emultempl/pe.em:434
+#, c-format
+msgid " --thumb-entry=<symbol> Set the entry point to be Thumb <symbol>\n"
+msgstr " --thumb-entry=<symbol> エントリãƒã‚¤ãƒ³ãƒˆã‚’ Thumb ã® <symbol> ã«è¨­å®šã™ã‚‹\n"
+
+#: emultempl/pe.em:436
+#, c-format
+msgid " --add-stdcall-alias Export symbols with and without @nn\n"
+msgstr " --add-stdcall-alias シンボルを @nn 付ã㨠@nn ç„¡ã—ã¨ã§ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã™ã‚‹\n"
+
+#: emultempl/pe.em:437
+#, c-format
+msgid " --disable-stdcall-fixup Don't link _sym to _sym@nn\n"
+msgstr " --disable-stdcall-fixup _sym ã‹ã‚‰ _sym@nn ã¸ã®ãƒªãƒ³ã‚¯ã‚’è¡Œã‚ãªã„\n"
+
+#: emultempl/pe.em:438
+#, c-format
+msgid " --enable-stdcall-fixup Link _sym to _sym@nn without warnings\n"
+msgstr " --enable-stdcall-fixup _sym ã‚’ _sym@nn ã¸è­¦å‘Šãªã—ã«ãƒªãƒ³ã‚¯ã™ã‚‹\n"
+
+#: emultempl/pe.em:439
+#, c-format
+msgid " --exclude-symbols sym,sym,... Exclude symbols from automatic export\n"
+msgstr " --exclude-symbols sym,sym,... シンボルを自動エクスãƒãƒ¼ãƒˆã‹ã‚‰é™¤å¤–ã™ã‚‹\n"
+
+#: emultempl/pe.em:440
+#, c-format
+msgid " --exclude-all-symbols Exclude all symbols from automatic export\n"
+msgstr " --exclude-all-symbols å…¨ã¦ã®ã‚·ãƒ³ãƒœãƒ«ã‚’自動エクスãƒãƒ¼ãƒˆã‹ã‚‰é™¤å¤–ã™ã‚‹\n"
+
+#: emultempl/pe.em:441
+#, c-format
+msgid " --exclude-libs lib,lib,... Exclude libraries from automatic export\n"
+msgstr " --exclude-libs lib,lib,... ライブラリを自動エクスãƒãƒ¼ãƒˆã‹ã‚‰é™¤å¤–ã™ã‚‹\n"
+
+#: emultempl/pe.em:442
+#, c-format
+msgid " --exclude-modules-for-implib mod,mod,...\n"
+msgstr " --exclude-modules-for-implib mod,mod,...\n"
+
+#: emultempl/pe.em:443
+#, c-format
+msgid " Exclude objects, archive members from auto\n"
+msgstr ""
+
+#: emultempl/pe.em:444
+#, c-format
+msgid " export, place into import library instead.\n"
+msgstr ""
+
+#: emultempl/pe.em:445
+#, c-format
+msgid " --export-all-symbols Automatically export all globals to DLL\n"
+msgstr " --export-all-symbols å…¨ã¦ã®ã‚°ãƒ­ãƒ¼ãƒãƒ«ã‚·ãƒ³ãƒœãƒ«ã‚’ DLL ã«å¯¾ã—ã¦è‡ªå‹•çš„ã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã™ã‚‹\n"
+
+#: emultempl/pe.em:446
+#, c-format
+msgid " --kill-at Remove @nn from exported symbols\n"
+msgstr " --kill-at エクスãƒãƒ¼ãƒˆã•ã‚ŒãŸã‚·ãƒ³ãƒœãƒ«ã‹ã‚‰ @nn を削除ã™ã‚‹\n"
+
+#: emultempl/pe.em:447
+#, c-format
+msgid " --out-implib <file> Generate import library\n"
+msgstr " --out-implib <file> インãƒãƒ¼ãƒˆãƒ©ã‚¤ãƒ–ラリを生æˆã™ã‚‹\n"
+
+#: emultempl/pe.em:448
+#, c-format
+msgid " --output-def <file> Generate a .DEF file for the built DLL\n"
+msgstr " --output-def <file> 構築ã—㟠DLL ã‹ã‚‰ .DEF ファイルを生æˆã™ã‚‹\n"
+
+#: emultempl/pe.em:449
+#, c-format
+msgid " --warn-duplicate-exports Warn about duplicate exports.\n"
+msgstr " --warn-duplicate-exports é‡è¤‡ã—ãŸã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã«é–¢ã—ã¦è­¦å‘Šã™ã‚‹\n"
+
+#: emultempl/pe.em:450
+#, c-format
+msgid ""
+" --compat-implib Create backward compatible import libs;\n"
+" create __imp_<SYMBOL> as well.\n"
+msgstr ""
+" --compat-implib 後方互æ›æ€§ã®ãŸã‚ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆãƒ©ã‚¤ãƒ–ラリを作æˆã—ã€\n"
+" __imp_<SYMBOL> も作æˆã™ã‚‹\n"
+
+#: emultempl/pe.em:452
+#, c-format
+msgid ""
+" --enable-auto-image-base Automatically choose image base for DLLs\n"
+" unless user specifies one\n"
+msgstr ""
+" --enable-auto-image-base 利用者ãŒæŒ‡å®šã—ãªã„é™ã‚Š DLL ã®ã‚¤ãƒ¡ãƒ¼ã‚¸ãƒ™ãƒ¼ã‚¹ã‚’\n"
+" 自動的ã«é¸æŠžã™ã‚‹\n"
+
+#: emultempl/pe.em:454
+#, c-format
+msgid " --disable-auto-image-base Do not auto-choose image base. (default)\n"
+msgstr " --disable-auto-image-base イメージベースを自動é¸æŠžã—ãªã„ (デフォルト)\n"
+
+#: emultempl/pe.em:455
+#, c-format
+msgid ""
+" --dll-search-prefix=<string> When linking dynamically to a dll without\n"
+" an importlib, use <string><basename>.dll\n"
+" in preference to lib<basename>.dll \n"
+msgstr ""
+" --dll-search-prefix=<string> インãƒãƒ¼ãƒˆãƒ©ã‚¤ãƒ–ラリãŒç„¡ã„ dll ã‚’å‹•çš„ã«ãƒªãƒ³ã‚¯ã™ã‚‹æ™‚ã€\n"
+" lib<basename>.dll ã®ä»£ã‚ã‚Šã« <string><basename>.dll\n"
+" を使用ã™ã‚‹\n"
+
+#: emultempl/pe.em:458
+#, c-format
+msgid ""
+" --enable-auto-import Do sophistcated linking of _sym to\n"
+" __imp_sym for DATA references\n"
+msgstr " --enable-auto-import DATA å‚照時㫠_sym ã‚’ __imp_sym ã«ãƒªãƒ³ã‚¯ã™ã‚‹\n"
+
+#: emultempl/pe.em:460
+#, c-format
+msgid " --disable-auto-import Do not auto-import DATA items from DLLs\n"
+msgstr " --disable-auto-import DLL ã‹ã‚‰ DATA 項目を自動インãƒãƒ¼ãƒˆã—ãªã„\n"
+
+#: emultempl/pe.em:461
+#, c-format
+msgid ""
+" --enable-runtime-pseudo-reloc Work around auto-import limitations by\n"
+" adding pseudo-relocations resolved at\n"
+" runtime.\n"
+msgstr ""
+" --enable-runtime-pseudo-reloc 実行時ã«ç–‘ä¼¼å†é…ç½®ã«ã‚ˆã‚‹åå‰è§£æ±ºã‚’è¡Œã†ã“ã¨ã§\n"
+" 自動インãƒãƒ¼ãƒˆã®åˆ¶é™ã‚’回é¿ã‚’ã™ã‚‹\n"
+
+#: emultempl/pe.em:464
+#, c-format
+msgid ""
+" --disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations for\n"
+" auto-imported DATA.\n"
+msgstr ""
+" --disable-runtime-pseudo-reloc DATA ã®è‡ªå‹•ã‚¤ãƒ³ãƒãƒ¼ãƒˆã«å¯¾ã™ã‚‹å®Ÿè¡Œæ™‚ç–‘ä¼¼å†é…ç½®\n"
+" ã‚’è¡Œã‚ãªã„\n"
+
+#: emultempl/pe.em:466
+#, c-format
+msgid ""
+" --enable-extra-pe-debug Enable verbose debug output when building\n"
+" or linking to DLLs (esp. auto-import)\n"
+msgstr ""
+" --enable-extra-pe-debug DLL ã®ãƒ“ルドã¾ãŸã¯ãƒªãƒ³ã‚¯æ™‚ã«å†—é•·ãªãƒ‡ãƒãƒƒã‚°å‡ºåŠ›\n"
+" を行ㆠ(特ã«è‡ªå‹•ã‚¤ãƒ³ãƒãƒ¼ãƒˆ)\n"
+
+#: emultempl/pe.em:469
+#, c-format
+msgid ""
+" --large-address-aware Executable supports virtual addresses\n"
+" greater than 2 gigabytes\n"
+msgstr ""
+" --large-address-aware 実行ファイル㌠2GB 以上ã®ä»®æƒ³ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’\n"
+" サãƒãƒ¼ãƒˆã™ã‚‹ã‚ˆã†ã«ã™ã‚‹\n"
+
+#: emultempl/pe.em:471
+#, c-format
+msgid ""
+" --enable-long-section-names Use long COFF section names even in\n"
+" executable image files\n"
+msgstr ""
+" --enable-long-section-names 実行å¯èƒ½ãªã‚¤ãƒ¡ãƒ¼ã‚¸ãƒ•ã‚¡ã‚¤ãƒ«ã®ä¸­ã§ã‚‚é•·ã„ COFF\n"
+" セクションåを使用ã™ã‚‹\n"
+
+#: emultempl/pe.em:473
+#, c-format
+msgid ""
+" --disable-long-section-names Never use long COFF section names, even\n"
+" in object files\n"
+msgstr ""
+" --disable-long-section-names オブジェクトファイル内ã§ã‚‚é•·ã„ COFF セクション\n"
+" åを使用ã—ãªã„\n"
+
+#: emultempl/pe.em:475
+#, c-format
+msgid ""
+" --dynamicbase\t\t\t Image base address may be relocated using\n"
+"\t\t\t\t address space layout randomization (ASLR)\n"
+msgstr ""
+
+#: emultempl/pe.em:477
+#, c-format
+msgid " --forceinteg\t\t Code integrity checks are enforced\n"
+msgstr " --forceinteg\t\t コードã®å®Œå…¨æ€§ãƒã‚§ãƒƒã‚¯ã‚’強制ã™ã‚‹\n"
+
+#: emultempl/pe.em:478
+#, c-format
+msgid " --nxcompat\t\t Image is compatible with data execution prevention\n"
+msgstr " --nxcompat\t\t イメージをデータ実行防止ã¨äº’æ›æ€§ã‚’ä¿ã¤ã‚ˆã†ã«ã™ã‚‹\n"
+
+#: emultempl/pe.em:479
+#, c-format
+msgid " --no-isolation\t\t Image understands isolation but do not isolate the image\n"
+msgstr ""
+
+#: emultempl/pe.em:480
+#, c-format
+msgid ""
+" --no-seh\t\t\t Image does not use SEH. No SE handler may\n"
+"\t\t\t\t be called in this image\n"
+msgstr ""
+
+#: emultempl/pe.em:482
+#, c-format
+msgid " --no-bind\t\t\t Do not bind this image\n"
+msgstr ""
+
+#: emultempl/pe.em:483
+#, c-format
+msgid " --wdmdriver\t\t Driver uses the WDM model\n"
+msgstr " --wdmdriver\t\t WDM モデルを使用ã™ã‚‹ãƒ‰ãƒ©ã‚¤ãƒã«ã™ã‚‹\n"
+
+#: emultempl/pe.em:484
+#, c-format
+msgid " --tsaware Image is Terminal Server aware\n"
+msgstr " --tsaware ターミナルサーãƒã§ä½¿ç”¨ã§ãるイメージã«ã™ã‚‹\n"
+
+#: emultempl/pe.em:613
+msgid "%P: warning: bad version number in -subsystem option\n"
+msgstr "%P: 警告: -subsystem オプションã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã«èª¤ã‚ŠãŒã‚ã‚Šã¾ã™\n"
+
+#: emultempl/pe.em:638
+msgid "%P%F: invalid subsystem type %s\n"
+msgstr "%P%F: 無効ãªå­ã‚·ã‚¹ãƒ†ãƒ åž‹ %s ã§ã™\n"
+
+#: emultempl/pe.em:659
+msgid "%P%F: invalid hex number for PE parameter '%s'\n"
+msgstr "%P%F: PE パラメータ '%s' ã«å¯¾ã™ã‚‹ç„¡åŠ¹ãªå六進数ã§ã™\n"
+
+#: emultempl/pe.em:676
+msgid "%P%F: strange hex info for PE parameter '%s'\n"
+msgstr "%P%F: PE パラメータ '%s' ã«å¯¾ã—ã¦ãŠã‹ã—ãªå六進情報ãŒã‚ã‚Šã¾ã™\n"
+
+#: emultempl/pe.em:693
+#, c-format
+msgid "%s: Can't open base file %s\n"
+msgstr "%s: ベースファイル %s ã‚’é–‹ã‘ã¾ã›ã‚“\n"
+
+#: emultempl/pe.em:969
+msgid "%P: warning, file alignment > section alignment.\n"
+msgstr "%P: 警告: ファイル引数 > セクション引数 ã¨ãªã£ã¦ã„ã¾ã™\n"
+
+#: emultempl/pe.em:982
+msgid "%P: warning: --export-dynamic is not supported for PE targets, did you mean --export-all-symbols?\n"
+msgstr "%P: 警告: PE ターゲットã«å¯¾ã—㦠--export-dynamic ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“。--export-all-symbols ã‚’è¡Œã„ãŸã„ã®ã§ã¯ãªã„ã§ã™ã‹?\n"
+
+#: emultempl/pe.em:1058 emultempl/pe.em:1085
+#, c-format
+msgid "Warning: resolving %s by linking to %s\n"
+msgstr "警告: %2$s ã«ãƒªãƒ³ã‚¯ã™ã‚‹ã“ã¨ã«ã‚ˆã£ã¦ %1$s を解決ã—ã¦ã„ã¾ã™\n"
+
+#: emultempl/pe.em:1063 emultempl/pe.em:1090
+msgid "Use --enable-stdcall-fixup to disable these warnings\n"
+msgstr "ã“れらã®è­¦å‘Šã‚’無効ã«ã™ã‚‹ãŸã‚ã«ã¯ --enable-stdcall-fixup を使用ã—ã¦ãã ã•ã„\n"
+
+#: emultempl/pe.em:1064 emultempl/pe.em:1091
+msgid "Use --disable-stdcall-fixup to disable these fixups\n"
+msgstr "ã“れらã®ä¿®æ­£ã‚’無効ã«ã™ã‚‹ãŸã‚ã«ã¯ --disable-stdcall-fixup を使用ã—ã¦ãã ã•ã„\n"
+
+#: emultempl/pe.em:1110
+#, c-format
+msgid "%C: Cannot get section contents - auto-import exception\n"
+msgstr "%C: セクションã®ä¸­èº«ã‚’å–å¾—ã§ãã¾ã›ã‚“ - 自動インãƒãƒ¼ãƒˆä¾‹å¤–ã§ã™\n"
+
+#: emultempl/pe.em:1150
+#, c-format
+msgid "Info: resolving %s by linking to %s (auto-import)\n"
+msgstr "情報: %2$s ã«ãƒªãƒ³ã‚¯ã™ã‚‹ã“ã¨ã«ã‚ˆã£ã¦ %1$s を解決ã—ã¦ã„ã¾ã™ (自動インãƒãƒ¼ãƒˆ)\n"
+
+#: emultempl/pe.em:1157
+msgid ""
+"%P: warning: auto-importing has been activated without --enable-auto-import specified on the command line.\n"
+"This should work unless it involves constant data structures referencing symbols from auto-imported DLLs.\n"
+msgstr ""
+"%P: 警告: --enable-auto-import ã®ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³æŒ‡å®šç„¡ã—ã§è‡ªå‹•ã‚¤ãƒ³ãƒãƒ¼ãƒˆãŒæœ‰åŠ¹ã«ãªã‚Šã¾ã—ãŸã€‚\n"
+"自動インãƒãƒ¼ãƒˆã•ã‚ŒãŸ DLL ã«ã‚·ãƒ³ãƒœãƒ«ã‚’å‚ç…§ã™ã‚‹å®šæ•°ãƒ‡ãƒ¼ã‚¿æ§‹é€ ãŒå«ã¾ã‚Œãªã„é™ã‚Šã“ã‚Œã¯å‹•ä½œã—ã¾ã™ã€‚\n"
+
+#: emultempl/pe.em:1164 emultempl/pe.em:1369 emultempl/pe.em:1575 ldcref.c:490
+#: ldcref.c:588 ldmain.c:1183 ldmisc.c:286 pe-dll.c:705 pe-dll.c:1253
+#: pe-dll.c:1348
+msgid "%B%F: could not read symbols: %E\n"
+msgstr "%B%F: シンボルを読ã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ: %E\n"
+
+#: emultempl/pe.em:1245
+msgid "%F%P: cannot perform PE operations on non PE output file '%B'.\n"
+msgstr "%F%P: PE ã§ã¯ãªã„出力ファイル '%B' ã«å¯¾ã—㦠PE æ“作ã¯è¡Œãˆã¾ã›ã‚“。\n"
+
+#: emultempl/pe.em:1616
+#, c-format
+msgid "Errors encountered processing file %s\n"
+msgstr "ファイル %s を処ç†ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ\n"
+
+#: emultempl/pe.em:1639
+#, c-format
+msgid "Errors encountered processing file %s for interworking\n"
+msgstr "相互利用ã®ãŸã‚ã«ãƒ•ã‚¡ã‚¤ãƒ« %s を処ç†ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ\n"
+
+#: emultempl/pe.em:1701 ldexp.c:542 ldlang.c:3323 ldlang.c:3358 ldlang.c:6804
+#: ldlang.c:6835 ldmain.c:1128
+msgid "%P%F: bfd_link_hash_lookup failed: %E\n"
+msgstr "%P%F: bfd_link_hash_lookup ã«å¤±æ•—ã—ã¾ã—ãŸ: %E\n"
+
+#: ldcref.c:168
+msgid "%X%P: bfd_hash_table_init of cref table failed: %E\n"
+msgstr "%X%P: cref テーブル㮠bfd_hash_table_init ã«å¤±æ•—ã—ã¾ã—ãŸ: %E\n"
+
+#: ldcref.c:174
+msgid "%X%P: cref_hash_lookup failed: %E\n"
+msgstr "%X%P: cref_hash_lookup ã«å¤±æ•—ã—ã¾ã—ãŸ: %E\n"
+
+#: ldcref.c:184
+msgid "%X%P: cref alloc failed: %E\n"
+msgstr "%X%P: cref ã®ãƒ¡ãƒ¢ãƒªç¢ºä¿ã«å¤±æ•—ã—ã¾ã—ãŸ: %E\n"
+
+#: ldcref.c:366
+#, c-format
+msgid ""
+"\n"
+"Cross Reference Table\n"
+"\n"
+msgstr ""
+"\n"
+"相互å‚照テーブル\n"
+"\n"
+
+#: ldcref.c:367
+msgid "Symbol"
+msgstr "シンボル"
+
+#: ldcref.c:375
+#, c-format
+msgid "File\n"
+msgstr "ファイル\n"
+
+#: ldcref.c:379
+#, c-format
+msgid "No symbols\n"
+msgstr "シンボル無ã—\n"
+
+#: ldcref.c:532
+msgid "%P: symbol `%T' missing from main hash table\n"
+msgstr "%P: 主ãƒãƒƒã‚·ãƒ¥è¡¨ã«ã‚·ãƒ³ãƒœãƒ« `%T' ãŒã‚ã‚Šã¾ã›ã‚“\n"
+
+#: ldcref.c:650 ldcref.c:657 ldmain.c:1217 ldmain.c:1224
+msgid "%B%F: could not read relocs: %E\n"
+msgstr "%B%F: å†é…置を読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ: %E\n"
+
+#. We found a reloc for the symbol. The symbol is defined
+#. in OUTSECNAME. This reloc is from a section which is
+#. mapped into a section from which references to OUTSECNAME
+#. are prohibited. We must report an error.
+#: ldcref.c:684
+msgid "%X%C: prohibited cross reference from %s to `%T' in %s\n"
+msgstr "%1$X%2$C: %5$s 内㧠%3$s ã‹ã‚‰ `%4$T' ã¸ã®ç›¸äº’å‚ç…§ã¯ç¦æ­¢ã•ã‚Œã¦ã„ã¾ã™\n"
+
+#: ldctor.c:85
+msgid "%P%X: Different relocs used in set %s\n"
+msgstr ""
+
+#: ldctor.c:103
+msgid "%P%X: Different object file formats composing set %s\n"
+msgstr ""
+
+#: ldctor.c:281 ldctor.c:295
+msgid "%P%X: %s does not support reloc %s for set %s\n"
+msgstr ""
+
+#: ldctor.c:316
+msgid "%P%X: Unsupported size %d for set %s\n"
+msgstr ""
+
+#: ldctor.c:337
+msgid ""
+"\n"
+"Set Symbol\n"
+"\n"
+msgstr ""
+
+#: ldemul.c:265
+#, c-format
+msgid "%S SYSLIB ignored\n"
+msgstr "%S SYSLIB ã¯ç„¡è¦–ã•ã‚Œã¾ã—ãŸ\n"
+
+#: ldemul.c:271
+#, c-format
+msgid "%S HLL ignored\n"
+msgstr "%S HLL ã¯ç„¡è¦–ã•ã‚Œã¾ã—ãŸ\n"
+
+#: ldemul.c:291
+msgid "%P: unrecognised emulation mode: %s\n"
+msgstr "%P: èªè­˜ã§ããªã„エミュレーションモードã§ã™: %s\n"
+
+#: ldemul.c:292
+msgid "Supported emulations: "
+msgstr "サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„るエミュレーションモード: "
+
+#: ldemul.c:334
+#, c-format
+msgid " no emulation specific options.\n"
+msgstr " エミュレーション固有ã§ãªã„オプション。\n"
+
+#: ldexp.c:313
+msgid "%P: warning: address of `%s' isn't multiple of maximum page size\n"
+msgstr "%P: 警告: `%s' ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ãŒæœ€å¤§ãƒšãƒ¼ã‚¸ã‚µã‚¤ã‚ºã®å€æ•°ã§ã¯ã‚ã‚Šã¾ã›ã‚“\n"
+
+#: ldexp.c:351
+#, c-format
+msgid "%F%S %% by zero\n"
+msgstr "%F%S 0 ã«ã‚ˆã‚‹å‰°ä½™æ¼”ç®—\n"
+
+#: ldexp.c:359
+#, c-format
+msgid "%F%S / by zero\n"
+msgstr "%F%S 0 ã«ã‚ˆã‚‹é™¤ç®—\n"
+
+#: ldexp.c:552
+#, c-format
+msgid "%X%S: unresolvable symbol `%s' referenced in expression\n"
+msgstr "%X%S: å¼ã§å‚ç…§ã•ã‚ŒãŸè§£æ±ºã§ããªã„シンボル `%s' \n"
+
+#: ldexp.c:564
+#, c-format
+msgid "%F%S: undefined symbol `%s' referenced in expression\n"
+msgstr "%F%S: å¼ã§å‚ç…§ã•ã‚ŒãŸå®šç¾©ã•ã‚Œã¦ã„ãªã„シンボル `%s'\n"
+
+#: ldexp.c:585 ldexp.c:602 ldexp.c:629
+#, c-format
+msgid "%F%S: undefined section `%s' referenced in expression\n"
+msgstr "%F%S: å¼ã§å‚ç…§ã•ã‚ŒãŸæœªå®šç¾©ã‚»ã‚¯ã‚·ãƒ§ãƒ³ `%s'\n"
+
+#: ldexp.c:656 ldexp.c:670
+#, c-format
+msgid "%F%S: undefined MEMORY region `%s' referenced in expression\n"
+msgstr ""
+
+#: ldexp.c:681
+#, c-format
+msgid "%F%S: unknown constant `%s' referenced in expression\n"
+msgstr ""
+
+#: ldexp.c:743
+#, c-format
+msgid "%F%S can not PROVIDE assignment to location counter\n"
+msgstr ""
+
+#: ldexp.c:757
+#, c-format
+msgid "%F%S invalid assignment to location counter\n"
+msgstr ""
+
+#: ldexp.c:760
+#, c-format
+msgid "%F%S assignment to location counter invalid outside of SECTION\n"
+msgstr ""
+
+#: ldexp.c:773
+msgid "%F%S cannot move location counter backwards (from %V to %V)\n"
+msgstr ""
+
+#: ldexp.c:812
+msgid "%P%F:%s: hash creation failed\n"
+msgstr "%P%F:%s: ãƒãƒƒã‚·ãƒ¥ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸ\n"
+
+#: ldexp.c:1119 ldexp.c:1144 ldexp.c:1204
+#, c-format
+msgid "%F%S: nonconstant expression for %s\n"
+msgstr ""
+
+#: ldfile.c:141
+#, c-format
+msgid "attempt to open %s failed\n"
+msgstr "%s ã‚’é–‹ãã®ã«å¤±æ•—ã—ã¾ã—ãŸ\n"
+
+#: ldfile.c:143
+#, c-format
+msgid "attempt to open %s succeeded\n"
+msgstr "%s ã‚’é–‹ãã®ã«æˆåŠŸã—ã¾ã—ãŸ\n"
+
+#: ldfile.c:149
+msgid "%F%P: invalid BFD target `%s'\n"
+msgstr "%F%P: 無効㪠BFD ターゲット `%s' ã§ã™\n"
+
+#: ldfile.c:266 ldfile.c:295
+msgid "%P: skipping incompatible %s when searching for %s\n"
+msgstr "%1$P: %3$s を探索ã—ã¦ã„ã‚‹ã¨ãã«äº’æ›æ€§ã®ãªã„ %2$s をスキップã—ã¾ã—ãŸ\n"
+
+#: ldfile.c:279
+msgid "%F%P: attempted static link of dynamic object `%s'\n"
+msgstr "%F%P: 動的オブジェクト `%s' ã«å¯¾ã™ã‚‹é™çš„リンクãŒè©¦ã¿ã‚‰ã‚Œã¾ã—ãŸ\n"
+
+#: ldfile.c:332 ldmain.c:832
+msgid "%P%F: %s: plugin reported error claiming file\n"
+msgstr "%P%F: %s: プラグインãŒãƒ•ã‚¡ã‚¤ãƒ«ã‚’è¦æ±‚時ã«ã‚¨ãƒ©ãƒ¼ã‚’報告ã—ã¾ã—ãŸ\n"
+
+#: ldfile.c:447
+msgid "%P: cannot find %s (%s): %E\n"
+msgstr "%P: %s (%s) ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“: %E\n"
+
+#: ldfile.c:450
+msgid "%P: cannot find %s: %E\n"
+msgstr "%P: %s ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“: %E\n"
+
+#: ldfile.c:485
+msgid "%P: cannot find %s inside %s\n"
+msgstr "%1$P: %3$s 内㫠%2$s ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“\n"
+
+#: ldfile.c:488
+msgid "%P: cannot find %s\n"
+msgstr "%P: %s ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“\n"
+
+#: ldfile.c:507 ldfile.c:525
+#, c-format
+msgid "cannot find script file %s\n"
+msgstr "スクリプトファイル %s ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“\n"
+
+#: ldfile.c:509 ldfile.c:527
+#, c-format
+msgid "opened script file %s\n"
+msgstr "スクリプトファイル %s ãŒé–‹ã‹ã‚Œã¾ã—ãŸ\n"
+
+#: ldfile.c:657
+msgid "%P%F: cannot open linker script file %s: %E\n"
+msgstr "%P%F: リンカスクリプトファイル %s ã‚’é–‹ã‘ã¾ã›ã‚“: %E\n"
+
+#: ldfile.c:722
+msgid "%P%F: cannot represent machine `%s'\n"
+msgstr "%P%F: マシン `%s' を表ã™ã“ã¨ãŒã§ãã¾ã›ã‚“\n"
+
+#: ldlang.c:1160 ldlang.c:1202 ldlang.c:3048
+msgid "%P%F: can not create hash table: %E\n"
+msgstr "%P%F: ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ルを作æˆã§ãã¾ã›ã‚“: %E\n"
+
+#: ldlang.c:1253
+msgid "%P:%S: warning: redeclaration of memory region `%s'\n"
+msgstr "%P:%S: 警告: メモリ領域 `%s' ãŒå†å®£è¨€ã•ã‚Œã¦ã„ã¾ã™\n"
+
+#: ldlang.c:1259
+msgid "%P:%S: warning: memory region `%s' not declared\n"
+msgstr "%P:%S: メモリ領域 `%s' ãŒå®£è¨€ã•ã‚Œã¦ã„ã¾ã›ã‚“\n"
+
+#: ldlang.c:1293
+msgid "%F%P:%S: error: alias for default memory region\n"
+msgstr "%F%P:%S: エラー: デフォルトメモリ区画ã®åˆ¥åã§ã™\n"
+
+#: ldlang.c:1304
+msgid "%F%P:%S: error: redefinition of memory region alias `%s'\n"
+msgstr "%F%P:%S: エラー: メモリ区画ã®åˆ¥å `%s' ã®å†å®šç¾©ã§ã™\n"
+
+#: ldlang.c:1311
+msgid "%F%P:%S: error: memory region `%s' for alias `%s' does not exist\n"
+msgstr "%1$F%2$P:%3$S: エラー: 別å `%5$s' ã®ãŸã‚ã®ãƒ¡ãƒ¢ãƒªåŒºç”» `%4$s' ãŒå­˜åœ¨ã—ã¾ã›ã‚“\n"
+
+#: ldlang.c:1363 ldlang.c:1402
+msgid "%P%F: failed creating section `%s': %E\n"
+msgstr "%P%F: セクション `%s' ã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸ: %E\n"
+
+#: ldlang.c:1958
+#, c-format
+msgid ""
+"\n"
+"Discarded input sections\n"
+"\n"
+msgstr ""
+"\n"
+"破棄ã•ã‚ŒãŸå…¥åŠ›ã‚»ã‚¯ã‚·ãƒ§ãƒ³\n"
+"\n"
+
+#: ldlang.c:1966
+msgid ""
+"\n"
+"Memory Configuration\n"
+"\n"
+msgstr ""
+"\n"
+"メモリ設定\n"
+"\n"
+
+#: ldlang.c:1968
+msgid "Name"
+msgstr "åå‰"
+
+#: ldlang.c:1968
+msgid "Origin"
+msgstr ""
+
+#: ldlang.c:1968
+msgid "Length"
+msgstr "é•·ã•"
+
+#: ldlang.c:1968
+msgid "Attributes"
+msgstr "属性"
+
+#: ldlang.c:2008
+#, c-format
+msgid ""
+"\n"
+"Linker script and memory map\n"
+"\n"
+msgstr ""
+"\n"
+"リンカスクリプトãŠã‚ˆã³ãƒ¡ãƒ¢ãƒªãƒžãƒƒãƒ—\n"
+"\n"
+
+#: ldlang.c:2074
+msgid "%P%F: Illegal use of `%s' section\n"
+msgstr "%P%F: `%s' セクションã®ä¸æ­£ãªåˆ©ç”¨ã§ã™\n"
+
+#: ldlang.c:2083
+msgid "%P%F: output format %s cannot represent section called %s\n"
+msgstr ""
+
+#: ldlang.c:2636
+msgid "%B: file not recognized: %E\n"
+msgstr "%B: ファイルãŒèªè­˜ã§ãã¾ã›ã‚“ã§ã—ãŸ: %E\n"
+
+#: ldlang.c:2637
+msgid "%B: matching formats:"
+msgstr "%B: 一致ã—ãŸå½¢å¼:"
+
+#: ldlang.c:2644
+msgid "%F%B: file not recognized: %E\n"
+msgstr "%F%B: ファイルãŒèªè­˜ã§ãã¾ã›ã‚“ã§ã—ãŸ: %E\n"
+
+#: ldlang.c:2715
+msgid "%F%B: member %B in archive is not an object\n"
+msgstr "%F%B: 書庫内ã®ãƒ¡ãƒ³ãƒ %B ã¯ã‚ªãƒ–ジェクトã§ã¯ã‚ã‚Šã¾ã›ã‚“\n"
+
+#: ldlang.c:2730 ldlang.c:2744
+msgid "%F%B: could not read symbols: %E\n"
+msgstr "%F%B: シンボルを読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ: %E\n"
+
+#: ldlang.c:3018
+msgid "%P: warning: could not find any targets that match endianness requirement\n"
+msgstr ""
+
+#: ldlang.c:3032
+msgid "%P%F: target %s not found\n"
+msgstr "%P%F: ターゲット %s ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ\n"
+
+#: ldlang.c:3034
+msgid "%P%F: cannot open output file %s: %E\n"
+msgstr "%P%F: 出力ファイル %s ãŒé–‹ã‘ã¾ã›ã‚“: %E\n"
+
+#: ldlang.c:3040
+msgid "%P%F:%s: can not make object file: %E\n"
+msgstr "%P%F:%s: オブジェクトファイルを作æˆã§ãã¾ã›ã‚“: %E\n"
+
+#: ldlang.c:3044
+msgid "%P%F:%s: can not set architecture: %E\n"
+msgstr "%P%F:%s: アーキテクãƒãƒ£ã‚’設定ã§ãã¾ã›ã‚“: %E\n"
+
+#: ldlang.c:3185
+msgid "%P: warning: %s contains output sections; did you forget -T?\n"
+msgstr "%P: 警告: %s ã«ã¯å‡ºåŠ›ã‚»ã‚¯ã‚·ãƒ§ãƒ³ãŒå«ã¾ã‚Œã¾ã™ã€‚-T オプションを忘れã¦ã„ã¾ã›ã‚“ã‹?\n"
+
+#: ldlang.c:3215
+msgid "%P%F: bfd_hash_lookup failed creating symbol %s\n"
+msgstr "%P%F: シンボル %s 作æˆæ™‚ã« bfd_hash_lookup ãŒå¤±æ•—ã—ã¾ã—ãŸ\n"
+
+#: ldlang.c:3233
+msgid "%P%F: bfd_hash_allocate failed creating symbol %s\n"
+msgstr "%P%F: シンボル %s 作æˆæ™‚ã« bfd_hash_allocate ãŒå¤±æ•—ã—ã¾ã—ãŸ\n"
+
+#: ldlang.c:3688
+msgid "%F%P: %s not found for insert\n"
+msgstr ""
+
+#: ldlang.c:3903
+msgid " load address 0x%V"
+msgstr ""
+
+#: ldlang.c:4179
+msgid "%W (size before relaxing)\n"
+msgstr ""
+
+#: ldlang.c:4270
+#, c-format
+msgid "Address of section %s set to "
+msgstr ""
+
+#: ldlang.c:4423
+#, c-format
+msgid "Fail with %d\n"
+msgstr "コード %d ã§å¤±æ•—ã—ã¾ã—ãŸ\n"
+
+#: ldlang.c:4710
+msgid "%X%P: section %s loaded at [%V,%V] overlaps section %s loaded at [%V,%V]\n"
+msgstr ""
+
+#: ldlang.c:4726
+msgid "%X%P: region `%s' overflowed by %ld bytes\n"
+msgstr "%X%P: 領域 `%s' ㌠%ld ãƒã‚¤ãƒˆæº¢ã‚Œã¾ã—ãŸ\n"
+
+#: ldlang.c:4749
+msgid "%X%P: address 0x%v of %B section `%s' is not within region `%s'\n"
+msgstr ""
+
+#: ldlang.c:4760
+msgid "%X%P: %B section `%s' will not fit in region `%s'\n"
+msgstr ""
+
+#: ldlang.c:4816
+#, c-format
+msgid "%F%S: non constant or forward reference address expression for section %s\n"
+msgstr ""
+
+#: ldlang.c:4841
+msgid "%P%X: Internal error on COFF shared library section %s\n"
+msgstr "%P%X: COFF 共有ライブラリã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ %s ã§å†…部エラーãŒç™ºç”Ÿã—ã¾ã—ãŸ\n"
+
+#: ldlang.c:4900
+msgid "%P%F: error: no memory region specified for loadable section `%s'\n"
+msgstr "%P%F: エラー: ロードå¯èƒ½ã‚»ã‚¯ã‚·ãƒ§ãƒ³ `%s' ã®ãŸã‚ã®ãƒ¡ãƒ¢ãƒªåŒºç”»ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“\n"
+
+#: ldlang.c:4905
+msgid "%P: warning: no memory region specified for loadable section `%s'\n"
+msgstr "%P: 警告: ロードå¯èƒ½ã‚»ã‚¯ã‚·ãƒ§ãƒ³ `%s' ã®ãŸã‚ã®ãƒ¡ãƒ¢ãƒªåŒºç”»ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“\n"
+
+#: ldlang.c:4927
+msgid "%P: warning: changing start of section %s by %lu bytes\n"
+msgstr "%P: 警告: セクション %s ã®é–‹å§‹ã‚’ %lu ãƒã‚¤ãƒˆåˆ†å¤‰æ›´ã—ã¦ã„ã¾ã™\n"
+
+#: ldlang.c:5004
+msgid "%P: warning: dot moved backwards before `%s'\n"
+msgstr ""
+
+#: ldlang.c:5170
+msgid "%P%F: can't relax section: %E\n"
+msgstr ""
+
+#: ldlang.c:5497
+msgid "%F%P: invalid data statement\n"
+msgstr ""
+
+#: ldlang.c:5530
+msgid "%F%P: invalid reloc statement\n"
+msgstr ""
+
+#: ldlang.c:5648
+msgid "%P%F: gc-sections requires either an entry or an undefined symbol\n"
+msgstr ""
+
+#: ldlang.c:5673
+msgid "%P%F:%s: can't set start address\n"
+msgstr "%P%F:%s: 開始アドレスを設定ã§ãã¾ã›ã‚“\n"
+
+#: ldlang.c:5686 ldlang.c:5705
+msgid "%P%F: can't set start address\n"
+msgstr "%P%F: 開始アドレスを設定ã§ãã¾ã›ã‚“\n"
+
+#: ldlang.c:5698
+msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n"
+msgstr "%P: 警告: エントリシンボル %s ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。デフォルトã¨ã—㦠%V を使用ã—ã¾ã™\n"
+
+#: ldlang.c:5710
+msgid "%P: warning: cannot find entry symbol %s; not setting start address\n"
+msgstr "%P: 警告: エントリシンボル %s ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。開始アドレスを設定ã—ã¾ã›ã‚“\n"
+
+#: ldlang.c:5760
+msgid "%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"
+msgstr ""
+
+#: ldlang.c:5770
+msgid "%P%X: %s architecture of input file `%B' is incompatible with %s output\n"
+msgstr "%1$P%2$X: `%4$B' ã® %3$s アーキテクãƒãƒ£ã¯ %5$s 出力ã¨äº’æ›æ€§ãŒã‚ã‚Šã¾ã›ã‚“\n"
+
+#: ldlang.c:5792
+msgid "%P%X: failed to merge target specific data of file %B\n"
+msgstr ""
+
+#: ldlang.c:5863
+msgid "%P%F: Could not define common symbol `%T': %E\n"
+msgstr "%P%F: 共通シンボル `%T' を定義ã§ãã¾ã›ã‚“ã§ã—ãŸ: %E\n"
+
+#: ldlang.c:5875
+msgid ""
+"\n"
+"Allocating common symbols\n"
+msgstr ""
+"\n"
+"割り当ã¦ã¦ã„る共通シンボル\n"
+
+#: ldlang.c:5876
+msgid ""
+"Common symbol size file\n"
+"\n"
+msgstr ""
+"共通シンボル サイズ ファイル\n"
+"\n"
+
+#: ldlang.c:6022
+msgid "%P%F: invalid syntax in flags\n"
+msgstr "%P%F: フラグ内ã§ç„¡åŠ¹ãªæ§‹æ–‡ã§ã™\n"
+
+#: ldlang.c:6415
+msgid "%P%F: Failed to create hash table\n"
+msgstr "%P%F: ãƒãƒƒã‚·ãƒ¥è¡¨ã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸ\n"
+
+#: ldlang.c:6430
+msgid "%P%F: %s: plugin reported error after all symbols read\n"
+msgstr "%P%F: %s: å…¨ã¦ã®ã‚·ãƒ³ãƒœãƒ«èª­ã¿è¾¼ã¿å¾Œã«ãƒ—ラグインãŒã‚¨ãƒ©ãƒ¼ã‚’報告ã—ã¾ã—ãŸ\n"
+
+#: ldlang.c:6717
+msgid "%P%F: multiple STARTUP files\n"
+msgstr "%P%F: 複数㮠STARTUP ファイルãŒã‚ã‚Šã¾ã™\n"
+
+#: ldlang.c:6765
+msgid "%X%P:%S: section has both a load address and a load region\n"
+msgstr "%X%P:%S: セクションã«ãƒ­ãƒ¼ãƒ‰ã‚¢ãƒ‰ãƒ¬ã‚¹ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ‰åŒºç”»ã®ä¸¡æ–¹ãŒå­˜åœ¨ã—ã¾ã™\n"
+
+#: ldlang.c:6950
+msgid "%X%P:%S: PHDRS and FILEHDR are not supported when prior PT_LOAD headers lack them\n"
+msgstr ""
+
+#: ldlang.c:7022
+msgid "%F%P: no sections assigned to phdrs\n"
+msgstr ""
+
+#: ldlang.c:7060
+msgid "%F%P: bfd_record_phdr failed: %E\n"
+msgstr ""
+
+#: ldlang.c:7080
+msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n"
+msgstr ""
+
+#: ldlang.c:7481
+msgid "%X%P: unknown language `%s' in version information\n"
+msgstr "%X%P: ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…報内ã«ä¸æ˜Žãªè¨€èªž `%s' ãŒã‚ã‚Šã¾ã™\n"
+
+#: ldlang.c:7626
+msgid "%X%P: anonymous version tag cannot be combined with other version tags\n"
+msgstr ""
+
+#: ldlang.c:7635
+msgid "%X%P: duplicate version tag `%s'\n"
+msgstr "%X%P: ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚¿ã‚° `%s' ãŒé‡è¤‡ã—ã¦ã„ã¾ã™\n"
+
+#: ldlang.c:7656 ldlang.c:7665 ldlang.c:7683 ldlang.c:7693
+msgid "%X%P: duplicate expression `%s' in version information\n"
+msgstr ""
+
+#: ldlang.c:7733
+msgid "%X%P: unable to find version dependency `%s'\n"
+msgstr ""
+
+#: ldlang.c:7756
+msgid "%X%P: unable to read .exports section contents\n"
+msgstr "%X%P: .exports セクションã®ä¸­èº«ã‚’読ã¿è¾¼ã‚ã¾ã›ã‚“\n"
+
+#: ldmain.c:239
+msgid "%X%P: can't set BFD default target to `%s': %E\n"
+msgstr "%X%P: BFD デフォルトターゲットを `%s' ã«è¨­å®šã§ãã¾ã›ã‚“: %E\n"
+
+#: ldmain.c:307
+msgid "%P%F: -r and -shared may not be used together\n"
+msgstr "%P%F: -r ãŠã‚ˆã³ -shared ã¯åŒæ™‚ã«ä½¿ç”¨ã§ãã¾ã›ã‚“\n"
+
+#: ldmain.c:350
+msgid "%P%F: -F may not be used without -shared\n"
+msgstr "%P%F: -F 㯠-shared ç„¡ã—ã§ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“\n"
+
+#: ldmain.c:352
+msgid "%P%F: -f may not be used without -shared\n"
+msgstr "%P%F: -f 㯠-shared ç„¡ã—ã§ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“\n"
+
+#: ldmain.c:400
+msgid "using external linker script:"
+msgstr "外部リンカスクリプトを使用ã—ã¦ã„ã¾ã™:"
+
+#: ldmain.c:402
+msgid "using internal linker script:"
+msgstr "内部リンカスクリプトを使用ã—ã¦ã„ã¾ã™:"
+
+#: ldmain.c:436
+msgid "%P%F: no input files\n"
+msgstr "%P%F: 入力ファイルãŒã‚ã‚Šã¾ã›ã‚“\n"
+
+#: ldmain.c:440
+msgid "%P: mode %s\n"
+msgstr "%P: モード %s\n"
+
+#: ldmain.c:456
+msgid "%P%F: cannot open map file %s: %E\n"
+msgstr "%P%F: マップファイル %s ã‚’é–‹ã‘ã¾ã›ã‚“: %E\n"
+
+#: ldmain.c:485
+msgid "%P: %s: error in plugin cleanup (ignored)\n"
+msgstr ""
+
+#: ldmain.c:494
+msgid "%P: link errors found, deleting executable `%s'\n"
+msgstr "%P: リンクエラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚実行ファイル `%s' を削除ã—ã¦ã„ã¾ã™\n"
+
+#: ldmain.c:503
+msgid "%F%B: final close failed: %E\n"
+msgstr "%F%B: 最後ã®ã‚¯ãƒ­ãƒ¼ã‚ºã«å¤±æ•—ã—ã¾ã—ãŸ: %E\n"
+
+#: ldmain.c:529
+msgid "%X%P: unable to open for source of copy `%s'\n"
+msgstr ""
+
+#: ldmain.c:532
+msgid "%X%P: unable to open for destination of copy `%s'\n"
+msgstr ""
+
+#: ldmain.c:539
+msgid "%P: Error writing file `%s'\n"
+msgstr "%P: ファイル `%s' を書ãè¾¼ã¿ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ\n"
+
+#: ldmain.c:544 pe-dll.c:1729
+#, c-format
+msgid "%P: Error closing file `%s'\n"
+msgstr "%P: ファイル `%s' ã‚’é–‰ã˜ã¦ã„る途中ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ\n"
+
+#: ldmain.c:560
+#, c-format
+msgid "%s: total time in link: %ld.%06ld\n"
+msgstr "%s: リンクã«ã‹ã‹ã£ãŸç·æ™‚é–“: %ld.%06ld\n"
+
+#: ldmain.c:563
+#, c-format
+msgid "%s: data size %ld\n"
+msgstr "%s: データサイズ %ld\n"
+
+#: ldmain.c:646
+msgid "%P%F: missing argument to -m\n"
+msgstr "%P%F: -m ã«å¯¾ã™ã‚‹å¼•æ•°ãŒã‚ã‚Šã¾ã›ã‚“\n"
+
+#: ldmain.c:694 ldmain.c:714 ldmain.c:746 plugin.c:772
+msgid "%P%F: bfd_hash_table_init failed: %E\n"
+msgstr "%P%F: bfd_hash_table_init ã«å¤±æ•—ã—ã¾ã—ãŸ: %E\n"
+
+#: ldmain.c:698 ldmain.c:718
+msgid "%P%F: bfd_hash_lookup failed: %E\n"
+msgstr "%P%F: bfd_hash_lookup ã«å¤±æ•—ã—ã¾ã—ãŸ: %E\n"
+
+#: ldmain.c:732
+msgid "%X%P: error: duplicate retain-symbols-file\n"
+msgstr ""
+
+#: ldmain.c:776
+msgid "%P%F: bfd_hash_lookup for insertion failed: %E\n"
+msgstr ""
+
+#: ldmain.c:781
+msgid "%P: `-retain-symbols-file' overrides `-s' and `-S'\n"
+msgstr "%P: `-retain-symbols-file' 㯠`-s' ãŠã‚ˆã³ `-S' を上書ãã—ã¾ã™\n"
+
+#: ldmain.c:895
+#, c-format
+msgid ""
+"Archive member included because of file (symbol)\n"
+"\n"
+msgstr ""
+
+#: ldmain.c:975
+msgid "%X%C: multiple definition of `%T'\n"
+msgstr "%X%C: `%T' ãŒè¤‡æ•°å®šç¾©ã•ã‚Œã¦ã„ã¾ã™\n"
+
+#: ldmain.c:978
+msgid "%D: first defined here\n"
+msgstr "%D: ã“ã“ã§æœ€åˆã«å®šç¾©ã•ã‚Œã¦ã„ã¾ã™\n"
+
+#: ldmain.c:982
+msgid "%P: Disabling relaxation: it will not work with multiple definitions\n"
+msgstr ""
+
+#: ldmain.c:1012
+msgid "%B: warning: definition of `%T' overriding common\n"
+msgstr ""
+
+#: ldmain.c:1015
+msgid "%B: warning: common is here\n"
+msgstr ""
+
+#: ldmain.c:1022
+msgid "%B: warning: common of `%T' overridden by definition\n"
+msgstr ""
+
+#: ldmain.c:1025
+msgid "%B: warning: defined here\n"
+msgstr ""
+
+#: ldmain.c:1032
+msgid "%B: warning: common of `%T' overridden by larger common\n"
+msgstr ""
+
+#: ldmain.c:1035
+msgid "%B: warning: larger common is here\n"
+msgstr ""
+
+#: ldmain.c:1039
+msgid "%B: warning: common of `%T' overriding smaller common\n"
+msgstr ""
+
+#: ldmain.c:1042
+msgid "%B: warning: smaller common is here\n"
+msgstr ""
+
+#: ldmain.c:1046
+msgid "%B: warning: multiple common of `%T'\n"
+msgstr ""
+
+#: ldmain.c:1048
+msgid "%B: warning: previous common is here\n"
+msgstr ""
+
+#: ldmain.c:1068 ldmain.c:1106
+msgid "%P: warning: global constructor %s used\n"
+msgstr ""
+
+#: ldmain.c:1116
+msgid "%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"
+msgstr ""
+
+#. We found a reloc for the symbol we are looking for.
+#: ldmain.c:1170 ldmain.c:1172 ldmain.c:1174 ldmain.c:1192 ldmain.c:1237
+msgid "warning: "
+msgstr ""
+
+#: ldmain.c:1273
+msgid "%F%P: bfd_hash_table_init failed: %E\n"
+msgstr ""
+
+#: ldmain.c:1280
+msgid "%F%P: bfd_hash_lookup failed: %E\n"
+msgstr ""
+
+#: ldmain.c:1301
+msgid "%X%C: undefined reference to `%T'\n"
+msgstr ""
+
+#: ldmain.c:1304
+msgid "%C: warning: undefined reference to `%T'\n"
+msgstr ""
+
+#: ldmain.c:1310
+msgid "%X%D: more undefined references to `%T' follow\n"
+msgstr ""
+
+#: ldmain.c:1313
+msgid "%D: warning: more undefined references to `%T' follow\n"
+msgstr ""
+
+#: ldmain.c:1324
+msgid "%X%B: undefined reference to `%T'\n"
+msgstr ""
+
+#: ldmain.c:1327
+msgid "%B: warning: undefined reference to `%T'\n"
+msgstr ""
+
+#: ldmain.c:1333
+msgid "%X%B: more undefined references to `%T' follow\n"
+msgstr ""
+
+#: ldmain.c:1336
+msgid "%B: warning: more undefined references to `%T' follow\n"
+msgstr ""
+
+#: ldmain.c:1375
+msgid " additional relocation overflows omitted from the output\n"
+msgstr ""
+
+#: ldmain.c:1388
+msgid " relocation truncated to fit: %s against undefined symbol `%T'"
+msgstr ""
+
+#: ldmain.c:1393
+msgid " relocation truncated to fit: %s against symbol `%T' defined in %A section in %B"
+msgstr ""
+
+#: ldmain.c:1405
+msgid " relocation truncated to fit: %s against `%T'"
+msgstr ""
+
+#: ldmain.c:1422
+#, c-format
+msgid "%X%C: dangerous relocation: %s\n"
+msgstr "%X%C: å±é™ºãªå†é…ç½®ã§ã™: %s\n"
+
+#: ldmain.c:1437
+msgid "%X%C: reloc refers to symbol `%T' which is not being output\n"
+msgstr ""
+
+#: ldmisc.c:149
+#, c-format
+msgid "no symbol"
+msgstr "シンボルãŒã‚ã‚Šã¾ã›ã‚“"
+
+#: ldmisc.c:246
+#, c-format
+msgid "built in linker script:%u"
+msgstr ""
+
+#: ldmisc.c:324
+msgid "%B: In function `%T':\n"
+msgstr "%B: 関数 `%T' 内:\n"
+
+#: ldmisc.c:451
+msgid "%F%P: internal error %s %d\n"
+msgstr "%F%P: 内部エラー %s %d\n"
+
+#: ldmisc.c:500
+msgid "%P: internal error: aborting at %s line %d in %s\n"
+msgstr ""
+
+#: ldmisc.c:503
+msgid "%P: internal error: aborting at %s line %d\n"
+msgstr ""
+
+#: ldmisc.c:505
+msgid "%P%F: please report this bug\n"
+msgstr "%P%F: ã“ã®ãƒã‚°ã‚’報告ã—ã¦ãã ã•ã„\n"
+
+#. Output for noisy == 2 is intended to follow the GNU standards.
+#: ldver.c:39
+#, c-format
+msgid "GNU ld %s\n"
+msgstr ""
+
+#: ldver.c:43
+#, c-format
+msgid "Copyright 2010 Free Software Foundation, Inc.\n"
+msgstr ""
+
+#: ldver.c:44
+#, c-format
+msgid ""
+"This program is free software; you may redistribute it under the terms of\n"
+"the GNU General Public License version 3 or (at your option) a later version.\n"
+"This program has absolutely no warranty.\n"
+msgstr ""
+
+#: ldver.c:54
+#, c-format
+msgid " Supported emulations:\n"
+msgstr ""
+
+#: ldwrite.c:62 ldwrite.c:207
+msgid "%P%F: bfd_new_link_order failed\n"
+msgstr ""
+
+#: ldwrite.c:365
+msgid "%F%P: cannot create split section name for %s\n"
+msgstr ""
+
+#: ldwrite.c:377
+msgid "%F%P: clone section failed: %E\n"
+msgstr ""
+
+#: ldwrite.c:418
+#, c-format
+msgid "%8x something else\n"
+msgstr ""
+
+#: ldwrite.c:588
+msgid "%F%P: final link failed: %E\n"
+msgstr ""
+
+#: lexsup.c:219 lexsup.c:368
+msgid "KEYWORD"
+msgstr ""
+
+#: lexsup.c:219
+msgid "Shared library control for HP/UX compatibility"
+msgstr ""
+
+#: lexsup.c:222
+msgid "ARCH"
+msgstr ""
+
+#: lexsup.c:222
+msgid "Set architecture"
+msgstr ""
+
+#: lexsup.c:224 lexsup.c:487
+msgid "TARGET"
+msgstr ""
+
+#: lexsup.c:224
+msgid "Specify target for following input files"
+msgstr ""
+
+#: lexsup.c:227 lexsup.c:278 lexsup.c:296 lexsup.c:309 lexsup.c:311
+#: lexsup.c:441 lexsup.c:501 lexsup.c:563 lexsup.c:576
+msgid "FILE"
+msgstr ""
+
+#: lexsup.c:227
+msgid "Read MRI format linker script"
+msgstr ""
+
+#: lexsup.c:229
+msgid "Force common symbols to be defined"
+msgstr ""
+
+#: lexsup.c:233 lexsup.c:545 lexsup.c:547 lexsup.c:549 lexsup.c:551
+msgid "ADDRESS"
+msgstr ""
+
+#: lexsup.c:233
+msgid "Set start address"
+msgstr ""
+
+#: lexsup.c:235
+msgid "Export all dynamic symbols"
+msgstr ""
+
+#: lexsup.c:237
+msgid "Undo the effect of --export-dynamic"
+msgstr ""
+
+#: lexsup.c:239
+msgid "Link big-endian objects"
+msgstr ""
+
+#: lexsup.c:241
+msgid "Link little-endian objects"
+msgstr ""
+
+#: lexsup.c:243 lexsup.c:246
+msgid "SHLIB"
+msgstr ""
+
+#: lexsup.c:243
+msgid "Auxiliary filter for shared object symbol table"
+msgstr ""
+
+#: lexsup.c:246
+msgid "Filter for shared object symbol table"
+msgstr ""
+
+#: lexsup.c:249
+msgid "Ignored"
+msgstr ""
+
+#: lexsup.c:251
+msgid "SIZE"
+msgstr ""
+
+#: lexsup.c:251
+msgid "Small data size (if no size, same as --shared)"
+msgstr ""
+
+#: lexsup.c:254
+msgid "FILENAME"
+msgstr ""
+
+#: lexsup.c:254
+msgid "Set internal name of shared library"
+msgstr ""
+
+#: lexsup.c:256
+msgid "PROGRAM"
+msgstr ""
+
+#: lexsup.c:256
+msgid "Set PROGRAM as the dynamic linker to use"
+msgstr ""
+
+#: lexsup.c:259
+msgid "LIBNAME"
+msgstr ""
+
+#: lexsup.c:259
+msgid "Search for library LIBNAME"
+msgstr ""
+
+#: lexsup.c:261
+msgid "DIRECTORY"
+msgstr ""
+
+#: lexsup.c:261
+msgid "Add DIRECTORY to library search path"
+msgstr ""
+
+#: lexsup.c:264
+msgid "Override the default sysroot location"
+msgstr ""
+
+#: lexsup.c:266
+msgid "EMULATION"
+msgstr ""
+
+#: lexsup.c:266
+msgid "Set emulation"
+msgstr ""
+
+#: lexsup.c:268
+msgid "Print map file on standard output"
+msgstr ""
+
+#: lexsup.c:270
+msgid "Do not page align data"
+msgstr ""
+
+#: lexsup.c:272
+msgid "Do not page align data, do not make text readonly"
+msgstr ""
+
+#: lexsup.c:275
+msgid "Page align data, make text readonly"
+msgstr ""
+
+#: lexsup.c:278
+msgid "Set output file name"
+msgstr ""
+
+#: lexsup.c:280
+msgid "Optimize output file"
+msgstr ""
+
+#: lexsup.c:283
+msgid "PLUGIN"
+msgstr ""
+
+#: lexsup.c:283
+msgid "Load named plugin"
+msgstr ""
+
+#: lexsup.c:285
+msgid "ARG"
+msgstr ""
+
+#: lexsup.c:285
+msgid "Send arg to last-loaded plugin"
+msgstr ""
+
+#: lexsup.c:288
+msgid "Ignored for SVR4 compatibility"
+msgstr ""
+
+#: lexsup.c:292
+msgid "Generate relocatable output"
+msgstr ""
+
+#: lexsup.c:296
+msgid "Just link symbols (if directory, same as --rpath)"
+msgstr ""
+
+#: lexsup.c:299
+msgid "Strip all symbols"
+msgstr ""
+
+#: lexsup.c:301
+msgid "Strip debugging symbols"
+msgstr ""
+
+#: lexsup.c:303
+msgid "Strip symbols in discarded sections"
+msgstr ""
+
+#: lexsup.c:305
+msgid "Do not strip symbols in discarded sections"
+msgstr ""
+
+#: lexsup.c:307
+msgid "Trace file opens"
+msgstr ""
+
+#: lexsup.c:309
+msgid "Read linker script"
+msgstr ""
+
+#: lexsup.c:311
+msgid "Read default linker script"
+msgstr ""
+
+#: lexsup.c:315 lexsup.c:333 lexsup.c:418 lexsup.c:439 lexsup.c:538
+#: lexsup.c:566 lexsup.c:605
+msgid "SYMBOL"
+msgstr ""
+
+#: lexsup.c:315
+msgid "Start with undefined reference to SYMBOL"
+msgstr ""
+
+#: lexsup.c:318
+msgid "[=SECTION]"
+msgstr ""
+
+#: lexsup.c:319
+msgid "Don't merge input [SECTION | orphan] sections"
+msgstr ""
+
+#: lexsup.c:321
+msgid "Build global constructor/destructor tables"
+msgstr ""
+
+#: lexsup.c:323
+msgid "Print version information"
+msgstr ""
+
+#: lexsup.c:325
+msgid "Print version and emulation information"
+msgstr ""
+
+#: lexsup.c:327
+msgid "Discard all local symbols"
+msgstr ""
+
+#: lexsup.c:329
+msgid "Discard temporary local symbols (default)"
+msgstr ""
+
+#: lexsup.c:331
+msgid "Don't discard any local symbols"
+msgstr ""
+
+#: lexsup.c:333
+msgid "Trace mentions of SYMBOL"
+msgstr ""
+
+#: lexsup.c:335 lexsup.c:503 lexsup.c:505
+msgid "PATH"
+msgstr ""
+
+#: lexsup.c:335
+msgid "Default search path for Solaris compatibility"
+msgstr ""
+
+#: lexsup.c:338
+msgid "Start a group"
+msgstr ""
+
+#: lexsup.c:340
+msgid "End a group"
+msgstr ""
+
+#: lexsup.c:344
+msgid "Accept input files whose architecture cannot be determined"
+msgstr ""
+
+#: lexsup.c:348
+msgid "Reject input files whose architecture is unknown"
+msgstr ""
+
+#: lexsup.c:361
+msgid "Only set DT_NEEDED for following dynamic libs if used"
+msgstr ""
+
+#: lexsup.c:364
+msgid ""
+"Always set DT_NEEDED for dynamic libraries mentioned on\n"
+" the command line"
+msgstr ""
+
+#: lexsup.c:368
+msgid "Ignored for SunOS compatibility"
+msgstr ""
+
+#: lexsup.c:370
+msgid "Link against shared libraries"
+msgstr ""
+
+#: lexsup.c:376
+msgid "Do not link against shared libraries"
+msgstr ""
+
+#: lexsup.c:384
+msgid "Bind global references locally"
+msgstr ""
+
+#: lexsup.c:386
+msgid "Bind global function references locally"
+msgstr ""
+
+#: lexsup.c:388
+msgid "Check section addresses for overlaps (default)"
+msgstr ""
+
+#: lexsup.c:391
+msgid "Do not check section addresses for overlaps"
+msgstr ""
+
+#: lexsup.c:395
+msgid "Copy DT_NEEDED links mentioned inside DSOs that follow"
+msgstr ""
+
+#: lexsup.c:399
+msgid "Do not copy DT_NEEDED links mentioned inside DSOs that follow"
+msgstr ""
+
+#: lexsup.c:403
+msgid "Output cross reference table"
+msgstr ""
+
+#: lexsup.c:405
+msgid "SYMBOL=EXPRESSION"
+msgstr ""
+
+#: lexsup.c:405
+msgid "Define a symbol"
+msgstr ""
+
+#: lexsup.c:407
+msgid "[=STYLE]"
+msgstr ""
+
+#: lexsup.c:407
+msgid "Demangle symbol names [using STYLE]"
+msgstr ""
+
+#: lexsup.c:410
+msgid "Generate embedded relocs"
+msgstr ""
+
+#: lexsup.c:412
+msgid "Treat warnings as errors"
+msgstr ""
+
+#: lexsup.c:415
+msgid "Do not treat warnings as errors (default)"
+msgstr ""
+
+#: lexsup.c:418
+msgid "Call SYMBOL at unload-time"
+msgstr ""
+
+#: lexsup.c:420
+msgid "Force generation of file with .exe suffix"
+msgstr ""
+
+#: lexsup.c:422
+msgid "Remove unused sections (on some targets)"
+msgstr ""
+
+#: lexsup.c:425
+msgid "Don't remove unused sections (default)"
+msgstr ""
+
+#: lexsup.c:428
+msgid "List removed unused sections on stderr"
+msgstr ""
+
+#: lexsup.c:431
+msgid "Do not list removed unused sections"
+msgstr ""
+
+#: lexsup.c:434
+msgid "Set default hash table size close to <NUMBER>"
+msgstr ""
+
+#: lexsup.c:437
+msgid "Print option help"
+msgstr ""
+
+#: lexsup.c:439
+msgid "Call SYMBOL at load-time"
+msgstr ""
+
+#: lexsup.c:441
+msgid "Write a map file"
+msgstr ""
+
+#: lexsup.c:443
+msgid "Do not define Common storage"
+msgstr ""
+
+#: lexsup.c:445
+msgid "Do not demangle symbol names"
+msgstr ""
+
+#: lexsup.c:447
+msgid "Use less memory and more disk I/O"
+msgstr ""
+
+#: lexsup.c:449
+msgid "Do not allow unresolved references in object files"
+msgstr ""
+
+#: lexsup.c:452
+msgid "Allow unresolved references in shared libaries"
+msgstr ""
+
+#: lexsup.c:456
+msgid "Do not allow unresolved references in shared libs"
+msgstr ""
+
+#: lexsup.c:460
+msgid "Allow multiple definitions"
+msgstr ""
+
+#: lexsup.c:462
+msgid "Disallow undefined version"
+msgstr ""
+
+#: lexsup.c:464
+msgid "Create default symbol version"
+msgstr ""
+
+#: lexsup.c:467
+msgid "Create default symbol version for imported symbols"
+msgstr ""
+
+#: lexsup.c:470
+msgid "Don't warn about mismatched input files"
+msgstr ""
+
+#: lexsup.c:473
+msgid "Don't warn on finding an incompatible library"
+msgstr ""
+
+#: lexsup.c:476
+msgid "Turn off --whole-archive"
+msgstr ""
+
+#: lexsup.c:478
+msgid "Create an output file even if errors occur"
+msgstr ""
+
+#: lexsup.c:483
+msgid ""
+"Only use library directories specified on\n"
+" the command line"
+msgstr ""
+
+#: lexsup.c:487
+msgid "Specify target of output file"
+msgstr ""
+
+#: lexsup.c:490
+msgid "Ignored for Linux compatibility"
+msgstr ""
+
+#: lexsup.c:493
+msgid "Reduce memory overheads, possibly taking much longer"
+msgstr ""
+
+#: lexsup.c:496
+msgid "Reduce code size by using target specific optimizations"
+msgstr ""
+
+#: lexsup.c:498
+msgid "Do not use relaxation techniques to reduce code size"
+msgstr ""
+
+#: lexsup.c:501
+msgid "Keep only symbols listed in FILE"
+msgstr ""
+
+#: lexsup.c:503
+msgid "Set runtime shared library search path"
+msgstr ""
+
+#: lexsup.c:505
+msgid "Set link time shared library search path"
+msgstr ""
+
+#: lexsup.c:508
+msgid "Create a shared library"
+msgstr ""
+
+#: lexsup.c:512
+msgid "Create a position independent executable"
+msgstr ""
+
+#: lexsup.c:516
+msgid "[=ascending|descending]"
+msgstr ""
+
+#: lexsup.c:517
+msgid "Sort common symbols by alignment [in specified order]"
+msgstr ""
+
+#: lexsup.c:522
+msgid "name|alignment"
+msgstr ""
+
+#: lexsup.c:523
+msgid "Sort sections by name or maximum alignment"
+msgstr ""
+
+#: lexsup.c:525
+msgid "COUNT"
+msgstr ""
+
+#: lexsup.c:525
+msgid "How many tags to reserve in .dynamic section"
+msgstr ""
+
+#: lexsup.c:528
+msgid "[=SIZE]"
+msgstr ""
+
+#: lexsup.c:528
+msgid "Split output sections every SIZE octets"
+msgstr ""
+
+#: lexsup.c:531
+msgid "[=COUNT]"
+msgstr ""
+
+#: lexsup.c:531
+msgid "Split output sections every COUNT relocs"
+msgstr ""
+
+#: lexsup.c:534
+msgid "Print memory usage statistics"
+msgstr ""
+
+#: lexsup.c:536
+msgid "Display target specific options"
+msgstr ""
+
+#: lexsup.c:538
+msgid "Do task level linking"
+msgstr ""
+
+#: lexsup.c:540
+msgid "Use same format as native linker"
+msgstr ""
+
+#: lexsup.c:542
+msgid "SECTION=ADDRESS"
+msgstr ""
+
+#: lexsup.c:542
+msgid "Set address of named section"
+msgstr "named セクションã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’設定ã™ã‚‹"
+
+#: lexsup.c:545
+msgid "Set address of .bss section"
+msgstr ".bss セクションã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’設定ã™ã‚‹"
+
+#: lexsup.c:547
+msgid "Set address of .data section"
+msgstr ".data セクションã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’設定ã™ã‚‹"
+
+#: lexsup.c:549
+msgid "Set address of .text section"
+msgstr ".text セクションã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’設定ã™ã‚‹"
+
+#: lexsup.c:551
+msgid "Set address of text segment"
+msgstr "text セグメントã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’設定ã™ã‚‹"
+
+#: lexsup.c:554
+msgid ""
+"How to handle unresolved symbols. <method> is:\n"
+" ignore-all, report-all, ignore-in-object-files,\n"
+" ignore-in-shared-libs"
+msgstr ""
+"解決ã•ã‚Œãªã‹ã£ãŸã‚·ãƒ³ãƒœãƒ«ã‚’ã©ã®ã‚ˆã†ã«æ‰±ã†ã‹ã‚’指定ã™ã‚‹ã€‚ <method> ã¯ä»¥ä¸‹ã®é€šã‚Š:\n"
+" ignore-all, report-all, ignore-in-object-files,\n"
+" ignore-in-shared-libs"
+
+#: lexsup.c:559
+msgid "Output lots of information during link"
+msgstr "リンク中ã«å¤šæ•°ã®æƒ…報を表示ã™ã‚‹"
+
+#: lexsup.c:563
+msgid "Read version information script"
+msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…報スクリプトを読ã¿è¾¼ã‚€"
+
+#: lexsup.c:566
+msgid ""
+"Take export symbols list from .exports, using\n"
+" SYMBOL as the version."
+msgstr ""
+
+#: lexsup.c:570
+msgid "Add data symbols to dynamic list"
+msgstr ""
+
+#: lexsup.c:572
+msgid "Use C++ operator new/delete dynamic list"
+msgstr ""
+
+#: lexsup.c:574
+msgid "Use C++ typeinfo dynamic list"
+msgstr ""
+
+#: lexsup.c:576
+msgid "Read dynamic list"
+msgstr "動的リストを読ã¿è¾¼ã‚€"
+
+#: lexsup.c:578
+msgid "Warn about duplicate common symbols"
+msgstr ""
+
+#: lexsup.c:580
+msgid "Warn if global constructors/destructors are seen"
+msgstr "大域コンストラクタ/デストラクタãŒè¦‹ã¤ã‹ã£ãŸã¨ãã«è­¦å‘Šã™ã‚‹"
+
+#: lexsup.c:583
+msgid "Warn if the multiple GP values are used"
+msgstr "複数㮠GP 値ãŒä½¿ç”¨ã•ã‚Œã¦ã„ã‚‹ã¨ãã«è­¦å‘Šã™ã‚‹"
+
+#: lexsup.c:585
+msgid "Warn only once per undefined symbol"
+msgstr "定義ã•ã‚Œã¦ã„ãªã„シンボルãŒã‚ã‚‹ã”ã¨ã«ä¸€å›žã®ã¿è­¦å‘Šã™ã‚‹"
+
+#: lexsup.c:587
+msgid "Warn if start of section changes due to alignment"
+msgstr "整列ã«ã‚ˆã‚Šã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®é–‹å§‹ãŒå¤‰æ›´ã•ã‚ŒãŸã¨ãã«è­¦å‘Šã™ã‚‹"
+
+#: lexsup.c:590
+msgid "Warn if shared object has DT_TEXTREL"
+msgstr "共有オブジェクト㫠DT_TEXTREL ãŒå«ã¾ã‚Œã‚‹ã¨ãã«è­¦å‘Šã™ã‚‹"
+
+#: lexsup.c:593
+msgid "Warn if an object has alternate ELF machine code"
+msgstr ""
+
+#: lexsup.c:597
+msgid "Report unresolved symbols as warnings"
+msgstr "解決ã§ããªã„シンボルを警告ã¨ã—ã¦å ±å‘Šã™ã‚‹"
+
+#: lexsup.c:600
+msgid "Report unresolved symbols as errors"
+msgstr "解決ã§ããªã„シンボルをエラーã¨ã—ã¦å ±å‘Šã™ã‚‹"
+
+#: lexsup.c:602
+msgid "Include all objects from following archives"
+msgstr "ã“れ以é™ã®æ›¸åº«ã‹ã‚‰ã¯å…¨ã¦ã®ã‚ªãƒ–ジェクトをå«ã‚ã‚‹"
+
+#: lexsup.c:605
+msgid "Use wrapper functions for SYMBOL"
+msgstr ""
+
+#: lexsup.c:754
+msgid "%P: unrecognized option '%s'\n"
+msgstr "%P: èªè­˜ã§ããªã„オプション '%s' ã§ã™\n"
+
+#: lexsup.c:758
+msgid "%P%F: use the --help option for usage information\n"
+msgstr "%P%F: 使用法ã«é–¢ã™ã‚‹æƒ…å ±ã«ã¤ã„ã¦ã¯ --help オプションを使用ã—ã¦ãã ã•ã„\n"
+
+#: lexsup.c:776
+msgid "%P%F: unrecognized -a option `%s'\n"
+msgstr ""
+
+#: lexsup.c:789
+msgid "%P%F: unrecognized -assert option `%s'\n"
+msgstr ""
+
+#: lexsup.c:832
+msgid "%F%P: unknown demangling style `%s'"
+msgstr "%F%P: ä¸æ˜Žãªåå‰å¾©å…ƒ (demangle) å½¢å¼ `%s' ã§ã™"
+
+#: lexsup.c:898
+msgid "%P%F: invalid number `%s'\n"
+msgstr "%P%F: 無効ãªæ•°å€¤ `%s' ã§ã™\n"
+
+#: lexsup.c:996
+msgid "%P%F: bad --unresolved-symbols option: %s\n"
+msgstr "%P%F: 誤ã£ãŸ --unresolved-symbols オプションã§ã™: %s\n"
+
+#: lexsup.c:1059
+msgid "%P%F: bad -plugin option\n"
+msgstr "%P%F: 誤ã£ãŸ -plugin オプションã§ã™\n"
+
+#: lexsup.c:1063
+msgid "%P%F: bad -plugin-opt option\n"
+msgstr "%P%F: 誤ã£ãŸ -plugin-opt オプションã§ã™\n"
+
+#. This can happen if the user put "-rpath,a" on the command
+#. line. (Or something similar. The comma is important).
+#. Getopt becomes confused and thinks that this is a -r option
+#. but it cannot parse the text after the -r so it refuses to
+#. increment the optind counter. Detect this case and issue
+#. an error message here. We cannot just make this a warning,
+#. increment optind, and continue because getopt is too confused
+#. and will seg-fault the next time around.
+#: lexsup.c:1080
+msgid "%P%F: bad -rpath option\n"
+msgstr "%P%F: 誤ã£ãŸ -rpath オプションã§ã™\n"
+
+#: lexsup.c:1194
+msgid "%P%F: -shared not supported\n"
+msgstr "%P%F: -shared ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“\n"
+
+#: lexsup.c:1203
+msgid "%P%F: -pie not supported\n"
+msgstr "%P%F: -pie ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“\n"
+
+#: lexsup.c:1211
+msgid "descending"
+msgstr "descending"
+
+#: lexsup.c:1213
+msgid "ascending"
+msgstr "ascending"
+
+#: lexsup.c:1216
+msgid "%P%F: invalid common section sorting option: %s\n"
+msgstr ""
+
+#: lexsup.c:1220
+msgid "name"
+msgstr ""
+
+#: lexsup.c:1222
+msgid "alignment"
+msgstr ""
+
+#: lexsup.c:1225
+msgid "%P%F: invalid section sorting option: %s\n"
+msgstr ""
+
+#: lexsup.c:1259
+msgid "%P%F: invalid argument to option \"--section-start\"\n"
+msgstr ""
+
+#: lexsup.c:1266
+msgid "%P%F: missing argument(s) to option \"--section-start\"\n"
+msgstr ""
+
+#: lexsup.c:1490
+msgid "%P%F: group ended before it began (--help for usage)\n"
+msgstr ""
+
+#: lexsup.c:1518
+msgid "%P%X: --hash-size needs a numeric argument\n"
+msgstr ""
+
+#: lexsup.c:1547
+msgid "%P%F: %s: error loading plugin\n"
+msgstr "%P%F: %s: プラグインã®èª­ã¿è¾¼ã¿ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ\n"
+
+#: lexsup.c:1578 lexsup.c:1591
+msgid "%P%F: invalid hex number `%s'\n"
+msgstr "%P%F: 無効ãªå六進数 `%s' ã§ã™\n"
+
+#: lexsup.c:1627
+#, c-format
+msgid "Usage: %s [options] file...\n"
+msgstr "使用法: %s [options] file...\n"
+
+#: lexsup.c:1629
+#, c-format
+msgid "Options:\n"
+msgstr "オプション:\n"
+
+#: lexsup.c:1707
+#, c-format
+msgid " @FILE"
+msgstr ""
+
+#: lexsup.c:1710
+#, c-format
+msgid "Read options from FILE\n"
+msgstr "オプションを FILE ã‹ã‚‰èª­ã¿è¾¼ã‚€\n"
+
+#. Note: Various tools (such as libtool) depend upon the
+#. format of the listings below - do not change them.
+#: lexsup.c:1715
+#, c-format
+msgid "%s: supported targets:"
+msgstr "%s: supported targets:"
+
+#: lexsup.c:1723
+#, c-format
+msgid "%s: supported emulations: "
+msgstr "%s: supported emulations: "
+
+#: lexsup.c:1728
+#, c-format
+msgid "%s: emulation specific options:\n"
+msgstr "%s: emulation specific options:\n"
+
+#: lexsup.c:1733
+#, c-format
+msgid "Report bugs to %s\n"
+msgstr ""
+"ãƒã‚°ã‚’発見ã—ãŸã‚‰ <%s> ã«å ±å‘Šã—ã¦ä¸‹ã•ã„。\n"
+"翻訳ã«é–¢ã™ã‚‹ãƒã‚°ã¯<translation-team-ja@lists.sourceforge.net>ã«å ±å‘Šã—ã¦ãã ã•ã„。\n"
+
+#: mri.c:292
+msgid "%P%F: unknown format type %s\n"
+msgstr ""
+
+#: pe-dll.c:430
+#, c-format
+msgid "%XUnsupported PEI architecture: %s\n"
+msgstr ""
+
+#: pe-dll.c:788
+#, c-format
+msgid "%XCannot export %s: invalid export name\n"
+msgstr ""
+
+#: pe-dll.c:844
+#, c-format
+msgid "%XError, duplicate EXPORT with ordinals: %s (%d vs %d)\n"
+msgstr ""
+
+#: pe-dll.c:851
+#, c-format
+msgid "Warning, duplicate EXPORT: %s\n"
+msgstr ""
+
+#: pe-dll.c:938
+#, c-format
+msgid "%XCannot export %s: symbol not defined\n"
+msgstr ""
+
+#: pe-dll.c:944
+#, c-format
+msgid "%XCannot export %s: symbol wrong type (%d vs %d)\n"
+msgstr ""
+
+#: pe-dll.c:951
+#, c-format
+msgid "%XCannot export %s: symbol not found\n"
+msgstr ""
+
+#: pe-dll.c:1065
+#, c-format
+msgid "%XError, ordinal used twice: %d (%s vs %s)\n"
+msgstr ""
+
+#: pe-dll.c:1446
+#, c-format
+msgid "%XError: %d-bit reloc in dll\n"
+msgstr ""
+
+#: pe-dll.c:1574
+#, c-format
+msgid "%s: Can't open output def file %s\n"
+msgstr "%s: 出力定義ファイル %s ã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“\n"
+
+#: pe-dll.c:1725
+#, c-format
+msgid "; no contents available\n"
+msgstr ""
+
+#: pe-dll.c:2652
+msgid "%C: variable '%T' can't be auto-imported. Please read the documentation for ld's --enable-auto-import for details.\n"
+msgstr ""
+
+#: pe-dll.c:2682
+#, c-format
+msgid "%XCan't open .lib file: %s\n"
+msgstr "%X .lib ファイルを開ãã“ã¨ãŒã§ãã¾ã›ã‚“: %s\n"
+
+#: pe-dll.c:2687
+#, c-format
+msgid "Creating library file: %s\n"
+msgstr "ライブラリファイルを作æˆã—ã¦ã„ã¾ã™: %s\n"
+
+#: pe-dll.c:2716
+#, c-format
+msgid "%Xbfd_openr %s: %E\n"
+msgstr ""
+
+#: pe-dll.c:2728
+#, c-format
+msgid "%X%s(%s): can't find member in non-archive file"
+msgstr ""
+
+#: pe-dll.c:2740
+#, c-format
+msgid "%X%s(%s): can't find member in archive"
+msgstr "%X%s(%s): 書庫内ã«ãƒ¡ãƒ³ãƒãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
+
+#: pe-dll.c:3177
+#, c-format
+msgid "%XError: can't use long section names on this arch\n"
+msgstr "%Xエラー: ã“ã®ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ã§ã¯é•·ã„セクションåを使用ã§ãã¾ã›ã‚“\n"
+
+#: plugin.c:178 plugin.c:212
+msgid "<no plugin>"
+msgstr ""
+
+#: plugin.c:308
+msgid "%P%F: %s: non-ELF symbol in ELF BFD!"
+msgstr "%P%F: %s: ELF BFD 内ã«éž ELF シンボルãŒã‚ã‚Šã¾ã™!"
+
+#: plugin.c:800
+msgid "%P%X: %s: hash table failure adding symbol %s"
+msgstr ""
+
+#: plugin.c:833
+msgid "%P%X: %s: can't find IR symbol '%s'"
+msgstr ""
+
+#: plugin.c:836
+msgid "%P%x: %s: bad IR symbol type %d"
+msgstr ""
diff --git a/binutils-2.21/ld/po/ld.pot b/binutils-2.21/ld/po/ld.pot
new file mode 100644
index 0000000..b71f9a6
--- /dev/null
+++ b/binutils-2.21/ld/po/ld.pot
@@ -0,0 +1,2231 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
+"POT-Creation-Date: 2010-11-05 11:34+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: emultempl/armcoff.em:73
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr ""
+
+#: emultempl/armcoff.em:74
+#, c-format
+msgid ""
+" --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"
+msgstr ""
+
+#: emultempl/armcoff.em:122
+#, c-format
+msgid "Errors encountered processing file %s"
+msgstr ""
+
+#: emultempl/armcoff.em:190 emultempl/pe.em:1812
+msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"
+msgstr ""
+
+#: emultempl/armcoff.em:195 emultempl/pe.em:1817
+msgid "%P: warning: cannot find thumb start symbol %s\n"
+msgstr ""
+
+#: emultempl/pe.em:418
+#, c-format
+msgid ""
+" --base_file <basefile> Generate a base file for relocatable "
+"DLLs\n"
+msgstr ""
+
+#: emultempl/pe.em:419
+#, c-format
+msgid ""
+" --dll Set image base to the default for DLLs\n"
+msgstr ""
+
+#: emultempl/pe.em:420
+#, c-format
+msgid " --file-alignment <size> Set file alignment\n"
+msgstr ""
+
+#: emultempl/pe.em:421
+#, c-format
+msgid " --heap <size> Set initial size of the heap\n"
+msgstr ""
+
+#: emultempl/pe.em:422
+#, c-format
+msgid ""
+" --image-base <address> Set start address of the executable\n"
+msgstr ""
+
+#: emultempl/pe.em:423
+#, c-format
+msgid ""
+" --major-image-version <number> Set version number of the executable\n"
+msgstr ""
+
+#: emultempl/pe.em:424
+#, c-format
+msgid " --major-os-version <number> Set minimum required OS version\n"
+msgstr ""
+
+#: emultempl/pe.em:425
+#, c-format
+msgid ""
+" --major-subsystem-version <number> Set minimum required OS subsystem "
+"version\n"
+msgstr ""
+
+#: emultempl/pe.em:426
+#, c-format
+msgid ""
+" --minor-image-version <number> Set revision number of the executable\n"
+msgstr ""
+
+#: emultempl/pe.em:427
+#, c-format
+msgid " --minor-os-version <number> Set minimum required OS revision\n"
+msgstr ""
+
+#: emultempl/pe.em:428
+#, c-format
+msgid ""
+" --minor-subsystem-version <number> Set minimum required OS subsystem "
+"revision\n"
+msgstr ""
+
+#: emultempl/pe.em:429
+#, c-format
+msgid " --section-alignment <size> Set section alignment\n"
+msgstr ""
+
+#: emultempl/pe.em:430
+#, c-format
+msgid " --stack <size> Set size of the initial stack\n"
+msgstr ""
+
+#: emultempl/pe.em:431
+#, c-format
+msgid ""
+" --subsystem <name>[:<version>] Set required OS subsystem [& version]\n"
+msgstr ""
+
+#: emultempl/pe.em:432
+#, c-format
+msgid ""
+" --support-old-code Support interworking with old code\n"
+msgstr ""
+
+#: emultempl/pe.em:433
+#, c-format
+msgid ""
+" --[no-]leading-underscore Set explicit symbol underscore prefix "
+"mode\n"
+msgstr ""
+
+#: emultempl/pe.em:434
+#, c-format
+msgid ""
+" --thumb-entry=<symbol> Set the entry point to be Thumb "
+"<symbol>\n"
+msgstr ""
+
+#: emultempl/pe.em:436
+#, c-format
+msgid ""
+" --add-stdcall-alias Export symbols with and without @nn\n"
+msgstr ""
+
+#: emultempl/pe.em:437
+#, c-format
+msgid " --disable-stdcall-fixup Don't link _sym to _sym@nn\n"
+msgstr ""
+
+#: emultempl/pe.em:438
+#, c-format
+msgid ""
+" --enable-stdcall-fixup Link _sym to _sym@nn without warnings\n"
+msgstr ""
+
+#: emultempl/pe.em:439
+#, c-format
+msgid ""
+" --exclude-symbols sym,sym,... Exclude symbols from automatic export\n"
+msgstr ""
+
+#: emultempl/pe.em:440
+#, c-format
+msgid ""
+" --exclude-all-symbols Exclude all symbols from automatic "
+"export\n"
+msgstr ""
+
+#: emultempl/pe.em:441
+#, c-format
+msgid ""
+" --exclude-libs lib,lib,... Exclude libraries from automatic "
+"export\n"
+msgstr ""
+
+#: emultempl/pe.em:442
+#, c-format
+msgid " --exclude-modules-for-implib mod,mod,...\n"
+msgstr ""
+
+#: emultempl/pe.em:443
+#, c-format
+msgid ""
+" Exclude objects, archive members from "
+"auto\n"
+msgstr ""
+
+#: emultempl/pe.em:444
+#, c-format
+msgid ""
+" export, place into import library "
+"instead.\n"
+msgstr ""
+
+#: emultempl/pe.em:445
+#, c-format
+msgid ""
+" --export-all-symbols Automatically export all globals to "
+"DLL\n"
+msgstr ""
+
+#: emultempl/pe.em:446
+#, c-format
+msgid " --kill-at Remove @nn from exported symbols\n"
+msgstr ""
+
+#: emultempl/pe.em:447
+#, c-format
+msgid " --out-implib <file> Generate import library\n"
+msgstr ""
+
+#: emultempl/pe.em:448
+#, c-format
+msgid ""
+" --output-def <file> Generate a .DEF file for the built DLL\n"
+msgstr ""
+
+#: emultempl/pe.em:449
+#, c-format
+msgid " --warn-duplicate-exports Warn about duplicate exports.\n"
+msgstr ""
+
+#: emultempl/pe.em:450
+#, c-format
+msgid ""
+" --compat-implib Create backward compatible import "
+"libs;\n"
+" create __imp_<SYMBOL> as well.\n"
+msgstr ""
+
+#: emultempl/pe.em:452
+#, c-format
+msgid ""
+" --enable-auto-image-base Automatically choose image base for "
+"DLLs\n"
+" unless user specifies one\n"
+msgstr ""
+
+#: emultempl/pe.em:454
+#, c-format
+msgid ""
+" --disable-auto-image-base Do not auto-choose image base. "
+"(default)\n"
+msgstr ""
+
+#: emultempl/pe.em:455
+#, c-format
+msgid ""
+" --dll-search-prefix=<string> When linking dynamically to a dll "
+"without\n"
+" an importlib, use <string><basename>."
+"dll\n"
+" in preference to lib<basename>.dll \n"
+msgstr ""
+
+#: emultempl/pe.em:458
+#, c-format
+msgid ""
+" --enable-auto-import Do sophistcated linking of _sym to\n"
+" __imp_sym for DATA references\n"
+msgstr ""
+
+#: emultempl/pe.em:460
+#, c-format
+msgid ""
+" --disable-auto-import Do not auto-import DATA items from "
+"DLLs\n"
+msgstr ""
+
+#: emultempl/pe.em:461
+#, c-format
+msgid ""
+" --enable-runtime-pseudo-reloc Work around auto-import limitations by\n"
+" adding pseudo-relocations resolved "
+"at\n"
+" runtime.\n"
+msgstr ""
+
+#: emultempl/pe.em:464
+#, c-format
+msgid ""
+" --disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations "
+"for\n"
+" auto-imported DATA.\n"
+msgstr ""
+
+#: emultempl/pe.em:466
+#, c-format
+msgid ""
+" --enable-extra-pe-debug Enable verbose debug output when "
+"building\n"
+" or linking to DLLs (esp. auto-"
+"import)\n"
+msgstr ""
+
+#: emultempl/pe.em:469
+#, c-format
+msgid ""
+" --large-address-aware Executable supports virtual addresses\n"
+" greater than 2 gigabytes\n"
+msgstr ""
+
+#: emultempl/pe.em:471
+#, c-format
+msgid ""
+" --enable-long-section-names Use long COFF section names even in\n"
+" executable image files\n"
+msgstr ""
+
+#: emultempl/pe.em:473
+#, c-format
+msgid ""
+" --disable-long-section-names Never use long COFF section names, "
+"even\n"
+" in object files\n"
+msgstr ""
+
+#: emultempl/pe.em:475
+#, c-format
+msgid ""
+" --dynamicbase\t\t\t Image base address may be relocated using\n"
+"\t\t\t\t address space layout randomization (ASLR)\n"
+msgstr ""
+
+#: emultempl/pe.em:477
+#, c-format
+msgid " --forceinteg\t\t Code integrity checks are enforced\n"
+msgstr ""
+
+#: emultempl/pe.em:478
+#, c-format
+msgid " --nxcompat\t\t Image is compatible with data execution prevention\n"
+msgstr ""
+
+#: emultempl/pe.em:479
+#, c-format
+msgid ""
+" --no-isolation\t\t Image understands isolation but do not isolate the "
+"image\n"
+msgstr ""
+
+#: emultempl/pe.em:480
+#, c-format
+msgid ""
+" --no-seh\t\t\t Image does not use SEH. No SE handler may\n"
+"\t\t\t\t be called in this image\n"
+msgstr ""
+
+#: emultempl/pe.em:482
+#, c-format
+msgid " --no-bind\t\t\t Do not bind this image\n"
+msgstr ""
+
+#: emultempl/pe.em:483
+#, c-format
+msgid " --wdmdriver\t\t Driver uses the WDM model\n"
+msgstr ""
+
+#: emultempl/pe.em:484
+#, c-format
+msgid " --tsaware Image is Terminal Server aware\n"
+msgstr ""
+
+#: emultempl/pe.em:613
+msgid "%P: warning: bad version number in -subsystem option\n"
+msgstr ""
+
+#: emultempl/pe.em:638
+msgid "%P%F: invalid subsystem type %s\n"
+msgstr ""
+
+#: emultempl/pe.em:659
+msgid "%P%F: invalid hex number for PE parameter '%s'\n"
+msgstr ""
+
+#: emultempl/pe.em:676
+msgid "%P%F: strange hex info for PE parameter '%s'\n"
+msgstr ""
+
+#: emultempl/pe.em:693
+#, c-format
+msgid "%s: Can't open base file %s\n"
+msgstr ""
+
+#: emultempl/pe.em:969
+msgid "%P: warning, file alignment > section alignment.\n"
+msgstr ""
+
+#: emultempl/pe.em:982
+msgid ""
+"%P: warning: --export-dynamic is not supported for PE targets, did you mean "
+"--export-all-symbols?\n"
+msgstr ""
+
+#: emultempl/pe.em:1058 emultempl/pe.em:1085
+#, c-format
+msgid "Warning: resolving %s by linking to %s\n"
+msgstr ""
+
+#: emultempl/pe.em:1063 emultempl/pe.em:1090
+msgid "Use --enable-stdcall-fixup to disable these warnings\n"
+msgstr ""
+
+#: emultempl/pe.em:1064 emultempl/pe.em:1091
+msgid "Use --disable-stdcall-fixup to disable these fixups\n"
+msgstr ""
+
+#: emultempl/pe.em:1110
+#, c-format
+msgid "%C: Cannot get section contents - auto-import exception\n"
+msgstr ""
+
+#: emultempl/pe.em:1150
+#, c-format
+msgid "Info: resolving %s by linking to %s (auto-import)\n"
+msgstr ""
+
+#: emultempl/pe.em:1157
+msgid ""
+"%P: warning: auto-importing has been activated without --enable-auto-import "
+"specified on the command line.\n"
+"This should work unless it involves constant data structures referencing "
+"symbols from auto-imported DLLs.\n"
+msgstr ""
+
+#: emultempl/pe.em:1164 emultempl/pe.em:1369 emultempl/pe.em:1575 ldcref.c:490
+#: ldcref.c:588 ldmain.c:1183 ldmisc.c:286 pe-dll.c:705 pe-dll.c:1253
+#: pe-dll.c:1348
+msgid "%B%F: could not read symbols: %E\n"
+msgstr ""
+
+#: emultempl/pe.em:1245
+msgid "%F%P: cannot perform PE operations on non PE output file '%B'.\n"
+msgstr ""
+
+#: emultempl/pe.em:1616
+#, c-format
+msgid "Errors encountered processing file %s\n"
+msgstr ""
+
+#: emultempl/pe.em:1639
+#, c-format
+msgid "Errors encountered processing file %s for interworking\n"
+msgstr ""
+
+#: emultempl/pe.em:1701 ldexp.c:542 ldlang.c:3323 ldlang.c:3358 ldlang.c:6804
+#: ldlang.c:6835 ldmain.c:1128
+msgid "%P%F: bfd_link_hash_lookup failed: %E\n"
+msgstr ""
+
+#: ldcref.c:168
+msgid "%X%P: bfd_hash_table_init of cref table failed: %E\n"
+msgstr ""
+
+#: ldcref.c:174
+msgid "%X%P: cref_hash_lookup failed: %E\n"
+msgstr ""
+
+#: ldcref.c:184
+msgid "%X%P: cref alloc failed: %E\n"
+msgstr ""
+
+#: ldcref.c:366
+#, c-format
+msgid ""
+"\n"
+"Cross Reference Table\n"
+"\n"
+msgstr ""
+
+#: ldcref.c:367
+msgid "Symbol"
+msgstr ""
+
+#: ldcref.c:375
+#, c-format
+msgid "File\n"
+msgstr ""
+
+#: ldcref.c:379
+#, c-format
+msgid "No symbols\n"
+msgstr ""
+
+#: ldcref.c:532
+msgid "%P: symbol `%T' missing from main hash table\n"
+msgstr ""
+
+#: ldcref.c:650 ldcref.c:657 ldmain.c:1217 ldmain.c:1224
+msgid "%B%F: could not read relocs: %E\n"
+msgstr ""
+
+#. We found a reloc for the symbol. The symbol is defined
+#. in OUTSECNAME. This reloc is from a section which is
+#. mapped into a section from which references to OUTSECNAME
+#. are prohibited. We must report an error.
+#: ldcref.c:684
+msgid "%X%C: prohibited cross reference from %s to `%T' in %s\n"
+msgstr ""
+
+#: ldctor.c:85
+msgid "%P%X: Different relocs used in set %s\n"
+msgstr ""
+
+#: ldctor.c:103
+msgid "%P%X: Different object file formats composing set %s\n"
+msgstr ""
+
+#: ldctor.c:281 ldctor.c:295
+msgid "%P%X: %s does not support reloc %s for set %s\n"
+msgstr ""
+
+#: ldctor.c:316
+msgid "%P%X: Unsupported size %d for set %s\n"
+msgstr ""
+
+#: ldctor.c:337
+msgid ""
+"\n"
+"Set Symbol\n"
+"\n"
+msgstr ""
+
+#: ldemul.c:265
+#, c-format
+msgid "%S SYSLIB ignored\n"
+msgstr ""
+
+#: ldemul.c:271
+#, c-format
+msgid "%S HLL ignored\n"
+msgstr ""
+
+#: ldemul.c:291
+msgid "%P: unrecognised emulation mode: %s\n"
+msgstr ""
+
+#: ldemul.c:292
+msgid "Supported emulations: "
+msgstr ""
+
+#: ldemul.c:334
+#, c-format
+msgid " no emulation specific options.\n"
+msgstr ""
+
+#: ldexp.c:313
+msgid "%P: warning: address of `%s' isn't multiple of maximum page size\n"
+msgstr ""
+
+#: ldexp.c:351
+#, c-format
+msgid "%F%S %% by zero\n"
+msgstr ""
+
+#: ldexp.c:359
+#, c-format
+msgid "%F%S / by zero\n"
+msgstr ""
+
+#: ldexp.c:552
+#, c-format
+msgid "%X%S: unresolvable symbol `%s' referenced in expression\n"
+msgstr ""
+
+#: ldexp.c:564
+#, c-format
+msgid "%F%S: undefined symbol `%s' referenced in expression\n"
+msgstr ""
+
+#: ldexp.c:585 ldexp.c:602 ldexp.c:629
+#, c-format
+msgid "%F%S: undefined section `%s' referenced in expression\n"
+msgstr ""
+
+#: ldexp.c:656 ldexp.c:670
+#, c-format
+msgid "%F%S: undefined MEMORY region `%s' referenced in expression\n"
+msgstr ""
+
+#: ldexp.c:681
+#, c-format
+msgid "%F%S: unknown constant `%s' referenced in expression\n"
+msgstr ""
+
+#: ldexp.c:743
+#, c-format
+msgid "%F%S can not PROVIDE assignment to location counter\n"
+msgstr ""
+
+#: ldexp.c:757
+#, c-format
+msgid "%F%S invalid assignment to location counter\n"
+msgstr ""
+
+#: ldexp.c:760
+#, c-format
+msgid "%F%S assignment to location counter invalid outside of SECTION\n"
+msgstr ""
+
+#: ldexp.c:773
+msgid "%F%S cannot move location counter backwards (from %V to %V)\n"
+msgstr ""
+
+#: ldexp.c:812
+msgid "%P%F:%s: hash creation failed\n"
+msgstr ""
+
+#: ldexp.c:1119 ldexp.c:1144 ldexp.c:1204
+#, c-format
+msgid "%F%S: nonconstant expression for %s\n"
+msgstr ""
+
+#: ldfile.c:141
+#, c-format
+msgid "attempt to open %s failed\n"
+msgstr ""
+
+#: ldfile.c:143
+#, c-format
+msgid "attempt to open %s succeeded\n"
+msgstr ""
+
+#: ldfile.c:149
+msgid "%F%P: invalid BFD target `%s'\n"
+msgstr ""
+
+#: ldfile.c:266 ldfile.c:295
+msgid "%P: skipping incompatible %s when searching for %s\n"
+msgstr ""
+
+#: ldfile.c:279
+msgid "%F%P: attempted static link of dynamic object `%s'\n"
+msgstr ""
+
+#: ldfile.c:332 ldmain.c:832
+msgid "%P%F: %s: plugin reported error claiming file\n"
+msgstr ""
+
+#: ldfile.c:447
+msgid "%P: cannot find %s (%s): %E\n"
+msgstr ""
+
+#: ldfile.c:450
+msgid "%P: cannot find %s: %E\n"
+msgstr ""
+
+#: ldfile.c:485
+msgid "%P: cannot find %s inside %s\n"
+msgstr ""
+
+#: ldfile.c:488
+msgid "%P: cannot find %s\n"
+msgstr ""
+
+#: ldfile.c:507 ldfile.c:525
+#, c-format
+msgid "cannot find script file %s\n"
+msgstr ""
+
+#: ldfile.c:509 ldfile.c:527
+#, c-format
+msgid "opened script file %s\n"
+msgstr ""
+
+#: ldfile.c:657
+msgid "%P%F: cannot open linker script file %s: %E\n"
+msgstr ""
+
+#: ldfile.c:722
+msgid "%P%F: cannot represent machine `%s'\n"
+msgstr ""
+
+#: ldlang.c:1160 ldlang.c:1202 ldlang.c:3048
+msgid "%P%F: can not create hash table: %E\n"
+msgstr ""
+
+#: ldlang.c:1253
+msgid "%P:%S: warning: redeclaration of memory region `%s'\n"
+msgstr ""
+
+#: ldlang.c:1259
+msgid "%P:%S: warning: memory region `%s' not declared\n"
+msgstr ""
+
+#: ldlang.c:1293
+msgid "%F%P:%S: error: alias for default memory region\n"
+msgstr ""
+
+#: ldlang.c:1304
+msgid "%F%P:%S: error: redefinition of memory region alias `%s'\n"
+msgstr ""
+
+#: ldlang.c:1311
+msgid "%F%P:%S: error: memory region `%s' for alias `%s' does not exist\n"
+msgstr ""
+
+#: ldlang.c:1363 ldlang.c:1402
+msgid "%P%F: failed creating section `%s': %E\n"
+msgstr ""
+
+#: ldlang.c:1958
+#, c-format
+msgid ""
+"\n"
+"Discarded input sections\n"
+"\n"
+msgstr ""
+
+#: ldlang.c:1966
+msgid ""
+"\n"
+"Memory Configuration\n"
+"\n"
+msgstr ""
+
+#: ldlang.c:1968
+msgid "Name"
+msgstr ""
+
+#: ldlang.c:1968
+msgid "Origin"
+msgstr ""
+
+#: ldlang.c:1968
+msgid "Length"
+msgstr ""
+
+#: ldlang.c:1968
+msgid "Attributes"
+msgstr ""
+
+#: ldlang.c:2008
+#, c-format
+msgid ""
+"\n"
+"Linker script and memory map\n"
+"\n"
+msgstr ""
+
+#: ldlang.c:2074
+msgid "%P%F: Illegal use of `%s' section\n"
+msgstr ""
+
+#: ldlang.c:2083
+msgid "%P%F: output format %s cannot represent section called %s\n"
+msgstr ""
+
+#: ldlang.c:2636
+msgid "%B: file not recognized: %E\n"
+msgstr ""
+
+#: ldlang.c:2637
+msgid "%B: matching formats:"
+msgstr ""
+
+#: ldlang.c:2644
+msgid "%F%B: file not recognized: %E\n"
+msgstr ""
+
+#: ldlang.c:2715
+msgid "%F%B: member %B in archive is not an object\n"
+msgstr ""
+
+#: ldlang.c:2730 ldlang.c:2744
+msgid "%F%B: could not read symbols: %E\n"
+msgstr ""
+
+#: ldlang.c:3018
+msgid ""
+"%P: warning: could not find any targets that match endianness requirement\n"
+msgstr ""
+
+#: ldlang.c:3032
+msgid "%P%F: target %s not found\n"
+msgstr ""
+
+#: ldlang.c:3034
+msgid "%P%F: cannot open output file %s: %E\n"
+msgstr ""
+
+#: ldlang.c:3040
+msgid "%P%F:%s: can not make object file: %E\n"
+msgstr ""
+
+#: ldlang.c:3044
+msgid "%P%F:%s: can not set architecture: %E\n"
+msgstr ""
+
+#: ldlang.c:3185
+msgid "%P: warning: %s contains output sections; did you forget -T?\n"
+msgstr ""
+
+#: ldlang.c:3215
+msgid "%P%F: bfd_hash_lookup failed creating symbol %s\n"
+msgstr ""
+
+#: ldlang.c:3233
+msgid "%P%F: bfd_hash_allocate failed creating symbol %s\n"
+msgstr ""
+
+#: ldlang.c:3688
+msgid "%F%P: %s not found for insert\n"
+msgstr ""
+
+#: ldlang.c:3903
+msgid " load address 0x%V"
+msgstr ""
+
+#: ldlang.c:4179
+msgid "%W (size before relaxing)\n"
+msgstr ""
+
+#: ldlang.c:4270
+#, c-format
+msgid "Address of section %s set to "
+msgstr ""
+
+#: ldlang.c:4423
+#, c-format
+msgid "Fail with %d\n"
+msgstr ""
+
+#: ldlang.c:4710
+msgid ""
+"%X%P: section %s loaded at [%V,%V] overlaps section %s loaded at [%V,%V]\n"
+msgstr ""
+
+#: ldlang.c:4726
+msgid "%X%P: region `%s' overflowed by %ld bytes\n"
+msgstr ""
+
+#: ldlang.c:4749
+msgid "%X%P: address 0x%v of %B section `%s' is not within region `%s'\n"
+msgstr ""
+
+#: ldlang.c:4760
+msgid "%X%P: %B section `%s' will not fit in region `%s'\n"
+msgstr ""
+
+#: ldlang.c:4816
+#, c-format
+msgid ""
+"%F%S: non constant or forward reference address expression for section %s\n"
+msgstr ""
+
+#: ldlang.c:4841
+msgid "%P%X: Internal error on COFF shared library section %s\n"
+msgstr ""
+
+#: ldlang.c:4900
+msgid "%P%F: error: no memory region specified for loadable section `%s'\n"
+msgstr ""
+
+#: ldlang.c:4905
+msgid "%P: warning: no memory region specified for loadable section `%s'\n"
+msgstr ""
+
+#: ldlang.c:4927
+msgid "%P: warning: changing start of section %s by %lu bytes\n"
+msgstr ""
+
+#: ldlang.c:5004
+msgid "%P: warning: dot moved backwards before `%s'\n"
+msgstr ""
+
+#: ldlang.c:5170
+msgid "%P%F: can't relax section: %E\n"
+msgstr ""
+
+#: ldlang.c:5497
+msgid "%F%P: invalid data statement\n"
+msgstr ""
+
+#: ldlang.c:5530
+msgid "%F%P: invalid reloc statement\n"
+msgstr ""
+
+#: ldlang.c:5648
+msgid "%P%F: gc-sections requires either an entry or an undefined symbol\n"
+msgstr ""
+
+#: ldlang.c:5673
+msgid "%P%F:%s: can't set start address\n"
+msgstr ""
+
+#: ldlang.c:5686 ldlang.c:5705
+msgid "%P%F: can't set start address\n"
+msgstr ""
+
+#: ldlang.c:5698
+msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n"
+msgstr ""
+
+#: ldlang.c:5710
+msgid "%P: warning: cannot find entry symbol %s; not setting start address\n"
+msgstr ""
+
+#: ldlang.c:5760
+msgid ""
+"%P%F: Relocatable linking with relocations from format %s (%B) to format %s "
+"(%B) is not supported\n"
+msgstr ""
+
+#: ldlang.c:5770
+msgid ""
+"%P%X: %s architecture of input file `%B' is incompatible with %s output\n"
+msgstr ""
+
+#: ldlang.c:5792
+msgid "%P%X: failed to merge target specific data of file %B\n"
+msgstr ""
+
+#: ldlang.c:5863
+msgid "%P%F: Could not define common symbol `%T': %E\n"
+msgstr ""
+
+#: ldlang.c:5875
+msgid ""
+"\n"
+"Allocating common symbols\n"
+msgstr ""
+
+#: ldlang.c:5876
+msgid ""
+"Common symbol size file\n"
+"\n"
+msgstr ""
+
+#: ldlang.c:6022
+msgid "%P%F: invalid syntax in flags\n"
+msgstr ""
+
+#: ldlang.c:6415
+msgid "%P%F: Failed to create hash table\n"
+msgstr ""
+
+#: ldlang.c:6430
+msgid "%P%F: %s: plugin reported error after all symbols read\n"
+msgstr ""
+
+#: ldlang.c:6717
+msgid "%P%F: multiple STARTUP files\n"
+msgstr ""
+
+#: ldlang.c:6765
+msgid "%X%P:%S: section has both a load address and a load region\n"
+msgstr ""
+
+#: ldlang.c:6950
+msgid ""
+"%X%P:%S: PHDRS and FILEHDR are not supported when prior PT_LOAD headers lack "
+"them\n"
+msgstr ""
+
+#: ldlang.c:7022
+msgid "%F%P: no sections assigned to phdrs\n"
+msgstr ""
+
+#: ldlang.c:7060
+msgid "%F%P: bfd_record_phdr failed: %E\n"
+msgstr ""
+
+#: ldlang.c:7080
+msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n"
+msgstr ""
+
+#: ldlang.c:7481
+msgid "%X%P: unknown language `%s' in version information\n"
+msgstr ""
+
+#: ldlang.c:7626
+msgid ""
+"%X%P: anonymous version tag cannot be combined with other version tags\n"
+msgstr ""
+
+#: ldlang.c:7635
+msgid "%X%P: duplicate version tag `%s'\n"
+msgstr ""
+
+#: ldlang.c:7656 ldlang.c:7665 ldlang.c:7683 ldlang.c:7693
+msgid "%X%P: duplicate expression `%s' in version information\n"
+msgstr ""
+
+#: ldlang.c:7733
+msgid "%X%P: unable to find version dependency `%s'\n"
+msgstr ""
+
+#: ldlang.c:7756
+msgid "%X%P: unable to read .exports section contents\n"
+msgstr ""
+
+#: ldmain.c:239
+msgid "%X%P: can't set BFD default target to `%s': %E\n"
+msgstr ""
+
+#: ldmain.c:307
+msgid "%P%F: -r and -shared may not be used together\n"
+msgstr ""
+
+#: ldmain.c:350
+msgid "%P%F: -F may not be used without -shared\n"
+msgstr ""
+
+#: ldmain.c:352
+msgid "%P%F: -f may not be used without -shared\n"
+msgstr ""
+
+#: ldmain.c:400
+msgid "using external linker script:"
+msgstr ""
+
+#: ldmain.c:402
+msgid "using internal linker script:"
+msgstr ""
+
+#: ldmain.c:436
+msgid "%P%F: no input files\n"
+msgstr ""
+
+#: ldmain.c:440
+msgid "%P: mode %s\n"
+msgstr ""
+
+#: ldmain.c:456
+msgid "%P%F: cannot open map file %s: %E\n"
+msgstr ""
+
+#: ldmain.c:485
+msgid "%P: %s: error in plugin cleanup (ignored)\n"
+msgstr ""
+
+#: ldmain.c:494
+msgid "%P: link errors found, deleting executable `%s'\n"
+msgstr ""
+
+#: ldmain.c:503
+msgid "%F%B: final close failed: %E\n"
+msgstr ""
+
+#: ldmain.c:529
+msgid "%X%P: unable to open for source of copy `%s'\n"
+msgstr ""
+
+#: ldmain.c:532
+msgid "%X%P: unable to open for destination of copy `%s'\n"
+msgstr ""
+
+#: ldmain.c:539
+msgid "%P: Error writing file `%s'\n"
+msgstr ""
+
+#: ldmain.c:544 pe-dll.c:1729
+#, c-format
+msgid "%P: Error closing file `%s'\n"
+msgstr ""
+
+#: ldmain.c:560
+#, c-format
+msgid "%s: total time in link: %ld.%06ld\n"
+msgstr ""
+
+#: ldmain.c:563
+#, c-format
+msgid "%s: data size %ld\n"
+msgstr ""
+
+#: ldmain.c:646
+msgid "%P%F: missing argument to -m\n"
+msgstr ""
+
+#: ldmain.c:694 ldmain.c:714 ldmain.c:746 plugin.c:772
+msgid "%P%F: bfd_hash_table_init failed: %E\n"
+msgstr ""
+
+#: ldmain.c:698 ldmain.c:718
+msgid "%P%F: bfd_hash_lookup failed: %E\n"
+msgstr ""
+
+#: ldmain.c:732
+msgid "%X%P: error: duplicate retain-symbols-file\n"
+msgstr ""
+
+#: ldmain.c:776
+msgid "%P%F: bfd_hash_lookup for insertion failed: %E\n"
+msgstr ""
+
+#: ldmain.c:781
+msgid "%P: `-retain-symbols-file' overrides `-s' and `-S'\n"
+msgstr ""
+
+#: ldmain.c:895
+#, c-format
+msgid ""
+"Archive member included because of file (symbol)\n"
+"\n"
+msgstr ""
+
+#: ldmain.c:975
+msgid "%X%C: multiple definition of `%T'\n"
+msgstr ""
+
+#: ldmain.c:978
+msgid "%D: first defined here\n"
+msgstr ""
+
+#: ldmain.c:982
+msgid "%P: Disabling relaxation: it will not work with multiple definitions\n"
+msgstr ""
+
+#: ldmain.c:1012
+msgid "%B: warning: definition of `%T' overriding common\n"
+msgstr ""
+
+#: ldmain.c:1015
+msgid "%B: warning: common is here\n"
+msgstr ""
+
+#: ldmain.c:1022
+msgid "%B: warning: common of `%T' overridden by definition\n"
+msgstr ""
+
+#: ldmain.c:1025
+msgid "%B: warning: defined here\n"
+msgstr ""
+
+#: ldmain.c:1032
+msgid "%B: warning: common of `%T' overridden by larger common\n"
+msgstr ""
+
+#: ldmain.c:1035
+msgid "%B: warning: larger common is here\n"
+msgstr ""
+
+#: ldmain.c:1039
+msgid "%B: warning: common of `%T' overriding smaller common\n"
+msgstr ""
+
+#: ldmain.c:1042
+msgid "%B: warning: smaller common is here\n"
+msgstr ""
+
+#: ldmain.c:1046
+msgid "%B: warning: multiple common of `%T'\n"
+msgstr ""
+
+#: ldmain.c:1048
+msgid "%B: warning: previous common is here\n"
+msgstr ""
+
+#: ldmain.c:1068 ldmain.c:1106
+msgid "%P: warning: global constructor %s used\n"
+msgstr ""
+
+#: ldmain.c:1116
+msgid "%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"
+msgstr ""
+
+#. We found a reloc for the symbol we are looking for.
+#: ldmain.c:1170 ldmain.c:1172 ldmain.c:1174 ldmain.c:1192 ldmain.c:1237
+msgid "warning: "
+msgstr ""
+
+#: ldmain.c:1273
+msgid "%F%P: bfd_hash_table_init failed: %E\n"
+msgstr ""
+
+#: ldmain.c:1280
+msgid "%F%P: bfd_hash_lookup failed: %E\n"
+msgstr ""
+
+#: ldmain.c:1301
+msgid "%X%C: undefined reference to `%T'\n"
+msgstr ""
+
+#: ldmain.c:1304
+msgid "%C: warning: undefined reference to `%T'\n"
+msgstr ""
+
+#: ldmain.c:1310
+msgid "%X%D: more undefined references to `%T' follow\n"
+msgstr ""
+
+#: ldmain.c:1313
+msgid "%D: warning: more undefined references to `%T' follow\n"
+msgstr ""
+
+#: ldmain.c:1324
+msgid "%X%B: undefined reference to `%T'\n"
+msgstr ""
+
+#: ldmain.c:1327
+msgid "%B: warning: undefined reference to `%T'\n"
+msgstr ""
+
+#: ldmain.c:1333
+msgid "%X%B: more undefined references to `%T' follow\n"
+msgstr ""
+
+#: ldmain.c:1336
+msgid "%B: warning: more undefined references to `%T' follow\n"
+msgstr ""
+
+#: ldmain.c:1375
+msgid " additional relocation overflows omitted from the output\n"
+msgstr ""
+
+#: ldmain.c:1388
+msgid " relocation truncated to fit: %s against undefined symbol `%T'"
+msgstr ""
+
+#: ldmain.c:1393
+msgid ""
+" relocation truncated to fit: %s against symbol `%T' defined in %A section "
+"in %B"
+msgstr ""
+
+#: ldmain.c:1405
+msgid " relocation truncated to fit: %s against `%T'"
+msgstr ""
+
+#: ldmain.c:1422
+#, c-format
+msgid "%X%C: dangerous relocation: %s\n"
+msgstr ""
+
+#: ldmain.c:1437
+msgid "%X%C: reloc refers to symbol `%T' which is not being output\n"
+msgstr ""
+
+#: ldmisc.c:149
+#, c-format
+msgid "no symbol"
+msgstr ""
+
+#: ldmisc.c:246
+#, c-format
+msgid "built in linker script:%u"
+msgstr ""
+
+#: ldmisc.c:324
+msgid "%B: In function `%T':\n"
+msgstr ""
+
+#: ldmisc.c:451
+msgid "%F%P: internal error %s %d\n"
+msgstr ""
+
+#: ldmisc.c:500
+msgid "%P: internal error: aborting at %s line %d in %s\n"
+msgstr ""
+
+#: ldmisc.c:503
+msgid "%P: internal error: aborting at %s line %d\n"
+msgstr ""
+
+#: ldmisc.c:505
+msgid "%P%F: please report this bug\n"
+msgstr ""
+
+#. Output for noisy == 2 is intended to follow the GNU standards.
+#: ldver.c:39
+#, c-format
+msgid "GNU ld %s\n"
+msgstr ""
+
+#: ldver.c:43
+#, c-format
+msgid "Copyright 2010 Free Software Foundation, Inc.\n"
+msgstr ""
+
+#: ldver.c:44
+#, c-format
+msgid ""
+"This program is free software; you may redistribute it under the terms of\n"
+"the GNU General Public License version 3 or (at your option) a later "
+"version.\n"
+"This program has absolutely no warranty.\n"
+msgstr ""
+
+#: ldver.c:54
+#, c-format
+msgid " Supported emulations:\n"
+msgstr ""
+
+#: ldwrite.c:62 ldwrite.c:207
+msgid "%P%F: bfd_new_link_order failed\n"
+msgstr ""
+
+#: ldwrite.c:365
+msgid "%F%P: cannot create split section name for %s\n"
+msgstr ""
+
+#: ldwrite.c:377
+msgid "%F%P: clone section failed: %E\n"
+msgstr ""
+
+#: ldwrite.c:418
+#, c-format
+msgid "%8x something else\n"
+msgstr ""
+
+#: ldwrite.c:588
+msgid "%F%P: final link failed: %E\n"
+msgstr ""
+
+#: lexsup.c:219 lexsup.c:368
+msgid "KEYWORD"
+msgstr ""
+
+#: lexsup.c:219
+msgid "Shared library control for HP/UX compatibility"
+msgstr ""
+
+#: lexsup.c:222
+msgid "ARCH"
+msgstr ""
+
+#: lexsup.c:222
+msgid "Set architecture"
+msgstr ""
+
+#: lexsup.c:224 lexsup.c:487
+msgid "TARGET"
+msgstr ""
+
+#: lexsup.c:224
+msgid "Specify target for following input files"
+msgstr ""
+
+#: lexsup.c:227 lexsup.c:278 lexsup.c:296 lexsup.c:309 lexsup.c:311
+#: lexsup.c:441 lexsup.c:501 lexsup.c:563 lexsup.c:576
+msgid "FILE"
+msgstr ""
+
+#: lexsup.c:227
+msgid "Read MRI format linker script"
+msgstr ""
+
+#: lexsup.c:229
+msgid "Force common symbols to be defined"
+msgstr ""
+
+#: lexsup.c:233 lexsup.c:545 lexsup.c:547 lexsup.c:549 lexsup.c:551
+msgid "ADDRESS"
+msgstr ""
+
+#: lexsup.c:233
+msgid "Set start address"
+msgstr ""
+
+#: lexsup.c:235
+msgid "Export all dynamic symbols"
+msgstr ""
+
+#: lexsup.c:237
+msgid "Undo the effect of --export-dynamic"
+msgstr ""
+
+#: lexsup.c:239
+msgid "Link big-endian objects"
+msgstr ""
+
+#: lexsup.c:241
+msgid "Link little-endian objects"
+msgstr ""
+
+#: lexsup.c:243 lexsup.c:246
+msgid "SHLIB"
+msgstr ""
+
+#: lexsup.c:243
+msgid "Auxiliary filter for shared object symbol table"
+msgstr ""
+
+#: lexsup.c:246
+msgid "Filter for shared object symbol table"
+msgstr ""
+
+#: lexsup.c:249
+msgid "Ignored"
+msgstr ""
+
+#: lexsup.c:251
+msgid "SIZE"
+msgstr ""
+
+#: lexsup.c:251
+msgid "Small data size (if no size, same as --shared)"
+msgstr ""
+
+#: lexsup.c:254
+msgid "FILENAME"
+msgstr ""
+
+#: lexsup.c:254
+msgid "Set internal name of shared library"
+msgstr ""
+
+#: lexsup.c:256
+msgid "PROGRAM"
+msgstr ""
+
+#: lexsup.c:256
+msgid "Set PROGRAM as the dynamic linker to use"
+msgstr ""
+
+#: lexsup.c:259
+msgid "LIBNAME"
+msgstr ""
+
+#: lexsup.c:259
+msgid "Search for library LIBNAME"
+msgstr ""
+
+#: lexsup.c:261
+msgid "DIRECTORY"
+msgstr ""
+
+#: lexsup.c:261
+msgid "Add DIRECTORY to library search path"
+msgstr ""
+
+#: lexsup.c:264
+msgid "Override the default sysroot location"
+msgstr ""
+
+#: lexsup.c:266
+msgid "EMULATION"
+msgstr ""
+
+#: lexsup.c:266
+msgid "Set emulation"
+msgstr ""
+
+#: lexsup.c:268
+msgid "Print map file on standard output"
+msgstr ""
+
+#: lexsup.c:270
+msgid "Do not page align data"
+msgstr ""
+
+#: lexsup.c:272
+msgid "Do not page align data, do not make text readonly"
+msgstr ""
+
+#: lexsup.c:275
+msgid "Page align data, make text readonly"
+msgstr ""
+
+#: lexsup.c:278
+msgid "Set output file name"
+msgstr ""
+
+#: lexsup.c:280
+msgid "Optimize output file"
+msgstr ""
+
+#: lexsup.c:283
+msgid "PLUGIN"
+msgstr ""
+
+#: lexsup.c:283
+msgid "Load named plugin"
+msgstr ""
+
+#: lexsup.c:285
+msgid "ARG"
+msgstr ""
+
+#: lexsup.c:285
+msgid "Send arg to last-loaded plugin"
+msgstr ""
+
+#: lexsup.c:288
+msgid "Ignored for SVR4 compatibility"
+msgstr ""
+
+#: lexsup.c:292
+msgid "Generate relocatable output"
+msgstr ""
+
+#: lexsup.c:296
+msgid "Just link symbols (if directory, same as --rpath)"
+msgstr ""
+
+#: lexsup.c:299
+msgid "Strip all symbols"
+msgstr ""
+
+#: lexsup.c:301
+msgid "Strip debugging symbols"
+msgstr ""
+
+#: lexsup.c:303
+msgid "Strip symbols in discarded sections"
+msgstr ""
+
+#: lexsup.c:305
+msgid "Do not strip symbols in discarded sections"
+msgstr ""
+
+#: lexsup.c:307
+msgid "Trace file opens"
+msgstr ""
+
+#: lexsup.c:309
+msgid "Read linker script"
+msgstr ""
+
+#: lexsup.c:311
+msgid "Read default linker script"
+msgstr ""
+
+#: lexsup.c:315 lexsup.c:333 lexsup.c:418 lexsup.c:439 lexsup.c:538
+#: lexsup.c:566 lexsup.c:605
+msgid "SYMBOL"
+msgstr ""
+
+#: lexsup.c:315
+msgid "Start with undefined reference to SYMBOL"
+msgstr ""
+
+#: lexsup.c:318
+msgid "[=SECTION]"
+msgstr ""
+
+#: lexsup.c:319
+msgid "Don't merge input [SECTION | orphan] sections"
+msgstr ""
+
+#: lexsup.c:321
+msgid "Build global constructor/destructor tables"
+msgstr ""
+
+#: lexsup.c:323
+msgid "Print version information"
+msgstr ""
+
+#: lexsup.c:325
+msgid "Print version and emulation information"
+msgstr ""
+
+#: lexsup.c:327
+msgid "Discard all local symbols"
+msgstr ""
+
+#: lexsup.c:329
+msgid "Discard temporary local symbols (default)"
+msgstr ""
+
+#: lexsup.c:331
+msgid "Don't discard any local symbols"
+msgstr ""
+
+#: lexsup.c:333
+msgid "Trace mentions of SYMBOL"
+msgstr ""
+
+#: lexsup.c:335 lexsup.c:503 lexsup.c:505
+msgid "PATH"
+msgstr ""
+
+#: lexsup.c:335
+msgid "Default search path for Solaris compatibility"
+msgstr ""
+
+#: lexsup.c:338
+msgid "Start a group"
+msgstr ""
+
+#: lexsup.c:340
+msgid "End a group"
+msgstr ""
+
+#: lexsup.c:344
+msgid "Accept input files whose architecture cannot be determined"
+msgstr ""
+
+#: lexsup.c:348
+msgid "Reject input files whose architecture is unknown"
+msgstr ""
+
+#: lexsup.c:361
+msgid "Only set DT_NEEDED for following dynamic libs if used"
+msgstr ""
+
+#: lexsup.c:364
+msgid ""
+"Always set DT_NEEDED for dynamic libraries mentioned on\n"
+" the command line"
+msgstr ""
+
+#: lexsup.c:368
+msgid "Ignored for SunOS compatibility"
+msgstr ""
+
+#: lexsup.c:370
+msgid "Link against shared libraries"
+msgstr ""
+
+#: lexsup.c:376
+msgid "Do not link against shared libraries"
+msgstr ""
+
+#: lexsup.c:384
+msgid "Bind global references locally"
+msgstr ""
+
+#: lexsup.c:386
+msgid "Bind global function references locally"
+msgstr ""
+
+#: lexsup.c:388
+msgid "Check section addresses for overlaps (default)"
+msgstr ""
+
+#: lexsup.c:391
+msgid "Do not check section addresses for overlaps"
+msgstr ""
+
+#: lexsup.c:395
+msgid "Copy DT_NEEDED links mentioned inside DSOs that follow"
+msgstr ""
+
+#: lexsup.c:399
+msgid "Do not copy DT_NEEDED links mentioned inside DSOs that follow"
+msgstr ""
+
+#: lexsup.c:403
+msgid "Output cross reference table"
+msgstr ""
+
+#: lexsup.c:405
+msgid "SYMBOL=EXPRESSION"
+msgstr ""
+
+#: lexsup.c:405
+msgid "Define a symbol"
+msgstr ""
+
+#: lexsup.c:407
+msgid "[=STYLE]"
+msgstr ""
+
+#: lexsup.c:407
+msgid "Demangle symbol names [using STYLE]"
+msgstr ""
+
+#: lexsup.c:410
+msgid "Generate embedded relocs"
+msgstr ""
+
+#: lexsup.c:412
+msgid "Treat warnings as errors"
+msgstr ""
+
+#: lexsup.c:415
+msgid "Do not treat warnings as errors (default)"
+msgstr ""
+
+#: lexsup.c:418
+msgid "Call SYMBOL at unload-time"
+msgstr ""
+
+#: lexsup.c:420
+msgid "Force generation of file with .exe suffix"
+msgstr ""
+
+#: lexsup.c:422
+msgid "Remove unused sections (on some targets)"
+msgstr ""
+
+#: lexsup.c:425
+msgid "Don't remove unused sections (default)"
+msgstr ""
+
+#: lexsup.c:428
+msgid "List removed unused sections on stderr"
+msgstr ""
+
+#: lexsup.c:431
+msgid "Do not list removed unused sections"
+msgstr ""
+
+#: lexsup.c:434
+msgid "Set default hash table size close to <NUMBER>"
+msgstr ""
+
+#: lexsup.c:437
+msgid "Print option help"
+msgstr ""
+
+#: lexsup.c:439
+msgid "Call SYMBOL at load-time"
+msgstr ""
+
+#: lexsup.c:441
+msgid "Write a map file"
+msgstr ""
+
+#: lexsup.c:443
+msgid "Do not define Common storage"
+msgstr ""
+
+#: lexsup.c:445
+msgid "Do not demangle symbol names"
+msgstr ""
+
+#: lexsup.c:447
+msgid "Use less memory and more disk I/O"
+msgstr ""
+
+#: lexsup.c:449
+msgid "Do not allow unresolved references in object files"
+msgstr ""
+
+#: lexsup.c:452
+msgid "Allow unresolved references in shared libaries"
+msgstr ""
+
+#: lexsup.c:456
+msgid "Do not allow unresolved references in shared libs"
+msgstr ""
+
+#: lexsup.c:460
+msgid "Allow multiple definitions"
+msgstr ""
+
+#: lexsup.c:462
+msgid "Disallow undefined version"
+msgstr ""
+
+#: lexsup.c:464
+msgid "Create default symbol version"
+msgstr ""
+
+#: lexsup.c:467
+msgid "Create default symbol version for imported symbols"
+msgstr ""
+
+#: lexsup.c:470
+msgid "Don't warn about mismatched input files"
+msgstr ""
+
+#: lexsup.c:473
+msgid "Don't warn on finding an incompatible library"
+msgstr ""
+
+#: lexsup.c:476
+msgid "Turn off --whole-archive"
+msgstr ""
+
+#: lexsup.c:478
+msgid "Create an output file even if errors occur"
+msgstr ""
+
+#: lexsup.c:483
+msgid ""
+"Only use library directories specified on\n"
+" the command line"
+msgstr ""
+
+#: lexsup.c:487
+msgid "Specify target of output file"
+msgstr ""
+
+#: lexsup.c:490
+msgid "Ignored for Linux compatibility"
+msgstr ""
+
+#: lexsup.c:493
+msgid "Reduce memory overheads, possibly taking much longer"
+msgstr ""
+
+#: lexsup.c:496
+msgid "Reduce code size by using target specific optimizations"
+msgstr ""
+
+#: lexsup.c:498
+msgid "Do not use relaxation techniques to reduce code size"
+msgstr ""
+
+#: lexsup.c:501
+msgid "Keep only symbols listed in FILE"
+msgstr ""
+
+#: lexsup.c:503
+msgid "Set runtime shared library search path"
+msgstr ""
+
+#: lexsup.c:505
+msgid "Set link time shared library search path"
+msgstr ""
+
+#: lexsup.c:508
+msgid "Create a shared library"
+msgstr ""
+
+#: lexsup.c:512
+msgid "Create a position independent executable"
+msgstr ""
+
+#: lexsup.c:516
+msgid "[=ascending|descending]"
+msgstr ""
+
+#: lexsup.c:517
+msgid "Sort common symbols by alignment [in specified order]"
+msgstr ""
+
+#: lexsup.c:522
+msgid "name|alignment"
+msgstr ""
+
+#: lexsup.c:523
+msgid "Sort sections by name or maximum alignment"
+msgstr ""
+
+#: lexsup.c:525
+msgid "COUNT"
+msgstr ""
+
+#: lexsup.c:525
+msgid "How many tags to reserve in .dynamic section"
+msgstr ""
+
+#: lexsup.c:528
+msgid "[=SIZE]"
+msgstr ""
+
+#: lexsup.c:528
+msgid "Split output sections every SIZE octets"
+msgstr ""
+
+#: lexsup.c:531
+msgid "[=COUNT]"
+msgstr ""
+
+#: lexsup.c:531
+msgid "Split output sections every COUNT relocs"
+msgstr ""
+
+#: lexsup.c:534
+msgid "Print memory usage statistics"
+msgstr ""
+
+#: lexsup.c:536
+msgid "Display target specific options"
+msgstr ""
+
+#: lexsup.c:538
+msgid "Do task level linking"
+msgstr ""
+
+#: lexsup.c:540
+msgid "Use same format as native linker"
+msgstr ""
+
+#: lexsup.c:542
+msgid "SECTION=ADDRESS"
+msgstr ""
+
+#: lexsup.c:542
+msgid "Set address of named section"
+msgstr ""
+
+#: lexsup.c:545
+msgid "Set address of .bss section"
+msgstr ""
+
+#: lexsup.c:547
+msgid "Set address of .data section"
+msgstr ""
+
+#: lexsup.c:549
+msgid "Set address of .text section"
+msgstr ""
+
+#: lexsup.c:551
+msgid "Set address of text segment"
+msgstr ""
+
+#: lexsup.c:554
+msgid ""
+"How to handle unresolved symbols. <method> is:\n"
+" ignore-all, report-all, ignore-in-object-"
+"files,\n"
+" ignore-in-shared-libs"
+msgstr ""
+
+#: lexsup.c:559
+msgid "Output lots of information during link"
+msgstr ""
+
+#: lexsup.c:563
+msgid "Read version information script"
+msgstr ""
+
+#: lexsup.c:566
+msgid ""
+"Take export symbols list from .exports, using\n"
+" SYMBOL as the version."
+msgstr ""
+
+#: lexsup.c:570
+msgid "Add data symbols to dynamic list"
+msgstr ""
+
+#: lexsup.c:572
+msgid "Use C++ operator new/delete dynamic list"
+msgstr ""
+
+#: lexsup.c:574
+msgid "Use C++ typeinfo dynamic list"
+msgstr ""
+
+#: lexsup.c:576
+msgid "Read dynamic list"
+msgstr ""
+
+#: lexsup.c:578
+msgid "Warn about duplicate common symbols"
+msgstr ""
+
+#: lexsup.c:580
+msgid "Warn if global constructors/destructors are seen"
+msgstr ""
+
+#: lexsup.c:583
+msgid "Warn if the multiple GP values are used"
+msgstr ""
+
+#: lexsup.c:585
+msgid "Warn only once per undefined symbol"
+msgstr ""
+
+#: lexsup.c:587
+msgid "Warn if start of section changes due to alignment"
+msgstr ""
+
+#: lexsup.c:590
+msgid "Warn if shared object has DT_TEXTREL"
+msgstr ""
+
+#: lexsup.c:593
+msgid "Warn if an object has alternate ELF machine code"
+msgstr ""
+
+#: lexsup.c:597
+msgid "Report unresolved symbols as warnings"
+msgstr ""
+
+#: lexsup.c:600
+msgid "Report unresolved symbols as errors"
+msgstr ""
+
+#: lexsup.c:602
+msgid "Include all objects from following archives"
+msgstr ""
+
+#: lexsup.c:605
+msgid "Use wrapper functions for SYMBOL"
+msgstr ""
+
+#: lexsup.c:754
+msgid "%P: unrecognized option '%s'\n"
+msgstr ""
+
+#: lexsup.c:758
+msgid "%P%F: use the --help option for usage information\n"
+msgstr ""
+
+#: lexsup.c:776
+msgid "%P%F: unrecognized -a option `%s'\n"
+msgstr ""
+
+#: lexsup.c:789
+msgid "%P%F: unrecognized -assert option `%s'\n"
+msgstr ""
+
+#: lexsup.c:832
+msgid "%F%P: unknown demangling style `%s'"
+msgstr ""
+
+#: lexsup.c:898
+msgid "%P%F: invalid number `%s'\n"
+msgstr ""
+
+#: lexsup.c:996
+msgid "%P%F: bad --unresolved-symbols option: %s\n"
+msgstr ""
+
+#: lexsup.c:1059
+msgid "%P%F: bad -plugin option\n"
+msgstr ""
+
+#: lexsup.c:1063
+msgid "%P%F: bad -plugin-opt option\n"
+msgstr ""
+
+#. This can happen if the user put "-rpath,a" on the command
+#. line. (Or something similar. The comma is important).
+#. Getopt becomes confused and thinks that this is a -r option
+#. but it cannot parse the text after the -r so it refuses to
+#. increment the optind counter. Detect this case and issue
+#. an error message here. We cannot just make this a warning,
+#. increment optind, and continue because getopt is too confused
+#. and will seg-fault the next time around.
+#: lexsup.c:1080
+msgid "%P%F: bad -rpath option\n"
+msgstr ""
+
+#: lexsup.c:1194
+msgid "%P%F: -shared not supported\n"
+msgstr ""
+
+#: lexsup.c:1203
+msgid "%P%F: -pie not supported\n"
+msgstr ""
+
+#: lexsup.c:1211
+msgid "descending"
+msgstr ""
+
+#: lexsup.c:1213
+msgid "ascending"
+msgstr ""
+
+#: lexsup.c:1216
+msgid "%P%F: invalid common section sorting option: %s\n"
+msgstr ""
+
+#: lexsup.c:1220
+msgid "name"
+msgstr ""
+
+#: lexsup.c:1222
+msgid "alignment"
+msgstr ""
+
+#: lexsup.c:1225
+msgid "%P%F: invalid section sorting option: %s\n"
+msgstr ""
+
+#: lexsup.c:1259
+msgid "%P%F: invalid argument to option \"--section-start\"\n"
+msgstr ""
+
+#: lexsup.c:1266
+msgid "%P%F: missing argument(s) to option \"--section-start\"\n"
+msgstr ""
+
+#: lexsup.c:1490
+msgid "%P%F: group ended before it began (--help for usage)\n"
+msgstr ""
+
+#: lexsup.c:1518
+msgid "%P%X: --hash-size needs a numeric argument\n"
+msgstr ""
+
+#: lexsup.c:1547
+msgid "%P%F: %s: error loading plugin\n"
+msgstr ""
+
+#: lexsup.c:1578 lexsup.c:1591
+msgid "%P%F: invalid hex number `%s'\n"
+msgstr ""
+
+#: lexsup.c:1627
+#, c-format
+msgid "Usage: %s [options] file...\n"
+msgstr ""
+
+#: lexsup.c:1629
+#, c-format
+msgid "Options:\n"
+msgstr ""
+
+#: lexsup.c:1707
+#, c-format
+msgid " @FILE"
+msgstr ""
+
+#: lexsup.c:1710
+#, c-format
+msgid "Read options from FILE\n"
+msgstr ""
+
+#. Note: Various tools (such as libtool) depend upon the
+#. format of the listings below - do not change them.
+#: lexsup.c:1715
+#, c-format
+msgid "%s: supported targets:"
+msgstr ""
+
+#: lexsup.c:1723
+#, c-format
+msgid "%s: supported emulations: "
+msgstr ""
+
+#: lexsup.c:1728
+#, c-format
+msgid "%s: emulation specific options:\n"
+msgstr ""
+
+#: lexsup.c:1733
+#, c-format
+msgid "Report bugs to %s\n"
+msgstr ""
+
+#: mri.c:292
+msgid "%P%F: unknown format type %s\n"
+msgstr ""
+
+#: pe-dll.c:430
+#, c-format
+msgid "%XUnsupported PEI architecture: %s\n"
+msgstr ""
+
+#: pe-dll.c:788
+#, c-format
+msgid "%XCannot export %s: invalid export name\n"
+msgstr ""
+
+#: pe-dll.c:844
+#, c-format
+msgid "%XError, duplicate EXPORT with ordinals: %s (%d vs %d)\n"
+msgstr ""
+
+#: pe-dll.c:851
+#, c-format
+msgid "Warning, duplicate EXPORT: %s\n"
+msgstr ""
+
+#: pe-dll.c:938
+#, c-format
+msgid "%XCannot export %s: symbol not defined\n"
+msgstr ""
+
+#: pe-dll.c:944
+#, c-format
+msgid "%XCannot export %s: symbol wrong type (%d vs %d)\n"
+msgstr ""
+
+#: pe-dll.c:951
+#, c-format
+msgid "%XCannot export %s: symbol not found\n"
+msgstr ""
+
+#: pe-dll.c:1065
+#, c-format
+msgid "%XError, ordinal used twice: %d (%s vs %s)\n"
+msgstr ""
+
+#: pe-dll.c:1446
+#, c-format
+msgid "%XError: %d-bit reloc in dll\n"
+msgstr ""
+
+#: pe-dll.c:1574
+#, c-format
+msgid "%s: Can't open output def file %s\n"
+msgstr ""
+
+#: pe-dll.c:1725
+#, c-format
+msgid "; no contents available\n"
+msgstr ""
+
+#: pe-dll.c:2652
+msgid ""
+"%C: variable '%T' can't be auto-imported. Please read the documentation for "
+"ld's --enable-auto-import for details.\n"
+msgstr ""
+
+#: pe-dll.c:2682
+#, c-format
+msgid "%XCan't open .lib file: %s\n"
+msgstr ""
+
+#: pe-dll.c:2687
+#, c-format
+msgid "Creating library file: %s\n"
+msgstr ""
+
+#: pe-dll.c:2716
+#, c-format
+msgid "%Xbfd_openr %s: %E\n"
+msgstr ""
+
+#: pe-dll.c:2728
+#, c-format
+msgid "%X%s(%s): can't find member in non-archive file"
+msgstr ""
+
+#: pe-dll.c:2740
+#, c-format
+msgid "%X%s(%s): can't find member in archive"
+msgstr ""
+
+#: pe-dll.c:3177
+#, c-format
+msgid "%XError: can't use long section names on this arch\n"
+msgstr ""
+
+#: plugin.c:178 plugin.c:212
+msgid "<no plugin>"
+msgstr ""
+
+#: plugin.c:308
+msgid "%P%F: %s: non-ELF symbol in ELF BFD!"
+msgstr ""
+
+#: plugin.c:800
+msgid "%P%X: %s: hash table failure adding symbol %s"
+msgstr ""
+
+#: plugin.c:833
+msgid "%P%X: %s: can't find IR symbol '%s'"
+msgstr ""
+
+#: plugin.c:836
+msgid "%P%x: %s: bad IR symbol type %d"
+msgstr ""
diff --git a/binutils-2.21/ld/po/sv.gmo b/binutils-2.21/ld/po/sv.gmo
new file mode 100644
index 0000000..f7038a8
--- /dev/null
+++ b/binutils-2.21/ld/po/sv.gmo
Binary files differ
diff --git a/binutils-2.21/ld/po/sv.po b/binutils-2.21/ld/po/sv.po
new file mode 100644
index 0000000..4c17a25
--- /dev/null
+++ b/binutils-2.21/ld/po/sv.po
@@ -0,0 +1,1815 @@
+# Swedish messages for ld.
+# Copyright (C) 2001, 2002, 2004 Free Software Foundation, Inc.
+# Christian Rose <menthos@menthos.com>, 2001, 2002, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ld 2.14rel030712\n"
+"POT-Creation-Date: 2003-07-11 13:58+0930\n"
+"PO-Revision-Date: 2004-03-22 15:32+0100\n"
+"Last-Translator: Christian Rose <menthos@menthos.com>\n"
+"Language-Team: Swedish <sv@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: emultempl/armcoff.em:72
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code Stöd interaktion med gammal kod\n"
+
+#: emultempl/armcoff.em:73
+msgid " --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"
+msgstr ""
+" --thumb-entry=<sym> Ställ in ingångspunkten till att vara tumsymbolen\n"
+" <sym>\n"
+
+#: emultempl/armcoff.em:121
+#, c-format
+msgid "Errors encountered processing file %s"
+msgstr "Fel inträffade vid bearbetning av filen %s"
+
+#: emultempl/armcoff.em:188 emultempl/pe.em:1396
+msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"
+msgstr "%P: varning: \"--thumb-entry %s\" åsidosätter \"-e %s\"\n"
+
+#: emultempl/armcoff.em:193 emultempl/pe.em:1401
+msgid "%P: warning: connot find thumb start symbol %s\n"
+msgstr "%P: varning: kan inte hitta tumstartsymbol %s\n"
+
+#: emultempl/pe.em:300
+msgid " --base_file <basefile> Generate a base file for relocatable DLLs\n"
+msgstr ""
+" --base_file <basfil> Generera en basfil för\n"
+" omlokaliseringsbara DLL:er\n"
+
+#: emultempl/pe.em:301
+msgid " --dll Set image base to the default for DLLs\n"
+msgstr ""
+" --dll Ställ in bildbas till standard för\n"
+" DLL:er\n"
+
+#: emultempl/pe.em:302
+msgid " --file-alignment <size> Set file alignment\n"
+msgstr " --file-alignment <storlek> Ställ in filjustering\n"
+
+#: emultempl/pe.em:303
+msgid " --heap <size> Set initial size of the heap\n"
+msgstr " --heap <storlek> Ställ in initial storlek på högen\n"
+
+#: emultempl/pe.em:304
+msgid " --image-base <address> Set start address of the executable\n"
+msgstr " --image-base <adress> Ställ in startadressen för det körbara\n"
+
+#: emultempl/pe.em:305
+msgid " --major-image-version <number> Set version number of the executable\n"
+msgstr " --major-image-version <nummer> Ställ in versionsnummer för det körbara\n"
+
+#: emultempl/pe.em:306
+msgid " --major-os-version <number> Set minimum required OS version\n"
+msgstr " --major-os-version <nummer> Ställ in lägsta nödvändiga OS-version\n"
+
+#: emultempl/pe.em:307
+msgid " --major-subsystem-version <number> Set minimum required OS subsystem version\n"
+msgstr ""
+" --major-subsystem-version <nummer> Ställ in lägsta nödvändiga\n"
+" OS-undersystemsversion\n"
+
+#: emultempl/pe.em:308
+msgid " --minor-image-version <number> Set revision number of the executable\n"
+msgstr ""
+" --minor-image-version <nummer> Ställ in underrevisionsnummer för\n"
+" det körbara\n"
+
+#: emultempl/pe.em:309
+msgid " --minor-os-version <number> Set minimum required OS revision\n"
+msgstr " --minor-os-version <nummer> Ställ in lägsta nödvändiga OS-revision\n"
+
+#: emultempl/pe.em:310
+msgid " --minor-subsystem-version <number> Set minimum required OS subsystem revision\n"
+msgstr ""
+" --minor-subsystem-version <nummer> Ställ in lägsta nödvändiga\n"
+" OS-undersystemsrevision\n"
+
+#: emultempl/pe.em:311
+msgid " --section-alignment <size> Set section alignment\n"
+msgstr " --section-alignment <storlek> Ställ in sektionsjustering\n"
+
+#: emultempl/pe.em:312
+msgid " --stack <size> Set size of the initial stack\n"
+msgstr " --stack <storlek> Ställ in storlek på initiala stacken\n"
+
+#: emultempl/pe.em:313
+msgid " --subsystem <name>[:<version>] Set required OS subsystem [& version]\n"
+msgstr ""
+" --subsystem <namn>[:<version>] Ställ in nödvändigt OS-undersystem\n"
+" [och nödvändig version]\n"
+
+#: emultempl/pe.em:314
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code Stöd interaktion med gammal kod\n"
+
+#: emultempl/pe.em:315
+msgid " --thumb-entry=<symbol> Set the entry point to be Thumb <symbol>\n"
+msgstr ""
+" --thumb-entry=<symbol> Ställ in ingångspunkten till att\n"
+" vara tummen <symbol>\n"
+
+#: emultempl/pe.em:317
+msgid " --add-stdcall-alias Export symbols with and without @nn\n"
+msgstr " --add-stdcall-alias Exportera symboler med och utan @nn\n"
+
+#: emultempl/pe.em:318
+msgid " --disable-stdcall-fixup Don't link _sym to _sym@nn\n"
+msgstr " --disable-stdcall-fixup Länka inte _sym till _sym@nn\n"
+
+#: emultempl/pe.em:319
+msgid " --enable-stdcall-fixup Link _sym to _sym@nn without warnings\n"
+msgstr " --enable-stdcall-fixup Länka _sym till _sym@nn utan varningar\n"
+
+#: emultempl/pe.em:320
+msgid " --exclude-symbols sym,sym,... Exclude symbols from automatic export\n"
+msgstr ""
+" --exclude-symbols sym,sym,... Exkludera symboler från automatisk\n"
+" export\n"
+
+#: emultempl/pe.em:321
+msgid " --exclude-libs lib,lib,... Exclude libraries from automatic export\n"
+msgstr ""
+" --exclude-libs bibl,bibl,... Exkludera bibliotek från automatisk\n"
+" export\n"
+
+#: emultempl/pe.em:322
+msgid " --export-all-symbols Automatically export all globals to DLL\n"
+msgstr ""
+" --export-all-symbols Exportera automatiskt alla symboler\n"
+" till DLL\n"
+
+#: emultempl/pe.em:323
+msgid " --kill-at Remove @nn from exported symbols\n"
+msgstr " --kill-at Ta bort @nn från exporterade symboler\n"
+
+#: emultempl/pe.em:324
+msgid " --out-implib <file> Generate import library\n"
+msgstr " --out-implib <fil> Generera importbibliotek\n"
+
+#: emultempl/pe.em:325
+msgid " --output-def <file> Generate a .DEF file for the built DLL\n"
+msgstr " --output-def <fil> Generera en .DEF-fil för byggd DLL\n"
+
+#: emultempl/pe.em:326
+msgid " --warn-duplicate-exports Warn about duplicate exports.\n"
+msgstr " --warn-duplicate-exports Varna för dubbla exporter.\n"
+
+#: emultempl/pe.em:327
+msgid ""
+" --compat-implib Create backward compatible import libs;\n"
+" create __imp_<SYMBOL> as well.\n"
+msgstr ""
+" --compat-implib Skapa bakåtkompatibla importbibliotek;\n"
+" och skapa även __imp_<SYMBOL>.\n"
+
+#: emultempl/pe.em:329
+msgid ""
+" --enable-auto-image-base Automatically choose image base for DLLs\n"
+" unless user specifies one\n"
+msgstr ""
+" --enable-auto-image-base Välj automatiskt bildbas för DLL:er\n"
+" såvida inte användaren anger en\n"
+
+#: emultempl/pe.em:331
+msgid " --disable-auto-image-base Do not auto-choose image base. (default)\n"
+msgstr ""
+" --disable-auto-image-base Välj inte bildbas automatiskt\n"
+" (standard).\n"
+
+#: emultempl/pe.em:332
+msgid ""
+" --dll-search-prefix=<string> When linking dynamically to a dll without\n"
+" an importlib, use <string><basename>.dll\n"
+" in preference to lib<basename>.dll \n"
+msgstr ""
+" --dll-search-prefix=<sträng> Använd <sträng><basnamn>.dll istället\n"
+" för lib<basnamn>.dll vid dynamisk\n"
+" länkning utan ett importbibliotek\n"
+
+#: emultempl/pe.em:335
+msgid ""
+" --enable-auto-import Do sophistcated linking of _sym to\n"
+" __imp_sym for DATA references\n"
+msgstr ""
+" --enable-auto-import Utför sofistikerad länkning av _sym till\n"
+" __imp_sym för DATA-referenser\n"
+
+#: emultempl/pe.em:337
+msgid " --disable-auto-import Do not auto-import DATA items from DLLs\n"
+msgstr ""
+" --disable-auto-import Importera inte DATA-objekt från DLL:er\n"
+" automatiskt\n"
+
+#: emultempl/pe.em:338
+msgid ""
+" --enable-runtime-pseudo-reloc Work around auto-import limitations by\n"
+" adding pseudo-relocations resolved at\n"
+" runtime.\n"
+msgstr ""
+" --enable-runtime-pseudo-reloc Kringgå begränsningar i automatisk\n"
+" import genom att lägga till\n"
+" pseudoomlokaliseringar som löses under\n"
+" körtid.\n"
+
+#: emultempl/pe.em:341
+msgid ""
+" --disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations for\n"
+" auto-imported DATA.\n"
+msgstr ""
+" --disable-runtime-pseudo-reloc Lägg inte till pseudoomlokaliseringar\n"
+" för automatisk importerad DATA under\n"
+" körtid.\n"
+
+#: emultempl/pe.em:343
+msgid ""
+" --enable-extra-pe-debug Enable verbose debug output when building\n"
+" or linking to DLLs (esp. auto-import)\n"
+msgstr ""
+" --enable-extra-pe-debug Använd utförlig felsökningsutdata vid\n"
+" bygge av eller länkning till DLL:er\n"
+" (särskilt automatisk import)\n"
+
+#: emultempl/pe.em:412
+msgid "%P: warning: bad version number in -subsystem option\n"
+msgstr "%P: varning: felaktigt nummer i flaggan -subsystem\n"
+
+#: emultempl/pe.em:448
+msgid "%P%F: invalid subsystem type %s\n"
+msgstr "%P%F: ogiltig typ av undersystem %s\n"
+
+#: emultempl/pe.em:460
+msgid "%P%F: invalid hex number for PE parameter '%s'\n"
+msgstr "%P%F: ogiltigt hexadecimalt tal för PE-parametern \"%s\"\n"
+
+#: emultempl/pe.em:477
+msgid "%P%F: strange hex info for PE parameter '%s'\n"
+msgstr "%P%F: konstig hexadecimal information för PE-parametern \"%s\"\n"
+
+#: emultempl/pe.em:494
+#, c-format
+msgid "%s: Can't open base file %s\n"
+msgstr "%s: Kan inte öppna basfilen %s\n"
+
+#: emultempl/pe.em:707
+msgid "%P: warning, file alignment > section alignment.\n"
+msgstr "%P: varning, filjusteringen > sektionsjusteringen.\n"
+
+#: emultempl/pe.em:794 emultempl/pe.em:821
+#, c-format
+msgid "Warning: resolving %s by linking to %s\n"
+msgstr "Varning: löser upp %s genom att länka till %s\n"
+
+#: emultempl/pe.em:799 emultempl/pe.em:826
+msgid "Use --enable-stdcall-fixup to disable these warnings\n"
+msgstr "Använd --enable-stdcall-fixup för att stänga av dessa varningar\n"
+
+#: emultempl/pe.em:800 emultempl/pe.em:827
+msgid "Use --disable-stdcall-fixup to disable these fixups\n"
+msgstr "Använd --disable-stdcall-fixup för att stänga av dessa korrigeringar\n"
+
+#: emultempl/pe.em:846
+#, c-format
+msgid "%C: Cannot get section contents - auto-import exception\n"
+msgstr "%C: Kan inte få tag i sektionsinnehåll - undantag i automatisk import\n"
+
+#: emultempl/pe.em:883
+#, c-format
+msgid "Info: resolving %s by linking to %s (auto-import)\n"
+msgstr "Info: löser upp %s genom att länka till %s (automatisk import)\n"
+
+#: emultempl/pe.em:954
+msgid "%F%P: PE operations on non PE file.\n"
+msgstr "%F%P: PE-operationer på fil som inte är PE.\n"
+
+#: emultempl/pe.em:1188
+#, c-format
+msgid "Errors encountered processing file %s\n"
+msgstr "Fel uppstod vid behandling av filen %s\n"
+
+#: emultempl/pe.em:1211
+#, c-format
+msgid "Errors encountered processing file %s for interworking"
+msgstr "Fel uppstod vid behandling av filen %s för interaktion"
+
+#: emultempl/pe.em:1273 ldlang.c:1904 ldlang.c:4397 ldlang.c:4428
+#: ldmain.c:1122
+msgid "%P%F: bfd_link_hash_lookup failed: %E\n"
+msgstr "%P%F: bfd_link_hash_lookup misslyckades: %E\n"
+
+#: ldcref.c:153
+msgid "%X%P: bfd_hash_table_init of cref table failed: %E\n"
+msgstr "%X%P: bfd_hash_table_init av korsreferenstabellen misslyckades: %E\n"
+
+#: ldcref.c:159
+msgid "%X%P: cref_hash_lookup failed: %E\n"
+msgstr "%X%P: cref_hash_lookup misslyckades: %E\n"
+
+#: ldcref.c:225
+msgid ""
+"\n"
+"Cross Reference Table\n"
+"\n"
+msgstr ""
+"\n"
+"Korsreferenstabell\n"
+"\n"
+
+#: ldcref.c:226
+msgid "Symbol"
+msgstr "Symbol"
+
+#: ldcref.c:234
+msgid "File\n"
+msgstr "Fil\n"
+
+#: ldcref.c:238
+msgid "No symbols\n"
+msgstr "Inga symboler\n"
+
+#: ldcref.c:384
+msgid "%P: symbol `%T' missing from main hash table\n"
+msgstr "%P: symbolen \"%T\" saknas från hastabellen\n"
+
+#: ldcref.c:448
+msgid "%B%F: could not read symbols; %E\n"
+msgstr "%B%F: kunde inte läsa symboler; %E\n"
+
+#: ldcref.c:452 ldmain.c:1187 ldmain.c:1191
+msgid "%B%F: could not read symbols: %E\n"
+msgstr "%B%F: kunde inte läsa symboler: %E\n"
+
+#: ldcref.c:517 ldcref.c:524 ldmain.c:1234 ldmain.c:1241
+msgid "%B%F: could not read relocs: %E\n"
+msgstr "%B%F: kunde inte läsa omlokaliseringar: %E\n"
+
+#. We found a reloc for the symbol. The symbol is defined
+#. in OUTSECNAME. This reloc is from a section which is
+#. mapped into a section from which references to OUTSECNAME
+#. are prohibited. We must report an error.
+#: ldcref.c:543
+msgid "%X%C: prohibited cross reference from %s to `%T' in %s\n"
+msgstr "%X%C: förbjuden korsreferens från %s till \"%T\" i %s\n"
+
+#: ldctor.c:84
+msgid "%P%X: Different relocs used in set %s\n"
+msgstr "%P%X: Olika omlokaliseringar använda i gruppen %s\n"
+
+#: ldctor.c:102
+msgid "%P%X: Different object file formats composing set %s\n"
+msgstr "%P%X: Olika objektfilformat utgör gruppen %s\n"
+
+#: ldctor.c:281 ldctor.c:295
+msgid "%P%X: %s does not support reloc %s for set %s\n"
+msgstr "%P%X: %s stöder inte omlokaliseringen %s för gruppen %s\n"
+
+#: ldctor.c:316
+msgid "%P%X: Unsupported size %d for set %s\n"
+msgstr "%P%X: Storleken %d för gruppen %s stöds inte\n"
+
+#: ldctor.c:337
+msgid ""
+"\n"
+"Set Symbol\n"
+"\n"
+msgstr ""
+"\n"
+"Grupp Symbol\n"
+"\n"
+
+#: ldemul.c:247
+#, c-format
+msgid "%S SYSLIB ignored\n"
+msgstr "%S SYSLIB ignorerades\n"
+
+#: ldemul.c:254
+#, c-format
+msgid "%S HLL ignored\n"
+msgstr "%S HLL ignorerades\n"
+
+#: ldemul.c:275
+msgid "%P: unrecognised emulation mode: %s\n"
+msgstr "%P: okänt emuleringsläge: %s\n"
+
+#: ldemul.c:276
+msgid "Supported emulations: "
+msgstr "Emuleringar som stöds: "
+
+#: ldemul.c:320
+msgid " no emulation specific options.\n"
+msgstr " inga emuleringsspecifika flaggor.\n"
+
+#: ldexp.c:148
+msgid "%F%P: %s uses undefined section %s\n"
+msgstr "%F%P: %s använder odefinierad sektion %s\n"
+
+#: ldexp.c:150
+msgid "%F%P: %s forward reference of section %s\n"
+msgstr "%F%P: %s framåtreferens av sektionen %s\n"
+
+#: ldexp.c:355
+#, c-format
+msgid "%F%S %% by zero\n"
+msgstr "%F%S %% med noll\n"
+
+#: ldexp.c:362
+#, c-format
+msgid "%F%S / by zero\n"
+msgstr "%F%S / med noll\n"
+
+#: ldexp.c:533
+#, c-format
+msgid "%X%S: unresolvable symbol `%s' referenced in expression\n"
+msgstr "%X%S: oupplösningsbara symbolen \"%s\" refererades i uttrycket\n"
+
+#: ldexp.c:553
+#, c-format
+msgid "%F%S: undefined symbol `%s' referenced in expression\n"
+msgstr "%F%S: odefinierade symbolen \"%s\" refererades i uttrycket\n"
+
+#: ldexp.c:677
+#, c-format
+msgid "%F%S can not PROVIDE assignment to location counter\n"
+msgstr "%F%S kan inte TILLHANDAHÅLLA tilldelning till platsräknare\n"
+
+#: ldexp.c:687
+#, c-format
+msgid "%F%S invalid assignment to location counter\n"
+msgstr "%F%S ogiltig tilldelning till platsräknare\n"
+
+#: ldexp.c:691
+#, c-format
+msgid "%F%S assignment to location counter invalid outside of SECTION\n"
+msgstr "%F%S tilldelning till platsräknare som är ogiltig utanför SEKTION\n"
+
+#: ldexp.c:700
+msgid "%F%S cannot move location counter backwards (from %V to %V)\n"
+msgstr "%F%S kan inte flytta platsräknare bakåt (från %V till %V)\n"
+
+#: ldexp.c:727
+msgid "%P%F:%s: hash creation failed\n"
+msgstr "%P%F:%s: skapande av hash misslyckades\n"
+
+#: ldexp.c:1003 ldexp.c:1035
+#, c-format
+msgid "%F%S nonconstant expression for %s\n"
+msgstr "%F%S ickekonstant uttryck för %s\n"
+
+#: ldexp.c:1089
+#, c-format
+msgid "%F%S non constant expression for %s\n"
+msgstr "%F%S ickekonstant uttryck för %s\n"
+
+#: ldfile.c:144
+#, c-format
+msgid "attempt to open %s failed\n"
+msgstr "försök att öppna %s misslyckades\n"
+
+#: ldfile.c:146
+#, c-format
+msgid "attempt to open %s succeeded\n"
+msgstr "försök att öppna %s lyckades\n"
+
+#: ldfile.c:152
+msgid "%F%P: invalid BFD target `%s'\n"
+msgstr "%F%P: ogiltigt BFD-mål \"%s\"\n"
+
+#: ldfile.c:258 ldfile.c:275
+msgid "%P: skipping incompatible %s when searching for %s\n"
+msgstr "%P: hoppar över inkompatibel %s vid sökning av %s\n"
+
+#: ldfile.c:377
+msgid "%F%P: cannot open %s for %s: %E\n"
+msgstr "%F%P: kan inte öppna %s för %s: %E\n"
+
+#: ldfile.c:380
+msgid "%F%P: cannot open %s: %E\n"
+msgstr "%F%P: kan inte öppna %s: %E\n"
+
+#: ldfile.c:410
+msgid "%F%P: cannot find %s inside %s\n"
+msgstr "%F%P: kan inte hitta %s inuti %s\n"
+
+#: ldfile.c:413
+msgid "%F%P: cannot find %s\n"
+msgstr "%F%P: kan inte hitta %s\n"
+
+#: ldfile.c:430 ldfile.c:446
+#, c-format
+msgid "cannot find script file %s\n"
+msgstr "kan inte hitta skriptfilen %s\n"
+
+#: ldfile.c:432 ldfile.c:448
+#, c-format
+msgid "opened script file %s\n"
+msgstr "öppnade skriptfilen %s\n"
+
+#: ldfile.c:492
+msgid "%P%F: cannot open linker script file %s: %E\n"
+msgstr "%P%F: kan inte öppna länkskriptfilen %s: %E\n"
+
+#: ldfile.c:529
+msgid "%P%F: unknown architecture: %s\n"
+msgstr "%P%F: okänd arkitektur: %s\n"
+
+#: ldfile.c:543
+msgid "%P%F: target architecture respecified\n"
+msgstr "%P%F: målarkitekturen specifierades om\n"
+
+#: ldfile.c:594
+msgid "%P%F: cannot represent machine `%s'\n"
+msgstr "%P%F: kan inte representera maskinen \"%s\"\n"
+
+#: ldlang.c:640
+msgid ""
+"\n"
+"Memory Configuration\n"
+"\n"
+msgstr ""
+"\n"
+"Minneskonfiguration\n"
+"\n"
+
+#: ldlang.c:642
+msgid "Name"
+msgstr "Namn"
+
+#: ldlang.c:642
+msgid "Origin"
+msgstr "Början"
+
+#: ldlang.c:642
+msgid "Length"
+msgstr "Längd"
+
+#: ldlang.c:642
+msgid "Attributes"
+msgstr "Attribut"
+
+#: ldlang.c:682
+msgid ""
+"\n"
+"Linker script and memory map\n"
+"\n"
+msgstr ""
+"\n"
+"Länkskript och minnestabell\n"
+"\n"
+
+#: ldlang.c:698
+msgid "%P%F: Illegal use of `%s' section\n"
+msgstr "%P%F: Otillåten användning av sektionen \"%s\"\n"
+
+#: ldlang.c:707
+msgid "%P%F: output format %s cannot represent section called %s\n"
+msgstr "%P%F: utdataformatet %s kan inte representera sektionen kallad %s\n"
+
+#: ldlang.c:867
+msgid "%P: %B: warning: ignoring duplicate section `%s'\n"
+msgstr "%P: %B: varning: ignorerar dubbel sektion \"%s\"\n"
+
+#: ldlang.c:870
+msgid "%P: %B: warning: ignoring duplicate `%s' section symbol `%s'\n"
+msgstr "%P: %B: varning: ignorerar dubbla \"%s\"-sektionssymbolen \"%s\"\n"
+
+#: ldlang.c:884
+msgid "%P: %B: warning: duplicate section `%s' has different size\n"
+msgstr "%P: %B: varning: dubbla sektionen \"%s\" har annan storlek\n"
+
+#: ldlang.c:936
+msgid "%P%F: Failed to create hash table\n"
+msgstr "%P%F: Misslyckades med att skapa hashtabell\n"
+
+#: ldlang.c:1351
+msgid "%B: file not recognized: %E\n"
+msgstr "%B: filen inte igenkänd: %E\n"
+
+#: ldlang.c:1352
+msgid "%B: matching formats:"
+msgstr "%B: matchande format:"
+
+#: ldlang.c:1359
+msgid "%F%B: file not recognized: %E\n"
+msgstr "%F%B: filen inte igenkänd: %E\n"
+
+#: ldlang.c:1418
+msgid "%F%B: member %B in archive is not an object\n"
+msgstr "%F%B: medlem %B i arkivet är inte ett objekt\n"
+
+#: ldlang.c:1429 ldlang.c:1443
+msgid "%F%B: could not read symbols: %E\n"
+msgstr "%F%B: kunde inte läsa symboler: %E\n"
+
+#: ldlang.c:1698
+msgid "%P: warning: could not find any targets that match endianness requirement\n"
+msgstr "%P: varning: kunde inte hitta några mål som matchar kravet på endianess\n"
+
+#: ldlang.c:1711
+msgid "%P%F: target %s not found\n"
+msgstr "%P%F: målet %s hittades inte\n"
+
+#: ldlang.c:1713
+msgid "%P%F: cannot open output file %s: %E\n"
+msgstr "%P%F: kan inte öppna utdatafilen %s: %E\n"
+
+#: ldlang.c:1723
+msgid "%P%F:%s: can not make object file: %E\n"
+msgstr "%P%F:%s: kan inte skapa objektfilen: %E\n"
+
+#: ldlang.c:1727
+msgid "%P%F:%s: can not set architecture: %E\n"
+msgstr "%P%F:%s: kan inte ställa in arkitektur: %E\n"
+
+#: ldlang.c:1731
+msgid "%P%F: can not create link hash table: %E\n"
+msgstr "%P%F: kan inte skapa hashtabell över länkar: %E\n"
+
+#: ldlang.c:2069
+msgid " load address 0x%V"
+msgstr " inläsningsadress 0x%V"
+
+#: ldlang.c:2204
+msgid "%W (size before relaxing)\n"
+msgstr "%W (storlek innan avslappning)\n"
+
+#: ldlang.c:2288
+#, c-format
+msgid "Address of section %s set to "
+msgstr "Adressen på sektionen %s ställd till "
+
+#: ldlang.c:2443
+#, c-format
+msgid "Fail with %d\n"
+msgstr "Misslyckas med %d\n"
+
+#: ldlang.c:2683
+msgid "%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"
+msgstr "%X%P: sektionen %s [%V -> %V] överlappar med sektionen %s [%V -> %V]\n"
+
+#: ldlang.c:2711
+msgid "%X%P: address 0x%v of %B section %s is not within region %s\n"
+msgstr "%X%P: adressen 0x%v i %B-sektionen %s är inte inom området %s\n"
+
+#: ldlang.c:2719
+msgid "%X%P: region %s is full (%B section %s)\n"
+msgstr "%X%P: området %s är fullt (%B-sektion %s)\n"
+
+#: ldlang.c:2770
+msgid "%P%X: Internal error on COFF shared library section %s\n"
+msgstr "%P%X: Internt fel i delat COFF-bibliotek sektion %s\n"
+
+#: ldlang.c:2826
+msgid "%P%F: error: no memory region specified for loadable section `%s'\n"
+msgstr "%P%F: fel: inget minnesområde angivet för inläsbara sektionen \"%s\"\n"
+
+#: ldlang.c:2830
+msgid "%P: warning: no memory region specified for loadable section `%s'\n"
+msgstr "%P: varning: inget minnesområde angivet för inläsbara sektionen \"%s\"\n"
+
+#: ldlang.c:2846
+msgid "%P: warning: changing start of section %s by %u bytes\n"
+msgstr "%P: varning: ändrar start på sektionen %s med %u byte\n"
+
+#: ldlang.c:2859
+#, c-format
+msgid "%F%S: non constant address expression for section %s\n"
+msgstr "%F%S: ickekonstant adressuttryck för sektionen %s\n"
+
+#: ldlang.c:3036
+msgid "%P%F: can't relax section: %E\n"
+msgstr "%P%F: kan inte slappna av sektion: %E\n"
+
+#: ldlang.c:3232
+msgid "%F%P: invalid data statement\n"
+msgstr "%F%P: ogiltig datasats\n"
+
+#: ldlang.c:3269
+msgid "%F%P: invalid reloc statement\n"
+msgstr "%F%P: ogiltig omlokaliseringssats\n"
+
+#: ldlang.c:3408
+msgid "%P%F:%s: can't set start address\n"
+msgstr "%P%F:%s: kan inte ställa in startadress\n"
+
+#: ldlang.c:3421 ldlang.c:3439
+msgid "%P%F: can't set start address\n"
+msgstr "%P%F: kan inte ställa in startadress\n"
+
+#: ldlang.c:3433
+msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n"
+msgstr "%P: varning: kan inte hitta ingångssymbolen %s; använder som standard %V\n"
+
+#: ldlang.c:3444
+msgid "%P: warning: cannot find entry symbol %s; not setting start address\n"
+msgstr "%P: varning: kan inte hitta ingångssymbolen %s; ställer inte in startadress\n"
+
+#: ldlang.c:3488
+msgid "%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"
+msgstr "%P%F: Omlokaliseringsbar länkning med omlänkningar från formatet %s (%B) till formatet %s (%B) stöds inte\n"
+
+#: ldlang.c:3497
+msgid "%P: warning: %s architecture of input file `%B' is incompatible with %s output\n"
+msgstr "%P: varning: %s-arkitekturen i indatafilen \"%B\" är inkompatibel med %s-utdata\n"
+
+#: ldlang.c:3518
+msgid "%E%X: failed to merge target specific data of file %B\n"
+msgstr "%E%X: misslyckades med att slå samman målspecifik data i filen %B\n"
+
+#: ldlang.c:3604
+msgid ""
+"\n"
+"Allocating common symbols\n"
+msgstr ""
+"\n"
+"Allokerar gemensamma symboler\n"
+
+#: ldlang.c:3605
+msgid ""
+"Common symbol size file\n"
+"\n"
+msgstr ""
+"Gemensam symbol storlek fil\n"
+"\n"
+
+#. This message happens when using the
+#. svr3.ifile linker script, so I have
+#. disabled it.
+#: ldlang.c:3681
+msgid "%P: no [COMMON] command, defaulting to .bss\n"
+msgstr "%P: inget [COMMON]-kommando, använder standardalternativet .bss\n"
+
+#: ldlang.c:3737
+msgid "%P%F: invalid syntax in flags\n"
+msgstr "%P%F: ogiltig syntax i flaggor\n"
+
+#: ldlang.c:4325
+msgid "%P%Fmultiple STARTUP files\n"
+msgstr "%P%Fflera samtidiga STARTUP-filer\n"
+
+#: ldlang.c:4368
+msgid "%X%P:%S: section has both a load address and a load region\n"
+msgstr "%X%P:%S: sektionen har både en inläsningsadress och ett minnesinläsningsområde\n"
+
+#: ldlang.c:4608
+msgid "%F%P: bfd_record_phdr failed: %E\n"
+msgstr "%F%P: bfd_record_phdr misslyckades: %E\n"
+
+#: ldlang.c:4627
+msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n"
+msgstr "%X%P: sektionen \"%s\" är tilldelad till ickexisterande phvd \"%s\"\n"
+
+#: ldlang.c:4919
+msgid "%X%P: unknown language `%s' in version information\n"
+msgstr "%X%P: okänt språk i \"%s\" i versionsinformation\n"
+
+#: ldlang.c:4969
+msgid "%X%P: anonymous version tag cannot be combined with other version tags\n"
+msgstr "%X%P: anonym versionstagg kan inte kombineras med andra versionstaggar\n"
+
+#: ldlang.c:4977
+msgid "%X%P: duplicate version tag `%s'\n"
+msgstr "%X%P: dubbel versionstagg \"%s\"\n"
+
+#: ldlang.c:4990 ldlang.c:5003
+msgid "%X%P: duplicate expression `%s' in version information\n"
+msgstr "%X%P: dubbelt uttryck \"%s\" i versionsinformation\n"
+
+#: ldlang.c:5043
+msgid "%X%P: unable to find version dependency `%s'\n"
+msgstr "%X%P: kan inte hitta versionsberoende \"%s\"\n"
+
+#: ldlang.c:5065
+msgid "%X%P: unable to read .exports section contents\n"
+msgstr "%X%P: kan inte läsa innehållet i .exports-sektionen\n"
+
+#: ldmain.c:247
+msgid "%X%P: can't set BFD default target to `%s': %E\n"
+msgstr "%X%P: kan inte ställa in BSD-standardmålet till \"%s\": %E\n"
+
+#: ldmain.c:349
+msgid "%P%F: -r and --mpc860c0 may not be used together\n"
+msgstr "%P%F: -r och --mpc860c0 kan inte användas tillsammans\n"
+
+#: ldmain.c:351
+msgid "%P%F: --relax and -r may not be used together\n"
+msgstr "%P%F: --relax och -r kan inte användas tillsammans\n"
+
+#: ldmain.c:353
+msgid "%P%F: -r and -shared may not be used together\n"
+msgstr "%P%F: -r och -shared kan inte användas tillsammans\n"
+
+#: ldmain.c:359
+msgid "%P%F: -F may not be used without -shared\n"
+msgstr "%P%F: -F kan inte användas utan -shared\n"
+
+#: ldmain.c:361
+msgid "%P%F: -f may not be used without -shared\n"
+msgstr "%P%F: -f kan inte användas utan -shared\n"
+
+#: ldmain.c:403
+msgid "using external linker script:"
+msgstr "använder externt länkskript:"
+
+#: ldmain.c:405
+msgid "using internal linker script:"
+msgstr "använder internt länkskript:"
+
+#: ldmain.c:439
+msgid "%P%F: no input files\n"
+msgstr "%P%F: inga indatafiler\n"
+
+#: ldmain.c:443
+msgid "%P: mode %s\n"
+msgstr "%P: läge %s\n"
+
+#: ldmain.c:459
+msgid "%P%F: cannot open map file %s: %E\n"
+msgstr "%P%F: kan inte öppna tabellfil %s: %E\n"
+
+#: ldmain.c:489
+msgid "%P: link errors found, deleting executable `%s'\n"
+msgstr "%P: länkfel hittades, tar bort den körbara filen \"%s\"\n"
+
+#: ldmain.c:498
+msgid "%F%B: final close failed: %E\n"
+msgstr "%F%B: avslutande stängning misslyckades: %E\n"
+
+#: ldmain.c:524
+msgid "%X%P: unable to open for source of copy `%s'\n"
+msgstr "%X%P: kan inte öppna för källkoden till kopian \"%s\"\n"
+
+#: ldmain.c:527
+msgid "%X%P: unable to open for destination of copy `%s'\n"
+msgstr "%X%P: kan inte öppna för mål av kopian \"%s\"\n"
+
+#: ldmain.c:534
+msgid "%P: Error writing file `%s'\n"
+msgstr "%P: Fel vid skrivning av filen \"%s\"\n"
+
+#: ldmain.c:539 pe-dll.c:1443
+#, c-format
+msgid "%P: Error closing file `%s'\n"
+msgstr "%P: Fel vid stängning av filen \"%s\"\n"
+
+#: ldmain.c:555
+#, c-format
+msgid "%s: total time in link: %ld.%06ld\n"
+msgstr "%s: total tid i länkning: %ld.%06ld\n"
+
+#: ldmain.c:558
+#, c-format
+msgid "%s: data size %ld\n"
+msgstr "%s: datastorlek %ld\n"
+
+#: ldmain.c:596
+msgid "%P%F: missing argument to -m\n"
+msgstr "%P%F: argument saknas till -m\n"
+
+#: ldmain.c:741 ldmain.c:759 ldmain.c:789
+msgid "%P%F: bfd_hash_table_init failed: %E\n"
+msgstr "%P%F: bfd_hash_table_init misslyckades: %E\n"
+
+#: ldmain.c:745 ldmain.c:763
+msgid "%P%F: bfd_hash_lookup failed: %E\n"
+msgstr "%P%F: bfd_hash_lookup misslyckades: %E\n"
+
+#: ldmain.c:777
+msgid "%X%P: error: duplicate retain-symbols-file\n"
+msgstr "%X%P: fel: dubbel retain-symbols-file\n"
+
+#: ldmain.c:819
+msgid "%P%F: bfd_hash_lookup for insertion failed: %E\n"
+msgstr "%P%F: bfd_hash_lookup för ingång misslyckades: %E\n"
+
+#: ldmain.c:824
+msgid "%P: `-retain-symbols-file' overrides `-s' and `-S'\n"
+msgstr "%P: \"-retain-symbols-file\" åsidosätter \"-s\" och \"-S\"\n"
+
+#: ldmain.c:899
+msgid ""
+"Archive member included because of file (symbol)\n"
+"\n"
+msgstr ""
+"Arkivmedlem inkluderad på grund av fil (symbol)\n"
+"\n"
+
+#: ldmain.c:969
+msgid "%X%C: multiple definition of `%T'\n"
+msgstr "%X%C: flera defintioner av \"%T\"\n"
+
+#: ldmain.c:972
+msgid "%D: first defined here\n"
+msgstr "%D: först definierad här\n"
+
+#: ldmain.c:976
+msgid "%P: Disabling relaxation: it will not work with multiple definitions\n"
+msgstr "%P: Stänger av avslappning: det kommer inte att fungera med flera definitioner\n"
+
+#: ldmain.c:1006
+msgid "%B: warning: definition of `%T' overriding common\n"
+msgstr "%B: varning: definitioner av \"%T\" åsidosätter gemensam\n"
+
+#: ldmain.c:1009
+msgid "%B: warning: common is here\n"
+msgstr "%B: varning: gemensam är här\n"
+
+#: ldmain.c:1016
+msgid "%B: warning: common of `%T' overridden by definition\n"
+msgstr "%B: varning: gemensam i \"%T\" åsidosattes av definition\n"
+
+#: ldmain.c:1019
+msgid "%B: warning: defined here\n"
+msgstr "%B: varning: definierad här\n"
+
+#: ldmain.c:1026
+msgid "%B: warning: common of `%T' overridden by larger common\n"
+msgstr "%B: varning: gemensam i \"%T\" åsidosattes av större gemensam\n"
+
+#: ldmain.c:1029
+msgid "%B: warning: larger common is here\n"
+msgstr "%B: varning: större gemensam är här\n"
+
+#: ldmain.c:1033
+msgid "%B: warning: common of `%T' overriding smaller common\n"
+msgstr "%B: varning: gemensam i \"%T\" åsidosätter mindre gemensam\n"
+
+#: ldmain.c:1036
+msgid "%B: warning: smaller common is here\n"
+msgstr "%B: varning: mindre gemensam är här\n"
+
+#: ldmain.c:1040
+msgid "%B: warning: multiple common of `%T'\n"
+msgstr "%B: varning: flera gemensamma i \"%T\"\n"
+
+#: ldmain.c:1042
+msgid "%B: warning: previous common is here\n"
+msgstr "%B: varning: föregående gemensam är här\n"
+
+#: ldmain.c:1062 ldmain.c:1100
+msgid "%P: warning: global constructor %s used\n"
+msgstr "%P: varning: global konstruktor %s användes\n"
+
+#: ldmain.c:1110
+msgid "%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"
+msgstr "%P%F: Fel i BFD-backend: BFD_RELOC_CTOR stöds inte\n"
+
+#: ldmain.c:1287 ldmisc.c:533
+msgid "%F%P: bfd_hash_table_init failed: %E\n"
+msgstr "%F%P: bfd_hash_table_init misslyckades: %E\n"
+
+#: ldmain.c:1294 ldmisc.c:540
+msgid "%F%P: bfd_hash_lookup failed: %E\n"
+msgstr "%F%P: bfd_hash_lookup misslyckades: %E\n"
+
+#: ldmain.c:1314
+msgid "%C: undefined reference to `%T'\n"
+msgstr "%C: odefinierad referens till \"%T\"\n"
+
+#: ldmain.c:1320
+msgid "%D: more undefined references to `%T' follow\n"
+msgstr "%D: flera odefinierade referenser till \"%T\" följer\n"
+
+#: ldmain.c:1327
+msgid "%B: undefined reference to `%T'\n"
+msgstr "%B: odefinierad referens till \"%T\"\n"
+
+#: ldmain.c:1333
+msgid "%B: more undefined references to `%T' follow\n"
+msgstr "%B: flera odefinierade referenser till \"%T\" följer\n"
+
+#: ldmain.c:1364 ldmain.c:1392 ldmain.c:1410
+msgid "%P%X: generated"
+msgstr "%P%X: genererad"
+
+#: ldmain.c:1371
+msgid " additional relocation overflows omitted from the output\n"
+msgstr " ytterligare omlokaliseringsspill utelämnade från utdatan\n"
+
+#: ldmain.c:1375
+msgid " relocation truncated to fit: %s %T"
+msgstr " omlokalisering trunkerad för att passa: %s %T"
+
+#: ldmain.c:1395
+#, c-format
+msgid "dangerous relocation: %s\n"
+msgstr "farlig omlokalisering: %s\n"
+
+#: ldmain.c:1413
+msgid " reloc refers to symbol `%T' which is not being output\n"
+msgstr " omlokalisering refererar till symbolen \"%T\" som inte skrivs ut\n"
+
+#: ldmisc.c:147
+msgid "no symbol"
+msgstr "ingen symbol"
+
+#: ldmisc.c:211
+#, c-format
+msgid "built in linker script:%u"
+msgstr "inbyggt länkskript:%u"
+
+#: ldmisc.c:260 ldmisc.c:264
+msgid "%B%F: could not read symbols\n"
+msgstr "%B%F: kunde inte läsa symboler\n"
+
+#: ldmisc.c:291
+msgid ": In function `%T':\n"
+msgstr ": I funktionen \"%T\":\n"
+
+#: ldmisc.c:438
+msgid "%F%P: internal error %s %d\n"
+msgstr "%F%P: internt fel %s %d\n"
+
+#: ldmisc.c:484
+msgid "%P: internal error: aborting at %s line %d in %s\n"
+msgstr "%P: internt fel: avbryter vid %s rad %d i %s\n"
+
+#: ldmisc.c:487
+msgid "%P: internal error: aborting at %s line %d\n"
+msgstr "%P: internt fel: avbryter vid %s rad %d\n"
+
+#: ldmisc.c:489
+msgid "%P%F: please report this bug\n"
+msgstr "%P%F: rapportera detta fel\n"
+
+#. Output for noisy == 2 is intended to follow the GNU standards.
+#: ldver.c:39
+#, c-format
+msgid "GNU ld version %s\n"
+msgstr "GNU ld version %s\n"
+
+#: ldver.c:43
+msgid "Copyright 2002 Free Software Foundation, Inc.\n"
+msgstr "Copyright 2002 Free Software Foundation, Inc.\n"
+
+#: ldver.c:44
+msgid ""
+"This program is free software; you may redistribute it under the terms of\n"
+"the GNU General Public License. This program has absolutely no warranty.\n"
+msgstr ""
+"Detta program är fri programvara. Du kan vidaredistribuera det under\n"
+"villkoren i GNU General Public License. Detta program har ingen som\n"
+"helst garanti.\n"
+
+#: ldver.c:53
+msgid " Supported emulations:\n"
+msgstr " Emuleringar som stöds:\n"
+
+#: ldwrite.c:54 ldwrite.c:190
+msgid "%P%F: bfd_new_link_order failed\n"
+msgstr "%P%F: bfd_new_link_order misslyckades\n"
+
+#: ldwrite.c:310
+msgid "%F%P: clone section failed: %E\n"
+msgstr "%F%P: klonsektion misslyckades: %E\n"
+
+#: ldwrite.c:348
+#, c-format
+msgid "%8x something else\n"
+msgstr "%8x någonting annat\n"
+
+#: ldwrite.c:525
+msgid "%F%P: final link failed: %E\n"
+msgstr "%F%P: avslutande länkning misslyckades: %E\n"
+
+#: lexsup.c:179 lexsup.c:284
+msgid "KEYWORD"
+msgstr "NYCKELORD"
+
+#: lexsup.c:179
+msgid "Shared library control for HP/UX compatibility"
+msgstr "Styrning av delade bibliotek för kompatibilitet med HP/UX"
+
+#: lexsup.c:182
+msgid "ARCH"
+msgstr "ARK"
+
+#: lexsup.c:182
+msgid "Set architecture"
+msgstr "Ställ in arkitektur"
+
+#: lexsup.c:184 lexsup.c:357
+msgid "TARGET"
+msgstr "MÅL"
+
+#: lexsup.c:184
+msgid "Specify target for following input files"
+msgstr "Ange mål för följande indatafiler"
+
+#: lexsup.c:186 lexsup.c:229 lexsup.c:241 lexsup.c:254 lexsup.c:329
+#: lexsup.c:364 lexsup.c:408
+msgid "FILE"
+msgstr "FIL"
+
+#: lexsup.c:186
+msgid "Read MRI format linker script"
+msgstr "Läs länkskript i MRI-format"
+
+#: lexsup.c:188
+msgid "Force common symbols to be defined"
+msgstr "Tvinga gemensamma symboler att vara definierade"
+
+#: lexsup.c:192 lexsup.c:398 lexsup.c:400 lexsup.c:402
+msgid "ADDRESS"
+msgstr "ADRESS"
+
+#: lexsup.c:192
+msgid "Set start address"
+msgstr "Ställ in startadress"
+
+#: lexsup.c:194
+msgid "Export all dynamic symbols"
+msgstr "Exportera alla dynamiska symboler"
+
+#: lexsup.c:196
+msgid "Link big-endian objects"
+msgstr "Länka objekt som är big-endian"
+
+#: lexsup.c:198
+msgid "Link little-endian objects"
+msgstr "Länka objekt som är little-endian"
+
+#: lexsup.c:200 lexsup.c:203
+msgid "SHLIB"
+msgstr "DELBIBL"
+
+#: lexsup.c:200
+msgid "Auxiliary filter for shared object symbol table"
+msgstr "Yttre filter för symboltabell över delade objekt"
+
+#: lexsup.c:203
+msgid "Filter for shared object symbol table"
+msgstr "Filter för symboltabell över delade objekt"
+
+#: lexsup.c:205
+msgid "Ignored"
+msgstr "Ignorerad"
+
+#: lexsup.c:207
+msgid "SIZE"
+msgstr "STORLEK"
+
+#: lexsup.c:207
+msgid "Small data size (if no size, same as --shared)"
+msgstr "Liten datastorlek (om ingen storlek, samma som --shared)"
+
+#: lexsup.c:210
+msgid "FILENAME"
+msgstr "FILNAMN"
+
+#: lexsup.c:210
+msgid "Set internal name of shared library"
+msgstr "Ställ in internt namn på delat bibliotek"
+
+#: lexsup.c:212
+msgid "PROGRAM"
+msgstr "PROGRAM"
+
+#: lexsup.c:212
+msgid "Set PROGRAM as the dynamic linker to use"
+msgstr "Ställ in PROGRAM som den dynamiska länkare som ska användas"
+
+#: lexsup.c:214
+msgid "LIBNAME"
+msgstr "BIBLNAMN"
+
+#: lexsup.c:214
+msgid "Search for library LIBNAME"
+msgstr "Sök efter biblioteket BIBLNAMN"
+
+#: lexsup.c:216
+msgid "DIRECTORY"
+msgstr "KATALOG"
+
+#: lexsup.c:216
+msgid "Add DIRECTORY to library search path"
+msgstr "Lägg till KATALOG till bibliotekssökvägen"
+
+#: lexsup.c:218
+msgid "EMULATION"
+msgstr "EMULERING"
+
+#: lexsup.c:218
+msgid "Set emulation"
+msgstr "Ställ in emulering"
+
+#: lexsup.c:220
+msgid "Print map file on standard output"
+msgstr "Visa tabellfil på standard ut"
+
+#: lexsup.c:222
+msgid "Do not page align data"
+msgstr "Justera inte data efter jämna sidor"
+
+#: lexsup.c:224
+msgid "Do not page align data, do not make text readonly"
+msgstr "Justera inte data efter jämna sidor, gör inte texten endast läsbar"
+
+#: lexsup.c:227
+msgid "Page align data, make text readonly"
+msgstr "Sidjustera data, gör texten endast läsbar"
+
+#: lexsup.c:229
+msgid "Set output file name"
+msgstr "Ställ in utdatafilnamnet"
+
+#: lexsup.c:231
+msgid "Optimize output file"
+msgstr "Optimera utdatafil"
+
+#: lexsup.c:233
+msgid "Ignored for SVR4 compatibility"
+msgstr "Ignorerad för kompatibilitet med SVR4"
+
+#: lexsup.c:237
+msgid "Generate relocatable output"
+msgstr "Generera omlokaliseringsbar utdata"
+
+#: lexsup.c:241
+msgid "Just link symbols (if directory, same as --rpath)"
+msgstr "Länka bara symboler (om katalog, samma som --rpath)"
+
+#: lexsup.c:244
+msgid "Strip all symbols"
+msgstr "Ta bort alla symboler"
+
+#: lexsup.c:246
+msgid "Strip debugging symbols"
+msgstr "Ta bort felsökningssymboler"
+
+#: lexsup.c:248
+msgid "Strip symbols in discarded sections"
+msgstr "Ta bort symboler i kastade sektioner"
+
+#: lexsup.c:250
+msgid "Do not strip symbols in discarded sections"
+msgstr "Ta inte bort symboler i kastade sektioner"
+
+#: lexsup.c:252
+msgid "Trace file opens"
+msgstr "Spåra filöppningar"
+
+#: lexsup.c:254
+msgid "Read linker script"
+msgstr "Läs länkskript"
+
+#: lexsup.c:256 lexsup.c:272 lexsup.c:315 lexsup.c:327 lexsup.c:392
+#: lexsup.c:411 lexsup.c:431
+msgid "SYMBOL"
+msgstr "SYMBOL"
+
+#: lexsup.c:256
+msgid "Start with undefined reference to SYMBOL"
+msgstr "Börja med odefinierad referens till SYMBOL"
+
+#: lexsup.c:258
+msgid "[=SECTION]"
+msgstr "[=SEKTION]"
+
+#: lexsup.c:258
+msgid "Don't merge input [SECTION | orphan] sections"
+msgstr "Slå inte samman [SEKTION | föräldralösa] sektioner"
+
+#: lexsup.c:260
+msgid "Build global constructor/destructor tables"
+msgstr "Bygg globala konstruktors-/destruktorstabeller"
+
+#: lexsup.c:262
+msgid "Print version information"
+msgstr "Visa versionsinformation"
+
+#: lexsup.c:264
+msgid "Print version and emulation information"
+msgstr "Visa versions- och emuleringsinformation"
+
+#: lexsup.c:266
+msgid "Discard all local symbols"
+msgstr "Kasta alla lokala symboler"
+
+#: lexsup.c:268
+msgid "Discard temporary local symbols (default)"
+msgstr "Kasta temporära lokala symboler (standard)"
+
+#: lexsup.c:270
+msgid "Don't discard any local symbols"
+msgstr "Kasta inte några lokala symboler"
+
+#: lexsup.c:272
+msgid "Trace mentions of SYMBOL"
+msgstr "Spåra omnämningar av SYMBOL"
+
+#: lexsup.c:274 lexsup.c:366 lexsup.c:368
+msgid "PATH"
+msgstr "SÖKVÄG"
+
+#: lexsup.c:274
+msgid "Default search path for Solaris compatibility"
+msgstr "Standardsökväg för Solaris-kompatibilitet"
+
+#: lexsup.c:276
+msgid "Start a group"
+msgstr "Starta en grupp"
+
+#: lexsup.c:278
+msgid "End a group"
+msgstr "Sluta en grupp"
+
+#: lexsup.c:280
+msgid "Accept input files whose architecture cannot be determined"
+msgstr "Acceptera indatafiler vars arkitektur inte kan avgöras"
+
+#: lexsup.c:282
+msgid "Reject input files whose architecture is unknown"
+msgstr "Avvisa indatafiler vars arkitektur är okänd"
+
+#: lexsup.c:284
+msgid "Ignored for SunOS compatibility"
+msgstr "Ignorerad för SunOS-kompatibilitet"
+
+#: lexsup.c:286
+msgid "Link against shared libraries"
+msgstr "Länka mot delade bibliotek"
+
+#: lexsup.c:292
+msgid "Do not link against shared libraries"
+msgstr "Länka inte mot delade bibliotek"
+
+#: lexsup.c:300
+msgid "Bind global references locally"
+msgstr "Bind globala referenser lokalt"
+
+#: lexsup.c:302
+msgid "Check section addresses for overlaps (default)"
+msgstr "Kontrollera sektionsadresser för överlappningar (standard)"
+
+#: lexsup.c:304
+msgid "Do not check section addresses for overlaps"
+msgstr "Kontrollera inte sektionsadresser för överlappningar"
+
+#: lexsup.c:307
+msgid "Output cross reference table"
+msgstr "Skapa korsreferenstabell"
+
+#: lexsup.c:309
+msgid "SYMBOL=EXPRESSION"
+msgstr "SYMBOL=UTTRYCK"
+
+#: lexsup.c:309
+msgid "Define a symbol"
+msgstr "Definiera en symbol"
+
+#: lexsup.c:311
+msgid "[=STYLE]"
+msgstr "[=STIL]"
+
+#: lexsup.c:311
+msgid "Demangle symbol names [using STYLE]"
+msgstr "Avkoda symbolnamn [använd STIL]"
+
+#: lexsup.c:313
+msgid "Generate embedded relocs"
+msgstr "Generera inbäddade omlokaliseringar"
+
+#: lexsup.c:315
+msgid "Call SYMBOL at unload-time"
+msgstr "Anropa SYMBOL vid urladdning"
+
+#: lexsup.c:317
+msgid "Force generation of file with .exe suffix"
+msgstr "Tvinga generering av fil med ändelsen .exe"
+
+#: lexsup.c:319
+msgid "Remove unused sections (on some targets)"
+msgstr "Ta bort oanvända sektioner (på vissa mål)"
+
+#: lexsup.c:322
+msgid "Don't remove unused sections (default)"
+msgstr "Ta inte bort oanvända sektioner (standard)"
+
+#: lexsup.c:325
+msgid "Print option help"
+msgstr "Visa hjälp om flaggor"
+
+#: lexsup.c:327
+msgid "Call SYMBOL at load-time"
+msgstr "Anropa SYMBOL vid inläsning"
+
+#: lexsup.c:329
+msgid "Write a map file"
+msgstr "Skriv en tabellfil"
+
+#: lexsup.c:331
+msgid "Do not define Common storage"
+msgstr "Definiera inte gemensam lagring"
+
+#: lexsup.c:333
+msgid "Do not demangle symbol names"
+msgstr "Avkoda inte symbolnamn"
+
+#: lexsup.c:335
+msgid "Use less memory and more disk I/O"
+msgstr "Använd mindre minne och mer disk-I/O"
+
+#: lexsup.c:337
+msgid "Allow no undefined symbols"
+msgstr "Tillåt inga odefinierade symboler"
+
+#: lexsup.c:339
+msgid "Allow undefined symbols in shared objects (the default)"
+msgstr "Tillåt odefinierade symboler i delade objekt (standardalternativet)"
+
+#: lexsup.c:341
+msgid "Do not allow undefined symbols in shared objects"
+msgstr "Tillåt inte odefinierade symboler i delade objekt"
+
+#: lexsup.c:343
+msgid "Allow multiple definitions"
+msgstr "Tillåt flera defintioner"
+
+#: lexsup.c:345
+msgid "Disallow undefined version"
+msgstr "Tillåt inte odefinierad version"
+
+#: lexsup.c:347
+msgid "Don't warn about mismatched input files"
+msgstr "Varna inte om opassande indatafiler"
+
+#: lexsup.c:349
+msgid "Turn off --whole-archive"
+msgstr "Slå av ---whole-archive"
+
+#: lexsup.c:351
+msgid "Create an output file even if errors occur"
+msgstr "Skapa en utdatafil även om fel förekommer"
+
+#: lexsup.c:355
+msgid ""
+"Only use library directories specified on\n"
+"\t\t\t\tthe command line"
+msgstr ""
+"Använd endast bibliotekskataloger som anges\n"
+"\t\t\t\tpå kommandoraden"
+
+#: lexsup.c:357
+msgid "Specify target of output file"
+msgstr "Ange mål för utdatafil"
+
+#: lexsup.c:359
+msgid "Ignored for Linux compatibility"
+msgstr "Ignorerad för kompatibilitet med Linux"
+
+#: lexsup.c:361
+msgid "Relax branches on certain targets"
+msgstr "Slappna av greningar på vissa mål"
+
+#: lexsup.c:364
+msgid "Keep only symbols listed in FILE"
+msgstr "Behåll endast symboler angivna i FIL"
+
+#: lexsup.c:366
+msgid "Set runtime shared library search path"
+msgstr "Ställ in körtidssökväg för delade bibliotek"
+
+#: lexsup.c:368
+msgid "Set link time shared library search path"
+msgstr "Ställ in länkningstidssökväg för delade bibliotek"
+
+#: lexsup.c:370
+msgid "Create a shared library"
+msgstr "Skapa ett delat bibliotek"
+
+#: lexsup.c:374
+msgid "Create a position independent executable"
+msgstr "Skapa en positionsoberoende körbar fil"
+
+#: lexsup.c:378
+msgid "Sort common symbols by size"
+msgstr "Sortera gemensamma symboler efter storlek"
+
+#: lexsup.c:382
+msgid "COUNT"
+msgstr "ANTAL"
+
+#: lexsup.c:382
+msgid "How many tags to reserve in .dynamic section"
+msgstr "Hur många taggar som ska reserveras i .dynamic-sektion"
+
+#: lexsup.c:384
+msgid "[=SIZE]"
+msgstr "[=STORLEK]"
+
+#: lexsup.c:384
+msgid "Split output sections every SIZE octets"
+msgstr "Dela utdatasektioner var STORLEK oktett"
+
+#: lexsup.c:386
+msgid "[=COUNT]"
+msgstr "[=ANTAL]"
+
+#: lexsup.c:386
+msgid "Split output sections every COUNT relocs"
+msgstr "Dela utdatasektioner var ANTAL omlokalisering"
+
+#: lexsup.c:388
+msgid "Print memory usage statistics"
+msgstr "Visa statistik över minnesanvändning"
+
+#: lexsup.c:390
+msgid "Display target specific options"
+msgstr "Visa målspecifika flaggor"
+
+#: lexsup.c:392
+msgid "Do task level linking"
+msgstr "Utför länkning på uppgiftsnivå"
+
+#: lexsup.c:394
+msgid "Use same format as native linker"
+msgstr "Använd samma format som inhemska länkaren"
+
+#: lexsup.c:396
+msgid "SECTION=ADDRESS"
+msgstr "SEKTION=ADRESS"
+
+#: lexsup.c:396
+msgid "Set address of named section"
+msgstr "Ställ in adress på namngiven sektion"
+
+#: lexsup.c:398
+msgid "Set address of .bss section"
+msgstr "Ställ in adress på .bss-sektion"
+
+#: lexsup.c:400
+msgid "Set address of .data section"
+msgstr "Ställ in adress på .data-sektion"
+
+#: lexsup.c:402
+msgid "Set address of .text section"
+msgstr "Ställ in adress på .text-sektion"
+
+#: lexsup.c:404
+msgid "Output lots of information during link"
+msgstr "Visa mycket information under länkning"
+
+#: lexsup.c:408
+msgid "Read version information script"
+msgstr "Läs skript med versionsinformation"
+
+#: lexsup.c:411
+msgid ""
+"Take export symbols list from .exports, using\n"
+"\t\t\t\tSYMBOL as the version."
+msgstr ""
+"Plocka lista med exportsymboler från .exports och\n"
+"\t\t\t\tanvänd SYMBOL som version."
+
+#: lexsup.c:414
+msgid "Warn about duplicate common symbols"
+msgstr "Varna för dubbla gemensamma symboler"
+
+#: lexsup.c:416
+msgid "Warn if global constructors/destructors are seen"
+msgstr "Varna om globala konstruktorer/destruktorer hittas"
+
+#: lexsup.c:419
+msgid "Warn if the multiple GP values are used"
+msgstr "Varna om flera GP-värden används"
+
+#: lexsup.c:421
+msgid "Warn only once per undefined symbol"
+msgstr "Varna endast en gång per odefinierad symbol"
+
+#: lexsup.c:423
+msgid "Warn if start of section changes due to alignment"
+msgstr "Varna om början på sektionen ändras på grund av justering"
+
+#: lexsup.c:426
+msgid "Treat warnings as errors"
+msgstr "Behandla varningar som fel"
+
+#: lexsup.c:429
+msgid "Include all objects from following archives"
+msgstr "Inkludera alla objekt från följande arkiv"
+
+#: lexsup.c:431
+msgid "Use wrapper functions for SYMBOL"
+msgstr "Använd inkapslingsfunktioner för SYMBOL"
+
+#: lexsup.c:433
+msgid "[=WORDS]"
+msgstr "[=ORD]"
+
+#: lexsup.c:433
+msgid ""
+"Modify problematic branches in last WORDS (1-10,\n"
+"\t\t\t\tdefault 5) words of a page"
+msgstr ""
+"Ändra problematiska greningar i sista ORD (1-10,\n"
+"\t\t\t\tstandardvärde 5) orden på en sida"
+
+#: lexsup.c:602
+msgid "%P: unrecognized option '%s'\n"
+msgstr "%P: okänd flagga \"%s\"\n"
+
+#: lexsup.c:604
+msgid "%P%F: use the --help option for usage information\n"
+msgstr "%P%F: använd flaggan --help för användningsinformation\n"
+
+#: lexsup.c:622
+msgid "%P%F: unrecognized -a option `%s'\n"
+msgstr "%P%F: okänd -a-flagga \"%s\"\n"
+
+#: lexsup.c:635
+msgid "%P%F: unrecognized -assert option `%s'\n"
+msgstr "%P%F: okänd -assert-flagga \"%s\"\n"
+
+#: lexsup.c:678
+msgid "%F%P: unknown demangling style `%s'"
+msgstr "%F%P: okänd avkodningsstil \"%s\""
+
+#: lexsup.c:737
+msgid "%P%F: invalid number `%s'\n"
+msgstr "%P%F: ogiltigt tal \"%s\"\n"
+
+#. This can happen if the user put "-rpath,a" on the command
+#. line. (Or something similar. The comma is important).
+#. Getopt becomes confused and thinks that this is a -r option
+#. but it cannot parse the text after the -r so it refuses to
+#. increment the optind counter. Detect this case and issue
+#. an error message here. We cannot just make this a warning,
+#. increment optind, and continue because getopt is too confused
+#. and will seg-fault the next time around.
+#: lexsup.c:849
+msgid "%P%F: bad -rpath option\n"
+msgstr "%P%F: okänd -rpath-flagga\n"
+
+#: lexsup.c:953
+msgid "%P%F: -shared not supported\n"
+msgstr "%P%F: -shared stöds inte\n"
+
+#: lexsup.c:962
+msgid "%P%F: -pie not supported\n"
+msgstr "%P%F: -pie stöds inte\n"
+
+#: lexsup.c:994
+msgid "%P%F: invalid argument to option \"--section-start\"\n"
+msgstr "%P%F: ogiltigt argument till flaggan \"--section-start\"\n"
+
+#: lexsup.c:1000
+msgid "%P%F: missing argument(s) to option \"--section-start\"\n"
+msgstr "%P%F: argument saknas till flaggan \"--section-start\"\n"
+
+#: lexsup.c:1158
+msgid "%P%F: may not nest groups (--help for usage)\n"
+msgstr "%P%F: får inte nästla grupper (--help för användning)\n"
+
+#: lexsup.c:1165
+msgid "%P%F: group ended before it began (--help for usage)\n"
+msgstr "%P%F: gruppen slutade innan den började (--help för användning)\n"
+
+#: lexsup.c:1179
+msgid "%P%F: invalid argument to option \"mpc860c0\"\n"
+msgstr "%P%F: ogiltigt argument till flaggan \"mpc860c0\"\n"
+
+#: lexsup.c:1234
+msgid "%P%F: invalid hex number `%s'\n"
+msgstr "%P%F: ogiltigt hexadecimalt tal \"%s\"\n"
+
+#: lexsup.c:1246
+#, c-format
+msgid "Usage: %s [options] file...\n"
+msgstr "Användning: %s [flaggor] fil...\n"
+
+#: lexsup.c:1248
+msgid "Options:\n"
+msgstr "Alternativ:\n"
+
+#. Note: Various tools (such as libtool) depend upon the
+#. format of the listings below - do not change them.
+#: lexsup.c:1331
+#, c-format
+msgid "%s: supported targets:"
+msgstr "%s: mål som stöds:"
+
+#: lexsup.c:1339
+#, c-format
+msgid "%s: supported emulations: "
+msgstr "%s: emuleringar som stöds: "
+
+#: lexsup.c:1344
+#, c-format
+msgid "%s: emulation specific options:\n"
+msgstr "%s: emuleringsspecifika flaggor:\n"
+
+#: lexsup.c:1348
+#, c-format
+msgid "Report bugs to %s\n"
+msgstr ""
+"Rapportera fel till %s\n"
+"Rapportera fel i översättningen till sv@li.org\n"
+
+#: mri.c:307
+msgid "%P%F: unknown format type %s\n"
+msgstr "%P%F: okänd formattyp %s\n"
+
+#: pe-dll.c:301
+#, c-format
+msgid "%XUnsupported PEI architecture: %s\n"
+msgstr "%XPEI-arkitekturen stöds inte: %s\n"
+
+#: pe-dll.c:650
+#, c-format
+msgid "%XError, duplicate EXPORT with ordinals: %s (%d vs %d)\n"
+msgstr "%XFel, dubbel EXPORT med ordinaler: %s (%d gentemot %d)\n"
+
+#: pe-dll.c:657
+#, c-format
+msgid "Warning, duplicate EXPORT: %s\n"
+msgstr "Varning, dubbel EXPORT: %s\n"
+
+#: pe-dll.c:723
+#, c-format
+msgid "%XCannot export %s: symbol not defined\n"
+msgstr "%XKan inte exportera %s: symbolen är inte definierad\n"
+
+#: pe-dll.c:729
+#, c-format
+msgid "%XCannot export %s: symbol wrong type (%d vs %d)\n"
+msgstr "%XKan inte exportera %s: symbolen är av fel typ (%d gentemot %d)\n"
+
+#: pe-dll.c:736
+#, c-format
+msgid "%XCannot export %s: symbol not found\n"
+msgstr "%XKan inte exportera %s: symbolen hittades inte\n"
+
+#: pe-dll.c:848
+#, c-format
+msgid "%XError, ordinal used twice: %d (%s vs %s)\n"
+msgstr "%XFel, ordinalen användes två gånger: %d (%s gentemot %s)\n"
+
+#: pe-dll.c:1165
+#, c-format
+msgid "%XError: %d-bit reloc in dll\n"
+msgstr "%XFel: %d-bitars omlokalisering i dll\n"
+
+#: pe-dll.c:1296
+#, c-format
+msgid "%s: Can't open output def file %s\n"
+msgstr "%s: Kan inte öppna utdatadefinitionsfilen %s\n"
+
+#: pe-dll.c:1439
+msgid "; no contents available\n"
+msgstr "; inget innehåll är tillgängligt\n"
+
+#: pe-dll.c:2203
+msgid "%C: variable '%T' can't be auto-imported. Please read the documentation for ld's --enable-auto-import for details.\n"
+msgstr "%C: variabeln \"%T\" kan inte importeras automatiskt. Läs dokumentationen för ld:s --enable-auto-import för detaljer.\n"
+
+#: pe-dll.c:2233
+#, c-format
+msgid "%XCan't open .lib file: %s\n"
+msgstr "%XKan inte öppna .lib-filen: %s\n"
+
+#: pe-dll.c:2238
+#, c-format
+msgid "Creating library file: %s\n"
+msgstr "Skapar biblioteksfil: %s\n"
+
+#~ msgid ""
+#~ " --enable-auto-import Do sophisticated linking of _sym to\n"
+#~ " __imp_sym for DATA references\n"
+#~ msgstr ""
+#~ " --enable-auto-import Utför sofistikerad länkning av _sym till\n"
+#~ " __imp_sym för DATA-referenser\n"
+
+#~ msgid "%B: In function `%T':\n"
+#~ msgstr "%B: I funktionen \"%T\":\n"
+
+#~ msgid "Allow undefined symbols in shared objects"
+#~ msgstr "Tillåt odefinierade symboler i delade objekt"
+
+#~ msgid " create __imp_<SYMBOL> as well.\n"
+#~ msgstr " skapa även __imp_<SYMBOL>.\n"
+
+#~ msgid " unless user specifies one\n"
+#~ msgstr " såvida användaren inte anger en\n"
+
+#~ msgid " --dll-search-prefix=<string> When linking dynamically to a dll witout an\n"
+#~ msgstr " --dll-search-prefix=<sträng> Använd hellre <sträng><basnamn>.dll\n"
+
+#~ msgid " importlib, use <string><basename>.dll \n"
+#~ msgstr " än lib<basnamn>.dll vid dynamisk\n"
+
+#~ msgid " in preference to lib<basename>.dll \n"
+#~ msgstr ""
+#~ " länkning till en dll utan ett\n"
+#~ " importbibliotek.\n"
+
+#~ msgid "Archive member included"
+#~ msgstr "Inkluderade arkivmedlem"
+
+#~ msgid "Don't merge orphan sections with the same name"
+#~ msgstr "Slå inte samman föräldralösa sektioner med samma namn"
diff --git a/binutils-2.21/ld/po/tr.gmo b/binutils-2.21/ld/po/tr.gmo
new file mode 100644
index 0000000..96d567b
--- /dev/null
+++ b/binutils-2.21/ld/po/tr.gmo
Binary files differ
diff --git a/binutils-2.21/ld/po/tr.po b/binutils-2.21/ld/po/tr.po
new file mode 100644
index 0000000..edeb684
--- /dev/null
+++ b/binutils-2.21/ld/po/tr.po
@@ -0,0 +1,2001 @@
+# translation of ld-2.15.96.tr.po to Turkish
+# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+# Deniz Akkus Kanca <deniz@arayan.com>, 2001,2003.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ld 2.15.96\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-03-03 21:05+1030\n"
+"PO-Revision-Date: 2005-03-14 04:48+0200\n"
+"Last-Translator: Deniz Akkus Kanca <deniz@arayan.com>\n"
+"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.9.1\n"
+
+#: emultempl/armcoff.em:72
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code Eski yazılım ile beraber çalışmayı destekler\n"
+
+#: emultempl/armcoff.em:73
+#, c-format
+msgid " --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"
+msgstr " --thumb-entry=<sem> Giriş noktasını Thumb sembolü <sem> olarak atar\n"
+
+#: emultempl/armcoff.em:121
+#, c-format
+msgid "Errors encountered processing file %s"
+msgstr "%s dosyası işlenirken hata oluştu"
+
+#: emultempl/armcoff.em:188 emultempl/pe.em:1455
+msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"
+msgstr "%P: uyarı: '--thumb-entry %s', '-e %s' seçeneğini etkisizleştiriyor\n"
+
+#: emultempl/armcoff.em:193 emultempl/pe.em:1460
+msgid "%P: warning: connot find thumb start symbol %s\n"
+msgstr "%P: uyarı: thumb başlangıç sembolü %s bulunamadı\n"
+
+#: emultempl/pe.em:301
+#, c-format
+msgid " --base_file <basefile> Generate a base file for relocatable DLLs\n"
+msgstr ""
+" --base_file <temeldosya> Yerdeğiştirebilen DLL'ler için temeldosya\n"
+" oluÅŸturur.\n"
+
+#: emultempl/pe.em:302
+#, c-format
+msgid " --dll Set image base to the default for DLLs\n"
+msgstr ""
+" --dll DLL'ler için görüntü temelini öntanımlıya\n"
+" ayarlar.\n"
+
+#: emultempl/pe.em:303
+#, c-format
+msgid " --file-alignment <size> Set file alignment\n"
+msgstr " --file-alignment <boyut> Dosya hizalamasını ayarlar\n"
+
+#: emultempl/pe.em:304
+#, c-format
+msgid " --heap <size> Set initial size of the heap\n"
+msgstr " --heap <boy> Yığının ilk boyunu ayarlar.\n"
+
+#: emultempl/pe.em:305
+#, c-format
+msgid " --image-base <address> Set start address of the executable\n"
+msgstr " --image-base <adres> Uygulamanın başlangıç adresini ayarlar\n"
+
+#: emultempl/pe.em:306
+#, c-format
+msgid " --major-image-version <number> Set version number of the executable\n"
+msgstr " --major-image-version <numara> Uygulamanın sürüm numarasını ayarlar\n"
+
+#: emultempl/pe.em:307
+#, c-format
+msgid " --major-os-version <number> Set minimum required OS version\n"
+msgstr " --major-os-version <numara> OS için en alt gerekli sürümü belirler\n"
+
+#: emultempl/pe.em:308
+#, c-format
+msgid " --major-subsystem-version <number> Set minimum required OS subsystem version\n"
+msgstr ""
+" --major-subsystem-version <numara> OS alt sistem sürümü için en küçük gerekli\n"
+" sürüm sayısını belirler\n"
+
+#: emultempl/pe.em:309
+#, c-format
+msgid " --minor-image-version <number> Set revision number of the executable\n"
+msgstr " --minor-image-version <numara> Uygulamanın değişim sayısını ayarlar\n"
+
+#: emultempl/pe.em:310
+#, c-format
+msgid " --minor-os-version <number> Set minimum required OS revision\n"
+msgstr " --minor-os-version <numara> Gerekli en alt OS deÄŸiÅŸimini belirler\n"
+
+#: emultempl/pe.em:311
+#, c-format
+msgid " --minor-subsystem-version <number> Set minimum required OS subsystem revision\n"
+msgstr ""
+" --minor-subsystem-version <numara> Gerekli en alt OS alt sistem deÄŸiÅŸim\n"
+" sayısını belirler\n"
+
+#: emultempl/pe.em:312
+#, c-format
+msgid " --section-alignment <size> Set section alignment\n"
+msgstr " --section-alignment <boy> Bölüm hizalamasını ayarlar\n"
+
+#: emultempl/pe.em:313
+#, c-format
+msgid " --stack <size> Set size of the initial stack\n"
+msgstr " --stack <boy> Yığıtın ilk boyunu belirler\n"
+
+#: emultempl/pe.em:314
+#, c-format
+msgid " --subsystem <name>[:<version>] Set required OS subsystem [& version]\n"
+msgstr " --subsystem <isim>[:<sürüm>] Gerekli OS, altsistem ve sürümü belirler\n"
+
+#: emultempl/pe.em:315
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code Eski kod ile beraber çalışmayı destekler\n"
+
+#: emultempl/pe.em:316
+#, c-format
+msgid " --thumb-entry=<symbol> Set the entry point to be Thumb <symbol>\n"
+msgstr " --thumb-entry=<sembol> Giriş noktasını Thumb <sembol> olarak atar\n"
+
+#: emultempl/pe.em:318
+#, c-format
+msgid " --add-stdcall-alias Export symbols with and without @nn\n"
+msgstr " --add-stdcall-alias Sembolleri @nn ile ve @nn'siz ihraç eder\n"
+
+#: emultempl/pe.em:319
+#, c-format
+msgid " --disable-stdcall-fixup Don't link _sym to _sym@nn\n"
+msgstr " --disable-stdcall-fixup _sym'i _sym@nn'e baÄŸlamaz\n"
+
+#: emultempl/pe.em:320
+#, c-format
+msgid " --enable-stdcall-fixup Link _sym to _sym@nn without warnings\n"
+msgstr " --enable-stdcall-fixup _sym'i _sym@nn'e uyarı vermeksizin bağlar\n"
+
+#: emultempl/pe.em:321
+#, c-format
+msgid " --exclude-symbols sym,sym,... Exclude symbols from automatic export\n"
+msgstr " --exclude-symbols sem,sem,... Sembolleri otomatik ihraçtan ayrı tutar\n"
+
+#: emultempl/pe.em:322
+#, c-format
+msgid " --exclude-libs lib,lib,... Exclude libraries from automatic export\n"
+msgstr " --exclude-libs lib,lib,... Kitaplıkları otomatik ihraçtan ayrı tutar\n"
+
+#: emultempl/pe.em:323
+#, c-format
+msgid " --export-all-symbols Automatically export all globals to DLL\n"
+msgstr " --export-all-symbols Bütün evrenselleri DLL'e ihraç eder\n"
+
+#: emultempl/pe.em:324
+#, c-format
+msgid " --kill-at Remove @nn from exported symbols\n"
+msgstr " --kill-at İhraç edilen sembollerden @nn'i çıkarır\n"
+
+#: emultempl/pe.em:325
+#, c-format
+msgid " --out-implib <file> Generate import library\n"
+msgstr " --out-implib <dosya> İthal kitaplığı oluşturur\n"
+
+#: emultempl/pe.em:326
+#, c-format
+msgid " --output-def <file> Generate a .DEF file for the built DLL\n"
+msgstr ""
+" --output-def <dosya> Oluşturulmuş DLL için .DEF dosyası\n"
+" oluÅŸturur\n"
+
+#: emultempl/pe.em:327
+#, c-format
+msgid " --warn-duplicate-exports Warn about duplicate exports.\n"
+msgstr " --warn-duplicate-exports Birden fazla ihraçlarda uyarı verir\n"
+
+#: emultempl/pe.em:328
+#, c-format
+msgid ""
+" --compat-implib Create backward compatible import libs;\n"
+" create __imp_<SYMBOL> as well.\n"
+msgstr ""
+" --compat-implib Geçmişe uyumlu ithal kitaplığı ve\n"
+" __imp_<SEMBOL> oluÅŸturur.\n"
+
+#: emultempl/pe.em:330
+#, c-format
+msgid ""
+" --enable-auto-image-base Automatically choose image base for DLLs\n"
+" unless user specifies one\n"
+msgstr ""
+" --enable-auto-image-base Kullanıcılar bir görüntü temeli seçmezse\n"
+" DLL'ler için otomatik görüntü temeli seçer\n"
+
+#: emultempl/pe.em:332
+#, c-format
+msgid " --disable-auto-image-base Do not auto-choose image base. (default)\n"
+msgstr ""
+" --disable-auto-image-base Görüntü temelini otomatik olarak seçmez\n"
+" (öntanımlı).\n"
+
+#: emultempl/pe.em:333
+#, c-format
+msgid ""
+" --dll-search-prefix=<string> When linking dynamically to a dll without\n"
+" an importlib, use <string><basename>.dll\n"
+" in preference to lib<basename>.dll \n"
+msgstr ""
+" --dll-search-prefix=<dizge> Bir dll'e ithal kitaplığı olmaksızın\n"
+" dinamik bağlanma esnasında\n"
+" lib<temeladı>.dll yerine\n"
+" <dizge><temeladı>.dll'i tercih eder\n"
+
+#: emultempl/pe.em:336
+#, c-format
+msgid ""
+" --enable-auto-import Do sophistcated linking of _sym to\n"
+" __imp_sym for DATA references\n"
+msgstr ""
+" --enable-auto-import VERİ (DATA) başvuruları için _sym'in\n"
+" __imp_sym'e ileri düzey bağlamasını yapar\n"
+
+#: emultempl/pe.em:338
+#, c-format
+msgid " --disable-auto-import Do not auto-import DATA items from DLLs\n"
+msgstr " --disable-auto-image-base Görüntü temelini otomatik olarak seçmez\n"
+
+#: emultempl/pe.em:339
+#, c-format
+msgid ""
+" --enable-runtime-pseudo-reloc Work around auto-import limitations by\n"
+" adding pseudo-relocations resolved at\n"
+" runtime.\n"
+msgstr ""
+" --enable-runtime-pseudo-reloc Çalışma zamanında çözümlenen sanal \n"
+" yerdeÄŸiÅŸimler ekleyerek otomatik ithal \n"
+" sınırlamalarını aşar.\n"
+
+#: emultempl/pe.em:342
+#, c-format
+msgid ""
+" --disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations for\n"
+" auto-imported DATA.\n"
+msgstr ""
+" --disable-runtime-pseudo-reloc Otomatik ithal edilen VERİ (DATA) için\n"
+" çalışma zamanı sanal yerdeğişim eklemez.\n"
+
+#: emultempl/pe.em:344
+#, c-format
+msgid ""
+" --enable-extra-pe-debug Enable verbose debug output when building\n"
+" or linking to DLLs (esp. auto-import)\n"
+msgstr ""
+" --enable-extra-pe-debug DLL'leri oluÅŸturur veya DLL'lere\n"
+" bağlanırken detaylı hata ayıklama\n"
+" çıktısını etkinleştirir. (özellikle\n"
+" otomatik ithallerde)\n"
+
+#: emultempl/pe.em:347
+#, fuzzy, c-format
+msgid ""
+" --large-address-aware Executable supports virtual addresses\n"
+" greater than 2 gigabytes\n"
+msgstr ""
+" --enable-auto-image-base Kullanıcılar bir görüntü temeli seçmezse\n"
+" DLL'ler için otomatik görüntü temeli seçer\n"
+
+#: emultempl/pe.em:414
+msgid "%P: warning: bad version number in -subsystem option\n"
+msgstr "%P: uyarı: -subsystem seçeneğinde hatalı sürüm sayısı\n"
+
+#: emultempl/pe.em:445
+msgid "%P%F: invalid subsystem type %s\n"
+msgstr "%P%F: geçersiz altsistem türü %s\n"
+
+#: emultempl/pe.em:484
+msgid "%P%F: invalid hex number for PE parameter '%s'\n"
+msgstr "%P%F: PE parametresi '%s' için geçersiz onaltılık sayı\n"
+
+#: emultempl/pe.em:501
+msgid "%P%F: strange hex info for PE parameter '%s'\n"
+msgstr "%P%F: PE parametresi '%s' için garip onaltılık bilgi\n"
+
+#: emultempl/pe.em:518
+#, c-format
+msgid "%s: Can't open base file %s\n"
+msgstr "%s: %s temel dosyası açılamadı\n"
+
+#: emultempl/pe.em:734
+msgid "%P: warning, file alignment > section alignment.\n"
+msgstr "%P: uyarı, dosya hizalaması > bölüm hizalaması.\n"
+
+#: emultempl/pe.em:821 emultempl/pe.em:848
+#, c-format
+msgid "Warning: resolving %s by linking to %s\n"
+msgstr "Uyarı: %s %s'yi bağlayarak çözümleniyor\n"
+
+#: emultempl/pe.em:826 emultempl/pe.em:853
+msgid "Use --enable-stdcall-fixup to disable these warnings\n"
+msgstr "Bu uyarıları etkisizleşirmek için --enable-stdcall-fixup kullanın\n"
+
+#: emultempl/pe.em:827 emultempl/pe.em:854
+msgid "Use --disable-stdcall-fixup to disable these fixups\n"
+msgstr "Bu düzeltmeleri etkisizleştirmek için --disable-stdcall-fixup kullanın\n"
+
+#: emultempl/pe.em:873
+#, c-format
+msgid "%C: Cannot get section contents - auto-import exception\n"
+msgstr "%C: Bölüm içerikleri alınamadı - otomatik ithal hatası\n"
+
+#: emultempl/pe.em:910
+#, c-format
+msgid "Info: resolving %s by linking to %s (auto-import)\n"
+msgstr "Bilgi: %s %s'yi bağlayarak çözümleniyor (oto-ithal)\n"
+
+#: emultempl/pe.em:983
+msgid "%F%P: PE operations on non PE file.\n"
+msgstr "%F%P: PE dosyası olmayan dosya üzerinde PE işlemleri.\n"
+
+#: emultempl/pe.em:1258
+#, c-format
+msgid "Errors encountered processing file %s\n"
+msgstr "%s dosyası işlenirken hata oluştu\n"
+
+#: emultempl/pe.em:1281
+#, c-format
+msgid "Errors encountered processing file %s for interworking"
+msgstr "%s dosyası beraber çalışma için işlenirken hata oluştu"
+
+#: emultempl/pe.em:1340 ldexp.c:570 ldlang.c:2408 ldlang.c:5135 ldlang.c:5166
+#: ldmain.c:1161
+msgid "%P%F: bfd_link_hash_lookup failed: %E\n"
+msgstr "%P%F: bfd_link_hash_lookup başarısız: %E\n"
+
+#: ldcref.c:153
+msgid "%X%P: bfd_hash_table_init of cref table failed: %E\n"
+msgstr "%X%P: cref tablosunda bfd_hash_table_init başarısız: %E\n"
+
+#: ldcref.c:159
+msgid "%X%P: cref_hash_lookup failed: %E\n"
+msgstr "%X%P: cref_hash_lookup başarısız: %E\n"
+
+#: ldcref.c:225
+#, c-format
+msgid ""
+"\n"
+"Cross Reference Table\n"
+"\n"
+msgstr ""
+"\n"
+"Çapraz Başvuru Tablosu\n"
+"\n"
+
+#: ldcref.c:226
+msgid "Symbol"
+msgstr "Sembol"
+
+#: ldcref.c:234
+#, c-format
+msgid "File\n"
+msgstr "Dosya\n"
+
+#: ldcref.c:238
+#, c-format
+msgid "No symbols\n"
+msgstr "Sembol yok\n"
+
+#: ldcref.c:359 ldcref.c:478
+msgid "%B%F: could not read symbols; %E\n"
+msgstr "%B%F: semboller okunamadı; %E\n"
+
+#: ldcref.c:363 ldcref.c:482 ldmain.c:1226 ldmain.c:1230
+msgid "%B%F: could not read symbols: %E\n"
+msgstr "%B%F: semboller okunamadı: %E\n"
+
+#: ldcref.c:414
+msgid "%P: symbol `%T' missing from main hash table\n"
+msgstr "%P: `%T' sembolü ana hash tablosunda yok\n"
+
+#: ldcref.c:547 ldcref.c:554 ldmain.c:1273 ldmain.c:1280
+msgid "%B%F: could not read relocs: %E\n"
+msgstr "%B%F: yer değişimleri okunamadı: %E\n"
+
+#. We found a reloc for the symbol. The symbol is defined
+#. in OUTSECNAME. This reloc is from a section which is
+#. mapped into a section from which references to OUTSECNAME
+#. are prohibited. We must report an error.
+#: ldcref.c:573
+msgid "%X%C: prohibited cross reference from %s to `%T' in %s\n"
+msgstr "%1$X%2$C: %5$s içinde %3$s'den `%4$T'e yasak çapraz başvuru\n"
+
+#: ldctor.c:84
+msgid "%P%X: Different relocs used in set %s\n"
+msgstr "%P%X: %s kümesinde farklı yerdeğişimler kullanılmış\n"
+
+#: ldctor.c:102
+msgid "%P%X: Different object file formats composing set %s\n"
+msgstr "%P%X: %s kümesi farklı nesne dosyası biçemleri içeriyor\n"
+
+#: ldctor.c:281 ldctor.c:295
+msgid "%P%X: %s does not support reloc %s for set %s\n"
+msgstr "%1$P%2$X: %3$s %5$s %4$s yerdeÄŸiÅŸimlerini desteklemiyor\n"
+
+#: ldctor.c:316
+msgid "%P%X: Unsupported size %d for set %s\n"
+msgstr "%1$P%2$X: %4$s kümesi için desteklenmeyen boy %3$d\n"
+
+#: ldctor.c:337
+msgid ""
+"\n"
+"Set Symbol\n"
+"\n"
+msgstr ""
+"\n"
+"Küme Sembol\n"
+"\n"
+
+#: ldemul.c:227
+#, c-format
+msgid "%S SYSLIB ignored\n"
+msgstr "%S SYSLIB yoksayıldı\n"
+
+#: ldemul.c:233
+#, c-format
+msgid "%S HLL ignored\n"
+msgstr "%S HLL yoksayıldı\n"
+
+#: ldemul.c:253
+msgid "%P: unrecognised emulation mode: %s\n"
+msgstr "%P: bilinmeyen öykünüm kipi: %s\n"
+
+#: ldemul.c:254
+msgid "Supported emulations: "
+msgstr "Desteklenen öykünümler: "
+
+#: ldemul.c:296
+#, c-format
+msgid " no emulation specific options.\n"
+msgstr " öykünüme özel seçenek yok.\n"
+
+#: ldexp.c:379
+#, c-format
+msgid "%F%S %% by zero\n"
+msgstr "%F%S %% sıfırla\n"
+
+#: ldexp.c:386
+#, c-format
+msgid "%F%S / by zero\n"
+msgstr "%F%S sıfırla bölme\n"
+
+#: ldexp.c:583
+#, c-format
+msgid "%X%S: unresolvable symbol `%s' referenced in expression\n"
+msgstr "%X%S: ifadede çözümlenemeyen `%s' sembolüne başvuru var\n"
+
+#: ldexp.c:604
+#, c-format
+msgid "%F%S: undefined symbol `%s' referenced in expression\n"
+msgstr "%F%S: ifadede tanımlanmamış `%s' sembolüne başvuru var\n"
+
+#: ldexp.c:665 ldexp.c:678
+#, fuzzy, c-format
+msgid "%F%S: undefined MEMORY region `%s' referenced in expression\n"
+msgstr "%F%S: ifadede tanımlanmamış `%s' sembolüne başvuru var\n"
+
+#: ldexp.c:757
+#, c-format
+msgid "%F%S can not PROVIDE assignment to location counter\n"
+msgstr "%F%S yer sayacına atama YAPILAMAZ\n"
+
+#: ldexp.c:770
+#, c-format
+msgid "%F%S invalid assignment to location counter\n"
+msgstr "%F%S yer sayacına hatalı atama\n"
+
+#: ldexp.c:774
+#, c-format
+msgid "%F%S assignment to location counter invalid outside of SECTION\n"
+msgstr "%F%S yer sayacına atama BÖLÜM'ün dışında geçersiz\n"
+
+#: ldexp.c:783
+msgid "%F%S cannot move location counter backwards (from %V to %V)\n"
+msgstr "%F%S yer sayacı geri gidemez (%V'den %V'e)\n"
+
+#: ldexp.c:810
+msgid "%P%F:%s: hash creation failed\n"
+msgstr "%P%F:%s: hash oluşturulması başarısız\n"
+
+#: ldexp.c:1077 ldexp.c:1109
+#, c-format
+msgid "%F%S nonconstant expression for %s\n"
+msgstr "%F%S %s için sabit olmayan ifade\n"
+
+#: ldexp.c:1163
+#, c-format
+msgid "%F%S non constant expression for %s\n"
+msgstr "%F%S %s için sabit olmayan ifade\n"
+
+#: ldfile.c:139
+#, c-format
+msgid "attempt to open %s failed\n"
+msgstr "%s açılamadı\n"
+
+#: ldfile.c:141
+#, c-format
+msgid "attempt to open %s succeeded\n"
+msgstr "%s açılabildi\n"
+
+#: ldfile.c:147
+msgid "%F%P: invalid BFD target `%s'\n"
+msgstr "%F%P: hatalı BFD hedefi `%s'\n"
+
+#: ldfile.c:255 ldfile.c:282
+msgid "%P: skipping incompatible %s when searching for %s\n"
+msgstr "%1$P: %3$s için arama yapılırken uyumsuz %2$s atlandı\n"
+
+#: ldfile.c:267
+msgid "%F%P: attempted static link of dynamic object `%s'\n"
+msgstr ""
+
+#: ldfile.c:384
+#, fuzzy
+msgid "%F%P: %s (%s): No such file: %E\n"
+msgstr "%F%P: bölümü çoğaltmak başarısız : %E\n"
+
+#: ldfile.c:387
+#, fuzzy
+msgid "%F%P: %s: No such file: %E\n"
+msgstr "%F%P: bölümü çoğaltmak başarısız : %E\n"
+
+#: ldfile.c:417
+msgid "%F%P: cannot find %s inside %s\n"
+msgstr "%F%P: %s, %s içinde bulunamadı\n"
+
+#: ldfile.c:420
+msgid "%F%P: cannot find %s\n"
+msgstr "%F%P: %s bulunamadı\n"
+
+#: ldfile.c:437 ldfile.c:453
+#, c-format
+msgid "cannot find script file %s\n"
+msgstr "%s betik dosyası bulunamadı\n"
+
+#: ldfile.c:439 ldfile.c:455
+#, c-format
+msgid "opened script file %s\n"
+msgstr "%s betik dosyası açıldı\n"
+
+#: ldfile.c:499
+msgid "%P%F: cannot open linker script file %s: %E\n"
+msgstr "%P%F: %s bağlayıcı betik dosyası açılamadı: %E\n"
+
+#: ldfile.c:546
+msgid "%P%F: cannot represent machine `%s'\n"
+msgstr "%P%F: `%s' makinası gösterilemiyor\n"
+
+#: ldlang.c:511
+msgid "%P%F: out of memory during initialization"
+msgstr ""
+
+#: ldlang.c:551
+#, fuzzy
+msgid "%P:%S: warning: redeclaration of memory region '%s'\n"
+msgstr "%P: %B: uyarı: birden fazla tekrar edilmiş `%s' bölümü yoksayıldı\n"
+
+#: ldlang.c:557
+#, fuzzy
+msgid "%P:%S: warning: memory region %s not declared\n"
+msgstr "%P: uyarı: `%s' yüklenebilir bölümü için bellek bölümü belirtilmemiş\n"
+
+#: ldlang.c:1073
+msgid ""
+"\n"
+"Memory Configuration\n"
+"\n"
+msgstr ""
+"\n"
+"Bellek Ayarları\n"
+"\n"
+
+#: ldlang.c:1075
+msgid "Name"
+msgstr "Ä°sim"
+
+#: ldlang.c:1075
+msgid "Origin"
+msgstr "Orijin"
+
+#: ldlang.c:1075
+msgid "Length"
+msgstr "Uzunluk"
+
+#: ldlang.c:1075
+msgid "Attributes"
+msgstr "Özellikler"
+
+#: ldlang.c:1115
+#, c-format
+msgid ""
+"\n"
+"Linker script and memory map\n"
+"\n"
+msgstr ""
+"\n"
+"Bağlayıcı betiği ve bellek eşlemesi\n"
+"\n"
+
+#: ldlang.c:1183
+msgid "%P%F: Illegal use of `%s' section\n"
+msgstr "%P%F: `%s' bölümünün geçersiz kullanımı\n"
+
+#: ldlang.c:1193
+msgid "%P%F: output format %s cannot represent section called %s\n"
+msgstr "%P%F: %s çıktı biçemi %s adındaki bölümü temsil edemez\n"
+
+#: ldlang.c:1775
+msgid "%B: file not recognized: %E\n"
+msgstr "%B: Bilinmeyen dosya: %E\n"
+
+#: ldlang.c:1776
+msgid "%B: matching formats:"
+msgstr "%B: eşleşen biçemler:"
+
+#: ldlang.c:1783
+msgid "%F%B: file not recognized: %E\n"
+msgstr "%F%B: bilinmeyen dosya: %E\n"
+
+#: ldlang.c:1847
+msgid "%F%B: member %B in archive is not an object\n"
+msgstr "%F%B: arÅŸivdeki %B nesnesi nesne deÄŸil\n"
+
+#: ldlang.c:1858 ldlang.c:1872
+msgid "%F%B: could not read symbols: %E\n"
+msgstr "%F%B: semboller okunamadı: %E\n"
+
+#: ldlang.c:2127
+msgid "%P: warning: could not find any targets that match endianness requirement\n"
+msgstr "%P: uyarı: küçük/büyük sonlu gerekliliğini karşılayan hedef bulunamadı\n"
+
+#: ldlang.c:2141
+msgid "%P%F: target %s not found\n"
+msgstr "%P%F: %s hedefi bulunamadı\n"
+
+#: ldlang.c:2143
+msgid "%P%F: cannot open output file %s: %E\n"
+msgstr "%P%F: %s çıktı dosyası açılamadı: %E\n"
+
+#: ldlang.c:2149
+msgid "%P%F:%s: can not make object file: %E\n"
+msgstr "%P%F:%s: nesne dosyası oluşturulamadı: %E\n"
+
+#: ldlang.c:2153
+msgid "%P%F:%s: can not set architecture: %E\n"
+msgstr "%P%F:%s: platform türü atanamadı: %E\n"
+
+#: ldlang.c:2157
+msgid "%P%F: can not create link hash table: %E\n"
+msgstr "%P%F: bağ hash tablosu oluşturulamadı: %E\n"
+
+#: ldlang.c:2301
+#, fuzzy
+msgid "%P%F: bfd_hash_lookup failed creating symbol %s\n"
+msgstr "%P%F: bfd_hash_lookup başarısız: %E\n"
+
+#: ldlang.c:2319
+#, fuzzy
+msgid "%P%F: bfd_hash_allocate failed creating symbol %s\n"
+msgstr "%P%F: bfd_hash_lookup başarısız: %E\n"
+
+#: ldlang.c:2710
+msgid " load address 0x%V"
+msgstr " yükleme adresi 0x%V"
+
+#: ldlang.c:2874
+msgid "%W (size before relaxing)\n"
+msgstr "%W (gevşetmeden önceki boyut)\n"
+
+#: ldlang.c:2961
+#, c-format
+msgid "Address of section %s set to "
+msgstr "%s bölümünün adresi atanmış"
+
+#: ldlang.c:3114
+#, c-format
+msgid "Fail with %d\n"
+msgstr "%d hatası verildi\n"
+
+#: ldlang.c:3351
+msgid "%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"
+msgstr "%X%P: %s bölümü [%V -> %V] %s bölümü [%V -> %V] ile örtüşüyor\n"
+
+#: ldlang.c:3379
+msgid "%X%P: address 0x%v of %B section %s is not within region %s\n"
+msgstr "%1$X%2$P: %5$s %4$B bölümünde 0x%3$v adresi %6$s kapsamı içinde değil\n"
+
+#: ldlang.c:3388
+msgid "%X%P: region %s is full (%B section %s)\n"
+msgstr "%X%P: %s bölümü dolu (%B %s bölümü)\n"
+
+#: ldlang.c:3439
+msgid "%P%X: Internal error on COFF shared library section %s\n"
+msgstr "%P%X: %s COFF paylaşımlı kitaplık bölümünde iç hata\n"
+
+#: ldlang.c:3493
+msgid "%P%F: error: no memory region specified for loadable section `%s'\n"
+msgstr "%P%F: hata: `%s' yüklenebilir bölümü için bellek bölümü belirtilmemiş\n"
+
+#: ldlang.c:3498
+msgid "%P: warning: no memory region specified for loadable section `%s'\n"
+msgstr "%P: uyarı: `%s' yüklenebilir bölümü için bellek bölümü belirtilmemiş\n"
+
+#: ldlang.c:3515
+msgid "%P: warning: changing start of section %s by %u bytes\n"
+msgstr "%P: uyarı: %s bölümünün başlangıcı %u bayt değiştirildi\n"
+
+#: ldlang.c:3532
+#, fuzzy, c-format
+msgid "%F%S: non constant or forward reference address expression for section %s\n"
+msgstr "%F%S: %s bölümü için sabit olmayan adres açılımı\n"
+
+#: ldlang.c:3703
+msgid "%P%F: can't relax section: %E\n"
+msgstr "%P%F: bölüm gevşetilemedi: %E\n"
+
+#: ldlang.c:3960
+msgid "%F%P: invalid data statement\n"
+msgstr "%F%P: geçersiz veri deyimi\n"
+
+#: ldlang.c:3999
+msgid "%F%P: invalid reloc statement\n"
+msgstr "%F%P: geçersiz yerdeğişim deyimi\n"
+
+#: ldlang.c:4141
+msgid "%P%F:%s: can't set start address\n"
+msgstr "%P%F:%s: başlangıç adresi atanamadı\n"
+
+#: ldlang.c:4154 ldlang.c:4173
+msgid "%P%F: can't set start address\n"
+msgstr "%P%F: başlangıç adresi atanamadı\n"
+
+#: ldlang.c:4166
+msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n"
+msgstr "%P: uyarı: giriş sembolü %s bulunamadı; öntanımlı %V kullanılıyor\n"
+
+#: ldlang.c:4178
+msgid "%P: warning: cannot find entry symbol %s; not setting start address\n"
+msgstr "%P: uyarı: giriş sembolü %s bulunamadı; başlangıç adresi atanmıyor\n"
+
+#: ldlang.c:4227
+msgid "%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"
+msgstr "%P%F: %s (%B) biçeminden yerdeğişimlerle %s (%B) biçemine yerdeğiştirebilen bağlanma desteklenmiyor\n"
+
+#: ldlang.c:4237
+msgid "%P: warning: %s architecture of input file `%B' is incompatible with %s output\n"
+msgstr "%1$P: uyarı: `%3$B' girdi dosyasının platformu %2$s, %4$s çıktısıyla uyumlu değil\n"
+
+#: ldlang.c:4259
+#, fuzzy
+msgid "%P%X: failed to merge target specific data of file %B\n"
+msgstr "%E%X: %B dosyasındaki hedefe özel veri birleştirilemedi\n"
+
+#: ldlang.c:4343
+msgid ""
+"\n"
+"Allocating common symbols\n"
+msgstr ""
+"\n"
+"Ortak sembollere bellek ayrılıyor\n"
+
+#: ldlang.c:4344
+msgid ""
+"Common symbol size file\n"
+"\n"
+msgstr ""
+"Ortak sembol boy dosya\n"
+"\n"
+
+#: ldlang.c:4470
+msgid "%P%F: invalid syntax in flags\n"
+msgstr "%P%F: bayraklarda geçersiz sözdizimi\n"
+
+#: ldlang.c:4740
+msgid "%P%F: Failed to create hash table\n"
+msgstr "%P%F: Hash tablosu oluşturulamadı\n"
+
+#: ldlang.c:5057
+msgid "%P%Fmultiple STARTUP files\n"
+msgstr "%P%Fbirden fazla BAŞLANGIÇ dosyası\n"
+
+#: ldlang.c:5105
+msgid "%X%P:%S: section has both a load address and a load region\n"
+msgstr "%X%P:%S: bölümün hem bir yükleme adresi, hem de bir yükleme bölgesi var\n"
+
+#: ldlang.c:5345
+msgid "%F%P: bfd_record_phdr failed: %E\n"
+msgstr "%F%P: bfd_record_phdr başarısız: %E\n"
+
+#: ldlang.c:5365
+msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n"
+msgstr "%X%P: `%s' bölümü var olmayan phdr `%s'a atanmış\n"
+
+#: ldlang.c:5751
+msgid "%X%P: unknown language `%s' in version information\n"
+msgstr "%X%P: sürüm bilgisinde bilinmeyen `%s' dili\n"
+
+#: ldlang.c:5893
+msgid "%X%P: anonymous version tag cannot be combined with other version tags\n"
+msgstr "%X%P: anonim sürüm etiketi diğer sürüm etiketleri ile birleştirilemez\n"
+
+#: ldlang.c:5902
+msgid "%X%P: duplicate version tag `%s'\n"
+msgstr "%X%P: birden fazla sürüm etiketi `%s'\n"
+
+#: ldlang.c:5922 ldlang.c:5931 ldlang.c:5948 ldlang.c:5958
+msgid "%X%P: duplicate expression `%s' in version information\n"
+msgstr "%X%P: sürüm bilgisinde birden fazla `%s' ifadesi\n"
+
+#: ldlang.c:5998
+msgid "%X%P: unable to find version dependency `%s'\n"
+msgstr "%X%P: sürüm bağımlılığı `%s' karşılanamadı\n"
+
+#: ldlang.c:6020
+msgid "%X%P: unable to read .exports section contents\n"
+msgstr "%X%P: .exports bölümünün içeriği okunamadı\n"
+
+#: ldmain.c:229
+msgid "%X%P: can't set BFD default target to `%s': %E\n"
+msgstr "%X%P: BFD öntanımlı hedefi `%s' olarak atanamadı: %E\n"
+
+#: ldmain.c:341
+msgid "%P%F: --relax and -r may not be used together\n"
+msgstr "%P%F: --relax ve -r beraber kullanılamaz\n"
+
+#: ldmain.c:343
+msgid "%P%F: -r and -shared may not be used together\n"
+msgstr "%P%F: -r ve -shared beraber kullanılamaz\n"
+
+#: ldmain.c:347
+#, fuzzy
+msgid "%P%F: -static and -shared may not be used together\n"
+msgstr "%P%F: -r ve -shared beraber kullanılamaz\n"
+
+#: ldmain.c:352
+msgid "%P%F: -F may not be used without -shared\n"
+msgstr "%P%F: -F, -shared olmaksızın kullanılamaz\n"
+
+#: ldmain.c:354
+msgid "%P%F: -f may not be used without -shared\n"
+msgstr "%P%F: -f, -shared olmaksızın kullanılamaz\n"
+
+#: ldmain.c:396
+msgid "using external linker script:"
+msgstr "dış bağlayıcı betiği kullanılıyor:"
+
+#: ldmain.c:398
+msgid "using internal linker script:"
+msgstr "iç bağlayıcı betiği kullanılıyor:"
+
+#: ldmain.c:432
+msgid "%P%F: no input files\n"
+msgstr "%P%F: girdi dosyası yok\n"
+
+#: ldmain.c:436
+msgid "%P: mode %s\n"
+msgstr "%P: %s kipi\n"
+
+#: ldmain.c:452
+msgid "%P%F: cannot open map file %s: %E\n"
+msgstr "%P%F: Eşleme dosyası %s açılamadı: %E\n"
+
+#: ldmain.c:482
+msgid "%P: link errors found, deleting executable `%s'\n"
+msgstr "%P: bağlama hataları bulundu, `%s' uygulaması siliniyor\n"
+
+#: ldmain.c:491
+msgid "%F%B: final close failed: %E\n"
+msgstr "%F%B: son kapatma başarısız: %E\n"
+
+#: ldmain.c:517
+msgid "%X%P: unable to open for source of copy `%s'\n"
+msgstr "%X%P: `%s' kopyasının kaynağı açılamadı\n"
+
+#: ldmain.c:520
+msgid "%X%P: unable to open for destination of copy `%s'\n"
+msgstr "%X%P: `%s' kopyası için hedef açılamadı\n"
+
+#: ldmain.c:527
+msgid "%P: Error writing file `%s'\n"
+msgstr "%P: `%s' dosyası yazılırken hata oluştu\n"
+
+#: ldmain.c:532 pe-dll.c:1447
+#, c-format
+msgid "%P: Error closing file `%s'\n"
+msgstr "%P: `%s' dosyası kapatılırken hata oluştu\n"
+
+#: ldmain.c:548
+#, c-format
+msgid "%s: total time in link: %ld.%06ld\n"
+msgstr "%s: Bağlanmada geçen toplam süre: %ld.%06ld\n"
+
+#: ldmain.c:551
+#, c-format
+msgid "%s: data size %ld\n"
+msgstr "%s: veri boyu %ld\n"
+
+#: ldmain.c:634
+msgid "%P%F: missing argument to -m\n"
+msgstr "%P%F: -m için argüman eksik\n"
+
+#: ldmain.c:780 ldmain.c:798 ldmain.c:828
+msgid "%P%F: bfd_hash_table_init failed: %E\n"
+msgstr "%P%F: bfd_hash_table_init başarısız: %E\n"
+
+#: ldmain.c:784 ldmain.c:802
+msgid "%P%F: bfd_hash_lookup failed: %E\n"
+msgstr "%P%F: bfd_hash_lookup başarısız: %E\n"
+
+#: ldmain.c:816
+msgid "%X%P: error: duplicate retain-symbols-file\n"
+msgstr "%X%P: hata: duplicate retain-symbols-file\n"
+
+#: ldmain.c:858
+msgid "%P%F: bfd_hash_lookup for insertion failed: %E\n"
+msgstr "%P%F: yerleştirme için bfd_hash_lookup başarısız: %E\n"
+
+#: ldmain.c:863
+msgid "%P: `-retain-symbols-file' overrides `-s' and `-S'\n"
+msgstr "%P: `-retain-symbols-file' seçeneği `-s' and `-S' seçeneklerinin yerine geçer\n"
+
+#: ldmain.c:938
+#, c-format
+msgid ""
+"Archive member included because of file (symbol)\n"
+"\n"
+msgstr ""
+"Arşiv üyesi dosya yüzünden (sembol) içerildi\n"
+"\n"
+
+#: ldmain.c:1008
+msgid "%X%C: multiple definition of `%T'\n"
+msgstr "%X%C: `%T' için birden fazla tanım\n"
+
+#: ldmain.c:1011
+msgid "%D: first defined here\n"
+msgstr "%D: ilk burada tanımlanmış\n"
+
+#: ldmain.c:1015
+msgid "%P: Disabling relaxation: it will not work with multiple definitions\n"
+msgstr "%P: Gevşetme etkisizleştirildi: çoklu tanımlarla beraber çalışmaz\n"
+
+#: ldmain.c:1045
+msgid "%B: warning: definition of `%T' overriding common\n"
+msgstr "%B: uyarı: `%T' tanımı genelin yerine geçiyor\n"
+
+#: ldmain.c:1048
+msgid "%B: warning: common is here\n"
+msgstr "%B: uyarı: genel burada\n"
+
+#: ldmain.c:1055
+msgid "%B: warning: common of `%T' overridden by definition\n"
+msgstr "%B: uyarı: tanım, `%T'nin genelinin yerine geçti\n"
+
+#: ldmain.c:1058
+msgid "%B: warning: defined here\n"
+msgstr "%B: uyarı: burada tanımlanmış\n"
+
+#: ldmain.c:1065
+msgid "%B: warning: common of `%T' overridden by larger common\n"
+msgstr "%B: uyarı: Daha büyük genel, `%T'nin genelinin yerine geçti\n"
+
+#: ldmain.c:1068
+msgid "%B: warning: larger common is here\n"
+msgstr "%B: uyarı: daha büyük genel burada\n"
+
+#: ldmain.c:1072
+msgid "%B: warning: common of `%T' overriding smaller common\n"
+msgstr "%B: uyarı: `%T'nin geneli daha küçük genelin yerine geçti\n"
+
+#: ldmain.c:1075
+msgid "%B: warning: smaller common is here\n"
+msgstr "%B: uyarı: daha küçük genel burada\n"
+
+#: ldmain.c:1079
+msgid "%B: warning: multiple common of `%T'\n"
+msgstr "%B: uyarı: `%T'nin birden fazla geneli var\n"
+
+#: ldmain.c:1081
+msgid "%B: warning: previous common is here\n"
+msgstr "%B: uyarı: bir önceki genel burada\n"
+
+#: ldmain.c:1101 ldmain.c:1139
+msgid "%P: warning: global constructor %s used\n"
+msgstr "%P: uyarı: evrensel kurucu %s kullanıldı\n"
+
+#: ldmain.c:1149
+msgid "%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"
+msgstr "%P%F: BFD arkayüz hatası: BFD_RELOC_CTOR desteklenmiyor\n"
+
+#. We found a reloc for the symbol we are looking for.
+#: ldmain.c:1203 ldmain.c:1205 ldmain.c:1207 ldmain.c:1245 ldmain.c:1293
+msgid "warning: "
+msgstr ""
+
+#: ldmain.c:1327
+msgid "%F%P: bfd_hash_table_init failed: %E\n"
+msgstr "%F%P: bfd_hash_table_init başarısız: %E\n"
+
+#: ldmain.c:1334
+msgid "%F%P: bfd_hash_lookup failed: %E\n"
+msgstr "%F%P: bfd_hash_lookup başarısız: %E\n"
+
+#: ldmain.c:1355
+#, fuzzy
+msgid "%X%C: undefined reference to `%T'\n"
+msgstr "%C: `%T'ye tanımsız başvuru\n"
+
+#: ldmain.c:1358
+#, fuzzy
+msgid "%C: warning: undefined reference to `%T'\n"
+msgstr "%C: `%T'ye tanımsız başvuru\n"
+
+#: ldmain.c:1364
+#, fuzzy
+msgid "%X%D: more undefined references to `%T' follow\n"
+msgstr "%D: `%T'ye başka tanımsız başvurular aşağıda\n"
+
+#: ldmain.c:1367
+#, fuzzy
+msgid "%D: warning: more undefined references to `%T' follow\n"
+msgstr "%D: `%T'ye başka tanımsız başvurular aşağıda\n"
+
+#: ldmain.c:1378
+#, fuzzy
+msgid "%X%B: undefined reference to `%T'\n"
+msgstr "%B: `%T'ye tanımsız başvuru\n"
+
+#: ldmain.c:1381
+#, fuzzy
+msgid "%B: warning: undefined reference to `%T'\n"
+msgstr "%B: `%T'ye tanımsız başvuru\n"
+
+#: ldmain.c:1387
+#, fuzzy
+msgid "%X%B: more undefined references to `%T' follow\n"
+msgstr "%B: `%T'ye başka tanımsız başvurular aşağıda\n"
+
+#: ldmain.c:1390
+#, fuzzy
+msgid "%B: warning: more undefined references to `%T' follow\n"
+msgstr "%B: `%T'ye başka tanımsız başvurular aşağıda\n"
+
+#: ldmain.c:1425 ldmain.c:1478 ldmain.c:1496
+msgid "%P%X: generated"
+msgstr "%P%X: oluÅŸturuldu"
+
+#: ldmain.c:1432
+msgid " additional relocation overflows omitted from the output\n"
+msgstr " ek yerdeğişim taşmaları çıktıya gönderilmedi\n"
+
+#: ldmain.c:1445
+#, fuzzy
+msgid " relocation truncated to fit: %s against undefined symbol `%T'"
+msgstr " yer değişim sığması için budandı: %s %T"
+
+#: ldmain.c:1450
+#, fuzzy
+msgid " relocation truncated to fit: %s against symbol `%T' defined in %A section in %B"
+msgstr " yer değişim sığması için budandı: %s %T"
+
+#: ldmain.c:1460
+#, fuzzy
+msgid " relocation truncated to fit: %s against `%T'"
+msgstr " yer değişim sığması için budandı: %s %T"
+
+#: ldmain.c:1481
+#, c-format
+msgid "dangerous relocation: %s\n"
+msgstr "tehlikeli yerdeÄŸiÅŸim: %s\n"
+
+#: ldmain.c:1499
+msgid " reloc refers to symbol `%T' which is not being output\n"
+msgstr " yer değişim, çıktılanmayan `%T' sembolüne referans veriyor\n"
+
+#: ldmisc.c:149
+#, c-format
+msgid "no symbol"
+msgstr "sembol yok"
+
+#: ldmisc.c:240
+#, c-format
+msgid "built in linker script:%u"
+msgstr "yerleşik bağlayıcı betiği:%u"
+
+#: ldmisc.c:289 ldmisc.c:293
+msgid "%B%F: could not read symbols\n"
+msgstr "%B%F: semboller okunamadı\n"
+
+#: ldmisc.c:329
+#, fuzzy
+msgid "%B: In function `%T':\n"
+msgstr ": `%T' Ä°ÅŸlevinde:\n"
+
+#: ldmisc.c:480
+msgid "%F%P: internal error %s %d\n"
+msgstr "%F%P: iç hata %s %d\n"
+
+#: ldmisc.c:526
+msgid "%P: internal error: aborting at %s line %d in %s\n"
+msgstr "%1$P: iç hata: %4$s içinde %3$d satırı %2$s'da durduruldu\n"
+
+#: ldmisc.c:529
+msgid "%P: internal error: aborting at %s line %d\n"
+msgstr "%P: iç hata: %s'da, %d satırında durduruldu\n"
+
+#: ldmisc.c:531
+msgid "%P%F: please report this bug\n"
+msgstr "%P%F: lütfen bu yazılım hatasını bildirin\n"
+
+#. Output for noisy == 2 is intended to follow the GNU standards.
+#: ldver.c:38
+#, c-format
+msgid "GNU ld version %s\n"
+msgstr "GNU ld sürüm %s\n"
+
+#: ldver.c:42
+#, fuzzy, c-format
+msgid "Copyright 2005 Free Software Foundation, Inc.\n"
+msgstr "Telif Hakkı 2002 Free Software Foundation, Inc.\n"
+
+#: ldver.c:43
+#, c-format
+msgid ""
+"This program is free software; you may redistribute it under the terms of\n"
+"the GNU General Public License. This program has absolutely no warranty.\n"
+msgstr ""
+"Bu, bir serbest yazılımdır; GNU Genel Kamu Lisansı koşulları altında değişiklik\n"
+"yapabilir ve/veya yeniden dağıtabilirsiniz. \n"
+"Bu yazılımın herhangi bir garantisi yoktur.\n"
+
+#: ldver.c:52
+#, c-format
+msgid " Supported emulations:\n"
+msgstr " Desteklenen öykünümler:\n"
+
+#: ldwrite.c:55 ldwrite.c:191
+msgid "%P%F: bfd_new_link_order failed\n"
+msgstr "%P%F: bfd_new_link_order başarısız\n"
+
+#: ldwrite.c:341
+#, fuzzy
+msgid "%F%P: cannot create split section name for %s\n"
+msgstr "%P%F: bağ hash tablosu oluşturulamadı: %E\n"
+
+#: ldwrite.c:353
+msgid "%F%P: clone section failed: %E\n"
+msgstr "%F%P: bölümü çoğaltmak başarısız : %E\n"
+
+#: ldwrite.c:391
+#, c-format
+msgid "%8x something else\n"
+msgstr "%8x baÅŸka bir ÅŸey\n"
+
+#: ldwrite.c:561
+msgid "%F%P: final link failed: %E\n"
+msgstr "%F%P: son bağlama başarısız: %E\n"
+
+#: lexsup.c:195 lexsup.c:327
+msgid "KEYWORD"
+msgstr "ANAHTARSÖZ"
+
+#: lexsup.c:195
+msgid "Shared library control for HP/UX compatibility"
+msgstr "HP/UX uyumluluğu için paylaşımlı kitaplık kontrolü"
+
+#: lexsup.c:198
+msgid "ARCH"
+msgstr "PLATFORM"
+
+#: lexsup.c:198
+msgid "Set architecture"
+msgstr "Platformu belirler"
+
+#: lexsup.c:200 lexsup.c:421
+msgid "TARGET"
+msgstr "HEDEF"
+
+#: lexsup.c:200
+msgid "Specify target for following input files"
+msgstr "Aşağıdaki girdi dosyaları için hedef belirler"
+
+#: lexsup.c:203 lexsup.c:252 lexsup.c:264 lexsup.c:277 lexsup.c:380
+#: lexsup.c:433 lexsup.c:490
+msgid "FILE"
+msgstr "DOSYA"
+
+#: lexsup.c:203
+msgid "Read MRI format linker script"
+msgstr "MRI biçeminde bağlayıcı betiği okur"
+
+#: lexsup.c:205
+msgid "Force common symbols to be defined"
+msgstr "genel sembollerin tanımlı olmasını şart koşar"
+
+#: lexsup.c:209 lexsup.c:475 lexsup.c:477 lexsup.c:479
+msgid "ADDRESS"
+msgstr "ADRES"
+
+#: lexsup.c:209
+msgid "Set start address"
+msgstr "Başlangıç adresini atar"
+
+#: lexsup.c:211
+msgid "Export all dynamic symbols"
+msgstr "Bütün dinamik sembolleri ihraç eder"
+
+#: lexsup.c:213
+msgid "Link big-endian objects"
+msgstr "Büyük sonlu nesneleri bağlar"
+
+#: lexsup.c:215
+msgid "Link little-endian objects"
+msgstr "Küçük-sonlu nesneleri bağlar"
+
+#: lexsup.c:217 lexsup.c:220
+msgid "SHLIB"
+msgstr "SHLIB"
+
+#: lexsup.c:217
+msgid "Auxiliary filter for shared object symbol table"
+msgstr "Paylaşımlı nesne sembol tablosu için ikincil filtre"
+
+#: lexsup.c:220
+msgid "Filter for shared object symbol table"
+msgstr "Paylaşımlı nesne sembol tablosu için filtre"
+
+#: lexsup.c:223
+msgid "Ignored"
+msgstr "Gözardı edilmiş"
+
+#: lexsup.c:225
+msgid "SIZE"
+msgstr "BOYUT"
+
+#: lexsup.c:225
+msgid "Small data size (if no size, same as --shared)"
+msgstr "Küçük veri boyu (eğer boy belirtilmemişse, --shared ile aynı)"
+
+#: lexsup.c:228
+msgid "FILENAME"
+msgstr "DOSYAÄ°SMÄ°"
+
+#: lexsup.c:228
+msgid "Set internal name of shared library"
+msgstr "Paylaşımlı kitaplığın iç adını belirler"
+
+#: lexsup.c:230
+msgid "PROGRAM"
+msgstr "YAZILIM"
+
+#: lexsup.c:230
+msgid "Set PROGRAM as the dynamic linker to use"
+msgstr "YAZILIM'ı kullanılacak dinamik bağlayıcı olarak atar"
+
+#: lexsup.c:233
+msgid "LIBNAME"
+msgstr "KÄ°TAPLIKADI"
+
+#: lexsup.c:233
+msgid "Search for library LIBNAME"
+msgstr "KİTAPLIKADI kitaplığını arar"
+
+#: lexsup.c:235
+msgid "DIRECTORY"
+msgstr "DÄ°ZÄ°N"
+
+#: lexsup.c:235
+msgid "Add DIRECTORY to library search path"
+msgstr "DİZİN'i kitaplık arama yoluna ekler"
+
+#: lexsup.c:238
+msgid "Override the default sysroot location"
+msgstr ""
+
+#: lexsup.c:240
+msgid "EMULATION"
+msgstr "ÖYKÜNÜM"
+
+#: lexsup.c:240
+msgid "Set emulation"
+msgstr "Öykünümü belirler"
+
+#: lexsup.c:242
+msgid "Print map file on standard output"
+msgstr "Eşleme dosyasını standart çıktıya yazdırır"
+
+#: lexsup.c:244
+msgid "Do not page align data"
+msgstr "Veriyi sayfaya hizalamaz"
+
+#: lexsup.c:246
+msgid "Do not page align data, do not make text readonly"
+msgstr "Veriyi sayfaya hizalamaz, metni saltokunur yapmaz"
+
+#: lexsup.c:249
+msgid "Page align data, make text readonly"
+msgstr "Veriyi sayfaya hizalar, metni saltokunur yapar"
+
+#: lexsup.c:252
+msgid "Set output file name"
+msgstr "Çıktı dosyası adını belirler"
+
+#: lexsup.c:254
+msgid "Optimize output file"
+msgstr "Çıktı dosyasını eniyiler"
+
+#: lexsup.c:256
+msgid "Ignored for SVR4 compatibility"
+msgstr "SVR4 uyumluluğu için yoksayıldı"
+
+#: lexsup.c:260
+msgid "Generate relocatable output"
+msgstr "Yerdeğişimli çıktı oluşturur"
+
+#: lexsup.c:264
+msgid "Just link symbols (if directory, same as --rpath)"
+msgstr "Yalnız sembolleri bağlar (eğer dizin ise, --rpath ile aynı)"
+
+#: lexsup.c:267
+msgid "Strip all symbols"
+msgstr "Bütün sembolleri soyar"
+
+#: lexsup.c:269
+msgid "Strip debugging symbols"
+msgstr "Hata ayıklama sembollerini soyar"
+
+#: lexsup.c:271
+msgid "Strip symbols in discarded sections"
+msgstr "Atılan bölümlerdeki sembolleri soyar"
+
+#: lexsup.c:273
+msgid "Do not strip symbols in discarded sections"
+msgstr "Atılan bölümlerdeki sembolleri soymaz"
+
+#: lexsup.c:275
+msgid "Trace file opens"
+msgstr "İzleme dosyası açılır"
+
+#: lexsup.c:277
+msgid "Read linker script"
+msgstr "BaÄŸlama betiÄŸi okunur"
+
+#: lexsup.c:279 lexsup.c:297 lexsup.c:363 lexsup.c:378 lexsup.c:468
+#: lexsup.c:493 lexsup.c:520
+msgid "SYMBOL"
+msgstr "SEMBOL"
+
+#: lexsup.c:279
+msgid "Start with undefined reference to SYMBOL"
+msgstr "SEMBOL'e tanımsız başvuru ile başlıyor"
+
+#: lexsup.c:282
+msgid "[=SECTION]"
+msgstr "[=BÖLÜM]"
+
+#: lexsup.c:283
+msgid "Don't merge input [SECTION | orphan] sections"
+msgstr "Girdide [BÖLÜM | öksüz] bölümlerini katıştırmaz"
+
+#: lexsup.c:285
+msgid "Build global constructor/destructor tables"
+msgstr "Evrensel kurucu/serbestleştirici tabloları hazırlar"
+
+#: lexsup.c:287
+msgid "Print version information"
+msgstr "Sürüm bilgisini gösterir"
+
+#: lexsup.c:289
+msgid "Print version and emulation information"
+msgstr "Sürüm ve öykünüm bilgisini gösterir"
+
+#: lexsup.c:291
+msgid "Discard all local symbols"
+msgstr "Bütün yerel sembolleri siler"
+
+#: lexsup.c:293
+msgid "Discard temporary local symbols (default)"
+msgstr "Geçici yerel sembolleri siler (öntanımlı)"
+
+#: lexsup.c:295
+msgid "Don't discard any local symbols"
+msgstr "Hiçbir yerel sembolü silmez"
+
+#: lexsup.c:297
+msgid "Trace mentions of SYMBOL"
+msgstr "SEMBOL'ün geçtiği yerleri takip eder"
+
+#: lexsup.c:299 lexsup.c:435 lexsup.c:437
+msgid "PATH"
+msgstr "YOL"
+
+#: lexsup.c:299
+msgid "Default search path for Solaris compatibility"
+msgstr "Solaris uyumluluğu için öntanımlı arama yolu"
+
+#: lexsup.c:302
+msgid "Start a group"
+msgstr "Grup başlatır"
+
+#: lexsup.c:304
+msgid "End a group"
+msgstr "Grup sonlandırır"
+
+#: lexsup.c:308
+msgid "Accept input files whose architecture cannot be determined"
+msgstr "Mimarisi belirlenemeyen girdi dosyalarını kabul eder"
+
+#: lexsup.c:312
+msgid "Reject input files whose architecture is unknown"
+msgstr "Mimarisi belirlenemeyen girdi dosyalarını reddeder"
+
+#: lexsup.c:315
+msgid ""
+"Set DT_NEEDED tags for DT_NEEDED entries in\n"
+"\t\t\t\tfollowing dynamic libs"
+msgstr ""
+
+#: lexsup.c:318
+msgid ""
+"Do not set DT_NEEDED tags for DT_NEEDED entries\n"
+"\t\t\t\tin following dynamic libs"
+msgstr ""
+
+#: lexsup.c:321
+msgid "Only set DT_NEEDED for following dynamic libs if used"
+msgstr ""
+
+#: lexsup.c:324
+msgid "Always set DT_NEEDED for following dynamic libs"
+msgstr ""
+
+#: lexsup.c:327
+msgid "Ignored for SunOS compatibility"
+msgstr "SunOS uyumluluğu için yoksayıldı"
+
+#: lexsup.c:329
+msgid "Link against shared libraries"
+msgstr "Paylaşımlı kitaplıklara bağlanır"
+
+#: lexsup.c:335
+msgid "Do not link against shared libraries"
+msgstr "Paylaşımlı kitaplıklara bağlanmaz"
+
+#: lexsup.c:343
+msgid "Bind global references locally"
+msgstr "Evrensel başvuruları yerel bağlar"
+
+#: lexsup.c:345
+msgid "Check section addresses for overlaps (default)"
+msgstr "(öntanımlı) Bölüm adreslerini örtüşme için kontrol eder"
+
+#: lexsup.c:348
+msgid "Do not check section addresses for overlaps"
+msgstr "Bölüm adreslerini örtüşme için kontrol etmez"
+
+#: lexsup.c:351
+msgid "Output cross reference table"
+msgstr "Çapraz başvuru tablosunu çıktılar"
+
+#: lexsup.c:353
+msgid "SYMBOL=EXPRESSION"
+msgstr "SEMBOL=Ä°FADE"
+
+#: lexsup.c:353
+msgid "Define a symbol"
+msgstr "Sembol tanımlar"
+
+#: lexsup.c:355
+msgid "[=STYLE]"
+msgstr "[=TARZ]"
+
+#: lexsup.c:355
+msgid "Demangle symbol names [using STYLE]"
+msgstr "[TARZ kullanarak] sembol isimlerini düzeltir"
+
+#: lexsup.c:358
+msgid "Generate embedded relocs"
+msgstr "Gömülü yerdeğişimler oluşturur"
+
+#: lexsup.c:360
+msgid "Treat warnings as errors"
+msgstr "Uyarıları hata olarak işler"
+
+#: lexsup.c:363
+msgid "Call SYMBOL at unload-time"
+msgstr "Boşaltma zamanında SEMBOL'ü çağırır"
+
+#: lexsup.c:365
+msgid "Force generation of file with .exe suffix"
+msgstr "Dosyanın .exe soneki ile oluşturulmasını sağlar"
+
+#: lexsup.c:367
+msgid "Remove unused sections (on some targets)"
+msgstr "(Bazı hedeflerde) kullanılmayan bölümleri siler"
+
+#: lexsup.c:370
+msgid "Don't remove unused sections (default)"
+msgstr "(öntanımlı) Kullanılmayan bölümleri silmez"
+
+#: lexsup.c:373
+msgid "Set default hash table size close to <NUMBER>"
+msgstr ""
+
+#: lexsup.c:376
+msgid "Print option help"
+msgstr "Seçenek yardımını gösterir"
+
+#: lexsup.c:378
+msgid "Call SYMBOL at load-time"
+msgstr "Yükleme sırasında SEMBOL'ü çağırır"
+
+#: lexsup.c:380
+msgid "Write a map file"
+msgstr "Eşleme dosyası yazdırır"
+
+#: lexsup.c:382
+msgid "Do not define Common storage"
+msgstr "Ortak depo'yu tanımlamaz"
+
+#: lexsup.c:384
+msgid "Do not demangle symbol names"
+msgstr "Sembol isimlerini düzeltmez"
+
+#: lexsup.c:386
+msgid "Use less memory and more disk I/O"
+msgstr "Daha az bellek ve daha fazla disk I/O kullanır"
+
+#: lexsup.c:388
+#, fuzzy
+msgid "Do not allow unresolved references in object files"
+msgstr "Paylaşımlı nesnelerde tanımsız sembollere izin vermez"
+
+#: lexsup.c:391
+#, fuzzy
+msgid "Allow unresolved references in shared libaries"
+msgstr "Paylaşımlı kitaplıklara bağlanmaz"
+
+#: lexsup.c:395
+#, fuzzy
+msgid "Do not allow unresolved references in shared libs"
+msgstr "Paylaşımlı nesnelerde tanımsız sembollere izin vermez"
+
+#: lexsup.c:399
+msgid "Allow multiple definitions"
+msgstr "Birden fazla tanıma izin verir"
+
+#: lexsup.c:401
+msgid "Disallow undefined version"
+msgstr "Tanımsız sürüme izin vermez"
+
+#: lexsup.c:403
+msgid "Create default symbol version"
+msgstr ""
+
+#: lexsup.c:406
+msgid "Create default symbol version for imported symbols"
+msgstr ""
+
+#: lexsup.c:409
+msgid "Don't warn about mismatched input files"
+msgstr "Eşleşmeyen girdi dosyaları hakkında uyarmaz"
+
+#: lexsup.c:411
+msgid "Turn off --whole-archive"
+msgstr "--whole-archive seçeneğini etkisizleştirir"
+
+#: lexsup.c:413
+msgid "Create an output file even if errors occur"
+msgstr "Hatalar oluşsa bile bir çıktı dosyası oluşturur"
+
+#: lexsup.c:418
+msgid ""
+"Only use library directories specified on\n"
+"\t\t\t\tthe command line"
+msgstr ""
+"Yalnızca komut satırında belirtilen\n"
+"\t\t\t\tkitaplık dizinlerini kullanır"
+
+#: lexsup.c:421
+msgid "Specify target of output file"
+msgstr "Çıktı dosyasının hedefini belirler"
+
+#: lexsup.c:424
+msgid "Ignored for Linux compatibility"
+msgstr "Linux uyumluluğu için yoksayıldı"
+
+#: lexsup.c:427
+msgid "Reduce memory overheads, possibly taking much longer"
+msgstr ""
+
+#: lexsup.c:430
+msgid "Relax branches on certain targets"
+msgstr "Bazı hedeflerde dalları gevşetir"
+
+#: lexsup.c:433
+msgid "Keep only symbols listed in FILE"
+msgstr "Yalnızca DOSYA'da belirtilen sembolleri tutar"
+
+#: lexsup.c:435
+msgid "Set runtime shared library search path"
+msgstr "Çalışma zamanı paylaşımlı kitaplık arama yolunu belirler"
+
+#: lexsup.c:437
+msgid "Set link time shared library search path"
+msgstr "Bağlama zamanı paylaşımlı kitaplık arama yolunu belirler"
+
+#: lexsup.c:440
+msgid "Create a shared library"
+msgstr "Paylaşımlı kitaplık oluşturur"
+
+#: lexsup.c:444
+msgid "Create a position independent executable"
+msgstr "Yerden bağımsız uygulama oluşturur"
+
+#: lexsup.c:448
+msgid "Sort common symbols by size"
+msgstr "Ortak sembolleri boyuta göre sıralar"
+
+#: lexsup.c:452
+msgid "name|alignment"
+msgstr ""
+
+#: lexsup.c:453
+msgid "Sort sections by name or maximum alignment"
+msgstr ""
+
+#: lexsup.c:455
+msgid "COUNT"
+msgstr "SAYI"
+
+#: lexsup.c:455
+msgid "How many tags to reserve in .dynamic section"
+msgstr "Bir .dynamic bölümde tutulacak etiket sayısı"
+
+#: lexsup.c:458
+msgid "[=SIZE]"
+msgstr "[=BOYUT]"
+
+#: lexsup.c:458
+msgid "Split output sections every SIZE octets"
+msgstr "Her BOYUT sekizliğinde çıktı bölümlerini ayırır"
+
+#: lexsup.c:461
+msgid "[=COUNT]"
+msgstr "[=SAYI]"
+
+#: lexsup.c:461
+msgid "Split output sections every COUNT relocs"
+msgstr "Her SAYI yerdeğişiminde çıktı bölümlerini ayırır"
+
+#: lexsup.c:464
+msgid "Print memory usage statistics"
+msgstr "Bellek kullanım istatistiklerini gösterir"
+
+#: lexsup.c:466
+msgid "Display target specific options"
+msgstr "Hedefe özel seçenekleri gösterir"
+
+#: lexsup.c:468
+msgid "Do task level linking"
+msgstr "Görev seviyesinde bağlama yapar"
+
+#: lexsup.c:470
+msgid "Use same format as native linker"
+msgstr "Yerel bağlayıcı ile aynı biçemi kullanır"
+
+#: lexsup.c:472
+msgid "SECTION=ADDRESS"
+msgstr "BÖLÜM=ADRES"
+
+#: lexsup.c:472
+msgid "Set address of named section"
+msgstr "İsimli bölümün adresini belirler"
+
+#: lexsup.c:475
+msgid "Set address of .bss section"
+msgstr ".bss bölümünün adresini belirler"
+
+#: lexsup.c:477
+msgid "Set address of .data section"
+msgstr ".data bölümünün adresini belirler"
+
+#: lexsup.c:479
+msgid "Set address of .text section"
+msgstr ".text bölümünün adresini belirler"
+
+#: lexsup.c:482
+msgid ""
+"How to handle unresolved symbols. <method> is:\n"
+"\t\t\t\tignore-all, report-all, ignore-in-object-files,\n"
+"\t\t\t\tignore-in-shared-libs"
+msgstr ""
+
+#: lexsup.c:486
+msgid "Output lots of information during link"
+msgstr "Bağlama esnasında ek bilgi gösterir"
+
+#: lexsup.c:490
+msgid "Read version information script"
+msgstr "Sürüm bilgisi betiğini okur"
+
+#: lexsup.c:493
+msgid ""
+"Take export symbols list from .exports, using\n"
+"\t\t\t\tSYMBOL as the version."
+msgstr ""
+"İhraç sembolleri listesini .exports'dan alır, sürüm olarak\n"
+"\t\t\t\tSEMBOL değerini kullanır."
+
+#: lexsup.c:496
+msgid "Warn about duplicate common symbols"
+msgstr "Tekrarlanmış ortak semboller hakkında uyarı verir"
+
+#: lexsup.c:498
+msgid "Warn if global constructors/destructors are seen"
+msgstr "Evrensel kurucu/serbestleştiriciler bulunursa uyarı verir"
+
+#: lexsup.c:501
+msgid "Warn if the multiple GP values are used"
+msgstr "Çoklu GP değerleri kullanılırsa uyarı verir"
+
+#: lexsup.c:503
+msgid "Warn only once per undefined symbol"
+msgstr "Her tanımsız sembol için bir defa uyarı verir"
+
+#: lexsup.c:505
+msgid "Warn if start of section changes due to alignment"
+msgstr "Hizalama sebebi ile bölüm başlangıcı değişirse uyarı verir"
+
+#: lexsup.c:508
+msgid "Warn if shared object has DT_TEXTREL"
+msgstr ""
+
+#: lexsup.c:512
+msgid "Report unresolved symbols as warnings"
+msgstr ""
+
+#: lexsup.c:515
+msgid "Report unresolved symbols as errors"
+msgstr ""
+
+#: lexsup.c:517
+msgid "Include all objects from following archives"
+msgstr "Aşağıdaki arşivlerdeki tüm nesneleri içerir"
+
+#: lexsup.c:520
+msgid "Use wrapper functions for SYMBOL"
+msgstr "SEMBOL için sarmalama işlevleri kullanır"
+
+#: lexsup.c:667
+msgid "%P: unrecognized option '%s'\n"
+msgstr "%P: bilinmeyen `%s' seçeneği\n"
+
+#: lexsup.c:669
+msgid "%P%F: use the --help option for usage information\n"
+msgstr "%P%F: kullanım bilgisi için --help seçeneğini kullanın\n"
+
+#: lexsup.c:687
+msgid "%P%F: unrecognized -a option `%s'\n"
+msgstr "%P%F: bilinmeyen -a seçeneği `%s'\n"
+
+#: lexsup.c:700
+msgid "%P%F: unrecognized -assert option `%s'\n"
+msgstr "%P%F: bilinmeyen -assert seçeneği `%s'\n"
+
+#: lexsup.c:743
+msgid "%F%P: unknown demangling style `%s'"
+msgstr "%F%P: bilinmeyen düzeltme tarzı `%s'"
+
+#: lexsup.c:805
+msgid "%P%F: invalid number `%s'\n"
+msgstr "%P%F: geçersiz sayı `%s'\n"
+
+#: lexsup.c:897
+#, fuzzy
+msgid "%P%F: bad --unresolved-symbols option: %s\n"
+msgstr "%P%F: bilinmeyen -assert seçeneği `%s'\n"
+
+#. This can happen if the user put "-rpath,a" on the command
+#. line. (Or something similar. The comma is important).
+#. Getopt becomes confused and thinks that this is a -r option
+#. but it cannot parse the text after the -r so it refuses to
+#. increment the optind counter. Detect this case and issue
+#. an error message here. We cannot just make this a warning,
+#. increment optind, and continue because getopt is too confused
+#. and will seg-fault the next time around.
+#: lexsup.c:968
+msgid "%P%F: bad -rpath option\n"
+msgstr "%P%F: hatalı -rpath seçeneği\n"
+
+#: lexsup.c:1080
+msgid "%P%F: -shared not supported\n"
+msgstr "%P%F: -shared desteklenmiyor\n"
+
+#: lexsup.c:1089
+msgid "%P%F: -pie not supported\n"
+msgstr "%P%F: -pie desteklenmiyor\n"
+
+#: lexsup.c:1099
+#, fuzzy
+msgid "name"
+msgstr "Ä°sim"
+
+#: lexsup.c:1101
+msgid "alignment"
+msgstr ""
+
+#: lexsup.c:1104
+#, fuzzy
+msgid "%P%F: invalid section sorting option: %s\n"
+msgstr "%P%F: bilinmeyen -assert seçeneği `%s'\n"
+
+#: lexsup.c:1130
+msgid "%P%F: invalid argument to option \"--section-start\"\n"
+msgstr "%P%F: \"--section-start\" seçeneğine geçersiz argüman verilmiş\n"
+
+#: lexsup.c:1137
+msgid "%P%F: missing argument(s) to option \"--section-start\"\n"
+msgstr "%P%F: \"--section-start\" seçeneğine eksik argüman(lar) verilmiş\n"
+
+#: lexsup.c:1311
+msgid "%P%F: may not nest groups (--help for usage)\n"
+msgstr "%P%F: gruplar yuvalanamaz (yardım için --help)\n"
+
+#: lexsup.c:1318
+msgid "%P%F: group ended before it began (--help for usage)\n"
+msgstr "%P%F: grup başlamadan bitti (yardım için --help)\n"
+
+#: lexsup.c:1346
+msgid "%P%X: --hash-size needs a numeric argument\n"
+msgstr ""
+
+#: lexsup.c:1397 lexsup.c:1410
+msgid "%P%F: invalid hex number `%s'\n"
+msgstr "%P%F: geçersiz onaltılık sayı `%s'\n"
+
+#: lexsup.c:1445
+#, c-format
+msgid "Usage: %s [options] file...\n"
+msgstr "Kullanımı: %s [seçenekler] DOSYA...\n"
+
+#: lexsup.c:1447
+#, c-format
+msgid "Options:\n"
+msgstr "Seçenekler:\n"
+
+#. Note: Various tools (such as libtool) depend upon the
+#. format of the listings below - do not change them.
+#: lexsup.c:1530
+#, c-format
+msgid "%s: supported targets:"
+msgstr "%s: desteklenen hedefler:"
+
+#: lexsup.c:1538
+#, c-format
+msgid "%s: supported emulations: "
+msgstr "%s: desteklenen öykünümler: "
+
+#: lexsup.c:1543
+#, c-format
+msgid "%s: emulation specific options:\n"
+msgstr "%s: öykünüme özel seçenekler:\n"
+
+#: lexsup.c:1547
+#, c-format
+msgid "Report bugs to %s\n"
+msgstr ""
+"Yazılım hatalarını %s adresine,\n"
+"çeviri hatalarını <gnu-tr@belgeler.org> adresine bildirin.\n"
+
+#: mri.c:291
+msgid "%P%F: unknown format type %s\n"
+msgstr "%P%F: bilinmeyen biçem türü %s\n"
+
+#: pe-dll.c:303
+#, c-format
+msgid "%XUnsupported PEI architecture: %s\n"
+msgstr "%XDesteklenmeyen PEI platformu: %s\n"
+
+#: pe-dll.c:652
+#, c-format
+msgid "%XError, duplicate EXPORT with ordinals: %s (%d vs %d)\n"
+msgstr "%XHata, %s (%d yerine %d) onlukları ile tekrarlanmış İHRAÇ\n"
+
+#: pe-dll.c:659
+#, c-format
+msgid "Warning, duplicate EXPORT: %s\n"
+msgstr "Uyarı, tekrarlanmış İHRAÇ: %s\n"
+
+#: pe-dll.c:725
+#, c-format
+msgid "%XCannot export %s: symbol not defined\n"
+msgstr "%X%s ihraç edilemedi: sembol tanımsız\n"
+
+#: pe-dll.c:731
+#, c-format
+msgid "%XCannot export %s: symbol wrong type (%d vs %d)\n"
+msgstr "%X%s ihraç edilemedi: sembol hatalı türde (%d yerine %d)\n"
+
+#: pe-dll.c:738
+#, c-format
+msgid "%XCannot export %s: symbol not found\n"
+msgstr "%X%s ihraç edilemedi: sembol bulunamadı\n"
+
+#: pe-dll.c:850
+#, c-format
+msgid "%XError, ordinal used twice: %d (%s vs %s)\n"
+msgstr "%XHata, %d (%s yerine %s) onluğu iki defa kullanılmış\n"
+
+#: pe-dll.c:1172
+#, c-format
+msgid "%XError: %d-bit reloc in dll\n"
+msgstr "%XHata: dll'de %d-bitlik yerdeÄŸiÅŸim\n"
+
+#: pe-dll.c:1300
+#, c-format
+msgid "%s: Can't open output def file %s\n"
+msgstr "%s: %s tanım dosyası açılamadı\n"
+
+#: pe-dll.c:1443
+#, c-format
+msgid "; no contents available\n"
+msgstr "; içerik yok\n"
+
+#: pe-dll.c:2205
+msgid "%C: variable '%T' can't be auto-imported. Please read the documentation for ld's --enable-auto-import for details.\n"
+msgstr ""
+"%C: '%T' değişkeni oto-ithal edilemez. Lütfen ld için dökümantasyonu okuyun.\n"
+" detay için --enable-auto-import kullanın.\n"
+
+#: pe-dll.c:2235
+#, c-format
+msgid "%XCan't open .lib file: %s\n"
+msgstr "%X.lib dosyası açılamadı: %s\n"
+
+#: pe-dll.c:2240
+#, c-format
+msgid "Creating library file: %s\n"
+msgstr "Kitaplık dosyası oluşturuluyor: %s\n"
+
+#~ msgid "%F%P: %s uses undefined section %s\n"
+#~ msgstr "%F%P: %s tanımsız %s bölümünü kullanıyor\n"
+
+#~ msgid "%F%P: %s forward reference of section %s\n"
+#~ msgstr "%F%P: %s %s bölümüne ileriye başvuru\n"
+
+#~ msgid "%F%P: cannot open %s for %s: %E\n"
+#~ msgstr "%1$F%2$P: %4$s için %3$s açılamadı: %5$E\n"
+
+#~ msgid "%F%P: cannot open %s: %E\n"
+#~ msgstr "%F%P: %s açılamadı: %E\n"
+
+#~ msgid "%P%F: unknown architecture: %s\n"
+#~ msgstr "%P%F: bilinmeyen platform: %s\n"
+
+#~ msgid "%P%F: target architecture respecified\n"
+#~ msgstr "%P%F: hedef platform yeniden belirtilmiÅŸ\n"
+
+#~ msgid "%P: %B: warning: ignoring duplicate `%s' section symbol `%s'\n"
+#~ msgstr "%P: %B: uyarı: birden fazla tekrar edilmiş `%s' bölümü `%s' sembolü yoksayıldı\n"
+
+#~ msgid "%P: %B: warning: duplicate section `%s' has different size\n"
+#~ msgstr "%P: %B: uyarı: birden fazla tekrar edilmiş `%s' bölümünün boyutu farklı\n"
+
+#~ msgid "%P: no [COMMON] command, defaulting to .bss\n"
+#~ msgstr "%P: [ORTAK] komutu yok, öntanımlı .bss kullanılıyor\n"
+
+#~ msgid "%P%F: -r and --mpc860c0 may not be used together\n"
+#~ msgstr "%P%F: -r ve --mpc860c0 beraber kullanılamaz\n"
+
+#~ msgid "Allow no undefined symbols"
+#~ msgstr "Tanımsız sembollere izin vermez"
+
+#~ msgid "Allow undefined symbols in shared objects (the default)"
+#~ msgstr "Paylaşımlı nesnelerde tanımsız sembollere izin verir (öntanımlı)"
+
+#~ msgid "[=WORDS]"
+#~ msgstr "[=SÖZCÜKLER]"
+
+#~ msgid ""
+#~ "Modify problematic branches in last WORDS (1-10,\n"
+#~ "\t\t\t\tdefault 5) words of a page"
+#~ msgstr ""
+#~ "Bir sayfanın son SÖZCÜKLER sözcüklerindeki (1-10,\n"
+#~ "\t\t\t\töntanımlı 5) problemli dalları değiştirir"
+
+#~ msgid "%P%F: invalid argument to option \"mpc860c0\"\n"
+#~ msgstr "%P%F: \"mpc860c0\" seçeneğine geçersiz argüman\n"
diff --git a/binutils-2.21/ld/po/vi.gmo b/binutils-2.21/ld/po/vi.gmo
new file mode 100644
index 0000000..831bb46
--- /dev/null
+++ b/binutils-2.21/ld/po/vi.gmo
Binary files differ
diff --git a/binutils-2.21/ld/po/vi.po b/binutils-2.21/ld/po/vi.po
new file mode 100644
index 0000000..caeb24e
--- /dev/null
+++ b/binutils-2.21/ld/po/vi.po
@@ -0,0 +1,2154 @@
+# Vietnamese translation for LD.
+# Copyright © 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the binutils package.
+# Clytie Siddall <clytie@riverland.net.au>, 2005-2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ld-2.20.1\n"
+"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
+"POT-Creation-Date: 2010-03-03 15:06+0100\n"
+"PO-Revision-Date: 2010-04-22 22:28+0930\n"
+"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
+"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: LocFactoryEditor 1.8\n"
+
+#: emultempl/armcoff.em:73
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code \tHỗ trợ kết hợp với mã cũ\n"
+
+#: emultempl/armcoff.em:74
+#, c-format
+msgid " --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"
+msgstr " --thumb-entry=<ký_hiệu> Äặt Ä‘iểm vào thành ký hiệu Thumb này\n"
+
+#: emultempl/armcoff.em:122
+#, c-format
+msgid "Errors encountered processing file %s"
+msgstr "Gặp lỗi khi xử lý tập tin %s"
+
+#: emultempl/armcoff.em:190 emultempl/pe.em:1696
+msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"
+msgstr "%P: cảnh báo : « --thumb-entry %s » Ä‘ang lấy quyá»n cao hÆ¡n « -e %s »\n"
+
+#: emultempl/armcoff.em:195 emultempl/pe.em:1701
+msgid "%P: warning: cannot find thumb start symbol %s\n"
+msgstr "%P: cảnh báo : không tìm thấy ký hiệu bắt đầu thumb %s\n"
+
+#: emultempl/pe.em:371
+#, c-format
+msgid " --base_file <basefile> Generate a base file for relocatable DLLs\n"
+msgstr " --base_file <tập_tin>\t\tTạo ra một tập tin cơ bản cho DLL có thể định vị lại\n"
+
+#: emultempl/pe.em:372
+#, c-format
+msgid " --dll Set image base to the default for DLLs\n"
+msgstr " --dll Äặt cÆ¡ bản ảnh thành giá trị mặc định cho DLL\n"
+
+#: emultempl/pe.em:373
+#, c-format
+msgid " --file-alignment <size> Set file alignment\n"
+msgstr " --file-alignment <kích_cỡ> Äặt cách chỉnh canh tập tin\n"
+
+#: emultempl/pe.em:374
+#, c-format
+msgid " --heap <size> Set initial size of the heap\n"
+msgstr " --heap <kích_cỡ> Äặt kích cỡ đầu tiên của miá»n nhá»›\n"
+
+#: emultempl/pe.em:375
+#, c-format
+msgid " --image-base <address> Set start address of the executable\n"
+msgstr " --image-base <địa_chỉ>\t\tÄặt địa chỉ đầu tiên của tập tin thá»±c thi\n"
+
+#: emultempl/pe.em:376
+#, c-format
+msgid " --major-image-version <number> Set version number of the executable\n"
+msgstr " --major-image-version <số>\t\tÄặt số thứ tá»± phiên bản của tập tin thá»±c thi\n"
+
+#: emultempl/pe.em:377
+#, c-format
+msgid " --major-os-version <number> Set minimum required OS version\n"
+msgstr " --major-os-version <số>\t\tÄặt phiên bản HÄH tối thiểu cần thiết\n"
+
+#: emultempl/pe.em:378
+#, c-format
+msgid " --major-subsystem-version <number> Set minimum required OS subsystem version\n"
+msgstr " --major-subsystem-version <số>\tÄặt phiên bản hệ thống con HÄH\n"
+
+#: emultempl/pe.em:379
+#, c-format
+msgid " --minor-image-version <number> Set revision number of the executable\n"
+msgstr " --minor-image-version <số>\t\tÄặt số thứ tá»± bản sá»­a đổi của tập tin thá»±c thi\n"
+
+#: emultempl/pe.em:380
+#, c-format
+msgid " --minor-os-version <number> Set minimum required OS revision\n"
+msgstr " --minor-os-version <số>\t\tÄặt bản sá»­a đổi HÄH tối thiểu cần thiết\n"
+
+#: emultempl/pe.em:381
+#, c-format
+msgid " --minor-subsystem-version <number> Set minimum required OS subsystem revision\n"
+msgstr " --minor-subsystem-version <số>\tÄặt bản sá»­a đổi hệ thống con HÄH\n"
+
+#: emultempl/pe.em:382
+#, c-format
+msgid " --section-alignment <size> Set section alignment\n"
+msgstr " --section-alignment <kích_cỡ> Äặt cách chỉnh canh phần\n"
+
+#: emultempl/pe.em:383
+#, c-format
+msgid " --stack <size> Set size of the initial stack\n"
+msgstr " --stack <kích_cỡ> Äặt kích cỡ của đống đầu tiên\n"
+
+#: emultempl/pe.em:384
+#, c-format
+msgid " --subsystem <name>[:<version>] Set required OS subsystem [& version]\n"
+msgstr " --subsystem <tên>[:<phiên_bản>]\tÄặt hệ thống con HÄH [và phiên bản] cần thiết\n"
+
+#: emultempl/pe.em:385
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code \tHỗ trợ kết hợp với mã cũ\n"
+
+#: emultempl/pe.em:386
+#, c-format
+msgid " --thumb-entry=<symbol> Set the entry point to be Thumb <symbol>\n"
+msgstr " --thumb-entry=<ký_hiệu> Äặt Ä‘iểm vào thành ký hiệu Thumb này\n"
+
+#: emultempl/pe.em:388
+#, c-format
+msgid " --add-stdcall-alias Export symbols with and without @nn\n"
+msgstr " --add-stdcall-alias Xuất ký hiệu có và không có « @nn »\n"
+
+#: emultempl/pe.em:389
+#, c-format
+msgid " --disable-stdcall-fixup Don't link _sym to _sym@nn\n"
+msgstr " --disable-stdcall-fixup Äừng liên kết « _sym » đến « _sym@nn »\n"
+
+#: emultempl/pe.em:390
+#, c-format
+msgid " --enable-stdcall-fixup Link _sym to _sym@nn without warnings\n"
+msgstr " --enable-stdcall-fixup Liên kết « _sym » đến « _sym@nn » mà không cảnh báo\n"
+
+#: emultempl/pe.em:391
+#, c-format
+msgid " --exclude-symbols sym,sym,... Exclude symbols from automatic export\n"
+msgstr " --exclude-symbols ký_hiệu1,ký_hiệu2,.. Loại trừ những ký hiệu này khá»i việc tá»± Ä‘á»™ng xuất\n"
+
+#: emultempl/pe.em:392
+#, c-format
+msgid " --exclude-libs lib,lib,... Exclude libraries from automatic export\n"
+msgstr " --exclude-libs thÆ°_viện1,thÆ°_viện2,... Loại trừ những thÆ° viện này khá»i việc tá»± Ä‘á»™ng xuất\n"
+
+#: emultempl/pe.em:393
+#, c-format
+msgid " --exclude-modules-for-implib mod,mod,...\n"
+msgstr " --exclude-modules-for-implib mô-đun,mô-đun,...\n"
+
+#: emultempl/pe.em:394
+#, c-format
+msgid " Exclude objects, archive members from auto\n"
+msgstr " Loại trừ đối tượng, mục kho lÆ°u khá»i chức năng\n"
+
+#: emultempl/pe.em:395
+#, c-format
+msgid " export, place into import library instead.\n"
+msgstr " tự động xuất, để vào thư viện nhập để thay thế.\n"
+
+#: emultempl/pe.em:396
+#, c-format
+msgid " --export-all-symbols Automatically export all globals to DLL\n"
+msgstr " --export-all-symbols Tá»± Ä‘á»™ng xuất má»i Ä‘iá»u toàn cục ra DLL\n"
+
+#: emultempl/pe.em:397
+#, c-format
+msgid " --kill-at Remove @nn from exported symbols\n"
+msgstr " --kill-at Gỡ bỠ« @nn » khá»i những ký hiệu đã xuất\n"
+
+#: emultempl/pe.em:398
+#, c-format
+msgid " --out-implib <file> Generate import library\n"
+msgstr " --out-implib <tập_tin> Tạo ra thư viện nhập\n"
+
+#: emultempl/pe.em:399
+#, c-format
+msgid " --output-def <file> Generate a .DEF file for the built DLL\n"
+msgstr " --output-def <tập_tin>\tTạo ra một tập tin .DEF cho DLL đã xây dựng\n"
+
+#: emultempl/pe.em:400
+#, c-format
+msgid " --warn-duplicate-exports Warn about duplicate exports.\n"
+msgstr " --warn-duplicate-exports Cảnh báo vỠbản xuất trùng.\n"
+
+#: emultempl/pe.em:401
+#, c-format
+msgid ""
+" --compat-implib Create backward compatible import libs;\n"
+" create __imp_<SYMBOL> as well.\n"
+msgstr ""
+" --compat-implib\t\tTạo các thư viện nhập tương thích ngược;\n"
+"\tcũng tạo « __imp_<ký_hiệu> »\n"
+
+#: emultempl/pe.em:403
+#, c-format
+msgid ""
+" --enable-auto-image-base Automatically choose image base for DLLs\n"
+" unless user specifies one\n"
+msgstr " --enable-auto-image-base Tá»± Ä‘á»™ng chá»n cÆ¡ bản ảnh cho DLL nếu ngÆ°á»i dùng không ghi rõ\n"
+
+#: emultempl/pe.em:405
+#, c-format
+msgid " --disable-auto-image-base Do not auto-choose image base. (default)\n"
+msgstr " --disable-auto-image-base Äừng tá»± Ä‘á»™ng chá»n cÆ¡ bản ảnh (mặc định)\n"
+
+#: emultempl/pe.em:406
+#, c-format
+msgid ""
+" --dll-search-prefix=<string> When linking dynamically to a dll without\n"
+" an importlib, use <string><basename>.dll\n"
+" in preference to lib<basename>.dll \n"
+msgstr ""
+" --dll-search-prefix=<chuỗi> Khi liên kết động đến DLL không có thư viên nhập,\n"
+"\tdùng « <chuỗi><tên_cơ_bản>.dll » thay cho « lib<tên_cơ_bản>.dll »\n"
+
+#: emultempl/pe.em:409
+#, c-format
+msgid ""
+" --enable-auto-import Do sophistcated linking of _sym to\n"
+" __imp_sym for DATA references\n"
+msgstr ""
+" --enable-auto-import\t\tLiên kết tinh tế « _sym » đến « __imp_sym »\n"
+"\tcho các tham chiếu DATA (dữ liệu)\n"
+
+#: emultempl/pe.em:411
+#, c-format
+msgid " --disable-auto-import Do not auto-import DATA items from DLLs\n"
+msgstr " --disable-auto-import Äừng tá»± Ä‘á»™ng nhập mục DATA từ DLL\n"
+
+#: emultempl/pe.em:412
+#, c-format
+msgid ""
+" --enable-runtime-pseudo-reloc Work around auto-import limitations by\n"
+" adding pseudo-relocations resolved at\n"
+" runtime.\n"
+msgstr ""
+" --enable-runtime-pseudo-reloc Chỉnh sửa sự hạn chế tự động nhập bằng cách thêm\n"
+"\tsự định vị lại giả được quyết định vào lúc chạy.\n"
+
+#: emultempl/pe.em:415
+#, c-format
+msgid ""
+" --disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations for\n"
+" auto-imported DATA.\n"
+msgstr ""
+" --disable-runtime-pseudo-reloc Äừng thêm sá»± định vị lại giả vào lúc chạy\n"
+"\tđối với DATA được tự động nhập vào.\n"
+
+#: emultempl/pe.em:417
+#, c-format
+msgid ""
+" --enable-extra-pe-debug Enable verbose debug output when building\n"
+" or linking to DLLs (esp. auto-import)\n"
+msgstr ""
+" --enable-extra-pe-debug Bật kết xuất gỡ lỗi chi tiết khi xây dựng hay liên kết đến DLL\n"
+"\t(đặc biệt khi tự động nhập vào)\n"
+
+#: emultempl/pe.em:420
+#, c-format
+msgid ""
+" --large-address-aware Executable supports virtual addresses\n"
+" greater than 2 gigabytes\n"
+msgstr " --large-address-aware Tập tin thực thi cũng hỗ trợ địa chỉ ảo lớn hơn 2 GB.\n"
+
+#: emultempl/pe.em:422
+#, c-format
+msgid ""
+" --enable-long-section-names Use long COFF section names even in\n"
+" executable image files\n"
+msgstr " --enable-long-section-names Dùng tên phần COFF dài ngay cả trong tập tin ảnh thực thi\n"
+
+#: emultempl/pe.em:424
+#, c-format
+msgid ""
+" --disable-long-section-names Never use long COFF section names, even\n"
+" in object files\n"
+msgstr ""
+" --disable-long-section-names Không bao giỠnên dùng tên phần COFF dài,\n"
+"\tngay cả trong tập tin đối tượng\n"
+
+#: emultempl/pe.em:426
+#, c-format
+msgid ""
+" --dynamicbase\t\t\t Image base address may be relocated using\n"
+"\t\t\t\t address space layout randomization (ASLR)\n"
+msgstr ""
+" --dynamicbase\t\tÄịa chỉ cÆ¡ bản ảnh có thể được định vị lại\n"
+"\tdùng chức năng ngẫu nhiên hoá bố trí miá»n địa chỉ (ASLR)\n"
+
+#: emultempl/pe.em:428
+#, c-format
+msgid " --forceinteg\t\t Code integrity checks are enforced\n"
+msgstr " --forceinteg\t\tBắt buộc phải kiểm tra tính nguyên vẹn của mã\n"
+
+#: emultempl/pe.em:429
+#, c-format
+msgid " --nxcompat\t\t Image is compatible with data execution prevention\n"
+msgstr " --nxcompat\t\tẢnh tương thích với sự ngăn cản thực hiện dữ liệu\n"
+
+#: emultempl/pe.em:430
+#, c-format
+msgid " --no-isolation\t\t Image understands isolation but do not isolate the image\n"
+msgstr " --no-isolation\t\tẢnh hiểu sự cách ly nhưng đừng cách ly ảnh\n"
+
+#: emultempl/pe.em:431
+#, c-format
+msgid ""
+" --no-seh\t\t\t Image does not use SEH. No SE handler may\n"
+"\t\t\t\t be called in this image\n"
+msgstr " --no-seh\t\tẢnh không dùng SEH. Không thể gá»i trình quản lý SE trong ảnh này.\n"
+
+#: emultempl/pe.em:433
+#, c-format
+msgid " --no-bind\t\t\t Do not bind this image\n"
+msgstr " --no-bind\t\tÄừng tổ hợp ảnh này\n"
+
+#: emultempl/pe.em:434
+#, c-format
+msgid " --wdmdriver\t\t Driver uses the WDM model\n"
+msgstr " --wdmdriver\tTrình Ä‘iá»u khiển dùng mẫu WDM\n"
+
+#: emultempl/pe.em:435
+#, c-format
+msgid " --tsaware \t\t Image is Terminal Server aware\n"
+msgstr " --tsaware Ảnh nhận thấy Trình phục vụ Thiết bị cuối\n"
+
+#: emultempl/pe.em:503
+msgid "%P: warning: bad version number in -subsystem option\n"
+msgstr "%P: cảnh báo: gặp số thứ tá»± phiên bản sai trong tùy chá»n « -subsystem » (hệ thống con)\n"
+
+#: emultempl/pe.em:534
+msgid "%P%F: invalid subsystem type %s\n"
+msgstr "%P%F: kiểu hệ thống con không hợp lệ %s\n"
+
+#: emultempl/pe.em:573
+msgid "%P%F: invalid hex number for PE parameter '%s'\n"
+msgstr "%P%F: số thập lục không hợp lệ cho tham số PE « %s »\n"
+
+#: emultempl/pe.em:590
+msgid "%P%F: strange hex info for PE parameter '%s'\n"
+msgstr "%P%F: thông tin thập lục lạ cho tham số PE « %s »\n"
+
+#: emultempl/pe.em:607
+#, c-format
+msgid "%s: Can't open base file %s\n"
+msgstr "%s: Không thể mở tập tin cơ bản %s\n"
+
+#: emultempl/pe.em:870
+msgid "%P: warning, file alignment > section alignment.\n"
+msgstr "%P: cảnh báo, sự chỉnh canh tập tin > sự chỉnh canh phần.\n"
+
+#: emultempl/pe.em:883
+msgid "%P: warning: --export-dynamic is not supported for PE targets, did you mean --export-all-symbols?\n"
+msgstr "%P: cảnh báo : « --export-dynamic » không được há»— trợ cho đích PE, bạn định chá»n « --export-all-symbols » ?\n"
+
+#: emultempl/pe.em:949 emultempl/pe.em:976
+#, c-format
+msgid "Warning: resolving %s by linking to %s\n"
+msgstr "Cảnh báo : đang tháo gỡ %s bằng cách liên kết đến %s\n"
+
+#: emultempl/pe.em:954 emultempl/pe.em:981
+msgid "Use --enable-stdcall-fixup to disable these warnings\n"
+msgstr "Dùng « --enable-stdcall-fixup » để tắt các cảnh báo này\n"
+
+#: emultempl/pe.em:955 emultempl/pe.em:982
+msgid "Use --disable-stdcall-fixup to disable these fixups\n"
+msgstr "Dùng « --disable-stdcall-fixup » để tắt các sự sửa chữa này\n"
+
+#: emultempl/pe.em:1001
+#, c-format
+msgid "%C: Cannot get section contents - auto-import exception\n"
+msgstr "%C: Không thể lấy nội dung của phần: gặp ngoại lệ nhập khẩu tự động\n"
+
+#: emultempl/pe.em:1041
+#, c-format
+msgid "Info: resolving %s by linking to %s (auto-import)\n"
+msgstr "Thông tin: đang tháo gỡ %s bằng cách liên kết đến %s (tự động nhập khẩu)\n"
+
+#: emultempl/pe.em:1048
+msgid ""
+"%P: warning: auto-importing has been activated without --enable-auto-import specified on the command line.\n"
+"This should work unless it involves constant data structures referencing symbols from auto-imported DLLs.\n"
+msgstr ""
+"%P: cảnh báo : chức năng tá»± Ä‘á»™ng nhập vào đã được kích hoạt mà không Ä‘Æ°a ra tùy chá»n « --enable-auto-import » trên dòng lệnh.\n"
+"TrÆ°á»ng hợp này vẫn còn nên chạy được nếu không có cấu trúc dữ liệu không đổi mà tham chiếu đến ký hiệu từ DLL được tá»± Ä‘á»™ng nhập vào.\n"
+
+#: emultempl/pe.em:1055 emultempl/pe.em:1254 emultempl/pe.em:1460 ldcref.c:490
+#: ldcref.c:588 ldmain.c:1111 ldmisc.c:285 pe-dll.c:683 pe-dll.c:1227
+#: pe-dll.c:1324
+msgid "%B%F: could not read symbols: %E\n"
+msgstr "%B%F: không thể Ä‘á»c các ký hiệu : %E\n"
+
+#: emultempl/pe.em:1135
+msgid "%F%P: cannot perform PE operations on non PE output file '%B'.\n"
+msgstr "%F%P: không thể thực hiện thao tác PE với tập tin xuất khác PE « %B ».\n"
+
+#: emultempl/pe.em:1501
+#, c-format
+msgid "Errors encountered processing file %s\n"
+msgstr "Gặp lỗi trong khi xử lý tập tin %s\n"
+
+#: emultempl/pe.em:1524
+#, c-format
+msgid "Errors encountered processing file %s for interworking\n"
+msgstr "Gặp lỗi trong khi xử lý tập tin %s để thao tác với nhau\n"
+
+#: emultempl/pe.em:1585 ldexp.c:539 ldlang.c:3284 ldlang.c:6649 ldlang.c:6680
+#: ldmain.c:1056
+msgid "%P%F: bfd_link_hash_lookup failed: %E\n"
+msgstr "%P%F: « bfd_link_hash_lookup » bị lỗi: %E\n"
+
+#: ldcref.c:168
+msgid "%X%P: bfd_hash_table_init of cref table failed: %E\n"
+msgstr "%X%P: « bfd_hash_table_init » với bảng cref bị lỗi: %E\n"
+
+#: ldcref.c:174
+msgid "%X%P: cref_hash_lookup failed: %E\n"
+msgstr "%X%P: « cref_hash_lookup » bị lỗi: %E\n"
+
+#: ldcref.c:184
+msgid "%X%P: cref alloc failed: %E\n"
+msgstr "%X%P: cref alloc bị lỗi: %E\n"
+
+#: ldcref.c:366
+#, c-format
+msgid ""
+"\n"
+"Cross Reference Table\n"
+"\n"
+msgstr ""
+"\n"
+"Bảng Tham Chiếu Chéo\n"
+"\n"
+
+#: ldcref.c:367
+msgid "Symbol"
+msgstr "Ký hiệu"
+
+#: ldcref.c:375
+#, c-format
+msgid "File\n"
+msgstr "Tập tin\n"
+
+#: ldcref.c:379
+#, c-format
+msgid "No symbols\n"
+msgstr "Không có ký hiệu\n"
+
+#: ldcref.c:532
+msgid "%P: symbol `%T' missing from main hash table\n"
+msgstr "%P: ký hiệu « %T » còn thiếu trong bảng băm chính\n"
+
+#: ldcref.c:650 ldcref.c:657 ldmain.c:1145 ldmain.c:1152
+msgid "%B%F: could not read relocs: %E\n"
+msgstr "%B%F: không thể Ä‘á»c các sá»± định vị lại : %E\n"
+
+#. We found a reloc for the symbol. The symbol is defined
+#. in OUTSECNAME. This reloc is from a section which is
+#. mapped into a section from which references to OUTSECNAME
+#. are prohibited. We must report an error.
+#: ldcref.c:684
+msgid "%X%C: prohibited cross reference from %s to `%T' in %s\n"
+msgstr "%X%C: không cho phép tham chiếu chéo từ %s đến « %T » trong %s\n"
+
+#: ldctor.c:85
+msgid "%P%X: Different relocs used in set %s\n"
+msgstr "%P%X: Các sự định vị lại khác nhau được dùng trong tập hợp %s\n"
+
+#: ldctor.c:103
+msgid "%P%X: Different object file formats composing set %s\n"
+msgstr "%P%X: Gặp các định dạng tập tin đối tượng khác nhau khi cấu thành tập hợp %s\n"
+
+#: ldctor.c:281 ldctor.c:295
+msgid "%P%X: %s does not support reloc %s for set %s\n"
+msgstr "%P%X: %s không hỗ trợ khả năng định vị lại %s cho tập hợp %s\n"
+
+#: ldctor.c:316
+msgid "%P%X: Unsupported size %d for set %s\n"
+msgstr "%P%X: Kích cỡ không được hỗ trợ %d cho tập hợp %s\n"
+
+#: ldctor.c:337
+msgid ""
+"\n"
+"Set Symbol\n"
+"\n"
+msgstr ""
+"\n"
+"Tập hợp Ký hiệu\n"
+"\n"
+
+#: ldemul.c:265
+#, c-format
+msgid "%S SYSLIB ignored\n"
+msgstr "%S SYSLIB bị bỠqua\n"
+
+#: ldemul.c:271
+#, c-format
+msgid "%S HLL ignored\n"
+msgstr "%S HLL bị bỠqua\n"
+
+#: ldemul.c:291
+msgid "%P: unrecognised emulation mode: %s\n"
+msgstr "%P: không nhận ra chế Ä‘á»™ mô phá»ng: %s\n"
+
+#: ldemul.c:292
+msgid "Supported emulations: "
+msgstr "Mô phá»ng đã há»— trợ : "
+
+#: ldemul.c:334
+#, c-format
+msgid " no emulation specific options.\n"
+msgstr " không có tùy chá»n đặc trÆ°ng cho mô phá»ng.\n"
+
+#: ldexp.c:352
+#, c-format
+msgid "%F%S %% by zero\n"
+msgstr "%F%S %% cho số không\n"
+
+#: ldexp.c:360
+#, c-format
+msgid "%F%S / by zero\n"
+msgstr "%F%S / cho số không\n"
+
+#: ldexp.c:553
+#, c-format
+msgid "%X%S: unresolvable symbol `%s' referenced in expression\n"
+msgstr "%X%S: ký hiệu không tháo gỡ được « %s » được tham chiếu trong biểu thức\n"
+
+#: ldexp.c:564
+#, c-format
+msgid "%F%S: undefined symbol `%s' referenced in expression\n"
+msgstr "%F%S: ký hiệu chưa xác định « %s » được tham chiếu trong biểu thức\n"
+
+#: ldexp.c:585 ldexp.c:602 ldexp.c:629
+#, c-format
+msgid "%F%S: undefined section `%s' referenced in expression\n"
+msgstr "%F%S: phần chưa xác định « %s » được tham chiếu trong biểu thức\n"
+
+#: ldexp.c:656 ldexp.c:669
+#, c-format
+msgid "%F%S: undefined MEMORY region `%s' referenced in expression\n"
+msgstr "%F%S: miá»n MEMORY (bá»™ nhá»›) chÆ°a xác định « %s » được tham chiếu trong biểu thức\n"
+
+#: ldexp.c:680
+#, c-format
+msgid "%F%S: unknown constant `%s' referenced in expression\n"
+msgstr "%F%S: hằng không rõ « %s » được tham chiếu trong biểu thức\n"
+
+#: ldexp.c:741
+#, c-format
+msgid "%F%S can not PROVIDE assignment to location counter\n"
+msgstr "%F%S không thể PROVIDE (cung cấp) sự gán cho bộ đếm địa điểm\n"
+
+#: ldexp.c:755
+#, c-format
+msgid "%F%S invalid assignment to location counter\n"
+msgstr "%F%S sự gán không hợp lệ cho bộ đếm địa điểm\n"
+
+#: ldexp.c:758
+#, c-format
+msgid "%F%S assignment to location counter invalid outside of SECTION\n"
+msgstr "%F%S sự gán cho bộ đếm địa điểm không phải hợp lệ bên ngoài SECTION (phần)\n"
+
+#: ldexp.c:767
+msgid "%F%S cannot move location counter backwards (from %V to %V)\n"
+msgstr "%F%S không thể chạy ngược bộ đếm địa điểm (từ %V vỠ%V)\n"
+
+#: ldexp.c:806
+msgid "%P%F:%s: hash creation failed\n"
+msgstr "%P%F:%s: lỗi tạo băm\n"
+
+#: ldexp.c:1065 ldexp.c:1090 ldexp.c:1149
+#, c-format
+msgid "%F%S: nonconstant expression for %s\n"
+msgstr "%F%S biểu thức khác hằng cho %s\n"
+
+#: ldfile.c:137
+#, c-format
+msgid "attempt to open %s failed\n"
+msgstr "lỗi thử mở %s\n"
+
+#: ldfile.c:139
+#, c-format
+msgid "attempt to open %s succeeded\n"
+msgstr "mở thành công %s\n"
+
+#: ldfile.c:145
+msgid "%F%P: invalid BFD target `%s'\n"
+msgstr "%F%P: đích BFD không hợp lệ « %s »\n"
+
+#: ldfile.c:254 ldfile.c:283
+msgid "%P: skipping incompatible %s when searching for %s\n"
+msgstr "%P: đang bỠqua %s không tương thích khi tìm kiếm %s\n"
+
+#: ldfile.c:267
+msgid "%F%P: attempted static link of dynamic object `%s'\n"
+msgstr "%F%P: đã thử liên kết tĩnh đối tượng động « %s »\n"
+
+#: ldfile.c:379
+msgid "%F%P: %s (%s): No such file: %E\n"
+msgstr "%F%P: %s (%s): Không có tập tin như vậy: %E\n"
+
+#: ldfile.c:382
+msgid "%F%P: %s: No such file: %E\n"
+msgstr "%F%P: %s: Không có tập tin như vậy: %E\n"
+
+#: ldfile.c:412
+msgid "%F%P: cannot find %s inside %s\n"
+msgstr "%F%P: không tìm thấy %s bên trong %s\n"
+
+#: ldfile.c:415
+msgid "%F%P: cannot find %s\n"
+msgstr "%F%P: không tìm thấy được %s\n"
+
+#: ldfile.c:431 ldfile.c:449
+#, c-format
+msgid "cannot find script file %s\n"
+msgstr "không tìm thấy tập tin văn lệnh %s\n"
+
+#: ldfile.c:433 ldfile.c:451
+#, c-format
+msgid "opened script file %s\n"
+msgstr "đã mở tập tin văn lệnh %s\n"
+
+#: ldfile.c:586
+msgid "%P%F: cannot open linker script file %s: %E\n"
+msgstr "%P%F: không thể mở tập tin văn lệnh liên kết %s: %E\n"
+
+#: ldfile.c:651
+msgid "%P%F: cannot represent machine `%s'\n"
+msgstr "%P%F: không thể đại diện máy « %s »\n"
+
+#: ldlang.c:1145 ldlang.c:1187 ldlang.c:3014
+msgid "%P%F: can not create hash table: %E\n"
+msgstr "%P%F: không thể tạo bảng băm: %E\n"
+
+#: ldlang.c:1238
+msgid "%P:%S: warning: redeclaration of memory region `%s'\n"
+msgstr "%P:%S: cảnh báo : khai báo lại vùng nhớ « %s »\n"
+
+#: ldlang.c:1244
+msgid "%P:%S: warning: memory region `%s' not declared\n"
+msgstr "%P:%S: cảnh báo : chưa khai báo vùng nhớ « %s »\n"
+
+#: ldlang.c:1278
+msgid "%F%P:%S: error: alias for default memory region\n"
+msgstr "%F%P:%S: lỗi: bí danh cho vùng nhớ mặc định\n"
+
+#: ldlang.c:1289
+msgid "%F%P:%S: error: redefinition of memory region alias `%s'\n"
+msgstr "%F%P:%S: lỗi: xác định lại bí danh vùng nhớ « %s »\n"
+
+#: ldlang.c:1296
+msgid "%F%P:%S: error: memory region `%s' for alias `%s' does not exist\n"
+msgstr "%F%P:%S: lỗi: vùng nhớ « %s » cho bí danh « %s » vẫn không tồn tại\n"
+
+#: ldlang.c:1348 ldlang.c:1387
+msgid "%P%F: failed creating section `%s': %E\n"
+msgstr "%P%F: lỗi tạo phần « %s »: %E\n"
+
+#: ldlang.c:1930
+#, c-format
+msgid ""
+"\n"
+"Discarded input sections\n"
+"\n"
+msgstr ""
+"\n"
+"Phần nhập bị hủy\n"
+"\n"
+
+#: ldlang.c:1938
+msgid ""
+"\n"
+"Memory Configuration\n"
+"\n"
+msgstr ""
+"\n"
+"Cấu hình bộ nhớ\n"
+"\n"
+
+#: ldlang.c:1940
+msgid "Name"
+msgstr "Tên"
+
+#: ldlang.c:1940
+msgid "Origin"
+msgstr "Gốc"
+
+#: ldlang.c:1940
+msgid "Length"
+msgstr "Dài"
+
+#: ldlang.c:1940
+msgid "Attributes"
+msgstr "Thuộc tính"
+
+#: ldlang.c:1980
+#, c-format
+msgid ""
+"\n"
+"Linker script and memory map\n"
+"\n"
+msgstr ""
+"\n"
+"Văn lệnh liên kết và sơ đồ bộ nhớ\n"
+"\n"
+
+#: ldlang.c:2050
+msgid "%P%F: Illegal use of `%s' section\n"
+msgstr "%P%F: không cho phép cách sử dụng phần « %s »\n"
+
+#: ldlang.c:2059
+msgid "%P%F: output format %s cannot represent section called %s\n"
+msgstr "%P%F: định dạng xuất %s không thể đại diện phần tên %s\n"
+
+#: ldlang.c:2607
+msgid "%B: file not recognized: %E\n"
+msgstr "%B: không nhận ra tập tin: %E\n"
+
+#: ldlang.c:2608
+msgid "%B: matching formats:"
+msgstr "%B: các định dạng khớp:"
+
+#: ldlang.c:2615
+msgid "%F%B: file not recognized: %E\n"
+msgstr "%F%B: không nhận ra tập tin: %E\n"
+
+#: ldlang.c:2685
+msgid "%F%B: member %B in archive is not an object\n"
+msgstr "%F%B: bộ phạn %B trong khi không phải là đối tượng\n"
+
+#: ldlang.c:2696 ldlang.c:2710
+msgid "%F%B: could not read symbols: %E\n"
+msgstr "%F%B: không thể Ä‘á»c các ký hiệu : %E\n"
+
+#: ldlang.c:2984
+msgid "%P: warning: could not find any targets that match endianness requirement\n"
+msgstr "%P: cảnh báo : không tìm thấy đích khớp với tình trạng cuối cần thiết\n"
+
+#: ldlang.c:2998
+msgid "%P%F: target %s not found\n"
+msgstr "%P%F: không tìm thấy đích %s\n"
+
+#: ldlang.c:3000
+msgid "%P%F: cannot open output file %s: %E\n"
+msgstr "%P%F: không thể mở tập tin xuất %s: %E\n"
+
+#: ldlang.c:3006
+msgid "%P%F:%s: can not make object file: %E\n"
+msgstr "%P%F:%s: không thể tạo tập tin đối tượng: %E\n"
+
+#: ldlang.c:3010
+msgid "%P%F:%s: can not set architecture: %E\n"
+msgstr "%P%F:%s: không thể đặt kiến trúc: %E\n"
+
+#: ldlang.c:3151
+msgid "%P: warning: %s contains output sections; did you forget -T?\n"
+msgstr "%P: cảnh báo : %s chứa phần xuất; bạn đã quên « -T » ?\n"
+
+#: ldlang.c:3177
+msgid "%P%F: bfd_hash_lookup failed creating symbol %s\n"
+msgstr "%P%F: lỗi « bfd_hash_lookup » khi tạo ký hiệu %s\n"
+
+#: ldlang.c:3195
+msgid "%P%F: bfd_hash_allocate failed creating symbol %s\n"
+msgstr "%P%F: lỗi « bfd_hash_lookup » khi tạo ký hiệu %s\n"
+
+#: ldlang.c:3574
+msgid "%F%P: %s not found for insert\n"
+msgstr "%F%P: không tìm thấy %s để chèn vào\n"
+
+#: ldlang.c:3789
+msgid " load address 0x%V"
+msgstr " nạp địa chỉ 0x%V"
+
+#: ldlang.c:4061
+msgid "%W (size before relaxing)\n"
+msgstr "%W (kích cỡ trước khi lơi ra)\n"
+
+#: ldlang.c:4152
+#, c-format
+msgid "Address of section %s set to "
+msgstr "Äịa chỉ của phần %s được đặt thành "
+
+#: ldlang.c:4305
+#, c-format
+msgid "Fail with %d\n"
+msgstr "Thất bại với %d\n"
+
+#: ldlang.c:4589
+msgid "%X%P: section %s loaded at [%V,%V] overlaps section %s loaded at [%V,%V]\n"
+msgstr "%X%P: phần %s được nạp ở [%V, %V] chồng chéo lên phần %s được nạp ở [%V, %V]\n"
+
+#: ldlang.c:4605
+msgid "%X%P: region `%s' overflowed by %ld bytes\n"
+msgstr "%X%P: vùng « %s » bị %ld byte tràn\n"
+
+#: ldlang.c:4628
+msgid "%X%P: address 0x%v of %B section `%s' is not within region `%s'\n"
+msgstr "%X%P: địa chỉ 0x%v cửa %B phần « %s » không nằm trong vùng « %s »\n"
+
+#: ldlang.c:4639
+msgid "%X%P: %B section `%s' will not fit in region `%s'\n"
+msgstr "%X%P: %B phần « %s » quá lớn so với vùng « %s »\n"
+
+#: ldlang.c:4687
+#, c-format
+msgid "%F%S: non constant or forward reference address expression for section %s\n"
+msgstr "%F%S: biểu thức địa chỉ tham chiếu khác hằng hay tiếp lên cho phần %s\n"
+
+#: ldlang.c:4712
+msgid "%P%X: Internal error on COFF shared library section %s\n"
+msgstr "%P%X: lỗi nội bộ với phần thư viện dùng chung COFF %s\n"
+
+#: ldlang.c:4771
+msgid "%P%F: error: no memory region specified for loadable section `%s'\n"
+msgstr "%P%F: lỗi: chưa ghi rõ vùng bộ nhớ cho phần có khả năng nạp « %s »\n"
+
+#: ldlang.c:4776
+msgid "%P: warning: no memory region specified for loadable section `%s'\n"
+msgstr "%P: lỗi: chưa ghi rõ vùng bộ nhớ cho phần có khả năng nạp « %s »\n"
+
+#: ldlang.c:4798
+msgid "%P: warning: changing start of section %s by %lu bytes\n"
+msgstr "%P: cảnh báo : đang thay đổi đầu của phần %s theo %lu byte\n"
+
+#: ldlang.c:4875
+msgid "%P: warning: dot moved backwards before `%s'\n"
+msgstr "%P: cảnh báo : dấu chấm được di chuyển vỠngược trước « %s »\n"
+
+#: ldlang.c:5048
+msgid "%P%F: can't relax section: %E\n"
+msgstr "%P%F: không thể lơi ra phần: %E\n"
+
+#: ldlang.c:5370
+msgid "%F%P: invalid data statement\n"
+msgstr "%F%P: câu dữ liệu không hợp lệ\n"
+
+#: ldlang.c:5403
+msgid "%F%P: invalid reloc statement\n"
+msgstr "%F%P: câu định vị lại không hợp lệ\n"
+
+#: ldlang.c:5522
+msgid "%P%F: gc-sections requires either an entry or an undefined symbol\n"
+msgstr "%P%F: gc-sections yêu cầu hoặc một mục nhập hoặc một ký hiệu chưa xác định\n"
+
+#: ldlang.c:5547
+msgid "%P%F:%s: can't set start address\n"
+msgstr "%P%F:%s: không thể đặt địa chỉ bắt đầu\n"
+
+#: ldlang.c:5560 ldlang.c:5579
+msgid "%P%F: can't set start address\n"
+msgstr "%P%F: không thể đặt địa chỉ bắt đầu\n"
+
+#: ldlang.c:5572
+msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n"
+msgstr "%P: cảnh báo : không tìm thấy ký hiệu vào %s; nên dùng giá trị mặc định %V\n"
+
+#: ldlang.c:5584
+msgid "%P: warning: cannot find entry symbol %s; not setting start address\n"
+msgstr "%P: cảnh báo : không tìm thấy ký hiệu vào %s; nên không đặt địa chỉ bắt đầu\n"
+
+#: ldlang.c:5634
+msgid "%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"
+msgstr "%P%F: không hỗ trợ khả năng liên kết có khả năng định vị lại với sự định vị lại từ định dạng %s (%B) sang định dạng %s (%B).\n"
+
+#: ldlang.c:5644
+msgid "%P%X: %s architecture of input file `%B' is incompatible with %s output\n"
+msgstr "%P%X: kiến trúc %s của tập tin nhập « %B » không tương thích với kết xuất %s\n"
+
+#: ldlang.c:5666
+msgid "%P%X: failed to merge target specific data of file %B\n"
+msgstr "%P%X: lỗi hợp nhất dữ liệu đặc trưng cho đích của tập tin %B\n"
+
+#: ldlang.c:5737
+msgid "%P%F: Could not define common symbol `%T': %E\n"
+msgstr "%P%F: không thể xác định ký hiệu dùng chung « %T »: %E\n"
+
+#: ldlang.c:5749
+msgid ""
+"\n"
+"Allocating common symbols\n"
+msgstr ""
+"\n"
+"Äang cấp phát các ký hiệu dùng chung\n"
+
+#: ldlang.c:5750
+msgid ""
+"Common symbol size file\n"
+"\n"
+msgstr ""
+"Ký hiệu chung kích cỡ tập tin\n"
+"\n"
+
+#: ldlang.c:5891
+msgid "%P%F: invalid syntax in flags\n"
+msgstr "%P%F: cú pháp không hợp lệ trong các cá»\n"
+
+#: ldlang.c:6283
+msgid "%P%F: Failed to create hash table\n"
+msgstr "%P%F: lỗi tạo bảng băm\n"
+
+#: ldlang.c:6562
+msgid "%P%F: multiple STARTUP files\n"
+msgstr "%P%F: có nhiá»u tập tin STARTUP (khởi chạy)\n"
+
+#: ldlang.c:6610
+msgid "%X%P:%S: section has both a load address and a load region\n"
+msgstr "%X%P:%S: phần có cả hai địa chỉ nạp và vùng nạp\n"
+
+#: ldlang.c:6857
+msgid "%F%P: no sections assigned to phdrs\n"
+msgstr "%F%P: chưa gán phần cho phdirs\n"
+
+#: ldlang.c:6895
+msgid "%F%P: bfd_record_phdr failed: %E\n"
+msgstr "%F%P: « bfd_record_phdr » bị lỗi: %E\n"
+
+#: ldlang.c:6915
+msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n"
+msgstr "%X%P: phần « %s » được gán cho phdr không tồn tại « %s »\n"
+
+#: ldlang.c:7316
+msgid "%X%P: unknown language `%s' in version information\n"
+msgstr "%X%P: gặp ngôn ngữ lạ « %s » trong thông tin phiên bản\n"
+
+#: ldlang.c:7461
+msgid "%X%P: anonymous version tag cannot be combined with other version tags\n"
+msgstr "%X%P: thẻ phiên bản vô danh không kết hợp được với thẻ phiên bản khác\n"
+
+#: ldlang.c:7470
+msgid "%X%P: duplicate version tag `%s'\n"
+msgstr "%X%P: thẻ phiên bản trùng « %s »\n"
+
+#: ldlang.c:7491 ldlang.c:7500 ldlang.c:7518 ldlang.c:7528
+msgid "%X%P: duplicate expression `%s' in version information\n"
+msgstr "%X%P: biểu thức trùng « %s » trong thông tin phiên bản\n"
+
+#: ldlang.c:7568
+msgid "%X%P: unable to find version dependency `%s'\n"
+msgstr "%X%P: không tìm thấy quan hệ phụ thuộc của phiên bản « %s »\n"
+
+#: ldlang.c:7590
+msgid "%X%P: unable to read .exports section contents\n"
+msgstr "%X%P: không thể Ä‘á»c ná»™i dung của phần « .exports » (xuất khẩu)\n"
+
+#: ldmain.c:233
+msgid "%X%P: can't set BFD default target to `%s': %E\n"
+msgstr "%X%P: không thể đặt đích mặc định BFD thành « %s »: %E\n"
+
+#: ldmain.c:300
+msgid "%P%F: -r and -shared may not be used together\n"
+msgstr "%P%F: không thể sá»­ dụng đồng thá»i hai tùy chá»n « -r » và « -shared » (dùng chung)\n"
+
+#: ldmain.c:343
+msgid "%P%F: -F may not be used without -shared\n"
+msgstr "%P%F: không thể sá»­ dụng tùy chá»n « -F » khi không cÅ©ng có tùy chá»n « -shared » (dùng chung)\n"
+
+#: ldmain.c:345
+msgid "%P%F: -f may not be used without -shared\n"
+msgstr "%P%F: không thể sá»­ dụng tùy chá»n « -f » khi không có tùy chá»n « -shared » (dùng chung)\n"
+
+#: ldmain.c:393
+msgid "using external linker script:"
+msgstr "đang dùng văn lệnh liên kết bên ngoài:"
+
+#: ldmain.c:395
+msgid "using internal linker script:"
+msgstr "đang dùng văn lệnh liên kết bên trong:"
+
+#: ldmain.c:429
+msgid "%P%F: no input files\n"
+msgstr "%P%F: không có tập tin nhập vào\n"
+
+#: ldmain.c:433
+msgid "%P: mode %s\n"
+msgstr "%P: chế độ %s\n"
+
+#: ldmain.c:449
+msgid "%P%F: cannot open map file %s: %E\n"
+msgstr "%P%F: không thể mở tập tin sơ đồ %s: %E\n"
+
+#: ldmain.c:481
+msgid "%P: link errors found, deleting executable `%s'\n"
+msgstr "%P: gặp lỗi liên kết nên xoá tập tin có khả năng thực hiện « %s »\n"
+
+#: ldmain.c:490
+msgid "%F%B: final close failed: %E\n"
+msgstr "%F%B: lỗi đóng cuối cùng: %E\n"
+
+#: ldmain.c:516
+msgid "%X%P: unable to open for source of copy `%s'\n"
+msgstr "%X%P: không thể mở cho nguồn của bản sao « %s »\n"
+
+#: ldmain.c:519
+msgid "%X%P: unable to open for destination of copy `%s'\n"
+msgstr "%X%P: không thể mở cho đích của bản sao « %s »\n"
+
+#: ldmain.c:526
+msgid "%P: Error writing file `%s'\n"
+msgstr "%P: gặp lỗi khi ghi tập tin « %s »\n"
+
+#: ldmain.c:531 pe-dll.c:1706
+#, c-format
+msgid "%P: Error closing file `%s'\n"
+msgstr "%P: gặp lỗi khi đóng tập tin « %s »\n"
+
+#: ldmain.c:547
+#, c-format
+msgid "%s: total time in link: %ld.%06ld\n"
+msgstr "%s: tổng thá»i gian trong liên kết: %ld.%06ld\n"
+
+#: ldmain.c:550
+#, c-format
+msgid "%s: data size %ld\n"
+msgstr "%s: kích cỡ dữ liệu %ld\n"
+
+#: ldmain.c:633
+msgid "%P%F: missing argument to -m\n"
+msgstr "%P%F: thiếu đối số tới « -m »\n"
+
+#: ldmain.c:681 ldmain.c:701 ldmain.c:733
+msgid "%P%F: bfd_hash_table_init failed: %E\n"
+msgstr "%P%F: « bfd_hash_table_init » bị lỗi: %E\n"
+
+#: ldmain.c:685 ldmain.c:705
+msgid "%P%F: bfd_hash_lookup failed: %E\n"
+msgstr "%P%F: « bfd_hash_lookup » bị lỗi: %E\n"
+
+#: ldmain.c:719
+msgid "%X%P: error: duplicate retain-symbols-file\n"
+msgstr "%X%P: lỗi: « retain-symbols-file » (giữ lại tập tin ký hiệu) trùng\n"
+
+#: ldmain.c:763
+msgid "%P%F: bfd_hash_lookup for insertion failed: %E\n"
+msgstr "%P%F: lỗi « bfd_hash_lookup » để chèn: %E\n"
+
+#: ldmain.c:768
+msgid "%P: `-retain-symbols-file' overrides `-s' and `-S'\n"
+msgstr "%P: tùy chá»n « -retain-symbols-file » (giữ lại tập tin ký hiệu) có quyá»n cao hÆ¡n « -s » và « -S »\n"
+
+#: ldmain.c:833
+#, c-format
+msgid ""
+"Archive member included because of file (symbol)\n"
+"\n"
+msgstr ""
+"Gồm bộ phạn kho do tập tin (ký hiệu)\n"
+"\n"
+
+#: ldmain.c:903
+msgid "%X%C: multiple definition of `%T'\n"
+msgstr "%X%C: xác định nhiá»u lần « %T »\n"
+
+#: ldmain.c:906
+msgid "%D: first defined here\n"
+msgstr "%D: xác định lần đầu ở đây\n"
+
+#: ldmain.c:910
+msgid "%P: Disabling relaxation: it will not work with multiple definitions\n"
+msgstr "%P: Ä‘ang tắt khả năng lÆ¡i ra: nó sẽ không hoạt Ä‘á»™ng vá»›i nhiá»u lá»i xác định\n"
+
+#: ldmain.c:940
+msgid "%B: warning: definition of `%T' overriding common\n"
+msgstr "%B: cảnh báo : lá»i xác định « %T » đè lên sá»± dùng chung\n"
+
+#: ldmain.c:943
+msgid "%B: warning: common is here\n"
+msgstr "%B: cảnh báo : sự dùng chung ở đây\n"
+
+#: ldmain.c:950
+msgid "%B: warning: common of `%T' overridden by definition\n"
+msgstr "%B: cảnh báo : sự dùng chung của « %T » bị đè bởi lởi xác định\n"
+
+#: ldmain.c:953
+msgid "%B: warning: defined here\n"
+msgstr "%B: cảnh báo : đã xác định ở đây\n"
+
+#: ldmain.c:960
+msgid "%B: warning: common of `%T' overridden by larger common\n"
+msgstr "%B: cảnh báo : sự dùng chung của « %T » bị đè bởi sự dùng chung lớn hơn\n"
+
+#: ldmain.c:963
+msgid "%B: warning: larger common is here\n"
+msgstr "%B: cảnh báo : sự dùng chung lớn hơn ở đây\n"
+
+#: ldmain.c:967
+msgid "%B: warning: common of `%T' overriding smaller common\n"
+msgstr "%B: cảnh báo : sự dùng chung của « %T » đè sự dùng chung nhỠhơn\n"
+
+#: ldmain.c:970
+msgid "%B: warning: smaller common is here\n"
+msgstr "%B: cảnh báo : sự dùng chung nhỠhơn ở đây\n"
+
+#: ldmain.c:974
+msgid "%B: warning: multiple common of `%T'\n"
+msgstr "%B: cảnh báo : có nhiá»u sá»± dùng chung của « %T »\n"
+
+#: ldmain.c:976
+msgid "%B: warning: previous common is here\n"
+msgstr "%B: cảnh báo : sự dùng chung trước ở đây\n"
+
+#: ldmain.c:996 ldmain.c:1034
+msgid "%P: warning: global constructor %s used\n"
+msgstr "%P: cảnh báo : dùng bộ cấu trúc toàn cục %s\n"
+
+#: ldmain.c:1044
+msgid "%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"
+msgstr "%P%F: lỗi hậu phương BFD: « BFD_RELOC_CTOR » không được hỗ trợ\n"
+
+#. We found a reloc for the symbol we are looking for.
+#: ldmain.c:1098 ldmain.c:1100 ldmain.c:1102 ldmain.c:1120 ldmain.c:1165
+msgid "warning: "
+msgstr "cảnh báo : "
+
+#: ldmain.c:1201
+msgid "%F%P: bfd_hash_table_init failed: %E\n"
+msgstr "%F%P: « bfd_hash_table_init » bị lỗi: %E\n"
+
+#: ldmain.c:1208
+msgid "%F%P: bfd_hash_lookup failed: %E\n"
+msgstr "%F%P: « bfd_hash_lookup » bị lỗi: %E\n"
+
+#: ldmain.c:1229
+msgid "%X%C: undefined reference to `%T'\n"
+msgstr "%X%C: tham chiếu đến « %T » chưa xác định\n"
+
+#: ldmain.c:1232
+msgid "%C: warning: undefined reference to `%T'\n"
+msgstr "%C: cảnh báo : tham chiếu đến « %T » chưa xác định\n"
+
+#: ldmain.c:1238
+msgid "%X%D: more undefined references to `%T' follow\n"
+msgstr "%X%D: theo đây có các tham chiếu đến « %T » chưa xác định thêm nữa\n"
+
+#: ldmain.c:1241
+msgid "%D: warning: more undefined references to `%T' follow\n"
+msgstr "%D: cảnh báo : theo đây có các tham chiếu đến « %T » chưa xác định thêm nữa\n"
+
+#: ldmain.c:1252
+msgid "%X%B: undefined reference to `%T'\n"
+msgstr "%X%B: tham chiếu đến « %T » chưa xác định\n"
+
+#: ldmain.c:1255
+msgid "%B: warning: undefined reference to `%T'\n"
+msgstr "%B: cảnh báo : tham chiếu đến « %T » chưa xác định\n"
+
+#: ldmain.c:1261
+msgid "%X%B: more undefined references to `%T' follow\n"
+msgstr "%X%B: theo đây có các tham chiếu đến « %T » chưa xác định thêm nữa\n"
+
+#: ldmain.c:1264
+msgid "%B: warning: more undefined references to `%T' follow\n"
+msgstr "%B: cảnh báo : theo đây có các tham chiếu đến « %T » chưa xác định thêm nữa\n"
+
+#: ldmain.c:1303
+msgid " additional relocation overflows omitted from the output\n"
+msgstr "các sá»± tràn định vị lại thêm nữa bị bá» Ä‘i khá»i kết xuất\n"
+
+#: ldmain.c:1316
+msgid " relocation truncated to fit: %s against undefined symbol `%T'"
+msgstr " sự định vị lại bị cắt ngắn để vừa: %s so với ký hiệu chưa xác định « %T »"
+
+#: ldmain.c:1321
+msgid " relocation truncated to fit: %s against symbol `%T' defined in %A section in %B"
+msgstr " sự định vị lại bị cắt ngắn để vừa: %s so với ký hiệu « %T » đã xác định trong phần %A trong %B"
+
+#: ldmain.c:1333
+msgid " relocation truncated to fit: %s against `%T'"
+msgstr " sự định vị lại bị cắt ngắn để vừa: %s so với « %T »"
+
+#: ldmain.c:1350
+#, c-format
+msgid "%X%C: dangerous relocation: %s\n"
+msgstr "%X%C: sự định vị lại nguy hiểm: %s\n"
+
+#: ldmain.c:1365
+msgid "%X%C: reloc refers to symbol `%T' which is not being output\n"
+msgstr "%X%C: sự định vị lại tham chiếu đến ký hiệu « %T » mà không đang được xuất ra\n"
+
+#: ldmisc.c:148
+#, c-format
+msgid "no symbol"
+msgstr "không có ký hiệu"
+
+#: ldmisc.c:245
+#, c-format
+msgid "built in linker script:%u"
+msgstr "văn lệnh liên kết có sẵn: %u"
+
+#: ldmisc.c:323
+msgid "%B: In function `%T':\n"
+msgstr "%B: trong hàm « %T »:\n"
+
+#: ldmisc.c:445
+msgid "%F%P: internal error %s %d\n"
+msgstr "%F%P: lá»—i ná»™i bá»™ %s %d\n"
+
+#: ldmisc.c:494
+msgid "%P: internal error: aborting at %s line %d in %s\n"
+msgstr "%P: lỗi nội bộ : nên hủy bỠtại %s dòng %d trong %s\n"
+
+#: ldmisc.c:497
+msgid "%P: internal error: aborting at %s line %d\n"
+msgstr "%P: lỗi nội bộ : nên hủy bỠtại %s dòng %d\n"
+
+#: ldmisc.c:499
+msgid "%P%F: please report this bug\n"
+msgstr "%P%F: hãy thông báo lỗi này\n"
+
+#. Output for noisy == 2 is intended to follow the GNU standards.
+#: ldver.c:38
+#, c-format
+msgid "GNU ld %s\n"
+msgstr "GNU ld %s\n"
+
+#: ldver.c:42
+#, c-format
+msgid "Copyright 2009 Free Software Foundation, Inc.\n"
+msgstr "Tác quyá»n © năm 2009 của Tổ chức Phần má»m Tá»± do.\n"
+
+#: ldver.c:43
+#, c-format
+msgid ""
+"This program is free software; you may redistribute it under the terms of\n"
+"the GNU General Public License version 3 or (at your option) a later version.\n"
+"This program has absolutely no warranty.\n"
+msgstr ""
+"ChÆ°Æ¡ng trình này là phần má»m tá»± do; bạn có thể phát hành lại nó\n"
+"vá»›i Ä‘iá»u kiện của Giấy Phép Công Cá»™ng GNU, hoặc phiên bản 3\n"
+"của Giấy Phép này, hoặc (tùy chá»n) bất kỳ phiên bản sau nào.\n"
+"Chương trình này không bảo hành gì cả.\n"
+
+#: ldver.c:53
+#, c-format
+msgid " Supported emulations:\n"
+msgstr " Mô phá»ng được há»— trợ :\n"
+
+#: ldwrite.c:56 ldwrite.c:196
+msgid "%P%F: bfd_new_link_order failed\n"
+msgstr "%P%F: « bfd_new_link_order » bị lỗi\n"
+
+#: ldwrite.c:355
+msgid "%F%P: cannot create split section name for %s\n"
+msgstr "%F%P: không thể tạo tên phần đã xẻ cho %s\n"
+
+#: ldwrite.c:367
+msgid "%F%P: clone section failed: %E\n"
+msgstr "%F%P: lỗi bắt chước phần: %E\n"
+
+#: ldwrite.c:405
+#, c-format
+msgid "%8x something else\n"
+msgstr "%8x cái gì khác\n"
+
+#: ldwrite.c:575
+msgid "%F%P: final link failed: %E\n"
+msgstr "%F%P: liên kết cuối cùng bị lỗi: %E\n"
+
+#: lexsup.c:211 lexsup.c:351
+msgid "KEYWORD"
+msgstr "TỪ KHOÃ"
+
+#: lexsup.c:211
+msgid "Shared library control for HP/UX compatibility"
+msgstr "Äiá»u khiển thÆ° viện dùng chung để tÆ°Æ¡ng thích vá»›i HP/UX"
+
+#: lexsup.c:214
+msgid "ARCH"
+msgstr "KIẾN TRÚC"
+
+#: lexsup.c:214
+msgid "Set architecture"
+msgstr "Äặt kiến trúc"
+
+#: lexsup.c:216 lexsup.c:461
+msgid "TARGET"
+msgstr "ÄÃCH"
+
+#: lexsup.c:216
+msgid "Specify target for following input files"
+msgstr "Ghi rõ đích cho những tập tin nhập theo đây"
+
+#: lexsup.c:219 lexsup.c:270 lexsup.c:282 lexsup.c:295 lexsup.c:297
+#: lexsup.c:415 lexsup.c:473 lexsup.c:535 lexsup.c:548
+msgid "FILE"
+msgstr "TẬP TIN"
+
+#: lexsup.c:219
+msgid "Read MRI format linker script"
+msgstr "Äá»c văn lệnh liên kết định dạng MRI"
+
+#: lexsup.c:221
+msgid "Force common symbols to be defined"
+msgstr "Ép buộc xác định các ký hiệu dùng chung"
+
+#: lexsup.c:225 lexsup.c:517 lexsup.c:519 lexsup.c:521 lexsup.c:523
+msgid "ADDRESS"
+msgstr "ÄỊA CHỈ"
+
+#: lexsup.c:225
+msgid "Set start address"
+msgstr "Äặt địa chỉ bắt đầu"
+
+#: lexsup.c:227
+msgid "Export all dynamic symbols"
+msgstr "Xuất má»i ký hiệu Ä‘á»™ng"
+
+#: lexsup.c:229
+msgid "Undo the effect of --export-dynamic"
+msgstr "Hoàn lại kết quả của « --export-dynamic »"
+
+#: lexsup.c:231
+msgid "Link big-endian objects"
+msgstr "Liên kết các đối tượng vỠcuối lớn"
+
+#: lexsup.c:233
+msgid "Link little-endian objects"
+msgstr "Liên kết các đối tượng vá» cuối nhá»"
+
+#: lexsup.c:235 lexsup.c:238
+msgid "SHLIB"
+msgstr "SHLIB"
+
+#: lexsup.c:235
+msgid "Auxiliary filter for shared object symbol table"
+msgstr "Bá»™ lá»c bổ sung cho bảng ký hiệu đối tượng dùng chung"
+
+#: lexsup.c:238
+msgid "Filter for shared object symbol table"
+msgstr "Bá»™ lá»c cho bảng ký hiệu đối tượng dùng chung"
+
+#: lexsup.c:241
+msgid "Ignored"
+msgstr "Bị bỠqua"
+
+#: lexsup.c:243
+msgid "SIZE"
+msgstr "Cá» "
+
+#: lexsup.c:243
+msgid "Small data size (if no size, same as --shared)"
+msgstr "Kích cỡ dữ liệu nhá» (không có kích cỡ thì bằng tùy chá»n « --shared »)"
+
+#: lexsup.c:246
+msgid "FILENAME"
+msgstr "TÊN TẬP TIN"
+
+#: lexsup.c:246
+msgid "Set internal name of shared library"
+msgstr "Äặt tên ná»™i bá»™ của thÆ° viện dùng chung"
+
+#: lexsup.c:248
+msgid "PROGRAM"
+msgstr "CHƯƠNG TRÌNH"
+
+#: lexsup.c:248
+msgid "Set PROGRAM as the dynamic linker to use"
+msgstr "Äặt CHƯƠNG TRÃŒNH là bá»™ liên kết Ä‘á»™ng cần dùng"
+
+#: lexsup.c:251
+msgid "LIBNAME"
+msgstr "TÊN THƯ VIỆN"
+
+#: lexsup.c:251
+msgid "Search for library LIBNAME"
+msgstr "Tìm kiếm thư viện TÊN THƯ VIỆN"
+
+#: lexsup.c:253
+msgid "DIRECTORY"
+msgstr "THƯ MỤC"
+
+#: lexsup.c:253
+msgid "Add DIRECTORY to library search path"
+msgstr "Thêm THƯ MỤC vào Ä‘Æ°á»ng dẫn tìm kiếm thÆ° viện"
+
+#: lexsup.c:256
+msgid "Override the default sysroot location"
+msgstr "Äè lên địa Ä‘iểm sysroot (gốc hệ thống) mặc định"
+
+#: lexsup.c:258
+msgid "EMULATION"
+msgstr "MÔ PHỎNG"
+
+#: lexsup.c:258
+msgid "Set emulation"
+msgstr "Äặt sá»± mô phá»ng"
+
+#: lexsup.c:260
+msgid "Print map file on standard output"
+msgstr "In tập tin sơ đồ ra thiết bị xuất chuẩn"
+
+#: lexsup.c:262
+msgid "Do not page align data"
+msgstr "Äừng chỉnh canh dữ liệu theo trang"
+
+#: lexsup.c:264
+msgid "Do not page align data, do not make text readonly"
+msgstr "Äừng chỉnh canh dữ liệu theo trang, đừng đặt văn bản là chỉ-Ä‘á»c"
+
+#: lexsup.c:267
+msgid "Page align data, make text readonly"
+msgstr "Chỉnh canh dữ liệu theo trang, đặt văn bản là chỉ-Ä‘á»c"
+
+#: lexsup.c:270
+msgid "Set output file name"
+msgstr "Äặt tên tập tin xuất"
+
+#: lexsup.c:272
+msgid "Optimize output file"
+msgstr "Tối ưu hoá tập tin xuất"
+
+#: lexsup.c:274
+msgid "Ignored for SVR4 compatibility"
+msgstr "Bị bỠqua để tương thích với SVR4"
+
+#: lexsup.c:278
+msgid "Generate relocatable output"
+msgstr "Tạo ra kết xuất có thể định vị lại"
+
+#: lexsup.c:282
+msgid "Just link symbols (if directory, same as --rpath)"
+msgstr "Chỉ liên kết các ký hiệu (thÆ° mục thì bằng tùy chá»n « --rpath »)"
+
+#: lexsup.c:285
+msgid "Strip all symbols"
+msgstr "TÆ°á»›c má»i ký hiệu"
+
+#: lexsup.c:287
+msgid "Strip debugging symbols"
+msgstr "Tước các ký hiệu gỡ lối"
+
+#: lexsup.c:289
+msgid "Strip symbols in discarded sections"
+msgstr "Tước các ký hiệu trong phần bị hủy"
+
+#: lexsup.c:291
+msgid "Do not strip symbols in discarded sections"
+msgstr "Äừng tÆ°á»›c ký hiệu trong phần bị hủy"
+
+#: lexsup.c:293
+msgid "Trace file opens"
+msgstr "Tập tin vết có mở"
+
+#: lexsup.c:295
+msgid "Read linker script"
+msgstr "Äá»c văn lệnh liên kết"
+
+#: lexsup.c:297
+msgid "Read default linker script"
+msgstr "Äá»c văn lệnh liên kết mặc định"
+
+#: lexsup.c:301 lexsup.c:319 lexsup.c:392 lexsup.c:413 lexsup.c:510
+#: lexsup.c:538 lexsup.c:577
+msgid "SYMBOL"
+msgstr "Kà HIỆU"
+
+#: lexsup.c:301
+msgid "Start with undefined reference to SYMBOL"
+msgstr "Bắt đầu với tham chiệu chưa xác định đến Kà HIỆU"
+
+#: lexsup.c:304
+msgid "[=SECTION]"
+msgstr "[=PHẦN]"
+
+#: lexsup.c:305
+msgid "Don't merge input [SECTION | orphan] sections"
+msgstr "Äừng trá»™n phần nhập [PHẦN | thừa]"
+
+#: lexsup.c:307
+msgid "Build global constructor/destructor tables"
+msgstr "Xây dựng các bảng cấu tạo/phá toàn cục"
+
+#: lexsup.c:309
+msgid "Print version information"
+msgstr "In ra thông tin phiên bản"
+
+#: lexsup.c:311
+msgid "Print version and emulation information"
+msgstr "In ra thông tin phiên bản và mô phá»ng"
+
+#: lexsup.c:313
+msgid "Discard all local symbols"
+msgstr "Hủy má»i ký hiệu cục bá»™"
+
+#: lexsup.c:315
+msgid "Discard temporary local symbols (default)"
+msgstr "Hủy các ký hiệu cục bá»™ tạm thá»i (mặc định)"
+
+#: lexsup.c:317
+msgid "Don't discard any local symbols"
+msgstr "Äừng hủy ký hiệu cục bá»™"
+
+#: lexsup.c:319
+msgid "Trace mentions of SYMBOL"
+msgstr "Vết lần gặp Kà HIỆU"
+
+#: lexsup.c:321 lexsup.c:475 lexsup.c:477
+msgid "PATH"
+msgstr "ÄƯỜNG DẪN"
+
+#: lexsup.c:321
+msgid "Default search path for Solaris compatibility"
+msgstr "ÄÆ°á»ng dẫn tìm kiếm mặc định để tÆ°Æ¡ng thích vá»›i Solaris"
+
+#: lexsup.c:324
+msgid "Start a group"
+msgstr "Bắt đầu nhóm"
+
+#: lexsup.c:326
+msgid "End a group"
+msgstr "Kết thúc nhóm"
+
+#: lexsup.c:330
+msgid "Accept input files whose architecture cannot be determined"
+msgstr "Chấp nhận tập tin nhập có kiến trúc không rõ"
+
+#: lexsup.c:334
+msgid "Reject input files whose architecture is unknown"
+msgstr "Từ chối tập tin nhập có kiến trúc không rõ"
+
+#: lexsup.c:337
+msgid ""
+"Set DT_NEEDED tags for DT_NEEDED entries in\n"
+" following dynamic libs"
+msgstr ""
+"Äặt thẻ « DT_NEEDED » (DT yêu cầu)\n"
+"\tcho mục nhập « DT_NEEDED »\n"
+"\ttrong những thư viện động theo đây"
+
+#: lexsup.c:341
+msgid ""
+"Do not set DT_NEEDED tags for DT_NEEDED entries\n"
+" in following dynamic libs"
+msgstr ""
+"Không đặt thẻ « DT_NEEDED »\n"
+"cho mục nhập « DT_NEEDED »\n"
+"trong những thư viện theo đây"
+
+#: lexsup.c:345
+msgid "Only set DT_NEEDED for following dynamic libs if used"
+msgstr ""
+"Chỉ lập thẻ « DT_NEEDED » (cần thiết DT)\n"
+"\tcho những thư viện động theo đây nếu được dùng"
+
+#: lexsup.c:348
+msgid "Always set DT_NEEDED for following dynamic libs"
+msgstr ""
+"Luôn luôn lập thẻ « DT_NEEDED » (cần thiết DT)\n"
+"\tcho những thư viện động theo đây"
+
+#: lexsup.c:351
+msgid "Ignored for SunOS compatibility"
+msgstr "Bị bỠqua để tương thích với SunOS"
+
+#: lexsup.c:353
+msgid "Link against shared libraries"
+msgstr "Liên kết so với thư viện dùng chung"
+
+#: lexsup.c:359
+msgid "Do not link against shared libraries"
+msgstr "Äừng liên kết so vá»›i thÆ° viện dùng chung"
+
+#: lexsup.c:367
+msgid "Bind global references locally"
+msgstr "Äóng kết cục bá»™ tham chiếu toàn cục"
+
+#: lexsup.c:369
+msgid "Bind global function references locally"
+msgstr "Äóng kết cục bá»™ tham chiếu hàm toàn cục"
+
+#: lexsup.c:371
+msgid "Check section addresses for overlaps (default)"
+msgstr "Kiểm tra địa chỉ phần có chồng chéo (mặc định)"
+
+#: lexsup.c:374
+msgid "Do not check section addresses for overlaps"
+msgstr "Äừng kiểm tra địa chỉ phần có chồng chéo"
+
+#: lexsup.c:377
+msgid "Output cross reference table"
+msgstr "Xuất bảng tham chiếu chéo"
+
+#: lexsup.c:379
+msgid "SYMBOL=EXPRESSION"
+msgstr "Kà HIỆU=BIỂU THỨC"
+
+#: lexsup.c:379
+msgid "Define a symbol"
+msgstr "Xác định một ký hiệu"
+
+#: lexsup.c:381
+msgid "[=STYLE]"
+msgstr "[=KIỂU DÃNG]"
+
+#: lexsup.c:381
+msgid "Demangle symbol names [using STYLE]"
+msgstr "Tháo gỡ tên ký hiệu [dùng KIỂU DÃNG]"
+
+#: lexsup.c:384
+msgid "Generate embedded relocs"
+msgstr "Tạo ra sự định vị lại nhúng"
+
+#: lexsup.c:386
+msgid "Treat warnings as errors"
+msgstr "Xử lý cảnh báo là lỗi"
+
+#: lexsup.c:389
+msgid "Do not treat warnings as errors (default)"
+msgstr "Không xử lý cảnh báo là lỗi (mặc định)"
+
+#: lexsup.c:392
+msgid "Call SYMBOL at unload-time"
+msgstr "Gá»i Kà HIỆU vào lúc bá» nạp"
+
+#: lexsup.c:394
+msgid "Force generation of file with .exe suffix"
+msgstr "Ép buộc tạo ra tập tin có hậu tố « .exe »"
+
+#: lexsup.c:396
+msgid "Remove unused sections (on some targets)"
+msgstr "Gỡ bỠcác phần không dùng (trên một số đích)"
+
+#: lexsup.c:399
+msgid "Don't remove unused sections (default)"
+msgstr "Äừng gỡ bá» các phần không dùng (mặc định)"
+
+#: lexsup.c:402
+msgid "List removed unused sections on stderr"
+msgstr "Liệt kê trên stderr các phần không dùng bị gỡ bá»"
+
+#: lexsup.c:405
+msgid "Do not list removed unused sections"
+msgstr "Äừng liệt kê các phần không dùng bị gỡ bá»"
+
+#: lexsup.c:408
+msgid "Set default hash table size close to <NUMBER>"
+msgstr "Äặt kích cỡ bảng băm mặc định thành gần <Sá»>"
+
+#: lexsup.c:411
+msgid "Print option help"
+msgstr "In ra trợ giúp vá» tùy chá»n"
+
+#: lexsup.c:413
+msgid "Call SYMBOL at load-time"
+msgstr "Gá»i Kà HIỆU vào lúc nạp"
+
+#: lexsup.c:415
+msgid "Write a map file"
+msgstr "Ghi tập tin sơ đồ"
+
+#: lexsup.c:417
+msgid "Do not define Common storage"
+msgstr "Äừng xác định sức chứa dùng chung"
+
+#: lexsup.c:419
+msgid "Do not demangle symbol names"
+msgstr "Äừng tháo gỡ tên ký hiệu"
+
+#: lexsup.c:421
+msgid "Use less memory and more disk I/O"
+msgstr "Chiếm ít bá»™ nhá»› hÆ¡n, còn V/R Ä‘Ä©a nhiá»u hÆ¡n"
+
+#: lexsup.c:423
+msgid "Do not allow unresolved references in object files"
+msgstr "Äừng cho phép tham chiệu chÆ°a tháo gỡ trong tập tin đối tượng"
+
+#: lexsup.c:426
+msgid "Allow unresolved references in shared libaries"
+msgstr "Cho phép tham chiệu chưa tháo gỡ trong thư viện dùng chung"
+
+#: lexsup.c:430
+msgid "Do not allow unresolved references in shared libs"
+msgstr "Äừng cho phép tham chiệu chÆ°a tháo gỡ trong thÆ° viện dùng chung"
+
+#: lexsup.c:434
+msgid "Allow multiple definitions"
+msgstr "Cho phép nhiá»u lá»i xác định"
+
+#: lexsup.c:436
+msgid "Disallow undefined version"
+msgstr "Không cho phép phiên bản chưa xác định"
+
+#: lexsup.c:438
+msgid "Create default symbol version"
+msgstr "Tạo phiên bản ký hiệu mặc định"
+
+#: lexsup.c:441
+msgid "Create default symbol version for imported symbols"
+msgstr "Tạo phiên bản ký hiệu mặc định cho các ký hiệu đã nhập khẩu"
+
+#: lexsup.c:444
+msgid "Don't warn about mismatched input files"
+msgstr "Äừng cảnh báo vá» tập tin nhập sai khá»›p"
+
+#: lexsup.c:447
+msgid "Don't warn on finding an incompatible library"
+msgstr "Äừng cảnh báo khi tìm thÆ° viện không tÆ°Æ¡ng thích"
+
+#: lexsup.c:450
+msgid "Turn off --whole-archive"
+msgstr "Tắt tùy chá»n « --whole-archive » (toàn kho)"
+
+#: lexsup.c:452
+msgid "Create an output file even if errors occur"
+msgstr "Tạo tập tin xuất thậm chí nếu gặp lỗi"
+
+#: lexsup.c:457
+msgid ""
+"Only use library directories specified on\n"
+" the command line"
+msgstr ""
+"Chỉ sử dụng những thư mục thư viện\n"
+"được ghi rõ trên dòng lệnh"
+
+#: lexsup.c:461
+msgid "Specify target of output file"
+msgstr "Ghi rõ đích của tập tin xuất"
+
+#: lexsup.c:464
+msgid "Ignored for Linux compatibility"
+msgstr "Bị bỠqua để tương thích với Linux"
+
+#: lexsup.c:467
+msgid "Reduce memory overheads, possibly taking much longer"
+msgstr "Giảm bộ nhớ duy tu, có thể chạy rất chậm hơn"
+
+#: lexsup.c:470
+msgid "Relax branches on certain targets"
+msgstr "Lơi ra nhánh trên một số đích nào đó"
+
+#: lexsup.c:473
+msgid "Keep only symbols listed in FILE"
+msgstr "Giữ chỉ những ký hiệu được liệt kê trong TẬP TIN"
+
+#: lexsup.c:475
+msgid "Set runtime shared library search path"
+msgstr "Äặt Ä‘Æ°á»ng dẫn tìm kiếm thÆ° viện dùng chung vào lúc chạy"
+
+#: lexsup.c:477
+msgid "Set link time shared library search path"
+msgstr "Äặt Ä‘Æ°á»ng dẫn tìm kiếm thÆ° viện dùng chung vào lúc liên kết"
+
+#: lexsup.c:480
+msgid "Create a shared library"
+msgstr "Tạo thư viện dùng chung"
+
+#: lexsup.c:484
+msgid "Create a position independent executable"
+msgstr "Tạo tập tin có khả năng thực hiện không phụ thuộc vào vị trí"
+
+#: lexsup.c:488
+msgid "[=ascending|descending]"
+msgstr "[=tăng|giảm]"
+
+#: lexsup.c:489
+msgid "Sort common symbols by alignment [in specified order]"
+msgstr "Sắp xếp các ký hiệu dùng chung theo thứ tự đã ghi rõ"
+
+#: lexsup.c:494
+msgid "name|alignment"
+msgstr "tên|chỉnh_canh"
+
+#: lexsup.c:495
+msgid "Sort sections by name or maximum alignment"
+msgstr "Sắp xếp các phần theo tên hay sự chỉnh canh tối đa"
+
+#: lexsup.c:497
+msgid "COUNT"
+msgstr "Sá»_ÄẾM"
+
+#: lexsup.c:497
+msgid "How many tags to reserve in .dynamic section"
+msgstr "Số thẻ cần giữ lại trong phần « .dynamic » (động)"
+
+#: lexsup.c:500
+msgid "[=SIZE]"
+msgstr "[=Cá» ]"
+
+#: lexsup.c:500
+msgid "Split output sections every SIZE octets"
+msgstr "Xẻ phần xuất sau mỗi CỠ bộ tám"
+
+#: lexsup.c:503
+msgid "[=COUNT]"
+msgstr "[=Sá»_ÄẾM]"
+
+#: lexsup.c:503
+msgid "Split output sections every COUNT relocs"
+msgstr "Xẻ phần xuất sau má»—i Sá»_ÄẾM sá»± định vị lại"
+
+#: lexsup.c:506
+msgid "Print memory usage statistics"
+msgstr "In ra thống kê cách sử dụng bộ nhớ"
+
+#: lexsup.c:508
+msgid "Display target specific options"
+msgstr "Hiển thị các tùy chá»n đặc trÆ°ng cho đích"
+
+#: lexsup.c:510
+msgid "Do task level linking"
+msgstr "Liên kết trên cấp tác vụ"
+
+#: lexsup.c:512
+msgid "Use same format as native linker"
+msgstr "Dùng cùng định dạng với bộ liên kết sở hữu"
+
+#: lexsup.c:514
+msgid "SECTION=ADDRESS"
+msgstr "PHẦN=ÄỊA_CHỈ"
+
+#: lexsup.c:514
+msgid "Set address of named section"
+msgstr "Äặt địa chỉ của phần có tên"
+
+#: lexsup.c:517
+msgid "Set address of .bss section"
+msgstr "Äặt địa chỉ của phần « .bss »"
+
+#: lexsup.c:519
+msgid "Set address of .data section"
+msgstr "Äặt địa chỉ của phần « .data » (dữ liệu)"
+
+#: lexsup.c:521
+msgid "Set address of .text section"
+msgstr "Äặt địa chỉ của phần « .text » (văn bản)"
+
+#: lexsup.c:523
+msgid "Set address of text segment"
+msgstr "Äặt địa chỉ của phần văn bản"
+
+#: lexsup.c:526
+msgid ""
+"How to handle unresolved symbols. <method> is:\n"
+" ignore-all, report-all, ignore-in-object-files,\n"
+" ignore-in-shared-libs"
+msgstr ""
+"Quản lý ký hiệu chưa tháo gỡ như thế nào.\n"
+" \t<method> (phương pháp) là:\n"
+" • ignore-all\t\t\t\tbỠqua tất cả\n"
+" • report-all\t\t\t\tthông báo tất cả\n"
+" • ignore-in-object-files\tbỠqua trong tập tin đối tượng\n"
+" • ignore-in-shared-libs\tbỠqua trong thư viện dùng chung"
+
+#: lexsup.c:531
+msgid "Output lots of information during link"
+msgstr "Xuất rất nhiá»u thông tin trong khi liên kết"
+
+#: lexsup.c:535
+msgid "Read version information script"
+msgstr "Äá»c văn lệnh thông tin phiên bản"
+
+#: lexsup.c:538
+msgid ""
+"Take export symbols list from .exports, using\n"
+" SYMBOL as the version."
+msgstr ""
+"Lấy danh sách các ký hiệu xuất từ « .exports »,\n"
+"\t\tdùng Kà HIỆU là phiên bản."
+
+#: lexsup.c:542
+msgid "Add data symbols to dynamic list"
+msgstr "Thêm các ký hiệu dữ liệu vào danh sách động"
+
+#: lexsup.c:544
+msgid "Use C++ operator new/delete dynamic list"
+msgstr "Dùng danh sách động mới/xoá toán tử C++"
+
+#: lexsup.c:546
+msgid "Use C++ typeinfo dynamic list"
+msgstr "Dùng danh sách động kiểu/thông tin C++"
+
+#: lexsup.c:548
+msgid "Read dynamic list"
+msgstr "Äá»c danh sách Ä‘á»™ng"
+
+#: lexsup.c:550
+msgid "Warn about duplicate common symbols"
+msgstr "Cảnh báo vỠký hiệu dùng chung trùng"
+
+#: lexsup.c:552
+msgid "Warn if global constructors/destructors are seen"
+msgstr "Cảnh báo nếu gặp bộ cấu tạo/phá toàn cục"
+
+#: lexsup.c:555
+msgid "Warn if the multiple GP values are used"
+msgstr "Cảnh báo nếu nhiá»u giá trị GP được dùng"
+
+#: lexsup.c:557
+msgid "Warn only once per undefined symbol"
+msgstr "Cảnh báo chỉ một lần vỠmỗi ký hiệu chưa xác định"
+
+#: lexsup.c:559
+msgid "Warn if start of section changes due to alignment"
+msgstr "Cảnh báo nếu đầu của phần thay đổi do sự chỉnh canh"
+
+#: lexsup.c:562
+msgid "Warn if shared object has DT_TEXTREL"
+msgstr "Cảnh báo nếu đối tượng dùng chung có « DT_TEXTREL »"
+
+#: lexsup.c:565
+msgid "Warn if an object has alternate ELF machine code"
+msgstr "Cảnh báo nếu đối tượng có mã máy ELF thay thế"
+
+#: lexsup.c:569
+msgid "Report unresolved symbols as warnings"
+msgstr "Thông báo ký hiệu chưa tháo gỡ dạng cảnh báo"
+
+#: lexsup.c:572
+msgid "Report unresolved symbols as errors"
+msgstr "Thông báo ký hiệu chưa tháo gỡ dạng lỗi"
+
+#: lexsup.c:574
+msgid "Include all objects from following archives"
+msgstr "Gồm có má»i đối tượng từ những kho theo đây"
+
+#: lexsup.c:577
+msgid "Use wrapper functions for SYMBOL"
+msgstr "Sá»­ dụng các hàm bao bá»c cho Kà HIỆU"
+
+#: lexsup.c:726
+msgid "%P: unrecognized option '%s'\n"
+msgstr "%P: không nhận ra tùy chá»n « %s »\n"
+
+#: lexsup.c:730
+msgid "%P%F: use the --help option for usage information\n"
+msgstr "%P%F: hãy sá»­ dụng tùy chá»n trợ giúp « --help » để xem thông tin vá» cách sá»­ dụng\n"
+
+#: lexsup.c:748
+msgid "%P%F: unrecognized -a option `%s'\n"
+msgstr "%P%F: không nhận ra tùy chá»n kiểu « -a » « %s »\n"
+
+#: lexsup.c:761
+msgid "%P%F: unrecognized -assert option `%s'\n"
+msgstr "%P%F: không nhận ra tùy chá»n kiểu « -assert » « %s »\n"
+
+#: lexsup.c:804
+msgid "%F%P: unknown demangling style `%s'"
+msgstr "%F%Ps: không rõ kiểu dáng tháo gõ « %s »"
+
+#: lexsup.c:870
+msgid "%P%F: invalid number `%s'\n"
+msgstr "%P%F: con số không hợp lệ « %s »\n"
+
+#: lexsup.c:968
+msgid "%P%F: bad --unresolved-symbols option: %s\n"
+msgstr "%P%F: tùy chá»n « --unresolved-symbols » sai: %s\n"
+
+#. This can happen if the user put "-rpath,a" on the command
+#. line. (Or something similar. The comma is important).
+#. Getopt becomes confused and thinks that this is a -r option
+#. but it cannot parse the text after the -r so it refuses to
+#. increment the optind counter. Detect this case and issue
+#. an error message here. We cannot just make this a warning,
+#. increment optind, and continue because getopt is too confused
+#. and will seg-fault the next time around.
+#: lexsup.c:1042
+msgid "%P%F: bad -rpath option\n"
+msgstr "%P%F: tùy chá»n « -rpath » sai\n"
+
+#: lexsup.c:1153
+msgid "%P%F: -shared not supported\n"
+msgstr "%P%F: không há»— trợ tùy chá»n « -shared »\n"
+
+#: lexsup.c:1162
+msgid "%P%F: -pie not supported\n"
+msgstr "%P%F: không há»— trợ tùy chá»n « -pie »\n"
+
+#: lexsup.c:1170
+msgid "descending"
+msgstr "giảm"
+
+#: lexsup.c:1172
+msgid "ascending"
+msgstr "tăng"
+
+#: lexsup.c:1175
+msgid "%P%F: invalid common section sorting option: %s\n"
+msgstr "%P%F: sai đặt tùy chá»n sắp xếp phần dùng chung: %s\n"
+
+#: lexsup.c:1179
+msgid "name"
+msgstr "tên"
+
+#: lexsup.c:1181
+msgid "alignment"
+msgstr "chỉnh canh"
+
+#: lexsup.c:1184
+msgid "%P%F: invalid section sorting option: %s\n"
+msgstr "%P%F: tùy chá»n sắp xếp phần không hợp lệ: %s\n"
+
+#: lexsup.c:1218
+msgid "%P%F: invalid argument to option \"--section-start\"\n"
+msgstr "%P%F: đối số không hợp lệ đối vá»›i tùy chá»n « --section-start »\n"
+
+#: lexsup.c:1225
+msgid "%P%F: missing argument(s) to option \"--section-start\"\n"
+msgstr "%P%F: thiếu đối số đối vá»›i tùy chá»n « --section-start »\n"
+
+#: lexsup.c:1445
+msgid "%P%F: may not nest groups (--help for usage)\n"
+msgstr "%P%F: không cho phép lồng các nhóm với nhau (« --help » để xem cách sử dụng)\n"
+
+#: lexsup.c:1452
+msgid "%P%F: group ended before it began (--help for usage)\n"
+msgstr "%P%F: nhóm kết thúc trước khi bắt đầu (« --help » để xem cách sử dụng)\n"
+
+#: lexsup.c:1480
+msgid "%P%X: --hash-size needs a numeric argument\n"
+msgstr "%P%X: tùy chá»n « --hash-size » cần thiết đối số thuá»™c số\n"
+
+#: lexsup.c:1531 lexsup.c:1544
+msgid "%P%F: invalid hex number `%s'\n"
+msgstr "%P%F: số thập lục không hợp lệ « %s »\n"
+
+#: lexsup.c:1580
+#, c-format
+msgid "Usage: %s [options] file...\n"
+msgstr "Cách sá»­ dụng: %s <tùy_chá»n> tập_tin...\n"
+
+#: lexsup.c:1582
+#, c-format
+msgid "Options:\n"
+msgstr "Tùy chá»n:\n"
+
+#: lexsup.c:1660
+#, c-format
+msgid " @FILE"
+msgstr " @TẬP_TIN"
+
+#: lexsup.c:1663
+#, c-format
+msgid "Read options from FILE\n"
+msgstr "Äá»c các tùy chá»n từ TẬP_TIN\n"
+
+#. Note: Various tools (such as libtool) depend upon the
+#. format of the listings below - do not change them.
+#: lexsup.c:1668
+#, c-format
+msgid "%s: supported targets:"
+msgstr "%s: đích hỗ trợ :"
+
+#: lexsup.c:1676
+#, c-format
+msgid "%s: supported emulations: "
+msgstr "%s: mô phá»ng há»— trợ : "
+
+#: lexsup.c:1681
+#, c-format
+msgid "%s: emulation specific options:\n"
+msgstr "%s: tùy chá»n đặc trÆ°ng cho mô phá»ng:\n"
+
+#: lexsup.c:1686
+#, c-format
+msgid "Report bugs to %s\n"
+msgstr "Hãy thông báo lỗi cho %s\n"
+
+#: mri.c:292
+msgid "%P%F: unknown format type %s\n"
+msgstr "%P%F: không rõ kiểu định dạng %s\n"
+
+#: pe-dll.c:415
+#, c-format
+msgid "%XUnsupported PEI architecture: %s\n"
+msgstr "%XKhông hỗ trợ kiến trúc PEI: %s\n"
+
+#: pe-dll.c:766
+#, c-format
+msgid "%XCannot export %s: invalid export name\n"
+msgstr "%XKhông thể xuất khẩu %s: tên xuất khẩu không hợp lệ\n"
+
+#: pe-dll.c:822
+#, c-format
+msgid "%XError, duplicate EXPORT with ordinals: %s (%d vs %d)\n"
+msgstr "%XLá»—i: EXPORT trùng vá»›i các Ä‘iá»u thứ tá»± : %s (%d so vá»›i %d)\n"
+
+#: pe-dll.c:829
+#, c-format
+msgid "Warning, duplicate EXPORT: %s\n"
+msgstr "Cảnh báo, EXPORT trùng: %s\n"
+
+#: pe-dll.c:916
+#, c-format
+msgid "%XCannot export %s: symbol not defined\n"
+msgstr "%XKhông thể xuất khẩu %s: chưa xác định ký hiệu\n"
+
+#: pe-dll.c:922
+#, c-format
+msgid "%XCannot export %s: symbol wrong type (%d vs %d)\n"
+msgstr "%XKhông thể xuất khẩu %s: ký hiệu sai kiểu (%d so với %d)\n"
+
+#: pe-dll.c:929
+#, c-format
+msgid "%XCannot export %s: symbol not found\n"
+msgstr "%XKhông thể xuất khẩu %s: không tìm thấy ký hiệu\n"
+
+#: pe-dll.c:1043
+#, c-format
+msgid "%XError, ordinal used twice: %d (%s vs %s)\n"
+msgstr "%XLá»—i, Ä‘iá»u thứ tá»± được dùng hai lần: %d (%s so vá»›i %s)\n"
+
+#: pe-dll.c:1429
+#, c-format
+msgid "%XError: %d-bit reloc in dll\n"
+msgstr "%XLỗi: sự định vị lại %d-bit trong dll\n"
+
+#: pe-dll.c:1557
+#, c-format
+msgid "%s: Can't open output def file %s\n"
+msgstr "%s: Không thể mở tập tin def xuất %s\n"
+
+#: pe-dll.c:1702
+#, c-format
+msgid "; no contents available\n"
+msgstr "; không có nội dung sẵn sàng\n"
+
+#: pe-dll.c:2619
+msgid "%C: variable '%T' can't be auto-imported. Please read the documentation for ld's --enable-auto-import for details.\n"
+msgstr "%C: không thể tá»± Ä‘á»™ng nhập khẩu biến « %T ». Hãy Ä‘á»c tài liệu hÆ°á»›ng dẫn vá» tùy chá»n « --enable-auto-import » (bật nhập tá»± Ä‘á»™ng) của phần má»m ld, để xem chi tiết.\n"
+
+#: pe-dll.c:2649
+#, c-format
+msgid "%XCan't open .lib file: %s\n"
+msgstr "%XKhông thể mở tập tin « .lib » (thư viện): %s\n"
+
+#: pe-dll.c:2654
+#, c-format
+msgid "Creating library file: %s\n"
+msgstr "Äang tạo tập tin thÆ° viện: %s\n"
+
+#: pe-dll.c:2683
+#, c-format
+msgid "%Xbfd_openr %s: %E\n"
+msgstr "%Xbfd_openr %s: %E\n"
+
+#: pe-dll.c:2695
+#, c-format
+msgid "%X%s(%s): can't find member in non-archive file"
+msgstr "%X%s(%s): không tìm thấy mục trong tập tin khác kho lưu"
+
+#: pe-dll.c:2707
+#, c-format
+msgid "%X%s(%s): can't find member in archive"
+msgstr "%X%s(%s): không tìm thấy mục trong kho lưu"
+
+#: pe-dll.c:3097
+#, c-format
+msgid "%XError: can't use long section names on this arch\n"
+msgstr "%XError: không thể sử dụng tên phần dài trên kiến trúc này\n"
diff --git a/binutils-2.21/ld/po/zh_CN.gmo b/binutils-2.21/ld/po/zh_CN.gmo
new file mode 100644
index 0000000..39d1794
--- /dev/null
+++ b/binutils-2.21/ld/po/zh_CN.gmo
Binary files differ
diff --git a/binutils-2.21/ld/po/zh_CN.po b/binutils-2.21/ld/po/zh_CN.po
new file mode 100644
index 0000000..6abbec6
--- /dev/null
+++ b/binutils-2.21/ld/po/zh_CN.po
@@ -0,0 +1,1942 @@
+# Simplified Chinese translation for ld.
+# Copyright (C) 2005 Free Software Foundation, Inc.
+# This file is distributed under the same license as the ld package.
+# Meng Jie <zuxyhere@eastday.com>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ld 2.15.96\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-03-03 21:05+1030\n"
+"PO-Revision-Date: 2006-01-15 01:40+0800\n"
+"Last-Translator: Meng Jie <zuxyhere@eastday.com>\n"
+"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: emultempl/armcoff.em:72
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code 支æŒä¸Žæ—§å¼ä»£ç çš„交互工作\n"
+
+#: emultempl/armcoff.em:73
+#, c-format
+msgid " --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"
+msgstr ""
+
+#: emultempl/armcoff.em:121
+#, c-format
+msgid "Errors encountered processing file %s"
+msgstr "处ç†æ–‡ä»¶ %s æ—¶é‡åˆ°é”™è¯¯"
+
+#: emultempl/armcoff.em:188 emultempl/pe.em:1455
+msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"
+msgstr ""
+
+#: emultempl/armcoff.em:193 emultempl/pe.em:1460
+msgid "%P: warning: connot find thumb start symbol %s\n"
+msgstr ""
+
+#: emultempl/pe.em:301
+#, c-format
+msgid " --base_file <basefile> Generate a base file for relocatable DLLs\n"
+msgstr " --base_file <基å€æ–‡ä»¶> 为å¯é‡å®šä½çš„ DLL 生æˆä¸€ä¸ªåŸºå€æ–‡ä»¶\n"
+
+#: emultempl/pe.em:302
+#, c-format
+msgid " --dll Set image base to the default for DLLs\n"
+msgstr " --dll 设定 DLL 的默认映象基地å€\n"
+
+#: emultempl/pe.em:303
+#, c-format
+msgid " --file-alignment <size> Set file alignment\n"
+msgstr " --file-alignment <大å°> 设定文件对é½è¾¹ç•Œ\n"
+
+#: emultempl/pe.em:304
+#, c-format
+msgid " --heap <size> Set initial size of the heap\n"
+msgstr " --heap <大å°> 设定堆的åˆå§‹å¤§å°\n"
+
+#: emultempl/pe.em:305
+#, c-format
+msgid " --image-base <address> Set start address of the executable\n"
+msgstr " --image-base <地å€> 设定å¯æ‰§è¡Œæ–‡ä»¶çš„起始地å€\n"
+
+#: emultempl/pe.em:306
+#, c-format
+msgid " --major-image-version <number> Set version number of the executable\n"
+msgstr " --major-image-version <æ•°> 设定å¯æ‰§è¡Œæ–‡ä»¶çš„版本å·\n"
+
+#: emultempl/pe.em:307
+#, c-format
+msgid " --major-os-version <number> Set minimum required OS version\n"
+msgstr " --major-os-version <æ•°> 设定对æ“作系统版本的最低è¦æ±‚\n"
+
+#: emultempl/pe.em:308
+#, c-format
+msgid " --major-subsystem-version <number> Set minimum required OS subsystem version\n"
+msgstr " --major-subsystem-version <æ•°> 设定对æ“作系统å­ç³»ç»Ÿç‰ˆæœ¬çš„最低è¦æ±‚\n"
+
+#: emultempl/pe.em:309
+#, c-format
+msgid " --minor-image-version <number> Set revision number of the executable\n"
+msgstr " --minor-image-version <æ•°> 设定å¯æ‰§è¡Œæ–‡ä»¶çš„修订版本å·\n"
+
+#: emultempl/pe.em:310
+#, c-format
+msgid " --minor-os-version <number> Set minimum required OS revision\n"
+msgstr " --minor-os-version <æ•°> 设定对æ“作系统修订版本的最低è¦æ±‚\n"
+
+#: emultempl/pe.em:311
+#, c-format
+msgid " --minor-subsystem-version <number> Set minimum required OS subsystem revision\n"
+msgstr " --minor-subsystem-version <æ•°> 设定对æ“作系统å­ç³»ç»Ÿä¿®è®¢ç‰ˆæœ¬çš„最低è¦æ±‚\n"
+
+#: emultempl/pe.em:312
+#, c-format
+msgid " --section-alignment <size> Set section alignment\n"
+msgstr " --section-alignment <大å°> 设定节的对é½è¾¹ç•Œ\n"
+
+#: emultempl/pe.em:313
+#, c-format
+msgid " --stack <size> Set size of the initial stack\n"
+msgstr " --stack <大å°> 设定åˆå§‹æ ˆçš„大å°\n"
+
+#: emultempl/pe.em:314
+#, c-format
+msgid " --subsystem <name>[:<version>] Set required OS subsystem [& version]\n"
+msgstr " --subsystem <å>[:<版本>] 设定需è¦çš„æ“作系统å­ç³»ç»Ÿ[和版本å·]\n"
+
+#: emultempl/pe.em:315
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code 支æŒä¸Žæ—§å¼ä»£ç çš„交互工作\n"
+
+#: emultempl/pe.em:316
+#, c-format
+msgid " --thumb-entry=<symbol> Set the entry point to be Thumb <symbol>\n"
+msgstr ""
+
+#: emultempl/pe.em:318
+#, c-format
+msgid " --add-stdcall-alias Export symbols with and without @nn\n"
+msgstr " --add-stdcall-alias 导出带与ä¸å¸¦ @nn 的符å·\n"
+
+#: emultempl/pe.em:319
+#, c-format
+msgid " --disable-stdcall-fixup Don't link _sym to _sym@nn\n"
+msgstr " --disable-stdcall-fixup ä¸å°† _sym 链接至 _sym@nn\n"
+
+#: emultempl/pe.em:320
+#, c-format
+msgid " --enable-stdcall-fixup Link _sym to _sym@nn without warnings\n"
+msgstr " --enable-stdcall-fixup å°† _sym 链接至 _sym@nn 而ä¸ç»™å‡ºè­¦å‘Š\n"
+
+#: emultempl/pe.em:321
+#, c-format
+msgid " --exclude-symbols sym,sym,... Exclude symbols from automatic export\n"
+msgstr " --exclude-symbols 符å·,符å·,... 将一些符å·æŽ’除在自动导入以外\n"
+
+#: emultempl/pe.em:322
+#, c-format
+msgid " --exclude-libs lib,lib,... Exclude libraries from automatic export\n"
+msgstr " --exclude-libs 库,库,... 将一些库排除在自动导入以外\n"
+
+#: emultempl/pe.em:323
+#, c-format
+msgid " --export-all-symbols Automatically export all globals to DLL\n"
+msgstr " --export-all-symbols 自动将所有全局é‡å¯¼å‡ºè‡³ DLL\n"
+
+#: emultempl/pe.em:324
+#, c-format
+msgid " --kill-at Remove @nn from exported symbols\n"
+msgstr " --kill-at 从导出符å·ä¸­ç§»åŽ» @nn\n"
+
+#: emultempl/pe.em:325
+#, c-format
+msgid " --out-implib <file> Generate import library\n"
+msgstr " --out-implib <文件> 生æˆå¯¼å…¥åº“\n"
+
+#: emultempl/pe.em:326
+#, c-format
+msgid " --output-def <file> Generate a .DEF file for the built DLL\n"
+msgstr " --output-def <文件> 为建立的 DLL 生æˆä¸€ä¸ª .DEF 文件\n"
+
+#: emultempl/pe.em:327
+#, c-format
+msgid " --warn-duplicate-exports Warn about duplicate exports.\n"
+msgstr " --warn-duplicate-exports 对é‡å¤å¯¼å‡ºç»™å‡ºè­¦å‘Šã€‚\n"
+
+#: emultempl/pe.em:328
+#, c-format
+msgid ""
+" --compat-implib Create backward compatible import libs;\n"
+" create __imp_<SYMBOL> as well.\n"
+msgstr ""
+" --compat-implib 生æˆåŽå‘兼容的导入库;\n"
+" åŒæ—¶ç”Ÿæˆ __imp_<符å·>。\n"
+
+#: emultempl/pe.em:330
+#, c-format
+msgid ""
+" --enable-auto-image-base Automatically choose image base for DLLs\n"
+" unless user specifies one\n"
+msgstr " --enable-auto-image-base 除éžç”¨æˆ·æŒ‡å®šå¦åˆ™è‡ªåŠ¨é€‰æ‹©æ˜ è±¡åŸºåœ°å€\n"
+
+#: emultempl/pe.em:332
+#, c-format
+msgid " --disable-auto-image-base Do not auto-choose image base. (default)\n"
+msgstr " --disable-auto-image-base ä¸è‡ªåŠ¨é€‰æ‹©æ˜ è±¡åŸºåœ°å€ã€‚(默认)\n"
+
+#: emultempl/pe.em:333
+#, c-format
+msgid ""
+" --dll-search-prefix=<string> When linking dynamically to a dll without\n"
+" an importlib, use <string><basename>.dll\n"
+" in preference to lib<basename>.dll \n"
+msgstr ""
+" --dll-search-prefix=<字符串> 动æ€é“¾æŽ¥è‡³ DLL 而缺少导入库时,使用\n"
+" <字符串><基本å>.dll 而ä¸æ˜¯ lib<基本å>.dll\n"
+
+#: emultempl/pe.em:336
+#, c-format
+msgid ""
+" --enable-auto-import Do sophistcated linking of _sym to\n"
+" __imp_sym for DATA references\n"
+msgstr ""
+" --enable-auto-import 为实现 DATA 引用,使用å¤æ‚的手段将 _sym\n"
+" 链接至 __imp_sym\n"
+
+#: emultempl/pe.em:338
+#, c-format
+msgid " --disable-auto-import Do not auto-import DATA items from DLLs\n"
+msgstr " --disable-auto-import ä¸ä¸º DLL 自动导入 DATA 项\n"
+
+#: emultempl/pe.em:339
+#, c-format
+msgid ""
+" --enable-runtime-pseudo-reloc Work around auto-import limitations by\n"
+" adding pseudo-relocations resolved at\n"
+" runtime.\n"
+msgstr ""
+
+#: emultempl/pe.em:342
+#, c-format
+msgid ""
+" --disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations for\n"
+" auto-imported DATA.\n"
+msgstr ""
+
+#: emultempl/pe.em:344
+#, c-format
+msgid ""
+" --enable-extra-pe-debug Enable verbose debug output when building\n"
+" or linking to DLLs (esp. auto-import)\n"
+msgstr ""
+" --enable-extra-pe-debug 当生æˆæˆ–链接至 DLL æ—¶(尤其当自动导入时)å¯ç”¨\n"
+" 详细的调试输出\n"
+
+#: emultempl/pe.em:347
+#, c-format
+msgid ""
+" --large-address-aware Executable supports virtual addresses\n"
+" greater than 2 gigabytes\n"
+msgstr " --large-address-aware å¯æ‰§è¡Œæ–‡ä»¶æ”¯æŒå¤§äºŽ 2 GB 的虚拟内存地å€\n"
+
+#: emultempl/pe.em:414
+msgid "%P: warning: bad version number in -subsystem option\n"
+msgstr ""
+
+#: emultempl/pe.em:445
+#, fuzzy
+msgid "%P%F: invalid subsystem type %s\n"
+msgstr "无效的指å£ç±»åž‹"
+
+#: emultempl/pe.em:484
+msgid "%P%F: invalid hex number for PE parameter '%s'\n"
+msgstr ""
+
+#: emultempl/pe.em:501
+msgid "%P%F: strange hex info for PE parameter '%s'\n"
+msgstr ""
+
+#: emultempl/pe.em:518
+#, c-format
+msgid "%s: Can't open base file %s\n"
+msgstr "%s:无法打开基å€æ–‡ä»¶ %s\n"
+
+#: emultempl/pe.em:734
+#, fuzzy
+msgid "%P: warning, file alignment > section alignment.\n"
+msgstr " --section-alignment <大å°> 设定节的对é½è¾¹ç•Œ\n"
+
+#: emultempl/pe.em:821 emultempl/pe.em:848
+#, c-format
+msgid "Warning: resolving %s by linking to %s\n"
+msgstr ""
+
+#: emultempl/pe.em:826 emultempl/pe.em:853
+msgid "Use --enable-stdcall-fixup to disable these warnings\n"
+msgstr "使用 --enable-stdcall-fixup æ¥ç¦ç”¨è¿™äº›è­¦å‘Š\n"
+
+#: emultempl/pe.em:827 emultempl/pe.em:854
+msgid "Use --disable-stdcall-fixup to disable these fixups\n"
+msgstr "使用 --disable-stdcall-fixup æ¥ç¦ç”¨è¿™äº›ä¿®æ­£\n"
+
+#: emultempl/pe.em:873
+#, c-format
+msgid "%C: Cannot get section contents - auto-import exception\n"
+msgstr ""
+
+#: emultempl/pe.em:910
+#, c-format
+msgid "Info: resolving %s by linking to %s (auto-import)\n"
+msgstr ""
+
+#: emultempl/pe.em:983
+msgid "%F%P: PE operations on non PE file.\n"
+msgstr ""
+
+#: emultempl/pe.em:1258
+#, c-format
+msgid "Errors encountered processing file %s\n"
+msgstr "处ç†æ–‡ä»¶ %s 时出错\n"
+
+#: emultempl/pe.em:1281
+#, c-format
+msgid "Errors encountered processing file %s for interworking"
+msgstr ""
+
+#: emultempl/pe.em:1340 ldexp.c:570 ldlang.c:2408 ldlang.c:5135 ldlang.c:5166
+#: ldmain.c:1161
+msgid "%P%F: bfd_link_hash_lookup failed: %E\n"
+msgstr ""
+
+#: ldcref.c:153
+msgid "%X%P: bfd_hash_table_init of cref table failed: %E\n"
+msgstr ""
+
+#: ldcref.c:159
+#, fuzzy
+msgid "%X%P: cref_hash_lookup failed: %E\n"
+msgstr "主机寻找失败:%s:没有找到主机"
+
+#: ldcref.c:225
+#, c-format
+msgid ""
+"\n"
+"Cross Reference Table\n"
+"\n"
+msgstr ""
+"\n"
+"交å‰å¼•ç”¨è¡¨\n"
+"\n"
+
+#: ldcref.c:226
+msgid "Symbol"
+msgstr "符å·"
+
+#: ldcref.c:234
+#, c-format
+msgid "File\n"
+msgstr "文件\n"
+
+#: ldcref.c:238
+#, c-format
+msgid "No symbols\n"
+msgstr "没有符å·\n"
+
+#: ldcref.c:359 ldcref.c:478
+#, fuzzy
+msgid "%B%F: could not read symbols; %E\n"
+msgstr "%s:无法读å–地å€"
+
+#: ldcref.c:363 ldcref.c:482 ldmain.c:1226 ldmain.c:1230
+#, fuzzy
+msgid "%B%F: could not read symbols: %E\n"
+msgstr "%s:无法读å–地å€"
+
+#: ldcref.c:414
+msgid "%P: symbol `%T' missing from main hash table\n"
+msgstr ""
+
+#: ldcref.c:547 ldcref.c:554 ldmain.c:1273 ldmain.c:1280
+#, fuzzy
+msgid "%B%F: could not read relocs: %E\n"
+msgstr "%s:无法读å–地å€"
+
+#. We found a reloc for the symbol. The symbol is defined
+#. in OUTSECNAME. This reloc is from a section which is
+#. mapped into a section from which references to OUTSECNAME
+#. are prohibited. We must report an error.
+#: ldcref.c:573
+msgid "%X%C: prohibited cross reference from %s to `%T' in %s\n"
+msgstr ""
+
+#: ldctor.c:84
+msgid "%P%X: Different relocs used in set %s\n"
+msgstr ""
+
+#: ldctor.c:102
+msgid "%P%X: Different object file formats composing set %s\n"
+msgstr ""
+
+#: ldctor.c:281 ldctor.c:295
+#, fuzzy
+msgid "%P%X: %s does not support reloc %s for set %s\n"
+msgstr "ISO C ä¸æ”¯æŒç”¨ ~ 求共轭å¤æ•°"
+
+#: ldctor.c:316
+#, fuzzy
+msgid "%P%X: Unsupported size %d for set %s\n"
+msgstr "扩展的寄存器ä¸æ”¯æŒçš„æ“作数大å°"
+
+#: ldctor.c:337
+#, fuzzy
+msgid ""
+"\n"
+"Set Symbol\n"
+"\n"
+msgstr "没有符å·"
+
+#: ldemul.c:227
+#, fuzzy, c-format
+msgid "%S SYSLIB ignored\n"
+msgstr "被忽略的方法‘"
+
+#: ldemul.c:233
+#, fuzzy, c-format
+msgid "%S HLL ignored\n"
+msgstr "被忽略的方法‘"
+
+#: ldemul.c:253
+#, fuzzy
+msgid "%P: unrecognised emulation mode: %s\n"
+msgstr "未知的指令模å¼"
+
+#: ldemul.c:254
+msgid "Supported emulations: "
+msgstr "支æŒçš„仿真: "
+
+#: ldemul.c:296
+#, fuzzy, c-format
+msgid " no emulation specific options.\n"
+msgstr "没有定义选项"
+
+#: ldexp.c:379
+#, c-format
+msgid "%F%S %% by zero\n"
+msgstr "%F%S 对零å–模\n"
+
+#: ldexp.c:386
+#, c-format
+msgid "%F%S / by zero\n"
+msgstr "%F%S 被零除\n"
+
+#: ldexp.c:583
+#, c-format
+msgid "%X%S: unresolvable symbol `%s' referenced in expression\n"
+msgstr "%X%S:无法解æžçš„符å·â€˜%s’在表达å¼ä¸­è¢«å¼•ç”¨\n"
+
+#: ldexp.c:604
+#, c-format
+msgid "%F%S: undefined symbol `%s' referenced in expression\n"
+msgstr "%F%S:未定义的符å·â€˜%s’在表达å¼ä¸­è¢«å¼•ç”¨\n"
+
+#: ldexp.c:665 ldexp.c:678
+#, c-format
+msgid "%F%S: undefined MEMORY region `%s' referenced in expression\n"
+msgstr "%F%S:未定义的 MEMORY 区域‘%s’在表达å¼ä¸­è¢«å¼•ç”¨\n"
+
+#: ldexp.c:757
+#, c-format
+msgid "%F%S can not PROVIDE assignment to location counter\n"
+msgstr ""
+
+#: ldexp.c:770
+#, c-format
+msgid "%F%S invalid assignment to location counter\n"
+msgstr ""
+
+#: ldexp.c:774
+#, c-format
+msgid "%F%S assignment to location counter invalid outside of SECTION\n"
+msgstr ""
+
+#: ldexp.c:783
+msgid "%F%S cannot move location counter backwards (from %V to %V)\n"
+msgstr ""
+
+#: ldexp.c:810
+msgid "%P%F:%s: hash creation failed\n"
+msgstr "%P%F:%s:创建散列表失败\n"
+
+#: ldexp.c:1077 ldexp.c:1109
+#, c-format
+msgid "%F%S nonconstant expression for %s\n"
+msgstr ""
+
+#: ldexp.c:1163
+#, fuzzy, c-format
+msgid "%F%S non constant expression for %s\n"
+msgstr "用éžå¸¸é‡çš„数组表达å¼åˆå§‹åŒ–数组"
+
+#: ldfile.c:139
+#, c-format
+msgid "attempt to open %s failed\n"
+msgstr "试图打开 %s 失败\n"
+
+#: ldfile.c:141
+#, c-format
+msgid "attempt to open %s succeeded\n"
+msgstr "试图打开 %s æˆåŠŸ\n"
+
+#: ldfile.c:147
+#, fuzzy
+msgid "%F%P: invalid BFD target `%s'\n"
+msgstr "无效的目标值ï¼"
+
+#: ldfile.c:255 ldfile.c:282
+#, fuzzy
+msgid "%P: skipping incompatible %s when searching for %s\n"
+msgstr "æœç´¢æ—¶æ€»æ˜¯æ£€æŸ¥ä¸¤æ¬¡"
+
+#: ldfile.c:267
+msgid "%F%P: attempted static link of dynamic object `%s'\n"
+msgstr ""
+
+#: ldfile.c:384
+msgid "%F%P: %s (%s): No such file: %E\n"
+msgstr "%F%P:%s (%s):没有这个文件:%E\n"
+
+#: ldfile.c:387
+msgid "%F%P: %s: No such file: %E\n"
+msgstr "%F%P:%s:没有这个文件:%E\n"
+
+#: ldfile.c:417
+#, fuzzy
+msgid "%F%P: cannot find %s inside %s\n"
+msgstr "找ä¸åˆ° ‘nm’"
+
+#: ldfile.c:420
+msgid "%F%P: cannot find %s\n"
+msgstr "%F%P:找ä¸åˆ° %s\n"
+
+#: ldfile.c:437 ldfile.c:453
+#, c-format
+msgid "cannot find script file %s\n"
+msgstr "找ä¸åˆ°è„šæœ¬æ–‡ä»¶ %s\n"
+
+#: ldfile.c:439 ldfile.c:455
+#, c-format
+msgid "opened script file %s\n"
+msgstr "打开脚本文件 %s\n"
+
+#: ldfile.c:499
+msgid "%P%F: cannot open linker script file %s: %E\n"
+msgstr "%P%F:无法打开链接脚本文件 %s:%E\n"
+
+#: ldfile.c:546
+#, fuzzy
+msgid "%P%F: cannot represent machine `%s'\n"
+msgstr "激活自动应答机(&A)"
+
+#: ldlang.c:511
+msgid "%P%F: out of memory during initialization"
+msgstr "%P%F:åˆå§‹åŒ–时内存ä¸è¶³"
+
+#: ldlang.c:551
+#, fuzzy
+msgid "%P:%S: warning: redeclaration of memory region '%s'\n"
+msgstr "警告:正在使用ä¸å®‰å…¨çš„内存ï¼\n"
+
+#: ldlang.c:557
+msgid "%P:%S: warning: memory region %s not declared\n"
+msgstr "%P:%S:警告:内存区域 %s 未声明\n"
+
+#: ldlang.c:1073
+msgid ""
+"\n"
+"Memory Configuration\n"
+"\n"
+msgstr ""
+"\n"
+"内存é…ç½®\n"
+"\n"
+
+#: ldlang.c:1075
+msgid "Name"
+msgstr "å称"
+
+#: ldlang.c:1075
+msgid "Origin"
+msgstr "æ¥æº"
+
+#: ldlang.c:1075
+msgid "Length"
+msgstr "长度"
+
+#: ldlang.c:1075
+msgid "Attributes"
+msgstr "属性"
+
+#: ldlang.c:1115
+#, c-format
+msgid ""
+"\n"
+"Linker script and memory map\n"
+"\n"
+msgstr ""
+
+#: ldlang.c:1183
+msgid "%P%F: Illegal use of `%s' section\n"
+msgstr "%P%F:对‘%s’节的éžæ³•ä½¿ç”¨\n"
+
+#: ldlang.c:1193
+msgid "%P%F: output format %s cannot represent section called %s\n"
+msgstr ""
+
+#: ldlang.c:1775
+msgid "%B: file not recognized: %E\n"
+msgstr "%B:无法识别文件:%E\n"
+
+#: ldlang.c:1776
+#, fuzzy
+msgid "%B: matching formats:"
+msgstr "å¯ç”¨æ ¼å¼"
+
+#: ldlang.c:1783
+#, fuzzy
+msgid "%F%B: file not recognized: %E\n"
+msgstr "文件格å¼æ— æ³•è¯†åˆ«ã€‚"
+
+#: ldlang.c:1847
+msgid "%F%B: member %B in archive is not an object\n"
+msgstr ""
+
+#: ldlang.c:1858 ldlang.c:1872
+#, fuzzy
+msgid "%F%B: could not read symbols: %E\n"
+msgstr "%s:无法读å–地å€"
+
+#: ldlang.c:2127
+msgid "%P: warning: could not find any targets that match endianness requirement\n"
+msgstr ""
+
+#: ldlang.c:2141
+#, fuzzy
+msgid "%P%F: target %s not found\n"
+msgstr "文件未找到‘%s’"
+
+#: ldlang.c:2143
+msgid "%P%F: cannot open output file %s: %E\n"
+msgstr "%P%F:无法打开输出文件 %s:%E\n"
+
+#: ldlang.c:2149
+#, fuzzy
+msgid "%P%F:%s: can not make object file: %E\n"
+msgstr "无法装入 .glade2 文件"
+
+#: ldlang.c:2153
+msgid "%P%F:%s: can not set architecture: %E\n"
+msgstr "%P%F:%s:无法设置架构:%E\n"
+
+#: ldlang.c:2157
+msgid "%P%F: can not create link hash table: %E\n"
+msgstr ""
+
+#: ldlang.c:2301
+msgid "%P%F: bfd_hash_lookup failed creating symbol %s\n"
+msgstr ""
+
+#: ldlang.c:2319
+msgid "%P%F: bfd_hash_allocate failed creating symbol %s\n"
+msgstr ""
+
+#: ldlang.c:2710
+#, fuzzy
+msgid " load address 0x%V"
+msgstr "从地å€ç°¿è£…å…¥"
+
+#: ldlang.c:2874
+#, fuzzy
+msgid "%W (size before relaxing)\n"
+msgstr "å¯ç”¨é“¾æŽ¥å™¨æ¾å¼›"
+
+#: ldlang.c:2961
+#, fuzzy, c-format
+msgid "Address of section %s set to "
+msgstr "设定有å节的地å€"
+
+#: ldlang.c:3114
+#, fuzzy, c-format
+msgid "Fail with %d\n"
+msgstr "é…置为:%s\n"
+
+#: ldlang.c:3351
+#, fuzzy
+msgid "%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"
+msgstr "节=地å€"
+
+#: ldlang.c:3379
+msgid "%X%P: address 0x%v of %B section %s is not within region %s\n"
+msgstr ""
+
+#: ldlang.c:3388
+#, fuzzy
+msgid "%X%P: region %s is full (%B section %s)\n"
+msgstr "ä¿å­˜æ–‡ç« å‡ºé”™â€œ%sâ€ï¼ˆ%s满了?)"
+
+#: ldlang.c:3439
+msgid "%P%X: Internal error on COFF shared library section %s\n"
+msgstr ""
+
+#: ldlang.c:3493
+msgid "%P%F: error: no memory region specified for loadable section `%s'\n"
+msgstr ""
+
+#: ldlang.c:3498
+msgid "%P: warning: no memory region specified for loadable section `%s'\n"
+msgstr ""
+
+#: ldlang.c:3515
+msgid "%P: warning: changing start of section %s by %u bytes\n"
+msgstr ""
+
+#: ldlang.c:3532
+#, c-format
+msgid "%F%S: non constant or forward reference address expression for section %s\n"
+msgstr ""
+
+#: ldlang.c:3703
+#, fuzzy
+msgid "%P%F: can't relax section: %E\n"
+msgstr "未知的节å“%sâ€"
+
+#: ldlang.c:3960
+#, fuzzy
+msgid "%F%P: invalid data statement\n"
+msgstr "无效的表达å¼è¯­å¥"
+
+#: ldlang.c:3999
+#, fuzzy
+msgid "%F%P: invalid reloc statement\n"
+msgstr "无效的表达å¼è¯­å¥"
+
+#: ldlang.c:4141
+msgid "%P%F:%s: can't set start address\n"
+msgstr "%P%F:%s:无法设置起始地å€\n"
+
+#: ldlang.c:4154 ldlang.c:4173
+msgid "%P%F: can't set start address\n"
+msgstr "%P%F:无法设置起始地å€\n"
+
+#: ldlang.c:4166
+msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n"
+msgstr ""
+
+#: ldlang.c:4178
+msgid "%P: warning: cannot find entry symbol %s; not setting start address\n"
+msgstr ""
+
+#: ldlang.c:4227
+msgid "%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"
+msgstr ""
+
+#: ldlang.c:4237
+msgid "%P: warning: %s architecture of input file `%B' is incompatible with %s output\n"
+msgstr ""
+
+#: ldlang.c:4259
+msgid "%P%X: failed to merge target specific data of file %B\n"
+msgstr ""
+
+#: ldlang.c:4343
+msgid ""
+"\n"
+"Allocating common symbols\n"
+msgstr ""
+"\n"
+"分é…公共符å·\n"
+
+#: ldlang.c:4344
+msgid ""
+"Common symbol size file\n"
+"\n"
+msgstr ""
+"å…¬å…±ç¬¦å· å¤§å° æ–‡ä»¶\n"
+"\n"
+
+#: ldlang.c:4470
+#, fuzzy
+msgid "%P%F: invalid syntax in flags\n"
+msgstr "Comment=语法有错"
+
+#: ldlang.c:4740
+msgid "%P%F: Failed to create hash table\n"
+msgstr "%P%F:无法创建散列表\n"
+
+#: ldlang.c:5057
+#, fuzzy
+msgid "%P%Fmultiple STARTUP files\n"
+msgstr "å¯åŠ¨æ—¶é‡æ–°æ‰“开文件(&F)"
+
+#: ldlang.c:5105
+msgid "%X%P:%S: section has both a load address and a load region\n"
+msgstr ""
+
+#: ldlang.c:5345
+#, fuzzy
+msgid "%F%P: bfd_record_phdr failed: %E\n"
+msgstr "%s:记录归零时失败:%s\n"
+
+#: ldlang.c:5365
+msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n"
+msgstr ""
+
+#: ldlang.c:5751
+#, fuzzy
+msgid "%X%P: unknown language `%s' in version information\n"
+msgstr "%%:version-compare 中有未知的æ“作数‘%s’"
+
+#: ldlang.c:5893
+msgid "%X%P: anonymous version tag cannot be combined with other version tags\n"
+msgstr ""
+
+#: ldlang.c:5902
+msgid "%X%P: duplicate version tag `%s'\n"
+msgstr "%X%P:é‡å¤çš„版本标记‘%s’\n"
+
+#: ldlang.c:5922 ldlang.c:5931 ldlang.c:5948 ldlang.c:5958
+msgid "%X%P: duplicate expression `%s' in version information\n"
+msgstr ""
+
+#: ldlang.c:5998
+#, fuzzy
+msgid "%X%P: unable to find version dependency `%s'\n"
+msgstr "无法打开动æ€ä¾èµ–项‘%s’"
+
+#: ldlang.c:6020
+msgid "%X%P: unable to read .exports section contents\n"
+msgstr ""
+
+#: ldmain.c:229
+msgid "%X%P: can't set BFD default target to `%s': %E\n"
+msgstr ""
+
+#: ldmain.c:341
+msgid "%P%F: --relax and -r may not be used together\n"
+msgstr "%P%F:-relax å’Œ -r ä¸èƒ½ä¸€èµ·ä½¿ç”¨\n"
+
+#: ldmain.c:343
+msgid "%P%F: -r and -shared may not be used together\n"
+msgstr "%P%F:-r å’Œ -shared ä¸èƒ½ä¸€èµ·ä½¿ç”¨\n"
+
+#: ldmain.c:347
+msgid "%P%F: -static and -shared may not be used together\n"
+msgstr "%P%F:-static å’Œ -shared ä¸èƒ½ä¸€èµ·ä½¿ç”¨\n"
+
+#: ldmain.c:352
+msgid "%P%F: -F may not be used without -shared\n"
+msgstr "%P%F:-F 必须与 -shared 一起作用\n"
+
+#: ldmain.c:354
+msgid "%P%F: -f may not be used without -shared\n"
+msgstr "%P%F:-f 必须与 -shared 一起作用\n"
+
+#: ldmain.c:396
+msgid "using external linker script:"
+msgstr "使用外部链接脚本:"
+
+#: ldmain.c:398
+msgid "using internal linker script:"
+msgstr "使用内部链接脚本:"
+
+#: ldmain.c:432
+msgid "%P%F: no input files\n"
+msgstr "%P%F:没有输入文件\n"
+
+#: ldmain.c:436
+msgid "%P: mode %s\n"
+msgstr "%Pï¼šæ¨¡å¼ %s\n"
+
+#: ldmain.c:452
+#, fuzzy
+msgid "%P%F: cannot open map file %s: %E\n"
+msgstr "%s:无法打开图文件\n"
+
+#: ldmain.c:482
+msgid "%P: link errors found, deleting executable `%s'\n"
+msgstr ""
+
+#: ldmain.c:491
+#, fuzzy
+msgid "%F%B: final close failed: %E\n"
+msgstr "无法关闭文件“%sâ€ï¼š%s"
+
+#: ldmain.c:517
+#, fuzzy
+msgid "%X%P: unable to open for source of copy `%s'\n"
+msgstr "无法确定 %1 çš„æºç±»åž‹ã€‚"
+
+#: ldmain.c:520
+#, fuzzy
+msgid "%X%P: unable to open for destination of copy `%s'\n"
+msgstr "<qt>无法打开 <b>%1</b> 读å–。</qt>"
+
+#: ldmain.c:527
+msgid "%P: Error writing file `%s'\n"
+msgstr "%P:写入文件‘%s’时出错\n"
+
+#: ldmain.c:532 pe-dll.c:1447
+#, c-format
+msgid "%P: Error closing file `%s'\n"
+msgstr "%P:关闭文件‘%s’时出错\n"
+
+#: ldmain.c:548
+#, c-format
+msgid "%s: total time in link: %ld.%06ld\n"
+msgstr ""
+
+#: ldmain.c:551
+#, fuzzy, c-format
+msgid "%s: data size %ld\n"
+msgstr "读å–æ•°æ®å¤§å°"
+
+#: ldmain.c:634
+#, fuzzy
+msgid "%P%F: missing argument to -m\n"
+msgstr "‘%s’缺少实å‚\n"
+
+#: ldmain.c:780 ldmain.c:798 ldmain.c:828
+msgid "%P%F: bfd_hash_table_init failed: %E\n"
+msgstr ""
+
+#: ldmain.c:784 ldmain.c:802
+#, fuzzy
+msgid "%P%F: bfd_hash_lookup failed: %E\n"
+msgstr "主机寻找失败:%s:没有找到主机"
+
+#: ldmain.c:816
+msgid "%X%P: error: duplicate retain-symbols-file\n"
+msgstr ""
+
+#: ldmain.c:858
+msgid "%P%F: bfd_hash_lookup for insertion failed: %E\n"
+msgstr ""
+
+#: ldmain.c:863
+msgid "%P: `-retain-symbols-file' overrides `-s' and `-S'\n"
+msgstr "%P:‘-retain-symbols-file’覆盖了‘-s’和‘-S’\n"
+
+#: ldmain.c:938
+#, c-format
+msgid ""
+"Archive member included because of file (symbol)\n"
+"\n"
+msgstr ""
+
+#: ldmain.c:1008
+#, fuzzy
+msgid "%X%C: multiple definition of `%T'\n"
+msgstr "%q#T 多次定义"
+
+#: ldmain.c:1011
+msgid "%D: first defined here\n"
+msgstr "%D:第一次在此定义\n"
+
+#: ldmain.c:1015
+msgid "%P: Disabling relaxation: it will not work with multiple definitions\n"
+msgstr ""
+
+#: ldmain.c:1045
+#, fuzzy
+msgid "%B: warning: definition of `%T' overriding common\n"
+msgstr "%s:%d:警告:%s 的定义未被转化\n"
+
+#: ldmain.c:1048
+#, fuzzy
+msgid "%B: warning: common is here\n"
+msgstr "%J被éšè—的声明在这里"
+
+#: ldmain.c:1055
+msgid "%B: warning: common of `%T' overridden by definition\n"
+msgstr ""
+
+#: ldmain.c:1058
+msgid "%B: warning: defined here\n"
+msgstr "%B:警告:在此定义\n"
+
+#: ldmain.c:1065
+msgid "%B: warning: common of `%T' overridden by larger common\n"
+msgstr ""
+
+#: ldmain.c:1068
+msgid "%B: warning: larger common is here\n"
+msgstr ""
+
+#: ldmain.c:1072
+msgid "%B: warning: common of `%T' overriding smaller common\n"
+msgstr ""
+
+#: ldmain.c:1075
+msgid "%B: warning: smaller common is here\n"
+msgstr ""
+
+#: ldmain.c:1079
+#, fuzzy
+msgid "%B: warning: multiple common of `%T'\n"
+msgstr ""
+"\n"
+"分é…公共符å·\n"
+
+#: ldmain.c:1081
+msgid "%B: warning: previous common is here\n"
+msgstr ""
+
+#: ldmain.c:1101 ldmain.c:1139
+#, fuzzy
+msgid "%P: warning: global constructor %s used\n"
+msgstr "寄存器用作两个全局寄存器å˜é‡"
+
+#: ldmain.c:1149
+msgid "%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"
+msgstr ""
+
+#. We found a reloc for the symbol we are looking for.
+#: ldmain.c:1203 ldmain.c:1205 ldmain.c:1207 ldmain.c:1245 ldmain.c:1293
+msgid "warning: "
+msgstr "警告:"
+
+#: ldmain.c:1327
+msgid "%F%P: bfd_hash_table_init failed: %E\n"
+msgstr ""
+
+#: ldmain.c:1334
+#, fuzzy
+msgid "%F%P: bfd_hash_lookup failed: %E\n"
+msgstr "主机寻找失败:%s:没有找到主机"
+
+#: ldmain.c:1355
+msgid "%X%C: undefined reference to `%T'\n"
+msgstr "%X%C:对‘%T’未定义的引用\n"
+
+#: ldmain.c:1358
+#, fuzzy
+msgid "%C: warning: undefined reference to `%T'\n"
+msgstr "%B:警告:对‘%T’未定义的引用\n"
+
+#: ldmain.c:1364
+msgid "%X%D: more undefined references to `%T' follow\n"
+msgstr ""
+
+#: ldmain.c:1367
+msgid "%D: warning: more undefined references to `%T' follow\n"
+msgstr ""
+
+#: ldmain.c:1378
+msgid "%X%B: undefined reference to `%T'\n"
+msgstr "%X%B:对‘%T’未定义的引用\n"
+
+#: ldmain.c:1381
+msgid "%B: warning: undefined reference to `%T'\n"
+msgstr "%B:警告:对‘%T’未定义的引用\n"
+
+#: ldmain.c:1387
+msgid "%X%B: more undefined references to `%T' follow\n"
+msgstr ""
+
+#: ldmain.c:1390
+msgid "%B: warning: more undefined references to `%T' follow\n"
+msgstr ""
+
+#: ldmain.c:1425 ldmain.c:1478 ldmain.c:1496
+msgid "%P%X: generated"
+msgstr "%P%X:已生æˆ"
+
+#: ldmain.c:1432
+msgid " additional relocation overflows omitted from the output\n"
+msgstr ""
+
+#: ldmain.c:1445
+msgid " relocation truncated to fit: %s against undefined symbol `%T'"
+msgstr ""
+
+#: ldmain.c:1450
+msgid " relocation truncated to fit: %s against symbol `%T' defined in %A section in %B"
+msgstr ""
+
+#: ldmain.c:1460
+msgid " relocation truncated to fit: %s against `%T'"
+msgstr ""
+
+#: ldmain.c:1481
+#, c-format
+msgid "dangerous relocation: %s\n"
+msgstr "å±é™©çš„é‡å®šä½ï¼š%s\n"
+
+#: ldmain.c:1499
+msgid " reloc refers to symbol `%T' which is not being output\n"
+msgstr ""
+
+#: ldmisc.c:149
+#, c-format
+msgid "no symbol"
+msgstr "没有符å·"
+
+#: ldmisc.c:240
+#, c-format
+msgid "built in linker script:%u"
+msgstr "内建链接脚本:%u"
+
+#: ldmisc.c:289 ldmisc.c:293
+msgid "%B%F: could not read symbols\n"
+msgstr "%B%F:无法读å–符å·\n"
+
+#: ldmisc.c:329
+msgid "%B: In function `%T':\n"
+msgstr "%B:在函数‘%T’中:\n"
+
+#: ldmisc.c:480
+msgid "%F%P: internal error %s %d\n"
+msgstr "%F%P:内部错误 %s %d\n"
+
+#: ldmisc.c:526
+msgid "%P: internal error: aborting at %s line %d in %s\n"
+msgstr ""
+
+#: ldmisc.c:529
+msgid "%P: internal error: aborting at %s line %d\n"
+msgstr "%P:内部错误:于 %s 行 %d 放弃\n"
+
+#: ldmisc.c:531
+msgid "%P%F: please report this bug\n"
+msgstr "%P%F:请报告此错误\n"
+
+#. Output for noisy == 2 is intended to follow the GNU standards.
+#: ldver.c:38
+#, c-format
+msgid "GNU ld version %s\n"
+msgstr "GNU ld 版本 %s\n"
+
+#: ldver.c:42
+#, c-format
+msgid "Copyright 2005 Free Software Foundation, Inc.\n"
+msgstr "版æƒæ‰€æœ‰ 2005 自由软件基金会\n"
+
+#: ldver.c:43
+#, c-format
+msgid ""
+"This program is free software; you may redistribute it under the terms of\n"
+"the GNU General Public License. This program has absolutely no warranty.\n"
+msgstr ""
+"本程åºæ˜¯è‡ªç”±è½¯ä»¶ï¼›æ‚¨å¯ä»¥åœ¨éµå¾ª GNU 通用公共许å¯è¯çš„å‰æ下分å‘。本程åºä¸å«ä»»ä½•\n"
+"æ‹…ä¿ã€‚\n"
+
+#: ldver.c:52
+#, c-format
+msgid " Supported emulations:\n"
+msgstr " 支æŒçš„仿真:\n"
+
+#: ldwrite.c:55 ldwrite.c:191
+msgid "%P%F: bfd_new_link_order failed\n"
+msgstr ""
+
+#: ldwrite.c:341
+msgid "%F%P: cannot create split section name for %s\n"
+msgstr ""
+
+#: ldwrite.c:353
+#, fuzzy
+msgid "%F%P: clone section failed: %E\n"
+msgstr "verify_ssa 失败"
+
+#: ldwrite.c:391
+#, fuzzy, c-format
+msgid "%8x something else\n"
+msgstr "#else 没有匹é…çš„ #if"
+
+#: ldwrite.c:561
+#, fuzzy
+msgid "%F%P: final link failed: %E\n"
+msgstr "无法将“%sâ€é“¾æŽ¥åˆ°â€œ%sâ€ï¼š%s"
+
+#: lexsup.c:195 lexsup.c:327
+msgid "KEYWORD"
+msgstr "关键字"
+
+#: lexsup.c:195
+msgid "Shared library control for HP/UX compatibility"
+msgstr ""
+
+#: lexsup.c:198
+msgid "ARCH"
+msgstr "架构"
+
+#: lexsup.c:198
+msgid "Set architecture"
+msgstr "设定 CPU 架构"
+
+#: lexsup.c:200 lexsup.c:421
+msgid "TARGET"
+msgstr "目标"
+
+#: lexsup.c:200
+msgid "Specify target for following input files"
+msgstr "指定éšåŽçš„输入文件的目标"
+
+#: lexsup.c:203 lexsup.c:252 lexsup.c:264 lexsup.c:277 lexsup.c:380
+#: lexsup.c:433 lexsup.c:490
+msgid "FILE"
+msgstr "文件"
+
+#: lexsup.c:203
+msgid "Read MRI format linker script"
+msgstr "è¯»å– MRI æ ¼å¼çš„链接脚本"
+
+#: lexsup.c:205
+msgid "Force common symbols to be defined"
+msgstr "强制公共符å·å¿…须定义"
+
+#: lexsup.c:209 lexsup.c:475 lexsup.c:477 lexsup.c:479
+msgid "ADDRESS"
+msgstr "地å€"
+
+#: lexsup.c:209
+msgid "Set start address"
+msgstr "设定起始地å€"
+
+#: lexsup.c:211
+msgid "Export all dynamic symbols"
+msgstr "导出所有动æ€ç¬¦å·"
+
+#: lexsup.c:213
+msgid "Link big-endian objects"
+msgstr "链接高ä½å­—节在å‰çš„目标文件"
+
+#: lexsup.c:215
+msgid "Link little-endian objects"
+msgstr "链接低ä½å­—节在å‰çš„目标文件"
+
+#: lexsup.c:217 lexsup.c:220
+msgid "SHLIB"
+msgstr "共享库"
+
+#: lexsup.c:217
+msgid "Auxiliary filter for shared object symbol table"
+msgstr "指定为æŸå…±äº«å¯¹è±¡ç¬¦å·è¡¨çš„辅助过滤器"
+
+#: lexsup.c:220
+msgid "Filter for shared object symbol table"
+msgstr "指定为æŸå…±äº«å¯¹è±¡ç¬¦å·è¡¨çš„过滤器"
+
+#: lexsup.c:223
+msgid "Ignored"
+msgstr "忽略"
+
+#: lexsup.c:225
+msgid "SIZE"
+msgstr "大å°"
+
+#: lexsup.c:225
+msgid "Small data size (if no size, same as --shared)"
+msgstr "å°æ•°æ®çš„大å°(如果未给出大å°ï¼Œä¸Ž --shared 相åŒ)"
+
+#: lexsup.c:228
+msgid "FILENAME"
+msgstr "文件å"
+
+#: lexsup.c:228
+msgid "Set internal name of shared library"
+msgstr "设定共享库的内部å称"
+
+#: lexsup.c:230
+msgid "PROGRAM"
+msgstr "程åº"
+
+#: lexsup.c:230
+msgid "Set PROGRAM as the dynamic linker to use"
+msgstr "将“程åºâ€è®¾ä¸ºè¦ä½¿ç”¨çš„动æ€é“¾æŽ¥å™¨"
+
+#: lexsup.c:233
+msgid "LIBNAME"
+msgstr "库å"
+
+#: lexsup.c:233
+msgid "Search for library LIBNAME"
+msgstr "æœç´¢åº““库åâ€"
+
+#: lexsup.c:235
+msgid "DIRECTORY"
+msgstr "目录"
+
+#: lexsup.c:235
+msgid "Add DIRECTORY to library search path"
+msgstr "将“目录â€æ·»åŠ åˆ°åº“æœç´¢è·¯å¾„中"
+
+#: lexsup.c:238
+#, fuzzy
+msgid "Override the default sysroot location"
+msgstr "替代默认的主目录。"
+
+#: lexsup.c:240
+msgid "EMULATION"
+msgstr "仿真"
+
+#: lexsup.c:240
+msgid "Set emulation"
+msgstr "设定仿真"
+
+#: lexsup.c:242
+msgid "Print map file on standard output"
+msgstr "在标准输出上打å°é“¾æŽ¥å›¾æ–‡ä»¶"
+
+#: lexsup.c:244
+msgid "Do not page align data"
+msgstr "ä¸å°†æ•°æ®å¯¹é½è‡³é¡µè¾¹ç•Œ"
+
+#: lexsup.c:246
+msgid "Do not page align data, do not make text readonly"
+msgstr "ä¸å°†æ•°æ®å¯¹é½è‡³é¡µè¾¹ç•Œï¼Œä¸å°† text 节åªè¯»"
+
+#: lexsup.c:249
+msgid "Page align data, make text readonly"
+msgstr "将数æ®å¯¹é½è‡³é¡µè¾¹ç•Œï¼Œä»¤ text 节åªè¯»"
+
+#: lexsup.c:252
+msgid "Set output file name"
+msgstr "设定输出文件å"
+
+#: lexsup.c:254
+msgid "Optimize output file"
+msgstr "优化输出文件"
+
+#: lexsup.c:256
+msgid "Ignored for SVR4 compatibility"
+msgstr "为 SVR4 兼容性所忽略"
+
+#: lexsup.c:260
+msgid "Generate relocatable output"
+msgstr "生æˆå¯é‡æ–°å®šä½çš„输出"
+
+#: lexsup.c:264
+msgid "Just link symbols (if directory, same as --rpath)"
+msgstr "ä»…é“¾æŽ¥ç¬¦å· (如果是目标,与 --rpath 相åŒ)"
+
+#: lexsup.c:267
+msgid "Strip all symbols"
+msgstr "剔除所有符å·ä¿¡æ¯"
+
+#: lexsup.c:269
+msgid "Strip debugging symbols"
+msgstr "剔除调试符å·ä¿¡æ¯"
+
+#: lexsup.c:271
+msgid "Strip symbols in discarded sections"
+msgstr "剔除被丢弃的节中的符å·"
+
+#: lexsup.c:273
+msgid "Do not strip symbols in discarded sections"
+msgstr "ä¸å‰”除被丢弃的节中的符å·"
+
+#: lexsup.c:275
+msgid "Trace file opens"
+msgstr "跟踪文件打开æ“作"
+
+#: lexsup.c:277
+msgid "Read linker script"
+msgstr "读å–链接脚本"
+
+#: lexsup.c:279 lexsup.c:297 lexsup.c:363 lexsup.c:378 lexsup.c:468
+#: lexsup.c:493 lexsup.c:520
+msgid "SYMBOL"
+msgstr "符å·"
+
+#: lexsup.c:279
+msgid "Start with undefined reference to SYMBOL"
+msgstr ""
+
+#: lexsup.c:282
+msgid "[=SECTION]"
+msgstr "[=节]"
+
+#: lexsup.c:283
+msgid "Don't merge input [SECTION | orphan] sections"
+msgstr "ä¸åˆå¹¶å为“节â€çš„输入节或孤立节"
+
+#: lexsup.c:285
+msgid "Build global constructor/destructor tables"
+msgstr "生æˆå…¨å±€æž„造/æžæž„函数表"
+
+#: lexsup.c:287
+msgid "Print version information"
+msgstr "显示版本信æ¯"
+
+#: lexsup.c:289
+msgid "Print version and emulation information"
+msgstr "显示版本和仿真信æ¯"
+
+#: lexsup.c:291
+msgid "Discard all local symbols"
+msgstr "丢弃所有局部符å·"
+
+#: lexsup.c:293
+msgid "Discard temporary local symbols (default)"
+msgstr "丢弃临时局部符å·(默认)"
+
+#: lexsup.c:295
+msgid "Don't discard any local symbols"
+msgstr "ä¸ä¸¢å¼ƒä»»ä½•å±€éƒ¨ç¬¦å·"
+
+#: lexsup.c:297
+#, fuzzy
+msgid "Trace mentions of SYMBOL"
+msgstr "符å·â€˜%s’未知"
+
+#: lexsup.c:299 lexsup.c:435 lexsup.c:437
+msgid "PATH"
+msgstr "路径"
+
+#: lexsup.c:299
+msgid "Default search path for Solaris compatibility"
+msgstr ""
+
+#: lexsup.c:302
+msgid "Start a group"
+msgstr "开始一个组"
+
+#: lexsup.c:304
+msgid "End a group"
+msgstr "结æŸä¸€ä¸ªç»„"
+
+#: lexsup.c:308
+msgid "Accept input files whose architecture cannot be determined"
+msgstr "接å—无法决定其架构的输入文件"
+
+#: lexsup.c:312
+msgid "Reject input files whose architecture is unknown"
+msgstr "æ‹’ç»æž¶æž„ä¸æ˜Žçš„输入文件"
+
+#: lexsup.c:315
+msgid ""
+"Set DT_NEEDED tags for DT_NEEDED entries in\n"
+"\t\t\t\tfollowing dynamic libs"
+msgstr ""
+
+#: lexsup.c:318
+msgid ""
+"Do not set DT_NEEDED tags for DT_NEEDED entries\n"
+"\t\t\t\tin following dynamic libs"
+msgstr ""
+
+#: lexsup.c:321
+msgid "Only set DT_NEEDED for following dynamic libs if used"
+msgstr ""
+
+#: lexsup.c:324
+msgid "Always set DT_NEEDED for following dynamic libs"
+msgstr ""
+
+#: lexsup.c:327
+msgid "Ignored for SunOS compatibility"
+msgstr "为 SunOS 兼容性所忽略"
+
+#: lexsup.c:329
+msgid "Link against shared libraries"
+msgstr "链接到共享库"
+
+#: lexsup.c:335
+msgid "Do not link against shared libraries"
+msgstr "ä¸é“¾æŽ¥åˆ°å…±äº«åº“"
+
+#: lexsup.c:343
+msgid "Bind global references locally"
+msgstr ""
+
+#: lexsup.c:345
+msgid "Check section addresses for overlaps (default)"
+msgstr ""
+
+#: lexsup.c:348
+msgid "Do not check section addresses for overlaps"
+msgstr ""
+
+#: lexsup.c:351
+msgid "Output cross reference table"
+msgstr "输出交å‰å¼•ç”¨è¡¨"
+
+#: lexsup.c:353
+msgid "SYMBOL=EXPRESSION"
+msgstr "符å·=表达å¼"
+
+#: lexsup.c:353
+msgid "Define a symbol"
+msgstr "定义一个符å·"
+
+#: lexsup.c:355
+msgid "[=STYLE]"
+msgstr "[=风格]"
+
+#: lexsup.c:355
+msgid "Demangle symbol names [using STYLE]"
+msgstr "解修饰符å·å[使用“风格â€]"
+
+#: lexsup.c:358
+#, fuzzy
+msgid "Generate embedded relocs"
+msgstr "æ ¼å¼å­—符串嵌有 %<\\0%>"
+
+#: lexsup.c:360
+msgid "Treat warnings as errors"
+msgstr "将警告当作错误"
+
+#: lexsup.c:363
+msgid "Call SYMBOL at unload-time"
+msgstr ""
+
+#: lexsup.c:365
+msgid "Force generation of file with .exe suffix"
+msgstr "强制为生æˆçš„文件添加 .exe åŽç¼€"
+
+#: lexsup.c:367
+msgid "Remove unused sections (on some targets)"
+msgstr "删除未使用的节(在æŸäº›ç›®æ ‡ä¸Š)"
+
+#: lexsup.c:370
+msgid "Don't remove unused sections (default)"
+msgstr "ä¸åˆ é™¤æœªä½¿ç”¨çš„节(默认)"
+
+#: lexsup.c:373
+msgid "Set default hash table size close to <NUMBER>"
+msgstr "åˆå§‹çš„散列表大å°è®¾å®šæŽ¥è¿‘“数â€"
+
+#: lexsup.c:376
+msgid "Print option help"
+msgstr "显示选项帮助"
+
+#: lexsup.c:378
+msgid "Call SYMBOL at load-time"
+msgstr ""
+
+#: lexsup.c:380
+msgid "Write a map file"
+msgstr "写入一个链接图文件"
+
+#: lexsup.c:382
+msgid "Do not define Common storage"
+msgstr ""
+
+#: lexsup.c:384
+msgid "Do not demangle symbol names"
+msgstr ""
+
+#: lexsup.c:386
+msgid "Use less memory and more disk I/O"
+msgstr "更多地使用ç£ç›˜ I/O 而ä¸æ˜¯å†…å­˜"
+
+#: lexsup.c:388
+msgid "Do not allow unresolved references in object files"
+msgstr "ä¸å…许在目标文件中存在无法解æžçš„引用"
+
+#: lexsup.c:391
+msgid "Allow unresolved references in shared libaries"
+msgstr "å…许在目标文件中存在无法解æžçš„引用"
+
+#: lexsup.c:395
+msgid "Do not allow unresolved references in shared libs"
+msgstr "ä¸å…许在共享库中存在无法解æžçš„引用"
+
+#: lexsup.c:399
+msgid "Allow multiple definitions"
+msgstr "å…许多个定义"
+
+#: lexsup.c:401
+msgid "Disallow undefined version"
+msgstr "ä¸å…许未定义的版本"
+
+#: lexsup.c:403
+msgid "Create default symbol version"
+msgstr "生æˆé»˜è®¤çš„符å·ç‰ˆæœ¬"
+
+#: lexsup.c:406
+msgid "Create default symbol version for imported symbols"
+msgstr "为导入符å·ç”Ÿæˆé»˜è®¤çš„符å·ç‰ˆæœ¬"
+
+#: lexsup.c:409
+msgid "Don't warn about mismatched input files"
+msgstr "ä¸ä¸ºä¸åŒ¹é…的输入文件å‘出警告"
+
+#: lexsup.c:411
+msgid "Turn off --whole-archive"
+msgstr "关闭 --whole-archive"
+
+#: lexsup.c:413
+msgid "Create an output file even if errors occur"
+msgstr ""
+
+#: lexsup.c:418
+msgid ""
+"Only use library directories specified on\n"
+"\t\t\t\tthe command line"
+msgstr "åªä½¿ç”¨å‘½ä»¤è¡Œä¸­ç»™å‡ºçš„库目录"
+
+#: lexsup.c:421
+msgid "Specify target of output file"
+msgstr "指定输出文件的目标"
+
+#: lexsup.c:424
+msgid "Ignored for Linux compatibility"
+msgstr "为 Linux 兼容性所忽略"
+
+#: lexsup.c:427
+msgid "Reduce memory overheads, possibly taking much longer"
+msgstr ""
+
+#: lexsup.c:430
+msgid "Relax branches on certain targets"
+msgstr "为æŸäº›ç›®æ ‡ä¼˜åŒ–分支"
+
+#: lexsup.c:433
+msgid "Keep only symbols listed in FILE"
+msgstr "åªä¿ç•™åœ¨â€œæ–‡ä»¶â€ä¸­åˆ—出的符å·"
+
+#: lexsup.c:435
+msgid "Set runtime shared library search path"
+msgstr "设定è¿è¡Œæ—¶å…±äº«åº“çš„æœç´¢è·¯å¾„"
+
+#: lexsup.c:437
+msgid "Set link time shared library search path"
+msgstr "设定链接时共享库的æœç´¢è·¯å¾„"
+
+#: lexsup.c:440
+msgid "Create a shared library"
+msgstr "创建一个共享库"
+
+#: lexsup.c:444
+msgid "Create a position independent executable"
+msgstr "生æˆä¸€ä¸ªä½ç½®æ— å…³çš„å¯æ‰§è¡Œæ–‡ä»¶"
+
+#: lexsup.c:448
+#, fuzzy
+msgid "Sort common symbols by size"
+msgstr "按文件大å°æŽ’åºæ–‡ä»¶åˆ—表"
+
+#: lexsup.c:452
+msgid "name|alignment"
+msgstr "å称|对é½"
+
+#: lexsup.c:453
+msgid "Sort sections by name or maximum alignment"
+msgstr ""
+
+#: lexsup.c:455
+msgid "COUNT"
+msgstr "计数"
+
+#: lexsup.c:455
+msgid "How many tags to reserve in .dynamic section"
+msgstr ""
+
+#: lexsup.c:458
+msgid "[=SIZE]"
+msgstr "[=大å°]"
+
+#: lexsup.c:458
+msgid "Split output sections every SIZE octets"
+msgstr ""
+
+#: lexsup.c:461
+msgid "[=COUNT]"
+msgstr "[=计数]"
+
+#: lexsup.c:461
+msgid "Split output sections every COUNT relocs"
+msgstr ""
+
+#: lexsup.c:464
+msgid "Print memory usage statistics"
+msgstr "打å°å†…存使用统计"
+
+#: lexsup.c:466
+msgid "Display target specific options"
+msgstr "显示目标相关的选项"
+
+#: lexsup.c:468
+#, fuzzy
+msgid "Do task level linking"
+msgstr "任务下移(_W)"
+
+#: lexsup.c:470
+msgid "Use same format as native linker"
+msgstr ""
+
+#: lexsup.c:472
+msgid "SECTION=ADDRESS"
+msgstr "节=地å€"
+
+#: lexsup.c:472
+msgid "Set address of named section"
+msgstr "设定有å节的地å€"
+
+#: lexsup.c:475
+msgid "Set address of .bss section"
+msgstr "设定 .bss 节的地å€"
+
+#: lexsup.c:477
+msgid "Set address of .data section"
+msgstr "设定 .data 节的地å€"
+
+#: lexsup.c:479
+msgid "Set address of .text section"
+msgstr "设定 .text 节的地å€"
+
+#: lexsup.c:482
+msgid ""
+"How to handle unresolved symbols. <method> is:\n"
+"\t\t\t\tignore-all, report-all, ignore-in-object-files,\n"
+"\t\t\t\tignore-in-shared-libs"
+msgstr ""
+"如何处ç†ä¸èƒ½è§£æžçš„符å·ã€‚方法å¯ä»¥æ˜¯ï¼š\n"
+"\t\t\t\tignore-all,report-all,ignore-in-object-files,\n"
+"\t\t\t\tignore-in-shared-libs"
+
+#: lexsup.c:486
+msgid "Output lots of information during link"
+msgstr "链接过程中输出大é‡ç›¸å…³ä¿¡æ¯"
+
+#: lexsup.c:490
+msgid "Read version information script"
+msgstr "读å–版本信æ¯è„šæœ¬"
+
+#: lexsup.c:493
+msgid ""
+"Take export symbols list from .exports, using\n"
+"\t\t\t\tSYMBOL as the version."
+msgstr ""
+
+#: lexsup.c:496
+msgid "Warn about duplicate common symbols"
+msgstr "为é‡å¤çš„公共符å·ç»™å‡ºè­¦å‘Š"
+
+#: lexsup.c:498
+msgid "Warn if global constructors/destructors are seen"
+msgstr ""
+
+#: lexsup.c:501
+msgid "Warn if the multiple GP values are used"
+msgstr ""
+
+#: lexsup.c:503
+msgid "Warn only once per undefined symbol"
+msgstr "为æ¯ä¸€ä¸ªæœªå®šä¹‰çš„符å·åªè­¦å‘Šä¸€æ¬¡"
+
+#: lexsup.c:505
+msgid "Warn if start of section changes due to alignment"
+msgstr ""
+
+#: lexsup.c:508
+msgid "Warn if shared object has DT_TEXTREL"
+msgstr ""
+
+#: lexsup.c:512
+msgid "Report unresolved symbols as warnings"
+msgstr "å°†ä¸èƒ½è§£æžçš„符å·è§†ä½œè­¦å‘Š"
+
+#: lexsup.c:515
+msgid "Report unresolved symbols as errors"
+msgstr "å°†ä¸èƒ½è§£æžçš„符å·è§†ä½œé”™è¯¯"
+
+#: lexsup.c:517
+msgid "Include all objects from following archives"
+msgstr ""
+
+#: lexsup.c:520
+msgid "Use wrapper functions for SYMBOL"
+msgstr ""
+
+#: lexsup.c:667
+msgid "%P: unrecognized option '%s'\n"
+msgstr "%P:无法识别的选项‘%s’\n"
+
+#: lexsup.c:669
+msgid "%P%F: use the --help option for usage information\n"
+msgstr "%P%F:使用 --help 选项以获å–使用信æ¯\n"
+
+#: lexsup.c:687
+msgid "%P%F: unrecognized -a option `%s'\n"
+msgstr "%P%F:无法识别的 -a 选项‘%s’\n"
+
+#: lexsup.c:700
+msgid "%P%F: unrecognized -assert option `%s'\n"
+msgstr "%P%F:无法识别的 -assert 选项‘%s’\n"
+
+#: lexsup.c:743
+#, fuzzy
+msgid "%F%P: unknown demangling style `%s'"
+msgstr "未知的解修饰风格‘%s’"
+
+#: lexsup.c:805
+msgid "%P%F: invalid number `%s'\n"
+msgstr "%P%F:无效的数‘%s’\n"
+
+#: lexsup.c:897
+msgid "%P%F: bad --unresolved-symbols option: %s\n"
+msgstr "%P%F:--unresolved-symbols 选项无效:%s\n"
+
+#. This can happen if the user put "-rpath,a" on the command
+#. line. (Or something similar. The comma is important).
+#. Getopt becomes confused and thinks that this is a -r option
+#. but it cannot parse the text after the -r so it refuses to
+#. increment the optind counter. Detect this case and issue
+#. an error message here. We cannot just make this a warning,
+#. increment optind, and continue because getopt is too confused
+#. and will seg-fault the next time around.
+#: lexsup.c:968
+msgid "%P%F: bad -rpath option\n"
+msgstr "%P%F:错误的 -rpath 选项\n"
+
+#: lexsup.c:1080
+msgid "%P%F: -shared not supported\n"
+msgstr "%P%F:ä¸æ”¯æŒ -shared\n"
+
+#: lexsup.c:1089
+msgid "%P%F: -pie not supported\n"
+msgstr "%P%F:ä¸æ”¯æŒ -pie\n"
+
+#: lexsup.c:1099
+msgid "name"
+msgstr "å称"
+
+#: lexsup.c:1101
+msgid "alignment"
+msgstr "对é½"
+
+#: lexsup.c:1104
+#, fuzzy
+msgid "%P%F: invalid section sorting option: %s\n"
+msgstr "无效的选项å‚æ•° %qs"
+
+#: lexsup.c:1130
+msgid "%P%F: invalid argument to option \"--section-start\"\n"
+msgstr "%P%F:给予选项“--section-startâ€çš„å‚数无效\n"
+
+#: lexsup.c:1137
+msgid "%P%F: missing argument(s) to option \"--section-start\"\n"
+msgstr "%P%F:选项“--section-startâ€ç¼ºå°‘å‚æ•°\n"
+
+#: lexsup.c:1311
+msgid "%P%F: may not nest groups (--help for usage)\n"
+msgstr ""
+
+#: lexsup.c:1318
+msgid "%P%F: group ended before it began (--help for usage)\n"
+msgstr ""
+
+#: lexsup.c:1346
+msgid "%P%X: --hash-size needs a numeric argument\n"
+msgstr "%P%X:--hash-size 需è¦ä¸€ä¸ªæ•°å­—作为å‚æ•°\n"
+
+#: lexsup.c:1397 lexsup.c:1410
+msgid "%P%F: invalid hex number `%s'\n"
+msgstr "%P%F:无效的å六进制数‘%s’\n"
+
+#: lexsup.c:1445
+#, c-format
+msgid "Usage: %s [options] file...\n"
+msgstr "用法:%s [选项] 文件...\n"
+
+#: lexsup.c:1447
+#, c-format
+msgid "Options:\n"
+msgstr "选项:\n"
+
+#. Note: Various tools (such as libtool) depend upon the
+#. format of the listings below - do not change them.
+#: lexsup.c:1530
+#, c-format
+msgid "%s: supported targets:"
+msgstr "%s:支æŒçš„目标:"
+
+#: lexsup.c:1538
+#, c-format
+msgid "%s: supported emulations: "
+msgstr "%s:支æŒçš„仿真:"
+
+#: lexsup.c:1543
+#, c-format
+msgid "%s: emulation specific options:\n"
+msgstr "%s:仿真特定选项:\n"
+
+#: lexsup.c:1547
+#, c-format
+msgid "Report bugs to %s\n"
+msgstr "å‘ %s 报告程åºç¼ºé™·\n"
+
+#: mri.c:291
+msgid "%P%F: unknown format type %s\n"
+msgstr "%P%F:未知的格å¼ç±»åž‹ %s\n"
+
+#: pe-dll.c:303
+#, c-format
+msgid "%XUnsupported PEI architecture: %s\n"
+msgstr "%Xä¸æ”¯æŒçš„ PEI 架构:%s\n"
+
+#: pe-dll.c:652
+#, c-format
+msgid "%XError, duplicate EXPORT with ordinals: %s (%d vs %d)\n"
+msgstr ""
+
+#: pe-dll.c:659
+#, c-format
+msgid "Warning, duplicate EXPORT: %s\n"
+msgstr "警告:é‡å¤çš„ EXPORT:%s\n"
+
+#: pe-dll.c:725
+#, c-format
+msgid "%XCannot export %s: symbol not defined\n"
+msgstr "%Xä¸èƒ½å¯¼å‡º %s:符å·æœªå®šä¹‰\n"
+
+#: pe-dll.c:731
+#, c-format
+msgid "%XCannot export %s: symbol wrong type (%d vs %d)\n"
+msgstr ""
+
+#: pe-dll.c:738
+#, c-format
+msgid "%XCannot export %s: symbol not found\n"
+msgstr "%Xä¸èƒ½å¯¼å‡º %s:找ä¸åˆ°ç¬¦å·\n"
+
+#: pe-dll.c:850
+#, c-format
+msgid "%XError, ordinal used twice: %d (%s vs %s)\n"
+msgstr ""
+
+#: pe-dll.c:1172
+#, c-format
+msgid "%XError: %d-bit reloc in dll\n"
+msgstr ""
+
+#: pe-dll.c:1300
+#, c-format
+msgid "%s: Can't open output def file %s\n"
+msgstr "%s:无法打开输出 def 文件 %s\n"
+
+#: pe-dll.c:1443
+#, c-format
+msgid "; no contents available\n"
+msgstr ";没有å¯ç”¨çš„内容\n"
+
+#: pe-dll.c:2205
+msgid "%C: variable '%T' can't be auto-imported. Please read the documentation for ld's --enable-auto-import for details.\n"
+msgstr "%C:å˜é‡â€˜%T’ä¸èƒ½è¢«è‡ªåŠ¨å¯¼å…¥ã€‚请阅读与 ld --enable-auto-import 相关的文档以获å–更详细的信æ¯ã€‚\n"
+
+#: pe-dll.c:2235
+#, c-format
+msgid "%XCan't open .lib file: %s\n"
+msgstr "%X无法打开 .lib 文件:%s\n"
+
+#: pe-dll.c:2240
+#, c-format
+msgid "Creating library file: %s\n"
+msgstr "正在创建库文件:%s\n"
diff --git a/binutils-2.21/ld/po/zh_TW.gmo b/binutils-2.21/ld/po/zh_TW.gmo
new file mode 100644
index 0000000..23277b1
--- /dev/null
+++ b/binutils-2.21/ld/po/zh_TW.gmo
Binary files differ
diff --git a/binutils-2.21/ld/po/zh_TW.po b/binutils-2.21/ld/po/zh_TW.po
new file mode 100644
index 0000000..f60e11a
--- /dev/null
+++ b/binutils-2.21/ld/po/zh_TW.po
@@ -0,0 +1,1913 @@
+# Traditional Chinese translation for ld.
+# Copyright (C) 2005, 06 Free Software Foundation, Inc.
+# This file is distributed under the same license as the ld package.
+# Meng Jie <zuxyhere@eastday.com>, 2005.
+# Wei-Lun Chao <chaoweilun@pcmail.com.tw>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ld 2.16.93\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-03-25 18:36+0100\n"
+"PO-Revision-Date: 2006-06-20 15:22+0800\n"
+"Last-Translator: Wei-Lun Chao <chaoweilun@pcmail.com.tw>\n"
+"Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: emultempl/armcoff.em:72
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code 支æ´èˆ‡èˆŠå¼ç¨‹å¼ç¢¼çš„交互作用\n"
+
+#: emultempl/armcoff.em:73
+#, c-format
+msgid " --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"
+msgstr " --thumb-entry =<sym> 設定進入點為縮圖符號 <sym>\n"
+
+#: emultempl/armcoff.em:121
+#, c-format
+msgid "Errors encountered processing file %s"
+msgstr "處ç†æª”案 %s 時é‡åˆ°éŒ¯èª¤"
+
+#: emultempl/armcoff.em:190 emultempl/pe.em:1460
+msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"
+msgstr "%P: 警告: '--thumb-entry %s' æœƒè“‹éŽ '-e %s'\n"
+
+#: emultempl/armcoff.em:195 emultempl/pe.em:1465
+msgid "%P: warning: connot find thumb start symbol %s\n"
+msgstr "%P: 警告: 無法找到縮圖開始符號 %s\n"
+
+#: emultempl/pe.em:304
+#, c-format
+msgid " --base_file <basefile> Generate a base file for relocatable DLLs\n"
+msgstr " --base_file <基å€æª”案> 為å¯é‡å®šä½çš„ DLL 產生一個基å€æª”案\n"
+
+#: emultempl/pe.em:305
+#, c-format
+msgid " --dll Set image base to the default for DLLs\n"
+msgstr " --dll 設定 DLL çš„é è¨­æ˜ åƒåŸºåº•ä½å€\n"
+
+#: emultempl/pe.em:306
+#, c-format
+msgid " --file-alignment <size> Set file alignment\n"
+msgstr " --file-alignment <大å°> 設定檔案å°é½Šé‚Šç•Œ\n"
+
+#: emultempl/pe.em:307
+#, c-format
+msgid " --heap <size> Set initial size of the heap\n"
+msgstr " --heap <大å°> 設定堆ç©çš„åˆå§‹å¤§å°\n"
+
+#: emultempl/pe.em:308
+#, c-format
+msgid " --image-base <address> Set start address of the executable\n"
+msgstr " --image-base <ä½å€> 設定å¯åŸ·è¡Œæª”案的起始ä½å€\n"
+
+#: emultempl/pe.em:309
+#, c-format
+msgid " --major-image-version <number> Set version number of the executable\n"
+msgstr " --major-image-version <號碼> 設定å¯åŸ·è¡Œæª”案的版本號碼\n"
+
+#: emultempl/pe.em:310
+#, c-format
+msgid " --major-os-version <number> Set minimum required OS version\n"
+msgstr " --major-os-version <號碼> 設定å°ä½œæ¥­ç³»çµ±ç‰ˆæœ¬çš„最低è¦æ±‚\n"
+
+#: emultempl/pe.em:311
+#, c-format
+msgid " --major-subsystem-version <number> Set minimum required OS subsystem version\n"
+msgstr " --major-subsystem-version <號碼> 設定å°ä½œæ¥­ç³»çµ±å­ç³»çµ±ç‰ˆæœ¬çš„最低è¦æ±‚\n"
+
+#: emultempl/pe.em:312
+#, c-format
+msgid " --minor-image-version <number> Set revision number of the executable\n"
+msgstr " --minor-image-version <號碼> 設定å¯åŸ·è¡Œæª”案的修訂版本號\n"
+
+#: emultempl/pe.em:313
+#, c-format
+msgid " --minor-os-version <number> Set minimum required OS revision\n"
+msgstr " --minor-os-version <號碼> 設定å°ä½œæ¥­ç³»çµ±ä¿®è¨‚版本的最低è¦æ±‚\n"
+
+#: emultempl/pe.em:314
+#, c-format
+msgid " --minor-subsystem-version <number> Set minimum required OS subsystem revision\n"
+msgstr " --minor-subsystem-version <號碼> 設定å°ä½œæ¥­ç³»çµ±å­ç³»çµ±ä¿®è¨‚版本的最低è¦æ±‚\n"
+
+#: emultempl/pe.em:315
+#, c-format
+msgid " --section-alignment <size> Set section alignment\n"
+msgstr " --section-alignment <大å°> 設定å€æ®µçš„å°é½Šé‚Šç•Œ\n"
+
+#: emultempl/pe.em:316
+#, c-format
+msgid " --stack <size> Set size of the initial stack\n"
+msgstr " --stack <大å°> 設定åˆå§‹å †ç–Šçš„大å°\n"
+
+#: emultempl/pe.em:317
+#, c-format
+msgid " --subsystem <name>[:<version>] Set required OS subsystem [& version]\n"
+msgstr " --subsystem <å稱>[:<版本>] 設定需è¦çš„作業系統å­ç³»çµ±[& 版本號]\n"
+
+#: emultempl/pe.em:318
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code 支æ´èˆ‡èˆŠå¼ç¨‹å¼ç¢¼çš„交互作用\n"
+
+#: emultempl/pe.em:319
+#, c-format
+msgid " --thumb-entry=<symbol> Set the entry point to be Thumb <symbol>\n"
+msgstr " --thumb-entry=<符號> 設定進入點到是縮圖<符號>\n"
+
+#: emultempl/pe.em:321
+#, c-format
+msgid " --add-stdcall-alias Export symbols with and without @nn\n"
+msgstr " --add-stdcall-alias 匯出帶與ä¸å¸¶ @nn 的符號\n"
+
+#: emultempl/pe.em:322
+#, c-format
+msgid " --disable-stdcall-fixup Don't link _sym to _sym@nn\n"
+msgstr " --disable-stdcall-fixup ä¸å°‡ _sym éˆçµè‡³ _sym@nn\n"
+
+#: emultempl/pe.em:323
+#, c-format
+msgid " --enable-stdcall-fixup Link _sym to _sym@nn without warnings\n"
+msgstr " --enable-stdcall-fixup å°‡ _sym éˆçµè‡³ _sym@nn 而ä¸çµ¦äºˆè­¦å‘Š\n"
+
+#: emultempl/pe.em:324
+#, c-format
+msgid " --exclude-symbols sym,sym,... Exclude symbols from automatic export\n"
+msgstr " --exclude-symbols 符號,符號,… 將一些符號排除在自動匯出以外\n"
+
+#: emultempl/pe.em:325
+#, c-format
+msgid " --exclude-libs lib,lib,... Exclude libraries from automatic export\n"
+msgstr " --exclude-libs 函å¼åº«,函å¼åº«,… 將一些函å¼åº«æŽ’除在自動匯出以外\n"
+
+#: emultempl/pe.em:326
+#, c-format
+msgid " --export-all-symbols Automatically export all globals to DLL\n"
+msgstr " --export-all-symbols 自動將所有全域變數匯出至 DLL\n"
+
+#: emultempl/pe.em:327
+#, c-format
+msgid " --kill-at Remove @nn from exported symbols\n"
+msgstr " --kill-at 從匯出符號中移去 @nn\n"
+
+#: emultempl/pe.em:328
+#, c-format
+msgid " --out-implib <file> Generate import library\n"
+msgstr " --out-implib <檔案> 產生匯入函å¼åº«\n"
+
+#: emultempl/pe.em:329
+#, c-format
+msgid " --output-def <file> Generate a .DEF file for the built DLL\n"
+msgstr " --output-def <檔案> 為建立的 DLL 產生一個 .DEF 檔案\n"
+
+#: emultempl/pe.em:330
+#, c-format
+msgid " --warn-duplicate-exports Warn about duplicate exports.\n"
+msgstr " --warn-duplicate-exports å°é‡è¤‡åŒ¯å‡ºçµ¦äºˆè­¦å‘Šã€‚\n"
+
+#: emultempl/pe.em:331
+#, c-format
+msgid ""
+" --compat-implib Create backward compatible import libs;\n"
+" create __imp_<SYMBOL> as well.\n"
+msgstr ""
+" --compat-implib 產生後å‘相容的匯入函å¼åº«ï¼›\n"
+" åŒæ™‚產生 __imp_<符號>。\n"
+
+#: emultempl/pe.em:333
+#, c-format
+msgid ""
+" --enable-auto-image-base Automatically choose image base for DLLs\n"
+" unless user specifies one\n"
+msgstr " --enable-auto-image-base 除éžä½¿ç”¨è€…指定å¦å‰‡è‡ªå‹•é¸æ“‡ DLL 的映åƒåŸºåº•ä½å€\n"
+
+#: emultempl/pe.em:335
+#, c-format
+msgid " --disable-auto-image-base Do not auto-choose image base. (default)\n"
+msgstr " --disable-auto-image-base ä¸è‡ªå‹•é¸æ“‡æ˜ åƒåŸºåº•ä½å€ã€‚(é è¨­)\n"
+
+#: emultempl/pe.em:336
+#, c-format
+msgid ""
+" --dll-search-prefix=<string> When linking dynamically to a dll without\n"
+" an importlib, use <string><basename>.dll\n"
+" in preference to lib<basename>.dll \n"
+msgstr ""
+" --dll-search-prefix=<字串> å‹•æ…‹éˆçµè‡³ DLL 而缺少匯入函å¼åº«æ™‚,使用\n"
+" <字串><基本å稱>.dll 而ä¸æ˜¯ lib<基本å稱>.dll\n"
+
+#: emultempl/pe.em:339
+#, c-format
+msgid ""
+" --enable-auto-import Do sophistcated linking of _sym to\n"
+" __imp_sym for DATA references\n"
+msgstr ""
+" --enable-auto-import 為實作 DATA åƒç…§ï¼Œä½¿ç”¨è¤‡é›œçš„æ–¹å¼å°‡ _sym\n"
+" éˆçµè‡³ __imp_sym\n"
+
+#: emultempl/pe.em:341
+#, c-format
+msgid " --disable-auto-import Do not auto-import DATA items from DLLs\n"
+msgstr " --disable-auto-import ä¸ç‚º DLL 自動匯入 DATA é …\n"
+
+#: emultempl/pe.em:342
+#, c-format
+msgid ""
+" --enable-runtime-pseudo-reloc Work around auto-import limitations by\n"
+" adding pseudo-relocations resolved at\n"
+" runtime.\n"
+msgstr ""
+" --enable-runtime-pseudo-reloc 利用在執行階段加入已解æžçš„å‡æ€§é‡å®šå€\n"
+" 來åšç‚ºè‡ªå‹•åŒ¯å…¥é™åˆ¶çš„解決方法。\n"
+
+#: emultempl/pe.em:345
+#, c-format
+msgid ""
+" --disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations for\n"
+" auto-imported DATA.\n"
+msgstr " --disable-runtime-pseudo-reloc ä¸åŠ å…¥ç”¨æ–¼è‡ªå‹•åŒ¯å…¥è³‡æ–™çš„執行階段å‡æ€§é‡å®šå€ã€‚\n"
+
+#: emultempl/pe.em:347
+#, c-format
+msgid ""
+" --enable-extra-pe-debug Enable verbose debug output when building\n"
+" or linking to DLLs (esp. auto-import)\n"
+msgstr ""
+" --enable-extra-pe-debug 當產生或éˆçµè‡³ DLL 時(尤其當自動匯入時)啟用\n"
+" 詳細的除錯輸出\n"
+
+#: emultempl/pe.em:350
+#, c-format
+msgid ""
+" --large-address-aware Executable supports virtual addresses\n"
+" greater than 2 gigabytes\n"
+msgstr " --large-address-aware å¯åŸ·è¡Œæª”案支æ´å¤§æ–¼ 2 GB 的虛擬記憶體ä½å€\n"
+
+#: emultempl/pe.em:417
+msgid "%P: warning: bad version number in -subsystem option\n"
+msgstr "%P: 警告:-subsystem é¸é …中出ç¾ä¸ç•¶çš„版本號碼\n"
+
+#: emultempl/pe.em:448
+msgid "%P%F: invalid subsystem type %s\n"
+msgstr "%P%F: 無效的å­ç³»çµ±åž‹æ…‹ %s\n"
+
+#: emultempl/pe.em:487
+msgid "%P%F: invalid hex number for PE parameter '%s'\n"
+msgstr "%P%F: 無效的å六進ä½æ•¸å­—用於 PE åƒæ•¸ '%s'\n"
+
+#: emultempl/pe.em:504
+msgid "%P%F: strange hex info for PE parameter '%s'\n"
+msgstr "%P%F: 怪異的å六進ä½è³‡è¨Šç”¨æ–¼ PE åƒæ•¸ '%s'\n"
+
+#: emultempl/pe.em:521
+#, c-format
+msgid "%s: Can't open base file %s\n"
+msgstr "%s:無法開啟基å€æª”案 %s\n"
+
+#: emultempl/pe.em:737
+msgid "%P: warning, file alignment > section alignment.\n"
+msgstr "%P: 警告,檔案å°é½Š > å€æ®µå°é½Šã€‚\n"
+
+#: emultempl/pe.em:824 emultempl/pe.em:851
+#, c-format
+msgid "Warning: resolving %s by linking to %s\n"
+msgstr "警告:藉由éˆçµåˆ° %2$s 以解決 %1$s\n"
+
+#: emultempl/pe.em:829 emultempl/pe.em:856
+msgid "Use --enable-stdcall-fixup to disable these warnings\n"
+msgstr "使用 --enable-stdcall-fixup 來åœç”¨é€™äº›è­¦å‘Š\n"
+
+#: emultempl/pe.em:830 emultempl/pe.em:857
+msgid "Use --disable-stdcall-fixup to disable these fixups\n"
+msgstr "使用 --disable-stdcall-fixup 來åœç”¨é€™äº›ä¿®æ­£\n"
+
+#: emultempl/pe.em:876
+#, c-format
+msgid "%C: Cannot get section contents - auto-import exception\n"
+msgstr "%C: 無法å–å¾—å€æ®µå…§å®¹ - 自動匯入異常\n"
+
+#: emultempl/pe.em:913
+#, c-format
+msgid "Info: resolving %s by linking to %s (auto-import)\n"
+msgstr "資訊:藉由éˆçµåˆ° %2$s 以解決 %1$s (自動匯入)\n"
+
+#: emultempl/pe.em:986
+msgid "%F%P: PE operations on non PE file.\n"
+msgstr "%F%P: åœ¨éž PE 檔案上執行 PE 作業。\n"
+
+#: emultempl/pe.em:1261
+#, c-format
+msgid "Errors encountered processing file %s\n"
+msgstr "處ç†æª”案 %s 時發生錯誤\n"
+
+#: emultempl/pe.em:1284
+#, c-format
+msgid "Errors encountered processing file %s for interworking"
+msgstr "處ç†æª”案 %s 交互作用時發生錯誤"
+
+#: emultempl/pe.em:1345 ldexp.c:522 ldlang.c:2946 ldlang.c:5800 ldlang.c:5831
+#: ldmain.c:1167
+msgid "%P%F: bfd_link_hash_lookup failed: %E\n"
+msgstr "%P%F: bfd_link_hash_lookup 失敗:%E\n"
+
+#: ldcref.c:154
+msgid "%X%P: bfd_hash_table_init of cref table failed: %E\n"
+msgstr "%X%P: cref 表格的 bfd_hash_table_init 失敗:%E\n"
+
+#: ldcref.c:160
+msgid "%X%P: cref_hash_lookup failed: %E\n"
+msgstr "%X%P: cref_hash_lookup 失敗:%E\n"
+
+#: ldcref.c:226
+#, c-format
+msgid ""
+"\n"
+"Cross Reference Table\n"
+"\n"
+msgstr ""
+"\n"
+"交å‰åƒç…§è¡¨\n"
+"\n"
+
+#: ldcref.c:227
+msgid "Symbol"
+msgstr "符號"
+
+#: ldcref.c:235
+#, c-format
+msgid "File\n"
+msgstr "檔案\n"
+
+#: ldcref.c:239
+#, c-format
+msgid "No symbols\n"
+msgstr "無符號\n"
+
+#: ldcref.c:360 ldcref.c:482
+msgid "%B%F: could not read symbols; %E\n"
+msgstr "%B%F: 無法讀å–符號; %E\n"
+
+#: ldcref.c:364 ldcref.c:486 ldmain.c:1232 ldmain.c:1236
+msgid "%B%F: could not read symbols: %E\n"
+msgstr "%B%F: 無法讀å–符號: %E\n"
+
+#: ldcref.c:415
+msgid "%P: symbol `%T' missing from main hash table\n"
+msgstr "%P: 符號「%Tã€å¾žä¸»è¦é›œæ¹Šè¡¨éºå¤±\n"
+
+#: ldcref.c:557 ldcref.c:564 ldmain.c:1279 ldmain.c:1286
+msgid "%B%F: could not read relocs: %E\n"
+msgstr "%B%F: 無法讀å–é‡å®šå€ï¼š%E\n"
+
+#. We found a reloc for the symbol. The symbol is defined
+#. in OUTSECNAME. This reloc is from a section which is
+#. mapped into a section from which references to OUTSECNAME
+#. are prohibited. We must report an error.
+#: ldcref.c:591
+msgid "%X%C: prohibited cross reference from %s to `%T' in %s\n"
+msgstr "%X%C: 在 %3$s 中從 %1$s 到 `%2$T' ç¦æ­¢çš„交å‰åƒè€ƒ\n"
+
+#: ldctor.c:84
+msgid "%P%X: Different relocs used in set %s\n"
+msgstr "%P%X: 在設定 %s 中所使用的ä¸åŒé‡å®šå€\n"
+
+#: ldctor.c:102
+msgid "%P%X: Different object file formats composing set %s\n"
+msgstr "%P%X: ä¸åŒçš„目的檔案格å¼æ’°å¯«è¨­å®š %s\n"
+
+#: ldctor.c:281 ldctor.c:295
+msgid "%P%X: %s does not support reloc %s for set %s\n"
+msgstr "%P%X: %s ä¸æ”¯æ´é‡å®š %s 用於設定 %s\n"
+
+#: ldctor.c:316
+msgid "%P%X: Unsupported size %d for set %s\n"
+msgstr "%P%X: ä¸æ”¯æ´å¤§å° %d 用於設定 %s\n"
+
+#: ldctor.c:337
+msgid ""
+"\n"
+"Set Symbol\n"
+"\n"
+msgstr ""
+"\n"
+"設定 符號\n"
+"\n"
+
+#: ldemul.c:236
+#, c-format
+msgid "%S SYSLIB ignored\n"
+msgstr "%S SYSLIB 忽略\n"
+
+#: ldemul.c:242
+#, c-format
+msgid "%S HLL ignored\n"
+msgstr "%S HLL 忽略\n"
+
+#: ldemul.c:262
+msgid "%P: unrecognised emulation mode: %s\n"
+msgstr "%P: 無法辨èªçš„模擬模å¼ï¼š %s\n"
+
+#: ldemul.c:263
+msgid "Supported emulations: "
+msgstr "支æ´çš„模擬:"
+
+#: ldemul.c:305
+#, c-format
+msgid " no emulation specific options.\n"
+msgstr " 無特定é¸é …的模擬。\n"
+
+#: ldexp.c:338
+#, c-format
+msgid "%F%S %% by zero\n"
+msgstr "%F%S å°é›¶å–模\n"
+
+#: ldexp.c:346
+#, c-format
+msgid "%F%S / by zero\n"
+msgstr "%F%S 被零除\n"
+
+#: ldexp.c:536
+#, c-format
+msgid "%X%S: unresolvable symbol `%s' referenced in expression\n"
+msgstr "%X%S:在é‹ç®—å¼ä¸­åƒç…§åˆ°ç„¡æ³•è§£æžçš„符號「%sã€\n"
+
+#: ldexp.c:547
+#, c-format
+msgid "%F%S: undefined symbol `%s' referenced in expression\n"
+msgstr "%F%S:在é‹ç®—å¼ä¸­åƒç…§äº†æœªå®šç¾©çš„符號「%sã€\n"
+
+#: ldexp.c:608 ldexp.c:621
+#, c-format
+msgid "%F%S: undefined MEMORY region `%s' referenced in expression\n"
+msgstr "%F%S:在é‹ç®—å¼ä¸­åƒç…§äº†æœªå®šç¾©çš„記憶體å€åŸŸã€Œ%sã€\n"
+
+#: ldexp.c:683
+#, c-format
+msgid "%F%S can not PROVIDE assignment to location counter\n"
+msgstr "%F%S 無法æ供指派到ä½ç½®è¨ˆæ•¸å™¨\n"
+
+#: ldexp.c:697
+#, c-format
+msgid "%F%S invalid assignment to location counter\n"
+msgstr "%F%S 無效的指派ä½ç½®è¨ˆæ•¸å™¨\n"
+
+#: ldexp.c:700
+#, c-format
+msgid "%F%S assignment to location counter invalid outside of SECTION\n"
+msgstr "%F%S 指派到無效的å€æ®µå¤–å´ä½ç½®è¨ˆæ•¸å™¨\n"
+
+#: ldexp.c:709
+msgid "%F%S cannot move location counter backwards (from %V to %V)\n"
+msgstr "%F%S 無法å‘後移動ä½ç½®è¨ˆæ•¸å™¨(從 %V 到 %V)\n"
+
+#: ldexp.c:748
+msgid "%P%F:%s: hash creation failed\n"
+msgstr "%P%F:%s:建立雜湊表失敗\n"
+
+#: ldexp.c:1000 ldexp.c:1025
+#, c-format
+msgid "%F%S nonconstant expression for %s\n"
+msgstr "%F%S éžå¸¸æ•¸é‹ç®—å¼ç”¨æ–¼ %s\n"
+
+#: ldexp.c:1082
+#, c-format
+msgid "%F%S non constant expression for %s\n"
+msgstr "%F%S éžå¸¸æ•¸é‹ç®—å¼ç”¨æ–¼ %s\n"
+
+#: ldfile.c:139
+#, c-format
+msgid "attempt to open %s failed\n"
+msgstr "試圖開啟 %s 失敗\n"
+
+#: ldfile.c:141
+#, c-format
+msgid "attempt to open %s succeeded\n"
+msgstr "試圖開啟 %s æˆåŠŸ\n"
+
+#: ldfile.c:147
+msgid "%F%P: invalid BFD target `%s'\n"
+msgstr "%F%P: 無效的 BFD 目標「%sã€\n"
+
+#: ldfile.c:255 ldfile.c:282
+msgid "%P: skipping incompatible %s when searching for %s\n"
+msgstr "%P: 當æœå°‹ç”¨æ–¼ %s 時跳éŽä¸ç›¸å®¹çš„ %s \n"
+
+#: ldfile.c:267
+msgid "%F%P: attempted static link of dynamic object `%s'\n"
+msgstr "%F%P: 試圖éœæ…‹éˆçµçš„動態物件「%sã€\n"
+
+#: ldfile.c:384
+msgid "%F%P: %s (%s): No such file: %E\n"
+msgstr "%F%P: %s(%s):無此檔案: %E\n"
+
+#: ldfile.c:387
+msgid "%F%P: %s: No such file: %E\n"
+msgstr "%F%P: %s: 無此檔案: %E\n"
+
+#: ldfile.c:417
+msgid "%F%P: cannot find %s inside %s\n"
+msgstr "%F%P: 無法在 %2$s 內部找到 %1$s\n"
+
+#: ldfile.c:420
+msgid "%F%P: cannot find %s\n"
+msgstr "%F%P: 無法找到 %s\n"
+
+#: ldfile.c:437 ldfile.c:453
+#, c-format
+msgid "cannot find script file %s\n"
+msgstr "無法找到命令稿檔案 %s\n"
+
+#: ldfile.c:439 ldfile.c:455
+#, c-format
+msgid "opened script file %s\n"
+msgstr "已開啟的命令稿檔案 %s\n"
+
+#: ldfile.c:499
+msgid "%P%F: cannot open linker script file %s: %E\n"
+msgstr "%P%F: 無法開啟éˆçµå™¨å‘½ä»¤ç¨¿æª”案 %s: %E\n"
+
+#: ldfile.c:546
+msgid "%P%F: cannot represent machine `%s'\n"
+msgstr "%P%F: 無法表述機器「%sã€\n"
+
+#: ldlang.c:940 ldlang.c:982 ldlang.c:2695
+msgid "%P%F: can not create hash table: %E\n"
+msgstr "%P%F: 無法建立雜湊表:%E\n"
+
+#: ldlang.c:1025
+msgid "%P:%S: warning: redeclaration of memory region '%s'\n"
+msgstr "%P:%S: 警告:記憶體å€åŸŸ '%s' çš„é‡æ–°å®£å‘Š\n"
+
+#: ldlang.c:1031
+msgid "%P:%S: warning: memory region %s not declared\n"
+msgstr "%P:%S: 警告:記憶體å€åŸŸ %s 未宣告\n"
+
+#: ldlang.c:1108 ldlang.c:1135
+msgid "%P%F: failed creating section `%s': %E\n"
+msgstr "%P%F: 產生å€æ®µã€Œ%sã€æ™‚失敗: %E\n"
+
+#: ldlang.c:1601
+msgid ""
+"\n"
+"Memory Configuration\n"
+"\n"
+msgstr ""
+"\n"
+"記憶體é…ç½®\n"
+"\n"
+
+#: ldlang.c:1603
+msgid "Name"
+msgstr "å稱"
+
+#: ldlang.c:1603
+msgid "Origin"
+msgstr "來æº"
+
+#: ldlang.c:1603
+msgid "Length"
+msgstr "長度"
+
+#: ldlang.c:1603
+msgid "Attributes"
+msgstr "屬性"
+
+#: ldlang.c:1643
+#, c-format
+msgid ""
+"\n"
+"Linker script and memory map\n"
+"\n"
+msgstr ""
+"\n"
+"éˆçµå™¨å‘½ä»¤ç¨¿å’Œè¨˜æ†¶é«”å°æ˜ \n"
+"\n"
+
+#: ldlang.c:1709
+msgid "%P%F: Illegal use of `%s' section\n"
+msgstr "%P%F:「%sã€å€æ®µçš„éžæ³•ä½¿ç”¨\n"
+
+#: ldlang.c:1716
+msgid "%P%F: output format %s cannot represent section called %s\n"
+msgstr "%P%F: è¼¸å‡ºæ ¼å¼ %s 無法表述å為 %s çš„å€æ®µ\n"
+
+#: ldlang.c:2313
+msgid "%B: file not recognized: %E\n"
+msgstr "%B: 檔案無法辨識:%E\n"
+
+#: ldlang.c:2314
+msgid "%B: matching formats:"
+msgstr "%B: 匹é…æ ¼å¼ï¼š"
+
+#: ldlang.c:2321
+msgid "%F%B: file not recognized: %E\n"
+msgstr "%F%B: 檔案無法辨識:%E\n"
+
+#: ldlang.c:2385
+msgid "%F%B: member %B in archive is not an object\n"
+msgstr "%F%B: æˆå“¡ %B 在歸檔中並éžç‰©ä»¶\n"
+
+#: ldlang.c:2396 ldlang.c:2410
+msgid "%F%B: could not read symbols: %E\n"
+msgstr "%F%B: 無法讀å–符號:%E\n"
+
+#: ldlang.c:2665
+msgid "%P: warning: could not find any targets that match endianness requirement\n"
+msgstr "%P: 警告:無法找到任何符åˆå°¾åºéœ€æ±‚的目標\n"
+
+#: ldlang.c:2679
+msgid "%P%F: target %s not found\n"
+msgstr "%P%F: 找ä¸åˆ°ç›®æ¨™ %s\n"
+
+#: ldlang.c:2681
+msgid "%P%F: cannot open output file %s: %E\n"
+msgstr "%P%F: 無法開啟輸出檔案 %s: %E\n"
+
+#: ldlang.c:2687
+msgid "%P%F:%s: can not make object file: %E\n"
+msgstr "%P%F:%s: 無法製作目的檔案:%E\n"
+
+#: ldlang.c:2691
+msgid "%P%F:%s: can not set architecture: %E\n"
+msgstr "%P%F:%s: 無法設定架構:%E\n"
+
+#: ldlang.c:2839
+msgid "%P%F: bfd_hash_lookup failed creating symbol %s\n"
+msgstr "%P%F: bfd_hash_lookup 產生符號 %s 時失敗\n"
+
+#: ldlang.c:2857
+msgid "%P%F: bfd_hash_allocate failed creating symbol %s\n"
+msgstr "%P%F: bfd_hash_allocate 產生符號 %s 時失敗\n"
+
+#: ldlang.c:3288
+msgid " load address 0x%V"
+msgstr " 載入ä½å€ 0x%V"
+
+#: ldlang.c:3528
+msgid "%W (size before relaxing)\n"
+msgstr "%W (鬆開之å‰çš„大å°)\n"
+
+#: ldlang.c:3615
+#, c-format
+msgid "Address of section %s set to "
+msgstr "å€æ®µ %s çš„ä½å€è¨­å®šåˆ° "
+
+#: ldlang.c:3768
+#, c-format
+msgid "Fail with %d\n"
+msgstr "%d 時失敗\n"
+
+#: ldlang.c:4040
+msgid "%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"
+msgstr "%X%P: å€æ®µ %s [%V-> %V] é‡ç–Šäº†å€æ®µ %s [%V-> %V]\n"
+
+#: ldlang.c:4065
+msgid "%X%P: address 0x%v of %B section %s is not within region %s\n"
+msgstr "%X%P: ä½å€ 0x% çš„ v%B å€æ®µ %s 並éžåœ¨å€åŸŸ %s 之內\n"
+
+#: ldlang.c:4074
+msgid "%X%P: region %s is full (%B section %s)\n"
+msgstr "%X%P: å€åŸŸ %s 已滿 (%Bå€æ®µ %s)\n"
+
+#: ldlang.c:4114
+#, c-format
+msgid "%F%S: non constant or forward reference address expression for section %s\n"
+msgstr "%F%S: 用於å€æ®µ %s çš„éžå¸¸æ•¸æˆ–是å‘å‰åƒè€ƒçš„ä½å€é‹ç®—å¼\n"
+
+#: ldlang.c:4139
+msgid "%P%X: Internal error on COFF shared library section %s\n"
+msgstr "%P%X: æ–¼ COFF 共用程å¼åº«å€æ®µ %s 的內部錯誤\n"
+
+#: ldlang.c:4197
+msgid "%P%F: error: no memory region specified for loadable section `%s'\n"
+msgstr "%P%F: 錯誤:無指定用於å¯è¼‰å…¥å€æ®µã€Œ%sã€çš„記憶體å€åŸŸ\n"
+
+#: ldlang.c:4202
+msgid "%P: warning: no memory region specified for loadable section `%s'\n"
+msgstr "%P: 警告:無指定用於å¯è¼‰å…¥å€æ®µã€Œ%sã€çš„記憶體å€åŸŸ\n"
+
+#: ldlang.c:4224
+msgid "%P: warning: changing start of section %s by %lu bytes\n"
+msgstr "%P: 警告:將å€æ®µçš„開始 %s 以 %lu ä½å…ƒçµ„變更\n"
+
+#: ldlang.c:4388
+msgid "%P%F: can't relax section: %E\n"
+msgstr "%P%F: 無法鬆開å€æ®µï¼š%E\n"
+
+#: ldlang.c:4636
+msgid "%F%P: invalid data statement\n"
+msgstr "%F%P: 無效的資料敘述\n"
+
+#: ldlang.c:4669
+msgid "%F%P: invalid reloc statement\n"
+msgstr "%F%P: 無效的é‡å®šå€æ•˜è¿°\n"
+
+#: ldlang.c:4802
+msgid "%P%F:%s: can't set start address\n"
+msgstr "%P%F:%s: 無法設定起始ä½å€\n"
+
+#: ldlang.c:4815 ldlang.c:4834
+msgid "%P%F: can't set start address\n"
+msgstr "%P%F: 無法設定起始ä½å€\n"
+
+#: ldlang.c:4827
+msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n"
+msgstr "%P: 警告:無法找到項目符號 %s; é è¨­ç‚º %V\n"
+
+#: ldlang.c:4839
+msgid "%P: warning: cannot find entry symbol %s; not setting start address\n"
+msgstr "%P: 警告:無法找到項目符號 %s; 無法設定起始ä½å€\n"
+
+#: ldlang.c:4888
+msgid "%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"
+msgstr "%P%F: 並ä¸æ”¯æ´å¾žæ ¼å¼ %s (%B) åˆ°æ ¼å¼ %s (%B) çš„é‡å®šå€éˆçµ\n"
+
+#: ldlang.c:4898
+msgid "%P: warning: %s architecture of input file `%B' is incompatible with %s output\n"
+msgstr "%P: 警告:輸入檔案 `%2$B' 的架構 %1$s 與 %s 輸出ä¸ç›¸å®¹\n"
+
+#: ldlang.c:4920
+msgid "%P%X: failed to merge target specific data of file %B\n"
+msgstr "%P%X: åˆä½µç›®æ¨™æª”案 %B 的特定資料時失敗\n"
+
+#: ldlang.c:5004
+msgid ""
+"\n"
+"Allocating common symbols\n"
+msgstr ""
+"\n"
+"é…置公共符號\n"
+
+#: ldlang.c:5005
+msgid ""
+"Common symbol size file\n"
+"\n"
+msgstr ""
+"公共符號 å¤§å° æª”æ¡ˆ\n"
+"\n"
+
+#: ldlang.c:5131
+msgid "%P%F: invalid syntax in flags\n"
+msgstr "%P%F: 在旗標中出ç¾ç„¡æ•ˆçš„語法\n"
+
+#: ldlang.c:5406
+msgid "%P%F: Failed to create hash table\n"
+msgstr "%P%F: 建立雜湊表時失敗\n"
+
+#: ldlang.c:5722
+msgid "%P%F: multiple STARTUP files\n"
+msgstr "%P%F: 多é‡å•Ÿå‹•æª”案\n"
+
+#: ldlang.c:5770
+msgid "%X%P:%S: section has both a load address and a load region\n"
+msgstr "%X%P:%S: å€æ®µåŒæ™‚有載入ä½å€å’Œè¼‰å…¥å€åŸŸ\n"
+
+#: ldlang.c:6007
+msgid "%F%P: bfd_record_phdr failed: %E\n"
+msgstr "%F%P: bfd_record_phdr 失敗:%E\n"
+
+#: ldlang.c:6027
+msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n"
+msgstr "%X%P: å€æ®µã€Œ%sã€è¢«æŒ‡æ´¾åˆ°ä¸å­˜åœ¨çš„ phdr「%sã€\n"
+
+#: ldlang.c:6418
+msgid "%X%P: unknown language `%s' in version information\n"
+msgstr "%X%P: 在版本資訊中出ç¾ä¸æ˜Žçš„語言「%sã€\n"
+
+#: ldlang.c:6560
+msgid "%X%P: anonymous version tag cannot be combined with other version tags\n"
+msgstr "%X%P: 匿å版本標記無法與其他版本標記åˆä½µ\n"
+
+#: ldlang.c:6569
+msgid "%X%P: duplicate version tag `%s'\n"
+msgstr "%X%P:é‡è¤‡çš„版本標記「%sã€\n"
+
+#: ldlang.c:6589 ldlang.c:6598 ldlang.c:6615 ldlang.c:6625
+msgid "%X%P: duplicate expression `%s' in version information\n"
+msgstr "%X%P: 在版本資訊中出ç¾é‡è¤‡çš„é‹ç®—å¼ã€Œ%sã€\n"
+
+#: ldlang.c:6665
+msgid "%X%P: unable to find version dependency `%s'\n"
+msgstr "%X%P: 無法找到版本相ä¾æ€§ã€Œ%sã€\n"
+
+#: ldlang.c:6687
+msgid "%X%P: unable to read .exports section contents\n"
+msgstr "%X%P: ç„¡æ³•è®€å– .exports å€æ®µå…§å®¹\n"
+
+#: ldmain.c:232
+msgid "%X%P: can't set BFD default target to `%s': %E\n"
+msgstr "%X%P: 無法設定 BFD é è¨­ç›®æ¨™åˆ°ã€Œ%sã€ï¼š%E\n"
+
+#: ldmain.c:345
+msgid "%P%F: --relax and -r may not be used together\n"
+msgstr "%P%F: --relax å’Œ -r ä¸èƒ½ä¸€èµ·ä½¿ç”¨\n"
+
+#: ldmain.c:347
+msgid "%P%F: -r and -shared may not be used together\n"
+msgstr "%P%F: -r å’Œ -shared ä¸èƒ½ä¸€èµ·ä½¿ç”¨\n"
+
+#: ldmain.c:353
+msgid "%P%F: -F may not be used without -shared\n"
+msgstr "%P%F:-F 必須與 -shared 一起作用\n"
+
+#: ldmain.c:355
+msgid "%P%F: -f may not be used without -shared\n"
+msgstr "%P%F:-f 必須與 -shared 一起作用\n"
+
+#: ldmain.c:397
+msgid "using external linker script:"
+msgstr "使用外部éˆçµå™¨å‘½ä»¤ç¨¿ï¼š"
+
+#: ldmain.c:399
+msgid "using internal linker script:"
+msgstr "使用內部éˆçµå™¨å‘½ä»¤ç¨¿ï¼š"
+
+#: ldmain.c:433
+msgid "%P%F: no input files\n"
+msgstr "%P%F:沒有輸入檔案\n"
+
+#: ldmain.c:437
+msgid "%P: mode %s\n"
+msgstr "%P: æ¨¡å¼ %s\n"
+
+#: ldmain.c:453
+msgid "%P%F: cannot open map file %s: %E\n"
+msgstr "%P%F: 無法開啟å°æ‡‰æª”案 %s: %E\n"
+
+#: ldmain.c:485
+msgid "%P: link errors found, deleting executable `%s'\n"
+msgstr "%P: 找到éˆçµéŒ¯èª¤ï¼Œåˆªé™¤å¯åŸ·è¡Œæª”案「%sã€\n"
+
+#: ldmain.c:494
+msgid "%F%B: final close failed: %E\n"
+msgstr "%F%B: 最後的關閉失敗: %E\n"
+
+#: ldmain.c:520
+msgid "%X%P: unable to open for source of copy `%s'\n"
+msgstr "%X%P: 無法開啟複製的來æºã€Œ%sã€\n"
+
+#: ldmain.c:523
+msgid "%X%P: unable to open for destination of copy `%s'\n"
+msgstr "%X%P: 無法開啟複製的目的「%sã€\n"
+
+#: ldmain.c:530
+msgid "%P: Error writing file `%s'\n"
+msgstr "%P: 寫入檔案「%sã€æ™‚發生錯誤\n"
+
+#: ldmain.c:535 pe-dll.c:1494
+#, c-format
+msgid "%P: Error closing file `%s'\n"
+msgstr "%P: 關閉檔案「%sã€æ™‚發生錯誤\n"
+
+#: ldmain.c:551
+#, c-format
+msgid "%s: total time in link: %ld.%06ld\n"
+msgstr "%s: éˆçµç¸½æ™‚間: %ld.%06ld\n"
+
+#: ldmain.c:554
+#, c-format
+msgid "%s: data size %ld\n"
+msgstr "%s: è³‡æ–™å¤§å° %ld\n"
+
+#: ldmain.c:637
+msgid "%P%F: missing argument to -m\n"
+msgstr "%P%F: 缺少 -m 的引數\n"
+
+#: ldmain.c:784 ldmain.c:803 ldmain.c:834
+msgid "%P%F: bfd_hash_table_init failed: %E\n"
+msgstr "%P%F: bfd_hash_table_init 失敗:%E\n"
+
+#: ldmain.c:788 ldmain.c:807
+msgid "%P%F: bfd_hash_lookup failed: %E\n"
+msgstr "%P%F: bfd_hash_lookup 失敗:%E\n"
+
+#: ldmain.c:821
+msgid "%X%P: error: duplicate retain-symbols-file\n"
+msgstr "%X%P: 錯誤:é‡è£½ retain-symbols-file\n"
+
+#: ldmain.c:864
+msgid "%P%F: bfd_hash_lookup for insertion failed: %E\n"
+msgstr "%P%F: bfd_hash_lookup 用於æ’入時失敗:%E\n"
+
+#: ldmain.c:869
+msgid "%P: `-retain-symbols-file' overrides `-s' and `-S'\n"
+msgstr "%P:「-retain-symbols-fileã€å¼·åˆ¶è¦†å¯«ã€Œ-sã€å’Œã€Œ-Sã€\n"
+
+#: ldmain.c:944
+#, c-format
+msgid ""
+"Archive member included because of file (symbol)\n"
+"\n"
+msgstr ""
+"由於檔案(符號)而包å«äº†æ­¸æª”æˆå“¡\n"
+"\n"
+
+#: ldmain.c:1014
+msgid "%X%C: multiple definition of `%T'\n"
+msgstr "%X%C:「%Tã€çš„多é‡å®šç¾©\n"
+
+#: ldmain.c:1017
+msgid "%D: first defined here\n"
+msgstr "%D:第一次定義在此\n"
+
+#: ldmain.c:1021
+msgid "%P: Disabling relaxation: it will not work with multiple definitions\n"
+msgstr "%P: åœç”¨é¬†é–‹ï¼šå¤šé‡å®šç¾©å°‡ç„¡æ³•ä½œç”¨\n"
+
+#: ldmain.c:1051
+msgid "%B: warning: definition of `%T' overriding common\n"
+msgstr "%B: 警告:「%Tã€çš„定義覆寫公共定義\n"
+
+#: ldmain.c:1054
+msgid "%B: warning: common is here\n"
+msgstr "%B: 警告: 公共定義在此\n"
+
+#: ldmain.c:1061
+msgid "%B: warning: common of `%T' overridden by definition\n"
+msgstr "%B: 警告: 公共的「%Tã€ç”±å®šç¾©æ‰€è¦†å¯«\n"
+
+#: ldmain.c:1064
+msgid "%B: warning: defined here\n"
+msgstr "%B:警告:在此定義\n"
+
+#: ldmain.c:1071
+msgid "%B: warning: common of `%T' overridden by larger common\n"
+msgstr "%B: 警告:公共的「%Tã€ç”±è¼ƒå¤§çš„å…±åŒé»žæ‰€è¦†å¯«\n"
+
+#: ldmain.c:1074
+msgid "%B: warning: larger common is here\n"
+msgstr "%B: 警告: 較大的共åŒé»žåœ¨æ­¤\n"
+
+#: ldmain.c:1078
+msgid "%B: warning: common of `%T' overriding smaller common\n"
+msgstr "%B: 警告:公共的「%Tã€ç”±è¼ƒå°çš„å…±åŒé»žæ‰€è¦†å¯«\n"
+
+#: ldmain.c:1081
+msgid "%B: warning: smaller common is here\n"
+msgstr "%B: 警告: 較å°çš„å…±åŒé»žåœ¨æ­¤\n"
+
+#: ldmain.c:1085
+msgid "%B: warning: multiple common of `%T'\n"
+msgstr "%B: 警告:「%Tã€çš„多é‡å…±åŒé»ž\n"
+
+#: ldmain.c:1087
+msgid "%B: warning: previous common is here\n"
+msgstr "%B: 警告:å‰ä¸€å€‹å…±åŒé»žåœ¨æ­¤\n"
+
+#: ldmain.c:1107 ldmain.c:1145
+msgid "%P: warning: global constructor %s used\n"
+msgstr "%P: è­¦å‘Šï¼šä½¿ç”¨å…¨åŸŸå»ºæ§‹å­ %s\n"
+
+#: ldmain.c:1155
+msgid "%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"
+msgstr "%P%F: BFD 後端錯誤:ä¸æ”¯æ´ BFD_RELOC_CTOR\n"
+
+#. We found a reloc for the symbol we are looking for.
+#: ldmain.c:1209 ldmain.c:1211 ldmain.c:1213 ldmain.c:1251 ldmain.c:1299
+msgid "warning: "
+msgstr "警告:"
+
+#: ldmain.c:1334
+msgid "%F%P: bfd_hash_table_init failed: %E\n"
+msgstr "%F%P: bfd_hash_table_init 失敗:%E\n"
+
+#: ldmain.c:1341
+msgid "%F%P: bfd_hash_lookup failed: %E\n"
+msgstr "%F%P: bfd_hash_lookup 失敗:%E\n"
+
+#: ldmain.c:1362
+msgid "%X%C: undefined reference to `%T'\n"
+msgstr "%X%C: 未定義åƒè€ƒåˆ°ã€Œ%Tã€\n"
+
+#: ldmain.c:1365
+msgid "%C: warning: undefined reference to `%T'\n"
+msgstr "%C: 警告:未定義åƒè€ƒåˆ°ã€Œ%Tã€\n"
+
+#: ldmain.c:1371
+msgid "%X%D: more undefined references to `%T' follow\n"
+msgstr "%X%D: 跟著更多未定義的åƒè€ƒåˆ°ã€Œ%Tã€\n"
+
+#: ldmain.c:1374
+msgid "%D: warning: more undefined references to `%T' follow\n"
+msgstr "%D: 警告:跟著更多未定義的åƒè€ƒåˆ°ã€Œ%Tã€\n"
+
+#: ldmain.c:1385
+msgid "%X%B: undefined reference to `%T'\n"
+msgstr "%X%B: 未定義的åƒè€ƒåˆ°ã€Œ%Tã€\n"
+
+#: ldmain.c:1388
+msgid "%B: warning: undefined reference to `%T'\n"
+msgstr "%B: 警告:未定義的åƒè€ƒåˆ°ã€Œ%Tã€\n"
+
+#: ldmain.c:1394
+msgid "%X%B: more undefined references to `%T' follow\n"
+msgstr "%X%B: 跟著更多未定義的åƒè€ƒåˆ°ã€Œ%Tã€\n"
+
+#: ldmain.c:1397
+msgid "%B: warning: more undefined references to `%T' follow\n"
+msgstr "%B: 警告:跟著更多未定義的åƒè€ƒåˆ°ã€Œ%Tã€\n"
+
+#: ldmain.c:1436
+msgid " additional relocation overflows omitted from the output\n"
+msgstr " 從輸出所çœç•¥çš„é¡å¤–é‡å®šå€æº¢ä½\n"
+
+#: ldmain.c:1449
+msgid " relocation truncated to fit: %s against undefined symbol `%T'"
+msgstr " 截斷é‡å®šå€è‡³ç›¸ç¬¦ï¼š%s é‡å°æœªå®šç¾©çš„符號「%Tã€"
+
+#: ldmain.c:1454
+msgid " relocation truncated to fit: %s against symbol `%T' defined in %A section in %B"
+msgstr " 截斷é‡å®šå€è‡³ç›¸ç¬¦ï¼š%s é‡å°åœ¨ %B 中的 %A å€æ®µä¸­çš„符號「%Tã€çš„定義"
+
+#: ldmain.c:1466
+msgid " relocation truncated to fit: %s against `%T'"
+msgstr " 截斷é‡å®šå€è‡³ç›¸ç¬¦ï¼š%s é‡å°ã€Œ%Tã€"
+
+#: ldmain.c:1483
+#, c-format
+msgid "%X%C: dangerous relocation: %s\n"
+msgstr "%X%C: å±éšªçš„é‡å®šå€ï¼š%s\n"
+
+#: ldmain.c:1498
+msgid "%X%C: reloc refers to symbol `%T' which is not being output\n"
+msgstr "%X%C: é‡å®šå€åƒè€ƒæœªè¢«è¼¸å‡ºçš„符號「%Tã€\n"
+
+#: ldmisc.c:147
+#, c-format
+msgid "no symbol"
+msgstr "無符號"
+
+#: ldmisc.c:238
+#, c-format
+msgid "built in linker script:%u"
+msgstr "內建éˆçµå‘½ä»¤ç¨¿ï¼š%u"
+
+#: ldmisc.c:294 ldmisc.c:298
+msgid "%B%F: could not read symbols\n"
+msgstr "%B%F:無法讀å–符號\n"
+
+#: ldmisc.c:340
+msgid "%B: In function `%T'"
+msgstr "%B:在函å¼ã€Œ%Tã€ä¸­"
+
+#: ldmisc.c:510
+msgid "%F%P: internal error %s %d\n"
+msgstr "%F%P:內部錯誤 %s %d\n"
+
+#: ldmisc.c:556
+msgid "%P: internal error: aborting at %s line %d in %s\n"
+msgstr "%P: 內部錯誤:放棄 %3$s 中 %1$s 的第 %2$d 列\n"
+
+#: ldmisc.c:559
+msgid "%P: internal error: aborting at %s line %d\n"
+msgstr "%P: 內部錯誤:放棄 %s 的第 %d 列\n"
+
+#: ldmisc.c:561
+msgid "%P%F: please report this bug\n"
+msgstr "%P%F:請報告此錯誤\n"
+
+#. Output for noisy == 2 is intended to follow the GNU standards.
+#: ldver.c:38
+#, c-format
+msgid "GNU ld version %s\n"
+msgstr "GNU ld 版本 %s\n"
+
+#: ldver.c:42
+#, c-format
+msgid "Copyright 2005 Free Software Foundation, Inc.\n"
+msgstr "版權所有 2005 自由軟體基金會\n"
+
+#: ldver.c:43
+#, c-format
+msgid ""
+"This program is free software; you may redistribute it under the terms of\n"
+"the GNU General Public License. This program has absolutely no warranty.\n"
+msgstr ""
+"本程å¼æ˜¯è‡ªç”±è»Ÿé«”;您å¯ä»¥åœ¨éµå¾ª GNU 通用公共許å¯è­‰çš„å‰æ下å†æ•£ä½ˆã€‚\n"
+"本程å¼ä¸å«ä»»ä½•æ“”ä¿ã€‚\n"
+
+#: ldver.c:52
+#, c-format
+msgid " Supported emulations:\n"
+msgstr " 支æ´çš„模擬:\n"
+
+#: ldwrite.c:55 ldwrite.c:191
+msgid "%P%F: bfd_new_link_order failed\n"
+msgstr "%P%F: bfd_new_link_order 時失敗\n"
+
+#: ldwrite.c:344
+msgid "%F%P: cannot create split section name for %s\n"
+msgstr "%F%P: 無法在 %s 建立分割節段å稱\n"
+
+#: ldwrite.c:356
+msgid "%F%P: clone section failed: %E\n"
+msgstr "%F%P: 仿製å€æ®µå¤±æ•—: %E\n"
+
+#: ldwrite.c:394
+#, c-format
+msgid "%8x something else\n"
+msgstr "%8x 其他æ±è¥¿\n"
+
+#: ldwrite.c:564
+msgid "%F%P: final link failed: %E\n"
+msgstr "%F%P: 最後的éˆçµå¤±æ•—: %E\n"
+
+#: lexsup.c:196 lexsup.c:328
+msgid "KEYWORD"
+msgstr "é—œéµå­—"
+
+#: lexsup.c:196
+msgid "Shared library control for HP/UX compatibility"
+msgstr "為了 HP/UX 相容性的共用程å¼åº«æŽ§åˆ¶"
+
+#: lexsup.c:199
+msgid "ARCH"
+msgstr "架構"
+
+#: lexsup.c:199
+msgid "Set architecture"
+msgstr "設定 CPU 架構"
+
+#: lexsup.c:201 lexsup.c:422
+msgid "TARGET"
+msgstr "目標"
+
+#: lexsup.c:201
+msgid "Specify target for following input files"
+msgstr "指定用於下述輸入檔案的目標"
+
+#: lexsup.c:204 lexsup.c:253 lexsup.c:265 lexsup.c:278 lexsup.c:381
+#: lexsup.c:434 lexsup.c:491
+msgid "FILE"
+msgstr "檔案"
+
+#: lexsup.c:204
+msgid "Read MRI format linker script"
+msgstr "è®€å– MRI æ ¼å¼çš„éˆçµå™¨å‘½ä»¤ç¨¿"
+
+#: lexsup.c:206
+msgid "Force common symbols to be defined"
+msgstr "強制公共符號必須定義"
+
+#: lexsup.c:210 lexsup.c:476 lexsup.c:478 lexsup.c:480
+msgid "ADDRESS"
+msgstr "ä½å€"
+
+#: lexsup.c:210
+msgid "Set start address"
+msgstr "設定起始ä½å€"
+
+#: lexsup.c:212
+msgid "Export all dynamic symbols"
+msgstr "匯出所有動態符號"
+
+#: lexsup.c:214
+msgid "Link big-endian objects"
+msgstr "éˆçµé«˜ä½ä½å…ƒçµ„在å‰çš„目的檔案"
+
+#: lexsup.c:216
+msgid "Link little-endian objects"
+msgstr "éˆçµä½Žä½ä½å…ƒçµ„在å‰çš„目的檔案"
+
+#: lexsup.c:218 lexsup.c:221
+msgid "SHLIB"
+msgstr "共享函å¼åº«"
+
+#: lexsup.c:218
+msgid "Auxiliary filter for shared object symbol table"
+msgstr "指定為æŸå…±äº«ç‰©ä»¶ç¬¦è™Ÿè¡¨çš„輔助éŽæ¿¾å™¨"
+
+#: lexsup.c:221
+msgid "Filter for shared object symbol table"
+msgstr "指定為æŸå…±äº«ç‰©ä»¶ç¬¦è™Ÿè¡¨çš„éŽæ¿¾å™¨"
+
+#: lexsup.c:224
+msgid "Ignored"
+msgstr "忽略"
+
+#: lexsup.c:226
+msgid "SIZE"
+msgstr "大å°"
+
+#: lexsup.c:226
+msgid "Small data size (if no size, same as --shared)"
+msgstr "å°åž‹è³‡æ–™å¤§å°(如果未給予大å°ï¼Œèˆ‡ --shared 相åŒ)"
+
+#: lexsup.c:229
+msgid "FILENAME"
+msgstr "檔案å稱"
+
+#: lexsup.c:229
+msgid "Set internal name of shared library"
+msgstr "設定共享函å¼åº«çš„內部å稱"
+
+#: lexsup.c:231
+msgid "PROGRAM"
+msgstr "程å¼"
+
+#: lexsup.c:231
+msgid "Set PROGRAM as the dynamic linker to use"
+msgstr "將「程å¼ã€è¨­ç‚ºè¦ä½¿ç”¨çš„å‹•æ…‹éˆçµå™¨"
+
+#: lexsup.c:234
+msgid "LIBNAME"
+msgstr "函å¼åº«å稱"
+
+#: lexsup.c:234
+msgid "Search for library LIBNAME"
+msgstr "æœå°‹å‡½å¼åº«ã€Œå‡½å¼åº«å稱ã€"
+
+#: lexsup.c:236
+msgid "DIRECTORY"
+msgstr "目錄"
+
+#: lexsup.c:236
+msgid "Add DIRECTORY to library search path"
+msgstr "將「目錄ã€åŠ å…¥åˆ°å‡½å¼åº«æœå°‹è·¯å¾‘中"
+
+#: lexsup.c:239
+msgid "Override the default sysroot location"
+msgstr "強制覆寫é è¨­çš„ sysroot ä½ç½®"
+
+#: lexsup.c:241
+msgid "EMULATION"
+msgstr "模擬"
+
+#: lexsup.c:241
+msgid "Set emulation"
+msgstr "設定模擬"
+
+#: lexsup.c:243
+msgid "Print map file on standard output"
+msgstr "在標準輸出上列å°å°æ‡‰åœ–檔案"
+
+#: lexsup.c:245
+msgid "Do not page align data"
+msgstr "ä¸å°‡è³‡æ–™å°é½Šè‡³é é‚Šç•Œ"
+
+#: lexsup.c:247
+msgid "Do not page align data, do not make text readonly"
+msgstr "ä¸å°‡è³‡æ–™å°é½Šè‡³é é‚Šç•Œï¼Œä¸å°‡æ–‡å­—設為唯讀"
+
+#: lexsup.c:250
+msgid "Page align data, make text readonly"
+msgstr "將資料å°é½Šè‡³é é‚Šç•Œï¼Œå°‡æ–‡å­—設為唯讀"
+
+#: lexsup.c:253
+msgid "Set output file name"
+msgstr "設定輸出檔案å稱"
+
+#: lexsup.c:255
+msgid "Optimize output file"
+msgstr "最佳化輸出檔案"
+
+#: lexsup.c:257
+msgid "Ignored for SVR4 compatibility"
+msgstr "為 SVR4 相容性所忽略"
+
+#: lexsup.c:261
+msgid "Generate relocatable output"
+msgstr "產生å¯é‡æ–°å®šä½çš„輸出"
+
+#: lexsup.c:265
+msgid "Just link symbols (if directory, same as --rpath)"
+msgstr "僅éˆçµç¬¦è™Ÿ (如果是目錄,與 --rpath 相åŒ)"
+
+#: lexsup.c:268
+msgid "Strip all symbols"
+msgstr "剔除所有符號資訊"
+
+#: lexsup.c:270
+msgid "Strip debugging symbols"
+msgstr "剔除除錯符號資訊"
+
+#: lexsup.c:272
+msgid "Strip symbols in discarded sections"
+msgstr "剔除在丟棄å€æ®µä¸­çš„符號"
+
+#: lexsup.c:274
+msgid "Do not strip symbols in discarded sections"
+msgstr "ä¸å‰”除在丟棄å€æ®µä¸­çš„符號"
+
+#: lexsup.c:276
+msgid "Trace file opens"
+msgstr "追蹤檔案開啟"
+
+#: lexsup.c:278
+msgid "Read linker script"
+msgstr "讀å–éˆçµå™¨å‘½ä»¤ç¨¿"
+
+#: lexsup.c:280 lexsup.c:298 lexsup.c:364 lexsup.c:379 lexsup.c:469
+#: lexsup.c:494 lexsup.c:521
+msgid "SYMBOL"
+msgstr "符號"
+
+#: lexsup.c:280
+msgid "Start with undefined reference to SYMBOL"
+msgstr "以未定義的符號åƒè€ƒé–‹å§‹"
+
+#: lexsup.c:283
+msgid "[=SECTION]"
+msgstr "[=å€æ®µ]"
+
+#: lexsup.c:284
+msgid "Don't merge input [SECTION | orphan] sections"
+msgstr "ä¸åˆä½µå稱為「å€æ®µã€çš„輸入å€æ®µæˆ–孤立å€æ®µ"
+
+#: lexsup.c:286
+msgid "Build global constructor/destructor tables"
+msgstr "組建全域建構å­/解構å¼è¡¨æ ¼"
+
+#: lexsup.c:288
+msgid "Print version information"
+msgstr "顯示版本資訊"
+
+#: lexsup.c:290
+msgid "Print version and emulation information"
+msgstr "顯示版本和模擬資訊"
+
+#: lexsup.c:292
+msgid "Discard all local symbols"
+msgstr "丟棄所有局部符號"
+
+#: lexsup.c:294
+msgid "Discard temporary local symbols (default)"
+msgstr "丟棄臨時局部符號(é è¨­)"
+
+#: lexsup.c:296
+msgid "Don't discard any local symbols"
+msgstr "ä¸ä¸Ÿæ£„任何局部符號"
+
+#: lexsup.c:298
+msgid "Trace mentions of SYMBOL"
+msgstr "符號的追蹤表記"
+
+#: lexsup.c:300 lexsup.c:436 lexsup.c:438
+msgid "PATH"
+msgstr "路徑"
+
+#: lexsup.c:300
+msgid "Default search path for Solaris compatibility"
+msgstr "為了 Solaris 相容性的é è¨­æœå°‹è·¯å¾‘"
+
+#: lexsup.c:303
+msgid "Start a group"
+msgstr "開始群組"
+
+#: lexsup.c:305
+msgid "End a group"
+msgstr "çµæŸç¾¤çµ„"
+
+#: lexsup.c:309
+msgid "Accept input files whose architecture cannot be determined"
+msgstr "接å—無法決定其架構的輸入檔案"
+
+#: lexsup.c:313
+msgid "Reject input files whose architecture is unknown"
+msgstr "拒絕架構ä¸æ˜Žçš„輸入檔案"
+
+#: lexsup.c:316
+msgid ""
+"Set DT_NEEDED tags for DT_NEEDED entries in\n"
+"\t\t\t\tfollowing dynamic libs"
+msgstr ""
+"設定 DT_NEEDED 的標記用於 DT_NEEDED 所需的項目在\n"
+"\t\t\t\t下述的動態函å¼åº«ä¸­"
+
+#: lexsup.c:319
+msgid ""
+"Do not set DT_NEEDED tags for DT_NEEDED entries\n"
+"\t\t\t\tin following dynamic libs"
+msgstr ""
+"ä¸è¨­å®š DT_NEEDED 的標記用於 DT_NEEDED 所需的項目\n"
+"\t\t\t\t在下述的動態函å¼åº«ä¸­"
+
+#: lexsup.c:322
+msgid "Only set DT_NEEDED for following dynamic libs if used"
+msgstr "如果使用的話,åªæœ‰è¨­å®š DT_NEEDED 於下述的動態函å¼åº«"
+
+#: lexsup.c:325
+msgid "Always set DT_NEEDED for following dynamic libs"
+msgstr "自動設定 DTNEEDED 用於下述的動態函å¼åº«"
+
+#: lexsup.c:328
+msgid "Ignored for SunOS compatibility"
+msgstr "為 SunOS 相容性所忽略"
+
+#: lexsup.c:330
+msgid "Link against shared libraries"
+msgstr "éˆçµåˆ°å…±äº«å‡½å¼åº«"
+
+#: lexsup.c:336
+msgid "Do not link against shared libraries"
+msgstr "ä¸éˆçµåˆ°å…±äº«å‡½å¼åº«"
+
+#: lexsup.c:344
+msgid "Bind global references locally"
+msgstr "局部地繫çµå…¨åŸŸåƒè€ƒ"
+
+#: lexsup.c:346
+msgid "Check section addresses for overlaps (default)"
+msgstr "檢查å€æ®µä½å€æ˜¯å¦é‡ç–Š(é è¨­)"
+
+#: lexsup.c:349
+msgid "Do not check section addresses for overlaps"
+msgstr "ä¸æª¢æŸ¥å€æ®µä½å€æ˜¯å¦é‡ç–Š"
+
+#: lexsup.c:352
+msgid "Output cross reference table"
+msgstr "輸出交å‰åƒç…§è¡¨"
+
+#: lexsup.c:354
+msgid "SYMBOL=EXPRESSION"
+msgstr "符號=é‹ç®—å¼"
+
+#: lexsup.c:354
+msgid "Define a symbol"
+msgstr "定義一個符號"
+
+#: lexsup.c:356
+msgid "[=STYLE]"
+msgstr "[=樣å¼]"
+
+#: lexsup.c:356
+msgid "Demangle symbol names [using STYLE]"
+msgstr "解讀符號å稱[使用「樣å¼ã€]"
+
+#: lexsup.c:359
+msgid "Generate embedded relocs"
+msgstr "產生嵌入å¼é‡å®šå€"
+
+#: lexsup.c:361
+msgid "Treat warnings as errors"
+msgstr "將警告當作錯誤"
+
+#: lexsup.c:364
+msgid "Call SYMBOL at unload-time"
+msgstr "在å¸è¼‰æ™‚間呼å«ç¬¦è™Ÿ"
+
+#: lexsup.c:366
+msgid "Force generation of file with .exe suffix"
+msgstr "強制為產生的檔案加入 .exe 字尾"
+
+#: lexsup.c:368
+msgid "Remove unused sections (on some targets)"
+msgstr "移除未使用的å€æ®µ(æ–¼æŸäº›ç›®æ¨™)"
+
+#: lexsup.c:371
+msgid "Don't remove unused sections (default)"
+msgstr "ä¸ç§»é™¤æœªä½¿ç”¨çš„å€æ®µ(é è¨­)"
+
+#: lexsup.c:374
+msgid "Set default hash table size close to <NUMBER>"
+msgstr "設定é è¨­é›œæ¹Šè¡¨å¤§å°æŽ¥è¿‘ <數字>"
+
+#: lexsup.c:377
+msgid "Print option help"
+msgstr "顯示é¸é …求助"
+
+#: lexsup.c:379
+msgid "Call SYMBOL at load-time"
+msgstr "在載入時間呼å«ç¬¦è™Ÿ"
+
+#: lexsup.c:381
+msgid "Write a map file"
+msgstr "寫入å°æ‡‰æª”案"
+
+#: lexsup.c:383
+msgid "Do not define Common storage"
+msgstr "ä¸å®šç¾©å…¬å…±å„²è—"
+
+#: lexsup.c:385
+msgid "Do not demangle symbol names"
+msgstr "ä¸è§£è®€ç¬¦è™Ÿå稱"
+
+#: lexsup.c:387
+msgid "Use less memory and more disk I/O"
+msgstr "使用較少的記憶體和更多ç£ç¢Ÿ I/O"
+
+#: lexsup.c:389
+msgid "Do not allow unresolved references in object files"
+msgstr "ä¸å…許在目的檔案中存在無法解æžçš„åƒè€ƒ"
+
+#: lexsup.c:392
+msgid "Allow unresolved references in shared libaries"
+msgstr "å…許在共享函å¼åº«ä¸­å­˜åœ¨ç„¡æ³•è§£æžçš„åƒè€ƒ"
+
+#: lexsup.c:396
+msgid "Do not allow unresolved references in shared libs"
+msgstr "ä¸å…許在共享函å¼åº«ä¸­å­˜åœ¨ç„¡æ³•è§£æžçš„åƒè€ƒ"
+
+#: lexsup.c:400
+msgid "Allow multiple definitions"
+msgstr "å…許多é‡å®šç¾©"
+
+#: lexsup.c:402
+msgid "Disallow undefined version"
+msgstr "ä¸å…許未定義的版本"
+
+#: lexsup.c:404
+msgid "Create default symbol version"
+msgstr "建立é è¨­ç¬¦è™Ÿç‰ˆæœ¬"
+
+#: lexsup.c:407
+msgid "Create default symbol version for imported symbols"
+msgstr "建立用於匯入符號的é è¨­ç¬¦è™Ÿç‰ˆæœ¬"
+
+#: lexsup.c:410
+msgid "Don't warn about mismatched input files"
+msgstr "ä¸ç‚ºä¸ç¬¦åˆçš„輸入檔案發出警告"
+
+#: lexsup.c:412
+msgid "Turn off --whole-archive"
+msgstr "關閉 --whole-archive"
+
+#: lexsup.c:414
+msgid "Create an output file even if errors occur"
+msgstr "å³ä½¿ç™¼ç”ŸéŒ¯èª¤ä¹Ÿè¦å»ºç«‹è¼¸å‡ºæª”案"
+
+#: lexsup.c:419
+msgid ""
+"Only use library directories specified on\n"
+"\t\t\t\tthe command line"
+msgstr ""
+"åªä½¿ç”¨å‘½ä»¤åˆ—中給予的\n"
+"\t\t\t\t函å¼åº«ç›®éŒ„"
+
+#: lexsup.c:422
+msgid "Specify target of output file"
+msgstr "指定輸出的目標檔案"
+
+#: lexsup.c:425
+msgid "Ignored for Linux compatibility"
+msgstr "為 Linux 相容性所忽略"
+
+#: lexsup.c:428
+msgid "Reduce memory overheads, possibly taking much longer"
+msgstr "é™ä½Žè¨˜æ†¶é«”é¡å¤–負擔,å¯èƒ½æœƒèŠ±è²»æ›´å¤šæ™‚é–“"
+
+#: lexsup.c:431
+msgid "Relax branches on certain targets"
+msgstr "放寬分支於æŸäº›ç›®æ¨™"
+
+#: lexsup.c:434
+msgid "Keep only symbols listed in FILE"
+msgstr "åªä¿ç•™åœ¨ã€Œæª”案ã€ä¸­åˆ—出的符號"
+
+#: lexsup.c:436
+msgid "Set runtime shared library search path"
+msgstr "設定執行時共享函å¼åº«çš„æœå°‹è·¯å¾‘"
+
+#: lexsup.c:438
+msgid "Set link time shared library search path"
+msgstr "設定éˆçµæ™‚共享函å¼åº«çš„æœå°‹è·¯å¾‘"
+
+#: lexsup.c:441
+msgid "Create a shared library"
+msgstr "建立共享函å¼åº«"
+
+#: lexsup.c:445
+msgid "Create a position independent executable"
+msgstr "建立ä½ç½®ç„¡é—œçš„å¯åŸ·è¡Œæª”案"
+
+#: lexsup.c:449
+msgid "Sort common symbols by size"
+msgstr "按大å°æŽ’åºå…¬ç”¨ç¬¦è™Ÿæ¸…å–®"
+
+#: lexsup.c:453
+msgid "name|alignment"
+msgstr "å稱|å°é½Š"
+
+#: lexsup.c:454
+msgid "Sort sections by name or maximum alignment"
+msgstr "ä¾å稱或最大值å°é½Šä¾†æŽ’åºå€æ®µ"
+
+#: lexsup.c:456
+msgid "COUNT"
+msgstr "計數"
+
+#: lexsup.c:456
+msgid "How many tags to reserve in .dynamic section"
+msgstr "有多少標記è¦ä¿ç•™åœ¨ .dynamic å€æ®µä¸­"
+
+#: lexsup.c:459
+msgid "[=SIZE]"
+msgstr "[=大å°]"
+
+#: lexsup.c:459
+msgid "Split output sections every SIZE octets"
+msgstr "ä¾æ¯[大å°]å…«ä½å…ƒçµ„來分割輸出å€æ®µ"
+
+#: lexsup.c:462
+msgid "[=COUNT]"
+msgstr "[=計數]"
+
+#: lexsup.c:462
+msgid "Split output sections every COUNT relocs"
+msgstr "ä¾æ¯[計數]é‡å®šå€ä¾†åˆ†å‰²è¼¸å‡ºå€æ®µ"
+
+#: lexsup.c:465
+msgid "Print memory usage statistics"
+msgstr "顯示記憶體使用統計"
+
+#: lexsup.c:467
+msgid "Display target specific options"
+msgstr "顯示目標特定的é¸é …"
+
+#: lexsup.c:469
+msgid "Do task level linking"
+msgstr "執行工作等級éˆçµ"
+
+#: lexsup.c:471
+msgid "Use same format as native linker"
+msgstr "使用與原生éˆçµå™¨ç›¸åŒçš„æ ¼å¼"
+
+#: lexsup.c:473
+msgid "SECTION=ADDRESS"
+msgstr "å€æ®µ=ä½å€"
+
+#: lexsup.c:473
+msgid "Set address of named section"
+msgstr "設定具åå€æ®µçš„ä½å€"
+
+#: lexsup.c:476
+msgid "Set address of .bss section"
+msgstr "設定 .bss å€æ®µçš„ä½å€"
+
+#: lexsup.c:478
+msgid "Set address of .data section"
+msgstr "設定 .data å€æ®µçš„ä½å€"
+
+#: lexsup.c:480
+msgid "Set address of .text section"
+msgstr "設定 .text å€æ®µçš„ä½å€"
+
+#: lexsup.c:483
+msgid ""
+"How to handle unresolved symbols. <method> is:\n"
+"\t\t\t\tignore-all, report-all, ignore-in-object-files,\n"
+"\t\t\t\tignore-in-shared-libs"
+msgstr ""
+"如何處ç†ä¸èƒ½è§£æžçš„符號。<方法> 是:\n"
+"\t\t\t\t全部忽略ã€å…¨éƒ¨å›žå ±ã€åœ¨ç›®çš„檔中忽略ã€\n"
+"\t\t\t\t在共享函å¼åº«ä¸­å¿½ç•¥"
+
+#: lexsup.c:487
+msgid "Output lots of information during link"
+msgstr "éˆçµéŽç¨‹ä¸­è¼¸å‡ºå¤§é‡ç›¸é—œè³‡è¨Š"
+
+#: lexsup.c:491
+msgid "Read version information script"
+msgstr "讀å–版本資訊命令稿"
+
+#: lexsup.c:494
+msgid ""
+"Take export symbols list from .exports, using\n"
+"\t\t\t\tSYMBOL as the version."
+msgstr ""
+"從 .exports 匯出符號表列,使用\n"
+"\t\t\t\t[符號]åšç‚ºç‰ˆæœ¬ã€‚"
+
+#: lexsup.c:497
+msgid "Warn about duplicate common symbols"
+msgstr "為é‡è¤‡çš„公共符號給予警告"
+
+#: lexsup.c:499
+msgid "Warn if global constructors/destructors are seen"
+msgstr "如果看得見全域建構å­/解構å¼å°±çµ¦äºˆè­¦å‘Š"
+
+#: lexsup.c:502
+msgid "Warn if the multiple GP values are used"
+msgstr "å¦‚æžœä½¿ç”¨äº†å¤šé‡ GP 值就給予警告"
+
+#: lexsup.c:504
+msgid "Warn only once per undefined symbol"
+msgstr "為æ¯ä¸€å€‹æœªå®šç¾©çš„符號åªè­¦å‘Šä¸€æ¬¡"
+
+#: lexsup.c:506
+msgid "Warn if start of section changes due to alignment"
+msgstr "如果å€æ®µçš„開始由於å°é½Šè€Œè®Šæ›´å°±çµ¦äºˆè­¦å‘Š"
+
+#: lexsup.c:509
+msgid "Warn if shared object has DT_TEXTREL"
+msgstr "如果共用物件有 DT_TEXTREL 就給予警告"
+
+#: lexsup.c:513
+msgid "Report unresolved symbols as warnings"
+msgstr "將無法解æžçš„符號視作警告"
+
+#: lexsup.c:516
+msgid "Report unresolved symbols as errors"
+msgstr "將無法解æžçš„符號視作錯誤"
+
+#: lexsup.c:518
+msgid "Include all objects from following archives"
+msgstr "包å«ä¸‹è¿°æª”案中的所有物件"
+
+#: lexsup.c:521
+msgid "Use wrapper functions for SYMBOL"
+msgstr "使用包è£å‡½å¼åšç‚º[符號]"
+
+#: lexsup.c:668
+msgid "%P: unrecognized option '%s'\n"
+msgstr "%P:無法辨識的é¸é …「%sã€\n"
+
+#: lexsup.c:670
+msgid "%P%F: use the --help option for usage information\n"
+msgstr "%P%F:使用 --help é¸é …以ç²å–使用資訊\n"
+
+#: lexsup.c:688
+msgid "%P%F: unrecognized -a option `%s'\n"
+msgstr "%P%F:無法辨識的 -a é¸é …「%sã€\n"
+
+#: lexsup.c:701
+msgid "%P%F: unrecognized -assert option `%s'\n"
+msgstr "%P%F:無法辨識的 -assert é¸é …「%sã€\n"
+
+#: lexsup.c:744
+msgid "%F%P: unknown demangling style `%s'"
+msgstr "%F%P: ä¸æ˜Žçš„解讀樣å¼ã€Œ%sã€"
+
+#: lexsup.c:806
+msgid "%P%F: invalid number `%s'\n"
+msgstr "%P%F: 無效的數字「%sã€\n"
+
+#: lexsup.c:898
+msgid "%P%F: bad --unresolved-symbols option: %s\n"
+msgstr "%P%F: ä¸ç•¶çš„ --unresolved-symbols é¸é …: %s\n"
+
+#. This can happen if the user put "-rpath,a" on the command
+#. line. (Or something similar. The comma is important).
+#. Getopt becomes confused and thinks that this is a -r option
+#. but it cannot parse the text after the -r so it refuses to
+#. increment the optind counter. Detect this case and issue
+#. an error message here. We cannot just make this a warning,
+#. increment optind, and continue because getopt is too confused
+#. and will seg-fault the next time around.
+#: lexsup.c:969
+msgid "%P%F: bad -rpath option\n"
+msgstr "%P%F: ä¸ç•¶çš„ -rpath é¸é …\n"
+
+#: lexsup.c:1081
+msgid "%P%F: -shared not supported\n"
+msgstr "%P%F:ä¸æ”¯æ´ -shared\n"
+
+#: lexsup.c:1090
+msgid "%P%F: -pie not supported\n"
+msgstr "%P%F:ä¸æ”¯æ´ -pie\n"
+
+#: lexsup.c:1100
+msgid "name"
+msgstr "å稱"
+
+#: lexsup.c:1102
+msgid "alignment"
+msgstr "å°é½Š"
+
+#: lexsup.c:1105
+msgid "%P%F: invalid section sorting option: %s\n"
+msgstr "%P%F: 無效的å€æ®µæŽ’åºé¸é …: %s\n"
+
+#: lexsup.c:1131
+msgid "%P%F: invalid argument to option \"--section-start\"\n"
+msgstr "%P%F:給予é¸é …「--section-startã€çš„引數無效\n"
+
+#: lexsup.c:1138
+msgid "%P%F: missing argument(s) to option \"--section-start\"\n"
+msgstr "%P%F:é¸é …「--section-startã€ç¼ºå°‘引數\n"
+
+#: lexsup.c:1312
+msgid "%P%F: may not nest groups (--help for usage)\n"
+msgstr "%P%F: ä¸å¯å·¢ç‹€ç¾¤çµ„ (--help ç²å¾—用法)\n"
+
+#: lexsup.c:1319
+msgid "%P%F: group ended before it began (--help for usage)\n"
+msgstr "%P%F: 群組在它開始之å‰å°±çµæŸ (--help ç²å¾—用法)\n"
+
+#: lexsup.c:1347
+msgid "%P%X: --hash-size needs a numeric argument\n"
+msgstr "%P%X: --hash-size 需è¦æ•¸å€¼å¼•æ•¸\n"
+
+#: lexsup.c:1398 lexsup.c:1411
+msgid "%P%F: invalid hex number `%s'\n"
+msgstr "%P%F: 無效的å六進ä½æ•¸å­—「%sã€\n"
+
+#: lexsup.c:1447
+#, c-format
+msgid "Usage: %s [options] file...\n"
+msgstr "用法:%s [é¸é …] 檔案…\n"
+
+#: lexsup.c:1449
+#, c-format
+msgid "Options:\n"
+msgstr "é¸é …:\n"
+
+#: lexsup.c:1527
+#, c-format
+msgid " @FILE"
+msgstr " @檔案"
+
+#: lexsup.c:1530
+#, c-format
+msgid "Read options from FILE\n"
+msgstr "從[檔案]讀å–é¸é …\n"
+
+#. Note: Various tools (such as libtool) depend upon the
+#. format of the listings below - do not change them.
+#: lexsup.c:1535
+#, c-format
+msgid "%s: supported targets:"
+msgstr "%s: 支æ´çš„目標:"
+
+#: lexsup.c:1543
+#, c-format
+msgid "%s: supported emulations: "
+msgstr "%s:支æ´çš„模擬:"
+
+#: lexsup.c:1548
+#, c-format
+msgid "%s: emulation specific options:\n"
+msgstr "%s:模擬特定é¸é …:\n"
+
+#: lexsup.c:1552
+#, c-format
+msgid "Report bugs to %s\n"
+msgstr "å‘ %s 報告程å¼éŒ¯èª¤\n"
+
+#: mri.c:291
+msgid "%P%F: unknown format type %s\n"
+msgstr "%P%F:ä¸æ˜Žçš„æ ¼å¼é¡žåž‹ %s\n"
+
+#: pe-dll.c:303
+#, c-format
+msgid "%XUnsupported PEI architecture: %s\n"
+msgstr "%X ä¸æ”¯æ´çš„ PEI 架構:%s\n"
+
+#: pe-dll.c:604
+#, c-format
+msgid "%XCannot export %s: invalid export name\n"
+msgstr "%X ä¸èƒ½åŒ¯å‡º %s:無效的匯出å稱\n"
+
+#: pe-dll.c:657
+#, c-format
+msgid "%XError, duplicate EXPORT with ordinals: %s (%d vs %d)\n"
+msgstr "%X 錯誤,é‡è£½[匯出]以åºæ•¸ï¼š %s(%d ç›¸å° %d)\n"
+
+#: pe-dll.c:664
+#, c-format
+msgid "Warning, duplicate EXPORT: %s\n"
+msgstr "警告,é‡è£½[匯出]: %s\n"
+
+#: pe-dll.c:751
+#, c-format
+msgid "%XCannot export %s: symbol not defined\n"
+msgstr "%X ä¸èƒ½åŒ¯å‡º %s:符號未定義\n"
+
+#: pe-dll.c:757
+#, c-format
+msgid "%XCannot export %s: symbol wrong type (%d vs %d)\n"
+msgstr "%X 無法匯出 %s: 符號錯誤型態 (%d ç›¸å° %d)\n"
+
+#: pe-dll.c:764
+#, c-format
+msgid "%XCannot export %s: symbol not found\n"
+msgstr "%X ä¸èƒ½åŒ¯å‡º %s:找ä¸åˆ°ç¬¦è™Ÿ\n"
+
+#: pe-dll.c:877
+#, c-format
+msgid "%XError, ordinal used twice: %d (%s vs %s)\n"
+msgstr "%X 錯誤,åºæ•¸ä½¿ç”¨å…©æ¬¡ï¼š %d(%s ç›¸å° %s)\n"
+
+#: pe-dll.c:1219
+#, c-format
+msgid "%XError: %d-bit reloc in dll\n"
+msgstr "%X 錯誤:在 DLL 中 %d-ä½å…ƒé‡å®šå€\n"
+
+#: pe-dll.c:1347
+#, c-format
+msgid "%s: Can't open output def file %s\n"
+msgstr "%s:無法開啟輸出 def 檔案 %s\n"
+
+#: pe-dll.c:1490
+#, c-format
+msgid "; no contents available\n"
+msgstr ";沒有å¯ç”¨çš„內容\n"
+
+#: pe-dll.c:2252
+msgid "%C: variable '%T' can't be auto-imported. Please read the documentation for ld's --enable-auto-import for details.\n"
+msgstr "%C:變數「%Tã€ç„¡æ³•è‡ªå‹•åŒ¯å…¥ã€‚請讀å–與 ld çš„ --enable-auto-import 相關文件以ç²å–更詳細的資訊。\n"
+
+#: pe-dll.c:2282
+#, c-format
+msgid "%XCan't open .lib file: %s\n"
+msgstr "%X 無法開啟 .lib 檔案:%s\n"
+
+#: pe-dll.c:2287
+#, c-format
+msgid "Creating library file: %s\n"
+msgstr "正在建立函å¼åº«æª”案:%s\n"
diff --git a/binutils-2.21/ld/scripttempl/README b/binutils-2.21/ld/scripttempl/README
new file mode 100644
index 0000000..26ad2e9
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/README
@@ -0,0 +1,4 @@
+The files in this directory are linker script templates.
+genscripts.sh sets some shell variables, then sources
+EMULATION.sc, to generate EMULATION.{x,xr,xu,xn,xbn} -- the script
+files for default, -r, -Ur, -n, -N.
diff --git a/binutils-2.21/ld/scripttempl/aix.sc b/binutils-2.21/ld/scripttempl/aix.sc
new file mode 100644
index 0000000..d592dbe
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/aix.sc
@@ -0,0 +1,62 @@
+# AIX linker script.
+# AIX always uses shared libraries. The section VMA appears to be
+# unimportant. The native linker aligns the sections on boundaries
+# specified by the -H option.
+
+cat <<EOF
+OUTPUT_ARCH(${ARCH})
+${RELOCATING+${LIB_SEARCH_DIRS}}
+${RELOCATING+ENTRY (__start)}
+SECTIONS
+{
+ .pad 0 : { *(.pad) }
+
+ . = 0x10000000;
+ .text ${RELOCATING-0} : {
+ ${RELOCATING+PROVIDE (_text = .);}
+ *(.text)
+ *(.pr)
+ *(.ro)
+ *(.db)
+ *(.gl)
+ *(.xo)
+ *(.ti)
+ *(.tb)
+ ${RELOCATING+PROVIDE (_etext = .);}
+ }
+ . = ALIGN (0x10000000);
+ .data . : {
+ ${RELOCATING+PROVIDE (_data = .);}
+ *(.data)
+ *(.rw)
+ *(.sv)
+ *(.sv64)
+ *(.sv3264)
+ *(.ua)
+ . = ALIGN(4);
+ ${CONSTRUCTING+CONSTRUCTORS}
+ *(.ds)
+ *(.tc0)
+ *(.tc)
+ *(.td)
+ ${RELOCATING+PROVIDE (_edata = .);}
+ }
+ .bss : {
+ *(.tocbss)
+ *(.bss)
+ *(.bs)
+ *(.uc)
+ *(COMMON)
+ ${RELOCATING+PROVIDE (_end = .);}
+ ${RELOCATING+PROVIDE (end = .);}
+ }
+
+ .loader : {
+ *(.loader)
+ }
+
+ .debug : {
+ *(.debug)
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/alpha.sc b/binutils-2.21/ld/scripttempl/alpha.sc
new file mode 100644
index 0000000..99565b4
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/alpha.sc
@@ -0,0 +1,74 @@
+# Linker script for Alpha systems.
+# Ian Lance Taylor <ian@cygnus.com>.
+# These variables may be overridden by the emulation file. The
+# defaults are appropriate for an Alpha running OSF/1.
+test -z "$ENTRY" && ENTRY=__start
+test -z "$TEXT_START_ADDR" && TEXT_START_ADDR="0x120000000 + SIZEOF_HEADERS"
+if test "x$LD_FLAG" = "xn" -o "x$LD_FLAG" = "xN"; then
+ DATA_ADDR=.
+else
+ test -z "$DATA_ADDR" && DATA_ADDR=0x140000000
+fi
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+${LIB_SEARCH_DIRS}
+
+${RELOCATING+ENTRY (${ENTRY})}
+
+SECTIONS
+{
+ ${RELOCATING+. = ${TEXT_START_ADDR};}
+ .text : {
+ ${RELOCATING+ _ftext = . };
+ ${RELOCATING+ __istart = . };
+ ${RELOCATING+ *(.init) }
+ ${RELOCATING+ LONG (0x6bfa8001)}
+ ${RELOCATING+ eprol = .};
+ *(.text)
+ ${RELOCATING+ __fstart = . };
+ ${RELOCATING+ *(.fini)}
+ ${RELOCATING+ LONG (0x6bfa8001)}
+ ${RELOCATING+ _etext = .};
+ }
+ .rdata : {
+ *(.rdata)
+ }
+ .rconst : {
+ *(.rconst)
+ }
+ .pdata : {
+ ${RELOCATING+ _fpdata = .;}
+ *(.pdata)
+ }
+ ${RELOCATING+. = ${DATA_ADDR};}
+ .data : {
+ ${RELOCATING+ _fdata = .;}
+ *(.data)
+ ${CONSTRUCTING+CONSTRUCTORS}
+ }
+ .xdata : {
+ *(.xdata)
+ }
+ ${RELOCATING+ _gp = ALIGN (16) + 0x8000;}
+ .lit8 : {
+ *(.lit8)
+ }
+ .lita : {
+ *(.lita)
+ }
+ .sdata : {
+ *(.sdata)
+ }
+ ${RELOCATING+ _EDATA = .;}
+ ${RELOCATING+ _FBSS = .;}
+ .sbss : {
+ *(.sbss)
+ *(.scommon)
+ }
+ .bss : {
+ *(.bss)
+ *(COMMON)
+ }
+ ${RELOCATING+ _end = .;}
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/alphavms.sc b/binutils-2.21/ld/scripttempl/alphavms.sc
new file mode 100644
index 0000000..406a601
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/alphavms.sc
@@ -0,0 +1,49 @@
+# Linker script for Alpha VMS systems.
+# Tristan Gingold <gingold@adacore.com>.
+
+PAGESIZE=0x10000
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+${LIB_SEARCH_DIRS}
+
+SECTIONS
+{
+ ${RELOCATING+. = ${PAGESIZE};}
+
+ /* RW initialized data. */
+ \$DATA\$ ALIGN (${PAGESIZE}) : {
+ *(\$DATA\$)
+ }
+ /* RW data unmodified (zero-initialized). */
+ \$BSS\$ ALIGN (${PAGESIZE}) : {
+ *(\$BSS\$)
+ }
+ /* RO, executable code. */
+ \$CODE\$ ALIGN (${PAGESIZE}) : {
+ *(\$CODE\$)
+ }
+ /* RO initialized data. */
+ \$LITERAL\$ ALIGN (${PAGESIZE}) : {
+ *(\$LINK\$)
+ *(\$LITERAL\$)
+ *(\$READONLY\$)
+ *(\$READONLY_ADDR\$)
+ *(eh_frame)
+ *(jcr)
+ *(ctors)
+ *(dtors)
+ *(gcc_except_table)
+
+ /* LIB$INITIALIZE stuff. */
+ *(LIB\$INITIALIZDZ) /* Start marker. */
+ *(LIB\$INITIALIZD_) /* Hi priority. */
+ *(LIB\$INITIALIZE) /* User. */
+ *(LIB\$INITIALIZE$) /* End marker. */
+ }
+
+ \$DST\$ 0 : {
+ *(\$DST\$)
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/aout.sc b/binutils-2.21/ld/scripttempl/aout.sc
new file mode 100644
index 0000000..80dbb37
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/aout.sc
@@ -0,0 +1,57 @@
+test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+test -z "${ALIGNMENT}" && ALIGNMENT="4"
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
+ "${LITTLE_OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+
+${RELOCATING+${LIB_SEARCH_DIRS}}
+${STACKZERO+${RELOCATING+${STACKZERO}}}
+${SHLIB_PATH+${RELOCATING+${SHLIB_PATH}}}
+${RELOCATING+${EXECUTABLE_SYMBOLS}}
+${RELOCATING+PROVIDE (__stack = 0);}
+SECTIONS
+{
+ ${RELOCATING+. = ${TEXT_START_ADDR};}
+ .text :
+ {
+ CREATE_OBJECT_SYMBOLS
+ *(.text)
+ /* The next six sections are for SunOS dynamic linking. The order
+ is important. */
+ *(.dynrel)
+ *(.hash)
+ *(.dynsym)
+ *(.dynstr)
+ *(.rules)
+ *(.need)
+ ${RELOCATING+_etext = .;}
+ ${RELOCATING+__etext = .;}
+ ${PAD_TEXT+${RELOCATING+. = ${DATA_ALIGNMENT};}}
+ }
+ ${RELOCATING+. = ${DATA_ALIGNMENT};}
+ .data :
+ {
+ /* The first three sections are for SunOS dynamic linking. */
+ *(.dynamic)
+ *(.got)
+ *(.plt)
+ *(.data)
+ *(.linux-dynamic) /* For Linux dynamic linking. */
+ ${CONSTRUCTING+CONSTRUCTORS}
+ ${RELOCATING+_edata = .;}
+ ${RELOCATING+__edata = .;}
+ }
+ .bss :
+ {
+ ${RELOCATING+ __bss_start = .};
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+. = ALIGN(${ALIGNMENT});}
+ ${RELOCATING+_end = . };
+ ${RELOCATING+__end = . };
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/armaout.sc b/binutils-2.21/ld/scripttempl/armaout.sc
new file mode 100644
index 0000000..9bae887
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/armaout.sc
@@ -0,0 +1,35 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+
+${RELOCATING+${LIB_SEARCH_DIRS}}
+${STACKZERO+${RELOCATING+${STACKZERO}}}
+SECTIONS
+{
+ .text ${RELOCATING+${TEXT_START_ADDR}} :
+ {
+ CREATE_OBJECT_SYMBOLS
+ ${RELOCATING+__stext_ = .;}
+ *(.text)
+ ${PAD_TEXT+${RELOCATING+. = ${DATA_ALIGNMENT};}}
+ ${RELOCATING+_etext = ${DATA_ALIGNMENT};}
+ ${RELOCATING+__etext = ${DATA_ALIGNMENT};}
+ }
+ .data ${RELOCATING+${DATA_ALIGNMENT}} :
+ {
+ ${RELOCATING+__sdata_ = .;}
+ *(.data)
+ ${CONSTRUCTING+CONSTRUCTORS}
+ ${RELOCATING+_edata = ${DATA_ALIGNMENT};}
+ ${RELOCATING+__edata = ${DATA_ALIGNMENT};}
+ }
+ .bss ${RELOCATING+${DATA_ALIGNMENT}} :
+ {
+ ${RELOCATING+ __bss_start = .};
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+_end = ALIGN(4) };
+ ${RELOCATING+__end = ALIGN(4) };
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/armbpabi.sc b/binutils-2.21/ld/scripttempl/armbpabi.sc
new file mode 100644
index 0000000..3049f36
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/armbpabi.sc
@@ -0,0 +1,430 @@
+# This variant of elf.sc is used for ARM BPABI platforms, like Symbian
+# OS, where a separate postlinker will operated on the generated
+# executable or shared object. See elf.sc for configuration variables
+# that apply; only BPABI-specific variables will be noted here.
+
+test -z "$ENTRY" && ENTRY=_start
+test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi
+test -z "${ELFSIZE}" && ELFSIZE=32
+test -z "${ALIGNMENT}" && ALIGNMENT="${ELFSIZE} / 8"
+test "$LD_FLAG" = "N" && DATA_ADDR=.
+test -n "$CREATE_SHLIB$CREATE_PIE" && test -n "$SHLIB_DATA_ADDR" && COMMONPAGESIZE=""
+test -z "$CREATE_SHLIB$CREATE_PIE" && test -n "$DATA_ADDR" && COMMONPAGESIZE=""
+test -n "$RELRO_NOW" && unset SEPARATE_GOTPLT
+DATA_SEGMENT_ALIGN="ALIGN(${SEGMENT_SIZE}) + (. & (${MAXPAGESIZE} - 1))"
+DATA_SEGMENT_RELRO_END=""
+DATA_SEGMENT_RELRO_GOTPLT_END=""
+DATA_SEGMENT_END=""
+if test -n "${COMMONPAGESIZE}"; then
+ DATA_SEGMENT_ALIGN="ALIGN (${SEGMENT_SIZE}) - ((${MAXPAGESIZE} - .) & (${MAXPAGESIZE} - 1)); . = DATA_SEGMENT_ALIGN (${MAXPAGESIZE}, ${COMMONPAGESIZE})"
+ DATA_SEGMENT_END=". = DATA_SEGMENT_END (.);"
+ if test -n "${SEPARATE_GOTPLT}"; then
+ DATA_SEGMENT_RELRO_GOTPLT_END=". = DATA_SEGMENT_RELRO_END (. + ${SEPARATE_GOTPLT});"
+ else
+ DATA_SEGMENT_RELRO_END=". = DATA_SEGMENT_RELRO_END (.);"
+ fi
+fi
+INTERP=".interp 0 : { *(.interp) }"
+PLT=".plt ${RELOCATING-0} : { *(.plt) }"
+RODATA=".rodata ${RELOCATING-0} : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }"
+DATARELRO=".data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) }"
+DISCARDED="/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }"
+if test -z "${NO_SMALL_DATA}"; then
+ SBSS=".sbss ${RELOCATING-0} :
+ {
+ ${RELOCATING+PROVIDE (__sbss_start = .);}
+ ${RELOCATING+PROVIDE (___sbss_start = .);}
+ *(.dynsbss)
+ *(.sbss${RELOCATING+ .sbss.* .gnu.linkonce.sb.*})
+ *(.scommon)
+ ${RELOCATING+PROVIDE (__sbss_end = .);}
+ ${RELOCATING+PROVIDE (___sbss_end = .);}
+ }"
+ SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }"
+ SDATA="/* We want the small data sections together, so single-instruction offsets
+ can access them all, and initialized data all before uninitialized, so
+ we can shorten the on-disk segment size. */
+ .sdata ${RELOCATING-0} :
+ {
+ ${RELOCATING+${SDATA_START_SYMBOLS}}
+ *(.sdata${RELOCATING+ .sdata.* .gnu.linkonce.s.*})
+ }"
+ SDATA2=".sdata2 ${RELOCATING-0} : { *(.sdata2${RELOCATING+ .sdata2.* .gnu.linkonce.s2.*}) }"
+ REL_SDATA=".rel.sdata ${RELOCATING-0} : { *(.rel.sdata${RELOCATING+ .rel.sdata.* .rel.gnu.linkonce.s.*}) }
+ .rela.sdata ${RELOCATING-0} : { *(.rela.sdata${RELOCATING+ .rela.sdata.* .rela.gnu.linkonce.s.*}) }"
+ REL_SBSS=".rel.sbss ${RELOCATING-0} : { *(.rel.sbss${RELOCATING+ .rel.sbss.* .rel.gnu.linkonce.sb.*}) }
+ .rela.sbss ${RELOCATING-0} : { *(.rela.sbss${RELOCATING+ .rela.sbss.* .rela.gnu.linkonce.sb.*}) }"
+ REL_SDATA2=".rel.sdata2 ${RELOCATING-0} : { *(.rel.sdata2${RELOCATING+ .rel.sdata2.* .rel.gnu.linkonce.s2.*}) }
+ .rela.sdata2 ${RELOCATING-0} : { *(.rela.sdata2${RELOCATING+ .rela.sdata2.* .rela.gnu.linkonce.s2.*}) }"
+ REL_SBSS2=".rel.sbss2 ${RELOCATING-0} : { *(.rel.sbss2${RELOCATING+ .rel.sbss2.* .rel.gnu.linkonce.sb2.*}) }
+ .rela.sbss2 ${RELOCATING-0} : { *(.rela.sbss2${RELOCATING+ .rela.sbss2.* .rela.gnu.linkonce.sb2.*}) }"
+else
+ NO_SMALL_DATA=" "
+fi
+test -n "$SEPARATE_GOTPLT" && SEPARATE_GOTPLT=" "
+INIT_ARRAY=".init_array ${RELOCATING-0} :
+ {
+ /* SymbianOS uses this symbol. */
+ ${RELOCATING+PROVIDE (SHT\$\$INIT_ARRAY\$\$Base = .);}
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__init_array_start = .);}}
+ KEEP (*(SORT(.init_array.*)))
+ KEEP (*(.init_array))
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__init_array_end = .);}}
+ /* SymbianOS uses this symbol. */
+ ${RELOCATING+PROVIDE (SHT\$\$INIT_ARRAY\$\$Limit = .);}
+ }"
+FINI_ARRAY=".fini_array ${RELOCATING-0} :
+ {
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_start = .);}}
+ KEEP (*(SORT(.fini_array.*)))
+ KEEP (*(.fini_array))
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_end = .);}}
+ }"
+CTOR=".ctors ${CONSTRUCTING-0} :
+ {
+ ${CONSTRUCTING+${CTOR_START}}
+ /* gcc uses crtbegin.o to find the start of
+ the constructors, so we make sure it is
+ first. Because this is a wildcard, it
+ doesn't matter if the user does not
+ actually link against crtbegin.o; the
+ linker won't look for a file to match a
+ wildcard. The wildcard also means that it
+ doesn't matter which directory crtbegin.o
+ is in. */
+
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
+
+ /* We don't want to include the .ctor section from
+ the crtend.o file until after the sorted ctors.
+ The .ctor section from the crtend file contains the
+ end of ctors marker and it must be last */
+
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ ${CONSTRUCTING+${CTOR_END}}
+ }"
+DTOR=".dtors ${CONSTRUCTING-0} :
+ {
+ ${CONSTRUCTING+${DTOR_START}}
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ ${CONSTRUCTING+${DTOR_END}}
+ }"
+STACK=" .stack ${RELOCATING-0}${RELOCATING+${STACK_ADDR}} :
+ {
+ ${RELOCATING+_stack = .;}
+ *(.stack)
+ }"
+
+TEXT_START_ADDR="SEGMENT_START(\"text\", ${TEXT_START_ADDR})"
+SHLIB_TEXT_START_ADDR="SEGMENT_START(\"text\", ${SHLIB_TEXT_START_ADDR:-0})"
+DATA_ADDR="SEGMENT_START(\"data\", ${DATA_ADDR-${DATA_SEGMENT_ALIGN}})"
+SHLIB_DATA_ADDR="SEGMENT_START(\"data\", ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}})"
+
+# if this is for an embedded system, don't add SIZEOF_HEADERS.
+if [ -z "$EMBEDDED" ]; then
+ test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR} + SIZEOF_HEADERS"
+ SHLIB_BASE_ADDRESS="${SHLIB_TEXT_START_ADDR} + SIZEOF_HEADERS"
+else
+ test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR}"
+ SHLIB_BASE_ADDRESS="${SHLIB_TEXT_START_ADDR}"
+fi
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
+ "${LITTLE_OUTPUT_FORMAT}")
+OUTPUT_ARCH(${OUTPUT_ARCH})
+${RELOCATING+ENTRY(${ENTRY})}
+
+${RELOCATING+${LIB_SEARCH_DIRS}}
+${RELOCATING+/* Do we need any of these for elf?
+ __DYNAMIC = 0; ${STACKZERO+${STACKZERO}} ${SHLIB_PATH+${SHLIB_PATH}} */}
+${RELOCATING+${EXECUTABLE_SYMBOLS}}
+${RELOCATING+${INPUT_FILES}}
+${RELOCATING- /* For some reason, the Solaris linker makes bad executables
+ if gld -r is used and the intermediate file has sections starting
+ at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld
+ bug. But for now assigning the zero vmas works. */}
+
+/* ARM's proprietary toolchain generate these symbols to match the start
+ and end of particular sections of the image. SymbianOS uses these
+ symbols. We provide them for compatibility with ARM's toolchains.
+ These symbols should be bound locally; each shared object may define
+ its own version of these symbols. */
+
+VERSION
+{
+ /* Give these a dummy version to work around linker lameness.
+ The name used shouldn't matter as these are all local symbols. */
+ __GNU {
+ local:
+ Image\$\$ER_RO\$\$Base;
+ Image\$\$ER_RO\$\$Limit;
+ SHT\$\$INIT_ARRAY\$\$Base;
+ SHT\$\$INIT_ARRAY\$\$Limit;
+ .ARM.exidx\$\$Base;
+ .ARM.exidx\$\$Limit;
+ };
+}
+
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+PROVIDE (__executable_start = ${TEXT_START_ADDR});}}}
+
+ ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+ . = ${TEXT_BASE_ADDRESS};}}}
+ ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_BASE_ADDRESS};}}
+ ${CREATE_PIE+${RELOCATING+. = ${SHLIB_BASE_ADDRESS};}}
+
+ /* Define Image\$\$ER_RO\$\$Base. */
+ ${RELOCATING+PROVIDE (Image\$\$ER_RO\$\$Base = .);}
+
+ ${INITIAL_READONLY_SECTIONS}
+
+EOF
+cat <<EOF
+ .init ${RELOCATING-0} :
+ {
+ ${RELOCATING+${INIT_START}}
+ KEEP (*(.init))
+ ${RELOCATING+${INIT_END}}
+ } =${NOP-0}
+ .text ${RELOCATING-0} :
+ {
+ ${RELOCATING+${TEXT_START_SYMBOLS}}
+ *(.text .stub${RELOCATING+ .text.* .gnu.linkonce.t.*})
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ ${RELOCATING+${OTHER_TEXT_SECTIONS}}
+ } =${NOP-0}
+ .fini ${RELOCATING-0} :
+ {
+ ${RELOCATING+${FINI_START}}
+ KEEP (*(.fini))
+ ${RELOCATING+${FINI_END}}
+ } =${NOP-0}
+ /* The SymbianOS kernel requires that the PLT go at the end of the
+ text section. */
+ ${DATA_PLT-${BSS_PLT-${PLT}}}
+ ${RELOCATING+PROVIDE (__etext = .);}
+ ${RELOCATING+PROVIDE (_etext = .);}
+ ${RELOCATING+PROVIDE (etext = .);}
+
+ /* Define Image\$\$ER_RO\$\$Limit. */
+ ${RELOCATING+PROVIDE (Image\$\$ER_RO\$\$Limit = .);}
+
+ ${WRITABLE_RODATA-${RODATA}}
+ .rodata1 ${RELOCATING-0} : { *(.rodata1) }
+ ${CREATE_SHLIB-${SDATA2}}
+ ${CREATE_SHLIB-${SBSS2}}
+
+ /* On SymbianOS, put .init_array and friends in the read-only
+ segment; there is no runtime relocation applied to these
+ arrays. */
+
+ .preinit_array ${RELOCATING-0} :
+ {
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__preinit_array_start = .);}}
+ KEEP (*(.preinit_array))
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__preinit_array_end = .);}}
+ }
+ ${RELOCATING+${INIT_ARRAY}}
+ ${RELOCATING+${FINI_ARRAY}}
+
+ ${OTHER_READONLY_SECTIONS}
+ .eh_frame_hdr : { *(.eh_frame_hdr) }
+ .eh_frame ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.eh_frame)) }
+ .gcc_except_table ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) }
+
+ /* Adjust the address for the data segment. We want to adjust up to
+ the same address within the page on the next page up. */
+ ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+. = ${DATA_ADDR};}}}
+ ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_DATA_ADDR};}}
+ ${CREATE_PIE+${RELOCATING+. = ${SHLIB_DATA_ADDR};}}
+
+ /* Exception handling */
+ .eh_frame ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.eh_frame)) }
+ .gcc_except_table ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) }
+
+ /* Thread Local Storage sections */
+ .tdata ${RELOCATING-0} : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) }
+ .tbss ${RELOCATING-0} : { *(.tbss${RELOCATING+ .tbss.* .gnu.linkonce.tb.*})${RELOCATING+ *(.tcommon)} }
+
+ ${RELOCATING+${CTOR}}
+ ${RELOCATING+${DTOR}}
+ .jcr ${RELOCATING-0} : { KEEP (*(.jcr)) }
+
+ ${RELOCATING+${DATARELRO}}
+ ${OTHER_RELRO_SECTIONS}
+ ${RELOCATING+${DATA_SEGMENT_RELRO_END}}
+
+ ${DATA_PLT+${PLT_BEFORE_GOT-${PLT}}}
+
+ .data ${RELOCATING-0} :
+ {
+ ${RELOCATING+${DATA_START_SYMBOLS}}
+ *(.data${RELOCATING+ .data.* .gnu.linkonce.d.*})
+ ${CONSTRUCTING+SORT(CONSTRUCTORS)}
+ }
+ .data1 ${RELOCATING-0} : { *(.data1) }
+ ${WRITABLE_RODATA+${RODATA}}
+ ${OTHER_READWRITE_SECTIONS}
+ ${DATA_PLT+${PLT_BEFORE_GOT+${PLT}}}
+ ${CREATE_SHLIB+${SDATA2}}
+ ${CREATE_SHLIB+${SBSS2}}
+ ${SDATA}
+ ${OTHER_SDATA_SECTIONS}
+ ${RELOCATING+_edata = .;}
+ ${RELOCATING+PROVIDE (edata = .);}
+ ${RELOCATING+. = DEFINED(__bss_segment_start) ? __bss_segment_start : .;}
+ ${RELOCATING+__bss_start = .;}
+ ${RELOCATING+${OTHER_BSS_SYMBOLS}}
+ ${SBSS}
+ ${BSS_PLT+${PLT}}
+ .bss ${RELOCATING-0} :
+ {
+ *(.dynbss)
+ *(.bss${RELOCATING+ .bss.* .gnu.linkonce.b.*})
+ *(COMMON)
+ /* Align here to ensure that the .bss section occupies space up to
+ _end. Align after .bss to ensure correct alignment even if the
+ .bss section disappears because there are no input sections. */
+ ${RELOCATING+. = ALIGN(${ALIGNMENT});}
+ }
+ ${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
+ ${RELOCATING+. = ALIGN(${ALIGNMENT});}
+ ${RELOCATING+${OTHER_END_SYMBOLS}}
+ ${RELOCATING+_end = .;}
+ ${RELOCATING+PROVIDE (end = .);}
+ ${RELOCATING+${DATA_SEGMENT_END}}
+
+ /* These sections are not mapped under the BPABI. */
+ .dynamic 0 : { *(.dynamic) }
+ .hash 0 : { *(.hash) }
+ .dynsym 0 : { *(.dynsym) }
+ .dynstr 0 : { *(.dynstr) }
+ .gnu.version 0 : { *(.gnu.version) }
+ .gnu.version_d 0: { *(.gnu.version_d) }
+ .gnu.version_r 0: { *(.gnu.version_r) }
+ ${CREATE_SHLIB-${INTERP}}
+
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+
+ .comment 0 : { *(.comment) }
+
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo .zdebug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames .zdebug_sfnames) }
+
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges .zdebug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames .zdebug_pubnames) }
+
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*} .zdebug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev .zdebug_abbrev) }
+ .debug_line 0 : { *(.debug_line .zdebug_line) }
+ .debug_frame 0 : { *(.debug_frame .zdebug_frame) }
+ .debug_str 0 : { *(.debug_str .zdebug_str) }
+ .debug_loc 0 : { *(.debug_loc .zdebug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo .zdebug_macinfo) }
+
+ /* SGI/MIPS DWARF 2 extensions */
+ .debug_weaknames 0 : { *(.debug_weaknames .zdebug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames .zdebug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames .zdebug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames .zdebug_varnames) }
+
+ ${STACK_ADDR+${STACK}}
+ ${OTHER_SECTIONS}
+ ${RELOCATING+${OTHER_SYMBOLS}}
+ ${RELOCATING+${DISCARDED}}
+EOF
+
+# These relocations sections are part of the read-only segment in SVR4
+# executables, but are not mapped in BPABI executables.
+if [ "x$COMBRELOC" = x ]; then
+ COMBRELOCCAT=cat
+else
+ COMBRELOCCAT="cat > $COMBRELOC"
+fi
+eval $COMBRELOCCAT <<EOF
+ .rel.init 0 : { *(.rel.init) }
+ .rela.init 0 : { *(.rela.init) }
+ .rel.text 0 : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) }
+ .rela.text 0 : { *(.rela.text${RELOCATING+ .rela.text.* .rela.gnu.linkonce.t.*}) }
+ .rel.fini 0 : { *(.rel.fini) }
+ .rela.fini 0 : { *(.rela.fini) }
+ .rel.rodata 0 : { *(.rel.rodata${RELOCATING+ .rel.rodata.* .rel.gnu.linkonce.r.*}) }
+ .rela.rodata 0 : { *(.rela.rodata${RELOCATING+ .rela.rodata.* .rela.gnu.linkonce.r.*}) }
+ ${OTHER_READONLY_RELOC_SECTIONS}
+ .rel.data.rel.ro 0 : { *(.rel.data.rel.ro${RELOCATING+*}) }
+ .rela.data.rel.ro 0 : { *(.rel.data.rel.ro${RELOCATING+*}) }
+ .rel.data 0 : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) }
+ .rela.data 0 : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) }
+ .rel.tdata 0 : { *(.rel.tdata${RELOCATING+ .rel.tdata.* .rel.gnu.linkonce.td.*}) }
+ .rela.tdata 0 : { *(.rela.tdata${RELOCATING+ .rela.tdata.* .rela.gnu.linkonce.td.*}) }
+ .rel.tbss 0 : { *(.rel.tbss${RELOCATING+ .rel.tbss.* .rel.gnu.linkonce.tb.*}) }
+ .rela.tbss 0 : { *(.rela.tbss${RELOCATING+ .rela.tbss.* .rela.gnu.linkonce.tb.*}) }
+ .rel.ctors 0 : { *(.rel.ctors) }
+ .rela.ctors 0 : { *(.rela.ctors) }
+ .rel.dtors 0 : { *(.rel.dtors) }
+ .rela.dtors 0 : { *(.rela.dtors) }
+ ${REL_SDATA}
+ ${REL_SBSS}
+ ${REL_SDATA2}
+ ${REL_SBSS2}
+ .rel.bss 0 : { *(.rel.bss${RELOCATING+ .rel.bss.* .rel.gnu.linkonce.b.*}) }
+ .rela.bss 0 : { *(.rela.bss${RELOCATING+ .rela.bss.* .rela.gnu.linkonce.b.*}) }
+ .rel.init_array 0 : { *(.rel.init_array) }
+ .rela.init_array 0 : { *(.rela.init_array) }
+ .rel.fini_array 0 : { *(.rel.fini_array) }
+ .rela.fini_array 0 : { *(.rela.fini_array) }
+EOF
+if [ -n "$COMBRELOC" ]; then
+cat <<EOF
+ .rel.dyn 0 :
+ {
+EOF
+sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rela\./d;s/^.*: { *\(.*\)}$/ \1/' $COMBRELOC
+cat <<EOF
+ }
+ .rela.dyn 0 :
+ {
+EOF
+sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rel\./d;s/^.*: { *\(.*\)}/ \1/' $COMBRELOC
+cat <<EOF
+ }
+EOF
+fi
+cat <<EOF
+ .rel.plt 0 : { *(.rel.plt) }
+ .rela.plt 0 : { *(.rela.plt) }
+ ${OTHER_PLT_RELOC_SECTIONS}
+ .rel.other 0 : { *(.rel.*) }
+ .rela.other 0 : { *(.rela.*) }
+ .reli.other 0 : { *(.reli.*) }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/armcoff.sc b/binutils-2.21/ld/scripttempl/armcoff.sc
new file mode 100644
index 0000000..ebc019a
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/armcoff.sc
@@ -0,0 +1,84 @@
+# Linker script for ARM COFF.
+# Based on i386coff.sc by Ian Taylor <ian@cygnus.com>.
+test -z "$ENTRY" && ENTRY=_start
+if test -z "${DATA_ADDR}"; then
+ if test "$LD_FLAG" = "N" || test "$LD_FLAG" = "n"; then
+ DATA_ADDR=.
+ fi
+fi
+
+# These are substituted in as variables in order to get '}' in a shell
+# conditional expansion.
+CTOR='.ctor : {
+ *(SORT(.ctors.*))
+ *(.ctor)
+ }'
+DTOR='.dtor : {
+ *(SORT(.dtors.*))
+ *(.dtor)
+ }'
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}", "${LITTLE_OUTPUT_FORMAT}")
+${LIB_SEARCH_DIRS}
+
+${RELOCATING+ENTRY (${ENTRY})}
+
+SECTIONS
+{
+ /* We start at 0x8000 because gdb assumes it (see FRAME_CHAIN).
+ This is an artifact of the ARM Demon monitor using the bottom 32k
+ as workspace (shared with the FP instruction emulator if
+ present): */
+ .text ${RELOCATING+ 0x8000} : {
+ *(.init)
+ *(.text*)
+ *(.glue_7t)
+ *(.glue_7)
+ *(.rdata)
+ ${CONSTRUCTING+ ___CTOR_LIST__ = .; __CTOR_LIST__ = . ;
+ LONG (-1); *(.ctors); *(.ctor); LONG (0); }
+ ${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ;
+ LONG (-1); *(.dtors); *(.dtor); LONG (0); }
+ *(.fini)
+ ${RELOCATING+ etext = .;}
+ ${RELOCATING+ _etext = .;}
+ }
+ .data ${RELOCATING+${DATA_ADDR-0x40000 + (ALIGN(0x8) & 0xfffc0fff)}} : {
+ ${RELOCATING+ __data_start__ = . ;}
+ *(.data*)
+
+ ${RELOCATING+*(.gcc_exc*)}
+ ${RELOCATING+___EH_FRAME_BEGIN__ = . ;}
+ ${RELOCATING+*(.eh_fram*)}
+ ${RELOCATING+___EH_FRAME_END__ = . ;}
+ ${RELOCATING+LONG(0);}
+
+ ${RELOCATING+ __data_end__ = . ;}
+ ${RELOCATING+ edata = .;}
+ ${RELOCATING+ _edata = .;}
+ }
+ ${CONSTRUCTING+${RELOCATING-$CTOR}}
+ ${CONSTRUCTING+${RELOCATING-$DTOR}}
+ .bss ${RELOCATING+ ALIGN(0x8)} :
+ {
+ ${RELOCATING+ __bss_start__ = . ;}
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ __bss_end__ = . ;}
+ }
+
+ ${RELOCATING+ end = .;}
+ ${RELOCATING+ _end = .;}
+ ${RELOCATING+ __end__ = .;}
+
+ .stab 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stab ]
+ }
+ .stabstr 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stabstr ]
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/avr.sc b/binutils-2.21/ld/scripttempl/avr.sc
new file mode 100644
index 0000000..2a0bc6a
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/avr.sc
@@ -0,0 +1,234 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}","${OUTPUT_FORMAT}","${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+
+MEMORY
+{
+ text (rx) : ORIGIN = 0, LENGTH = $TEXT_LENGTH
+ data (rw!x) : ORIGIN = $DATA_ORIGIN, LENGTH = $DATA_LENGTH
+ eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = 64K
+}
+
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ ${TEXT_DYNAMIC+${DYNAMIC}}
+ .hash ${RELOCATING-0} : { *(.hash) }
+ .dynsym ${RELOCATING-0} : { *(.dynsym) }
+ .dynstr ${RELOCATING-0} : { *(.dynstr) }
+ .gnu.version ${RELOCATING-0} : { *(.gnu.version) }
+ .gnu.version_d ${RELOCATING-0} : { *(.gnu.version_d) }
+ .gnu.version_r ${RELOCATING-0} : { *(.gnu.version_r) }
+
+ .rel.init ${RELOCATING-0} : { *(.rel.init) }
+ .rela.init ${RELOCATING-0} : { *(.rela.init) }
+ .rel.text ${RELOCATING-0} :
+ {
+ *(.rel.text)
+ ${RELOCATING+*(.rel.text.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.t*)}
+ }
+ .rela.text ${RELOCATING-0} :
+ {
+ *(.rela.text)
+ ${RELOCATING+*(.rela.text.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.t*)}
+ }
+ .rel.fini ${RELOCATING-0} : { *(.rel.fini) }
+ .rela.fini ${RELOCATING-0} : { *(.rela.fini) }
+ .rel.rodata ${RELOCATING-0} :
+ {
+ *(.rel.rodata)
+ ${RELOCATING+*(.rel.rodata.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.r*)}
+ }
+ .rela.rodata ${RELOCATING-0} :
+ {
+ *(.rela.rodata)
+ ${RELOCATING+*(.rela.rodata.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.r*)}
+ }
+ .rel.data ${RELOCATING-0} :
+ {
+ *(.rel.data)
+ ${RELOCATING+*(.rel.data.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.d*)}
+ }
+ .rela.data ${RELOCATING-0} :
+ {
+ *(.rela.data)
+ ${RELOCATING+*(.rela.data.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.d*)}
+ }
+ .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) }
+ .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) }
+ .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) }
+ .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) }
+ .rel.got ${RELOCATING-0} : { *(.rel.got) }
+ .rela.got ${RELOCATING-0} : { *(.rela.got) }
+ .rel.bss ${RELOCATING-0} : { *(.rel.bss) }
+ .rela.bss ${RELOCATING-0} : { *(.rela.bss) }
+ .rel.plt ${RELOCATING-0} : { *(.rel.plt) }
+ .rela.plt ${RELOCATING-0} : { *(.rela.plt) }
+
+ /* Internal text space or external memory. */
+ .text ${RELOCATING-0} :
+ {
+ *(.vectors)
+ KEEP(*(.vectors))
+
+ /* For data that needs to reside in the lower 64k of progmem. */
+ *(.progmem.gcc*)
+ *(.progmem*)
+ ${RELOCATING+. = ALIGN(2);}
+
+ ${CONSTRUCTING+ __trampolines_start = . ; }
+ /* The jump trampolines for the 16-bit limited relocs will reside here. */
+ *(.trampolines)
+ *(.trampolines*)
+ ${CONSTRUCTING+ __trampolines_end = . ; }
+
+ /* For future tablejump instruction arrays for 3 byte pc devices.
+ We don't relax jump/call instructions within these sections. */
+ *(.jumptables)
+ *(.jumptables*)
+
+ /* For code that needs to reside in the lower 128k progmem. */
+ *(.lowtext)
+ *(.lowtext*)
+
+ ${CONSTRUCTING+ __ctors_start = . ; }
+ ${CONSTRUCTING+ *(.ctors) }
+ ${CONSTRUCTING+ __ctors_end = . ; }
+ ${CONSTRUCTING+ __dtors_start = . ; }
+ ${CONSTRUCTING+ *(.dtors) }
+ ${CONSTRUCTING+ __dtors_end = . ; }
+ KEEP(SORT(*)(.ctors))
+ KEEP(SORT(*)(.dtors))
+
+ /* From this point on, we don't bother about wether the insns are
+ below or above the 16 bits boundary. */
+ *(.init0) /* Start here after reset. */
+ KEEP (*(.init0))
+ *(.init1)
+ KEEP (*(.init1))
+ *(.init2) /* Clear __zero_reg__, set up stack pointer. */
+ KEEP (*(.init2))
+ *(.init3)
+ KEEP (*(.init3))
+ *(.init4) /* Initialize data and BSS. */
+ KEEP (*(.init4))
+ *(.init5)
+ KEEP (*(.init5))
+ *(.init6) /* C++ constructors. */
+ KEEP (*(.init6))
+ *(.init7)
+ KEEP (*(.init7))
+ *(.init8)
+ KEEP (*(.init8))
+ *(.init9) /* Call main(). */
+ KEEP (*(.init9))
+ *(.text)
+ ${RELOCATING+. = ALIGN(2);}
+ *(.text.*)
+ ${RELOCATING+. = ALIGN(2);}
+ *(.fini9) /* _exit() starts here. */
+ KEEP (*(.fini9))
+ *(.fini8)
+ KEEP (*(.fini8))
+ *(.fini7)
+ KEEP (*(.fini7))
+ *(.fini6) /* C++ destructors. */
+ KEEP (*(.fini6))
+ *(.fini5)
+ KEEP (*(.fini5))
+ *(.fini4)
+ KEEP (*(.fini4))
+ *(.fini3)
+ KEEP (*(.fini3))
+ *(.fini2)
+ KEEP (*(.fini2))
+ *(.fini1)
+ KEEP (*(.fini1))
+ *(.fini0) /* Infinite loop after program termination. */
+ KEEP (*(.fini0))
+ ${RELOCATING+ _etext = . ; }
+ } ${RELOCATING+ > text}
+
+ .data ${RELOCATING-0} : ${RELOCATING+AT (ADDR (.text) + SIZEOF (.text))}
+ {
+ ${RELOCATING+ PROVIDE (__data_start = .) ; }
+ *(.data)
+ *(.data*)
+ *(.rodata) /* We need to include .rodata here if gcc is used */
+ *(.rodata*) /* with -fdata-sections. */
+ *(.gnu.linkonce.d*)
+ ${RELOCATING+. = ALIGN(2);}
+ ${RELOCATING+ _edata = . ; }
+ ${RELOCATING+ PROVIDE (__data_end = .) ; }
+ } ${RELOCATING+ > data}
+
+ .bss ${RELOCATING-0} :${RELOCATING+ AT (ADDR (.bss))}
+ {
+ ${RELOCATING+ PROVIDE (__bss_start = .) ; }
+ *(.bss)
+ *(.bss*)
+ *(COMMON)
+ ${RELOCATING+ PROVIDE (__bss_end = .) ; }
+ } ${RELOCATING+ > data}
+
+ ${RELOCATING+ __data_load_start = LOADADDR(.data); }
+ ${RELOCATING+ __data_load_end = __data_load_start + SIZEOF(.data); }
+
+ /* Global data not cleared after reset. */
+ .noinit ${RELOCATING-0}:
+ {
+ ${RELOCATING+ PROVIDE (__noinit_start = .) ; }
+ *(.noinit*)
+ ${RELOCATING+ PROVIDE (__noinit_end = .) ; }
+ ${RELOCATING+ _end = . ; }
+ ${RELOCATING+ PROVIDE (__heap_start = .) ; }
+ } ${RELOCATING+ > data}
+
+ .eeprom ${RELOCATING-0}:
+ {
+ *(.eeprom*)
+ ${RELOCATING+ __eeprom_end = . ; }
+ } ${RELOCATING+ > eeprom}
+
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo .zdebug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames .zdebug_sfnames) }
+
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges .zdebug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames .zdebug_pubnames) }
+
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*} .zdebug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev .zdebug_abbrev) }
+ .debug_line 0 : { *(.debug_line .zdebug_line) }
+ .debug_frame 0 : { *(.debug_frame .zdebug_frame) }
+ .debug_str 0 : { *(.debug_str .zdebug_str) }
+ .debug_loc 0 : { *(.debug_loc .zdebug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo .zdebug_macinfo) }
+}
+EOF
+
diff --git a/binutils-2.21/ld/scripttempl/crisaout.sc b/binutils-2.21/ld/scripttempl/crisaout.sc
new file mode 100644
index 0000000..c58f56d
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/crisaout.sc
@@ -0,0 +1,133 @@
+cat <<EOF
+OUTPUT_FORMAT("a.out-cris")
+OUTPUT_ARCH(cris)
+${RELOCATING+ENTRY (__start)}
+SECTIONS
+{
+ .text ${RELOCATING+ ${TEXT_START_ADDR}}:
+ {
+ CREATE_OBJECT_SYMBOLS;
+ ${CONSTRUCTING+ __Stext = .;}
+ ${RELOCATING+*(.startup)}
+ *(.text)
+ ${CONSTRUCTING+__start = DEFINED(__start) ? __start :
+ DEFINED(_start) ? _start :
+ DEFINED(start) ? start :
+ DEFINED(.startup) ? .startup + 2 : 2;}
+ ${RELOCATING+*(.text.*)}
+ ${RELOCATING+*(.gnu.linkonce.t*)}
+ ${RELOCATING+*(.rodata)}
+ ${RELOCATING+*(.rodata.*)}
+ ${RELOCATING+*(.gnu.linkonce.r*)}
+
+ /* Do not "provide" init-start and fini-start symbols; they might be
+ referred to weakly, so the linker would not override the zero
+ default.
+ FIXME: It's somewhat unexpected to have code emitted by the linker
+ script. Some other mechanism could probably do better. */
+ ${CONSTRUCTING+ . = ALIGN (2);}
+ ${CONSTRUCTING+ ___init__start = .;}
+ ${CONSTRUCTING+ PROVIDE (___do_global_ctors = .);}
+ ${CONSTRUCTING+ SHORT (0xe1fc); /* push srp */}
+ ${CONSTRUCTING+ SHORT (0xbe7e);}
+ ${CONSTRUCTING+ *(.init)}
+ ${CONSTRUCTING+ SHORT (0x0d3e); /* jump [sp+] */}
+ ${CONSTRUCTING+ PROVIDE (__init__end = .);}
+ ${CONSTRUCTING+ PROVIDE (___init__end = .);}
+
+ ${CONSTRUCTING+ . = ALIGN (2);}
+ ${CONSTRUCTING+ ___fini__start = .;}
+ ${CONSTRUCTING+ PROVIDE (___do_global_dtors = .);}
+ ${CONSTRUCTING+ SHORT (0xe1fc); /* push srp */}
+ ${CONSTRUCTING+ SHORT (0xbe7e);}
+ ${CONSTRUCTING+ *(.fini)}
+ ${CONSTRUCTING+ SHORT (0x0d3e); /* jump [sp+] */}
+ ${CONSTRUCTING+ PROVIDE (__fini__end = .);}
+ ${CONSTRUCTING+ ___fini__end = .;}
+
+ /* Cater to linking from ELF. */
+ ${CONSTRUCTING+ PROVIDE(___ctors = .);}
+ ${CONSTRUCTING+ ___elf_ctors_dtors_begin = .;}
+ ${CONSTRUCTING+ KEEP (*crtbegin.o(.ctors))}
+ ${CONSTRUCTING+ KEEP (*crtbegin?.o(.ctors))}
+ ${CONSTRUCTING+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .ctors))}
+ ${CONSTRUCTING+ KEEP (*(SORT(.ctors.*)))}
+ ${CONSTRUCTING+ KEEP (*(.ctors))}
+ ${CONSTRUCTING+ PROVIDE(___ctors_end = .);}
+
+ ${CONSTRUCTING+ PROVIDE(___dtors = .);}
+ ${CONSTRUCTING+ KEEP (*crtbegin.o(.dtors))}
+ ${CONSTRUCTING+ KEEP (*crtbegin?.o(.dtors))}
+ ${CONSTRUCTING+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .dtors))}
+ ${CONSTRUCTING+ KEEP (*(SORT(.dtors.*)))}
+ ${CONSTRUCTING+ KEEP (*(.dtors))}
+ ${CONSTRUCTING+ PROVIDE(___dtors_end = .);}
+ ${CONSTRUCTING+ ___elf_ctors_dtors_end = .;}
+
+ /* We include objects that force alignment of the data segment.
+ Unfortunately that sometimes causes a gap between .text and .data,
+ which is not detectable since .data does not have a start address
+ of itself in the a.out header. This should only matter for
+ testing; for production use, .data is at a "known" location.
+ We assume .data does not get an alignment larger than 32 bytes. */
+ ${CONSTRUCTING+. = ALIGN (32);}
+
+ ${CONSTRUCTING+ __Etext = .;}
+
+ /* Deprecated, use __Etext. */
+ ${CONSTRUCTING+ PROVIDE(_etext = .);}
+ }
+
+ /* Any dot-relative start-expression (such as "ALIGN(2)", also including
+ the "default" .data alignment expression) will use the initial, raw
+ size of .text and will be incorrect if the alignment used is less
+ than the alignment for .text (which might depend on input and obj
+ format). FIXME: Seems like a bug in ld. Seems hard to fix. Seems
+ unimportant. */
+ .data :
+ {
+ ${CONSTRUCTING+ __Sdata = .;}
+ *(.data);
+ ${RELOCATING+*(.data.*)}
+ ${RELOCATING+*(.gnu.linkonce.d*)}
+ ${RELOCATING+*(.eh_frame) /* FIXME: Make .text */}
+ ${RELOCATING+*(.gcc_except_table)}
+
+ /* See comment at ALIGN before __Etext. */
+ ${CONSTRUCTING+. = ALIGN (32);}
+
+ ${CONSTRUCTING+ __Edata = .;}
+
+ /* Deprecated, use __Edata. */
+ ${CONSTRUCTING+ PROVIDE(_edata = .);}
+ }
+
+ .bss :
+ {
+ /* Deprecated, use __Sbss. */
+ ${CONSTRUCTING+ PROVIDE(_bss_start = .);}
+
+ ${CONSTRUCTING+ __Sbss = .;}
+ *(.bss)
+ ${RELOCATING+*(.bss.*)}
+ *(COMMON)
+ ${CONSTRUCTING+ __Ebss = .;}
+
+ /* Deprecated, use __Ebss or __Eall as appropriate. */
+ ${CONSTRUCTING+ PROVIDE(_end = .);}
+ ${CONSTRUCTING+ PROVIDE(__end = .);}
+ }
+ ${CONSTRUCTING+ __Eall = .;}
+
+ /* Unfortunately, stabs are not mappable from ELF to a.out.
+ It can probably be fixed with some amount of work. */
+ /DISCARD/ :
+ { *(.stab) *(.stab*) *(.debug) *(.debug*) *(.comment) *(.gnu.warning.*) }
+
+ /* For the rsim and xsim simulators. */
+ ${CONSTRUCTING+ PROVIDE(__Endmem = 0x10000000);}
+
+ /* For elinux. */
+ ${CONSTRUCTING+ PROVIDE(__Stacksize = 0);}
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/delta68.sc b/binutils-2.21/ld/scripttempl/delta68.sc
new file mode 100644
index 0000000..fb196f3
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/delta68.sc
@@ -0,0 +1,49 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+${RELOCATING+ENTRY (_start)}
+${RELOCATING+${LIB_SEARCH_DIRS}}
+
+SECTIONS
+{
+ .text ${RELOCATING+ 0x2000 + SIZEOF_HEADERS} :
+ {
+ ${RELOCATING+ __.text.start = .};
+ *(.text)
+ ${RELOCATING+ etext = .;}
+ ${RELOCATING+ _etext = .;}
+ ${RELOCATING+ __.text.end = .};
+ ${CONSTRUCTING+ __CTOR_LIST__ = .;}
+ ${CONSTRUCTING+ LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)}
+ ${CONSTRUCTING+ *(.ctors)}
+ ${CONSTRUCTING+ LONG(0)}
+ ${CONSTRUCTING+ __CTOR_END__ = .;}
+ ${CONSTRUCTING+ __DTOR_LIST__ = .;}
+ ${CONSTRUCTING+ LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)}
+ ${CONSTRUCTING+ *(.dtors)}
+ ${CONSTRUCTING+ LONG(0)}
+ ${CONSTRUCTING+ __DTOR_END__ = .;}
+ }
+ .data ${RELOCATING+ SIZEOF(.text) + ADDR(.text) + 0x400000} :
+ {
+ ${RELOCATING+ __.data.start = .};
+ *(.data)
+ ${RELOCATING+ edata = .};
+ ${RELOCATING+ _edata = .};
+ ${RELOCATING+ __.data.end = .};
+ }
+ .bss ${RELOCATING+ SIZEOF(.data) + ADDR(.data)} :
+ {
+ ${RELOCATING+ __.bss.start = .};
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ __.bss.end = .};
+ ${RELOCATING+ end = ALIGN(0x8)};
+ ${RELOCATING+ _end = ALIGN(0x8)};
+ }
+ .comment ${RELOCATING+ 0} :
+ {
+ *(.comment)
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/dlx.sc b/binutils-2.21/ld/scripttempl/dlx.sc
new file mode 100644
index 0000000..b222b33
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/dlx.sc
@@ -0,0 +1,30 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
+ "${LITTLE_OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+
+${RELOCATING+${LIB_SEARCH_DIRS}}
+SECTIONS
+{
+ ${RELOCATING+. = ${TEXT_START_ADDR};}
+ .text :
+ {
+ CREATE_OBJECT_SYMBOLS
+ *(.text)
+ ${RELOCATING+etext = ${DATA_ALIGNMENT};}
+ }
+ ${RELOCATING+. = ${DATA_ALIGNMENT};}
+ .data :
+ {
+ *(.data)
+ ${CONSTRUCTING+CONSTRUCTORS}
+ ${RELOCATING+edata = .;}
+ }
+ .bss :
+ {
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+end = . };
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/elf.sc b/binutils-2.21/ld/scripttempl/elf.sc
new file mode 100644
index 0000000..f020a66
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/elf.sc
@@ -0,0 +1,613 @@
+#
+# Unusual variables checked by this code:
+# NOP - four byte opcode for no-op (defaults to 0)
+# NO_SMALL_DATA - no .sbss/.sbss2/.sdata/.sdata2 sections if not
+# empty.
+# SMALL_DATA_CTOR - .ctors contains small data.
+# SMALL_DATA_DTOR - .dtors contains small data.
+# DATA_ADDR - if end-of-text-plus-one-page isn't right for data start
+# INITIAL_READONLY_SECTIONS - at start of text segment
+# OTHER_READONLY_SECTIONS - other than .text .init .rodata ...
+# (e.g., .PARISC.milli)
+# OTHER_TEXT_SECTIONS - these get put in .text when relocating
+# OTHER_READWRITE_SECTIONS - other than .data .bss .ctors .sdata ...
+# (e.g., .PARISC.global)
+# OTHER_RELRO_SECTIONS - other than .data.rel.ro ...
+# (e.g. PPC32 .fixup, .got[12])
+# OTHER_BSS_SECTIONS - other than .bss .sbss ...
+# ATTRS_SECTIONS - at the end
+# OTHER_SECTIONS - at the end
+# EXECUTABLE_SYMBOLS - symbols that must be defined for an
+# executable (e.g., _DYNAMIC_LINK)
+# TEXT_START_ADDR - the first byte of the text segment, after any
+# headers.
+# TEXT_BASE_ADDRESS - the first byte of the text segment.
+# TEXT_START_SYMBOLS - symbols that appear at the start of the
+# .text section.
+# DATA_START_SYMBOLS - symbols that appear at the start of the
+# .data section.
+# DATA_END_SYMBOLS - symbols that appear at the end of the
+# writeable data sections.
+# OTHER_GOT_SYMBOLS - symbols defined just before .got.
+# OTHER_GOT_SECTIONS - sections just after .got.
+# OTHER_SDATA_SECTIONS - sections just after .sdata.
+# OTHER_BSS_SYMBOLS - symbols that appear at the start of the
+# .bss section besides __bss_start.
+# DATA_PLT - .plt should be in data segment, not text segment.
+# PLT_BEFORE_GOT - .plt just before .got when .plt is in data segement.
+# BSS_PLT - .plt should be in bss segment
+# NO_REL_RELOCS - Don't include .rel.* sections in script
+# NO_RELA_RELOCS - Don't include .rela.* sections in script
+# NON_ALLOC_DYN - Place dynamic sections after data segment.
+# TEXT_DYNAMIC - .dynamic in text segment, not data segment.
+# EMBEDDED - whether this is for an embedded system.
+# SHLIB_TEXT_START_ADDR - if set, add to SIZEOF_HEADERS to set
+# start address of shared library.
+# INPUT_FILES - INPUT command of files to always include
+# WRITABLE_RODATA - if set, the .rodata section should be writable
+# INIT_START, INIT_END - statements just before and just after
+# combination of .init sections.
+# FINI_START, FINI_END - statements just before and just after
+# combination of .fini sections.
+# STACK_ADDR - start of a .stack section.
+# OTHER_SYMBOLS - symbols to place right at the end of the script.
+# ETEXT_NAME - name of a symbol for the end of the text section,
+# normally etext.
+# SEPARATE_GOTPLT - if set, .got.plt should be separate output section,
+# so that .got can be in the RELRO area. It should be set to
+# the number of bytes in the beginning of .got.plt which can be
+# in the RELRO area as well.
+# USER_LABEL_PREFIX - prefix to add to user-visible symbols.
+# RODATA_NAME, SDATA_NAME, SBSS_NAME, BSS_NAME - base parts of names
+# for standard sections, without initial "." or suffixes.
+#
+# When adding sections, do note that the names of some sections are used
+# when specifying the start address of the next.
+#
+
+# Many sections come in three flavours. There is the 'real' section,
+# like ".data". Then there are the per-procedure or per-variable
+# sections, generated by -ffunction-sections and -fdata-sections in GCC,
+# and useful for --gc-sections, which for a variable "foo" might be
+# ".data.foo". Then there are the linkonce sections, for which the linker
+# eliminates duplicates, which are named like ".gnu.linkonce.d.foo".
+# The exact correspondences are:
+#
+# Section Linkonce section
+# .text .gnu.linkonce.t.foo
+# .rodata .gnu.linkonce.r.foo
+# .data .gnu.linkonce.d.foo
+# .bss .gnu.linkonce.b.foo
+# .sdata .gnu.linkonce.s.foo
+# .sbss .gnu.linkonce.sb.foo
+# .sdata2 .gnu.linkonce.s2.foo
+# .sbss2 .gnu.linkonce.sb2.foo
+# .debug_info .gnu.linkonce.wi.foo
+# .tdata .gnu.linkonce.td.foo
+# .tbss .gnu.linkonce.tb.foo
+# .lrodata .gnu.linkonce.lr.foo
+# .ldata .gnu.linkonce.l.foo
+# .lbss .gnu.linkonce.lb.foo
+#
+# Each of these can also have corresponding .rel.* and .rela.* sections.
+
+test -z "$RODATA_NAME" && RODATA_NAME=rodata
+test -z "$SDATA_NAME" && SDATA_NAME=sdata
+test -z "$SBSS_NAME" && SBSS_NAME=sbss
+test -z "$BSS_NAME" && BSS_NAME=bss
+test -z "$ENTRY" && ENTRY=${USER_LABEL_PREFIX}_start
+test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi
+test -z "${ELFSIZE}" && ELFSIZE=32
+test -z "${ALIGNMENT}" && ALIGNMENT="${ELFSIZE} / 8"
+test "$LD_FLAG" = "N" && DATA_ADDR=.
+test -z "${ETEXT_NAME}" && ETEXT_NAME=${USER_LABEL_PREFIX}etext
+test -n "$CREATE_SHLIB$CREATE_PIE" && test -n "$SHLIB_DATA_ADDR" && COMMONPAGESIZE=""
+test -z "$CREATE_SHLIB$CREATE_PIE" && test -n "$DATA_ADDR" && COMMONPAGESIZE=""
+test -n "$RELRO_NOW" && unset SEPARATE_GOTPLT
+test -z "$ATTRS_SECTIONS" && ATTRS_SECTIONS=".gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }"
+DATA_SEGMENT_ALIGN="ALIGN(${SEGMENT_SIZE}) + (. & (${MAXPAGESIZE} - 1))"
+DATA_SEGMENT_RELRO_END=""
+DATA_SEGMENT_END=""
+if test -n "${COMMONPAGESIZE}"; then
+ DATA_SEGMENT_ALIGN="ALIGN (${SEGMENT_SIZE}) - ((${MAXPAGESIZE} - .) & (${MAXPAGESIZE} - 1)); . = DATA_SEGMENT_ALIGN (${MAXPAGESIZE}, ${COMMONPAGESIZE})"
+ DATA_SEGMENT_END=". = DATA_SEGMENT_END (.);"
+ DATA_SEGMENT_RELRO_END=". = DATA_SEGMENT_RELRO_END (${SEPARATE_GOTPLT-0}, .);"
+fi
+if test -z "${INITIAL_READONLY_SECTIONS}${CREATE_SHLIB}"; then
+ INITIAL_READONLY_SECTIONS=".interp ${RELOCATING-0} : { *(.interp) }"
+fi
+if test -z "$PLT"; then
+ IPLT=".iplt ${RELOCATING-0} : { *(.iplt) }"
+ PLT=".plt ${RELOCATING-0} : { *(.plt)${IREL_IN_PLT+ *(.iplt)} }
+ ${IREL_IN_PLT-$IPLT}"
+fi
+test -n "${DATA_PLT-${BSS_PLT-text}}" && TEXT_PLT=yes
+if test -z "$GOT"; then
+ if test -z "$SEPARATE_GOTPLT"; then
+ GOT=".got ${RELOCATING-0} : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }"
+ else
+ GOT=".got ${RELOCATING-0} : { *(.got) *(.igot) }"
+ GOTPLT=".got.plt ${RELOCATING-0} : { *(.got.plt) *(.igot.plt) }"
+ fi
+fi
+REL_IFUNC=".rel.ifunc ${RELOCATING-0} : { *(.rel.ifunc) }"
+RELA_IFUNC=".rela.ifunc ${RELOCATING-0} : { *(.rela.ifunc) }"
+REL_IPLT=".rel.iplt ${RELOCATING-0} :
+ {
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_start = .);}}
+ *(.rel.iplt)
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_end = .);}}
+ }"
+RELA_IPLT=".rela.iplt ${RELOCATING-0} :
+ {
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rela_iplt_start = .);}}
+ *(.rela.iplt)
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rela_iplt_end = .);}}
+ }"
+DYNAMIC=".dynamic ${RELOCATING-0} : { *(.dynamic) }"
+RODATA=".${RODATA_NAME} ${RELOCATING-0} : { *(.${RODATA_NAME}${RELOCATING+ .${RODATA_NAME}.* .gnu.linkonce.r.*}) }"
+DATARELRO=".data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }"
+DISCARDED="/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }"
+if test -z "${NO_SMALL_DATA}"; then
+ SBSS=".${SBSS_NAME} ${RELOCATING-0} :
+ {
+ ${RELOCATING+${SBSS_START_SYMBOLS}}
+ ${CREATE_SHLIB+*(.${SBSS_NAME}2 .${SBSS_NAME}2.* .gnu.linkonce.sb2.*)}
+ *(.dyn${SBSS_NAME})
+ *(.${SBSS_NAME}${RELOCATING+ .${SBSS_NAME}.* .gnu.linkonce.sb.*})
+ *(.scommon)
+ ${RELOCATING+${SBSS_END_SYMBOLS}}
+ }"
+ SBSS2=".${SBSS_NAME}2 ${RELOCATING-0} : { *(.${SBSS_NAME}2${RELOCATING+ .${SBSS_NAME}2.* .gnu.linkonce.sb2.*}) }"
+ SDATA="/* We want the small data sections together, so single-instruction offsets
+ can access them all, and initialized data all before uninitialized, so
+ we can shorten the on-disk segment size. */
+ .${SDATA_NAME} ${RELOCATING-0} :
+ {
+ ${RELOCATING+${SDATA_START_SYMBOLS}}
+ ${CREATE_SHLIB+*(.${SDATA_NAME}2 .${SDATA_NAME}2.* .gnu.linkonce.s2.*)}
+ *(.${SDATA_NAME}${RELOCATING+ .${SDATA_NAME}.* .gnu.linkonce.s.*})
+ }"
+ SDATA2=".${SDATA_NAME}2 ${RELOCATING-0} :
+ {
+ ${RELOCATING+${SDATA2_START_SYMBOLS}}
+ *(.${SDATA_NAME}2${RELOCATING+ .${SDATA_NAME}2.* .gnu.linkonce.s2.*})
+ }"
+ REL_SDATA=".rel.${SDATA_NAME} ${RELOCATING-0} : { *(.rel.${SDATA_NAME}${RELOCATING+ .rel.${SDATA_NAME}.* .rel.gnu.linkonce.s.*}) }
+ .rela.${SDATA_NAME} ${RELOCATING-0} : { *(.rela.${SDATA_NAME}${RELOCATING+ .rela.${SDATA_NAME}.* .rela.gnu.linkonce.s.*}) }"
+ REL_SBSS=".rel.${SBSS_NAME} ${RELOCATING-0} : { *(.rel.${SBSS_NAME}${RELOCATING+ .rel.${SBSS_NAME}.* .rel.gnu.linkonce.sb.*}) }
+ .rela.${SBSS_NAME} ${RELOCATING-0} : { *(.rela.${SBSS_NAME}${RELOCATING+ .rela.${SBSS_NAME}.* .rela.gnu.linkonce.sb.*}) }"
+ REL_SDATA2=".rel.${SDATA_NAME}2 ${RELOCATING-0} : { *(.rel.${SDATA_NAME}2${RELOCATING+ .rel.${SDATA_NAME}2.* .rel.gnu.linkonce.s2.*}) }
+ .rela.${SDATA_NAME}2 ${RELOCATING-0} : { *(.rela.${SDATA_NAME}2${RELOCATING+ .rela.${SDATA_NAME}2.* .rela.gnu.linkonce.s2.*}) }"
+ REL_SBSS2=".rel.${SBSS_NAME}2 ${RELOCATING-0} : { *(.rel.${SBSS_NAME}2${RELOCATING+ .rel.${SBSS_NAME}2.* .rel.gnu.linkonce.sb2.*}) }
+ .rela.${SBSS_NAME}2 ${RELOCATING-0} : { *(.rela.${SBSS_NAME}2${RELOCATING+ .rela.${SBSS_NAME}2.* .rela.gnu.linkonce.sb2.*}) }"
+else
+ NO_SMALL_DATA=" "
+fi
+if test -z "${DATA_GOT}"; then
+ if test -n "${NO_SMALL_DATA}"; then
+ DATA_GOT=" "
+ fi
+fi
+if test -z "${SDATA_GOT}"; then
+ if test -z "${NO_SMALL_DATA}"; then
+ SDATA_GOT=" "
+ fi
+fi
+test -n "$SEPARATE_GOTPLT" && SEPARATE_GOTPLT=" "
+test "${LARGE_SECTIONS}" = "yes" && REL_LARGE="
+ .rel.ldata ${RELOCATING-0} : { *(.rel.ldata${RELOCATING+ .rel.ldata.* .rel.gnu.linkonce.l.*}) }
+ .rela.ldata ${RELOCATING-0} : { *(.rela.ldata${RELOCATING+ .rela.ldata.* .rela.gnu.linkonce.l.*}) }
+ .rel.lbss ${RELOCATING-0} : { *(.rel.lbss${RELOCATING+ .rel.lbss.* .rel.gnu.linkonce.lb.*}) }
+ .rela.lbss ${RELOCATING-0} : { *(.rela.lbss${RELOCATING+ .rela.lbss.* .rela.gnu.linkonce.lb.*}) }
+ .rel.lrodata ${RELOCATING-0} : { *(.rel.lrodata${RELOCATING+ .rel.lrodata.* .rel.gnu.linkonce.lr.*}) }
+ .rela.lrodata ${RELOCATING-0} : { *(.rela.lrodata${RELOCATING+ .rela.lrodata.* .rela.gnu.linkonce.lr.*}) }"
+test "${LARGE_SECTIONS}" = "yes" && OTHER_BSS_SECTIONS="
+ ${OTHER_BSS_SECTIONS}
+ .lbss ${RELOCATING-0} :
+ {
+ *(.dynlbss)
+ *(.lbss${RELOCATING+ .lbss.* .gnu.linkonce.lb.*})
+ *(LARGE_COMMON)
+ }"
+test "${LARGE_SECTIONS}" = "yes" && LARGE_SECTIONS="
+ .lrodata ${RELOCATING-0} ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} :
+ {
+ *(.lrodata${RELOCATING+ .lrodata.* .gnu.linkonce.lr.*})
+ }
+ .ldata ${RELOCATING-0} ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} :
+ {
+ *(.ldata${RELOCATING+ .ldata.* .gnu.linkonce.l.*})
+ ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
+ }"
+INIT_ARRAY=".init_array ${RELOCATING-0} :
+ {
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_start = .);}}
+ KEEP (*(SORT(.init_array.*)))
+ KEEP (*(.init_array))
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_end = .);}}
+ }"
+FINI_ARRAY=".fini_array ${RELOCATING-0} :
+ {
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_start = .);}}
+ KEEP (*(SORT(.fini_array.*)))
+ KEEP (*(.fini_array))
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_end = .);}}
+ }"
+CTOR=".ctors ${CONSTRUCTING-0} :
+ {
+ ${CONSTRUCTING+${CTOR_START}}
+ /* gcc uses crtbegin.o to find the start of
+ the constructors, so we make sure it is
+ first. Because this is a wildcard, it
+ doesn't matter if the user does not
+ actually link against crtbegin.o; the
+ linker won't look for a file to match a
+ wildcard. The wildcard also means that it
+ doesn't matter which directory crtbegin.o
+ is in. */
+
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
+
+ /* We don't want to include the .ctor section from
+ the crtend.o file until after the sorted ctors.
+ The .ctor section from the crtend file contains the
+ end of ctors marker and it must be last */
+
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ ${CONSTRUCTING+${CTOR_END}}
+ }"
+DTOR=".dtors ${CONSTRUCTING-0} :
+ {
+ ${CONSTRUCTING+${DTOR_START}}
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ ${CONSTRUCTING+${DTOR_END}}
+ }"
+STACK=" .stack ${RELOCATING-0}${RELOCATING+${STACK_ADDR}} :
+ {
+ ${RELOCATING+${USER_LABEL_PREFIX}_stack = .;}
+ *(.stack)
+ }"
+
+TEXT_START_ADDR="SEGMENT_START(\"text-segment\", ${TEXT_START_ADDR})"
+SHLIB_TEXT_START_ADDR="SEGMENT_START(\"text-segment\", ${SHLIB_TEXT_START_ADDR:-0})"
+
+# if this is for an embedded system, don't add SIZEOF_HEADERS.
+if [ -z "$EMBEDDED" ]; then
+ test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR} + SIZEOF_HEADERS"
+else
+ test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR}"
+fi
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
+ "${LITTLE_OUTPUT_FORMAT}")
+OUTPUT_ARCH(${OUTPUT_ARCH})
+${RELOCATING+ENTRY(${ENTRY})}
+
+${RELOCATING+${LIB_SEARCH_DIRS}}
+${RELOCATING+${EXECUTABLE_SYMBOLS}}
+${RELOCATING+${INPUT_FILES}}
+${RELOCATING- /* For some reason, the Solaris linker makes bad executables
+ if gld -r is used and the intermediate file has sections starting
+ at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld
+ bug. But for now assigning the zero vmas works. */}
+
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+PROVIDE (__executable_start = ${TEXT_START_ADDR}); . = ${TEXT_BASE_ADDRESS};}}}
+ ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR} + SIZEOF_HEADERS;}}
+ ${CREATE_PIE+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR} + SIZEOF_HEADERS;}}
+ ${INITIAL_READONLY_SECTIONS}
+ .note.gnu.build-id : { *(.note.gnu.build-id) }
+EOF
+
+test -n "${RELOCATING+0}" || unset NON_ALLOC_DYN
+test -z "${NON_ALLOC_DYN}" || TEXT_DYNAMIC=
+cat > ldscripts/dyntmp.$$ <<EOF
+ ${TEXT_DYNAMIC+${DYNAMIC}}
+ .hash ${RELOCATING-0} : { *(.hash) }
+ .gnu.hash ${RELOCATING-0} : { *(.gnu.hash) }
+ .dynsym ${RELOCATING-0} : { *(.dynsym) }
+ .dynstr ${RELOCATING-0} : { *(.dynstr) }
+ .gnu.version ${RELOCATING-0} : { *(.gnu.version) }
+ .gnu.version_d ${RELOCATING-0}: { *(.gnu.version_d) }
+ .gnu.version_r ${RELOCATING-0}: { *(.gnu.version_r) }
+EOF
+
+if [ "x$COMBRELOC" = x ]; then
+ COMBRELOCCAT="cat >> ldscripts/dyntmp.$$"
+else
+ COMBRELOCCAT="cat > $COMBRELOC"
+fi
+eval $COMBRELOCCAT <<EOF
+ ${INITIAL_RELOC_SECTIONS}
+ .rel.init ${RELOCATING-0} : { *(.rel.init) }
+ .rela.init ${RELOCATING-0} : { *(.rela.init) }
+ .rel.text ${RELOCATING-0} : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) }
+ .rela.text ${RELOCATING-0} : { *(.rela.text${RELOCATING+ .rela.text.* .rela.gnu.linkonce.t.*}) }
+ .rel.fini ${RELOCATING-0} : { *(.rel.fini) }
+ .rela.fini ${RELOCATING-0} : { *(.rela.fini) }
+ .rel.${RODATA_NAME} ${RELOCATING-0} : { *(.rel.${RODATA_NAME}${RELOCATING+ .rel.${RODATA_NAME}.* .rel.gnu.linkonce.r.*}) }
+ .rela.${RODATA_NAME} ${RELOCATING-0} : { *(.rela.${RODATA_NAME}${RELOCATING+ .rela.${RODATA_NAME}.* .rela.gnu.linkonce.r.*}) }
+ ${OTHER_READONLY_RELOC_SECTIONS}
+ .rel.data.rel.ro ${RELOCATING-0} : { *(.rel.data.rel.ro${RELOCATING+* .rel.gnu.linkonce.d.rel.ro.*}) }
+ .rela.data.rel.ro ${RELOCATING-0} : { *(.rela.data.rel.ro${RELOCATING+* .rela.gnu.linkonce.d.rel.ro.*}) }
+ .rel.data ${RELOCATING-0} : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) }
+ .rela.data ${RELOCATING-0} : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) }
+ ${OTHER_READWRITE_RELOC_SECTIONS}
+ .rel.tdata ${RELOCATING-0} : { *(.rel.tdata${RELOCATING+ .rel.tdata.* .rel.gnu.linkonce.td.*}) }
+ .rela.tdata ${RELOCATING-0} : { *(.rela.tdata${RELOCATING+ .rela.tdata.* .rela.gnu.linkonce.td.*}) }
+ .rel.tbss ${RELOCATING-0} : { *(.rel.tbss${RELOCATING+ .rel.tbss.* .rel.gnu.linkonce.tb.*}) }
+ .rela.tbss ${RELOCATING-0} : { *(.rela.tbss${RELOCATING+ .rela.tbss.* .rela.gnu.linkonce.tb.*}) }
+ .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) }
+ .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) }
+ .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) }
+ .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) }
+ .rel.got ${RELOCATING-0} : { *(.rel.got) }
+ .rela.got ${RELOCATING-0} : { *(.rela.got) }
+ ${OTHER_GOT_RELOC_SECTIONS}
+ ${REL_SDATA}
+ ${REL_SBSS}
+ ${REL_SDATA2}
+ ${REL_SBSS2}
+ .rel.${BSS_NAME} ${RELOCATING-0} : { *(.rel.${BSS_NAME}${RELOCATING+ .rel.${BSS_NAME}.* .rel.gnu.linkonce.b.*}) }
+ .rela.${BSS_NAME} ${RELOCATING-0} : { *(.rela.${BSS_NAME}${RELOCATING+ .rela.${BSS_NAME}.* .rela.gnu.linkonce.b.*}) }
+ ${REL_LARGE}
+ ${IREL_IN_PLT+$REL_IFUNC}
+ ${IREL_IN_PLT+$RELA_IFUNC}
+ ${IREL_IN_PLT-$REL_IPLT}
+ ${IREL_IN_PLT-$RELA_IPLT}
+EOF
+
+if [ -n "$COMBRELOC" ]; then
+cat >> ldscripts/dyntmp.$$ <<EOF
+ .rel.dyn ${RELOCATING-0} :
+ {
+EOF
+sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rela\./d;s/^.*: { *\(.*\)}$/ \1/' $COMBRELOC >> ldscripts/dyntmp.$$
+cat >> ldscripts/dyntmp.$$ <<EOF
+ }
+ .rela.dyn ${RELOCATING-0} :
+ {
+EOF
+sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rel\./d;s/^.*: { *\(.*\)}/ \1/' $COMBRELOC >> ldscripts/dyntmp.$$
+cat >> ldscripts/dyntmp.$$ <<EOF
+ }
+EOF
+fi
+
+cat >> ldscripts/dyntmp.$$ <<EOF
+ .rel.plt ${RELOCATING-0} :
+ {
+ *(.rel.plt)
+ ${IREL_IN_PLT+${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_start = .);}}}
+ ${IREL_IN_PLT+${RELOCATING+*(.rel.iplt)}}
+ ${IREL_IN_PLT+${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_end = .);}}}
+ }
+ .rela.plt ${RELOCATING-0} :
+ {
+ *(.rela.plt)
+ ${IREL_IN_PLT+${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rela_iplt_start = .);}}}
+ ${IREL_IN_PLT+${RELOCATING+*(.rela.iplt)}}
+ ${IREL_IN_PLT+${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rela_iplt_end = .);}}}
+ }
+ ${OTHER_PLT_RELOC_SECTIONS}
+EOF
+
+if test -z "${NON_ALLOC_DYN}"; then
+ if test -z "${NO_REL_RELOCS}${NO_RELA_RELOCS}"; then
+ cat ldscripts/dyntmp.$$
+ else
+ if test -z "${NO_REL_RELOCS}"; then
+ sed -e '/^[ ]*\.rela\.[^}]*$/,/}/d' -e '/^[ ]*\.rela\./d' ldscripts/dyntmp.$$
+ fi
+ if test -z "${NO_RELA_RELOCS}"; then
+ sed -e '/^[ ]*\.rel\.[^}]*$/,/}/d' -e '/^[ ]*\.rel\./d' ldscripts/dyntmp.$$
+ fi
+ fi
+ rm -f ldscripts/dyntmp.$$
+fi
+
+cat <<EOF
+ .init ${RELOCATING-0} :
+ {
+ ${RELOCATING+${INIT_START}}
+ KEEP (*(.init))
+ ${RELOCATING+${INIT_END}}
+ } =${NOP-0}
+
+ ${TEXT_PLT+${PLT}}
+ ${TINY_READONLY_SECTION}
+ .text ${RELOCATING-0} :
+ {
+ ${RELOCATING+${TEXT_START_SYMBOLS}}
+ ${RELOCATING+*(.text.unlikely .text.*_unlikely)}
+ ${RELOCATING+*(.text.exit .text.exit.*)}
+ ${RELOCATING+*(.text.startup .text.startup.*)}
+ ${RELOCATING+*(.text.hot .text.hot.*)}
+ *(.text .stub${RELOCATING+ .text.* .gnu.linkonce.t.*})
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ ${RELOCATING+${OTHER_TEXT_SECTIONS}}
+ } =${NOP-0}
+ .fini ${RELOCATING-0} :
+ {
+ ${RELOCATING+${FINI_START}}
+ KEEP (*(.fini))
+ ${RELOCATING+${FINI_END}}
+ } =${NOP-0}
+ ${RELOCATING+PROVIDE (__${ETEXT_NAME} = .);}
+ ${RELOCATING+PROVIDE (_${ETEXT_NAME} = .);}
+ ${RELOCATING+PROVIDE (${ETEXT_NAME} = .);}
+ ${WRITABLE_RODATA-${RODATA}}
+ .${RODATA_NAME}1 ${RELOCATING-0} : { *(.${RODATA_NAME}1) }
+ ${CREATE_SHLIB-${SDATA2}}
+ ${CREATE_SHLIB-${SBSS2}}
+ ${OTHER_READONLY_SECTIONS}
+ .eh_frame_hdr : { *(.eh_frame_hdr) }
+ .eh_frame ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.eh_frame)) }
+ .gcc_except_table ${RELOCATING-0} : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+
+ /* Adjust the address for the data segment. We want to adjust up to
+ the same address within the page on the next page up. */
+ ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+. = ${DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}}
+ ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}
+ ${CREATE_PIE+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}
+
+ /* Exception handling */
+ .eh_frame ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.eh_frame)) }
+ .gcc_except_table ${RELOCATING-0} : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+
+ /* Thread Local Storage sections */
+ .tdata ${RELOCATING-0} : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) }
+ .tbss ${RELOCATING-0} : { *(.tbss${RELOCATING+ .tbss.* .gnu.linkonce.tb.*})${RELOCATING+ *(.tcommon)} }
+
+ .preinit_array ${RELOCATING-0} :
+ {
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_start = .);}}
+ KEEP (*(.preinit_array))
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_end = .);}}
+ }
+ ${RELOCATING+${INIT_ARRAY}}
+ ${RELOCATING+${FINI_ARRAY}}
+ ${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}}
+ ${SMALL_DATA_DTOR-${RELOCATING+${DTOR}}}
+ .jcr ${RELOCATING-0} : { KEEP (*(.jcr)) }
+
+ ${RELOCATING+${DATARELRO}}
+ ${OTHER_RELRO_SECTIONS}
+ ${TEXT_DYNAMIC-${DYNAMIC}}
+ ${DATA_GOT+${RELRO_NOW+${GOT}}}
+ ${DATA_GOT+${RELRO_NOW+${GOTPLT}}}
+ ${DATA_GOT+${RELRO_NOW-${SEPARATE_GOTPLT+${GOT}}}}
+ ${RELOCATING+${DATA_SEGMENT_RELRO_END}}
+ ${DATA_GOT+${RELRO_NOW-${SEPARATE_GOTPLT-${GOT}}}}
+ ${DATA_GOT+${RELRO_NOW-${GOTPLT}}}
+
+ ${DATA_PLT+${PLT_BEFORE_GOT-${PLT}}}
+
+ .data ${RELOCATING-0} :
+ {
+ ${RELOCATING+${DATA_START_SYMBOLS}}
+ *(.data${RELOCATING+ .data.* .gnu.linkonce.d.*})
+ ${CONSTRUCTING+SORT(CONSTRUCTORS)}
+ }
+ .data1 ${RELOCATING-0} : { *(.data1) }
+ ${WRITABLE_RODATA+${RODATA}}
+ ${OTHER_READWRITE_SECTIONS}
+ ${SMALL_DATA_CTOR+${RELOCATING+${CTOR}}}
+ ${SMALL_DATA_DTOR+${RELOCATING+${DTOR}}}
+ ${DATA_PLT+${PLT_BEFORE_GOT+${PLT}}}
+ ${SDATA_GOT+${RELOCATING+${OTHER_GOT_SYMBOLS}}}
+ ${SDATA_GOT+${GOT}}
+ ${SDATA_GOT+${OTHER_GOT_SECTIONS}}
+ ${SDATA}
+ ${OTHER_SDATA_SECTIONS}
+ ${RELOCATING+${DATA_END_SYMBOLS-${USER_LABEL_PREFIX}_edata = .; PROVIDE (${USER_LABEL_PREFIX}edata = .);}}
+ ${RELOCATING+${USER_LABEL_PREFIX}__bss_start = .;}
+ ${RELOCATING+${OTHER_BSS_SYMBOLS}}
+ ${SBSS}
+ ${BSS_PLT+${PLT}}
+ .${BSS_NAME} ${RELOCATING-0} :
+ {
+ *(.dyn${BSS_NAME})
+ *(.${BSS_NAME}${RELOCATING+ .${BSS_NAME}.* .gnu.linkonce.b.*})
+ *(COMMON)
+ /* Align here to ensure that the .bss section occupies space up to
+ _end. Align after .bss to ensure correct alignment even if the
+ .bss section disappears because there are no input sections.
+ FIXME: Why do we need it? When there is no .bss section, we don't
+ pad the .data section. */
+ ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
+ }
+ ${OTHER_BSS_SECTIONS}
+ ${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
+ ${RELOCATING+. = ALIGN(${ALIGNMENT});}
+ ${LARGE_SECTIONS}
+ ${RELOCATING+. = ALIGN(${ALIGNMENT});}
+ ${RELOCATING+${OTHER_END_SYMBOLS}}
+ ${RELOCATING+${END_SYMBOLS-${USER_LABEL_PREFIX}_end = .; PROVIDE (${USER_LABEL_PREFIX}end = .);}}
+ ${RELOCATING+${DATA_SEGMENT_END}}
+EOF
+
+if test -n "${NON_ALLOC_DYN}"; then
+ if test -z "${NO_REL_RELOCS}${NO_RELA_RELOCS}"; then
+ cat ldscripts/dyntmp.$$
+ else
+ if test -z "${NO_REL_RELOCS}"; then
+ sed -e '/^[ ]*\.rela\.[^}]*$/,/}/d' -e '/^[ ]*\.rela\./d' ldscripts/dyntmp.$$
+ fi
+ if test -z "${NO_RELA_RELOCS}"; then
+ sed -e '/^[ ]*\.rel\.[^}]*$/,/}/d' -e '/^[ ]*\.rel\./d' ldscripts/dyntmp.$$
+ fi
+ fi
+ rm -f ldscripts/dyntmp.$$
+fi
+
+cat <<EOF
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+
+ .comment 0 : { *(.comment) }
+
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo .zdebug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames .zdebug_sfnames) }
+
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges .zdebug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames .zdebug_pubnames) }
+
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*} .zdebug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev .zdebug_abbrev) }
+ .debug_line 0 : { *(.debug_line .zdebug_line) }
+ .debug_frame 0 : { *(.debug_frame .zdebug_frame) }
+ .debug_str 0 : { *(.debug_str .zdebug_str) }
+ .debug_loc 0 : { *(.debug_loc .zdebug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo .zdebug_macinfo) }
+
+ /* SGI/MIPS DWARF 2 extensions */
+ .debug_weaknames 0 : { *(.debug_weaknames .zdebug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames .zdebug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames .zdebug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames .zdebug_varnames) }
+
+ /* DWARF 3 */
+ .debug_pubtypes 0 : { *(.debug_pubtypes .zdebug_pubtypes) }
+ .debug_ranges 0 : { *(.debug_ranges .zdebug_ranges) }
+
+ ${TINY_DATA_SECTION}
+ ${TINY_BSS_SECTION}
+
+ ${STACK_ADDR+${STACK}}
+ ${ATTRS_SECTIONS}
+ ${OTHER_SECTIONS}
+ ${RELOCATING+${OTHER_SYMBOLS}}
+ ${RELOCATING+${DISCARDED}}
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/elf32cr16.sc b/binutils-2.21/ld/scripttempl/elf32cr16.sc
new file mode 100644
index 0000000..b40bfbd
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/elf32cr16.sc
@@ -0,0 +1,169 @@
+# Linker Script for National Semiconductor's CR16-ELF32.
+
+# The next line should be uncommented if it is desired to link
+# without libstart.o and directly enter main.
+
+# ENTRY=_main
+
+test -z "$ENTRY" && ENTRY=_start
+cat <<EOF
+
+/* Example Linker Script for linking NS CR16 elf32 files. */
+
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+${RELOCATING+ENTRY(${ENTRY})}
+
+/* Define memory regions. */
+MEMORY
+{
+ rom : ORIGIN = 0x2, LENGTH = 3M
+ ram : ORIGIN = 4M, LENGTH = 10M
+}
+
+/* Many sections come in three flavours. There is the 'real' section,
+ like ".data". Then there are the per-procedure or per-variable
+ sections, generated by -ffunction-sections and -fdata-sections in GCC,
+ and useful for --gc-sections, which for a variable "foo" might be
+ ".data.foo". Then there are the linkonce sections, for which the linker
+ eliminates duplicates, which are named like ".gnu.linkonce.d.foo".
+ The exact correspondences are:
+
+ Section Linkonce section
+ .text .gnu.linkonce.t.foo
+ .rdata .gnu.linkonce.r.foo
+ .data .gnu.linkonce.d.foo
+ .bss .gnu.linkonce.b.foo
+ .debug_info .gnu.linkonce.wi.foo */
+
+SECTIONS
+{
+ .init :
+ {
+ __INIT_START = .;
+ KEEP (*(.init))
+ __INIT_END = .;
+ } > rom
+
+ .fini :
+ {
+ __FINI_START = .;
+ KEEP (*(.fini))
+ __FINI_END = .;
+ } > rom
+
+ .jcr :
+ {
+ KEEP (*(.jcr))
+ } > rom
+
+ .text :
+ {
+ __TEXT_START = .;
+ *(.text) *(.text.*) *(.gnu.linkonce.t.*)
+ __TEXT_END = .;
+ } > rom
+
+ .rdata :
+ {
+ __RDATA_START = .;
+ *(.rdata_4) *(.rdata_2) *(.rdata_1) *(.rdata.*) *(.gnu.linkonce.r.*) *(.rodata*)
+ __RDATA_END = .;
+ } > rom
+
+ .ctor ALIGN(4) :
+ {
+ __CTOR_START = .;
+ /* The compiler uses crtbegin.o to find the start
+ of the constructors, so we make sure it is
+ first. Because this is a wildcard, it
+ doesn't matter if the user does not
+ actually link against crtbegin.o; the
+ linker won't look for a file to match a
+ wildcard. The wildcard also means that it
+ doesn't matter which directory crtbegin.o
+ is in. */
+
+ KEEP (*crtbegin*.o(.ctors))
+
+ /* We don't want to include the .ctor section from
+ the crtend.o file until after the sorted ctors.
+ The .ctor section from the crtend file contains the
+ end of ctors marker and it must be last */
+
+ KEEP (*(EXCLUDE_FILE (*crtend*.o) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ __CTOR_END = .;
+ } > rom
+
+ .dtor ALIGN(4) :
+ {
+ __DTOR_START = .;
+ KEEP (*crtbegin*.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend*.o) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ __DTOR_END = .;
+ } > rom
+
+ .data :
+ {
+ __DATA_START = .;
+ *(.data_4) *(.data_2) *(.data_1) *(.data) *(.data.*) *(.gnu.linkonce.d.*)
+ __DATA_END = .;
+ } > ram AT > rom
+
+ .bss (NOLOAD) :
+ {
+ __BSS_START = .;
+ *(.bss_4) *(.bss_2) *(.bss_1) *(.bss) *(COMMON) *(.bss.*) *(.gnu.linkonce.b.*)
+ __BSS_END = .;
+ } > ram
+
+/* You may change the sizes of the following sections to fit the actual
+ size your program requires.
+
+ The heap and stack are aligned to the bus width, as a speed optimization
+ for accessing data located there. */
+
+ .heap (NOLOAD) :
+ {
+ . = ALIGN(4);
+ __HEAP_START = .;
+ . += 0x2000; __HEAP_MAX = .;
+ } > ram
+
+ .stack (NOLOAD) :
+ {
+ . = ALIGN(4);
+ . += 0x6000;
+ __STACK_START = .;
+ } > ram
+
+ .istack (NOLOAD) :
+ {
+ . = ALIGN(4);
+ . += 0x100;
+ __ISTACK_START = .;
+ } > ram
+
+ .comment 0 : { *(.comment) }
+
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+
+ .debug_aranges 0 : { *(.debug_aranges .zdebug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames .zdebug_pubnames) }
+ .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*} .zdebug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev .zdebug_abbrev) }
+ .debug_line 0 : { *(.debug_line .zdebug_line) }
+ .debug_frame 0 : { *(.debug_frame .zdebug_frame) }
+ .debug_str 0 : { *(.debug_str .zdebug_str) }
+ .debug_loc 0 : { *(.debug_loc .zdebug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo .zdebug_macinfo) }
+}
+
+__DATA_IMAGE_START = LOADADDR(.data);
+EOF
diff --git a/binutils-2.21/ld/scripttempl/elf32cr16c.sc b/binutils-2.21/ld/scripttempl/elf32cr16c.sc
new file mode 100644
index 0000000..84fc61c
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/elf32cr16c.sc
@@ -0,0 +1,45 @@
+# Linker Script for National Semiconductor's CR16C-ELF32.
+
+test -z "$ENTRY" && ENTRY=_start
+cat <<EOF
+
+/* Example Linker Script for linking NS CR16C or CR16CPlus
+ elf32 files, which were compiled with either the near data
+ model or the default data model. */
+
+${RELOCATING+ENTRY(${ENTRY})}
+
+MEMORY
+{
+ near_rom : ORIGIN = 0x4, LENGTH = 512K - 4
+ near_ram : ORIGIN = 512K, LENGTH = 512K - 64K
+ rom : ORIGIN = 1M, LENGTH = 3M
+ ram : ORIGIN = 4M, LENGTH = 10M
+}
+
+SECTIONS
+{
+/* The heap is located in near memory, to suit both the near and
+ default data models. The heap and stack are aligned to the bus
+ width, as a speed optimization for accessing data located
+ there. The alignment to 4 bytes is compatible for both the CR16C
+ bus width (2 bytes) and CR16CPlus bus width (4 bytes). */
+
+ .text : { __TEXT_START = .; *(.text) __TEXT_END = .; } > rom
+ .rdata : { __RDATA_START = .; *(.rdata_4) *(.rdata_2) *(.rdata_1) __RDATA_END = .; } > near_rom
+ .ctor ALIGN(4) : { __CTOR_LIST = .; *(.ctors) __CTOR_END = .; } > near_rom
+ .dtor ALIGN(4) : { __DTOR_LIST = .; *(.dtors) __DTOR_END = .; } > near_rom
+ .data : { __DATA_START = .; *(.data_4) *(.data_2) *(.data_1) *(.data) __DATA_END = .; } > ram AT > rom
+ .bss (NOLOAD) : { __BSS_START = .; *(.bss_4) *(.bss_2) *(.bss_1) *(.bss) *(COMMON) __BSS_END = .; } > ram
+ .nrdata : { __NRDATA_START = .; *(.nrdat_4) *(.nrdat_2) *(.nrdat_1) __NRDATA_END = .; } > near_rom
+ .ndata : { __NDATA_START = .; *(.ndata_4) *(.ndata_2) *(.ndata_1) __NDATA_END = .; } > near_ram AT > rom
+ .nbss (NOLOAD) : { __NBSS_START = .; *(.nbss_4) *(.nbss_2) *(.nbss_1) *(.ncommon) __NBSS_END = .; } > near_ram
+ .heap (NOLOAD) : { . = ALIGN(4); __HEAP_START = .; . += 0x2000; __HEAP_MAX = .; } > near_ram
+ .stack (NOLOAD) : { . = ALIGN(4); . += 0x6000; __STACK_START = .; } > ram
+ .istack (NOLOAD) : { . = ALIGN(2); . += 0x100; __ISTACK_START = .; } > ram
+}
+
+__DATA_IMAGE_START = LOADADDR(.data);
+__NDATA_IMAGE_START = LOADADDR(.ndata);
+
+EOF
diff --git a/binutils-2.21/ld/scripttempl/elf32crx.sc b/binutils-2.21/ld/scripttempl/elf32crx.sc
new file mode 100644
index 0000000..e36e27f
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/elf32crx.sc
@@ -0,0 +1,171 @@
+# Linker Script for National Semiconductor's CRX-ELF32.
+
+# The next line should be uncommented if it is desired to link
+# without libstart.o and directly enter main.
+
+# ENTRY=_main
+
+test -z "$ENTRY" && ENTRY=_start
+cat <<EOF
+
+/* Example Linker Script for linking NS CRX elf32 files. */
+
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+${RELOCATING+ENTRY(${ENTRY})}
+
+/* Define memory regions. */
+MEMORY
+{
+ rom : ORIGIN = 0x2, LENGTH = 3M
+ ram : ORIGIN = 4M, LENGTH = 10M
+}
+
+/* Many sections come in three flavours. There is the 'real' section,
+ like ".data". Then there are the per-procedure or per-variable
+ sections, generated by -ffunction-sections and -fdata-sections in GCC,
+ and useful for --gc-sections, which for a variable "foo" might be
+ ".data.foo". Then there are the linkonce sections, for which the linker
+ eliminates duplicates, which are named like ".gnu.linkonce.d.foo".
+ The exact correspondences are:
+
+ Section Linkonce section
+ .text .gnu.linkonce.t.foo
+ .rdata .gnu.linkonce.r.foo
+ .data .gnu.linkonce.d.foo
+ .bss .gnu.linkonce.b.foo
+ .debug_info .gnu.linkonce.wi.foo */
+
+SECTIONS
+{
+ .init :
+ {
+ __INIT_START = .;
+ KEEP (*(.init))
+ __INIT_END = .;
+ } > rom
+
+ .fini :
+ {
+ __FINI_START = .;
+ KEEP (*(.fini))
+ __FINI_END = .;
+ } > rom
+
+ .jcr :
+ {
+ KEEP (*(.jcr))
+ } > rom
+
+ .text :
+ {
+ __TEXT_START = .;
+ *(.text) *(.text.*) *(.gnu.linkonce.t.*)
+ __TEXT_END = .;
+ } > rom
+
+ .rdata :
+ {
+ __RDATA_START = .;
+ *(.rdata_4) *(.rdata_2) *(.rdata_1) *(.rdata.*) *(.gnu.linkonce.r.*) *(.rodata.*)
+ __RDATA_END = .;
+ } > rom
+
+ .ctor ALIGN(4) :
+ {
+ __CTOR_START = .;
+ /* The compiler uses crtbegin.o to find the start
+ of the constructors, so we make sure it is
+ first. Because this is a wildcard, it
+ doesn't matter if the user does not
+ actually link against crtbegin.o; the
+ linker won't look for a file to match a
+ wildcard. The wildcard also means that it
+ doesn't matter which directory crtbegin.o
+ is in. */
+
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
+
+ /* We don't want to include the .ctor section from
+ the crtend.o file until after the sorted ctors.
+ The .ctor section from the crtend file contains the
+ end of ctors marker and it must be last */
+
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ __CTOR_END = .;
+ } > rom
+
+ .dtor ALIGN(4) :
+ {
+ __DTOR_START = .;
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ __DTOR_END = .;
+ } > rom
+
+ .data :
+ {
+ __DATA_START = .;
+ *(.data_4) *(.data_2) *(.data_1) *(.data) *(.data.*) *(.gnu.linkonce.d.*)
+ __DATA_END = .;
+ } > ram AT > rom
+
+ .bss (NOLOAD) :
+ {
+ __BSS_START = .;
+ *(.bss_4) *(.bss_2) *(.bss_1) *(.bss) *(COMMON) *(.bss.*) *(.gnu.linkonce.b.*)
+ __BSS_END = .;
+ } > ram
+
+/* You may change the sizes of the following sections to fit the actual
+ size your program requires.
+
+ The heap and stack are aligned to the bus width, as a speed optimization
+ for accessing data located there. */
+
+ .heap (NOLOAD) :
+ {
+ . = ALIGN(4);
+ __HEAP_START = .;
+ . += 0x2000; __HEAP_MAX = .;
+ } > ram
+
+ .stack (NOLOAD) :
+ {
+ . = ALIGN(4);
+ . += 0x6000;
+ __STACK_START = .;
+ } > ram
+
+ .istack (NOLOAD) :
+ {
+ . = ALIGN(4);
+ . += 0x100;
+ __ISTACK_START = .;
+ } > ram
+
+ .comment 0 : { *(.comment) }
+
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+
+ .debug_aranges 0 : { *(.debug_aranges .zdebug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames .zdebug_pubnames) }
+ .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*} .zdebug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev .zdebug_abbrev) }
+ .debug_line 0 : { *(.debug_line .zdebug_line) }
+ .debug_frame 0 : { *(.debug_frame .zdebug_frame) }
+ .debug_str 0 : { *(.debug_str .zdebug_str) }
+ .debug_loc 0 : { *(.debug_loc .zdebug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo .zdebug_macinfo) }
+}
+
+__DATA_IMAGE_START = LOADADDR(.data);
+EOF
diff --git a/binutils-2.21/ld/scripttempl/elf32msp430.sc b/binutils-2.21/ld/scripttempl/elf32msp430.sc
new file mode 100644
index 0000000..54c35be
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/elf32msp430.sc
@@ -0,0 +1,249 @@
+#!/bin/sh
+
+HEAP_SECTION_MSP430=" "
+HEAP_MEMORY_MSP430=" "
+
+if test ${GOT_HEAP_MSP-0} -ne 0
+then
+HEAP_SECTION_MSP430=".heap ${RELOCATING-0} :
+ {
+ ${RELOCATING+ PROVIDE (__heap_data_start = .) ; }
+ *(.heap*)
+ ${RELOCATING+ PROVIDE (_heap_data_end = .) ; }
+ ${RELOCATING+. = ALIGN(2);}
+ ${RELOCATING+ PROVIDE (__heap_bottom = .) ; }
+ ${RELOCATING+ PROVIDE (__heap_top = ${HEAP_START} + ${HEAP_LENGTH}) ; }
+ } ${RELOCATING+ > heap}"
+HEAP_MEMORY_MSP430="heap(rwx) : ORIGIN = $HEAP_START, LENGTH = $HEAP_LENGTH"
+fi
+
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}","${OUTPUT_FORMAT}","${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+
+MEMORY
+{
+ text (rx) : ORIGIN = $ROM_START, LENGTH = $ROM_SIZE
+ data (rwx) : ORIGIN = $RAM_START, LENGTH = $RAM_SIZE
+ vectors (rw) : ORIGIN = 0xffe0, LENGTH = 0x20
+ bootloader(rx) : ORIGIN = 0x0c00, LENGTH = 1K
+ infomem(rx) : ORIGIN = 0x1000, LENGTH = 256
+ infomemnobits(rx) : ORIGIN = 0x1000, LENGTH = 256
+ ${HEAP_MEMORY_MSP430}
+}
+
+SECTIONS
+{
+ /* Read-only sections, merged into text segment. */
+ ${TEXT_DYNAMIC+${DYNAMIC}}
+ .hash ${RELOCATING-0} : { *(.hash) }
+ .dynsym ${RELOCATING-0} : { *(.dynsym) }
+ .dynstr ${RELOCATING-0} : { *(.dynstr) }
+ .gnu.version ${RELOCATING-0} : { *(.gnu.version) }
+ .gnu.version_d ${RELOCATING-0} : { *(.gnu.version_d) }
+ .gnu.version_r ${RELOCATING-0} : { *(.gnu.version_r) }
+
+ .rel.init ${RELOCATING-0} : { *(.rel.init) }
+ .rela.init ${RELOCATING-0} : { *(.rela.init) }
+ .rel.text ${RELOCATING-0} :
+ {
+ *(.rel.text)
+ ${RELOCATING+*(.rel.text.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.t*)}
+ }
+ .rela.text ${RELOCATING-0} :
+ {
+ *(.rela.text)
+ ${RELOCATING+*(.rela.text.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.t*)}
+ }
+ .rel.fini ${RELOCATING-0} : { *(.rel.fini) }
+ .rela.fini ${RELOCATING-0} : { *(.rela.fini) }
+ .rel.rodata ${RELOCATING-0} :
+ {
+ *(.rel.rodata)
+ ${RELOCATING+*(.rel.rodata.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.r*)}
+ }
+ .rela.rodata ${RELOCATING-0} :
+ {
+ *(.rela.rodata)
+ ${RELOCATING+*(.rela.rodata.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.r*)}
+ }
+ .rel.data ${RELOCATING-0} :
+ {
+ *(.rel.data)
+ ${RELOCATING+*(.rel.data.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.d*)}
+ }
+ .rela.data ${RELOCATING-0} :
+ {
+ *(.rela.data)
+ ${RELOCATING+*(.rela.data.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.d*)}
+ }
+ .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) }
+ .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) }
+ .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) }
+ .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) }
+ .rel.got ${RELOCATING-0} : { *(.rel.got) }
+ .rela.got ${RELOCATING-0} : { *(.rela.got) }
+ .rel.bss ${RELOCATING-0} : { *(.rel.bss) }
+ .rela.bss ${RELOCATING-0} : { *(.rela.bss) }
+ .rel.plt ${RELOCATING-0} : { *(.rel.plt) }
+ .rela.plt ${RELOCATING-0} : { *(.rela.plt) }
+
+ /* Internal text space. */
+ .text :
+ {
+ ${RELOCATING+. = ALIGN(2);}
+ *(.init)
+ *(.init0) /* Start here after reset. */
+ *(.init1)
+ *(.init2) /* Copy data loop */
+ *(.init3)
+ *(.init4) /* Clear bss */
+ *(.init5)
+ *(.init6) /* C++ constructors. */
+ *(.init7)
+ *(.init8)
+ *(.init9) /* Call main(). */
+
+ ${CONSTRUCTING+ __ctors_start = . ; }
+ ${CONSTRUCTING+ *(.ctors) }
+ ${CONSTRUCTING+ __ctors_end = . ; }
+ ${CONSTRUCTING+ __dtors_start = . ; }
+ ${CONSTRUCTING+ *(.dtors) }
+ ${CONSTRUCTING+ __dtors_end = . ; }
+
+ ${RELOCATING+. = ALIGN(2);}
+ *(.text)
+ ${RELOCATING+. = ALIGN(2);}
+ *(.text.*)
+
+ ${RELOCATING+. = ALIGN(2);}
+ *(.fini9) /* */
+ *(.fini8)
+ *(.fini7)
+ *(.fini6) /* C++ destructors. */
+ *(.fini5)
+ *(.fini4)
+ *(.fini3)
+ *(.fini2)
+ *(.fini1)
+ *(.fini0) /* Infinite loop after program termination. */
+ *(.fini)
+
+ _etext = .;
+ } ${RELOCATING+ > text}
+
+ .data ${RELOCATING-0} : ${RELOCATING+AT (ADDR (.text) + SIZEOF (.text))}
+ {
+ ${RELOCATING+ PROVIDE (__data_start = .) ; }
+ ${RELOCATING+. = ALIGN(2);}
+ *(.data)
+ ${RELOCATING+. = ALIGN(2);}
+ *(.gnu.linkonce.d*)
+ ${RELOCATING+. = ALIGN(2);}
+ ${RELOCATING+ _edata = . ; }
+ } ${RELOCATING+ > data}
+
+ /* Bootloader. */
+ .bootloader ${RELOCATING-0} :
+ {
+ ${RELOCATING+ PROVIDE (__boot_start = .) ; }
+ *(.bootloader)
+ ${RELOCATING+. = ALIGN(2);}
+ *(.bootloader.*)
+ } ${RELOCATING+ > bootloader}
+
+ /* Information memory. */
+ .infomem ${RELOCATING-0} :
+ {
+ *(.infomem)
+ ${RELOCATING+. = ALIGN(2);}
+ *(.infomem.*)
+ } ${RELOCATING+ > infomem}
+
+ /* Information memory (not loaded into MPU). */
+ .infomemnobits ${RELOCATING-0} :
+ {
+ *(.infomemnobits)
+ ${RELOCATING+. = ALIGN(2);}
+ *(.infomemnobits.*)
+ } ${RELOCATING+ > infomemnobits}
+
+ .bss ${RELOCATING+ SIZEOF(.data) + ADDR(.data)} :
+ {
+ ${RELOCATING+ PROVIDE (__bss_start = .) ; }
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ PROVIDE (__bss_end = .) ; }
+ ${RELOCATING+ _end = . ; }
+ } ${RELOCATING+ > data}
+
+ .noinit ${RELOCATING+ SIZEOF(.bss) + ADDR(.bss)} :
+ {
+ ${RELOCATING+ PROVIDE (__noinit_start = .) ; }
+ *(.noinit)
+ *(COMMON)
+ ${RELOCATING+ PROVIDE (__noinit_end = .) ; }
+ ${RELOCATING+ _end = . ; }
+ } ${RELOCATING+ > data}
+
+ .vectors ${RELOCATING-0}:
+ {
+ ${RELOCATING+ PROVIDE (__vectors_start = .) ; }
+ *(.vectors*)
+ ${RELOCATING+ _vectors_end = . ; }
+ } ${RELOCATING+ > vectors}
+
+ ${HEAP_SECTION_MSP430}
+
+ /* Stabs for profiling information*/
+ .profiler 0 : { *(.profiler) }
+
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo .zdebug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames .zdebug_sfnames) }
+
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges .zdebug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames .zdebug_pubnames) }
+
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*} .zdebug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev .zdebug_abbrev) }
+ .debug_line 0 : { *(.debug_line .zdebug_line) }
+ .debug_frame 0 : { *(.debug_frame .zdebug_frame) }
+ .debug_str 0 : { *(.debug_str .zdebug_str) }
+ .debug_loc 0 : { *(.debug_loc .zdebug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo .zdebug_macinfo) }
+
+ PROVIDE (__stack = ${STACK}) ;
+ PROVIDE (__data_start_rom = _etext) ;
+ PROVIDE (__data_end_rom = _etext + SIZEOF (.data)) ;
+ PROVIDE (__noinit_start_rom = _etext + SIZEOF (.data)) ;
+ PROVIDE (__noinit_end_rom = _etext + SIZEOF (.data) + SIZEOF (.noinit)) ;
+ PROVIDE (__subdevice_has_heap = ${GOT_HEAP_MSP-0}) ;
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/elf32msp430_3.sc b/binutils-2.21/ld/scripttempl/elf32msp430_3.sc
new file mode 100644
index 0000000..1c44d93
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/elf32msp430_3.sc
@@ -0,0 +1,192 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}","${OUTPUT_FORMAT}","${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+
+MEMORY
+{
+ text (rx) : ORIGIN = $ROM_START, LENGTH = $ROM_SIZE
+ data (rwx) : ORIGIN = $RAM_START, LENGTH = $RAM_SIZE
+ vectors (rw) : ORIGIN = 0xffe0, LENGTH = 0x20
+}
+
+SECTIONS
+{
+ /* Read-only sections, merged into text segment. */
+ ${TEXT_DYNAMIC+${DYNAMIC}}
+ .hash ${RELOCATING-0} : { *(.hash) }
+ .dynsym ${RELOCATING-0} : { *(.dynsym) }
+ .dynstr ${RELOCATING-0} : { *(.dynstr) }
+ .gnu.version ${RELOCATING-0} : { *(.gnu.version) }
+ .gnu.version_d ${RELOCATING-0} : { *(.gnu.version_d) }
+ .gnu.version_r ${RELOCATING-0} : { *(.gnu.version_r) }
+
+ .rel.init ${RELOCATING-0} : { *(.rel.init) }
+ .rela.init ${RELOCATING-0} : { *(.rela.init) }
+ .rel.text ${RELOCATING-0} :
+ {
+ *(.rel.text)
+ ${RELOCATING+*(.rel.text.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.t*)}
+ }
+ .rela.text ${RELOCATING-0} :
+ {
+ *(.rela.text)
+ ${RELOCATING+*(.rela.text.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.t*)}
+ }
+ .rel.fini ${RELOCATING-0} : { *(.rel.fini) }
+ .rela.fini ${RELOCATING-0} : { *(.rela.fini) }
+ .rel.rodata ${RELOCATING-0} :
+ {
+ *(.rel.rodata)
+ ${RELOCATING+*(.rel.rodata.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.r*)}
+ }
+ .rela.rodata ${RELOCATING-0} :
+ {
+ *(.rela.rodata)
+ ${RELOCATING+*(.rela.rodata.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.r*)}
+ }
+ .rel.data ${RELOCATING-0} :
+ {
+ *(.rel.data)
+ ${RELOCATING+*(.rel.data.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.d*)}
+ }
+ .rela.data ${RELOCATING-0} :
+ {
+ *(.rela.data)
+ ${RELOCATING+*(.rela.data.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.d*)}
+ }
+ .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) }
+ .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) }
+ .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) }
+ .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) }
+ .rel.got ${RELOCATING-0} : { *(.rel.got) }
+ .rela.got ${RELOCATING-0} : { *(.rela.got) }
+ .rel.bss ${RELOCATING-0} : { *(.rel.bss) }
+ .rela.bss ${RELOCATING-0} : { *(.rela.bss) }
+ .rel.plt ${RELOCATING-0} : { *(.rel.plt) }
+ .rela.plt ${RELOCATING-0} : { *(.rela.plt) }
+
+ /* Internal text space. */
+ .text :
+ {
+ ${RELOCATING+. = ALIGN(2);}
+ *(.init)
+ *(.init0) /* Start here after reset. */
+ *(.init1)
+ *(.init2)
+ *(.init3)
+ *(.init4)
+ *(.init5)
+ *(.init6) /* C++ constructors. */
+ *(.init7)
+ *(.init8)
+ *(.init9) /* Call main(). */
+
+ ${CONSTRUCTING+ __ctors_start = . ; }
+ ${CONSTRUCTING+ *(.ctors) }
+ ${CONSTRUCTING+ __ctors_end = . ; }
+ ${CONSTRUCTING+ __dtors_start = . ; }
+ ${CONSTRUCTING+ *(.dtors) }
+ ${CONSTRUCTING+ __dtors_end = . ; }
+
+ ${RELOCATING+. = ALIGN(2);}
+ *(.text)
+ ${RELOCATING+. = ALIGN(2);}
+ *(.text.*)
+
+ ${RELOCATING+. = ALIGN(2);}
+ *(.fini9)
+ *(.fini8)
+ *(.fini7)
+ *(.fini6) /* C++ destructors. */
+ *(.fini5)
+ *(.fini4)
+ *(.fini3)
+ *(.fini2)
+ *(.fini1)
+ *(.fini0) /* Infinite loop after program termination. */
+ *(.fini)
+
+ ${RELOCATING+ _etext = . ; }
+ } ${RELOCATING+ > text}
+
+ .data ${RELOCATING-0} : ${RELOCATING+AT (ADDR (.text) + SIZEOF (.text))}
+ {
+ ${RELOCATING+ PROVIDE (__data_start = .) ; }
+ *(.data)
+ *(.gnu.linkonce.d*)
+ ${RELOCATING+. = ALIGN(2);}
+ ${RELOCATING+ _edata = . ; }
+ } ${RELOCATING+ > data}
+
+ .bss ${RELOCATING+ SIZEOF(.data) + ADDR(.data)} :
+ {
+ ${RELOCATING+ PROVIDE (__bss_start = .) ; }
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ PROVIDE (__bss_end = .) ; }
+ ${RELOCATING+ _end = . ; }
+ } ${RELOCATING+ > data}
+
+ .noinit ${RELOCATING+ SIZEOF(.bss) + ADDR(.bss)} :
+ {
+ ${RELOCATING+ PROVIDE (__noinit_start = .) ; }
+ *(.noinit)
+ *(COMMON)
+ ${RELOCATING+ PROVIDE (__noinit_end = .) ; }
+ ${RELOCATING+ _end = . ; }
+ } ${RELOCATING+ > data}
+
+ .vectors ${RELOCATING-0}:
+ {
+ ${RELOCATING+ PROVIDE (__vectors_start = .) ; }
+ *(.vectors*)
+ ${RELOCATING+ _vectors_end = . ; }
+ } ${RELOCATING+ > vectors}
+
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo .zdebug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames .zdebug_sfnames) }
+
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges .zdebug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames .zdebug_pubnames) }
+
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*} .zdebug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev .zdebug_abbrev) }
+ .debug_line 0 : { *(.debug_line .zdebug_line) }
+ .debug_frame 0 : { *(.debug_frame .zdebug_frame) }
+ .debug_str 0 : { *(.debug_str .zdebug_str) }
+ .debug_loc 0 : { *(.debug_loc .zdebug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo .zdebug_macinfo) }
+
+ PROVIDE (__stack = ${STACK}) ;
+ PROVIDE (__data_start_rom = _etext) ;
+ PROVIDE (__data_end_rom = _etext + SIZEOF (.data)) ;
+ PROVIDE (__noinit_start_rom = _etext + SIZEOF (.data)) ;
+ PROVIDE (__noinit_end_rom = _etext + SIZEOF (.data) + SIZEOF (.noinit)) ;
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/elf32sh-symbian.sc b/binutils-2.21/ld/scripttempl/elf32sh-symbian.sc
new file mode 100644
index 0000000..b8fbcbc
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/elf32sh-symbian.sc
@@ -0,0 +1,387 @@
+#
+# Unusual variables checked by this code:
+# NOP - four byte opcode for no-op (defaults to 0)
+# DATA_ADDR - if end-of-text-plus-one-page isn't right for data start
+# INITIAL_READONLY_SECTIONS - at start of text segment
+# OTHER_READONLY_SECTIONS - other than .text .init .rodata ...
+# (e.g., .PARISC.milli)
+# OTHER_TEXT_SECTIONS - these get put in .text when relocating
+# OTHER_READWRITE_SECTIONS - other than .data .bss .ctors .sdata ...
+# (e.g., .PARISC.global)
+# ATTRS_SECTIONS - at the end
+# OTHER_SECTIONS - at the end
+# EXECUTABLE_SYMBOLS - symbols that must be defined for an
+# executable (e.g., _DYNAMIC_LINK)
+# TEXT_START_SYMBOLS - symbols that appear at the start of the
+# .text section.
+# DATA_START_SYMBOLS - symbols that appear at the start of the
+# .data section.
+# OTHER_GOT_SYMBOLS - symbols defined just before .got.
+# OTHER_GOT_SECTIONS - sections just after .got.
+# OTHER_SDATA_SECTIONS - sections just after .sdata.
+# OTHER_BSS_SYMBOLS - symbols that appear at the start of the
+# .bss section besides __bss_start.
+# DATA_PLT - .plt should be in data segment, not text segment.
+# BSS_PLT - .plt should be in bss segment
+# TEXT_DYNAMIC - .dynamic in text segment, not data segment.
+# EMBEDDED - whether this is for an embedded system.
+# SHLIB_TEXT_START_ADDR - if set, add to SIZEOF_HEADERS to set
+# start address of shared library.
+# INPUT_FILES - INPUT command of files to always include
+# WRITABLE_RODATA - if set, the .rodata section should be writable
+# INIT_START, INIT_END - statements just before and just after
+# combination of .init sections.
+# FINI_START, FINI_END - statements just before and just after
+# combination of .fini sections.
+# STACK_ADDR - start of a .stack section.
+# OTHER_SYMBOLS - symbols to place right at the end of the script.
+#
+# When adding sections, do note that the names of some sections are used
+# when specifying the start address of the next.
+#
+
+# Many sections come in three flavours. There is the 'real' section,
+# like ".data". Then there are the per-procedure or per-variable
+# sections, generated by -ffunction-sections and -fdata-sections in GCC,
+# and useful for --gc-sections, which for a variable "foo" might be
+# ".data.foo". Then there are the linkonce sections, for which the linker
+# eliminates duplicates, which are named like ".gnu.linkonce.d.foo".
+# The exact correspondences are:
+#
+# Section Linkonce section
+# .text .gnu.linkonce.t.foo
+# .rodata .gnu.linkonce.r.foo
+# .data .gnu.linkonce.d.foo
+# .bss .gnu.linkonce.b.foo
+# .sdata .gnu.linkonce.s.foo
+# .sbss .gnu.linkonce.sb.foo
+# .sdata2 .gnu.linkonce.s2.foo
+# .sbss2 .gnu.linkonce.sb2.foo
+# .debug_info .gnu.linkonce.wi.foo
+# .tdata .gnu.linkonce.td.foo
+# .tbss .gnu.linkonce.tb.foo
+#
+# Each of these can also have corresponding .rel.* and .rela.* sections.
+
+test -z "$ENTRY" && ENTRY=_start
+test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi
+test -z "${ELFSIZE}" && ELFSIZE=32
+test -z "${ALIGNMENT}" && ALIGNMENT="${ELFSIZE} / 8"
+test "$LD_FLAG" = "N" && DATA_ADDR=.
+test -n "$CREATE_SHLIB$CREATE_PIE" && test -n "$SHLIB_DATA_ADDR" && COMMONPAGESIZE=""
+test -z "$CREATE_SHLIB$CREATE_PIE" && test -n "$DATA_ADDR" && COMMONPAGESIZE=""
+test -z "$ATTRS_SECTIONS" && ATTRS_SECTIONS=".gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }"
+DATA_SEGMENT_ALIGN="ALIGN(${SEGMENT_SIZE}) + (. & (${MAXPAGESIZE} - 1))"
+DATA_SEGMENT_END=""
+if test -n "${COMMONPAGESIZE}"; then
+ DATA_SEGMENT_ALIGN="ALIGN (${SEGMENT_SIZE}) - ((${MAXPAGESIZE} - .) & (${MAXPAGESIZE} - 1)); . = DATA_SEGMENT_ALIGN (${MAXPAGESIZE}, ${COMMONPAGESIZE})"
+ DATA_SEGMENT_END=". = DATA_SEGMENT_END (.);"
+fi
+ INTERP=".interp ALIGN(4) : { *(.interp) }"
+ PLT=".plt : { *(.plt) } :dynamic :dyn"
+DYNAMIC=".dynamic : { *(.dynamic) } :dynamic :dyn"
+ RODATA=".rodata ALIGN(4) : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }"
+DISCARDED="/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.directive) *(.gnu.lto_*) }"
+test -z "$GOT" && GOT=".got ${RELOCATING-0} : { *(.got.plt) *(.got) } :dynamic :dyn"
+INIT_ARRAY=".init_array ${RELOCATING-0} :
+ {
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__init_array_start = .);}}
+ KEEP (*(SORT(.init_array.*)))
+ KEEP (*(.init_array))
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__init_array_end = .);}}
+ }"
+FINI_ARRAY=".fini_array ${RELOCATING-0} :
+ {
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_start = .);}}
+ KEEP (*(SORT(.fini_array.*)))
+ KEEP (*(.fini_array))
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_end = .);}}
+ }"
+CTOR=".ctors ALIGN(4) :
+ {
+ ${CONSTRUCTING+${CTOR_START}}
+ /* gcc uses crtbegin.o to find the start of
+ the constructors, so we make sure it is
+ first. Because this is a wildcard, it
+ doesn't matter if the user does not
+ actually link against crtbegin.o; the
+ linker won't look for a file to match a
+ wildcard. The wildcard also means that it
+ doesn't matter which directory crtbegin.o
+ is in. */
+
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
+
+ /* We don't want to include the .ctor section from
+ the crtend.o file until after the sorted ctors.
+ The .ctor section from the crtend file contains the
+ end of ctors marker and it must be last */
+
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ ${CONSTRUCTING+${CTOR_END}}
+ } :text"
+DTOR=".dtors ALIGN(4) :
+ {
+ ${CONSTRUCTING+${DTOR_START}}
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ ${CONSTRUCTING+${DTOR_END}}
+ } :text"
+STACK=" .stack ${RELOCATING-0}${RELOCATING+${STACK_ADDR}} :
+ {
+ ${RELOCATING+_stack = .;}
+ *(.stack)
+ } :data"
+
+# if this is for an embedded system, don't add SIZEOF_HEADERS.
+if [ -z "$EMBEDDED" ]; then
+ test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR} + SIZEOF_HEADERS"
+else
+ test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR}"
+fi
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
+ "${LITTLE_OUTPUT_FORMAT}")
+OUTPUT_ARCH(${OUTPUT_ARCH})
+${RELOCATING+ENTRY(${ENTRY})}
+
+${RELOCATING+${LIB_SEARCH_DIRS}}
+${RELOCATING+/* Do we need any of these for elf?
+ __DYNAMIC = 0; ${STACKZERO+${STACKZERO}} ${SHLIB_PATH+${SHLIB_PATH}} */}
+${RELOCATING+${EXECUTABLE_SYMBOLS}}
+${RELOCATING+${INPUT_FILES}}
+${RELOCATING- /* For some reason, the Solaris linker makes bad executables
+ if gld -r is used and the intermediate file has sections starting
+ at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld
+ bug. But for now assigning the zero vmas works. */}
+
+PHDRS
+{
+ headers PT_PHDR PHDRS ;
+ text PT_LOAD ;
+ data PT_LOAD ;
+ dyn PT_LOAD FLAGS (0) ;
+ dynamic PT_DYNAMIC ;
+}
+
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+. = ${TEXT_BASE_ADDRESS};}}}
+ ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR:-0};}}
+ ${CREATE_PIE+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR:-0};}}
+ ${CREATE_SHLIB-${INTERP}}
+
+ ${INITIAL_READONLY_SECTIONS}
+
+ .init ALIGN(4) :
+ {
+ ${RELOCATING+${INIT_START}}
+ KEEP (*(.init))
+ ${RELOCATING+${INIT_END}}
+ } :text =${NOP-0}
+
+ .text ALIGN(4) :
+ {
+ ${RELOCATING+${TEXT_START_SYMBOLS}}
+ *(.text .stub${RELOCATING+ .text.* .gnu.linkonce.t.*})
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ ${RELOCATING+${OTHER_TEXT_SECTIONS}}
+ } =${NOP-0}
+
+ ${RELOCATING+${CTOR}}
+ ${RELOCATING+${DTOR}}
+
+ .fini ALIGN(4) :
+ {
+ ${RELOCATING+${FINI_START}}
+ KEEP (*(.fini))
+ ${RELOCATING+${FINI_END}}
+ } =${NOP-0}
+
+ ${RELOCATING+PROVIDE (__etext = .);}
+ ${RELOCATING+PROVIDE (_etext = .);}
+ ${RELOCATING+PROVIDE (etext = .);}
+
+ ${WRITABLE_RODATA-${RODATA}}
+ .rodata1 ALIGN(4) : { *(.rodata1) }
+
+ ExportTable ALIGN(4) : { KEEP (*(ExportTable)) }
+ .eh_frame_hdr ALIGN(4) : { *(.eh_frame_hdr) } :text
+
+ /* Adjust the address for the data segment. We want to adjust up to
+ the same address within the page on the next page up. */
+ . = ALIGN(128) + (. & (128 - 1));
+ .preinit_array ${RELOCATING-0} :
+ {
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__preinit_array_start = .);}}
+ KEEP (*(.preinit_array))
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__preinit_array_end = .);}}
+ }
+ ${RELOCATING+${INIT_ARRAY}}
+ ${RELOCATING+${FINI_ARRAY}}
+
+ ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+. = ${DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}}
+ ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}
+ ${CREATE_PIE+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}
+
+ .data ALIGN(4) :
+ {
+ ${RELOCATING+${DATA_START_SYMBOLS}}
+ *(.data${RELOCATING+ .data.* .gnu.linkonce.d.*})
+ ${CONSTRUCTING+SORT(CONSTRUCTORS)}
+ } :data
+
+ .data1 ALIGN(4) : { *(.data1) } :data
+ .tdata ALIGN(4) : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) } :data
+ .tbss ALIGN(4) : { *(.tbss${RELOCATING+ .tbss.* .gnu.linkonce.tb.*})${RELOCATING+ *(.tcommon)} } :data
+ .eh_frame ALIGN(4) : { KEEP (*(.eh_frame)) } :data
+ .gcc_except_table ALIGN(4) : { *(.gcc_except_table) } :data
+ ${WRITABLE_RODATA+${RODATA}}
+ ${OTHER_READWRITE_SECTIONS}
+ ${SDATA}
+ ${OTHER_SDATA_SECTIONS}
+ ${RELOCATING+_edata = .;}
+ ${RELOCATING+PROVIDE (edata = .);}
+ ${RELOCATING+__bss_start = .;}
+ ${RELOCATING+${OTHER_BSS_SYMBOLS}}
+ ${BSS_PLT+${PLT}}
+ .bss ALIGN(4) :
+ {
+ *(.dynbss)
+ *(.bss${RELOCATING+ .bss.* .gnu.linkonce.b.*})
+ *(COMMON)
+ /* Align here to ensure that the .bss section occupies space up to
+ _end. Align after .bss to ensure correct alignment even if the
+ .bss section disappears because there are no input sections. */
+ ${RELOCATING+. = ALIGN(${ALIGNMENT});}
+ } :data
+ ${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
+ ${RELOCATING+. = ALIGN(${ALIGNMENT});}
+ ${RELOCATING+${OTHER_END_SYMBOLS}}
+ ${RELOCATING+_end = .;}
+ ${RELOCATING+PROVIDE (end = .);}
+ ${RELOCATING+${DATA_SEGMENT_END}}
+
+ ${TEXT_DYNAMIC-${DYNAMIC}}
+ ${TEXT_DYNAMIC+${DYNAMIC}}
+ .hash ${RELOCATING-0} : { *(.hash) } :dynamic :dyn
+ .dynsym ${RELOCATING-0} : { *(.dynsym) } :dynamic :dyn
+ .dynstr ${RELOCATING-0} : { *(.dynstr) } :dynamic :dyn
+ ${DATA_PLT-${BSS_PLT-${PLT}}}
+ .got.plt : { *(.got.plt) } :dynamic :dyn
+ .gnu.version ${RELOCATING-0} : { *(.gnu.version) }
+ .gnu.version_d ${RELOCATING-0}: { *(.gnu.version_d) }
+ .gnu.version_r ${RELOCATING-0}: { *(.gnu.version_r) }
+EOF
+if [ "x$COMBRELOC" = x ]; then
+ COMBRELOCCAT=cat
+else
+ COMBRELOCCAT="cat > $COMBRELOC"
+fi
+eval $COMBRELOCCAT <<EOF
+ .rel.init ${RELOCATING-0} : { *(.rel.init) }
+ .rela.init ${RELOCATING-0} : { *(.rela.init) }
+ .rel.text ${RELOCATING-0} : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) }
+ .rela.text ${RELOCATING-0} : { *(.rela.text${RELOCATING+ .rela.text.* .rela.gnu.linkonce.t.*}) }
+ .rel.fini ${RELOCATING-0} : { *(.rel.fini) }
+ .rela.fini ${RELOCATING-0} : { *(.rela.fini) }
+ .rel.rodata ${RELOCATING-0} : { *(.rel.rodata${RELOCATING+ .rel.rodata.* .rel.gnu.linkonce.r.*}) }
+ .rela.rodata ${RELOCATING-0} : { *(.rela.rodata${RELOCATING+ .rela.rodata.* .rela.gnu.linkonce.r.*}) }
+ ${OTHER_READONLY_RELOC_SECTIONS}
+ .rel.data ${RELOCATING-0} : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) }
+ .rela.data ${RELOCATING-0} : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) }
+ .rel.tdata ${RELOCATING-0} : { *(.rel.tdata${RELOCATING+ .rel.tdata.* .rel.gnu.linkonce.td.*}) }
+ .rela.tdata ${RELOCATING-0} : { *(.rela.tdata${RELOCATING+ .rela.tdata.* .rela.gnu.linkonce.td.*}) }
+ .rel.tbss ${RELOCATING-0} : { *(.rel.tbss${RELOCATING+ .rel.tbss.* .rel.gnu.linkonce.tb.*}) }
+ .rela.tbss ${RELOCATING-0} : { *(.rela.tbss${RELOCATING+ .rela.tbss.* .rela.gnu.linkonce.tb.*}) }
+ .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) }
+ .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) }
+ .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) }
+ .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) }
+ .rel.got ${RELOCATING-0} : { *(.rel.got) }
+ .rela.got ${RELOCATING-0} : { *(.rela.got) }
+ ${OTHER_GOT_RELOC_SECTIONS}
+ .rel.bss ${RELOCATING-0} : { *(.rel.bss${RELOCATING+ .rel.bss.* .rel.gnu.linkonce.b.*}) }
+ .rela.bss ${RELOCATING-0} : { *(.rela.bss${RELOCATING+ .rela.bss.* .rela.gnu.linkonce.b.*}) }
+EOF
+if [ -n "$COMBRELOC" ]; then
+cat <<EOF
+ .rel.dyn ${RELOCATING-0} :
+ {
+EOF
+sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rela\./d;s/^.*: { *\(.*\)}$/ \1/' $COMBRELOC
+cat <<EOF
+ }
+ .rela.dyn ${RELOCATING-0} :
+ {
+EOF
+sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rel\./d;s/^.*: { *\(.*\)}/ \1/' $COMBRELOC
+cat <<EOF
+ }
+EOF
+fi
+cat <<EOF
+ .rel.plt ${RELOCATING-0} : { *(.rel.plt) }
+ .rela.plt ${RELOCATING-0} : { *(.rela.plt) }
+ ${OTHER_PLT_RELOC_SECTIONS}
+
+
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+
+ .comment 0 : { *(.comment) }
+
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo .zdebug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames .zdebug_sfnames) }
+
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges .zdebug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames .zdebug_pubnames) }
+
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*} .zdebug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev .zdebug_abbrev) }
+ .debug_line 0 : { *(.debug_line .zdebug_line) }
+ .debug_frame 0 : { *(.debug_frame .zdebug_frame) }
+ .debug_str 0 : { *(.debug_str .zdebug_str) }
+ .debug_loc 0 : { *(.debug_loc .zdebug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo .zdebug_macinfo) }
+
+ /* SGI/MIPS DWARF 2 extensions */
+ .debug_weaknames 0 : { *(.debug_weaknames .zdebug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames .zdebug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames .zdebug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames .zdebug_varnames) }
+
+ ${STACK_ADDR+${STACK}}
+ ${ATTRS_SECTIONS}
+ ${OTHER_SECTIONS}
+ ${RELOCATING+${OTHER_SYMBOLS}}
+ ${RELOCATING+${DISCARDED}}
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/elf32xc16x.sc b/binutils-2.21/ld/scripttempl/elf32xc16x.sc
new file mode 100644
index 0000000..cb72508
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/elf32xc16x.sc
@@ -0,0 +1,61 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+${RELOCATING+ENTRY ("_start")}
+MEMORY
+{
+
+ vectarea : o =0x00000, l = 0x0300
+
+ introm : o = 0x00400, l = 0x16000
+ /* The stack starts at the top of main ram. */
+
+ dram : o = 0x8000 , l = 0xffff
+ /* At the very top of the address space is the 8-bit area. */
+
+ ldata : o =0x4000 ,l = 0x0200
+}
+
+SECTIONS
+{
+.init :
+ {
+ *(.init)
+ } ${RELOCATING+ >introm}
+
+.text :
+ {
+ *(.rodata)
+ *(.text.*)
+ *(.text)
+ ${RELOCATING+ _etext = . ; }
+ } ${RELOCATING+ > introm}
+.data :
+ {
+ *(.data)
+ *(.data.*)
+
+ ${RELOCATING+ _edata = . ; }
+ } ${RELOCATING+ > dram}
+
+.bss :
+ {
+ ${RELOCATING+ _bss_start = . ;}
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ _end = . ; }
+ } ${RELOCATING+ > dram}
+
+ .ldata :
+ {
+ *(.ldata)
+ } ${RELOCATING+ > ldata}
+
+
+ .vects :
+ {
+ *(.vects)
+ } ${RELOCATING+ > vectarea}
+
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/elf32xc16xl.sc b/binutils-2.21/ld/scripttempl/elf32xc16xl.sc
new file mode 100644
index 0000000..3565ece
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/elf32xc16xl.sc
@@ -0,0 +1,64 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+${RELOCATING+ENTRY ("_start")}
+MEMORY
+{
+ vectarea : o =0xc00000, l = 0x0300
+
+ introm : o = 0xc00300, l = 0x16000
+ /* The stack starts at the top of main ram. */
+
+ dram : o = 0x8000 , l = 0xffff
+ /* At the very top of the address space is the 8-bit area. */
+
+ ldata : o =0x4000 ,l = 0x0200
+}
+SECTIONS
+{
+/*.vects :
+ {
+ *(.vects)
+ } ${RELOCATING+ > vectarea} */
+.init :
+ {
+ *(.init)
+ } ${RELOCATING+ >introm}
+
+.text :
+ {
+ *(.rodata)
+ *(.text.*)
+ *(.text)
+ ${RELOCATING+ _etext = . ; }
+ } ${RELOCATING+ > introm}
+.data :
+ {
+ *(.data)
+ *(.data.*)
+
+ ${RELOCATING+ _edata = . ; }
+ } ${RELOCATING+ > dram}
+
+.bss :
+ {
+ ${RELOCATING+ _bss_start = . ;}
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ _end = . ; }
+ } ${RELOCATING+ > dram}
+
+ .ldata :
+ {
+ *(.ldata)
+ } ${RELOCATING+ > ldata}
+
+
+ .vects :
+ {
+ *(.vects)
+ } ${RELOCATING+ > vectarea}
+
+
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/elf32xc16xs.sc b/binutils-2.21/ld/scripttempl/elf32xc16xs.sc
new file mode 100644
index 0000000..3565ece
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/elf32xc16xs.sc
@@ -0,0 +1,64 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+${RELOCATING+ENTRY ("_start")}
+MEMORY
+{
+ vectarea : o =0xc00000, l = 0x0300
+
+ introm : o = 0xc00300, l = 0x16000
+ /* The stack starts at the top of main ram. */
+
+ dram : o = 0x8000 , l = 0xffff
+ /* At the very top of the address space is the 8-bit area. */
+
+ ldata : o =0x4000 ,l = 0x0200
+}
+SECTIONS
+{
+/*.vects :
+ {
+ *(.vects)
+ } ${RELOCATING+ > vectarea} */
+.init :
+ {
+ *(.init)
+ } ${RELOCATING+ >introm}
+
+.text :
+ {
+ *(.rodata)
+ *(.text.*)
+ *(.text)
+ ${RELOCATING+ _etext = . ; }
+ } ${RELOCATING+ > introm}
+.data :
+ {
+ *(.data)
+ *(.data.*)
+
+ ${RELOCATING+ _edata = . ; }
+ } ${RELOCATING+ > dram}
+
+.bss :
+ {
+ ${RELOCATING+ _bss_start = . ;}
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ _end = . ; }
+ } ${RELOCATING+ > dram}
+
+ .ldata :
+ {
+ *(.ldata)
+ } ${RELOCATING+ > ldata}
+
+
+ .vects :
+ {
+ *(.vects)
+ } ${RELOCATING+ > vectarea}
+
+
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/elf64hppa.sc b/binutils-2.21/ld/scripttempl/elf64hppa.sc
new file mode 100644
index 0000000..5cbf212
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/elf64hppa.sc
@@ -0,0 +1,576 @@
+#
+# Unusual variables checked by this code:
+# NOP - four byte opcode for no-op (defaults to 0)
+# NO_SMALL_DATA - no .sbss/.sbss2/.sdata/.sdata2 sections if not
+# empty.
+# SMALL_DATA_CTOR - .ctors contains small data.
+# SMALL_DATA_DTOR - .dtors contains small data.
+# DATA_ADDR - if end-of-text-plus-one-page isn't right for data start
+# INITIAL_READONLY_SECTIONS - at start of text segment
+# OTHER_READONLY_SECTIONS - other than .text .init .rodata ...
+# (e.g., .PARISC.milli)
+# OTHER_TEXT_SECTIONS - these get put in .text when relocating
+# OTHER_READWRITE_SECTIONS - other than .data .bss .ctors .sdata ...
+# (e.g., .PARISC.global)
+# OTHER_RELRO_SECTIONS - other than .data.rel.ro ...
+# (e.g. PPC32 .fixup, .got[12])
+# OTHER_BSS_SECTIONS - other than .bss .sbss ...
+# ATTRS_SECTIONS - at the end
+# OTHER_SECTIONS - at the end
+# EXECUTABLE_SYMBOLS - symbols that must be defined for an
+# executable (e.g., _DYNAMIC_LINK)
+# TEXT_START_ADDR - the first byte of the text segment, after any
+# headers.
+# TEXT_BASE_ADDRESS - the first byte of the text segment.
+# TEXT_START_SYMBOLS - symbols that appear at the start of the
+# .text section.
+# DATA_START_SYMBOLS - symbols that appear at the start of the
+# .data section.
+# DATA_END_SYMBOLS - symbols that appear at the end of the
+# writeable data sections.
+# OTHER_GOT_SYMBOLS - symbols defined just before .got.
+# OTHER_GOT_SECTIONS - sections just after .got.
+# OTHER_SDATA_SECTIONS - sections just after .sdata.
+# OTHER_BSS_SYMBOLS - symbols that appear at the start of the
+# .bss section besides __bss_start.
+# DATA_PLT - .plt should be in data segment, not text segment.
+# PLT_BEFORE_GOT - .plt just before .got when .plt is in data segement.
+# BSS_PLT - .plt should be in bss segment
+# NO_REL_RELOCS - Don't include .rel.* sections in script
+# NO_RELA_RELOCS - Don't include .rela.* sections in script
+# NON_ALLOC_DYN - Place dynamic sections after data segment.
+# TEXT_DYNAMIC - .dynamic in text segment, not data segment.
+# EMBEDDED - whether this is for an embedded system.
+# SHLIB_TEXT_START_ADDR - if set, add to SIZEOF_HEADERS to set
+# start address of shared library.
+# INPUT_FILES - INPUT command of files to always include
+# WRITABLE_RODATA - if set, the .rodata section should be writable
+# INIT_START, INIT_END - statements just before and just after
+# combination of .init sections.
+# FINI_START, FINI_END - statements just before and just after
+# combination of .fini sections.
+# STACK_ADDR - start of a .stack section.
+# OTHER_SYMBOLS - symbols to place right at the end of the script.
+# ETEXT_NAME - name of a symbol for the end of the text section,
+# normally etext.
+# SEPARATE_GOTPLT - if set, .got.plt should be separate output section,
+# so that .got can be in the RELRO area. It should be set to
+# the number of bytes in the beginning of .got.plt which can be
+# in the RELRO area as well.
+# USER_LABEL_PREFIX - prefix to add to user-visible symbols.
+#
+# When adding sections, do note that the names of some sections are used
+# when specifying the start address of the next.
+#
+
+# Many sections come in three flavours. There is the 'real' section,
+# like ".data". Then there are the per-procedure or per-variable
+# sections, generated by -ffunction-sections and -fdata-sections in GCC,
+# and useful for --gc-sections, which for a variable "foo" might be
+# ".data.foo". Then there are the linkonce sections, for which the linker
+# eliminates duplicates, which are named like ".gnu.linkonce.d.foo".
+# The exact correspondences are:
+#
+# Section Linkonce section
+# .text .gnu.linkonce.t.foo
+# .rodata .gnu.linkonce.r.foo
+# .data .gnu.linkonce.d.foo
+# .bss .gnu.linkonce.b.foo
+# .sdata .gnu.linkonce.s.foo
+# .sbss .gnu.linkonce.sb.foo
+# .sdata2 .gnu.linkonce.s2.foo
+# .sbss2 .gnu.linkonce.sb2.foo
+# .debug_info .gnu.linkonce.wi.foo
+# .tdata .gnu.linkonce.td.foo
+# .tbss .gnu.linkonce.tb.foo
+# .lrodata .gnu.linkonce.lr.foo
+# .ldata .gnu.linkonce.l.foo
+# .lbss .gnu.linkonce.lb.foo
+#
+# Each of these can also have corresponding .rel.* and .rela.* sections.
+
+test -z "$ENTRY" && ENTRY=_start
+test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi
+test -z "${ELFSIZE}" && ELFSIZE=32
+test -z "${ALIGNMENT}" && ALIGNMENT="${ELFSIZE} / 8"
+test "$LD_FLAG" = "N" && DATA_ADDR=.
+test -z "${ETEXT_NAME}" && ETEXT_NAME=etext
+test -n "$CREATE_SHLIB$CREATE_PIE" && test -n "$SHLIB_DATA_ADDR" && COMMONPAGESIZE=""
+test -z "$CREATE_SHLIB$CREATE_PIE" && test -n "$DATA_ADDR" && COMMONPAGESIZE=""
+test -n "$RELRO_NOW" && unset SEPARATE_GOTPLT
+test -z "$ATTRS_SECTIONS" && ATTRS_SECTIONS=".gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }"
+DATA_SEGMENT_ALIGN="ALIGN(${SEGMENT_SIZE}) + (. & (${MAXPAGESIZE} - 1))"
+DATA_SEGMENT_RELRO_END=""
+DATA_SEGMENT_END=""
+if test -n "${COMMONPAGESIZE}"; then
+ DATA_SEGMENT_ALIGN="ALIGN (${SEGMENT_SIZE}) - ((${MAXPAGESIZE} - .) & (${MAXPAGESIZE} - 1)); . = DATA_SEGMENT_ALIGN (${MAXPAGESIZE}, ${COMMONPAGESIZE})"
+ DATA_SEGMENT_END=". = DATA_SEGMENT_END (.);"
+ DATA_SEGMENT_RELRO_END=". = DATA_SEGMENT_RELRO_END (${SEPARATE_GOTPLT-0}, .);"
+fi
+if test -z "${INITIAL_READONLY_SECTIONS}${CREATE_SHLIB}"; then
+ INITIAL_READONLY_SECTIONS=".interp ${RELOCATING-0} : { *(.interp) }"
+fi
+if test -z "$PLT"; then
+ PLT=".plt ${RELOCATING-0} : { *(.plt) }"
+fi
+test -n "${DATA_PLT-${BSS_PLT-text}}" && TEXT_PLT=yes
+if test -z "$GOT"; then
+ if test -z "$SEPARATE_GOTPLT"; then
+ GOT=".got ${RELOCATING-0} : { *(.got.plt) *(.got) }"
+ else
+ GOT=".got ${RELOCATING-0} : { *(.got) }"
+ GOTPLT=".got.plt ${RELOCATING-0} : { *(.got.plt) }"
+ fi
+fi
+DYNAMIC=".dynamic ${RELOCATING-0} : { *(.dynamic) }"
+RODATA=".rodata ${RELOCATING-0} : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }"
+DATARELRO=".data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }"
+DISCARDED="/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }"
+if test -z "${NO_SMALL_DATA}"; then
+ SBSS=".sbss ${RELOCATING-0} :
+ {
+ ${RELOCATING+${SBSS_START_SYMBOLS}}
+ ${CREATE_SHLIB+*(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)}
+ *(.dynsbss)
+ *(.sbss${RELOCATING+ .sbss.* .gnu.linkonce.sb.*})
+ *(.scommon)
+ ${RELOCATING+${SBSS_END_SYMBOLS}}
+ }"
+ SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }"
+ SDATA="/* We want the small data sections together, so single-instruction offsets
+ can access them all, and initialized data all before uninitialized, so
+ we can shorten the on-disk segment size. */
+ .sdata ${RELOCATING-0} :
+ {
+ ${RELOCATING+${SDATA_START_SYMBOLS}}
+ ${CREATE_SHLIB+*(.sdata2 .sdata2.* .gnu.linkonce.s2.*)}
+ *(.sdata${RELOCATING+ .sdata.* .gnu.linkonce.s.*})
+ }"
+ SDATA2=".sdata2 ${RELOCATING-0} :
+ {
+ ${RELOCATING+${SDATA2_START_SYMBOLS}}
+ *(.sdata2${RELOCATING+ .sdata2.* .gnu.linkonce.s2.*})
+ }"
+ REL_SDATA=".rel.sdata ${RELOCATING-0} : { *(.rel.sdata${RELOCATING+ .rel.sdata.* .rel.gnu.linkonce.s.*}) }
+ .rela.sdata ${RELOCATING-0} : { *(.rela.sdata${RELOCATING+ .rela.sdata.* .rela.gnu.linkonce.s.*}) }"
+ REL_SBSS=".rel.sbss ${RELOCATING-0} : { *(.rel.sbss${RELOCATING+ .rel.sbss.* .rel.gnu.linkonce.sb.*}) }
+ .rela.sbss ${RELOCATING-0} : { *(.rela.sbss${RELOCATING+ .rela.sbss.* .rela.gnu.linkonce.sb.*}) }"
+ REL_SDATA2=".rel.sdata2 ${RELOCATING-0} : { *(.rel.sdata2${RELOCATING+ .rel.sdata2.* .rel.gnu.linkonce.s2.*}) }
+ .rela.sdata2 ${RELOCATING-0} : { *(.rela.sdata2${RELOCATING+ .rela.sdata2.* .rela.gnu.linkonce.s2.*}) }"
+ REL_SBSS2=".rel.sbss2 ${RELOCATING-0} : { *(.rel.sbss2${RELOCATING+ .rel.sbss2.* .rel.gnu.linkonce.sb2.*}) }
+ .rela.sbss2 ${RELOCATING-0} : { *(.rela.sbss2${RELOCATING+ .rela.sbss2.* .rela.gnu.linkonce.sb2.*}) }"
+else
+ NO_SMALL_DATA=" "
+fi
+if test -z "${DATA_GOT}"; then
+ if test -n "${NO_SMALL_DATA}"; then
+ DATA_GOT=" "
+ fi
+fi
+if test -z "${SDATA_GOT}"; then
+ if test -z "${NO_SMALL_DATA}"; then
+ SDATA_GOT=" "
+ fi
+fi
+test -n "$SEPARATE_GOTPLT" && SEPARATE_GOTPLT=" "
+test "${LARGE_SECTIONS}" = "yes" && REL_LARGE="
+ .rel.ldata ${RELOCATING-0} : { *(.rel.ldata${RELOCATING+ .rel.ldata.* .rel.gnu.linkonce.l.*}) }
+ .rela.ldata ${RELOCATING-0} : { *(.rela.ldata${RELOCATING+ .rela.ldata.* .rela.gnu.linkonce.l.*}) }
+ .rel.lbss ${RELOCATING-0} : { *(.rel.lbss${RELOCATING+ .rel.lbss.* .rel.gnu.linkonce.lb.*}) }
+ .rela.lbss ${RELOCATING-0} : { *(.rela.lbss${RELOCATING+ .rela.lbss.* .rela.gnu.linkonce.lb.*}) }
+ .rel.lrodata ${RELOCATING-0} : { *(.rel.lrodata${RELOCATING+ .rel.lrodata.* .rel.gnu.linkonce.lr.*}) }
+ .rela.lrodata ${RELOCATING-0} : { *(.rela.lrodata${RELOCATING+ .rela.lrodata.* .rela.gnu.linkonce.lr.*}) }"
+test "${LARGE_SECTIONS}" = "yes" && OTHER_BSS_SECTIONS="
+ ${OTHER_BSS_SECTIONS}
+ .lbss ${RELOCATING-0} :
+ {
+ *(.dynlbss)
+ *(.lbss${RELOCATING+ .lbss.* .gnu.linkonce.lb.*})
+ *(LARGE_COMMON)
+ }"
+test "${LARGE_SECTIONS}" = "yes" && LARGE_SECTIONS="
+ .lrodata ${RELOCATING-0} ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} :
+ {
+ *(.lrodata${RELOCATING+ .lrodata.* .gnu.linkonce.lr.*})
+ }
+ .ldata ${RELOCATING-0} ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} :
+ {
+ *(.ldata${RELOCATING+ .ldata.* .gnu.linkonce.l.*})
+ ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
+ }"
+INIT_ARRAY=".init_array ${RELOCATING-0} :
+ {
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_start = .);}}
+ KEEP (*(SORT(.init_array.*)))
+ KEEP (*(.init_array))
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_end = .);}}
+ }"
+FINI_ARRAY=".fini_array ${RELOCATING-0} :
+ {
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_start = .);}}
+ KEEP (*(SORT(.fini_array.*)))
+ KEEP (*(.fini_array))
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_end = .);}}
+ }"
+CTOR=".ctors ${CONSTRUCTING-0} :
+ {
+ ${CONSTRUCTING+${CTOR_START}}
+ /* gcc uses crtbegin.o to find the start of
+ the constructors, so we make sure it is
+ first. Because this is a wildcard, it
+ doesn't matter if the user does not
+ actually link against crtbegin.o; the
+ linker won't look for a file to match a
+ wildcard. The wildcard also means that it
+ doesn't matter which directory crtbegin.o
+ is in. */
+
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
+
+ /* We don't want to include the .ctor section from
+ the crtend.o file until after the sorted ctors.
+ The .ctor section from the crtend file contains the
+ end of ctors marker and it must be last */
+
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ ${CONSTRUCTING+${CTOR_END}}
+ }"
+DTOR=".dtors ${CONSTRUCTING-0} :
+ {
+ ${CONSTRUCTING+${DTOR_START}}
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ ${CONSTRUCTING+${DTOR_END}}
+ }"
+STACK=" .stack ${RELOCATING-0}${RELOCATING+${STACK_ADDR}} :
+ {
+ ${RELOCATING+_stack = .;}
+ *(.stack)
+ }"
+
+TEXT_START_ADDR="SEGMENT_START(\"text-segment\", ${TEXT_START_ADDR})"
+SHLIB_TEXT_START_ADDR="SEGMENT_START(\"text-segment\", ${SHLIB_TEXT_START_ADDR:-0})"
+
+# if this is for an embedded system, don't add SIZEOF_HEADERS.
+if [ -z "$EMBEDDED" ]; then
+ test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR} + SIZEOF_HEADERS"
+else
+ test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR}"
+fi
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
+ "${LITTLE_OUTPUT_FORMAT}")
+OUTPUT_ARCH(${OUTPUT_ARCH})
+${RELOCATING+ENTRY(${ENTRY})}
+
+${RELOCATING+${LIB_SEARCH_DIRS}}
+${RELOCATING+${EXECUTABLE_SYMBOLS}}
+${RELOCATING+${INPUT_FILES}}
+${RELOCATING- /* For some reason, the Solaris linker makes bad executables
+ if gld -r is used and the intermediate file has sections starting
+ at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld
+ bug. But for now assigning the zero vmas works. */}
+
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+PROVIDE (__executable_start = ${TEXT_START_ADDR}); . = ${TEXT_BASE_ADDRESS};}}}
+ ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR} + SIZEOF_HEADERS;}}
+ ${CREATE_PIE+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR} + SIZEOF_HEADERS;}}
+ ${INITIAL_READONLY_SECTIONS}
+ .note.gnu.build-id : { *(.note.gnu.build-id) }
+EOF
+
+test -n "${RELOCATING+0}" || unset NON_ALLOC_DYN
+test -z "${NON_ALLOC_DYN}" || TEXT_DYNAMIC=
+cat > ldscripts/dyntmp.$$ <<EOF
+ ${TEXT_DYNAMIC+${DYNAMIC}}
+ .hash ${RELOCATING-0} : { *(.hash) }
+ .gnu.hash ${RELOCATING-0} : { *(.gnu.hash) }
+ .dynsym ${RELOCATING-0} : { *(.dynsym) }
+ .dynstr ${RELOCATING-0} : { *(.dynstr) }
+ .gnu.version ${RELOCATING-0} : { *(.gnu.version) }
+ .gnu.version_d ${RELOCATING-0}: { *(.gnu.version_d) }
+ .gnu.version_r ${RELOCATING-0}: { *(.gnu.version_r) }
+EOF
+
+if [ "x$COMBRELOC" = x ]; then
+ COMBRELOCCAT="cat >> ldscripts/dyntmp.$$"
+else
+ COMBRELOCCAT="cat > $COMBRELOC"
+fi
+eval $COMBRELOCCAT <<EOF
+ .rel.init ${RELOCATING-0} : { *(.rel.init) }
+ .rela.init ${RELOCATING-0} : { *(.rela.init) }
+ .rel.text ${RELOCATING-0} : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) }
+ .rela.text ${RELOCATING-0} : { *(.rela.text${RELOCATING+ .rela.text.* .rela.gnu.linkonce.t.*}) }
+ .rel.fini ${RELOCATING-0} : { *(.rel.fini) }
+ .rela.fini ${RELOCATING-0} : { *(.rela.fini) }
+ .rel.rodata ${RELOCATING-0} : { *(.rel.rodata${RELOCATING+ .rel.rodata.* .rel.gnu.linkonce.r.*}) }
+ .rela.rodata ${RELOCATING-0} : { *(.rela.rodata${RELOCATING+ .rela.rodata.* .rela.gnu.linkonce.r.*}) }
+ ${OTHER_READONLY_RELOC_SECTIONS}
+ .rel.data.rel.ro ${RELOCATING-0} : { *(.rel.data.rel.ro${RELOCATING+* .rel.gnu.linkonce.d.rel.ro.*}) }
+ .rela.data.rel.ro ${RELOCATING-0} : { *(.rela.data.rel.ro${RELOCATING+* .rela.gnu.linkonce.d.rel.ro.*}) }
+ .rel.data ${RELOCATING-0} : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) }
+ .rela.data ${RELOCATING-0} : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) }
+ .rel.tdata ${RELOCATING-0} : { *(.rel.tdata${RELOCATING+ .rel.tdata.* .rel.gnu.linkonce.td.*}) }
+ .rela.tdata ${RELOCATING-0} : { *(.rela.tdata${RELOCATING+ .rela.tdata.* .rela.gnu.linkonce.td.*}) }
+ .rel.tbss ${RELOCATING-0} : { *(.rel.tbss${RELOCATING+ .rel.tbss.* .rel.gnu.linkonce.tb.*}) }
+ .rela.tbss ${RELOCATING-0} : { *(.rela.tbss${RELOCATING+ .rela.tbss.* .rela.gnu.linkonce.tb.*}) }
+ .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) }
+ .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) }
+ .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) }
+ .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) }
+ .rel.got ${RELOCATING-0} : { *(.rel.got) }
+ .rela.got ${RELOCATING-0} : { *(.rela.got) }
+ ${OTHER_GOT_RELOC_SECTIONS}
+ ${REL_SDATA}
+ ${REL_SBSS}
+ ${REL_SDATA2}
+ ${REL_SBSS2}
+ .rel.bss ${RELOCATING-0} : { *(.rel.bss${RELOCATING+ .rel.bss.* .rel.gnu.linkonce.b.*}) }
+ .rela.bss ${RELOCATING-0} : { *(.rela.bss${RELOCATING+ .rela.bss.* .rela.gnu.linkonce.b.*}) }
+ ${REL_LARGE}
+EOF
+
+if [ -n "$COMBRELOC" ]; then
+cat >> ldscripts/dyntmp.$$ <<EOF
+ .rel.dyn ${RELOCATING-0} :
+ {
+EOF
+sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rela\./d;s/^.*: { *\(.*\)}$/ \1/' $COMBRELOC >> ldscripts/dyntmp.$$
+cat >> ldscripts/dyntmp.$$ <<EOF
+ }
+ .rel.ifunc.dyn ${RELOCATING-0} :
+ {
+ *(.rel.ifunc.*)
+ }
+ .rela.dyn ${RELOCATING-0} :
+ {
+EOF
+sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rel\./d;s/^.*: { *\(.*\)}/ \1/' $COMBRELOC >> ldscripts/dyntmp.$$
+cat >> ldscripts/dyntmp.$$ <<EOF
+ }
+ .rela.ifunc.dyn ${RELOCATING-0} :
+ {
+ *(.rela.ifunc.*)
+ }
+EOF
+fi
+
+cat >> ldscripts/dyntmp.$$ <<EOF
+ .rel.plt ${RELOCATING-0} : { *(.rel.plt) }
+ .rela.plt ${RELOCATING-0} : { *(.rela.plt) }
+ ${OTHER_PLT_RELOC_SECTIONS}
+EOF
+
+if test -z "${NON_ALLOC_DYN}"; then
+ if test -z "${NO_REL_RELOCS}${NO_RELA_RELOCS}"; then
+ cat ldscripts/dyntmp.$$
+ else
+ if test -z "${NO_REL_RELOCS}"; then
+ sed -e '/^[ ]*\.rela\.[^}]*$/,/}/d' -e '/^[ ]*\.rela\./d' ldscripts/dyntmp.$$
+ fi
+ if test -z "${NO_RELA_RELOCS}"; then
+ sed -e '/^[ ]*\.rel\.[^}]*$/,/}/d' -e '/^[ ]*\.rel\./d' ldscripts/dyntmp.$$
+ fi
+ fi
+ rm -f ldscripts/dyntmp.$$
+fi
+
+cat <<EOF
+ .init ${RELOCATING-0} :
+ {
+ ${RELOCATING+${INIT_START}}
+ KEEP (*(.init))
+ ${RELOCATING+${INIT_END}}
+ } =${NOP-0}
+
+ ${TEXT_PLT+${PLT}}
+ ${TINY_READONLY_SECTION}
+ .text ${RELOCATING-0} :
+ {
+ ${RELOCATING+${TEXT_START_SYMBOLS}}
+ *(.text .stub${RELOCATING+ .text.* .gnu.linkonce.t.*})
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ ${RELOCATING+${OTHER_TEXT_SECTIONS}}
+ } =${NOP-0}
+ .fini ${RELOCATING-0} :
+ {
+ ${RELOCATING+${FINI_START}}
+ KEEP (*(.fini))
+ ${RELOCATING+${FINI_END}}
+ } =${NOP-0}
+ ${RELOCATING+PROVIDE (__${ETEXT_NAME} = .);}
+ ${RELOCATING+PROVIDE (_${ETEXT_NAME} = .);}
+ ${RELOCATING+PROVIDE (${ETEXT_NAME} = .);}
+ ${WRITABLE_RODATA-${RODATA}}
+ .rodata1 ${RELOCATING-0} : { *(.rodata1) }
+ ${CREATE_SHLIB-${SDATA2}}
+ ${CREATE_SHLIB-${SBSS2}}
+ ${OTHER_READONLY_SECTIONS}
+ .eh_frame_hdr : { *(.eh_frame_hdr) }
+ .eh_frame ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.eh_frame)) }
+ .gcc_except_table ${RELOCATING-0} : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+
+ /* Adjust the address for the data segment. We want to adjust up to
+ the same address within the page on the next page up. */
+ ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+. = ${DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}}
+ ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}
+ ${CREATE_PIE+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}
+
+ /* Exception handling */
+ .eh_frame ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.eh_frame)) }
+ .gcc_except_table ${RELOCATING-0} : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+
+ /* Thread Local Storage sections */
+ .tdata ${RELOCATING-0} : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) }
+
+ .preinit_array ${RELOCATING-0} :
+ {
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_start = .);}}
+ KEEP (*(.preinit_array))
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_end = .);}}
+ }
+ ${RELOCATING+${INIT_ARRAY}}
+ ${RELOCATING+${FINI_ARRAY}}
+ ${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}}
+ ${SMALL_DATA_DTOR-${RELOCATING+${DTOR}}}
+ .jcr ${RELOCATING-0} : { KEEP (*(.jcr)) }
+
+ ${RELOCATING+${DATARELRO}}
+ ${OTHER_RELRO_SECTIONS}
+ ${TEXT_DYNAMIC-${DYNAMIC}}
+ ${DATA_GOT+${RELRO_NOW+${GOT}}}
+ ${DATA_GOT+${RELRO_NOW+${GOTPLT}}}
+ ${DATA_GOT+${RELRO_NOW-${SEPARATE_GOTPLT+${GOT}}}}
+ ${RELOCATING+${DATA_SEGMENT_RELRO_END}}
+ ${DATA_GOT+${RELRO_NOW-${SEPARATE_GOTPLT-${GOT}}}}
+ ${DATA_GOT+${RELRO_NOW-${GOTPLT}}}
+
+ ${DATA_PLT+${PLT_BEFORE_GOT-${PLT}}}
+
+ .data ${RELOCATING-0} :
+ {
+ ${RELOCATING+${DATA_START_SYMBOLS}}
+ *(.data${RELOCATING+ .data.* .gnu.linkonce.d.*})
+ ${CONSTRUCTING+SORT(CONSTRUCTORS)}
+ }
+ .data1 ${RELOCATING-0} : { *(.data1) }
+ ${WRITABLE_RODATA+${RODATA}}
+ ${OTHER_READWRITE_SECTIONS}
+ ${SMALL_DATA_CTOR+${RELOCATING+${CTOR}}}
+ ${SMALL_DATA_DTOR+${RELOCATING+${DTOR}}}
+ ${DATA_PLT+${PLT_BEFORE_GOT+${PLT}}}
+ ${SDATA_GOT+${RELOCATING+${OTHER_GOT_SYMBOLS}}}
+ ${SDATA_GOT+${GOT}}
+ ${SDATA_GOT+${OTHER_GOT_SECTIONS}}
+ ${SDATA}
+ ${OTHER_SDATA_SECTIONS}
+ ${RELOCATING+${DATA_END_SYMBOLS-${USER_LABEL_PREFIX}_edata = .; PROVIDE (${USER_LABEL_PREFIX}edata = .);}}
+ ${RELOCATING+__bss_start = .;}
+ ${RELOCATING+${OTHER_BSS_SYMBOLS}}
+ ${SBSS}
+ ${BSS_PLT+${PLT}}
+ .bss ${RELOCATING-0} :
+ {
+ *(.dynbss)
+ *(.bss${RELOCATING+ .bss.* .gnu.linkonce.b.*})
+ *(COMMON)
+ /* Align here to ensure that the .bss section occupies space up to
+ _end. Align after .bss to ensure correct alignment even if the
+ .bss section disappears because there are no input sections.
+ FIXME: Why do we need it? When there is no .bss section, we don't
+ pad the .data section. */
+ ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
+ }
+ ${OTHER_BSS_SECTIONS}
+ ${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
+ ${RELOCATING+. = ALIGN(${ALIGNMENT});}
+ ${LARGE_SECTIONS}
+ ${RELOCATING+. = ALIGN(${ALIGNMENT});}
+ ${RELOCATING+${OTHER_END_SYMBOLS}}
+ ${RELOCATING+${END_SYMBOLS-${USER_LABEL_PREFIX}_end = .; PROVIDE (${USER_LABEL_PREFIX}end = .);}}
+ ${RELOCATING+${DATA_SEGMENT_END}}
+EOF
+
+if test -n "${NON_ALLOC_DYN}"; then
+ if test -z "${NO_REL_RELOCS}${NO_RELA_RELOCS}"; then
+ cat ldscripts/dyntmp.$$
+ else
+ if test -z "${NO_REL_RELOCS}"; then
+ sed -e '/^[ ]*\.rela\.[^}]*$/,/}/d' -e '/^[ ]*\.rela\./d' ldscripts/dyntmp.$$
+ fi
+ if test -z "${NO_RELA_RELOCS}"; then
+ sed -e '/^[ ]*\.rel\.[^}]*$/,/}/d' -e '/^[ ]*\.rel\./d' ldscripts/dyntmp.$$
+ fi
+ fi
+ rm -f ldscripts/dyntmp.$$
+fi
+
+cat <<EOF
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+
+ .comment 0 : { *(.comment) }
+
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo .zdebug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames .zdebug_sfnames) }
+
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges .zdebug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames .zdebug_pubnames) }
+
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*} .zdebug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev .zdebug_abbrev) }
+ .debug_line 0 : { *(.debug_line .zdebug_line) }
+ .debug_frame 0 : { *(.debug_frame .zdebug_frame) }
+ .debug_str 0 : { *(.debug_str .zdebug_str) }
+ .debug_loc 0 : { *(.debug_loc .zdebug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo .zdebug_macinfo) }
+
+ /* SGI/MIPS DWARF 2 extensions */
+ .debug_weaknames 0 : { *(.debug_weaknames .zdebug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames .zdebug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames .zdebug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames .zdebug_varnames) }
+
+ /* DWARF 3 */
+ .debug_pubtypes 0 : { *(.debug_pubtypes .zdebug_pubtypes) }
+ .debug_ranges 0 : { *(.debug_ranges .zdebug_ranges) }
+
+ ${TINY_DATA_SECTION}
+ ${TINY_BSS_SECTION}
+
+ ${STACK_ADDR+${STACK}}
+ ${ATTRS_SECTIONS}
+ ${OTHER_SECTIONS}
+ ${RELOCATING+${OTHER_SYMBOLS}}
+ ${RELOCATING+${DISCARDED}}
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/elf_chaos.sc b/binutils-2.21/ld/scripttempl/elf_chaos.sc
new file mode 100644
index 0000000..44279a9
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/elf_chaos.sc
@@ -0,0 +1,358 @@
+#
+# Unusual variables checked by this code:
+# NOP - four byte opcode for no-op (defaults to 0)
+# NO_SMALL_DATA - no .sbss/.sbss2/.sdata/.sdata2 sections if not
+# empty.
+# DATA_ADDR - if end-of-text-plus-one-page isn't right for data start
+# INITIAL_READONLY_SECTIONS - at start of text segment
+# OTHER_READONLY_SECTIONS - other than .text .init .rodata ...
+# (e.g., .PARISC.milli)
+# OTHER_TEXT_SECTIONS - these get put in .text when relocating
+# OTHER_READWRITE_SECTIONS - other than .data .bss .ctors .sdata ...
+# (e.g., .PARISC.global)
+# ATTRS_SECTIONS - at the end
+# OTHER_SECTIONS - at the end
+# EXECUTABLE_SYMBOLS - symbols that must be defined for an
+# executable (e.g., _DYNAMIC_LINK)
+# TEXT_START_SYMBOLS - symbols that appear at the start of the
+# .text section.
+# DATA_START_SYMBOLS - symbols that appear at the start of the
+# .data section.
+# OTHER_GOT_SYMBOLS - symbols defined just before .got.
+# OTHER_GOT_SECTIONS - sections just after .got.
+# OTHER_SDATA_SECTIONS - sections just after .sdata.
+# OTHER_BSS_SYMBOLS - symbols that appear at the start of the
+# .bss section besides __bss_start.
+# DATA_PLT - .plt should be in data segment, not text segment.
+# BSS_PLT - .plt should be in bss segment
+# TEXT_DYNAMIC - .dynamic in text segment, not data segment.
+# EMBEDDED - whether this is for an embedded system.
+# SHLIB_TEXT_START_ADDR - if set, add to SIZEOF_HEADERS to set
+# start address of shared library.
+# INPUT_FILES - INPUT command of files to always include
+# WRITABLE_RODATA - if set, the .rodata section should be writable
+# INIT_START, INIT_END - statements just before and just after
+# combination of .init sections.
+# FINI_START, FINI_END - statements just before and just after
+# combination of .fini sections.
+# STACK_ADDR - start of a .stack section.
+# OTHER_SYMBOLS - symbols to place right at the end of the script.
+#
+# When adding sections, do note that the names of some sections are used
+# when specifying the start address of the next.
+#
+
+# Many sections come in three flavours. There is the 'real' section,
+# like ".data". Then there are the per-procedure or per-variable
+# sections, generated by -ffunction-sections and -fdata-sections in GCC,
+# and useful for --gc-sections, which for a variable "foo" might be
+# ".data.foo". Then there are the linkonce sections, for which the linker
+# eliminates duplicates, which are named like ".gnu.linkonce.d.foo".
+# The exact correspondences are:
+#
+# Section Linkonce section
+# .text .gnu.linkonce.t.foo
+# .rodata .gnu.linkonce.r.foo
+# .data .gnu.linkonce.d.foo
+# .bss .gnu.linkonce.b.foo
+# .sdata .gnu.linkonce.s.foo
+# .sbss .gnu.linkonce.sb.foo
+# .sdata2 .gnu.linkonce.s2.foo
+# .sbss2 .gnu.linkonce.sb2.foo
+# .debug_info .gnu.linkonce.wi.foo
+#
+# Each of these can also have corresponding .rel.* and .rela.* sections.
+
+test -z "$ENTRY" && ENTRY=_start
+test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi
+test -z "${ELFSIZE}" && ELFSIZE=32
+test -z "${ALIGNMENT}" && ALIGNMENT="${ELFSIZE} / 8"
+test -z "$ATTRS_SECTIONS" && ATTRS_SECTIONS=".gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }"
+test "$LD_FLAG" = "N" && DATA_ADDR=.
+INTERP=".interp ${RELOCATING-0} : { *(.interp) }"
+PLT=".plt ${RELOCATING-0} : { *(.plt) }"
+DYNAMIC=".dynamic ${RELOCATING-0} : { *(.dynamic) }"
+RODATA=".rodata ${RELOCATING-0} : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }"
+if test -z "${NO_SMALL_DATA}"; then
+ SBSS=".sbss ${RELOCATING-0} :
+ {
+ ${RELOCATING+PROVIDE (__sbss_start = .);}
+ ${RELOCATING+PROVIDE (___sbss_start = .);}
+ *(.dynsbss)
+ *(.sbss${RELOCATING+ .sbss.* .gnu.linkonce.sb.*})
+ *(.scommon)
+ ${RELOCATING+PROVIDE (__sbss_end = .);}
+ ${RELOCATING+PROVIDE (___sbss_end = .);}
+ }"
+ SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }"
+ SDATA="/* We want the small data sections together, so single-instruction offsets
+ can access them all, and initialized data all before uninitialized, so
+ we can shorten the on-disk segment size. */
+ .sdata ${RELOCATING-0} :
+ {
+ ${RELOCATING+${SDATA_START_SYMBOLS}}
+ *(.sdata${RELOCATING+ .sdata.* .gnu.linkonce.s.*})
+ }"
+ SDATA2=".sdata2 ${RELOCATING-0} : { *(.sdata2${RELOCATING+ .sdata2.* .gnu.linkonce.s2.*}) }"
+ REL_SDATA=".rel.sdata ${RELOCATING-0} : { *(.rel.sdata${RELOCATING+ .rel.sdata.* .rel.gnu.linkonce.s.*}) }
+ .rela.sdata ${RELOCATING-0} : { *(.rela.sdata${RELOCATING+ .rela.sdata.* .rela.gnu.linkonce.s.*}) }"
+ REL_SBSS=".rel.sbss ${RELOCATING-0} : { *(.rel.sbss${RELOCATING+ .rel.sbss.* .rel.gnu.linkonce.sb.*}) }
+ .rela.sbss ${RELOCATING-0} : { *(.rela.sbss${RELOCATING+ .rela.sbss.* .rela.gnu.linkonce.sb.*}) }"
+ REL_SDATA2=".rel.sdata2 ${RELOCATING-0} : { *(.rel.sdata2${RELOCATING+ .rel.sdata2.* .rel.gnu.linkonce.s2.*}) }
+ .rela.sdata2 ${RELOCATING-0} : { *(.rela.sdata2${RELOCATING+ .rela.sdata2.* .rela.gnu.linkonce.s2.*}) }"
+ REL_SBSS2=".rel.sbss2 ${RELOCATING-0} : { *(.rel.sbss2${RELOCATING+ .rel.sbss2.* .rel.gnu.linkonce.sb2.*}) }
+ .rela.sbss2 ${RELOCATING-0} : { *(.rela.sbss2${RELOCATING+ .rela.sbss2.* .rela.gnu.linkonce.sb2.*}) }"
+fi
+CTOR="
+ ${CONSTRUCTING+${CTOR_START}}
+ /* gcc uses crtbegin.o to find the start of
+ the constructors, so we make sure it is
+ first. Because this is a wildcard, it
+ doesn't matter if the user does not
+ actually link against crtbegin.o; the
+ linker won't look for a file to match a
+ wildcard. The wildcard also means that it
+ doesn't matter which directory crtbegin.o
+ is in. */
+
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
+
+ /* We don't want to include the .ctor section from
+ the crtend.o file until after the sorted ctors.
+ The .ctor section from the crtend file contains the
+ end of ctors marker and it must be last */
+
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ ${CONSTRUCTING+${CTOR_END}}
+"
+DTOR="
+ ${CONSTRUCTING+${DTOR_START}}
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ ${CONSTRUCTING+${DTOR_END}}
+"
+STACK=" .stack ${RELOCATING-0}${RELOCATING+${STACK_ADDR}} :
+ {
+ ${RELOCATING+_stack = .;}
+ *(.stack)
+ }"
+
+test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR}"
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
+ "${LITTLE_OUTPUT_FORMAT}")
+OUTPUT_ARCH(${OUTPUT_ARCH})
+${RELOCATING+ENTRY(${ENTRY})}
+
+${RELOCATING+${LIB_SEARCH_DIRS}}
+${RELOCATING+/* Do we need any of these for elf?
+ __DYNAMIC = 0; ${STACKZERO+${STACKZERO}} ${SHLIB_PATH+${SHLIB_PATH}} */}
+${RELOCATING+${EXECUTABLE_SYMBOLS}}
+${RELOCATING+${INPUT_FILES}}
+${RELOCATING- /* For some reason, the Solaris linker makes bad executables
+ if gld -r is used and the intermediate file has sections starting
+ at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld
+ bug. But for now assigning the zero vmas works. */}
+
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ ${CREATE_SHLIB-${RELOCATING+. = ${TEXT_BASE_ADDRESS};}}
+ ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR:-0};}}
+ ${CREATE_SHLIB-${INTERP}}
+ ${INITIAL_READONLY_SECTIONS}
+ ${TEXT_DYNAMIC+${DYNAMIC}}
+ .hash ${RELOCATING-0} : { *(.hash) }
+ .dynsym ${RELOCATING-0} : { *(.dynsym) }
+ .dynstr ${RELOCATING-0} : { *(.dynstr) }
+ .gnu.version ${RELOCATING-0} : { *(.gnu.version) }
+ .gnu.version_d ${RELOCATING-0}: { *(.gnu.version_d) }
+ .gnu.version_r ${RELOCATING-0}: { *(.gnu.version_r) }
+
+EOF
+if [ "x$COMBRELOC" = x ]; then
+ COMBRELOCCAT=cat
+else
+ COMBRELOCCAT="cat > $COMBRELOC"
+fi
+eval $COMBRELOCCAT <<EOF
+ .rel.init ${RELOCATING-0} : { *(.rel.init) }
+ .rela.init ${RELOCATING-0} : { *(.rela.init) }
+ .rel.text ${RELOCATING-0} : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) }
+ .rela.text ${RELOCATING-0} : { *(.rela.text${RELOCATING+ .rela.text.* .rela.gnu.linkonce.t.*}) }
+ .rel.fini ${RELOCATING-0} : { *(.rel.fini) }
+ .rela.fini ${RELOCATING-0} : { *(.rela.fini) }
+ .rel.rodata ${RELOCATING-0} : { *(.rel.rodata${RELOCATING+ .rel.rodata.* .rel.gnu.linkonce.r.*}) }
+ .rela.rodata ${RELOCATING-0} : { *(.rela.rodata${RELOCATING+ .rela.rodata.* .rela.gnu.linkonce.r.*}) }
+ ${OTHER_READONLY_RELOC_SECTIONS}
+ .rel.data ${RELOCATING-0} : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) }
+ .rela.data ${RELOCATING-0} : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) }
+ .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) }
+ .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) }
+ .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) }
+ .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) }
+ .rel.got ${RELOCATING-0} : { *(.rel.got) }
+ .rela.got ${RELOCATING-0} : { *(.rela.got) }
+ ${OTHER_GOT_RELOC_SECTIONS}
+ ${REL_SDATA}
+ ${REL_SBSS}
+ ${REL_SDATA2}
+ ${REL_SBSS2}
+ .rel.bss ${RELOCATING-0} : { *(.rel.bss${RELOCATING+ .rel.bss.* .rel.gnu.linkonce.b.*}) }
+ .rela.bss ${RELOCATING-0} : { *(.rela.bss${RELOCATING+ .rela.bss.* .rela.gnu.linkonce.b.*}) }
+EOF
+if [ -n "$COMBRELOC" ]; then
+cat <<EOF
+ .rel.dyn ${RELOCATING-0} :
+ {
+EOF
+sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rela\./d;s/^.*: { *\(.*\)}$/ \1/' $COMBRELOC
+cat <<EOF
+ }
+ .rela.dyn ${RELOCATING-0} :
+ {
+EOF
+sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rel\./d;s/^.*: { *\(.*\)}/ \1/' $COMBRELOC
+cat <<EOF
+ }
+EOF
+fi
+cat <<EOF
+ . = ALIGN(0x1000);
+ .rel.plt ${RELOCATING-0} : { *(.rel.plt) }
+ .rela.plt ${RELOCATING-0} : { *(.rela.plt) }
+ ${OTHER_PLT_RELOC_SECTIONS}
+ ${DATA_PLT-${BSS_PLT-${PLT}}}
+ .text ${RELOCATING-0} :
+ {
+ ${RELOCATING+${TEXT_START_SYMBOLS}}
+ *(.text .stub${RELOCATING+ .text.* .gnu.linkonce.t.*})
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ ${RELOCATING+${OTHER_TEXT_SECTIONS}}
+ } =${NOP-0}
+ .fini ${RELOCATING-0} :
+ {
+ ${RELOCATING+${FINI_START}}
+ KEEP (*(.fini))
+ ${RELOCATING+${FINI_END}}
+ } =${NOP-0}
+ ${RELOCATING+PROVIDE (__etext = .);}
+ ${RELOCATING+PROVIDE (_etext = .);}
+ ${RELOCATING+PROVIDE (etext = .);}
+ . = ALIGN(0x1000);
+ ${CREATE_SHLIB-${SDATA2}}
+ ${CREATE_SHLIB-${SBSS2}}
+ ${OTHER_READONLY_SECTIONS}
+ .eh_frame_hdr : { *(.eh_frame_hdr) }
+
+ . = ALIGN(0x1000);
+ .data ${RELOCATING-0} :
+ {
+ *(.rodata .rodata.*)
+ *(.rodata1)
+ *(.gnu.linkonce.r.*)
+ ${RELOCATING+${DATA_START_SYMBOLS}}
+ *(.data${RELOCATING+ .data.* .gnu.linkonce.d.*})
+ ${CONSTRUCTING+SORT(CONSTRUCTORS)}
+ KEEP (*(.eh_frame))
+ *(.gcc_except_table)
+ ${CTOR}
+ ${DTOR}
+ KEEP (*(.jcr))
+ }
+ .data1 ${RELOCATING-0} : { *(.data1) }
+ . = ALIGN(0x1000);
+ .gcc_except_table ${RELOCATING-0} : { *(.gcc_except_table) }
+ ${WRITABLE_RODATA+${RODATA}}
+ ${OTHER_READWRITE_SECTIONS}
+ ${TEXT_DYNAMIC-${DYNAMIC}}
+ ${DATA_PLT+${PLT}}
+ ${RELOCATING+${OTHER_GOT_SYMBOLS}}
+ .got ${RELOCATING-0} : { *(.got.plt) *(.got) }
+ ${OTHER_GOT_SECTIONS}
+ ${CREATE_SHLIB+${SDATA2}}
+ ${CREATE_SHLIB+${SBSS2}}
+ ${SDATA}
+ ${OTHER_SDATA_SECTIONS}
+ ${RELOCATING+_edata = .;}
+ ${RELOCATING+PROVIDE (edata = .);}
+ ${RELOCATING+__bss_start = .;}
+ ${RELOCATING+${OTHER_BSS_SYMBOLS}}
+ ${SBSS}
+ ${BSS_PLT+${PLT}}
+ . = ALIGN(0x1000);
+ .bss ${RELOCATING-0} :
+ {
+ *(.dynbss)
+ *(.bss${RELOCATING+ .bss.* .gnu.linkonce.b.*})
+ *(COMMON)
+ /* Align here to ensure that the .bss section occupies space up to
+ _end. Align after .bss to ensure correct alignment even if the
+ .bss section disappears because there are no input sections. */
+ ${RELOCATING+. = ALIGN(${ALIGNMENT});}
+ }
+ ${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
+ ${RELOCATING+. = ALIGN(${ALIGNMENT});}
+ ${RELOCATING+${OTHER_END_SYMBOLS}}
+ ${RELOCATING+_end = .;}
+ ${RELOCATING+PROVIDE (end = .);}
+
+ /* Stabs debugging sections. */
+ . = ALIGN(0x1000);
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+
+ . = ALIGN(0x1000);
+ .comment 0 : { *(.comment) }
+
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo .zdebug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames .zdebug_sfnames) }
+
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges .zdebug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames .zdebug_pubnames) }
+
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*} .zdebug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev .zdebug_abbrev) }
+ .debug_line 0 : { *(.debug_line .zdebug_line) }
+ .debug_frame 0 : { *(.debug_frame .zdebug_frame) }
+ .debug_str 0 : { *(.debug_str .zdebug_str) }
+ .debug_loc 0 : { *(.debug_loc .zdebug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo .zdebug_macinfo) }
+
+ /* SGI/MIPS DWARF 2 extensions */
+ .debug_weaknames 0 : { *(.debug_weaknames .zdebug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames .zdebug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames .zdebug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames .zdebug_varnames) }
+
+ ${STACK_ADDR+${STACK}}
+ ${ATTRS_SECTIONS}
+ ${OTHER_SECTIONS}
+ ${RELOCATING+${OTHER_SYMBOLS}}
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/elfd10v.sc b/binutils-2.21/ld/scripttempl/elfd10v.sc
new file mode 100644
index 0000000..cf926d0
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/elfd10v.sc
@@ -0,0 +1,198 @@
+test -z "$ENTRY" && ENTRY=_start
+test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi
+test "$LD_FLAG" = "N" && DATA_ADDR=.
+INTERP=".interp ${RELOCATING-0} : { *(.interp) }"
+PLT=".plt ${RELOCATING-0} : { *(.plt) }"
+
+
+CTOR=".ctors ${CONSTRUCTING-0} :
+ {
+ ${CONSTRUCTING+${CTOR_START}}
+ /* gcc uses crtbegin.o to find the start of
+ the constructors, so we make sure it is
+ first. Because this is a wildcard, it
+ doesn't matter if the user does not
+ actually link against crtbegin.o; the
+ linker won't look for a file to match a
+ wildcard. The wildcard also means that it
+ doesn't matter which directory crtbegin.o
+ is in. */
+
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
+
+ /* We don't want to include the .ctor section from
+ the crtend.o file until after the sorted ctors.
+ The .ctor section from the crtend file contains the
+ end of ctors marker and it must be last */
+
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ ${CONSTRUCTING+${CTOR_END}}
+ }"
+
+DTOR=" .dtors ${CONSTRUCTING-0} :
+ {
+ ${CONSTRUCTING+${DTOR_START}}
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ ${CONSTRUCTING+${DTOR_END}}
+ }"
+
+STACK=" .stack : { _stack = .; *(.stack) } >STACK "
+
+# if this is for an embedded system, don't add SIZEOF_HEADERS.
+if [ -z "$EMBEDDED" ]; then
+ test -z "${READONLY_BASE_ADDRESS}" && READONLY_BASE_ADDRESS="${READONLY_START_ADDR} + SIZEOF_HEADERS"
+else
+ test -z "${READONLY_BASE_ADDRESS}" && READONLY_BASE_ADDRESS="${READONLY_START_ADDR}"
+fi
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
+ "${LITTLE_OUTPUT_FORMAT}")
+OUTPUT_ARCH(${OUTPUT_ARCH})
+${RELOCATING+ENTRY(${ENTRY})}
+
+${RELOCATING+${LIB_SEARCH_DIRS}}
+${RELOCATING+/* Do we need any of these for elf?
+ __DYNAMIC = 0; ${STACKZERO+${STACKZERO}} ${SHLIB_PATH+${SHLIB_PATH}} */}
+${RELOCATING+${EXECUTABLE_SYMBOLS}}
+
+MEMORY
+{
+ /* These are the values for the D10V-TS3 board.
+ There are other memory regions available on
+ the TS3 (eg ROM, FLASH, etc) but these are not
+ used by this script. */
+
+ INSN : org = 0x01000000, len = 256K
+ DATA : org = 0x02000000, len = 48K
+
+ /* This is a fake memory region at the top of the
+ on-chip RAM, used as the start of the
+ (descending) stack. */
+
+ STACK : org = 0x0200BFFC, len = 4
+}
+
+SECTIONS
+{
+ .text ${RELOCATING+${TEXT_START_ADDR}} :
+ {
+ ${RELOCATING+${TEXT_START_SYMBOLS}}
+ KEEP (*(.init))
+ KEEP (*(.init.*))
+ KEEP (*(.fini))
+ KEEP (*(.fini.*))
+ *(.text)
+ *(.text.*)
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ *(.gnu.linkonce.t*)
+ ${RELOCATING+_etext = .;}
+ ${RELOCATING+PROVIDE (etext = .);}
+ } ${RELOCATING+ >INSN} =${NOP-0}
+
+ .rodata ${RELOCATING+${READONLY_START_ADDR}} : {
+ *(.rodata)
+ *(.gnu.linkonce.r*)
+ *(.rodata.*)
+ } ${RELOCATING+ >DATA}
+
+ .rodata1 ${RELOCATING-0} : {
+ *(.rodata1)
+ *(.rodata1.*)
+ } ${RELOCATING+ >DATA}
+
+ .data ${RELOCATING-0} :
+ {
+ ${RELOCATING+${DATA_START_SYMBOLS}}
+ *(.data)
+ *(.data.*)
+ *(.gnu.linkonce.d*)
+ ${CONSTRUCTING+CONSTRUCTORS}
+ } ${RELOCATING+ >DATA}
+
+ .data1 ${RELOCATING-0} : {
+ *(.data1)
+ *(.data1.*)
+ } ${RELOCATING+ >DATA}
+
+ ${RELOCATING+${CTOR} >DATA}
+ ${RELOCATING+${DTOR} >DATA}
+
+ /* We want the small data sections together, so single-instruction offsets
+ can access them all, and initialized data all before uninitialized, so
+ we can shorten the on-disk segment size. */
+ .sdata ${RELOCATING-0} : {
+ *(.sdata)
+ *(.sdata.*)
+ } ${RELOCATING+ >DATA}
+
+ ${RELOCATING+_edata = .;}
+ ${RELOCATING+PROVIDE (edata = .);}
+ ${RELOCATING+__bss_start = .;}
+ .sbss ${RELOCATING-0} : { *(.sbss) *(.scommon) } ${RELOCATING+ >DATA}
+ .bss ${RELOCATING-0} :
+ {
+ *(.dynbss)
+ *(.dynbss.*)
+ *(.bss)
+ *(.bss.*)
+ *(COMMON)
+ } ${RELOCATING+ >DATA}
+
+ ${RELOCATING+_end = . ;}
+ ${RELOCATING+PROVIDE (end = .);}
+
+ ${RELOCATING+$STACK}
+
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+
+ .comment 0 : { *(.comment) }
+
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo .zdebug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames .zdebug_sfnames) }
+
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges .zdebug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames .zdebug_pubnames) }
+
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*} .zdebug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev .zdebug_abbrev) }
+ .debug_line 0 : { *(.debug_line .zdebug_line) }
+ .debug_frame 0 : { *(.debug_frame .zdebug_frame) }
+ .debug_str 0 : { *(.debug_str .zdebug_str) }
+ .debug_loc 0 : { *(.debug_loc .zdebug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo .zdebug_macinfo) }
+
+ /* SGI/MIPS DWARF 2 extensions */
+ .debug_weaknames 0 : { *(.debug_weaknames .zdebug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames .zdebug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames .zdebug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames .zdebug_varnames) }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/elfd30v.sc b/binutils-2.21/ld/scripttempl/elfd30v.sc
new file mode 100644
index 0000000..431236f
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/elfd30v.sc
@@ -0,0 +1,225 @@
+
+CTOR=".ctors ${CONSTRUCTING-0} :
+ {
+ ${CONSTRUCTING+ __CTOR_LIST__ = .; }
+ /* gcc uses crtbegin.o to find the start of
+ the constructors, so we make sure it is
+ first. Because this is a wildcard, it
+ doesn't matter if the user does not
+ actually link against crtbegin.o; the
+ linker won't look for a file to match a
+ wildcard. The wildcard also means that it
+ doesn't matter which directory crtbegin.o
+ is in. */
+
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
+
+ /* We don't want to include the .ctor section from
+ the crtend.o file until after the sorted ctors.
+ The .ctor section from the crtend file contains the
+ end of ctors marker and it must be last */
+
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ ${CONSTRUCTING+ __CTOR_END__ = .; }
+ } ${RELOCATING+ > ${DATA_MEMORY}}"
+
+DTOR=" .dtors ${CONSTRUCTING-0} :
+ {
+ ${CONSTRUCTING+ __DTOR_LIST__ = .; }
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ ${CONSTRUCTING+ __DTOR_END__ = .; }
+ } ${RELOCATING+ > ${DATA_MEMORY}}"
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+
+MEMORY
+{
+ text ${TEXT_DEF_SECTION} : ORIGIN = ${TEXT_START_ADDR}, LENGTH = ${TEXT_SIZE}
+ data ${DATA_DEF_SECTION} : ORIGIN = ${DATA_START_ADDR}, LENGTH = ${DATA_SIZE}
+ emem ${EMEM_DEF_SECTION} : ORIGIN = ${EMEM_START_ADDR}, LENGTH = ${EMEM_SIZE}
+ eit : ORIGIN = ${EIT_START_ADDR}, LENGTH = ${EIT_SIZE}
+}
+
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ ${TEXT_DYNAMIC+${DYNAMIC}}
+ .hash ${RELOCATING-0} : { *(.hash) }
+ .dynsym ${RELOCATING-0} : { *(.dynsym) }
+ .dynstr ${RELOCATING-0} : { *(.dynstr) }
+ .gnu.version ${RELOCATING-0} : { *(.gnu.version) }
+ .gnu.version_d ${RELOCATING-0} : { *(.gnu.version_d) }
+ .gnu.version_r ${RELOCATING-0} : { *(.gnu.version_r) }
+
+ .rel.text ${RELOCATING-0} : { *(.rel.text) *(.rel.gnu.linkonce.t*) }
+ .rela.text ${RELOCATING-0} : { *(.rela.text) *(.rela.gnu.linkonce.t*) }
+ .rel.data ${RELOCATING-0} : { *(.rel.data) *(.rel.gnu.linkonce.d*) }
+ .rela.data ${RELOCATING-0} : { *(.rela.data) *(.rela.gnu.linkonce.d*) }
+ .rel.rodata ${RELOCATING-0} : { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
+ .rela.rodata ${RELOCATING-0} : { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
+ .rel.stext ${RELOCATING-0} : { *(.rel.stest) }
+ .rela.stext ${RELOCATING-0} : { *(.rela.stest) }
+ .rel.etext ${RELOCATING-0} : { *(.rel.etest) }
+ .rela.etext ${RELOCATING-0} : { *(.rela.etest) }
+ .rel.sdata ${RELOCATING-0} : { *(.rel.sdata) }
+ .rela.sdata ${RELOCATING-0} : { *(.rela.sdata) }
+ .rel.edata ${RELOCATING-0} : { *(.rel.edata) }
+ .rela.edata ${RELOCATING-0} : { *(.rela.edata) }
+ .rel.eit_v ${RELOCATING-0} : { *(.rel.eit_v) }
+ .rela.eit_v ${RELOCATING-0} : { *(.rela.eit_v) }
+ .rel.sbss ${RELOCATING-0} : { *(.rel.sbss) }
+ .rela.sbss ${RELOCATING-0} : { *(.rela.sbss) }
+ .rel.ebss ${RELOCATING-0} : { *(.rel.ebss) }
+ .rela.ebss ${RELOCATING-0} : { *(.rela.ebss) }
+ .rel.srodata ${RELOCATING-0} : { *(.rel.srodata) }
+ .rela.srodata ${RELOCATING-0} : { *(.rela.srodata) }
+ .rel.erodata ${RELOCATING-0} : { *(.rel.erodata) }
+ .rela.erodata ${RELOCATING-0} : { *(.rela.erodata) }
+ .rel.got ${RELOCATING-0} : { *(.rel.got) }
+ .rela.got ${RELOCATING-0} : { *(.rela.got) }
+ .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) }
+ .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) }
+ .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) }
+ .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) }
+ .rel.init ${RELOCATING-0} : { *(.rel.init) }
+ .rela.init ${RELOCATING-0} : { *(.rela.init) }
+ .rel.fini ${RELOCATING-0} : { *(.rel.fini) }
+ .rela.fini ${RELOCATING-0} : { *(.rela.fini) }
+ .rel.bss ${RELOCATING-0} : { *(.rel.bss) }
+ .rela.bss ${RELOCATING-0} : { *(.rela.bss) }
+ .rel.plt ${RELOCATING-0} : { *(.rel.plt) }
+ .rela.plt ${RELOCATING-0} : { *(.rela.plt) }
+
+ .init ${RELOCATING-0} : { *(.init) } =${NOP-0}
+ ${DATA_PLT-${PLT}}
+
+ /* Internal text space */
+ .stext ${RELOCATING-0} : { *(.stext) } ${RELOCATING+ > text}
+
+ /* Internal text space or external memory */
+ .text :
+ {
+ *(.text)
+ *(.gnu.linkonce.t*)
+ *(.init)
+ *(.fini)
+ ${RELOCATING+ _etext = . ; }
+ } ${RELOCATING+ > ${TEXT_MEMORY}}
+
+ /* Internal data space */
+ .srodata ${RELOCATING-0} : { *(.srodata) } ${RELOCATING+ > data}
+ .sdata ${RELOCATING-0} : { *(.sdata) } ${RELOCATING+ > data}
+
+ /* Internal data space or external memory */
+ .rodata ${RELOCATING-0} : { *(.rodata) } ${RELOCATING+ > ${DATA_MEMORY}}
+
+ /* C++ exception support. */
+ .eh_frame ${RELOCATING-0} : { KEEP (*(.eh_frame)) } ${RELOCATING+ > ${DATA_MEMORY}}
+ .gcc_except_table ${RELOCATING-0} : { *(.gcc_except_table) } ${RELOCATING+ > ${DATA_MEMORY}}
+
+ /* Java class registration support. */
+ .jcr ${RELOCATING-0} : { KEEP (*(.jcr)) } ${RELOCATING+ >${DATA_MEMORY}}
+
+ ${RELOCATING+${CTOR}}
+ ${RELOCATING+${DTOR}}
+
+ .data ${RELOCATING-0} :
+ {
+ *(.data)
+ *(.gnu.linkonce.d*)
+ ${CONSTRUCTING+CONSTRUCTORS}
+ ${RELOCATING+ _edata = . ; }
+ } ${RELOCATING+ > ${DATA_MEMORY}}
+
+ /* External memory */
+ .etext ${RELOCATING-0} :
+ {
+ ${RELOCATING+ PROVIDE (__etext_start = .) ; }
+ *(.etext)
+ ${RELOCATING+ PROVIDE (__etext_end = .) ; }
+ } ${RELOCATING+ > emem}
+
+ .erodata ${RELOCATING-0} : { *(.erodata) } ${RELOCATING+ > emem}
+ .edata ${RELOCATING-0} : { *(.edata) } ${RELOCATING+ > emem}
+
+ .sbss ${RELOCATING-0} :
+ {
+ ${RELOCATING+ PROVIDE (__sbss_start = .) ; }
+ *(.sbss)
+ ${RELOCATING+ PROVIDE (__sbss_end = .) ; }
+ } ${RELOCATING+ > data}
+
+ .ebss ${RELOCATING-0} :
+ {
+ ${RELOCATING+ PROVIDE (__ebss_start = .) ; }
+ *(.ebss)
+ ${RELOCATING+ PROVIDE (__ebss_end = .) ; }
+ } ${RELOCATING+ > data}
+
+ .bss ${RELOCATING-0} :
+ {
+ ${RELOCATING+ PROVIDE (__bss_start = .) ; }
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ PROVIDE (__bss_end = .) ; }
+ ${RELOCATING+ _end = . ; }
+ } ${RELOCATING+ > ${DATA_MEMORY}}
+
+ .eit_v ${RELOCATING-0} :
+ {
+ ${RELOCATING+ PROVIDE (__eit_start = .) ; }
+ *(.eit_v)
+ ${RELOCATING+ PROVIDE (__eit_end = .) ; }
+ } ${RELOCATING+ > eit}
+
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+
+ .comment 0 : { *(.comment) }
+
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo .zdebug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames .zdebug_sfnames) }
+
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges .zdebug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames .zdebug_pubnames) }
+
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*} .zdebug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev .zdebug_abbrev) }
+ .debug_line 0 : { *(.debug_line .zdebug_line) }
+ .debug_frame 0 : { *(.debug_frame .zdebug_frame) }
+ .debug_str 0 : { *(.debug_str .zdebug_str) }
+ .debug_loc 0 : { *(.debug_loc .zdebug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo .zdebug_macinfo) }
+
+ PROVIDE (__stack = ${STACK_START_ADDR});
+}
+EOF
+
+
+
+
diff --git a/binutils-2.21/ld/scripttempl/elfi370.sc b/binutils-2.21/ld/scripttempl/elfi370.sc
new file mode 100644
index 0000000..b004b3f
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/elfi370.sc
@@ -0,0 +1,220 @@
+#
+# This is just a raw copy of elfppc.sc and has not been otherwise modified
+#
+# Unusual variables checked by this code:
+# NOP - four byte opcode for no-op (defaults to 0)
+# DATA_ADDR - if end-of-text-plus-one-page isn't right for data start
+# OTHER_READONLY_SECTIONS - other than .text .init .rodata ...
+# (e.g., .PARISC.milli)
+# OTHER_READWRITE_SECTIONS - other than .data .bss .ctors .sdata ...
+# (e.g., .PARISC.global)
+# ATTRS_SECTIONS - at the end
+# OTHER_SECTIONS - at the end
+# EXECUTABLE_SYMBOLS - symbols that must be defined for an
+# executable (e.g., _DYNAMIC_LINK)
+# TEXT_START_SYMBOLS - symbols that appear at the start of the
+# .text section.
+# DATA_START_SYMBOLS - symbols that appear at the start of the
+# .data section.
+# OTHER_BSS_SYMBOLS - symbols that appear at the start of the
+# .bss section besides __bss_start.
+#
+# When adding sections, do note that the names of some sections are used
+# when specifying the start address of the next.
+#
+test -z "$ENTRY" && ENTRY=_start
+test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+test -z "$ATTRS_SECTIONS" && ATTRS_SECTIONS=".gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }"
+test "$LD_FLAG" = "N" && DATA_ADDR=.
+SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2) }"
+SDATA2=".sdata2 ${RELOCATING-0} : { *(.sdata2) }"
+INTERP=".interp ${RELOCATING-0} : { *(.interp) }"
+PLT=".plt ${RELOCATING-0} : { *(.plt) }"
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
+ "${LITTLE_OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+${RELOCATING+ENTRY(${ENTRY})}
+
+${RELOCATING+${LIB_SEARCH_DIRS}}
+${RELOCATING+/* Do we need any of these for elf?
+ __DYNAMIC = 0; ${STACKZERO+${STACKZERO}} ${SHLIB_PATH+${SHLIB_PATH}} */}
+${RELOCATING+${EXECUTABLE_SYMBOLS}}
+${RELOCATING- /* For some reason, the Solaris linker makes bad executables
+ if gld -r is used and the intermediate file has sections starting
+ at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld
+ bug. But for now assigning the zero vmas works. */}
+
+${RELOCATING+PROVIDE (__stack = 0);}
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ ${CREATE_SHLIB-${RELOCATING+. = ${TEXT_START_ADDR} + SIZEOF_HEADERS;}}
+ ${CREATE_SHLIB+${RELOCATING+. = SIZEOF_HEADERS;}}
+ ${CREATE_SHLIB-${INTERP}}
+ .hash ${RELOCATING-0} : { *(.hash) }
+ .dynsym ${RELOCATING-0} : { *(.dynsym) }
+ .dynstr ${RELOCATING-0} : { *(.dynstr) }
+ .gnu.version ${RELOCATING-0} : { *(.gnu.version) }
+ .gnu.version_d ${RELOCATING-0} : { *(.gnu.version_d) }
+ .gnu.version_r ${RELOCATING-0} : { *(.gnu.version_r) }
+ .rela.text ${RELOCATING-0} :
+ { *(.rela.text) *(.rela.gnu.linkonce.t*) }
+ .rela.data ${RELOCATING-0} :
+ { *(.rela.data) *(.rela.gnu.linkonce.d*) }
+ .rela.rodata ${RELOCATING-0} :
+ { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
+ .rela.got ${RELOCATING-0} : { *(.rela.got) }
+ .rela.got1 ${RELOCATING-0} : { *(.rela.got1) }
+ .rela.got2 ${RELOCATING-0} : { *(.rela.got2) }
+ .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) }
+ .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) }
+ .rela.init ${RELOCATING-0} : { *(.rela.init) }
+ .rela.fini ${RELOCATING-0} : { *(.rela.fini) }
+ .rela.bss ${RELOCATING-0} : { *(.rela.bss) }
+ .rela.plt ${RELOCATING-0} : { *(.rela.plt) }
+ .rela.sdata ${RELOCATING-0} : { *(.rela.sdata) }
+ .rela.sbss ${RELOCATING-0} : { *(.rela.sbss) }
+ .rela.sdata2 ${RELOCATING-0} : { *(.rela.sdata2) }
+ .rela.sbss2 ${RELOCATING-0} : { *(.rela.sbss2) }
+ .text ${RELOCATING-0} :
+ {
+ ${RELOCATING+${TEXT_START_SYMBOLS}}
+ *(.text)
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ *(.gnu.linkonce.t*)
+ } =${NOP-0}
+ .init ${RELOCATING-0} : { *(.init) } =${NOP-0}
+ .fini ${RELOCATING-0} : { *(.fini) } =${NOP-0}
+ .rodata ${RELOCATING-0} : { *(.rodata) *(.gnu.linkonce.r*) }
+ .rodata1 ${RELOCATING-0} : { *(.rodata1) }
+ ${RELOCATING+_etext = .;}
+ ${RELOCATING+PROVIDE (etext = .);}
+ ${CREATE_SHLIB-${SDATA2}}
+ ${CREATE_SHLIB-${SBSS2}}
+ ${OTHER_READONLY_SECTIONS}
+
+ /* Adjust the address for the data segment. We want to adjust up to
+ the same address within the page on the next page up. It would
+ be more correct to do this:
+ ${RELOCATING+. = ${DATA_ADDR-ALIGN(${MAXPAGESIZE}) + (ALIGN(8) & (${MAXPAGESIZE} - 1))};}
+ The current expression does not correctly handle the case of a
+ text segment ending precisely at the end of a page; it causes the
+ data segment to skip a page. The above expression does not have
+ this problem, but it will currently (2/95) cause BFD to allocate
+ a single segment, combining both text and data, for this case.
+ This will prevent the text segment from being shared among
+ multiple executions of the program; I think that is more
+ important than losing a page of the virtual address space (note
+ that no actual memory is lost; the page which is skipped can not
+ be referenced). */
+ ${RELOCATING+. = ${DATA_ADDR- ALIGN(8) + ${MAXPAGESIZE}};}
+
+ .data ${RELOCATING-0} :
+ {
+ ${RELOCATING+${DATA_START_SYMBOLS}}
+ *(.data)
+ *(.gnu.linkonce.d*)
+ ${CONSTRUCTING+CONSTRUCTORS}
+ }
+ .data1 ${RELOCATING-0} : { *(.data1) }
+ ${OTHER_READWRITE_SECTIONS}
+
+ .got1 ${RELOCATING-0} : { *(.got1) }
+ .dynamic ${RELOCATING-0} : { *(.dynamic) }
+
+ /* Put .ctors and .dtors next to the .got2 section, so that the pointers
+ get relocated with -mrelocatable. Also put in the .fixup pointers.
+ The current compiler no longer needs this, but keep it around for 2.7.2 */
+
+ ${RELOCATING+PROVIDE (_GOT2_START_ = .);}
+ .got2 ${RELOCATING-0} : { *(.got2) }
+
+ ${RELOCATING+PROVIDE (__CTOR_LIST__ = .);}
+ .ctors ${RELOCATING-0} : { *(.ctors) }
+ ${RELOCATING+PROVIDE (__CTOR_END__ = .);}
+
+ ${RELOCATING+PROVIDE (__DTOR_LIST__ = .);}
+ .dtors ${RELOCATING-0} : { *(.dtors) }
+ ${RELOCATING+PROVIDE (__DTOR_END__ = .);}
+
+ ${RELOCATING+PROVIDE (_FIXUP_START_ = .);}
+ .fixup ${RELOCATING-0} : { *(.fixup) }
+ ${RELOCATING+PROVIDE (_FIXUP_END_ = .);}
+ ${RELOCATING+PROVIDE (_GOT2_END_ = .);}
+
+ ${RELOCATING+PROVIDE (_GOT_START_ = .);}
+ .got ${RELOCATING-0} : { *(.got) }
+ .got.plt ${RELOCATING-0} : { *(.got.plt) }
+ ${CREATE_SHLIB+${SDATA2}}
+ ${CREATE_SHLIB+${SBSS2}}
+ ${RELOCATING+PROVIDE (_GOT_END_ = .);}
+
+ /* We want the small data sections together, so single-instruction offsets
+ can access them all, and initialized data all before uninitialized, so
+ we can shorten the on-disk segment size. */
+ .sdata ${RELOCATING-0} : { *(.sdata) }
+ ${RELOCATING+_edata = .;}
+ ${RELOCATING+PROVIDE (edata = .);}
+ .sbss ${RELOCATING-0} :
+ {
+ ${RELOCATING+PROVIDE (__sbss_start = .);}
+ *(.sbss)
+ *(.scommon)
+ *(.dynsbss)
+ ${RELOCATING+PROVIDE (__sbss_end = .);}
+ }
+ ${PLT}
+ .bss ${RELOCATING-0} :
+ {
+ ${RELOCATING+${OTHER_BSS_SYMBOLS}}
+ ${RELOCATING+PROVIDE (__bss_start = .);}
+ *(.dynbss)
+ *(.bss)
+ *(COMMON)
+ }
+ ${RELOCATING+_end = . ;}
+ ${RELOCATING+PROVIDE (end = .);}
+
+ /* These are needed for ELF backends which have not yet been
+ converted to the new style linker. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo .zdebug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames .zdebug_sfnames) }
+
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges .zdebug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames .zdebug_pubnames) }
+
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*} .zdebug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev .zdebug_abbrev) }
+ .debug_line 0 : { *(.debug_line .zdebug_line) }
+ .debug_frame 0 : { *(.debug_frame .zdebug_frame) }
+ .debug_str 0 : { *(.debug_str .zdebug_str) }
+ .debug_loc 0 : { *(.debug_loc .zdebug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo .zdebug_macinfo) }
+
+ /* SGI/MIPS DWARF 2 extensions */
+ .debug_weaknames 0 : { *(.debug_weaknames .zdebug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames .zdebug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames .zdebug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames .zdebug_varnames) }
+
+ ${ATTRS_SECTIONS}
+ ${OTHER_SECTIONS}
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/elfm68hc11.sc b/binutils-2.21/ld/scripttempl/elfm68hc11.sc
new file mode 100644
index 0000000..e3d5e9a
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/elfm68hc11.sc
@@ -0,0 +1,460 @@
+#
+# Unusual variables checked by this code:
+# NOP - four byte opcode for no-op (defaults to 0)
+# DATA_ADDR - if end-of-text-plus-one-page isn't right for data start
+# OTHER_READWRITE_SECTIONS - other than .data .bss .ctors .sdata ...
+# (e.g., .PARISC.global)
+# OTHER_SECTIONS - at the end
+# EXECUTABLE_SYMBOLS - symbols that must be defined for an
+# executable (e.g., _DYNAMIC_LINK)
+# TEXT_START_SYMBOLS - symbols that appear at the start of the
+# .text section.
+# DATA_START_SYMBOLS - symbols that appear at the start of the
+# .data section.
+# OTHER_BSS_SYMBOLS - symbols that appear at the start of the
+# .bss section besides __bss_start.
+# EMBEDDED - whether this is for an embedded system.
+#
+# When adding sections, do note that the names of some sections are used
+# when specifying the start address of the next.
+#
+test -z "$ENTRY" && ENTRY=_start
+test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi
+test "$LD_FLAG" = "N" && DATA_ADDR=.
+
+CTOR=".ctors ${CONSTRUCTING-0} :
+ {
+ ${CONSTRUCTING+ PROVIDE (__CTOR_LIST__ = .); }
+ ${CONSTRUCTING+${CTOR_START}}
+ KEEP (*(.ctors))
+
+ ${CONSTRUCTING+${CTOR_END}}
+ ${CONSTRUCTING+ PROVIDE(__CTOR_END__ = .); }
+ } ${RELOCATING+ > ${TEXT_MEMORY}}"
+
+DTOR=" .dtors ${CONSTRUCTING-0} :
+ {
+ ${CONSTRUCTING+ PROVIDE(__DTOR_LIST__ = .); }
+ KEEP (*(.dtors))
+ ${CONSTRUCTING+ PROVIDE(__DTOR_END__ = .); }
+ } ${RELOCATING+ > ${TEXT_MEMORY}}"
+
+
+VECTORS="
+ /* If the 'vectors_addr' symbol is defined, it indicates the start address
+ of interrupt vectors. This depends on the 68HC11 operating mode:
+
+ Addr
+ Single chip 0xffc0
+ Extended mode 0xffc0
+ Bootstrap 0x00c0
+ Test 0xbfc0
+
+ In general, the vectors address is 0xffc0. This can be overriden
+ with the '-defsym vectors_addr=0xbfc0' ld option.
+
+ Note: for the bootstrap mode, the interrupt vectors are at 0xbfc0 but
+ they are redirected to 0x00c0 by the internal PROM. Application's vectors
+ must also consist of jump instructions (see Motorola's manual). */
+
+ PROVIDE (_vectors_addr = DEFINED (vectors_addr) ? vectors_addr : 0xffc0);
+ .vectors DEFINED (vectors_addr) ? vectors_addr : 0xffc0 :
+ {
+ KEEP (*(.vectors))
+ }"
+
+#
+# We provide two emulations: a fixed on that defines some memory banks
+# and a configurable one that includes a user provided memory definition.
+#
+case $GENERIC_BOARD in
+ yes|1|YES)
+ MEMORY_DEF="
+/* Get memory banks definition from some user configuration file.
+ This file must be located in some linker directory (search path
+ with -L<dir>). See fixed memory banks emulation script. */
+INCLUDE memory.x;
+"
+ ;;
+ *)
+MEMORY_DEF="
+/* Fixed definition of the available memory banks.
+ See generic emulation script for a user defined configuration. */
+MEMORY
+{
+ page0 (rwx) : ORIGIN = 0x0, LENGTH = 256
+ text (rx) : ORIGIN = ${ROM_START_ADDR}, LENGTH = ${ROM_SIZE}
+ data : ORIGIN = ${RAM_START_ADDR}, LENGTH = ${RAM_SIZE}
+ eeprom : ORIGIN = ${EEPROM_START_ADDR}, LENGTH = ${EEPROM_SIZE}
+}
+
+/* Setup the stack on the top of the data memory bank. */
+PROVIDE (_stack = ${RAM_START_ADDR} + ${RAM_SIZE} - 1);
+"
+ ;;
+esac
+
+STARTUP_CODE="
+ /* Startup code. */
+ KEEP (*(.install0)) /* Section should setup the stack pointer. */
+ KEEP (*(.install1)) /* Place holder for applications. */
+ KEEP (*(.install2)) /* Optional installation of data sections in RAM. */
+ KEEP (*(.install3)) /* Place holder for applications. */
+ KEEP (*(.install4)) /* Section that calls the main. */
+"
+
+FINISH_CODE="
+ /* Finish code. */
+ KEEP (*(.fini0)) /* Beginning of finish code (_exit symbol). */
+ KEEP (*(.fini1)) /* Place holder for applications. */
+ KEEP (*(.fini2)) /* C++ destructors. */
+ KEEP (*(.fini3)) /* Place holder for applications. */
+ KEEP (*(.fini4)) /* Runtime exit. */
+"
+
+PRE_COMPUTE_DATA_SIZE="
+/* SCz: this does not work yet... This is supposed to force the loading
+ of _map_data.o (from libgcc.a) when the .data section is not empty.
+ By doing so, this should bring the code that copies the .data section
+ from ROM to RAM at init time.
+
+ ___pre_comp_data_size = SIZEOF(.data);
+ __install_data_sections = ___pre_comp_data_size > 0 ?
+ __map_data_sections : 0;
+*/
+"
+
+INSTALL_RELOC="
+ .install0 0 : { *(.install0) }
+ .install1 0 : { *(.install1) }
+ .install2 0 : { *(.install2) }
+ .install3 0 : { *(.install3) }
+ .install4 0 : { *(.install4) }
+"
+
+FINISH_RELOC="
+ .fini0 0 : { *(.fini0) }
+ .fini1 0 : { *(.fini1) }
+ .fini2 0 : { *(.fini2) }
+ .fini3 0 : { *(.fini3) }
+ .fini4 0 : { *(.fini4) }
+"
+
+BSS_DATA_RELOC="
+ .data1 0 : { *(.data1) }
+
+ /* We want the small data sections together, so single-instruction offsets
+ can access them all, and initialized data all before uninitialized, so
+ we can shorten the on-disk segment size. */
+ .sdata 0 : { *(.sdata) }
+ .sbss 0 : { *(.sbss) }
+ .scommon 0 : { *(.scommon) }
+"
+
+SOFT_REGS_RELOC="
+ .softregs 0 : { *(.softregs) }
+"
+
+cat <<EOF
+${RELOCATING+/* Linker script for 68HC11 executable (PROM). */}
+${RELOCATING-/* Linker script for 68HC11 object file (ld -r). */}
+
+OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
+ "${LITTLE_OUTPUT_FORMAT}")
+OUTPUT_ARCH(${OUTPUT_ARCH})
+${RELOCATING+ENTRY(${ENTRY})}
+
+${RELOCATING+${LIB_SEARCH_DIRS}}
+${RELOCATING+${EXECUTABLE_SYMBOLS}}
+${RELOCATING+${MEMORY_DEF}}
+
+SECTIONS
+{
+ .hash ${RELOCATING-0} : { *(.hash) }
+ .dynsym ${RELOCATING-0} : { *(.dynsym) }
+ .dynstr ${RELOCATING-0} : { *(.dynstr) }
+ .gnu.version ${RELOCATING-0} : { *(.gnu.version) }
+ .gnu.version_d ${RELOCATING-0} : { *(.gnu.version_d) }
+ .gnu.version_r ${RELOCATING-0} : { *(.gnu.version_r) }
+
+ .rel.text ${RELOCATING-0} :
+ {
+ *(.rel.text)
+ ${RELOCATING+*(.rel.text.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.t.*)}
+ }
+ .rela.text ${RELOCATING-0} :
+ {
+ *(.rela.text)
+ ${RELOCATING+*(.rela.text.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.t.*)}
+ }
+ .rel.data ${RELOCATING-0} :
+ {
+ *(.rel.data)
+ ${RELOCATING+*(.rel.data.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.d.*)}
+ }
+ .rela.data ${RELOCATING-0} :
+ {
+ *(.rela.data)
+ ${RELOCATING+*(.rela.data.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.d.*)}
+ }
+ .rel.rodata ${RELOCATING-0} :
+ {
+ *(.rel.rodata)
+ ${RELOCATING+*(.rel.rodata.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.r.*)}
+ }
+ .rela.rodata ${RELOCATING-0} :
+ {
+ *(.rela.rodata)
+ ${RELOCATING+*(.rela.rodata.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.r.*)}
+ }
+ .rel.sdata ${RELOCATING-0} :
+ {
+ *(.rel.sdata)
+ ${RELOCATING+*(.rel.sdata.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.s.*)}
+ }
+ .rela.sdata ${RELOCATING-0} :
+ {
+ *(.rela.sdata)
+ ${RELOCATING+*(.rela.sdata.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.s.*)}
+ }
+ .rel.sbss ${RELOCATING-0} :
+ {
+ *(.rel.sbss)
+ ${RELOCATING+*(.rel.sbss.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.sb.*)}
+ }
+ .rela.sbss ${RELOCATING-0} :
+ {
+ *(.rela.sbss)
+ ${RELOCATING+*(.rela.sbss.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.sb.*)}
+ }
+ .rel.bss ${RELOCATING-0} :
+ {
+ *(.rel.bss)
+ ${RELOCATING+*(.rel.bss.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.b.*)}
+ }
+ .rela.bss ${RELOCATING-0} :
+ {
+ *(.rela.bss)
+ ${RELOCATING+*(.rela.bss.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.b.*)}
+ }
+ .rel.stext ${RELOCATING-0} : { *(.rel.stest) }
+ .rela.stext ${RELOCATING-0} : { *(.rela.stest) }
+ .rel.etext ${RELOCATING-0} : { *(.rel.etest) }
+ .rela.etext ${RELOCATING-0} : { *(.rela.etest) }
+ .rel.sdata ${RELOCATING-0} : { *(.rel.sdata) }
+ .rela.sdata ${RELOCATING-0} : { *(.rela.sdata) }
+ .rel.edata ${RELOCATING-0} : { *(.rel.edata) }
+ .rela.edata ${RELOCATING-0} : { *(.rela.edata) }
+ .rel.eit_v ${RELOCATING-0} : { *(.rel.eit_v) }
+ .rela.eit_v ${RELOCATING-0} : { *(.rela.eit_v) }
+ .rel.ebss ${RELOCATING-0} : { *(.rel.ebss) }
+ .rela.ebss ${RELOCATING-0} : { *(.rela.ebss) }
+ .rel.srodata ${RELOCATING-0} : { *(.rel.srodata) }
+ .rela.srodata ${RELOCATING-0} : { *(.rela.srodata) }
+ .rel.erodata ${RELOCATING-0} : { *(.rel.erodata) }
+ .rela.erodata ${RELOCATING-0} : { *(.rela.erodata) }
+ .rel.got ${RELOCATING-0} : { *(.rel.got) }
+ .rela.got ${RELOCATING-0} : { *(.rela.got) }
+ .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) }
+ .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) }
+ .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) }
+ .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) }
+ .rel.init ${RELOCATING-0} : { *(.rel.init) }
+ .rela.init ${RELOCATING-0} : { *(.rela.init) }
+ .rel.fini ${RELOCATING-0} : { *(.rel.fini) }
+ .rela.fini ${RELOCATING-0} : { *(.rela.fini) }
+ .rel.plt ${RELOCATING-0} : { *(.rel.plt) }
+ .rela.plt ${RELOCATING-0} : { *(.rela.plt) }
+
+ /* Concatenate .page0 sections. Put them in the page0 memory bank
+ unless we are creating a relocatable file. */
+ .page0 :
+ {
+ *(.page0)
+ ${RELOCATING+*(.softregs)}
+ } ${RELOCATING+ > page0}
+
+ /* Start of text section. */
+ .stext ${RELOCATING-0} :
+ {
+ *(.stext)
+ } ${RELOCATING+ > ${TEXT_MEMORY}}
+
+ .init ${RELOCATING-0} :
+ {
+ *(.init)
+ } ${RELOCATING+=${NOP-0}}
+
+ ${RELOCATING-${INSTALL_RELOC}}
+ ${RELOCATING-${FINISH_RELOC}}
+
+ .text ${RELOCATING-0}:
+ {
+ /* Put startup code at beginning so that _start keeps same address. */
+ ${RELOCATING+${STARTUP_CODE}}
+
+ ${RELOCATING+*(.init)}
+ *(.text)
+ ${RELOCATING+*(.text.*)}
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ ${RELOCATING+*(.gnu.linkonce.t.*)}
+ ${RELOCATING+*(.tramp)}
+ ${RELOCATING+*(.tramp.*)}
+
+ ${RELOCATING+${FINISH_CODE}}
+
+ ${RELOCATING+_etext = .;}
+ ${RELOCATING+PROVIDE (etext = .);}
+
+ } ${RELOCATING+ > ${TEXT_MEMORY}}
+
+ .eh_frame ${RELOCATING-0} :
+ {
+ KEEP (*(.eh_frame))
+ } ${RELOCATING+ > ${TEXT_MEMORY}}
+
+ .gcc_except_table ${RELOCATING-0} :
+ {
+ *(.gcc_except_table)
+ } ${RELOCATING+ > ${TEXT_MEMORY}}
+
+ .rodata ${RELOCATING-0} :
+ {
+ *(.rodata)
+ ${RELOCATING+*(.rodata.*)}
+ ${RELOCATING+*(.gnu.linkonce.r*)}
+ } ${RELOCATING+ > ${TEXT_MEMORY}}
+
+ .rodata1 ${RELOCATING-0} :
+ {
+ *(.rodata1)
+ } ${RELOCATING+ > ${TEXT_MEMORY}}
+
+ /* Constructor and destructor tables are in ROM. */
+ ${RELOCATING+${CTOR}}
+ ${RELOCATING+${DTOR}}
+
+ .jcr ${RELOCATING-0} :
+ {
+ KEEP (*(.jcr))
+ } ${RELOCATING+ > ${TEXT_MEMORY}}
+
+ /* Start of the data section image in ROM. */
+ ${RELOCATING+__data_image = .;}
+ ${RELOCATING+PROVIDE (__data_image = .);}
+
+ /* All read-only sections that normally go in PROM must be above.
+ We construct the DATA image section in PROM at end of all these
+ read-only sections. The data image must be copied at init time.
+ Refer to GNU ld, Section 3.6.8.2 Output Section LMA. */
+ .data ${RELOCATING-0} : ${RELOCATING+AT (__data_image)}
+ {
+ ${RELOCATING+__data_section_start = .;}
+ ${RELOCATING+PROVIDE (__data_section_start = .);}
+
+ ${RELOCATING+${DATA_START_SYMBOLS}}
+ ${RELOCATING+*(.sdata)}
+ *(.data)
+ ${RELOCATING+*(.data.*)}
+ ${RELOCATING+*(.data1)}
+ ${RELOCATING+*(.gnu.linkonce.d.*)}
+ ${CONSTRUCTING+CONSTRUCTORS}
+
+ ${RELOCATING+_edata = .;}
+ ${RELOCATING+PROVIDE (edata = .);}
+ } ${RELOCATING+ > ${DATA_MEMORY}}
+
+ ${RELOCATING+__data_section_size = SIZEOF(.data);}
+ ${RELOCATING+PROVIDE (__data_section_size = SIZEOF(.data));}
+ ${RELOCATING+__data_image_end = __data_image + __data_section_size;}
+
+ ${RELOCATING+${PRE_COMPUTE_DATA_SIZE}}
+
+ /* .install ${RELOCATING-0}:
+ {
+ . = _data_image_end;
+ } ${RELOCATING+ > ${TEXT_MEMORY}} */
+
+ /* Relocation for some bss and data sections. */
+ ${RELOCATING-${BSS_DATA_RELOC}}
+ ${RELOCATING-${SOFT_REGS_RELOC}}
+
+ .bss ${RELOCATING-0} :
+ {
+ ${RELOCATING+__bss_start = .;}
+ ${RELOCATING+*(.sbss)}
+ ${RELOCATING+*(.scommon)}
+
+ *(.dynbss)
+ *(.bss)
+ ${RELOCATING+*(.bss.*)}
+ ${RELOCATING+*(.gnu.linkonce.b.*)}
+ *(COMMON)
+ ${RELOCATING+PROVIDE (_end = .);}
+ } ${RELOCATING+ > ${DATA_MEMORY}}
+ ${RELOCATING+__bss_size = SIZEOF(.bss);}
+ ${RELOCATING+PROVIDE (__bss_size = SIZEOF(.bss));}
+
+ .eeprom ${RELOCATING-0} :
+ {
+ *(.eeprom)
+ *(.eeprom.*)
+ } ${RELOCATING+ > ${EEPROM_MEMORY}}
+
+ ${RELOCATING+${VECTORS}}
+
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+
+ .comment 0 : { *(.comment) }
+
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0.
+ Treatment of DWARF debug section must be at end of the linker
+ script to avoid problems when there are undefined symbols. It's necessary
+ to avoid that the DWARF section is relocated before such undefined
+ symbols are found. */
+
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo .zdebug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames .zdebug_sfnames) }
+
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges .zdebug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames .zdebug_pubnames) }
+
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*} .zdebug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev .zdebug_abbrev) }
+ .debug_line 0 : { *(.debug_line .zdebug_line) }
+ .debug_frame 0 : { *(.debug_frame .zdebug_frame) }
+ .debug_str 0 : { *(.debug_str .zdebug_str) }
+ .debug_loc 0 : { *(.debug_loc .zdebug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo .zdebug_macinfo) }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/elfm68hc12.sc b/binutils-2.21/ld/scripttempl/elfm68hc12.sc
new file mode 100644
index 0000000..48df867
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/elfm68hc12.sc
@@ -0,0 +1,463 @@
+#
+# Unusual variables checked by this code:
+# NOP - four byte opcode for no-op (defaults to 0)
+# DATA_ADDR - if end-of-text-plus-one-page isn't right for data start
+# OTHER_READWRITE_SECTIONS - other than .data .bss .ctors .sdata ...
+# (e.g., .PARISC.global)
+# OTHER_SECTIONS - at the end
+# EXECUTABLE_SYMBOLS - symbols that must be defined for an
+# executable (e.g., _DYNAMIC_LINK)
+# TEXT_START_SYMBOLS - symbols that appear at the start of the
+# .text section.
+# DATA_START_SYMBOLS - symbols that appear at the start of the
+# .data section.
+# OTHER_BSS_SYMBOLS - symbols that appear at the start of the
+# .bss section besides __bss_start.
+# EMBEDDED - whether this is for an embedded system.
+#
+# When adding sections, do note that the names of some sections are used
+# when specifying the start address of the next.
+#
+test -z "$ENTRY" && ENTRY=_start
+test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi
+test "$LD_FLAG" = "N" && DATA_ADDR=.
+
+CTOR=".ctors ${CONSTRUCTING-0} :
+ {
+ ${CONSTRUCTING+ PROVIDE (__CTOR_LIST__ = .); }
+ ${CONSTRUCTING+${CTOR_START}}
+ KEEP (*(.ctors))
+
+ ${CONSTRUCTING+${CTOR_END}}
+ ${CONSTRUCTING+ PROVIDE(__CTOR_END__ = .); }
+ } ${RELOCATING+ > ${TEXT_MEMORY}}"
+
+DTOR=" .dtors ${CONSTRUCTING-0} :
+ {
+ ${CONSTRUCTING+ PROVIDE(__DTOR_LIST__ = .); }
+ KEEP (*(.dtors))
+ ${CONSTRUCTING+ PROVIDE(__DTOR_END__ = .); }
+ } ${RELOCATING+ > ${TEXT_MEMORY}}"
+
+
+VECTORS="
+ /* If the 'vectors_addr' symbol is defined, it indicates the start address
+ of interrupt vectors. This depends on the 68HC11 operating mode:
+
+ Addr
+ Single chip 0xffc0
+ Extended mode 0xffc0
+ Bootstrap 0x00c0
+ Test 0xbfc0
+
+ In general, the vectors address is 0xffc0. This can be overriden
+ with the '-defsym vectors_addr=0xbfc0' ld option.
+
+ Note: for the bootstrap mode, the interrupt vectors are at 0xbfc0 but
+ they are redirected to 0x00c0 by the internal PROM. Application's vectors
+ must also consist of jump instructions (see Motorola's manual). */
+
+ PROVIDE (_vectors_addr = DEFINED (vectors_addr) ? vectors_addr : 0xffc0);
+ .vectors DEFINED (vectors_addr) ? vectors_addr : 0xffc0 :
+ {
+ KEEP (*(.vectors))
+ }"
+
+#
+# We provide two emulations: a fixed on that defines some memory banks
+# and a configurable one that includes a user provided memory definition.
+#
+case $GENERIC_BOARD in
+ yes|1|YES)
+ MEMORY_DEF="
+/* Get memory banks definition from some user configuration file.
+ This file must be located in some linker directory (search path
+ with -L<dir>). See fixed memory banks emulation script. */
+INCLUDE memory.x;
+"
+ ;;
+ *)
+MEMORY_DEF="
+/* Fixed definition of the available memory banks.
+ See generic emulation script for a user defined configuration. */
+MEMORY
+{
+ page0 (rwx) : ORIGIN = 0x0, LENGTH = 256
+ text (rx) : ORIGIN = ${ROM_START_ADDR}, LENGTH = ${ROM_SIZE}
+ data : ORIGIN = ${RAM_START_ADDR}, LENGTH = ${RAM_SIZE}
+ eeprom : ORIGIN = ${EEPROM_START_ADDR}, LENGTH = ${EEPROM_SIZE}
+}
+
+/* Setup the stack on the top of the data memory bank. */
+PROVIDE (_stack = ${RAM_START_ADDR} + ${RAM_SIZE} - 1);
+"
+ ;;
+esac
+
+STARTUP_CODE="
+ /* Startup code. */
+ KEEP (*(.install0)) /* Section should setup the stack pointer. */
+ KEEP (*(.install1)) /* Place holder for applications. */
+ KEEP (*(.install2)) /* Optional installation of data sections in RAM. */
+ KEEP (*(.install3)) /* Place holder for applications. */
+ KEEP (*(.install4)) /* Section that calls the main. */
+"
+
+FINISH_CODE="
+ /* Finish code. */
+ KEEP (*(.fini0)) /* Beginning of finish code (_exit symbol). */
+ KEEP (*(.fini1)) /* Place holder for applications. */
+ KEEP (*(.fini2)) /* C++ destructors. */
+ KEEP (*(.fini3)) /* Place holder for applications. */
+ KEEP (*(.fini4)) /* Runtime exit. */
+"
+
+PRE_COMPUTE_DATA_SIZE="
+/* SCz: this does not work yet... This is supposed to force the loading
+ of _map_data.o (from libgcc.a) when the .data section is not empty.
+ By doing so, this should bring the code that copies the .data section
+ from ROM to RAM at init time.
+
+ ___pre_comp_data_size = SIZEOF(.data);
+ __install_data_sections = ___pre_comp_data_size > 0 ?
+ __map_data_sections : 0;
+*/
+"
+
+INSTALL_RELOC="
+ .install0 0 : { *(.install0) }
+ .install1 0 : { *(.install1) }
+ .install2 0 : { *(.install2) }
+ .install3 0 : { *(.install3) }
+ .install4 0 : { *(.install4) }
+"
+
+FINISH_RELOC="
+ .fini0 0 : { *(.fini0) }
+ .fini1 0 : { *(.fini1) }
+ .fini2 0 : { *(.fini2) }
+ .fini3 0 : { *(.fini3) }
+ .fini4 0 : { *(.fini4) }
+"
+
+BSS_DATA_RELOC="
+ .data1 0 : { *(.data1) }
+
+ /* We want the small data sections together, so single-instruction offsets
+ can access them all, and initialized data all before uninitialized, so
+ we can shorten the on-disk segment size. */
+ .sdata 0 : { *(.sdata) }
+ .sbss 0 : { *(.sbss) }
+ .scommon 0 : { *(.scommon) }
+"
+
+SOFT_REGS_RELOC="
+ .softregs 0 : { *(.softregs) }
+"
+
+cat <<EOF
+${RELOCATING+/* Linker script for 68HC12 executable (PROM). */}
+${RELOCATING-/* Linker script for 68HC12 object file (ld -r). */}
+
+OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
+ "${LITTLE_OUTPUT_FORMAT}")
+OUTPUT_ARCH(${OUTPUT_ARCH})
+${RELOCATING+ENTRY(${ENTRY})}
+
+${RELOCATING+${LIB_SEARCH_DIRS}}
+${RELOCATING+${EXECUTABLE_SYMBOLS}}
+${RELOCATING+${MEMORY_DEF}}
+
+SECTIONS
+{
+ .hash ${RELOCATING-0} : { *(.hash) }
+ .dynsym ${RELOCATING-0} : { *(.dynsym) }
+ .dynstr ${RELOCATING-0} : { *(.dynstr) }
+ .gnu.version ${RELOCATING-0} : { *(.gnu.version) }
+ .gnu.version_d ${RELOCATING-0} : { *(.gnu.version_d) }
+ .gnu.version_r ${RELOCATING-0} : { *(.gnu.version_r) }
+
+ .rel.text ${RELOCATING-0} :
+ {
+ *(.rel.text)
+ ${RELOCATING+*(.rel.text.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.t.*)}
+ }
+ .rela.text ${RELOCATING-0} :
+ {
+ *(.rela.text)
+ ${RELOCATING+*(.rela.text.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.t.*)}
+ }
+ .rel.data ${RELOCATING-0} :
+ {
+ *(.rel.data)
+ ${RELOCATING+*(.rel.data.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.d.*)}
+ }
+ .rela.data ${RELOCATING-0} :
+ {
+ *(.rela.data)
+ ${RELOCATING+*(.rela.data.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.d.*)}
+ }
+ .rel.rodata ${RELOCATING-0} :
+ {
+ *(.rel.rodata)
+ ${RELOCATING+*(.rel.rodata.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.r.*)}
+ }
+ .rela.rodata ${RELOCATING-0} :
+ {
+ *(.rela.rodata)
+ ${RELOCATING+*(.rela.rodata.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.r.*)}
+ }
+ .rel.sdata ${RELOCATING-0} :
+ {
+ *(.rel.sdata)
+ ${RELOCATING+*(.rel.sdata.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.s.*)}
+ }
+ .rela.sdata ${RELOCATING-0} :
+ {
+ *(.rela.sdata)
+ ${RELOCATING+*(.rela.sdata.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.s.*)}
+ }
+ .rel.sbss ${RELOCATING-0} :
+ {
+ *(.rel.sbss)
+ ${RELOCATING+*(.rel.sbss.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.sb.*)}
+ }
+ .rela.sbss ${RELOCATING-0} :
+ {
+ *(.rela.sbss)
+ ${RELOCATING+*(.rela.sbss.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.sb.*)}
+ }
+ .rel.bss ${RELOCATING-0} :
+ {
+ *(.rel.bss)
+ ${RELOCATING+*(.rel.bss.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.b.*)}
+ }
+ .rela.bss ${RELOCATING-0} :
+ {
+ *(.rela.bss)
+ ${RELOCATING+*(.rela.bss.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.b.*)}
+ }
+ .rel.stext ${RELOCATING-0} : { *(.rel.stest) }
+ .rela.stext ${RELOCATING-0} : { *(.rela.stest) }
+ .rel.etext ${RELOCATING-0} : { *(.rel.etest) }
+ .rela.etext ${RELOCATING-0} : { *(.rela.etest) }
+ .rel.sdata ${RELOCATING-0} : { *(.rel.sdata) }
+ .rela.sdata ${RELOCATING-0} : { *(.rela.sdata) }
+ .rel.edata ${RELOCATING-0} : { *(.rel.edata) }
+ .rela.edata ${RELOCATING-0} : { *(.rela.edata) }
+ .rel.eit_v ${RELOCATING-0} : { *(.rel.eit_v) }
+ .rela.eit_v ${RELOCATING-0} : { *(.rela.eit_v) }
+ .rel.ebss ${RELOCATING-0} : { *(.rel.ebss) }
+ .rela.ebss ${RELOCATING-0} : { *(.rela.ebss) }
+ .rel.srodata ${RELOCATING-0} : { *(.rel.srodata) }
+ .rela.srodata ${RELOCATING-0} : { *(.rela.srodata) }
+ .rel.erodata ${RELOCATING-0} : { *(.rel.erodata) }
+ .rela.erodata ${RELOCATING-0} : { *(.rela.erodata) }
+ .rel.got ${RELOCATING-0} : { *(.rel.got) }
+ .rela.got ${RELOCATING-0} : { *(.rela.got) }
+ .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) }
+ .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) }
+ .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) }
+ .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) }
+ .rel.init ${RELOCATING-0} : { *(.rel.init) }
+ .rela.init ${RELOCATING-0} : { *(.rela.init) }
+ .rel.fini ${RELOCATING-0} : { *(.rel.fini) }
+ .rela.fini ${RELOCATING-0} : { *(.rela.fini) }
+ .rel.plt ${RELOCATING-0} : { *(.rel.plt) }
+ .rela.plt ${RELOCATING-0} : { *(.rela.plt) }
+
+ /* Concatenate .page0 sections. Put them in the page0 memory bank
+ unless we are creating a relocatable file. */
+ .page0 :
+ {
+ *(.page0)
+ } ${RELOCATING+ > page0}
+
+ /* Start of text section. */
+ .stext ${RELOCATING-0} :
+ {
+ *(.stext)
+ } ${RELOCATING+ > ${TEXT_MEMORY}}
+
+ .init ${RELOCATING-0} :
+ {
+ *(.init)
+ } ${RELOCATING+=${NOP-0}}
+
+ ${RELOCATING-${INSTALL_RELOC}}
+ ${RELOCATING-${FINISH_RELOC}}
+
+ .text ${RELOCATING-0}:
+ {
+ /* Put startup code at beginning so that _start keeps same address. */
+ ${RELOCATING+${STARTUP_CODE}}
+
+ ${RELOCATING+*(.init)}
+ *(.text)
+ ${RELOCATING+*(.text.*)}
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ ${RELOCATING+*(.gnu.linkonce.t.*)}
+ ${RELOCATING+*(.tramp)}
+ ${RELOCATING+*(.tramp.*)}
+
+ ${RELOCATING+${FINISH_CODE}}
+
+ ${RELOCATING+_etext = .;}
+ ${RELOCATING+PROVIDE (etext = .);}
+ ${RELOCATING+. = ALIGN(2);}
+ } ${RELOCATING+ > ${TEXT_MEMORY} =0xa7a7a7a7}
+
+ .eh_frame ${RELOCATING-0} :
+ {
+ KEEP (*(.eh_frame))
+ } ${RELOCATING+ > ${TEXT_MEMORY}}
+
+ .gcc_except_table ${RELOCATING-0} :
+ {
+ *(.gcc_except_table)
+ } ${RELOCATING+ > ${TEXT_MEMORY}}
+
+ .rodata ${RELOCATING-0} :
+ {
+ *(.rodata)
+ ${RELOCATING+*(.rodata.*)}
+ ${RELOCATING+*(.gnu.linkonce.r*)}
+ ${RELOCATING+. = ALIGN(2);}
+ } ${RELOCATING+ > ${TEXT_MEMORY} =0xffffffff}
+
+ .rodata1 ${RELOCATING-0} :
+ {
+ *(.rodata1)
+ ${RELOCATING+. = ALIGN(2);}
+ } ${RELOCATING+ > ${TEXT_MEMORY} =0xffffffff}
+
+ /* Constructor and destructor tables are in ROM. */
+ ${RELOCATING+${CTOR}}
+ ${RELOCATING+${DTOR}}
+
+ .jcr ${RELOCATING-0} :
+ {
+ KEEP (*(.jcr))
+ } ${RELOCATING+ > ${TEXT_MEMORY}}
+
+ /* Start of the data section image in ROM. */
+ ${RELOCATING+__data_image = .;}
+ ${RELOCATING+PROVIDE (__data_image = .);}
+
+ /* All read-only sections that normally go in PROM must be above.
+ We construct the DATA image section in PROM at end of all these
+ read-only sections. The data image must be copied at init time.
+ Refer to GNU ld, Section 3.6.8.2 Output Section LMA. */
+ .data ${RELOCATING-0} : ${RELOCATING+AT (__data_image)}
+ {
+ ${RELOCATING+__data_section_start = .;}
+ ${RELOCATING+PROVIDE (__data_section_start = .);}
+
+ ${RELOCATING+${DATA_START_SYMBOLS}}
+ ${RELOCATING+*(.sdata)}
+ *(.data)
+ ${RELOCATING+*(.data.*)}
+ ${RELOCATING+*(.data1)}
+ ${RELOCATING+*(.gnu.linkonce.d.*)}
+ ${CONSTRUCTING+CONSTRUCTORS}
+
+ ${RELOCATING+_edata = .;}
+ ${RELOCATING+PROVIDE (edata = .);}
+ ${RELOCATING+. = ALIGN(2);}
+ } ${RELOCATING+ > ${DATA_MEMORY} =0xffffffff}
+
+ ${RELOCATING+__data_section_size = SIZEOF(.data);}
+ ${RELOCATING+PROVIDE (__data_section_size = SIZEOF(.data));}
+ ${RELOCATING+__data_image_end = __data_image + __data_section_size;}
+
+ ${RELOCATING+${PRE_COMPUTE_DATA_SIZE}}
+
+ /* .install ${RELOCATING-0}:
+ {
+ . = _data_image_end;
+ } ${RELOCATING+ > ${TEXT_MEMORY}} */
+
+ /* Relocation for some bss and data sections. */
+ ${RELOCATING-${BSS_DATA_RELOC}}
+ ${RELOCATING-${SOFT_REGS_RELOC}}
+
+ .bss ${RELOCATING-0} :
+ {
+ ${RELOCATING+__bss_start = .;}
+ ${RELOCATING+*(.softregs)}
+ ${RELOCATING+*(.sbss)}
+ ${RELOCATING+*(.scommon)}
+
+ *(.dynbss)
+ *(.bss)
+ ${RELOCATING+*(.bss.*)}
+ ${RELOCATING+*(.gnu.linkonce.b.*)}
+ *(COMMON)
+ ${RELOCATING+PROVIDE (_end = .);}
+ } ${RELOCATING+ > ${DATA_MEMORY}}
+ ${RELOCATING+__bss_size = SIZEOF(.bss);}
+ ${RELOCATING+PROVIDE (__bss_size = SIZEOF(.bss));}
+
+ .eeprom ${RELOCATING-0} :
+ {
+ *(.eeprom)
+ *(.eeprom.*)
+ } ${RELOCATING+ > ${EEPROM_MEMORY}}
+
+ ${RELOCATING+${VECTORS}}
+
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+
+ .comment 0 : { *(.comment) }
+
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0.
+ Treatment of DWARF debug section must be at end of the linker
+ script to avoid problems when there are undefined symbols. It's necessary
+ to avoid that the DWARF section is relocated before such undefined
+ symbols are found. */
+
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo .zdebug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames .zdebug_sfnames) }
+
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges .zdebug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames .zdebug_pubnames) }
+
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*} .zdebug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev .zdebug_abbrev) }
+ .debug_line 0 : { *(.debug_line .zdebug_line) }
+ .debug_frame 0 : { *(.debug_frame .zdebug_frame) }
+ .debug_str 0 : { *(.debug_str .zdebug_str) }
+ .debug_loc 0 : { *(.debug_loc .zdebug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo .zdebug_macinfo) }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/elfmicroblaze.sc b/binutils-2.21/ld/scripttempl/elfmicroblaze.sc
new file mode 100644
index 0000000..a54b891
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/elfmicroblaze.sc
@@ -0,0 +1,222 @@
+# Adapted from mips.sc
+# These variables may be overridden by the emulation file. The
+# defaults are appropriate for a DECstation running Ultrix.
+test -z "$ENTRY" && ENTRY=_start
+
+#test -z "$TEXT_START_ADDR" && TEXT_START_ADDR="0x0"
+
+CTOR=".ctors ${CONSTRUCTING-0} :
+ {
+ ${CONSTRUCTING+${CTOR_START}}
+ /* gcc uses crtbegin.o to find the start of
+ the constructors, so we make sure it is
+ first. Because this is a wildcard, it
+ doesn't matter if the user does not
+ actually link against crtbegin.o; the
+ linker won't look for a file to match a
+ wildcard. The wildcard also means that it
+ doesn't matter which directory crtbegin.o
+ is in. */
+
+ KEEP (*crtbegin.o(.ctors))
+
+ /* We don't want to include the .ctor section from
+ from the crtend.o file until after the sorted ctors.
+ The .ctor section from the crtend file contains the
+ end of ctors marker and it must be last */
+
+ KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ ${CONSTRUCTING+${CTOR_END}}
+ }"
+
+DTOR=" .dtors ${CONSTRUCTING-0} :
+ {
+ ${CONSTRUCTING+${DTOR_START}}
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ ${CONSTRUCTING+${DTOR_END}}
+ }"
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
+ "${LITTLE_OUTPUT_FORMAT}")
+/*${LIB_SEARCH_DIRS}*/
+${RELOCATING+${LIB_SEARCH_DIRS}}
+
+${RELOCATING+ENTRY (${ENTRY})}
+
+_TEXT_START_ADDR = DEFINED(_TEXT_START_ADDR) ? _TEXT_START_ADDR : 0x50;
+_HEAP_SIZE = DEFINED(_HEAP_SIZE) ? _HEAP_SIZE : 0x0;
+_STACK_SIZE = DEFINED(_STACK_SIZE) ? _STACK_SIZE : 0x400;
+
+SECTIONS
+{
+ .vectors.reset 0x0 : { KEEP (*(.vectors.reset)) } = 0
+ .vectors.sw_exception 0x8 : { KEEP (*(.vectors.sw_exception)) } = 0
+ .vectors.interrupt 0x10 : { KEEP (*(.vectors.interrupt)) } = 0
+ .vectors.debug_sw_break 0x18 : { KEEP (*(.vectors.debug_sw_break)) } = 0
+ .vectors.hw_exception 0x20 : { KEEP (*(.vectors.hw_exception)) } = 0
+
+ ${RELOCATING+. = _TEXT_START_ADDR;}
+
+ ${RELOCATING+ _ftext = .;}
+ .text : {
+ ${RELOCATING+*(.text)}
+ ${RELOCATING+*(.text.*)}
+ ${RELOCATING+*(.gnu.linkonce.t.*)}
+ }
+ ${RELOCATING+ _etext = .;}
+
+ .init : { KEEP (*(.init)) } =0
+ .fini : { KEEP (*(.fini)) } =0
+
+ ${RELOCATING+PROVIDE (__CTOR_LIST__ = .);}
+ ${RELOCATING+PROVIDE (___CTOR_LIST__ = .);}
+ ${RELOCATING+${CTOR}}
+ ${RELOCATING+PROVIDE (__CTOR_END__ = .);}
+ ${RELOCATING+PROVIDE (___CTOR_END__ = .);}
+
+ ${RELOCATING+PROVIDE (__DTOR_LIST__ = .);}
+ ${RELOCATING+PROVIDE (___DTOR_LIST__ = .);}
+ ${RELOCATING+${DTOR}}
+ ${RELOCATING+PROVIDE (__DTOR_END__ = .);}
+ ${RELOCATING+PROVIDE (___DTOR_END__ = .);}
+
+ ${RELOCATING+ . = ALIGN(4);}
+ ${RELOCATING+ _frodata = . ;}
+ .rodata : {
+ ${RELOCATING+*(.rodata)}
+ ${RELOCATING+*(.rodata.*)}
+ ${RELOCATING+*(.gnu.linkonce.r.*)}
+ ${CONSTRUCTING+CONSTRUCTORS}; /* Is this needed? */
+ }
+ ${RELOCATING+ _erodata = .;}
+
+ /* Alignments by 8 to ensure that _SDA2_BASE_ on a word boundary */
+ /* Note that .sdata2 and .sbss2 must be contiguous */
+ ${RELOCATING+. = ALIGN(8);}
+ ${RELOCATING+ _ssrw = .;}
+ .sdata2 : {
+ ${RELOCATING+*(.sdata2)}
+ ${RELOCATING+*(.sdata2.*)}
+ ${RELOCATING+*(.gnu.linkonce.s2.*)}
+ }
+ ${RELOCATING+. = ALIGN(4);}
+ .sbss2 : {
+ ${RELOCATING+PROVIDE (__sbss2_start = .);}
+ ${RELOCATING+*(.sbss2)}
+ ${RELOCATING+*(.sbss2.*)}
+ ${RELOCATING+*(.gnu.linkonce.sb2.*)}
+ ${RELOCATING+PROVIDE (__sbss2_end = .);}
+ }
+ ${RELOCATING+. = ALIGN(8);}
+ ${RELOCATING+ _essrw = .;}
+ ${RELOCATING+ _ssrw_size = _essrw - _ssrw;}
+ ${RELOCATING+ PROVIDE (_SDA2_BASE_ = _ssrw + (_ssrw_size / 2 ));}
+
+ ${RELOCATING+ . = ALIGN(4);}
+ ${RELOCATING+ _fdata = .;}
+ .data : {
+ ${RELOCATING+*(.data)}
+ ${RELOCATING+*(.gnu.linkonce.d.*)}
+ ${CONSTRUCTING+CONSTRUCTORS}; /* Is this needed? */
+ }
+ ${RELOCATING+ _edata = . ;}
+
+ /* Added to handle pic code */
+ .got : {
+ ${RELOCATING+*(.got)}
+ }
+
+ .got1 : {
+ ${RELOCATING+*(.got1)}
+ }
+
+ .got2 : {
+ ${RELOCATING+*(.got2)}
+ }
+
+ /* Added by Sathya to handle C++ exceptions */
+ .eh_frame : {
+ ${RELOCATING+*(.eh_frame)}
+ }
+
+ .jcr : {
+ ${RELOCATING+*(.jcr)}
+ }
+
+ .gcc_except_table : {
+ ${RELOCATING+*(.gcc_except_table)}
+ }
+
+ /* Alignments by 8 to ensure that _SDA_BASE_ on a word boundary */
+ /* Note that .sdata and .sbss must be contiguous */
+ ${RELOCATING+. = ALIGN(8);}
+ ${RELOCATING+ _ssro = .;}
+ .sdata : {
+ ${RELOCATING+*(.sdata)}
+ ${RELOCATING+*(.sdata.*)}
+ ${RELOCATING+*(.gnu.linkonce.s.*)}
+ }
+ ${RELOCATING+. = ALIGN(4);}
+ .sbss : {
+ ${RELOCATING+PROVIDE (__sbss_start = .);}
+ ${RELOCATING+*(.sbss)}
+ ${RELOCATING+*(.sbss.*)}
+ ${RELOCATING+*(.gnu.linkonce.sb.*)}
+ ${RELOCATING+PROVIDE (__sbss_end = .);}
+ }
+ ${RELOCATING+. = ALIGN(8);}
+ ${RELOCATING+ _essro = .;}
+ ${RELOCATING+ _ssro_size = _essro - _ssro;}
+ ${RELOCATING+PROVIDE (_SDA_BASE_ = _ssro + (_ssro_size / 2 ));}
+
+ ${RELOCATING+ . = ALIGN(4);}
+ ${RELOCATING+ _fbss = .;}
+ .bss : {
+ ${RELOCATING+PROVIDE (__bss_start = .);}
+ ${RELOCATING+*(.bss)}
+ ${RELOCATING+*(.bss.*)}
+ ${RELOCATING+*(.gnu.linkonce.b.*)}
+ ${RELOCATING+*(COMMON)}
+ ${RELOCATING+. = ALIGN(4);}
+
+ ${RELOCATING+PROVIDE (__bss_end = .);}
+
+ }
+
+ ${RELOCATING+ . = ALIGN(4);}
+
+ .heap : {
+ ${RELOCATING+ _heap = .;}
+ ${RELOCATING+ _heap_start = .;}
+ ${RELOCATING+ . += _HEAP_SIZE;}
+ ${RELOCATING+ _heap_end = .;}
+ }
+
+ ${RELOCATING+ . = ALIGN(4);}
+
+ .stack : {
+ ${RELOCATING+ _stack_end = .;}
+ ${RELOCATING+ . += _STACK_SIZE;}
+ ${RELOCATING+ . = ALIGN(8);}
+ ${RELOCATING+ _stack = .;}
+ ${RELOCATING+ _end = .;}
+ }
+
+ .tdata : {
+ ${RELOCATING+*(.tdata)}
+ ${RELOCATING+*(.tdata.*)}
+ ${RELOCATING+*(.gnu.linkonce.td.*)}
+ }
+ .tbss : {
+ ${RELOCATING+*(.tbss)}
+ ${RELOCATING+*(.tbss.*)}
+ ${RELOCATING+*(.gnu.linkonce.tb.*)}
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/elfxtensa.sc b/binutils-2.21/ld/scripttempl/elfxtensa.sc
new file mode 100644
index 0000000..7d5d5ee
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/elfxtensa.sc
@@ -0,0 +1,586 @@
+#
+# Unusual variables checked by this code:
+# NOP - four byte opcode for no-op (defaults to 0)
+# NO_SMALL_DATA - no .sbss/.sbss2/.sdata/.sdata2 sections if not
+# empty.
+# SMALL_DATA_CTOR - .ctors contains small data.
+# SMALL_DATA_DTOR - .dtors contains small data.
+# DATA_ADDR - if end-of-text-plus-one-page isn't right for data start
+# INITIAL_READONLY_SECTIONS - at start of text segment
+# OTHER_READONLY_SECTIONS - other than .text .init .rodata ...
+# (e.g., .PARISC.milli)
+# OTHER_TEXT_SECTIONS - these get put in .text when relocating
+# OTHER_READWRITE_SECTIONS - other than .data .bss .ctors .sdata ...
+# (e.g., .PARISC.global)
+# OTHER_RELRO_SECTIONS - other than .data.rel.ro ...
+# (e.g. PPC32 .fixup, .got[12])
+# OTHER_BSS_SECTIONS - other than .bss .sbss ...
+# ATTRS_SECTIONS - at the end
+# OTHER_SECTIONS - at the end
+# EXECUTABLE_SYMBOLS - symbols that must be defined for an
+# executable (e.g., _DYNAMIC_LINK)
+# TEXT_START_ADDR - the first byte of the text segment, after any
+# headers.
+# TEXT_BASE_ADDRESS - the first byte of the text segment.
+# TEXT_START_SYMBOLS - symbols that appear at the start of the
+# .text section.
+# DATA_START_SYMBOLS - symbols that appear at the start of the
+# .data section.
+# DATA_END_SYMBOLS - symbols that appear at the end of the
+# writeable data sections.
+# OTHER_GOT_SYMBOLS - symbols defined just before .got.
+# OTHER_GOT_SECTIONS - sections just after .got.
+# OTHER_SDATA_SECTIONS - sections just after .sdata.
+# OTHER_BSS_SYMBOLS - symbols that appear at the start of the
+# .bss section besides __bss_start.
+# DATA_PLT - .plt should be in data segment, not text segment.
+# PLT_BEFORE_GOT - .plt just before .got when .plt is in data segement.
+# BSS_PLT - .plt should be in bss segment
+# NO_REL_RELOCS - Don't include .rel.* sections in script
+# NO_RELA_RELOCS - Don't include .rela.* sections in script
+# NON_ALLOC_DYN - Place dynamic sections after data segment.
+# TEXT_DYNAMIC - .dynamic in text segment, not data segment.
+# EMBEDDED - whether this is for an embedded system.
+# SHLIB_TEXT_START_ADDR - if set, add to SIZEOF_HEADERS to set
+# start address of shared library.
+# INPUT_FILES - INPUT command of files to always include
+# WRITABLE_RODATA - if set, the .rodata section should be writable
+# INIT_START, INIT_END - statements just before and just after
+# combination of .init sections.
+# FINI_START, FINI_END - statements just before and just after
+# combination of .fini sections.
+# STACK_ADDR - start of a .stack section.
+# OTHER_SYMBOLS - symbols to place right at the end of the script.
+# ETEXT_NAME - name of a symbol for the end of the text section,
+# normally etext.
+# SEPARATE_GOTPLT - if set, .got.plt should be separate output section,
+# so that .got can be in the RELRO area. It should be set to
+# the number of bytes in the beginning of .got.plt which can be
+# in the RELRO area as well.
+# USER_LABEL_PREFIX - prefix to add to user-visible symbols.
+#
+# When adding sections, do note that the names of some sections are used
+# when specifying the start address of the next.
+#
+
+# Many sections come in three flavours. There is the 'real' section,
+# like ".data". Then there are the per-procedure or per-variable
+# sections, generated by -ffunction-sections and -fdata-sections in GCC,
+# and useful for --gc-sections, which for a variable "foo" might be
+# ".data.foo". Then there are the linkonce sections, for which the linker
+# eliminates duplicates, which are named like ".gnu.linkonce.d.foo".
+# The exact correspondences are:
+#
+# Section Linkonce section
+# .text .gnu.linkonce.t.foo
+# .rodata .gnu.linkonce.r.foo
+# .data .gnu.linkonce.d.foo
+# .bss .gnu.linkonce.b.foo
+# .sdata .gnu.linkonce.s.foo
+# .sbss .gnu.linkonce.sb.foo
+# .sdata2 .gnu.linkonce.s2.foo
+# .sbss2 .gnu.linkonce.sb2.foo
+# .debug_info .gnu.linkonce.wi.foo
+# .tdata .gnu.linkonce.td.foo
+# .tbss .gnu.linkonce.tb.foo
+# .lrodata .gnu.linkonce.lr.foo
+# .ldata .gnu.linkonce.l.foo
+# .lbss .gnu.linkonce.lb.foo
+#
+# plus exception-handling information for Tensilica's XCC compiler:
+# .xt_except_table .gnu.linkonce.e.foo
+# .xt_except_desc .gnu.linkonce.h.foo
+#
+# plus Xtensa-specific literal sections:
+# .literal .gnu.linkonce.literal.foo
+# .lit4 .gnu.linkonce.lit4.foo
+#
+# plus Xtensa-specific "property table" sections:
+# .xt.lit .gnu.linkonce.p.foo
+# .xt.insn .gnu.linkonce.x.foo (obsolete)
+# .xt.prop .gnu.linkonce.prop.foo
+#
+# Each of these can also have corresponding .rel.* and .rela.* sections.
+
+test -z "$ENTRY" && ENTRY=_start
+test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi
+test -z "${ELFSIZE}" && ELFSIZE=32
+test -z "${ALIGNMENT}" && ALIGNMENT="${ELFSIZE} / 8"
+test "$LD_FLAG" = "N" && DATA_ADDR=.
+test -z "${ETEXT_NAME}" && ETEXT_NAME=etext
+test -n "$CREATE_SHLIB$CREATE_PIE" && test -n "$SHLIB_DATA_ADDR" && COMMONPAGESIZE=""
+test -z "$CREATE_SHLIB$CREATE_PIE" && test -n "$DATA_ADDR" && COMMONPAGESIZE=""
+test -n "$RELRO_NOW" && unset SEPARATE_GOTPLT
+test -z "$ATTRS_SECTIONS" && ATTRS_SECTIONS=".gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }"
+DATA_SEGMENT_ALIGN="ALIGN(${SEGMENT_SIZE}) + (. & (${MAXPAGESIZE} - 1))"
+DATA_SEGMENT_RELRO_END=""
+DATA_SEGMENT_END=""
+if test -n "${COMMONPAGESIZE}"; then
+ DATA_SEGMENT_ALIGN="ALIGN (${SEGMENT_SIZE}) - ((${MAXPAGESIZE} - .) & (${MAXPAGESIZE} - 1)); . = DATA_SEGMENT_ALIGN (${MAXPAGESIZE}, ${COMMONPAGESIZE})"
+ DATA_SEGMENT_END=". = DATA_SEGMENT_END (.);"
+ DATA_SEGMENT_RELRO_END=". = DATA_SEGMENT_RELRO_END (${SEPARATE_GOTPLT-0}, .);"
+fi
+if test -z "${INITIAL_READONLY_SECTIONS}${CREATE_SHLIB}"; then
+ INITIAL_READONLY_SECTIONS=".interp ${RELOCATING-0} : { *(.interp) }"
+fi
+if test -z "$PLT"; then
+ PLT=".plt ${RELOCATING-0} : { *(.plt) }"
+fi
+test -n "${DATA_PLT-${BSS_PLT-text}}" && TEXT_PLT=yes
+if test -z "$GOT"; then
+ if test -z "$SEPARATE_GOTPLT"; then
+ GOT=".got ${RELOCATING-0} : { *(.got.plt) *(.got) }"
+ else
+ GOT=".got ${RELOCATING-0} : { *(.got) }"
+ GOTPLT=".got.plt ${RELOCATING-0} : { *(.got.plt) }"
+ fi
+fi
+DYNAMIC=".dynamic ${RELOCATING-0} : { *(.dynamic) }"
+RODATA=".rodata ${RELOCATING-0} : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }"
+DATARELRO=".data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }"
+DISCARDED="/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }"
+INIT_LIT=".init.literal 0 : { *(.init.literal) }"
+INIT=".init 0 : { *(.init) }"
+FINI_LIT=".fini.literal 0 : { *(.fini.literal) }"
+FINI=".fini 0 : { *(.fini) }"
+if test -z "${NO_SMALL_DATA}"; then
+ SBSS=".sbss ${RELOCATING-0} :
+ {
+ ${RELOCATING+${SBSS_START_SYMBOLS}}
+ ${CREATE_SHLIB+*(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)}
+ *(.dynsbss)
+ *(.sbss${RELOCATING+ .sbss.* .gnu.linkonce.sb.*})
+ *(.scommon)
+ ${RELOCATING+${SBSS_END_SYMBOLS}}
+ }"
+ SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }"
+ SDATA="/* We want the small data sections together, so single-instruction offsets
+ can access them all, and initialized data all before uninitialized, so
+ we can shorten the on-disk segment size. */
+ .sdata ${RELOCATING-0} :
+ {
+ ${RELOCATING+${SDATA_START_SYMBOLS}}
+ ${CREATE_SHLIB+*(.sdata2 .sdata2.* .gnu.linkonce.s2.*)}
+ *(.sdata${RELOCATING+ .sdata.* .gnu.linkonce.s.*})
+ }"
+ SDATA2=".sdata2 ${RELOCATING-0} :
+ {
+ ${RELOCATING+${SDATA2_START_SYMBOLS}}
+ *(.sdata2${RELOCATING+ .sdata2.* .gnu.linkonce.s2.*})
+ }"
+ REL_SDATA=".rel.sdata ${RELOCATING-0} : { *(.rel.sdata${RELOCATING+ .rel.sdata.* .rel.gnu.linkonce.s.*}) }
+ .rela.sdata ${RELOCATING-0} : { *(.rela.sdata${RELOCATING+ .rela.sdata.* .rela.gnu.linkonce.s.*}) }"
+ REL_SBSS=".rel.sbss ${RELOCATING-0} : { *(.rel.sbss${RELOCATING+ .rel.sbss.* .rel.gnu.linkonce.sb.*}) }
+ .rela.sbss ${RELOCATING-0} : { *(.rela.sbss${RELOCATING+ .rela.sbss.* .rela.gnu.linkonce.sb.*}) }"
+ REL_SDATA2=".rel.sdata2 ${RELOCATING-0} : { *(.rel.sdata2${RELOCATING+ .rel.sdata2.* .rel.gnu.linkonce.s2.*}) }
+ .rela.sdata2 ${RELOCATING-0} : { *(.rela.sdata2${RELOCATING+ .rela.sdata2.* .rela.gnu.linkonce.s2.*}) }"
+ REL_SBSS2=".rel.sbss2 ${RELOCATING-0} : { *(.rel.sbss2${RELOCATING+ .rel.sbss2.* .rel.gnu.linkonce.sb2.*}) }
+ .rela.sbss2 ${RELOCATING-0} : { *(.rela.sbss2${RELOCATING+ .rela.sbss2.* .rela.gnu.linkonce.sb2.*}) }"
+else
+ NO_SMALL_DATA=" "
+fi
+if test -z "${DATA_GOT}"; then
+ if test -n "${NO_SMALL_DATA}"; then
+ DATA_GOT=" "
+ fi
+fi
+if test -z "${SDATA_GOT}"; then
+ if test -z "${NO_SMALL_DATA}"; then
+ SDATA_GOT=" "
+ fi
+fi
+test -n "$SEPARATE_GOTPLT" && SEPARATE_GOTPLT=" "
+test "${LARGE_SECTIONS}" = "yes" && REL_LARGE="
+ .rel.ldata ${RELOCATING-0} : { *(.rel.ldata${RELOCATING+ .rel.ldata.* .rel.gnu.linkonce.l.*}) }
+ .rela.ldata ${RELOCATING-0} : { *(.rela.ldata${RELOCATING+ .rela.ldata.* .rela.gnu.linkonce.l.*}) }
+ .rel.lbss ${RELOCATING-0} : { *(.rel.lbss${RELOCATING+ .rel.lbss.* .rel.gnu.linkonce.lb.*}) }
+ .rela.lbss ${RELOCATING-0} : { *(.rela.lbss${RELOCATING+ .rela.lbss.* .rela.gnu.linkonce.lb.*}) }
+ .rel.lrodata ${RELOCATING-0} : { *(.rel.lrodata${RELOCATING+ .rel.lrodata.* .rel.gnu.linkonce.lr.*}) }
+ .rela.lrodata ${RELOCATING-0} : { *(.rela.lrodata${RELOCATING+ .rela.lrodata.* .rela.gnu.linkonce.lr.*}) }"
+test "${LARGE_SECTIONS}" = "yes" && OTHER_BSS_SECTIONS="
+ ${OTHER_BSS_SECTIONS}
+ .lbss ${RELOCATING-0} :
+ {
+ *(.dynlbss)
+ *(.lbss${RELOCATING+ .lbss.* .gnu.linkonce.lb.*})
+ *(LARGE_COMMON)
+ }"
+test "${LARGE_SECTIONS}" = "yes" && LARGE_SECTIONS="
+ .lrodata ${RELOCATING-0} ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} :
+ {
+ *(.lrodata${RELOCATING+ .lrodata.* .gnu.linkonce.lr.*})
+ }
+ .ldata ${RELOCATING-0} ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} :
+ {
+ *(.ldata${RELOCATING+ .ldata.* .gnu.linkonce.l.*})
+ ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
+ }"
+INIT_ARRAY=".init_array ${RELOCATING-0} :
+ {
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_start = .);}}
+ KEEP (*(SORT(.init_array.*)))
+ KEEP (*(.init_array))
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_end = .);}}
+ }"
+FINI_ARRAY=".fini_array ${RELOCATING-0} :
+ {
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_start = .);}}
+ KEEP (*(SORT(.fini_array.*)))
+ KEEP (*(.fini_array))
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_end = .);}}
+ }"
+CTOR=".ctors ${CONSTRUCTING-0} :
+ {
+ ${CONSTRUCTING+${CTOR_START}}
+ /* gcc uses crtbegin.o to find the start of
+ the constructors, so we make sure it is
+ first. Because this is a wildcard, it
+ doesn't matter if the user does not
+ actually link against crtbegin.o; the
+ linker won't look for a file to match a
+ wildcard. The wildcard also means that it
+ doesn't matter which directory crtbegin.o
+ is in. */
+
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
+
+ /* We don't want to include the .ctor section from
+ the crtend.o file until after the sorted ctors.
+ The .ctor section from the crtend file contains the
+ end of ctors marker and it must be last */
+
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ ${CONSTRUCTING+${CTOR_END}}
+ }"
+DTOR=".dtors ${CONSTRUCTING-0} :
+ {
+ ${CONSTRUCTING+${DTOR_START}}
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ ${CONSTRUCTING+${DTOR_END}}
+ }"
+STACK=" .stack ${RELOCATING-0}${RELOCATING+${STACK_ADDR}} :
+ {
+ ${RELOCATING+_stack = .;}
+ *(.stack)
+ }"
+
+# if this is for an embedded system, don't add SIZEOF_HEADERS.
+if [ -z "$EMBEDDED" ]; then
+ test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR} + SIZEOF_HEADERS"
+else
+ test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR}"
+fi
+
+cat <<EOF
+${RELOCATING+ENTRY(${ENTRY})}
+
+${RELOCATING+${LIB_SEARCH_DIRS}}
+${RELOCATING+${EXECUTABLE_SYMBOLS}}
+${RELOCATING+${INPUT_FILES}}
+${RELOCATING- /* For some reason, the Solaris linker makes bad executables
+ if gld -r is used and the intermediate file has sections starting
+ at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld
+ bug. But for now assigning the zero vmas works. */}
+
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+PROVIDE (__executable_start = ${TEXT_START_ADDR}); . = ${TEXT_BASE_ADDRESS};}}}
+ ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR:-0} + SIZEOF_HEADERS;}}
+ ${CREATE_PIE+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR:-0} + SIZEOF_HEADERS;}}
+ ${INITIAL_READONLY_SECTIONS}
+ .note.gnu.build-id : { *(.note.gnu.build-id) }
+EOF
+
+test -n "${RELOCATING+0}" || unset NON_ALLOC_DYN
+test -z "${NON_ALLOC_DYN}" || TEXT_DYNAMIC=
+cat > ldscripts/dyntmp.$$ <<EOF
+ ${TEXT_DYNAMIC+${DYNAMIC}}
+ .hash ${RELOCATING-0} : { *(.hash) }
+ .gnu.hash ${RELOCATING-0} : { *(.gnu.hash) }
+ .dynsym ${RELOCATING-0} : { *(.dynsym) }
+ .dynstr ${RELOCATING-0} : { *(.dynstr) }
+ .gnu.version ${RELOCATING-0} : { *(.gnu.version) }
+ .gnu.version_d ${RELOCATING-0}: { *(.gnu.version_d) }
+ .gnu.version_r ${RELOCATING-0}: { *(.gnu.version_r) }
+EOF
+
+if [ "x$COMBRELOC" = x ]; then
+ COMBRELOCCAT="cat >> ldscripts/dyntmp.$$"
+else
+ COMBRELOCCAT="cat > $COMBRELOC"
+fi
+eval $COMBRELOCCAT <<EOF
+ .rel.init ${RELOCATING-0} : { *(.rel.init) }
+ .rela.init ${RELOCATING-0} : { *(.rela.init) }
+ .rel.text ${RELOCATING-0} : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) }
+ .rela.text ${RELOCATING-0} : { *(.rela.text${RELOCATING+ .rela.text.* .rela.gnu.linkonce.t.*}) }
+ .rel.fini ${RELOCATING-0} : { *(.rel.fini) }
+ .rela.fini ${RELOCATING-0} : { *(.rela.fini) }
+ .rel.rodata ${RELOCATING-0} : { *(.rel.rodata${RELOCATING+ .rel.rodata.* .rel.gnu.linkonce.r.*}) }
+ .rela.rodata ${RELOCATING-0} : { *(.rela.rodata${RELOCATING+ .rela.rodata.* .rela.gnu.linkonce.r.*}) }
+ ${OTHER_READONLY_RELOC_SECTIONS}
+ .rel.data.rel.ro ${RELOCATING-0} : { *(.rel.data.rel.ro${RELOCATING+* .rel.gnu.linkonce.d.rel.ro.*}) }
+ .rela.data.rel.ro ${RELOCATING-0} : { *(.rela.data.rel.ro${RELOCATING+* .rela.gnu.linkonce.d.rel.ro.*}) }
+ .rel.data ${RELOCATING-0} : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) }
+ .rela.data ${RELOCATING-0} : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) }
+ .rel.tdata ${RELOCATING-0} : { *(.rel.tdata${RELOCATING+ .rel.tdata.* .rel.gnu.linkonce.td.*}) }
+ .rela.tdata ${RELOCATING-0} : { *(.rela.tdata${RELOCATING+ .rela.tdata.* .rela.gnu.linkonce.td.*}) }
+ .rel.tbss ${RELOCATING-0} : { *(.rel.tbss${RELOCATING+ .rel.tbss.* .rel.gnu.linkonce.tb.*}) }
+ .rela.tbss ${RELOCATING-0} : { *(.rela.tbss${RELOCATING+ .rela.tbss.* .rela.gnu.linkonce.tb.*}) }
+ .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) }
+ .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) }
+ .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) }
+ .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) }
+ .rel.got ${RELOCATING-0} : { *(.rel.got) }
+ .rela.got ${RELOCATING-0} : { *(.rela.got) }
+ ${OTHER_GOT_RELOC_SECTIONS}
+ ${REL_SDATA}
+ ${REL_SBSS}
+ ${REL_SDATA2}
+ ${REL_SBSS2}
+ .rel.bss ${RELOCATING-0} : { *(.rel.bss${RELOCATING+ .rel.bss.* .rel.gnu.linkonce.b.*}) }
+ .rela.bss ${RELOCATING-0} : { *(.rela.bss${RELOCATING+ .rela.bss.* .rela.gnu.linkonce.b.*}) }
+ ${REL_LARGE}
+EOF
+
+if [ -n "$COMBRELOC" ]; then
+cat >> ldscripts/dyntmp.$$ <<EOF
+ .rel.dyn ${RELOCATING-0} :
+ {
+EOF
+sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rela\./d;s/^.*: { *\(.*\)}$/ \1/' $COMBRELOC >> ldscripts/dyntmp.$$
+cat >> ldscripts/dyntmp.$$ <<EOF
+ }
+ .rela.dyn ${RELOCATING-0} :
+ {
+EOF
+sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rel\./d;s/^.*: { *\(.*\)}/ \1/' $COMBRELOC >> ldscripts/dyntmp.$$
+cat >> ldscripts/dyntmp.$$ <<EOF
+ }
+EOF
+fi
+
+cat >> ldscripts/dyntmp.$$ <<EOF
+ .rel.plt ${RELOCATING-0} : { *(.rel.plt) }
+ .rela.plt ${RELOCATING-0} : { *(.rela.plt) }
+ ${OTHER_PLT_RELOC_SECTIONS}
+EOF
+
+if test -z "${NON_ALLOC_DYN}"; then
+ if test -z "${NO_REL_RELOCS}${NO_RELA_RELOCS}"; then
+ cat ldscripts/dyntmp.$$
+ else
+ if test -z "${NO_REL_RELOCS}"; then
+ sed -e '/^[ ]*\.rela\.[^}]*$/,/}/d' -e '/^[ ]*\.rela\./d' ldscripts/dyntmp.$$
+ fi
+ if test -z "${NO_RELA_RELOCS}"; then
+ sed -e '/^[ ]*\.rel\.[^}]*$/,/}/d' -e '/^[ ]*\.rel\./d' ldscripts/dyntmp.$$
+ fi
+ fi
+ rm -f ldscripts/dyntmp.$$
+fi
+
+cat <<EOF
+ ${RELOCATING-$INIT_LIT}
+ ${RELOCATING-$INIT}
+
+ ${TEXT_PLT+${PLT}}
+ ${TINY_READONLY_SECTION}
+ .text ${RELOCATING-0} :
+ {
+ *(.got.plt* .plt*)
+
+ ${RELOCATING+${INIT_START}}
+ ${RELOCATING+KEEP (*(.init.literal))}
+ ${RELOCATING+KEEP (*(.init))}
+ ${RELOCATING+${INIT_END}}
+
+ ${RELOCATING+${TEXT_START_SYMBOLS}}
+ *(.literal .text .stub${RELOCATING+ .literal.* .text.* .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*})
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ ${RELOCATING+${OTHER_TEXT_SECTIONS}}
+
+ ${RELOCATING+${FINI_START}}
+ ${RELOCATING+KEEP (*(.fini.literal))}
+ ${RELOCATING+KEEP (*(.fini))}
+ ${RELOCATING+${FINI_END}}
+ } =${NOP-0}
+
+ ${RELOCATING-$FINI_LIT}
+ ${RELOCATING-$FINI}
+
+ ${RELOCATING+PROVIDE (__${ETEXT_NAME} = .);}
+ ${RELOCATING+PROVIDE (_${ETEXT_NAME} = .);}
+ ${RELOCATING+PROVIDE (${ETEXT_NAME} = .);}
+ ${WRITABLE_RODATA-${RODATA}}
+ .rodata1 ${RELOCATING-0} : { *(.rodata1) }
+ ${CREATE_SHLIB-${SDATA2}}
+ ${CREATE_SHLIB-${SBSS2}}
+ ${OTHER_READONLY_SECTIONS}
+ .eh_frame_hdr : { *(.eh_frame_hdr) }
+ .eh_frame ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.eh_frame)) }
+ .gcc_except_table ${RELOCATING-0} : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+
+ /* Adjust the address for the data segment. We want to adjust up to
+ the same address within the page on the next page up. */
+ ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+. = ${DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}}
+ ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}
+ ${CREATE_PIE+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}
+
+ /* Exception handling */
+ .eh_frame ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.eh_frame)) }
+ .gcc_except_table ${RELOCATING-0} : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+
+ /* Thread Local Storage sections */
+ .tdata ${RELOCATING-0} : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) }
+ .tbss ${RELOCATING-0} : { *(.tbss${RELOCATING+ .tbss.* .gnu.linkonce.tb.*})${RELOCATING+ *(.tcommon)} }
+
+ .preinit_array ${RELOCATING-0} :
+ {
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_start = .);}}
+ KEEP (*(.preinit_array))
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_end = .);}}
+ }
+ ${RELOCATING+${INIT_ARRAY}}
+ ${RELOCATING+${FINI_ARRAY}}
+ ${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}}
+ ${SMALL_DATA_DTOR-${RELOCATING+${DTOR}}}
+ .jcr ${RELOCATING-0} : { KEEP (*(.jcr)) }
+
+ ${RELOCATING+${DATARELRO}}
+ ${OTHER_RELRO_SECTIONS}
+ ${TEXT_DYNAMIC-${DYNAMIC}}
+ ${DATA_GOT+${RELRO_NOW+${GOT}}}
+ ${DATA_GOT+${RELRO_NOW+${GOTPLT}}}
+ ${DATA_GOT+${RELRO_NOW-${SEPARATE_GOTPLT+${GOT}}}}
+ ${RELOCATING+${DATA_SEGMENT_RELRO_END}}
+ ${DATA_GOT+${RELRO_NOW-${SEPARATE_GOTPLT-${GOT}}}}
+ ${DATA_GOT+${RELRO_NOW-${GOTPLT}}}
+
+ ${DATA_PLT+${PLT_BEFORE_GOT-${PLT}}}
+
+ .data ${RELOCATING-0} :
+ {
+ ${RELOCATING+${DATA_START_SYMBOLS}}
+ *(.data${RELOCATING+ .data.* .gnu.linkonce.d.*})
+ ${CONSTRUCTING+SORT(CONSTRUCTORS)}
+ }
+ .data1 ${RELOCATING-0} : { *(.data1) }
+ ${WRITABLE_RODATA+${RODATA}}
+ ${OTHER_READWRITE_SECTIONS}
+ ${SMALL_DATA_CTOR+${RELOCATING+${CTOR}}}
+ ${SMALL_DATA_DTOR+${RELOCATING+${DTOR}}}
+ ${DATA_PLT+${PLT_BEFORE_GOT+${PLT}}}
+ ${SDATA_GOT+${RELOCATING+${OTHER_GOT_SYMBOLS}}}
+ ${SDATA_GOT+${GOT}}
+ ${SDATA_GOT+${OTHER_GOT_SECTIONS}}
+ ${SDATA}
+ ${OTHER_SDATA_SECTIONS}
+ ${RELOCATING+${DATA_END_SYMBOLS-${USER_LABEL_PREFIX}_edata = .; PROVIDE (${USER_LABEL_PREFIX}edata = .);}}
+ ${RELOCATING+__bss_start = .;}
+ ${RELOCATING+${OTHER_BSS_SYMBOLS}}
+ ${SBSS}
+ ${BSS_PLT+${PLT}}
+ .bss ${RELOCATING-0} :
+ {
+ *(.dynbss)
+ *(.bss${RELOCATING+ .bss.* .gnu.linkonce.b.*})
+ *(COMMON)
+ /* Align here to ensure that the .bss section occupies space up to
+ _end. Align after .bss to ensure correct alignment even if the
+ .bss section disappears because there are no input sections.
+ FIXME: Why do we need it? When there is no .bss section, we don't
+ pad the .data section. */
+ ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
+ }
+ ${OTHER_BSS_SECTIONS}
+ ${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
+ ${RELOCATING+. = ALIGN(${ALIGNMENT});}
+ ${LARGE_SECTIONS}
+ ${RELOCATING+. = ALIGN(${ALIGNMENT});}
+ ${RELOCATING+${OTHER_END_SYMBOLS}}
+ ${RELOCATING+${END_SYMBOLS-${USER_LABEL_PREFIX}_end = .; PROVIDE (${USER_LABEL_PREFIX}end = .);}}
+ ${RELOCATING+${DATA_SEGMENT_END}}
+EOF
+
+if test -n "${NON_ALLOC_DYN}"; then
+ if test -z "${NO_REL_RELOCS}${NO_RELA_RELOCS}"; then
+ cat ldscripts/dyntmp.$$
+ else
+ if test -z "${NO_REL_RELOCS}"; then
+ sed -e '/^[ ]*\.rela\.[^}]*$/,/}/d' -e '/^[ ]*\.rela\./d' ldscripts/dyntmp.$$
+ fi
+ if test -z "${NO_RELA_RELOCS}"; then
+ sed -e '/^[ ]*\.rel\.[^}]*$/,/}/d' -e '/^[ ]*\.rel\./d' ldscripts/dyntmp.$$
+ fi
+ fi
+ rm -f ldscripts/dyntmp.$$
+fi
+
+cat <<EOF
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+
+ .comment 0 : { *(.comment) }
+
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo .zdebug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames .zdebug_sfnames) }
+
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges .zdebug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames .zdebug_pubnames) }
+
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*} .zdebug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev .zdebug_abbrev) }
+ .debug_line 0 : { *(.debug_line .zdebug_line) }
+ .debug_frame 0 : { *(.debug_frame .zdebug_frame) }
+ .debug_str 0 : { *(.debug_str .zdebug_str) }
+ .debug_loc 0 : { *(.debug_loc .zdebug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo .zdebug_macinfo) }
+
+ /* SGI/MIPS DWARF 2 extensions */
+ .debug_weaknames 0 : { *(.debug_weaknames .zdebug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames .zdebug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames .zdebug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames .zdebug_varnames) }
+
+ /* DWARF 3 */
+ .debug_pubtypes 0 : { *(.debug_pubtypes .zdebug_pubtypes) }
+ .debug_ranges 0 : { *(.debug_ranges .zdebug_ranges) }
+
+ ${TINY_DATA_SECTION}
+ ${TINY_BSS_SECTION}
+
+ ${STACK_ADDR+${STACK}}
+ ${ATTRS_SECTIONS}
+ ${OTHER_SECTIONS}
+ ${RELOCATING+${OTHER_SYMBOLS}}
+ ${RELOCATING+${DISCARDED}}
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/epocpe.sc b/binutils-2.21/ld/scripttempl/epocpe.sc
new file mode 100644
index 0000000..0651c01
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/epocpe.sc
@@ -0,0 +1,152 @@
+# Linker script for PE.
+
+if test -z "${RELOCATEABLE_OUTPUT_FORMAT}"; then
+ RELOCATEABLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+fi
+
+# We can't easily and portably get an unquoted $ in a shell
+# substitution, so we do this instead.
+# Sorting of the .foo$* sections is required by the definition of
+# grouped sections in PE.
+# Sorting of the file names in R_IDATA is required by the
+# current implementation of dlltool (this could probably be changed to
+# use grouped sections instead).
+if test "${RELOCATING}"; then
+ R_TEXT='*(SORT(.text$*))'
+ R_DATA='*(SORT(.data$*))'
+ R_RDATA='*(SORT(.rdata$*))'
+ R_IDATA='
+ SORT(*)(.idata$2)
+ SORT(*)(.idata$3)
+ /* These zeroes mark the end of the import list. */
+ LONG (0); LONG (0); LONG (0); LONG (0); LONG (0);
+ SORT(*)(.idata$4)
+ SORT(*)(.idata$5)
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)'
+ R_CRT='*(SORT(.CRT$*))'
+ R_RSRC='*(SORT(.rsrc$*))'
+else
+ R_TEXT=
+ R_DATA=
+ R_RDATA=
+ R_IDATA=
+ R_CRT=
+ R_RSRC=
+fi
+
+cat <<EOF
+${RELOCATING+OUTPUT_FORMAT(${OUTPUT_FORMAT})}
+${RELOCATING-OUTPUT_FORMAT(${RELOCATEABLE_OUTPUT_FORMAT})}
+
+${LIB_SEARCH_DIRS}
+
+${RELOCATING+ENTRY (_mainCRTStartup)}
+
+SECTIONS
+{
+ .text ${RELOCATING+ __image_base__ + __section_alignment__ } :
+ {
+ ${RELOCATING+ *(.init)}
+ *(.text)
+ ${R_TEXT}
+ *(.glue_7t)
+ *(.glue_7)
+ ${RELOCATING+ *(.text.*)}
+ ${CONSTRUCTING+ ___CTOR_LIST__ = .; __CTOR_LIST__ = . ;
+ LONG (-1); *(.ctors); *(.ctor); LONG (0); }
+ ${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ;
+ LONG (-1); *(.dtors); *(.dtor); LONG (0); }
+ ${RELOCATING+ *(.fini)}
+ /* ??? Why is .gcc_exc here? */
+ ${RELOCATING+ *(.gcc_exc)}
+ ${RELOCATING+ etext = .;}
+ *(.gcc_except_table)
+
+ /* For EPOC the read only data is located at the end of the .text
+ section */
+ *(.rdata)
+ ${R_RDATA}
+ *(.eh_frame)
+ }
+
+ /* The Cygwin32 library uses a section to avoid copying certain data
+ on fork. This used to be named ".data$nocopy". The linker used
+ to include this between __data_start__ and __data_end__, but that
+ breaks building the cygwin32 dll. Instead, we name the section
+ ".data_cygwin_nocopy" and explictly include it after __data_end__. */
+
+ .data ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ ${RELOCATING+__data_start__ = . ;}
+ *(.data)
+ *(.data2)
+ ${R_DATA}
+ ${RELOCATING+__data_end__ = . ;}
+ ${RELOCATING+*(.data_cygwin_nocopy)}
+ }
+
+ .bss ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ ${RELOCATING+__bss_start__ = . ;}
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+__bss_end__ = . ;}
+ }
+
+ .edata ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ *(.edata)
+ }
+
+ /DISCARD/ :
+ {
+ *(.debug\$S)
+ *(.debug\$T)
+ *(.debug\$F)
+ *(.drectve)
+ }
+
+ .idata ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ /* This cannot currently be handled with grouped sections.
+ See pe.em:sort_sections. */
+ ${R_IDATA}
+ }
+
+ .CRT ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ ${R_CRT}
+ }
+
+ .endjunk ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ /* end is deprecated, don't use it */
+ ${RELOCATING+ end = .;}
+ ${RELOCATING+ _end = .;}
+ ${RELOCATING+ __end__ = .;}
+ }
+
+ .reloc ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ *(.reloc)
+ }
+
+ .rsrc ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ *(.rsrc)
+ ${R_RSRC}
+ }
+
+ .stab ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stab ]
+ }
+
+ .stabstr ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stabstr ]
+ }
+
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/h8300.sc b/binutils-2.21/ld/scripttempl/h8300.sc
new file mode 100644
index 0000000..f142f4b
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/h8300.sc
@@ -0,0 +1,94 @@
+TORS=".tors :
+ {
+ ___ctors = . ;
+ *(.ctors)
+ ___ctors_end = . ;
+ ___dtors = . ;
+ *(.dtors)
+ ___dtors_end = . ;
+ } > ram"
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+${RELOCATING+ENTRY ("_start")}
+
+MEMORY
+{
+ /* 0xc4 is a magic entry. We should have the linker just
+ skip over it one day... */
+ vectors : o = 0x0000, l = 0xc4
+ magicvectors : o = 0xc4, l = 0x3c
+ ram : o = 0x0100, l = 0xfdfc
+ /* The stack starts at the top of main ram. */
+ topram : o = 0xfefc, l = 0x4
+ /* At the very top of the address space is the 8-bit area. */
+ eight : o = 0xff00, l = 0x100
+}
+
+SECTIONS
+{
+.vectors :
+ {
+ /* Use something like this to place a specific
+ function's address into the vector table.
+
+ SHORT (ABSOLUTE (_foobar)). */
+
+ *(.vectors)
+ } ${RELOCATING+ > vectors}
+
+.init :
+ {
+ *(.init)
+ } ${RELOCATING+ > ram}
+
+.text :
+ {
+ *(.rodata)
+ *(.text)
+ *(.text.*)
+ *(.strings)
+ ${RELOCATING+ _etext = . ; }
+ } ${RELOCATING+ > ram}
+
+${CONSTRUCTING+${TORS}}
+
+.data :
+ {
+ *(.data)
+ *(.data.*)
+ *(.tiny)
+ ${RELOCATING+ _edata = . ; }
+ } ${RELOCATING+ > ram}
+
+.bss :
+ {
+ ${RELOCATING+ _bss_start = . ;}
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ _end = . ; }
+ } ${RELOCATING+ >ram}
+
+.stack :
+ {
+ ${RELOCATING+ _stack = . ; }
+ *(.stack)
+ } ${RELOCATING+ > topram}
+
+.eight :
+ {
+ *(.eight)
+ } ${RELOCATING+ > eight}
+
+.stab 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stab ]
+ }
+
+.stabstr 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stabstr ]
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/h8300h.sc b/binutils-2.21/ld/scripttempl/h8300h.sc
new file mode 100644
index 0000000..9a41537
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/h8300h.sc
@@ -0,0 +1,97 @@
+TORS=".tors :
+ {
+ ___ctors = . ;
+ *(.ctors)
+ ___ctors_end = . ;
+ ___dtors = . ;
+ *(.dtors)
+ ___dtors_end = . ;
+ } > ram"
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(h8300h)
+${RELOCATING+ENTRY ("_start")}
+
+/* The memory size is 256KB to coincide with the simulator.
+ Don't change either without considering the other. */
+
+MEMORY
+{
+ /* 0xc4 is a magic entry. We should have the linker just
+ skip over it one day... */
+ vectors : o = 0x0000, l = 0xc4
+ magicvectors : o = 0xc4, l = 0x3c
+ /* We still only use 256k as the main ram size. */
+ ram : o = 0x0100, l = 0x3fefc
+ /* The stack starts at the top of main ram. */
+ topram : o = 0x3fffc, l = 0x4
+ /* This holds variables in the "tiny" sections. */
+ tiny : o = 0xff8000, l = 0x7f00
+ /* At the very top of the address space is the 8-bit area. */
+ eight : o = 0xffff00, l = 0x100
+}
+
+SECTIONS
+{
+.vectors :
+ {
+ /* Use something like this to place a specific
+ function's address into the vector table.
+
+ LONG (ABSOLUTE (_foobar)). */
+
+ *(.vectors)
+ } ${RELOCATING+ > vectors}
+
+.text :
+ {
+ *(.rodata)
+ *(.text)
+ *(.strings)
+ ${RELOCATING+ _etext = . ; }
+ } ${RELOCATING+ > ram}
+
+${CONSTRUCTING+${TORS}}
+
+.data :
+ {
+ *(.data)
+ ${RELOCATING+ _edata = . ; }
+ } ${RELOCATING+ > ram}
+
+.bss :
+ {
+ ${RELOCATING+ _bss_start = . ;}
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ _end = . ; }
+ } ${RELOCATING+ >ram}
+
+.stack :
+ {
+ ${RELOCATING+ _stack = . ; }
+ *(.stack)
+ } ${RELOCATING+ > topram}
+
+.tiny :
+ {
+ *(.tiny)
+ } ${RELOCATING+ > tiny}
+
+.eight :
+ {
+ *(.eight)
+ } ${RELOCATING+ > eight}
+
+.stab 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stab ]
+ }
+
+.stabstr 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stabstr ]
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/h8300hn.sc b/binutils-2.21/ld/scripttempl/h8300hn.sc
new file mode 100644
index 0000000..5cdfc5a
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/h8300hn.sc
@@ -0,0 +1,87 @@
+TORS=".tors :
+ {
+ ___ctors = . ;
+ *(.ctors)
+ ___ctors_end = . ;
+ ___dtors = . ;
+ *(.dtors)
+ ___dtors_end = . ;
+ } > ram"
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(h8300hn)
+${RELOCATING+ENTRY ("_start")}
+
+MEMORY
+{
+ /* 0xc4 is a magic entry. We should have the linker just
+ skip over it one day... */
+ vectors : o = 0x0000, l = 0xc4
+ magicvectors : o = 0xc4, l = 0x3c
+ ram : o = 0x0100, l = 0xfdfc
+ /* The stack starts at the top of main ram. */
+ topram : o = 0xfefc, l = 0x4
+ /* At the very top of the address space is the 8-bit area. */
+ eight : o = 0xff00, l = 0x100
+}
+
+SECTIONS
+{
+.vectors :
+ {
+ /* Use something like this to place a specific
+ function's address into the vector table.
+
+ SHORT (ABSOLUTE (_foobar)). */
+
+ *(.vectors)
+ } ${RELOCATING+ > vectors}
+
+.text :
+ {
+ *(.rodata)
+ *(.text)
+ *(.strings)
+ ${RELOCATING+ _etext = . ; }
+ } ${RELOCATING+ > ram}
+
+${CONSTRUCTING+${TORS}}
+
+.data :
+ {
+ *(.data)
+ *(.tiny)
+ ${RELOCATING+ _edata = . ; }
+ } ${RELOCATING+ > ram}
+
+.bss :
+ {
+ ${RELOCATING+ _bss_start = . ;}
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ _end = . ; }
+ } ${RELOCATING+ >ram}
+
+.stack :
+ {
+ ${RELOCATING+ _stack = . ; }
+ *(.stack)
+ } ${RELOCATING+ > topram}
+
+.eight :
+ {
+ *(.eight)
+ } ${RELOCATING+ > eight}
+
+.stab 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stab ]
+ }
+
+.stabstr 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stabstr ]
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/h8300s.sc b/binutils-2.21/ld/scripttempl/h8300s.sc
new file mode 100644
index 0000000..e07253d
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/h8300s.sc
@@ -0,0 +1,97 @@
+TORS=".tors :
+ {
+ ___ctors = . ;
+ *(.ctors)
+ ___ctors_end = . ;
+ ___dtors = . ;
+ *(.dtors)
+ ___dtors_end = . ;
+ } > ram"
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(h8300s)
+${RELOCATING+ENTRY ("_start")}
+
+/* The memory size is 256KB to coincide with the simulator.
+ Don't change either without considering the other. */
+
+MEMORY
+{
+ /* 0xc4 is a magic entry. We should have the linker just
+ skip over it one day... */
+ vectors : o = 0x0000, l = 0xc4
+ magicvectors : o = 0xc4, l = 0x3c
+ /* We still only use 256k as the main ram size. */
+ ram : o = 0x0100, l = 0x3fefc
+ /* The stack starts at the top of main ram. */
+ topram : o = 0x3fffc, l = 0x4
+ /* This holds variables in the "tiny" sections. */
+ tiny : o = 0xff8000, l = 0x7f00
+ /* At the very top of the address space is the 8-bit area. */
+ eight : o = 0xffff00, l = 0x100
+}
+
+SECTIONS
+{
+.vectors :
+ {
+ /* Use something like this to place a specific
+ function's address into the vector table.
+
+ LONG (ABSOLUTE (_foobar)). */
+
+ *(.vectors)
+ } ${RELOCATING+ > vectors}
+
+.text :
+ {
+ *(.rodata)
+ *(.text)
+ *(.strings)
+ ${RELOCATING+ _etext = . ; }
+ } ${RELOCATING+ > ram}
+
+${CONSTRUCTING+${TORS}}
+
+.data :
+ {
+ *(.data)
+ ${RELOCATING+ _edata = . ; }
+ } ${RELOCATING+ > ram}
+
+.bss :
+ {
+ ${RELOCATING+ _bss_start = . ;}
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ _end = . ; }
+ } ${RELOCATING+ >ram}
+
+.stack :
+ {
+ ${RELOCATING+ _stack = . ; }
+ *(.stack)
+ } ${RELOCATING+ > topram}
+
+.tiny :
+ {
+ *(.tiny)
+ } ${RELOCATING+ > tiny}
+
+.eight :
+ {
+ *(.eight)
+ } ${RELOCATING+ > eight}
+
+.stab 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stab ]
+ }
+
+.stabstr 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stabstr ]
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/h8300sn.sc b/binutils-2.21/ld/scripttempl/h8300sn.sc
new file mode 100644
index 0000000..27ba4a1
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/h8300sn.sc
@@ -0,0 +1,87 @@
+TORS=".tors :
+ {
+ ___ctors = . ;
+ *(.ctors)
+ ___ctors_end = . ;
+ ___dtors = . ;
+ *(.dtors)
+ ___dtors_end = . ;
+ } > ram"
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(h8300sn)
+${RELOCATING+ENTRY ("_start")}
+
+MEMORY
+{
+ /* 0xc4 is a magic entry. We should have the linker just
+ skip over it one day... */
+ vectors : o = 0x0000, l = 0xc4
+ magicvectors : o = 0xc4, l = 0x3c
+ ram : o = 0x0100, l = 0xfdfc
+ /* The stack starts at the top of main ram. */
+ topram : o = 0xfefc, l = 0x4
+ /* At the very top of the address space is the 8-bit area. */
+ eight : o = 0xff00, l = 0x100
+}
+
+SECTIONS
+{
+.vectors :
+ {
+ /* Use something like this to place a specific
+ function's address into the vector table.
+
+ SHORT (ABSOLUTE (_foobar)). */
+
+ *(.vectors)
+ } ${RELOCATING+ > vectors}
+
+.text :
+ {
+ *(.rodata)
+ *(.text)
+ *(.strings)
+ ${RELOCATING+ _etext = . ; }
+ } ${RELOCATING+ > ram}
+
+${CONSTRUCTING+${TORS}}
+
+.data :
+ {
+ *(.data)
+ *(.tiny)
+ ${RELOCATING+ _edata = . ; }
+ } ${RELOCATING+ > ram}
+
+.bss :
+ {
+ ${RELOCATING+ _bss_start = . ;}
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ _end = . ; }
+ } ${RELOCATING+ >ram}
+
+.stack :
+ {
+ ${RELOCATING+ _stack = . ; }
+ *(.stack)
+ } ${RELOCATING+ > topram}
+
+.eight :
+ {
+ *(.eight)
+ } ${RELOCATING+ > eight}
+
+.stab 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stab ]
+ }
+
+.stabstr 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stabstr ]
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/h8300sx.sc b/binutils-2.21/ld/scripttempl/h8300sx.sc
new file mode 100644
index 0000000..247e977
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/h8300sx.sc
@@ -0,0 +1,97 @@
+TORS=".tors :
+ {
+ ___ctors = . ;
+ *(.ctors)
+ ___ctors_end = . ;
+ ___dtors = . ;
+ *(.dtors)
+ ___dtors_end = . ;
+ } > ram"
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(h8300sx)
+${RELOCATING+ENTRY ("_start")}
+
+/* The memory size is 256KB to coincide with the simulator.
+ Don't change either without considering the other. */
+
+MEMORY
+{
+ /* 0xc4 is a magic entry. We should have the linker just
+ skip over it one day... */
+ vectors : o = 0x0000, l = 0xc4
+ magicvectors : o = 0xc4, l = 0x3c
+ /* We still only use 256k as the main ram size. */
+ ram : o = 0x0100, l = 0x3fefc
+ /* The stack starts at the top of main ram. */
+ topram : o = 0x3fffc, l = 0x4
+ /* This holds variables in the "tiny" sections. */
+ tiny : o = 0xff8000, l = 0x7f00
+ /* At the very top of the address space is the 8-bit area. */
+ eight : o = 0xffff00, l = 0x100
+}
+
+SECTIONS
+{
+.vectors :
+ {
+ /* Use something like this to place a specific
+ function's address into the vector table.
+
+ LONG (ABSOLUTE (_foobar)). */
+
+ *(.vectors)
+ } ${RELOCATING+ > vectors}
+
+.text :
+ {
+ *(.rodata)
+ *(.text)
+ *(.strings)
+ ${RELOCATING+ _etext = . ; }
+ } ${RELOCATING+ > ram}
+
+${CONSTRUCTING+${TORS}}
+
+.data :
+ {
+ *(.data)
+ ${RELOCATING+ _edata = . ; }
+ } ${RELOCATING+ > ram}
+
+.bss :
+ {
+ ${RELOCATING+ _bss_start = . ;}
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ _end = . ; }
+ } ${RELOCATING+ >ram}
+
+.stack :
+ {
+ ${RELOCATING+ _stack = . ; }
+ *(.stack)
+ } ${RELOCATING+ > topram}
+
+.tiny :
+ {
+ *(.tiny)
+ } ${RELOCATING+ > tiny}
+
+.eight :
+ {
+ *(.eight)
+ } ${RELOCATING+ > eight}
+
+.stab 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stab ]
+ }
+
+.stabstr 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stabstr ]
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/h8300sxn.sc b/binutils-2.21/ld/scripttempl/h8300sxn.sc
new file mode 100644
index 0000000..90bd789
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/h8300sxn.sc
@@ -0,0 +1,87 @@
+TORS=".tors :
+ {
+ ___ctors = . ;
+ *(.ctors)
+ ___ctors_end = . ;
+ ___dtors = . ;
+ *(.dtors)
+ ___dtors_end = . ;
+ } > ram"
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(h8300sxn)
+${RELOCATING+ENTRY ("_start")}
+
+MEMORY
+{
+ /* 0xc4 is a magic entry. We should have the linker just
+ skip over it one day... */
+ vectors : o = 0x0000, l = 0xc4
+ magicvectors : o = 0xc4, l = 0x3c
+ ram : o = 0x0100, l = 0xfdfc
+ /* The stack starts at the top of main ram. */
+ topram : o = 0xfefc, l = 0x4
+ /* At the very top of the address space is the 8-bit area. */
+ eight : o = 0xff00, l = 0x100
+}
+
+SECTIONS
+{
+.vectors :
+ {
+ /* Use something like this to place a specific
+ function's address into the vector table.
+
+ SHORT (ABSOLUTE (_foobar)). */
+
+ *(.vectors)
+ } ${RELOCATING+ > vectors}
+
+.text :
+ {
+ *(.rodata)
+ *(.text)
+ *(.strings)
+ ${RELOCATING+ _etext = . ; }
+ } ${RELOCATING+ > ram}
+
+${CONSTRUCTING+${TORS}}
+
+.data :
+ {
+ *(.data)
+ *(.tiny)
+ ${RELOCATING+ _edata = . ; }
+ } ${RELOCATING+ > ram}
+
+.bss :
+ {
+ ${RELOCATING+ _bss_start = . ;}
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ _end = . ; }
+ } ${RELOCATING+ >ram}
+
+.stack :
+ {
+ ${RELOCATING+ _stack = . ; }
+ *(.stack)
+ } ${RELOCATING+ > topram}
+
+.eight :
+ {
+ *(.eight)
+ } ${RELOCATING+ > eight}
+
+.stab 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stab ]
+ }
+
+.stabstr 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stabstr ]
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/h8500.sc b/binutils-2.21/ld/scripttempl/h8500.sc
new file mode 100644
index 0000000..6b889dd
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/h8500.sc
@@ -0,0 +1,61 @@
+TORS="
+ ___ctors = . ;
+ *(.ctors)
+ ___ctors_end = . ;
+ ___dtors = . ;
+ *(.dtors)
+ ___dtors_end = . ;"
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+
+/* Code and data 64k total */
+
+SECTIONS
+{
+.text ${RELOCATING+ 0x0000} :
+ {
+ *(.text)
+ ${RELOCATING+ _etext = . ; }
+ }
+
+.data ${RELOCATING+ . } :
+ {
+ *(.data)
+ ${RELOCATING+ _edata = . ; }
+ }
+
+.rdata ${RELOCATING+ . } :
+ {
+ *(.rdata);
+ *(.strings)
+
+ ${CONSTRUCTING+${TORS}}
+ }
+
+.bss ${RELOCATING+ . } :
+ {
+ ${RELOCATING+ __start_bss = . ; }
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ _end = . ; }
+ }
+
+.stack ${RELOCATING+ 0xfff0} :
+ {
+ ${RELOCATING+ _stack = . ; }
+ *(.stack)
+ }
+
+.stab 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stab ]
+ }
+
+.stabstr 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stabstr ]
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/h8500b.sc b/binutils-2.21/ld/scripttempl/h8500b.sc
new file mode 100644
index 0000000..fb6c0e8
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/h8500b.sc
@@ -0,0 +1,61 @@
+TORS="
+ ___ctors = . ;
+ *(.ctors)
+ ___ctors_end = . ;
+ ___dtors = . ;
+ *(.dtors)
+ ___dtors_end = . ;"
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+
+/* Code and data, both larger than 64k */
+
+SECTIONS
+{
+.text ${RELOCATING+ 0x10000} :
+ {
+ *(.text)
+ ${RELOCATING+ _etext = . ; }
+ }
+
+.data ${RELOCATING+ 0x20000} :
+ {
+ *(.data)
+ ${RELOCATING+ _edata = . ; }
+ }
+
+.rdata ${RELOCATING+ 0x30000} :
+ {
+ *(.rdata);
+ *(.strings)
+
+ ${CONSTRUCTING+${TORS}}
+ }
+
+.bss ${RELOCATING+ 0x40000} :
+ {
+ ${RELOCATING+ __start_bss = . ; }
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ _end = . ; }
+ }
+
+.stack ${RELOCATING+ 0x50000} :
+ {
+ ${RELOCATING+ _stack = . ; }
+ *(.stack)
+ }
+
+.stab 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stab ]
+ }
+
+.stabstr 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stabstr ]
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/h8500c.sc b/binutils-2.21/ld/scripttempl/h8500c.sc
new file mode 100644
index 0000000..145ffc5
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/h8500c.sc
@@ -0,0 +1,61 @@
+TORS="
+ ___ctors = . ;
+ *(.ctors)
+ ___ctors_end = . ;
+ ___dtors = . ;
+ *(.dtors)
+ ___dtors_end = . ;"
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+
+/* Compact model - code < 64k, data > 64k */
+
+SECTIONS
+{
+.text 0x10000 :
+ {
+ *(.text)
+ *(.strings)
+ ${RELOCATING+ _etext = . ; }
+ } ${RELOCATING+ > ram}
+
+.data 0x20000 :
+ {
+ *(.data)
+ ${RELOCATING+ _edata = . ; }
+ } ${RELOCATING+ > ram}
+
+.rdata 0x30000 :
+ {
+ *(.rdata);
+
+ ${CONSTRUCTING+${TORS}}
+ } ${RELOCATING+ > ram}
+
+.bss 0x40000 :
+ {
+ ${RELOCATING+ __start_bss = . ; }
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ _end = . ; }
+ } ${RELOCATING+ >ram}
+
+.stack 0x5fff0 :
+ {
+ ${RELOCATING+ _stack = . ; }
+ *(.stack)
+ } ${RELOCATING+ > topram}
+
+.stab 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stab ]
+ }
+
+.stabstr 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stabstr ]
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/h8500m.sc b/binutils-2.21/ld/scripttempl/h8500m.sc
new file mode 100644
index 0000000..3314066
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/h8500m.sc
@@ -0,0 +1,61 @@
+TORS="
+ ___ctors = . ;
+ *(.ctors)
+ ___ctors_end = . ;
+ ___dtors = . ;
+ *(.dtors)
+ ___dtors_end = . ;"
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+
+/* Code and data, both larger than 64k */
+
+SECTIONS
+{
+.text ${RELOCATING+ 0x10000} :
+ {
+ *(.text)
+ ${RELOCATING+ _etext = . ; }
+ }
+
+.data ${RELOCATING+ 0x20000} :
+ {
+ *(.data)
+ ${RELOCATING+ _edata = . ; }
+ }
+
+.rdata ${RELOCATING+ . } :
+ {
+ *(.rdata);
+ *(.strings)
+
+ ${CONSTRUCTING+${TORS}}
+ }
+
+.bss ${RELOCATING+ . } :
+ {
+ ${RELOCATING+ __start_bss = . ; }
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ _end = . ; }
+ }
+
+.stack ${RELOCATING+ 0x2fff0} :
+ {
+ ${RELOCATING+ _stack = . ; }
+ *(.stack)
+ }
+
+.stab 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stab ]
+ }
+
+.stabstr 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stabstr ]
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/h8500s.sc b/binutils-2.21/ld/scripttempl/h8500s.sc
new file mode 100644
index 0000000..da4d210
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/h8500s.sc
@@ -0,0 +1,61 @@
+TORS="
+ ___ctors = . ;
+ *(.ctors)
+ ___ctors_end = . ;
+ ___dtors = . ;
+ *(.dtors)
+ ___dtors_end = . ;"
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+
+/* Code and data, both 64k */
+
+SECTIONS
+{
+.text ${RELOCATING+ 0x10000} :
+ {
+ *(.text)
+ ${RELOCATING+ _etext = . ; }
+ }
+
+.rdata ${RELOCATING+ 0x20000} :
+ {
+ *(.rdata);
+ *(.strings)
+
+ ${CONSTRUCTING+${TORS}}
+ }
+
+.data ${RELOCATING+ . } :
+ {
+ *(.data)
+ ${RELOCATING+ _edata = . ; }
+ }
+
+.bss ${RELOCATING+ .} :
+ {
+ ${RELOCATING+ __start_bss = . ; }
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ _end = . ; }
+ }
+
+.stack ${RELOCATING+ 0x2fff0} :
+ {
+ ${RELOCATING+ _stack = . ; }
+ *(.stack)
+ }
+
+.stab 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stab ]
+ }
+
+.stabstr 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stabstr ]
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/hppaelf.sc b/binutils-2.21/ld/scripttempl/hppaelf.sc
new file mode 100644
index 0000000..a96ad54
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/hppaelf.sc
@@ -0,0 +1,38 @@
+DATA_ADDR=0x40000000
+test "$LD_FLAG" = "N" && DATA_ADDR=.
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+${RELOCATING+ENTRY("\$START\$")}
+${RELOCATING+${LIB_SEARCH_DIRS}}
+SECTIONS
+{
+ .text 0x1000 ${RELOCATING++${TEXT_START_ADDR}}:
+ {
+ ${RELOCATING+__text_start = .};
+ CREATE_OBJECT_SYMBOLS
+ *(.PARISC.stubs)
+ *(.text)
+ ${RELOCATING+etext = .};
+ ${RELOCATING+_etext = .};
+ }
+ ${RELOCATING+. = ${DATA_ADDR};}
+ .data :
+ {
+ ${RELOCATING+ . = . + 0x1000 };
+ ${RELOCATING+__data_start = .};
+ *(.data)
+ ${CONSTRUCTING+CONSTRUCTORS}
+ ${RELOCATING+edata = .};
+ ${RELOCATING+_edata = .};
+ }
+ ${RELOCATING+. = ${DATA_ADDR} + SIZEOF(.data);}
+ .bss :
+ {
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+end = . };
+ ${RELOCATING+_end = . };
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/i386beos.sc b/binutils-2.21/ld/scripttempl/i386beos.sc
new file mode 100644
index 0000000..f507acc
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/i386beos.sc
@@ -0,0 +1,194 @@
+# Linker script for PE.
+
+if test -z "${RELOCATEABLE_OUTPUT_FORMAT}"; then
+ RELOCATEABLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+fi
+
+# We can't easily and portably get an unquoted $ in a shell
+# substitution, so we do this instead.
+if test "${RELOCATING}"; then
+ R_TEXT='*(.text$*)'
+ R_DATA='*(.data$*)'
+ R_RDATA='*(.rdata$*)'
+ R_IDATA='
+ *(.idata$2)
+ *(.idata$3)
+ /* These zeroes mark the end of the import list. */
+ LONG (0); LONG (0); LONG (0); LONG (0); LONG (0);
+ *(.idata$4)
+ *(.idata$5)
+ *(.idata$6)
+ *(.idata$7)'
+ R_CRT='*(.CRT$*)'
+ R_RSRC='*(.rsrc$*)'
+ R_EXC='*(.exc$*)'
+else
+ R_TEXT=
+ R_DATA=
+ R_RDATA=
+ R_IDATA=
+ R_CRT=
+ R_RSRC=
+ R_EXC=
+fi
+
+cat <<EOF
+${RELOCATING+OUTPUT_FORMAT(${OUTPUT_FORMAT})}
+${RELOCATING-OUTPUT_FORMAT(${RELOCATEABLE_OUTPUT_FORMAT})}
+
+${LIB_SEARCH_DIRS}
+
+${RELOCATING+ENTRY (__start)}
+${RELOCATING+header = .;}
+${RELOCATING+__fltused = .; /* set up floating pt for MS .obj\'s */}
+${RELOCATING+__ldused = .;}
+SECTIONS
+{
+ .text ${RELOCATING+ __image_base__ + __section_alignment__ } :
+ {
+ ${RELOCATING+ __text_start__ = . ;}
+ ${RELOCATING+ *(.init)}
+ *(.text)
+ ${R_TEXT}
+ *(.glue_7t)
+ *(.glue_7)
+ ${CONSTRUCTING+ ___CTOR_LIST__ = .; __CTOR_LIST__ = . ;
+ LONG (-1); *(.ctors); *(.ctor); LONG (0); }
+ ${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ;
+ LONG (-1); *(.dtors); *(.dtor); LONG (0); }
+ ${RELOCATING+ *(.fini)}
+ /* ??? Why is .gcc_exc here? */
+ ${RELOCATING+ *(.gcc_exc)}
+ ${RELOCATING+ etext = .;}
+ ${RELOCATING+ __text_end__ = .;}
+ *(.gcc_except_table)
+ }
+
+ /* The Cygwin32 library uses a section to avoid copying certain data
+ on fork. This used to be named ".data$nocopy". The linker used
+ to include this between __data_start__ and __data_end__, but that
+ breaks building the cygwin32 dll. Instead, we name the section
+ ".data_cygwin_nocopy" and explictly include it after __data_end__. */
+
+ .data ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ ${RELOCATING+__data_start__ = . ;}
+ *(.data)
+ *(.data2)
+ ${R_DATA}
+ ${RELOCATING+__data_end__ = . ;}
+ ${RELOCATING+*(.data_cygwin_nocopy)}
+ }
+
+ .bss ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ ${RELOCATING+__bss_start__ = . ;}
+ *(.bss)
+ *(COMMON)
+ /* link.exe apparently pulls in .obj's because of UNDEF common
+ symbols, which is not the coff way, but that's MS for you. */
+ *(.CRT\$XCA)
+ *(.CRT\$XCZ)
+ *(.CRT\$XIA)
+ *(.CRT\$XIZ)
+ ${RELOCATING+__bss_end__ = . ;}
+ }
+
+ .rdata ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ *(.rdata)
+ ${R_RDATA}
+ *(.eh_frame)
+ }
+
+ .edata ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ *(.edata)
+ }
+
+ /DISCARD/ :
+ {
+ *(.debug\$S)
+ *(.debug\$T)
+ *(.debug\$F)
+ *(.drectve)
+ *(.debug*)
+ }
+
+ .idata ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ /* This cannot currently be handled with grouped sections.
+ See pe.em:sort_sections. */
+ ${R_IDATA}
+ }
+ .CRT ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ ${R_CRT}
+ }
+
+ .endjunk ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ /* end is deprecated, don't use it */
+ ${RELOCATING+ end = .;}
+ ${RELOCATING+ _end = .;}
+ ${RELOCATING+ __end__ = .;}
+ }
+
+ .reloc ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ *(.reloc)
+ }
+
+ .rsrc ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ *(.rsrc)
+ ${R_RSRC}
+ }
+
+ .exc ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ *(.exc)
+ ${R_EXC}
+ }
+
+ .stab ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stab ]
+ }
+
+ .stabstr ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stabstr ]
+ }
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+
+ /* DWARF 1 */
+ .debug 0 ${RELOCATING+(NOLOAD)} : { *(.debug) }
+ .line 0 ${RELOCATING+(NOLOAD)} : { *(.line) }
+
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 ${RELOCATING+(NOLOAD)} : { *(.debug_srcinfo) }
+ .debug_sfnames 0 ${RELOCATING+(NOLOAD)} : { *(.debug_sfnames) }
+
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 ${RELOCATING+(NOLOAD)} : { *(.debug_aranges) }
+ .debug_pubnames 0 ${RELOCATING+(NOLOAD)} : { *(.debug_pubnames) }
+
+ /* DWARF 2 */
+ .debug_info 0 ${RELOCATING+(NOLOAD)} : { *(.debug_info) *(.gnu.linkonce.wi.*) }
+ .debug_abbrev 0 ${RELOCATING+(NOLOAD)} : { *(.debug_abbrev) }
+ .debug_line 0 ${RELOCATING+(NOLOAD)} : { *(.debug_line) }
+ .debug_frame 0 ${RELOCATING+(NOLOAD)} : { *(.debug_frame) }
+ .debug_str 0 ${RELOCATING+(NOLOAD)} : { *(.debug_str) }
+ .debug_loc 0 ${RELOCATING+(NOLOAD)} : { *(.debug_loc) }
+ .debug_macinfo 0 ${RELOCATING+(NOLOAD)} : { *(.debug_macinfo) }
+
+ /* SGI/MIPS DWARF 2 extensions */
+ .debug_weaknames 0 ${RELOCATING+(NOLOAD)} : { *(.debug_weaknames) }
+ .debug_funcnames 0 ${RELOCATING+(NOLOAD)} : { *(.debug_funcnames) }
+ .debug_typenames 0 ${RELOCATING+(NOLOAD)} : { *(.debug_typenames) }
+ .debug_varnames 0 ${RELOCATING+(NOLOAD)} : { *(.debug_varnames) }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/i386coff.sc b/binutils-2.21/ld/scripttempl/i386coff.sc
new file mode 100644
index 0000000..da14632
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/i386coff.sc
@@ -0,0 +1,43 @@
+# Linker script for 386 COFF. This works on SVR3.2 and SCO Unix 3.2.2.
+# Ian Taylor <ian@cygnus.com>.
+test -z "$ENTRY" && ENTRY=_start
+# These are substituted in as variables in order to get '}' in a shell
+# conditional expansion.
+INIT='.init : { *(.init) }'
+FINI='.fini : { *(.fini) }'
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+${LIB_SEARCH_DIRS}
+
+${RELOCATING+ENTRY (${ENTRY})}
+
+SECTIONS
+{
+ .text ${RELOCATING+ SIZEOF_HEADERS} : {
+ ${RELOCATING+ *(.init)}
+ *(.text)
+ ${RELOCATING+ *(.fini)}
+ ${RELOCATING+ etext = .};
+ }
+ .data ${RELOCATING+ 0x400000 + (. & 0xffc00fff)} : {
+ *(.data)
+ ${RELOCATING+ edata = .};
+ }
+ .bss ${RELOCATING+ SIZEOF(.data) + ADDR(.data)} :
+ {
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ end = .};
+ }
+ ${RELOCATING- ${INIT}}
+ ${RELOCATING- ${FINI}}
+ .stab 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stab ]
+ }
+ .stabstr 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stabstr ]
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/i386go32.sc b/binutils-2.21/ld/scripttempl/i386go32.sc
new file mode 100644
index 0000000..e5bcf2a
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/i386go32.sc
@@ -0,0 +1,79 @@
+# Linker script for i386 go32 (DJGPP)
+
+test -z "$ENTRY" && ENTRY=start
+EXE=${CONSTRUCTING+${RELOCATING+-exe}}
+
+# These are substituted in as variables in order to get '}' in a shell
+# conditional expansion.
+CTOR='.ctor : {
+ *(SORT(.ctors.*))
+ *(.ctor)
+ }'
+DTOR='.dtor : {
+ *(SORT(.dtors.*))
+ *(.dtor)
+ }'
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}${EXE}")
+
+${RELOCATING+ENTRY (${ENTRY})}
+
+SECTIONS
+{
+ .text ${RELOCATING+ ${TARGET_PAGE_SIZE}+SIZEOF_HEADERS} : {
+ *(.text)
+ ${RELOCATING+*(.text.*)}
+ ${RELOCATING+*(.gnu.linkonce.t*)}
+ *(.const*)
+ *(.ro*)
+ ${RELOCATING+*(.gnu.linkonce.r*)}
+ ${RELOCATING+etext = . ; PROVIDE(_etext = .) ;}
+ ${RELOCATING+. = ALIGN(${SEGMENT_SIZE});}
+ }
+ .data ${RELOCATING+ ${DATA_ALIGNMENT}} : {
+ ${RELOCATING+djgpp_first_ctor = . ;
+ *(SORT(.ctors.*))
+ *(.ctor)
+ djgpp_last_ctor = . ;}
+ ${RELOCATING+djgpp_first_dtor = . ;
+ *(SORT(.dtors.*))
+ *(.dtor)
+ djgpp_last_dtor = . ;}
+ *(.data)
+ ${RELOCATING+*(.data.*)}
+
+ ${RELOCATING+*(.gcc_exc*)}
+ ${RELOCATING+___EH_FRAME_BEGIN__ = . ;}
+ ${RELOCATING+*(.eh_fram*)}
+ ${RELOCATING+___EH_FRAME_END__ = . ;}
+ ${RELOCATING+LONG(0);}
+
+ ${RELOCATING+*(.gnu.linkonce.d*)}
+ ${RELOCATING+edata = . ; PROVIDE(_edata = .) ;}
+ ${RELOCATING+. = ALIGN(${SEGMENT_SIZE});}
+ }
+ ${CONSTRUCTING+${RELOCATING-$CTOR}}
+ ${CONSTRUCTING+${RELOCATING-$DTOR}}
+ .bss ${RELOCATING+ SIZEOF(.data) + ADDR(.data)} :
+ {
+ *(.bss${RELOCATING+ .bss.* .gnu.linkonce.b.*})
+ *(COMMON)
+ ${RELOCATING+ end = . ; PROVIDE(_end = .) ;}
+ ${RELOCATING+ . = ALIGN(${SEGMENT_SIZE});}
+ }
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ /* DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames) }
+ .debug_info 0 : { *(.debug_info) *(.gnu.linkonce.wi.*) }
+ .debug_abbrev 0 : { *(.debug_abbrev) }
+ .debug_line 0 : { *(.debug_line) }
+ .debug_frame 0 : { *(.debug_frame) }
+ .debug_str 0 : { *(.debug_str) }
+ .debug_loc 0 : { *(.debug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo) }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/i386msdos.sc b/binutils-2.21/ld/scripttempl/i386msdos.sc
new file mode 100644
index 0000000..4d312e7
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/i386msdos.sc
@@ -0,0 +1,38 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+
+${RELOCATING+${LIB_SEARCH_DIRS}}
+${STACKZERO+${RELOCATING+${STACKZERO}}}
+SECTIONS
+{
+ ${RELOCATING+. = ${TEXT_START_ADDR};}
+ .text :
+ {
+ CREATE_OBJECT_SYMBOLS
+ *(.text)
+ ${RELOCATING+etext = .;}
+ ${RELOCATING+_etext = .;}
+ ${RELOCATING+__etext = .;}
+ }
+ .data :
+ {
+ *(.rodata)
+ *(.data)
+ ${CONSTRUCTING+CONSTRUCTORS}
+ ${RELOCATING+edata = .;}
+ ${RELOCATING+_edata = .;}
+ ${RELOCATING+__edata = .;}
+ }
+ .bss :
+ {
+ ${RELOCATING+ _bss_start = .};
+ ${RELOCATING+ __bss_start = .};
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+end = ALIGN(4) };
+ ${RELOCATING+_end = ALIGN(4) };
+ ${RELOCATING+__end = ALIGN(4) };
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/i860coff.sc b/binutils-2.21/ld/scripttempl/i860coff.sc
new file mode 100644
index 0000000..f268c6f
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/i860coff.sc
@@ -0,0 +1,42 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+${LIB_SEARCH_DIRS}
+PROVIDE (__stack = 0);
+SECTIONS
+{
+ .text ${RELOCATING+ 0x1000000} : {
+ *(.text)
+ ${CONSTRUCTING+ . = ALIGN(4);}
+ ${RELOCATING+ etext = .;}
+ ${CONSTRUCTING+ __CTOR_LIST__ = .;}
+ ${CONSTRUCTING+ LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)}
+ ${CONSTRUCTING+ *(.ctors)}
+ ${CONSTRUCTING+ LONG(0)}
+ ${CONSTRUCTING+ __CTOR_END__ = .;}
+ ${CONSTRUCTING+ __DTOR_LIST__ = .;}
+ ${CONSTRUCTING+ LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)}
+ ${CONSTRUCTING+ *(.dtors)}
+ ${CONSTRUCTING+ LONG(0)}
+ ${CONSTRUCTING+ __DTOR_END__ = .;}
+ }
+ .data : {
+ *(.data)
+ ${RELOCATING+ edata = .};
+ }
+ .bss : {
+ ${RELOCATING+ __bss_start = .};
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ end = ALIGN(0x8)};
+ ${RELOCATING+ _end = ALIGN(0x8)};
+ }
+ .stab 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stab ]
+ }
+ .stabstr 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stabstr ]
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/i960.sc b/binutils-2.21/ld/scripttempl/i960.sc
new file mode 100644
index 0000000..dc33555
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/i960.sc
@@ -0,0 +1,25 @@
+cat <<EOF
+SECTIONS
+{
+ .text :
+ {
+ ${GLD_STYLE+ CREATE_OBJECT_SYMBOLS}
+ *(.text)
+ ${RELOCATING+ _etext = .};
+ ${CONSTRUCTING+${COFF_CTORS}}
+ }
+ .data :
+ {
+ *(.data)
+ ${CONSTRUCTING+CONSTRUCTORS}
+ ${RELOCATING+ _edata = .};
+ }
+ .bss :
+ {
+ ${RELOCATING+ _bss_start = .};
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ _end = .};
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/ip2k.sc b/binutils-2.21/ld/scripttempl/ip2k.sc
new file mode 100644
index 0000000..b10013a
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/ip2k.sc
@@ -0,0 +1,150 @@
+cat << EOF
+OUTPUT_FORMAT("elf32-ip2k", "elf32-ip2k", "elf32-ip2k")
+OUTPUT_ARCH(ip2k)
+${RELOCATING+ENTRY(_start)}
+SEARCH_DIR(.);
+
+/* IP2022 default linker script. */
+
+MEMORY
+{
+ D_GPR : org = 0x01000080, len = 128
+ D_RAM : org = 0x01000100, len = 4K - 256
+ P_RAM : org = 0x02000000, len = 16K
+ P_ROM : org = 0x02010000, len = 64K - 32
+ P_RESET : org = 0x0201FFE0, len = 32
+ P_CONFIG : org = 0x02020000, len = 128
+}
+
+SECTIONS
+{
+ /* Allocated memory end markers
+ (initialized to start of appropiate memory address). */
+ __data_end = 0x01000100;
+ __pram_end = 0x02000000;
+ __flash_end = 0x02010000;
+
+ /* Global general purpose registers in direct addressing range. */
+ .gpr 0x01000080 :
+ {
+ *(.gpr)
+ } >D_GPR
+
+ /* Pre-allocated, pre-initialized data memory. */
+ __data_run_begin = __data_end;
+ __data_load_begin = (__flash_end + 1) & 0xFFFFFFFE;
+ .data __data_run_begin : AT (__data_load_begin)
+ {
+ * (.data);
+ * (.rodata)
+ } >D_RAM
+ __data_run_end = __data_run_begin + SIZEOF(.data);
+ __data_load_end = __data_load_begin + SIZEOF(.data);
+ __data_end = __data_run_end;
+ __flash_end = __data_load_end;
+
+ /* Pre-allocated, uninitialized data memory. */
+ __bss_begin = __data_end;
+ .bss __bss_begin :
+ {
+ * (.bss)
+ } >D_RAM
+ __bss_end = __bss_begin + SIZEOF(.bss);
+ __data_end = __bss_end;
+
+ /* Pre-allocated PRAM data memory. */
+ __pram_data_begin = (__pram_end + 1) & 0xFFFFFFFE;
+ .pram_data __pram_data_begin :
+ {
+ * (.pram_data)
+ } >P_RAM
+ __pram_data_end = __pram_data_begin + SIZEOF(.pram_data);
+ __pram_end = __pram_data_end;
+
+ /* PRAM code. */
+ __pram_run_begin = (__pram_end + 1) & 0xFFFFFFFE;
+ __pram_load_begin = (__flash_end + 1) & 0xFFFFFFFE;
+ .pram __pram_run_begin : AT (__pram_load_begin)
+ {
+ * (.pram)
+ } >P_RAM
+ __pram_run_end = __pram_run_begin + SIZEOF(.pram);
+ __pram_load_end = __pram_load_begin + SIZEOF(.pram);
+
+ __pram_load_shift = ((__pram_run_begin - __pram_load_begin) & 0x1FFFF) | 0x02000000;
+ __pram_end = __pram_run_end;
+ __flash_end = __pram_load_end;
+
+ /* PRAM overlay code. */
+ __pram_overlay_run_start = (__pram_end + 1) & 0xFFFFFFFE;
+ __pram_overlay_load_start = (__flash_end + 1) & 0xFFFFFFFE;
+ OVERLAY __pram_overlay_run_start : AT (__pram_overlay_load_start)
+ {
+ .pram1 { */overlay1/* (.pram); * (.pram1) }
+ .pram2 { */overlay2/* (.pram); * (.pram2) }
+ } >P_RAM
+ __pram_overlay_run_end = .;
+ __pram_overlay_load_end = __pram_overlay_load_start + SIZEOF(.pram1) + SIZEOF(.pram2);
+ __pram_end = __pram_overlay_run_end;
+ __flash_end = __pram_overlay_load_end;
+
+ /* Flash code. */
+ __text_begin = (__flash_end + 1) & 0xFFFFFFFE;
+ .text __text_begin :
+ {
+ * (.text);
+ * (.text.libgcc)
+ } >P_ROM = 0xffff
+ __text_end = __text_begin + SIZEOF(.text);
+ __flash_end = __text_end;
+
+ /* Strings. */
+ __strings_begin = (__flash_end + 1) & 0xFFFFFFFE;
+ .strings __strings_begin :
+ {
+ * (strings);
+ * (.progmem.data)
+ } >P_ROM = 0xffff
+ __strings_end = __strings_begin + SIZEOF (.strings);
+ __flash_end = __strings_end;
+
+ .ctors : { * (.ctors) } > P_ROM
+ .dtors : { * (.dtors) } > P_ROM
+
+ /* Reset code. */
+ .reset : { * (.reset) } >P_RESET = 0xffff
+
+ /* Configuration block. */
+ .config : { * (.config) } >P_CONFIG = 0xffff
+
+ /* Stack. */
+ PROVIDE (__stack = 0x01000FFF);
+
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+
+ /* DWARF 1. */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+ /* GNU DWARF 1 extensions. */
+ .debug_srcinfo 0 : { *(.debug_srcinfo .zdebug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames .zdebug_sfnames) }
+ /* DWARF 1.1 and DWARF 2. */
+ .debug_aranges 0 : { *(.debug_aranges .zdebug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames .zdebug_pubnames) }
+ /* DWARF 2. */
+ .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*} .zdebug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev .zdebug_abbrev) }
+ .debug_line 0 : { *(.debug_line .zdebug_line) }
+ .debug_frame 0 : { *(.debug_frame .zdebug_frame) }
+ .debug_str 0 : { *(.debug_str .zdebug_str) }
+ .debug_loc 0 : { *(.debug_loc .zdebug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo .zdebug_macinfo) }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/iq2000.sc b/binutils-2.21/ld/scripttempl/iq2000.sc
new file mode 100644
index 0000000..acfc07e
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/iq2000.sc
@@ -0,0 +1,444 @@
+#
+# Unusual variables checked by this code:
+# NOP - four byte opcode for no-op (defaults to 0)
+# DATA_ADDR - if end-of-text-plus-one-page isn't right for data start
+# INITIAL_READONLY_SECTIONS - at start of data segment
+# OTHER_READONLY_SECTIONS - other than .text .init .rodata ...
+# (e.g., .PARISC.milli)
+# OTHER_TEXT_SECTIONS - these get put in .text when relocating
+# OTHER_READWRITE_SECTIONS - other than .data .bss .ctors .sdata ...
+# (e.g., .PARISC.global)
+# OTHER_SECTIONS - at the end
+# EXECUTABLE_SYMBOLS - symbols that must be defined for an
+# executable (e.g., _DYNAMIC_LINK)
+# TEXT_START_SYMBOLS - symbols that appear at the start of the
+# .text section.
+# DATA_START_SYMBOLS - symbols that appear at the start of the
+# .data section.
+# OTHER_GOT_SYMBOLS - symbols defined just before .got.
+# OTHER_GOT_SECTIONS - sections just after .got.
+# OTHER_SDATA_SECTIONS - sections just after .sdata.
+# OTHER_BSS_SYMBOLS - symbols that appear at the start of the
+# .bss section besides __bss_start.
+# DATA_PLT - .plt should be in data segment, not text segment.
+# BSS_PLT - .plt should be in bss segment
+# TEXT_DYNAMIC - .dynamic in text segment, not data segment.
+# EMBEDDED - whether this is for an embedded system.
+# SHLIB_TEXT_START_ADDR - if set, add to SIZEOF_HEADERS to set
+# start address of shared library.
+# INPUT_FILES - INPUT command of files to always include
+# WRITABLE_RODATA - if set, the .rodata section should be writable
+# INIT_START, INIT_END - statements just before and just after
+# combination of .init sections.
+# FINI_START, FINI_END - statements just before and just after
+# combination of .fini sections.
+#
+# When adding sections, do note that the names of some sections are used
+# when specifying the start address of the next.
+#
+
+# Many sections come in three flavours. There is the 'real' section,
+# like ".data". Then there are the per-procedure or per-variable
+# sections, generated by -ffunction-sections and -fdata-sections in GCC,
+# and useful for --gc-sections, which for a variable "foo" might be
+# ".data.foo". Then there are the linkonce sections, for which the linker
+# eliminates duplicates, which are named like ".gnu.linkonce.d.foo".
+# The exact correspondences are:
+#
+# Section Linkonce section
+# .text .gnu.linkonce.t.foo
+# .rodata .gnu.linkonce.r.foo
+# .data .gnu.linkonce.d.foo
+# .bss .gnu.linkonce.b.foo
+# .sdata .gnu.linkonce.s.foo
+# .sbss .gnu.linkonce.sb.foo
+# .sdata2 .gnu.linkonce.s2.foo
+# .sbss2 .gnu.linkonce.sb2.foo
+#
+# Each of these can also have corresponding .rel.* and .rela.* sections.
+
+test -z "$ENTRY" && ENTRY=_start
+test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi
+test -z "${ELFSIZE}" && ELFSIZE=32
+test -z "${ALIGNMENT}" && ALIGNMENT="${ELFSIZE} / 8"
+test "$LD_FLAG" = "N" && DATA_ADDR=.
+INTERP=".interp ${RELOCATING-0} : { *(.interp) }"
+PLT=".plt ${RELOCATING-0} : { *(.plt) }"
+DYNAMIC=".dynamic ${RELOCATING-0} : { *(.dynamic) }"
+RODATA=".rodata ${RELOCATING-0} : { *(.rodata) ${RELOCATING+*(.rodata.*)} ${RELOCATING+*(.gnu.linkonce.r.*)} }"
+SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2) ${RELOCATING+*(.sbss2.*)} ${RELOCATING+*(.gnu.linkonce.sb2.*)} }"
+SDATA2=".sdata2 ${RELOCATING-0} : { *(.sdata2) ${RELOCATING+*(.sdata2.*)} ${RELOCATING+*(.gnu.linkonce.s2.*)} }"
+CTOR=".ctors ${CONSTRUCTING-0} :
+ {
+ ${CONSTRUCTING+${CTOR_START}}
+ /* gcc uses crtbegin.o to find the start of
+ the constructors, so we make sure it is
+ first. Because this is a wildcard, it
+ doesn't matter if the user does not
+ actually link against crtbegin.o; the
+ linker won't look for a file to match a
+ wildcard. The wildcard also means that it
+ doesn't matter which directory crtbegin.o
+ is in. */
+
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
+
+ /* We don't want to include the .ctor section from
+ the crtend.o file until after the sorted ctors.
+ The .ctor section from the crtend file contains the
+ end of ctors marker and it must be last */
+
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ ${CONSTRUCTING+${CTOR_END}}
+ }"
+
+DTOR=" .dtors ${CONSTRUCTING-0} :
+ {
+ ${CONSTRUCTING+${DTOR_START}}
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ ${CONSTRUCTING+${DTOR_END}}
+ }"
+
+# if this is for an embedded system, don't add SIZEOF_HEADERS.
+if [ -z "$EMBEDDED" ]; then
+ test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR} + SIZEOF_HEADERS"
+else
+ test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR}"
+fi
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
+ "${LITTLE_OUTPUT_FORMAT}")
+OUTPUT_ARCH(${OUTPUT_ARCH})
+${RELOCATING+ENTRY(${ENTRY})}
+
+${RELOCATING+${LIB_SEARCH_DIRS}}
+${RELOCATING+/* Do we need any of these for elf?
+ __DYNAMIC = 0; ${STACKZERO+${STACKZERO}} ${SHLIB_PATH+${SHLIB_PATH}} */}
+${RELOCATING+${EXECUTABLE_SYMBOLS}}
+${RELOCATING+${INPUT_FILES}}
+${RELOCATING- /* For some reason, the Solaris linker makes bad executables
+ if gld -r is used and the intermediate file has sections starting
+ at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld
+ bug. But for now assigning the zero vmas works. */}
+
+SECTIONS
+{
+ ${CREATE_SHLIB-${RELOCATING+. = ${TEXT_BASE_ADDRESS};}}
+ ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR:-0} + SIZEOF_HEADERS;}}
+ ${CREATE_SHLIB-${INTERP}}
+ ${TEXT_DYNAMIC+${DYNAMIC}}
+
+EOF
+if [ "x$COMBRELOC" = x ]; then
+ COMBRELOCCAT=cat
+else
+ COMBRELOCCAT="cat > $COMBRELOC"
+fi
+eval $COMBRELOCCAT <<EOF
+ .rel.init ${RELOCATING-0} : { *(.rel.init) }
+ .rela.init ${RELOCATING-0} : { *(.rela.init) }
+ .rel.text ${RELOCATING-0} :
+ {
+ *(.rel.text)
+ ${RELOCATING+*(.rel.text.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.t.*)}
+ }
+ .rela.text ${RELOCATING-0} :
+ {
+ *(.rela.text)
+ ${RELOCATING+*(.rela.text.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.t.*)}
+ }
+ .rel.fini ${RELOCATING-0} : { *(.rel.fini) }
+ .rela.fini ${RELOCATING-0} : { *(.rela.fini) }
+ .rel.rodata ${RELOCATING-0} :
+ {
+ *(.rel.rodata)
+ ${RELOCATING+*(.rel.rodata.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.r.*)}
+ }
+ .rela.rodata ${RELOCATING-0} :
+ {
+ *(.rela.rodata)
+ ${RELOCATING+*(.rela.rodata.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.r.*)}
+ }
+ ${OTHER_READONLY_RELOC_SECTIONS}
+ .rel.data ${RELOCATING-0} :
+ {
+ *(.rel.data)
+ ${RELOCATING+*(.rel.data.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.d.*)}
+ }
+ .rela.data ${RELOCATING-0} :
+ {
+ *(.rela.data)
+ ${RELOCATING+*(.rela.data.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.d.*)}
+ }
+ .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) }
+ .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) }
+ .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) }
+ .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) }
+ .rel.got ${RELOCATING-0} : { *(.rel.got) }
+ .rela.got ${RELOCATING-0} : { *(.rela.got) }
+ ${OTHER_GOT_RELOC_SECTIONS}
+ .rel.sdata ${RELOCATING-0} :
+ {
+ *(.rel.sdata)
+ ${RELOCATING+*(.rel.sdata.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.s.*)}
+ }
+ .rela.sdata ${RELOCATING-0} :
+ {
+ *(.rela.sdata)
+ ${RELOCATING+*(.rela.sdata.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.s.*)}
+ }
+ .rel.sbss ${RELOCATING-0} :
+ {
+ *(.rel.sbss)
+ ${RELOCATING+*(.rel.sbss.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.sb.*)}
+ }
+ .rela.sbss ${RELOCATING-0} :
+ {
+ *(.rela.sbss)
+ ${RELOCATING+*(.rela.sbss.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.sb.*)}
+ }
+ .rel.sdata2 ${RELOCATING-0} :
+ {
+ *(.rel.sdata2)
+ ${RELOCATING+*(.rel.sdata2.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.s2.*)}
+ }
+ .rela.sdata2 ${RELOCATING-0} :
+ {
+ *(.rela.sdata2)
+ ${RELOCATING+*(.rela.sdata2.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.s2.*)}
+ }
+ .rel.sbss2 ${RELOCATING-0} :
+ {
+ *(.rel.sbss2)
+ ${RELOCATING+*(.rel.sbss2.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.sb2.*)}
+ }
+ .rela.sbss2 ${RELOCATING-0} :
+ {
+ *(.rela.sbss2)
+ ${RELOCATING+*(.rela.sbss2.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.sb2.*)}
+ }
+ .rel.bss ${RELOCATING-0} :
+ {
+ *(.rel.bss)
+ ${RELOCATING+*(.rel.bss.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.b.*)}
+ }
+ .rela.bss ${RELOCATING-0} :
+ {
+ *(.rela.bss)
+ ${RELOCATING+*(.rela.bss.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.b.*)}
+ }
+EOF
+if [ -n "$COMBRELOC" ]; then
+cat <<EOF
+ .rel.dyn :
+ {
+EOF
+sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rela\./d;s/^.*: { *\(.*\)}$/ \1/' $COMBRELOC
+cat <<EOF
+ }
+ .rela.dyn :
+ {
+EOF
+sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rel\./d;s/^.*: { *\(.*\)}/ \1/' $COMBRELOC
+cat <<EOF
+ }
+EOF
+fi
+cat <<EOF
+ .rel.plt ${RELOCATING-0} : { *(.rel.plt) }
+ .rela.plt ${RELOCATING-0} : { *(.rela.plt) }
+ ${OTHER_PLT_RELOC_SECTIONS}
+
+ .init ${RELOCATING-0} :
+ {
+ ${RELOCATING+${INIT_START}}
+ KEEP (*(.init))
+ ${RELOCATING+${INIT_END}}
+ } =${NOP-0}
+
+ ${DATA_PLT-${BSS_PLT-${PLT}}}
+ .text ${RELOCATING-0} :
+ {
+ ${RELOCATING+${TEXT_START_SYMBOLS}}
+ *(.text)
+ ${RELOCATING+*(.text.*)}
+ *(.stub)
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ ${RELOCATING+*(.gnu.linkonce.t.*)}
+ ${RELOCATING+${OTHER_TEXT_SECTIONS}}
+ } =${NOP-0}
+ .fini ${RELOCATING-0} :
+ {
+ ${RELOCATING+${FINI_START}}
+ KEEP (*(.fini))
+ ${RELOCATING+${FINI_END}}
+ } =${NOP-0}
+ ${RELOCATING+PROVIDE (__etext = .);}
+ ${RELOCATING+PROVIDE (_etext = .);}
+ ${RELOCATING+PROVIDE (etext = .);}
+
+ /* Adjust the address for the data segment. We want to adjust up to
+ the same address within the page on the next page up. */
+ ${CREATE_SHLIB-${RELOCATING+. = ${DATA_ADDR-ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))};}}
+ ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_DATA_ADDR-ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))};}}
+
+ .data ${RELOCATING-0} :
+ {
+ ${RELOCATING+${DATA_START_SYMBOLS}}
+ *(.data)
+ ${RELOCATING+*(.data.*)}
+ ${RELOCATING+*(.gnu.linkonce.d.*)}
+ ${CONSTRUCTING+SORT(CONSTRUCTORS)}
+ }
+ .data1 ${RELOCATING-0} : { *(.data1) }
+ .eh_frame ${RELOCATING-0} :
+ {
+ ${RELOCATING+PROVIDE (__eh_frame_begin = .);}
+ *(.eh_frame)
+ LONG (0);
+ ${RELOCATING+PROVIDE (__eh_frame_end = .);}
+ } ${RELOCATING+}
+ .gcc_except_table : { *(.gcc_except_table) }
+ ${INITIAL_READONLY_SECTIONS}
+ .hash ${RELOCATING-0} : { *(.hash) }
+ .dynsym ${RELOCATING-0} : { *(.dynsym) }
+ .dynstr ${RELOCATING-0} : { *(.dynstr) }
+ .gnu.version ${RELOCATING-0} : { *(.gnu.version) }
+ .gnu.version_d ${RELOCATING-0} : { *(.gnu.version_d) }
+ .gnu.version_r ${RELOCATING-0} : { *(.gnu.version_r) }
+ ${RODATA}
+ .rodata1 ${RELOCATING-0} : { *(.rodata1) }
+ ${CREATE_SHLIB-${SDATA2}}
+ ${CREATE_SHLIB-${SBSS2}}
+ ${RELOCATING+${OTHER_READONLY_SECTIONS}}
+ ${RELOCATING+${OTHER_READWRITE_SECTIONS}}
+ ${TEXT_DYNAMIC-${DYNAMIC}}
+ ${RELOCATING+${CTOR}}
+ ${RELOCATING+${DTOR}}
+ .jcr : { KEEP (*(.jcr)) }
+ ${DATA_PLT+${PLT}}
+ ${RELOCATING+${OTHER_GOT_SYMBOLS}}
+ .got ${RELOCATING-0} : { *(.got.plt) *(.got) }
+ ${RELOCATING+${OTHER_GOT_SECTIONS}}
+ ${CREATE_SHLIB+${SDATA2}}
+ ${CREATE_SHLIB+${SBSS2}}
+ /* We want the small data sections together, so single-instruction offsets
+ can access them all, and initialized data all before uninitialized, so
+ we can shorten the on-disk segment size. */
+ .sdata ${RELOCATING-0} :
+ {
+ ${RELOCATING+${SDATA_START_SYMBOLS}}
+ *(.sdata)
+ ${RELOCATING+*(.sdata.*)}
+ ${RELOCATING+*(.gnu.linkonce.s.*)}
+ }
+ ${RELOCATING+${OTHER_SDATA_SECTIONS}}
+ ${RELOCATING+_edata = .;}
+ ${RELOCATING+PROVIDE (edata = .);}
+ ${RELOCATING+__bss_start = .;}
+ ${RELOCATING+${OTHER_BSS_SYMBOLS}}
+ .sbss ${RELOCATING-0} :
+ {
+ ${RELOCATING+PROVIDE (__sbss_start = .);}
+ ${RELOCATING+PROVIDE (___sbss_start = .);}
+ *(.dynsbss)
+ *(.sbss)
+ ${RELOCATING+*(.sbss.*)}
+ ${RELOCATING+*(.gnu.linkonce.sb.*)}
+ *(.scommon)
+ ${RELOCATING+PROVIDE (__sbss_end = .);}
+ ${RELOCATING+PROVIDE (___sbss_end = .);}
+ }
+ ${BSS_PLT+${PLT}}
+ .bss ${RELOCATING-0} :
+ {
+ *(.dynbss)
+ *(.bss)
+ ${RELOCATING+*(.bss.*)}
+ ${RELOCATING+*(.gnu.linkonce.b.*)}
+ *(COMMON)
+ /* Align here to ensure that the .bss section occupies space up to
+ _end. Align after .bss to ensure correct alignment even if the
+ .bss section disappears because there are no input sections. */
+ ${RELOCATING+. = ALIGN(${ALIGNMENT});}
+ }
+ ${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
+ ${RELOCATING+. = ALIGN(${ALIGNMENT});}
+ ${RELOCATING+${OTHER_END_SYMBOLS}}
+ ${RELOCATING+_end = .;}
+ ${RELOCATING+PROVIDE (end = .);}
+
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+
+ .comment 0 : { *(.comment) }
+
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo .zdebug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames .zdebug_sfnames) }
+
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges .zdebug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames .zdebug_pubnames) }
+
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*} .zdebug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev .zdebug_abbrev) }
+ .debug_line 0 : { *(.debug_line .zdebug_line) }
+ .debug_frame 0 : { *(.debug_frame .zdebug_frame) }
+ .debug_str 0 : { *(.debug_str .zdebug_str) }
+ .debug_loc 0 : { *(.debug_loc .zdebug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo .zdebug_macinfo) }
+
+ /* SGI/MIPS DWARF 2 extensions */
+ .debug_weaknames 0 : { *(.debug_weaknames .zdebug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames .zdebug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames .zdebug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames .zdebug_varnames) }
+
+ ${RELOCATING+${OTHER_RELOCATING_SECTIONS}}
+
+ /* These must appear regardless of ${RELOCATING}. */
+ ${OTHER_SECTIONS}
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/m68kaux.sc b/binutils-2.21/ld/scripttempl/m68kaux.sc
new file mode 100644
index 0000000..09032be
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/m68kaux.sc
@@ -0,0 +1,46 @@
+# Linker script for A/UX.
+test -z "$ENTRY" && ENTRY=_start
+INIT='.init : { *(.init) }'
+FINI='.fini : { *(.fini) }'
+CTORS='.ctors : { *(.ctors) }'
+DTORS='.dtors : { *(.dtors) }'
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+${LIB_SEARCH_DIRS}
+
+${RELOCATING+ENTRY (${ENTRY})}
+
+SECTIONS
+{
+ .text ${RELOCATING+ $TEXT_START_ADDR} : {
+ ${RELOCATING+ *(.init)}
+ ${RELOCATING+ *(.fini)}
+ *(.text)
+ ${RELOCATING+ . = ALIGN(4);}
+ ${RELOCATING+ *(.ctors)}
+ ${RELOCATING+ *(.dtors)}
+ ${RELOCATING+ etext = .;}
+ ${RELOCATING+ _etext = .;}
+ } =0x4E714E71
+ .data ${RELOCATING+ $DATA_ALIGNMENT} : {
+ *(.data)
+ ${RELOCATING+ edata = .;}
+ ${RELOCATING+ _edata = .;}
+ }
+ .bss : {
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ end = .;}
+ ${RELOCATING+ _end = .;}
+ }
+ ${RELOCATING- ${INIT}}
+ ${RELOCATING- ${FINI}}
+ ${RELOCATING- ${CTORS}}
+ ${RELOCATING- ${DTORS}}
+
+ .comment 0 ${RELOCATING+(NOLOAD)} : { [ .comment ] [ .ident ] }
+ .stab 0 ${RELOCATING+(NOLOAD)} : { [ .stab ] }
+ .stabstr 0 ${RELOCATING+(NOLOAD)} : { [ .stabstr ] }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/m68kcoff.sc b/binutils-2.21/ld/scripttempl/m68kcoff.sc
new file mode 100644
index 0000000..f268c6f
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/m68kcoff.sc
@@ -0,0 +1,42 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+${LIB_SEARCH_DIRS}
+PROVIDE (__stack = 0);
+SECTIONS
+{
+ .text ${RELOCATING+ 0x1000000} : {
+ *(.text)
+ ${CONSTRUCTING+ . = ALIGN(4);}
+ ${RELOCATING+ etext = .;}
+ ${CONSTRUCTING+ __CTOR_LIST__ = .;}
+ ${CONSTRUCTING+ LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)}
+ ${CONSTRUCTING+ *(.ctors)}
+ ${CONSTRUCTING+ LONG(0)}
+ ${CONSTRUCTING+ __CTOR_END__ = .;}
+ ${CONSTRUCTING+ __DTOR_LIST__ = .;}
+ ${CONSTRUCTING+ LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)}
+ ${CONSTRUCTING+ *(.dtors)}
+ ${CONSTRUCTING+ LONG(0)}
+ ${CONSTRUCTING+ __DTOR_END__ = .;}
+ }
+ .data : {
+ *(.data)
+ ${RELOCATING+ edata = .};
+ }
+ .bss : {
+ ${RELOCATING+ __bss_start = .};
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ end = ALIGN(0x8)};
+ ${RELOCATING+ _end = ALIGN(0x8)};
+ }
+ .stab 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stab ]
+ }
+ .stabstr 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stabstr ]
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/m88kbcs.sc b/binutils-2.21/ld/scripttempl/m88kbcs.sc
new file mode 100644
index 0000000..0cd6ab9
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/m88kbcs.sc
@@ -0,0 +1,49 @@
+# These are substituted in as variables in order to get '}' in a shell
+# conditional expansion.
+INIT='.init : { *(.init) }'
+FINI='.fini : { *(.fini) }'
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+${RELOCATING+ENTRY (__start)}
+${RELOCATING+${LIB_SEARCH_DIRS}}
+
+SECTIONS
+{
+ .text ${RELOCATING+ (0x20007 + SIZEOF_HEADERS) &~ 7} :
+ {
+ ${RELOCATING+ __.text.start = .};
+ ${RELOCATING+ __.init.start = .};
+ ${RELOCATING+ *(.init)}
+ ${RELOCATING+ __.init.end = .};
+ *(.text)
+ ${RELOCATING+ __.tdesc_start = .};
+ ${RELOCATING+ *(.tdesc)}
+ ${RELOCATING+ __.text_end = .} ;
+ ${RELOCATING+ __.initp.start = .};
+ ${RELOCATING+ __.initp.end = .};
+ ${RELOCATING+ __.fini_start = .};
+ ${RELOCATING+ *(.fini) }
+ ${RELOCATING+ __.fini_end = .};
+ ${RELOCATING+_etext = .};
+ }
+ .data ${RELOCATING+ NEXT (0x400000) + ((SIZEOF(.text) + ADDR(.text)) % 0x2000)} :
+ {
+ *(.data)
+ ${RELOCATING+_edata = .};
+ }
+ .bss ${RELOCATING+ SIZEOF(.data) + ADDR(.data)} :
+ {
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ _end = .};
+ ${RELOCATING+ __end = .};
+ }
+ ${RELOCATING- ${INIT}}
+ ${RELOCATING- ${FINI}}
+ .comment 0 ${RELOCATING+(NOLOAD)} :
+ {
+ *(.comment)
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/mcorepe.sc b/binutils-2.21/ld/scripttempl/mcorepe.sc
new file mode 100644
index 0000000..511fdb1
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/mcorepe.sc
@@ -0,0 +1,163 @@
+# Linker script for MCore PE.
+
+if test -z "${RELOCATEABLE_OUTPUT_FORMAT}"; then
+ RELOCATEABLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+fi
+
+# We can't easily and portably get an unquoted $ in a shell
+# substitution, so we do this instead.
+# Sorting of the .foo$* sections is required by the definition of
+# grouped sections in PE.
+# Sorting of the file names in R_IDATA is required by the
+# current implementation of dlltool (this could probably be changed to
+# use grouped sections instead).
+if test "${RELOCATING}"; then
+ R_TEXT='*(SORT(.text$*))'
+ R_DATA='*(SORT(.data$*))'
+ R_RDATA='*(SORT(.rdata$*))'
+ R_IDATA='
+ SORT(*)(.idata$2)
+ SORT(*)(.idata$3)
+ /* These zeroes mark the end of the import list. */
+ LONG (0); LONG (0); LONG (0); LONG (0); LONG (0);
+ SORT(*)(.idata$4)
+ SORT(*)(.idata$5)
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)'
+ R_CRT='*(SORT(.CRT$*))'
+ R_RSRC='*(SORT(.rsrc$*))'
+else
+ R_TEXT=
+ R_DATA=
+ R_RDATA=
+ R_IDATA=
+ R_CRT=
+ R_RSRC=
+fi
+
+if test "$RELOCATING"; then
+ # Can't use ${RELOCATING+blah "blah" blah} for this,
+ # because bash 2.x will lose the doublequotes.
+ cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
+ "${LITTLE_OUTPUT_FORMAT}")
+EOF
+fi
+
+cat <<EOF
+${LIB_SEARCH_DIRS}
+
+${RELOCATING+ENTRY (_mainCRTStartup)}
+
+SECTIONS
+{
+ .text ${RELOCATING+ __image_base__ + __section_alignment__ } :
+ {
+ ${RELOCATING+ *(.init)}
+ *(.text)
+ ${R_TEXT}
+ ${RELOCATING+ *(.text.*)}
+ *(.glue_7t)
+ *(.glue_7)
+ ${CONSTRUCTING+ ___CTOR_LIST__ = .; __CTOR_LIST__ = . ;
+ LONG (-1); *(.ctors); *(.ctor); LONG (0); }
+ ${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ;
+ LONG (-1); *(.dtors); *(.dtor); LONG (0); }
+ ${RELOCATING+ *(.fini)}
+ /* ??? Why is .gcc_exc here? */
+ ${RELOCATING+ *(.gcc_exc)}
+ ${RELOCATING+ etext = .;}
+ *(.gcc_except_table)
+ }
+
+ /* The Cygwin32 library uses a section to avoid copying certain data
+ on fork. This used to be named ".data$nocopy". The linker used
+ to include this between __data_start__ and __data_end__, but that
+ breaks building the cygwin32 dll. Instead, we name the section
+ ".data_cygwin_nocopy" and explictly include it after __data_end__. */
+
+ .data ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ ${RELOCATING+__data_start__ = . ;}
+ *(.data)
+ *(.data2)
+ ${R_DATA}
+ ${RELOCATING+__data_end__ = . ;}
+ ${RELOCATING+*(.data_cygwin_nocopy)}
+ }
+
+ .bss ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ ${RELOCATING+__bss_start__ = . ;}
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+__bss_end__ = . ;}
+ }
+
+ .rdata ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ *(.rdata)
+ ${R_RDATA}
+ *(.eh_frame)
+ }
+
+ .edata ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ *(.edata)
+ }
+
+ /DISCARD/ :
+ {
+ *(.debug\$S)
+ *(.debug\$T)
+ *(.debug\$F)
+ *(.drectve)
+ }
+
+ .idata ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ /* This cannot currently be handled with grouped sections.
+ See pe.em:sort_sections. */
+ ${R_IDATA}
+ }
+ .CRT ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ ${R_CRT}
+ }
+
+ .endjunk ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ /* end is deprecated, don't use it */
+ ${RELOCATING+ end = .;}
+ ${RELOCATING+ _end = .;}
+ ${RELOCATING+ __end__ = .;}
+ }
+
+ .reloc ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ *(.reloc)
+ }
+
+ .rsrc ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ *(.rsrc)
+ ${R_RSRC}
+ }
+
+ .stab ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stab ]
+ }
+
+ .stabstr ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stabstr ]
+ }
+
+ .stack 0x80000 :
+ {
+ _stack = .;
+ *(.stack)
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/mep.sc b/binutils-2.21/ld/scripttempl/mep.sc
new file mode 100644
index 0000000..82a2b25
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/mep.sc
@@ -0,0 +1,444 @@
+#
+# Unusual variables checked by this code:
+# NOP - four byte opcode for no-op (defaults to 0)
+# NO_SMALL_DATA - no .sbss/.sbss2/.sdata/.sdata2 sections if not
+# empty.
+# SMALL_DATA_CTOR - .ctors contains small data.
+# SMALL_DATA_DTOR - .dtors contains small data.
+# DATA_ADDR - if end-of-text-plus-one-page isn't right for data start
+# INITIAL_READONLY_SECTIONS - at start of text segment
+# OTHER_READONLY_SECTIONS - other than .text .init .rodata ...
+# (e.g., .PARISC.milli)
+# OTHER_TEXT_SECTIONS - these get put in .text when relocating
+# OTHER_READWRITE_SECTIONS - other than .data .bss .ctors .sdata ...
+# (e.g., .PARISC.global)
+# OTHER_RELRO_SECTIONS - other than .data.rel.ro ...
+# (e.g. PPC32 .fixup, .got[12])
+# OTHER_BSS_SECTIONS - other than .bss .sbss ...
+# OTHER_SECTIONS - at the end
+# EXECUTABLE_SYMBOLS - symbols that must be defined for an
+# executable (e.g., _DYNAMIC_LINK)
+# TEXT_START_ADDR - the first byte of the text segment, after any
+# headers.
+# TEXT_BASE_ADDRESS - the first byte of the text segment.
+# TEXT_START_SYMBOLS - symbols that appear at the start of the
+# .text section.
+# DATA_START_SYMBOLS - symbols that appear at the start of the
+# .data section.
+# OTHER_GOT_SYMBOLS - symbols defined just before .got.
+# OTHER_GOT_SECTIONS - sections just after .got.
+# OTHER_SDATA_SECTIONS - sections just after .sdata.
+# OTHER_BSS_SYMBOLS - symbols that appear at the start of the
+# .bss section besides __bss_start.
+# DATA_PLT - .plt should be in data segment, not text segment.
+# PLT_BEFORE_GOT - .plt just before .got when .plt is in data segement.
+# BSS_PLT - .plt should be in bss segment
+# TEXT_DYNAMIC - .dynamic in text segment, not data segment.
+# EMBEDDED - whether this is for an embedded system.
+# SHLIB_TEXT_START_ADDR - if set, add to SIZEOF_HEADERS to set
+# start address of shared library.
+# INPUT_FILES - INPUT command of files to always include
+# WRITABLE_RODATA - if set, the .rodata section should be writable
+# INIT_START, INIT_END - statements just before and just after
+# combination of .init sections.
+# FINI_START, FINI_END - statements just before and just after
+# combination of .fini sections.
+# STACK_ADDR - start of a .stack section.
+# OTHER_END_SYMBOLS - symbols to place right at the end of the script.
+# SEPARATE_GOTPLT - if set, .got.plt should be separate output section,
+# so that .got can be in the RELRO area. It should be set to
+# the number of bytes in the beginning of .got.plt which can be
+# in the RELRO area as well.
+#
+# When adding sections, do note that the names of some sections are used
+# when specifying the start address of the next.
+#
+
+# Many sections come in three flavours. There is the 'real' section,
+# like ".data". Then there are the per-procedure or per-variable
+# sections, generated by -ffunction-sections and -fdata-sections in GCC,
+# and useful for --gc-sections, which for a variable "foo" might be
+# ".data.foo". Then there are the linkonce sections, for which the linker
+# eliminates duplicates, which are named like ".gnu.linkonce.d.foo".
+# The exact correspondences are:
+#
+# Section Linkonce section
+# .text .gnu.linkonce.t.foo
+# .rodata .gnu.linkonce.r.foo
+# .data .gnu.linkonce.d.foo
+# .bss .gnu.linkonce.b.foo
+# .sdata .gnu.linkonce.s.foo
+# .sbss .gnu.linkonce.sb.foo
+# .sdata2 .gnu.linkonce.s2.foo
+# .sbss2 .gnu.linkonce.sb2.foo
+# .debug_info .gnu.linkonce.wi.foo
+# .tdata .gnu.linkonce.td.foo
+# .tbss .gnu.linkonce.tb.foo
+#
+# Each of these can also have corresponding .rel.* and .rela.* sections.
+
+test -z "$ENTRY" && ENTRY=_start
+test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi
+test -z "${ELFSIZE}" && ELFSIZE=32
+test -z "${ALIGNMENT}" && ALIGNMENT="${ELFSIZE} / 8"
+test "$LD_FLAG" = "N" && DATA_ADDR=.
+test -n "$CREATE_SHLIB$CREATE_PIE" && test -n "$SHLIB_DATA_ADDR" && COMMONPAGESIZE=""
+test -z "$CREATE_SHLIB$CREATE_PIE" && test -n "$DATA_ADDR" && COMMONPAGESIZE=""
+test -n "$RELRO_NOW" && unset SEPARATE_GOTPLT
+DATA_SEGMENT_ALIGN="ALIGN(${SEGMENT_SIZE}) + (. & (${MAXPAGESIZE} - 1))"
+DATA_SEGMENT_RELRO_END=""
+DATA_SEGMENT_RELRO_GOTPLT_END=""
+DATA_SEGMENT_END=""
+if test -n "${COMMONPAGESIZE}"; then
+ DATA_SEGMENT_ALIGN="ALIGN (${SEGMENT_SIZE}) - ((${MAXPAGESIZE} - .) & (${MAXPAGESIZE} - 1)); . = DATA_SEGMENT_ALIGN (${MAXPAGESIZE}, ${COMMONPAGESIZE})"
+ DATA_SEGMENT_END=". = DATA_SEGMENT_END (.);"
+ if test -n "${SEPARATE_GOTPLT}"; then
+ DATA_SEGMENT_RELRO_GOTPLT_END=". = DATA_SEGMENT_RELRO_END (${SEPARATE_GOTPLT}, .);"
+ else
+ DATA_SEGMENT_RELRO_END=". = DATA_SEGMENT_RELRO_END (0, .);"
+ fi
+fi
+INTERP=".interp ${RELOCATING-0} : { *(.interp) }"
+PLT=".plt ${RELOCATING-0} : { *(.plt) }"
+if test -z "$GOT"; then
+ if test -z "$SEPARATE_GOTPLT"; then
+ GOT=".got ${RELOCATING-0} : { *(.got.plt) *(.got) }"
+ else
+ GOT=".got ${RELOCATING-0} : { *(.got) }"
+ GOTPLT="${RELOCATING+${DATA_SEGMENT_RELRO_GOTPLT_END}}
+ .got.plt ${RELOCATING-0} : { *(.got.plt) }"
+ fi
+fi
+DYNAMIC=".dynamic ${RELOCATING-0} : { *(.dynamic) }"
+RODATA=".rodata ${RELOCATING-0} : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }"
+DATARELRO=".data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) }"
+DISCARDED="/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }"
+if test -z "${NO_SMALL_DATA}"; then
+ SBSS=".sbss ${RELOCATING-0} :
+ {
+ ${RELOCATING+PROVIDE (__sbss_start = .);}
+ ${RELOCATING+PROVIDE (___sbss_start = .);}
+ ${CREATE_SHLIB+*(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)}
+ *(.dynsbss)
+ *(.sbss${RELOCATING+ .sbss.* .gnu.linkonce.sb.*})
+ *(.scommon)
+ ${RELOCATING+PROVIDE (__sbss_end = .);}
+ ${RELOCATING+PROVIDE (___sbss_end = .);}
+ }"
+ SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }"
+ SDATA="/* We want the small data sections together, so single-instruction offsets
+ can access them all, and initialized data all before uninitialized, so
+ we can shorten the on-disk segment size. */
+ .sdata ${RELOCATING-0} :
+ {
+ ${RELOCATING+${SDATA_START_SYMBOLS}}
+ ${CREATE_SHLIB+*(.sdata2 .sdata2.* .gnu.linkonce.s2.*)}
+ *(.sdata${RELOCATING+ .sdata.* .gnu.linkonce.s.*})
+ }"
+ SDATA2=".sdata2 ${RELOCATING-0} : { *(.sdata2${RELOCATING+ .sdata2.* .gnu.linkonce.s2.*}) }"
+ REL_SDATA=".rel.sdata ${RELOCATING-0} : { *(.rel.sdata${RELOCATING+ .rel.sdata.* .rel.gnu.linkonce.s.*}) }
+ .rela.sdata ${RELOCATING-0} : { *(.rela.sdata${RELOCATING+ .rela.sdata.* .rela.gnu.linkonce.s.*}) }"
+ REL_SBSS=".rel.sbss ${RELOCATING-0} : { *(.rel.sbss${RELOCATING+ .rel.sbss.* .rel.gnu.linkonce.sb.*}) }
+ .rela.sbss ${RELOCATING-0} : { *(.rela.sbss${RELOCATING+ .rela.sbss.* .rela.gnu.linkonce.sb.*}) }"
+ REL_SDATA2=".rel.sdata2 ${RELOCATING-0} : { *(.rel.sdata2${RELOCATING+ .rel.sdata2.* .rel.gnu.linkonce.s2.*}) }
+ .rela.sdata2 ${RELOCATING-0} : { *(.rela.sdata2${RELOCATING+ .rela.sdata2.* .rela.gnu.linkonce.s2.*}) }"
+ REL_SBSS2=".rel.sbss2 ${RELOCATING-0} : { *(.rel.sbss2${RELOCATING+ .rel.sbss2.* .rel.gnu.linkonce.sb2.*}) }
+ .rela.sbss2 ${RELOCATING-0} : { *(.rela.sbss2${RELOCATING+ .rela.sbss2.* .rela.gnu.linkonce.sb2.*}) }"
+else
+ NO_SMALL_DATA=" "
+fi
+test -n "$SEPARATE_GOTPLT" && SEPARATE_GOTPLT=" "
+CTOR=".ctors ${CONSTRUCTING-0} :
+ {
+ ${CONSTRUCTING+${CTOR_START}}
+ /* gcc uses crtbegin.o to find the start of
+ the constructors, so we make sure it is
+ first. Because this is a wildcard, it
+ doesn't matter if the user does not
+ actually link against crtbegin.o; the
+ linker won't look for a file to match a
+ wildcard. The wildcard also means that it
+ doesn't matter which directory crtbegin.o
+ is in. */
+
+ KEEP (*crtbegin*.o(.ctors))
+
+ /* We don't want to include the .ctor section from
+ from the crtend.o file until after the sorted ctors.
+ The .ctor section from the crtend file contains the
+ end of ctors marker and it must be last */
+
+ KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ ${CONSTRUCTING+${CTOR_END}}
+ }"
+DTOR=".dtors ${CONSTRUCTING-0} :
+ {
+ ${CONSTRUCTING+${DTOR_START}}
+ KEEP (*crtbegin*.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ ${CONSTRUCTING+${DTOR_END}}
+ }"
+STACK=" .stack ${RELOCATING-0}${RELOCATING+${STACK_ADDR}} :
+ {
+ ${RELOCATING+_stack = .;}
+ *(.stack)
+ }"
+
+# if this is for an embedded system, don't add SIZEOF_HEADERS.
+if [ -z "$EMBEDDED" ]; then
+ test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR} + SIZEOF_HEADERS"
+else
+ test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR}"
+fi
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
+ "${LITTLE_OUTPUT_FORMAT}")
+OUTPUT_ARCH(${OUTPUT_ARCH})
+${RELOCATING+ENTRY(${ENTRY})}
+
+${RELOCATING+${LIB_SEARCH_DIRS}}
+${RELOCATING+/* Do we need any of these for elf?
+ __DYNAMIC = 0; ${STACKZERO+${STACKZERO}} ${SHLIB_PATH+${SHLIB_PATH}} */}
+${RELOCATING+${EXECUTABLE_SYMBOLS}}
+${RELOCATING+${INPUT_FILES}}
+${RELOCATING- /* For some reason, the Solaris linker makes bad executables
+ if gld -r is used and the intermediate file has sections starting
+ at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld
+ bug. But for now assigning the zero vmas works. */}
+
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+PROVIDE (__executable_start = ${TEXT_START_ADDR}); . = ${TEXT_BASE_ADDRESS};}}}
+ ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR:-0} + SIZEOF_HEADERS;}}
+ ${CREATE_PIE+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR:-0} + SIZEOF_HEADERS;}}
+ ${CREATE_SHLIB-${INTERP}}
+ ${INITIAL_READONLY_SECTIONS}
+ ${TEXT_DYNAMIC+${DYNAMIC}}
+ .hash ${RELOCATING-0} : { *(.hash) }
+ .dynsym ${RELOCATING-0} : { *(.dynsym) }
+ .dynstr ${RELOCATING-0} : { *(.dynstr) }
+ .gnu.version ${RELOCATING-0} : { *(.gnu.version) }
+ .gnu.version_d ${RELOCATING-0}: { *(.gnu.version_d) }
+ .gnu.version_r ${RELOCATING-0}: { *(.gnu.version_r) }
+
+EOF
+if [ "x$COMBRELOC" = x ]; then
+ COMBRELOCCAT=cat
+else
+ COMBRELOCCAT="cat > $COMBRELOC"
+fi
+eval $COMBRELOCCAT <<EOF
+ .rel.init ${RELOCATING-0} : { *(.rel.init) }
+ .rela.init ${RELOCATING-0} : { *(.rela.init) }
+ .rel.text ${RELOCATING-0} : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) }
+ .rela.text ${RELOCATING-0} : { *(.rela.text${RELOCATING+ .rela.text.* .rela.gnu.linkonce.t.*}) }
+ .rel.fini ${RELOCATING-0} : { *(.rel.fini) }
+ .rela.fini ${RELOCATING-0} : { *(.rela.fini) }
+ .rel.rodata ${RELOCATING-0} : { *(.rel.rodata${RELOCATING+ .rel.rodata.* .rel.gnu.linkonce.r.*}) }
+ .rela.rodata ${RELOCATING-0} : { *(.rela.rodata${RELOCATING+ .rela.rodata.* .rela.gnu.linkonce.r.*}) }
+ ${OTHER_READONLY_RELOC_SECTIONS}
+ .rel.data.rel.ro ${RELOCATING-0} : { *(.rel.data.rel.ro${RELOCATING+*}) }
+ .rela.data.rel.ro ${RELOCATING-0} : { *(.rel.data.rel.ro${RELOCATING+*}) }
+ .rel.data ${RELOCATING-0} : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) }
+ .rela.data ${RELOCATING-0} : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) }
+ .rel.tdata ${RELOCATING-0} : { *(.rel.tdata${RELOCATING+ .rel.tdata.* .rel.gnu.linkonce.td.*}) }
+ .rela.tdata ${RELOCATING-0} : { *(.rela.tdata${RELOCATING+ .rela.tdata.* .rela.gnu.linkonce.td.*}) }
+ .rel.tbss ${RELOCATING-0} : { *(.rel.tbss${RELOCATING+ .rel.tbss.* .rel.gnu.linkonce.tb.*}) }
+ .rela.tbss ${RELOCATING-0} : { *(.rela.tbss${RELOCATING+ .rela.tbss.* .rela.gnu.linkonce.tb.*}) }
+ .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) }
+ .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) }
+ .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) }
+ .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) }
+ .rel.got ${RELOCATING-0} : { *(.rel.got) }
+ .rela.got ${RELOCATING-0} : { *(.rela.got) }
+ ${OTHER_GOT_RELOC_SECTIONS}
+ ${REL_SDATA}
+ ${REL_SBSS}
+ ${REL_SDATA2}
+ ${REL_SBSS2}
+ .rel.bss ${RELOCATING-0} : { *(.rel.bss${RELOCATING+ .rel.bss.* .rel.gnu.linkonce.b.*}) }
+ .rela.bss ${RELOCATING-0} : { *(.rela.bss${RELOCATING+ .rela.bss.* .rela.gnu.linkonce.b.*}) }
+EOF
+if [ -n "$COMBRELOC" ]; then
+cat <<EOF
+ .rel.dyn ${RELOCATING-0} :
+ {
+EOF
+sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rela\./d;s/^.*: { *\(.*\)}$/ \1/' $COMBRELOC
+cat <<EOF
+ }
+ .rela.dyn ${RELOCATING-0} :
+ {
+EOF
+sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rel\./d;s/^.*: { *\(.*\)}/ \1/' $COMBRELOC
+cat <<EOF
+ }
+EOF
+fi
+cat <<EOF
+ .rel.plt ${RELOCATING-0} : { *(.rel.plt) }
+ .rela.plt ${RELOCATING-0} : { *(.rela.plt) }
+ ${OTHER_PLT_RELOC_SECTIONS}
+
+ .init ${RELOCATING-0} :
+ {
+ ${RELOCATING+${INIT_START}}
+ KEEP (*(.init))
+ ${RELOCATING+${INIT_END}}
+ } =${NOP-0}
+
+ ${DATA_PLT-${BSS_PLT-${PLT}}}
+ .text ${RELOCATING-0} :
+ {
+ ${RELOCATING+${TEXT_START_SYMBOLS}}
+ *(.text .stub${RELOCATING+ .text.* .gnu.linkonce.t.*})
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ ${RELOCATING+${OTHER_TEXT_SECTIONS}}
+ } =${NOP-0}
+ .fini ${RELOCATING-0} :
+ {
+ ${RELOCATING+${FINI_START}}
+ KEEP (*(.fini))
+ ${RELOCATING+${FINI_END}}
+ } =${NOP-0}
+ ${RELOCATING+PROVIDE (__etext = .);}
+ ${RELOCATING+PROVIDE (_etext = .);}
+ ${RELOCATING+PROVIDE (etext = .);}
+ ${WRITABLE_RODATA-${RODATA}}
+ .rodata1 ${RELOCATING-0} : { *(.rodata1) }
+ ${CREATE_SHLIB-${SDATA2}}
+ ${CREATE_SHLIB-${SBSS2}}
+ ${OTHER_READONLY_SECTIONS}
+ .eh_frame_hdr : { *(.eh_frame_hdr) }
+ .eh_frame ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.eh_frame)) }
+ .gcc_except_table ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) }
+
+ /* Adjust the address for the data segment. We want to adjust up to
+ the same address within the page on the next page up. */
+ ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+. = ${DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}}
+ ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}
+ ${CREATE_PIE+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}
+
+ /* Exception handling */
+ .eh_frame ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.eh_frame)) }
+ .gcc_except_table ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) }
+
+ /* Thread Local Storage sections */
+ .tdata ${RELOCATING-0} : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) }
+ .tbss ${RELOCATING-0} : { *(.tbss${RELOCATING+ .tbss.* .gnu.linkonce.tb.*})${RELOCATING+ *(.tcommon)} }
+
+ .preinit_array ${RELOCATING-0} : { KEEP (*(.preinit_array)) }
+ .init_array ${RELOCATING-0} : { KEEP (*(.init_array)) }
+ .fini_array ${RELOCATING-0} : { KEEP (*(.fini_array)) }
+
+ ${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}}
+ ${SMALL_DATA_DTOR-${RELOCATING+${DTOR}}}
+ .jcr ${RELOCATING-0} : { KEEP (*(.jcr)) }
+
+ ${RELOCATING+${DATARELRO}}
+ ${OTHER_RELRO_SECTIONS}
+ ${TEXT_DYNAMIC-${DYNAMIC}}
+ ${NO_SMALL_DATA+${RELRO_NOW+${GOT}}}
+ ${NO_SMALL_DATA+${RELRO_NOW-${SEPARATE_GOTPLT+${GOT}}}}
+ ${NO_SMALL_DATA+${RELRO_NOW-${SEPARATE_GOTPLT+${GOTPLT}}}}
+ ${RELOCATING+${DATA_SEGMENT_RELRO_END}}
+ ${NO_SMALL_DATA+${RELRO_NOW-${SEPARATE_GOTPLT-${GOT}}}}
+
+ ${DATA_PLT+${PLT_BEFORE_GOT-${PLT}}}
+
+ .data ${RELOCATING-0} :
+ {
+ ${RELOCATING+${DATA_START_SYMBOLS}}
+ *(.data${RELOCATING+ .data.* .gnu.linkonce.d.*})
+ ${CONSTRUCTING+SORT(CONSTRUCTORS)}
+ }
+ .data1 ${RELOCATING-0} : { *(.data1) }
+ ${WRITABLE_RODATA+${RODATA}}
+ ${OTHER_READWRITE_SECTIONS}
+ ${SMALL_DATA_CTOR+${RELOCATING+${CTOR}}}
+ ${SMALL_DATA_DTOR+${RELOCATING+${DTOR}}}
+ ${DATA_PLT+${PLT_BEFORE_GOT+${PLT}}}
+ ${RELOCATING+${OTHER_GOT_SYMBOLS}}
+ ${NO_SMALL_DATA-${GOT}}
+ ${OTHER_GOT_SECTIONS}
+ ${SDATA}
+ ${OTHER_SDATA_SECTIONS}
+ ${RELOCATING+_edata = .;}
+ ${RELOCATING+PROVIDE (edata = .);}
+ ${RELOCATING+__bss_start = .;}
+ ${RELOCATING+${OTHER_BSS_SYMBOLS}}
+ ${SBSS}
+ ${BSS_PLT+${PLT}}
+ .bss ${RELOCATING-0} :
+ {
+ *(.dynbss)
+ *(.bss${RELOCATING+ .bss.* .gnu.linkonce.b.*})
+ *(COMMON)
+ /* Align here to ensure that the .bss section occupies space up to
+ _end. Align after .bss to ensure correct alignment even if the
+ .bss section disappears because there are no input sections. */
+ ${RELOCATING+. = ALIGN(${ALIGNMENT});}
+ }
+ ${OTHER_BSS_SECTIONS}
+ ${RELOCATING+. = ALIGN(${ALIGNMENT});}
+ ${RELOCATING+_end = .;}
+ ${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
+ ${RELOCATING+PROVIDE (end = .);}
+ ${RELOCATING+${DATA_SEGMENT_END}}
+
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+
+ .comment 0 : { *(.comment) }
+
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo .zdebug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames .zdebug_sfnames) }
+
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges .zdebug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames .zdebug_pubnames) }
+
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*} .zdebug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev .zdebug_abbrev) }
+ .debug_line 0 : { *(.debug_line .zdebug_line) }
+ .debug_frame 0 : { *(.debug_frame .zdebug_frame) }
+ .debug_str 0 : { *(.debug_str .zdebug_str) }
+ .debug_loc 0 : { *(.debug_loc .zdebug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo .zdebug_macinfo) }
+
+ /* SGI/MIPS DWARF 2 extensions */
+ .debug_weaknames 0 : { *(.debug_weaknames .zdebug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames .zdebug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames .zdebug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames .zdebug_varnames) }
+
+ ${STACK_ADDR+${STACK}}
+ ${OTHER_SECTIONS}
+ ${RELOCATING+${OTHER_END_SYMBOLS}}
+ ${RELOCATING+${DISCARDED}}
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/mips.sc b/binutils-2.21/ld/scripttempl/mips.sc
new file mode 100644
index 0000000..f53558a
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/mips.sc
@@ -0,0 +1,69 @@
+# Linker script for MIPS systems.
+# Ian Lance Taylor <ian@cygnus.com>.
+# These variables may be overridden by the emulation file. The
+# defaults are appropriate for a DECstation running Ultrix.
+test -z "$ENTRY" && ENTRY=__start
+
+if [ -z "$EMBEDDED" ]; then
+ test -z "$TEXT_START_ADDR" && TEXT_START_ADDR="0x400000 + SIZEOF_HEADERS"
+else
+ test -z "$TEXT_START_ADDR" && TEXT_START_ADDR="0x400000"
+fi
+if test "x$LD_FLAG" = "xn" -o "x$LD_FLAG" = "xN"; then
+ DATA_ADDR=.
+else
+ test -z "$DATA_ADDR" && DATA_ADDR=0x10000000
+fi
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
+ "${LITTLE_OUTPUT_FORMAT}")
+${LIB_SEARCH_DIRS}
+
+${RELOCATING+ENTRY (${ENTRY})}
+
+SECTIONS
+{
+ ${RELOCATING+. = ${TEXT_START_ADDR};}
+ .text : {
+ ${RELOCATING+ _ftext = . };
+ *(.init)
+ ${RELOCATING+ eprol = .};
+ *(.text)
+ *(.fini)
+ ${RELOCATING+ etext = .};
+ ${RELOCATING+ _etext = .};
+ }
+ ${RELOCATING+. = ${DATA_ADDR};}
+ .rdata : {
+ *(.rdata)
+ }
+ ${RELOCATING+ _fdata = ALIGN(16);}
+ .data : {
+ *(.data)
+ ${CONSTRUCTING+CONSTRUCTORS}
+ }
+ ${RELOCATING+ _gp = ALIGN(16) + 0x8000;}
+ .lit8 : {
+ *(.lit8)
+ }
+ .lit4 : {
+ *(.lit4)
+ }
+ .sdata : {
+ *(.sdata)
+ }
+ ${RELOCATING+ edata = .;}
+ ${RELOCATING+ _edata = .;}
+ ${RELOCATING+ _fbss = .;}
+ .sbss : {
+ *(.sbss)
+ *(.scommon)
+ }
+ .bss : {
+ *(.bss)
+ *(COMMON)
+ }
+ ${RELOCATING+ end = .;}
+ ${RELOCATING+ _end = .;}
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/mipsbsd.sc b/binutils-2.21/ld/scripttempl/mipsbsd.sc
new file mode 100644
index 0000000..b222b33
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/mipsbsd.sc
@@ -0,0 +1,30 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
+ "${LITTLE_OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+
+${RELOCATING+${LIB_SEARCH_DIRS}}
+SECTIONS
+{
+ ${RELOCATING+. = ${TEXT_START_ADDR};}
+ .text :
+ {
+ CREATE_OBJECT_SYMBOLS
+ *(.text)
+ ${RELOCATING+etext = ${DATA_ALIGNMENT};}
+ }
+ ${RELOCATING+. = ${DATA_ALIGNMENT};}
+ .data :
+ {
+ *(.data)
+ ${CONSTRUCTING+CONSTRUCTORS}
+ ${RELOCATING+edata = .;}
+ }
+ .bss :
+ {
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+end = . };
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/mmo.sc b/binutils-2.21/ld/scripttempl/mmo.sc
new file mode 100644
index 0000000..bdb345e
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/mmo.sc
@@ -0,0 +1,137 @@
+# MMO is not a relocateable format, and we don't want to require an
+# explicit (e.g.) "-m elf64mmix" when -r is used.
+test -z $RELOCATEABLE_OUTPUT_FORMAT && RELOCATEABLE_OUTPUT_FORMAT=$OUTPUT_FORMAT
+test -z ${RELOCATING+0} && OUTPUT_FORMAT=$RELOCATEABLE_OUTPUT_FORMAT
+cat <<EOF
+OUTPUT_FORMAT("$OUTPUT_FORMAT")
+OUTPUT_ARCH(mmix)
+${RELOCATING+ENTRY(Main)}
+SECTIONS
+{
+ .text ${RELOCATING+ ${TEXT_START_ADDR}}:
+ {
+ *(.text)
+ ${RELOCATING+*(.text.*)}
+ ${RELOCATING+*(.gnu.linkonce.t*)}
+ ${RELOCATING+*(.rodata)}
+ ${RELOCATING+*(.rodata.*)}
+ ${RELOCATING+*(.gnu.linkonce.r*)}
+
+ /* FIXME: Move .init, .fini, .ctors and .dtors to their own sections. */
+ ${RELOCATING+ PROVIDE (_init_start = .);}
+ ${RELOCATING+ PROVIDE (_init = .);}
+ ${RELOCATING+ KEEP (*(.init))}
+ ${RELOCATING+ PROVIDE (_init_end = .);}
+
+ ${RELOCATING+ PROVIDE (_fini_start = .);}
+ ${RELOCATING+ PROVIDE (_fini = .);}
+ ${RELOCATING+ KEEP (*(.fini))}
+ ${RELOCATING+ PROVIDE (_fini_end = .);}
+
+ /* FIXME: Align ctors, dtors, ehframe. */
+ ${RELOCATING+ PROVIDE (_ctors_start = .);}
+ ${RELOCATING+ PROVIDE (__ctors_start = .);}
+ ${RELOCATING+ PROVIDE (_ctors = .);}
+ ${RELOCATING+ PROVIDE (__ctors = .);}
+ ${RELOCATING+ KEEP (*crtbegin.o(.ctors))}
+ ${RELOCATING+ KEEP (*crtbegin?.o(.ctors))}
+ ${RELOCATING+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .ctors))}
+ ${RELOCATING+ KEEP (*(SORT(.ctors.*)))}
+ ${RELOCATING+ KEEP (*(.ctors))}
+ ${RELOCATING+ PROVIDE (_ctors_end = .);}
+ ${RELOCATING+ PROVIDE (__ctors_end = .);}
+
+ ${RELOCATING+ PROVIDE (_dtors_start = .);}
+ ${RELOCATING+ PROVIDE (__dtors_start = .);}
+ ${RELOCATING+ PROVIDE (_dtors = .);}
+ ${RELOCATING+ PROVIDE (__dtors = .);}
+ ${RELOCATING+ KEEP (*crtbegin.o(.dtors))}
+ ${RELOCATING+ KEEP (*crtbegin?.o(.dtors))}
+ ${RELOCATING+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .dtors))}
+ ${RELOCATING+ KEEP (*(SORT(.dtors.*)))}
+ ${RELOCATING+ KEEP (*(.dtors))}
+ ${RELOCATING+ PROVIDE (_dtors_end = .);}
+ ${RELOCATING+ PROVIDE (__dtors_end = .);}
+
+ ${RELOCATING+KEEP (*(.jcr))}
+ ${RELOCATING+KEEP (*(.eh_frame))}
+ ${RELOCATING+*(.gcc_except_table)}
+
+ ${RELOCATING+ PROVIDE(etext = .);}
+ ${RELOCATING+ PROVIDE(_etext = .);}
+ ${RELOCATING+ PROVIDE(__etext = .);}
+ ${RELOCATING+Main = DEFINED (Main) ? Main : (DEFINED (_start) ? _start : ADDR (.text));}
+ }
+
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .debug_aranges 0 : { *(.debug_aranges .zdebug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames .zdebug_pubnames) }
+ .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*} .zdebug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev .zdebug_abbrev) }
+ .debug_line 0 : { *(.debug_line .zdebug_line) }
+ .debug_frame 0 : { *(.debug_frame .zdebug_frame) }
+ .debug_str 0 : { *(.debug_str .zdebug_str) }
+ .debug_loc 0 : { *(.debug_loc .zdebug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo .zdebug_macinfo) }
+ .debug_ranges 0 : { *(.debug_ranges .zdebug_ranges) }
+
+ .data ${RELOCATING+ ${DATA_ADDR}}:
+ {
+ ${RELOCATING+ PROVIDE(__Sdata = .);}
+
+ *(.data);
+ ${RELOCATING+*(.data.*)}
+ ${RELOCATING+*(.gnu.linkonce.d*)}
+
+ ${RELOCATING+ PROVIDE(__Edata = .);}
+
+ /* Deprecated, use __Edata. */
+ ${RELOCATING+ PROVIDE(edata = .);}
+ ${RELOCATING+ PROVIDE(_edata = .);}
+ ${RELOCATING+ PROVIDE(__edata = .);}
+ }
+
+ /* At the moment, although perhaps we should, we can't map sections
+ without contents to sections *with* contents due to FIXME: a BFD bug.
+ Anyway, the mmo back-end ignores sections without contents when
+ writing out sections, so this works fine. */
+ .bss :
+ {
+ ${RELOCATING+ PROVIDE(__Sbss = .);}
+ ${RELOCATING+ PROVIDE(__bss_start = .);}
+ ${RELOCATING+ *(.sbss);}
+ ${RELOCATING+ *(.bss);}
+ ${RELOCATING+*(.bss.*)}
+ ${RELOCATING+ *(COMMON);}
+ ${RELOCATING+ PROVIDE(__Ebss = .);}
+ }
+
+ /* Deprecated, use __Ebss or __Eall as appropriate. */
+ ${RELOCATING+ PROVIDE(end = .);}
+ ${RELOCATING+ PROVIDE(_end = .);}
+ ${RELOCATING+ PROVIDE(__end = .);}
+ ${RELOCATING+ PROVIDE(__Eall = .);}
+
+ .MMIX.reg_contents :
+ {
+ /* Note that this section always has a fixed VMA - that of its
+ first register * 8. */
+ *(.MMIX.reg_contents.linker_allocated);
+ *(.MMIX.reg_contents);
+ }
+
+ /* By default, put the high end of the stack where the register stack
+ begins. They grow in opposite directions. */
+ PROVIDE (__Stack_start = 0x6000000000000000);
+
+ /* Unfortunately, stabs are not mappable from ELF to MMO.
+ It can probably be fixed with some amount of work. */
+ /DISCARD/ :
+ { ${RELOCATING+ *(.gnu.warning.*);} }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/moxie.sc b/binutils-2.21/ld/scripttempl/moxie.sc
new file mode 100644
index 0000000..f7d788f
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/moxie.sc
@@ -0,0 +1,52 @@
+TORS=".tors :
+ {
+ ___ctors = . ;
+ *(.ctors)
+ ___ctors_end = . ;
+ ___dtors = . ;
+ *(.dtors)
+ ___dtors_end = . ;
+ } > ram"
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+
+SECTIONS
+{
+ .text :
+ {
+ *(.text)
+ .init : { KEEP (*(.init)) } =0
+ .fini : { KEEP (*(.fini)) } =0
+ *(.strings)
+ ${RELOCATING+ _etext = . ; }
+ } ${RELOCATING+ > ram}
+ ${CONSTRUCTING+${TORS}}
+ .data :
+ {
+ *(.data)
+ ${RELOCATING+ _edata = . ; }
+ } ${RELOCATING+ > ram}
+ .bss :
+ {
+ ${RELOCATING+ _bss_start = . ; }
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ _end = . ; }
+ } ${RELOCATING+ > ram}
+ .stack ${RELOCATING+ 0x30000 } :
+ {
+ ${RELOCATING+ _stack = . ; }
+ *(.stack)
+ } ${RELOCATING+ > ram}
+ .stab 0 ${RELOCATING+(NOLOAD)} :
+ {
+ *(.stab)
+ }
+ .stabstr 0 ${RELOCATING+(NOLOAD)} :
+ {
+ *(.stabstr)
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/nw.sc b/binutils-2.21/ld/scripttempl/nw.sc
new file mode 100644
index 0000000..3fb9bce
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/nw.sc
@@ -0,0 +1,130 @@
+#
+# Unusual variables checked by this code:
+# NOP - four byte opcode for no-op (defaults to 0)
+# DATA_ADDR - if end-of-text-plus-one-page isn't right for data start
+# OTHER_READONLY_SECTIONS - other than .text .init .ctors .rodata ...
+# (e.g., .PARISC.milli)
+# OTHER_READWRITE_SECTIONS - other than .data .bss .sdata ...
+# (e.g., .PARISC.global)
+# OTHER_SECTIONS - at the end
+# EXECUTABLE_SYMBOLS - symbols that must be defined for an
+# executable (e.g., _DYNAMIC_LINK)
+# TEXT_START_SYMBOLS - symbols that appear at the start of the
+# .text section.
+# DATA_START_SYMBOLS - symbols that appear at the start of the
+# .data section.
+# OTHER_BSS_SYMBOLS - symbols that appear at the start of the
+# .bss section besides __bss_start.
+# DATA_PLT - .plt should be in data segment, not text segment.
+#
+# When adding sections, do note that the names of some sections are used
+# when specifying the start address of the next.
+#
+test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+test "$LD_FLAG" = "N" && DATA_ADDR=.
+INTERP=".interp ${RELOCATING-0} : { *(.interp) }"
+PLT=".plt ${RELOCATING-0} : { *(.plt) }"
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
+ "${LITTLE_OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+
+${RELOCATING+${LIB_SEARCH_DIRS}}
+${RELOCATING+/* Do we need any of these for elf?
+ __DYNAMIC = 0; ${STACKZERO+${STACKZERO}} ${SHLIB_PATH+${SHLIB_PATH}} */}
+${RELOCATING+${EXECUTABLE_SYMBOLS}}
+${RELOCATING- /* For some reason, the Solaris linker makes bad executables
+ if gld -r is used and the intermediate file has sections starting
+ at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld
+ bug. But for now assigning the zero vmas works. */}
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ ${CREATE_SHLIB-${RELOCATING+. = ${TEXT_START_ADDR} + SIZEOF_HEADERS;}}
+ ${CREATE_SHLIB+${RELOCATING+. = SIZEOF_HEADERS;}}
+ ${CREATE_SHLIB-${INTERP}}
+ .hash ${RELOCATING-0} : { *(.hash) }
+ .dynsym ${RELOCATING-0} : { *(.dynsym) }
+ .dynstr ${RELOCATING-0} : { *(.dynstr) }
+ .rel.text ${RELOCATING-0} : { *(.rel.text) }
+ .rela.text ${RELOCATING-0} : { *(.rela.text) }
+ .rel.data ${RELOCATING-0} : { *(.rel.data) }
+ .rela.data ${RELOCATING-0} : { *(.rela.data) }
+ .rel.rodata ${RELOCATING-0} : { *(.rel.rodata) }
+ .rela.rodata ${RELOCATING-0} : { *(.rela.rodata) }
+ .rel.got ${RELOCATING-0} : { *(.rel.got) }
+ .rela.got ${RELOCATING-0} : { *(.rela.got) }
+ .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) }
+ .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) }
+ .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) }
+ .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) }
+ .rel.bss ${RELOCATING-0} : { *(.rel.bss) }
+ .rela.bss ${RELOCATING-0} : { *(.rela.bss) }
+ .rel.plt ${RELOCATING-0} : { *(.rel.plt) }
+ .rela.plt ${RELOCATING-0} : { *(.rela.plt) }
+ .init ${RELOCATING-0} : { *(.init) } =${NOP-0}
+ ${DATA_PLT-${PLT}}
+ .text ${RELOCATING-0} :
+ {
+ ${RELOCATING+${TEXT_START_SYMBOLS}}
+ *(.text)
+ ${CONSTRUCTING+ __CTOR_LIST__ = .;}
+ ${CONSTRUCTING+ LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)}
+ ${CONSTRUCTING+ *(.ctors)}
+ ${CONSTRUCTING+ LONG(0)}
+ ${CONSTRUCTING+ __CTOR_END__ = .;}
+ ${CONSTRUCTING+ __DTOR_LIST__ = .;}
+ ${CONSTRUCTING+ LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)}
+ ${CONSTRUCTING+ *(.dtors)}
+ ${CONSTRUCTING+ LONG(0)}
+ ${CONSTRUCTING+ __DTOR_END__ = .;}
+ }
+ ${RELOCATING+_etext = .;}
+ ${RELOCATING+PROVIDE (etext = .);}
+ .fini ${RELOCATING-0} : { *(.fini) } =${NOP-0}
+ .ctors ${RELOCATING-0} : { *(.ctors) }
+ .dtors ${RELOCATING-0} : { *(.dtors) }
+ .rodata ${RELOCATING-0} : { *(.rodata) }
+ .rodata1 ${RELOCATING-0} : { *(.rodata1) }
+ ${OTHER_READONLY_SECTIONS}
+
+ /* Read-write section, merged into data segment: */
+ ${RELOCATING+. = ${DATA_ADDR- ALIGN(8) + ${MAXPAGESIZE}};}
+ .data ${RELOCATING-0} :
+ {
+ ${RELOCATING+${DATA_START_SYMBOLS}}
+ *(.data)
+ ${CONSTRUCTING+CONSTRUCTORS}
+ }
+ .data1 ${RELOCATING-0} : { *(.data1) }
+ ${OTHER_READWRITE_SECTIONS}
+ .got ${RELOCATING-0} : { *(.got.plt) *(.got) }
+ .dynamic ${RELOCATING-0} : { *(.dynamic) }
+ ${DATA_PLT+${PLT}}
+ /* We want the small data sections together, so single-instruction offsets
+ can access them all, and initialized data all before uninitialized, so
+ we can shorten the on-disk segment size. */
+ .sdata ${RELOCATING-0} : { *(.sdata) }
+ ${RELOCATING+_edata = .;}
+ ${RELOCATING+PROVIDE (edata = .);}
+ ${RELOCATING+__bss_start = .;}
+ ${RELOCATING+${OTHER_BSS_SYMBOLS}}
+ .sbss ${RELOCATING-0} : { *(.sbss) *(.scommon) }
+ .bss ${RELOCATING-0} :
+ {
+ *(.dynbss)
+ *(.bss)
+ *(COMMON)
+ }
+ ${RELOCATING+_end = . ;}
+ ${RELOCATING+PROVIDE (end = .);}
+
+ /* These are needed for ELF backends which have not yet been
+ converted to the new style linker. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+
+ ${OTHER_SECTIONS}
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/or32.sc b/binutils-2.21/ld/scripttempl/or32.sc
new file mode 100644
index 0000000..2825b1e
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/or32.sc
@@ -0,0 +1,37 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+${LIB_SEARCH_DIRS}
+
+SECTIONS
+{
+ .text : {
+ *(.text)
+ ${RELOCATING+ __etext = .};
+ ${CONSTRUCTING+ __CTOR_LIST__ = .;}
+ ${CONSTRUCTING+ LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)}
+ ${CONSTRUCTING+ *(.ctors)}
+ ${CONSTRUCTING+ LONG(0)}
+ ${CONSTRUCTING+ __CTOR_END__ = .;}
+ ${CONSTRUCTING+ __DTOR_LIST__ = .;}
+ ${CONSTRUCTING+ LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)}
+ ${CONSTRUCTING+ *(.dtors)}
+ ${CONSTRUCTING+ LONG(0)}
+ ${CONSTRUCTING+ __DTOR_END__ = .;}
+ *(.lit)
+ *(.shdata)
+ }
+ .shbss SIZEOF(.text) + ADDR(.text) : {
+ *(.shbss)
+ }
+ .data : {
+ *(.data)
+ ${RELOCATING+ __edata = .};
+ }
+ .bss SIZEOF(.data) + ADDR(.data) :
+ {
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ __end = ALIGN(0x8)};
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/pe.sc b/binutils-2.21/ld/scripttempl/pe.sc
new file mode 100644
index 0000000..7d52cc5
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/pe.sc
@@ -0,0 +1,304 @@
+# Linker script for PE.
+
+if test -z "${RELOCATEABLE_OUTPUT_FORMAT}"; then
+ RELOCATEABLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+fi
+
+# We can't easily and portably get an unquoted $ in a shell
+# substitution, so we do this instead.
+# Sorting of the .foo$* sections is required by the definition of
+# grouped sections in PE.
+# Sorting of the file names in R_IDATA is required by the
+# current implementation of dlltool (this could probably be changed to
+# use grouped sections instead).
+if test "${RELOCATING}"; then
+ R_TEXT='*(SORT(.text$*))'
+ if test "x$LD_FLAG" = "xauto_import" ; then
+ R_DATA='*(SORT(.data$*))
+ *(.rdata)
+ *(SORT(.rdata$*))'
+ R_RDATA=''
+ else
+ R_DATA='*(SORT(.data$*))'
+ R_RDATA='*(.rdata)
+ *(SORT(.rdata$*))'
+ fi
+ R_IDATA234='
+ SORT(*)(.idata$2)
+ SORT(*)(.idata$3)
+ /* These zeroes mark the end of the import list. */
+ LONG (0); LONG (0); LONG (0); LONG (0); LONG (0);
+ SORT(*)(.idata$4)'
+ R_IDATA5='SORT(*)(.idata$5)'
+ R_IDATA67='
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)'
+ R_CRT_XC='*(SORT(.CRT$XC*)) /* C initialization */'
+ R_CRT_XI='*(SORT(.CRT$XI*)) /* C++ initialization */'
+ R_CRT_XL='*(SORT(.CRT$XL*)) /* TLS callbacks */'
+ R_CRT_XP='*(SORT(.CRT$XP*)) /* Pre-termination */'
+ R_CRT_XT='*(SORT(.CRT$XT*)) /* Termination */'
+ R_TLS='
+ *(.tls)
+ *(.tls$)
+ *(SORT(.tls$*))'
+ R_RSRC='*(SORT(.rsrc$*))'
+else
+ R_TEXT=
+ R_DATA=
+ R_RDATA='*(.rdata)'
+ R_IDATA234=
+ R_IDATA5=
+ R_IDATA67=
+ R_CRT=
+ R_RSRC=
+fi
+
+cat <<EOF
+${RELOCATING+OUTPUT_FORMAT(${OUTPUT_FORMAT})}
+${RELOCATING-OUTPUT_FORMAT(${RELOCATEABLE_OUTPUT_FORMAT})}
+${OUTPUT_ARCH+OUTPUT_ARCH(${OUTPUT_ARCH})}
+
+${LIB_SEARCH_DIRS}
+
+SECTIONS
+{
+ ${RELOCATING+/* Make the virtual address and file offset synced if the alignment is}
+ ${RELOCATING+ lower than the target page size. */}
+ ${RELOCATING+. = SIZEOF_HEADERS;}
+ ${RELOCATING+. = ALIGN(__section_alignment__);}
+ .text ${RELOCATING+ __image_base__ + ( __section_alignment__ < ${TARGET_PAGE_SIZE} ? . : __section_alignment__ )} :
+ {
+ ${RELOCATING+ *(.init)}
+ *(.text)
+ ${R_TEXT}
+ ${RELOCATING+ *(.text.*)}
+ *(.glue_7t)
+ *(.glue_7)
+ ${CONSTRUCTING+ ___CTOR_LIST__ = .; __CTOR_LIST__ = . ;
+ LONG (-1);*(.ctors); *(.ctor); *(SORT(.ctors.*)); LONG (0); }
+ ${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ;
+ LONG (-1); *(.dtors); *(.dtor); *(SORT(.dtors.*)); LONG (0); }
+ ${RELOCATING+ *(.fini)}
+ /* ??? Why is .gcc_exc here? */
+ ${RELOCATING+ *(.gcc_exc)}
+ ${RELOCATING+PROVIDE (etext = .);}
+ ${RELOCATING+ *(.gcc_except_table)}
+ }
+
+ /* The Cygwin32 library uses a section to avoid copying certain data
+ on fork. This used to be named ".data$nocopy". The linker used
+ to include this between __data_start__ and __data_end__, but that
+ breaks building the cygwin32 dll. Instead, we name the section
+ ".data_cygwin_nocopy" and explictly include it after __data_end__. */
+
+ .data ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ ${RELOCATING+__data_start__ = . ;}
+ *(.data)
+ *(.data2)
+ ${R_DATA}
+ *(.jcr)
+ ${RELOCATING+__data_end__ = . ;}
+ ${RELOCATING+*(.data_cygwin_nocopy)}
+ }
+
+ .rdata ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ ${R_RDATA}
+ ${RELOCATING+___RUNTIME_PSEUDO_RELOC_LIST__ = .;}
+ ${RELOCATING+__RUNTIME_PSEUDO_RELOC_LIST__ = .;}
+ *(.rdata_runtime_pseudo_reloc)
+ ${RELOCATING+___RUNTIME_PSEUDO_RELOC_LIST_END__ = .;}
+ ${RELOCATING+__RUNTIME_PSEUDO_RELOC_LIST_END__ = .;}
+ }
+
+ .eh_frame ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ *(.eh_frame)
+ }
+
+ .pdata ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ *(.pdata)
+ }
+
+ .bss ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ ${RELOCATING+__bss_start__ = . ;}
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+__bss_end__ = . ;}
+ }
+
+ .edata ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ *(.edata)
+ }
+
+ /DISCARD/ :
+ {
+ *(.debug\$S)
+ *(.debug\$T)
+ *(.debug\$F)
+ *(.drectve)
+ ${RELOCATING+ *(.note.GNU-stack)}
+ ${RELOCATING+ *(.gnu.lto_*)}
+ }
+
+ .idata ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ /* This cannot currently be handled with grouped sections.
+ See pe.em:sort_sections. */
+ ${R_IDATA234}
+ ${RELOCATING+__IAT_start__ = .;}
+ ${R_IDATA5}
+ ${RELOCATING+__IAT_end__ = .;}
+ ${R_IDATA67}
+ }
+ .CRT ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ ${RELOCATING+___crt_xc_start__ = . ;}
+ ${R_CRT_XC}
+ ${RELOCATING+___crt_xc_end__ = . ;}
+ ${RELOCATING+___crt_xi_start__ = . ;}
+ ${R_CRT_XI}
+ ${RELOCATING+___crt_xi_end__ = . ;}
+ ${RELOCATING+___crt_xl_start__ = . ;}
+ ${R_CRT_XL}
+ /* ___crt_xl_end__ is defined in the TLS Directory support code */
+ ${RELOCATING+___crt_xp_start__ = . ;}
+ ${R_CRT_XP}
+ ${RELOCATING+___crt_xp_end__ = . ;}
+ ${RELOCATING+___crt_xt_start__ = . ;}
+ ${R_CRT_XT}
+ ${RELOCATING+___crt_xt_end__ = . ;}
+ }
+
+ .tls ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ ${RELOCATING+___tls_start__ = . ;}
+ ${R_TLS}
+ ${RELOCATING+___tls_end__ = . ;}
+ }
+
+ .endjunk ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ /* end is deprecated, don't use it */
+ ${RELOCATING+PROVIDE (end = .);}
+ ${RELOCATING+PROVIDE ( _end = .);}
+ ${RELOCATING+ __end__ = .;}
+ }
+
+ .rsrc ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ *(.rsrc)
+ ${R_RSRC}
+ }
+
+ .reloc ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ *(.reloc)
+ }
+
+ .stab ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.stab)
+ }
+
+ .stabstr ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.stabstr)
+ }
+
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section. Unlike other targets that fake this by putting the
+ section VMA at 0, the PE format will not allow it. */
+
+ /* DWARF 1.1 and DWARF 2. */
+ .debug_aranges ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_aranges)
+ }
+
+ .debug_pubnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_pubnames)
+ }
+
+ .debug_pubtypes ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_pubtypes)
+ }
+
+ /* DWARF 2. */
+ .debug_info ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_info) *(.gnu.linkonce.wi.*)
+ }
+
+ .debug_abbrev ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_abbrev)
+ }
+
+ .debug_line ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_line)
+ }
+
+ .debug_frame ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_frame)
+ }
+
+ .debug_str ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_str)
+ }
+
+ .debug_loc ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_loc)
+ }
+
+ .debug_macinfo ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_macinfo)
+ }
+
+ /* SGI/MIPS DWARF 2 extensions. */
+ .debug_weaknames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_weaknames)
+ }
+
+ .debug_funcnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_funcnames)
+ }
+
+ .debug_typenames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_typenames)
+ }
+
+ .debug_varnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_varnames)
+ }
+
+ /* DWARF 3. */
+ .debug_ranges ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_ranges)
+ }
+
+ /* DWARF 4. */
+ .debug_types ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_types) *(.gnu.linkonce.wt.*)
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/pep.sc b/binutils-2.21/ld/scripttempl/pep.sc
new file mode 100644
index 0000000..8fa5f05
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/pep.sc
@@ -0,0 +1,310 @@
+# Linker script for PE.
+
+if test -z "${RELOCATEABLE_OUTPUT_FORMAT}"; then
+ RELOCATEABLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+fi
+
+# We can't easily and portably get an unquoted $ in a shell
+# substitution, so we do this instead.
+# Sorting of the .foo$* sections is required by the definition of
+# grouped sections in PE.
+# Sorting of the file names in R_IDATA is required by the
+# current implementation of dlltool (this could probably be changed to
+# use grouped sections instead).
+if test "${RELOCATING}"; then
+ R_TEXT='*(SORT(.text$*))'
+ if test "x$LD_FLAG" = "xauto_import" ; then
+ R_DATA='*(SORT(.data$*))
+ *(.rdata)
+ *(SORT(.rdata$*))'
+ R_RDATA=''
+ else
+ R_DATA='*(SORT(.data$*))'
+ R_RDATA='*(.rdata)
+ *(SORT(.rdata$*))'
+ fi
+ R_IDATA234='
+ SORT(*)(.idata$2)
+ SORT(*)(.idata$3)
+ /* These zeroes mark the end of the import list. */
+ LONG (0); LONG (0); LONG (0); LONG (0); LONG (0);
+ SORT(*)(.idata$4)'
+ R_IDATA5='SORT(*)(.idata$5)'
+ R_IDATA67='
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)'
+ R_CRT_XC='*(SORT(.CRT$XC*)) /* C initialization */'
+ R_CRT_XI='*(SORT(.CRT$XI*)) /* C++ initialization */'
+ R_CRT_XL='*(SORT(.CRT$XL*)) /* TLS callbacks */'
+ R_CRT_XP='*(SORT(.CRT$XP*)) /* Pre-termination */'
+ R_CRT_XT='*(SORT(.CRT$XT*)) /* Termination */'
+ R_TLS='
+ *(.tls)
+ *(.tls$)
+ *(SORT(.tls$*))'
+ R_RSRC='*(SORT(.rsrc$*))'
+else
+ R_TEXT=
+ R_DATA=
+ R_RDATA='*(.rdata)'
+ R_IDATA234=
+ R_IDATA5=
+ R_IDATA67=
+ R_CRT=
+ R_RSRC=
+fi
+
+cat <<EOF
+${RELOCATING+OUTPUT_FORMAT(${OUTPUT_FORMAT})}
+${RELOCATING-OUTPUT_FORMAT(${RELOCATEABLE_OUTPUT_FORMAT})}
+${OUTPUT_ARCH+OUTPUT_ARCH(${OUTPUT_ARCH})}
+
+${LIB_SEARCH_DIRS}
+
+SECTIONS
+{
+ ${RELOCATING+/* Make the virtual address and file offset synced if the alignment is}
+ ${RELOCATING+ lower than the target page size. */}
+ ${RELOCATING+. = SIZEOF_HEADERS;}
+ ${RELOCATING+. = ALIGN(__section_alignment__);}
+ .text ${RELOCATING+ __image_base__ + ( __section_alignment__ < ${TARGET_PAGE_SIZE} ? . : __section_alignment__ )} :
+ {
+ ${RELOCATING+ *(.init)}
+ *(.text)
+ ${R_TEXT}
+ ${RELOCATING+ *(.text.*)}
+ *(.glue_7t)
+ *(.glue_7)
+ ${CONSTRUCTING+. = ALIGN(8);}
+ ${CONSTRUCTING+ ___CTOR_LIST__ = .; __CTOR_LIST__ = . ;
+ LONG (-1); LONG (-1);*(.ctors); *(.ctor); *(SORT(.ctors.*)); LONG (0); LONG (0); }
+ ${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ;
+ LONG (-1); LONG (-1); *(.dtors); *(.dtor); *(SORT(.dtors.*)); LONG (0); LONG (0); }
+ ${RELOCATING+ *(.fini)}
+ /* ??? Why is .gcc_exc here? */
+ ${RELOCATING+ *(.gcc_exc)}
+ ${RELOCATING+PROVIDE (etext = .);}
+ ${RELOCATING+ *(.gcc_except_table)}
+ }
+
+ /* The Cygwin32 library uses a section to avoid copying certain data
+ on fork. This used to be named ".data$nocopy". The linker used
+ to include this between __data_start__ and __data_end__, but that
+ breaks building the cygwin32 dll. Instead, we name the section
+ ".data_cygwin_nocopy" and explictly include it after __data_end__. */
+
+ .data ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ ${RELOCATING+__data_start__ = . ;}
+ *(.data)
+ *(.data2)
+ ${R_DATA}
+ *(.jcr)
+ ${RELOCATING+__data_end__ = . ;}
+ ${RELOCATING+*(.data_cygwin_nocopy)}
+ }
+
+ .rdata ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ ${R_RDATA}
+ ${RELOCATING+___RUNTIME_PSEUDO_RELOC_LIST__ = .;}
+ ${RELOCATING+__RUNTIME_PSEUDO_RELOC_LIST__ = .;}
+ *(.rdata_runtime_pseudo_reloc)
+ ${RELOCATING+___RUNTIME_PSEUDO_RELOC_LIST_END__ = .;}
+ ${RELOCATING+__RUNTIME_PSEUDO_RELOC_LIST_END__ = .;}
+ }
+
+ .eh_frame ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ *(.eh_frame)
+ }
+
+ .pdata ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ *(.pdata*)
+ }
+
+ .xdata ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ *(.xdata*)
+ }
+
+ .bss ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ ${RELOCATING+__bss_start__ = . ;}
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+__bss_end__ = . ;}
+ }
+
+ .edata ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ *(.edata)
+ }
+
+ /DISCARD/ :
+ {
+ *(.debug\$S)
+ *(.debug\$T)
+ *(.debug\$F)
+ *(.drectve)
+ ${RELOCATING+ *(.note.GNU-stack)}
+ ${RELOCATING+ *(.gnu.lto_*)}
+ }
+
+ .idata ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ /* This cannot currently be handled with grouped sections.
+ See pep.em:sort_sections. */
+ ${R_IDATA234}
+ ${RELOCATING+__IAT_start__ = .;}
+ ${R_IDATA5}
+ ${RELOCATING+__IAT_end__ = .;}
+ ${R_IDATA67}
+ }
+ .CRT ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ ${RELOCATING+___crt_xc_start__ = . ;}
+ ${R_CRT_XC}
+ ${RELOCATING+___crt_xc_end__ = . ;}
+ ${RELOCATING+___crt_xi_start__ = . ;}
+ ${R_CRT_XI}
+ ${RELOCATING+___crt_xi_end__ = . ;}
+ ${RELOCATING+___crt_xl_start__ = . ;}
+ ${R_CRT_XL}
+ /* ___crt_xl_end__ is defined in the TLS Directory support code */
+ ${RELOCATING+___crt_xp_start__ = . ;}
+ ${R_CRT_XP}
+ ${RELOCATING+___crt_xp_end__ = . ;}
+ ${RELOCATING+___crt_xt_start__ = . ;}
+ ${R_CRT_XT}
+ ${RELOCATING+___crt_xt_end__ = . ;}
+ }
+
+ .tls ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ ${RELOCATING+___tls_start__ = . ;}
+ ${R_TLS}
+ ${RELOCATING+___tls_end__ = . ;}
+ }
+
+ .endjunk ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ /* end is deprecated, don't use it */
+ ${RELOCATING+PROVIDE (end = .);}
+ ${RELOCATING+PROVIDE ( _end = .);}
+ ${RELOCATING+ __end__ = .;}
+ }
+
+ .rsrc ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ *(.rsrc)
+ ${R_RSRC}
+ }
+
+ .reloc ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ *(.reloc)
+ }
+
+ .stab ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.stab)
+ }
+
+ .stabstr ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.stabstr)
+ }
+
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section. Unlike other targets that fake this by putting the
+ section VMA at 0, the PE format will not allow it. */
+
+ /* DWARF 1.1 and DWARF 2. */
+ .debug_aranges ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_aranges)
+ }
+
+ .debug_pubnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_pubnames)
+ }
+
+ .debug_pubtypes ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_pubtypes)
+ }
+
+ /* DWARF 2. */
+ .debug_info ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_info) *(.gnu.linkonce.wi.*)
+ }
+
+ .debug_abbrev ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_abbrev)
+ }
+
+ .debug_line ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_line)
+ }
+
+ .debug_frame ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_frame)
+ }
+
+ .debug_str ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_str)
+ }
+
+ .debug_loc ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_loc)
+ }
+
+ .debug_macinfo ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_macinfo)
+ }
+
+ /* SGI/MIPS DWARF 2 extensions. */
+ .debug_weaknames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_weaknames)
+ }
+
+ .debug_funcnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_funcnames)
+ }
+
+ .debug_typenames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_typenames)
+ }
+
+ .debug_varnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_varnames)
+ }
+
+ /* DWARF 3. */
+ .debug_ranges ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_ranges)
+ }
+
+ /* DWARF 4. */
+ .debug_types ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+ {
+ *(.debug_types) *(.gnu.linkonce.wt.*)
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/pj.sc b/binutils-2.21/ld/scripttempl/pj.sc
new file mode 100644
index 0000000..93981a5
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/pj.sc
@@ -0,0 +1,55 @@
+TORS=".tors :
+ {
+ ___ctors = . ;
+ *(.ctors)
+ ___ctors_end = . ;
+ ___dtors = . ;
+ *(.dtors)
+ ___dtors_end = . ;
+ } > ram"
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+
+MEMORY
+{
+ ram : o = 0x1000, l = 512M
+}
+
+SECTIONS
+{
+ .text :
+ {
+ *(.text)
+ *(.strings)
+ ${RELOCATING+ _etext = . ; }
+ } ${RELOCATING+ > ram}
+ ${CONSTRUCTING+${TORS}}
+ .data :
+ {
+ *(.data)
+ ${RELOCATING+ _edata = . ; }
+ } ${RELOCATING+ > ram}
+ .bss :
+ {
+ ${RELOCATING+ _bss_start = . ; }
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ _end = . ; }
+ } ${RELOCATING+ > ram}
+ .stack ${RELOCATING+ 0x30000 } :
+ {
+ ${RELOCATING+ _stack = . ; }
+ *(.stack)
+ } ${RELOCATING+ > ram}
+ .stab 0 ${RELOCATING+(NOLOAD)} :
+ {
+ *(.stab)
+ }
+ .stabstr 0 ${RELOCATING+(NOLOAD)} :
+ {
+ *(.stabstr)
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/ppcpe.sc b/binutils-2.21/ld/scripttempl/ppcpe.sc
new file mode 100644
index 0000000..182fbe5
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/ppcpe.sc
@@ -0,0 +1,199 @@
+# A PE linker script for PowerPC.
+# Loosely based on Steve Chamberlain's pe.sc.
+# All new mistakes should be credited to Kim Knuttila (krk@cygnus.com)
+#
+# These are substituted in as variables in order to get '}' in a shell
+# conditional expansion.
+INIT='.init : { *(.init) }'
+FINI='.fini : { *(.fini) }'
+cat <<EOF
+OUTPUT_FORMAT(${OUTPUT_FORMAT})
+${LIB_SEARCH_DIRS}
+
+/* Much of this layout was determined by delving into .exe files for
+ the box generated by other compilers/linkers/etc. This means that
+ if a particular feature did not happen to appear in one of the
+ subject files, then it may not be yet supported.
+*/
+
+/* It's "mainCRTStartup", not "_mainCRTStartup", and it's located in
+ one of the two .lib files (libc.lib and kernel32.lib) that currently
+ must be present on the link line. This means that you must use
+ "-u mainCRTStartup" to make sure it gets included in the link.
+*/
+
+${RELOCATING+ENTRY (mainCRTStartup)}
+
+SECTIONS
+{
+
+ /* text - the usual meaning */
+ .text ${RELOCATING+ __image_base__ + __section_alignment__ } :
+ {
+ ${RELOCATING+ *(.init);}
+ *(.text)
+ ${RELOCATING+ *(.text.*)}
+ *(.gcc_except_table)
+ ${CONSTRUCTING+ ___CTOR_LIST__ = .; __CTOR_LIST__ = . ;
+ LONG (-1); *(.ctors); *(.ctor); LONG (0); }
+ ${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ;
+ LONG (-1); *(.dtors); *(.dtor); LONG (0); }
+ ${RELOCATING+ *(.fini);}
+ ${RELOCATING+ etext = .};
+ }
+
+ /* rdata - Read Only Runtime Data
+ CTR sections: All of the CRT (read only C runtime data) sections
+ appear at the start of the .rdata (read only runtime data)
+ section, in the following order. Don't know if it matters or not.
+ Not all sections are always present either.
+ .rdata: compiler generated read only data
+ .xdata: compiler generated exception handling table. (Most docs
+ seem to suggest that this section is now deprecated infavor
+ of the ydata section)
+ .edata: The exported names table.
+ */
+ .rdata BLOCK(__section_alignment__) :
+ {
+ *(.CRT\$XCA);
+ *(.CRT\$XCC);
+ *(.CRT\$XCZ);
+ *(.CRT\$XIA);
+ *(.CRT\$XIC);
+ *(.CRT\$XIZ);
+ *(.CRT\$XLA);
+ *(.CRT\$XLZ);
+ *(.CRT\$XPA);
+ *(.CRT\$XPX);
+ *(.CRT\$XPZ);
+ *(.CRT\$XTA);
+ *(.CRT\$XTZ);
+ *(.rdata);
+ *(.xdata);
+ }
+
+ .edata BLOCK(__section_alignment__) :
+ {
+ *(.edata);
+ }
+
+ /* data - initialized data
+ .ydata: exception handling information.
+ .data: the usual meaning.
+ .data2: more of the same.
+ .bss: For some reason, bss appears to be included in the data
+ section, as opposed to being given a section of it's own.
+ COMMON:
+ */
+ .data BLOCK(__section_alignment__) :
+ {
+ __data_start__ = . ;
+ *(.ydata);
+ *(.data);
+ *(.data2);
+ __bss_start__ = . ;
+ *(.bss) ;
+ *(COMMON);
+ __bss_end__ = . ;
+ ${RELOCATING+ end = .};
+ __data_end__ = . ;
+ }
+
+ /* The exception handling table. A sequence of 5 word entries. Section
+ address and extent are placed in the DataDirectory.
+ */
+ .pdata BLOCK(__section_alignment__) :
+ {
+ *(.pdata)
+ ;
+ }
+
+ /* The idata section is chock full of magic bits.
+ 1. Boundaries around various idata parts are used to initialize
+ some of the fields of the DataDirectory. In particular, the
+ magic for 2, 4 and 5 are known to be used. Some compilers
+ appear to generate magic section symbols for this purpose.
+ Where we can, we catch such symbols and use our own. This of
+ course is something less than a perfect strategy.
+ 2. The table of contents is placed immediately after idata4.
+ The ".private.toc" sections are generated by the ppc bfd. The
+ .toc variable is generated by gas, and resolved here. It is
+ used to initialized function descriptors (and anyone else who
+ needs the address of the module's toc). The only thing
+ interesting about it at all? Most ppc instructions using it
+ have a 16bit displacement field. The convention for addressing
+ is to initialize the .toc value to 32K past the start of the
+ actual toc, and subtract 32K from all references, thus using
+ the entire 64K range. Naturally, the reloc code must agree
+ on this number or you get pretty stupid results.
+ */
+ .idata BLOCK(__section_alignment__) :
+ {
+ __idata2_magic__ = .;
+ *(.idata\$2);
+ __idata3_magic__ = .;
+ *(.idata\$3);
+ __idata4_magic__ = .;
+ *(.idata\$4);
+ . = ALIGN(4);
+ .toc = . + 32768;
+ *(.private.toc);
+ __idata5_magic__ = .;
+ *(.idata\$5);
+ __idata6_magic__ = .;
+ *(.idata\$6);
+ __idata7_magic__ = .;
+ *(.idata\$7);
+ ;
+ }
+
+ /* reldata -- data that requires relocation
+ */
+ .reldata BLOCK(__section_alignment__) :
+ {
+ *(.reldata)
+ ;
+ }
+
+
+ /* Resources */
+ .rsrc BLOCK(__section_alignment__) :
+ {
+ *(.rsrc\$01)
+ *(.rsrc\$02)
+ ;
+ }
+
+ .stab BLOCK(__section_alignment__) ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stab ]
+ }
+
+ .stabstr BLOCK(__section_alignment__) ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stabstr ]
+ }
+
+ /* The .reloc section is currently generated by the dlltool from Steve
+ Chamberlain in a second pass of linking. Section address and extent
+ are placed in the DataDirectory.
+ */
+ .reloc BLOCK(__section_alignment__) :
+ {
+ *(.reloc)
+ ;
+ }
+
+ /* We don't do anything useful with codeview debugger support or the
+ directive section (yet). Hopefully, we junk them correctly.
+ */
+ /DISCARD/ BLOCK(__section_alignment__) :
+ {
+ *(.debug\$S)
+ *(.debug\$T)
+ *(.debug\$F)
+ *(.drectve)
+ ;
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/psos.sc b/binutils-2.21/ld/scripttempl/psos.sc
new file mode 100644
index 0000000..ab8c6c7
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/psos.sc
@@ -0,0 +1,61 @@
+cat <<EOF
+OUTPUT_FORMAT(${OUTPUT_FORMAT})
+OUTPUT_ARCH(${ARCH})
+${RELOCATING+${LIB_SEARCH_DIRS}}
+
+SECTIONS
+{
+ .text ${RELOCATING:-0} ${RELOCATING+${TEXT_START_ADDR}} : {
+ ${RELOCATING+ start = DEFINED(_START) ? _START : DEFINED(_start) ? _start : .;}
+ ${RELOCATING+ PROVIDE(__text = .);}
+ *(.text);
+ *(code);
+ *(const);
+ *(strings);
+ *(pSOS);
+ *(pROBE);
+ *(pNA);
+ *(pHILE);
+ *(pREPC);
+ *(pRPC);
+ ${CONSTRUCTING+ ___CTOR_LIST__ = .;}
+ ${CONSTRUCTING+ LONG((___CTOR_END__ - ___CTOR_LIST__) / 4 - 2)}
+ ${CONSTRUCTING+ *(.ctors)}
+ ${CONSTRUCTING+ LONG(0);}
+ ${CONSTRUCTING+ ___CTOR_END__ = .;}
+ ${CONSTRUCTING+ ___DTOR_LIST__ = .;}
+ ${CONSTRUCTING+ LONG((___DTOR_END__ - ___DTOR_LIST__) / 4 - 2);}
+ ${CONSTRUCTING+ *(.dtors);}
+ ${CONSTRUCTING+ LONG(0);}
+ ${CONSTRUCTING+ ___DTOR_END__ = .;}
+ ${RELOCATING+ PROVIDE(__etext = .);}
+ ${RELOCATING+ PROVIDE(_etext = .);}
+ }
+ .data ${RELOCATING:-0} : ${RELOCATING+ AT(ADDR(.text) + SIZEOF(.text))} {
+ ${RELOCATING+ PROVIDE(__data = .);}
+ *(.data);
+ *(vars);
+ ${RELOCATING+ PROVIDE(__edata = .);}
+ ${RELOCATING+ PROVIDE(_edata = .);}
+ }
+ .bss ${RELOCATING:-0} :
+ {
+ ${RELOCATING+ PROVIDE(__bss = .);}
+ *(.bss);
+ *(zerovars);
+ *(COMMON);
+ ${RELOCATING+ PROVIDE(__ebss = .);}
+ ${RELOCATING+ PROVIDE(__end = .);}
+ ${RELOCATING+ PROVIDE(_end = .);}
+ ${RELOCATING+ PROVIDE(_FreeMemStart = .);}
+ }
+ .stab 0 ${RELOCATING+(NOLOAD)} :
+ {
+ *(.stab);
+ }
+ .stabstr 0 ${RELOCATING+(NOLOAD)} :
+ {
+ *(.stabstr);
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/riscix.sc b/binutils-2.21/ld/scripttempl/riscix.sc
new file mode 100644
index 0000000..c801a0c
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/riscix.sc
@@ -0,0 +1,35 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+
+${RELOCATING+${LIB_SEARCH_DIRS}}
+${RELOCATING+__DYNAMIC = 0;}
+${STACKZERO+${RELOCATING+${STACKZERO}}}
+${SHLIB_PATH+${RELOCATING+${SHLIB_PATH}}}
+SECTIONS
+{
+ .text ${RELOCATING+${TEXT_START_ADDR}}:
+ {
+ CREATE_OBJECT_SYMBOLS
+ *(.text)
+ ${PAD_TEXT+${RELOCATING+. = ${DATA_ALIGNMENT};}}
+ ${RELOCATING+_etext = ${DATA_ALIGNMENT};}
+ ${RELOCATING+__etext = ${DATA_ALIGNMENT};}
+ }
+ .data ${RELOCATING+${DATA_ALIGNMENT}} :
+ {
+ *(.data)
+ ${CONSTRUCTING+CONSTRUCTORS}
+ ${RELOCATING+_edata = .;}
+ ${RELOCATING+__edata = .;}
+ }
+ .bss ${RELOCATING+SIZEOF(.data) + ADDR(.data)} :
+ {
+ ${RELOCATING+ __bss_start = .};
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+_end = ALIGN(4) };
+ ${RELOCATING+__end = ALIGN(4) };
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/sh.sc b/binutils-2.21/ld/scripttempl/sh.sc
new file mode 100644
index 0000000..e7f049f
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/sh.sc
@@ -0,0 +1,64 @@
+TORS=".tors :
+ {
+ ___ctors = . ;
+ *(.ctors)
+ ___ctors_end = . ;
+ ___dtors = . ;
+ *(.dtors)
+ ___dtors_end = . ;
+ } > ram"
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+
+MEMORY
+{
+ ram : o = 0x1000, l = 512k
+}
+
+SECTIONS
+{
+ .text :
+ {
+ *(.text)
+ *(.strings)
+ ${RELOCATING+ _etext = . ; }
+ } ${RELOCATING+ > ram}
+ ${CONSTRUCTING+${TORS}}
+ .data :
+ {
+ *(.data)
+ ${RELOCATING+*(.gcc_exc*)}
+ ${RELOCATING+___EH_FRAME_BEGIN__ = . ;}
+ ${RELOCATING+*(.eh_fram*)}
+ ${RELOCATING+___EH_FRAME_END__ = . ;}
+ ${RELOCATING+LONG(0);}
+ ${RELOCATING+ _edata = . ; }
+ } ${RELOCATING+ > ram}
+ .bss :
+ {
+ ${RELOCATING+ _bss_start = . ; }
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ _end = . ; }
+ } ${RELOCATING+ > ram}
+ .stack ${RELOCATING+ 0x30000 } :
+ {
+ ${RELOCATING+ _stack = . ; }
+ *(.stack)
+ } ${RELOCATING+ > ram}
+ .stab 0 ${RELOCATING+(NOLOAD)} :
+ {
+ *(.stab)
+ }
+ .stabstr 0 ${RELOCATING+(NOLOAD)} :
+ {
+ *(.stabstr)
+ }
+}
+EOF
+
+
+
+
diff --git a/binutils-2.21/ld/scripttempl/sparccoff.sc b/binutils-2.21/ld/scripttempl/sparccoff.sc
new file mode 100644
index 0000000..309aa83
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/sparccoff.sc
@@ -0,0 +1,48 @@
+# Linker script for Sparc COFF.
+# Based on i386coff.sc by Ian Taylor <ian@cygnus.com>.
+test -z "$ENTRY" && ENTRY=_start
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+${LIB_SEARCH_DIRS}
+
+${RELOCATING+ENTRY (${ENTRY})}
+
+SECTIONS
+{
+ .text ${RELOCATING+ SIZEOF_HEADERS} : {
+ *(.init)
+ *(.text)
+ ${RELOCATING+ etext = .;}
+ ${CONSTRUCTING+ ___CTOR_LIST__ = .;}
+ ${CONSTRUCTING+ LONG((___CTOR_END__ - ___CTOR_LIST__) / 4 - 2)}
+ ${CONSTRUCTING+ *(.ctors)}
+ ${CONSTRUCTING+ LONG(0)}
+ ${CONSTRUCTING+ ___CTOR_END__ = .;}
+ ${CONSTRUCTING+ ___DTOR_LIST__ = .;}
+ ${CONSTRUCTING+ LONG((___DTOR_END__ - ___DTOR_LIST__) / 4 - 2)}
+ ${CONSTRUCTING+ *(.dtors)}
+ ${CONSTRUCTING+ LONG(0)}
+ ${CONSTRUCTING+ ___DTOR_END__ = .;}
+ *(.fini)
+ ${RELOCATING+ etext = .};
+ }
+ .data ${RELOCATING+ 0x400000 + (. & 0xffc00fff)} : {
+ *(.data)
+ ${RELOCATING+ edata = .};
+ }
+ .bss ${RELOCATING+ SIZEOF(.data) + ADDR(.data)} :
+ {
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ end = .};
+ }
+ .stab 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stab ]
+ }
+ .stabstr 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stabstr ]
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/st2000.sc b/binutils-2.21/ld/scripttempl/st2000.sc
new file mode 100644
index 0000000..7ee132a
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/st2000.sc
@@ -0,0 +1,26 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+
+
+SECTIONS
+{
+.text :
+ {
+ *(.text)
+ *(.strings)
+ _etext = .;
+ *(.data)
+ _edata = .;
+ *(.bss)
+ *(COMMON)
+ _end = .;
+
+}
+
+}
+EOF
+
+
+
+
diff --git a/binutils-2.21/ld/scripttempl/tic30aout.sc b/binutils-2.21/ld/scripttempl/tic30aout.sc
new file mode 100644
index 0000000..28baed3
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/tic30aout.sc
@@ -0,0 +1,34 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+
+${STACKZERO+${RELOCATING+${STACKZERO}}}
+${RELOCATING+PROVIDE (__stack = 0);}
+SECTIONS
+{
+ ${RELOCATING+. = ${TEXT_START_ADDR};}
+ .text :
+ {
+ CREATE_OBJECT_SYMBOLS
+ *(.text)
+ ${RELOCATING+_etext = .;}
+ ${RELOCATING+__etext = .;}
+ ${PAD_TEXT+${RELOCATING+. = ${DATA_ALIGNMENT};}}
+ }
+ ${RELOCATING+. = ${DATA_ALIGNMENT};}
+ .data :
+ {
+ *(.data)
+ ${RELOCATING+_edata = .;}
+ ${RELOCATING+__edata = .;}
+ }
+ .bss :
+ {
+ ${RELOCATING+ __bss_start = .};
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+_end = ALIGN(4) };
+ ${RELOCATING+__end = ALIGN(4) };
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/tic30coff.sc b/binutils-2.21/ld/scripttempl/tic30coff.sc
new file mode 100644
index 0000000..df2d4f7
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/tic30coff.sc
@@ -0,0 +1,58 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH("${OUTPUT_ARCH}")
+
+MEMORY
+{
+ rom : ORIGIN = 0x00000300, LENGTH = 16k
+ ram : ORIGIN = 0x00000300 + 16k, LENGTH = 16k
+ ramblk0 : ORIGIN = 0x02026000, LENGTH = 0x1000
+ ramblk1 : ORIGIN = 0x02027000, LENGTH = 0x1000
+}
+
+SECTIONS
+{
+.vectors 0x00000000 :
+{
+ *(vectors)
+}
+
+.text :
+{
+ *(.text)
+} > rom
+
+.const :
+{
+ *(.const)
+ __etext = . ;
+} > rom
+
+.mdata : AT( ADDR(.const) + SIZEOF(.const) )
+{
+ __data = . ;
+ *(.data);
+ __edata = . ;
+} > ram
+
+.bss :
+{
+ __bss = . ;
+ *(.bss);
+ *(COMMON);
+ __ebss = . ;
+} > ram
+
+.ram0 :
+{
+ *(ram0)
+} > ramblk0
+
+.ram1 :
+{
+ *(ram1)
+} > ramblk1
+
+}
+
+EOF
diff --git a/binutils-2.21/ld/scripttempl/tic4xcoff.sc b/binutils-2.21/ld/scripttempl/tic4xcoff.sc
new file mode 100644
index 0000000..83245ca
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/tic4xcoff.sc
@@ -0,0 +1,151 @@
+# In microcomputer (MC) mode, the vectors are mapped into the on-chip ROM,
+# otherwise in microprocessor (MP) mode the vectors are mapped to address 0
+# on the external bus. In MC mode, the on-chip ROM contains a bootloader program
+# that loads the internal RAM from the serial port or external ROM.
+#
+# Common configurations:
+# 1. MC mode, no external memory (serial boot).
+# 2. MC mode, external RAM (serial boot).
+# 3. MC mode, external ROM.
+# 4. MC mode, external ROM, external RAM.
+# 5. MP mode, external ROM.
+# 6. MP mode, external ROM, external RAM.
+# 7. MP mode, external RAM (dual-port with hosting CPU or external debugger).
+#
+# Config TEXT DATA/BSS
+# 1. INT_RAM INT_RAM (mcmode,onchip)
+# 2. EXT_RAM EXT_RAM (mcmode,extram)
+# 3. INT_RAM INT_RAM (mcmode,onchip)
+# 4. EXT_RAM EXT_RAM (mcmode,extram)
+# 5. EXT_ROM INT_RAM (mpmode,onchip,extrom)
+# 6. EXT_ROM EXT_RAM (mpmode,extram,extrom)
+# 7. EXT_RAM EXT_RAM (mpmode,extram)
+#
+# In MC mode, TEXT and DATA are copied into RAM by the bootloader.
+#
+# In MP mode with external ROM, DATA needs to be copied into RAM at boot time.
+#
+# If there is external RAM it is better to use that and reserve the internal RAM
+# for data buffers. However, the address of the external RAM needs to be specified.
+#
+# This emulation assumes config 7.
+
+case $OUTPUT_ARCH in
+ tic3x) OUTPUT_ARCHNAME="TMS320C3x" ;;
+ tic4x) OUTPUT_ARCHNAME="TMS320C4x" ;;
+esac
+
+case $ONCHIP in
+ yes) RAM=RAM;
+ STACK_SIZE_DEFAULT=128;
+ HEAP_SIZE_DEFAULT=0;
+ ;;
+ *) RAM=EXT0;
+ STACK_SIZE_DEFAULT=0x1000;
+ HEAP_SIZE_DEFAULT=0x4000;
+ ;;
+esac
+
+TEXT_MEMORY=$RAM;
+DATA_MEMORY=$RAM;
+
+
+MEMORY_DEF="
+/* C30 memory space. */
+MEMORY
+{
+ EXT0 : org = 0x0000000, len = 0x800000 /* External address bus. */
+ XBUS : org = 0x0800000, len = 0x002000 /* Expansion bus. */
+ IOBUS : org = 0x0804000, len = 0x002000 /* I/O BUS. */
+ RAM0 : org = 0x0809800, len = 0x000400 /* Internal RAM block 0. */
+ RAM1 : org = 0x0809a00, len = 0x000400 /* Internal RAM block 1. */
+ RAM : org = 0x0809800, len = 0x000800 /* Internal RAM. */
+ EXT1 : org = 0x080a000, len = 0x7f6000 /* External address bus. */
+}
+"
+
+test -z "$ENTRY" && ENTRY=_start
+
+cat <<EOF
+${RELOCATING+/* Linker script for $OUTPUT_ARCHNAME executable. */}
+${RELOCATING-/* Linker script for $OUTPUT_ARCHNAME object file (ld -r). */}
+
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH("${OUTPUT_ARCH}")
+${LIB_SEARCH_DIRS}
+${RELOCATING+ENTRY (${ENTRY})}
+
+${RELOCATING+ __HEAP_SIZE = DEFINED(__HEAP_SIZE) ? __HEAP_SIZE : ${HEAP_SIZE_DEFAULT};}
+${RELOCATING+ __STACK_SIZE = DEFINED(__STACK_SIZE) ? __STACK_SIZE : ${STACK_SIZE_DEFAULT};}
+
+${RELOCATING+${MEMORY_DEF}}
+
+/* In the small memory model the .data and .bss sections must be contiguous
+ when loaded and fit within the same page. The DP register is loaded
+ with the page address. */
+
+SECTIONS
+{
+ /* Reset, interrupt, and trap vectors. */
+ .vectors ${RELOCATING+ 0} : {
+ *(.vectors)
+ } ${RELOCATING+ > ${TEXT_MEMORY}}
+ /* Constants. */
+ .const : {
+ *(.const)
+ } ${RELOCATING+ > ${TEXT_MEMORY}}
+ /* Program code. */
+ .text : {
+ ${RELOCATING+ __text = .;}
+ ${RELOCATING+ *(.init)}
+ *(.text)
+ ${CONSTRUCTING+ ___CTOR_LIST__ = .;}
+ ${CONSTRUCTING+ LONG(___CTOR_END__ - ___CTOR_LIST__ - 2)}
+ ${CONSTRUCTING+ *(.ctors)}
+ ${CONSTRUCTING+ LONG(0);}
+ ${CONSTRUCTING+ ___CTOR_END__ = .;}
+ ${CONSTRUCTING+ ___DTOR_LIST__ = .;}
+ ${CONSTRUCTING+ LONG(___DTOR_END__ - ___DTOR_LIST__ - 2)}
+ ${CONSTRUCTING+ *(.dtors)}
+ ${CONSTRUCTING+ LONG(0)}
+ ${CONSTRUCTING+ ___DTOR_END__ = .;}
+ ${RELOCATING+ *(.fini)}
+ ${RELOCATING+ __etext = .;}
+ } ${RELOCATING+ > ${TEXT_MEMORY}}
+ /* Global initialised variables. */
+ .data :
+ {
+ ${RELOCATING+ __data = .;}
+ *(.data)
+ ${RELOCATING+ __edata = .;}
+ } ${RELOCATING+ > ${DATA_MEMORY}}
+ /* Global uninitialised variables. */
+ .bss : {
+ ${RELOCATING+ __bss = .;}
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ __end = .;}
+ } ${RELOCATING+ > ${DATA_MEMORY}}
+ /* Heap. */
+ .heap :
+ {
+ ${RELOCATING+ __heap = .;}
+ ${RELOCATING+ . += __HEAP_SIZE};
+ } ${RELOCATING+ > ${DATA_MEMORY}}
+ /* Stack (grows upward). */
+ .stack :
+ {
+ ${RELOCATING+ __stack = .;}
+ *(.stack)
+ ${RELOCATING+ . = . + __STACK_SIZE};
+ } ${RELOCATING+ > ${DATA_MEMORY}}
+ .stab 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stab ]
+ }
+ .stabstr 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stabstr ]
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/tic54xcoff.sc b/binutils-2.21/ld/scripttempl/tic54xcoff.sc
new file mode 100644
index 0000000..f17b480
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/tic54xcoff.sc
@@ -0,0 +1,52 @@
+# default linker script for c54x, TI COFF(1).
+# patterned after description in TI Assembler Tools PDF, SPRU102C, 7-53
+test -z "$ENTRY" && ENTRY=_c_int00
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH("${OUTPUT_ARCH}")
+
+MEMORY
+{
+ /*PAGE 0 : */ prog (RXI) : ORIGIN = 0x00000080, LENGTH = 0xFF00
+ /*PAGE 1 : */ data (W) : ORIGIN = 0x01000080, LENGTH = 0xFF80
+}
+
+${RELOCATING+ENTRY (${ENTRY})}
+
+SECTIONS
+{
+ .text :
+ {
+ ___text__ = .;
+ *(.text)
+ etext = .;
+ ___etext__ = .;
+ } > prog
+ .data :
+ {
+ ___data__ = .;
+ __data = .;
+ *(.data)
+ __edata = .;
+ edata = .;
+ ___edata__ = .;
+ } > prog
+ /* all other initialized sections should be allocated here */
+ .cinit :
+ {
+ *(.cinit)
+ } > prog
+ .bss :
+ {
+ ___bss__ = .;
+ __bss = .;
+ *(.bss)
+ *(COMMON)
+ __ebss = .;
+ end = .;
+ ___end__ = .;
+ } > data
+ /* all other uninitialized sections should be allocated here */
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/tic80coff.sc b/binutils-2.21/ld/scripttempl/tic80coff.sc
new file mode 100644
index 0000000..f28e904
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/tic80coff.sc
@@ -0,0 +1,74 @@
+# Linker script for TI TMS320C80 (tic80) COFF.
+#
+# Besides the shell variables set by the emulparams script, and the LD_FLAG
+# variable, the genscripts.sh script will set the following variables for each
+# time this script is run to generate one of the linker scripts for ldscripts:
+#
+# RELOCATING: Set to a non-empty string when the linker is going to be doing
+# a final relocation.
+#
+# CONSTRUCTING: Set to a non-empty string when the linker is going to be
+# building global constructor and destructor tables.
+#
+# DATA_ALIGNMENT: Set to an ALIGN expression when the output should be page
+# aligned, or to "." when generating the -N script.
+#
+# CREATE_SHLIB: Set to a non-empty string when generating a script for
+# the -shared linker arg.
+
+test -z "$TEXT_START_ADDR" && TEXT_START_ADDR="0x80000 + SIZEOF_HEADERS"
+test -z "$ENTRY" && ENTRY=__start
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+${LIB_SEARCH_DIRS}
+
+${RELOCATING+ENTRY (${ENTRY})}
+
+SECTIONS
+{
+ .text ${RELOCATING+ $TEXT_START_ADDR} : {
+ *(.init)
+ *(.fini)
+ *(.text)
+ }
+ .const ALIGN(4) : {
+ *(.const)
+ }
+ .ctors ALIGN(4) : {
+ ${CONSTRUCTING+ . = ALIGN(4);}
+ ${CONSTRUCTING+ ___CTOR_LIST__ = .;}
+ ${CONSTRUCTING+ LONG(-1)}
+ *(.ctors)
+ ${CONSTRUCTING+ ___CTOR_END__ = .;}
+ ${CONSTRUCTING+ LONG(0)}
+ }
+ .dtors ALIGN(4) : {
+ ${CONSTRUCTING+ ___DTOR_LIST__ = .;}
+ ${CONSTRUCTING+ LONG(-1)}
+ ${CONSTRUCTING+ *(.dtors)}
+ ${CONSTRUCTING+ ___DTOR_END__ = .;}
+ ${CONSTRUCTING+ LONG(0)}
+ }
+ ${RELOCATING+ etext = .;}
+ .data : {
+ *(.data)
+ ${RELOCATING+ __edata = .};
+ }
+ .bss : {
+ ${RELOCATING+ __bss_start = .};
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ _end = ALIGN(0x8)};
+ ${RELOCATING+ __end = ALIGN(0x8)};
+ }
+ .stab 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stab ]
+ }
+ .stabstr 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stabstr ]
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/v850.sc b/binutils-2.21/ld/scripttempl/v850.sc
new file mode 100644
index 0000000..40b627c
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/v850.sc
@@ -0,0 +1,231 @@
+cat << EOF
+OUTPUT_FORMAT("elf32-v850", "elf32-v850",
+ "elf32-v850")
+OUTPUT_ARCH(v850)
+${RELOCATING+ENTRY(_start)}
+SEARCH_DIR(.);
+EXTERN(__ctbp __ep __gp);
+SECTIONS
+{
+ /* This saves a little space in the ELF file, since the zda starts
+ at a higher location that the ELF headers take up. */
+
+ .zdata ${ZDATA_START_ADDR} :
+ {
+ *(.zdata)
+ *(.zbss)
+ *(reszdata)
+ *(.zcommon)
+ }
+
+ /* This is the read only part of the zero data area.
+ Having it as a seperate section prevents its
+ attributes from being inherited by the zdata
+ section. Specifically it prevents the zdata
+ section from being marked READONLY. */
+
+ .rozdata ${ROZDATA_START_ADDR} :
+ {
+ *(.rozdata)
+ *(romzdata)
+ *(romzbss)
+ }
+
+ /* Read-only sections, merged into text segment. */
+ . = ${TEXT_START_ADDR};
+ .interp : { *(.interp) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ .rel.text : { *(.rel.text) }
+ .rela.text : { *(.rela.text) }
+ .rel.data : { *(.rel.data) }
+ .rela.data : { *(.rela.data) }
+ .rel.rodata : { *(.rel.rodata) }
+ .rela.rodata : { *(.rela.rodata) }
+ .rel.gcc_except_table : { *(.rel.gcc_except_table) }
+ .rela.gcc_except_table : { *(.rela.gcc_except_table) }
+ .rel.got : { *(.rel.got) }
+ .rela.got : { *(.rela.got) }
+ .rel.ctors : { *(.rel.ctors) }
+ .rela.ctors : { *(.rela.ctors) }
+ .rel.dtors : { *(.rel.dtors) }
+ .rela.dtors : { *(.rela.dtors) }
+ .rel.init : { *(.rel.init) }
+ .rela.init : { *(.rela.init) }
+ .rel.fini : { *(.rel.fini) }
+ .rela.fini : { *(.rela.fini) }
+ .rel.bss : { *(.rel.bss) }
+ .rela.bss : { *(.rela.bss) }
+ .rel.plt : { *(.rel.plt) }
+ .rela.plt : { *(.rela.plt) }
+ .init : { KEEP (*(.init)) } =0
+ .plt : { *(.plt) }
+
+ .text :
+ {
+ *(.text)
+ ${RELOCATING+*(.text.*)}
+
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ *(.gnu.linkonce.t*)
+ } =0
+
+ ${RELOCATING+_etext = .;}
+ ${RELOCATING+PROVIDE (etext = .);}
+
+ /* This is special code area at the end of the normal text section.
+ It contains a small lookup table at the start followed by the
+ code pointed to by entries in the lookup table. */
+
+ .call_table_data ${CALL_TABLE_START_ADDR} :
+ {
+ ${RELOCATING+PROVIDE(__ctbp = .);}
+ *(.call_table_data)
+ } = 0xff /* Fill gaps with 0xff. */
+
+ .call_table_text :
+ {
+ *(.call_table_text)
+ }
+
+ .fini : { KEEP (*(.fini)) } =0
+ .rodata : { *(.rodata) ${RELOCATING+*(.rodata.*)} *(.gnu.linkonce.r*) }
+ .rodata1 : { *(.rodata1) }
+
+ .data :
+ {
+ *(.data)
+ ${RELOCATING+*(.data.*)}
+ *(.gnu.linkonce.d*)
+ CONSTRUCTORS
+ }
+ .data1 : { *(.data1) }
+ .ctors :
+ {
+ ${CONSTRUCTING+___ctors = .;}
+ KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*crtend(.ctors))
+ ${CONSTRUCTING+___ctors_end = .;}
+ }
+ .dtors :
+ {
+ ${CONSTRUCTING+___dtors = .;}
+ KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*crtend.o(.dtors))
+ ${CONSTRUCTING+___dtors_end = .;}
+ }
+ .jcr :
+ {
+ KEEP (*(.jcr))
+ }
+
+ .gcc_except_table : { *(.gcc_except_table) }
+
+ .got : { *(.got.plt) *(.got) }
+ .dynamic : { *(.dynamic) }
+
+ .tdata ${TDATA_START_ADDR} :
+ {
+ ${RELOCATING+PROVIDE (__ep = .);}
+ *(.tbyte)
+ *(.tcommon_byte)
+ *(.tdata)
+ *(.tbss)
+ *(.tcommon)
+ }
+
+ /* We want the small data sections together, so single-instruction offsets
+ can access them all, and initialized data all before uninitialized, so
+ we can shorten the on-disk segment size. */
+
+ .sdata ${SDATA_START_ADDR} :
+ {
+ ${RELOCATING+PROVIDE (__gp = . + 0x8000);}
+ *(.sdata)
+ }
+
+ /* See comment about .rozdata. */
+ .rosdata ${ROSDATA_START_ADDR} :
+ {
+ *(.rosdata)
+ }
+
+ /* We place the .sbss data section AFTER the .rosdata section, so that
+ it can directly preceed the .bss section. This allows runtime startup
+ code to initialise all the zero-data sections by simply taking the
+ value of '_edata' and zeroing until it reaches '_end'. */
+
+ .sbss :
+ {
+ ${RELOCATING+__sbss_start = .;}
+ *(.sbss)
+ *(.scommon)
+ }
+
+ ${RELOCATING+_edata = DEFINED (__sbss_start) ? __sbss_start : . ;}
+ ${RELOCATING+PROVIDE (edata = _edata);}
+
+ .bss :
+ {
+ ${RELOCATING+__bss_start = DEFINED (__sbss_start) ? __sbss_start : . ;}
+ ${RELOCATING+__real_bss_start = . ;}
+ *(.dynbss)
+ *(.bss)
+ *(COMMON)
+ }
+
+ ${RELOCATING+_end = . ;}
+ ${RELOCATING+PROVIDE (end = .);}
+
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo .zdebug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames .zdebug_sfnames) }
+
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges .zdebug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames .zdebug_pubnames) }
+
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*} .zdebug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev .zdebug_abbrev) }
+ .debug_line 0 : { *(.debug_line .zdebug_line) }
+ .debug_frame 0 : { *(.debug_frame .zdebug_frame) }
+ .debug_str 0 : { *(.debug_str .zdebug_str) }
+ .debug_loc 0 : { *(.debug_loc .zdebug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo .zdebug_macinfo) }
+
+ /* SGI/MIPS DWARF 2 extensions. */
+ .debug_weaknames 0 : { *(.debug_weaknames .zdebug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames .zdebug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames .zdebug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames .zdebug_varnames) }
+
+ /* User stack. */
+ .stack 0x200000 :
+ {
+ ${RELOCATING+__stack = .;}
+ *(.stack)
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/vanilla.sc b/binutils-2.21/ld/scripttempl/vanilla.sc
new file mode 100644
index 0000000..1798480
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/vanilla.sc
@@ -0,0 +1 @@
+# Nothing to do.
diff --git a/binutils-2.21/ld/scripttempl/w65.sc b/binutils-2.21/ld/scripttempl/w65.sc
new file mode 100644
index 0000000..f92d999
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/w65.sc
@@ -0,0 +1,65 @@
+TORS=".tors :
+ {
+ ___ctors = . ;
+ *(.ctors)
+ ___ctors_end = . ;
+ ___dtors = . ;
+ *(.dtors)
+ ___dtors_end = . ;
+ } > ram"
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+
+MEMORY
+{
+ ram : o = 0x1000, l = 512k
+}
+
+SECTIONS
+{
+.text :
+ {
+ *(.text)
+ *(.strings)
+ ${RELOCATING+ _etext = . ; }
+ } ${RELOCATING+ > ram}
+
+ ${CONSTRUCTING+${TORS}}
+
+.data :
+ {
+ *(.data)
+ ${RELOCATING+ _edata = . ; }
+ } ${RELOCATING+ > ram}
+
+.bss :
+ {
+ ${RELOCATING+ _bss_start = . ; }
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ _end = . ; }
+ } ${RELOCATING+ >ram}
+
+.stack ${RELOCATING+ 0x30000 } :
+ {
+ ${RELOCATING+ _stack = . ; }
+ *(.stack)
+ } ${RELOCATING+ > ram}
+
+.stab . (NOLOAD) :
+ {
+ [ .stab ]
+ }
+
+.stabstr . (NOLOAD) :
+ {
+ [ .stabstr ]
+ }
+}
+EOF
+
+
+
+
diff --git a/binutils-2.21/ld/scripttempl/xstormy16.sc b/binutils-2.21/ld/scripttempl/xstormy16.sc
new file mode 100644
index 0000000..68a8379
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/xstormy16.sc
@@ -0,0 +1,241 @@
+#
+# Unusual variables checked by this code:
+# NOP - two byte opcode for no-op (defaults to 0)
+# INITIAL_READONLY_SECTIONS - at start of text segment
+# OTHER_READONLY_SECTIONS - other than .text .init .rodata ...
+# (e.g., .PARISC.milli)
+# OTHER_TEXT_SECTIONS - these get put in .text when relocating
+# OTHER_READWRITE_SECTIONS - other than .data .bss .ctors .sdata ...
+# (e.g., .PARISC.global)
+# OTHER_SECTIONS - at the end
+# EXECUTABLE_SYMBOLS - symbols that must be defined for an
+# executable (e.g., _DYNAMIC_LINK)
+# TEXT_START_SYMBOLS - symbols that appear at the start of the
+# .text section.
+# DATA_START_SYMBOLS - symbols that appear at the start of the
+# .data section.
+# OTHER_GOT_SYMBOLS - symbols defined just before .got.
+# OTHER_GOT_SECTIONS - sections just after .got and .sdata.
+# OTHER_BSS_SYMBOLS - symbols that appear at the start of the
+# .bss section besides __bss_start.
+# INPUT_FILES - INPUT command of files to always include
+# INIT_START, INIT_END - statements just before and just after
+# combination of .init sections.
+# FINI_START, FINI_END - statements just before and just after
+# combination of .fini sections.
+#
+# When adding sections, do note that the names of some sections are used
+# when specifying the start address of the next.
+#
+
+# Many sections come in three flavours. There is the 'real' section,
+# like ".data". Then there are the per-procedure or per-variable
+# sections, generated by -ffunction-sections and -fdata-sections in GCC,
+# and useful for --gc-sections, which for a variable "foo" might be
+# ".data.foo". Then there are the linkonce sections, for which the linker
+# eliminates duplicates, which are named like ".gnu.linkonce.d.foo".
+# The exact correspondences are:
+#
+# Section Linkonce section
+# .text .gnu.linkonce.t.foo
+# .rodata .gnu.linkonce.r.foo
+# .data .gnu.linkonce.d.foo
+# .bss .gnu.linkonce.b.foo
+# .sdata .gnu.linkonce.s.foo
+# .sbss .gnu.linkonce.sb.foo
+# .sdata2 .gnu.linkonce.s2.foo
+# .sbss2 .gnu.linkonce.sb2.foo
+#
+# Each of these can also have corresponding .rel.* and .rela.* sections.
+
+test -z "$ENTRY" && ENTRY=_start
+test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi
+test -z "${ELFSIZE}" && ELFSIZE=32
+test -z "${ALIGNMENT}" && ALIGNMENT="${ELFSIZE} / 8"
+CTOR=".ctors ${CONSTRUCTING-0} :
+ {
+ ${CONSTRUCTING+${CTOR_START}}
+ /* gcc uses crtbegin.o to find the start of
+ the constructors, so we make sure it is
+ first. Because this is a wildcard, it
+ doesn't matter if the user does not
+ actually link against crtbegin.o; the
+ linker won't look for a file to match a
+ wildcard. The wildcard also means that it
+ doesn't matter which directory crtbegin.o
+ is in. */
+
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
+
+ /* We don't want to include the .ctor section from
+ the crtend.o file until after the sorted ctors.
+ The .ctor section from the crtend file contains the
+ end of ctors marker and it must be last */
+
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ ${CONSTRUCTING+${CTOR_END}}
+ } > ROM"
+
+DTOR=" .dtors ${CONSTRUCTING-0} :
+ {
+ ${CONSTRUCTING+${DTOR_START}}
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ ${CONSTRUCTING+${DTOR_END}}
+ } > ROM"
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
+ "${LITTLE_OUTPUT_FORMAT}")
+OUTPUT_ARCH(${OUTPUT_ARCH})
+${RELOCATING+ENTRY(${ENTRY})}
+
+${RELOCATING+${LIB_SEARCH_DIRS}}
+${RELOCATING+${EXECUTABLE_SYMBOLS}}
+${RELOCATING+${INPUT_FILES}}
+${RELOCATING- /* For some reason, the Solaris linker makes bad executables
+ if gld -r is used and the intermediate file has sections starting
+ at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld
+ bug. But for now assigning the zero vmas works. */}
+
+/* There are two memory regions we care about, one from 0 through 0x7F00
+ that is RAM and one from 0x8000 up which is ROM. */
+MEMORY
+{
+ RAM (w) : ORIGIN = 0, LENGTH = 0x7F00
+ ROM (!w) : ORIGIN = 0x8000, LENGTH = 0xFF8000
+}
+
+SECTIONS
+{
+ .data ${RELOCATING-0} :
+ {
+ ${RELOCATING+__rdata = .;}
+ ${RELOCATING+__data = .;}
+ ${RELOCATING+${DATA_START_SYMBOLS}}
+ *(.data)
+ ${RELOCATING+*(.data.*)}
+ ${RELOCATING+*(.gnu.linkonce.d.*)}
+ ${CONSTRUCTING+SORT(CONSTRUCTORS)}
+ } > RAM
+ ${RELOCATING+${OTHER_READWRITE_SECTIONS}}
+ ${RELOCATING+${OTHER_GOT_SYMBOLS}}
+ ${RELOCATING+${OTHER_GOT_SECTIONS}}
+ ${RELOCATING+_edata = .;}
+ ${RELOCATING+PROVIDE (edata = .);}
+ ${RELOCATING+__bss_start = .;}
+ ${RELOCATING+${OTHER_BSS_SYMBOLS}}
+ .bss ${RELOCATING-0} :
+ {
+ *(.dynbss)
+ *(.bss)
+ ${RELOCATING+*(.bss.*)}
+ ${RELOCATING+*(.gnu.linkonce.b.*)}
+ *(COMMON)
+ /* Align here to ensure that the .bss section occupies space up to
+ _end. Align after .bss to ensure correct alignment even if the
+ .bss section disappears because there are no input sections. */
+ ${RELOCATING+. = ALIGN(${ALIGNMENT});}
+ } > RAM
+ ${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
+ ${RELOCATING+. = ALIGN(${ALIGNMENT});}
+ ${RELOCATING+${OTHER_END_SYMBOLS}}
+ ${RELOCATING+_end = .;}
+ ${RELOCATING+__stack = .;}
+ ${RELOCATING+PROVIDE (end = .);}
+
+ /* Read-only sections in ROM. */
+ .int_vec ${RELOCATING-0} : { *(.int_vec) } ${RELOCATING+> ROM}
+
+ .rodata ${RELOCATING-0} : { *(.rodata) ${RELOCATING+*(.rodata.*)} ${RELOCATING+*(.gnu.linkonce.r.*)} } ${RELOCATING+> ROM}
+ ${RELOCATING+${CTOR}}
+ ${RELOCATING+${DTOR}}
+ .jcr : { KEEP (*(.jcr)) } ${RELOCATING+> ROM}
+ .eh_frame : { KEEP (*(.eh_frame)) } ${RELOCATING+> ROM}
+ .gcc_except_table : { *(.gcc_except_table) *(.gcc_except_table.*) } ${RELOCATING+> ROM}
+ .plt : { *(.plt) } ${RELOCATING+> ROM}
+
+ .text ${RELOCATING-0} :
+ {
+ ${RELOCATING+${TEXT_START_SYMBOLS}}
+ *(.text)
+ ${RELOCATING+*(.text.*)}
+ *(.stub)
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ ${RELOCATING+*(.gnu.linkonce.t.*)}
+ ${RELOCATING+${OTHER_TEXT_SECTIONS}}
+ } ${RELOCATING+> ROM =${NOP-0}}
+ .init ${RELOCATING-0} :
+ {
+ ${RELOCATING+${INIT_START}}
+ KEEP (*(.init))
+ ${RELOCATING+${INIT_END}}
+ } ${RELOCATING+> ROM =${NOP-0}}
+ .fini ${RELOCATING-0} :
+ {
+ ${RELOCATING+${FINI_START}}
+ KEEP (*(.fini))
+ ${RELOCATING+${FINI_END}}
+ } ${RELOCATING+> ROM =${NOP-0}}
+ ${RELOCATING+PROVIDE (__etext = .);}
+ ${RELOCATING+PROVIDE (_etext = .);}
+ ${RELOCATING+PROVIDE (etext = .);}
+ ${RELOCATING+${OTHER_READONLY_SECTIONS}}
+
+
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+
+ .comment 0 : { *(.comment) }
+
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo .zdebug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames .zdebug_sfnames) }
+
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges .zdebug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames .zdebug_pubnames) }
+
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*} .zdebug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev .zdebug_abbrev) }
+ .debug_line 0 : { *(.debug_line .zdebug_line) }
+ .debug_frame 0 : { *(.debug_frame .zdebug_frame) }
+ .debug_str 0 : { *(.debug_str .zdebug_str) }
+ .debug_loc 0 : { *(.debug_loc .zdebug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo .zdebug_macinfo) }
+
+ /* SGI/MIPS DWARF 2 extensions */
+ .debug_weaknames 0 : { *(.debug_weaknames .zdebug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames .zdebug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames .zdebug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames .zdebug_varnames) }
+
+ ${RELOCATING+${OTHER_RELOCATING_SECTIONS}}
+
+ /* These must appear regardless of ${RELOCATING}. */
+ ${OTHER_SECTIONS}
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/z80.sc b/binutils-2.21/ld/scripttempl/z80.sc
new file mode 100644
index 0000000..8c004da
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/z80.sc
@@ -0,0 +1,35 @@
+if [ x${LD_FLAG} = x ]
+then
+cat << EOF
+/* Create a cp/m executable; load and execute at 0x100. */
+OUTPUT_FORMAT("binary")
+. = 0x100;
+__Ltext = .;
+ENTRY (__Ltext)
+EOF
+else
+ echo "OUTPUT_FORMAT(\"${OUTPUT_FORMAT}\")"
+fi
+cat <<EOF
+OUTPUT_ARCH("${OUTPUT_ARCH}")
+SECTIONS
+{
+.text : {
+ *(.text)
+ *(text)
+ ${RELOCATING+ __Htext = .;}
+ }
+.data : {
+ ${RELOCATING+ __Ldata = .;}
+ *(.data)
+ *(data)
+ ${RELOCATING+ __Hdata = .;}
+ }
+.bss : {
+ ${RELOCATING+ __Lbss = .;}
+ *(.bss)
+ *(bss)
+ ${RELOCATING+ __Hbss = .;}
+ }
+}
+EOF
diff --git a/binutils-2.21/ld/scripttempl/z8000.sc b/binutils-2.21/ld/scripttempl/z8000.sc
new file mode 100644
index 0000000..b03f5d8
--- /dev/null
+++ b/binutils-2.21/ld/scripttempl/z8000.sc
@@ -0,0 +1,57 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH("${OUTPUT_ARCH}")
+${RELOCATING+ENTRY (_start)}
+
+SECTIONS
+{
+.text ${BIG+ ${RELOCATING+ 0x0000000}} :
+ {
+ *(.text)
+ *(.strings)
+ *(.rdata)
+ }
+
+.ctors ${BIG+ ${RELOCATING+ 0x2000000}} :
+ {
+ ${CONSTRUCTING+ ___ctors = . ; }
+ *(.ctors);
+ ${CONSTRUCTING+ ___ctors_end = . ; }
+ ___dtors = . ;
+ *(.dtors);
+ ${CONSTRUCTING+ ___dtors_end = . ; }
+ }
+
+.data ${BIG+ ${RELOCATING+ 0x3000000}} :
+ {
+ *(.data)
+ }
+
+.bss ${BIG+ ${RELOCATING+ 0x4000000}} :
+ {
+ ${RELOCATING+ __start_bss = . ; }
+ *(.bss);
+ *(COMMON);
+ ${RELOCATING+ __end_bss = . ; }
+ }
+
+.heap ${BIG+ ${RELOCATING+ 0x5000000}} :
+ {
+ ${RELOCATING+ __start_heap = . ; }
+ ${RELOCATING+ . = . + 20k ; }
+ ${RELOCATING+ __end_heap = . ; }
+ }
+
+.stack ${RELOCATING+ 0xf000 } :
+ {
+ ${RELOCATING+ _stack = . ; }
+ *(.stack)
+ ${RELOCATING+ __stack_top = . ; }
+ }
+
+}
+EOF
+
+
+
+
diff --git a/binutils-2.21/ld/stamp-h.in b/binutils-2.21/ld/stamp-h.in
new file mode 100644
index 0000000..9788f70
--- /dev/null
+++ b/binutils-2.21/ld/stamp-h.in
@@ -0,0 +1 @@
+timestamp
diff --git a/binutils-2.21/ld/sysdep.h b/binutils-2.21/ld/sysdep.h
new file mode 100644
index 0000000..b7d5b88
--- /dev/null
+++ b/binutils-2.21/ld/sysdep.h
@@ -0,0 +1,140 @@
+/* sysdep.h -- handle host dependencies for the GNU linker
+ Copyright 1995, 1996, 1997, 1999, 2002, 2003, 2005, 2007
+ Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef LD_SYSDEP_H
+#define LD_SYSDEP_H
+
+#include "config.h"
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdarg.h>
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+#ifdef HAVE_STRINGS_H
+#include <strings.h>
+#else
+extern char *strchr ();
+extern char *strrchr ();
+#endif
+#endif
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+/* for PATH_MAX */
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+/* for MAXPATHLEN */
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#ifdef PATH_MAX
+# define LD_PATHMAX PATH_MAX
+#else
+# ifdef MAXPATHLEN
+# define LD_PATHMAX MAXPATHLEN
+# else
+# define LD_PATHMAX 1024
+# endif
+#endif
+
+#ifdef HAVE_REALPATH
+# define REALPATH(a,b) realpath (a, b)
+#else
+# define REALPATH(a,b) NULL
+#endif
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#ifdef USE_BINARY_FOPEN
+#include "fopen-bin.h"
+#else
+#include "fopen-same.h"
+#endif
+
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#else
+#ifdef HAVE_SYS_FILE_H
+#include <sys/file.h>
+#endif
+#endif
+
+#ifdef HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#ifndef O_RDONLY
+#define O_RDONLY 0
+#endif
+#ifndef O_WRONLY
+#define O_WRONLY 1
+#endif
+#ifndef O_RDWR
+#define O_RDWR 2
+#endif
+#ifndef O_ACCMODE
+#define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR)
+#endif
+/* Systems that don't already define this, don't need it. */
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
+#ifndef SEEK_SET
+#define SEEK_SET 0
+#endif
+#ifndef SEEK_CUR
+#define SEEK_CUR 1
+#endif
+#ifndef SEEK_END
+#define SEEK_END 2
+#endif
+
+#if !HAVE_DECL_STRSTR
+extern char *strstr ();
+#endif
+
+#if !HAVE_DECL_FREE
+extern void free ();
+#endif
+
+#if !HAVE_DECL_GETENV
+extern char *getenv ();
+#endif
+
+#if !HAVE_DECL_ENVIRON
+extern char **environ;
+#endif
+
+#endif /* ! defined (LD_SYSDEP_H) */
diff --git a/binutils-2.21/ld/testplug.c b/binutils-2.21/ld/testplug.c
new file mode 100644
index 0000000..ee3652b
--- /dev/null
+++ b/binutils-2.21/ld/testplug.c
@@ -0,0 +1,617 @@
+/* Test plugin for the GNU linker.
+ Copyright 2010 Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils.
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "plugin-api.h"
+/* For ARRAY_SIZE macro only - we don't link the library itself. */
+#include "libiberty.h"
+
+extern enum ld_plugin_status onload (struct ld_plugin_tv *tv);
+static enum ld_plugin_status onclaim_file (const struct ld_plugin_input_file *file,
+ int *claimed);
+static enum ld_plugin_status onall_symbols_read (void);
+static enum ld_plugin_status oncleanup (void);
+
+/* Helper for calling plugin api message function. */
+#define TV_MESSAGE if (tv_message) (*tv_message)
+
+/* Struct for recording files to claim / files claimed. */
+typedef struct claim_file
+{
+ struct claim_file *next;
+ struct ld_plugin_input_file file;
+ bfd_boolean claimed;
+ struct ld_plugin_symbol *symbols;
+ int n_syms_allocated;
+ int n_syms_used;
+} claim_file_t;
+
+/* Types of things that can be added at all symbols read time. */
+typedef enum addfile_enum
+{
+ ADD_FILE,
+ ADD_LIB,
+ ADD_DIR
+} addfile_enum_t;
+
+/* Struct for recording files to add to final link. */
+typedef struct add_file
+{
+ struct add_file *next;
+ const char *name;
+ addfile_enum_t type;
+} add_file_t;
+
+/* Helper macro for defining array of transfer vector tags and names. */
+#define ADDENTRY(tag) { tag, #tag }
+
+/* Struct for looking up human-readable versions of tag names. */
+typedef struct tag_name
+{
+ enum ld_plugin_tag tag;
+ const char *name;
+} tag_name_t;
+
+/* Array of all known tags and their names. */
+static const tag_name_t tag_names[] =
+{
+ ADDENTRY(LDPT_NULL),
+ ADDENTRY(LDPT_API_VERSION),
+ ADDENTRY(LDPT_GOLD_VERSION),
+ ADDENTRY(LDPT_LINKER_OUTPUT),
+ ADDENTRY(LDPT_OPTION),
+ ADDENTRY(LDPT_REGISTER_CLAIM_FILE_HOOK),
+ ADDENTRY(LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK),
+ ADDENTRY(LDPT_REGISTER_CLEANUP_HOOK),
+ ADDENTRY(LDPT_ADD_SYMBOLS),
+ ADDENTRY(LDPT_GET_SYMBOLS),
+ ADDENTRY(LDPT_ADD_INPUT_FILE),
+ ADDENTRY(LDPT_MESSAGE),
+ ADDENTRY(LDPT_GET_INPUT_FILE),
+ ADDENTRY(LDPT_RELEASE_INPUT_FILE),
+ ADDENTRY(LDPT_ADD_INPUT_LIBRARY),
+ ADDENTRY(LDPT_OUTPUT_NAME),
+ ADDENTRY(LDPT_SET_EXTRA_LIBRARY_PATH),
+ ADDENTRY(LDPT_GNU_LD_VERSION)
+};
+
+/* Function pointers to cache hooks passed at onload time. */
+static ld_plugin_register_claim_file tv_register_claim_file = 0;
+static ld_plugin_register_all_symbols_read tv_register_all_symbols_read = 0;
+static ld_plugin_register_cleanup tv_register_cleanup = 0;
+static ld_plugin_add_symbols tv_add_symbols = 0;
+static ld_plugin_get_symbols tv_get_symbols = 0;
+static ld_plugin_add_input_file tv_add_input_file = 0;
+static ld_plugin_message tv_message = 0;
+static ld_plugin_get_input_file tv_get_input_file = 0;
+static ld_plugin_release_input_file tv_release_input_file = 0;
+static ld_plugin_add_input_library tv_add_input_library = 0;
+static ld_plugin_set_extra_library_path tv_set_extra_library_path = 0;
+
+/* Other cached info from the transfer vector. */
+static enum ld_plugin_output_file_type linker_output;
+static const char *output_name;
+
+/* Behaviour control flags set by plugin options. */
+static enum ld_plugin_status onload_ret = LDPS_OK;
+static enum ld_plugin_status claim_file_ret = LDPS_OK;
+static enum ld_plugin_status all_symbols_read_ret = LDPS_OK;
+static enum ld_plugin_status cleanup_ret = LDPS_OK;
+static bfd_boolean register_claimfile_hook = FALSE;
+static bfd_boolean register_allsymbolsread_hook = FALSE;
+static bfd_boolean register_cleanup_hook = FALSE;
+static bfd_boolean dumpresolutions = FALSE;
+
+/* The master list of all claimable/claimed files. */
+static claim_file_t *claimfiles_list = NULL;
+
+/* We keep a tail pointer for easy linking on the end. */
+static claim_file_t **claimfiles_tail_chain_ptr = &claimfiles_list;
+
+/* The last claimed file added to the list, for receiving syms. */
+static claim_file_t *last_claimfile = NULL;
+
+/* The master list of all files to add to the final link. */
+static add_file_t *addfiles_list = NULL;
+
+/* We keep a tail pointer for easy linking on the end. */
+static add_file_t **addfiles_tail_chain_ptr = &addfiles_list;
+
+/* Add a new claimfile on the end of the chain. */
+static enum ld_plugin_status
+record_claim_file (const char *file)
+{
+ claim_file_t *newfile;
+
+ newfile = malloc (sizeof *newfile);
+ if (!newfile)
+ return LDPS_ERR;
+ memset (newfile, 0, sizeof *newfile);
+ /* Only setup for now is remembering the name to look for. */
+ newfile->file.name = file;
+ /* Chain it on the end of the list. */
+ *claimfiles_tail_chain_ptr = newfile;
+ claimfiles_tail_chain_ptr = &newfile->next;
+ /* Record it as active for receiving symbols to register. */
+ last_claimfile = newfile;
+ return LDPS_OK;
+}
+
+/* Add a new addfile on the end of the chain. */
+static enum ld_plugin_status
+record_add_file (const char *file, addfile_enum_t type)
+{
+ add_file_t *newfile;
+
+ newfile = malloc (sizeof *newfile);
+ if (!newfile)
+ return LDPS_ERR;
+ newfile->next = NULL;
+ newfile->name = file;
+ newfile->type = type;;
+ /* Chain it on the end of the list. */
+ *addfiles_tail_chain_ptr = newfile;
+ addfiles_tail_chain_ptr = &newfile->next;
+ return LDPS_OK;
+}
+
+/* Parse a command-line argument string into a symbol definition.
+ Symbol-strings follow the colon-separated format:
+ NAME:VERSION:def:vis:size:COMDATKEY
+ where the fields in capitals are strings and those in lower
+ case are integers. We don't allow to specify a resolution as
+ doing so is not meaningful when calling the add symbols hook. */
+static enum ld_plugin_status
+parse_symdefstr (const char *str, struct ld_plugin_symbol *sym)
+{
+ int n;
+ long long size;
+ const char *colon1, *colon2, *colon5;
+
+ /* Locate the colons separating the first two strings. */
+ colon1 = strchr (str, ':');
+ if (!colon1)
+ return LDPS_ERR;
+ colon2 = strchr (colon1+1, ':');
+ if (!colon2)
+ return LDPS_ERR;
+ /* Name must not be empty (version may be). */
+ if (colon1 == str)
+ return LDPS_ERR;
+
+ /* The fifth colon and trailing comdat key string are optional,
+ but the intermediate ones must all be present. */
+ colon5 = strchr (colon2+1, ':'); /* Actually only third so far. */
+ if (!colon5)
+ return LDPS_ERR;
+ colon5 = strchr (colon5+1, ':'); /* Hopefully fourth now. */
+ if (!colon5)
+ return LDPS_ERR;
+ colon5 = strchr (colon5+1, ':'); /* Optional fifth now. */
+
+ /* Finally we'll use sscanf to parse the numeric fields, then
+ we'll split out the strings which we need to allocate separate
+ storage for anyway so that we can add nul termination. */
+ n = sscanf (colon2 + 1, "%i:%i:%lli", &sym->def, &sym->visibility, &size);
+ if (n != 3)
+ return LDPS_ERR;
+
+ /* Parsed successfully, so allocate strings and fill out fields. */
+ sym->size = size;
+ sym->resolution = LDPR_UNKNOWN;
+ sym->name = malloc (colon1 - str + 1);
+ if (!sym->name)
+ return LDPS_ERR;
+ memcpy (sym->name, str, colon1 - str);
+ sym->name[colon1 - str] = '\0';
+ if (colon2 > (colon1 + 1))
+ {
+ sym->version = malloc (colon2 - colon1);
+ if (!sym->version)
+ return LDPS_ERR;
+ memcpy (sym->version, colon1 + 1, colon2 - (colon1 + 1));
+ sym->version[colon2 - (colon1 + 1)] = '\0';
+ }
+ else
+ sym->version = NULL;
+ if (colon5 && colon5[1])
+ {
+ sym->comdat_key = malloc (strlen (colon5 + 1) + 1);
+ if (!sym->comdat_key)
+ return LDPS_ERR;
+ strcpy (sym->comdat_key, colon5 + 1);
+ }
+ else
+ sym->comdat_key = 0;
+ return LDPS_OK;
+}
+
+/* Record a symbol to be added for the last-added claimfile. */
+static enum ld_plugin_status
+record_claimed_file_symbol (const char *symdefstr)
+{
+ struct ld_plugin_symbol sym;
+
+ /* Can't add symbols except as belonging to claimed files. */
+ if (!last_claimfile)
+ return LDPS_ERR;
+
+ /* If string doesn't parse correctly, give an error. */
+ if (parse_symdefstr (symdefstr, &sym) != LDPS_OK)
+ return LDPS_ERR;
+
+ /* Check for enough space, resize array if needed, and add it. */
+ if (last_claimfile->n_syms_allocated == last_claimfile->n_syms_used)
+ {
+ int new_n_syms = last_claimfile->n_syms_allocated
+ ? 2 * last_claimfile->n_syms_allocated
+ : 10;
+ last_claimfile->symbols = realloc (last_claimfile->symbols,
+ new_n_syms * sizeof *last_claimfile->symbols);
+ if (!last_claimfile->symbols)
+ return LDPS_ERR;
+ last_claimfile->n_syms_allocated = new_n_syms;
+ }
+ last_claimfile->symbols[last_claimfile->n_syms_used++] = sym;
+
+ return LDPS_OK;
+}
+
+/* Records the status to return from one of the registered hooks. */
+static enum ld_plugin_status
+set_ret_val (const char *whichval, enum ld_plugin_status retval)
+{
+ if (!strcmp ("onload", whichval))
+ onload_ret = retval;
+ else if (!strcmp ("claimfile", whichval))
+ claim_file_ret = retval;
+ else if (!strcmp ("allsymbolsread", whichval))
+ all_symbols_read_ret = retval;
+ else if (!strcmp ("cleanup", whichval))
+ cleanup_ret = retval;
+ else
+ return LDPS_ERR;
+ return LDPS_OK;
+}
+
+/* Records hooks which should be registered. */
+static enum ld_plugin_status
+set_register_hook (const char *whichhook, bfd_boolean yesno)
+{
+ if (!strcmp ("claimfile", whichhook))
+ register_claimfile_hook = yesno;
+ else if (!strcmp ("allsymbolsread", whichhook))
+ register_allsymbolsread_hook = yesno;
+ else if (!strcmp ("cleanup", whichhook))
+ register_cleanup_hook = yesno;
+ else
+ return LDPS_ERR;
+ return LDPS_OK;
+}
+
+/* Determine type of plugin option and pass to individual parsers. */
+static enum ld_plugin_status
+parse_option (const char *opt)
+{
+ if (!strncmp ("fail", opt, 4))
+ return set_ret_val (opt + 4, LDPS_ERR);
+ else if (!strncmp ("pass", opt, 4))
+ return set_ret_val (opt + 4, LDPS_OK);
+ else if (!strncmp ("register", opt, 8))
+ return set_register_hook (opt + 8, TRUE);
+ else if (!strncmp ("noregister", opt, 10))
+ return set_register_hook (opt + 10, FALSE);
+ else if (!strncmp ("claim:", opt, 6))
+ return record_claim_file (opt + 6);
+ else if (!strncmp ("sym:", opt, 4))
+ return record_claimed_file_symbol (opt + 4);
+ else if (!strncmp ("add:", opt, 4))
+ return record_add_file (opt + 4, ADD_FILE);
+ else if (!strncmp ("lib:", opt, 4))
+ return record_add_file (opt + 4, ADD_LIB);
+ else if (!strncmp ("dir:", opt, 4))
+ return record_add_file (opt + 4, ADD_DIR);
+ else if (!strcmp ("dumpresolutions", opt))
+ dumpresolutions = TRUE;
+ else
+ return LDPS_ERR;
+ return LDPS_OK;
+}
+
+/* Output contents of transfer vector array entry in human-readable form. */
+static void
+dump_tv_tag (size_t n, struct ld_plugin_tv *tv)
+{
+ size_t tag;
+ char unknownbuf[40];
+ const char *name;
+
+ for (tag = 0; tag < ARRAY_SIZE (tag_names); tag++)
+ if (tag_names[tag].tag == tv->tv_tag)
+ break;
+ sprintf (unknownbuf, "unknown tag #%d", tv->tv_tag);
+ name = (tag < ARRAY_SIZE (tag_names)) ? tag_names[tag].name : unknownbuf;
+ TV_MESSAGE (LDPL_INFO, "tv[%d]: %s ", n, name);
+ switch (tv->tv_tag)
+ {
+ case LDPT_OPTION:
+ case LDPT_OUTPUT_NAME:
+ TV_MESSAGE (LDPL_INFO, "'%s'\n", tv->tv_u.tv_string);
+ break;
+ case LDPT_REGISTER_CLAIM_FILE_HOOK:
+ case LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK:
+ case LDPT_REGISTER_CLEANUP_HOOK:
+ case LDPT_ADD_SYMBOLS:
+ case LDPT_GET_SYMBOLS:
+ case LDPT_ADD_INPUT_FILE:
+ case LDPT_MESSAGE:
+ case LDPT_GET_INPUT_FILE:
+ case LDPT_RELEASE_INPUT_FILE:
+ case LDPT_ADD_INPUT_LIBRARY:
+ case LDPT_SET_EXTRA_LIBRARY_PATH:
+ TV_MESSAGE (LDPL_INFO, "func@0x%p\n",
+ (void *)(tv->tv_u.tv_message));
+ break;
+ case LDPT_NULL:
+ case LDPT_API_VERSION:
+ case LDPT_GOLD_VERSION:
+ case LDPT_LINKER_OUTPUT:
+ case LDPT_GNU_LD_VERSION:
+ default:
+ TV_MESSAGE (LDPL_INFO, "value %W (%d)\n",
+ (bfd_vma)tv->tv_u.tv_val, tv->tv_u.tv_val);
+ break;
+ }
+}
+
+/* Handle/record information received in a transfer vector entry. */
+static enum ld_plugin_status
+parse_tv_tag (struct ld_plugin_tv *tv)
+{
+#define SETVAR(x) x = tv->tv_u.x
+ switch (tv->tv_tag)
+ {
+ case LDPT_OPTION:
+ return parse_option (tv->tv_u.tv_string);
+ case LDPT_NULL:
+ case LDPT_GOLD_VERSION:
+ case LDPT_GNU_LD_VERSION:
+ case LDPT_API_VERSION:
+ default:
+ break;
+ case LDPT_OUTPUT_NAME:
+ output_name = tv->tv_u.tv_string;
+ break;
+ case LDPT_LINKER_OUTPUT:
+ linker_output = tv->tv_u.tv_val;
+ break;
+ case LDPT_REGISTER_CLAIM_FILE_HOOK:
+ SETVAR(tv_register_claim_file);
+ break;
+ case LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK:
+ SETVAR(tv_register_all_symbols_read);
+ break;
+ case LDPT_REGISTER_CLEANUP_HOOK:
+ SETVAR(tv_register_cleanup);
+ break;
+ case LDPT_ADD_SYMBOLS:
+ SETVAR(tv_add_symbols);
+ break;
+ case LDPT_GET_SYMBOLS:
+ SETVAR(tv_get_symbols);
+ break;
+ case LDPT_ADD_INPUT_FILE:
+ SETVAR(tv_add_input_file);
+ break;
+ case LDPT_MESSAGE:
+ SETVAR(tv_message);
+ break;
+ case LDPT_GET_INPUT_FILE:
+ SETVAR(tv_get_input_file);
+ break;
+ case LDPT_RELEASE_INPUT_FILE:
+ SETVAR(tv_release_input_file);
+ break;
+ case LDPT_ADD_INPUT_LIBRARY:
+ SETVAR(tv_add_input_library);
+ break;
+ case LDPT_SET_EXTRA_LIBRARY_PATH:
+ SETVAR(tv_set_extra_library_path);
+ break;
+ }
+#undef SETVAR
+ return LDPS_OK;
+}
+
+/* Record any useful information in transfer vector entry and display
+ it in human-readable form using the plugin API message() callback. */
+enum ld_plugin_status
+parse_and_dump_tv_tag (size_t n, struct ld_plugin_tv *tv)
+{
+ enum ld_plugin_status rv = parse_tv_tag (tv);
+ dump_tv_tag (n, tv);
+ return rv;
+}
+
+/* Standard plugin API entry point. */
+enum ld_plugin_status
+onload (struct ld_plugin_tv *tv)
+{
+ size_t n = 0;
+ enum ld_plugin_status rv;
+
+ /* This plugin does nothing but dump the tv array. It would
+ be an error if this function was called without one. */
+ if (!tv)
+ return LDPS_ERR;
+
+ /* First entry should always be LDPT_MESSAGE, letting us get
+ hold of it easily so we can send output straight away. */
+ if (tv[0].tv_tag == LDPT_MESSAGE)
+ tv_message = tv[0].tv_u.tv_message;
+
+ fflush (NULL);
+ TV_MESSAGE (LDPL_INFO, "Hello from testplugin.\n");
+
+ do
+ if ((rv = parse_and_dump_tv_tag (n++, tv)) != LDPS_OK)
+ return rv;
+ while ((tv++)->tv_tag != LDPT_NULL);
+
+ TV_MESSAGE (LDPL_INFO, "\n");
+
+ /* Register hooks only if instructed by options. */
+ if (register_claimfile_hook)
+ {
+ if (!tv_register_claim_file)
+ {
+ TV_MESSAGE (LDPL_FATAL, "No register_claim_file hook\n");
+ fflush (NULL);
+ return LDPS_ERR;
+ }
+ (*tv_register_claim_file) (onclaim_file);
+ }
+ if (register_allsymbolsread_hook)
+ {
+ if (!tv_register_all_symbols_read)
+ {
+ TV_MESSAGE (LDPL_FATAL, "No register_all_symbols_read hook\n");
+ fflush (NULL);
+ return LDPS_ERR;
+ }
+ (*tv_register_all_symbols_read) (onall_symbols_read);
+ }
+ if (register_cleanup_hook)
+ {
+ if (!tv_register_cleanup)
+ {
+ TV_MESSAGE (LDPL_FATAL, "No register_cleanup hook\n");
+ fflush (NULL);
+ return LDPS_ERR;
+ }
+ (*tv_register_cleanup) (oncleanup);
+ }
+ fflush (NULL);
+ return onload_ret;
+}
+
+/* Standard plugin API registerable hook. */
+static enum ld_plugin_status
+onclaim_file (const struct ld_plugin_input_file *file, int *claimed)
+{
+ /* Let's see if we want to claim this file. */
+ claim_file_t *claimfile = claimfiles_list;
+ while (claimfile)
+ {
+ if (!strcmp (file->name, claimfile->file.name))
+ break;
+ claimfile = claimfile->next;
+ }
+
+ /* Inform the user/testsuite. */
+ TV_MESSAGE (LDPL_INFO, "hook called: claim_file %s [@%ld/%ld] %s\n",
+ file->name, (long)file->offset, (long)file->filesize,
+ claimfile ? "CLAIMED" : "not claimed");
+ fflush (NULL);
+
+ /* If we decided to claim it, record that fact, and add any symbols
+ that were defined for it by plugin options. */
+ *claimed = (claimfile != 0);
+ if (claimfile)
+ {
+ claimfile->claimed = TRUE;
+ claimfile->file = *file;
+ if (claimfile->n_syms_used && !tv_add_symbols)
+ return LDPS_ERR;
+ else if (claimfile->n_syms_used)
+ return (*tv_add_symbols) (claimfile->file.handle,
+ claimfile->n_syms_used, claimfile->symbols);
+ }
+
+ return claim_file_ret;
+}
+
+/* Standard plugin API registerable hook. */
+static enum ld_plugin_status
+onall_symbols_read (void)
+{
+ static const char *resolutions[] =
+ {
+ "LDPR_UNKNOWN",
+ "LDPR_UNDEF",
+ "LDPR_PREVAILING_DEF",
+ "LDPR_PREVAILING_DEF_IRONLY",
+ "LDPR_PREEMPTED_REG",
+ "LDPR_PREEMPTED_IR",
+ "LDPR_RESOLVED_IR",
+ "LDPR_RESOLVED_EXEC",
+ "LDPR_RESOLVED_DYN",
+ };
+ claim_file_t *claimfile = dumpresolutions ? claimfiles_list : NULL;
+ add_file_t *addfile = addfiles_list;
+ TV_MESSAGE (LDPL_INFO, "hook called: all symbols read.\n");
+ for ( ; claimfile; claimfile = claimfile->next)
+ {
+ enum ld_plugin_status rv;
+ int n;
+ if (claimfile->n_syms_used && !tv_get_symbols)
+ return LDPS_ERR;
+ else if (!claimfile->n_syms_used)
+ continue;
+ rv = tv_get_symbols (claimfile->file.handle, claimfile->n_syms_used,
+ claimfile->symbols);
+ if (rv != LDPS_OK)
+ return rv;
+ for (n = 0; n < claimfile->n_syms_used; n++)
+ TV_MESSAGE (LDPL_INFO, "Sym: '%s%s%s' Resolution: %s\n",
+ claimfile->symbols[n].name,
+ claimfile->symbols[n].version ? "@" : "",
+ claimfile->symbols[n].version ? claimfile->symbols[n].version
+ : "",
+ resolutions[claimfile->symbols[n].resolution]);
+ }
+ for ( ; addfile ; addfile = addfile->next)
+ {
+ enum ld_plugin_status rv;
+ if (addfile->type == ADD_LIB && tv_add_input_library)
+ rv = (*tv_add_input_library) (addfile->name);
+ else if (addfile->type == ADD_FILE && tv_add_input_file)
+ rv = (*tv_add_input_file) (addfile->name);
+ else if (addfile->type == ADD_DIR && tv_set_extra_library_path)
+ rv = (*tv_set_extra_library_path) (addfile->name);
+ else
+ rv = LDPS_ERR;
+ if (rv != LDPS_OK)
+ return rv;
+ }
+ fflush (NULL);
+ return all_symbols_read_ret;
+}
+
+/* Standard plugin API registerable hook. */
+static enum ld_plugin_status
+oncleanup (void)
+{
+ TV_MESSAGE (LDPL_INFO, "hook called: cleanup.\n");
+ fflush (NULL);
+ return cleanup_ret;
+}
+
diff --git a/binutils-2.21/ld/testsuite/ChangeLog b/binutils-2.21/ld/testsuite/ChangeLog
new file mode 100644
index 0000000..33b6220
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ChangeLog
@@ -0,0 +1,1101 @@
+2010-11-25 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
+
+ * ld-arm/arm-elf.exp (armeabitests): Replace --defsym argument in
+ jump-reloc-veneers* tests with --section-start .text=0x8000.
+
+2010-11-05 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * ld-plugin/plugin.exp (testobjfiles): Dont use HOSTING_CRT0.
+ (testobjfiles_notext): Likewise.
+ (libs): Don't use HOSTING_LIBS; fill with default symbol defs instead.
+ * lib/ld-lib.exp (ld_simple_link_defsyms): Add cygming clause.
+
+2010-11-05 Alan Modra <amodra@gmail.com>
+
+ * ld-elfvers/vers32c.dsym, * ld-elfvers/vers32c.ver: Delete.
+ * ld-elfvers/vers32d.ver: Delete.
+ * ld-elfvers/vers.exp: Don't run them.
+
+2010-11-03 Nick Clifton <nickc@redhat.com>
+
+ PR ld/12001
+ * ld-script/default-script2.d: Fix expected address for text
+ section.
+
+2010-11-02 Joseph Myers <joseph@codesourcery.com>
+
+ * ld-tic6x/attr-array-16-16.d, ld-tic6x/attr-array-16-4.d,
+ ld-tic6x/attr-array-16-416.d, ld-tic6x/attr-array-16-48.d,
+ ld-tic6x/attr-array-16-8.d, ld-tic6x/attr-array-16-816.d,
+ ld-tic6x/attr-array-16.s, ld-tic6x/attr-array-4-16.d,
+ ld-tic6x/attr-array-4-4.d, ld-tic6x/attr-array-4-416.d,
+ ld-tic6x/attr-array-4-48.d, ld-tic6x/attr-array-4-8.d,
+ ld-tic6x/attr-array-4-816.d, ld-tic6x/attr-array-4.s,
+ ld-tic6x/attr-array-416-16.d, ld-tic6x/attr-array-416-4.d,
+ ld-tic6x/attr-array-416-416.d, ld-tic6x/attr-array-416-48.d,
+ ld-tic6x/attr-array-416-8.d, ld-tic6x/attr-array-416-816.d,
+ ld-tic6x/attr-array-416.s, ld-tic6x/attr-array-48-16.d,
+ ld-tic6x/attr-array-48-4.d, ld-tic6x/attr-array-48-416.d,
+ ld-tic6x/attr-array-48-48.d, ld-tic6x/attr-array-48-8.d,
+ ld-tic6x/attr-array-48-816.d, ld-tic6x/attr-array-48.s,
+ ld-tic6x/attr-array-8-16.d, ld-tic6x/attr-array-8-4.d,
+ ld-tic6x/attr-array-8-416.d, ld-tic6x/attr-array-8-48.d,
+ ld-tic6x/attr-array-8-8.d, ld-tic6x/attr-array-8-816.d,
+ ld-tic6x/attr-array-8.s, ld-tic6x/attr-array-816-16.d,
+ ld-tic6x/attr-array-816-4.d, ld-tic6x/attr-array-816-416.d,
+ ld-tic6x/attr-array-816-48.d, ld-tic6x/attr-array-816-8.d,
+ ld-tic6x/attr-array-816-816.d, ld-tic6x/attr-array-816.s,
+ ld-tic6x/attr-conformance-10-10.d,
+ ld-tic6x/attr-conformance-10-11.d,
+ ld-tic6x/attr-conformance-10-none.d,
+ ld-tic6x/attr-conformance-10.s, ld-tic6x/attr-conformance-11-10.d,
+ ld-tic6x/attr-conformance-11-11.d,
+ ld-tic6x/attr-conformance-11-none.d,
+ ld-tic6x/attr-conformance-11.s,
+ ld-tic6x/attr-conformance-none-10.d,
+ ld-tic6x/attr-conformance-none-11.d,
+ ld-tic6x/attr-conformance-none-none.d,
+ ld-tic6x/attr-conformance-none.s, ld-tic6x/attr-pic-0.s,
+ ld-tic6x/attr-pic-00.d, ld-tic6x/attr-pic-01.d,
+ ld-tic6x/attr-pic-1.s, ld-tic6x/attr-pic-10.d,
+ ld-tic6x/attr-pic-11.d, ld-tic6x/attr-pid-0.s,
+ ld-tic6x/attr-pid-00.d, ld-tic6x/attr-pid-01.d,
+ ld-tic6x/attr-pid-02.d, ld-tic6x/attr-pid-1.s,
+ ld-tic6x/attr-pid-10.d, ld-tic6x/attr-pid-11.d,
+ ld-tic6x/attr-pid-12.d, ld-tic6x/attr-pid-2.s,
+ ld-tic6x/attr-pid-20.d, ld-tic6x/attr-pid-21.d,
+ ld-tic6x/attr-pid-22.d, ld-tic6x/attr-stack-16-16.d,
+ ld-tic6x/attr-stack-16-8.d, ld-tic6x/attr-stack-16-816.d,
+ ld-tic6x/attr-stack-16.s, ld-tic6x/attr-stack-8-16.d,
+ ld-tic6x/attr-stack-8-8.d, ld-tic6x/attr-stack-8-816.d,
+ ld-tic6x/attr-stack-8.s, ld-tic6x/attr-stack-816-16.d,
+ ld-tic6x/attr-stack-816-8.d, ld-tic6x/attr-stack-816-816.d,
+ ld-tic6x/attr-stack-816.s, ld-tic6x/attr-wchar-0.s,
+ ld-tic6x/attr-wchar-00.d, ld-tic6x/attr-wchar-01.d,
+ ld-tic6x/attr-wchar-02.d, ld-tic6x/attr-wchar-1.s,
+ ld-tic6x/attr-wchar-10.d, ld-tic6x/attr-wchar-11.d,
+ ld-tic6x/attr-wchar-12.d, ld-tic6x/attr-wchar-2.s,
+ ld-tic6x/attr-wchar-20.d, ld-tic6x/attr-wchar-21.d,
+ ld-tic6x/attr-wchar-22.d: New tests.
+
+2010-11-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/compress1a.d: Also check MIPS_DWARF.
+ * ld-elf/compress1b.d: Likewise.
+ * ld-elf/compress1c.d: Likewise.
+
+2010-10-29 Joseph Myers <joseph@codesourcery.com>
+
+ * ld-tic6x/attr-compatibility-gnu-gnu.d,
+ ld-tic6x/attr-compatibility-gnu-other.d,
+ ld-tic6x/attr-compatibility-gnu.s,
+ ld-tic6x/attr-compatibility-other-gnu.d,
+ ld-tic6x/attr-compatibility-other-other.d,
+ ld-tic6x/attr-compatibility-other.s: New tests.
+
+2010-10-29 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/compress1c.d: Only run for Linux targets.
+
+2010-10-29 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/compress.exp: New.
+ * ld-elf/compress1.s: Likewise.
+ * ld-elf/compress1a.d: Likewise.
+ * ld-elf/compress1b.d: Likewise.
+ * ld-elf/compress1c.d: Likewise.
+
+2010-10-29 Bernd Schmidt <bernds@codesourcery.com>
+ Joseph Myers <joseph@codesourcery.com>
+
+ * ld-tic6x/attr-dsbt-0.s, ld-tic6x/attr-dsbt-00.d,
+ ld-tic6x/attr-dsbt-01.d, ld-tic6x/attr-dsbt-1.s,
+ ld-tic6x/attr-dsbt-10.d, ld-tic6x/attr-dsbt-11.d: New tests.
+
+2010-10-28 Thomas Schwinge <thomas@schwinge.name>
+
+ * ld-scripts/script.exp: Sort all filename globs.
+
+2010-10-28 Alan Modra <amodra@gmail.com>
+
+ * ld-plugin/plugin.exp (libs): Remove $LIBS.
+
+2010-10-28 Alan Modra <amodra@gmail.com>
+
+ * ld-elf/sec-to-seg.exp (B_test_same_seg): Clear for i960,
+ microblaze, moxie, and mt.
+
+ * ld-elf/flags1.s: Use arm compatible .type syntax.
+ * ld-elf/flags1.d: Remove arm and xscale xfails, add i960, ip2k,
+ moxie, mt.
+
+2010-10-27 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
+
+ * ld-s390/tlsbin.dd: bc 0,0 -> nop 0 and bcr 0,%r0 -> nopr %r0.
+
+2010-10-25 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-discard/zero-range.d, ld-discard/zero-range.s: New files.
+
+2010-10-23 Mark Mitchell <mark@codesourcery.com>
+
+ * ld-elf/group10.d: Expect ".group" for the name of group
+ sections.
+ * ld-elf/group2.d: Likewise.
+ * ld-elf/group7.d: Likewise.
+
+2010-10-21 Joseph Myers <joseph@codesourcery.com>
+
+ * ld-tic6x/attr-arch-c62x-c62x.d, ld-tic6x/attr-arch-c62x-c64x+.d,
+ ld-tic6x/attr-arch-c62x-c64x.d, ld-tic6x/attr-arch-c62x-c674x.d,
+ ld-tic6x/attr-arch-c62x-c67x+.d, ld-tic6x/attr-arch-c62x-c67x.d,
+ ld-tic6x/attr-arch-c64x+-c62x.d, ld-tic6x/attr-arch-c64x+-c64x+.d,
+ ld-tic6x/attr-arch-c64x+-c64x.d, ld-tic6x/attr-arch-c64x+-c674x.d,
+ ld-tic6x/attr-arch-c64x+-c67x+.d, ld-tic6x/attr-arch-c64x+-c67x.d,
+ ld-tic6x/attr-arch-c64x-c62x.d, ld-tic6x/attr-arch-c64x-c64x+.d,
+ ld-tic6x/attr-arch-c64x-c64x.d, ld-tic6x/attr-arch-c64x-c674x.d,
+ ld-tic6x/attr-arch-c64x-c67x+.d, ld-tic6x/attr-arch-c64x-c67x.d,
+ ld-tic6x/attr-arch-c674x-c62x.d, ld-tic6x/attr-arch-c674x-c64x+.d,
+ ld-tic6x/attr-arch-c674x-c64x.d, ld-tic6x/attr-arch-c674x-c674x.d,
+ ld-tic6x/attr-arch-c674x-c67x+.d, ld-tic6x/attr-arch-c674x-c67x.d,
+ ld-tic6x/attr-arch-c67x+-c62x.d, ld-tic6x/attr-arch-c67x+-c64x+.d,
+ ld-tic6x/attr-arch-c67x+-c64x.d, ld-tic6x/attr-arch-c67x+-c674x.d,
+ ld-tic6x/attr-arch-c67x+-c67x+.d, ld-tic6x/attr-arch-c67x+-c67x.d,
+ ld-tic6x/attr-arch-c67x-c62x.d, ld-tic6x/attr-arch-c67x-c64x+.d,
+ ld-tic6x/attr-arch-c67x-c64x.d, ld-tic6x/attr-arch-c67x-c674x.d,
+ ld-tic6x/attr-arch-c67x-c67x+.d, ld-tic6x/attr-arch-c67x-c67x.d:
+ Update for attribute renaming.
+
+2010-10-20 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * ld-plugin/plugin.exp: Mark tests UNSUPPORTED, not UNRESOLVED, if
+ no suitable target compiler is available.
+
+2010-10-16 Kai Tietz <kai.tietz@onevision.com>
+
+ * ld-pe/pe-run2.exp: Prefix --enable-auto-import by -Wl.
+
+2010-10-15 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * ld-plugin/plugin.exp: Don't error out if there is no target compiler
+ available, make tests UNSUPPORTED instead.
+
+2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ Apply LD plugin patch series (part 6/6).
+ * ld-plugin/plugin-10.d: New dump test control script.
+ * ld-plugin/plugin-11.d: Likewise.
+ * ld-plugin/plugin.exp: Run them.
+
+2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ Apply LD plugin patch series (part 5/6).
+ * ld-plugin/plugin-ignore.d: New dump test control script.
+ * ld-plugin/plugin-vis-1.d: Likewise.
+ * ld-plugin/plugin.exp: Add list of ELF-only tests and run them if
+ testing on an ELF target.
+
+2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ Apply LD plugin patch series (part 4/6).
+ * ld-plugin/plugin-9.d: New testcase.
+ * ld-plugin/plugin.exp: Invoke it.
+
+2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ Apply LD plugin patch series (part 3/6).
+ * ld-plugin/plugin-8.d: New testcase.
+ * ld-plugin/plugin.exp: Invoke it.
+
+2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ Apply LD plugin patch series (part 2/6).
+ * ld-plugin/plugin-3.d: Enable regexes for new functionality.
+ * ld-plugin/plugin-5.d: Likewise.
+ * ld-plugin/plugin-6.d: New testcase.
+ * ld-plugin/plugin-7.d: Likewise.
+ * ld-plugin/plugin.exp: Use 'nm' on compiled test objects to determine
+ whether symbols in plugin arguments need an underscore prefix. Add
+ new plugin-6.d and plugin-7.d testcases.
+
+2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ Apply LD plugin patch series (part 1/6).
+ * ld-bootstrap/bootstrap.exp: Skip static tests also if LD plugins
+ are enabled.
+ * lib/ld-lib.exp (proc regexp_diff): Extend verbose debug output.
+ (proc set_file_contents): Write a file with the supplied content.
+ (run_ld_link_tests): Add new 'ld' action to test linker output.
+ (proc check_plugin_api_available): Return true if linker under test
+ supports the plugin API.
+ * ld-plugin/func.c: New test source file.
+ * ld-plugin/main.c: Likewise.
+ * ld-plugin/text.c: Likewise.
+ * ld-plugin/plugin-1.d: New dump test output pattern script.
+ * ld-plugin/plugin-2.d: Likewise.
+ * ld-plugin/plugin-3.d: Likewise.
+ * ld-plugin/plugin-4.d: Likewise.
+ * ld-plugin/plugin-5.d: Likewise.
+ * ld-plugin/plugin.exp: New test control script.
+
+2010-10-11 Alan Modra <amodra@gmail.com>
+
+ * ld-elf/orphan-region.d: xfail frv-*-*.
+
+2010-10-11 Alan Modra <amodra@gmail.com>
+
+ * ld-mmix/sec-3.d: Adjust for 2010-09-29 orphan change.
+ * ld-mmix/sec-7m.d: Likewise.
+
+2010-10-06 Nick Clifton <nickc@redhat.com>
+
+ * ld-scripts/rgn-at5.t: Add some more output sections.
+ * ld-scripts/rgn-at5.d: Update expected output.
+
+2010-09-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/11812
+ * ld-i386/nogot2.d: New
+ * ld-i386/nogot2.s: Likewise.
+ * ld-x86-64/nogot2.d: Likewise.
+ * ld-x86-64/nogot2.s: Likewise.
+
+ * ld-i386/i386.exp: Run nogot2.
+ * ld-x86-64/x86-64.exp: Likewise.
+
+2010-09-29 Alan Modra <amodra@gmail.com>
+
+ * ld-h8300/h8300.exp: Use is_elf_format.
+
+ * lib/ld-lib.exp (is_elf_format): Merge with binutils and gas versions.
+ (is_aout_format): Update target list.
+ (is_pecoff_format): Remove unnecessary line continuation.
+
+2010-09-27 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
+
+ * ld-s390/tlsbin.dd: bcr 0,%r7 -> nopr %r7.
+ * ld-s390/tlsbin_64.dd: Likewise.
+ * ld-s390/tlspic.dd: Likewise.
+ * ld-s390/tlspic_64.dd: Likewise.
+
+2010-09-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/11812
+ * ld-i386/nogot1.s: Don't use GOTOFF.
+
+2010-09-23 Bernd Schmidt <bernds@codesourcery.com>
+
+ * ld-tic6x/pcrel-reloc-local-r-rel-rela.d: New test.
+
+2010-09-23 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
+
+ * ld-arm/attr-merge-6.attr: Update for Security Extensions.
+ * ld-arm/attr-merge-7.attr: Likewise.
+
+2010-09-23 Alan Modra <amodra@gmail.com>
+
+ * ld-elf/elf.exp: Don't run --gc-sections tls var test on v850.
+ * ld-elf/group2.d: xfail xstormy.
+ * ld-elf/group4.d: Likewise.
+ * ld-elf/group5.d: Likewise.
+ * ld-elf/group6.d: Likewise.
+ * ld-elf/init-fini-arrays.d: xfail cr16 and crx.
+ * ld-elf/orphan2.d: xfail xstormy.
+ * ld-elf/sec64k.exp: Don't run on targets using generic linker.
+ Allow a larger range for ld -r expected bar_1 section. Don't run
+ final link test on a number of targets. Select avr6 for avr targets.
+ * ld-elfcomm/elfcomm.exp: Don't attempt on hpux.
+
+ * ld-d10v/reloc-007.d: Don't error.
+ * ld-d10v/reloc-008.d: Likewise.
+ * ld-d10v/reloc-015.d: Likewise.
+ * ld-d10v/reloc-016.d: Likewise.
+ * ld-d10v/reloc-012.ld: Use a sane offset.
+
+2010-09-20 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
+
+ * ld-arm/attr-merge-6.attr: Update test for change in canonical CPU
+ name.
+ * ld-arm/attr-merge-7.attr: Likewise.
+ * ld-arm/attr-merge-2.attr: Likewise.
+ * ld-arm/attr-merge-arch-2.attr: Likewise.
+
+2010-09-20 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
+
+ * ld-arm/script-type.ld: Update to generate symbols in a section.
+
+2010-09-19 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * ld-mips-elf/elf-rel-got-n32.d: Swap two local GOT entries
+ and remove some duplication between the global and local GOT
+ entries. Adjust GP offsets accordingly.
+ * ld-mips-elf/elf-rel-got-n64-linux.d: Likewise.
+ * ld-mips-elf/elf-rel-xgot-n32.d: Reorder GOT entries and update
+ GP offsets accordingly.
+ * ld-mips-elf/elf-rel-xgot-n64-linux.d: Likewise.
+ * ld-mips-elf/mips16-pic-1.gd: Move all global GOT entries to
+ the local GOT.
+ * ld-mips-elf/mips16-pic-1.dd: Update GP offsets accordingly.
+ * ld-mips-elf/multi-got-no-shared.d: Adjust GP setup for
+ smaller GOT sizes.
+
+2010-09-18 Alan Modra <amodra@gmail.com>
+
+ * lib/ld-lib.exp (check_gc_sections_available): Fail more targets.
+ * ld-discard/discard.exp: Move xfails from here..
+ * ld-discard/extern.d: ..to here.
+ * ld-discard/start.d: ..and here.
+ * ld-discard/static.d: ..and here.
+ * ld-elf/binutils.exp: Don't run tbss1 and tbss2 tests on hppa64.
+ * ld-elf/empty2.d: Remove xfails.
+ * ld-elf/flags1.d: xfail hppa64.
+ * ld-elf/group1.d: Add comment.
+ * ld-elf/group2.d: xfail cr16 and crx.
+ * ld-elf/group3b.d: Correct xfail and add comment.
+ * ld-elf/group4.d: xfail cr16 and crx.
+ * ld-elf/group5.d: Likewise.
+ * ld-elf/group6.d: Likewise.
+ * ld-elf/group7.d: Likewise.
+ * ld-elf/group8a.d: Add more notarget and xfail entries. Comment.
+ * ld-elf/group8b.d: Likewise.
+ * ld-elf/group9a.d: Likewise.
+ * ld-elf/group9b.d: Likewise.
+ * ld-elf/linkonce2.d: Correct notarget and comment.
+ * ld-elf/merge2.d: Remove iq2000 from xfail.
+ * ld-elf/multibss1.d: xfail hppa64.
+ * ld-elf/nobits-1.d: Likewise.
+ * ld-elf/note-1.d: Likewise.
+ * ld-elf/note-2.d: Likewise.
+ * ld-elf/orphan-region.d: Add xfails.
+ * ld-elf/orphan-region.ld: Discard some sections.
+ * ld-elf/orphan.d: Add xfails.
+ * ld-elf/orphan.ld: Discard some sections.
+ * ld-elf/orphan3.d: Replace xfail frv-*-* with frv-*-elf. Remove
+ cr16, crx and d10v.
+ * ld-elf/pr349.d: Add xfails.
+ * ld-elf/warn2.d: Add xfails. Tweak symbol section for hppa64.
+ * ld-scripts/rgn-at5.t: Discard .reginfo.
+
+2010-09-16 Alan Modra <amodra@gmail.com>
+
+ * ld-elf/orphan-region.d: xfail for spu.
+ * ld-elf/relocatable.d: xfail for hppa.
+
+ * ld-elf/group3b.d: Disable for generic linker targets.
+ * ld-elf/linkonce2.d: Likewise.
+ * ld-scripts/empty-address-2a.d: Disable for frv and aout,oldld.
+ * ld-scripts/empty-address-2b.d: Likewise.
+ * ld-scripts/rgn-at5.s: Don't use .word.
+ * ld-scripts/rgn-at5.d: Update.
+
+2010-09-10 Alan Modra <amodra@gmail.com>
+
+ * ld-gc/abi-note.d: Exclude aout and oldld targets.
+ * ld-gc/start.d: Likewise.
+ * ld-scripts/section-match-1.d: Likewise, and tic30.
+
+2010-09-10 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-scripts/rgn-at5.d: Restrict to *-*-linux*.
+
+2010-09-09 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/11998
+ * ld-scripts/rgn-at5.d: New.
+ * ld-scripts/rgn-at5.s: Likewise.
+ * ld-scripts/rgn-at5.t: Likewise.
+
+2010-09-07 Andrew Burgess <aburgess@broadcom.com>
+
+ * ld-x86-64/split-by-file.rd: New test.
+ * ld-x86-64/split-by-file1.s: New test source code.
+ * ld-x86-64/split-by-file2.s: New test source code.
+ * ld-x86-64/x86-64.exp: Run the new test.
+
+2010-08-31 Nick Clifton <nickc@redhat.com>
+
+ * ld-scripts/section-match.exp: New file. Runs the
+ section-match-1 test.
+ * ld-scripts/section-match-1.d: New file.
+ * ld-scripts/section-match-1.s: New file.
+ * ld-scripts/section-match-1.t: New file.
+
+2010-08-25 Julian Brown <julian@codesourcery.com>
+
+ * ld-arm/arm-elf.exp (armelftests): Add cortex-a8-fix-blx-bcond.s.
+ * ld-arm/cortex-a8-fix-blx-bcond.s: New.
+ * ld-arm/cortex-a8-fix-blx-bcond.d: New.
+
+2010-08-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-x86-64/x86-64.exp: Fix typos.
+
+2010-08-23 Maciej W. Rozycki <macro@codesourcery.com>
+
+ * ld-mips-elf/attr-gnu-4-04.d: Adjust Tag_GNU_MIPS_ABI_FP for
+ the new MIPS32r2 64-bit FPU description.
+ * ld-mips-elf/attr-gnu-4-40.d: Likewise.
+ * ld-mips-elf/attr-gnu-4-44.d: Likewise.
+
+2010-08-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/11933
+ * ld-x86-64/mixed1a.s: New.
+ * ld-x86-64/mixed1b.s: Likewise.
+ * ld-x86-64/mixed2a.s: Likewise.
+ * ld-x86-64/mixed2b.s: Likewise.
+
+ * ld-x86-64/x86-64.exp: Test mixed x86_64 and i386 inputs.
+
+2010-08-20 Maciej W. Rozycki <macro@codesourcery.com>
+
+ * ld-sh/sh.exp: Add missing newline.
+
+2010-08-20 Maciej W. Rozycki <macro@codesourcery.com>
+
+ * ld-mips-elf/attr-gnu-4-01.d: Correct Tag_GNU_MIPS_ABI_FP.
+ * ld-mips-elf/attr-gnu-4-02.d: Likewise.
+ * ld-mips-elf/attr-gnu-4-10.d: Likewise.
+ * ld-mips-elf/attr-gnu-4-11.d: Likewise.
+ * ld-mips-elf/attr-gnu-4-15.d: Likewise.
+ * ld-mips-elf/attr-gnu-4-20.d: Likewise.
+ * ld-mips-elf/attr-gnu-4-22.d: Likewise.
+ * ld-mips-elf/attr-gnu-4-25.d: Likewise.
+
+2010-08-19 Alan Modra <amodra@gmail.com>
+
+ * ld-scripts/memory.t: Remove ORIGIN fudge.
+
+2010-08-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/11913
+ * ld-i386/discarded1.d: New.
+ * ld-i386/discarded1.s: Likewise.
+ * ld-i386/discarded1.t: Likewise.
+ * ld-x86-64/discarded1.d: Likewise.
+ * ld-x86-64/discarded1.s: Likewise.
+ * ld-x86-64/discarded1.t: Likewise.
+
+ * ld-i386/i386.exp: Run discarded1.
+ * ld-x86-64/x86-64.exp: Likewise.
+
+2010-08-09 Catherine Moore <clm@codesourcery.com>
+
+ * ld-mips-elf/mode-change-error-1.d: New.
+ * ld-mips-elf/mode-change-error-1a.s: New.
+ * ld-mips-elf/mode-change-error-1b.s: New.
+ * ld-mips-elf/mips-elf.exp: Run new test.
+
+2010-08-06 Alan Modra <amodra@gmail.com>
+
+ * ld-powerpc/tocopt.s, * ld-powerpc/tocopt.d: New test.
+ * ld-powerpc/powerpc.exp: Run it.
+
+2010-07-23 Naveen.H.S <naveen.S@kpitcummins.com>
+ Ina Pandit <ina.pandit@kpitcummins.com>
+
+ * ld-v850/split-lo16.d: Update the "ld" instructions with a space
+ for second operand.
+
+2010-07-20 Alan Modra <amodra@gmail.com>
+
+ * ld-powerpc/tlsexe.r: Update.
+ * ld-powerpc/tlsexetoc.r: Update.
+ * ld-powerpc/tlsso.r: Update.
+ * ld-powerpc/tlstocso.r: Update.
+
+2010-07-20 Alan Modra <amodra@gmail.com>
+
+ * ld-powerpc/vxworks-relax.s: Add branches to match expected output.
+ * ld-powerpc/vxworks-relax-2.s: Likewise.
+ * ld-powerpc/vxworks1-lib.rd: Reorder reloc sections.
+
+2010-07-19 Andreas Schwab <schwab@redhat.com>
+
+ * ld-mmix/bspec1.d: Ignore "Key to Flags" contents.
+ * ld-mmix/bspec2.d: Likewise.
+ * ld-mmix/local1.d: Likewise.
+ * ld-mmix/local3.d: Likewise.
+ * ld-mmix/local5.d: Likewise.
+ * ld-mmix/local7.d: Likewise.
+ * ld-mmix/undef-3.d: Likewise.
+ * ld-sh/sh64/crange1.rd: Likewise.
+ * ld-sh/sh64/crange2.rd: Likewise.
+ * ld-sh/sh64/crange3-cmpct.rd: Likewise.
+ * ld-sh/sh64/crange3-media.rd: Likewise.
+ * ld-sh/sh64/crange3.rd: Likewise.
+ * ld-sh/sh64/crangerel1.rd: Likewise.
+ * ld-sh/sh64/crangerel2.rd: Likewise.
+
+2010-07-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/11817
+ * ld-i386/compressed1.s: New.
+ * ld-i386/compressed1.d: Likewise.
+ * ld-x86-64/compressed1.s: Likewise.
+ * ld-x86-64/compressed1.d: Likewise.
+
+ * ld-i386/i386.exp: Run compressed1.
+ * ld-x86-64/x86-64.exp: Likewise.
+
+2010-07-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/11812
+ * ld-elf/exclude3b.d: Don't run on ia64-*-*. Replace .got with
+ .dynamic.
+
+ * ld-elf/exclude3d.d: New.
+ * ld-i386/nogot1.d: Likewise.
+ * ld-i386/nogot1.s: Likewise.
+ * ld-x86-64/nogot1.d: Likewise.
+ * ld-x86-64/nogot1.s: Likewise.
+
+ * ld-i386/i386.exp: Run nogot1.
+ * ld-x86-64/x86-64.exp: Likewise.
+
+2010-07-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-i386/hidden2.d: Don't hard code expected output.
+ * ld-i386/protected3.d: Likewise.
+ * ld-x86-64/hidden2.d: Likewise.
+ * ld-x86-64/protected3.d: Likewise.
+
+2010-07-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/11791
+ * ld-ifunc/ifunc-10-i386.d: New.
+ * ld-ifunc/ifunc-10-i386.s: Likewise.
+ * ld-ifunc/ifunc-10-x86-64.d: Likewise.
+ * ld-ifunc/ifunc-10-x86-64.s: Likewise.
+ * ld-ifunc/ifunc-11-i386.d: Likewise.
+ * ld-ifunc/ifunc-11-i386.s: Likewise.
+ * ld-ifunc/ifunc-11-x86-64.d: Likewise.
+ * ld-ifunc/ifunc-11-x86-64.s: Likewise.
+
+2010-07-06 Alan Modra <amodra@gmail.com>
+
+ * ld-powerpc/relax.s: Add branch back to _start.
+ * ld-powerpc/relax.d: Update.
+ * ld-powerpc/relaxr.d: Update.
+
+2010-07-01 Alan Modra <amodra@gmail.com>
+
+ * lib/ld-lib.exp (default_ld_simple_link): Add $gcc_ld_flag before
+ any other options in $ld.
+
+2010-06-29 Alan Modra <amodra@gmail.com>
+
+ * ld-maxq/maxq.exp: Delete file.
+ * ld-maxq/addend.dd, * ld-maxq/addend.s, * ld-maxq/paddr.dd,
+ * ld-maxq/paddr.s, * ld-maxq/paddr1.dd, * ld-maxq/paddr1.s,
+ * ld-maxq/r32-1.s, * ld-maxq/r32-2.s, * ld-maxq/r32.dd: Likewise.
+
+2010-06-15 Joseph Myers <joseph@codesourcery.com>
+
+ * ld-elf/orphan3.d: Allow section names starting '_'.
+ * ld-tic6x/attr-arch-c62x-c62x.d, ld-tic6x/attr-arch-c62x-c64x+.d,
+ ld-tic6x/attr-arch-c62x-c64x.d, ld-tic6x/attr-arch-c62x-c674x.d,
+ ld-tic6x/attr-arch-c62x-c67x+.d, ld-tic6x/attr-arch-c62x-c67x.d,
+ ld-tic6x/attr-arch-c62x.s, ld-tic6x/attr-arch-c64x+-c62x.d,
+ ld-tic6x/attr-arch-c64x+-c64x+.d, ld-tic6x/attr-arch-c64x+-c64x.d,
+ ld-tic6x/attr-arch-c64x+-c674x.d,
+ ld-tic6x/attr-arch-c64x+-c67x+.d, ld-tic6x/attr-arch-c64x+-c67x.d,
+ ld-tic6x/attr-arch-c64x+.s, ld-tic6x/attr-arch-c64x-c62x.d,
+ ld-tic6x/attr-arch-c64x-c64x+.d, ld-tic6x/attr-arch-c64x-c64x.d,
+ ld-tic6x/attr-arch-c64x-c674x.d, ld-tic6x/attr-arch-c64x-c67x+.d,
+ ld-tic6x/attr-arch-c64x-c67x.d, ld-tic6x/attr-arch-c64x.s,
+ ld-tic6x/attr-arch-c674x-c62x.d, ld-tic6x/attr-arch-c674x-c64x+.d,
+ ld-tic6x/attr-arch-c674x-c64x.d, ld-tic6x/attr-arch-c674x-c674x.d,
+ ld-tic6x/attr-arch-c674x-c67x+.d, ld-tic6x/attr-arch-c674x-c67x.d,
+ ld-tic6x/attr-arch-c674x.s, ld-tic6x/attr-arch-c67x+-c62x.d,
+ ld-tic6x/attr-arch-c67x+-c64x+.d, ld-tic6x/attr-arch-c67x+-c64x.d,
+ ld-tic6x/attr-arch-c67x+-c674x.d,
+ ld-tic6x/attr-arch-c67x+-c67x+.d, ld-tic6x/attr-arch-c67x+-c67x.d,
+ ld-tic6x/attr-arch-c67x+.s, ld-tic6x/attr-arch-c67x-c62x.d,
+ ld-tic6x/attr-arch-c67x-c64x+.d, ld-tic6x/attr-arch-c67x-c64x.d,
+ ld-tic6x/attr-arch-c67x-c674x.d, ld-tic6x/attr-arch-c67x-c67x+.d,
+ ld-tic6x/attr-arch-c67x-c67x.d, ld-tic6x/attr-arch-c67x.s: New.
+
+2010-06-07 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
+
+ * ld-arm/arm-call.d: Handle change in lsls/movs disassembly.
+ * ld-arm/farcall-thumb-arm-short.d: Likewise.
+ * ld-arm/farcall-thumb-thumb-blx-pic-veneer.d: Likewise.
+ * ld-arm/farcall-thumb-thumb-blx.d: Likewise.
+ * ld-arm/farcall-thumb-thumb-m-pic-veneer.d: Likewise.
+ * ld-arm/farcall-thumb-thumb-m.d: Likewise.
+ * ld-arm/farcall-thumb-thumb-pic-veneer.d: Likewise.
+ * ld-arm/farcall-thumb-thumb.d: Likewise.
+ * ld-arm/thumb2-bl-as-thumb1-bad-noeabi.d: Likewise.
+ * ld-arm/thumb2-bl-as-thumb1-bad.d: Likewise.
+ * ld-arm/thumb2-bl-bad-noeabi.d: Likewise.
+ * ld-arm/thumb2-bl-bad.d: Likewise.
+
+2010-05-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/11628
+ * ld-elf/textaddr3.d: New.
+ * ld-elf/textaddr4.d: Likewise.
+ * ld-elf/textaddr5.d: Likewise.
+ * ld-elf/textaddr6.d: Likewise.
+ * ld-elf/textaddr7.d: Likewise.
+
+2010-05-25 Daniel Jacobowitz <dan@codesourcery.com>
+ Joseph Myers <joseph@codesourcery.com>
+ Andrew Stubbs <ams@codesourcery.com>
+
+ * ld-sh/sh.exp: Handle uClinux like Linux.
+ * lib/ld-lib.exp (is_elf_format): Include sh*-*-uclinux*.
+ * ld-sh/fdpic-funcdesc-shared.d: New file.
+ * ld-sh/fdpic-funcdesc-shared.s: New file.
+ * ld-sh/fdpic-funcdesc-static.d: New file.
+ * ld-sh/fdpic-funcdesc-static.s: New file.
+ * ld-sh/fdpic-gotfuncdesc-shared.d: New file.
+ * ld-sh/fdpic-gotfuncdesc-shared.s: New file.
+ * ld-sh/fdpic-gotfuncdesc-static.d: New file.
+ * ld-sh/fdpic-gotfuncdesc-static.s: New file.
+ * ld-sh/fdpic-gotfuncdesci20-shared.d: New file.
+ * ld-sh/fdpic-gotfuncdesci20-shared.s: New file.
+ * ld-sh/fdpic-gotfuncdesci20-static.d: New file.
+ * ld-sh/fdpic-gotfuncdesci20-static.s: New file.
+ * ld-sh/fdpic-goti20-shared.d: New file.
+ * ld-sh/fdpic-goti20-shared.s: New file.
+ * ld-sh/fdpic-goti20-static.d: New file.
+ * ld-sh/fdpic-goti20-static.s: New file.
+ * ld-sh/fdpic-gotofffuncdesc-shared.d: New file.
+ * ld-sh/fdpic-gotofffuncdesc-shared.s: New file.
+ * ld-sh/fdpic-gotofffuncdesc-static.d: New file.
+ * ld-sh/fdpic-gotofffuncdesc-static.s: New file.
+ * ld-sh/fdpic-gotofffuncdesci20-shared.d: New file.
+ * ld-sh/fdpic-gotofffuncdesci20-shared.s: New file.
+ * ld-sh/fdpic-gotofffuncdesci20-static.d: New file.
+ * ld-sh/fdpic-gotofffuncdesci20-static.s: New file.
+ * ld-sh/fdpic-gotoffi20-shared.d: New file.
+ * ld-sh/fdpic-gotoffi20-shared.s: New file.
+ * ld-sh/fdpic-gotoffi20-static.d: New file.
+ * ld-sh/fdpic-gotoffi20-static.s: New file.
+ * ld-sh/fdpic-plt-be.d: New file.
+ * ld-sh/fdpic-plt-le.d: New file.
+ * ld-sh/fdpic-plt.s: New file.
+ * ld-sh/fdpic-plti20-be.d: New file.
+ * ld-sh/fdpic-plti20-le.d: New file.
+ * ld-sh/fdpic-stack-default.d: New file.
+ * ld-sh/fdpic-stack-size.d: New file.
+ * ld-sh/fdpic-stack.s: New file.
+
+2010-05-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gas/11600
+ * ld-elf/exclude3.s: New.
+ * ld-elf/exclude3a.d: Likewise.
+ * ld-elf/exclude3b.d: Likewise.
+ * ld-elf/exclude3c.d: Likewise.
+
+2010-05-11 Andrew Stubbs <ams@codesourcery.com>
+
+ * ld-arm/attr-merge-2.attr: Add Tag_DIV_use.
+ * ld-arm/attr-merge-2a.s: Likewise.
+ * ld-arm/attr-merge-2b.s: Likewise.
+ * ld-arm/attr-merge-3a.s: Likewise.
+ * ld-arm/attr-merge-3b.s: Likewise.
+ * ld-arm/attr-merge-4.attr: Likewise.
+ * ld-arm/attr-merge-5.attr: Likewise.
+ * ld-arm/attr-merge-6.attr: Likewise.
+ * ld-arm/attr-merge-7.attr: Likewise.
+ * ld-arm/attr-merge-arch-1.attr: Likewise.
+ * ld-arm/attr-merge-arch-2.attr: Likewise.
+ * ld-arm/attr-merge-unknown-2.d: Likewise.
+ * ld-arm/attr-merge-unknown-2r.d: Likewise.
+ * ld-arm/attr-merge-unknown-3.d: Likewise.
+ * ld-arm/attr-merge-vfp-1.d: Likewise.
+ * ld-arm/attr-merge-vfp-1r.d: Likewise.
+ * ld-arm/attr-merge-vfp-2.d: Likewise.
+ * ld-arm/attr-merge-vfp-2r.d: Likewise.
+ * ld-arm/attr-merge-vfp-3.d: Likewise.
+ * ld-arm/attr-merge-vfp-3r.d: Likewise.
+ * ld-arm/attr-merge-vfp-4.d: Likewise.
+ * ld-arm/attr-merge-vfp-4r.d: Likewise.
+ * ld-arm/attr-merge-vfp-5.d: Likewise.
+ * ld-arm/attr-merge-vfp-5r.d: Likewise.
+ * ld-arm/attr-merge-wchar-00-nowarn.d: Likewise.
+ * ld-arm/attr-merge-wchar-00.d: Likewise.
+ * ld-arm/attr-merge-wchar-02-nowarn.d: Likewise.
+ * ld-arm/attr-merge-wchar-02.d: Likewise.
+ * ld-arm/attr-merge-wchar-04-nowarn.d: Likewise.
+ * ld-arm/attr-merge-wchar-04.d: Likewise.
+ * ld-arm/attr-merge-wchar-20-nowarn.d: Likewise.
+ * ld-arm/attr-merge-wchar-20.d: Likewise.
+ * ld-arm/attr-merge-wchar-22-nowarn.d: Likewise.
+ * ld-arm/attr-merge-wchar-22.d: Likewise.
+ * ld-arm/attr-merge-wchar-24-nowarn.d: Likewise.
+ * ld-arm/attr-merge-wchar-40-nowarn.d: Likewise.
+ * ld-arm/attr-merge-wchar-40.d: Likewise.
+ * ld-arm/attr-merge-wchar-42-nowarn.d: Likewise.
+ * ld-arm/attr-merge-wchar-44-nowarn.d: Likewise.
+ * ld-arm/attr-merge-wchar-44.d: Likewise.
+ * ld-arm/attr-merge.attr: Likewise.
+
+2010-05-11 Jie Zhang <jie@codesourcery.com>
+
+ * ld-arm/attr-merge-vfp-6.d: New test.
+ * ld-arm/attr-merge-vfp-6r.d: New test.
+ * ld-arm/attr-merge-vfpv3xd.s: New test.
+ * ld-arm/arm-elf.exp: Add attr-merge-vfp-6 and attr-merge-vfp-6r.
+
+2010-05-07 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-arm/cortex-a8-fix-bl-rel-plt.d: New file.
+ * ld-arm/arm-elf.exp (armelftests): Run cortex-a8-fix-bl-rel-plt.d.
+
+2010-05-06 Joseph Myers <joseph@codesourcery.com>
+
+ * ld-elf/orphan-region.d: Use ld -N.
+
+2010-04-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/11542
+ * ld-elf/discard.ld: New.
+ * ld-elf/discard1.d: Likewise.
+ * ld-elf/discard1.s: Likewise.
+ * ld-elf/discard2.d: Likewise.
+ * ld-elf/discard2.s: Likewise.
+ * ld-elf/discard3.d: Likewise.
+
+2010-04-22 Alan Modra <amodra@gmail.com>
+
+ * ld-elf/extract-symbol-1sec.d: Update lma.
+ * ld-i386/alloc.d: Expect a warning, not an error.
+
+2010-04-20 Joseph Myers <joseph@codesourcery.com>
+
+ * ld-tic6x/data-reloc-global-rel.d,
+ ld-tic6x/data-reloc-global-rel.s,
+ ld-tic6x/data-reloc-local-r-rel.d,
+ ld-tic6x/data-reloc-local-rel.d, ld-tic6x/mvk-reloc-global-rel.d,
+ ld-tic6x/mvk-reloc-global-rel.s, ld-tic6x/mvk-reloc-local-1-rel.s,
+ ld-tic6x/mvk-reloc-local-2-rel.s,
+ ld-tic6x/mvk-reloc-local-r-rel.d, ld-tic6x/mvk-reloc-local-rel.d,
+ ld-tic6x/pcrel-reloc-global-rel.d,
+ ld-tic6x/pcrel-reloc-local-r-rel.d,
+ ld-tic6x/pcrel-reloc-local-rel.d, ld-tic6x/sbr-reloc-global-rel.d,
+ ld-tic6x/sbr-reloc-global-rel.s, ld-tic6x/sbr-reloc-local-1-rel.s,
+ ld-tic6x/sbr-reloc-local-2-rel.s,
+ ld-tic6x/sbr-reloc-local-r-rel.d, ld-tic6x/sbr-reloc-local-rel.d:
+ New.
+
+2010-04-15 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
+
+ * ld-arm/attr-merge-2.attr: Update for changes in attribute output.
+ * ld-arm/attr-merge-3.attr: Likewise.
+ * ld-arm/attr-merge-vfp-1.d: Likewise.
+ * ld-arm/attr-merge-vfp-1r.d: Likewise.
+ * ld-arm/attr-merge-vfp-2.d: Likewise.
+ * ld-arm/attr-merge-vfp-2r.d: Likewise.
+ * ld-arm/attr-merge-vfp-3.d: Likewise.
+ * ld-arm/attr-merge-vfp-3r.d: Likewise.
+ * ld-arm/attr-merge-vfp-4.d: Likeiwse.
+ * ld-arm/attr-merge-vfp-4r.d: Likewise.
+ * ld-arm/attr-merge-vfp-5.d: Likewise.
+ * ld-arm/attr-merge-vfp-5r.d: Likewise.
+ * ld-arm/attr-merge-wchar-00-nowarn.d: Likewise.
+ * ld-arm/attr-merge-wchar-00.d: Likewise.
+ * ld-arm/attr-merge-wchar-02-nowarn.d: Likewise.
+ * ld-arm/attr-merge-wchar-02.d: Likewise.
+ * ld-arm/attr-merge-wchar-04-nowarn.d: Likewise.
+ * ld-arm/attr-merge-wchar-04.d: Likewise.
+ * ld-arm/attr-merge-wchar-20-nowarn.d: Likewise.
+ * ld-arm/attr-merge-wchar-20.d: Likewise.
+ * ld-arm/attr-merge-wchar-22-nowarn.d: Likewise.
+ * ld-arm/attr-merge-wchar-22.d: Likewise.
+ * ld-arm/attr-merge-wchar-24-nowarn.d: Likewise.
+ * ld-arm/attr-merge-wchar-40-nowarn.d: Likewise.
+ * ld-arm/attr-merge-wchar-40.d: Likewise.
+ * ld-arm/attr-merge-wchar-42-nowarn.d: Likewise.
+ * ld-arm/attr-merge-wchar-44-nowarn.d: Likewise.
+ * ld-arm/attr-merge-wchar-44.d: Likewise.
+ * ld-arm/attr-merge.attr: Likewise.
+
+2010-04-06 David S. Miller <davem@davemloft.net>
+
+ * ld-elfvers/vers.exp: Pass -Av9a to assembler on sparc-*-*
+
+2010-04-05 Kai Tietz <kai.tietz@onevision.com>
+
+ * ld-pe/orphan_nu.d: New test for --no-leading-underscore.
+ * ld-pe/orphana_nu.s: New file.
+ * ld-pe/pe.exp: Add orphan_nu test.
+
+2010-04-01 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-powerpc/apuinfo-nul.rd: New.
+ * ld-powerpc/apuinfo-nul1.s: New.
+ * ld-powerpc/powerpc.exp: Add it.
+
+2010-03-31 Kai TIetz <kai.tietz@onevision.com>
+
+ * ld-pe//pe-compile.exp (run_basefile_test): Trim result of wc
+ before string compare.
+
+2010-03-31 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
+
+ * ld-arm/script-type.sym: Fix test.
+
+2010-03-31 Kai TIetz <kai.tietz@onevision.com>
+
+ * ld-pe/basefile1.s: New.
+ * ld-pe/pe-compile.exp: Add base-file test.
+
+2010-03-31 Hans-Peter Nilsson <hp@axis.com>
+
+ PR ld/11458
+ * ld-cris/pcrelcp-1.d, ld-cris/pcrelcp-1.s: New test.
+
+ * lib/ld-lib.exp (run_dump_test): When checking linker message and
+ return code, when success with no message is expected, don't
+ continue if we have an abnormal exit with a message. Check output
+ of inspection program and fail if it had output or an abnormal
+ exit code. Include "warning" and "error" among the directives
+ where multiples are allowed and append to previous values.
+
+ * ld-cris/cris.exp (loop over $srcdir/$subdir/*dso-*.d): Apply
+ "file rootname", not "file tail", before applying runtest_file_p.
+
+2010-03-29 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-arm/arm-elf.exp (armeabitests): Add v6-M farcall test.
+
+2010-03-25 Joseph Myers <joseph@codesourcery.com>
+
+ * ld-elf/flags1.d, ld-elf/merge.d: XFAIL for tic6x-*-*.
+ * ld-elf/sec-to-seg.exp: Set B_test_same_seg to 0 for tic6x-*-*.
+ * ld-tic6x: New directory and testcases.
+
+2010-03-19 Jie Zhang <jie@codesourcery.com>
+
+ PR ld/11304
+ * ld-elf/pr11304.d: New test.
+ * ld-elf/pr11304a.s: New test.
+ * ld-elf/pr11304b.s: New test.
+ * lib/ld-lib.exp (regexp_diff): Add support for #failif.
+
+2010-03-15 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-elf/orphan-region.d, ld-elf/orphan-region.ld,
+ ld-elf/orphan-region.s: New files.
+
+2010-03-02 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
+
+ * ld-arm/arm-merge-incompatible.d: New test.
+ * ld-arm/arm-merge-incompatiblea.s: Likewise.
+ * ld-arm/arm-merge-incompatibleb.s: Likewise.
+ * ld-arm/arm-elf.exp: Run the new test.
+
+2010-03-02 Christophe Lyon <christophe.lyon@st.com>
+ Alan Modra <amodra@gmail.com>
+
+ * ld-arm/arm-elf.exp: Change .text start address for
+ farcall-thumb-arm tests. Add v4t variant for farcall-mixed-lib
+ test.
+ * ld-arm/farcall-mixed-lib-v4t.d: New test.
+ * ld-arm/farcall-mixed-lib1.s: Don't force armv5t.
+ * ld-arm/farcall-mixed-lib2.s: Likewise.
+ * ld-arm/arm-call.d: Update expected results.
+ * ld-arm/cortex-a8-far.d: Likewise.
+ * ld-arm/farcall-group-size2.d: Likewise.
+ * ld-arm/farcall-group.d: Likewise.
+ * ld-arm/farcall-mix.d: Likewise.
+ * ld-arm/farcall-mix2.d: Likewise.
+ * ld-arm/farcall-mixed-app-v5.d: Likewise.
+ * ld-arm/farcall-mixed-app.d: Likewise.
+ * ld-arm/farcall-mixed-lib.d: Likewise.
+ * ld-arm/farcall-thumb-arm.d: Likewise.
+ * ld-arm/farcall-thumb-arm-blx.d: Likewise.
+ * ld-arm/farcall-thumb-arm-pic-veneer.d: Likewise.
+ * ld-arm/farcall-thumb-arm-blx-pic-veneer.d: Likewise.
+ * ld-arm/farcall-thumb-arm.s: Update test. Add a new call to
+ potentially generate different types of stubs.
+
+2010-02-27 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/init-fini-arrays.d: Pass --wide to readelf.
+
+2010-02-27 Jie Zhang <jie@codesourcery.com>
+
+ * ld-elf/init-fini-arrays.s: New test.
+ * ld-elf/init-fini-arrays.d: New test.
+
+2010-02-24 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
+
+ * ld-arm/group-relocs.s: Mark code sections as executable.
+ * ld-arm/arm-elf.exp (armelftests): Only dump executable sections in
+ group-relocs test.
+ * ld-arm/reloc-boundaries.d: Fix test to work on Linux targets.
+
+2010-02-23 Nick Clifton <nickc@redhat.com>
+
+ * ld-elf/orphan4.d: Allow for other sections to be present in the
+ output.
+
+2010-02-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-ifunc/ifunc.exp: Expect System V OSABI in dynamic
+ ifunc-using executable.
+
+2010-02-19 Alan Modra <amodra@gmail.com>
+
+ * ld-elf/group.ld: Discard .dropme sections.
+ * ld-elf/group10.d, * ld-elf/group10.s: New test.
+
+2010-02-18 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
+
+ * ld-arm/attr-merge-6.attr: Add new test. Missed off last commit.
+
+2010-02-18 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
+
+ * ld-arm/attr-merge-3.attr: Fix test for new attribute values.
+ * ld-arm/attr-merge-3b.s: Likewise.
+ * ld-arm/attr-merge-unknown-1.d: Fix test now that 42 is a recognised
+ attribute ID.
+ * ld-arm/attr-merge-unknown-1.s: Likewise.
+ * ld-arm/attr-merge-6.attr: New test.
+ * ld-arm/attr-merge-6a.s: Likewise.
+ * ld-arm/attr-merge-6b.s: Likewise.
+ * ld-arm/attr-merge-7.attr: Likewise.
+ * ld-arm/attr-merge-7a.s: Likewise.
+ * ld-arm/attr-merge-7b.s: Likewise.
+ * ld-arm/arm-elf.exp: Run the new tests.
+
+2010-02-15 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
+
+ * ld-arm/jump-reloc-veneers-long.d: Correct testcase for
+ arm-none-eabi target.
+ * ld-arm/jump-reloc-veneers-short1.d: Likewise
+ * ld-arm/jump-reloc-veneers-short2.d: Likewise
+
+2010-02-12 Daniel Gutson <dgutson@codesourcery.com>
+
+ * ld-arm/arm-elf.exp (armelftests): New test case added.
+ * ld-arm/data-only-map.s: New file.
+ * ld-arm/data-only-map.d: New file.
+ * ld-arm/data-only-map.ld: New file.
+
+2010-02-11 David S. Miller <davem@davemloft.net>
+
+ * ld-sparc/gotop32.s: Add local symbol case.
+ * ld-sparc/gotop64.s: Likewise.
+ * ld-sparc/gotop32.rd: Adjust expected results.
+ * ld-sparc/gotop32.td: Likewise.
+ * ld-sparc/gotop64.dd: Likewise.
+ * ld-sparc/gotop64.rd: Likewise.
+ * ld-sparc/gotop64.td: Likewise.
+
+2010-02-09 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
+
+ * ld-elfvsb/elfvsb.exp: Fix tests for arm*-*-linux*.
+ * ld-shared/shared.exp: Likewise.
+
+2010-02-08 David S. Miller <davem@davemloft.net>
+
+ * ld-ifunc/ifunc.exp: Run for sparc.
+
+2010-02-08 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-powerpc/apuinfo-nul.s: New.
+ * ld-powerpc/apuinfo.rd: Add it.
+ * ld-powerpc/powerpc.exp: Likewise.
+
+2010-02-01 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
+
+ * ld-arm/jump-reloc-veneers-long.d: New test.
+ * ld-arm/jump-reloc-veneers-short1.d: Likewise.
+ * ld-arm/jump-reloc-veneers-short2.d: Likewise.
+ * ld-arm/jump-reloc-veneers.s: Likewise.
+ * ld-arm/arm-elf.exp (armelftests): Run them.
+
+2010-01-28 Nick Clifton <nickc@redhat.com>
+
+ PR 11225
+ * ld-sh/refdbg-0-dso.d: Dump all sections.
+
+2010-01-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/11218
+ * ld-gc/dummy.s: New.
+ * ld-gc/pr11218-1.c: Likewise.
+ * ld-gc/pr11218-2.c: Likewise.
+ * ld-gc/pr11218.d: Likewise.
+
+2010-01-23 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * ld-powerpc/aix-ref-1-32.od, ld-powerpc/aix-ref-1-64.od,
+ ld-powerpc/aix-ref-1.s: New tests.
+ * ld-powerpc/aix52.exp: Run them.
+
+2010-01-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/orphan4.d: Support 64bit targets.
+
+2010-01-13 DJ Delorie <dj@redhat.com>
+
+ * ld-elf/orphan4.d: New.
+ * ld-elf/orphan4.ld: New.
+ * ld-elf/orphan4.s: New.
+
+2010-01-13 Chao-ying Fu <fu@mips.com>
+
+ * ld-mips-elf/jr-to-b-1.d, ld-mips-elf/jr-to-b-2.d: New tests.
+ * ld-mips-elf/jr-to-b-1.s, ld-mips-elf/jr-to-b-2.s: Source.
+ * ld-mips-elf/mips-elf.exp: Run new tests.
+
+2010-01-13 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-arm/arm-elf.exp (armelftests): Assemble Cortex-A8 tests with
+ -mcpu=cortex-a8.
+
+2010-01-13 Nick Clifton <nickc@redhat.com>
+
+ * ld-scrips/sort.exp: Skip these tests when the target is the
+ h8300.
+
+2010-01-11 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/11146
+ * ld-elf/dynsym1.d: New.
+
+2010-01-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/11138
+ * ld-elf/pr11138-1.c: New.
+ * ld-elf/pr11138-1.map: Likewise.
+ * ld-elf/pr11138-2.c: Likewise.
+ * ld-elf/pr11138-2.map: Likewise.
+ * ld-elf/pr11138.out: Likewise.
+
+ * ld-elf/shared.exp (build_tests): Add libpr11138-1.so and
+ libpr11138-2.o.
+ (run_tests): Add 2 tests for PR ld/11138.
+
+2010-01-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/11133
+ * ld-gc/gc.exp: Run start.
+
+ * ld-gc/start.d: New.
+ * ld-gc/start.s: Likewise.
+
+2010-01-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/11143
+ * ld-gc/gc.exp: Run abi-note.
+
+ * ld-gc/abi-note.d: New.
+ * ld-gc/abi-note.s: Likewise.
+
+For older changes see ChangeLog-2009
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/binutils-2.21/ld/testsuite/ChangeLog-2004 b/binutils-2.21/ld/testsuite/ChangeLog-2004
new file mode 100644
index 0000000..cc63b7e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ChangeLog-2004
@@ -0,0 +1,1085 @@
+2004-12-21 Tomer Levi <Tomer.Levi@nsc.com>
+
+ * ld-crx/reloc-abs32.d: Update reference file according
+ to disassembler printing method.
+ * ld-crx/reloc-rel16.d: Likewise.
+ * ld-crx/reloc-rel24.d: Likewise.
+ * ld-crx/reloc-rel32.d: Likewise.
+ * ld-crx/reloc-rel4.d: Likewise.
+ * ld-crx/reloc-rel8-cmp.d: Likewise.
+ * ld-crx/reloc-rel8.d: Likewise.
+
+2004-12-16 Richard Sandiford <rsandifo@redhat.com>
+
+ * ld-v850: New directory.
+
+2004-12-14 Richard Sandiford <rsandifo@redhat.com>
+
+ * ld-mips-elf/jal-overflow-2.[sd]: New test.
+ * ld-mips-elf/mips-elf.exp: Run it.
+
+2004-12-13 Richard Sandiford <rsandifo@redhat.com>
+
+ * ld-mips-elf/mips-elf.exp: Only run jalbal if n32 is supported.
+
+2004-12-11 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-mmix/bpo-1.d: Update for changed section syms.
+ * ld-mmix/bpo-10.d: Likewise.
+ * ld-mmix/bpo-11.d: Likewise.
+ * ld-mmix/bpo-14.d: Likewise.
+ * ld-mmix/bpo-16.d: Likewise.
+ * ld-mmix/bpo-17.d: Likewise.
+ * ld-mmix/bpo-18.d: Likewise.
+ * ld-mmix/bpo-19.d: Likewise.
+ * ld-mmix/bpo-2.d: Likewise.
+ * ld-mmix/bpo-22.d: Likewise.
+ * ld-mmix/bpo-3.d: Likewise.
+ * ld-mmix/bpo-4.d: Likewise.
+ * ld-mmix/bpo-5.d: Likewise.
+ * ld-mmix/bpo-6.d: Likewise.
+ * ld-mmix/bpo-9.d: Likewise.
+ * ld-mmix/greg-1.d: Likewise.
+ * ld-mmix/greg-19.d: Likewise.
+ * ld-mmix/greg-2.d: Likewise.
+ * ld-mmix/greg-3.d: Likewise.
+ * ld-mmix/greg-4.d: Likewise.
+ * ld-mmix/greg-5.d: Likewise.
+ * ld-mmix/greg-5s.d: Likewise.
+ * ld-mmix/greg-6.d: Likewise.
+ * ld-mmix/greg-7.d: Likewise.
+ * ld-mmix/loc1.d: Likewise.
+ * ld-mmix/loc2.d: Likewise.
+ * ld-mmix/loc3.d: Likewise.
+ * ld-mmix/loc4.d: Likewise.
+ * ld-mmix/loc6.d: Likewise.
+ * ld-mmix/locdo-1.d: Likewise.
+ * ld-mmix/loct-1.d: Likewise.
+ * ld-mmix/locto-1.d: Likewise.
+ * ld-mmix/start-1.d: Likewise.
+ * ld-sh/sh64/abi32.xd: Likewise.
+ * ld-sh/sh64/abi64.xd: Likewise.
+ * ld-sh/sh64/cmpct1.xd: Likewise.
+ * ld-sh/sh64/mix1.xd: Likewise.
+ * ld-sh/sh64/mix2.xd: Likewise.
+ * ld-sh/sh64/rel32.xd: Likewise.
+ * ld-sh/sh64/rel64.xd: Likewise.
+ * ld-sh/sh64/shdl32.xd: Likewise.
+ * ld-sh/sh64/shdl64.xd: Likewise.
+
+2004-12-09 Ian Lance Taylor <ian@wasabisystems.com>
+
+ * ld-mips-elf/jalbal.d: New test.
+ * ld-mips-elf/jalbal.s: New test.
+ * ld-mips-elf/mips-elf.exp: Run it.
+
+2004-12-08 Ian Lance Taylor <ian@wasabisystems.com>
+
+ * ld-mips-elf/jaloverflow.d: New test.
+ * ld-mips-elf/jaloverflow.s: New test.
+ * ld-mips-elf/mips-elf.exp: Run it.
+
+2004-12-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/group1.d: Support 64bit.
+
+2004-12-01 Paul Brook <paul@codesourcery.com>
+
+ * ld-elf/group1.d: New test.
+ * ld-elf/group.ld, ld-elf/group1a.s, ld-elf/group1b.s: New test.
+
+2004-12-01 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-selective/selective.exp: Use -print-libgcc-file-name for
+ ARM and v850 also.
+
+2004-11-24 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/mixed-lib.sym: Update for THUMB_FUNC change.
+
+2004-11-19 Nick Clifton <nickc@redhat.com>
+
+ * ld-scripts/script.exp: Add test of memory linker script.
+ Reorganise code to remove unnecessary indentation.
+ Fix target tests to avoid using --image-base with *-nto targets.
+ * ld-scripts/memory.t: New linker script to test the MEMORY
+ section and the ORIGIN and LENGTH operators.
+
+2004-11-17 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-arm/mixed-app.d, ld-arm/mixed-app.r, ld-arm/mixed-app.s,
+ ld-arm/mixed-app.sym, ld-arm/mixed-lib.d, ld-arm/mixed-lib.r,
+ ld-arm/mixed-lib.s, ld-arm/mixed-lib.sym, ld-arm/arm-dyn.ld,
+ ld-arm/arm-lib.ld: New files.
+ * ld-arm/arm-app-abs32.d, ld-arm/arm-app-abs32.r, ld-arm/arm-app.d,
+ ld-arm/arm-app.r, ld-arm/arm-lib-plt32.d, ld-arm/arm-lib-plt32.r,
+ ld-arm/arm-lib.d, ld-arm/arm-lib.r, ld-arm/arm-static-app.d,
+ ld-arm/arm-static-app.r: Update for big-endian.
+ * ld-arm/arm-elf.exp: Run the new tests.
+
+2004-11-16 Richard Sandiford <rsandifo@redhat.com>
+
+ * ld-mips-elf/eh-frame1.{s,ld},
+ * ld-mips-elf/eh-frame1-{n32,n64},d: New test.
+ * ld-mips-elf/mips-elf.exp: Run it.
+
+2004-11-10 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-d10v/reloc-003.d: Update for changed error message.
+ * ld-d10v/reloc-004.d: Likewise.
+ * ld-d10v/reloc-007.d: Likewise.
+ * ld-d10v/reloc-008.d: Likewise.
+ * ld-d10v/reloc-011.d: Likewise.
+ * ld-d10v/reloc-012.d: Likewise.
+ * ld-d10v/reloc-015.d: Likewise.
+ * ld-d10v/reloc-016.d: Likewise.
+
+2004-11-08 Aaron W. LaFramboise <aaron98wiridge9@aaronwl.com>
+
+ * ld-scripts/weak.exp: Enable test on PE, XFAIL non-i386 PE.
+ * ld-undefined/weak-undef.exp: Enable test on PE, XFAIL non-i386
+ PE.
+ * lib/ld-lib.exp (is_pecoff_format): New.
+
+2004-11-08 Inderpreet Singh <inderpreetb@nioda.hcltech.com>
+ Vineet Sharma <vineets@noida.hcltech.com>
+
+ * ld-maxq: New directory. Contains tests for the new maxq port.
+
+2004-11-04 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-elf/merge.d: xfail crisv32-*-*.
+ * ld-cris/dsov32-1.s, ld-cris/dsov32-2.s, ld-cris/dsov32-3.s,
+ ld-cris/dsov32-4.s, ld-cris/libdso-10.d, ld-cris/libdso-11.d,
+ ld-cris/libdso-12.d, ld-cris/libdso-13.d, ld-cris/libdso-14.d,
+ ld-cris/move-1.s, ld-cris/pv32-1.d, ld-cris/pv32.s,
+ ld-cris/start1.s, ld-cris/v10-v32.d, ld-cris/v10-va.d,
+ ld-cris/v32-ba-1.d, ld-cris/v32-ba-1.s, ld-cris/v32-bin-1.d,
+ ld-cris/v32-bin-1.s, ld-cris/v32-v10.d, ld-cris/v32-va.d,
+ ld-cris/va-v10.d, ld-cris/va-v32.d: New tests.
+ * ld-cris/ldsym1.d: Adjust for change in linker script.
+
+2004-11-02 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/expdyn1.d, ld-cris/expdyn5.d, ld-cris/expdyn6.d,
+ ld-cris/expdyn7.d, ld-cris/gotplt1.d, ld-cris/gotplt2.d,
+ ld-cris/gotplt3.d, ld-cris/hiddef1.d, ld-cris/libdso-2.d,
+ ld-cris/locref1.d, ld-cris/locref2.d, ld-cris/weakref2.d,
+ ld-i386/tlsbin.rd, ld-i386/tlsnopic.rd, ld-i386/tlspic.rd,
+ ld-ia64/tlsbin.dd, ld-ia64/tlsbin.rd, ld-ia64/tlspic.dd,
+ ld-ia64/tlspic.rd, ld-powerpc/tlsexe32.d, ld-powerpc/tlsexe32.g,
+ ld-powerpc/tlsexe32.r, ld-powerpc/tlsexe32.t,
+ ld-powerpc/tlsso32.d, ld-powerpc/tlsso32.g, ld-powerpc/tlsso32.r,
+ ld-powerpc/tlsso32.t, ld-s390/tlsbin.dd, ld-s390/tlsbin.rd,
+ ld-s390/tlspic.rd, ld-sparc/tlssunbin32.rd,
+ ld-sparc/tlssunpic32.rd, ld-x86-64/tlsbin.rd, ld-x86-64/tlspic.dd,
+ ld-x86-64/tlspic.rd: Adjust for _GLOBAL_OFFSET_TABLE_ now hidden.
+
+2004-10-26 Paul Brook <paul@codesourcery.com>
+
+ * ld-elfvers/vers.exp (build_binary): Add ldargs parameter.
+ (build_vers_lib_pic_flags): New function.
+ Add vers29 test.
+ * ld-elfvers/vers29.c: New file.
+ * ld-elfvers/vers29.dsym: New file.
+ * ld-elfvers/vers29.ver: New file.
+
+2004-10-24 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-mmix/sec-8m.d: Adjust test for dump using correct section
+ length.
+ * ld-mmix/sec-9.d: Renamed test, formerly known as sec-5.d.
+ * ld-mmix/sec-5.d, ld-mmix/b-offloc.s: Rewritten test.
+
+ * ld-mmix/getaa-6b.d, ld-mmix/getaa-6f.d, ld-mmix/getaa14b.d,
+ ld-mmix/getaa14f.d, ld-mmix/jumpa-6b.d, ld-mmix/jumpa-6f.d,
+ ld-mmix/jumpa14b.d, ld-mmix/jumpa14f.d, ld-mmix/reg-1.d,
+ ld-mmix/reg-1m.d: Adjust for changed error message format.
+
+2004-10-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/exclude.exp: Allow cris-*-elf.
+
+ * ld-elf/exclude1.s: Add ".data". Remove "- include_sym".
+ * ld-elf/exclude2.s: Add ".data".
+
+2004-10-19 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-elf/exclude.exp: Don't run for cris-*-elf.
+
+2004-10-16 Daniel Jacobowitz <dan@debian.org>
+
+ * ld-elf/exclude1.s, ld-elf/exclude2.s, ld-elf/exclude.exp: New.
+
+2004-10-15 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-crx/reloc-num8.d: Adjust for changed orphan placement.
+ * ld-crx/reloc-num16.d: Likewise.
+ * ld-crx/reloc-num32.d: Likewise.
+ * ld-scripts/provide-2.t: Start .data at 0x2000.
+ * ld-scripts/provide-2.d: Adjust.
+
+2004-10-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-scripts/sort.exp: Run for ELF targets only.
+
+2004-10-14 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-scripts/overlay-size.d: Update for changed orphan section
+ placement.
+ * ld-mmix/bpo-18.d: Likewise.
+
+2004-10-07 Bob Wilson <bob.wilson@acm.org>
+
+ * ld-xtensa/lcall1.s: Use .literal directive.
+ * ld-xtensa/lcall2.s: Align function entry.
+ * ld-xtensa/coalesce2.s: Likewise.
+
+2004-10-04 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-scripts/sort.exp: New file for section sorting tests.
+ * ld-scripts/sort_b_a.d: Likewise
+ * ld-scripts/sort_b_a.s: Likewise
+ * ld-scripts/sort_b_a.t: Likewise
+ * ld-scripts/sort_b_a_a-1.d: Likewise
+ * ld-scripts/sort_b_a_a-2.d: Likewise
+ * ld-scripts/sort_b_a_a-3.d: Likewise
+ * ld-scripts/sort_b_a_a.t: Likewise
+ * ld-scripts/sort_b_a_n-1.d: Likewise
+ * ld-scripts/sort_b_a_n-2.d: Likewise
+ * ld-scripts/sort_b_a_n-3.d: Likewise
+ * ld-scripts/sort_b_a_n.t: Likewise
+ * ld-scripts/sort_b_n.d: Likewise
+ * ld-scripts/sort_b_n.s: Likewise
+ * ld-scripts/sort_b_n.t: Likewise
+ * ld-scripts/sort_b_n_a-1.d: Likewise
+ * ld-scripts/sort_b_n_a-2.d: Likewise
+ * ld-scripts/sort_b_n_a-3.d: Likewise
+ * ld-scripts/sort_b_n_a.t: Likewise
+ * ld-scripts/sort_b_n_n-1.d: Likewise
+ * ld-scripts/sort_b_n_n-2.d: Likewise
+ * ld-scripts/sort_b_n_n-3.d: Likewise
+ * ld-scripts/sort_b_n_n.t: Likewise
+ * ld-scripts/sort_n_a-a.s: Likewise
+ * ld-scripts/sort_n_a-b.s: Likewise
+ * ld-scripts/sort_no-1.d: Likewise
+ * ld-scripts/sort_no-2.d: Likewise
+ * ld-scripts/sort_no.t: Likewise
+
+2004-10-01 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-powerpc/tls.s: Don't set tls type for undefined syms.
+ * ld-powerpc/tls32.s: Likewise.
+ * ld-powerpc/tlstoc.s: Likewise.
+ * ld-s390/tlsbin.s: Likewise.
+ * ld-s390/tlsbin_64.s: Likewise.
+ * ld-s390/tlsbinpic.s: Likewise.
+ * ld-s390/tlsbinpic_64.s: Likewise.
+ * ld-s390/tlspic1.s: Likewise.
+ * ld-s390/tlspic1_64.s: Likewise.
+ * ld-sparc/tlssunbin32.s: Likewise.
+ * ld-sparc/tlssunbinpic32.s: Likewise.
+ * ld-sparc/tlssunnopic32.s: Likewise.
+ * ld-sparc/tlssunpic32.s: Likewise.
+
+2004-10-01 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-s390/tlsbin.s: Set tls type for undefined syms.
+ * ld-s390/tlsbin_64.s: Likewise.
+ * ld-s390/tlsbinpic.s: Likewise.
+ * ld-s390/tlsbinpic_64.s: Likewise.
+ * ld-s390/tlspic1.s: Likewise.
+ * ld-s390/tlspic1_64.s: Likewise.
+ * ld-sparc/tlssunbin32.s: Likewise.
+ * ld-sparc/tlssunbinpic32.s: Likewise.
+ * ld-sparc/tlssunnopic32.s: Likewise.
+ * ld-sparc/tlssunpic32.s: Likewise.
+
+2004-10-01 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-sparc/tlssunbin32.sd: Adjust for changed .dynamic location.
+
+2004-10-01 Nick Clifton <nickc@redhat.com>
+
+ PR 371
+ * ld-undefined/undefined.exp: Remove redundant XPASS
+ specifications.
+
+2004-10-01 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tls.s (gd, ld): Set tls type for undefined syms.
+ * ld-powerpc/tls32.s (gd, ld): Likewise.
+ * ld-powerpc/tlstoc.s (gd, ld): Likewise.
+ * ld-powerpc/tlsso.r: Update.
+ * ld-powerpc/tlsso32.r: Update.
+ * ld-powerpc/tlstocso.r: Update.
+
+2004-09-30 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm-elf.exp: Add test for --target2=abs.
+ * ld-arm/arm-target2-abs.d: New file.
+
+2004-09-29 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-pe/secrel1.s: Pad .rdata out to 16 byte boundary.
+ * ld-pe/secrel.d: Adjust to suit.
+
+2004-09-24 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elfvsb/elfvsb.exp: Remove file name from "undefined ref" string.
+
+2004-09-22 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-i386/tlsbin.rd: Update for changed segment map.
+ * ld-i386/tlsnopic.rd: Likewise.
+ * ld-i386/tlspic.rd: Likewise.
+ * ld-powerpc/tlsexe.r: Likewise.
+ * ld-powerpc/tlsexe32.r: Likewise.
+ * ld-powerpc/tlsexetoc.r: Likewise.
+ * ld-powerpc/tlsso.r: Likewise.
+ * ld-powerpc/tlsso32.r: Likewise.
+ * ld-powerpc/tlstocso.r: Likewise.
+ * ld-s390/tlsbin.rd: Likewise.
+ * ld-s390/tlsbin_64.rd: Likewise.
+ * ld-s390/tlspic.rd: Likewise.
+ * ld-s390/tlspic_64.rd: Likewise.
+ * ld-sh/tlsbin-2.d: Likewise.
+ * ld-sh/tlspic-2.d: Likewise.
+ * ld-x86-64/tlsbin.rd: Likewise.
+ * ld-x86-64/tlspic.rd: Likewise.
+
+2004-09-22 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-scripts/overlay-size.d: Don't check .mbss lma.
+ * ld-sh/sh64/mix1.xd: Update for changed .bss file offset.
+ * ld-sh/sh64/shdl32.xd: Likewise.
+ * ld-sh/sh64/shdl64.xd: Likewise.
+
+2004-09-17 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm-target1-{abs,rel}.d}: New files.
+ * ld-arm/arm-target1.s: New file.
+ * ld-arm/arm-target2-{,got-}rel.d: New files.
+ * ld-arm/arm-target2.s: New file.
+ * ld-arm/arm-rel31.d: New files.
+ * ld-arm/arm-rel31.s: New files.
+ * ld-arm/arm.ld: New file.
+ * ld-arm/arm-elf.exp: Add new tests.
+
+2004-09-07 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/hiddef1.d, ld-cris/hiddef1.s, ld-cris/hidrefgotplt1.s:
+ New test.
+
+2004-09-03 Tomer Levi <Tomer.Levi@nsc.com>
+
+ * ld-crx: New directory.
+ * ld-crx/crx.exp: New test script.
+ * ld-crx/crx.ld: New linker script.
+ * ld-crx/reloc-abs32.s: New file.
+ * ld-crx/reloc-abs32.d: Likewise.
+ * ld-crx/reloc-imm16.s: Likewise.
+ * ld-crx/reloc-imm16.d: Likewise.
+ * ld-crx/reloc-imm32.s: Likewise.
+ * ld-crx/reloc-imm32.d: Likewise.
+ * ld-crx/reloc-num8.s: Likewise.
+ * ld-crx/reloc-num8.d: Likewise.
+ * ld-crx/reloc-num16.s: Likewise.
+ * ld-crx/reloc-num16.d: Likewise.
+ * ld-crx/reloc-num32.s: Likewise.
+ * ld-crx/reloc-num32.d: Likewise.
+ * ld-crx/reloc-regrel12.s: Likewise.
+ * ld-crx/reloc-regrel12.d: Likewise.
+ * ld-crx/reloc-regrel22.s: Likewise.
+ * ld-crx/reloc-regrel22.d: Likewise.
+ * ld-crx/reloc-regrel28.s: Likewise.
+ * ld-crx/reloc-regrel28.d: Likewise.
+ * ld-crx/reloc-regrel32.s: Likewise.
+ * ld-crx/reloc-regrel32.d: Likewise.
+ * ld-crx/reloc-rel4.s: Likewise.
+ * ld-crx/reloc-rel4.d: Likewise.
+ * ld-crx/reloc-rel8.s: Likewise.
+ * ld-crx/reloc-rel8.d: Likewise.
+ * ld-crx/reloc-rel8-cmp.s: Likewise.
+ * ld-crx/reloc-rel8-cmp.d: Likewise.
+ * ld-crx/reloc-rel16.s: Likewise.
+ * ld-crx/reloc-rel16.d: Likewise.
+ * ld-crx/reloc-rel24.s: Likewise.
+ * ld-crx/reloc-rel24.d: Likewise.
+ * ld-crx/reloc-rel32.s: Likewise.
+ * ld-crx/reloc-rel32.d: Likewise.
+
+2004-08-21 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/expdyn1.d, ld-cris/expdyn5.d, ld-cris/expdyn6.d,
+ ld-cris/expdyn7.d, ld-cris/gotplt2.d, ld-cris/gotplt3.d,
+ ld-cris/libdso-1.d, ld-cris/libdso-2.d, ld-cris/locref1.d,
+ ld-cris/nodyn4.d, ld-cris/nodyn5.d: Adjust for reordered
+ sections.
+
+2004-08-17 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elfvsb/elfvsb.exp: Cope with ppc64 dot symbols.
+
+2004-08-17 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-scripts/cross1.t: Remove .opd section spec.
+
+2004-08-01 Stephane Carrez <stcarrez@nerim.fr>
+
+ * ld-undefined/undefined.exp: The undefine tests now work on
+ 68HC11 and 68HC12.
+
+2004-07-29 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-sh/sh64/crange3-cmpct.rd: Update.
+ * ld-sh/sh64/crange3-media.rd: Update.
+
+2004-07-27 Nitin Yewale <nitiny@kpitcummins.com>
+
+ * ld-h8300/h8300.exp: Addition of new test case to check
+ relaxation for H8S target.
+ * ld-h8300/relax-6.s: New test source file.
+ * ld-h8300/relax-6.d: New test expected disassembly file.
+ * ld-h8300/relax-6-coff.d: New test expected disassembly file for
+ coff format.
+
+2004-07-22 Nick Clifton <nickc@redhat.com>
+
+ PR/280
+ * ld-h8300/relax-3-coff.d: Remove duplicated raw insn values.
+ * ld-h8300/relax-3.d: Likewise.
+ * ld-h8300/relax-4-coff.d: Likewise.
+ * ld-h8300/relax-4.d: Likewise.
+ * ld-h8300/relax-5-coff.d: Likewise.
+ * ld-h8300/relax.d: Likewise.
+
+2004-07-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-scripts/crossref.exp: XFAIL ia64-*-* on the first test.
+
+2004-07-13 Nitin Yewale <nitiny@kpitcummins.com>
+
+ * ld-h8300/h8300.exp: Addition of gcsection test case.
+ * ld-h8300/gcsection.s: New test source file.
+ * ld-h8300/gcsection.d: New test expected disassembly file.
+
+2004-07-08 Maciej W. Rozycki <macro@linux-mips.org>
+
+ * ld-mips-elf/reloc-merge-lo16.{s,d,ld}: New test.
+ * ld-mips-elf/mips-elf.exp: Run it.
+
+2004-07-02 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-elf/frame.exp: Don't run on sh*-*-elf*.
+ * ld-sh/shared-1.d: Adjust for section reordering changes.
+ * ld-sh/shared-2.d: Likewise.
+ * ld-sh/tlsbin-2.d: Likewise.
+ * ld-sh/tlspic-2.d: Likewise.
+ * ld-sh/sh64/abi32.xd: Likewise.
+ * ld-sh/sh64/abi64.xd: Likewise.
+ * ld-sh/sh64/cmpct1.xd: Likewise.
+ * ld-sh/sh64/crange1.rd: Likewise.
+ * ld-sh/sh64/crange2.rd: Likewise.
+ * ld-sh/sh64/crange3-cmpct.rd: Likewise.
+ * ld-sh/sh64/crange3-media.rd: Likewise.
+ * ld-sh/sh64/crange3.rd: Likewise.
+ * ld-sh/sh64/gotplt.d: Likewise.
+ * ld-sh/sh64/init-cmpct.d: Likewise.
+ * ld-sh/sh64/init-media.d: Likewise.
+ * ld-sh/sh64/init64.d: Likewise.
+ * ld-sh/sh64/mix1.xd: Likewise.
+ * ld-sh/sh64/mix2.xd: Likewise.
+ * ld-sh/sh64/shdl32.xd: Likewise.
+ * ld-sh/sh64/shdl64.xd: Likewise.
+
+2004-07-02 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-discard/static.d: Accept both original sym and section sym.
+
+2004-07-01 Jakub Jelinek <jakub@redhat.com>
+
+ * ld-sparc/tlssunpic32.rd: Adjust for section reordering changes
+ and removal of unneeded STT_SECTION symbols from .dynsym.
+ * ld-sparc/tlssunbin32.rd: Likewise.
+ * ld-sparc/tlssunpic32.dd: Likewise.
+ * ld-sparc/tlssunpic32.sd: Likewise.
+ * ld-sparc/tlssunbin32.dd: Likewise.
+ * ld-sparc/tlssunbin32.sd: Likewise.
+ * ld-sparc/tlssunbin32.td: Likewise.
+
+2004-07-01 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-discard/extern.d: Update.
+ * ld-discard/start.d: Update.
+ * ld-discard/static.d: Update.
+
+2004-06-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR 233
+ * ld-discard/extern.d: Updated.
+ * ld-discard/start.d: Likewise.
+ * ld-discard/static.d: Likewise.
+
+2004-06-29 J"orn Rennecke <joern.rennecke@superh.com>
+
+ Actually add these files:
+ 2004-05-28 Andrew Stubbs <andrew.stubbs@superh.com>
+ * ld-sh/arch/arch.exp: New test script.
+ * ld-sh/arch/arch_expected.txt: New file.
+ * ld-sh/arch/sh.s: New file.
+ * ld-sh/arch/sh2.s: New file.
+ * ld-sh/arch/sh-dsp.s: New file.
+ * ld-sh/arch/sh2e.s: New file.
+ * ld-sh/arch/sh3-nommu.s: New file.
+ * ld-sh/arch/sh3.s: New file.
+ * ld-sh/arch/sh3-dsp.s: New file.
+ * ld-sh/arch/sh3e.s: New file.
+ * ld-sh/arch/sh4-nommu-nofpu.s: New file.
+ * ld-sh/arch/sh4-nofpu.s: New file.
+ * ld-sh/arch/sh4.s: New file.
+ * ld-sh/arch/sh4a-nofpu.s: New file.
+ * ld-sh/arch/sh4al-dsp.s: New file.
+ * ld-sh/arch/sh4a.s: New file.
+
+2004-06-29 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/frame.exp: Don't run on mcore.
+
+2004-06-26 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-bootstrap/bootstrap.exp: Handle timestamps in more pe targets.
+
+2004-06-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elfvers/vers.exp: Use PIC for shared libraries by default.
+
+2004-06-21 Alexandre Oliva <aoliva@redhat.com>
+
+ * ld-frv/fdpic-pie-1.d: Adjust for pie-specific link script.
+ * ld-frv/fdpic-pie-2.d: Likewise.
+ * ld-frv/fdpic-pie-6.d: Likewise.
+ * ld-frv/fdpic-pie-7.d: Likewise.
+ * ld-frv/fdpic-pie-8.d: Likewise.
+ * ld-frv/fdpic-shared-1.d: Likewise.
+ * ld-frv/fdpic-shared-2.d: Likewise.
+ * ld-frv/fdpic-shared-3.d: Likewise.
+ * ld-frv/fdpic-shared-4.d: Likewise.
+ * ld-frv/fdpic-shared-5.d: Likewise.
+ * ld-frv/fdpic-shared-6.d: Likewise.
+ * ld-frv/fdpic-shared-7.d: Likewise.
+ * ld-frv/fdpic-shared-8.d: Likewise.
+ * ld-frv/fdpic-shared-local-2.d: Likewise.
+ * ld-frv/fdpic-shared-local-8.d: Likewise.
+
+2004-06-21 Nick Clifton <nickc@redhat.com>
+
+ * ld-elf/frame.exp: Handle ports which do not support the --shared
+ linker switch.
+
+2004-06-18 Jan Beulich <jbeulich@novell.com>
+
+ * ld-elfvsb/main.c: Ensure visibility_def and visibility_func are
+ actually referenced (gcc 3.4 eliminates comparisons of addresses
+ of global symbols with NULL).
+ * ld-selective/selective.exp: Suppress -fvtable-gc tests for gcc
+ 3.4.0 and above, as this option and its functionality is no longer
+ supported, making these tests fail).
+
+2004-05-28 Andrew Stubbs <andrew.stubbs@superh.com>
+
+ * ld-sh/arch/arch.exp: New test script.
+ * ld-sh/arch/arch_expected.txt: New file.
+ * ld-sh/arch/sh.s: New file.
+ * ld-sh/arch/sh2.s: New file.
+ * ld-sh/arch/sh-dsp.s: New file.
+ * ld-sh/arch/sh2e.s: New file.
+ * ld-sh/arch/sh3-nommu.s: New file.
+ * ld-sh/arch/sh3.s: New file.
+ * ld-sh/arch/sh3-dsp.s: New file.
+ * ld-sh/arch/sh3e.s: New file.
+ * ld-sh/arch/sh4-nommu-nofpu.s: New file.
+ * ld-sh/arch/sh4-nofpu.s: New file.
+ * ld-sh/arch/sh4.s: New file.
+ * ld-sh/arch/sh4a-nofpu.s: New file.
+ * ld-sh/arch/sh4al-dsp.s: New file.
+ * ld-sh/arch/sh4a.s: New file.
+
+2004-05-18 Nick Clifton <nickc@redhat.com>
+
+ * ld-elf/frame.s: Replace @ with % so that the file can be
+ compiled by an ARM targeted GAS.
+ * ld-elf/table.s: Likewise.
+ * ld-elf/tbss.s: Likewise. Also replace .align <foo> with
+ .p2align (log2 <foo>) to cope with the fact that the ARM .align
+ directive takes a power-of-two argument.
+
+2004-05-17 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/frame.exp: New file. Test read-only .eh_frame and
+ .gcc_except_table sections.
+ * ld-elf/frame.s: Likewise.
+ * ld-elf/table.s: Likewise.
+ * ld-elf/tbss.s: Likewise.
+
+2004-05-12 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-sh/tlsbin-2.d: Adjust for section reordering changes
+ and removal of unneeded STT_SECTION symbols from .dynsym.
+ * ld-sh/tlsbin-3.d: Likewise.
+ * ld-sh/tlspic-2.d: Likewise.
+
+2004-05-12 Ben Elliston <bje@au.ibm.com>
+
+ * ld-sh/sh64/relax.exp: Remove stray semicolons.
+ * ld-sh/sh64/relfail.exp: Likewise.
+ * lib/ld-lib.exp: Likewise.
+
+2004-05-11 Jakub Jelinek <jakub@redhat.com>
+
+ * ld-i386/tlspic.rd: Adjust for section reordering changes
+ and removal of unneeded STT_SECTION symbols from .dynsym.
+ * ld-i386/tlspic.dd: Likewise.
+ * ld-i386/tlspic.sd: Likewise.
+ * ld-i386/tlsbin.rd: Likewise.
+ * ld-i386/tlsbinpic.s: Likewise.
+ * ld-i386/tlsbin.dd: Likewise.
+ * ld-i386/tlsbin.sd: Likewise.
+ * ld-i386/tlsnopic.rd: Likewise.
+ * ld-i386/tlsnopic1.s: Likewise.
+ * ld-i386/combreloc.d: Likewise.
+ * ld-i386/tlsnopic.dd: Likewise.
+ * ld-i386/tlsnopic.sd: Likewise.
+ * ld-x86-64/tlspic.rd: Likewise.
+ * ld-x86-64/tlspic.dd: Likewise.
+ * ld-x86-64/tlsbin.dd: Likewise.
+ * ld-x86-64/tlspic.sd: Likewise.
+ * ld-x86-64/tlsbin.sd: Likewise.
+ * ld-x86-64/tlspic.td: Likewise.
+ * ld-x86-64/tlsbin.td: Likewise.
+ * ld-x86-64/tlsbin.rd: Likewise.
+ * ld-s390/tlspic1.s: Likewise.
+ * ld-s390/tlsbinpic.s: Likewise.
+ * ld-s390/tlspic.rd: Likewise.
+ * ld-s390/tlsbin.rd: Likewise.
+ * ld-s390/tlspic.dd: Likewise.
+ * ld-s390/tlsbin.dd: Likewise.
+ * ld-s390/tlsbin.sd: Likewise.
+ * ld-s390/tlsbin.td: Likewise.
+ * ld-s390/tlspic.sd: Likewise.
+ * ld-s390/tlspic.td: Likewise.
+ * ld-s390/tlspic1_64.s: Likewise.
+ * ld-s390/tlsbinpic_64.s: Likewise.
+ * ld-s390/tlspic_64.rd: Likewise.
+ * ld-s390/tlsbin_64.rd: Likewise.
+ * ld-s390/tlspic_64.dd: Likewise.
+ * ld-s390/tlsbin_64.dd: Likewise.
+ * ld-s390/tlspic_64.sd: Likewise.
+ * ld-s390/tlspic_64.td: Likewise.
+ * ld-s390/tlsbin_64.td: Likewise.
+ * ld-s390/tlsbin_64.sd: Likewise.
+ * ld-powerpc/tlsexe32.r: Likewise.
+ * ld-powerpc/tlsso32.r: Likewise.
+ * ld-powerpc/tlsso32.d: Likewise.
+ * ld-powerpc/tlsso32.g: Likewise.
+ * ld-powerpc/tlsso32.t: Likewise.
+ * ld-powerpc/tlsexe.r: Likewise.
+ * ld-powerpc/tlsso.r: Likewise.
+ * ld-powerpc/tlsso.g: Likewise.
+ * ld-powerpc/tlsexetoc.r: Likewise.
+ * ld-powerpc/tlstocso.r: Likewise.
+ * ld-powerpc/tlstocso.g: Likewise.
+ * ld-ia64/tlspic.rd: Likewise.
+ * ld-ia64/tlspic.dd: Likewise.
+ * ld-ia64/tlspic.sd: Likewise.
+ * ld-ia64/tlspic.td: Likewise.
+ * ld-ia64/tlsbin.rd: Likewise.
+ * ld-ia64/tlsbin.sd: Likewise.
+ * ld-ia64/tlsbin.td: Likewise.
+ * ld-elfvsb/elfvsb.exp: XFAIL non-PIC load offset tests on s390x.
+ * ld-shared/shared.exp: Likewise.
+
+2004-05-10 John Paul Wallington <jpw@gnu.org>
+
+ * ld-mmix/bspec2.d: Update sh_info to decimal.
+ * ld-mmix/local1.d: Likewise.
+ * ld-mmix/local3.d: Likewise.
+ * ld-mmix/local5.d: Likewise.
+ * ld-mmix/local7.d: Likewise.
+
+2004-05-05 Alexandre Oliva <aoliva@redhat.com>
+
+ * ld-frv/fdpic.exp: Restore $LDFLAGS at the end.
+ * ld-frv/fr450-link.d: Match fdpic as well.
+
+2004-05-05 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-sh/sh64/crange1.rd: Update sh_info to decimal.
+ * ld-sh/sh64/crange2.rd: Likewise.
+ * ld-sh/sh64/crange3.rd: Likewise.
+ * ld-sh/sh64/crange3-cmpct.rd: Likewise.
+ * ld-sh/sh64/crange3-media.rd: Likewise.
+ * ld-sh/sh64/crangerel1.rd: Likewise.
+ * ld-sh/sh64/crangerel2.rd: Likewise.
+
+2004-05-05 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlsexe.r: Update sh_info to decimal.
+ * ld-powerpc/tlsexe32.r: Likewise.
+ * ld-powerpc/tlsexetoc.r: Likewise.
+ * ld-powerpc/tlsso.r: Likewise.
+ * ld-powerpc/tlsso32.r: Likewise.
+ * ld-powerpc/tlstocso.r: Likewise.
+
+2004-04-24 Chris Demetriou <cgd@broadcom.com>
+
+ * ld-elf/merge.d: XFAIL on all MIPS targets.
+
+2004-04-24 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlsexe32.d: Update.
+ * ld-powerpc/tlsso32.d: Update.
+
+2004-04-23 Chris Demetriou <cgd@broadcom.com>
+
+ * ld-mips-elf/reloc-3-r.d: Remove, as part of MIPS -membedded-pic
+ removal.
+ * ld-mips-elf/reloc-3-srec.d: Likewise.
+ * ld-mips-elf/reloc-3.ld: Likewise.
+ * ld-mips-elf/reloc-3a.s: Likewise.
+ * ld-mips-elf/reloc-3b.s: Likewise.
+ * ld-mips-elf/mips-elf.exp: Don't run now-removed tests.
+
+2004-04-22 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-sh/tlsbin-1.d: Update
+ * ld-sh/tlspic-1.d: Update.
+
+2004-04-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-i386/tlspic.dd: Updated.
+
+2004-04-21 Chris Demetriou <cgd@broadcom.com>
+
+ * ld-empic/run.c: Removed as part of MIPS --embedded-relocs removal.
+ * ld-empic/empic.exp: Likewise.
+ * ld-empic/relax.t: Likewise.
+ * ld-empic/relax1.c: Likewise.
+ * ld-empic/relax2.c: Likewise.
+ * ld-empic/relax3.c: Likewise.
+ * ld-empic/relax4.c: Likewise.
+ * ld-empic/runtest1.c: Likewise.
+ * ld-empic/runtest2.c: Likewise.
+ * ld-empic/runtesti.s: Likewise.
+ * ld-mips-elf/empic1-ln.d: Likewise.
+ * ld-mips-elf/empic1-lp.d: Likewise.
+ * ld-mips-elf/empic1-mn.d: Likewise.
+ * ld-mips-elf/empic1-mp.d: Likewise.
+ * ld-mips-elf/empic1-ref.s: Likewise.
+ * ld-mips-elf/empic1-sn.d: Likewise.
+ * ld-mips-elf/empic1-sp.d: Likewise.
+ * ld-mips-elf/empic1-space.s: Likewise.
+ * ld-mips-elf/empic1-tgt.s: Likewise.
+ * ld-mips-elf/empic2-fwd-0.d: Likewise.
+ * ld-mips-elf/empic2-fwd-1.d: Likewise.
+ * ld-mips-elf/empic2-fwd-tgt.s: Likewise.
+ * ld-mips-elf/empic2-ref.s: Likewise.
+ * ld-mips-elf/empic2-rev-0.d: Likewise.
+ * ld-mips-elf/empic2-rev-1.d: Likewise.
+ * ld-mips-elf/empic2-rev-tgt.s: Likewise.
+ * ld-mips-elf/empic2-space.s: Likewise.
+ * ld-mips-elf/emrelocs-eb.d: Likewise.
+ * ld-mips-elf/emrelocs-el.d: Likewise.
+ * ld-mips-elf/emrelocs.ld: Likewise.
+ * ld-mips-elf/emrelocs1.s: Likewise.
+ * ld-mips-elf/emrelocs2.s: Likewise.
+ * ld-mips-elf/mips-elf.exp: Don't run now-removed tests.
+
+2004-04-20 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elfweak/elfweak.exp: Add an undefined weak size change
+ test.
+
+ * ld-elfweak/size.dat: New file.
+ * ld-elfweak/size_bar.c: Likewise.
+ * ld-elfweak/size_foo.c: Likewise.
+ * ld-elfweak/size_main.c: Likewise.
+
+2004-04-14 Brian Ford <ford@vss.fsi.com>
+ DJ Delorie <dj@redhat.com>
+
+ * ld-pe/pe.exp: New, tests for i?86 PE.
+ * ld-pe/secrel1.s: New, test R_SECREL32 reloc.
+ * ld-pe/secrel2.s: Likewise.
+ * ld-pe/secrel.d: Likewise.
+
+2004-04-19 Jakub Jelinek <jakub@redhat.com>
+
+ * ld-elfvsb/elfvsb.exp: XFAIL some tests on sparc64.
+ * ld-shared/shared.exp: Likewise.
+
+2004-04-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-scripts/assert.s: Add a newline.
+ * ld-scripts/data.s: Likewise.
+
+2004-04-08 Alan Modra <amodra@bigpond.net.au>
+
+ PR 47.
+ * ld-cdtest/cdtest.exp: Remove -fgnu-linker.
+
+2004-04-08 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-scripts/align.exp: Don't run on aix.
+ * ld-scripts/assert.s: Remove comment.
+ * ld-scripts/data.s: Likewise.
+ * ld-scripts/data.t: Set start address to allow for aout headers.
+ Make first LONG pc-relative.
+ * ld-scripts/data.d: Update.
+ * ld-scripts/defined2.d: Allow other random syms.
+ * ld-scripts/defined3.d: Likewise.
+ * ld-scripts/provide-1.s: Pad section.
+ * ld-scripts/provide-1.t: Set .data address and align.
+ * ld-scripts/provide-1.d: Update.
+ * ld-scripts/provide-2.s: Pad section.
+ * ld-scripts/provide-2.d: Allow random trailing syms.
+ * ld-scripts/provide-3.s: Pad section.
+ * ld-scripts/provide-3.d: Fix typos.
+ * ld-scripts/provide.exp: Don't run on aix.
+ * ld-scripts/size-1.s: Simplify test.
+ * ld-scripts/size-1.t: Rewrite.
+ * ld-scripts/size-1.d: Update.
+ * ld-scripts/size-2.s: Simplify.
+ * ld-scripts/size-2.t: Set start address. Set exe flag on image.
+ * ld-scripts/size-2.d: Update.
+ * ld-scripts/size.exp: Don't run on aix. Run size-2 on all elf
+ targets except mips.
+
+2004-03-27 Alexandre Oliva <aoliva@redhat.com>
+
+ * ld-frv/fdpic*.d: Adjust to compensate for page size change.
+
+2004-03-26 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlsexe.r: Update for changed sym type.
+ * ld-powerpc/tlsexetoc.r: Likewise.
+
+2004-03-22 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/dsofnf.s, ld-cris/dsofnf2.s, ld-cris/gotplt1.d,
+ ld-cris/gotplt2.d, ld-cris/gotplt3.d: New tests.
+
+2004-03-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elfvers/vers.exp: Add new tests for versioned weak
+ definition.
+
+ * ld-elfvers/vers28a.c: New file.
+ * ld-elfvers/vers28a.dsym: Likewise.
+ * ld-elfvers/vers28a.ver: Likewise.
+ * ld-elfvers/vers28b.c: Likewise.
+ * ld-elfvers/vers28b.dsym: Likewise.
+ * ld-elfvers/vers28b.map: Likewise.
+ * ld-elfvers/vers28b.ver: Likewise.
+ * ld-elfvers/vers28c.c: Likewise.
+ * ld-elfvers/vers28c.dsym: Likewise.
+ * ld-elfvers/vers28c.ver: Likewise.
+
+2004-03-19 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-scripts/provide-2.d: Ignore random symbols.
+
+2004-03-16 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tls.d: Update.
+ * ld-powerpc/tls32.d: Update.
+ * ld-powerpc/tlsexe.d: Update.
+ * ld-powerpc/tlsexe32.d: Update.
+ * ld-powerpc/tlsexetoc.d: Update.
+ * ld-powerpc/tlsso.d: Update.
+ * ld-powerpc/tlsso32.d: Update.
+ * ld-powerpc/tlstoc.d: Update.
+ * ld-powerpc/tlstocso.d: Update.
+
+2004-03-05 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-scripts/size-1.d: Add bigendian regexps.
+ * ld-scripts/size-2.d: Set --wide for readelf.
+
+ * ld-scripts/size.exp: New.
+ * ld-scripts/size-[12].{d,s,t}: New.
+
+2004-03-01 Richard Sandiford <rsandifo@redhat.com>
+
+ * ld-frv/fr450-link[abc].s, fr450-link.d: New test.
+ * ld-frv/frv.exp: New harness.
+
+2004-02-24 Alexandre Oliva <aoliva@redhat.com>
+
+ * ld-frv/fdpic-pie-2.d: Adjust for decay of FUNCDESC relocs that
+ bind locally.
+ * ld-frv/fdpic-pie-8.d: Likewise.
+ * ld-frv/fdpic-shared-4.d: Likewise.
+ * ld-frv/fdpic-pie-6-fail.d: Renamed from...
+ * ld-frv/fdpic-pie-6.d: New test.
+ * ld-frv/fdpic-shared-6-fail.d: Renamed from...
+ * ld-frv/fdpic-shared-6.d: New test.
+ * ld-frv/fdpic6.ldv: New.
+ * ld-frv/fdpic-static-6.d: Adjust test name.
+ * ld-frv/fdpic-pie-8-fail.d: Removed.
+ * ld-frv/fdpic.exp: Run new tests.
+
+2004-02-23 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-scripts/provide.exp: New.
+ * ld-scripts/provide-{1,2,3}.{s,t,d}.exp: New.
+
+2004-02-23 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-scripts/data.t: Set ".other" address so location doesn't
+ depend on target alignment.
+ * ld-scripts/data.d: Update.
+
+2004-02-20 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-scripts/align.{s,t,exp}: New.
+
+2004-02-19 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-scripts/data.{s,t,d,exp}: New.
+
+2004-02-18 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-scripts/assert.{s,t,exp}: New.
+
+2004-02-17 Richard Sandiford <rsandifo@redhat.com>
+
+ * ld-mips/elf/elf-rel-xgot-{n32,n64-linux}.d: Update after 2004-02-02
+ changes to the way large constants are added.
+ * ld-mips/elf/elf-rel-got-{n32,n64-linux}.d: Likewise. Adjust order
+ of GOT entries after today's change to the handling of GOT_PAGE
+ relocations.
+
+2004-02-09 Anil Paranjpe <anilp1@KPITCummins.com>
+
+ * ld-h8300/relax-5.s: New file: Source for relax-5 test.
+ * ld-h8300/relax-5.d: New file: Expected output and commands for
+ assembling and linking the relax-5 test.
+ * ld-h8300/relax-5-coff.d: New file: Variant for the COFF based
+ toolchain.
+ * ld-h8300/h8300-exp: Run the relax-5 test.
+
+2004-01-23 Daniel Jacobowitz <drow@mvista.com>
+
+ * ld-arm/arm-app-abs32.s, ld-arm/arm-app-abs32.r,
+ ld-arm/arm-app-abs32.d: New files.
+ * ld-arm/arm-elf.exp: Add arm-app-abs32 testcase.
+
+2004-01-19 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-i386/tlsbin.dd: Adjust for changed sib printing.
+
+2004-01-13 Daniel Jacobowitz <drow@mvista.com>
+
+ * ld-arm/arm-elf.exp: Add arm-static-app test.
+ * ld-arm/arm-static-app.s, ld-arm/arm-static-app.d,
+ ld-arm/arm-static-app.r: New files.
+
+2004-01-12 Anil Paranjpe <anilp1@KPITCummins.com>
+
+ * ld-h8300/h8300-exp: Run the relax-4 test.
+ * ld-h8300/relax-4.s: New file: Source for relax-4 test.
+ * ld-h8300/relax-4.d: New file: Expected output and commands for
+ assembling and linking the relax-4 test.
+ * ld-h8300/relax-4-coff.d: New file: Variant for the COFF based
+ toolchain.
+
+2004-01-09 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-selective/selective.exp: Skip ia64-*-*.
+
+2004-01-09 Daniel Jacobowitz <drow@mvista.com>
+
+ * ld-arm/arm-lib.d, ld-arm/arm-lib.r: Update for R_ARM_PLT32
+ changes.
+
+2004-01-06 Daniel Jacobowitz <drow@mvista.com>
+
+ * ld-arm/arm-app.d, ld-arm/arm-app.r, ld-arm/arm-app.s,
+ ld-arm/arm-lib.d, ld-arm/arm-lib.r, ld-arm/arm-lib.s,
+ ld-arm/arm-lib-plt32.d, ld-arm/arm-lib-plt32.r,
+ ld-arm/arm-lib-plt32.s, ld-arm/arm-elf.exp: New files.
+
+2004-01-06 Alexandre Oliva <aoliva@redhat.com>
+
+ * ld-frv: Update .d files with correct addresses displayed for
+ dynamic relocations.
+ 2003-12-02 Alexandre Oliva <aoliva@redhat.com>
+ * ld-frv/fdpic1.s (.D0): Move to separate data section.
+ 2003-11-28 Alexandre Oliva <aoliva@redhat.com>
+ * ld-frv/fdpic-static-1.d, ld-frv/fdpic-static-2.d,
+ * ld-frv/fdpic-static-7.d, ld-frv/fdpic-static-8.d: Update to
+ reflect EMBEDDED= change in linker script.
+ 2003-11-27 Alexandre Oliva <aoliva@redhat.com>
+ * ld-frv: Update .d files to reflect changes in the page size, the
+ addition of a stack segment, the use of a NULL function descriptor
+ for weakundef functions and the change in the lazy funcdesc_value
+ in-place addend value.
+ 2003-11-05 Alexandre Oliva <aoliva@redhat.com>
+ * lib/ld-lib.exp (is_elf_format): Match frv-uclinux.
+ 2003-10-06 Alexandre Oliva <aoliva@redhat.com>
+ * ld-frv/fdpic-static-1.d, ld-frv/fdpic-static-2.d,
+ ld-frv/fdpic-static-7.d, ld-frv/fdpic-static-8.d: Addresses are
+ now _gp-based, not \.rofixup-based.
+ * ld-frv/fdpic-static-6.d: Likewise. Match warning about
+ relocation to different section.
+ 2003-09-30 Alexandre Oliva <aoliva@redhat.com>
+ * ld-frv/fdpic.exp: Add -melf32frvfd to LDFLAGS.
+ 2003-09-19 Alexandre Oliva <aoliva@redhat.com>
+ * ld-frv/fdpic7.s, ld-frv/fdpic-static-7.d, ld-frv/fdpic-pie-7.d,
+ ld-frv/fdpic-shared-7.d: New.
+ * ld-frv/fdpic8.s, ld-frv/fdpic-static-8.d, ld-frv/fdpic-pie-8.d,
+ ld-frv/fdpic-shared-8.d: New.
+ * ld-frv/fdpic-pie-8-fail.d, ld-frv/fdpic-shared-8-fail.d: New.
+ * ld-frv/fdpic.exp: Run them.
+ * ld-frv/fdpic8.ldv, ld-frv/fdpic8min.ldv: New.
+ 2003-09-18 Alexandre Oliva <aoliva@redhat.com>
+ * ld-frv/fdpic5.s, ld-frv/fdpic-static-5.d, ld-frv/fdpic-pie-5.d,
+ ld-frv/fdpic-shared-5.d: New.
+ * ld-frv/fdpic6.s, ld-frv/fdpic-static-6.d, ld-frv/fdpic-pie-6.d,
+ ld-frv/fdpic-shared-6.d: New.
+ * ld-frv/fdpic.exp: Run them.
+ * ld-frv/fdpic*.d: Add -mfdpic to assembler flags. Updated.
+ * ld-frv/fdpic2min.ldv: New, used by fdpic-shared-2.d.
+ * ld-frv/fdpic-shared-2-fail.d: New.
+ * ld-frv/fdpic.exp: Run it.
+ * ld-frv/fdpic4.s, ld-frv/fdpic-shared-4.d: New.
+ * ld-frv/fdpic.exp: Add new test.
+ * ld-frv/fdpic-pie-2.d: Remove unnecessary function descriptors.
+ * ld-frv/fdpic-shared-local-2.d, ld-frv/fdpic2.ldv: New.
+ * ld-frv/fdpic3.s, ld-frv/fdpic-shared-3.d: New.
+ * ld-frv/fdpic.exp: Add new tests.
+ * ld-frv/fdpic.exp, ld-frv/fdpic1.s, ld-frv/fdpic2.s,
+ * ld-frv/fdpic-static-1.d, ld-frv/fdpic-static-2.d,
+ * ld-frv/fdpic-pie-1.d, ld-frv/fdpic-pie-2.d,
+ * ld-frv/fdpic-shared-1.d, ld-frv/fdpic-shared-2.d: Renamed from
+ ucpic.
+ 2003-09-15 Alexandre Oliva <aoliva@redhat.com>
+ * ld-frv/ucpic.exp, ld-frv/ucpic1.s, ld-frv/ucpic2.s: New.
+ * ld-frv/ucpic-static-1.d, ld-frv/ucpic-static-2.d: New.
+ * ld-frv/ucpic-pie-1.d, ld-frv/ucpic-pie-2.d: New.
+ * ld-frv/ucpic-shared-1.d, ld-frv/ucpic-shared-2.d: New.
+
+2004-01-02 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-selective/sel-dump.exp: Use is_elf_format, xfail assorted targets.
+ * ld-selective/selective.exp: Likewise.
+
+For older changes see ChangeLog-9303
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/binutils-2.21/ld/testsuite/ChangeLog-2005 b/binutils-2.21/ld/testsuite/ChangeLog-2005
new file mode 100644
index 0000000..23efd89
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ChangeLog-2005
@@ -0,0 +1,1189 @@
+2005-12-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/orphan2.d: Undo the last change.
+
+2005-12-19 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-elf/unknown2.d: Only run for *-*-linux*.
+ * ld-elf/orphan2.d: Xfail everywhere.
+
+2005-12-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/2065
+ * ld-elf/orphan2.d: New file.
+ * ld-elf/orphan2.s: Likewise.
+
+2005-12-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/unknown2.d: New.
+ * ld-elf/unknown2.s: Likewise.
+
+2005-12-12 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm-call.d: New test.
+ * ld-arm/arm-call1.s: New file.
+ * ld-arm/arm-call1.s: New file.
+ * ld-arm/arm-elf.exp: Add arm-call and mixed-app-v5.
+ * ld-arm/arm.ld: Add .glue_7 and .ARM.attribues.
+ * ld-arm/mixed-app-v5.d: New file.
+ * ld-arm/mixed-app.r: Tweak expected output.
+
+2005-11-18 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/symtocbase.d: Adjust for alignment change.
+
+2005-11-17 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-mmix/sec-1.d: Adjust section order for recent ELF section
+ rearrangement.
+
+2005-11-15 Jan Beulich <jbeulich@novell.com>
+
+ * ld-bootstrap/bootstrap.exp: Delete ld-partial.o and ld[123]*
+ after test.
+ * ld-elf/elf.exp: Delete preinit, init, and fini after test.
+ * ld-elf/sec64k.exp: Use macro and repeat in generated source
+ files. Delete object files after test.
+
+2005-11-11 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/noov.d: Restrict to cris-*-*elf*.
+
+2005-10-31 Hans-Peter Nilsson <hp@bitrange.com>
+
+ PR ld/1501
+ * ld-mmix/bpo-10.d: Adjust for empty-section-removal.
+
+2005-10-28 Hans-Peter Nilsson <hp@axis.com>
+
+ PR ld/1567
+ * ld-cris/noov.s, ld-cris/noov.d: New test.
+
+2005-10-26 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/empty2.d: Allow more symbols.
+
+2005-10-26 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-mmix/bpo-6.d, ld-mmix/bpo-19.d: Adjust for symbols between
+ section symbols and the _start symbol.
+
+2005-10-25 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/orphan.d: Adjust for mips.
+
+2005-10-24 Jan Beulich <jbeulich@novell.com>
+
+ * ld-elf/empty2.[sd]: New.
+
+2005-10-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/1487
+ * ld-ia64/tlspic.rd: Updated.
+
+2005-10-21 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/1467
+ * ld-elf/orphan.d: New file.
+ * ld-elf/orphan.ld: Likewise.
+ * ld-elf/orphan.s: Likewise.
+
+2005-10-20 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-ia64/ia64.exp: Undo the last change. Add support for *.d.
+
+ * ld-ia64/link-order.d: New file.
+
+2005-10-20 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/251
+ * ld-elf/group2.d: New file.
+
+2005-10-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/1487
+ * ld-elf/unknown.d: New file.
+
+2005-10-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-ia64/ia64.exp: Check link order for ld -r.
+
+2005-10-18 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-scripts/crossref.exp: Add -mcall-aixdesc to CFLAGS for
+ powerpc64.
+
+2005-10-13 Mark Mitchell <mark@codesourcery.com>
+
+ * ld-elfvers/vers.exp: Add vers31.
+ * ld-elfvers/vers31.c: New file.
+ * ld-elfvers/vers31.dsym: Likewise.
+ * ld-elfvers/vers31.map: Likewise.
+ * ld-elfvers/vers31.ver: Likewise.
+
+2005-10-08 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm-rel31.d: Ignore Arm object attribute sections.
+ * ld-arm/arm-target1-abs.d: Ditto.
+ * ld-arm/arm-target1-rel.d: Ditto.
+ * ld-arm/arm-target2-abs.d: Ditto.
+ * ld-arm/arm-target2-got-rel.d: Ditto.
+ * ld-arm/arm-target2-rel.d: Ditto.
+
+2005-10-04 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/1396
+ * ld-scripts/cross3.t: New file.
+ * ld-scripts/cross4.c: Likewise.
+
+ * ld-scripts/crossref.exp: Add a new test for "ld -r".
+
+2005-09-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/sec64k.exp: Enabled for all ELF targets.
+
+2005-09-30 Catherine Moore <clm@cm00re.com>
+
+ * ld-elf/merge.d: Xfail bfin.
+
+2005-09-28 Alexandre Oliva <aoliva@redhat.com>
+
+ * symtocbase-1.s, symtocbase-2.s, symtocbase.d: New test.
+ * powerpc.exp: Run it.
+
+2005-09-28 Jan Beulich <jbeulich@novell.com>
+
+ * ld-x86-64/tlspic.dd: Adjust.
+
+2005-09-01 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris: Skip tests unsuitable for testing target
+ cris-axis-linux-gnu.
+
+2005-08-18 David Daney <ddaney@avtrex.com>
+
+ * ld-mips-elf/multi-got-1.d: Adjust for new ld behavior.
+ * ld-mips-elf/multi-got-no-shared.d: Likewise.
+ * ld-mips-elf/rel32-n32.d: Likewise.
+ * ld-mips-elf/rel32-o32.d: Likewise.
+ * ld-mips-elf/rel64.d: Likewise.
+
+2005-08-18 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-d10v/default_layout.d: Adjust for section removal.
+ * ld-elf/empty.s: Define "main".
+ * ld-elf/frame.exp: Don't run for hppa64 and v850.
+ * ld-elf/group1.d: xfail various targets.
+ * ld-elf/merge.d: Likewise.
+ * ld-elf/merge2.d: Likewise.
+ * ld-elf/warn1.d: Likewise.
+ * ld-scripts/defined2.d: Likewise.
+ * ld-scripts/defined3.d: Likewise.
+ * ld-scripts/empty-aligned.d: Likewise.
+ * ld-scripts/size-2.d: Likewise.
+ * ld-scripts/weak.exp: Likewise.
+ * ld-selective/sel-dump.exp: Likewise.
+ * ld-undefined/weak-undef.exp: Likewise.
+
+2005-08-18 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-scripts/crossref.exp: Remove a29k support.
+ * ld-srec/srec.exp: Likewise.
+
+2005-08-17 Jakub Jelinek <jakub@redhat.com>
+
+ * lib/ld-lib.exp (default_ld_compile): Append $cc arguments after
+ $CFLAGS instead of prepending them.
+
+ * ld-elfvers/vers.exp: Add a new test, vers30.
+ * ld-elfvers/vers30.c: New file.
+ * ld-elfvers/vers30.map: New file.
+ * ld-elfvers/vers30.ver: New file.
+ * ld-elfvers/vers30.dsym: New file.
+
+2005-08-17 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-alpha/tlsbin.rd: Update.
+ * ld-alpha/tlsbinr.rd: Update.
+ * ld-cris/locref1.d: Update.
+ * ld-cris/locref2.d: Update.
+ * ld-i386/tlsbin.rd: Update.
+ * ld-ia64/tlsbin.rd: Update.
+ * ld-powerpc/tlsexe.r: Update.
+ * ld-powerpc/tlsexe32.r: Update.
+ * ld-powerpc/tlsexetoc.r: Update.
+ * ld-s390/tlsbin.rd: Update.
+ * ld-s390/tlsbin_64.rd: Update.
+ * ld-sparc/tlssunbin32.rd: Update.
+ * ld-sparc/tlssunbin64.rd: Update.
+ * ld-x86-64/tlsbin.rd: Update.
+
+2005-08-16 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/dso-1.s: Add missing alignment directive.
+ * ld-cris/libdso-10.d: Adjust accordingly.
+
+2005-08-16 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-alpha/tlsbin.rd: Adjust for dynamic sym changes.
+ * ld-alpha/tlsbinr.rd: Likewise.
+ * ld-alpha/tlspic.rd: Likewise.
+ * ld-arm/mixed-app.d: Likewise.
+ * ld-arm/mixed-app.sym: Likewise.
+ * ld-arm/mixed-lib.sym: Likewise.
+ * ld-arm/tls-app.d: Likewise.
+ * ld-arm/tls-app.r: Likewise.
+ * ld-cris/expdyn5.d: Likewise.
+ * ld-cris/expdyn6.d: Likewise.
+ * ld-cris/expdyn7.d: Likewise.
+ * ld-cris/gotplt1.d: Likewise.
+ * ld-cris/gotplt2.d: Likewise.
+ * ld-cris/gotplt3.d: Likewise.
+ * ld-cris/hiddef1.d: Likewise.
+ * ld-cris/libdso-10.d: Likewise.
+ * ld-cris/libdso-11.d: Likewise.
+ * ld-cris/libdso-12.d: Likewise.
+ * ld-cris/libdso-13.d: Likewise.
+ * ld-cris/libdso-14.d: Likewise.
+ * ld-cris/libdso-2.d: Likewise.
+ * ld-cris/pv32-1.d: Likewise.
+ * ld-cris/weakref2.d: Likewise.
+ * ld-frv/fdpic-pie-1.d: Likewise.
+ * ld-frv/fdpic-pie-2.d: Likewise.
+ * ld-frv/fdpic-pie-6.d: Likewise.
+ * ld-frv/fdpic-pie-7.d: Likewise.
+ * ld-frv/fdpic-pie-8.d: Likewise.
+ * ld-frv/fdpic-shared-1.d: Likewise.
+ * ld-frv/fdpic-shared-2.d: Likewise.
+ * ld-frv/fdpic-shared-3.d: Likewise.
+ * ld-frv/fdpic-shared-4.d: Likewise.
+ * ld-frv/fdpic-shared-5.d: Likewise.
+ * ld-frv/fdpic-shared-6.d: Likewise.
+ * ld-frv/fdpic-shared-7.d: Likewise.
+ * ld-frv/fdpic-shared-8.d: Likewise.
+ * ld-frv/fdpic-shared-local-2.d: Likewise.
+ * ld-frv/fdpic-shared-local-8.d: Likewise.
+ * ld-frv/fdpic-static-1.d: Likewise.
+ * ld-frv/fdpic-static-2.d: Likewise.
+ * ld-frv/fdpic-static-6.d: Likewise.
+ * ld-frv/fdpic-static-7.d: Likewise.
+ * ld-frv/fdpic-static-8.d: Likewise.
+ * ld-frv/tls-dynamic-1.d: Likewise.
+ * ld-frv/tls-dynamic-2.d: Likewise.
+ * ld-frv/tls-dynamic-3.d: Likewise.
+ * ld-frv/tls-initial-shared-2.d: Likewise.
+ * ld-frv/tls-pie-1.d: Likewise.
+ * ld-frv/tls-pie-3.d: Likewise.
+ * ld-frv/tls-relax-dynamic-1.d: Likewise.
+ * ld-frv/tls-relax-dynamic-2.d: Likewise.
+ * ld-frv/tls-relax-dynamic-3.d: Likewise.
+ * ld-frv/tls-relax-initial-shared-2.d: Likewise.
+ * ld-frv/tls-relax-pie-1.d: Likewise.
+ * ld-frv/tls-relax-pie-3.d: Likewise.
+ * ld-frv/tls-relax-shared-1.d: Likewise.
+ * ld-frv/tls-relax-shared-2.d: Likewise.
+ * ld-frv/tls-relax-shared-3.d: Likewise.
+ * ld-frv/tls-relax-static-1.d: Likewise.
+ * ld-frv/tls-shared-1.d: Likewise.
+ * ld-frv/tls-shared-2.d: Likewise.
+ * ld-frv/tls-shared-3.d: Likewise.
+ * ld-frv/tls-static-1.d: Likewise.
+ * ld-frv/tls-static-3.d: Likewise.
+ * ld-i386/tlsbin.rd: Likewise.
+ * ld-i386/tlsnopic.rd: Likewise.
+ * ld-i386/tlspic.rd: Likewise.
+ * ld-ia64/tlsbin.dd: Likewise.
+ * ld-ia64/tlsbin.rd: Likewise.
+ * ld-ia64/tlspic.dd: Likewise.
+ * ld-ia64/tlspic.rd: Likewise.
+ * ld-powerpc/tlsexe.g: Likewise.
+ * ld-powerpc/tlsexe.r: Likewise.
+ * ld-powerpc/tlsexe32.d: Likewise.
+ * ld-powerpc/tlsexe32.g: Likewise.
+ * ld-powerpc/tlsexe32.r: Likewise.
+ * ld-powerpc/tlsexetoc.g: Likewise.
+ * ld-powerpc/tlsexetoc.r: Likewise.
+ * ld-powerpc/tlsso.g: Likewise.
+ * ld-powerpc/tlsso.r: Likewise.
+ * ld-powerpc/tlsso32.d: Likewise.
+ * ld-powerpc/tlsso32.g: Likewise.
+ * ld-powerpc/tlsso32.r: Likewise.
+ * ld-powerpc/tlstocso.g: Likewise.
+ * ld-powerpc/tlstocso.r: Likewise.
+ * ld-s390/tlsbin.rd: Likewise.
+ * ld-s390/tlsbin_64.rd: Likewise.
+ * ld-s390/tlspic.rd: Likewise.
+ * ld-s390/tlspic_64.rd: Likewise.
+ * ld-sh/shared-1.d: Likewise.
+ * ld-sh/tlsbin-2.d: Likewise.
+ * ld-sh/tlsbin-3.d: Likewise.
+ * ld-sh/tlsbin-4.d: Likewise.
+ * ld-sh/tlspic-2.d: Likewise.
+ * ld-sh/sh64/abi32.xd: Likewise.
+ * ld-sh/sh64/abi64.xd: Likewise.
+ * ld-sh/sh64/cmpct1.xd: Likewise.
+ * ld-sh/sh64/crange1.rd: Likewise.
+ * ld-sh/sh64/crange2.rd: Likewise.
+ * ld-sh/sh64/crange3-cmpct.rd: Likewise.
+ * ld-sh/sh64/crange3-media.rd: Likewise.
+ * ld-sh/sh64/crange3.rd: Likewise.
+ * ld-sh/sh64/gotplt.d: Likewise.
+ * ld-sh/sh64/init-cmpct.d: Likewise.
+ * ld-sh/sh64/init-media.d: Likewise.
+ * ld-sh/sh64/init64.d: Likewise.
+ * ld-sh/sh64/mix1.xd: Likewise.
+ * ld-sh/sh64/mix2.xd: Likewise.
+ * ld-sh/sh64/sh64.exp: Likewise.
+ * ld-sh/sh64/shdl32.xd: Likewise.
+ * ld-sh/sh64/shdl64.xd: Likewise.
+ * ld-sparc/tlssunbin32.rd: Likewise.
+ * ld-sparc/tlssunbin64.rd: Likewise.
+ * ld-sparc/tlssunnopic32.rd: Likewise.
+ * ld-sparc/tlssunnopic64.rd: Likewise.
+ * ld-sparc/tlssunpic32.rd: Likewise.
+ * ld-sparc/tlssunpic64.rd: Likewise.
+ * ld-x86-64/tlsbin.rd: Likewise.
+ * ld-x86-64/tlspic.dd: Likewise.
+ * ld-x86-64/tlspic.rd: Likewise.
+
+2005-08-15 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/empty.s: Define "start".
+ * ld-elf/merge2.d: xfail arc-*-* and dlx-*-*.
+ * ld-scripts/empty-aligned.s: No .data section.
+ * ld-scripts/empty-aligned.t: Discard most sections.
+ * ld-scripts/empty-aligned.d: Adjust.
+
+2005-08-11 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/expdyn1.s (expobj): Set size here, at definition...
+ * ld-cris/pv32.s: ...not here.
+ * ld-cris/expdyn1.d, ld-cris/libdso-12.d, ld-cris/locref1.d:
+ Adjust for expobj size being set at definition.
+
+ * ld-cris/v32-ba-1.d: Regexpize to adjust for symbol change.
+
+2005-08-08 Richard Earnshaw <richard.earnshaw@arm.com>
+
+ * ld-arm/mixed-app.sym: Expact _stack to be in the ABS section.
+ * ld-arm/mixed-lib.sym: Likewise.
+ * tls-lib.d: Use a regexp for the address locations.
+ * tls-lib.r: Likewise.
+
+2005-08-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-i386/pcrel16.d: Updated.
+ * ld-i386/pcrel16.s: Likewise.
+ * ld-x86-64/pcrel16.d: Likewise.
+
+2005-08-01 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips/mips-elf-flags.exp: Add more good_combination tests.
+
+2005-07-28 Ben Elliston <bje@gnu.org>
+
+ * lib/ld-lib.exp (run_ld_link_exec_tests): Add new parameter
+ ${targets_to_xfail} that is applied for each test item.
+ * ld-elf/elf.exp: Pass *-*-netbsdelf* as an xfailed target.
+
+2005-07-27 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elfweak/size2a.s: Extend test to check size for two weaks.
+ * ld-elfweak/size2b.s: Likewise.
+ * ld-elfweak/size2.d: Update.
+
+2005-07-18 Jan Beulich <jbeulich@novell.com>
+
+ * ld-i386/abs.s, ld-i386/zero.s, ld-i386/abs.d, ld-x86-64/abs.d,
+ ld-i386/pcrel16.s, ld-i386/pcrel16.d, ld-x86-64/pcrel16.d,
+ ld-i386/pcrel8.s, ld-i386/pcrel8.d, ld-x86-64/pcrel8.d: New.
+ * ld-i386/i386.exp, ld-x86-64/x86-64.exp: Run new tests.
+
+2005-07-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ * lib/ld-lib.exp (run_ld_link_exec_tests): Ignore assembler
+ warnings.
+
+2005-07-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ * lib/ld-lib.exp (run_ld_link_exec_tests): Update comments.
+
+2005-07-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/elf.exp (array_tests): New.
+ Call run_ld_link_exec_tests with array_tests.
+
+ * ld-elf/fini.c: New file.
+ * ld-elf/fini.out: Likewise.
+ * ld-elf/init.c: Likewise.
+ * ld-elf/init.out: Likewise.
+ * ld-elf/preinit.c: Likewise.
+ * ld-elf/preinit.out: Likewise.
+
+ * lib/ld-lib.exp (run_ld_link_exec_tests): New.
+
+2005-07-12 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/sdalib.s (lib_var): Size it.
+
+2005-07-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-ia64/tlsbin.rd: Update for empty section removal change.
+ * ld-ia64/tlsbin.sd: Likewise.
+ * ld-ia64/tlspic.dd: Likewise.
+ * ld-ia64/tlspic.rd: Likewise.
+ * ld-ia64/tlspic.sd: Likewise.
+ * ld-x86-64/tlspic.dd: Likewise.
+ * ld-x86-64/tlspic.rd: Likewise.
+
+2005-07-08 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-cris/pv32.s: Give expobj a size.
+ * ld-cris/pv32-1.d: Update.
+ * ld-alpha/tlsbin.dd: Update for empty section removal change.
+ * ld-alpha/tlsbin.sd: Likewise.
+ * ld-alpha/tlsbin.td: Likewise.
+ * ld-alpha/tlsbinr.dd: Likewise.
+ * ld-alpha/tlsbinr.rd: Likewise.
+ * ld-alpha/tlspic.dd: Likewise.
+ * ld-alpha/tlspic.rd: Likewise.
+ * ld-alpha/tlspic.sd: Likewise.
+ * ld-alpha/tlspic.td: Likewise.
+ * ld-arm/tls-lib.d: Likewise.
+ * ld-arm/tls-lib.r: Likewise.
+ * ld-cris/gotplt2.d: Likewise.
+ * ld-cris/gotplt3.d: Likewise.
+ * ld-cris/hiddef1.d: Likewise.
+ * ld-cris/libdso-10.d: Likewise.
+ * ld-cris/libdso-11.d: Likewise.
+ * ld-cris/libdso-12.d: Likewise.
+ * ld-cris/libdso-14.d: Likewise.
+ * ld-cris/libdso-2.d: Likewise.
+ * ld-i386/tlsnopic.dd: Likewise.
+ * ld-i386/tlsnopic.rd: Likewise.
+ * ld-i386/tlsnopic.sd: Likewise.
+ * ld-i386/tlspic.rd: Likewise.
+ * ld-mmix/bpo-10.d: Likewise.
+ * ld-mmix/bpo-22.d: Likewise.
+ * ld-mmix/sec-7m.d: Likewise.
+ * ld-powerpc/tlsexe.r: Likewise.
+ * ld-powerpc/tlsexetoc.r: Likewise.
+ * ld-powerpc/tlsso.g: Likewise.
+ * ld-powerpc/tlsso.r: Likewise.
+ * ld-powerpc/tlsso32.d: Likewise.
+ * ld-powerpc/tlsso32.g: Likewise.
+ * ld-powerpc/tlsso32.r: Likewise.
+ * ld-powerpc/tlstocso.g: Likewise.
+ * ld-powerpc/tlstocso.r: Likewise.
+
+2005-06-23 Andreas Schwab <schwab@suse.de>
+
+ * ld-elfweak/size_foo.c (foo): Fix warning about implicit return
+ type.
+
+2005-06-10 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-cris/libdso-10.d: Adjust for elf.sc .bss change.
+ * ld-cris/libdso-2.d: Likewise.
+ * ld-mmix/loc6.d: Likewise.
+
+2005-06-10 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-scripts/empty-aligned.t: Adjust alignment expressions so
+ that no .text? section is kept. Also check setting vma and
+ lma.
+ * ld-scripts/empty-aligned.d: Update.
+
+2005-06-09 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-scripts/empty-aligned.d: Adjust.
+
+2005-06-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-cris/hiddef1.d: Undo the last change.
+ * ld-cris/libdso-10.d: Likewise.
+ * ld-cris/libdso-2.d: Likewise.
+
+2005-06-04 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-cris/hiddef1.d: Updated.
+ * ld-cris/libdso-10.d: Likewise.
+ * ld-cris/libdso-2.d: Likewise.
+
+2005-06-02 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/powerpc.exp (ppcelftests): Assemble sda test with -a32.
+
+2005-05-31 Zack Weinberg <zack@codesourcery.com>
+
+ * ld-scripts/align.exp: Mark align1 XFAIL on PECOFF targets.
+ * ld-scripts/data.exp: Mark data UNSUPPORTED on a.out targets.
+ * ld-scripts/provide.exp, ld-scripts/size.exp: Mark all tests
+ UNSUPPORTED on a.out targets. Tidy.
+
+2005-05-27 Mark Mitchell <mark@codesourcery.com>
+
+ * config/default.exp (CC): Use find_gcc.
+ (CFLAGS): Define, if no definition has been provided by the user.
+ (CXX): Likewise.
+ (CXXFLAGS): Likewise.
+
+2005-05-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-mmix/bpo-6.d: Updated.
+ * ld-mmix/bpo-19.d: Likewise.
+
+2005-05-22 Richard Henderson <rth@redhat.com>
+
+ * ld-elfweak/dsow.dsym: Adjust for non-zero ST_OTHER.
+ * ld-elfweak/weak.dsym: Likewise.
+
+ * ld-selective/selective.exp: Don't test alpha.
+
+2005-05-20 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-powerpc/sdalib.s, ld-powerpc/sdadyn.s, ld-powerpc/sdadyn.d: New
+ files.
+ * ld-powerpc/powerpc.exp: Run the new test.
+
+2005-05-20 Bob Wilson <bob.wilson@acm.org>
+
+ * ld-undefined/undefined.exp: Revert xfail for xtensa-*-*.
+
+2005-05-17 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR 797
+ * empty-aligned.d: New file.
+ * empty-aligned.exp: Likewise.
+ * empty-aligned.s: Likewise.
+ * empty-aligned.t: Likewise.
+
+2005-05-11 Bob Wilson <bob.wilson@acm.org>
+
+ * ld-undefined/undefined.exp: xfail xtensa-*-*.
+
+2005-05-07 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlsexe32.d: Update for changed got layout.
+ * ld-powerpc/tlsexe32.g: Likewise.
+ * ld-powerpc/tlsexe32.r: Likewise.
+ * ld-powerpc/tlsso32.d: Likewise.
+ * ld-powerpc/tlsso32.g: Likewise.
+ * ld-powerpc/tlsso32.r: Likewise.
+
+2005-05-06 Nick Clifton <nickc@redhat.com>
+
+ Update the address and phone number of the FSF organization in
+ the GPL notices in the following files:
+ * config/default.exp, ld-alpha/alpha.exp, ld-arm/arm-elf.exp,
+ ld-auto-import/auto-import.exp, ld-bootstrap/bootstrap.exp,
+ ld-cdtest/cdtest.exp, ld-checks/checks.exp, ld-cris/cris.exp,
+ ld-crx/crx.exp, ld-cygwin/exe-export.exp, ld-d10v/d10v.exp,
+ ld-discard/discard.exp, ld-elf/elf.exp, ld-elf/exclude.exp,
+ ld-elf/frame.exp, ld-elf/sec64k.exp, ld-elfcomm/elfcomm.exp,
+ ld-elfvers/vers.exp, ld-elfvsb/elfvsb.exp, ld-elfweak/elfweak.exp,
+ ld-fastcall/fastcall.exp, ld-frv/fdpic.exp, ld-frv/tls.exp,
+ ld-h8300/h8300.exp, ld-i386/i386.exp, ld-ia64/ia64.exp,
+ ld-linkonce/linkonce.exp, ld-m68hc11/m68hc11.exp,
+ ld-maxq/maxq.exp, ld-mips-elf/mips-elf-flags.exp,
+ ld-mips-elf/mips-elf.exp, ld-mmix/mmix.exp, ld-pe/pe.exp,
+ ld-powerpc/powerpc.exp, ld-s390/s390.exp, ld-scripts/align.exp,
+ ld-scripts/assert.exp, ld-scripts/crossref.exp,
+ ld-scripts/data.exp, ld-scripts/defined.exp,
+ ld-scripts/empty-orphan.exp, ld-scripts/map-address.exp,
+ ld-scripts/overlay-size.exp, ld-scripts/phdrs.exp,
+ ld-scripts/phdrs2.exp, ld-scripts/provide.exp,
+ ld-scripts/script.exp, ld-scripts/size.exp, ld-scripts/sizeof.exp,
+ ld-scripts/sort.exp, ld-scripts/weak.exp,
+ ld-selective/sel-dump.exp, ld-selective/selective.exp,
+ ld-sh/rd-sh.exp, ld-sh/arch/arch.exp, ld-sh/sh64/rd-sh64.exp,
+ ld-sh/sh64/relax.exp, ld-sh/sh64/relfail.exp, ld-sh/sh64/sh64.exp,
+ ld-shared/shared.exp, ld-sparc/sparc.exp,
+ ld-undefined/undefined.exp, ld-undefined/weak-undef.exp,
+ ld-versados/versados.exp, ld-x86-64/x86-64.exp,
+ ld-xstormy16/xstormy16.exp, ld-xtensa/coalesce.exp,
+ ld-xtensa/lcall.exp, lib/ld-lib.exp
+
+2005-05-05 Mike Frysinger <vapier@gentoo.org>
+
+ * ld-srec/srec.exp: Replace linux-gnu with linux-* to allow for
+ versions of Linux which do not use glibc.
+ * ld-sh/sh.exp: Likewise
+
+2005-05-05 Paul Brook <paul@codesourcery.com>
+
+ * lib/ld-lib.exp (regexp_diff): Pass test if last line is "#...".
+ * ld-elfweak/elfweak.exp: Run size2.d.
+ * ld-elfweak/size2.d: New file.
+ * ld-elfweak/size2a.s: New file.
+ * ld-elfweak/size2b.s: New file.
+
+2005-04-26 Mark Kettenis <kettenis@gnu.org>
+
+ * ld-fastcall/fastcall.exp: Don't run on i*86-*-openbsd*.
+
+ * ld-srec/srec.exp (run_srec_test): Deal with ProPolice on
+ *-*-openbsd*.
+
+2005-04-25 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-discard/extern.d: Expect error.
+ * ld-discard/start.d: Likewise.
+ * ld-discard/static.d: Likewise.
+
+2005-04-19 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/reloc.d: Update to suit removal of non-alloc relocs.
+
+2005-04-15 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-d10v/default_layout.d: Update for unused section removal.
+
+2005-04-14 David S. Miller <davem@davemloft.net>
+
+ * ld-selective/sel-dump.exp: Do not exclude sparc64-*.
+ * ld-selective/selective.exp: Likewise.
+ * ld-sparc/sparc.exp: Add {32,64}-bit prefix to test
+ names so we know which one is failing. Run sparc64 TLS
+ tests on multi-arch sparc platforms.
+ * ld-sparc/tls64.sd, ld-sparc/tlssunbin64.dd,
+ ld-sparc/tlssunbin64.rd, ld/ld-sparc/tlssunbin64.sd,
+ ld-sparc/tlssunbin64.td, ld-sparc/tlssunnopic64.dd,
+ ld-sparc/tlssunnopic64.rd, ld-sparc/tlssunnopic64.sd,
+ ld-sparc/tlssunpic64.dd, ld-sparc/tlssunpic64.rd,
+ ld-sparc/tlssunpic64.sd, ld-sparc/tlssunpic64.td): Update now
+ that sparc64 ELF does support TLS.
+
+2005-04-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/empty.d: New file.
+ * ld-elf/empty.s: Likewise.
+
+2005-04-11 David S. Miller <davem@davemloft.net>
+
+ * ld-sparc/tlssunbin32.dd: Update for TLS relocation fixes.
+ * ld-sparc/tlssunbin32.rd: Likewise.
+ * ld-sparc/tlssunbin32.sd: Likewise.
+ * ld-sparc/tlssunpic32.dd: Likewise.
+
+2005-03-30 Julian Brown <julian@codesourcery.com>
+
+ * ld-arm/arm-app-abs32.d: Update expected output due to mapping symbols
+ being untyped.
+ * ld-arm/arm-app.d: Likewise.
+ * ld-arm/mixed-app.d: Likewise.
+
+2005-03-29 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-arm/tls-lib.s, ld-arm/tls-lib.d, ld-arm/tls-lib.r,
+ ld-arm/tls-app.s, ld-arm/tls-app.d, ld-arm/tls-app.r: New files.
+ * ld-arm/arm-lib.ld, ld-arm/arm-dyn.ld: Increase data segment
+ alignment.
+ * ld-arm/arm-elf.exp: Run TLS tests.
+
+2005-03-28 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR 803
+ * ld-ia64/ia64.exp: Pass -mtune=itanium1 to as.
+
+2005-03-24 Mark Mitchell <mark@codesourcery.com>
+
+ * config/default.exp: Do not load libpath.exp if it does not
+ exist.
+ (CC): Provide fallback definition.
+
+2005-03-24 Eric Christopher <echristo@redhat.com>
+
+ * ld-mips-elf/rel32-n32.d: Revert changes.
+ * ld-mips-elf/rel32-o32.d: Ditto.
+ * ld-mips-elf/rel64.d: Ditto.
+
+2005-03-23 Eric Christopher <echristo@redhat.com>
+
+ * ld-mips-elf/textrel-1.s, ld-mips-elf/textrel-1.d: New
+ test.
+ * ld-mips-elf/mips-elf.exp: Call it.
+ * ld-mips-elf/rel32-n32.d: Update for DF_TEXTREL removal.
+ * ld-mips-elf/rel32-o32.d: Ditto.
+ * ld-mips-elf/rel64.d: Ditto.
+
+2005-03-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-cris/expdyn5.d: Updated for alignment change in elf.sc.
+ * ld-cris/expdyn6.d: Likewise.
+ * ld-cris/expdyn7.d: Likewise.
+ * ld-cris/gotplt1.d: Likewise.
+ * ld-cris/gotplt2.d: Likewise.
+ * ld-cris/gotplt3.d: Likewise.
+ * ld-cris/libdso-10.d: Likewise.
+ * ld-cris/libdso-11.d: Likewise.
+ * ld-cris/libdso-12.d: Likewise.
+ * ld-cris/libdso-14.d: Likewise.
+ * ld-cris/libdso-2.d: Likewise.
+ * ld-cris/locref1.d: Likewise.
+ * ld-cris/locref2.d: Likewise.
+ * ld-cris/nodyn5.d: Likewise.
+ * ld-cris/pv32-1.d: Likewise.
+ * ld-cris/weakref2.d: Likewise.
+
+2005-03-23 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/tbss.s: Don't start directives in first column.
+ * ld-scripts/weak1.s: Likewise.
+ * ld-scripts/weak2.s: Likewise.
+ * ld-undefined/weak-undef.s: Likewise.
+ * ld-undefined/undefined.exp: Enable tests for hppa-elf.
+
+2005-03-22 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlsexe32.r: Update.
+ * ld-powerpc/tlsso32.d: Update.
+ * ld-powerpc/tlsso32.g: Update.
+ * ld-powerpc/tlsso32.r: Update.
+
+2005-03-21 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlsexe.r: Update.
+ * ld-powerpc/tlsexetoc.r: Update.
+ * ld-powerpc/tlsso.r: Update.
+ * ld-powerpc/tlstocso.r: Update.
+
+2005-03-20 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-mmix/bpo-1.d: Updated for empty section removal.
+ * ld-mmix/bpo-10.d: Likewise.
+ * ld-mmix/bpo-11.d: Likewise.
+ * ld-mmix/bpo-14.d: Likewise.
+ * ld-mmix/bpo-16.d: Likewise.
+ * ld-mmix/bpo-17.d: Likewise.
+ * ld-mmix/bpo-18.d: Likewise.
+ * ld-mmix/bpo-19.d: Likewise.
+ * ld-mmix/bpo-2.d: Likewise.
+ * ld-mmix/bpo-3.d: Likewise.
+ * ld-mmix/bpo-4.d: Likewise.
+ * ld-mmix/bpo-5.d: Likewise.
+ * ld-mmix/bpo-6.d: Likewise.
+ * ld-mmix/bpo-9.d: Likewise.
+ * ld-mmix/bspec1.d: Likewise.
+ * ld-mmix/bspec2.d: Likewise.
+ * ld-mmix/greg-1.d: Likewise.
+ * ld-mmix/greg-19.d: Likewise.
+ * ld-mmix/greg-2.d: Likewise.
+ * ld-mmix/greg-3.d: Likewise.
+ * ld-mmix/greg-4.d: Likewise.
+ * ld-mmix/greg-5.d: Likewise.
+ * ld-mmix/greg-5s.d: Likewise.
+ * ld-mmix/greg-6.d: Likewise.
+ * ld-mmix/greg-7.d: Likewise.
+ * ld-mmix/loc1.d: Likewise.
+ * ld-mmix/loc2.d: Likewise.
+ * ld-mmix/loc3.d: Likewise.
+ * ld-mmix/loc4.d: Likewise.
+ * ld-mmix/loc6.d: Likewise.
+ * ld-mmix/local1.d: Likewise.
+ * ld-mmix/local12.d: Likewise.
+ * ld-mmix/local3.d: Likewise.
+ * ld-mmix/local5.d: Likewise.
+ * ld-mmix/local7.d: Likewise.
+ * ld-mmix/locdo-1.d: Likewise.
+ * ld-mmix/loct-1.d: Likewise.
+ * ld-mmix/locto-1.d: Likewise.
+ * ld-mmix/start-1.d: Likewise.
+ * ld-mmix/undef-3.d: Likewise.
+
+2005-03-16 David Heine <dlheine@tensilica.com>
+ Bob Wilson <bob.wilson@acm.org>
+
+ * ld-scripts/empty-orphan.d, ld-scripts/empty-orphan.exp,
+ ld-scripts/empty-orphan.s, ld-scripts/emtpy-orphan.t: New test.
+
+2005-03-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-cris/hiddef1.d: Updated for empty section removal.
+ * ld-cris/libdso-10.d: Likewise.
+ * ld-cris/libdso-2.d: Likewise.
+
+2005-03-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-alpha/tlsbin.rd: Updated for empty section removal.
+ * ld-alpha/tlsbinr.rd: Likewise.
+ * ld-alpha/tlspic.rd: Likewise.
+ * ld-arm/mixed-lib.sym: Likewise.
+ * ld-i386/tlsbin.rd: Likewise.
+ * ld-i386/tlsnopic.rd: Likewise.
+ * ld-i386/tlspic.rd: Likewise.
+ * ld-ia64/tlsbin.rd: Likewise.
+ * ld-ia64/tlspic.rd: Likewise.
+ * ld-powerpc/apuinfo.rd: Likewise.
+ * ld-powerpc/powerpc.exp: Likewise.
+ * ld-powerpc/tlsexe32.r: Likewise.
+ * ld-s390/tlsbin.rd: Likewise.
+ * ld-s390/tlsbin_64.rd: Likewise.
+ * ld-s390/tlspic.rd: Likewise.
+ * ld-s390/tlspic_64.rd: Likewise.
+ * ld-sh/tlsbin-2.d: Likewise.
+ * ld-sh/tlspic-2.d: Likewise.
+ * ld-sparc/tlssunbin32.rd: Likewise.
+ * ld-sparc/tlssunnopic32.rd: Likewise.
+ * ld-sparc/tlssunpic32.rd: Likewise.
+ * ld-x86-64/tlsbin.rd: Likewise.
+ * ld-x86-64/tlspic.rd: Likewise.
+
+2005-03-16 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlsexe32.d: Update.
+ * ld-powerpc/tlsexe32.g: Update.
+ * ld-powerpc/tlsexe32.r: Update.
+ * ld-powerpc/tlsexe32.t: Update.
+ * ld-powerpc/tlsso32.d: Update.
+ * ld-powerpc/tlsso32.g: Update.
+ * ld-powerpc/tlsso32.r: Update.
+ * ld-powerpc/tlsso32.t: Update.
+
+2005-03-08 Hans-Peter Nilsson <hp@axis.com>
+
+ Adjust testsuite for cris-axis-aout.
+ * ld-cris/noglob1.d: Adjust regexp for a.out output.
+ * ld-cris/badgotr1.d, ld-cris/expdyn1.d, ld-cris/expdyn2.d,
+ ld-cris/expdyn3.d, ld-cris/expdyn4.d, ld-cris/expdyn5.d,
+ ld-cris/expdyn6.d, ld-cris/expdyn7.d, ld-cris/gotplt1.d,
+ ld-cris/gotplt2.d, ld-cris/gotplt3.d, ld-cris/hiddef1.d,
+ ld-cris/libdso-1.d, ld-cris/libdso-10.d, ld-cris/libdso-11.d,
+ ld-cris/libdso-12.d, ld-cris/libdso-13.d, ld-cris/libdso-14.d,
+ ld-cris/libdso-2.d, ld-cris/libdso-3.d, ld-cris/libdso-4.d,
+ ld-cris/locref1.d, ld-cris/locref2.d, ld-cris/nodyn4.d,
+ ld-cris/nodyn5.d, ld-cris/pv32-1.d, ld-cris/undef1.d,
+ ld-cris/weakref1.d: ld-cris/weakref2.d: Pass --em=criself to gas.
+ * ld-cris/v10-v32.d, ld-cris/v10-va.d, ld-cris/v32-ba-1.d,
+ ld-cris/v32-v10.d, ld-cris/v32-va.d, ld-cris/va-v10.d,
+ ld-cris/va-v32.d: Ditto. Pass -m criself to gld.
+ * ld-cris/v32-bin-1.d: Pass -m criself to gld.
+
+2005-03-05 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-alpha/tlsbin.dd: Update to suit changed section layout and
+ removed section symbols.
+ * ld-alpha/tlsbin.rd: Likewise.
+ * ld-alpha/tlsbin.sd: Likewise.
+ * ld-alpha/tlsbinr.dd: Likewise.
+ * ld-alpha/tlsbinr.rd: Likewise.
+ * ld-alpha/tlspic.dd: Likewise.
+ * ld-alpha/tlspic.rd: Likewise.
+ * ld-alpha/tlspic.sd: Likewise.
+
+ * ld-powerpc/tlsexe.g: Update for removed dot-symbols.
+ * ld-powerpc/tlsexe.r: Likewise.
+ * ld-powerpc/tlsexetoc.g: Likewise.
+ * ld-powerpc/tlsexetoc.r: Likewise.
+
+2005-03-04 David Daney <ddaney@avtrex.com>
+
+ * ld-mips-elf/multi-got-no-shared-1.s,
+ ld-mips-elf/multi-got-no-shared-2.s,
+ ld-mips-elf/multi-got-no-shared.d: New tests.
+ * ld-mips-elf/mips-elf.exp: Run them.
+
+2005-03-02 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-mips-elf/tlsbin-o32.s, ld-mips-elf/mips-dyn.ld,
+ ld-mips-elf/tlslib-o32.got, ld-mips-elf/tlslib-o32.d,
+ ld-mips-elf/tlslib-o32.s, ld-mips-elf/mips-lib.ld,
+ ld-mips-elf/tlsbin-o32.got, ld-mips-elf/tlsdyn-o32.d,
+ ld-mips-elf/tlsdyn-o32.got, ld-mips-elf/tlsbin-o32.d,
+ ld-mips-elf/tlsdyn-o32.s, ld-mips-elf/tls-multi-got-1.got,
+ ld-mips-elf/tls-multi-got-1-1.s, ld-mips-elf/tls-multi-got-1.d,
+ ld-mips-elf/tls-multi-got-1.r, ld-mips-elf/tls-multi-got-1-2.s,
+ ld-mips-elf/tlslib-o32-ver.got, ld-mips-elf/tlslib.ver,
+ ld-mips-elf/tlslib-o32-hidden.got, ld-mips-elf/tlslib-hidden.ver,
+ ld-mips-elf/tlsdyn-o32-1.d, ld-mips-elf/tlsdyn-o32-3.got,
+ ld-mips-elf/tlsdyn-o32-2.d, ld-mips-elf/tlsdyn-o32-2.s,
+ ld-mips-elf/tlsdyn-o32-3.d, ld-mips-elf/tlsdyn-o32-1.got,
+ ld-mips-elf/tlsdyn-o32-2.got: New files.
+ * ld-mips-elf/mips-elf.exp: Run the new tests.
+
+2005-03-01 Nick Clifton <nickc@redhat.com>
+
+ * ld-d10v/default_layout.d: Adjust expected offsets to allow for
+ section alignment.
+
+ * ld-discard/extern.d: Adjust expected warning to take into
+ account the fact that the linker's name might be included and that
+ the reloc might have been adjusted to be against the section
+ symbol.
+
+2005-02-22 Eric Christopher <echristo@redhat.com>
+
+ * ld-mips-elf/reloc-merge-lo16.d: Correct symbol
+ table size for __start.
+
+2005-02-22 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-elfvsb/hidden2.d: Expect OBJECT.
+ * ld-elfvsb/hidden2.s: Force type OBJECT.
+ * ld-elfvsb/hidden2.ld: Place .dynamic explicitly.
+ * ld-elf/start.s: Provide __start for MIPS.
+ * ld-elfcomm/elfcomm.exp: Accept MIPS common section. XFAIL size change
+ test.
+ * ld-elf/warn1.d: Use group.ld instead of -Ttext.
+
+2005-02-21 Alan Modra <amodra@bigpond.net.au>
+
+ * lib/ld-lib.exp (run_dump_test): Don't require a dump program if
+ #warning given. Rearrange to allow $program to remain unset.
+ Don't allow gas errors. Append objcopy_as_link output to that
+ from the linker before testing against expected output. Fail the
+ test if warning not found when expected. Conversely fail the
+ test if ld errors or warnings given when not expected.
+
+2005-02-21 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/exclude1.s: Use ".dc.a".
+ * ld-elfvsb/hidden2.s: Likewise.
+
+2005-02-21 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/warn1.d: Specify -Ttext.
+ * ld-scripts/align.exp (align2a, align2b: Don't run on aout targets.
+ * ld-scripts/align2.t: Discard all but .text and .data.
+ * ld-scripts/align2a.d: Accept non-readonly for coff.
+ * ld-scripts/align2b.d: Likewise.
+ * lib/ld-lib.exp (is_aout_format): New function.
+
+2005-02-18 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-scripts/align2a.d: Don't assume anything about section
+ padding or alignment, or max page size. Allow 64-bit addresses.
+ * ld-scripts/align2b.d: Likewise.
+
+2005-02-17 Zack Weinberg <zack@codesourcery.com>
+
+ * ld-scripts/align.exp: Rename existing "ALIGN" test to "align1".
+ Add dump tests "align2a", "align2b", "align2c".
+ * ld-scripts/align2.t, ld-scripts/align2a.s, ld-scripts/align2a.d
+ * ld-scripts/align2b.s, ld-scripts/align2b.d
+ * ld-scripts/align2c.s, ld-scripts/align2c.d: New files.
+
+2005-02-17 Alexandre Oliva <aoliva@redhat.com>
+
+ * ld-frv/fdpic-static-6.d: Update.
+ * ld-frv/fdpic*.d: Remove explicit -mfdpic from #as. Update
+ spelling of errors and warnings.
+
+2005-02-15 Nigel Stephens <nigel@mips.com>
+ Maciej W. Rozycki <macro@mips.com>
+
+ * ld-mips-elf/mips16-hilo.d: New test for the R_MIPS16_HI16 and
+ R_MIPS16_LO16 relocs.
+ * ld-mips-elf/mips16-hilo-n32.d: Likewise, for the n32 ABI.
+ * ld-mips-elf/mips16-hilo.s: Auxiliary source for the new tests.
+ * ld-mips-elf/mips-elf.exp: Run the new tests.
+
+2005-02-14 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * ld-sparc/sparc.exp: Enable on Solaris. Disable 32-bit tests
+ on sparc64-elf.
+
+2005-02-13 Jan Beulich <jbeulich@novell.com>
+
+ * ld-elfvers/vers.exp (as_options): New. Set to -x for ia64.
+ (build_binary): Pass as_options to ld_assemble.
+ (test_ldfail): Likewise.
+ (build_exec): Likewise.
+ Pass as_options to run_ld_link_tests.
+ * ld-ia64/tlsbin.s: Add .explicit.
+ * ld-ia64/tlsbinpic.s: Likewise.
+ * ld-ia64/tlspic1.s: Likewise.
+
+2005-02-13 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * ld-sparc/tlssunnopic32.rd: Adjust for .dynsym changes.
+ * ld-sparc/tlssunpic32.rd: Likewise.
+
+2005-02-13 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * ld-elf/warn1.d: Do not run on sparc64-*-solaris2*.
+
+2005-02-11 Paul Brook <paul@codesourcery.com>
+
+ * ld-elf/symbol1w.s: Avoid using @function syntax.
+
+2005-02-12 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elfvsb/hidden2.s: Replace .word with .long.
+
+2005-02-10 Paul Brook <paul@codesourcery.com>
+
+ * ld-elfvsb/hidden2.s: New file
+ * ld-elfvsb/hidden2.d: New file
+ * ld-elfvsb/hidden2.ld: New file
+
+2005-02-07 Alexandre Oliva <aoliva@redhat.com>
+
+ * ld-frv/fdpic-shared-8-fail.d: Tweak error messages.
+
+2005-02-07 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/libdso-13.d: Adjust for being identified as warning.
+
+ * ld-cris/globsymw2.s: New file.
+ * ld-cris/warn3.d, ld-cris/warn4.d: New tests.
+
+ * ld-discard/extern.d, ld-discard/start.d, ld-discard/static.d:
+ Adjust for being identified as warnings.
+
+ * ld-cris/stabs1.s: New file.
+ * ld-cris/undef2.d, ld-cris/undef3.d: New tests.
+
+ * ld-elf/start.s, ld-elf/symbolref.s, ld-elf/symbol1w.s,
+ ld-elf/warn1.d: New test.
+
+ * lib/ld-lib.exp: Support new directive "warning".
+
+2005-02-02 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-mips-elf/eh-frame3.d, ld-mips-elf/eh-frame4.d: Move comments
+ after test commands.
+ * ld-mips-elf/mips-elf.exp: Skip multi-got-1 on non-GNU/Linux
+ systems.
+
+2005-02-01 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlsso.r: Update.
+ * ld-powerpc/tlstocso.r: Update.
+
+2005-01-31 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-mips-elf/elf-rel-got-n32.d, ld-mips-elf/elf-rel-got-n64-linux.d,
+ ld-mips-elf/elf-rel-got-n64.d, ld-mips-elf/elf-rel-xgot-n32.d,
+ ld-mips-elf/elf-rel-xgot-n64-linux.d, ld-mips-elf/elf-rel-xgot-n64.d,
+ ld-mips-elf/jalbal.d: Force big-endian.
+ * ld-mips-elf/multi-got-1.d: Make more flexible.
+ * ld-mips-elf/rel32-n32.d, ld-mips-elf/rel32-o32.d,
+ ld-mips-elf/rel64.d: Update offsets.
+
+2005-01-31 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-elf/group1.d: Accept OBJECT symbols.
+
+2005-01-31 Richard Sandiford <rsandifo@redhat.com>
+
+ * ld-mips-elf/eh-frame1.s: Create a .gcc_compiled_long32 if using
+ 32-bit pointers.
+ * ld-mips-elf/eh-frame1.d: Link in .gcc_compiled_long32 sections.
+ * ld-mips-elf/eh-frame[34].d: New tests.
+ * ld-mips-elf/mips-elf.exp: Run them.
+
+2005-01-28 Jan Beulich <jbeulich@novell.com>
+
+ * ld/ia64/tlsbin.[rt]d: Widen expected offset/size ranges.
+ * ld/ia64/tlspic.[rt]d: Likewise.
+
+2005-01-25 Alexandre Oliva <aoliva@redhat.com>
+
+ * ld-frv/fdpic.exp: Add -mfdpic to ASFLAGS.
+ * ld-frv/tls.exp: Likewise.
+ 2004-11-26 Alexandre Oliva <aoliva@redhat.com>
+ * ld-frv/tls-3.s: New.
+ * ld-frv/tls-static-3.d: New.
+ * ld-frv/tls-dynamic-3.d: New.
+ * ld-frv/tls-pie-3.d: New.
+ * ld-frv/tls-shared-3.d: New.
+ * ld-frv/tls-relax-static-3.d: New.
+ * ld-frv/tls-relax-dynamic-3.d: New.
+ * ld-frv/tls-relax-pie-3.d: New.
+ * ld-frv/tls-relax-shared-3.d: New.
+ * ld-frv/tls.exp: Run the new tests.
+ * ld-frv/tls-dynamic-2.d: Adjust for improved relaxation.
+ * ld-frv/tls-relax-dynamic-2.d: Likewise.
+ * ld-frv/tls-relax-initial-shared-2.d: Likewise.
+ 2004-11-10 Alexandre Oliva <aoliva@redhat.com>
+ * ld-frv/tls-1-dep.s: New.
+ * ld-frv/tls-1-shared.lds: New.
+ * ld-frv/tls-1.s: New.
+ * ld-frv/tls-2.s: New.
+ * ld-frv/tls-dynamic-1.d: New.
+ * ld-frv/tls-dynamic-2.d: New.
+ * ld-frv/tls-initial-shared-2.d: New.
+ * ld-frv/tls-pie-1.d: New.
+ * ld-frv/tls-relax-dynamic-1.d: New.
+ * ld-frv/tls-relax-dynamic-2.d: New.
+ * ld-frv/tls-relax-initial-shared-2.d: New.
+ * ld-frv/tls-relax-pie-1.d: New.
+ * ld-frv/tls-relax-shared-1.d: New.
+ * ld-frv/tls-relax-shared-2.d: New.
+ * ld-frv/tls-relax-static-1.d: New.
+ * ld-frv/tls-shared-1-fail.d: New.
+ * ld-frv/tls-shared-1.d: New.
+ * ld-frv/tls-shared-2.d: New.
+ * ld-frv/tls-static-1.d: New.
+ * ld-frv/tls.exp: New.
+ * ld-frv/fdpic-pie-1.d: Adjust for 64-bit host.
+ * ld-frv/fdpic-pie-2.d: Likewise.
+ * ld-frv/fdpic-pie-6.d: Likewise.
+ * ld-frv/fdpic-pie-7.d: Likewise.
+ * ld-frv/fdpic-pie-8.d: Likewise.
+ * ld-frv/fdpic-shared-1.d: Likewise.
+ * ld-frv/fdpic-shared-2.d: Likewise.
+ * ld-frv/fdpic-shared-3.d: Likewise.
+ * ld-frv/fdpic-shared-4.d: Likewise.
+ * ld-frv/fdpic-shared-5.d: Likewise.
+ * ld-frv/fdpic-shared-6.d: Likewise.
+ * ld-frv/fdpic-shared-7.d: Likewise.
+ * ld-frv/fdpic-shared-8.d: Likewise.
+ * ld-frv/fdpic-shared-local-2.d: Likewise.
+ * ld-frv/fdpic-shared-local-8.d: Likewise.
+ * ld-frv/fdpic-static-1.d: Likewise.
+ * ld-frv/fdpic-static-2.d: Likewise.
+ * ld-frv/fdpic-static-6.d: Likewise.
+ * ld-frv/fdpic-static-7.d: Likewise.
+ * ld-frv/fdpic-static-8.d: Likewise.
+
+2005-01-17 Richard Sandiford <rsandifo@redhat.com>
+
+ * ld-mips-elf/eh-frame2-{n32,n64}.d: New tests.
+ * ld-mips-elf/mips-elf.exp: Run them.
+
+2005-01-17 Andrew Stubbs <andrew.stubbs@st.com>
+
+ * ld-sh/arch/arch.exp: Correct the email address.
+ Correct a few comment typos.
+ (test_arch,test_arch_error): Use 'ld -r' to avoid illegal
+ relocations killing the test.
+ * ld-sh/arch/arch_expected.txt: Update/Correct the test results.
+ * ld-sh/arch/sh2a-nofpu-or-sh3-nommu.s: Regenerate.
+ * ld-sh/arch/sh2a-nofpu-or-sh4-nommu-nofpu.s: Regenerate.
+ * ld-sh/arch/sh2a-nofpu.s: Generate new file.
+ * ld-sh/arch/sh2a-or-sh3e.s: Regenerate.
+ * ld-sh/arch/sh2a-or-sh4.s: Regenerate.
+ * ld-sh/arch/sh2a.s: Generate new file.
+ * ld-sh/arch/sh2e.s: Regenerate.
+ * ld-sh/arch/sh2.s: Regenerate.
+ * ld-sh/arch/sh3-dsp.s: Regenerate.
+ * ld-sh/arch/sh3e.s: Regenerate.
+ * ld-sh/arch/sh3-nommu.s: Regenerate.
+ * ld-sh/arch/sh3.s: Regenerate.
+ * ld-sh/arch/sh4al-dsp.s: Regenerate.
+ * ld-sh/arch/sh4a-nofpu.s: Regenerate.
+ * ld-sh/arch/sh4a.s: Regenerate.
+ * ld-sh/arch/sh4-nofpu.s: Regenerate.
+ * ld-sh/arch/sh4-nommu-nofpu.s: Regenerate.
+ * ld-sh/arch/sh4.s: Regenerate.
+ * ld-sh/arch/sh-dsp.s: Regenerate.
+ * ld-sh/arch/sh.s: Regenerate.
+
+2005-01-11 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-sh/shared-1.d: Update for changed dynamic syms.
+ * ld-sh/sh64/gotplt.d: Likewise.
+ * ld-sh/sh64/init-cmpct.d: Likewise.
+ * ld-sh/sh64/init-media.d: Likewise.
+ * ld-sh/sh64/init64.d: Likewise.
+
+For older changes see ChangeLog-2004
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/binutils-2.21/ld/testsuite/ChangeLog-2006 b/binutils-2.21/ld/testsuite/ChangeLog-2006
new file mode 100644
index 0000000..2ff0c39
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ChangeLog-2006
@@ -0,0 +1,1285 @@
+2006-12-29 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/wrap.exp: New file.
+ * ld-elf/wrap1.c: Likewise.
+ * ld-elf/wrap1.out: Likewise.
+ * ld-elf/wrap1a.c: Likewise.
+ * ld-elf/wrap1b.c: Likewise.
+
+2006-12-18 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * ld-pe/direct.exp: New file.
+ * ld-pe/direct_client.c: Likewise.
+ * ld-pe/direct_dll.c: Likewise.
+
+2006-12-13 Dave Brolley <brolley@redhat.com>
+
+ * lib/ld-lib.exp (big_or_little_endian): Accept -meb and
+ -mel for big and little endian respectively.
+
+2006-12-12 Ina Pandit <inap@kpitcummins.com>
+
+ * ld-scripts/overlay-size-map.d: Update.
+
+2006-12-07 H.J. Lu <hjl@gnu.org>
+
+ PR ld/3666
+ * ld-elf/group3a.d: New file.
+ * ld-elf/group3a.s: Likewise.
+ * ld-elf/group3b.d: Likewise.
+ * ld-elf/group3b.s: Likewise.
+
+2006-12-05 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-alpha/tlspic.rd: Update for unused section removal.
+ * ld-frv/fdpic-shared-6.d: Likewise.
+ * ld-frv/tls-dynamic-1.d: Update for symbol changes.
+ * ld-frv/tls-dynamic-2.d: Likewise.
+ * ld-frv/tls-dynamic-3.d: Likewise.
+ * ld-frv/tls-initial-shared-2.d: Likewise.
+ * ld-frv/tls-pie-1.d: Likewise.
+ * ld-frv/tls-pie-3.d: Likewise.
+ * ld-frv/tls-relax-dynamic-1.d: Likewise.
+ * ld-frv/tls-relax-dynamic-2.d: Likewise.
+ * ld-frv/tls-relax-dynamic-3.d: Likewise.
+ * ld-frv/tls-relax-initial-shared-2.d: Likewise.
+ * ld-frv/tls-relax-pie-1.d: Likewise.
+ * ld-frv/tls-relax-pie-3.d: Likewise.
+ * ld-frv/tls-relax-shared-1.d: Likewise.
+ * ld-frv/tls-relax-shared-2.d: Likewise.
+ * ld-frv/tls-relax-shared-3.d: Likewise.
+ * ld-frv/tls-relax-static-3.d: Likewise.
+ * ld-frv/tls-shared-1.d: Likewise.
+ * ld-frv/tls-shared-2.d: Likewise.
+ * ld-frv/tls-shared-3.d: Likewise.
+ * ld-frv/tls-static-1.d: Likewise.
+ * ld-frv/tls-static-3.d: Likewise.
+
+2006-12-05 Jakub Jelinek <jakub@redhat.com>
+ Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elfvsb/sh1.c (overriddenvar, shlib_overriddencall2,
+ shared_data): If !SHARED, move to...
+ * ld-elfvsb/sh2.c: ... here.
+ * ld-elfvsb/elfvsb.exp: Add -DSHARED to compiler options when
+ building with $picflag.
+
+2006-12-04 Jan Beulich <jbeulich@novell.com>
+
+ * ld-elf/eh-frame-hdr.d: New.
+ * ld-elf/eh-frame-hdr.s: New.
+ * ld-ia64/tlsbin.dd, ld-ia64/tlsbin.sd: Don't depend on exact linkage
+ table layout.
+
+2006-11-23 Thiemo Seufer <ths@mips.com>
+
+ * ld-elf/warn2.d: Match regex also for the second segment.
+
+2006-11-22 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-arm/mixed-app.d, ld-arm/tls-app.d, ld-arm/tls-lib.d: Update
+ for $d support.
+
+2006-11-21 Jakub Jelinek <jakub@redhat.com>
+
+ * ld-elf/eh5.d: New test.
+ * ld-elf/eh5.s: New file.
+ * ld-elf/eh5a.s: New file.
+ * ld-elf/eh5b.s: New file.
+
+2006-11-13 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-arm/arm-dyn.ld, ld-arm/arm-lib.ld: Remove .stack.
+ * ld-arm/armthumb-lib.d, ld-arm/mixed-app.d, ld-arm/mixed-lib.d:
+ Allow smaller section gap.
+ * ld-arm/armthumb-lib.sym, ld-arm/mixed-lib.sym: Reorder. Remove
+ _stack.
+ * ld-arm/mixed-app.sym: Remove _stack.
+ * ld-arm/tls-app.d: Update start address.
+
+2006-11-08 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/group.ld: Handle .rodata.brlt for powerpc64.
+
+2006-11-07 Vladimir Prus <vladimir@codesourcery.com>
+
+ * testsuite/ld-elf/symbol2w.s: Use "%" instead of "@" to avoid
+ breakage on ARM.
+
+2006-11-06 Vladimir Prus <vladimir@codesourcery.com>
+
+ * testsuite/ld-elf/symbol1ref.s: Use ".dc.a" instead
+ of ".long".
+
+2006-11-06 Vladimir Prus <vladimir@codesourcery.com>
+
+ * testsuite/ld-elf/warn2.d: New.
+ * testsuite/ld-elf/symbol2w.s: New.
+ * testsuite/ld-elf/symbol2ref.s: New.
+
+2006-11-05 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/ldsym1.d: Adjust for semi-recent ld changes.
+
+2006-11-02 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-discard/zero-rel.d, ld-discard/zero-rel.s: New files.
+
+2006-11-01 Thiemo Seufer <ths@mips.com>
+
+ * ld-mips-elf/mips16-intermix-1.s, ld-mips-elf/mips16-intermix-2.s,
+ ld-mips-elf/mips16-intermix.d: New testcase.
+ * ld-mips-elf/mips-elf.exp (mips16_intermix_test): Run new testcases.
+
+2006-10-29 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-sh/sh64/abi32.xd, ld-sh/sh64/abi64.xd, ld-sh/sh64/cmpct1.xd,
+ * ld-sh/sh64/crange1.rd, ld-sh/sh64/crange2.rd,
+ * ld-sh/sh64/crange3-cmpct.rd, ld-sh/sh64/crange3-media.rd,
+ * ld-sh/sh64/crange3.rd, ld-sh/sh64/mix1.xd, ld-sh/sh64/mix2.xd,
+ * ld-sh/sh64/shdl32.xd, ld-sh/sh64/shdl64.xd: Update for removal
+ of empty sections.
+
+2006-10-25 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-spu/ovl.d: New file.
+ * ld-spu/ovl.lnk: New file.
+ * ld-spu/ovl.s: New file.
+ * ld-spu/spu.exp: New file.
+ * ld-elf/sec64k.exp: Tweak ld options for SPU.
+ * ld-scripts/empty-orphan.exp: Likewise.
+ * ld-scripts/phdrs.exp: Likewise.
+ * ld-scripts/phdrs2.exp: Likewise.
+
+2006-10-24 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/plt1.s: New.
+ * ld-powerpc/plt1.d: New.
+ * ld-powerpc/relbrlt.s: New.
+ * ld-powerpc/relbrlt.d: New.
+ * ld-powerpc/powerpc.exp: Run them.
+
+2006-10-21 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-sh/sh64/abi32.xd, ld-sh/sh64/abi64.xd, ld-sh/sh64/cmpct1.xd,
+ * ld-sh/sh64/crange1.rd, ld-sh/sh64/crange2.rd,
+ * ld-sh/sh64/crange3-cmpct.rd, ld-sh/sh64/crange3-media.rd,
+ * ld-sh/sh64/crange3.rd, ld-sh/sh64/crangerel1.rd,
+ * ld-sh/sh64/crangerel2.rd, ld-sh/sh64/mix1.xd,
+ * ld-sh/sh64/mix2.xd, ld-sh/sh64/rel32.xd, ld-sh/sh64/rel64.xd,
+ * ld-sh/sh64/reldl32.rd, ld-sh/sh64/reldl64.rd,
+ * ld-sh/sh64/shdl32.xd, ld-sh/sh64/shdl64.xd: Update.
+
+2006-10-20 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-sh/tlsbin-1.d: Update.
+ * ld-sh/tlspic-1.d: Likewise.
+ * ld-sh/tlstpoff-1.d: Likewise.
+
+2006-10-20 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/multi-got-1.d: Remove trailing R_MIPS_NONE entries.
+ * ld-mips-elf/tls-multi-got-1.got: Likewise.
+ * ld-mips-elf/tls-multi-got-1.r: Likewise.
+
+2006-10-20 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/multi-got-1.d: Do not expect a particular address
+ for DT_HASH.
+ * ld-mips-elf/rel32-o32.d: Bump addresses by 0x20 to account for
+ the extra program header.
+ * ld-mips-elf/rel32-n32.d: Likewise.
+ * ld-mips-elf/tlslib-o32.got: Likewise.
+ * ld-mips-elf/tlslib-o32-hidden.got: Likewise.
+ * ld-mips-elf/tlslib-o32-ver.got: Likewise.
+ * ld-mips-elf/tls-multi-got-1.got: Likewise.
+ * ld-mips-elf/tls-multi-got-1.r: Likewise.
+ * ld-mips-elf/rel64.d: Bump addresses by 0x30 to account for the
+ extra program header.
+ * ld-mips-elf/tlsdyn-o32.d: Reduce the GOT offset by 32 to account
+ for the extra program header, and thus the shorter gap between the
+ text and data segments.
+ * ld-mips-elf/tlsdyn-o32-1.d: Likewise.
+ * ld-mips-elf/tlsdyn-o32-2.d: Likewise.
+ * ld-mips-elf/tlsdyn-o32-3.d: Likewise.
+ * ld-mips-elf/tlsdyn-o32.got: Bump GOT text addresses by 0x20
+ to account for the extra program header.
+ * ld-mips-elf/tlsdyn-o32-1.got: Likewise.
+ * ld-mips-elf/tlsdyn-o32-2.got: Likewise.
+ * ld-mips-elf/tlsdyn-o32-3.got: Likewise.
+
+2006-10-20 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/rel32-o32.d: Bump the section number of .text by 1
+ to account for the fact that .rel.dyn is now before .text in the
+ section table.
+ * ld-mips-elf/rel32-n32.d: Likewise.
+ * ld-mips-elf/rel64.d: Likewise.
+
+2006-10-19 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/tlslib-o32-hidden.got: Sort relocations against the
+ same symbol in order of increasing r_offset.
+ * ld-mips-elf/tls-multi-got-1.got: Likewise.
+ * ld-mips-elf/tls-hidden3.r: Likewise.
+ * ld-mips-elf/tls-hidden4.r: Likewise.
+
+2006-10-19 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/multi-got-1.d: Remove DT_DEBUG tag. Do not require
+ a specific file offset for .dynamic. Reduce DT_HASH by 8 to account
+ for removed tag.
+ * ld-mips-elf/tls-multi-got-1.r: Likewise. Also reduce DT_REL by 8.
+ Reduce PLTGOT and symbol values by 16 to account for the removed tag.
+ * ld-mips-elf/textrel-1.d: Remove DT_DEBUG tag.
+ * ld-mips-elf/rel32-n32.d: Reduce addresses by 16 to account for
+ removed DT_DEBUG tag.
+ * ld-mips-elf/rel64.d: Likewise.
+ * ld-mips-elf/tls-multi-got-1.got: Likewise.
+ * ld-mips-elf/tlslib-o32-hidden.got: Likewise.
+
+2006-10-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3290
+ * ld-elf/dummy.c: New file.
+ * ld-elf/dwarf.exp: Likewise.
+ * ld-elf/dwarf1.c: Likewise.
+ * ld-elf/dwarf1.h: Likewise.
+ * ld-elf/dwarf1.out: Likewise.
+ * ld-elf/dwarf1main.c: Likewise.
+
+2006-10-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/dl4.c: New file.
+ * ld-elf/dl4.list: Likewise.
+ * ld-elf/dl4a.out: Likewise.
+ * ld-elf/dl4b.out: Likewise.
+ * ld-elf/dl4main.c: Likewise.
+ * ld-elf/dl4xxx.c: Likewise.
+ * ld-elf/dl4xxx.list: Likewise.
+
+ * ld-elf/shared.exp (build_tests): Add libdl4a.so and
+ libdl4b.so.
+ (run_tests): Likewise.
+
+2006-10-18 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/reloc-1-n64.d: Match 16-character VMAs on LP64 hosts.
+
+2006-10-18 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/rel32-n32.d: Bump addresses by 0x20 to account for
+ the fact that .reginfo is now placed before .text. Change the
+ section number of .text accordingly.
+
+2006-10-18 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/elf-rel-got-n32.d: Adjust page gap from 0x100000
+ to 0x10000. Move .reginfo before .text and bump .text addresses
+ by 0x10 to make room. Move data segment down by 0x10 bytes to
+ account for new size of text segment.
+ * ld-mips-elf/elf-rel-xgot-n32.d: Likewise.
+ * ld-mips-elf/elf-rel-got-n64-linux.d: Adjust page gap from
+ 0x100000 to 0x10000.
+ * ld-mips-elf/elf-rel-xgot-n64-linux.d: Likewise.
+
+2006-10-17 Mark Shinwell <shinwell@codesourcery.com>
+
+ * ld-arm/arm-elf.exp: Add thumb1-bl, thumb2-bl,
+ thumb2-bl-as-thumb1-bad and thumb2-bl-bad tests.
+ * ld-arm/thumb1-bl.d: New.
+ * ld-arm/thumb1-bl.s: New.
+ * ld-arm/thumb2-bl-as-thumb1-bad.d: New.
+ * ld-arm/thumb2-bl-as-thumb1-bad.s: New.
+ * ld-arm/thumb2-bl-bad.d: New.
+ * ld-arm/thumb2-bl-bad.s: New.
+ * ld-arm/thumb2-bl.d: New.
+ * ld-arm/thumb2-bl.s: New.
+
+2006-10-17 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-arm/mixed-app.sym, ld-cris/ldsym1.d, ld-cris/libdso-12.d,
+ * ld-cris/v32-ba-1.d, ld-elf/orphan.d, ld-elf/orphan2.d,
+ * ld-i386/tlsbin.rd, ld-i386/tlsbindesc.rd, ld-i386/tlsdesc.rd,
+ * ld-i386/tlsdesc.sd, ld-i386/tlsgdesc.rd, ld-i386/tlsnopic.rd,
+ * ld-i386/tlspic.rd, ld-ia64/tlspic.rd, ld-mips-elf/eh-frame1-n32.d,
+ * ld-mips-elf/eh-frame1-n64.d, ld-mips-elf/eh-frame2-n32.d,
+ * ld-mips-elf/eh-frame2-n64.d, ld-mips-elf/mips-elf.exp,
+ * ld-mips-elf/rel32-n32.d, ld-mips-elf/rel32-o32.d,
+ * ld-mips-elf/rel64.d, ld-mips-elf/tls-multi-got-1.got,
+ * ld-mips-elf/tls-multi-got-1.r, ld-mips-elf/tlsdyn-o32-1.d,
+ * ld-mips-elf/tlsdyn-o32-1.got, ld-mips-elf/tlsdyn-o32-2.d,
+ * ld-mips-elf/tlsdyn-o32-2.got, ld-mips-elf/tlsdyn-o32-3.d,
+ * ld-mips-elf/tlsdyn-o32-3.got, ld-mips-elf/tlsdyn-o32.d,
+ * ld-mips-elf/tlsdyn-o32.got, ld-mips-elf/tlslib-o32-hidden.got,
+ * ld-mips-elf/tlslib-o32-ver.got, ld-mips-elf/tlslib-o32.got,
+ * ld-mmix/bpo-10.d, ld-powerpc/tlsso.g, ld-powerpc/tlsso.r,
+ * ld-powerpc/tlsso32.d, ld-powerpc/tlsso32.g, ld-powerpc/tlsso32.r,
+ * ld-powerpc/tlstocso.g, ld-powerpc/tlstocso.r, ld-s390/tlspic.rd,
+ * ld-s390/tlspic_64.rd, ld-scripts/empty-address-1.d,
+ * ld-scripts/empty-address-3c.d, ld-scripts/empty-orphan.t,
+ * ld-sh/shared-1.d, ld-sh/tlspic-2.d, ld-sparc/tlssunbin32.rd,
+ * ld-sparc/tlssunbin64.rd, ld-sparc/tlssunpic32.rd,
+ * ld-sparc/tlssunpic64.rd, ld-x86-64/tlsdesc.pd, ld-x86-64/tlsdesc.rd,
+ * ld-x86-64/tlspic.rd: Update for section sym changes.
+
+2006-10-16 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/branch-misc-1.d: Set the start address to 0x20000000.
+ * ld-mips-elf/jalbal.d: Likewise 0x200000a0.
+ * ld-mips-elf/jaloverflow-2.d: Likewise 0x20000000.
+ * ld-mips-elf/reloc-3-n32.d: Likewise.
+ * ld-mips-elf/reloc-3.d: Likewise.
+ * ld-mips-elf/textrel-1.d: Don't require a specific file offset for
+ .dynamic.
+
+2006-10-03 Jakub Jelinek <jakub@redhat.com>
+
+ * ld-elf/eh4.d: New test.
+ * ld-elf/eh4.s: New file.
+ * ld-elf/eh4a.s: New file.
+
+2006-10-02 Vladimir Prus <vladimir@codesourcery.com>
+
+ * ld-arm/use-thumb-lib.sym: Robustify, by ignoring symbols we're
+ not interested in and bucket number.
+
+2006-10-02 Kai Tietz <Kai.Tietz@onevision.com>
+
+ * ld-fastcall/fastcall.exp: Add x86_64-pc-mingw64 as valid target.
+ * ld-pe/pe.exp: Likewise.
+ * lib/ld-lib.exp ( is_pecoff_format): Accept x86_64-pc-mingw64.
+
+2006-09-29 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-sh/tlspic-2.d: Update.
+
+2006-09-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3223
+ PR ld/3267
+ * ld-scripts/empty-address-1.d: New file.
+ * ld-scripts/empty-address-1.s: Likewise.
+ * ld-scripts/empty-address-1.t: Likewise.
+ * ld-scripts/empty-address-2.s: Likewise.
+ * ld-scripts/empty-address-2a.d: Likewise.
+ * ld-scripts/empty-address-2a.t: Likewise.
+ * ld-scripts/empty-address-2b.d: Likewise.
+ * ld-scripts/empty-address-2b.t: Likewise.
+ * ld-scripts/empty-address-3.s: Likewise.
+ * ld-scripts/empty-address-3a.d: Likewise.
+ * ld-scripts/empty-address-3a.t: Likewise.
+ * ld-scripts/empty-address-3b.d: Likewise.
+ * ld-scripts/empty-address-3b.t: Likewise.
+ * ld-scripts/empty-address-3c.d: Likewise.
+ * ld-scripts/empty-address-3c.t: Likewise.
+ * ld-scripts/empty-address.exp: Likewise.
+
+2006-09-21 Andreas Schwab <schwab@suse.de>
+
+ * ld-m68k/plt1-68020.d: Fix patterns to match also for 64-bit
+ hosts.
+
+2006-09-20 Kai Tietz <Kai.Tietz@onevision.com>
+
+ * bootstrap/bootstrap.exp: Fix x86_64-mingw32 target test.
+ * ld-fastcall/fastcall.exp: Likewise.
+ * ld-scripts/align.exp: Likewise.
+ * ld-scripts/align2a.d: Likewise.
+ * ld-scripts/defined.exp: Likewise.
+ * ld-scripts/provide.exp: Likewise.
+ * ld-scripts/script.exp: Likewise.
+ * ld-scripts/weak.exp: Likewise.
+ * lib/ld-lib.exp: Detect target as pecoff file format.
+
+2006-09-18 Thiemo Seufer <ths@networkno.de>
+ Maciej W. Rozycki <macro@mips.com>
+
+ * ld-mips-elf/mips-elf.exp: Add test for R_MIPS16_GPREL relocations.
+ * ld-mips-elf/reloc-3-n32.d, ld-mips-elf/reloc-3.d: New files.
+
+2006-09-18 Thiemo Seufer <ths@networkno.de>
+
+ * ld-elfcomm/elfcomm.exp: Enable the alignment test for
+ mips*-*-*.
+
+2006-09-17 Mei Ligang <ligang@sunnorth.com.cn>
+
+ * ld-elf/merge.d: Add special case for Score target.
+ * ld-elfcomm/elfcomm.exp: Likewise.
+ * ld-srec/srec.exp: Likewise.
+
+2006-09-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-scripts/overlay-size.t: Discard .reginfo sections.
+
+2006-09-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/hash.d: Don't run for mips targets.
+
+2006-09-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/loadaddr.s: Pad sections to 16 bytes.
+ * ld-elf/loadaddr1.d: Updated.
+ * ld-elf/loadaddr2.d: Likewise.
+ * ld-elf/loadaddr3a.d: Likewise.
+ * ld-elf/loadaddr3b.d: Likewise.
+
+2006-09-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3197
+ * ld-elf/hash.d: New test.
+
+2006-09-04 Vladimir Prus <vladimir@codesourcery.com>
+
+ * ld-arm/use-thumb-lib.sym: Use regexps instead of
+ absolute addresses, for robustness.
+
+2006-09-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/dl1.c: New file.
+ * ld-elf/dl1.list: Likewise.
+ * ld-elf/dl1.out: Likewise.
+ * ld-elf/dl1main.c: Likewise.
+ * ld-elf/dl2.c: Likewise.
+ * ld-elf/dl2.list: Likewise.
+ * ld-elf/dl2a.out: Likewise.
+ * ld-elf/dl2b.out: Likewise.
+ * ld-elf/dl2main.c: Likewise.
+ * ld-elf/dl2xxx.c: Likewise.
+ * ld-elf/dl2xxx.list: Likewise.
+ * ld-elf/dl3.cc: Likewise.
+ * ld-elf/dl3.list: Likewise.
+ * ld-elf/dl3a.out: Likewise.
+ * ld-elf/dl3b.out: Likewise.
+ * ld-elf/dl3header.h: Likewise.
+ * ld-elf/dl3main.cc: Likewise.
+
+ * ld-elf/shared.exp: Updated.
+
+ * lib/ld-lib.exp (run_ld_link_exec_tests): Take an optional
+ argument for source language. Use CC/CXX for link, depending
+ on source language.
+ (run_cc_link_tests): Likewise.
+
+2006-08-29 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/loadaddr3a.d: Adjust target test.
+ * ld-elf/loadaddr3b.d: Likewise.
+
+2006-08-29 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-elf/loadaddr3.t: New.
+ * ld-elf/loadaddr3a.d: New.
+ * ld-elf/loadaddr3b.d: New.
+
+2006-08-23 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/plt1.s: New.
+ * ld-powerpc/plt1.d: New.
+ * ld-powerpc/powerpc.exp: Run it.
+
+2006-08-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3052
+ * ld-elf/loadaddr1.t: Add "AT (ADDR(.data))".
+ * ld-elf/loadaddr2.t: Likewise.
+
+2006-08-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3103
+ * ld-elf/overlay.d: New file.
+ * ld-elf/overlay.s: Likewise.
+ * ld-elf/overlay.t: Likewise.
+
+2006-08-18 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm-elf.exp (armelftests): Add armthumb-lib.so. Add
+ -use-blx to mixed-lib.so
+ * ld-arm/armthumb-lib.d: New file.
+ * ld-arm/armthumb-lib.sym: New file.
+
+2006-08-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3052
+ * ld-elf/loadaddr.s: New file.
+ * ld-elf/loadaddr1.d: Likewise.
+ * ld-elf/loadaddr1.t: Likewise.
+ * ld-elf/loadaddr2.d: Likewise.
+ * ld-elf/loadaddr2.t: Likewise.
+
+2006-08-17 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlsexe.d: Update for lazy link stub change.
+ * ld-powerpc/tlsexe.r: Likewise.
+ * ld-powerpc/tlsexetoc.d: Likewise.
+ * ld-powerpc/tlsexetoc.r: Likewise.
+ * ld-powerpc/tlsso.d: Likewise.
+ * ld-powerpc/tlstocso.d: Likewise.
+
+2006-08-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3015
+ * ld-elf/binutils.exp: Add tests for "-z relro".
+
+2006-08-16 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-scripts/overlay-size-map.d: Update.
+
+2006-08-11 Thiemo Seufer <ths@mips.com>
+
+ * ld-elfcomm/elfcomm.exp (dump_common1): Extend regexp to match also
+ MIPS small commons.
+
+2006-08-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3009
+ * ld-scripts/sort.t: New file.
+ * ld-scripts/sort_b_a-1.d: Likewise.
+ * ld-scripts/sort_b_a-1.s: Likewise.
+ * ld-scripts/sort_b_n-1.d: Likewise.
+ * ld-scripts/sort_b_n-1.s: Likewise.
+
+2006-08-05 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * ld-pe/pe.exp: Enable tests on arm-wince-pe.
+ * ld-pe/secrel.d: Adjust test to work on arm-wince-pe too.
+
+2006-08-04 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-sh/rd-sh.exp: Treat vxworks1-static.d specially.
+ * ld-sh/sh-vxworks.exp: New file.
+ * ld-sh/sh.exp: Extend sh-linux SIZEOF_HEADERS handling to
+ sh-*-vxworks.
+ * ld-sh/vxworks1-le.dd, ld-sh/vxworks1-lib-le.dd,
+ * ld-sh/vxworks1-lib.dd, ld-sh/vxworks1-lib.nd,
+ * ld-sh/vxworks1-lib.rd, ld-sh/vxworks1-lib.s,
+ * ld-sh/vxworks1-static.d, ld-sh/vxworks1.dd,
+ * ld-sh/vxworks1.ld, ld-sh/vxworks1.rd, ld-sh/vxworks1.s,
+ * ld-sh/vxworks2-static.sd, ld-sh/vxworks2.s,
+ * ld-sh/vxworks2.sd, ld-sh/vxworks3-le.dd,
+ * ld-sh/vxworks3-lib-le.dd, ld-sh/vxworks3-lib.dd,
+ * ld-sh/vxworks3-lib.s, ld-sh/vxworks3.dd, ld-sh/vxworks3.s,
+ * ld-sh/vxworks4.d, ld-sh/vxworks4a.s, ld-sh/vxworks4b.s,
+ * ld-sh/reloc1.s, ld-sh/reloc1.d: New tests.
+
+2006-08-01 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/noload-1.d: New.
+ * ld-elf/noload-1.s: Likewise.
+ * ld-elf/noload-1.t: Likewise.
+
+2006-07-29 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/hash1.s, ld-mips-elf/hash1a.d,
+ * ld-mips-elf/hash1b.d, ld-mips-elf/hash1c.d: New tests.
+ * ld-mips-elf/mips-elf.exp: Run them.
+
+2006-07-25 Thiemo Seufer <ths@mips.com>
+
+ * ld-mips-elf/mips16-call-global-2.s,
+ ld-mips-elf/mips16-call-global-3.s, ld-mips-elf/mips16-call-global.d:
+ Improve test robustness.
+
+2006-07-21 Nick Clifton <nickc@redhat.com>
+
+ * ld-sh/arch/arch.exp (test_arch): Set the endian flag to suit the
+ multilib being tested.
+
+2006-07-20 Thiemo Seufer <ths@mips.com>
+
+ * ld-mips-elf/mips16-call-global-1.s,
+ ld-mips-elf/mips16-call-global-2.s,
+ ld-mips-elf/mips16-call-global-3.s, ld-mips-elf/mips16-call-global.d:
+ Test linking of external mips16 jumps.
+ * ld-mips-elf/mips-elf.exp: Run new test.
+
+2006-07-19 Thiemo Seufer <ths@mips.com>
+
+ * ld-selective/selective.exp: Fix selective testcases for MIPS.
+
+2006-07-13 Thiemo Seufer <ths@mips.com>
+
+ * ld-mips-elf/tlslib-o32-ver.got, ld-mips-elf/tlslib-o32.got:
+ Update TLS testcases.
+
+2006-07-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/2884
+ * ld-elf/begin.c: New file.
+ * ld-elf/end.c: Likewise.
+ * ld-elf/endhidden.c: Likewise.
+ * ld-elf/endprotected.c: Likewise.
+ * ld-elf/foo.c: Likewise.
+ * ld-elf/foo.map: Likewise.
+ * ld-elf/hidden.out: Likewise.
+ * ld-elf/main.c: Likewise.
+ * ld-elf/normal.out: Likewise.
+ * ld-elf/shared.exp: Likewise.
+
+ * lib/ld-lib.exp (run_cc_link_tests): New.
+
+2006-07-12 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-m68k/merge-ok-1c.d: New test.
+ * ld-m68k/m68k.exp: Run it.
+
+2006-07-11 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/libdso-2.d: Adjust for recent hash-related changes.
+
+2006-07-10 Jakub Jelinek <jakub@redhat.com>
+
+ * ld-powerpc/tlsso32.r: Adjust.
+ * ld-powerpc/tlsso32.d: Adjust.
+ * ld-powerpc/tlsso32.g: Adjust.
+ * ld-powerpc/tlsso.r: Adjust.
+ * ld-powerpc/tlsso.g: Adjust.
+ * ld-powerpc/tlstocso.g: Adjust.
+
+2006-07-05 Thiemo Seufer <ths@mips.com>
+
+ * ld-mips-elf/multi-got-1.d, ld-mips-elf/tls-multi-got-1.got,
+ ld-mips-elf/tls-multi-got-1.r: Update multigot testcases.
+
+2006-06-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-i386/tlsbindesc.dd: Updated to expect xchg %ax,%ax instead
+ of 2 nops.
+ * ld-i386/tlsdesc.dd: Likewise.
+ * ld-i386/tlsgdesc.dd: Likewise.
+ * ld-x86-64/tlsbindesc.dd: Likewise.
+ * ld-x86-64/tlsdesc.dd: Likewise.
+ * ld-x86-64/tlsdesc.pd: Likewise.
+ * ld-x86-64/tlsgdesc.dd: Likewise.
+
+2006-06-29 Jakub Jelinek <jakub@redhat.com>
+
+ PR ld/2513
+ * ld-i386/tlsbin.dd: Fix expected output.
+
+2006-06-21 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/tls_common.exp: Match 32-bit output.
+
+2006-06-20 Jakub Jelinek <jakub@redhat.com>
+
+ * ld-elf/tls_common.exp: New test.
+ * ld-elf/tls_common.s: New file.
+
+2006-06-20 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/eh1.d: Update for fewer program headers.
+ * ld-elf/eh2.d: Likewise.
+ * ld-elf/eh3.d: Likewise.
+
+2006-06-19 Vladimir Prus <vladimir@codesourcery.com>
+
+ * ld-arm/arm-elf.exp: New test.
+ * ld-arm/use-thumb-lib.s: New file.
+ * ld-arm/use-thumb-lib.sym: New file.
+
+2006-06-15 Mark Shinwell <shinwell@codesourcery.com>
+
+ * ld-arm/group-relocs-alu-bad.d: New test.
+ * ld-arm/group-relocs-alu-bad.s: New test.
+ * ld-arm/group-relocs.d: New test.
+ * ld-arm/group-relocs-ldc-bad.d: New test.
+ * ld-arm/group-relocs-ldc-bad.s: New test.
+ * ld-arm/group-relocs-ldr-bad.d: New test.
+ * ld-arm/group-relocs-ldr-bad.s: New test.
+ * ld-arm/group-relocs-ldrs-bad.d: New test.
+ * ld-arm/group-relocs-ldrs-bad.s: New test.
+ * ld-arm/group-relocs.s: New test.
+ * ld-arm/arm-elf.exp: Wire in new tests.
+
+2006-06-14 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-m68k/plt1.s, ld-m68k/plt1-empty.s, ld-m68k/plt1.ld: New files.
+ * ld-m68k/plt1-68020.d, ld-m68k/plt1-cpu32.d: Likewise.
+ * ld-m68k/plt1-isab.d: Likewise.
+ * ld-m68k/m68k.exp: Run new PLT tests.
+
+2006-06-12 Thiemo Seufer <ths@mips.com>
+
+ * ld-mips-elf/multi-got-no-shared.d: Adjust for recent change of
+ ELF_MAXPAGESIZE.
+
+2006-06-11 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/stub-dynsym-1.s,
+ * ld-mips-elf/stub-dynsym-1.ld,
+ * ld-mips-elf/stub-dynsym-1-7fff.d,
+ * ld-mips-elf/stub-dynsym-1-8000.d,
+ * ld-mips-elf/stub-dynsym-1-fff0.d,
+ * ld-mips-elf/stub-dynsym-1-10000.d,
+ * ld-mips-elf/stub-dynsym-1-2fe80.d: New test.
+ * ld-mips-elf/mips-elf.exp: Run it.
+
+2006-06-06 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elfvers/vers.exp (objdump_versionstuff): Allow versions in
+ any order.
+ * ld-elfvers/vers1.ver: Update.
+ * ld-elfvers/vers2.ver: Update.
+ * ld-elfvers/vers4a.ver: Update.
+ * ld-elfvers/vers7a.ver: Update.
+ * ld-elfvers/vers8.ver: Update.
+ * ld-elfvers/vers9.ver: Update.
+ * ld-elfvers/vers15.ver: Update.
+ * ld-elfvers/vers16a.ver: Update.
+ * ld-elfvers/vers17.ver: Update.
+ * ld-elfvers/vers18.ver: Update.
+ * ld-elfvers/vers20.ver: Update.
+ * ld-elfvers/vers20a.ver: Update.
+ * ld-elfvers/vers21.ver: Update.
+ * ld-elfvers/vers22a.ver: Update.
+ * ld-elfvers/vers22b.ver: Update.
+ * ld-elfvers/vers23a.ver: Update.
+ * ld-elfvers/vers23b.ver: Update.
+ * ld-elfvers/vers23c.ver: Update.
+ * ld-elfvers/vers25a.ver: Update.
+ * ld-elfvers/vers26a.ver: Update.
+ * ld-elfvers/vers27a.ver: Update.
+ * ld-elfvers/vers27d.ver: Update.
+ * ld-elfvers/vers28b.ver: Update.
+ * ld-elfvers/vers29.ver: Update.
+ * ld-elfvers/vers30.ver: Update.
+ * ld-elfvers/vers31.ver: Update.
+
+2006-06-05 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/sec64k.exp: Add "main" symbol. Use dc.a for addresses.
+ Cater for different address sizes. Match end of line when
+ comparing symbols.
+ * ld-elf/start.s: Use dc.a for addresses.
+
+2006-06-02 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlsexe.r: Update for removal of some section syms.
+ * ld-powerpc/tlsexetoc.r: Likewise.
+ * ld-powerpc/tlsso.r: Likewise.
+ * ld-powerpc/tlstocso.r: Likewise.
+ * ld-s390/tlsbin_64.rd: Likewise.
+ * ld-s390/tlspic_64.rd: Likewise.
+
+2006-06-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/2723
+ * ld-alpha/tlsbin.rd: Update for removal of some section syms.
+ * ld-alpha/tlsbinr.rd: Likewise.
+ * ld-alpha/tlspic.rd: Likewise.
+ * ld-cris/hiddef1.d: Likewise.
+ * ld-cris/libdso-2.d: Likewise.
+ * ld-elf/sec64k.exp: Likewise.
+ * ld-i386/tlsbin.rd: Likewise.
+ * ld-i386/tlsbindesc.rd: Likewise.
+ * ld-i386/tlsdesc.rd: Likewise.
+ * ld-i386/tlsgdesc.rd: Likewise.
+ * ld-i386/tlsnopic.rd: Likewise.
+ * ld-i386/tlspic.rd: Likewise.
+ * ld-ia64/tlsbin.rd: Likewise.
+ * ld-ia64/tlspic.rd: Likewise.
+ * ld-mmix/bpo-1.d: Likewise.
+ * ld-mmix/bpo-10.d: Likewise.
+ * ld-mmix/bpo-11.d: Likewise.
+ * ld-mmix/bpo-14.d: Likewise.
+ * ld-mmix/bpo-16.d: Likewise.
+ * ld-mmix/bpo-17.d: Likewise.
+ * ld-mmix/bpo-18.d: Likewise.
+ * ld-mmix/bpo-19.d: Likewise.
+ * ld-mmix/bpo-2.d: Likewise.
+ * ld-mmix/bpo-22.d: Likewise.
+ * ld-mmix/bpo-3.d: Likewise.
+ * ld-mmix/bpo-4.d: Likewise.
+ * ld-mmix/bpo-5.d: Likewise.
+ * ld-mmix/bpo-6.d: Likewise.
+ * ld-mmix/bpo-9.d: Likewise.
+ * ld-mmix/bspec1.d: Likewise.
+ * ld-mmix/bspec2.d: Likewise.
+ * ld-mmix/greg-1.d: Likewise.
+ * ld-mmix/greg-19.d: Likewise.
+ * ld-mmix/greg-2.d: Likewise.
+ * ld-mmix/greg-3.d: Likewise.
+ * ld-mmix/greg-4.d: Likewise.
+ * ld-mmix/greg-5.d: Likewise.
+ * ld-mmix/greg-5s.d: Likewise.
+ * ld-mmix/greg-6.d: Likewise.
+ * ld-mmix/greg-7.d: Likewise.
+ * ld-mmix/loc1.d: Likewise.
+ * ld-mmix/loc2.d: Likewise.
+ * ld-mmix/loc3.d: Likewise.
+ * ld-mmix/loc4.d: Likewise.
+ * ld-mmix/loc6.d: Likewise.
+ * ld-mmix/local1.d: Likewise.
+ * ld-mmix/local3.d: Likewise.
+ * ld-mmix/local5.d: Likewise.
+ * ld-mmix/local7.d: Likewise.
+ * ld-mmix/locdo-1.d: Likewise.
+ * ld-mmix/loct-1.d: Likewise.
+ * ld-mmix/locto-1.d: Likewise.
+ * ld-mmix/start-1.d: Likewise.
+ * ld-mmix/undef-3.d: Likewise.
+ * ld-powerpc/tlsexe32.r: Likewise.
+ * ld-powerpc/tlsso32.r: Likewise.
+ * ld-s390/tlsbin.rd: Likewise.
+ * ld-s390/tlspic.rd: Likewise.
+ * ld-sparc/tlssunbin32.rd: Likewise.
+ * ld-sparc/tlssunbin64.rd: Likewise.
+ * ld-sparc/tlssunnopic32.rd: Likewise.
+ * ld-sparc/tlssunnopic64.rd: Likewise.
+ * ld-sparc/tlssunpic32.rd: Likewise.
+ * ld-sparc/tlssunpic64.rd: Likewise.
+ * ld-x86-64/tlsbin.rd: Likewise.
+ * ld-x86-64/tlsbindesc.rd: Likewise.
+ * ld-x86-64/tlsdesc.rd: Likewise.
+ * ld-x86-64/tlsgdesc.rd: Likewise.
+ * ld-x86-64/tlspic.rd: Likewise.
+
+2006-05-31 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/binutils.exp: Make it Linux only.
+ (strip_test): Renamed to binutils_test. Check for unsupported
+ options.
+ Add more tests.
+
+ * ld-elf/commonpage1.d: Make it Linux only.
+ * ld-elf/maxpage1.d: Likewise.
+
+ * ld-elf/maxpage1.s: Add main, start and __start.
+
+ * ld-elf/maxpage2.d: New file.
+ * ld-elf/tbss1.s: Likewise.
+ * ld-elf/tbss2.s: Likewise.
+ * ld-elf/tdata1.s: Likewise.
+ * ld-elf/tdata2.s: Likewise.
+
+2006-05-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/binutils.exp: New file.
+ * ld-elf/commonpage1.d: Likewise.
+ * ld-elf/maxpage1.d: Likewise.
+ * ld-elf/maxpage1.s: Likewise.
+
+2006-05-25 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-x86-64/tlsbin.dd: Updated for 2MB maximum page size.
+ * ld-x86-64/tlsbin.rd: Likewise.
+ * ld-x86-64/tlsbin.sd: Likewise.
+ * ld-x86-64/tlsbin.td: Likewise.
+ * ld-x86-64/tlsbindesc.dd: Likewise.
+ * ld-x86-64/tlsbindesc.rd: Likewise.
+ * ld-x86-64/tlsbindesc.sd: Likewise.
+ * ld-x86-64/tlsbindesc.td: Likewise.
+ * ld-x86-64/tlsdesc.dd: Likewise.
+ * ld-x86-64/tlsdesc.pd: Likewise.
+ * ld-x86-64/tlsdesc.rd: Likewise.
+ * ld-x86-64/tlsdesc.sd: Likewise.
+ * ld-x86-64/tlsdesc.td: Likewise.
+ * ld-x86-64/tlsgdesc.dd: Likewise.
+ * ld-x86-64/tlspic.dd: Likewise.
+ * ld-x86-64/tlspic.rd: Likewise.
+ * ld-x86-64/tlspic.sd: Likewise.
+ * ld-x86-64/tlspic.td: Likewise.
+
+2006-05-24 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm-app-abs32.d: Update expected output.
+ * ld-arm/arm-app.d: Ditto.
+ * ld-arm/arm-lib-plt32.d: Ditto.
+ * ld-arm/arm-lib.d: Ditto.
+ * ld-arm/mixed-app-v5.d: Ditto.
+ * ld-arm/mixed-app.d: Ditto.
+ * ld-arm/mixed-lib.d: Ditto.
+
+2006-05-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/2655
+ PR ld/2657
+ * ld-elf/eh1.d: New file.
+ * ld-elf/eh1.s: Likewise.
+ * ld-elf/eh1a.s: Likewise.
+ * ld-elf/eh2.d: Likewise.
+ * ld-elf/eh2a.s: Likewise.
+ * ld-elf/eh3.d: Likewise.
+ * ld-elf/eh3.s: Likewise.
+ * ld-elf/eh3a.s: Likewise.
+
+2006-05-22 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-mips-elf/textrel-1.d: Relax some patterns.
+
+2006-05-22 Nick Clifton <nickc@redhat.com>
+
+ * ld-elf/start.s (start): Add this symbol for SH targets.
+ (main): Add this symbol for HPPA targets.
+
+2006-05-19 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-scripts/empty-orphan.d: Update again.
+
+ * ld-scripts/empty-orphan.t: Discard .reginfo.
+ * ld-scripts/empty-orphan.d: Update.
+
+2006-05-17 Thiemo Seufer <ths@mips.com>
+
+ * ld-elfweak/size2.d, ld-elfweak/size2a.s, ld-elfweak/size2b.s:
+ Add __start as entry symbol.
+
+2006-05-16 Thiemo Seufer <ths@mips.com>
+
+ * ld-elf/orphan.ld: Add placement for MIPS .reginfo section.
+
+2006-05-15 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm-be8.d: New test.
+ * ld-arm/arm-be8.s: New test.
+ * ld-arm/arm-elf.exp: Add arm-be8.
+
+2006-05-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/stab.d: Skip ia64-*-*.
+
+2006-05-11 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm-elf.exp: Add arm-movwt.
+ * ld-arm/arm-movwt.d: New test.
+ * ld-arm/arm-movwt.s: New test.
+ * ld-arm/arm.ld: Add .far.
+
+2006-05-11 Mike Bland <mbland@google.com>
+
+ * ld-elf/stab.d: New.
+
+2006-05-10 Thiemo Seufer <ths@debian.org>
+
+ * ld-elf/sec64k.exp: Extend for MIPS ELF.
+
+2006-05-05 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlsexetoc.r: Update for correction to tls optimization.
+ * ld-powerpc/tlsexetoc.g: Likewise.
+
+2006-05-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-cdtest/cdtest-foo.cc (Foo::Foo): Add const to char *.
+ * ld-cdtest/cdtest-foo.h (Foo::Foo): Likewise.
+ * ld-srec/sr3.cc (Foo::Foo): Likewise.
+
+2006-05-02 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm-elf.exp: Add thumb-rel32.
+ * ld-arm/thumb-rel32.d: New test.
+ * ld-arm/thumb-rel32.s: New test.
+
+2006-04-29 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elfvers/vers.exp: Xfail vers7a, vers7, vers23a, vers23b,
+ vers23c, vers23d, vers23, vers25a, vers25b1, vers25b2, vers27a,
+ vers27b, vers27c1, vers27c2, vers27d4 and vers27d5 if PIC is
+ required.
+
+2006-04-25 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-alpha/tlsbin.rd: Updated for readelf change.
+ * ld-alpha/tlsbinr.rd: Likewise.
+ * ld-alpha/tlspic.rd: Likewise.
+
+2006-04-05 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-sparc/vxworks1.dd, ld-sparc/vxworks1.ld, ld-sparc/vxworks1-lib.dd,
+ * ld-sparc/vxworks1-lib.nd, ld-sparc/vxworks1-lib.rd,
+ * ld-sparc/vxworks1-lib.s, ld-sparc/vxworks1.rd, ld-sparc/vxworks1.s,
+ * ld-sparc/vxworks1-static.d, ld-sparc/vxworks2.s,
+ * ld-sparc/vxworks2.sd, ld-sparc/vxworks2-static.sd: New tests.
+ * ld-sparc/sparc.exp: Run them.
+
+2006-04-05 Ben Elliston <bje@au.ibm.com>
+
+ * lib/ld-lib.exp: Comment cleanups.
+
+2006-03-27 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/tls-hidden3a.s, ld-mips-elf/tls-hidden3b.s,
+ * ld-mips-elf/tls-hidden3.d, ld-mips-elf/tls-hidden3.got,
+ * ld-mips-elf/tls-hidden3.ld, ld-mips-elf/tls-hidden3.r,
+ * ld-mips-elf/tls-hidden4a.s, ld-mips-elf/tls-hidden4b.s,
+ * ld-mips-elf/tls-hidden4.got, ld-mips-elf/tls-hidden4.r: New tests.
+ * ld-mips-elf/mips-elf.exp: Run them.
+
+2006-03-25 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-m68k/merge-error-1a.s, ld-m68k/merge-error-1b.s,
+ * ld-m68k/merge-error-1a.d, ld-m68k/merge-error-1b.d,
+ * ld-m68k/merge-error-1c.d, ld-m68k/merge-error-1d.d,
+ * ld-m68k/merge-error-1e.d, ld-m68k/merge-ok-1a.d,
+ * ld-m68k/merge-ok-1b.d: New tests.
+ * ld-m68k/m68k.exp: Run them.
+
+2006-03-22 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips/vxworks1.dd, ld-mips/vxworks1.ld, ld-mips/vxworks1-lib.dd,
+ * ld-mips/vxworks1-lib.nd, ld-mips/vxworks1-lib.rd,
+ * ld-mips/vxworks1-lib.s, ld-mips/vxworks1.rd, ld-mips/vxworks1.s,
+ * ld-mips/vxworks1-static.d, ld-mips/vxworks2.s, ld-mips/vxworks2.sd,
+ * ld-mips/vxworks2-static.sd: New tests.
+ * ld-mips/mips-elf.exp: Run them.
+
+2006-03-17 Alexandre Oliva <aoliva@redhat.com>
+
+ * ld-powerpc/tls32.s: Verify that +32768 @plt addend is
+ discarded.
+
+2006-03-14 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips/emit-relocs-1a.s, ld-mips/emit-relocs-1b.s,
+ * ld-mips/emit-relocs-1.ld, ld-mips/emit-relocs-1.d: New test.
+ * ld-mips/mips-elf.exp: Run it.
+
+2006-03-07 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-arm/vxworks1.dd, ld-arm/vxworks1.ld, ld-arm/vxworks1-lib.dd,
+ * ld-arm/vxworks1-lib.nd, ld-arm/vxworks1-lib.rd,
+ * ld-arm/vxworks1-lib.s, ld-arm/vxworks1.rd, ld-arm/vxworks1.s,
+ * ld-arm/vxworks1-static.d, ld-arm/vxworks2.s, ld-arm/vxworks2.sd,
+ * ld-arm/vxworks2-static.sd: New tests.
+ * ld-arm/arm-elf.exp: Run them.
+
+2006-03-06 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-m68k: New tests.
+
+2006-03-03 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-i386/vxworks1-static.d, ld-i386/vxworks2.s,
+ * ld-i386/vxworks2.sd, ld-i386/vxworks2-static.sd: New tests.
+ * ld-i386/i386.exp: Run them.
+ * ld-powerpc/vxworks1-static.d, ld-powerpc/vxworks2.s,
+ * ld-powerpc/vxworks2.sd, ld-powerpc/vxworks2-static.sd: New tests.
+ * ld-powerpc/powerpc.exp: Run them.
+
+2006-03-02 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-powerpc/vxworks1.ld: Use a page alignment of 0x10000.
+ * ld-powerpc/vxworks1.dd: Update accordingly.
+ * ld-powerpc/vxworks1-lib.nd: Likewise.
+ * ld-powerpc/vxworks1-lib.rd: Likewise.
+ * ld-powerpc/vxworks1.rd: Likewise.
+
+2006-03-02 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-i386/vxworks1.ld (.data): New section.
+ * ld-i386/vxworks1-lib.s: Add a pointer to a local symbol.
+ * ld-i386/vxworks1-lib.rd: Test for the associated reloc.
+ * ld-powerpc/vxworks1.ld (.data): New section.
+ * ld-powerpc/vxworks1-lib.s: Add a pointer to a local symbol.
+ * ld-powerpc/vxworks1-lib.rd: Test for the associated reloc.
+
+2006-03-02 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-i386/ld-i386/vxworks1-lib.nd: New test.
+ * ld-i386/i386.exp: Run it.
+ * ld-powerpc/ld-powerpc/vxworks1-lib.nd: New test.
+ * ld-powerpc/powerc.exp: Run it.
+
+2006-03-02 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-i386/vxworks1.ld: Use bigger alignments. Make sure .bss isn't
+ placed as an orphan.
+ * ld-i386/vxworks1-lib.dd, ld-i386/vxworks1.dd,
+ * ld-i386/vxworks1.rd: Update accordingly.
+ * ld-i386/vxworks1-lib.rd: Likewise. Remove symbol indexes.
+
+2006-03-02 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-powerpc/vxworks1-lib.s, ld-powerpc/vxworks1-lib.dd,
+ * ld-powerpc/vxworks1-lib.rd, ld-powerpc/vxworks1.s,
+ * ld-powerpc/vxworks1.dd, ld-powerpc/vxworks1.rd,
+ * ld-powerpc/vxworks1.ld, ld-powerpc/vxworks1.sd: New test.
+ * ld-powerpc/powerpc.exp: Run it.
+
+2006-02-28 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-i386/vxworks1-lib.s, ld-i386/vxworks1-lib.dd,
+ * ld-i386/vxworks1-lib.rd, ld-i386/vxworks1.s, ld-i386/vxworks1.dd,
+ * ld-i386/vxworks1.rd, ld-i386/vxworks1.ld: New test.
+ * ld-i386/i386.exp: Run it.
+
+2006-02-28 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-i386/emit-relocs.s, ld-i386/emit-relocs.d: New test.
+ * ld-i386/i386.exp: Run it.
+
+2006-02-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-pie/weakundef-data.c: Fix the typo.
+
+2006-02-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-pie/pie.c: New file.
+
+ * ld-pie/pie.exp: Check if compiler supports -pie.
+
+2006-02-20 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/2218
+ * ld-pie/pie.exp: Add the weak undefined data test.
+
+ * ld-pie/weakundef-data.c: New file.
+
+2006-02-17 Shrirang Khisti <shrirangk@kpitcummins.com>
+ Anil Paranjape <anilp1@kpitcummins.com>
+ Shilin Shakti <shilins@kpitcummins.com>
+
+ * ld-xc16x: New directory.
+ * ld-xc16x/absrel.d: New file.
+ * ld-xc16x/absrel.s: New file.
+ * ld-xc16x/offset.d: New file.
+ * ld-xc16x/offset.s: New file.
+ * ld-xc16x/pcreloc.d: New file.
+ * ld-xc16x/pcreloc.s: New file.
+ * ld-xc16x/xc16x.exp: New file.
+
+2006-02-07 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm-elf.exp: Add thumb-entry test.
+ * ld-arm/thumb-entry.d: New test.
+ * ld-arm/thumb-entry.s: New test.
+
+2006-02-04 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/tls-hidden2a.s, ld-mips-elf/tls-hidden2b.s,
+ * ld/testsuite/ld-mips-elf/tls-hidden2.d,
+ * ld/testsuite/ld-mips-elf/tls-hidden2-got.d: New test.
+ * ld-mips-elf/mips-elf.exp: Run it.
+
+2006-02-04 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/rel32-n32.d: Adjust for changes in linker behaviour.
+ * ld-mips-elf/rel32-o32.d: Likewise.
+ * ld-mips-elf/rel64.d: Likewise.
+ * ld-mips-elf/tls-multi-got-1.got: Likewise.
+ * ld-mips-elf/tls-multi-got-1.r: Likewise.
+ * ld-mips-elf/tlsdyn-o32-1.d: Likewise.
+ * ld-mips-elf/tlsdyn-o32-1.got: Likewise.
+ * ld-mips-elf/tlsdyn-o32-2.d: Likewise.
+ * ld-mips-elf/tlsdyn-o32-2.got: Likewise.
+ * ld-mips-elf/tlsdyn-o32-3.d: Likewise.
+ * ld-mips-elf/tlsdyn-o32-3.got: Likewise.
+ * ld-mips-elf/tlsdyn-o32.d: Likewise.
+ * ld-mips-elf/tlsdyn-o32.got: Likewise.
+ * ld-mips-elf/tlslib-o32-hidden.got: Likewise.
+ * ld-mips-elf/tlslib-o32-ver.got: Likewise.
+ * ld-mips-elf/tlslib-o32.got: Likewise.
+
+2006-02-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-i386/tlsbin.rd: Undo the last change.
+ * ld-i386/tlsbindesc.rd: Likewise.
+ * ld-i386/tlsdesc.rd: Likewise.
+ * ld-i386/tlsnopic.rd: Likewise.
+ * ld-i386/tlspic.rd: Likewise.
+ * ld-powerpc/tlsexe.r: Likewise.
+ * ld-powerpc/tlsexe32.r: Likewise.
+ * ld-powerpc/tlsexetoc.r: Likewise.
+ * ld-powerpc/tlsso.r: Likewise.
+ * ld-powerpc/tlsso32.r: Likewise.
+ * ld-powerpc/tlstocso.r: Likewise.
+ * ld-s390/tlsbin.rd: Likewise.
+ * ld-s390/tlsbin_64.rd: Likewise.
+ * ld-s390/tlspic.rd: Likewise.
+ * ld-s390/tlspic_64.rd: Likewise.
+ * ld-sh/tlsbin-2.d: Likewise.
+ * ld-sh/tlspic-2.d: Likewise.
+ * ld-x86-64/tlsbin.rd: Likewise.
+ * ld-x86-64/tlsbindesc.rd: Likewise.
+ * ld-x86-64/tlsdesc.rd: Likewise.
+ * ld-x86-64/tlspic.rd: Likewise.
+
+2006-02-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-i386/tlsbin.rd: Update for changed segment map.
+ * ld-i386/tlsbindesc.rd: Likewise.
+ * ld-i386/tlsdesc.rd: Likewise.
+ * ld-i386/tlsnopic.rd: Likewise.
+ * ld-i386/tlspic.rd: Likewise.
+ * ld-powerpc/tlsexe.r: Likewise.
+ * ld-powerpc/tlsexe32.r: Likewise.
+ * ld-powerpc/tlsexetoc.r: Likewise.
+ * ld-powerpc/tlsso.r: Likewise.
+ * ld-powerpc/tlsso32.r: Likewise.
+ * ld-powerpc/tlstocso.r: Likewise.
+ * ld-s390/tlsbin.rd: Likewise.
+ * ld-s390/tlsbin_64.rd: Likewise.
+ * ld-s390/tlspic.rd: Likewise.
+ * ld-s390/tlspic_64.rd: Likewise.
+ * ld-sh/tlsbin-2.d: Likewise.
+ * ld-sh/tlspic-2.d: Likewise.
+ * ld-x86-64/tlsbin.rd: Likewise.
+ * ld-x86-64/tlsbindesc.rd: Likewise.
+ * ld-x86-64/tlsdesc.rd: Likewise.
+ * ld-x86-64/tlspic.rd: Likewise.
+
+2006-01-31 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * ld-sparc/sparc.exp: Do not run 64-bit tests on Solaris 2.5.1
+ and Solaris 2.6.
+
+2006-01-27 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/2218
+ * ld-pie/pie.exp: New file.
+ * ld-pie/weakundef.c: Likewise.
+ * ld-pie/weakundef.out: Likewise.
+
+ * lib/ld-lib.exp (run_ld_link_exec_tests): Fix nesting. Support
+ building PIE and shared library.
+
+2006-01-18 Alexandre Oliva <aoliva@redhat.com>
+
+ Introduce TLS descriptors for i386 and x86_64.
+ * ld-i386/i386.exp: Run on x86_64-*-linux* and amd64-*-linux*.
+ Add new tests.
+ * ld-i386/pcrel16.d: Add -melf_i386.
+ * ld-i386/pcrel8.d: Likewise.
+ * ld-i386/tlsbindesc.dd: New.
+ * ld-i386/tlsbindesc.rd: New.
+ * ld-i386/tlsbindesc.s: New.
+ * ld-i386/tlsbindesc.sd: New.
+ * ld-i386/tlsbindesc.td: New.
+ * ld-i386/tlsdesc.dd: New.
+ * ld-i386/tlsdesc.rd: New.
+ * ld-i386/tlsdesc.s: New.
+ * ld-i386/tlsdesc.sd: New.
+ * ld-i386/tlsdesc.td: New.
+ * ld-i386/tlsgdesc.dd: New.
+ * ld-i386/tlsgdesc.rd: New.
+ * ld-i386/tlsgdesc.s: New.
+ * ld-x86-64/x86-64.exp: Run new tests.
+ * ld-x86-64/tlsbindesc.dd: New.
+ * ld-x86-64/tlsbindesc.rd: New.
+ * ld-x86-64/tlsbindesc.s: New.
+ * ld-x86-64/tlsbindesc.sd: New.
+ * ld-x86-64/tlsbindesc.td: New.
+ * ld-x86-64/tlsdesc.dd: New.
+ * ld-x86-64/tlsdesc.pd: New.
+ * ld-x86-64/tlsdesc.rd: New.
+ * ld-x86-64/tlsdesc.s: New.
+ * ld-x86-64/tlsdesc.sd: New.
+ * ld-x86-64/tlsdesc.td: New.
+ * ld-x86-64/tlsgdesc.dd: New.
+ * ld-x86-64/tlsgdesc.rd: New.
+ * ld-x86-64/tlsgdesc.s: New.
+
+2006-01-03 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-mmix/sec-1.d: Adjust for section order changes.
+
+For older changes see ChangeLog-2005
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/binutils-2.21/ld/testsuite/ChangeLog-2007 b/binutils-2.21/ld/testsuite/ChangeLog-2007
new file mode 100644
index 0000000..3f2fc96
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ChangeLog-2007
@@ -0,0 +1,1206 @@
+2007-12-31 Nick Clifton <nickc@redhat.com>
+
+ * ld-elf/flags1.d: Add xfails for ports for which the test will
+ not work.
+
+2007-12-31 Nick Clifton <nickc@redhat.com>
+
+ * ld-mn10300/i143317.s: New test - checks linker relaxation when
+ the symbols are in a merged section.
+ * ld-mn10300/i143317.d: Expected disassembly.
+ * ld-mn10300/i143317.t: Linker map.
+ * ld-mn10300/mn10300.exp (mn10300_tests): Add the i143317 test.
+
+2007-12-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/5488
+ * ld-elf/note-2.d: New.
+ * ld-elf/note-2.s: Likewise.
+ * ld-elf/note-2.t: Likewise.
+
+2007-12-20 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-elf/seg.d: Restrict to linux and vxworks.
+
+2007-12-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/seg.d: Adjusted for 64bit targets.
+
+2007-12-19 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-elf/seg.t: New.
+ * ld-elf/seg.d: New.
+ * ld-elf/seg.s: New.
+
+2007-12-15 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-scripts/rgn-over.exp: Add --no-overlays for spu.
+
+2007-11-28 Nick Clifton <nickc@redhat.com>
+
+ * ld-mn10300/i135409-5.s: New test case. Check for relaxation to
+ a 16-bit backward jump instruction.
+ * ld-mn10300/i135409-5.t: Linker script for the new test.
+ * ld-mn10300/i135409-5.d: Expected disassembly of new test.
+ * ld-mn10300/mn10300.exp: Run the new test.
+
+2007-11-21 Nick Clifton <nickc@redhat.com>
+
+ * ld-mn10300/i135409-4.s: New test case. Check for relaxation to
+ a 16-bit jump instruction.
+ * ld-mn10300/i135409-4.t: Linker script for the new test.
+ * ld-mn10300/i135409-4.d: Expected disassembly of new test.
+ * ld-mn10300/mn10300.exp: Run the new test.
+
+2007-11-20 Nick Clifton <nickc@redhat.com>
+
+ * lib/ld-lib.exp (check_gc_sections_available): New proc, based
+ on the version in gcc/testsuite/lib/target-supports.exp.
+ * ld-elf/elf.exp: Use check_gc_sections_available.
+
+2007-11-20 Tristan Gingold <gingold@adacore.com>
+
+ * ld-elf/tls_gc.s: New test.
+ * ld-elf/elf.exp: Add tls_gc test.
+
+2007-11-17 Thiemo Seufer <ths@mips.com>
+
+ * ld-mips-elf/attr-gnu-4-14.d, ld-mips-elf/attr-gnu-4-41.d:
+ Adjust warning message for -mfp64 flag.
+ * ld-mips-elf/attr-gnu-4-5.s, ld-mips-elf/attr-gnu-4-04.d,
+ ld-mips-elf/attr-gnu-4-51.d, ld-mips-elf/attr-gnu-4-05.d,
+ ld-mips-elf/attr-gnu-4-15.d, ld-mips-elf/attr-gnu-4-24.d,
+ ld-mips-elf/attr-gnu-4-25.d, ld-mips-elf/attr-gnu-4-34.d,
+ ld-mips-elf/attr-gnu-4-35.d, ld-mips-elf/attr-gnu-4-42.d,
+ ld-mips-elf/attr-gnu-4-43.d, ld-mips-elf/attr-gnu-4-44.d,
+ ld-mips-elf/attr-gnu-4-45.d, ld-mips-elf/attr-gnu-4-40.d,
+ ld-mips-elf/attr-gnu-4-14.d: New testcases files.
+ * ld-mips-elf/mips-elf.exp: Run new testcases.
+
+2007-11-16 Nick Clifton <nickc@redhat.com>
+
+ * ld-mn10300/mn10300.exp: Fix the start address of the .bss
+ section for the i1127740.s test.
+
+2007-11-14 Richard Sandiford <richard@codesourcery.com>
+ Joseph Myers <joseph@codesourcery.com>
+
+ * ld-mips-elf/got-page-1.d, ld-mips-elf/got-page-1.s,
+ * ld-mips-elf/got-page-2.d, ld-mips-elf/got-page-2.s,
+ * ld-mips-elf/got-page-3.d, ld-mips-elf/got-page-3a.s,
+ * ld-mips-elf/got-page-3b.s, ld-mips-elf/got-page-3c.s,
+ * ld-mips-elf/got-page-1.ld: New tests.
+ * ld-mips-elf/mips-elf.exp: Run them.
+ * ld-mips-elf/multi-got-1.d, ld-mips-elf/multi-got-no-shared.d,
+ * ld-mips-elf/tls-hidden2-got.d, ld-mips-elf/tls-hidden2.d,
+ * ld-mips-elf/tls-hidden3.d, ld-mips-elf/tls-hidden3.got,
+ * ld-mips-elf/tls-hidden3.r, ld-mips-elf/tls-hidden4.got,
+ * ld-mips-elf/tls-hidden4.r, ld-mips-elf/tls-multi-got-1.d,
+ * ld-mips-elf/tls-multi-got-1.got, ld-mips-elf/tls-multi-got-1.r,
+ * ld-mips-elf/tlsbin-o32.d, ld-mips-elf/tlsbin-o32.got,
+ * ld-mips-elf/tlsdyn-o32-1.d, ld-mips-elf/tlsdyn-o32-1.got,
+ * ld-mips-elf/tlsdyn-o32-2.d, ld-mips-elf/tlsdyn-o32-2.got,
+ * ld-mips-elf/tlsdyn-o32-3.d, ld-mips-elf/tlsdyn-o32-3.got,
+ * ld-mips-elf/tlsdyn-o32.d, ld-mips-elf/tlsdyn-o32.got,
+ * ld-mips-elf/tlslib-o32-hidden.got, ld-mips-elf/tlslib-o32-ver.got,
+ * ld-mips-elf/tlslib-o32.d, ld-mips-elf/tlslib-o32.got: Update for
+ GOT allocation changes.
+
+2007-11-14 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-elf/flags1.d: Generalize regexp for section size.
+
+2007-11-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/5233
+ * ld-elf/flags1.d: New.
+ * ld-elf/flags1.ld: Likewise.
+ * ld-elf/flags1.s: Likewise.
+
+2007-11-13 Nick Clifton <nickc@redhat.com>
+
+ * ld-mn10300/i127740.s: New test: Checks relaxation and alignment.
+ * ld-mn10300/i127740.d: New file: Expected disassembly.
+ * ld-mn10300/i135409-3.s: New test: Check symbols inside a relaxed region.
+ * ld-mn10300/i135409-3.d: New file: Expected disassembly.
+ * ld-mn10300/mn10300.exp: Run new tests.
+
+2007-11-08 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-vxworks/tls-2.d: New.
+ * ld-vxworks/tls-2.s: New.
+
+2007-11-07 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-vxworks/tls-1.d: New.
+ * ld-vxworks/tls-1.s: New.
+
+2007-11-06 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlsso.d: Update for changed got alloc order.
+ * ld-powerpc/tlsso.r: Likewise.
+
+ * ld-powerpc/tlsso32.d: Update for changed got alloc order.
+
+2007-11-05 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/merge3.d, ld-elf/merge3.s: Delete.
+
+2007-11-05 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * ld-scripts/align.exp: Enable for PECOFF.
+ * ld-scripts/alignof.exp: Likewise.
+
+2007-11-01 Joseph Myers <joseph@codesourcery.com>
+
+ * ld-elf/merge3.d, ld-elf/merge3.s: New.
+
+2007-10-30 Nick Clifton <nickc@redhat.com>
+
+ * ld-mn10300/mn10300.exp: Run new tests. Skip i126256 test if
+ a compiler is not available.
+ * ld-mn10300/i112045-3.s: New test.
+ * ld-mn10300/i112045-3.d: Expected disassembly.
+ * ld-mn10300/i135409.s: Rename to i135409-1.s.
+ * ld-mn10300/i135409.d: Rename to i135409-1.d
+ * ld-mn10300/i135409-2.s: New test.
+ * ld-mn10300/i135409-2.d: Expected symbol table.
+ * ld-mn10300/i36434.d: Adjust expected disassembly.
+
+2007-10-26 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-scripts/rgn-over1.d: Accept extra LOAD at end of map file.
+ * ld-scripts/rgn-over2.d: Likewise.
+ * ld-scripts/rgn-over3.d: Likewise.
+ * ld-scripts/rgn-over4.d: Likewise.
+ * ld-scripts/rgn-over5.d: Likewise.
+ * ld-scripts/rgn-over6.d: Likewise.
+ * ld-scripts/rgn-over7.d: Likewise.
+
+2007-10-25 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-powerpc/attr-gnu-8-1.s, ld-powerpc/attr-gnu-8-11.d,
+ ld-powerpc/attr-gnu-8-2.s, ld-powerpc/attr-gnu-8-23.d,
+ ld-powerpc/attr-gnu-8-3.s, ld-powerpc/attr-gnu-8-31.d: New.
+ * ld-powerpc/powerpc.exp: Run new tests.
+
+2007-10-19 Nick Clifton <nickc@redhat.com>
+
+ * ld-mn10300: New test directory.
+ * ld-mn10300/mn10300.exp: Run the new tests.
+ * ld-mn10300/i112045-1.s: Linker relaxation test.
+ * ld-mn10300/i112045-1.d: Expected disassembly.
+ * ld-mn10300/i112045-2.s: Linker relaxation test.
+ * ld-mn10300/i112045-2.d: Expected disassembly.
+ * ld-mn10300/i126256-1.c: Test source.
+ * ld-mn10300/i126256-2.c: Test source.
+ * ld-mn10300/i135409.s: Linker relaxation test.
+ * ld-mn10300/i135409.d: Expected symbol table contents.
+ * ld-mn10300/i136434.s: Linker string section merge test.
+ * ld-mn10300/i136434.d: Expected disassembly.
+ * ld-mn10300/i136434-2.s: Test source file.
+
+2007-10-17 Zack Weinberg <zack@codesourcery.com>
+ Daniel Jacobowitz <dan@codesourcery.com>
+ Mark Shinwell <shinwell@codesourcery.com>
+ Joseph Myers <joseph@codesourcery.com>
+
+ * ld-scripts/rgn-over.exp: New driver.
+ * ld-scripts/rgn-over.s: New file.
+ * ld-scripts/rgn-over1.d, ld-scripts/rgn-over1.t,
+ ld-scripts/rgn-over2.d, ld-scripts/rgn-over2.t,
+ ld-scripts/rgn-over3.d, ld-scripts/rgn-over3.t,
+ ld-scripts/rgn-over4.d, ld-scripts/rgn-over4.t,
+ ld-scripts/rgn-over5.d, ld-scripts/rgn-over5.t,
+ ld-scripts/rgn-over6.d, ld-scripts/rgn-over6.t,
+ ld-scripts/rgn-over7.d, ld-scripts/rgn-over7.t:
+ New test cases.
+
+2007-10-16 Nick Clifton <nickc@redhat.com>
+
+ * ld-elfcomm/elfcomm.exp: Add tests of STT_COMMON symbol
+ generation.
+
+2007-10-12 Joseph Myers <joseph@codesourcery.com>
+
+ * ld-mips-elf/multi-got-hidden-1.d,
+ ld-mips-elf/multi-got-hidden-1.s,
+ ld-mips-elf/multi-got-hidden-2.d,
+ ld-mips-elf/multi-got-hidden-2.s: New.
+ * ld-mips-elf/mips-elf.exp: Run multi-got-hidden tests.
+
+2007-10-12 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-srec/srec.exp: Define __stack_chk_fail sym.
+
+2007-10-09 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/4476
+ * ld-elf/hash.d: Check "-s -D" for readelf.
+
+2007-10-02 Ralf Habecker <ralf.habacker@freenet.de>
+
+ PR linker/4844
+ * ld-auto-import/auto-import.exp: Extend test to include running
+ the application and checking for some output.
+ * ld-auto-import/client.c (struct TEST): Include a variable field
+ with an offset.
+ (const_xyz): A const version of the xyz structure used to test the
+ initialization of constant data.
+
+2007-09-30 Mike Frysinger <vapier@gentoo.org>
+
+ * ld-selective/selective.exp: Set $compiler based on $testtype and
+ use that instead of $CC.
+
+2007-09-29 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-selective/sel-dump.exp: Add am33, m88k, mep to xfails.
+ * ld-selective/selective.exp: Don't run for same target list
+ we xfail sel-dump.
+
+2007-09-29 Mike Frysinger <vapier@gentoo.org>
+
+ * ld-alpha/tlsbin.rd: Use [0-9]+ to match section header count and
+ 0x[0-9a-f]+ to match section header offset. Match section indexes
+ with \[[ 0-9]+\]. Use [0-9]+ to match program header count and
+ 0x[0-9a-f]+ to match program header offset. Match .dynsym and
+ .symtab entry counts with [0-9]+.
+ * ld-alpha/tlsbinr.rd: Likewise.
+ * ld-alpha/tlspic.rd: Likewise.
+ * ld-i386/tlsbin.rd: Likewise.
+ * ld-i386/tlsbindesc.rd: Likewise.
+ * ld-i386/tlsdesc.rd: Likewise.
+ * ld-i386/tlsgdesc.rd: Likewise.
+ * ld-i386/tlsnopic.rd: Likewise.
+ * ld-i386/tlspic.rd: Likewise.
+ * ld-ia64/tlsbin.rd: Likewise.
+ * ld-ia64/tlspic.rd: Likewise.
+ * ld-powerpc/tlsexe.r: Likewise.
+ * ld-powerpc/tlsexe32.r: Likewise.
+ * ld-powerpc/tlsexetoc.r: Likewise.
+ * ld-powerpc/tlsso.r: Likewise.
+ * ld-powerpc/tlsso32.r: Likewise.
+ * ld-powerpc/tlstocso.r: Likewise.
+ * ld-s390/tlsbin.rd: Likewise.
+ * ld-s390/tlsbin_64.rd: Likewise.
+ * ld-s390/tlspic.rd: Likewise.
+ * ld-s390/tlspic_64.rd: Likewise.
+ * ld-sparc/tlssunbin32.rd: Likewise.
+ * ld-sparc/tlssunbin64.rd: Likewise.
+ * ld-sparc/tlssunnopic32.rd: Likewise.
+ * ld-sparc/tlssunnopic64.rd: Likewise.
+ * ld-sparc/tlssunpic32.rd: Likewise.
+ * ld-sparc/tlssunpic64.rd: Likewise.
+ * ld-x86-64/tlsbin.rd: Likewise.
+ * ld-x86-64/tlsbindesc.rd: Likewise.
+ * ld-x86-64/tlsdesc.rd: Likewise.
+ * ld-x86-64/tlsgdesc.rd: Likewise.
+ * ld-x86-64/tlspic.rd: Likewise.
+
+2007-09-25 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-spu/ovl.d: Adjust for stub relocs.
+ * ld-spu/ovl2.d: Likewise.
+
+2007-09-20 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR 658
+ * ld-i386/tlsbin.dd: Updated.
+ * ld-i386/tlsld1.dd: Likewise.
+
+2007-09-19 Nick Clifton <nickc@redhat.com>
+
+ * ld-scripts/crossref.exp: Compile test source with -mtiny=0 in
+ order to prevent the use of the small data area.
+
+2007-09-17 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/3281
+ PR binutils/5037
+ * ld-elf/binutils.exp: Update "-z relro" tests to use relro1.s.
+ Add "-z relro" tests with relro2.s. Add "-z relro" tests with
+ TLS for objcopy.
+
+ * ld-elf/relro1.s: New file.
+ * ld-elf/relro2.s: Likewise.
+
+2007-09-04 Mike Frysinger <vapier@gentoo.org>
+
+ * lib/ld-lib.exp (default_ld_compile): Pull in global CXXFLAGS and
+ add it to $flags when $ccexe matches *++*.
+ (run_ld_link_exec_tests): Pull in global CXXFLAGS and execute CXX
+ with CXXFLAGS when $lang matches c++.
+ (run_cc_link_tests): Likewise.
+
+2007-09-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/4986
+ * ld-ia64/line.exp: New.
+ * ld-ia64/undefined.s: Likewise.
+
+ * ld-x86-64/line.exp: Don't check CC.
+
+2007-08-31 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/4986
+ * ld-x86-64/line.exp: New
+ * ld-x86-64/undefined.s: Likewise.
+
+2007-08-31 Tristan Gingold <gingold@adacore.com>
+
+ * ld-script/map-address.t: Add a test for testing DEFINED in map
+ output.
+ * ld-script/map-address.d: Update expected output.
+
+2007-08-28 Mark Shinwell <shinwell@codesourcery.com>
+ Joseph Myers <joseph@codesourcery.com>
+
+ * ld-elfcomm/elfcomm.exp: Use run_host_cmd. Only check "which
+ $CC" if host is local.
+ * ld-checks/checks.exp: Use run_host_cmd.
+ * ld-elf/exclude.exp: Likewise.
+ * ld-elf/elf.exp: Download merge.ld if host is remote.
+ * ld-elf/binutils.exp (binutils_test): Use remote_exec.
+ * ld-elf/tls_common.exp: Use run_host_cmd.
+ * lib/ld-lib.exp (ld_version): Only check "which $ld" if host is
+ local. Use remote_exec.
+ (run_host_cmd): New.
+ (run_host_cmd_yesno): New.
+ (default_ld_relocate): Use run_host_cmd_yesno.
+ (default_ld_link): Likewise.
+ (default_ld_simple_link): Use run_host_cmd.
+ (default_ld_compile): Only check "which $ccprog" if host is local.
+ Use remote_file and remote_exec.
+ (default_ld_assemble): Only check "which $as" if host is local.
+ Use run_host_cmd.
+ (default_ld_nm): Use remote_exec, remote_upload and remote_file.
+ (run_dump_test): Use remote_exec, remote_upload and remote_file.
+ Only check "which $binary" if host is local.
+ (run_ld_link_tests): Use remote_exec, remote_upload and
+ remote_file.
+ * ld-selective/selective.exp: Only check "which $CXX" if host is
+ local. Use remote_exec.
+ * ld-scripts/phdrs.exp: Only check "which $objdump" if host is
+ local. Use run_host_cmd.
+ * ld-scripts/phdrs2.exp: Likewise.
+ * ld-scripts/weak.exp: Likewise.
+ * ld-undefined/weak-undef.exp: Likewise.
+ * ld-scripts/crossref.exp: Only check "which $CC" if host is local.
+ Use run_host_cmd.
+ * ld-scripts/map-address.exp: Upload map_address.map if host is
+ remote.
+ * ld-srec/srec.exp (run_srec_tests): Use run_host_cmd. Only check
+ "which $CC" and "which $CXX" if host is local.
+ * ld-undefined/undefined.exp: Only check "which $CC" if host is
+ local. Use remote_file and run_host_cmd.
+ * config/default.exp: Use remote_exec to create tmpdir.
+
+2007-08-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-i386/i386.exp (i386tests): Add a test for TLS IE->LE
+ transition.
+ Run tlsie2, tlsie3, tlsie4 and tlsie5.
+
+ * ld-i386/tlsie1.dd: New file.
+ * ld-i386/tlsie1.s: Likewise.
+ * ld-i386/tlsie2.d: Likewise.
+ * ld-i386/tlsie2.s: Likewise.
+ * ld-i386/tlsie3.d: Likewise.
+ * ld-i386/tlsie3.s: Likewise.
+ * ld-i386/tlsie4.d: Likewise.
+ * ld-i386/tlsie4.s: Likewise.
+ * ld-i386/tlsie5.d: Likewise.
+ * ld-i386/tlsie5.s: Likewise.
+ * ld-x86-64/tlsgd2.d: Likewise.
+ * ld-x86-64/tlsgd2.s: Likewise.
+ * ld-x86-64/tlsgd3.d: Likewise.
+ * ld-x86-64/tlsgd3.s: Likewise.
+ * ld-x86-64/tlsie1.dd: Likewise.
+ * ld-x86-64/tlsie1.s: Likewise.
+ * ld-x86-64/tlsie2.d: Likewise.
+ * ld-x86-64/tlsie2.s: Likewise.
+ * ld-x86-64/tlsie3.d: Likewise.
+ * ld-x86-64/tlsie3.s: Likewise.
+
+ * ld-x86-64/x86-64.exp (x86_64tests): Add a test for TLS LD->LE
+ transition.
+ Run tlsgd2, tlsgd3, tlsie2 and tlsie3.
+
+2007-08-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-i386/tlsbinpic.s: Add a new GD -> IE test.
+
+ * ld-i386/tlsgd1.s: Add a new GD -> LE test.
+
+ * ld-i386/tlsbin.dd: Updated.
+ * ld-i386/tlsbin.rd: Likewise.
+ * ld-i386/tlsgd1.dd: Likewise.
+
+2007-08-17 Jakub Jelinek <jakub@redhat.com>
+
+ * ld-sparc/tlssunnopic32.dd: Fix up #target.
+ * ld-sparc/tlssunnopic32.rd: Likewise.
+ * ld-sparc/tlssunnopic32.sd: Likewise.
+ * ld-sparc/tlssunnopic64.dd: Likewise.
+ * ld-sparc/tlssunnopic64.rd: Likewise.
+ * ld-sparc/tlssunnopic64.sd: Likewise.
+
+2007-08-17 Richard Sandiford <richard@codesourcery.com>
+
+ * lib/ld-lib.exp (run_dump_test): Allow [big_or_little_endian]
+ to appear in assembler and linker options.
+ * ld-mips-elf/vxworks1-static.d (ld): Add [big_or_little_endian].
+
+2007-08-16 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-srec/srec.exp: Always pass "-G 0". Remove all powerpc
+ xfails.
+
+2007-08-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/4918
+ * ld-i386/i386.exp (i386tests): Add tlsgd1 and tlsld1 tests.
+ * ld-x86-64/x86-64.exp (x86_64tests): Likewise.
+
+ * ld-i386/tlsgd1.dd: New file.
+ * ld-i386/tlsgd1.s: Likewise.
+ * ld-i386/tlsld1.dd: Likewise.
+ * ld-i386/tlsld1.s: Likewise.
+ * ld-x86-64/tlsgd1.dd: Likewise.
+ * ld-x86-64/tlsgd1.s: Likewise.
+ * ld-x86-64/tlsld1.dd: Likewise.
+ * ld-x86-64/tlsld1.s: Likewise.
+
+2007-08-13 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/vxworks-forced-local-1.d,
+ * ld-mips-elf/vxworks-forced-local-1.s,
+ * ld-mips-elf/vxworks-forced-local-1.ver: New test.
+ * ld-mips-elf/mips-elf.exp: Run it.
+ * ld-mips-elf/tlsdyn-o32-2.d: Adjust for removal of unnecessary
+ local GOT entry.
+ * ld-mips-elf/tlsdyn-o32-2.got: Likewise.
+ * ld-mips-elf/tlsdyn-o32-3.d: Likewise.
+ * ld-mips-elf/tlsdyn-o32-3.got: Likewise.
+ * ld-mips-elf/vxworks1-lib.dd: Likewise.
+ * ld-mips-elf/vxworks1-lib.rd: Likewise.
+
+2007-08-13 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/relbrlt.s (.text.pad2): Adjust space.
+ * ld-powerpc/relbrlt.d: Update.
+ * ld-powerpc/tlsexe.d: Update.
+ * ld-powerpc/tlsexe.g: Update.
+ * ld-powerpc/tlsexe.r: Update.
+ * ld-powerpc/tlsexetoc.d: Update.
+ * ld-powerpc/tlsexetoc.g: Update.
+ * ld-powerpc/tlsexetoc.r: Update.
+ * ld-powerpc/tlsso.d: Update.
+ * ld-powerpc/tlsso.g: Update.
+ * ld-powerpc/tlsso.r: Update.
+ * ld-powerpc/tlstocso.d: Update.
+ * ld-powerpc/tlstocso.g: Update.
+
+2007-08-06 Kai Tietz <kai.tietz@onevision.com>
+
+ PR ld/4877
+ * ld-pe/pe.exp: Special diff file for x86_64-mingw target.
+ * ld-pe/secrel_64.d: New.
+
+2007-08-03 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-srec/srec.exp: XFAIL for powerpc*-*-*.
+
+2007-08-01 Adam Nemet <anemet@caviumnetworks.com>
+
+ * ld-mips-elf/reloc-4.s, ld-mips-elf/reloc-4.d,
+ ld-mips-elf/reloc-5.s, ld-mips-elf/reloc-5.d: New tests.
+ * ld-mips-elf/mips-elf.exp: Invoke them.
+
+2007-07-29 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/weak-dyn-1.rd: Adjust.
+
+2007-07-25 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-cdtest/cdtest-foo.cc (strncpy): Fix parameter name.
+
+2007-07-24 Nick Clifton <nickc@redhat.com>
+
+ * ld-arm/arm-elf.exp: Move EABI attribute tests into EABI only
+ section.
+
+2007-07-23 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-elf/weak-dyn-1a.s, ld-elf/weak-dyn-1b.s, ld-elf/weak-dyn-1.ld,
+ * ld-elf/weak-dyn-1.rd: New test.
+ * ld-elf/elf.exp: Run it.
+
+2007-07-13 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-scripts/assert.t: Tweak to avoid relying on empty's VMA being
+ zero.
+
+2007-07-10 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elfvers/vers.exp: Add tests for --defsym.
+
+ * ld-elfvers/vers32.map: Likewise.
+ * ld-elfvers/vers32a.c: Likewise.
+ * ld-elfvers/vers32a.dsym: Likewise.
+ * ld-elfvers/vers32a.ver: Likewise.
+ * ld-elfvers/vers32b.c: Likewise.
+ * ld-elfvers/vers32b.dsym: Likewise.
+ * ld-elfvers/vers32b.ver: Likewise.
+ * ld-elfvers/vers32c.dsym: Likewise.
+ * ld-elfvers/vers32c.ver: Likewise.
+ * ld-elfvers/vers32d.ver: Likewise.
+
+2007-07-06 Nick Clifton <nickc@redhat.com>
+
+ * lib/default.exp: Update copyright notice to refer to GPLv3.
+ * config/default.exp, ld-alpha/alpha.exp, ld-arm/arm-elf.exp,
+ ld-auto-import/auto-import.exp, ld-bootstrap/bootstrap.exp,
+ ld-cdtest/cdtest.exp, ld-checks/checks.exp, ld-cris/cris.exp,
+ ld-crx/crx.exp, ld-cygwin/exe-export.exp, ld-d10v/d10v.exp,
+ ld-discard/discard.exp, ld-elf/elf.exp, ld-elf/exclude.exp,
+ ld-elf/frame.exp, ld-elf/sec64k.exp, ld-elf/binutils.exp,
+ ld-elf/tls_common.exp, ld-elf/shared.exp, ld-elf/dwarf.exp,
+ ld-elf/wrap.exp, ld-elfcomm/elfcomm.exp, ld-elfvers/vers.exp,
+ ld-elfvsb/elfvsb.exp, ld-elfweak/elfweak.exp, ld-xc16x/xc16x.exp,
+ ld-fastcall/fastcall.exp, ld-frv/tls.exp, ld-h8300/h8300.exp,
+ ld-i386/i386.exp, ld-ia64/ia64.exp, ld-linkonce/linkonce.exp,
+ ld-m68hc11/m68hc11.exp, ld-maxq/maxq.exp,
+ ld-mips-elf/mips-elf-flags.exp, ld-mips-elf/mips-elf.exp,
+ ld-mmix/mmix.exp, ld-pe/pe.exp, ld-pe/direct.exp,
+ ld-powerpc/powerpc.exp, ld-s390/s390.exp, ld-scripts/align.exp,
+ ld-scripts/alignof.exp, ld-scripts/assert.exp,
+ ld-scripts/crossref.exp, ld-scripts/data.exp,
+ ld-scripts/default-script.exp, ld-scripts/defined.exp,
+ ld-scripts/empty-address.exp, ld-scripts/empty-aligned.exp,
+ ld-scripts/empty-orphan.exp, ld-scripts/expr.exp,
+ ld-scripts/extern.exp, ld-scripts/map-address.exp,
+ ld-scripts/overlay-size.exp, ld-scripts/phdrs.exp,
+ ld-scripts/phdrs2.exp, ld-scripts/provide.exp,
+ ld-scripts/script.exp, ld-scripts/size.exp, ld-scripts/sizeof.exp,
+ ld-scripts/sort.exp, ld-scripts/weak.exp,
+ ld-selective/sel-dump.exp, ld-selective/selective.exp,
+ ld-sh/arch/arch.exp, ld-sh/sh64/rd-sh64.exp, ld-sh/sh64/relax.exp,
+ ld-sh/sh64/relfail.exp, ld-sh/sh64/sh64.exp, ld-sh/rd-sh.exp,
+ ld-sh/sh.exp, ld-shared/shared.exp, ld-sparc/sparc.exp,
+ ld-srec/srec.exp, ld-undefined/undefined.exp,
+ ld-undefined/weak-undef.exp, ld-versados/versados.exp,
+ ld-x86-64/x86-64.exp, ld-xstormy16/xstormy16.exp,
+ ld-xtensa/coalesce.exp, ld-xtensa/lcall.exp, ld-pie/pie.exp,
+ ld-m68k/m68k.exp, ld-mep/mep.exp, ld-spu/spu.exp,
+ ld-vxworks/vxworks.exp, lib/ld-lib.exp: Likewise.
+ * ld-frv/frv-elf.exp: Add copyright notice.
+ * ld-libs/libs.exp, ld-sh/sh-vxworks.exp,
+ ld-scripts/dynamic-sections.exp, ld-v850.v850.exp: Likewise.
+
+2007-07-05 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/powerpc.exp: Disable for lynxos and nto.
+
+2007-07-03 Joseph Myers <joseph@codesourcery.com>
+
+ * ld-arm/attr-merge-2a.s, ld-arm/attr-merge-2b.s,
+ ld-arm/attr-merge-2.attr: New.
+ * ld-arm/arm-elf.exp (armelftests): Add new test.
+
+2007-07-02 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-scripts/alignof.exp: Skip on non-elf
+
+2007-06-29 Joseph Myers <joseph@codesourcery.com>
+
+ * ld-powerpc/attr-gnu-4-0.s, ld-powerpc/attr-gnu-4-00.d,
+ ld-powerpc/attr-gnu-4-01.d, ld-powerpc/attr-gnu-4-02.d,
+ ld-powerpc/attr-gnu-4-1.s, ld-powerpc/attr-gnu-4-10.d,
+ ld-powerpc/attr-gnu-4-11.d, ld-powerpc/attr-gnu-4-12.d,
+ ld-powerpc/attr-gnu-4-13.d, ld-powerpc/attr-gnu-4-2.s,
+ ld-powerpc/attr-gnu-4-20.d, ld-powerpc/attr-gnu-4-21.d,
+ ld-powerpc/attr-gnu-4-22.d, ld-powerpc/attr-gnu-4-3.s,
+ ld-powerpc/attr-gnu-4-31.d: New.
+ * ld-powerpc/powerpc.exp: Run these new tests.
+
+2007-06-29 Joseph Myers <joseph@codesourcery.com>
+
+ * ld-mips-elf/attr-gnu-4-0.s, ld-mips-elf/attr-gnu-4-00.d,
+ ld-mips-elf/attr-gnu-4-01.d, ld-mips-elf/attr-gnu-4-02.d,
+ ld-mips-elf/attr-gnu-4-03.d, ld-mips-elf/attr-gnu-4-1.s,
+ ld-mips-elf/attr-gnu-4-10.d, ld-mips-elf/attr-gnu-4-11.d,
+ ld-mips-elf/attr-gnu-4-12.d, ld-mips-elf/attr-gnu-4-13.d,
+ ld-mips-elf/attr-gnu-4-14.d, ld-mips-elf/attr-gnu-4-2.s,
+ ld-mips-elf/attr-gnu-4-20.d, ld-mips-elf/attr-gnu-4-21.d,
+ ld-mips-elf/attr-gnu-4-22.d, ld-mips-elf/attr-gnu-4-23.d,
+ ld-mips-elf/attr-gnu-4-3.s, ld-mips-elf/attr-gnu-4-30.d,
+ ld-mips-elf/attr-gnu-4-31.d, ld-mips-elf/attr-gnu-4-32.d,
+ ld-mips-elf/attr-gnu-4-33.d, ld-mips-elf/attr-gnu-4-4.s,
+ ld-mips-elf/attr-gnu-4-41.d: New.
+ * ld-mips-elf/mips-elf.exp: Run these new tests.
+
+2007-06-29 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm-elf.exp (armelftests): Add callweak.
+ * ld-arm/callweak.d: New test.
+ * ld-arm/callweak.s: New test.
+
+2007-06-28 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/4701
+ * ld-elf/noload-2.d: New.
+
+2007-06-29 H.J. Lu <hjl@gnu.org>
+
+ * ld-scripts/assert.t: Discard .reginfo sections.
+
+2007-06-26 Joseph Myers <joseph@codesourcery.com>
+
+ * ld-arm/attr-merge.s, ld-arm/attr-merge.attr: New.
+ * ld-arm/arm-elf.exp (armelftests): Add new test.
+
+2007-06-25 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/mips16-local-stubs-1.s,
+ * ld-mips-elf/mips16-local-stubs-1.d: New tests.
+ * ld-mips-elf/mips-elf.exp: Run them.
+
+2007-06-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/4590
+ * ld-ia64/merge1.d: New.
+ * ld-ia64/merge1.s: Likewise.
+ * ld-ia64/merge2.d: Likewise.
+ * ld-ia64/merge2.s: Likewise.
+ * ld-ia64/merge3.d: Likewise.
+ * ld-ia64/merge3.s: Likewise.
+ * ld-ia64/merge4.d: Likewise.
+ * ld-ia64/merge4.s: Likewise.
+ * ld-ia64/merge5.d: Likewise.
+ * ld-ia64/merge5.s: Likewise.
+
+2007-06-18 Andreas Schwab <schwab@suse.de>
+
+ * ld-scripts/cross3.t: Add .opd section.
+
+2007-06-18 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-scripts/alignof.s: New.
+ * ld-scripts/alignof.t: New
+ * ld-scripts/alignof.exp: New.
+
+2007-06-14 Alan Modra <alan@grove.modra.org>
+
+ * ld-spu/ovl.d: Update.
+ * ld-spu/ovl2.d: Update.
+
+2007-05-24 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-scripts/assert.t: Add additional cases.
+ * ld-scripts/extern.t, ld-scripts/extern.s,
+ ld-scripts/extern.exp: New.
+
+2007-05-22 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm-pic-veneer.d: Update expected output.
+ * ld-arm/arm-call.d: Ditto.
+
+2007-05-22 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm-mixed-lib.d: Update expected output.
+ * ld-arm/arm-app.d: Ditto.
+ * ld-arm/mixed-app.d: Ditto.
+ * ld-arm/arm-lib-plt32.d: Ditto.
+ * ld-arm/arm-app-abs32.d: Ditto.
+ * ld-arm/mixed-app-v5.d: Ditto.
+ * ld-arm/armthumb-lib.d: Ditto.
+ * ld-arm/arm-lib.d: Ditto.
+
+2007-05-21 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-arm/emit-relocs1.d, ld-arm/emit-relocs1.s,
+ * ld-arm/emit-relocs1-vxworks.d: New tests.
+ * ld-arm/arm-elf.exp: Run them.
+ * ld-arm/vxworks1.dd: Expect proper branch targets.
+
+2007-05-18 Joseph Myers <joseph@codesourcery.com>
+
+ * ld-elf/group.ld: Discard .reginfo.
+
+2007-05-18 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm-call.d: Update expected output.
+
+2007-05-17 Paul Brook <paul@codesourcery.com>
+
+ * ld-elf/multibss1.s: Use %nobits instead of @nobits.
+
+2007-05-17 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-m68k/merge-error-1a.d: Mismatch is an error.
+ * ld-m68k/merge-error-1b.d: Likewise.
+ * ld-m68k/merge-error-1c.d: Likewise.
+ * ld-m68k/merge-error-1d.d: Likewise.
+ * ld-m68k/merge-error-1e.d: Likewise.
+
+2007-05-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/4504
+ * ld-elf/data1.c: New file.
+ * ld-elf/data1.h: Likewise.
+ * ld-elf/dynbss1.c: Likewise.
+ * ld-elf/pass.out: Likewise.
+
+ * ld-elf/shared.exp (build_tests): Add "Build libdata1.so".
+ (run_tests): Add "Run with libdata1.so".
+
+2007-05-15 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-arm/vxworks1.ld: Swap .bss and .data.
+ * ld-arm/vxworks1-lib.rd: Update accordingly.
+ * ld-arm/vxworks1-lib.td: New test.
+ * ld-arm/arm-elf.exp: Run it.
+
+ * ld-i386/vxworks1.ld: Swap .bss and .data.
+ * ld-i386/vxworks1-lib.rd: Update accordingly.
+ * ld-i386/vxworks1-lib.td: New test.
+ * ld-i386/i386.exp: Run it.
+
+ * ld-mips-elf/vxworks1.ld: Swap .bss and .data.
+ * ld-mips-elf/vxworks1-lib.rd: Update accordingly.
+ * ld-mips-elf/vxworks1.rd: Likewise.
+
+ * ld-powerpc/vxworks1.ld: Swap .bss and .data.
+ * ld-powerpc/vxworks1-lib.rd: Update accordingly.
+ * ld-powerpc/vxworks1-lib.td: New test.
+ * ld-powerpc/powerpc.exp: Run it.
+
+ * ld-sh/vxworks1.ld: Swap .bss and .data.
+ * ld-sh/vxworks1-lib.rd: Update accordingly.
+ * ld-sh/vxworks1-lib.td: New test.
+ * ld-sh/sh-vxworks.exp: Run it.
+
+ * ld-sparc/vxworks1.ld: Swap .bss and .data.
+ * ld-sparc/vxworks1-lib.rd: Update accordingly.
+ * ld-sparc/vxworks1-lib.td: New test.
+ * ld-sparc/sparc.exp: Run it.
+
+2007-05-15 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/vxworks1-lib.rd: Expect the GOT relocation to be
+ against symbol 0.
+
+2007-05-15 Mark Shinwell <shinwell@codesourcery.com>
+
+ * ld-arm/arm-elf.exp: Add jump19 testcase.
+ * ld-arm/jump19.d: New.
+ * ld-arm/jump19.s: New.
+
+2007-05-14 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-sh/vxworks1.dd: Remove hexadecimal prefixes from constant pool
+ contents. Consistently use "!" as the comment character.
+ Consistently use _PROCEDURE_LINKAGE_TABLE_ in the first PLT entry.
+ * ld-sh/vxworks1-le.dd: Likewise.
+ * ld-sh/vxworks1-lib.dd: Likewise.
+ * ld-sh/vxworks1-lib-le.dd: Likewise.
+ * ld-sh/vxworks3.dd: Likewise.
+ * ld-sh/vxworks3-le.dd: Likewise.
+
+2007-05-14 Andreas Schwab <schwab@suse.de>
+
+ * ld-elf/dl2a.list: New file.
+ * ld-elf/shared.exp: Add test using --dynamic-list=dl2a.list.
+
+2007-05-10 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-arm/vxworks1-lib.dd: Expect "push" instead of stmdb and
+ "pop" instead of ldmia. Don't require specific symbolic addresses
+ for in-text addresses. Expect data to be rendered as .words rather
+ than disassembled.
+ * ld-arm/vxworks1.dd: Likewise.
+
+2007-05-10 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-elf/multibss1.d, ld-elf/multibss1.s: New test.
+
+2007-04-27 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-m68k/plt1-isac.d: New.
+ * ld-m68k/m68k.exp: Add it.
+
+2007-04-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/4430
+ * ld-i386/tlsbin.dd: Updated.
+ * ld-i386/tlsbindesc.dd: Likewise
+ * ld-i386/tlsdesc.dd: Likewise
+ * ld-i386/tlsgdesc.dd: Likewise
+ * ld-i386/tlsnopic.dd: Likewise
+ * ld-i386/tlspic.dd: Likewise
+ * ld-x86-64/tlsbin.dd: Likewise
+ * ld-x86-64/tlsbindesc.dd: Likewise
+ * ld-x86-64/tlsdesc.dd: Likewise
+ * ld-x86-64/tlsgdesc.dd: Likewise
+ * ld-x86-64/tlspic.dd: Likewise
+
+2007-04-24 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-linkonce/x.s: Use .gcc_except_table instead of .eh_frame
+ to test that entry for deleted function is zeroed. Add a
+ somewhat closer to normal .eh_frame to test that fde for
+ deleted function is removed.
+ * ld-linkonce/y.s: Likewise.
+ * ld-linkonce/zeroeh.ld: Place .gcc_except_table too.
+ * ld-linkonce/zeroehl32.d: Update.
+
+2007-04-21 Richard Earnshaw <rearnsha@arm.com>
+
+ * ld-arm/arm-app-abs32.d: Convert to unified syntax.
+ * ld-arm/arm-app.d: Likewise.
+ * ld-arm/arm-lib-plt32.d: Likewise.
+ * ld-arm/arm-lib.d: Likewise.
+ * ld-arm/arm-static-app.d: Likewise.
+ * ld-arm/armthumb-lib.d: Likewise.
+ * ld-arm/mixed-app-v5.d: Likewise.
+ * ld-arm/mixed-app.d: Likewise.
+ * ld-arm/mixed-lib.d: Likewise.
+
+2007-04-18 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-spu/ovl.lnk: Use OVERLAY keyword.
+
+2007-04-17 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/preempt-app.s: New test.
+ * ld-arm/preempt-app.sym: New.
+ * ld-arm/arm-elf.exp: Add preempt-app.
+
+2007-04-12 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/vxworks1-lib.td: New test.
+ * ld-mips-elf/mips-elf.exp: Run it.
+
+2007-04-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/4304
+ * ld-i386/i386.exp: Run "warn1".
+
+ * ld-i386/warn1.d: New file.
+ * ld-i386/warn1.s: Likewise.
+
+2007-04-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-i386/combreloc.d: Remove #target: i?86-*-*.
+ * ld-i386/reloc.d: Likewise.
+
+2007-04-05 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-spu/ovl2.d: Update.
+
+2007-04-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/4090
+ * ld-elf/expr1.d: New file.
+ * ld-elf/expr1.s: Likewise.
+ * ld-elf/expr1.t: Likewise.
+
+2007-03-29 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-libs/lib-1.s, ld-libs/lib-2.s, ld-libs/lib-2.d,
+ * ld-libs/libs.exp: New files.
+
+2007-03-28 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-vxworks/rpath-1.s, ld-vxworks/rpath-1.d,
+ * ld-vxworks/vxworks.exp: New files.
+
+2007-03-27 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/note-1.s: Increase .foo size.
+
+2007-03-27 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-spu/spu.exp (embed_test): New.
+ * ld-spu/ear.s: New.
+ * ld-spu/ear.d: New.
+ * ld-spu/embed.rd: New.
+ * ld-spu/ovl2.s: New.
+ * ld-spu/ovl2.d: New.
+
+2007-03-24 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/overlay.d: -u symbols we want to see in the output.
+
+2007-03-23 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-spu/ovl.s (f4_a2): Tail call.
+ * ld-spu/ovl.d: Add --emit-relocs to ld options, -r to objdump.
+ Update expected results.
+
+2007-03-23 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-sh/ld-r-1.d: Update.
+ * ld-sh/shared-1.d: Likewise.
+
+2007-03-23 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/elf.exp: Add "--local-store 0:0" to LDFLAGS for spu.
+
+2007-03-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/4210
+ * ld-pe/image_size.d: New file.
+ * ld-pe/image_size.s: Likewise.
+ * ld-pe/image_size.t: Likewise.
+
+ * ld-pe/pe.exp: Run image_size.
+
+2007-03-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/4007
+ * ld-elf/note-1.d: New file.
+ * ld-elf/note-1.s: Likewise.
+ * ld-elf/note-1.t: Likewise.
+ * ld-i386/alloc.d: Likewise.
+ * ld-i386/alloc.s: Likewise.
+ * ld-i386/alloc.t: Likewise.
+
+ * ld-i386/i386.exp: Run "alloc".
+
+2007-03-20 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm-elf.exp (ld-arm/arm-elf.exp): Add arm-pic-veneer.
+ * ld-arm/arm-pic-veneer.d: New test.
+ * ld-arm/arm-pic-veneer.s: New test.
+
+2007-03-08 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-elf/extract-symbol-1.ld (data): Explicitly set the start address
+ to 0.
+
+2007-03-07 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/extract-symbol-1sec.d: xfail hppa.
+ * ld-elf/extract-symbol-1sym.d: xfail hppa.
+
+2007-03-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR 3958
+ * ld-elf/linkonce1.d: New.
+ * ld-elf/linkonce1a.s: New.
+ * ld-elf/linkonce1b.s: New.
+ * ld-elf/linkonce2.d: New.
+ * ld-i386/pcrel16abs.d: New.
+ * ld-i386/pcrel16abs.s: New.
+ * ld-i386/i386.exp: Run it.
+
+2007-03-06 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/4144
+ * ld-elf/nobits-1.d: New file.
+ * ld-elf/nobits-1.s: Likewise.
+ * ld-elf/nobits-1.t: Likewise.
+
+2007-03-02 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-elf/binutils.exp: Revert last change.
+
+2007-03-01 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-elf/extract-symbol-1sym.d, ld-elf/extract-symbol-1sec.d,
+ * ld-elf/extract-symbol-1.s, ld-elf/extract-symbol-1.ld: New tests.
+ * ld-elf/binutils.exp: Run them.
+
+2007-02-28 Nick Clifton <nickc@redhat.com>
+
+ PR ld/3796
+ * ld-arm/arm-elf.exp (armelftests): Move "Thumb-2 BL" test into...
+ (armeabitests): ... here, a new array for EABI specific tests.
+ (armelftests): Add extra command line options for VFP11 fix tests
+ and thumb shared library test.
+
+2007-02-22 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm-elf.exp (armelftests): Add gc-unwind.h.
+ * ld-arm/gc-unwind.s: New file.
+ * ld-arm/gc-unwind.d: New file.
+
+2007-02-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3953
+ * ld-elf/beginwarn.c: New file.
+ * ld-elf/warn.out: Likewise.
+
+ * ld-elf/shared.exp (build_tests): Add "Build warn libbar.so".
+ (run_tests): Add "Run warn with versioned libfoo.so".
+
+ * lib/ld-lib.exp (default_ld_relocate): Make exec_output global
+ and remove target first.
+ (default_ld_link): Likewise.
+ (default_ld_simple_link): Likewise.
+ (run_ld_link_exec_tests): Take an optional linker warning and
+ check it.
+ (default_ld_link): Check pruned linker output.
+
+2007-02-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-scripts/default-script1.d: Expect extra symbols.
+ * ld-scripts/default-script2.d: Likewise.
+ * ld-scripts/default-script3.d: Likewise.
+ * ld-scripts/default-script4.d: Likewise.
+
+2007-02-13 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/relbrlt.d: Update.
+ * ld-powerpc/tlsexe.r: Update.
+ * ld-powerpc/tlsexetoc.r: Update.
+ * ld-powerpc/tlsso.r: Update.
+ * ld-powerpc/tlstocso.r: Update.
+
+2007-02-12 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/relbrlt.d: Update.
+
+2007-02-06 Nick Clifton <nickc@redhat.com>
+
+ PR ld/3805
+ * ld-elf/sec64k.exp: Expect the relocatable version of this test
+ to fail for the m32r because it creates both .rel and .rela
+ sections.
+
+2007-02-05 Dave Brolley <brolley@redhat.com>
+
+ * ld-undefined/undefined.exp: XFAIL the undefined test
+ * ld-mep: New, with content.
+
+2007-02-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-i386/pcrel16.d: Undo the last change.
+ * ld-x86-64/pcrel16.d: Likewise.
+
+2007-02-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-i386/pcrel16.d: Updated.
+ * ld-x86-64/pcrel16.d: Likewise.
+
+2007-02-01 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-scripts/default-script.exp: Add "--local-store 0:0" to
+ LDFLAGS for spu.
+
+2007-01-29 Julian Brown <julian@codesourcery.com>
+
+ * ld-arm/arm-elf.exp: Add VFP11 tests.
+ * ld-arm/vfp11-fix-none.s: New file.
+ * ld-arm/vfp11-fix-none.d: Expected disassembly of above.
+ * ld-arm/vfp11-fix-scalar.s: New file.
+ * ld-arm/vfp11-fix-scalar.d: Expected disassembly of above.
+ * ld-arm/vfp11-fix-vector.s: New file.
+ * ld-arm/vfp11-fix-vector.d: Expected disassembly of above.
+
+2007-01-23 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-elf/header.d: Reduce page size, restrict to linux & vxworks
+ * ld-elf/header.s: Adjust.
+ * ld-elf/header.t: Reduce initial offset.
+
+2007-01-23 Andreas Schwab <schwab@suse.de>
+
+ * lib/ld-lib.exp (run_dump_test): Don't prematurely remove
+ assembler output.
+
+2007-01-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/dl6.c: New file.
+ * ld-elf/dl6a.out: Likewise.
+ * ld-elf/dl6amain.c: Likewise.
+ * ld-elf/dl6b.out: Likewise.
+ * ld-elf/dl6bmain.c: Likewise.
+ * ld-elf/dl6cmain.c: Likewise.
+ * ld-elf/dl6dmain.c: Likewise.
+
+ * ld-elf/shared.exp: Add new tests for -Bsymbolic,
+ -Bsymbolic-functions, --dynamic-list-data and
+ --dynamic-list-cpp-new.
+
+2007-01-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/maxpage3.t: New file.
+ * ld-elf/maxpage3a.d: Likewise.
+ * ld-elf/maxpage3b.d: Likewise.
+ * ld-elf/maxpage3c.d: Likewise.
+
+2007-01-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-scripts/default-script.exp: New file.
+ * ld-scripts/default-script.s: Likewise.
+ * ld-scripts/default-script.t: Likewise.
+ * ld-scripts/default-script1.d: Likewise.
+ * ld-scripts/default-script2.d: Likewise.
+ * ld-scripts/default-script3.d: Likewise.
+ * ld-scripts/default-script4.d: Likewise.
+
+2007-01-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/1283
+ * lib/ld-lib.exp (run_dump_test): Remove output file first.
+
+2007-01-17 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/header.d: Adjust for .text section with 16byte
+ alignment.
+
+2007-01-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/dl1main.c (main): Fix a typo.
+
+2007-01-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3831
+ * ld-elf/del.cc: New.
+ * ld-elf/dl5.cc: Likewise.
+ * ld-elf/dl5.out: Likewise.
+ * ld-elf/new.cc: Likewise.
+
+ * ld-elf/shared.exp: Add tests for --dynamic-list-data and
+ --dynamic-list-cpp-new.
+
+2007-01-12 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-elf/header.d: Allow arbitrary lines between "Program Header"
+ and "Sections". Only run on *-*-linux*.
+
+2007-01-11 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-elf/header.d: New.
+ * ld-elf/header.t: New.
+ * ld-elf/header.s: New.
+
+2007-01-08 Kai Tietz <kai.tietz@onevision.com>
+
+ * ld-fastcall/fastcall.exp: Renamed target x86_64-*-mingw64 to
+ x86_64-*-mingw*.
+ * ld-pe/pe.exp: Ditto.
+ * ld-scripts/align.exp: Ditto.
+ * ld-scripts/defined.exp: Ditto.
+ * ld-scripts/provide.exp: Ditto.
+ * ld-scripts/weak.exp: Ditto.
+
+2007-01-06 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-scripts/expr.exp: New.
+ * ld-scripts/expr1.s: New.
+ * ld-scripts/expr1.d: New.
+ * ld-scripts/expr1.t: New.
+
+For older changes see ChangeLog-2006
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/binutils-2.21/ld/testsuite/ChangeLog-2008 b/binutils-2.21/ld/testsuite/ChangeLog-2008
new file mode 100644
index 0000000..8da1d84
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ChangeLog-2008
@@ -0,0 +1,1010 @@
+2008-12-23 Jon Beniston <jon@beniston.com>
+
+ * ld-elf/merge.d: Indicate test fails on LM32.
+
+2008-12-23 Hans-Peter Nilsson <hp@axis.com>
+
+ * lib/ld-lib.exp (run_dump_test): New option ld_after_inputfiles.
+ * ld-cris/libdso-1c.d, ld-cris/expdref2.s, ld-cris/libdso-15b.d,
+ ld-cris/expdyn1w.s, ld-cris/libdso-1d.d, ld-cris/tls-ie-78.d: New
+ tests.
+
+2008-12-23 Nick Clifton <nickc@redhat.com>
+
+ * ld-i386/i386.exp: Do not run ifunc test.
+ * ld-i386/ifunc.s: Delete.
+ * ld-i386/ifunc.d: Delete.
+ * ld-x86-64/x86-64.exp: Do not run ifunc test.
+ * ld-x86-64/ifunc.s: Delete.
+ * ld-x86-64/ifunc.d: Delete.
+
+2008-12-20 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/tls-err-77.d, ld-cris/tls-gc-79.d, ld-cris/tls-ie-8e.s,
+ ld-cris/tls-ie-8e1.d: New tests.
+
+2008-12-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-i386/tlsld1.dd: Remove trailing white spaces after nop.
+
+2008-12-17 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/expalltst3, ld-cris/expdyn2.s, ld-cris/libdso-15.d: New
+ tests.
+
+2008-12-15 Richard Earnshaw <rearnsha@arm.com>
+
+ * ld-arm/vfp11-fix-scalar.d: Disassembly of VFP instructions now uses
+ unified syntax.
+ * ld-arm/vfp11-fix-vector.d: Likewise.
+
+2008-12-15 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/libdso-13b.d: New test.
+
+ * ld-cris/hidedsofns2468, ld-cris/libdso-12b.d,
+ ld-cris/libdso-12c.d, ld-cris/libdso-1b.d, ld-cris/dso-1b.s: New
+ tests.
+
+ * ld-cris/got7.s: Correct .size expression.
+ * ld-cris/tls-e-20a.d: Adjust accordingly.
+
+2008-12-04 Nick Clifton <nickc@redhat.com>
+
+ * ld-x86-64/ifunc.d: New test (of STT_IFUNC for x86_64).
+ * ld-x86-64/ifunc.s: Source file for new test.
+ * ld-x86-64/x86-64.exp: Run the new test.
+ * ld-i386/ifunc.d: Tidy up regexps for expected output.
+
+2008-12-03 Nick Clifton <nickc@redhat.com>
+
+ * ld-mips-elf/reloc-1-n32.d: Updated expected output for reloc
+ descriptions.
+ * ld-mips-elf/reloc-1-n64.d: Likewise.
+ * ld-i386/ifunc.d: New test.
+ * ld-i386/ifunc.s: Source file for the new test.
+ * ld-i386/i386.exp: Run the new test.
+
+2008-11-25 Joseph Myers <joseph@codesourcery.com>
+
+ * ld-arm/thumb2-bl-undefweak.d, ld-arm/thumb2-bl-undefweak.s: New.
+ * ld-arm/arm-elf.exp: Run thumb2-bl-undefweak test.
+
+2008-11-25 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/got7.s, ld-cris/init.s, ld-cris/pic-gc-72.d,
+ ld-cris/pic-gc-72.s, ld-cris/pic-gc-73.d, ld-cris/pic-gc-73.s,
+ ld-cris/tls-dso-x1x2-1.d, ld-cris/tls-dso-xz-1.d,
+ ld-cris/tls-dtprelm.s, ld-cris/tls-e-20.d, ld-cris/tls-e-20a.d,
+ ld-cris/tls-e-21.d, ld-cris/tls-e-22.d, ld-cris/tls-e-23.d,
+ ld-cris/tls-e-66.d, ld-cris/tls-err-20x.d, ld-cris/tls-err-24.d,
+ ld-cris/tls-err-25.d, ld-cris/tls-err-26.d, ld-cris/tls-err-27.d,
+ ld-cris/tls-err-28.d, ld-cris/tls-err-29.d, ld-cris/tls-err-31.d,
+ ld-cris/tls-err-33.d, ld-cris/tls-err-35.d, ld-cris/tls-err-37.d,
+ ld-cris/tls-err-39.d, ld-cris/tls-err-40.d, ld-cris/tls-err-41.d,
+ ld-cris/tls-err-43.d, ld-cris/tls-err-44.d, ld-cris/tls-err-45.d,
+ ld-cris/tls-err-47.d, ld-cris/tls-err-48.d, ld-cris/tls-err-49.d,
+ ld-cris/tls-err-51.d, ld-cris/tls-err-52.d, ld-cris/tls-err-53.d,
+ ld-cris/tls-err-55.d, ld-cris/tls-err-55.s, ld-cris/tls-err-56.d,
+ ld-cris/tls-err-56.s, ld-cris/tls-err-62.d, ld-cris/tls-err-62.s,
+ ld-cris/tls-err-65.d, ld-cris/tls-err-67.d, ld-cris/tls-gc-68.d,
+ ld-cris/tls-gc-69.d, ld-cris/tls-gc-70.d, ld-cris/tls-gc-71.d,
+ ld-cris/tls-gc-71.s, ld-cris/tls-gc-75.d, ld-cris/tls-gc-76.d,
+ ld-cris/tls-gc-76.s, ld-cris/tls-gd-1.d, ld-cris/tls-gd-1.s,
+ ld-cris/tls-gd-1h.d, ld-cris/tls-gd-2.d, ld-cris/tls-gd-2.s,
+ ld-cris/tls-gd-2h.d, ld-cris/tls-gd-3.d, ld-cris/tls-gd-3.s,
+ ld-cris/tls-gd-3h.d, ld-cris/tls-gdgotrelm.s, ld-cris/tls-global-74.d,
+ ld-cris/tls-gottprelm.s, ld-cris/tls-hx.s, ld-cris/tls-hx1x2.s,
+ ld-cris/tls-ie-10.d, ld-cris/tls-ie-10.s, ld-cris/tls-ie-11.d,
+ ld-cris/tls-ie-11.s, ld-cris/tls-ie-8.d, ld-cris/tls-ie-8.s,
+ ld-cris/tls-ie-9.d, ld-cris/tls-ie-9.s, ld-cris/tls-ld-4.d,
+ ld-cris/tls-ld-4.s, ld-cris/tls-ld-5.d, ld-cris/tls-ld-5.s,
+ ld-cris/tls-ld-6.d, ld-cris/tls-ld-6.s, ld-cris/tls-ld-7.d,
+ ld-cris/tls-ld-7.s, ld-cris/tls-ldgd-14.d, ld-cris/tls-ldgd-14.s,
+ ld-cris/tls-ldgd-15.d, ld-cris/tls-ldgd-15.s, ld-cris/tls-ldgde-14.d,
+ ld-cris/tls-ldgde-15.d, ld-cris/tls-ldgdex-14.d,
+ ld-cris/tls-ldgdex-15.d, ld-cris/tls-ldgdx-14.d,
+ ld-cris/tls-ldgdx-15.d, ld-cris/tls-le-12.d, ld-cris/tls-le-12.s,
+ ld-cris/tls-le-12s.d, ld-cris/tls-le-12s.s, ld-cris/tls-le-13.d,
+ ld-cris/tls-le-13.s, ld-cris/tls-le-13s.d, ld-cris/tls-le-13s.s,
+ ld-cris/tls-legd-16.d, ld-cris/tls-legd-16.s, ld-cris/tls-legd-17.d,
+ ld-cris/tls-legdx-16.d, ld-cris/tls-legdx-17.d, ld-cris/tls-leie-18.d,
+ ld-cris/tls-leie-19.d, ld-cris/tls-leie-19.s, ld-cris/tls-local-54.d,
+ ld-cris/tls-local-54.s, ld-cris/tls-local-57.d,
+ ld-cris/tls-local-57.s, ld-cris/tls-local-58.d,
+ ld-cris/tls-local-58.s, ld-cris/tls-local-59.d,
+ ld-cris/tls-local-59.s, ld-cris/tls-local-60.d,
+ ld-cris/tls-local-61.d, ld-cris/tls-local-63.d,
+ ld-cris/tls-local-64.d, ld-cris/tls-ok-30.d, ld-cris/tls-ok-32.d,
+ ld-cris/tls-ok-34.d, ld-cris/tls-ok-36.d, ld-cris/tls-tprelm.s,
+ ld-cris/tls-und-38.d, ld-cris/tls-und-42.d, ld-cris/tls-und-46.d,
+ ld-cris/tls-und-50.d, ld-cris/tls-x.s, ld-cris/tls-x1x2.s,
+ ld-cris/tls-z.s, ld-cris/tls128.s, ld-cris/tls128g.s: New tests.
+
+ * ld-cris/start1.s: Prepend register name with $.
+
+ * ld-cris/dso-1.s, ld-cris/libdso-1.d, ld-cris/libdso-11.d,
+ ld-cris/libdso-2.d, ld-cris/pv32.s, ld-cris/undef1.d: Correct
+ .size expressions and adjust expected output accordingly.
+
+2008-11-23 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/badgotr1.d: Robustify regexp.
+
+2008-10-29 Nick Clifton <nickc@redhat.com>
+
+ * ld-gc/gc.c (dummy_func): New function - present so that
+ underscore prefixed aliases can be created of the used_func and
+ main functions.
+
+2008-10-10 Nathan Froyd <froydnj@codesourcery.com>
+
+ * ld-powerpc/gnu-attr-12-1.s: New file.
+ * ld-powerpc/gnu-attr-12-2.s: New file.
+ * ld-powerpc/gnu-attr-12-11.d: New file.
+ * ld-powerpc/gnu-attr-12-21.d: New file.
+ * ld-powerpc/powerpc.exp: Run new dump tests.
+
+2008-10-07 Nick Clifton <nickc@redhat.com>
+
+ * ld-ia64/tlsbin.rd: Update expected output now that --wide does
+ not truncate section names.
+ * ld-ia64/tlspic.rd: Likewise.
+
+2008-10-06 Tom Tromey <tromey@redhat.com>
+
+ * ld-elf/eh1.d, ld-elf/eh2.d, ld-elf/eh3.d, ld-elf/eh4.d,
+ ld-elf/eh5.d, ld-elf/eh6.d, ld-mips-elf/eh-frame1-n32.d,
+ ld-mips-elf/eh-frame1-n64.d, ld-mips-elf/eh-frame2-n32.d,
+ ld-mips-elf/eh-frame2-n64.d, ld-mips-elf/eh-frame3.d,
+ ld-mips-elf/eh-frame4.d: Update for readelf change.
+
+2008-10-04 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/6931
+ * ld-elf/group7.d: New.
+
+2008-10-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/group5.d: Updated.
+ * ld-elf/group6.d: Likewise.
+
+2008-10-03 Tristan Gingold <gingold@adacore.com>
+
+ * ld-elf/stab.d: Don't run on alpha (to avoid relocation
+ overflow on 64 bits targets whose stab values is 32 bits).
+
+2008-10-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/6931
+ * ld-elf/group4.d: New.
+ * ld-elf/group5.d: Likewise.
+ * ld-elf/group6.d: Likewise.
+
+2008-10-03 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/vxworks1-lib.rd: Update.
+
+2008-09-29 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/extract-symbol-1sec.d: Correct section lma.
+
+2008-09-25 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/eh-group.exp: Only run on ELF targets.
+ * ld-elf/eh5b.s: Export main, start, __start.
+
+2008-09-20 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * ld-mips-elf/reloc-estimate-1.d: Make endian-neutral.
+
+2008-09-20 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Provide virtual target "cfi" for targets supporting CFI.
+ * ld-elf/eh-frame-hdr.d: Replace target and xfail statements by single
+ `target: cfi'.
+ * ld-elf/eh-group.exp: Call check_as_cfi instead of is_elf_format.
+ * ld-elf/eh-group1.s, elf/eh-group2.s: Use more compatible section
+ flags prefix '%'.
+ * ld-elf/eh5.d: Replace target statement by `target: cfi' with an Alpha
+ exception. Relax the `Code alignment factor' matching.
+ * lib/ld-lib.exp: Rename istarget as istarget_ld.
+ (istarget, check_as_cfi): New procedure.
+ (run_dump_test): New comment for the virtual target `cfi'.
+
+2008-09-17 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * ld-elf/eh-group.exp, ld-elf/eh-group1.s, ld-elf/eh-group2.s: New test.
+
+2008-09-17 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Fix testcases compilation failures due to unused variables.
+ * ld-elfcomm/common1b.c (dummy1): Mark the variable for GCC as USED.
+ * ld-shared/main.c (main): Move the P variable only to the places where
+ it is used.
+
+2008-09-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/6877
+ * ld-elf/comm1.c: New.
+ * ld-elf/func1.c: Likewise.
+
+ * ld-elf/shared.exp: Add tests for libfunc1.so and comm1.
+
+2008-08-26 Nick Clifton <nickc@redhat.com>
+
+ * ld-arm/arm-elf.exp: Add farcall-thumb-arm-short test.
+ * ld-arm/farcall-group2.s: Fix comment.
+ * ld-arm/farcall-thumb-arm-short.d: New test.
+ * ld-arm/farcall-thumb-arm-short.s: New test.
+
+2008-08-22 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * ld-x86-64/dwarfreloc.exp, ld-x86-64/dwarfreloc.rd,
+ ld-x86-64/dwarfreloc1.s, ld-x86-64/dwarfreloc2.s: New test.
+
+2008-08-20 Bob Wilson <bob.wilson@acm.org>
+
+ * ld-xtensa/tlsbin.dd, ld-xtensa/tlsbin.rd, ld-xtensa/tlsbin.s,
+ ld-xtensa/tlsbin.sd, ld-xtensa/tlsbin.td, ld-xtensa/tlslib.s,
+ ld-xtensa/tlspic.dd, ld-xtensa/tlspic.rd, ld-xtensa/tlspic.sd,
+ ld-xtensa/tlspic.td, ld-xtensa/tlspic1.s, ld-xtensa/tlspic2.s: New.
+ * ld-xtensa/xtensa.exp: Run them.
+
+2008-08-18 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * ld-mips-elf/mips16-pic-4a.s, ld-mips-elf/mips16-pic-4b.s,
+ ld-mips-elf/mips16-pic-4.ver, ld-mips-elf/mips16-pic-4a.dd,
+ ld-mips-elf/mips16-pic-4a.nd, ld-mips-elf/mips16-pic-4a.gd,
+ ld-mips-elf/mips16-pic-4c.s, ld-mips-elf/mips16-pic-4b.dd: New tests.
+ * ld-mips-elf/mips-elf.exp: Run them.
+
+2008-08-17 Nick Clifton <nickc@redhat.com>
+
+ * ld-elf/sec-to-seg1.s: Shorten test data to align the section to
+ a 4-byte boundary.
+
+2008-08-08 Richard Sandiford <rdsandiford@googlemail.com>
+ Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-mips-elf/mips16-pic-3a.s,
+ ld-mips-elf/mips16-pic-3b.s,
+ ld-mips-elf/mips16-pic-3.dd,
+ ld-mips-elf/mips16-pic-3.gd,
+ ld-mips-elf/mips16-pic-3.rd,
+ ld-mips-elf/mips16-pic-3.inc,
+ ld-mips-elf/pic-and-nonpic-1a.s,
+ ld-mips-elf/pic-and-nonpic-1b.s,
+ ld-mips-elf/pic-and-nonpic-1.ld,
+ ld-mips-elf/pic-and-nonpic-1.dd,
+ ld-mips-elf/pic-and-nonpic-1.nd,
+ ld-mips-elf/pic-and-nonpic-1-rel.dd,
+ ld-mips-elf/pic-and-nonpic-1-rel.nd,
+ ld-mips-elf/pic-and-nonpic-2a.s,
+ ld-mips-elf/pic-and-nonpic-2b.s,
+ ld-mips-elf/pic-and-nonpic-2.d,
+ ld-mips-elf/pic-and-nonpic-3a.s,
+ ld-mips-elf/pic-and-nonpic-3a.ld,
+ ld-mips-elf/pic-and-nonpic-3a.dd,
+ ld-mips-elf/pic-and-nonpic-3a.gd,
+ ld-mips-elf/pic-and-nonpic-3a.sd,
+ ld-mips-elf/pic-and-nonpic-3b.s,
+ ld-mips-elf/pic-and-nonpic-3b.ld,
+ ld-mips-elf/pic-and-nonpic-3b.ad,
+ ld-mips-elf/pic-and-nonpic-3b.dd,
+ ld-mips-elf/pic-and-nonpic-3b.gd,
+ ld-mips-elf/pic-and-nonpic-3b.nd,
+ ld-mips-elf/pic-and-nonpic-3b.pd,
+ ld-mips-elf/pic-and-nonpic-3b.rd,
+ ld-mips-elf/pic-and-nonpic-3b.sd,
+ ld-mips-elf/pic-and-nonpic-3-error.d,
+ ld-mips-elf/pic-and-nonpic-4a.s,
+ ld-mips-elf/pic-and-nonpic-4b.s,
+ ld-mips-elf/pic-and-nonpic-4b.ld,
+ ld-mips-elf/pic-and-nonpic-4b.ad,
+ ld-mips-elf/pic-and-nonpic-4b.dd,
+ ld-mips-elf/pic-and-nonpic-4b.gd,
+ ld-mips-elf/pic-and-nonpic-4b.nd,
+ ld-mips-elf/pic-and-nonpic-4b.rd,
+ ld-mips-elf/pic-and-nonpic-4b.sd,
+ ld-mips-elf/pic-and-nonpic-4-error.d,
+ ld-mips-elf/pic-and-nonpic-5a.s,
+ ld-mips-elf/pic-and-nonpic-5b.s,
+ ld-mips-elf/pic-and-nonpic-5b.ld,
+ ld-mips-elf/pic-and-nonpic-5b.ad,
+ ld-mips-elf/pic-and-nonpic-5b.dd,
+ ld-mips-elf/pic-and-nonpic-5b.gd,
+ ld-mips-elf/pic-and-nonpic-5b.nd,
+ ld-mips-elf/pic-and-nonpic-5b.rd,
+ ld-mips-elf/pic-and-nonpic-5b.sd,
+ ld-mips-elf/pic-and-nonpic-5b.pd,
+ ld-mips-elf/pic-and-nonpic-6.ld,
+ ld-mips-elf/pic-and-nonpic-6-o32a.s,
+ ld-mips-elf/pic-and-nonpic-6-o32b.s,
+ ld-mips-elf/pic-and-nonpic-6-o32c.s,
+ ld-mips-elf/pic-and-nonpic-6-o32.ad,
+ ld-mips-elf/pic-and-nonpic-6-o32.dd,
+ ld-mips-elf/pic-and-nonpic-6-o32.gd,
+ ld-mips-elf/pic-and-nonpic-6-o32.nd,
+ ld-mips-elf/pic-and-nonpic-6-o32.pd,
+ ld-mips-elf/pic-and-nonpic-6-o32.rd,
+ ld-mips-elf/pic-and-nonpic-6-o32.sd,
+ ld-mips-elf/pic-and-nonpic-6-n32a.s,
+ ld-mips-elf/pic-and-nonpic-6-n32b.s,
+ ld-mips-elf/pic-and-nonpic-6-n32c.s,
+ ld-mips-elf/pic-and-nonpic-6-n32.ad,
+ ld-mips-elf/pic-and-nonpic-6-n32.dd,
+ ld-mips-elf/pic-and-nonpic-6-n32.gd,
+ ld-mips-elf/pic-and-nonpic-6-n32.nd,
+ ld-mips-elf/pic-and-nonpic-6-n32.pd,
+ ld-mips-elf/pic-and-nonpic-6-n32.rd,
+ ld-mips-elf/pic-and-nonpic-6-n32.sd,
+ ld-mips-elf/pic-and-nonpic-6-n64a.s,
+ ld-mips-elf/pic-and-nonpic-6-n64b.s,
+ ld-mips-elf/pic-and-nonpic-6-n64c.s,
+ ld-mips-elf/pic-and-nonpic-6-n64.ad,
+ ld-mips-elf/pic-and-nonpic-6-n64.dd,
+ ld-mips-elf/pic-and-nonpic-6-n64.gd,
+ ld-mips-elf/pic-and-nonpic-6-n64.nd,
+ ld-mips-elf/pic-and-nonpic-6-n64.pd,
+ ld-mips-elf/pic-and-nonpic-6-n64.rd,
+ ld-mips-elf/pic-and-nonpic-6-n64.sd: New tests.
+ * ld-mips-elf/mips-elf.exp: Run them.
+
+2008-08-07 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * ld-mips-elf/tls-hidden4.got, ld-mips-elf/tls-hidden4.r: We have
+ removed an unused GOT entry that was allocated for the R_MIPS_32
+ relocation against "undef", so adjust addresses down by 4 bytes.
+ * ld-mips-elf/got-dump-1.d, ld-mips-elf/got-dump-2.d: We have
+ changed the order of the GOT entries so that reloc-only ones
+ come last. "undef" is only referred to by dynamic relocations,
+ so it now comes after "glob".
+ * ld-mips-elf/mips16-pic-2.dd, ld-mips-elf/mips16-pic-2.gd,
+ ld-mips-elf/mips16-pic-2.nd, ld-mips-elf/mips16-pic-2.rd: We have
+ removed two unused local GOT entries that were originally created
+ as global entries for the hidden symbols "used2" and "used3".
+ "used4" and "used5" are only referred to by relocations, so they
+ now come after "used6" and "used7".
+
+2008-08-07 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * ld-mips-elf/got-vers-1a.s, ld-mips-elf/got-vers-1b.s,
+ ld-mips-elf/got-vers-1.ver, ld-mips-elf/got-vers-1.dd,
+ ld-mips-elf/got-vers-1.sd, ld-mips-elf/got-vers-1.rd: New tests.
+ * ld-mips-elf/mips-elf.exp: Run them.
+
+2008-08-07 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * ld-mips-elf/tlsdyn-o32-2.got, ld-mips-elf/tlsdyn-o32-3.got,
+ ld-mips-elf/tlsdyn-o32-2.d, ld-mips-elf/tlsdyn-o32-3.d: Change the
+ GOT layout as follows:
+
+ BEFORE AFTER
+ +0x08 %call16(__tls_get_addr) %call16(__tls_get_addr)
+ +0x0c %tlsldm(tlsbin_ld) %gottprel(tlsvar_ie)
+ +0x10 " " %tlsgd(tlsvar_gd)
+ +0x14 %tlsgd(tlsvar_gd) " "
+ +0x18 " " %tlsgd(tlsbin_gd)
+ +0x1c %gottprel(tlsvar_ie) " "
+ +0x20 %tlsgd(tlsbin_gd) %tlsldm(tlsbin_ld)
+ +0x24 " " " "
+ +0x28 %gottprel(tlsbin_ie) %gottprel(tlsbin_ie)
+
+2008-08-07 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * ld-mips-elf/reloc-estimate-1.d, ld-mips-elf/reloc-estimate-1.ld,
+ ld-mips-elf/reloc-estimate-1a.s, ld-mips-elf/reloc-estimate-1b.s:
+ New test.
+ * ld-mips-elf/mips-elf.exp: Run it.
+
+2008-08-06 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * ld-mips-elf/tls-hidden3.ld: Remove the unused .MIPS.stubs section.
+ Keep the text start address the same.
+ * ld-mips-elf/tls-multi-got-1.got: We have removed a .MIPS.stubs
+ section that contained only a 16-byte dummy stub. Subtract 16
+ from addresses to account for the change.
+ * ld-mips-elf/tls-multi-got-1.r: Likewise. Adjust MIPS_UNREFEXTNO
+ to account the removed section symbol.
+ * ld-mips-elf/tlsdyn-o32-1.d: We have deleted a .MIPS.stubs
+ section that contained only a 16-byte dummy stub. Remove it
+ from the disassembly.
+ * ld-mips-elf/tlsdyn-o32-2.d: Likewise.
+ * ld-mips-elf/tlsdyn-o32-3.d: Likewise.
+ * ld-mips-elf/tlsdyn-o32.d: Likewise.
+ * ld-mips-elf/relax-jalr-n32-shared.d: Likewise.
+ * ld-mips-elf/relax-jalr-n64-shared.d: Likewise.
+
+2008-08-06 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * ld-mips-elf/mips16-local-stubs-1.d: Remove stub_for_h3,
+ which was only referenced by the .pdr section, and was not
+ actually needed by code.
+ * ld-mips-elf/mips16-intermix.d: Remove unused static function stubs.
+ * ld-mips-elf/mips16-pic-1a.s,
+ ld-mips-elf/mips16-pic-1b.s,
+ ld-mips-elf/mips16-pic-1-dummy.s,
+ ld-mips-elf/mips16-pic-1.dd,
+ ld-mips-elf/mips16-pic-1.gd,
+ ld-mips-elf/mips16-pic-1.inc,
+ ld-mips-elf/mips16-pic-1.ld,
+ ld-mips-elf/mips16-pic-2a.s,
+ ld-mips-elf/mips16-pic-2b.s,
+ ld-mips-elf/mips16-pic-2.ad,
+ ld-mips-elf/mips16-pic-2.dd,
+ ld-mips-elf/mips16-pic-2.gd,
+ ld-mips-elf/mips16-pic-2.nd,
+ ld-mips-elf/mips16-pic-2.rd: New tests.
+ * ld-mips-elf/mips-elf.exp: Run them.
+
+2008-08-06 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/extract-symbol-1sec.d: Update.
+
+2008-07-30 Nick Clifton <nickc@redhat.com>
+
+ * ld-elf/sec-to-seg.exp: New test: Checks the assignment of
+ sections to segments.
+ * ld-elf/sec-to-seg1.s: Test source file.
+ * ld-elf/sec-to-seg2.s: Test source file.
+ * ld-elf/sec-to-seg-script-same-page.t: Test linker script.
+ * ld-elf/sec-to-seg-script-adjoining-pages.t: Test linker script.
+ * ld-elf/sec-to-seg-script-disjoint-pages.t: Test linker script.
+
+2008-07-28 Alexandre Oliva <aoliva@redhat.com>
+
+ * ld-i386/tlsbindesc.dd: Adjust incorrect expectations for LD to
+ LE relaxation.
+ * ld-x86-64/tlsbindesc.dd: Likewise.
+ * ld-i386/tlsbindesc.rd: Adjust address of _TLS_MODULE_BASE_.
+ * ld-x86-64/tlsbindesc.rd: Likewise.
+ Reported by Cary Coutant <ccoutant@google.com>
+
+2008-07-27 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-gc/gc.exp (test_gc): xfail powerpc64.
+
+2008-07-26 Michael Eager <eager@eagercon.com>
+
+ * ld-powerpc/powerpc.exp: Run new tests.
+ * ld-powerpc/attr-gnu-4-03.d: New file.
+ * ld-powerpc/attr-gnu-4-14.d: New file.
+ * ld-powerpc/attr-gnu-4-23.d: New file.
+ * ld-powerpc/attr-gnu-4-24.d: New file.
+ * ld-powerpc/attr-gnu-4-32.d: New file.
+ * ld-powerpc/attr-gnu-4-33.d: New file.
+ * ld-powerpc/attr-gnu-4-34.d: New file.
+ * ld-powerpc/attr-gnu-4-41.d: New file.
+ * ld-powerpc/attr-gnu-4-4.s: New file.
+ * ld-powerpc/attr-gnu-4-13.d: Adjust.
+ * ld-powerpc/attr-gnu-4-31.d: Adjust.
+
+2008-07-26 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-scripts/include.exp: Don't run test for aout.
+ * ld-scripts/include.s: Use .fill rather than .4byte.
+ * ld-scripts/include-1.d: Adjust.
+
+2008-07-22 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-alpha/tlsbin.rd: Update.
+ * ld-alpha/tlsbinr.rd: Update.
+ * ld-arm/mixed-app.sym: Update.
+ * ld-arm/use-thumb-lib.sym: Update.
+ * ld-cris/pv32-1.d: Update.
+
+2008-07-21 Nick Clifton <nickc@redhat.com>
+
+ * ld-scripts/include-sections.t: Discard all sections not
+ explicitly requested by the rest of the linker script.
+ * ld-scripts/include-1.d: Expect test to fail for AIX ports.
+ Do not assume that the .text section will be marked readonly.
+ * ld-scripts/include.s: Replace .section directives with just
+ .text or .data.
+
+2008-07-18 Joseph Myers <joseph@codesourcery.com>
+
+ * ld-arm/attr-merge-wchar-0.s,ld-arm/attr-merge-wchar-2.s,
+ ld-arm/attr-merge-wchar-4.s, ld-arm/attr-merge-wchar-00-nowarn.d,
+ ld-arm/attr-merge-wchar-00.d, ld-arm/attr-merge-wchar-02-nowarn.d,
+ ld-arm/attr-merge-wchar-02.d, ld-arm/attr-merge-wchar-04-nowarn.d,
+ ld-arm/attr-merge-wchar-04.d, ld-arm/attr-merge-wchar-20-nowarn.d,
+ ld-arm/attr-merge-wchar-20.d, ld-arm/attr-merge-wchar-22-nowarn.d,
+ ld-arm/attr-merge-wchar-22.d, ld-arm/attr-merge-wchar-24-nowarn.d,
+ ld-arm/attr-merge-wchar-24.d, ld-arm/attr-merge-wchar-40-nowarn.d,
+ ld-arm/attr-merge-wchar-40.d, ld-arm/attr-merge-wchar-42-nowarn.d,
+ ld-arm/attr-merge-wchar-42.d, ld-arm/attr-merge-wchar-44-nowarn.d,
+ ld-arm/attr-merge-wchar-44.d: New.
+ * ld-arm/arm-elf.exp: Run new tests.
+
+2008-07-11 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-m68k/got-12.s: Removed.
+ * ld-m68k/got-13.s: Likewise.
+ * ld-m68k/got-14.s: Likewise.
+ * ld-m68k/got-15.s: Likewise.
+ * ld-m68k/got-34.s: Likewise.
+ * ld-m68k/got-35.s: Likewise.
+ * ld-m68k/xgot-15.s: Likewise.
+
+ * ld-m68k/got-multigot-12-13-14-34-35-ok.d: Remove #source
+ and expected relocations.
+ * ld-m68k/got-multigot-14-ok.d: Likewise.
+ * ld-m68k/got-negative-12-13-14-34-ok.d: Likewise.
+ * ld-m68k/got-negative-14-ok.d: Likewise.
+ * ld-m68k/got-single-12-ok.d: Likewise.
+ * ld-m68k/got-xgot-12-13-14-15-34-35-ok.d: Likewise.
+ * ld-m68k/got-xgot-15-ok.d: Likewise.
+
+ * ld-m68k/got-multigot-15-er.d: Remove #source.
+ * ld-m68k/got-negative-12-13-14-35-er.d: Likewise.
+ * ld-m68k/got-negative-15-er.d: Likewise.
+ * ld-m68k/got-single-13-er.d: Likewise.
+
+ * ld-m68k/m68k.exp: Move GOT tests to ...
+ * ld-m68k/m68k-got.exp: This. New.
+
+2008-07-10 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * ld-mips-elf/no-shared-1-o32.s,
+ ld-mips-elf/no-shared-1-o32.d,
+ ld-mips-elf/no-shared-1-n32.d,
+ ld-mips-elf/no-shared-1-n64.s,
+ ld-mips-elf/no-shared-1-n64.d,
+ ld-mips-elf/no-shared-1.ld: New tests.
+ * ld-mips-elf/mips-elf.exp: Run them.
+
+2008-07-07 Stan Shebs <stan@codesourcery.com>
+
+ * ld-arm/arm-elf.exp: Use objdump -d for arm-be8 test.
+ * ld-arm/arm-be8.d: Change to test disassembly.
+
+2008-07-06 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-scripts/include-1.d: New.
+ * ld-scripts/include-1.t: New.
+ * ld-scripts/include-data.t: New.
+ * ld-scripts/include-mem.t: New.
+ * ld-scripts/include-ram.t: New.
+ * ld-scripts/include-sections.t: New.
+ * ld-scripts/include-subdata.t: New.
+ * ld-scripts/include.exp: New.
+ * ld-scripts/include.s: New.
+
+2008-06-29 Andreas Schwab <schwab@suse.de>
+
+ * ld-m68k/got-1.s: New file.
+ * ld-m68k/got-1.d: New dump test.
+ * ld-m68k/m68k.exp: Run it.
+
+2008-06-24 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-arm/farcall-arm-arm-be8.d, ld-arm/farcall-arm-arm-pic-veneer.d,
+ ld-arm/farcall-arm-arm.d, ld-arm/farcall-arm-thumb-blx-pic-veneer.d,
+ ld-arm/farcall-arm-thumb-blx.d, ld-arm/farcall-arm-thumb-pic-veneer.d,
+ ld-arm/farcall-arm-thumb.d, ld-arm/farcall-group-size2.d,
+ ld-arm/farcall-group.d, ld-arm/farcall-mix.d, ld-arm/farcall-mix2.d,
+ ld-arm/farcall-thumb-arm-blx-pic-veneer.d,
+ ld-arm/farcall-thumb-arm-blx.d, ld-arm/farcall-thumb-arm.d,
+ ld-arm/farcall-thumb-thumb-blx-pic-veneer.d,
+ ld-arm/farcall-thumb-thumb-blx.d, ld-arm/farcall-thumb-thumb-m.d,
+ ld-arm/thumb2-bl-as-thumb1-bad.d, ld-arm/thumb2-bl-bad.d: Update for
+ stub symbols and stub corrections.
+
+2008-06-20 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-spu/ovl.d: Update.
+ * ld-spu/ovl2.d: Update.
+
+2008-06-16 Hans-Peter Nilsson <hp@bitrange.com>
+
+ PR gas/6607
+ * ld-mmix/loc10.d, ld-mmix/loc10.s, ld-mmix/loc10m.d, ld-mmix/loc8.d,
+ ld-mmix/loc8.s, ld-mmix/loc8m.d, ld-mmix/loc9.d, ld-mmix/loc9.s,
+ ld-mmix/loc9m.d: New tests.
+
+2008-06-12 Nick Clifton <nickc@redhat.com>
+
+ * ld-scripts/overlay-size.t (end_of_bss_overlays): Define.
+ (end_of_text_overlays): Define.
+ (end_of_data_overlays): Define.
+ * ld-scripts/overlay-size-map.d: Add expected values for
+ end_of_bss_overlays, end_of_text_overlays and
+ end_of_data_overlays.
+
+2008-06-09 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-sh/arch/arch_expected.txt: Regenerate.
+
+2008-06-09 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-arm/mixed-lib.d: Loosen pattern.
+
+2008-06-09 Christophe Lyon <christophe.lyon@st.com>
+
+ * ld-arm/farcall-thumb-thumb-m.d: Fix branch type.
+ * ld-arm/farcall-thumb-arm.d: Likewise.
+
+2008-05-31 Nick Clifton <nickc@redhat.com>
+
+ PR ld/6430
+ * ld-elfcomm/elfcomm.exp (test_sort_common): Test the
+ ascending/descending argument to the --sort-common command line
+ option.
+ * ld-elfcomm/sort-common.s: New file.
+
+2008-05-28 Christophe Lyon <christophe.lyon@st.com>
+
+ * ld-arm/arm-elf.exp: Skip farcalls tests for non-ARM-EABI
+ targets.
+ * ld-arm/thumb2-bl-as-thumb1-bad-noeabi.d: New file.
+ * ld-arm/thumb2-bl-bad-noeabi.d: Likewise.
+
+2008-05-22 Christophe Lyon <christophe.lyon@st.com>
+
+ * ld-arm/farcall-arm-arm.s: Force function type on 'bar'.
+ * ld-arm/farcall-thumb-arm.s: Likewise.
+ * ld-arm/farcall-thumb-arm-blx.d: Fix encoding.
+ * ld-arm/farcall-thumb-arm.d: Likewise.
+ * ld-arm/farcall-thumb-arm-blx-pic-veneer.d: Likewise.
+ * ld-arm/arm-elf.exp (armelftests): Add farcall-mix, farcall-mix2,
+ farcall-group-default, farcall-group-size2, farcall-section Ignore
+ gas warnings in farcall-thumb-arm, farcall-thumb-arm-blx,
+ farcall-thumb-arm-blx-pic-veneer.
+
+2008-05-21 Maxim Kuvyrkov <maxim@codesourcery.com>
+
+ * ld-m68k/got-12.s: New file.
+ * ld-m68k/got-13.s: New file.
+ * ld-m68k/got-14.s: New file.
+ * ld-m68k/got-15.s: New file.
+ * ld-m68k/got-34.s: New file.
+ * ld-m68k/got-35.s: New file.
+ * ld-m68k/got-single-12-ok.d: New dump test.
+ * ld-m68k/got-single-13-er.d: New dump test.
+ * ld-m68k/got-negative-14-ok.d: New dump test.
+ * ld-m68k/got-negative-15-er.d: New dump test.
+ * ld-m68k/got-negative-12-13-14-34-ok.d: New dump test.
+ * ld-m68k/got-negative-12-13-14-35-er.d: New dump test.
+ * ld-m68k/got-multigot-14-ok.d: New dump test.
+ * ld-m68k/got-multigot-15-er.d: New dump test.
+ * ld-m68k/got-multigot-12-13-14-34-35-ok.d: New dump test.
+ * ld-m68k/xgot-15.s: New source.
+ * ld-m68k/got-xgot-15-ok.d: New test.
+ * ld-m68k/got-xgot-12-13-14-15-34-35-ok.d: New test.
+ * ld-m68k/m68k.exp: Run new tests.
+
+2008-05-15 Christophe Lyon <christophe.lyon@st.com>
+
+ * ld-arm/arm-elf.exp (armelftests): Add farcall-arm-arm,
+ farcall-arm-arm-pic-veneer, farcall-arm-arm-be8 farcall-arm-thumb,
+ farcall-arm-thumb-blx, farcall-arm-thumb-pic-veneer,
+ farcall-arm-thumb-blx-pic-veneer, farcall-thumb-thumb,
+ farcall-thumb-thumb-pic-veneer, farcall-thumb-thumb-blx,
+ farcall-thumb-thumb-m, farcall-thumb-thumb-m-pic-veneer,
+ farcall-thumb-thumb-blx-pic-veneer, farcall-thumb-arm,
+ farcall-thumb-arm-pic-veneer, farcall-thumb-arm-blx,
+ farcall-thumb-arm-blx-pic-veneer.
+ Change thumb2-bl-as-thumb1-bad, thumb2-bl-bad.
+ * ld-arm/thumb2-bl-as-thumb1-bad.d: Reflects farcall stub
+ generation.
+ * ld-arm/thumb2-bl-bad.d: Likewise.
+ * ld-arm/thumb2-bl-as-thumb1-bad.s: Update comments.
+ * ld-arm/thumb2-bl-bad.s: Likewise.
+
+2008-05-08 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-spu/ear.s: Align various sections.
+ * ld-spu/embed.rd: Update.
+
+2008-05-05 Alan Modra <amodra@bigpond.net.au>
+
+ PR 6473
+ * ld-elf/lma.s, ld-elf/lma.lnk: New test.
+ * ld-elf/binutils.exp: Run it.
+
+2008-05-03 Mike Frysinger <vapier@gentoo.org>
+
+ * ld-scripts/defined.s: Use .set syntax rather than =.
+
+2008-05-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/6475
+ * ld-scripts/rgn-over8-ok.d: Accept any alignment.
+
+2008-04-29 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-arm/symbian-seg1.s, ld-arm/symbian-seg1.d: New files.
+ * ld-arm/arm-elf.exp: Run symbian-seg1.
+
+2008-04-28 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-scripts/rgn-over8.s: Tweak.
+
+ * ld-scripts/rgn-over.exp: Allow -ok file names to pass.
+ * ld-scripts/rgn-over8.s: New.
+ * ld-scripts/rgn-over8.t: New.
+ * ld-scripts/rgn-over8-ok.d: New.
+
+2008-04-21 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-vxworks/plt-mips1.s: New.
+ * ld-vxworks/plt-mips1.d: New.
+
+2008-04-16 David S. Miller <davem@davemloft.net>
+
+ * ld-sparc/gotop32.dd: New.
+ * ld-sparc/gotop32.rd: Likewise.
+ * ld-sparc/gotop32.s: Likewise.
+ * ld-sparc/gotop32.sd: Likewise.
+ * ld-sparc/gotop32.td: Likewise.
+ * ld-sparc/gotop64.dd: Likewise.
+ * ld-sparc/gotop64.rd: Likewise.
+ * ld-sparc/gotop64.s: Likewise.
+ * ld-sparc/gotop64.sd: Likewise.
+ * ld-sparc/gotop64.td: Likewise.
+ * ld-sparc/sparc.exp: Run new gotdata tests.
+
+2008-04-15 Andrew Stubbs <andrew.stubbs@st.com>
+
+ * ld-sh/arch/sh-dsp.s: Regenerate.
+ * ld-sh/arch/sh.s: Regenerate.
+ * ld-sh/arch/sh2.s: Regenerate.
+ * ld-sh/arch/sh2a-nofpu-or-sh3-nommu.s: Regenerate.
+ * ld-sh/arch/sh2a-nofpu-or-sh4-nommu-nofpu.s: Regenerate.
+ * ld-sh/arch/sh2a-nofpu.s: Regenerate.
+ * ld-sh/arch/sh2a-or-sh3e.s: Regenerate.: Regenerate.
+ * ld-sh/arch/sh2a-or-sh4.s: Regenerate.
+ * ld-sh/arch/sh2a.s: Regenerate.
+ * ld-sh/arch/sh2e.s: Regenerate.
+ * ld-sh/arch/sh3-dsp.s: Regenerate.
+ * ld-sh/arch/sh3-nommu.s: Regenerate.
+ * ld-sh/arch/sh3.s: Regenerate.
+ * ld-sh/arch/sh3e.s: Regenerate.
+ * ld-sh/arch/sh4-nofpu.s: Regenerate.
+ * ld-sh/arch/sh4-nommu-nofpu.s: Regenerate.
+ * ld-sh/arch/sh4.s: Regenerate.
+ * ld-sh/arch/sh4a-nofpu.s: Regenerate.
+ * ld-sh/arch/sh4a.s: Regenerate.
+ * ld-sh/arch/sh4al-dsp.s: Regenerate.
+
+2008-04-08 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-spu/ovl2.s: Extend to test jump table references and
+ absolute _SPUEAR_ syms.
+ * ld-spu/ovl2.d: Update.
+
+2008-03-28 Joseph Myers <joseph@codesourcery.com>
+
+ * ld-elfcomm/elfcomm.exp: Run $READELF not readelf.
+
+2008-03-26 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-elf/flags1.d: Adjust for MIPS text alignment.
+
+2008-03-25 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-vxworks/tls-3.s: New.
+ * ld-vxworks/tls-3.d: New.
+
+2008-03-22 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/libdso-10.d: Adjust for change in objdump output.
+
+2008-03-21 Adam Nemet <anemet@caviumnetworks.com>
+
+ * ld-mips-elf/dyn-sec64.d, ld-mips-elf/dyn-sec64.s,
+ ld-mips-elf/dyn-sec64.ld: New test.
+ * ld-mips-elf/mips-elf.exp: Run it.
+
+2008-03-20 Richard Sandiford <rsandifo@nildram.co.uk>
+
+ * ld-mips-elf/got-dump-1.d, ld-mips-elf/got-dump-1.s,
+ ld-mips-elf/got-dump-1.ld, ld-mips-elf/got-dump-2.d,
+ ld-mips-elf/got-dump-2.s, ld-mips-elf/got-dump-2.ld: New tests.
+ * ld-mips-elf/mips-elf.exp: Run them.
+
+2008-03-20 Richard Sandiford <rsandifo@nildram.co.uk>
+
+ * ld-mips-elf/elf-rel-got-n64-linux.d: Expect bit 63 rather than
+ bit 31 of the second GOT entry to be set.
+ * ld-mips-elf/elf-rel-got-n64.d: Likewise.
+ * ld-mips-elf/elf-rel-xgot-n64-linux.d: Likewise.
+ * ld-mips-elf/elf-rel-xgot-n64.d: Likewise.
+
+2008-03-17 Richard Sandiford <rsandifo@nildram.co.uk>
+
+ * ld-mips-elf/eh-frame1-n32.d: Expect a warning about .eh_frame_hdr.
+ Remove duplicate CIEs. Adjust relocation addresses and .eh_frame
+ offsets accordingly. Do not allow there to be any trailing
+ R_MIPS_NONE relocations.
+ * ld-mips-elf/eh-frame1-n64.d: Likewise.
+ * ld-mips-elf/eh-frame2-n32.d: Likewise.
+ * ld-mips-elf/eh-frame2-n64.d: Likewise.
+
+2008-03-17 Richard Sandiford <rsandifo@nildram.co.uk>
+
+ * ld-mips-elf/mips-elf.exp (o32_as_flags, o32_ld_flags): New variables.
+ (mips16_call_global_test, mips16_intermix_test): Use them.
+
+2008-03-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/5789
+ PR ld/5943
+ * ld-i386/hidden1.d: New.
+ * ld-i386/hidden1.s: Likewise.
+ * ld-i386/hidden2.d: Likewise.
+ * ld-i386/hidden2.s: Likewise.
+ * ld-i386/hidden3.d: Likewise.
+ * ld-i386/hidden4.s: Likewise.
+ * ld-i386/protected1.d: Likewise.
+ * ld-i386/protected1.s: Likewise.
+ * ld-i386/protected2.d: Likewise.
+ * ld-i386/protected2.s: Likewise.
+ * ld-i386/protected3.d: Likewise.
+ * ld-i386/protected3.s: Likewise.
+ * ld-x86-64/hidden1.d: Likewise.
+ * ld-x86-64/hidden1.s: Likewise.
+ * ld-x86-64/hidden2.d: Likewise.
+ * ld-x86-64/hidden2.s: Likewise.
+ * ld-x86-64/hidden3.d: Likewise.
+ * ld-x86-64/hidden3.s: Likewise.
+ * ld-x86-64/protected1.d: Likewise.
+ * ld-x86-64/protected1.s: Likewise.
+ * ld-x86-64/protected2.d: Likewise.
+ * ld-x86-64/protected2.s: Likewise.
+ * ld-x86-64/protected3.d: Likewise.
+ * ld-x86-64/protected3.s: Likewise.
+
+ * ld-i386/i386.exp: Run hidden1, hidden2, hidden3, protected1,
+ protected2 and protected3.
+ * ld-x86-64/x86-64.exp: Likewise.
+
+2008-03-14 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-spu/ovl2.s: Make setjmp global.
+ * ld-spu/ovl2.d: Update.
+
+2008-03-12 Alan Modra <amodra@bigpond.net.au>
+
+ PR 5900
+ * ld-elf/sec64k.exp: Update.
+
+2008-03-08 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm-elf.exp (armeabitests): Add thumb2-b-interwork.
+ * ld-arm/thumb2-b-interwork.d: New test.
+ * ld-arm/thumb2-b-interwork.s: New test.
+
+2008-03-07 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm-elf.exp (armelftests): Add movw-merge and arm-app-movw.
+ * ld-arm/arm-app-movw.s: New test.
+ * ld-arm/arm-app.r: Update expected output.
+ * ld-arm/movw-merge.d: New test.
+ * ld-arm/movw-merge.s: New test.
+
+2008-03-01 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/relbrlt.d: Update. Also check .branch_lt section.
+
+2008-02-27 Catherine Moore <clm@codesourcery.com>
+
+ * ld-cris/libdso-10.d: Update expected output for the Dynamic
+ Section to allow an arbitrary number of spaces.
+
+2008-02-20 Mark Mitchell <mark@codesourcery.com>
+
+ ld/testsuite/
+ * ld-elf/seg.d: Expect .reginfo section on MIPS.
+
+2008-02-20 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * ld-auto-import/auto-import.exp: Use $ld to link the dll for
+ cygwin, not $CC.
+
+2008-02-18 Hans-Peter Nilsson <hp@axis.com>
+
+ * lib/ld-lib.exp (run_dump_test): Don't apply prune_warnings
+ for tool invocations where warnings or errors can be matched.
+
+2008-02-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-shared/sh1.c (shlib_overriddencall2): Moved to ...
+ * ld-shared/sh2.c (shlib_overriddencall2): Here. New.
+
+2008-02-07 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-spu/ovl.d: Update.
+ * ld-spu/ovl2.d: Update.
+
+2008-02-04 Bob Wilson <bob.wilson@acm.org>
+
+ * ld-undefined/undefined.exp: XFAIL for xtensa*-*-linux*.
+
+2008-01-31 Marc Gauthier <marc@tensilica.com>
+
+ * ld-elf/merge.d: Recognize Xtensa processor variants.
+ * ld-xtensa/coalesce.exp: Likewise.
+ * ld-xtensa/lcall.exp: Likewise.
+
+2008-01-28 Petr Muller <pmuller@redhat.com>
+
+ * ld-elfvers/vers.exp (test_ar): Sort the expected output so that
+ it has matches the ordering of the obtained output.
+
+2008-01-28 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/eh1.d: Replace DW_CFA_def_cfa_reg with
+ DW_CFA_def_cfa_register. Updated for i386/x86-64 register
+ names.
+ * ld-elf/eh2.d: Likewise.
+ * ld-elf/eh3.d: Likewise.
+ * ld-elf/eh4.d: Likewise.
+ * ld-elf/eh5.d: Likewise.
+
+2008-01-28 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-spu/ovl.d: Update.
+ * ld-spu/ovl2.d: Update.
+
+2008-01-26 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/loadaddr.t: New, extracted from..
+ * ld-elf/loadaddr1.t: ..here. Use insert.
+ * ld-elf/loadaddr2.t: Likewise.
+ * ld-elf/loadaddr1.d: Update.
+ * ld-elf/loadaddr2.d: Update.
+
+2008-01-25 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-spu/ovl.lnk: Delete overlay.
+ * ld-spu/ovl1.lnk: New file.
+ * ld-spu/ovl2.lnk: New file.
+ * ld-spu/ovl.d: Update.
+ * ld-spu/ovl2.d: Update.
+
+2008-01-23 Andreas Schwab <schwab@suse.de>
+
+ * ld-gc/gc.c: Make sure used_func is not inlined.
+
+2008-01-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-gc/gc.exp: Use [which $CC] != 0.
+
+2008-01-14 Tristan Gingold <gingold@adacore.com>
+
+ * ld-gc/gc.exp (test_gc): Let missing C compiler make tests
+ "untested" instead of "failed".
+
+2008-01-10 Tristan Gingold <gingold@adacore.com>
+
+ * lib/ld-lib.exp (check_gc_sections_available): Now available on
+ VxWorks.
+ * ld-gc: New directory for testing --gc-sections.
+ * ld-gc/gc.c: New file.
+ * ld-gc/gc.exp: New file.
+ * ld-gc/noent.s: New file.
+ * ld-gc/noent.d: New file.
+
+2008-01-09 Richard Sandiford <rsandifo@nildram.co.uk>
+
+ PR ld/5526
+ * ld-elf/eh6.s, ld-elf/eh6.d: New test.
+
+2008-01-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/5522
+ * ld-elf/noload-3.d: New file.
+ * ld-elf/noload-3.s: Likewise.
+ * ld-elf/noload-3.t: Likewise.
+
+For older changes see ChangeLog-2007
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/binutils-2.21/ld/testsuite/ChangeLog-2009 b/binutils-2.21/ld/testsuite/ChangeLog-2009
new file mode 100644
index 0000000..fff9ac6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ChangeLog-2009
@@ -0,0 +1,1743 @@
+2009-12-28 Daniel Gutson <dgutson@codesourcery.com>
+
+ * ld-arm/arm-elf.exp (armelftests): New test case added.
+ * ld-arm/reloc-boundaries.s: New file.
+ * ld-arm/reloc-boundaries.d: New file.
+
+2009-12-28 Daniel Gutson <dgutson@codesourcery.com>
+
+ * ld-arm/arm-elf.exp: Run missing test
+ from a previous commit (callweak-2).
+
+2009-12-10 Maciej W. Rozycki <macro@codesourcery.com>
+
+ * ld-mips-elf/undefined.d: New test.
+ * ld-mips-elf/undefined.s: Source for the new test.
+ * ld-mips-elf/mips-elf.exp: Run the new test.
+
+2009-12-09 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-arm/arm-elf.exp (armeabitests): Add farcall-data.
+ * ld-arm/farcall-data.d, ld-arm/farcall-data.s: New.
+ * lib/ld-lib.exp (run_ld_link_tests, run_cc_link_tests): Correct
+ regular expression for archives.
+
+2009-11-23 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/script-type.sym: New test.
+ * ld-arm/script-type.s: New test.
+ * ld-arm/script-type.s: New test.
+
+2009-11-20 Thomas Schwinge <thomas@codesourcery.com>
+
+ * ld-arm/arm-dyn.ld: Adapt to main linker script changes.
+ * ld-arm/arm-lib.ld: Likewise.
+ * ld-arm/armthumb-lib.sym: : Adjust expected results.
+ * ld-arm/farcall-mixed-app-v5.d: Likewise.
+ * ld-arm/farcall-mixed-app.d: Likewise.
+ * ld-arm/farcall-mixed-app.sym: Likewise.
+ * ld-arm/farcall-mixed-lib.d: Likewise.
+ * ld-arm/mixed-app-v5.d: Likewise.
+ * ld-arm/mixed-app.d: Likewise.
+ * ld-arm/mixed-app.sym: Likewise.
+ * ld-arm/mixed-lib.sym: Likewise.
+ * ld-arm/preempt-app.sym: Likewise.
+ * ld-arm/tls-app.d: Likewise.
+
+2009-11-18 Nick Clifton <nickc@redhat.com>
+
+ * ld-elf/extract-symbol-1sec.d: Expect to fail for the RX target.
+ * ld-scripts/overlay-size.d: Likewise.
+ * ld-scripts/rgn-at1.d: Likewise.
+ * ld-scripts/rgn-at2.d: Likewise.
+ * ld-scripts/rgn-at3.d: Likewise.
+ * ld-scripts/rgn-at4.d: Likewise.
+ * ld-scripts/rgn-over8-ok.d: Likewise.
+
+2009-11-15 Kai Tietz <kai.tietz@onevision.com>
+
+ * ld-pe/direct2_client.c: New file.
+ * ld-pe/direct2_dll.c: Likewise.
+ * ld-pe/direct2_dll.def: Likewise.
+ * ld-pe/pe-run2.exp: Likewise.
+
+2009-11-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-x86-64/tlsbin.dd: Updated for prefix processing.
+ * ld-x86-64/tlsgdesc.dd: Likewise.
+ * ld-x86-64/tlsld1.dd: Likewise.
+ * ld-x86-64/tlspic.dd: Likewise.
+
+2009-11-09 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/10911
+ * ld-ifunc/ifunc-4a-x86.d: New.
+
+2009-11-02 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm-elf.exp: Add new attr-merge-vfp tests.
+ * ld-arm/attr-merge-vfp-1.d: New test.
+ * ld-arm/attr-merge-vfp-1r.d: New test.
+ * ld-arm/attr-merge-vfp-2.d: New test.
+ * ld-arm/attr-merge-vfp-2r.d: New test.
+ * ld-arm/attr-merge-vfp-3.d: New test.
+ * ld-arm/attr-merge-vfp-3r.d: New test.
+ * ld-arm/attr-merge-vfp-4.d: New test.
+ * ld-arm/attr-merge-vfp-4r.d: New test.
+ * ld-arm/attr-merge-vfp-5.d: New test.
+ * ld-arm/attr-merge-vfp-5r.d: New test.
+ * ld-arm/attr-merge-vfp-2.s: New test.
+ * ld-arm/attr-merge-vfp-3.s: New test.
+ * ld-arm/attr-merge-vfp-3-d16.s: New test.
+ * ld-arm/attr-merge-vfp-4.s: New test.
+ * ld-arm/attr-merge-vfp-4-d16.s: New test.
+
+2009-11-02 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-scripts/phdrs3.exp (LDFLAGS): Add "--local-store 0:0" for SPU.
+
+2009-10-30 Mark Mitchell <mark@codesourcery.com>
+
+ * ld-elfcomm/elfcomm.exp: Compile with -fcommon.
+
+2009-10-28 Johan Kristell <johankri@axis.com>
+
+ * ld-cris/dso12-pltdis.d: New test.
+
+2009-10-19 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/tls-e-20.d, ld-cris/tls-e-20a.d, ld-cris/tls-e-22.d,
+ ld-cris/tls-e-80.d, ld-cris/tls-e-dtpoffd1.d,
+ ld-cris/tls-e-dtpoffd3.d, ld-cris/tls-ldgde-14.d,
+ ld-cris/tls-ldgde-15.d, ld-cris/tls-ldgdex-14.d,
+ ld-cris/tls-ldgdex-15.d: Adjust for change in non-shared
+ R_CRIS_32_DTPREL and R_CRIS_16_DTPREL relocations.
+
+2009-10-17 Arnold Metselaar <arnold.metselaar@planet.nl>
+
+ * ld-scripts/align.exp: Remove xfails for z80-*-coff
+
+2009-10-16 Rafael Avila de Espindola <espindola@google.com>
+
+ * bootstrap.exp: Detect if plugins are enabled. Skip the static
+ link test and add -ldl to the remaining tests if they are.
+
+2009-10-14 Joseph Myers <joseph@codesourcery.com>
+
+ * ld-scripts/phdrs3.d: Allow colon in name of linker binary.
+
+2009-10-14 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/pr349-1.s, * ld-elf/pr349-2.s, * ld-elf/pr349.d: New.
+
+2009-10-09 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/10749
+ * ld-elf/relocatable.d: New.
+ * ld-elf/relocatable.t: Likewise.
+ * ld-elf/simple.s: Likewise.
+
+2009-10-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/10744
+ * ld-scripts/phdrs3.exp: Run phdrs3a.
+
+ * ld-scripts/phdrs3a.d: New.
+ * ld-scripts/phdrs3a.t: Likewise.
+
+2009-10-08 Alan Modra <amodra@bigpond.net.au>
+
+ PR ld/10744
+ * ld-scripts/phdrs3.d: Update.
+
+2009-10-06 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-scripts/phdrs3.d: New.
+ * ld-scripts/phdrs3.t: New.
+ * ld-scripts/phdrs3.exp: New.
+
+2009-10-03 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlsexe.d: Update.
+ * ld-powerpc/tlsexe.r: Update.
+ * ld-powerpc/tlsexetoc.d: Update.
+ * ld-powerpc/tlsexetoc.r: Update.
+ * ld-powerpc/tlsso.d: Update.
+ * ld-powerpc/tlsso.r: Update.
+ * ld-powerpc/tlstocso.d: Update.
+ * ld-powerpc/tlstocso.r: Update.
+
+2009-10-02 Alan Modra <amodra@bigpond.net.au>
+
+ * lib/ld-lib.exp (ld_simple_link_defsyms): New proc, adding
+ powerpc-*-rtems to code setting symbols, extracted from..
+ * ld-srec/srec.exp (run_srec_test): ..here. Correct flags for sh64.
+ * ld-gc/gc.exp (test_gc): Use ld_simple_link_defsyms.
+
+2009-10-01 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * ld-spu/icache1.d: Update to new section layout.
+
+2009-09-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/10630
+ * ld-alpha/tlsbin.rd: Remove HIDDEN/.hidden on local symbols.
+ * ld-alpha/tlsbinr.rd: Likewise.
+ * ld-alpha/tlspic.rd: Likewise.
+ * ld-cris/libdso-2.d: Likewise.
+ * ld-cris/locref1.d: Likewise.
+ * ld-cris/locref2.d: Likewise.
+ * ld-cris/tls-e-20a.d: Likewise.
+ * ld-cris/tls-e-20.d: Likewise.
+ * ld-cris/tls-e-80.d: Likewise.
+ * ld-cris/tls-gc-68.d: Likewise.
+ * ld-cris/tls-gc-69.d: Likewise.
+ * ld-cris/tls-gc-70.d: Likewise.
+ * ld-cris/tls-gc-75.d: Likewise.
+ * ld-cris/tls-gc-76.d: Likewise.
+ * ld-cris/tls-gc-79.d: Likewise.
+ * ld-cris/tls-gd-1h.d: Likewise.
+ * ld-cris/tls-gd-2h.d: Likewise.
+ * ld-cris/tls-ld-4.d: Likewise.
+ * ld-cris/tls-ld-5.d: Likewise.
+ * ld-cris/tls-ld-6.d: Likewise.
+ * ld-cris/tls-ld-7.d: Likewise.
+ * ld-cris/tls-ldgd-14.d: Likewise.
+ * ld-cris/tls-ldgd-15.d: Likewise.
+ * ld-cris/tls-local-63.d: Likewise.
+ * ld-cris/tls-local-64.d: Likewise.
+ * ld-elf/pr9676.rd: Likewise.
+ * ld-elf/pr9679.rd: Likewise.
+ * ld-elfvsb/hidden2.d: Likewise.
+ * ld-i386/tlsbindesc.rd: Likewise.
+ * ld-i386/tlsbin.rd: Likewise.
+ * ld-i386/tlsdesc.rd: Likewise.
+ * ld-i386/tlsgdesc.rd: Likewise.
+ * ld-i386/tlsnopic.rd: Likewise.
+ * ld-i386/tlspic.rd: Likewise.
+ * ld-ia64/tlsbin.rd: Likewise.
+ * ld-ia64/tlspic.rd: Likewise.
+ * ld-powerpc/tlsexe32.r: Likewise.
+ * ld-powerpc/tlsexe.r: Likewise.
+ * ld-powerpc/tlsexetoc.r: Likewise.
+ * ld-powerpc/tlsso32.r: Likewise.
+ * ld-powerpc/tlsso.r: Likewise.
+ * ld-powerpc/tlstocso.r: Likewise.
+ * ld-s390/tlsbin_64.rd: Likewise.
+ * ld-s390/tlsbin.rd: Likewise.
+ * ld-s390/tlspic_64.rd: Likewise.
+ * ld-s390/tlspic.rd: Likewise.
+ * ld-sparc/gotop32.rd: Likewise.
+ * ld-sparc/gotop64.rd: Likewise.
+ * ld-sparc/tlssunbin32.rd: Likewise.
+ * ld-sparc/tlssunbin64.rd: Likewise.
+ * ld-sparc/tlssunnopic32.rd: Likewise.
+ * ld-sparc/tlssunnopic64.rd: Likewise.
+ * ld-sparc/tlssunpic32.rd: Likewise.
+ * ld-sparc/tlssunpic64.rd: Likewise.
+ * ld-x86-64/tlsbindesc.rd: Likewise.
+ * ld-x86-64/tlsbin.rd: Likewise.
+ * ld-x86-64/tlsdesc.rd: Likewise.
+ * ld-x86-64/tlsgdesc.rd: Likewise.
+ * ld-x86-64/tlspic.rd: Likewise.
+ * ld-xtensa/tlsbin.rd: Likewise.
+ * ld-xtensa/tlspic.rd: Likewise.
+
+ * ld-elf/local1.d: New.
+ * ld-elf/local1.map: Likewise.
+ * ld-elf/local1.s: Likewise.
+ * ld-ia64/local1.d: Likewise.
+ * ld-ia64/local1.map: Likewise.
+ * ld-ia64/local1.s: Likewise.
+
+2009-09-23 Matt Rice <ratmice@gmail.com>
+
+ * ld-elf/audit.exp: New.
+ * ld-elf/audit.rd: New.
+ * ld-elf/depaudit.rd: New.
+ * ld-elf/depaudit2.rd: New.
+
+2009-09-23 Jie Zhang <jie.zhang@analog.com>
+
+ * ld-srec/srec.exp: Add xfails for bfin-*-linux-uclibc.
+
+2009-09-23 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-alpha/tlsbin.rd: Tolerate some whitespace differences.
+ * ld-alpha/tlsbinr.rd: Likewise.
+ * ld-alpha/tlspic.rd: Likewise.
+ * ld-arm/armthumb-lib.sym: Likewise.
+ * ld-arm/farcall-mixed-app.sym: Likewise.
+ * ld-arm/mixed-app.sym: Likewise.
+ * ld-arm/mixed-lib.sym: Likewise.
+ * ld-arm/preempt-app.sym: Likewise.
+ * ld-arm/use-thumb-lib.sym: Likewise.
+ * ld-cris/libdso-2.d: Likewise.
+ * ld-cris/tls-local-63.d: Likewise.
+ * ld-cris/tls-local-64.d: Likewise.
+ * ld-cris/tls-und-38.d: Likewise.
+ * ld-cris/tls-und-42.d: Likewise.
+ * ld-cris/tls-und-46.d: Likewise.
+ * ld-cris/tls-und-50.d: Likewise.
+ * ld-cris/weakref3.d: Likewise.
+ * ld-cris/weakref4.d: Likewise.
+ * ld-elf/empty.d: Likewise.
+ * ld-elf/group1.d: Likewise.
+ * ld-elf/group3a.d: Likewise.
+ * ld-elf/group3b.d: Likewise.
+ * ld-elf/hash.d: Likewise.
+ * ld-elf/warn1.d: Likewise.
+ * ld-elf/warn2.d: Likewise.
+ * ld-elfvers/vers24.rd: Likewise.
+ * ld-elfvsb/hidden0.d: Likewise.
+ * ld-elfvsb/hidden1.d: Likewise.
+ * ld-elfvsb/hidden2.d: Likewise.
+ * ld-elfvsb/internal0.d: Likewise.
+ * ld-elfvsb/internal1.d: Likewise.
+ * ld-elfvsb/protected0.d: Likewise.
+ * ld-elfvsb/protected1.d: Likewise.
+ * ld-i386/tlsbin.rd: Likewise.
+ * ld-i386/tlsbindesc.rd: Likewise.
+ * ld-i386/tlsdesc.rd: Likewise.
+ * ld-i386/tlsgdesc.rd: Likewise.
+ * ld-i386/tlsnopic.rd: Likewise.
+ * ld-i386/tlspic.rd: Likewise.
+ * ld-ia64/tlsbin.rd: Likewise.
+ * ld-ia64/tlspic.rd: Likewise.
+ * ld-mips-elf/got-vers-1.sd: Likewise.
+ * ld-mips-elf/mips16-pic-2.nd: Likewise.
+ * ld-mips-elf/mips16-pic-4a.nd: Likewise.
+ * ld-mips-elf/pic-and-nonpic-1-rel.nd: Likewise.
+ * ld-mips-elf/pic-and-nonpic-1.nd: Likewise.
+ * ld-mips-elf/pic-and-nonpic-3b.nd: Likewise.
+ * ld-mips-elf/pic-and-nonpic-4b.nd: Likewise.
+ * ld-mips-elf/pic-and-nonpic-5b.nd: Likewise.
+ * ld-mips-elf/pic-and-nonpic-6-n32.nd: Likewise.
+ * ld-mips-elf/pic-and-nonpic-6-n64.nd: Likewise.
+ * ld-mips-elf/pic-and-nonpic-6-o32.nd: Likewise.
+ * ld-mips-elf/vxworks1-lib.nd: Likewise.
+ * ld-mmix/bspec1.d: Likewise.
+ * ld-mmix/bspec2.d: Likewise.
+ * ld-mmix/local1.d: Likewise.
+ * ld-mmix/local3.d: Likewise.
+ * ld-mmix/local5.d: Likewise.
+ * ld-mmix/local7.d: Likewise.
+ * ld-mmix/undef-3.d: Likewise.
+ * ld-mn10300/i135409-1.d: Likewise.
+ * ld-mn10300/i135409-2.d: Likewise.
+ * ld-powerpc/tlsexe.r: Likewise.
+ * ld-powerpc/tlsexe32.r: Likewise.
+ * ld-powerpc/tlsexetoc.r: Likewise.
+ * ld-powerpc/tlsso.r: Likewise.
+ * ld-powerpc/tlsso32.r: Likewise.
+ * ld-powerpc/tlstocso.r: Likewise.
+ * ld-powerpc/vxworks1-lib.nd: Likewise.
+ * ld-s390/tlsbin.rd: Likewise.
+ * ld-s390/tlsbin_64.rd: Likewise.
+ * ld-s390/tlspic.rd: Likewise.
+ * ld-s390/tlspic_64.rd: Likewise.
+ * ld-sh/tlsbin-2.d: Likewise.
+ * ld-sh/tlspic-2.d: Likewise.
+ * ld-sh/vxworks1-lib.nd: Likewise.
+ * ld-sh/sh64/crange1.rd: Likewise.
+ * ld-sh/sh64/crange2.rd: Likewise.
+ * ld-sh/sh64/crange3-cmpct.rd: Likewise.
+ * ld-sh/sh64/crange3-media.rd: Likewise.
+ * ld-sh/sh64/crange3.rd: Likewise.
+ * ld-sh/sh64/crangerel1.rd: Likewise.
+ * ld-sh/sh64/crangerel2.rd: Likewise.
+ * ld-sh/sh64/reldl32.rd: Likewise.
+ * ld-sh/sh64/reldl64.rd: Likewise.
+ * ld-sparc/gotop32.rd: Likewise.
+ * ld-sparc/gotop64.rd: Likewise.
+ * ld-sparc/tlssunbin32.rd: Likewise.
+ * ld-sparc/tlssunbin64.rd: Likewise.
+ * ld-sparc/tlssunnopic32.rd: Likewise.
+ * ld-sparc/tlssunnopic64.rd: Likewise.
+ * ld-sparc/tlssunpic32.rd: Likewise.
+ * ld-sparc/tlssunpic64.rd: Likewise.
+ * ld-vxworks/plt-mips1.d: Likewise.
+ * ld-x86-64/tlsbin.rd: Likewise.
+ * ld-x86-64/tlsbindesc.rd: Likewise.
+ * ld-x86-64/tlsdesc.rd: Likewise.
+ * ld-x86-64/tlsgdesc.rd: Likewise.
+ * ld-x86-64/tlspic.rd: Likewise.
+ * ld-xtensa/tlsbin.rd: Likewise.
+ * ld-xtensa/tlspic.rd: Likewise.
+
+2009-09-21 Richard Sandiford <rdsandiford@googlemail.com>
+
+ PR ld/10681
+ * ld-elf/eh6.d: Expect absolute pointers in shared libraries to
+ be converted into PC-relative form.
+
+2009-09-21 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * ld-mips-elf/eh-frame5.d: Expect PC-relative encodings
+ to include DW_EH_PE_sdata4.
+
+2009-09-21 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * ld-mips-elf/eh-frame1-n32.d: Expect PC-relative encodings
+ to include DW_EH_PE_sdata4.
+ * ld-mips-elf/eh-frame2-n32.d: Likewise.
+ * ld-mips-elf/eh-frame1-n64.d: Expect PC-relative encodings
+ to include DW_EH_PE_sdata8.
+ * ld-mips-elf/eh-frame2-n64.d: Likewise.
+
+2009-09-21 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlslib.s: Delete dot-symbol entry syms. Add
+ __tls_get_addr_opt.
+ * ld-powerpc/tlslib32.s: Add __tls_get_addr_opt.
+ * ld-powerpc/oldtlslib.s: New file, old-abi version of tlslib.s.
+ * ld-powerpc/powerpc.exp: Build old-abi library and use it in
+ two new link tests.
+ * ld-powerpc/tlsexe.d: Update for new __tls_get_addr stub.
+ * ld-powerpc/tlsexe.g, * ld-powerpc/tlsexe.r, *ld-powerpc/tlsexe32.d,
+ * ld-powerpc/tlsexe32.g, * ld-powerpc/tlsexe32.r,
+ * ld-powerpc/tlsexetoc.d, * ld-powerpc/tlsexetoc.g,
+ * ld-powerpc/tlsexetoc.r: Likewise.
+
+2009-09-20 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * ld-mips-elf/elf-rel-got-n64-linux.d: Expect BALs.
+ * ld-mips-elf/elf-rel-xgot-n64-linux.d: Likewise.
+
+2009-09-19 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * ld-mips-elf/eh-frame5.s, ld-mips-elf/eh-frame5.ld,
+ ld-mips-elf/eh-frame5.d: New test.
+ * ld-mips-elf/mips-elf.exp: Run it.
+
+2009-09-18 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlsso.d: Update.
+ * ld-powerpc/tlsso.r: Update.
+ * ld-powerpc/tlstocso.d: Update.
+ * ld-powerpc/tlstocso.r: Update.
+
+2009-09-15 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-elfcomm/elfcomm.exp: Add appropriate emulation option
+ for sh64*-*-*.
+ * ld-gc/gc.exp (test_gc): Likewise.
+
+2009-09-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-undefined/entry-7.d: New.
+
+2009-09-13 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * ld-mips-elf/eh-frame1-n32.d: Change "the section \.eh_frame"
+ to "the \.eh_frame section".
+ * ld-mips-elf/eh-frame1-n64.d: Likewise.
+ * ld-mips-elf/eh-frame2-n32.d: Likewise.
+ * ld-mips-elf/eh-frame2-n64.d: Likewise.
+ * ld-mips-elf/eh-frame3.d: Likewise.
+ * ld-mips-elf/eh-frame4.d: Likewise.
+ * ld-mips-elf/elf-rel-got-n32.d: Expect bals.
+ * ld-mips-elf/elf-rel-xgot-n32.d: Likewise.
+ * ld-mips-elf/mips-elf.exp: Force the MIPS16 PIC tests to use -mips1.
+
+2009-09-11 Jie Zhang <jie.zhang@analog.com>
+
+ * ld-elf/warn2.d: `Foo' appears in section 3 when target
+ is bfin-*-linux-uclibc.
+
+2009-09-09 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-arm/farcall-mixed-lib.d: Update.
+
+2009-09-09 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/sec64k.exp: For frv-linux use "aw" sections.
+ * ld-elf/seg.d: Cater for GNU_STACK segment.
+ * ld-elf/symbol1ref.s: Use data section.
+ * ld-elf/symbol2ref.s: Likewise.
+ * ld-scripts/empty-address-1.d: Don't run on frv-linux.
+ * ld-scripts/empty-address-2a.d: Likewise.
+ * ld-scripts/empty-address-2b.d: Likewise.
+ * ld-scripts/empty-aligned.d: Likewise.
+ * ld-elf/extract-symbol-1sym.d: Tolerate extra target supplied syms.
+ * ld-scripts/sort_b_a-1.d: Likewise.
+ * ld-scripts/sort_b_a.d: Likewise.
+ * ld-scripts/sort_b_a_a-1.d: Likewise.
+ * ld-scripts/sort_b_a_a-2.d: Likewise.
+ * ld-scripts/sort_b_a_a-3.d: Likewise.
+ * ld-scripts/sort_b_a_n-1.d: Likewise.
+ * ld-scripts/sort_b_a_n-2.d: Likewise.
+ * ld-scripts/sort_b_a_n-3.d: Likewise.
+ * ld-scripts/sort_b_n-1.d: Likewise.
+ * ld-scripts/sort_b_n.d: Likewise.
+ * ld-scripts/sort_b_n_a-1.d: Likewise.
+ * ld-scripts/sort_b_n_a-2.d: Likewise.
+ * ld-scripts/sort_b_n_a-3.d: Likewise.
+ * ld-scripts/sort_b_n_n-1.d: Likewise.
+ * ld-scripts/sort_b_n_n-2.d: Likewise.
+ * ld-scripts/sort_b_n_n-3.d: Likewise.
+ * ld-scripts/sort_no-1.d: Likewise.
+ * ld-scripts/sort_no-2.d: Likewise.
+
+2009-09-08 M R Swami Reddy <MR.Swami.Reddy@nsc.com>
+
+ * ld-elf/merge.d: xfail cr16-*-*.
+
+2009-09-08 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/eh5.d: Don't run on hppa64. Allow non-pcrel encoding.
+ Skip extra CIEs emitted on embedded targets and adjust FDE
+ matches to suit.
+
+2009-09-05 Jie Zhang <jie.zhang@analog.com>
+
+ * ld-elf/sec64k.exp: Use ".set" instead of "=" for bfin-*-*.
+
+2009-09-03 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * ld-pe/longsecn.d: Adjusted to match new .text section merging
+ in default PE linker scripts.
+ * ld-pe/longsecn-1.d: Likewise.
+ * ld-pe/longsecn-2.d: Likewise.
+
+2009-08-31 Jie Zhang <jie.zhang@analog.com>
+
+ * lib/ld-lib.exp (is_elf_format): Return 1 for bfin-*-uclinux.
+
+2009-08-31 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-ifunc/ifunc.exp: Match R_PPC64_JUMP_IREL.
+
+2009-08-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/10569
+ * ld-elf/commonpage2.d: New.
+ * ld-elf/maxpage4.d: Likewise.
+ * ld-elf/maxpage4.t: Likewise.
+
+2009-08-26 Maxim Kuvyrkov <maxim@codesourcery.com>
+
+ * ld-m68k/tls-def-1.s: New file.
+ * ld-m68k/tls-def-1.d: New file.
+ * ld-m68k/tls-gd-1.d2: New file.
+ * ld-m68k/tls-gd-1.d3: New file.
+ * ld-m68k/tls-main-1.s: New file.
+ * ld-m68k/tls-main-1.d: New file.
+ * ld-m68k/m68k.exp: Run new TLS tests.
+
+2009-08-23 Andreas Schwab <schwab@linux-m68k.org>
+
+ * ld-powerpc/powerpc.exp: Move relaxing and relocatable relaxing
+ tests from ppc64elftest to ppcelftest and pass -a32 to assembler.
+
+ * ld-powerpc/relax.d: Fix whitespace.
+ * ld-powerpc/relaxr.d: Likewise.
+
+2009-08-21 Daniel Gutson <dgutson@codesourcery.com>
+
+ * ld-arm/callweak.d: Opcodes updated.
+ * ld-arm/callweak.s: Architecture specified.
+ * ld-arm/callweak-2.d: New test case.
+ * ld-arm/callweak-2.s: New file.
+
+2009-08-17 Nick Clifton <nickc@redhat.com>
+
+ * ld-elf/linkonce1.d: Accept "UNUSED" as part of the name of an
+ unused reloc.
+ * ld-elf/linkonce2.d: Likewise.
+
+2009-08-10 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Test go32 stub preservation by objcopy.
+ * ld-i386/i386.exp (go32 stub, go32 stub patch the source)
+ (go32 stub objcopy, go32 stub comparison after objcopy): New.
+
+2009-08-10 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-powerpc/relax.s: New.
+ * ld-powerpc/relax.d: New.
+ * ld-powerpc/relaxr.d: New.
+ * ld-powerpc/powerpc.exp: Add new tests.
+
+2009-08-06 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-arm/arm-elf.exp: Add new test.
+ * ld-arm/cortex-a8-fix-hdr.d: New.
+ * ld-arm/cortex-a8-fix-hdr.s: New.
+ * ld-arm/cortex-a8-fix-hdr.t: New.
+
+2009-08-05 Trevor Smigiel <Trevor_Smigiel@playstation.sony.com>
+
+ * ld-spu/fixup.d: New.
+ * ld-spu/fixup.s: New.
+
+2009-08-05 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-arm/cortex-a8-far-1.s: New.
+ * ld-arm/cortex-a8-far-2.s: New.
+ * ld-arm/cortex-a8-far.d: New.
+ * ld-arm/arm-elf.exp: Add new test.
+
+2009-08-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/6443
+ * ld-i386/i386.exp: Run tlspie1.
+ * ld-x86-64/x86-64.exp: tlspie1.
+
+ * ld-i386/tlspie1.d: New.
+ * ld-i386/tlspie1.s: Likewise.
+ * ld-x86-64/tlspie1.d: Likewise.
+ * ld-x86-64/tlspie1.s: Likewise.
+
+2009-07-31 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-mmix/x.s, ld-mmix/y.s, ld-mmix/zeroeh.ld,
+ ld-mmix/zeroehelf.d, ld-mmix/zeroehmmo.d: Use .gcc_except_table,
+ not .eh_frame.
+
+2009-07-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/shared.exp: Comment out dl3b.
+
+2009-07-30 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-scripts/empty-address-3a.d, ld-scripts/empty-address-3b.d:
+ Skip for mmix-knuth-mmixware.
+
+2009-07-29 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-scripts/default-script.s (text): Globalize.
+ * ld-scripts/default-script1.d, ld-scripts/default-script2.d,
+ ld-scripts/default-script3.d, ld-scripts/default-script4.d: Adjust
+ accordingly.
+
+2009-07-25 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-x86-64/abs-l1om.d: New.
+ * ld-x86-64/protected2-l1om.d: Likewise.
+ * ld-x86-64/protected3-l1om.d: Likewise.
+
+ * ld-x86-64/x86-64.exp: Run abs-l1om, protected2-l1om and
+ protected3-l1om.
+
+2009-07-24 Trevor Smigiel <Trevor_Smigiel@playstation.sony.com>
+ Alan Modra <amodra@bigpond.net.au>
+
+ * ld-spu/pic.d: New.
+ * ld-spu/pic.s: New.
+ * ld-spu/picdef.s: New.
+
+2009-07-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/10434
+ * ld-x86-64/tlsle1.d: New.
+ * ld-x86-64/tlsle1.s: Likewise.
+
+ * ld-x86-64/x86-64.exp: Run tlsle1.
+
+2009-07-21 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/10426
+ * ld-ifunc/ifunc.exp: Check test-1 and libtest-2.so. Updated.
+
+ * ld-ifunc/test-1.c: New.
+ * ld-ifunc/test-2.c: Likewise.
+
+2009-07-17 Chao-ying Fu <fu@mips.com>
+
+ * ld-mips-elf/pic-and-nonpic-3b.dd: Updated to use new PLT
+ entries.
+ * ld-mips-elf/pic-and-nonpic-5b.dd: Likewise.
+ * ld-mips-elf/pic-and-nonpic-6-o32.dd: Likewise.
+ * ld-mips-elf/pic-and-nonpic-6-n32.dd: Likewise.
+ * ld-mips-elf/pic-and-nonpic-6-n64.dd: Likewise.
+
+2009-07-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-ifunc/ifunc-5r-local-i386.d: New.
+ * ld-ifunc/ifunc-5r-local-x86-64.d: Likewise.
+
+2009-07-16 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-arm/arm-target2.s: Add addend cases.
+ * ld-arm/arm-target2-rel.d: Adjust.
+ * ld-arm/arm-target2-abs.d: Adjust.
+ * ld-arm/arm-target2-got-rel.d: Adjust.
+
+2009-07-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-ifunc/ifunc.exp: Don't use -shared/-static to build object
+ files. Use ld_simple_link to build static non-ifunc-using
+ executable. Re-enable static non-ifunc-using executable check.
+
+2009-07-10 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-ifunc/ifunc.exp: Don't check static non-ifunc-using
+ executable.
+
+2009-07-10 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-ifunc/ifunc-1-local-x86.d: Updated.
+ * ld-ifunc/ifunc-1-x86.d: Likewise.
+ * ld-ifunc/ifunc-3a-x86.d: Likewise.
+
+2009-07-10 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-ifunc/ifunc-1-local-x86.d: Updated.
+ * ld-ifunc/ifunc-1-x86.d: Likewise.
+ * ld-ifunc/ifunc-2-local-x86-64.d: Likewise.
+ * ld-ifunc/ifunc-2-x86-64.d: Likewise.
+ * ld-ifunc/ifunc-3a-x86.d: Likewise.
+
+2009-07-10 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-ifunc/ifunc.exp: Run for powerpc. Really generate static
+ executables, renaming the existing dynamic but local tests.
+
+2009-07-08 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-selective/selective.exp: Remove check that $CC contains the
+ string "gcc". Do -dumpversion for $CXX.
+
+2009-06-30 Nick Clifton <nickc@redhat.com>
+
+ PR 10288
+ * ld-arm/arm-app.d: Update expcted disassembly.
+ * ld-arm/arm-be8.d: Likewise.
+ * ld-arm/arm-call.d: Likewise.
+ * ld-arm/arm-lib-plt32.d: Likewise.
+ * ld-arm/arm-lib.d: Likewise.
+ * ld-arm/arm-movwt.d: Likewise.
+ * ld-arm/arm-pic-veneer.d: Likewise.
+ * ld-arm/armthumb-lib.d: Likewise.
+ * ld-arm/armv4-bx.d: Likewise.
+ * ld-arm/cortex-a8-fix-b-rel-arm.d: Likewise.
+ * ld-arm/farcall-mixed-app-v5.d: Likewise.
+ * ld-arm/farcall-mixed-app.d: Likewise.
+ * ld-arm/farcall-mixed-lib.d: Likewise.
+ * ld-arm/farcall-thumb-arm-pic-veneer.d: Likewise.
+ * ld-arm/farcall-thumb-arm-short.d: Likewise.
+ * ld-arm/farcall-thumb-arm.d: Likewise.
+ * ld-arm/farcall-thumb-thumb-m-pic-veneer.d: Likewise.
+ * ld-arm/farcall-thumb-thumb-m.d: Likewise.
+ * ld-arm/farcall-thumb-thumb-pic-veneer.d: Likewise.
+ * ld-arm/farcall-thumb-thumb.d: Likewise.
+ * ld-arm/group-relocs.d: Likewise.
+ * ld-arm/mixed-app-v5.d: Likewise.
+ * ld-arm/mixed-app.d: Likewise.
+ * ld-arm/mixed-lib.d: Likewise.
+ * ld-arm/movw-merge.d: Likewise.
+ * ld-arm/thumb2-b-interwork.d: Likewise.
+ * ld-arm/tls-app.d: Likewise.
+ * ld-arm/tls-lib.d: Likewise.
+
+2009-06-29 Nick Clifton <nickc@redhat.com>
+
+ PR 10288
+ * ld-arm/arm-app-abs32.d: Update expected disassembly.
+ * ld-arm/arm-app.d: Likewise.
+ * ld-arm/arm-lib-plt32.d: Likewise.
+ * ld-arm/arm-lib.d: Likewise.
+ * ld-arm/arm-pic-veneer.d: Likewise.
+ * ld-arm/armthumb-lib.d: Likewise.
+ * ld-arm/farcall-mixed-app-v5.d: Likewise.
+ * ld-arm/farcall-mixed-app.d: Likewise.
+ * ld-arm/farcall-mixed-lib.d: Likewise.
+ * ld-arm/group-relocs.d: Likewise.
+ * ld-arm/mixed-app-v5.d: Likewise.
+ * ld-arm/mixed-app.d: Likewise.
+ * ld-arm/mixed-lib.d: Likewise.
+ * ld-arm/thumb2-bl-undefweak.d: Likewise.
+
+2009-06-27 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/10337
+ * ld-ifunc/binutils.exp: New.
+
+2009-06-25 Kai Tietz <kai.tietz@onevision.com>
+
+ * ld-pe/aligncomm-1.c (size_t): Add typedef.
+ (main): Use it for casting pointer to scalar.
+ * ld-pe/aligncomm-2.c: Likewise.
+ * ld-pe/aligncomm-3.c: Likewise.
+ * ld-pe/aligncomm-4.c: Likewise.
+ * ld-scripts/empty-address.exp: Make sure that for x86_64-*-mingw*
+ target imagebase is set to zero.
+ * ld-scripts/weak.exp: Don't fail for x86_64-*-mingw* target.
+
+2009-06-22 Christophe Lyon <christophe.lyon@st.com>
+
+ ld/testsuite:
+ * ld-arm/farcall-mixed-app.s: Add new references to check more
+ modes switching.
+ * ld-arm/farcall-mixed-lib1.s: Likewise.
+ * ld-arm/farcall-mixed-app-v5.d: Update expected result.
+ * farcall-mixed-app.d: Likewise.
+ * ld-arm/farcall-mixed-lib.d: Likewise.
+
+2009-06-22 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * ld-pe/pe-run.exp (proc test_direct_link_dll): Fix incorrect
+ line-wrapping.
+
+2009-06-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-i386/i386.exp: Run tlsgd2.
+
+ * ld-i386/tlsgd2.d: New.
+ * ld-i386/tlsgd2.s: Likewise.
+
+ * ld-x86-64/tlsgd3.d: Updated.
+
+2009-06-18 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * ld-pe/pe-run.exp (proc test_direct_link_dll): Always pass
+ --enable-auto-import to the linker.
+ * ld-pe/vers-script-1.d: Replace '\$' by '_' in all symbol names.
+ * ld-pe/vers-script-3.d: Likewise.
+ * ld-pe/vers-script-4.d: Likewise.
+ * ld-pe/vers-script-dll.c: Likewise.
+ * lib/ld-lib.exp (proc is_pecoff_format): Also return true for
+ "*-*-cegcc*" targets.
+
+2009-06-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-ifunc/ifunc-9-x86.d: Fix a typo.
+
+2009-06-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/10270
+ * ld-ifunc/ifunc-9-x86.d: New.
+ * ld-ifunc/ifunc-9-x86.s: Likewise.
+
+2009-06-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/10269
+ * ld-ifunc/ifunc-1-local-x86.d: New.
+ * ld-ifunc/ifunc-1-local-x86.s: Likewise.
+ * ld-ifunc/ifunc-2-local-i386.d: Likewise.
+ * ld-ifunc/ifunc-2-local-i386.s: Likewise.
+ * ld-ifunc/ifunc-2-local-x86-64.d: Likewise.
+ * ld-ifunc/ifunc-2-local-x86-64.s: Likewise.
+ * ld-ifunc/ifunc-4-local-x86.d: Likewise.
+ * ld-ifunc/ifunc-4-local-x86.s: Likewise.
+ * ld-ifunc/ifunc-5-local-i386.s: Likewise.
+ * ld-ifunc/ifunc-5-local-x86-64.s: Likewise.
+ * ld-ifunc/ifunc-5a-local-i386.d: Likewise.
+ * ld-ifunc/ifunc-5a-local-x86-64.d: Likewise.
+ * ld-ifunc/ifunc-5b-local-i386.d: Likewise.
+ * ld-ifunc/ifunc-5b-local-x86-64.d: Likewise.
+
+2009-06-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-ifunc/ifunc-2-x86-64.d: Pass --64 to as and -melf_x86_64 to
+ ld.
+ * ld-ifunc/ifunc-5a-x86-64.d: Likewise.
+ * ld-ifunc/ifunc-5b-x86-64.d: Likewise.
+ * ld-ifunc/ifunc-6a-x86-64.d: Likewise.
+ * ld-ifunc/ifunc-6b-x86-64.d: Likewise.
+ * ld-ifunc/ifunc-7a-x86-64.d: Likewise.
+ * ld-ifunc/ifunc-7b-x86-64.d: Likewise.
+
+ * ld-ifunc/ifunc-8a-i386.s: New.
+ * ld-ifunc/ifunc-8a-x86-64.s: Likewise.
+ * ld-ifunc/ifunc-8b-i386.s: Likewise.
+ * ld-ifunc/ifunc-8b-x86-64.s: Likewise.
+ * ld-ifunc/ifunc-8-i386.d: Likewise.
+ * ld-ifunc/ifunc-8-x86-64.d: Likewise.
+
+2009-06-02 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * ld-powerpc/aix-glink-3.s, ld-powerpc/aix-glink-3a.s,
+ ld-powerpc/aix-glink-3b.s, ld-powerpc/aix-glink-3.dd,
+ ld-powerpc/aix-glink-3-32.d, ld-powerpc/aix-glink-3-64.d: New tests.
+ * ld-powerpc/aix52.exp: Run them. Move the lineno tests to maintain
+ alphabetical order.
+
+2009-06-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-ifunc/ifunc-5-i386.d: Renamed to ...
+ * ld-ifunc/ifunc-5a-i386.d: This.
+
+ * ld-ifunc/ifunc-5-x86-64.d: Renamed to ...
+ * ld-ifunc/ifunc-5a-x86-64.d: This.
+
+ * ld-ifunc/ifunc-5b-i386.d: New.
+ * ld-ifunc/ifunc-5b-x86-64.d: Likewise.
+ * ld-ifunc/ifunc-6a-i386.d: Likewise.
+ * ld-ifunc/ifunc-6a-x86-64.d: Likewise.
+ * ld-ifunc/ifunc-6b-i386.d: Likewise.
+ * ld-ifunc/ifunc-6b-x86-64.d: Likewise.
+ * ld-ifunc/ifunc-6-i386.s: Likewise.
+ * ld-ifunc/ifunc-6-x86-64.s: Likewise.
+ * ld-ifunc/ifunc-7a-i386.d: Likewise.
+ * ld-ifunc/ifunc-7a-x86-64.d: Likewise.
+ * ld-ifunc/ifunc-7b-i386.d: Likewise.
+ * ld-ifunc/ifunc-7b-x86-64.d: Likewise.
+ * ld-ifunc/ifunc-7-i386.s: Likewise.
+ * ld-ifunc/ifunc-7-x86-64.s: Likewise.
+
+2009-06-01 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/10205
+ * ld-ifunc/ifunc.exp (contains_irelative_reloc): New.
+ Use it on executable and shared library.
+ Run *.d.
+
+ * ld-ifunc/lib.c: Add a hidden alias, __GI_library_func2, for
+ library_func2.
+ (library_func): New.
+
+ * ld-ifunc/ifunc-1-x86.d: New.
+ * ld-ifunc/ifunc-1-x86.s: Likewise.
+ * ld-ifunc/ifunc-2-i386.d: Likewise.
+ * ld-ifunc/ifunc-2-i386.s: Likewise.
+ * ld-ifunc/ifunc-2-x86-64.d: Likewise.
+ * ld-ifunc/ifunc-2-x86-64.s: Likewise.
+ * ld-ifunc/ifunc-3a-x86.d: Likewise.
+ * ld-ifunc/ifunc-3b-x86.d: Likewise.
+ * ld-ifunc/ifunc-3-x86.s: Likewise.
+ * ld-ifunc/ifunc-4-x86.d: Likewise.
+ * ld-ifunc/ifunc-4-x86.s: Likewise.
+ * ld-ifunc/ifunc-5-i386.d: Likewise.
+ * ld-ifunc/ifunc-5-i386.s: Likewise.
+ * ld-ifunc/ifunc-5-x86-64.d: Likewise.
+ * ld-ifunc/ifunc-5-x86-64.s: Likewise.
+
+2009-05-27 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * ld-pe/non-c-lang-syms.c: New dump test source file.
+ * ld-pe/non-c-lang-syms.d: New dump test pattern file.
+ * ld-pe/pe.exp: Run new "foreign symbol" test.
+
+2009-05-26 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-powerpc/vxworks-relax-2.s: New.
+ * ld-powerpc/vxworks-relax-2.rd: New.
+ * ld-powerpc/powerpc.exp: Add it.
+
+2009-05-22 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-scripts/rgn-over7.d: Adjust expected message for recent change.
+
+2009-05-22 Julian Brown <julian@codesourcery.com>
+
+ * ld-arm/cortex-a8-arm-target.s: New.
+ * ld-arm/cortex-a8-thumb-target.s: New.
+ * ld-arm/cortex-a8-fix-b-rel.s: New.
+ * ld-arm/cortex-a8-fix-b-rel-arm.d: New.
+ * ld-arm/cortex-a8-fix-b-rel-thumb.d: New.
+ * ld-arm/cortex-a8-fix-b.s: New.
+ * ld-arm/cortex-a8-fix-b.d: New.
+ * ld-arm/cortex-a8-fix-bl-rel.s: New.
+ * ld-arm/cortex-a8-fix-bl-rel-arm.d: New.
+ * ld-arm/cortex-a8-fix-bl-rel-thumb.d: New.
+ * ld-arm/cortex-a8-fix-bl.s: New.
+ * ld-arm/cortex-a8-fix-bl.d: New.
+ * ld-arm/cortex-a8-fix-bcc-rel.s: New.
+ * ld-arm/cortex-a8-fix-bcc-rel-thumb.d: New.
+ * ld-arm/cortex-a8-fix-bcc.s: New.
+ * ld-arm/cortex-a8-fix-bcc.d: New.
+ * ld-arm/cortex-a8-fix-blx-rel.s: New.
+ * ld-arm/cortex-a8-fix-blx-rel-arm.d: New.
+ * ld-arm/cortex-a8-fix-blx-rel-thumb.d: New.
+ * ld-arm/cortex-a8-fix-blx.s: New.
+ * ld-arm/cortex-a8-fix-blx.d: New.
+ * ld-arm/arm-elf.exp: Add new tests.
+
+2009-05-22 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-scripts/rgn-at4.t: New.
+ * ld-scripts/rgn-at4.d: New.
+
+2009-05-21 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * ld-pe/aligncomm-1.c (_alloca): Add dummy definition to
+ satisfy final link on Windows targets when using gcc-3.
+ * ld-pe/aligncomm-2.c (_alloca): Likewise.
+ * ld-pe/aligncomm-3.c (_alloca): Likewise.
+ * ld-pe/aligncomm-4.c (_alloca): Likewise.
+
+2009-05-20 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * lib/ld-lib.exp (run_ld_link_tests): Filter test names against
+ runtests list.
+
+2009-05-19 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * ld-pe/aligncomm-1.c: New test source file.
+ * ld-pe/aligncomm-2.c: Likewise.
+ * ld-pe/aligncomm-3.c: Likewise.
+ * ld-pe/aligncomm-4.c: Likewise.
+ * ld-pe/aligncomm.d: New test pattern file.
+
+ * ld-pe/direct.exp: Deleted, and content moved into ...
+ * ld-pe/pe-run.exp: ... New common file for all PE run tests.
+
+ * ld-pe/vers-script.exp: Deleted, and content merged into ...
+ * ld-pe/pe-compile.exp: ... New common file for PE tests needing
+ a compiler, adding aligned common tests.
+
+ * ld-pe/pe.exp: Update header comment.
+
+2009-05-17 Aaron W. LaFramboise <aaron98wiridge9@aaronwl.com>
+
+ * ld-pe/exports.d: New file.
+ * ld-pe/exports.s: New file.
+ * ld-pe/pe.exp: New test for empty export table.
+
+2009-05-16 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/orphan3.d, * ld-elf/orphan3a.s, * ld-elf/orphan3b.s,
+ * ld-elf/orphan3c.s, * ld-elf/orphan3d.s, * ld-elf/orphan3e.s,
+ * ld-elf/orphan3f.s: Increase section size to 16.
+ * ld-pe/orphan.d, * ld-pe/orphana.s, * ld-pe/orphanb.s,
+ * ld-pe/orphand.s, * ld-pe/orphane.s: Likewise.
+
+2009-05-15 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/orphan3.d, * ld-elf/orphan3a.s, * ld-elf/orphan3b.s,
+ * ld-elf/orphan3c.s, * ld-elf/orphan3d.s, * ld-elf/orphan3e.s,
+ * ld-elf/orphan3f.s: New test.
+ * ld-pe/orphan.d, * ld-pe/orphana.s, * ld-pe/orphanb.s,
+ * ld-pe/orphand.s, * ld-pe/orphane.s: New test.
+ * ld-pe/direct.exp: Use is_pecoff_format.
+ * ld-pe/longsecn.exp: Delete.
+ * ld-pe/pe.exp: Run new test and longsecn tests.
+
+2009-05-15 Andrew Stubbs <ams@codesourcery.com>
+ Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm-elf.exp: Add unwind-5.
+ * ld-arm/discard-unwind.ld: New file.
+ * ld-arm/unwind-5.d: New test.
+ * ld-arm/unwind-5.s: New test.
+
+2009-05-14 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * ld-spu/icache1.d: Update for compact stubs.
+
+2009-05-14 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * ld-spu/icache1.d: Update all addresses to accomodate icache
+ buffer shifted down 0x800 bytes.
+
+2009-05-14 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * ld-spu/icache.d: Update file offsets.
+ * ld-spu/ovl.d: Likewise.
+ * ld-spu/ovl1.d: Likewise.
+
+2009-05-14 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-spu/icache1.d: Update for changed overlay manager placement.
+ * ld-spu/ovl.d: Likewise.
+ * ld-spu/ovl2.d: Likewise.
+
+2009-05-05 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm.ld: Add .ARM.exidx and .ARM.extab.
+ * ld-arm/arm-elf.exp: Add unwind-[1-4].
+ * ld-arm/unwind-1.d: New test.
+ * ld-arm/unwind-1.s: New test.
+ * ld-arm/unwind-2.d: New test.
+ * ld-arm/unwind-2.s: New test.
+ * ld-arm/unwind-3.d: New test.
+ * ld-arm/unwind-3.s: New test.
+ * ld-arm/unwind-4.d: New test.
+ * ld-arm/unwind-4.s: New test.
+
+2009-05-01 Julian Brown <julian@codesourcery.com>
+
+ * ld-arm/arm-elf.exp (armeabitests): Add thumb2-bl-blx-interwork test.
+ * ld-arm/thumb2-bl-blx-interwork.s: New.
+ * ld-arm/thumb2-bl-blx-interwork.d: New.
+
+2009-04-30 Nick Clifton <nickc@redhat.com>
+
+ * ld-ifunc: New directory.
+ * ld-ifunc/ifunc.exp: New file: Run the IFUNC tests.
+ * ld-ifunc/prog.c: New file.
+ * ld-ifunc/lib.c: New file.
+
+2009-04-30 Joseph Myers <joseph@codesourcery.com>
+
+ * ld-arm/movw-shared-1.d, ld-arm/movw-shared-1.s,
+ ld-arm/movw-shared-2.d, ld-arm/movw-shared-2.s,
+ ld-arm/movw-shared-3.d, ld-arm/movw-shared-3.s,
+ ld-arm/movw-shared-4.d, ld-arm/movw-shared-4.s: New tests.
+ * ld-arm/arm-elf.exp: Run these new tests.
+
+2009-04-29 Chris Demetriou <cgd@google.com>
+
+ * ld-elfvers/vers.exp (vers4b): New test to verify that
+ --no-export-dynamic undoes --export-dynamic.
+
+2009-04-28 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-i386/vxworks1-lib.dd: Adjust expected disassembly.
+ * ld-i386/vxworks1.dd: Adjust expected disassembly.
+ * ld-i386/vxworks1-lib.rd: Sections are swapped.
+
+2009-04-22 Christophe Lyon <christophe.lyon@st.com>
+
+ PR9743
+ * ld-arm/arm-call.d: Update expected result.
+ * ld-arm/arm-pic-veneer.d: Likewise.
+ * ld-arm/thumb2-b-interwork.d: Likewise.
+
+2009-04-22 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-scripts/rgn-at1.d: Cope with larger padding on sections.
+ * ld-scripts/rgn-at2.d: Likewise.
+ * ld-scripts/rgn-at3.d: Likewise.
+
+2009-04-21 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-arm/farcall-mix.d, ld-arm/farcall-mix2.d,
+ ld-arm/farcall-group-size2.d, ld-arm/farcall-group.d,
+ ld-arm/farcall-mixed-lib.d: Update for linker changes.
+
+2009-04-17 Christophe Lyon <christophe.lyon@st.com>
+
+ * ld-arm/arm-elf.exp: Add new test farcall-mixed-lib.
+ * ld-arm/farcall-mixed-lib.d: Update expected output.
+ * ld-arm/farcall-mixed-lib1.s: New file.
+ * ld-arm/farcall-mixed-lib2.s: New file.
+
+2009-04-16 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * ld-powerpc/aix-export-2.s, ld-powerpc/aix-export-2.nd: New test.
+ * ld-powerpc/aix52.exp: Run it.
+
+2009-04-16 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-libs/lib-1.s: Use "==" instead of ".set".
+ * ld-libs/lib-2.s: Likewise.
+ * ld-scripts/defined.s: Likewise.
+
+2009-04-15 Christophe Lyon <christophe.lyon@st.com>
+
+ * ld-arm/arm-elf.exp: Add 1 more test to check undef weak
+ reference with PLT in ARM mode.
+ * ld-arm/thumb2-bl-undefweak1.d, ld-arm/thumb2-bl-undefweak1.s:
+ New files.
+
+2009-04-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-i386/abs.d: Add --32 for assembler and -melf_i386 for
+ linker.
+
+2009-04-03 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-scripts/rgn-at.s: Use explicit .section pseudos.
+
+2009-04-03 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * ld-pe/image_size.d (#target): Also run test on Cygwin and x86_64
+ MinGW targets.
+
+2009-04-03 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-scripts/rgn-at.exp: New.
+ * ld-scripts/rgn-at.s: New.
+ * ld-scripts/rgn-at1.d: New.
+ * ld-scripts/rgn-at1.t: New.
+ * ld-scripts/rgn-at2.d: New.
+ * ld-scripts/rgn-at2.t: New.
+ * ld-scripts/rgn-at3.d: New.
+ * ld-scripts/rgn-at3.t: New.
+
+2009-04-03 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * ld-pe/export_dynamic_warning.s: Make dummy code portable.
+
+2009-04-02 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * ld-pe/export_dynamic_warning.d (#warning): Fix regex pattern.
+
+2009-04-02 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ PR ld/6744
+ * ld-pe/export_dynamic_warning.d: New test control file.
+ * ld-pe/export_dynamic_warning.s: New test source file.
+ * ld-pe/pe.exp: Also run export_dynamic_warning dump test.
+
+2009-04-02 Christophe Lyon <christophe.lyon@st.com>
+
+ * ld-arm/farcall-thumb-thumb-pic-veneer.d: Update expected
+ results.
+ * ld-arm/farcall-thumb-thumb.d: Likewise.
+
+2009-04-02 Nick Clifton <nickc@redhat.com>
+
+ PR 9987
+ * lib/ld-lib.exp (check_gc_sections_available): Do not run garbage
+ collection tests for cygwin targets.
+
+2009-04-01 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * ld-powerpc/aix-gc-1.nd: New test.
+ * ld-powerpc/aix52.exp: Run it.
+
+2009-04-01 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * ld-powerpc/aix-rel-1.s, ld-powerpc/aix-rel-1.od: New test.
+ * ld-powerpc/aix52.exp: Run it.
+
+2009-04-01 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * ld-cygwin/exe-export.exp: Add "-lkernel32" when linking test exe.
+ * ld-cygwin/testexe.c (testexe_main): Indicate whether global_a
+ was set to correct final value using error return status.
+ (testexe_dummy): Dummy function calls an import from kernel32.dll
+ to ensure it is mapped into the process space at runtime.
+
+2009-04-01 Christophe Lyon <christophe.lyon@st.com>
+
+ * ld-arm/arm-elf.exp: BE8 tests expect the same output as the
+ default ones.
+ * ld-arm/arm-be8.d: Print opcodes in little endian.
+ * ld-arm/farcall-thumb-arm-be8.d: Removed useless expected result.
+ * ld-arm/farcall-arm-arm-be8.d: Likewise.
+
+2009-03-25 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/tls-e-dtpoffd3.d, ld-cris/tls-e-tpoffcomm1.d,
+ ld-cris/tls-e-tpoffcomm1.s: New tests.
+
+2009-03-24 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/tls-commx.s, ld-cris/tls-dso-dtpoffd2.d,
+ ld-cris/tls-dso-dtpoffd4.d, ld-cris/tls-dtpoffdx.s,
+ ld-cris/tls-e-dtpoffd1.d: New tests.
+
+ * ld-cris/tls-e-20.d, ld-cris/tls-e-20a.d, ld-cris/tls-e-21.d,
+ ld-cris/tls-e-80.d, ld-cris/tls-gd-3.d, ld-cris/tls-gd-3h.d,
+ ld-cris/tls-global-74.d, ld-cris/tls-ldgde-14.d,
+ ld-cris/tls-ldgde-15.d, ld-cris/tls-legd-16.d,
+ ld-cris/tls-legd-17.d, ld-cris/tls-local-57.d,
+ ld-cris/tls-local-58.d, ld-cris/tls-local-59.d: Adjust for BFD
+ change in link-time known GOT contents for GD relocations.
+
+2009-03-20 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/9970
+ * ld-pie/pie.exp: Use -fpie to compile. Run *.d tests.
+
+ * ld-pie/start.d: New.
+ * ld-pie/start.s: Likewise.
+
+2009-03-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/6766
+ * ld-undefined/dummy.s: New.
+ * ld-undefined/entry-1.d: Likewise.
+ * ld-undefined/entry-2.d: Likewise.
+ * ld-undefined/entry-3.d: Likewise.
+ * ld-undefined/entry-4.d: Likewise.
+ * ld-undefined/entry-5.d: Likewise.
+ * ld-undefined/entry-6.d: Likewise.
+ * ld-undefined/entry.exp: Likewise.
+ * ld-undefined/entry.s: Likewise.
+
+2009-03-17 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-spu/icache1.d: Update for fixed set_id, new manager entry, and
+ reduced data.
+
+2009-03-17 Alan Modra <amodra@bigpond.net.au>
+
+ * config/default.exp (get_link_files): Replace double dollars with
+ single dollars.
+
+2009-03-17 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-bootstrap/bootstrap.exp: Use DO_COMPARE. Remove unnecessary
+ cleanup and log output.
+
+2009-03-16 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * ld-bootstrap/bootstrap.exp: Also pass '-liconv' to linker when
+ linking statically on Cygwin, necessitated by '-lintl'.
+
+2009-03-15 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * ld-auto-import/auto-import.exp: Add missing dll entrypoint.
+
+2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * ld-powerpc/aix-export-1-all.dd, ld-powerpc/aix-export-1-full.dd,
+ ld-powerpc/aix-export-1a.s, ld-powerpc/aix-export-1b.s: New tests.
+ * ld-powerpc/aix52.exp: Run them.
+
+2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * ld-powerpc/aix-gc-1.s, ld-powerpc/aix-gc-1.ex,
+ ld-powerpc/aix-gc-1-32.dd, ld-powerpc/aix-gc-1-64.dd,
+ ld-powerpc/aix-weak-1-gcdso.dnd, ld-powerpc/aix-weak-1-gcdso.hd,
+ ld-powerpc/aix-weak-1-gcdso.nd: New tests.
+ * ld-powerpc/aix52.exp: Run them.
+
+2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * ld-powerpc/aix-glink-2a.s, ld-powerpc/aix-glink-2a.ex,
+ ld-powerpc/aix-glink-2b.s, ld-powerpc/aix-glink-2c.s,
+ ld-powerpc/aix-glink-2c.ex, ld-powerpc/aix-glink-2d.s,
+ ld-powerpc/aix-glink-2-32.dd, ld-powerpc/aix-glink-2-64.dd,
+ ld-powerpc/aix-weak-1a.s, ld-powerpc/aix-weak-1b.s,
+ ld-powerpc/aix-weak-1-rel.hd, ld-powerpc/aix-weak-1-rel.nd,
+ ld-powerpc/aix-weak-1-dso.hd, ld-powerpc/aix-weak-1-dso.nd,
+ ld-powerpc/aix-weak-1-dso.dnd, ld-powerpc/aix-weak-1.ex,
+ ld-powerpc/aix-weak-2a.s, ld-powerpc/aix-weak-2a.ex,
+ ld-powerpc/aix-weak-2a.nd, ld-powerpc/aix-weak-2b.s,
+ ld-powerpc/aix-weak-2b.nd, ld-powerpc/aix-weak-2c.s,
+ ld-powerpc/aix-weak-2c.ex, ld-powerpc/aix-weak-2c.nd,
+ ld-powerpc/aix-weak-2c.od, ld-powerpc/aix-weak-3a.s,
+ ld-powerpc/aix-weak-3a.ex, ld-powerpc/aix-weak-3b.s,
+ ld-powerpc/aix-weak-3b.ex, ld-powerpc/aix-weak-3-32.d,
+ ld-powerpc/aix-weak-3-32.dd, ld-powerpc/aix-weak-3-64.d,
+ ld-powerpc/aix-weak-3-64.dd: New tests.
+ * ld-powerpc/aix52.exp: Run them. Replace tmp/aix-* with
+ tmp/aix64-* in 64-bit ld options.
+
+2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * ld-powerpc/aix-no-dup-syms-1a.s, ld-powerpc/aix-no-dup-syms-1b.s,
+ ld-powerpc/aix-no-dup-syms-1.ex, ld-powerpc/aix-no-dup-syms-1.im,
+ ld-powerpc/aix-no-dup-syms-1-dso.dnd,
+ ld-powerpc/aix-no-dup-syms-1-dso.drd,
+ ld-powerpc/aix-no-dup-syms-1-dso.nd,
+ ld-powerpc/aix-no-dup-syms-1-dso.rd,
+ ld-powerpc/aix-no-dup-syms-1-rel.nd,
+ ld-powerpc/aix-no-dup-syms-1-rel.rd: New tests.
+ * ld-powerpc/aix52.exp: Run them.
+
+2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * ld-powerpc/aix-abs-branch-1.nd,
+ ld-powerpc/aix-abs-reloc-1.nd: New tests.
+ * ld-powerpc/aix52.exp: Run them.
+
+2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * ld-powerpc/aix-lineno-1.s, ld-powerpc/aix-lineno-1.txt,
+ ld-powerpc/aix-lineno-1a.dd, ld-powerpc/aix-lineno-1a.nd,
+ ld-powerpc/aix-lineno-1b.dd, ld-powerpc/aix-lineno-1b.nd: New tests.
+ * ld-powerpc/aix52.exp: Run them. Copy aix-lineno-1.txt to tmpdir.
+
+2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * ld-powerpc/aix-toc-1.ex, ld-powerpc/aix-toc-1a.s,
+ ld-powerpc/aix-toc-1b.s, ld-powerpc/aix-toc-1-32.dd,
+ ld-powerpc/aix-toc-1-64.dd: New tests.
+ * ld-powerpc/aix52.exp: Run them.
+
+2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * ld-powerpc/aix-glink-1.ex, ld-powerpc/aix-glink-1.s,
+ ld-powerpc/aix-glink-1-32.dd, ld-powerpc/aix-glink-1-64.dd,
+ ld-powerpc/aix-glink-1-32.d, ld-powerpc/aix-glink-1-64.d: New tests.
+ * ld-powerpc/aix52.exp: Run them.
+
+2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * ld-powerpc/aix-abs-branch-1.im, ld-powerpc/aix-abs-branch-1.ex,
+ ld-powerpc/aix-abs-branch-1.s,
+ ld-powerpc/aix-abs-branch-1.dd: New test.
+ * ld-powerpc/aix52.exp: Run it.
+
+2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * ld-powerpc/aix-abs-reloc-1.ex, ld-powerpc/aix-abs-reloc-1.im,
+ ld-powerpc/aix-abs-reloc-1.od, ld-powerpc/aix-abs-reloc-1.s: New test.
+ * ld-powerpc/aix52.exp: Run it.
+
+2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * ld-powerpc/aix-core-sec-1.s, ld-powerpc/aix-core-sec-1.ex,
+ ld-powerpc/aix-core-sec-1.hd, ld-powerpc/aix-core-sec-2.s,
+ ld-powerpc/aix-core-sec-2.ex, ld-powerpc/aix-core-sec-2.hd,
+ ld-powerpc/aix-core-sec-3.s, ld-powerpc/aix-core-sec-3.ex,
+ ld-powerpc/aix-core-sec-3.hd: New tests.
+ * ld-powerpc/aix52.exp: New harness.
+
+2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * lib/ld-lib.exp (ar_simple_create): Add an "aropts" parameter.
+ (run_ld_link_tests): Treat the second list element as "ar" options
+ when creating an archive. Don't run the linker in this case.
+ (run_cc_link_tests): Likewise.
+
+2009-03-13 Nick Clifton <nickc@redhat.com>
+
+ * lib/ld-lib.exp (run_dump_test): Add verbose to list of globals.
+ Replace call to verbose_eval with a test of verbose level. If
+ greater than 2 always dump the contents of the dumpfile. If equal
+ to 2 only dump the contents if the regexp diff failed.
+ (proc verbose_eval): Delete.
+
+2009-03-07 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ * ld-elf/empty2.d: Remove xfail for hppa*-*-*.
+ * ld-elf/merge.d: Change xfail for hppa to hppa*64*-*-*.
+
+2009-03-05 Christophe Lyon <christophe.lyon@st.com>
+
+ * ld-arm/arm-elf.exp: Add new farcall-group-limit test.
+ * ld-arm/farcall-group-limit.d: New file.
+ * ld-arm/farcall-group3.s: New file.
+ * ld-arm/farcall-group4.s: New file.
+
+2009-03-05 Christophe Lyon <christophe.lyon@st.com>
+
+ * ld-arm/arm-elf.exp: Add 2 more tests to check long branch stubs
+ in PLT context.
+ * ld-arm/farcall-mixed-app-v5.d: New file.
+ * ld-arm/farcall-mixed-app.d: Likewise.
+ * ld-arm/farcall-mixed-app.r: Likewise.
+ * ld-arm/farcall-mixed-app.s: Likewise.
+ * ld-arm/farcall-mixed-app.sym: Likewise.
+ * ld-arm/farcall-mixed-lib.d: Likewise.
+ * ld-arm/farcall-mixed-lib.r: Likewise.
+
+2009-03-04 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlsmark.s, * ld-powerpc/tlsmark.d: New test.
+ * ld-powerpc/tlsmark32.s, * ld-powerpc/tlsmark32.d: New test.
+ * ld-powerpc/powerpc.exp: Run them.
+
+2009-03-02 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+ * ld-scripts/regions-alias-1.t: New file.
+ * ld-scripts/regions-alias-2.t: New file.
+ * ld-scripts/regions-alias-3.t: New file.
+ * ld-scripts/regions-alias-4.t: New file.
+ * ld-scripts/script.exp: Run region alias tests.
+
+2009-02-27 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * ld-pe/pe.exp: Disable auto-import when linking on Cygwin.
+
+2009-02-26 Christophe Lyon <christophe.lyon@st.com>
+
+ * ld-arm/arm-elf.exp: Add 3 tests for the 3 new stubs.
+ * ld-arm/farcall-thumb-arm-pic-veneer.d: New expected result, the
+ test is now expected to pass.
+ * ld-arm/farcall-thumb-thumb-m-pic-veneer.d: Likewise.
+ * ld-arm/farcall-thumb-thumb-pic-veneer.d: Likewise.
+
+2009-02-25 Christophe Lyon <christophe.lyon@st.com>
+
+ * ld-arm/thumb2-bl-as-thumb1-bad-noeabi.d: Update expected result,
+ as stubs are now generated and the end of the .text section.
+ * ld-arm/thumb2-bl-bad-noeabi.d: Likewise.
+
+2009-02-24 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-arm/farcall-arm-thumb-blx-pic-veneer.d,
+ ld-arm/farcall-arm-thumb-pic-veneer.d,
+ ld-arm/farcall-thumb-thumb-blx-pic-veneer.d: Update for fixed
+ Thumb PIC stub.
+
+2009-02-24 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-arm/arm-elf.exp (armeabitests): Update duplicate test names.
+ Use normal output files for big-endian.
+ * ld-arm/farcall-arm-arm-be.d, ld-arm/farcall-thumb-arm-be.d: Delete.
+ * ld-arm/farcall-arm-arm-be8.d, ld-arm/farcall-arm-arm-pic-veneer.d,
+ ld-arm/farcall-arm-arm.d, ld-arm/farcall-arm-thumb-blx-pic-veneer.d,
+ ld-arm/farcall-arm-thumb-blx.d, ld-arm/farcall-arm-thumb-pic-veneer.d,
+ ld-arm/farcall-arm-thumb.d, ld-arm/farcall-group-size2.d,
+ ld-arm/farcall-group.d, ld-arm/farcall-mix.d, ld-arm/farcall-mix2.d,
+ ld-arm/farcall-thumb-arm-be8.d,
+ ld-arm/farcall-thumb-arm-blx-pic-veneer.d,
+ ld-arm/farcall-thumb-arm-blx.d, ld-arm/farcall-thumb-arm-short.d,
+ ld-arm/farcall-thumb-arm.d,
+ ld-arm/farcall-thumb-thumb-blx-pic-veneer.d,
+ ld-arm/farcall-thumb-thumb-blx.d, ld-arm/farcall-thumb-thumb-m.d,
+ ld-arm/farcall-thumb-thumb.d, ld-arm/thumb2-bl-as-thumb1-bad.d,
+ ld-arm/thumb2-bl-bad.d: Update for moved stubs.
+
+2009-02-23 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-arm/arm-elf.exp (armeabitests): Run new tests. Correct BE8 output
+ filename.
+ * ld-arm/farcall-arm-arm-be.d, ld-arm/farcall-thumb-arm-be.d: New.
+
+2009-02-23 Christophe Lyon <christophe.lyon@st.com>
+
+ * ld-arm/arm-elf.exp: Add new farcall-thumb-arm-be8 test.
+ * ld-arm/farcall-thumb-arm-be8.d: New expected result.
+ * ld-arm/farcall-arm-arm-be8.d: Replace wildcards by instructions.
+
+2009-02-23 Christophe Lyon <christophe.lyon@st.com>
+
+ * ld-arm/arm-elf.exp: Rewrite non-EABI variants of
+ thumb2-bl-as-thumb1-bad and thumb2-bl-bad tests, which now
+ pass. farcall-thumb-thumb now passes in EABI mode.
+ * ld-arm/farcall-thumb-arm-pic-veneer.d: Fixed name, source, as
+ and ld flags to match intended test.
+ * ld-arm/farcall-thumb-arm.d: New expected result.
+ * ld-arm/farcall-thumb-thumb-m.d: Likewise.
+ * ld-arm/farcall-thumb-thumb-m-pic-veneer.d: Fixed name and ld
+ flags.
+ * ld-arm/farcall-thumb-thumb-pic-veneer.d: Likewise.
+ * ld-arm/farcall-thumb-thumb.d: New expected result, this test is
+ now expected to pass.
+ * ld-arm/thumb2-bl-as-thumb1-bad-noeabi.d: Likewise.
+ * ld-arm/thumb2-bl-bad-noeabi.d: Likewise.
+ * ld-arm/thumb2-bl-as-thumb1-bad.d: Update addresses according to
+ new use.
+ * ld-arm/thumb2-bl-as-thumb1-bad.s: Update comment.
+
+2009-18-02 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * ld-pe/longsecn-1.d: New test file.
+ * ld-pe/longsecn-2.d: Likewise.
+ * ld-pe/longsecn-3.d: Likewise.
+ * ld-pe/longsecn-4.d: Likewise.
+ * ld-pe/longsecn-5.d: Likewise.
+ * ld-pe/longsecn.d: Likewise.
+ * ld-pe/longsecn.exp: New test control script.
+ * ld-pe/longsecn.s: New test source file.
+
+2009-02-18 Christophe Lyon <christophe.lyon@st.com>
+
+ * ld-arm/farcall-arm-arm-pic-veneer.d,
+ ld-arm/farcall-arm-thumb-blx-pic-veneer.d,
+ ld-arm/farcall-arm-thumb-pic-veneer.d,
+ ld-arm/farcall-thumb-arm-blx-pic-veneer.d,
+ ld-arm/farcall-thumb-thumb-blx-pic-veneer.d: Fix expected stub
+ target.
+
+2009-02-06 Joseph Myers <joseph@codesourcery.com>
+
+ * lib/ld-lib.exp (check_gc_sections_available): Return 0 for
+ *-*-mingw*.
+
+2009-02-05 Joseph Myers <joseph@codesourcery.com>
+
+ * ld-arm/arm-elf.exp (armeabitests): Restore thumb2-b-interwork.
+
+2009-02-03 Maxim Kuvyrkov <maxim@codesourcery.com>
+
+ * ld-m68k/got-multigot-12-13-14-34-35-ok.d: Update.
+ * ld-m68k/got-multigot-14-ok.d: Update.
+ * ld-m68k/m68k-got.exp: Update.
+ * ld-m68k/got-negative-12-13-14-34-ok.d: Update.
+ * ld-m68k/got-negative-14-ok.d: Update.
+ * ld-m68k/tls-gd-1.d, ld-m68k/tls-gd-2.d: New tests.
+ * ld-m68k/tls-gd-ie-1.d, ld-m68k/tls-ie-1.d: New tests.
+ * ld-m68k/tls-ld-1.d, ld-m68k/tls-ld-2.d: New tests.
+ * ld-m68k/tls-ld-1.s, ld-m68k/tls-ld-2.s, ld-m68k/tls-le-1.s:
+ New test sources.
+ * ld-m68k/tls-no-1.s, ld-m68k/tls-gd-ie-1.s, ld-m68k/tls-gd-1.s:
+ New test sources.
+ * ld-m68k/tls-gd-2.s, ld-m68k/tls-ie-1.s: New test sources.
+ * ld-m68k/m68k.exp: Run new tests.
+ (merge isa-a isa-a:nodiv): Fix.
+
+2009-02-01 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * ld-elf/eh-group2.s: New `.cfi_lsda' referencing `.gcc_except_table'.
+ * ld-elf/eh-group.exp: New test and conditional defininiton of `ELF64'.
+
+2009-01-29 Nick Clifton <nickc@redhat.com>
+
+ * lib/ld-lib.exp (check_gc_sections_available): Add MeP to list of
+ targets which do not support garbage collection.
+ * ld-srec/srec.exp (run_srec_test): Expect tests to fail for MeP.
+ * ld-elf/group8a.d: Likewise.
+ * ld-elf/group8b.d: Likewise.
+ * ld-elf/group9a.d: Likewise.
+ * ld-elf/group9b.d: Likewise.
+
+2009-01-27 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/tls-tbss64.s, ld-cris/tls-e-80.d: New test.
+
+ * ld-cris/tls-e-20.d, ld-cris/tls-e-20a.d, ld-cris/tls-e-22.d,
+ ld-cris/tls-ldgde-14.d, ld-cris/tls-ldgde-15.d,
+ ld-cris/tls-ldgdex-14.d, ld-cris/tls-ldgdex-15.d: Adjust for
+ change in relocation values.
+
+ * ld-cris/weakhiddso.d, ld-cris/weakhid.s: New test.
+
+2009-01-26 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-powerpc/powerpc.exp: Add vxworks relax testcase.
+ * ld-powerpc/vxworks-relax.s, ld-powerpc/vxworks-relax.rd: New.
+ * ld-powerpc/vxworks1.ld: Add .pad and .far input sections.
+ * ld-powerpc/vxworks1.rd: Correct regexp for undefined symbols.
+
+2009-01-26 Andrew Stubbs <ams@codesourcery.com>
+
+ * ld-arm/attr-merge-3.attr: Update following gas change.
+ * ld-arm/attr-merge-2.attr: Update Tag_ARM_ISA_use and
+ Tag_THUMB_ISA_use following gas changes.
+ * ld-arm/attr-merge-4.attr: Likewise.
+ * ld-arm/attr-merge-5.attr: Likewise.
+ * ld-arm/attr-merge-arch-1.attr: Likewise.
+ * ld-arm/attr-merge-arch-2.attr: Likewise.
+ * ld-arm/attr-merge-unknown-2.d: Likewise.
+ * ld-arm/attr-merge-unknown-2r.d: Likewise.
+ * ld-arm/attr-merge-unknown-3.d: Likewise.
+ * ld-arm/attr-merge-wchar-00-nowarn.d: Likewise.
+ * ld-arm/attr-merge-wchar-00.d: Likewise.
+ * ld-arm/attr-merge-wchar-02-nowarn.d: Likewise.
+ * ld-arm/attr-merge-wchar-02.d: Likewise.
+ * ld-arm/attr-merge-wchar-04-nowarn.d: Likewise.
+ * ld-arm/attr-merge-wchar-04.d: Likewise.
+ * ld-arm/attr-merge-wchar-20-nowarn.d: Likewise.
+ * ld-arm/attr-merge-wchar-20.d: Likewise.
+ * ld-arm/attr-merge-wchar-22-nowarn.d: Likewise.
+ * ld-arm/attr-merge-wchar-22.d: Likewise.
+ * ld-arm/attr-merge-wchar-24-nowarn.d: Likewise.
+ * ld-arm/attr-merge-wchar-40-nowarn.d: Likewise.
+ * ld-arm/attr-merge-wchar-40.d: Likewise.
+ * ld-arm/attr-merge-wchar-42-nowarn.d: Likewise.
+ * ld-arm/attr-merge-wchar-44-nowarn.d: Likewise.
+ * ld-arm/attr-merge-wchar-44.d: Likewise.
+ * ld-arm/attr-merge.attr: Likewise.
+
+2009-01-21 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-spu/icache1.d: Add --non-ia-text to ld options.
+
+2009-01-19 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/expdref3.s, ld-cris/expdref4.s, ld-cris/weakref3.d,
+ ld-cris/weakref4.d: New tests.
+ * ld-cris/libdso-15b.d: Adjust for recent weakref fix.
+
+2009-01-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/group9.s: Replace .byte with .long.
+
+2009-01-19 Andrew Stubbs <ams@codesourcery.com>
+
+ * ld-arm/arm-elf.exp (armeabitests): Add EABI attribute merging 3,
+ EABI attribute merging 4, and EABI attribute merging 5,
+ EABI attribute arch merging 1, EABI attribute arch merging 1 reversed,
+ EABI attribute arch merging 2, EABI attribute arch merging 2 reversed.
+ Add attr-merge-unknown-1, attr-merge-unknown-2, attr-merge-unknown-2r,
+ and attr-merge-unknown-3 dump tests.
+ * ld-arm/arch-v6.s: New file.
+ * ld-arm/arch-v6k.s: New file.
+ * ld-arm/arch-v6t2.s: New file.
+ * ld-arm/attr-merge-3.attr: New file.
+ * ld-arm/attr-merge-3a.s: New file.
+ * ld-arm/attr-merge-3b.s: New file.
+ * ld-arm/attr-merge-4.attr: New file.
+ * ld-arm/attr-merge-4a.s: New file.
+ * ld-arm/attr-merge-4b.s: New file.
+ * ld-arm/attr-merge-5.attr: New file.
+ * ld-arm/attr-merge-5.s: New file.
+ * ld-arm/attr-merge-arch-1.attr: New file.
+ * ld-arm/attr-merge-arch-2.attr: New file.
+ * ld-arm/attr-merge-unknown-1.d: New file.
+ * ld-arm/attr-merge-unknown-1.s: New file.
+ * ld-arm/attr-merge-unknown-2.d: New file.
+ * ld-arm/attr-merge-unknown-2.s: New file.
+ * ld-arm/attr-merge-unknown-2r.d: New file.
+ * ld-arm/attr-merge-unknown-3.d: New file.
+ * ld-arm/blank.s: New file.
+
+2009-01-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/textaddr1.d: New.
+ * ld-elf/textaddr2.d: Likewise.
+
+2009-01-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/9727
+ * ld-elf/group8.s: New.
+ * ld-elf/group8a.d: Likewise.
+ * ld-elf/group8b.d: Likewise.
+ * ld-elf/group9.s: Likewise.
+ * ld-elf/group9a.d: Likewise.
+ * ld-elf/group9b.d: Likewise.
+
+2009-01-13 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-spu/icache1.s: New file.
+ * ld-spu/icache1.d: New file.
+
+2009-01-13 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/elf.exp: Save and restore LDFLAGS.
+ * ld-scripts/default-script.exp: Likewise.
+ * ld-scripts/empty-orphan.exp: Likewise, and add to LDFLAGS rather
+ than replacing.
+ * ld-scripts/include.exp: Set --local-store for SPU.
+
+2009-01-12 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-spu/ovl.d: Allow for absolute branches in stubs.
+ * ld-spu/ovl2.d: Likewise.
+
+2009-01-11 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * ld-elf/linkoncerdiff.d, ld-elf/linkoncerdiff1.s,
+ ld-elf/linkoncerdiff2.s: New.
+
+2009-01-07 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/tls-e-20.d, ld-cris/tls-e-20a.d, ld-cris/tls-e-21.d,
+ ld-cris/tls-e-23.d, ld-cris/tls-e-66.d, ld-cris/tls-gd-3.d,
+ ld-cris/tls-gd-3h.d, ld-cris/tls-global-74.d,
+ ld-cris/tls-ie-8e1.d, ld-cris/tls-ldgde-14.d,
+ ld-cris/tls-ldgde-15.d, ld-cris/tls-le-12.d, ld-cris/tls-le-13.d,
+ ld-cris/tls-le-13s.d, ld-cris/tls-legd-16.d,
+ ld-cris/tls-legd-17.d, ld-cris/tls-legdx-16.d,
+ ld-cris/tls-legdx-17.d, ld-cris/tls-leie-18.d,
+ ld-cris/tls-leie-19.d, ld-cris/tls-local-57.d,
+ ld-cris/tls-local-58.d, ld-cris/tls-local-59.d: Adjust for
+ relocation value now offset by negative program TLS block size.
+ * ld-cris/tls-le-12s.d: Ditto. Move 128-byte tls-data to last.
+ Adjust accordingly.
+ * ld-cris/tls-le-12s.s: Use movs, not movu, for sign-extended
+ always-negative relocation.
+ * ld-cris/tls-tprelm.s: Move filler data to after symbol for
+ tested relocation.
+ * ld-cris/tls-ok-36.d: Adjust accordingly.
+
+2009-01-03 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/tls-js1.d: New test.
+
+2009-01-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/9679
+ * ld-elf/pr9679-1.c: New.
+ * ld-elf/pr9679-2.c: Likewise.
+ * ld-elf/pr9679.rd: Likewise.
+
+ * ld-elf/shared.exp (build_tests): Add test for libpr9679.so.
+
+2009-01-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/9676
+ * ld-elf/pr9676-1.c: New.
+ * ld-elf/pr9676-2.c: Likewiswe.
+ * ld-elf/pr9676-3.c: Likewiswe.
+ * ld-elf/pr9676-4.c: Likewiswe.
+ * ld-elf/pr9676.rd: Likewiswe.
+
+ * ld-elf/shared.exp (build_tests): Add tests for libpr9676-1.a,
+ libpr9676-2.a, libpr9676-3.so, libpr9676-4.so and
+ libpr9676-4a.so.
+
+ * lib/ld-lib.exp (ar_simple_create): New.
+ (run_ld_link_tests): Support archive.
+ (run_cc_link_tests): Likewiswe.
+
+For older changes see ChangeLog-2008
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/binutils-2.21/ld/testsuite/ChangeLog-9303 b/binutils-2.21/ld/testsuite/ChangeLog-9303
new file mode 100644
index 0000000..895eb03
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ChangeLog-9303
@@ -0,0 +1,3376 @@
+2003-12-30 Mark Mitchell <mark@codesourcery.com>
+
+ * ld-srec/srec.exp (run_srec_test): Remove -fgnu-linker, since GCC
+ 3.4 does not support it.
+
+2003-12-18 Richard Sandiford <rsandifo@redhat.com>
+
+ * ld-mips-elf/reloc-1[ab].s: New source files.
+ * ld-mips-elf/reloc-1-{n32,n64,rel}.d: New tests.
+ * ld-mips-elf/reloc-2[ab].s: New source files.
+ * ld-mips-elf/reloc-2.{d,ld}: New test.
+ * ld-mips-elf/reloc-3[ab].s: New source files.
+ * ld-mips-elf/reloc-3-{r,srec}.d: New tests.
+ * ld-mips-elf/mips-elf.exp: Run them.
+
+2003-12-07 Richard Sandiford <rsandifo@redhat.com>
+
+ * ld-mips-elf/elf-rel-xgot-n32.d: Fix offset for "lw $5,dl1+34($5)".
+ * ld-mips-elf/elf-rel-xgot-n64-linux.d: Likewise.
+
+2003-12-01 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-sh/sh64/shmix-1.s: Add align to match data alignment.
+ * ld-sh/sh64/shmix-3.s: Likewise.
+ * ld-sh/sh64/mix1.sd: Update.
+ * ld-sh/sh64/mix1.xd: Likewise.
+ * ld-sh/sh64/mix1-noexp.sd: Likewise.
+ * ld-sh/sh64/mix2.sd: Likewise.
+ * ld-sh/sh64/mix2.xd: Likewise.
+ * ld-sh/sh64/mix2-noexp.sd: Likewise.
+
+2003-12-01 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-sh/tlsbin-2.d: Update section alignment.
+ * ld-sh/tlspic-2.d: Likewise.
+ * ld-sh/sh64/abi32.xd: Likewise.
+ * ld-sh/sh64/abi64.xd: Likewise.
+ * ld-sh/sh64/cmpct1.xd: Likewise.
+ * ld-sh/sh64/rel32.xd: Likewise.
+ * ld-sh/sh64/rel64.xd: Likewise.
+ * ld-sh/sh64/shdl32.xd: Likewise.
+ * ld-sh/sh64/shdl64.xd: Likewise.
+
+2003-11-19 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlsexe32.d: Update for changed symbols from objdump.
+ * ld-powerpc/tlsso32.d: Likewise.
+
+2003-10-27 Stephane Carrez <stcarrez@nerim.fr>
+
+ * ld-undefined/undefined.exp: Mark as xfail for m6811 and m6812
+ due to elf/Dwarf2 binutils limitation.
+
+2003-10-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elfvers/vers.exp (test_ldfail): Add "-Wl," to pass the
+ linker option from gcc.
+
+2003-10-23 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlsexetoc.d: Correct.
+ * ld-powerpc/tlstoc.d: Correct.
+
+2003-10-18 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-mmix/greg-14.d, ld-mmix/greg-5.d, ld-mmix/pushja1b.d,
+ ld-mmix/pushja1f.d, ld-mmix/pushja7b.d, ld-mmix/pushja7f.d: Pass
+ --no-pushj-stubs to the assembler.
+ * ld-mmix/pushjs2b.d, ld-mmix/greg-14s.d, ld-mmix/pushjs1.d,
+ ld-mmix/greg-5s.d, ld-mmix/pushjs3b.d, ld-mmix/pushja1f-s.d,
+ ld-mmix/pushjs1m.d, ld-mmix/pushja7b-s.d, ld-mmix/pushja7f-s.d,
+ ld-mmix/pushja1b-s.d, ld-mmix/pushjs2.d, ld-mmix/pushjs3.d,
+ ld-mmix/pushjs4b.d, ld-mmix/pushjs4.d, ld-mmix/pushjs1bm.d,
+ ld-mmix/pushjs1b.d, ld-mmix/pushjs2m.d, ld-mmix/pushjs1r.d,
+ ld-mmix/pushjs3m.d, ld-mmix/pushjs2bm.d, ld-mmix/pushjs4m.d,
+ ld-mmix/pushjs3bm.d, ld-mmix/pushjs2r.d, ld-mmix/pushjs4bm.d,
+ ld-mmix/pushjs3r.d, ld-mmix/pushjs4r.d: New tests.
+
+2003-10-15 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-sh/sh64/rd-sh64.exp: If the test matches *-dso.d, copy
+ the output of linker to the file tmpdir/*-dso.so.
+ * ld-sh/sh64/stobin-0-dso.d: New.
+ * ld-sh/sh64/stobin-1.d: New.
+ * ld-sh/sh64/stobin.s: New.
+ * ld-sh/sh64/stolib.s: New.
+
+2003-10-13 Richard Sandiford <rsandifo@redht.com>
+
+ * ld-mips-elf/multi-got-1.d (RELSZ): Don't include the size of the
+ trailing null relocs.
+
+2003-10-12 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-sh/rd-sh.exp (LDFLAGS): Define appropriately for each
+ sh64/sh5 targets.
+ * ld-sh/sh.exp: Don't do relaxing test for sh64*-*-* and
+ sh5*-*-* targets.
+ * ld-sh/sh64/relax.exp (emul32): Set to shelf32_nbsd for netbsd.
+ * ld-sh/sh64/relfail.exp: Set parameters for netbsd.
+ * ld-sh/sh64/sh64.exp: Skip this for netbsd. Trim the section
+ numbers for crangerel1 and crengerel2 tests.
+ * ld-sh/sh64/abi32.sd: Update.
+ * ld-sh/sh64/abi32.xd: Likewise.
+ * ld-sh/sh64/abi64.sd: Likewise.
+ * ld-sh/sh64/abi64.xd: Likewise.
+ * ld-sh/sh64/abixx-noexp.sd: Likewise.
+ * ld-sh/sh64/cmpct1.sd: Likewise.
+ * ld-sh/sh64/cmpct1.xd: Likewise.
+ * ld-sh/sh64/crange1.rd: Likewise.
+ * ld-sh/sh64/crange2.rd: Likewise.
+ * ld-sh/sh64/crange3-cmpct.rd: Likewise.
+ * ld-sh/sh64/crange3-media.rd: Likewise.
+ * ld-sh/sh64/crange3.rd: Likewise.
+ * ld-sh/sh64/crangerel1.rd: Likewise.
+ * ld-sh/sh64/crangerel2.rd: Likewise.
+ * ld-sh/sh64/dlsection.sd: Likewise.
+ * ld-sh/sh64/endian.sbd: Likewise.
+ * ld-sh/sh64/endian.sld: Likewise.
+ * ld-sh/sh64/gotplt.d: Likewise.
+ * ld-sh/sh64/init-cmpct.d: Likewise.
+ * ld-sh/sh64/init-media.d: Likewise.
+ * ld-sh/sh64/init.s: Align functions.
+ * ld-sh/sh64/init64.d: Update.
+ * ld-sh/sh64/mix1-noexp.sd: Likewise.
+ * ld-sh/sh64/mix1.sd: Likewise.
+ * ld-sh/sh64/mix1.xd: Likewise.
+ * ld-sh/sh64/mix2-noexp.sd: Likewise.
+ * ld-sh/sh64/mix2.sd: Likewise.
+ * ld-sh/sh64/mix2.xd:Likewise.
+ * ld-sh/sh64/rel32.xd: Likewise.
+ * ld-sh/sh64/rel64.xd: Likewise.
+ * ld-sh/sh64/reldl32.rd: Likewise.
+ * ld-sh/sh64/reldl64.rd: Likewise.
+ * ld-sh/sh64/shdl32.xd: Update.
+ * ld-sh/sh64/shdl64.sd: Likewise.
+ * ld-sh/sh64/shdl64.xd: Likewise.
+ * ld-sh/shared-1.d: Add -z nocombreloc to ld option. Update.
+ * ld-sh/sub2l-1.d: Make file format match with elf32-sh.*.
+ * ld-sh/weak1.d: Likewise.
+
+2003-10-11 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-scripts/defined3.d, ld-scripts/defined3.t: New test.
+ * ld-scripts/defined.exp: Run defined3.
+
+2003-10-08 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-scripts/defined2.d, ld-scripts/defined2.t: New test.
+ * ld-scripts/defined.exp: Run defined2.
+
+2003-10-07 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ * ld-elfvsb/elfvsb.exp: xfail non-pic shared library tests for
+ non 64-bit hppa*-*-linux* targets.
+ * ld-elfvsb/main.c (main_visibility_check): Cast value returned by
+ visibility_funptr () to a function pointer.
+ * ld-shared/shared.exp: xfail shared (non PIC), shared (non PIC, load
+ offset), and shared (PIC main, non PIC so) tests for non 64-bit
+ hppa*-*-linux* targets.
+
+2003-09-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-checks/checks.exp (section_check): Remove ia64-*-elf*.
+
+2003-09-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-checks/checks.exp (section_check): Skip ia64-*-* instead
+ of ia64-*-linux*.
+
+2003-09-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-ia64/ia64.exp: Remove -melf64_ia64.
+
+ * ld-ia64/tlsbin.dd: Remove -melf64_ia64. Match elf..-ia64-.*
+ instead of elf64-ia64-little.
+ * ld-ia64/tlsbin.rd: Likewise.
+ * ld-ia64/tlsbin.sd: Likewise.
+ * ld-ia64/tlsbin.td: Likewise.
+ * ld-ia64/tlsg.sd: Likewise.
+ * ld-ia64/tlspic.dd: Likewise.
+ * ld-ia64/tlspic.rd: Likewise.
+ * ld-ia64/tlspic.sd: Likewise.
+ * ld-ia64/tlspic.td: Likewise.
+
+2003-09-30 Chris Demetriou <cgd@broadcom.com>
+
+ * ld-mips-elf/mips-elf-flags.exp: Add tests for combinations
+ with MIPS64r2.
+
+2003-09-29 H.J. Lu <hongjiu.lu@intel.com>
+
+ * lib/ld-lib.exp (proc is_elf64): New.
+
+ * ld-scripts/phdrs.exp: Use is_elf_format and is_elf64.
+
+2003-09-23 Alan Modra <alan@modra.org>
+
+ * ld-discard/exit.s: Correct .text.exit attributes.
+ * ld-discard/extern.s: Likewise.
+ * ld-discard/static.s: Likewise.
+
+2003-09-21 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
+
+ * ld-mips-elf/relax-jalr-n32.d: Fix little endian test failure.
+ * ld-mips-elf/relax-jalr-n32-shared.d: Likewise.
+ * ld-mips-elf/relax-jalr-n64.d: Likewise.
+ * ld-mips-elf/relax-jalr-n64-shared.d: Likewise.
+
+2003-09-14 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-mmix/bpo-1.d, ld-mmix/bpo-10.d, ld-mmix/bpo-11.d,
+ ld-mmix/bpo-14.d, ld-mmix/bpo-16.d, ld-mmix/bpo-17.d,
+ ld-mmix/bpo-18.d, ld-mmix/bpo-19.d, ld-mmix/bpo-2.d,
+ ld-mmix/bpo-22.d, ld-mmix/bpo-3.d, ld-mmix/bpo-4.d,
+ ld-mmix/bpo-5.d, ld-mmix/bpo-6.d, ld-mmix/bpo-9.d,
+ ld-mmix/greg-19.d, ld-mmix/loc1.d, ld-mmix/loc2.d, ld-mmix/loc3.d,
+ ld-mmix/loc4.d, ld-mmix/loc6.d, ld-mmix/local12.d,
+ ld-mmix/locdo-1.d, ld-mmix/loct-1.d, ld-mmix/locto-1.d: Adjust for
+ objdump -d change.
+
+2003-09-11 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/merge2.s: New.
+ * ld-elf/merge2.d: New.
+
+2003-08-16 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-mmix/bpo-9.d, ld-mmix/bpo-10.d, ld-mmix/bpo-11.d: Adjust for
+ recent objdump "Contents of ..." change.
+
+2003-08-02 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-sh/shared-2.d, ld-sh/textrel1.s, ld-sh/textrel2.s: New test.
+
+2003-08-02 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-d10v/reloc-001.d: Adjust for objdump -d change.
+ * ld-d10v/reloc-002.d: Likewise.
+ * ld-d10v/reloc-005.d: Likewise.
+ * ld-d10v/reloc-006.d: Likewise.
+ * ld-d10v/reloc-009.d: Likewise.
+ * ld-d10v/reloc-010.d: Likewise.
+ * ld-d10v/reloc-013.d: Likewise.
+ * ld-d10v/reloc-014.d: Likewise.
+ * ld-xstormy16/pcrel.d: Likewise.
+
+2003-07-29 Jakub Jelinek <jakub@redhat.com>
+
+ * ld-elfvsb/elf-offset.ld: Add .rel.toc, .rela.toc and .toc
+ sections.
+
+2003-07-29 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlsso.r: Update.
+ * ld-powerpc/tlstocso.r: Update.
+
+2003-07-29 Nick Clifton <nickc@redhat.com>
+
+ * ld-alpha/tlsbin.dd: Update to account for .eh_frame section.
+ * ld-alpha/tlsbin.rd: Likewise.
+ * ld-alpha/tlsbin.sd: Likewise.
+ * ld-alpha/tlsbinr.dd: Likewise.
+ * ld-alpha/tlsbinr.rd: Likewise.
+ * ld-alpha/tlsbinr.sd: Likewise.
+ * ld-alpha/tlspic.dd: Likewise.
+ * ld-alpha/tlspic.rd: Likewise.
+ * ld-alpha/tlspic.sd: Likewise.
+
+2003-07-26 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlsexe32.d: Update.
+ * ld-powerpc/tlsso32.d: Update.
+
+2003-07-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-powerpc/tlsexe.r: .sbss is NOBITS, not PROGBITS.
+ * ld-powerpc/tlsexetoc.r: Likewise.
+ * ld-powerpc/tlsso.r: Likewise.
+ * ld-powerpc/tlstocso.r: Likewise.
+
+2003-07-23 Stephane Carrez <stcarrez@nerim.fr>
+
+ * ld-srec/srec.exp: For m6811/m6812 use --defsym to define _.z soft
+ register.
+
+2003-07-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-selective/selective.exp: Skip "ia64-*-*".
+
+ * ld-srec/srec.exp: Make xfail on "ia64-*-*".
+
+2003-07-11 Richard Sandiford <rsandifo@redhat.com>
+
+ * ld-h8300/relax-3{.s,.d,-coff.d}: New test.
+ * ld-h8300/h8300.exp: Run it.
+
+2003-07-10 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/powerpc.exp: Dump output .got section rather than .toc.
+ * ld-powerpc/tlsexetoc.g: Update.
+ * ld-powerpc/tlsexetoc.r: Update.
+ * ld-powerpc/tlstoc.g: Update.
+ * ld-powerpc/tlstocso.g: Update.
+ * ld-powerpc/tlstocso.r: Update.
+
+2003-07-04 Richard Sandiford <rsandifo@redhat.com>
+
+ * ld-h8300/h8300.exp: Replace loop with explicit list. Run relax.d
+ unconditionally. Run relax-2.d for *-elf targets.
+ * ld-h8300/relax.d: Fix typo.
+ * ld-h8300/relax.s: Add 0x prefixes.
+ * ld-h8300/relad-2.[sd]: New test.
+
+2003-06-29 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
+
+ * ld-mips-elf/mips-elf.exp: Use is_elf_format.
+
+2003-06-29 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
+
+ * ld-mips-elf/mips-elf-flags.exp: Use -melf32bsmip for IRIX6.
+
+2003-06-25 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/apuinfo.rd: Update.
+
+2003-06-21 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
+
+ * ld-mips-elf/elf-rel-got-n32.d: Remove special handling for n32 ABI.
+ * ld-mips-elf/elf-rel-xgot-n32.d: Likewise.
+
+2003-06-18 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/locref1.d, ld-cris/locref1.s, ld-cris/locref2.d,
+ ld-cris/locref2.s: New tests.
+
+ * ld-elfcomm/elfcomm.exp (dump_common1): Use $READELF, not plain
+ readelf as found using default path.
+
+2003-06-18 Alan Modra <amodra@bigpond.net.au>
+
+ * lib/ld-lib.exp (default_ld_simple_link): Trim ld parms before
+ trying to trim ld path.
+ (default_ld_compile): Likewise for cc.
+
+ * lib/ld-lib.exp (default_ld_simple_link): Trim ld path before
+ looking for gcc match.
+ (default_ld_compile): Likewise for cc.
+
+2003-06-17 Loren James Rittle <rittle@latour.rsch.comm.mot.com>
+
+ * ld-undefined/undefined.exp (i?86-*-freebsd*): Remove xfail.
+
+2003-06-16 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlsexetoc.d: Update.
+ * ld-powerpc/tlsso.d: Update.
+ * ld-powerpc/tlstoc.d: Update.
+ * ld-powerpc/tlstocso.d: Update.
+ * ld-powerpc/tlstocso.r: Update.
+
+2003-06-16 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/ldsym1.d: Restrict to cris-*-*elf* and cris-*-*aout*.
+ * ld-cris/noglob1.d: Ditto.
+ * ld-cris/badgotr1.d: Pass --underscore to gas.
+
+2003-06-12 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
+
+ * ld-mips-elf/elf-rel-got-n64-linux.d: New file.
+ * ld-mips-elf/elf-rel-xgot-n64-linux.d: New file.
+ * ld-mips-elf/mips-elf.exp: Use the new files for Linux.
+
+2003-06-12 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
+
+ * ld-mips-elf/relax-jalr.s: Fix testsuite breakage.
+ * ld-mips-elf/relax-jalr-n32.d: Likewise.
+ * ld-mips-elf/relax-jalr-n32-shared.d: Likewise.
+ * ld-mips-elf/relax-jalr-n64.d: Likewise.
+ * ld-mips-elf/relax-jalr-n64-shared.d: Likewise.
+
+2003-06-11 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
+
+ * ld-mips-elf/multi-got-1.d: Adjust addresses.
+ * ld-mips-elf/rel32-n32.d: Likewise.
+
+2003-06-11 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-srec/srec.exp (run_srec_test): Remove powerpc64 xfails, and
+ xfail for hppa duplicated elsewhere.
+
+2003-06-10 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
+
+ * ld-mips-elf/rel32-n32.d: Force big endian assembly.
+ * ld-mips-elf/rel32-o32.d: Likewise.
+ * ld-mips-elf/rel64.d: Likewise.
+
+2003-06-10 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elfvsb/elfvsb.exp: Run for powerpc64 too.
+ * ld-powerpc/tls.t: Update.
+ * ld-powerpc/tlsexe.d: Update.
+ * ld-powerpc/tlsexe.r: Update.
+ * ld-powerpc/tlsexetoc.d: Update.
+ * ld-powerpc/tlsexetoc.r: Update.
+ * ld-powerpc/tlsexetoc.t: Update.
+ * ld-powerpc/tlsso.d: Update.
+ * ld-powerpc/tlsso.g: Update.
+ * ld-powerpc/tlsso.r: Update.
+ * ld-powerpc/tlsso.t: Update.
+ * ld-powerpc/tlstocso.d: Update.
+ * ld-powerpc/tlstocso.g: Update.
+ * ld-powerpc/tlstocso.r: Update.
+ * ld-powerpc/tlstocso.t: Update.
+
+2003-06-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-discard/extern.d: Updated.
+ * ld-discard/start.d: Likewise.
+ * ld-discard/static.d: Likewise.
+
+2003-06-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elfcomm/elfcomm.exp: Mark tests untested if compiler is
+ not available.
+
+2003-06-02 Fabrizio Gennari <fabrizio.ge@tiscalinet.it>
+
+ * ld-cygwin: New directory.
+ * ld-cygwin/exe-export.exp: New test script. Checks building
+ cygwin executables with an export table.
+ * ld-cygwin/testdll.def: New source file.
+ * ld-cygwin/testexe.def: New source file.
+ * ld-cygwin/testdll.c: New source file.
+ * ld-cygwin/testexe.c: New source file.
+
+2003-05-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/default.exp: Load tmpdir/libpath.exp.
+ (gcc_ld_flag): Set from $libpath.
+
+2003-05-27 Jason Thorpe <thorpej@wasabisystems.com>
+
+ * ld-elf/elf.exp: Use if_elf_format.
+ * ld-elf/sec64k.exp: Likewise.
+ * ld-elfcomm/elfcomm.exp: Likewise.
+ * lib/ld-lib.exp (is_elf_format): Match hppa*64*-*-hpux*.
+
+2003-05-25 Jason Thorpe <thorpej@wasabisystems.com>
+
+ * ld-mips-elf/mips-elf.exp: Make all NetBSD targets match as elf.
+
+2003-05-20 Jakub Jelinek <jakub@redhat.com>
+
+ * ld-elfvsb/common.c: New file.
+ * ld-elfvsb/elfvsb.exp: Add common.
+
+2003-05-20 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elfvsb/sh3.c: New file.
+ * ld-elfvsb/test.c: Likewise.
+
+ * ld-elfvsb/elfvsb.exp: Add new weak hidden symbol tests.
+
+2003-05-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/default.exp (gcc_ld_flag): New. Make the newly built
+ linker available to gcc.
+ * lib/ld-lib.exp (default_ld_simple_link): Pass $gcc_ld_flag
+ to gcc.
+
+ * ld-elfvers/vers.exp: Use "ld_simple_link $CC" to build shared
+ libraries.
+ * ld-elfvsb/elfvsb.exp: Likewise.
+ * ld-elfweak/elfweak.exp: Likewise.
+ * ld-shared/shared.exp: Likewise.
+
+ * ld-elfvers/vers.exp: Use "-Wl,-rpath,." to build shared
+ libraries.
+ * ld-elfvsb/elfvsb.exp: Likewise.
+
+ * ld-elfvsb/elfvsb.exp: Remove xfail for powerpc-*-linux*.
+
+ * ld-elfweak/elfweak.exp: Use PIC for shared libraries.
+
+2003-05-13 Stephane Carrez <stcarrez@nerim.fr>
+
+ * ld-m68hc11/link-hcs12.d: New test.
+ * ld-m68hc11/link-hcs12.s: New file.
+ * ld-m68hc11/link-hc12.s: New file.
+
+2003-05-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elfweak/elfweak.exp: Fix typo.
+
+2003-05-13 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-elfvers/vers.exp: Run on sh[34]*-*-linux*.
+ * ld-elfvsb/elfvsb.exp: Likewise.
+ * ld-elfweak/elfweak.exp: Likewise.
+
+2003-05-12 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-mmix/b-fixo2.d, ld-mmix/bpo-18.d, ld-mmix/bpo-18m.d,
+ ld-mmix/loc4.d, ld-mmix/loc4m.d, ld-mmix/loc6.d, ld-mmix/loc6m.d,
+ ld-mmix/locdo-1.d, ld-mmix/sec-1.d, ld-mmix/sec-2.d,
+ ld-mmix/sec-3.d, ld-mmix/sec-4.d, ld-mmix/sec-5.d,
+ ld-mmix/sec-7m.d, ld-mmix/sec-8m.d, ld-mmix/spec802.d,
+ ld-mmix/spec803.d, ld-mmix/spec804.d, ld-mmix/spec805.d,
+ ld-mmix/spec806.d, ld-mmix/spec807.d, ld-mmix/spec808.d: Tweak for
+ objdump no longer truncating dump addresses.
+
+2003-05-09 Martin Schwidefsky <schwidefsky@de.ibm.com>
+
+ * ld-elfvsb/elf-offset.ld: Add .rel.eh_frame and .rela.eh_frame
+ to linker script.
+ * ld-elfvsb/elfvsb.exp (visibility_run): Add setup_xfails for s390x.
+ * ld-selective/selective.exp: Disable for s390 and s390x.
+ * ld-shared/elf-offset.ld: Add .rel.eh_frame and .rela.eh_frame
+ to linker script.
+ * ld-shared/shared.exp (shared_test): Add setup_xfails for s390x.
+ * ld-undefined/undefined.exp (checkund): Remove setup_xfail for s390x.
+
+2003-05-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elfvers/vers.exp: Add vers27d4 and vers27d5 to test
+ versioned reference for hidden symbol.
+
+ * ld-elfvers/vers27d4.dsym: New file.
+ * ld-elfvers/vers27d4.ver: Likewise.
+
+2003-05-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elfvers/vers27d3.c (__start): New.
+ (start): New.
+
+2003-05-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elfvers/vers.exp (build_binary): Support build exeutable.
+ (build_binary): Renamed from ...
+ (build_vers_lib): This.
+ (build_vers_lib_no_pic): Updated.
+ (build_vers_lib_pic): Likewise.
+ Add vers27d1, vers27d2 and vers27d3 to test versioned
+ definition for hidden symbol referenced by a DSO.
+
+ * ld-elfvers/vers27d.dsym: New file.
+ * ld-elfvers/vers27d.sym: Likewise.
+ * ld-elfvers/vers27d.ver: Likewise.
+ * ld-elfvers/vers27d1.c: Likewise.
+ * ld-elfvers/vers27d2.c: Likewise.
+ * ld-elfvers/vers27d3.c: Likewise.
+
+2003-05-07 Andreas Schwab <schwab@suse.de>
+
+ * ld-elfvsb/elfvsb.exp: Run dump tests even when cross
+ compiling.
+
+2003-05-06 Alexandre Oliva <aoliva@redhat.com>
+
+ * config/default.exp (gcc_gas_flags): Force ABI to n32 on
+ mips64-linux.
+ * ld-elf/merge.d: Xfail on mips64*-linux-gnu*.
+ * ld-mips-elf/mips-elf-flags.exp (ldemul): Set to o32-compatible
+ on mips-sgi-irix6*, mips64-linux-gnu and mips64el-linux-gnu.
+ (good_combination, bad_combination): Use it.
+ Add -32 or -mabi=o64 wherever the ABI was formerly implied.
+
+2003-05-06 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfvers/vers.exp (objdump_versionstuff): Support comment
+ in expected version file.
+
+ * ld-elfvers/vers25b.c: Add a line of comment.
+ * ld-elfvers/vers25b.dsym: Likwise.
+ * ld-elfvers/vers25b.ver: Likwise.
+ * ld-elfvers/vers26b.dsym: Likwise.
+ * ld-elfvers/vers26b.ver: Likwise.
+ * ld-elfvers/vers27b.dsym: Likwise.
+ * ld-elfvers/vers27b.ver: Likwise.
+ * ld-elfvers/vers27c.c: Likwise.
+ * ld-elfvers/vers27c.dsym: Likwise.
+ * ld-elfvers/vers27c.ver: Likwise.
+
+2003-05-04 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfvsb/main.c: Updated.
+ * ld-elfvsb/sh1.c: Likewise.
+
+2003-05-04 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfvers/vers18.dsym: Updated for weak definiton change.
+ * ld-elfvers/vers18.ver: Likewise.
+ * ld-elfvers/vers19.ver: Likewise.
+ * ld-elfweak/dsowdata.dsym: Likewise.
+ * ld-elfweak/elfweak.exp: Likewise.
+ * ld-elfweak/weakdata.dsym: Likewise.
+
+ * ld-elfweak/elfweak.exp: Remove xfail.
+
+2003-05-04 Alexandre Oliva <aoliva@redhat.com>
+
+ * ld-mips-elf/multi-got-1.d: Force into big-endian mode.
+ Turn relocation offsets into regexps.
+
+2003-05-03 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfvers/vers.exp: Add vers27a, vers27b, vers27c1 and
+ vers27c2 to test versioned definition vs. hidden definition in
+ different files.
+
+ * ld-elfvers/vers27a.c: New file.
+ * ld-elfvers/vers27a.dsym: Likewise.
+ * ld-elfvers/vers27a.map: Likewise.
+ * ld-elfvers/vers27a.ver: Likewise.
+ * ld-elfvers/vers27b.c: Likewise.
+
+ * ld-elfvers/vers27b.dsym: New empty file.
+ * ld-elfvers/vers27b.ver: Likwise.
+ * ld-elfvers/vers27c.c: Likwise.
+ * ld-elfvers/vers27c.dsym: Likwise.
+ * ld-elfvers/vers27c.ver: Likwise.
+
+2003-05-02 Nick Clifton <nickc@redhat.com>
+
+ * ld-xstormy16: New directory.
+ * ld-xstormy16/xstormy16.exp: New test script.
+ * ld-xstormy16/pcrel.s: Test assembler source file.
+ * ld-xstormy16/external.s: Test assembler source file.
+ * ld-xstormy16/pcrel.d: Test expected disassembly.
+
+2003-05-02 Andreas Jaeger <aj@suse.de>
+
+ * ld-elfvers/vers.exp (build_exec): Disable vers26b3 on x86-64-linux.
+
+2003-04-29 H.J. Lu <hjl@gnu.org>
+
+ * ld-ia64/tlsbin.dd: Updated.
+ * ld-ia64/tlsbin.rd: Likewise.
+ * ld-ia64/tlsbin.sd: Likewise.
+ * ld-ia64/tlsbin.td: Likewise.
+ * ld-ia64/tlspic.rd: Likewise.
+ * ld-ia64/tlspic.sd: Likewise.
+ * ld-ia64/tlspic.td: Likewise.
+
+2003-04-29 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * ld-selective/3.cc (start): New function.
+ * ld-selective/4.cc: Likewise.
+ * ld-selective/5.cc: Likewise.
+
+2003-04-28 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfvers/vers.exp (picflag): Set PIC flag for compiler.
+ (build_vers_lib): Support PIC.
+ (build_vers_lib_no_pic): New. Change all calls to build_vers_lib
+ to build_vers_lib_no_pic.
+ (build_vers_lib_pic): New.
+ Add tests vers26a, vers26b1, vers26b2 and vers26b3 for versioned
+ definition vs. normal definition in different files.
+
+ * ld-elfvers/vers26a.c: New file.
+ * ld-elfvers/vers26a.dsym: Likewise.
+ * ld-elfvers/vers26a.map: Likewise.
+ * ld-elfvers/vers26a.ver: Likewise.
+ * ld-elfvers/vers26b.c: Likewise.
+
+ * ld-elfvers/vers26b.dsym: New empty file.
+ * ld-elfvers/vers26b.ver: Likewise.
+
+2003-04-27 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfvsb/elfvsb.dat: Updated.
+ * ld-elfvsb/elfvsb.exp: Likewise.
+ * ld-elfvsb/main.c: Likewise.
+ * ld-elfvsb/sh1.c: Likewise.
+ * ld-elfvsb/sh2.c: Likewise.
+
+2003-04-26 Stephane Carrez <stcarrez@nerim.fr>
+
+ * ld-m68hc11/bug-3331.d: New test.
+ * ld-m68hc11/bug-3331.s: New file.
+
+2003-04-25 Nick Clifton <nickc@redhat.com>
+ J"orn Rennecke <joern.rennecke@superh.com>
+
+ * lib/ld-lib.exp (big_or_little_endian): Also check for -mb and -ml.
+
+2003-04-24 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * ld-elfcomm/elfcomm.exp: Allow symbols to have '_' prepended.
+
+2003-04-23 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-sh/tlsbin-1.d, ld-sh/tlsbin-2.d, ld-sh/tlsbin-3.d,
+ ld-sh/tlstpoff-1.d, ld-sh/tlstpoff-2.d: Update for removing
+ unnecessary TLS relocs.
+
+2003-04-23 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * ld-sh/sh64/crange3-cmpct.rd (Machine): Change to refer to SuperH.
+ * ld-sh/sh64/crange3-media.rd (Machine): Likewise.
+
+2003-04-23 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfvers/vers.exp (objdump_dynsymstuff): Support empty
+ files.
+ (objdump_versionstuff): Likewise.
+ Add tests vers25a, vers25b1 and vers25b2 for versioned
+ definition vs. normal definition in different files.
+
+ * ld-elfvers/vers25a.c: New file.
+ * ld-elfvers/vers25a.dsym: Likewise.
+ * ld-elfvers/vers25a.map: Likewise.
+ * ld-elfvers/vers25a.ver: Likewise.
+
+ * ld-elfvers/vers25b.c: New empty file.
+ * ld-elfvers/vers25b.dsym: Likewise.
+ * ld-elfvers/vers25b.ver: Likewise.
+
+2003-04-22 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfcomm/elfcomm.exp: Support 64bit targets.
+
+2003-04-21 Stephane Carrez <stcarrez@nerim.fr>
+
+ * ld-m68hc11/far-hc11.s: New file.
+ * ld-m68hc11/far-hc11.d: New test for HC11 trampoline generation.
+ * ld-m68hc11/far-hc12.s: New file.
+ * ld-m68hc11/far-hc12.d: New test for HC12 trampoline generation.
+ * ld-m68hc11/far-hc12.ld: New file.
+
+2003-04-15 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfcom/elfcom.exp: Fix a typo.
+
+2003-04-14 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfcom: New directory.
+ * ld-elfcom/elfcom.exp: New file: Test alignment of common symbols
+ under ELF.
+ * ld-elfcom/common1a.c: New file: Test source code.
+ * ld-elfcom/common1b.c: New file: Test source code.
+
+2003-04-15 Rohit Kumar Srivastava <rohits@kpitcummins.com>
+
+ * ld-sh/sh64/crange3-cmpct.rd: Replace occurrances of 'Hitachi'
+ with 'Renesas'.
+ * ld-sh/sh64/crange3-media.rd: Likewise.
+
+2002-04-13 Daniel Jacobowitz <drow@mvista.com>
+
+ * ld-discard/extern.s, ld-discard/start.s, ld-discard/static.s,
+ ld-sh/refdbg.s: Add leading 0 to .debug_info to prevent parsing it
+ for error messages.
+
+2003-04-10 Alexandre Oliva <aoliva@redhat.com>
+
+ * ld-mips-elf/elf-rel-got-n32.d,
+ ld-mips-elf/elf-rel-got-n64.d, ld-mips-elf/elf-rel-xgot-n32.d,
+ ld-mips-elf/elf-rel-xgot-n64.d: New.
+ * ld-mips-elf/mips-elf.exp (hasn32): Define as condition for
+ new tests to run.
+
+2003-04-04 Stephane Carrez <stcarrez@nerim.fr>
+
+ * ld-m68hc11/bug-1417.d: Update to take into account jsr->bsr relax.
+
+2003-04-02 Bob Wilson <bob.wilson@acm.org>
+
+ * ld-xtensa/coalesce.exp: Skip if target is not xtensa-*-*.
+ * ld-xtensa/lcall.exp: Likewise.
+
+2003-04-01 Bob Wilson <bob.wilson@acm.org>
+
+ * ld-elf/merge.d: xfail xtensa-*-*.
+ * ld-scripts/crossref.exp: Add -mtext-section-literals to CFLAGS
+ for Xtensa targets.
+ * ld-srec/srec.exp: Add -no-relax flag for Xtensa targets.
+ * ld-xtensa/coalesce1.s: New file.
+ * ld-xtensa/coalesce2.s: Likewise.
+ * ld-xtensa/coalesce.exp: Likewise.
+ * ld-xtensa/coalesce.t: Likewise.
+ * ld-xtensa/lcall1.s: Likewise.
+ * ld-xtensa/lcall2.s: Likewise.
+ * ld-xtensa/lcall.exp: Likewise.
+ * ld-xtensa/lcall.t: Likewise.
+
+2003-03-25 Alexandre Oliva <aoliva@redhat.com>
+
+ * ld-mips-elf/mips-elf.exp: Added...
+ * ld-mips-elf/relax-jalr.s, ld-mips-elf/relax-jalr-n32.d,
+ ld-mips-elf/relax-jalr-n32-shared.d, ld-mips-elf/relax-jalr-n64.d,
+ ld-mips-elf/relax-jalr-n64-shared.d: New tests.
+
+2003-03-11 Alexandre Oliva <aoliva@redhat.com>
+
+ * ld-mips-elf/mips-elf.exp (linux_gnu): New variable. Add:
+ * ld-mips-elf/rel32-o32.d, ld-mips-elf/rel32-n32.d,
+ ld-mips-elf/rel64.d, ld-mips-elf/rel32.s, ld-mips-elf/rel64.s: New
+ tests.
+
+2003-03-11 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlsso.r: Adjust for corrected zero symbol index relocs.
+ * ld-powerpc/tlsso32.r: Likewise.
+
+2003-02-18 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlsexe.d: Update for changed handling of invalid LD
+ relocs.
+ * ld-powerpc/tlsexe.g: Likewise.
+ * ld-powerpc/tlsexe.r: Likewise.
+ * ld-powerpc/tlsexe.t: Likewise.
+
+ * ld-powerpc/tls32.s: New file.
+ * ld-powerpc/tlslib32.s: New file.
+ * ld-powerpc/tls32.d: New file.
+ * ld-powerpc/tls32.g: New file.
+ * ld-powerpc/tls32.t: New file.
+ * ld-powerpc/tlsexe32.d: New file.
+ * ld-powerpc/tlsexe32.g: New file.
+ * ld-powerpc/tlsexe32.r: New file.
+ * ld-powerpc/tlsexe32.t: New file.
+ * ld-powerpc/tlsso32.d: New file.
+ * ld-powerpc/tlsso32.g: New file.
+ * ld-powerpc/tlsso32.r: New file.
+ * ld-powerpc/tlsso32.t: New file.
+ * ld-powerpc/powerpc.exp: Run new tests.
+
+2003-02-18 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlsexe.g: Update for 2003-02-14 elf64-ppc.c change.
+
+2003-02-10 Jakub Jelinek <jakub@redhat.com>
+
+ * ld-shared/shared.exp: Run on s390*-*-linux* and x86_64-*-linux* too.
+ xfail tests linking non-pic code into shared libs on x86_64-*-linux*.
+ * ld-elfvsb/elfvsb.exp: Likewise.
+ * ld-elfvers/vers.exp: Likewise. Add vers24a, vers24b and vers24c
+ tests.
+ * ld-elfvers/vers3.ver: Allow VERS_2.0 to come before GLIBC_*
+ version.
+ * ld-elfvers/vers19.ver: Likewise.
+ * ld-elfvers/vers24a.c: New test.
+ * ld-elfvers/vers24b.c: New test.
+ * ld-elfvers/vers24c.c: New test.
+ * ld-elfvers/vers24.map: New test.
+ * ld-elfvers/vers24.rd: New test.
+ * lib/ld-lib.exp (run_ld_link_tests): Add optional 7th argument
+ cflags. If source files have .c extension, compile them first.
+
+2003-02-10 Kaz kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-sh/tlstpoff-1.d: New.
+ * ld-sh/tlstpoff-2.d: New.
+ * ld-sh/tlstpoff1.s: New.
+ * ld-sh/tlstpoff2.s: New.
+
+2003-02-09 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlslib.s: Give .__tls_get_addr function type.
+ * ld-powerpc/tlsexe.d: Update for changed handling of (invalid) ld var
+ in dynamic lib.
+ * ld-powerpc/tlsexe.g: Likewise.
+ * ld-powerpc/tlsexe.r: Likewise.
+ * ld-powerpc/tlsexe.t: Likewise.
+ * ld-powerpc/tlsexetoc.d: Likewise.
+ * ld-powerpc/tlsexetoc.g: Likewise.
+ * ld-powerpc/tlsexetoc.r: Likewise.
+ * ld-powerpc/tlsexetoc.t: Likewise.
+
+2003-02-05 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/powerpc.exp (supports_ppc64): New.
+ (ppcelftests): Force 32 bit mode.
+ (ppc64elftests): New.
+ * ld-powerpc/tls.d: New.
+ * ld-powerpc/tls.g: New.
+ * ld-powerpc/tls.s: New.
+ * ld-powerpc/tls.t: New.
+ * ld-powerpc/tlsexe.d: New.
+ * ld-powerpc/tlsexe.g: New.
+ * ld-powerpc/tlsexe.r: New.
+ * ld-powerpc/tlsexe.t: New.
+ * ld-powerpc/tlsexetoc.d: New.
+ * ld-powerpc/tlsexetoc.g: New.
+ * ld-powerpc/tlsexetoc.r: New.
+ * ld-powerpc/tlsexetoc.t: New.
+ * ld-powerpc/tlslib.s: New.
+ * ld-powerpc/tlsso.d: New.
+ * ld-powerpc/tlsso.g: New.
+ * ld-powerpc/tlsso.r: New.
+ * ld-powerpc/tlsso.t: New.
+ * ld-powerpc/tlstoc.d: New.
+ * ld-powerpc/tlstoc.g: New.
+ * ld-powerpc/tlstoc.s: New.
+ * ld-powerpc/tlstoc.t: New.
+ * ld-powerpc/tlstocso.d: New.
+ * ld-powerpc/tlstocso.g: New.
+ * ld-powerpc/tlstocso.r: New.
+ * ld-powerpc/tlstocso.t: New.
+
+2003-01-27 Alexandre Oliva <aoliva@redhat.com>
+
+ * ld-mips-elf/multi-got-1.d: New.
+ * ld-mips-elf/multi-got-1-1.s: New.
+ * ld-mips-elf/multi-got-1-2.s: New.
+ * ld-mips-elf/mips-elf.exp (elf): mips*-*-irix* is elf.
+ Run multi-got-1.
+
+2003-01-25 Jakub Jelinek <jakub@redhat.com>
+
+ * ld-sparc/sparc.exp: New.
+ * ld-sparc/tlsg32.s: New test.
+ * ld-sparc/tlsg32.sd: Likewise.
+ * ld-sparc/tlsg64.s: Likewise.
+ * ld-sparc/tlsg64.sd: Likewise.
+ * ld-sparc/tlslib.s: Likewise.
+ * ld-sparc/tlsnopic.s: Likewise.
+ * ld-sparc/tlspic.s: Likewise.
+ * ld-sparc/tlssunbin32.dd: Likewise.
+ * ld-sparc/tlssunbin32.rd: Likewise.
+ * ld-sparc/tlssunbin32.s: Likewise.
+ * ld-sparc/tlssunbin32.sd: Likewise.
+ * ld-sparc/tlssunbin32.td: Likewise.
+ * ld-sparc/tlssunbin64.dd: Likewise.
+ * ld-sparc/tlssunbin64.rd: Likewise.
+ * ld-sparc/tlssunbin64.s: Likewise.
+ * ld-sparc/tlssunbin64.sd: Likewise.
+ * ld-sparc/tlssunbin64.td: Likewise.
+ * ld-sparc/tlssunbinpic32.s: Likewise.
+ * ld-sparc/tlssunbinpic64.s: Likewise.
+ * ld-sparc/tlssunnopic32.dd: Likewise.
+ * ld-sparc/tlssunnopic32.rd: Likewise.
+ * ld-sparc/tlssunnopic32.s: Likewise.
+ * ld-sparc/tlssunnopic32.sd: Likewise.
+ * ld-sparc/tlssunnopic64.dd: Likewise.
+ * ld-sparc/tlssunnopic64.rd: Likewise.
+ * ld-sparc/tlssunnopic64.s: Likewise.
+ * ld-sparc/tlssunnopic64.sd: Likewise.
+ * ld-sparc/tlssunpic32.dd: Likewise.
+ * ld-sparc/tlssunpic32.rd: Likewise.
+ * ld-sparc/tlssunpic32.s: Likewise.
+ * ld-sparc/tlssunpic32.sd: Likewise.
+ * ld-sparc/tlssunpic32.td: Likewise.
+ * ld-sparc/tlssunpic64.dd: Likewise.
+ * ld-sparc/tlssunpic64.rd: Likewise.
+ * ld-sparc/tlssunpic64.s: Likewise.
+ * ld-sparc/tlssunpic64.sd: Likewise.
+ * ld-sparc/tlssunpic64.td: Likewise.
+
+2003-01-24 Martin Schwidefsky <schwidefsky@de.ibm.com>
+
+ * ld-s390/s390.exp: New file.
+ * ld-s390/tlsbin_64.dd: New file.
+ * ld-s390/tlsbin_64.rd: New file.
+ * ld-s390/tlsbin_64.s: New file.
+ * ld-s390/tlsbin_64.sd: New file.
+ * ld-s390/tlsbin_64.td: New file.
+ * ld-s390/tlsbin.dd: New file.
+ * ld-s390/tlsbinpic_64.s: New file.
+ * ld-s390/tlsbinpic.s: New file.
+ * ld-s390/tlsbin.rd: New file.
+ * ld-s390/tlsbin.s: New file.
+ * ld-s390/tlsbin.sd: New file.
+ * ld-s390/tlsbin.td: New file.
+ * ld-s390/tlslib_64.s: New file.
+ * ld-s390/tlslib.s: New file.
+ * ld-s390/tlspic1_64.s: New file.
+ * ld-s390/tlspic1.s: New file.
+ * ld-s390/tlspic2_64.s: New file.
+ * ld-s390/tlspic2.s: New file.
+ * ld-s390/tlspic_64.dd: New file.
+ * ld-s390/tlspic_64.rd: New file.
+ * ld-s390/tlspic_64.sd: New file.
+ * ld-s390/tlspic_64.td: New file.
+ * ld-s390/tlspic.dd: New file.
+ * ld-s390/tlspic.rd: New file.
+ * ld-s390/tlspic.sd: New file.
+ * ld-s390/tlspic.td: New file.
+
+2003-01-24 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-alpha/tlsbin.sd: Cope with truncated address in data dumps.
+ * ld-alpha/tlsbin.td: Likewise.
+ * ld-alpha/tlsbinr.sd: Likewise.
+
+2003-01-21 Richard Henderson <rth@redhat.com>
+
+ * ld-alpha/alpha.exp: New.
+ * ld-alpha/align.s: New.
+ * ld-alpha/tlsbin.dd: New.
+ * ld-alpha/tlsbin.rd: New.
+ * ld-alpha/tlsbin.s: New.
+ * ld-alpha/tlsbin.sd: New.
+ * ld-alpha/tlsbin.td: New.
+ * ld-alpha/tlsbinpic.s: New.
+ * ld-alpha/tlsbinr.dd: New.
+ * ld-alpha/tlsbinr.rd: New.
+ * ld-alpha/tlsbinr.sd: New.
+ * ld-alpha/tlsg.s: New.
+ * ld-alpha/tlsg.sd: New.
+ * ld-alpha/tlslib.s: New.
+ * ld-alpha/tlspic.dd: New.
+ * ld-alpha/tlspic.rd: New.
+ * ld-alpha/tlspic.sd: New.
+ * ld-alpha/tlspic.td: New.
+ * ld-alpha/tlspic1.s: New.
+ * ld-alpha/tlspic2.s: New.
+
+2003-01-20 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-srec/srec.exp (run_srec_test): Pass --traditional-format to ld.
+
+2003-01-18 Jakub Jelinek <jakub@redhat.com>
+
+ * ld-ia64/tlspic1.s: Add tests for IE in shared libraries.
+ * ld-ia64/tlspic.rd: Adjust.
+ * ld-ia64/tlspic.dd: Adjust.
+ * ld-ia64/tlspic.sd: Adjust.
+
+2003-01-16 Jakub Jelinek <jakub@redhat.com>
+
+ * ld-ia64/ia64.exp: New.
+ * ld-ia64/tlsbin.dd: New test.
+ * ld-ia64/tlsbinpic.s: New test.
+ * ld-ia64/tlsbin.rd: New test.
+ * ld-ia64/tlsbin.s: New test.
+ * ld-ia64/tlsbin.sd: New test.
+ * ld-ia64/tlsbin.td: New test.
+ * ld-ia64/tlsg.s: New test.
+ * ld-ia64/tlsg.sd: New test.
+ * ld-ia64/tlslib.s: New test.
+ * ld-ia64/tlspic1.s: New test.
+ * ld-ia64/tlspic2.s: New test.
+ * ld-ia64/tlspic.dd: New test.
+ * ld-ia64/tlspic.rd: New test.
+ * ld-ia64/tlspic.sd: New test.
+ * ld-ia64/tlspic.td: New test.
+
+2003-01-02 Richard Sandiford <rsandifo@redhat.com>
+
+ * ld-mips-elf/mips-elf-flags.exp: Add -mips4 to a -mgp64 test.
+
+2003-01-02 Richard Sandiford <rsandifo@redhat.com>
+
+ * ld-mips-elf/jr.s: New file.
+ * ld-mips-elf/mips-elf-flags.exp: New test.
+
+2002-12-18 Ralf Habacker <ralf.habacker@freenet.de>
+
+ * ld-auto-import: New directory.
+ * ld-auto-import/auto-import.exp: Test the auto importing direct
+ from a dll functionality.
+ * ld-auto-import/client.c: Source code for test.
+ * ld-auto-import/dll.c: Likewise.
+
+2002-12-12 Alexandre Oliva <aoliva@redhat.com>
+
+ * ld-mips-elf/mips-elf.exp: Remove branch-misc-2 test.
+ * ld-mips-elf/branch-misc-2.d: Removed.
+
+2002-12-10 Jason Thorpe <thorpej@wasabisystems.com>
+
+ * lib/ld-lib.exp (is_elf_format): Match NetBSD ELF targets.
+
+2002-12-03 Nick Clifton <nickc@redhat.com>
+
+ * ld-powerpc/powerpc.exp (ppcelftests): Add apuinfo merging
+ test.
+ * ld-powerpc/apuinfo1.s: New assembler source file.
+ * ld-powerpc/apuinfo2.s: New assembler source file.
+ * ld-powerpc/apuinfo.rd: New expected output file.
+
+2002-12-01 Stephane Carrez <stcarrez@nerim.fr>
+
+ Fix PR savannah/1417:
+ * ld-m68hc11/bug-1417.s: New test.
+ * ld-m68hc11/bug-1417.d: Likewise.
+
+2002-11-28 Jakub Jelinek <jakub@redhat.com>
+
+ * ld-i386/tlsnopic.rd: Change NOTYPE to TLS for UND sg* symbols.
+
+2002-11-28 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-sh/refdbg-0-dso.d: New test.
+ * ld-sh/refdbg-1.d: Likewise.
+ * ld-sh/refdbg.s: Likewise.
+ * ld-sh/refdbglib.s: Likewise.
+
+2002-11-22 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/elf.exp: Remove sec64k test.
+ * ld-elf/sec64k.exp: Reinstate.
+
+2002-11-21 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/elf.exp: Renamed from sec64k.exp. Add test_list loop.
+ * ld-elf/merge.s: New file.
+ * ld-elf/merge.d: New file.
+ * ld-elf/merge.ld: New file.
+
+2002-11-18 Svein E. Seldal <Svein.Seldal@solidas.com>
+
+ * ld-scripts/script.exp: Setup for tic4x testcase
+
+2002-11-15 Nick Clifton <nickc@redhat.com>
+
+ * ld-h8300: New directory.
+ * ld-h8300/h8300.exp: New expect script. Only run tests for h8300
+ targets.
+ * ld-h8300/relax.s: New assembler source file.
+ * ld-h8300/relax.d: New expected output file.
+
+2002-11-11 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-elf/sec64k.exp: New test.
+ * lib/ld-lib.exp (run_dump_test): Don't prepend "$srcdir/$subdir/"
+ to a source file starting with "/".
+
+2002-11-10 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-mmix/local1.d, ld-mmix/local3.d, ld-mmix/local5.d,
+ ld-mmix/local7.d: Tweak for change in readelf output.
+
+2002-11-09 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elfvsb/define.s: Avoid use of @ in .type directive.
+
+2002-11-07 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/expdyn6.d, ld-cris/weakref2.d, ld-cris/expdyn7.d,
+ ld-cris/nodyn5.d, ld-cris/expdyn5.d: New tests.
+
+2002-11-07 Nick Clifton <nickc@redhat.com>
+
+ * ld-fastcall/fastcall.exp: Only run tests for PE type x86
+ targets.
+
+2002-11-07 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-sh/rd-sh.exp: Set asflags_save always.
+
+2002-11-07 Casper S. Hornstrup <chorns@users.sourceforge.net>
+
+ * ld-fastcall: New directory for testing fastcall support.
+ * ld-fastcall/export.s: New file for testing fastcall symbol
+ handling.
+ * ld-fastcall/import.s: Likewise.
+ * ld-fastcall/fastcall.exp: Likewise.
+
+2002-11-03 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-sh/rd-sh.exp: Add -isa=SHcompact to ASFLAGS for SH-5.
+ * ld-sh/tlsbin-1.d: Handle GOT_BIAS appropriately for SH-5.
+ * ld-sh/tlspic-1.d: Likewise.
+ * ld-sh/tlspic-2.d: Likewise.
+ * ld-sh/tlsbin-2.d: Likewise. Make it robust for the symbols
+ defined by the linker scripts.
+
+2002-10-14 Stephane Carrez <stcarrez@nerim.fr>
+
+ * ld-m68hc11/m68hc11.exp: Specific tests for 68HC11/68HC12.
+ * ld-m68hc11/adj-jump.d: New test for linker relaxation.
+ * ld-m68hc11/adj-jump.s: Likewise.
+ * ld-m68hc11/adj-brset.s: Likewise.
+ * ld-m68hc11/adj-brset.d: Likewise.
+ * ld-m68hc11/relax-direct.s: Likewise.
+ * ld-m68hc11/relax-direct.d: Likewise.
+ * ld-m68hc11/relax-group.s: Likewise.
+ * ld-m68hc11/relax-group.d: Likewise.
+ * ld-m68hc11/bug-1403.d: Likewise.
+ * ld-m68hc11/bug-1403.s: Likewise.
+
+2002-10-14 Stephen Clarke <stephen.clarke@superh.com>
+ * ld-sh/ld-r-1.d: Disable for sh64*-*-linux*.
+ * ld-sh/sh64/sh64.exp: Likewise.
+ * ld-sh/sh.exp: Disable relaxing tests for sh64*-*-linux*.
+ * ld-sh/sh64/abi32.sd: Adjust expected output to include
+ sh64*-*-linux* formats too.
+ * ld-sh/sh64/relax.exp: Add emul32 variable to hold target
+ emulation, and set it appropriately for sh*-*-linux*.
+ * ld-sh/sh64/relfail.exp: Add variables to hold target
+ emulation, output format, start symbol, and whether target
+ supports 64-bit ABI. Set appropriately for sh*-*-linux*.
+
+2002-10-12 H.J. Lu (hjl@gnu.org)
+
+ * ld-discard/extern.d: Remove $srcdir/$subdir/.
+ * ld-discard/start.d: Likewise.
+ * ld-discard/static.d: Likewise.
+ * ld-linkonce/zeroehl32.d: Likewise.
+ * ld-selective/keepdot.d: Likewise.
+ * ld-selective/keepdot0.d: Likewise.
+
+2002-10-11 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-sh/rd-sh.exp: If the test matches *-dso.d, copy the output
+ of linker to the file tmpdir/*-dso.so.
+ * ld-sh/tlsbin.s, ld-sh/tlsbinpic.s, ld-sh/tlslib.s: New.
+ * ld-sh/tlsbin-0-dso.d: New.
+ * ld-sh/tlsbin-1.d: New.
+ * ld-sh/tlsbin-2.d: New.
+ * ld-sh/tlsbin-3.d: New.
+ * ld-sh/tlsbin-4.d: New.
+ * ld-sh/tlspic1.s, ld-sh/tlspic2.s: New.
+ * ld-sh/tlspic-1.d: New.
+ * ld-sh/tlspic-2.d: New.
+ * ld-sh/tlspic-3.d: New.
+ * ld-sh/tlspic-4.d: New.
+
+2002-10-10 Jakub Jelinek <jakub@redhat.com>
+
+ * ld-i386/combreloc.s: New test.
+ * ld-i386/combreloc.d: New test.
+ * ld-i386/i386.exp (i386tests): Add it.
+
+2002-10-10 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-i386/i386.exp (reloc): Turn off combreloc.
+ * ld-i386/reloc.d: Likewise.
+ * ld-powerpc/powerpc.exp: Likewise.
+ * ld-powerpc/reloc.d: Likewise.
+
+2002-10-03 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfvers/vers21.c (_old_foobar): Initialized to -1 for gcc
+ 3.x.
+
+2002-10-03 Chris Demetriou <cgd@broadcom.com>
+
+ * ld-mips-elf/branch-misc-1.d: Link at 0x500000 and use -N, to be
+ more compatible with non-embedded targets.
+ * ld-mips-elf/branch-misc-2.d: Likewise.
+
+ * ld-mips-elf/mips-elf.exp: Clean up some comments about embedded
+ PIC tests.
+ (elf): New variable, to control whether generic ELF tests are run.
+ (embedded_elf): New variable, to control whether ELF tests
+ requiring embedded PIC or embedded relocs are run.
+
+2002-10-02 Stephen Clarke <stephen.clarke@superh.com>
+
+ * ld-sh/sh64/gotplt.d, ld-sh/sh64/gotplt.map,
+ ld-sh/sh64/gotplt.s: New test.
+
+2002-10-02 Stephen Clarke <stephen.clarke@superh.com>
+ * ld-sh/sh64/cmpct1.sd : Fix linked file name.
+ * ld-sh/sh64/crange3.dd: Likewise.
+
+2002-10-01 Jakub Jelinek <jakub@redhat.com>
+
+ * ld-i386/i386.exp: Add tlsindntpoff test.
+ * ld-i386/tlsindntpoff.s: New test.
+ * ld-i386/tlsindntpoff.dd: New test.
+
+2002-10-01 Jakub Jelinek <jakub@redhat.com>
+
+ * ld-x86-64/tlspic1.s: Change TLSGD sequences.
+ * ld-x86-64/tlsbinpic.s: Likewise.
+ * ld-x86-64/tlspic.dd: Adjust.
+
+2002-10-01 Jakub Jelinek <jakub@redhat.com>
+
+ * ld-i386/i386.exp: Add tlsg test.
+ * ld-i386/tlsg.s: New test.
+ * ld-i386/tlsg.sd: New test.
+ * ld-i386/tlsbin.dd: Change LD into LD -> LE in comments.
+ * ld-i386/tlsbinpic.s: Likewise.
+ * ld-x86-64/x86-64.exp: Add tlsg test.
+ * ld-x86-64/tlsg.s: New test.
+ * ld-x86-64/tlsg.sd: New test.
+ * ld-x86-64/tlsbin.dd: Change LD into LD -> LE in comments.
+ * ld-x86-64/tlsbinpic.s: Likewise.
+
+2002-09-30 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/powerpc.exp: Restrict to 32 bit ELF.
+
+2002-09-30 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/reloc.s, ld-powerpc/reloc.d: New.
+ * ld-powerpc/powerpc.exp: New.
+
+ * ld-i386/reloc.s, ld-i386/reloc.d: New.
+ * ld-i386/i386.exp: Run new test.
+
+2002-09-27 Jakub Jelinek <jakub@redhat.com>
+
+ * lib/ld-lib.exp (run_ld_link_tests): Add.
+ * ld-sh/sh64/sh64.exp (run_ld_link_tests, regexp_diff,
+ file_contents): Remove.
+ (sh64tests): Add 6th field to the tests array.
+ * ld-i386/i386.exp (run_ld_link_tests): Remove.
+ * ld-x86-64/x86-64.exp: New.
+ * ld-x86-64/tlsbin.dd: New test.
+ * ld-x86-64/tlsbinpic.s: New test.
+ * ld-x86-64/tlsbin.rd: New test.
+ * ld-x86-64/tlsbin.s: New test.
+ * ld-x86-64/tlsbin.sd: New test.
+ * ld-x86-64/tlsbin.td: New test.
+ * ld-x86-64/tlslib.s: New test.
+ * ld-x86-64/tlspic1.s: New test.
+ * ld-x86-64/tlspic2.s: New test.
+ * ld-x86-64/tlspic.dd: New test.
+ * ld-x86-64/tlspic.rd: New test.
+ * ld-x86-64/tlspic.sd: New test.
+ * ld-x86-64/tlspic.td: New test.
+
+2002-09-21 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-undefined/undefined.exp: Adjust function test.
+
+2002-09-20 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-i386/i386.exp: Only run tests on ELF targets.
+
+2002-09-19 Jakub Jelinek <jakub@redhat.com>
+
+ * ld-i386/i386.exp: New.
+ * ld-i386/tlsbin.dd: New test.
+ * ld-i386/tlsbinpic.s: New test.
+ * ld-i386/tlsbin.rd: New test.
+ * ld-i386/tlsbin.s: New test.
+ * ld-i386/tlsbin.sd: New test.
+ * ld-i386/tlsbin.td: New test.
+ * ld-i386/tlslib.s: New test.
+ * ld-i386/tlsnopic1.s: New test.
+ * ld-i386/tlsnopic2.s: New test.
+ * ld-i386/tlsnopic.dd: New test.
+ * ld-i386/tlsnopic.rd: New test.
+ * ld-i386/tlsnopic.sd: New test.
+ * ld-i386/tlspic1.s: New test.
+ * ld-i386/tlspic2.s: New test.
+ * ld-i386/tlspic.dd: New test.
+ * ld-i386/tlspic.rd: New test.
+ * ld-i386/tlspic.sd: New test.
+ * ld-i386/tlspic.td: New test.
+
+2002-09-18 Chris Demetriou <cgd@broadcom.com>
+
+ * ld-mips-elf/branch-misc-1.d: New file.
+ * ld-mips-elf/branch-misc-2.d: New file.
+ * ld-mips-elf/mips-elf.exp: Run new tests.
+
+2002-09-05 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-sh/sh64/cmpct1.xd: Adjust for lack of abs section sym.
+ * ld-sh/sh64/crange3-cmpct.rd: Likewise.
+ * ld-sh/sh64/crange3-media.rd: Likewise.
+ * ld-sh/sh64/crange3.rd: Likewise.
+
+2002-08-31 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-mmix/bpo-10.d: Tweak for change in symbols handling.
+ * ld-mmix/bpo-11.d: Ditto.
+
+ * ld-mmix/b-nosym.d: Adjust for changed output for absence of
+ symbols.
+
+ * ld-mmix/sec-7m.d: Rename tested section from .debug_info to
+ .di.
+ * ld-mmix/sec-7a.s, ld-mmix/sec-7b.s, ld-mmix/sec-7c.s,
+ ld-mmix/sec-7d.s, ld-mmix/sec-7e.s: Ditto.
+
+2002-08-28 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-discard/discard.exp: xfail m6812.
+ * ld-scripts/map-address.d: Adjust for extras emitted by pe targets.
+
+2002-08-27 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-mmix/b-nosym.d: Revert last change.
+
+2002-08-26 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-mmix/b-nosym.d: Adjust for "no symbols" on stdout.
+
+2002-08-23 Stephen Clarke <stephen.clarke@superh.com>
+
+ * ld-sh/sh64/rd-sh64.exp: New framework file.
+ * ld-sh/sh64/init-cmpct.d, ld-sh/sh64/init-media.d,
+ ld-sh/sh64/init64.d, ld-sh/sh64/init.s: New tests for
+ correct setting of ISA bit for init and fini entry-points.
+
+2002-08-16 Stephen Clarke <stephen.clarke@superh.com>
+
+ * ld-sh/sh64/sh64.exp: Add dlsection.
+ * ld-sh/sh64/dlsection-1.s, ld-sh/sh64/dlsection.sd: New.
+
+2002-08-16 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-discard/discard.exp: xfail targets using generic linker.
+ * ld-discard/extern.d: Allow "data" to be reduced to a section sym.
+
+2002-08-15 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/libdso-4.d, ld-cris/undef1.d: New test.
+
+2002-08-13 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfvers/vers.exp: Add vers23c and vers23d.
+
+ * ld-elfvers/vers23c.ver: New.
+ * ld-elfvers/vers23d.dsym: New.
+
+2002-08-12 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfvers/vers.exp: Add vers23.
+
+ * ld-elfvers/vers23.c: New.
+ * ld-elfvers/vers23.dsym: New.
+ * ld-elfvers/vers23.ver: New.
+ * ld-elfvers/vers23a.c: New.
+ * ld-elfvers/vers23a.dsym: New.
+ * ld-elfvers/vers23a.map: New.
+ * ld-elfvers/vers23a.sym: New.
+ * ld-elfvers/vers23a.ver: New.
+ * ld-elfvers/vers23b.c: New.
+ * ld-elfvers/vers23b.dsym: New.
+ * ld-elfvers/vers23b.map: New.
+ * ld-elfvers/vers23b.ver: New.
+
+2002-08-12 Stephen Clarke <stephen.clarke@superh.com>
+
+ * ld-sh/sh64/abi32.xd: Adjust whitespace in elf32 section
+ listing.
+ * ld-sh/sh64/cmpct1.xd, ld-sh/sh64/mix1.xd, ld-sh/sh64/mix2.xd,
+ ld-sh/sh64/rel32.xd, ld-sh/sh64/shdl32.xd: Likewise.
+ * ld-sh/sh64/abi32.xd: Adjust as type of linker-script-symbols
+ is no longer set to object.
+ * ld-sh/sh64/abi64.xd, ld-sh/sh64/cmpct1.xd, ld-sh/sh64/crange1.rd,
+ ld-sh/sh64/crange2.rd, ld-sh/sh64/crange3-cmpct.rd,
+ ld-sh/sh64/crange3-media.rd, ld-sh/sh64/crange3.rd,
+ ld-sh/sh64/mix1.xd, ld-sh/sh64/mix2.xd, ld-sh/sh64/shdl32.xd,
+ ld-sh/sh64/shdl64.xd: Likewise.
+
+2002-08-10 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-discard/discard.exp: Don't run on linuxaout or linuxoldld.
+ * ld-linkonce/linkonce.exp: Likewise.
+ * ld-selective/sel-dump.exp: Likewise.
+ * ld-selective/selective.exp: Don't run on aout or bout.
+
+2002-08-08 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfvers/vers.exp: Add vers22.
+
+ * ld-elfvers/vers22.c: New.
+ * ld-elfvers/vers22.dsym: New.
+ * ld-elfvers/vers22.map: New.
+ * ld-elfvers/vers22.ver: New.
+ * ld-elfvers/vers22a.c: New.
+ * ld-elfvers/vers22a.dsym: New.
+ * ld-elfvers/vers22a.sym: New.
+ * ld-elfvers/vers22a.ver: New.
+ * ld-elfvers/vers22b.c: New.
+ * ld-elfvers/vers22b.dsym: New.
+ * ld-elfvers/vers22b.ver: New.
+
+2002-08-07 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfvers/vers.exp: Add --no-undefined-version.
+
+ * ld-elfvers/vers1.map: Remove the unused foo1 and foo2.
+ * ld-elfvers/vers8.map: Likewise.
+ * ld-elfvers/vers18.map: Likewise.
+
+2002-07-30 John David Anglin <dave@hiauly1.hia.nrc.ca>
+
+ * ld-discard/discard.exp, ld-scripts/phdrs.exp, ld-scripts/phdrs2.exp,
+ ld-selective/sel-dump.exp: Test hppa*64*-*-hpux* target.
+ * ld-elfvers/vers.exp, ld-elfvsb/elfvsb.exp, ld-elfweak/elfweak.exp,
+ ld-linkonce/linkonce.exp, ld-shared/shared.exp,
+ ld-undefined/weak-undef.exp: Test hppa*64*-*-hpux* and hppa*-*-linux*
+ targets.
+ * ld-discard/exit.s, ld-discard/extern.s, ld-discard/start.s,
+ ld-discard/static.s: Add whitespace before assembler directives.
+
+2002-07-29 Chris Demetriou <cgd@broadcom.com>
+
+ * ld-mips-elf/mips16-1.d: Check that ASE flag is actually set.
+
+2002-07-26 Richard Sandiford <rsandifo@redhat.com>
+
+ * ld-mips-elf/mips16-1.d,
+ * ld-mips-elf/mips16-1[ab].s: New test.
+ * ld-mips-elf/mips-elf.exp: Run it.
+
+2002-07-19 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-mmix/sec-1.d: Adjust for changes in padding.
+ * ld-mmix/sec-3.d: Ditto.
+
+2002-07-15 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfvers/vers.exp: Add vers21.
+
+ * ld-elfvers/vers21.c: New.
+ * ld-elfvers/vers21.dsym: New.
+ * ld-elfvers/vers21.map: New.
+ * ld-elfvers/vers21.sym: New.
+ * ld-elfvers/vers21.ver: New.
+
+2002-07-12 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/nodyn4.d, ld-cris/expdyn4.d, ld-cris/comref1.s,
+ ld-cris/euwref1.s, ld-cris/expdyn3.d, ld-cris/expdyn2.d,
+ ld-cris/expdref1.s: New tests.
+
+2002-07-09 Richard Sandiford <rsandifo@redhat.com>
+
+ * ld-scripts/dynamic-sections*: New test.
+
+2002-07-09 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/libdso-3.d, ld-cris/dso-3.s, ld-cris/noglob1.s,
+ ld-cris/noglob1.d: New tests.
+
+ * ld-cris/libdso-1.d: Tweak for change in size of dynamic sections.
+
+2002-07-03 Alan Modra <amodra@bigpond.net.au>
+
+ * lib/ld-lib.exp (default_ld_nm): Run nm with LC_ALL=C to ensure
+ consistent sorting.
+ (run_dump_test): Likewise for objdump/nm/objcopy/readelf.
+ * ld-sh/sh64/sh64.exp (run_ld_link_tests): Likewise.
+
+2002-06-29 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-mmix/sec-8m.d, ld-mmix/sec-8m.s, ld-mmix/sec-8a.s,
+ ld-mmix/sec-8b.s, ld-mmix/sec-8d.s: New test.
+
+2002-06-18 Chris Demetriou <cgd@broadcom.com>
+
+ * ld-mips-elf/empic2-ref.s: Add a missing .end, apparently
+ turned up by recent assembler changes.
+
+2002-06-17 Tom Rix <trix@redhat.com>
+
+ * ld-d10v/d10v.exp: New driver for d10v.
+ * ld-d10v/default_layout.d : New test.
+ * ld-d10v/regression-001.lt: New test for a linker regression.
+ * ld-d10v/linktest-002.lt: New test for run_link_test.
+ * ld-d10v/reloc-001.d - reloc-016.d: New tests.
+
+2002-06-11 John David Anglin <dave@hiauly1.hia.nrc.ca>
+
+ * ld-scripts/cross1.t: Add .hash, .dynstr and .dynsym sections to
+ script.
+
+2002-06-11 Andreas Jaeger <aj@suse.de>
+
+ * ld-undefined/undefined.exp: Add s390x to dwarf2 xfails.
+
+2002-06-10 Richard Sandiford <rsandifo@redhat.com>
+
+ * ld-mips-elf/region1a.s,
+ * ld-mips-elf/region1b.s,
+ * ld-mips-elf/region1.t,
+ * ld-mips-elf/region1.d: New test.
+ * ld-mips-elf/mips-elf.exp: Run it.
+
+2002-06-07 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * ld-scripts/phdrs2.s: Use .p2align instead of .align.
+ Use section names .foo and .bar instead of .text and .data.
+ * ld-scripts/phdrs2.t: Refer to .foo and .bar instead of .text
+ and .data.
+
+2002-06-06 David Heine <dlheine@tensilica.com>
+
+ * ld-scripts/phdrs2.exp: New file: Run second phdrs test.
+ * ld-scripts/phdrs2.s: New file: Dummy assembler source.
+ * ld-scripts/phdrs2.t: New file: Linker script with an empty
+ section at the start of a loadable segment.
+
+2005-06-02 H.J. Lu <hjl@gnu.org>
+
+ * ld-srec/sr3.cc (__dso_handle): Added for gcc 3.1 with
+ -fuse-cxa-atexit.
+ (__cxa_atexit): Likewise.
+
+2002-05-30 Richard Henderson <rth@redhat.com>
+
+ * ld-bootstrap/bootstrap.exp: Test --relax.
+
+2002-05-28 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/libdso-2.d: Tweak for combreloc now default on.
+
+2002-05-07 Richard Sandiford <rsandifo@redhat.com>
+
+ * lib/ld-lib.exp (run_dump_test): Add -L$srcdir/$subdir.
+ (is_elf_format): New, extracted from...
+ * ld-scripts/weak.exp: ...here.
+ * ld-scripts/overlay-size.exp: New test.
+ * ld-scripts/overlay-size.[tsd],
+ * ld-scripts/overlay-size-map.d: New files for it.
+
+2002-05-02 Richard Sandiford <rsandifo@redhat.com>
+
+ * ld-scripts/map-address.exp: Quote conditions.
+
+2002-04-30 Richard Sandiford <rsandifo@redhat.com>
+
+ * ld-scripts/map-address.exp: New test.
+ * ld-scripts/map-address.[td]: New files for it.
+
+2002-04-19 Richard Henderson <rth@redhat.com>
+
+ * ld-elfvsb/elfvsb.exp: Mirror ia64 non-pic xfails for alpha.
+ * ld-shared/shared.exp: Likewise.
+ * ld-selective/selective.exp: Disable for alpha.
+ * ld-undefined/undefined.exp: Add alpha to dwarf2 xfails.
+
+2002-04-05 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/libdso-2.d, ld-cris/dso-2.s, ld-cris/hide1: New test.
+
+2002-03-19 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/ldsym1.d: New test.
+
+ * ld-mmix/bpo-1.d: Tweak for type of linker-script-symbols no
+ longer set to object.
+ * ld-mmix/undef-3.d, ld-mmix/start-1.d, ld-mmix/locto-1.d,
+ ld-mmix/loct-1.d, ld-mmix/locdo-1.d, ld-mmix/local7.d,
+ ld-mmix/local5.d, ld-mmix/local3.d, ld-mmix/local1.d,
+ ld-mmix/loc6.d, ld-mmix/loc4.d, ld-mmix/loc3.d, ld-mmix/loc2.d,
+ ld-mmix/loc1.d, ld-mmix/greg-7.d, ld-mmix/greg-6.d,
+ ld-mmix/greg-5.d, ld-mmix/greg-4.d, ld-mmix/greg-3.d,
+ ld-mmix/greg-2.d, ld-mmix/greg-19.d, ld-mmix/greg-1.d,
+ ld-mmix/bspec2.d, ld-mmix/bspec1.d, ld-mmix/bpo-9.d,
+ ld-mmix/bpo-6.d, ld-mmix/bpo-5.d, ld-mmix/bpo-4.d,
+ ld-mmix/bpo-3.d, ld-mmix/bpo-2.d, ld-mmix/bpo-19.d,
+ ld-mmix/bpo-18.d, ld-mmix/bpo-17.d, ld-mmix/bpo-16.d,
+ ld-mmix/bpo-14.d, ld-mmix/bpo-11.d, ld-mmix/bpo-10.d: Ditto.
+
+2002-03-11 Andreas Jaeger <aj@suse.de>
+
+ * ld-elfweak/strongdata.sym: Allow bss section for GCC 3.2 that
+ places zero initialized data in the bss.
+ * ld-elfweak/lddsodata.dsym: Likewise.
+
+2002-03-07 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/expdyn1.d: Tweak for change in elf.sc.
+
+2002-02-24 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-sh/ld-r-1.d: Adjust to changes in readelf output.
+ * ld-sh/shared-1.d, ld-sh/sh64/crangerel1.rd, ld-sh/crangerel2.rd,
+ ld-sh/sh64/reldl32.rd, ld-sh/sh64/reldl64.rd: Ditto.
+
+2002-02-18 Daniel Jacobowitz <drow@mvista.com>
+
+ * ld-elfvsb/sh1.c: Fix typo in last change.
+
+2002-02-17 Daniel Jacobowitz <drow@mvista.com>
+
+ * ld-elfvsb/sh1.c: Use #pragma weak.
+
+2002-02-17 Daniel Jacobowitz <drow@mvista.com>
+
+ * vers.exp: Do not call diff -q.
+
+2002-02-17 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-mmix/b-nosym.d, ld-mmix/sec-6.d: Tweak for change in symbol
+ output.
+ * ld-mmix/sec-7m.d, ld-mmix/sec-7a.s, ld-mmix/sec-7b.s,
+ ld-mmix/sec-7c.s, ld-mmix/sec-7d.s, ld-mmix/sec-7e.s: New test.
+
+ * ld-mmix/bpo-22.d: New test.
+
+ * ld-mmix/local12.d (Sections): Match any LMA for .data, .sbss,
+ and .bss.
+
+2002-02-12 John David Anglin <dave@hiauly1.hia.nrc.ca>
+
+ * ld-selective/selective.exp: Link against libgcc on
+ hppa*-*-linux* targets.
+
+2002-02-11 Alexandre Oliva <aoliva@redhat.com>
+
+ * ld-sh/sh64/reldl64.rd: Add relocation symbol data in info field.
+ * ld-sh/sh64/crange-2i.s: Add align to match align in crange-2h.s.
+ * ld-sh/sh64/crange3-cmpct.rd: Adjust to reflect modifications
+ in section ordering.
+ * ld-sh/sh64/crange3-media.rd: Likewise.
+ * ld-sh/sh64/crange3.rd: Likewise.
+ * ld-sh/sh64/crange3.dd: Likewise.
+
+ * ld-sh/shared-1.d: Fix relocation addend.
+
+2002-02-09 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-mmix/bpo-21.d, ld-mmix/bpo-21m.d, ld-mmix/bpo-11.s: New
+ tests.
+
+2002-02-08 Alexandre Oliva <aoliva@redhat.com>
+
+ Contribute sh64-elf.
+ 2002-02-02 Alexandre Oliva <aoliva@redhat.com>
+ * ld-sh/sh64/crange3-cmpct.rd: Adjust offsets.
+ * ld-sh/sh64/crange3-media.rd: Likewise.
+ * ld-sh/sh64/crange3.rd: Likewise.
+ * ld-sh/sh64/crangerel1.rd: Likewise.
+ * ld-sh/sh64/crangerel2.rd: Likewise.
+ * ld-sh/sh64/reldl32.rd: Likewise.
+ * ld-sh/sh64/reldl64.rd: Likewise.
+ 2002-01-28 Alexandre Oliva <aoliva@redhat.com>
+ * ld-sh/sh64/abi32.xd: Formatting changes to match the current
+ output of objdump.
+ * ld-sh/sh64/cmpct1.xd: Likewise.
+ * ld-sh/sh64/crange1.rd: Likewise.
+ * ld-sh/sh64/crange2.rd: Likewise.
+ * ld-sh/sh64/crange3-cmpct.rd: Likewise.
+ * ld-sh/sh64/crange3-media.rd: Likewise.
+ * ld-sh/sh64/crange3.rd: Likewise.
+ * ld-sh/sh64/crangerel1.rd: Likewise.
+ * ld-sh/sh64/crangerel2.rd: Likewise.
+ * ld-sh/sh64/mix1.xd: Likewise.
+ * ld-sh/sh64/mix2.xd: Likewise.
+ * ld-sh/sh64/rel32.xd: Likewise.
+ * ld-sh/sh64/reldl32.rd: Likewise.
+ * ld-sh/sh64/reldl64.rd: Likewise.
+ * ld-sh/sh64/sh64.exp: Likewise. Reordered cranges and stack
+ sessions, to match changes in the linker script.
+ 2001-06-14 Alexandre Oliva <aoliva@redhat.com>
+ * ld-sh/sh64/reldl32.rd, ld-sh/sh64/reldl64.rd: Adjust relocation
+ info to reflect renumbering of relocation types.
+ 2001-03-14 DJ Delorie <dj@redhat.com>
+ * ld-sh/sh64/endian.dbd: New file, endian tests.
+ * ld-sh/sh64/endian.dld: Ditto.
+ * ld-sh/sh64/endian.ld: Ditto.
+ * ld-sh/sh64/endian.s: Ditto.
+ * ld-sh/sh64/endian.sbd: Ditto.
+ * ld-sh/sh64/endian.sld: Ditto.
+ * ld-sh/sh64/sh64.exp: Add above tests. Add -L option to ld.
+ 2001-03-12 DJ Delorie <dj@redhat.com>
+ * ld-sh/sh64/relax.exp: New file, test disabling relaxing.
+ * ld-sh/sh64/relax1.s: Ditto.
+ * ld-sh/sh64/relax2.s: Ditto.
+ * ld-sh/sh64/relax3.s: Ditto.
+ * ld-sh/sh64/relax4.s: Ditto.
+ * ld-sh/sh64/relfail.exp: New file, test for bogus relocs.
+ * ld-sh/sh64/relfail.s: Ditto.
+ 2001-03-12 DJ Delorie <dj@redhat.com>
+ * ld-sh/sh.exp: This test isn't appropriate for SH64 since it
+ uses SH32 assembler files.
+ 2001-03-07 DJ Delorie <dj@redhat.com>
+ * ld-selective/selective.exp: Pass "-e _start" for sh64 to
+ accomodate expected start symbol in test.
+ 2001-03-06 DJ Delorie <dj@redhat.com>
+ * ld-scripts/crossref.exp: Pass -mshelf32 to the linker for sh64,
+ to match what gcc passes to the linker by default.
+ * ld-selective/selective.exp: Ditto.
+ * ld-srec/srec.exp: Ditto, plus XFAIL for sh64.
+ * ld-undefined/undefined.exp: Add XFAIL for sh64 (it's dwarf2).
+ 2001-03-06 DJ Delorie <dj@redhat.com>
+ * ld-sh/sh64/abi32.xd (stack): Adjust for new default stack layout.
+ * ld-sh/sh64/abi64.xd (stack): Ditto.
+ * ld-sh/sh64/cmpct1.xd (stack): Ditto.
+ * ld-sh/sh64/crange1.rd (stack): Ditto.
+ * ld-sh/sh64/crange2.rd (stack): Ditto.
+ * ld-sh/sh64/crange3-cmpct.rd (stack): Ditto.
+ * ld-sh/sh64/crange3-media.rd (stack): Ditto.
+ * ld-sh/sh64/crange3.rd (stack): Ditto.
+ * ld-sh/sh64/mix1.xd (stack): Ditto.
+ * ld-sh/sh64/mix2.xd (stack): Ditto.
+ * ld-sh/sh64/shdl32.xd (stack): Ditto.
+ * ld-sh/sh64/shdl64.xd (stack): Ditto.
+ 2001-01-14 Hans-Peter Nilsson <hpn@cygnus.com>
+ * ld-sh/sh64/mix1.xd: Add SORT_ENTRIES for .cranges section.
+ * ld-sh/sh64/mix2.xd: Ditto.
+ 2001-01-08 Hans-Peter Nilsson <hpn@cygnus.com>
+ * ld-sh/sh64/abi32.xd: Adjust for bit 0 set on an entry address
+ being SHmedia.
+ * ld-sh/sh64/shdl64.xd: Ditto.
+ * ld-sh/sh64/shdl32.xd: Ditto.
+ * ld-sh/sh64/mix2.xd: Ditto.
+ * ld-sh/sh64/crange3-media.rd: Ditto.
+ * ld-sh/sh64/abi64.xd: Ditto.
+ 2001-01-06 Hans-Peter Nilsson <hpn@cygnus.com>
+ * ld-sh/sh64/crange-2a.s (diversion2): New global symbol.
+ * ld-sh/sh64/crange1.rd: Adjust to presence of new symbol.
+ Adjust section type for .cranges; expect sorted contents.
+ * ld-sh/sh64/crange2.rd: Ditto.
+ * ld-sh/sh64/crange3.dd, ld-sh/sh64/crange3.rd: Ditto.
+ * ld-sh/sh64/crangerel1.rd: Adjust to presence of new symbol.
+ * ld-sh/sh64/crangerel2.rd: Ditto.
+ * ld-sh/sh64/mix1.xd: Adjust to DEBUGGING being set for .cranges.
+ * ld-sh/sh64/mix2.xd: Ditto.
+ * ld-sh/sh64/crange3-cmpct.rd, ld-sh/sh64/crange3-media.rd: New
+ tests.
+ * ld-sh/sh64/sh64.exp: Tweak test message. Run new tests.
+ 2001-01-05 Hans-Peter Nilsson <hpn@cygnus.com>
+ * ld-sh/sh64/shmix-1.s (start2): Add a NOP to provide a valid
+ target for (unexpanded) PTB. Add an .align 2 to SHmedia code to
+ keep properly aligned.
+ * ld-sh/sh64/mix1.sd, ld-sh/sh64/mix1.xd: Adjust accordingly.
+ * ld-sh/sh64/mix1-noexp.sd, ld-sh/sh64/mix2-noexp.sd,
+ ld-sh/sh64/abixx-noexp.sd: New tests for GAS -no-expand and
+ R_SH_PT_16 relocation.
+ * ld-sh/sh64/sh64.exp: Run new tests.
+ 2000-12-30 Hans-Peter Nilsson <hpn@cygnus.com>
+ * ld-sh/sh64/crange-2f.s, ld-sh/sh64/crange-2g.s,
+ ld-sh/sh64/crange-2h.s, ld-sh/sh64/crange-2i.s,
+ ld-sh/sh64/crange3.dd, ld-sh/sh64/crange3.rd: New tests.
+ * ld-sh/sh64/sh64.exp: Run new tests.
+ * ld-sh/sh64/crange1.rd: Correct section flags.
+ * ld-sh/sh64/crange2.rd: Ditto.
+ * ld-sh/sh64/crangerel1.rd: Ditto.
+ 2000-12-18 Hans-Peter Nilsson <hpn@cygnus.com>
+ * ld-sh/sh64/crange-1.s, ld-sh/sh64/crange-2a.s,
+ ld-sh/sh64/crange-2b.s, ld-sh/sh64/crange-2c.s,
+ ld-sh/sh64/crange-2d.s, ld-sh/sh64/crange-2e.s,
+ ld-sh/sh64/crange1.rd, ld-sh/sh64/crange2.rd,
+ ld-sh/sh64/crangerel1.rd, ld-sh/sh64/crangerel2.rd: New tests for
+ handling .cranges section.
+ * ld-sh/sh64/sh64.exp: Run new tests.
+ * ld-sh/sh64/mix1.sd, ld-sh/sh64/mix1.xd, ld-sh/sh64/mix2.sd,
+ ld-sh/sh64/mix2.xd: Adjust for .cranges section.
+ 2000-12-15 Hans-Peter Nilsson <hpn@cygnus.com>
+ * ld-sh/sh64/abi32.sd, ld-sh/sh64/abi32.xd, ld-sh/sh64/abi64.sd,
+ ld-sh/sh64/abi64.xd, ld-sh/sh64/cmpct1.xd, ld-sh/sh64/mix1.sd,
+ ld-sh/sh64/mix1.xd, ld-sh/sh64/mix2.sd, ld-sh/sh64/mix2.xd,
+ ld-sh/sh64/shdl32.xd, ld-sh/sh64/shdl64.xd: Adjust to .bss and
+ .data individually 8-byte aligned.
+ 2000-12-09 Hans-Peter Nilsson <hpn@cygnus.com>
+ * ld-sh/sh64/rel-1.s, ld-sh/sh64/rel-2.s, ld-sh/sh64/rel32.xd,
+ ld-sh/sh64/rel64.xd, ld-sh/sh64/reldl-1.s, ld-sh/sh64/reldl-2.s,
+ ld-sh/sh64/reldl32.rd, ld-sh/sh64/reldl64.rd: New tests.
+ * ld-sh/sh64/sh64.exp: Make it possible to use readelf as
+ inspection tool. Run new tests.
+ 2000-12-07 Hans-Peter Nilsson <hpn@cygnus.com>
+ * ld-sh/sh64/abi64.sd, ld-sh/sh64/abi32.sd, ld-sh/sh64/mix1.sd,
+ ld-sh/sh64/mix2.sd: Correct offsets in PT/PTA/PTB expansions.
+ * ld-sh/sh64/shdl-1.s, ld-sh/sh64/shdl-2.s, ld-sh/sh64/shdl64.sd,
+ ld-sh/sh64/shdl64.xd, ld-sh/sh64/shdl32.xd: New tests.
+ * ld-sh/sh64/sh64.exp: Run new tests.
+ 2000-12-01 Hans-Peter Nilsson <hpn@cygnus.com>
+ * ld-sh/sh64/cmpct1.sd, ld-sh/sh64/cmpct1.xd,
+ ld-sh/sh64/shcmp-1.s: New test.
+ * ld-sh/sh64/sh64.exp: Add new test to sh64tests. Reformat.
+ 2000-11-30 Hans-Peter Nilsson <hpn@cygnus.com>
+ * ld-sh/sh64/sh64.exp: Use linker option -mshelf64 for 64-bit ABI
+ test.
+ * ld-sh/sh64/abi64.xd: Tweak for 64-bit ELF.
+ 2000-11-29 Hans-Peter Nilsson <hpn@cygnus.com>
+ * ld-sh/sh64/sh64.exp (sh64tests): Use linker option -mshelf32 for
+ tests.
+ 2000-11-27 Hans-Peter Nilsson <hpn@cygnus.com>
+ * ld-sh/sh64/abi32.sd, ld-sh/sh64/abi64.sd: Correct MOVI
+ registers.
+ * ld-sh/sh64/mix1.sd, ld-sh/sh64/mix1.xd, ld-sh/sh64/shmix-1.s:
+ New test.
+ * ld-sh/sh64/mix2.sd, ld-sh/sh64/mix2.xd, ld-sh/sh64/shmix-2.s,
+ ld-sh/sh64/shmix-3.s: New test.
+ * ld-sh/sh64/sh64.exp: Add new tests to sh64tests.
+ 2000-11-26 Hans-Peter Nilsson <hpn@cygnus.com>
+ * ld-sh/sh64: New testsuite.
+
+2002-02-07 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-selective/keepdot.s: Remove section specifier.
+
+2002-02-05 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-selective/keepdot.d, ld-selective/keepdot.ld,
+ ld-selective/keepdot.s, ld-selective/keepdot0.d: New tests.
+ * ld-selective/sel-dump.exp: New, driver for run_dump_test:s.
+
+2002-02-04 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-mmix/bpo-18.d, ld-mmix/bpo64addr.ld, ld-mmix/bpo-18m.d,
+ ld-mmix/bpo-9.s, ld-mmix/bpo-19.d, ld-mmix/bpo-19m.d,
+ ld-mmix/bpo-10.s, ld-mmix/bpo-20.d, ld-mmix/bpo-20m.d: New tests
+ for on-demand global register allocation.
+
+2002-02-02 Alexandre Oliva <aoliva@redhat.com>
+
+ * ld-sh/shared-1.d: Fix incorrect offsets.
+
+2002-02-01 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-mmix/bpo-1.d, ld-mmix/bpo-1.s, ld-mmix/bpo-1m.d,
+ ld-mmix/bpo-15.d, ld-mmix/bpo-4.s, ld-mmix/bpo-6.d,
+ ld-mmix/bpo-6.s, ld-mmix/bpo-2.d, ld-mmix/bpo-6m.d,
+ ld-mmix/bpo-12m.d, ld-mmix/bpo-2m.d, ld-mmix/bpo-2.s,
+ ld-mmix/bpo-5.s, ld-mmix/bpo-3.d, ld-mmix/start3.s,
+ ld-mmix/bpo-3m.d, ld-mmix/bpo-9m.d, ld-mmix/bpo-4.d,
+ ld-mmix/bpo-3.s, ld-mmix/bpo-4m.d, ld-mmix/bpo-7.d,
+ ld-mmix/bpo-5.d, ld-mmix/bpo-16.d, ld-mmix/bpo-5m.d,
+ ld-mmix/bpo-7m.d, ld-mmix/bpo-9.d, ld-mmix/bpo-8.d,
+ ld-mmix/start4.s, ld-mmix/bpo-8m.d, ld-mmix/bpo-13m.d,
+ ld-mmix/bpo-15m.d, ld-mmix/bpo-10.d, ld-mmix/bpo-11.d,
+ ld-mmix/bpo-14m.d, ld-mmix/bpo-13.d, ld-mmix/bpo-7.s,
+ ld-mmix/bpo-12.d, ld-mmix/bpo-16m.d, ld-mmix/bpo-14.d,
+ ld-mmix/bpo-8.s, ld-mmix/bpo-17.d, ld-mmix/bpo-17m.d: New tests.
+
+2002-01-31 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/weakref1.d, ld-cris/libdso-1.d, ld-cris/gotrel2.s,
+ ld-cris/expdyn1.d, ld-cris/expdyn1.s, ld-cris/dso-1.s: New tests.
+ * ld-cris/cris.exp: Split run_dump_tests in two parts, executing
+ tests named *dso-*.d first and copying their tmpdir/dump to files
+ named as the .d-file.
+
+2002-01-31 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-scripts/crossref.exp: Allow foo to have a leading dot.
+ * ld-scripts/cross1.t: Add .opd.
+ * ld-undefined/undefined.exp: Allow leading dot on sym names.
+ * lib/ld-lib.exp (default_ld_nm): Strip leading dots from syms.
+
+2002-01-29 Chris Demetriou <cgd@broadcom.com>
+
+ * ld-mips-elf/emrelocs-eb.d: New file to test --embedded-relocs.
+ * ld-mips-elf/emrelocs-el.d: Likewise.
+ * ld-mips-elf/emrelocs1.s: Likewise.
+ * ld-mips-elf/emrelocs2.s: Likewise.
+ * ld-mips-elf/emrelocs.ld: Likewise.
+ * ld-mips-elf/mips-elf.exp: Add the above to the list of tests.
+
+2002-01-21 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris: New testsuite directory.
+
+2002-01-15 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * ld-sh/sh.exp: Copy start.s file into test directory.
+
+2002-01-14 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * ld-selective/selective.exp: For ARM targets, link with libgcc.a.
+
+2002-01-02 Chris Demetriou <cgd@broadcom.com>
+
+ * ld-mips-elf/empic1-ln.d: New file to test basic linking of
+ R_MIPS_GNU_REL_HI16 and R_MIPS_GNU_REL_LO16 relocations.
+ * ld-mips-elf/empic1-lp.d: Likewise.
+ * ld-mips-elf/empic1-mn.d: Likewise.
+ * ld-mips-elf/empic1-mp.d: Likewise.
+ * ld-mips-elf/empic1-sn.d: Likewise.
+ * ld-mips-elf/empic1-sp.d: Likewise.
+ * ld-mips-elf/empic1-ref.s: Likewise.
+ * ld-mips-elf/empic1-space.s: Likewise.
+ * ld-mips-elf/empic1-tgt.s: Likewise.
+ * ld-mips-elf/empic2-fwd-0.d: New file to test
+ R_MIPS_GNU_REL_HI16 and R_MIPS_GNU_REL_LO16 relocation edge
+ cases.
+ * ld-mips-elf/empic2-fwd-1.d: Likewise.
+ * ld-mips-elf/empic2-rev-0.d: Likewise.
+ * ld-mips-elf/empic2-rev-1.d: Likewise.
+ * ld-mips-elf/empic2-ref.s: Likewise.
+ * ld-mips-elf/empic2-space.s: Likewise.
+ * ld-mips-elf/empic2-fwd-tgt.s: Likewise.
+ * ld-mips-elf/empic2-rev-tgt.s: Likewise.
+ * ld-mips-elf/mips-elf.exp: New file to run MIPS 32-bit ELF
+ tests (including those above).
+
+2001-11-30 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfvers/vers.exp (build_vers_lib): Preserve the library
+ order.
+
+2001-11-29 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfvers/vers.exp (build_vers_lib): Support linking against
+ more than one libraries.
+ Add "vers20a" and "vers20" tests for common symbols.
+
+ * ld-elfvers/vers20.c: New.
+ * ld-elfvers/vers20.dsym: New.
+ * ld-elfvers/vers20.map: New.
+ * ld-elfvers/vers20.ver: New.
+ * ld-elfvers/vers20a.ver: New.
+
+2001-11-19 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfvsb/define.s: Mark all global lables as object.
+
+ * ld-elfvsb/hidden0.d: Match large section number.
+ * ld-elfvsb/hidden1.d: Likewise.
+ * ld-elfvsb/internal0.d: Likewise.
+ * ld-elfvsb/internal1.d: Likewise.
+ * ld-elfvsb/protected0.d: Likewise.
+ * ld-elfvsb/protected1.d: Likewise.
+
+ * ld-elfvsb/hidden0.d: Change NOTYPE to OBJECT.
+ * ld-elfvsb/internal0.d: Likewise.
+ * ld-elfvsb/protected0.d: Likewise.
+
+2001-11-15 H.J. Lu <hjl@gnu.org>
+
+ * ld-sh/ld-r-1.d: Updated.
+
+2001-11-14 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * ld-bootstrap/bootstrap.exp: Only scan tail of executable for
+ PE targets.
+
+2001-11-12 Donn Terry <donnte@microsoft.com>
+
+ * ld-bootstrap/bootstrap.exp: Only compare the tail end of the two
+ binary files produced in order to avoid date stamp present in PE
+ binaries.
+
+2001-11-11 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-mmix/sec-5.d (Sections): Add whitespace missing in commit.
+
+2001-11-09 H.J. Lu <hjl@gnu.org>
+
+ * ld-discard/discard.exp: New. Test ld discard.
+ * ld-discard/discard.ld: Likewise.
+ * ld-discard/exit.s: Likewise.
+ * ld-discard/extern.d: Likewise.
+ * ld-discard/extern.s: Likewise.
+ * ld-discard/start.d: Likewise.
+ * ld-discard/start.s: Likewise.
+ * ld-discard/static.d: Likewise.
+ * ld-discard/static.s: Likewise.
+
+2001-11-02 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfvsb/elfvsb.exp: Add the "ld -r" test.
+
+ * ld-elfvsb/hidden0.d: New.
+ * ld-elfvsb/hidden1.d: New.
+ * ld-elfvsb/internal0.d: New.
+ * ld-elfvsb/internal1.d: New.
+ * ld-elfvsb/protected0.d: New.
+ * ld-elfvsb/protected1.d: New.
+ * ld-elfvsb/undef.s: New.
+ * ld-elfvsb/undef.s: New.
+
+2001-11-02 NIIBE Yutaka <gniibe@m17n.org>
+
+ * ld-sh/sh.exp: Have its own start.s for linux.
+
+2001-10-31 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-mmix/locdo-1.d: Prune character dump part.
+ * ld-mmix/local7m.d, ld-mmix/loc4.d, ld-mmix/loc4m.d,
+ ld-mmix/loc1.d, ld-mmix/bspec1m.d, ld-mmix/bspec2m.d,
+ ld-mmix/b-nosym.d, ld-mmix/b-fixo2.d, ld-mmix/b-loc64k.d,
+ ld-mmix/undef-3m.d, ld-mmix/locto.s, ld-mmix/loct.s,
+ ld-mmix/local3m.d, ld-mmix/local1m.d, ld-mmix/loc6m.d,
+ ld-mmix/loc2.s, ld-mmix/loc1.s, ld-mmix/gregldo1.s,
+ ld-mmix/dloc1.s, ld-mmix/b-widec3.s, ld-mmix/b-nosym.s: Remove
+ unnecessary empty lines.
+
+2001-10-30 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-mmix: New testsuite directory.
+
+2001-10-14 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-sh/sub2l-1.d, ld-sh/shared-1.d, ld-sh/weak1.d: Only run on
+ sh*-*-elf.
+
+ * lib/ld-lib.exp (run_dump_test): Fix typo: asflags(), not asflags{}.
+
+ * ld-sh/rd-sh.exp: New framework file.
+ * ld-sh/ld-r-1.d, ld-sh/ldr1.s, ld-sh/ldr2.s, ld-sh/shared-1.d,
+ ld-sh/weak1.s, ld-sh/weak1.d, ld-sh/sub2l.s, ld-sh/sub2l-1.d: New
+ test files.
+
+2001-09-29 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-linkonce/linkonce.exp: New file.
+ * ld-linkonce/x.s, ld-linkonce/y.s, ld-linkonce/zeroeh.ld,
+ ld-linkonce/zeroehl32.d: New test.
+
+2001-09-25 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfweak/dso.dsym: Updated for alpha.
+ * ld-elfweak/dsodata.dsym: Likewise.
+ * ld-elfweak/strong.sym: Likewise.
+ * ld-elfweak/strongcomm.sym: Likewise.
+ * ld-elfweak/strongdata.sym: Likewise.
+
+2001-09-15 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * lib/ld-lib.exp (run_dump_test): Handle new option
+ "objcopy_linked_file". Return after failing, if errors were
+ expected but none were found.
+ (slurp_options): Support underscores in option names.
+
+2001-09-14 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfweak/bar.c: Updated.
+ * ld-elfweak/bar1a.c: Likewise.
+ * ld-elfweak/main.c: Likewise.
+ * ld-elfweak/main1.c: Likewise.
+ * ld-elfweak/elfweak.exp: Likewise.
+ * ld-elfweak/weakdata.dsym: Updated.
+
+2001-09-11 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfweak/elfweak.exp (build_lib): Take a list of object
+ files.
+ (build_exec): Likewise.
+ Add more tests and make some xfail.
+
+ * ld-elfweak/dso.dsym: Support symbol versioning.
+ * ld-elfweak/dsow.dsym: Likewise.
+
+ * ld-elfweak/main1.c: New.
+ * ld-elfweak/bar1a.c: Likewise.
+ * ld-elfweak/bar1b.c: Likewise.
+ * ld-elfweak/bar1c.c: Likewise.
+ * ld-elfweak/foo1a.c: Likewise.
+ * ld-elfweak/foo1b.c: Likewise.
+ * ld-elfweak/dsodata.dsym: Likewise.
+ * ld-elfweak/dsowdata.dsym: Likewise.
+ * ld-elfweak/weakdata.dsym: Likewise.
+ * ld-elfweak/strongcomm.sym: Likewise.
+ * ld-elfweak/strongdata.sym: Likewise.
+ * ld-elfweak/weakdata.dat: Likewise.
+ * ld-elfweak/strongdata.dat: Likewise.
+
+2001-09-10 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfweak/elfweak.exp: New.
+ * ld-elfweak/bar.c: Likewise.
+ * ld-elfweak/foo.c: Likewise.
+ * ld-elfweak/main.c: Likewise.
+ * ld-elfweak/dso.dsym: Likewise.
+ * ld-elfweak/dsow.dsym: Likewise.
+ * ld-elfweak/strong.sym: Likewise.
+ * ld-elfweak/strong.dat: Likewise.
+ * ld-elfweak/weak.dat: Likewise.
+
+2001-08-27 Alan Modra <amodra@bigpond.net.au>
+ Linus Nordberg <linus@swox.se>
+
+ * ld-checks/checks.exp: .lcomm is incompatible with ppc coff.
+ * ld-scripts/cross1.t: Add .toc section.
+ * ld-scripts/cross2.t: Likewise.
+ * ld-scripts/phdrs.exp: powerpc64 is 64 bit.
+ * ld-srec/srec.exp: xfail powerpc64
+
+2001-08-21 John David Anglin <dave@hiauly1.hia.nrc.ca>
+
+ * ld-selective/selective.exp: Return if target is `vax-*-ultrix*'.
+ Continue with other tests when there is a compilation error.
+
+2001-08-01 Loren J. Rittle <ljrittle@acm.org>
+
+ * ld-cdtest/cdtest-nrv.dat: New file.
+ * ld-cdtest/cdtest.exp: Do not require any exception support
+ library. Check results against NRV.
+
+2001-08-01 Loren J. Rittle <ljrittle@acm.org>
+
+ * ld-srec/srec.exp: Do not require any exception support
+ library.
+
+2001-07-27 H.J. Lu <hjl@gnu.org>
+
+ * ld-selective/selective.exp: Fix the error in the last change.
+
+2001-07-24 Loren J. Rittle <ljrittle@acm.org>
+
+ * ld-selective/selective.exp: Support g++ V3 ABI (along side
+ the old ABI). Make comparisons against normalized (to
+ V3-style) demangled nm output.
+
+2001-07-24 Alan Modra <amodra@bigpond.net.au>
+
+ * config/default.exp (ld_nm): Add "nmflags" arg.
+ * lib/ld-lib.exp (default_ld_nm): Likewise.
+ * ld-empic/empic.exp: Adjust call to ld_nm.
+ * ld-scripts/defined.exp: Likewise.
+ * ld-scripts/script.exp: Likewise.
+ * ld-scripts/sizeof.exp: Likewise.
+ * ld-selective/selective.exp: Likewise.
+ * ld-sh/sh.exp: Likewise.
+
+2001-07-12 H.J. Lu <hjl@gnu.org>
+
+ * ld-selective/selective.exp: Mark selective1, selective2,
+ selective4 and selective5 xfail on alpha*-*.
+
+2001-06-13 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * config/default.exp (AS, GASP, OBJDUMP, NM, NMFLAGS, OBJCOPY,
+ OBJCOPYFLAGS, READELF, READELFFLAGS, LD, LDFLAGS): Provide
+ default.
+
+ * lib/ld-lib.exp (run_dump_test): Import from gas testsuite. Add
+ new options "ld", "source", "xfail", "target", "notarget" and
+ "error". Support the runtest_file_p "*.exp=testname" feature.
+ (slurp_options, regexp_diff, file_contents, verbose_eval): Import
+ from gas testsuite.
+
+2001-06-12 Martin Schwidefsky <schwidefsky@de.ibm.com>
+
+ * testsuite/ld-undefined/undefined.exp: Correct setup_xfail rule.
+
+2001-06-06 H.J. Lu <hjl@gnu.org>
+
+ * ld-bootstrap/bootstrap.exp: Rebuild tmpdir/ld2 with tmpdir/ld3
+ on Linux/mips.
+
+ * ld-elfvers/vers.exp: Also run on Linux/mips.
+ * ld-elfvsb/elfvsb.exp: Likewise.
+ * ld-shared/shared.exp: Likewise.
+
+ * ld-selective/selective.exp: Mark selective2, selective3,
+ selective4 and selective5 xfail on Linux/mips.
+
+ * ld-shared/main.c: Skip invalid -Bsymbolic tests on Linux/mips.
+
+ * symbolic.dat: Remove invalid -Bsymbolic tests on Linux/mips.
+
+ * ld-srec/srec.exp: Add Linux/mips to xfail.
+
+2001-06-06 Martin Schwidefsky <schwidefsky@de.ibm.com>
+
+ * ld-undefined/undefined.exp: Add a setup_xfail line for a test
+ that will always fail on s/390.
+
+2001-05-28 kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-sh/sh.exp: For sh-*-linux-gnu target add a start address for
+ the text section.
+
+2001-05-25 Alan Modra <amodra@one.net.au>
+
+ * ld-elfvers/vers.exp: Replace linuxoldld with linux*oldld and
+ linuxaout with linux*aout.
+
+2001-05-24 H.J. Lu <hjl@gnu.org>
+
+ * ld-scripts/phdrs.exp: Add sparc64 to 64 bit platform.
+
+2001-05-18 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfvers/vers.exp: Revert the last change.
+
+ * ld-elfvers/vers2.ver: Put back "tmpdir/" the version
+ references.
+ * ld-elfvers/vers3.ver: Likewise.
+ * ld-elfvers/vers6.ver: Likewise.
+ * ld-elfvers/vers18.ver: Likewise.
+
+2001-05-17 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfvers/vers.exp: Pass "-rpath .:$tmpdir" to "vers19".
+
+ * ld-elfvers/vers1.ver: Remove "tmpdir/" from the version
+ definition.
+ * ld-elfvers/vers2.ver: Likewise.
+ * ld-elfvers/vers3.ver: Likewise.
+ * ld-elfvers/vers4a.ver: Likewise.
+ * ld-elfvers/vers6.ver: Likewise.
+ * ld-elfvers/vers7a.ver: Likewise.
+ * ld-elfvers/vers8.ver: Likewise.
+ * ld-elfvers/vers9.ver: Likewise.
+ * ld-elfvers/vers15.ver: Likewise.
+ * ld-elfvers/vers16a.ver: Likewise.
+ * ld-elfvers/vers17.ver: Likewise.
+ * ld-elfvers/vers18.ver: Likewise.
+
+2001-05-03 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfvers/vers19.ver: Expect vers17.so instead of
+ *tmpdir/vers17.so.
+
+2001-05-01 Andreas Jaeger <aj@suse.de>, Andreas Schwab <schwab@suse.de>
+
+ * ld-scripts/phdrs.exp: Fix regexp, s390x is 64 bit platform.
+
+ * ld-scripts/phdrs.t: Use startaddress that's greater than any
+ MAXPAGESIZE used.
+
+2001-04-29 H.J. Lu <hjl@gnu.org>
+
+ * ld-shared/symbolic.dat: New.
+
+ * ld-shared/shared.exp: Also check -Bsymbolic.
+
+2001-04-28 Andreas Jaeger <aj@suse.de>
+
+ * ld-scripts/phdrs.exp: x86-64 is a 64 bit ELF platform, handle it
+ special.
+
+2001-04-01 David O'Brien <obrien@FreeBSD.org>
+ * ld-undefined/undefined.exp: XFAIL on FreeBSD/i386 for the usual (even
+ though it doesn't use DWARF2 yet (but its output is identical).
+
+2001-04-01 David O'Brien <obrien@FreeBSD.org>
+
+ * ld-selective/selective.exp: Use -O with gcc rather than -O2.
+ This optimization level is buggy on some platforms, and this test
+ is not intended to test compiler optimizations.
+
+2001-03-06 DJ Delorie <dj@redhat.com>
+
+ * ld-scripts/cross2.t: Support any type of text/data sections, not
+ just the canonical ones.
+
+2001-02-28 Matt Hiller <hiller@redhat.com>
+
+ * ld-scripts/crossref.exp: Initialize flags to [big_or_little_endian].
+ * ld-undefined/undefined.exp: Ditto, and include $flags in ld
+ invocations.
+ * lib/ld-lib.exp (big_or_little_endian): Recognize -EB, -eb, -EL
+ and -el.
+ (is_endian_output_format): New function.
+ (default_ld_link): Set flags to [big_or_little_endian] only if ld
+ is being invoked such that the output format being used is of
+ known endianness.
+ (default_ld_simple_link): Ditto.
+
+2001-02-22 Timothy Wall <twall@cygnus.com>
+
+ * ld-bootstrap/bootstrap.exp: Exclude ia64 flavor from
+ AIX-specific test.
+
+2001-02-14 H.J. Lu <hjl@gnu.org>
+
+ * ld-bootstrap/bootstrap.exp: Rebuild tmpdir/ld2 with tmpdir/ld3
+ for -static on ia64.
+
+ * ld-checks/checks.exp: Don't run on ia64-*-elf* nor
+ ia64-*-linux*.
+
+ * ld-elfvers/vers.exp: Also run ia64-*-elf* and ia64-*-linux*.
+
+ * ld-elfvsb/elfvsb.exp: Use i?86-*-*. Also run on ia64-*-linux*.
+ Set up expected failures for ia64-*-linux*.
+ * ld-shared/shared.exp: Likewise.
+
+2001-02-08 Stephane Carrez <Stephane.Carrez@worldnet.fr>
+
+ * ld-srec/srec.exp (run_srec_test): m6811 code has references
+ to soft registers, define them with --defsym.
+ * ld-selective/selective.exp: Likewise.
+
+2000-01-23 Alan Modra <alan@spri.levels.unisa.edu.au>
+
+ * ld-srec/sr3.cc (__rethrow): New.
+
+2001-01-14 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-sh/sh.exp: Use --oformat srec, not -oformat srec.
+
+2001-01-03 Philip Blundell <pb@futuretv.com>
+
+ * ld-elfvsb/elfvsb.exp: Run test on Linux/Alpha.
+ * ld-shared/shared.exp: Likewise.
+
+2001-01-01 Philip Blundell <philb@gnu.org>
+
+ * ld-undefined/weak-undef.exp: New test.
+ * ld-undefined/weak-undef.s, ld-undefined/weak-undef.t: Supporting
+ files for above.
+
+ * ld-elfvers/vers.exp: Run test on Linux/ARM.
+ * ld-elfvsb/elfvsb.exp: Likewise.
+ * ld-shared/shared.exp: Likewise.
+
+2000-12-31 Nick Clifton <nickc@redhat.com>
+
+ * ld-srec/srec.exp: Use --oformat instead of -oformat.
+
+2000-12-09 Nick Clifton <nickc@redhat.com>
+
+ * ld-selective/selective.exp: Link in libgcc when target is v850.
+
+ * ld-srec/srec.exp: Expect the srec_test to fail for ARM targets
+ because the -oformat linker command switch cannot be used.
+
+2000-11-06 Alan Modra <alan@linuxcare.com.au>
+
+ * ld-elfvsb/main.c (PROTECTED_CHECK): Include stdio.h.
+ (main): Prune unused args.
+
+2000-10-29 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-selective/selective.exp <no CXX>: Fix typo for argument to
+ "untested".
+
+2000-10-19 H.J. Lu (hjl@gnu.org)
+
+ * ld-elfvsb/elfvsb.exp (visibility_run): Set expected failures
+ for Linux/PPC.
+ * ld-shared/shared.exp: Likewise.
+
+2000-10-09 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-selective/selective.exp: Rearrange to be table-driven.
+
+2000-10-07 Alan Modra <alan@linuxcare.com.au>
+
+ * ld-scripts/phdrs.exp: hppa*64*-*-* is 64-bit ELF too.
+
+2000-10-02 Alan Modra <alan@linuxcare.com.au>
+
+ * ld-scripts/weak.exp: Don't set $global$ for hppa-elf any more.
+ * ld-scripts/crossref.exp: Ditto.
+
+2000-09-29 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-selective/5.cc: New test.
+ * ld-selective/selective.exp: Run it as xfailed.
+
+ * ld-selective/4.cc: Correct spelling of "lose".
+
+2000-09-05 Alan Modra <alan@linuxcare.com.au>
+
+ * ld-selective/selective.exp: Remove the xfails for hppa.
+
+2000-08-30 Alexandre Oliva <aoliva@redhat.com>
+
+ * ld-undefined/undefined.exp (hppa*64*-*-*, mn10300-*-elf,
+ sh-*-*): With dwarf-2, `undefined function' can't pass.
+
+2000-08-03 H.J. Lu (hjl@gnu.org)
+
+ * ld-bootstrap/bootstrap.exp: Add strip.
+
+2000-07-24 H.J. Lu (hjl@gnu.org)
+
+ * ld-elfvsb/elfvsb.exp: Add -g to $CC to get the location of
+ the undefined reference.
+
+2000-07-16 H.J. Lu (hjl@gnu.org)
+
+ * ld-elfvsb/elfvsb.exp (support_protected): New variable. Check
+ and set to "yes" if the protected visibility is expected to
+ pass.
+ (visibility_run): Set expected to fail for the "protected"
+ and "protected_undef_def" tests only if $support_protected is
+ "no".
+
+ * ld-elfvsb/main.c (PROTECTED_CHECK): Check for the protected
+ visibility support if defined.
+
+2000-07-15 H.J. Lu (hjl@gnu.org)
+
+ * ld-elfvsb/elfvsb.exp (visibility_run): Set expected failure
+ for "protected_undef_def".
+
+ * ld-elfvsb/main.c: Don't define HIDDEN_UNDEF_TEST when
+ PROTECTED_WEAK_TEST is defined.
+ Don't define PROTECTED_UNDEF_TEST when PROTECTED_WEAK_TEST is
+ defined.
+ Define PROTECTED_TEST when PROTECTED_UNDEF_TEST is defined.
+
+ * ld-elfvsb/sh1.c (visibility): Mark protected only if
+ PROTECTED_TEST, PROTECTED_UNDEF_TEST or PROTECTED_WEAK_TEST
+ is defined.
+ (visibility_var): Likewise.
+
+2000-07-10 Alan Modra <alan@linuxcare.com.au>
+
+ * ld-srec/srec.exp: xfail hppa.
+
+ * ld-scripts/weak.exp: Define $global$ for hppa.
+
+ * ld-scripts/crossref.exp: Fix string quoting.
+
+2000-06-05 H.J. Lu (hjl@gnu.org)
+
+ * lib/ld-lib.exp (default_ld_link): Redirect the linker output
+ to link_output and make it global.
+
+ * ld-elfvsb/elfvsb.exp (visibility_test): Add "hidden_undef",
+ "hidden_undef_def", "hidden_weak", "protected_undef",
+ "protected_undef_def" and "protected_weak".
+ (visibility_run): Likewise.
+ * ld-elfvsb/main.c: Likewise.
+ * ld-elfvsb/sh1.c: Likewise.
+ * ld-elfvsb/sh2.c: Likewise.
+
+ * ld-elfvsb/elfvsb.dat: Updated.
+
+2000-05-21 H.J. Lu (hjl@gnu.org)
+
+ * ld-elfvsb/main.c (main_visibility_check): Fix the protected
+ visibility test.
+
+2000-05-13 H.J. Lu (hjl@gnu.org)
+
+ * lib/ld-lib.exp (default_ld_link): Redirect the linker output
+ to link_output and make it global.
+
+ * ld-elfvsb/elf-offset.ld: New. ELF visibility fearture
+ tests.
+ * ld-elfvsb/elfvsb.dat: Likewise.
+ * ld-elfvsb/elfvsb.exp: Likewise.
+ * ld-elfvsb/main.c: Likewise.
+ * ld-elfvsb/sh1.c: Likewise.
+ * ld-elfvsb/sh2.c: Likewise.
+
+Fri Apr 21 15:16:07 2000 Richard Henderson <rth@cygnus.com>
+
+ * ld-scripts/phdrs.exp: IA-64 is 64-bit ELF too.
+
+2000-04-12 Alan Modra <alan@linuxcare.com.au>
+
+ * ld-selective/3.cc (_start): Add cheat for gcc-2.95.2 failure.
+
+ * ld-selective/selective.exp (test4): Test for presence of
+ foo__1B, not absence. Also check for foo__1A and _start.
+ White space changes throughout file.
+
+2000-03-13 Nick Clifton <nickc@cygnus.com>
+
+ * ld-scripts/phdrs.t: Discard all unexpected sections.
+
+2000-02-27 H.J. Lu (hjl@gnu.org)
+
+ * lib/ld-lib.exp (default_ld_link): Added "$LIBS" to libs.
+
+1999-11-01 Nick Clifton <nickc@cygnus.com>
+
+ * ld-selective/selective.exp: Fix test to disable these checks for
+ PE based targets.
+
+1999-10-29 Catherine Moore <clm@cygnus.com>
+
+ * ld-selective/selective.exp: Remove test6.
+ * ld-selective/5.cc: Delete.
+
+1999-10-28 Scott Bambrough <scottb@netwinder.org>
+
+ * ld-srec/srec.exp: Setup expected failures for
+ srec tests on ARM Linux.
+
+1999-09-17 Alan Modra <alan@spri.levels.unisa.edu.au>
+
+ * ld-shared/shared.exp: xfail linux*libc1 shared (non PIC, load
+ offset) test.
+
+1999-09-12 Ian Lance Taylor <ian@zembu.com>
+
+ * ld-scripts/script.exp: Add --image-base 0 for PE targets.
+
+1999-08-17 H.J. Lu <hjl@gnu.org>
+
+ * ld-cdtest/cdtest-foo.cc (Foo::init_foo): Use "%ld" for sizeof.
+
+1999-08-09 Jakub Jelinek <jj@ultra.linux.cz>
+
+ * ld-elfvers/vers.exp: Run tests on sparc*-*-linux*.
+ * ld-shared/shared.exp: Likewise.
+
+1999-07-28 Nick Clifton <nickc@cygnus.com>
+
+ * lib/ld-lib.exp (proc big_or_little_endian): New proc.
+ Determine if a big endian or little endian output format hass
+ been selected by any of the multilib options, and if so return
+ a suitable command line option for the linker/assembler.
+ (proc default_ld_link): Include the result of proc
+ big_or_little_endian on the command line to the linker.
+ (proc ld_simple_link): Include the result of proc
+ big_or_little_endian on the command line to the linker.
+ (proc default_ld_compile): Append multilib flags to compiler
+ switches.
+ (proc default_ld_assemble): Include the result of proc
+ big_or_little_endian on the command line to the linker.
+
+1999-07-21 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfvers/vers1.c: Add missing prototypes and include
+ <stdio.h> if necessary.
+ * ld-elfvers/vers15.c: Likewise.
+ * ld-elfvers/vers19.c: Likewise.
+ * ld-elfvers/vers2.c: Likewise.
+ * ld-elfvers/vers3.c: Likewise.
+ * ld-elfvers/vers4.c: Likewise.
+ * ld-elfvers/vers6.c: Likewise.
+ * ld-elfvers/vers7.c: Likewise.
+ * ld-elfvers/vers9.c: Likewise.
+ * ld-shared/main.c: Likewise.
+ * ld-srec/sr3.cc (Foo::Foo): Remove arg name.
+
+Thu Jul 15 18:00:30 1999 Mark P. Mitchell <mark@codesourcery.com>
+
+ * ld-undefined/undefined.exp: XFAIL on IRIX6 for the usual as
+ with other DWARF2 targets.
+
+1999-07-13 Nick Clifton <nickc@cygnus.com>
+
+ * ld-undefined/undefined.exp: Do not expect arm toolchains to fail
+ the undefined line test.
+
+1999-07-10 Ian Lance Taylor <ian@zembu.com>
+
+ * ld-elfvers/vers.exp: Use -rpath in new vers19 test.
+
+1999-07-07 Ian Lance Taylor <ian@zembu.com>
+
+ * ld-elfvers/vers.exp: Add new tests vers17 to vers19.
+ * ld-elfvers/{vers17.*, vers18.*, vers19.*}: New files.
+
+1999-06-13 Ian Lance Taylor <ian@zembu.com>
+
+ * ld-checks/asm.s: Use a symbol name for .lcomm.
+ * ld-checks/checks.exp: Use different names for the two tests.
+ Don't add extra text when invoking fail.
+
+1999-06-12 Ian Lance Taylor <ian@zembu.com>
+
+ * ld-scripts/phdrs.exp: Change target check from "*-*-linuxaout*"
+ to "*-*-linux*aout*".
+ * ld-scripts/weak.exp: Likewise.
+ * ld-shared/shared.exp: Likewise. Simplify condition a bit.
+
+Wed Jun 9 12:02:33 1999 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
+
+ * ld-cdtest/cdtest-main.cc: Avoid `implicit int' warning.
+ * ld-shared/sh1.c: Fix typo.
+
+1999-06-04 H.J. Lu <hjl@gnu.org>
+
+ * lib/ld-lib.exp (default_ld_nm): Clear nm_output first if
+ necessary.
+
+1999-05-17 Nick Clifton <nickc@cygnus.com>
+
+ * ld-undefined/undefined.exp: Add xfail for mcore-elf.
+
+1999-05-11 DJ Delorie <dj@cygnus.com>
+
+ * ld-srec/srec.exp: Do not run tests for PE based ports.
+
+1999-03-05 Nick Clifton <nickc@cygnus.com>
+
+ * ld-selective/selective.exp: Do not run tests for COFF or PE
+ based ports.
+
+1999-02-17 Nick Clifton <nickc@cygnus.com>
+
+ * ld-undefined/undefined.exp: Add expected failures for StrongARM
+ targets.
+
+ * ld-srec/srec.exp: Add expected failures for StrongARM targets.
+
+ * ld-selective/selective.exp: Add expected failure for ARM-COFF
+ targets.
+
+1999-02-16 Nick Clifton <nickc@cygnus.com>
+
+ * ld-checks/asm.s: Use .long instead of .word.
+ Replace custom section names with .text, .data and .bss.
+ * ld-checks/script: Replace custom section names with .text, .data
+ and .bss.
+ * ld-checks/checks.exp: Replace custom section names with .text,
+ .data and .bss.
+
+1999-02-11 Nick Clifton <nickc@cygnus.com>
+
+ * ld-checks: New directory: Tests for the linker's
+ --check-sections option.
+ * ld-checks/checks.exp: New file.
+ * ld-checks/script: Bogus linker script.
+ * ld-checks/asm.s: Simple test assembler file.
+
+Tue Feb 2 19:15:02 1999 Catherine Moore <clm@cygnus.com>
+
+ * ld-selective/selective.exp: Disable test for unsupported
+ targets. Change tests to check for absence of symbols instead
+ of address zero.
+
+Mon Jan 18 03:44:52 1999 Ian Lance Taylor <ian@cygnus.com>
+
+ * config/default.exp (get_link_files): Quote target_triplet and CC
+ when invoking shell.
+ (get_target_emul): Likewise.
+
+1999-01-03 Ken Raeburn <raeburn@cygnus.com>
+
+ * config/default.exp (get_link_files, get_target_emul): New procs;
+ run shell commands to extract information from configure.host and
+ configure.tgt in the source tree.
+ (top level): Use them to get information needed to run tests, if
+ not otherwise provided.
+
+ * ld-shared/elf-offset.ld: New file. Builds a shared library, but
+ gives non-zero addresses for memory region.
+ * ld-shared/shared.exp: Run the non-PIC non-AIX test again using
+ the new linker script.
+
+Tue Dec 8 22:56:05 1998 Geoff Keating <geoffk@ozemail.com.au>
+
+ * ld-srec/srec.exp: Delete xfails for PPC Linux targets,
+ newer glibc lets link succeed.
+
+Sun Dec 6 12:59:37 1998 H.J. Lu <hjl@gnu.org>
+
+ * ld-elfvers/vers1.c: Add missing return types and values.
+ * ld-elfvers/vers2.c: Likewise.
+ * ld-elfvers/vers3.c: Likewise.
+ * ld-elfvers/vers4.c: Likewise.
+ * ld-elfvers/vers5.c: Likewise.
+ * ld-elfvers/vers6.c: Likewise.
+ * ld-elfvers/vers7.c: Likewise.
+ * ld-elfvers/vers9.c: Likewise.
+ * ld-elfvers/vers15.c: Likewise.
+
+Fri Oct 23 16:28:29 1998 Catherine Moore <clm@cygnus.com>
+
+ * ld-selective: New directory with new files to test
+ selective linking.
+
+ * lib/ld-lib.exp (ld_nm): Strip leading underscore from $name.
+
+Sun Oct 4 22:17:05 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-elfvers/vers16.dsym: Work correctly on a system without
+ versioned system libraries.
+
+Mon Sep 28 21:31:12 1998 Richard Henderson <rth@cygnus.com>
+
+ * ld-elfvers/vers.exp: Run tests on alpha-linux.
+ * ld-elfvers/*.sym, ld-elfvers/*.dsym: Adjust patters to match
+ Alpha's use of st_other.
+
+1998-09-27 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * ld-elfvers/vers.exp (vers16, vers16a): New tests.
+ * ld-elfvers/{vers16.*, vers16a.*}: New files.
+
+Thu Sep 17 17:18:19 1998 Nick Clifton <nickc@cygnus.com>
+
+ * ld-undefined/undefined.exp: Make undefined line test be an xfail
+ for arm/thunb elf toolchains.
+
+Wed Sep 9 14:10:15 1998 Nick Clifton <nickc@cygnus.com>
+
+ * ld-undefined/undefined.exp: change test for elf/dwarf2 targets.
+
+ * ld-srec/srec.exp: Arm-elf now passes this test.
+
+Wed Aug 19 11:59:19 1998 Nick Clifton <nickc@cygnus.com>
+
+ * ld-srec/srec.exp: Add arm/thumb-elf expected failures.
+
+Thu Aug 13 12:41:58 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-bootstrap/bootstrap.exp: Don't run the --static bootstrap
+ test if we don't have a static libbfd.a.
+
+Wed Aug 12 15:19:35 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ Based on patch from H.J. Lu <hjl@gnu.org>:
+ * ld-srec/srec.exp: Add xfails for Alpha ELF targets.
+
+Mon Aug 10 15:42:20 1998 Richard Henderson <rth@cygnus.com>
+
+ * ld-scripts/weak.t (.text, .data): Focus data to be used.
+ (/DISCARD/): All the rest.
+ * ld-scripts/weak1.s, ld-scripts/weak2.s: Put stuff in .data.
+
+Fri Jul 24 18:37:17 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * config/default.exp: Create tmpdir/gas subdirectory, add a
+ symlink to as-new, and set gcc_gas_flag variable.
+ * lib/ld-lib.exp (default_ld_compile): If the compiler appears to
+ be gcc, use gcc_gas_flag when compiling.
+
+Thu Jul 23 12:23:29 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-elfvers/vers.exp: Just check for i?86 rather than checking
+ for i386, i486, and i586.
+ (objdump_versionstuff): If we can't find the line, dump the file.
+
+Fri Jul 3 00:27:41 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-scripts/phdrs.exp: Run test on *-*-eabi*.
+ * ld-scripts/weak.exp: Likewise.
+
+Wed Jul 1 10:51:46 1998 Nick Clifton <nickc@cygnus.com>
+
+ * ld-srec/srec.exp: Add xfail for v850.
+
+ * ld-undefined/undefined.exp: arm and thumb PE toolchains now pass
+ these tests.
+
+Fri Jun 19 17:12:52 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-scripts/weak.exp: New test.
+ * ld-scripts/weak.t: New file.
+ * ld-scripts/weak1.s: New file.
+ * ld-scripts/weak2.s: New file.
+
+Tue Jun 16 12:40:38 1998 Geoff Keating <geoffk@ozemail.com.au>
+
+ * ld-elfvers/vers.exp: Run tests on powerpc ELF targets.
+ * ld-shared/shared.exp: Likewise.
+ * ld-elfvers/vers1.dsym: Allow for .sdata.
+ * ld-srec/srec.exp: Add setup_xfails for PowerPC Linux.
+
+Fri May 29 15:02:50 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-srec/srec.exp: Add xfails for powerpc*-*-eabi.
+ (run_srec_test): On mn10200, define __truncsipsi2_do_d2.
+ * ld-srec/sr1.c (__main): Change return type to void.
+ * ld-srec/sr3.cc (__main): Likewise.
+ (__builtin_delete, __builtin_new): Likewise.
+ (__get_dynamic_handler_chain): Return 0.
+ (__get_eh_context): Likewise.
+
+Thu May 21 15:21:33 1998 Nick Clifton <nickc@cygnus.com>
+
+ * ld-undefined/undefined.exp: Add support for thumb-pe target.
+ * ld-srec/srec.exp: Add support for arm-pe and thumb-pe targets.
+
+Mon May 4 17:54:20 1998 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * ld-shared/shared.exp: Remove setup_xfails for m68k-linux.
+
+Mon May 4 17:12:06 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-shared/main.c (shlib_overriddencall2): New function.
+ (main): Call shlib_shlibcall2.
+ * ld-shared/sh1.c (shlib_shlibcall2): New function.
+ (shlib_overriddencall2): New function.
+ * ld-shared/shared.dat: Add output line for new test.
+ * ld-shared/sun4.dat: Likewise.
+
+ * ld-srec/sr3.cc (__get_eh_context): New function.
+
+Tue Apr 7 12:50:17 1998 Manfred Hollstein <manfred@s-direktnet.de>
+
+ * ld-cdtest/cdtest-foo.h (class Foo): Declare len to be static to
+ avoid compiler warning.
+ * ld-srec/sr3.cc (class Foo): Likewise.
+
+Tue Feb 10 16:42:40 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-srec/sr3.cc (__get_dynamic_handler_chain): New function.
+
+Mon Feb 2 14:17:48 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-scripts/phdrs.exp: Adjust phdrs_regexp for a 64 bit target.
+
+Thu Dec 18 11:13:28 1997 Nick Clifton <nickc@cygnus.com>
+
+ * ld-srec/srec.exp: Duplicated Arm patch for Thumb targets.
+
+Tue Dec 2 09:50:19 1997 Nick Clifton <nickc@cygnus.com>
+
+ * ld-srec/srec.exp: Applied patch from Tony.Thompson@arm.com which
+ fixes ARM tests.
+
+Mon Dec 1 16:12:05 1997 Nick Clifton <nickc@cygnus.com>
+
+ * ld-srec/srec.exp: Add expected failures of tests 1 and 2 for ARM
+ coff targets.
+
+Wed Nov 12 14:18:31 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-cdtest/cdtest-foo.h (class Foo): Declare len to be int to
+ avoid compiler warning.
+ * ld-srec/sr3.cc (class Foo): Likewise.
+
+Mon Nov 10 14:25:43 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * lib/ld-lib.exp (default_ld_simple_link): Permit the linker to
+ have any name when looking for entry symbol warnings.
+
+ * ld-srec/sr3.cc (__eh_pc): Define.
+
+Mon Oct 20 14:36:39 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-srec/sr3.cc: Add definitions for terminate, __terminate, and
+ __throw, since the current g++ expects them to be defined.
+
+Fri Oct 3 12:24:03 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-elfvers/vers.exp (objdump_emptyverstuff): Accept the output
+ file if the string libc appears in it.
+ (objdump_versionstuff): Accept unexpected lines in the output
+ file. Compare lines using string match.
+ * ld-elfvers/vers6.ver: Permit any value in the vna_other field.
+
+Tue Aug 12 16:01:22 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-scripts/crossref.exp: Correct string quoting.
+
+Sat Aug 9 00:56:03 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * config/default.exp: Change ld, as, nm and strip from .new to
+ -new. Load ld-lib.exp rather than ld.exp.
+ * ld-bootstrap/bootstrap.exp: Use ld-new rather than ld.new.
+ * lib/ld-lib.exp: Rename from lib/ld.exp, for the benefit of
+ DejaGnu changes.
+
+Thu Jun 26 12:07:03 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-elfvers/vers.exp: Use egrep rather than grep when looking for
+ an alternation. From Greg Margo <gmargo@dl.com>.
+
+Wed Jun 25 12:47:22 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * ld-shared/shared.exp: Add setup_xfail for m68k-linux on tests
+ with non PIC shared libraries.
+
+Fri Jun 6 17:35:47 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-elfvers/vers6.ver: Update for recent elflink.h patch to
+ version handling.
+
+Wed Jun 4 12:06:48 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-srec/srec.exp: Define ___get_dynamic_handler_chain as well.
+
+Fri May 30 12:21:39 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-srec/srec.exp: Define __get_dynamic_handler_chain when
+ linking.
+
+Mon May 12 11:17:55 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * config/default.exp: Use $base_dir rather than $objdir when
+ setting ld. From John David Anglin <dave@hiauly1.hia.nrc.ca>.
+
+Fri Apr 25 09:07:00 1997 Jeffrey A Law (law@cygnus.com)
+
+ * ld-srec/srec.exp: Define various out of line prologue/epilogue
+ functions for the mn10200 to avoid needing libgcc.a.
+
+Wed Mar 26 13:56:10 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-srec/srec.exp: Don't expect failures on mips*-*-elf*.
+
+Mon Mar 17 19:27:13 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-elfvers/vers.exp: Don't run on SunOS or AIX.
+
+Wed Mar 12 21:44:19 1997 Eric Youngdale <eric@andante.jic.com>
+
+ * ld-elfvers/vers.exp, *: New tests for symbol versioning.
+ * config/default.exp: Set ar and strip.
+
+Fri Feb 7 16:47:02 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * ld-bootstrap/bootstrap.exp: Use prune_warnings instead of
+ prune_system_crud.
+ * ld-cdtest/cdtest.exp: Ditto.
+ * ld-scripts/crossref.exp: Ditto.
+ * ld-sh/sh.exp: Ditto.
+ * ld-shared/shared.exp: Ditto.
+ * ld-srec/srec.exp: Ditto.
+ * lib/ld.exp: Ditto.
+
+Wed Jan 29 00:47:29 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * ld-cdtest/cdtest.exp: Put a slash between $srcdir/$subdir.
+ * ld-scripts/script.exp: Ditto.
+ * ld-sh/sh.exp: Ditto.
+ * ld-undefined/undefined.exp: Ditto.
+ * ld-versados/versados.exp: Ditto.
+ * lib/ld.exp: Ditto.
+
+Mon Dec 30 17:08:04 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-scripts/crossref.exp: Fix quoting for --defsym $global$.
+
+Tue Oct 1 15:52:31 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * lib/ld.exp (default_ld_version): Fix for current version
+ printing.
+
+Fri Sep 13 15:51:45 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-scripts/crossref.exp: Define $global$ for hppa-elf.
+
+Thu Aug 8 14:29:32 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-scripts/cross2.t: Map XCOFF sections to .text or .data.
+
+ * lib/ld.exp: Use verbose -log instead of calling both verbose and
+ send_log.
+
+Wed Aug 7 18:00:58 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-scripts/phdrs.exp: New test.
+ * ld-scripts/phdrs.s, ld-scripts/phdrs.t: New files.
+
+Sun Aug 4 21:58:12 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-scripts/crossref.exp: On a29k targets, use --defsym to define
+ V_SPILL and V_FILL.
+
+Thu Aug 1 14:10:27 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-scripts/crossref.exp: New test.
+ * ld-scripts/{cross1.c, cross2.c, cross3.c}: New files.
+ * ld-scripts/{cross1.t, cross2.t}: New files.
+
+Sat Jun 29 13:40:11 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-sh/sh.exp: Fix debugging messages.
+ * ld-sh/sh1.s: Use .align 4.
+
+Wed May 1 16:45:13 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-sh/sh.exp: Use -O when compiling with -mrelax.
+
+Mon Apr 29 10:33:10 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * ld-shared/shared.exp: Run the shared library tests on
+ Linux/m68k.
+
+Fri Apr 5 16:20:55 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-shared/shared.exp: Run the shared library tests on Linux.
+
+Mon Feb 26 12:45:26 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-shared/shared.exp: Don't use -fpic on MIPS targets.
+
+Wed Jan 31 15:09:57 1996 Jeffrey A Law (law@cygnus.com)
+
+ * ld-srec/srec.exp: Add xfails for hppa*-*-*elf*.
+ * ld-undefined/undefined.exp: Likewise.
+
+Fri Jan 26 18:43:03 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-undefined/undefined.exp: ELF targets should now pass the
+ undefined line test.
+
+Thu Jan 25 15:36:13 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-empic/empic.exp: Update for change to MIPS disassembler.
+
+Mon Jan 15 15:05:53 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-bootstrap/bootstrap.exp: Expect failure for mips*-*-irix5*
+ when doing the --static test.
+ * ld-shared/shared.exp: Run tests on mips*-*-irix5*.
+
+Fri Dec 29 12:33:09 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-bootstrap/bootstrap.exp: On AIX, don't pass the -bI option
+ when creating ld-partial.o.
+
+Tue Dec 26 17:37:23 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-srec/srec.exp: If powerpc*-*-eabi*, use --defsym to define
+ __eabi.
+
+Tue Dec 19 18:01:01 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-srec/srec.exp: Add setup_xfails for XCOFF targets.
+
+Fri Dec 15 16:36:17 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-srec/srec.exp: On a29k targets, use --defsym to define
+ V_SPILL and V_FILL.
+ * ld-srec/sr1.c (V_SPILL, V_FILL): Remove definitions.
+ * ld-srec/sr3.cc: Likewise.
+
+ * ld-srec/srec.exp: Remove i960 COFF setup_xfail.
+
+Sat Dec 2 01:20:31 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-srec/srec.exp: Don't use [] in setup_xfail expressions.
+
+Fri Dec 1 13:18:18 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-srec/srec.exp: Add setup_xfails for MIPS ELF targets.
+
+Wed Nov 29 13:01:10 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-srec/srec.exp: Add setup_xfail for i960 COFF targets.
+
+Mon Nov 27 14:36:11 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-srec/srec.exp: Add setup_xfail calls for i[345]86-*-aout*.
+
+ * ld-srec/sr1.c (V_SPILL, V_FILL): Define.
+ * ld-srec/sr3.cc: Likewise.
+
+Tue Nov 21 16:05:53 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-empic/empic.exp: Update for changes in objdump output.
+
+Wed Nov 15 17:42:48 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-srec/srec.exp: New tests.
+ * ld-srec/sr1.c, ld-srec/sr2.c, ld-srec/sr3.cc: New files.
+ * lib/ld.exp (ld_simple_link): Discard warnings about not being
+ able to find the entry symbol.
+
+Tue Nov 14 20:03:54 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-sh/sh2.c (__main): Define.
+
+Mon Nov 6 14:39:18 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-empic/empic.exp: Accept a . in the address symbol.
+
+ * ld-shared/shared.exp: Run tests on rs6000*-*-aix* and
+ powerpc*-*-aix*. Add code to create appropriate exports files,
+ and pass appropriate compilation flags, and test against
+ appropriate expected output.
+ * ld-shared/xcoff.dat: New file.
+ * ld-shared/main.c: Put #ifndef XCOFF_TEST around tests that can
+ not be linked using XCOFF. Use shlib_shlibvar1 as a sample
+ function pointer, rather than shlib_mainvar.
+ * ld-shared/sh1.c: Likewise.
+ * ld-shared/shared.dat: Update for change from using shlib_mainvar
+ to using shlib_shlibvar1.
+ * ld-shared/sun4.dat: Likewise.
+
+Sat Oct 28 01:54:25 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-scripts/script.t: Put .pr in .text, and .rw in .data, for
+ convenience when testing XCOFF.
+
+Thu Oct 26 22:53:17 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-bootstrap/bootstrap.exp: On AIX, pass -bI/lib/syscalls.exp
+ along with --static.
+
+ * ld-scripts/script.s: Make symbols global.
+
+Fri Oct 20 12:22:16 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-undefined/undefined.exp: Add setup_xfails for arm*-*-pe*.
+
+Fri Sep 29 11:06:10 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-undefined/undefined.exp: Use -e when invoking the linker, to
+ prevent the SunOS linker from trying to create a shared library.
+
+Thu Sep 28 12:37:14 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-shared/shared.exp: Run the tests on sparc*-*-sunos4*. Add
+ appropriate modifications and setup_xfails.
+ * ld-shared/sun4.dat: New file.
+
+Mon Sep 18 14:12:56 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * lib/ld.exp (default_ld_version): Call prune_system_crud.
+ (default_ld_relocate, default_ld_link): Likewise.
+ (default_ld_simple_link, default_ld_compile): Likewise.
+ (default_ld_assemble, default_ld_nm): Likewise.
+
+Fri Sep 8 17:15:38 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-cdtest/cdtest.exp: If the compiler does not exist, mark the
+ tests as untested rather than unresolved.
+
+Wed Aug 23 10:46:38 1995 Ian Lance Taylor (ian@cygnus.com)
+
+ * ld-sh/sh.exp: Call prune_system_crud on the output of cmp.
+
+Tue Aug 15 17:35:35 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-scripts/script.exp: Split script verification into a proc.
+ Add simple test of MRI script.
+ * ld-scripts/scriptm.t: New file.
+
+Wed Jul 26 11:38:58 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-sh/sh.exp: Mark `SH confirm relaxing' test unresolved when
+ appropriate.
+
+Mon Jul 24 15:34:31 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * config/default.exp: Define objcopy if it is not defined.
+ * ld-sh/*: New tests for SH relaxing.
+
+ * ld-empic/empic.exp: If $CC does not exist, call untested rather
+ than unresolved.
+
+Thu Jul 20 15:09:26 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-undefined/undefined.exp: If $CC does not exist, mark the
+ tests as untested rather than unresolved. Clear ELF xfails for
+ mips*, not just mips.
+
+Tue Jul 18 12:00:41 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-undefined/undefined.exp: Add setup_xfail for sh-*-* for
+ undefined line test.
+
+Fri Jul 14 13:07:48 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-undefined/undefined.exp: New test, to check reporting of
+ undefined symbols.
+ * ld-undefined/undefined.c: New file.
+
+Mon Jul 10 11:13:39 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-versados/versados.exp: If a test fails, report it correctly:
+ don't try to run the next test, and don't report a pass as well as
+ a fail.
+
+Mon Jul 3 14:26:37 1995 Steve Chamberlain <sac@slash.cygnus.com>
+
+ * versados/(t1,t2).ld: End in newlines.
+
+Mon May 22 20:19:38 1995 Ken Raeburn <raeburn@cujo.cygnus.com>
+
+ * lib/ld.exp (default_ld_compile): If cc argument is multiple
+ words, use only the first when trying to verify the availability
+ of the compiler.
+
+Mon Feb 6 11:46:49 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * ld-scripts/defined.t: Mention .data and .bss explicitly.
+
+Tue Jan 24 14:51:48 1995 Ian Lance Taylor <ian@sanguine.cygnus.com>
+
+ * ld-bootstrap/bootstrap.exp: If not in the ld build directory,
+ call untested for each test, rather than ignoring it. If one test
+ fails, go on to the next one instead of returning.
+ * ld-cdtest/cdtest.exp: If compilations fail, mark tests as
+ unresolved.
+ * ld-empic/empic.exp: Likewise. Also, always pass the same test
+ name to pass or fail.
+ * ld-shared/shared.exp: Likewise. Also, always run all tests.
+ * ld-scripts/defined.exp: If as or nm fail, mark test as
+ unresolved. Always pass the same test name to pass or fail.
+ * ld-scripts/script.exp: Likewise.
+ * ld-scripts/sizeof.exp: Likewise.
+
+Wed Jan 11 11:48:31 1995 Ian Lance Taylor <ian@sanguine.cygnus.com>
+
+ * ld-scripts/sizeof.exp: New test, based on bug report from
+ anders.blomdell@control.lth.se.
+ * ld-scripts/sizeof.s: New file.
+ * ld-scripts/sizeof.t: New file.
+
+Wed Jan 4 18:56:27 1995 Ian Lance Taylor <ian@sanguine.cygnus.com>
+
+ * lib/ld.exp: Use [which $ld] rather than [file exists $ld] to see
+ if the linker exists.
+
+Wed Dec 14 16:39:03 1994 Ken Raeburn <raeburn@cujo.cygnus.com>
+
+ * lib/ld.exp (prune_system_crud): Define if not already defined,
+ in case the user isn't using the newest DejaGnu version that we
+ haven't released to the net yet.
+
+Fri Dec 2 14:17:02 1994 Ian Lance Taylor <ian@rtl.cygnus.com>
+
+ * config/default.exp: Define objdump if it is not defined.
+ * ld-empic/*: New tests to test -membedded-pic code.
+
+Mon Nov 28 11:24:36 1994 Ian Lance Taylor <ian@sanguine.cygnus.com>
+
+ * ld-bootstrap/bootstrap.exp: Pass cmp output through
+ prune_system_crud.
+ * ld-cdtest/cdtest.exp: Pass diff output through
+ prune_system_crud.
+ * ld-shared/shared.exp: Likewise.
+
+ * config/default.exp: Remove unused and useless proc ld_load.
+
+Sun Oct 30 13:02:34 1994 Ian Lance Taylor <ian@sanguine.cygnus.com>
+
+ * lib/ld.exp (default_ld_compile): Remove the output file before
+ compiling.
+
+ * ld-shared/shared.exp: Move common test code into a procedure.
+ Add tests for compiling the non shared code PIC.
+ * ld-shared/main.c (main): Call main_called, and print the result.
+ * ld-shared/shared.dat: Adjust accordingly.
+
+Thu Oct 27 17:30:12 1994 Ian Lance Taylor <ian@sanguine.cygnus.com>
+
+ * ld-shared: New directory, with new files to test generating ELF
+ shared libraries.
+
+ * lib/ld.exp (default_ld_compile): If the compilation worked, but
+ no object file was created, check to see if the compiler foolishly
+ ignored the -o switch when compiling, and move the resulting
+ object if it did.
+
+Thu Sep 29 12:36:51 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ * VMS does not permits `.' in directory names. Renamed
+ ld.bootstrap to ld-bootstrap, ld.cdtest to ld-cdtest, and
+ ld.scripts to ld-scripts.
+
+Wed Sep 28 12:18:54 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ * config/default.exp: Set variables as and nm. Create tmpdir if
+ it does not already exist.
+ * ld.bootstrap/bootstrap.exp: Don't create tmpdir here.
+ * ld.cdtest/cdtest.exp: Likewise.
+ * ld.scripts/defined.exp: Likewise. Also, don't set as and nm
+ here. Change perror for no variables found to fail.
+ * ld.scripts/script.exp: New test.
+ * ld.scripts/script.t, ld.scripts/script.s: New files.
+
+Tue Sep 27 14:59:51 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
+
+ * ld.scripts: New directory.
+ * ld.scripts/defined.exp, ld.scripts/defined.s: New files.
+ * ld.scripts/defined.t: New file.
+ * lib/ld.exp (default_ld_simple_link): New function.
+ (default_ld_assemble, default_ld_nm): New functions.
+ * config/default.exp: Rename from unix-ld.exp.
+ (ld_simple_link, ld_assemble, ld_nm): New functions.
+
+ * config/unix-ld.exp: Set ld using findfile.
+ * lib/ld.exp (default_ld_relocate): Return a value. Change format
+ of log messages.
+ (default_ld_compile): Likewise.
+ (default_ld_link): Likewise. Also, don't include $BFDLIB and
+ $LIBIBERTY in link.
+ * ld.bootstrap/bootstrap.exp: Rewrite.
+ * ld.cdtest/cdtest.exp: Rewrite.
+ * ld.cdtest/cdtest-foo.cc: Update from top level ld directory.
+ * ld.cdtest/cdtest-foo.h: Likewise.
+ * ld.cdtest/cdtest-main.cc: Likewise.
+
+Fri May 27 09:35:04 1994 Ken Raeburn (raeburn@cygnus.com)
+
+ * ld.cdtest/cdtest.exp: Don't look for $result before it's
+ defined.
+
+Tue May 17 15:06:49 1994 Bill Cox (bill@rtl.cygnus.com)
+
+ * ld.bootstrap/bootstrap.exp, lib/ld.exp: Replace error proc
+ calls with perror calls.
+
+Wed May 11 16:47:46 1994 Ken Raeburn (raeburn@rtl.cygnus.com)
+
+ * ld.cdtest/cdtest-bar.cc: Renamed from cdtest-func.cc.
+ * ld.cdtest/cdtest.exp: Adjusted.
+
+Fri Jan 28 13:25:41 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
+
+ * lib/ld.exp (simple_diff): Indicate failure if files have
+ different numbers of lines. Don't muck with $differences to avoid
+ indicating a pass, just return.
+
+ * ld.cdtest/{cdtest-foo.h,cdtest-foo.cc,cdtest-main.cc}:
+ Fix test case to be valid ANSI C++. Don't require use of header
+ files, so "../gcc/xgcc -B../gcc/" can be used for CXX.
+ * ld.cdtest/cdtest.exp: Combine "rm" lines. Add some
+ commentary on things that are still broken with this test case.
+
+Fri Sep 10 09:58:23 1993 Jeffrey Wheat (cassidy@cygnus.com)
+
+ * ld.cdtest/cdtest.exp: Added CXXFLAGS to compile stage.
+
+Thu Aug 12 16:05:37 1993 Jeffrey Wheat (cassidy@cygnus.com)
+
+ * lib/ld.exp: add compiler and linker support
+ * config/unix-ld.exp: add compiler and linker support
+ * ld.bootstrap/bootstrap.exp: fixed to do partial links
+ * ld.cdtest/cdtest.exp: constructor/destructor testscase
+
+Wed Aug 4 21:00:18 1993 Jeffrey Wheat (cassidy@cygnus.com)
+
+ * lib/ld.exp: new file
+ * config/unix-ld.exp: new file
+ * ld.bootstrap/bootstrap.exp: new file
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/binutils-2.21/ld/testsuite/config/default.exp b/binutils-2.21/ld/testsuite/config/default.exp
new file mode 100644
index 0000000..043a885
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/config/default.exp
@@ -0,0 +1,278 @@
+# Basic expect script for LD Regression Tests
+# Copyright 1993, 1994, 1995, 1997, 1998, 1999, 2001, 2003, 2005, 2007, 2009
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# This file 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by Jeffrey Wheat (cassidy@cygnus.com)
+#
+
+if ![info exists ld] then {
+ set ld [findfile $base_dir/ld-new $base_dir/ld-new [transform ld]]
+}
+
+if ![info exists as] then {
+ set as [findfile $base_dir/../gas/as-new $base_dir/../gas/as-new [transform as]]
+}
+
+if ![info exists nm] then {
+ set nm [findfile $base_dir/../binutils/nm-new $base_dir/../binutils/nm-new [transform nm]]
+}
+
+if ![info exists objdump] then {
+ set objdump [findfile $base_dir/../binutils/objdump]
+}
+
+if ![info exists objcopy] then {
+ set objcopy [findfile $base_dir/../binutils/objcopy]
+}
+
+if ![info exists ar] then {
+ set ar [findfile $base_dir/../binutils/ar]
+}
+
+if ![info exists strip] then {
+ set strip [findfile $base_dir/../binutils/strip-new $base_dir/../binutils/strip-new [transform strip]]
+}
+
+remote_exec host "mkdir -p tmpdir"
+
+# Make a symlink from tmpdir/as to the assembler in the build tree, so
+# that we can use a -B option to gcc to force it to use the newly
+# built assembler.
+if {![file isdirectory tmpdir/gas]} then {
+ catch "exec mkdir tmpdir/gas" status
+ catch "exec ln -s ../../../gas/as-new tmpdir/gas/as" status
+}
+set gcc_gas_flag "-B[pwd]/tmpdir/gas/"
+
+# Make a symlink from tmpdir/ld to the linker in the build tree, so
+# that we can use a -B option to gcc to force it to use the newly
+# built linker.
+if {![file isdirectory tmpdir/ld]} then {
+ catch "exec mkdir tmpdir/ld" status
+ catch "exec ln -s ../../ld-new tmpdir/ld/ld" status
+}
+set gcc_ld_flag "-B[pwd]/tmpdir/ld/"
+
+# load the linker path
+if {[file exists tmpdir/libpath.exp]} {
+ load_lib tmpdir/libpath.exp
+
+ foreach dir $libpath {
+ set gcc_ld_flag "$gcc_ld_flag -L$dir"
+ }
+}
+
+# The "make check" target in the Makefile passes in
+# "CC=$(CC_FOR_TARGET)". But, if the user invokes runtest directly
+# (as when testing an installed linker), these flags may not be set.
+if {![info exists CC]} {
+ set CC [find_gcc]
+}
+if {![info exists CFLAGS]} {
+ set CFLAGS "-g -O2"
+}
+if {![info exists CXX]} {
+ set CXX [find_g++]
+}
+if {![info exists CXXFLAGS]} {
+ set CXXFLAGS ""
+}
+
+# The mips64-*-linux-gnu compiler defaults to the N32 ABI after
+# installed, but to the O32 ABI in the build tree, because of some
+# specs-file hacks. Make sure we use an ABI that is compatible with
+# the one we expect.
+if {[istarget mips64*-*-linux*] &&
+ (![board_info [target_info name] exists multilib_flags] ||
+ ![string match "*-mabi" [board_info [target_info name] multilib_flags]])
+ } {
+ append gcc_gas_flag " -mabi=n32"
+}
+
+# load the utility procedures
+load_lib ld-lib.exp
+
+proc get_link_files {varname} {
+ global $varname
+ global target_triplet
+ global srcdir
+ global CC
+ if ![info exists $varname] {
+ #configure.host returns variables that can be substituted into
+ #makefile rules, with embedded shell variable expansions.
+ #make wants $$shell_var, we want $shell_var ...
+ set cmd "host='$target_triplet' && . $srcdir/../configure.host && sed -e 's,\\\$\\\$,\$,g' <<EOF\n\$$varname\nEOF"
+ set status [catch "exec sh -c [list $cmd]" result]
+ if $status { error "Error getting native link files: $result" }
+ set cmd "CC='$CC' && eval echo \"$result\""
+ set status [catch "exec sh -c [list $cmd]" result]
+ if $status { error "Error getting native link files: $result" }
+ set $varname $result
+ send_log "$varname = $result\n"
+ }
+}
+
+proc get_target_emul {} {
+ global target_triplet
+ global srcdir
+ set status [catch "exec sh -c \"targ='$target_triplet' && . $srcdir/../configure.tgt && echo \\\$targ_emul\"" result]
+ if $status { error "Error getting emulation name: $result" }
+ return $result
+}
+
+if [isnative] {
+ foreach x {HOSTING_CRT0 HOSTING_LIBS} {
+ get_link_files $x
+ }
+} else {
+ foreach x {HOSTING_CRT0 HOSTING_LIBS} { set $x "" }
+}
+if ![info exists HOSTING_EMU] { set HOSTING_EMU "-m [get_target_emul]" }
+
+#
+# ld_version -- extract and print the version number of ld compiler (GCC)
+#
+proc ld_version {} {
+ global ld
+ default_ld_version $ld
+}
+
+#
+# ld_exit -- just a stub for ld
+#
+proc ld_exit {} {
+}
+
+#
+# ld_start
+# relink the linker
+#
+proc ld_start { ld target } {
+ #
+}
+
+#
+# ld_relocate
+# link an object using relocation
+#
+proc ld_relocate { ld target objects } {
+ default_ld_relocate $ld $target $objects
+}
+
+#
+# ld_link
+# link a program using ld
+#
+proc ld_link { ld target objects } {
+ default_ld_link $ld $target $objects
+}
+
+#
+# ld_simple_link
+# link a program using ld, without including any libraries
+#
+proc ld_simple_link { ld target objects } {
+ default_ld_simple_link $ld $target $objects
+}
+
+#
+# ld_compile
+# compile an object using $cc
+#
+proc ld_compile { cc source object } {
+ default_ld_compile $cc $source $object
+}
+
+#
+# ld_assemble
+# assemble a file
+#
+proc ld_assemble { as source object } {
+ default_ld_assemble $as $source $object
+}
+
+#
+# ld_nm
+# run nm on a file
+#
+proc ld_nm { nm nmflags object } {
+ default_ld_nm $nm $nmflags $object
+}
+
+#
+# ld_exec
+# execute ithe target
+#
+proc ld_exec { target output } {
+ default_ld_exec $target $output
+}
+
+# From gas-defs.exp, to support run_dump_test.
+if ![info exists AS] then {
+ set AS $as
+}
+
+if ![info exists GASP] then {
+ set GASP [findfile $base_dir/../gas/gasp-new $base_dir/../gas/gasp-new [transform gasp]]
+}
+
+if ![info exists ASFLAGS] then {
+ set ASFLAGS ""
+}
+
+if ![info exists OBJDUMP] then {
+ set OBJDUMP $objdump
+}
+
+if ![info exists OBJDUMPFLAGS] then {
+ set OBJDUMPFLAGS {}
+}
+
+if ![info exists NM] then {
+ set NM $nm
+}
+
+if ![info exists NMFLAGS] then {
+ set NMFLAGS {}
+}
+
+if ![info exists OBJCOPY] then {
+ set OBJCOPY $objcopy
+}
+
+if ![info exists OBJCOPYFLAGS] then {
+ set OBJCOPYFLAGS {}
+}
+
+if ![info exists READELF] then {
+ set READELF [findfile $base_dir/../binutils/readelf]
+}
+
+if ![info exists READELFFLAGS] then {
+ set READELFFLAGS {}
+}
+
+if ![info exists LD] then {
+ set LD [findfile $base_dir/ld-new ./ld-new [transform ld]]
+}
+
+if ![info exists LDFLAGS] then {
+ set LDFLAGS {}
+}
diff --git a/binutils-2.21/ld/testsuite/ld-alpha/align.s b/binutils-2.21/ld/testsuite/ld-alpha/align.s
new file mode 100644
index 0000000..6c48ba9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-alpha/align.s
@@ -0,0 +1,9 @@
+ /* Force .data aligned to 4K, so that .got very likely gets
+ placed at 0x1200131d0. */
+ .data
+ .balign 4096
+
+ /* Force .text aligned to 4K, so it very likely gets placed at
+ 0x120001000. */
+ .text
+ .balign 4096
diff --git a/binutils-2.21/ld/testsuite/ld-alpha/alpha.exp b/binutils-2.21/ld/testsuite/ld-alpha/alpha.exp
new file mode 100644
index 0000000..dce2f45
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-alpha/alpha.exp
@@ -0,0 +1,64 @@
+# Expect script for ld-alpha tests
+# Copyright (C) 2003, 2005, 2007 Free Software Foundation
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# Test Alpha ELF linking; all types of relocs. This tests the
+# assembler and tools like objdump as well as the linker.
+
+if { !([istarget "alpha*-*-elf*"]
+ || [istarget "alpha*-*-linux*"]) } {
+ return
+}
+
+# List contains test-items with 3 items followed by 2 lists:
+# 0:name 1:ld options 2:assembler options
+# 3:filenames of assembler files 4: action and options. 5: name of output file
+
+# Actions:
+# objdump: Apply objdump options on result. Compare with regex (last arg).
+# nm: Apply nm options on result. Compare with regex (last arg).
+# readelf: Apply readelf options on result. Compare with regex (last arg).
+
+set alphatests {
+ {"TLS -fpic -shared" "-shared -melf64alpha"
+ "" {align.s tlspic1.s tlspic2.s}
+ {{readelf -WSsrl tlspic.rd} {objdump -drj.text tlspic.dd}
+ {objdump -sj.got tlspic.sd} {objdump -sj.tdata tlspic.td}}
+ "libtlspic.so"}
+ {"Helper shared library" "-shared -melf64alpha"
+ "" {tlslib.s} {} "libtlslib.so"}
+ {"TLS -fpic and -fno-pic exec"
+ "-melf64alpha tmpdir/libtlslib.so" "" {align.s tlsbinpic.s tlsbin.s}
+ {{readelf -WSsrl tlsbin.rd} {objdump -drj.text tlsbin.dd}
+ {objdump -sj.got tlsbin.sd} {objdump -sj.tdata tlsbin.td}}
+ "tlsbin"}
+ {"TLS -fpic and -fno-pic exec -relax"
+ "-relax -melf64alpha tmpdir/libtlslib.so" "" {align.s tlsbinpic.s tlsbin.s}
+ {{readelf -WSsrl tlsbinr.rd} {objdump -drj.text tlsbinr.dd}
+ {objdump -sj.got tlsbinr.sd}}
+ "tlsbinr"}
+}
+
+# Not implemented yet
+# {"TLS in debug sections" "-melf64alpha"
+# "" {tlsg.s}
+# {{objdump -sj.debug_foobar tlsg.sd}} "tlsg"}
+
+run_ld_link_tests $alphatests
diff --git a/binutils-2.21/ld/testsuite/ld-alpha/tlsbin.dd b/binutils-2.21/ld/testsuite/ld-alpha/tlsbin.dd
new file mode 100644
index 0000000..674ec37
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-alpha/tlsbin.dd
@@ -0,0 +1,62 @@
+#source: align.s
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as:
+#ld: -melf64alpha
+#objdump: -drj.text
+#target: alpha*-*-*
+
+.*: +file format elf64-alpha
+
+Disassembly of section \.text:
+
+0+120001000 <fn2>:
+ 120001000: 02 00 bb 27 ldah gp,2\(t12\)
+ 120001004: c0 82 bd 23 lda gp,-32064\(gp\)
+ 120001008: 3e 15 c2 43 subq sp,0x10,sp
+ 12000100c: 00 00 5e b7 stq ra,0\(sp\)
+ 120001010: 18 80 1d 22 lda a0,-32744\(gp\)
+ 120001014: 08 80 7d a7 ldq t12,-32760\(gp\)
+ 120001018: 00 40 5b 6b jsr ra,\(t12\),12000101c <.*>
+ 12000101c: 02 00 ba 27 ldah gp,2\(ra\)
+ 120001020: a4 82 bd 23 lda gp,-32092\(gp\)
+ 120001024: 38 80 1d 22 lda a0,-32712\(gp\)
+ 120001028: 08 80 7d a7 ldq t12,-32760\(gp\)
+ 12000102c: 00 40 5b 6b jsr ra,\(t12\),120001030 <.*>
+ 120001030: 02 00 ba 27 ldah gp,2\(ra\)
+ 120001034: 90 82 bd 23 lda gp,-32112\(gp\)
+ 120001038: 28 80 1d 22 lda a0,-32728\(gp\)
+ 12000103c: 08 80 7d a7 ldq t12,-32760\(gp\)
+ 120001040: 00 40 5b 6b jsr ra,\(t12\),120001044 <.*>
+ 120001044: 02 00 ba 27 ldah gp,2\(ra\)
+ 120001048: 7c 82 bd 23 lda gp,-32132\(gp\)
+ 12000104c: 21 00 20 20 lda t0,33\(v0\)
+ 120001050: 28 80 1d 22 lda a0,-32728\(gp\)
+ 120001054: 08 80 7d a7 ldq t12,-32760\(gp\)
+ 120001058: 00 40 5b 6b jsr ra,\(t12\),12000105c <.*>
+ 12000105c: 02 00 ba 27 ldah gp,2\(ra\)
+ 120001060: 64 82 bd 23 lda gp,-32156\(gp\)
+ 120001064: 40 00 20 20 lda t0,64\(v0\)
+ 120001068: 46 00 20 20 lda t0,70\(v0\)
+ 12000106c: 00 00 20 24 ldah t0,0\(v0\)
+ 120001070: 4b 00 21 20 lda t0,75\(t0\)
+ 120001074: 10 80 3d a4 ldq t0,-32752\(gp\)
+ 120001078: 01 04 20 40 addq t0,v0,t0
+ 12000107c: 00 00 5e a7 ldq ra,0\(sp\)
+ 120001080: 1e 14 c2 43 addq sp,0x10,sp
+ 120001084: 01 80 fa 6b ret
+
+0+120001088 <_start>:
+ 120001088: 9e 00 00 00 rduniq
+ 12000108c: 09 04 e0 47 mov v0,s0
+ 120001090: 00 80 3d a4 ldq t0,-32768\(gp\)
+ 120001094: 01 04 29 40 addq t0,s0,t0
+ 120001098: 48 80 3d a4 ldq t0,-32696\(gp\)
+ 12000109c: 01 04 29 40 addq t0,s0,t0
+ 1200010a0: 10 00 29 20 lda t0,16\(s0\)
+ 1200010a4: 96 00 29 20 lda t0,150\(s0\)
+ 1200010a8: 00 00 29 24 ldah t0,0\(s0\)
+ 1200010ac: 57 00 21 20 lda t0,87\(t0\)
+ 1200010b0: 50 80 3d a4 ldq t0,-32688\(gp\)
+ 1200010b4: 01 04 29 40 addq t0,s0,t0
+ 1200010b8: 01 80 fa 6b ret
diff --git a/binutils-2.21/ld/testsuite/ld-alpha/tlsbin.rd b/binutils-2.21/ld/testsuite/ld-alpha/tlsbin.rd
new file mode 100644
index 0000000..44633ac
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-alpha/tlsbin.rd
@@ -0,0 +1,133 @@
+#source: align.s
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as:
+#ld: -melf64alpha
+#readelf: -WSsrl
+#target: alpha*-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ \[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 00 +0 +0 +0
+ +\[[ 0-9]+\] .interp +.*
+ +\[[ 0-9]+\] .hash +.*
+ +\[[ 0-9]+\] .dynsym +.*
+ +\[[ 0-9]+\] .dynstr +.*
+ +\[[ 0-9]+\] .rela.dyn +.*
+ +\[[ 0-9]+\] .rela.plt +.*
+ +\[[ 0-9]+\] .text +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +AX +0 +0 4096
+ +\[[ 0-9]+\] .eh_frame +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +A +0 +0 +8
+ +\[[ 0-9]+\] .tdata +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 WAT +0 +0 +4
+ +\[[ 0-9]+\] .tbss +NOBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 WAT +0 +0 +1
+ +\[[ 0-9]+\] .dynamic +DYNAMIC +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 10 +WA +4 +0 +8
+ +\[[ 0-9]+\] .plt +.*
+ +\[[ 0-9]+\] .got +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +WA +0 +0 +8
+ +\[[ 0-9]+\] .shstrtab +.*
+ +\[[ 0-9]+\] .symtab +.*
+ +\[[ 0-9]+\] .strtab +.*
+#...
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x[0-9a-f]+
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ PHDR +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x0+150 R E 0x8
+ INTERP +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ R +0x1
+.*Requesting program interpreter.*
+ LOAD +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ R E 0x10000
+ LOAD +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ RWE 0x10000
+ DYNAMIC +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ RW +0x8
+ TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ R +0x4
+#...
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 3 entries:
+ +Offset +Info +Type +Symbol's Value Symbol's Name \+ Addend
+[0-9a-f]+ [0-9a-f]+ R_ALPHA_TPREL64 +0+ sG2 \+ 0
+[0-9a-f]+ [0-9a-f]+ R_ALPHA_DTPMOD64 +0+ sG1 \+ 0
+[0-9a-f]+ [0-9a-f]+ R_ALPHA_DTPREL64 +0+ sG1 \+ 0
+
+Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
+ +Offset +Info +Type +Symbol's Value Symbol's Name \+ Addend
+[0-9a-f]+ [0-9a-f]+ R_ALPHA_JMP_SLOT +[0-9a-f]+ __tls_get_addr \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+[0-9 ]+: [0-9a-f]+ +0 +NOTYPE +LOCAL +DEFAULT +UND *
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +UND sG2
+[0-9 ]+: [0-9a-f]+ +0 +FUNC +GLOBAL +DEFAULT +UND __tls_get_addr
+[0-9 ]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +UND sG1
+[0-9 ]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+[0-9 ]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+[0-9 ]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND
+[0-9 ]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +1
+[0-9 ]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +2
+[0-9 ]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +3
+[0-9 ]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +4
+[0-9 ]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +5
+[0-9 ]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +6
+[0-9 ]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +7
+[0-9 ]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +8
+[0-9 ]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +9
+[0-9 ]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +10
+[0-9 ]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +11
+[0-9 ]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +12
+[0-9 ]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +13
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +9 sl1
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +9 sl2
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +9 sl3
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +9 sl4
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +9 sl5
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +9 sl6
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +9 sl7
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +9 sl8
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +10 bl1
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +10 bl2
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +10 bl3
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +10 bl4
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +10 bl5
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +10 bl6
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +10 bl7
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +10 bl8
+[0-9 ]+: [0-9a-f]+ +0 +OBJECT +LOCAL +DEFAULT +11 _DYNAMIC
+[0-9 ]+: [0-9a-f]+ +0 +OBJECT +LOCAL +DEFAULT +12 _PROCEDURE_LINKAGE_TABLE_
+[0-9 ]+: [0-9a-f]+ +0 +OBJECT +LOCAL +DEFAULT +13 _GLOBAL_OFFSET_TABLE_
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +9 sg8
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +10 bg8
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +10 bg6
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +10 bg3
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +9 sg3
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +9 sh3
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +UND sG2
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +9 sg4
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +9 sg5
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +10 bg5
+[0-9 ]+: [0-9a-f]+ +0 +FUNC +GLOBAL +DEFAULT +UND __tls_get_addr
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +9 sh7
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +9 sh8
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +9 sg1
+[0-9 ]+: [0-9a-f]+ +52 +FUNC +GLOBAL +DEFAULT +7 _start
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +9 sh4
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +10 bg7
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +9 sh5
+[0-9 ]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+[0-9 ]+: [0-9a-f]+ +136 +FUNC +GLOBAL +DEFAULT +\[<other>: 88\] +7 fn2
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +9 sg2
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +UND sG1
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +9 sh1
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +9 sg6
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +9 sg7
+[0-9 ]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+[0-9 ]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +9 sh2
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +9 sh6
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +10 bg2
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +10 bg1
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +10 bg4
diff --git a/binutils-2.21/ld/testsuite/ld-alpha/tlsbin.s b/binutils-2.21/ld/testsuite/ld-alpha/tlsbin.s
new file mode 100644
index 0000000..a772a7e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-alpha/tlsbin.s
@@ -0,0 +1,46 @@
+ .section ".tbss", "awT", @nobits
+ .globl bg1, bg2, bg3, bg4, bg5, bg6, bg7, bg8
+bg1: .space 4
+bg2: .space 4
+bg3: .space 4
+bg4: .space 4
+bg5: .space 4
+bg6: .space 4
+bg7: .space 4
+bg8: .space 4
+bl1: .space 4
+bl2: .space 4
+bl3: .space 4
+bl4: .space 4
+bl5: .space 4
+bl6: .space 4
+bl7: .space 4
+bl8: .space 4
+
+ .text
+ .globl _start
+ .ent _start
+_start:
+ rduniq
+ mov $0, $9
+
+ /* IE */
+ ldq $1, sG2($gp) !gottprel
+ addq $1, $9, $1
+
+ /* IE against global symbol in exec */
+ ldq $1, bl1($gp) !gottprel
+ addq $1, $9, $1
+
+ /* LE */
+ lda $1, sg1($9) !tprel
+ lda $1, bl2+2($9) !tprel
+
+ ldah $1, sh2+3($9) !tprelhi
+ lda $1, sh2+3($1) !tprello
+
+ ldq $1, bl2+4($gp) !gottprel
+ addq $1, $9, $1
+
+ ret
+ .end _start
diff --git a/binutils-2.21/ld/testsuite/ld-alpha/tlsbin.sd b/binutils-2.21/ld/testsuite/ld-alpha/tlsbin.sd
new file mode 100644
index 0000000..1bf0278
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-alpha/tlsbin.sd
@@ -0,0 +1,17 @@
+#source: align.s
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as:
+#ld: -melfalpha
+#objdump: -sj.got
+#target: alpha*-*-*
+
+.*: +file format elf64-alpha
+
+Contents of section .got:
+ [0-9a-f]+ 00000000 00000000 b0120120 01000000 .*
+ [0-9a-f]+ 56000000 00000000 00000000 00000000 .*
+ [0-9a-f]+ 00000000 00000000 01000000 00000000 .*
+ [0-9a-f]+ 00000000 00000000 01000000 00000000 .*
+ [0-9a-f]+ 24000000 00000000 90000000 00000000 .*
+ [0-9a-f]+ 98000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-alpha/tlsbin.td b/binutils-2.21/ld/testsuite/ld-alpha/tlsbin.td
new file mode 100644
index 0000000..8bd7a6c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-alpha/tlsbin.td
@@ -0,0 +1,17 @@
+#source: align.s
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as:
+#ld: -melf64alpha
+#objdump: -sj.tdata
+#target: alpha*-*-*
+
+.*: +file format elf64-alpha
+
+Contents of section .tdata:
+ 1?200110f0 11000000 12000000 13000000 14000000 .*
+ 1?20011100 15000000 16000000 17000000 18000000 .*
+ 1?20011110 41000000 42000000 43000000 44000000 .*
+ 1?20011120 45000000 46000000 47000000 48000000 .*
+ 1?20011130 01010000 02010000 03010000 04010000 .*
+ 1?20011140 05010000 06010000 07010000 08010000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-alpha/tlsbinpic.s b/binutils-2.21/ld/testsuite/ld-alpha/tlsbinpic.s
new file mode 100644
index 0000000..7a94eb1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-alpha/tlsbinpic.s
@@ -0,0 +1,74 @@
+ .section ".tdata", "awT", @progbits
+ .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
+ .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+ .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+sg1: .long 17
+sg2: .long 18
+sg3: .long 19
+sg4: .long 20
+sg5: .long 21
+sg6: .long 22
+sg7: .long 23
+sg8: .long 24
+sl1: .long 65
+sl2: .long 66
+sl3: .long 67
+sl4: .long 68
+sl5: .long 69
+sl6: .long 70
+sl7: .long 71
+sl8: .long 72
+sh1: .long 257
+sh2: .long 258
+sh3: .long 259
+sh4: .long 260
+sh5: .long 261
+sh6: .long 262
+sh7: .long 263
+sh8: .long 264
+
+ .text
+ .globl fn2
+ .ent fn2
+fn2:
+ .frame $sp, 16, $26, 0
+ ldgp $gp, 0($27)
+ subq $sp, 16, $sp
+ stq $26, 0($sp)
+ .prologue 1
+
+ /* GD */
+ lda $16, sG1($gp) !tlsgd!1
+ ldq $27, __tls_get_addr($gp) !literal!1
+ jsr $26, ($27), __tls_get_addr !lituse_tlsgd!1
+ ldgp $gp, 0($26)
+
+ /* GD against local symbol */
+ lda $16, sl2($gp) !tlsgd!2
+ ldq $27, __tls_get_addr($gp) !literal!2
+ jsr $26, ($27), __tls_get_addr !lituse_tlsgd!2
+ ldgp $gp, 0($26)
+
+ /* LD */
+ lda $16, sl1($gp) !tlsldm!3
+ ldq $27, __tls_get_addr($gp) !literal!3
+ jsr $26, ($27), __tls_get_addr !lituse_tlsldm!3
+ ldgp $gp, 0($26)
+ lda $1, sl1+1($0) !dtprel
+
+ /* LD with 4 variables */
+ lda $16, sh1($gp) !tlsldm!4
+ ldq $27, __tls_get_addr($gp) !literal!4
+ jsr $26, ($27), __tls_get_addr !lituse_tlsldm!4
+ ldgp $gp, 0($26)
+ lda $1, sh1($0) !dtprel
+ lda $1, sh2+2($0) !dtprel
+ ldah $1, sh3+3($0) !dtprelhi
+ lda $1, sh3+3($1) !dtprello
+ ldq $1, sh4+10($gp) !gotdtprel
+ addq $1, $0, $1
+
+ ldq $26, 0($sp)
+ addq $sp, 16, $sp
+ ret
+ .end fn2
diff --git a/binutils-2.21/ld/testsuite/ld-alpha/tlsbinr.dd b/binutils-2.21/ld/testsuite/ld-alpha/tlsbinr.dd
new file mode 100644
index 0000000..16d024d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-alpha/tlsbinr.dd
@@ -0,0 +1,62 @@
+#source: align.s
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as:
+#ld: -relax -melf64alpha
+#objdump: -drj.text
+#target: alpha*-*-*
+
+.*: +file format elf64-alpha
+
+Disassembly of section \.text:
+
+0+120001000 <fn2>:
+ 120001000: 02 00 bb 27 ldah gp,2\(t12\)
+ 120001004: 90 82 bd 23 lda gp,-32112\(gp\)
+ 120001008: 3e 15 c2 43 subq sp,0x10,sp
+ 12000100c: 00 00 5e b7 stq ra,0\(sp\)
+ 120001010: 08 80 1d a6 ldq a0,-32760\(gp\)
+ 120001014: 00 00 fe 2f unop
+ 120001018: 9e 00 00 00 rduniq
+ 12000101c: 00 04 00 42 addq a0,v0,v0
+ 120001020: 00 00 fe 2f unop
+ 120001024: 34 00 1f 22 lda a0,52
+ 120001028: 00 00 fe 2f unop
+ 12000102c: 9e 00 00 00 rduniq
+ 120001030: 00 04 00 42 addq a0,v0,v0
+ 120001034: 00 00 fe 2f unop
+ 120001038: 10 00 1f 22 lda a0,16
+ 12000103c: 00 00 fe 2f unop
+ 120001040: 9e 00 00 00 rduniq
+ 120001044: 00 04 00 42 addq a0,v0,v0
+ 120001048: 00 00 fe 2f unop
+ 12000104c: 21 00 20 20 lda t0,33\(v0\)
+ 120001050: 10 00 1f 22 lda a0,16
+ 120001054: 00 00 fe 2f unop
+ 120001058: 9e 00 00 00 rduniq
+ 12000105c: 00 04 00 42 addq a0,v0,v0
+ 120001060: 00 00 fe 2f unop
+ 120001064: 40 00 20 20 lda t0,64\(v0\)
+ 120001068: 46 00 20 20 lda t0,70\(v0\)
+ 12000106c: 00 00 20 24 ldah t0,0\(v0\)
+ 120001070: 4b 00 21 20 lda t0,75\(t0\)
+ 120001074: 56 00 3f 20 lda t0,86
+ 120001078: 01 04 20 40 addq t0,v0,t0
+ 12000107c: 00 00 5e a7 ldq ra,0\(sp\)
+ 120001080: 1e 14 c2 43 addq sp,0x10,sp
+ 120001084: 01 80 fa 6b ret
+
+0000000120001088 <_start>:
+ 120001088: 9e 00 00 00 rduniq
+ 12000108c: 09 04 e0 47 mov v0,s0
+ 120001090: 00 80 3d a4 ldq t0,-32768\(gp\)
+ 120001094: 01 04 29 40 addq t0,s0,t0
+ 120001098: 90 00 3f 20 lda t0,144
+ 12000109c: 01 04 29 40 addq t0,s0,t0
+ 1200010a0: 10 00 29 20 lda t0,16\(s0\)
+ 1200010a4: 96 00 29 20 lda t0,150\(s0\)
+ 1200010a8: 00 00 29 24 ldah t0,0\(s0\)
+ 1200010ac: 57 00 21 20 lda t0,87\(t0\)
+ 1200010b0: 98 00 3f 20 lda t0,152
+ 1200010b4: 01 04 29 40 addq t0,s0,t0
+ 1200010b8: 01 80 fa 6b ret
diff --git a/binutils-2.21/ld/testsuite/ld-alpha/tlsbinr.rd b/binutils-2.21/ld/testsuite/ld-alpha/tlsbinr.rd
new file mode 100644
index 0000000..247957d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-alpha/tlsbinr.rd
@@ -0,0 +1,128 @@
+#source: align.s
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as:
+#ld: -relax -melf64alpha
+#readelf: -WSsrl
+#target: alpha*-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
+ +\[[ 0-9]+\] \.interp +.*
+ +\[[ 0-9]+\] \.hash +.*
+ +\[[ 0-9]+\] \.dynsym +.*
+ +\[[ 0-9]+\] \.dynstr +.*
+ +\[[ 0-9]+\] \.rela\.dyn +.*
+ +\[[ 0-9]+\] \.rela\.plt +.*
+ +\[[ 0-9]+\] \.text +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 0+ +AX +0 +0 4096
+ +\[[ 0-9]+\] \.eh_frame +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +A +0 +0 +8
+ +\[[ 0-9]+\] \.tdata +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 0+ WAT +0 +0 +4
+ +\[[ 0-9]+\] \.tbss +NOBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 0+ WAT +0 +0 +1
+ +\[[ 0-9]+\] \.dynamic +DYNAMIC +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 10 +WA +4 +0 +8
+ +\[[ 0-9]+\] \.plt +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 0+ WAX +0 +0 +16
+ +\[[ 0-9]+\] \.got +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 0+ +WA +0 +0 +8
+ +\[[ 0-9]+\] \.shstrtab +.*
+ +\[[ 0-9]+\] \.symtab +.*
+ +\[[ 0-9]+\] \.strtab +.*
+#...
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x[0-9a-f]+
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +PHDR +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ R E 0x8
+ +INTERP +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ R +0x1
+.*Requesting program interpreter.*
+ +LOAD +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ R E 0x10000
+ +LOAD +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ RWE 0x10000
+ +DYNAMIC +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ RW +0x8
+ +TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ R +0x4
+#...
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 2 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f]+ +0+100000026 R_ALPHA_TPREL64 +0+ sG2 \+ 0
+[0-9a-f]+ +0+400000026 R_ALPHA_TPREL64 +0+ sG1 \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+[0-9 ]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND
+[0-9 ]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG2
+[0-9 ]+: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND __tls_get_addr
+[0-9 ]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+[0-9 ]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG1
+[0-9 ]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+[0-9 ]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+[0-9 ]+: [0-9a-f]+ +0 +NOTYPE +LOCAL +DEFAULT +UND
+[0-9 ]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +1
+[0-9 ]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +2
+[0-9 ]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +3
+[0-9 ]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +4
+[0-9 ]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +5
+[0-9 ]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +6
+[0-9 ]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +7
+[0-9 ]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +8
+[0-9 ]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +9
+[0-9 ]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +10
+[0-9 ]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +11
+[0-9 ]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +12
+[0-9 ]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +13
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +9 sl1
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +9 sl2
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +9 sl3
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +9 sl4
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +9 sl5
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +9 sl6
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +9 sl7
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +9 sl8
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +10 bl1
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +10 bl2
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +10 bl3
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +10 bl4
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +10 bl5
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +10 bl6
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +10 bl7
+[0-9 ]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +10 bl8
+[0-9 ]+: [0-9a-f]+ +0 +OBJECT +LOCAL +DEFAULT +11 _DYNAMIC
+[0-9 ]+: [0-9a-f]+ +0 +OBJECT +LOCAL +DEFAULT +12 _PROCEDURE_LINKAGE_TABLE_
+[0-9 ]+: [0-9a-f]+ +0 +OBJECT +LOCAL +DEFAULT +13 _GLOBAL_OFFSET_TABLE_
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +9 sg8
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +10 bg8
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +10 bg6
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +10 bg3
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +9 sg3
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +9 sh3
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +UND sG2
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +9 sg4
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +9 sg5
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +10 bg5
+[0-9 ]+: [0-9a-f]+ +0 +FUNC +GLOBAL +DEFAULT +UND __tls_get_addr
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +9 sh7
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +9 sh8
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +9 sg1
+[0-9 ]+: [0-9a-f]+ +52 +FUNC +GLOBAL +DEFAULT +7 _start
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +9 sh4
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +10 bg7
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +9 sh5
+[0-9 ]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+[0-9 ]+: [0-9a-f]+ +136 +FUNC +GLOBAL +DEFAULT +\[<other>: 88\] +7 fn2
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +9 sg2
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +UND sG1
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +9 sh1
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +9 sg6
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +9 sg7
+[0-9 ]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+[0-9 ]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +9 sh2
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +9 sh6
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +10 bg2
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +10 bg1
+[0-9 ]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +10 bg4
diff --git a/binutils-2.21/ld/testsuite/ld-alpha/tlsbinr.sd b/binutils-2.21/ld/testsuite/ld-alpha/tlsbinr.sd
new file mode 100644
index 0000000..59e9449
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-alpha/tlsbinr.sd
@@ -0,0 +1,12 @@
+#source: align.s
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as:
+#ld: -relax -melfalpha
+#objdump: -sj.got
+#target: alpha*-*-*
+
+.*: +file format elf64-alpha
+
+Contents of section .got:
+ [0-9a-f]+ 00000000 00000000 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-alpha/tlsg.s b/binutils-2.21/ld/testsuite/ld-alpha/tlsg.s
new file mode 100644
index 0000000..99fb84a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-alpha/tlsg.s
@@ -0,0 +1,14 @@
+ .section .tbss,"awT",@nobits
+ .align 4
+ .skip 24
+ .type a,@object
+ .size a,4
+a:
+ .long 0
+ .text
+ .globl _start
+ .ent _start
+_start:
+ .end _start
+ .section .debug_foobar
+ .quad a !dtprel
diff --git a/binutils-2.21/ld/testsuite/ld-alpha/tlsg.sd b/binutils-2.21/ld/testsuite/ld-alpha/tlsg.sd
new file mode 100644
index 0000000..c426a99
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-alpha/tlsg.sd
@@ -0,0 +1,10 @@
+#source: tlsg.s
+#as:
+#ld: -melf64_ia64
+#objdump: -sj.debug_foobar
+#target: ia64-*-*
+
+.*: +file format elf64-ia64-little
+
+Contents of section .debug_foobar:
+ 0+ 18000000 0+ +.*
diff --git a/binutils-2.21/ld/testsuite/ld-alpha/tlslib.s b/binutils-2.21/ld/testsuite/ld-alpha/tlslib.s
new file mode 100644
index 0000000..88cdff2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-alpha/tlslib.s
@@ -0,0 +1,19 @@
+ .section ".tdata", "awT", @progbits
+ .globl sG1, sG2, sG3, sG4, sG5, sG6, sG7, sG8
+sG1: .long 513
+sG2: .long 514
+sG3: .long 515
+sG4: .long 516
+sG5: .long 517
+sG6: .long 518
+sG7: .long 519
+sG8: .long 520
+
+ .text
+ /* Dummy. */
+ .globl __tls_get_addr
+ .ent __tls_get_addr
+__tls_get_addr:
+ .prologue 0
+ ret
+ .end __tls_get_addr
diff --git a/binutils-2.21/ld/testsuite/ld-alpha/tlspic.dd b/binutils-2.21/ld/testsuite/ld-alpha/tlspic.dd
new file mode 100644
index 0000000..63f150c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-alpha/tlspic.dd
@@ -0,0 +1,56 @@
+#source: align.s
+#source: tlspic1.s
+#source: tlspic2.s
+#as:
+#ld: -shared -melf64alpha
+#objdump: -drj.text
+#target: alpha*-*-*
+
+.*: +file format elf64-alpha
+
+Disassembly of section .text:
+
+0+1000 <fn1>:
+ 1000: 02 00 bb 27 ldah gp,2\(t12\)
+ 1004: a0 82 bd 23 lda gp,-32096\(gp\)
+ 1008: 3e 15 c2 43 subq sp,0x10,sp
+ 100c: 00 00 5e b7 stq ra,0\(sp\)
+ 1010: 08 00 3e b5 stq s0,8\(sp\)
+ 1014: 9e 00 00 00 rduniq
+ 1018: 09 04 e0 47 mov v0,s0
+ 101c: 08 80 1d 22 lda a0,-32760\(gp\)
+ 1020: 00 80 7d a7 ldq t12,-32768\(gp\)
+ 1024: 00 40 5b 6b jsr ra,\(t12\),1028 <.*>
+ 1028: 02 00 ba 27 ldah gp,2\(ra\)
+ 102c: 78 82 bd 23 lda gp,-32136\(gp\)
+ 1030: 30 80 1d 22 lda a0,-32720\(gp\)
+ 1034: 00 80 7d a7 ldq t12,-32768\(gp\)
+ 1038: 00 40 5b 6b jsr ra,\(t12\),103c <.*>
+ 103c: 02 00 ba 27 ldah gp,2\(ra\)
+ 1040: 64 82 bd 23 lda gp,-32156\(gp\)
+ 1044: 40 80 1d 22 lda a0,-32704\(gp\)
+ 1048: 00 80 7d a7 ldq t12,-32768\(gp\)
+ 104c: 00 40 5b 6b jsr ra,\(t12\),1050 <.*>
+ 1050: 02 00 ba 27 ldah gp,2\(ra\)
+ 1054: 50 82 bd 23 lda gp,-32176\(gp\)
+ 1058: 21 00 20 20 lda t0,33\(v0\)
+ 105c: 40 80 1d 22 lda a0,-32704\(gp\)
+ 1060: 00 80 7d a7 ldq t12,-32768\(gp\)
+ 1064: 00 40 5b 6b jsr ra,\(t12\),1068 <.*>
+ 1068: 02 00 ba 27 ldah gp,2\(ra\)
+ 106c: 38 82 bd 23 lda gp,-32200\(gp\)
+ 1070: 40 00 20 20 lda t0,64\(v0\)
+ 1074: 62 00 20 20 lda t0,98\(v0\)
+ 1078: 00 00 20 24 ldah t0,0\(v0\)
+ 107c: 53 00 21 20 lda t0,83\(t0\)
+ 1080: 18 80 3d a4 ldq t0,-32744\(gp\)
+ 1084: 01 04 20 40 addq t0,v0,t0
+ 1088: 20 80 3d a4 ldq t0,-32736\(gp\)
+ 108c: 01 04 29 40 addq t0,s0,t0
+ 1090: 50 80 3d a4 ldq t0,-32688\(gp\)
+ 1094: 28 80 5d a4 ldq t1,-32728\(gp\)
+ 1098: 01 04 29 40 addq t0,s0,t0
+ 109c: 02 04 49 40 addq t1,s0,t1
+ 10a0: 00 00 5e a7 ldq ra,0\(sp\)
+ 10a4: 1e 14 c2 43 addq sp,0x10,sp
+ 10a8: 01 80 fa 6b ret
diff --git a/binutils-2.21/ld/testsuite/ld-alpha/tlspic.rd b/binutils-2.21/ld/testsuite/ld-alpha/tlspic.rd
new file mode 100644
index 0000000..ac6a38a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-alpha/tlspic.rd
@@ -0,0 +1,128 @@
+#source: align.s
+#source: tlspic1.s
+#source: tlspic2.s
+#as:
+#ld: -shared -melf64alpha
+#readelf: -WSsrl
+#target: alpha*-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
+ +\[[ 0-9]+\] .hash +.*
+ +\[[ 0-9]+\] .dynsym +.*
+ +\[[ 0-9]+\] .dynstr +.*
+ +\[[ 0-9]+\] .rela.dyn +.*
+ +\[[ 0-9]+\] .rela.plt +.*
+ +\[[ 0-9]+\] .text +PROGBITS +0+1000 0+1000 0+ac 0+ +AX +0 +0 4096
+ +\[[ 0-9]+\] .eh_frame +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +A +0 +0 +8
+ +\[[ 0-9]+\] .tdata +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 0+ WAT +0 +0 +4
+ +\[[ 0-9]+\] .tbss +NOBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 0+ WAT +0 +0 +1
+ +\[[ 0-9]+\] .dynamic +DYNAMIC +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 10 +WA +3 +0 +8
+ +\[[ 0-9]+\] .plt +.*
+ +\[[ 0-9]+\] .got +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 0+ +WA +0 +0 +8
+ +\[[ 0-9]+\] .shstrtab +.*
+ +\[[ 0-9]+\] .symtab +.*
+ +\[[ 0-9]+\] .strtab +.*
+#...
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x1000
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +LOAD +0x0+ 0x0+ 0x0+ 0x[0-9a-f]+ 0x[0-9a-f]+ R E 0x10000
+ +LOAD +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ RWE 0x10000
+ +DYNAMIC +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ RW +0x8
+ +TLS +0x0+10e0 0x0+110e0 0x0+110e0 0x0+60 0x0+80 R +0x4
+#...
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 7 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f]+ +[0-9a-f]+ R_ALPHA_DTPMOD64 +0+ sg1 \+ 0
+[0-9a-f]+ +[0-9a-f]+ R_ALPHA_DTPREL64 +0+ sg1 \+ 0
+[0-9a-f]+ +[0-9a-f]+ R_ALPHA_TPREL64 +0+4 sg2 \+ 0
+[0-9a-f]+ +[0-9a-f]+ R_ALPHA_TPREL64 +0+44
+[0-9a-f]+ +[0-9a-f]+ R_ALPHA_DTPMOD64 +0+
+[0-9a-f]+ +[0-9a-f]+ R_ALPHA_DTPMOD64 +0+
+[0-9a-f]+ +[0-9a-f]+ R_ALPHA_TPREL64 +0+24
+
+Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f]+ +[0-9a-f]+ R_ALPHA_JMP_SLOT +0+ __tls_get_addr \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* [0-9a-f]+ +0 +NOTYPE +LOCAL +DEFAULT +UND
+.* [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg8
+.* [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg3
+.* [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg4
+.* [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg5
+.* [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr
+.* [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg1
+.* [0-9a-f]+ +172 +FUNC +GLOBAL +DEFAULT +\[<other>: 88\] +6 fn1
+.* [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg2
+.* [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg6
+.* [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg7
+.* [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* [0-9a-f]+ +0 +NOTYPE +LOCAL +DEFAULT +UND
+.* [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +1
+.* [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +2
+.* [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +3
+.* [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +4
+.* [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +5
+.* [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +6
+.* [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +7
+.* [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +8
+.* [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +9
+.* [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +10
+.* [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +11
+.* [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +12
+.* [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sl1
+.* [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sl2
+.* [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sl3
+.* [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sl4
+.* [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sl5
+.* [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sl6
+.* [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sl7
+.* [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sl8
+.* [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +9 sH1
+.* [0-9a-f]+ +0 +OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC
+.* [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sh3
+.* [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +9 sH2
+.* [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +9 sH7
+.* [0-9a-f]+ +0 +OBJECT +LOCAL +DEFAULT +ABS _PROCEDURE_LINKAGE_TABLE_
+.* [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sh7
+.* [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sh8
+.* [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +9 sH4
+.* [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sh4
+.* [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +9 sH3
+.* [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sh5
+.* [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +9 sH5
+.* [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +9 sH6
+.* [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +9 sH8
+.* [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sh1
+.* [0-9a-f]+ +0 +OBJECT +LOCAL +DEFAULT +ABS _GLOBAL_OFFSET_TABLE_
+.* [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sh2
+.* [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sh6
+.* [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg8
+.* [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg3
+.* [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg4
+.* [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg5
+.* [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr
+.* [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg1
+.* [0-9a-f]+ +172 +FUNC +GLOBAL +DEFAULT +\[<other>: 88\] +6 fn1
+.* [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg2
+.* [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg6
+.* [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg7
+.* [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
diff --git a/binutils-2.21/ld/testsuite/ld-alpha/tlspic.sd b/binutils-2.21/ld/testsuite/ld-alpha/tlspic.sd
new file mode 100644
index 0000000..772cbaf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-alpha/tlspic.sd
@@ -0,0 +1,17 @@
+#source: align.s
+#source: tlspic1.s
+#source: tlspic2.s
+#as:
+#ld: -shared -melf64alpha
+#objdump: -sj.got
+#target: alpha*-*-*
+
+.*: +file format elf64-alpha
+
+Contents of section .got:
+ 112a0 90120100 00000000 00000000 00000000 .*
+ 112b0 00000000 00000000 71000000 00000000 .*
+ 112c0 00000000 00000000 00000000 00000000 .*
+ 112d0 00000000 00000000 44000000 00000000 .*
+ 112e0 00000000 00000000 00000000 00000000 .*
+ 112f0 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-alpha/tlspic.td b/binutils-2.21/ld/testsuite/ld-alpha/tlspic.td
new file mode 100644
index 0000000..cd09609
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-alpha/tlspic.td
@@ -0,0 +1,17 @@
+#source: align.s
+#source: tlspic1.s
+#source: tlspic2.s
+#as:
+#ld: -shared -melf64alpha
+#objdump: -sj.tdata
+#target: alpha*-*-*
+
+.*: +file format elf64-alpha
+
+Contents of section .tdata:
+ 110e0 11000000 12000000 13000000 14000000 .*
+ 110f0 15000000 16000000 17000000 18000000 .*
+ 11100 41000000 42000000 43000000 44000000 .*
+ 11110 45000000 46000000 47000000 48000000 .*
+ 11120 01010000 02010000 03010000 04010000 .*
+ 11130 05010000 06010000 07010000 08010000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-alpha/tlspic1.s b/binutils-2.21/ld/testsuite/ld-alpha/tlspic1.s
new file mode 100644
index 0000000..822f36d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-alpha/tlspic1.s
@@ -0,0 +1,87 @@
+ .section ".tdata", "awT", @progbits
+ .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
+ .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+ .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+sg1: .long 17
+sg2: .long 18
+sg3: .long 19
+sg4: .long 20
+sg5: .long 21
+sg6: .long 22
+sg7: .long 23
+sg8: .long 24
+sl1: .long 65
+sl2: .long 66
+sl3: .long 67
+sl4: .long 68
+sl5: .long 69
+sl6: .long 70
+sl7: .long 71
+sl8: .long 72
+sh1: .long 257
+sh2: .long 258
+sh3: .long 259
+sh4: .long 260
+sh5: .long 261
+sh6: .long 262
+sh7: .long 263
+sh8: .long 264
+ .text
+ .globl fn1
+ .ent fn1
+fn1:
+ .frame $sp, 16, $26, 0
+ ldgp $gp, 0($27)
+ subq $sp, 16, $sp
+ stq $26, 0($sp)
+ stq $9, 8($sp)
+ .prologue 1
+
+ rduniq
+ mov $0, $9
+
+ /* GD */
+ lda $16, sg1($gp) !tlsgd!1
+ ldq $27, __tls_get_addr($gp) !literal!1
+ jsr $26, ($27), __tls_get_addr !lituse_tlsgd!1
+ ldgp $gp, 0($26)
+
+ /* GD against hidden symbol */
+ lda $16, sh2($gp) !tlsgd!2
+ ldq $27, __tls_get_addr($gp) !literal!2
+ jsr $26, ($27), __tls_get_addr !lituse_tlsgd!2
+ ldgp $gp, 0($26)
+
+ /* LD */
+ lda $16, sl1($gp) !tlsldm!3
+ ldq $27, __tls_get_addr($gp) !literal!3
+ jsr $26, ($27), __tls_get_addr !lituse_tlsldm!3
+ ldgp $gp, 0($26)
+ lda $1, sl1+1($0) !dtprel
+
+ /* LD with 4 variables */
+ lda $16, sh1($gp) !tlsldm!4
+ ldq $27, __tls_get_addr($gp) !literal!4
+ jsr $26, ($27), __tls_get_addr !lituse_tlsldm!4
+ ldgp $gp, 0($26)
+ lda $1, sh1($0) !dtprel
+ lda $1, sH1+2($0) !dtprel
+ ldah $1, sh5+3($0) !dtprelhi
+ lda $1, sh5+3($1) !dtprello
+ ldq $1, sH5+1($gp) !gotdtprel
+ addq $1, $0, $1
+
+ /* IE against global */
+ ldq $1, sg2($gp) !gottprel
+ addq $1, $9, $1
+
+ /* IE against local and hidden */
+ ldq $1, sl2($gp) !gottprel
+ ldq $2, sh2($gp) !gottprel
+ addq $1, $9, $1
+ addq $2, $9, $2
+
+ ldq $26, 0($sp)
+ addq $sp, 16, $sp
+ ret
+ .end fn1
diff --git a/binutils-2.21/ld/testsuite/ld-alpha/tlspic2.s b/binutils-2.21/ld/testsuite/ld-alpha/tlspic2.s
new file mode 100644
index 0000000..5513f9b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-alpha/tlspic2.s
@@ -0,0 +1,11 @@
+ .section ".tbss", "awT", @nobits
+ .globl sH1, sH2, sH3, sH4, sH5, sH6, sH7, sH8
+ .hidden sH1, sH2, sH3, sH4, sH5, sH6, sH7, sH8
+sH1: .space 4
+sH2: .space 4
+sH3: .space 4
+sH4: .space 4
+sH5: .space 4
+sH6: .space 4
+sH7: .space 4
+sH8: .space 4
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arch-v6.s b/binutils-2.21/ld/testsuite/ld-arm/arch-v6.s
new file mode 100644
index 0000000..88aef8d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arch-v6.s
@@ -0,0 +1,4 @@
+ .cpu arm1136jfs
+
+ @ Tag_CPU_raw_name
+ .eabi_attribute 4, "arch_v6"
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arch-v6k.s b/binutils-2.21/ld/testsuite/ld-arm/arch-v6k.s
new file mode 100644
index 0000000..0bfec94
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arch-v6k.s
@@ -0,0 +1,4 @@
+ .cpu mpcore
+
+ @ Tag_CPU_raw_name
+ .eabi_attribute 4, "arch_v6k"
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arch-v6t2.s b/binutils-2.21/ld/testsuite/ld-arm/arch-v6t2.s
new file mode 100644
index 0000000..1148b20
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arch-v6t2.s
@@ -0,0 +1,4 @@
+ .cpu arm1156t2f-s
+
+ @ Tag_CPU_raw_name
+ .eabi_attribute 4, "arch_v6t2"
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-app-abs32.d b/binutils-2.21/ld/testsuite/ld-arm/arm-app-abs32.d
new file mode 100644
index 0000000..dbee189
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-app-abs32.d
@@ -0,0 +1,29 @@
+
+tmpdir/arm-app-abs32: file format elf32-(little|big)arm
+architecture: arm, flags 0x00000112:
+EXEC_P, HAS_SYMS, D_PAGED
+start address .*
+
+Disassembly of section .plt:
+
+.* <.plt>:
+ .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
+ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <_start-0x10>
+ .*: e08fe00e add lr, pc, lr
+ .*: e5bef008 ldr pc, \[lr, #8\]!
+ .*: .* .*
+ .*: e28fc6.* add ip, pc, #.*
+ .*: e28cca.* add ip, ip, #.* ; .*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]!.*
+Disassembly of section .text:
+
+.* <_start>:
+ .*: e1a0c00d mov ip, sp
+ .*: e92dd800 push {fp, ip, lr, pc}
+ .*: e59f0004 ldr r0, \[pc, #4\] ; .* <_start\+0x14>
+ .*: e89d6800 ldm sp, {fp, sp, lr}
+ .*: e12fff1e bx lr
+ .*: .* .*
+
+.* <app_func2>:
+ .*: e12fff1e bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-app-abs32.r b/binutils-2.21/ld/testsuite/ld-arm/arm-app-abs32.r
new file mode 100644
index 0000000..08d668c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-app-abs32.r
@@ -0,0 +1,8 @@
+
+tmpdir/arm-app-abs32: file format elf32-(little|big)arm
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+.* R_ARM_JUMP_SLOT lib_func1
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-app-abs32.s b/binutils-2.21/ld/testsuite/ld-arm/arm-app-abs32.s
new file mode 100644
index 0000000..a1cf526
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-app-abs32.s
@@ -0,0 +1,16 @@
+ .text
+ .globl _start
+_start:
+ mov ip, sp
+ stmdb sp!, {r11, ip, lr, pc}
+ ldr a1, .Lval
+ ldmia sp, {r11, sp, lr}
+ bx lr
+
+.Lval:
+ .long lib_func1
+
+ .globl app_func2
+app_func2:
+ bx lr
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-app-movw.s b/binutils-2.21/ld/testsuite/ld-arm/arm-app-movw.s
new file mode 100644
index 0000000..55ced97
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-app-movw.s
@@ -0,0 +1,11 @@
+ .text
+ .globl _start
+_start:
+ movw r0, #:lower16:data_obj
+ movt r0, #:upper16:data_obj
+ movw r0, #:lower16:lib_func1
+ movt r0, #:upper16:lib_func1
+
+ .globl app_func2
+app_func2:
+ bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-app.d b/binutils-2.21/ld/testsuite/ld-arm/arm-app.d
new file mode 100644
index 0000000..7730e90
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-app.d
@@ -0,0 +1,35 @@
+
+tmpdir/arm-app: file format elf32-(little|big)arm
+architecture: arm, flags 0x00000112:
+EXEC_P, HAS_SYMS, D_PAGED
+start address 0x.*
+
+Disassembly of section .plt:
+
+.* <.plt>:
+ .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
+ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <_start-0x10>
+ .*: e08fe00e add lr, pc, lr
+ .*: e5bef008 ldr pc, \[lr, #8\]!
+ .*: .*
+ .*: e28fc6.* add ip, pc, #.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]!.*
+Disassembly of section .text:
+
+.* <_start>:
+ .*: e1a0c00d mov ip, sp
+ .*: e92dd800 push {fp, ip, lr, pc}
+ .*: eb000001 bl .* <app_func>
+ .*: e89d6800 ldm sp, {fp, sp, lr}
+ .*: e12fff1e bx lr
+
+.* <app_func>:
+ .*: e1a0c00d mov ip, sp
+ .*: e92dd800 push {fp, ip, lr, pc}
+ .*: ebfffff4 bl .* <_start-0xc>
+ .*: e89d6800 ldm sp, {fp, sp, lr}
+ .*: e12fff1e bx lr
+
+.* <app_func2>:
+ .*: e12fff1e bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-app.r b/binutils-2.21/ld/testsuite/ld-arm/arm-app.r
new file mode 100644
index 0000000..4b25e70
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-app.r
@@ -0,0 +1,9 @@
+
+tmpdir/arm-app.*: file format elf32-(little|big)arm
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+.* R_ARM_COPY data_obj
+.* R_ARM_JUMP_SLOT lib_func1
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-app.s b/binutils-2.21/ld/testsuite/ld-arm/arm-app.s
new file mode 100644
index 0000000..8f6d27c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-app.s
@@ -0,0 +1,23 @@
+ .text
+ .globl _start
+_start:
+ mov ip, sp
+ stmdb sp!, {r11, ip, lr, pc}
+ bl app_func
+ ldmia sp, {r11, sp, lr}
+ bx lr
+
+ .globl app_func
+app_func:
+ mov ip, sp
+ stmdb sp!, {r11, ip, lr, pc}
+ bl lib_func1
+ ldmia sp, {r11, sp, lr}
+ bx lr
+
+ .globl app_func2
+app_func2:
+ bx lr
+
+ .data
+ .long data_obj
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-be8.d b/binutils-2.21/ld/testsuite/ld-arm/arm-be8.d
new file mode 100644
index 0000000..16090b3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-be8.d
@@ -0,0 +1,16 @@
+
+.*: file format.*
+
+Disassembly of section .text:
+
+00008000 <arm>:
+ 8000: e3a00000 mov r0, #0
+ 8004: e12fff1e bx lr
+
+00008008 <thumb>:
+ 8008: 46c0 nop ; \(mov r8, r8\)
+ 800a: 4770 bx lr
+ 800c: f7ff fffc bl 8008 <thumb>
+
+00008010 <data>:
+ 8010: 12345678 .word 0x12345678
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-be8.s b/binutils-2.21/ld/testsuite/ld-arm/arm-be8.s
new file mode 100644
index 0000000..871b691
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-be8.s
@@ -0,0 +1,14 @@
+.arch armv6
+.text
+arm:
+mov r0, #0
+$m:
+bx lr
+.thumb
+.thumb_func
+thumb:
+nop
+bx lr
+bl thumb
+data:
+.word 0x12345678
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-call.d b/binutils-2.21/ld/testsuite/ld-arm/arm-call.d
new file mode 100644
index 0000000..a320743
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-call.d
@@ -0,0 +1,58 @@
+
+.*: file format.*
+
+Disassembly of section .text:
+
+00008000 <_start>:
+ 8000: eb00000d bl 803c <arm>
+ 8004: fa00000d blx 8040 <t1>
+ 8008: fb00000c blx 8042 <t2>
+ 800c: fb00000d blx 804a <t5>
+ 8010: fa00000a blx 8040 <t1>
+ 8014: fb000009 blx 8042 <t2>
+ 8018: ea000010 b 8060 <__t1_from_arm>
+ 801c: ea000011 b 8068 <__t2_from_arm>
+ 8020: 1b00000e blne 8060 <__t1_from_arm>
+ 8024: 1b00000f blne 8068 <__t2_from_arm>
+ 8028: 1b000003 blne 803c <arm>
+ 802c: eb000002 bl 803c <arm>
+ 8030: faffffff blx 8034 <thumblocal>
+
+00008034 <thumblocal>:
+ 8034: 4770 bx lr
+
+00008036 <t3>:
+ 8036: 4770 bx lr
+
+00008038 <t4>:
+ 8038: 4770 bx lr
+ 803a: 46c0 nop ; \(mov r8, r8\)
+
+0000803c <arm>:
+ 803c: e12fff1e bx lr
+
+00008040 <t1>:
+ 8040: 4770 bx lr
+
+00008042 <t2>:
+ 8042: f7ff fff8 bl 8036 <t3>
+ 8046: f7ff fff7 bl 8038 <t4>
+
+0000804a <t5>:
+ 804a: f000 f801 bl 8050 <local_thumb>
+ 804e: 46c0 nop ; \(mov r8, r8\)
+
+00008050 <local_thumb>:
+ 8050: f7ff fff1 bl 8036 <t3>
+ 8054: f7ff efd4 blx 8000 <_start>
+ 8058: f7ff efd2 blx 8000 <_start>
+ 805c: 0000 movs r0, r0
+ ...
+
+00008060 <__t1_from_arm>:
+ 8060: e51ff004 ldr pc, \[pc, #-4\] ; 8064 <__t1_from_arm\+0x4>
+ 8064: 00008041 .word 0x00008041
+
+00008068 <__t2_from_arm>:
+ 8068: e51ff004 ldr pc, \[pc, #-4\] ; 806c <__t2_from_arm\+0x4>
+ 806c: 00008043 .word 0x00008043
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-call1.s b/binutils-2.21/ld/testsuite/ld-arm/arm-call1.s
new file mode 100644
index 0000000..e6ea1f2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-call1.s
@@ -0,0 +1,30 @@
+# Test R_ARM_CALL and R_ARM_JUMP24 relocations and interworking
+ .text
+ .arch armv5t
+ .global _start
+_start:
+ bl arm
+ bl t1
+ bl t2
+ bl t5
+ blx t1
+ blx t2
+ b t1
+ b t2
+ blne t1
+ blne t2
+ blne arm
+ blx arm
+ blx thumblocal
+ .thumb
+thumblocal:
+ bx lr
+ .global t3
+ .thumb_func
+t3:
+ bx lr
+ .global t4
+ .thumb_func
+t4:
+ bx lr
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-call2.s b/binutils-2.21/ld/testsuite/ld-arm/arm-call2.s
new file mode 100644
index 0000000..30ae349
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-call2.s
@@ -0,0 +1,24 @@
+ .text
+ .arch armv5t
+ .global arm
+ .global t1
+ .global t2
+ .global t5
+arm:
+ bx lr
+ .thumb
+ .thumb_func
+t1:
+ bx lr
+ .thumb_func
+t2:
+ bl t3
+ bl t4
+ .thumb_func
+t5:
+ bl local_thumb
+ nop
+local_thumb:
+ blx t3
+ bl _start
+ blx _start
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-dyn.ld b/binutils-2.21/ld/testsuite/ld-arm/arm-dyn.ld
new file mode 100644
index 0000000..736fb17
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-dyn.ld
@@ -0,0 +1,194 @@
+/* Script for -z combreloc: combine and sort reloc sections */
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+/* Do we need any of these for elf?
+ __DYNAMIC = 0; */
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ PROVIDE (__executable_start = 0x8000); . = 0x8000;
+ .interp : { *(.interp) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ .gnu.version : { *(.gnu.version) }
+ .gnu.version_d : { *(.gnu.version_d) }
+ .gnu.version_r : { *(.gnu.version_r) }
+ .rel.dyn :
+ {
+ *(.rel.init)
+ *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+ *(.rel.fini)
+ *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+ *(.rel.data.rel.ro*)
+ *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+ *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+ *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+ *(.rel.ctors)
+ *(.rel.dtors)
+ *(.rel.got)
+ *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+ }
+ .rela.dyn :
+ {
+ *(.rela.init)
+ *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+ *(.rela.fini)
+ *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+ *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+ *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+ *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+ *(.rela.ctors)
+ *(.rela.dtors)
+ *(.rela.got)
+ *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+ }
+ .rel.plt : { *(.rel.plt) }
+ .rela.plt : { *(.rela.plt) }
+ .init :
+ {
+ KEEP (*(.init))
+ } =0
+ .plt : { *(.plt) }
+ .text :
+ {
+ *(.text .stub .text.* .gnu.linkonce.t.*)
+ KEEP (*(.text.*personality*))
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ *(.glue_7t) *(.glue_7)
+ } =0
+ .fini :
+ {
+ KEEP (*(.fini))
+ } =0
+ PROVIDE (__etext = .);
+ PROVIDE (_etext = .);
+ PROVIDE (etext = .);
+ .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+ .rodata1 : { *(.rodata1) }
+ .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+ PROVIDE_HIDDEN (__exidx_start = .);
+ .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+ PROVIDE_HIDDEN (__exidx_end = .);
+ .eh_frame_hdr : { *(.eh_frame_hdr) }
+ .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) }
+ .gcc_except_table : ONLY_IF_RO { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) }
+ /* Adjust the address for the data segment. We want to adjust up to
+ the same address within the page on the next page up. */
+ . = ALIGN (0x8000) - ((0x8000 - .) & (0x8000 - 1)); . = DATA_SEGMENT_ALIGN (0x8000, 0x1000);
+ /* Exception handling */
+ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) }
+ .gcc_except_table : ONLY_IF_RW { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) }
+ /* Thread Local Storage sections */
+ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
+ .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+ /* Ensure the __preinit_array_start label is properly aligned. We
+ could instead move the label definition inside the section, but
+ the linker would then create the section even if it turns out to
+ be empty, which isn't pretty. */
+ . = ALIGN(32 / 8);
+ PROVIDE (__preinit_array_start = .);
+ .preinit_array : { KEEP (*(.preinit_array)) }
+ PROVIDE (__preinit_array_end = .);
+ PROVIDE (__init_array_start = .);
+ .init_array : { KEEP (*(.init_array)) }
+ PROVIDE (__init_array_end = .);
+ PROVIDE (__fini_array_start = .);
+ .fini_array : { KEEP (*(.fini_array)) }
+ PROVIDE (__fini_array_end = .);
+ .ctors :
+ {
+ /* gcc uses crtbegin.o to find the start of
+ the constructors, so we make sure it is
+ first. Because this is a wildcard, it
+ doesn't matter if the user does not
+ actually link against crtbegin.o; the
+ linker won't look for a file to match a
+ wildcard. The wildcard also means that it
+ doesn't matter which directory crtbegin.o
+ is in. */
+ KEEP (*crtbegin*.o(.ctors))
+ /* We don't want to include the .ctor section from
+ from the crtend.o file until after the sorted ctors.
+ The .ctor section from the crtend file contains the
+ end of ctors marker and it must be last */
+ KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ }
+ .dtors :
+ {
+ KEEP (*crtbegin*.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ }
+ .jcr : { KEEP (*(.jcr)) }
+ .data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) }
+ .dynamic : { *(.dynamic) }
+ .got : { *(.got.plt) *(.got) }
+ .data :
+ {
+ __data_start = . ;
+ *(.data .data.* .gnu.linkonce.d.*)
+ KEEP (*(.gnu.linkonce.d.*personality*))
+ SORT(CONSTRUCTORS)
+ }
+ .data1 : { *(.data1) }
+ _edata = .;
+ PROVIDE (edata = .);
+ __bss_start = .;
+ __bss_start__ = .;
+ .bss :
+ {
+ *(.dynbss)
+ *(.bss .bss.* .gnu.linkonce.b.*)
+ *(COMMON)
+ /* Align here to ensure that the .bss section occupies space up to
+ _end. Align after .bss to ensure correct alignment even if the
+ .bss section disappears because there are no input sections. */
+ . = ALIGN(32 / 8);
+ }
+ . = ALIGN(32 / 8);
+ _end = .;
+ _bss_end__ = . ; __bss_end__ = . ; __end__ = . ;
+ PROVIDE (end = .);
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames) }
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames) }
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
+ .debug_abbrev 0 : { *(.debug_abbrev) }
+ .debug_line 0 : { *(.debug_line) }
+ .debug_frame 0 : { *(.debug_frame) }
+ .debug_str 0 : { *(.debug_str) }
+ .debug_loc 0 : { *(.debug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo) }
+ /* SGI/MIPS DWARF 2 extensions */
+ .debug_weaknames 0 : { *(.debug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames) }
+ .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+ /DISCARD/ : { *(.note.GNU-stack) }
+}
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-elf.exp b/binutils-2.21/ld/testsuite/ld-arm/arm-elf.exp
new file mode 100644
index 0000000..0b1cdaa
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-elf.exp
@@ -0,0 +1,547 @@
+# Expect script for various ARM ELF tests.
+# Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+if {[istarget "arm-*-vxworks"]} {
+ set armvxworkstests {
+ {"VxWorks shared library test 1" "-shared -Tvxworks1.ld"
+ "" {vxworks1-lib.s}
+ {{readelf --relocs vxworks1-lib.rd} {objdump -dr vxworks1-lib.dd}
+ {readelf --symbols vxworks1-lib.nd} {readelf -d vxworks1-lib.td}}
+ "libvxworks1.so"}
+ {"VxWorks executable test 1 (dynamic)" \
+ "tmpdir/libvxworks1.so -Tvxworks1.ld -q --force-dynamic"
+ "" {vxworks1.s}
+ {{readelf --relocs vxworks1.rd} {objdump -dr vxworks1.dd}}
+ "vxworks1"}
+ {"VxWorks executable test 2 (dynamic)" \
+ "-Tvxworks1.ld -q --force-dynamic"
+ "" {vxworks2.s}
+ {{readelf --segments vxworks2.sd}}
+ "vxworks2"}
+ {"VxWorks executable test 2 (static)"
+ "-Tvxworks1.ld"
+ "" {vxworks2.s}
+ {{readelf --segments vxworks2-static.sd}}
+ "vxworks2"}
+ }
+ run_ld_link_tests $armvxworkstests
+ run_dump_test "vxworks1-static"
+ run_dump_test "emit-relocs1-vxworks"
+}
+
+if { [istarget "arm*-*-symbianelf*"] } {
+ run_dump_test "symbian-seg1"
+}
+
+# Exclude non-ARM-ELF targets.
+
+if { ![is_elf_format] || ![istarget "arm*-*-*"] } {
+ return
+}
+
+# List contains test-items with 3 items followed by 2 lists and one more item:
+# 0:name 1:ld options 2:assembler options
+# 3:filenames of assembler files 4: action and options. 5: name of output file
+
+# Actions:
+# objdump: Apply objdump options on result. Compare with regex (last arg).
+# nm: Apply nm options on result. Compare with regex (last arg).
+# readelf: Apply readelf options on result. Compare with regex (last arg).
+
+set armelftests {
+ {"Group relocations" "-Ttext 0x8000 --section-start zero=0x0 --section-start alpha=0xeef0 --section-start beta=0xffeef0" "" {group-relocs.s}
+ {{objdump -dr group-relocs.d}}
+ "group-relocs"}
+ {"Thumb-1 BL" "-Ttext 0x1000 --section-start .foo=0x401000" "" {thumb1-bl.s}
+ {{objdump -dr thumb1-bl.d}}
+ "thumb1-bl"}
+ {"Simple non-PIC shared library" "-shared" "" {arm-lib.s}
+ {{objdump -fdw arm-lib.d} {objdump -Rw arm-lib.r}}
+ "arm-lib.so"}
+ {"Simple PIC shared library" "-shared" "" {arm-lib-plt32.s}
+ {{objdump -fdw arm-lib-plt32.d} {objdump -Rw arm-lib-plt32.r}}
+ "arm-lib-plt32.so"}
+ {"Simple dynamic application" "tmpdir/arm-lib.so" "" {arm-app.s}
+ {{objdump -fdw arm-app.d} {objdump -Rw arm-app.r}}
+ "arm-app"}
+ {"Simple static application" "" "" {arm-static-app.s}
+ {{objdump -fdw arm-static-app.d} {objdump -rw arm-static-app.r}}
+ "arm-static-app"}
+ {"Non-pcrel function reference" "tmpdir/arm-lib.so" "" {arm-app-abs32.s}
+ {{objdump -fdw arm-app-abs32.d} {objdump -Rw arm-app-abs32.r}}
+ "arm-app-abs32"}
+ {"Thumb shared library with ARM entry points" "-shared -T arm-lib.ld" "-mthumb-interwork"
+ {mixed-lib.s}
+ {{objdump -fdw armthumb-lib.d} {readelf -Ds armthumb-lib.sym}}
+ "armthumb-lib.so"}
+ {"Mixed ARM/Thumb shared library" "-shared -T arm-lib.ld -use-blx" ""
+ {mixed-lib.s}
+ {{objdump -fdw mixed-lib.d} {objdump -Rw mixed-lib.r}
+ {readelf -Ds mixed-lib.sym}}
+ "mixed-lib.so"}
+ {"Mixed ARM/Thumb dynamic application" "tmpdir/mixed-lib.so -T arm-dyn.ld" ""
+ {mixed-app.s}
+ {{objdump -fdw mixed-app.d} {objdump -Rw mixed-app.r}
+ {readelf -Ds mixed-app.sym}}
+ "mixed-app"}
+ {"Mixed ARM/Thumb arch5 dynamic application" "tmpdir/mixed-lib.so -T arm-dyn.ld --use-blx" ""
+ {mixed-app.s}
+ {{objdump -fdw mixed-app-v5.d} {objdump -Rw mixed-app.r}
+ {readelf -Ds mixed-app.sym}}
+ "mixed-app-v5"}
+ {"target1-abs" "-static --target1-abs -T arm.ld" "" {arm-target1.s}
+ {{objdump -s arm-target1-abs.d}}
+ "arm-target1-abs"}
+ {"target1-rel" "-static --target1-rel -T arm.ld" "" {arm-target1.s}
+ {{objdump -s arm-target1-rel.d}}
+ "arm-target1-rel"}
+ {"target2-rel" "-static --target2=rel -T arm.ld" "" {arm-target2.s}
+ {{objdump -s arm-target2-rel.d}}
+ "arm-target2-rel"}
+ {"target2-abs" "-static --target2=abs -T arm.ld" "" {arm-target2.s}
+ {{objdump -s arm-target2-abs.d}}
+ "arm-target2-abs"}
+ {"target2-got-rel" "-static --target2=got-rel -T arm.ld" "" {arm-target2.s}
+ {{objdump -s arm-target2-got-rel.d}}
+ "arm-target2-got-rel"}
+ {"arm-rel31" "-static -T arm.ld" "" {arm-rel31.s}
+ {{objdump -s arm-rel31.d}}
+ "arm-rel31"}
+ {"arm-call" "-static -T arm.ld" "-meabi=4" {arm-call1.s arm-call2.s}
+ {{objdump -d arm-call.d}}
+ "arm-call"}
+ {"TLS shared library" "-shared -T arm-lib.ld" "" {tls-lib.s}
+ {{objdump -fdw tls-lib.d} {objdump -Rw tls-lib.r}}
+ "tls-lib.so"}
+ {"TLS dynamic application" "-T arm-dyn.ld tmpdir/tls-lib.so" "" {tls-app.s}
+ {{objdump -fdw tls-app.d} {objdump -Rw tls-app.r}}
+ "tls-app"}
+ {"Thumb entry point" "-T arm.ld" "" {thumb-entry.s}
+ {{readelf -h thumb-entry.d}}
+ "thumb-entry"}
+ {"thumb-rel32" "-static -T arm.ld" "" {thumb-rel32.s}
+ {{objdump -s thumb-rel32.d}}
+ "thumb-rel32"}
+ {"MOVW/MOVT" "-static -T arm.ld" "" {arm-movwt.s}
+ {{objdump -dw arm-movwt.d}}
+ "arm-movwt"}
+ {"BE8 Mapping Symbols" "-static -T arm.ld -EB --be8" "-EB" {arm-be8.s}
+ {{objdump -d arm-be8.d}}
+ "arm-be8"}
+ {"Using Thumb lib by another lib" "-shared tmpdir/mixed-lib.so" "" {use-thumb-lib.s}
+ {{readelf -Ds use-thumb-lib.sym}}
+ "use-thumb-lib.so"}
+ {"VFP11 denorm erratum fix, scalar operation"
+ "-EL --vfp11-denorm-fix=scalar -Ttext=0x8000" "-EL -mfpu=vfpxd" {vfp11-fix-scalar.s}
+ {{objdump -dr vfp11-fix-scalar.d}}
+ "vfp11-fix-scalar"}
+ {"VFP11 denorm erratum fix, vector operation"
+ "-EB --vfp11-denorm-fix=vector -Ttext=0x8000" "-EB -mfpu=vfpxd" {vfp11-fix-vector.s}
+ {{objdump -dr vfp11-fix-vector.d}}
+ "vfp11-fix-vector"}
+ {"VFP11 denorm erratum fix, embedded code-like data"
+ "-EL --vfp11-denorm-fix=scalar -Ttext=0x8000" "-EL -mfpu=vfpxd" {vfp11-fix-none.s}
+ {{objdump -dr vfp11-fix-none.d}}
+ "vfp11-fix-none"}
+ {"Cortex-A8 erratum fix, b.w"
+ "-EL -Ttext=0x8f00 --fix-cortex-a8" "-EL" {cortex-a8-fix-b.s}
+ {{objdump -dr cortex-a8-fix-b.d}}
+ "cortex-a8-fix-b"}
+ {"Cortex-A8 erratum fix, b.w to PLT"
+ "-EL -Tcortex-a8-fix-plt.ld --fix-cortex-a8 -shared" "-EL"
+ {cortex-a8-fix-b-plt.s}
+ {{objdump -dr cortex-a8-fix-b-plt.d}}
+ "cortex-a8-fix-b-plt"}
+ {"Cortex-A8 erratum fix, bl.w"
+ "-EL -Ttext=0x8f00 --fix-cortex-a8" "-EL" {cortex-a8-fix-bl.s}
+ {{objdump -dr cortex-a8-fix-bl.d}}
+ "cortex-a8-fix-bl"}
+ {"Cortex-A8 erratum fix, bl.w to PLT"
+ "-EL -Tcortex-a8-fix-plt.ld --fix-cortex-a8 -shared" "-EL"
+ {cortex-a8-fix-bl-plt.s}
+ {{objdump -dr cortex-a8-fix-bl-plt.d}}
+ "cortex-a8-fix-bl-plt"}
+ {"Cortex-A8 erratum fix, bcc.w"
+ "-EL -Ttext=0x8f00 --fix-cortex-a8" "-EL" {cortex-a8-fix-bcc.s}
+ {{objdump -dr cortex-a8-fix-bcc.d}}
+ "cortex-a8-fix-bcc"}
+ {"Cortex-A8 erratum fix, bcc.w to PLT"
+ "-EL -Tcortex-a8-fix-plt.ld --fix-cortex-a8 -shared" "-EL"
+ {cortex-a8-fix-bcc-plt.s}
+ {{objdump -dr cortex-a8-fix-bcc-plt.d}}
+ "cortex-a8-fix-bcc-plt"}
+ {"Cortex-A8 erratum fix, blx.w"
+ "-EL -Ttext=0x8f00 --fix-cortex-a8" "-EL" {cortex-a8-fix-blx.s}
+ {{objdump -dr cortex-a8-fix-blx.d}}
+ "cortex-a8-fix-blx"}
+ {"Cortex-A8 erratum fix, blx.w to PLT"
+ "-EL -Tcortex-a8-fix-plt.ld --fix-cortex-a8 -shared" "-EL"
+ {cortex-a8-fix-blx-plt.s}
+ {{objdump -dr cortex-a8-fix-blx-plt.d}}
+ "cortex-a8-fix-blx-plt"}
+ {"Cortex-A8 erratum fix, relocate b.w to ARM"
+ "-EL -Ttext=0x8f00 --fix-cortex-a8" "-EL" {cortex-a8-arm-target.s cortex-a8-fix-b-rel.s}
+ {{objdump -dr cortex-a8-fix-b-rel-arm.d}}
+ "cortex-a8-fix-b-rel-arm"}
+ {"Cortex-A8 erratum fix, relocate b.w to Thumb"
+ "-EL -Ttext=0x8f00 --fix-cortex-a8" "-EL" {cortex-a8-thumb-target.s cortex-a8-fix-b-rel.s}
+ {{objdump -dr cortex-a8-fix-b-rel-thumb.d}}
+ "cortex-a8-fix-b-rel-thumb"}
+ {"Cortex-A8 erratum fix, relocate bl.w to ARM"
+ "-EL -Ttext=0x8f00 --fix-cortex-a8" "-EL" {cortex-a8-arm-target.s cortex-a8-fix-bl-rel.s}
+ {{objdump -dr cortex-a8-fix-bl-rel-arm.d}}
+ "cortex-a8-fix-bl-rel-arm"}
+ {"Cortex-A8 erratum fix, relocate bl.w to Thumb"
+ "-EL -Ttext=0x8f00 --fix-cortex-a8" "-EL" {cortex-a8-thumb-target.s cortex-a8-fix-bl-rel.s}
+ {{objdump -dr cortex-a8-fix-bl-rel-thumb.d}}
+ "cortex-a8-fix-bl-rel-thumb"}
+ {"Cortex-A8 erratum fix, relocate bl.w to PLT"
+ "-EL --section-start=.plt=0x8e00 -Ttext=0x8f00 --fix-cortex-a8 -shared"
+ "-EL" {cortex-a8-thumb-target.s cortex-a8-fix-bl-rel.s}
+ {{objdump -dr cortex-a8-fix-bl-rel-plt.d}}
+ "cortex-a8-fix-bl-rel-thumb"}
+ {"Cortex-A8 erratum fix, relocate b<cond>.w to Thumb"
+ "-EL -Ttext=0x8f00 --fix-cortex-a8" "-EL" {cortex-a8-thumb-target.s cortex-a8-fix-bcc-rel.s}
+ {{objdump -dr cortex-a8-fix-bcc-rel-thumb.d}}
+ "cortex-a8-fix-bcc-rel-thumb"}
+ {"Cortex-A8 erratum fix, relocate blx.w to ARM"
+ "-EL -Ttext=0x8f00 --fix-cortex-a8" "-EL" {cortex-a8-arm-target.s cortex-a8-fix-blx-rel.s}
+ {{objdump -dr cortex-a8-fix-blx-rel-arm.d}}
+ "cortex-a8-fix-blx-rel-arm"}
+ {"Cortex-A8 erratum fix, relocate blx.w to Thumb"
+ "-EL -Ttext=0x8f00 --fix-cortex-a8" "-EL" {cortex-a8-thumb-target.s cortex-a8-fix-blx-rel.s}
+ {{objdump -dr cortex-a8-fix-blx-rel-thumb.d}}
+ "cortex-a8-fix-blx-rel-thumb"}
+ {"Cortex-A8 erratum fix, relocate bl.w and far call"
+ "-EL -Ttext=0x00 --fix-cortex-a8 --defsym far_fn1=0x80000000 --defsym far_fn2=0x80000004 --defsym far_fn=0x7fff0000 --defsym _start=0"
+ "-EL -mcpu=cortex-a8" {cortex-a8-far-1.s cortex-a8-far-2.s}
+ {{objdump -dr cortex-a8-far.d}}
+ "cortex-a8-far"}
+ {"Cortex-A8 erratum fix, headers"
+ "-EL --fix-cortex-a8 -T cortex-a8-fix-hdr.t"
+ "-EL -mcpu=cortex-a8" {cortex-a8-fix-hdr.s}
+ {{objdump -dr cortex-a8-fix-hdr.d}}
+ "cortex-a8-fix-hdr"}
+ {"Cortex-A8 erratum fix, blx.w and b<cond>.w together"
+ "-EL -Ttext=0x8f00 --fix-cortex-a8" "-EL" {cortex-a8-fix-blx-bcond.s}
+ {{objdump -dr cortex-a8-fix-blx-bcond.d}}
+ "cortex-a8-fix-blx-bcond"}
+ {"Unwinding and -gc-sections" "-gc-sections" "" {gc-unwind.s}
+ {{objdump -sj.data gc-unwind.d}}
+ "gc-unwind"}
+ {"arm-pic-veneer" "-static -T arm.ld --pic-veneer" "" {arm-pic-veneer.s}
+ {{objdump -d arm-pic-veneer.d}}
+ "arm-pic-veneer"}
+ {"Preempt Thumb symbol" "tmpdir/mixed-lib.so -T arm-dyn.ld --use-blx" ""
+ {preempt-app.s}
+ {{readelf -Ds preempt-app.sym}}
+ "preempt-app"}
+ {"jump19" "-static -T arm.ld" "" {jump19.s}
+ {{objdump -dr jump19.d}}
+ "jump19"}
+ {"script-type" "-static -T script-type.ld" "" {script-type.s}
+ {{readelf -s script-type.sym}}
+ "script-type"}
+ {"callweak" "-static -T arm.ld" "" {callweak.s}
+ {{objdump -dr callweak.d}}
+ "callweak"}
+ {"callweak-2" "-static -T arm.ld" "" {callweak-2.s}
+ {{objdump -dr callweak-2.d}}
+ "callweak-2"}
+ {"Relocation boundaries" "-defsym x=0 -defsym y=0 -defsym _start=0" "" {reloc-boundaries.s}
+ {{objdump -s reloc-boundaries.d}}
+ "reloc-boundaries"}
+ {"Data only mapping symbols" "-T data-only-map.ld -Map map" "" {data-only-map.s}
+ {{objdump -dr data-only-map.d}}
+ "data-only-map"}
+}
+
+run_ld_link_tests $armelftests
+run_dump_test "group-relocs-alu-bad"
+run_dump_test "group-relocs-ldr-bad"
+run_dump_test "group-relocs-ldrs-bad"
+run_dump_test "group-relocs-ldc-bad"
+run_dump_test "thumb2-bl-undefweak"
+run_dump_test "thumb2-bl-undefweak1"
+run_dump_test "emit-relocs1"
+run_dump_test "movw-shared-1"
+run_dump_test "movw-shared-2"
+run_dump_test "movw-shared-3"
+run_dump_test "movw-shared-4"
+
+# Exclude non-ARM-EABI targets.
+
+if { ![istarget "arm*-*-*eabi"] } {
+ # Special variants of these tests, as a different farcall stub is
+ # generated for a non-ARM-EABI target: indeed in such a case,
+ # there are no attributes to indicate that blx can be used.
+
+ set arm_noeabi_tests {
+ {"Thumb-2-as-Thumb-1 BL" "-Ttext 0x1000 --section-start .foo=0x100100c" "" {thumb2-bl-as-thumb1-bad.s}
+ {{objdump -d thumb2-bl-as-thumb1-bad-noeabi.d}}
+ "thumb2-bl-as-thumb1-bad"}
+ {"Thumb-2 BL bad" "-Ttext 0x1000 --section-start .foo=0x100100c" "" {thumb2-bl-bad.s}
+ {{objdump -d thumb2-bl-bad-noeabi.d}}
+ "thumb2-bl-bad"}
+ }
+ run_ld_link_tests $arm_noeabi_tests
+
+ return
+}
+
+# Farcalls stubs are fully supported for ARM-EABI only
+set armeabitests {
+ {"EABI attribute merging" "-r" "" {attr-merge.s attr-merge.s}
+ {{readelf -A attr-merge.attr}}
+ "attr-merge"}
+ {"EABI attribute merging 2" "-r" "" {attr-merge-2a.s attr-merge-2b.s}
+ {{readelf -A attr-merge-2.attr}}
+ "attr-merge-2"}
+ {"EABI attribute merging 3" "-r" "" {attr-merge-3a.s attr-merge-3b.s}
+ {{readelf -A attr-merge-3.attr}}
+ "attr-merge-3"}
+ {"EABI attribute merging 4" "-r" "" {attr-merge-4a.s attr-merge-4b.s}
+ {{readelf -A attr-merge-4.attr}}
+ "attr-merge-4"}
+ {"EABI attribute merging 5" "-r" "" {attr-merge-5.s attr-merge-5.s}
+ {{readelf -A attr-merge-5.attr}}
+ "attr-merge-5"}
+ {"EABI attribute merging 6" "-r" "" {attr-merge-6a.s attr-merge-6b.s}
+ {{readelf -A attr-merge-6.attr}}
+ "attr-merge-6"}
+ {"EABI attribute merging 6 reversed" "-r" "" {attr-merge-6b.s attr-merge-6a.s}
+ {{readelf -A attr-merge-6.attr}}
+ "attr-merge-6r"}
+ {"EABI attribute merging 7" "-r" "" {attr-merge-7a.s attr-merge-7b.s}
+ {{readelf -A attr-merge-7.attr}}
+ "attr-merge-7"}
+ {"EABI attribute arch merging 1" "-r" "" {arch-v6k.s arch-v6t2.s}
+ {{readelf -A attr-merge-arch-1.attr}}
+ "attr-merge-arch-1"}
+ {"EABI attribute arch merging 1 reversed" "-r" "" {arch-v6t2.s arch-v6k.s}
+ {{readelf -A attr-merge-arch-1.attr}}
+ "attr-merge-arch-1r"}
+ {"EABI attribute arch merging 2" "-r" "" {arch-v6k.s arch-v6.s}
+ {{readelf -A attr-merge-arch-2.attr}}
+ "attr-merge-arch-2"}
+ {"EABI attribute arch merging 2 reversed" "-r" "" {arch-v6.s arch-v6k.s}
+ {{readelf -A attr-merge-arch-2.attr}}
+ "attr-merge-arch-2r"}
+ {"Thumb-2 BL" "-Ttext 0x1000 --section-start .foo=0x1001000" "" {thumb2-bl.s}
+ {{objdump -dr thumb2-bl.d}}
+ "thumb2-bl"}
+ {"Thumb-2 Interworked branch" "-T arm.ld" "" {thumb2-b-interwork.s}
+ {{objdump -dr thumb2-b-interwork.d}}
+ "thumb2-b-interwork"}
+ {"BL/BLX interworking" "-T arm.ld" "" {thumb2-bl-blx-interwork.s}
+ {{objdump -dr thumb2-bl-blx-interwork.d}}
+ "thumb2-bl-blx-interwork"}
+ {"ARMv4 interworking" "-static -T arm.ld --fix-v4bx-interworking" "--fix-v4bx -meabi=4" {armv4-bx.s}
+ {{objdump -d armv4-bx.d}}
+ "armv4-bx"}
+ {"MOVW/MOVT and merged sections" "-T arm.ld" "" {movw-merge.s}
+ {{objdump -dw movw-merge.d}}
+ "movw-merge"}
+ {"MOVW/MOVT against shared libraries" "tmpdir/arm-lib.so" "" {arm-app-movw.s}
+ {{objdump -Rw arm-app.r}}
+ "arm-app-movw"}
+ {"Thumb-2-as-Thumb-1 BL" "-Ttext 0x1000 --section-start .foo=0x100100c" "" {thumb2-bl-as-thumb1-bad.s}
+ {{objdump -d thumb2-bl-as-thumb1-bad.d}}
+ "thumb2-bl-as-thumb1-bad"}
+ {"Thumb-2 BL" "-Ttext 0x1000 --section-start .foo=0x100100c" "" {thumb2-bl-bad.s}
+ {{objdump -d thumb2-bl-bad.d}}
+ "thumb2-bl-bad"}
+
+ {"ARM-ARM farcall" "-Ttext 0x1000 --section-start .foo=0x2001020" "" {farcall-arm-arm.s}
+ {{objdump -d farcall-arm-arm.d}}
+ "farcall-arm-arm"}
+ {"ARM-ARM farcall (PIC veneer)" "-Ttext 0x1000 --section-start .foo=0x2001020 --pic-veneer" "" {farcall-arm-arm.s}
+ {{objdump -d farcall-arm-arm-pic-veneer.d}}
+ "farcall-arm-arm-pic-veneer"}
+ {"ARM-ARM farcall (BE8)" "-Ttext 0x1000 --section-start .foo=0x2001020 -EB --be8" "-EB" {farcall-arm-arm.s}
+ {{objdump -d farcall-arm-arm.d}}
+ "farcall-arm-arm-be8"}
+ {"ARM-ARM farcall (BE)" "-Ttext 0x1000 --section-start .foo=0x2001020 -EB" "-EB" {farcall-arm-arm.s}
+ {{objdump -d farcall-arm-arm.d}}
+ "farcall-arm-arm-be"}
+
+ {"ARM-Thumb farcall" "-Ttext 0x1000 --section-start .foo=0x2001014" "" {farcall-arm-thumb.s}
+ {{objdump -d farcall-arm-thumb.d}}
+ "farcall-arm-thumb"}
+ {"ARM-Thumb farcall with BLX" "-Ttext 0x1000 --section-start .foo=0x2001014" "-march=armv5t" {farcall-arm-thumb.s}
+ {{objdump -d farcall-arm-thumb-blx.d}}
+ "farcall-arm-thumb-blx"}
+ {"ARM-Thumb farcall (PIC veneer)" "-Ttext 0x1000 --section-start .foo=0x2001014 --pic-veneer" "" {farcall-arm-thumb.s}
+ {{objdump -d farcall-arm-thumb-pic-veneer.d}}
+ "farcall-arm-thumb-pic-veneer"}
+ {"ARM-Thumb farcall with BLX (PIC veneer)" "-Ttext 0x1000 --section-start .foo=0x2001014 --pic-veneer" "-march=armv5t" {farcall-arm-thumb.s}
+ {{objdump -d farcall-arm-thumb-blx-pic-veneer.d}}
+ "farcall-arm-thumb-blx-pic-veneer"}
+
+ {"Thumb-Thumb farcall with BLX" "-Ttext 0x1000 --section-start .foo=0x2001014" "-march=armv5t" {farcall-thumb-thumb.s}
+ {{objdump -d farcall-thumb-thumb-blx.d}}
+ "farcall-thumb-thumb-blx"}
+ {"Thumb-Thumb farcall M profile" "-Ttext 0x1000 --section-start .foo=0x2001014" "-march=armv7-m" {farcall-thumb-thumb.s}
+ {{objdump -d farcall-thumb-thumb-m.d}}
+ "farcall-thumb-thumb-m"}
+ {"Thumb-Thumb farcall v6-M" "-Ttext 0x1000 --section-start .foo=0x2001014" "-march=armv6-m" {farcall-thumb-thumb.s}
+ {{objdump -d farcall-thumb-thumb-m.d}}
+ "farcall-thumb-thumb-v6-m"}
+ {"Thumb-Thumb farcall" "-Ttext 0x1000 --section-start .foo=0x2001014" "-march=armv4t" {farcall-thumb-thumb.s}
+ {{objdump -d farcall-thumb-thumb.d}}
+ "farcall-thumb-thumb"}
+ {"Thumb-Thumb farcall with BLX (PIC veneer)" "-Ttext 0x1000 --section-start .foo=0x2001014 --pic-veneer" "-march=armv5t" {farcall-thumb-thumb.s}
+ {{objdump -d farcall-thumb-thumb-blx-pic-veneer.d}}
+ "farcall-thumb-thumb-blx-pic-veneer"}
+ {"Thumb-Thumb farcall M profile (PIC veneer)" "-Ttext 0x1000 --section-start .foo=0x2001014 --pic-veneer" "-march=armv7-m" {farcall-thumb-thumb.s}
+ {{objdump -d farcall-thumb-thumb-m-pic-veneer.d}}
+ "farcall-thumb-thumb-m-pic-veneer"}
+ {"Thumb-Thumb farcall (PIC veneer)" "-Ttext 0x1000 --section-start .foo=0x2001014 --pic-veneer" "-march=armv4t" {farcall-thumb-thumb.s}
+ {{objdump -d farcall-thumb-thumb-pic-veneer.d}}
+ "farcall-thumb-thumb-pic-veneer"}
+
+ {"Thumb-ARM farcall" "-Ttext 0x1c01010 --section-start .foo=0x2001014" "-W" {farcall-thumb-arm.s}
+ {{objdump -d farcall-thumb-arm.d}}
+ "farcall-thumb-arm"}
+ {"Thumb-ARM farcall (BE8)" "-Ttext 0x1c01010 --section-start .foo=0x2001014 -EB --be8" "-W -EB" {farcall-thumb-arm.s}
+ {{objdump -d farcall-thumb-arm.d}}
+ "farcall-thumb-arm-be8"}
+ {"Thumb-ARM farcall (BE)" "-Ttext 0x1c01010 --section-start .foo=0x2001014 -EB" "-W -EB" {farcall-thumb-arm.s}
+ {{objdump -d farcall-thumb-arm.d}}
+ "farcall-thumb-arm-be"}
+ {"Thumb-ARM (short) call" "-Ttext 0x1000 --section-start .foo=0x0002014" "-W" {farcall-thumb-arm-short.s}
+ {{objdump -d farcall-thumb-arm-short.d}}
+ "farcall-thumb-arm-short"}
+ {"Thumb-ARM farcall with BLX" "-Ttext 0x1c01010 --section-start .foo=0x2001014" "-W -march=armv5t" {farcall-thumb-arm.s}
+ {{objdump -d farcall-thumb-arm-blx.d}}
+ "farcall-thumb-arm-blx"}
+ {"Thumb-ARM farcall with BLX (PIC veneer)" "-Ttext 0x1c01010 --section-start .foo=0x2001014 --pic-veneer" "-W -march=armv5t" {farcall-thumb-arm.s}
+ {{objdump -d farcall-thumb-arm-blx-pic-veneer.d}}
+ "farcall-thumb-arm-blx-pic-veneer"}
+ {"Thumb-ARM farcall (PIC veneer)" "-Ttext 0x1c01010 --section-start .foo=0x2001014 --pic-veneer" "-W" {farcall-thumb-arm.s}
+ {{objdump -d farcall-thumb-arm-pic-veneer.d}}
+ "farcall-thumb-arm-pic-veneer"}
+
+ {"Multiple farcalls" "-Ttext 0x1000 --section-start .foo=0x2002020" "" {farcall-mix.s}
+ {{objdump -d farcall-mix.d}}
+ "farcall-mix"}
+ {"Multiple farcalls from several sections" "-Ttext 0x1000 --section-start .mytext=0x2000 --section-start .foo=0x2003020" "" {farcall-mix2.s}
+ {{objdump -d farcall-mix2.d}}
+ "farcall-mix2"}
+
+ {"Default group size" "-Ttext 0x1000 --section-start .foo=0x2003020" "" {farcall-group.s farcall-group2.s}
+ {{objdump -d farcall-group.d}}
+ "farcall-group-default"}
+ {"Group size=2" "-Ttext 0x1000 --section-start .foo=0x2003020 --stub-group-size=2" "" {farcall-group.s farcall-group2.s}
+ {{objdump -d farcall-group-size2.d}}
+ "farcall-group-size2"}
+ {"Group size limit" "-Ttext 0x1000 --section-start .far=0x2003020" "" {farcall-group3.s farcall-group4.s}
+ {{objdump -d farcall-group-limit.d}}
+ "farcall-group-limit"}
+
+ {"Mixed ARM/Thumb dynamic application with farcalls" "tmpdir/mixed-lib.so -T arm-dyn.ld --section-start .far_arm=0x2100000 --section-start .far_thumb=0x2200000" ""
+ {farcall-mixed-app.s}
+ {{objdump -fdw farcall-mixed-app.d} {objdump -Rw farcall-mixed-app.r}
+ {readelf -Ds farcall-mixed-app.sym}}
+ "farcall-mixed-app"}
+ {"Mixed ARM/Thumb arch5 dynamic application with farcalls" "tmpdir/mixed-lib.so -T arm-dyn.ld --use-blx --section-start .far_arm=0x2100000 --section-start .far_thumb=0x2200000" ""
+ {farcall-mixed-app.s}
+ {{objdump -fdw farcall-mixed-app-v5.d} {objdump -Rw farcall-mixed-app.r}
+ {readelf -Ds farcall-mixed-app.sym}}
+ "farcall-mixed-app-v5"}
+
+ {"Mixed ARM/Thumb shared library with long branches (v4t)" "-shared -T arm-lib.ld" "-march=armv4t"
+ {farcall-mixed-lib1.s farcall-mixed-lib2.s}
+ {{objdump -fdw farcall-mixed-lib-v4t.d}}
+ "farcall-mixed-lib.so"}
+
+ {"Mixed ARM/Thumb shared library with long branches (v5t)" "-shared -T arm-lib.ld" "-march=armv5t"
+ {farcall-mixed-lib1.s farcall-mixed-lib2.s}
+ {{objdump -fdw farcall-mixed-lib.d}}
+ "farcall-mixed-lib.so"}
+
+ {"Long branch with mixed text and data" "-T arm.ld" "" {farcall-data.s}
+ {{objdump -dr farcall-data.d}}
+ "farcall-data"}
+
+ {"R_ARM_THM_JUMP24 Relocation veneers: Short 1"
+ "--section-start destsect=0x00009000 --section-start .text=0x8000"
+ "-march=armv7-a -mthumb"
+ {jump-reloc-veneers.s}
+ {{objdump -d jump-reloc-veneers-short1.d}}
+ "jump-reloc-veneers-short1"}
+ {"R_ARM_THM_JUMP24 Relocation veneers: Short 2"
+ "--section-start destsect=0x00900000 --section-start .text=0x8000"
+ "-march=armv7-a -mthumb"
+ {jump-reloc-veneers.s}
+ {{objdump -d jump-reloc-veneers-short2.d}}
+ "jump-reloc-veneers-short2"}
+ {"R_ARM_THM_JUMP24 Relocation veneers: Long"
+ "--section-start destsect=0x09000000 --section-start .text=0x8000"
+ "-march=armv7-a -mthumb"
+ {jump-reloc-veneers.s}
+ {{objdump -d jump-reloc-veneers-long.d}}
+ "jump-reloc-veneers-long"}
+}
+
+run_ld_link_tests $armeabitests
+run_dump_test "attr-merge-wchar-00"
+run_dump_test "attr-merge-wchar-02"
+run_dump_test "attr-merge-wchar-04"
+run_dump_test "attr-merge-wchar-20"
+run_dump_test "attr-merge-wchar-22"
+run_dump_test "attr-merge-wchar-24"
+run_dump_test "attr-merge-wchar-40"
+run_dump_test "attr-merge-wchar-42"
+run_dump_test "attr-merge-wchar-44"
+run_dump_test "attr-merge-wchar-00-nowarn"
+run_dump_test "attr-merge-wchar-02-nowarn"
+run_dump_test "attr-merge-wchar-04-nowarn"
+run_dump_test "attr-merge-wchar-20-nowarn"
+run_dump_test "attr-merge-wchar-22-nowarn"
+run_dump_test "attr-merge-wchar-24-nowarn"
+run_dump_test "attr-merge-wchar-40-nowarn"
+run_dump_test "attr-merge-wchar-42-nowarn"
+run_dump_test "attr-merge-wchar-44-nowarn"
+run_dump_test "farcall-section"
+run_dump_test "attr-merge-unknown-1"
+run_dump_test "attr-merge-unknown-2"
+run_dump_test "attr-merge-unknown-2r"
+run_dump_test "attr-merge-unknown-3"
+run_dump_test "unwind-1"
+run_dump_test "unwind-2"
+run_dump_test "unwind-3"
+run_dump_test "unwind-4"
+run_dump_test "unwind-5"
+run_dump_test "attr-merge-vfp-1"
+run_dump_test "attr-merge-vfp-1r"
+run_dump_test "attr-merge-vfp-2"
+run_dump_test "attr-merge-vfp-2r"
+run_dump_test "attr-merge-vfp-3"
+run_dump_test "attr-merge-vfp-3r"
+run_dump_test "attr-merge-vfp-4"
+run_dump_test "attr-merge-vfp-4r"
+run_dump_test "attr-merge-vfp-5"
+run_dump_test "attr-merge-vfp-5r"
+run_dump_test "attr-merge-vfp-6"
+run_dump_test "attr-merge-vfp-6r"
+run_dump_test "attr-merge-incompatible"
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-lib-plt32.d b/binutils-2.21/ld/testsuite/ld-arm/arm-lib-plt32.d
new file mode 100644
index 0000000..3413dff
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-lib-plt32.d
@@ -0,0 +1,28 @@
+
+tmpdir/arm-lib-plt32.so: file format elf32-(little|big)arm
+architecture: arm, flags 0x00000150:
+HAS_SYMS, DYNAMIC, D_PAGED
+start address 0x.*
+
+Disassembly of section .plt:
+
+.* <.plt>:
+ .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
+ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <lib_func1-0x10>
+ .*: e08fe00e add lr, pc, lr
+ .*: e5bef008 ldr pc, \[lr, #8\]!
+ .*: .*
+ .*: e28fc6.* add ip, pc, #.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]!.*
+Disassembly of section .text:
+
+.* <lib_func1>:
+ .*: e1a0c00d mov ip, sp
+ .*: e92dd800 push {fp, ip, lr, pc}
+ .*: ebfffff9 bl .* <lib_func1-0xc>
+ .*: e89d6800 ldm sp, {fp, sp, lr}
+ .*: e12fff1e bx lr
+
+.* <lib_func2>:
+ .*: e12fff1e bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-lib-plt32.r b/binutils-2.21/ld/testsuite/ld-arm/arm-lib-plt32.r
new file mode 100644
index 0000000..3515539
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-lib-plt32.r
@@ -0,0 +1,8 @@
+
+tmpdir/arm-lib-plt32.so: file format elf32-(little|big)arm
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+.* R_ARM_JUMP_SLOT app_func2
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-lib-plt32.s b/binutils-2.21/ld/testsuite/ld-arm/arm-lib-plt32.s
new file mode 100644
index 0000000..d6c4787
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-lib-plt32.s
@@ -0,0 +1,17 @@
+ .text
+
+ .globl lib_func1
+ .type lib_func1, %function
+lib_func1:
+ mov ip, sp
+ stmdb sp!, {r11, ip, lr, pc}
+ bl app_func2(PLT)
+ ldmia sp, {r11, sp, lr}
+ bx lr
+ .size lib_func1, . - lib_func1
+
+ .globl lib_func2
+ .type lib_func2, %function
+lib_func2:
+ bx lr
+ .size lib_func2, . - lib_func2
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-lib.d b/binutils-2.21/ld/testsuite/ld-arm/arm-lib.d
new file mode 100644
index 0000000..3a1c777
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-lib.d
@@ -0,0 +1,28 @@
+
+tmpdir/arm-lib.so: file format elf32-(little|big)arm
+architecture: arm, flags 0x00000150:
+HAS_SYMS, DYNAMIC, D_PAGED
+start address 0x.*
+
+Disassembly of section .plt:
+
+.* <.plt>:
+ .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
+ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <lib_func1-0x10>
+ .*: e08fe00e add lr, pc, lr
+ .*: e5bef008 ldr pc, \[lr, #8\]!
+ .*: .*
+ .*: e28fc6.* add ip, pc, #.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]!.*
+Disassembly of section .text:
+
+.* <lib_func1>:
+ .*: e1a0c00d mov ip, sp
+ .*: e92dd800 push {fp, ip, lr, pc}
+ .*: ebfffff9 bl .* <lib_func1-0xc>
+ .*: e89d6800 ldm sp, {fp, sp, lr}
+ .*: e12fff1e bx lr
+
+.* <lib_func2>:
+ .*: e12fff1e bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-lib.ld b/binutils-2.21/ld/testsuite/ld-arm/arm-lib.ld
new file mode 100644
index 0000000..c9482c3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-lib.ld
@@ -0,0 +1,187 @@
+/* Script for --shared -z combreloc: shared library, combine & sort relocs */
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+/* Do we need any of these for elf?
+ __DYNAMIC = 0; */
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ . = 0 + SIZEOF_HEADERS;
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ .gnu.version : { *(.gnu.version) }
+ .gnu.version_d : { *(.gnu.version_d) }
+ .gnu.version_r : { *(.gnu.version_r) }
+ .rel.dyn :
+ {
+ *(.rel.init)
+ *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+ *(.rel.fini)
+ *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+ *(.rel.data.rel.ro*)
+ *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+ *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+ *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+ *(.rel.ctors)
+ *(.rel.dtors)
+ *(.rel.got)
+ *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+ }
+ .rela.dyn :
+ {
+ *(.rela.init)
+ *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+ *(.rela.fini)
+ *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+ *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+ *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+ *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+ *(.rela.ctors)
+ *(.rela.dtors)
+ *(.rela.got)
+ *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+ }
+ .rel.plt : { *(.rel.plt) }
+ .rela.plt : { *(.rela.plt) }
+ .init :
+ {
+ KEEP (*(.init))
+ } =0
+ .plt : { *(.plt) }
+ .text :
+ {
+ *(.text .stub .text.* .gnu.linkonce.t.*)
+ KEEP (*(.text.*personality*))
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ *(.glue_7t) *(.glue_7)
+ } =0
+ .fini :
+ {
+ KEEP (*(.fini))
+ } =0
+ PROVIDE (__etext = .);
+ PROVIDE (_etext = .);
+ PROVIDE (etext = .);
+ .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+ .rodata1 : { *(.rodata1) }
+ .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+ PROVIDE_HIDDEN (__exidx_start = .);
+ .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+ PROVIDE_HIDDEN (__exidx_end = .);
+ .eh_frame_hdr : { *(.eh_frame_hdr) }
+ .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) }
+ .gcc_except_table : ONLY_IF_RO { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) }
+ /* Adjust the address for the data segment. We want to adjust up to
+ the same address within the page on the next page up. */
+ . = ALIGN (0x8000) - ((0x8000 - .) & (0x8000 - 1)); . = DATA_SEGMENT_ALIGN (0x8000, 0x1000);
+ /* Exception handling */
+ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) }
+ .gcc_except_table : ONLY_IF_RW { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) }
+ /* Thread Local Storage sections */
+ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
+ .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+ /* Ensure the __preinit_array_start label is properly aligned. We
+ could instead move the label definition inside the section, but
+ the linker would then create the section even if it turns out to
+ be empty, which isn't pretty. */
+ . = ALIGN(32 / 8);
+ .preinit_array : { KEEP (*(.preinit_array)) }
+ .init_array : { KEEP (*(.init_array)) }
+ .fini_array : { KEEP (*(.fini_array)) }
+ .ctors :
+ {
+ /* gcc uses crtbegin.o to find the start of
+ the constructors, so we make sure it is
+ first. Because this is a wildcard, it
+ doesn't matter if the user does not
+ actually link against crtbegin.o; the
+ linker won't look for a file to match a
+ wildcard. The wildcard also means that it
+ doesn't matter which directory crtbegin.o
+ is in. */
+ KEEP (*crtbegin*.o(.ctors))
+ /* We don't want to include the .ctor section from
+ from the crtend.o file until after the sorted ctors.
+ The .ctor section from the crtend file contains the
+ end of ctors marker and it must be last */
+ KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ }
+ .dtors :
+ {
+ KEEP (*crtbegin*.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ }
+ .jcr : { KEEP (*(.jcr)) }
+ .data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) }
+ .dynamic : { *(.dynamic) }
+ .got : { *(.got.plt) *(.got) }
+ .data :
+ {
+ __data_start = . ;
+ *(.data .data.* .gnu.linkonce.d.*)
+ KEEP (*(.gnu.linkonce.d.*personality*))
+ SORT(CONSTRUCTORS)
+ }
+ .data1 : { *(.data1) }
+ _edata = .;
+ PROVIDE (edata = .);
+ __bss_start = .;
+ __bss_start__ = .;
+ .bss :
+ {
+ *(.dynbss)
+ *(.bss .bss.* .gnu.linkonce.b.*)
+ *(COMMON)
+ /* Align here to ensure that the .bss section occupies space up to
+ _end. Align after .bss to ensure correct alignment even if the
+ .bss section disappears because there are no input sections. */
+ . = ALIGN(32 / 8);
+ }
+ . = ALIGN(32 / 8);
+ _end = .;
+ _bss_end__ = . ; __bss_end__ = . ; __end__ = . ;
+ PROVIDE (end = .);
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames) }
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames) }
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
+ .debug_abbrev 0 : { *(.debug_abbrev) }
+ .debug_line 0 : { *(.debug_line) }
+ .debug_frame 0 : { *(.debug_frame) }
+ .debug_str 0 : { *(.debug_str) }
+ .debug_loc 0 : { *(.debug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo) }
+ /* SGI/MIPS DWARF 2 extensions */
+ .debug_weaknames 0 : { *(.debug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames) }
+ .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+ /DISCARD/ : { *(.note.GNU-stack) }
+}
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-lib.r b/binutils-2.21/ld/testsuite/ld-arm/arm-lib.r
new file mode 100644
index 0000000..a7dde47
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-lib.r
@@ -0,0 +1,8 @@
+
+tmpdir/arm-lib.so: file format elf32-(little|big)arm
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+.* R_ARM_JUMP_SLOT app_func2
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-lib.s b/binutils-2.21/ld/testsuite/ld-arm/arm-lib.s
new file mode 100644
index 0000000..949f61c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-lib.s
@@ -0,0 +1,24 @@
+ .text
+
+ .globl lib_func1
+ .type lib_func1, %function
+lib_func1:
+ mov ip, sp
+ stmdb sp!, {r11, ip, lr, pc}
+ bl app_func2
+ ldmia sp, {r11, sp, lr}
+ bx lr
+ .size lib_func1, . - lib_func1
+
+ .globl lib_func2
+ .type lib_func2, %function
+lib_func2:
+ bx lr
+ .size lib_func2, . - lib_func2
+
+ .data
+ .globl data_obj
+ .type data_obj, %object
+data_obj:
+ .long 0
+ .size data_obj, . - data_obj
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-movwt.d b/binutils-2.21/ld/testsuite/ld-arm/arm-movwt.d
new file mode 100644
index 0000000..7d558b7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-movwt.d
@@ -0,0 +1,39 @@
+
+.*: file format.*
+
+Disassembly of section .text:
+
+00008000 <[^>]*>:
+ 8000: e3000000 movw r0, #0
+ 8004: e3411234 movt r1, #4660 ; 0x1234
+ 8008: e3082000 movw r2, #32768 ; 0x8000
+ 800c: e3413233 movt r3, #4659 ; 0x1233
+ 8010: e3004011 movw r4, #17
+ 8014: e3415234 movt r5, #4660 ; 0x1234
+ 8018: e3086011 movw r6, #32785 ; 0x8011
+ 801c: e3417233 movt r7, #4659 ; 0x1233
+
+00008020 <[^>]*>:
+ 8020: f240 0700 movw r7, #0
+ 8024: f2c1 2634 movt r6, #4660 ; 0x1234
+ 8028: f248 0500 movw r5, #32768 ; 0x8000
+ 802c: f2c1 2433 movt r4, #4659 ; 0x1233
+ 8030: f240 0311 movw r3, #17
+ 8034: f2c1 2234 movt r2, #4660 ; 0x1234
+ 8038: f248 0111 movw r1, #32785 ; 0x8011
+ 803c: f2c1 2033 movt r0, #4659 ; 0x1233
+
+Disassembly of section .far:
+
+12340000 <[^>]*>:
+12340000: e3080000 movw r0, #32768 ; 0x8000
+12340004: e34e0dcc movt r0, #60876 ; 0xedcc
+12340008: e3080021 movw r0, #32801 ; 0x8021
+1234000c: e34e0dcc movt r0, #60876 ; 0xedcc
+
+12340010 <[^>]*>:
+12340010: f248 0000 movw r0, #32768 ; 0x8000
+12340014: f6ce 50cc movt r0, #60876 ; 0xedcc
+12340018: f248 0021 movw r0, #32801 ; 0x8021
+1234001c: f6ce 50cc movt r0, #60876 ; 0xedcc
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-movwt.s b/binutils-2.21/ld/testsuite/ld-arm/arm-movwt.s
new file mode 100644
index 0000000..ba8b1c5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-movwt.s
@@ -0,0 +1,44 @@
+ .text
+ .arch armv6t2
+ .syntax unified
+ .global _start
+ .type _start, %function
+_start:
+base1:
+arm1:
+ movw r0, #:lower16:arm2
+ movt r1, #:upper16:arm2
+ movw r2, #:lower16:(arm2 - arm1)
+ movt r3, #:upper16:(arm2 - arm1)
+ movw r4, #:lower16:thumb2
+ movt r5, #:upper16:thumb2
+ movw r6, #:lower16:(thumb2 - arm1)
+ movt r7, #:upper16:(thumb2 - arm1)
+ .thumb
+ .type thumb1, %function
+ .thumb_func
+thumb1:
+ movw r7, #:lower16:arm2
+ movt r6, #:upper16:arm2
+ movw r5, #:lower16:(arm2 - arm1)
+ movt r4, #:upper16:(arm2 - arm1)
+ movw r3, #:lower16:thumb2
+ movt r2, #:upper16:thumb2
+ movw r1, #:lower16:(thumb2 - arm1)
+ movt r0, #:upper16:(thumb2 - arm1)
+
+ .section .far, "ax", %progbits
+ .arm
+arm2:
+ movw r0, #:lower16:(arm1 - arm2)
+ movt r0, #:upper16:(arm1 - arm2)
+ movw r0, #:lower16:(thumb1 - arm2)
+ movt r0, #:upper16:(thumb1 - arm2)
+ .thumb
+ .type thumb2, %function
+ .thumb_func
+thumb2:
+ movw r0, #:lower16:(arm1 - arm2)
+ movt r0, #:upper16:(arm1 - arm2)
+ movw r0, #:lower16:(thumb1 - arm2)
+ movt r0, #:upper16:(thumb1 - arm2)
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-pic-veneer.d b/binutils-2.21/ld/testsuite/ld-arm/arm-pic-veneer.d
new file mode 100644
index 0000000..08e107b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-pic-veneer.d
@@ -0,0 +1,17 @@
+
+.*: file format.*
+
+Disassembly of section .text:
+
+00008000 <_start>:
+ 8000: ea...... b 800. <.*>
+
+00008004 <foo>:
+ 8004: 46c0 nop ; \(mov r8, r8\)
+ 8006: 4770 bx lr
+
+00008008 <__foo_from_arm>:
+ 8008: e59fc004 ldr ip, \[pc, #4\] ; 8014 <__foo_from_arm\+0xc>
+ 800c: e08fc00c add ip, pc, ip
+ 8010: e12fff1c bx ip
+ 8014: fffffff1 .word 0xfffffff1
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-pic-veneer.s b/binutils-2.21/ld/testsuite/ld-arm/arm-pic-veneer.s
new file mode 100644
index 0000000..9e09ed6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-pic-veneer.s
@@ -0,0 +1,14 @@
+.text
+.arm
+.global _start
+.type _start, %function
+_start:
+b foo
+
+.thumb
+.global foo
+.type foo, %function
+foo:
+nop
+bx lr
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-rel31.d b/binutils-2.21/ld/testsuite/ld-arm/arm-rel31.d
new file mode 100644
index 0000000..ac99e92
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-rel31.d
@@ -0,0 +1,7 @@
+
+.*: file format.*
+
+Contents of section .text:
+ 8000 (10000000 fcffff7f 08000080 f4ffffff|00000010 7ffffffc 80000008 fffffff4) .*
+# Ignore .ARM.attributes section
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-rel31.s b/binutils-2.21/ld/testsuite/ld-arm/arm-rel31.s
new file mode 100644
index 0000000..37eee66
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-rel31.s
@@ -0,0 +1,11 @@
+# Test the R_ARM_REL31 relocation
+ .section .before
+ .global _start
+_start:
+ .text
+ .rel31 0, foo
+ .rel31 0, _start
+ .rel31 1, foo
+ .rel31 1, _start
+ .section .after
+foo:
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-static-app.d b/binutils-2.21/ld/testsuite/ld-arm/arm-static-app.d
new file mode 100644
index 0000000..f18f3c6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-static-app.d
@@ -0,0 +1,24 @@
+
+tmpdir/arm-static-app: file format elf32-(little|big)arm
+architecture: arm, flags 0x00000112:
+EXEC_P, HAS_SYMS, D_PAGED
+start address 0x.*
+
+Disassembly of section .text:
+
+.* <_start>:
+ .*: e1a0c00d mov ip, sp
+ .*: e92dd800 push {fp, ip, lr, pc}
+ .*: eb000001 bl .* <app_func>
+ .*: e89d6800 ldm sp, {fp, sp, lr}
+ .*: e12fff1e bx lr
+
+.* <app_func>:
+ .*: e1a0c00d mov ip, sp
+ .*: e92dd800 push {fp, ip, lr, pc}
+ .*: eb000001 bl .* <app_func2>
+ .*: e89d6800 ldm sp, {fp, sp, lr}
+ .*: e12fff1e bx lr
+
+.* <app_func2>:
+ .*: e12fff1e bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-static-app.r b/binutils-2.21/ld/testsuite/ld-arm/arm-static-app.r
new file mode 100644
index 0000000..6034b7f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-static-app.r
@@ -0,0 +1,3 @@
+
+tmpdir/arm-static-app: file format elf32-(little|big)arm
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-static-app.s b/binutils-2.21/ld/testsuite/ld-arm/arm-static-app.s
new file mode 100644
index 0000000..99c579f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-static-app.s
@@ -0,0 +1,20 @@
+ .text
+ .globl _start
+_start:
+ mov ip, sp
+ stmdb sp!, {r11, ip, lr, pc}
+ bl app_func
+ ldmia sp, {r11, sp, lr}
+ bx lr
+
+ .globl app_func
+app_func:
+ mov ip, sp
+ stmdb sp!, {r11, ip, lr, pc}
+ bl app_func2
+ ldmia sp, {r11, sp, lr}
+ bx lr
+
+ .globl app_func2
+app_func2:
+ bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-target1-abs.d b/binutils-2.21/ld/testsuite/ld-arm/arm-target1-abs.d
new file mode 100644
index 0000000..af64e60
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-target1-abs.d
@@ -0,0 +1,7 @@
+
+.*: file format.*
+
+Contents of section .text:
+ 8000 (04800000|00008004) .*
+# Ignore .ARM.attributes section
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-target1-rel.d b/binutils-2.21/ld/testsuite/ld-arm/arm-target1-rel.d
new file mode 100644
index 0000000..fcd6c1a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-target1-rel.d
@@ -0,0 +1,7 @@
+
+.*: file format .*
+
+Contents of section .text:
+ 8000 (04000000|00000004) .*
+# Ignore .ARM.attributes section
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-target1.s b/binutils-2.21/ld/testsuite/ld-arm/arm-target1.s
new file mode 100644
index 0000000..5a7ba91
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-target1.s
@@ -0,0 +1,6 @@
+# Test the R_ARM_TARGET1 relocation
+ .text
+ .global _start
+_start:
+ .word foo(target1)
+foo:
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-target2-abs.d b/binutils-2.21/ld/testsuite/ld-arm/arm-target2-abs.d
new file mode 100644
index 0000000..a86dc01
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-target2-abs.d
@@ -0,0 +1,7 @@
+
+.*: file format.*
+
+Contents of section .text:
+ 8000 (10800000|00008010) (44920000|00009244) (1080efcd|cdef8010) (20b25476|7654b220) .*
+# Ignore .ARM.attributes section
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-target2-got-rel.d b/binutils-2.21/ld/testsuite/ld-arm/arm-target2-got-rel.d
new file mode 100644
index 0000000..3433791
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-target2-got-rel.d
@@ -0,0 +1,9 @@
+
+.*: file format.*
+
+Contents of section .text:
+ 8000 (00100000|00001000) (30220000|00002230) (f80fefcd|cdef0ff8) (04425476|76544204) .*
+Contents of section .got:
+ 9000 (10800000|00008010) .*
+# Ignore .ARM.attributes section
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-target2-rel.d b/binutils-2.21/ld/testsuite/ld-arm/arm-target2-rel.d
new file mode 100644
index 0000000..f812640
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-target2-rel.d
@@ -0,0 +1,7 @@
+
+.*: file format.*
+
+Contents of section .text:
+ 8000 (10000000|00000010) (40120000|00001240) (0800efcd|cdef0008) (14325476|76543214) .*
+# Ignore .ARM.attributes section
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm-target2.s b/binutils-2.21/ld/testsuite/ld-arm/arm-target2.s
new file mode 100644
index 0000000..26c4519
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm-target2.s
@@ -0,0 +1,9 @@
+# Test the R_ARM_TARGET2 relocation
+ .text
+ .global _start
+_start:
+ .word foo(target2)
+ .word foo+0x1234(target2)
+ .word foo+0xcdef0000(target2)
+ .word foo+0x76543210(target2)
+foo:
diff --git a/binutils-2.21/ld/testsuite/ld-arm/arm.ld b/binutils-2.21/ld/testsuite/ld-arm/arm.ld
new file mode 100644
index 0000000..8e3fac2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/arm.ld
@@ -0,0 +1,23 @@
+/* Script for ld testsuite */
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ PROVIDE (__executable_start = 0x8000); . = 0x8000;
+ .text :
+ {
+ *(.before)
+ *(.text)
+ *(.after)
+ *(.ARM.extab*)
+ *(.glue_7)
+ *(.v4_bx)
+ } =0
+ .ARM.exidx : { *(.ARM.exidx*) }
+ . = 0x9000;
+ .got : { *(.got) *(.got.plt)}
+ . = 0x12340000;
+ .far : { *(.far) }
+ .ARM.attribues 0 : { *(.ARM.atttributes) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-arm/armthumb-lib.d b/binutils-2.21/ld/testsuite/ld-arm/armthumb-lib.d
new file mode 100644
index 0000000..6486ad5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/armthumb-lib.d
@@ -0,0 +1,44 @@
+
+tmpdir/armthumb-lib.so: file format elf32-(little|big)arm
+architecture: arm, flags 0x00000150:
+HAS_SYMS, DYNAMIC, D_PAGED
+start address 0x.*
+
+Disassembly of section .plt:
+
+.* <.plt>:
+ .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
+ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <lib_func1-0x1.>
+ .*: e08fe00e add lr, pc, lr
+ .*: e5bef008 ldr pc, \[lr, #8\]!
+ .*: .*
+ .*: e28fc6.* add ip, pc, #.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]!.*
+Disassembly of section .text:
+
+.* <lib_func1>:
+ .*: e1a0c00d mov ip, sp
+ .*: e92dd800 push {fp, ip, lr, pc}
+ .*: ebfffff. bl .* <lib_func1-0x..?>
+ .*: e89d6800 ldm sp, {fp, sp, lr}
+ .*: e12fff1e bx lr
+ .*: e1a00000 nop ; \(mov r0, r0\)
+ .*: e1a00000 nop ; \(mov r0, r0\)
+ .*: e1a00000 nop ; \(mov r0, r0\)
+
+.* <__real_lib_func2>:
+ .*: 4770 bx lr
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+
+.* <lib_func2>:
+ .*: e59fc004 ldr ip, \[pc, #4\] ; .* <lib_func2\+0xc>
+ .*: e08cc00f add ip, ip, pc
+ .*: e12fff1c bx ip
+ .*: ffffffe5 .*
diff --git a/binutils-2.21/ld/testsuite/ld-arm/armthumb-lib.sym b/binutils-2.21/ld/testsuite/ld-arm/armthumb-lib.sym
new file mode 100644
index 0000000..c7f4728
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/armthumb-lib.sym
@@ -0,0 +1,15 @@
+
+Symbol table for image:
+ +Num +Buc: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start__
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+ +.. +..: ........ +4 +OBJECT +GLOBAL +DEFAULT +9 data_obj
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_end__
+ +.. +..: .......0 +20 +FUNC +GLOBAL +DEFAULT +6 lib_func1
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +9 __data_start
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __end__
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +.. +..: 00000000 +0 +NOTYPE +GLOBAL +DEFAULT +UND app_func2
+ +.. +..: .......0 +2 +FUNC +GLOBAL +DEFAULT +6 lib_func2
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _bss_end__
diff --git a/binutils-2.21/ld/testsuite/ld-arm/armv4-bx.d b/binutils-2.21/ld/testsuite/ld-arm/armv4-bx.d
new file mode 100644
index 0000000..b30af8c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/armv4-bx.d
@@ -0,0 +1,19 @@
+
+.*: .*file format elf32-(big|little)arm
+
+Disassembly of section \.text:
+
+00008000 <_start>:
+ 8000: ea000001 b 800c \<__bx_r14\>
+ 8004: ea000003 b 8018 \<__bx_r0\>
+ 8008: 0a000002 beq 8018 \<__bx_r0\>
+
+0000800c <__bx_r14>:
+ 800c: e31e0001 tst lr, #1
+ 8010: 01a0f00e moveq pc, lr
+ 8014: e12fff1e bx lr
+
+00008018 <__bx_r0>:
+ 8018: e3100001 tst r0, #1
+ 801c: 01a0f000 moveq pc, r0
+ 8020: e12fff10 bx r0
diff --git a/binutils-2.21/ld/testsuite/ld-arm/armv4-bx.s b/binutils-2.21/ld/testsuite/ld-arm/armv4-bx.s
new file mode 100644
index 0000000..ef86357
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/armv4-bx.s
@@ -0,0 +1,8 @@
+.text
+.arch armv4
+.global _start
+.type _start, %function
+_start:
+bx lr
+bx r0
+bxeq r0
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-2.attr b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-2.attr
new file mode 100644
index 0000000..e34111b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-2.attr
@@ -0,0 +1,15 @@
+Attribute Section: aeabi
+File Attributes
+ Tag_CPU_name: "ARM7TDMI"
+ Tag_CPU_arch: v4T
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_ABI_PCS_wchar_t: 4
+ Tag_ABI_FP_denormal: Needed
+ Tag_ABI_FP_exceptions: Needed
+ Tag_ABI_FP_number_model: IEEE 754
+ Tag_ABI_align_needed: 8-byte
+ Tag_ABI_align_preserved: 8-byte, except leaf SP
+ Tag_ABI_enum_size: small
+ Tag_ABI_optimization_goals: Aggressive Debug
+ Tag_DIV_use: Allowed in v7-A with integer division extension
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-2a.s b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-2a.s
new file mode 100644
index 0000000..9d9ae18
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-2a.s
@@ -0,0 +1,11 @@
+ .cpu arm7tdmi
+ .fpu softvfp
+ .eabi_attribute 20, 1
+ .eabi_attribute 21, 1
+ .eabi_attribute 23, 3
+ .eabi_attribute 24, 1
+ .eabi_attribute 25, 1
+ .eabi_attribute 26, 1
+ .eabi_attribute 30, 6
+ .eabi_attribute Tag_DIV_use, 1
+ .file "attr-merge-2a.s"
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-2b.s b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-2b.s
new file mode 100644
index 0000000..6aa8da9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-2b.s
@@ -0,0 +1,12 @@
+ .cpu arm7tdmi
+ .fpu softvfp
+ .eabi_attribute 20, 1
+ .eabi_attribute 21, 1
+ .eabi_attribute 23, 3
+ .eabi_attribute 24, 1
+ .eabi_attribute 25, 1
+ .eabi_attribute 26, 1
+ .eabi_attribute 30, 6
+ .eabi_attribute 18, 4
+ .eabi_attribute Tag_DIV_use, 2
+ .file "attr-merge-2b.s"
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-3.attr b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-3.attr
new file mode 100644
index 0000000..b0f8ef9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-3.attr
@@ -0,0 +1,31 @@
+Attribute Section: aeabi
+File Attributes
+ Tag_nodefaults: True
+ Tag_CPU_name: "ARM9E"
+ Tag_CPU_arch: v5T
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-2
+ Tag_FP_arch: VFPv3
+ Tag_WMMX_arch: WMMXv2
+ Tag_Advanced_SIMD_arch: NEONv1
+ Tag_PCS_config: Linux application
+ Tag_ABI_PCS_R9_use: SB
+ Tag_ABI_PCS_RW_data: PC-relative
+ Tag_ABI_PCS_RO_data: PC-relative
+ Tag_ABI_PCS_GOT_use: direct
+ Tag_ABI_PCS_wchar_t: 4
+ Tag_ABI_FP_rounding: Needed
+ Tag_ABI_FP_denormal: Needed
+ Tag_ABI_FP_exceptions: Needed
+ Tag_ABI_FP_user_exceptions: Needed
+ Tag_ABI_FP_number_model: IEEE 754
+ Tag_ABI_align_needed: 8-byte
+ Tag_ABI_align_preserved: 8-byte, except leaf SP
+ Tag_ABI_enum_size: small
+ Tag_ABI_HardFP_use: SP and DP
+ Tag_ABI_VFP_args: VFP registers
+ Tag_CPU_unaligned_access: v6
+ Tag_FP_HP_extension: Allowed
+ Tag_MPextension_use: Allowed
+ Tag_T2EE_use: Allowed
+ Tag_Virtualization_use: TrustZone
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-3a.s b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-3a.s
new file mode 100644
index 0000000..bc7a0c1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-3a.s
@@ -0,0 +1,39 @@
+ .cpu arm7tdmi
+ .fpu softvfp
+ .eabi_attribute Tag_CPU_arch, 2
+ @ .eabi_attribute Tag_CPU_arch_profile, 0x41
+ .eabi_attribute Tag_ARM_ISA_use, 0
+ .eabi_attribute Tag_THUMB_ISA_use, 1
+ .eabi_attribute Tag_VFP_arch, 3
+ .eabi_attribute Tag_WMMX_arch, 1
+ .eabi_attribute Tag_Advanced_SIMD_arch, 0
+ .eabi_attribute Tag_PCS_config, 0
+ .eabi_attribute Tag_ABI_PCS_R9_use, 1
+ .eabi_attribute Tag_ABI_PCS_RW_data, 1
+ .eabi_attribute Tag_ABI_PCS_RO_data, 1
+ .eabi_attribute Tag_ABI_PCS_GOT_use, 1
+ .eabi_attribute Tag_ABI_PCS_wchar_t, 4
+ .eabi_attribute Tag_ABI_FP_rounding, 0
+ .eabi_attribute Tag_ABI_FP_denormal, 1
+ .eabi_attribute Tag_ABI_FP_exceptions, 0
+ .eabi_attribute Tag_ABI_FP_user_exceptions, 0
+ .eabi_attribute Tag_ABI_FP_number_model, 0
+ .eabi_attribute Tag_ABI_align8_needed, 1
+ .eabi_attribute Tag_ABI_align8_preserved, 1
+ .eabi_attribute Tag_ABI_enum_size, 1
+ .eabi_attribute Tag_ABI_HardFP_use, 1
+ .eabi_attribute Tag_ABI_VFP_args, 0
+ @ .eabi_attribute Tag_ABI_WMMX_args, 0
+ @ .eabi_attribute Tag_ABI_optimization_goals, 0
+ @ .eabi_attribute Tag_ABI_FP_optimization_goals, 0
+ @ .eabi_attribute Tag_compatibility, 1, "gnu"
+ .eabi_attribute Tag_CPU_unaligned_access, 0
+ .eabi_attribute Tag_VFP_HP_extension, 0
+ @ .eabi_attribute Tag_ABI_FP_16bit_format, 0
+ .eabi_attribute Tag_nodefaults, 0
+ @ .eabi_attribute Tag_also_compatible_with,
+ .eabi_attribute Tag_T2EE_use, 0
+ .eabi_attribute Tag_conformance, "0"
+ .eabi_attribute Tag_Virtualization_use, 0
+ .eabi_attribute Tag_MPextension_use, 0
+ .eabi_attribute Tag_DIV_use, 0
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-3b.s b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-3b.s
new file mode 100644
index 0000000..681f661
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-3b.s
@@ -0,0 +1,39 @@
+ .cpu arm9e
+ .fpu neon
+ .eabi_attribute Tag_CPU_arch, 3
+ @ .eabi_attribute Tag_CPU_arch_profile, 0x41
+ .eabi_attribute Tag_ARM_ISA_use, 1
+ .eabi_attribute Tag_THUMB_ISA_use, 2
+ .eabi_attribute Tag_VFP_arch, 4
+ .eabi_attribute Tag_WMMX_arch, 2
+ .eabi_attribute Tag_Advanced_SIMD_arch, 1
+ .eabi_attribute Tag_PCS_config, 2
+ .eabi_attribute Tag_ABI_PCS_R9_use, 3
+ .eabi_attribute Tag_ABI_PCS_RW_data, 3
+ .eabi_attribute Tag_ABI_PCS_RO_data, 2
+ .eabi_attribute Tag_ABI_PCS_GOT_use, 2
+ .eabi_attribute Tag_ABI_PCS_wchar_t, 0
+ .eabi_attribute Tag_ABI_FP_rounding, 1
+ .eabi_attribute Tag_ABI_FP_denormal, 2
+ .eabi_attribute Tag_ABI_FP_exceptions, 1
+ .eabi_attribute Tag_ABI_FP_user_exceptions, 1
+ .eabi_attribute Tag_ABI_FP_number_model, 3
+ .eabi_attribute Tag_ABI_align8_needed, 2
+ .eabi_attribute Tag_ABI_align8_preserved, 2
+ .eabi_attribute Tag_ABI_enum_size, 3
+ .eabi_attribute Tag_ABI_HardFP_use, 2
+ .eabi_attribute Tag_ABI_VFP_args, 1
+ @ .eabi_attribute Tag_ABI_WMMX_args, 0
+ @ .eabi_attribute Tag_ABI_optimization_goals, 0
+ @ .eabi_attribute Tag_ABI_FP_optimization_goals, 0
+ @ .eabi_attribute Tag_compatibility, 1, "gnu"
+ .eabi_attribute Tag_CPU_unaligned_access, 1
+ .eabi_attribute Tag_VFP_HP_extension, 1
+ @ .eabi_attribute Tag_ABI_FP_16bit_format, 0
+ .eabi_attribute Tag_nodefaults, 1
+ @ .eabi_attribute Tag_also_compatible_with,
+ .eabi_attribute Tag_T2EE_use, 1
+ .eabi_attribute Tag_conformance, "2.08"
+ .eabi_attribute Tag_Virtualization_use, 1
+ .eabi_attribute Tag_MPextension_use, 1
+ .eabi_attribute Tag_DIV_use, 1
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-4.attr b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-4.attr
new file mode 100644
index 0000000..c8fc7ec
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-4.attr
@@ -0,0 +1,9 @@
+Attribute Section: aeabi
+File Attributes
+ Tag_CPU_name: "ARM7TDMI"
+ Tag_CPU_arch: v4T
+ Tag_CPU_arch_profile: Microcontroller
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_DIV_use: Not allowed
+ Tag_also_compatible_with: v6-M
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-4a.s b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-4a.s
new file mode 100644
index 0000000..b5b77bf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-4a.s
@@ -0,0 +1,7 @@
+ .cpu arm7tdmi
+
+ @ Tag_CPU_arch = v4T
+ .eabi_attribute Tag_CPU_arch, 2
+
+ @ Tag_also_compatible_with = v6-M
+ .eabi_attribute Tag_also_compatible_with, "\006\013"
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-4b.s b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-4b.s
new file mode 100644
index 0000000..d2eb6de
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-4b.s
@@ -0,0 +1,7 @@
+ .cpu cortex-m1
+
+ @ Tag_CPU_arch = v6-M
+ .eabi_attribute Tag_CPU_arch, 11
+
+ @ Tag_also_compatible_with = v4T
+ .eabi_attribute Tag_also_compatible_with, "\006\002"
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-5.attr b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-5.attr
new file mode 100644
index 0000000..f016708
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-5.attr
@@ -0,0 +1,6 @@
+Attribute Section: aeabi
+File Attributes
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_compatibility: flag = 1, vendor = gnu
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-5.s b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-5.s
new file mode 100644
index 0000000..583d253
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-5.s
@@ -0,0 +1 @@
+ .eabi_attribute Tag_compatibility, 1, "gnu"
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-6.attr b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-6.attr
new file mode 100644
index 0000000..9e2324f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-6.attr
@@ -0,0 +1,10 @@
+Attribute Section: aeabi
+File Attributes
+ Tag_CPU_name: "Cortex-A9"
+ Tag_CPU_arch: v7
+ Tag_CPU_arch_profile: Application
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-2
+ Tag_MPextension_use: Allowed
+ Tag_DIV_use: Not allowed
+ Tag_Virtualization_use: TrustZone
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-6a.s b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-6a.s
new file mode 100644
index 0000000..056d8c8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-6a.s
@@ -0,0 +1,4 @@
+ .cpu cortex-a9
+ .fpu softvfp
+ .eabi_attribute 70, 1
+ .file "attr-merge-6a.s"
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-6b.s b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-6b.s
new file mode 100644
index 0000000..b9ef4d2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-6b.s
@@ -0,0 +1,3 @@
+ .cpu cortex-a9
+ .fpu softvfp
+ .file "attr-merge-6b.s"
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-7.attr b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-7.attr
new file mode 100644
index 0000000..9e2324f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-7.attr
@@ -0,0 +1,10 @@
+Attribute Section: aeabi
+File Attributes
+ Tag_CPU_name: "Cortex-A9"
+ Tag_CPU_arch: v7
+ Tag_CPU_arch_profile: Application
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-2
+ Tag_MPextension_use: Allowed
+ Tag_DIV_use: Not allowed
+ Tag_Virtualization_use: TrustZone
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-7a.s b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-7a.s
new file mode 100644
index 0000000..d875d28
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-7a.s
@@ -0,0 +1,4 @@
+ .cpu cortex-a9
+ .fpu softvfp
+ .eabi_attribute 70, 1
+ .file "attr-merge-7a.s"
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-7b.s b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-7b.s
new file mode 100644
index 0000000..2e83e71
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-7b.s
@@ -0,0 +1,4 @@
+ .cpu cortex-a9
+ .fpu softvfp
+ .eabi_attribute Tag_MPextension_use, 1
+ .file "attr-merge-7b.s"
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-arch-1.attr b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-arch-1.attr
new file mode 100644
index 0000000..b39634f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-arch-1.attr
@@ -0,0 +1,7 @@
+Attribute Section: aeabi
+File Attributes
+ Tag_CPU_name: "ARM v7"
+ Tag_CPU_arch: v7
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-2
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-arch-2.attr b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-arch-2.attr
new file mode 100644
index 0000000..ab8916b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-arch-2.attr
@@ -0,0 +1,8 @@
+Attribute Section: aeabi
+File Attributes
+ Tag_CPU_raw_name: "arch_v6k"
+ Tag_CPU_name: "MPCore"
+ Tag_CPU_arch: v6K
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-incompatible.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-incompatible.d
new file mode 100644
index 0000000..41711da
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-incompatible.d
@@ -0,0 +1,5 @@
+#source: attr-merge-incompatibleb.s
+#source: attr-merge-incompatiblea.s
+#as:
+#ld:
+#error: Object has vendor-specific contents that must be processed by the '.+' toolchain
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-incompatiblea.s b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-incompatiblea.s
new file mode 100644
index 0000000..03e0f7e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-incompatiblea.s
@@ -0,0 +1 @@
+ .eabi_attribute Tag_compatibility, 1, "Random Toolchain Vendor"
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-incompatibleb.s b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-incompatibleb.s
new file mode 100644
index 0000000..583d253
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-incompatibleb.s
@@ -0,0 +1 @@
+ .eabi_attribute Tag_compatibility, 1, "gnu"
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-unknown-1.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-unknown-1.d
new file mode 100644
index 0000000..38acff9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-unknown-1.d
@@ -0,0 +1,5 @@
+#source: attr-merge-unknown-1.s
+#source: blank.s
+#as:
+#ld:
+#error: Unknown mandatory EABI object attribute 40
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-unknown-1.s b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-unknown-1.s
new file mode 100644
index 0000000..d2cff1f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-unknown-1.s
@@ -0,0 +1,3 @@
+ @ This attrubute is supposed to be unknown.
+ @ If this number should become known, change it.
+ .eabi_attribute 40, 1
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-unknown-2.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-unknown-2.d
new file mode 100644
index 0000000..5755803
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-unknown-2.d
@@ -0,0 +1,14 @@
+#source: attr-merge-unknown-2.s
+#source: blank.s
+#as:
+#ld:
+#warning: Unknown EABI object attribute 82
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-unknown-2.s b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-unknown-2.s
new file mode 100644
index 0000000..d8d61e0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-unknown-2.s
@@ -0,0 +1,3 @@
+ @ This attrubute is supposed to be unknown.
+ @ If this number should become known, change it.
+ .eabi_attribute 82, 1
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-unknown-2r.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-unknown-2r.d
new file mode 100644
index 0000000..d950b3e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-unknown-2r.d
@@ -0,0 +1,14 @@
+#source: blank.s
+#source: attr-merge-unknown-2.s
+#as:
+#ld:
+#warning: Unknown EABI object attribute 82
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-unknown-3.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-unknown-3.d
new file mode 100644
index 0000000..c210a06
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-unknown-3.d
@@ -0,0 +1,15 @@
+#source: attr-merge-unknown-2.s
+#source: attr-merge-unknown-2.s
+#as:
+#ld:
+#warning: Unknown EABI object attribute 82
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_DIV_use: Not allowed
+ Tag_unknown_82: 1 \(0x1\)
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-1.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-1.d
new file mode 100644
index 0000000..99fc8e4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-1.d
@@ -0,0 +1,14 @@
+#source: attr-merge-vfp-2.s
+#source: attr-merge-vfp-3-d16.s
+#as:
+#ld: -r
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_FP_arch: VFPv3-D16
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-1r.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-1r.d
new file mode 100644
index 0000000..42bfe99
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-1r.d
@@ -0,0 +1,14 @@
+#source: attr-merge-vfp-3-d16.s
+#source: attr-merge-vfp-2.s
+#as:
+#ld: -r
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_FP_arch: VFPv3-D16
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-2.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-2.d
new file mode 100644
index 0000000..3161e11
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-2.d
@@ -0,0 +1,14 @@
+#source: attr-merge-vfp-3.s
+#source: attr-merge-vfp-3-d16.s
+#as:
+#ld: -r
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_FP_arch: VFPv3
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-2.s b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-2.s
new file mode 100644
index 0000000..32657d3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-2.s
@@ -0,0 +1,2 @@
+.fpu vfpv2
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-2r.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-2r.d
new file mode 100644
index 0000000..9c6367f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-2r.d
@@ -0,0 +1,14 @@
+#source: attr-merge-vfp-3-d16.s
+#source: attr-merge-vfp-3.s
+#as:
+#ld: -r
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_FP_arch: VFPv3
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-3-d16.s b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-3-d16.s
new file mode 100644
index 0000000..74729e0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-3-d16.s
@@ -0,0 +1,2 @@
+.fpu vfpv3-d16
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-3.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-3.d
new file mode 100644
index 0000000..9853879
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-3.d
@@ -0,0 +1,15 @@
+#source: attr-merge-vfp-3-d16.s
+#source: attr-merge-vfp-4-d16.s
+#as:
+#ld: -r
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_FP_arch: VFPv4-D16
+ Tag_FP_HP_extension: Allowed
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-3.s b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-3.s
new file mode 100644
index 0000000..4d60323
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-3.s
@@ -0,0 +1,2 @@
+.fpu vfpv3
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-3r.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-3r.d
new file mode 100644
index 0000000..24df972
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-3r.d
@@ -0,0 +1,15 @@
+#source: attr-merge-vfp-4-d16.s
+#source: attr-merge-vfp-3-d16.s
+#as:
+#ld: -r
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_FP_arch: VFPv4-D16
+ Tag_FP_HP_extension: Allowed
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-4-d16.s b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-4-d16.s
new file mode 100644
index 0000000..8d8aedd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-4-d16.s
@@ -0,0 +1,2 @@
+.fpu vfpv4-d16
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-4.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-4.d
new file mode 100644
index 0000000..469fc9b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-4.d
@@ -0,0 +1,15 @@
+#source: attr-merge-vfp-3.s
+#source: attr-merge-vfp-4-d16.s
+#as:
+#ld: -r
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_FP_arch: VFPv4
+ Tag_FP_HP_extension: Allowed
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-4.s b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-4.s
new file mode 100644
index 0000000..190cdc0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-4.s
@@ -0,0 +1,2 @@
+.fpu vfpv4
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-4r.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-4r.d
new file mode 100644
index 0000000..c84e508
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-4r.d
@@ -0,0 +1,15 @@
+#source: attr-merge-vfp-4-d16.s
+#source: attr-merge-vfp-3.s
+#as:
+#ld: -r
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_FP_arch: VFPv4
+ Tag_FP_HP_extension: Allowed
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-5.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-5.d
new file mode 100644
index 0000000..dc0c6ee
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-5.d
@@ -0,0 +1,15 @@
+#source: attr-merge-vfp-4.s
+#source: attr-merge-vfp-4-d16.s
+#as:
+#ld: -r
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_FP_arch: VFPv4
+ Tag_FP_HP_extension: Allowed
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-5r.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-5r.d
new file mode 100644
index 0000000..5e1d23a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-5r.d
@@ -0,0 +1,15 @@
+#source: attr-merge-vfp-4-d16.s
+#source: attr-merge-vfp-4.s
+#as:
+#ld: -r
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_FP_arch: VFPv4
+ Tag_FP_HP_extension: Allowed
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-6.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-6.d
new file mode 100644
index 0000000..ca89181
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-6.d
@@ -0,0 +1,15 @@
+#source: attr-merge-vfp-3.s
+#source: attr-merge-vfpv3xd.s
+#as:
+#ld: -r
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_FP_arch: VFPv3
+ Tag_ABI_HardFP_use: SP and DP
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-6r.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-6r.d
new file mode 100644
index 0000000..f533632
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfp-6r.d
@@ -0,0 +1,15 @@
+#source: attr-merge-vfpv3xd.s
+#source: attr-merge-vfp-3.s
+#as:
+#ld: -r
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_FP_arch: VFPv3
+ Tag_ABI_HardFP_use: SP and DP
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfpv3xd.s b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfpv3xd.s
new file mode 100644
index 0000000..295ca17
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-vfpv3xd.s
@@ -0,0 +1,2 @@
+.fpu vfpv3xd
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-0.s b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-0.s
new file mode 100644
index 0000000..ef19a88
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-0.s
@@ -0,0 +1,11 @@
+ .cpu arm7tdmi
+ .fpu softvfp
+ .eabi_attribute 20, 1
+ .eabi_attribute 21, 1
+ .eabi_attribute 23, 3
+ .eabi_attribute 24, 1
+ .eabi_attribute 25, 1
+ .eabi_attribute 26, 1
+ .eabi_attribute 30, 6
+ .eabi_attribute 18, 0
+ .file "attr-merge-wchar-0.s"
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-00-nowarn.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-00-nowarn.d
new file mode 100644
index 0000000..88e5d25
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-00-nowarn.d
@@ -0,0 +1,22 @@
+#source: attr-merge-wchar-0.s
+#source: attr-merge-wchar-0.s
+#as:
+#ld: -r --no-wchar-size-warning
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_CPU_name: "ARM7TDMI"
+ Tag_CPU_arch: v4T
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_ABI_FP_denormal: Needed
+ Tag_ABI_FP_exceptions: Needed
+ Tag_ABI_FP_number_model: IEEE 754
+ Tag_ABI_align_needed: 8-byte
+ Tag_ABI_align_preserved: 8-byte, except leaf SP
+ Tag_ABI_enum_size: small
+ Tag_ABI_optimization_goals: Aggressive Debug
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-00.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-00.d
new file mode 100644
index 0000000..73df821
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-00.d
@@ -0,0 +1,22 @@
+#source: attr-merge-wchar-0.s
+#source: attr-merge-wchar-0.s
+#as:
+#ld: -r
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_CPU_name: "ARM7TDMI"
+ Tag_CPU_arch: v4T
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_ABI_FP_denormal: Needed
+ Tag_ABI_FP_exceptions: Needed
+ Tag_ABI_FP_number_model: IEEE 754
+ Tag_ABI_align_needed: 8-byte
+ Tag_ABI_align_preserved: 8-byte, except leaf SP
+ Tag_ABI_enum_size: small
+ Tag_ABI_optimization_goals: Aggressive Debug
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-02-nowarn.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-02-nowarn.d
new file mode 100644
index 0000000..f55bf52
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-02-nowarn.d
@@ -0,0 +1,23 @@
+#source: attr-merge-wchar-0.s
+#source: attr-merge-wchar-2.s
+#as:
+#ld: -r --no-wchar-size-warning
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_CPU_name: "ARM7TDMI"
+ Tag_CPU_arch: v4T
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_ABI_PCS_wchar_t: 2
+ Tag_ABI_FP_denormal: Needed
+ Tag_ABI_FP_exceptions: Needed
+ Tag_ABI_FP_number_model: IEEE 754
+ Tag_ABI_align_needed: 8-byte
+ Tag_ABI_align_preserved: 8-byte, except leaf SP
+ Tag_ABI_enum_size: small
+ Tag_ABI_optimization_goals: Aggressive Debug
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-02.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-02.d
new file mode 100644
index 0000000..500b6a9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-02.d
@@ -0,0 +1,23 @@
+#source: attr-merge-wchar-0.s
+#source: attr-merge-wchar-2.s
+#as:
+#ld: -r
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_CPU_name: "ARM7TDMI"
+ Tag_CPU_arch: v4T
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_ABI_PCS_wchar_t: 2
+ Tag_ABI_FP_denormal: Needed
+ Tag_ABI_FP_exceptions: Needed
+ Tag_ABI_FP_number_model: IEEE 754
+ Tag_ABI_align_needed: 8-byte
+ Tag_ABI_align_preserved: 8-byte, except leaf SP
+ Tag_ABI_enum_size: small
+ Tag_ABI_optimization_goals: Aggressive Debug
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-04-nowarn.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-04-nowarn.d
new file mode 100644
index 0000000..c1d4efd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-04-nowarn.d
@@ -0,0 +1,23 @@
+#source: attr-merge-wchar-0.s
+#source: attr-merge-wchar-4.s
+#as:
+#ld: -r --no-wchar-size-warning
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_CPU_name: "ARM7TDMI"
+ Tag_CPU_arch: v4T
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_ABI_PCS_wchar_t: 4
+ Tag_ABI_FP_denormal: Needed
+ Tag_ABI_FP_exceptions: Needed
+ Tag_ABI_FP_number_model: IEEE 754
+ Tag_ABI_align_needed: 8-byte
+ Tag_ABI_align_preserved: 8-byte, except leaf SP
+ Tag_ABI_enum_size: small
+ Tag_ABI_optimization_goals: Aggressive Debug
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-04.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-04.d
new file mode 100644
index 0000000..cd11980
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-04.d
@@ -0,0 +1,23 @@
+#source: attr-merge-wchar-0.s
+#source: attr-merge-wchar-4.s
+#as:
+#ld: -r
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_CPU_name: "ARM7TDMI"
+ Tag_CPU_arch: v4T
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_ABI_PCS_wchar_t: 4
+ Tag_ABI_FP_denormal: Needed
+ Tag_ABI_FP_exceptions: Needed
+ Tag_ABI_FP_number_model: IEEE 754
+ Tag_ABI_align_needed: 8-byte
+ Tag_ABI_align_preserved: 8-byte, except leaf SP
+ Tag_ABI_enum_size: small
+ Tag_ABI_optimization_goals: Aggressive Debug
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-2.s b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-2.s
new file mode 100644
index 0000000..4b3b96b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-2.s
@@ -0,0 +1,11 @@
+ .cpu arm7tdmi
+ .fpu softvfp
+ .eabi_attribute 20, 1
+ .eabi_attribute 21, 1
+ .eabi_attribute 23, 3
+ .eabi_attribute 24, 1
+ .eabi_attribute 25, 1
+ .eabi_attribute 26, 1
+ .eabi_attribute 30, 6
+ .eabi_attribute 18, 2
+ .file "attr-merge-wchar-2.s"
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-20-nowarn.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-20-nowarn.d
new file mode 100644
index 0000000..b60e458
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-20-nowarn.d
@@ -0,0 +1,23 @@
+#source: attr-merge-wchar-2.s
+#source: attr-merge-wchar-0.s
+#as:
+#ld: -r --no-wchar-size-warning
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_CPU_name: "ARM7TDMI"
+ Tag_CPU_arch: v4T
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_ABI_PCS_wchar_t: 2
+ Tag_ABI_FP_denormal: Needed
+ Tag_ABI_FP_exceptions: Needed
+ Tag_ABI_FP_number_model: IEEE 754
+ Tag_ABI_align_needed: 8-byte
+ Tag_ABI_align_preserved: 8-byte, except leaf SP
+ Tag_ABI_enum_size: small
+ Tag_ABI_optimization_goals: Aggressive Debug
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-20.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-20.d
new file mode 100644
index 0000000..96738b1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-20.d
@@ -0,0 +1,23 @@
+#source: attr-merge-wchar-2.s
+#source: attr-merge-wchar-0.s
+#as:
+#ld: -r
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_CPU_name: "ARM7TDMI"
+ Tag_CPU_arch: v4T
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_ABI_PCS_wchar_t: 2
+ Tag_ABI_FP_denormal: Needed
+ Tag_ABI_FP_exceptions: Needed
+ Tag_ABI_FP_number_model: IEEE 754
+ Tag_ABI_align_needed: 8-byte
+ Tag_ABI_align_preserved: 8-byte, except leaf SP
+ Tag_ABI_enum_size: small
+ Tag_ABI_optimization_goals: Aggressive Debug
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-22-nowarn.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-22-nowarn.d
new file mode 100644
index 0000000..22539de
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-22-nowarn.d
@@ -0,0 +1,23 @@
+#source: attr-merge-wchar-2.s
+#source: attr-merge-wchar-2.s
+#as:
+#ld: -r --no-wchar-size-warning
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_CPU_name: "ARM7TDMI"
+ Tag_CPU_arch: v4T
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_ABI_PCS_wchar_t: 2
+ Tag_ABI_FP_denormal: Needed
+ Tag_ABI_FP_exceptions: Needed
+ Tag_ABI_FP_number_model: IEEE 754
+ Tag_ABI_align_needed: 8-byte
+ Tag_ABI_align_preserved: 8-byte, except leaf SP
+ Tag_ABI_enum_size: small
+ Tag_ABI_optimization_goals: Aggressive Debug
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-22.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-22.d
new file mode 100644
index 0000000..c0e67dc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-22.d
@@ -0,0 +1,23 @@
+#source: attr-merge-wchar-2.s
+#source: attr-merge-wchar-2.s
+#as:
+#ld: -r
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_CPU_name: "ARM7TDMI"
+ Tag_CPU_arch: v4T
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_ABI_PCS_wchar_t: 2
+ Tag_ABI_FP_denormal: Needed
+ Tag_ABI_FP_exceptions: Needed
+ Tag_ABI_FP_number_model: IEEE 754
+ Tag_ABI_align_needed: 8-byte
+ Tag_ABI_align_preserved: 8-byte, except leaf SP
+ Tag_ABI_enum_size: small
+ Tag_ABI_optimization_goals: Aggressive Debug
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-24-nowarn.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-24-nowarn.d
new file mode 100644
index 0000000..e7f2566
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-24-nowarn.d
@@ -0,0 +1,23 @@
+#source: attr-merge-wchar-2.s
+#source: attr-merge-wchar-4.s
+#as:
+#ld: -r --no-wchar-size-warning
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_CPU_name: "ARM7TDMI"
+ Tag_CPU_arch: v4T
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_ABI_PCS_wchar_t: 2
+ Tag_ABI_FP_denormal: Needed
+ Tag_ABI_FP_exceptions: Needed
+ Tag_ABI_FP_number_model: IEEE 754
+ Tag_ABI_align_needed: 8-byte
+ Tag_ABI_align_preserved: 8-byte, except leaf SP
+ Tag_ABI_enum_size: small
+ Tag_ABI_optimization_goals: Aggressive Debug
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-24.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-24.d
new file mode 100644
index 0000000..46d6c66
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-24.d
@@ -0,0 +1,5 @@
+#source: attr-merge-wchar-2.s
+#source: attr-merge-wchar-4.s
+#as:
+#ld: -r
+#warning: warning: .* uses 4-byte wchar_t yet the output is to use 2-byte wchar_t; use of wchar_t values across objects may fail
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-4.s b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-4.s
new file mode 100644
index 0000000..fdd03f9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-4.s
@@ -0,0 +1,11 @@
+ .cpu arm7tdmi
+ .fpu softvfp
+ .eabi_attribute 20, 1
+ .eabi_attribute 21, 1
+ .eabi_attribute 23, 3
+ .eabi_attribute 24, 1
+ .eabi_attribute 25, 1
+ .eabi_attribute 26, 1
+ .eabi_attribute 30, 6
+ .eabi_attribute 18, 4
+ .file "attr-merge-wchar-4.s"
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-40-nowarn.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-40-nowarn.d
new file mode 100644
index 0000000..efeafcc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-40-nowarn.d
@@ -0,0 +1,23 @@
+#source: attr-merge-wchar-4.s
+#source: attr-merge-wchar-0.s
+#as:
+#ld: -r --no-wchar-size-warning
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_CPU_name: "ARM7TDMI"
+ Tag_CPU_arch: v4T
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_ABI_PCS_wchar_t: 4
+ Tag_ABI_FP_denormal: Needed
+ Tag_ABI_FP_exceptions: Needed
+ Tag_ABI_FP_number_model: IEEE 754
+ Tag_ABI_align_needed: 8-byte
+ Tag_ABI_align_preserved: 8-byte, except leaf SP
+ Tag_ABI_enum_size: small
+ Tag_ABI_optimization_goals: Aggressive Debug
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-40.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-40.d
new file mode 100644
index 0000000..39cb58a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-40.d
@@ -0,0 +1,23 @@
+#source: attr-merge-wchar-4.s
+#source: attr-merge-wchar-0.s
+#as:
+#ld: -r
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_CPU_name: "ARM7TDMI"
+ Tag_CPU_arch: v4T
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_ABI_PCS_wchar_t: 4
+ Tag_ABI_FP_denormal: Needed
+ Tag_ABI_FP_exceptions: Needed
+ Tag_ABI_FP_number_model: IEEE 754
+ Tag_ABI_align_needed: 8-byte
+ Tag_ABI_align_preserved: 8-byte, except leaf SP
+ Tag_ABI_enum_size: small
+ Tag_ABI_optimization_goals: Aggressive Debug
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-42-nowarn.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-42-nowarn.d
new file mode 100644
index 0000000..b989f35
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-42-nowarn.d
@@ -0,0 +1,23 @@
+#source: attr-merge-wchar-4.s
+#source: attr-merge-wchar-2.s
+#as:
+#ld: -r --no-wchar-size-warning
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_CPU_name: "ARM7TDMI"
+ Tag_CPU_arch: v4T
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_ABI_PCS_wchar_t: 4
+ Tag_ABI_FP_denormal: Needed
+ Tag_ABI_FP_exceptions: Needed
+ Tag_ABI_FP_number_model: IEEE 754
+ Tag_ABI_align_needed: 8-byte
+ Tag_ABI_align_preserved: 8-byte, except leaf SP
+ Tag_ABI_enum_size: small
+ Tag_ABI_optimization_goals: Aggressive Debug
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-42.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-42.d
new file mode 100644
index 0000000..c2aca5e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-42.d
@@ -0,0 +1,5 @@
+#source: attr-merge-wchar-4.s
+#source: attr-merge-wchar-2.s
+#as:
+#ld: -r
+#warning: warning: .* uses 2-byte wchar_t yet the output is to use 4-byte wchar_t; use of wchar_t values across objects may fail
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-44-nowarn.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-44-nowarn.d
new file mode 100644
index 0000000..988dd6e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-44-nowarn.d
@@ -0,0 +1,23 @@
+#source: attr-merge-wchar-4.s
+#source: attr-merge-wchar-4.s
+#as:
+#ld: -r --no-wchar-size-warning
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_CPU_name: "ARM7TDMI"
+ Tag_CPU_arch: v4T
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_ABI_PCS_wchar_t: 4
+ Tag_ABI_FP_denormal: Needed
+ Tag_ABI_FP_exceptions: Needed
+ Tag_ABI_FP_number_model: IEEE 754
+ Tag_ABI_align_needed: 8-byte
+ Tag_ABI_align_preserved: 8-byte, except leaf SP
+ Tag_ABI_enum_size: small
+ Tag_ABI_optimization_goals: Aggressive Debug
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-44.d b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-44.d
new file mode 100644
index 0000000..acda7e7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge-wchar-44.d
@@ -0,0 +1,23 @@
+#source: attr-merge-wchar-4.s
+#source: attr-merge-wchar-4.s
+#as:
+#ld: -r
+#readelf: -A
+# This test is only valid on ELF based ports.
+# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Attribute Section: aeabi
+File Attributes
+ Tag_CPU_name: "ARM7TDMI"
+ Tag_CPU_arch: v4T
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_ABI_PCS_wchar_t: 4
+ Tag_ABI_FP_denormal: Needed
+ Tag_ABI_FP_exceptions: Needed
+ Tag_ABI_FP_number_model: IEEE 754
+ Tag_ABI_align_needed: 8-byte
+ Tag_ABI_align_preserved: 8-byte, except leaf SP
+ Tag_ABI_enum_size: small
+ Tag_ABI_optimization_goals: Aggressive Debug
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge.attr b/binutils-2.21/ld/testsuite/ld-arm/attr-merge.attr
new file mode 100644
index 0000000..f07930e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge.attr
@@ -0,0 +1,15 @@
+Attribute Section: aeabi
+File Attributes
+ Tag_CPU_name: "ARM7TDMI"
+ Tag_CPU_arch: v4T
+ Tag_ARM_ISA_use: Yes
+ Tag_THUMB_ISA_use: Thumb-1
+ Tag_ABI_PCS_wchar_t: 4
+ Tag_ABI_FP_denormal: Needed
+ Tag_ABI_FP_exceptions: Needed
+ Tag_ABI_FP_number_model: IEEE 754
+ Tag_ABI_align_needed: 8-byte
+ Tag_ABI_align_preserved: 8-byte, except leaf SP
+ Tag_ABI_enum_size: small
+ Tag_ABI_optimization_goals: Aggressive Debug
+ Tag_DIV_use: Not allowed
diff --git a/binutils-2.21/ld/testsuite/ld-arm/attr-merge.s b/binutils-2.21/ld/testsuite/ld-arm/attr-merge.s
new file mode 100644
index 0000000..b56f6e3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/attr-merge.s
@@ -0,0 +1,11 @@
+ .cpu arm7tdmi
+ .fpu softvfp
+ .eabi_attribute 20, 1
+ .eabi_attribute 21, 1
+ .eabi_attribute 23, 3
+ .eabi_attribute 24, 1
+ .eabi_attribute 25, 1
+ .eabi_attribute 26, 1
+ .eabi_attribute 30, 6
+ .eabi_attribute 18, 4
+ .file "attr-merge.s"
diff --git a/binutils-2.21/ld/testsuite/ld-arm/blank.s b/binutils-2.21/ld/testsuite/ld-arm/blank.s
new file mode 100644
index 0000000..1d22054
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/blank.s
@@ -0,0 +1 @@
+@ this file left intentionally blank
diff --git a/binutils-2.21/ld/testsuite/ld-arm/callweak-2.d b/binutils-2.21/ld/testsuite/ld-arm/callweak-2.d
new file mode 100644
index 0000000..d401479
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/callweak-2.d
@@ -0,0 +1,15 @@
+
+.*: file format.*
+
+Disassembly of section .far:
+
+12340000 <[^>]*>:
+12340000: e320f000 nop \{0\}
+12340004: 0320f000 nopeq \{0\}
+
+12340008 <[^>]*>:
+12340008: f3af 8000 nop.w
+1234000c: 2000 movs r0, #0
+1234000e: f3af 8000 nop.w
+12340012: 4770 bx lr
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/callweak-2.s b/binutils-2.21/ld/testsuite/ld-arm/callweak-2.s
new file mode 100644
index 0000000..af4f026
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/callweak-2.s
@@ -0,0 +1,17 @@
+ .syntax unified
+ .arch armv6t2
+ .weak bar
+ .section .far, "ax", %progbits
+ .global _start
+ .type _start, %function
+_start:
+ bl bar
+ bleq bar
+ .thumb
+ .type foo, %function
+ .thumb_func
+foo:
+ bl bar
+ movs r0, #0
+ bl bar
+ bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/callweak.d b/binutils-2.21/ld/testsuite/ld-arm/callweak.d
new file mode 100644
index 0000000..89cb4a5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/callweak.d
@@ -0,0 +1,17 @@
+
+.*: file format.*
+
+Disassembly of section .far:
+
+12340000 <[^>]*>:
+12340000: e1a00000 nop ; \(mov r0, r0\)
+12340004: 01a00000 moveq r0, r0
+
+12340008 <[^>]*>:
+12340008: e000 b.n 1234000c <[^>]*>
+1234000a: bf00 nop
+1234000c: 2000 movs r0, #0
+1234000e: e000 b.n 12340012 <[^>]*>
+12340010: bf00 nop
+12340012: 4770 bx lr
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/callweak.s b/binutils-2.21/ld/testsuite/ld-arm/callweak.s
new file mode 100644
index 0000000..b9bcd1b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/callweak.s
@@ -0,0 +1,17 @@
+ .syntax unified
+ .arch armv6
+ .weak bar
+ .section .far, "ax", %progbits
+ .global _start
+ .type _start, %function
+_start:
+ bl bar
+ bleq bar
+ .thumb
+ .type foo, %function
+ .thumb_func
+foo:
+ bl bar
+ movs r0, #0
+ bl bar
+ bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-arm-target.s b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-arm-target.s
new file mode 100644
index 0000000..d5174c4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-arm-target.s
@@ -0,0 +1,9 @@
+ .syntax unified
+ .cpu cortex-a8
+ .text
+ .arm
+ .align 3
+ .global targetfn
+ .type targetfn, %function
+targetfn:
+ bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-far-1.s b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-far-1.s
new file mode 100644
index 0000000..09d3583
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-far-1.s
@@ -0,0 +1,8 @@
+ .syntax unified
+ .thumb
+ .globl two
+two:
+ bl far_fn
+ .rept 0x200000
+ .long 0
+ .endr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-far-2.s b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-far-2.s
new file mode 100644
index 0000000..22fd40f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-far-2.s
@@ -0,0 +1,20 @@
+ .syntax unified
+ .thumb
+three:
+ bl far_fn1
+ bl far_fn2
+ .rept 1016
+ .long 0
+ .endr
+ nop
+label1:
+ eor.w r0, r1, r2
+ beq.w label1
+
+ eor.w r0, r1, r2
+
+ eor.w r0, r1, r2
+ b.w label1
+
+ eor.w r0, r1, r2
+ eor.w r0, r1, r2
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-far.d b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-far.d
new file mode 100644
index 0000000..e327ac1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-far.d
@@ -0,0 +1,40 @@
+
+.*: file format .*
+
+
+Disassembly of section \.text:
+
+00000000 <two>:
+ 0: f000 c802 blx 800008 <__far_fn_from_thumb>
+ ...
+#...
+00800008 <__far_fn_from_thumb>:
+ 800008: e51ff004 ldr pc, \[pc, #-4\] ; 80000c <__far_fn_from_thumb\+0x4>
+ 80000c: 7fff0000 .word 0x7fff0000
+
+00800010 <three>:
+ 800010: f001 e802 blx 801018 <__far_fn1_from_thumb>
+ 800014: f001 e804 blx 801020 <__far_fn2_from_thumb>
+ ...
+ 800ff8: bf00 nop
+
+00800ffa <label1>:
+ 800ffa: ea81 0002 eor.w r0, r1, r2
+ 800ffe: f000 b813 b.w 801028 <__far_fn2_from_thumb\+0x8>
+ 801002: ea81 0002 eor.w r0, r1, r2
+ 801006: ea81 0002 eor.w r0, r1, r2
+ 80100a: f7ff bff6 b.w 800ffa <label1>
+ 80100e: ea81 0002 eor.w r0, r1, r2
+ 801012: ea81 0002 eor.w r0, r1, r2
+ ...
+
+00801018 <__far_fn1_from_thumb>:
+ 801018: e51ff004 ldr pc, \[pc, #-4\] ; 80101c <__far_fn1_from_thumb\+0x4>
+ 80101c: 80000000 .word 0x80000000
+
+00801020 <__far_fn2_from_thumb>:
+ 801020: e51ff004 ldr pc, \[pc, #-4\] ; 801024 <__far_fn2_from_thumb\+0x4>
+ 801024: 80000004 .word 0x80000004
+ 801028: d001 beq.n 80102e <__far_fn2_from_thumb\+0xe>
+ 80102a: f7ff bfea b.w 801002 <label1\+0x8>
+ 80102e: f7ff bfe4 b.w 800ffa <label1>
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b-plt.d b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b-plt.d
new file mode 100644
index 0000000..59efecb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b-plt.d
@@ -0,0 +1,30 @@
+
+.*
+
+
+Disassembly of section \.plt:
+
+00008000 <\.plt>:
+ 8000: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
+ 8004: e59fe004 ldr lr, \[pc, #4\] ; 8010 <foo-0xfe0>
+ 8008: e08fe00e add lr, pc, lr
+ 800c: e5bef008 ldr pc, \[lr, #8\]!
+ 8010: 00000ffc \.word 0x00000ffc
+ 8014: 4778 bx pc
+ 8016: 46c0 nop ; \(mov r8, r8\)
+ 8018: e28fc600 add ip, pc, #0
+ 801c: e28cca00 add ip, ip, #0
+ 8020: e5bcfff8 ldr pc, \[ip, #4088\]! ; 0xff8
+
+Disassembly of section \.text:
+
+00008ff0 <foo>:
+ 8ff0: 46c0 nop ; \(mov r8, r8\)
+ 8ff2: f240 0000 movw r0, #0
+ 8ff6: f240 0000 movw r0, #0
+ 8ffa: f240 0000 movw r0, #0
+ 8ffe: f000 b803 b\.w 9008 <foo\+0x18>
+ 9002: 0000 movs r0, r0
+ 9004: 0000 movs r0, r0
+ 9006: 0000 movs r0, r0
+ 9008: f7ff b804 b\.w 8014 <foo-0xfdc>
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b-plt.s b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b-plt.s
new file mode 100644
index 0000000..afd340d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b-plt.s
@@ -0,0 +1,10 @@
+ .syntax unified
+ .globl foo
+ .type foo,%function
+ .thumb_func
+foo:
+ nop @ 0x00
+ movw r0,#0 @ 0x02
+ movw r0,#0 @ 0x06
+ movw r0,#0 @ 0x0a
+ b.w bar(PLT) @ 0x0e
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b-rel-arm.d b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b-rel-arm.d
new file mode 100644
index 0000000..195a51b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b-rel-arm.d
@@ -0,0 +1,83 @@
+
+.*: file format .*
+
+
+Disassembly of section \.text:
+
+00008f00 <targetfn>:
+ 8f00: e12fff1e bx lr
+ 8f04: e320f000 nop \{0\}
+
+00008f08 <_start>:
+ 8f08: bf00 nop
+ 8f0a: eb01 0002 add\.w r0, r1, r2
+ 8f0e: f000 b87f b\.w 9010 <__targetfn_from_thumb>
+ 8f12: eb01 0002 add\.w r0, r1, r2
+ 8f16: f000 b87b b\.w 9010 <__targetfn_from_thumb>
+ 8f1a: eb01 0002 add\.w r0, r1, r2
+ 8f1e: f000 b877 b\.w 9010 <__targetfn_from_thumb>
+ 8f22: eb01 0002 add\.w r0, r1, r2
+ 8f26: f000 b873 b\.w 9010 <__targetfn_from_thumb>
+ 8f2a: eb01 0002 add\.w r0, r1, r2
+ 8f2e: f000 b86f b\.w 9010 <__targetfn_from_thumb>
+ 8f32: eb01 0002 add\.w r0, r1, r2
+ 8f36: f000 b86b b\.w 9010 <__targetfn_from_thumb>
+ 8f3a: eb01 0002 add\.w r0, r1, r2
+ 8f3e: f000 b867 b\.w 9010 <__targetfn_from_thumb>
+ 8f42: eb01 0002 add\.w r0, r1, r2
+ 8f46: f000 b863 b\.w 9010 <__targetfn_from_thumb>
+ 8f4a: eb01 0002 add\.w r0, r1, r2
+ 8f4e: f000 b85f b\.w 9010 <__targetfn_from_thumb>
+ 8f52: eb01 0002 add\.w r0, r1, r2
+ 8f56: f000 b85b b\.w 9010 <__targetfn_from_thumb>
+ 8f5a: eb01 0002 add\.w r0, r1, r2
+ 8f5e: f000 b857 b\.w 9010 <__targetfn_from_thumb>
+ 8f62: eb01 0002 add\.w r0, r1, r2
+ 8f66: f000 b853 b\.w 9010 <__targetfn_from_thumb>
+ 8f6a: eb01 0002 add\.w r0, r1, r2
+ 8f6e: f000 b84f b\.w 9010 <__targetfn_from_thumb>
+ 8f72: eb01 0002 add\.w r0, r1, r2
+ 8f76: f000 b84b b\.w 9010 <__targetfn_from_thumb>
+ 8f7a: eb01 0002 add\.w r0, r1, r2
+ 8f7e: f000 b847 b\.w 9010 <__targetfn_from_thumb>
+ 8f82: eb01 0002 add\.w r0, r1, r2
+ 8f86: f000 b843 b\.w 9010 <__targetfn_from_thumb>
+ 8f8a: eb01 0002 add\.w r0, r1, r2
+ 8f8e: f000 b83f b\.w 9010 <__targetfn_from_thumb>
+ 8f92: eb01 0002 add\.w r0, r1, r2
+ 8f96: f000 b83b b\.w 9010 <__targetfn_from_thumb>
+ 8f9a: eb01 0002 add\.w r0, r1, r2
+ 8f9e: f000 b837 b\.w 9010 <__targetfn_from_thumb>
+ 8fa2: eb01 0002 add\.w r0, r1, r2
+ 8fa6: f000 b833 b\.w 9010 <__targetfn_from_thumb>
+ 8faa: eb01 0002 add\.w r0, r1, r2
+ 8fae: f000 b82f b\.w 9010 <__targetfn_from_thumb>
+ 8fb2: eb01 0002 add\.w r0, r1, r2
+ 8fb6: f000 b82b b\.w 9010 <__targetfn_from_thumb>
+ 8fba: eb01 0002 add\.w r0, r1, r2
+ 8fbe: f000 b827 b\.w 9010 <__targetfn_from_thumb>
+ 8fc2: eb01 0002 add\.w r0, r1, r2
+ 8fc6: f000 b823 b\.w 9010 <__targetfn_from_thumb>
+ 8fca: eb01 0002 add\.w r0, r1, r2
+ 8fce: f000 b81f b\.w 9010 <__targetfn_from_thumb>
+ 8fd2: eb01 0002 add\.w r0, r1, r2
+ 8fd6: f000 b81b b\.w 9010 <__targetfn_from_thumb>
+ 8fda: eb01 0002 add\.w r0, r1, r2
+ 8fde: f000 b817 b\.w 9010 <__targetfn_from_thumb>
+ 8fe2: eb01 0002 add\.w r0, r1, r2
+ 8fe6: f000 b813 b\.w 9010 <__targetfn_from_thumb>
+ 8fea: eb01 0002 add\.w r0, r1, r2
+ 8fee: f000 b80f b\.w 9010 <__targetfn_from_thumb>
+ 8ff2: eb01 0002 add\.w r0, r1, r2
+ 8ff6: f000 b80b b\.w 9010 <__targetfn_from_thumb>
+ 8ffa: eb01 0002 add\.w r0, r1, r2
+ 8ffe: f000 b807 b\.w 9010 <__targetfn_from_thumb>
+ 9002: eb01 0002 add\.w r0, r1, r2
+ 9006: f000 b803 b\.w 9010 <__targetfn_from_thumb>
+ 900a: 4770 bx lr
+ 900c: f3af 8000 nop\.w
+
+00009010 <__targetfn_from_thumb>:
+ 9010: 4778 bx pc
+ 9012: 46c0 nop ; \(mov r8, r8\)
+ 9014: eaffffb9 b 8f00 <targetfn>
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b-rel-thumb.d b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b-rel-thumb.d
new file mode 100644
index 0000000..60a254b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b-rel-thumb.d
@@ -0,0 +1,80 @@
+
+.*: file format .*
+
+
+Disassembly of section \.text:
+
+00008f00 <targetfn>:
+ 8f00: 4770 bx lr
+ 8f02: bf00 nop
+ 8f04: f3af 8000 nop\.w
+
+00008f08 <_start>:
+ 8f08: bf00 nop
+ 8f0a: eb01 0002 add\.w r0, r1, r2
+ 8f0e: f7ff bff7 b\.w 8f00 <targetfn>
+ 8f12: eb01 0002 add\.w r0, r1, r2
+ 8f16: f7ff bff3 b\.w 8f00 <targetfn>
+ 8f1a: eb01 0002 add\.w r0, r1, r2
+ 8f1e: f7ff bfef b\.w 8f00 <targetfn>
+ 8f22: eb01 0002 add\.w r0, r1, r2
+ 8f26: f7ff bfeb b\.w 8f00 <targetfn>
+ 8f2a: eb01 0002 add\.w r0, r1, r2
+ 8f2e: f7ff bfe7 b\.w 8f00 <targetfn>
+ 8f32: eb01 0002 add\.w r0, r1, r2
+ 8f36: f7ff bfe3 b\.w 8f00 <targetfn>
+ 8f3a: eb01 0002 add\.w r0, r1, r2
+ 8f3e: f7ff bfdf b\.w 8f00 <targetfn>
+ 8f42: eb01 0002 add\.w r0, r1, r2
+ 8f46: f7ff bfdb b\.w 8f00 <targetfn>
+ 8f4a: eb01 0002 add\.w r0, r1, r2
+ 8f4e: f7ff bfd7 b\.w 8f00 <targetfn>
+ 8f52: eb01 0002 add\.w r0, r1, r2
+ 8f56: f7ff bfd3 b\.w 8f00 <targetfn>
+ 8f5a: eb01 0002 add\.w r0, r1, r2
+ 8f5e: f7ff bfcf b\.w 8f00 <targetfn>
+ 8f62: eb01 0002 add\.w r0, r1, r2
+ 8f66: f7ff bfcb b\.w 8f00 <targetfn>
+ 8f6a: eb01 0002 add\.w r0, r1, r2
+ 8f6e: f7ff bfc7 b\.w 8f00 <targetfn>
+ 8f72: eb01 0002 add\.w r0, r1, r2
+ 8f76: f7ff bfc3 b\.w 8f00 <targetfn>
+ 8f7a: eb01 0002 add\.w r0, r1, r2
+ 8f7e: f7ff bfbf b\.w 8f00 <targetfn>
+ 8f82: eb01 0002 add\.w r0, r1, r2
+ 8f86: f7ff bfbb b\.w 8f00 <targetfn>
+ 8f8a: eb01 0002 add\.w r0, r1, r2
+ 8f8e: f7ff bfb7 b\.w 8f00 <targetfn>
+ 8f92: eb01 0002 add\.w r0, r1, r2
+ 8f96: f7ff bfb3 b\.w 8f00 <targetfn>
+ 8f9a: eb01 0002 add\.w r0, r1, r2
+ 8f9e: f7ff bfaf b\.w 8f00 <targetfn>
+ 8fa2: eb01 0002 add\.w r0, r1, r2
+ 8fa6: f7ff bfab b\.w 8f00 <targetfn>
+ 8faa: eb01 0002 add\.w r0, r1, r2
+ 8fae: f7ff bfa7 b\.w 8f00 <targetfn>
+ 8fb2: eb01 0002 add\.w r0, r1, r2
+ 8fb6: f7ff bfa3 b\.w 8f00 <targetfn>
+ 8fba: eb01 0002 add\.w r0, r1, r2
+ 8fbe: f7ff bf9f b\.w 8f00 <targetfn>
+ 8fc2: eb01 0002 add\.w r0, r1, r2
+ 8fc6: f7ff bf9b b\.w 8f00 <targetfn>
+ 8fca: eb01 0002 add\.w r0, r1, r2
+ 8fce: f7ff bf97 b\.w 8f00 <targetfn>
+ 8fd2: eb01 0002 add\.w r0, r1, r2
+ 8fd6: f7ff bf93 b\.w 8f00 <targetfn>
+ 8fda: eb01 0002 add\.w r0, r1, r2
+ 8fde: f7ff bf8f b\.w 8f00 <targetfn>
+ 8fe2: eb01 0002 add\.w r0, r1, r2
+ 8fe6: f7ff bf8b b\.w 8f00 <targetfn>
+ 8fea: eb01 0002 add\.w r0, r1, r2
+ 8fee: f7ff bf87 b\.w 8f00 <targetfn>
+ 8ff2: eb01 0002 add\.w r0, r1, r2
+ 8ff6: f7ff bf83 b\.w 8f00 <targetfn>
+ 8ffa: eb01 0002 add\.w r0, r1, r2
+ 8ffe: f000 b807 b\.w 9010 <_start\+0x108>
+ 9002: eb01 0002 add\.w r0, r1, r2
+ 9006: f7ff bf7b b\.w 8f00 <targetfn>
+ 900a: 4770 bx lr
+ 900c: f3af 8000 nop\.w
+ 9010: f7ff bf76 b\.w 8f00 <targetfn>
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b-rel.s b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b-rel.s
new file mode 100644
index 0000000..3ec95ab
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b-rel.s
@@ -0,0 +1,41 @@
+ .syntax unified
+ .cpu cortex-a8
+ .thumb
+ .text
+
+ @ expansion 32 bytes
+ .macro bw1
+1:
+ add.w r0, r1, r2
+ b.w targetfn
+ add.w r0, r1, r2
+ b.w targetfn
+ add.w r0, r1, r2
+ b.w targetfn
+ add.w r0, r1, r2
+ b.w targetfn
+ .endm
+
+ @ expansion 128 bytes
+ .macro bw2
+ bw1
+ bw1
+ bw1
+ bw1
+ .endm
+
+ .align 3
+ .global _start
+ .thumb
+ .thumb_func
+ .type _start, %function
+_start:
+ nop
+
+ @ If branching to an ARM destination, we *don't* want to create a
+ @ Cortex-A8 stub: the Thumb-to-ARM stub will suffice (and we need it
+ @ to change mode).
+ bw2
+ bw2
+
+ bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b.d b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b.d
new file mode 100644
index 0000000..b2d4481
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b.d
@@ -0,0 +1,75 @@
+
+.*: file format .*
+
+
+Disassembly of section \.text:
+
+00008f00 <_start>:
+ 8f00: bf00 nop
+ 8f02: eb01 0002 add\.w r0, r1, r2
+ 8f06: f7ff bffc b\.w 8f02 <_start\+0x2>
+ 8f0a: eb01 0002 add\.w r0, r1, r2
+ 8f0e: f7ff bff8 b\.w 8f02 <_start\+0x2>
+ 8f12: eb01 0002 add\.w r0, r1, r2
+ 8f16: f7ff bff4 b\.w 8f02 <_start\+0x2>
+ 8f1a: eb01 0002 add\.w r0, r1, r2
+ 8f1e: f7ff bff0 b\.w 8f02 <_start\+0x2>
+ 8f22: eb01 0002 add\.w r0, r1, r2
+ 8f26: f7ff bffc b\.w 8f22 <_start\+0x22>
+ 8f2a: eb01 0002 add\.w r0, r1, r2
+ 8f2e: f7ff bff8 b\.w 8f22 <_start\+0x22>
+ 8f32: eb01 0002 add\.w r0, r1, r2
+ 8f36: f7ff bff4 b\.w 8f22 <_start\+0x22>
+ 8f3a: eb01 0002 add\.w r0, r1, r2
+ 8f3e: f7ff bff0 b\.w 8f22 <_start\+0x22>
+ 8f42: eb01 0002 add\.w r0, r1, r2
+ 8f46: f7ff bffc b\.w 8f42 <_start\+0x42>
+ 8f4a: eb01 0002 add\.w r0, r1, r2
+ 8f4e: f7ff bff8 b\.w 8f42 <_start\+0x42>
+ 8f52: eb01 0002 add\.w r0, r1, r2
+ 8f56: f7ff bff4 b\.w 8f42 <_start\+0x42>
+ 8f5a: eb01 0002 add\.w r0, r1, r2
+ 8f5e: f7ff bff0 b\.w 8f42 <_start\+0x42>
+ 8f62: eb01 0002 add\.w r0, r1, r2
+ 8f66: f7ff bffc b\.w 8f62 <_start\+0x62>
+ 8f6a: eb01 0002 add\.w r0, r1, r2
+ 8f6e: f7ff bff8 b\.w 8f62 <_start\+0x62>
+ 8f72: eb01 0002 add\.w r0, r1, r2
+ 8f76: f7ff bff4 b\.w 8f62 <_start\+0x62>
+ 8f7a: eb01 0002 add\.w r0, r1, r2
+ 8f7e: f7ff bff0 b\.w 8f62 <_start\+0x62>
+ 8f82: eb01 0002 add\.w r0, r1, r2
+ 8f86: f7ff bffc b\.w 8f82 <_start\+0x82>
+ 8f8a: eb01 0002 add\.w r0, r1, r2
+ 8f8e: f7ff bff8 b\.w 8f82 <_start\+0x82>
+ 8f92: eb01 0002 add\.w r0, r1, r2
+ 8f96: f7ff bff4 b\.w 8f82 <_start\+0x82>
+ 8f9a: eb01 0002 add\.w r0, r1, r2
+ 8f9e: f7ff bff0 b\.w 8f82 <_start\+0x82>
+ 8fa2: eb01 0002 add\.w r0, r1, r2
+ 8fa6: f7ff bffc b\.w 8fa2 <_start\+0xa2>
+ 8faa: eb01 0002 add\.w r0, r1, r2
+ 8fae: f7ff bff8 b\.w 8fa2 <_start\+0xa2>
+ 8fb2: eb01 0002 add\.w r0, r1, r2
+ 8fb6: f7ff bff4 b\.w 8fa2 <_start\+0xa2>
+ 8fba: eb01 0002 add\.w r0, r1, r2
+ 8fbe: f7ff bff0 b\.w 8fa2 <_start\+0xa2>
+ 8fc2: eb01 0002 add\.w r0, r1, r2
+ 8fc6: f7ff bffc b\.w 8fc2 <_start\+0xc2>
+ 8fca: eb01 0002 add\.w r0, r1, r2
+ 8fce: f7ff bff8 b\.w 8fc2 <_start\+0xc2>
+ 8fd2: eb01 0002 add\.w r0, r1, r2
+ 8fd6: f7ff bff4 b\.w 8fc2 <_start\+0xc2>
+ 8fda: eb01 0002 add\.w r0, r1, r2
+ 8fde: f7ff bff0 b\.w 8fc2 <_start\+0xc2>
+ 8fe2: eb01 0002 add\.w r0, r1, r2
+ 8fe6: f7ff bffc b\.w 8fe2 <_start\+0xe2>
+ 8fea: eb01 0002 add\.w r0, r1, r2
+ 8fee: f7ff bff8 b\.w 8fe2 <_start\+0xe2>
+ 8ff2: eb01 0002 add\.w r0, r1, r2
+ 8ff6: f7ff bff4 b\.w 8fe2 <_start\+0xe2>
+ 8ffa: eb01 0002 add\.w r0, r1, r2
+ 8ffe: f000 b803 b\.w 9008 <_start\+0x108>
+ 9002: 4770 bx lr
+ 9004: f3af 8000 nop\.w
+ 9008: f7ff bfeb b\.w 8fe2 <_start\+0xe2>
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b.s b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b.s
new file mode 100644
index 0000000..c0f21ac
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-b.s
@@ -0,0 +1,39 @@
+ .syntax unified
+ .cpu cortex-a8
+ .thumb
+ .text
+
+ @ expansion 32 bytes
+ .macro bw1
+1:
+ add.w r0, r1, r2
+ b.w 1b
+ add.w r0, r1, r2
+ b.w 1b
+ add.w r0, r1, r2
+ b.w 1b
+ add.w r0, r1, r2
+ b.w 1b
+ .endm
+
+ @ expansion 128 bytes
+ .macro bw2
+ bw1
+ bw1
+ bw1
+ bw1
+ .endm
+
+ .align 3
+ .global _start
+ .thumb
+ .thumb_func
+ .type _start, %function
+_start:
+ nop
+
+ @ Trigger Cortex-A8 erratum workaround with b instructions.
+ bw2
+ bw2
+
+ bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bcc-plt.d b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bcc-plt.d
new file mode 100644
index 0000000..3d064b6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bcc-plt.d
@@ -0,0 +1,32 @@
+
+.*
+
+
+Disassembly of section \.plt:
+
+00008000 <\.plt>:
+ 8000: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
+ 8004: e59fe004 ldr lr, \[pc, #4\] ; 8010 <foo-0xfe0>
+ 8008: e08fe00e add lr, pc, lr
+ 800c: e5bef008 ldr pc, \[lr, #8\]!
+ 8010: 00001004 \.word 0x00001004
+ 8014: 4778 bx pc
+ 8016: 46c0 nop ; \(mov r8, r8\)
+ 8018: e28fc600 add ip, pc, #0
+ 801c: e28cca01 add ip, ip, #4096 ; 0x1000
+ 8020: e5bcf000 ldr pc, \[ip\]!
+
+Disassembly of section \.text:
+
+00008ff0 <foo>:
+ 8ff0: 46c0 nop ; \(mov r8, r8\)
+ 8ff2: f240 0000 movw r0, #0
+ 8ff6: f240 0000 movw r0, #0
+ 8ffa: f240 0000 movw r0, #0
+ 8ffe: f000 b803 b\.w 9008 <foo\+0x18>
+ 9002: 0000 movs r0, r0
+ 9004: 0000 movs r0, r0
+ 9006: 0000 movs r0, r0
+ 9008: d001 beq\.n 900e <foo\+0x1e>
+ 900a: f7ff bffa b\.w 9002 <foo\+0x12>
+ 900e: f7ff b801 b\.w 8014 <foo-0xfdc>
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bcc-plt.s b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bcc-plt.s
new file mode 100644
index 0000000..026fa95
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bcc-plt.s
@@ -0,0 +1,10 @@
+ .syntax unified
+ .globl foo
+ .type foo,%function
+ .thumb_func
+foo:
+ nop @ 0x00
+ movw r0,#0 @ 0x02
+ movw r0,#0 @ 0x06
+ movw r0,#0 @ 0x0a
+ beq.w bar(PLT) @ 0x0e
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bcc-rel-thumb.d b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bcc-rel-thumb.d
new file mode 100644
index 0000000..27a7fd4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bcc-rel-thumb.d
@@ -0,0 +1,82 @@
+
+.*: file format .*
+
+
+Disassembly of section \.text:
+
+00008f00 <targetfn>:
+ 8f00: 4770 bx lr
+ 8f02: bf00 nop
+ 8f04: f3af 8000 nop\.w
+
+00008f08 <_start>:
+ 8f08: bf00 nop
+ 8f0a: eb01 0002 add\.w r0, r1, r2
+ 8f0e: f53f aff7 bmi\.w 8f00 <targetfn>
+ 8f12: eb01 0002 add\.w r0, r1, r2
+ 8f16: f53f aff3 bmi\.w 8f00 <targetfn>
+ 8f1a: eb01 0002 add\.w r0, r1, r2
+ 8f1e: f53f afef bmi\.w 8f00 <targetfn>
+ 8f22: eb01 0002 add\.w r0, r1, r2
+ 8f26: f53f afeb bmi\.w 8f00 <targetfn>
+ 8f2a: eb01 0002 add\.w r0, r1, r2
+ 8f2e: f53f afe7 bmi\.w 8f00 <targetfn>
+ 8f32: eb01 0002 add\.w r0, r1, r2
+ 8f36: f53f afe3 bmi\.w 8f00 <targetfn>
+ 8f3a: eb01 0002 add\.w r0, r1, r2
+ 8f3e: f53f afdf bmi\.w 8f00 <targetfn>
+ 8f42: eb01 0002 add\.w r0, r1, r2
+ 8f46: f53f afdb bmi\.w 8f00 <targetfn>
+ 8f4a: eb01 0002 add\.w r0, r1, r2
+ 8f4e: f53f afd7 bmi\.w 8f00 <targetfn>
+ 8f52: eb01 0002 add\.w r0, r1, r2
+ 8f56: f53f afd3 bmi\.w 8f00 <targetfn>
+ 8f5a: eb01 0002 add\.w r0, r1, r2
+ 8f5e: f53f afcf bmi\.w 8f00 <targetfn>
+ 8f62: eb01 0002 add\.w r0, r1, r2
+ 8f66: f53f afcb bmi\.w 8f00 <targetfn>
+ 8f6a: eb01 0002 add\.w r0, r1, r2
+ 8f6e: f53f afc7 bmi\.w 8f00 <targetfn>
+ 8f72: eb01 0002 add\.w r0, r1, r2
+ 8f76: f53f afc3 bmi\.w 8f00 <targetfn>
+ 8f7a: eb01 0002 add\.w r0, r1, r2
+ 8f7e: f53f afbf bmi\.w 8f00 <targetfn>
+ 8f82: eb01 0002 add\.w r0, r1, r2
+ 8f86: f53f afbb bmi\.w 8f00 <targetfn>
+ 8f8a: eb01 0002 add\.w r0, r1, r2
+ 8f8e: f53f afb7 bmi\.w 8f00 <targetfn>
+ 8f92: eb01 0002 add\.w r0, r1, r2
+ 8f96: f53f afb3 bmi\.w 8f00 <targetfn>
+ 8f9a: eb01 0002 add\.w r0, r1, r2
+ 8f9e: f53f afaf bmi\.w 8f00 <targetfn>
+ 8fa2: eb01 0002 add\.w r0, r1, r2
+ 8fa6: f53f afab bmi\.w 8f00 <targetfn>
+ 8faa: eb01 0002 add\.w r0, r1, r2
+ 8fae: f53f afa7 bmi\.w 8f00 <targetfn>
+ 8fb2: eb01 0002 add\.w r0, r1, r2
+ 8fb6: f53f afa3 bmi\.w 8f00 <targetfn>
+ 8fba: eb01 0002 add\.w r0, r1, r2
+ 8fbe: f53f af9f bmi\.w 8f00 <targetfn>
+ 8fc2: eb01 0002 add\.w r0, r1, r2
+ 8fc6: f53f af9b bmi\.w 8f00 <targetfn>
+ 8fca: eb01 0002 add\.w r0, r1, r2
+ 8fce: f53f af97 bmi\.w 8f00 <targetfn>
+ 8fd2: eb01 0002 add\.w r0, r1, r2
+ 8fd6: f53f af93 bmi\.w 8f00 <targetfn>
+ 8fda: eb01 0002 add\.w r0, r1, r2
+ 8fde: f53f af8f bmi\.w 8f00 <targetfn>
+ 8fe2: eb01 0002 add\.w r0, r1, r2
+ 8fe6: f53f af8b bmi\.w 8f00 <targetfn>
+ 8fea: eb01 0002 add\.w r0, r1, r2
+ 8fee: f53f af87 bmi\.w 8f00 <targetfn>
+ 8ff2: eb01 0002 add\.w r0, r1, r2
+ 8ff6: f53f af83 bmi\.w 8f00 <targetfn>
+ 8ffa: eb01 0002 add\.w r0, r1, r2
+ 8ffe: f000 b807 b\.w 9010 <_start\+0x108>
+ 9002: eb01 0002 add\.w r0, r1, r2
+ 9006: f53f af7b bmi\.w 8f00 <targetfn>
+ 900a: 4770 bx lr
+ 900c: f3af 8000 nop\.w
+ 9010: d401 bmi\.n 9016 <_start\+0x10e>
+ 9012: f7ff bff6 b\.w 9002 <_start\+0xfa>
+ 9016: f7ff bf73 b\.w 8f00 <targetfn>
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bcc-rel.s b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bcc-rel.s
new file mode 100644
index 0000000..b7b9451
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bcc-rel.s
@@ -0,0 +1,38 @@
+ .syntax unified
+ .cpu cortex-a8
+ .thumb
+ .text
+
+ @ expansion 32 bytes
+ .macro bw1
+1:
+ add.w r0, r1, r2
+ bmi.w targetfn
+ add.w r0, r1, r2
+ bmi.w targetfn
+ add.w r0, r1, r2
+ bmi.w targetfn
+ add.w r0, r1, r2
+ bmi.w targetfn
+ .endm
+
+ @ expansion 128 bytes
+ .macro bw2
+ bw1
+ bw1
+ bw1
+ bw1
+ .endm
+
+ .align 3
+ .global _start
+ .thumb
+ .thumb_func
+ .type _start, %function
+_start:
+ nop
+
+ bw2
+ bw2
+
+ bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bcc.d b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bcc.d
new file mode 100644
index 0000000..44b8110
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bcc.d
@@ -0,0 +1,77 @@
+
+.*: file format .*
+
+
+Disassembly of section \.text:
+
+00008f00 <_start>:
+ 8f00: bf00 nop
+ 8f02: eb01 0002 add\.w r0, r1, r2
+ 8f06: f4ff affc bcc\.w 8f02 <_start\+0x2>
+ 8f0a: eb01 0002 add\.w r0, r1, r2
+ 8f0e: f4ff aff8 bcc\.w 8f02 <_start\+0x2>
+ 8f12: eb01 0002 add\.w r0, r1, r2
+ 8f16: f4ff aff4 bcc\.w 8f02 <_start\+0x2>
+ 8f1a: eb01 0002 add\.w r0, r1, r2
+ 8f1e: f4ff aff0 bcc\.w 8f02 <_start\+0x2>
+ 8f22: eb01 0002 add\.w r0, r1, r2
+ 8f26: f4ff affc bcc\.w 8f22 <_start\+0x22>
+ 8f2a: eb01 0002 add\.w r0, r1, r2
+ 8f2e: f4ff aff8 bcc\.w 8f22 <_start\+0x22>
+ 8f32: eb01 0002 add\.w r0, r1, r2
+ 8f36: f4ff aff4 bcc\.w 8f22 <_start\+0x22>
+ 8f3a: eb01 0002 add\.w r0, r1, r2
+ 8f3e: f4ff aff0 bcc\.w 8f22 <_start\+0x22>
+ 8f42: eb01 0002 add\.w r0, r1, r2
+ 8f46: f4ff affc bcc\.w 8f42 <_start\+0x42>
+ 8f4a: eb01 0002 add\.w r0, r1, r2
+ 8f4e: f4ff aff8 bcc\.w 8f42 <_start\+0x42>
+ 8f52: eb01 0002 add\.w r0, r1, r2
+ 8f56: f4ff aff4 bcc\.w 8f42 <_start\+0x42>
+ 8f5a: eb01 0002 add\.w r0, r1, r2
+ 8f5e: f4ff aff0 bcc\.w 8f42 <_start\+0x42>
+ 8f62: eb01 0002 add\.w r0, r1, r2
+ 8f66: f4ff affc bcc\.w 8f62 <_start\+0x62>
+ 8f6a: eb01 0002 add\.w r0, r1, r2
+ 8f6e: f4ff aff8 bcc\.w 8f62 <_start\+0x62>
+ 8f72: eb01 0002 add\.w r0, r1, r2
+ 8f76: f4ff aff4 bcc\.w 8f62 <_start\+0x62>
+ 8f7a: eb01 0002 add\.w r0, r1, r2
+ 8f7e: f4ff aff0 bcc\.w 8f62 <_start\+0x62>
+ 8f82: eb01 0002 add\.w r0, r1, r2
+ 8f86: f4ff affc bcc\.w 8f82 <_start\+0x82>
+ 8f8a: eb01 0002 add\.w r0, r1, r2
+ 8f8e: f4ff aff8 bcc\.w 8f82 <_start\+0x82>
+ 8f92: eb01 0002 add\.w r0, r1, r2
+ 8f96: f4ff aff4 bcc\.w 8f82 <_start\+0x82>
+ 8f9a: eb01 0002 add\.w r0, r1, r2
+ 8f9e: f4ff aff0 bcc\.w 8f82 <_start\+0x82>
+ 8fa2: eb01 0002 add\.w r0, r1, r2
+ 8fa6: f4ff affc bcc\.w 8fa2 <_start\+0xa2>
+ 8faa: eb01 0002 add\.w r0, r1, r2
+ 8fae: f4ff aff8 bcc\.w 8fa2 <_start\+0xa2>
+ 8fb2: eb01 0002 add\.w r0, r1, r2
+ 8fb6: f4ff aff4 bcc\.w 8fa2 <_start\+0xa2>
+ 8fba: eb01 0002 add\.w r0, r1, r2
+ 8fbe: f4ff aff0 bcc\.w 8fa2 <_start\+0xa2>
+ 8fc2: eb01 0002 add\.w r0, r1, r2
+ 8fc6: f4ff affc bcc\.w 8fc2 <_start\+0xc2>
+ 8fca: eb01 0002 add\.w r0, r1, r2
+ 8fce: f4ff aff8 bcc\.w 8fc2 <_start\+0xc2>
+ 8fd2: eb01 0002 add\.w r0, r1, r2
+ 8fd6: f4ff aff4 bcc\.w 8fc2 <_start\+0xc2>
+ 8fda: eb01 0002 add\.w r0, r1, r2
+ 8fde: f4ff aff0 bcc\.w 8fc2 <_start\+0xc2>
+ 8fe2: eb01 0002 add\.w r0, r1, r2
+ 8fe6: f4ff affc bcc\.w 8fe2 <_start\+0xe2>
+ 8fea: eb01 0002 add\.w r0, r1, r2
+ 8fee: f4ff aff8 bcc\.w 8fe2 <_start\+0xe2>
+ 8ff2: eb01 0002 add\.w r0, r1, r2
+ 8ff6: f4ff aff4 bcc\.w 8fe2 <_start\+0xe2>
+ 8ffa: eb01 0002 add\.w r0, r1, r2
+ 8ffe: f000 b803 b\.w 9008 <_start\+0x108>
+ 9002: 4770 bx lr
+ 9004: f3af 8000 nop\.w
+ 9008: d301 bcc\.n 900e <_start\+0x10e>
+ 900a: f7ff bffa b\.w 9002 <_start\+0x102>
+ 900e: f7ff bfe8 b\.w 8fe2 <_start\+0xe2>
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bcc.s b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bcc.s
new file mode 100644
index 0000000..8a667a3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bcc.s
@@ -0,0 +1,39 @@
+ .syntax unified
+ .cpu cortex-a8
+ .thumb
+ .text
+
+ @ expansion 32 bytes
+ .macro bw1
+1:
+ add.w r0, r1, r2
+ bcc.w 1b
+ add.w r0, r1, r2
+ bcc.w 1b
+ add.w r0, r1, r2
+ bcc.w 1b
+ add.w r0, r1, r2
+ bcc.w 1b
+ .endm
+
+ @ expansion 128 bytes
+ .macro bw2
+ bw1
+ bw1
+ bw1
+ bw1
+ .endm
+
+ .align 3
+ .global _start
+ .thumb
+ .thumb_func
+ .type _start, %function
+_start:
+ nop
+
+ @ Trigger Cortex-A8 erratum workaround with conditional branches.
+ bw2
+ bw2
+
+ bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl-plt.d b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl-plt.d
new file mode 100644
index 0000000..17cb9ac
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl-plt.d
@@ -0,0 +1,28 @@
+
+.*
+
+
+Disassembly of section \.plt:
+
+00008000 <\.plt>:
+ 8000: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
+ 8004: e59fe004 ldr lr, \[pc, #4\] ; 8010 <foo-0xfe0>
+ 8008: e08fe00e add lr, pc, lr
+ 800c: e5bef008 ldr pc, \[lr, #8\]!
+ 8010: 00000ffc \.word 0x00000ffc
+ 8014: e28fc600 add ip, pc, #0
+ 8018: e28cca00 add ip, ip, #0
+ 801c: e5bcfffc ldr pc, \[ip, #4092\]! ; 0xffc
+
+Disassembly of section \.text:
+
+00008ff0 <foo>:
+ 8ff0: 46c0 nop ; \(mov r8, r8\)
+ 8ff2: f240 0000 movw r0, #0
+ 8ff6: f240 0000 movw r0, #0
+ 8ffa: f240 0000 movw r0, #0
+ 8ffe: f000 e804 blx 9008 <foo\+0x18>
+ 9002: 0000 movs r0, r0
+ 9004: 0000 movs r0, r0
+ 9006: 0000 movs r0, r0
+ 9008: eafffc01 b 8014 <foo-0xfdc>
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl-plt.s b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl-plt.s
new file mode 100644
index 0000000..7f2db05
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl-plt.s
@@ -0,0 +1,10 @@
+ .syntax unified
+ .globl foo
+ .type foo,%function
+ .thumb_func
+foo:
+ nop @ 0x00
+ movw r0,#0 @ 0x02
+ movw r0,#0 @ 0x06
+ movw r0,#0 @ 0x0a
+ bl bar(PLT) @ 0x0e
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl-rel-arm.d b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl-rel-arm.d
new file mode 100644
index 0000000..fcb3bab
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl-rel-arm.d
@@ -0,0 +1,79 @@
+
+.*: file format .*
+
+
+Disassembly of section \.text:
+
+00008f00 <targetfn>:
+ 8f00: e12fff1e bx lr
+ 8f04: e320f000 nop \{0\}
+
+00008f08 <_start>:
+ 8f08: bf00 nop
+ 8f0a: eb01 0002 add\.w r0, r1, r2
+ 8f0e: f7ff eff8 blx 8f00 <targetfn>
+ 8f12: eb01 0002 add\.w r0, r1, r2
+ 8f16: f7ff eff4 blx 8f00 <targetfn>
+ 8f1a: eb01 0002 add\.w r0, r1, r2
+ 8f1e: f7ff eff0 blx 8f00 <targetfn>
+ 8f22: eb01 0002 add\.w r0, r1, r2
+ 8f26: f7ff efec blx 8f00 <targetfn>
+ 8f2a: eb01 0002 add\.w r0, r1, r2
+ 8f2e: f7ff efe8 blx 8f00 <targetfn>
+ 8f32: eb01 0002 add\.w r0, r1, r2
+ 8f36: f7ff efe4 blx 8f00 <targetfn>
+ 8f3a: eb01 0002 add\.w r0, r1, r2
+ 8f3e: f7ff efe0 blx 8f00 <targetfn>
+ 8f42: eb01 0002 add\.w r0, r1, r2
+ 8f46: f7ff efdc blx 8f00 <targetfn>
+ 8f4a: eb01 0002 add\.w r0, r1, r2
+ 8f4e: f7ff efd8 blx 8f00 <targetfn>
+ 8f52: eb01 0002 add\.w r0, r1, r2
+ 8f56: f7ff efd4 blx 8f00 <targetfn>
+ 8f5a: eb01 0002 add\.w r0, r1, r2
+ 8f5e: f7ff efd0 blx 8f00 <targetfn>
+ 8f62: eb01 0002 add\.w r0, r1, r2
+ 8f66: f7ff efcc blx 8f00 <targetfn>
+ 8f6a: eb01 0002 add\.w r0, r1, r2
+ 8f6e: f7ff efc8 blx 8f00 <targetfn>
+ 8f72: eb01 0002 add\.w r0, r1, r2
+ 8f76: f7ff efc4 blx 8f00 <targetfn>
+ 8f7a: eb01 0002 add\.w r0, r1, r2
+ 8f7e: f7ff efc0 blx 8f00 <targetfn>
+ 8f82: eb01 0002 add\.w r0, r1, r2
+ 8f86: f7ff efbc blx 8f00 <targetfn>
+ 8f8a: eb01 0002 add\.w r0, r1, r2
+ 8f8e: f7ff efb8 blx 8f00 <targetfn>
+ 8f92: eb01 0002 add\.w r0, r1, r2
+ 8f96: f7ff efb4 blx 8f00 <targetfn>
+ 8f9a: eb01 0002 add\.w r0, r1, r2
+ 8f9e: f7ff efb0 blx 8f00 <targetfn>
+ 8fa2: eb01 0002 add\.w r0, r1, r2
+ 8fa6: f7ff efac blx 8f00 <targetfn>
+ 8faa: eb01 0002 add\.w r0, r1, r2
+ 8fae: f7ff efa8 blx 8f00 <targetfn>
+ 8fb2: eb01 0002 add\.w r0, r1, r2
+ 8fb6: f7ff efa4 blx 8f00 <targetfn>
+ 8fba: eb01 0002 add\.w r0, r1, r2
+ 8fbe: f7ff efa0 blx 8f00 <targetfn>
+ 8fc2: eb01 0002 add\.w r0, r1, r2
+ 8fc6: f7ff ef9c blx 8f00 <targetfn>
+ 8fca: eb01 0002 add\.w r0, r1, r2
+ 8fce: f7ff ef98 blx 8f00 <targetfn>
+ 8fd2: eb01 0002 add\.w r0, r1, r2
+ 8fd6: f7ff ef94 blx 8f00 <targetfn>
+ 8fda: eb01 0002 add\.w r0, r1, r2
+ 8fde: f7ff ef90 blx 8f00 <targetfn>
+ 8fe2: eb01 0002 add\.w r0, r1, r2
+ 8fe6: f7ff ef8c blx 8f00 <targetfn>
+ 8fea: eb01 0002 add\.w r0, r1, r2
+ 8fee: f7ff ef88 blx 8f00 <targetfn>
+ 8ff2: eb01 0002 add\.w r0, r1, r2
+ 8ff6: f7ff ef84 blx 8f00 <targetfn>
+ 8ffa: eb01 0002 add\.w r0, r1, r2
+ 8ffe: f000 e808 blx 9010 <_start\+0x108>
+ 9002: eb01 0002 add\.w r0, r1, r2
+ 9006: f7ff ef7c blx 8f00 <targetfn>
+ 900a: 4770 bx lr
+ 900c: f3af 8000 nop\.w
+ 9010: eaffffba b 8f00 <targetfn>
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl-rel-plt.d b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl-rel-plt.d
new file mode 100644
index 0000000..e885a17
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl-rel-plt.d
@@ -0,0 +1,92 @@
+
+.*: file format .*
+
+
+Disassembly of section \.plt:
+
+00008e00 <\.plt>:
+ 8e00: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
+ 8e04: e59fe004 ldr lr, \[pc, #4\] ; 8e10 <targetfn-0xf0>
+ 8e08: e08fe00e add lr, pc, lr
+ 8e0c: e5bef008 ldr pc, \[lr, #8\]!
+ 8e10: 0000827c \.word 0x0000827c
+ 8e14: e28fc600 add ip, pc, #0
+ 8e18: e28cca08 add ip, ip, #32768 ; 0x8000
+ 8e1c: e5bcf27c ldr pc, \[ip, #636\]! ; 0x27c
+
+Disassembly of section \.text:
+
+00008f00 <targetfn>:
+ 8f00: 4770 bx lr
+ 8f02: bf00 nop
+ 8f04: f3af 8000 nop\.w
+
+00008f08 <_start>:
+ 8f08: bf00 nop
+ 8f0a: eb01 0002 add\.w r0, r1, r2
+ 8f0e: f7ff ef82 blx 8e14 <targetfn-0xec>
+ 8f12: eb01 0002 add\.w r0, r1, r2
+ 8f16: f7ff ef7e blx 8e14 <targetfn-0xec>
+ 8f1a: eb01 0002 add\.w r0, r1, r2
+ 8f1e: f7ff ef7a blx 8e14 <targetfn-0xec>
+ 8f22: eb01 0002 add\.w r0, r1, r2
+ 8f26: f7ff ef76 blx 8e14 <targetfn-0xec>
+ 8f2a: eb01 0002 add\.w r0, r1, r2
+ 8f2e: f7ff ef72 blx 8e14 <targetfn-0xec>
+ 8f32: eb01 0002 add\.w r0, r1, r2
+ 8f36: f7ff ef6e blx 8e14 <targetfn-0xec>
+ 8f3a: eb01 0002 add\.w r0, r1, r2
+ 8f3e: f7ff ef6a blx 8e14 <targetfn-0xec>
+ 8f42: eb01 0002 add\.w r0, r1, r2
+ 8f46: f7ff ef66 blx 8e14 <targetfn-0xec>
+ 8f4a: eb01 0002 add\.w r0, r1, r2
+ 8f4e: f7ff ef62 blx 8e14 <targetfn-0xec>
+ 8f52: eb01 0002 add\.w r0, r1, r2
+ 8f56: f7ff ef5e blx 8e14 <targetfn-0xec>
+ 8f5a: eb01 0002 add\.w r0, r1, r2
+ 8f5e: f7ff ef5a blx 8e14 <targetfn-0xec>
+ 8f62: eb01 0002 add\.w r0, r1, r2
+ 8f66: f7ff ef56 blx 8e14 <targetfn-0xec>
+ 8f6a: eb01 0002 add\.w r0, r1, r2
+ 8f6e: f7ff ef52 blx 8e14 <targetfn-0xec>
+ 8f72: eb01 0002 add\.w r0, r1, r2
+ 8f76: f7ff ef4e blx 8e14 <targetfn-0xec>
+ 8f7a: eb01 0002 add\.w r0, r1, r2
+ 8f7e: f7ff ef4a blx 8e14 <targetfn-0xec>
+ 8f82: eb01 0002 add\.w r0, r1, r2
+ 8f86: f7ff ef46 blx 8e14 <targetfn-0xec>
+ 8f8a: eb01 0002 add\.w r0, r1, r2
+ 8f8e: f7ff ef42 blx 8e14 <targetfn-0xec>
+ 8f92: eb01 0002 add\.w r0, r1, r2
+ 8f96: f7ff ef3e blx 8e14 <targetfn-0xec>
+ 8f9a: eb01 0002 add\.w r0, r1, r2
+ 8f9e: f7ff ef3a blx 8e14 <targetfn-0xec>
+ 8fa2: eb01 0002 add\.w r0, r1, r2
+ 8fa6: f7ff ef36 blx 8e14 <targetfn-0xec>
+ 8faa: eb01 0002 add\.w r0, r1, r2
+ 8fae: f7ff ef32 blx 8e14 <targetfn-0xec>
+ 8fb2: eb01 0002 add\.w r0, r1, r2
+ 8fb6: f7ff ef2e blx 8e14 <targetfn-0xec>
+ 8fba: eb01 0002 add\.w r0, r1, r2
+ 8fbe: f7ff ef2a blx 8e14 <targetfn-0xec>
+ 8fc2: eb01 0002 add\.w r0, r1, r2
+ 8fc6: f7ff ef26 blx 8e14 <targetfn-0xec>
+ 8fca: eb01 0002 add\.w r0, r1, r2
+ 8fce: f7ff ef22 blx 8e14 <targetfn-0xec>
+ 8fd2: eb01 0002 add\.w r0, r1, r2
+ 8fd6: f7ff ef1e blx 8e14 <targetfn-0xec>
+ 8fda: eb01 0002 add\.w r0, r1, r2
+ 8fde: f7ff ef1a blx 8e14 <targetfn-0xec>
+ 8fe2: eb01 0002 add\.w r0, r1, r2
+ 8fe6: f7ff ef16 blx 8e14 <targetfn-0xec>
+ 8fea: eb01 0002 add\.w r0, r1, r2
+ 8fee: f7ff ef12 blx 8e14 <targetfn-0xec>
+ 8ff2: eb01 0002 add\.w r0, r1, r2
+ 8ff6: f7ff ef0e blx 8e14 <targetfn-0xec>
+ 8ffa: eb01 0002 add\.w r0, r1, r2
+ 8ffe: f000 e808 blx 9010 <_start\+0x108>
+ 9002: eb01 0002 add\.w r0, r1, r2
+ 9006: f7ff ef06 blx 8e14 <targetfn-0xec>
+ 900a: 4770 bx lr
+ 900c: f3af 8000 nop\.w
+ 9010: eaffff7f b 8e14 <targetfn-0xec>
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl-rel-thumb.d b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl-rel-thumb.d
new file mode 100644
index 0000000..8cbd3e0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl-rel-thumb.d
@@ -0,0 +1,80 @@
+
+.*: file format .*
+
+
+Disassembly of section \.text:
+
+00008f00 <targetfn>:
+ 8f00: 4770 bx lr
+ 8f02: bf00 nop
+ 8f04: f3af 8000 nop\.w
+
+00008f08 <_start>:
+ 8f08: bf00 nop
+ 8f0a: eb01 0002 add\.w r0, r1, r2
+ 8f0e: f7ff fff7 bl 8f00 <targetfn>
+ 8f12: eb01 0002 add\.w r0, r1, r2
+ 8f16: f7ff fff3 bl 8f00 <targetfn>
+ 8f1a: eb01 0002 add\.w r0, r1, r2
+ 8f1e: f7ff ffef bl 8f00 <targetfn>
+ 8f22: eb01 0002 add\.w r0, r1, r2
+ 8f26: f7ff ffeb bl 8f00 <targetfn>
+ 8f2a: eb01 0002 add\.w r0, r1, r2
+ 8f2e: f7ff ffe7 bl 8f00 <targetfn>
+ 8f32: eb01 0002 add\.w r0, r1, r2
+ 8f36: f7ff ffe3 bl 8f00 <targetfn>
+ 8f3a: eb01 0002 add\.w r0, r1, r2
+ 8f3e: f7ff ffdf bl 8f00 <targetfn>
+ 8f42: eb01 0002 add\.w r0, r1, r2
+ 8f46: f7ff ffdb bl 8f00 <targetfn>
+ 8f4a: eb01 0002 add\.w r0, r1, r2
+ 8f4e: f7ff ffd7 bl 8f00 <targetfn>
+ 8f52: eb01 0002 add\.w r0, r1, r2
+ 8f56: f7ff ffd3 bl 8f00 <targetfn>
+ 8f5a: eb01 0002 add\.w r0, r1, r2
+ 8f5e: f7ff ffcf bl 8f00 <targetfn>
+ 8f62: eb01 0002 add\.w r0, r1, r2
+ 8f66: f7ff ffcb bl 8f00 <targetfn>
+ 8f6a: eb01 0002 add\.w r0, r1, r2
+ 8f6e: f7ff ffc7 bl 8f00 <targetfn>
+ 8f72: eb01 0002 add\.w r0, r1, r2
+ 8f76: f7ff ffc3 bl 8f00 <targetfn>
+ 8f7a: eb01 0002 add\.w r0, r1, r2
+ 8f7e: f7ff ffbf bl 8f00 <targetfn>
+ 8f82: eb01 0002 add\.w r0, r1, r2
+ 8f86: f7ff ffbb bl 8f00 <targetfn>
+ 8f8a: eb01 0002 add\.w r0, r1, r2
+ 8f8e: f7ff ffb7 bl 8f00 <targetfn>
+ 8f92: eb01 0002 add\.w r0, r1, r2
+ 8f96: f7ff ffb3 bl 8f00 <targetfn>
+ 8f9a: eb01 0002 add\.w r0, r1, r2
+ 8f9e: f7ff ffaf bl 8f00 <targetfn>
+ 8fa2: eb01 0002 add\.w r0, r1, r2
+ 8fa6: f7ff ffab bl 8f00 <targetfn>
+ 8faa: eb01 0002 add\.w r0, r1, r2
+ 8fae: f7ff ffa7 bl 8f00 <targetfn>
+ 8fb2: eb01 0002 add\.w r0, r1, r2
+ 8fb6: f7ff ffa3 bl 8f00 <targetfn>
+ 8fba: eb01 0002 add\.w r0, r1, r2
+ 8fbe: f7ff ff9f bl 8f00 <targetfn>
+ 8fc2: eb01 0002 add\.w r0, r1, r2
+ 8fc6: f7ff ff9b bl 8f00 <targetfn>
+ 8fca: eb01 0002 add\.w r0, r1, r2
+ 8fce: f7ff ff97 bl 8f00 <targetfn>
+ 8fd2: eb01 0002 add\.w r0, r1, r2
+ 8fd6: f7ff ff93 bl 8f00 <targetfn>
+ 8fda: eb01 0002 add\.w r0, r1, r2
+ 8fde: f7ff ff8f bl 8f00 <targetfn>
+ 8fe2: eb01 0002 add\.w r0, r1, r2
+ 8fe6: f7ff ff8b bl 8f00 <targetfn>
+ 8fea: eb01 0002 add\.w r0, r1, r2
+ 8fee: f7ff ff87 bl 8f00 <targetfn>
+ 8ff2: eb01 0002 add\.w r0, r1, r2
+ 8ff6: f7ff ff83 bl 8f00 <targetfn>
+ 8ffa: eb01 0002 add\.w r0, r1, r2
+ 8ffe: f000 f807 bl 9010 <_start\+0x108>
+ 9002: eb01 0002 add\.w r0, r1, r2
+ 9006: f7ff ff7b bl 8f00 <targetfn>
+ 900a: 4770 bx lr
+ 900c: f3af 8000 nop\.w
+ 9010: f7ff bf76 b\.w 8f00 <targetfn>
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl-rel.s b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl-rel.s
new file mode 100644
index 0000000..2d21bbf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl-rel.s
@@ -0,0 +1,40 @@
+ .syntax unified
+ .cpu cortex-a8
+ .thumb
+ .text
+
+ @ expansion 32 bytes
+ .macro bw1
+1:
+ add.w r0, r1, r2
+ bl.w targetfn
+ add.w r0, r1, r2
+ bl.w targetfn
+ add.w r0, r1, r2
+ bl.w targetfn
+ add.w r0, r1, r2
+ bl.w targetfn
+ .endm
+
+ @ expansion 128 bytes
+ .macro bw2
+ bw1
+ bw1
+ bw1
+ bw1
+ .endm
+
+ .align 3
+ .global _start
+ .thumb
+ .thumb_func
+ .type _start, %function
+_start:
+ nop
+
+ @ If calling an ARM destination, we *don't* want to create a
+ @ Cortex-A8 stub: the Thumb-to-ARM stub will suffice.
+ bw2
+ bw2
+
+ bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl.d b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl.d
new file mode 100644
index 0000000..50dcd4f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl.d
@@ -0,0 +1,75 @@
+
+.*: file format .*
+
+
+Disassembly of section \.text:
+
+00008f00 <_start>:
+ 8f00: bf00 nop
+ 8f02: eb01 0002 add\.w r0, r1, r2
+ 8f06: f7ff fffc bl 8f02 <_start\+0x2>
+ 8f0a: eb01 0002 add\.w r0, r1, r2
+ 8f0e: f7ff fff8 bl 8f02 <_start\+0x2>
+ 8f12: eb01 0002 add\.w r0, r1, r2
+ 8f16: f7ff fff4 bl 8f02 <_start\+0x2>
+ 8f1a: eb01 0002 add\.w r0, r1, r2
+ 8f1e: f7ff fff0 bl 8f02 <_start\+0x2>
+ 8f22: eb01 0002 add\.w r0, r1, r2
+ 8f26: f7ff fffc bl 8f22 <_start\+0x22>
+ 8f2a: eb01 0002 add\.w r0, r1, r2
+ 8f2e: f7ff fff8 bl 8f22 <_start\+0x22>
+ 8f32: eb01 0002 add\.w r0, r1, r2
+ 8f36: f7ff fff4 bl 8f22 <_start\+0x22>
+ 8f3a: eb01 0002 add\.w r0, r1, r2
+ 8f3e: f7ff fff0 bl 8f22 <_start\+0x22>
+ 8f42: eb01 0002 add\.w r0, r1, r2
+ 8f46: f7ff fffc bl 8f42 <_start\+0x42>
+ 8f4a: eb01 0002 add\.w r0, r1, r2
+ 8f4e: f7ff fff8 bl 8f42 <_start\+0x42>
+ 8f52: eb01 0002 add\.w r0, r1, r2
+ 8f56: f7ff fff4 bl 8f42 <_start\+0x42>
+ 8f5a: eb01 0002 add\.w r0, r1, r2
+ 8f5e: f7ff fff0 bl 8f42 <_start\+0x42>
+ 8f62: eb01 0002 add\.w r0, r1, r2
+ 8f66: f7ff fffc bl 8f62 <_start\+0x62>
+ 8f6a: eb01 0002 add\.w r0, r1, r2
+ 8f6e: f7ff fff8 bl 8f62 <_start\+0x62>
+ 8f72: eb01 0002 add\.w r0, r1, r2
+ 8f76: f7ff fff4 bl 8f62 <_start\+0x62>
+ 8f7a: eb01 0002 add\.w r0, r1, r2
+ 8f7e: f7ff fff0 bl 8f62 <_start\+0x62>
+ 8f82: eb01 0002 add\.w r0, r1, r2
+ 8f86: f7ff fffc bl 8f82 <_start\+0x82>
+ 8f8a: eb01 0002 add\.w r0, r1, r2
+ 8f8e: f7ff fff8 bl 8f82 <_start\+0x82>
+ 8f92: eb01 0002 add\.w r0, r1, r2
+ 8f96: f7ff fff4 bl 8f82 <_start\+0x82>
+ 8f9a: eb01 0002 add\.w r0, r1, r2
+ 8f9e: f7ff fff0 bl 8f82 <_start\+0x82>
+ 8fa2: eb01 0002 add\.w r0, r1, r2
+ 8fa6: f7ff fffc bl 8fa2 <_start\+0xa2>
+ 8faa: eb01 0002 add\.w r0, r1, r2
+ 8fae: f7ff fff8 bl 8fa2 <_start\+0xa2>
+ 8fb2: eb01 0002 add\.w r0, r1, r2
+ 8fb6: f7ff fff4 bl 8fa2 <_start\+0xa2>
+ 8fba: eb01 0002 add\.w r0, r1, r2
+ 8fbe: f7ff fff0 bl 8fa2 <_start\+0xa2>
+ 8fc2: eb01 0002 add\.w r0, r1, r2
+ 8fc6: f7ff fffc bl 8fc2 <_start\+0xc2>
+ 8fca: eb01 0002 add\.w r0, r1, r2
+ 8fce: f7ff fff8 bl 8fc2 <_start\+0xc2>
+ 8fd2: eb01 0002 add\.w r0, r1, r2
+ 8fd6: f7ff fff4 bl 8fc2 <_start\+0xc2>
+ 8fda: eb01 0002 add\.w r0, r1, r2
+ 8fde: f7ff fff0 bl 8fc2 <_start\+0xc2>
+ 8fe2: eb01 0002 add\.w r0, r1, r2
+ 8fe6: f7ff fffc bl 8fe2 <_start\+0xe2>
+ 8fea: eb01 0002 add\.w r0, r1, r2
+ 8fee: f7ff fff8 bl 8fe2 <_start\+0xe2>
+ 8ff2: eb01 0002 add\.w r0, r1, r2
+ 8ff6: f7ff fff4 bl 8fe2 <_start\+0xe2>
+ 8ffa: eb01 0002 add\.w r0, r1, r2
+ 8ffe: f000 f803 bl 9008 <_start\+0x108>
+ 9002: 4770 bx lr
+ 9004: f3af 8000 nop\.w
+ 9008: f7ff bfeb b\.w 8fe2 <_start\+0xe2>
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl.s b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl.s
new file mode 100644
index 0000000..6e40fb8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-bl.s
@@ -0,0 +1,39 @@
+ .syntax unified
+ .cpu cortex-a8
+ .thumb
+ .text
+
+ @ expansion 32 bytes
+ .macro bw1
+1:
+ add.w r0, r1, r2
+ bl.w 1b
+ add.w r0, r1, r2
+ bl.w 1b
+ add.w r0, r1, r2
+ bl.w 1b
+ add.w r0, r1, r2
+ bl.w 1b
+ .endm
+
+ @ expansion 128 bytes
+ .macro bw2
+ bw1
+ bw1
+ bw1
+ bw1
+ .endm
+
+ .align 3
+ .global _start
+ .thumb
+ .thumb_func
+ .type _start, %function
+_start:
+ nop
+
+ @ Trigger Cortex-A8 erratum workaround with bl instructions.
+ bw2
+ bw2
+
+ bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-bcond.d b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-bcond.d
new file mode 100644
index 0000000..692a606
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-bcond.d
@@ -0,0 +1,1107 @@
+
+.*: file format .*
+
+
+Disassembly of section \.text:
+
+00008f00 <_start>:
+ 8f00: bf00 nop
+ 8f02: eb01 0002 add\.w r0, r1, r2
+ 8f06: f47f affc bne\.w 8f02 <_start\+0x2>
+ 8f0a: eb01 0002 add\.w r0, r1, r2
+ 8f0e: f47f aff8 bne\.w 8f02 <_start\+0x2>
+ 8f12: eb01 0002 add\.w r0, r1, r2
+ 8f16: f47f aff4 bne\.w 8f02 <_start\+0x2>
+ 8f1a: eb01 0002 add\.w r0, r1, r2
+ 8f1e: f47f aff0 bne\.w 8f02 <_start\+0x2>
+ 8f22: eb01 0002 add\.w r0, r1, r2
+ 8f26: f47f affc bne\.w 8f22 <_start\+0x22>
+ 8f2a: eb01 0002 add\.w r0, r1, r2
+ 8f2e: f47f aff8 bne\.w 8f22 <_start\+0x22>
+ 8f32: eb01 0002 add\.w r0, r1, r2
+ 8f36: f47f aff4 bne\.w 8f22 <_start\+0x22>
+ 8f3a: eb01 0002 add\.w r0, r1, r2
+ 8f3e: f47f aff0 bne\.w 8f22 <_start\+0x22>
+ 8f42: eb01 0002 add\.w r0, r1, r2
+ 8f46: f47f affc bne\.w 8f42 <_start\+0x42>
+ 8f4a: eb01 0002 add\.w r0, r1, r2
+ 8f4e: f47f aff8 bne\.w 8f42 <_start\+0x42>
+ 8f52: eb01 0002 add\.w r0, r1, r2
+ 8f56: f47f aff4 bne\.w 8f42 <_start\+0x42>
+ 8f5a: eb01 0002 add\.w r0, r1, r2
+ 8f5e: f47f aff0 bne\.w 8f42 <_start\+0x42>
+ 8f62: eb01 0002 add\.w r0, r1, r2
+ 8f66: f47f affc bne\.w 8f62 <_start\+0x62>
+ 8f6a: eb01 0002 add\.w r0, r1, r2
+ 8f6e: f47f aff8 bne\.w 8f62 <_start\+0x62>
+ 8f72: eb01 0002 add\.w r0, r1, r2
+ 8f76: f47f aff4 bne\.w 8f62 <_start\+0x62>
+ 8f7a: eb01 0002 add\.w r0, r1, r2
+ 8f7e: f47f aff0 bne\.w 8f62 <_start\+0x62>
+ 8f82: eb01 0002 add\.w r0, r1, r2
+ 8f86: f47f affc bne\.w 8f82 <_start\+0x82>
+ 8f8a: eb01 0002 add\.w r0, r1, r2
+ 8f8e: f47f aff8 bne\.w 8f82 <_start\+0x82>
+ 8f92: eb01 0002 add\.w r0, r1, r2
+ 8f96: f47f aff4 bne\.w 8f82 <_start\+0x82>
+ 8f9a: eb01 0002 add\.w r0, r1, r2
+ 8f9e: f47f aff0 bne\.w 8f82 <_start\+0x82>
+ 8fa2: eb01 0002 add\.w r0, r1, r2
+ 8fa6: f47f affc bne\.w 8fa2 <_start\+0xa2>
+ 8faa: eb01 0002 add\.w r0, r1, r2
+ 8fae: f47f aff8 bne\.w 8fa2 <_start\+0xa2>
+ 8fb2: eb01 0002 add\.w r0, r1, r2
+ 8fb6: f47f aff4 bne\.w 8fa2 <_start\+0xa2>
+ 8fba: eb01 0002 add\.w r0, r1, r2
+ 8fbe: f47f aff0 bne\.w 8fa2 <_start\+0xa2>
+ 8fc2: eb01 0002 add\.w r0, r1, r2
+ 8fc6: f47f affc bne\.w 8fc2 <_start\+0xc2>
+ 8fca: eb01 0002 add\.w r0, r1, r2
+ 8fce: f47f aff8 bne\.w 8fc2 <_start\+0xc2>
+ 8fd2: eb01 0002 add\.w r0, r1, r2
+ 8fd6: f47f aff4 bne\.w 8fc2 <_start\+0xc2>
+ 8fda: eb01 0002 add\.w r0, r1, r2
+ 8fde: f47f aff0 bne\.w 8fc2 <_start\+0xc2>
+ 8fe2: eb01 0002 add\.w r0, r1, r2
+ 8fe6: f47f affc bne\.w 8fe2 <_start\+0xe2>
+ 8fea: eb01 0002 add\.w r0, r1, r2
+ 8fee: f47f aff8 bne\.w 8fe2 <_start\+0xe2>
+ 8ff2: eb01 0002 add\.w r0, r1, r2
+ 8ff6: f47f aff4 bne\.w 8fe2 <_start\+0xe2>
+ 8ffa: eb01 0002 add\.w r0, r1, r2
+ 8ffe: f001 b805 b\.w a00c <bl_insns\+0x10c>
+ 9002: bf00 nop
+ 9004: f3af 8000 nop\.w
+ 9008: f3af 8000 nop\.w
+ 900c: f3af 8000 nop\.w
+ 9010: f3af 8000 nop\.w
+ 9014: f3af 8000 nop\.w
+ 9018: f3af 8000 nop\.w
+ 901c: f3af 8000 nop\.w
+ 9020: f3af 8000 nop\.w
+ 9024: f3af 8000 nop\.w
+ 9028: f3af 8000 nop\.w
+ 902c: f3af 8000 nop\.w
+ 9030: f3af 8000 nop\.w
+ 9034: f3af 8000 nop\.w
+ 9038: f3af 8000 nop\.w
+ 903c: f3af 8000 nop\.w
+ 9040: f3af 8000 nop\.w
+ 9044: f3af 8000 nop\.w
+ 9048: f3af 8000 nop\.w
+ 904c: f3af 8000 nop\.w
+ 9050: f3af 8000 nop\.w
+ 9054: f3af 8000 nop\.w
+ 9058: f3af 8000 nop\.w
+ 905c: f3af 8000 nop\.w
+ 9060: f3af 8000 nop\.w
+ 9064: f3af 8000 nop\.w
+ 9068: f3af 8000 nop\.w
+ 906c: f3af 8000 nop\.w
+ 9070: f3af 8000 nop\.w
+ 9074: f3af 8000 nop\.w
+ 9078: f3af 8000 nop\.w
+ 907c: f3af 8000 nop\.w
+ 9080: f3af 8000 nop\.w
+ 9084: f3af 8000 nop\.w
+ 9088: f3af 8000 nop\.w
+ 908c: f3af 8000 nop\.w
+ 9090: f3af 8000 nop\.w
+ 9094: f3af 8000 nop\.w
+ 9098: f3af 8000 nop\.w
+ 909c: f3af 8000 nop\.w
+ 90a0: f3af 8000 nop\.w
+ 90a4: f3af 8000 nop\.w
+ 90a8: f3af 8000 nop\.w
+ 90ac: f3af 8000 nop\.w
+ 90b0: f3af 8000 nop\.w
+ 90b4: f3af 8000 nop\.w
+ 90b8: f3af 8000 nop\.w
+ 90bc: f3af 8000 nop\.w
+ 90c0: f3af 8000 nop\.w
+ 90c4: f3af 8000 nop\.w
+ 90c8: f3af 8000 nop\.w
+ 90cc: f3af 8000 nop\.w
+ 90d0: f3af 8000 nop\.w
+ 90d4: f3af 8000 nop\.w
+ 90d8: f3af 8000 nop\.w
+ 90dc: f3af 8000 nop\.w
+ 90e0: f3af 8000 nop\.w
+ 90e4: f3af 8000 nop\.w
+ 90e8: f3af 8000 nop\.w
+ 90ec: f3af 8000 nop\.w
+ 90f0: f3af 8000 nop\.w
+ 90f4: f3af 8000 nop\.w
+ 90f8: f3af 8000 nop\.w
+ 90fc: f3af 8000 nop\.w
+ 9100: f3af 8000 nop\.w
+ 9104: f3af 8000 nop\.w
+ 9108: f3af 8000 nop\.w
+ 910c: f3af 8000 nop\.w
+ 9110: f3af 8000 nop\.w
+ 9114: f3af 8000 nop\.w
+ 9118: f3af 8000 nop\.w
+ 911c: f3af 8000 nop\.w
+ 9120: f3af 8000 nop\.w
+ 9124: f3af 8000 nop\.w
+ 9128: f3af 8000 nop\.w
+ 912c: f3af 8000 nop\.w
+ 9130: f3af 8000 nop\.w
+ 9134: f3af 8000 nop\.w
+ 9138: f3af 8000 nop\.w
+ 913c: f3af 8000 nop\.w
+ 9140: f3af 8000 nop\.w
+ 9144: f3af 8000 nop\.w
+ 9148: f3af 8000 nop\.w
+ 914c: f3af 8000 nop\.w
+ 9150: f3af 8000 nop\.w
+ 9154: f3af 8000 nop\.w
+ 9158: f3af 8000 nop\.w
+ 915c: f3af 8000 nop\.w
+ 9160: f3af 8000 nop\.w
+ 9164: f3af 8000 nop\.w
+ 9168: f3af 8000 nop\.w
+ 916c: f3af 8000 nop\.w
+ 9170: f3af 8000 nop\.w
+ 9174: f3af 8000 nop\.w
+ 9178: f3af 8000 nop\.w
+ 917c: f3af 8000 nop\.w
+ 9180: f3af 8000 nop\.w
+ 9184: f3af 8000 nop\.w
+ 9188: f3af 8000 nop\.w
+ 918c: f3af 8000 nop\.w
+ 9190: f3af 8000 nop\.w
+ 9194: f3af 8000 nop\.w
+ 9198: f3af 8000 nop\.w
+ 919c: f3af 8000 nop\.w
+ 91a0: f3af 8000 nop\.w
+ 91a4: f3af 8000 nop\.w
+ 91a8: f3af 8000 nop\.w
+ 91ac: f3af 8000 nop\.w
+ 91b0: f3af 8000 nop\.w
+ 91b4: f3af 8000 nop\.w
+ 91b8: f3af 8000 nop\.w
+ 91bc: f3af 8000 nop\.w
+ 91c0: f3af 8000 nop\.w
+ 91c4: f3af 8000 nop\.w
+ 91c8: f3af 8000 nop\.w
+ 91cc: f3af 8000 nop\.w
+ 91d0: f3af 8000 nop\.w
+ 91d4: f3af 8000 nop\.w
+ 91d8: f3af 8000 nop\.w
+ 91dc: f3af 8000 nop\.w
+ 91e0: f3af 8000 nop\.w
+ 91e4: f3af 8000 nop\.w
+ 91e8: f3af 8000 nop\.w
+ 91ec: f3af 8000 nop\.w
+ 91f0: f3af 8000 nop\.w
+ 91f4: f3af 8000 nop\.w
+ 91f8: f3af 8000 nop\.w
+ 91fc: f3af 8000 nop\.w
+ 9200: f3af 8000 nop\.w
+ 9204: f3af 8000 nop\.w
+ 9208: f3af 8000 nop\.w
+ 920c: f3af 8000 nop\.w
+ 9210: f3af 8000 nop\.w
+ 9214: f3af 8000 nop\.w
+ 9218: f3af 8000 nop\.w
+ 921c: f3af 8000 nop\.w
+ 9220: f3af 8000 nop\.w
+ 9224: f3af 8000 nop\.w
+ 9228: f3af 8000 nop\.w
+ 922c: f3af 8000 nop\.w
+ 9230: f3af 8000 nop\.w
+ 9234: f3af 8000 nop\.w
+ 9238: f3af 8000 nop\.w
+ 923c: f3af 8000 nop\.w
+ 9240: f3af 8000 nop\.w
+ 9244: f3af 8000 nop\.w
+ 9248: f3af 8000 nop\.w
+ 924c: f3af 8000 nop\.w
+ 9250: f3af 8000 nop\.w
+ 9254: f3af 8000 nop\.w
+ 9258: f3af 8000 nop\.w
+ 925c: f3af 8000 nop\.w
+ 9260: f3af 8000 nop\.w
+ 9264: f3af 8000 nop\.w
+ 9268: f3af 8000 nop\.w
+ 926c: f3af 8000 nop\.w
+ 9270: f3af 8000 nop\.w
+ 9274: f3af 8000 nop\.w
+ 9278: f3af 8000 nop\.w
+ 927c: f3af 8000 nop\.w
+ 9280: f3af 8000 nop\.w
+ 9284: f3af 8000 nop\.w
+ 9288: f3af 8000 nop\.w
+ 928c: f3af 8000 nop\.w
+ 9290: f3af 8000 nop\.w
+ 9294: f3af 8000 nop\.w
+ 9298: f3af 8000 nop\.w
+ 929c: f3af 8000 nop\.w
+ 92a0: f3af 8000 nop\.w
+ 92a4: f3af 8000 nop\.w
+ 92a8: f3af 8000 nop\.w
+ 92ac: f3af 8000 nop\.w
+ 92b0: f3af 8000 nop\.w
+ 92b4: f3af 8000 nop\.w
+ 92b8: f3af 8000 nop\.w
+ 92bc: f3af 8000 nop\.w
+ 92c0: f3af 8000 nop\.w
+ 92c4: f3af 8000 nop\.w
+ 92c8: f3af 8000 nop\.w
+ 92cc: f3af 8000 nop\.w
+ 92d0: f3af 8000 nop\.w
+ 92d4: f3af 8000 nop\.w
+ 92d8: f3af 8000 nop\.w
+ 92dc: f3af 8000 nop\.w
+ 92e0: f3af 8000 nop\.w
+ 92e4: f3af 8000 nop\.w
+ 92e8: f3af 8000 nop\.w
+ 92ec: f3af 8000 nop\.w
+ 92f0: f3af 8000 nop\.w
+ 92f4: f3af 8000 nop\.w
+ 92f8: f3af 8000 nop\.w
+ 92fc: f3af 8000 nop\.w
+ 9300: f3af 8000 nop\.w
+ 9304: f3af 8000 nop\.w
+ 9308: f3af 8000 nop\.w
+ 930c: f3af 8000 nop\.w
+ 9310: f3af 8000 nop\.w
+ 9314: f3af 8000 nop\.w
+ 9318: f3af 8000 nop\.w
+ 931c: f3af 8000 nop\.w
+ 9320: f3af 8000 nop\.w
+ 9324: f3af 8000 nop\.w
+ 9328: f3af 8000 nop\.w
+ 932c: f3af 8000 nop\.w
+ 9330: f3af 8000 nop\.w
+ 9334: f3af 8000 nop\.w
+ 9338: f3af 8000 nop\.w
+ 933c: f3af 8000 nop\.w
+ 9340: f3af 8000 nop\.w
+ 9344: f3af 8000 nop\.w
+ 9348: f3af 8000 nop\.w
+ 934c: f3af 8000 nop\.w
+ 9350: f3af 8000 nop\.w
+ 9354: f3af 8000 nop\.w
+ 9358: f3af 8000 nop\.w
+ 935c: f3af 8000 nop\.w
+ 9360: f3af 8000 nop\.w
+ 9364: f3af 8000 nop\.w
+ 9368: f3af 8000 nop\.w
+ 936c: f3af 8000 nop\.w
+ 9370: f3af 8000 nop\.w
+ 9374: f3af 8000 nop\.w
+ 9378: f3af 8000 nop\.w
+ 937c: f3af 8000 nop\.w
+ 9380: f3af 8000 nop\.w
+ 9384: f3af 8000 nop\.w
+ 9388: f3af 8000 nop\.w
+ 938c: f3af 8000 nop\.w
+ 9390: f3af 8000 nop\.w
+ 9394: f3af 8000 nop\.w
+ 9398: f3af 8000 nop\.w
+ 939c: f3af 8000 nop\.w
+ 93a0: f3af 8000 nop\.w
+ 93a4: f3af 8000 nop\.w
+ 93a8: f3af 8000 nop\.w
+ 93ac: f3af 8000 nop\.w
+ 93b0: f3af 8000 nop\.w
+ 93b4: f3af 8000 nop\.w
+ 93b8: f3af 8000 nop\.w
+ 93bc: f3af 8000 nop\.w
+ 93c0: f3af 8000 nop\.w
+ 93c4: f3af 8000 nop\.w
+ 93c8: f3af 8000 nop\.w
+ 93cc: f3af 8000 nop\.w
+ 93d0: f3af 8000 nop\.w
+ 93d4: f3af 8000 nop\.w
+ 93d8: f3af 8000 nop\.w
+ 93dc: f3af 8000 nop\.w
+ 93e0: f3af 8000 nop\.w
+ 93e4: f3af 8000 nop\.w
+ 93e8: f3af 8000 nop\.w
+ 93ec: f3af 8000 nop\.w
+ 93f0: f3af 8000 nop\.w
+ 93f4: f3af 8000 nop\.w
+ 93f8: f3af 8000 nop\.w
+ 93fc: f3af 8000 nop\.w
+ 9400: f3af 8000 nop\.w
+ 9404: f3af 8000 nop\.w
+ 9408: f3af 8000 nop\.w
+ 940c: f3af 8000 nop\.w
+ 9410: f3af 8000 nop\.w
+ 9414: f3af 8000 nop\.w
+ 9418: f3af 8000 nop\.w
+ 941c: f3af 8000 nop\.w
+ 9420: f3af 8000 nop\.w
+ 9424: f3af 8000 nop\.w
+ 9428: f3af 8000 nop\.w
+ 942c: f3af 8000 nop\.w
+ 9430: f3af 8000 nop\.w
+ 9434: f3af 8000 nop\.w
+ 9438: f3af 8000 nop\.w
+ 943c: f3af 8000 nop\.w
+ 9440: f3af 8000 nop\.w
+ 9444: f3af 8000 nop\.w
+ 9448: f3af 8000 nop\.w
+ 944c: f3af 8000 nop\.w
+ 9450: f3af 8000 nop\.w
+ 9454: f3af 8000 nop\.w
+ 9458: f3af 8000 nop\.w
+ 945c: f3af 8000 nop\.w
+ 9460: f3af 8000 nop\.w
+ 9464: f3af 8000 nop\.w
+ 9468: f3af 8000 nop\.w
+ 946c: f3af 8000 nop\.w
+ 9470: f3af 8000 nop\.w
+ 9474: f3af 8000 nop\.w
+ 9478: f3af 8000 nop\.w
+ 947c: f3af 8000 nop\.w
+ 9480: f3af 8000 nop\.w
+ 9484: f3af 8000 nop\.w
+ 9488: f3af 8000 nop\.w
+ 948c: f3af 8000 nop\.w
+ 9490: f3af 8000 nop\.w
+ 9494: f3af 8000 nop\.w
+ 9498: f3af 8000 nop\.w
+ 949c: f3af 8000 nop\.w
+ 94a0: f3af 8000 nop\.w
+ 94a4: f3af 8000 nop\.w
+ 94a8: f3af 8000 nop\.w
+ 94ac: f3af 8000 nop\.w
+ 94b0: f3af 8000 nop\.w
+ 94b4: f3af 8000 nop\.w
+ 94b8: f3af 8000 nop\.w
+ 94bc: f3af 8000 nop\.w
+ 94c0: f3af 8000 nop\.w
+ 94c4: f3af 8000 nop\.w
+ 94c8: f3af 8000 nop\.w
+ 94cc: f3af 8000 nop\.w
+ 94d0: f3af 8000 nop\.w
+ 94d4: f3af 8000 nop\.w
+ 94d8: f3af 8000 nop\.w
+ 94dc: f3af 8000 nop\.w
+ 94e0: f3af 8000 nop\.w
+ 94e4: f3af 8000 nop\.w
+ 94e8: f3af 8000 nop\.w
+ 94ec: f3af 8000 nop\.w
+ 94f0: f3af 8000 nop\.w
+ 94f4: f3af 8000 nop\.w
+ 94f8: f3af 8000 nop\.w
+ 94fc: f3af 8000 nop\.w
+ 9500: f3af 8000 nop\.w
+ 9504: f3af 8000 nop\.w
+ 9508: f3af 8000 nop\.w
+ 950c: f3af 8000 nop\.w
+ 9510: f3af 8000 nop\.w
+ 9514: f3af 8000 nop\.w
+ 9518: f3af 8000 nop\.w
+ 951c: f3af 8000 nop\.w
+ 9520: f3af 8000 nop\.w
+ 9524: f3af 8000 nop\.w
+ 9528: f3af 8000 nop\.w
+ 952c: f3af 8000 nop\.w
+ 9530: f3af 8000 nop\.w
+ 9534: f3af 8000 nop\.w
+ 9538: f3af 8000 nop\.w
+ 953c: f3af 8000 nop\.w
+ 9540: f3af 8000 nop\.w
+ 9544: f3af 8000 nop\.w
+ 9548: f3af 8000 nop\.w
+ 954c: f3af 8000 nop\.w
+ 9550: f3af 8000 nop\.w
+ 9554: f3af 8000 nop\.w
+ 9558: f3af 8000 nop\.w
+ 955c: f3af 8000 nop\.w
+ 9560: f3af 8000 nop\.w
+ 9564: f3af 8000 nop\.w
+ 9568: f3af 8000 nop\.w
+ 956c: f3af 8000 nop\.w
+ 9570: f3af 8000 nop\.w
+ 9574: f3af 8000 nop\.w
+ 9578: f3af 8000 nop\.w
+ 957c: f3af 8000 nop\.w
+ 9580: f3af 8000 nop\.w
+ 9584: f3af 8000 nop\.w
+ 9588: f3af 8000 nop\.w
+ 958c: f3af 8000 nop\.w
+ 9590: f3af 8000 nop\.w
+ 9594: f3af 8000 nop\.w
+ 9598: f3af 8000 nop\.w
+ 959c: f3af 8000 nop\.w
+ 95a0: f3af 8000 nop\.w
+ 95a4: f3af 8000 nop\.w
+ 95a8: f3af 8000 nop\.w
+ 95ac: f3af 8000 nop\.w
+ 95b0: f3af 8000 nop\.w
+ 95b4: f3af 8000 nop\.w
+ 95b8: f3af 8000 nop\.w
+ 95bc: f3af 8000 nop\.w
+ 95c0: f3af 8000 nop\.w
+ 95c4: f3af 8000 nop\.w
+ 95c8: f3af 8000 nop\.w
+ 95cc: f3af 8000 nop\.w
+ 95d0: f3af 8000 nop\.w
+ 95d4: f3af 8000 nop\.w
+ 95d8: f3af 8000 nop\.w
+ 95dc: f3af 8000 nop\.w
+ 95e0: f3af 8000 nop\.w
+ 95e4: f3af 8000 nop\.w
+ 95e8: f3af 8000 nop\.w
+ 95ec: f3af 8000 nop\.w
+ 95f0: f3af 8000 nop\.w
+ 95f4: f3af 8000 nop\.w
+ 95f8: f3af 8000 nop\.w
+ 95fc: f3af 8000 nop\.w
+ 9600: f3af 8000 nop\.w
+ 9604: f3af 8000 nop\.w
+ 9608: f3af 8000 nop\.w
+ 960c: f3af 8000 nop\.w
+ 9610: f3af 8000 nop\.w
+ 9614: f3af 8000 nop\.w
+ 9618: f3af 8000 nop\.w
+ 961c: f3af 8000 nop\.w
+ 9620: f3af 8000 nop\.w
+ 9624: f3af 8000 nop\.w
+ 9628: f3af 8000 nop\.w
+ 962c: f3af 8000 nop\.w
+ 9630: f3af 8000 nop\.w
+ 9634: f3af 8000 nop\.w
+ 9638: f3af 8000 nop\.w
+ 963c: f3af 8000 nop\.w
+ 9640: f3af 8000 nop\.w
+ 9644: f3af 8000 nop\.w
+ 9648: f3af 8000 nop\.w
+ 964c: f3af 8000 nop\.w
+ 9650: f3af 8000 nop\.w
+ 9654: f3af 8000 nop\.w
+ 9658: f3af 8000 nop\.w
+ 965c: f3af 8000 nop\.w
+ 9660: f3af 8000 nop\.w
+ 9664: f3af 8000 nop\.w
+ 9668: f3af 8000 nop\.w
+ 966c: f3af 8000 nop\.w
+ 9670: f3af 8000 nop\.w
+ 9674: f3af 8000 nop\.w
+ 9678: f3af 8000 nop\.w
+ 967c: f3af 8000 nop\.w
+ 9680: f3af 8000 nop\.w
+ 9684: f3af 8000 nop\.w
+ 9688: f3af 8000 nop\.w
+ 968c: f3af 8000 nop\.w
+ 9690: f3af 8000 nop\.w
+ 9694: f3af 8000 nop\.w
+ 9698: f3af 8000 nop\.w
+ 969c: f3af 8000 nop\.w
+ 96a0: f3af 8000 nop\.w
+ 96a4: f3af 8000 nop\.w
+ 96a8: f3af 8000 nop\.w
+ 96ac: f3af 8000 nop\.w
+ 96b0: f3af 8000 nop\.w
+ 96b4: f3af 8000 nop\.w
+ 96b8: f3af 8000 nop\.w
+ 96bc: f3af 8000 nop\.w
+ 96c0: f3af 8000 nop\.w
+ 96c4: f3af 8000 nop\.w
+ 96c8: f3af 8000 nop\.w
+ 96cc: f3af 8000 nop\.w
+ 96d0: f3af 8000 nop\.w
+ 96d4: f3af 8000 nop\.w
+ 96d8: f3af 8000 nop\.w
+ 96dc: f3af 8000 nop\.w
+ 96e0: f3af 8000 nop\.w
+ 96e4: f3af 8000 nop\.w
+ 96e8: f3af 8000 nop\.w
+ 96ec: f3af 8000 nop\.w
+ 96f0: f3af 8000 nop\.w
+ 96f4: f3af 8000 nop\.w
+ 96f8: f3af 8000 nop\.w
+ 96fc: f3af 8000 nop\.w
+ 9700: f3af 8000 nop\.w
+ 9704: f3af 8000 nop\.w
+ 9708: f3af 8000 nop\.w
+ 970c: f3af 8000 nop\.w
+ 9710: f3af 8000 nop\.w
+ 9714: f3af 8000 nop\.w
+ 9718: f3af 8000 nop\.w
+ 971c: f3af 8000 nop\.w
+ 9720: f3af 8000 nop\.w
+ 9724: f3af 8000 nop\.w
+ 9728: f3af 8000 nop\.w
+ 972c: f3af 8000 nop\.w
+ 9730: f3af 8000 nop\.w
+ 9734: f3af 8000 nop\.w
+ 9738: f3af 8000 nop\.w
+ 973c: f3af 8000 nop\.w
+ 9740: f3af 8000 nop\.w
+ 9744: f3af 8000 nop\.w
+ 9748: f3af 8000 nop\.w
+ 974c: f3af 8000 nop\.w
+ 9750: f3af 8000 nop\.w
+ 9754: f3af 8000 nop\.w
+ 9758: f3af 8000 nop\.w
+ 975c: f3af 8000 nop\.w
+ 9760: f3af 8000 nop\.w
+ 9764: f3af 8000 nop\.w
+ 9768: f3af 8000 nop\.w
+ 976c: f3af 8000 nop\.w
+ 9770: f3af 8000 nop\.w
+ 9774: f3af 8000 nop\.w
+ 9778: f3af 8000 nop\.w
+ 977c: f3af 8000 nop\.w
+ 9780: f3af 8000 nop\.w
+ 9784: f3af 8000 nop\.w
+ 9788: f3af 8000 nop\.w
+ 978c: f3af 8000 nop\.w
+ 9790: f3af 8000 nop\.w
+ 9794: f3af 8000 nop\.w
+ 9798: f3af 8000 nop\.w
+ 979c: f3af 8000 nop\.w
+ 97a0: f3af 8000 nop\.w
+ 97a4: f3af 8000 nop\.w
+ 97a8: f3af 8000 nop\.w
+ 97ac: f3af 8000 nop\.w
+ 97b0: f3af 8000 nop\.w
+ 97b4: f3af 8000 nop\.w
+ 97b8: f3af 8000 nop\.w
+ 97bc: f3af 8000 nop\.w
+ 97c0: f3af 8000 nop\.w
+ 97c4: f3af 8000 nop\.w
+ 97c8: f3af 8000 nop\.w
+ 97cc: f3af 8000 nop\.w
+ 97d0: f3af 8000 nop\.w
+ 97d4: f3af 8000 nop\.w
+ 97d8: f3af 8000 nop\.w
+ 97dc: f3af 8000 nop\.w
+ 97e0: f3af 8000 nop\.w
+ 97e4: f3af 8000 nop\.w
+ 97e8: f3af 8000 nop\.w
+ 97ec: f3af 8000 nop\.w
+ 97f0: f3af 8000 nop\.w
+ 97f4: f3af 8000 nop\.w
+ 97f8: f3af 8000 nop\.w
+ 97fc: f3af 8000 nop\.w
+ 9800: f3af 8000 nop\.w
+ 9804: f3af 8000 nop\.w
+ 9808: f3af 8000 nop\.w
+ 980c: f3af 8000 nop\.w
+ 9810: f3af 8000 nop\.w
+ 9814: f3af 8000 nop\.w
+ 9818: f3af 8000 nop\.w
+ 981c: f3af 8000 nop\.w
+ 9820: f3af 8000 nop\.w
+ 9824: f3af 8000 nop\.w
+ 9828: f3af 8000 nop\.w
+ 982c: f3af 8000 nop\.w
+ 9830: f3af 8000 nop\.w
+ 9834: f3af 8000 nop\.w
+ 9838: f3af 8000 nop\.w
+ 983c: f3af 8000 nop\.w
+ 9840: f3af 8000 nop\.w
+ 9844: f3af 8000 nop\.w
+ 9848: f3af 8000 nop\.w
+ 984c: f3af 8000 nop\.w
+ 9850: f3af 8000 nop\.w
+ 9854: f3af 8000 nop\.w
+ 9858: f3af 8000 nop\.w
+ 985c: f3af 8000 nop\.w
+ 9860: f3af 8000 nop\.w
+ 9864: f3af 8000 nop\.w
+ 9868: f3af 8000 nop\.w
+ 986c: f3af 8000 nop\.w
+ 9870: f3af 8000 nop\.w
+ 9874: f3af 8000 nop\.w
+ 9878: f3af 8000 nop\.w
+ 987c: f3af 8000 nop\.w
+ 9880: f3af 8000 nop\.w
+ 9884: f3af 8000 nop\.w
+ 9888: f3af 8000 nop\.w
+ 988c: f3af 8000 nop\.w
+ 9890: f3af 8000 nop\.w
+ 9894: f3af 8000 nop\.w
+ 9898: f3af 8000 nop\.w
+ 989c: f3af 8000 nop\.w
+ 98a0: f3af 8000 nop\.w
+ 98a4: f3af 8000 nop\.w
+ 98a8: f3af 8000 nop\.w
+ 98ac: f3af 8000 nop\.w
+ 98b0: f3af 8000 nop\.w
+ 98b4: f3af 8000 nop\.w
+ 98b8: f3af 8000 nop\.w
+ 98bc: f3af 8000 nop\.w
+ 98c0: f3af 8000 nop\.w
+ 98c4: f3af 8000 nop\.w
+ 98c8: f3af 8000 nop\.w
+ 98cc: f3af 8000 nop\.w
+ 98d0: f3af 8000 nop\.w
+ 98d4: f3af 8000 nop\.w
+ 98d8: f3af 8000 nop\.w
+ 98dc: f3af 8000 nop\.w
+ 98e0: f3af 8000 nop\.w
+ 98e4: f3af 8000 nop\.w
+ 98e8: f3af 8000 nop\.w
+ 98ec: f3af 8000 nop\.w
+ 98f0: f3af 8000 nop\.w
+ 98f4: f3af 8000 nop\.w
+ 98f8: f3af 8000 nop\.w
+ 98fc: f3af 8000 nop\.w
+ 9900: f3af 8000 nop\.w
+ 9904: f3af 8000 nop\.w
+ 9908: f3af 8000 nop\.w
+ 990c: f3af 8000 nop\.w
+ 9910: f3af 8000 nop\.w
+ 9914: f3af 8000 nop\.w
+ 9918: f3af 8000 nop\.w
+ 991c: f3af 8000 nop\.w
+ 9920: f3af 8000 nop\.w
+ 9924: f3af 8000 nop\.w
+ 9928: f3af 8000 nop\.w
+ 992c: f3af 8000 nop\.w
+ 9930: f3af 8000 nop\.w
+ 9934: f3af 8000 nop\.w
+ 9938: f3af 8000 nop\.w
+ 993c: f3af 8000 nop\.w
+ 9940: f3af 8000 nop\.w
+ 9944: f3af 8000 nop\.w
+ 9948: f3af 8000 nop\.w
+ 994c: f3af 8000 nop\.w
+ 9950: f3af 8000 nop\.w
+ 9954: f3af 8000 nop\.w
+ 9958: f3af 8000 nop\.w
+ 995c: f3af 8000 nop\.w
+ 9960: f3af 8000 nop\.w
+ 9964: f3af 8000 nop\.w
+ 9968: f3af 8000 nop\.w
+ 996c: f3af 8000 nop\.w
+ 9970: f3af 8000 nop\.w
+ 9974: f3af 8000 nop\.w
+ 9978: f3af 8000 nop\.w
+ 997c: f3af 8000 nop\.w
+ 9980: f3af 8000 nop\.w
+ 9984: f3af 8000 nop\.w
+ 9988: f3af 8000 nop\.w
+ 998c: f3af 8000 nop\.w
+ 9990: f3af 8000 nop\.w
+ 9994: f3af 8000 nop\.w
+ 9998: f3af 8000 nop\.w
+ 999c: f3af 8000 nop\.w
+ 99a0: f3af 8000 nop\.w
+ 99a4: f3af 8000 nop\.w
+ 99a8: f3af 8000 nop\.w
+ 99ac: f3af 8000 nop\.w
+ 99b0: f3af 8000 nop\.w
+ 99b4: f3af 8000 nop\.w
+ 99b8: f3af 8000 nop\.w
+ 99bc: f3af 8000 nop\.w
+ 99c0: f3af 8000 nop\.w
+ 99c4: f3af 8000 nop\.w
+ 99c8: f3af 8000 nop\.w
+ 99cc: f3af 8000 nop\.w
+ 99d0: f3af 8000 nop\.w
+ 99d4: f3af 8000 nop\.w
+ 99d8: f3af 8000 nop\.w
+ 99dc: f3af 8000 nop\.w
+ 99e0: f3af 8000 nop\.w
+ 99e4: f3af 8000 nop\.w
+ 99e8: f3af 8000 nop\.w
+ 99ec: f3af 8000 nop\.w
+ 99f0: f3af 8000 nop\.w
+ 99f4: f3af 8000 nop\.w
+ 99f8: f3af 8000 nop\.w
+ 99fc: f3af 8000 nop\.w
+ 9a00: f3af 8000 nop\.w
+ 9a04: f3af 8000 nop\.w
+ 9a08: f3af 8000 nop\.w
+ 9a0c: f3af 8000 nop\.w
+ 9a10: f3af 8000 nop\.w
+ 9a14: f3af 8000 nop\.w
+ 9a18: f3af 8000 nop\.w
+ 9a1c: f3af 8000 nop\.w
+ 9a20: f3af 8000 nop\.w
+ 9a24: f3af 8000 nop\.w
+ 9a28: f3af 8000 nop\.w
+ 9a2c: f3af 8000 nop\.w
+ 9a30: f3af 8000 nop\.w
+ 9a34: f3af 8000 nop\.w
+ 9a38: f3af 8000 nop\.w
+ 9a3c: f3af 8000 nop\.w
+ 9a40: f3af 8000 nop\.w
+ 9a44: f3af 8000 nop\.w
+ 9a48: f3af 8000 nop\.w
+ 9a4c: f3af 8000 nop\.w
+ 9a50: f3af 8000 nop\.w
+ 9a54: f3af 8000 nop\.w
+ 9a58: f3af 8000 nop\.w
+ 9a5c: f3af 8000 nop\.w
+ 9a60: f3af 8000 nop\.w
+ 9a64: f3af 8000 nop\.w
+ 9a68: f3af 8000 nop\.w
+ 9a6c: f3af 8000 nop\.w
+ 9a70: f3af 8000 nop\.w
+ 9a74: f3af 8000 nop\.w
+ 9a78: f3af 8000 nop\.w
+ 9a7c: f3af 8000 nop\.w
+ 9a80: f3af 8000 nop\.w
+ 9a84: f3af 8000 nop\.w
+ 9a88: f3af 8000 nop\.w
+ 9a8c: f3af 8000 nop\.w
+ 9a90: f3af 8000 nop\.w
+ 9a94: f3af 8000 nop\.w
+ 9a98: f3af 8000 nop\.w
+ 9a9c: f3af 8000 nop\.w
+ 9aa0: f3af 8000 nop\.w
+ 9aa4: f3af 8000 nop\.w
+ 9aa8: f3af 8000 nop\.w
+ 9aac: f3af 8000 nop\.w
+ 9ab0: f3af 8000 nop\.w
+ 9ab4: f3af 8000 nop\.w
+ 9ab8: f3af 8000 nop\.w
+ 9abc: f3af 8000 nop\.w
+ 9ac0: f3af 8000 nop\.w
+ 9ac4: f3af 8000 nop\.w
+ 9ac8: f3af 8000 nop\.w
+ 9acc: f3af 8000 nop\.w
+ 9ad0: f3af 8000 nop\.w
+ 9ad4: f3af 8000 nop\.w
+ 9ad8: f3af 8000 nop\.w
+ 9adc: f3af 8000 nop\.w
+ 9ae0: f3af 8000 nop\.w
+ 9ae4: f3af 8000 nop\.w
+ 9ae8: f3af 8000 nop\.w
+ 9aec: f3af 8000 nop\.w
+ 9af0: f3af 8000 nop\.w
+ 9af4: f3af 8000 nop\.w
+ 9af8: f3af 8000 nop\.w
+ 9afc: f3af 8000 nop\.w
+ 9b00: f3af 8000 nop\.w
+ 9b04: f3af 8000 nop\.w
+ 9b08: f3af 8000 nop\.w
+ 9b0c: f3af 8000 nop\.w
+ 9b10: f3af 8000 nop\.w
+ 9b14: f3af 8000 nop\.w
+ 9b18: f3af 8000 nop\.w
+ 9b1c: f3af 8000 nop\.w
+ 9b20: f3af 8000 nop\.w
+ 9b24: f3af 8000 nop\.w
+ 9b28: f3af 8000 nop\.w
+ 9b2c: f3af 8000 nop\.w
+ 9b30: f3af 8000 nop\.w
+ 9b34: f3af 8000 nop\.w
+ 9b38: f3af 8000 nop\.w
+ 9b3c: f3af 8000 nop\.w
+ 9b40: f3af 8000 nop\.w
+ 9b44: f3af 8000 nop\.w
+ 9b48: f3af 8000 nop\.w
+ 9b4c: f3af 8000 nop\.w
+ 9b50: f3af 8000 nop\.w
+ 9b54: f3af 8000 nop\.w
+ 9b58: f3af 8000 nop\.w
+ 9b5c: f3af 8000 nop\.w
+ 9b60: f3af 8000 nop\.w
+ 9b64: f3af 8000 nop\.w
+ 9b68: f3af 8000 nop\.w
+ 9b6c: f3af 8000 nop\.w
+ 9b70: f3af 8000 nop\.w
+ 9b74: f3af 8000 nop\.w
+ 9b78: f3af 8000 nop\.w
+ 9b7c: f3af 8000 nop\.w
+ 9b80: f3af 8000 nop\.w
+ 9b84: f3af 8000 nop\.w
+ 9b88: f3af 8000 nop\.w
+ 9b8c: f3af 8000 nop\.w
+ 9b90: f3af 8000 nop\.w
+ 9b94: f3af 8000 nop\.w
+ 9b98: f3af 8000 nop\.w
+ 9b9c: f3af 8000 nop\.w
+ 9ba0: f3af 8000 nop\.w
+ 9ba4: f3af 8000 nop\.w
+ 9ba8: f3af 8000 nop\.w
+ 9bac: f3af 8000 nop\.w
+ 9bb0: f3af 8000 nop\.w
+ 9bb4: f3af 8000 nop\.w
+ 9bb8: f3af 8000 nop\.w
+ 9bbc: f3af 8000 nop\.w
+ 9bc0: f3af 8000 nop\.w
+ 9bc4: f3af 8000 nop\.w
+ 9bc8: f3af 8000 nop\.w
+ 9bcc: f3af 8000 nop\.w
+ 9bd0: f3af 8000 nop\.w
+ 9bd4: f3af 8000 nop\.w
+ 9bd8: f3af 8000 nop\.w
+ 9bdc: f3af 8000 nop\.w
+ 9be0: f3af 8000 nop\.w
+ 9be4: f3af 8000 nop\.w
+ 9be8: f3af 8000 nop\.w
+ 9bec: f3af 8000 nop\.w
+ 9bf0: f3af 8000 nop\.w
+ 9bf4: f3af 8000 nop\.w
+ 9bf8: f3af 8000 nop\.w
+ 9bfc: f3af 8000 nop\.w
+ 9c00: f3af 8000 nop\.w
+ 9c04: f3af 8000 nop\.w
+ 9c08: f3af 8000 nop\.w
+ 9c0c: f3af 8000 nop\.w
+ 9c10: f3af 8000 nop\.w
+ 9c14: f3af 8000 nop\.w
+ 9c18: f3af 8000 nop\.w
+ 9c1c: f3af 8000 nop\.w
+ 9c20: f3af 8000 nop\.w
+ 9c24: f3af 8000 nop\.w
+ 9c28: f3af 8000 nop\.w
+ 9c2c: f3af 8000 nop\.w
+ 9c30: f3af 8000 nop\.w
+ 9c34: f3af 8000 nop\.w
+ 9c38: f3af 8000 nop\.w
+ 9c3c: f3af 8000 nop\.w
+ 9c40: f3af 8000 nop\.w
+ 9c44: f3af 8000 nop\.w
+ 9c48: f3af 8000 nop\.w
+ 9c4c: f3af 8000 nop\.w
+ 9c50: f3af 8000 nop\.w
+ 9c54: f3af 8000 nop\.w
+ 9c58: f3af 8000 nop\.w
+ 9c5c: f3af 8000 nop\.w
+ 9c60: f3af 8000 nop\.w
+ 9c64: f3af 8000 nop\.w
+ 9c68: f3af 8000 nop\.w
+ 9c6c: f3af 8000 nop\.w
+ 9c70: f3af 8000 nop\.w
+ 9c74: f3af 8000 nop\.w
+ 9c78: f3af 8000 nop\.w
+ 9c7c: f3af 8000 nop\.w
+ 9c80: f3af 8000 nop\.w
+ 9c84: f3af 8000 nop\.w
+ 9c88: f3af 8000 nop\.w
+ 9c8c: f3af 8000 nop\.w
+ 9c90: f3af 8000 nop\.w
+ 9c94: f3af 8000 nop\.w
+ 9c98: f3af 8000 nop\.w
+ 9c9c: f3af 8000 nop\.w
+ 9ca0: f3af 8000 nop\.w
+ 9ca4: f3af 8000 nop\.w
+ 9ca8: f3af 8000 nop\.w
+ 9cac: f3af 8000 nop\.w
+ 9cb0: f3af 8000 nop\.w
+ 9cb4: f3af 8000 nop\.w
+ 9cb8: f3af 8000 nop\.w
+ 9cbc: f3af 8000 nop\.w
+ 9cc0: f3af 8000 nop\.w
+ 9cc4: f3af 8000 nop\.w
+ 9cc8: f3af 8000 nop\.w
+ 9ccc: f3af 8000 nop\.w
+ 9cd0: f3af 8000 nop\.w
+ 9cd4: f3af 8000 nop\.w
+ 9cd8: f3af 8000 nop\.w
+ 9cdc: f3af 8000 nop\.w
+ 9ce0: f3af 8000 nop\.w
+ 9ce4: f3af 8000 nop\.w
+ 9ce8: f3af 8000 nop\.w
+ 9cec: f3af 8000 nop\.w
+ 9cf0: f3af 8000 nop\.w
+ 9cf4: f3af 8000 nop\.w
+ 9cf8: f3af 8000 nop\.w
+ 9cfc: f3af 8000 nop\.w
+ 9d00: f3af 8000 nop\.w
+ 9d04: f3af 8000 nop\.w
+ 9d08: f3af 8000 nop\.w
+ 9d0c: f3af 8000 nop\.w
+ 9d10: f3af 8000 nop\.w
+ 9d14: f3af 8000 nop\.w
+ 9d18: f3af 8000 nop\.w
+ 9d1c: f3af 8000 nop\.w
+ 9d20: f3af 8000 nop\.w
+ 9d24: f3af 8000 nop\.w
+ 9d28: f3af 8000 nop\.w
+ 9d2c: f3af 8000 nop\.w
+ 9d30: f3af 8000 nop\.w
+ 9d34: f3af 8000 nop\.w
+ 9d38: f3af 8000 nop\.w
+ 9d3c: f3af 8000 nop\.w
+ 9d40: f3af 8000 nop\.w
+ 9d44: f3af 8000 nop\.w
+ 9d48: f3af 8000 nop\.w
+ 9d4c: f3af 8000 nop\.w
+ 9d50: f3af 8000 nop\.w
+ 9d54: f3af 8000 nop\.w
+ 9d58: f3af 8000 nop\.w
+ 9d5c: f3af 8000 nop\.w
+ 9d60: f3af 8000 nop\.w
+ 9d64: f3af 8000 nop\.w
+ 9d68: f3af 8000 nop\.w
+ 9d6c: f3af 8000 nop\.w
+ 9d70: f3af 8000 nop\.w
+ 9d74: f3af 8000 nop\.w
+ 9d78: f3af 8000 nop\.w
+ 9d7c: f3af 8000 nop\.w
+ 9d80: f3af 8000 nop\.w
+ 9d84: f3af 8000 nop\.w
+ 9d88: f3af 8000 nop\.w
+ 9d8c: f3af 8000 nop\.w
+ 9d90: f3af 8000 nop\.w
+ 9d94: f3af 8000 nop\.w
+ 9d98: f3af 8000 nop\.w
+ 9d9c: f3af 8000 nop\.w
+ 9da0: f3af 8000 nop\.w
+ 9da4: f3af 8000 nop\.w
+ 9da8: f3af 8000 nop\.w
+ 9dac: f3af 8000 nop\.w
+ 9db0: f3af 8000 nop\.w
+ 9db4: f3af 8000 nop\.w
+ 9db8: f3af 8000 nop\.w
+ 9dbc: f3af 8000 nop\.w
+ 9dc0: f3af 8000 nop\.w
+ 9dc4: f3af 8000 nop\.w
+ 9dc8: f3af 8000 nop\.w
+ 9dcc: f3af 8000 nop\.w
+ 9dd0: f3af 8000 nop\.w
+ 9dd4: f3af 8000 nop\.w
+ 9dd8: f3af 8000 nop\.w
+ 9ddc: f3af 8000 nop\.w
+ 9de0: f3af 8000 nop\.w
+ 9de4: f3af 8000 nop\.w
+ 9de8: f3af 8000 nop\.w
+ 9dec: f3af 8000 nop\.w
+ 9df0: f3af 8000 nop\.w
+ 9df4: f3af 8000 nop\.w
+ 9df8: f3af 8000 nop\.w
+ 9dfc: f3af 8000 nop\.w
+ 9e00: f3af 8000 nop\.w
+ 9e04: f3af 8000 nop\.w
+ 9e08: f3af 8000 nop\.w
+ 9e0c: f3af 8000 nop\.w
+ 9e10: f3af 8000 nop\.w
+ 9e14: f3af 8000 nop\.w
+ 9e18: f3af 8000 nop\.w
+ 9e1c: f3af 8000 nop\.w
+ 9e20: f3af 8000 nop\.w
+ 9e24: f3af 8000 nop\.w
+ 9e28: f3af 8000 nop\.w
+ 9e2c: f3af 8000 nop\.w
+ 9e30: f3af 8000 nop\.w
+ 9e34: f3af 8000 nop\.w
+ 9e38: f3af 8000 nop\.w
+ 9e3c: f3af 8000 nop\.w
+ 9e40: f3af 8000 nop\.w
+ 9e44: f3af 8000 nop\.w
+ 9e48: f3af 8000 nop\.w
+ 9e4c: f3af 8000 nop\.w
+ 9e50: f3af 8000 nop\.w
+ 9e54: f3af 8000 nop\.w
+ 9e58: f3af 8000 nop\.w
+ 9e5c: f3af 8000 nop\.w
+ 9e60: f3af 8000 nop\.w
+ 9e64: f3af 8000 nop\.w
+ 9e68: f3af 8000 nop\.w
+ 9e6c: f3af 8000 nop\.w
+ 9e70: f3af 8000 nop\.w
+ 9e74: f3af 8000 nop\.w
+ 9e78: f3af 8000 nop\.w
+ 9e7c: f3af 8000 nop\.w
+ 9e80: f3af 8000 nop\.w
+ 9e84: f3af 8000 nop\.w
+ 9e88: f3af 8000 nop\.w
+ 9e8c: f3af 8000 nop\.w
+ 9e90: f3af 8000 nop\.w
+ 9e94: f3af 8000 nop\.w
+ 9e98: f3af 8000 nop\.w
+ 9e9c: f3af 8000 nop\.w
+ 9ea0: f3af 8000 nop\.w
+ 9ea4: f3af 8000 nop\.w
+ 9ea8: f3af 8000 nop\.w
+ 9eac: f3af 8000 nop\.w
+ 9eb0: f3af 8000 nop\.w
+ 9eb4: f3af 8000 nop\.w
+ 9eb8: f3af 8000 nop\.w
+ 9ebc: f3af 8000 nop\.w
+ 9ec0: f3af 8000 nop\.w
+ 9ec4: f3af 8000 nop\.w
+ 9ec8: f3af 8000 nop\.w
+ 9ecc: f3af 8000 nop\.w
+ 9ed0: f3af 8000 nop\.w
+ 9ed4: f3af 8000 nop\.w
+ 9ed8: f3af 8000 nop\.w
+ 9edc: f3af 8000 nop\.w
+ 9ee0: f3af 8000 nop\.w
+ 9ee4: f3af 8000 nop\.w
+ 9ee8: f3af 8000 nop\.w
+ 9eec: f3af 8000 nop\.w
+ 9ef0: f3af 8000 nop\.w
+ 9ef4: f3af 8000 nop\.w
+
+00009ef8 <arm_target>:
+ 9ef8: e0843005 add r3, r4, r5
+ 9efc: e12fff1e bx lr
+
+00009f00 <bl_insns>:
+ 9f00: bf00 nop
+ 9f02: eb01 0002 add\.w r0, r1, r2
+ 9f06: f7ff eff8 blx 9ef8 <arm_target>
+ 9f0a: eb01 0002 add\.w r0, r1, r2
+ 9f0e: f7ff eff4 blx 9ef8 <arm_target>
+ 9f12: eb01 0002 add\.w r0, r1, r2
+ 9f16: f7ff eff0 blx 9ef8 <arm_target>
+ 9f1a: eb01 0002 add\.w r0, r1, r2
+ 9f1e: f7ff efec blx 9ef8 <arm_target>
+ 9f22: eb01 0002 add\.w r0, r1, r2
+ 9f26: f7ff efe8 blx 9ef8 <arm_target>
+ 9f2a: eb01 0002 add\.w r0, r1, r2
+ 9f2e: f7ff efe4 blx 9ef8 <arm_target>
+ 9f32: eb01 0002 add\.w r0, r1, r2
+ 9f36: f7ff efe0 blx 9ef8 <arm_target>
+ 9f3a: eb01 0002 add\.w r0, r1, r2
+ 9f3e: f7ff efdc blx 9ef8 <arm_target>
+ 9f42: eb01 0002 add\.w r0, r1, r2
+ 9f46: f7ff efd8 blx 9ef8 <arm_target>
+ 9f4a: eb01 0002 add\.w r0, r1, r2
+ 9f4e: f7ff efd4 blx 9ef8 <arm_target>
+ 9f52: eb01 0002 add\.w r0, r1, r2
+ 9f56: f7ff efd0 blx 9ef8 <arm_target>
+ 9f5a: eb01 0002 add\.w r0, r1, r2
+ 9f5e: f7ff efcc blx 9ef8 <arm_target>
+ 9f62: eb01 0002 add\.w r0, r1, r2
+ 9f66: f7ff efc8 blx 9ef8 <arm_target>
+ 9f6a: eb01 0002 add\.w r0, r1, r2
+ 9f6e: f7ff efc4 blx 9ef8 <arm_target>
+ 9f72: eb01 0002 add\.w r0, r1, r2
+ 9f76: f7ff efc0 blx 9ef8 <arm_target>
+ 9f7a: eb01 0002 add\.w r0, r1, r2
+ 9f7e: f7ff efbc blx 9ef8 <arm_target>
+ 9f82: eb01 0002 add\.w r0, r1, r2
+ 9f86: f7ff efb8 blx 9ef8 <arm_target>
+ 9f8a: eb01 0002 add\.w r0, r1, r2
+ 9f8e: f7ff efb4 blx 9ef8 <arm_target>
+ 9f92: eb01 0002 add\.w r0, r1, r2
+ 9f96: f7ff efb0 blx 9ef8 <arm_target>
+ 9f9a: eb01 0002 add\.w r0, r1, r2
+ 9f9e: f7ff efac blx 9ef8 <arm_target>
+ 9fa2: eb01 0002 add\.w r0, r1, r2
+ 9fa6: f7ff efa8 blx 9ef8 <arm_target>
+ 9faa: eb01 0002 add\.w r0, r1, r2
+ 9fae: f7ff efa4 blx 9ef8 <arm_target>
+ 9fb2: eb01 0002 add\.w r0, r1, r2
+ 9fb6: f7ff efa0 blx 9ef8 <arm_target>
+ 9fba: eb01 0002 add\.w r0, r1, r2
+ 9fbe: f7ff ef9c blx 9ef8 <arm_target>
+ 9fc2: eb01 0002 add\.w r0, r1, r2
+ 9fc6: f7ff ef98 blx 9ef8 <arm_target>
+ 9fca: eb01 0002 add\.w r0, r1, r2
+ 9fce: f7ff ef94 blx 9ef8 <arm_target>
+ 9fd2: eb01 0002 add\.w r0, r1, r2
+ 9fd6: f7ff ef90 blx 9ef8 <arm_target>
+ 9fda: eb01 0002 add\.w r0, r1, r2
+ 9fde: f7ff ef8c blx 9ef8 <arm_target>
+ 9fe2: eb01 0002 add\.w r0, r1, r2
+ 9fe6: f7ff ef88 blx 9ef8 <arm_target>
+ 9fea: eb01 0002 add\.w r0, r1, r2
+ 9fee: f7ff ef84 blx 9ef8 <arm_target>
+ 9ff2: eb01 0002 add\.w r0, r1, r2
+ 9ff6: f7ff ef80 blx 9ef8 <arm_target>
+ 9ffa: eb01 0002 add\.w r0, r1, r2
+ 9ffe: f000 e804 blx a008 <bl_insns\+0x108>
+ a002: 4770 bx lr
+ a004: f3af 8000 nop\.w
+ a008: eaffffba b 9ef8 <arm_target>
+ a00c: d101 bne\.n a012 <bl_insns\+0x112>
+ a00e: f7fe bff8 b\.w 9002 <_start\+0x102>
+ a012: f7fe bfe6 b\.w 8fe2 <_start\+0xe2>
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-bcond.s b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-bcond.s
new file mode 100644
index 0000000..cb40fb4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-bcond.s
@@ -0,0 +1,81 @@
+ .syntax unified
+ .cpu cortex-a8
+ .thumb
+ .text
+
+ @ expansion 32 bytes
+ .macro bw1
+1:
+ add.w r0, r1, r2
+ blx.w arm_target
+ add.w r0, r1, r2
+ blx.w arm_target
+ add.w r0, r1, r2
+ blx.w arm_target
+ add.w r0, r1, r2
+ blx.w arm_target
+ .endm
+
+ @ expansion 128 bytes
+ .macro bw2
+ bw1
+ bw1
+ bw1
+ bw1
+ .endm
+
+ @ expansion 32 bytes
+ .macro bw3
+1:
+ add.w r0, r1, r2
+ bne.w 1b
+ add.w r0, r1, r2
+ bne.w 1b
+ add.w r0, r1, r2
+ bne.w 1b
+ add.w r0, r1, r2
+ bne.w 1b
+ .endm
+
+ @ expansion 128 bytes
+ .macro bw4
+ bw3
+ bw3
+ bw3
+ bw3
+ .endm
+
+ .align 3
+ .global _start
+
+ .thumb
+ .thumb_func
+ .type _start, %function
+_start:
+ nop
+
+ @ Trigger Cortex-A8 erratum workaround with b<cond> instructions.
+ bw4
+ bw4
+
+ nop
+
+ .rept 957
+ nop.w
+ .endr
+
+ .arm
+arm_target:
+ add r3, r4, r5
+ bx lr
+
+ .thumb
+bl_insns:
+
+ nop
+
+ @ ...and again with bl instructions.
+ bw2
+ bw2
+
+ bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-plt.d b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-plt.d
new file mode 100644
index 0000000..17cb9ac
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-plt.d
@@ -0,0 +1,28 @@
+
+.*
+
+
+Disassembly of section \.plt:
+
+00008000 <\.plt>:
+ 8000: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
+ 8004: e59fe004 ldr lr, \[pc, #4\] ; 8010 <foo-0xfe0>
+ 8008: e08fe00e add lr, pc, lr
+ 800c: e5bef008 ldr pc, \[lr, #8\]!
+ 8010: 00000ffc \.word 0x00000ffc
+ 8014: e28fc600 add ip, pc, #0
+ 8018: e28cca00 add ip, ip, #0
+ 801c: e5bcfffc ldr pc, \[ip, #4092\]! ; 0xffc
+
+Disassembly of section \.text:
+
+00008ff0 <foo>:
+ 8ff0: 46c0 nop ; \(mov r8, r8\)
+ 8ff2: f240 0000 movw r0, #0
+ 8ff6: f240 0000 movw r0, #0
+ 8ffa: f240 0000 movw r0, #0
+ 8ffe: f000 e804 blx 9008 <foo\+0x18>
+ 9002: 0000 movs r0, r0
+ 9004: 0000 movs r0, r0
+ 9006: 0000 movs r0, r0
+ 9008: eafffc01 b 8014 <foo-0xfdc>
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-plt.s b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-plt.s
new file mode 100644
index 0000000..1932034
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-plt.s
@@ -0,0 +1,10 @@
+ .syntax unified
+ .globl foo
+ .type foo,%function
+ .thumb_func
+foo:
+ nop @ 0x00
+ movw r0,#0 @ 0x02
+ movw r0,#0 @ 0x06
+ movw r0,#0 @ 0x0a
+ blx bar @ 0x0e
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-rel-arm.d b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-rel-arm.d
new file mode 100644
index 0000000..fcb3bab
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-rel-arm.d
@@ -0,0 +1,79 @@
+
+.*: file format .*
+
+
+Disassembly of section \.text:
+
+00008f00 <targetfn>:
+ 8f00: e12fff1e bx lr
+ 8f04: e320f000 nop \{0\}
+
+00008f08 <_start>:
+ 8f08: bf00 nop
+ 8f0a: eb01 0002 add\.w r0, r1, r2
+ 8f0e: f7ff eff8 blx 8f00 <targetfn>
+ 8f12: eb01 0002 add\.w r0, r1, r2
+ 8f16: f7ff eff4 blx 8f00 <targetfn>
+ 8f1a: eb01 0002 add\.w r0, r1, r2
+ 8f1e: f7ff eff0 blx 8f00 <targetfn>
+ 8f22: eb01 0002 add\.w r0, r1, r2
+ 8f26: f7ff efec blx 8f00 <targetfn>
+ 8f2a: eb01 0002 add\.w r0, r1, r2
+ 8f2e: f7ff efe8 blx 8f00 <targetfn>
+ 8f32: eb01 0002 add\.w r0, r1, r2
+ 8f36: f7ff efe4 blx 8f00 <targetfn>
+ 8f3a: eb01 0002 add\.w r0, r1, r2
+ 8f3e: f7ff efe0 blx 8f00 <targetfn>
+ 8f42: eb01 0002 add\.w r0, r1, r2
+ 8f46: f7ff efdc blx 8f00 <targetfn>
+ 8f4a: eb01 0002 add\.w r0, r1, r2
+ 8f4e: f7ff efd8 blx 8f00 <targetfn>
+ 8f52: eb01 0002 add\.w r0, r1, r2
+ 8f56: f7ff efd4 blx 8f00 <targetfn>
+ 8f5a: eb01 0002 add\.w r0, r1, r2
+ 8f5e: f7ff efd0 blx 8f00 <targetfn>
+ 8f62: eb01 0002 add\.w r0, r1, r2
+ 8f66: f7ff efcc blx 8f00 <targetfn>
+ 8f6a: eb01 0002 add\.w r0, r1, r2
+ 8f6e: f7ff efc8 blx 8f00 <targetfn>
+ 8f72: eb01 0002 add\.w r0, r1, r2
+ 8f76: f7ff efc4 blx 8f00 <targetfn>
+ 8f7a: eb01 0002 add\.w r0, r1, r2
+ 8f7e: f7ff efc0 blx 8f00 <targetfn>
+ 8f82: eb01 0002 add\.w r0, r1, r2
+ 8f86: f7ff efbc blx 8f00 <targetfn>
+ 8f8a: eb01 0002 add\.w r0, r1, r2
+ 8f8e: f7ff efb8 blx 8f00 <targetfn>
+ 8f92: eb01 0002 add\.w r0, r1, r2
+ 8f96: f7ff efb4 blx 8f00 <targetfn>
+ 8f9a: eb01 0002 add\.w r0, r1, r2
+ 8f9e: f7ff efb0 blx 8f00 <targetfn>
+ 8fa2: eb01 0002 add\.w r0, r1, r2
+ 8fa6: f7ff efac blx 8f00 <targetfn>
+ 8faa: eb01 0002 add\.w r0, r1, r2
+ 8fae: f7ff efa8 blx 8f00 <targetfn>
+ 8fb2: eb01 0002 add\.w r0, r1, r2
+ 8fb6: f7ff efa4 blx 8f00 <targetfn>
+ 8fba: eb01 0002 add\.w r0, r1, r2
+ 8fbe: f7ff efa0 blx 8f00 <targetfn>
+ 8fc2: eb01 0002 add\.w r0, r1, r2
+ 8fc6: f7ff ef9c blx 8f00 <targetfn>
+ 8fca: eb01 0002 add\.w r0, r1, r2
+ 8fce: f7ff ef98 blx 8f00 <targetfn>
+ 8fd2: eb01 0002 add\.w r0, r1, r2
+ 8fd6: f7ff ef94 blx 8f00 <targetfn>
+ 8fda: eb01 0002 add\.w r0, r1, r2
+ 8fde: f7ff ef90 blx 8f00 <targetfn>
+ 8fe2: eb01 0002 add\.w r0, r1, r2
+ 8fe6: f7ff ef8c blx 8f00 <targetfn>
+ 8fea: eb01 0002 add\.w r0, r1, r2
+ 8fee: f7ff ef88 blx 8f00 <targetfn>
+ 8ff2: eb01 0002 add\.w r0, r1, r2
+ 8ff6: f7ff ef84 blx 8f00 <targetfn>
+ 8ffa: eb01 0002 add\.w r0, r1, r2
+ 8ffe: f000 e808 blx 9010 <_start\+0x108>
+ 9002: eb01 0002 add\.w r0, r1, r2
+ 9006: f7ff ef7c blx 8f00 <targetfn>
+ 900a: 4770 bx lr
+ 900c: f3af 8000 nop\.w
+ 9010: eaffffba b 8f00 <targetfn>
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-rel-thumb.d b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-rel-thumb.d
new file mode 100644
index 0000000..8cbd3e0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-rel-thumb.d
@@ -0,0 +1,80 @@
+
+.*: file format .*
+
+
+Disassembly of section \.text:
+
+00008f00 <targetfn>:
+ 8f00: 4770 bx lr
+ 8f02: bf00 nop
+ 8f04: f3af 8000 nop\.w
+
+00008f08 <_start>:
+ 8f08: bf00 nop
+ 8f0a: eb01 0002 add\.w r0, r1, r2
+ 8f0e: f7ff fff7 bl 8f00 <targetfn>
+ 8f12: eb01 0002 add\.w r0, r1, r2
+ 8f16: f7ff fff3 bl 8f00 <targetfn>
+ 8f1a: eb01 0002 add\.w r0, r1, r2
+ 8f1e: f7ff ffef bl 8f00 <targetfn>
+ 8f22: eb01 0002 add\.w r0, r1, r2
+ 8f26: f7ff ffeb bl 8f00 <targetfn>
+ 8f2a: eb01 0002 add\.w r0, r1, r2
+ 8f2e: f7ff ffe7 bl 8f00 <targetfn>
+ 8f32: eb01 0002 add\.w r0, r1, r2
+ 8f36: f7ff ffe3 bl 8f00 <targetfn>
+ 8f3a: eb01 0002 add\.w r0, r1, r2
+ 8f3e: f7ff ffdf bl 8f00 <targetfn>
+ 8f42: eb01 0002 add\.w r0, r1, r2
+ 8f46: f7ff ffdb bl 8f00 <targetfn>
+ 8f4a: eb01 0002 add\.w r0, r1, r2
+ 8f4e: f7ff ffd7 bl 8f00 <targetfn>
+ 8f52: eb01 0002 add\.w r0, r1, r2
+ 8f56: f7ff ffd3 bl 8f00 <targetfn>
+ 8f5a: eb01 0002 add\.w r0, r1, r2
+ 8f5e: f7ff ffcf bl 8f00 <targetfn>
+ 8f62: eb01 0002 add\.w r0, r1, r2
+ 8f66: f7ff ffcb bl 8f00 <targetfn>
+ 8f6a: eb01 0002 add\.w r0, r1, r2
+ 8f6e: f7ff ffc7 bl 8f00 <targetfn>
+ 8f72: eb01 0002 add\.w r0, r1, r2
+ 8f76: f7ff ffc3 bl 8f00 <targetfn>
+ 8f7a: eb01 0002 add\.w r0, r1, r2
+ 8f7e: f7ff ffbf bl 8f00 <targetfn>
+ 8f82: eb01 0002 add\.w r0, r1, r2
+ 8f86: f7ff ffbb bl 8f00 <targetfn>
+ 8f8a: eb01 0002 add\.w r0, r1, r2
+ 8f8e: f7ff ffb7 bl 8f00 <targetfn>
+ 8f92: eb01 0002 add\.w r0, r1, r2
+ 8f96: f7ff ffb3 bl 8f00 <targetfn>
+ 8f9a: eb01 0002 add\.w r0, r1, r2
+ 8f9e: f7ff ffaf bl 8f00 <targetfn>
+ 8fa2: eb01 0002 add\.w r0, r1, r2
+ 8fa6: f7ff ffab bl 8f00 <targetfn>
+ 8faa: eb01 0002 add\.w r0, r1, r2
+ 8fae: f7ff ffa7 bl 8f00 <targetfn>
+ 8fb2: eb01 0002 add\.w r0, r1, r2
+ 8fb6: f7ff ffa3 bl 8f00 <targetfn>
+ 8fba: eb01 0002 add\.w r0, r1, r2
+ 8fbe: f7ff ff9f bl 8f00 <targetfn>
+ 8fc2: eb01 0002 add\.w r0, r1, r2
+ 8fc6: f7ff ff9b bl 8f00 <targetfn>
+ 8fca: eb01 0002 add\.w r0, r1, r2
+ 8fce: f7ff ff97 bl 8f00 <targetfn>
+ 8fd2: eb01 0002 add\.w r0, r1, r2
+ 8fd6: f7ff ff93 bl 8f00 <targetfn>
+ 8fda: eb01 0002 add\.w r0, r1, r2
+ 8fde: f7ff ff8f bl 8f00 <targetfn>
+ 8fe2: eb01 0002 add\.w r0, r1, r2
+ 8fe6: f7ff ff8b bl 8f00 <targetfn>
+ 8fea: eb01 0002 add\.w r0, r1, r2
+ 8fee: f7ff ff87 bl 8f00 <targetfn>
+ 8ff2: eb01 0002 add\.w r0, r1, r2
+ 8ff6: f7ff ff83 bl 8f00 <targetfn>
+ 8ffa: eb01 0002 add\.w r0, r1, r2
+ 8ffe: f000 f807 bl 9010 <_start\+0x108>
+ 9002: eb01 0002 add\.w r0, r1, r2
+ 9006: f7ff ff7b bl 8f00 <targetfn>
+ 900a: 4770 bx lr
+ 900c: f3af 8000 nop\.w
+ 9010: f7ff bf76 b\.w 8f00 <targetfn>
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-rel.s b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-rel.s
new file mode 100644
index 0000000..efbfb4b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx-rel.s
@@ -0,0 +1,38 @@
+ .syntax unified
+ .cpu cortex-a8
+ .thumb
+ .text
+
+ @ expansion 32 bytes
+ .macro bw1
+1:
+ add.w r0, r1, r2
+ blx.w targetfn
+ add.w r0, r1, r2
+ blx.w targetfn
+ add.w r0, r1, r2
+ blx.w targetfn
+ add.w r0, r1, r2
+ blx.w targetfn
+ .endm
+
+ @ expansion 128 bytes
+ .macro bw2
+ bw1
+ bw1
+ bw1
+ bw1
+ .endm
+
+ .align 3
+ .global _start
+ .thumb
+ .thumb_func
+ .type _start, %function
+_start:
+ nop
+
+ bw2
+ bw2
+
+ bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx.d b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx.d
new file mode 100644
index 0000000..4805256
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx.d
@@ -0,0 +1,79 @@
+
+.*: file format .*
+
+
+Disassembly of section \.text:
+
+00008f00 <armfn>:
+ 8f00: e1a02413 lsl r2, r3, r4
+ 8f04: e12fff1e bx lr
+
+00008f08 <_start>:
+ 8f08: bf00 nop
+ 8f0a: eb01 0002 add\.w r0, r1, r2
+ 8f0e: f7ff eff8 blx 8f00 <armfn>
+ 8f12: eb01 0002 add\.w r0, r1, r2
+ 8f16: f7ff eff4 blx 8f00 <armfn>
+ 8f1a: eb01 0002 add\.w r0, r1, r2
+ 8f1e: f7ff eff0 blx 8f00 <armfn>
+ 8f22: eb01 0002 add\.w r0, r1, r2
+ 8f26: f7ff efec blx 8f00 <armfn>
+ 8f2a: eb01 0002 add\.w r0, r1, r2
+ 8f2e: f7ff efe8 blx 8f00 <armfn>
+ 8f32: eb01 0002 add\.w r0, r1, r2
+ 8f36: f7ff efe4 blx 8f00 <armfn>
+ 8f3a: eb01 0002 add\.w r0, r1, r2
+ 8f3e: f7ff efe0 blx 8f00 <armfn>
+ 8f42: eb01 0002 add\.w r0, r1, r2
+ 8f46: f7ff efdc blx 8f00 <armfn>
+ 8f4a: eb01 0002 add\.w r0, r1, r2
+ 8f4e: f7ff efd8 blx 8f00 <armfn>
+ 8f52: eb01 0002 add\.w r0, r1, r2
+ 8f56: f7ff efd4 blx 8f00 <armfn>
+ 8f5a: eb01 0002 add\.w r0, r1, r2
+ 8f5e: f7ff efd0 blx 8f00 <armfn>
+ 8f62: eb01 0002 add\.w r0, r1, r2
+ 8f66: f7ff efcc blx 8f00 <armfn>
+ 8f6a: eb01 0002 add\.w r0, r1, r2
+ 8f6e: f7ff efc8 blx 8f00 <armfn>
+ 8f72: eb01 0002 add\.w r0, r1, r2
+ 8f76: f7ff efc4 blx 8f00 <armfn>
+ 8f7a: eb01 0002 add\.w r0, r1, r2
+ 8f7e: f7ff efc0 blx 8f00 <armfn>
+ 8f82: eb01 0002 add\.w r0, r1, r2
+ 8f86: f7ff efbc blx 8f00 <armfn>
+ 8f8a: eb01 0002 add\.w r0, r1, r2
+ 8f8e: f7ff efb8 blx 8f00 <armfn>
+ 8f92: eb01 0002 add\.w r0, r1, r2
+ 8f96: f7ff efb4 blx 8f00 <armfn>
+ 8f9a: eb01 0002 add\.w r0, r1, r2
+ 8f9e: f7ff efb0 blx 8f00 <armfn>
+ 8fa2: eb01 0002 add\.w r0, r1, r2
+ 8fa6: f7ff efac blx 8f00 <armfn>
+ 8faa: eb01 0002 add\.w r0, r1, r2
+ 8fae: f7ff efa8 blx 8f00 <armfn>
+ 8fb2: eb01 0002 add\.w r0, r1, r2
+ 8fb6: f7ff efa4 blx 8f00 <armfn>
+ 8fba: eb01 0002 add\.w r0, r1, r2
+ 8fbe: f7ff efa0 blx 8f00 <armfn>
+ 8fc2: eb01 0002 add\.w r0, r1, r2
+ 8fc6: f7ff ef9c blx 8f00 <armfn>
+ 8fca: eb01 0002 add\.w r0, r1, r2
+ 8fce: f7ff ef98 blx 8f00 <armfn>
+ 8fd2: eb01 0002 add\.w r0, r1, r2
+ 8fd6: f7ff ef94 blx 8f00 <armfn>
+ 8fda: eb01 0002 add\.w r0, r1, r2
+ 8fde: f7ff ef90 blx 8f00 <armfn>
+ 8fe2: eb01 0002 add\.w r0, r1, r2
+ 8fe6: f7ff ef8c blx 8f00 <armfn>
+ 8fea: eb01 0002 add\.w r0, r1, r2
+ 8fee: f7ff ef88 blx 8f00 <armfn>
+ 8ff2: eb01 0002 add\.w r0, r1, r2
+ 8ff6: f7ff ef84 blx 8f00 <armfn>
+ 8ffa: eb01 0002 add\.w r0, r1, r2
+ 8ffe: f000 e808 blx 9010 <_start\+0x108>
+ 9002: eb01 0002 add\.w r0, r1, r2
+ 9006: f7ff ef7c blx 8f00 <armfn>
+ 900a: 4770 bx lr
+ 900c: f3af 8000 nop\.w
+ 9010: eaffffba b 8f00 <armfn>
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx.s b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx.s
new file mode 100644
index 0000000..5d74024
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-blx.s
@@ -0,0 +1,44 @@
+ .syntax unified
+ .cpu cortex-a8
+ .text
+
+ @ expansion 32 bytes
+ .macro bw1
+ add.w r0, r1, r2
+ blx.w armfn
+ add.w r0, r1, r2
+ blx.w armfn
+ add.w r0, r1, r2
+ blx.w armfn
+ add.w r0, r1, r2
+ blx.w armfn
+ .endm
+
+ @ expansion 128 bytes
+ .macro bw2
+ bw1
+ bw1
+ bw1
+ bw1
+ .endm
+
+ .arm
+ .align 2
+armfn:
+ mov r2, r3, asl r4
+ bx lr
+
+ .global _start
+
+ .thumb
+ .thumb_func
+ .align 3
+ .type _start, %function
+_start:
+ nop
+
+ @ Trigger Cortex-A8 erratum workaround with blx instructions.
+ bw2
+ bw2
+
+ bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-hdr.d b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-hdr.d
new file mode 100644
index 0000000..027d2a1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-hdr.d
@@ -0,0 +1,24 @@
+
+.*: file format .*
+
+
+Disassembly of section \.text:
+
+00000fe0 <_start>:
+ fe0: bf00 nop
+ fe2: bf00 nop
+ fe4: bf00 nop
+ fe6: bf00 nop
+ fe8: bf00 nop
+ fea: bf00 nop
+ fec: bf00 nop
+ fee: bf00 nop
+ ff0: bf00 nop
+ ff2: bf00 nop
+ ff4: bf00 nop
+ ff6: bf00 nop
+ ff8: bf00 nop
+ ffa: ea81 0002 eor.w r0, r1, r2
+ ffe: f000 b80f b.w 1020 <_start\+0x40>
+#...
+ 1020: f7ff bfde b.w fe0 <_start>
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-hdr.s b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-hdr.s
new file mode 100644
index 0000000..827c0f8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-hdr.s
@@ -0,0 +1,14 @@
+ .syntax unified
+
+ .section .text, "ax"
+
+ .align 5
+ .globl _start
+ .thumb_func
+_start:
+ .rept 13
+ nop
+ .endr
+ eor r0, r1, r2
+ b.w _start
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-hdr.t b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-hdr.t
new file mode 100644
index 0000000..d3afacb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-hdr.t
@@ -0,0 +1,10 @@
+
+
+SECTIONS {
+ . = SIZEOF_HEADERS;
+ . += 0xf80;
+ .text : {
+ *(.text)
+ } = 0
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-plt.ld b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-plt.ld
new file mode 100644
index 0000000..3103f67
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-fix-plt.ld
@@ -0,0 +1,18 @@
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+ . = 0x07000;
+ .hash : { *(.hash) }
+ .gnu.hash : { *(.gnu.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ .rel.dyn : { *(.rel.dyn) }
+ .rel.plt : { *(.rel.plt) }
+ . = 0x08000;
+ .plt : { *(.plt) }
+ . = 0x08ff0;
+ .text : { *(.text) }
+ . = 0x10000;
+ .dynamic : { *(.dynamic) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-thumb-target.s b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-thumb-target.s
new file mode 100644
index 0000000..96c180f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/cortex-a8-thumb-target.s
@@ -0,0 +1,10 @@
+ .syntax unified
+ .cpu cortex-a8
+ .text
+ .thumb
+ .thumb_func
+ .align 3
+ .global targetfn
+ .type targetfn, %function
+targetfn:
+ bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/data-only-map.d b/binutils-2.21/ld/testsuite/ld-arm/data-only-map.d
new file mode 100644
index 0000000..39eed87
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/data-only-map.d
@@ -0,0 +1,13 @@
+
+[^:]*: file format elf32-littlearm
+
+
+Disassembly of section \.text:
+
+00000000 <_start>:
+ 0: eb01 0002 add\.w r0, r1, r2
+ 4: eb010002 \.word 0xeb010002
+ 8: eb01 0002 add\.w r0, r1, r2
+ c: eb01 0200 add\.w r2, r1, r0
+ 10: eb010002 \.word 0xeb010002
+ 14: eb010002 \.word 0xeb010002
diff --git a/binutils-2.21/ld/testsuite/ld-arm/data-only-map.ld b/binutils-2.21/ld/testsuite/ld-arm/data-only-map.ld
new file mode 100644
index 0000000..7d6ea92
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/data-only-map.ld
@@ -0,0 +1,16 @@
+/* Script for ld testsuite */
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+ .text :
+ {
+ *(.text)
+ *(.after1)
+ *(.after2)
+ *(.after3)
+ *(.after4)
+ *(.after5)
+ } =0
+}
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/data-only-map.s b/binutils-2.21/ld/testsuite/ld-arm/data-only-map.s
new file mode 100644
index 0000000..0c5e797
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/data-only-map.s
@@ -0,0 +1,20 @@
+.syntax unified
+.thumb
+.global _start
+_start:
+add.w r0, r1, r2
+
+.section .after1
+.word 0xeb010002
+
+.section .after2
+add.w r0, r1, r2
+
+.section .after3
+add.w r2, r1, r0
+
+.section .after4
+.word 0xeb010002
+
+.section .after5
+.word 0xeb010002
diff --git a/binutils-2.21/ld/testsuite/ld-arm/discard-unwind.ld b/binutils-2.21/ld/testsuite/ld-arm/discard-unwind.ld
new file mode 100644
index 0000000..d8f6524
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/discard-unwind.ld
@@ -0,0 +1,19 @@
+/* Script for ld testsuite */
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ PROVIDE (__executable_start = 0x8000); . = 0x8000;
+ .text :
+ {
+ *(.before)
+ *(.text)
+ *(.after)
+ *(.ARM.extab*)
+ *(.glue_7)
+ *(.v4_bx)
+ } =0
+ /DISCARD/ : { *(.ARM.exidx*) }
+ .ARM.attribues 0 : { *(.ARM.atttributes) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-arm/emit-relocs1-vxworks.d b/binutils-2.21/ld/testsuite/ld-arm/emit-relocs1-vxworks.d
new file mode 100644
index 0000000..6d84a4c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/emit-relocs1-vxworks.d
@@ -0,0 +1,12 @@
+#source: emit-relocs1.s
+#ld: -Ttext 0x10000 --defsym target=0xc000 -e0 --emit-relocs
+#objdump: -dr
+#...
+ +10000: e1a00000 nop .*
+ +10004: e1a00000 nop .*
+ +10008: e1a00000 nop .*
+ +1000c: e1a00000 nop .*
+ +10010: eaffeffa b c000 <target>
+ +10010: R_ARM_PC24 target\+0xf+8
+ +10014: eaffeffd b c010 <target\+0x10>
+ +10014: R_ARM_PC24 target\+0x8
diff --git a/binutils-2.21/ld/testsuite/ld-arm/emit-relocs1.d b/binutils-2.21/ld/testsuite/ld-arm/emit-relocs1.d
new file mode 100644
index 0000000..191cb52
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/emit-relocs1.d
@@ -0,0 +1,12 @@
+#source: emit-relocs1.s
+#ld: -Ttext 0x10000 --defsym target=0xc000 -e0 --emit-relocs
+#objdump: -dr
+#...
+ +10000: e1a00000 nop .*
+ +10004: e1a00000 nop .*
+ +10008: e1a00000 nop .*
+ +1000c: e1a00000 nop .*
+ +10010: eaffeffa b c000 <target>
+ +10010: R_ARM_(JUMP|PC)24 target
+ +10014: eaffeffd b c010 <target\+0x10>
+ +10014: R_ARM_(JUMP|PC)24 target
diff --git a/binutils-2.21/ld/testsuite/ld-arm/emit-relocs1.s b/binutils-2.21/ld/testsuite/ld-arm/emit-relocs1.s
new file mode 100644
index 0000000..8971d4d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/emit-relocs1.s
@@ -0,0 +1,6 @@
+ nop
+ nop
+ nop
+ nop
+ b target
+ b target+16
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-arm-arm-pic-veneer.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-arm-arm-pic-veneer.d
new file mode 100644
index 0000000..f5ff227
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-arm-arm-pic-veneer.d
@@ -0,0 +1,17 @@
+.*: file format .*
+
+Disassembly of section .text:
+
+00001000 <_start>:
+ 1000: eb000000 bl 1008 <__bar_veneer>
+ 1004: 00000000 andeq r0, r0, r0
+
+00001008 <__bar_veneer>:
+ 1008: e59fc000 ldr ip, \[pc, #0\] ; 1010 <__bar_veneer\+0x8>
+ 100c: e08ff00c add pc, pc, ip
+ 1010: 0200000c .word 0x0200000c
+ 1014: 00000000 .word 0x00000000
+Disassembly of section .foo:
+
+02001020 <bar>:
+ 2001020: e12fff1e bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-arm-arm.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-arm-arm.d
new file mode 100644
index 0000000..7ee6d66
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-arm-arm.d
@@ -0,0 +1,15 @@
+.*: file format .*
+
+Disassembly of section .text:
+
+00001000 <_start>:
+ 1000: eb000000 bl 1008 <__bar_veneer>
+ 1004: 00000000 andeq r0, r0, r0
+
+00001008 <__bar_veneer>:
+ 1008: e51ff004 ldr pc, \[pc, #-4\] ; 100c <__bar_veneer\+0x4>
+ 100c: 02001020 .word 0x02001020
+Disassembly of section .foo:
+
+02001020 <bar>:
+ 2001020: e12fff1e bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-arm-arm.s b/binutils-2.21/ld/testsuite/ld-arm/farcall-arm-arm.s
new file mode 100644
index 0000000..00c1e48
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-arm-arm.s
@@ -0,0 +1,20 @@
+@ Test to ensure that a ARM to ARM call exceeding 32Mb generates a stub.
+
+ .global _start
+ .syntax unified
+
+@ We will place the section .text at 0x1000.
+
+ .text
+
+_start:
+ bl bar
+
+@ We will place the section .foo at 0x2001020.
+
+ .section .foo, "xa"
+
+ .type bar, %function
+bar:
+ bx lr
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-arm-thumb-blx-pic-veneer.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-arm-thumb-blx-pic-veneer.d
new file mode 100644
index 0000000..45bc01c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-arm-thumb-blx-pic-veneer.d
@@ -0,0 +1,17 @@
+.*: file format .*
+
+Disassembly of section .text:
+
+00001000 <_start>:
+ 1000: eb000000 bl 1008 <__bar_from_arm>
+ 1004: 00000000 andeq r0, r0, r0
+
+00001008 <__bar_from_arm>:
+ 1008: e59fc004 ldr ip, \[pc, #4\] ; 1014 <__bar_from_arm\+0xc>
+ 100c: e08fc00c add ip, pc, ip
+ 1010: e12fff1c bx ip
+ 1014: 02000001 .word 0x02000001
+Disassembly of section .foo:
+
+02001014 <bar>:
+ 2001014: 4770 bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-arm-thumb-blx.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-arm-thumb-blx.d
new file mode 100644
index 0000000..993a028
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-arm-thumb-blx.d
@@ -0,0 +1,15 @@
+.*: file format .*
+
+Disassembly of section .text:
+
+00001000 <_start>:
+ 1000: eb000000 bl 1008 <__bar_from_arm>
+ 1004: 00000000 andeq r0, r0, r0
+
+00001008 <__bar_from_arm>:
+ 1008: e51ff004 ldr pc, \[pc, #-4\] ; 100c <__bar_from_arm\+0x4>
+ 100c: 02001015 .word 0x02001015
+Disassembly of section .foo:
+
+02001014 <bar>:
+ 2001014: 4770 bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-arm-thumb-pic-veneer.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-arm-thumb-pic-veneer.d
new file mode 100644
index 0000000..45bc01c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-arm-thumb-pic-veneer.d
@@ -0,0 +1,17 @@
+.*: file format .*
+
+Disassembly of section .text:
+
+00001000 <_start>:
+ 1000: eb000000 bl 1008 <__bar_from_arm>
+ 1004: 00000000 andeq r0, r0, r0
+
+00001008 <__bar_from_arm>:
+ 1008: e59fc004 ldr ip, \[pc, #4\] ; 1014 <__bar_from_arm\+0xc>
+ 100c: e08fc00c add ip, pc, ip
+ 1010: e12fff1c bx ip
+ 1014: 02000001 .word 0x02000001
+Disassembly of section .foo:
+
+02001014 <bar>:
+ 2001014: 4770 bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-arm-thumb.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-arm-thumb.d
new file mode 100644
index 0000000..8291be3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-arm-thumb.d
@@ -0,0 +1,17 @@
+.*: file format .*
+
+Disassembly of section .text:
+
+00001000 <_start>:
+ 1000: eb000000 bl 1008 <__bar_from_arm>
+ 1004: 00000000 andeq r0, r0, r0
+
+00001008 <__bar_from_arm>:
+ 1008: e59fc000 ldr ip, \[pc, #0\] ; 1010 <__bar_from_arm\+0x8>
+ 100c: e12fff1c bx ip
+ 1010: 02001015 .word 0x02001015
+ 1014: 00000000 .word 0x00000000
+Disassembly of section .foo:
+
+02001014 <bar>:
+ 2001014: 4770 bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-arm-thumb.s b/binutils-2.21/ld/testsuite/ld-arm/farcall-arm-thumb.s
new file mode 100644
index 0000000..c69f31c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-arm-thumb.s
@@ -0,0 +1,20 @@
+@ Test to ensure that a ARM to Thumb call exceeding 32Mb generates a stub.
+
+ .global _start
+ .global bar
+ .syntax unified
+
+@ We will place the section .text at 0x1000.
+
+ .text
+
+_start:
+ bl bar
+
+@ We will place the section .foo at 0x2001010.
+
+ .section .foo, "xa"
+ .thumb_func
+bar:
+ bx lr
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-data.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-data.d
new file mode 100644
index 0000000..a8b231c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-data.d
@@ -0,0 +1,19 @@
+.*: file format .*
+
+Disassembly of section .text:
+
+00008000 <_start>:
+ 8000: ea000000 b 8008 <__far_veneer>
+ 8004: 00000000 andeq r0, r0, r0
+
+00008008 <__far_veneer>:
+ 8008: e51ff004 ldr pc, \[pc, #-4\] ; 800c <__far_veneer\+0x4>
+ 800c: 12340000 \.word 0x12340000
+
+00008010 <after>:
+ 8010: 11111111 \.word 0x11111111
+
+Disassembly of section \.far:
+
+12340000 <far>:
+12340000: e12fff1e bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-data.s b/binutils-2.21/ld/testsuite/ld-arm/farcall-data.s
new file mode 100644
index 0000000..ed66199
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-data.s
@@ -0,0 +1,14 @@
+ .syntax unified
+ .text
+ .global _start
+ .type _start, %function
+_start:
+ b far
+
+.section .after
+after:
+ .word 0x11111111
+
+ .section .far, "ax"
+ .type far, %function
+far: bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-group-limit.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-group-limit.d
new file mode 100644
index 0000000..204dcd8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-group-limit.d
@@ -0,0 +1,21 @@
+
+.*: file format .*
+
+Disassembly of section .text:
+
+00001000 <_start>:
+ 1000: eb000000 bl 1008 <__bar_veneer>
+ 1004: 00000000 andeq r0, r0, r0
+
+00001008 <__bar_veneer>:
+ 1008: e51ff004 ldr pc, \[pc, #-4\] ; 100c <__bar_veneer\+0x4>
+ 100c: 02003020 .word 0x02003020
+
+00001010 <myfunc>:
+ ...
+ 2001010: eb000802 bl 2003020 <bar>
+
+Disassembly of section .far:
+
+02003020 <bar>:
+ 2003020: e12fff1e bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-group-size2.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-group-size2.d
new file mode 100644
index 0000000..8a35313
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-group-size2.d
@@ -0,0 +1,57 @@
+
+.*: file format .*
+
+Disassembly of section .text:
+
+00001000 <_start>:
+ 1000: eb000000 bl 1008 <__bar_from_arm>
+ 1004: eb000002 bl 1014 <__bar2_veneer>
+
+00001008 <__bar_from_arm>:
+ 1008: e59fc000 ldr ip, \[pc, #0\] ; 1010 <__bar_from_arm\+0x8>
+ 100c: e12fff1c bx ip
+ 1010: 02003021 .word 0x02003021
+
+00001014 <__bar2_veneer>:
+ 1014: e51ff004 ldr pc, \[pc, #-4\] ; 1018 <__bar2_veneer\+0x4>
+ 1018: 02003024 .word 0x02003024
+ 101c: 00000000 .word 0x00000000
+
+00001020 <myfunc>:
+ 1020: eb000008 bl 1048 <__bar3_veneer>
+ 1024: eb000001 bl 1030 <__bar4_from_arm>
+ 1028: eb000003 bl 103c <__bar5_from_arm>
+ 102c: 00000000 andeq r0, r0, r0
+
+00001030 <__bar4_from_arm>:
+ 1030: e59fc000 ldr ip, \[pc, #0\] ; 1038 <__bar4_from_arm\+0x8>
+ 1034: e12fff1c bx ip
+ 1038: 0200302d .word 0x0200302d
+
+0000103c <__bar5_from_arm>:
+ 103c: e59fc000 ldr ip, \[pc, #0\] ; 1044 <__bar5_from_arm\+0x8>
+ 1040: e12fff1c bx ip
+ 1044: 0200302f .word 0x0200302f
+
+00001048 <__bar3_veneer>:
+ 1048: e51ff004 ldr pc, \[pc, #-4\] ; 104c <__bar3_veneer\+0x4>
+ 104c: 02003028 .word 0x02003028
+ ...
+
+Disassembly of section .foo:
+
+02003020 <bar>:
+ 2003020: 4770 bx lr
+ ...
+
+02003024 <bar2>:
+ 2003024: e12fff1e bx lr
+
+02003028 <bar3>:
+ 2003028: e12fff1e bx lr
+
+0200302c <bar4>:
+ 200302c: 4770 bx lr
+
+0200302e <bar5>:
+ 200302e: 4770 bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-group.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-group.d
new file mode 100644
index 0000000..a72c14f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-group.d
@@ -0,0 +1,56 @@
+
+.*: file format .*
+
+Disassembly of section .text:
+
+00001000 <_start>:
+ 1000: eb000009 bl 102c <__bar_from_arm>
+ 1004: eb000006 bl 1024 <__bar2_veneer>
+
+00001008 <myfunc>:
+ 1008: eb00000d bl 1044 <__bar3_veneer>
+ 100c: eb000001 bl 1018 <__bar4_from_arm>
+ 1010: eb000008 bl 1038 <__bar5_from_arm>
+ 1014: 00000000 andeq r0, r0, r0
+
+00001018 <__bar4_from_arm>:
+ 1018: e59fc000 ldr ip, \[pc, #0\] ; 1020 <__bar4_from_arm\+0x8>
+ 101c: e12fff1c bx ip
+ 1020: 0200302d .word 0x0200302d
+
+00001024 <__bar2_veneer>:
+ 1024: e51ff004 ldr pc, \[pc, #-4\] ; 1028 <__bar2_veneer\+0x4>
+ 1028: 02003024 .word 0x02003024
+
+0000102c <__bar_from_arm>:
+ 102c: e59fc000 ldr ip, \[pc, #0\] ; 1034 <__bar_from_arm\+0x8>
+ 1030: e12fff1c bx ip
+ 1034: 02003021 .word 0x02003021
+
+00001038 <__bar5_from_arm>:
+ 1038: e59fc000 ldr ip, \[pc, #0\] ; 1040 <__bar5_from_arm\+0x8>
+ 103c: e12fff1c bx ip
+ 1040: 0200302f .word 0x0200302f
+
+00001044 <__bar3_veneer>:
+ 1044: e51ff004 ldr pc, \[pc, #-4\] ; 1048 <__bar3_veneer\+0x4>
+ 1048: 02003028 .word 0x02003028
+ ...
+
+Disassembly of section .foo:
+
+02003020 <bar>:
+ 2003020: 4770 bx lr
+ ...
+
+02003024 <bar2>:
+ 2003024: e12fff1e bx lr
+
+02003028 <bar3>:
+ 2003028: e12fff1e bx lr
+
+0200302c <bar4>:
+ 200302c: 4770 bx lr
+
+0200302e <bar5>:
+ 200302e: 4770 bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-group.s b/binutils-2.21/ld/testsuite/ld-arm/farcall-group.s
new file mode 100644
index 0000000..0ede36d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-group.s
@@ -0,0 +1,44 @@
+@ Test to ensure that ARM calls exceeding 32Mb generate stubs.
+
+ .global _start
+ .syntax unified
+
+@ We will place the section .text at 0x1000.
+
+ .text
+
+_start:
+ bl bar
+ bl bar2
+
+
+@ We will place the section .foo at 0x2003020.
+
+ .section .foo, "xa"
+
+ .global bar
+ .thumb_func
+bar:
+ bx lr
+
+ .arm
+ .global bar2
+ .type bar2, %function
+bar2:
+ bx lr
+
+ .global bar3
+ .type bar3, %function
+bar3:
+ bx lr
+
+ .global bar4
+ .thumb_func
+bar4:
+ bx lr
+
+ .global bar5
+ .type bar5, %function
+bar5:
+ bx lr
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-group2.s b/binutils-2.21/ld/testsuite/ld-arm/farcall-group2.s
new file mode 100644
index 0000000..774869f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-group2.s
@@ -0,0 +1,7 @@
+@ Test to ensure that ARM calls exceeding 32Mb generate stubs.
+
+ .text
+myfunc:
+ bl bar3
+ bl bar4
+ bl bar5
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-group3.s b/binutils-2.21/ld/testsuite/ld-arm/farcall-group3.s
new file mode 100644
index 0000000..ea2ce7f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-group3.s
@@ -0,0 +1,9 @@
+@ Test to ensure that ARM calls exceeding 32Mb generate stubs,
+@ and that stubs are correctly inserted between input sections
+@ when one contribution size exceeds the limit.
+
+ .text
+ .global bar
+ .global _start
+_start:
+ bl bar
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-group4.s b/binutils-2.21/ld/testsuite/ld-arm/farcall-group4.s
new file mode 100644
index 0000000..17f503b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-group4.s
@@ -0,0 +1,13 @@
+@ Test to ensure that ARM calls exceeding 32Mb generate stubs,
+@ and that a large input section forces stub insertion before its
+@ contribution.
+
+ .text
+myfunc:
+ .space 0x2000000
+ bl bar
+
+ .section .far, "xa"
+ .global bar
+bar:
+ bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-mix.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-mix.d
new file mode 100644
index 0000000..97e062c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-mix.d
@@ -0,0 +1,51 @@
+
+.*: file format .*
+
+Disassembly of section .text:
+
+00001000 <_start>:
+ 1000: eb000004 bl 1018 <__bar_from_arm>
+ 1004: eb00000e bl 1044 <__bar2_veneer>
+ 1008: eb000005 bl 1024 <__bar3_veneer>
+ 100c: eb000009 bl 1038 <__bar4_from_arm>
+ 1010: eb000005 bl 102c <__bar5_from_arm>
+ 1014: 00000000 andeq r0, r0, r0
+
+00001018 <__bar_from_arm>:
+ 1018: e59fc000 ldr ip, \[pc, #0\] ; 1020 <__bar_from_arm\+0x8>
+ 101c: e12fff1c bx ip
+ 1020: 02002021 .word 0x02002021
+00001024 <__bar3_veneer>:
+ 1024: e51ff004 ldr pc, \[pc, #-4\] ; 1028 <__bar3_veneer\+0x4>
+ 1028: 02002028 .word 0x02002028
+0000102c <__bar5_from_arm>:
+ 102c: e59fc000 ldr ip, \[pc, #0\] ; 1034 <__bar5_from_arm\+0x8>
+ 1030: e12fff1c bx ip
+ 1034: 0200202f .word 0x0200202f
+00001038 <__bar4_from_arm>:
+ 1038: e59fc000 ldr ip, \[pc, #0\] ; 1040 <__bar4_from_arm\+0x8>
+ 103c: e12fff1c bx ip
+ 1040: 0200202d .word 0x0200202d
+
+00001044 <__bar2_veneer>:
+ 1044: e51ff004 ldr pc, \[pc, #-4\] ; 1048 <__bar2_veneer\+0x4>
+ 1048: 02002024 .word 0x02002024
+ ...
+
+Disassembly of section .foo:
+
+02002020 <bar>:
+ 2002020: 4770 bx lr
+ ...
+
+02002024 <bar2>:
+ 2002024: e12fff1e bx lr
+
+02002028 <bar3>:
+ 2002028: e12fff1e bx lr
+
+0200202c <bar4>:
+ 200202c: 4770 bx lr
+
+0200202e <bar5>:
+ 200202e: 4770 bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-mix.s b/binutils-2.21/ld/testsuite/ld-arm/farcall-mix.s
new file mode 100644
index 0000000..41b27f2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-mix.s
@@ -0,0 +1,46 @@
+@ Test to ensure that ARM calls exceeding 32Mb generate stubs.
+
+ .global _start
+ .syntax unified
+
+@ We will place the section .text at 0x1000.
+
+ .text
+
+_start:
+ bl bar
+ bl bar2
+ bl bar3
+ bl bar4
+ bl bar5
+
+@ We will place the section .foo at 0x2002020.
+
+ .section .foo, "xa"
+
+ .global bar
+ .thumb_func
+bar:
+ bx lr
+
+ .arm
+ .global bar2
+ .type bar2, %function
+bar2:
+ bx lr
+
+ .global bar3
+ .type bar3, %function
+bar3:
+ bx lr
+
+ .global bar4
+ .thumb_func
+bar4:
+ bx lr
+
+ .global bar5
+ .type bar5, %function
+bar5:
+ bx lr
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-mix2.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-mix2.d
new file mode 100644
index 0000000..c79ddea
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-mix2.d
@@ -0,0 +1,56 @@
+
+.*: file format .*
+
+Disassembly of section .text:
+
+00001000 <_start>:
+ 1000: eb000000 bl 1008 <__bar_from_arm>
+ 1004: eb000002 bl 1014 <__bar2_veneer>
+
+00001008 <__bar_from_arm>:
+ 1008: e59fc000 ldr ip, \[pc, #0\] ; 1010 <__bar_from_arm\+0x8>
+ 100c: e12fff1c bx ip
+ 1010: 02003021 .word 0x02003021
+00001014 <__bar2_veneer>:
+ 1014: e51ff004 ldr pc, \[pc, #-4\] ; 1018 <__bar2_veneer\+0x4>
+ 1018: 02003024 .word 0x02003024
+ 101c: 00000000 .word 0x00000000
+Disassembly of section .mytext:
+
+00002000 <__bar3_veneer-0x10>:
+ 2000: eb000002 bl 2010 <__bar3_veneer>
+ 2004: eb000003 bl 2018 <__bar4_from_arm>
+ 2008: eb000005 bl 2024 <__bar5_from_arm>
+ 200c: 00000000 andeq r0, r0, r0
+
+00002010 <__bar3_veneer>:
+ 2010: e51ff004 ldr pc, \[pc, #-4\] ; 2014 <__bar3_veneer\+0x4>
+ 2014: 02003028 .word 0x02003028
+
+00002018 <__bar4_from_arm>:
+ 2018: e59fc000 ldr ip, \[pc, #0\] ; 2020 <__bar4_from_arm\+0x8>
+ 201c: e12fff1c bx ip
+ 2020: 0200302d .word 0x0200302d
+
+00002024 <__bar5_from_arm>:
+ 2024: e59fc000 ldr ip, \[pc, #0\] ; 202c <__bar5_from_arm\+0x8>
+ 2028: e12fff1c bx ip
+ 202c: 0200302f .word 0x0200302f
+ ...
+Disassembly of section .foo:
+
+02003020 <bar>:
+ 2003020: 4770 bx lr
+ ...
+
+02003024 <bar2>:
+ 2003024: e12fff1e bx lr
+
+02003028 <bar3>:
+ 2003028: e12fff1e bx lr
+
+0200302c <bar4>:
+ 200302c: 4770 bx lr
+
+0200302e <bar5>:
+ 200302e: 4770 bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-mix2.s b/binutils-2.21/ld/testsuite/ld-arm/farcall-mix2.s
new file mode 100644
index 0000000..803e8d0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-mix2.s
@@ -0,0 +1,51 @@
+@ Test to ensure that ARM calls exceeding 32Mb generate stubs.
+
+ .global _start
+ .syntax unified
+
+@ We will place the section .text at 0x1000.
+
+ .text
+
+_start:
+ bl bar
+ bl bar2
+
+
+@ We will place the section .mytext at 0x2000.
+
+ .section .mytext, "xa"
+ bl bar3
+ bl bar4
+ bl bar5
+
+@ We will place the section .foo at 0x2003020.
+
+ .section .foo, "xa"
+
+ .global bar
+ .thumb_func
+bar:
+ bx lr
+
+ .arm
+ .global bar2
+ .type bar2, %function
+bar2:
+ bx lr
+
+ .global bar3
+ .type bar3, %function
+bar3:
+ bx lr
+
+ .global bar4
+ .thumb_func
+bar4:
+ bx lr
+
+ .global bar5
+ .type bar5, %function
+bar5:
+ bx lr
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-app-v5.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-app-v5.d
new file mode 100644
index 0000000..ec8312f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-app-v5.d
@@ -0,0 +1,85 @@
+
+tmpdir/farcall-mixed-app-v5: file format elf32-(little|big)arm
+architecture: arm, flags 0x00000112:
+EXEC_P, HAS_SYMS, D_PAGED
+start address 0x.*
+
+Disassembly of section .plt:
+
+.* <.plt>:
+ .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
+ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <_start-0x28>
+ .*: e08fe00e add lr, pc, lr
+ .*: e5bef008 ldr pc, \[lr, #8\]!
+ .*: .*
+ .*: e28fc6.* add ip, pc, #.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]!.*
+ .*: e28fc6.* add ip, pc, #.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]!.*
+
+Disassembly of section .text:
+
+.* <_start>:
+ .*: e1a0c00d mov ip, sp
+ .*: e92dd800 push {fp, ip, lr, pc}
+ .*: eb000008 bl .* <__app_func_veneer>
+ .*: ebfffff5 bl .* <_start-0x18>
+ .*: ebfffff1 bl .* <_start-0x24>
+ .*: e89d6800 ldm sp, {fp, sp, lr}
+ .*: e12fff1e bx lr
+ .*: e1a00000 nop ; \(mov r0, r0\)
+
+.* <app_tfunc_close>:
+ .*: b500 push {lr}
+ .*: f7ff efdc blx .* <_start-0x24>
+ .*: bd00 pop {pc}
+ .*: 4770 bx lr
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+
+.* <__app_func_veneer>:
+ .*: e51ff004 ldr pc, \[pc, #-4\] ; .* <__app_func_veneer\+0x4>
+ .*: 02100000 .word 0x02100000
+
+Disassembly of section .far_arm:
+
+.* <app_func>:
+ .*: e1a0c00d mov ip, sp
+ .*: e92dd800 push {fp, ip, lr, pc}
+ .*: eb000008 bl .* <__lib_func1_veneer>
+ .*: eb000009 bl .* <__lib_func2_veneer>
+ .*: e89d6800 ldm sp, {fp, sp, lr}
+ .*: e12fff1e bx lr
+ .*: e1a00000 nop ; \(mov r0, r0\)
+ .*: e1a00000 nop ; \(mov r0, r0\)
+
+.* <app_func2>:
+ .*: e12fff1e bx lr
+ .*: e1a00000 nop ; \(mov r0, r0\)
+ .*: e1a00000 nop ; \(mov r0, r0\)
+ .*: e1a00000 nop ; \(mov r0, r0\)
+
+.* <__lib_func1_veneer>:
+ .*: e51ff004 ldr pc, \[pc, #-4\] ; 2100034 <__lib_func1_veneer\+0x4>
+ .*: 000081e8 .word 0x000081e8
+.* <__lib_func2_veneer>:
+ .*: e51ff004 ldr pc, \[pc, #-4\] ; 210003c <__lib_func2_veneer\+0x4>
+ .*: 000081dc .word 0x000081dc
+
+Disassembly of section .far_thumb:
+
+.* <app_tfunc>:
+ .*: b500 push {lr}
+ .*: f000 e806 blx .* <__lib_func2_from_thumb>
+ .*: bd00 pop {pc}
+ .*: 4770 bx lr
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+
+.* <__lib_func2_from_thumb>:
+ .*: e51ff004 ldr pc, \[pc, #-4\] ; 2200014 <__lib_func2_from_thumb\+0x4>
+ .*: 000081dc .word 0x000081dc
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-app.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-app.d
new file mode 100644
index 0000000..c7aff3e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-app.d
@@ -0,0 +1,90 @@
+
+tmpdir/farcall-mixed-app: file format elf32-(little|big)arm
+architecture: arm, flags 0x00000112:
+EXEC_P, HAS_SYMS, D_PAGED
+start address 0x.*
+
+Disassembly of section .plt:
+
+.* <.plt>:
+ .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
+ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <_start-0x28>
+ .*: e08fe00e add lr, pc, lr
+ .*: e5bef008 ldr pc, \[lr, #8\]!
+ .*: .*
+ .*: 4778 bx pc
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: e28fc6.* add ip, pc, #.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]!.*
+ .*: e28fc6.* add ip, pc, #.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]!.*
+
+Disassembly of section .text:
+
+.* <_start>:
+ .*: e1a0c00d mov ip, sp
+ .*: e92dd800 push {fp, ip, lr, pc}
+ .*: eb000008 bl .* <__app_func_veneer>
+ .*: ebfffff6 bl .* <_start-0x14>
+ .*: ebfffff2 bl .* <_start-0x20>
+ .*: e89d6800 ldm sp, {fp, sp, lr}
+ .*: e12fff1e bx lr
+ .*: e1a00000 nop ; \(mov r0, r0\)
+
+.* <app_tfunc_close>:
+ .*: b500 push {lr}
+ .*: f7ff ffdb bl 81dc <_start-0x24>
+ .*: bd00 pop {pc}
+ .*: 4770 bx lr
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+
+.* <__app_func_veneer>:
+ .*: e51ff004 ldr pc, \[pc, #-4\] ; 8234 <__app_func_veneer\+0x4>
+ .*: 02100000 .word 0x02100000
+
+Disassembly of section .far_arm:
+
+.* <app_func>:
+ .*: e1a0c00d mov ip, sp
+ .*: e92dd800 push {fp, ip, lr, pc}
+ .*: eb000008 bl .* <__lib_func1_veneer>
+ .*: eb000009 bl .* <__lib_func2_veneer>
+ .*: e89d6800 ldm sp, {fp, sp, lr}
+ .*: e12fff1e bx lr
+ .*: e1a00000 nop ; \(mov r0, r0\)
+ .*: e1a00000 nop ; \(mov r0, r0\)
+
+.* <app_func2>:
+ .*: e12fff1e bx lr
+ .*: e1a00000 nop ; \(mov r0, r0\)
+ .*: e1a00000 nop ; \(mov r0, r0\)
+ .*: e1a00000 nop ; \(mov r0, r0\)
+
+.* <__lib_func1_veneer>:
+ .*: e51ff004 ldr pc, \[pc, #-4\] ; 2100034 <__lib_func1_veneer\+0x4>
+ .*: 000081ec .word 0x000081ec
+.* <__lib_func2_veneer>:
+ .*: e51ff004 ldr pc, \[pc, #-4\] ; 210003c <__lib_func2_veneer\+0x4>
+ .*: 000081e0 .word 0x000081e0
+
+Disassembly of section .far_thumb:
+
+.* <app_tfunc>:
+ .*: b500 push {lr}
+ .*: f000 f805 bl .* <__lib_func2_from_thumb>
+ .*: bd00 pop {pc}
+ .*: 4770 bx lr
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+
+.* <__lib_func2_from_thumb>:
+ .*: 4778 bx pc
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: e51ff004 ldr pc, \[pc, #-4\] ; 2200018 <__lib_func2_from_thumb\+0x8>
+ .*: 000081e0 .word 0x000081e0
+ .*: 00000000 .word 0x00000000
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-app.r b/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-app.r
new file mode 100644
index 0000000..910a361
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-app.r
@@ -0,0 +1,10 @@
+
+tmpdir/farcall-mixed-app.*: file format elf32-(little|big)arm
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+.* R_ARM_COPY data_obj
+.* R_ARM_JUMP_SLOT lib_func2
+.* R_ARM_JUMP_SLOT lib_func1
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-app.s b/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-app.s
new file mode 100644
index 0000000..e462ba3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-app.s
@@ -0,0 +1,61 @@
+ .text
+ .p2align 4
+ .globl _start
+_start:
+ mov ip, sp
+ stmdb sp!, {r11, ip, lr, pc}
+ bl app_func
+ bl lib_func1
+ bl lib_func2
+ ldmia sp, {r11, sp, lr}
+ bx lr
+
+ .p2align 4
+ .globl app_tfunc_close
+ .type app_tfunc_close,%function
+ .thumb_func
+ .code 16
+app_tfunc_close:
+ push {lr}
+ bl lib_func2
+ pop {pc}
+ bx lr
+
+@ We will place the section .far_arm at 0x2100000.
+ .section .far_arm, "xa"
+
+ .arm
+ .p2align 4
+ .globl app_func
+ .type app_func,%function
+app_func:
+ mov ip, sp
+ stmdb sp!, {r11, ip, lr, pc}
+ bl lib_func1
+ bl lib_func2
+ ldmia sp, {r11, sp, lr}
+ bx lr
+
+ .arm
+ .p2align 4
+ .globl app_func2
+ .type app_func2,%function
+app_func2:
+ bx lr
+
+@ We will place the section .far_thumb at 0x2200000.
+ .section .far_thumb, "xa"
+
+ .p2align 4
+ .globl app_tfunc
+ .type app_tfunc,%function
+ .thumb_func
+ .code 16
+app_tfunc:
+ push {lr}
+ bl lib_func2
+ pop {pc}
+ bx lr
+
+ .data
+ .long data_obj
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-app.sym b/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-app.sym
new file mode 100644
index 0000000..8e04cc3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-app.sym
@@ -0,0 +1,15 @@
+
+Symbol table for image:
+ +Num +Buc: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start__
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+ +.. +..: ........ +4 +OBJECT +GLOBAL +DEFAULT +12 data_obj
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_end__
+ +.. +..: 0*[^0]*.* +0 +FUNC +GLOBAL +DEFAULT +UND lib_func1
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +11 __data_start
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __end__
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +.. +..: .......0 +0 +FUNC +GLOBAL +DEFAULT +14 app_func2
+ +.. +..: 0*[^0]*.* +0 +FUNC +GLOBAL +DEFAULT +UND lib_func2
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _bss_end__
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-lib-v4t.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-lib-v4t.d
new file mode 100644
index 0000000..b6729b2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-lib-v4t.d
@@ -0,0 +1,123 @@
+tmpdir/farcall-mixed-lib.so: file format elf32-(little|big)arm
+architecture: arm, flags 0x00000150:
+HAS_SYMS, DYNAMIC, D_PAGED
+start address 0x.*
+
+Disassembly of section .plt:
+
+.* <.plt>:
+ .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
+ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <lib_func1-0x.*>
+ .*: e08fe00e add lr, pc, lr
+ .*: e5bef008 ldr pc, \[lr, #8\]!
+ .*: .* .word .*
+ .*: 4778 bx pc
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: e28fc6.* add ip, pc, #.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]! ; .*
+ .*: 4778 bx pc
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: e28fc6.* add ip, pc, #.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]! ; 0x.*
+ .*: 4778 bx pc
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: e28fc6.* add ip, pc, #.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]! ; 0x.*
+ .*: 4778 bx pc
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: e28fc6.* add ip, pc, #.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]! ; 0x.*
+
+Disassembly of section .text:
+
+.* <lib_func1>:
+ .*: e1a0c00d mov ip, sp
+ .*: e92dd800 push {fp, ip, lr, pc}
+ .*: ebffff.. bl .* <lib_func1-0x.*>
+ .*: ebffff.. bl .* <lib_func1-0x.*>
+ .*: ebffff.. bl .* <lib_func1-0x.*>
+ .*: ebffff.. bl .* <lib_func1-0x.*>
+ .*: e89d6800 ldm sp, {fp, sp, lr}
+ .*: e12fff1e bx lr
+ ...
+
+.* <__real_lib_func2>:
+ .*: f000 f80e bl 1000330 <__app_func_from_thumb>
+ .*: f000 f81c bl 1000350 <__app_func_weak_from_thumb>
+ .*: f000 f822 bl 1000360 <__lib_func3_from_thumb>
+ .*: f000 f810 bl 1000340 <__lib_func4_from_thumb>
+ .*: 4770 bx lr
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+
+.* <__app_func_from_thumb>:
+ .*: 4778 bx pc
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: e59fc000 ldr ip, \[pc, #0\] ; 100033c <__app_func_from_thumb\+0xc>
+ .*: e08cf00f add pc, ip, pc
+ .*: feffff68 .word 0xfeffff68
+
+.* <__lib_func4_from_thumb>:
+ .*: 4778 bx pc
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: e59fc000 ldr ip, \[pc, #0\] ; 100034c <__lib_func4_from_thumb\+0xc>
+ .*: e08cf00f add pc, ip, pc
+ .*: feffff88 .word 0xfeffff88
+
+.* <__app_func_weak_from_thumb>:
+ .*: 4778 bx pc
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: e59fc000 ldr ip, \[pc, #0\] ; 100035c <__app_func_weak_from_thumb\+0xc>
+ .*: e08cf00f add pc, ip, pc
+ .*: feffff58 .word 0xfeffff58
+
+.* <__lib_func3_from_thumb>:
+ .*: 4778 bx pc
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: e59fc000 ldr ip, \[pc, #0\] ; 100036c <__lib_func3_from_thumb\+0xc>
+ .*: e08cf00f add pc, ip, pc
+ .*: feffff58 .word 0xfeffff58
+ ...
+
+.* <__real_lib_func3>:
+ .*: f000 f806 bl 2000380 <__app_func_from_thumb>
+ .*: f000 f80c bl 2000390 <__app_func_weak_from_thumb>
+ .*: 4770 bx lr
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+
+.* <__app_func_from_thumb>:
+ .*: 4778 bx pc
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: e59fc000 ldr ip, \[pc, #0\] ; 200038c <__app_func_from_thumb\+0xc>
+ .*: e08cf00f add pc, ip, pc
+ .*: fdffff18 .word 0xfdffff18
+
+.* <__app_func_weak_from_thumb>:
+ .*: 4778 bx pc
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: e59fc000 ldr ip, \[pc, #0\] ; 200039c <__app_func_weak_from_thumb\+0xc>
+ .*: e08cf00f add pc, ip, pc
+ .*: fdffff18 .word 0xfdffff18
+
+.* <lib_func3>:
+ .*: e59fc004 ldr ip, \[pc, #4\] ; 20003ac <lib_func3\+0xc>
+ .*: e08cc00f add ip, ip, pc
+ .*: e12fff1c bx ip
+ .*: ffffffc5 .word 0xffffffc5
+
+.* <lib_func2>:
+ .*: e59fc004 ldr ip, \[pc, #4\] ; 20003bc <lib_func2\+0xc>
+ .*: e08cc00f add ip, ip, pc
+ .*: e12fff1c bx ip
+ .*: feffff55 .word 0xfeffff55
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-lib.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-lib.d
new file mode 100644
index 0000000..9df3933
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-lib.d
@@ -0,0 +1,92 @@
+tmpdir/farcall-mixed-lib.so: file format elf32-(little|big)arm
+architecture: arm, flags 0x00000150:
+HAS_SYMS, DYNAMIC, D_PAGED
+start address 0x.*
+
+Disassembly of section .plt:
+
+.* <.plt>:
+ .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
+ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <lib_func1-0x.*>
+ .*: e08fe00e add lr, pc, lr
+ .*: e5bef008 ldr pc, \[lr, #8\]!
+ .*: .*
+ .*: e28fc6.* add ip, pc, #.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]!.*
+ .*: e28fc6.* add ip, pc, #.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]!.*
+ .*: e28fc6.* add ip, pc, #.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]!.*
+ .*: e28fc6.* add ip, pc, #.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]!.*
+
+Disassembly of section .text:
+
+.* <lib_func1>:
+ .*: e1a0c00d mov ip, sp
+ .*: e92dd800 push {fp, ip, lr, pc}
+ .*: ebffff.. bl .* <lib_func1-0x..?>
+ .*: ebffff.. bl .* <lib_func1-0x..?>
+ .*: ebfffff. bl .* <lib_func1-0x..?>
+ .*: ebfffff. bl .* <lib_func1-0x..?>
+ .*: e89d6800 ldm sp, {fp, sp, lr}
+ .*: e12fff1e bx lr
+ ...
+
+.* <lib_func2>:
+ .*: f000 e820 blx 1000344 <__app_func_from_thumb>
+ .*: f000 e812 blx 100032c <__app_func_weak_from_thumb>
+ .*: f000 e80a blx 1000320 <__lib_func3_from_thumb>
+ .*: f000 e814 blx 1000338 <__lib_func4_from_thumb>
+ .*: 4770 bx lr
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+
+.* <__lib_func3_from_thumb>:
+ .*: e59fc000 ldr ip, \[pc, #0\] ; 1000328 <__lib_func3_from_thumb\+0x8>
+ .*: e08ff00c add pc, pc, ip
+ .*: feffff90 .word 0xfeffff90
+
+.* <__app_func_weak_from_thumb>:
+ .*: e59fc000 ldr ip, \[pc, #0\] ; 1000334 <__app_func_weak_from_thumb\+0x8>
+ .*: e08ff00c add pc, pc, ip
+ .*: feffff78 .word 0xfeffff78
+
+.* <__lib_func4_from_thumb>:
+ .*: e59fc000 ldr ip, \[pc, #0\] ; 1000340 <__lib_func4_from_thumb\+0x8>
+ .*: e08ff00c add pc, pc, ip
+ .*: feffff84 .word 0xfeffff84
+
+.* <__app_func_from_thumb>:
+ .*: e59fc000 ldr ip, \[pc, #0\] ; 100034c <__app_func_from_thumb\+0x8>
+ .*: e08ff00c add pc, pc, ip
+ .*: feffff54 .word 0xfeffff54
+ ...
+
+.* <lib_func3>:
+ .*: f000 e806 blx 2000370 <__app_func_from_thumb>
+ .*: f000 e80a blx 200037c <__app_func_weak_from_thumb>
+ .*: 4770 bx lr
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+
+.* <__app_func_from_thumb>:
+ .*: e59fc000 ldr ip, \[pc, #0\] ; 2000378 <__app_func_from_thumb\+0x8>
+ .*: e08ff00c add pc, pc, ip
+ .*: fdffff28 .word 0xfdffff28
+
+.* <__app_func_weak_from_thumb>:
+ .*: e59fc000 ldr ip, \[pc, #0\] ; 2000384 <__app_func_weak_from_thumb\+0x8>
+ .*: e08ff00c add pc, pc, ip
+ .*: fdffff28 .word 0xfdffff28
+ ...
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-lib.r b/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-lib.r
new file mode 100644
index 0000000..a44f83b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-lib.r
@@ -0,0 +1,8 @@
+
+tmpdir/farcall-mixed-lib.so: file format elf32-(little|big)arm
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+.* R_ARM_JUMP_SLOT app_func2
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-lib1.s b/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-lib1.s
new file mode 100644
index 0000000..dea26b9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-lib1.s
@@ -0,0 +1,34 @@
+@ Create a large shared library so that calls through PLT to an undef
+@ symbol require insertion of a long branch stub.
+@ Check also calls to an undef weak symbol.
+
+ .text
+
+ .p2align 4
+ .globl lib_func1
+ .type lib_func1, %function
+lib_func1:
+ mov ip, sp
+ stmdb sp!, {r11, ip, lr, pc}
+ bl app_func
+ .weak app_func_weak
+ bl app_func_weak
+ bl lib_func3
+ bl lib_func4
+ ldmia sp, {r11, sp, lr}
+ bx lr
+ .size lib_func1, . - lib_func1
+
+ .space 0x1000000
+ .p2align 4
+ .globl lib_func2
+ .type lib_func2, %function
+ .thumb_func
+ .code 16
+lib_func2:
+ bl app_func
+ bl app_func_weak
+ bl lib_func3
+ bl lib_func4
+ bx lr
+ .size lib_func2, . - lib_func2
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-lib2.s b/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-lib2.s
new file mode 100644
index 0000000..b75c534
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-mixed-lib2.s
@@ -0,0 +1,18 @@
+@ Create a large shared library so that calls through PLT to an undef
+@ symbol require insertion of a long branch stub.
+@ Check also calls to an undef weak symbol.
+
+ .text
+
+ .space 0x1000000
+ .p2align 4
+ .globl lib_func3
+ .type lib_func3, %function
+ .thumb_func
+ .code 16
+lib_func3:
+ bl app_func
+ .weak app_func_weak
+ bl app_func_weak
+ bx lr
+ .size lib_func3, . - lib_func3
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-section.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-section.d
new file mode 100644
index 0000000..4e6d37d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-section.d
@@ -0,0 +1,5 @@
+#name: ARM-ARM farcall to symbol of type STT_SECTION
+#source: farcall-section.s
+#as:
+#ld: -Ttext 0x1000 --section-start .foo=0x2001014
+#error: .*\(.text\+0x0\): relocation truncated to fit: R_ARM_CALL against `.foo'
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-section.s b/binutils-2.21/ld/testsuite/ld-arm/farcall-section.s
new file mode 100644
index 0000000..31c9038
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-section.s
@@ -0,0 +1,20 @@
+@ Test to ensure that a ARM to ARM call exceeding 32Mb generates an error
+@ if the destination is of type STT_SECTION (eg non-global symbol)
+
+ .global _start
+ .syntax unified
+
+@ We will place the section .text at 0x1000.
+
+ .text
+
+_start:
+ bl bar
+
+@ We will place the section .foo at 0x2001020.
+
+ .section .foo, "xa"
+
+bar:
+ bx lr
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm-blx-pic-veneer.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm-blx-pic-veneer.d
new file mode 100644
index 0000000..a0d1f36
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm-blx-pic-veneer.d
@@ -0,0 +1,18 @@
+.*: file format .*
+
+Disassembly of section .text:
+
+01c01010 <_start>:
+ 1c01010: f300 e802 blx 1f01018 <__bar_from_thumb>
+ \.\.\.
+ 1f01014: f0ff effe blx 2001014 <bar>
+
+01f01018 <__bar_from_thumb>:
+ 1f01018: e59fc000 ldr ip, \[pc, #0\] ; 1f01020 <__bar_from_thumb\+0x8>
+ 1f0101c: e08ff00c add pc, pc, ip
+ 1f01020: 000ffff0 .word 0x000ffff0
+ 1f01024: 00000000 .word 0x00000000
+Disassembly of section .foo:
+
+02001014 <bar>:
+ 2001014: e12fff1e bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm-blx.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm-blx.d
new file mode 100644
index 0000000..4a2b36a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm-blx.d
@@ -0,0 +1,16 @@
+.*: file format .*
+
+Disassembly of section .text:
+
+01c01010 <_start>:
+ 1c01010: f300 e802 blx 1f01018 <__bar_from_thumb>
+ \.\.\.
+ 1f01014: f0ff effe blx 2001014 <bar>
+
+01f01018 <__bar_from_thumb>:
+ 1f01018: e51ff004 ldr pc, \[pc, #-4\] ; 1f0101c <__bar_from_thumb\+0x4>
+ 1f0101c: 02001014 .word 0x02001014
+Disassembly of section .foo:
+
+02001014 <bar>:
+ 2001014: e12fff1e bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm-pic-veneer.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm-pic-veneer.d
new file mode 100644
index 0000000..eb8da17
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm-pic-veneer.d
@@ -0,0 +1,20 @@
+.*: file format .*
+
+Disassembly of section .text:
+
+01c01010 <_start>:
+ 1c01010: f300 f802 bl 1f01018 <__bar_from_thumb>
+ ...
+ 1f01014: f000 f800 bl 1f01018 <__bar_from_thumb>
+
+01f01018 <__bar_from_thumb>:
+ 1f01018: 4778 bx pc
+ 1f0101a: 46c0 nop ; \(mov r8, r8\)
+ 1f0101c: e59fc000 ldr ip, \[pc, #0\] ; 1f01024 <__bar_from_thumb\+0xc>
+ 1f01020: e08cf00f add pc, ip, pc
+ 1f01024: 000fffec .word 0x000fffec
+
+Disassembly of section .foo:
+
+02001014 <bar>:
+ 2001014: e12fff1e bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm-short.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm-short.d
new file mode 100644
index 0000000..4e19039
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm-short.d
@@ -0,0 +1,17 @@
+.*: file format .*
+
+Disassembly of section .text:
+
+00001000 <_start>:
+ 1000: f000 f802 bl 1008 <__bar_from_thumb>
+ 1004: 0000 movs r0, r0
+ \.\.\.
+
+00001008 <__bar_from_thumb>:
+ 1008: 4778 bx pc
+ 100a: 46c0 nop ; \(mov r8, r8\)
+ 100c: ea000400 b 2014 <bar>
+Disassembly of section .foo:
+
+00002014 <bar>:
+ 2014: e12fff1e bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm-short.s b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm-short.s
new file mode 100644
index 0000000..1865380
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm-short.s
@@ -0,0 +1,21 @@
+@ Test to ensure that a Thumb to ARM call within 4Mb does not generate a stub.
+
+ .global _start
+ .syntax unified
+
+@ We will place the section .text at 0x1000.
+
+ .text
+ .thumb_func
+_start:
+ bl bar
+
+@ We will place the section .foo at 0x2014.
+
+ .section .foo, "xa"
+
+ .arm
+ .type bar, %function
+bar:
+ bx lr
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm.d
new file mode 100644
index 0000000..5dc377a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm.d
@@ -0,0 +1,25 @@
+.*: file format .*
+
+Disassembly of section .text:
+
+01c01010 <_start>:
+ 1c01010: f300 f802 bl 1f01018 <__bar_from_thumb>
+ \.\.\.
+ 1f01014: f000 f806 bl 1f01024 <__bar_from_thumb>
+
+01f01018 <__bar_from_thumb>:
+ 1f01018: 4778 bx pc
+ 1f0101a: 46c0 nop ; \(mov r8, r8\)
+ 1f0101c: e51ff004 ldr pc, \[pc, #-4\] ; 1f01020 <__bar_from_thumb\+0x8>
+ 1f01020: 02001014 .word 0x02001014
+
+01f01024 <__bar_from_thumb>:
+ 1f01024: 4778 bx pc
+ 1f01026: 46c0 nop ; \(mov r8, r8\)
+ 1f01028: ea03fff9 b 2001014 <bar>
+ 1f0102c: 00000000 andeq r0, r0, r0
+
+Disassembly of section .foo:
+
+02001014 <bar>:
+ 2001014: e12fff1e bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm.s b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm.s
new file mode 100644
index 0000000..1fd6a07
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-arm.s
@@ -0,0 +1,27 @@
+@ Test to ensure that a Thumb to ARM call exceeding 4Mb generates a stub.
+@ Check that we can generate two types of stub in the same section.
+
+ .global _start
+ .syntax unified
+
+@ We will place the section .text at 0x1c01010.
+
+ .text
+ .thumb_func
+_start:
+ .global bar
+ bl bar
+@ This call is close enough to generate a "short branch" stub
+@ or no stub if blx is available.
+ .space 0x0300000
+ bl bar
+
+@ We will place the section .foo at 0x2001014.
+
+ .section .foo, "xa"
+
+ .arm
+ .type bar, %function
+bar:
+ bx lr
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb-blx-pic-veneer.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb-blx-pic-veneer.d
new file mode 100644
index 0000000..27b208e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb-blx-pic-veneer.d
@@ -0,0 +1,18 @@
+.*: file format .*
+
+Disassembly of section .text:
+
+00001000 <_start>:
+ 1000: f000 e802 blx 1008 <__bar_veneer>
+ 1004: 0000 movs r0, r0
+ \.\.\.
+
+00001008 <__bar_veneer>:
+ 1008: e59fc004 ldr ip, \[pc, #4\] ; 1014 <__bar_veneer\+0xc>
+ 100c: e08fc00c add ip, pc, ip
+ 1010: e12fff1c bx ip
+ 1014: 02000001 .word 0x02000001
+Disassembly of section .foo:
+
+02001014 <bar>:
+ 2001014: 4770 bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb-blx.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb-blx.d
new file mode 100644
index 0000000..7998746
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb-blx.d
@@ -0,0 +1,16 @@
+.*: file format .*
+
+Disassembly of section .text:
+
+00001000 <_start>:
+ 1000: f000 e802 blx 1008 <__bar_veneer>
+ 1004: 0000 movs r0, r0
+ \.\.\.
+
+00001008 <__bar_veneer>:
+ 1008: e51ff004 ldr pc, \[pc, #-4\] ; 100c <__bar_veneer\+0x4>
+ 100c: 02001015 .word 0x02001015
+Disassembly of section .foo:
+
+02001014 <bar>:
+ 2001014: 4770 bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb-m-pic-veneer.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb-m-pic-veneer.d
new file mode 100644
index 0000000..974c1e9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb-m-pic-veneer.d
@@ -0,0 +1,22 @@
+.*: file format .*
+
+Disassembly of section .text:
+
+00001000 <_start>:
+ 1000: f000 f802 bl 1008 <__bar_veneer>
+ 1004: 0000 movs r0, r0
+ ...
+
+00001008 <__bar_veneer>:
+ 1008: b401 push {r0}
+ 100a: 4802 ldr r0, \[pc, #8\] ; \(1014 <__bar_veneer\+0xc>\)
+ 100c: 46fc mov ip, pc
+ 100e: 4484 add ip, r0
+ 1010: bc01 pop {r0}
+ 1012: 4760 bx ip
+ 1014: 02000005 .word 0x02000005
+
+Disassembly of section .foo:
+
+02001014 <bar>:
+ 2001014: 4770 bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb-m.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb-m.d
new file mode 100644
index 0000000..e63b3f8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb-m.d
@@ -0,0 +1,21 @@
+.*: file format .*
+
+Disassembly of section .text:
+
+00001000 <_start>:
+ 1000: f000 f802 bl 1008 <__bar_veneer>
+ 1004: 0000 movs r0, r0
+ \.\.\.
+
+00001008 <__bar_veneer>:
+ 1008: b401 push {r0}
+ 100a: 4802 ldr r0, \[pc, #8\] ; \(1014 <__bar_veneer\+0xc>\)
+ 100c: 4684 mov ip, r0
+ 100e: bc01 pop {r0}
+ 1010: 4760 bx ip
+ 1012: bf00 nop
+ 1014: 02001015 .word 0x02001015
+Disassembly of section .foo:
+
+02001014 <bar>:
+ 2001014: 4770 bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb-pic-veneer.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb-pic-veneer.d
new file mode 100644
index 0000000..8b14599
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb-pic-veneer.d
@@ -0,0 +1,22 @@
+.*: file format .*
+
+Disassembly of section .text:
+
+00001000 <_start>:
+ 1000: f000 f802 bl 1008 <__bar_veneer>
+ 1004: 0000 movs r0, r0
+ ...
+
+00001008 <__bar_veneer>:
+ 1008: 4778 bx pc
+ 100a: 46c0 nop ; \(mov r8, r8\)
+ 100c: e59fc004 ldr ip, \[pc, #4\] ; 1018 <__bar_veneer\+0x10>
+ 1010: e08fc00c add ip, pc, ip
+ 1014: e12fff1c bx ip
+ 1018: 01fffffd .word 0x01fffffd
+ 101c: 00000000 .word 0x00000000
+
+Disassembly of section .foo:
+
+02001014 <bar>:
+ 2001014: 4770 bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb.d b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb.d
new file mode 100644
index 0000000..ffbc6df
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb.d
@@ -0,0 +1,19 @@
+.*: file format .*
+
+Disassembly of section .text:
+
+00001000 <_start>:
+ 1000: f000 f802 bl 1008 <__bar_veneer>
+ 1004: 0000 movs r0, r0
+ \.\.\.
+
+00001008 <__bar_veneer>:
+ 1008: 4778 bx pc
+ 100a: 46c0 nop ; \(mov r8, r8\)
+ 100c: e59fc000 ldr ip, \[pc, #0\] ; 1014 <__bar_veneer\+0xc>
+ 1010: e12fff1c bx ip
+ 1014: 02001015 .word 0x02001015
+Disassembly of section .foo:
+
+02001014 <bar>:
+ 2001014: 4770 bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb.s b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb.s
new file mode 100644
index 0000000..650b1a6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/farcall-thumb-thumb.s
@@ -0,0 +1,19 @@
+@ Test to ensure that a Thumb to Thumb call exceeding 4Mb generates a stub.
+
+ .global _start
+ .syntax unified
+
+@ We will place the section .text at 0x1000.
+
+ .text
+ .thumb_func
+_start:
+ bl bar
+
+@ We will place the section .foo at 0x02001014.
+
+ .section .foo, "xa"
+ .thumb_func
+bar:
+ bx lr
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/gc-unwind.d b/binutils-2.21/ld/testsuite/ld-arm/gc-unwind.d
new file mode 100644
index 0000000..fbb7911
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/gc-unwind.d
@@ -0,0 +1,5 @@
+
+.*: file format.*
+
+Contents of section .data:
+ [^ ]* 22222222 .*
diff --git a/binutils-2.21/ld/testsuite/ld-arm/gc-unwind.s b/binutils-2.21/ld/testsuite/ld-arm/gc-unwind.s
new file mode 100644
index 0000000..c5326c2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/gc-unwind.s
@@ -0,0 +1,38 @@
+@ Test -gc-sections and unwinding tables. .data.eh should be pulled in
+@ via the EH tables, .data.foo should not.
+.text
+.global _start
+.fnstart
+_start:
+bx lr
+.personality my_pr
+.handlerdata
+.word 0
+.fnend
+
+.section .data.foo
+my_foo:
+.word 0x11111111
+
+.section .text.foo
+.fnstart
+foo:
+bx lr
+.personality my_pr
+.handlerdata
+.word my_foo
+.fnend
+
+.section .data.eh
+my_eh:
+.word 0x22222222
+
+.section .text.eh
+.fnstart
+my_pr:
+bx lr
+.personality my_pr
+.handlerdata
+.word my_eh
+.fnend
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/group-relocs-alu-bad.d b/binutils-2.21/ld/testsuite/ld-arm/group-relocs-alu-bad.d
new file mode 100644
index 0000000..0346db1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/group-relocs-alu-bad.d
@@ -0,0 +1,4 @@
+#name: ALU group relocations failure test
+#source: group-relocs-alu-bad.s
+#ld: -Ttext 0x8000 --section-start foo=0x9010
+#error: Overflow whilst splitting 0x1010 for group relocation
diff --git a/binutils-2.21/ld/testsuite/ld-arm/group-relocs-alu-bad.s b/binutils-2.21/ld/testsuite/ld-arm/group-relocs-alu-bad.s
new file mode 100644
index 0000000..e644669
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/group-relocs-alu-bad.s
@@ -0,0 +1,20 @@
+@ Test intended to fail for ALU group relocations.
+@
+@ Beware when editing this file: it is carefully crafted so that
+@ a specific PC-relative offset arises.
+
+@ We will place .text at 0x8000.
+
+ .text
+ .globl _start
+
+_start:
+ add r0, r0, #:pc_g0:(bar)
+
+@ We will place the section foo at 0x9004.
+
+ .section foo
+
+bar:
+ mov r0, #0
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/group-relocs-ldc-bad.d b/binutils-2.21/ld/testsuite/ld-arm/group-relocs-ldc-bad.d
new file mode 100644
index 0000000..d4bfb2d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/group-relocs-ldc-bad.d
@@ -0,0 +1,4 @@
+#name: LDC group relocations failure test
+#source: group-relocs-ldc-bad.s
+#ld: -Ttext 0x8000 --section-start foo=0x118400
+#error: Overflow whilst splitting 0x110400 for group relocation
diff --git a/binutils-2.21/ld/testsuite/ld-arm/group-relocs-ldc-bad.s b/binutils-2.21/ld/testsuite/ld-arm/group-relocs-ldc-bad.s
new file mode 100644
index 0000000..611255b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/group-relocs-ldc-bad.s
@@ -0,0 +1,19 @@
+@ Test intended to fail for LDC group relocations.
+
+@ We will place .text at 0x8000.
+
+ .text
+ .globl _start
+
+_start:
+ add r0, r0, #:pc_g0_nc:(bar)
+ ldc 0, c0, [r0, #:pc_g1:(bar + 4)]
+
+@ We will place the section foo at 0x118400.
+@ (The relocations above would be OK if it were at 0x118200, for example.)
+
+ .section foo
+
+bar:
+ mov r0, #0
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/group-relocs-ldr-bad.d b/binutils-2.21/ld/testsuite/ld-arm/group-relocs-ldr-bad.d
new file mode 100644
index 0000000..04586af
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/group-relocs-ldr-bad.d
@@ -0,0 +1,4 @@
+#name: LDR group relocations failure test
+#source: group-relocs-ldr-bad.s
+#ld: -Ttext 0x8000 --section-start foo=0x8001000
+#error: .*Overflow whilst splitting 0x8001000 for group relocation.*
diff --git a/binutils-2.21/ld/testsuite/ld-arm/group-relocs-ldr-bad.s b/binutils-2.21/ld/testsuite/ld-arm/group-relocs-ldr-bad.s
new file mode 100644
index 0000000..6ab4f3c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/group-relocs-ldr-bad.s
@@ -0,0 +1,18 @@
+@ Test intended to fail for LDR group relocations.
+
+@ We will place .text at 0x8000.
+
+ .text
+ .globl _start
+
+_start:
+ add r0, r0, #:sb_g0_nc:(bar)
+ ldr r1, [r0, #:sb_g1:(bar)]
+
+@ We will place the section foo at 0x8001000.
+
+ .section foo
+
+bar:
+ mov r0, #0
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/group-relocs-ldrs-bad.d b/binutils-2.21/ld/testsuite/ld-arm/group-relocs-ldrs-bad.d
new file mode 100644
index 0000000..0520184
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/group-relocs-ldrs-bad.d
@@ -0,0 +1,4 @@
+#name: LDRS group relocations failure test
+#source: group-relocs-ldrs-bad.s
+#ld: -Ttext 0x8000 --section-start foo=0x8000100
+#error: Overflow whilst splitting 0x8000100 for group relocation
diff --git a/binutils-2.21/ld/testsuite/ld-arm/group-relocs-ldrs-bad.s b/binutils-2.21/ld/testsuite/ld-arm/group-relocs-ldrs-bad.s
new file mode 100644
index 0000000..4480d4a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/group-relocs-ldrs-bad.s
@@ -0,0 +1,17 @@
+@ Test intended to fail for LDRS group relocations.
+
+@ We will place .text at 0x8000.
+
+ .text
+ .globl _start
+
+_start:
+ add r0, r0, #:sb_g0_nc:(bar)
+ ldrd r2, [r0, #:sb_g1:(bar)]
+
+@ We will place the section foo at 0x8000100.
+
+ .section foo
+
+bar:
+ mov r0, #0
diff --git a/binutils-2.21/ld/testsuite/ld-arm/group-relocs.d b/binutils-2.21/ld/testsuite/ld-arm/group-relocs.d
new file mode 100644
index 0000000..e81739d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/group-relocs.d
@@ -0,0 +1,69 @@
+
+tmpdir/group-relocs: file format elf32-(little|big)arm
+
+Disassembly of section .text:
+
+00008000 <_start>:
+ 8000: e28f00bc add r0, pc, #188 ; 0xbc
+ 8004: e28f0c6e add r0, pc, #28160 ; 0x6e00
+ 8008: e28000ec add r0, r0, #236 ; 0xec
+ 800c: e28f08ff add r0, pc, #16711680 ; 0xff0000
+ 8010: e2800c6e add r0, r0, #28160 ; 0x6e00
+ 8014: e28000e4 add r0, r0, #228 ; 0xe4
+ 8018: e2800000 add r0, r0, #0
+ 801c: e28f0cee add r0, pc, #60928 ; 0xee00
+ 8020: e28000f0 add r0, r0, #240 ; 0xf0
+ 8024: e28008ff add r0, r0, #16711680 ; 0xff0000
+ 8028: e2800cee add r0, r0, #60928 ; 0xee00
+ 802c: e28000f0 add r0, r0, #240 ; 0xf0
+ 8030: e2800c6e add r0, r0, #28160 ; 0x6e00
+ 8034: e59010c0 ldr r1, \[r0, #192\].*
+ 8038: e28008ff add r0, r0, #16711680 ; 0xff0000
+ 803c: e2800c6e add r0, r0, #28160 ; 0x6e00
+ 8040: e59010b8 ldr r1, \[r0, #184\].*
+ 8044: e5901000 ldr r1, \[r0\]
+ 8048: e2800cee add r0, r0, #60928 ; 0xee00
+ 804c: e59010f0 ldr r1, \[r0, #240\].*
+ 8050: e28008ff add r0, r0, #16711680 ; 0xff0000
+ 8054: e2800cee add r0, r0, #60928 ; 0xee00
+ 8058: e59010f0 ldr r1, \[r0, #240\].*
+ 805c: e1c026d0 ldrd r2, \[r0, #96\].*
+ 8060: e2800c6e add r0, r0, #28160 ; 0x6e00
+ 8064: e1c029d0 ldrd r2, \[r0, #144\].*
+ 8068: e28008ff add r0, r0, #16711680 ; 0xff0000
+ 806c: e2800c6e add r0, r0, #28160 ; 0x6e00
+ 8070: e1c028d8 ldrd r2, \[r0, #136\].*
+ 8074: e1c020d0 ldrd r2, \[r0\]
+ 8078: e2800cee add r0, r0, #60928 ; 0xee00
+ 807c: e1c02fd0 ldrd r2, \[r0, #240\].*
+ 8080: e28008ff add r0, r0, #16711680 ; 0xff0000
+ 8084: e2800cee add r0, r0, #60928 ; 0xee00
+ 8088: e1c02fd0 ldrd r2, \[r0, #240\].*
+ 808c: ed90000c ldc 0, cr0, \[r0, #48\].*
+ 8090: e2800c6e add r0, r0, #28160 ; 0x6e00
+ 8094: ed900018 ldc 0, cr0, \[r0, #96\].*
+ 8098: e28008ff add r0, r0, #16711680 ; 0xff0000
+ 809c: e2800c6e add r0, r0, #28160 ; 0x6e00
+ 80a0: ed900016 ldc 0, cr0, \[r0, #88\].*
+ 80a4: ed900000 ldc 0, cr0, \[r0\]
+ 80a8: e2800cee add r0, r0, #60928 ; 0xee00
+ 80ac: ed90003c ldc 0, cr0, \[r0, #240\].*
+ 80b0: e28008ff add r0, r0, #16711680 ; 0xff0000
+ 80b4: e2800cee add r0, r0, #60928 ; 0xee00
+ 80b8: ed90003c ldc 0, cr0, \[r0, #240\].*
+
+000080bc <one_group_needed_alu_pc>:
+ 80bc: e3a00000 mov r0, #0
+Disassembly of section zero:
+
+00000000 <one_group_needed_alu_sb>:
+ 0: e3a00000 mov r0, #0
+Disassembly of section alpha:
+
+0000eef0 <two_groups_needed_alu_pc>:
+ eef0: e3a00000 mov r0, #0
+Disassembly of section beta:
+
+00ffeef0 <three_groups_needed_alu_pc>:
+ ffeef0: e3a00000 mov r0, #0
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-arm/group-relocs.s b/binutils-2.21/ld/testsuite/ld-arm/group-relocs.s
new file mode 100644
index 0000000..b6467f4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/group-relocs.s
@@ -0,0 +1,156 @@
+@ Tests for group relocations.
+@
+@ Beware when editing this file: it is carefully crafted so that
+@ specific PC- and SB-relative offsets arise.
+@
+@ Note that the gas tests have already checked that group relocations are
+@ handled in the same way for local and external symbols.
+
+@ We will place .text at 0x8000.
+
+ .text
+ .globl _start
+
+_start:
+ @ ALU, PC-relative
+
+ @ Instructions start at .text + 0x0
+ add r0, r15, #:pc_g0:(one_group_needed_alu_pc)
+
+ @ Instructions start at .text + 0x4
+ add r0, r15, #:pc_g0_nc:(two_groups_needed_alu_pc)
+ add r0, r0, #:pc_g1:(two_groups_needed_alu_pc + 4)
+
+ @ Instructions start at .text + 0xc
+ add r0, r15, #:pc_g0_nc:(three_groups_needed_alu_pc)
+ add r0, r0, #:pc_g1_nc:(three_groups_needed_alu_pc + 4)
+ add r0, r0, #:pc_g2:(three_groups_needed_alu_pc + 8)
+
+ @ ALU, SB-relative
+
+ add r0, r0, #:sb_g0:(one_group_needed_alu_sb)
+
+ add r0, r15, #:sb_g0_nc:(two_groups_needed_alu_sb)
+ add r0, r0, #:sb_g1:(two_groups_needed_alu_sb)
+
+ add r0, r0, #:sb_g0_nc:(three_groups_needed_alu_sb)
+ add r0, r0, #:sb_g1_nc:(three_groups_needed_alu_sb)
+ add r0, r0, #:sb_g2:(three_groups_needed_alu_sb)
+
+ @ LDR, PC-relative
+
+ @ Instructions start at .text + 0x30
+ add r0, r0, #:pc_g0_nc:(two_groups_needed_ldr_pc)
+ ldr r1, [r0, #:pc_g1:(two_groups_needed_ldr_pc + 4)]
+
+ @ Instructions start at .text + 0x38
+ add r0, r0, #:pc_g0_nc:(three_groups_needed_ldr_pc)
+ add r0, r0, #:pc_g1_nc:(three_groups_needed_ldr_pc + 4)
+ ldr r1, [r0, #:pc_g2:(three_groups_needed_ldr_pc + 8)]
+
+ @ LDR, SB-relative
+
+ ldr r1, [r0, #:sb_g0:(one_group_needed_ldr_sb)]
+
+ add r0, r0, #:sb_g0_nc:(two_groups_needed_ldr_sb)
+ ldr r1, [r0, #:sb_g1:(two_groups_needed_ldr_sb)]
+
+ add r0, r0, #:sb_g0_nc:(three_groups_needed_ldr_sb)
+ add r0, r0, #:sb_g1_nc:(three_groups_needed_ldr_sb)
+ ldr r1, [r0, #:sb_g2:(three_groups_needed_ldr_sb)]
+
+ @ LDRS, PC-relative
+
+ @ Instructions start at .text + 0x5c
+ ldrd r2, [r0, #:pc_g0:(one_group_needed_ldrs_pc)]
+
+ @ Instructions start at .text + 0x60
+ add r0, r0, #:pc_g0_nc:(two_groups_needed_ldrs_pc)
+ ldrd r2, [r0, #:pc_g1:(two_groups_needed_ldrs_pc + 4)]
+
+ @ Instructions start at .text + 0x68
+ add r0, r0, #:pc_g0_nc:(three_groups_needed_ldrs_pc)
+ add r0, r0, #:pc_g1_nc:(three_groups_needed_ldrs_pc + 4)
+ ldrd r2, [r0, #:pc_g2:(three_groups_needed_ldrs_pc + 8)]
+
+ @ LDRS, SB-relative
+
+ ldrd r2, [r0, #:sb_g0:(one_group_needed_ldrs_sb)]
+
+ add r0, r0, #:sb_g0_nc:(two_groups_needed_ldrs_sb)
+ ldrd r2, [r0, #:sb_g1:(two_groups_needed_ldrs_sb)]
+
+ add r0, r0, #:sb_g0_nc:(three_groups_needed_ldrs_sb)
+ add r0, r0, #:sb_g1_nc:(three_groups_needed_ldrs_sb)
+ ldrd r2, [r0, #:sb_g2:(three_groups_needed_ldrs_sb)]
+
+ @ LDC, PC-relative
+
+ @ Instructions start at .text + 0x8c
+ ldc 0, c0, [r0, #:pc_g0:(one_group_needed_ldc_pc)]
+
+ @ Instructions start at .text + 0x90
+ add r0, r0, #:pc_g0_nc:(two_groups_needed_ldc_pc)
+ ldc 0, c0, [r0, #:pc_g1:(two_groups_needed_ldc_pc + 4)]
+
+ @ Instructions start at .text + 0x98
+ add r0, r0, #:pc_g0_nc:(three_groups_needed_ldc_pc)
+ add r0, r0, #:pc_g1_nc:(three_groups_needed_ldc_pc + 4)
+ ldc 0, c0, [r0, #:pc_g2:(three_groups_needed_ldc_pc + 8)]
+
+ @ LDC, SB-relative
+
+ ldc 0, c0, [r0, #:sb_g0:(one_group_needed_ldc_sb)]
+
+ add r0, r0, #:sb_g0_nc:(two_groups_needed_ldc_sb)
+ ldc 0, c0, [r0, #:sb_g1:(two_groups_needed_ldc_sb)]
+
+ add r0, r0, #:sb_g0_nc:(three_groups_needed_ldc_sb)
+ add r0, r0, #:sb_g1_nc:(three_groups_needed_ldc_sb)
+ ldc 0, c0, [r0, #:sb_g2:(three_groups_needed_ldc_sb)]
+
+@ This point in the file is .text + 0xbc.
+
+one_group_needed_alu_pc:
+one_group_needed_ldrs_pc:
+one_group_needed_ldc_pc:
+ mov r0, #0
+
+@ We will place the section zero at 0x0.
+
+ .section zero, "x"
+
+one_group_needed_alu_sb:
+one_group_needed_ldr_sb:
+one_group_needed_ldrs_sb:
+one_group_needed_ldc_sb:
+ mov r0, #0
+
+@ We will place the section alpha at 0xeef0.
+
+ .section alpha, "x"
+
+two_groups_needed_alu_sb:
+two_groups_needed_ldr_sb:
+two_groups_needed_ldrs_sb:
+two_groups_needed_ldc_sb:
+two_groups_needed_alu_pc:
+two_groups_needed_ldr_pc:
+two_groups_needed_ldrs_pc:
+two_groups_needed_ldc_pc:
+ mov r0, #0
+
+@ We will place the section beta at 0xffeef0.
+
+ .section beta, "x"
+
+three_groups_needed_alu_sb:
+three_groups_needed_ldr_sb:
+three_groups_needed_ldrs_sb:
+three_groups_needed_ldc_sb:
+three_groups_needed_alu_pc:
+three_groups_needed_ldr_pc:
+three_groups_needed_ldrs_pc:
+three_groups_needed_ldc_pc:
+ mov r0, #0
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/jump-reloc-veneers-long.d b/binutils-2.21/ld/testsuite/ld-arm/jump-reloc-veneers-long.d
new file mode 100644
index 0000000..0dba9ec
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/jump-reloc-veneers-long.d
@@ -0,0 +1,21 @@
+
+.*: file format.*
+
+
+Disassembly of section destsect:
+
+09000000 <[^>]*>:
+ 9000000: e7fe b.n 9000000 <dest>
+
+Disassembly of section .text:
+
+000080.. <[^>]*>:
+ 80..: b802f000 .word 0xb802f000
+ 80..: 00000000 andeq r0, r0, r0
+
+000080.. <[^>]*>:
+ 80..: 4778 bx pc
+ 80..: 46c0 nop ; \(mov r8, r8\)
+ 80..: e59fc000 ldr ip, \[pc, #0\] ; 80.. <__dest_veneer\+0xc>
+ 80..: e12fff1c bx ip
+ 80..: 09000001 .word 0x09000001
diff --git a/binutils-2.21/ld/testsuite/ld-arm/jump-reloc-veneers-short1.d b/binutils-2.21/ld/testsuite/ld-arm/jump-reloc-veneers-short1.d
new file mode 100644
index 0000000..3796652
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/jump-reloc-veneers-short1.d
@@ -0,0 +1,13 @@
+
+.*: file format.*
+
+
+Disassembly of section destsect:
+
+00009000 <[^>]*>:
+ 9000: e7fe b.n 9000 <dest>
+
+Disassembly of section .text:
+
+000080.. <[^>]*>:
+ 80..: f000 bf.. b.w 9000 <dest>
diff --git a/binutils-2.21/ld/testsuite/ld-arm/jump-reloc-veneers-short2.d b/binutils-2.21/ld/testsuite/ld-arm/jump-reloc-veneers-short2.d
new file mode 100644
index 0000000..22fa6df
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/jump-reloc-veneers-short2.d
@@ -0,0 +1,13 @@
+
+.*: file format.*
+
+
+Disassembly of section destsect:
+
+00900000 <[^>]*>:
+ 900000: e7fe b.n 900000 <dest>
+
+Disassembly of section .text:
+
+000080.. <[^>]*>:
+ 80..: f0f7 9f.. b.w 900000 <dest>
diff --git a/binutils-2.21/ld/testsuite/ld-arm/jump-reloc-veneers.s b/binutils-2.21/ld/testsuite/ld-arm/jump-reloc-veneers.s
new file mode 100644
index 0000000..d307c08
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/jump-reloc-veneers.s
@@ -0,0 +1,12 @@
+ .text
+ .syntax unified
+ .thumb_func
+ .global _start
+ .type _start,%function
+_start:
+ b.w dest
+
+ .section destsect, "x"
+ .thumb_func
+dest:
+ b dest
diff --git a/binutils-2.21/ld/testsuite/ld-arm/jump19.d b/binutils-2.21/ld/testsuite/ld-arm/jump19.d
new file mode 100644
index 0000000..303477f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/jump19.d
@@ -0,0 +1,12 @@
+
+.*jump19: file format elf32-(big|little)arm
+
+Disassembly of section .text:
+
+00008000 <_start>:
+ 8000: 4280 cmp r0, r0
+ 8002: f010 8000 beq.w 18006 <bar>
+ ...
+
+00018006 <bar>:
+ 18006: 4770 bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/jump19.s b/binutils-2.21/ld/testsuite/ld-arm/jump19.s
new file mode 100644
index 0000000..1e3ddf0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/jump19.s
@@ -0,0 +1,12 @@
+@ Test the Thumb-2 JUMP19 relocation.
+
+ .syntax unified
+ .thumb
+ .global _start
+_start:
+ cmp r0, r0
+ beq.w bar
+ .space 65536
+ .weak bar
+bar:
+ bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/mixed-app-v5.d b/binutils-2.21/ld/testsuite/ld-arm/mixed-app-v5.d
new file mode 100644
index 0000000..a30fde4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/mixed-app-v5.d
@@ -0,0 +1,56 @@
+
+tmpdir/mixed-app-v5: file format elf32-(little|big)arm
+architecture: arm, flags 0x00000112:
+EXEC_P, HAS_SYMS, D_PAGED
+start address 0x.*
+
+Disassembly of section .plt:
+
+.* <.plt>:
+ .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
+ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <_start-0x28>
+ .*: e08fe00e add lr, pc, lr
+ .*: e5bef008 ldr pc, \[lr, #8\]!
+ .*: .*
+ .*: e28fc6.* add ip, pc, #.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]!.*
+ .*: e28fc6.* add ip, pc, #.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]!.*
+Disassembly of section .text:
+
+.* <_start>:
+ .*: e1a0c00d mov ip, sp
+ .*: e92dd800 push {fp, ip, lr, pc}
+ .*: eb000004 bl .* <app_func>
+ .*: e89d6800 ldm sp, {fp, sp, lr}
+ .*: e12fff1e bx lr
+ .*: e1a00000 nop ; \(mov r0, r0\)
+ .*: e1a00000 nop ; \(mov r0, r0\)
+ .*: e1a00000 nop ; \(mov r0, r0\)
+
+.* <app_func>:
+ .*: e1a0c00d mov ip, sp
+ .*: e92dd800 push {fp, ip, lr, pc}
+ .*: ebffffee bl .*
+ .*: e89d6800 ldm sp, {fp, sp, lr}
+ .*: e12fff1e bx lr
+ .*: e1a00000 nop ; \(mov r0, r0\)
+ .*: e1a00000 nop ; \(mov r0, r0\)
+ .*: e1a00000 nop ; \(mov r0, r0\)
+
+.* <app_func2>:
+ .*: e12fff1e bx lr
+ .*: e1a00000 nop ; \(mov r0, r0\)
+ .*: e1a00000 nop ; \(mov r0, r0\)
+ .*: e1a00000 nop ; \(mov r0, r0\)
+
+.* <app_tfunc>:
+ .*: b500 push {lr}
+ .*: f7ff efc. blx .* <_start-0x..>
+ .*: bd00 pop {pc}
+ .*: 4770 bx lr
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
diff --git a/binutils-2.21/ld/testsuite/ld-arm/mixed-app.d b/binutils-2.21/ld/testsuite/ld-arm/mixed-app.d
new file mode 100644
index 0000000..592e18a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/mixed-app.d
@@ -0,0 +1,58 @@
+
+tmpdir/mixed-app: file format elf32-(little|big)arm
+architecture: arm, flags 0x00000112:
+EXEC_P, HAS_SYMS, D_PAGED
+start address 0x.*
+
+Disassembly of section .plt:
+
+.* <.plt>:
+ .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
+ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <_start-0x28>
+ .*: e08fe00e add lr, pc, lr
+ .*: e5bef008 ldr pc, \[lr, #8\]!
+ .*: .*
+ .*: 4778 bx pc
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: e28fc6.* add ip, pc, #.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]!.*
+ .*: e28fc6.* add ip, pc, #.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]!.*
+Disassembly of section .text:
+
+.* <_start>:
+ .*: e1a0c00d mov ip, sp
+ .*: e92dd800 push {fp, ip, lr, pc}
+ .*: eb000004 bl .* <app_func>
+ .*: e89d6800 ldm sp, {fp, sp, lr}
+ .*: e12fff1e bx lr
+ .*: e1a00000 nop ; \(mov r0, r0\)
+ .*: e1a00000 nop ; \(mov r0, r0\)
+ .*: e1a00000 nop ; \(mov r0, r0\)
+
+.* <app_func>:
+ .*: e1a0c00d mov ip, sp
+ .*: e92dd800 push {fp, ip, lr, pc}
+ .*: ebffff.. bl .*
+ .*: e89d6800 ldm sp, {fp, sp, lr}
+ .*: e12fff1e bx lr
+ .*: e1a00000 nop ; \(mov r0, r0\)
+ .*: e1a00000 nop ; \(mov r0, r0\)
+ .*: e1a00000 nop ; \(mov r0, r0\)
+
+.* <app_func2>:
+ .*: e12fff1e bx lr
+ .*: e1a00000 nop ; \(mov r0, r0\)
+ .*: e1a00000 nop ; \(mov r0, r0\)
+ .*: e1a00000 nop ; \(mov r0, r0\)
+
+.* <app_tfunc>:
+ .*: b500 push {lr}
+ .*: f7ff ffc. bl .* <_start-0x..>
+ .*: bd00 pop {pc}
+ .*: 4770 bx lr
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
diff --git a/binutils-2.21/ld/testsuite/ld-arm/mixed-app.r b/binutils-2.21/ld/testsuite/ld-arm/mixed-app.r
new file mode 100644
index 0000000..648e92f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/mixed-app.r
@@ -0,0 +1,10 @@
+
+tmpdir/mixed-app.*: file format elf32-(little|big)arm
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+.* R_ARM_COPY data_obj
+.* R_ARM_JUMP_SLOT lib_func2
+.* R_ARM_JUMP_SLOT lib_func1
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/mixed-app.s b/binutils-2.21/ld/testsuite/ld-arm/mixed-app.s
new file mode 100644
index 0000000..ce82487
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/mixed-app.s
@@ -0,0 +1,39 @@
+ .text
+ .p2align 4
+ .globl _start
+_start:
+ mov ip, sp
+ stmdb sp!, {r11, ip, lr, pc}
+ bl app_func
+ ldmia sp, {r11, sp, lr}
+ bx lr
+
+ .p2align 4
+ .globl app_func
+ .type app_func,%function
+app_func:
+ mov ip, sp
+ stmdb sp!, {r11, ip, lr, pc}
+ bl lib_func1
+ ldmia sp, {r11, sp, lr}
+ bx lr
+
+ .p2align 4
+ .globl app_func2
+ .type app_func2,%function
+app_func2:
+ bx lr
+
+ .p2align 4
+ .globl app_tfunc
+ .type app_tfunc,%function
+ .thumb_func
+ .code 16
+app_tfunc:
+ push {lr}
+ bl lib_func2
+ pop {pc}
+ bx lr
+
+ .data
+ .long data_obj
diff --git a/binutils-2.21/ld/testsuite/ld-arm/mixed-app.sym b/binutils-2.21/ld/testsuite/ld-arm/mixed-app.sym
new file mode 100644
index 0000000..2884b3d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/mixed-app.sym
@@ -0,0 +1,15 @@
+
+Symbol table for image:
+ +Num +Buc: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start__
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+ +.. +..: ........ +4 +OBJECT +GLOBAL +DEFAULT +12 data_obj
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_end__
+ +.. +..: 0*[^0]*.* +0 +FUNC +GLOBAL +DEFAULT +UND lib_func1
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +11 __data_start
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __end__
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +.. +..: .......0 +0 +FUNC +GLOBAL +DEFAULT +8 app_func2
+ +.. +..: 0*[^0]*.* +0 +FUNC +GLOBAL +DEFAULT +UND lib_func2
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _bss_end__
diff --git a/binutils-2.21/ld/testsuite/ld-arm/mixed-lib.d b/binutils-2.21/ld/testsuite/ld-arm/mixed-lib.d
new file mode 100644
index 0000000..bcd2e41
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/mixed-lib.d
@@ -0,0 +1,38 @@
+
+tmpdir/mixed-lib.so: file format elf32-(little|big)arm
+architecture: arm, flags 0x00000150:
+HAS_SYMS, DYNAMIC, D_PAGED
+start address 0x.*
+
+Disassembly of section .plt:
+
+.* <.plt>:
+ .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
+ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <lib_func1-0x.*>
+ .*: e08fe00e add lr, pc, lr
+ .*: e5bef008 ldr pc, \[lr, #8\]!
+ .*: .*
+ .*: e28fc6.* add ip, pc, #.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]!.*
+Disassembly of section .text:
+
+.* <lib_func1>:
+ .*: e1a0c00d mov ip, sp
+ .*: e92dd800 push {fp, ip, lr, pc}
+ .*: ebfffff. bl .* <lib_func1-0x..?>
+ .*: e89d6800 ldm sp, {fp, sp, lr}
+ .*: e12fff1e bx lr
+ .*: e1a00000 nop ; \(mov r0, r0\)
+ .*: e1a00000 nop ; \(mov r0, r0\)
+ .*: e1a00000 nop ; \(mov r0, r0\)
+
+.* <lib_func2>:
+ .*: 4770 bx lr
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
+ .*: 46c0 nop ; \(mov r8, r8\)
diff --git a/binutils-2.21/ld/testsuite/ld-arm/mixed-lib.r b/binutils-2.21/ld/testsuite/ld-arm/mixed-lib.r
new file mode 100644
index 0000000..0137880
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/mixed-lib.r
@@ -0,0 +1,8 @@
+
+tmpdir/mixed-lib.so: file format elf32-(little|big)arm
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+.* R_ARM_JUMP_SLOT app_func2
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/mixed-lib.s b/binutils-2.21/ld/testsuite/ld-arm/mixed-lib.s
new file mode 100644
index 0000000..86f5ace
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/mixed-lib.s
@@ -0,0 +1,28 @@
+ .text
+
+ .p2align 4
+ .globl lib_func1
+ .type lib_func1, %function
+lib_func1:
+ mov ip, sp
+ stmdb sp!, {r11, ip, lr, pc}
+ bl app_func2
+ ldmia sp, {r11, sp, lr}
+ bx lr
+ .size lib_func1, . - lib_func1
+
+ .p2align 4
+ .globl lib_func2
+ .type lib_func2, %function
+ .thumb_func
+ .code 16
+lib_func2:
+ bx lr
+ .size lib_func2, . - lib_func2
+
+ .data
+ .globl data_obj
+ .type data_obj, %object
+data_obj:
+ .long 0
+ .size data_obj, . - data_obj
diff --git a/binutils-2.21/ld/testsuite/ld-arm/mixed-lib.sym b/binutils-2.21/ld/testsuite/ld-arm/mixed-lib.sym
new file mode 100644
index 0000000..9f7a326
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/mixed-lib.sym
@@ -0,0 +1,15 @@
+
+Symbol table for image:
+ +Num +Buc: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start__
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+ +.. +..: ........ +4 +OBJECT +GLOBAL +DEFAULT +9 data_obj
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_end__
+ +.. +..: .......0 +20 +FUNC +GLOBAL +DEFAULT +6 lib_func1
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +9 __data_start
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __end__
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +.. +..: 00000000 +0 +NOTYPE +GLOBAL +DEFAULT +UND app_func2
+ +.. +..: .......1 +2 +FUNC +GLOBAL +DEFAULT +6 lib_func2
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _bss_end__
diff --git a/binutils-2.21/ld/testsuite/ld-arm/movw-merge.d b/binutils-2.21/ld/testsuite/ld-arm/movw-merge.d
new file mode 100644
index 0000000..40e1681
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/movw-merge.d
@@ -0,0 +1,13 @@
+
+.*: file format.*
+
+Disassembly of section .text:
+
+00008000 <[^>]*>:
+ 8000: e3080013 movw r0, #32787 ; 0x8013
+ 8004: e3400000 movt r0, #0
+
+00008008 <[^>]*>:
+ 8008: f248 0013 movw r0, #32787 ; 0x8013
+ 800c: f2c0 0000 movt r0, #0
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/movw-merge.s b/binutils-2.21/ld/testsuite/ld-arm/movw-merge.s
new file mode 100644
index 0000000..17c70a5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/movw-merge.s
@@ -0,0 +1,20 @@
+ .arch armv7-a
+ .syntax unified
+ .text
+ .global _start
+ .type _start, %function
+_start:
+ movw r0, #:lower16:.LC0
+ movt r0, #:upper16:.LC0
+ .thumb
+ .global tfunc
+ .type tfunc, %function
+tfunc:
+ movw r0, #:lower16:.LC0
+ movt r0, #:upper16:.LC0
+
+ .section .rodata.str1.4,"aMS",%progbits,1
+ .align 2
+ .ascii "pad"
+.LC0:
+ .ascii "inner: cont \000"
diff --git a/binutils-2.21/ld/testsuite/ld-arm/movw-shared-1.d b/binutils-2.21/ld/testsuite/ld-arm/movw-shared-1.d
new file mode 100644
index 0000000..5a05818
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/movw-shared-1.d
@@ -0,0 +1,4 @@
+#name: MOVW/MOVT shared libraries test 1
+#source: movw-shared-1.s
+#ld: -shared
+#error: .*: relocation R_ARM_MOVW_ABS_NC against `a' can not be used when making a shared object; recompile with -fPIC
diff --git a/binutils-2.21/ld/testsuite/ld-arm/movw-shared-1.s b/binutils-2.21/ld/testsuite/ld-arm/movw-shared-1.s
new file mode 100644
index 0000000..512946a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/movw-shared-1.s
@@ -0,0 +1,5 @@
+.arch armv7-a
+.text
+.syntax unified
+f:
+movw r0, #:lower16:a
diff --git a/binutils-2.21/ld/testsuite/ld-arm/movw-shared-2.d b/binutils-2.21/ld/testsuite/ld-arm/movw-shared-2.d
new file mode 100644
index 0000000..08ceaf0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/movw-shared-2.d
@@ -0,0 +1,4 @@
+#name: MOVW/MOVT shared libraries test 2
+#source: movw-shared-2.s
+#ld: -shared
+#error: .*: relocation R_ARM_MOVT_ABS against `b' can not be used when making a shared object; recompile with -fPIC
diff --git a/binutils-2.21/ld/testsuite/ld-arm/movw-shared-2.s b/binutils-2.21/ld/testsuite/ld-arm/movw-shared-2.s
new file mode 100644
index 0000000..bd70b76
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/movw-shared-2.s
@@ -0,0 +1,5 @@
+.arch armv7-a
+.text
+.syntax unified
+f:
+movt r0, #:upper16:b
diff --git a/binutils-2.21/ld/testsuite/ld-arm/movw-shared-3.d b/binutils-2.21/ld/testsuite/ld-arm/movw-shared-3.d
new file mode 100644
index 0000000..90b9cf1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/movw-shared-3.d
@@ -0,0 +1,4 @@
+#name: MOVW/MOVT shared libraries test 3
+#source: movw-shared-3.s
+#ld: -shared
+#error: .*: relocation R_ARM_THM_MOVW_ABS_NC against `c' can not be used when making a shared object; recompile with -fPIC
diff --git a/binutils-2.21/ld/testsuite/ld-arm/movw-shared-3.s b/binutils-2.21/ld/testsuite/ld-arm/movw-shared-3.s
new file mode 100644
index 0000000..a4db9a9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/movw-shared-3.s
@@ -0,0 +1,6 @@
+.arch armv7-a
+.text
+.syntax unified
+f:
+.thumb
+movw r0, #:lower16:c
diff --git a/binutils-2.21/ld/testsuite/ld-arm/movw-shared-4.d b/binutils-2.21/ld/testsuite/ld-arm/movw-shared-4.d
new file mode 100644
index 0000000..cc7a418
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/movw-shared-4.d
@@ -0,0 +1,4 @@
+#name: MOVW/MOVT shared libraries test 4
+#source: movw-shared-4.s
+#ld: -shared
+#error: .*: relocation R_ARM_THM_MOVT_ABS against `d' can not be used when making a shared object; recompile with -fPIC
diff --git a/binutils-2.21/ld/testsuite/ld-arm/movw-shared-4.s b/binutils-2.21/ld/testsuite/ld-arm/movw-shared-4.s
new file mode 100644
index 0000000..09f2952
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/movw-shared-4.s
@@ -0,0 +1,6 @@
+.arch armv7-a
+.text
+.syntax unified
+f:
+.thumb
+movt r0, #:upper16:d
diff --git a/binutils-2.21/ld/testsuite/ld-arm/preempt-app.s b/binutils-2.21/ld/testsuite/ld-arm/preempt-app.s
new file mode 100644
index 0000000..f1eccc2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/preempt-app.s
@@ -0,0 +1,27 @@
+ @ Preempt an ARM shared library function with a Thumb function
+ @ in the application.
+ .text
+ .p2align 4
+ .globl _start
+_start:
+ mov ip, sp
+ stmdb sp!, {r11, ip, lr, pc}
+ bl lib_func1
+ ldmia sp, {r11, sp, lr}
+ bx lr
+
+ .p2align 4
+ .globl app_func2
+ .type app_func2,%function
+app_func2:
+ bx lr
+
+ .p2align 4
+ .globl lib_func1
+ .type lib_func1,%function
+ .thumb_func
+lib_func1:
+ bx lr
+
+ .data
+ .long data_obj
diff --git a/binutils-2.21/ld/testsuite/ld-arm/preempt-app.sym b/binutils-2.21/ld/testsuite/ld-arm/preempt-app.sym
new file mode 100644
index 0000000..c169757
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/preempt-app.sym
@@ -0,0 +1,14 @@
+
+Symbol table for image:
+ +Num +Buc: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start__
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+ +.. +..: ........ +4 +OBJECT +GLOBAL +DEFAULT +10 data_obj
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_end__
+ +.. +..: .......1 +20 +FUNC +GLOBAL +DEFAULT +6 lib_func1
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +9 __data_start
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __end__
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +.. +..: .......0 +0 +FUNC +GLOBAL +DEFAULT +6 app_func2
+ +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _bss_end__
diff --git a/binutils-2.21/ld/testsuite/ld-arm/reloc-boundaries.d b/binutils-2.21/ld/testsuite/ld-arm/reloc-boundaries.d
new file mode 100644
index 0000000..bcc13d0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/reloc-boundaries.d
@@ -0,0 +1,6 @@
+
+[^:]*: file format elf32-(little|big)arm
+
+Contents of section .text:
+ 80.. 80ff0080 ffff ......
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-arm/reloc-boundaries.s b/binutils-2.21/ld/testsuite/ld-arm/reloc-boundaries.s
new file mode 100644
index 0000000..7e65bc0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/reloc-boundaries.s
@@ -0,0 +1,5 @@
+.syntax unified
+ .byte x -128
+ .byte x +255
+ .short y -32768
+ .short y +65535
diff --git a/binutils-2.21/ld/testsuite/ld-arm/script-type.ld b/binutils-2.21/ld/testsuite/ld-arm/script-type.ld
new file mode 100644
index 0000000..01995eb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/script-type.ld
@@ -0,0 +1,9 @@
+SECTIONS {
+ .text : {
+ foo_a = bar_a;
+ foo_t = bar_t;
+ foo_o = bar_o;
+ *(.text)
+ }
+ .ARM.attribues 0 : { *(.ARM.attributes) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-arm/script-type.s b/binutils-2.21/ld/testsuite/ld-arm/script-type.s
new file mode 100644
index 0000000..f9d41e8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/script-type.s
@@ -0,0 +1,20 @@
+.syntax unified
+.text
+.global bar_a
+.type bar_a %function
+bar_a:
+bx lr
+
+.p2align 4
+.global bar_o
+.type bar_o %object
+bar_o:
+.word 0
+
+.p2align 4
+.thumb
+.global bar_t
+.type bar_t %function
+bar_t:
+bx lr
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/script-type.sym b/binutils-2.21/ld/testsuite/ld-arm/script-type.sym
new file mode 100644
index 0000000..d319d5c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/script-type.sym
@@ -0,0 +1,16 @@
+
+Symbol table '.symtab' contains 13 entries:
+ Num: Value Size Type Bind Vis Ndx Name
+ 0: 00000000 0 NOTYPE LOCAL DEFAULT UND
+ 1: 00000000 0 SECTION LOCAL DEFAULT 1
+ 2: 00000000 0 SECTION LOCAL DEFAULT 2
+ 3: 00000000 0 NOTYPE LOCAL DEFAULT 1 \$a
+ 4: 00000010 0 NOTYPE LOCAL DEFAULT 1 \$d
+ 5: 00000014 0 NOTYPE LOCAL DEFAULT 1 \$a
+ 6: 00000020 0 NOTYPE LOCAL DEFAULT 1 \$t
+ 7: 00000010 0 OBJECT GLOBAL DEFAULT 1 bar_o
+ 8: 00000021 0 FUNC GLOBAL DEFAULT 1 bar_t
+ 9: 00000000 0 FUNC GLOBAL DEFAULT 1 foo_a
+ 10: 00000021 0 FUNC GLOBAL DEFAULT 1 foo_t
+ 11: 00000010 0 OBJECT GLOBAL DEFAULT 1 foo_o
+ 12: 00000000 0 FUNC GLOBAL DEFAULT 1 bar_a
diff --git a/binutils-2.21/ld/testsuite/ld-arm/symbian-seg1.d b/binutils-2.21/ld/testsuite/ld-arm/symbian-seg1.d
new file mode 100644
index 0000000..21d8a00
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/symbian-seg1.d
@@ -0,0 +1,8 @@
+#source: symbian-seg1.s
+#ld: -Ttext 0x10000 -Tdata 0x400000
+#objdump: -dR
+#...
+ +10000: 00400000 .word 0x00400000
+ +10000: R_ARM_RELATIVE .data
+ +10004: 00010008 .word 0x00010008
+ +10004: R_ARM_RELATIVE .text
diff --git a/binutils-2.21/ld/testsuite/ld-arm/symbian-seg1.s b/binutils-2.21/ld/testsuite/ld-arm/symbian-seg1.s
new file mode 100644
index 0000000..8f893a2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/symbian-seg1.s
@@ -0,0 +1,13 @@
+ .text
+ .globl _start
+_start:
+ .word datavar
+ .word rodatavar
+
+ .section ".rodata", "a"
+rodatavar:
+ .word 0
+
+ .section ".data", "aw"
+datavar:
+ .word 0
diff --git a/binutils-2.21/ld/testsuite/ld-arm/thumb-entry.d b/binutils-2.21/ld/testsuite/ld-arm/thumb-entry.d
new file mode 100644
index 0000000..602fd6c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/thumb-entry.d
@@ -0,0 +1,3 @@
+#...
+ Entry point address: 0x8001
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-arm/thumb-entry.s b/binutils-2.21/ld/testsuite/ld-arm/thumb-entry.s
new file mode 100644
index 0000000..5b3659d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/thumb-entry.s
@@ -0,0 +1,8 @@
+ .text
+ .arch armv4t
+ .thumb
+ .global _start
+ .thumb_func
+_start:
+ bx lr
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/thumb-rel32.d b/binutils-2.21/ld/testsuite/ld-arm/thumb-rel32.d
new file mode 100644
index 0000000..34cde4d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/thumb-rel32.d
@@ -0,0 +1,7 @@
+
+.*: file format.*
+
+Contents of section .text:
+ 8000 (00000011 fffffffd 00ffffff f8000000|11000000 fdffffff 00f8ffff ff000000) .*
+# Ignore .ARM.attributes section
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-arm/thumb-rel32.s b/binutils-2.21/ld/testsuite/ld-arm/thumb-rel32.s
new file mode 100644
index 0000000..83eb0e5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/thumb-rel32.s
@@ -0,0 +1,18 @@
+ .text
+ .arch armv4t
+ .global _start
+ .type _start, %function
+ .thumb_func
+_start:
+ .word bar - .
+ .word _start - .
+ .byte 0
+ .4byte (_start - .) + 1
+ .byte 0, 0, 0
+ .section .after, "ax", %progbits
+ .global bar
+ .type bar, %function
+ .thumb_func
+bar:
+ .word 0
+ .ident "GCC: (GNU) 4.1.0 (CodeSourcery ARM)"
diff --git a/binutils-2.21/ld/testsuite/ld-arm/thumb1-bl.d b/binutils-2.21/ld/testsuite/ld-arm/thumb1-bl.d
new file mode 100644
index 0000000..09d7095
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/thumb1-bl.d
@@ -0,0 +1,11 @@
+
+.*thumb1-bl: file format elf32-.*arm
+
+Disassembly of section .text:
+
+00001000 <_start>:
+ 1000: f3ff fffe bl 401000 <bar>
+Disassembly of section .foo:
+
+00401000 <bar>:
+ 401000: 4770 bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/thumb1-bl.s b/binutils-2.21/ld/testsuite/ld-arm/thumb1-bl.s
new file mode 100644
index 0000000..cdecaa4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/thumb1-bl.s
@@ -0,0 +1,22 @@
+@ Test to ensure that a Thumb-1 BL works.
+
+ .arch armv5t
+ .global _start
+ .syntax unified
+
+@ We will place the section .text at 0x1000.
+
+ .text
+ .thumb_func
+
+_start:
+ bl bar
+
+@ We will place the section .foo at 0x401000.
+
+ .section .foo, "xa"
+ .thumb_func
+
+bar:
+ bx lr
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/thumb2-b-interwork.d b/binutils-2.21/ld/testsuite/ld-arm/thumb2-b-interwork.d
new file mode 100644
index 0000000..431989c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/thumb2-b-interwork.d
@@ -0,0 +1,16 @@
+
+.*thumb2-b-interwork: file format elf32-.*arm
+
+Disassembly of section .text:
+
+00008000 <_start>:
+ 8000: f000 b802 b.w 8008 <__bar_from_thumb>
+
+00008004 <bar>:
+ 8004: e12fff1e bx lr
+
+00008008 <__bar_from_thumb>:
+ 8008: 4778 bx pc
+ 800a: 46c0 nop ; \(mov r8, r8\)
+ 800c: eafffffc b 8004 <bar>
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/thumb2-b-interwork.s b/binutils-2.21/ld/testsuite/ld-arm/thumb2-b-interwork.s
new file mode 100644
index 0000000..4452a8f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/thumb2-b-interwork.s
@@ -0,0 +1,20 @@
+@ Test to ensure that a Thumb-2 B.W can branch to an ARM funtion.
+
+ .arch armv7-a
+ .global _start
+ .syntax unified
+ .text
+ .thumb_func
+
+_start:
+ b.w bar
+
+@ Put this in a separate section to force the assembler to generate a reloc
+
+ .arm
+ .section .after, "xa"
+ .global bar
+ .type bar, %function
+bar:
+ bx lr
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-as-thumb1-bad-noeabi.d b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-as-thumb1-bad-noeabi.d
new file mode 100644
index 0000000..8872909
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-as-thumb1-bad-noeabi.d
@@ -0,0 +1,22 @@
+.*: file format .*
+
+Disassembly of section .text:
+
+00001000 <_start>:
+ 1000: f000 f802 bl 1008 <__bar_veneer>
+ 1004: 0000 movs r0, r0
+ ...
+
+00001008 <__bar_veneer>:
+ 1008: b401 push {r0}
+ 100a: 4802 ldr r0, \[pc, #8\] \(1014 <__bar_veneer\+0xc>\)
+ 100c: 4684 mov ip, r0
+ 100e: bc01 pop {r0}
+ 1010: 4760 bx ip
+ 1012: bf00 nop
+ 1014: 0100100d .word 0x0100100d
+
+Disassembly of section .foo:
+
+0100100c <bar>:
+ 100100c: 4770 bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-as-thumb1-bad.d b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-as-thumb1-bad.d
new file mode 100644
index 0000000..6b47810
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-as-thumb1-bad.d
@@ -0,0 +1,17 @@
+.*: file format .*
+
+Disassembly of section .text:
+
+00001000 <_start>:
+ 1000: f000 e802 blx 1008 <__bar_veneer>
+ 1004: 0000 movs r0, r0
+ \.\.\.
+
+00001008 <__bar_veneer>:
+ 1008: e51ff004 ldr pc, \[pc, #-4\] ; 100c <__bar_veneer\+0x4>
+ 100c: 0100100d .word 0x0100100d
+
+Disassembly of section .foo:
+
+0100100c <bar>:
+ 100100c: 4770 bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-as-thumb1-bad.s b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-as-thumb1-bad.s
new file mode 100644
index 0000000..834001c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-as-thumb1-bad.s
@@ -0,0 +1,22 @@
+@ Test to ensure that a Thumb-1 BL with a Thumb-2-only offset makes the linker generate a stub.
+
+ .arch armv5t
+ .global _start
+ .syntax unified
+
+@ We will place the section .text at 0x1000.
+
+ .text
+ .thumb_func
+
+_start:
+ bl bar
+
+@ We will place the section .foo at 0x100100c.
+
+ .section .foo, "xa"
+ .thumb_func
+
+bar:
+ bx lr
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-bad-noeabi.d b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-bad-noeabi.d
new file mode 100644
index 0000000..8872909
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-bad-noeabi.d
@@ -0,0 +1,22 @@
+.*: file format .*
+
+Disassembly of section .text:
+
+00001000 <_start>:
+ 1000: f000 f802 bl 1008 <__bar_veneer>
+ 1004: 0000 movs r0, r0
+ ...
+
+00001008 <__bar_veneer>:
+ 1008: b401 push {r0}
+ 100a: 4802 ldr r0, \[pc, #8\] \(1014 <__bar_veneer\+0xc>\)
+ 100c: 4684 mov ip, r0
+ 100e: bc01 pop {r0}
+ 1010: 4760 bx ip
+ 1012: bf00 nop
+ 1014: 0100100d .word 0x0100100d
+
+Disassembly of section .foo:
+
+0100100c <bar>:
+ 100100c: 4770 bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-bad.d b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-bad.d
new file mode 100644
index 0000000..d78e451
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-bad.d
@@ -0,0 +1,16 @@
+.*: file format .*
+
+Disassembly of section .text:
+
+00001000 <_start>:
+ 1000: f000 e802 blx 1008 <__bar_veneer>
+ 1004: 0000 movs r0, r0
+ \.\.\.
+
+00001008 <__bar_veneer>:
+ 1008: e51ff004 ldr pc, \[pc, #-4\] ; 100c <__bar_veneer\+0x4>
+ 100c: 0100100d .word 0x0100100d
+Disassembly of section .foo:
+
+0100100c <bar>:
+ 100100c: 4770 bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-bad.s b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-bad.s
new file mode 100644
index 0000000..7685860
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-bad.s
@@ -0,0 +1,22 @@
+@ Test to ensure that a Thumb-2 BL with an oversize offset makes the linker generate a stub.
+
+ .arch armv7
+ .global _start
+ .syntax unified
+
+@ We will place the section .text at 0x1000.
+
+ .text
+ .thumb_func
+
+_start:
+ bl bar
+
+@ We will place the section .foo at 0x100100c.
+
+ .section .foo, "xa"
+ .thumb_func
+
+bar:
+ bx lr
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-blx-interwork.d b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-blx-interwork.d
new file mode 100644
index 0000000..ba5a732
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-blx-interwork.d
@@ -0,0 +1,71 @@
+
+.*: file format .*
+
+
+Disassembly of section \.text:
+
+00008000 <_start>:
+ 8000: f000 e81a blx 8038 <arm0>
+ 8004: f000 e81e blx 8044 <arm4>
+ 8008: bf00 nop
+ 800a: f000 e816 blx 8038 <arm0>
+ 800e: f000 e81a blx 8044 <arm4>
+ 8012: bf00 nop
+ 8014: f000 f818 bl 8048 <thumb0>
+ 8018: f000 f81b bl 8052 <thumb2>
+ 801c: f000 f81e bl 805c <thumb4>
+ 8020: f000 f821 bl 8066 <thumb6>
+ 8024: bf00 nop
+ 8026: f000 f80f bl 8048 <thumb0>
+ 802a: f000 f812 bl 8052 <thumb2>
+ 802e: f000 f815 bl 805c <thumb4>
+ 8032: f000 f818 bl 8066 <thumb6>
+ 8036: bf00 nop
+
+00008038 <arm0>:
+ 8038: e12fff1e bx lr
+ 803c: e320f000 nop \{0\}
+ 8040: e320f000 nop \{0\}
+
+00008044 <arm4>:
+ 8044: e12fff1e bx lr
+
+00008048 <thumb0>:
+ 8048: 4770 bx lr
+ 804a: bf00 nop
+ 804c: f3af 8000 nop\.w
+ 8050: bf00 nop
+
+00008052 <thumb2>:
+ 8052: 4770 bx lr
+ 8054: f3af 8000 nop\.w
+ 8058: bf00 nop
+ 805a: bf00 nop
+
+0000805c <thumb4>:
+ 805c: 4770 bx lr
+ 805e: bf00 nop
+ 8060: bf00 nop
+ 8062: bf00 nop
+ 8064: bf00 nop
+
+00008066 <thumb6>:
+ 8066: 4770 bx lr
+
+00008068 <backwards>:
+ 8068: f7ff efe6 blx 8038 <arm0>
+ 806c: f7ff efea blx 8044 <arm4>
+ 8070: bf00 nop
+ 8072: f7ff efe2 blx 8038 <arm0>
+ 8076: f7ff efe6 blx 8044 <arm4>
+ 807a: bf00 nop
+ 807c: f7ff ffe4 bl 8048 <thumb0>
+ 8080: f7ff ffe7 bl 8052 <thumb2>
+ 8084: f7ff ffea bl 805c <thumb4>
+ 8088: f7ff ffed bl 8066 <thumb6>
+ 808c: bf00 nop
+ 808e: f7ff ffdb bl 8048 <thumb0>
+ 8092: f7ff ffde bl 8052 <thumb2>
+ 8096: f7ff ffe1 bl 805c <thumb4>
+ 809a: f7ff ffe4 bl 8066 <thumb6>
+ 809e: bf00 nop
diff --git a/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-blx-interwork.s b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-blx-interwork.s
new file mode 100644
index 0000000..dba46af
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-blx-interwork.s
@@ -0,0 +1,87 @@
+ .arch armv7-a
+ .global _start
+ .syntax unified
+ .text
+ .thumb
+
+ .macro do_calls
+ @ The following four instructions are accepted by gas, but generate
+ @ meaningless code.
+ @bl.w arm0
+ @bl.w arm4
+ @nop
+ @bl.w arm0
+ @bl.w arm4
+ @nop
+ blx.w arm0
+ blx.w arm4
+ nop
+ blx.w arm0
+ blx.w arm4
+ nop
+ bl.w thumb0
+ bl.w thumb2
+ bl.w thumb4
+ bl.w thumb6
+ nop
+ bl.w thumb0
+ bl.w thumb2
+ bl.w thumb4
+ bl.w thumb6
+ nop
+ @ These eight are all accepted by gas, but generate bad code.
+ @blx.w thumb0
+ @blx.w thumb2
+ @blx.w thumb4
+ @blx.w thumb6
+ @nop
+ @blx.w thumb0
+ @blx.w thumb2
+ @blx.w thumb4
+ @blx.w thumb6
+ .endm
+
+ .thumb_func
+ .align 3
+_start:
+ do_calls
+
+ .arm
+ .align 3
+arm0:
+ bx lr
+
+ .align 3
+ nop
+arm4:
+ bx lr
+
+ .thumb
+ .thumb_func
+ .align 3
+thumb0:
+ bx lr
+
+ .thumb_func
+ .align 3
+ nop
+thumb2:
+ bx lr
+
+ .thumb_func
+ .align 3
+ nop
+ nop
+thumb4:
+ bx lr
+
+ .thumb_func
+ .align 3
+ nop
+ nop
+ nop
+thumb6:
+ bx lr
+
+backwards:
+ do_calls
diff --git a/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-undefweak.d b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-undefweak.d
new file mode 100644
index 0000000..32f7cc1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-undefweak.d
@@ -0,0 +1,9 @@
+#source: thumb2-bl-undefweak.s
+#as:
+#ld: -shared
+#objdump: -dr
+#...
+Disassembly of section .text:
+
+.* <foo>:
+ .*: .... .... bl. ... <foo-0x.*>
diff --git a/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-undefweak.s b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-undefweak.s
new file mode 100644
index 0000000..5e70eea
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-undefweak.s
@@ -0,0 +1,10 @@
+@ Test that calls to undefined weak functions resolve to call through
+@ the PLT in shared libraries.
+
+ .arch armv7
+ .syntax unified
+ .text
+ .thumb_func
+foo:
+ bl bar
+ .weak bar
diff --git a/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-undefweak1.d b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-undefweak1.d
new file mode 100644
index 0000000..929d180
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-undefweak1.d
@@ -0,0 +1,9 @@
+#source: thumb2-bl-undefweak1.s
+#as:
+#ld: -shared
+#objdump: -dr
+#...
+Disassembly of section .text:
+
+.* <foo>:
+ .*: ........ bl ... <foo-0x.*>
diff --git a/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-undefweak1.s b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-undefweak1.s
new file mode 100644
index 0000000..a302811
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl-undefweak1.s
@@ -0,0 +1,9 @@
+@ Test that calls to undefined weak functions resolve to call through
+@ the PLT in shared libraries in ARM mode.
+
+ .arch armv6
+ .syntax unified
+ .text
+foo:
+ bl bar
+ .weak bar
diff --git a/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl.d b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl.d
new file mode 100644
index 0000000..bdfb9b7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl.d
@@ -0,0 +1,11 @@
+
+.*thumb2-bl: file format elf32-.*arm
+
+Disassembly of section .text:
+
+00001000 <_start>:
+ 1000: f3ff d7fe bl 1001000 <bar>
+Disassembly of section .foo:
+
+01001000 <bar>:
+ 1001000: 4770 bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl.s b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl.s
new file mode 100644
index 0000000..ddb1cd3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/thumb2-bl.s
@@ -0,0 +1,23 @@
+@ Test to ensure that a Thumb-2 BL works with an offset that is
+@ not permissable for Thumb-1.
+
+ .arch armv7
+ .global _start
+ .syntax unified
+
+@ We will place the section .text at 0x1000.
+
+ .text
+ .thumb_func
+
+_start:
+ bl bar
+
+@ We will place the section .foo at 0x1001000.
+
+ .section .foo, "xa"
+ .thumb_func
+
+bar:
+ bx lr
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/tls-app.d b/binutils-2.21/ld/testsuite/ld-arm/tls-app.d
new file mode 100644
index 0000000..7d2a709
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/tls-app.d
@@ -0,0 +1,18 @@
+
+.*: file format elf32-.*arm
+architecture: arm, flags 0x00000112:
+EXEC_P, HAS_SYMS, D_PAGED
+start address 0x000081c8
+
+Disassembly of section .text:
+
+000081c8 <foo>:
+ 81c8: e1a00000 nop ; \(mov r0, r0\)
+ 81cc: e1a00000 nop ; \(mov r0, r0\)
+ 81d0: e1a0f00e mov pc, lr
+ 81d4: 000080bc .word 0x000080bc
+ 81d8: 000080b4 .word 0x000080b4
+ 81dc: 000080ac .word 0x000080ac
+ 81e0: 00000004 .word 0x00000004
+ 81e4: 000080c4 .word 0x000080c4
+ 81e8: 00000014 .word 0x00000014
diff --git a/binutils-2.21/ld/testsuite/ld-arm/tls-app.r b/binutils-2.21/ld/testsuite/ld-arm/tls-app.r
new file mode 100644
index 0000000..af6c2d7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/tls-app.r
@@ -0,0 +1,10 @@
+
+.*: file format elf32-.*arm
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+[0-9a-f]+ R_ARM_TLS_DTPMOD32 app_gd
+[0-9a-f]+ R_ARM_TLS_DTPOFF32 app_gd
+[0-9a-f]+ R_ARM_TLS_DTPMOD32 lib_gd
+[0-9a-f]+ R_ARM_TLS_DTPOFF32 lib_gd
+[0-9a-f]+ R_ARM_TLS_TPOFF32 app_ie
diff --git a/binutils-2.21/ld/testsuite/ld-arm/tls-app.s b/binutils-2.21/ld/testsuite/ld-arm/tls-app.s
new file mode 100644
index 0000000..d505295
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/tls-app.s
@@ -0,0 +1,34 @@
+ .text
+ .globl foo
+ .type foo, %function
+foo:
+ nop
+.L2:
+ nop
+ mov pc, lr
+
+.Lpool:
+ .word lib_gd(tlsgd) + (. - .L2 - 8)
+ .word app_gd(tlsgd) + (. - .L2 - 8)
+ .word app_ld(tlsldm) + (. - .L2 - 8)
+ .word app_ld(tlsldo)
+ .word app_ie(gottpoff) + (. - .L2 - 8)
+ .word app_le(tpoff)
+
+ .section .tdata,"awT"
+ .global app_gd
+app_gd:
+ .space 4
+
+ .global app_ld
+app_ld:
+ .space 4
+
+ .section .tbss,"awT",%nobits
+ .global app_ie
+app_ie:
+ .space 4
+
+ .global app_le
+app_le:
+ .space 4
diff --git a/binutils-2.21/ld/testsuite/ld-arm/tls-lib.d b/binutils-2.21/ld/testsuite/ld-arm/tls-lib.d
new file mode 100644
index 0000000..4580ead
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/tls-lib.d
@@ -0,0 +1,15 @@
+
+.*: file format elf32-.*arm
+architecture: arm, flags 0x00000150:
+HAS_SYMS, DYNAMIC, D_PAGED
+start address 0x.*
+
+Disassembly of section .text:
+
+.* <foo>:
+ .*: e1a00000 nop ; \(mov r0, r0\)
+ .*: e1a00000 nop ; \(mov r0, r0\)
+ .*: e1a0f00e mov pc, lr
+ .*: 00008098 .word 0x00008098
+ .*: 0000808c .word 0x0000808c
+ .*: 00000004 .word 0x00000004
diff --git a/binutils-2.21/ld/testsuite/ld-arm/tls-lib.r b/binutils-2.21/ld/testsuite/ld-arm/tls-lib.r
new file mode 100644
index 0000000..279b805
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/tls-lib.r
@@ -0,0 +1,10 @@
+
+.*: file format elf32-.*arm
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+.* R_ARM_TLS_DTPMOD32 \*ABS\*
+.* R_ARM_TLS_DTPMOD32 lib_gd
+.* R_ARM_TLS_DTPOFF32 lib_gd
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/tls-lib.s b/binutils-2.21/ld/testsuite/ld-arm/tls-lib.s
new file mode 100644
index 0000000..fa928c0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/tls-lib.s
@@ -0,0 +1,22 @@
+ .text
+ .globl foo
+ .type foo, %function
+foo:
+ nop
+.L2:
+ nop
+ mov pc, lr
+
+.Lpool:
+ .word lib_gd(tlsgd) + (. - .L2 - 8)
+ .word lib_ld(tlsldm) + (. - .L2 - 8)
+ .word lib_ld(tlsldo)
+
+ .section .tdata,"awT"
+ .global lib_gd
+lib_gd:
+ .space 4
+
+ .global lib_ld
+lib_ld:
+ .space 4
diff --git a/binutils-2.21/ld/testsuite/ld-arm/unwind-1.d b/binutils-2.21/ld/testsuite/ld-arm/unwind-1.d
new file mode 100644
index 0000000..add5cb7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/unwind-1.d
@@ -0,0 +1,10 @@
+#ld: -T arm.ld
+#objdump: -s
+
+.*: file format.*
+
+#...
+Contents of section .ARM.exidx:
+ 8008 (f8ffff7f b0b0a880 f4ffff7f 01000000|7ffffff8 80a8b0b0 7ffffff4 00000001) .*
+Contents of section .far:
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-arm/unwind-1.s b/binutils-2.21/ld/testsuite/ld-arm/unwind-1.s
new file mode 100644
index 0000000..a4eb390
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/unwind-1.s
@@ -0,0 +1,19 @@
+ .syntax unified
+ .text
+ .global _start
+ .type _start, %function
+_start:
+ .fnstart
+ .save {r4, lr}
+ bx lr
+ .fnend
+
+ @ Section with no unwinding information. Linker should insert a cantunwind entry.
+ .section .after, "xa"
+ .global __aeabi_unwind_cpp_pr0
+ .type __aeabi_unwind_cpp_pr0, %function
+__aeabi_unwind_cpp_pr0:
+ bx lr
+
+ .section .far
+ .word 0
diff --git a/binutils-2.21/ld/testsuite/ld-arm/unwind-2.d b/binutils-2.21/ld/testsuite/ld-arm/unwind-2.d
new file mode 100644
index 0000000..a096c9b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/unwind-2.d
@@ -0,0 +1,10 @@
+#ld: -T arm.ld
+#objdump: -s
+
+.*: file format.*
+
+#...
+Contents of section .ARM.exidx:
+ 8004 (fcffff7f b0b0a880 f8ffff7f 01000000|7ffffffc 80a8b0b0 7ffffff8 00000001) .*
+Contents of section .far:
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-arm/unwind-2.s b/binutils-2.21/ld/testsuite/ld-arm/unwind-2.s
new file mode 100644
index 0000000..cd5851c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/unwind-2.s
@@ -0,0 +1,19 @@
+ .syntax unified
+ .text
+
+ .global __aeabi_unwind_cpp_pr0
+ .type __aeabi_unwind_cpp_pr0, %function
+__aeabi_unwind_cpp_pr0:
+ .global _start
+ .type _start, %function
+_start:
+ .fnstart
+ .save {r4, lr}
+ bx lr
+ .fnend
+
+ @ last text section has unwind information. Linker should append a
+ @ terminating cantunwind entry.
+
+ .section .far
+ .word 0
diff --git a/binutils-2.21/ld/testsuite/ld-arm/unwind-3.d b/binutils-2.21/ld/testsuite/ld-arm/unwind-3.d
new file mode 100644
index 0000000..0b8e85e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/unwind-3.d
@@ -0,0 +1,11 @@
+#ld: -T arm.ld
+#objdump: -s
+
+.*: file format.*
+
+#...
+Contents of section .ARM.exidx:
+ 800c (f4ffff7f b0b0a880 f0ffff7f 01000000|7ffffff4 80a8b0b0 7ffffff0 00000001) .*
+ 801c (ecffff7f b0b0a880 e8ffff7f 01000000|7fffffec 80a8b0b0 7fffffe8 00000001) .*
+Contents of section .far:
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-arm/unwind-3.s b/binutils-2.21/ld/testsuite/ld-arm/unwind-3.s
new file mode 100644
index 0000000..9cd8514
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/unwind-3.s
@@ -0,0 +1,29 @@
+ .syntax unified
+ .text
+ @ section without unwind info
+ .global _start
+ .type _start, %function
+_start:
+ bl _before
+
+ @ Section that will be placed first
+ .section .before, "xa"
+ .type _before, %function
+_before:
+ .fnstart
+ .save {r4, lr}
+ bx lr
+ .fnend
+
+ @ section that will be placed last
+ .section .after, "xa"
+ .global __aeabi_unwind_cpp_pr0
+ .type __aeabi_unwind_cpp_pr0, %function
+__aeabi_unwind_cpp_pr0:
+ .fnstart
+ .save {r4, lr}
+ bx lr
+ .fnend
+
+ .section .far
+ .word 0
diff --git a/binutils-2.21/ld/testsuite/ld-arm/unwind-4.d b/binutils-2.21/ld/testsuite/ld-arm/unwind-4.d
new file mode 100644
index 0000000..0a4427a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/unwind-4.d
@@ -0,0 +1,11 @@
+#ld: -T arm.ld
+#objdump: -s
+
+.*: file format.*
+
+#...
+Contents of section .ARM.exidx:
+ 8020 (e0ffff7f b0b0a880 dcffff7f e8ffff7f|7fffffe0 80a8b0b0 7fffffdc 7fffffe8) .*
+ 8030 (d8ffff7f b0b0a880 d8ffff7f 01000000|7fffffd8 80a8b0b0 7fffffd8 00000001) .*
+Contents of section .far:
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-arm/unwind-4.s b/binutils-2.21/ld/testsuite/ld-arm/unwind-4.s
new file mode 100644
index 0000000..015311b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/unwind-4.s
@@ -0,0 +1,49 @@
+ .syntax unified
+ .text
+ @ out of line table entry
+ .global _start
+ .type _start, %function
+_start:
+ .fnstart
+ .save {r4, lr}
+ .vsave {d0}
+ .vsave {d4}
+ bl _before
+ .fnend
+
+ @ entry that can be merged
+ .fnstart
+ .save {r4, lr}
+ bx lr
+ .fnend
+
+ @ Section that will be placed first
+ .section .before, "xa"
+ .type _before, %function
+_before:
+ .fnstart
+ .save {r4, lr}
+ bx lr
+ .fnend
+
+ @ section that will be placed last
+ .section .after, "xa"
+ .global __aeabi_unwind_cpp_pr0
+ .type __aeabi_unwind_cpp_pr0, %function
+__aeabi_unwind_cpp_pr0:
+ .fnstart
+ .save {r4, lr}
+ bx lr
+ .fnend
+ @ final function is cantunwind, so output table size is smaller
+ @ than sum of input sections
+ .global __aeabi_unwind_cpp_pr1
+ .type __aeabi_unwind_cpp_pr1, %function
+__aeabi_unwind_cpp_pr1:
+ .fnstart
+ .cantunwind
+ bx lr
+ .fnend
+
+ .section .far
+ .word 0
diff --git a/binutils-2.21/ld/testsuite/ld-arm/unwind-5.d b/binutils-2.21/ld/testsuite/ld-arm/unwind-5.d
new file mode 100644
index 0000000..4928874
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/unwind-5.d
@@ -0,0 +1,7 @@
+#ld: -T discard-unwind.ld
+#objdump: -s
+
+.*: file format.*
+
+# Check we don't crash when discarding unwind info.
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-arm/unwind-5.s b/binutils-2.21/ld/testsuite/ld-arm/unwind-5.s
new file mode 100644
index 0000000..d15677d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/unwind-5.s
@@ -0,0 +1,12 @@
+ .syntax unified
+ .text
+ .global __aeabi_unwind_cpp_pr0
+ .type __aeabi_unwind_cpp_pr0, %function
+__aeabi_unwind_cpp_pr0:
+ .global _start
+ .type _start, %function
+_start:
+ .fnstart
+ .save {r4, lr}
+ bx lr
+ .fnend
diff --git a/binutils-2.21/ld/testsuite/ld-arm/use-thumb-lib.s b/binutils-2.21/ld/testsuite/ld-arm/use-thumb-lib.s
new file mode 100644
index 0000000..07a7f57
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/use-thumb-lib.s
@@ -0,0 +1,25 @@
+ .cpu arm10tdmi
+ .fpu softvfp
+ .eabi_attribute 18, 4
+ .eabi_attribute 20, 1
+ .eabi_attribute 21, 1
+ .eabi_attribute 23, 3
+ .eabi_attribute 24, 1
+ .eabi_attribute 25, 1
+ .eabi_attribute 26, 2
+ .eabi_attribute 30, 6
+ .file "use_thumb_lib.c"
+ .text
+ .align 2
+ .global foo
+ .type foo, %function
+foo:
+ @ args = 0, pretend = 0, frame = 0
+ @ frame_needed = 1, uses_anonymous_args = 0
+ mov ip, sp
+ stmfd sp!, {fp, ip, lr, pc}
+ sub fp, ip, #4
+ bl lib_func2
+ ldmfd sp, {fp, sp, pc}
+ .size foo, .-foo
+ .ident "GCC: (GNU) 4.1.0 (CodeSourcery ARM 2006q1-7)"
diff --git a/binutils-2.21/ld/testsuite/ld-arm/use-thumb-lib.sym b/binutils-2.21/ld/testsuite/ld-arm/use-thumb-lib.sym
new file mode 100644
index 0000000..2db6c06
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/use-thumb-lib.sym
@@ -0,0 +1,4 @@
+#...
+ +.. +..: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND lib_func2
+#pass
+
diff --git a/binutils-2.21/ld/testsuite/ld-arm/vfp11-fix-none.d b/binutils-2.21/ld/testsuite/ld-arm/vfp11-fix-none.d
new file mode 100644
index 0000000..64a67ae
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/vfp11-fix-none.d
@@ -0,0 +1,9 @@
+
+.*: .*file format elf32-(big|little)arm
+
+Disassembly of section \.text:
+
+00008000 <_start>:
+ 8000: ee474a20 \.word 0xee474a20
+ 8004: ed927a00 \.word 0xed927a00
+ 8008: e12fff1e bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/vfp11-fix-none.s b/binutils-2.21/ld/testsuite/ld-arm/vfp11-fix-none.s
new file mode 100644
index 0000000..a016c49
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/vfp11-fix-none.s
@@ -0,0 +1,7 @@
+ .arm
+ .text
+ .globl _start
+_start:
+ .word 0xee474a20
+ .word 0xed927a00
+ bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/vfp11-fix-scalar.d b/binutils-2.21/ld/testsuite/ld-arm/vfp11-fix-scalar.d
new file mode 100644
index 0000000..5095137
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/vfp11-fix-scalar.d
@@ -0,0 +1,15 @@
+
+.*: .*file format elf32-(big|little)arm
+
+Disassembly of section \.text:
+
+00008000 <_start>:
+ 8000: 0a000001 beq 800c <__vfp11_veneer_0>
+
+00008004 <__vfp11_veneer_0_r>:
+ 8004: ed927a00 (vldr|flds) s14, \[r2\]
+ 8008: e12fff1e bx lr
+
+0000800c <__vfp11_veneer_0>:
+ 800c: 0e474a20 (vmlaeq\.f32|fmacseq) s9, s14, s1
+ 8010: eafffffb b 8004 <__vfp11_veneer_0_r>
diff --git a/binutils-2.21/ld/testsuite/ld-arm/vfp11-fix-scalar.s b/binutils-2.21/ld/testsuite/ld-arm/vfp11-fix-scalar.s
new file mode 100644
index 0000000..4ffb891
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/vfp11-fix-scalar.s
@@ -0,0 +1,7 @@
+ .arm
+ .text
+ .globl _start
+_start:
+ fmacseq s9, s14, s1
+ flds s14, [r2]
+ bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/vfp11-fix-vector.d b/binutils-2.21/ld/testsuite/ld-arm/vfp11-fix-vector.d
new file mode 100644
index 0000000..15c080a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/vfp11-fix-vector.d
@@ -0,0 +1,16 @@
+
+.*: .*file format elf32-(big|little)arm
+
+Disassembly of section \.text:
+
+00008000 <_start>:
+ 8000: 0a000002 beq 8010 <__vfp11_veneer_0>
+
+00008004 <__vfp11_veneer_0_r>:
+ 8004: e1a02003 mov r2, r3
+ 8008: ed927a00 (vldr|flds) s14, \[r2\]
+ 800c: e12fff1e bx lr
+
+00008010 <__vfp11_veneer_0>:
+ 8010: 0e474a20 (vmlaeq\.f32|fmacseq) s9, s14, s1
+ 8014: eafffffa b 8004 <__vfp11_veneer_0_r>
diff --git a/binutils-2.21/ld/testsuite/ld-arm/vfp11-fix-vector.s b/binutils-2.21/ld/testsuite/ld-arm/vfp11-fix-vector.s
new file mode 100644
index 0000000..05b6100
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/vfp11-fix-vector.s
@@ -0,0 +1,8 @@
+ .arm
+ .text
+ .globl _start
+_start:
+ fmacseq s9, s14, s1
+ mov r2,r3
+ flds s14, [r2]
+ bx lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/vxworks1-lib.dd b/binutils-2.21/ld/testsuite/ld-arm/vxworks1-lib.dd
new file mode 100644
index 0000000..77bdf72
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/vxworks1-lib.dd
@@ -0,0 +1,41 @@
+
+.*: file format .*
+
+Disassembly of section \.plt:
+
+00080800 <_PROCEDURE_LINKAGE_TABLE_>:
+ 80800: e59fc000 ldr ip, \[pc, #0\] ; 80808 <.*>
+ 80804: e79cf009 ldr pc, \[ip, r9\]
+ 80808: 0000000c .word 0x0000000c
+ 8080c: e59fc000 ldr ip, \[pc, #0\] ; 80814 <.*>
+ 80810: e599f008 ldr pc, \[r9, #8\]
+ 80814: 00000000 .word 0x00000000
+ 80818: e59fc000 ldr ip, \[pc, #0\] ; 80820 <.*>
+ 8081c: e79cf009 ldr pc, \[ip, r9\]
+ 80820: 00000010 .word 0x00000010
+ 80824: e59fc000 ldr ip, \[pc, #0\] ; 8082c <.*>
+ 80828: e599f008 ldr pc, \[r9, #8\]
+ 8082c: 0000000c .word 0x0000000c
+Disassembly of section \.text:
+
+00080c00 <foo>:
+ 80c00: e92dc200 push {r9, lr, pc}
+ 80c04: e59f9024 ldr r9, \[pc, #36\] ; 80c30 <.*>
+ 80c08: e5999000 ldr r9, \[r9\]
+ 80c0c: e5999000 ldr r9, \[r9\]
+ 80c10: e59f001c ldr r0, \[pc, #28\] ; 80c34 <.*>
+ 80c14: e7991000 ldr r1, \[r9, r0\]
+ 80c18: e2811001 add r1, r1, #1 ; 0x1
+ 80c1c: e7891000 str r1, \[r9, r0\]
+ 80c20: eb000004 bl 80c38 <slocal>
+ 80c24: ebfffefb bl 80818 <.*>
+ 80c28: ebfffef4 bl 80800 <.*>
+ 80c2c: e8bd8200 pop {r9, pc}
+ 80c30: 00000000 .word 0x00000000
+ 80c34: 00000014 .word 0x00000014
+
+00080c38 <slocal>:
+ 80c38: e1a0f00e mov pc, lr
+
+00080c3c <sglobal>:
+ 80c3c: e1a0f00e mov pc, lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/vxworks1-lib.nd b/binutils-2.21/ld/testsuite/ld-arm/vxworks1-lib.nd
new file mode 100644
index 0000000..edf3db3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/vxworks1-lib.nd
@@ -0,0 +1,9 @@
+#...
+Symbol table '\.dynsym' .*:
+#...
+.*: 00081400 * 0 * OBJECT * GLOBAL * DEFAULT * [0-9]+ _GLOBAL_OFFSET_TABLE_
+#...
+Symbol table '\.symtab' .*:
+#...
+.*: 00081400 * 0 * OBJECT * GLOBAL * DEFAULT * [0-9]+ _GLOBAL_OFFSET_TABLE_
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-arm/vxworks1-lib.rd b/binutils-2.21/ld/testsuite/ld-arm/vxworks1-lib.rd
new file mode 100644
index 0000000..226bd09
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/vxworks1-lib.rd
@@ -0,0 +1,12 @@
+
+Relocation section '\.rela\.plt' at offset .* contains 2 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+0008140c .*16 R_ARM_JUMP_SLOT 00000000 sexternal \+ 0
+00081410 .*16 R_ARM_JUMP_SLOT 00080c3c sglobal \+ 0
+
+Relocation section '\.rela\.dyn' at offset .* contains 4 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+00081800 00000017 R_ARM_RELATIVE * 00080c38
+00080c0c .*06 R_ARM_ABS12 00000000 __GOTT_INDEX__ \+ 0
+00080c30 .*02 R_ARM_ABS32 00000000 __GOTT_BASE__ \+ 0
+00081414 .*15 R_ARM_GLOB_DAT 00081c00 x \+ 0
diff --git a/binutils-2.21/ld/testsuite/ld-arm/vxworks1-lib.s b/binutils-2.21/ld/testsuite/ld-arm/vxworks1-lib.s
new file mode 100644
index 0000000..66dfd1e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/vxworks1-lib.s
@@ -0,0 +1,36 @@
+ .text
+ .globl foo
+ .type foo, %function
+foo:
+ stmfd sp!, {r9, lr, pc}
+ ldr r9, 1f
+ ldr r9, [r9]
+ ldr r9, [r9, #__GOTT_INDEX__]
+ ldr r0, 1f + 4
+ ldr r1, [r9, r0]
+ add r1, r1, #1
+ str r1, [r9, r0]
+ bl slocal(PLT)
+ bl sglobal(PLT)
+ bl sexternal(PLT)
+ ldmfd sp!, {r9, pc}
+1:
+ .word __GOTT_BASE__
+ .word x(got)
+ .size foo, .-foo
+
+ .type slocal, %function
+slocal:
+ mov pc,lr
+ .size slocal, .-slocal
+
+ .globl sglobal
+ .type sglobal, %function
+sglobal:
+ mov pc,lr
+ .size sglobal, .-sglobal
+
+ .data
+ .4byte slocal
+
+ .comm x,4,4
diff --git a/binutils-2.21/ld/testsuite/ld-arm/vxworks1-lib.td b/binutils-2.21/ld/testsuite/ld-arm/vxworks1-lib.td
new file mode 100644
index 0000000..9f223e3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/vxworks1-lib.td
@@ -0,0 +1,3 @@
+#...
+ 0x0+16 \(TEXTREL\) +0x0
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-arm/vxworks1-static.d b/binutils-2.21/ld/testsuite/ld-arm/vxworks1-static.d
new file mode 100644
index 0000000..88c0baf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/vxworks1-static.d
@@ -0,0 +1,4 @@
+#name: VxWorks executable test 1 (static)
+#source: vxworks1.s
+#ld: tmpdir/libvxworks1.so -Tvxworks1.ld
+#error: Dynamic sections created in non-dynamic link
diff --git a/binutils-2.21/ld/testsuite/ld-arm/vxworks1.dd b/binutils-2.21/ld/testsuite/ld-arm/vxworks1.dd
new file mode 100644
index 0000000..0443122
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/vxworks1.dd
@@ -0,0 +1,37 @@
+
+.*: file format .*
+
+Disassembly of section \.plt:
+
+00080800 <_PROCEDURE_LINKAGE_TABLE_>:
+ 80800: e52dc008 str ip, \[sp, #-8\]!
+ 80804: e59fc000 ldr ip, \[pc, #0\] ; 8080c <.*>
+ 80808: e59cf008 ldr pc, \[ip, #8\]
+ 8080c: 00081400 .word 0x00081400
+ 8080c: R_ARM_ABS32 _GLOBAL_OFFSET_TABLE_
+ 80810: e59fc000 ldr ip, \[pc, #0\] ; 80818 <.*>
+ 80814: e59cf000 ldr pc, \[ip\]
+ 80818: 0008140c .word 0x0008140c
+ 80818: R_ARM_ABS32 _GLOBAL_OFFSET_TABLE_\+0xc
+ 8081c: e59fc000 ldr ip, \[pc, #0\] ; 80824 <.*>
+ 80820: eafffff6 b 80800 <.*>
+ 80824: 00000000 .word 0x00000000
+ 80828: e59fc000 ldr ip, \[pc, #0\] ; 80830 <.*>
+ 8082c: e59cf000 ldr pc, \[ip\]
+ 80830: 00081410 .word 0x00081410
+ 80830: R_ARM_ABS32 _GLOBAL_OFFSET_TABLE_\+0x10
+ 80834: e59fc000 ldr ip, \[pc, #0\] ; 8083c <.*>
+ 80838: eafffff0 b 80800 <.*>
+ 8083c: 0000000c .word 0x0000000c
+Disassembly of section \.text:
+
+00080c00 <_start>:
+ 80c00: ebffff08 bl 80828 <.*>
+ 80c00: R_ARM_PC24 \.plt\+0x20
+ 80c04: eb000000 bl 80c0c <sexternal>
+ 80c04: R_ARM_PC24 sexternal\+0xfffffff8
+ 80c08: eaffff00 b 80810 <.*>
+ 80c08: R_ARM_PC24 \.plt\+0x8
+
+00080c0c <sexternal>:
+ 80c0c: e1a0f00e mov pc, lr
diff --git a/binutils-2.21/ld/testsuite/ld-arm/vxworks1.ld b/binutils-2.21/ld/testsuite/ld-arm/vxworks1.ld
new file mode 100644
index 0000000..65bf65d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/vxworks1.ld
@@ -0,0 +1,30 @@
+SECTIONS
+{
+ . = 0x80000;
+ .interp : { *(.interp) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+
+ . = ALIGN (0x400);
+ .rela.dyn : { *(.rela.dyn) }
+ .rela.plt : { *(.rela.plt) }
+
+ . = ALIGN (0x400);
+ .plt : { *(.plt) }
+
+ . = ALIGN (0x400);
+ .text : { *(.text) }
+
+ . = ALIGN (0x1000);
+ .dynamic : { *(.dynamic) }
+
+ . = ALIGN (0x400);
+ .got : { *(.got.plt) *(.got) }
+
+ . = ALIGN (0x400);
+ .data : { *(.data) }
+
+ . = ALIGN (0x400);
+ .bss : { *(.bss) *(.dynbss) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-arm/vxworks1.rd b/binutils-2.21/ld/testsuite/ld-arm/vxworks1.rd
new file mode 100644
index 0000000..8d7d5cb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/vxworks1.rd
@@ -0,0 +1,19 @@
+
+Relocation section '\.rela\.plt' at offset .* contains 2 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+0008140c .*16 R_ARM_JUMP_SLOT 00080810 sglobal \+ 0
+00081410 .*16 R_ARM_JUMP_SLOT 00080828 foo \+ 0
+
+Relocation section '\.rela\.text' at offset .* contains 3 entries:
+ Offset Info Type Sym.Value Sym. Name \+ Addend
+00080c00 .*01 R_ARM_PC24 00080800 \.plt \+ 20
+00080c04 .*01 R_ARM_PC24 00080c0c sexternal \+ fffffff8
+00080c08 .*01 R_ARM_PC24 00080800 \.plt \+ 8
+
+Relocation section '\.rela\.plt\.unloaded' at offset .* contains 5 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+0008080c .*02 R_ARM_ABS32 00081400 _GLOBAL_OFFSET_TABLE_ \+ 0
+00080818 .*02 R_ARM_ABS32 00081400 _GLOBAL_OFFSET_TABLE_ \+ c
+0008140c .*02 R_ARM_ABS32 00080800 _PROCEDURE_LINKAGE_TAB.* \+ 0
+00080830 .*02 R_ARM_ABS32 00081400 _GLOBAL_OFFSET_TABLE_ \+ 10
+00081410 .*02 R_ARM_ABS32 00080800 _PROCEDURE_LINKAGE_TAB.* \+ 0
diff --git a/binutils-2.21/ld/testsuite/ld-arm/vxworks1.s b/binutils-2.21/ld/testsuite/ld-arm/vxworks1.s
new file mode 100644
index 0000000..0139a11
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/vxworks1.s
@@ -0,0 +1,14 @@
+ .text
+ .globl _start
+ .type _start, %function
+_start:
+ bl foo
+ bl sexternal
+ b sglobal
+ .size _start, .-_start
+
+ .globl sexternal
+ .type sexternal, %function
+sexternal:
+ mov pc, lr
+ .size sexternal, .-sexternal
diff --git a/binutils-2.21/ld/testsuite/ld-arm/vxworks2-static.sd b/binutils-2.21/ld/testsuite/ld-arm/vxworks2-static.sd
new file mode 100644
index 0000000..912755b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/vxworks2-static.sd
@@ -0,0 +1,9 @@
+#...
+Elf file type is EXEC \(Executable file\)
+Entry point 0x80000
+#...
+Program Headers:
+ Type .*
+ LOAD .* 0x00080000 0x00080000 .* R E 0x1000
+
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-arm/vxworks2.s b/binutils-2.21/ld/testsuite/ld-arm/vxworks2.s
new file mode 100644
index 0000000..1bd207b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/vxworks2.s
@@ -0,0 +1,5 @@
+ .globl _start
+ .type _start, %function
+_start:
+ mov pc, lr
+ .end _start
diff --git a/binutils-2.21/ld/testsuite/ld-arm/vxworks2.sd b/binutils-2.21/ld/testsuite/ld-arm/vxworks2.sd
new file mode 100644
index 0000000..5ff87d3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-arm/vxworks2.sd
@@ -0,0 +1,13 @@
+#...
+Elf file type is EXEC \(Executable file\)
+Entry point 0x80400
+#...
+Program Headers:
+ Type .*
+ PHDR .*
+#...
+ LOAD .* 0x00080000 0x00080000 .* R E 0x1000
+ LOAD .* 0x00081000 0x00081000 .* RW 0x1000
+ DYNAMIC .*
+
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-auto-import/auto-import.exp b/binutils-2.21/ld/testsuite/ld-auto-import/auto-import.exp
new file mode 100644
index 0000000..f9a26e1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-auto-import/auto-import.exp
@@ -0,0 +1,177 @@
+# Expect script for ld-auto-import tests
+# Copyright 2002, 2005, 2007, 2008, 2009
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by Ralf.Habacker@freenet.de
+# Based on ls-shared/shared.exp by Ian Lance Taylor (ian@cygnus.com)
+#
+
+# Note:
+#
+# This script tests some auto-import functionality:
+#
+# A. "auto importing direct from a dll" functionality, which dramatically reduces the
+# linking time for big libraries and applications by skipping creating/using
+# import libraries. Instead it links directly to the related dll or to a symlinked
+# dll for replacing regular import libraries. The test has 6 stages:
+#
+# 1. compile and link a test dll exporting some text and data symbols and a
+# standard import library
+#
+# 2. create a symbolic link to this dll to simulate a replaced import library.
+#
+# 3. compile and link a client application with the standard import library.
+# This should produce no errors.
+#
+# 4. compile and link a client application with the created dll.
+# This should also produce no errors.
+#
+# 5. compile and link a client application using the "import library".
+# This should also produce no errors.
+#
+# 6. compile and link a client application with auto-import disabled.
+# This should produce a linking error.
+#
+# B. runtime check if there are no segfaults when importing const data variables
+#
+
+# This test can only be run if ld generates native executables.
+if ![isnative] then {return}
+
+# This test can only be run on a couple of platforms.
+# Square bracket expressions seem to confuse istarget.
+if { ![istarget *-pc-cygwin]
+ && ![istarget *-pc-mingw*] } {
+ return
+}
+
+if [istarget *-pc-mingw*] {
+ # FIXME: Add support for this target.
+ unsupported "mingw currently not supported"
+}
+
+# No compiler, no test.
+if { [which $CC] == 0 } {
+ untested "Auto import test (compiler not found)"
+ return
+}
+
+# ld_special_link
+# link a program using ld, without including any libraries
+#
+proc ld_special_link { ld target objects } {
+ global host_triplet
+ global link_output
+
+ if { [which $ld] == 0 } then {
+ perror "$ld does not exist"
+ return 0
+ }
+
+ if [is_endian_output_format $objects] then {
+ set flags [big_or_little_endian]
+ } else {
+ set flags ""
+ }
+
+ verbose -log "$ld $flags -o $target $objects"
+
+ catch "exec $ld $flags -o $target $objects" link_output
+ set exec_output [prune_warnings $link_output]
+
+ # We don't care if we get a warning about a non-existent start
+ # symbol, since the default linker script might use ENTRY.
+ regsub -all "(^|\n)(\[^\n\]*: warning: cannot find entry symbol\[^\n\]*\n?)" $exec_output "\\1" exec_output
+
+ # We don't care if we get a message about creating a library file.
+ regsub -all "(^|\n)(Creating library file\[^\n\]*\n?)" $exec_output "\\1" exec_output
+
+ if [string match "" $exec_output] then {
+ return 1
+ }
+
+ verbose -log "$exec_output"
+ return 0
+}
+
+set tmpdir tmpdir
+set SHCFLAG ""
+
+if [istarget *-pc-cygwin] {
+ # Set some libs needed for cygwin.
+ set MYLIBS "-L/usr/lib -lcygwin -L/usr/lib/w32api -lkernel32"
+
+ # Compile the dll.
+ if ![ld_compile "$CC $CFLAGS $SHCFLAG" $srcdir/$subdir/dll.c $tmpdir/dll.o] {
+ fail "compiling shared lib"
+ }
+ if ![ld_special_link "$ld -shared --enable-auto-import -e __cygwin_dll_entry@12 --out-implib=$tmpdir/libstandard.dll.a" $tmpdir/dll.dll "$tmpdir/dll.o $MYLIBS"] {
+ fail "linking shared lib"
+ }
+
+ # Create symbolic link.
+ catch "exec ln -fs dll.dll $tmpdir/libsymlinked_dll.dll.a" ln_catch
+
+ # Compile and link the client program.
+ if ![ld_compile "$CC $CFLAGS $SHCFLAG" $srcdir/$subdir/client.c $tmpdir/client.o] {
+ fail "compiling client"
+ }
+
+ # Check linking with import library.
+ set msg "linking auto-import client using a standard import library"
+ if [ld_special_link $ld $tmpdir/client-linklib.exe "--enable-auto-import --enable-runtime-pseudo-reloc /lib/crt0.o $tmpdir/client.o -L$tmpdir -lstandard $MYLIBS"] {
+ pass $msg
+ } else {
+ fail $msg
+ }
+
+ # Check linking directly with dll.
+ set msg "linking auto-import client using the dll"
+ if [ld_special_link $ld $tmpdir/client-linkdll.exe "--enable-auto-import --enable-runtime-pseudo-reloc /lib/crt0.o $tmpdir/client.o -L$tmpdir -ldll $MYLIBS"] {
+ pass $msg
+ } else {
+ fail $msg
+ }
+
+ # Check linking with symlinked dll.
+ set msg "linking auto-import client using symbolic linked dll"
+ if [ld_special_link $ld $tmpdir/client-symlinkeddll.exe "--enable-auto-import --enable-runtime-pseudo-reloc /lib/crt0.o $tmpdir/client.o -L$tmpdir -lsymlinked_dll $MYLIBS"] {
+ pass $msg
+ } else {
+ fail $msg
+ }
+
+ # Check linking with disabled auto-import, this must produce linking error.
+ set msg "linking with disabled auto-import"
+ if ![ld_special_link $ld $tmpdir/client-failed.exe "--disable-auto-import --enable-runtime-pseudo-reloc /lib/crt0.o $tmpdir/client.o -L$tmpdir -ldll $MYLIBS"] {
+ pass $msg
+ } else {
+ fail $msg
+ }
+
+ # Check that the app works - ie that there is output when the applications runs.
+ set msg "application runtime segfault check"
+ catch "exec $tmpdir/client-linklib.exe" exec_output
+ if ![string match "" $exec_output] then {
+ pass $msg
+ } else {
+ fail $msg
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-auto-import/client.c b/binutils-2.21/ld/testsuite/ld-auto-import/client.c
new file mode 100644
index 0000000..b883fdb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-auto-import/client.c
@@ -0,0 +1,60 @@
+#include <stdio.h>
+
+extern int var;
+extern void (*func_ptr)(void);
+extern void print_var (void);
+extern void print_foo (void);
+extern int foo;
+extern int var2[2];
+
+typedef struct
+{
+ int * var;
+ void (* func_ptr)(void);
+ int * var_with_offset;
+}
+TEST;
+
+TEST xyz = { & var, print_var, & var };
+
+const TEST const_xyz = { & var, print_var, & var };
+
+int
+main (void)
+{
+ print_var ();
+
+ printf ("We see var = %d\n", var);
+ printf ("Setting var = 456\n");
+
+ var = 456;
+
+ print_var ();
+ printf ("We see var = %d\n\n", var);
+
+ var = 90;
+ print_var ();
+ printf ("We see var = %d\n\n", var);
+
+ print_foo ();
+ printf ("We see foo = %d\n", foo);
+ printf ("Setting foo = 19\n");
+ foo = 19;
+ print_foo ();
+ printf ("We see foo = %d\n\n", foo);
+ fflush (stdout);
+
+ printf ("Calling dllimported function pointer\n");
+ func_ptr ();
+
+ printf ("Calling functions using global structure\n");
+ xyz.func_ptr ();
+ * xyz.var = 40;
+ xyz.func_ptr ();
+
+ printf ("We see var2[0] = %d\n\n", var2[0]);
+
+ printf ("We see const xyz %x %x\n", const_xyz.var, const_xyz.var_with_offset);
+
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-auto-import/dll.c b/binutils-2.21/ld/testsuite/ld-auto-import/dll.c
new file mode 100644
index 0000000..ccf85e4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-auto-import/dll.c
@@ -0,0 +1,20 @@
+int var = 123;
+int foo = 121;
+
+int var2[2]= { 123, 456 };
+
+#include <stdio.h>
+
+void
+print_var (void)
+{
+ printf ("DLL sees var = %d\n", var);
+}
+
+void
+print_foo (void)
+{
+ printf ("DLL sees foo = %d\n", foo);
+}
+
+void (* func_ptr)(void) = print_foo;
diff --git a/binutils-2.21/ld/testsuite/ld-bootstrap/bootstrap.exp b/binutils-2.21/ld/testsuite/ld-bootstrap/bootstrap.exp
new file mode 100644
index 0000000..74b6a5c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-bootstrap/bootstrap.exp
@@ -0,0 +1,210 @@
+# Expect script for LD Bootstrap Tests
+# Copyright 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2004,
+# 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by Jeffrey Wheat (cassidy@cygnus.com)
+# Rewritten by Ian Lance Taylor (ian@cygnus.com)
+#
+
+# Make sure that ld can bootstrap itself.
+
+# This test can only be run if ld generates native executables.
+if ![isnative] {
+ return
+}
+
+# Determine if plugin support is present.
+remote_exec host "$nm --help" "" "/dev/null" "plugin-support"
+set tmp [file_contents "plugin-support"]
+regexp ".*\(--plugin\).*\n" $tmp foo plugins
+if [info exists plugins] then {
+ set plugins "yes"
+} else {
+ set plugins "no"
+}
+
+# LD can have plugin support even if BFD does not.
+if [check_plugin_api_available] {
+ set plugins "yes"
+}
+
+# Bootstrap ld. First link the object files together using -r, in
+# order to test -r. Then link the result into an executable, ld1, to
+# really test -r. Use ld1 to link a fresh ld, ld2. Use ld2 to link a
+# new ld, ld3. ld2 and ld3 should be identical.
+
+foreach flags {"" "strip" "--static" "--traditional-format"
+ "--no-keep-memory" "--relax"} {
+ set do_strip "no"
+ if {"$flags" == "strip"} {
+ set testname "bootstrap with $flags"
+ set flags ""
+ set do_strip "yes"
+ } else { if {"$flags" != ""} {
+ set testname "bootstrap with $flags"
+ } else {
+ set testname "bootstrap"
+ }}
+
+ # --static is meaningless and --relax is incompatible with -r.
+ set partial_flags "$flags"
+ if { "$flags" == "--static" || "$flags" == "--relax" } {
+ set partial_flags ""
+ }
+
+ # This test can only be run if we have the ld build directory,
+ # since we need the object files.
+ if {$ld != "$objdir/ld-new"} {
+ untested $testname
+ continue
+ }
+
+ # Plugin support requires linking with a dynamic library which
+ # means that these
+ if { $flags == "--static" && $plugins == "yes" } then {
+ untested $testname
+ continue
+ }
+
+ # If we only have a shared libbfd, we probably can't run the
+ # --static test.will fail.
+ if { $flags == "--static" && ! [string match "*libbfd.a*" $BFDLIB] } then {
+ untested $testname
+ continue
+ }
+
+ if ![ld_relocate $ld tmpdir/ld-partial.o "$partial_flags $OFILES"] {
+ fail $testname
+ continue
+ }
+
+ # On AIX, you need to specify an import list when using --static.
+ # You only want the import list when creating the final
+ # executable.
+ if { [istarget "*-*-aix*"]
+ && ![istarget "ia64-*-aix*"]} {
+ if {"$flags" == "--static"} {
+ set flags "--static -bI:/lib/syscalls.exp"
+ }
+ }
+
+ # On Cygwin, -lintl may require -liconv when linking statically.
+ set extralibs ""
+ if { [istarget "*-*-cygwin*"]} {
+ if {"$flags" == "--static"} {
+ set extralibs "-liconv"
+ }
+ }
+
+ # Plugin support requires linking with libdl.
+ if { $plugins == "yes" } {
+ set extralibs "$extralibs -ldl"
+ }
+
+ # On Irix 5, linking with --static only works if all the files are
+ # compiled using -non_shared.
+ if {"$flags" == "--static"} {
+ setup_xfail "mips*-*-irix5*"
+ }
+
+ if ![ld_link $ld tmpdir/ld1 "$flags tmpdir/ld-partial.o $BFDLIB $LIBIBERTY $extralibs"] {
+ fail $testname
+ continue
+ }
+
+ if {"$do_strip" == "yes"} {
+ verbose -log "$strip tmpdir/ld1"
+ catch "exec $strip tmpdir/ld1" exec_output
+ if ![string match "" $exec_output] then {
+ verbose -log "$exec_output"
+ fail $testname
+ continue
+ }
+ }
+
+ if ![ld_link tmpdir/ld1 tmpdir/ld2 "$flags $OFILES $BFDLIB $LIBIBERTY $extralibs"] {
+ fail $testname
+ continue
+ }
+
+ if ![ld_link tmpdir/ld2 tmpdir/ld3 "$flags $OFILES $BFDLIB $LIBIBERTY $extralibs"] {
+ fail $testname
+ continue
+ }
+
+ if {"$flags" == "--static"} {
+ if { [istarget ia64-*-elf*]
+ || [istarget ia64-*-linux*] } {
+ # On ia64, tmpdir/ld2 != tmpdir/ld3 is normal since they are
+ # generated by different linkers, tmpdir/ld1 and tmpdir/ld2.
+ # So we rebuild tmpdir/ld2 with tmpdir/ld3.
+ if ![ld_link tmpdir/ld3 tmpdir/ld2 "$flags $OFILES $BFDLIB $LIBIBERTY"] {
+ fail $testname
+ continue
+ }
+ }
+ } else {
+ if { [istarget mips*-*-linux*] } {
+ # On Linux/mips, tmpdir/ld2 != tmpdir/ld3 is normal since
+ # they are generated by different linkers, tmpdir/ld1 and
+ # tmpdir/ld2. So we rebuild tmpdir/ld2 with tmpdir/ld3.
+ if ![ld_link tmpdir/ld3 tmpdir/ld2 "$flags $OFILES $BFDLIB $LIBIBERTY"] {
+ fail $testname
+ continue
+ }
+ }
+ }
+
+ if {[istarget "*-*-pe"]
+ || [istarget "*-*-wince"]
+ || [istarget "*-*-cygwin*"]
+ || [istarget "*-*-winnt*"]
+ || [istarget "*-*-mingw*"]
+ || [istarget "*-*-interix*"]
+ || [istarget "*-*-beospe*"]
+ || [istarget "*-*-netbsdpe*"]} {
+ # Trim off the date present in PE binaries by only looking
+ # at the ends of the files
+ # Although this works, a way to set the date would be better.
+ # Removing or zeroing the date stamp in the binary produced by
+ # the linker is not possible as it is required by the target OS.
+ set do_compare [string map {16 220 f1 tmpdir/ld2 f2 tmpdir/ld3 tmp-foo1 tmpdir/ld2tail tmp-foo2 tmpdir/ld3tail} $DO_COMPARE]
+ send_log "$do_compare\n"
+ verbose "$do_compare"
+ catch "exec sh -c [list $do_compare]" exec_output
+ } else {
+ send_log "cmp tmpdir/ld2 tmpdir/ld3\n"
+ verbose "cmp tmpdir/ld2 tmpdir/ld3"
+ catch "exec cmp tmpdir/ld2 tmpdir/ld3" exec_output
+ }
+ set exec_output [prune_warnings $exec_output]
+
+ if [string match "" $exec_output] then {
+ pass $testname
+ } else {
+ send_log "$exec_output\n"
+ verbose "$exec_output" 1
+
+ fail $testname
+ }
+}
+
+catch "exec rm -f tmpdir/ld-partial.o tmpdir/ld1 tmpdir/ld2 tmpdir/ld3" status
+catch "exec rm -f tmpdir/ld2tail tmpdir/ld3tail" status
diff --git a/binutils-2.21/ld/testsuite/ld-cdtest/cdtest-bar.cc b/binutils-2.21/ld/testsuite/ld-cdtest/cdtest-bar.cc
new file mode 100644
index 0000000..79000e3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cdtest/cdtest-bar.cc
@@ -0,0 +1,17 @@
+// test program for Class Foo
+
+#include "cdtest-foo.h"
+
+static Foo static_foo( "static_foo");
+
+Foo f()
+{
+ Foo x;
+ return x;
+}
+
+void g()
+{
+ Foo other_foo1 = Foo( "other_foo1"), other_foo2 = Foo( "other_foo2");
+ other_foo2 = other_foo1;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-cdtest/cdtest-foo.cc b/binutils-2.21/ld/testsuite/ld-cdtest/cdtest-foo.cc
new file mode 100644
index 0000000..d8e5cbe
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cdtest/cdtest-foo.cc
@@ -0,0 +1,89 @@
+// Class Foo
+#pragma implementation
+
+
+// We don't use header files, since we only want to see, whether the
+// compiler is installed properly.
+//
+#if (__GNUG__ == 2)
+typedef __SIZE_TYPE__ size_t;
+#else
+typedef unsigned int size_t;
+#endif
+
+extern "C" {
+ char *strncpy (char* dest, const char* src, size_t len);
+ int printf (const char*, ...);
+};
+
+#include "cdtest-foo.h"
+
+int Foo::foos = 0;
+
+void Foo::init_foo ()
+{
+ printf ("BROKENLY calling Foo::init_foo from __init_start; size_of(Foo) = %ld\n", (long) sizeof(Foo));
+ foos = FOOLISH_NUMBER;
+}
+
+
+Foo::Foo ()
+{
+ i = ++foos;
+ strncpy (message, "default-foo", len);
+#ifdef WITH_ADDR
+ printf ("Constructing Foo(%d) \"default-foo\" at %08x\n", i, this);
+#else
+ printf ("Constructing Foo(%d) \"default-foo\"\n", i);
+#endif
+}
+
+Foo::Foo (const char* msg)
+{
+ i = ++foos;
+ strncpy( message, msg, len);
+#ifdef WITH_ADDR
+ printf ( "Constructing Foo(%d) \"%s\" at %08x\n", i, message, this);
+#else
+ printf ( "Constructing Foo(%d) \"%s\"\n", i, message);
+#endif
+}
+
+
+Foo::Foo (const Foo& foo)
+{
+ i = ++foos;
+#ifdef WITH_ADDR
+ printf ("Initializing Foo(%d) \"%s\" at %08x with Foo(%d) %08x\n",
+ i, foo.message, this, foo.i, &foo);
+#else
+ printf ("Initializing Foo(%d) \"%s\" with Foo(%d)\n",i, foo.message, foo.i);
+#endif
+ for ( int k = 0; k < FOO_MSG_LEN; k++) message[k] = foo.message[k];
+}
+
+
+Foo& Foo::operator= (const Foo& foo)
+{
+#ifdef WITH_ADDR
+ printf ("Copying Foo(%d) \"%s\" at %08x to Foo(%d) %08x\n",
+ foo.i, foo.message, &foo, i, this);
+#else
+ printf ("Copying Foo(%d) \"%s\" to Foo(%d)\n", foo.i, foo.message, i);
+#endif
+ for ( int k = 0; k < FOO_MSG_LEN; k++) message[k] = foo.message[k];
+ return *this;
+}
+
+
+Foo::~Foo ()
+{
+ foos--;
+#ifdef WITH_ADDR
+ printf ("Destructing Foo(%d) \"%s\" at %08x (remaining foos: %d)\n",
+ i, message, this, foos);
+#else
+ printf ("Destructing Foo(%d) \"%s\" (remaining foos: %d)\n",
+ i, message, foos);
+#endif
+}
diff --git a/binutils-2.21/ld/testsuite/ld-cdtest/cdtest-foo.h b/binutils-2.21/ld/testsuite/ld-cdtest/cdtest-foo.h
new file mode 100644
index 0000000..f36efb7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cdtest/cdtest-foo.h
@@ -0,0 +1,24 @@
+// Class Foo
+
+#pragma interface
+
+#define FOOLISH_NUMBER -4711
+
+#ifndef FOO_MSG_LEN
+#define FOO_MSG_LEN 80
+#endif
+
+class Foo {
+ static int foos;
+ int i;
+ static const int len = FOO_MSG_LEN;
+ char message[len];
+public:
+ static void init_foo ();
+ static int nb_foos() { return foos; }
+ Foo();
+ Foo(const char* message);
+ Foo(const Foo&);
+ Foo & operator= (const Foo&);
+ ~Foo ();
+};
diff --git a/binutils-2.21/ld/testsuite/ld-cdtest/cdtest-main.cc b/binutils-2.21/ld/testsuite/ld-cdtest/cdtest-main.cc
new file mode 100644
index 0000000..bc881da
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cdtest/cdtest-main.cc
@@ -0,0 +1,40 @@
+// main program for Class Foo
+
+extern "C" {
+// Some <assert.h> implementations (e.g. SUNOS 4.1) are broken,
+// in that they require <stdio.h>. But, if gcc/g++ is installed
+// correctly, you should get gcc's assert.h.
+// If the compile fails, it means the wrong include files are in use!
+#include <assert.h>
+};
+#include "cdtest-foo.h"
+
+extern "C" void __init_start();
+
+extern Foo f(void);
+extern void g(void);
+
+/* This function should *not* be called by the environment. There is
+ no way in C++ to ``run something after the initializers but before main()''.
+ The library that depends on this (NIHCL) is broken. -- John Gilmore
+ We leave this here to test that future changes to the compiler
+ do not re-introduce this losing ``feature''. */
+void
+__init_start()
+{
+ Foo::init_foo();
+}
+
+static Foo static_foo( "static_foo");
+
+int main()
+{
+ assert (Foo::nb_foos() == 2);
+ Foo automatic_foo( "automatic_foo");
+ Foo bla_foo = f();
+ assert (Foo::nb_foos() == 4);
+ g();
+ assert (Foo::nb_foos() == 4);
+ // `automatic_foo' and `bla_foo' are destructed here
+}
+
diff --git a/binutils-2.21/ld/testsuite/ld-cdtest/cdtest-nrv.dat b/binutils-2.21/ld/testsuite/ld-cdtest/cdtest-nrv.dat
new file mode 100644
index 0000000..d3f871f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cdtest/cdtest-nrv.dat
@@ -0,0 +1,13 @@
+Constructing Foo(1) "static_foo"
+Constructing Foo(2) "static_foo"
+Constructing Foo(3) "automatic_foo"
+Constructing Foo(4) "default-foo"
+Constructing Foo(5) "other_foo1"
+Constructing Foo(6) "other_foo2"
+Copying Foo(5) "other_foo1" to Foo(6)
+Destructing Foo(6) "other_foo1" (remaining foos: 5)
+Destructing Foo(5) "other_foo1" (remaining foos: 4)
+Destructing Foo(4) "default-foo" (remaining foos: 3)
+Destructing Foo(3) "automatic_foo" (remaining foos: 2)
+Destructing Foo(2) "static_foo" (remaining foos: 1)
+Destructing Foo(1) "static_foo" (remaining foos: 0)
diff --git a/binutils-2.21/ld/testsuite/ld-cdtest/cdtest.dat b/binutils-2.21/ld/testsuite/ld-cdtest/cdtest.dat
new file mode 100644
index 0000000..39be0db
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cdtest/cdtest.dat
@@ -0,0 +1,15 @@
+Constructing Foo(1) "static_foo"
+Constructing Foo(2) "static_foo"
+Constructing Foo(3) "automatic_foo"
+Constructing Foo(4) "default-foo"
+Initializing Foo(5) "default-foo" with Foo(4)
+Destructing Foo(4) "default-foo" (remaining foos: 4)
+Constructing Foo(5) "other_foo1"
+Constructing Foo(6) "other_foo2"
+Copying Foo(5) "other_foo1" to Foo(6)
+Destructing Foo(6) "other_foo1" (remaining foos: 5)
+Destructing Foo(5) "other_foo1" (remaining foos: 4)
+Destructing Foo(5) "default-foo" (remaining foos: 3)
+Destructing Foo(3) "automatic_foo" (remaining foos: 2)
+Destructing Foo(2) "static_foo" (remaining foos: 1)
+Destructing Foo(1) "static_foo" (remaining foos: 0)
diff --git a/binutils-2.21/ld/testsuite/ld-cdtest/cdtest.exp b/binutils-2.21/ld/testsuite/ld-cdtest/cdtest.exp
new file mode 100644
index 0000000..a25b437
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cdtest/cdtest.exp
@@ -0,0 +1,127 @@
+# Expect script for LD cdtest Tests
+# Copyright 1993, 1994, 1995, 1997, 2001, 2004, 2005, 2007
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by Jeffrey Wheat (cassidy@cygnus.com)
+# Rewritten by Ian Lance Taylor (ian@cygnus.com)
+#
+
+# Make sure that constructors are handled correctly.
+
+set test1 "cdtest"
+set test2 "cdtest with -Ur"
+
+# This test requires running the executable generated by ld.
+if ![isnative] {
+ return
+}
+
+if { [which $CXX] == 0 } {
+ untested $test1
+ untested $test2
+ return
+}
+
+if { ![ld_compile "$CXX $CXXFLAGS -fno-exceptions" $srcdir/$subdir/cdtest-foo.cc tmpdir/cdtest-foo.o]
+ || ![ld_compile "$CXX $CXXFLAGS -fno-exceptions" $srcdir/$subdir/cdtest-bar.cc tmpdir/cdtest-bar.o]
+ || ![ld_compile "$CXX $CXXFLAGS -fno-exceptions" $srcdir/$subdir/cdtest-main.cc tmpdir/cdtest-main.o] } {
+ unresolved $test1
+ unresolved $test2
+ return
+}
+
+set expected_output "$srcdir/$subdir/cdtest.dat"
+
+if ![ld_link $ld tmpdir/cdtest {tmpdir/cdtest-foo.o tmpdir/cdtest-bar.o tmpdir/cdtest-main.o}] {
+ fail $test1
+} else {
+ send_log "tmpdir/cdtest >tmpdir/cdtest.out\n"
+ verbose "tmpdir/cdtest >tmpdir/cdtest.out"
+ catch "exec tmpdir/cdtest >tmpdir/cdtest.out" exec_output
+
+ if ![string match "" $exec_output] then {
+ send_log "$exec_output\n"
+ verbose "$exec_output" 1
+
+ fail $test1
+ } else {
+ send_log "diff tmpdir/cdtest.out $expected_output\n"
+ verbose "diff tmpdir/cdtest.out $expected_output"
+ catch "exec diff tmpdir/cdtest.out $expected_output" exec_output
+ set exec_output [prune_warnings $exec_output]
+
+ if ![string match "" $exec_output] then {
+ send_log "$exec_output\n"
+ verbose "$exec_output" 1
+
+ send_log "Checking against Named Return Value optimization\n"
+ verbose "Checking against Named Return Value optimization" 1
+
+ set expected_output "$srcdir/$subdir/cdtest-nrv.dat"
+
+ send_log "diff tmpdir/cdtest.out $expected_output\n"
+ verbose "diff tmpdir/cdtest.out $expected_output"
+ catch "exec diff tmpdir/cdtest.out $expected_output" exec_output
+ set exec_output [prune_warnings $exec_output]
+ }
+
+ if [string match "" $exec_output] then {
+ pass $test1
+ } else {
+ send_log "$exec_output\n"
+ verbose "$exec_output" 1
+
+ fail $test1
+ }
+ }
+}
+
+if ![ld_relocate $ld tmpdir/cdtest.o {-Ur tmpdir/cdtest-foo.o tmpdir/cdtest-bar.o tmpdir/cdtest-main.o}] {
+ fail $test2
+} else {
+ if ![ld_link $ld tmpdir/cdtest tmpdir/cdtest.o] {
+ fail $test2
+ } else {
+ send_log "tmpdir/cdtest >tmpdir/cdtest.out\n"
+ verbose "tmpdir/cdtest >tmpdir/cdtest.out"
+ catch "exec tmpdir/cdtest >tmpdir/cdtest.out" exec_output
+
+ if ![string match "" $exec_output] then {
+ send_log "$exec_output\n"
+ verbose "$exec_output" 1
+
+ fail $test2
+ } else {
+ send_log "diff tmpdir/cdtest.out $expected_output\n"
+ verbose "diff tmpdir/cdtest.out $expected_output"
+ catch "exec diff tmpdir/cdtest.out $expected_output" exec_output
+ set exec_output [prune_warnings $exec_output]
+
+ if [string match "" $exec_output] then {
+ pass $test2
+ } else {
+ send_log "$exec_output\n"
+ verbose "$exec_output" 1
+
+ fail $test2
+ }
+ }
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-checks/asm.s b/binutils-2.21/ld/testsuite/ld-checks/asm.s
new file mode 100644
index 0000000..86e7310
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-checks/asm.s
@@ -0,0 +1,11 @@
+ .text
+ .global foo
+foo:
+ .long 0x12345678
+
+ .data
+ .global bar
+bar:
+ .long 0x87654321
+
+ .lcomm dummy, 0x12
diff --git a/binutils-2.21/ld/testsuite/ld-checks/checks.exp b/binutils-2.21/ld/testsuite/ld-checks/checks.exp
new file mode 100644
index 0000000..af281d0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-checks/checks.exp
@@ -0,0 +1,81 @@
+# Expect script for LD section checks tests
+# Copyright 1999, 2001, 2003, 2005, 2007, 2009 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by Nick Clifton (nickc@cygnus.com)
+
+proc section_check {} {
+ global ld_flags
+ global as
+ global ld
+ global srcdir
+ global subdir
+
+ # The usage of .lcomm in asm.s is incompatible with ia64 and ppc coff.
+ if { [istarget ia64-*-*]
+ || [istarget powerpc*-*-aix*]
+ || [istarget powerpc-*-beos*]
+ || [istarget rs6000-*-*] } {
+ return
+ }
+ set test "check sections 1"
+
+ set ldflags "--check-sections -e foo"
+
+ if { ![ld_assemble $as $srcdir/$subdir/asm.s tmpdir/asm.o]} {
+ unresolved $test
+ return
+ }
+
+ if ![ld_simple_link $ld tmpdir/asm.x "$ldflags tmpdir/asm.o"] {
+ fail $test
+ } else {
+ pass $test
+ }
+
+ set test "check sections 2"
+
+ # Change the linker flags so that our "buggy" linker
+ # script is used.
+ set ldflags "--check-sections -T $srcdir/$subdir/script -e foo"
+
+ # Perform the equivalent of invoking ld_simple_link
+ # except that we need to massage the output further.
+
+ set exec_output [run_host_cmd "$ld" "-o tmpdir/asm.x $ldflags tmpdir/asm.o"]
+ set exec_output [prune_warnings $exec_output]
+
+ # Make sure that we got some output from the linker
+ if [string match "" $exec_output] then {
+ fail $test
+ }
+
+ # Now remove our expected error message
+ regsub -all ".*: section .data .* overlaps section .text .*" $exec_output "" exec_output
+
+ # And check to see if anything else, (unexpected) was left
+ if [string match "" $exec_output] then {
+ pass $test
+ } else {
+ verbose -log "Unexpected linker message(s): $exec_output"
+ fail $test
+ }
+}
+
+section_check
diff --git a/binutils-2.21/ld/testsuite/ld-checks/script b/binutils-2.21/ld/testsuite/ld-checks/script
new file mode 100644
index 0000000..44c6a08
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-checks/script
@@ -0,0 +1,6 @@
+SECTIONS {
+ .text 0x100 : { *(.text) }
+ .data 0x100 : AT (0x100) { *(.data) }
+ .bss 0x100 : AT (0x4000) { *(.bss) }
+}
+
diff --git a/binutils-2.21/ld/testsuite/ld-cris/badgotr1.d b/binutils-2.21/ld/testsuite/ld-cris/badgotr1.d
new file mode 100644
index 0000000..971a631
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/badgotr1.d
@@ -0,0 +1,11 @@
+#source: gotrel1.s
+#as: --pic --underscore --em=criself
+#ld: -m crislinux -shared
+#objdump: -dr
+#error: \A[^\nc][^\n]*o: uses _-prefixed [^\nc]*\n[^\nc][^\n]* failed to merge [^\n]*\n[^\nc][^\n]* no GOT [^\n]*\n[^\nc][^\n]* Bad value\Z
+
+# The error regex above is supposed to not match if we get a
+# SEGV, in which case we'll see "child killed: segmentation
+# violation", supposedly at the beginning (seen) or end (in
+# theory) of it. The input ELF type (with underscores on
+# symbols) mismatches the output type (no underscores).
diff --git a/binutils-2.21/ld/testsuite/ld-cris/comref1.s b/binutils-2.21/ld/testsuite/ld-cris/comref1.s
new file mode 100644
index 0000000..5be25d8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/comref1.s
@@ -0,0 +1,8 @@
+ .text
+y:
+ .comm c1,4,1
+ .comm c2,4,1
+ .comm c3,4,1
+ move.d c1,$r10
+ move.d c2:GOT,$r10
+ move.d c3:PLT,$r10
diff --git a/binutils-2.21/ld/testsuite/ld-cris/cris.exp b/binutils-2.21/ld/testsuite/ld-cris/cris.exp
new file mode 100644
index 0000000..ebe4bff
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/cris.exp
@@ -0,0 +1,56 @@
+# Expect script for ld-cris tests
+# Copyright 2002, 2005, 2007, 2009 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by Hans-Peter Nilsson (hp@axis.com)
+#
+
+if ![istarget cris-*-*] {
+ return
+}
+
+set rd_test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
+
+# First, execute those tests that are named to indicate that they create a
+# DSO. Copy the file from the run_dump_test "tmpdir/dump" to a unique
+# expected name.
+# FIXME: Add option "output: filename" to run_dump_test.
+foreach atest $rd_test_list {
+ # We need to check against runtest_file_p too, or we'd mindlessly copy
+ # the last tmpdir/dump in selective test-runs.
+ if { [string match $srcdir/$subdir/*dso-*.d $atest] \
+ && [runtest_file_p $runtests [file rootname $atest]] } {
+ verbose [file rootname $atest]
+ run_dump_test [file rootname $atest]
+ set cmd "cp tmpdir/dump tmpdir/[file rootname [file tail $atest]].so"
+ send_log "$cmd\n"
+ set cmdret [catch "exec $cmd" comp_output]
+ send_log "$comp_output\n"
+ # FIXME: What if it fails? Need we do something?
+ }
+}
+
+# Then run the ordinary tests. This round, exclude the dso-* tests.
+foreach atest $rd_test_list {
+ # We need to strip the ".d", but can leave the dirname.
+ if { ! [string match $srcdir/$subdir/*dso-*.d $atest] } {
+ verbose [file rootname $atest]
+ run_dump_test [file rootname $atest]
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-cris/def2.d b/binutils-2.21/ld/testsuite/ld-cris/def2.d
new file mode 100644
index 0000000..ff75d88
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/def2.d
@@ -0,0 +1,10 @@
+#source: start1.s
+#source: stabs1.s
+#source: globsymw1.s
+#target: cris-*-*elf* cris-*-*aout*
+#as: --em=crisaout
+#ld: -mcrisaout
+#objdump: -p
+# Just checking that undef2 links correctly when given a symbol.
+.*: file format a\.out-cris
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-cris/def3.d b/binutils-2.21/ld/testsuite/ld-cris/def3.d
new file mode 100644
index 0000000..e1ae3c5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/def3.d
@@ -0,0 +1,10 @@
+#source: start1.s
+#source: stabs1.s
+#source: globsymw1.s
+#target: cris-*-*elf* cris-*-*aout*
+#as: --em=criself
+#ld: -mcriself
+#objdump: -p
+# Just checking that undef3 links correctly when given a symbol.
+.*: file format elf32.*-cris
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-cris/dso-1.s b/binutils-2.21/ld/testsuite/ld-cris/dso-1.s
new file mode 100644
index 0000000..7cf9950
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/dso-1.s
@@ -0,0 +1,8 @@
+ .text
+ .global dsofn
+ .type dsofn,@function
+ .p2align 1
+dsofn:
+ nop
+.Lfe1:
+ .size dsofn,.Lfe1-dsofn
diff --git a/binutils-2.21/ld/testsuite/ld-cris/dso-1b.s b/binutils-2.21/ld/testsuite/ld-cris/dso-1b.s
new file mode 100644
index 0000000..fc7424a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/dso-1b.s
@@ -0,0 +1,4 @@
+ .include "dso-1.s"
+ .symver dsofn,expfn@@TST2
+ .include "init.s"
+ .symver _init,expobj@@TST2
diff --git a/binutils-2.21/ld/testsuite/ld-cris/dso-2.s b/binutils-2.21/ld/testsuite/ld-cris/dso-2.s
new file mode 100644
index 0000000..f7c38a6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/dso-2.s
@@ -0,0 +1,6 @@
+ .text
+ .global export_1
+ .type export_1,@function
+export_1:
+ jump [$r1+dsofn:GOTPLT16]
+ jump [$r1+dsofn:GOTPLT]
diff --git a/binutils-2.21/ld/testsuite/ld-cris/dso-3.s b/binutils-2.21/ld/testsuite/ld-cris/dso-3.s
new file mode 100644
index 0000000..6610504
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/dso-3.s
@@ -0,0 +1,20 @@
+; The visibility definitions here override the default
+; definitions in the object where the symbols are defined. We
+; check STV_HIDDEN and STV_PROTECTED with function and object
+; definition respectively. This is by no means a full coverage,
+; just enough to be a test-case for the bug described in
+; libdso-3.d. Use ld-elfvsb for general visibility tests.
+
+ .hidden expobj
+ .protected expfn
+
+ .text
+ .global globsym
+ .type globsym,@function
+globsym:
+ move.d expfn:GOTOFF,$r3
+ move.d expfn:PLTG,$r3
+ move.d expfn:PLT,$r3
+ move.d expobj:GOTOFF,$r3
+.Lfe1:
+ .size globsym,.Lfe1-globsym
diff --git a/binutils-2.21/ld/testsuite/ld-cris/dso12-pltdis.d b/binutils-2.21/ld/testsuite/ld-cris/dso12-pltdis.d
new file mode 100644
index 0000000..71a1748
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/dso12-pltdis.d
@@ -0,0 +1,54 @@
+#source: expdyn1.s
+#source: dsov32-1.s
+#source: dsov32-2.s
+#as: --pic --no-underscore --march=v32 --em=criself
+#ld: --shared -m crislinux -z nocombreloc
+#objdump: -d
+
+# Check dissassembly of .plt section.
+
+.*: file format elf32-cris
+
+Disassembly of section \.plt:
+
+0+1e4 <dsofn4@plt-0x1a>:
+
+ 1e4: 84e2 subq 4,\$sp
+ 1e6: 0401 addoq 4,\$r0,\$acr
+ 1e8: 7e7a move \$mof,\[\$sp\]
+ 1ea: 3f7a move \[\$acr\],\$mof
+ 1ec: 04f2 addq 4,\$acr
+ 1ee: 6ffa move\.d \[\$acr\],\$acr
+ 1f0: bf09 jump \$acr
+ 1f2: b005 nop
+ \.\.\.
+
+0+1fe <dsofn4@plt>:
+ 1fe: 6f0d 0c00 0000 addo\.d c <dsofn4@plt-0x1f2>,\$r0,\$acr
+ 204: 6ffa move\.d \[\$acr\],\$acr
+ 206: bf09 jump \$acr
+ 208: b005 nop
+ 20a: 3f7e 0000 0000 move 0 <dsofn4@plt-0x1fe>,\$mof
+ 210: bf0e d4ff ffff ba 1e4 <dsofn4@plt-0x1a>
+ 216: b005 nop
+
+0+218 <dsofn@plt>:
+ 218: 6f0d 1000 0000 addo\.d 10 <dsofn4@plt-0x1ee>,\$r0,\$acr
+ 21e: 6ffa move\.d \[\$acr\],\$acr
+ 220: bf09 jump \$acr
+ 222: b005 nop
+ 224: 3f7e 0c00 0000 move c <dsofn4@plt-0x1f2>,\$mof
+ 22a: bf0e baff ffff ba 1e4 <dsofn4@plt-0x1a>
+ 230: b005 nop
+
+Disassembly of section \.text:
+#...
+0+236 <dsofn3>:
+ 236: bfbe e2ff ffff bsr 218 <dsofn@plt>
+ 23c: b005 nop
+
+0+23e <dsofn4>:
+ 23e: 7f0d a620 0000 lapc 22e4 <_GLOBAL_OFFSET_TABLE_>,\$r0
+ 244: 5f0d 1400 addo\.w 0x14,\$r0,\$acr
+ 248: bfbe b6ff ffff bsr 1fe <dsofn4@plt>
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-cris/dsofnf.s b/binutils-2.21/ld/testsuite/ld-cris/dsofnf.s
new file mode 100644
index 0000000..bf0a4fa
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/dsofnf.s
@@ -0,0 +1,7 @@
+ .text
+ .global f
+ .type f,@function
+f:
+ move.d [$r0+dsofn:GOT],$r1
+0:
+ .size f,0b-f
diff --git a/binutils-2.21/ld/testsuite/ld-cris/dsofnf2.s b/binutils-2.21/ld/testsuite/ld-cris/dsofnf2.s
new file mode 100644
index 0000000..fbf2384
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/dsofnf2.s
@@ -0,0 +1,8 @@
+ .text
+ .global f
+ .type f,@function
+f:
+ move.d [$r0+dsofn:GOT],$r1
+ move.d dsofn,$r2
+0:
+ .size f,0b-f
diff --git a/binutils-2.21/ld/testsuite/ld-cris/dsov32-1.s b/binutils-2.21/ld/testsuite/ld-cris/dsov32-1.s
new file mode 100644
index 0000000..07a3e9c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/dsov32-1.s
@@ -0,0 +1,8 @@
+ .text
+ .global dsofn3
+ .type dsofn3,@function
+dsofn3:
+ bsr dsofn:PLT
+ nop
+.Lfe1:
+ .size dsofn3,.Lfe1-dsofn3
diff --git a/binutils-2.21/ld/testsuite/ld-cris/dsov32-2.s b/binutils-2.21/ld/testsuite/ld-cris/dsov32-2.s
new file mode 100644
index 0000000..672f273
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/dsov32-2.s
@@ -0,0 +1,10 @@
+ .text
+ .global dsofn4
+ .type dsofn4,@function
+dsofn4:
+ lapc _GLOBAL_OFFSET_TABLE_,$r0
+ addo.w expobj:GOT16,$r0,$acr
+ bsr dsofn4:PLT
+ nop
+.Lfe1:
+ .size dsofn4,.Lfe1-dsofn4
diff --git a/binutils-2.21/ld/testsuite/ld-cris/dsov32-3.s b/binutils-2.21/ld/testsuite/ld-cris/dsov32-3.s
new file mode 100644
index 0000000..768b06c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/dsov32-3.s
@@ -0,0 +1,8 @@
+ .text
+ .global dsofn5
+ .type dsofn5,@function
+dsofn5:
+ bsr dsofn
+ nop
+.Lfe1:
+ .size dsofn5,.Lfe1-dsofn5
diff --git a/binutils-2.21/ld/testsuite/ld-cris/dsov32-4.s b/binutils-2.21/ld/testsuite/ld-cris/dsov32-4.s
new file mode 100644
index 0000000..d06768a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/dsov32-4.s
@@ -0,0 +1,14 @@
+ .text
+ .global dsofn5
+ .type dsofn5,@function
+dsofn5:
+ bsr localfn
+ nop
+.Lfe:
+ .size dsofn5,.Lfe-dsofn5
+
+ .type localfn,@function
+localfn:
+ nop
+.Lfe1:
+ .size localfn,.Lfe1-localfn
diff --git a/binutils-2.21/ld/testsuite/ld-cris/euwref1.s b/binutils-2.21/ld/testsuite/ld-cris/euwref1.s
new file mode 100644
index 0000000..5d21f4a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/euwref1.s
@@ -0,0 +1,8 @@
+ .text
+y:
+ .weak uw1
+ .weak uw2
+ .weak uw3
+ move.d uw1,$r10
+ move.d uw2:GOT,$r10
+ move.d uw3:PLT,$r10
diff --git a/binutils-2.21/ld/testsuite/ld-cris/expalltst3 b/binutils-2.21/ld/testsuite/ld-cris/expalltst3
new file mode 100644
index 0000000..4ab8d53
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/expalltst3
@@ -0,0 +1 @@
+TST3 { global: *; };
diff --git a/binutils-2.21/ld/testsuite/ld-cris/expdref1.s b/binutils-2.21/ld/testsuite/ld-cris/expdref1.s
new file mode 100644
index 0000000..58faa60
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/expdref1.s
@@ -0,0 +1,6 @@
+ .text
+x:
+ move.d expobj:GOT,$r10
+ move.d expobj:PLT,$r10
+ move.d expfn:GOT,$r10
+ move.d expfn:PLT,$r10
diff --git a/binutils-2.21/ld/testsuite/ld-cris/expdref2.s b/binutils-2.21/ld/testsuite/ld-cris/expdref2.s
new file mode 100644
index 0000000..424e90c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/expdref2.s
@@ -0,0 +1,11 @@
+ .text
+ .global x
+ .type x,@function
+x:
+ move.d expobj2:GOT,$r10
+ move.d expobj2:PLT,$r10
+ move.d expfn2:GOT,$r10
+ move.d expfn2:PLT,$r10
+.Lfe1:
+ .size x,.Lfe1-x
+
diff --git a/binutils-2.21/ld/testsuite/ld-cris/expdref3.s b/binutils-2.21/ld/testsuite/ld-cris/expdref3.s
new file mode 100644
index 0000000..dd35893
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/expdref3.s
@@ -0,0 +1,9 @@
+ .text
+ .global x
+ .type x,@function
+x:
+ move.d expobj2,$r10
+ move.d expfn2,$r10
+.Lfe1:
+ .size x,.Lfe1-x
+
diff --git a/binutils-2.21/ld/testsuite/ld-cris/expdref4.s b/binutils-2.21/ld/testsuite/ld-cris/expdref4.s
new file mode 100644
index 0000000..e639039
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/expdref4.s
@@ -0,0 +1,7 @@
+ .data
+ .global x
+ .type x,@object
+x:
+ .dword expobj2
+.Lfe1:
+ .size x,.Lfe1-x
diff --git a/binutils-2.21/ld/testsuite/ld-cris/expdyn1.d b/binutils-2.21/ld/testsuite/ld-cris/expdyn1.d
new file mode 100644
index 0000000..51d875d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/expdyn1.d
@@ -0,0 +1,14 @@
+#source: expdyn1.s
+#as: --no-underscore --em=criself
+#ld: -m crislinux -export-dynamic tmpdir/libdso-1.so
+#objdump: -T
+
+.*: file format elf32-cris
+
+# Exporting dynamic symbols means objects as well as functions.
+
+DYNAMIC SYMBOL TABLE:
+#...
+00080... g DF .text 0+2 expfn
+00082... g DO .data 0+4 expobj
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-cris/expdyn1.s b/binutils-2.21/ld/testsuite/ld-cris/expdyn1.s
new file mode 100644
index 0000000..646be85
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/expdyn1.s
@@ -0,0 +1,18 @@
+ .data
+ .global expobj
+ .type expobj,@object
+ .size expobj,4
+expobj:
+ .dword 0
+
+ .text
+ .global _start
+_start:
+ nop
+ .global expfn
+expfn:
+ .type expfn,@function
+ nop
+.Lfe1:
+ .size expfn,.Lfe1-expfn
+
diff --git a/binutils-2.21/ld/testsuite/ld-cris/expdyn1w.s b/binutils-2.21/ld/testsuite/ld-cris/expdyn1w.s
new file mode 100644
index 0000000..35d36db
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/expdyn1w.s
@@ -0,0 +1,3 @@
+ .weak expobj
+ .weak expfn
+ .include "expdyn1.s"
diff --git a/binutils-2.21/ld/testsuite/ld-cris/expdyn2.d b/binutils-2.21/ld/testsuite/ld-cris/expdyn2.d
new file mode 100644
index 0000000..6c5faa5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/expdyn2.d
@@ -0,0 +1,16 @@
+#source: expdyn1.s
+#source: expdref1.s --pic
+#as: --no-underscore --em=criself
+#ld: -m crislinux --export-dynamic tmpdir/libdso-1.so
+#objdump: -R
+
+# Programs linked with --export-dynamic threw away .rela.got for exported
+# symbols, but since got reference counter wasn't reset, there was a SEGV
+# trying to generate the .rela.got relocations. In this test, we have an
+# object in the program that has pic-relocations to an exported symbol,
+# but those relocations can be resolved at link-time. We link to a DSO to
+# get dynamic linking.
+
+.*: file format elf32-cris
+
+DYNAMIC RELOCATION RECORDS \(none\)
diff --git a/binutils-2.21/ld/testsuite/ld-cris/expdyn2.s b/binutils-2.21/ld/testsuite/ld-cris/expdyn2.s
new file mode 100644
index 0000000..d184ebc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/expdyn2.s
@@ -0,0 +1,21 @@
+ .data
+ .global __expobj2
+ .type __expobj2,@object
+ .size __expobj2,4
+__expobj2:
+ .dword 0
+ .weak expobj2
+ .set expobj2,__expobj2
+
+ .text
+ .global _start
+_start:
+ nop
+ .global __expfn2
+__expfn2:
+ .type __expfn2,@function
+ nop
+.Lfe1:
+ .size __expfn2,.Lfe1-__expfn2
+ .weak expfn2
+ .set expfn2,__expfn2
diff --git a/binutils-2.21/ld/testsuite/ld-cris/expdyn3.d b/binutils-2.21/ld/testsuite/ld-cris/expdyn3.d
new file mode 100644
index 0000000..34f2a5e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/expdyn3.d
@@ -0,0 +1,12 @@
+#source: expdyn1.s
+#source: expdref1.s --pic
+#source: euwref1.s --pic
+#as: --no-underscore --em=criself
+#ld: -m crislinux --export-dynamic tmpdir/libdso-1.so
+#objdump: -R
+
+# Like expdyn2.d, but also weakly referencing symbols.
+
+.*: file format elf32-cris
+
+DYNAMIC RELOCATION RECORDS \(none\)
diff --git a/binutils-2.21/ld/testsuite/ld-cris/expdyn4.d b/binutils-2.21/ld/testsuite/ld-cris/expdyn4.d
new file mode 100644
index 0000000..e932056
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/expdyn4.d
@@ -0,0 +1,12 @@
+#source: expdyn1.s
+#source: expdref1.s --pic
+#source: comref1.s --pic
+#as: --no-underscore --em=criself
+#ld: -m crislinux --export-dynamic tmpdir/libdso-1.so
+#objdump: -R
+
+# Like expdyn2.d, but referencing COMMON symbols.
+
+.*: file format elf32-cris
+
+DYNAMIC RELOCATION RECORDS \(none\)
diff --git a/binutils-2.21/ld/testsuite/ld-cris/expdyn5.d b/binutils-2.21/ld/testsuite/ld-cris/expdyn5.d
new file mode 100644
index 0000000..5504534
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/expdyn5.d
@@ -0,0 +1,13 @@
+#source: expdyn1.s
+#source: expdref1.s --pic
+#as: --no-underscore --em=criself
+#ld: -m crislinux --export-dynamic tmpdir/libdso-1.so
+#objdump: -s -j .got
+
+# Like expdyn2.d, but testing that the .got contents is correct. There
+# needs to be a .got due to the GOT relocs, but the entry is constant.
+
+.*: file format elf32-cris
+Contents of section \.got:
+ 82244 dc210800 00000000 00000000 bf010800 .*
+ 82254 58220800 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/expdyn6.d b/binutils-2.21/ld/testsuite/ld-cris/expdyn6.d
new file mode 100644
index 0000000..43d04ff
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/expdyn6.d
@@ -0,0 +1,13 @@
+#source: expdyn1.s
+#source: expdref1.s --pic
+#source: euwref1.s --pic
+#as: --no-underscore --em=criself
+#ld: -m crislinux --export-dynamic tmpdir/libdso-1.so
+#objdump: -s -j .got
+
+# Like expdyn5.d, weakly referencing symbols.
+
+.*: file format elf32-cris
+Contents of section \.got:
+ 822a0 38220800 00000000 00000000 00000000 .*
+ 822b0 07020800 b8220800 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/expdyn7.d b/binutils-2.21/ld/testsuite/ld-cris/expdyn7.d
new file mode 100644
index 0000000..7bd91e0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/expdyn7.d
@@ -0,0 +1,13 @@
+#source: expdyn1.s
+#source: expdref1.s --pic
+#source: comref1.s --pic
+#as: --no-underscore --em=criself
+#ld: -m crislinux --export-dynamic tmpdir/libdso-1.so
+#objdump: -s -j .got
+
+# Like expdyn5.d, referencing COMMON symbols.
+
+.*: file format elf32-cris
+Contents of section \.got:
+ 8229c 34220800 00000000 00000000 b8220800 .*
+ 822ac 04020800 b4220800 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/globsym1ref.s b/binutils-2.21/ld/testsuite/ld-cris/globsym1ref.s
new file mode 100644
index 0000000..03d4477
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/globsym1ref.s
@@ -0,0 +1 @@
+ .long globsym1
diff --git a/binutils-2.21/ld/testsuite/ld-cris/globsymw1.s b/binutils-2.21/ld/testsuite/ld-cris/globsymw1.s
new file mode 100644
index 0000000..955014d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/globsymw1.s
@@ -0,0 +1,15 @@
+ .text
+ .stabn 162,0,0,0
+ .global globsym1
+ .type globsym1, @function
+globsym1:
+ .stabd 46,0,0
+ .stabn 68,0,16,LM0-globsym1
+LM0:
+ .long 0
+ .size globsym1, .-globsym1
+ .stabs "",100,0,0,Letext0
+Letext0:
+;# This must be the last line; the point is that the warning symbol
+;# construct is last, but is missing the actual symbol warned about.
+ .stabs "isatty is not implemented and will always fail",30,0,0,0
diff --git a/binutils-2.21/ld/testsuite/ld-cris/globsymw2.s b/binutils-2.21/ld/testsuite/ld-cris/globsymw2.s
new file mode 100644
index 0000000..a9e11ff
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/globsymw2.s
@@ -0,0 +1,16 @@
+ .text
+ .stabn 162,0,0,0
+;# A bit like globsymw1.s but containing a valid, working, stabs
+;# symbol warning construct.
+ .stabs "isatty is not implemented and will always fail",30,0,0,0
+ .stabs "globsym1",1,0,0,0
+ .global globsym1
+ .type globsym1, @function
+globsym1:
+ .stabd 46,0,0
+ .stabn 68,0,16,LM0-globsym1
+LM0:
+ .long 0
+ .size globsym1, .-globsym1
+ .stabs "",100,0,0,Letext0
+Letext0:
diff --git a/binutils-2.21/ld/testsuite/ld-cris/got7.s b/binutils-2.21/ld/testsuite/ld-cris/got7.s
new file mode 100644
index 0000000..c97055e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/got7.s
@@ -0,0 +1,21 @@
+; Just something defining 7 variables @ 4 bytes and requesting GOT
+; entries for each of them.
+
+ .text
+ .global got7fn
+ .type got7fn,@function
+got7fn:
+ .irpc n,1234567
+ move.d got7var\n:GOT,$r10
+ .endr
+.Lfe:
+ .size got7fn,.Lfe-got7fn
+
+ .irpc n,1234567
+ .data
+ .global got7var\n
+ .type got7var\n,@object
+ .size got7var\n,4
+got7var\n:
+ .dword 0
+ .endr
diff --git a/binutils-2.21/ld/testsuite/ld-cris/gotplt1.d b/binutils-2.21/ld/testsuite/ld-cris/gotplt1.d
new file mode 100644
index 0000000..8fcb7b5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/gotplt1.d
@@ -0,0 +1,48 @@
+#source: dso-2.s
+#source: dsofnf2.s
+#source: gotrel1.s
+#as: --pic --no-underscore --em=criself
+#ld: -m crislinux tmpdir/libdso-1.so
+#objdump: -sR
+
+# Make sure we don't merge a PLT-specific entry
+# (R_CRIS_JUMP_SLOT) with a non-PLT-GOT-specific entry
+# (R_CRIS_GLOB_DAT) in an executable, since they may have
+# different contents there. (If we merge them in a DSO it's ok:
+# we make a round-trip to the PLT in the executable if it's
+# referenced there, but that's still perceived as better than
+# having an unnecessary PLT, dynamic reloc and lookup in the
+# DSO.) In the executable, the GOT contents for the non-PLT
+# reloc should be constant.
+
+.*: file format elf32-cris
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00082280 R_CRIS_JUMP_SLOT dsofn
+
+Contents of section .*
+#...
+Contents of section \.rela\.plt:
+ 80190 80220800 0b040000 00000000 .*
+Contents of section \.plt:
+ 8019c fce17e7e 7f0d7822 0800307a 7f0d7c22 .*
+ 801ac 08003009 7f0d8022 08003009 3f7e0000 .*
+ 801bc 00002ffe d8ffffff .*
+Contents of section \.text:
+ 801c4 5f1d0c00 30096f1d 0c000000 30090000 .*
+ 801d4 6f0d1000 0000611a 6f2eb001 08000000 .*
+ 801e4 6f3e70df ffff0000 .*
+Contents of section \.dynamic:
+ 821ec 01000000 01000000 04000000 e4000800 .*
+ 821fc 05000000 5c010800 06000000 0c010800 .*
+ 8220c 0a000000 32000000 0b000000 10000000 .*
+ 8221c 15000000 00000000 03000000 74220800 .*
+ 8222c 02000000 0c000000 14000000 07000000 .*
+ 8223c 17000000 90010800 00000000 00000000 .*
+ 8224c 00000000 00000000 00000000 00000000 .*
+ 8225c 00000000 00000000 00000000 00000000 .*
+ 8226c 00000000 00000000 .*
+Contents of section \.got:
+ 82274 ec210800 00000000 00000000 b8010800 .*
+ 82284 b0010800 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/gotplt2.d b/binutils-2.21/ld/testsuite/ld-cris/gotplt2.d
new file mode 100644
index 0000000..48f1413
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/gotplt2.d
@@ -0,0 +1,37 @@
+#source: dso-2.s
+#source: dsofnf.s
+#source: gotrel1.s
+#as: --pic --no-underscore --em=criself
+#ld: -shared -m crislinux -z nocombreloc
+#objdump: -sR
+
+# Make sure we merge a PLT-specific entry (usually
+# R_CRIS_JUMP_SLOT) with a GOT-specific entry (R_CRIS_GLOB_DAT)
+# in a DSO. It's ok: we make a round-trip to the PLT in the
+# executable if it's referenced there, but that's still
+# perceived as better than having an unnecessary PLT, dynamic
+# reloc and lookup in the DSO.)
+
+.*: file format elf32-cris
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00002230 R_CRIS_GLOB_DAT dsofn
+
+Contents of section .*
+#...
+Contents of section \.rela\.got:
+ 0188 30220000 0a080000 00000000 .*
+Contents of section \.text:
+ 0194 5f1d0c00 30096f1d 0c000000 30090000 .*
+ 01a4 6f0d0c00 0000611a 6f3e88df ffff0000 .*
+Contents of section \.dynamic:
+ 21b4 04000000 94000000 05000000 5c010000 .*
+ 21c4 06000000 cc000000 0a000000 2a000000 .*
+ 21d4 0b000000 10000000 07000000 88010000 .*
+ 21e4 08000000 0c000000 09000000 0c000000 .*
+ 21f4 00000000 00000000 00000000 00000000 .*
+ 2204 00000000 00000000 00000000 00000000 .*
+ 2214 00000000 00000000 00000000 00000000 .*
+Contents of section \.got:
+ 2224 b4210000 00000000 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/gotplt3.d b/binutils-2.21/ld/testsuite/ld-cris/gotplt3.d
new file mode 100644
index 0000000..f4cb4be
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/gotplt3.d
@@ -0,0 +1,35 @@
+#source: dso-2.s
+#source: dsofnf.s
+#source: gotrel1.s
+#source: dso-1.s
+#as: --pic --no-underscore --em=criself
+#ld: -shared -m crislinux -z nocombreloc
+#objdump: -sR
+
+# Like gotplt2, but make sure we merge right when we have a
+# definition of the function too.
+
+.*: file format elf32-cris
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00002234 R_CRIS_GLOB_DAT dsofn
+
+Contents of section .*
+#...
+Contents of section \.rela\.got:
+ 0188 34220000 0a080000 00000000 .*
+Contents of section \.text:
+ 0194 5f1d0c00 30096f1d 0c000000 30090000 .*
+ 01a4 6f0d0c00 0000611a 6f3e84df ffff0000 .*
+ 01b4 0f050000 .*
+Contents of section \.dynamic:
+ 21b8 04000000 94000000 05000000 5c010000 .*
+ 21c8 06000000 cc000000 0a000000 2a000000 .*
+ 21d8 0b000000 10000000 07000000 88010000 .*
+ 21e8 08000000 0c000000 09000000 0c000000 .*
+ 21f8 00000000 00000000 00000000 00000000 .*
+ 2208 00000000 00000000 00000000 00000000 .*
+ 2218 00000000 00000000 00000000 00000000 .*
+Contents of section \.got:
+ 2228 b8210000 00000000 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/gotrel1.s b/binutils-2.21/ld/testsuite/ld-cris/gotrel1.s
new file mode 100644
index 0000000..68f035d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/gotrel1.s
@@ -0,0 +1,4 @@
+ .global _start
+_start:
+localsym:
+ move.d localsym:GOTOFF,$r3
diff --git a/binutils-2.21/ld/testsuite/ld-cris/gotrel2.s b/binutils-2.21/ld/testsuite/ld-cris/gotrel2.s
new file mode 100644
index 0000000..3f98674
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/gotrel2.s
@@ -0,0 +1,5 @@
+ .text
+ .weak undefweak
+ .global _start
+_start:
+ move.d [$r0+undefweak:GOT],$r3
diff --git a/binutils-2.21/ld/testsuite/ld-cris/hiddef1.d b/binutils-2.21/ld/testsuite/ld-cris/hiddef1.d
new file mode 100644
index 0000000..b3bd87d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/hiddef1.d
@@ -0,0 +1,28 @@
+#source: gotrel1.s
+#source: hiddef1.s
+#source: hidrefgotplt1.s
+#ld: -shared -m crislinux
+#as: --pic --no-underscore -I$srcdir/$subdir --em=criself
+#readelf: -S -s -r
+
+# Regression test for mishandling of GOTPLT relocs against a
+# hidden symbol, where the reloc is found after the symbol
+# definition. There should be no PLT, just a single GOT entry
+# from a GOTPLT reloc moved to the .got section. It's hard to
+# check for absence of a .plt section, so we just check the
+# number of symbols and sections. When the number of symbols
+# and sections change, make sure that there's no .plt and that
+# dsofn is hidden (not exported as a dynamic symbol).
+
+There are 11 section headers, starting at offset 0x[0-9a-f]+:
+#...
+ \[[ 0-9]+\] \.got PROGBITS [0-9a-f]+ [0-9a-f]+ 0+10 04 WA 0 0 4
+#...
+Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
+#...
+[0-9a-f]+ 0+c R_CRIS_RELATIVE [0-9a-f]+
+#...
+Symbol table '\.dynsym' contains 6 entries:
+#...
+Symbol table '\.symtab' contains 16 entries:
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-cris/hiddef1.s b/binutils-2.21/ld/testsuite/ld-cris/hiddef1.s
new file mode 100644
index 0000000..ac24c81
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/hiddef1.s
@@ -0,0 +1,2 @@
+ .include "dso-1.s"
+ .hidden dsofn
diff --git a/binutils-2.21/ld/testsuite/ld-cris/hide1 b/binutils-2.21/ld/testsuite/ld-cris/hide1
new file mode 100644
index 0000000..655871d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/hide1
@@ -0,0 +1 @@
+TST1 { global: export_*; local: *; };
diff --git a/binutils-2.21/ld/testsuite/ld-cris/hidedsofns2468 b/binutils-2.21/ld/testsuite/ld-cris/hidedsofns2468
new file mode 100644
index 0000000..ebe3d44
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/hidedsofns2468
@@ -0,0 +1 @@
+TST2 { local: dsofn; dsofn2; dsofn4; dsofn6; dsofn8; };
diff --git a/binutils-2.21/ld/testsuite/ld-cris/hidrefgotplt1.s b/binutils-2.21/ld/testsuite/ld-cris/hidrefgotplt1.s
new file mode 100644
index 0000000..020ff16
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/hidrefgotplt1.s
@@ -0,0 +1,2 @@
+ .text
+ move.d [$r0+dsofn:GOTPLT],$r1
diff --git a/binutils-2.21/ld/testsuite/ld-cris/init.s b/binutils-2.21/ld/testsuite/ld-cris/init.s
new file mode 100644
index 0000000..b65ec44
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/init.s
@@ -0,0 +1,6 @@
+ .global _init
+ .type _init,@function
+_init:
+ nop
+.Lfe3:
+ .size _init,.Lfe3-_init
diff --git a/binutils-2.21/ld/testsuite/ld-cris/ldsym1.d b/binutils-2.21/ld/testsuite/ld-cris/ldsym1.d
new file mode 100644
index 0000000..e8dcd32
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/ldsym1.d
@@ -0,0 +1,20 @@
+# source: expdyn1.s
+# target: cris-*-*elf* cris-*-*aout*
+# as: --em=criself
+# ld: -mcriself
+# objdump: -d
+
+# Note that the linker script symbol __start is set to the same
+# value as _start, and will collate before _start and be chosen
+# as the presentation symbol at disassembly. Anyway, __start
+# shouldn't hinder disassembly by posing as an object symbol.
+
+.*: file format elf32-us-cris
+
+Disassembly of section \.text:
+
+0+ <(___init__start|__start|__Stext)>:
+ 0: 0f05 nop
+
+0+2 <expfn>:
+ 2: 0f05 nop
diff --git a/binutils-2.21/ld/testsuite/ld-cris/libdso-1.d b/binutils-2.21/ld/testsuite/ld-cris/libdso-1.d
new file mode 100644
index 0000000..aa41d4f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/libdso-1.d
@@ -0,0 +1,13 @@
+#source: dso-1.s
+#as: --pic --no-underscore --em=criself
+#ld: --shared -m crislinux
+#objdump: -T
+
+# Just check that we actually got a DSO with the dsofn symbol.
+
+.*: file format elf32-cris
+
+DYNAMIC SYMBOL TABLE:
+#...
+00000[12].[02468ace] g DF .text 0+2 dsofn
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-cris/libdso-10.d b/binutils-2.21/ld/testsuite/ld-cris/libdso-10.d
new file mode 100644
index 0000000..43d96bd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/libdso-10.d
@@ -0,0 +1,37 @@
+#source: dso-1.s
+#as: --pic --no-underscore --march=v32 --em=criself
+#ld: --shared -m crislinux
+#objdump: -p -h
+
+# Sanity check; just an empty GOT.
+
+.*: file format elf32-cris
+
+Program Header:
+ LOAD off 0x0+ vaddr 0x0+ paddr 0x0+ align 2\*\*13
+ filesz 0x0+144 memsz 0x0+144 flags r-x
+ LOAD off 0x0+144 vaddr 0x0+2144 paddr 0x0+2144 align 2\*\*13
+ filesz 0x0+64 memsz 0x0+64 flags rw-
+ DYNAMIC off 0x0+144 vaddr 0x0+2144 paddr 0x0+2144 align 2\*\*2
+ filesz 0x0+58 memsz 0x0+58 flags rw-
+Dynamic Section:
+ HASH.*0x0*94
+ STRTAB.*0x0*120
+ SYMTAB.*0x0*c0
+ STRSZ.*0x0*1f
+ SYMENT.*0x0*10
+private flags = 2: \[v32\]
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.hash 0+2c 0+94 0+94 0+94 2\*\*2
+ CONTENTS, ALLOC, LOAD, READONLY, DATA
+ 1 \.dynsym 0+60 0+c0 0+c0 0+c0 2\*\*2
+ CONTENTS, ALLOC, LOAD, READONLY, DATA
+ 2 \.dynstr 0+1f 0+120 0+120 0+120 2\*\*0
+ CONTENTS, ALLOC, LOAD, READONLY, DATA
+ 3 \.text 0+4 0+140 0+140 0+140 2\*\*1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 4 \.dynamic 0+58 0+2144 0+2144 0+144 2\*\*2
+ CONTENTS, ALLOC, LOAD, DATA
+ 5 \.got 0+c 0+219c 0+219c 0+19c 2\*\*2
+ CONTENTS, ALLOC, LOAD, DATA
diff --git a/binutils-2.21/ld/testsuite/ld-cris/libdso-11.d b/binutils-2.21/ld/testsuite/ld-cris/libdso-11.d
new file mode 100644
index 0000000..dc7b75a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/libdso-11.d
@@ -0,0 +1,27 @@
+#source: dso-1.s
+#source: dsov32-1.s
+#as: --pic --no-underscore --march=v32 --em=criself
+#ld: --shared -m crislinux
+#objdump: -s -T
+
+.*: file format elf32-cris
+
+DYNAMIC SYMBOL TABLE:
+#...
+0+1a0 g DF \.text 0+8 dsofn3
+#...
+0+19c g DF \.text 0+2 dsofn
+#...
+Contents of section \.rela\.plt:
+ 015c 2c220000 0b060000 00000000 .*
+Contents of section \.plt:
+ 0168 84e20401 7e7a3f7a 04f26ffa bf09b005 .*
+ 0178 00000000 00000000 00006f0d 0c000000 .*
+ 0188 6ffabf09 b0053f7e 00000000 bf0ed4ff .*
+ 0198 ffffb005 .*
+Contents of section \.text:
+ 019c b0050000 bfbee2ff ffffb005 .*
+Contents of section \.dynamic:
+#...
+Contents of section \.got:
+ 2220 a8210000 00000000 00000000 8e010000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/libdso-12.d b/binutils-2.21/ld/testsuite/ld-cris/libdso-12.d
new file mode 100644
index 0000000..c8a4f62
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/libdso-12.d
@@ -0,0 +1,51 @@
+#source: expdyn1.s
+#source: dsov32-1.s
+#source: dsov32-2.s
+#as: --pic --no-underscore --march=v32 --em=criself
+#ld: --shared -m crislinux -z nocombreloc
+#objdump: -s -T
+
+# Check for common DSO contents; load of GOT register, branch to
+# function PLT, undefined symbol, GOT reloc.
+
+.*: file format elf32-cris
+
+DYNAMIC SYMBOL TABLE:
+#...
+0+23e g DF \.text 0+12 dsofn4
+0+234 g DF \.text 0+2 expfn
+0+22fc g DO \.data 0+4 expobj
+#...
+0+236 g DF \.text 0+8 dsofn3
+#...
+0+ D \*UND\* 0+ dsofn
+#...
+Contents of section \.rela\.got:
+ 01c0 f8220000 0a040000 00000000 .*
+Contents of section \.rela\.plt:
+ 01cc f0220000 0b020000 00000000 f4220000 .*
+ 01dc 0b0a0000 00000000 .*
+Contents of section \.plt:
+ 01e4 84e20401 7e7a3f7a 04f26ffa bf09b005 .*
+ 01f4 00000000 00000000 00006f0d 0c000000 .*
+ 0204 6ffabf09 b0053f7e 00000000 bf0ed4ff .*
+ 0214 ffffb005 6f0d1000 00006ffa bf09b005 .*
+ 0224 3f7e0c00 0000bf0e baffffff b005 .*
+Contents of section \.text:
+ 0232 b005b005 bfbee2ff ffffb005 7f0da620 .*
+ 0242 00005f0d 1400bfbe b6ffffff b0050000 .*
+Contents of section \.dynamic:
+ 2254 04000000 94000000 05000000 84010000 .*
+ 2264 06000000 d4000000 0a000000 3a000000 .*
+ 2274 0b000000 10000000 03000000 e4220000 .*
+ 2284 02000000 18000000 14000000 07000000 .*
+ 2294 17000000 cc010000 07000000 c0010000 .*
+ 22a4 08000000 0c000000 09000000 0c000000 .*
+ 22b4 00000000 00000000 00000000 00000000 .*
+ 22c4 00000000 00000000 00000000 00000000 .*
+ 22d4 00000000 00000000 00000000 00000000 .*
+Contents of section \.got:
+ 22e4 54220000 00000000 00000000 0a020000 .*
+ 22f4 24020000 00000000 .*
+Contents of section \.data:
+ 22fc 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/libdso-12b.d b/binutils-2.21/ld/testsuite/ld-cris/libdso-12b.d
new file mode 100644
index 0000000..87506ed
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/libdso-12b.d
@@ -0,0 +1,50 @@
+#source: expdyn1.s
+#source: dsov32-1.s
+#source: dsov32-2.s
+#as: --pic --no-underscore --march=v32 --em=criself
+#ld: --shared -m crislinux
+#objdump: -s -T
+
+# Like libdso-12.d but without -z nocombreloc.
+
+.*: file format elf32-cris
+
+DYNAMIC SYMBOL TABLE:
+#...
+0+23e g DF \.text 0+12 dsofn4
+0+234 g DF \.text 0+2 expfn
+0+22fc g DO \.data 0+4 expobj
+#...
+0+236 g DF \.text 0+8 dsofn3
+#...
+0+ D \*UND\* 0+ dsofn
+#...
+Contents of section \.rela\.dyn:
+ 01c0 f8220000 0a040000 00000000 .*
+Contents of section \.rela\.plt:
+ 01cc f0220000 0b020000 00000000 f4220000 .*
+ 01dc 0b0a0000 00000000 .*
+Contents of section \.plt:
+ 01e4 84e20401 7e7a3f7a 04f26ffa bf09b005 .*
+ 01f4 00000000 00000000 00006f0d 0c000000 .*
+ 0204 6ffabf09 b0053f7e 00000000 bf0ed4ff .*
+ 0214 ffffb005 6f0d1000 00006ffa bf09b005 .*
+ 0224 3f7e0c00 0000bf0e baffffff b005 .*
+Contents of section \.text:
+ 0232 b005b005 bfbee2ff ffffb005 7f0da620 .*
+ 0242 00005f0d 1400bfbe b6ffffff b0050000 .*
+Contents of section \.dynamic:
+ 2254 04000000 94000000 05000000 84010000 .*
+ 2264 06000000 d4000000 0a000000 3a000000 .*
+ 2274 0b000000 10000000 03000000 e4220000 .*
+ 2284 02000000 18000000 14000000 07000000 .*
+ 2294 17000000 cc010000 07000000 c0010000 .*
+ 22a4 08000000 0c000000 09000000 0c000000 .*
+ 22b4 00000000 00000000 00000000 00000000 .*
+ 22c4 00000000 00000000 00000000 00000000 .*
+ 22d4 00000000 00000000 00000000 00000000 .*
+Contents of section \.got:
+ 22e4 54220000 00000000 00000000 0a020000 .*
+ 22f4 24020000 00000000 .*
+Contents of section \.data:
+ 22fc 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/libdso-12c.d b/binutils-2.21/ld/testsuite/ld-cris/libdso-12c.d
new file mode 100644
index 0000000..37eab56
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/libdso-12c.d
@@ -0,0 +1,41 @@
+#source: expdyn1.s
+#source: dsov32-1.s
+#source: dsov32-2.s
+#source: dso-1.s
+#as: --pic --no-underscore --march=v32 --em=criself
+#ld: --shared -m crislinux --version-script $srcdir/$subdir/hidedsofns2468
+#objdump: -s -T
+
+# Like libdso-12b.d, but dsofn is defined and the two called functions
+# are forced local using a linker script. There should just be the
+# GOT relocation for expobj in the DSO.
+
+.*: file format elf32-cris
+
+DYNAMIC SYMBOL TABLE:
+#...
+0+202 g[ ]+DF \.text 0+2 Base[ ]+expfn
+0+22bc g[ ]+DO \.data 0+4 Base[ ]+expobj
+#...
+0+204 g[ ]+DF \.text 0+8 Base[ ]+dsofn3
+#...
+Contents of section \.rela\.dyn:
+ 01f4 b8220000 0a040000 00000000 .*
+Contents of section \.text:
+ 0200 b005b005 bfbe1c00 0000b005 7f0da020 .*
+ 0210 00005f0d 0c00bfbe f6ffffff b0050000 .*
+ 0220 b0050000 .*
+Contents of section .dynamic:
+ 2224 04000000 94000000 05000000 70010000 .*
+ 2234 06000000 d0000000 0a000000 37000000 .*
+ 2244 0b000000 10000000 07000000 f4010000 .*
+ 2254 08000000 0c000000 09000000 0c000000 .*
+ 2264 fcffff6f bc010000 fdffff6f 02000000 .*
+ 2274 f0ffff6f a8010000 00000000 00000000 .*
+ 2284 00000000 00000000 00000000 00000000 .*
+ 2294 00000000 00000000 00000000 00000000 .*
+ 22a4 00000000 00000000 .*
+Contents of section \.got:
+ 22ac 24220000 00000000 00000000 00000000 .*
+Contents of section \.data:
+ 22bc 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/libdso-13.d b/binutils-2.21/ld/testsuite/ld-cris/libdso-13.d
new file mode 100644
index 0000000..4e66a5f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/libdso-13.d
@@ -0,0 +1,30 @@
+#source: dso-1.s
+#source: dsov32-3.s
+#as: --pic --no-underscore --march=v32 --em=criself
+#ld: --shared -m crislinux -z nocombreloc
+#readelf: -d -r
+#warning: relocation R_CRIS_32_PCREL should not be used in a shared object; recompile with -fPIC
+
+# Check that a TEXTREL reloc is correctly generated for PCREL
+# relocations against global symbols.
+# FIXME: Have a textrel-enabling(-disabling) linker option.
+# (Warning always generated unless [other option] warnings are
+# generally disabled.) Split out the expected readelf output
+# into a separate test using that option.
+
+Dynamic section at offset 0x[0-9a-f][0-9a-f][0-9a-f] contains 10 entries:
+ Tag[ ]+Type[ ]+Name/Value
+ 0x0+4 \(HASH\)[ ]+0x94
+ 0x0+5 \(STRTAB\)[ ]+0x[12][0-9a-f][0-9a-f]
+ 0x0+6 \(SYMTAB\)[ ]+0x[0-9a-f][0-9a-f]
+ 0x0+a \(STRSZ\)[ ]+38 \(bytes\)
+ 0x0+b \(SYMENT\)[ ]+16 \(bytes\)
+ 0x0+7 \(RELA\)[ ]+0x[12][0-9a-f][0-9a-f]
+ 0x0+8 \(RELASZ\)[ ]+12 \(bytes\)
+ 0x0+9 \(RELAENT\)[ ]+12 \(bytes\)
+ 0x0+16 \(TEXTREL\)[ ]+0x0
+ 0x0+ \(NULL\)[ ]+0x0
+
+Relocation section '\.rela\.text' at offset 0x[12][0-9a-f][0-9a-f] contains 1 entries:
+ Offset[ ]+Info[ ]+Type[ ]+Sym\.Value Sym\. Name \+ Addend
+0+[12][0-9a-f][0-9a-f] 0+[0-9a-f]06 R_CRIS_32_PCREL[ ]+0+[0-f]+[ ]+dsofn \+ 6
diff --git a/binutils-2.21/ld/testsuite/ld-cris/libdso-13b.d b/binutils-2.21/ld/testsuite/ld-cris/libdso-13b.d
new file mode 100644
index 0000000..cd6f4e2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/libdso-13b.d
@@ -0,0 +1,23 @@
+#source: dso-1.s
+#source: dsov32-3.s
+#as: --pic --no-underscore --march=v32 --em=criself
+#ld: --shared -m crislinux --version-script $srcdir/$subdir/hidedsofns2468
+#readelf: -d -r
+
+# Like libdso-13.d, but without -z nocombreloc and with a version
+# script hiding the function called pcrel-without-plt. There should
+# be no warning, no relocations in the output and no TEXTREL marking.
+
+Dynamic section at offset 0x1b0 contains 9 entries:
+ Tag Type Name/Value
+ 0x00000004 \(HASH\) .*
+ 0x00000005 \(STRTAB\) .*
+ 0x00000006 \(SYMTAB\) .*
+ 0x0000000a \(STRSZ\) .*
+ 0x0000000b \(SYMENT\) .*
+ 0x6ffffffc \(VERDEF\) .*
+ 0x6ffffffd \(VERDEFNUM\) .*
+ 0x6ffffff0 \(VERSYM\) .*
+ 0x00000000 \(NULL\) 0x0
+
+There are no relocations in this file.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/libdso-14.d b/binutils-2.21/ld/testsuite/ld-cris/libdso-14.d
new file mode 100644
index 0000000..c0a20e8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/libdso-14.d
@@ -0,0 +1,19 @@
+#source: dso-1.s
+#source: dsov32-4.s
+#as: --pic --no-underscore --march=v32 --em=criself
+#ld: --shared -m crislinux
+#readelf: -d -r
+
+# Checking that a bsr to a non-PLT-decorated nonvisible function
+# doesn't make the DSO textrel.
+
+Dynamic section at offset 0x16c contains 6 entries:
+ Tag[ ]+Type[ ]+Name/Value
+ 0x0+4 \(HASH\)[ ]+0x94
+ 0x0+5 \(STRTAB\)[ ]+0x134
+ 0x0+6 \(SYMTAB\)[ ]+0xc4
+ 0x0+a \(STRSZ\)[ ]+38 \(bytes\)
+ 0x0+b \(SYMENT\)[ ]+16 \(bytes\)
+ 0x0+ \(NULL\)[ ]+0x0
+
+There are no relocations in this file.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/libdso-15.d b/binutils-2.21/ld/testsuite/ld-cris/libdso-15.d
new file mode 100644
index 0000000..ce57e97
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/libdso-15.d
@@ -0,0 +1,24 @@
+#source: expdyn2.s
+#as: --pic --no-underscore --em=criself -I$srcdir/$subdir
+#ld: --shared -m crislinux --version-script $srcdir/$subdir/expalltst3
+#objdump: -s -T
+
+# A DSO that has two versioned symbols, each with a weak alias.
+# Each symbol is versioned.
+
+.*: file format elf32-cris
+
+DYNAMIC SYMBOL TABLE:
+#...
+0+2288 g[ ]+DO .data[ ]+0+4 TST3[ ]+__expobj2
+0+20a g[ ]+DF .text[ ]+0+2 TST3[ ]+__expfn2
+0+20a w[ ]+DF .text[ ]+0+2 TST3[ ]+expfn2
+0+2288 w[ ]+DO .data[ ]+0+4 TST3[ ]+expobj2
+#...
+Contents of section .text:
+ 0208 0f050f05 .*
+#...
+Contents of section .got:
+ 227c 0c220000 00000000 00000000 .*
+Contents of section .data:
+ 2288 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/libdso-15b.d b/binutils-2.21/ld/testsuite/ld-cris/libdso-15b.d
new file mode 100644
index 0000000..308b110
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/libdso-15b.d
@@ -0,0 +1,38 @@
+#source: expdref2.s
+#as: --pic --no-underscore --em=criself
+#ld: --shared -m crislinux
+#ld_after_inputfiles: tmpdir/libdso-15.so
+#objdump: -s -T
+
+# A DSO that refers to two symbols in another DSO with
+# GOT/PLT-generating relocs, using weak aliases where the strong
+# definition is also in the other DSO.
+# There was a bug causing GOT markups to be during symbol handling,
+# with a newly added assertion failure and a reloc turned R_CRIS_NONE.
+# The dynamic __expobj2 entry is unused and seems spurious, or there
+# should at least be a similar __expfn2 reference
+
+.*: file format elf32-cris
+
+DYNAMIC SYMBOL TABLE:
+#...
+0+[ ]+DO \*UND\*[ ]+0+ TST3[ ]+__expobj2
+#...
+0+[ ]+DO \*UND\*[ ]+0+ TST3[ ]+expobj2
+0+[ ]+DF \*UND\*[ ]+0+ TST3[ ]+expfn2
+#...
+Contents of section .rela.dyn:
+ 01d4 fc220000 0a040000 00000000 00230000 .*
+ 01e4 0a050000 00000000 .*
+Contents of section .plt:
+ 01ec fce17e7e 0401307a 08013009 00000000 .*
+ 01fc 00000000 6f0d0c00 00003009 3f7e0000 .*
+ 020c 00002ffe ecffffff 6f0d1000 00003009 .*
+ 021c 3f7e0000 00002ffe ecffffff .*
+Contents of section .text:
+ 0228 6fae0c00 00006fae ccffffff 6fae1000 .*
+ 0238 00006fae d4ffffff .*
+#...
+Contents of section .got:
+ 22f0 40220000 00000000 00000000 00000000 .*
+ 2300 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/libdso-1b.d b/binutils-2.21/ld/testsuite/ld-cris/libdso-1b.d
new file mode 100644
index 0000000..9ad2143
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/libdso-1b.d
@@ -0,0 +1,15 @@
+#source: dso-1b.s
+#as: --pic --no-underscore --em=criself -I$srcdir/$subdir
+#ld: --shared -m crislinux --version-script $srcdir/$subdir/hidedsofns2468
+#objdump: -T
+
+# Like libdso-1, but export the function as expfn@@TST2 and another
+# function as expobj@@TST2.
+
+.*: file format elf32-cris
+
+DYNAMIC SYMBOL TABLE:
+#...
+00000[12].[02468ace] g DF .text 0+2[ ]+TST2[ ]+expobj
+00000[12].[02468ace] g DF .text 0+2[ ]+TST2[ ]+expfn
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-cris/libdso-1c.d b/binutils-2.21/ld/testsuite/ld-cris/libdso-1c.d
new file mode 100644
index 0000000..066d5e2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/libdso-1c.d
@@ -0,0 +1,35 @@
+#source: expdref1.s
+#as: --pic --no-underscore --em=criself -I$srcdir/$subdir
+#ld: --shared -m crislinux
+#ld_after_inputfiles: tmpdir/libdso-1b.so
+#objdump: -s -T
+
+# A DSO linked to another DSO that has two versioned symbols, to which
+# this DSO refers with two relocs each, a GOT and a PLT reference.
+# There was a bug such that GOT markups were lost, resulting in wrong
+# offsets into the GOT, with a tell-tale sign being one or more
+# R_CRIS_NONE relocs. There should be two GOT relocs here, one each
+# for the symbols.
+
+.*: file format elf32-cris
+
+DYNAMIC SYMBOL TABLE:
+#...
+0+[ ]+DF \*UND\* 0+[ ]+TST2[ ]+expobj
+0+[ ]+DF \*UND\* 0+[ ]+TST2[ ]+expfn
+#...
+Contents of section .rela.dyn:
+ 01a4 cc220000 0a030000 00000000 d0220000 .*
+ 01b4 0a040000 00000000 .*
+Contents of section .plt:
+ 01bc fce17e7e 0401307a 08013009 00000000 .*
+ 01cc 00000000 6f0d0c00 00003009 3f7e0000 .*
+ 01dc 00002ffe ecffffff 6f0d1000 00003009 .*
+ 01ec 3f7e0000 00002ffe ecffffff .*
+Contents of section .text:
+ 01f8 6fae0c00 00006fae ccffffff 6fae1000 .*
+ 0208 00006fae d4ffffff .*
+#...
+Contents of section .got:
+ 22c0 10220000 00000000 00000000 00000000 .*
+ 22d0 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/libdso-1d.d b/binutils-2.21/ld/testsuite/ld-cris/libdso-1d.d
new file mode 100644
index 0000000..47721de
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/libdso-1d.d
@@ -0,0 +1,36 @@
+#source: expdref1.s
+#source: expdyn1w.s
+#as: --pic --no-underscore --em=criself -I$srcdir/$subdir
+#ld: --shared -m crislinux
+#ld_after_inputfiles: tmpdir/libdso-1b.so
+#objdump: -s -T
+
+# A DSO linked to another DSO that has two versioned symbols, to which
+# this DSO refers with two relocs each, a GOT and a PLT reference.
+# This DSO has weak definitions of those symbols.
+
+.*: file format elf32-cris
+
+DYNAMIC SYMBOL TABLE:
+#...
+0+1f2 w DF .text 0+2 expfn
+0+22a0 w DO .data 0+4 expobj
+#...
+Contents of section .rela.dyn:
+ 0184 98220000 0a020000 00000000 9c220000 .*
+ 0194 0a030000 00000000 .*
+Contents of section .plt:
+ 019c fce17e7e 0401307a 08013009 00000000 .*
+ 01ac 00000000 6f0d0c00 00003009 3f7e0000 .*
+ 01bc 00002ffe ecffffff 6f0d1000 00003009 .*
+ 01cc 3f7e0000 00002ffe ecffffff .*
+Contents of section .text:
+ 01d8 6fae1000 00006fae e0ffffff 6fae0c00 .*
+ 01e8 00006fae c0ffffff 0f050f05 .*
+Contents of section .dynamic:
+#...
+Contents of section .got:
+ 228c f4210000 00000000 00000000 00000000 .*
+ 229c 00000000 .*
+Contents of section .data:
+ 22a0 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/libdso-2.d b/binutils-2.21/ld/testsuite/ld-cris/libdso-2.d
new file mode 100644
index 0000000..165e222
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/libdso-2.d
@@ -0,0 +1,58 @@
+#source: dso-1.s
+#source: dso-2.s
+#as: --pic --no-underscore --em=criself
+#ld: --shared -m crislinux --version-script $srcdir/$subdir/hide1
+#readelf: -S -s -r
+
+# Use "dsofn" from dso-1 in a GOTPLT reloc, but hide it in a
+# version script. This will change the incoming GOTPLT reloc to
+# instead be a (local) GOT reloc. There are no other .rela.got
+# entries. This formerly SEGV:ed because .rela.got was created
+# too late to have it mapped to an output section.
+
+There are 13 section headers.*
+#...
+ +\[ 1\] \.hash +HASH +.*
+ +\[ 2\] \.dynsym +DYNSYM +.*
+ +\[ 3\] \.dynstr +STRTAB +.*
+ +\[ 4\] \.gnu\.version +VERSYM +.*
+ +\[ 5\] \.gnu\.version_d +VERDEF +.*
+ +\[ 6\] \.rela\.dyn +RELA +.*
+ +\[ 7\] \.text +PROGBITS .*
+ +\[ 8\] \.dynamic +DYNAMIC +.*
+ +\[ 9\] \.got +PROGBITS .*
+ +\[10\] \.shstrtab +STRTAB +.*
+ +\[11\] \.symtab +SYMTAB +.*
+ +\[12\] \.strtab +STRTAB +.*
+#...
+Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
+#...
+00002[12][0-9a-f][048c] +0000000c R_CRIS_RELATIVE +00000150
+#...
+Symbol table '\.dynsym' contains 4 entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +0: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND
+ +1: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +7
+ +2: 0+ +0 +OBJECT +GLOBAL +DEFAULT +ABS TST1
+ +3: 0+154 +0 +FUNC +GLOBAL +DEFAULT +7 export_1@@TST1
+
+Symbol table '\.symtab' contains 18 entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +0: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND
+ +1: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +1
+ +2: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +2
+ +3: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +3
+ +4: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +4
+ +5: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +5
+ +6: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +6
+ +7: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +7
+ +8: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +8
+ +9: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +9
+ +10: 0+2..[046c] +0 +OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC
+ +11: 0+2..[046c] +0 +NOTYPE +LOCAL +DEFAULT +ABS __bss_start
+ +12: 0+2..[046c] +0 +NOTYPE +LOCAL +DEFAULT +ABS _edata
+ +13: 0+2..[046c] +0 +OBJECT +LOCAL +DEFAULT +ABS _GLOBAL_OFFSET_TABLE_
+ +14: 0+2..[046c] +0 +NOTYPE +LOCAL +DEFAULT +ABS _end
+ +15: 0+150 +2 +FUNC +LOCAL +DEFAULT +7 dsofn
+ +16: 0+ +0 +OBJECT +GLOBAL +DEFAULT +ABS TST1
+ +17: 0+154 +0 +FUNC +GLOBAL +DEFAULT +7 export_1
diff --git a/binutils-2.21/ld/testsuite/ld-cris/libdso-3.d b/binutils-2.21/ld/testsuite/ld-cris/libdso-3.d
new file mode 100644
index 0000000..9e18c59
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/libdso-3.d
@@ -0,0 +1,14 @@
+#source: expdyn1.s
+#source: dso-3.s
+#as: --pic --no-underscore --em=criself
+#ld: --shared -m crislinux
+#objdump: -R
+
+# GOTOFF relocs against global symbols with non-default
+# visibility got a linker error. (A non-default visibility is
+# to be treated as a local definition for the reloc.) We also
+# make sure we don't get unnecessary dynamic relocations.
+
+.*: file format elf32-cris
+
+DYNAMIC RELOCATION RECORDS \(none\)
diff --git a/binutils-2.21/ld/testsuite/ld-cris/libdso-4.d b/binutils-2.21/ld/testsuite/ld-cris/libdso-4.d
new file mode 100644
index 0000000..b7cc840
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/libdso-4.d
@@ -0,0 +1,11 @@
+#source: dso-2.s
+#as: --pic --no-underscore --em=criself
+#ld: --shared -m crislinux
+#objdump: -T
+
+# DSO with an undef symbol "dsofn". See undef1.d.
+
+.*: file format elf32-cris
+#...
+0+ D \*UND\* 0+ dsofn
+
diff --git a/binutils-2.21/ld/testsuite/ld-cris/locref1.d b/binutils-2.21/ld/testsuite/ld-cris/locref1.d
new file mode 100644
index 0000000..ac26b28
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/locref1.d
@@ -0,0 +1,22 @@
+#as: --no-underscore --pic --em=criself
+#source: expdyn1.s
+#source: locref1.s
+#ld: -m crislinux
+#objdump: -dt
+
+# Referencing a "normal" (non-hidden) symbol with a local-only PIC
+# relocation is ok when building an executable.
+
+.*: file format elf32-cris
+
+SYMBOL TABLE:
+#...
+0+82084 l O \.got 0+ _GLOBAL_OFFSET_TABLE_
+0+80076 g F \.text 0+2 expfn
+0+82090 g O \.data 0+4 expobj
+#...
+Disassembly of section \.text:
+#...
+0+80078 <y>:
+ 80078: 6fae f2df ffff .*
+ 8007e: 6fbe 0c00 0000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/locref1.s b/binutils-2.21/ld/testsuite/ld-cris/locref1.s
new file mode 100644
index 0000000..7a29841
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/locref1.s
@@ -0,0 +1,3 @@
+y:
+ move.d expfn:GOTOFF,$r10
+ move.d expobj:GOTOFF,$r11
diff --git a/binutils-2.21/ld/testsuite/ld-cris/locref2.d b/binutils-2.21/ld/testsuite/ld-cris/locref2.d
new file mode 100644
index 0000000..735b10e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/locref2.d
@@ -0,0 +1,22 @@
+#as: --no-underscore --pic --em=criself
+#source: gotrel1.s
+#source: locref2.s
+#ld: -m crislinux
+#objdump: -dt
+
+# Referencing an undefined weak (non-hidden) symbol with a local-only
+# PIC relocation is ok when building an executable.
+
+.*: file format elf32-cris
+
+SYMBOL TABLE:
+#...
+0+82088 l O \.got 0+ _GLOBAL_OFFSET_TABLE_
+0+ w \*UND\* 0+ expfn
+0+ w \*UND\* 0+ expobj
+#...
+Disassembly of section \.text:
+#...
+0+8007c <y>:
+ 8007c: 6fae 78df f7ff .*
+ 80082: 6fbe 78df f7ff .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/locref2.s b/binutils-2.21/ld/testsuite/ld-cris/locref2.s
new file mode 100644
index 0000000..3b407a6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/locref2.s
@@ -0,0 +1,5 @@
+ .weak expfn
+ .weak expobj
+y:
+ move.d expfn:GOTOFF,$r10
+ move.d expobj:GOTOFF,$r11
diff --git a/binutils-2.21/ld/testsuite/ld-cris/move-1.s b/binutils-2.21/ld/testsuite/ld-cris/move-1.s
new file mode 100644
index 0000000..c023285
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/move-1.s
@@ -0,0 +1,3 @@
+ .text
+localsym:
+ moveq 1,$r10
diff --git a/binutils-2.21/ld/testsuite/ld-cris/nodyn4.d b/binutils-2.21/ld/testsuite/ld-cris/nodyn4.d
new file mode 100644
index 0000000..c1af092
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/nodyn4.d
@@ -0,0 +1,19 @@
+#source: expdyn1.s
+#source: expdref1.s --pic
+#source: comref1.s --pic
+#as: --no-underscore --em=criself
+#ld: -m crislinux
+#readelf: -l
+
+# Like expdyn4.d, but no --export-dynamic. Got a BFD_ASSERT at one time.
+# Check that we get the expected sections.
+
+#...
+There are 2 program headers, .*
+#...
+ LOAD [0-9a-fx ]+ R E 0x2000
+ LOAD [0-9a-fx ]+ RW 0x2000
+#...
+ 00 \.text[ ]*
+ 01 \.got \.data \.bss[ ]*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-cris/nodyn5.d b/binutils-2.21/ld/testsuite/ld-cris/nodyn5.d
new file mode 100644
index 0000000..28b581e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/nodyn5.d
@@ -0,0 +1,13 @@
+#source: expdyn1.s
+#source: expdref1.s --pic
+#source: comref1.s --pic
+#as: --no-underscore --em=criself
+#ld: -m crislinux
+#objdump: -s -j .got
+
+# Like nodyn4.d, but checking .got contents.
+
+.*: file format elf32-cris
+Contents of section \.got:
+ 820a4 00000000 00000000 00000000 c0200800 .*
+ 820b4 76000800 bc200800 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/noglob1.d b/binutils-2.21/ld/testsuite/ld-cris/noglob1.d
new file mode 100644
index 0000000..49ca3b6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/noglob1.d
@@ -0,0 +1,9 @@
+#ld:
+#target: cris-*-*elf* cris-*-*aout*
+#objdump: -p
+
+# Check that we can link an object that doesn't have any global symbols;
+# where elf_sym_hashes(bfd) is NULL.
+
+.*: file format .*-cris
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-cris/noglob1.s b/binutils-2.21/ld/testsuite/ld-cris/noglob1.s
new file mode 100644
index 0000000..62111bf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/noglob1.s
@@ -0,0 +1,4 @@
+; See noglob1.d
+ .text
+x:
+ move.d .,$r0
diff --git a/binutils-2.21/ld/testsuite/ld-cris/noov.d b/binutils-2.21/ld/testsuite/ld-cris/noov.d
new file mode 100644
index 0000000..c591583
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/noov.d
@@ -0,0 +1,13 @@
+#target: cris-*-*elf*
+#ld: --section-start=.text=0xc0010000
+#objdump: -s -j .text
+
+# Check that we don't get a "relocation truncated to fit", when a
+# relocation would overflow if it hadn't been wrapping. We always
+# want 32-bit-wrapping on a 32-bit target for the benefit of Linux
+# address-mapping macros.
+
+.*: file format elf32.*-cris
+
+Contents of section \.text:
+ c0010000 04200100 00200100 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/noov.s b/binutils-2.21/ld/testsuite/ld-cris/noov.s
new file mode 100644
index 0000000..88e803f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/noov.s
@@ -0,0 +1,14 @@
+ .text
+ ; Test that this works both with a symbol defined in a section...
+ .dword __Edata+0x40000000
+
+ ; ...as well as absolute symbol (defined outside sections in the
+ ; linker script).
+ .dword __Sdata+0x40000000
+
+ .data
+ ; Make sure we get the same section alignment for *-elf as for *-linux*.
+ .balign 0x2000
+
+ ; Make .data non-empty.
+ .dword 0
diff --git a/binutils-2.21/ld/testsuite/ld-cris/pcrelcp-1.d b/binutils-2.21/ld/testsuite/ld-cris/pcrelcp-1.d
new file mode 100644
index 0000000..95fb235
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/pcrelcp-1.d
@@ -0,0 +1,34 @@
+#as: --no-underscore --em=criself
+#ld: -shared -m crislinux -z nocombreloc
+#ld_after_inputfiles: tmpdir/libdso-1b.so
+#warning: \A[^\n]*\.o, section `.text', to symbol `expfn@@TST2':\n
+#warning: [^\n]*recompile with -fPIC\Z
+#readelf: -a
+
+# Building a DSO with (unrecommended) non-pic pc-relative references
+# to a versioned symbol in a library got caught by an assert in
+# elf_cris_copy_indirect_symbol wherein the list of pc-relative
+# references wasn't merged, but simply asserted to be NULL before
+# copied to, on the merged-to (direct) symbol. For versioned symbols,
+# there was an "extra" copy made, to make a base-version symbol, where
+# the copied-from pc-relative list was NULL but the copied-to symbol
+# already had a list merged.
+
+# The list was used to emit warning messages, but incorrectly held the
+# relocation section for the reference, resulting in warnings being
+# emitted for any section with a pc-relative relocation.
+
+# The test checks that there's a warning message only for the
+# read-only sections section (.text) (not the read-write sections),
+# that the correct number of relocations is emitted and we also check
+# for the TEXTREL dynamic marker.
+
+#...
+ 0x00000016 \(TEXTREL\)[ ]+0x0
+#...
+Relocation section '\.rela\.text' at offset .* contains 4 entries:
+#...
+Relocation section '\.rela\.data' at offset .* contains 8 entries:
+#...
+Relocation section '.rela.data2' at offset .* contains 16 entries:
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-cris/pcrelcp-1.s b/binutils-2.21/ld/testsuite/ld-cris/pcrelcp-1.s
new file mode 100644
index 0000000..d1bcbee
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/pcrelcp-1.s
@@ -0,0 +1,50 @@
+ .symver x,expfn@TST2 ; .symver required to make @ part of name.
+ .global _start
+ .type _start,@function
+_start:
+ .dword 0,0,0,0
+ .reloc 0,R_CRIS_32_PCREL,expfn
+ .reloc 4,R_CRIS_32_PCREL,expfn
+ .reloc 8,R_CRIS_32_PCREL,x
+ .reloc 12,R_CRIS_32_PCREL,x
+.Lfe3:
+ .size _start,.Lfe3-_start
+
+ .data
+ .global tab1
+ .type tab1,@object
+tab1:
+ .dword 0,0,0,0,0,0,0,0
+ .reloc 0,R_CRIS_32_PCREL,expfn
+ .reloc 4,R_CRIS_32_PCREL,expfn
+ .reloc 8,R_CRIS_32_PCREL,expfn
+ .reloc 12,R_CRIS_32_PCREL,expfn
+ .reloc 16,R_CRIS_32_PCREL,x
+ .reloc 20,R_CRIS_32_PCREL,x
+ .reloc 24,R_CRIS_32_PCREL,x
+ .reloc 28,R_CRIS_32_PCREL,x
+ .size tab1,.-tab1
+
+ .section .data2,"aw",@progbits
+ .global tab2
+ .type tab2,@object
+tab2:
+ .dword 0,0,0,0,0,0,0,0
+ .dword 0,0,0,0,0,0,0,0
+ .reloc 0,R_CRIS_32_PCREL,expfn
+ .reloc 4,R_CRIS_32_PCREL,expfn
+ .reloc 8,R_CRIS_32_PCREL,expfn
+ .reloc 12,R_CRIS_32_PCREL,expfn
+ .reloc 16,R_CRIS_32_PCREL,expfn
+ .reloc 20,R_CRIS_32_PCREL,expfn
+ .reloc 24,R_CRIS_32_PCREL,expfn
+ .reloc 28,R_CRIS_32_PCREL,expfn
+ .reloc 32,R_CRIS_32_PCREL,x
+ .reloc 36,R_CRIS_32_PCREL,x
+ .reloc 40,R_CRIS_32_PCREL,x
+ .reloc 44,R_CRIS_32_PCREL,x
+ .reloc 48,R_CRIS_32_PCREL,x
+ .reloc 52,R_CRIS_32_PCREL,x
+ .reloc 56,R_CRIS_32_PCREL,x
+ .reloc 60,R_CRIS_32_PCREL,x
+ .size tab1,.-tab2
diff --git a/binutils-2.21/ld/testsuite/ld-cris/pic-gc-72.d b/binutils-2.21/ld/testsuite/ld-cris/pic-gc-72.d
new file mode 100644
index 0000000..7c30980
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/pic-gc-72.d
@@ -0,0 +1,28 @@
+#source: pic-gc-72.s
+#source: expdref1.s
+#source: expdyn1.s
+#as: --pic --no-underscore --em=criself -I$srcdir/$subdir
+#ld: --shared -m crislinux --gc-sections
+#objdump: -s -t -R -p -T
+
+# Exercise PIC relocs through changed GC sweep function.
+# There should be nothing left except from expdyn1.s.
+
+.*: file format elf32-cris
+#...
+DYNAMIC RELOCATION RECORDS \(none\)
+
+Contents of section .hash:
+#...
+Contents of section .dynsym:
+#...
+Contents of section .dynstr:
+#...
+Contents of section .text:
+ 0188 0f050f05 .*
+Contents of section .dynamic:
+#...
+Contents of section .got:
+ 21e4 8c210000 00000000 00000000 .*
+Contents of section .data:
+ 21f0 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/pic-gc-72.s b/binutils-2.21/ld/testsuite/ld-cris/pic-gc-72.s
new file mode 100644
index 0000000..e09aa8a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/pic-gc-72.s
@@ -0,0 +1,3 @@
+ .hidden export_1
+ .include "dso-2.s"
+ move.w expobj:GOT16,$r10
diff --git a/binutils-2.21/ld/testsuite/ld-cris/pic-gc-73.d b/binutils-2.21/ld/testsuite/ld-cris/pic-gc-73.d
new file mode 100644
index 0000000..1ef22de
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/pic-gc-73.d
@@ -0,0 +1,26 @@
+#source: pic-gc-73.s
+#source: expdyn1.s
+#as: --pic --no-underscore --em=criself -I$srcdir/$subdir
+#ld: --shared -m crislinux --gc-sections
+#objdump: -s -t -R -p -T
+
+# Left-over code coverage case from pic-gc-72; local symbol.
+
+.*: file format elf32-cris
+#...
+DYNAMIC RELOCATION RECORDS \(none\)
+
+Contents of section .hash:
+#...
+Contents of section .dynsym:
+#...
+Contents of section .dynstr:
+#...
+Contents of section .text:
+ 016e 0f050f05 .*
+Contents of section .dynamic:
+#...
+Contents of section .got:
+ 21cc 74210000 00000000 00000000 .*
+Contents of section .data:
+ 21d8 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/pic-gc-73.s b/binutils-2.21/ld/testsuite/ld-cris/pic-gc-73.s
new file mode 100644
index 0000000..6fd72db
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/pic-gc-73.s
@@ -0,0 +1,5 @@
+ .hidden export_1
+ .include "dso-2.s"
+dsofn:
+ .type dsofn,@function
+ move.w expobj:GOT16,$r10
diff --git a/binutils-2.21/ld/testsuite/ld-cris/pv32-1.d b/binutils-2.21/ld/testsuite/ld-cris/pv32-1.d
new file mode 100644
index 0000000..16113a2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/pv32-1.d
@@ -0,0 +1,40 @@
+#source: pv32.s
+#as: --march=v32 --no-underscore --em=criself
+#ld: -e here -m crislinux tmpdir/libdso-12.so
+#objdump: -s -T
+
+# Trivial test of linking a program to a v32 DSO.
+
+.*: file format elf32-cris
+
+DYNAMIC SYMBOL TABLE:
+0+8021e DF \*UND\* 0+ expfn
+0+82324 g DO \.bss 0+4 expobj
+0+82324 g D \*ABS\* 0+ __bss_start
+0+80238 DF \*UND\* 0+ dsofn3
+0+82324 g D \*ABS\* 0+ _edata
+0+82340 g D \*ABS\* 0+ _end
+0+80264 g DF \.text 0+8 dsofn
+
+Contents of section \.interp:
+ 800d4 2f6c6962 2f6c642e 736f2e31 00 .*
+#...
+Contents of section \.rela\.dyn:
+ 801e0 24230800 09020000 00000000 .*
+Contents of section \.rela\.plt:
+ 801ec 1c230800 0b010000 00000000 20230800 .*
+ 801fc 0b040000 00000000 .*
+Contents of section \.plt:
+ 80204 84e26ffe 14230800 7e7a3f7a 04f26ffa .*
+ 80214 bf09b005 00000000 00006ffe 1c230800 .*
+ 80224 6ffabf09 b0053f7e 00000000 bf0ed4ff .*
+ 80234 ffffb005 6ffe2023 08006ffa bf09b005 .*
+ 80244 3f7e0c00 0000bf0e baffffff b005 .*
+Contents of section \.text:
+ 80252 b005bfbe caffffff b005bfbe dcffffff .*
+ 80262 b0056fae 24230800 b0050000 .*
+Contents of section \.dynamic:
+#...
+Contents of section \.got:
+ 82310 70220800 00000000 00000000 2a020800 .*
+ 82320 44020800 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/pv32.s b/binutils-2.21/ld/testsuite/ld-cris/pv32.s
new file mode 100644
index 0000000..7606266
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/pv32.s
@@ -0,0 +1,24 @@
+ .global here
+ .type here,@function
+here:
+ nop
+.Lfe3:
+ .size here,.Lfe3-here
+
+ .type pfn,@function
+pfn:
+ bsr expfn
+ nop
+ bsr dsofn3
+ nop
+.Lfe1:
+ .size pfn,.Lfe1-pfn
+
+ .global dsofn
+ .type dsofn,@function
+dsofn:
+ move.d expobj,$r10
+ nop
+.Lfe2:
+ .size dsofn,.Lfe2-dsofn
+
diff --git a/binutils-2.21/ld/testsuite/ld-cris/stabs1.s b/binutils-2.21/ld/testsuite/ld-cris/stabs1.s
new file mode 100644
index 0000000..837d69d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/stabs1.s
@@ -0,0 +1,26 @@
+ .stabs "/x/y/z/",100,0,2,Ltext0
+ .stabs "/blah/foo.c",100,0,2,Ltext0
+ .text
+Ltext0:
+ .global _xyzzy
+ .type _xyzzy, @function
+_xyzzy:
+ .stabd 46,0,0
+ .stabn 68,0,95,LM16-_xyzzy
+LM16:
+ .long 0
+ .stabn 68,0,96,LM17-_xyzzy
+LM17:
+ .long globsym1
+ .stabn 68,0,88,LM25-_xyzzy
+LM25:
+ .long 0
+ .size _xyzzy, .-_xyzzy
+ .stabn 192,0,0,_xyzzy-_xyzzy
+ .stabn 224,0,0,Lscope0-_xyzzy
+Lscope0:
+;# This is the stabs construct that was barfed upon; BFD for
+;# a.out expects it to be of two parts, like the construct at
+;# the top of this file.
+ .stabs "",100,0,0,Letext0
+Letext0:
diff --git a/binutils-2.21/ld/testsuite/ld-cris/start1.s b/binutils-2.21/ld/testsuite/ld-cris/start1.s
new file mode 100644
index 0000000..2f19811
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/start1.s
@@ -0,0 +1,5 @@
+ .global _start
+_start:
+; This must be compilable with --march=common_v10_v32.
+ moveq 1,$r11
+
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-commx.s b/binutils-2.21/ld/testsuite/ld-cris/tls-commx.s
new file mode 100644
index 0000000..3fa4183
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-commx.s
@@ -0,0 +1 @@
+ .tls_common x,4,4
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-dso-dtpoffd2.d b/binutils-2.21/ld/testsuite/ld-cris/tls-dso-dtpoffd2.d
new file mode 100644
index 0000000..1db2b9a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-dso-dtpoffd2.d
@@ -0,0 +1,37 @@
+#source: start1.s
+#source: tls-dtpoffdx.s
+#source: tls-gd-1.s
+#source: tls128.s
+#source: tls-x.s
+#as: --no-underscore --em=criself --pic -I$srcdir/$subdir
+#ld: -m crislinux --shared
+#objdump: -d -s -t -r -p
+
+# Linking a file with a DTPOFF from a .dtpoffd of a GD variable, PIC
+# (globally defined here but overridable). Making sure it links and
+# that the offset is correct, locally.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off .*
+ filesz 0x0+84 memsz 0x0+84 flags r--
+#...
+SYMBOL TABLE:
+#...
+0+80 g .tdata 0+4 x
+#...
+Contents of section .rela.dyn:
+ 01a4 b8220000 17030000 00000000 .*
+Contents of section .text:
+ 01b0 41b20000 5fae0c00 .*
+#...
+Contents of section .got:
+ 22ac 3c220000 00000000 00000000 00000000 .*
+ 22bc 00000000 .*
+Contents of section .debug_info:
+ 0000 80000000 .*
+#...
+Disassembly of section .text:
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-dso-dtpoffd4.d b/binutils-2.21/ld/testsuite/ld-cris/tls-dso-dtpoffd4.d
new file mode 100644
index 0000000..0f54e61
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-dso-dtpoffd4.d
@@ -0,0 +1,37 @@
+#source: start1.s
+#source: tls-dtpoffdx.s
+#source: tls-gd-1.s
+#source: tls128.s
+#source: tls-commx.s
+#as: --no-underscore --em=criself --pic -I$srcdir/$subdir
+#ld: -m crislinux --shared
+#objdump: -d -s -t -r -p
+
+# Linking a file with a DTPOFF from a .dtpoffd of a GD COMMON
+# variable, PIC (globally defined here but overridable). Making sure
+# it links and that the offset is correct, locally.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off .*
+ filesz 0x0+80 memsz 0x0+84 flags r--
+#...
+SYMBOL TABLE:
+#...
+0+80 g .tbss 0+4 x
+#...
+Contents of section .rela.dyn:
+ 01a4 b4220000 17030000 00000000 .*
+Contents of section .text:
+ 01b0 41b20000 5fae0c00 .*
+#...
+Contents of section .got:
+ 22a8 38220000 00000000 00000000 00000000 .*
+ 22b8 00000000 .*
+Contents of section .debug_info:
+ 0000 80000000 .*
+#...
+Disassembly of section .text:
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-dso-x1x2-1.d b/binutils-2.21/ld/testsuite/ld-cris/tls-dso-x1x2-1.d
new file mode 100644
index 0000000..b539748
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-dso-x1x2-1.d
@@ -0,0 +1,16 @@
+#source: tls-hx.s
+#source: tls-x1x2.s
+#as: --no-underscore --em=criself
+#ld: -m crislinux --shared
+#objdump: -T
+
+# A DSO providing the TLS variables x1 and x2.
+
+.*: file format elf32-cris
+
+DYNAMIC SYMBOL TABLE:
+#...
+0+8 g D \.tdata 0+4 x2
+#...
+0+4 g D \.tdata 0+4 x1
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-dso-xz-1.d b/binutils-2.21/ld/testsuite/ld-cris/tls-dso-xz-1.d
new file mode 100644
index 0000000..9a33b78
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-dso-xz-1.d
@@ -0,0 +1,18 @@
+#source: tls128.s
+#source: tls-hx1x2.s
+#source: tls-x.s
+#source: tls-z.s
+#as: --no-underscore --em=criself
+#ld: -m crislinux --shared
+#objdump: -T
+
+# A DSO providing the TLS variables x and z.
+
+.*: file format elf32-cris
+
+DYNAMIC SYMBOL TABLE:
+#...
+0+88 g D \.tdata 0+4 x
+#...
+0+8c g D \.tdata 0+4 z
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-dtpoffdx.s b/binutils-2.21/ld/testsuite/ld-cris/tls-dtpoffdx.s
new file mode 100644
index 0000000..99f331c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-dtpoffdx.s
@@ -0,0 +1,2 @@
+ .section .debug_info
+ .dtpoffd x
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-dtprelm.s b/binutils-2.21/ld/testsuite/ld-cris/tls-dtprelm.s
new file mode 100644
index 0000000..f69724b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-dtprelm.s
@@ -0,0 +1,26 @@
+ .text
+
+ .ifndef r
+ .set r,1
+ .endif
+
+ .global tlsdsofndtprelm
+ .type tlsdsofndtprelm,@function
+ .p2align 1
+tlsdsofndtprelm:
+ move.w x:DTPREL16,$r10
+.Lfe:
+ .size tlsdsofndtprelm,.Lfe-tlsdsofndtprelm
+
+ .globl z
+ .section .tdata,"awT",@progbits
+ .p2align 2
+ .type z,@object
+ .size z,r
+z:
+ .fill r,1,42
+
+ .type x,@object
+ .size x,1
+x:
+ .byte 42
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-e-20.d b/binutils-2.21/ld/testsuite/ld-cris/tls-e-20.d
new file mode 100644
index 0000000..5771d74
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-e-20.d
@@ -0,0 +1,71 @@
+#source: start1.s
+#source: tls-gd-2.s --pic
+#source: tls-hx.s
+#source: tls-ld-6.s --pic
+#source: tls-ie-10.s --pic
+#source: tls-hx1x2.s --pic
+#as: --no-underscore --em=criself -I$srcdir/$subdir
+#ld: -m crislinux
+#objdump: -d -s -h -t -r -p
+
+# Check that we have proper NPTL/TLS markings and GOT for an
+# executable with a R_CRIS_32_GOT_GD, a R_CRIS_DTPREL and a
+# R_CRIS_32_GOT_TPREL.
+
+.*: file format elf32-cris
+
+Program Header:
+ LOAD off 0x0+ vaddr 0x0+80000 paddr 0x0+80000 align 2\*\*13
+ filesz 0x0+b0 memsz 0x0+b0 flags r-x
+ LOAD off 0x0+b0 vaddr 0x0+820b0 paddr 0x0+820b0 align 2\*\*13
+ filesz 0x0+2c memsz 0x0+2c flags rw-
+ TLS off 0x0+b0 vaddr 0x0+820b0 paddr 0x0+820b0 align 2\*\*2
+ filesz 0x0+c memsz 0x0+c flags r--
+private flags = 0:
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0000001c 00080094 00080094 00000094 2\*\*1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 1 \.tdata 0000000c 000820b0 000820b0 000000b0 2\*\*2
+ CONTENTS, ALLOC, LOAD, DATA, THREAD_LOCAL
+ 2 \.got 00000020 000820bc 000820bc 000000bc 2\*\*2
+ CONTENTS, ALLOC, LOAD, DATA
+SYMBOL TABLE:
+0+80094 l d \.text 0+ \.text
+0+820b0 l d \.tdata 0+ \.tdata
+0+820bc l d \.got 0+ \.got
+0+820bc l O \.got 0+ _GLOBAL_OFFSET_TABLE_
+0+ g \.tdata 0+4 \.hidden x
+0+80098 g F \.text 0+6 tlsdsofn2
+0+8 g \.tdata 0+4 \.hidden x2
+0+80094 g \.text 0+ _start
+0+820dc g \*ABS\* 0+ __bss_start
+0+800a0 g F \.text 0+6 tlsdsofn
+0+4 g \.tdata 0+4 \.hidden x1
+0+820dc g \*ABS\* 0+ _edata
+0+820e0 g \*ABS\* 0+ _end
+0+800a8 g F \.text 0+6 tlsdsofn10
+
+Contents of section \.text:
+#...
+Contents of section \.tdata:
+ 820b0 28000000 29000000 2a000000 .*
+Contents of section \.got:
+ 820bc 00000000 00000000 00000000 01000000 .*
+ 820cc 00000000 f4ffffff 01000000 00000000 .*
+
+Disassembly of section \.text:
+
+00080094 <_start>:
+ 80094: 41b2 moveq 1,\$r11
+#...
+00080098 <tlsdsofn2>:
+ 80098: 6fae 1800 0000 move\.d 18 <x2\+0x10>,\$r10
+#...
+000800a0 <tlsdsofn>:
+ 800a0: 6fae 0000 0000 move\.d 0 <x>,\$r10
+#...
+000800a8 <tlsdsofn10>:
+ 800a8: 6fae 1400 0000 move\.d 14 <x2\+0xc>,\$r10
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-e-20a.d b/binutils-2.21/ld/testsuite/ld-cris/tls-e-20a.d
new file mode 100644
index 0000000..5f52881
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-e-20a.d
@@ -0,0 +1,110 @@
+#source: start1.s
+#source: got7.s
+#source: tls128.s
+#source: tls-gd-2.s
+#source: tls-ld-6.s
+#source: tls-ie-10.s
+#source: tls-hx.s
+#source: tls-hx1x2.s
+#as: --no-underscore --em=criself -I$srcdir/$subdir --pic
+#ld: -m crislinux
+#objdump: -d -s -h -t -r -p
+
+# Like tls-e-20.d but with an offset for all TLS GOT entries, and an
+# offset for all TLS data we care about. Offsets different for TLS
+# than for GOT.
+
+.*: file format elf32-cris
+
+Program Header:
+ LOAD off 0x0+ vaddr 0x0+80000 paddr 0x0+80000 align 2\*\*13
+ filesz 0x0+dc memsz 0x0+dc flags r-x
+ LOAD off 0x0+dc vaddr 0x0+820dc paddr 0x0+820dc align 2\*\*13
+ filesz 0x0+e4 memsz 0x0+e4 flags rw-
+ TLS off 0x0+dc vaddr 0x0+820dc paddr 0x0+820dc align 2\*\*2
+ filesz 0x0+8c memsz 0x0+8c flags r--
+private flags = 0:
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0+48 0+80094 0+80094 0+94 2\*\*1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 1 \.tdata 0+8c 0+820dc 0+820dc 0+dc 2\*\*2
+ CONTENTS, ALLOC, LOAD, DATA, THREAD_LOCAL
+ 2 \.got 0+3c 0+82168 0+82168 0+168 2\*\*2
+ CONTENTS, ALLOC, LOAD, DATA
+ 3 \.data 0+1c 0+821a4 0+821a4 0+1a4 2\*\*0
+ CONTENTS, ALLOC, LOAD, DATA
+SYMBOL TABLE:
+0+80094 l d \.text 0+ \.text
+0+820dc l d \.tdata 0+ \.tdata
+0+82168 l d \.got 0+ \.got
+0+821a4 l d \.data 0+ \.data
+0+ l \.tdata 0+80 tls128
+0+82168 l O \.got 0+ _GLOBAL_OFFSET_TABLE_
+0+80 g \.tdata 0+4 \.hidden x
+0+800c4 g F \.text 0+6 tlsdsofn2
+0+821b4 g O \.data 0+4 got7var5
+0+88 g \.tdata 0+4 \.hidden x2
+0+821ac g O \.data 0+4 got7var3
+0+821bc g O \.data 0+4 got7var7
+0+80098 g F \.text 0+2a got7fn
+0+821b8 g O \.data 0+4 got7var6
+0+80094 g \.text 0+ _start
+0+821c0 g \*ABS\* 0+ __bss_start
+0+821a4 g O \.data 0+4 got7var1
+0+821b0 g O \.data 0+4 got7var4
+0+800cc g F \.text 0+6 tlsdsofn
+0+84 g \.tdata 0+4 \.hidden x1
+0+821c0 g \*ABS\* 0+ _edata
+0+821c0 g \*ABS\* 0+ _end
+0+821a8 g O \.data 0+4 got7var2
+0+800d4 g F \.text 0+6 tlsdsofn10
+
+Contents of section \.text:
+#...
+Contents of section \.tdata:
+ 820dc 2f000000 00000000 00000000 00000000 .*
+ 820ec 00000000 00000000 00000000 00000000 .*
+ 820fc 00000000 00000000 00000000 00000000 .*
+ 8210c 00000000 00000000 00000000 00000000 .*
+ 8211c 00000000 00000000 00000000 00000000 .*
+ 8212c 00000000 00000000 00000000 00000000 .*
+ 8213c 00000000 00000000 00000000 00000000 .*
+ 8214c 00000000 00000000 00000000 00000000 .*
+ 8215c 28000000 29000000 2a000000 .*
+Contents of section \.got:
+ 82168 00000000 00000000 00000000 01000000 .*
+ 82178 00000000 f4ffffff 01000000 80000000 .*
+ 82188 b4210800 ac210800 bc210800 b8210800 .*
+ 82198 a4210800 b0210800 a8210800 .*
+Contents of section \.data:
+ 821a4 00000000 00000000 00000000 00000000 .*
+ 821b4 00000000 00000000 00000000 .*
+
+Disassembly of section \.text:
+
+00080094 <_start>:
+ 80094: 41b2 moveq 1,\$r11
+#...
+00080098 <got7fn>:
+ 80098: 6fae 3000 0000 move\.d 30 <tls128\+0x30>,\$r10
+ 8009e: 6fae 3800 0000 move\.d 38 <tls128\+0x38>,\$r10
+ 800a4: 6fae 2400 0000 move\.d 24 <tls128\+0x24>,\$r10
+ 800aa: 6fae 3400 0000 move\.d 34 <tls128\+0x34>,\$r10
+ 800b0: 6fae 2000 0000 move\.d 20 <tls128\+0x20>,\$r10
+ 800b6: 6fae 2c00 0000 move\.d 2c <tls128\+0x2c>,\$r10
+ 800bc: 6fae 2800 0000 move\.d 28 <tls128\+0x28>,\$r10
+#...
+
+000800c4 <tlsdsofn2>:
+ 800c4: 6fae 1800 0000 move\.d 18 <tls128\+0x18>,\$r10
+#...
+
+000800cc <tlsdsofn>:
+ 800cc: 6fae 8000 0000 move\.d 80 <x>,\$r10
+#...
+
+000800d4 <tlsdsofn10>:
+ 800d4: 6fae 1400 0000 move\.d 14 <tls128\+0x14>,\$r10
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-e-21.d b/binutils-2.21/ld/testsuite/ld-cris/tls-e-21.d
new file mode 100644
index 0000000..fa56b9f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-e-21.d
@@ -0,0 +1,39 @@
+#source: start1.s
+#source: tls128.s
+#source: tls-gd-2.s
+#source: tls-hx.s
+#as: --no-underscore --em=criself --pic
+#ld: -m crislinux
+#objdump: -d -s -t -r -p
+
+# Check that we have proper NPTL/TLS markings and GOT for an
+# executable with a single R_CRIS_32_GOT_GD.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off 0x0+a0 vaddr 0x0+820a0 paddr 0x0+820a0 align 2\*\*2
+ filesz 0x0+84 memsz 0x0+84 flags r--
+private flags = 0:
+#...
+SYMBOL TABLE:
+#...
+0+80 g \.tdata 0+4 \.hidden x
+#...
+Contents of section \.text:
+#...
+Contents of section \.tdata:
+#...
+Contents of section \.got:
+ 82124 00000000 00000000 00000000 01000000 .*
+ 82134 80000000 .*
+
+Disassembly of section \.text:
+
+00080094 <_start>:
+ 80094: 41b2 moveq 1,\$r11
+#...
+00080098 <tlsdsofn2>:
+ 80098: 6fae 0c00 0000 move\.d c <tls128\+0xc>,\$r10
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-e-22.d b/binutils-2.21/ld/testsuite/ld-cris/tls-e-22.d
new file mode 100644
index 0000000..93ab45d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-e-22.d
@@ -0,0 +1,39 @@
+#source: start1.s
+#source: tls128.s
+#source: tls-ld-6.s
+#source: tls-hx.s
+#as: --no-underscore --em=criself --pic -I$srcdir/$subdir
+#ld: -m crislinux
+#objdump: -d -s -t -r -p
+
+# Check that we have proper NPTL/TLS markings and GOT for an
+# executable with a single R_CRIS_DTPREL.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off 0x0+a0 vaddr 0x0+820a0 paddr 0x0+820a0 align 2\*\*2
+ filesz 0x0+84 memsz 0x0+84 flags r--
+private flags = 0:
+#...
+SYMBOL TABLE:
+#...
+0+80 g \.tdata 0+4 \.hidden x
+#...
+Contents of section \.text:
+#...
+Contents of section \.tdata:
+#...
+Contents of section \.got:
+ 82124 00000000 00000000 00000000 01000000 .*
+ 82134 00000000 .*
+
+Disassembly of section \.text:
+
+00080094 <_start>:
+ 80094: 41b2 moveq 1,\$r11
+#...
+00080098 <tlsdsofn>:
+ 80098: 6fae 8000 0000 move\.d 80 <x>,\$r10
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-e-23.d b/binutils-2.21/ld/testsuite/ld-cris/tls-e-23.d
new file mode 100644
index 0000000..499899e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-e-23.d
@@ -0,0 +1,38 @@
+#source: start1.s
+#source: tls128.s
+#source: tls-ie-10.s
+#source: tls-hx.s
+#as: --no-underscore --em=criself --pic -I$srcdir/$subdir
+#ld: -m crislinux
+#objdump: -d -s -t -r -p
+
+# Check that we have proper NPTL/TLS markings and GOT for an
+# executable with a single R_CRIS_32_GOT_TPREL.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off 0x0+a0 vaddr 0x0+820a0 paddr 0x0+820a0 align 2\*\*2
+ filesz 0x0+84 memsz 0x0+84 flags r--
+private flags = 0:
+#...
+SYMBOL TABLE:
+#...
+0+80 g \.tdata 0+4 \.hidden x
+#...
+Contents of section \.text:
+#...
+Contents of section \.tdata:
+#...
+Contents of section \.got:
+ 82124 00000000 00000000 00000000 fcffffff .*
+
+Disassembly of section \.text:
+
+00080094 <_start>:
+ 80094: 41b2 moveq 1,\$r11
+#...
+00080098 <tlsdsofn10>:
+ 80098: 6fae 0c00 0000 move\.d c <tls128\+0xc>,\$r10
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-e-66.d b/binutils-2.21/ld/testsuite/ld-cris/tls-e-66.d
new file mode 100644
index 0000000..ba1755d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-e-66.d
@@ -0,0 +1,37 @@
+#source: start1.s
+#source: tls-le-12s.s
+#source: tls-z.s
+#as: --no-underscore --em=criself -I$srcdir/$subdir
+#ld: -m crislinux
+#objdump: -d -s -t -r -p -h
+
+# Check that we have proper NPTL/TLS markings and no GOT for an
+# executable with a single R_CRIS_16_TPREL.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off 0x0+9c vaddr 0x0+8209c paddr 0x0+8209c align 2\*\*2
+ filesz 0x0+4 memsz 0x0+4 flags r--
+private flags = 0:
+#...
+ 1 .tdata .*
+ CONTENTS.*
+SYMBOL TABLE:
+#...
+0+ g \.tdata 0+4 z
+#...
+Contents of section \.text:
+#...
+Contents of section \.tdata:
+#...
+
+Disassembly of section \.text:
+
+00080094 <_start>:
+ 80094: 41b2 moveq 1,\$r11
+#...
+00080098 <tlsfn12>:
+ 80098: 7fac fcff movs\.w -4,\$r10
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-e-80.d b/binutils-2.21/ld/testsuite/ld-cris/tls-e-80.d
new file mode 100644
index 0000000..603d581
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-e-80.d
@@ -0,0 +1,88 @@
+#source: start1.s
+#source: tls-tbss64.s
+#source: tls-ie-8e.s
+#source: tls-gd-2.s --pic
+#source: tls-hx.s
+#source: tls-le-12.s
+#source: tls-z.s
+#source: tls-ld-6.s --pic
+#source: tls-ie-10.s --pic
+#source: tls-hx1x2.s --pic
+#as: --no-underscore --em=criself -I$srcdir/$subdir
+#ld: -m crislinux
+#objdump: -d -s -h -t -r -p
+
+# Check that we have proper NPTL/TLS markings and GOT for an
+# executable with a R_CRIS_32_GOT_GD, a R_CRIS_DTPREL, a
+# R_CRIS_32_GOT_TPREL, a R_CRIS_32_TPREL and a R_CRIS_32_IE.
+
+.*: file format elf32-cris
+
+Program Header:
+ LOAD off 0x0+ vaddr 0x0+80000 paddr 0x0+80000 align 2\*\*13
+ filesz 0x0+c0 memsz 0x0+c0 flags r-x
+ LOAD off 0x0+c0 vaddr 0x0+820c0 paddr 0x0+820c0 align 2\*\*13
+ filesz 0x0+30 memsz 0x0+30 flags rw-
+ TLS off 0x0+c0 vaddr 0x0+820c0 paddr 0x0+820c0 align 2\*\*2
+ filesz 0x0+10 memsz 0x0+50 flags r--
+private flags = 0:
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0+2c 0+80094 0+80094 0+94 2\*\*1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 1 \.tdata 0+10 0+820c0 0+820c0 0+c0 2\*\*2
+ CONTENTS, ALLOC, LOAD, DATA, THREAD_LOCAL
+ 2 \.tbss 0+40 000820d0 0+820d0 0+d0 2\*\*2
+ ALLOC, THREAD_LOCAL
+ 3 \.got 0+20 0+820d0 0+820d0 0+d0 2\*\*2
+ CONTENTS, ALLOC, LOAD, DATA
+SYMBOL TABLE:
+0+80094 l d \.text 0+ \.text
+0+820c0 l d \.tdata 0+ \.tdata
+0+820d0 l d \.tbss 0+ \.tbss
+0+820d0 l d \.got 0+ \.got
+0+820d0 l O \.got 0+ _GLOBAL_OFFSET_TABLE_
+0+ g \.tdata 0+4 \.hidden x
+0+800a0 g F \.text 0+6 tlsdsofn2
+0+800a8 g F \.text 0+6 tlsfn12
+0+c g \.tdata 0+4 \.hidden x2
+0+4 g \.tdata 0+4 z
+0+80094 g \.text 0+ _start
+0+80098 g F \.text 0+6 tlsfn
+0+820f0 g \*ABS\* 0+ __bss_start
+0+800b0 g F \.text 0+6 tlsdsofn
+0+8 g \.tdata 0+4 \.hidden x1
+0+820f0 g \*ABS\* 0+ _edata
+0+82100 g \*ABS\* 0+ _end
+0+10 g \.tbss 0+40 gx
+0+800b8 g F \.text 0+6 tlsdsofn10
+
+Contents of section \.text:
+#...
+Contents of section \.tdata:
+ 820c0 28000000 2a000000 29000000 2a000000 .*
+Contents of section \.got:
+ 820d0 00000000 00000000 00000000 01000000 .*
+ 820e0 00000000 b0ffffff 01000000 00000000 .*
+
+Disassembly of section \.text:
+
+00080094 <_start>:
+ 80094: 41b2 moveq 1,\$r11
+#...
+00080098 <tlsfn>:
+ 80098: 6fae e420 0800 move.d 820e4 <_GLOBAL_OFFSET_TABLE_\+0x14>,\$r10
+#...
+000800a0 <tlsdsofn2>:
+ 800a0: 6fae 1800 0000 move\.d 18 <gx\+0x8>,\$r10
+#...
+000800a8 <tlsfn12>:
+ 800a8: 6fae b4ff ffff move.d 0xffffffb4,\$r10
+#...
+000800b0 <tlsdsofn>:
+ 800b0: 6fae 0000 0000 move\.d 0 <x>,\$r10
+#...
+000800b8 <tlsdsofn10>:
+ 800b8: 6fae 1400 0000 move\.d 14 <gx\+0x4>,\$r10
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-e-dtpoffd1.d b/binutils-2.21/ld/testsuite/ld-cris/tls-e-dtpoffd1.d
new file mode 100644
index 0000000..5da24b5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-e-dtpoffd1.d
@@ -0,0 +1,32 @@
+#source: start1.s
+#source: tls-dtpoffdx.s
+#source: tls-gd-1.s
+#source: tls128.s
+#source: tls-x.s
+#as: --no-underscore --em=criself --pic -I$srcdir/$subdir
+#ld: -m crislinux
+#objdump: -d -s -t -r -p
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off .*
+ filesz 0x0+84 memsz 0x0+84 flags r--
+private flags = 0:
+
+SYMBOL TABLE:
+#...
+0+80 g .tdata 0+4 x
+#...
+Contents of section .text:
+ 80094 41b20000 5fae0c00 .*
+Contents of section .tdata:
+#...
+Contents of section .got:
+ 82120 00000000 00000000 00000000 01000000 .*
+ 82130 80000000 .*
+Contents of section .debug_info:
+ 0000 80000000 .*
+Contents of section .debug_line:
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-e-dtpoffd3.d b/binutils-2.21/ld/testsuite/ld-cris/tls-e-dtpoffd3.d
new file mode 100644
index 0000000..6013a3a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-e-dtpoffd3.d
@@ -0,0 +1,32 @@
+#source: start1.s
+#source: tls-dtpoffdx.s
+#source: tls-gd-1.s
+#source: tls128.s
+#source: tls-commx.s
+#as: --no-underscore --em=criself --pic -I$srcdir/$subdir
+#ld: -m crislinux
+#objdump: -d -s -t -r -p
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off .*
+ filesz 0x0+80 memsz 0x0+84 flags r--
+private flags = 0:
+
+SYMBOL TABLE:
+#...
+0+80 g .tbss 0+4 x
+#...
+Contents of section .text:
+ 80094 41b20000 5fae0c00 .*
+Contents of section .tdata:
+#...
+Contents of section .got:
+ 8211c 00000000 00000000 00000000 01000000 .*
+ 8212c 80000000 .*
+Contents of section .debug_info:
+ 0000 80000000 .*
+Contents of section .debug_line:
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-e-tpoffcomm1.d b/binutils-2.21/ld/testsuite/ld-cris/tls-e-tpoffcomm1.d
new file mode 100644
index 0000000..69780cf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-e-tpoffcomm1.d
@@ -0,0 +1,45 @@
+#source: start1.s
+#source: tls-e-tpoffcomm1.s
+#as: --no-underscore --em=criself -I$srcdir/$subdir
+#ld: -m crislinux
+#objdump: -d -s -h -t -r -p
+
+# Make sure we can link a file with TPOFF relocs against common
+# symbols.
+
+.*: file format elf32-cris
+
+Program Header:
+ LOAD off 0x0+ vaddr 0x0+80000 paddr 0x0+80000 align 2\*\*13
+ filesz 0x0+a4 memsz 0x0+a4 flags r-x
+ LOAD off 0x0+a4 vaddr 0x0+820a4 paddr 0x0+820a4 align 2\*\*13
+ filesz 0x0+ memsz 0x0+ flags rw-
+ TLS off 0x0+a4 vaddr 0x0+820a4 paddr 0x0+820a4 align 2\*\*2
+ filesz 0x0+ memsz 0x0+8 flags r--
+private flags = 0:
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 .text 0+10 0+80094 0+80094 0+94 2\*\*1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 1 .tbss 0+8 0+820a4 0+820a4 0+a4 2\*\*2
+ ALLOC, THREAD_LOCAL
+SYMBOL TABLE:
+0+80094 l d .text 0+ .text
+0+820a4 l d .tbss 0+ .tbss
+0+80098 l F .text 0+c do_test
+0+80094 g .text 0+ _start
+0+820a4 g \*ABS\* 0+ __bss_start
+0+ g .tbss 0+4 foo
+0+820a4 g \*ABS\* 0+ _edata
+0+820c0 g \*ABS\* 0+ _end
+0+4 g .tbss 0+4 bar
+#...
+Disassembly of section .text:
+
+00080094 <_start>:
+ 80094: 41b2 moveq 1,\$r11
+#...
+00080098 <do_test>:
+ 80098: 2f0e f8ff ffff add.d 0xfffffff8,\$r0
+ 8009e: 2f1e fcff ffff add.d 0xfffffffc,\$r1
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-e-tpoffcomm1.s b/binutils-2.21/ld/testsuite/ld-cris/tls-e-tpoffcomm1.s
new file mode 100644
index 0000000..a9f03ae
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-e-tpoffcomm1.s
@@ -0,0 +1,9 @@
+ .tls_common foo,4,4
+ .tls_common bar,4,4
+ .text
+ .align 1
+ .type do_test, @function
+do_test:
+ add.d foo:TPOFF,$r0
+ add.d bar:TPOFF,$r1
+ .size do_test, .-do_test
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-20x.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-20x.d
new file mode 100644
index 0000000..75e3b03
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-20x.d
@@ -0,0 +1,11 @@
+#source: init.s
+#source: tls-ie-9.s --pic
+#source: tls-ld-6.s --pic
+#source: tls-ie-10.s --pic
+#source: tls-hx.s --pic
+#as: --no-underscore --em=criself
+#ld: -m crislinux
+#error: \A[^\n]*: warning: cannot find entry symbol _start; defaulting to [0-9a-f]*\n[^\n]*: In function `tlsdsofn9':\n[^\n]*: undefined reference to `x1'\n[^\n]*: In function `tlsdsofn9':\n[^n]*: undefined reference to `x2'\Z
+
+# Code coverage case similar to tls-e-20.d, except with an undefined
+# reference.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-24.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-24.d
new file mode 100644
index 0000000..e1bc88b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-24.d
@@ -0,0 +1,7 @@
+#source: tls-le-12s.s
+#source: tls-z.s
+#as: --no-underscore --em=criself
+#ld: --shared -m crislinux
+#error: \A[^\n]*\.o, [^\n]*\n[^\n]*mixup[^\n]*\n[^\n]*Invalid operation\Z
+
+# Check that R_CRIS_16_TPREL in input to a DSO is flagged as an error.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-25.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-25.d
new file mode 100644
index 0000000..df5ca6b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-25.d
@@ -0,0 +1,7 @@
+#source: tls-le-12.s
+#source: tls-z.s
+#as: --no-underscore --em=criself
+#ld: --shared -m crislinux
+#error: \A[^\n]*\.o, [^\n]*\n[^\n]*mixup[^\n]*\n[^\n]*Invalid operation\Z
+
+# Check that R_CRIS_32_TPREL in input to a DSO is flagged as an error.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-26.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-26.d
new file mode 100644
index 0000000..71ecc9b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-26.d
@@ -0,0 +1,8 @@
+#source: tls-ld-4.s
+#source: tls-x.s
+#as: --no-underscore --em=criself --pic
+#ld: --shared -m crislinux
+#error: \A[^\n]*\.o,[^\n]*mixup[^\n]*\n[^\n]*Bad value\Z
+
+# Check that R_CRIS_16_DTPREL on non-module-local symbol in input to a
+# DSO is flagged as an error.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-27.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-27.d
new file mode 100644
index 0000000..3d40b03
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-27.d
@@ -0,0 +1,8 @@
+#source: tls-ld-6.s
+#source: tls-x.s
+#as: --no-underscore --em=criself --pic
+#ld: --shared -m crislinux
+#error: \A[^\n]*\.o,[^\n]*mixup[^\n]*\n[^\n]*Bad value\Z
+
+# Check that R_CRIS_32_DTPREL on non-module-local symbol in input to a
+# DSO is flagged as an error.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-28.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-28.d
new file mode 100644
index 0000000..d7bfa9d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-28.d
@@ -0,0 +1,7 @@
+#source: tls-gd-3.s
+#source: tls-x.s
+#as: --no-underscore --em=criself
+#ld: --shared -m crislinux
+#error: \A[^\n]*\.o, [^\n]*\n[^\n]*mixup[^\n]*\n[^\n]*Invalid operation\Z
+
+# Check that a R_CRIS_32_GD in input to a DSO is flagged as an error.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-29.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-29.d
new file mode 100644
index 0000000..1024ea8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-29.d
@@ -0,0 +1,7 @@
+#source: init.s
+#source: tls-gdgotrelm.s --defsym r=8192
+#as: --no-underscore --em=criself --pic
+#ld: --shared -m crislinux
+#error: \A[^\n]*\.o: In function[^\n]*\n[^\n]*truncated[^\n]*\n[^\n]*too many[^\n]*\Z
+
+# Check that overflow for R_CRIS_16_GOT_GD is flagged as an error.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-31.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-31.d
new file mode 100644
index 0000000..b95fa54
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-31.d
@@ -0,0 +1,6 @@
+#source: tls-dtprelm.s --defsym r=32768
+#as: --no-underscore --em=criself --pic
+#ld: --shared -m crislinux
+#error: \A[^\n]*\.o: In function[^\n]*\n[^\n]*truncated[^\n]*\n[^\n]*too big[^\n]*\Z
+
+# Check that overflow for R_CRIS_16_DTPREL is flagged as an error.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-33.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-33.d
new file mode 100644
index 0000000..6872bbd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-33.d
@@ -0,0 +1,6 @@
+#source: tls-gottprelm.s --defsym r=8190
+#as: --no-underscore --em=criself --pic
+#ld: --shared -m crislinux
+#error: \A[^\n]*\.o: In function[^\n]*\n[^\n]*truncated[^\n]*\n[^\n]*too many[^\n]*\Z
+
+# Check that overflow for R_CRIS_16_GOT_TPREL is flagged as an error.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-35.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-35.d
new file mode 100644
index 0000000..9aa7b87
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-35.d
@@ -0,0 +1,7 @@
+#source: start1.s
+#source: tls-tprelm.s --defsym r=32768
+#as: --no-underscore --em=criself
+#ld: -m crislinux
+#error: \A[^\n]*\.o: In function[^\n]*\n[^\n]*truncated[^\n]*\n[^\n]*too big[^\n]*\Z
+
+# Check that overflow for R_CRIS_16_TPREL is flagged as an error.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-37.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-37.d
new file mode 100644
index 0000000..e2efff1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-37.d
@@ -0,0 +1,7 @@
+#source: start1.s
+#source: tls-gd-2.s --pic
+#as: --no-underscore --em=criself
+#ld: -m crislinux
+#error: \A[^\n]*\.o: In function[^\n]*\n[^\n]*undefined reference[^\n]*\Z
+
+# Undefined reference for a R_CRIS_32_GOT_GD in an executable.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-39.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-39.d
new file mode 100644
index 0000000..dab70f2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-39.d
@@ -0,0 +1,7 @@
+#source: start1.s
+#source: tls-ld-6.s --pic
+#as: --no-underscore --em=criself
+#ld: -m crislinux
+#error: \A[^\n]*\.o: In function[^\n]*\n[^\n]*undefined reference[^\n]*\Z
+
+# Undefined reference for a R_CRIS_32_DTPREL in an executable.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-40.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-40.d
new file mode 100644
index 0000000..ef9a18a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-40.d
@@ -0,0 +1,6 @@
+#source: tls-ld-6.s --pic
+#as: --no-underscore --em=criself
+#ld: -m crislinux --shared
+#error: \A[^\n]*\.o[^\n]*undefined reference[^\n]*\n[^\n]*Bad value\Z
+
+# Undefined reference for a R_CRIS_32_DTPREL in a DSO.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-41.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-41.d
new file mode 100644
index 0000000..b751f0a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-41.d
@@ -0,0 +1,7 @@
+#source: start1.s
+#source: tls-ie-10.s --pic
+#as: --no-underscore --em=criself
+#ld: -m crislinux
+#error: \A[^\n]*\.o: In function[^\n]*\n[^\n]*undefined reference[^\n]*\Z
+
+# Undefined reference for a R_CRIS_32_GOT_TPREL in an executable.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-43.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-43.d
new file mode 100644
index 0000000..f516c6f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-43.d
@@ -0,0 +1,7 @@
+#source: start1.s
+#source: tls-le-12.s
+#as: --no-underscore --em=criself
+#ld: -m crislinux
+#error: \A[^\n]*\.o: In function[^\n]*\n[^\n]*undefined reference[^\n]*\Z
+
+# Undefined reference for a R_CRIS_32_TPREL in an executable.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-44.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-44.d
new file mode 100644
index 0000000..251470d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-44.d
@@ -0,0 +1,8 @@
+#source: tls-le-12.s
+#as: --no-underscore --em=criself
+#ld: -m crislinux --shared
+#error: \A[^\n]*\.o, [^\n]*\n[^\n]*mixup[^\n]*\n[^\n]*Invalid operation\Z
+
+# Undefined reference for a R_CRIS_32_TPREL in a DSO (where it's
+# invalid in the first place anyway, so we should see the same
+# behavior as for that test, tls-err-25.d).
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-45.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-45.d
new file mode 100644
index 0000000..be847ba
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-45.d
@@ -0,0 +1,7 @@
+#source: start1.s
+#source: tls-gd-1.s --pic
+#as: --no-underscore --em=criself
+#ld: -m crislinux
+#error: \A[^\n]*\.o: In function[^\n]*\n[^\n]*undefined reference[^\n]*\Z
+
+# Undefined reference for a R_CRIS_16_GOT_GD in an executable.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-47.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-47.d
new file mode 100644
index 0000000..d9a1a30
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-47.d
@@ -0,0 +1,7 @@
+#source: start1.s
+#source: tls-ld-4.s --pic
+#as: --no-underscore --em=criself
+#ld: -m crislinux
+#error: \A[^\n]*\.o: In function[^\n]*\n[^\n]*undefined reference[^\n]*\Z
+
+# Undefined reference for a R_CRIS_16_DTPREL in an executable.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-48.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-48.d
new file mode 100644
index 0000000..9165fcd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-48.d
@@ -0,0 +1,6 @@
+#source: tls-ld-4.s --pic
+#as: --no-underscore --em=criself
+#ld: -m crislinux --shared
+#error: \A[^\n]*\.o[^\n]*undefined reference[^\n]*\n[^\n]*Bad value\Z
+
+# Undefined reference for a R_CRIS_16_DTPREL in a DSO.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-49.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-49.d
new file mode 100644
index 0000000..6ff4ba5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-49.d
@@ -0,0 +1,7 @@
+#source: start1.s
+#source: tls-ie-8.s --pic
+#as: --no-underscore --em=criself
+#ld: -m crislinux
+#error: \A[^\n]*\.o: In function[^\n]*\n[^\n]*undefined reference[^\n]*\Z
+
+# Undefined reference for a R_CRIS_16_GOT_TPREL in an executable.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-51.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-51.d
new file mode 100644
index 0000000..8e71cc5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-51.d
@@ -0,0 +1,7 @@
+#source: start1.s
+#source: tls-le-12s.s
+#as: --no-underscore --em=criself
+#ld: -m crislinux
+#error: \A[^\n]*\.o: In function[^\n]*\n[^\n]*undefined reference[^\n]*\Z
+
+# Undefined reference for a R_CRIS_16_TPREL in an executable.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-52.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-52.d
new file mode 100644
index 0000000..cf0bbbc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-52.d
@@ -0,0 +1,8 @@
+#source: tls-le-12s.s
+#as: --no-underscore --em=criself
+#ld: -m crislinux --shared
+#error: \A[^\n]*\.o, [^\n]*\n[^\n]*mixup[^\n]*\n[^\n]*Invalid operation\Z
+
+# Undefined reference for a R_CRIS_16_TPREL in a DSO (where it's
+# invalid in the first place anyway, so we should see the same
+# behavior as for that test, tls-err-24.d).
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-53.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-53.d
new file mode 100644
index 0000000..1ae3d42
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-53.d
@@ -0,0 +1,7 @@
+#source: start1.s
+#source: tls-ld-4.s
+#as: --no-underscore --em=criself --pic
+#ld: -m crislinux tmpdir/tls-dso-xz-1.so
+#error: \A[^\n]*\.o,[^\n]*mixup[^\n]*\n[^\n]*Bad value\Z
+
+# R_CRIS_16_DTPREL in executable against symbol from DSO.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-55.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-55.d
new file mode 100644
index 0000000..08f77f3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-55.d
@@ -0,0 +1,6 @@
+#source: tls-err-55.s
+#as: --pic --no-underscore --em=criself -I$srcdir/$subdir
+#ld: --shared -m crislinux
+#error: \A[^\n]*\.o[^\n]*relocation R_CRIS_32_GOT_GD with non-zero addend 42 against symbol `tls128'[^\n]*\n[^\n]*Bad value\Z
+
+# Check that non-zero addend on a R_CRIS_32_GOT_GD is flagged as an error.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-55.s b/binutils-2.21/ld/testsuite/ld-cris/tls-err-55.s
new file mode 100644
index 0000000..aadae0d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-55.s
@@ -0,0 +1,8 @@
+ .text
+ .global tlsdsofn2
+ .type tlsdsofn2,@function
+ .p2align 1
+tlsdsofn2:
+ move.d tls128+42:GDGOTREL,$r10
+.Lfe1:
+ .size tlsdsofn2,.Lfe1-tlsdsofn2
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-56.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-56.d
new file mode 100644
index 0000000..2d592a6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-56.d
@@ -0,0 +1,7 @@
+#source: tls-err-56.s
+#as: --pic --no-underscore --em=criself -I$srcdir/$subdir
+#ld: --shared -m crislinux
+#error: \A[^\n]*\.o[^\n]*relocation R_CRIS_32_GOT_GD with non-zero addend 42 against symbol `tls128'[^\n]*\n[^\n]*Bad value\Z
+
+# Check that non-zero addend on a R_CRIS_32_GOT_GD is flagged as an error.
+# The difference to tls-err-55.d is that this one refers to a local symbol.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-56.s b/binutils-2.21/ld/testsuite/ld-cris/tls-err-56.s
new file mode 100644
index 0000000..b8a0443
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-56.s
@@ -0,0 +1,9 @@
+ .include "tls128.s"
+ .text
+ .global tlsdsofn2
+ .type tlsdsofn2,@function
+ .p2align 1
+tlsdsofn2:
+ move.d tls128+42:GDGOTREL,$r10
+.Lfe1:
+ .size tlsdsofn2,.Lfe1-tlsdsofn2
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-62.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-62.d
new file mode 100644
index 0000000..4434120
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-62.d
@@ -0,0 +1,7 @@
+#source: tls-err-62.s
+#as: --pic --no-underscore --em=criself -I$srcdir/$subdir
+#ld: --shared -m crislinux
+#error: \A[^\n]*\.o[^\n]*relocation R_CRIS_32_GOT_TPREL with non-zero addend 42 against symbol `tls128'[^\n]*\n[^\n]*Bad value\Z
+
+# Check that non-zero addend on a R_CRIS_32_GOT_TPREL is flagged as an
+# error, local symbol.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-62.s b/binutils-2.21/ld/testsuite/ld-cris/tls-err-62.s
new file mode 100644
index 0000000..b378dc5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-62.s
@@ -0,0 +1,9 @@
+ .include "tls128.s"
+ .text
+ .global tlsdsofn2
+ .type tlsdsofn2,@function
+ .p2align 1
+tlsdsofn2:
+ move.d tls128+42:TPOFFGOT,$r10
+.Lfe1:
+ .size tlsdsofn2,.Lfe1-tlsdsofn2
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-65.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-65.d
new file mode 100644
index 0000000..23c880f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-65.d
@@ -0,0 +1,7 @@
+#source: start1.s
+#source: tls-le-12s.s
+#as: --no-underscore --em=criself
+#ld: -m crislinux tmpdir/tls-dso-xz-1.so
+#error: \A[^\n]*\.o,[^\n]*mixup[^\n]*\n[^\n]*Bad value\Z
+
+# R_CRIS_16_TPREL in executable against symbol from DSO.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-67.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-67.d
new file mode 100644
index 0000000..0a0020b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-67.d
@@ -0,0 +1,9 @@
+#source: init.s
+#source: tls-gdgotrelm.s --defsym r=8203
+#as: --no-underscore --em=criself --pic
+#ld: --shared -m crislinux
+#error: \A[^\n]*\.o: In[^\n]*\n[^\n]*truncated[^\n]*\n[^\n]*too many[^\n]*\n[^\n]*\.o: In[^\n]*\n[^\n]*truncated[^\n]*\n[^\n]*too many[^\n]*\n[^\n]*\.o: In[^\n]*\n[^\n]*truncated[^\n]*\n[^\n]*too many[^\n]*\n[^\n]*\.o: In[^\n]*\n[^\n]*truncated[^\n]*\n[^\n]*too many[^\n]*\n[^\n]*\.o: In[^\n]*\n[^\n]*truncated[^\n]*\n[^\n]*too many[^\n]*\n[^\n]*\.o: In[^\n]*\n[^\n]*truncated[^\n]*\n[^\n]*too many[^\n]*\n[^\n]*\.o: In[^\n]*\n[^\n]*truncated[^\n]*\n[^\n]*too many[^\n]*\n[^\n]*\.o: In[^\n]*\n[^\n]*truncated[^\n]*\n[^\n]*too many[^\n]*\n[^\n]*\.o: In[^\n]*\n[^\n]*truncated[^\n]*\n[^\n]*too many[^\n]*\n[^\n]*\.o: In[^\n]*\n[^\n]*truncated[^\n]*\n[^\n]*too many[^\n]*\n[^\n]*\.o: In[^\n]*\n[^\n]*omitted[^\n]*\Z
+
+# Check that the error messages get the right number of appended
+# explanations with default values when bailing out and omitting
+# further error messages for overflows.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-err-77.d b/binutils-2.21/ld/testsuite/ld-cris/tls-err-77.d
new file mode 100644
index 0000000..9c714bf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-err-77.d
@@ -0,0 +1,7 @@
+#source: tls-ie-8e.s
+#source: tls-x.s
+#as: --no-underscore --em=criself
+#ld: --shared -m crislinux
+#error: \A[^\n]*\.o, [^\n]*\n[^\n]*mixup[^\n]*\n[^\n]*Invalid operation\Z
+
+# Check that a R_CRIS_32_IE in input to a DSO is flagged as an error.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-gc-68.d b/binutils-2.21/ld/testsuite/ld-cris/tls-gc-68.d
new file mode 100644
index 0000000..60fcc3b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-gc-68.d
@@ -0,0 +1,33 @@
+#source: start1.s
+#source: tls-x.s
+#source: tls-local-58.s
+#as: --pic --no-underscore --em=criself -I$srcdir/$subdir
+#ld: -m crislinux --gc-sections
+#objdump: -s -t -r -p
+
+# An executable with a R_CRIS_32_GOT_GD and a R_CRIS_16_GOT_GD against
+# the same local symbol, gc:ed. Check that we have nothing left but
+# the start symbol and its code. Can't get rid of the GOT just yet.
+
+.*: file format elf32-cris
+
+Program Header:
+ LOAD off 0x0+ vaddr 0x0+80000 paddr 0x0+80000 align 2\*\*13
+ filesz 0x0+78 memsz 0x0+78 flags r-x
+ LOAD off 0x0+78 vaddr 0x0+82078 paddr 0x0+82078 align 2\*\*13
+ filesz 0x0+c memsz 0x0+c flags rw-
+private flags = 0:
+
+SYMBOL TABLE:
+0+80074 l d .text 0+ .text
+0+82078 l d .got 0+ .got
+0+82078 l O .got 0+ _GLOBAL_OFFSET_TABLE_
+0+80074 g .text 0+ _start
+0+82084 g \*ABS\* 0+ __bss_start
+0+82084 g \*ABS\* 0+ _edata
+0+820a0 g \*ABS\* 0+ _end
+
+Contents of section .text:
+ 80074 41b20+ .*
+Contents of section .got:
+ 82078 0+ 0+ 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-gc-69.d b/binutils-2.21/ld/testsuite/ld-cris/tls-gc-69.d
new file mode 100644
index 0000000..e547ba4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-gc-69.d
@@ -0,0 +1,34 @@
+#source: start1.s
+#source: tls-x.s
+#source: tls-local-59.s
+#as: --pic --no-underscore --em=criself -I$srcdir/$subdir
+#ld: -m crislinux --gc-sections
+#objdump: -s -t -r -p
+
+# An executable with a R_CRIS_32_GOT_GD, a R_CRIS_16_GOT_GD, a
+# R_CRIS_32_GOT_TPREL and a R_CRIS_16_GOT_TPREL against the same local
+# symbol, gc:ed. Check that we have nothing left but the start symbol
+# and its code. Can't get rid of the GOT just yet.
+
+.*: file format elf32-cris
+
+Program Header:
+ LOAD off 0x0+ vaddr 0x0+80000 paddr 0x0+80000 align 2\*\*13
+ filesz 0x0+78 memsz 0x0+78 flags r-x
+ LOAD off 0x0+78 vaddr 0x0+82078 paddr 0x0+82078 align 2\*\*13
+ filesz 0x0+c memsz 0x0+c flags rw-
+private flags = 0:
+
+SYMBOL TABLE:
+0+80074 l d .text 0+ .text
+0+82078 l d .got 0+ .got
+0+82078 l O .got 0+ _GLOBAL_OFFSET_TABLE_
+0+80074 g .text 0+ _start
+0+82084 g \*ABS\* 0+ __bss_start
+0+82084 g \*ABS\* 0+ _edata
+0+820a0 g \*ABS\* 0+ _end
+
+Contents of section .text:
+ 80074 41b20+ .*
+Contents of section .got:
+ 82078 0+ 0+ 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-gc-70.d b/binutils-2.21/ld/testsuite/ld-cris/tls-gc-70.d
new file mode 100644
index 0000000..d8d5324
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-gc-70.d
@@ -0,0 +1,34 @@
+#source: start1.s
+#source: tls128.s
+#source: tls-gd-3.s
+#source: tls-x.s
+#as: --no-underscore --em=criself
+#ld: -m crislinux --gc-sections
+#objdump: -s -t -r -p
+
+# An executable with a single R_CRIS_32_GD, with gc. Check that we
+# have nothing left but the start symbol and its code. Can't get rid
+# of the GOT just yet.
+
+.*: file format elf32-cris
+
+Program Header:
+ LOAD off 0x0+ vaddr 0x0+80000 paddr 0x0+80000 align 2\*\*13
+ filesz 0x0+78 memsz 0x0+78 flags r-x
+ LOAD off 0x0+78 vaddr 0x0+82078 paddr 0x0+82078 align 2\*\*13
+ filesz 0x0+c memsz 0x0+c flags rw-
+private flags = 0:
+
+SYMBOL TABLE:
+0+80074 l d .text 0+ .text
+0+82078 l d .got 0+ .got
+0+82078 l O .got 0+ _GLOBAL_OFFSET_TABLE_
+0+80074 g .text 0+ _start
+0+82084 g \*ABS\* 0+ __bss_start
+0+82084 g \*ABS\* 0+ _edata
+0+820a0 g \*ABS\* 0+ _end
+
+Contents of section .text:
+ 80074 41b20+ .*
+Contents of section .got:
+ 82078 0+ 0+ 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-gc-71.d b/binutils-2.21/ld/testsuite/ld-cris/tls-gc-71.d
new file mode 100644
index 0000000..3ee73fc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-gc-71.d
@@ -0,0 +1,32 @@
+#source: tls-gc-71.s
+#source: init.s
+#source: tls128g.s
+#source: tls-hx.s
+#as: --pic --no-underscore --em=criself -I$srcdir/$subdir
+#ld: --shared -m crislinux --gc-sections
+#objdump: -s -t -R -p -T
+
+# DSO with a single R_CRIS_16_DTPREL against a hidden symbol, gc:ed.
+# Check that we still have the other, global, TLS variable.
+
+.*: file format elf32-cris
+#...
+ TLS off .*
+ filesz 0x0+80 memsz 0x0+80 flags r--
+#...
+DYNAMIC SYMBOL TABLE:
+0+18e l d .text 0+ .text
+0+2194 l d .tdata 0+ .tdata
+0+18e g DF .text 0+2 _init
+0+2280 g D \*ABS\* 0+ __bss_start
+0+ g D .tdata 0+80 tls128
+0+2280 g D \*ABS\* 0+ _edata
+0+2280 g D \*ABS\* 0+ _end
+
+DYNAMIC RELOCATION RECORDS \(none\)
+#...
+Contents of section .text:
+ 018e 0f050000 .*
+#...
+Contents of section .got:
+ 2274 14220000 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-gc-71.s b/binutils-2.21/ld/testsuite/ld-cris/tls-gc-71.s
new file mode 100644
index 0000000..a4d6798
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-gc-71.s
@@ -0,0 +1,2 @@
+ .hidden tlsdsofn
+ .include "tls-ld-4.s"
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-gc-75.d b/binutils-2.21/ld/testsuite/ld-cris/tls-gc-75.d
new file mode 100644
index 0000000..2f4257e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-gc-75.d
@@ -0,0 +1,36 @@
+#source: start1.s
+#source: tls-x.s
+#source: tls-gd-2.s
+#source: tls-ie-10.s
+#source: tls-gd-1.s
+#source: tls-ie-8.s
+#as: --pic --no-underscore --em=criself -I$srcdir/$subdir
+#ld: -m crislinux --gc-sections
+#objdump: -s -t -r -p
+
+# An executable with a R_CRIS_32_GOT_GD, a R_CRIS_16_GOT_GD, a
+# R_CRIS_32_GOT_TPREL and a R_CRIS_16_GOT_TPREL against the same
+# symbol, gc:ed. Check that we have proper NPTL/TLS markings and GOT.
+
+.*: file format elf32-cris
+
+Program Header:
+ LOAD off 0x0+ vaddr 0x0+80000 paddr 0x0+80000 align 2\*\*13
+ filesz 0x0+78 memsz 0x0+78 flags r-x
+ LOAD off 0x0+78 vaddr 0x0+82078 paddr 0x0+82078 align 2\*\*13
+ filesz 0x0+c memsz 0x0+c flags rw-
+private flags = 0:
+
+SYMBOL TABLE:
+0+80074 l d .text 0+ .text
+0+82078 l d .got 0+ .got
+0+82078 l O .got 0+ _GLOBAL_OFFSET_TABLE_
+0+80074 g .text 0+ _start
+0+82084 g \*ABS\* 0+ __bss_start
+0+82084 g \*ABS\* 0+ _edata
+0+820a0 g \*ABS\* 0+ _end
+
+Contents of section .text:
+ 80074 41b20+ .*
+Contents of section .got:
+ 82078 0+ 0+ 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-gc-76.d b/binutils-2.21/ld/testsuite/ld-cris/tls-gc-76.d
new file mode 100644
index 0000000..f3c78df
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-gc-76.d
@@ -0,0 +1,38 @@
+#as: --pic --no-underscore --em=criself -I$srcdir/$subdir
+#ld: -m crislinux --gc-sections -u gc76fn
+#source: start1.s
+#source: tls-gc-76.s
+#source: tls-hx.s
+#objdump: -s -t -r -p
+
+# Executable with a single R_CRIS_32_DTPREL, gc:ed away.
+# A GOT reference through a local symbol to a variable survives gc.
+
+
+.*: file format elf32-cris
+
+Program Header:
+ LOAD off 0x0+ vaddr 0x0+80000 paddr 0x0+80000 align 2\*\*13
+ filesz 0x0+80 memsz 0x0+80 flags r-x
+ LOAD off 0x0+80 vaddr 0x0+82080 paddr 0x0+82080 align 2\*\*13
+ filesz 0x0+14 memsz 0x0+14 flags rw-
+private flags = 0:
+
+SYMBOL TABLE:
+0+80074 l d .text 0+ .text
+0+82080 l d .got 0+ .got
+0+82090 l d .data 0+ .data
+0+82090 l O .data 0+4 gc76var
+0+82080 l O .got 0+ _GLOBAL_OFFSET_TABLE_
+0+80074 g .text 0+ _start
+0+82094 g \*ABS\* 0+ __bss_start
+0+82094 g \*ABS\* 0+ _edata
+0+820a0 g \*ABS\* 0+ _end
+0+80078 g F .text 0+6 gc76fn
+
+Contents of section .text:
+ 80074 41b20+ 6fae0c00 0+ .*
+Contents of section .got:
+ 82080 0+ 0+ 0+ 90200800 .*
+Contents of section .data:
+ 82090 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-gc-76.s b/binutils-2.21/ld/testsuite/ld-cris/tls-gc-76.s
new file mode 100644
index 0000000..980defd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-gc-76.s
@@ -0,0 +1,23 @@
+ .text
+ .global gc76fn
+ .type gc76fn,@function
+gc76fn:
+ move.d gc76var:GOT,$r10
+.Lfe:
+ .size gc76fn,.Lfe-gc76fn
+
+ .data
+ .type gc76var,@object
+ .size gc76var,4
+gc76var:
+ .dword 0
+
+ .section .text.2,"ax"
+ .global tlsdsofn
+ .type tlsdsofn,@function
+ .p2align 1
+tlsdsofn:
+ move.d x:DTPREL,$r10
+ move.d x:DTPREL,$r10
+.Lfe2:
+ .size tlsdsofn,.Lfe2-tlsdsofn
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-gc-79.d b/binutils-2.21/ld/testsuite/ld-cris/tls-gc-79.d
new file mode 100644
index 0000000..210f478
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-gc-79.d
@@ -0,0 +1,34 @@
+#source: start1.s
+#source: tls128.s
+#source: tls-ie-8e.s
+#source: tls-x.s
+#as: --no-underscore --em=criself
+#ld: -m crislinux --gc-sections
+#objdump: -s -t -r -p
+
+# An executable with a single R_CRIS_32_IE, with gc. Check that we
+# have nothing left but the start symbol and its code. Can't get rid
+# of the GOT just yet.
+
+.*: file format elf32-cris
+
+Program Header:
+ LOAD off 0x0+ vaddr 0x0+80000 paddr 0x0+80000 align 2\*\*13
+ filesz 0x0+78 memsz 0x0+78 flags r-x
+ LOAD off 0x0+78 vaddr 0x0+82078 paddr 0x0+82078 align 2\*\*13
+ filesz 0x0+c memsz 0x0+c flags rw-
+private flags = 0:
+
+SYMBOL TABLE:
+0+80074 l d .text 0+ .text
+0+82078 l d .got 0+ .got
+0+82078 l O .got 0+ _GLOBAL_OFFSET_TABLE_
+0+80074 g .text 0+ _start
+0+82084 g \*ABS\* 0+ __bss_start
+0+82084 g \*ABS\* 0+ _edata
+0+820a0 g \*ABS\* 0+ _end
+
+Contents of section .text:
+ 80074 41b20+ .*
+Contents of section .got:
+ 82078 0+ 0+ 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-gd-1.d b/binutils-2.21/ld/testsuite/ld-cris/tls-gd-1.d
new file mode 100644
index 0000000..25de32d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-gd-1.d
@@ -0,0 +1,54 @@
+#as: --pic --no-underscore --em=criself
+#ld: --shared -m crislinux
+#source: tls-gd-1.s
+#source: tls128.s
+#source: tls-x.s
+#objdump: -s -t -R -p -T
+
+# DSO with a single R_CRIS_16_GOT_GD. Check that we have proper
+# NPTL/TLS markings and GOT.
+
+.*: file format elf32-cris
+
+Program Header:
+ LOAD off 0x0+ vaddr 0x0+ paddr 0x0+ align 2\*\*13
+ filesz 0x0+1a0 memsz 0x0+1a0 flags r-x
+ LOAD off 0x0+1a0 vaddr 0x0+21a0 paddr 0x0+21a0 align 2\*\*13
+ filesz 0x0+108 memsz 0x0+108 flags rw-
+ DYNAMIC off 0x0+224 vaddr 0x0+2224 paddr 0x0+2224 align 2\*\*2
+ filesz 0x0+70 memsz 0x0+70 flags rw-
+ TLS off 0x0+1a0 vaddr 0x0+21a0 paddr 0x0+21a0 align 2\*\*2
+ filesz 0x0+84 memsz 0x0+84 flags r--
+
+Dynamic Section:
+ HASH 0x0+b4
+ STRTAB 0x0+168
+ SYMTAB 0x0+e8
+ STRSZ 0x0+25
+ SYMENT 0x0+10
+ RELA 0x0+190
+ RELASZ 0x0+c
+ RELAENT 0x0+c
+private flags = 0:
+
+SYMBOL TABLE:
+#...
+0+80 g \.tdata 0+4 x
+#...
+DYNAMIC SYMBOL TABLE:
+#...
+0+80 g D \.tdata 0+4 x
+#...
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+0+22a0 R_CRIS_DTP x
+
+Contents of section \.hash:
+#...
+Contents of section \.text:
+ 019c 5fae0c00 .*
+#...
+Contents of section \.got:
+ 2294 24220+ 0+ 0+ 0+ .*
+ 22a4 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-gd-1.s b/binutils-2.21/ld/testsuite/ld-cris/tls-gd-1.s
new file mode 100644
index 0000000..cd3f021
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-gd-1.s
@@ -0,0 +1,8 @@
+ .text
+ .global tlsdsofn0
+ .type tlsdsofn0,@function
+ .p2align 1
+tlsdsofn0:
+ move.w x:GDGOTREL16,$r10
+.Lfe:
+ .size tlsdsofn0,.Lfe-tlsdsofn0
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-gd-1h.d b/binutils-2.21/ld/testsuite/ld-cris/tls-gd-1h.d
new file mode 100644
index 0000000..2e024bd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-gd-1h.d
@@ -0,0 +1,50 @@
+#as: --pic --no-underscore --em=criself
+#ld: --shared -m crislinux
+#source: tls-gd-1.s
+#source: tls128g.s
+#source: tls-hx.s
+#objdump: -s -t -R -p
+
+# DSO with a single R_CRIS_16_GOT_GD against a hidden symbol. Check
+# that we have proper NPTL/TLS markings and GOT.
+
+.*: file format elf32-cris
+
+Program Header:
+ LOAD off 0x0+ vaddr 0x0+ paddr 0x0+ align 2\*\*13
+ filesz 0x0+1a4 memsz 0x0+1a4 flags r-x
+ LOAD off 0x0+1a4 vaddr 0x0+21a4 paddr 0x0+21a4 align 2\*\*13
+ filesz 0x0+108 memsz 0x0+108 flags rw-
+ DYNAMIC off 0x0+228 vaddr 0x0+2228 paddr 0x0+2228 align 2\*\*2
+ filesz 0x0+70 memsz 0x0+70 flags rw-
+ TLS off 0x0+1a4 vaddr 0x0+21a4 paddr 0x0+21a4 align 2\*\*2
+ filesz 0x0+84 memsz 0x0+84 flags r--
+
+Dynamic Section:
+ HASH 0x0+b4
+ STRTAB 0x0+168
+ SYMTAB 0x0+e8
+ STRSZ 0x0+2a
+ SYMENT 0x0+10
+ RELA 0x0+194
+ RELASZ 0x0+c
+ RELAENT 0x0+c
+private flags = 0:
+
+SYMBOL TABLE:
+#...
+0+80 l \.tdata 0+4 x
+#...
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+0+22a4 R_CRIS_DTP \*ABS\*\+0x0+80
+
+Contents of section \.hash:
+#...
+Contents of section \.text:
+ 01a0 5fae0c00 .*
+#...
+Contents of section \.got:
+ 2298 28220+ 0+ 0+ 0+ .*
+ 22a8 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-gd-2.d b/binutils-2.21/ld/testsuite/ld-cris/tls-gd-2.d
new file mode 100644
index 0000000..2f2546e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-gd-2.d
@@ -0,0 +1,54 @@
+#as: --pic --no-underscore --em=criself
+#ld: --shared -m crislinux
+#source: tls-gd-2.s
+#source: tls128g.s
+#source: tls-x.s
+#objdump: -s -t -R -p -T
+
+# DSO with a single R_CRIS_32_GOT_GD. Check that we have proper
+# NPTL/TLS markings and GOT.
+
+.*: file format elf32-cris
+
+Program Header:
+ LOAD off 0x0+ vaddr 0x0+ paddr 0x0+ align 2\*\*13
+ filesz 0x0+1bc memsz 0x0+1bc flags r-x
+ LOAD off 0x0+1bc vaddr 0x0+21bc paddr 0x0+21bc align 2\*\*13
+ filesz 0x0+108 memsz 0x0+108 flags rw-
+ DYNAMIC off 0x0+240 vaddr 0x0+2240 paddr 0x0+2240 align 2\*\*2
+ filesz 0x0+70 memsz 0x0+70 flags rw-
+ TLS off 0x0+1bc vaddr 0x0+21bc paddr 0x0+21bc align 2\*\*2
+ filesz 0x0+84 memsz 0x0+84 flags r--
+
+Dynamic Section:
+ HASH 0x0+b4
+ STRTAB 0x0+17c
+ SYMTAB 0x0+ec
+ STRSZ 0x0+2c
+ SYMENT 0x0+10
+ RELA 0x0+1a8
+ RELASZ 0x0+c
+ RELAENT 0x0+c
+private flags = 0:
+
+SYMBOL TABLE:
+#...
+0+80 g \.tdata 0+4 x
+#...
+DYNAMIC SYMBOL TABLE:
+#...
+0+80 g D \.tdata 0+4 x
+#...
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+0+22bc R_CRIS_DTP x
+
+Contents of section \.hash:
+#...
+Contents of section \.text:
+ 01b4 6fae0c00 00000000 .*
+#...
+Contents of section \.got:
+ 22b0 40220+ 0+ 0+ 0+ .*
+ 22c0 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-gd-2.s b/binutils-2.21/ld/testsuite/ld-cris/tls-gd-2.s
new file mode 100644
index 0000000..07e8cf5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-gd-2.s
@@ -0,0 +1,9 @@
+ .text
+ .global tlsdsofn2
+ .type tlsdsofn2,@function
+ .p2align 1
+tlsdsofn2:
+ move.d x:GDGOTREL,$r10
+.Lfe2:
+ .size tlsdsofn2,.Lfe2-tlsdsofn2
+
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-gd-2h.d b/binutils-2.21/ld/testsuite/ld-cris/tls-gd-2h.d
new file mode 100644
index 0000000..f63be5c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-gd-2h.d
@@ -0,0 +1,50 @@
+#as: --pic --no-underscore --em=criself
+#ld: --shared -m crislinux
+#source: tls-gd-2.s
+#source: tls128g.s
+#source: tls-hx.s
+#objdump: -s -t -R -p
+
+# DSO with a single R_CRIS_32_GOT_GD against a hidden symbol. Check
+# that we have proper NPTL/TLS markings and GOT.
+
+.*: file format elf32-cris
+
+Program Header:
+ LOAD off 0x0+ vaddr 0x0+ paddr 0x0+ align 2\*\*13
+ filesz 0x0+1a8 memsz 0x0+1a8 flags r-x
+ LOAD off 0x0+1a8 vaddr 0x0+21a8 paddr 0x0+21a8 align 2\*\*13
+ filesz 0x0+108 memsz 0x0+108 flags rw-
+ DYNAMIC off 0x0+22c vaddr 0x0+222c paddr 0x0+222c align 2\*\*2
+ filesz 0x0+70 memsz 0x0+70 flags rw-
+ TLS off 0x0+1a8 vaddr 0x0+21a8 paddr 0x0+21a8 align 2\*\*2
+ filesz 0x0+84 memsz 0x0+84 flags r--
+
+Dynamic Section:
+ HASH 0x0+b4
+ STRTAB 0x0+168
+ SYMTAB 0x0+e8
+ STRSZ 0x0+2a
+ SYMENT 0x0+10
+ RELA 0x0+194
+ RELASZ 0x0+c
+ RELAENT 0x0+c
+private flags = 0:
+
+SYMBOL TABLE:
+#...
+0+80 l \.tdata 0+4 x
+#...
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+0+22a8 R_CRIS_DTP \*ABS\*\+0x0+80
+
+Contents of section \.hash:
+#...
+Contents of section \.text:
+ 01a0 6fae0c00 00000000 .*
+#...
+Contents of section \.got:
+ 229c 2c220+ 0+ 0+ 0+ .*
+ 22ac 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-gd-3.d b/binutils-2.21/ld/testsuite/ld-cris/tls-gd-3.d
new file mode 100644
index 0000000..b2de851
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-gd-3.d
@@ -0,0 +1,39 @@
+#source: start1.s
+#source: tls128.s
+#source: tls-gd-3.s
+#source: tls-x.s
+#as: --no-underscore --em=criself
+#ld: -m crislinux
+#objdump: -d -s -t -r -p
+
+# Check that we have proper NPTL/TLS markings and GOT for an
+# executable with a single R_CRIS_32_GD.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off 0x0+a0 vaddr 0x0+820a0 paddr 0x0+820a0 align 2\*\*2
+ filesz 0x0+84 memsz 0x0+84 flags r--
+private flags = 0:
+#...
+SYMBOL TABLE:
+#...
+0+80 g \.tdata 0+4 x
+#...
+Contents of section \.text:
+#...
+Contents of section \.tdata:
+#...
+Contents of section \.got:
+ 82124 00000000 00000000 00000000 01000000 .*
+ 82134 80000000 .*
+
+Disassembly of section \.text:
+
+00080094 <_start>:
+ 80094: 41b2 moveq 1,\$r11
+#...
+00080098 <tlsfn>:
+ 80098: 6fae 3021 0800 move\.d [^>]+>,\$r10
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-gd-3.s b/binutils-2.21/ld/testsuite/ld-cris/tls-gd-3.s
new file mode 100644
index 0000000..c427a45
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-gd-3.s
@@ -0,0 +1,8 @@
+ .text
+ .global tlsfn
+ .type tlsfn,@function
+ .p2align 1
+tlsfn:
+ move.d x:GD,$r10
+.Lfe1:
+ .size tlsfn,.Lfe1-tlsfn
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-gd-3h.d b/binutils-2.21/ld/testsuite/ld-cris/tls-gd-3h.d
new file mode 100644
index 0000000..78f109d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-gd-3h.d
@@ -0,0 +1,39 @@
+#source: start1.s
+#source: tls128.s
+#source: tls-gd-3.s
+#source: tls-hx.s
+#as: --no-underscore --em=criself
+#ld: -m crislinux
+#objdump: -d -s -t -r -p
+
+# Check that we have proper NPTL/TLS markings and GOT for an
+# executable with a single R_CRIS_32_GD against a hidden symbol.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off 0x0+a0 vaddr 0x0+820a0 paddr 0x0+820a0 align 2\*\*2
+ filesz 0x0+84 memsz 0x0+84 flags r--
+private flags = 0:
+#...
+SYMBOL TABLE:
+#...
+0+80 g \.tdata 0+4 \.hidden x
+#...
+Contents of section \.text:
+#...
+Contents of section \.tdata:
+#...
+Contents of section \.got:
+ 82124 00000000 00000000 00000000 01000000 .*
+ 82134 80000000 .*
+
+Disassembly of section \.text:
+
+00080094 <_start>:
+ 80094: 41b2 moveq 1,\$r11
+#...
+00080098 <tlsfn>:
+ 80098: 6fae 3021 0800 move\.d [^>]+>,\$r10
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-gdgotrelm.s b/binutils-2.21/ld/testsuite/ld-cris/tls-gdgotrelm.s
new file mode 100644
index 0000000..50310ea
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-gdgotrelm.s
@@ -0,0 +1,28 @@
+ .text
+
+ .ifndef r
+ .set r,1
+ .endif
+
+ .macro doit
+ .global tlsdsofngdgotrelm\@
+ .type tlsdsofngdgotrelm\@,@function
+ .p2align 1
+tlsdsofngdgotrelm\@:
+ move.w x\@:GDGOTREL16,$r10
+.Lfe\@:
+ .size tlsdsofngdgotrelm\@,.Lfe\@-tlsdsofngdgotrelm\@
+
+ .globl x\@
+ .section .tdata,"awT",@progbits
+ .p2align 0
+ .type x\@, @object
+ .size x\@, 1
+x\@:
+ .byte 40
+ .previous
+ .endm
+
+ .rept r
+ doit
+ .endr
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-global-74.d b/binutils-2.21/ld/testsuite/ld-cris/tls-global-74.d
new file mode 100644
index 0000000..b70c6a9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-global-74.d
@@ -0,0 +1,28 @@
+#source: start1.s
+#source: tls-x.s
+#source: tls-gd-2.s
+#source: tls-ie-10.s
+#source: tls-gd-1.s
+#source: tls-ie-8.s
+#as: --pic --no-underscore --em=criself -I$srcdir/$subdir
+#ld: -m crislinux
+#objdump: -s -t -r -p
+
+# An executable with a R_CRIS_32_GOT_GD, a R_CRIS_16_GOT_GD, a
+# R_CRIS_32_GOT_TPREL and a R_CRIS_16_GOT_TPREL against the same
+# symbol. Check that we have proper NPTL/TLS markings and GOT.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off .*
+ filesz 0x0+4 memsz 0x0+4 flags r--
+#...
+Contents of section .text:
+ 80094 41b20000 6fae1000 0+ 6fae0c0+ .*
+ 800a4 0+ 5fae1000 5fae0c00 .*
+#...
+Contents of section \.got:
+ 820b4 0+ 0+ 0+ fcffffff .*
+ 820c4 010+ 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-gottprelm.s b/binutils-2.21/ld/testsuite/ld-cris/tls-gottprelm.s
new file mode 100644
index 0000000..2853b31
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-gottprelm.s
@@ -0,0 +1,28 @@
+ .text
+
+ .ifndef r
+ .set r,1
+ .endif
+
+ .macro doit
+ .global tlsdsofngottprelm\@
+ .type tlsdsofngottprelm\@,@function
+ .p2align 1
+tlsdsofngottprelm\@:
+ move.w x\@:TPOFFGOT16,$r10
+.Lfe\@:
+ .size tlsdsofngottprelm\@,.Lfe\@-tlsdsofngottprelm\@
+
+ .globl x\@
+ .section .tdata,"awT",@progbits
+ .p2align 0
+ .type x\@, @object
+ .size x\@, 1
+x\@:
+ .byte 40
+ .previous
+ .endm
+
+ .rept r
+ doit
+ .endr
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-hx.s b/binutils-2.21/ld/testsuite/ld-cris/tls-hx.s
new file mode 100644
index 0000000..8e83164
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-hx.s
@@ -0,0 +1,8 @@
+ .hidden x
+ .globl x
+ .section .tdata,"awT",@progbits
+ .p2align 2
+ .type x, @object
+ .size x, 4
+x:
+ .long 40
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-hx1x2.s b/binutils-2.21/ld/testsuite/ld-cris/tls-hx1x2.s
new file mode 100644
index 0000000..1964504
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-hx1x2.s
@@ -0,0 +1,15 @@
+ .hidden x1
+ .globl x1
+ .section .tdata,"awT",@progbits
+ .p2align 2
+ .type x1, @object
+ .size x1, 4
+x1:
+ .long 41
+ .hidden x2
+ .globl x2
+ .p2align 2
+ .type x2, @object
+ .size x2, 4
+x2:
+ .long 42
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ie-10.d b/binutils-2.21/ld/testsuite/ld-cris/tls-ie-10.d
new file mode 100644
index 0000000..869173c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ie-10.d
@@ -0,0 +1,54 @@
+#as: --pic --no-underscore --em=criself
+#ld: --shared -m crislinux
+#source: tls-ie-10.s
+#source: tls128g.s
+#source: tls-x.s
+#objdump: -s -t -R -p -T
+
+# DSO with a single R_CRIS_32_GOT_TPREL. Check that we have proper
+# NPTL/TLS markings and GOT.
+
+.*: file format elf32-cris
+
+Program Header:
+ LOAD off 0x0+ vaddr 0x0+ paddr 0x0+ align 2\*\*13
+ filesz 0x0+1c0 memsz 0x0+1c0 flags r-x
+ LOAD off 0x0+1c0 vaddr 0x0+21c0 paddr 0x0+21c0 align 2\*\*13
+ filesz 0x0+10c memsz 0x0+10c flags rw-
+ DYNAMIC off 0x0+244 vaddr 0x0+2244 paddr 0x0+2244 align 2\*\*2
+ filesz 0x0+78 memsz 0x0+78 flags rw-
+ TLS off 0x0+1c0 vaddr 0x0+21c0 paddr 0x0+21c0 align 2\*\*2
+ filesz 0x0+84 memsz 0x0+84 flags r--
+
+Dynamic Section:
+ HASH 0x0+b4
+ STRTAB 0x0+17c
+ SYMTAB 0x0+ec
+ STRSZ 0x0+2d
+ SYMENT 0x0+10
+ RELA 0x0+1ac
+ RELASZ 0x0+c
+ RELAENT 0x0+c
+ FLAGS 0x0+10
+private flags = 0:
+
+SYMBOL TABLE:
+#...
+0+80 g \.tdata 0+4 x
+#...
+DYNAMIC SYMBOL TABLE:
+#...
+0+80 g D \.tdata 0+4 x
+#...
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+0+22c8 R_CRIS_32_TPREL x
+
+Contents of section \.hash:
+#...
+Contents of section \.text:
+ 01b8 6fae0c00 00000000 .*
+#...
+Contents of section \.got:
+ 22bc 44220+ 0+ 0+ 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ie-10.s b/binutils-2.21/ld/testsuite/ld-cris/tls-ie-10.s
new file mode 100644
index 0000000..a8667cd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ie-10.s
@@ -0,0 +1,8 @@
+ .text
+ .global tlsdsofn10
+ .type tlsdsofn10,@function
+ .p2align 1
+tlsdsofn10:
+ move.d x:TPOFFGOT,$r10
+.Lfe10:
+ .size tlsdsofn10,.Lfe10-tlsdsofn10
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ie-11.d b/binutils-2.21/ld/testsuite/ld-cris/tls-ie-11.d
new file mode 100644
index 0000000..d326fbe
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ie-11.d
@@ -0,0 +1,60 @@
+#as: --pic --no-underscore --em=criself
+#ld: --shared -m crislinux
+#source: tls-ie-11.s
+#source: tls128g.s
+#source: tls-x1x2.s
+#objdump: -s -t -R -p -T
+
+# DSO with two R_CRIS_32_GOT_TPREL against different symbols. Check
+# that we have proper NPTL/TLS markings and GOT.
+
+.*: file format elf32-cris
+
+Program Header:
+ LOAD off 0x0+ vaddr 0x0+ paddr 0x0+ align 2\*\*13
+ filesz 0x0+1e4 memsz 0x0+1e4 flags r-x
+ LOAD off 0x0+1e4 vaddr 0x0+21e4 paddr 0x0+21e4 align 2\*\*13
+ filesz 0x0+114 memsz 0x0+114 flags rw-
+ DYNAMIC off 0x0+26c vaddr 0x0+226c paddr 0x0+226c align 2\*\*2
+ filesz 0x0+78 memsz 0x0+78 flags rw-
+ TLS off 0x0+1e4 vaddr 0x0+21e4 paddr 0x0+21e4 align 2\*\*2
+ filesz 0x0+88 memsz 0x0+88 flags r--
+
+Dynamic Section:
+ HASH 0x0+b4
+ STRTAB 0x0+190
+ SYMTAB 0x0+f0
+ STRSZ 0x0+2f
+ SYMENT 0x0+10
+ RELA 0x0+1c0
+ RELASZ 0x0+18
+ RELAENT 0x0+c
+ FLAGS 0x0+10
+private flags = 0:
+
+SYMBOL TABLE:
+#...
+0+84 g \.tdata 0+4 x2
+#...
+0+80 g \.tdata 0+4 x1
+#...
+DYNAMIC SYMBOL TABLE:
+#...
+0+84 g D \.tdata 0+4 x2
+#...
+0+80 g D \.tdata 0+4 x1
+#...
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+0+22f0 R_CRIS_32_TPREL x2
+0+22f4 R_CRIS_32_TPREL x1
+
+Contents of section \.hash:
+#...
+Contents of section \.text:
+ 01d8 6fae1000 00006fbe 0c000000 .*
+#...
+Contents of section \.got:
+ 22e4 6c220+ 0+ 0+ 0+ .*
+ 22f4 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ie-11.s b/binutils-2.21/ld/testsuite/ld-cris/tls-ie-11.s
new file mode 100644
index 0000000..236bdbb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ie-11.s
@@ -0,0 +1,9 @@
+ .text
+ .global tlsdsofn
+ .type tlsdsofn,@function
+ .p2align 1
+tlsdsofn:
+ move.d x1:TPOFFGOT,$r10
+ move.d x2:TPOFFGOT,$r11
+.Lfe11:
+ .size tlsdsofn,.Lfe11-tlsdsofn
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ie-78.d b/binutils-2.21/ld/testsuite/ld-cris/tls-ie-78.d
new file mode 100644
index 0000000..3994df8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ie-78.d
@@ -0,0 +1,44 @@
+#source: start1.s
+#source: tls128.s
+#source: tls-ie-8e.s
+#as: --no-underscore --em=criself
+#ld: -m crislinux
+#ld_after_inputfiles: tmpdir/tls-dso-xz-1.so
+#objdump: -s -h -t -T -R -r -p
+
+# Check that we have proper NPTL/TLS markings and GOT for a
+# R_CRIS_32_IE, for an executable, symbol defined elsewhere.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off .*
+ filesz 0x0+80 memsz 0x0+80 flags r--
+
+Dynamic Section:
+ NEEDED tmpdir/tls-dso-xz-1.so
+#...
+private flags = 0:
+#...
+ 8 .got[ ]+0+10 .*
+ CONTENTS, ALLOC, LOAD, DATA
+SYMBOL TABLE:
+#...
+0+ \*UND\* 0+ x
+#...
+DYNAMIC SYMBOL TABLE:
+0+ D \*UND\* 0+ x
+#...
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+0+822d4 R_CRIS_32_TPREL x
+
+Contents of section .interp:
+#...
+Contents of section \.text:
+ 801bc 41b20000 6faed422 08000000 .*
+Contents of section \.tdata:
+#...
+Contents of section \.got:
+ 822c8 48220800 00000000 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ie-8.d b/binutils-2.21/ld/testsuite/ld-cris/tls-ie-8.d
new file mode 100644
index 0000000..3c7769b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ie-8.d
@@ -0,0 +1,54 @@
+#as: --pic --no-underscore --em=criself
+#ld: --shared -m crislinux
+#source: tls-ie-8.s
+#source: tls128g.s
+#source: tls-x.s
+#objdump: -s -t -R -p -T
+
+# DSO with a single R_CRIS_16_GOT_TPREL. Check that we have proper
+# NPTL/TLS markings and GOT.
+
+.*: file format elf32-cris
+
+Program Header:
+ LOAD off 0x0+ vaddr 0x0+ paddr 0x0+ align 2\*\*13
+ filesz 0x0+1b8 memsz 0x0+1b8 flags r-x
+ LOAD off 0x0+1b8 vaddr 0x0+21b8 paddr 0x0+21b8 align 2\*\*13
+ filesz 0x0+10c memsz 0x0+10c flags rw-
+ DYNAMIC off 0x0+23c vaddr 0x0+223c paddr 0x0+223c align 2\*\*2
+ filesz 0x0+78 memsz 0x0+78 flags rw-
+ TLS off 0x0+1b8 vaddr 0x0+21b8 paddr 0x0+21b8 align 2\*\*2
+ filesz 0x0+84 memsz 0x0+84 flags r--
+
+Dynamic Section:
+ HASH 0x0+b4
+ STRTAB 0x0+17c
+ SYMTAB 0x0+ec
+ STRSZ 0x0+2b
+ SYMENT 0x0+10
+ RELA 0x0+1a8
+ RELASZ 0x0+c
+ RELAENT 0x0+c
+ FLAGS 0x0+10
+private flags = 0:
+
+SYMBOL TABLE:
+#...
+0+80 g \.tdata 0+4 x
+#...
+DYNAMIC SYMBOL TABLE:
+#...
+0+80 g D \.tdata 0+4 x
+#...
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+0+22c0 R_CRIS_32_TPREL x
+
+Contents of section \.hash:
+#...
+Contents of section \.text:
+ 01b4 5fae0c00 .*
+#...
+Contents of section \.got:
+ 22b4 3c220+ 0+ 0+ 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ie-8.s b/binutils-2.21/ld/testsuite/ld-cris/tls-ie-8.s
new file mode 100644
index 0000000..ed95939
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ie-8.s
@@ -0,0 +1,8 @@
+ .text
+ .global tlsdsofn
+ .type tlsdsofn,@function
+ .p2align 1
+tlsdsofn:
+ move.w x:TPOFFGOT16,$r10
+.Lfe8:
+ .size tlsdsofn,.Lfe8-tlsdsofn
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ie-8e.s b/binutils-2.21/ld/testsuite/ld-cris/tls-ie-8e.s
new file mode 100644
index 0000000..fc6e121
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ie-8e.s
@@ -0,0 +1,8 @@
+ .text
+ .global tlsfn
+ .type tlsfn,@function
+ .p2align 1
+tlsfn:
+ move.d x:IE,$r10
+.Lfe8:
+ .size tlsfn,.Lfe8-tlsfn
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ie-8e1.d b/binutils-2.21/ld/testsuite/ld-cris/tls-ie-8e1.d
new file mode 100644
index 0000000..0093935
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ie-8e1.d
@@ -0,0 +1,42 @@
+#as: --no-underscore --em=criself
+#ld: -m crislinux
+#source: start1.s
+#source: tls-ie-8e.s
+#source: tls128g.s
+#source: tls-x.s
+#objdump: -d -s -h -t -r -p
+
+# Executable with a single R_CRIS_32_IE, defined in the executable.
+# Check that we have proper NPTL/TLS markings and a constant GOT.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off 0x0+a0 vaddr 0x0+820a0 paddr 0x0+820a0 align 2\*\*2
+ filesz 0x0+84 memsz 0x0+84 flags r--
+private flags = 0:
+
+Sections:
+#...
+ 2 .got[ ]+ 0+10 .*
+ CONTENTS, ALLOC, LOAD, DATA
+
+SYMBOL TABLE:
+#...
+0+80 g \.tdata 0+4 x
+#...
+Contents of section .text:
+ 80094 41b20000 6fae3021 08000000 .*
+#...
+Contents of section .got:
+ 82124 00000000 00000000 00000000 fcffffff .*
+
+Disassembly of section .text:
+
+00080094 <_start>:
+ 80094: 41b2 moveq 1,\$r11
+#...
+00080098 <tlsfn>:
+ 80098: 6fae 3021 0800 move.d 82130 <_GLOBAL_OFFSET_TABLE_\+0xc>,\$r10
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ie-9.d b/binutils-2.21/ld/testsuite/ld-cris/tls-ie-9.d
new file mode 100644
index 0000000..673ae4f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ie-9.d
@@ -0,0 +1,60 @@
+#as: --pic --no-underscore --em=criself
+#ld: --shared -m crislinux
+#source: tls-ie-9.s
+#source: tls128g.s
+#source: tls-x1x2.s
+#objdump: -s -t -R -p -T
+
+# DSO with two R_CRIS_16_GOT_TPREL against different symbols. Check
+# that we have proper NPTL/TLS markings and GOT.
+
+.*: file format elf32-cris
+
+Program Header:
+ LOAD off 0x0+ vaddr 0x0+ paddr 0x0+ align 2\*\*13
+ filesz 0x0+1e0 memsz 0x0+1e0 flags r-x
+ LOAD off 0x0+1e0 vaddr 0x0+21e0 paddr 0x0+21e0 align 2\*\*13
+ filesz 0x0+114 memsz 0x0+114 flags rw-
+ DYNAMIC off 0x0+268 vaddr 0x0+2268 paddr 0x0+2268 align 2\*\*2
+ filesz 0x0+78 memsz 0x0+78 flags rw-
+ TLS off 0x0+1e0 vaddr 0x0+21e0 paddr 0x0+21e0 align 2\*\*2
+ filesz 0x0+88 memsz 0x0+88 flags r--
+
+Dynamic Section:
+ HASH 0x0+b4
+ STRTAB 0x0+190
+ SYMTAB 0x0+f0
+ STRSZ 0x0+30
+ SYMENT 0x0+10
+ RELA 0x0+1c0
+ RELASZ 0x0+18
+ RELAENT 0x0+c
+ FLAGS 0x0+10
+private flags = 0:
+
+SYMBOL TABLE:
+#...
+0+84 g \.tdata 0+4 x2
+#...
+0+80 g \.tdata 0+4 x1
+#...
+DYNAMIC SYMBOL TABLE:
+#...
+0+84 g D \.tdata 0+4 x2
+#...
+0+80 g D \.tdata 0+4 x1
+#...
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+0+22ec R_CRIS_32_TPREL x2
+0+22f0 R_CRIS_32_TPREL x1
+
+Contents of section \.hash:
+#...
+Contents of section \.text:
+ 01d8 5fae1000 5fbe0c00 .*
+#...
+Contents of section \.got:
+ 22e0 68220+ 0+ 0+ 0+ .*
+ 22f0 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ie-9.s b/binutils-2.21/ld/testsuite/ld-cris/tls-ie-9.s
new file mode 100644
index 0000000..69cecd7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ie-9.s
@@ -0,0 +1,9 @@
+ .text
+ .global tlsdsofn9
+ .type tlsdsofn9,@function
+ .p2align 1
+tlsdsofn9:
+ move.w x1:TPOFFGOT16,$r10
+ move.w x2:TPOFFGOT16,$r11
+.Lfe9:
+ .size tlsdsofn9,.Lfe9-tlsdsofn9
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-js1.d b/binutils-2.21/ld/testsuite/ld-cris/tls-js1.d
new file mode 100644
index 0000000..2a9223e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-js1.d
@@ -0,0 +1,32 @@
+#source: dsov32-1.s
+#source: tls-ld-4.s
+#source: dsov32-2.s
+#source: expdyn1.s
+#source: tls-hx.s
+#source: dso-1.s
+#as: --pic --no-underscore --em=criself --march=v32
+#ld: --shared -m crislinux
+#readelf: -a
+
+# DSO with a R_CRIS_16_DTPREL and a R_CRIS_32_PLT_PCREL. The .got.plt
+# byte index (a) and .rela.plt item index (b) are in sync as b=a/4-3
+# *except* when there's a R_CRIS_DTPMOD, because while the relocated
+# contents goes in .got.plt, the relocation goes in .rela.got, not
+# .rela.plt. And, it'd cover 8 bytes in .got.plt, not 4 bytes.
+# Making sure .rela.plt has the right contents; no R_CRIS_NONE entries.
+
+#...
+ .* .got[ ]+PROGBITS[ ]+0+2348 0+348 0+20 04 WA 0 0 4
+#...
+Relocation section '\.rela\.dyn' at offset 0x20c contains 2 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+00002354 0000001e R_CRIS_DTPMOD 00000000
+00002364 0000050a R_CRIS_GLOB_DAT 00002368 expobj \+ 0
+
+Relocation section '\.rela\.plt' at offset 0x224 contains 2 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+0000235c 0000030b R_CRIS_JUMP_SLOT 00000296 dsofn4 \+ 0
+00002360 00000c0b R_CRIS_JUMP_SLOT 000002ae dsofn \+ 0
+
+There are no unwind sections in this file.
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ld-4.d b/binutils-2.21/ld/testsuite/ld-cris/tls-ld-4.d
new file mode 100644
index 0000000..2ac3d71
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ld-4.d
@@ -0,0 +1,50 @@
+#as: --pic --no-underscore --em=criself
+#ld: --shared -m crislinux
+#source: tls-ld-4.s
+#source: tls128g.s
+#source: tls-hx.s
+#objdump: -s -t -R -p
+
+# DSO with a single R_CRIS_16_DTPREL against a hidden symbol. Check
+# that we have proper NPTL/TLS markings and GOT.
+
+.*: file format elf32-cris
+
+Program Header:
+ LOAD off 0x0+ vaddr 0x0+ paddr 0x0+ align 2\*\*13
+ filesz 0x0+1a4 memsz 0x0+1a4 flags r-x
+ LOAD off 0x0+1a4 vaddr 0x0+21a4 paddr 0x0+21a4 align 2\*\*13
+ filesz 0x0+108 memsz 0x0+108 flags rw-
+ DYNAMIC off 0x0+228 vaddr 0x0+2228 paddr 0x0+2228 align 2\*\*2
+ filesz 0x0+70 memsz 0x0+70 flags rw-
+ TLS off 0x0+1a4 vaddr 0x0+21a4 paddr 0x0+21a4 align 2\*\*2
+ filesz 0x0+84 memsz 0x0+84 flags r--
+
+Dynamic Section:
+ HASH 0x0+b4
+ STRTAB 0x0+168
+ SYMTAB 0x0+e8
+ STRSZ 0x0+29
+ SYMENT 0x0+10
+ RELA 0x0+194
+ RELASZ 0x0+c
+ RELAENT 0x0+c
+private flags = 0:
+
+SYMBOL TABLE:
+#...
+0+80 l \.tdata 0+4 x
+#...
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+0+22a4 R_CRIS_DTPMOD \*ABS\*
+
+Contents of section \.hash:
+#...
+Contents of section \.text:
+ 01a0 5fae8000 .*
+#...
+Contents of section \.got:
+ 2298 28220+ 0+ 0+ 0+ .*
+ 22a8 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ld-4.s b/binutils-2.21/ld/testsuite/ld-cris/tls-ld-4.s
new file mode 100644
index 0000000..7990689
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ld-4.s
@@ -0,0 +1,8 @@
+ .text
+ .global tlsdsofn
+ .type tlsdsofn,@function
+ .p2align 1
+tlsdsofn:
+ move.w x:DTPREL16,$r10
+.Lfe1:
+ .size tlsdsofn,.Lfe1-tlsdsofn
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ld-5.d b/binutils-2.21/ld/testsuite/ld-cris/tls-ld-5.d
new file mode 100644
index 0000000..c2ea111
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ld-5.d
@@ -0,0 +1,51 @@
+#as: --pic --no-underscore --em=criself
+#ld: --shared -m crislinux
+#source: tls-ld-5.s
+#source: tls128g.s
+#source: tls-hx1x2.s
+#objdump: -s -t -R -p
+
+# DSO with two R_CRIS_16_DTPRELs against different hidden symbols.
+# Check that we have proper NPTL/TLS markings and GOT.
+
+.*: file format elf32-cris
+
+Program Header:
+ LOAD off 0x0+ vaddr 0x0+ paddr 0x0+ align 2\*\*13
+ filesz 0x0+1a8 memsz 0x0+1a8 flags r-x
+ LOAD off 0x0+1a8 vaddr 0x0+21a8 paddr 0x0+21a8 align 2\*\*13
+ filesz 0x0+10c memsz 0x0+10c flags rw-
+ DYNAMIC off 0x0+230 vaddr 0x0+2230 paddr 0x0+2230 align 2\*\*2
+ filesz 0x0+70 memsz 0x0+70 flags rw-
+ TLS off 0x0+1a8 vaddr 0x0+21a8 paddr 0x0+21a8 align 2\*\*2
+ filesz 0x0+88 memsz 0x0+88 flags r--
+
+Dynamic Section:
+ HASH 0x0+b4
+ STRTAB 0x0+168
+ SYMTAB 0x0+e8
+ STRSZ 0x0+29
+ SYMENT 0x0+10
+ RELA 0x0+194
+ RELASZ 0x0+c
+ RELAENT 0x0+c
+private flags = 0:
+
+SYMBOL TABLE:
+#...
+0+84 l \.tdata 0+4 x2
+0+80 l \.tdata 0+4 x1
+#...
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+0+22ac R_CRIS_DTPMOD \*ABS\*
+
+Contents of section \.hash:
+#...
+Contents of section \.text:
+ 01a0 5fae8000 5fbe8400 .*
+#...
+Contents of section \.got:
+ 22a0 30220+ 0+ 0+ 0+ .*
+ 22b0 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ld-5.s b/binutils-2.21/ld/testsuite/ld-cris/tls-ld-5.s
new file mode 100644
index 0000000..910a79d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ld-5.s
@@ -0,0 +1,10 @@
+ .text
+ .global tlsdsofn
+ .type tlsdsofn,@function
+ .p2align 1
+tlsdsofn:
+ move.w x1:DTPREL16,$r10
+ move.w x2:DTPREL16,$r11
+.Lfe5:
+ .size tlsdsofn,.Lfe5-tlsdsofn
+
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ld-6.d b/binutils-2.21/ld/testsuite/ld-cris/tls-ld-6.d
new file mode 100644
index 0000000..0b54114
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ld-6.d
@@ -0,0 +1,50 @@
+#as: --pic --no-underscore --em=criself -I$srcdir/$subdir
+#ld: --shared -m crislinux
+#source: tls128g.s
+#source: tls-ld-6.s
+#source: tls-hx.s
+#objdump: -s -t -R -p
+
+# DSO with a single R_CRIS_32_DTPREL against a hidden symbol. Check
+# that we have proper NPTL/TLS markings and GOT.
+
+.*: file format elf32-cris
+
+Program Header:
+ LOAD off 0x0+ vaddr 0x0+ paddr 0x0+ align 2\*\*13
+ filesz 0x0+1a8 memsz 0x0+1a8 flags r-x
+ LOAD off 0x0+1a8 vaddr 0x0+21a8 paddr 0x0+21a8 align 2\*\*13
+ filesz 0x0+108 memsz 0x0+108 flags rw-
+ DYNAMIC off 0x0+22c vaddr 0x0+222c paddr 0x0+222c align 2\*\*2
+ filesz 0x0+70 memsz 0x0+70 flags rw-
+ TLS off 0x0+1a8 vaddr 0x0+21a8 paddr 0x0+21a8 align 2\*\*2
+ filesz 0x0+84 memsz 0x0+84 flags r--
+
+Dynamic Section:
+ HASH 0x0+b4
+ STRTAB 0x0+168
+ SYMTAB 0x0+e8
+ STRSZ 0x0+29
+ SYMENT 0x0+10
+ RELA 0x0+194
+ RELASZ 0x0+c
+ RELAENT 0x0+c
+private flags = 0:
+
+SYMBOL TABLE:
+#...
+0+80 l \.tdata 0+4 x
+#...
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+0+22a8 R_CRIS_DTPMOD \*ABS\*
+
+Contents of section \.hash:
+#...
+Contents of section \.text:
+ 01a0 6fae8000 00000000 .*
+#...
+Contents of section \.got:
+ 229c 2c220+ 0+ 0+ 0+ .*
+ 22ac 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ld-6.s b/binutils-2.21/ld/testsuite/ld-cris/tls-ld-6.s
new file mode 100644
index 0000000..d0a98f6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ld-6.s
@@ -0,0 +1,8 @@
+ .text
+ .global tlsdsofn
+ .type tlsdsofn,@function
+ .p2align 1
+tlsdsofn:
+ move.d x:DTPREL,$r10
+.Lfe6:
+ .size tlsdsofn,.Lfe6-tlsdsofn
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ld-7.d b/binutils-2.21/ld/testsuite/ld-cris/tls-ld-7.d
new file mode 100644
index 0000000..c537050
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ld-7.d
@@ -0,0 +1,51 @@
+#as: --pic --no-underscore --em=criself
+#ld: --shared -m crislinux
+#source: tls-ld-7.s
+#source: tls128g.s
+#source: tls-hx1x2.s
+#objdump: -s -t -R -p
+
+# DSO with two R_CRIS_32_DTPRELs against different hidden symbols.
+# Check that we have proper NPTL/TLS markings and GOT.
+
+.*: file format elf32-cris
+
+Program Header:
+ LOAD off 0x0+ vaddr 0x0+ paddr 0x0+ align 2\*\*13
+ filesz 0x0+1ac memsz 0x0+1ac flags r-x
+ LOAD off 0x0+1ac vaddr 0x0+21ac paddr 0x0+21ac align 2\*\*13
+ filesz 0x0+10c memsz 0x0+10c flags rw-
+ DYNAMIC off 0x0+234 vaddr 0x0+2234 paddr 0x0+2234 align 2\*\*2
+ filesz 0x0+70 memsz 0x0+70 flags rw-
+ TLS off 0x0+1ac vaddr 0x0+21ac paddr 0x0+21ac align 2\*\*2
+ filesz 0x0+88 memsz 0x0+88 flags r--
+
+Dynamic Section:
+ HASH 0x0+b4
+ STRTAB 0x0+168
+ SYMTAB 0x0+e8
+ STRSZ 0x0+29
+ SYMENT 0x0+10
+ RELA 0x0+194
+ RELASZ 0x0+c
+ RELAENT 0x0+c
+private flags = 0:
+
+SYMBOL TABLE:
+#...
+0+84 l \.tdata 0+4 x2
+0+80 l \.tdata 0+4 x1
+#...
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+0+22b0 R_CRIS_DTPMOD \*ABS\*
+
+Contents of section \.hash:
+#...
+Contents of section \.text:
+ 01a0 6fae80+ 0+6fbe 840+ .*
+#...
+Contents of section \.got:
+ 22a4 34220+ 0+ 0+ 0+ .*
+ 22b4 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ld-7.s b/binutils-2.21/ld/testsuite/ld-cris/tls-ld-7.s
new file mode 100644
index 0000000..c64c1db
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ld-7.s
@@ -0,0 +1,9 @@
+ .text
+ .global tlsdsofn
+ .type tlsdsofn,@function
+ .p2align 1
+tlsdsofn:
+ move.d x1:DTPREL,$r10
+ move.d x2:DTPREL,$r11
+.Lfe7:
+ .size tlsdsofn,.Lfe7-tlsdsofn
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ldgd-14.d b/binutils-2.21/ld/testsuite/ld-cris/tls-ldgd-14.d
new file mode 100644
index 0000000..4634dd2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ldgd-14.d
@@ -0,0 +1,71 @@
+#source: tls128g.s
+#source: tls-ld-5.s
+#source: tls-gd-1.s
+#source: tls-ldgd-14.s
+#source: tls-x.s
+#source: tls-z.s
+#source: tls-hx1x2.s
+#as: --pic --no-underscore --em=criself
+#ld: --shared -m crislinux
+#objdump: -s -t -R -p -T
+
+# Check that we have proper NPTL/TLS markings and GOT for two
+# R_CRIS_16_GOT_GD and two R_CRIS_16_DTPRELs against different
+# variables in a DSO.
+
+.*: file format elf32-cris
+
+Program Header:
+ LOAD off 0x0+ vaddr 0x0+ paddr 0x0+ align 2\*\*13
+ filesz 0x0+230 memsz 0x0+230 flags r-x
+ LOAD off 0x0+230 vaddr 0x0+2230 paddr 0x0+2230 align 2\*\*13
+ filesz 0x0+124 memsz 0x0+124 flags rw-
+ DYNAMIC off 0x0+2c0 vaddr 0x0+22c0 paddr 0x0+22c0 align 2\*\*2
+ filesz 0x0+70 memsz 0x0+70 flags rw-
+ TLS off 0x0+230 vaddr 0x0+2230 paddr 0x0+2230 align 2\*\*2
+ filesz 0x0+90 memsz 0x0+90 flags r--
+
+Dynamic Section:
+ HASH 0x0+b4
+ STRTAB 0x0+1b8
+ SYMTAB 0x0+f8
+ STRSZ 0x0+42
+ SYMENT 0x0+10
+ RELA 0x0+1fc
+ RELASZ 0x0+24
+ RELAENT 0x0+c
+private flags = 0:
+
+SYMBOL TABLE:
+#...
+0+8c l \.tdata 0+4 x2
+#...
+0+88 l \.tdata 0+4 x1
+#...
+0+80 g \.tdata 0+4 x
+#...
+0+84 g \.tdata 0+4 z
+#...
+DYNAMIC SYMBOL TABLE:
+#...
+0+80 g D \.tdata 0+4 x
+#...
+0+84 g D \.tdata 0+4 z
+#...
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+0+233c R_CRIS_DTPMOD \*ABS\*
+0+2344 R_CRIS_DTP x
+0+234c R_CRIS_DTP z
+
+Contents of section \.hash:
+#...
+Contents of section \.text:
+ 0220 5fae8800 5fbe8c00 5fae1400 5fae1c00 .*
+Contents of section .tdata:
+#...
+Contents of section \.got:
+ 2330 c0220+ 0+ 0+ 0+ .*
+ 2340 0+ 0+ 0+ 0+ .*
+ 2350 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ldgd-14.s b/binutils-2.21/ld/testsuite/ld-cris/tls-ldgd-14.s
new file mode 100644
index 0000000..3de8f87
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ldgd-14.s
@@ -0,0 +1,8 @@
+ .text
+ .global tlsdsofn14
+ .type tlsdsofn14,@function
+ .p2align 1
+tlsdsofn14:
+ move.w z:GDGOTREL16,$r10
+.Lfe14:
+ .size tlsdsofn14,.Lfe14-tlsdsofn14
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ldgd-15.d b/binutils-2.21/ld/testsuite/ld-cris/tls-ldgd-15.d
new file mode 100644
index 0000000..8583bd2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ldgd-15.d
@@ -0,0 +1,72 @@
+#source: tls128g.s
+#source: tls-ld-7.s
+#source: tls-gd-2.s
+#source: tls-ldgd-15.s
+#source: tls-x.s
+#source: tls-z.s
+#source: tls-hx1x2.s
+#as: --pic --no-underscore --em=criself
+#ld: --shared -m crislinux
+#objdump: -s -t -R -p -T
+
+# Check that we have proper NPTL/TLS markings and GOT for two
+# R_CRIS_32_GOT_GD and two R_CRIS_32_DTPRELs against different
+# variables in a DSO.
+
+.*: file format elf32-cris
+
+Program Header:
+ LOAD off 0x0+ vaddr 0x0+ paddr 0x0+ align 2\*\*13
+ filesz 0x0+23c memsz 0x0+23c flags r-x
+ LOAD off 0x0+23c vaddr 0x0+223c paddr 0x0+223c align 2\*\*13
+ filesz 0x0+124 memsz 0x0+124 flags rw-
+ DYNAMIC off 0x0+2cc vaddr 0x0+22cc paddr 0x0+22cc align 2\*\*2
+ filesz 0x0+70 memsz 0x0+70 flags rw-
+ TLS off 0x0+23c vaddr 0x0+223c paddr 0x0+223c align 2\*\*2
+ filesz 0x0+90 memsz 0x0+90 flags r--
+
+Dynamic Section:
+ HASH 0x0+b4
+ STRTAB 0x0+1b8
+ SYMTAB 0x0+f8
+ STRSZ 0x0+42
+ SYMENT 0x0+10
+ RELA 0x0+1fc
+ RELASZ 0x0+24
+ RELAENT 0x0+c
+private flags = 0:
+
+SYMBOL TABLE:
+#...
+0+8c l \.tdata 0+4 x2
+#...
+0+88 l \.tdata 0+4 x1
+#...
+0+80 g \.tdata 0+4 x
+#...
+0+84 g \.tdata 0+4 z
+#...
+DYNAMIC SYMBOL TABLE:
+#...
+0+80 g D \.tdata 0+4 x
+#...
+0+84 g D \.tdata 0+4 z
+#...
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+0+2348 R_CRIS_DTPMOD \*ABS\*
+0+2350 R_CRIS_DTP x
+0+2358 R_CRIS_DTP z
+
+Contents of section \.hash:
+#...
+Contents of section \.text:
+ 0220 6fae8800 00006fbe 8c000000 6fae1400 .*
+ 0230 0+ 6fae1c00 0+ .*
+Contents of section .tdata:
+#...
+Contents of section \.got:
+ 233c cc220+ 0+ 0+ 0+ .*
+ 234c 0+ 0+ 0+ 0+ .*
+ 235c 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ldgd-15.s b/binutils-2.21/ld/testsuite/ld-cris/tls-ldgd-15.s
new file mode 100644
index 0000000..2b55243
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ldgd-15.s
@@ -0,0 +1,9 @@
+ .text
+ .global tlsdsofn14
+ .type tlsdsofn14,@function
+ .p2align 1
+tlsdsofn14:
+ move.d z:GDGOTREL,$r10
+.Lfe15:
+ .size tlsdsofn14,.Lfe15-tlsdsofn14
+
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ldgde-14.d b/binutils-2.21/ld/testsuite/ld-cris/tls-ldgde-14.d
new file mode 100644
index 0000000..9eada3e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ldgde-14.d
@@ -0,0 +1,61 @@
+#source: start1.s
+#source: tls128.s
+#source: tls-ld-5.s
+#source: tls-gd-1.s
+#source: tls-ldgd-14.s
+#source: tls-x.s
+#source: tls-z.s
+#source: tls-hx1x2.s
+#as: --pic --no-underscore --em=criself
+#ld: -m crislinux
+#objdump: -d -s -h -t -r -p
+
+# Check that we have proper NPTL/TLS markings and GOT for two
+# R_CRIS_16_GOT_GD and two R_CRIS_16_DTPRELs against different
+# variables, for an executable.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off 0x0+a8 vaddr 0x0+820a8 paddr 0x0+820a8 align 2\*\*2
+ filesz 0x0+90 memsz 0x0+90 flags r--
+private flags = 0:
+#...
+ 1 .tdata .*
+ CONTENTS.*
+ 2 .got .*
+ CONTENTS.*
+SYMBOL TABLE:
+#...
+0+80 g \.tdata 0+4 x
+#...
+0+8c g .tdata 00000004 \.hidden x2
+#...
+0+84 g \.tdata 0+4 z
+#...
+0+88 g .tdata 00000004 \.hidden x1
+#...
+Contents of section \.text:
+#...
+Contents of section \.tdata:
+#...
+Contents of section \.got:
+ 82138 00000000 00000000 00000000 01000000 .*
+ 82148 00000000 01000000 80000000 01000000 .*
+ 82158 84000000 .*
+
+Disassembly of section \.text:
+
+00080094 <_start>:
+ 80094: 41b2 moveq 1,\$r11
+#...
+00080098 <tlsdsofn>:
+ 80098: 5fae 8800 move\.w 0x88,\$r10
+ 8009c: 5fbe 8c00 move\.w 0x8c,\$r11
+
+000800a0 <tlsdsofn0>:
+ 800a0: 5fae 1400 move\.w 0x14,\$r10
+
+000800a4 <tlsdsofn14>:
+ 800a4: 5fae 1c00 move\.w 0x1c,\$r10
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ldgde-15.d b/binutils-2.21/ld/testsuite/ld-cris/tls-ldgde-15.d
new file mode 100644
index 0000000..d5e993d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ldgde-15.d
@@ -0,0 +1,61 @@
+#source: start1.s
+#source: tls128.s
+#source: tls-ld-7.s
+#source: tls-gd-2.s
+#source: tls-ldgd-15.s
+#source: tls-x.s
+#source: tls-z.s
+#source: tls-hx1x2.s
+#as: --pic --no-underscore --em=criself
+#ld: -m crislinux
+#objdump: -d -s -h -t -r -p
+
+# Check that we have proper NPTL/TLS markings and GOT for two
+# R_CRIS_32_GOT_GD and two R_CRIS_32_DTPRELs against different
+# variables, for an executable.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off 0x0+b4 vaddr 0x0+820b4 paddr 0x0+820b4 align 2\*\*2
+ filesz 0x0+90 memsz 0x0+90 flags r--
+private flags = 0:
+#...
+ 1 .tdata .*
+ CONTENTS.*
+ 2 .got .*
+ CONTENTS.*
+SYMBOL TABLE:
+#...
+0+80 g \.tdata 0+4 x
+#...
+0+8c g .tdata 00000004 \.hidden x2
+#...
+0+84 g \.tdata 0+4 z
+#...
+0+88 g .tdata 00000004 \.hidden x1
+#...
+Contents of section \.text:
+#...
+Contents of section \.tdata:
+#...
+Contents of section \.got:
+ 82144 00000000 00000000 00000000 01000000 .*
+ 82154 00000000 01000000 80000000 01000000 .*
+ 82164 84000000 .*
+
+Disassembly of section \.text:
+
+00080094 <_start>:
+ 80094: 41b2 moveq 1,\$r11
+#...
+00080098 <tlsdsofn>:
+ 80098: 6fae 8800 0000 move.d 88 <x1>,\$r10
+ 8009e: 6fbe 8c00 0000 move.d 8c <x2>,\$r11
+000800a4 <tlsdsofn2>:
+ 800a4: 6fae 1400 0000 move.d 14 <tls128\+0x14>,\$r10
+#...
+000800ac <tlsdsofn14>:
+ 800ac: 6fae 1c00 0000 move.d 1c <tls128\+0x1c>,\$r10
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ldgdex-14.d b/binutils-2.21/ld/testsuite/ld-cris/tls-ldgdex-14.d
new file mode 100644
index 0000000..83d94a7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ldgdex-14.d
@@ -0,0 +1,54 @@
+#source: start1.s
+#source: tls128.s
+#source: tls-ld-5.s
+#source: tls-gd-1.s
+#source: tls-ldgd-14.s
+#source: tls-hx1x2.s
+#as: --pic --no-underscore --em=criself
+#ld: -m crislinux tmpdir/tls-dso-xz-1.so
+#objdump: -s -h -t -T -R -r -p
+
+# Check that we have proper NPTL/TLS markings and GOT for two
+# R_CRIS_16_GOT_GD and two R_CRIS_16_DTPRELs against different
+# variables, for an executable, GD symbols defined elsewhere.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off .*
+ filesz 0x0+88 memsz 0x0+88 flags r--
+
+Dynamic Section:
+ NEEDED tmpdir/tls-dso-xz-1.so
+#...
+private flags = 0:
+#...
+ 8 .got .*
+ CONTENTS.*
+SYMBOL TABLE:
+#...
+0+ \*UND\* 0+ x
+#...
+0+ \*UND\* 0+ z
+#...
+DYNAMIC SYMBOL TABLE:
+0+ D \*UND\* 0+ x
+0+ D \*UND\* 0+ z
+#...
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+0008230c R_CRIS_DTP x
+00082314 R_CRIS_DTP z
+
+Contents of section .interp:
+#...
+Contents of section \.text:
+ 801dc 41b20000 5fae8000 5fbe8400 5fae1400 .*
+ 801ec 5fae1c00 .*
+Contents of section \.tdata:
+#...
+Contents of section \.got:
+ 822f8 78220800 0+ 0+ 010+ .*
+ 82308 0+ 0+ 0+ 0+ .*
+ 82318 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ldgdex-15.d b/binutils-2.21/ld/testsuite/ld-cris/tls-ldgdex-15.d
new file mode 100644
index 0000000..fca739b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ldgdex-15.d
@@ -0,0 +1,54 @@
+#source: start1.s
+#source: tls128.s
+#source: tls-ld-7.s
+#source: tls-gd-2.s
+#source: tls-ldgd-15.s
+#source: tls-hx1x2.s
+#as: --pic --no-underscore --em=criself
+#ld: -m crislinux tmpdir/tls-dso-xz-1.so
+#objdump: -s -h -t -T -R -r -p
+
+# Check that we have proper NPTL/TLS markings and GOT for two
+# R_CRIS_32_GOT_GD and two R_CRIS_32_DTPRELs against different
+# variables, for an executable, GD symbols defined elsewhere.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off .*
+ filesz 0x0+88 memsz 0x0+88 flags r--
+
+Dynamic Section:
+ NEEDED tmpdir/tls-dso-xz-1.so
+#...
+private flags = 0:
+#...
+ 8 .got .*
+ CONTENTS.*
+SYMBOL TABLE:
+#...
+0+ \*UND\* 0+ x
+#...
+0+ \*UND\* 0+ z
+#...
+DYNAMIC SYMBOL TABLE:
+0+ D \*UND\* 0+ x
+0+ D \*UND\* 0+ z
+#...
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00082318 R_CRIS_DTP x
+00082320 R_CRIS_DTP z
+
+Contents of section \.interp:
+#...
+Contents of section \.text:
+ 801dc 41b20000 6fae8000 00006fbe 84000000 .*
+ 801ec 6fae1400 00000000 6fae1c00 00000000 .*
+Contents of section \.tdata:
+#...
+Contents of section \.got:
+ 82304 84220800 0+ 0+ 010+ .*
+ 82314 0+ 0+ 0+ 0+ .*
+ 82324 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ldgdx-14.d b/binutils-2.21/ld/testsuite/ld-cris/tls-ldgdx-14.d
new file mode 100644
index 0000000..53fde9c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ldgdx-14.d
@@ -0,0 +1,55 @@
+#source: tls128.s
+#source: tls-ld-5.s
+#source: tls-gd-1.s
+#source: tls-ldgd-14.s
+#source: tls-hx1x2.s
+#as: --pic --no-underscore --em=criself
+#ld: --shared -m crislinux tmpdir/tls-dso-xz-1.so
+#objdump: -s -h -t -T -R -r -p
+
+# Check that we have proper NPTL/TLS markings and GOT for two
+# R_CRIS_16_GOT_GD and two R_CRIS_16_DTPRELs against different
+# variables in a DSO, GD symbols defined elsewhere.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off .*
+ filesz 0x0+88 memsz 0x0+88 flags r--
+
+Dynamic Section:
+ NEEDED tmpdir/tls-dso-xz-1.so
+#...
+private flags = 0:
+#...
+ 7 .got .*
+ CONTENTS.*
+SYMBOL TABLE:
+#...
+0+ \*UND\* 0+ x
+#...
+0+ \*UND\* 0+ z
+#...
+DYNAMIC SYMBOL TABLE:
+#...
+0+ D \*UND\* 0+ x
+#...
+0+ D \*UND\* 0+ z
+#...
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00002338 R_CRIS_DTPMOD \*ABS\*
+00002340 R_CRIS_DTP x
+00002348 R_CRIS_DTP z
+
+Contents of section \.hash:
+#...
+Contents of section \.text:
+ 021c 5fae8000 5fbe8400 5fae1400 5fae1c00 .*
+Contents of section .tdata:
+#...
+Contents of section \.got:
+ 232c b4220+ 0+ 0+ 0+ .*
+ 233c 0+ 0+ 0+ 0+ .*
+ 234c 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ldgdx-15.d b/binutils-2.21/ld/testsuite/ld-cris/tls-ldgdx-15.d
new file mode 100644
index 0000000..8b0af3f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ldgdx-15.d
@@ -0,0 +1,56 @@
+#source: tls128.s
+#source: tls-ld-7.s
+#source: tls-gd-2.s
+#source: tls-ldgd-15.s
+#source: tls-hx1x2.s
+#as: --pic --no-underscore --em=criself
+#ld: --shared -m crislinux tmpdir/tls-dso-xz-1.so
+#objdump: -s -h -t -T -R -r -p
+
+# Check that we have proper NPTL/TLS markings and GOT for two
+# R_CRIS_32_GOT_GD and two R_CRIS_32_DTPRELs against different
+# variables in a DSO, GD symbols defined elsewhere.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off .*
+ filesz 0x0+88 memsz 0x0+88 flags r--
+
+Dynamic Section:
+ NEEDED tmpdir/tls-dso-xz-1.so
+#...
+private flags = 0:
+#...
+ 7 .got .*
+ CONTENTS.*
+SYMBOL TABLE:
+#...
+0+ \*UND\* 0+ x
+#...
+0+ \*UND\* 0+ z
+#...
+DYNAMIC SYMBOL TABLE:
+#...
+0+ D \*UND\* 0+ x
+#...
+0+ D \*UND\* 0+ z
+#...
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00002344 R_CRIS_DTPMOD \*ABS\*
+0000234c R_CRIS_DTP x
+00002354 R_CRIS_DTP z
+
+Contents of section \.hash:
+#...
+Contents of section \.text:
+ 021c 6fae8000 00006fbe 84000000 6fae1400 .*
+ 022c 0+ 6fae1c00 0+ .*
+Contents of section .tdata:
+#...
+Contents of section \.got:
+ 2338 c0220+ 0+ 0+ 0+ .*
+ 2348 0+ 0+ 0+ 0+ .*
+ 2358 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-le-12.d b/binutils-2.21/ld/testsuite/ld-cris/tls-le-12.d
new file mode 100644
index 0000000..d24b21b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-le-12.d
@@ -0,0 +1,38 @@
+#source: start1.s
+#source: tls128.s
+#source: tls-le-12.s
+#source: tls-z.s
+#as: --no-underscore --em=criself -I$srcdir/$subdir
+#ld: -m crislinux
+#objdump: -d -s -t -r -p -h
+
+# Check that we have proper NPTL/TLS markings and no GOT for an
+# executable with a single R_CRIS_32_TPREL.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off 0x0+a0 vaddr 0x0+820a0 paddr 0x0+820a0 align 2\*\*2
+ filesz 0x0+84 memsz 0x0+84 flags r--
+private flags = 0:
+#...
+ 1 .tdata .*
+ CONTENTS.*
+SYMBOL TABLE:
+#...
+0+80 g \.tdata 0+4 z
+#...
+Contents of section \.text:
+#...
+Contents of section \.tdata:
+#...
+
+Disassembly of section \.text:
+
+00080094 <_start>:
+ 80094: 41b2 moveq 1,\$r11
+#...
+00080098 <tlsfn12>:
+ 80098: 6fae fcff ffff move\.d 0xfffffffc,\$r10
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-le-12.s b/binutils-2.21/ld/testsuite/ld-cris/tls-le-12.s
new file mode 100644
index 0000000..18974ef
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-le-12.s
@@ -0,0 +1,8 @@
+ .text
+ .global tlsfn12
+ .type tlsfn12,@function
+ .p2align 1
+tlsfn12:
+ move.d z:TPOFF,$r10
+.Lfe12:
+ .size tlsfn12,.Lfe12-tlsfn12
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-le-12s.d b/binutils-2.21/ld/testsuite/ld-cris/tls-le-12s.d
new file mode 100644
index 0000000..96570e9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-le-12s.d
@@ -0,0 +1,38 @@
+#source: start1.s
+#source: tls-le-12s.s
+#source: tls-z.s
+#source: tls128.s
+#as: --no-underscore --em=criself -I$srcdir/$subdir
+#ld: -m crislinux
+#objdump: -d -s -t -r -p -h
+
+# Check that we have proper NPTL/TLS markings and no GOT for an
+# executable with a single R_CRIS_16_TPREL.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off 0x0+9c vaddr 0x0+8209c paddr 0x0+8209c align 2\*\*2
+ filesz 0x0+84 memsz 0x0+84 flags r--
+private flags = 0:
+#...
+ 1 .tdata .*
+ CONTENTS.*
+SYMBOL TABLE:
+#...
+0+ g \.tdata 0+4 z
+#...
+Contents of section \.text:
+#...
+Contents of section \.tdata:
+#...
+
+Disassembly of section \.text:
+
+00080094 <_start>:
+ 80094: 41b2 moveq 1,\$r11
+#...
+00080098 <tlsfn12>:
+ 80098: 7fac 7cff movs\.w -132,\$r10
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-le-12s.s b/binutils-2.21/ld/testsuite/ld-cris/tls-le-12s.s
new file mode 100644
index 0000000..12e00e1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-le-12s.s
@@ -0,0 +1,8 @@
+ .text
+ .global tlsfn12
+ .type tlsfn12,@function
+ .p2align 1
+tlsfn12:
+ movs.w z:TPOFF16,$r10
+.Lfe12:
+ .size tlsfn12,.Lfe12-tlsfn12
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-le-13.d b/binutils-2.21/ld/testsuite/ld-cris/tls-le-13.d
new file mode 100644
index 0000000..3d969ac
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-le-13.d
@@ -0,0 +1,41 @@
+#source: start1.s
+#source: tls128.s
+#source: tls-le-13.s
+#source: tls-x1x2.s
+#as: --no-underscore --em=criself -I$srcdir/$subdir
+#ld: -m crislinux
+#objdump: -d -s -t -r -p -h
+
+# Check that we have proper NPTL/TLS markings and GOT for an
+# executable with a single R_CRIS_32_TPREL.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off 0x0+a4 vaddr 0x0+820a4 paddr 0x0+820a4 align 2\*\*2
+ filesz 0x0+88 memsz 0x0+88 flags r--
+private flags = 0:
+#...
+ 1 .tdata .*
+ CONTENTS.*
+SYMBOL TABLE:
+#...
+0+84 g \.tdata 0+4 x2
+#...
+0+80 g \.tdata 0+4 x1
+#...
+Contents of section \.text:
+#...
+Contents of section \.tdata:
+#...
+
+Disassembly of section \.text:
+
+00080094 <_start>:
+ 80094: 41b2 moveq 1,\$r11
+#...
+00080098 <tlsfn13>:
+ 80098: 6fae f8ff ffff move\.d 0xfffffff8,\$r10
+ 8009e: 6fae fcff ffff move\.d 0xfffffffc,\$r10
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-le-13.s b/binutils-2.21/ld/testsuite/ld-cris/tls-le-13.s
new file mode 100644
index 0000000..a1183ea
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-le-13.s
@@ -0,0 +1,9 @@
+ .text
+ .global tlsfn13
+ .type tlsfn13,@function
+ .p2align 1
+tlsfn13:
+ move.d x1:TPOFF,$r10
+ move.d x2:TPOFF,$r10
+.Lfe13:
+ .size tlsfn13,.Lfe13-tlsfn13
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-le-13s.d b/binutils-2.21/ld/testsuite/ld-cris/tls-le-13s.d
new file mode 100644
index 0000000..146c913
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-le-13s.d
@@ -0,0 +1,40 @@
+#source: start1.s
+#source: tls128.s
+#source: tls-le-13s.s
+#source: tls-x1x2.s
+#as: --no-underscore --em=criself -I$srcdir/$subdir
+#ld: -m crislinux
+#objdump: -d -s -t -r -p -h
+
+# Check that we have proper NPTL/TLS markings and GOT for an
+# executable with two R_CRIS_16_TPREL, different symbols.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off 0x0+a0 vaddr 0x0+820a0 paddr 0x0+820a0 align 2\*\*2
+ filesz 0x0+88 memsz 0x0+88 flags r--
+private flags = 0:
+#...
+ 1 .tdata .*
+ CONTENTS.*
+SYMBOL TABLE:
+#...
+0+84 g \.tdata 0+4 x2
+#...
+0+80 g \.tdata 0+4 x1
+#...
+Contents of section \.text:
+#...
+Contents of section \.tdata:
+#...
+
+Disassembly of section \.text:
+
+00080094 <_start>:
+ 80094: 41b2 moveq 1,\$r11
+#...
+00080098 <tlsfn13>:
+ 80098: 5fae f8ff move\.w 0xfff8,\$r10
+ 8009c: 5fae fcff move\.w 0xfffc,\$r10
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-le-13s.s b/binutils-2.21/ld/testsuite/ld-cris/tls-le-13s.s
new file mode 100644
index 0000000..09e4966
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-le-13s.s
@@ -0,0 +1,9 @@
+ .text
+ .global tlsfn13
+ .type tlsfn13,@function
+ .p2align 1
+tlsfn13:
+ move.w x1:TPOFF16,$r10
+ move.w x2:TPOFF16,$r10
+.Lfe13s:
+ .size tlsfn13,.Lfe13s-tlsfn13
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-legd-16.d b/binutils-2.21/ld/testsuite/ld-cris/tls-legd-16.d
new file mode 100644
index 0000000..092d39e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-legd-16.d
@@ -0,0 +1,59 @@
+#source: start1.s
+#source: tls128.s
+#source: tls-le-13.s
+#source: tls-gd-3.s
+#source: tls-legd-16.s
+#source: tls-x.s
+#source: tls-z.s
+#source: tls-x1x2.s
+#as: --no-underscore --em=criself
+#ld: -m crislinux
+#objdump: -d -s -h -t -r -p
+
+# Check that we have proper NPTL/TLS markings and GOT for an
+# executable with two R_CRIS_32_TPREL and two R_CRIS_32_GD, different
+# symbols.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off 0x0+b4 vaddr 0x0+820b4 paddr 0x0+820b4 align 2\*\*2
+ filesz 0x0+90 memsz 0x0+90 flags r--
+private flags = 0:
+
+#...
+ 2 .got .*
+ CONTENTS.*
+SYMBOL TABLE:
+#...
+0+80 g \.tdata 0+4 x
+#...
+0+8c g \.tdata 0+4 x2
+#...
+0+84 g \.tdata 0+4 z
+#...
+0+88 g \.tdata 0+4 x1
+#...
+Contents of section \.text:
+#...
+Contents of section \.got:
+ 82144 0+ 0+ 0+ 010+ .*
+ 82154 80+ 010+ 840+ .*
+
+Disassembly of section \.text:
+
+00080094 <_start>:
+ 80094: 41b2 moveq 1,\$r11
+#...
+00080098 <tlsfn13>:
+ 80098: 6fae f8ff ffff move.d 0xfffffff8,\$r10
+ 8009e: 6fae fcff ffff move.d 0xfffffffc,\$r10
+
+000800a4 <tlsfn>:
+ 800a4: 6fae 5021 0800 move.d 82150 <_GLOBAL_OFFSET_TABLE_\+0xc>,\$r10
+#...
+
+000800ac <tlsfn16>:
+ 800ac: 6fae 5821 0800 move.d 82158 <_GLOBAL_OFFSET_TABLE_\+0x14>,\$r10
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-legd-16.s b/binutils-2.21/ld/testsuite/ld-cris/tls-legd-16.s
new file mode 100644
index 0000000..3716082
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-legd-16.s
@@ -0,0 +1,8 @@
+ .text
+ .global tlsfn16
+ .type tlsfn15,@function
+ .p2align 1
+tlsfn16:
+ move.d z:GD,$r10
+.Lfe16:
+ .size tlsfn16,.Lfe16-tlsfn16
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-legd-17.d b/binutils-2.21/ld/testsuite/ld-cris/tls-legd-17.d
new file mode 100644
index 0000000..49f2d45
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-legd-17.d
@@ -0,0 +1,58 @@
+#source: start1.s
+#source: tls128.s
+#source: tls-le-13s.s
+#source: tls-gd-2.s --pic
+#source: tls-ldgd-14.s --pic
+#source: tls-x.s
+#source: tls-z.s
+#source: tls-x1x2.s
+#as: --no-underscore --em=criself
+#ld: -m crislinux
+#objdump: -d -s -h -t -r -p
+
+# Check that we have proper NPTL/TLS markings and GOT for an
+# executable with two R_CRIS_16_TPREL a R_CRIS_32_GOT_GD and a
+# R_CRIS_16_GOT_GD, different symbols.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off 0x0+ac vaddr 0x0+820ac paddr 0x0+820ac align 2\*\*2
+ filesz 0x0+90 memsz 0x0+90 flags r--
+private flags = 0:
+
+#...
+ 2 .got .*
+ CONTENTS.*
+SYMBOL TABLE:
+#...
+0+80 g \.tdata 0+4 x
+#...
+0+8c g \.tdata 0+4 x2
+#...
+0+84 g \.tdata 0+4 z
+#...
+0+88 g \.tdata 0+4 x1
+#...
+Contents of section \.text:
+#...
+Contents of section \.got:
+ 8213c 0+ 0+ 0+ 010+ .*
+ 8214c 80+ 010+ 840+ .*
+
+Disassembly of section \.text:
+
+00080094 <_start>:
+ 80094: 41b2 moveq 1,\$r11
+#...
+00080098 <tlsfn13>:
+ 80098: 5fae f8ff move.w 0xfff8,\$r10
+ 8009c: 5fae fcff move.w 0xfffc,\$r10
+
+000800a0 <tlsdsofn2>:
+ 800a0: 6fae 0c00 0000 move.d c <tls128\+0xc>,\$r10
+#...
+
+000800a8 <tlsdsofn14>:
+ 800a8: 5fae 1400 move.w 0x14,\$r10
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-legdx-16.d b/binutils-2.21/ld/testsuite/ld-cris/tls-legdx-16.d
new file mode 100644
index 0000000..1e3bc3e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-legdx-16.d
@@ -0,0 +1,52 @@
+#source: start1.s
+#source: tls128.s
+#source: tls-le-13.s
+#source: tls-gd-3.s
+#source: tls-legd-16.s
+#source: tls-x1x2.s
+#as: --no-underscore --em=criself
+#ld: -m crislinux tmpdir/tls-dso-xz-1.so
+#objdump: -s -h -t -T -R -r -p
+
+# Check that we have proper NPTL/TLS markings and GOT for an
+# executable with two R_CRIS_32_TPREL and two R_CRIS_32_GD, different
+# symbols, GD symbols defined elsewhere.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off .*
+ filesz 0x0+88 memsz 0x0+88 flags r--
+Dynamic Section:
+ NEEDED tmpdir/tls-dso-xz-1.so
+#...
+private flags = 0:
+
+#...
+ 8 .got .*
+ CONTENTS.*
+SYMBOL TABLE:
+#...
+0+ \*UND\* 0+ x
+#...
+0+ \*UND\* 0+ z
+#...
+DYNAMIC SYMBOL TABLE:
+0+ D \*UND\* 0+ x
+0+ D \*UND\* 0+ z
+#...
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00082310 R_CRIS_DTP x
+00082318 R_CRIS_DTP z
+
+Contents of section .interp:
+#...
+Contents of section \.text:
+ 801dc 41b20000 6faef8ff ffff6fae fcffffff .*
+ 801ec 6fae1023 08000000 6fae1823 08000000 .*
+#...
+Contents of section \.got:
+ 82304 84220800 0+ 0+ 0+ .*
+ 82314 0+ 0+ 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-legdx-17.d b/binutils-2.21/ld/testsuite/ld-cris/tls-legdx-17.d
new file mode 100644
index 0000000..1d1c5ea
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-legdx-17.d
@@ -0,0 +1,54 @@
+#source: start1.s
+#source: tls128.s
+#source: tls-le-13s.s
+#source: tls-gd-2.s --pic
+#source: tls-ldgd-14.s --pic
+#source: tls-x1x2.s
+#as: --no-underscore --em=criself
+#ld: -m crislinux tmpdir/tls-dso-xz-1.so
+#objdump: -s -h -t -T -R -r -p
+
+# Check that we have proper NPTL/TLS markings and GOT for an
+# executable with two R_CRIS_16_TPREL a R_CRIS_32_GOT_GD and a
+# R_CRIS_16_GOT_GD, different symbols, GD symbols defined elsewhere.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off .*
+ filesz 0x0+88 memsz 0x0+88 flags r--
+Dynamic Section:
+ NEEDED tmpdir/tls-dso-xz-1.so
+#...
+private flags = 0:
+
+#...
+ 8 .got .*
+ CONTENTS.*
+SYMBOL TABLE:
+#...
+0+ \*UND\* 0+ x
+#...
+0+ \*UND\* 0+ z
+#...
+DYNAMIC SYMBOL TABLE:
+#...
+0+ D \*UND\* 0+ x
+#...
+0+ D \*UND\* 0+ z
+#...
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00082308 R_CRIS_DTP x
+00082310 R_CRIS_DTP z
+
+Contents of section .interp:
+#...
+Contents of section \.text:
+ 801dc 41b20000 5faef8ff 5faefcff 6fae0c00 .*
+ 801ec 00000000 5fae1400 .*
+#...
+Contents of section \.got:
+ 822fc 7c220800 0+ 0+ 0+ .*
+ 8230c 0+ 0+ 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-leie-18.d b/binutils-2.21/ld/testsuite/ld-cris/tls-leie-18.d
new file mode 100644
index 0000000..edff43c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-leie-18.d
@@ -0,0 +1,47 @@
+#source: start1.s
+#source: tls128.s
+#source: tls-le-13s.s
+#source: tls-ie-9.s --pic
+#source: tls-x1x2.s
+#as: --no-underscore --em=criself
+#ld: -m crislinux
+#objdump: -d -s -h -t -r -p
+
+# Check that we have proper NPTL/TLS markings and GOT for an
+# executable with two R_CRIS_16_TPREL and two R_CRIS_16_GOT_TPREL, no
+# same reloc to same symbol; two different symbols.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off 0x0+a8 vaddr 0x0+820a8 paddr 0x0+820a8 align 2\*\*2
+ filesz 0x0+88 memsz 0x0+88 flags r--
+private flags = 0:
+#...
+ 2 .got .*
+ CONTENTS.*
+SYMBOL TABLE:
+#...
+0+84 g \.tdata 0+4 x2
+#...
+0+80 g \.tdata 0+4 x1
+#...
+Contents of section \.text:
+#...
+Contents of section \.got:
+ 82130 0+ 0+ 0+ fcffffff .*
+ 82140 f8ffffff .*
+
+Disassembly of section \.text:
+
+00080094 <_start>:
+ 80094: 41b2 moveq 1,\$r11
+#...
+00080098 <tlsfn13>:
+ 80098: 5fae f8ff move.w 0xfff8,\$r10
+ 8009c: 5fae fcff move.w 0xfffc,\$r10
+
+000800a0 <tlsdsofn9>:
+ 800a0: 5fae 1000 move.w 0x10,\$r10
+ 800a4: 5fbe 0c00 move.w 0xc,\$r11
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-leie-19.d b/binutils-2.21/ld/testsuite/ld-cris/tls-leie-19.d
new file mode 100644
index 0000000..6cf69b2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-leie-19.d
@@ -0,0 +1,58 @@
+#source: start1.s
+#source: tls128.s
+#source: tls-leie-19.s
+#source: tls-le-12.s
+#source: tls-ie-11.s --pic
+#source: tls-hx1x2.s
+#source: tls-x.s
+#source: tls-z.s
+#as: --no-underscore --em=criself
+#ld: -m crislinux
+#objdump: -d -s -h -t -r -p
+
+# Check that we have proper NPTL/TLS markings and GOT for an
+# executable with two R_CRIS_32_TPREL and two R_CRIS_32_GOT_TPREL,
+# four different symbols.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off 0x0+b4 vaddr 0x0+820b4 paddr 0x0+820b4 align 2\*\*2
+ filesz 0x0+90 memsz 0x0+90 flags r--
+private flags = 0:
+#...
+ 2 .got .*
+ CONTENTS.*
+SYMBOL TABLE:
+#...
+0+88 g .tdata 0+4 x
+#...
+0+84 g \.tdata 0+4 \.hidden x2
+#...
+0+8c g .tdata 0+4 z
+#...
+0+80 g \.tdata 0+4 \.hidden x1
+#...
+Contents of section \.text:
+#...
+Contents of section \.got:
+ 82144 0+ 0+ 0+ f4ffffff .*
+ 82154 f0ffffff .*
+
+Disassembly of section \.text:
+
+00080094 <_start>:
+ 80094: 41b2 moveq 1,\$r11
+#...
+00080098 <tlsfn19>:
+ 80098: 6fae f8ff ffff move.d 0xfffffff8,\$r10
+#...
+
+000800a0 <tlsfn12>:
+ 800a0: 6fae fcff ffff move.d 0xfffffffc,\$r10
+#...
+
+000800a8 <tlsdsofn>:
+ 800a8: 6fae 1000 0000 move.d 10 <tls128\+0x10>,\$r10
+ 800ae: 6fbe 0c00 0000 move.d c <tls128\+0xc>,\$r11
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-leie-19.s b/binutils-2.21/ld/testsuite/ld-cris/tls-leie-19.s
new file mode 100644
index 0000000..a3a65ce
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-leie-19.s
@@ -0,0 +1,8 @@
+ .text
+ .global tlsfn19
+ .type tlsfn19,@function
+ .p2align 1
+tlsfn19:
+ move.d x:TPOFF,$r10
+.Lfe19:
+ .size tlsfn19,.Lfe19-tlsfn19
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-local-54.d b/binutils-2.21/ld/testsuite/ld-cris/tls-local-54.d
new file mode 100644
index 0000000..7c0deb6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-local-54.d
@@ -0,0 +1,27 @@
+#source: tls-local-54.s
+#as: --pic --no-underscore --em=criself -I$srcdir/$subdir
+#ld: --shared -m crislinux
+#objdump: -s -t -R -p -T
+
+# A DSO with a R_CRIS_32_GOT_GD against a local symbol.
+# Check that we have proper NPTL/TLS markings and GOT.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off .*
+ filesz 0x00000080 memsz 0x00000080 flags r--
+#...
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00002288 R_CRIS_DTP \*ABS\*\+0x0000002a
+
+Contents of section .hash:
+#...
+Contents of section \.text:
+ 0184 6fae0c00 00000000 .*
+#...
+Contents of section \.got:
+ 227c 0c220000 0+ 0+ 0+ .*
+ 228c 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-local-54.s b/binutils-2.21/ld/testsuite/ld-cris/tls-local-54.s
new file mode 100644
index 0000000..2bbe756
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-local-54.s
@@ -0,0 +1,3 @@
+ .include "tls-gd-2.s"
+ .include "tls128.s"
+ .set x, tls128+42
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-local-57.d b/binutils-2.21/ld/testsuite/ld-cris/tls-local-57.d
new file mode 100644
index 0000000..cce2486
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-local-57.d
@@ -0,0 +1,23 @@
+#source: start1.s
+#source: tls-x.s
+#source: tls-local-57.s
+#as: --pic --no-underscore --em=criself -I$srcdir/$subdir
+#ld: -m crislinux
+#objdump: -s -t -r -p
+
+# An executable with a R_CRIS_32_GOT_GD against a local symbol.
+# Check that we have proper NPTL/TLS markings and GOT.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off .*
+ filesz 0x00000084 memsz 0x00000084 flags r--
+#...
+Contents of section .text:
+ 80094 41b20000 6fae0c00 0+ .*
+#...
+Contents of section \.got:
+ 82124 0+ 0+ 0+ 010+ .*
+ 82134 040+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-local-57.s b/binutils-2.21/ld/testsuite/ld-cris/tls-local-57.s
new file mode 100644
index 0000000..7c524fc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-local-57.s
@@ -0,0 +1,3 @@
+ .include "tls128.s"
+ .set x,tls128
+ .include "tls-gd-2.s"
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-local-58.d b/binutils-2.21/ld/testsuite/ld-cris/tls-local-58.d
new file mode 100644
index 0000000..d7926bd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-local-58.d
@@ -0,0 +1,24 @@
+#source: start1.s
+#source: tls-x.s
+#source: tls-local-58.s
+#as: --pic --no-underscore --em=criself -I$srcdir/$subdir
+#ld: -m crislinux
+#objdump: -s -t -r -p
+
+# An executable with a R_CRIS_32_GOT_GD and a R_CRIS_16_GOT_GD against
+# the same local symbol. Check that we have proper NPTL/TLS markings
+# and GOT.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off .*
+ filesz 0x00000084 memsz 0x00000084 flags r--
+#...
+Contents of section .text:
+ 80094 41b20000 6fae0c00 00005fae 0c000000 .*
+#...
+Contents of section \.got:
+ 82128 0+ 0+ 0+ 010+ .*
+ 82138 040+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-local-58.s b/binutils-2.21/ld/testsuite/ld-cris/tls-local-58.s
new file mode 100644
index 0000000..ceb2f69
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-local-58.s
@@ -0,0 +1,4 @@
+ .include "tls128.s"
+ .set x,tls128
+ .include "tls-gd-2.s"
+ .include "tls-gd-1.s"
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-local-59.d b/binutils-2.21/ld/testsuite/ld-cris/tls-local-59.d
new file mode 100644
index 0000000..c37584b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-local-59.d
@@ -0,0 +1,25 @@
+#source: start1.s
+#source: tls-x.s
+#source: tls-local-59.s
+#as: --pic --no-underscore --em=criself -I$srcdir/$subdir
+#ld: -m crislinux
+#objdump: -s -t -r -p
+
+# An executable with a R_CRIS_32_GOT_GD, a R_CRIS_16_GOT_GD, a
+# R_CRIS_32_GOT_TPREL and a R_CRIS_16_GOT_TPREL against the same local
+# symbol. Check that we have proper NPTL/TLS markings and GOT.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off .*
+ filesz 0x00000084 memsz 0x00000084 flags r--
+#...
+Contents of section .text:
+ 80094 41b20000 6fae1000 00006fae 0c000000 .*
+ 800a4 5fae1000 5fae0c00 .*
+#...
+Contents of section \.got:
+ 82130 0+ 0+ 0+ 80ffffff .*
+ 82140 010+ 040+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-local-59.s b/binutils-2.21/ld/testsuite/ld-cris/tls-local-59.s
new file mode 100644
index 0000000..9a0d4e4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-local-59.s
@@ -0,0 +1,6 @@
+ .include "tls128.s"
+ .set x,tls128
+ .include "tls-gd-2.s"
+ .include "tls-ie-10.s"
+ .include "tls-gd-1.s"
+ .include "tls-ie-8.s"
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-local-60.d b/binutils-2.21/ld/testsuite/ld-cris/tls-local-60.d
new file mode 100644
index 0000000..958a296
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-local-60.d
@@ -0,0 +1,33 @@
+#source: tls-x.s
+#source: tls-local-59.s
+#as: --pic --no-underscore --em=criself -I$srcdir/$subdir
+#ld: -m crislinux --shared
+#objdump: -s -t -r -p -R -T
+
+# A DSO with a R_CRIS_32_GOT_GD, a R_CRIS_16_GOT_GD, a
+# R_CRIS_32_GOT_TPREL and a R_CRIS_16_GOT_TPREL against the same local
+# symbol. Check that we have proper NPTL/TLS markings and GOT.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off .*
+ filesz 0x00000084 memsz 0x00000084 flags r--
+#...
+ FLAGS 0x00000010
+#...
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+0000231c R_CRIS_32_TPREL \*ABS\*\+0x0+4
+00002320 R_CRIS_DTP \*ABS\*\+0x0+4
+
+Contents of section \.hash:
+#...
+Contents of section \.text:
+ 0200 6fae1000 00006fae 0c000000 5fae1000 .*
+ 0210 5fae0c00 .*
+#...
+Contents of section \.got:
+ 2310 98220+ 0+ 0+ 040+ .*
+ 2320 0+ 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-local-61.d b/binutils-2.21/ld/testsuite/ld-cris/tls-local-61.d
new file mode 100644
index 0000000..bfa4a25
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-local-61.d
@@ -0,0 +1,32 @@
+#source: tls-local-59.s
+#as: --pic --no-underscore --em=criself -I$srcdir/$subdir
+#ld: -m crislinux --shared
+#objdump: -s -t -r -p -R -T
+
+# A DSO with a R_CRIS_32_GOT_GD, a R_CRIS_16_GOT_GD, a
+# R_CRIS_32_GOT_TPREL and a R_CRIS_16_GOT_TPREL against the same local
+# symbol. Check that we have proper NPTL/TLS markings and GOT.
+
+.*: file format elf32-cris
+
+Program Header:
+#...
+ TLS off .*
+ filesz 0x00000080 memsz 0x00000080 flags r--
+#...
+ FLAGS 0x00000010
+#...
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00002304 R_CRIS_32_TPREL \*ABS\*
+00002308 R_CRIS_DTP \*ABS\*
+
+Contents of section \.hash:
+#...
+Contents of section \.text:
+ 01ec 6fae1000 00006fae 0c000000 5fae1000 .*
+ 01fc 5fae0c00 .*
+#...
+Contents of section \.got:
+ 22f8 80220+ 0+ 0+ 0+ .*
+ 2308 0+ 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-local-63.d b/binutils-2.21/ld/testsuite/ld-cris/tls-local-63.d
new file mode 100644
index 0000000..f628097
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-local-63.d
@@ -0,0 +1,31 @@
+#source: tls-ie-8.s --pic
+#source: tls-hx.s
+#as: --no-underscore --em=criself
+#ld: -m crislinux --shared
+#readelf: -a -x 6 -x 8 -x 5
+
+# A R_CRIS_16_GOT_TPREL in a DSO against a hidden symbol. Make sure
+# the relocation, GOT, .text and .tdata have the right contents.
+
+#...
+Relocation section '.rela.dyn' at offset 0x.* contains 1 entries:
+ Offset Info Type Sym.Value Sym. Name \+ Addend
+00002210 0000001c R_CRIS_32_TPREL[ ]+00+
+
+There are no unwind sections in this file.
+
+Symbol table '.dynsym' contains 7 entries:
+ Num: Value Size Type Bind Vis Ndx Name
+#...
+Symbol table '.symtab' contains 16 entries:
+#...
+ .: 00000000 +4 +TLS +LOCAL +DEFAULT +6 x
+#...
+Hex dump of section '.text':
+ 0x00000184 5fae0c00 .*
+#...
+Hex dump of section '.tdata':
+ 0x00002188 280+ .*
+#...
+Hex dump of section '.got':
+ 0x0+2204 8c210000 0+ 0+ 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-local-64.d b/binutils-2.21/ld/testsuite/ld-cris/tls-local-64.d
new file mode 100644
index 0000000..f813858
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-local-64.d
@@ -0,0 +1,37 @@
+#source: tls-ie-8.s --pic
+#source: tls128.s
+#source: tls-hx.s
+#as: --no-underscore --em=criself
+#ld: -m crislinux --shared
+#readelf: -a -x 6 -x 8 -x 5
+
+# A R_CRIS_16_GOT_TPREL in a DSO against a hidden symbol, at an offset
+# into .data. Make sure the relocation, GOT, .text and .tdata have
+# the right contents.
+
+#...
+Relocation section '.rela.dyn' at offset 0x.* contains 1 entries:
+ Offset Info Type Sym.Value Sym. Name \+ Addend
+00002290 0000001c R_CRIS_32_TPREL[ ]+0+80
+
+There are no unwind sections in this file.
+
+Symbol table '.dynsym' contains 7 entries:
+ Num: Value Size Type Bind Vis Ndx Name
+#...
+Symbol table '.symtab' contains 17 entries:
+#...
+ ..: 00000080 +4 +TLS +LOCAL +DEFAULT +6 x
+#...
+Hex dump of section '.text':
+ 0x00000184 5fae0c00 .*
+#...
+Hex dump of section '.tdata':
+ 0x00002188 2f0+ 0+ 0+ 0+ .*
+ 0x00002198 0+ 0+ 0+ 0+ .*
+#...
+ 0x000021f8 0+ 0+ 0+ 0+ .*
+ 0x00002208 280+ .*
+#...
+Hex dump of section '.got':
+ 0x0+2284 0c220000 0+ 0+ 80+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ok-30.d b/binutils-2.21/ld/testsuite/ld-cris/tls-ok-30.d
new file mode 100644
index 0000000..94ed194
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ok-30.d
@@ -0,0 +1,29 @@
+#source: tls-gdgotrelm.s --defsym r=8191
+#as: --no-underscore --em=criself --pic
+#ld: --shared -m crislinux
+#objdump: -s -j .got -R
+
+# Verify that the first and last R_CRIS_16_GOT_GD entries are ok just
+# below the limit, in a DSO. Beware, the order here is quite random,
+# supposedly depending on symbol hashes.
+
+.*: file format elf32-cris
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+000b3910 R_CRIS_DTP x2814
+#...
+000b8350 R_CRIS_DTP x8190
+#...
+000c1308 R_CRIS_DTP x0
+#...
+000c3900 R_CRIS_DTP x1345
+
+Contents of section .got:
+ b3904 94380b00 00000000 00000000 00000000 .*
+ b3914 00000000 00000000 00000000 00000000 .*
+#...
+ c38e4 00000000 00000000 00000000 00000000 .*
+ c38f4 00000000 00000000 00000000 00000000 .*
+ c3904 00000000 .*
+#PASS
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ok-32.d b/binutils-2.21/ld/testsuite/ld-cris/tls-ok-32.d
new file mode 100644
index 0000000..8042e28
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ok-32.d
@@ -0,0 +1,23 @@
+#source: tls-dtprelm.s --defsym r=32767
+#as: --no-underscore --em=criself --pic
+#ld: --shared -m crislinux
+#objdump: -s -j .got -j .text -j .tdata -R
+
+# Check that a R_CRIS_16_DTPREL just below the theoretical limit
+# works, in a DSO.
+
+.*: file format elf32-cris
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+0000a220 R_CRIS_DTPMOD \*ABS\*
+
+Contents of section \.text:
+ 01a0 5faeff7f .*
+Contents of section \.tdata:
+ 21a4 2a2a2a2a 2a2a2a2a 2a2a2a2a 2a2a2a2a .*
+#...
+ a194 2a2a2a2a 2a2a2a2a 2a2a2a2a 2a2a2a2a .*
+Contents of section \.got:
+ a214 a4a10000 00000000 00000000 00000000 .*
+ a224 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ok-34.d b/binutils-2.21/ld/testsuite/ld-cris/tls-ok-34.d
new file mode 100644
index 0000000..f534c993
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ok-34.d
@@ -0,0 +1,28 @@
+#source: tls-gottprelm.s --defsym r=8189
+#as: --no-underscore --em=criself --pic
+#ld: --shared -m crislinux
+#objdump: -s -j .got -R
+
+# Check that a R_CRIS_16_DTPREL just below the theoretical limit
+# works. Verify that the first and last R_CRIS_16_GOT_TPREL entries
+# are ok, in a DSO. Beware, the order here is quite random,
+# supposedly depending on symbol hashes.
+
+.*: file format elf32-cris
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+000b3870 R_CRIS_32_TPREL x2814
+#...
+000b485c R_CRIS_32_TPREL x8188
+#...
+000ba564 R_CRIS_32_TPREL x0
+#...
+000bb860 R_CRIS_32_TPREL x1345
+
+Contents of section .got:
+ b3864 ec370b00 00000000 00000000 00000000 .*
+ b3874 00000000 00000000 00000000 00000000 .*
+#...
+ bb844 00000000 00000000 00000000 00000000 .*
+ bb854 00000000 00000000 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-ok-36.d b/binutils-2.21/ld/testsuite/ld-cris/tls-ok-36.d
new file mode 100644
index 0000000..fcfecb9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-ok-36.d
@@ -0,0 +1,16 @@
+#source: start1.s
+#source: tls-tprelm.s --defsym r=32767
+#as: --no-underscore --em=criself
+#ld: -m crislinux
+#objdump: -s -j .got -j .text -j .tdata
+
+# Check that a R_CRIS_16_TPREL just below the theoretical limit works.
+
+.*: file format elf32-cris
+
+Contents of section \.text:
+ 80094 41b20000 5fae0080 .*
+Contents of section \.tdata:
+ 8209c 2a2a2a2a 2a2a2a2a 2a2a2a2a 2a2a2a2a .*
+#...
+ 8a08c 2a2a2a2a 2a2a2a2a 2a2a2a2a 2a2a2a2a .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-tbss64.s b/binutils-2.21/ld/testsuite/ld-cris/tls-tbss64.s
new file mode 100644
index 0000000..feb3d28
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-tbss64.s
@@ -0,0 +1,7 @@
+ .global gx
+ .section .tbss,"awT",@nobits
+ .align 2
+ .type gx, @object
+ .size gx, 64
+gx:
+ .zero 64
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-tprelm.s b/binutils-2.21/ld/testsuite/ld-cris/tls-tprelm.s
new file mode 100644
index 0000000..93fd671
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-tprelm.s
@@ -0,0 +1,26 @@
+ .text
+
+ .ifndef r
+ .set r,1
+ .endif
+
+ .global tlsfntprelm
+ .type tlsfntprelm,@function
+ .p2align 1
+tlsfntprelm:
+ move.w x:TPOFF16,$r10
+.Lfe:
+ .size tlsfntprelm,.Lfe-tlsfntprelm
+
+ .section .tdata,"awT",@progbits
+ .p2align 2
+ .type x,@object
+ .size x,1
+x:
+ .byte 42
+
+ .globl z
+ .type z,@object
+ .size z,r
+z:
+ .fill r,1,42
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-und-38.d b/binutils-2.21/ld/testsuite/ld-cris/tls-und-38.d
new file mode 100644
index 0000000..314dac5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-und-38.d
@@ -0,0 +1,27 @@
+#source: tls-gd-2.s --pic
+#as: --no-underscore --em=criself
+#ld: -m crislinux --shared
+#readelf: -a -x 7
+
+# Undefined reference for a R_CRIS_32_GOT_GD in a DSO. Not an error;
+# it's ok for a DSO to have undefined references upon creation for
+# global symbols that can be overridden. Just make sure GOT, dynsyms
+# and dynrelocs look right.
+
+#...
+Relocation section '.rela.dyn' at offset 0x.* contains 1 entries:
+ Offset +Info +Type +Sym.Value +Sym. Name \+ Addend
+000021ec +00000217 R_CRIS_DTP +00000000 +x \+ 0
+
+There are no unwind sections in this file.
+
+Symbol table '.dynsym' contains . entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+#...
+ +[0-9]: 00000000 +0 +TLS +GLOBAL +DEFAULT +UND x
+#...
+Symbol table '.symtab' contains .. entries:
+#...
+Hex dump of section '.got':
+ 0x0+21e0 70210000 00000000 00000000 00000000 .*
+ 0x0+21f0 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-und-42.d b/binutils-2.21/ld/testsuite/ld-cris/tls-und-42.d
new file mode 100644
index 0000000..a996506
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-und-42.d
@@ -0,0 +1,26 @@
+#source: tls-ie-10.s --pic
+#as: --no-underscore --em=criself
+#ld: -m crislinux --shared
+#readelf: -a -x 7
+
+# Undefined reference for a R_CRIS_32_GOT_TPREL in a DSO. Not an
+# error; it's ok for a DSO to have undefined references upon creation
+# for global symbols that can be overridden. Just make sure GOT,
+# dynsyms and dynrelocs look right.
+
+#...
+Relocation section '.rela.dyn' at offset 0x.* contains 1 entries:
+ Offset +Info +Type +Sym.Value +Sym. Name \+ Addend
+000021f4 +0000021c R_CRIS_32_TPREL +0+ +x \+ 0
+
+There are no unwind sections in this file.
+
+Symbol table '.dynsym' contains . entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+#...
+ +[0-9]: 0+ +0 +TLS +GLOBAL +DEFAULT +UND x
+#...
+Symbol table '.symtab' contains .. entries:
+#...
+Hex dump of section '.got':
+ 0x0+21e8 70210000 00000000 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-und-46.d b/binutils-2.21/ld/testsuite/ld-cris/tls-und-46.d
new file mode 100644
index 0000000..65421a0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-und-46.d
@@ -0,0 +1,27 @@
+#source: tls-gd-1.s --pic
+#as: --no-underscore --em=criself
+#ld: -m crislinux --shared
+#readelf: -a -x 7
+
+# Undefined reference for a R_CRIS_16_GOT_GD in a DSO. Not an error;
+# it's ok for a DSO to have undefined references upon creation for
+# global symbols that can be overridden. Just make sure GOT, dynsyms
+# and dynrelocs look right.
+
+#...
+Relocation section '.rela.dyn' at offset 0x.* contains 1 entries:
+ Offset +Info +Type +Sym.Value +Sym. Name \+ Addend
+000021e8 +00000217 R_CRIS_DTP +00000000 +x \+ 0
+
+There are no unwind sections in this file.
+
+Symbol table '.dynsym' contains . entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+#...
+ +[0-9]: 00000000 +0 +TLS +GLOBAL +DEFAULT +UND x
+#...
+Symbol table '.symtab' contains .. entries:
+#...
+Hex dump of section '.got':
+ 0x0+21dc 6c210000 00000000 00000000 00000000 .*
+ 0x0+21ec 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-und-50.d b/binutils-2.21/ld/testsuite/ld-cris/tls-und-50.d
new file mode 100644
index 0000000..71f3d90
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-und-50.d
@@ -0,0 +1,26 @@
+#source: tls-ie-8.s --pic
+#as: --no-underscore --em=criself
+#ld: -m crislinux --shared
+#readelf: -a -x 7
+
+# Undefined reference for a R_CRIS_16_GOT_TPREL in a DSO. Not an
+# error; it's ok for a DSO to have undefined references upon creation
+# for global symbols that can be overridden. Just make sure GOT,
+# dynsyms and dynrelocs look right.
+
+#...
+Relocation section '.rela.dyn' at offset 0x.* contains 1 entries:
+ Offset +Info +Type +Sym.Value +Sym. Name \+ Addend
+000021ec +0000021c R_CRIS_32_TPREL +0+ +x \+ 0
+
+There are no unwind sections in this file.
+
+Symbol table '.dynsym' contains . entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+#...
+ +[0-9]: 00000000 +0 +TLS +GLOBAL +DEFAULT +UND x
+#...
+Symbol table '.symtab' contains .. entries:
+#...
+Hex dump of section '.got':
+ 0x0+21e0 68210000 00000000 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-x.s b/binutils-2.21/ld/testsuite/ld-cris/tls-x.s
new file mode 100644
index 0000000..504377a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-x.s
@@ -0,0 +1,7 @@
+ .globl x
+ .section .tdata,"awT",@progbits
+ .p2align 2
+ .type x, @object
+ .size x, 4
+x:
+ .long 40
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-x1x2.s b/binutils-2.21/ld/testsuite/ld-cris/tls-x1x2.s
new file mode 100644
index 0000000..fd5d349
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-x1x2.s
@@ -0,0 +1,13 @@
+ .globl x1
+ .section .tdata,"awT",@progbits
+ .p2align 2
+ .type x1, @object
+ .size x1, 4
+x1:
+ .long 41
+ .globl x2
+ .p2align 2
+ .type x2, @object
+ .size x2, 4
+x2:
+ .long 42
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls-z.s b/binutils-2.21/ld/testsuite/ld-cris/tls-z.s
new file mode 100644
index 0000000..25d97cd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls-z.s
@@ -0,0 +1,7 @@
+ .globl z
+ .section .tdata,"awT",@progbits
+ .p2align 2
+ .type z, @object
+ .size z, 4
+z:
+ .long 42
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls128.s b/binutils-2.21/ld/testsuite/ld-cris/tls128.s
new file mode 100644
index 0000000..71d6b84
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls128.s
@@ -0,0 +1,8 @@
+; Just something allocating 128 bytes TLS data.
+ .section .tdata,"awT",@progbits
+ .p2align 2
+ .type tls128, @object
+tls128:
+ .long 47
+ .fill 124,1,0
+ .size tls128, 128
diff --git a/binutils-2.21/ld/testsuite/ld-cris/tls128g.s b/binutils-2.21/ld/testsuite/ld-cris/tls128g.s
new file mode 100644
index 0000000..766b7d9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/tls128g.s
@@ -0,0 +1,9 @@
+; Just something allocating 128 bytes TLS data, with the symbol being global.
+ .section .tdata,"awT",@progbits
+ .p2align 2
+ .global tls128
+ .type tls128, @object
+tls128:
+ .long 47
+ .fill 124,1,0
+ .size tls128, 128
diff --git a/binutils-2.21/ld/testsuite/ld-cris/undef1.d b/binutils-2.21/ld/testsuite/ld-cris/undef1.d
new file mode 100644
index 0000000..cec00cb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/undef1.d
@@ -0,0 +1,13 @@
+#source: dso-1.s
+#source: gotrel1.s --pic
+#as: --no-underscore --em=criself
+#ld: -m crislinux tmpdir/libdso-4.so
+#objdump: -T
+
+# The DSO used has an undef reference to the symbol "dsofn", which is
+# supposed to cause the program to automatically export it as a dynamic
+# symbol; no --export-dynamic is supposed to be needed.
+
+#...
+[0-9a-f]+ g DF .text 0+2 dsofn
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-cris/undef2.d b/binutils-2.21/ld/testsuite/ld-cris/undef2.d
new file mode 100644
index 0000000..46015c0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/undef2.d
@@ -0,0 +1,6 @@
+# source: start1.s
+# source: stabs1.s
+# target: cris-*-*elf* cris-*-*aout*
+# as: --em=crisaout
+# ld: -mcrisaout
+# error: .o:/blah/foo.c:96: undefined reference to `globsym1'$
diff --git a/binutils-2.21/ld/testsuite/ld-cris/undef3.d b/binutils-2.21/ld/testsuite/ld-cris/undef3.d
new file mode 100644
index 0000000..e7bca10
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/undef3.d
@@ -0,0 +1,6 @@
+#source: start1.s
+#source: stabs1.s
+#target: cris-*-*elf* cris-*-*aout*
+#as: --em=criself
+#ld: -mcriself
+#error: .o:/blah/foo.c:96: undefined reference to `globsym1'$
diff --git a/binutils-2.21/ld/testsuite/ld-cris/v10-v32.d b/binutils-2.21/ld/testsuite/ld-cris/v10-v32.d
new file mode 100644
index 0000000..d692926
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/v10-v32.d
@@ -0,0 +1,10 @@
+# notarget: cris*-*-linux-gnu
+# source: start1.s --march=v32
+# source: move-1.s --march=v0_v10
+# as: --em=criself
+# ld: -m criself
+# error: contains non-CRIS-v32 code
+
+# Test that linking a (classic) v10 object to a v32 object does
+# not work. Source code and "-m criself" doesn't work with *-linux-gnu.
+
diff --git a/binutils-2.21/ld/testsuite/ld-cris/v10-va.d b/binutils-2.21/ld/testsuite/ld-cris/v10-va.d
new file mode 100644
index 0000000..c6db037
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/v10-va.d
@@ -0,0 +1,14 @@
+# notarget: cris*-*-linux-gnu
+# source: start1.s --march=common_v10_v32
+# source: move-1.s --march=v0_v10
+# as: --em=criself
+# ld: -m criself
+# objdump: -p
+
+# Test that linking a v10 compatible object to a v10+v32 object
+# does work and results in the output marked as a v10 object.
+# Source code and "-m criself" doesn't work with *-linux-gnu.
+
+#...
+private flags = 1: \[symbols have a _ prefix\]
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-cris/v32-ba-1.d b/binutils-2.21/ld/testsuite/ld-cris/v32-ba-1.d
new file mode 100644
index 0000000..b4ce78d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/v32-ba-1.d
@@ -0,0 +1,20 @@
+# notarget: cris*-*-linux-gnu
+# as: --march=v32 --em=criself
+# ld: -m criself
+# objdump: -d
+
+# Check that 32-bit branches (PCREL:s) are relocated right.
+# Source code and "-m criself" doesn't work with *-linux-gnu.
+
+.*: file format elf32-us-cris
+
+Disassembly of section \.text:
+
+0+ <(a|__Stext)>:
+ 0: bf0e 0800 0000 ba 8 <b>
+ 6: 5e82 moveq 30,r8
+
+0+8 <b>:
+ 8: 4312 moveq 3,r1
+ a: bf0e f6ff ffff ba 0 <[^>]*>
+ 10: 4db2 moveq 13,r11
diff --git a/binutils-2.21/ld/testsuite/ld-cris/v32-ba-1.s b/binutils-2.21/ld/testsuite/ld-cris/v32-ba-1.s
new file mode 100644
index 0000000..189769e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/v32-ba-1.s
@@ -0,0 +1,11 @@
+ .global a
+a:
+ ba b
+ moveq 30,r8
+
+ .section .text.2,"ax"
+ .global b
+b:
+ moveq 3,r1
+ ba a
+ moveq 13,r11
diff --git a/binutils-2.21/ld/testsuite/ld-cris/v32-bin-1.d b/binutils-2.21/ld/testsuite/ld-cris/v32-bin-1.d
new file mode 100644
index 0000000..3a8714b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/v32-bin-1.d
@@ -0,0 +1,13 @@
+#notarget: cris*-*-linux-gnu
+#as: --em=criself --march=v32
+#ld: -m criself --oformat binary --defsym ext1=0x4000 --defsym ext2=0x6000
+#objdump: -s -b binary
+
+# Test that pcrel relocs work with --oformat binary.
+# Source code and "-m criself" doesn't work with *-linux-gnu.
+
+.*: file format binary
+
+Contents of section \.data:
+ 0000 7f5d0020 0000bfbe fa7f0000 b0057f3d .*
+ 0010 f23f0000 bfbeec5f 0000b005 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/v32-bin-1.s b/binutils-2.21/ld/testsuite/ld-cris/v32-bin-1.s
new file mode 100644
index 0000000..1f021d8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/v32-bin-1.s
@@ -0,0 +1,7 @@
+x:
+ lapc 0x2000,r5
+ bsr 0x8000
+ nop
+ lapc ext1,r3
+ bsr ext2
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-cris/v32-v10.d b/binutils-2.21/ld/testsuite/ld-cris/v32-v10.d
new file mode 100644
index 0000000..a96120f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/v32-v10.d
@@ -0,0 +1,10 @@
+# notarget: cris*-*-linux-gnu
+# source: start1.s --march=v0_v10
+# source: move-1.s --march=v32
+# as: --em=criself
+# ld: -m criself
+# error: contains CRIS v32 code
+
+# Test that linking a v32 object to a (classic) v10 object does
+# not work.
+# Source code and "-m criself" doesn't work with *-linux-gnu.
diff --git a/binutils-2.21/ld/testsuite/ld-cris/v32-va.d b/binutils-2.21/ld/testsuite/ld-cris/v32-va.d
new file mode 100644
index 0000000..526d3c3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/v32-va.d
@@ -0,0 +1,14 @@
+# notarget: cris*-*-linux-gnu
+# source: start1.s --march=common_v10_v32
+# source: move-1.s --march=v32
+# as: --em=criself
+# ld: -m criself
+# objdump: -p
+
+# Test that linking a v32 object to a v10+v32 object
+# does work and results in the output marked as a v32 object.
+# Source code and "-m criself" doesn't work with *-linux-gnu.
+
+#...
+private flags = 3: \[symbols have a _ prefix\] \[v32\]
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-cris/va-v10.d b/binutils-2.21/ld/testsuite/ld-cris/va-v10.d
new file mode 100644
index 0000000..d6bda58
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/va-v10.d
@@ -0,0 +1,14 @@
+# notarget: cris*-*-linux-gnu
+# source: start1.s --march=v0_v10
+# source: move-1.s --march=common_v10_v32
+# as: --em=criself
+# ld: -m criself
+# objdump: -p
+
+# Test that linking a v10+v32 compatible object to a v10 object
+# does work and results in the output marked as a v10 object.
+# Source code and "-m criself" doesn't work with *-linux-gnu.
+
+#...
+private flags = 1: \[symbols have a _ prefix\]
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-cris/va-v32.d b/binutils-2.21/ld/testsuite/ld-cris/va-v32.d
new file mode 100644
index 0000000..b598ff5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/va-v32.d
@@ -0,0 +1,14 @@
+# notarget: cris*-*-linux-gnu
+# source: start1.s --march=v32
+# source: move-1.s --march=common_v10_v32
+# as: --em=criself
+# ld: -m criself
+# objdump: -p
+
+# Test that linking a v10+v32 compatible object to a v32 object
+# does work and results in the output marked as a v32 object.
+# Source code and "-m criself" doesn't work with *-linux-gnu.
+
+#...
+private flags = 3: \[symbols have a _ prefix\] \[v32\]
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-cris/warn1.d b/binutils-2.21/ld/testsuite/ld-cris/warn1.d
new file mode 100644
index 0000000..ecdf19e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/warn1.d
@@ -0,0 +1,11 @@
+#source: start1.s
+#source: globsym1ref.s
+#source: globsymw1.s
+#target: cris-*-*elf* cris-*-*aout*
+#as: --em=crisaout
+#ld: -mcrisaout
+#objdump: -p
+# There should be no warning, since the symbol warned about is
+# missing from the construct.
+.*: file format a\.out-cris
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-cris/warn2.d b/binutils-2.21/ld/testsuite/ld-cris/warn2.d
new file mode 100644
index 0000000..96f089e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/warn2.d
@@ -0,0 +1,11 @@
+#source: start1.s
+#source: globsym1ref.s
+#source: globsymw1.s
+#target: cris-*-*elf* cris-*-*aout*
+#as: --em=criself
+#ld: -mcriself
+#objdump: -p
+# There should be no warning, since the symbol warned about is
+# missing from the construct.
+.*: file format elf32.*-cris
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-cris/warn3.d b/binutils-2.21/ld/testsuite/ld-cris/warn3.d
new file mode 100644
index 0000000..c01b6cb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/warn3.d
@@ -0,0 +1,10 @@
+#source: start1.s
+#source: globsym1ref.s
+#source: globsymw2.s
+#target: cris-*-*elf* cris-*-*aout*
+#as: --em=crisaout
+#ld: -mcrisaout
+#warning: warning: isatty is not implemented and will always fail$
+#objdump: -p
+.*: file format a\.out-cris
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-cris/warn4.d b/binutils-2.21/ld/testsuite/ld-cris/warn4.d
new file mode 100644
index 0000000..dc096b6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/warn4.d
@@ -0,0 +1,13 @@
+#source: start1.s
+#source: globsym1ref.s
+#source: globsymw2.s
+#target: cris-*-*elf* cris-*-*aout*
+#as: --em=criself
+#ld: -mcriself
+#warning: warning: isatty is not implemented and will always fail$
+#objdump: -p
+#xfail: *-*-*
+# The test is xfailed because ELF stabs doesn't handle the stabs
+# warning construct.
+.*: file format elf32.*-cris
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-cris/weakhid.s b/binutils-2.21/ld/testsuite/ld-cris/weakhid.s
new file mode 100644
index 0000000..e4c419f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/weakhid.s
@@ -0,0 +1,13 @@
+ .weak xweakobj
+ .weak xweakhidobj
+ .hidden xweakhidobj
+
+ .data
+ .global x
+ .type x,@object
+x:
+ .dword xweakhidobj
+ .dword xweakobj
+ .dword xregobj
+.Lfe1:
+ .size x,.Lfe1-x
diff --git a/binutils-2.21/ld/testsuite/ld-cris/weakhiddso.d b/binutils-2.21/ld/testsuite/ld-cris/weakhiddso.d
new file mode 100644
index 0000000..c0908df
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/weakhiddso.d
@@ -0,0 +1,31 @@
+#source: weakhid.s
+#as: --pic --no-underscore --em=criself
+#ld: --shared -m crislinux -z nocombreloc
+#objdump: -s -R -T
+
+# Check that .weak and .weak .hidden object references are handled
+# correctly when generating a DSO. For now, we have to live with the
+# R_CRIS_NONE entry.
+
+.*: file format elf32-cris
+
+DYNAMIC SYMBOL TABLE:
+0+2214 l d \.data 0+ .data
+0+2214 g DO \.data 0+c x
+0+ D \*UND\* 0+ xregobj
+0+2220 g D \*ABS\* 0+ __bss_start
+0+ w D \*UND\* 0+ xweakobj
+0+2220 g D \*ABS\* 0+ _edata
+0+2220 g D \*ABS\* 0+ _end
+
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+0+ R_CRIS_NONE \*ABS\*
+0+2218 R_CRIS_32 xweakobj
+0+221c R_CRIS_32 xregobj
+
+Contents of section \.hash:
+#...
+Contents of section .data:
+ 2214 00000000 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/weakref1.d b/binutils-2.21/ld/testsuite/ld-cris/weakref1.d
new file mode 100644
index 0000000..6dab5e4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/weakref1.d
@@ -0,0 +1,17 @@
+#source: gotrel2.s
+#as: --pic --no-underscore --em=criself
+#ld: -m crislinux tmpdir/libdso-1.so
+#objdump: -R
+
+# A dynamic reloc for an undefined weak reference in a program got a
+# confused symbol reference count mismatch with a bfd assertion. Linking
+# with a DSO was needed as a catalyst to get to the faulty code; nothing
+# in the DSO was needed. We just check that we don't get the bfd
+# assertion. Note that no actual dynamic reloc is created for the
+# unresolved weak. Perhaps it should; the symbol could be defined in a
+# preloaded object or a new version of the DSO. FIXME: Revisit and adjust
+# test-result.
+
+.*: file format elf32-cris
+
+DYNAMIC RELOCATION RECORDS \(none\)
diff --git a/binutils-2.21/ld/testsuite/ld-cris/weakref2.d b/binutils-2.21/ld/testsuite/ld-cris/weakref2.d
new file mode 100644
index 0000000..b78ccca
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/weakref2.d
@@ -0,0 +1,10 @@
+#source: gotrel2.s
+#as: --pic --no-underscore --em=criself
+#ld: -m crislinux tmpdir/libdso-1.so
+#objdump: -s -j .got
+
+# Like weakref1.d, but check contents of .got.
+
+.*: file format elf32-cris
+Contents of section \.got:
+ 821e4 7c210800 00000000 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/weakref3.d b/binutils-2.21/ld/testsuite/ld-cris/weakref3.d
new file mode 100644
index 0000000..2d3b285
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/weakref3.d
@@ -0,0 +1,36 @@
+#source: start1.s
+#source: expdref3.s
+#as: --no-underscore --em=criself
+#ld: -m crislinux
+#ld_after_inputfiles: tmpdir/libdso-15.so
+#readelf: -a -x 10
+
+# Like libdso-15b.d, but referencing the weak symbol and function from
+# a program. At some time we broke emitting a copy reloc for the
+# object, instead yielding NULL.
+
+#...
+ +\[[0-9]+\] .got +PROGBITS +0+82314 000314 000010 04 +WA +0 +0 +4
+#...
+ +\[[0-9]+\] .bss +NOBITS +0+82324 .*
+#...
+Relocation section '.rela.dyn' at offset 0x... contains 1 entries:
+ Offset +Info +Type +Sym.Value +Sym. Name \+ Addend
+00082324 +00000109 R_CRIS_COPY +00082324 +__expobj2 \+ 0
+
+Relocation section '.rela.plt' at offset 0x... contains 1 entries:
+ Offset +Info +Type +Sym.Value +Sym. Name \+ Addend
+00082320 +0000030b R_CRIS_JUMP_SLOT +00080238 +expfn2 \+ 0
+
+There are no unwind sections in this file.
+
+Symbol table '.dynsym' contains . entries:
+#...
+ +.: 00082324 +4 +OBJECT +GLOBAL +DEFAULT +13 __expobj2@TST3 \(2\)
+#...
+ +.: 00080238 +0 +FUNC +GLOBAL +DEFAULT +UND expfn2@TST3 \(2\)
+#...
+Symbol table '.symtab' contains .. entries:
+#...
+Hex dump of section '\.text':
+ 0x0008024c 41b20000 6fae2423 08006fae 38020800 .*
diff --git a/binutils-2.21/ld/testsuite/ld-cris/weakref4.d b/binutils-2.21/ld/testsuite/ld-cris/weakref4.d
new file mode 100644
index 0000000..b034576
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cris/weakref4.d
@@ -0,0 +1,32 @@
+#source: start1.s
+#source: expdref4.s
+#as: --no-underscore --em=criself
+#ld: -m crislinux
+#ld_after_inputfiles: tmpdir/libdso-15.so
+#readelf: -a -x 11
+
+# Like weakref3.d, but just the expobj2 referenced from .data. We
+# should avoid a copy reloc (instead emitting a R_CRIS_GLOB_DAT or
+# R_CRIS_32 against the weak symbol), but for the time being, make
+# sure we get a valid reloc.
+
+#...
+ +\[[0-9]+\] .data +PROGBITS +0+822a4 0002a4 000004 00 +WA +0 +0 +1
+#...
+ +\[[0-9]+\] .bss +NOBITS +0+822a8 .*
+#...
+Relocation section '.rela.dyn' at offset 0x... contains 1 entries:
+#...
+000822a8 +00000109 R_CRIS_COPY +000822a8 +__expobj2 \+ 0
+
+There are no unwind sections in this file.
+
+Symbol table '.dynsym' contains . entries:
+#...
+ +.: 000822a8 +4 +OBJECT +GLOBAL +DEFAULT +12 __expobj2@TST3 \(2\)
+#...
+Symbol table '.symtab' contains .. entries:
+#...
+Hex dump of section '.data':
+ 0x000822a4 a8220800 .*
+
diff --git a/binutils-2.21/ld/testsuite/ld-crx/crx.exp b/binutils-2.21/ld/testsuite/ld-crx/crx.exp
new file mode 100644
index 0000000..4136ebe
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/crx.exp
@@ -0,0 +1,35 @@
+# Expect script for ld-crx tests
+# Copyright 2004, 2005, 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by Tomer Levi, Tomer.Levi@nsc.com
+#
+
+# Test CRX
+
+if ![istarget crx-*-*] {
+ return
+}
+
+set test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
+foreach test $test_list {
+ # We need to strip the ".d", but can leave the dirname.
+ verbose [file rootname $test]
+ run_dump_test [file rootname $test]
+}
diff --git a/binutils-2.21/ld/testsuite/ld-crx/crx.ld b/binutils-2.21/ld/testsuite/ld-crx/crx.ld
new file mode 100644
index 0000000..703b934
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/crx.ld
@@ -0,0 +1,84 @@
+/* 8 bit data address relocations (R_CRX_NUM8). */
+d8 = 0x12;
+/* 16 bit data address relocations (R_CRX_NUM16). */
+d16 = 0x1234;
+/* 32 bit data address relocations (R_CRX_NUM32). */
+d32 = 0x12345678;
+
+SECTIONS
+{
+/* 4 bit relocations:
+ Relative address (R_CRX_REL4) : 0x6 + 2 = 0x8
+*/
+ .text_4 0xa :
+ {
+ *(.text_4)
+ foo4 = (. + 0x6);
+ }
+
+/* 8 bit relocations:
+ Relative address (R_CRX_REL8): 0x10 + 2 = 0x12
+ Relative address (R_CRX_REL8_CMP) : 0x10 + 4 = 0x14
+*/
+ .text_8 0xe0 :
+ {
+ *(.text_8)
+ foo8 = (. + 0x10);
+ }
+
+/* 12 bit relocations:
+ Absolute address (R_CRX_REGREL12) : 0x0101 + 0x700 + 4 = 0x805
+*/
+ .text_12 0x0101 :
+ {
+ *(.text_12)
+ foo12 = (. + 0x700);
+ }
+
+/* 16 bit relocations:
+ Relative address (R_CRX_REL16) : 0x1000 + 4 = 0x1004
+ Absolute address (R_CRX_IMM16) : 0x01010 + 0x1000 + 4 = 0x2014
+*/
+ .text_16 0x01010 :
+ {
+ *(.text_16)
+ foo16 = (. + 0x1000);
+ }
+
+/* 22 bit relocations:
+ Absolute address (R_CRX_REGREL22) : 0x0201400 + 0x100000 + 6 = 0x301406
+*/
+ .text_22 0x0201400 :
+ {
+ *(.text_22)
+ foo22 = (. + 0x100000);
+ }
+
+/* 24 bit relocations:
+ Relative address (R_CRX_REL24) : 0xe00000 + 6 = 0xe00006
+*/
+ .text_24 0x0f01400 :
+ {
+ *(.text_24)
+ foo24 = (. + 0xe00000);
+ }
+
+/* 28 bit relocations:
+ Absolute address (R_CRX_REGREL28) : 0x06201400 + 0x3100000 + 6 = 0x9301406
+*/
+ .text_28 0x06201400 :
+ {
+ *(.text_28)
+ foo28 = (. + 0x3100000);
+ }
+
+/* 32 bit relocations:
+ Absolute address (R_CRX_ABS32, R_CRX_IMM32) : 0x11014000 + 0x11000000 + 6 = 0x22014006
+ Relative address (R_CRX_REL32) : 0x11000000 + 6 = 0x11000006
+*/
+ .text_32 0x11014000 :
+ {
+ *(.text_32)
+ foo32 = (. + 0x11000000);
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-abs32.d b/binutils-2.21/ld/testsuite/ld-crx/reloc-abs32.d
new file mode 100644
index 0000000..c4bd8cf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-abs32.d
@@ -0,0 +1,13 @@
+#source: reloc-abs32.s
+#ld: -T $srcdir/$subdir/crx.ld
+#objdump: -D
+
+# Test absolute relocation R_CRX_ABS32
+
+.*: file format elf32-crx
+
+Disassembly of section .text_32:
+
+11014000 <_start>:
+11014000: 01 33 01 22 loadb 0x22014006 [-_<>+0-9a-z]*, r1
+11014004: 06 40
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-abs32.s b/binutils-2.21/ld/testsuite/ld-crx/reloc-abs32.s
new file mode 100644
index 0000000..40ead76
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-abs32.s
@@ -0,0 +1,7 @@
+# Test absolute relocation R_CRX_ABS32
+
+ .section .text_32,"ax","progbits"
+ .global _start
+_start:
+ loadb foo32, r1
+
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-imm16.d b/binutils-2.21/ld/testsuite/ld-crx/reloc-imm16.d
new file mode 100644
index 0000000..31aab63
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-imm16.d
@@ -0,0 +1,12 @@
+#source: reloc-imm16.s
+#ld: -T $srcdir/$subdir/crx.ld
+#objdump: -D
+
+# Test immediate relocation R_CRX_IMM16
+
+.*: file format elf32-crx
+
+Disassembly of section .text_16:
+
+00001010 <_start>:
+ 1010: ee 11 14 20 addw \$0x2014, r14
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-imm16.s b/binutils-2.21/ld/testsuite/ld-crx/reloc-imm16.s
new file mode 100644
index 0000000..3e0cc2e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-imm16.s
@@ -0,0 +1,7 @@
+# Test immediate relocation R_CRX_IMM16
+
+ .section .text_16,"ax","progbits"
+ .global _start
+_start:
+ addw $foo16 , ra
+
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-imm32.d b/binutils-2.21/ld/testsuite/ld-crx/reloc-imm32.d
new file mode 100644
index 0000000..9831a68
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-imm32.d
@@ -0,0 +1,13 @@
+#source: reloc-imm32.s
+#ld: -T $srcdir/$subdir/crx.ld
+#objdump: -D
+
+# Test immediate relocation R_CRX_IMM32
+
+.*: file format elf32-crx
+
+Disassembly of section .text_32:
+
+11014000 <_start>:
+11014000: f6 21 01 22 addd \$0x22014006, r6
+11014004: 06 40
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-imm32.s b/binutils-2.21/ld/testsuite/ld-crx/reloc-imm32.s
new file mode 100644
index 0000000..ccf71be
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-imm32.s
@@ -0,0 +1,7 @@
+# Test immediate relocation R_CRX_IMM32
+
+ .section .text_32,"ax","progbits"
+ .global _start
+_start:
+ addd $foo32, r6
+
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-num16.d b/binutils-2.21/ld/testsuite/ld-crx/reloc-num16.d
new file mode 100644
index 0000000..72bf342
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-num16.d
@@ -0,0 +1,12 @@
+#source: reloc-num16.s
+#ld: -T $srcdir/$subdir/crx.ld
+#objdump: -D
+
+# Test relocation on data R_CRX_NUM16
+
+.*: file format elf32-crx
+
+Disassembly of section .text:
+
+.* <_start>:
+.*: 34 12 addcw \$0x3, r4
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-num16.s b/binutils-2.21/ld/testsuite/ld-crx/reloc-num16.s
new file mode 100644
index 0000000..ff033e1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-num16.s
@@ -0,0 +1,6 @@
+# Test relocation on data R_CRX_NUM16
+
+ .text
+ .global _start
+_start:
+ .word d16
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-num32.d b/binutils-2.21/ld/testsuite/ld-crx/reloc-num32.d
new file mode 100644
index 0000000..bdd9ee9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-num32.d
@@ -0,0 +1,13 @@
+#source: reloc-num32.s
+#ld: -T $srcdir/$subdir/crx.ld
+#objdump: -D
+
+# Test relocation on data R_CRX_NUM32
+
+.*: file format elf32-crx
+
+Disassembly of section .text:
+
+.* <_start>:
+.*: 78 56 orw r7, r8
+.*: 34 12 addcw \$0x3, r4
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-num32.s b/binutils-2.21/ld/testsuite/ld-crx/reloc-num32.s
new file mode 100644
index 0000000..201682c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-num32.s
@@ -0,0 +1,6 @@
+# Test relocation on data R_CRX_NUM32
+
+ .text
+ .global _start
+_start:
+ .long d32
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-num8.d b/binutils-2.21/ld/testsuite/ld-crx/reloc-num8.d
new file mode 100644
index 0000000..38927de
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-num8.d
@@ -0,0 +1,12 @@
+#source: reloc-num8.s
+#ld: -T $srcdir/$subdir/crx.ld
+#objdump: -D
+
+# Test relocation on data R_CRX_NUM8
+
+.*: file format elf32-crx
+
+Disassembly of section .text:
+
+.* <_start>:
+.*: 12 00 addub \$0x1, r2
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-num8.s b/binutils-2.21/ld/testsuite/ld-crx/reloc-num8.s
new file mode 100644
index 0000000..4dc70b5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-num8.s
@@ -0,0 +1,6 @@
+# Test relocation on data R_CRX_NUM8
+
+ .text
+ .global _start
+_start:
+ .byte d8
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-regrel12.d b/binutils-2.21/ld/testsuite/ld-crx/reloc-regrel12.d
new file mode 100644
index 0000000..e681d9f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-regrel12.d
@@ -0,0 +1,12 @@
+#source: reloc-regrel12.s
+#ld: -T $srcdir/$subdir/crx.ld
+#objdump: -D
+
+# Test register relative relocation R_CRX_REGREL12
+
+.*: file format elf32-crx
+
+Disassembly of section .text_12:
+
+00000101 <_start>:
+ 101: 85 32 05 78 loadb 0x805\(r7\)\+, r5
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-regrel12.s b/binutils-2.21/ld/testsuite/ld-crx/reloc-regrel12.s
new file mode 100644
index 0000000..060502b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-regrel12.s
@@ -0,0 +1,6 @@
+# Test register relative relocation R_CRX_REGREL12
+
+ .section .text_12,"ax","progbits"
+ .global _start
+_start:
+ loadb foo12(r7)+, r5
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-regrel22.d b/binutils-2.21/ld/testsuite/ld-crx/reloc-regrel22.d
new file mode 100644
index 0000000..7c4ba1b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-regrel22.d
@@ -0,0 +1,13 @@
+#source: reloc-regrel22.s
+#ld: -T $srcdir/$subdir/crx.ld
+#objdump: -D
+
+# Test register relative relocation R_CRX_REGREL22
+
+.*: file format elf32-crx
+
+Disassembly of section .text_22:
+
+00201400 <_start>:
+ 201400: cd 33 70 9c loadb 0x301406\(r9,r12,2\), r13
+ 201404: 06 14
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-regrel22.s b/binutils-2.21/ld/testsuite/ld-crx/reloc-regrel22.s
new file mode 100644
index 0000000..478b5e2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-regrel22.s
@@ -0,0 +1,6 @@
+# Test register relative relocation R_CRX_REGREL22
+
+ .section .text_22,"ax","progbits"
+ .global _start
+_start:
+ loadb foo22(r9,r12,2), r13
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-regrel28.d b/binutils-2.21/ld/testsuite/ld-crx/reloc-regrel28.d
new file mode 100644
index 0000000..057118b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-regrel28.d
@@ -0,0 +1,13 @@
+#source: reloc-regrel28.s
+#ld: -T $srcdir/$subdir/crx.ld
+#objdump: -D
+
+# Test register relative relocation R_CRX_REGREL28
+
+.*: file format elf32-crx
+
+Disassembly of section .text_28:
+
+06201400 <_start>:
+ 6201400: 7f 3b 30 99 cbitd \$0x1f, 0x9301406\(r9\)
+ 6201404: 06 14
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-regrel28.s b/binutils-2.21/ld/testsuite/ld-crx/reloc-regrel28.s
new file mode 100644
index 0000000..2be418f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-regrel28.s
@@ -0,0 +1,6 @@
+# Test register relative relocation R_CRX_REGREL28
+
+ .section .text_28,"ax","progbits"
+ .global _start
+_start:
+ cbitd $31, foo28(r9)
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-regrel32.d b/binutils-2.21/ld/testsuite/ld-crx/reloc-regrel32.d
new file mode 100644
index 0000000..9022520
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-regrel32.d
@@ -0,0 +1,13 @@
+#source: reloc-regrel32.s
+#ld: -T $srcdir/$subdir/crx.ld
+#objdump: -D
+
+# Test register relative relocation R_CRX_REGREL32
+
+.*: file format elf32-crx
+
+Disassembly of section .text_32:
+
+11014000 <_start>:
+11014000: f5 87 01 22 loadb 0x22014006\(r5\), r7
+11014004: 06 40
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-regrel32.s b/binutils-2.21/ld/testsuite/ld-crx/reloc-regrel32.s
new file mode 100644
index 0000000..dcfc0cd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-regrel32.s
@@ -0,0 +1,6 @@
+# Test register relative relocation R_CRX_REGREL32
+
+ .section .text_32,"ax","progbits"
+ .global _start
+_start:
+ loadb foo32(r5), r7
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-rel16.d b/binutils-2.21/ld/testsuite/ld-crx/reloc-rel16.d
new file mode 100644
index 0000000..15b820e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-rel16.d
@@ -0,0 +1,12 @@
+#source: reloc-rel16.s
+#ld: -T $srcdir/$subdir/crx.ld
+#objdump: -D
+
+# Test pc relative relocation R_CRX_REL16
+
+.*: file format elf32-crx
+
+Disassembly of section .text_16:
+
+00001010 <_start>:
+ 1010: 7e 30 02 08 bal r14, 0x[0-9a-f]* [-_<>+0-9a-z]*
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-rel16.s b/binutils-2.21/ld/testsuite/ld-crx/reloc-rel16.s
new file mode 100644
index 0000000..65ec197
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-rel16.s
@@ -0,0 +1,8 @@
+# Test pc relative relocation R_CRX_REL16
+
+ .section .text_16,"ax","progbits"
+ .global _start
+ .global foo16
+_start:
+ bal ra, foo16
+foo16:
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-rel24.d b/binutils-2.21/ld/testsuite/ld-crx/reloc-rel24.d
new file mode 100644
index 0000000..c72af5a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-rel24.d
@@ -0,0 +1,13 @@
+#source: reloc-rel24.s
+#ld: -T $srcdir/$subdir/crx.ld
+#objdump: -D
+
+# Test pc relative relocation R_CRX_REL24
+
+.*: file format elf32-crx
+
+Disassembly of section .text_24:
+
+00f01400 <_start>:
+ f01400: 81 31 70 20 cmpbeqb r1, r2, 0x[0-9a-f]* [-_<>+0-9a-z]*
+ f01404: 03 00
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-rel24.s b/binutils-2.21/ld/testsuite/ld-crx/reloc-rel24.s
new file mode 100644
index 0000000..e772ddd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-rel24.s
@@ -0,0 +1,6 @@
+# Test pc relative relocation R_CRX_REL24
+
+ .section .text_24,"ax","progbits"
+ .global _start
+_start:
+ cmpbeqb r1, r2, foo24
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-rel32.d b/binutils-2.21/ld/testsuite/ld-crx/reloc-rel32.d
new file mode 100644
index 0000000..31f462b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-rel32.d
@@ -0,0 +1,13 @@
+#source: reloc-rel32.s
+#ld: -T $srcdir/$subdir/crx.ld
+#objdump: -D
+
+# Test pc relative relocation R_CRX_REL32
+
+.*: file format elf32-crx
+
+Disassembly of section .text_32:
+
+11014000 <_start>:
+11014000: 7f 7e 80 08 br 0x[0-9a-f]* [-_<>+0-9a-z]*
+11014004: 03 00
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-rel32.s b/binutils-2.21/ld/testsuite/ld-crx/reloc-rel32.s
new file mode 100644
index 0000000..6b010a9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-rel32.s
@@ -0,0 +1,6 @@
+# Test pc relative relocation R_CRX_REL32
+
+ .section .text_32,"ax","progbits"
+ .global _start
+_start:
+ br foo32
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-rel4.d b/binutils-2.21/ld/testsuite/ld-crx/reloc-rel4.d
new file mode 100644
index 0000000..be9ff36
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-rel4.d
@@ -0,0 +1,12 @@
+#source: reloc-rel4.s
+#ld: -T $srcdir/$subdir/crx.ld
+#objdump: -D
+
+# Test pc relative relocation R_CRX_REL4
+
+.*: file format elf32-crx
+
+Disassembly of section .text_4:
+
+0000000a <_start>:
+ a: 3a b0 beq0b r10, 0x8 [-_<>+0-9a-z]*
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-rel4.s b/binutils-2.21/ld/testsuite/ld-crx/reloc-rel4.s
new file mode 100644
index 0000000..138f6b6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-rel4.s
@@ -0,0 +1,8 @@
+# Test pc relative relocation R_CRX_REL4
+
+ .section .text_4,"ax","progbits"
+ .global _start
+ .global foo4
+_start:
+ beq0b r10 , foo4
+foo4:
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-rel8-cmp.d b/binutils-2.21/ld/testsuite/ld-crx/reloc-rel8-cmp.d
new file mode 100644
index 0000000..2d1a245
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-rel8-cmp.d
@@ -0,0 +1,12 @@
+#source: reloc-rel8-cmp.s
+#ld: -T $srcdir/$subdir/crx.ld
+#objdump: -D
+
+# Test pc relative relocation R_CRX_REL8_CMP
+
+.*: file format elf32-crx
+
+Disassembly of section .text_8:
+
+000000e0 <_start>:
+ e0: 81 30 0a 20 cmpbeqb r1, r2, 0x[0-9a-f]* [-_<>+0-9a-z]*
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-rel8-cmp.s b/binutils-2.21/ld/testsuite/ld-crx/reloc-rel8-cmp.s
new file mode 100644
index 0000000..61e5dd4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-rel8-cmp.s
@@ -0,0 +1,8 @@
+# Test pc relative relocation R_CRX_REL8_CMP
+
+ .section .text_8,"ax","progbits"
+ .global _start
+ .global foo8
+_start:
+ cmpbeqb r1, r2, foo8
+foo8:
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-rel8.d b/binutils-2.21/ld/testsuite/ld-crx/reloc-rel8.d
new file mode 100644
index 0000000..d76ec63
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-rel8.d
@@ -0,0 +1,12 @@
+#source: reloc-rel8.s
+#ld: -T $srcdir/$subdir/crx.ld
+#objdump: -D
+
+# Test pc relative relocation R_CRX_REL8
+
+.*: file format elf32-crx
+
+Disassembly of section .text_8:
+
+000000e0 <_start>:
+ e0: 09 70 beq 0x[0-9a-f]* [-_<>+0-9a-z]*
diff --git a/binutils-2.21/ld/testsuite/ld-crx/reloc-rel8.s b/binutils-2.21/ld/testsuite/ld-crx/reloc-rel8.s
new file mode 100644
index 0000000..9692f3c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-crx/reloc-rel8.s
@@ -0,0 +1,8 @@
+# Test pc relative relocation R_CRX_REL8
+
+ .section .text_8,"ax","progbits"
+ .global _start
+ .global foo8
+_start:
+ beq foo8
+foo8:
diff --git a/binutils-2.21/ld/testsuite/ld-cygwin/exe-export.exp b/binutils-2.21/ld/testsuite/ld-cygwin/exe-export.exp
new file mode 100644
index 0000000..05eeb7e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cygwin/exe-export.exp
@@ -0,0 +1,154 @@
+# Expect script for export table in executables tests
+# Copyright 2003, 2005, 2007, 2009
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by Fabrizio Gennari <fabrizio.ge@tiscalinet.it>
+# Based on auto-import.exp by Ralf.Habacker@freenet.de
+#
+
+# This test can only be run on a cygwin platforms.
+if {![istarget *-pc-cygwin]} {
+ verbose "Not a cygwin target."
+ return
+}
+
+# No compiler, no test.
+if { [which $CC] == 0 } {
+ untested "Exe export test (no compiler available)"
+ return
+}
+
+proc run_dlltool { lib_file def_file } {
+ global dlltool
+ global base_dir
+ global as
+
+ if ![info exists dlltool] then {
+ set dlltool [findfile $base_dir/../binutils/dlltool]
+ }
+
+ if { [which $dlltool] == 0 } then {
+ verbose "$dlltool does not exist"
+ return 0
+ }
+
+ verbose "$dlltool --as $as -l $lib_file -d $def_file"
+ catch "exec $dlltool --as $as -l $lib_file -d $def_file" dlltool_output
+
+ #remove empty lines
+ regsub -all "\n+" $dlltool_output "" dlltool_output
+
+ if [string match "" $dlltool_output] then {
+ return 1
+ }
+
+ verbose -log "$dlltool_output"
+ return 0
+}
+
+# ld_special_link
+# A copy of ld_simple_link (from ld-lib.exp) with extra
+# code to strip warnings about creating libraries.
+#
+proc ld_special_link { ld target objects } {
+ global host_triplet
+ global link_output
+
+ if { [which $ld] == 0 } then {
+ verbose "$ld does not exist"
+ return 0
+ }
+
+ if [is_endian_output_format $objects] then {
+ set flags [big_or_little_endian]
+ } else {
+ set flags ""
+ }
+
+ verbose -log "$ld $flags -o $target $objects"
+ catch "exec $ld $flags -o $target $objects" link_output
+
+ set exec_output [prune_warnings $link_output]
+
+ # We don't care if we get a warning about a non-existent start
+ # symbol, since the default linker script might use ENTRY.
+ regsub -all "(^|\n)(\[^\n\]*: warning: cannot find entry symbol\[^\n\]*\n?)" $exec_output "\\1" exec_output
+
+ # We don't care if we get a message about creating a library file.
+ regsub -all "(^|\n)(Creating library file\[^\n\]*\n?)" $exec_output "\\1" exec_output
+
+ if [string match "" $exec_output] then {
+ return 1
+ }
+
+ verbose -log "$exec_output"
+ return 0
+}
+
+set tmpdir tmpdir
+
+# Set some libs needed for cygwin.
+set MYLDFLAGS "-Wl,--out-implib,$tmpdir/testexe.lib -nostartfiles -nostdlib"
+
+# Build an export library for testdll
+if ![run_dlltool $tmpdir/testdll.lib $srcdir/$subdir/testdll.def] {
+ fail "building an export library for the shared lib"
+ return
+}
+
+# Compile the executable.
+if ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/testexe.c $tmpdir/testexe.o] {
+ fail "compiling executable"
+ return
+}
+
+if ![ld_special_link "$CC $LDFLAGS $MYLDFLAGS -e _testexe_main@16" $tmpdir/testexe.exe "$tmpdir/testexe.o $srcdir/$subdir/testexe.def $tmpdir/testdll.lib -lkernel32"] {
+ fail "linking executable"
+ return
+}
+
+# Compile the dll.
+if ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/testdll.c $tmpdir/testdll.o] {
+ fail "compiling shared lib"
+ return
+}
+
+if ![ld_special_link "$CC $LDFLAGS -nostartfiles -nostdlib -e _testdll_main@12" $tmpdir/testdll.dll "$tmpdir/testdll.o $srcdir/$subdir/testdll.def $tmpdir/testexe.lib"] {
+ fail "linking shared lib"
+ return
+}
+
+# This is as far as we can go with a cross-compiler
+if ![isnative] then {
+ verbose "Not running natively, so cannot execute binary"
+ pass "Compile and link and executable with an export table"
+ return
+}
+
+verbose -log "executing $tmpdir/testexe.exe"
+catch "exec $tmpdir/testexe.exe" prog_output
+
+set expected ""
+if [string match $expected $prog_output] then {
+ pass "export table in executable"
+} else {
+ verbose $prog_output
+ fail "Output does not match expected string $expected"
+}
diff --git a/binutils-2.21/ld/testsuite/ld-cygwin/testdll.c b/binutils-2.21/ld/testsuite/ld-cygwin/testdll.c
new file mode 100644
index 0000000..2064307
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cygwin/testdll.c
@@ -0,0 +1,14 @@
+extern void exewrite (void);
+__attribute((dllimport)) int global_a;
+
+void
+dllwrite (void)
+{
+ global_a = 3;
+ exewrite ();
+}
+
+int _stdcall testdll_main(int p1, unsigned long p2, void* p3)
+{
+ return 1;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-cygwin/testdll.def b/binutils-2.21/ld/testsuite/ld-cygwin/testdll.def
new file mode 100644
index 0000000..05e6c88
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cygwin/testdll.def
@@ -0,0 +1,4 @@
+LIBRARY testdll
+
+EXPORTS
+dllwrite
diff --git a/binutils-2.21/ld/testsuite/ld-cygwin/testexe.c b/binutils-2.21/ld/testsuite/ld-cygwin/testexe.c
new file mode 100644
index 0000000..50a980b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cygwin/testexe.c
@@ -0,0 +1,31 @@
+int global_a = 2;
+
+void
+exewrite (void)
+{
+ global_a = 1;
+}
+
+extern void dllwrite (void);
+
+int _stdcall
+testexe_main (void* p1, void *p2, char* p3, int p4)
+{
+ dllwrite ();
+ /* We can't print or assert in a minimal app like this,
+ so use the return status to indicate if global_a
+ ended up with the correct expected value. */
+ return 1 - global_a;
+}
+
+/* We have to import something, anything at all, from
+ kernel32, in order to have the thread and process
+ base thunk routines loaded when we start running!. */
+extern __attribute((dllimport)) void _stdcall Sleep (unsigned int duration);
+
+int _stdcall
+testexe_dummy (unsigned int foobar)
+{
+ Sleep (foobar);
+}
+
diff --git a/binutils-2.21/ld/testsuite/ld-cygwin/testexe.def b/binutils-2.21/ld/testsuite/ld-cygwin/testexe.def
new file mode 100644
index 0000000..7570578
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-cygwin/testexe.def
@@ -0,0 +1,5 @@
+NAME testexe.exe
+
+EXPORTS
+exewrite
+global_a DATA
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/d10v.exp b/binutils-2.21/ld/testsuite/ld-d10v/d10v.exp
new file mode 100644
index 0000000..3d65ce0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/d10v.exp
@@ -0,0 +1,253 @@
+# Expect script for ld-d10v tests
+# Copyright 2002, 2005, 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by Tom Rix, trix@redhat.com
+#
+
+# Test d10v
+
+if ![istarget d10v-*-*] {
+ return
+}
+
+# run_link_test FILE
+# Copied from run_dump_test, with the dumping part removed.
+#
+# Assemble a .s file, then run some utility on it and check the output.
+#
+# There should be an assembly language file named FILE.s in the test
+# suite directory. `run_link_test' will assemble and link FILE.s
+#
+# The FILE.lt file begins with zero or more option lines, which specify
+# flags to pass to the assembler, the program to run to dump the
+# assembler's output, and the options it wants. The option lines have
+# the syntax:
+#
+# # OPTION: VALUE
+#
+# OPTION is the name of some option, like "name" or "ld", and
+# VALUE is OPTION's value. The valid options are described below.
+# Whitespace is ignored everywhere, except within VALUE. The option
+# list ends with the first line that doesn't match the above syntax
+# (hmm, not great for error detection).
+#
+# The interesting options are:
+#
+# name: TEST-NAME
+# The name of this test, passed to DejaGNU's `pass' and `fail'
+# commands. If omitted, this defaults to FILE, the root of the
+# .s and .d files' names.
+#
+# as: FLAGS
+# When assembling, pass FLAGS to the assembler.
+# If assembling several files, you can pass different assembler
+# options in the "source" directives. See below.
+#
+# ld: FLAGS
+# Link assembled files using FLAGS, in the order of the "source"
+# directives, when using multiple files.
+#
+# source: SOURCE [FLAGS]
+# Assemble the file SOURCE.s using the flags in the "as" directive
+# and the (optional) FLAGS. If omitted, the source defaults to
+# FILE.s.
+# This is useful if several .x files want to share a .s file.
+# More than one "source" directive can be given, which is useful
+# when testing linking.
+#
+# xfail: TARGET
+# The test is expected to fail on TARGET. This may occur more than
+# once.
+#
+# target: TARGET
+# Only run the test for TARGET. This may occur more than once; the
+# target being tested must match at least one.
+#
+# notarget: TARGET
+# Do not run the test for TARGET. This may occur more than once;
+# the target being tested must not match any of them.
+#
+# Each option may occur at most once unless otherwise mentioned.
+#
+
+proc run_link_test { name } {
+ global subdir srcdir
+ global AS LD
+ global ASFLAGS LDFLAGS
+ global host_triplet runtests
+
+ if [string match "*/*" $name] {
+ set file $name
+ set name [file tail $name]
+ } else {
+ set file "$srcdir/$subdir/$name"
+ }
+
+ if ![runtest_file_p $runtests $name] then {
+ return
+ }
+
+ set opt_array [slurp_options "${file}.lt"]
+ if { $opt_array == -1 } {
+ perror "error reading options from $file.lt"
+ unresolved $subdir/$name
+ return
+ }
+ set dumpfile tmpdir/dump.out
+ set run_ld 0
+ set opts(as) {}
+ set opts(ld) {}
+ set opts(xfail) {}
+ set opts(target) {}
+ set opts(notarget) {}
+ set opts(name) {}
+ set opts(source) {}
+ set asflags(${file}.s) {}
+
+ foreach i $opt_array {
+ set opt_name [lindex $i 0]
+ set opt_val [lindex $i 1]
+ if ![info exists opts($opt_name)] {
+ perror "unknown option $opt_name in file $file.lt"
+ unresolved $subdir/$name
+ return
+ }
+
+ switch -- $opt_name {
+ xfail {}
+ target {}
+ notarget {}
+ source {
+ # Move any source-specific as-flags to a separate array to
+ # simplify processing.
+ if { [llength $opt_val] > 1 } {
+ set asflags([lindex $opt_val 0]) [lrange $opt_val 1 end]
+ set opt_val [lindex $opt_val 0]
+ } else {
+ set asflags($opt_val) {}
+ }
+ }
+ default {
+ if [string length $opts($opt_name)] {
+ perror "option $opt_name multiply set in $file.lt"
+ unresolved $subdir/$name
+ return
+ }
+ }
+ }
+ set opts($opt_name) [concat $opts($opt_name) $opt_val]
+ }
+
+ # Decide early whether we should run the test for this target.
+ if { [llength $opts(target)] > 0 } {
+ set targmatch 0
+ foreach targ $opts(target) {
+ if [istarget $targ] {
+ set targmatch 1
+ break
+ }
+ }
+ if { $targmatch == 0 } {
+ return
+ }
+ }
+ foreach targ $opts(notarget) {
+ if [istarget $targ] {
+ return
+ }
+ }
+
+ if { $opts(name) == "" } {
+ set testname "$subdir/$name"
+ } else {
+ set testname $opts(name)
+ }
+
+ if { $opts(source) == "" } {
+ set sourcefiles [list ${file}.s]
+ } else {
+ set sourcefiles {}
+ foreach sf $opts(source) {
+ lappend sourcefiles "$srcdir/$subdir/$sf"
+ # Must have asflags indexed on source name.
+ set asflags($srcdir/$subdir/$sf) $asflags($sf)
+ }
+ }
+
+ # Time to setup xfailures.
+ foreach targ $opts(xfail) {
+ setup_xfail $targ
+ }
+
+ # Assemble each file.
+ set objfiles {}
+ for { set i 0 } { $i < [llength $sourcefiles] } { incr i } {
+ set sourcefile [lindex $sourcefiles $i]
+
+ set objfile "tmpdir/dump$i.o"
+ lappend objfiles $objfile
+ set cmd "$AS $ASFLAGS $opts(as) $asflags($sourcefile) -o $objfile $sourcefile"
+
+ send_log "$cmd\n"
+ set cmdret [catch "exec $cmd" comp_output]
+ set comp_output [prune_warnings $comp_output]
+
+ # We accept errors at assembly stage too, unless we're supposed to
+ # link something.
+ if { $cmdret != 0 || ![string match "" $comp_output] } then {
+ send_log "$comp_output\n"
+ verbose "$comp_output" 3
+ fail $testname
+ return
+ }
+ }
+
+ # Link the file(s).
+ set objfile "tmpdir/dump"
+ set cmd "$LD $LDFLAGS $opts(ld) -o $objfile $objfiles"
+
+ send_log "$cmd\n"
+ set cmdret [catch "exec $cmd" comp_output]
+ set comp_output [prune_warnings $comp_output]
+
+ if { $cmdret != 0 || ![string match "" $comp_output] } then {
+
+ send_log "$comp_output\n"
+ verbose "$comp_output" 3
+ fail $testname
+ return
+ }
+ pass $testname
+}
+
+
+set test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
+foreach test $test_list {
+ # We need to strip the ".d", but can leave the dirname.
+ verbose [file rootname $test]
+ run_dump_test [file rootname $test]
+}
+
+set test_list [lsort [glob -nocomplain $srcdir/$subdir/*.lt]]
+foreach test $test_list {
+ # We need to strip the ".lt", but can leave the dirname.
+ verbose [file rootname $test]
+ run_link_test [file rootname $test]
+}
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/default_layout.d b/binutils-2.21/ld/testsuite/ld-d10v/default_layout.d
new file mode 100644
index 0000000..c14feb4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/default_layout.d
@@ -0,0 +1,10 @@
+#source: simple.s
+#ld:
+#objdump: -h
+
+.*: file format elf32-d10v
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 00000004 01014000 01014000 00001000 2\*\*0
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/linktest-001.s b/binutils-2.21/ld/testsuite/ld-d10v/linktest-001.s
new file mode 100644
index 0000000..fc8916c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/linktest-001.s
@@ -0,0 +1,4 @@
+ .section .data
+ .global bar
+bar:
+ .space 64
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/linktest-002.lt b/binutils-2.21/ld/testsuite/ld-d10v/linktest-002.lt
new file mode 100644
index 0000000..ffc6cfd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/linktest-002.lt
@@ -0,0 +1,2 @@
+#source: linktest-001.s
+#source: linktest-002.s
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/linktest-002.s b/binutils-2.21/ld/testsuite/ld-d10v/linktest-002.s
new file mode 100644
index 0000000..3295559
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/linktest-002.s
@@ -0,0 +1,4 @@
+ .section .text
+ .global _start
+_start:
+ ldi r0,bar
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/regression-001.lt b/binutils-2.21/ld/testsuite/ld-d10v/regression-001.lt
new file mode 100644
index 0000000..6481a59
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/regression-001.lt
@@ -0,0 +1,3 @@
+#source: regression-001.s
+#as: -W
+
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/regression-001.s b/binutils-2.21/ld/testsuite/ld-d10v/regression-001.s
new file mode 100644
index 0000000..60226c1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/regression-001.s
@@ -0,0 +1,14 @@
+ .section .data
+ ;;
+ ;; The next line caused an earlier ld to core dump.
+ .global .data
+foo:
+ .space 0x0064
+
+ .section .text
+ .global _test
+ .global _start
+_test:
+ ldi r0,foo
+_start:
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-001.d b/binutils-2.21/ld/testsuite/ld-d10v/reloc-001.d
new file mode 100644
index 0000000..8cbe9f0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-001.d
@@ -0,0 +1,12 @@
+#source: reloc-001.s
+#ld: -T $srcdir/$subdir/reloc-001.ld
+#objdump: -D
+
+# Test 10 bit pc rel reloc normal case
+
+.*: file format elf32-d10v
+
+Disassembly of section .text:
+
+01014000 <_start>:
+ 1014000: 65 20 cc 1a brf0f.s 1014104 <foo> -> jmp r13
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-001.ld b/binutils-2.21/ld/testsuite/ld-d10v/reloc-001.ld
new file mode 100644
index 0000000..a3275f5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-001.ld
@@ -0,0 +1,10 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ *(.text)
+ foo = (. + 0x100);
+ }
+}
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-001.s b/binutils-2.21/ld/testsuite/ld-d10v/reloc-001.s
new file mode 100644
index 0000000..bed56c7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-001.s
@@ -0,0 +1,11 @@
+ ;; Test pc relative relocation
+
+ .text
+ .global _start
+_start:
+ brf0f.s foo
+ jmp r13
+
+
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-002.d b/binutils-2.21/ld/testsuite/ld-d10v/reloc-002.d
new file mode 100644
index 0000000..c80b3ff
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-002.d
@@ -0,0 +1,12 @@
+#source: reloc-001.s
+#ld: -T $srcdir/$subdir/reloc-002.ld
+#objdump: -D
+
+# Test 10 bit pc rel reloc good boundary.
+
+.*: file format elf32-d10v
+
+Disassembly of section .text:
+
+01014000 <_start>:
+ 1014000: 65 3f cc 1a brf0f.s 10141fc <foo> -> jmp r13
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-002.ld b/binutils-2.21/ld/testsuite/ld-d10v/reloc-002.ld
new file mode 100644
index 0000000..8f991b2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-002.ld
@@ -0,0 +1,10 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ *(.text)
+ foo = (. + 0x1F8);
+ }
+}
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-003.d b/binutils-2.21/ld/testsuite/ld-d10v/reloc-003.d
new file mode 100644
index 0000000..009e228
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-003.d
@@ -0,0 +1,5 @@
+#source: reloc-001.s
+#ld: -T $srcdir/$subdir/reloc-003.ld
+#error: relocation truncated to fit: R_D10V_10_PCREL_L
+
+# Test 10 bit pc rel reloc bad boundary. \ No newline at end of file
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-003.ld b/binutils-2.21/ld/testsuite/ld-d10v/reloc-003.ld
new file mode 100644
index 0000000..7008d9d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-003.ld
@@ -0,0 +1,10 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ *(.text)
+ foo = (. + 0x1FC);
+ }
+}
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-004.d b/binutils-2.21/ld/testsuite/ld-d10v/reloc-004.d
new file mode 100644
index 0000000..49801de
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-004.d
@@ -0,0 +1,5 @@
+#source: reloc-001.s
+#ld: -T $srcdir/$subdir/reloc-004.ld
+#error: relocation truncated to fit: R_D10V_10_PCREL_L
+
+# Test 10 bit pc rel reloc normal bad. \ No newline at end of file
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-004.ld b/binutils-2.21/ld/testsuite/ld-d10v/reloc-004.ld
new file mode 100644
index 0000000..5f06d60
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-004.ld
@@ -0,0 +1,10 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ foo = .;
+ . = (. + 0x400);
+ }
+}
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-005.d b/binutils-2.21/ld/testsuite/ld-d10v/reloc-005.d
new file mode 100644
index 0000000..633de71
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-005.d
@@ -0,0 +1,13 @@
+#source: reloc-005.s
+#ld: -T $srcdir/$subdir/reloc-005.ld
+#objdump: -D
+
+# Test 18 bit pc rel reloc normal case
+
+.*: file format elf32-d10v
+
+Disassembly of section .text:
+
+01014000 <_start>:
+ 1014000: e4 00 10 02 bra.l 1018008 <foo>
+ 1014004: 26 0d 5e 00 jmp r13 || nop
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-005.ld b/binutils-2.21/ld/testsuite/ld-d10v/reloc-005.ld
new file mode 100644
index 0000000..a3f5b06
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-005.ld
@@ -0,0 +1,10 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ *(.text)
+ foo = (. + 0x4000);
+ }
+}
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-005.s b/binutils-2.21/ld/testsuite/ld-d10v/reloc-005.s
new file mode 100644
index 0000000..34ebb05
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-005.s
@@ -0,0 +1,11 @@
+ ;; Test 18 bit pc rel relocation
+
+ .text
+ .global _start
+_start:
+ bra.l foo
+ jmp r13
+
+
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-006.d b/binutils-2.21/ld/testsuite/ld-d10v/reloc-006.d
new file mode 100644
index 0000000..b0fd080
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-006.d
@@ -0,0 +1,13 @@
+#source: reloc-005.s
+#ld: -T $srcdir/$subdir/reloc-006.ld
+#objdump: -D
+
+# Test 18 bit pc rel reloc good boundary
+
+.*: file format elf32-d10v
+
+Disassembly of section .text:
+
+01014000 <_start>:
+ 1014000: e4 00 7f ff bra.l 1033ffc <foo>
+ 1014004: 26 0d 5e 00 jmp r13 || nop
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-006.ld b/binutils-2.21/ld/testsuite/ld-d10v/reloc-006.ld
new file mode 100644
index 0000000..3d1a0f6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-006.ld
@@ -0,0 +1,8 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ *(.text)
+ foo = (. + 0x1fff4);
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-007.d b/binutils-2.21/ld/testsuite/ld-d10v/reloc-007.d
new file mode 100644
index 0000000..293a6df
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-007.d
@@ -0,0 +1,8 @@
+#source: reloc-005.s
+#ld: -T $srcdir/$subdir/reloc-007.ld
+#objdump: -D
+# now that we treat addresses as wrapping, it isn't possible to fail
+#error: relocation truncated to fit: R_D10V_18_PCREL
+
+# Test 18 bit pc rel reloc bad boundary
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-007.ld b/binutils-2.21/ld/testsuite/ld-d10v/reloc-007.ld
new file mode 100644
index 0000000..10c50ff
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-007.ld
@@ -0,0 +1,8 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ *(.text)
+ foo = (. + 0x1fff8);
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-008.d b/binutils-2.21/ld/testsuite/ld-d10v/reloc-008.d
new file mode 100644
index 0000000..273a23c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-008.d
@@ -0,0 +1,8 @@
+#source: reloc-005.s
+#ld: -T $srcdir/$subdir/reloc-008.ld
+#objdump: -D
+# now that we treat addresses as wrapping, it isn't possible to fail
+#error: relocation truncated to fit: R_D10V_18_PCREL
+
+# Test 18 bit pc rel reloc normal bad
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-008.ld b/binutils-2.21/ld/testsuite/ld-d10v/reloc-008.ld
new file mode 100644
index 0000000..d42e0ee
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-008.ld
@@ -0,0 +1,8 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ *(.text)
+ foo = (. + 0x41fff8);
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-009.d b/binutils-2.21/ld/testsuite/ld-d10v/reloc-009.d
new file mode 100644
index 0000000..45373c9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-009.d
@@ -0,0 +1,15 @@
+#source: reloc-009.s
+#ld: -T $srcdir/$subdir/reloc-009.ld
+#objdump: -D
+
+# Test 10 bit pc rel reloc negative normal case
+
+.*: file format elf32-d10v
+Disassembly of section .text:
+
+01014000 <foo>:
+ ...
+
+01014100 <_start>:
+ 1014100: 6f 00 4a c0 nop -> brf0f.s 1014000 <foo>
+ 1014104: 26 0d 5e 00 jmp r13 || nop
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-009.ld b/binutils-2.21/ld/testsuite/ld-d10v/reloc-009.ld
new file mode 100644
index 0000000..af6e775
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-009.ld
@@ -0,0 +1,11 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ foo = .;
+ . = (. + 0x100);
+ *(.text)
+ }
+}
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-009.s b/binutils-2.21/ld/testsuite/ld-d10v/reloc-009.s
new file mode 100644
index 0000000..fb2ebce
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-009.s
@@ -0,0 +1,12 @@
+ ;; Test pc relative relocation
+
+ .text
+ .global _start
+_start:
+ nop
+ brf0f.s foo
+ jmp r13
+
+
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-010.d b/binutils-2.21/ld/testsuite/ld-d10v/reloc-010.d
new file mode 100644
index 0000000..47e048f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-010.d
@@ -0,0 +1,16 @@
+#source: reloc-009.s
+#ld: -T $srcdir/$subdir/reloc-010.ld
+#objdump: -D
+
+# Test 10 bit pc rel reloc negative good boundary case
+
+.*: file format elf32-d10v
+
+Disassembly of section .text:
+
+01014000 <foo>:
+ ...
+
+01014200 <_start>:
+ 1014200: 6f 00 4a 80 nop -> brf0f.s 1014000 <foo>
+ 1014204: 26 0d 5e 00 jmp r13 || nop
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-010.ld b/binutils-2.21/ld/testsuite/ld-d10v/reloc-010.ld
new file mode 100644
index 0000000..9b3d81a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-010.ld
@@ -0,0 +1,11 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ foo = .;
+ . = (. + 0x200);
+ *(.text)
+ }
+}
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-011.d b/binutils-2.21/ld/testsuite/ld-d10v/reloc-011.d
new file mode 100644
index 0000000..2bfc903
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-011.d
@@ -0,0 +1,6 @@
+#source: reloc-009.s
+#ld: -T $srcdir/$subdir/reloc-011.ld
+#error: relocation truncated to fit: R_D10V_10_PCREL_R
+
+# Test 10 bit pc rel reloc negative bad boundary.
+
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-011.ld b/binutils-2.21/ld/testsuite/ld-d10v/reloc-011.ld
new file mode 100644
index 0000000..e7a8151
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-011.ld
@@ -0,0 +1,11 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ foo = .;
+ . = (. + 0x204);
+ *(.text)
+ }
+}
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-012.d b/binutils-2.21/ld/testsuite/ld-d10v/reloc-012.d
new file mode 100644
index 0000000..ffb03d4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-012.d
@@ -0,0 +1,6 @@
+#source: reloc-009.s
+#ld: -T $srcdir/$subdir/reloc-012.ld
+#error: relocation truncated to fit: R_D10V_10_PCREL_R
+
+# Test 10 bit pc rel reloc negative normal bad.
+
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-012.ld b/binutils-2.21/ld/testsuite/ld-d10v/reloc-012.ld
new file mode 100644
index 0000000..87546ec
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-012.ld
@@ -0,0 +1,11 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ foo = .;
+ . = (. + 0x20004);
+ *(.text)
+ }
+}
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-013.d b/binutils-2.21/ld/testsuite/ld-d10v/reloc-013.d
new file mode 100644
index 0000000..a422fb0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-013.d
@@ -0,0 +1,16 @@
+#source: reloc-005.s
+#ld: -T $srcdir/$subdir/reloc-013.ld
+#objdump: -D
+
+# Test 18 bit pc rel reloc negative normal case
+
+.*: file format elf32-d10v
+
+Disassembly of section .text:
+
+01014000 <foo>:
+ ...
+
+01014400 <_start>:
+ 1014400: e4 00 ff 00 bra.l 1014000 <foo>
+ 1014404: 26 0d 5e 00 jmp r13 || nop
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-013.ld b/binutils-2.21/ld/testsuite/ld-d10v/reloc-013.ld
new file mode 100644
index 0000000..a6c0808
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-013.ld
@@ -0,0 +1,12 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ foo = .;
+ . = (. + 0x400);
+ *(.text)
+ }
+}
+
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-014.d b/binutils-2.21/ld/testsuite/ld-d10v/reloc-014.d
new file mode 100644
index 0000000..5035a29
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-014.d
@@ -0,0 +1,16 @@
+#source: reloc-005.s
+#ld: -T $srcdir/$subdir/reloc-014.ld
+#objdump: -D
+
+# Test 18 bit pc rel reloc negative good boundary case
+
+.*: file format elf32-d10v
+
+Disassembly of section .text:
+
+01014000 <foo>:
+ ...
+
+01034000 <_start>:
+ 1034000: e4 00 80 00 bra.l 1014000 <foo>
+ 1034004: 26 0d 5e 00 jmp r13 || nop
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-014.ld b/binutils-2.21/ld/testsuite/ld-d10v/reloc-014.ld
new file mode 100644
index 0000000..7cda1ac
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-014.ld
@@ -0,0 +1,12 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ foo = .;
+ . = (. + 0x20000);
+ *(.text)
+ }
+}
+
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-015.d b/binutils-2.21/ld/testsuite/ld-d10v/reloc-015.d
new file mode 100644
index 0000000..043f727
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-015.d
@@ -0,0 +1,8 @@
+#source: reloc-005.s
+#ld: -T $srcdir/$subdir/reloc-015.ld
+#objdump: -D
+# now that we treat addresses as wrapping, it isn't possible to fail
+#error: relocation truncated to fit: R_D10V_18_PCREL
+
+# Test 18 bit pc rel negative reloc bad boundary
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-015.ld b/binutils-2.21/ld/testsuite/ld-d10v/reloc-015.ld
new file mode 100644
index 0000000..ab1b183
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-015.ld
@@ -0,0 +1,12 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ foo = .;
+ . = (. + 0x20004);
+ *(.text)
+ }
+}
+
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-016.d b/binutils-2.21/ld/testsuite/ld-d10v/reloc-016.d
new file mode 100644
index 0000000..e7d5e8e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-016.d
@@ -0,0 +1,8 @@
+#source: reloc-005.s
+#ld: -T $srcdir/$subdir/reloc-016.ld
+#objdump: -D
+# now that we treat addresses as wrapping, it isn't possible to fail
+#error: relocation truncated to fit: R_D10V_18_PCREL
+
+# Test 18 bit pc rel negative reloc normal bad
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/reloc-016.ld b/binutils-2.21/ld/testsuite/ld-d10v/reloc-016.ld
new file mode 100644
index 0000000..6b5704c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/reloc-016.ld
@@ -0,0 +1,12 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ foo = .;
+ . = (. + 0x800004);
+ *(.text)
+ }
+}
+
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-d10v/simple.s b/binutils-2.21/ld/testsuite/ld-d10v/simple.s
new file mode 100644
index 0000000..8a304f9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-d10v/simple.s
@@ -0,0 +1,5 @@
+ .text
+ .global _start
+_start:
+ jmp r13
+
diff --git a/binutils-2.21/ld/testsuite/ld-discard/discard.exp b/binutils-2.21/ld/testsuite/ld-discard/discard.exp
new file mode 100644
index 0000000..deb5dfd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-discard/discard.exp
@@ -0,0 +1,47 @@
+# Expect script for ld discard tests
+# Copyright 2001, 2002, 2005, 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by Hans-Peter Nilsson (hp@axis.com)
+# H.J. Lu (hjl@gnu.org)
+#
+
+# Test for ELF here, so we don't have to qualify on ELF specifically
+# in every .d-file.
+
+if { ![istarget *-*-linux*] \
+ && ![istarget *-*-gnu] \
+ && ![istarget hppa*64*-*-hpux*] \
+ && ![istarget *-*-elf] } {
+ return
+}
+
+if { [istarget *-*-linux*aout*] \
+ || [istarget *-*-linux*oldld*] } {
+ return
+}
+
+load_lib ld-lib.exp
+
+set test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
+for { set i 0 } { $i < [llength $test_list] } { incr i } {
+ # We need to strip the ".d", but can leave the dirname.
+ verbose [file rootname [lindex $test_list $i]]
+ run_dump_test [file rootname [lindex $test_list $i]]
+}
diff --git a/binutils-2.21/ld/testsuite/ld-discard/discard.ld b/binutils-2.21/ld/testsuite/ld-discard/discard.ld
new file mode 100644
index 0000000..a7ff4a5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-discard/discard.ld
@@ -0,0 +1,9 @@
+ENTRY(_start)
+SECTIONS
+{
+ /* Sections to be discarded */
+ /DISCARD/ : {
+ *(.data.exit)
+ *(.text.exit)
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-discard/exit.s b/binutils-2.21/ld/testsuite/ld-discard/exit.s
new file mode 100644
index 0000000..c852978
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-discard/exit.s
@@ -0,0 +1,6 @@
+ .globl data
+ .section .data.exit,"aw"
+data:
+ .globl text
+ .section .text.exit,"ax"
+text:
diff --git a/binutils-2.21/ld/testsuite/ld-discard/extern.d b/binutils-2.21/ld/testsuite/ld-discard/extern.d
new file mode 100644
index 0000000..bb596d5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-discard/extern.d
@@ -0,0 +1,13 @@
+#source: extern.s
+#ld: -T discard.ld
+#error: .*data.* referenced in section `\.text' of tmpdir/dump0.o: defined in discarded section `\.data\.exit' of tmpdir/dump0.o
+#objdump: -p
+#xfail: arc-*-* d30v-*-* dlx-*-* i960-*-* or32-*-* pj*-*-*
+#xfail: m68hc12-*-* m6812-*-*
+#pass
+# The expected warning used to start with "`data' referenced..." but
+# this has two problems: 1) It does not include the name of the linker
+# command which will be present in the message, eg "../ld-new"
+# 2) Targets which define EXTERN_FORCE_RELOC to 0 in their
+# gas/config/tc-xxx.h file will convert the symbol in the reloc from
+# "data" to the section symbol ".data.exit".
diff --git a/binutils-2.21/ld/testsuite/ld-discard/extern.s b/binutils-2.21/ld/testsuite/ld-discard/extern.s
new file mode 100644
index 0000000..464be8b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-discard/extern.s
@@ -0,0 +1,13 @@
+ .globl data
+ .section .data.exit,"aw"
+data:
+ .globl text
+ .section .text.exit,"ax"
+text:
+ .text
+ .globl _start
+_start:
+ .long data
+ .section .debug_info
+ .long 0
+ .long text
diff --git a/binutils-2.21/ld/testsuite/ld-discard/start.d b/binutils-2.21/ld/testsuite/ld-discard/start.d
new file mode 100644
index 0000000..06207ee
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-discard/start.d
@@ -0,0 +1,8 @@
+#source: start.s
+#source: exit.s
+#ld: -T discard.ld
+#error: `data' referenced in section `\.text' of tmpdir/dump0.o: defined in discarded section `\.data\.exit' of tmpdir/dump1.o
+#objdump: -p
+#xfail: arc-*-* d30v-*-* dlx-*-* i960-*-* or32-*-* pj*-*-*
+#xfail: m68hc12-*-* m6812-*-*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-discard/start.s b/binutils-2.21/ld/testsuite/ld-discard/start.s
new file mode 100644
index 0000000..70f4187
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-discard/start.s
@@ -0,0 +1,7 @@
+ .text
+ .globl _start
+_start:
+ .long data
+ .section .debug_info
+ .long 0
+ .long text
diff --git a/binutils-2.21/ld/testsuite/ld-discard/static.d b/binutils-2.21/ld/testsuite/ld-discard/static.d
new file mode 100644
index 0000000..b001d72
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-discard/static.d
@@ -0,0 +1,7 @@
+#source: static.s
+#ld: -T discard.ld
+#error: `(\.data\.exit|data)' referenced in section `\.text' of tmpdir/dump0.o: defined in discarded section `\.data\.exit' of tmpdir/dump0.o
+#objdump: -p
+#xfail: arc-*-* d30v-*-* dlx-*-* i960-*-* or32-*-* pj*-*-*
+#xfail: m68hc12-*-* m6812-*-*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-discard/static.s b/binutils-2.21/ld/testsuite/ld-discard/static.s
new file mode 100644
index 0000000..a0f4569
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-discard/static.s
@@ -0,0 +1,11 @@
+ .section .data.exit,"aw"
+data:
+ .section .text.exit,"ax"
+text:
+ .text
+ .globl _start
+_start:
+ .long data
+ .section .debug_info
+ .long 0
+ .long text
diff --git a/binutils-2.21/ld/testsuite/ld-discard/zero-range.d b/binutils-2.21/ld/testsuite/ld-discard/zero-range.d
new file mode 100644
index 0000000..26b709e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-discard/zero-range.d
@@ -0,0 +1,8 @@
+#source: zero-range.s
+#ld: -T discard.ld
+#objdump: -s -j .debug_ranges
+
+.*: file format .*elf.*
+
+Contents of section .debug_ranges:
+ 0000 (01)?000000(01)? (01)?000000(01)? 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-discard/zero-range.s b/binutils-2.21/ld/testsuite/ld-discard/zero-range.s
new file mode 100644
index 0000000..e16caf4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-discard/zero-range.s
@@ -0,0 +1,13 @@
+ .text
+ .globl _start
+_start:
+
+ .section .debug_ranges
+ .long .Ltext
+ .long .Ltext + 2
+ .long 0
+ .long 0
+
+ .section .text.exit,"ax"
+.Ltext:
+ .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-discard/zero-rel.d b/binutils-2.21/ld/testsuite/ld-discard/zero-rel.d
new file mode 100644
index 0000000..1f73775
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-discard/zero-rel.d
@@ -0,0 +1,8 @@
+#source: zero-rel.s
+#ld: -T discard.ld
+#objdump: -s -j .debug_info
+
+.*: file format .*elf.*
+
+Contents of section .debug_info:
+ 0000 0+( 0+)? +(\.+) .*
diff --git a/binutils-2.21/ld/testsuite/ld-discard/zero-rel.s b/binutils-2.21/ld/testsuite/ld-discard/zero-rel.s
new file mode 100644
index 0000000..f3f0b3c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-discard/zero-rel.s
@@ -0,0 +1,11 @@
+ .text
+ .globl _start
+_start:
+
+ .section .debug_info
+ .long .Ltext
+ .long .Ltext + 2
+
+ .section .text.exit,"ax"
+.Ltext:
+ .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/audit.exp b/binutils-2.21/ld/testsuite/ld-elf/audit.exp
new file mode 100644
index 0000000..407c61a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/audit.exp
@@ -0,0 +1,65 @@
+# Expect script for various ELF tests.
+# Copyright 2009 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# Exclude non-ELF targets.
+
+if ![is_elf_format] {
+ return
+}
+
+# The following tests require running the executable generated by ld.
+if ![isnative] {
+ return
+}
+
+# Check if compiler works
+if { [which $CC] == 0 } {
+ return
+}
+
+set build_tests {
+ {"Run with -paudit.so"
+ "-Wl,--audit=tmpdir/audit.so" ""
+ {main.c} {{"readelf" {-d} "audit.rd"}} "audit.out"}
+ {"Run with -Paudit.so"
+ "-Wl,-Ptmpdir/audit.so" ""
+ {main.c} {{"readelf" {-d} "depaudit.rd"}} "depaudit.out"}
+ {"Run with --depaudit=audit.so"
+ "-Wl,--depaudit=tmpdir/audit.so" ""
+ {main.c} {{"readelf" {-d} "depaudit.rd"}} "depaudit2.out"}
+ {"Run with shared with --audit"
+ "-shared -Wl,--audit=tmpdir/audit.so" "-fPIC"
+ {main.c} {} "libusesaudit.so"}
+ {"Run with shared with --audit"
+ "-shared -Wl,--audit=tmpdir/audit.so -Wl,--audit=tmpdir/audit2.so \
+ -Wl,--audit=tmpdir/audit3.so"
+ "-fPIC"
+ {main.c} {} "libusesaudit2.so"}
+ {"Run with -lusesaudit"
+ "-Ltmpdir/ -lusesaudit" ""
+ {main.c} {{"readelf" {-d} "depaudit.rd"}} "useslibusesaudit.out"}
+ {"Run with -lusesaudit -lusesaudit2"
+ "-Ltmpdir/ -lusesaudit -lusesaudit2" ""
+ {main.c} {{"readelf" {-d} "depaudit2.rd"}} "useslibusesaudit2.out"}
+}
+
+run_cc_link_tests $build_tests
+
diff --git a/binutils-2.21/ld/testsuite/ld-elf/audit.rd b/binutils-2.21/ld/testsuite/ld-elf/audit.rd
new file mode 100644
index 0000000..fd3b941
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/audit.rd
@@ -0,0 +1,3 @@
+#...
+.*Audit library: \[tmpdir/audit.so\].*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/begin.c b/binutils-2.21/ld/testsuite/ld-elf/begin.c
new file mode 100644
index 0000000..ccc47d4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/begin.c
@@ -0,0 +1,5 @@
+extern void foo (void);
+
+static void (*const init_array []) (void)
+ __attribute__ ((used, section (".init_array"), aligned (sizeof (void *))))
+ = { foo };
diff --git a/binutils-2.21/ld/testsuite/ld-elf/beginwarn.c b/binutils-2.21/ld/testsuite/ld-elf/beginwarn.c
new file mode 100644
index 0000000..ebe2819
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/beginwarn.c
@@ -0,0 +1,9 @@
+static const char _evoke_link_warning_foo []
+ __attribute__ ((used, section (".gnu.warning.foo")))
+ = "function foo is deprecated";
+
+extern void foo (void);
+
+static void (*const init_array []) (void)
+ __attribute__ ((used, section (".init_array"), aligned (sizeof (void *))))
+ = { foo };
diff --git a/binutils-2.21/ld/testsuite/ld-elf/binutils.exp b/binutils-2.21/ld/testsuite/ld-elf/binutils.exp
new file mode 100644
index 0000000..422c5d7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/binutils.exp
@@ -0,0 +1,154 @@
+# Expect script for binutils tests
+# Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by H.J. Lu (hongjiu.lu@intel.com)
+#
+
+# Make sure that binutils can correctly handle ld output in ELF.
+
+# Run on Linux only.
+if { ![istarget *-*-linux*] } {
+ return
+}
+
+if { [istarget *-*-linux*aout*]
+ || [istarget *-*-linux*oldld*] } {
+ return
+}
+
+proc binutils_test { prog_name ld_options test } {
+ global as
+ global ld
+ global READELF
+ global objcopy
+ global strip
+ global srcdir
+ global subdir
+ global link_output
+
+ eval set prog \$$prog_name
+ set test_name "$prog_name $ld_options ($test)"
+
+ if { ![ld_assemble $as $srcdir/$subdir/$test.s tmpdir/$test.o ] } {
+ unresolved "$test_name"
+ return
+ }
+
+ if { ![ld_simple_link $ld tmpdir/$test "$ld_options tmpdir/$test.o"] } {
+ if { [string match "*not supported*" $link_output]
+ || [string match "*unrecognized option*" $link_output] } {
+ unsupported "$ld_options is not supported by this target"
+ } else {
+ unresolved "$test_name"
+ }
+ return
+ }
+
+ send_log "$READELF -l --wide tmpdir/$test > tmpdir/$test.exp\n"
+ set got [remote_exec host "$READELF -l --wide tmpdir/$test" "" "/dev/null" "tmpdir/$test.exp"]
+ if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
+ send_log "$got\n"
+ unresolved "$test_name"
+ return
+ }
+
+ send_log "$prog tmpdir/$test\n"
+ set got [remote_exec host "$prog tmpdir/$test"]
+ if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
+ send_log "$got\n"
+ fail "$test_name"
+ return
+ }
+
+ send_log "$READELF -l --wide tmpdir/$test > tmpdir/$test.out\n"
+ set got [remote_exec host "$READELF -l --wide tmpdir/$test" "" "/dev/null" "tmpdir/$test.out"]
+ if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
+ send_log "$got\n"
+ unresolved "$test_name"
+ return
+ }
+
+ if { [catch {exec cmp tmpdir/$test.exp tmpdir/$test.out}] } then {
+ send_log "tmpdir/$test.exp tmpdir/$test.out differ.\n"
+ fail "$test_name"
+ return
+ }
+
+ pass "$test_name"
+}
+
+binutils_test strip "-z max-page-size=0x200000" maxpage1
+binutils_test strip "-z max-page-size=0x200000 -z common-page-size=0x100000" maxpage1
+binutils_test strip "-z max-page-size=0x100000" maxpage1
+binutils_test strip "-z max-page-size=0x100000 -z common-page-size=0x1000" maxpage1
+
+binutils_test strip "" maxpage1
+binutils_test strip "-shared" maxpage1
+binutils_test objcopy "" maxpage1
+binutils_test objcopy "-shared" maxpage1
+
+binutils_test strip "-z relro" relro1
+binutils_test strip "-z relro -shared" relro1
+binutils_test objcopy "-z relro" relro1
+binutils_test objcopy "-z relro -shared" relro1
+if { ([istarget "i?86-*-elf*"]
+ || ([istarget "i?86-*-linux*"]
+ && ![istarget "*-*-*aout*"]
+ && ![istarget "*-*-*oldld*"])
+ || [istarget "x86_64-*-linux*"]
+ || [istarget "amd64-*-linux*"]) } {
+ binutils_test strip "-z relro -shared" relro2
+ binutils_test objcopy "-z relro -shared" relro2
+}
+
+binutils_test strip "-T ${srcdir}/${subdir}/lma.lnk" lma
+
+# hppa64 has its own .tbss section, with different flags.
+if { ![istarget "hppa64-*-*"] } {
+ binutils_test objcopy "" tbss1
+ binutils_test objcopy "-z relro" tbss1
+ binutils_test objcopy "-shared" tbss1
+ binutils_test objcopy "-shared -z relro" tbss1
+ binutils_test objcopy "-z max-page-size=0x100000" tbss1
+ binutils_test objcopy "-z max-page-size=0x100000 -z common-page-size=0x1000" tbss1
+}
+
+binutils_test objcopy "" tdata1
+binutils_test objcopy "-z relro" tdata1
+binutils_test objcopy "-shared" tdata1
+binutils_test objcopy "-shared -z relro" tdata1
+binutils_test objcopy "-z max-page-size=0x100000" tdata1
+binutils_test objcopy "-z max-page-size=0x100000 -z common-page-size=0x1000" tdata1
+
+if { ![istarget "hppa64-*-*"] } {
+ binutils_test objcopy "" tbss2
+ binutils_test objcopy "-z relro" tbss2
+ binutils_test objcopy "-shared" tbss2
+ binutils_test objcopy "-shared -z relro" tbss2
+ binutils_test objcopy "-z max-page-size=0x100000" tbss2
+ binutils_test objcopy "-z max-page-size=0x100000 -z common-page-size=0x1000" tbss2
+}
+
+binutils_test objcopy "" tdata2
+binutils_test objcopy "-z relro" tdata2
+binutils_test objcopy "-shared" tdata2
+binutils_test objcopy "-shared -z relro" tdata2
+binutils_test objcopy "-z max-page-size=0x100000" tdata2
+binutils_test objcopy "-z max-page-size=0x100000 -z common-page-size=0x1000" tdata2
diff --git a/binutils-2.21/ld/testsuite/ld-elf/comm1.c b/binutils-2.21/ld/testsuite/ld-elf/comm1.c
new file mode 100644
index 0000000..c553d86
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/comm1.c
@@ -0,0 +1,17 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int foo;
+void bar (void);
+
+int
+main ()
+{
+ if (foo != 0)
+ abort ();
+ foo = 200;
+ bar ();
+ if (foo == 200)
+ printf ("PASS\n");
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/commonpage1.d b/binutils-2.21/ld/testsuite/ld-elf/commonpage1.d
new file mode 100644
index 0000000..76dc056
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/commonpage1.d
@@ -0,0 +1,9 @@
+#source: maxpage1.s
+#ld: -z max-page-size=0x200000 -z common-page-size=0x100000
+#readelf: -l --wide
+#target: *-*-linux*
+
+#...
+ LOAD+.*0x200000
+ LOAD+.*0x200000
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/commonpage2.d b/binutils-2.21/ld/testsuite/ld-elf/commonpage2.d
new file mode 100644
index 0000000..e4d582b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/commonpage2.d
@@ -0,0 +1,9 @@
+#source: maxpage1.s
+#as: --32
+#ld: -z max-page-size=0x200000 -z common-page-size=0x100000 -T maxpage4.t
+#readelf: -l --wide
+#target: x86_64-*-linux*
+
+#...
+ LOAD+.*0x200000
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/compress.exp b/binutils-2.21/ld/testsuite/ld-elf/compress.exp
new file mode 100644
index 0000000..1e13394
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/compress.exp
@@ -0,0 +1,59 @@
+# Expect script for ELF compressed debug section tests.
+# Copyright 2010 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# Exclude non-ELF targets.
+
+if ![is_elf_format] {
+ return
+}
+
+# The following tests require running the executable generated by ld.
+if ![isnative] {
+ return
+}
+
+# Check if compiler works
+if { [which $CC] == 0 } {
+ return
+}
+
+global as
+if { ![ld_assemble $as "--compress-debug-sections $srcdir/$subdir/empty.s" tmpdir/empty.o ] } {
+ unsupported "linker compressed debug sections"
+}
+
+set build_tests {
+ {"Build libfoo.so with compressed debug sections"
+ "-shared" "-fPIC -g -Wa,--compress-debug-sections"
+ {foo.c} {} "libfoo.so"}
+ {"Build libbar.so with compressed debug sections"
+ "-shared" "-fPIC -g -Wa,--compress-debug-sections"
+ {begin.c end.c} {} "libbar.so"}
+}
+
+set run_tests {
+ {"Run normal with libfoo.so with compressed debug sections"
+ "tmpdir/begin.o tmpdir/libfoo.so tmpdir/end.o" "-Wa,--compress-debug-sections"
+ {main.c} "normal" "normal.out"}
+}
+
+run_cc_link_tests $build_tests
+run_ld_link_exec_tests [] $run_tests
diff --git a/binutils-2.21/ld/testsuite/ld-elf/compress1.s b/binutils-2.21/ld/testsuite/ld-elf/compress1.s
new file mode 100644
index 0000000..8ef0a15
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/compress1.s
@@ -0,0 +1,216 @@
+/* This testcase is derived from a similar test in GDB.
+
+ Copyright 2008, 2009, 2010 Free Software Foundation, Inc.
+
+ 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 3 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, see <http://www.gnu.org/licenses/>. */
+
+/* Dummy function to provide debug information for. */
+
+ .text
+.Lbegin_text1:
+ .globl func_cu2
+ .type func_cu2, %function
+func_cu2:
+.Lbegin_func_cu2:
+ .int 0
+.Lend_func_cu2:
+ .size func_cu2, .-func_cu2
+.Lend_text1:
+
+/* Debug information */
+
+ .section .debug_info
+.Lcu1_begin:
+ /* CU header */
+ .4byte .Lcu1_end - .Lcu1_start /* Length of Compilation Unit */
+.Lcu1_start:
+ .2byte 2 /* DWARF Version */
+ .4byte .Labbrev1_begin /* Offset into abbrev section */
+ .byte 4 /* Pointer size */
+
+ /* CU die */
+ .uleb128 1 /* Abbrev: DW_TAG_compile_unit */
+ .4byte .Lline1_begin /* DW_AT_stmt_list */
+ .4byte .Lend_text1 /* DW_AT_high_pc */
+ .4byte .Lbegin_text1 /* DW_AT_low_pc */
+ .ascii "file1.txt\0" /* DW_AT_name */
+ .ascii "GNU C 3.3.3\0" /* DW_AT_producer */
+ .byte 1 /* DW_AT_language (C) */
+
+ /* func_cu2 */
+ .uleb128 2 /* Abbrev: DW_TAG_subprogram */
+ .byte 1 /* DW_AT_external */
+ .byte 1 /* DW_AT_decl_file */
+ .byte 2 /* DW_AT_decl_line */
+ .ascii "func_cu2\0" /* DW_AT_name */
+ .4byte .Ltype_int-.Lcu1_begin /* DW_AT_type */
+ .4byte .Lbegin_func_cu2 /* DW_AT_low_pc */
+ .4byte .Lend_func_cu2 /* DW_AT_high_pc */
+ .byte 1 /* DW_AT_frame_base: length */
+ .byte 0x55 /* DW_AT_frame_base: DW_OP_reg5 */
+
+.Ltype_int:
+ .uleb128 3 /* Abbrev: DW_TAG_base_type */
+ .ascii "int\0" /* DW_AT_name */
+ .byte 4 /* DW_AT_byte_size */
+ .byte 5 /* DW_AT_encoding */
+
+ .byte 0 /* End of children of CU */
+
+.Lcu1_end:
+
+/* Line table */
+ .section .debug_line
+.Lline1_begin:
+ .4byte .Lline1_end - .Lline1_start /* Initial length */
+.Lline1_start:
+ .2byte 2 /* Version */
+ .4byte .Lline1_lines - .Lline1_hdr /* header_length */
+.Lline1_hdr:
+ .byte 1 /* Minimum insn length */
+ .byte 1 /* default_is_stmt */
+ .byte 1 /* line_base */
+ .byte 1 /* line_range */
+ .byte 0x10 /* opcode_base */
+
+ /* Standard lengths */
+ .byte 0
+ .byte 1
+ .byte 1
+ .byte 1
+ .byte 1
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 1
+ .byte 0
+ .byte 0
+ .byte 1
+ .byte 0
+ .byte 0
+ .byte 0
+
+ /* Include directories */
+ .byte 0
+
+ /* File names */
+ .ascii "file1.txt\0"
+ .uleb128 0
+ .uleb128 0
+ .uleb128 0
+
+ .byte 0
+
+.Lline1_lines:
+ .byte 0 /* DW_LNE_set_address */
+ .uleb128 5
+ .byte 2
+ .4byte .Lbegin_func_cu2
+
+ .byte 3 /* DW_LNS_advance_line */
+ .sleb128 3 /* ... to 4 */
+
+ .byte 1 /* DW_LNS_copy */
+
+ .byte 1 /* DW_LNS_copy (second time as an end-of-prologue marker) */
+
+ .byte 0 /* DW_LNE_set_address */
+ .uleb128 5
+ .byte 2
+ .4byte .Lend_func_cu2
+
+ .byte 0 /* DW_LNE_end_of_sequence */
+ .uleb128 1
+ .byte 1
+
+.Lline1_end:
+
+/* Abbrev table */
+ .section .debug_abbrev
+.Labbrev1_begin:
+ .uleb128 1 /* Abbrev code */
+ .uleb128 0x11 /* DW_TAG_compile_unit */
+ .byte 1 /* has_children */
+ .uleb128 0x10 /* DW_AT_stmt_list */
+ .uleb128 0x6 /* DW_FORM_data4 */
+ .uleb128 0x12 /* DW_AT_high_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x11 /* DW_AT_low_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x25 /* DW_AT_producer */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x13 /* DW_AT_language */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+ .uleb128 2 /* Abbrev code */
+ .uleb128 0x2e /* DW_TAG_subprogram */
+ .byte 0 /* has_children */
+ .uleb128 0x3f /* DW_AT_external */
+ .uleb128 0xc /* DW_FORM_flag */
+ .uleb128 0x3a /* DW_AT_decl_file */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x3b /* DW_AT_decl_line */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x49 /* DW_AT_type */
+ .uleb128 0x13 /* DW_FORM_ref4 */
+ .uleb128 0x11 /* DW_AT_low_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x12 /* DW_AT_high_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x40 /* DW_AT_frame_base */
+ .uleb128 0xa /* DW_FORM_block1 */
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+ .uleb128 3 /* Abbrev code */
+ .uleb128 0x24 /* DW_TAG_base_type */
+ .byte 0 /* has_children */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0xb /* DW_AT_byte_size */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x3e /* DW_AT_encoding */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+ .section .debug_pubnames,"",%progbits
+ .4byte 0x19
+ .2byte 0x2
+ .4byte .Lcu1_begin
+ .4byte 0x43
+ .4byte 0x25
+ .string "func_cu2"
+ .4byte 0x0
+ .section .debug_aranges,"",%progbits
+ .4byte 0x1c
+ .2byte 0x2
+ .4byte .Lcu1_begin
+ .byte 0x4
+ .byte 0x0
+ .2byte 0x0
+ .2byte 0x0
+ .4byte .Lbegin_text1
+ .4byte .Lbegin_text1-.Lend_text1
+ .4byte 0x0
+ .4byte 0x0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/compress1a.d b/binutils-2.21/ld/testsuite/ld-elf/compress1a.d
new file mode 100644
index 0000000..a8eac40
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/compress1a.d
@@ -0,0 +1,10 @@
+#source: compress1.s
+#as: --compress-debug-sections
+#ld: -e func_cu2
+#readelf: -S --wide
+#notarget: alpha-*
+
+#failif
+#...
+ \[[ 0-9]+\] \.zdebug_.*[ ]+(PROGBITS|MIPS_DWARF)[ 0-9a-z]+ .*
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-elf/compress1b.d b/binutils-2.21/ld/testsuite/ld-elf/compress1b.d
new file mode 100644
index 0000000..f3428d4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/compress1b.d
@@ -0,0 +1,9 @@
+#source: compress1.s
+#as: --compress-debug-sections
+#ld: -r
+#readelf: -S --wide
+
+#failif
+#...
+ \[[ 0-9]+\] \.zdebug_.*[ ]+(PROGBITS|MIPS_DWARF)[ 0-9a-z]+ .*
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-elf/compress1c.d b/binutils-2.21/ld/testsuite/ld-elf/compress1c.d
new file mode 100644
index 0000000..5042694
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/compress1c.d
@@ -0,0 +1,10 @@
+#source: compress1.s
+#as: --compress-debug-sections
+#ld: -shared
+#readelf: -S --wide
+#target: *-*-linux*
+
+#failif
+#...
+ \[[ 0-9]+\] \.zdebug_.*[ ]+(PROGBITS|MIPS_DWARF)[ 0-9a-z]+ .*
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-elf/data1.c b/binutils-2.21/ld/testsuite/ld-elf/data1.c
new file mode 100644
index 0000000..c205f82
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/data1.c
@@ -0,0 +1,6 @@
+#include "data1.h"
+
+char a1[1] __attribute__ ((aligned (ALIGNMENT1))) = { 10 };
+char a2[2] __attribute__ ((aligned (ALIGNMENT2)));
+char a3[3] __attribute__ ((aligned (ALIGNMENT3)));
+char a4[4] __attribute__ ((aligned (ALIGNMENT4)));
diff --git a/binutils-2.21/ld/testsuite/ld-elf/data1.h b/binutils-2.21/ld/testsuite/ld-elf/data1.h
new file mode 100644
index 0000000..529ee4b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/data1.h
@@ -0,0 +1,9 @@
+#define ALIGNMENT1 0x800
+#define ALIGNMENT2 0x400
+#define ALIGNMENT3 0x200
+#define ALIGNMENT4 0x100
+
+extern char a1[1];
+extern char a2[2];
+extern char a3[3];
+extern char a4[4];
diff --git a/binutils-2.21/ld/testsuite/ld-elf/del.cc b/binutils-2.21/ld/testsuite/ld-elf/del.cc
new file mode 100644
index 0000000..4e2cc60
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/del.cc
@@ -0,0 +1,29 @@
+#include <new>
+
+extern "C" void free (void *);
+
+void
+operator delete (void *ptr, const std::nothrow_t&) throw ()
+{
+ if (ptr)
+ free (ptr);
+}
+
+void
+operator delete (void *ptr) throw ()
+{
+ if (ptr)
+ free (ptr);
+}
+
+void
+operator delete[] (void *ptr) throw ()
+{
+ ::operator delete (ptr);
+}
+
+void
+operator delete[] (void *ptr, const std::nothrow_t&) throw ()
+{
+ ::operator delete (ptr);
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/depaudit.rd b/binutils-2.21/ld/testsuite/ld-elf/depaudit.rd
new file mode 100644
index 0000000..98a2692
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/depaudit.rd
@@ -0,0 +1,3 @@
+#...
+.*Dependency audit library: \[tmpdir/audit.so\].*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/depaudit2.rd b/binutils-2.21/ld/testsuite/ld-elf/depaudit2.rd
new file mode 100644
index 0000000..3554416
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/depaudit2.rd
@@ -0,0 +1,3 @@
+#...
+.*Dependency audit library: \[tmpdir/audit.so:tmpdir/audit2.so:tmpdir/audit3.so\].*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/discard.ld b/binutils-2.21/ld/testsuite/ld-elf/discard.ld
new file mode 100644
index 0000000..bd094f2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/discard.ld
@@ -0,0 +1,3 @@
+SECTIONS {
+ /DISCARD/ : { *(.discard) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/discard1.d b/binutils-2.21/ld/testsuite/ld-elf/discard1.d
new file mode 100644
index 0000000..b80fbf0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/discard1.d
@@ -0,0 +1,9 @@
+#source: discard1.s
+#ld: -r -T discard.ld
+#readelf: -r
+#target: x86_64-*-linux-gnu i?86-*-linux-gnu
+
+Relocation section '.rel.*.debug_info' at offset 0x[0-9a-z]+ contains 1 entries:
+[ \t]+Offset[ \t]+Info[ \t]+Type[ \t]+Sym.*
+[0-9a-f]+[ \t]+[0-9a-f]+[ \t]+R_.*[ \t]+[0-9a-f]+[ \t]+bar.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/discard1.s b/binutils-2.21/ld/testsuite/ld-elf/discard1.s
new file mode 100644
index 0000000..ac3b92f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/discard1.s
@@ -0,0 +1,11 @@
+ .globl bar
+ .data
+bar:
+ .long 1
+ .section .discard,"aw",%progbits
+ .align 4
+there:
+ .long 2
+ .section .debug_info,"",%progbits
+ .long bar
+ .long there
diff --git a/binutils-2.21/ld/testsuite/ld-elf/discard2.d b/binutils-2.21/ld/testsuite/ld-elf/discard2.d
new file mode 100644
index 0000000..65a3abe
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/discard2.d
@@ -0,0 +1,9 @@
+#source: discard2.s
+#ld: -r -T discard.ld
+#readelf: -r
+#target: x86_64-*-linux-gnu i?86-*-linux-gnu
+
+Relocation section '.rel.*.debug_info' at offset 0x[0-9a-z]+ contains 1 entries:
+[ \t]+Offset[ \t]+Info[ \t]+Type[ \t]+Sym.*
+[0-9a-f]+[ \t]+[0-9a-f]+[ \t]+R_.*[ \t]+[0-9a-f]+[ \t]+here.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/discard2.s b/binutils-2.21/ld/testsuite/ld-elf/discard2.s
new file mode 100644
index 0000000..27b66f4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/discard2.s
@@ -0,0 +1,12 @@
+ .globl here
+ .data
+here:
+ .long 1
+ .globl there
+ .section .discard,"aw",%progbits
+ .align 4
+there:
+ .long 2
+ .section .debug_info,"",%progbits
+ .long here
+ .long there
diff --git a/binutils-2.21/ld/testsuite/ld-elf/discard3.d b/binutils-2.21/ld/testsuite/ld-elf/discard3.d
new file mode 100644
index 0000000..07962b5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/discard3.d
@@ -0,0 +1,11 @@
+#source: discard1.s
+#source: discard2.s
+#ld: -r -T discard.ld
+#readelf: -r
+#target: x86_64-*-linux-gnu i?86-*-linux-gnu
+
+Relocation section '.rel.*.debug_info' at offset 0x[0-9a-z]+ contains 2 entries:
+[ \t]+Offset[ \t]+Info[ \t]+Type[ \t]+Sym.*
+[0-9a-f]+[ \t]+[0-9a-f]+[ \t]+R_.*[ \t]+[0-9a-f]+[ \t]+bar.*
+[0-9a-f]+[ \t]+[0-9a-f]+[ \t]+R_.*[ \t]+[0-9a-f]+[ \t]+here.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl1.c b/binutils-2.21/ld/testsuite/ld-elf/dl1.c
new file mode 100644
index 0000000..09426f3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl1.c
@@ -0,0 +1,10 @@
+#include <stdio.h>
+
+extern int bar;
+
+void
+foo (void)
+{
+ if (bar == -20)
+ printf ("OK\n");
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl1.list b/binutils-2.21/ld/testsuite/ld-elf/dl1.list
new file mode 100644
index 0000000..9ffada0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl1.list
@@ -0,0 +1,6 @@
+{
+ extern "C"
+ {
+ bar;
+ };
+};
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl1.out b/binutils-2.21/ld/testsuite/ld-elf/dl1.out
new file mode 100644
index 0000000..d86bac9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl1.out
@@ -0,0 +1 @@
+OK
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl1main.c b/binutils-2.21/ld/testsuite/ld-elf/dl1main.c
new file mode 100644
index 0000000..f224e12
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl1main.c
@@ -0,0 +1,33 @@
+#include <stdio.h>
+#include <dlfcn.h>
+
+int bar = -20;
+
+int
+main (void)
+{
+ int ret = 0;
+ void *handle;
+ void (*fcn) (void);
+
+ handle = dlopen("./tmpdir/libdl1.so", RTLD_GLOBAL|RTLD_LAZY);
+ if (!handle)
+ {
+ printf("dlopen ./tmpdir/libdl1.so: %s\n", dlerror ());
+ return 1;
+ }
+
+ fcn = (void (*)(void)) dlsym(handle, "foo");
+ if (!fcn)
+ {
+ printf("dlsym foo: %s\n", dlerror ());
+ ret += 1;
+ }
+ else
+ {
+ (*fcn) ();
+ }
+
+ dlclose (handle);
+ return ret;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl2.c b/binutils-2.21/ld/testsuite/ld-elf/dl2.c
new file mode 100644
index 0000000..b5cd927
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl2.c
@@ -0,0 +1,16 @@
+#include <stdio.h>
+
+int foo;
+
+extern void xxx (void);
+
+void
+bar (int x)
+{
+ if (foo == 1)
+ printf ("OK1\n");
+ else if (foo == 0)
+ printf ("OK2\n");
+ foo = -1;
+ xxx ();
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl2.list b/binutils-2.21/ld/testsuite/ld-elf/dl2.list
new file mode 100644
index 0000000..e985dcf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl2.list
@@ -0,0 +1,3 @@
+{
+ foo;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl2a.list b/binutils-2.21/ld/testsuite/ld-elf/dl2a.list
new file mode 100644
index 0000000..989646e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl2a.list
@@ -0,0 +1,3 @@
+{
+ "foo";
+};
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl2a.out b/binutils-2.21/ld/testsuite/ld-elf/dl2a.out
new file mode 100644
index 0000000..f3d5b9f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl2a.out
@@ -0,0 +1,3 @@
+OK1
+DSO
+OK1
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl2b.out b/binutils-2.21/ld/testsuite/ld-elf/dl2b.out
new file mode 100644
index 0000000..f30cead
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl2b.out
@@ -0,0 +1,3 @@
+OK1
+MAIN
+OK1
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl2main.c b/binutils-2.21/ld/testsuite/ld-elf/dl2main.c
new file mode 100644
index 0000000..ddf677f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl2main.c
@@ -0,0 +1,22 @@
+#include <stdio.h>
+
+extern int foo;
+extern void bar (void);
+
+void
+xxx (void)
+{
+ printf ("MAIN\n");
+}
+
+int
+main (void)
+{
+ foo = 1;
+ bar ();
+ if (foo == -1)
+ printf ("OK1\n");
+ else if (foo == 1)
+ printf ("OK2\n");
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl2xxx.c b/binutils-2.21/ld/testsuite/ld-elf/dl2xxx.c
new file mode 100644
index 0000000..cf3a1d0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl2xxx.c
@@ -0,0 +1,7 @@
+#include <stdio.h>
+
+void
+xxx (void)
+{
+ printf ("DSO\n");
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl2xxx.list b/binutils-2.21/ld/testsuite/ld-elf/dl2xxx.list
new file mode 100644
index 0000000..9388cda
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl2xxx.list
@@ -0,0 +1,3 @@
+{
+ xxx;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl3.cc b/binutils-2.21/ld/testsuite/ld-elf/dl3.cc
new file mode 100644
index 0000000..558e49f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl3.cc
@@ -0,0 +1,7 @@
+#include "dl3header.h"
+
+void
+f (void)
+{
+ throw (A (42));
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl3.list b/binutils-2.21/ld/testsuite/ld-elf/dl3.list
new file mode 100644
index 0000000..0b347ea
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl3.list
@@ -0,0 +1,6 @@
+{
+ extern "C++"
+ {
+ typeinfo*;
+ };
+};
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl3a.out b/binutils-2.21/ld/testsuite/ld-elf/dl3a.out
new file mode 100644
index 0000000..d86bac9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl3a.out
@@ -0,0 +1 @@
+OK
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl3b.out b/binutils-2.21/ld/testsuite/ld-elf/dl3b.out
new file mode 100644
index 0000000..8a15044
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl3b.out
@@ -0,0 +1 @@
+BAD2
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl3header.h b/binutils-2.21/ld/testsuite/ld-elf/dl3header.h
new file mode 100644
index 0000000..66f7d46
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl3header.h
@@ -0,0 +1,5 @@
+struct A
+{
+ int i;
+ A (int i): i(i) {}
+};
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl3main.cc b/binutils-2.21/ld/testsuite/ld-elf/dl3main.cc
new file mode 100644
index 0000000..977f9bb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl3main.cc
@@ -0,0 +1,25 @@
+#include <stdio.h>
+#include "dl3header.h"
+
+extern void f (void);
+
+int
+main (void)
+{
+ try
+ {
+ f();
+ }
+ catch (A a)
+ {
+ if (a.i == 42)
+ printf ("OK\n");
+ else
+ printf ("BAD1\n");
+ }
+ catch (...)
+ {
+ printf ("BAD2\n");
+ }
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl4.c b/binutils-2.21/ld/testsuite/ld-elf/dl4.c
new file mode 100644
index 0000000..bf6f070
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl4.c
@@ -0,0 +1,24 @@
+#include <stdio.h>
+
+int foo1;
+int foo2;
+
+extern void xxx1 (void);
+extern void xxx2 (void);
+
+void
+bar (int x)
+{
+ if (foo1 == 1)
+ printf ("bar OK1\n");
+ else if (foo1 == 0)
+ printf ("bar OK2\n");
+ if (foo2 == 1)
+ printf ("bar OK3\n");
+ else if (foo2 == 0)
+ printf ("bar OK4\n");
+ foo1 = -1;
+ foo2 = -1;
+ xxx1 ();
+ xxx2 ();
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl4.list b/binutils-2.21/ld/testsuite/ld-elf/dl4.list
new file mode 100644
index 0000000..e932e23
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl4.list
@@ -0,0 +1,4 @@
+{
+ foo1;
+ foo2;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl4a.out b/binutils-2.21/ld/testsuite/ld-elf/dl4a.out
new file mode 100644
index 0000000..871c5be
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl4a.out
@@ -0,0 +1,6 @@
+bar OK1
+bar OK3
+DSO1
+DSO2
+OK1
+OK3
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl4b.out b/binutils-2.21/ld/testsuite/ld-elf/dl4b.out
new file mode 100644
index 0000000..b838f5b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl4b.out
@@ -0,0 +1,6 @@
+bar OK1
+bar OK3
+MAIN1
+MAIN2
+OK1
+OK3
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl4main.c b/binutils-2.21/ld/testsuite/ld-elf/dl4main.c
new file mode 100644
index 0000000..173450d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl4main.c
@@ -0,0 +1,34 @@
+#include <stdio.h>
+
+extern int foo1;
+extern int foo2;
+extern void bar (void);
+
+void
+xxx1 (void)
+{
+ printf ("MAIN1\n");
+}
+
+void
+xxx2 (void)
+{
+ printf ("MAIN2\n");
+}
+
+int
+main (void)
+{
+ foo1 = 1;
+ foo2 = 1;
+ bar ();
+ if (foo1 == -1)
+ printf ("OK1\n");
+ else if (foo1 == 1)
+ printf ("OK2\n");
+ if (foo2 == -1)
+ printf ("OK3\n");
+ else if (foo2 == 1)
+ printf ("OK4\n");
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl4xxx.c b/binutils-2.21/ld/testsuite/ld-elf/dl4xxx.c
new file mode 100644
index 0000000..8180eb1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl4xxx.c
@@ -0,0 +1,13 @@
+#include <stdio.h>
+
+void
+xxx1 (void)
+{
+ printf ("DSO1\n");
+}
+
+void
+xxx2 (void)
+{
+ printf ("DSO2\n");
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl4xxx.list b/binutils-2.21/ld/testsuite/ld-elf/dl4xxx.list
new file mode 100644
index 0000000..f39ce14
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl4xxx.list
@@ -0,0 +1,4 @@
+{
+ xxx1;
+ xxx2;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl5.cc b/binutils-2.21/ld/testsuite/ld-elf/dl5.cc
new file mode 100644
index 0000000..cc40455
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl5.cc
@@ -0,0 +1,61 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <new>
+
+int pass = 0;
+
+void *
+operator new (size_t sz, const std::nothrow_t&) throw ()
+{
+ void *p;
+ pass++;
+ p = malloc(sz);
+ return p;
+}
+
+void *
+operator new (size_t sz) throw (std::bad_alloc)
+{
+ void *p;
+ pass++;
+ p = malloc(sz);
+ return p;
+}
+
+void
+operator delete (void *ptr) throw ()
+{
+ pass++;
+ if (ptr)
+ free (ptr);
+}
+
+class A
+{
+public:
+ A() {}
+ ~A() { }
+ int a;
+ int b;
+};
+
+
+int
+main (void)
+{
+ A *bb = new A[10];
+ delete [] bb;
+ bb = new (std::nothrow) A [10];
+ delete [] bb;
+
+ if (pass == 4)
+ {
+ printf ("PASS\n");
+ return 0;
+ }
+ else
+ {
+ printf ("FAIL\n");
+ return 1;
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl5.out b/binutils-2.21/ld/testsuite/ld-elf/dl5.out
new file mode 100644
index 0000000..7ef22e9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl5.out
@@ -0,0 +1 @@
+PASS
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl6.c b/binutils-2.21/ld/testsuite/ld-elf/dl6.c
new file mode 100644
index 0000000..f655ca6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl6.c
@@ -0,0 +1,14 @@
+#include <stdio.h>
+
+int bar = 10;
+
+void
+foo (void)
+{
+ if (bar == 10)
+ printf ("bar is in DSO.\n");
+ else if (bar == -20)
+ printf ("bar is in main.\n");
+ else
+ printf ("FAIL\n");
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl6a.out b/binutils-2.21/ld/testsuite/ld-elf/dl6a.out
new file mode 100644
index 0000000..186e848
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl6a.out
@@ -0,0 +1 @@
+bar is in main.
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl6amain.c b/binutils-2.21/ld/testsuite/ld-elf/dl6amain.c
new file mode 100644
index 0000000..9824224
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl6amain.c
@@ -0,0 +1,33 @@
+#include <stdio.h>
+#include <dlfcn.h>
+
+int bar = -20;
+
+int
+main (void)
+{
+ int ret = 0;
+ void *handle;
+ void (*fcn) (void);
+
+ handle = dlopen("./tmpdir/libdl6a.so", RTLD_GLOBAL|RTLD_LAZY);
+ if (!handle)
+ {
+ printf("dlopen ./tmpdir/libdl6a.so: %s\n", dlerror ());
+ return 1;
+ }
+
+ fcn = (void (*)(void)) dlsym(handle, "foo");
+ if (!fcn)
+ {
+ printf("dlsym foo: %s\n", dlerror ());
+ ret += 1;
+ }
+ else
+ {
+ (*fcn) ();
+ }
+
+ dlclose (handle);
+ return ret;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl6b.out b/binutils-2.21/ld/testsuite/ld-elf/dl6b.out
new file mode 100644
index 0000000..8cc87f5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl6b.out
@@ -0,0 +1 @@
+bar is in DSO.
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl6bmain.c b/binutils-2.21/ld/testsuite/ld-elf/dl6bmain.c
new file mode 100644
index 0000000..df9dbcc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl6bmain.c
@@ -0,0 +1,33 @@
+#include <stdio.h>
+#include <dlfcn.h>
+
+int bar = -20;
+
+int
+main (void)
+{
+ int ret = 0;
+ void *handle;
+ void (*fcn) (void);
+
+ handle = dlopen("./tmpdir/libdl6b.so", RTLD_GLOBAL|RTLD_LAZY);
+ if (!handle)
+ {
+ printf("dlopen ./tmpdir/libdl6b.so: %s\n", dlerror ());
+ return 1;
+ }
+
+ fcn = (void (*)(void)) dlsym(handle, "foo");
+ if (!fcn)
+ {
+ printf("dlsym foo: %s\n", dlerror ());
+ ret += 1;
+ }
+ else
+ {
+ (*fcn) ();
+ }
+
+ dlclose (handle);
+ return ret;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl6cmain.c b/binutils-2.21/ld/testsuite/ld-elf/dl6cmain.c
new file mode 100644
index 0000000..f6c285c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl6cmain.c
@@ -0,0 +1,33 @@
+#include <stdio.h>
+#include <dlfcn.h>
+
+int bar = -20;
+
+int
+main (void)
+{
+ int ret = 0;
+ void *handle;
+ void (*fcn) (void);
+
+ handle = dlopen("./tmpdir/libdl6c.so", RTLD_GLOBAL|RTLD_LAZY);
+ if (!handle)
+ {
+ printf("dlopen ./tmpdir/libdl6c.so: %s\n", dlerror ());
+ return 1;
+ }
+
+ fcn = (void (*)(void)) dlsym(handle, "foo");
+ if (!fcn)
+ {
+ printf("dlsym foo: %s\n", dlerror ());
+ ret += 1;
+ }
+ else
+ {
+ (*fcn) ();
+ }
+
+ dlclose (handle);
+ return ret;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dl6dmain.c b/binutils-2.21/ld/testsuite/ld-elf/dl6dmain.c
new file mode 100644
index 0000000..2e57eb7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dl6dmain.c
@@ -0,0 +1,33 @@
+#include <stdio.h>
+#include <dlfcn.h>
+
+int bar = -20;
+
+int
+main (void)
+{
+ int ret = 0;
+ void *handle;
+ void (*fcn) (void);
+
+ handle = dlopen("./tmpdir/libdl6d.so", RTLD_GLOBAL|RTLD_LAZY);
+ if (!handle)
+ {
+ printf("dlopen ./tmpdir/libdl6d.so: %s\n", dlerror ());
+ return 1;
+ }
+
+ fcn = (void (*)(void)) dlsym(handle, "foo");
+ if (!fcn)
+ {
+ printf("dlsym foo: %s\n", dlerror ());
+ ret += 1;
+ }
+ else
+ {
+ (*fcn) ();
+ }
+
+ dlclose (handle);
+ return ret;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dummy.c b/binutils-2.21/ld/testsuite/ld-elf/dummy.c
new file mode 100644
index 0000000..5c03287
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dummy.c
@@ -0,0 +1 @@
+/* An empty file. */
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dwarf.exp b/binutils-2.21/ld/testsuite/ld-elf/dwarf.exp
new file mode 100644
index 0000000..c313236
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dwarf.exp
@@ -0,0 +1,114 @@
+# Expect script for various DWARF tests.
+# Copyright 2006, 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+#
+# Written by H.J. Lu (hongjiu.lu@intel.com)
+#
+
+# Exclude non-ELF targets.
+
+if ![is_elf_format] {
+ return
+}
+
+# The following tests require running the executable generated by ld.
+if ![isnative] {
+ return
+}
+
+# Check if compiler works
+if { [which $CC] == 0 } {
+ return
+}
+
+# Skip if -feliminate-dwarf2-dups isn't supported.
+if ![ld_compile "$CC -g -feliminate-dwarf2-dups" $srcdir/$subdir/dummy.c tmpdir/dummy.o] {
+ return
+}
+
+set build_tests {
+ {"Build libdwarf1.so"
+ "-s -shared" "-fPIC -g -feliminate-dwarf2-dups"
+ {dwarf1.c} {} "libdwarf1.so"}
+}
+
+set run_tests {
+ {"Run with libdwarf1.so first"
+ "tmpdir/libdwarf1.so" ""
+ {dwarf1main.c} "dwarf1a" "dwarf1.out"
+ "-g -feliminate-dwarf2-dups"}
+ {"Run with libdwarf1.so last"
+ "tmpdir/dwarf1main.o tmpdir/libdwarf1.so" ""
+ {dummy.c} "dwarf1b" "dwarf1.out"
+ "-g -feliminate-dwarf2-dups"}
+}
+
+run_cc_link_tests $build_tests
+run_ld_link_exec_tests [] $run_tests
+
+proc strip_test {} {
+ global ld
+ global strip
+ global NM
+
+ set test "libdwarf1c.so"
+ set test_name "Strip -s $test"
+ set prog $strip
+
+ if ![ld_simple_link $ld tmpdir/$test "-shared tmpdir/dwarf1.o"] {
+ unresolved "$test_name"
+ return
+ }
+
+ send_log "$NM -D tmpdir/$test > tmpdir/$test.exp\n"
+ catch "exec $NM -D tmpdir/$test > tmpdir/$test.exp" got
+ if ![string match "" $got] then {
+ send_log "$got\n"
+ unresolved "$test_name"
+ return
+ }
+
+ send_log "$prog -s tmpdir/$test\n"
+ catch "exec $prog -s tmpdir/$test" got
+ if ![string match "" $got] then {
+ send_log "$got\n"
+ fail "$test_name"
+ return
+ }
+
+ send_log "$NM -D tmpdir/$test > tmpdir/$test.out\n"
+ catch "exec $NM -D tmpdir/$test > tmpdir/$test.out" got
+ if ![string match "" $got] then {
+ send_log "$got\n"
+ unresolved "$test_name"
+ return
+ }
+
+ if { [catch {exec cmp tmpdir/$test.exp tmpdir/$test.out}] } then {
+ send_log "tmpdir/$test.exp tmpdir/$test.out differ.\n"
+ fail "$test_name"
+ return
+ }
+
+ pass "$test_name"
+}
+
+strip_test
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dwarf1.c b/binutils-2.21/ld/testsuite/ld-elf/dwarf1.c
new file mode 100644
index 0000000..2895d4c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dwarf1.c
@@ -0,0 +1,10 @@
+#include <stdio.h>
+#include "dwarf1.h"
+
+struct foo_s foo;
+
+void
+doprintf (void)
+{
+ printf ("OK\n");
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dwarf1.h b/binutils-2.21/ld/testsuite/ld-elf/dwarf1.h
new file mode 100644
index 0000000..3cd7918
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dwarf1.h
@@ -0,0 +1,6 @@
+struct foo_s
+{
+ int foo;
+};
+
+extern void doprintf (void);
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dwarf1.out b/binutils-2.21/ld/testsuite/ld-elf/dwarf1.out
new file mode 100644
index 0000000..d86bac9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dwarf1.out
@@ -0,0 +1 @@
+OK
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dwarf1main.c b/binutils-2.21/ld/testsuite/ld-elf/dwarf1main.c
new file mode 100644
index 0000000..9045198
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dwarf1main.c
@@ -0,0 +1,10 @@
+#include "dwarf1.h"
+
+struct foo_s foo;
+
+int
+main (void)
+{
+ doprintf ();
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dynbss1.c b/binutils-2.21/ld/testsuite/ld-elf/dynbss1.c
new file mode 100644
index 0000000..eb5f067
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dynbss1.c
@@ -0,0 +1,20 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "data1.h"
+
+int
+main (void)
+{
+ if ((((long) (&a1)) & (ALIGNMENT1 - 1)))
+ abort ();
+ if ((((long) (&a2)) & (ALIGNMENT2 - 1)))
+ abort ();
+ if ((((long) (&a2)) & (ALIGNMENT3 - 1)))
+ abort ();
+ if ((((long) (&a3)) & (ALIGNMENT4 - 1)))
+ abort ();
+
+ printf ("PASS\n");
+
+ return(0) ;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/dynsym1.d b/binutils-2.21/ld/testsuite/ld-elf/dynsym1.d
new file mode 100644
index 0000000..88037ef
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/dynsym1.d
@@ -0,0 +1,8 @@
+#source: empty.s
+#ld: -shared
+#readelf: --dyn-syms
+#target: *-*-linux*
+
+#...
+ +[0-9]+: +[0-9a-f]+ +[0-9]+ +FUNC +GLOBAL +DEFAULT +[1-9] _start
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/eh-frame-hdr.d b/binutils-2.21/ld/testsuite/ld-elf/eh-frame-hdr.d
new file mode 100644
index 0000000..af8ae04
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/eh-frame-hdr.d
@@ -0,0 +1,7 @@
+#source: eh-frame-hdr.s
+#ld: -e _start --eh-frame-hdr
+#objdump: -hw
+#target: cfi
+#...
+ [0-9] .eh_frame_hdr 0*[12][048c] .*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/eh-frame-hdr.s b/binutils-2.21/ld/testsuite/ld-elf/eh-frame-hdr.s
new file mode 100644
index 0000000..e5d3318
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/eh-frame-hdr.s
@@ -0,0 +1,6 @@
+ .text
+ .global _start
+_start:
+ .cfi_startproc
+ .skip 16
+ .cfi_endproc
diff --git a/binutils-2.21/ld/testsuite/ld-elf/eh-group.exp b/binutils-2.21/ld/testsuite/ld-elf/eh-group.exp
new file mode 100644
index 0000000..6de3ecb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/eh-group.exp
@@ -0,0 +1,72 @@
+# Expect script for .eh_frame entries to a removed section.
+# Copyright 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+#
+# Written by Jan Kratochvil (jan.kratochvil@redhat.com)
+#
+# .eh_frame with relocations to a removed (group) section did result to:
+# error in tmpdir/eh-group.o(.eh_frame); no .eh_frame_hdr table will be created.
+# The purpose of this test is to merge two .o files with -r and then link this
+# merged file (containing a discarded R_X86_64_NONE relocation) to the final
+# executable trying to create .eh_frame_hdr. It needs a separate .exp file due
+# to the requirement of two `ld' runs.
+
+# Exclude non-CFI (such as ia64) targets.
+
+if {![check_as_cfi]} {
+ return
+}
+
+# The test uses ELF .section directive
+if ![is_elf_format] {
+ return
+}
+
+# alpha-linux-gnu does not support 64-bit relocations:
+# relocation truncated to fit: REFLONG against `.gcc_except_table'
+# arm-eabi does not support 64-bit relocations:
+# bad relocation fixup type (1)
+set testname "Guess the target size from eh-group1size.o"
+if [ld_assemble $as "$srcdir/$subdir/eh-group1.s" "tmpdir/eh-group1size.o"] {
+ pass $testname
+} else {
+ fail $testname
+}
+
+set as_options ""
+if [is_elf64 "tmpdir/eh-group1size.o"] {
+ set as_options "$as_options --defsym ELF64=1"
+}
+
+set build_tests_ld [list \
+ [list "Build eh-group1.o" \
+ "-r" "$as_options" \
+ {eh-group1.s eh-group2.s} {} "eh-group.o"] \
+]
+
+run_ld_link_tests $build_tests_ld
+
+set testname "Link eh-group.o to eh-group"
+if [ld_simple_link $ld "tmpdir/eh-group" "-e _start tmpdir/eh-group.o"] {
+ pass $testname
+} else {
+ fail $testname
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/eh-group1.s b/binutils-2.21/ld/testsuite/ld-elf/eh-group1.s
new file mode 100644
index 0000000..d6fdb88
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/eh-group1.s
@@ -0,0 +1,6 @@
+ .section sect, "axG", %progbits, sectgroup, comdat
+ .global _start
+_start:
+ .cfi_startproc
+ .skip 16
+ .cfi_endproc
diff --git a/binutils-2.21/ld/testsuite/ld-elf/eh-group2.s b/binutils-2.21/ld/testsuite/ld-elf/eh-group2.s
new file mode 100644
index 0000000..49b59de
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/eh-group2.s
@@ -0,0 +1,15 @@
+ .section sect, "axG", %progbits, sectgroup, comdat
+ .cfi_startproc
+# Test intention is that LSDA must be provided by the discarded FDE.
+# DW_EH_PE_udata8 = 4
+# DW_EH_PE_udata4 = 3
+ .ifdef ELF64
+ .cfi_lsda 4, lsda
+ .else
+ .cfi_lsda 3, lsda
+ .endif
+ .skip 16
+ .cfi_endproc
+
+ .section .gcc_except_table, "a", %progbits
+lsda:
diff --git a/binutils-2.21/ld/testsuite/ld-elf/eh1.d b/binutils-2.21/ld/testsuite/ld-elf/eh1.d
new file mode 100644
index 0000000..f0874f7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/eh1.d
@@ -0,0 +1,33 @@
+#source: eh1.s
+#source: eh1a.s
+#ld:
+#readelf: -wf
+#target: x86_64-*-*
+
+Contents of the .eh_frame section:
+
+00000000 00000014 00000000 CIE
+ Version: 1
+ Augmentation: ""
+ Code alignment factor: 1
+ Data alignment factor: -8
+ Return address column: 16
+
+ DW_CFA_def_cfa: r7 \(rsp\) ofs 8
+ DW_CFA_offset: r16 \(rip\) at cfa-8
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000018 0000001c 0000001c FDE cie=00000000 pc=00400078..00400078
+ DW_CFA_advance_loc: 0 to 00400078
+ DW_CFA_def_cfa_offset: 16
+ DW_CFA_offset: r6 \(rbp\) at cfa-16
+ DW_CFA_advance_loc: 0 to 00400078
+ DW_CFA_def_cfa_register: r6 \(rbp\)
+
+00000038 ZERO terminator
+
diff --git a/binutils-2.21/ld/testsuite/ld-elf/eh1.s b/binutils-2.21/ld/testsuite/ld-elf/eh1.s
new file mode 100644
index 0000000..a605209
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/eh1.s
@@ -0,0 +1,47 @@
+ .text
+.globl _start
+ .type _start, %function
+_start:
+.LFB2:
+.LCFI0:
+.LCFI1:
+.LFE2:
+ .size _start, .-_start
+ .section .eh_frame,"a",%progbits
+.Lframe1:
+ .long .LECIE1-.LSCIE1
+.LSCIE1:
+ .long 0x0
+ .byte 0x1
+ .string ""
+ .uleb128 0x1
+ .sleb128 -8
+ .byte 0x10
+ .byte 0xc
+ .uleb128 0x7
+ .uleb128 0x8
+ .byte 0x90
+ .uleb128 0x1
+ .align 8
+.LECIE1:
+.LSFDE1:
+ .long .LEFDE1-.LASFDE1
+.LASFDE1:
+ .long .LASFDE1-.Lframe1
+ .quad .LFB2
+ .quad .LFE2-.LFB2
+ .byte 0x4
+ .long .LCFI0-.LFB2
+ .byte 0xe
+ .uleb128 0x10
+ .byte 0x86
+ .uleb128 0x2
+ .byte 0x4
+ .long .LCFI1-.LCFI0
+ .byte 0xd
+ .uleb128 0x6
+ .byte 0x0
+ .byte 0x0
+ .byte 0x0
+ .byte 0x0
+.LEFDE1:
diff --git a/binutils-2.21/ld/testsuite/ld-elf/eh1a.s b/binutils-2.21/ld/testsuite/ld-elf/eh1a.s
new file mode 100644
index 0000000..c644014
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/eh1a.s
@@ -0,0 +1,3 @@
+ .section .eh_frame,"a",%progbits
+ .align 8
+ .zero 4
diff --git a/binutils-2.21/ld/testsuite/ld-elf/eh2.d b/binutils-2.21/ld/testsuite/ld-elf/eh2.d
new file mode 100644
index 0000000..1a05d7f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/eh2.d
@@ -0,0 +1,33 @@
+#source: eh1.s
+#source: eh2a.s
+#ld:
+#readelf: -wf
+#target: x86_64-*-*
+
+Contents of the .eh_frame section:
+
+00000000 00000014 00000000 CIE
+ Version: 1
+ Augmentation: ""
+ Code alignment factor: 1
+ Data alignment factor: -8
+ Return address column: 16
+
+ DW_CFA_def_cfa: r7 \(rsp\) ofs 8
+ DW_CFA_offset: r16 \(rip\) at cfa-8
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000018 0000001c 0000001c FDE cie=00000000 pc=00400078..00400078
+ DW_CFA_advance_loc: 0 to 00400078
+ DW_CFA_def_cfa_offset: 16
+ DW_CFA_offset: r6 \(rbp\) at cfa-16
+ DW_CFA_advance_loc: 0 to 00400078
+ DW_CFA_def_cfa_register: r6 \(rbp\)
+
+00000038 ZERO terminator
+
diff --git a/binutils-2.21/ld/testsuite/ld-elf/eh2a.s b/binutils-2.21/ld/testsuite/ld-elf/eh2a.s
new file mode 100644
index 0000000..2c024f8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/eh2a.s
@@ -0,0 +1,3 @@
+ .section .eh_frame,"a",%progbits
+ .align 4
+ .zero 4
diff --git a/binutils-2.21/ld/testsuite/ld-elf/eh3.d b/binutils-2.21/ld/testsuite/ld-elf/eh3.d
new file mode 100644
index 0000000..1f76b8c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/eh3.d
@@ -0,0 +1,33 @@
+#source: eh3.s
+#source: eh3a.s
+#ld:
+#readelf: -wf
+#target: x86_64-*-*
+
+Contents of the .eh_frame section:
+
+00000000 00000014 00000000 CIE
+ Version: 1
+ Augmentation: ""
+ Code alignment factor: 1
+ Data alignment factor: -8
+ Return address column: 16
+
+ DW_CFA_def_cfa: r7 \(rsp\) ofs 8
+ DW_CFA_offset: r16 \(rip\) at cfa-8
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000018 0000001c 0000001c FDE cie=00000000 pc=00400078..00400078
+ DW_CFA_advance_loc: 0 to 00400078
+ DW_CFA_def_cfa_offset: 16
+ DW_CFA_offset: r6 \(rbp\) at cfa-16
+ DW_CFA_advance_loc: 0 to 00400078
+ DW_CFA_def_cfa_register: r6 \(rbp\)
+
+00000038 ZERO terminator
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/eh3.s b/binutils-2.21/ld/testsuite/ld-elf/eh3.s
new file mode 100644
index 0000000..24bd90d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/eh3.s
@@ -0,0 +1,48 @@
+ .text
+.globl _start
+ .type _start, %function
+_start:
+.LFB2:
+.LCFI0:
+.LCFI1:
+.LFE2:
+ .size _start, .-_start
+ .section .eh_frame,"a",%progbits
+ .align 16
+.Lframe1:
+ .long .LECIE1-.LSCIE1
+.LSCIE1:
+ .long 0x0
+ .byte 0x1
+ .string ""
+ .uleb128 0x1
+ .sleb128 -8
+ .byte 0x10
+ .byte 0xc
+ .uleb128 0x7
+ .uleb128 0x8
+ .byte 0x90
+ .uleb128 0x1
+ .align 8
+.LECIE1:
+.LSFDE1:
+ .long .LEFDE1-.LASFDE1
+.LASFDE1:
+ .long .LASFDE1-.Lframe1
+ .quad .LFB2
+ .quad .LFE2-.LFB2
+ .byte 0x4
+ .long .LCFI0-.LFB2
+ .byte 0xe
+ .uleb128 0x10
+ .byte 0x86
+ .uleb128 0x2
+ .byte 0x4
+ .long .LCFI1-.LCFI0
+ .byte 0xd
+ .uleb128 0x6
+ .byte 0x0
+ .byte 0x0
+ .byte 0x0
+ .byte 0x0
+.LEFDE1:
diff --git a/binutils-2.21/ld/testsuite/ld-elf/eh3a.s b/binutils-2.21/ld/testsuite/ld-elf/eh3a.s
new file mode 100644
index 0000000..c245871
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/eh3a.s
@@ -0,0 +1,3 @@
+ .section .eh_frame,"a",%progbits
+ .align 8
+ .zero 8
diff --git a/binutils-2.21/ld/testsuite/ld-elf/eh4.d b/binutils-2.21/ld/testsuite/ld-elf/eh4.d
new file mode 100644
index 0000000..b8f9865
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/eh4.d
@@ -0,0 +1,32 @@
+#source: eh4.s
+#source: eh4a.s
+#ld: -shared
+#readelf: -wf
+#target: x86_64-*-*
+
+Contents of the .eh_frame section:
+
+00000000 00000014 00000000 CIE
+ Version: 1
+ Augmentation: "zR"
+ Code alignment factor: 1
+ Data alignment factor: -8
+ Return address column: 16
+ Augmentation data: 1b
+
+ DW_CFA_def_cfa: r7 \(rsp\) ofs 8
+ DW_CFA_offset: r16 \(rip\) at cfa-8
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000018 00000014 0000001c FDE cie=00000000 pc=00000400..00000413
+ DW_CFA_set_loc: 00000404
+ DW_CFA_def_cfa_offset: 80
+
+00000030 00000014 00000034 FDE cie=00000000 pc=00000413..00000426
+ DW_CFA_set_loc: 00000417
+ DW_CFA_def_cfa_offset: 80
+
+00000048 ZERO terminator
+#pass
+
diff --git a/binutils-2.21/ld/testsuite/ld-elf/eh4.s b/binutils-2.21/ld/testsuite/ld-elf/eh4.s
new file mode 100644
index 0000000..2714ad6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/eh4.s
@@ -0,0 +1,92 @@
+ .text
+ .align 512
+ .globl foo
+ .type foo, @function
+foo:
+.LFB1:
+ subq $72, %rsp
+.LCFI1:
+ xorl %eax, %eax
+ movq %rsp, %rdi
+ call bar@PLT
+ addq $72, %rsp
+ ret
+.LFE1:
+ .size foo, .-foo
+ .globl bar
+ .type bar, @function
+bar:
+.LFB2:
+ subq $72, %rsp
+.LCFI2:
+ xorl %eax, %eax
+ movq %rsp, %rdi
+ call bar@PLT
+ addq $72, %rsp
+ ret
+.LFE2:
+ .size bar, .-bar
+ .section .eh_frame,"a",@progbits
+.Lframe1:
+ .long .LECIE1-.LSCIE1 # Length of Common Information Entry
+.LSCIE1:
+ .long 0x0 # CIE Identifier Tag
+ .byte 0x1 # CIE Version
+ .ascii "zR\0" # CIE Augmentation
+ .uleb128 0x1 # CIE Code Alignment Factor
+ .sleb128 -8 # CIE Data Alignment Factor
+ .byte 0x10 # CIE RA Column
+ .uleb128 0x1 # Augmentation size
+ .byte 0x1b # FDE Encoding (pcrel sdata4)
+ .byte 0xc # DW_CFA_def_cfa
+ .uleb128 0x7
+ .uleb128 0x8
+ .byte 0x90 # DW_CFA_offset, column 0x10
+ .uleb128 0x1
+ .align 8
+.LECIE1:
+.LSFDE1:
+ .long .LEFDE1-.LASFDE1 # FDE Length
+.LASFDE1:
+ .long .LASFDE1-.Lframe1 # FDE CIE offset
+ .long .LFB1-. # FDE initial location
+ .long .LFE1-.LFB1 # FDE address range
+ .uleb128 0x0 # Augmentation size
+ .byte 0x1 # DW_CFA_set_loc
+ .long .LCFI1-.
+ .byte 0xe # DW_CFA_def_cfa_offset
+ .uleb128 0x50
+ .align 8
+.LEFDE1:
+.Lframe2:
+ .long .LECIE2-.LSCIE2 # Length of Common Information Entry
+.LSCIE2:
+ .long 0x0 # CIE Identifier Tag
+ .byte 0x1 # CIE Version
+ .ascii "zR\0" # CIE Augmentation
+ .uleb128 0x1 # CIE Code Alignment Factor
+ .sleb128 -8 # CIE Data Alignment Factor
+ .byte 0x10 # CIE RA Column
+ .uleb128 0x1 # Augmentation size
+ .byte 0x1b # FDE Encoding (pcrel sdata4)
+ .byte 0xc # DW_CFA_def_cfa
+ .uleb128 0x7
+ .uleb128 0x8
+ .byte 0x90 # DW_CFA_offset, column 0x10
+ .uleb128 0x1
+ .align 8
+.LECIE2:
+.LSFDE2:
+ .long .LEFDE2-.LASFDE2 # FDE Length
+.LASFDE2:
+ .long .LASFDE2-.Lframe2 # FDE CIE offset
+ .long .LFB2-. # FDE initial location
+ .long .LFE2-.LFB2 # FDE address range
+ .uleb128 0x0 # Augmentation size
+ .byte 0x1 # DW_CFA_set_loc
+ .long .LCFI2-.
+ .byte 0xe # DW_CFA_def_cfa_offset
+ .uleb128 0x50
+ .align 8
+.LEFDE2:
+ .section .note.GNU-stack,"",@progbits
diff --git a/binutils-2.21/ld/testsuite/ld-elf/eh4a.s b/binutils-2.21/ld/testsuite/ld-elf/eh4a.s
new file mode 100644
index 0000000..c245871
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/eh4a.s
@@ -0,0 +1,3 @@
+ .section .eh_frame,"a",%progbits
+ .align 8
+ .zero 8
diff --git a/binutils-2.21/ld/testsuite/ld-elf/eh5.d b/binutils-2.21/ld/testsuite/ld-elf/eh5.d
new file mode 100644
index 0000000..bc25639
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/eh5.d
@@ -0,0 +1,162 @@
+#source: eh5.s
+#source: eh5a.s
+#source: eh5b.s
+#ld:
+#readelf: -wf
+#target: cfi
+#notarget: alpha* hppa64*
+
+Contents of the .eh_frame section:
+
+00000000 0000001[04] 00000000 CIE
+ Version: 1
+ Augmentation: "zR"
+ Code alignment factor: .*
+ Data alignment factor: .*
+ Return address column: .*
+ Augmentation data: (0b|1b)
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+#...
+0000001[48] 00000014 0000001[8c] FDE cie=00000000 pc=.*
+ DW_CFA_advance_loc: 4 to .*
+ DW_CFA_def_cfa: r0( \([er]ax\)|) ofs 16
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000000(2c|30) 00000014 00000000 CIE
+ Version: 1
+ Augmentation: "zPR"
+ Code alignment factor: .*
+ Data alignment factor: .*
+ Return address column: .*
+ Augmentation data: 03 .. .. .. .. (0b|1b)
+
+ DW_CFA_nop
+
+0000004[48] 00000014 0000001c FDE cie=000000(2c|30) pc=.*
+ DW_CFA_advance_loc: 4 to .*
+ DW_CFA_def_cfa: r0( \([er]ax\)|) ofs 16
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000000(5c|60) 00000014 0000006[04] FDE cie=00000000 pc=.*
+ DW_CFA_advance_loc: 4 to .*
+ DW_CFA_def_cfa: r0( \([er]ax\)|) ofs 16
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+0000007[48] 0000001[8c] 00000000 CIE
+ Version: 1
+ Augmentation: "zPLR"
+ Code alignment factor: .*
+ Data alignment factor: .*
+ Return address column: .*
+ Augmentation data: 03 .. .. .. .. 0c (0b|1b)
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+#...
+0000009[08] 0000001c 0000002[04] FDE cie=0000007[48] pc=.*
+ Augmentation data: (ef be ad de 00 00 00 00|00 00 00 00 de ad be ef)
+
+ DW_CFA_advance_loc: 4 to .*
+ DW_CFA_def_cfa: r0( \([er]ax\)|) ofs 16
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000000b[08] 0000001[04] 00000000 CIE
+ Version: 1
+ Augmentation: "zR"
+ Code alignment factor: .*
+ Data alignment factor: .*
+ Return address column: .*
+ Augmentation data: (0b|1b)
+
+ DW_CFA_def_cfa: r0( \([er]ax\)|) ofs 16
+#...
+000000(c4|d0) 0000001[04] 0000001[8c] FDE cie=000000b[08] pc=.*
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+#...
+000000[de]8 00000014 00000000 CIE
+ Version: 1
+ Augmentation: "zPR"
+ Code alignment factor: .*
+ Data alignment factor: .*
+ Return address column: .*
+ Augmentation data: 03 .. .. .. .. (0b|1b)
+
+ DW_CFA_nop
+
+00000(0f|10)0 00000014 0000001c FDE cie=000000[de]8 pc=.*
+ DW_CFA_advance_loc: 4 to .*
+ DW_CFA_def_cfa: r0( \([er]ax\)|) ofs 16
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001[01]8 0000001[04] 000000(5c|64) FDE cie=000000b[08] pc=.*
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+#...
+000001(1c|30) 0000001[8c] 00000000 CIE
+ Version: 1
+ Augmentation: "zPLR"
+ Code alignment factor: .*
+ Data alignment factor: .*
+ Return address column: .*
+ Augmentation data: 03 .. .. .. .. 0c (0b|1b)
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+#...
+000001(38|50) 0000001c 0000002[04] FDE cie=000001(1c|30) pc=.*
+ Augmentation data: (ef be ad de 00 00 00 00|00 00 00 00 de ad be ef)
+
+ DW_CFA_advance_loc: 4 to .*
+ DW_CFA_def_cfa: r0( \([er]ax\)|) ofs 16
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001(58|70) 00000014 000001(5c|74) FDE cie=00000000 pc=.*
+ DW_CFA_advance_loc: 4 to .*
+ DW_CFA_def_cfa: r0( \([er]ax\)|) ofs 16
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+#...
+000001(70|88) 00000014 00000(01c|148|15c) FDE cie=00000(02c|030|170) pc=.*
+ DW_CFA_advance_loc: 4 to .*
+ DW_CFA_def_cfa: r0( \([er]ax\)|) ofs 16
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001(88|a0) 00000014 000001(8c|a4) FDE cie=00000000 pc=.*
+ DW_CFA_advance_loc: 4 to .*
+ DW_CFA_def_cfa: r0( \([er]ax\)|) ofs 16
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+#...
+000001(a0|b8|d4) 0000001c 00000(020|130|144) FDE cie=00000(074|078|1b8) pc=.*
+ Augmentation data: (ef be ad de 00 00 00 00|00 00 00 00 de ad be ef)
+
+ DW_CFA_advance_loc: 4 to .*
+ DW_CFA_def_cfa: r0( \([er]ax\)|) ofs 16
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
diff --git a/binutils-2.21/ld/testsuite/ld-elf/eh5.s b/binutils-2.21/ld/testsuite/ld-elf/eh5.s
new file mode 100644
index 0000000..6af48c2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/eh5.s
@@ -0,0 +1,29 @@
+ .text
+ .cfi_startproc simple
+ .long 0
+ .cfi_def_cfa 0, 16
+ .long 0
+ .cfi_endproc
+
+ .cfi_startproc simple
+ .cfi_personality 3, my_personality_v0
+ .long 0
+ .cfi_def_cfa 0, 16
+ .cfi_endproc
+
+ .cfi_startproc simple
+ .long 0
+ .cfi_def_cfa 0, 16
+ .long 0
+ .cfi_endproc
+
+ .cfi_startproc simple
+ .cfi_personality 3, my_personality_v0
+ .cfi_lsda 12, 0xdeadbeef
+ .long 0
+ .cfi_def_cfa 0, 16
+ .cfi_endproc
+
+ .globl my_personality_v0
+my_personality_v0:
+ .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/eh5a.s b/binutils-2.21/ld/testsuite/ld-elf/eh5a.s
new file mode 100644
index 0000000..a74b2cc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/eh5a.s
@@ -0,0 +1,27 @@
+ .text
+ .cfi_startproc simple
+ .cfi_def_cfa 0, 16
+ .long 0
+ .cfi_endproc
+
+ .cfi_startproc simple
+ .cfi_personality 3, my_personality_v1
+ .long 0
+ .cfi_def_cfa 0, 16
+ .cfi_endproc
+
+ .cfi_startproc simple
+ .cfi_def_cfa 0, 16
+ .long 0
+ .cfi_endproc
+
+ .cfi_startproc simple
+ .cfi_personality 3, my_personality_v1
+ .cfi_lsda 12, 0xdeadbeef
+ .long 0
+ .cfi_def_cfa 0, 16
+ .cfi_endproc
+
+ .globl my_personality_v1
+my_personality_v1:
+ .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/eh5b.s b/binutils-2.21/ld/testsuite/ld-elf/eh5b.s
new file mode 100644
index 0000000..fa27edd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/eh5b.s
@@ -0,0 +1,35 @@
+ .text
+ .cfi_startproc simple
+ .long 0
+ .cfi_def_cfa 0, 16
+ .long 0
+ .cfi_endproc
+
+ .cfi_startproc simple
+ .cfi_personality 3, my_personality_v0
+ .long 0
+ .cfi_def_cfa 0, 16
+ .cfi_endproc
+
+ .cfi_startproc simple
+ .long 0
+ .cfi_def_cfa 0, 16
+ .long 0
+ .cfi_endproc
+
+ .cfi_startproc simple
+ .cfi_personality 3, my_personality_v0
+ .cfi_lsda 12, 0xdeadbeef
+ .long 0
+ .cfi_def_cfa 0, 16
+ .cfi_endproc
+
+ .globl main
+ .globl start
+ .globl _start
+ .globl __start
+main:
+start:
+_start:
+__start:
+ .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/eh6.d b/binutils-2.21/ld/testsuite/ld-elf/eh6.d
new file mode 100644
index 0000000..75eb54b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/eh6.d
@@ -0,0 +1,17 @@
+#source: eh6.s
+#ld: --gc-sections -shared
+#readelf: -wf
+#target: x86_64-*-linux-gnu i?86-*-linux-gnu
+
+Contents of the .eh_frame section:
+
+00000000 0000001[4c] 00000000 CIE
+ Version: 1
+ Augmentation: "zPR"
+ Code alignment factor: 1
+ Data alignment factor: .*
+ Return address column: .*
+ Augmentation data: 9[bc] .* 1b
+
+ DW_CFA_nop
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/eh6.s b/binutils-2.21/ld/testsuite/ld-elf/eh6.s
new file mode 100644
index 0000000..bdc7dd1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/eh6.s
@@ -0,0 +1,17 @@
+ .section .text.foo, "ax", @progbits
+ .globl foo
+ .type foo, @function
+foo:
+ .cfi_startproc simple
+ .cfi_personality 0x80, indirect_ptr
+ ret
+ .cfi_endproc
+ .size foo, . - foo
+
+ .section .data.rel.ro, "a", @progbits
+indirect_ptr:
+ .long my_personality_v0
+
+ .globl my_personality_v0
+my_personality_v0:
+ .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/elf.exp b/binutils-2.21/ld/testsuite/ld-elf/elf.exp
new file mode 100644
index 0000000..1e1f738
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/elf.exp
@@ -0,0 +1,84 @@
+# Expect script for various ELF tests.
+# Copyright 2002, 2003, 2005, 2007, 2009 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# Exclude non-ELF targets.
+
+if ![is_elf_format] {
+ return
+}
+
+set old_ldflags $LDFLAGS
+if { [istarget spu*-*-*] } {
+ set LDFLAGS "$LDFLAGS --local-store 0:0"
+}
+
+if { [is_remote host] } then {
+ remote_download host merge.ld
+}
+
+set test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
+foreach t $test_list {
+ # We need to strip the ".d", but can leave the dirname.
+ verbose [file rootname $t]
+ run_dump_test [file rootname $t]
+}
+
+if { [istarget *-*-linux*] } {
+ run_ld_link_tests {
+ {"Weak symbols in dynamic objects 1 (support)"
+ "-shared" "" {weak-dyn-1a.s}
+ {}
+ "libweakdyn1a.so"}
+ {"Weak symbols in dynamic objects 1 (main test)"
+ "-shared tmpdir/libweakdyn1a.so -Tweak-dyn-1.ld" "" {weak-dyn-1b.s}
+ {{readelf {--relocs --wide} weak-dyn-1.rd}}
+ "libweakdyn1b.so"}
+ }
+}
+
+#v850 gas complains about .tbss.var section attributes.
+if { [check_gc_sections_available] && ![istarget "v850-*-*"] } {
+ run_ld_link_tests {
+ {"--gc-sections on tls variable"
+ "--gc-section" "" {tls_gc.s} {} "tls_gc"}
+ }
+}
+
+set LDFLAGS $old_ldflags
+
+# The following tests require running the executable generated by ld.
+if ![isnative] {
+ return
+}
+
+set array_tests {
+ {"preinit array" "" "" {preinit.c} "preinit" "preinit.out"}
+ {"static preinit array" "-static" "" {preinit.c} "preinit" "preinit.out"}
+ {"init array" "" "" {init.c} "init" "init.out"}
+ {"static init array" "-static" "" {init.c} "init" "init.out"}
+ {"fini array" "" "" {fini.c} "fini" "fini.out"}
+ {"static fini array" "-static" "" {fini.c} "fini" "fini.out"}
+}
+
+# NetBSD ELF systems do not currently support the .*_array sections.
+run_ld_link_exec_tests [list "*-*-netbsdelf*"] $array_tests
+
+catch "exec rm -f tmpdir/preinit tmpdir/init tmpdir/fini" status
diff --git a/binutils-2.21/ld/testsuite/ld-elf/empty.d b/binutils-2.21/ld/testsuite/ld-elf/empty.d
new file mode 100644
index 0000000..836206e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/empty.d
@@ -0,0 +1,7 @@
+#source: empty.s
+#ld:
+#readelf: -s
+
+#...
+ +[0-9]+: +[0-9a-f]+ +[0-9]+ +FUNC +GLOBAL +DEFAULT +[1-9] _start
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/empty.s b/binutils-2.21/ld/testsuite/ld-elf/empty.s
new file mode 100644
index 0000000..8c2d0e6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/empty.s
@@ -0,0 +1,16 @@
+ .section .bss
+bar:
+ .text
+ .type start,"function"
+ .global start
+start:
+ .type _start,"function"
+ .global _start
+_start:
+ .type __start,"function"
+ .global __start
+__start:
+ .type main,"function"
+ .global main
+main:
+ .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/empty2.d b/binutils-2.21/ld/testsuite/ld-elf/empty2.d
new file mode 100644
index 0000000..d91569e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/empty2.d
@@ -0,0 +1,11 @@
+#source: empty2.s
+#ld:
+#readelf: -s
+
+#...
+[ ]+[0-9]+:[ ]+0+[ ]+0[ ]+FILE[ ]+LOCAL[ ]+DEFAULT[ ]+ABS empty2.s
+#...
+[ ]+[0-9]+:[ ]+0*12345678[ ]+0[ ]+NOTYPE[ ]+LOCAL[ ]+DEFAULT[ ]+ABS constant
+#...
+[ ]+[0-9]+:[ ]+[0-9a-f]+[ ]+[0-9]+[ ]+FUNC[ ]+GLOBAL[ ]+DEFAULT[ ]+[1-9] _start
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/empty2.s b/binutils-2.21/ld/testsuite/ld-elf/empty2.s
new file mode 100644
index 0000000..deed318
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/empty2.s
@@ -0,0 +1,18 @@
+ .file "empty2.s"
+ .equiv constant, 0x12345678
+ .section .bss
+bar:
+ .text
+ .type start,"function"
+ .global start
+start:
+ .type _start,"function"
+ .global _start
+_start:
+ .type __start,"function"
+ .global __start
+__start:
+ .type main,"function"
+ .global main
+main:
+ .long constant
diff --git a/binutils-2.21/ld/testsuite/ld-elf/end.c b/binutils-2.21/ld/testsuite/ld-elf/end.c
new file mode 100644
index 0000000..f7b681a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/end.c
@@ -0,0 +1,7 @@
+#include <stdio.h>
+
+void
+foo ()
+{
+ printf ("TEST1\n");
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/endhidden.c b/binutils-2.21/ld/testsuite/ld-elf/endhidden.c
new file mode 100644
index 0000000..2cab97a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/endhidden.c
@@ -0,0 +1,8 @@
+#include <stdio.h>
+
+__attribute__ ((visibility ("hidden")))
+void
+foo ()
+{
+ printf ("TEST1\n");
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/endprotected.c b/binutils-2.21/ld/testsuite/ld-elf/endprotected.c
new file mode 100644
index 0000000..b6b39ea
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/endprotected.c
@@ -0,0 +1,8 @@
+#include <stdio.h>
+
+__attribute__ ((visibility ("protected")))
+void
+foo ()
+{
+ printf ("TEST1\n");
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/exclude.exp b/binutils-2.21/ld/testsuite/ld-elf/exclude.exp
new file mode 100644
index 0000000..124549f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/exclude.exp
@@ -0,0 +1,140 @@
+# Expect script for --exclude-libs tests
+# Copyright 2004, 2005, 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+# Make sure that ld can hide symbols from libraries when building a shared
+# library.
+
+# This test can only be run on ELF platforms.
+if ![is_elf_format] {
+ return
+}
+
+# No shared lib support on this target.
+if { [istarget "mcore-*-*"] } {
+ return
+}
+
+global ar
+global as
+global ld
+global nm
+global nm_output
+
+set test1 "ld link shared library"
+set test2 "ld export symbols from archive"
+set test3 "ld link shared library with --exclude-libs"
+set test4 "ld exclude symbols from archive - --exclude-libs libexclude"
+set test5 "ld exclude symbols from archive - --exclude-libs libexclude.a"
+set test6 "ld exclude symbols from archive - --exclude-libs ALL"
+set test7 "ld exclude symbols from archive - --exclude-libs foo:libexclude.a"
+set test8 "ld exclude symbols from archive - --exclude-libs foo,libexclude.a"
+set test9 "ld don't exclude symbols from archive - --exclude-libs foo:bar"
+
+if { ![ld_assemble $as $srcdir/$subdir/exclude1.s tmpdir/exclude1.o ]
+ || ![ld_assemble $as $srcdir/$subdir/exclude2.s tmpdir/exclude2.o] } {
+ unresolved $test1
+ return
+}
+
+remote_file host delete "tmpdir/libexclude.a"
+set catch_output [run_host_cmd "$ar" "cq tmpdir/libexclude.a tmpdir/exclude2.o"]
+if {![string match "" $catch_output]} {
+ unresolved $test1
+ return
+}
+
+# Test that the symbol is normally exported.
+
+if { [ld_simple_link $ld tmpdir/exclude.so "--shared tmpdir/exclude1.o -Ltmpdir -lexclude"] } {
+ pass $test1
+} else {
+ if [string match "*shared not supported*" $link_output] {
+ unsupported "$test1 - -shared is not supported by this target"
+ } else {
+ fail $test1
+ }
+ return
+}
+
+if ![ld_nm $nm "-D" tmpdir/exclude.so] {
+ unresolved $test2
+} elseif { [info exists nm_output(exclude_sym)] } {
+ pass $test2
+} else {
+ fail $test2
+}
+
+# Test --exclude-libs libexclude
+
+if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs libexclude --shared tmpdir/exclude1.o -Ltmpdir -lexclude"] } {
+ pass $test3
+} else {
+ fail $test3
+}
+
+if ![ld_nm $nm "-D" tmpdir/exclude.so] {
+ unresolved $test4
+} elseif { ! [info exists nm_output(exclude_sym)] } {
+ pass $test4
+} else {
+ fail $test4
+}
+
+# Test alternate spellings of --exclude-libs
+
+if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs libexclude.a --shared tmpdir/exclude1.o -Ltmpdir -lexclude"]
+ && [ld_nm $nm "-D" tmpdir/exclude.so]
+ && ! [info exists nm_output(exclude_sym)] } {
+ pass $test5
+} else {
+ fail $test5
+}
+
+if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs ALL --shared tmpdir/exclude1.o -Ltmpdir -lexclude"]
+ && [ld_nm $nm "-D" tmpdir/exclude.so]
+ && ! [info exists nm_output(exclude_sym)] } {
+ pass $test6
+} else {
+ fail $test6
+}
+
+if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs foo:libexclude.a --shared tmpdir/exclude1.o -Ltmpdir -lexclude"]
+ && [ld_nm $nm "-D" tmpdir/exclude.so]
+ && ! [info exists nm_output(exclude_sym)] } {
+ pass $test7
+} else {
+ fail $test7
+}
+
+if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs foo,libexclude.a --shared tmpdir/exclude1.o -Ltmpdir -lexclude"]
+ && [ld_nm $nm "-D" tmpdir/exclude.so]
+ && ! [info exists nm_output(exclude_sym)] } {
+ pass $test8
+} else {
+ fail $test8
+}
+
+if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs foo:bar --shared tmpdir/exclude1.o -Ltmpdir -lexclude"]
+ && [ld_nm $nm "-D" tmpdir/exclude.so]
+ && [info exists nm_output(exclude_sym)] } {
+ pass $test9
+} else {
+ fail $test9
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/exclude1.s b/binutils-2.21/ld/testsuite/ld-elf/exclude1.s
new file mode 100644
index 0000000..99efc7e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/exclude1.s
@@ -0,0 +1,4 @@
+ .globl include_sym
+ .data
+include_sym:
+ .dc.a exclude_sym
diff --git a/binutils-2.21/ld/testsuite/ld-elf/exclude2.s b/binutils-2.21/ld/testsuite/ld-elf/exclude2.s
new file mode 100644
index 0000000..e9b5819
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/exclude2.s
@@ -0,0 +1,4 @@
+ .globl exclude_sym
+ .data
+exclude_sym:
+ .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/exclude3.s b/binutils-2.21/ld/testsuite/ld-elf/exclude3.s
new file mode 100644
index 0000000..475088f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/exclude3.s
@@ -0,0 +1,16 @@
+ .text
+ .type start,"function"
+ .global start
+start:
+ .type _start,"function"
+ .global _start
+_start:
+ .type __start,"function"
+ .global __start
+__start:
+ .type main,"function"
+ .global main
+main:
+ .long 0
+ .section .foo1,"e", %progbits
+ .byte 0,0,0,0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/exclude3a.d b/binutils-2.21/ld/testsuite/ld-elf/exclude3a.d
new file mode 100644
index 0000000..7343e45
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/exclude3a.d
@@ -0,0 +1,10 @@
+#source: exclude3.s
+#ld:
+#readelf: -S --wide
+#target: x86_64-*-* i?86-*-* ia64-*-*
+
+#...
+[ ]*\[.*\][ ]+NULL.*
+[ ]*\[.*\][ ]+\.text[ ]+PROGBITS.*
+[ ]*\[.*\][ ]+.*STRTAB.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/exclude3b.d b/binutils-2.21/ld/testsuite/ld-elf/exclude3b.d
new file mode 100644
index 0000000..8d8a43f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/exclude3b.d
@@ -0,0 +1,9 @@
+#source: exclude3.s
+#ld: --shared
+#readelf: -S --wide
+#target: x86_64-*-* i?86-*-*
+
+#...
+[ ]*\[.*\][ ]+\.dynamic[ ]+DYNAMIC.*
+[ ]*\[.*\][ ]+.*STRTAB.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/exclude3c.d b/binutils-2.21/ld/testsuite/ld-elf/exclude3c.d
new file mode 100644
index 0000000..57311c8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/exclude3c.d
@@ -0,0 +1,7 @@
+#source: exclude3.s
+#ld: -r
+#readelf: -S --wide
+
+#...
+[ ]*\[.*\][ ]+\.foo1[ ]+PROGBITS.*[ ]+E[ ]+.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/exclude3d.d b/binutils-2.21/ld/testsuite/ld-elf/exclude3d.d
new file mode 100644
index 0000000..0d487f5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/exclude3d.d
@@ -0,0 +1,9 @@
+#source: exclude3.s
+#ld: --shared
+#readelf: -S --wide
+#target: ia64-*-*
+
+#...
+[ ]*\[.*\][ ]+\.got.*[ ]+PROGBITS.*
+[ ]*\[.*\][ ]+.*STRTAB.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/expr1.d b/binutils-2.21/ld/testsuite/ld-elf/expr1.d
new file mode 100644
index 0000000..7bf5d22
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/expr1.d
@@ -0,0 +1,2 @@
+# ld: -T expr1.t
+# error: expr1.t:3: nonconstant expression for load base
diff --git a/binutils-2.21/ld/testsuite/ld-elf/expr1.s b/binutils-2.21/ld/testsuite/ld-elf/expr1.s
new file mode 100644
index 0000000..998bbc0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/expr1.s
@@ -0,0 +1,4 @@
+ .section .bar,"ax","progbits"
+ .byte 0
+ .section .foo,"aw","progbits"
+ .byte 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/expr1.t b/binutils-2.21/ld/testsuite/ld-elf/expr1.t
new file mode 100644
index 0000000..9670e25
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/expr1.t
@@ -0,0 +1,6 @@
+SECTIONS
+{
+ .bar : AT ((ADDR(.foo) + 4095) & ~(4095)) { *(.bar) }
+ .foo : { *(.foo) }
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/extract-symbol-1.ld b/binutils-2.21/ld/testsuite/ld-elf/extract-symbol-1.ld
new file mode 100644
index 0000000..53e95c6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/extract-symbol-1.ld
@@ -0,0 +1,18 @@
+ENTRY(_entry)
+PHDRS
+{
+ data PT_LOAD AT (0);
+}
+SECTIONS
+{
+ . = 0x10000;
+ .foo : { *(.foo) } :data
+
+ . = 0x20000;
+ .bar : { *(.bar) } :data
+
+ /DISCARD/ : { *(*) }
+
+ _entry = 0x30000;
+ linker_symbol = 0x40000;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/extract-symbol-1.s b/binutils-2.21/ld/testsuite/ld-elf/extract-symbol-1.s
new file mode 100644
index 0000000..0971500
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/extract-symbol-1.s
@@ -0,0 +1,15 @@
+ .globl B
+ .globl C
+
+ .section .foo,"awx",%progbits
+ .4byte 1,2,3,4
+B:
+ .4byte 5,6,7
+
+ .section .bar,"ax",%nobits
+ .space 0x123
+C:
+ .space 0x302
+
+ .globl D
+ .equ D,0x12345678
diff --git a/binutils-2.21/ld/testsuite/ld-elf/extract-symbol-1sec.d b/binutils-2.21/ld/testsuite/ld-elf/extract-symbol-1sec.d
new file mode 100644
index 0000000..57a5662
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/extract-symbol-1sec.d
@@ -0,0 +1,14 @@
+#name: --extract-symbol test 1 (sections)
+#source: extract-symbol-1.s
+#ld: -Textract-symbol-1.ld
+#objcopy_linked_file: --extract-symbol
+#objdump: --headers
+#xfail: "hppa*-*-*" "rx-*-*"
+# FAILS on the RX because the linker has to set LMA == VMA for the Renesas loader.
+#...
+Sections:
+ *Idx +Name +Size +VMA +LMA .*
+ *0 +\.foo +0+ +0+10000 +0+10000 .*
+ *CONTENTS, ALLOC, LOAD, CODE
+ *1 +\.bar +0+ +0+20000 +0+10000 .*
+ *ALLOC, READONLY, CODE
diff --git a/binutils-2.21/ld/testsuite/ld-elf/extract-symbol-1sym.d b/binutils-2.21/ld/testsuite/ld-elf/extract-symbol-1sym.d
new file mode 100644
index 0000000..4069191
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/extract-symbol-1sym.d
@@ -0,0 +1,17 @@
+#name: --extract-symbol test 1 (symbols)
+#source: extract-symbol-1.s
+#ld: -Textract-symbol-1.ld
+#objcopy_linked_file: --extract-symbol
+#nm: -n
+#xfail: "hppa*-*-*"
+#...
+0*00010010 T B
+#...
+0*00020123 T C
+#...
+0*00030000 A _entry
+#...
+0*00040000 A linker_symbol
+#...
+0*12345678 A D
+#pass \ No newline at end of file
diff --git a/binutils-2.21/ld/testsuite/ld-elf/fini.c b/binutils-2.21/ld/testsuite/ld-elf/fini.c
new file mode 100644
index 0000000..cb60655
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/fini.c
@@ -0,0 +1,34 @@
+#include <stdio.h>
+
+static void
+fini_0 (void)
+{
+ printf ("fini array 0\n");
+}
+
+static void
+fini_1 (void)
+{
+ printf ("fini array 1\n");
+}
+
+static void
+fini_2 (void)
+{
+ printf ("fini array 2\n");
+}
+
+void (*const fini_array []) (void)
+ __attribute__ ((section (".fini_array"),
+ aligned (sizeof (void *)))) =
+{
+ &fini_0,
+ &fini_1,
+ &fini_2
+};
+
+int
+main (void)
+{
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/fini.out b/binutils-2.21/ld/testsuite/ld-elf/fini.out
new file mode 100644
index 0000000..2bab6e6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/fini.out
@@ -0,0 +1,3 @@
+fini array 2
+fini array 1
+fini array 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/flags1.d b/binutils-2.21/ld/testsuite/ld-elf/flags1.d
new file mode 100644
index 0000000..2053de0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/flags1.d
@@ -0,0 +1,22 @@
+#name: --set-section-flags test 1 (sections)
+#ld: -Tflags1.ld
+#objcopy_linked_file: --set-section-flags .post_text_reserve=contents,alloc,load,readonly,code
+#readelf: -l --wide
+#xfail: "avr-*-*" "dlx-*-*" "h8300-*-*" "i960-*-*" "ip2k-*-*" "m32r-*-*"
+#xfail: "moxie-*-*" "mt-*-*" "msp430-*-*" "tic6x-*-*"
+#xfail: "*-*-hpux*" "hppa*64*-*-*"
+# Fails on the AVR, DLX, H8300, I960, IP2K, M32R, MOXIE, MT, MSP430 and
+# TI C6X because the two sections are not merged into one segment.
+# (There is no good reason why they have to be).
+# Fails on HPUX systems because the .type pseudo-op behaves differently.
+# Fails on hppa64 because a PHDR is always added.
+
+#...
+Program Headers:
+ Type.*
+ LOAD +0x[0-9a-f]+ 0x0*0 0x0*0 0x0*01(6[1-9a-f]|70) 0x0*01(6[1-9a-f]|70) RWE 0x[0-9a-f]+
+
+#...
+ Segment Sections...
+ 00[ \t]+.text .post_text_reserve[ \t]*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/flags1.ld b/binutils-2.21/ld/testsuite/ld-elf/flags1.ld
new file mode 100644
index 0000000..a94cbe8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/flags1.ld
@@ -0,0 +1,12 @@
+SECTIONS
+{
+ .text :
+ {
+ *(.text)
+ } =0
+ .post_text_reserve :
+ {
+ . += 0x160;
+ }
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/flags1.s b/binutils-2.21/ld/testsuite/ld-elf/flags1.s
new file mode 100644
index 0000000..bb47536
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/flags1.s
@@ -0,0 +1,5 @@
+ .text
+ .globl start
+ .type start, %function
+start:
+ .byte 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/foo.c b/binutils-2.21/ld/testsuite/ld-elf/foo.c
new file mode 100644
index 0000000..c84baee
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/foo.c
@@ -0,0 +1,11 @@
+#include <stdio.h>
+
+void
+foo (void)
+{
+ printf ("TEST2\n");
+}
+
+static void (*const init_array []) (void)
+ __attribute__ ((used, section (".init_array"), aligned (sizeof (void *))))
+ = { foo };
diff --git a/binutils-2.21/ld/testsuite/ld-elf/foo.map b/binutils-2.21/ld/testsuite/ld-elf/foo.map
new file mode 100644
index 0000000..6b993de
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/foo.map
@@ -0,0 +1,4 @@
+FOO {
+ global: foo;
+ local: *;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-elf/frame.exp b/binutils-2.21/ld/testsuite/ld-elf/frame.exp
new file mode 100644
index 0000000..0a69024
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/frame.exp
@@ -0,0 +1,82 @@
+# Expect script for frame section tests
+# Copyright 2004, 2005, 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by H.J. Lu (hongjiu.lu@intel.com)
+#
+
+# Make sure that ld correctly handles frame sections in ELF.
+
+# This test can only be run on ELF platforms.
+if ![is_elf_format] {
+ return
+}
+
+# No shared lib support on this target.
+if { [istarget "mcore-*-*"] } {
+ return
+}
+
+# Too small MAXPAGESIZE on this target.
+if { [istarget "sh*-*-elf*"] } {
+ return
+}
+
+# ??? These targets have their own .tbss section, with different meaning
+# to the usual ELF .tbss.
+if { [istarget "hppa64-*-*"] || [istarget "v850-*-*"] } {
+ return
+}
+
+set test1 "read-only .eh_frame section"
+set test2 "read-only .gcc_except_table section"
+
+global as
+global ld
+
+if { ![ld_assemble $as $srcdir/$subdir/tbss.s tmpdir/tbss.o ]
+ || ![ld_assemble $as $srcdir/$subdir/frame.s tmpdir/frame.o] } {
+ unresolved "$test1"
+ return
+}
+
+if { [ld_simple_link $ld tmpdir/frame.so "--shared tmpdir/frame.o tmpdir/tbss.o"] } {
+ pass "$test1"
+} else {
+ if [string match "*shared not supported*" $link_output] {
+ unsupported "-shared is not supported by this target"
+ } else {
+ fail "$test1"
+ }
+}
+
+if ![ld_assemble $as $srcdir/$subdir/table.s tmpdir/table.o ] {
+ unresolved "$test2"
+ return
+}
+
+if { [ld_simple_link $ld tmpdir/table.so "--shared tmpdir/table.o tmpdir/tbss.o"] } {
+ pass "$test2"
+} else {
+ if [string match "*shared not supported*" $link_output] {
+ unsupported "-shared is not supported by this target"
+ } else {
+ fail "$test2"
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/frame.s b/binutils-2.21/ld/testsuite/ld-elf/frame.s
new file mode 100644
index 0000000..c752263
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/frame.s
@@ -0,0 +1,2 @@
+ .section .eh_frame,"a",%progbits
+ .4byte 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/func1.c b/binutils-2.21/ld/testsuite/ld-elf/func1.c
new file mode 100644
index 0000000..99443e4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/func1.c
@@ -0,0 +1,2 @@
+void foo (void) { }
+void bar (void) { }
diff --git a/binutils-2.21/ld/testsuite/ld-elf/group.ld b/binutils-2.21/ld/testsuite/ld-elf/group.ld
new file mode 100644
index 0000000..123ab26
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/group.ld
@@ -0,0 +1,6 @@
+SECTIONS
+{
+ . = 0x1000;
+ .text : { *(.text) *(.rodata.brlt) }
+ /DISCARD/ : { *(.dropme) *(.reginfo) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/group1.d b/binutils-2.21/ld/testsuite/ld-elf/group1.d
new file mode 100644
index 0000000..6ee74cb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/group1.d
@@ -0,0 +1,12 @@
+#source: group1a.s
+#source: group1b.s
+#ld: -T group.ld
+#readelf: -s
+#xfail: arc-*-* d30v-*-* dlx-*-* i960-*-* or32-*-* pj*-*-*
+# generic linker targets don't comply with all symbol merging rules
+
+Symbol table '.symtab' contains .* entries:
+#...
+.*: 0+1000 +0 +(NOTYPE|OBJECT) +WEAK +DEFAULT +. foo
+.*: 0+0000 +0 +(NOTYPE|OBJECT) +GLOBAL +DEFAULT +UND bar
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-elf/group10.d b/binutils-2.21/ld/testsuite/ld-elf/group10.d
new file mode 100644
index 0000000..6fcf83f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/group10.d
@@ -0,0 +1,11 @@
+#source: group10.s
+#ld: -r -T group.ld
+#readelf: -Sg --wide
+
+#...
+group section \[[ 0-9]+\] `\.group' \[foo_group\] contains 4 sections:
+ \[Index\] Name
+ \[[ 0-9]+\] \.text.*
+ \[[ 0-9]+\] \.rodata\.str.*
+ \[[ 0-9]+\] \.data.*
+ \[[ 0-9]+\] \.keepme.*
diff --git a/binutils-2.21/ld/testsuite/ld-elf/group10.s b/binutils-2.21/ld/testsuite/ld-elf/group10.s
new file mode 100644
index 0000000..57704b4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/group10.s
@@ -0,0 +1,14 @@
+ .section .text.foo,"axG",%progbits,foo_group
+ .word 0
+
+ .section .rodata.str.1,"aMSG",%progbits,1,foo_group
+ .asciz "abc"
+
+ .section .data.foo,"waG",%progbits,foo_group
+ .word 1
+
+ .section .dropme,"G",%progbits,foo_group
+ .word 2
+
+ .section .keepme,"G",%progbits,foo_group
+ .word 3
diff --git a/binutils-2.21/ld/testsuite/ld-elf/group1a.s b/binutils-2.21/ld/testsuite/ld-elf/group1a.s
new file mode 100644
index 0000000..296e76e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/group1a.s
@@ -0,0 +1,4 @@
+ .section .text,"axG",%progbits,foo_group,comdat
+ .weak foo
+foo:
+ .word 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/group1b.s b/binutils-2.21/ld/testsuite/ld-elf/group1b.s
new file mode 100644
index 0000000..b66cba9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/group1b.s
@@ -0,0 +1,6 @@
+ .section .text,"axG",%progbits,foo_group,comdat
+ .global foo
+ .global bar
+foo:
+ .word 0
+bar:
diff --git a/binutils-2.21/ld/testsuite/ld-elf/group2.d b/binutils-2.21/ld/testsuite/ld-elf/group2.d
new file mode 100644
index 0000000..664c49a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/group2.d
@@ -0,0 +1,20 @@
+#source: ../../../binutils/testsuite/binutils-all/group.s
+#ld: -r
+#readelf: -Sg --wide
+#xfail: cr16-*-* crx-*-* xstormy*-*-*
+# cr16 and crx use non-standard scripts with memory regions, which don't play
+# well with unique group sections under ld -r.
+# xstormy also uses a non-standard script, putting .data before .text.
+
+#...
+ \[[ 0-9]+\] \.group[ \t]+GROUP[ \t]+.*
+#...
+ \[[ 0-9]+\] \.text.*[ \t]+PROGBITS[ \t0-9a-f]+AXG.*
+#...
+ \[[ 0-9]+\] \.data.*[ \t]+PROGBITS[ \t0-9a-f]+WAG.*
+#...
+COMDAT group section \[[ 0-9]+\] `\.group' \[foo_group\] contains 2 sections:
+ \[Index\] Name
+ \[[ 0-9]+\] .text.*
+ \[[ 0-9]+\] .data.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/group3a.d b/binutils-2.21/ld/testsuite/ld-elf/group3a.d
new file mode 100644
index 0000000..10c0cf2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/group3a.d
@@ -0,0 +1,8 @@
+#source: group3a.s
+#source: group3b.s
+#ld: -T group.ld
+#readelf: -s
+Symbol table '.symtab' contains .* entries:
+#...
+.*: 0+1000 +0 +OBJECT +GLOBAL +HIDDEN +. foo
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-elf/group3a.s b/binutils-2.21/ld/testsuite/ld-elf/group3a.s
new file mode 100644
index 0000000..5e6a686
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/group3a.s
@@ -0,0 +1,5 @@
+ .section .data,"awG",%progbits,foo_group,comdat
+ .globl foo
+ .type foo,%object
+foo:
+ .word 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/group3b.d b/binutils-2.21/ld/testsuite/ld-elf/group3b.d
new file mode 100644
index 0000000..1b8a2a2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/group3b.d
@@ -0,0 +1,11 @@
+#source: group3b.s
+#source: group3a.s
+#ld: -T group.ld
+#readelf: -s
+#xfail: arc-*-* d30v-*-* dlx-*-* i960-*-* or32-*-* pj*-*-*
+# generic linker targets don't comply with all symbol merging rules
+
+Symbol table '.symtab' contains .* entries:
+#...
+.*: 0+1000 +0 +OBJECT +GLOBAL +HIDDEN +. foo
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-elf/group3b.s b/binutils-2.21/ld/testsuite/ld-elf/group3b.s
new file mode 100644
index 0000000..6c101bc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/group3b.s
@@ -0,0 +1,6 @@
+ .section .data,"awG",%progbits,foo_group,comdat
+ .hidden foo
+ .globl foo
+ .type foo,%object
+foo:
+ .word 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/group4.d b/binutils-2.21/ld/testsuite/ld-elf/group4.d
new file mode 100644
index 0000000..af4ca4d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/group4.d
@@ -0,0 +1,20 @@
+#source: ../../../binutils/testsuite/binutils-all/group-2.s
+#ld: -r
+#readelf: -Sg --wide
+#xfail: cr16-*-* crx-*-* xstormy*-*-*
+# cr16 and crx use non-standard scripts with memory regions, which don't play
+# well with unique group sections under ld -r.
+# xstormy also uses a non-standard script, putting .data before .text.
+
+#...
+ \[[ 0-9]+\] .group[ \t]+GROUP[ \t]+.*
+#...
+ \[[ 0-9]+\] \.text.*[ \t]+PROGBITS[ \t0-9a-f]+AXG[ \t]+.*
+#...
+ \[[ 0-9]+\] \.data.*[ \t]+PROGBITS[ \t0-9a-f]+WAG[ \t]+.*
+#...
+COMDAT group section \[[ 0-9]+\] `.group' \[.text.foo\] contains 2 sections:
+ \[Index\] Name
+ \[[ 0-9]+\] .text.*
+ \[[ 0-9]+\] .data.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/group5.d b/binutils-2.21/ld/testsuite/ld-elf/group5.d
new file mode 100644
index 0000000..5102f81
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/group5.d
@@ -0,0 +1,20 @@
+#source: ../../../binutils/testsuite/binutils-all/group-3.s
+#ld: -r
+#readelf: -Sg --wide
+#xfail: cr16-*-* crx-*-* xstormy*-*-*
+# cr16 and crx use non-standard scripts with memory regions, which don't play
+# well with unique group sections under ld -r.
+# xstormy also uses a non-standard script, putting .data before .text.
+
+#...
+ \[[ 0-9]+\] .group[ \t]+GROUP[ \t]+.*
+#...
+ \[[ 0-9]+\] \.text.*[ \t]+PROGBITS[ \t0-9a-f]+AXG[ \t]+.*
+#...
+ \[[ 0-9]+\] \.data.*[ \t]+PROGBITS[ \t0-9a-f]+WAG[ \t]+.*
+#...
+COMDAT group section \[[ 0-9]+\] `.group' \[foo3\] contains 2 sections:
+ \[Index\] Name
+ \[[ 0-9]+\] .text.*
+ \[[ 0-9]+\] .data.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/group6.d b/binutils-2.21/ld/testsuite/ld-elf/group6.d
new file mode 100644
index 0000000..0e8441f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/group6.d
@@ -0,0 +1,20 @@
+#source: ../../../binutils/testsuite/binutils-all/group-4.s
+#ld: -r
+#readelf: -Sg --wide
+#xfail: cr16-*-* crx-*-* xstormy*-*-*
+# cr16 and crx use non-standard scripts with memory regions, which don't play
+# well with unique group sections under ld -r.
+# xstormy also uses a non-standard script, putting .data before .text.
+
+#...
+ \[[ 0-9]+\] .group[ \t]+GROUP[ \t]+.*
+#...
+ \[[ 0-9]+\] \.text.*[ \t]+PROGBITS[ \t0-9a-f]+AXG[ \t]+.*
+#...
+ \[[ 0-9]+\] \.data.*[ \t]+PROGBITS[ \t0-9a-f]+WAG[ \t]+.*
+#...
+COMDAT group section \[[ 0-9]+\] `.group' \[foo4\] contains 2 sections:
+ \[Index\] Name
+ \[[ 0-9]+\] .text.*
+ \[[ 0-9]+\] .data.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/group7.d b/binutils-2.21/ld/testsuite/ld-elf/group7.d
new file mode 100644
index 0000000..602a4c8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/group7.d
@@ -0,0 +1,31 @@
+#source: ../../../binutils/testsuite/binutils-all/group.s
+#source: ../../../binutils/testsuite/binutils-all/group-2.s
+#source: ../../../binutils/testsuite/binutils-all/group-3.s
+#source: ../../../binutils/testsuite/binutils-all/group-4.s
+#ld: -r
+#readelf: -g --wide
+#xfail: cr16-*-* crx-*-*
+# cr16 and crx use non-standard scripts with memory regions, which don't play
+# well with unique group sections under ld -r.
+
+#...
+COMDAT group section \[[ 0-9]+\] `\.group' \[foo_group\] contains 2 sections:
+ \[Index\] Name
+ \[[ 0-9]+\] .text.foo
+ \[[ 0-9]+\] .data.foo
+#...
+COMDAT group section \[[ 0-9]+\] `.group' \[.text.foo\] contains 2 sections:
+ \[Index\] Name
+ \[[ 0-9]+\] .text.foo
+ \[[ 0-9]+\] .data.bar
+#...
+COMDAT group section \[[ 0-9]+\] `.group' \[foo3\] contains 2 sections:
+ \[Index\] Name
+ \[[ 0-9]+\] .text.foo3
+ \[[ 0-9]+\] .data.bar3
+#...
+COMDAT group section \[[ 0-9]+\] `.group' \[foo4\] contains 2 sections:
+ \[Index\] Name
+ \[[ 0-9]+\] .text.foo4
+ \[[ 0-9]+\] .data.foo4
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/group8.s b/binutils-2.21/ld/testsuite/ld-elf/group8.s
new file mode 100644
index 0000000..7766c6c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/group8.s
@@ -0,0 +1,10 @@
+ .section .text.foo,"axG",%progbits,foo,comdat
+ .globl foo
+ .type foo,%function
+foo:
+ .byte 0
+ .section .text.bar,"axG",%progbits,bar,comdat
+ .globl bar
+ .type bar,%function
+bar:
+ .byte 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/group8a.d b/binutils-2.21/ld/testsuite/ld-elf/group8a.d
new file mode 100644
index 0000000..ce40a38
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/group8a.d
@@ -0,0 +1,13 @@
+#source: group8.s
+#ld: -r --gc-sections --entry foo
+#readelf: -g --wide
+#notarget: arc-*-* d30v-*-* dlx-*-* i960-*-* or32-*-* pj*-*-*
+#notarget: alpha-*-* hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-*
+#xfail: cr16-*-* crx-*-*
+# generic linker targets don't support --gc-sections, nor do a bunch of others
+# cr16 and crx use non-standard scripts with memory regions, which don't play
+# well with unique group sections under ld -r.
+
+COMDAT group section \[[ 0-9]+\] `.group' \[foo\] contains 1 sections:
+ \[Index\] Name
+ \[[ 0-9]+\] .text.foo
diff --git a/binutils-2.21/ld/testsuite/ld-elf/group8b.d b/binutils-2.21/ld/testsuite/ld-elf/group8b.d
new file mode 100644
index 0000000..bb928c5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/group8b.d
@@ -0,0 +1,13 @@
+#source: group8.s
+#ld: -r --gc-sections --entry bar
+#readelf: -g --wide
+#notarget: arc-*-* d30v-*-* dlx-*-* i960-*-* or32-*-* pj*-*-*
+#notarget: alpha-*-* hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-*
+#xfail: cr16-*-* crx-*-*
+# generic linker targets don't support --gc-sections, nor do a bunch of others
+# cr16 and crx use non-standard scripts with memory regions, which don't play
+# well with unique group sections under ld -r.
+
+COMDAT group section \[[ 0-9]+\] `.group' \[bar\] contains 1 sections:
+ \[Index\] Name
+ \[[ 0-9]+\] .text.bar
diff --git a/binutils-2.21/ld/testsuite/ld-elf/group9.s b/binutils-2.21/ld/testsuite/ld-elf/group9.s
new file mode 100644
index 0000000..933c9f9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/group9.s
@@ -0,0 +1,15 @@
+ .section .text.foo,"axG",%progbits,foo,comdat
+ .globl foo
+ .type foo,%function
+foo:
+ .byte 0
+ .section .data.foo,"axG",%progbits,foo,comdat
+ .globl foo.data
+ .type foo,%object
+foo.data:
+ .byte 0
+ .section .text.bar,"axG",%progbits,bar,comdat
+ .globl bar
+ .type bar,%function
+bar:
+ .long foo.data
diff --git a/binutils-2.21/ld/testsuite/ld-elf/group9a.d b/binutils-2.21/ld/testsuite/ld-elf/group9a.d
new file mode 100644
index 0000000..fd04c48
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/group9a.d
@@ -0,0 +1,14 @@
+#source: group9.s
+#ld: -r --gc-sections --entry foo
+#readelf: -g --wide
+#notarget: arc-*-* d30v-*-* dlx-*-* i960-*-* or32-*-* pj*-*-*
+#notarget: alpha-*-* hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-*
+#xfail: cr16-*-* crx-*-*
+# generic linker targets don't support --gc-sections, nor do a bunch of others
+# cr16 and crx use non-standard scripts with memory regions, which don't play
+# well with unique group sections under ld -r.
+
+COMDAT group section \[[ 0-9]+\] `.group' \[foo\] contains 2 sections:
+ \[Index\] Name
+ \[[ 0-9]+\] .text.foo
+ \[[ 0-9]+\] .data.foo
diff --git a/binutils-2.21/ld/testsuite/ld-elf/group9b.d b/binutils-2.21/ld/testsuite/ld-elf/group9b.d
new file mode 100644
index 0000000..3f19fd6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/group9b.d
@@ -0,0 +1,18 @@
+#source: group9.s
+#ld: -r --gc-sections --entry bar
+#readelf: -g --wide
+#notarget: arc-*-* d30v-*-* dlx-*-* i960-*-* or32-*-* pj*-*-*
+#notarget: alpha-*-* hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-*
+#xfail: cr16-*-* crx-*-*
+# generic linker targets don't support --gc-sections, nor do a bunch of others
+# cr16 and crx use non-standard scripts with memory regions, which don't play
+# well with unique group sections under ld -r.
+
+COMDAT group section \[[ 0-9]+\] `.group' \[foo\] contains 2 sections:
+ \[Index\] Name
+ \[[ 0-9]+\] .text.foo
+ \[[ 0-9]+\] .data.foo
+
+COMDAT group section \[[ 0-9]+\] `.group' \[bar\] contains 1 sections:
+ \[Index\] Name
+ \[[ 0-9]+\] .text.bar
diff --git a/binutils-2.21/ld/testsuite/ld-elf/hash.d b/binutils-2.21/ld/testsuite/ld-elf/hash.d
new file mode 100644
index 0000000..9bcd9a9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/hash.d
@@ -0,0 +1,17 @@
+#source: start.s
+#readelf: -d -s -D
+#ld: -shared --hash-style=gnu
+#target: *-*-linux*
+#notarget: mips*-*-*
+
+#...
+ +0x[0-9a-z]+ +\(GNU_HASH\) +0x[0-9a-z]+
+#...
+ +[0-9]+ +[0-9]+: +[0-9a-f]+ +[0-9]+ +NOTYPE +GLOBAL +DEFAULT +[1-9] _start
+#...
+ +[0-9]+ +[0-9]+: +[0-9a-f]+ +[0-9]+ +NOTYPE +GLOBAL +DEFAULT +[1-9] main
+#...
+ +[0-9]+ +[0-9]+: +[0-9a-f]+ +[0-9]+ +NOTYPE +GLOBAL +DEFAULT +[1-9] start
+#...
+ +[0-9]+ +[0-9]+: +[0-9a-f]+ +[0-9]+ +NOTYPE +GLOBAL +DEFAULT +[1-9] __start
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-elf/header.d b/binutils-2.21/ld/testsuite/ld-elf/header.d
new file mode 100644
index 0000000..d438832
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/header.d
@@ -0,0 +1,5 @@
+# target: *-*-linux* *-*-vxworks
+# ld: -T header.t -z max-page-size=0x100
+# objdump: -hpw
+
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-elf/header.s b/binutils-2.21/ld/testsuite/ld-elf/header.s
new file mode 100644
index 0000000..38f2228
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/header.s
@@ -0,0 +1,8 @@
+ .text
+ .globl main
+main:
+ .rept 0x40 - 0x15
+ .long 0xfedcba98
+ .endr
+ .data
+ .long 0x76543210
diff --git a/binutils-2.21/ld/testsuite/ld-elf/header.t b/binutils-2.21/ld/testsuite/ld-elf/header.t
new file mode 100644
index 0000000..c378fbe
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/header.t
@@ -0,0 +1,8 @@
+ENTRY(main)
+
+SECTIONS
+{
+ . = 0x100 + SIZEOF_HEADERS;
+ .text : { *(.text) }
+ .data : { *(.data) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/hidden.out b/binutils-2.21/ld/testsuite/ld-elf/hidden.out
new file mode 100644
index 0000000..7ad7cbe
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/hidden.out
@@ -0,0 +1,3 @@
+TEST2
+TEST1
+MAIN
diff --git a/binutils-2.21/ld/testsuite/ld-elf/init-fini-arrays.d b/binutils-2.21/ld/testsuite/ld-elf/init-fini-arrays.d
new file mode 100644
index 0000000..1b182b9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/init-fini-arrays.d
@@ -0,0 +1,12 @@
+#source: init-fini-arrays.s
+#ld: -r
+#readelf: -S --wide
+#xfail: cr16-*-* crx-*-*
+# cr16 and crx use non-standard scripts with memory regions, which don't play
+# well with unique group sections under ld -r.
+
+#...
+ \[[ 0-9]+\] \.init_array\.01000[ \t]+PROGBITS[ \t0-9a-f]+WA?.*
+#...
+ \[[ 0-9]+\] \.fini_array\.01000[ \t]+PROGBITS[ \t0-9a-f]+WA?.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/init-fini-arrays.s b/binutils-2.21/ld/testsuite/ld-elf/init-fini-arrays.s
new file mode 100644
index 0000000..8f7a3f7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/init-fini-arrays.s
@@ -0,0 +1,6 @@
+ .section .init_array.01000,"aw",%progbits
+ .align 4
+ .word 0
+ .section .fini_array.01000,"aw",%progbits
+ .align 4
+ .word 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/init.c b/binutils-2.21/ld/testsuite/ld-elf/init.c
new file mode 100644
index 0000000..3b1ffb1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/init.c
@@ -0,0 +1,34 @@
+#include <stdio.h>
+
+static void
+init_0 (void)
+{
+ printf ("init array 0\n");
+}
+
+static void
+init_1 (void)
+{
+ printf ("init array 1\n");
+}
+
+static void
+init_2 (void)
+{
+ printf ("init array 2\n");
+}
+
+void (*const init_array []) (void)
+ __attribute__ ((section (".init_array"),
+ aligned (sizeof (void *)))) =
+{
+ &init_0,
+ &init_1,
+ &init_2
+};
+
+int
+main (void)
+{
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/init.out b/binutils-2.21/ld/testsuite/ld-elf/init.out
new file mode 100644
index 0000000..f988b84
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/init.out
@@ -0,0 +1,3 @@
+init array 0
+init array 1
+init array 2
diff --git a/binutils-2.21/ld/testsuite/ld-elf/linkonce1.d b/binutils-2.21/ld/testsuite/ld-elf/linkonce1.d
new file mode 100644
index 0000000..c0e331f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/linkonce1.d
@@ -0,0 +1,12 @@
+#source: linkonce1a.s
+#source: linkonce1b.s
+#ld: -r
+#objdump: -r
+
+.*: file format .*
+
+RELOCATION RECORDS FOR \[.debug_frame\]:
+OFFSET[ ]+TYPE[ ]+VALUE[ ]*
+.*(NONE|unused|UNUSED).*\*ABS\*
+
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/linkonce1a.s b/binutils-2.21/ld/testsuite/ld-elf/linkonce1a.s
new file mode 100644
index 0000000..5c2d8c2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/linkonce1a.s
@@ -0,0 +1,3 @@
+ .section .gnu.linkonce.d.dummy,"aw"
+bar:
+ .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/linkonce1b.s b/binutils-2.21/ld/testsuite/ld-elf/linkonce1b.s
new file mode 100644
index 0000000..fd45cec
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/linkonce1b.s
@@ -0,0 +1,17 @@
+ .globl main
+ .globl start
+ .globl _start
+ .globl __start
+ .text
+main:
+start:
+_start:
+__start:
+ .long 0
+
+ .section .gnu.linkonce.d.dummy,"aw"
+ .long 0
+foo:
+ .long 0
+ .section .debug_frame,"",%progbits
+ .long foo
diff --git a/binutils-2.21/ld/testsuite/ld-elf/linkonce2.d b/binutils-2.21/ld/testsuite/ld-elf/linkonce2.d
new file mode 100644
index 0000000..0cbb3ad
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/linkonce2.d
@@ -0,0 +1,14 @@
+#source: linkonce1a.s
+#source: linkonce1b.s
+#ld: -emit-relocs
+#objdump: -r
+#notarget: arc-*-* d30v-*-* dlx-*-* i960-*-* or32-*-* pj*-*-*
+# generic elf targets don't emit relocs
+
+.*: file format .*
+
+RELOCATION RECORDS FOR \[.debug_frame\]:
+OFFSET[ ]+TYPE[ ]+VALUE[ ]*
+.*(NONE|unused|UNUSED).*\*ABS\*
+
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/linkoncerdiff.d b/binutils-2.21/ld/testsuite/ld-elf/linkoncerdiff.d
new file mode 100644
index 0000000..8eec3d2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/linkoncerdiff.d
@@ -0,0 +1,6 @@
+#source: linkoncerdiff1.s
+#source: linkoncerdiff2.s
+#ld: -r
+#readelf: -r
+There are no relocations in this file.
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/linkoncerdiff1.s b/binutils-2.21/ld/testsuite/ld-elf/linkoncerdiff1.s
new file mode 100644
index 0000000..9e8e17e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/linkoncerdiff1.s
@@ -0,0 +1,7 @@
+ .section .gnu.linkonce.t.foo, "a", %progbits
+ .globl symfoo
+symfoo:
+
+ .section .gnu.linkonce.t.bar, "a", %progbits
+ .globl symbar
+symbar:
diff --git a/binutils-2.21/ld/testsuite/ld-elf/linkoncerdiff2.s b/binutils-2.21/ld/testsuite/ld-elf/linkoncerdiff2.s
new file mode 100644
index 0000000..1e8c2ba
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/linkoncerdiff2.s
@@ -0,0 +1,22 @@
+ .section .gnu.linkonce.t.foo, "a", %progbits
+1:
+ .globl symfoo
+symfoo:
+ .long 0
+
+ .section .gnu.linkonce.t.bar, "a", %progbits
+2:
+ .globl symbar
+symbar:
+ .long 0
+
+ .section .gnu.linkonce.r.foo, "a", %progbits
+ .long 1b
+ .long symfoo
+/* ld currently incorrectly silently discards this relocation. Just such
+ relocations are never produced by g++-3.4 so this suppressed error message
+ is not a problem:
+ #error: `.gnu.linkonce.t.bar' referenced in section `.gnu.linkonce.r.foo' of tmpdir/dump1.o: defined in discarded section `.gnu.linkonce.t.bar' of tmpdir/dump1.o
+ */
+ .long 2b
+ .long symbar
diff --git a/binutils-2.21/ld/testsuite/ld-elf/lma.lnk b/binutils-2.21/ld/testsuite/ld-elf/lma.lnk
new file mode 100644
index 0000000..7aac6d0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/lma.lnk
@@ -0,0 +1,6 @@
+SECTIONS
+{
+ . = -0x100000;
+ .text : AT(ADDR(.text) + 0x100000) { *(.text) }
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/lma.s b/binutils-2.21/ld/testsuite/ld-elf/lma.s
new file mode 100644
index 0000000..039d26b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/lma.s
@@ -0,0 +1,4 @@
+ .text
+ .global _start
+_start:
+ .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/loadaddr.s b/binutils-2.21/ld/testsuite/ld-elf/loadaddr.s
new file mode 100644
index 0000000..0a14169
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/loadaddr.s
@@ -0,0 +1,20 @@
+ .text
+ .globl main
+ .globl start
+ .globl _start
+ .globl __start
+main:
+start:
+_start:
+__start:
+ .byte 0,0,0,0,0,0,0,0
+ .byte 0,0,0,0,0,0,0,0
+ .section .bar,"ax","progbits"
+ .byte 0,0,0,0,0,0,0,0
+ .byte 0,0,0,0,0,0,0,0
+ .section .foo,"aw","progbits"
+ .byte 0,0,0,0,0,0,0,0
+ .byte 0,0,0,0,0,0,0,0
+ .data
+ .byte 0,0,0,0,0,0,0,0
+ .byte 0,0,0,0,0,0,0,0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/loadaddr.t b/binutils-2.21/ld/testsuite/ld-elf/loadaddr.t
new file mode 100644
index 0000000..91e9ef2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/loadaddr.t
@@ -0,0 +1,10 @@
+SECTIONS
+{
+ . = -0x7ff00000;
+ .text : {*(.text .text.*)}
+ . = ALIGN(64);
+ .foo : { *(.foo) }
+ . = ALIGN(8192);
+ .data : AT (ADDR(.data)) { *(.data) }
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/loadaddr1.d b/binutils-2.21/ld/testsuite/ld-elf/loadaddr1.d
new file mode 100644
index 0000000..2d3469b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/loadaddr1.d
@@ -0,0 +1,10 @@
+#source: loadaddr.s
+#ld: -T loadaddr1.t -T loadaddr.t -z max-page-size=0x200000
+#readelf: -l --wide
+#target: *-*-linux*
+
+#...
+ LOAD +0x000000 0xf*80000000 0xf*80000000 0x100050 0x100050 RWE 0x200000
+ LOAD +0x200000 0xf*ff600000 0xf*80101000 0x0*10 0x0*10 R E 0x200000
+ LOAD +0x302000 0xf*80102000 0xf*80102000 0x0*10 0x0*10 RW 0x200000
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/loadaddr1.t b/binutils-2.21/ld/testsuite/ld-elf/loadaddr1.t
new file mode 100644
index 0000000..5037b4f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/loadaddr1.t
@@ -0,0 +1,7 @@
+SECTIONS
+{
+ .bar -0xa00000 : AT ((LOADADDR(.foo) + SIZEOF(.foo) + 4095) & ~(4095))
+ { *(.bar) }
+ . = LOADADDR(.bar) + 4096;
+}
+INSERT AFTER .foo;
diff --git a/binutils-2.21/ld/testsuite/ld-elf/loadaddr2.d b/binutils-2.21/ld/testsuite/ld-elf/loadaddr2.d
new file mode 100644
index 0000000..e447e38
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/loadaddr2.d
@@ -0,0 +1,10 @@
+#source: loadaddr.s
+#ld: -T loadaddr2.t -T loadaddr.t -z max-page-size=0x200000
+#readelf: -l --wide
+#target: *-*-linux*
+
+#...
+ LOAD +0x000000 0xf*80000000 0xf*80000000 0x100050 0x100050 RWE 0x200000
+ LOAD +0x110000 0xf*80110000 0xf*80101000 0x0*10 0x0*10 R E 0x200000
+ LOAD +0x302000 0xf*80302000 0xf*80302000 0x0*10 0x0*10 RW 0x200000
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/loadaddr2.t b/binutils-2.21/ld/testsuite/ld-elf/loadaddr2.t
new file mode 100644
index 0000000..0ad16df
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/loadaddr2.t
@@ -0,0 +1,7 @@
+SECTIONS
+{
+ .bar -0x7fef0000 : AT ((LOADADDR(.foo) + SIZEOF(.foo) + 4095) & ~(4095))
+ { *(.bar) }
+ . = LOADADDR(.bar) + 0x200000;
+}
+INSERT BEFORE .data;
diff --git a/binutils-2.21/ld/testsuite/ld-elf/loadaddr3.t b/binutils-2.21/ld/testsuite/ld-elf/loadaddr3.t
new file mode 100644
index 0000000..789f61e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/loadaddr3.t
@@ -0,0 +1,16 @@
+
+MEMORY
+{
+ rom (rx) : ORIGIN = 0x100, LENGTH = 0x100
+ ram (rwx) : ORIGIN = 0x200, LENGTH = 0x100
+
+}
+
+SECTIONS
+{
+ .text : {*(.text .text.*)} >rom
+ .data : {data_load = LOADADDR (.data);
+ data_start = ADDR (.data);
+ *(.data .data.*)} >ram AT>rom
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/loadaddr3a.d b/binutils-2.21/ld/testsuite/ld-elf/loadaddr3a.d
new file mode 100644
index 0000000..b2ace66
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/loadaddr3a.d
@@ -0,0 +1,9 @@
+#source: loadaddr.s
+#ld: -T loadaddr3.t -z max-page-size=0x200000
+#readelf: -l --wide
+#target: *-*-linux*
+
+#...
+ LOAD +0x000000 0x0*00000000 0x0*00000000 0x0*0110 0x0*0110 R E 0x.*
+ LOAD +0x000200 0x0*00000200 0x0*00000110 0x0*0010 0x0*0010 RW 0x.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/loadaddr3b.d b/binutils-2.21/ld/testsuite/ld-elf/loadaddr3b.d
new file mode 100644
index 0000000..af7e6e4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/loadaddr3b.d
@@ -0,0 +1,13 @@
+#source: loadaddr.s
+#ld: -T loadaddr3.t -z max-page-size=0x200000
+#objdump: -t
+#target: *-*-linux*
+
+#...
+0+0000100 l d .text 0+0000000 .text
+0+0000200 l d .data 0+0000000 .data
+#...
+0+0000110 g \*ABS\* 0+0000000 data_load
+#...
+0+0000200 g .data 0+0000000 data_start
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/local1.d b/binutils-2.21/ld/testsuite/ld-elf/local1.d
new file mode 100644
index 0000000..5957d8f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/local1.d
@@ -0,0 +1,7 @@
+#ld: -shared --version-script local1.map
+#readelf: -s --wide
+#target: *-*-linux*
+
+#...
+ .*: [0-9a-f]* +[0-9a-f]+ +OBJECT +LOCAL +DEFAULT +[0-9] +foo
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-elf/local1.map b/binutils-2.21/ld/testsuite/ld-elf/local1.map
new file mode 100644
index 0000000..1e2aa8c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/local1.map
@@ -0,0 +1,6 @@
+{
+global:
+ *;
+local:
+ foo;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-elf/local1.s b/binutils-2.21/ld/testsuite/ld-elf/local1.s
new file mode 100644
index 0000000..0122efa
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/local1.s
@@ -0,0 +1,6 @@
+ .globl foo
+ .protected foo
+ .type foo,%object
+ .data
+foo:
+ .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/main.c b/binutils-2.21/ld/testsuite/ld-elf/main.c
new file mode 100644
index 0000000..24f9dcc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/main.c
@@ -0,0 +1,8 @@
+#include <stdio.h>
+
+int
+main (void)
+{
+ printf ("MAIN\n");
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/maxpage1.d b/binutils-2.21/ld/testsuite/ld-elf/maxpage1.d
new file mode 100644
index 0000000..57acda0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/maxpage1.d
@@ -0,0 +1,9 @@
+#source: maxpage1.s
+#ld: -z max-page-size=0x200000
+#readelf: -l --wide
+#target: *-*-linux*
+
+#...
+ LOAD+.*0x200000
+ LOAD+.*0x200000
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/maxpage1.s b/binutils-2.21/ld/testsuite/ld-elf/maxpage1.s
new file mode 100644
index 0000000..1a7735a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/maxpage1.s
@@ -0,0 +1,13 @@
+ .globl main
+ .globl start
+ .globl _start
+ .globl __start
+ .text
+main:
+start:
+_start:
+__start:
+ .long 0
+
+ .data
+ .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/maxpage2.d b/binutils-2.21/ld/testsuite/ld-elf/maxpage2.d
new file mode 100644
index 0000000..7fe9379
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/maxpage2.d
@@ -0,0 +1,9 @@
+#source: maxpage1.s
+#ld: -z max-page-size=0x100000
+#readelf: -l --wide
+#target: *-*-linux*
+
+#...
+ LOAD+.*0x100000
+ LOAD+.*0x100000
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/maxpage3.t b/binutils-2.21/ld/testsuite/ld-elf/maxpage3.t
new file mode 100644
index 0000000..556dcd5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/maxpage3.t
@@ -0,0 +1,7 @@
+SECTIONS
+{
+ .text : {*(.text)}
+ . = ALIGN(CONSTANT (MAXPAGESIZE));
+ .data : {*(.data)}
+ /DISCARD/ : {*(*)}
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/maxpage3a.d b/binutils-2.21/ld/testsuite/ld-elf/maxpage3a.d
new file mode 100644
index 0000000..0e46b6b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/maxpage3a.d
@@ -0,0 +1,11 @@
+#source: maxpage1.s
+#ld: -z max-page-size=0x10000000 -T maxpage3.t
+#readelf: -lS --wide
+#target: *-*-linux*
+
+#...
+ \[[ 0-9]+\] \.data[ \t]+PROGBITS[ \t]+0*10000000[ \t]+[ \t0-9a-f]+WA?.*
+#...
+ LOAD+.*0x10000000
+ LOAD+.*0x10000000
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/maxpage3b.d b/binutils-2.21/ld/testsuite/ld-elf/maxpage3b.d
new file mode 100644
index 0000000..4bee0ec
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/maxpage3b.d
@@ -0,0 +1,10 @@
+#source: maxpage1.s
+#ld: -T maxpage3.t -z max-page-size=0x10000000
+#readelf: -lS --wide
+#target: x86_64-*-linux*
+
+#...
+ \[[ 0-9]+\] \.data[ \t]+PROGBITS[ \t]+0*200000[ \t]+[ \t0-9a-f]+WA?.*
+#...
+ LOAD+.*0x10000000
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/maxpage3c.d b/binutils-2.21/ld/testsuite/ld-elf/maxpage3c.d
new file mode 100644
index 0000000..cdc3eaf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/maxpage3c.d
@@ -0,0 +1,12 @@
+#source: maxpage1.s
+#as: --32
+#ld: -m elf_i386 -z max-page-size=0x10000000 -T maxpage3.t
+#readelf: -lS --wide
+#target: x86_64-*-linux*
+
+#...
+ \[[ 0-9]+\] \.data[ \t]+PROGBITS[ \t]+0*10000000[ \t]+[ \t0-9a-f]+WA?.*
+#...
+ LOAD+.*0x10000000
+ LOAD+.*0x10000000
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/maxpage4.d b/binutils-2.21/ld/testsuite/ld-elf/maxpage4.d
new file mode 100644
index 0000000..a7cc17b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/maxpage4.d
@@ -0,0 +1,9 @@
+#source: maxpage1.s
+#as: --32
+#ld: -z max-page-size=0x200000 -T maxpage4.t
+#readelf: -l --wide
+#target: x86_64-*-linux*
+
+#...
+ LOAD+.*0x200000
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/maxpage4.t b/binutils-2.21/ld/testsuite/ld-elf/maxpage4.t
new file mode 100644
index 0000000..42089e3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/maxpage4.t
@@ -0,0 +1,9 @@
+OUTPUT_FORMAT("elf32-i386")
+OUTPUT_ARCH(i386)
+ENTRY(_start)
+SECTIONS
+{
+ .text : {*(.text)}
+ .data : {*(.data)}
+ /DISCARD/ : {*(*)}
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/merge.d b/binutils-2.21/ld/testsuite/ld-elf/merge.d
new file mode 100644
index 0000000..83b5698
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/merge.d
@@ -0,0 +1,17 @@
+#source: merge.s
+#ld: -T merge.ld
+#objdump: -s
+#xfail: "arc-*-*" "avr-*-*" "bfin-*-*" "cr16-*-*" "cris*-*-*" "crx-*-*" "d10v-*-*" "d30v-*-*"
+#xfail: "dlx-*-*" "fr30-*-*" "frv-*-*" "hppa*64*-*-*" "h8300-*-*" "score-*-*"
+#xfail: "i370-*-*" "i860-*-*" "i960-*-*" "ip2k-*-*" "iq2000-*-*" "lm32-*-*"
+#xfail: "mcore-*-*" "mn102*-*-*" "mips*-*-*" "ms1-*-*" "msp430-*-*" "mep-*-*"
+#xfail: "or32-*-*" "pj-*-*" "sparc*-*-*" "tic6x-*-*" "vax-*-*" "xstormy16-*-*"
+#xfail: "xtensa*-*-*"
+
+.*: file format .*elf.*
+
+Contents of section .text:
+ 1000 (1010)?0000(1010)? (1210)?0000(1012)? (0c)?000000(0c)? (0e)?000000(0e)? .*
+Contents of section .rodata:
+ 1010 61626300 .*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/merge.ld b/binutils-2.21/ld/testsuite/ld-elf/merge.ld
new file mode 100644
index 0000000..dce91bb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/merge.ld
@@ -0,0 +1,7 @@
+SECTIONS
+{
+ . = 0x1000;
+ .text : { *(.text .text.* .gnu.linkonce.t.*) }
+ .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+ .junk : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/merge.s b/binutils-2.21/ld/testsuite/ld-elf/merge.s
new file mode 100644
index 0000000..1e6e0e3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/merge.s
@@ -0,0 +1,14 @@
+ .section .rodata.str,"aMS","progbits",1
+.LC0:
+ .asciz "abc"
+.LC1:
+ .asciz "c"
+
+ .text
+ .global _start
+_start:
+ .long .LC0
+.LT0:
+ .long .LC1
+ .long .LC0-.LT0
+ .long .LC1-.LT0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/merge2.d b/binutils-2.21/ld/testsuite/ld-elf/merge2.d
new file mode 100644
index 0000000..4770621
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/merge2.d
@@ -0,0 +1,17 @@
+#source: merge2.s
+#ld: -T merge.ld
+#objdump: -s
+#xfail: "arc-*-*" "d30v-*-*" "dlx-*-*" "hppa64-*-*"
+#xfail: "i960-*-*" "ip2k-*-*" "or32-*-*" "pj-*-*"
+
+.*: file format .*elf.*
+
+Contents of section .text:
+ 1000 (3010)?0000(1030)? (3210)?0000(1032)? (3110)?0000(1031)? (3410)?0000(1034)? .*
+ 1010 (4010)?0000(1040)? (3810)?0000(1038)? (4810)?0000(1048)? (3c10)?0000(103c)? .*
+ 1020 (5010)?0000(1050)? (5410)?0000(1054)? (5810)?0000(1058)? (5010)?0000(1050)? .*
+Contents of section .rodata:
+ 1030 61626300 62000000 (78563412|12345678) 99999999 .*
+ 1040 (78563412|12345678) 00000000 99999999 00000000 .*
+ 1050 (78563412|12345678) 99999999 00000000 .*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/merge2.s b/binutils-2.21/ld/testsuite/ld-elf/merge2.s
new file mode 100644
index 0000000..41d066a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/merge2.s
@@ -0,0 +1,58 @@
+ .section .rodata.str,"aMS","progbits",1
+.LC0:
+ .asciz "abc"
+.LC1:
+ .asciz "c"
+.LC2:
+ .asciz "bc"
+.LC3:
+ .asciz "b"
+
+
+ .section .rodata.str2,"aMS","progbits",4
+ .p2align 2
+.LC4:
+ .long 0x12345678
+ .long 0
+.LC5:
+ .long 0x12345678
+ .long 0x99999999
+ .long 0x12345678
+ .long 0
+.LC6:
+ .long 0x99999999
+ .long 0
+.LC7:
+ .long 0x99999999
+ .long 0x12345678
+ .long 0
+
+
+ .section .rodata.m,"aM","progbits",4
+ .p2align 2
+.LC8:
+ .long 0x12345678
+.LC9:
+ .long 0x99999999
+.LC10:
+ .long 0
+.LC11:
+ .long 0x12345678
+
+
+ .text
+ .global _start
+_start:
+ .long .LC0
+.LT0:
+ .long .LC1
+ .long .LC2
+ .long .LC3
+ .long .LC4
+ .long .LC5
+ .long .LC6
+ .long .LC7
+ .long .LC8
+ .long .LC9
+ .long .LC10
+ .long .LC11
diff --git a/binutils-2.21/ld/testsuite/ld-elf/multibss1.d b/binutils-2.21/ld/testsuite/ld-elf/multibss1.d
new file mode 100644
index 0000000..a6fd9b3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/multibss1.d
@@ -0,0 +1,11 @@
+#source: multibss1.s
+#ld: -e 0
+#readelf: -l --wide
+#target: *-*-linux*
+#xfail: hppa64-*-*
+# hppa64 default script add 16 bytes at start of .data giving 0x500010 p_memsz
+
+#...
+ +LOAD +0x[^ ]+ +0x[^ ]+ +0x[^ ]+ +0x[^ ]+ +0x500000 .*
+# p_offset p_vaddr p_paddr p_filesz
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/multibss1.s b/binutils-2.21/ld/testsuite/ld-elf/multibss1.s
new file mode 100644
index 0000000..94b84f9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/multibss1.s
@@ -0,0 +1,11 @@
+ .macro makebss
+ .section .bss_\@,"aw",%nobits
+ .space 0x10000
+ .endm
+
+ .rept 80
+ makebss
+ .endr
+
+ .text
+ .space 0x10
diff --git a/binutils-2.21/ld/testsuite/ld-elf/new.cc b/binutils-2.21/ld/testsuite/ld-elf/new.cc
new file mode 100644
index 0000000..b4c8882
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/new.cc
@@ -0,0 +1,48 @@
+#include <new>
+#include <exception_defines.h>
+
+using std::bad_alloc;
+
+extern "C" void *malloc (std::size_t);
+extern "C" void abort (void);
+
+void *
+operator new (std::size_t sz, const std::nothrow_t&) throw()
+{
+ void *p;
+
+ /* malloc (0) is unpredictable; avoid it. */
+ if (sz == 0)
+ sz = 1;
+ p = (void *) malloc (sz);
+ return p;
+}
+
+void *
+operator new (std::size_t sz) throw (std::bad_alloc)
+{
+ void *p;
+
+ /* malloc (0) is unpredictable; avoid it. */
+ if (sz == 0)
+ sz = 1;
+ p = (void *) malloc (sz);
+ while (p == 0)
+ {
+ ::abort();
+ }
+
+ return p;
+}
+
+void*
+operator new[] (std::size_t sz) throw (std::bad_alloc)
+{
+ return ::operator new(sz);
+}
+
+void *
+operator new[] (std::size_t sz, const std::nothrow_t& nothrow) throw()
+{
+ return ::operator new(sz, nothrow);
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/nobits-1.d b/binutils-2.21/ld/testsuite/ld-elf/nobits-1.d
new file mode 100644
index 0000000..89f0e10
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/nobits-1.d
@@ -0,0 +1,9 @@
+#ld: -Tnobits-1.t
+#readelf: -l --wide
+#xfail: hppa64-*-*
+# hppa64 adds PHDR
+
+#...
+ Section to Segment mapping:
+ Segment Sections...
+ 00 .foo .bar
diff --git a/binutils-2.21/ld/testsuite/ld-elf/nobits-1.s b/binutils-2.21/ld/testsuite/ld-elf/nobits-1.s
new file mode 100644
index 0000000..8fb1365
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/nobits-1.s
@@ -0,0 +1,6 @@
+ .globl _entry
+ .section .foo,"awx",%progbits
+_entry:
+ .byte 0
+ .section .bar,"ax",%nobits
+ .byte 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/nobits-1.t b/binutils-2.21/ld/testsuite/ld-elf/nobits-1.t
new file mode 100644
index 0000000..2004330
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/nobits-1.t
@@ -0,0 +1,13 @@
+ENTRY(_entry)
+PHDRS
+{
+ data PT_LOAD;
+}
+SECTIONS
+{
+ . = 0x1000000;
+ .foo : { *(.foo) } :data
+ . = 0x2000000;
+ .bar : { *(.bar) } :data
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/noload-1.d b/binutils-2.21/ld/testsuite/ld-elf/noload-1.d
new file mode 100644
index 0000000..7cae479
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/noload-1.d
@@ -0,0 +1,7 @@
+#source: noload-1.s
+#ld: -T noload-1.t
+#readelf: -S --wide
+
+#...
+ \[[ 0-9]+\] TEST[ \t]+NOBITS[ \t0-9a-f]+WA.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/noload-1.s b/binutils-2.21/ld/testsuite/ld-elf/noload-1.s
new file mode 100644
index 0000000..ad0479e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/noload-1.s
@@ -0,0 +1,2 @@
+ .section TEST,"aw",%progbits
+ .byte 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/noload-1.t b/binutils-2.21/ld/testsuite/ld-elf/noload-1.t
new file mode 100644
index 0000000..1efd06c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/noload-1.t
@@ -0,0 +1,8 @@
+SECTIONS
+{
+ TEST (NOLOAD) :
+ {
+ *(TEST)
+ }
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/noload-2.d b/binutils-2.21/ld/testsuite/ld-elf/noload-2.d
new file mode 100644
index 0000000..633bf45
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/noload-2.d
@@ -0,0 +1,8 @@
+#source: noload-1.s
+#ld: -T noload-1.t -z max-page-size=0x200000
+#readelf: -Sl --wide
+#target: *-*-linux*
+
+#...
+ +LOAD +0x200000 +0x0+ +0x0+ +0x0+ +0x0+1 +RW +0x200000
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/noload-3.d b/binutils-2.21/ld/testsuite/ld-elf/noload-3.d
new file mode 100644
index 0000000..84b27d7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/noload-3.d
@@ -0,0 +1,7 @@
+#ld: -T noload-3.t
+#objdump: -s -j .foo1
+
+#...
+Contents of section .foo1:
+ [0-9a-f]+ [0-9a-f]+ [0-9a-f]+ [0-9a-f]+ [0-9a-f]+[ \t]+This is a test.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/noload-3.s b/binutils-2.21/ld/testsuite/ld-elf/noload-3.s
new file mode 100644
index 0000000..84aa2e2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/noload-3.s
@@ -0,0 +1,6 @@
+ .section .foo2,"aw",%progbits
+ .byte 1
+ .section .foo1,"w",%progbits
+ .string "This is a test."
+ .section .foo,"aw",%progbits
+ .space 16
diff --git a/binutils-2.21/ld/testsuite/ld-elf/noload-3.t b/binutils-2.21/ld/testsuite/ld-elf/noload-3.t
new file mode 100644
index 0000000..fbb5166
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/noload-3.t
@@ -0,0 +1,7 @@
+SECTIONS
+{
+ .foo2 : { *(.foo2) }
+ .foo1 : { *(.foo1) }
+ .foo (NOLOAD) : { *(.foo) }
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/normal.out b/binutils-2.21/ld/testsuite/ld-elf/normal.out
new file mode 100644
index 0000000..3b721f0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/normal.out
@@ -0,0 +1,3 @@
+TEST1
+TEST1
+MAIN
diff --git a/binutils-2.21/ld/testsuite/ld-elf/note-1.d b/binutils-2.21/ld/testsuite/ld-elf/note-1.d
new file mode 100644
index 0000000..345a2bb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/note-1.d
@@ -0,0 +1,10 @@
+#ld: -Tnote-1.t
+#readelf: -l --wide
+#xfail: hppa64-*-*
+# hppa64 adds PHDR
+
+#...
+ Section to Segment mapping:
+ Segment Sections...
+ 00 .foo
+ 01 .note
diff --git a/binutils-2.21/ld/testsuite/ld-elf/note-1.s b/binutils-2.21/ld/testsuite/ld-elf/note-1.s
new file mode 100644
index 0000000..844188b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/note-1.s
@@ -0,0 +1,6 @@
+ .globl _entry
+ .section .foo,"awx",%progbits
+_entry:
+ .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ .section .note,"",%note
+ .byte 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/note-1.t b/binutils-2.21/ld/testsuite/ld-elf/note-1.t
new file mode 100644
index 0000000..031fe82
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/note-1.t
@@ -0,0 +1,14 @@
+ENTRY(_entry)
+PHDRS
+{
+ data PT_LOAD;
+ note PT_NOTE;
+}
+SECTIONS
+{
+ . = 0x1000000;
+ .foo : { *(.foo) } :data
+ . = 0x2000000;
+ .note : { *(.note) } :note
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/note-2.d b/binutils-2.21/ld/testsuite/ld-elf/note-2.d
new file mode 100644
index 0000000..289134e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/note-2.d
@@ -0,0 +1,17 @@
+#ld: -Tnote-2.t
+#objcopy_linked_file: -R .foo
+#readelf: -l --wide
+#xfail: hppa64-*-*
+# hppa64 adds PHDR
+
+#...
+Program Headers:
+ Type.*
+ LOAD +0x[0-9a-f]+ .*
+ NOTE +0x[0-9a-f]+ .*
+
+#...
+ Segment Sections...
+ 00[ \t]+.text *
+ 01[ \t]+.note *
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/note-2.s b/binutils-2.21/ld/testsuite/ld-elf/note-2.s
new file mode 100644
index 0000000..93d6b36
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/note-2.s
@@ -0,0 +1,8 @@
+ .globl _entry
+ .text
+_entry:
+ .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ .section .foo,"awx",%progbits
+ .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ .section .note,"",%note
+ .byte 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/note-2.t b/binutils-2.21/ld/testsuite/ld-elf/note-2.t
new file mode 100644
index 0000000..a507da9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/note-2.t
@@ -0,0 +1,13 @@
+ENTRY(_entry)
+PHDRS
+{
+ data PT_LOAD;
+ note PT_NOTE;
+}
+SECTIONS
+{
+ .text : { *(.text) } :data
+ .foo : { *(.foo) } :data
+ .note : { *(.note) } :note
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/orphan-region.d b/binutils-2.21/ld/testsuite/ld-elf/orphan-region.d
new file mode 100644
index 0000000..9d6c90c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/orphan-region.d
@@ -0,0 +1,21 @@
+#source: orphan-region.s
+#ld: -T orphan-region.ld -N
+#readelf: -S -l --wide
+#xfail: arc-*-* d30v-*-* dlx-*-* fr30-*-* frv-*-elf i860-*-* i960-*-*
+#xfail: iq*-*-* mn10200-*-* moxie-*-* msp*-*-* mt-*-* or32-*-* pj*-*-*
+#xfail: spu-*-* hppa*64*-*-* frv-*-*
+# if not using elf32.em, you don't get fancy orphan handling
+# spu twiddles LOAD range, hppa64 adds PHDR, frv-linux adds GNU_STACK
+
+#...
+ \[[ 0-9]+\] \.text[ \t]+PROGBITS[ \t]+0*40000000[ \t]+.*
+ \[[ 0-9]+\] \.rodata[ \t]+PROGBITS[ \t]+0*400000[0-9a-f]+[ \t]+.*
+ \[[ 0-9]+\] \.moredata[ \t]+PROGBITS[ \t]+0*400000[0-9a-f]+[ \t]+.*
+#...
+Program Headers:
+ Type.*
+ LOAD[ \t]+0x[0-9a-f]+ 0x0*40000000 0x0*40000000 0x[0-9a-f]+ 0x[0-9a-f]+ RWE 0x[0-9a-f]+
+
+ Section to Segment mapping:
+ Segment Sections...
+ 00 .text .rodata .moredata *
diff --git a/binutils-2.21/ld/testsuite/ld-elf/orphan-region.ld b/binutils-2.21/ld/testsuite/ld-elf/orphan-region.ld
new file mode 100644
index 0000000..b7dfdba
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/orphan-region.ld
@@ -0,0 +1,11 @@
+MEMORY
+{
+ region : ORIGIN = 0x40000000, LENGTH = 8M
+}
+
+SECTIONS
+{
+ .text : ALIGN (4) { *(.text) } > region
+ .rodata : ALIGN (4) { *(.rodata) } > region
+ /DISCARD/ : { *(.reginfo) *(.trampolines) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/orphan-region.s b/binutils-2.21/ld/testsuite/ld-elf/orphan-region.s
new file mode 100644
index 0000000..0268686
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/orphan-region.s
@@ -0,0 +1,8 @@
+ .text
+ .long 0
+ .section ".rodata", "a", %progbits
+ .long 0
+ .section ".moredata", "a", %progbits
+ .long 0
+ .section ".notdata", "", %progbits
+ .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/orphan.d b/binutils-2.21/ld/testsuite/ld-elf/orphan.d
new file mode 100644
index 0000000..7955c8b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/orphan.d
@@ -0,0 +1,16 @@
+#source: orphan.s
+#ld: -T orphan.ld
+#readelf: -S --wide
+#xfail: arc-*-* d30v-*-* dlx-*-* fr30-*-* frv-*-elf i860-*-* i960-*-*
+#xfail: iq*-*-* mn10200-*-* moxie-*-* msp*-*-* mt-*-* or32-*-* pj*-*-*
+# if not using elf32.em, you don't get fancy orphan handling
+
+#...
+ \[[ 0-9]+\] \.(text|notbad)[ \t]+PROGBITS[ \t0-9a-f]+AX?.*
+#...
+ \[[ 0-9]+\] \.(text|notbad)[ \t]+PROGBITS[ \t0-9a-f]+AX?.*
+ \[[ 0-9]+\] \.data[ \t]+PROGBITS[ \t0-9a-f]+WA.*
+#...
+ \[[ 0-9]+\] \.note[ \t]+NOTE[ \t0-9a-f]+A.*
+ \[[ 0-9]+\] \.note.bar[ \t]+NOTE[ \t0-9a-f]+A.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/orphan.ld b/binutils-2.21/ld/testsuite/ld-elf/orphan.ld
new file mode 100644
index 0000000..d23222b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/orphan.ld
@@ -0,0 +1,8 @@
+SECTIONS
+{
+ .text : { *(.text) }
+ .data : { *(.data) }
+ .bss : { *(.bss) *(COMMON) }
+ .note : { *(.note) }
+ /DISCARD/ : { *(.reginfo) *(.trampolines) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/orphan.s b/binutils-2.21/ld/testsuite/ld-elf/orphan.s
new file mode 100644
index 0000000..d46f21d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/orphan.s
@@ -0,0 +1,10 @@
+ .text
+ .long 0
+ .data
+ .long 0
+ .section .note,"a","note"
+ .long 0
+ .section .notbad,"a","progbits"
+ .long 0
+ .section .note.bar,"a","note"
+ .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/orphan2.d b/binutils-2.21/ld/testsuite/ld-elf/orphan2.d
new file mode 100644
index 0000000..ddf69c7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/orphan2.d
@@ -0,0 +1,11 @@
+#source: orphan2.s
+#ld: -r
+#readelf: -S --wide
+#xfail: xstormy*-*-*
+# xstormy uses a non-standard script, resulting is unexpected section order
+
+#...
+ \[[ 0-9]+\] \.text[ \t]+PROGBITS[ \t0-9a-f]+AX?.*
+#...
+ \[[ 0-9]+\] \.modinfo[ \t]+PROGBITS[ \t0-9a-f]+A.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/orphan2.s b/binutils-2.21/ld/testsuite/ld-elf/orphan2.s
new file mode 100644
index 0000000..bed8dcd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/orphan2.s
@@ -0,0 +1,4 @@
+ .text
+ .long 0
+ .section .modinfo,"a","progbits"
+ .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/orphan3.d b/binutils-2.21/ld/testsuite/ld-elf/orphan3.d
new file mode 100644
index 0000000..ea600d3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/orphan3.d
@@ -0,0 +1,21 @@
+#source: orphan3a.s
+#source: orphan3b.s
+#source: orphan3c.s
+#source: orphan3d.s
+#source: orphan3e.s
+#source: orphan3f.s
+#ld:
+#readelf: -S --wide
+#xfail: "arc-*-*" "d30v-*-*" "dlx-*-*" "fr30-*-*" "frv-*-elf"
+#xfail: "i860-*-*" "i960-*-*" "iq2000-*-*" "mn10200-*-*" "msp430-*-*" "mt-*-*"
+#xfail: "or32-*-*" "pj-*-*"
+#xfail: "xstormy16-*-*"
+
+#...
+ \[[ 0-9]+\] \.foo +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+20 +0+ +A +0 +0 +[0-9]+
+#...
+ \[[ 0-9]+\] \.foo +NOBITS +[0-9a-f]+ +[0-9a-f]+ +0+20 +0+ +A +0 +0 +[0-9]+
+#...
+ \[[ 0-9]+\] \.foo +PROGBITS +0+ +[0-9a-f]+ +0+20 +0+ +0 +0 +[0-9]+
+ \[[ 0-9]+\] [._][^f].*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/orphan3a.s b/binutils-2.21/ld/testsuite/ld-elf/orphan3a.s
new file mode 100644
index 0000000..bc3023b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/orphan3a.s
@@ -0,0 +1,12 @@
+ .globl main
+ .globl start
+ .globl _start
+ .globl __start
+ .text
+main:
+start:
+_start:
+__start:
+
+ .section .foo,"a",%nobits
+ .space 16
diff --git a/binutils-2.21/ld/testsuite/ld-elf/orphan3b.s b/binutils-2.21/ld/testsuite/ld-elf/orphan3b.s
new file mode 100644
index 0000000..c475eb1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/orphan3b.s
@@ -0,0 +1,2 @@
+ .section .foo,"a",%progbits
+ .long 1,1,1,1
diff --git a/binutils-2.21/ld/testsuite/ld-elf/orphan3c.s b/binutils-2.21/ld/testsuite/ld-elf/orphan3c.s
new file mode 100644
index 0000000..209570c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/orphan3c.s
@@ -0,0 +1,2 @@
+ .section .foo,"",%progbits
+ .long 2,2,2,2
diff --git a/binutils-2.21/ld/testsuite/ld-elf/orphan3d.s b/binutils-2.21/ld/testsuite/ld-elf/orphan3d.s
new file mode 100644
index 0000000..7f57443
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/orphan3d.s
@@ -0,0 +1,2 @@
+ .section .foo,"a",%nobits
+ .space 16
diff --git a/binutils-2.21/ld/testsuite/ld-elf/orphan3e.s b/binutils-2.21/ld/testsuite/ld-elf/orphan3e.s
new file mode 100644
index 0000000..405d9e2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/orphan3e.s
@@ -0,0 +1,2 @@
+ .section .foo,"a",%progbits
+ .long 4,4,4,4
diff --git a/binutils-2.21/ld/testsuite/ld-elf/orphan3f.s b/binutils-2.21/ld/testsuite/ld-elf/orphan3f.s
new file mode 100644
index 0000000..3ef1b9e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/orphan3f.s
@@ -0,0 +1,2 @@
+ .section .foo,"",%progbits
+ .long 5,5,5,5
diff --git a/binutils-2.21/ld/testsuite/ld-elf/orphan4.d b/binutils-2.21/ld/testsuite/ld-elf/orphan4.d
new file mode 100644
index 0000000..72d77d6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/orphan4.d
@@ -0,0 +1,7 @@
+#source: orphan4.s
+#ld: -T orphan4.ld
+#objdump: -h
+
+#...
+ . \.foo 0+1 0+1000 0+1000 .* 2\*\*0
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/orphan4.ld b/binutils-2.21/ld/testsuite/ld-elf/orphan4.ld
new file mode 100644
index 0000000..ab9bc9c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/orphan4.ld
@@ -0,0 +1,13 @@
+/* The .foo section doesn't specify *any* objects, but the object
+ we're linking has sections named ".foo". Make sure these sections
+ are linked into the .foo output section anyway. The bug that was
+ fixed was that a new .foo output section would be created at
+ address 0. */
+
+SECTIONS {
+ .foo 0x00001000 : {
+ }
+ .text 0x00002000 : {
+ *(.text);
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/orphan4.s b/binutils-2.21/ld/testsuite/ld-elf/orphan4.s
new file mode 100644
index 0000000..1f07646
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/orphan4.s
@@ -0,0 +1,4 @@
+ .section ".foo", "ax"
+ .byte 45
+ .text
+ .byte 15
diff --git a/binutils-2.21/ld/testsuite/ld-elf/overlay.d b/binutils-2.21/ld/testsuite/ld-elf/overlay.d
new file mode 100644
index 0000000..00d25d5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/overlay.d
@@ -0,0 +1,12 @@
+# ld: -T overlay.t -u __load_start_text1 -u __load_start_text2 -u __load_stop_text1 -u __load_stop_text2
+#readelf: -s
+
+#...
+[ ]+[0-9]+:[ ]+0*4000[ ]+0[ ]+NOTYPE[ ]+GLOBAL[ ]+DEFAULT[ ]+ABS __load_start_text1
+#...
+[ ]+[0-9]+:[ ]+0*4010[ ]+0[ ]+NOTYPE[ ]+GLOBAL[ ]+DEFAULT[ ]+ABS __load_start_text2
+#...
+[ ]+[0-9]+:[ ]+0*4030[ ]+0[ ]+NOTYPE[ ]+GLOBAL[ ]+DEFAULT[ ]+ABS __load_stop_text2
+#...
+[ ]+[0-9]+:[ ]+0*4010[ ]+0[ ]+NOTYPE[ ]+GLOBAL[ ]+DEFAULT[ ]+ABS __load_stop_text1
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/overlay.s b/binutils-2.21/ld/testsuite/ld-elf/overlay.s
new file mode 100644
index 0000000..f153044
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/overlay.s
@@ -0,0 +1,6 @@
+ .section .text1,"ax",%progbits
+ .space 0x10
+ .section .text2,"ax",%progbits
+ .space 0x20
+ .text
+ .space 0x30
diff --git a/binutils-2.21/ld/testsuite/ld-elf/overlay.t b/binutils-2.21/ld/testsuite/ld-elf/overlay.t
new file mode 100644
index 0000000..bdb33c8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/overlay.t
@@ -0,0 +1,10 @@
+SECTIONS
+{
+ .text : { *(.text) }
+ OVERLAY 0x1000 : AT (0x4000)
+ {
+ .text1 {*(.text1)}
+ .text2 {*(.text2)}
+ }
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/pass.out b/binutils-2.21/ld/testsuite/ld-elf/pass.out
new file mode 100644
index 0000000..7ef22e9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/pass.out
@@ -0,0 +1 @@
+PASS
diff --git a/binutils-2.21/ld/testsuite/ld-elf/pr11138-1.c b/binutils-2.21/ld/testsuite/ld-elf/pr11138-1.c
new file mode 100644
index 0000000..2aab815
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/pr11138-1.c
@@ -0,0 +1,13 @@
+#include <stdio.h>
+
+void
+bar (void)
+{
+ printf ("DSO bar\n");
+}
+
+void
+foo (void)
+{
+ bar ();
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/pr11138-1.map b/binutils-2.21/ld/testsuite/ld-elf/pr11138-1.map
new file mode 100644
index 0000000..8676b1f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/pr11138-1.map
@@ -0,0 +1,4 @@
+VERS_1 {
+ global: bar; foo;
+ local: *;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-elf/pr11138-2.c b/binutils-2.21/ld/testsuite/ld-elf/pr11138-2.c
new file mode 100644
index 0000000..ccca280
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/pr11138-2.c
@@ -0,0 +1,17 @@
+#include <stdio.h>
+
+extern void foo (void);
+
+void
+bar (void)
+{
+ printf ("MAIN bar\n");
+}
+
+int
+main (void)
+{
+ bar ();
+ foo ();
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/pr11138-2.map b/binutils-2.21/ld/testsuite/ld-elf/pr11138-2.map
new file mode 100644
index 0000000..1f8fb15
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/pr11138-2.map
@@ -0,0 +1,4 @@
+{
+ global: main;
+ local: *;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-elf/pr11138.out b/binutils-2.21/ld/testsuite/ld-elf/pr11138.out
new file mode 100644
index 0000000..6dbdc49
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/pr11138.out
@@ -0,0 +1,2 @@
+MAIN bar
+DSO bar
diff --git a/binutils-2.21/ld/testsuite/ld-elf/pr11304.d b/binutils-2.21/ld/testsuite/ld-elf/pr11304.d
new file mode 100644
index 0000000..d0b8408
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/pr11304.d
@@ -0,0 +1,11 @@
+#source: pr11304a.s
+#source: pr11304b.s
+#ld: -e 0 --section-start .zzz=0x800000
+#readelf: -S --wide
+
+#failif
+#...
+ \[[ 0-9]+\] \.zzz[ \t]+PROGBITS[ \t0-9a-f]+AX?.*
+#...
+ \[[ 0-9]+\] \.zzz[ \t]+PROGBITS[ \t0-9a-f]+AX?.*
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-elf/pr11304a.s b/binutils-2.21/ld/testsuite/ld-elf/pr11304a.s
new file mode 100644
index 0000000..22fbbee
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/pr11304a.s
@@ -0,0 +1,4 @@
+.section .zzz,"ax",%progbits
+.long 0
+.text
+.long 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/pr11304b.s b/binutils-2.21/ld/testsuite/ld-elf/pr11304b.s
new file mode 100644
index 0000000..22fbbee
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/pr11304b.s
@@ -0,0 +1,4 @@
+.section .zzz,"ax",%progbits
+.long 0
+.text
+.long 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/pr349-1.s b/binutils-2.21/ld/testsuite/ld-elf/pr349-1.s
new file mode 100644
index 0000000..a205905
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/pr349-1.s
@@ -0,0 +1,2 @@
+ .section ".abcxyz","ax",%progbits
+ .long 1
diff --git a/binutils-2.21/ld/testsuite/ld-elf/pr349-2.s b/binutils-2.21/ld/testsuite/ld-elf/pr349-2.s
new file mode 100644
index 0000000..85f36ca
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/pr349-2.s
@@ -0,0 +1,2 @@
+ .section ".abcxyz","",%progbits
+ .long 2
diff --git a/binutils-2.21/ld/testsuite/ld-elf/pr349.d b/binutils-2.21/ld/testsuite/ld-elf/pr349.d
new file mode 100644
index 0000000..48e3256
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/pr349.d
@@ -0,0 +1,13 @@
+#source: pr349-1.s
+#source: pr349-2.s
+#ld: -r
+#readelf: -S
+#xfail: arc-*-* d30v-*-* dlx-*-* fr30-*-* frv-*-elf i860-*-* i960-*-*
+#xfail: iq*-*-* mn10200-*-* moxie-*-* msp*-*-* mt-*-* or32-*-* pj*-*-*
+# if not using elf32.em, you don't get fancy section handling
+
+#...
+.* .abcxyz .*
+#...
+.* .abcxyz .*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/pr9676-1.c b/binutils-2.21/ld/testsuite/ld-elf/pr9676-1.c
new file mode 100644
index 0000000..f8459c7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/pr9676-1.c
@@ -0,0 +1,15 @@
+extern int foo (void) __attribute__((section (".gnu.linkonce.t.1"), weak));
+
+int
+foo (void)
+{
+ return 1;
+}
+
+extern int foo2 (void);
+
+int
+bar (void)
+{
+ return foo2 ();
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/pr9676-2.c b/binutils-2.21/ld/testsuite/ld-elf/pr9676-2.c
new file mode 100644
index 0000000..e2a3404
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/pr9676-2.c
@@ -0,0 +1,14 @@
+extern int foo (void) __attribute__((section (".gnu.linkonce.t.1"), weak,
+ __visibility__ ("hidden")));
+
+int
+foo (void)
+{
+ return 1;
+}
+
+int
+foo2 (void)
+{
+ return 1;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/pr9676-3.c b/binutils-2.21/ld/testsuite/ld-elf/pr9676-3.c
new file mode 100644
index 0000000..e5985df
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/pr9676-3.c
@@ -0,0 +1,7 @@
+extern int foo (void) __attribute__((section (".gnu.linkonce.t.1"), weak));
+
+int
+foo (void)
+{
+ return 1;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/pr9676-4.c b/binutils-2.21/ld/testsuite/ld-elf/pr9676-4.c
new file mode 100644
index 0000000..d5013c7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/pr9676-4.c
@@ -0,0 +1,9 @@
+extern int bar (void);
+extern int foo (void);
+
+int
+x (void)
+{
+ foo ();
+ return bar ();
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/pr9676.rd b/binutils-2.21/ld/testsuite/ld-elf/pr9676.rd
new file mode 100644
index 0000000..44a11ce
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/pr9676.rd
@@ -0,0 +1,5 @@
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size Type +Bind +Vis +Ndx Name
+#...
+ +[0-9]+: +[0-9a-f]+ +[0-9a-f]+ +FUNC +LOCAL +DEFAULT +[0-9]+ +foo
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-elf/pr9679-1.c b/binutils-2.21/ld/testsuite/ld-elf/pr9679-1.c
new file mode 100644
index 0000000..cf7abbb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/pr9679-1.c
@@ -0,0 +1,5 @@
+int
+foo (void)
+{
+ return 1;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/pr9679-2.c b/binutils-2.21/ld/testsuite/ld-elf/pr9679-2.c
new file mode 100644
index 0000000..e125a6b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/pr9679-2.c
@@ -0,0 +1,13 @@
+extern int foo (void) __attribute__((weak,__visibility__ ("hidden")));
+
+int
+foo (void)
+{
+ return 1;
+}
+
+int
+bar (void)
+{
+ return foo ();
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/pr9679.rd b/binutils-2.21/ld/testsuite/ld-elf/pr9679.rd
new file mode 100644
index 0000000..44a11ce
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/pr9679.rd
@@ -0,0 +1,5 @@
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size Type +Bind +Vis +Ndx Name
+#...
+ +[0-9]+: +[0-9a-f]+ +[0-9a-f]+ +FUNC +LOCAL +DEFAULT +[0-9]+ +foo
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-elf/preinit.c b/binutils-2.21/ld/testsuite/ld-elf/preinit.c
new file mode 100644
index 0000000..9ef2a89
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/preinit.c
@@ -0,0 +1,34 @@
+#include <stdio.h>
+
+static void
+preinit_0 (void)
+{
+ printf ("preinit array 0\n");
+}
+
+static void
+preinit_1 (void)
+{
+ printf ("preinit array 1\n");
+}
+
+static void
+preinit_2 (void)
+{
+ printf ("preinit array 2\n");
+}
+
+void (*const preinit_array []) (void)
+ __attribute__ ((section (".preinit_array"),
+ aligned (sizeof (void *)))) =
+{
+ &preinit_0,
+ &preinit_1,
+ &preinit_2
+};
+
+int
+main (void)
+{
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/preinit.out b/binutils-2.21/ld/testsuite/ld-elf/preinit.out
new file mode 100644
index 0000000..6a30bc6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/preinit.out
@@ -0,0 +1,3 @@
+preinit array 0
+preinit array 1
+preinit array 2
diff --git a/binutils-2.21/ld/testsuite/ld-elf/relocatable.d b/binutils-2.21/ld/testsuite/ld-elf/relocatable.d
new file mode 100644
index 0000000..458244a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/relocatable.d
@@ -0,0 +1,10 @@
+#name: relocatable with script
+#source: simple.s
+#ld: -r -T relocatable.t
+#readelf: -S --wide
+#xfail: hppa-*-*
+
+#...
+ \[[ 0-9]+\] \.text.*[ \t]+PROGBITS[ \t]+0+800000[ \t0-9a-f]+AX.*
+ \[[ 0-9]+\] \.data.*[ \t]+PROGBITS[ \t]+0+900000[ \t0-9a-f]+WA.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/relocatable.t b/binutils-2.21/ld/testsuite/ld-elf/relocatable.t
new file mode 100644
index 0000000..2ec056a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/relocatable.t
@@ -0,0 +1,8 @@
+SECTIONS
+{
+ . = 0x800000;
+ .text : { *(.text) }
+ . = 0x900000;
+ .data : { *(.data) }
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/relro1.s b/binutils-2.21/ld/testsuite/ld-elf/relro1.s
new file mode 100644
index 0000000..76c956d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/relro1.s
@@ -0,0 +1,14 @@
+ .globl main
+ .globl start
+ .globl _start
+ .globl __start
+ .text
+main:
+start:
+_start:
+__start:
+ .long 0
+ .data
+ .long 0
+ .section .data.rel.ro,"aw",%progbits
+ .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/relro2.s b/binutils-2.21/ld/testsuite/ld-elf/relro2.s
new file mode 100644
index 0000000..0bbf366
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/relro2.s
@@ -0,0 +1,5 @@
+ .text
+ .globl x
+ .type x, @function
+x:
+ jmp foo@PLT
diff --git a/binutils-2.21/ld/testsuite/ld-elf/sec-to-seg-script-adjoining-pages.t b/binutils-2.21/ld/testsuite/ld-elf/sec-to-seg-script-adjoining-pages.t
new file mode 100644
index 0000000..763fcb7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/sec-to-seg-script-adjoining-pages.t
@@ -0,0 +1,11 @@
+SECTIONS
+{
+ . = 0x1000;
+ .sec1 : { *sec-to-seg1.o(.rodata) }
+ . += CONSTANT(MAXPAGESIZE);
+ .sec2 : { *sec-to-seg2.o(.rodata) }
+
+ .data : { *(.data) } /* For hppa64. */
+
+ /DISCARD/ : {*(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/sec-to-seg-script-disjoint-pages.t b/binutils-2.21/ld/testsuite/ld-elf/sec-to-seg-script-disjoint-pages.t
new file mode 100644
index 0000000..25023cc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/sec-to-seg-script-disjoint-pages.t
@@ -0,0 +1,11 @@
+SECTIONS
+{
+ . = 0x1000;
+ .sec1 : { *sec-to-seg1.o(.rodata) }
+ . += CONSTANT(MAXPAGESIZE) * 2;
+ .sec2 : { *sec-to-seg2.o(.rodata) }
+
+ .data : { *(.data) } /* For hppa64. */
+
+ /DISCARD/ : {*(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/sec-to-seg-script-same-page.t b/binutils-2.21/ld/testsuite/ld-elf/sec-to-seg-script-same-page.t
new file mode 100644
index 0000000..2b50f7e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/sec-to-seg-script-same-page.t
@@ -0,0 +1,10 @@
+SECTIONS
+{
+ . = 0x1000;
+ .sec1 : { *sec-to-seg1.o(.rodata) }
+ .sec2 : { *sec-to-seg2.o(.rodata) }
+
+ .data : { *(.data) } /* For hppa64. */
+
+ /DISCARD/ : {*(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/sec-to-seg.exp b/binutils-2.21/ld/testsuite/ld-elf/sec-to-seg.exp
new file mode 100644
index 0000000..cd32e68
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/sec-to-seg.exp
@@ -0,0 +1,102 @@
+# Test the assigment of sections to segments.
+#
+# Copyright 2008, 2010 Free Software Foundation, Inc.
+# Contributed by Red Hat.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+set testname "assignment of ELF sections to segments"
+
+if {! [is_elf_format] } {
+ unsupported $testname
+ return
+}
+
+if { ! [ld_assemble $as $srcdir/$subdir/sec-to-seg1.s tmpdir/sec-to-seg1.o]
+ || ! [ld_assemble $as $srcdir/$subdir/sec-to-seg2.s tmpdir/sec-to-seg2.o]} then {
+ unresolved $testname
+ return
+}
+
+proc sec_to_seg_test { testname scriptname same_seg } {
+ global srcdir
+ global subdir
+ global ld
+ global exec_output
+ global READELF
+
+ if {! [ld_simple_link $ld tmpdir/sec-to-seg "-T $srcdir/$subdir/$scriptname tmpdir/sec-to-seg1.o tmpdir/sec-to-seg2.o"] } then {
+ fail $testname
+ return 0
+ }
+
+ send_log "$READELF --program-headers --section-headers tmpdir/sec-to-seg\n"
+ set exec_output [run_host_cmd "$READELF" "--program-headers --section-headers tmpdir/sec-to-seg"]
+
+ if { $same_seg == 1 } {
+ if {! [regexp ".*.sec1 .sec2" $exec_output] } {
+ fail $testname
+ return 0
+ }
+ } else {
+ if { [regexp ".*.sec1 .sec2" $exec_output] } {
+ fail $testname
+ return 0
+ }
+ }
+
+ pass $testname
+ return 1
+}
+
+# Assuming a pagesize of 0x1000 then:
+#
+# Test Sec1 End Sec 2 Start Expected Result
+# ---- -------- ----------- ---------------
+# A 00001042 00001043 Both sections on same page: assign to same segment.
+# B 00001042 00002044 Sections on adjacent pages: assign to same segment.
+# C 00001042 00003044 Sections on disjoint pages: assign to separate segments.
+
+# These targets have a pagesize of 1, so they will always end up
+# placing the two sections in separate segments in the B test.
+if { [istarget avr-*-*]
+ || [istarget cr16-*-*]
+ || [istarget crx-*-*]
+ || [istarget dlx-*-*]
+ || [istarget h8300-*-*]
+ || [istarget i960-*-*]
+ || [istarget ip2k-*-*]
+ || [istarget m32r-*-*]
+ || [istarget m88k-*-*]
+ || [istarget microblaze-*-*]
+ || [istarget moxie-*-*]
+ || [istarget msp430-*-*]
+ || [istarget mt-*-*]
+ || [istarget tic6x-*-*]
+ } {
+ set B_test_same_seg 0
+} else {
+ set B_test_same_seg 1
+}
+
+sec_to_seg_test "assignment of ELF sections to segments (same page)" "sec-to-seg-script-same-page.t" 1
+sec_to_seg_test "assignment of ELF sections to segments (adjacent pages)" "sec-to-seg-script-adjoining-pages.t" $B_test_same_seg
+sec_to_seg_test "assignment of ELF sections to segments (disjoint pages)" "sec-to-seg-script-disjoint-pages.t" 0
+
+
+# FIXME: Add more tests to check other rules of section to segment assignment.
diff --git a/binutils-2.21/ld/testsuite/ld-elf/sec-to-seg1.s b/binutils-2.21/ld/testsuite/ld-elf/sec-to-seg1.s
new file mode 100644
index 0000000..1e8e2bb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/sec-to-seg1.s
@@ -0,0 +1,9 @@
+ .file "sec-to-seg1.s"
+
+ .section .rodata
+ .align 2
+ .ascii "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\000"
+ .align 2
+ .ascii "0000000000000000000000000000000\000"
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-elf/sec-to-seg2.s b/binutils-2.21/ld/testsuite/ld-elf/sec-to-seg2.s
new file mode 100644
index 0000000..b1dd078
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/sec-to-seg2.s
@@ -0,0 +1,13 @@
+ .file "sec-to-seg2.s"
+
+ .section .rodata
+ .align 2
+ .ascii "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz\000"
+ .align 2
+ .ascii "55555555555555555555555555555555\000"
+ .align 2
+ .ascii "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\000"
+ .align 2
+ .ascii "99999999999999999999999999999999\000"
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-elf/sec64k.exp b/binutils-2.21/ld/testsuite/ld-elf/sec64k.exp
new file mode 100644
index 0000000..7c04c9b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/sec64k.exp
@@ -0,0 +1,206 @@
+# Expect script for tests for >64k sections
+# Copyright 2002, 2003, 2005, 2006, 2007, 2008
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by Hans-Peter Nilsson (hp@axis.com)
+#
+
+# Exclude non-ELF targets.
+
+if ![is_elf_format] {
+ return
+}
+
+# Targets using the generic linker backend don't sort section symbols
+# before local symbols, so don't bother testing them.
+if { [istarget "arc-*-*"]
+ || [istarget "d30v-*-*"]
+ || [istarget "dlx-*-*"]
+ || [istarget "i960-*-*"]
+ || [istarget "or32-*-*"]
+ || [istarget "pj*-*-*"]
+ || [istarget "m32r-*-*"] } {
+ return
+}
+
+# Test >64k sections, with and without -r. First, create the assembly
+# files. Have a relocation to another section and one within the local
+# section.
+
+set test1 "64ksec-r"
+set test2 "64ksec"
+
+if { ![runtest_file_p $runtests $test1] \
+ && ![runtest_file_p $runtests $test2] } {
+ return
+}
+
+set sfiles {}
+set max_sec 66000
+set secs_per_file 1000
+for { set i 0 } { $i < $max_sec / $secs_per_file } { incr i } {
+ set sfile "$objdir/tmpdir/sec64-$i.s"
+ lappend sfiles $sfile
+ if [catch { set ofd [open $sfile w] } x] {
+ perror "$x"
+ unresolved $test1
+ unresolved $test2
+ return
+ }
+
+ if { $i == 0 } {
+ puts $ofd " .global start"
+ puts $ofd "start:"
+ puts $ofd " .global _start"
+ puts $ofd "_start:"
+ puts $ofd " .global __start"
+ puts $ofd "__start:"
+ puts $ofd " .global main"
+ puts $ofd "main:"
+ puts $ofd " .global foo_0"
+ puts $ofd "foo_0: .dc.a 0"
+ }
+
+ # Make sure the used section is not covered by common linker scripts.
+ # They should get separate section entries even without -r.
+ puts $ofd " .altmacro"
+ puts $ofd " .macro sec secn, secp"
+ if {![istarget "frv-*-*linux*"]} then {
+ puts $ofd " .section .foo.\\secn,\"ax\""
+ } else {
+ puts $ofd " .section .foo.\\secn,\"aw\""
+ }
+ puts $ofd " .global foo_\\secn"
+ puts $ofd "foo_\\secn:"
+ puts $ofd " .dc.a foo_\\secp"
+ puts $ofd "bar_\\secn:"
+ puts $ofd " .dc.a bar_\\secn"
+ puts $ofd " .endm"
+ if {![istarget "bfin-*-*"]} then {
+ puts $ofd " secn = [expr $i * $secs_per_file]"
+ } else {
+ puts $ofd " .set secn, [expr $i * $secs_per_file]"
+ }
+ puts $ofd " .rept $secs_per_file"
+ if {![istarget "bfin-*-*"]} then {
+ puts $ofd " secn = secn + 1"
+ } else {
+ puts $ofd " .set secn, secn + 1"
+ }
+ puts $ofd " sec %(secn), %(secn-1)"
+ puts $ofd " .endr"
+
+ close $ofd
+}
+
+if [catch { set ofd [open "tmpdir/$test1.d" w] } x] {
+ perror "$x"
+ unresolved $test1
+ unresolved $test2
+ return
+}
+
+# The ld-r linked file will contain relocation-sections too, so make it
+# half the size in order to try and keep the test-time down.
+
+# The m32r target generates both REL and RELA relocs (for historical
+# reasons) so the expected number of sections will be much more than
+# 68000, which throws this particular test right off.
+if { ![istarget "m32r-*-*"] } then {
+ foreach sfile [lrange $sfiles 0 [expr [llength $sfiles] / 2]] {
+ puts $ofd "#source: $sfile"
+ }
+ puts $ofd "#ld: -r"
+ puts $ofd "#readelf: -W -Ss"
+ puts $ofd "There are 680.. section headers.*:"
+ puts $ofd "#..."
+ puts $ofd " \\\[ 0\\\] .* 680\[0-9\]\[0-9\]\[ \]+0\[ \]+0"
+ puts $ofd "#..."
+ puts $ofd " \\\[ \[0-9\]\\\] \.foo\.1\[ \]+PROGBITS\[ \]+.*"
+ puts $ofd "#..."
+ puts $ofd " \\\[65279\\\] (.rel\[a\]?)?\\.foo\\.\[0-9\]+ .*"
+ puts $ofd " \\\[65280\\\] (.rel\[a\]?)?\\.foo\\.\[0-9\]+ .*"
+ puts $ofd "#..."
+ puts $ofd " 340..: 0+\[ \]+0\[ \]+SECTION\[ \]+LOCAL\[ \]+DEFAULT\[ \]+68... "
+ puts $ofd "#..."
+ puts $ofd " 340..: 0+(2|4|8)\[ \]+0\[ \]+NOTYPE\[ \]+LOCAL\[ \]+DEFAULT\[ \]+\[2-5\] bar_1$"
+ puts $ofd "#..."
+ puts $ofd ".* bar_34000$"
+ puts $ofd "#..."
+ # Global symbols are not in "alphanumeric" order, so we just check
+ # that the first and the last are present in any order (assuming no
+ # duplicates).
+ puts $ofd ".* (\[0-9\] foo_1|68... foo_34000)$"
+ puts $ofd "#..."
+ puts $ofd ".* (\[0-9\] foo_1|68... foo_34000)$"
+ puts $ofd "#pass"
+ close $ofd
+ run_dump_test "tmpdir/$test1"
+}
+
+if [catch { set ofd [open "tmpdir/$test2.d" w] } x] {
+ perror "$x"
+ unresolved $test2
+ return
+}
+
+# too big for d10v and msp
+# lack of fancy orphan section handling causes overlap on fr30 and iq2000
+if { ![istarget "d10v-*-*"]
+ && ![istarget "msp*-*-*"]
+ && ![istarget "fr30-*-*"]
+ && ![istarget "iq2000-*-*"] } {
+ foreach sfile $sfiles { puts $ofd "#source: $sfile" }
+ if { [istarget "avr-*-*"] } then {
+ puts $ofd "#as: -mmcu=avr6"
+ puts $ofd "#ld: -mavr6"
+ } elseif { [istarget spu*-*-*] } {
+ puts $ofd "#ld: --local-store 0:0"
+ } else {
+ puts $ofd "#ld:"
+ }
+ puts $ofd "#readelf: -W -Ss"
+ puts $ofd "There are 660.. section headers.*:"
+ puts $ofd "#..."
+ puts $ofd " \\\[ 0\\\] .* 660..\[ \]+0\[ \]+0"
+ puts $ofd "#..."
+ puts $ofd " \\\[65279\\\] \\.foo\\.\[0-9\]+ .*"
+ puts $ofd " \\\[65280\\\] \\.foo\\.\[0-9\]+ .*"
+ puts $ofd "#..."
+ puts $ofd " 660..: \[0-9a-f\]+\[ \]+0\[ \]+SECTION\[ \]+LOCAL\[ \]+DEFAULT\[ \]+660.. "
+ puts $ofd "#..."
+ puts $ofd " 660..: \[0-9a-f\]+\[ \]+0\[ \]+NOTYPE\[ \]+LOCAL\[ \]+DEFAULT\[ \]+\[0-9\] bar_1$"
+ puts $ofd "#..."
+ puts $ofd ".* bar_66000$"
+ puts $ofd "#..."
+ # Global symbols are not in "alphanumeric" order, so we just check
+ # that the first and the last are present in any order (assuming no
+ # duplicates).
+ puts $ofd ".* (\[0-9\] foo_1|66... foo_66000)$"
+ puts $ofd "#..."
+ puts $ofd ".* (\[0-9\] foo_1|66... foo_66000)$"
+ puts $ofd "#pass"
+ close $ofd
+ run_dump_test "tmpdir/$test2"
+}
+
+for { set i 1 } { $i < $max_sec / $secs_per_file } { incr i } {
+ catch "exec rm -f tmpdir/dump$i.o" status
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/seg.d b/binutils-2.21/ld/testsuite/ld-elf/seg.d
new file mode 100644
index 0000000..d9436ae
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/seg.d
@@ -0,0 +1,21 @@
+#target: *-*-linux* *-*-vxworks
+#source: seg.s
+#ld: -T seg.t -z max-page-size=0x1000
+#readelf: -l --wide
+
+#...
+Program Headers:
+ Type Offset VirtAddr.*
+# On MIPS, the first segment is for .reginfo.
+#...
+ LOAD .*
+ LOAD 0x0*001000 0xf*fffff000 0xf*fffff000 0x0*1000 0x0*1000 .*
+# FRV adds a PT_GNU_STACK header
+#...
+ Section to Segment mapping:
+ Segment Sections...
+ 00 .*
+# On MIPS, the first segment is for .reginfo.
+#...
+ 0. reset boot
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/seg.s b/binutils-2.21/ld/testsuite/ld-elf/seg.s
new file mode 100644
index 0000000..24ec567
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/seg.s
@@ -0,0 +1,6 @@
+ .section boot,"ax"
+ .4byte 0x76543210
+ .section reset,"ax"
+ .4byte 0xfedcba98
+ .text
+ .4byte 0x12345678
diff --git a/binutils-2.21/ld/testsuite/ld-elf/seg.t b/binutils-2.21/ld/testsuite/ld-elf/seg.t
new file mode 100644
index 0000000..2f86acf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/seg.t
@@ -0,0 +1,16 @@
+
+SECTIONS
+{
+ reset - 4 :
+ {
+ *(reset)
+ }
+ boot - 0x1000 :
+ {
+ *(boot)
+ } = 0xffff
+ . = + SIZEOF_HEADERS;
+ .text : { *(.text) }
+ .data : { *(.data) }
+ .bss : { *(.bss) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/shared.exp b/binutils-2.21/ld/testsuite/ld-elf/shared.exp
new file mode 100644
index 0000000..d0c3478
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/shared.exp
@@ -0,0 +1,330 @@
+# Expect script for various ELF tests.
+# Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# Exclude non-ELF targets.
+
+if ![is_elf_format] {
+ return
+}
+
+# The following tests require running the executable generated by ld.
+if ![isnative] {
+ return
+}
+
+# Check if compiler works
+if { [which $CC] == 0 } {
+ return
+}
+
+set build_tests {
+ {"Build libfoo.so"
+ "-shared" "-fPIC"
+ {foo.c} {} "libfoo.so"}
+ {"Build versioned libfoo.so"
+ "-shared -Wl,--version-script=foo.map" "-fPIC"
+ {foo.c} {} "libfoov.so"}
+ {"Build libbar.so"
+ "-shared" "-fPIC"
+ {begin.c end.c} {} "libbar.so"}
+ {"Build warn libbar.so"
+ "-shared" "-fPIC"
+ {beginwarn.c end.c} {} "libbarw.so"}
+ {"Build hidden libbar.so"
+ "-shared" "-fPIC"
+ {begin.c endhidden.c} {} "libbarh.so"}
+ {"Build protected libbar.so"
+ "-shared" "-fPIC"
+ {begin.c endprotected.c} {} "libbarp.so"}
+ {"Build libbar.so with libfoo.so"
+ "-shared tmpdir/begin.o tmpdir/libfoo.so" "-fPIC"
+ {end.c} {} "libbarfoo.so"}
+ {"Build libar.so with versioned libfoo.so"
+ "-shared tmpdir/begin.o tmpdir/libfoov.so" "-fPIC"
+ {end.c} {} "libbarfoov.so"}
+ {"Build hidden libbar.so with libfoo.so"
+ "-shared tmpdir/begin.o tmpdir/libfoo.so" "-fPIC"
+ {endhidden.c} {} "libbarhfoo.so"}
+ {"Build hidden libar.so with versioned libfoo.so"
+ "-shared tmpdir/begin.o tmpdir/libfoov.so" "-fPIC"
+ {endhidden.c} {} "libbarhfoov.so"}
+ {"Build protected libbar.so with libfoo.so"
+ "-shared tmpdir/begin.o tmpdir/libfoo.so" "-fPIC"
+ {endprotected.c} {} "libbarpfoo.so"}
+ {"Build protected libbar.so with versioned libfoo.so"
+ "-shared tmpdir/begin.o tmpdir/libfoov.so" "-fPIC"
+ {endprotected.c} {} "libbarpfoov.so"}
+ {"Build libdl1.so"
+ "-shared" "-fPIC"
+ {dl1.c} {} "libdl1.so"}
+ {"Build libdl2a.so with --dynamic-list=dl2.list"
+ "-shared -Wl,--dynamic-list=dl2.list" "-fPIC"
+ {dl2.c dl2xxx.c} {} "libdl2a.so"}
+ {"Build libdl2a.so with --dynamic-list=dl2a.list"
+ "-shared -Wl,--dynamic-list=dl2a.list" "-fPIC"
+ {dl2.c dl2xxx.c} {} "libdl2a.so"}
+ {"Build libdl2a.so with --dynamic-list-data"
+ "-shared -Wl,--dynamic-list-data" "-fPIC"
+ {dl2.c dl2xxx.c} {} "libdl2a.so"}
+ {"Build libdl2b.so with --dynamic-list=dl2.list and dl2xxx.list"
+ "-shared -Wl,--dynamic-list=dl2.list,--dynamic-list=dl2xxx.list" "-fPIC"
+ {dl2.c dl2xxx.c} {} "libdl2b.so"}
+ {"Build libdl2c.so with --dynamic-list-data and dl2xxx.list"
+ "-shared -Wl,--dynamic-list-data,--dynamic-list=dl2xxx.list" "-fPIC"
+ {dl2.c dl2xxx.c} {} "libdl2c.so"}
+ {"Build libdl4a.so with --dynamic-list=dl4.list"
+ "-shared -Wl,--dynamic-list=dl4.list" "-fPIC"
+ {dl4.c dl4xxx.c} {} "libdl4a.so"}
+ {"Build libdl4b.so with --dynamic-list-data"
+ "-shared -Wl,--dynamic-list-data" "-fPIC"
+ {dl4.c dl4xxx.c} {} "libdl4b.so"}
+ {"Build libdl4c.so with --dynamic-list=dl4.list and dl4xxx.list"
+ "-shared -Wl,--dynamic-list=dl4.list,--dynamic-list=dl4xxx.list" "-fPIC"
+ {dl4.c dl4xxx.c} {} "libdl4c.so"}
+ {"Build libdl4d.so with --dynamic-list-data and dl4xxx.list"
+ "-shared -Wl,--dynamic-list-data,--dynamic-list=dl4xxx.list" "-fPIC"
+ {dl4.c dl4xxx.c} {} "libdl4d.so"}
+ {"Build libdl4e.so with -Bsymbolic-functions --dynamic-list-cpp-new"
+ "-shared -Wl,-Bsymbolic-functions,--dynamic-list-cpp-new" "-fPIC"
+ {dl4.c dl4xxx.c} {} "libdl4e.so"}
+ {"Build libdl4f.so with --dynamic-list-cpp-new -Bsymbolic-functions"
+ "-shared -Wl,--dynamic-list-cpp-new,-Bsymbolic-functions" "-fPIC"
+ {dl4.c dl4xxx.c} {} "libdl4f.so"}
+ {"Build libdl6a.so"
+ "-shared" "-fPIC"
+ {dl6.c} {} "libdl6a.so"}
+ {"Build libdl6b.so with -Bsymbolic --dynamic-list-data"
+ "-shared -Wl,-Bsymbolic,--dynamic-list-data" "-fPIC"
+ {dl6.c} {} "libdl6b.so"}
+ {"Build libdl6c.so with -Bsymbolic"
+ "-shared -Wl,-Bsymbolic" "-fPIC"
+ {dl6.c} {} "libdl6c.so"}
+ {"Build libdl6d.so with --dynamic-list-data -Bsymbolic"
+ "-shared -Wl,--dynamic-list-data,-Bsymbolic" "-fPIC"
+ {dl6.c} {} "libdl6d.so"}
+ {"Build libdata1.so"
+ "-shared" "-fPIC"
+ {data1.c} {} "libdata1.so"}
+ {"Build libcomm1.o"
+ "-r -nostdlib" ""
+ {comm1.c} {} "libcomm1.o"}
+ {"Build libfunc1.so"
+ "-shared" "-fPIC"
+ {func1.c} {} "libfunc1.so"}
+ {"Build libpr9676-1.a"
+ "" "-fPIC"
+ {pr9676-1.c} {} "libpr9676-1.a"}
+ {"Build libpr9676-2.a"
+ "" "-fPIC"
+ {pr9676-2.c} {} "libpr9676-2.a"}
+ {"Build libpr9676-3.so"
+ "-shared" "-fPIC"
+ {pr9676-3.c} {} "libpr9676-3.so"}
+ {"Build libpr9676-4.so"
+ "-shared" "-fPIC"
+ {pr9676-4.c} {} "libpr9676-4.so"}
+ {"Build libpr9676-4a.so"
+ "-shared tmpdir/pr9676-4.o -Ltmpdir -lpr9676-3 -Wl,--start-group -lpr9676-1 -lpr9676-2 -Wl,--end-group"
+ "-fPIC"
+ {dummy.c} {{readelf {-s} pr9676.rd}} "libpr9676-4a.so"}
+ {"Build libpr9679.so"
+ "-shared" "-fPIC -O0"
+ {pr9679-1.c pr9679-2.c} {{readelf {-s} pr9679.rd}} "libpr9679.so"}
+ {"Build libpr11138-1.so"
+ "-shared -Wl,--version-script=pr11138-1.map" "-fPIC"
+ {pr11138-1.c} {} "libpr11138-1.so"}
+ {"Build libpr11138-2.o"
+ "-r -nostdlib" ""
+ {pr11138-2.c} {} "libpr11138-2.o"}
+}
+
+set run_tests {
+ {"Run normal with libfoo.so"
+ "tmpdir/begin.o tmpdir/libfoo.so tmpdir/end.o" ""
+ {main.c} "normal" "normal.out"}
+ {"Run protected with libfoo.so"
+ "tmpdir/begin.o tmpdir/libfoo.so tmpdir/endprotected.o" ""
+ {main.c} "protected" "normal.out"}
+ {"Run hidden with libfoo.so"
+ "tmpdir/begin.o tmpdir/libfoo.so tmpdir/endhidden.o" ""
+ {main.c} "hidden" "hidden.out"}
+ {"Run normal with versioned libfoo.so"
+ "tmpdir/begin.o tmpdir/libfoov.so tmpdir/end.o" ""
+ {main.c} "normalv" "normal.out"}
+ {"Run warn with versioned libfoo.so"
+ "tmpdir/beginwarn.o tmpdir/libfoov.so" ""
+ {main.c} "warn" "warn.out"
+ "" "" "^.*\\\): warning: function foo is deprecated$"}
+ {"Run protected with versioned libfoo.so"
+ "tmpdir/begin.o tmpdir/libfoov.so tmpdir/endprotected.o" ""
+ {main.c} "protected" "normal.out"}
+ {"Run hidden with versioned libfoo.so"
+ "tmpdir/begin.o tmpdir/libfoov.so tmpdir/endhidden.o" ""
+ {main.c} "hiddenv" "hidden.out"}
+ {"Run normal libbar.so with libfoo.so"
+ "tmpdir/libbarfoo.so tmpdir/libfoo.so" ""
+ {main.c} "normal" "normal.out"}
+ {"Run protected libbar.so with libfoo.so"
+ "tmpdir/libbarpfoo.so tmpdir/libfoo.so" ""
+ {main.c} "protected" "normal.out"}
+ {"Run hidden libbar.so with libfoo.so"
+ "tmpdir/libbarhfoo.so tmpdir/libfoo.so" ""
+ {main.c} "hidden" "hidden.out"}
+ {"Run normal libbar.so with versioned libfoo.so"
+ "tmpdir/libbarfoov.so tmpdir/libfoov.so" ""
+ {main.c} "normal" "normal.out"}
+ {"Run protected libbar.so with versioned libfoo.so"
+ "tmpdir/libbarpfoov.so tmpdir/libfoov.so" ""
+ {main.c} "protected" "normal.out"}
+ {"Run hidden libbar.so with versioned libfoo.so"
+ "tmpdir/libbarhfoov.so tmpdir/libfoov.so" ""
+ {main.c} "hidden" "hidden.out"}
+ {"Run dl1a with --dynamic-list=dl1.list and dlopen on libdl1.so"
+ "--dynamic-list=dl1.list -ldl" ""
+ {dl1main.c} "dl1a" "dl1.out"}
+ {"Run dl1b with --dynamic-list-data and dlopen on libdl1.so"
+ "--dynamic-list-data -ldl" ""
+ {dl1main.c} "dl1b" "dl1.out"}
+ {"Run with libdl2a.so"
+ "tmpdir/libdl2a.so" ""
+ {dl2main.c} "dl2a" "dl2a.out"}
+ {"Run with libdl2b.so"
+ "tmpdir/libdl2b.so" ""
+ {dl2main.c} "dl2b" "dl2b.out"}
+ {"Run with libdl2c.so"
+ "tmpdir/libdl2c.so" ""
+ {dl2main.c} "dl2c" "dl2b.out"}
+ {"Run with libdl4a.so"
+ "tmpdir/libdl4a.so" ""
+ {dl4main.c} "dl4a" "dl4a.out"}
+ {"Run with libdl4b.so"
+ "tmpdir/libdl4b.so" ""
+ {dl4main.c} "dl4b" "dl4a.out"}
+ {"Run with libdl4c.so"
+ "tmpdir/libdl4c.so" ""
+ {dl4main.c} "dl4c" "dl4b.out"}
+ {"Run with libdl4d.so"
+ "tmpdir/libdl4d.so" ""
+ {dl4main.c} "dl4d" "dl4b.out"}
+ {"Run with libdl4e.so"
+ "tmpdir/libdl4e.so" ""
+ {dl4main.c} "dl4e" "dl4a.out"}
+ {"Run with libdl4f.so"
+ "tmpdir/libdl4f.so" ""
+ {dl4main.c} "dl4f" "dl4a.out"}
+ {"Run dl6a1 with --dynamic-list-data and dlopen on libdl6a.so"
+ "--dynamic-list-data -ldl" ""
+ {dl6amain.c} "dl6a1" "dl6a.out"}
+ {"Run dl6a2 with -Bsymbolic-functions and dlopen on libdl6a.so"
+ "-Bsymbolic-functions -ldl" ""
+ {dl6amain.c} "dl6a2" "dl6b.out"}
+ {"Run dl6a3 with -Bsymbolic and dlopen on libdl6a.so"
+ "-Bsymbolic -ldl" ""
+ {dl6amain.c} "dl6a3" "dl6b.out"}
+ {"Run dl6a4 with -Bsymbolic --dynamic-list-data and dlopen on libdl6a.so"
+ "-Bsymbolic --dynamic-list-data -ldl" ""
+ {dl6amain.c} "dl6a4" "dl6a.out"}
+ {"Run dl6a5 with -Bsymbolic-functions --dynamic-list-cpp-new and dlopen on libdl6a.so"
+ "-Bsymbolic-functions --dynamic-list-cpp-new -ldl" ""
+ {dl6amain.c} "dl6a5" "dl6b.out"}
+ {"Run dl6a6 with --dynamic-list-cpp-new -Bsymbolic-functions and dlopen on libdl6a.so"
+ "--dynamic-list-cpp-new -Bsymbolic-functions -ldl" ""
+ {dl6amain.c} "dl6a6" "dl6b.out"}
+ {"Run dl6a7 with --dynamic-list-data -Bsymbolic and dlopen on libdl6a.so"
+ "--dynamic-list-data -Bsymbolic -ldl" ""
+ {dl6amain.c} "dl6a7" "dl6a.out"}
+ {"Run dl6b1 with --dynamic-list-data and dlopen on libdl6b.so"
+ "--dynamic-list-data -ldl" ""
+ {dl6bmain.c} "dl6b1" "dl6a.out"}
+ {"Run dl6b2 with dlopen on libdl6b.so"
+ "-ldl" ""
+ {dl6bmain.c} "dl6b2" "dl6b.out"}
+ {"Run dl6c1 with --dynamic-list-data and dlopen on libdl6c.so"
+ "--dynamic-list-data -ldl" ""
+ {dl6cmain.c} "dl6c1" "dl6b.out"}
+ {"Run dl6d1 with --dynamic-list-data and dlopen on libdl6d.so"
+ "--dynamic-list-data -ldl" ""
+ {dl6dmain.c} "dl6d1" "dl6b.out"}
+ {"Run with libdata1.so"
+ "tmpdir/libdata1.so" ""
+ {dynbss1.c} "dynbss1" "pass.out"}
+ {"Run with libfunc1.so comm1.o"
+ "tmpdir/libfunc1.so tmpdir/comm1.o" ""
+ {dummy.c} "comm1" "pass.out"}
+ {"Run with comm1.o libfunc1.so"
+ "tmpdir/comm1.o tmpdir/libfunc1.so" ""
+ {dummy.c} "comm1" "pass.out"}
+ {"Run with pr11138-2.c libpr11138-1.so"
+ "--version-script=pr11138-2.map tmpdir/pr11138-2.o tmpdir/libpr11138-1.so" ""
+ {dummy.c} "pr11138a" "pr11138.out"}
+ {"Run with libpr11138-1.so pr11138-2.c"
+ "--version-script=pr11138-2.map tmpdir/libpr11138-1.so tmpdir/pr11138-2.o" ""
+ {dummy.c} "pr11138b" "pr11138.out"}
+}
+
+run_cc_link_tests $build_tests
+# NetBSD ELF systems do not currently support the .*_array sections.
+run_ld_link_exec_tests [list "*-*-netbsdelf*"] $run_tests
+
+# Check if compiler works
+if { [which $CXX] == 0 } {
+ return
+}
+
+set build_cxx_tests {
+ {"Build libdl3a.so with --dynamic-list=dl3.list"
+ "-shared -Wl,--dynamic-list=dl3.list" "-fPIC"
+ {dl3.cc} {} "libdl3a.so" "c++"}
+ {"Build libdl3b.so with -Bsymbolic"
+ "-shared -Wl,-Bsymbolic" "-fPIC"
+ {dl3.cc} {} "libdl3b.so" "c++"}
+ {"Build libdl3a.so with --dynamic-list-cpp-typeinfo"
+ "-shared -Wl,--dynamic-list-cpp-typeinfo" "-fPIC"
+ {dl3.cc} {} "libdl3c.so" "c++"}
+ {"Build libdnew1a.so with --Bsymbolic-functions --dynamic-list-cpp-new"
+ "-shared -Wl,-Bsymbolic-functions,--dynamic-list-cpp-new" "-fPIC"
+ {del.cc new.cc} {} "libnew1a.so" "c++"}
+ {"Build libdnew1b.so with --dynamic-list-data --dynamic-list-cpp-new"
+ "-shared -Wl,--dynamic-list-data,--dynamic-list-cpp-new" "-fPIC"
+ {del.cc new.cc} {} "libnew1b.so" "c++"}
+}
+
+set run_cxx_tests {
+ {"Run with libdl3a.so"
+ "tmpdir/libdl3a.so" ""
+ {dl3main.cc} "dl3a" "dl3a.out" "" "c++"}
+# "-shared -Bsymbolic" only works with gcc 4.5.0 and newer.
+# {"Run with libdl3b.so"
+# "tmpdir/libdl3b.so" ""
+# {dl3main.cc} "dl3b" "dl3b.out" "" "c++"}
+ {"Run with libdl3c.so"
+ "tmpdir/libdl3c.so" ""
+ {dl3main.cc} "dl3c" "dl3a.out" "" "c++"}
+ {"Run with libnew1a.so"
+ "tmpdir/libnew1a.so" ""
+ {dl5.cc} "dl5a" "dl5.out" "" "c++"}
+ {"Run with libnew1b.so"
+ "tmpdir/libnew1b.so" ""
+ {dl5.cc} "dl5b" "dl5.out" "" "c++"}
+}
+
+run_cc_link_tests $build_cxx_tests
+run_ld_link_exec_tests [] $run_cxx_tests
diff --git a/binutils-2.21/ld/testsuite/ld-elf/simple.s b/binutils-2.21/ld/testsuite/ld-elf/simple.s
new file mode 100644
index 0000000..2834182
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/simple.s
@@ -0,0 +1,4 @@
+ .text
+ .long 1
+ .data
+ .long 2
diff --git a/binutils-2.21/ld/testsuite/ld-elf/stab.d b/binutils-2.21/ld/testsuite/ld-elf/stab.d
new file mode 100644
index 0000000..346640d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/stab.d
@@ -0,0 +1,14 @@
+#source: start.s
+#as: -gstabs
+#readelf: -S --wide
+#ld:
+#notarget: "ia64-*-*" "alpha*"
+
+# Disabled on alpha because the entry point may be above 4GB but the stabs
+# value on 32 bits.
+
+#...
+ \[[0-9 ][0-9]\] \.stab +PROGBITS +0+ [0-9a-f]+ [0-9a-f]+ [0-9a-f]+ +[1-9]+ +0.*
+#...
+ \[[0-9 ][0-9]\] \.stabstr +STRTAB +0+ [0-9a-f]+ [0-9a-f]+ 00 +0 +0.*
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-elf/start.s b/binutils-2.21/ld/testsuite/ld-elf/start.s
new file mode 100644
index 0000000..d8655be
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/start.s
@@ -0,0 +1,10 @@
+ .text
+ .global start /* Used by SH targets. */
+start:
+ .global _start
+_start:
+ .global __start
+__start:
+ .global main /* Used by HPPA targets. */
+main:
+ .dc.a 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/symbol1ref.s b/binutils-2.21/ld/testsuite/ld-elf/symbol1ref.s
new file mode 100644
index 0000000..99df499
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/symbol1ref.s
@@ -0,0 +1,3 @@
+ .data
+ .dc.a symbol1
+
diff --git a/binutils-2.21/ld/testsuite/ld-elf/symbol1w.s b/binutils-2.21/ld/testsuite/ld-elf/symbol1w.s
new file mode 100644
index 0000000..38778d3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/symbol1w.s
@@ -0,0 +1,10 @@
+ .section .gnu.warning.symbol1
+ .asciz "witty one-liner"
+ .text
+ .type symbol1,"function"
+ .global symbol1
+symbol1:
+.L1:
+ .long 0
+.L0:
+ .size symbol1,.L0-.L1
diff --git a/binutils-2.21/ld/testsuite/ld-elf/symbol2ref.s b/binutils-2.21/ld/testsuite/ld-elf/symbol2ref.s
new file mode 100644
index 0000000..0a1a9eb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/symbol2ref.s
@@ -0,0 +1,3 @@
+ .data
+ .dc.a Foo
+
diff --git a/binutils-2.21/ld/testsuite/ld-elf/symbol2w.s b/binutils-2.21/ld/testsuite/ld-elf/symbol2w.s
new file mode 100644
index 0000000..794a753
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/symbol2w.s
@@ -0,0 +1,6 @@
+ .section .gnu.warning,"a",%progbits
+ .global Foo
+ .type Foo, %object
+ .size Foo, 20
+Foo:
+ .string "function 'Foo' used"
diff --git a/binutils-2.21/ld/testsuite/ld-elf/table.s b/binutils-2.21/ld/testsuite/ld-elf/table.s
new file mode 100644
index 0000000..2b13f70
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/table.s
@@ -0,0 +1 @@
+ .section .gcc_except_table,"a",%progbits
diff --git a/binutils-2.21/ld/testsuite/ld-elf/tbss.s b/binutils-2.21/ld/testsuite/ld-elf/tbss.s
new file mode 100644
index 0000000..cc43340
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/tbss.s
@@ -0,0 +1,15 @@
+ .file "x.c"
+ .globl bss
+ .section .bss,"aw",%nobits
+ .p2align 12
+ .type bss,%object
+ .size bss,4096
+bss:
+ .zero 4096
+ .globl tbss
+ .section .tbss,"awT",%nobits
+ .p2align 12
+ .type tbss,%object
+ .size tbss,4096
+tbss:
+ .zero 4096
diff --git a/binutils-2.21/ld/testsuite/ld-elf/tbss1.s b/binutils-2.21/ld/testsuite/ld-elf/tbss1.s
new file mode 100644
index 0000000..4f1631f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/tbss1.s
@@ -0,0 +1,24 @@
+ .globl main
+ .globl start
+ .globl _start
+ .globl __start
+ .text
+main:
+start:
+_start:
+__start:
+ .byte 0
+ .globl bss
+ .section .bss,"aw",%nobits
+ .p2align 12
+ .type bss,%object
+ .size bss,4096
+bss:
+ .zero 4096
+ .globl tbss
+ .section .tbss,"awT",%nobits
+ .p2align 12
+ .type tbss,%object
+ .size tbss,4096
+tbss:
+ .zero 4096
diff --git a/binutils-2.21/ld/testsuite/ld-elf/tbss2.s b/binutils-2.21/ld/testsuite/ld-elf/tbss2.s
new file mode 100644
index 0000000..b980925
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/tbss2.s
@@ -0,0 +1,16 @@
+ .globl main
+ .globl start
+ .globl _start
+ .globl __start
+ .text
+main:
+start:
+_start:
+__start:
+ .byte 0
+ .globl tbss
+ .section .tbss,"awT",%nobits
+ .type tbss,%object
+ .size tbss,1
+tbss:
+ .zero 1
diff --git a/binutils-2.21/ld/testsuite/ld-elf/tdata1.s b/binutils-2.21/ld/testsuite/ld-elf/tdata1.s
new file mode 100644
index 0000000..6ea57b6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/tdata1.s
@@ -0,0 +1,24 @@
+ .globl main
+ .globl start
+ .globl _start
+ .globl __start
+ .text
+main:
+start:
+_start:
+__start:
+ .byte 0
+ .globl data
+ .section .data,"aw",%progbits
+ .p2align 4
+ .type data,%object
+ .size data,4096
+data:
+ .zero 4096
+ .globl tdata
+ .section .tdata,"awT",%progbits
+ .p2align 4
+ .type tdata,%object
+ .size tdata,4096
+tdata:
+ .zero 4096
diff --git a/binutils-2.21/ld/testsuite/ld-elf/tdata2.s b/binutils-2.21/ld/testsuite/ld-elf/tdata2.s
new file mode 100644
index 0000000..1da459f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/tdata2.s
@@ -0,0 +1,16 @@
+ .globl main
+ .globl start
+ .globl _start
+ .globl __start
+ .text
+main:
+start:
+_start:
+__start:
+ .byte 0
+ .globl tdata
+ .section .tdata,"awT",%progbits
+ .type tdata,%object
+ .size tdata,1
+tdata:
+ .byte 0
diff --git a/binutils-2.21/ld/testsuite/ld-elf/textaddr1.d b/binutils-2.21/ld/testsuite/ld-elf/textaddr1.d
new file mode 100644
index 0000000..f7a3ad9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/textaddr1.d
@@ -0,0 +1,8 @@
+#source: maxpage1.s
+#ld: -Ttext-segment 0x7000000 -z max-page-size=0x200000
+#readelf: -l --wide
+#target: *-*-linux-gnu
+
+#...
+ LOAD +0x0+ 0x0*7000000 0x0*7000000 0x0*[0-9a-f][0-9a-f][0-9a-f] 0x0*[0-9a-f][0-9a-f][0-9a-f] R E 0x200000
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/textaddr2.d b/binutils-2.21/ld/testsuite/ld-elf/textaddr2.d
new file mode 100644
index 0000000..9d1b0e5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/textaddr2.d
@@ -0,0 +1,8 @@
+#source: maxpage1.s
+#ld: -shared -Ttext-segment 0x7000000 -z max-page-size=0x200000
+#readelf: -l --wide
+#target: *-*-linux-gnu
+
+#...
+ LOAD +0x0+ 0x0*7000000 0x0*7000000 0x0*[0-9a-f][0-9a-f][0-9a-f] 0x0*[0-9a-f][0-9a-f][0-9a-f] R E 0x200000
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/textaddr3.d b/binutils-2.21/ld/testsuite/ld-elf/textaddr3.d
new file mode 100644
index 0000000..d533e24
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/textaddr3.d
@@ -0,0 +1,4 @@
+#source: maxpage1.s
+#ld: -Ttext-segment 0x10000 -z max-page-size=0x200000
+#target: *-*-linux-gnu
+#warning: .*address of `text-segment' isn't multiple of maximum page size
diff --git a/binutils-2.21/ld/testsuite/ld-elf/textaddr4.d b/binutils-2.21/ld/testsuite/ld-elf/textaddr4.d
new file mode 100644
index 0000000..bfd7630
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/textaddr4.d
@@ -0,0 +1,8 @@
+#source: maxpage1.s
+#ld: -z max-page-size=0x10000 -Ttext-segment 0x10000
+#readelf: -l --wide
+#target: *-*-linux-gnu
+
+#...
+ LOAD +0x0+ 0x0*10000 0x0*10000 0x0*[0-9a-f][0-9a-f][0-9a-f] 0x0*[0-9a-f][0-9a-f][0-9a-f] R E 0x10000
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/textaddr5.d b/binutils-2.21/ld/testsuite/ld-elf/textaddr5.d
new file mode 100644
index 0000000..5fe41d0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/textaddr5.d
@@ -0,0 +1,4 @@
+#source: maxpage1.s
+#ld: -shared -z max-page-size=0x200000 -Ttext-segment 0x10000
+#target: *-*-linux-gnu
+#warning: .*address of `text-segment' isn't multiple of maximum page size
diff --git a/binutils-2.21/ld/testsuite/ld-elf/textaddr6.d b/binutils-2.21/ld/testsuite/ld-elf/textaddr6.d
new file mode 100644
index 0000000..b3b9f84
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/textaddr6.d
@@ -0,0 +1,8 @@
+#source: maxpage1.s
+#ld: -shared -z max-page-size=0x10000 -Ttext-segment 0x10000
+#readelf: -l --wide
+#target: *-*-linux-gnu
+
+#...
+ LOAD +0x0+ 0x0*10000 0x0*10000 0x0*[0-9a-f][0-9a-f][0-9a-f] 0x0*[0-9a-f][0-9a-f][0-9a-f] R E 0x10000
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/textaddr7.d b/binutils-2.21/ld/testsuite/ld-elf/textaddr7.d
new file mode 100644
index 0000000..54a571f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/textaddr7.d
@@ -0,0 +1,8 @@
+#source: maxpage1.s
+#ld: -n -z max-page-size=0x200000 -Ttext-segment 0x10000
+#readelf: -l --wide
+#target: *-*-linux-gnu
+
+#...
+ LOAD .*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/tls_common.exp b/binutils-2.21/ld/testsuite/ld-elf/tls_common.exp
new file mode 100644
index 0000000..66a550c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/tls_common.exp
@@ -0,0 +1,72 @@
+# Expect script for .tls_common tests
+# Copyright 2006, 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by Jakub Jelinek (jakub@redhat.com)
+#
+
+# Make sure that binutils can correctly handle ld output in ELF.
+
+# Run on Linux only.
+if { ![istarget *-*-linux*] } {
+ return
+}
+
+if { [istarget *-*-linux*aout*]
+ || [istarget *-*-linux*oldld*] } {
+ return
+}
+
+global as
+global ld
+global READELF
+global srcdir
+global subdir
+global link_output
+
+if { ![ld_assemble $as $srcdir/$subdir/tls_common.s tmpdir/tls_common.o ] } {
+ unresolved "tls_common"
+ return
+}
+
+if { ![ld_simple_link $ld tmpdir/tls_common1.o "-r tmpdir/tls_common.o"] } {
+ fail "tls_common"
+ return
+}
+
+if { ![ld_simple_link $ld tmpdir/tls_common "tmpdir/tls_common1.o"] } {
+ if { [string match "*not supported*" $link_output]
+ || [string match "*unrecognized option*" $link_output] } {
+ unsupported "$ld_options is not supported by this target"
+ } elseif { [string match "*Warning*alignment*of common symbol*" $link_output] } {
+ fail "tls_common"
+ } else {
+ unresolved "tls_common"
+ }
+ return
+}
+
+set readelf_output [run_host_cmd "$READELF" "-l --wide tmpdir/tls_common"]
+if ![regexp ".*TLS.*0x0+ 0x0+4 R .*" $readelf_output] then {
+ send_log "$readelf_output\n"
+ fail "tls_common"
+ return
+}
+
+pass "tls_common"
diff --git a/binutils-2.21/ld/testsuite/ld-elf/tls_common.s b/binutils-2.21/ld/testsuite/ld-elf/tls_common.s
new file mode 100644
index 0000000..502d8f3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/tls_common.s
@@ -0,0 +1,11 @@
+ .globl main
+ .globl start
+ .globl _start
+ .globl __start
+ .text
+main:
+start:
+_start:
+__start:
+ .byte 0
+ .tls_common foo,4,4
diff --git a/binutils-2.21/ld/testsuite/ld-elf/tls_gc.s b/binutils-2.21/ld/testsuite/ld-elf/tls_gc.s
new file mode 100644
index 0000000..db93eba
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/tls_gc.s
@@ -0,0 +1,16 @@
+ .globl main
+ .globl start
+ .globl _start
+ .globl __start
+ .text
+main:
+start:
+_start:
+__start:
+ .byte 0
+ .globl var
+ .section .tbss.var,"awT",%nobits
+ .type var,%object
+ .size var,1
+var:
+ .zero 1
diff --git a/binutils-2.21/ld/testsuite/ld-elf/unknown.d b/binutils-2.21/ld/testsuite/ld-elf/unknown.d
new file mode 100644
index 0000000..636e6c7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/unknown.d
@@ -0,0 +1,7 @@
+#source: ../../../binutils/testsuite/binutils-all/unknown.s
+#ld: -r
+#readelf: -S
+
+#...
+ \[[ 0-9]+\] \.foo[ \t]+NOTE[ \t]+.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/unknown2.d b/binutils-2.21/ld/testsuite/ld-elf/unknown2.d
new file mode 100644
index 0000000..467d5d3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/unknown2.d
@@ -0,0 +1,8 @@
+#source: unknown2.s
+#ld: -shared
+#readelf: -S
+#target: *-*-linux*
+
+#...
+ \[[ 0-9]+\] \.note.foo[ \t]+NOTE[ \t]+.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/unknown2.s b/binutils-2.21/ld/testsuite/ld-elf/unknown2.s
new file mode 100644
index 0000000..8592820
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/unknown2.s
@@ -0,0 +1,6 @@
+ .section .note.foo,"a","note"
+ .space 16
+ .section .data,"aw"
+ .space 3800
+ .section .rodata,"a"
+ .space 4
diff --git a/binutils-2.21/ld/testsuite/ld-elf/warn.out b/binutils-2.21/ld/testsuite/ld-elf/warn.out
new file mode 100644
index 0000000..ba836ce
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/warn.out
@@ -0,0 +1,3 @@
+TEST2
+TEST2
+MAIN
diff --git a/binutils-2.21/ld/testsuite/ld-elf/warn1.d b/binutils-2.21/ld/testsuite/ld-elf/warn1.d
new file mode 100644
index 0000000..3ef5032
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/warn1.d
@@ -0,0 +1,15 @@
+#source: start.s
+#source: symbol1ref.s
+#source: symbol1w.s
+#ld: -T group.ld
+#warning: ^[^\\n]*\): warning: witty one-liner$
+#readelf: -s
+#notarget: "sparc64-*-solaris2*" "sparcv9-*-solaris2*"
+#xfail: "arc-*-*" "d30v-*-*" "dlx-*-*" "i960-*-*" "or32-*-*" "pj-*-*"
+
+# Check that warnings are generated for the .gnu.warning.SYMBOL
+# construct and that the symbol still appears as expected.
+
+#...
+ +[0-9]+: +[0-9a-f]+ +[48] +FUNC +GLOBAL +DEFAULT +[1-9] symbol1
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/warn2.d b/binutils-2.21/ld/testsuite/ld-elf/warn2.d
new file mode 100644
index 0000000..95b7ef4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/warn2.d
@@ -0,0 +1,17 @@
+#source: start.s
+#source: symbol2ref.s
+#source: symbol2w.s
+#ld: -T group.ld
+#warning: ^[^\\n]*\.[obj]+: warning: function 'Foo' used$
+#readelf: -s
+#notarget: "sparc64-*-solaris2*" "sparcv9-*-solaris2*"
+#xfail: arc-*-* d30v-*-* dlx-*-* fr30-*-* frv-*-elf i860-*-* i960-*-*
+#xfail: iq*-*-* mn10200-*-* moxie-*-* msp*-*-* mt-*-* or32-*-* pj*-*-*
+# if not using elf32.em, you don't get fancy section handling
+
+# Check that warnings are generated for the symbols in .gnu.warning
+# construct and that the symbol still appears as expected.
+
+#...
+ +[0-9]+: +[0-9a-f]+ +20 +OBJECT +GLOBAL +DEFAULT +[1-9] Foo
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/weak-dyn-1.ld b/binutils-2.21/ld/testsuite/ld-elf/weak-dyn-1.ld
new file mode 100644
index 0000000..495b712
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/weak-dyn-1.ld
@@ -0,0 +1,8 @@
+SECTIONS
+{
+ . = 0x800000;
+ PROVIDE (bar = .);
+ .data : {
+ *(.data)
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/weak-dyn-1.rd b/binutils-2.21/ld/testsuite/ld-elf/weak-dyn-1.rd
new file mode 100644
index 0000000..ab5e0ba
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/weak-dyn-1.rd
@@ -0,0 +1,3 @@
+#...
+.* foo.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elf/weak-dyn-1a.s b/binutils-2.21/ld/testsuite/ld-elf/weak-dyn-1a.s
new file mode 100644
index 0000000..bb81d3a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/weak-dyn-1a.s
@@ -0,0 +1,13 @@
+ .globl foo
+ .weak foo
+ .type foo,%object
+ .size foo,1
+
+ .globl bar
+ .type bar,%object
+ .size bar,1
+
+ .data
+foo:
+bar:
+ .byte 1
diff --git a/binutils-2.21/ld/testsuite/ld-elf/weak-dyn-1b.s b/binutils-2.21/ld/testsuite/ld-elf/weak-dyn-1b.s
new file mode 100644
index 0000000..23f187a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/weak-dyn-1b.s
@@ -0,0 +1,2 @@
+ .data
+ .dc.a foo
diff --git a/binutils-2.21/ld/testsuite/ld-elf/wrap.exp b/binutils-2.21/ld/testsuite/ld-elf/wrap.exp
new file mode 100644
index 0000000..70e433d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/wrap.exp
@@ -0,0 +1,57 @@
+# Expect script for wrap ELF tests.
+# Copyright 2006, 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# Exclude non-ELF targets.
+
+if ![is_elf_format] {
+ return
+}
+
+# The following tests require running the executable generated by ld.
+if ![isnative] {
+ return
+}
+
+# Check if compiler works
+if { [which $CC] == 0 } {
+ return
+}
+
+set build_tests {
+ {"Build libwrap1a.so"
+ "-shared" "-fPIC"
+ {wrap1a.c} {} "libwrap1a.so"}
+ {"Build libwrap1b.so"
+ "-shared tmpdir/libwrap1a.so" "-fPIC"
+ {wrap1b.c} {} "libwrap1b.so"}
+}
+
+set run_tests {
+ {"Run with libwrap1a.so and libwrap1b.so"
+ "--wrap par tmpdir/libwrap1a.so tmpdir/libwrap1b.so" ""
+ {wrap1.c} "wrap1" "wrap1.out"}
+ {"Run with libwrap1b.so and libwrap1a.so"
+ "--wrap par tmpdir/libwrap1b.so tmpdir/libwrap1a.so" ""
+ {wrap1.c} "wrap1" "wrap1.out"}
+}
+
+run_cc_link_tests $build_tests
+run_ld_link_exec_tests [] $run_tests
diff --git a/binutils-2.21/ld/testsuite/ld-elf/wrap1.c b/binutils-2.21/ld/testsuite/ld-elf/wrap1.c
new file mode 100644
index 0000000..1ff250e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/wrap1.c
@@ -0,0 +1,8 @@
+extern void par (void);
+
+int
+main (void)
+{
+ par ();
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/wrap1.out b/binutils-2.21/ld/testsuite/ld-elf/wrap1.out
new file mode 100644
index 0000000..7c1938f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/wrap1.out
@@ -0,0 +1,3 @@
+__wrap_par
+__real_par
+par
diff --git a/binutils-2.21/ld/testsuite/ld-elf/wrap1a.c b/binutils-2.21/ld/testsuite/ld-elf/wrap1a.c
new file mode 100644
index 0000000..75c94e0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/wrap1a.c
@@ -0,0 +1,6 @@
+#include <stdio.h>
+
+void par (void)
+{
+ printf ("par\n");
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elf/wrap1b.c b/binutils-2.21/ld/testsuite/ld-elf/wrap1b.c
new file mode 100644
index 0000000..abd39aa
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elf/wrap1b.c
@@ -0,0 +1,16 @@
+#include <stdio.h>
+
+extern void par (void);
+
+void __real_par (void)
+{
+ printf ("__real_par \n");
+ par ();
+}
+
+void
+__wrap_par (void)
+{
+ printf ("__wrap_par \n");
+ __real_par ();
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfcomm/common1a.c b/binutils-2.21/ld/testsuite/ld-elfcomm/common1a.c
new file mode 100644
index 0000000..eb8fbef
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfcomm/common1a.c
@@ -0,0 +1,2 @@
+char foo1 [2] __attribute__((aligned(64)));
+char foo2 [2] __attribute__((aligned(128)));
diff --git a/binutils-2.21/ld/testsuite/ld-elfcomm/common1b.c b/binutils-2.21/ld/testsuite/ld-elfcomm/common1b.c
new file mode 100644
index 0000000..a375c90
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfcomm/common1b.c
@@ -0,0 +1,7 @@
+static
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)
+ __attribute__((__used__))
+#endif /* __GNUC__ */
+ char dummy1 = 'X';
+char foo1 [] = "Aligned at odd byte.";
+char foo2 [4];
diff --git a/binutils-2.21/ld/testsuite/ld-elfcomm/elfcomm.exp b/binutils-2.21/ld/testsuite/ld-elfcomm/elfcomm.exp
new file mode 100644
index 0000000..e45c6b1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfcomm/elfcomm.exp
@@ -0,0 +1,269 @@
+# Expect script for common symbol tests
+# Copyright 2003, 2005, 2006, 2007, 2008, 2009
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by H.J. Lu (hjl@gnu.org)
+#
+
+# Make sure that ld correctly handles common symbols in ELF.
+
+# This test can only be run on ELF platforms.
+if ![is_elf_format] {
+ return
+}
+
+# hpux assembly is weird
+if [istarget "hppa*-*-hpux*"] {
+ return
+}
+
+proc test_sort_common {} {
+ global exec_output
+ global objdump
+ global srcdir
+ global subdir
+ global as
+ global ld
+
+ set test "--sort-common (descending)"
+
+ verbose "Check to see that --sort-common sorts in descending alignment"
+
+ # We do not run the sort common tests for the DLX target because we know that the linker
+ # will seg-fault. The built-in DLX linker script requires that there be something in the
+ # .text section and our sort-common.s file does not provide anything.
+ if [istarget dlx-*-*] {
+ untested "$test"
+ return 0
+ }
+
+ if { ![ld_assemble $as $srcdir/$subdir/sort-common.s tmpdir/sort-common.o] } {
+ unresolved "$test"
+ return 0
+ }
+
+ if { ![ld_simple_link $ld tmpdir/sort-common.dx "--sort-common=descending tmpdir/sort-common.o"] } {
+ fail "$test"
+ return 0
+ }
+
+ send_log "$objdump --syms tmpdir/sort-common.dx | grep var | sort\n"
+ set exec_output [run_host_cmd "$objdump" "--syms tmpdir/sort-common.dx | grep var | sort"]
+
+ # Don't know why, but the CR ports fail this test.
+ setup_xfail "cr16-*-*" "crx-*-*"
+
+ # Note: The second regexp is for targets which put small commons in a .sbss
+ # section and large commons in a .bss section.
+ if { ![regexp ".*var_16.*var_8.*var_4.*var_2.*var_1.*" $exec_output]
+ && ![regexp ".*sbss.*var_8.*var_4.*var_2.*var_1.*bss.*var_16.*" $exec_output] } {
+ fail $test
+ } else {
+ pass $test
+ }
+
+ set test "--sort-common (ascending)"
+
+ verbose "Check to see that --sort-common=ascending sorts in ascending alignment"
+
+ if { ![ld_simple_link $ld tmpdir/sort-common.ax "--sort-common=ascending tmpdir/sort-common.o"] } {
+ fail "$test"
+ return 0
+ }
+
+ send_log "$objdump --syms tmpdir/sort-common.ax | grep var | sort\n"
+ set exec_output [run_host_cmd "$objdump" "--syms tmpdir/sort-common.ax | grep var | sort"]
+
+ if {![regexp ".*var_1.*var_2.*var_4.*var_8.*var_16.*" $exec_output]} {
+ fail $test
+ return 0
+ }
+
+ pass $test
+ return 1
+}
+
+test_sort_common
+
+set test1 "size/aligment change of common symbols"
+set test1w1 "$test1 (warning 1)"
+set test1w2 "$test1 (warning 2)"
+set test1c1 "$test1 (change 1)"
+set test1c2 "$test1 (change 2)"
+
+if { ![is_remote host] && [which $CC] == 0 } {
+ untested $test1w1
+ untested $test1w2
+ untested $test1c1
+ untested $test1c2
+ return
+}
+if { [istarget score-*-*] } {
+ untested $test1w1
+ untested $test1w2
+ untested $test1c1
+ untested $test1c2
+ return
+}
+
+proc dump_common1 { testname } {
+ global exec_output
+ global READELF
+
+ send_log "$READELF --syms tmpdir/common1.o | grep foo\n"
+ set exec_output [run_host_cmd "$READELF" "--syms tmpdir/common1.o | grep foo"]
+
+ if { ![regexp "(\[ \]*)(\[0-9\]+):(\[ \]*)(\[0\]*)80(\[ \]+)4(\[ \]+)(COMMON|OBJECT)(\[ \]+)GLOBAL(\[ \]+)DEFAULT(\[ \]+)(PRC\\\[0xff03\\\]|COM|SCOM)(\[ \]+)_?foo2" $exec_output]
+ || ![regexp "(\[ \]*)(\[0-9\]+):(\[ \]*)(\[0-9\]+)(\[ \]+)21(\[ \]+)OBJECT(\[ \]+)GLOBAL(\[ \]+)DEFAULT(\[ \]+)(\[0-9\]+)(\[ \]+)_?foo1" $exec_output] } {
+ verbose $exec_output
+ fail $testname
+ return 0
+ }
+
+ return 1
+}
+
+proc stt_common_test { options testname } {
+ global exec_output
+ global READELF
+ global ld
+
+ set options "$options tmpdir/common1a.o"
+
+ if { ! [ld_simple_link $ld tmpdir/common.exe $options] } {
+ unresolved $testname
+ return 0
+ }
+
+ send_log "$READELF --syms tmpdir/common.exe | grep foo\n"
+ set exec_output [run_host_cmd "$READELF" "--syms tmpdir/common.exe | grep foo"]
+
+ if {![regexp "(\[ \]*)(\[0-9\]+):(\[ \]*)(\[0-9\]+)(\[ \]+)(\[0-9\]+)(\[ \]+)COMMON(\[ \]+)GLOBAL(\[ \]+)DEFAULT(\[ \]+)(\[0-9\]+)(\[ \]+)_?foo2" $exec_output] } {
+ fail $testname
+ return 0
+ }
+
+ pass $testname
+ return 1
+}
+
+# Check to see if the assembler is generating symbols with the STT_COMMON type.
+proc assembler_generates_commons {} {
+ global exec_output
+ global READELF
+
+ verbose "Check to see if STT_COMMON symbols are being generated:"
+ set exec_output [run_host_cmd "$READELF" "--syms tmpdir/common1a.o | grep foo"]
+
+ if { ![regexp "(\[ \]*)(\[0-9\]+):(\[ \]*)(\[0\]*)80(\[ \]+).(\[ \]+)COMMON(\[ \]+)GLOBAL(\[ \]+)DEFAULT(\[ \]+)(PRC\\\[0xff03\\\]|COM|SCOM)(\[ \]+)_?foo2" $exec_output] } {
+ verbose "STT_COMMON not generated"
+ return 0
+ }
+
+ verbose "STT_COMMON's are generated"
+ return 1
+}
+
+# Explicitly use "-fcommon" so that even if $CFLAGS includes
+# "-fno-common", these tests are compiled as expected.
+if { ![ld_compile "$CC $CFLAGS -fcommon" $srcdir/$subdir/common1a.c tmpdir/common1a.o]
+ || ![ld_compile "$CC $CFLAGS -fcommon" $srcdir/$subdir/common1b.c tmpdir/common1b.o] } {
+ unresolved $test1
+ return
+}
+
+global ld
+global link_output
+
+set options "-r tmpdir/common1a.o tmpdir/common1b.o"
+
+# SH64 targets needs an extra ld option for this test.
+if [istarget sh64*-*-*] {
+ if [istarget sh64*l*-*-*] {
+ set options "-mshlelf32 $options"
+ } else {
+ set options "-mshelf32 $options"
+ }
+}
+
+if { [ld_simple_link $ld tmpdir/common1.o $options] } {
+ unresolved $test1w1
+ return
+}
+
+# This test fails on MIPS because the backend sets type_change_ok.
+# The size change warning is suppressed.
+if {[istarget mips*-*-*]} {
+ if { ![regexp "Warning: alignment (\[0-9\]+) of symbol \`_?foo1\' in tmpdir/common1b.o is smaller than 64 in tmpdir/common1a.o" $link_output] } {
+ fail $test1w1
+ } else {
+ pass $test1w1
+ }
+} else {
+ if { ![regexp "Warning: alignment (\[0-9\]+) of symbol \`_?foo1\' in tmpdir/common1b.o is smaller than 64 in tmpdir/common1a.o" $link_output]
+ || ![regexp "Warning: size of symbol \`_?foo1\' changed from 2 in tmpdir/common1a.o to 21 in tmpdir/common1b.o" $link_output] } {
+ fail $test1w1
+ } else {
+ pass $test1w1
+ }
+}
+
+if { [dump_common1 $test1c1] } {
+ pass $test1c1
+}
+
+set options "-r tmpdir/common1b.o tmpdir/common1a.o"
+
+# SH64 targets needs an extra ld option for this test.
+if [istarget sh64*-*-*] {
+ if [istarget sh64*l*-*-*] {
+ set options "-mshlelf32 $options"
+ } else {
+ set options "-mshelf32 $options"
+ }
+}
+
+if { [ld_simple_link $ld tmpdir/common1.o $options] } {
+ unresolved $test1w2
+ return
+}
+
+if { ![regexp "Warning: alignment (\[0-9\]+) of symbol \`_?foo1\' in tmpdir/common1b.o is smaller than 64 in tmpdir/common1a.o" $link_output] } {
+ fail $test1w2
+} else {
+ pass $test1w2
+}
+
+if { [dump_common1 $test1c2] } {
+ pass $test1c2
+}
+
+#
+# The following tests are for when we are generating STT_COMMON symbols only.
+#
+
+if { ![assembler_generates_commons] } {
+ return
+}
+
+stt_common_test "-static -e 0" "static link of common symbols"
+stt_common_test "-shared" "shared link of common symbols"
+stt_common_test "-pie" "position independent link of common symbols"
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfcomm/sort-common.s b/binutils-2.21/ld/testsuite/ld-elfcomm/sort-common.s
new file mode 100644
index 0000000..478d73e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfcomm/sort-common.s
@@ -0,0 +1,6 @@
+ .comm var_1byte_align,1,1
+ .comm var_2byte_align,2,2
+ .comm var_4byte_align,4,4
+ .comm var_8byte_align,8,8
+ .comm var_16byte_align,16,16
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers.exp b/binutils-2.21/ld/testsuite/ld-elfvers/vers.exp
new file mode 100644
index 0000000..c4228ad
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers.exp
@@ -0,0 +1,1002 @@
+# Expect script for ld-version tests
+# Copyright 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+# 2009, 2010 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by Eric Youngdale (eric@andante.jic.com)
+
+#
+
+# This test can only be run if ld generates native executables.
+if ![isnative] then {return}
+
+# This test can only be run on a couple of ELF platforms.
+# Square bracket expressions seem to confuse istarget.
+# This is similar to the test that is used in ld-shared, BTW.
+if { ![istarget hppa*64*-*-hpux*] \
+ && ![istarget hppa*-*-linux*] \
+ && ![istarget i?86-*-sysv4*] \
+ && ![istarget i?86-*-unixware] \
+ && ![istarget i?86-*-elf*] \
+ && ![istarget i?86-*-linux*] \
+ && ![istarget ia64-*-elf*] \
+ && ![istarget ia64-*-linux*] \
+ && ![istarget m68k-*-linux*] \
+ && ![istarget mips*-*-irix5*] \
+ && ![istarget powerpc*-*-elf*] \
+ && ![istarget powerpc*-*-linux*] \
+ && ![istarget powerpc*-*-sysv4*] \
+ && ![istarget sparc*-*-elf] \
+ && ![istarget sparc*-*-solaris2*] \
+ && ![istarget sparc*-*-linux*] \
+ && ![istarget arm*-*-linux*] \
+ && ![istarget mips*-*-linux*] \
+ && ![istarget alpha*-*-linux*] \
+ && ![istarget s390*-*-linux*] \
+ && ![istarget sh\[34\]*-*-linux*] \
+ && ![istarget x86_64-*-linux*] } {
+ return
+}
+
+if { [istarget i?86-*-linux*aout*] \
+ || [istarget i?86-*-linux*oldld*] \
+ || [istarget m68k-*-linux*aout*] } {
+ return
+}
+
+if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
+ return
+}
+
+set diff diff
+set tmpdir tmpdir
+set VOBJDUMP_FLAGS --private-headers
+set DOBJDUMP_FLAGS --dynamic-syms
+set SOBJDUMP_FLAGS --syms
+set shared "--shared --no-undefined-version"
+set script --version-script
+
+if [istarget mips*-*-*] {
+ set picflag ""
+} else {
+ # Unfortunately, the gcc argument is -fpic and the cc argument is
+ # -KPIC. We have to try both.
+ set picflag "-fpic"
+ send_log "$CC $picflag\n"
+ verbose "$CC $picflag"
+ catch "exec $CC $picflag" exec_output
+ send_log "$exec_output\n"
+ verbose "--" "$exec_output"
+ if { [string match "*illegal option*" $exec_output] \
+ || [string match "*option ignored*" $exec_output] \
+ || [string match "*unrecognized option*" $exec_output] \
+ || [string match "*passed to ld*" $exec_output] } {
+ if [istarget *-*-sunos4*] {
+ set picflag "-pic"
+ } else {
+ set picflag "-KPIC"
+ }
+ }
+}
+
+case $target_triplet in {
+ { ia64-*-* } { set as_options "-x" }
+ { sparc-*-* } { set as_options "-Av9a" }
+ default { set as_options "" }
+}
+
+proc test_ar { test lib object expect } {
+ global ar
+ global nm
+ global tmpdir
+ global srcdir
+ global subdir
+ global diff
+
+ verbose -log "$ar -cr $tmpdir/$lib $tmpdir/$object"
+ catch "exec $ar -cr $tmpdir/$lib $tmpdir/$object" exec_output
+ set exec_output [prune_warnings $exec_output]
+ if ![string match "" $exec_output] {
+ verbose -log "$exec_output"
+ unresolved "$test"
+ return
+ }
+
+ verbose -log "$nm --print-armap $tmpdir/$lib | grep \" in \" | egrep \"VERS\\|bar\\|foo\" | sort > $tmpdir/nm.out"
+
+ catch "exec $nm --print-armap $tmpdir/$lib | grep \\\ in\\\ | egrep VERS\\\|bar\\\|foo | sort > $tmpdir/nm.out" exec_output
+ if [string match "" $exec_output] then {
+ catch "exec sort $srcdir/$subdir/$expect | $diff $tmpdir/nm.out -" exec_output
+ set exec_output [prune_warnings $exec_output]
+ if [string match "" $exec_output] then {
+ pass $test
+ return
+ } else {
+ verbose -log "$exec_output"
+ fail "$test"
+ return
+ }
+ } else {
+ verbose -log "$exec_output"
+ fail "$test"
+ }
+}
+
+#
+# objdump_emptysymstuff
+# Check non-dynamic symbols and make sure there are none with '@'.
+#
+proc objdump_emptysymstuff { objdump object } {
+ global SOBJDUMP_FLAGS
+ global version_output
+ global diff
+
+ if ![info exists SOBJDUMP_FLAGS] { set SOBJDUMP_FLAGS "" }
+
+ verbose -log "$objdump $SOBJDUMP_FLAGS $object | sed -n /\@/p"
+
+ catch "exec $objdump $SOBJDUMP_FLAGS $object | sed -n /\@/p" exec_output
+ set exec_output [prune_warnings $exec_output]
+ if [string match "" $exec_output] then {
+# We shouldn't get anything here.
+ return 1
+ } else {
+# it is not normal to come here - we have no output to compare.
+ verbose -log "$exec_output"
+ verbose -log "objdump_emptysymstuff: did not expect any output from objdump"
+ return 0
+ }
+
+}
+
+#
+# objdump_emptydynsymstuff
+# Check dynamic symbols and make sure there are none with '@'.
+#
+proc objdump_emptydynsymstuff { objdump object } {
+ global DOBJDUMP_FLAGS
+ global version_output
+ global diff
+
+ if ![info exists VOBJDUMP_FLAGS] { set VOBJDUMP_FLAGS "" }
+
+ verbose -log "$objdump $DOBJDUMP_FLAGS $object | sed -n /VERS/p\\\;/show/p"
+
+ catch "exec $objdump $DOBJDUMP_FLAGS $object | sed -n /VERS/p\\\;/show/p" exec_output
+ set exec_output [prune_warnings $exec_output]
+ if [string match "" $exec_output] then {
+# We shouldn't get anything here.
+ return 1
+ } else { if [string match "*objdump: *: not a dynamic object" $exec_output] then {
+ return 1
+ } else {
+# it is not normal to come here - we have no output to compare.
+ verbose -log "$exec_output"
+ verbose -log "objdump_emptydynsymstuff: did not expect any output from objdump"
+ return 0
+ } }
+}
+
+#
+# objdump_emptyverstuff
+# Make sure there is no version information
+#
+proc objdump_emptyverstuff { objdump object } {
+ global VOBJDUMP_FLAGS
+ global version_output
+ global diff
+ global tmpdir
+
+ if {[which $objdump] == 0} then {
+ perror "$objdump does not exist"
+ return 0
+ }
+
+ if ![info exists VOBJDUMP_FLAGS] { set VOBJDUMP_FLAGS "" }
+
+ verbose -log "$objdump $VOBJDUMP_FLAGS $object | sed -n /Version/,\\\$p > $tmpdir/objdump.out"
+
+ catch "exec $objdump $VOBJDUMP_FLAGS $object | sed -n /Version/,\\\$p" exec_output
+ set exec_output [prune_warnings $exec_output]
+ if [string match "" $exec_output] then {
+# it is normal to fail here - we have no output to compare.
+ return 1
+ } else { if { [string match "*libc*" $exec_output] } then {
+# this probably means that there is version information in libc, so we
+# can't really perform this test.
+ return 1
+ } else {
+ verbose -log "$exec_output"
+ verbose -log "objdump_emptyverstuff: did not expect any output from objdump"
+ return 0
+ } }
+
+}
+
+#
+# objdump_symstuff
+# Dump non-dynamic symbol stuff and make sure that it is sane.
+#
+proc objdump_symstuff { objdump object expectfile } {
+ global SOBJDUMP_FLAGS
+ global version_output
+ global diff
+ global tmpdir
+
+ if ![info exists SOBJDUMP_FLAGS] { set SOBJDUMP_FLAGS "" }
+
+ verbose -log "$objdump $SOBJDUMP_FLAGS $object | grep \@ | sort > $tmpdir/objdump.out"
+
+ catch "exec $objdump $SOBJDUMP_FLAGS $object | grep \@ | sort > $tmpdir/objdump.out" exec_output
+ set exec_output [prune_warnings $exec_output]
+ if [string match "" $exec_output] then {
+
+# Now do a line-by-line comparison to effectively diff the darned things
+# The stuff coming from the expectfile is actually a regex, so we can
+# skip over the actual addresses and so forth. This is currently very
+# simpleminded - it expects a one-to-one correspondence in terms of line
+# numbers.
+
+ if [file exists $expectfile] then {
+ set file_a [open $expectfile r]
+ } else {
+ perror "$expectfile doesn't exist"
+ return 0
+ }
+
+ if [file exists $tmpdir/objdump.out] then {
+ set file_b [open $tmpdir/objdump.out r]
+ } else {
+ perror "$tmpdir/objdump.out doesn't exist"
+ return 0
+ }
+
+ verbose "# Diff'ing: $expectfile $tmpdir/objdump.out" 2
+
+ set eof -1
+ set differences 0
+
+ while { [gets $file_a line] != $eof } {
+ if [regexp "^#.*$" $line] then {
+ continue
+ } else {
+ lappend list_a $line
+ }
+ }
+ close $file_a
+
+ while { [gets $file_b line] != $eof } {
+ if [regexp "^#.*$" $line] then {
+ continue
+ } else {
+ lappend list_b $line
+ }
+ }
+ close $file_b
+
+ for { set i 0 } { $i < [llength $list_a] } { incr i } {
+ set line_a [lindex $list_a $i]
+ set line_b [lindex $list_b $i]
+
+
+ verbose "\t$expectfile: $i: $line_a" 3
+ verbose "\t/tmp/objdump.out: $i: $line_b" 3
+ if [regexp $line_a $line_b] then {
+ continue
+ } else {
+ verbose -log "\t$expectfile: $i: $line_a"
+ verbose -log "\t$tmpdir/objdump.out: $i: $line_b"
+
+ return 0
+ }
+ }
+
+ if { [llength $list_a] != [llength $list_b] } {
+ verbose -log "Line count"
+ return 0
+ }
+
+ if $differences<1 then {
+ return 1
+ }
+
+ return 0
+ } else {
+ verbose -log "$exec_output"
+ return 0
+ }
+
+}
+
+#
+# objdump_dymsymstuff
+# Dump dynamic symbol stuff and make sure that it is sane.
+#
+proc objdump_dynsymstuff { objdump object expectfile } {
+ global DOBJDUMP_FLAGS
+ global version_output
+ global diff
+ global tmpdir
+
+ if ![info exists DOBJDUMP_FLAGS] { set DOBJDUMP_FLAGS "" }
+
+ verbose -log "$objdump $DOBJDUMP_FLAGS $object | sed -n /VERS/p\\\;/show/p | sort | uniq > $tmpdir/objdump.out"
+
+ catch "exec $objdump $DOBJDUMP_FLAGS $object | sed -n /VERS/p\\\;/show/p | sort | uniq > $tmpdir/objdump.out" exec_output
+ set exec_output [prune_warnings $exec_output]
+ if [string match "" $exec_output] then {
+
+# Now do a line-by-line comparison to effectively diff the darned things
+# The stuff coming from the expectfile is actually a regex, so we can
+# skip over the actual addresses and so forth. This is currently very
+# simpleminded - it expects a one-to-one correspondence in terms of line
+# numbers.
+
+ if [file exists $expectfile] then {
+ set file_a [open $expectfile r]
+ } else {
+ warning "$expectfile doesn't exist"
+ return 0
+ }
+
+ if [file exists $tmpdir/objdump.out] then {
+ set file_b [open $tmpdir/objdump.out r]
+ } else {
+ fail "$tmpdir/objdump.out doesn't exist"
+ return 0
+ }
+
+ verbose "# Diff'ing: $expectfile $tmpdir/objdump.out" 2
+
+ set eof -1
+ set differences 0
+
+ while { [gets $file_a line] != $eof } {
+ if [regexp "^#.*$" $line] then {
+ continue
+ } else {
+ lappend list_a $line
+ }
+ }
+ close $file_a
+
+ while { [gets $file_b line] != $eof } {
+ if [regexp "^#.*$" $line] then {
+ continue
+ } else {
+ lappend list_b $line
+ }
+ }
+ close $file_b
+
+ # Support empty files.
+ if { ![info exists list_a] && ![info exists list_b] } then {
+ return 1
+ }
+
+ for { set i 0 } { $i < [llength $list_b] } { incr i } {
+ set line_b [lindex $list_b $i]
+
+# The tests are rigged so that we should never export a symbol with the
+# word 'hide' in it. Thus we just search for it, and bail if we find it.
+ if [regexp "hide" $line_b] then {
+ verbose -log "\t$tmpdir/objdump.out: $i: $line_b"
+
+ return 0
+ }
+
+ verbose "\t$expectfile: $i: $line_b" 3
+
+ # We can't assume that the sort is consistent across
+ # systems, so we must check each regexp. When we find a
+ # regexp, we null it out, so we don't match it twice.
+ for { set j 0 } { $j < [llength $list_a] } { incr j } {
+ set line_a [lindex $list_a $j]
+
+ if [regexp $line_a $line_b] then {
+ lreplace $list_a $j $j "CAN NOT MATCH"
+ break
+ }
+ }
+
+ if { $j >= [llength $list_a] } {
+ verbose -log "\t$tmpdir/objdump.out: $i: $line_b"
+
+ return 0
+ }
+ }
+
+ if { [llength $list_a] != [llength $list_b] } {
+ verbose -log "Line count"
+ return 0
+ }
+
+ if $differences<1 then {
+ return 1
+ }
+
+ return 0
+ } else {
+ verbose -log "$exec_output"
+ return 0
+ }
+
+}
+
+#
+# objdump_versionstuff
+# Dump version definitions/references and make sure that it is sane.
+#
+proc objdump_versionstuff { objdump object expectfile } {
+ global VOBJDUMP_FLAGS
+ global version_output
+ global diff
+ global tmpdir
+
+ if {[which $objdump] == 0} then {
+ perror "$objdump does not exist"
+ return 0
+ }
+
+ if ![info exists VOBJDUMP_FLAGS] { set VOBJDUMP_FLAGS "" }
+
+ verbose -log "$objdump $VOBJDUMP_FLAGS $object | sed -n /Version/,\\\$p > $tmpdir/objdump.out"
+
+ catch "exec $objdump $VOBJDUMP_FLAGS $object | sed -n /Version/,\\\$p > $tmpdir/objdump.out" exec_output
+ set exec_output [prune_warnings $exec_output]
+ if [string match "" $exec_output] then {
+
+ # It's OK if there are extra lines in the actual output; they
+ # may come from version information in libc. We require that
+ # every line in EXPECTFILE appear in the output in any order.
+
+ set f2 [open $expectfile r]
+ while { [gets $f2 l2] != -1 } {
+ if { ![regexp "^#.*$" $l2] } then {
+ set f1 [open $tmpdir/objdump.out r]
+ while { [gets $f1 l1] != -1 } {
+ if { [string match $l2 $l1] } then {
+ break
+ }
+ }
+ close $f1
+
+ if { ![string match $l2 $l1] } then {
+ verbose -log "Did not find \"$l2\""
+ set f1 [open $tmpdir/objdump.out r]
+ while { [gets $f1 l1] != -1 } {
+ verbose -log $l1
+ }
+ close $f1
+ close $f2
+ return 0
+ }
+ }
+ }
+ close $f2
+ return 1
+ } else {
+ verbose -log "$exec_output"
+ return 0
+ }
+}
+
+proc build_binary { shared pic test source libname other mapfile verexp versymexp symexp ldargs } {
+ global ld
+ global srcdir
+ global subdir
+ global exec_output
+ global host_triplet
+ global tmpdir
+ global as
+ global as_options
+ global objdump
+ global CC
+ global CFLAGS
+ global script
+
+ if ![ld_compile "$CC -S $pic $CFLAGS" $srcdir/$subdir/$source $tmpdir/$libname.s] {
+ unresolved "$test"
+ return
+ }
+
+ if ![ld_assemble $as "$as_options $tmpdir/$libname.s" $tmpdir/$libname.o ] {
+ unresolved "$test"
+ return
+ }
+
+ set other_lib ""
+ if ![string match "" $other] then {
+ foreach o $other {
+ set other_lib "$other_lib $tmpdir/$o"
+ }
+ }
+
+ if [string match "" $mapfile] then {
+ set script_arg ""
+ } else {
+ set script_arg "$script $srcdir/$subdir/$mapfile"
+ }
+
+ if {![ld_simple_link $ld $tmpdir/$libname.so "$shared $tmpdir/$libname.o $other_lib $script_arg $ldargs"]} {
+ fail "$test"
+ return
+ }
+
+ if {![objdump_versionstuff $objdump $tmpdir/$libname.so $srcdir/$subdir/$verexp ]} {
+ fail "$test"
+ return
+ }
+
+ if {![objdump_dynsymstuff $objdump $tmpdir/$libname.so $srcdir/$subdir/$versymexp ]} {
+ fail "$test"
+ return
+ }
+
+ if [string match "" $symexp] then {
+ if {![objdump_emptysymstuff $objdump $tmpdir/$libname.o ]} {
+ fail "$test"
+ return
+ }
+ } else {
+ if {![objdump_symstuff $objdump $tmpdir/$libname.o $srcdir/$subdir/$symexp ]} {
+ fail "$test"
+ return
+ }
+ }
+
+ pass $test
+
+}
+
+proc build_executable { test source libname other mapfile verexp versymexp symexp } {
+ build_binary "" "" $test $source $libname $other $mapfile $verexp $versymexp $symexp ""
+}
+
+proc build_vers_lib_no_pic { test source libname other mapfile verexp versymexp symexp } {
+ global shared
+ build_binary $shared "" $test $source $libname $other $mapfile $verexp $versymexp $symexp ""
+}
+
+proc build_vers_lib_pic { test source libname other mapfile verexp versymexp symexp } {
+ global picflag
+ global shared
+ build_binary $shared $picflag $test $source $libname $other $mapfile $verexp $versymexp $symexp ""
+}
+
+proc build_vers_lib_pic_flags { test source libname other mapfile verexp versymexp symexp ldargs } {
+ global picflag
+ global shared
+ build_binary $shared $picflag $test $source $libname $other $mapfile $verexp $versymexp $symexp $ldargs
+}
+
+proc test_ldfail { test flag source execname other mapfile whyfail } {
+ global srcdir
+ global subdir
+ global exec_output
+ global host_triplet
+ global tmpdir
+ global as
+ global as_options
+ global objdump
+ global CC
+ global CFLAGS
+ global script
+
+ if [string match "" $other] then {
+ set other_lib ""
+ } else {
+ set other_lib $tmpdir/$other
+ }
+
+ if ![ld_compile "$CC -S $flag $CFLAGS" $srcdir/$subdir/$source $tmpdir/$execname.s] {
+ unresolved "$test"
+ return
+ }
+
+ if ![ld_assemble $as "$as_options $tmpdir/$execname.s" $tmpdir/$execname.o ] {
+ unresolved "$test"
+ return
+ }
+
+ verbose -log "This link should fail because of $whyfail"
+
+ if [string match "" $mapfile] then {
+ set script_arg ""
+ } else {
+ set script_arg "-Wl,$script $srcdir/$subdir/$mapfile"
+ }
+
+ if {![ld_simple_link $CC $tmpdir/$execname "$tmpdir/$execname.o $other_lib $script_arg"]} {
+ pass "$test"
+ return
+ }
+ fail "$test"
+}
+
+proc test_asfail { test flag source execname whyfail } {
+ global srcdir
+ global subdir
+ global tmpdir
+ global as
+ global CC
+ global CFLAGS
+
+ if ![ld_compile "$CC -S $flag $CFLAGS" $srcdir/$subdir/$source $tmpdir/$execname.s] {
+ unresolved "$test"
+ return
+ }
+
+ verbose -log "This assemble should fail because of $whyfail"
+ catch "exec $as -o $tmpdir/$execname.o $tmpdir/$execname.s" exec_output
+ set exec_output [prune_warnings $exec_output]
+ if [string match "" $exec_output] then {
+ fail "$test"
+ return
+ }
+ verbose -log "$exec_output"
+ pass "$test"
+}
+
+proc test_strip_vers_lib { test srclib libname verexp versymexp } {
+ global strip
+ global srcdir
+ global subdir
+ global exec_output
+ global host_triplet
+ global tmpdir
+ global objdump
+
+ verbose -log "cp $tmpdir/$srclib $tmpdir/$libname.so"
+ exec cp $tmpdir/$srclib $tmpdir/$libname.so
+
+ verbose -log "$strip $tmpdir/$libname.so"
+ catch "exec $strip $tmpdir/$libname.so" exec_output
+ if [string match "" $exec_output] then {
+
+# If strip went OK, then run the usual tests on the thing to make sure that
+# it is sane.
+ if {![objdump_versionstuff $objdump $tmpdir/$libname.so $srcdir/$subdir/$verexp ]} {
+ fail "$test"
+ return
+ }
+
+ if {![objdump_dynsymstuff $objdump $tmpdir/$libname.so $srcdir/$subdir/$versymexp ]} {
+ fail "$test"
+ return
+ }
+
+ } else {
+ verbose -log "$exec_output"
+ fail "$test"
+ return
+ }
+ pass $test
+}
+
+
+proc build_exec { test source execname flags solibname verexp versymexp symexp } {
+ global srcdir
+ global subdir
+ global exec_output
+ global host_triplet
+ global tmpdir
+ global as
+ global as_options
+ global objdump
+ global CC
+ global CFLAGS
+
+ set shared "--shared --no-undefined-version"
+ set script --version-script
+ if ![ld_compile "$CC -S $CFLAGS" $srcdir/$subdir/$source $tmpdir/$execname.s] {
+ unresolved "$test"
+ return
+ }
+
+ if ![ld_assemble $as "$as_options $tmpdir/$execname.s" $tmpdir/$execname.o ] {
+ unresolved "$test"
+ return
+ }
+
+ if [string match "" $solibname] then {
+ set solibname_lib ""
+ } else {
+ set solibname_lib $tmpdir/$solibname
+ }
+
+ if {![ld_simple_link $CC $tmpdir/$execname "$flags $tmpdir/$execname.o $solibname_lib"]} {
+ fail "$test"
+ return
+ }
+
+ if [string match "" $verexp] then {
+#
+# Make sure we get nothing back.
+#
+ if {![objdump_emptyverstuff $objdump $tmpdir/$execname ]} {
+ fail "$test"
+ return
+ }
+ } else {
+ if {![objdump_versionstuff $objdump $tmpdir/$execname $srcdir/$subdir/$verexp ]} {
+ fail "$test"
+ return
+ }
+ }
+
+ if [string match "" $versymexp] then {
+ if {![objdump_emptydynsymstuff $objdump $tmpdir/$execname ]} {
+ fail "$test"
+ return
+ }
+ } else {
+ if {![objdump_dynsymstuff $objdump $tmpdir/$execname $srcdir/$subdir/$versymexp ]} {
+ fail "$test"
+ return
+ }
+ }
+
+ if [string match "" $symexp] then {
+ if {![objdump_emptysymstuff $objdump $tmpdir/$execname.o ]} {
+ fail "$test"
+ return
+ }
+ } else {
+ if {![objdump_symstuff $objdump $tmpdir/$execname.o $srcdir/$subdir/$symexp ]} {
+ fail "$test"
+ return
+ }
+ }
+
+ pass $test
+}
+
+if [istarget x86_64-*-linux*] {
+ # x86_64 doesn't like non-pic shared libraries
+ set pic "yes"
+} else {
+ set pic "no"
+}
+
+#
+# Basic test - build a library with versioned symbols.
+#
+build_vers_lib_pic "vers1" vers1.c vers1 "" vers1.map vers1.ver vers1.dsym vers1.sym
+
+
+#
+# Test #2 - build a library, and link it against the library we built in step
+# 1.
+#
+build_vers_lib_pic "vers2" vers2.c vers2 vers1.so vers2.map vers2.ver vers2.dsym ""
+
+#
+# Test #3 - build an executable, and link it against vers1.so.
+#
+build_exec "vers3" vers3.c vers3 "" vers1.so vers3.ver vers3.dsym ""
+
+#
+# Test #4 - Make sure a version implicitly defined in an executable
+# causes a version node to be created. Verify this both with and without
+# --export-dynamic.
+#
+
+# This test fails on MIPS. On the MIPS we must put foo in the dynamic
+# symbol table, which the test does not expect.
+setup_xfail "mips*-*-*"
+build_exec "vers4" vers4.c vers4 "" "" "" "" vers4.sym
+
+build_exec "vers4a" vers4.c vers4a "-export-dynamic" "" vers4a.ver vers4a.dsym vers4a.sym
+
+# Verify that --no-export-dynamic undoes the effect of --export-dynamic.
+setup_xfail "mips*-*-*"
+build_exec "vers4b" vers4.c vers4b "-export-dynamic -Wl,--no-export-dynamic" "" "" "" vers4.sym
+
+
+#
+# Try multiple definitions foo@BAR and foo@@BAR and make sure the linker
+# complains.
+#
+test_ldfail "vers5" "" vers5.c vers5 "" "" "multiple definition of foo@VERS_1.2"
+
+#
+#
+# Now build a test that should reference a bunch of versioned symbols.
+# All of them should be correctly referenced.
+#
+build_exec "vers6" vers6.c vers6 "" vers1.so vers6.ver vers6.dsym vers6.sym
+
+#
+# Another test to verify that something made local via 'local' is truly not
+# accessible.
+#
+if [string match "yes" $pic] then {
+ xfail "vers7a"
+ xfail "vers7"
+} else {
+ build_vers_lib_no_pic "vers7a" vers7a.c vers7a "" vers7.map vers7a.ver vers7a.dsym vers7a.sym
+
+ test_ldfail "vers7" "" vers7.c vers7 vers7a.so "" "undefined reference to hide_a"
+}
+
+
+#
+# This test is designed to verify that we can pass a linker script on the
+# command line as if it were a normal .o file.
+#
+catch "exec cp $srcdir/$subdir/vers8.map $tmpdir/" ignore_output
+build_vers_lib_pic "vers8" vers1.c vers8 vers8.map "" vers8.ver vers1.dsym vers1.sym
+
+#
+# This test tries to make sure that version references to versioned symbols
+# don't collide with default definitions with the same symbol.
+#
+build_exec "vers9" vers9.c vers9 "-export-dynamic" "" vers9.ver vers9.dsym vers9.sym
+
+
+#
+# Try and use a non-existant version node. The linker should fail with
+# an error message.
+#
+test_ldfail "vers10" "-DDO_TEST10" vers1.c vers10 "" "vers1.map --shared" "invalid version"
+
+#
+# Try and some things the assembler should complain about.
+#
+test_asfail "vers11" "-DDO_TEST11" vers1.c vers11 "no @ in symver"
+
+test_asfail "vers12" "-DDO_TEST12" vers1.c vers12 "extern version definition"
+
+#
+# Put a shared library in an archive library, and make sure the global
+# archive symbol table is sane.
+#
+test_ar "ar with versioned solib" vers13.a vers1.so vers13.asym
+
+#
+# Strip a shared library, and make sure we didn't screw something up in there.
+#
+test_strip_vers_lib "vers14" vers1.so vers14 vers1.ver vers1.dsym
+
+
+#
+# Build another test with some versioned symbols. Here we are going to
+# try and override something from the library, and we shouldn't get
+# any errors.
+#
+build_exec "vers15" vers15.c vers15 "" vers1.so vers15.ver vers15.dsym vers15.sym
+
+#
+# Test that when we override a versioned symbol from the library this
+# symbol appears in the dynamic symbol table of the executable.
+#
+build_vers_lib_pic "vers16a" vers16a.c vers16a "" vers16.map vers16a.ver vers16a.dsym ""
+build_exec "vers16" vers16.c vers16 "" vers16a.so "" vers16.dsym ""
+
+# Test a weak versioned symbol.
+build_vers_lib_pic "vers17" vers17.c vers17 "" vers17.map vers17.ver vers17.dsym ""
+build_vers_lib_pic "vers18" vers18.c vers18 vers17.so vers18.map vers18.ver vers18.dsym vers18.sym
+build_exec "vers19" vers19.c vers19 "-Wl,-rpath,." vers18.so vers19.ver vers19.dsym ""
+
+build_vers_lib_no_pic "vers20a" vers20.c vers20a "" vers20.map vers20a.ver vers20.dsym ""
+exec cp $tmpdir/vers20a.so $tmpdir/vers20b.so
+build_vers_lib_no_pic "vers20" vers20.c vers20 "vers20a.so vers20b.so" vers20.map vers20.ver vers20.dsym ""
+
+# Test .symver override.
+build_vers_lib_pic "vers21" vers21.c vers21 "" vers21.map vers21.ver vers21.dsym vers21.sym
+
+# Test moving default definition from one DSO to another.
+build_vers_lib_pic "vers22a" vers22a.c vers22a "" vers22.map vers22a.ver vers22a.dsym vers22a.sym
+build_vers_lib_pic "vers22b" vers22b.c vers22b "" vers22.map vers22b.ver vers22b.dsym ""
+build_vers_lib_pic "vers22" vers22.c vers22 "vers22a.so vers22b.so" "" vers22.ver vers22.dsym ""
+
+# Test versioned definitions in different files.
+if [string match "yes" $pic] then {
+ xfail "vers23a"
+ xfail "vers23b"
+ xfail "vers23c"
+ xfail "vers23d"
+ xfail "vers23"
+} else {
+ build_vers_lib_no_pic "vers23a" vers23a.c vers23a "" vers23a.map vers23a.ver vers23a.dsym vers23a.sym
+ build_vers_lib_no_pic "vers23b" vers23b.c vers23b "" vers23b.map vers23b.ver vers23b.dsym ""
+ build_vers_lib_no_pic "vers23c" vers23b.c vers23c "vers23a.so" vers23b.map vers23c.ver vers23b.dsym ""
+ build_exec "vers23d" vers23.c vers23d "tmpdir/vers23a.so tmpdir/vers23c.so" "" vers23.ver vers23d.dsym ""
+ build_exec "vers23" vers23.c vers23 "tmpdir/vers23a.so tmpdir/vers23b.o tmpdir/vers23b.so" "" vers23.ver vers23.dsym ""
+}
+
+# Test .symver x,x@VERS.0
+set as_pic_flags ""
+if [istarget sparc*-*-*] {
+ set as_pic_flags "-K PIC"
+}
+run_ld_link_tests [list "\"vers24a\"
+ \"-shared --version-script $srcdir/$subdir/vers24.map\"
+ \"$as_pic_flags $as_options\" {vers24a.c vers24b.c} { { readelf -Wrs vers24.rd } }
+ \"libvers24a.so\" \"-fpic\""]
+run_ld_link_tests [list "\"vers24b\"
+ \"-shared --version-script $srcdir/$subdir/vers24.map\"
+ \"$as_pic_flags $as_options\" {vers24b.c vers24a.c} { { readelf -Wrs vers24.rd } }
+ \"libvers24b.so\" \"-fpic\""]
+run_ld_link_tests [list "\"vers24c\"
+ \"-shared --version-script $srcdir/$subdir/vers24.map\"
+ \"$as_pic_flags $as_options\" {vers24c.c} { { readelf -Wrs vers24.rd } }
+ \"libvers24c.so\" \"-fpic\""]
+
+# Test versioned definition vs. normal definition in different files.
+if [string match "yes" $pic] then {
+ xfail "vers25a"
+ xfail "vers25b1"
+ xfail "vers25b2"
+} else {
+ build_vers_lib_no_pic "vers25a" vers25a.c vers25a "" vers25a.map vers25a.ver vers25a.dsym ""
+ build_vers_lib_no_pic "vers25b1" vers25b.c vers25b1 "vers25a.o vers25a.so" "" vers25b.ver vers25b.dsym ""
+ build_vers_lib_no_pic "vers25b2" vers25b.c vers25b2 "vers25a.so vers25a.o" "" vers25b.ver vers25b.dsym ""
+}
+
+build_vers_lib_pic "vers26a" vers26a.c vers26a "" vers26a.map vers26a.ver vers26a.dsym ""
+build_vers_lib_pic "vers26b1" vers26b.c vers26b1 "" "" vers26b.ver vers26b.dsym ""
+build_vers_lib_pic "vers26b2" vers26b.c vers26b2 "vers26a.so vers26b1.so vers26a.o" "" vers26b.ver vers26b.dsym ""
+if [string match "yes" $pic] then {
+ xfail "vers26b3"
+} else {
+ build_vers_lib_no_pic "vers26b3" vers26b.c vers26b3 "vers26a.so vers26b1.so vers26a.o" "" vers26b.ver vers26b.dsym ""
+}
+
+# Test versioned definition vs. hidden definition in different files.
+if [string match "yes" $pic] then {
+ xfail "vers27a"
+ xfail "vers27b"
+ xfail "vers27c1"
+ xfail "vers27c2"
+ xfail "vers27d1"
+ xfail "vers27d2"
+ xfail "vers27d3"
+ xfail "vers27d4"
+ xfail "vers27d5"
+} else {
+ build_vers_lib_no_pic "vers27a" vers27a.c vers27a "" vers27a.map vers27a.ver vers27a.dsym ""
+ build_vers_lib_no_pic "vers27b" vers27b.c vers27b "" "" vers27b.ver vers27b.dsym ""
+ build_vers_lib_no_pic "vers27c1" vers27c.c vers27c1 "vers27b.o vers27a.so" "" vers27c.ver vers27c.dsym ""
+ build_vers_lib_no_pic "vers27c2" vers27c.c vers27c2 "vers27a.so vers27b.o" "" vers27c.ver vers27c.dsym ""
+ build_vers_lib_pic "vers27d1" vers27d1.c vers27d1 "" vers27a.map vers27d.ver vers27d.dsym vers27d.sym
+ build_vers_lib_pic "vers27d2" vers27d2.c vers27d2 "" "" vers27b.ver vers27b.dsym ""
+ build_executable "vers27d3" vers27d3.c vers27d3 "vers27b.o vers27d2.so vers27d1.so" "" vers27b.ver vers27b.dsym ""
+ build_vers_lib_pic "vers27d4" vers27d2.c vers27d4 "vers27a.so" "" vers27d4.ver vers27d4.dsym ""
+ build_executable "vers27d5" vers27d3.c vers27d5 "vers27d4.so vers27b.o vers27a.so" "" vers27b.ver vers27b.dsym ""
+}
+
+# Test weak versioned definition vs. strong definition in different
+# files.
+build_vers_lib_pic "vers28a" vers28a.c vers28a "" "" vers28a.ver vers28a.dsym ""
+build_vers_lib_pic "vers28b" vers28b.c vers28b "" vers28b.map vers28b.ver vers28b.dsym ""
+build_vers_lib_pic "vers28c" vers28c.c vers28c "vers28b.so vers28a.so" "" vers28c.ver vers28c.dsym ""
+build_vers_lib_pic_flags "vers29" vers29.c vers29 "" "" vers29.ver vers29.dsym "" "--default-symver"
+
+# Test #30 - test handling of symbol names global, local and extern in the
+# version script.
+build_vers_lib_pic "vers30" vers30.c vers30 "" vers30.map vers30.ver vers30.dsym ""
+
+# Test #31 -- quoted strings in version sections.
+build_vers_lib_pic "vers31" vers31.c vers31 "" vers31.map vers31.ver vers31.dsym ""
+
+# Test #32 -- linker --defsym
+build_vers_lib_pic "vers32a" vers32a.c vers32a "" vers32.map vers32a.ver vers32a.dsym ""
+build_vers_lib_pic_flags "vers32b" vers32b.c vers32b "vers32a.so" vers32.map vers32b.ver vers32b.dsym "" "--defsym foo=0"
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers1.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers1.c
new file mode 100644
index 0000000..c27bc3b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers1.c
@@ -0,0 +1,101 @@
+/*
+ * Basic test of versioning. The idea with this is that we define
+ * a bunch of definitions of the same symbol, and we can theoretically
+ * then link applications against varying sets of these.
+ */
+const char * show_bar1 = "asdf";
+const char * show_bar2 = "asdf";
+
+extern int new2_foo();
+extern int bar33();
+
+int
+bar()
+{
+ return 3;
+}
+
+/*
+ * The 'hide' prefix is something so that we can automatically search the
+ * symbol table and verify that none of these symbols were actually exported.
+ */
+int
+hide_original_foo()
+{
+ return 1+bar();
+
+}
+
+int
+hide_old_foo()
+{
+ return 10+bar();
+
+}
+
+int
+hide_old_foo1()
+{
+ return 100+bar();
+
+}
+
+int
+hide_new_foo()
+{
+ return 1000+bar();
+
+}
+
+__asm__(".symver hide_original_foo,show_foo@");
+__asm__(".symver hide_old_foo,show_foo@VERS_1.1");
+__asm__(".symver hide_old_foo1,show_foo@VERS_1.2");
+__asm__(".symver hide_new_foo,show_foo@@VERS_2.0");
+
+
+
+#ifdef DO_TEST10
+/* In test 10, we try and define a non-existant version node. The linker
+ * should catch this and complain. */
+int
+hide_new_bogus_foo()
+{
+ return 1000+bar();
+
+}
+__asm__(".symver hide_new_bogus_foo,show_foo@VERS_2.2");
+#endif
+
+
+
+
+#ifdef DO_TEST11
+/*
+ * This test is designed to catch a couple of syntactic errors. The assembler
+ * should complain about both of the directives below.
+ */
+void
+xyzzz()
+{
+ new2_foo();
+ bar33();
+}
+
+__asm__(".symver new2_foo,fooVERS_2.0");
+__asm__(".symver bar33,bar@@VERS_2.0");
+#endif
+
+#ifdef DO_TEST12
+/*
+ * This test is designed to catch a couple of syntactic errors. The assembler
+ * should complain about both of the directives below.
+ */
+void
+xyzzz()
+{
+ new2_foo();
+ bar33();
+}
+
+__asm__(".symver bar33,bar@@VERS_2.0");
+#endif
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers1.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers1.dsym
new file mode 100644
index 0000000..d33ab20
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers1.dsym
@@ -0,0 +1,9 @@
+0+ g +DO \*ABS\* 0+ +VERS_1\.1 +VERS_1\.1
+0+ g +DO \*ABS\* 0+ +VERS_1\.2 +VERS_1\.2
+0+ g +DO \*ABS\* 0+ +VERS_2\.0 +VERS_2\.0
+[0-9a-f]+ g +DF (\.text|\.opd|\*ABS\*) [0-9a-f]+ \(Base\) +(0x[0-9a-f]+ )?show_foo
+[0-9a-f]+ g +DF (\.text|\.opd|\*ABS\*) [0-9a-f]+ \(VERS_1\.1\) +(0x[0-9a-f]+ )?show_foo
+[0-9a-f]+ g +DF (\.text|\.opd|\*ABS\*) [0-9a-f]+ \(VERS_1\.2\) +(0x[0-9a-f]+ )?show_foo
+[0-9a-f]+ g +DF (\.text|\.opd|\*ABS\*) [0-9a-f]+ +VERS_2\.0 +(0x[0-9a-f]+ )?show_foo
+[0-9a-f]+ g +DO (\.s?data|\*ABS\*) [0-9a-f]+ +VERS_2\.0 +show_bar1
+[0-9a-f]+ g +DO (\.s?data|\*ABS\*) [0-9a-f]+ +VERS_2\.0 +show_bar2
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers1.map b/binutils-2.21/ld/testsuite/ld-elfvers/vers1.map
new file mode 100644
index 0000000..767915c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers1.map
@@ -0,0 +1,13 @@
+VERS_1.1 {
+ local:
+ hide_old*;
+ hide_original*;
+ hide_new*;
+};
+
+VERS_1.2 {
+} VERS_1.1;
+
+VERS_2.0 {
+ show_bar1; show_bar2;
+} VERS_1.2;
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers1.sym b/binutils-2.21/ld/testsuite/ld-elfvers/vers1.sym
new file mode 100644
index 0000000..ed589e8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers1.sym
@@ -0,0 +1,4 @@
+[0-9a-f]+ g +F \.(text|opd) [0-9a-f]+ (0x[0-9a-f]+ )?show_foo@
+[0-9a-f]+ g +F \.(text|opd) [0-9a-f]+ (0x[0-9a-f]+ )?show_foo@VERS_1\.1
+[0-9a-f]+ g +F \.(text|opd) [0-9a-f]+ (0x[0-9a-f]+ )?show_foo@VERS_1\.2
+[0-9a-f]+ g +F \.(text|opd) [0-9a-f]+ (0x[0-9a-f]+ )?show_foo@@VERS_2\.0
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers1.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers1.ver
new file mode 100644
index 0000000..a42b970
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers1.ver
@@ -0,0 +1,8 @@
+Version definitions:
+[1-4] 0x01 0x0c96425f vers1.so
+[1-4] 0x00 0x0a7927b1 VERS_1.1
+[1-4] 0x00 0x0a7927b2 VERS_1.2
+ VERS_1.1
+[1-4] 0x00 0x0a7922b0 VERS_2.0
+ VERS_1.2
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers13.asym b/binutils-2.21/ld/testsuite/ld-elfvers/vers13.asym
new file mode 100644
index 0000000..d446144
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers13.asym
@@ -0,0 +1,10 @@
+VERS_1.1 in vers1.so
+VERS_1.2 in vers1.so
+VERS_2.0 in vers1.so
+bar in vers1.so
+show_bar1 in vers1.so
+show_bar2 in vers1.so
+show_foo@ in vers1.so
+show_foo@@VERS_2.0 in vers1.so
+show_foo@VERS_1.1 in vers1.so
+show_foo@VERS_1.2 in vers1.so
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers15.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers15.c
new file mode 100644
index 0000000..4e22cac
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers15.c
@@ -0,0 +1,36 @@
+/*
+ * Testcase to make sure that if we externally reference a versioned symbol
+ * that we always get the right one.
+ */
+#include <stdio.h>
+
+int
+foo_1()
+{
+ return 1034;
+}
+
+int
+foo_2()
+{
+ return 1343;
+}
+
+int
+foo_3()
+{
+ return 1334;
+}
+
+int
+main()
+{
+ printf("Expect 4, get %d\n", foo_1());
+ printf("Expect 13, get %d\n", foo_2());
+ printf("Expect 103, get %d\n", foo_3());
+ return 0;
+}
+
+__asm__(".symver foo_1,show_foo@");
+__asm__(".symver foo_2,show_foo@VERS_1.1");
+__asm__(".symver foo_3,show_foo@@VERS_1.2");
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers15.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers15.dsym
new file mode 100644
index 0000000..fc4c996
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers15.dsym
@@ -0,0 +1,5 @@
+0+ g +DO \*ABS\* 0+ +VERS_1\.1 +VERS_1\.1
+0+ g +DO \*ABS\* 0+ +VERS_1\.2 +VERS_1\.2
+[0-9a-f]+ g +DF (\.text|\.opd|\*ABS\*) [0-9a-f]+ \(Base\) +(0x[0-9a-f]+ )?show_foo
+[0-9a-f]+ g +DF (\.text|\.opd|\*ABS\*) [0-9a-f]+ \(VERS_1\.1\) +(0x[0-9a-f]+ )?show_foo
+[0-9a-f]+ g +DF (\.text|\.opd|\*ABS\*) [0-9a-f]+ +VERS_1\.2 +(0x[0-9a-f]+ )?show_foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers15.sym b/binutils-2.21/ld/testsuite/ld-elfvers/vers15.sym
new file mode 100644
index 0000000..ba9f83e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers15.sym
@@ -0,0 +1,3 @@
+[0-9a-f]+ g +F \.(text|opd) [0-9a-f]+ (0x[0-9a-f]+ )?show_foo@
+[0-9a-f]+ g +F \.(text|opd) [0-9a-f]+ (0x[0-9a-f]+ )?show_foo@VERS_1\.1
+[0-9a-f]+ g +F \.(text|opd) [0-9a-f]+ (0x[0-9a-f]+ )?show_foo@@VERS_1\.2
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers15.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers15.ver
new file mode 100644
index 0000000..3f960fd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers15.ver
@@ -0,0 +1,5 @@
+Version definitions:
+[1-3] 0x01 0x07cc9645 vers15
+[1-3] 0x00 0x0a7927b1 VERS_1.1
+[1-3] 0x00 0x0a7927b2 VERS_1.2
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers16.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers16.c
new file mode 100644
index 0000000..6668bc6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers16.c
@@ -0,0 +1,10 @@
+int show_bar ()
+{
+ return 0;
+}
+extern int show_foo ();
+
+int main ()
+{
+ return show_foo ();
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers16.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers16.dsym
new file mode 100644
index 0000000..6733ece
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers16.dsym
@@ -0,0 +1,2 @@
+[0-9a-f]+ g +DF (\.text|\.opd|\*ABS\*) [0-9a-f]+( +Base +)? (0x[0-9a-f]+ )?show_bar
+[0-9a-f]+ +DF \*UND\* [0-9a-f]+ +(0x[0-9a-f]+ )?show_foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers16.map b/binutils-2.21/ld/testsuite/ld-elfvers/vers16.map
new file mode 100644
index 0000000..766332f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers16.map
@@ -0,0 +1,3 @@
+VERS_1.1 {
+ global: show_bar;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers16a.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers16a.c
new file mode 100644
index 0000000..153b1fd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers16a.c
@@ -0,0 +1,8 @@
+int show_bar ()
+{
+ return 1;
+}
+int show_foo ()
+{
+ return show_bar ();
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers16a.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers16a.dsym
new file mode 100644
index 0000000..aaca9f5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers16a.dsym
@@ -0,0 +1,3 @@
+[0-9a-f]+ g +DO (\.text|\.opd|\*ABS\*) [0-9a-f]+ +VERS_1\.1 +VERS_1\.1
+[0-9a-f]+ g +DF (\.text|\.opd|\*ABS\*) [0-9a-f]+ +VERS_1\.1 +(0x[0-9a-f]+ )?show_bar
+[0-9a-f]+ g +DF (\.text|\.opd|\*ABS\*) [0-9a-f]+ +Base +(0x[0-9a-f]+ )?show_foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers16a.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers16a.ver
new file mode 100644
index 0000000..7b50067
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers16a.ver
@@ -0,0 +1,3 @@
+Version definitions:
+[1-2] 0x01 0x064c090f vers16a.so
+[1-2] 0x00 0x0a7927b1 VERS_1.1
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers17.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers17.c
new file mode 100644
index 0000000..3bcd647
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers17.c
@@ -0,0 +1,5 @@
+int
+show_foo ()
+{
+ return 99;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers17.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers17.dsym
new file mode 100644
index 0000000..9810659
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers17.dsym
@@ -0,0 +1,2 @@
+0+ g +DO \*ABS\* 0+ +VERS_2\.0 +VERS_2\.0
+[0-9a-f]+ g +DF (\.text|\.opd|\*ABS\*) [0-9a-f]+ +VERS_2\.0 +(0x[0-9a-f]+ )?show_foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers17.map b/binutils-2.21/ld/testsuite/ld-elfvers/vers17.map
new file mode 100644
index 0000000..a5c9cf6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers17.map
@@ -0,0 +1,4 @@
+VERS_2.0 {
+ global:
+ show_foo;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers17.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers17.ver
new file mode 100644
index 0000000..b234c9b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers17.ver
@@ -0,0 +1,3 @@
+Version definitions:
+[1-2] 0x01 0x0964f95f vers17.so
+[1-2] 0x00 0x0a7922b0 VERS_2.0
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers18.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers18.c
new file mode 100644
index 0000000..25dcc25
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers18.c
@@ -0,0 +1,42 @@
+int
+bar ()
+{
+ return 3;
+}
+
+#pragma weak hide_original_foo
+
+int
+hide_original_foo ()
+{
+ return 1 + bar ();
+}
+
+#pragma weak hide_old_foo
+
+int
+hide_old_foo ()
+{
+ return 10 + bar();
+}
+
+#pragma weak hide_old_foo1
+
+int
+hide_old_foo1 ()
+{
+ return 100 + bar ();
+}
+
+#pragma weak hide_new_foo
+
+int
+hide_new_foo ()
+{
+ return 1000 + bar ();
+}
+
+__asm__(".symver hide_original_foo,show_foo@");
+__asm__(".symver hide_old_foo,show_foo@VERS_1.1");
+__asm__(".symver hide_old_foo1,show_foo@VERS_1.2");
+__asm__(".symver hide_new_foo,show_foo@@VERS_2.0");
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers18.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers18.dsym
new file mode 100644
index 0000000..49bd7b2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers18.dsym
@@ -0,0 +1,7 @@
+0+ g +DO \*ABS\* 0+ +VERS_1\.1 +VERS_1\.1
+0+ g +DO \*ABS\* 0+ +VERS_1\.2 +VERS_1\.2
+0+ g +DO \*ABS\* 0+ +VERS_2\.0 +VERS_2\.0
+[0-9a-f]+ +w +DF (\.text|\.opd|\*ABS\*) [0-9a-f]+ \(Base\) +(0x[0-9a-f]+ )?show_foo
+[0-9a-f]+ +w +DF (\.text|\.opd|\*ABS\*) [0-9a-f]+ \(VERS_1\.1\) +(0x[0-9a-f]+ )?show_foo
+[0-9a-f]+ +w +DF (\.text|\.opd|\*ABS\*) [0-9a-f]+ \(VERS_1\.2\) +(0x[0-9a-f]+ )?show_foo
+[0-9a-f]+ +w +DF (\.text|\.opd|\*ABS\*) [0-9a-f]+ +VERS_2\.0 +(0x[0-9a-f]+ )?show_foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers18.map b/binutils-2.21/ld/testsuite/ld-elfvers/vers18.map
new file mode 100644
index 0000000..8dcff39
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers18.map
@@ -0,0 +1,12 @@
+VERS_1.1 {
+ local:
+ hide_old*;
+ hide_original*;
+ hide_new*;
+};
+
+VERS_1.2 {
+} VERS_1.1;
+
+VERS_2.0 {
+} VERS_1.2;
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers18.sym b/binutils-2.21/ld/testsuite/ld-elfvers/vers18.sym
new file mode 100644
index 0000000..bcc8882
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers18.sym
@@ -0,0 +1,4 @@
+[0-9a-f]+ +w +F \.(text|opd) [0-9a-f]+ (0x[0-9a-f]+ )?show_foo@
+[0-9a-f]+ +w +F \.(text|opd) [0-9a-f]+ (0x[0-9a-f]+ )?show_foo@VERS_1\.1
+[0-9a-f]+ +w +F \.(text|opd) [0-9a-f]+ (0x[0-9a-f]+ )?show_foo@VERS_1\.2
+[0-9a-f]+ +w +F \.(text|opd) [0-9a-f]+ (0x[0-9a-f]+ )?show_foo@@VERS_2\.0
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers18.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers18.ver
new file mode 100644
index 0000000..c6023de
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers18.ver
@@ -0,0 +1,7 @@
+Version definitions:
+[1-4] 0x01 0x0964e95f vers18.so
+[1-4] 0x00 0x0a7927b1 VERS_1.1
+[1-4] 0x00 0x0a7927b2 VERS_1.2
+ VERS_1.1
+[1-4] 0x00 0x0a7922b0 VERS_2.0
+ VERS_1.2
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers19.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers19.c
new file mode 100644
index 0000000..c1bf27a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers19.c
@@ -0,0 +1,10 @@
+#include <stdio.h>
+
+extern int show_foo ();
+
+int
+main ()
+{
+ printf ("%d\n", show_foo ());
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers19.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers19.dsym
new file mode 100644
index 0000000..7396dee
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers19.dsym
@@ -0,0 +1 @@
+[0-9a-f]+ +DF \*UND\* [0-9a-f]+ +VERS_2\.0 +(0x[0-9a-f]+ )?show_foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers19.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers19.ver
new file mode 100644
index 0000000..28a52c4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers19.ver
@@ -0,0 +1,3 @@
+Version References:
+ required from tmpdir/vers18.so:
+ 0x0a7922b0 0x00 0[23] VERS_2.0
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers2.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers2.c
new file mode 100644
index 0000000..eda54cb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers2.c
@@ -0,0 +1,13 @@
+/*
+ * Test function. This is built into a shared library, and references a
+ * versioned symbol foo that is in test.so.
+ */
+#include <stdio.h>
+
+extern int show_foo ();
+
+void
+show_xyzzy()
+{
+ printf("%d", show_foo());
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers2.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers2.dsym
new file mode 100644
index 0000000..63f15db
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers2.dsym
@@ -0,0 +1,3 @@
+[0-9a-f]+ +DF \*UND\* [0-9a-f]+ +VERS_2\.0 +(0x[0-9a-f]+ )?show_foo
+0+ g +DO \*ABS\* 0+ +VERS_XXX_1\.1 VERS_XXX_1\.1
+[0-9a-f]+ g +DF (\.text|\.opd|\*ABS\*) [0-9a-f]+ +VERS_XXX_1\.1 (0x[0-9a-f]+ )?show_xyzzy
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers2.map b/binutils-2.21/ld/testsuite/ld-elfvers/vers2.map
new file mode 100644
index 0000000..cd57d7e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers2.map
@@ -0,0 +1,4 @@
+
+VERS_XXX_1.1 {
+ show_xyzzy;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers2.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers2.ver
new file mode 100644
index 0000000..ea992ff
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers2.ver
@@ -0,0 +1,8 @@
+Version definitions:
+[1-2] 0x01 0x0c96525f vers2.so
+[1-2] 0x00 0x08785b51 VERS_XXX_1.1
+
+Version References:
+ required from tmpdir/vers1.so:
+ 0x0a7922b0 0x00 03 VERS_2.0
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers20.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers20.c
new file mode 100644
index 0000000..01a6ff2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers20.c
@@ -0,0 +1 @@
+int show_foo;
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers20.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers20.dsym
new file mode 100644
index 0000000..559170c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers20.dsym
@@ -0,0 +1,2 @@
+0+[ ]+g[ ]+DO[ ]+\*ABS\*[ ]+0+[ ]+VERS_1\.1[ ]+VERS_1\.1
+[0-9a-f]+[ ]+g[ ]+DO[ ]+\.s?bss[ ]+[0-9a-f]+[ ]+VERS_1\.1[ ]+show_foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers20.map b/binutils-2.21/ld/testsuite/ld-elfvers/vers20.map
new file mode 100644
index 0000000..e683565
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers20.map
@@ -0,0 +1,7 @@
+VERS_1.1 {
+ global:
+ show_foo;
+ local:
+ *;
+};
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers20.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers20.ver
new file mode 100644
index 0000000..1339147
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers20.ver
@@ -0,0 +1,4 @@
+Version definitions:
+[1-2] 0x01 0x0965695f vers20.so
+[1-2] 0x00 0x0a7927b1 VERS_1.1
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers20a.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers20a.ver
new file mode 100644
index 0000000..c7e11fb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers20a.ver
@@ -0,0 +1,4 @@
+Version definitions:
+[1-2] 0x01 0x0652090f vers20a.so
+[1-2] 0x00 0x0a7927b1 VERS_1.1
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers21.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers21.c
new file mode 100644
index 0000000..2879c7f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers21.c
@@ -0,0 +1,32 @@
+__asm__(".symver _old_foo,foo@VERS.0");
+__asm__(".symver _old_bar,bar@VERS.0");
+__asm__(".symver _old_foobar,foobar@VERS.0");
+__asm__(".weak _old_bar");
+
+int
+bar ()
+{
+ return 1;
+}
+
+int
+_old_bar ()
+{
+ return bar ();
+}
+
+int
+foo ()
+{
+ return 2;
+}
+
+int
+_old_foo ()
+{
+ return foo ();
+}
+
+int _old_foobar = -1;
+
+int foobar = 1;
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers21.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers21.dsym
new file mode 100644
index 0000000..4cb2188
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers21.dsym
@@ -0,0 +1,4 @@
+0+[ ]+g[ ]+DO[ ]+\*ABS\*[ ]+0+[ ]+VERS\.0[ ]+VERS\.0
+[0-9a-f]+[ ]+w[ ]+DF[ ]+\.(text|opd)[ ]+[0-9a-f]+[ ]+\(VERS\.0\)[ ]+(0x[0-9a-f]+|)[ ]*bar
+[0-9a-f]+[ ]+g[ ]+DF[ ]+\.(text|opd)[ ]+[0-9a-f]+[ ]+\(VERS\.0\)[ ]+(0x[0-9a-f]+|)[ ]*foo
+[0-9a-f]+[ ]+g[ ]+DO[ ]+\.s?data[ ]+[0-9a-f]+[ ]+\(VERS\.0\)[ ]+foobar
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers21.map b/binutils-2.21/ld/testsuite/ld-elfvers/vers21.map
new file mode 100644
index 0000000..08f748a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers21.map
@@ -0,0 +1,8 @@
+VERS.0 {
+ global:
+ bar;
+ foo;
+ foobar;
+ local:
+ *;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers21.sym b/binutils-2.21/ld/testsuite/ld-elfvers/vers21.sym
new file mode 100644
index 0000000..e7de74f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers21.sym
@@ -0,0 +1,3 @@
+[0-9a-f]+[ ]+g[ ]+O[ ]+\.s?data[ ]+[0-9a-f]+ (0x[0-9a-f]+ )?foobar@VERS\.0
+[0-9a-f]+[ ]+w[ ]+F[ ]+\.(text|opd)[ ]+[0-9a-f]+ (0x[0-9a-f]+ )?bar@VERS\.0
+[0-9a-f]+[ ]+g[ ]+F[ ]+\.(text|opd)[ ]+[0-9a-f]+ (0x[0-9a-f]+ )?foo@VERS\.0
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers21.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers21.ver
new file mode 100644
index 0000000..76e4a52
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers21.ver
@@ -0,0 +1,4 @@
+Version definitions:
+[1-2] 0x01 0x0965595f vers21.so
+[1-2] 0x00 0x05aa7610 VERS.0
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers22.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers22.c
new file mode 100644
index 0000000..a04695b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers22.c
@@ -0,0 +1,7 @@
+extern void bar ();
+
+void
+foo ()
+{
+ bar ();
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers22.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers22.dsym
new file mode 100644
index 0000000..5dfa465
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers22.dsym
@@ -0,0 +1 @@
+[0-9a-f]+ +DF \*UND\* [0-9a-f]+ +VERS\.0 +(0x[0-9a-f]+ )?bar
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers22.map b/binutils-2.21/ld/testsuite/ld-elfvers/vers22.map
new file mode 100644
index 0000000..9a03b0b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers22.map
@@ -0,0 +1,4 @@
+VERS.0 {
+ global:
+ bar;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers22.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers22.ver
new file mode 100644
index 0000000..05afce7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers22.ver
@@ -0,0 +1,4 @@
+Version References:
+ required from tmpdir/vers22b.so:
+ 0x05aa7610 0x00 02 VERS.0
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers22a.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers22a.c
new file mode 100644
index 0000000..288c820
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers22a.c
@@ -0,0 +1,6 @@
+__asm__(".symver _old_bar,bar@VERS.0");
+
+void
+_old_bar ()
+{
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers22a.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers22a.dsym
new file mode 100644
index 0000000..af06123
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers22a.dsym
@@ -0,0 +1,2 @@
+0+[ ]+g[ ]+DO[ ]+\*ABS\*[ ]+0+[ ]+VERS\.0[ ]+VERS\.0
+[0-9a-f]+[ ]+g[ ]+DF[ ]+\.(text|opd)[ ]+[0-9a-f]+[ ]+\(VERS\.0\)[ ]+(0x[0-9a-f]+ )?bar
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers22a.sym b/binutils-2.21/ld/testsuite/ld-elfvers/vers22a.sym
new file mode 100644
index 0000000..ff07708
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers22a.sym
@@ -0,0 +1 @@
+[0-9a-f]+[ ]+g[ ]+F[ ]+\.(text|opd)[ ]+[0-9a-f]+ (0x[0-9a-f]+ )?bar@VERS.0
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers22a.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers22a.ver
new file mode 100644
index 0000000..b7e1f62
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers22a.ver
@@ -0,0 +1,4 @@
+Version definitions:
+[1-2] 0x01 0x0660090f vers22a.so
+[1-2] 0x00 0x05aa7610 VERS.0
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers22b.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers22b.c
new file mode 100644
index 0000000..9e559cc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers22b.c
@@ -0,0 +1,4 @@
+void
+bar ()
+{
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers22b.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers22b.dsym
new file mode 100644
index 0000000..88c31b3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers22b.dsym
@@ -0,0 +1,2 @@
+0+[ ]+g[ ]+DO[ ]+\*ABS\*[ ]+0+[ ]+VERS\.0[ ]+VERS\.0
+[0-9a-f]+[ ]+g[ ]+DF[ ]+\.(text|opd)[ ]+[0-9a-f]+[ ]+VERS\.0[ ]+(0x[0-9a-f]+ )?bar
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers22b.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers22b.ver
new file mode 100644
index 0000000..b20f636
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers22b.ver
@@ -0,0 +1,4 @@
+Version definitions:
+[1-2] 0x01 0x065f990f vers22b.so
+[1-2] 0x00 0x05aa7610 VERS.0
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers23.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers23.c
new file mode 100644
index 0000000..9797725
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers23.c
@@ -0,0 +1,10 @@
+extern void bar ();
+extern void foo ();
+
+int
+main ()
+{
+ bar ();
+ foo ();
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers23.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers23.dsym
new file mode 100644
index 0000000..8c85a4a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers23.dsym
@@ -0,0 +1 @@
+[0-9a-f]+ +DF \*UND\* [0-9a-f]+ +VERS\.0 +(0x[0-9a-f]+ )?foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers23.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers23.ver
new file mode 100644
index 0000000..983355b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers23.ver
@@ -0,0 +1,4 @@
+Version References:
+ required from tmpdir/vers23a.so:
+ 0x05aa7610 0x00 ?? VERS.0
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers23a.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers23a.c
new file mode 100644
index 0000000..250d6f9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers23a.c
@@ -0,0 +1,11 @@
+__asm__(".symver _old_bar,bar@VERS.0");
+
+void
+_old_bar (void)
+{
+}
+
+void
+foo (void)
+{
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers23a.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers23a.dsym
new file mode 100644
index 0000000..4450665
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers23a.dsym
@@ -0,0 +1,3 @@
+0+[ ]+g[ ]+DO[ ]+\*ABS\*[ ]+0+[ ]+VERS\.0[ ]+VERS\.0
+[0-9a-f]+[ ]+g[ ]+DF[ ]+\.(text|opd)[ ]+[0-9a-f]+[ ]+\(VERS\.0\)[ ]+(0x[0-9a-f]+ )?bar
+[0-9a-f]+[ ]+g[ ]+DF[ ]+\.(text|opd)[ ]+[0-9a-f]+[ ]+VERS\.0[ ]+(0x[0-9a-f]+ )?foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers23a.map b/binutils-2.21/ld/testsuite/ld-elfvers/vers23a.map
new file mode 100644
index 0000000..325fb38
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers23a.map
@@ -0,0 +1,5 @@
+VERS.0 {
+ global:
+ bar;
+ foo;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers23a.sym b/binutils-2.21/ld/testsuite/ld-elfvers/vers23a.sym
new file mode 100644
index 0000000..ff07708
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers23a.sym
@@ -0,0 +1 @@
+[0-9a-f]+[ ]+g[ ]+F[ ]+\.(text|opd)[ ]+[0-9a-f]+ (0x[0-9a-f]+ )?bar@VERS.0
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers23a.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers23a.ver
new file mode 100644
index 0000000..3f3e3c0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers23a.ver
@@ -0,0 +1,4 @@
+Version definitions:
+[1-2] 0x01 0x065f090f vers23a.so
+[1-2] 0x00 0x05aa7610 VERS.0
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers23b.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers23b.c
new file mode 100644
index 0000000..299e2be
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers23b.c
@@ -0,0 +1,4 @@
+void
+bar (void)
+{
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers23b.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers23b.dsym
new file mode 100644
index 0000000..88c31b3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers23b.dsym
@@ -0,0 +1,2 @@
+0+[ ]+g[ ]+DO[ ]+\*ABS\*[ ]+0+[ ]+VERS\.0[ ]+VERS\.0
+[0-9a-f]+[ ]+g[ ]+DF[ ]+\.(text|opd)[ ]+[0-9a-f]+[ ]+VERS\.0[ ]+(0x[0-9a-f]+ )?bar
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers23b.map b/binutils-2.21/ld/testsuite/ld-elfvers/vers23b.map
new file mode 100644
index 0000000..9a03b0b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers23b.map
@@ -0,0 +1,4 @@
+VERS.0 {
+ global:
+ bar;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers23b.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers23b.ver
new file mode 100644
index 0000000..4e3edb3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers23b.ver
@@ -0,0 +1,4 @@
+Version definitions:
+[1-2] 0x01 0x065e990f vers23b.so
+[1-2] 0x00 0x05aa7610 VERS.0
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers23c.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers23c.ver
new file mode 100644
index 0000000..1fc69e8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers23c.ver
@@ -0,0 +1,4 @@
+Version definitions:
+[1-2] 0x01 0x065ea90f vers23c.so
+[1-2] 0x00 0x05aa7610 VERS.0
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers23d.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers23d.dsym
new file mode 100644
index 0000000..b31b82b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers23d.dsym
@@ -0,0 +1,2 @@
+[0-9a-f]* DF \*UND\* [0-9a-f]* VERS.0 (0x[0-9a-f][0-9a-f] )?bar
+[0-9a-f]* DF \*UND\* [0-9a-f]* VERS.0 (0x[0-9a-f][0-9a-f] )?foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers24.map b/binutils-2.21/ld/testsuite/ld-elfvers/vers24.map
new file mode 100644
index 0000000..06ea42f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers24.map
@@ -0,0 +1,4 @@
+VERS.0 {
+ global: x; foo;
+ local: *;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers24.rd b/binutils-2.21/ld/testsuite/ld-elfvers/vers24.rd
new file mode 100644
index 0000000..e5b55b1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers24.rd
@@ -0,0 +1,15 @@
+Relocation section .*
+# Ensure there is a dynamic relocation against x
+#...
+[0-9a-f]+ +[0-9a-f]+ R_.* +x(| \+ 0)
+#...
+Symbol table '.dynsym' contains [0-9]+ entries:
+# And ensure the dynamic symbol table contains at least x@VERS.0
+# and foo@@VERS.0 symbols
+#...
+ +[0-9]+: [0-9a-f]+ +(4 +OBJECT +GLOBAL +DEFAULT +[0-9]+ x|[0-9]+ +FUNC +GLOBAL +DEFAULT +[0-9]+ foo@)@VERS\.0
+#...
+ +[0-9]+: [0-9a-f]+ +(4 +OBJECT +GLOBAL +DEFAULT +[0-9]+ x|[0-9]+ +FUNC +GLOBAL +DEFAULT +[0-9]+ foo@)@VERS\.0
+#...
+Symbol table '.symtab' contains [0-9]+ entries:
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers24a.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers24a.c
new file mode 100644
index 0000000..7fef8d8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers24a.c
@@ -0,0 +1,5 @@
+/* Test whether .symver x, x@foo
+ causes relocations against x within the same shared library
+ to become dynamic relocations against x@foo. */
+int x = 12;
+__asm__ (".symver x, x@VERS.0");
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers24b.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers24b.c
new file mode 100644
index 0000000..8a18b3a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers24b.c
@@ -0,0 +1,5 @@
+extern int x;
+void foo (void)
+{
+ x = 24;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers24c.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers24c.c
new file mode 100644
index 0000000..267c424
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers24c.c
@@ -0,0 +1,9 @@
+/* Test whether .symver x, x@foo
+ causes relocations against x within the same shared library
+ to become dynamic relocations against x@foo. */
+int x = 12;
+__asm__ (".symver x, x@VERS.0");
+void foo (void)
+{
+ x = 24;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers25a.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers25a.c
new file mode 100644
index 0000000..f5be371
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers25a.c
@@ -0,0 +1 @@
+void foo () {}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers25a.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers25a.dsym
new file mode 100644
index 0000000..6e6573a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers25a.dsym
@@ -0,0 +1,2 @@
+0+[ ]+g[ ]+DO[ ]+\*ABS\*[ ]+0+[ ]+VERS\.0[ ]+VERS\.0
+[0-9a-f]+[ ]+g[ ]+DF[ ]+\.(text|opd)[ ]+[0-9a-f]+[ ]+VERS\.0[ ]+(0x[0-9a-f]+ )?foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers25a.map b/binutils-2.21/ld/testsuite/ld-elfvers/vers25a.map
new file mode 100644
index 0000000..31bfc76
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers25a.map
@@ -0,0 +1,5 @@
+VERS.0 {
+ global:
+ foo;
+ local: *;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers25a.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers25a.ver
new file mode 100644
index 0000000..df3aad0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers25a.ver
@@ -0,0 +1,4 @@
+Version definitions:
+[1-2] 0x01 0x065d090f vers25a.so
+[1-2] 0x00 0x05aa7610 VERS.0
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers25b.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers25b.c
new file mode 100644
index 0000000..b119c69
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers25b.c
@@ -0,0 +1 @@
+/* Empty file */
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers25b.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers25b.dsym
new file mode 100644
index 0000000..71923c3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers25b.dsym
@@ -0,0 +1 @@
+# Empty file.
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers25b.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers25b.ver
new file mode 100644
index 0000000..932b798
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers25b.ver
@@ -0,0 +1 @@
+# Empty file
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers26a.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers26a.c
new file mode 100644
index 0000000..5b5ccbf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers26a.c
@@ -0,0 +1,4 @@
+void
+foo ()
+{
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers26a.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers26a.dsym
new file mode 100644
index 0000000..6e6573a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers26a.dsym
@@ -0,0 +1,2 @@
+0+[ ]+g[ ]+DO[ ]+\*ABS\*[ ]+0+[ ]+VERS\.0[ ]+VERS\.0
+[0-9a-f]+[ ]+g[ ]+DF[ ]+\.(text|opd)[ ]+[0-9a-f]+[ ]+VERS\.0[ ]+(0x[0-9a-f]+ )?foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers26a.map b/binutils-2.21/ld/testsuite/ld-elfvers/vers26a.map
new file mode 100644
index 0000000..31bfc76
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers26a.map
@@ -0,0 +1,5 @@
+VERS.0 {
+ global:
+ foo;
+ local: *;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers26a.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers26a.ver
new file mode 100644
index 0000000..5462658
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers26a.ver
@@ -0,0 +1,4 @@
+Version definitions:
+[1-2] 0x01 0x065c090f vers26a.so
+[1-2] 0x00 0x05aa7610 VERS.0
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers26b.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers26b.c
new file mode 100644
index 0000000..c724c32
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers26b.c
@@ -0,0 +1,10 @@
+#pragma weak foo
+
+void foo ();
+
+void
+ref ()
+{
+ if (foo)
+ foo ();
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers26b.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers26b.dsym
new file mode 100644
index 0000000..932b798
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers26b.dsym
@@ -0,0 +1 @@
+# Empty file
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers26b.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers26b.ver
new file mode 100644
index 0000000..932b798
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers26b.ver
@@ -0,0 +1 @@
+# Empty file
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers27a.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers27a.c
new file mode 100644
index 0000000..f5be371
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers27a.c
@@ -0,0 +1 @@
+void foo () {}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers27a.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers27a.dsym
new file mode 100644
index 0000000..6e6573a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers27a.dsym
@@ -0,0 +1,2 @@
+0+[ ]+g[ ]+DO[ ]+\*ABS\*[ ]+0+[ ]+VERS\.0[ ]+VERS\.0
+[0-9a-f]+[ ]+g[ ]+DF[ ]+\.(text|opd)[ ]+[0-9a-f]+[ ]+VERS\.0[ ]+(0x[0-9a-f]+ )?foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers27a.map b/binutils-2.21/ld/testsuite/ld-elfvers/vers27a.map
new file mode 100644
index 0000000..31bfc76
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers27a.map
@@ -0,0 +1,5 @@
+VERS.0 {
+ global:
+ foo;
+ local: *;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers27a.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers27a.ver
new file mode 100644
index 0000000..634f1f0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers27a.ver
@@ -0,0 +1,4 @@
+Version definitions:
+[1-2] 0x01 0x065b090f vers27a.so
+[1-2] 0x00 0x05aa7610 VERS.0
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers27b.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers27b.c
new file mode 100644
index 0000000..7b164c4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers27b.c
@@ -0,0 +1,2 @@
+void foo () {}
+asm (".hidden foo");
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers27b.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers27b.dsym
new file mode 100644
index 0000000..932b798
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers27b.dsym
@@ -0,0 +1 @@
+# Empty file
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers27b.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers27b.ver
new file mode 100644
index 0000000..932b798
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers27b.ver
@@ -0,0 +1 @@
+# Empty file
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers27c.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers27c.c
new file mode 100644
index 0000000..b119c69
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers27c.c
@@ -0,0 +1 @@
+/* Empty file */
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers27c.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers27c.dsym
new file mode 100644
index 0000000..932b798
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers27c.dsym
@@ -0,0 +1 @@
+# Empty file
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers27c.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers27c.ver
new file mode 100644
index 0000000..932b798
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers27c.ver
@@ -0,0 +1 @@
+# Empty file
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers27d.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers27d.dsym
new file mode 100644
index 0000000..58b56e8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers27d.dsym
@@ -0,0 +1,2 @@
+0+[ ]+g[ ]+DO[ ]+\*ABS\*[ ]+0+[ ]+VERS\.0[ ]+VERS\.0
+[0-9a-f]+[ ]+g[ ]+DF[ ]+\.(text|opd)[ ]+[0-9a-f]+[ ]+\(VERS\.0\)[ ]+(0x[0-9a-f]+ )?foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers27d.sym b/binutils-2.21/ld/testsuite/ld-elfvers/vers27d.sym
new file mode 100644
index 0000000..d4946f5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers27d.sym
@@ -0,0 +1 @@
+[0-9a-f]+[ ]+g[ ]+F[ ]+\.(text|opd)[ ]+[0-9a-f]+ (0x[0-9a-f]+ )?foo@VERS\.0
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers27d.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers27d.ver
new file mode 100644
index 0000000..8343f3a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers27d.ver
@@ -0,0 +1,4 @@
+Version definitions:
+[1-2] 0x01 0x05ac0cff vers27d1.so
+[1-2] 0x00 0x05aa7610 VERS.0
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers27d1.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers27d1.c
new file mode 100644
index 0000000..3fc60b0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers27d1.c
@@ -0,0 +1,6 @@
+void
+foo ()
+{
+}
+
+asm (".symver foo,foo@VERS.0");
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers27d2.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers27d2.c
new file mode 100644
index 0000000..a98f38a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers27d2.c
@@ -0,0 +1,7 @@
+void foo ();
+
+void
+ref ()
+{
+ foo ();
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers27d3.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers27d3.c
new file mode 100644
index 0000000..b265880
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers27d3.c
@@ -0,0 +1,21 @@
+extern void ref ();
+extern void foo ();
+
+void
+_start ()
+{
+ foo ();
+ ref ();
+}
+
+void
+__start ()
+{
+ _start ();
+}
+
+void
+start ()
+{
+ __start ();
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers27d4.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers27d4.dsym
new file mode 100644
index 0000000..8c85a4a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers27d4.dsym
@@ -0,0 +1 @@
+[0-9a-f]+ +DF \*UND\* [0-9a-f]+ +VERS\.0 +(0x[0-9a-f]+ )?foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers27d4.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers27d4.ver
new file mode 100644
index 0000000..12c79c9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers27d4.ver
@@ -0,0 +1,3 @@
+Version References:
+ required from tmpdir/vers27a.so:
+ 0x05aa7610 0x00 02 VERS.0
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers28a.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers28a.c
new file mode 100644
index 0000000..f5be371
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers28a.c
@@ -0,0 +1 @@
+void foo () {}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers28a.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers28a.dsym
new file mode 100644
index 0000000..932b798
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers28a.dsym
@@ -0,0 +1 @@
+# Empty file
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers28a.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers28a.ver
new file mode 100644
index 0000000..932b798
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers28a.ver
@@ -0,0 +1 @@
+# Empty file
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers28b.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers28b.c
new file mode 100644
index 0000000..8186782
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers28b.c
@@ -0,0 +1,3 @@
+#pragma weak foo
+
+void foo () {}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers28b.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers28b.dsym
new file mode 100644
index 0000000..750ee88
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers28b.dsym
@@ -0,0 +1,2 @@
+0+[ ]+g[ ]+DO[ ]+\*ABS\*[ ]+0+[ ]+VERS\.0[ ]+VERS\.0
+[0-9a-f]+[ ]+w[ ]+DF[ ]+\.(text|opd)[ ]+[0-9a-f]+[ ]+VERS\.0[ ]+(0x[0-9a-f]+ )?foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers28b.map b/binutils-2.21/ld/testsuite/ld-elfvers/vers28b.map
new file mode 100644
index 0000000..31bfc76
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers28b.map
@@ -0,0 +1,5 @@
+VERS.0 {
+ global:
+ foo;
+ local: *;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers28b.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers28b.ver
new file mode 100644
index 0000000..b826c53
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers28b.ver
@@ -0,0 +1,4 @@
+Version definitions:
+[1-2] 0x01 0x0659990f vers28b.so
+[1-2] 0x00 0x05aa7610 VERS.0
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers28c.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers28c.c
new file mode 100644
index 0000000..55afb6c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers28c.c
@@ -0,0 +1,7 @@
+extern void foo ();
+
+void
+bar ()
+{
+ foo ();
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers28c.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers28c.dsym
new file mode 100644
index 0000000..99f6d88
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers28c.dsym
@@ -0,0 +1 @@
+[0-9a-f]+[ ]+DF[ ]+\*UND\*[ ]+[0-9a-f]+[ ]+VERS\.0[ ]+(0x[0-9a-f]+ )?foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers28c.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers28c.ver
new file mode 100644
index 0000000..1462686
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers28c.ver
@@ -0,0 +1,4 @@
+Version References:
+ required from tmpdir/vers28b.so:
+ 0x05aa7610 0x00 02 VERS.0
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers29.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers29.c
new file mode 100644
index 0000000..15c63a8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers29.c
@@ -0,0 +1,5 @@
+/* Test for default versioning. */
+void show()
+{
+}
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers29.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers29.dsym
new file mode 100644
index 0000000..ed8a230
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers29.dsym
@@ -0,0 +1 @@
+[0-9a-f]+[ ]+g[ ]+DF[ ]+\.(text|opd)[ ]+[0-9a-f]+[ ]+vers29\.so[ ]+(0x[0-9a-f]+ )?show
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers29.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers29.ver
new file mode 100644
index 0000000..5e73fab
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers29.ver
@@ -0,0 +1,3 @@
+Version definitions:
+[1-2] 0x01 0x0965d95f vers29.so
+[1-2] 0x00 0x0965d95f vers29.so
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers3.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers3.c
new file mode 100644
index 0000000..dbb4daf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers3.c
@@ -0,0 +1,13 @@
+/*
+ * Main program for test1, test2.
+ */
+#include <stdio.h>
+
+extern int show_foo ();
+
+int
+main()
+{
+ printf("%d\n", show_foo());
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers3.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers3.dsym
new file mode 100644
index 0000000..7396dee
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers3.dsym
@@ -0,0 +1 @@
+[0-9a-f]+ +DF \*UND\* [0-9a-f]+ +VERS_2\.0 +(0x[0-9a-f]+ )?show_foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers3.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers3.ver
new file mode 100644
index 0000000..41dad48
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers3.ver
@@ -0,0 +1,4 @@
+Version References:
+ required from tmpdir/vers1.so:
+ 0x0a7922b0 0x00 0[23] VERS_2.0
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers30.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers30.c
new file mode 100644
index 0000000..65dba2f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers30.c
@@ -0,0 +1,7 @@
+void global (void) {}
+void local (void) {}
+void foo (void) {}
+void bar (void) {}
+void info (void) {}
+void baz (void) __asm ("extern");
+void baz (void) {}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers30.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers30.dsym
new file mode 100644
index 0000000..ddb21eb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers30.dsym
@@ -0,0 +1,5 @@
+0+ g DO \*ABS\* 0+ VERS_30\.0 VERS_30\.0
+[0-9a-f]+ g DF (\.text|\.opd|\*ABS\*) [0-9a-f]+ VERS_30\.0 global
+[0-9a-f]+ g DF (\.text|\.opd|\*ABS\*) [0-9a-f]+ VERS_30\.0 foo
+[0-9a-f]+ g DF (\.text|\.opd|\*ABS\*) [0-9a-f]+ VERS_30\.0 info
+[0-9a-f]+ g DF (\.text|\.opd|\*ABS\*) [0-9a-f]+ VERS_30\.0 extern
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers30.map b/binutils-2.21/ld/testsuite/ld-elfvers/vers30.map
new file mode 100644
index 0000000..71d06d3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers30.map
@@ -0,0 +1,6 @@
+VERS_30.0 {
+ global:
+ foo; info; global; extern "C" { extern; };
+ local:
+ local; bar; *;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers30.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers30.ver
new file mode 100644
index 0000000..e0968b9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers30.ver
@@ -0,0 +1,4 @@
+Version definitions:
+[1-2] 0x01 0x0966695f vers30.so
+[1-2] 0x00 0x079239b0 VERS_30.0
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers31.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers31.c
new file mode 100644
index 0000000..78d3927
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers31.c
@@ -0,0 +1,6 @@
+/* void f<int [3], char>(int (*) [3], char) */
+void _Z1fIA3_icEvPT_T0_() {}
+
+/* void f<double [3], long>(double (*) [3], long) */
+void _Z1fIA3_dlEvPT_T0_() {}
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers31.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers31.dsym
new file mode 100644
index 0000000..72dec06
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers31.dsym
@@ -0,0 +1,2 @@
+0+ g +DO \*ABS\* 0+ +VERS_31\.0 +VERS_31\.0
+[0-9a-f]+ g +DF (\.text|\.opd|\*ABS\*) [0-9a-f]+ +VERS_31\.0 +_Z1fIA3_icEvPT_T0
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers31.map b/binutils-2.21/ld/testsuite/ld-elfvers/vers31.map
new file mode 100644
index 0000000..e2d4baf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers31.map
@@ -0,0 +1,5 @@
+VERS_31.0 {
+ extern "C++" {
+ "void f<int [3], char>(int (*) [3], char)";
+ };
+};
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers31.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers31.ver
new file mode 100644
index 0000000..c1a0ed4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers31.ver
@@ -0,0 +1,3 @@
+Version definitions:
+[1-2] 0x01 0x0966595f vers31.so
+[1-2] 0x00 0x07923ab0 VERS_31.0
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers32.map b/binutils-2.21/ld/testsuite/ld-elfvers/vers32.map
new file mode 100644
index 0000000..aef2bd9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers32.map
@@ -0,0 +1 @@
+VERS_1 { foo; };
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers32a.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers32a.c
new file mode 100644
index 0000000..a53eae6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers32a.c
@@ -0,0 +1 @@
+void foo(void) {}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers32a.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers32a.dsym
new file mode 100644
index 0000000..47d1b06
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers32a.dsym
@@ -0,0 +1,2 @@
+0+ g +DO \*ABS\* 0+ +VERS_1 +VERS_1
+[0-9a-f]+ g +DF (\.text|\.opd|\*ABS\*) [0-9a-f]+ +VERS_1 +(0x[0-9a-f]+ )?foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers32a.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers32a.ver
new file mode 100644
index 0000000..80c04c8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers32a.ver
@@ -0,0 +1,4 @@
+Version definitions:
+[1-2] 0x01 0x0670090f vers32a.so
+[1-2] 0x00 0x05aa7921 VERS_1
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers32b.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers32b.c
new file mode 100644
index 0000000..710cecc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers32b.c
@@ -0,0 +1 @@
+/* Empty */
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers32b.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers32b.dsym
new file mode 100644
index 0000000..88b3474
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers32b.dsym
@@ -0,0 +1,2 @@
+[0-9a-f]+ g +D +\*ABS\* [0-9a-f]+ +VERS_1 +(0x[0-9a-f]+ )?foo
+0+ g +DO \*ABS\* 0+ +VERS_1 +VERS_1
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers32b.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers32b.ver
new file mode 100644
index 0000000..126129a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers32b.ver
@@ -0,0 +1,4 @@
+Version definitions:
+[1-2] 0x01 0x066f990f vers32b.so
+[1-2] 0x00 0x05aa7921 VERS_1
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers4.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers4.c
new file mode 100644
index 0000000..453f2eb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers4.c
@@ -0,0 +1,31 @@
+/*
+ * Testcase to make sure that a versioned symbol definition in an
+ * application correctly defines the version node, if and only if
+ * the actual symbol is exported. This is built both with and without
+ * -export-dynamic.
+ */
+#include <stdio.h>
+
+extern int foo ();
+
+int
+bar()
+{
+ return 3;
+}
+
+int
+new_foo()
+{
+ return 1000+bar();
+
+}
+
+__asm__(".symver new_foo,foo@@VERS_2.0");
+
+int
+main()
+{
+ printf("%d\n", foo());
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers4.sym b/binutils-2.21/ld/testsuite/ld-elfvers/vers4.sym
new file mode 100644
index 0000000..395e699
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers4.sym
@@ -0,0 +1 @@
+[0-9a-f]+ g +F \.(text|opd) [0-9a-f]+ (0x[0-9a-f]+ )?foo@@VERS_2\.0
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers4a.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers4a.dsym
new file mode 100644
index 0000000..a7efb0a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers4a.dsym
@@ -0,0 +1,2 @@
+0+ g DO \*ABS\* 0+ VERS_2\.0 VERS_2\.0
+[0-9a-f]+ g DF (\.text|\.opd|\*ABS\*) [0-9a-f]+ VERS_2\.0 (0x[0-9a-f]+ )?foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers4a.sym b/binutils-2.21/ld/testsuite/ld-elfvers/vers4a.sym
new file mode 100644
index 0000000..395e699
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers4a.sym
@@ -0,0 +1 @@
+[0-9a-f]+ g +F \.(text|opd) [0-9a-f]+ (0x[0-9a-f]+ )?foo@@VERS_2\.0
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers4a.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers4a.ver
new file mode 100644
index 0000000..1f02b9d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers4a.ver
@@ -0,0 +1,4 @@
+Version definitions:
+[1-2] 0x01 0x07cc96a1 vers4a
+[1-2] 0x00 0x0a7922b0 VERS_2.0
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers5.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers5.c
new file mode 100644
index 0000000..cc6ea40
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers5.c
@@ -0,0 +1,51 @@
+/*
+ * Testcase to verify that foo@BAR and foo@@BAR are correctly detected
+ * as a multiply defined symbol.
+ */
+const char * bar1 = "asdf";
+const char * bar2 = "asdf";
+
+int
+bar()
+{
+ return 3;
+}
+
+int
+original_foo()
+{
+ return 1+bar();
+
+}
+
+int
+old_foo()
+{
+ return 10+bar();
+
+}
+
+int
+old_foo1()
+{
+ return 100+bar();
+
+}
+
+int
+new_foo()
+{
+ return 1000+bar();
+
+}
+
+__asm__(".symver original_foo,foo@");
+__asm__(".symver old_foo,foo@VERS_1.1");
+__asm__(".symver old_foo1,foo@VERS_1.2");
+__asm__(".symver new_foo,foo@@VERS_1.2");
+
+int
+main ()
+{
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers6.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers6.c
new file mode 100644
index 0000000..9e48df9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers6.c
@@ -0,0 +1,25 @@
+/*
+ * Testcase to make sure that if we externally reference a versioned symbol
+ * that we always get the right one.
+ */
+#include <stdio.h>
+
+extern int foo_1();
+extern int foo_2();
+extern int foo_3();
+extern int foo_4();
+
+int
+main()
+{
+ printf("Expect 4, get %d\n", foo_1());
+ printf("Expect 13, get %d\n", foo_2());
+ printf("Expect 103, get %d\n", foo_3());
+ printf("Expect 1003, get %d\n", foo_4());
+ return 0;
+}
+
+__asm__(".symver foo_1,show_foo@");
+__asm__(".symver foo_2,show_foo@VERS_1.1");
+__asm__(".symver foo_3,show_foo@VERS_1.2");
+__asm__(".symver foo_4,show_foo@VERS_2.0");
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers6.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers6.dsym
new file mode 100644
index 0000000..79e9061
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers6.dsym
@@ -0,0 +1,4 @@
+[0-9a-f]+ +DF \*UND\* [0-9a-f]+ +(0x[0-9a-f]+ )?show_foo
+[0-9a-f]+ +DF \*UND\* [0-9a-f]+ +VERS_2.0 +(0x[0-9a-f]+ )?show_foo
+[0-9a-f]+ +DF \*UND\* [0-9a-f]+ +VERS_1.2 +(0x[0-9a-f]+ )?show_foo
+[0-9a-f]+ +DF \*UND\* [0-9a-f]+ +VERS_1.1 +(0x[0-9a-f]+ )?show_foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers6.sym b/binutils-2.21/ld/testsuite/ld-elfvers/vers6.sym
new file mode 100644
index 0000000..801f7b3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers6.sym
@@ -0,0 +1,4 @@
+0+ *F? *\*UND\* 0+ show_foo@
+0+ *F? *\*UND\* 0+ show_foo@VERS_1\.1
+0+ *F? *\*UND\* 0+ show_foo@VERS_1\.2
+0+ *F? *\*UND\* 0+ show_foo@VERS_2\.0
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers6.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers6.ver
new file mode 100644
index 0000000..48a2b46
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers6.ver
@@ -0,0 +1,6 @@
+Version References:
+ required from tmpdir/vers1.so:
+ 0x0a7927b1 0x00 ?? VERS_1.1
+ 0x0a7927b2 0x00 ?? VERS_1.2
+ 0x0a7922b0 0x00 ?? VERS_2.0
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers7.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers7.c
new file mode 100644
index 0000000..54316c9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers7.c
@@ -0,0 +1,13 @@
+/*
+ * Test program that goes with test7.so
+ */
+
+extern int hide_a();
+extern int show_b();
+
+int
+main()
+{
+ return hide_a(1) + show_b(1);
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers7.map b/binutils-2.21/ld/testsuite/ld-elfvers/vers7.map
new file mode 100644
index 0000000..65fd501
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers7.map
@@ -0,0 +1,6 @@
+VERS_1 {
+ global:
+ show_b ;
+ local:
+ hide_a;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers7a.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers7a.c
new file mode 100644
index 0000000..7bee8c7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers7a.c
@@ -0,0 +1,18 @@
+/*
+ * Test supplied by Ulrich. Verify that we can correctly force 'a'
+ * to local scope.
+ */
+int
+__a_internal (int e)
+{
+ return e + 10;
+}
+
+int
+__b_internal (int e)
+{
+ return e + 42;
+}
+
+asm (".symver __a_internal,hide_a@@VERS_1");
+asm (".symver __b_internal,show_b@@VERS_1");
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers7a.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers7a.dsym
new file mode 100644
index 0000000..8434925
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers7a.dsym
@@ -0,0 +1,2 @@
+0+ g +DO \*ABS\* 0+ +VERS_1 +VERS_1
+[0-9a-f]+ g +DF (\.text|\.opd|\*ABS\*) [0-9a-f]+ +VERS_1 +(0x[0-9a-f]+ )?show_b
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers7a.sym b/binutils-2.21/ld/testsuite/ld-elfvers/vers7a.sym
new file mode 100644
index 0000000..94d9312
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers7a.sym
@@ -0,0 +1,2 @@
+[0-9a-f]+ g +F \.(text|opd) [0-9a-f]+ (0x[0-9a-f]+ )?hide_a@@VERS_1
+[0-9a-f]+ g +F \.(text|opd) [0-9a-f]+ (0x[0-9a-f]+ )?show_b@@VERS_1
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers7a.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers7a.ver
new file mode 100644
index 0000000..eeac5c5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers7a.ver
@@ -0,0 +1,4 @@
+Version definitions:
+[1-2] 0x01 0x096d595f vers7a.so
+[1-2] 0x00 0x05aa7921 VERS_1
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers8.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers8.c
new file mode 100644
index 0000000..a14586c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers8.c
@@ -0,0 +1,5 @@
+int
+main()
+{
+ return a(1) + b(1);
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers8.map b/binutils-2.21/ld/testsuite/ld-elfvers/vers8.map
new file mode 100644
index 0000000..c24fb10
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers8.map
@@ -0,0 +1,15 @@
+VERSION {
+ VERS_1.1 {
+ local:
+ hide_old*;
+ hide_original*;
+ hide_new*;
+ };
+
+ VERS_1.2 {
+ } VERS_1.1;
+
+ VERS_2.0 {
+ show_bar1; show_bar2;
+ } VERS_1.2;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers8.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers8.ver
new file mode 100644
index 0000000..47996c9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers8.ver
@@ -0,0 +1,8 @@
+Version definitions:
+[1-4] 0x01 0x0c96b25f vers8.so
+[1-4] 0x00 0x0a7927b1 VERS_1.1
+[1-4] 0x00 0x0a7927b2 VERS_1.2
+ VERS_1.1
+[1-4] 0x00 0x0a7922b0 VERS_2.0
+ VERS_1.2
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers9.c b/binutils-2.21/ld/testsuite/ld-elfvers/vers9.c
new file mode 100644
index 0000000..bef1402
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers9.c
@@ -0,0 +1,47 @@
+/*
+ * Testcase to verify that reference to foo@BAR and a definition of foo@@BAR
+ * are not treated as a multiple def.
+ */
+const char * bar1 = "asdf";
+const char * bar2 = "asdf";
+
+extern int old_foo1();
+
+int
+bar()
+{
+ return 3;
+}
+
+int
+original_foo()
+{
+ return 1+bar();
+
+}
+
+int
+old_foo()
+{
+ return 10+bar();
+
+}
+
+int
+new_foo()
+{
+ return 1000+bar();
+
+}
+
+int
+main()
+{
+ old_foo1();
+ return 0;
+}
+
+__asm__(".symver original_foo,foo@");
+__asm__(".symver old_foo,foo@VERS_1.1");
+__asm__(".symver old_foo1,foo@VERS_1.2");
+__asm__(".symver new_foo,foo@@VERS_1.2");
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers9.dsym b/binutils-2.21/ld/testsuite/ld-elfvers/vers9.dsym
new file mode 100644
index 0000000..5443e67
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers9.dsym
@@ -0,0 +1,4 @@
+0+ g +DO \*ABS\* 0+ +VERS_1\.1 +VERS_1\.1
+0+ g +DO \*ABS\* 0+ +VERS_1\.2 +VERS_1\.2
+[0-9a-f]+ g +DF (\.text|\.opd|\*ABS\*) [0-9a-f]+ \(VERS_1\.1\) +(0x[0-9a-f]+ )?foo
+[0-9a-f]+ g +DF (\.text|\.opd|\*ABS\*) [0-9a-f]+ +VERS_1\.2 +(0x[0-9a-f]+ )?foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers9.sym b/binutils-2.21/ld/testsuite/ld-elfvers/vers9.sym
new file mode 100644
index 0000000..6d6585f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers9.sym
@@ -0,0 +1,4 @@
+0+ *F? *\*UND\* 0+ foo@VERS_1\.2
+[0-9a-f]+ g +F \.(text|opd) [0-9a-f]+ (0x[0-9a-f]+ )?foo@
+[0-9a-f]+ g +F \.(text|opd) [0-9a-f]+ (0x[0-9a-f]+ )?foo@VERS_1\.1
+[0-9a-f]+ g +F \.(text|opd) [0-9a-f]+ (0x[0-9a-f]+ )?foo@@VERS_1\.2
diff --git a/binutils-2.21/ld/testsuite/ld-elfvers/vers9.ver b/binutils-2.21/ld/testsuite/ld-elfvers/vers9.ver
new file mode 100644
index 0000000..fce267c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvers/vers9.ver
@@ -0,0 +1,5 @@
+Version definitions:
+[1-3] 0x01 0x007cc969 vers9
+[1-3] 0x00 0x0a7927b1 VERS_1.1
+[1-3] 0x00 0x0a7927b2 VERS_1.2
+
diff --git a/binutils-2.21/ld/testsuite/ld-elfvsb/common.c b/binutils-2.21/ld/testsuite/ld-elfvsb/common.c
new file mode 100644
index 0000000..7d05eb7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvsb/common.c
@@ -0,0 +1,14 @@
+int foo;
+asm (".hidden foo");
+
+int
+_start (void)
+{
+ return foo;
+}
+
+int
+__start (void)
+{
+ return _start ();
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvsb/define.s b/binutils-2.21/ld/testsuite/ld-elfvsb/define.s
new file mode 100644
index 0000000..b38e3e0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvsb/define.s
@@ -0,0 +1,10 @@
+ .data
+ .globl protected
+ .type protected,"object"
+protected:
+ .globl hidden
+ .type hidden,"object"
+hidden:
+ .globl internal
+ .type internal,"object"
+internal:
diff --git a/binutils-2.21/ld/testsuite/ld-elfvsb/elf-offset.ld b/binutils-2.21/ld/testsuite/ld-elfvsb/elf-offset.ld
new file mode 100644
index 0000000..7c64824
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvsb/elf-offset.ld
@@ -0,0 +1,173 @@
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ . = 0x100000;
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ .gnu.version : { *(.gnu.version) }
+ .gnu.version_d : { *(.gnu.version_d) }
+ .gnu.version_r : { *(.gnu.version_r) }
+ .rel.text :
+ {
+ *(.rel.text)
+ *(.rel.text.*)
+ *(.rel.gnu.linkonce.t*)
+ }
+ .rela.text :
+ {
+ *(.rela.text)
+ *(.rela.text.*)
+ *(.rela.gnu.linkonce.t*)
+ }
+ .rel.data :
+ {
+ *(.rel.data)
+ *(.rel.data.*)
+ *(.rel.gnu.linkonce.d*)
+ }
+ .rela.data :
+ {
+ *(.rela.data)
+ *(.rela.data.*)
+ *(.rela.gnu.linkonce.d*)
+ }
+ .rel.rodata :
+ {
+ *(.rel.rodata)
+ *(.rel.rodata.*)
+ *(.rel.gnu.linkonce.r*)
+ }
+ .rela.rodata :
+ {
+ *(.rela.rodata)
+ *(.rela.rodata.*)
+ *(.rela.gnu.linkonce.r*)
+ }
+ .rel.got : { *(.rel.got) }
+ .rela.got : { *(.rela.got) }
+ .rel.toc : { *(.rel.toc) }
+ .rela.toc : { *(.rela.toc) }
+ .rel.ctors : { *(.rel.ctors) }
+ .rela.ctors : { *(.rela.ctors) }
+ .rel.dtors : { *(.rel.dtors) }
+ .rela.dtors : { *(.rela.dtors) }
+ .rel.init : { *(.rel.init) }
+ .rela.init : { *(.rela.init) }
+ .rel.fini : { *(.rel.fini) }
+ .rela.fini : { *(.rela.fini) }
+ .rel.bss : { *(.rel.bss) }
+ .rela.bss : { *(.rela.bss) }
+ .rel.plt : { *(.rel.plt) }
+ .rela.plt : { *(.rela.plt) }
+ .rel.eh_frame : { *(.rel.eh_frame) }
+ .rela.eh_frame : { *(.rela.eh_frame) }
+ .init : { KEEP (*(.init)) }
+ .plt : { *(.plt) }
+ .text :
+ {
+ *(.text)
+ *(.text.*)
+ *(.stub)
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ *(.gnu.linkonce.t*)
+ }
+ _etext = .;
+ PROVIDE (etext = .);
+ .fini : { KEEP (*(.fini)) } =0x9090
+ .rodata :
+ {
+ *(.rodata)
+ *(.rodata.*)
+ *(.gnu.linkonce.r*)
+ }
+ .rodata1 : { *(.rodata1) }
+ /* Adjust the address for the data segment. We want to adjust up to
+ the same address within the page on the next page up. */
+ . = ALIGN(0x1000) + (. & (0x1000 - 1));
+ .data :
+ {
+ *(.data)
+ *(.data.*)
+ *(.gnu.linkonce.d*)
+ SORT(CONSTRUCTORS)
+ }
+ .data1 : { *(.data1) }
+ .ctors :
+ {
+ /* gcc uses crtbegin.o to find the start of the constructors, so
+ we make sure it is first. Because this is a wildcard, it
+ doesn't matter if the user does not actually link against
+ crtbegin.o; the linker won't look for a file to match a
+ wildcard. The wildcard also means that it doesn't matter which
+ directory crtbegin.o is in. */
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ }
+ .dtors :
+ {
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ }
+ .got : { *(.got.plt) *(.got) }
+ .toc : { *(.toc) }
+ .dynamic : { *(.dynamic) }
+ /* We want the small data sections together, so single-instruction offsets
+ can access them all, and initialized data all before uninitialized, so
+ we can shorten the on-disk segment size. */
+ .sdata : { *(.sdata) *(.sdata.*) }
+ _edata = .;
+ PROVIDE (edata = .);
+ __bss_start = .;
+ .sbss : { *(.sbss) *(.scommon) }
+ .bss :
+ {
+ *(.dynbss)
+ *(.bss)
+ *(COMMON)
+ /* Align here to ensure that the .bss section occupies space up to
+ _end. Align after .bss to ensure correct alignment even if the
+ .bss section disappears because there are no input sections. */
+ . = ALIGN(32 / 8);
+ }
+ . = ALIGN(32 / 8);
+ _end = . ;
+ PROVIDE (end = .);
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames) }
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames) }
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev) }
+ .debug_line 0 : { *(.debug_line) }
+ .debug_frame 0 : { *(.debug_frame) }
+ .debug_str 0 : { *(.debug_str) }
+ .debug_loc 0 : { *(.debug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo) }
+ /* SGI/MIPS DWARF 2 extensions */
+ .debug_weaknames 0 : { *(.debug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames) }
+ /* These must appear regardless of . */
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvsb/elfvsb.dat b/binutils-2.21/ld/testsuite/ld-elfvsb/elfvsb.dat
new file mode 100644
index 0000000..bad3b1e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvsb/elfvsb.dat
@@ -0,0 +1,26 @@
+mainvar == 1
+overriddenvar == 2
+shlibvar1 == 3
+shlib_mainvar () == 1
+shlib_overriddenvar () == 2
+shlib_shlibvar1 () == 3
+shlib_shlibvar2 () == 4
+shlib_shlibcall () == 5
+shlib_shlibcall2 () == 8
+shlib_maincall () == 6
+main_called () == 6
+shlib_checkfunptr1 (shlib_shlibvar1) == 1
+shlib_checkfunptr2 (main_called) == 1
+shlib_getfunptr1 () == shlib_shlibvar1
+shlib_getfunptr2 () == main_called
+shlib_check () == 1
+visibility_check () == 1
+visibility_checkfunptr () == 1
+main_visibility_check () == 1
+visibility_checkvar () == 1
+visibility_checkvarptr () == 1
+main_visibility_checkvar () == 1
+main_visibility_checkcom () == 1
+shlib_visibility_checkcom () == 1
+main_visibility_checkweak () == 1
+shlib_visibility_checkweak () == 1
diff --git a/binutils-2.21/ld/testsuite/ld-elfvsb/elfvsb.exp b/binutils-2.21/ld/testsuite/ld-elfvsb/elfvsb.exp
new file mode 100644
index 0000000..1a18822
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvsb/elfvsb.exp
@@ -0,0 +1,508 @@
+# Expect script for ld-visibility tests
+# Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by Ian Lance Taylor (ian@cygnus.com)
+# and H.J. Lu (hjl@gnu.org)
+#
+
+# Make sure that ld can generate ELF shared libraries with visibility.
+
+# This test can only be run on a couple of ELF platforms.
+# Square bracket expressions seem to confuse istarget.
+if { ![istarget hppa*64*-*-hpux*] \
+ && ![istarget hppa*-*-linux*] \
+ && ![istarget i?86-*-linux*] \
+ && ![istarget ia64-*-linux*] \
+ && ![istarget m68k-*-linux*] \
+ && ![istarget mips*-*-linux*] \
+ && ![istarget powerpc*-*-linux*] \
+ && ![istarget arm*-*-linux*] \
+ && ![istarget alpha*-*-linux*] \
+ && ![istarget sparc*-*-linux*] \
+ && ![istarget s390*-*-linux*] \
+ && ![istarget sh\[34\]*-*-linux*] \
+ && ![istarget x86_64-*-linux*] } {
+ return
+}
+
+if { [istarget *-*-linux*aout*] \
+ || [istarget *-*-linux*oldld*] } {
+ return
+}
+
+set test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
+foreach t $test_list {
+ # We need to strip the ".d", but can leave the dirname.
+ verbose [file rootname $t]
+ run_dump_test [file rootname $t]
+}
+
+# The remaining tests can only be run if ld generates native executables.
+if ![isnative] then {return}
+
+set tmpdir tmpdir
+set SHCFLAG ""
+set shared_needs_pic "no"
+
+if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
+
+ # AIX shared libraries do not seem to support useful features,
+ # like overriding the shared library function or letting the
+ # shared library refer to objects defined in the main program. We
+ # avoid testing those features.
+ set SHCFLAG "-DXCOFF_TEST"
+
+ # The AIX 3.2.5 loader appears to randomly fail when loading
+ # shared libraries from NSF mounted partitions, so we avoid any
+ # potential problems by using a local directory.
+ catch {exec /bin/sh -c "echo $$"} pid
+ set tmpdir /usr/tmp/ld.$pid
+ catch "exec mkdir $tmpdir" exec_status
+
+ # On AIX, we need to explicitly export the symbols the shared
+ # library is going to provide, and need.
+ set file [open $tmpdir/xcoff.exp w]
+ puts $file shlibvar1
+ puts $file shlibvar2
+ puts $file shlib_shlibvar1
+ puts $file shlib_shlibvar2
+ puts $file shlib_shlibcall
+ puts $file shlib_shlibcalled
+ puts $file shlib_checkfunptr1
+ puts $file shlib_getfunptr1
+ puts $file shlib_check
+ close $file
+}
+
+if [istarget arm*-*-linux*] {
+ # On ARM section anchors can change the symbol pre-emptability for
+ # non-PIC shared libraries, causing these tests to fail. Turn section
+ # anchors off.
+ set SHCFLAG "-fno-section-anchors"
+
+ # On targets that have MOVW the compiler will emit relocations which
+ # the linker doesn't support when compiling -shared without -fpic. The
+ # test to find out whether we want to XFAIL the non-PIC tests requires
+ # a compile - so we pre-calculate it here. We also note that this can
+ # only affect arm*-*-*eabi targets as the old ABI doesn't support v7.
+ if [istarget arm*-*-*eabi] {
+ set file [open $tmpdir/movw-detect.c w]
+ puts $file "void foo(void) { __asm (\"movw r0, #0\"); }"
+ close $file
+ if [run_host_cmd_yesno "$CC" "$CFLAGS -c $tmpdir/movw-detect.c -o $tmpdir/movw-detect.o"] {
+ set shared_needs_pic "yes"
+ }
+ }
+}
+
+set support_protected "no"
+
+if [istarget *-*-linux*] {
+ if [ld_compile "$CC -g $CFLAGS -DPROTECTED_CHECK" $srcdir/$subdir/main.c $tmpdir/main.o] {
+ if [ld_simple_link $CC $tmpdir/main "$tmpdir/main.o"] {
+ catch "exec $tmpdir/main" support_protected
+ }
+ }
+}
+
+# The test procedure.
+proc visibility_test { visibility progname testname main sh1 sh2 dat args } {
+ global CC
+ global srcdir
+ global subdir
+ global exec_output
+ global link_output
+ global host_triplet
+ global tmpdir
+
+ if [llength $args] { set shldflags [lindex $args 0] } else { set shldflags "" }
+
+ # Build the shared library.
+ # On AIX, we need to use an export file.
+ set shared -shared
+ if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
+ set shared "-bM:SRE -bE:$tmpdir/xcoff.exp"
+ }
+ if {![ld_simple_link $CC $tmpdir/$progname.so "$shared $shldflags $tmpdir/$sh1 $tmpdir/$sh2"]} {
+ if { [ string match $visibility "hidden_undef" ]
+ && [regexp "undefined reference to \`\.?visibility\'" $link_output]
+ && [regexp "undefined reference to \`visibility_var\'" $link_output] } {
+ pass "$testname"
+ } else { if { [ string match $visibility "protected_undef" ]
+ && [regexp "undefined reference to \`\.?visibility\'" $link_output]
+ && [regexp "undefined reference to \`visibility_var\'" $link_output] } {
+ pass "$testname"
+ } else {
+ fail "$testname"
+ }}
+ return
+ }
+
+ # Link against the shared library. Use -rpath so that the
+ # dynamic linker can locate the shared library at runtime.
+ # On AIX, we must include /lib in -rpath, as otherwise the loader
+ # can not find -lc.
+ set rpath $tmpdir
+ if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
+ set rpath /lib:$tmpdir
+ }
+ if ![ld_simple_link $CC $tmpdir/$progname "-Wl,-rpath,$rpath $tmpdir/$main $tmpdir/$progname.so"] {
+ if { [ string match $visibility "hidden" ]
+ && [regexp "undefined reference to \`\.?visibility\'" $link_output]
+ && [regexp "undefined reference to \`visibility_var\'" $link_output] } {
+ pass "$testname"
+ } else { if { [ string match $visibility "hidden_undef_def" ]
+ && [regexp "undefined reference to \`\.?visibility\'" $link_output]
+ && [regexp "undefined reference to \`visibility_def\'" $link_output]
+ && [regexp "undefined reference to \`\.?visibility_func\'" $link_output]
+ && [regexp "undefined reference to \`visibility_var\'" $link_output] } {
+ pass "$testname"
+ } else {
+ fail "$testname"
+ }}
+ return
+ }
+
+ if { [ string match $visibility "hidden" ]
+ || [ string match $visibility "hidden_undef" ]
+ || [ string match $visibility "protected_undef" ] } {
+ fail "$testname"
+ }
+
+ # Run the resulting program
+ send_log "$tmpdir/$progname >$tmpdir/$progname.out\n"
+ verbose "$tmpdir/$progname >$tmpdir/$progname.out"
+ catch "exec $tmpdir/$progname >$tmpdir/$progname.out" exec_output
+ if ![string match "" $exec_output] then {
+ send_log "$exec_output\n"
+ verbose "$exec_output"
+ fail "$testname"
+ return
+ }
+
+ send_log "diff $tmpdir/$progname.out $srcdir/$subdir/$dat.dat\n"
+ verbose "diff $tmpdir/$progname.out $srcdir/$subdir/$dat.dat"
+ catch "exec diff $tmpdir/$progname.out $srcdir/$subdir/$dat.dat" exec_output
+ set exec_output [prune_warnings $exec_output]
+
+ if {![string match "" $exec_output]} then {
+ send_log "$exec_output\n"
+ verbose "$exec_output"
+ fail "$testname"
+ return
+ }
+
+ pass "$testname"
+}
+
+proc visibility_run {visibility} {
+ global CC
+ global CFLAGS
+ global SHCFLAG
+ global srcdir
+ global subdir
+ global tmpdir
+ global picflag
+ global target_triplet
+ global support_protected
+ global shared_needs_pic
+
+ if [ string match $visibility "hidden" ] {
+ set VSBCFLAG "-DHIDDEN_TEST"
+ } else { if [ string match $visibility "hidden_normal" ] {
+ set VSBCFLAG "-DHIDDEN_NORMAL_TEST"
+ } else { if [ string match $visibility "hidden_undef" ] {
+ set VSBCFLAG "-DHIDDEN_UNDEF_TEST"
+ } else { if [ string match $visibility "hidden_undef_def" ] {
+ set VSBCFLAG "-DHIDDEN_UNDEF_TEST -DDSO_DEFINE_TEST"
+ } else { if [ string match $visibility "hidden_weak" ] {
+ set VSBCFLAG "-DHIDDEN_WEAK_TEST"
+ } else { if [ string match $visibility "protected" ] {
+ set VSBCFLAG "-DPROTECTED_TEST"
+ } else { if [ string match $visibility "protected_undef" ] {
+ set VSBCFLAG "-DPROTECTED_UNDEF_TEST"
+ } else { if [ string match $visibility "protected_undef_def" ] {
+ set VSBCFLAG "-DPROTECTED_UNDEF_TEST -DDSO_DEFINE_TEST"
+ } else { if [ string match $visibility "protected_weak" ] {
+ set VSBCFLAG "-DPROTECTED_WEAK_TEST"
+ } else {
+ set VSBCFLAG ""
+ }}}}}}}}}
+
+ # Compile the main program.
+ if ![ld_compile "$CC -g $CFLAGS $SHCFLAG $VSBCFLAG" $srcdir/$subdir/main.c $tmpdir/mainnp.o] {
+ unresolved "visibility ($visibility) (non PIC)"
+ unresolved "visibility ($visibility)"
+ } else {
+ # The shared library is composed of two files. First compile them
+ # without using -fpic. That should work on an ELF system,
+ # although it will be less efficient because the dynamic linker
+ # will need to do more relocation work. However, note that not
+ # using -fpic will cause some of the tests to return different
+ # results.
+ if { ![ld_compile "$CC -g $CFLAGS $SHCFLAG $VSBCFLAG" $srcdir/$subdir/sh1.c $tmpdir/sh1np.o]
+ || ![ld_compile "$CC -g $CFLAGS $SHCFLAG $VSBCFLAG" $srcdir/$subdir/sh2.c $tmpdir/sh2np.o] } {
+ unresolved "visibility ($visibility) (non PIC)"
+ } else { if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
+ visibility_test $visibility vnp "visibility ($visibility) (non PIC)" mainnp.o sh1np.o sh2np.o xcoff
+ } else {
+ # SunOS non PIC shared libraries don't permit some cases of
+ # overriding.
+ if { [ string match $visibility "protected" ]
+ || [ string match $visibility "protected_undef_def" ] } {
+ if [ string match $support_protected "no" ] {
+ setup_xfail $target_triplet
+ }
+ } else {
+ setup_xfail "*-*-sunos4*"
+ }
+
+ # Non-pic code uses name binding rules for applications to
+ # reference variables by gp-relative relocs, which can't be
+ # used with overridable symbols.
+ if { ![ string match $visibility "hidden_undef" ]
+ && ![ string match $visibility "protected_undef" ] } {
+ setup_xfail "ia64-*-linux*"
+ setup_xfail "alpha*-*-linux*"
+ }
+ if { ![ string match $visibility "hidden" ]
+ && ![ string match $visibility "hidden_undef" ]
+ && ![ string match $visibility "hidden_undef_def" ]
+ && ![ string match $visibility "protected_undef" ] } {
+ setup_xfail "s390x-*-linux*"
+ if { [istarget sparc*-*-linux*] && [is_elf64 $tmpdir/mainnp.o] } {
+ setup_xfail "sparc*-*-linux*"
+ }
+ }
+ setup_xfail "x86_64-*-linux*"
+ if { ![istarget hppa*64*-*-linux*] } {
+ setup_xfail "hppa*-*-linux*"
+ }
+ if [ string match $shared_needs_pic "yes" ] {
+ setup_xfail "arm*-*-linux*"
+ }
+
+ visibility_test $visibility vnp "visibility ($visibility) (non PIC)" mainnp.o sh1np.o sh2np.o elfvsb
+
+ # Test ELF shared library relocations with a non-zero load
+ # address for the library. Near as I can tell, the R_*_RELATIVE
+ # relocations for various targets are broken in the case where
+ # the load address is not zero (which is the default).
+ if { [ string match $visibility "protected" ]
+ || [ string match $visibility "protected_undef_def" ] } {
+ if [ string match $support_protected "no" ] {
+ setup_xfail $target_triplet
+ }
+ } else {
+ setup_xfail "*-*-sunos4*"
+ setup_xfail "*-*-linux*libc1"
+ }
+ if { [ string match $visibility "hidden_normal" ]
+ || [ string match $visibility "hidden_weak" ]
+ || [ string match $visibility "protected" ]
+ || [ string match $visibility "protected_undef_def" ]
+ || [ string match $visibility "protected_weak" ]
+ || [ string match $visibility "normal" ] } {
+ setup_xfail "powerpc-*-linux*"
+ setup_xfail "s390x-*-linux*"
+ if { [istarget sparc*-*-linux*] && [is_elf64 $tmpdir/mainnp.o] } {
+ setup_xfail "sparc*-*-linux*"
+ }
+ }
+ if { ![ string match $visibility "hidden_undef" ]
+ && ![ string match $visibility "protected_undef" ] } {
+ setup_xfail "ia64-*-linux*"
+ setup_xfail "alpha*-*-linux*"
+ setup_xfail "mips*-*-linux*"
+ }
+ setup_xfail "x86_64-*-linux*"
+ if { ![istarget hppa*64*-*-linux*] } {
+ setup_xfail "hppa*-*-linux*"
+ }
+ if [ string match $shared_needs_pic "yes" ] {
+ setup_xfail "arm*-*-linux*"
+ }
+
+ visibility_test $visibility vnp "visibility ($visibility) (non PIC, load offset)" \
+ mainnp.o sh1np.o sh2np.o elfvsb \
+ "-T $srcdir/$subdir/elf-offset.ld"
+ } }
+
+ # Now compile the code using -fpic.
+
+ if { ![ld_compile "$CC -g $CFLAGS $SHCFLAG $VSBCFLAG -DSHARED $picflag" $srcdir/$subdir/sh1.c $tmpdir/sh1p.o]
+ || ![ld_compile "$CC -g $CFLAGS $SHCFLAG $VSBCFLAG -DSHARED $picflag" $srcdir/$subdir/sh2.c $tmpdir/sh2p.o] } {
+ unresolved "visibility ($visibility)"
+ } else {
+ if { [ string match $visibility "protected" ]
+ || [ string match $visibility "protected_undef_def" ] } {
+ if [ string match $support_protected "no" ] {
+ setup_xfail $target_triplet
+ }
+ }
+ # SunOS can not compare function pointers correctly
+ if [istarget "*-*-sunos4*"] {
+ visibility_test $visibility vp "visibility ($visibility)" mainnp.o sh1p.o sh2p.o sun4
+ } else { if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
+ visibility_test $visibility vp "visibility ($visibility)" mainnp.o sh1p.o sh2p.o xcoff
+ } else {
+ visibility_test $visibility vp "visibility ($visibility)" mainnp.o sh1p.o sh2p.o elfvsb
+ } }
+ }
+ }
+
+ # Now do the same tests again, but this time compile main.c PIC.
+ if ![ld_compile "$CC -g $CFLAGS $SHCFLAG $VSBCFLAG -DSHARED $picflag" $srcdir/$subdir/main.c $tmpdir/mainp.o] {
+ unresolved "visibility ($visibility) (PIC main, non PIC so)"
+ unresolved "visibility ($visibility) (PIC main)"
+ } else {
+ if { [file exists $tmpdir/sh1np.o ] && [ file exists $tmpdir/sh2np.o ] } {
+ if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
+ visibility_test $visibility vmpnp "visibility ($visibility) (PIC main, non PIC so)" mainp.o sh1np.o sh2np.o xcoff
+ } else {
+ # SunOS non PIC shared libraries don't permit some cases of
+ # overriding.
+ if { [ string match $visibility "protected" ]
+ || [ string match $visibility "protected_undef_def" ] } {
+ if [ string match $support_protected "no" ] {
+ setup_xfail $target_triplet
+ }
+ } else {
+ setup_xfail "*-*-sunos4*"
+ }
+ if { ![ string match $visibility "hidden_undef" ]
+ && ![ string match $visibility "protected_undef" ] } {
+ setup_xfail "ia64-*-linux*"
+ setup_xfail "alpha*-*-linux*"
+ }
+ if { ![ string match $visibility "hidden" ]
+ && ![ string match $visibility "hidden_undef" ]
+ && ![ string match $visibility "hidden_undef_def" ]
+ && ![ string match $visibility "protected_undef" ] } {
+ setup_xfail "s390x-*-linux*"
+ if { [istarget sparc*-*-linux*] && [is_elf64 $tmpdir/mainp.o] } {
+ setup_xfail "sparc*-*-linux*"
+ }
+ }
+ setup_xfail "x86_64-*-linux*"
+ if { ![istarget hppa*64*-*-linux*] } {
+ setup_xfail "hppa*-*-linux*"
+ }
+ if [ string match $shared_needs_pic "yes" ] {
+ setup_xfail "arm*-*-linux*"
+ }
+
+ visibility_test $visibility vmpnp "visibility ($visibility) (PIC main, non PIC so)" mainp.o sh1np.o sh2np.o elfvsb
+ }
+ } else {
+ unresolved "visibility (PIC main, non PIC so)"
+ }
+
+ if { [file exists $tmpdir/sh1p.o ] && [ file exists $tmpdir/sh2p.o ] } {
+ if { [ string match $visibility "protected" ]
+ || [ string match $visibility "protected_undef_def" ] } {
+ if [ string match $support_protected "no" ] {
+ setup_xfail $target_triplet
+ }
+ }
+ if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
+ visibility_test $visibility vmpp "visibility ($visibility) (PIC main)" mainp.o sh1p.o sh2p.o xcoff
+ } else {
+ visibility_test $visibility vmpp "visibility ($visibility) (PIC main)" mainp.o sh1p.o sh2p.o elfvsb
+ }
+ } else {
+ unresolved "visibility ($visibility) (PIC main)"
+ }
+ }
+}
+
+if [istarget mips*-*-*] {
+ set picflag ""
+} else {
+ # Unfortunately, the gcc argument is -fpic and the cc argument is
+ # -KPIC. We have to try both.
+ set picflag "-fpic"
+ send_log "$CC $picflag\n"
+ verbose "$CC $picflag"
+ catch "exec $CC $picflag" exec_output
+ send_log "$exec_output\n"
+ verbose "--" "$exec_output"
+ if { [string match "*illegal option*" $exec_output] \
+ || [string match "*option ignored*" $exec_output] \
+ || [string match "*unrecognized option*" $exec_output] \
+ || [string match "*passed to ld*" $exec_output] } {
+ if [istarget *-*-sunos4*] {
+ set picflag "-pic"
+ } else {
+ set picflag "-KPIC"
+ }
+ }
+}
+verbose "Using $picflag to compile PIC code"
+
+visibility_run hidden
+visibility_run hidden_normal
+visibility_run hidden_undef
+visibility_run hidden_undef_def
+visibility_run hidden_weak
+visibility_run protected
+visibility_run protected_undef
+visibility_run protected_undef_def
+visibility_run protected_weak
+visibility_run normal
+
+if { ![ld_compile "$CC -g $CFLAGS" $srcdir/$subdir/common.c tmpdir/common.o] } {
+ unresolved "common hidden symbol"
+} else {
+ if ![ld_simple_link $ld tmpdir/common "tmpdir/common.o"] {
+ fail "common hidden symbol"
+ } else {
+ pass "common hidden symbol"
+ }
+}
+
+if { ![ld_compile "$CC -g $CFLAGS" $srcdir/$subdir/test.c tmpdir/test.o] } {
+ unresolved "weak hidden symbol"
+} else {
+ if { ![ld_compile "$CC -g $CFLAGS -DSHARED $picflag" $srcdir/$subdir/sh3.c tmpdir/sh3.o] } {
+ unresolved "weak hidden symbol"
+ } else {
+ if ![ld_simple_link $ld tmpdir/sh3.so "-shared tmpdir/sh3.o"] {
+ fail "weak hidden symbol"
+ } else {
+ if ![ld_simple_link $ld tmpdir/weak "tmpdir/test.o tmpdir/sh3.o"] {
+ fail "weak hidden symbol DSO last"
+ } else {
+ pass "weak hidden symbol DSO last"
+ }
+ if ![ld_simple_link $ld tmpdir/weak "tmpdir/sh3.so tmpdir/test.o"] {
+ fail "weak hidden symbol DSO first"
+ } else {
+ pass "weak hidden symbol DSO first"
+ }
+ }
+ }
+}
+
+if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
+ # Remove the temporary directory.
+ catch "exec rm -rf $tmpdir" exec_status
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvsb/hidden0.d b/binutils-2.21/ld/testsuite/ld-elfvsb/hidden0.d
new file mode 100644
index 0000000..abd26a2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvsb/hidden0.d
@@ -0,0 +1,9 @@
+#source: define.s
+#source: undef.s
+#ld: -r
+#readelf: -s
+
+Symbol table '.symtab' contains .* entries:
+#...
+[ ]*[0-9]+: [0-9a-fA-F]* +0 +OBJECT +GLOBAL +HIDDEN +. hidden
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elfvsb/hidden1.d b/binutils-2.21/ld/testsuite/ld-elfvsb/hidden1.d
new file mode 100644
index 0000000..7820c21
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvsb/hidden1.d
@@ -0,0 +1,8 @@
+#source: undef.s
+#ld: -r
+#readelf: -s
+
+Symbol table '.symtab' contains .* entries:
+#...
+[ ]*[0-9]+: [0-9a-fA-F]* +0 +NOTYPE +GLOBAL +HIDDEN +UND hidden
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elfvsb/hidden2.d b/binutils-2.21/ld/testsuite/ld-elfvsb/hidden2.d
new file mode 100644
index 0000000..2996277
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvsb/hidden2.d
@@ -0,0 +1,9 @@
+#source: hidden2.s
+#ld: -shared -T hidden2.ld
+#readelf: -Ds
+# It is also ok to remove this symbol, but we currently make it local.
+
+Symbol table for image:
+#...
+[ ]*[0-9]+ +[0-9]+: [0-9a-fA-F]* +0 +OBJECT +LOCAL +DEFAULT +ABS foo
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elfvsb/hidden2.ld b/binutils-2.21/ld/testsuite/ld-elfvsb/hidden2.ld
new file mode 100644
index 0000000..3c414db
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvsb/hidden2.ld
@@ -0,0 +1,7 @@
+SECTIONS
+{
+ . = 0x1000;
+ PROVIDE (foo = .);
+ .data : { *(.data) }
+ .dynamic : { *(.dynamic) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvsb/hidden2.s b/binutils-2.21/ld/testsuite/ld-elfvsb/hidden2.s
new file mode 100644
index 0000000..62f1107
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvsb/hidden2.s
@@ -0,0 +1,5 @@
+ .data
+ .hidden foo
+ .global foo
+ .type foo,%object
+ .dc.a foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfvsb/internal0.d b/binutils-2.21/ld/testsuite/ld-elfvsb/internal0.d
new file mode 100644
index 0000000..9d37ae8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvsb/internal0.d
@@ -0,0 +1,10 @@
+#source: define.s
+#source: undef.s
+#ld: -r
+#readelf: -s
+
+Symbol table '.symtab' contains .* entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+#...
+ +[0-9]+: [0-9a-fA-F]+ +0 +OBJECT +GLOBAL +INTERNAL +. internal
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elfvsb/internal1.d b/binutils-2.21/ld/testsuite/ld-elfvsb/internal1.d
new file mode 100644
index 0000000..5cacdaf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvsb/internal1.d
@@ -0,0 +1,9 @@
+#source: undef.s
+#ld: -r
+#readelf: -s
+
+Symbol table '.symtab' contains .* entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+#...
+ +[0-9]+: [0-9a-fA-F]+ +0 +NOTYPE +GLOBAL +INTERNAL +UND internal
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elfvsb/main.c b/binutils-2.21/ld/testsuite/ld-elfvsb/main.c
new file mode 100644
index 0000000..b498d43
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvsb/main.c
@@ -0,0 +1,306 @@
+#ifdef PROTECTED_CHECK
+#include <features.h>
+#include <stdio.h>
+
+int
+main (void)
+{
+#if defined (__GLIBC__) && (__GLIBC__ > 2 \
+ || (__GLIBC__ == 2 \
+ && __GLIBC_MINOR__ >= 2))
+ puts ("yes");
+#else
+ puts ("no");
+#endif
+ return 0;
+}
+#else
+/* This is the main program for the shared library test. */
+
+#include <stdio.h>
+
+int mainvar = 1;
+int overriddenvar = 2;
+extern int shlibvar1;
+
+extern int shlib_mainvar ();
+extern int shlib_overriddenvar ();
+extern int shlib_shlibvar1 ();
+extern int shlib_shlibvar2 ();
+extern int shlib_shlibcall ();
+extern int shlib_maincall ();
+extern int shlib_checkfunptr1 ();
+extern int shlib_checkfunptr2 ();
+extern int (*shlib_getfunptr1 ()) ();
+extern int (*shlib_getfunptr2 ()) ();
+extern int shlib_check ();
+extern int shlib_shlibcall2 ();
+extern int visibility_check ();
+extern int visibility_checkfunptr ();
+extern void *visibility_funptr ();
+extern int visibility_checkvar ();
+extern int visibility_checkvarptr ();
+extern int visibility_varval ();
+extern void *visibility_varptr ();
+extern int shlib_visibility_checkcom ();
+extern int shlib_visibility_checkweak ();
+
+int shlib_visibility_com = 1;
+
+int shlib_visibility_var_weak = 1;
+
+int
+shlib_visibility_func_weak ()
+{
+ return 1;
+}
+
+#ifdef HIDDEN_WEAK_TEST
+#define WEAK_TEST
+#endif
+
+#ifdef PROTECTED_WEAK_TEST
+#define WEAK_TEST
+#endif
+
+#ifdef PROTECTED_UNDEF_TEST
+#define PROTECTED_TEST
+#endif
+
+#ifndef WEAK_TEST
+extern int visibility ();
+extern int visibility_var;
+#endif
+
+#if !defined (HIDDEN_TEST) && defined (PROTECTED_TEST)
+int
+visibility (void)
+{
+ return 1;
+}
+
+static int
+main_visibility_check (void)
+{
+ return ((int (*) (void)) visibility_funptr ()) != visibility;
+}
+
+int visibility_var = 1;
+
+static int
+main_visibility_checkvar (void)
+{
+ return visibility_varval () != visibility_var
+ && visibility_varptr () != &visibility_var;
+}
+
+#ifndef PROTECTED_UNDEF_TEST
+int shared_data = 1;
+asm (".protected shared_data");
+
+int
+shared_func (void)
+{
+ return 1;
+}
+
+asm (".protected shared_func");
+
+extern int * shared_data_p ();
+typedef int (*func) ();
+extern func shared_func_p ();
+#endif
+#else
+static int
+main_visibility_check (void)
+{
+#ifdef WEAK_TEST
+ return visibility_funptr () == NULL;
+#else
+ return ((int (*) (void)) visibility_funptr ()) == visibility;
+#endif
+}
+
+static int
+main_visibility_checkvar (void)
+{
+#ifdef WEAK_TEST
+ return visibility_varval () == 0
+ && visibility_varptr () == NULL;
+#else
+ return visibility_varval () == visibility_var
+ && visibility_varptr () == &visibility_var;
+#endif
+}
+#endif
+
+/* This function is called by the shared library. */
+
+int
+main_called (void)
+{
+ return 6;
+}
+
+/* This function overrides a function in the shared library. */
+
+int
+shlib_overriddencall2 (void)
+{
+ return 8;
+}
+
+#ifdef HIDDEN_NORMAL_TEST
+int visibility_com;
+asm (".hidden visibility_com");
+
+int
+main_visibility_checkcom (void)
+{
+ return visibility_com == 0;
+}
+
+int
+main_visibility_checkweak (void)
+{
+ return 1;
+}
+#elif defined (HIDDEN_WEAK_TEST)
+int
+main_visibility_checkcom (void)
+{
+ return 1;
+}
+
+#pragma weak visibility_undef_var_weak
+extern int visibility_undef_var_weak;
+asm (".hidden visibility_undef_var_weak");
+
+#pragma weak visibility_undef_func_weak
+extern int visibility_undef_func_weak ();
+asm (".hidden visibility_undef_func_weak");
+
+#pragma weak visibility_var_weak
+extern int visibility_var_weak;
+asm (".hidden visibility_var_weak");
+
+#pragma weak visibility_func_weak
+extern int visibility_func_weak ();
+asm (".hidden visibility_func_weak");
+
+int
+main_visibility_checkweak ()
+{
+ return &visibility_undef_var_weak == NULL
+ && &visibility_undef_func_weak == NULL
+ && &visibility_func_weak == NULL
+ && &visibility_var_weak == NULL;
+}
+#elif defined (HIDDEN_UNDEF_TEST)
+extern int visibility_def;
+asm (".hidden visibility_def");
+extern int visibility_func ();
+asm (".hidden visibility_func");
+
+int
+main_visibility_checkcom (void)
+{
+ return & visibility_def != NULL && visibility_def == 2;
+}
+
+int
+main_visibility_checkweak (void)
+{
+ return & visibility_func != NULL && visibility_func () == 2;
+}
+#else
+int
+main_visibility_checkcom (void)
+{
+ return 1;
+}
+
+int
+main_visibility_checkweak (void)
+{
+ return 1;
+}
+#endif
+
+int
+main (void)
+{
+ int (*p) ();
+ int ret = 0;
+
+ printf ("mainvar == %d\n", mainvar);
+ printf ("overriddenvar == %d\n", overriddenvar);
+ printf ("shlibvar1 == %d\n", shlibvar1);
+#ifndef XCOFF_TEST
+ printf ("shlib_mainvar () == %d\n", shlib_mainvar ());
+ printf ("shlib_overriddenvar () == %d\n", shlib_overriddenvar ());
+#endif
+ printf ("shlib_shlibvar1 () == %d\n", shlib_shlibvar1 ());
+ printf ("shlib_shlibvar2 () == %d\n", shlib_shlibvar2 ());
+ printf ("shlib_shlibcall () == %d\n", shlib_shlibcall ());
+#ifndef XCOFF_TEST
+ printf ("shlib_shlibcall2 () == %d\n", shlib_shlibcall2 ());
+ printf ("shlib_maincall () == %d\n", shlib_maincall ());
+#endif
+ printf ("main_called () == %d\n", main_called ());
+ printf ("shlib_checkfunptr1 (shlib_shlibvar1) == %d\n",
+ shlib_checkfunptr1 (shlib_shlibvar1));
+#ifndef XCOFF_TEST
+ printf ("shlib_checkfunptr2 (main_called) == %d\n",
+ shlib_checkfunptr2 (main_called));
+#endif
+ p = shlib_getfunptr1 ();
+ printf ("shlib_getfunptr1 () ");
+ if (p == shlib_shlibvar1)
+ printf ("==");
+ else
+ printf ("!=");
+ printf (" shlib_shlibvar1\n");
+#ifndef XCOFF_TEST
+ p = shlib_getfunptr2 ();
+ printf ("shlib_getfunptr2 () ");
+ if (p == main_called)
+ printf ("==");
+ else
+ printf ("!=");
+ printf (" main_called\n");
+#endif
+ printf ("shlib_check () == %d\n", shlib_check ());
+ printf ("visibility_check () == %d\n", visibility_check ());
+ printf ("visibility_checkfunptr () == %d\n",
+ visibility_checkfunptr ());
+ printf ("main_visibility_check () == %d\n", main_visibility_check ());
+ printf ("visibility_checkvar () == %d\n", visibility_checkvar ());
+ printf ("visibility_checkvarptr () == %d\n",
+ visibility_checkvarptr ());
+ printf ("main_visibility_checkvar () == %d\n",
+ main_visibility_checkvar ());
+ printf ("main_visibility_checkcom () == %d\n",
+ main_visibility_checkcom ());
+ printf ("shlib_visibility_checkcom () == %d\n",
+ shlib_visibility_checkcom ());
+ printf ("main_visibility_checkweak () == %d\n",
+ main_visibility_checkweak ());
+ printf ("shlib_visibility_checkweak () == %d\n",
+ shlib_visibility_checkweak ());
+
+#if !defined (PROTECTED_UNDEF_TEST) && defined (PROTECTED_TEST)
+ if (&shared_data != shared_data_p ())
+ ret = 1;
+ p = shared_func_p ();
+ if (shared_func != p)
+ ret = 1;
+ if (shared_data != *shared_data_p ())
+ ret = 1;
+ if (shared_func () != (*p) () )
+ ret = 1;
+#endif
+
+ return ret;
+}
+#endif
diff --git a/binutils-2.21/ld/testsuite/ld-elfvsb/protected0.d b/binutils-2.21/ld/testsuite/ld-elfvsb/protected0.d
new file mode 100644
index 0000000..ea781dd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvsb/protected0.d
@@ -0,0 +1,10 @@
+#source: define.s
+#source: undef.s
+#ld: -r
+#readelf: -s
+
+Symbol table '.symtab' contains .* entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+#...
+ +[0-9]+: [0-9a-fA-F]* +0 +OBJECT +GLOBAL +PROTECTED +. protected
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elfvsb/protected1.d b/binutils-2.21/ld/testsuite/ld-elfvsb/protected1.d
new file mode 100644
index 0000000..235db00
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvsb/protected1.d
@@ -0,0 +1,9 @@
+#source: undef.s
+#ld: -r
+#readelf: -s
+
+Symbol table '.symtab' contains .* entries:
+ +Num: +Value +Size Type +Bind +Vis +Ndx +Name
+#...
+ +[0-9]+: [0-9a-fA-F]* +0 +NOTYPE +GLOBAL +PROTECTED +UND protected
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-elfvsb/sh1.c b/binutils-2.21/ld/testsuite/ld-elfvsb/sh1.c
new file mode 100644
index 0000000..b275424
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvsb/sh1.c
@@ -0,0 +1,421 @@
+#ifndef NULL
+#define NULL ((void *) 0)
+#endif
+
+/* This is part of the shared library ld test. This file becomes part
+ of a shared library. */
+
+/* This variable is supplied by the main program. */
+#ifndef XCOFF_TEST
+extern int mainvar;
+#endif
+
+/* This variable is defined in the shared library, and overridden by
+ the main program. */
+#ifndef XCOFF_TEST
+#ifdef SHARED
+/* SHARED is defined if we are compiling with -fpic/-fPIC. */
+int overriddenvar = -1;
+#else
+/* Without -fpic, newer versions of gcc assume that we are not
+ compiling for a shared library, and thus that overriddenvar is
+ local. */
+extern int overriddenvar;
+#endif
+#endif
+
+/* This variable is defined in the shared library. */
+int shlibvar1 = 3;
+
+/* This variable is defined by another object in the shared library. */
+extern int shlibvar2;
+
+/* These functions return the values of the above variables as seen in
+ the shared library. */
+
+#ifndef XCOFF_TEST
+int
+shlib_mainvar ()
+{
+ return mainvar;
+}
+#endif
+
+#ifndef XCOFF_TEST
+int
+shlib_overriddenvar ()
+{
+ return overriddenvar;
+}
+#endif
+
+int
+shlib_shlibvar1 ()
+{
+ return shlibvar1;
+}
+
+int
+shlib_shlibvar2 ()
+{
+ return shlibvar2;
+}
+
+/* This function calls a function defined by another object in the
+ shared library. */
+
+extern int shlib_shlibcalled ();
+
+int
+shlib_shlibcall ()
+{
+ return shlib_shlibcalled ();
+}
+
+#ifndef XCOFF_TEST
+/* This function calls a function defined in this object in the shared
+ library. The main program will override the called function. */
+
+extern int shlib_overriddencall2 ();
+
+int
+shlib_shlibcall2 ()
+{
+ return shlib_overriddencall2 ();
+}
+
+#ifdef SHARED
+int
+shlib_overriddencall2 ()
+{
+ return 7;
+}
+#endif
+#endif
+
+/* This function calls a function defined by the main program. */
+
+#ifndef XCOFF_TEST
+extern int main_called ();
+
+int
+shlib_maincall ()
+{
+ return main_called ();
+}
+#endif
+
+/* This function is passed a function pointer to shlib_mainvar. It
+ confirms that the pointer compares equally. */
+
+int
+shlib_checkfunptr1 (p)
+ int (*p) ();
+{
+ return p == shlib_shlibvar1;
+}
+
+/* This function is passed a function pointer to main_called. It
+ confirms that the pointer compares equally. */
+
+#ifndef XCOFF_TEST
+int
+shlib_checkfunptr2 (p)
+ int (*p) ();
+{
+ return p == main_called;
+}
+#endif
+
+/* This function returns a pointer to shlib_mainvar. */
+
+int
+(*shlib_getfunptr1 ()) ()
+{
+ return shlib_shlibvar1;
+}
+
+/* This function returns a pointer to main_called. */
+
+#ifndef XCOFF_TEST
+int
+(*shlib_getfunptr2 ()) ()
+{
+ return main_called;
+}
+#endif
+
+/* This function makes sure that constant data and local functions
+ work. */
+
+#ifndef __STDC__
+#define const
+#endif
+
+static int i = 6;
+static const char *str = "Hello, world\n";
+
+int
+shlib_check ()
+{
+ const char *s1, *s2;
+
+ if (i != 6)
+ return 0;
+
+ /* To isolate the test, don't rely on any external functions, such
+ as strcmp. */
+ s1 = "Hello, world\n";
+ s2 = str;
+ while (*s1 != '\0')
+ if (*s1++ != *s2++)
+ return 0;
+ if (*s2 != '\0')
+ return 0;
+
+ if (shlib_shlibvar1 () != 3)
+ return 0;
+
+ return 1;
+}
+
+#ifdef HIDDEN_WEAK_TEST
+#define HIDDEN_UNDEF_TEST
+#define WEAK_TEST
+#endif
+
+#ifdef PROTECTED_WEAK_TEST
+#define PROTECTED_UNDEF_TEST
+#define WEAK_TEST
+#endif
+
+#if defined (HIDDEN_UNDEF_TEST) || defined (PROTECTED_UNDEF_TEST)
+#ifdef WEAK_TEST
+#pragma weak visibility
+#endif
+extern int visibility ();
+#else
+int
+visibility ()
+{
+ return 2;
+}
+#endif
+
+#ifdef HIDDEN_NORMAL_TEST
+asm (".hidden visibility_normal");
+
+int
+visibility_normal ()
+{
+ return 2;
+}
+#endif
+
+int
+visibility_checkfunptr ()
+{
+#ifdef WEAK_TEST
+ return 1;
+#else
+#ifdef HIDDEN_NORMAL_TEST
+ int (*v) () = visibility_normal;
+#else
+ int (*v) () = visibility;
+#endif
+ return (*v) () == 2;
+#endif
+}
+
+int
+visibility_check ()
+{
+#ifdef WEAK_TEST
+ if (&visibility)
+ return visibility () == 1;
+ else
+ return 1;
+#else
+#ifdef HIDDEN_NORMAL_TEST
+ return visibility_normal () == 2;
+#else
+ return visibility () == 2;
+#endif
+#endif
+}
+
+void *
+visibility_funptr ()
+{
+#ifdef WEAK_TEST
+ if (&visibility == NULL)
+ return NULL;
+ else
+#endif
+ return visibility;
+}
+
+#if defined (HIDDEN_UNDEF_TEST) || defined (PROTECTED_UNDEF_TEST)
+#ifdef WEAK_TEST
+#pragma weak visibility_var
+#endif
+extern int visibility_var;
+#else
+int visibility_var = 2;
+#endif
+
+#ifdef HIDDEN_NORMAL_TEST
+asm (".hidden visibility_var_normal");
+
+int visibility_var_normal = 2;
+#endif
+
+int
+visibility_checkvarptr ()
+{
+#ifdef WEAK_TEST
+ if (&visibility_var)
+ return visibility_var == 1;
+ else
+ return 1;
+#else
+#ifdef HIDDEN_NORMAL_TEST
+ int *v = &visibility_var_normal;
+#else
+ int *v = &visibility_var;
+#endif
+ return *v == 2;
+#endif
+}
+
+int
+visibility_checkvar ()
+{
+#ifdef WEAK_TEST
+ return 1;
+#else
+#ifdef HIDDEN_NORMAL_TEST
+ return visibility_var_normal == 2;
+#else
+ return visibility_var == 2;
+#endif
+#endif
+}
+
+void *
+visibility_varptr ()
+{
+#ifdef WEAK_TEST
+ if (&visibility_var == NULL)
+ return NULL;
+ else
+#endif
+ return &visibility_var;
+}
+
+int
+visibility_varval ()
+{
+#ifdef WEAK_TEST
+ if (&visibility_var == NULL)
+ return 0;
+ else
+#endif
+ return visibility_var;
+}
+
+#if defined (HIDDEN_TEST) || defined (HIDDEN_UNDEF_TEST)
+asm (".hidden visibility");
+asm (".hidden visibility_var");
+#else
+#if defined (PROTECTED_TEST) || defined (PROTECTED_UNDEF_TEST) || defined (PROTECTED_WEAK_TEST)
+asm (".protected visibility");
+asm (".protected visibility_var");
+#endif
+#endif
+
+#ifdef HIDDEN_NORMAL_TEST
+int shlib_visibility_com;
+asm (".hidden shlib_visibility_com");
+
+int
+shlib_visibility_checkcom ()
+{
+ return shlib_visibility_com == 0;
+}
+
+int
+shlib_visibility_checkweak ()
+{
+ return 1;
+}
+#elif defined (HIDDEN_WEAK_TEST)
+#pragma weak shlib_visibility_undef_var_weak
+extern int shlib_visibility_undef_var_weak;
+asm (".hidden shlib_visibility_undef_var_weak");
+
+#pragma weak shlib_visibility_undef_func_weak
+extern int shlib_visibility_undef_func_weak ();
+asm (".hidden shlib_visibility_undef_func_weak");
+
+#pragma weak shlib_visibility_var_weak
+extern int shlib_visibility_var_weak;
+asm (".hidden shlib_visibility_var_weak");
+
+#pragma weak shlib_visibility_func_weak
+extern int shlib_visibility_func_weak ();
+asm (".hidden shlib_visibility_func_weak");
+
+int
+shlib_visibility_checkcom ()
+{
+ return 1;
+}
+
+int
+shlib_visibility_checkweak ()
+{
+ return &shlib_visibility_undef_var_weak == NULL
+ && &shlib_visibility_undef_func_weak == NULL
+ && &shlib_visibility_func_weak == NULL
+ && &shlib_visibility_var_weak == NULL;
+}
+#else
+int
+shlib_visibility_checkcom ()
+{
+ return 1;
+}
+
+int
+shlib_visibility_checkweak ()
+{
+ return 1;
+}
+#endif
+
+#ifdef PROTECTED_TEST
+#ifdef SHARED
+int shared_data = 100;
+#else
+extern int shared_data;
+#endif
+
+int *
+shared_data_p ()
+{
+ return &shared_data;
+}
+
+int
+shared_func ()
+{
+ return 100;
+}
+
+void *
+shared_func_p ()
+{
+ return shared_func;
+}
+#endif
diff --git a/binutils-2.21/ld/testsuite/ld-elfvsb/sh2.c b/binutils-2.21/ld/testsuite/ld-elfvsb/sh2.c
new file mode 100644
index 0000000..e9a9687
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvsb/sh2.c
@@ -0,0 +1,61 @@
+/* This is part of the shared library ld test. This file becomes part
+ of a shared library. */
+
+/* This variable is defined here, and referenced by another file in
+ the shared library. */
+int shlibvar2 = 4;
+
+/* This variable is defined here, and shouldn't be used to resolve a
+ reference with non-default visibility in another shared library. */
+int visibility_com = 2;
+
+/* This function is called by another file in the shared library. */
+
+int
+shlib_shlibcalled ()
+{
+ return 5;
+}
+
+#ifdef DSO_DEFINE_TEST
+int
+visibility ()
+{
+ return 2;
+}
+
+int visibility_var = 2;
+
+int visibility_def = 2;
+
+int
+visibility_func ()
+{
+ return 2;
+}
+#endif
+
+#ifdef HIDDEN_WEAK_TEST
+int visibility_var_weak = 2;
+
+int
+visibility_func_weak ()
+{
+ return 2;
+}
+#endif
+
+#ifndef SHARED
+# ifndef XCOFF_TEST
+int overriddenvar = -1;
+
+int
+shlib_overriddencall2 ()
+{
+ return 7;
+}
+# endif
+# ifdef PROTECTED_TEST
+int shared_data = 100;
+# endif
+#endif
diff --git a/binutils-2.21/ld/testsuite/ld-elfvsb/sh3.c b/binutils-2.21/ld/testsuite/ld-elfvsb/sh3.c
new file mode 100644
index 0000000..a6d5dc8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvsb/sh3.c
@@ -0,0 +1,7 @@
+int main_hidden_data = 1;
+
+int
+main_hidden_func ()
+{
+ return 1;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvsb/test.c b/binutils-2.21/ld/testsuite/ld-elfvsb/test.c
new file mode 100644
index 0000000..ca23d38
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvsb/test.c
@@ -0,0 +1,26 @@
+#pragma weak main_hidden_data
+extern int main_hidden_data;
+asm (".hidden main_hidden_data");
+
+#pragma weak main_hidden_func
+extern int main_hidden_func ();
+asm (".hidden main_hidden_func");
+
+int
+_start (void)
+{
+ int ret = 0;
+
+ if (&main_hidden_data != 0)
+ ret = 1;
+ if (main_hidden_func != 0)
+ ret = 1;
+
+ return ret;
+}
+
+int
+__start (void)
+{
+ return _start ();
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfvsb/undef.s b/binutils-2.21/ld/testsuite/ld-elfvsb/undef.s
new file mode 100644
index 0000000..5b99d6f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfvsb/undef.s
@@ -0,0 +1,3 @@
+ .protected protected
+ .hidden hidden
+ .internal internal
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/bar.c b/binutils-2.21/ld/testsuite/ld-elfweak/bar.c
new file mode 100644
index 0000000..6317518
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/bar.c
@@ -0,0 +1,16 @@
+#include <stdio.h>
+
+extern void foo ();
+extern void foobar ();
+
+void
+foo ()
+{
+ printf ("strong foo\n");
+}
+
+void
+foobar ()
+{
+ foo ();
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/bar1a.c b/binutils-2.21/ld/testsuite/ld-elfweak/bar1a.c
new file mode 100644
index 0000000..daf0c58
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/bar1a.c
@@ -0,0 +1,26 @@
+#include <stdio.h>
+
+extern int deallocate_foo;
+
+extern int * bar ();
+extern int * foo ();
+extern void abort ();
+extern void foobar ();
+
+void
+foobar ()
+{
+ if (&deallocate_foo != bar () || &deallocate_foo != foo ())
+ abort ();
+
+ if (deallocate_foo)
+ printf ("weak deallocate_foo\n");
+ else
+ printf ("strong deallocate_foo\n");
+}
+
+int *
+bar()
+{
+ return &deallocate_foo;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/bar1b.c b/binutils-2.21/ld/testsuite/ld-elfweak/bar1b.c
new file mode 100644
index 0000000..bab68ab
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/bar1b.c
@@ -0,0 +1,7 @@
+int deallocate_foo = 0;
+
+int *
+bar()
+{
+ return &deallocate_foo;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/bar1c.c b/binutils-2.21/ld/testsuite/ld-elfweak/bar1c.c
new file mode 100644
index 0000000..901f065
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/bar1c.c
@@ -0,0 +1,7 @@
+int deallocate_foo;
+
+int *
+bar()
+{
+ return &deallocate_foo;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/dso.dsym b/binutils-2.21/ld/testsuite/ld-elfweak/dso.dsym
new file mode 100644
index 0000000..f69c29b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/dso.dsym
@@ -0,0 +1 @@
+[0-9a-f]+[ ]+g[ ]+DF[ ]+\.(text|opd)[ ]+[0-9a-f]+[ ]+(Base[ ]+|[ ]*)(0x[0-9a-f]+ )?foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/dsodata.dsym b/binutils-2.21/ld/testsuite/ld-elfweak/dsodata.dsym
new file mode 100644
index 0000000..d4a09cc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/dsodata.dsym
@@ -0,0 +1,2 @@
+[0-9a-f]+[ ]+g[ ]+DO[ ]+\.s?(data|bss)[ ]+[0-9a-f]+[ ]+(Base[ ]+|[ ]*)deallocate_foo
+[0-9a-f]+[ ]+g[ ]+DF[ ]+\.(text|opd)[ ]+[0-9a-f]+[ ]+(Base[ ]+|[ ]*)(0x[0-9a-f]+ )?foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/dsow.dsym b/binutils-2.21/ld/testsuite/ld-elfweak/dsow.dsym
new file mode 100644
index 0000000..e3aa87a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/dsow.dsym
@@ -0,0 +1 @@
+[0-9a-f]+[ ]+w[ ]+DF[ ]+\.(text|opd)[ ]+[0-9a-f]+[ ]+(Base[ ]+|[ ]*)(0x[0-9a-f]+ )?foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/dsowdata.dsym b/binutils-2.21/ld/testsuite/ld-elfweak/dsowdata.dsym
new file mode 100644
index 0000000..5fdc694
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/dsowdata.dsym
@@ -0,0 +1 @@
+[0-9a-f]+[ ]+w[ ]+DO[ ]+\.s?data[ ]+[0-9a-f]+[ ]+(Base[ ]+|[ ]*)deallocate_foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/elfweak.exp b/binutils-2.21/ld/testsuite/ld-elfweak/elfweak.exp
new file mode 100644
index 0000000..cac613b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/elfweak.exp
@@ -0,0 +1,501 @@
+# Expect script for ld-weak tests
+# Copyright 2001, 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by H.J. Lu (hjl@gnu.org)
+# Eric Youngdale (eric@andante.jic.com)
+#
+
+# This test can only be run if ld generates native executables.
+if ![isnative] then {return}
+
+# This test can only be run on a couple of ELF platforms.
+# Square bracket expressions seem to confuse istarget.
+# This is similar to the test that is used in ld-shared, BTW.
+if { ![istarget alpha*-*-linux*] \
+ && ![istarget arm*-*-linux*] \
+ && ![istarget hppa*64*-*-hpux*] \
+ && ![istarget hppa*-*-linux*] \
+ && ![istarget i?86-*-sysv4*] \
+ && ![istarget i?86-*-unixware] \
+ && ![istarget i?86-*-elf*] \
+ && ![istarget i?86-*-linux*] \
+ && ![istarget ia64-*-elf*] \
+ && ![istarget ia64-*-linux*] \
+ && ![istarget m68k-*-linux*] \
+ && ![istarget mips*-*-irix5*] \
+ && ![istarget mips*-*-linux*] \
+ && ![istarget powerpc*-*-elf*] \
+ && ![istarget powerpc*-*-linux*] \
+ && ![istarget powerpc*-*-sysv4*] \
+ && ![istarget sh\[34\]*-*-linux*] \
+ && ![istarget sparc*-*-elf] \
+ && ![istarget sparc*-*-solaris2*] \
+ && ![istarget sparc*-*-linux*] } {
+ return
+}
+
+if { [istarget i?86-*-linux*aout*] \
+ || [istarget i?86-*-linux*oldld*] \
+ || [istarget m68k-*-linux*aout*] } {
+ return
+}
+
+if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
+ return
+}
+
+set diff diff
+set tmpdir tmpdir
+set DOBJDUMP_FLAGS --dynamic-syms
+set SOBJDUMP_FLAGS --syms
+set shared --shared
+
+#
+# objdump_symstuff
+# Dump non-dynamic symbol stuff and make sure that it is sane.
+#
+proc objdump_symstuff { objdump object expectfile } {
+ global SOBJDUMP_FLAGS
+ global version_output
+ global diff
+ global tmpdir
+
+ if ![info exists SOBJDUMP_FLAGS] { set SOBJDUMP_FLAGS "" }
+
+ verbose -log "$objdump $SOBJDUMP_FLAGS $object | grep foo$ > $tmpdir/objdump.out"
+
+ catch "exec $objdump $SOBJDUMP_FLAGS $object | grep foo$ > $tmpdir/objdump.out" exec_output
+ set exec_output [prune_warnings $exec_output]
+ if [string match "" $exec_output] then {
+
+# Now do a line-by-line comparison to effectively diff the darned things
+# The stuff coming from the expectfile is actually a regex, so we can
+# skip over the actual addresses and so forth. This is currently very
+# simpleminded - it expects a one-to-one correspondence in terms of line
+# numbers.
+
+ if [file exists $expectfile] then {
+ set file_a [open $expectfile r]
+ } else {
+ perror "$expectfile doesn't exist"
+ return 0
+ }
+
+ if [file exists $tmpdir/objdump.out] then {
+ set file_b [open $tmpdir/objdump.out r]
+ } else {
+ perror "$tmpdir/objdump.out doesn't exist"
+ return 0
+ }
+
+ verbose "# Diff'ing: $expectfile $tmpdir/objdump.out" 2
+
+ set eof -1
+ set differences 0
+
+ while { [gets $file_a line] != $eof } {
+ if [regexp "^#.*$" $line] then {
+ continue
+ } else {
+ lappend list_a $line
+ }
+ }
+ close $file_a
+
+ while { [gets $file_b line] != $eof } {
+ if [regexp "^#.*$" $line] then {
+ continue
+ } else {
+ lappend list_b $line
+ }
+ }
+ close $file_b
+
+ for { set i 0 } { $i < [llength $list_a] } { incr i } {
+ set line_a [lindex $list_a $i]
+ set line_b [lindex $list_b $i]
+
+
+ verbose "\t$expectfile: $i: $line_a" 3
+ verbose "\t/tmp/objdump.out: $i: $line_b" 3
+ if [regexp $line_a $line_b] then {
+ continue
+ } else {
+ verbose -log "\t$expectfile: $i: $line_a"
+ verbose -log "\t$tmpdir/objdump.out: $i: $line_b"
+
+ return 0
+ }
+ }
+
+ if { [llength $list_a] != [llength $list_b] } {
+ verbose -log "Line count"
+ return 0
+ }
+
+ if $differences<1 then {
+ return 1
+ }
+
+ return 0
+ } else {
+ verbose -log "$exec_output"
+ return 0
+ }
+
+}
+
+#
+# objdump_dymsymstuff
+# Dump dynamic symbol stuff and make sure that it is sane.
+#
+proc objdump_dynsymstuff { objdump object expectfile } {
+ global DOBJDUMP_FLAGS
+ global version_output
+ global diff
+ global tmpdir
+
+ if ![info exists DOBJDUMP_FLAGS] { set DOBJDUMP_FLAGS "" }
+
+ verbose -log "$objdump $DOBJDUMP_FLAGS $object | grep foo$ > $tmpdir/objdump.out"
+
+ catch "exec $objdump $DOBJDUMP_FLAGS $object | grep foo$ > $tmpdir/objdump.out" exec_output
+ set exec_output [prune_warnings $exec_output]
+ if [string match "" $exec_output] then {
+
+# Now do a line-by-line comparison to effectively diff the darned things
+# The stuff coming from the expectfile is actually a regex, so we can
+# skip over the actual addresses and so forth. This is currently very
+# simpleminded - it expects a one-to-one correspondence in terms of line
+# numbers.
+
+ if [file exists $expectfile] then {
+ set file_a [open $expectfile r]
+ } else {
+ warning "$expectfile doesn't exist"
+ return 0
+ }
+
+ if [file exists $tmpdir/objdump.out] then {
+ set file_b [open $tmpdir/objdump.out r]
+ } else {
+ fail "$tmpdir/objdump.out doesn't exist"
+ return 0
+ }
+
+ verbose "# Diff'ing: $expectfile $tmpdir/objdump.out" 2
+
+ set eof -1
+ set differences 0
+
+ while { [gets $file_a line] != $eof } {
+ if [regexp "^#.*$" $line] then {
+ continue
+ } else {
+ lappend list_a $line
+ }
+ }
+ close $file_a
+
+ while { [gets $file_b line] != $eof } {
+ if [regexp "^#.*$" $line] then {
+ continue
+ } else {
+ lappend list_b $line
+ }
+ }
+ close $file_b
+
+ for { set i 0 } { $i < [llength $list_b] } { incr i } {
+ set line_b [lindex $list_b $i]
+
+# The tests are rigged so that we should never export a symbol with the
+# word 'hide' in it. Thus we just search for it, and bail if we find it.
+ if [regexp "hide" $line_b] then {
+ verbose -log "\t$tmpdir/objdump.out: $i: $line_b"
+
+ return 0
+ }
+
+ verbose "\t$expectfile: $i: $line_b" 3
+
+ # We can't assume that the sort is consistent across
+ # systems, so we must check each regexp. When we find a
+ # regexp, we null it out, so we don't match it twice.
+ for { set j 0 } { $j < [llength $list_a] } { incr j } {
+ set line_a [lindex $list_a $j]
+
+ if [regexp $line_a $line_b] then {
+ lreplace $list_a $j $j "CAN NOT MATCH"
+ break
+ }
+ }
+
+ if { $j >= [llength $list_a] } {
+ verbose -log "\t$tmpdir/objdump.out: $i: $line_b"
+
+ return 0
+ }
+ }
+
+ if { [llength $list_a] != [llength $list_b] } {
+ verbose -log "Line count"
+ return 0
+ }
+
+ if $differences<1 then {
+ return 1
+ }
+
+ return 0
+ } else {
+ verbose -log "$exec_output"
+ return 0
+ }
+
+}
+
+proc build_lib {test libname objs dynsymexp} {
+ global CC
+ global objdump
+ global tmpdir
+ global shared
+ global srcdir
+ global subdir
+
+ set files ""
+ foreach obj $objs {
+ set files "$files $tmpdir/$obj"
+ }
+
+ if {![ld_simple_link $CC $tmpdir/$libname.so "$shared $files"]} {
+ fail $test
+ return
+ }
+
+ if {![string match "" $dynsymexp] \
+ && ![objdump_dynsymstuff $objdump $tmpdir/$libname.so $srcdir/$subdir/$dynsymexp]} {
+ fail $test
+ return
+ }
+ pass $test
+}
+
+proc build_exec { test execname objs flags dat dynsymexp symexp} {
+ global CC
+ global objdump
+ global tmpdir
+ global shared
+ global srcdir
+ global subdir
+ global exec_output
+
+ set files ""
+ foreach obj $objs {
+ set files "$files $tmpdir/$obj"
+ }
+
+ if {![ld_simple_link $CC $tmpdir/$execname "$flags $files"]} {
+ fail "$test"
+ return
+ }
+
+ if {![string match "" $dynsymexp]} then {
+ if {![objdump_dynsymstuff $objdump $tmpdir/$execname $srcdir/$subdir/$dynsymexp]} {
+ fail $test
+ return
+ }
+ }
+
+ if {![string match "" $symexp]} then {
+ if {![objdump_symstuff $objdump $tmpdir/$execname $srcdir/$subdir/$symexp]} {
+ fail $test
+ return
+ }
+ }
+
+ # Run the resulting program
+ send_log "$tmpdir/$execname >$tmpdir/$execname.out\n"
+ verbose "$tmpdir/$execname >$tmpdir/$execname.out"
+ catch "exec $tmpdir/$execname >$tmpdir/$execname.out" exec_output
+ if ![string match "" $exec_output] then {
+ send_log "$exec_output\n"
+ verbose "$exec_output"
+ fail $test
+ return
+ }
+
+ send_log "diff $tmpdir/$execname.out $srcdir/$subdir/$dat.dat\n"
+ verbose "diff $tmpdir/$execname.out $srcdir/$subdir/$dat.dat"
+ catch "exec diff $tmpdir/$execname.out $srcdir/$subdir/$dat.dat" exec_output
+ set exec_output [prune_warnings $exec_output]
+
+ if {![string match "" $exec_output]} then {
+ send_log "$exec_output\n"
+ verbose "$exec_output"
+ fail $test
+ return
+ }
+
+ pass $test
+}
+
+if [istarget mips*-*-*] {
+ set picflag ""
+} else {
+ # Unfortunately, the gcc argument is -fpic and the cc argument is
+ # -KPIC. We have to try both.
+ set picflag "-fpic"
+ send_log "$CC $picflag\n"
+ verbose "$CC $picflag"
+ catch "exec $CC $picflag" exec_output
+ send_log "$exec_output\n"
+ verbose "--" "$exec_output"
+ if { [string match "*illegal option*" $exec_output] \
+ || [string match "*option ignored*" $exec_output] \
+ || [string match "*unrecognized option*" $exec_output] \
+ || [string match "*passed to ld*" $exec_output] } {
+ if [istarget *-*-sunos4*] {
+ set picflag "-pic"
+ } else {
+ set picflag "-KPIC"
+ }
+ }
+}
+verbose "Using $picflag to compile PIC code"
+
+if ![ld_compile "$CC $CFLAGS $picflag" $srcdir/$subdir/foo.c $tmpdir/foo.o] {
+ unresolved "ELF weak"
+ return
+}
+
+if ![ld_compile "$CC $CFLAGS $picflag" $srcdir/$subdir/bar.c $tmpdir/bar.o] {
+ unresolved "ELF weak"
+ return
+}
+
+if ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/main.c $tmpdir/main.o] {
+ unresolved "ELF weak"
+ return
+}
+
+if {![ld_simple_link $CC $tmpdir/libbar.so "$shared $tmpdir/bar.o"]} {
+ fail "ELF weak"
+ return
+}
+
+if ![ld_compile "$CC $CFLAGS $picflag" $srcdir/$subdir/foo1a.c $tmpdir/foo1a.o] {
+ unresolved "ELF weak"
+ return
+}
+
+if ![ld_compile "$CC $CFLAGS $picflag" $srcdir/$subdir/foo1b.c $tmpdir/foo1b.o] {
+ unresolved "ELF weak"
+ return
+}
+
+if ![ld_compile "$CC $CFLAGS $picflag" $srcdir/$subdir/bar1a.c $tmpdir/bar1a.o] {
+ unresolved "ELF weak"
+ return
+}
+
+if ![ld_compile "$CC $CFLAGS $picflag" $srcdir/$subdir/bar1b.c $tmpdir/bar1b.o] {
+ unresolved "ELF weak"
+ return
+}
+
+if ![ld_compile "$CC $CFLAGS $picflag" $srcdir/$subdir/bar1c.c $tmpdir/bar1c.o] {
+ unresolved "ELF weak"
+ return
+}
+
+if ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/main1.c $tmpdir/main1.o] {
+ unresolved "ELF weak"
+ return
+}
+
+if {![ld_simple_link $CC $tmpdir/libfoo1a.so "$shared $tmpdir/foo1a.o"]} {
+ fail "ELF weak"
+ return
+}
+
+if {![ld_simple_link $CC $tmpdir/libfoo1b.so "$shared $tmpdir/foo1b.o"]} {
+ fail "ELF weak"
+ return
+}
+
+if {![ld_simple_link $CC $tmpdir/libbar1a.so "$shared $tmpdir/bar1a.o $tmpdir/libfoo1a.so"]} {
+ fail "ELF weak"
+ return
+}
+
+build_lib "ELF DSO weak func first" libfoo "foo.o bar.o" dso.dsym
+build_lib "ELF DSO weak func last" libfoo "bar.o foo.o" dso.dsym
+build_lib "ELF DSO weak func first DSO" libfoo "foo.o libbar.so" dsow.dsym
+build_lib "ELF DSO weak func last DSO" libfoo "libbar.so foo.o" dsow.dsym
+build_exec "ELF weak func first" foo "main.o bar.o" "" strong "" strong.sym
+build_exec "ELF weak func last" foo "bar.o main.o" "" strong "" strong.sym
+build_exec "ELF weak func first DSO" foo "main.o libbar.so" "-Wl,-rpath,." weak weak.dsym ""
+build_exec "ELF weak func last DSO" foo "libbar.so main.o" "-Wl,-rpath,." weak weak.dsym ""
+
+build_lib "ELF DSO weak data first" libfoo "bar1a.o foo1a.o" dsodata.dsym
+build_lib "ELF DSO weak data last" libfoo "foo1a.o bar1a.o" dsodata.dsym
+build_lib "ELF DSO weak data first DSO" libfoo "main1.o libfoo1a.so" dsowdata.dsym
+build_lib "ELF DSO weak data last DSO" libfoo "libfoo1a.so main1.o" dsowdata.dsym
+build_lib "ELF DSO weak data first DSO common" libfoo "main1.o libfoo1b.so" dsowdata.dsym
+build_lib "ELF DSO weak data last DSO common" libfoo "libfoo1b.so main1.o" dsowdata.dsym
+build_exec "ELF weak data first" foo "main1.o bar1a.o foo1a.o" "" strongdata "" strongdata.sym
+build_exec "ELF weak data last" foo "foo1a.o main1.o bar1a.o" "" strongdata "" strongdata.sym
+build_exec "ELF weak data first common" foo "main1.o bar1a.o foo1b.o" "" strongdata "" strongcomm.sym
+build_exec "ELF weak data last common" foo "foo1b.o main1.o bar1a.o" "" strongdata "" strongcomm.sym
+build_exec "ELF weak data first DSO" foo "main1.o libbar1a.so libfoo1a.so" "-Wl,-rpath,." weakdata weakdata.dsym ""
+build_exec "ELF weak data last DSO" foo "libfoo1a.so main1.o libbar1a.so" "-Wl,-rpath,." weakdata weakdata.dsym ""
+build_exec "ELF weak data first DSO common" foo "main1.o libbar1a.so libfoo1b.so" "-Wl,-rpath,." weakdata weakdata.dsym ""
+build_exec "ELF weak data last DSO common" foo "libfoo1b.so main1.o libbar1a.so" "-Wl,-rpath,." weakdata weakdata.dsym ""
+
+if ![ld_compile "$CC $CFLAGS $picflag" $srcdir/$subdir/size_foo.c $tmpdir/size_foo.o] {
+ unresolved "ELF weak (size)"
+ return
+}
+
+if ![ld_compile "$CC $CFLAGS $picflag" $srcdir/$subdir/size_bar.c $tmpdir/size_bar.o] {
+ unresolved "ELF weak (size)"
+ return
+}
+
+build_lib "ELF DSO small bar (size)" libsize_bar "size_bar.o" ""
+build_lib "ELF DSO foo with small bar (size)" libsize_foo "size_foo.o libsize_bar.so" ""
+
+if ![ld_compile "$CC $CFLAGS $picflag -DSIZE_BIG" $srcdir/$subdir/size_bar.c $tmpdir/size_bar.o] {
+ unresolved "ELF weak (size)"
+ return
+}
+
+build_lib "ELF DSO big bar (size)" libsize_bar "size_bar.o" ""
+
+if ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/size_main.c $tmpdir/size_main.o] {
+ unresolved "ELF weak (size)"
+ return
+}
+
+build_exec "ELF weak size" size_main "size_main.o libsize_foo.so libsize_bar.so" "-Wl,-rpath,." size "" ""
+
+verbose "size2"
+run_dump_test $srcdir/$subdir/size2
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/foo.c b/binutils-2.21/ld/testsuite/ld-elfweak/foo.c
new file mode 100644
index 0000000..d00b1b5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/foo.c
@@ -0,0 +1,8 @@
+#pragma weak foo
+
+extern void foo ();
+
+void
+foo ()
+{
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/foo1a.c b/binutils-2.21/ld/testsuite/ld-elfweak/foo1a.c
new file mode 100644
index 0000000..a653020
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/foo1a.c
@@ -0,0 +1,7 @@
+int deallocate_foo = 0;
+
+int *
+foo ()
+{
+ return &deallocate_foo;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/foo1b.c b/binutils-2.21/ld/testsuite/ld-elfweak/foo1b.c
new file mode 100644
index 0000000..d71a635
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/foo1b.c
@@ -0,0 +1,7 @@
+int deallocate_foo;
+
+int *
+foo ()
+{
+ return &deallocate_foo;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/main.c b/binutils-2.21/ld/testsuite/ld-elfweak/main.c
new file mode 100644
index 0000000..5ea170c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/main.c
@@ -0,0 +1,19 @@
+#include <stdio.h>
+
+#pragma weak foo
+
+extern void foo ();
+extern void foobar ();
+
+void
+foo ()
+{
+ printf ("weak foo\n");
+}
+
+int
+main ()
+{
+ foobar ();
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/main1.c b/binutils-2.21/ld/testsuite/ld-elfweak/main1.c
new file mode 100644
index 0000000..39f819e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/main1.c
@@ -0,0 +1,11 @@
+#pragma weak deallocate_foo
+int deallocate_foo = 1;
+
+extern void foobar ();
+
+int
+main ()
+{
+ foobar ();
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/size.dat b/binutils-2.21/ld/testsuite/ld-elfweak/size.dat
new file mode 100644
index 0000000..01e79c3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/size.dat
@@ -0,0 +1,3 @@
+1
+2
+3
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/size2.d b/binutils-2.21/ld/testsuite/ld-elfweak/size2.d
new file mode 100644
index 0000000..4468dda
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/size2.d
@@ -0,0 +1,10 @@
+#source: size2a.s
+#source: size2b.s
+#ld:
+#readelf: -s
+Symbol table '.symtab' contains .* entries:
+#...
+ .*: [0-9a-f]* +1 +FUNC +GLOBAL +DEFAULT +[0-9] +__?start
+#...
+ .*: [0-9a-f]* +1 +FUNC +WEAK +DEFAULT +[0-9] +foo
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/size2a.s b/binutils-2.21/ld/testsuite/ld-elfweak/size2a.s
new file mode 100644
index 0000000..c9ad914
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/size2a.s
@@ -0,0 +1,16 @@
+ .text
+ .global _start
+ .global __start
+ .type _start, "function"
+ .type __start, "function"
+_start:
+__start:
+ .byte 0
+ .size _start, 1
+ .size __start, 1
+
+ .weak foo
+ .type foo, "function"
+foo:
+ .byte 0
+ .size foo, 1
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/size2b.s b/binutils-2.21/ld/testsuite/ld-elfweak/size2b.s
new file mode 100644
index 0000000..946c838
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/size2b.s
@@ -0,0 +1,18 @@
+ .text
+ .weak _start
+ .weak __start
+ .type _start, "function"
+ .type __start, "function"
+_start:
+__start:
+ .byte 0
+ .byte 0
+ .size _start, 2
+ .size __start, 2
+
+ .weak foo
+ .type foo, "function"
+foo:
+ .byte 0
+ .byte 0
+ .size foo, 2
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/size_bar.c b/binutils-2.21/ld/testsuite/ld-elfweak/size_bar.c
new file mode 100644
index 0000000..7f32890
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/size_bar.c
@@ -0,0 +1,11 @@
+#include <stdio.h>
+
+void
+bar ()
+{
+#ifdef SIZE_BIG
+ printf ("1\n");
+ printf ("2\n");
+ printf ("3\n");
+#endif
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/size_foo.c b/binutils-2.21/ld/testsuite/ld-elfweak/size_foo.c
new file mode 100644
index 0000000..f7a605a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/size_foo.c
@@ -0,0 +1,9 @@
+#pragma weak bar
+
+extern void bar ();
+
+void
+foo ()
+{
+ bar ();
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/size_main.c b/binutils-2.21/ld/testsuite/ld-elfweak/size_main.c
new file mode 100644
index 0000000..2cee0a9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/size_main.c
@@ -0,0 +1,8 @@
+extern void foo ();
+
+int
+main ()
+{
+ foo ();
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/strong.dat b/binutils-2.21/ld/testsuite/ld-elfweak/strong.dat
new file mode 100644
index 0000000..13693db
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/strong.dat
@@ -0,0 +1 @@
+strong foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/strong.sym b/binutils-2.21/ld/testsuite/ld-elfweak/strong.sym
new file mode 100644
index 0000000..531d358
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/strong.sym
@@ -0,0 +1 @@
+[0-9a-f]+[ ]+g[ ]+F[ ]+\.(text|opd)[ ]+[0-9a-f]+[ ]+(0x[0-9a-f]+ )?foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/strongcomm.sym b/binutils-2.21/ld/testsuite/ld-elfweak/strongcomm.sym
new file mode 100644
index 0000000..2a8c6cd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/strongcomm.sym
@@ -0,0 +1,2 @@
+[0-9a-f]+[ ]+g[ ]+O[ ]+\.s?bss[ ]+[0-9a-f]+[ ]+deallocate_foo
+[0-9a-f]+[ ]+g[ ]+F[ ]+\.(text|opd)[ ]+[0-9a-f]+[ ]+(0x[0-9a-f]+ )?foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/strongdata.dat b/binutils-2.21/ld/testsuite/ld-elfweak/strongdata.dat
new file mode 100644
index 0000000..8232e85
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/strongdata.dat
@@ -0,0 +1 @@
+strong deallocate_foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/strongdata.sym b/binutils-2.21/ld/testsuite/ld-elfweak/strongdata.sym
new file mode 100644
index 0000000..88aa1c9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/strongdata.sym
@@ -0,0 +1,2 @@
+[0-9a-f]+[ ]+g[ ]+O[ ]+\.s?(data|bss)[ ]+[0-9a-f]+[ ]+deallocate_foo
+[0-9a-f]+[ ]+g[ ]+F[ ]+\.(text|opd)[ ]+[0-9a-f]+[ ]+(0x[0-9a-f]+ )?foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/weak.dat b/binutils-2.21/ld/testsuite/ld-elfweak/weak.dat
new file mode 100644
index 0000000..0b54d97
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/weak.dat
@@ -0,0 +1 @@
+weak foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/weak.dsym b/binutils-2.21/ld/testsuite/ld-elfweak/weak.dsym
new file mode 100644
index 0000000..e3aa87a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/weak.dsym
@@ -0,0 +1 @@
+[0-9a-f]+[ ]+w[ ]+DF[ ]+\.(text|opd)[ ]+[0-9a-f]+[ ]+(Base[ ]+|[ ]*)(0x[0-9a-f]+ )?foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/weakdata.dat b/binutils-2.21/ld/testsuite/ld-elfweak/weakdata.dat
new file mode 100644
index 0000000..96668fa
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/weakdata.dat
@@ -0,0 +1 @@
+weak deallocate_foo
diff --git a/binutils-2.21/ld/testsuite/ld-elfweak/weakdata.dsym b/binutils-2.21/ld/testsuite/ld-elfweak/weakdata.dsym
new file mode 100644
index 0000000..5fdc694
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-elfweak/weakdata.dsym
@@ -0,0 +1 @@
+[0-9a-f]+[ ]+w[ ]+DO[ ]+\.s?data[ ]+[0-9a-f]+[ ]+(Base[ ]+|[ ]*)deallocate_foo
diff --git a/binutils-2.21/ld/testsuite/ld-fastcall/export.s b/binutils-2.21/ld/testsuite/ld-fastcall/export.s
new file mode 100644
index 0000000..d8df66d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-fastcall/export.s
@@ -0,0 +1,3 @@
+ .text
+.globl @extern_fastcall_function@0
+@extern_fastcall_function@0:
diff --git a/binutils-2.21/ld/testsuite/ld-fastcall/fastcall.exp b/binutils-2.21/ld/testsuite/ld-fastcall/fastcall.exp
new file mode 100644
index 0000000..f0ee316
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-fastcall/fastcall.exp
@@ -0,0 +1,52 @@
+# Test that the linker can handle fastcall symbols correctly.
+# Copyright 2002, 2005, 2006, 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+set testname "ld (fastcall symbols)"
+
+if {![istarget "i*86-*-*"] && ![istarget "x86_64-*-mingw*"] } {
+ return
+}
+
+if { !([istarget "i*86-*-*pe*"] && ![istarget "i*86-*-opensd*"]) \
+ && ![istarget "i*86-*-cygwin*"] \
+ && ![istarget "x86_64-*-mingw*"] \
+ && ![istarget "i*86-*-mingw*"] } {
+ return
+}
+
+set ldflags ""
+
+if ![ld_assemble $as $srcdir/$subdir/export.s tmpdir/export.o] {
+ verbose "Unable to assemble test file!" 1
+ unresolved $testname
+ return
+}
+
+if ![ld_assemble $as $srcdir/$subdir/import.s tmpdir/import.o] {
+ verbose "Unable to assemble test file!" 1
+ unresolved $testname
+ return
+}
+
+if ![ld_simple_link $ld tmpdir/extern.x "$ldflags tmpdir/export.o tmpdir/import.o"] {
+ fail $testname
+} else {
+ pass $testname
+}
diff --git a/binutils-2.21/ld/testsuite/ld-fastcall/import.s b/binutils-2.21/ld/testsuite/ld-fastcall/import.s
new file mode 100644
index 0000000..e33918b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-fastcall/import.s
@@ -0,0 +1,4 @@
+ .text
+.globl _start
+_start:
+ call @extern_fastcall_function@0
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-1.d b/binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-1.d
new file mode 100644
index 0000000..0e37324
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-1.d
@@ -0,0 +1,57 @@
+#name: FRV uClinux PIC relocs to local symbols, pie linking
+#source: fdpic1.s
+#objdump: -DR -j .text -j .data -j .got -j .plt
+#ld: -pie
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+ <F1>:
+[0-9a-f ]+: 80 3c 00 01 call [0-9a-f]+ <\.F0>
+
+[0-9a-f ]+<\.F0>:
+[0-9a-f ]+: 80 40 f0 0c addi gr15,12,gr0
+[0-9a-f ]+: 80 fc 00 0c setlos 0xc,gr0
+[0-9a-f ]+: 80 f4 00 0c setlo 0xc,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 f0 10 addi gr15,16,gr0
+[0-9a-f ]+: 80 fc 00 10 setlos 0x10,gr0
+[0-9a-f ]+: 80 f4 00 10 setlo 0x10,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 ff f8 addi gr15,-8,gr0
+[0-9a-f ]+: 80 fc ff f8 setlos 0xf+ff8,gr0
+[0-9a-f ]+: 80 f4 ff f8 setlo 0xfff8,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 40 ff ec addi gr15,-20,gr0
+[0-9a-f ]+: 80 fc ff ec setlos 0xf+fec,gr0
+[0-9a-f ]+: 80 f4 ff ec setlo 0xffec,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 f4 00 14 setlo 0x14,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+Disassembly of section \.data:
+
+[0-9a-f ]+<D1>:
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.data
+
+[0-9a-f ]+<\.D0>:
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_32 \.got
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+Disassembly of section \.got:
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x8>:
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 02 add\.p gr0,fp,gr0
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_32 \.got
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.data
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-2.d b/binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-2.d
new file mode 100644
index 0000000..3583a3b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-2.d
@@ -0,0 +1,71 @@
+#name: FRV uClinux PIC relocs to global symbols, pie linking
+#source: fdpic2.s
+#objdump: -DR -j .text -j .data -j .got -j .plt
+#ld: -pie
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<F2>:
+[0-9a-f ]+: 80 3c 00 01 call [0-9a-f]+ <GF0>
+
+[0-9a-f ]+<GF0>:
+[0-9a-f ]+: 80 40 f0 10 addi gr15,16,gr0
+[0-9a-f ]+: 80 fc 00 24 setlos 0x24,gr0
+[0-9a-f ]+: 80 f4 00 20 setlo 0x20,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 f0 0c addi gr15,12,gr0
+[0-9a-f ]+: 80 fc 00 18 setlos 0x18,gr0
+[0-9a-f ]+: 80 f4 00 14 setlo 0x14,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 ff f8 addi gr15,-8,gr0
+[0-9a-f ]+: 80 fc ff f0 setlos 0xf+ff0,gr0
+[0-9a-f ]+: 80 f4 ff e8 setlo 0xffe8,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 40 ff dc addi gr15,-36,gr0
+[0-9a-f ]+: 80 fc ff dc setlos 0xf+fdc,gr0
+[0-9a-f ]+: 80 f4 ff dc setlo 0xffdc,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 f4 00 1c setlo 0x1c,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+Disassembly of section \.dat[0-9a-f ]+:
+
+[0-9a-f ]+<D2>:
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.data
+
+[0-9a-f ]+<GD0>:
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC \.text
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+Disassembly of section \.got:
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x18>:
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 02 add\.p gr0,fp,gr0
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 02 add\.p gr0,fp,gr0
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 02 add\.p gr0,fp,gr0
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC \.text
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC \.text
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC \.text
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.data
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.text
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-5.d b/binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-5.d
new file mode 100644
index 0000000..8565024
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-5.d
@@ -0,0 +1,5 @@
+#name: FRV uClinux PIC relocs to undefined symbols, pie linking
+#source: fdpic5.s
+#objdump: -DR -j .text -j .data -j .got -j .plt
+#ld: -pie
+#error: undefined reference
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-6-fail.d b/binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-6-fail.d
new file mode 100644
index 0000000..b7e93ae
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-6-fail.d
@@ -0,0 +1,5 @@
+#name: FRV uClinux PIC relocs to undefined symbols, pie linking
+#source: fdpic6.s
+#objdump: -DR -j .text -j .data -j .got -j .plt
+#ld: -pie
+#error: different segment
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-6.d b/binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-6.d
new file mode 100644
index 0000000..7bdda5d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-6.d
@@ -0,0 +1,73 @@
+#name: FRV uClinux PIC relocs to weak undefined symbols, pie linking
+#source: fdpic6.s
+#objdump: -DR -j .text -j .data -j .got -j .plt
+#ld: -pie --defsym WD1=D6
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.plt:
+
+[0-9a-f ]+<\.plt>:
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: c0 1a 00 06 bra [0-9a-f]+ <F6-0x10>
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: c0 1a 00 04 bra [0-9a-f]+ <F6-0x10>
+[0-9a-f ]+: 00 00 00 10 add\.p gr0,gr16,gr0
+[0-9a-f ]+: c0 1a 00 02 bra [0-9a-f]+ <F6-0x10>
+[0-9a-f ]+: 00 00 00 18 add\.p gr0,gr24,gr0
+[0-9a-f ]+: 88 08 f1 40 ldd @\(gr15,gr0\),gr4
+[0-9a-f ]+: 80 30 40 00 jmpl @\(gr4,gr0\)
+[0-9a-f ]+: 9c cc ff f0 lddi @\(gr15,-16\),gr14
+[0-9a-f ]+: 80 30 e0 00 jmpl @\(gr14,gr0\)
+Disassembly of section \.text:
+
+[0-9a-f ]+<F6>:
+[0-9a-f ]+: fe 3f ff fe call [0-9a-f]+ <F6-0x8>
+[0-9a-f ]+: 80 40 f0 0c addi gr15,12,gr0
+[0-9a-f ]+: 80 fc 00 24 setlos 0x24,gr0
+[0-9a-f ]+: 80 f4 00 20 setlo 0x20,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 f0 10 addi gr15,16,gr0
+[0-9a-f ]+: 80 fc 00 18 setlos 0x18,gr0
+[0-9a-f ]+: 80 f4 00 1c setlo 0x1c,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 ff f8 addi gr15,-8,gr0
+[0-9a-f ]+: 80 fc ff e8 setlos 0xf*ffffffe8,gr0
+[0-9a-f ]+: 80 f4 ff e0 setlo 0xffe0,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 f4 ff d0 setlo 0xffd0,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 f4 00 14 setlo 0x14,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+Disassembly of section \.dat[0-9a-f ]+:
+
+[0-9a-f ]+<D6>:
+ \.\.\.
+[0-9a-f ]+: R_FRV_32 WD0
+[0-9a-f ]+: R_FRV_FUNCDESC WFb
+[0-9a-f ]+: R_FRV_32 WFb
+Disassembly of section \.got:
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x20>:
+[0-9a-f ]+: 00 00 04 b8 .*
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE WF9
+[0-9a-f ]+: 00 00 00 02 .*
+[0-9a-f ]+: 00 00 04 b0 .*
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE WF8
+[0-9a-f ]+: 00 00 00 02 .*
+[0-9a-f ]+: 00 00 04 a8 .*
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE WF0
+[0-9a-f ]+: 00 00 00 02 .*
+[0-9a-f ]+: 00 00 04 a0 .*
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE WF7
+[0-9a-f ]+: 00 00 00 02 .*
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: R_FRV_32 WF1
+[0-9a-f ]+: R_FRV_FUNCDESC WF4
+[0-9a-f ]+: R_FRV_32 WD2
+[0-9a-f ]+: R_FRV_FUNCDESC WF5
+[0-9a-f ]+: R_FRV_FUNCDESC WF6
+[0-9a-f ]+: R_FRV_32 WF3
+[0-9a-f ]+: R_FRV_32 WF2
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-7.d b/binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-7.d
new file mode 100644
index 0000000..7ebd0b7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-7.d
@@ -0,0 +1,57 @@
+#name: FRV uClinux PIC relocs to local symbols with addends, pie linking
+#source: fdpic7.s
+#objdump: -DR -j .text -j .data -j .got -j .plt
+#ld: -pie
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<F7>:
+[0-9a-f ]+: 80 3c 00 02 call [0-9a-f]+ <\.F0\+0x4>
+
+[0-9a-f ]+<\.F0>:
+[0-9a-f ]+: 80 40 f0 0c addi gr15,12,gr0
+[0-9a-f ]+: 80 fc 00 0c setlos 0xc,gr0
+[0-9a-f ]+: 80 f4 00 0c setlo 0xc,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 f0 10 addi gr15,16,gr0
+[0-9a-f ]+: 80 fc 00 10 setlos 0x10,gr0
+[0-9a-f ]+: 80 f4 00 10 setlo 0x10,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 ff f8 addi gr15,-8,gr0
+[0-9a-f ]+: 80 fc ff f8 setlos 0xf*fffffff8,gr0
+[0-9a-f ]+: 80 f4 ff f8 setlo 0xfff8,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 40 ff f0 addi gr15,-16,gr0
+[0-9a-f ]+: 80 fc ff f0 setlos 0xf+ff0,gr0
+[0-9a-f ]+: 80 f4 ff f0 setlo 0xfff0,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 f4 00 14 setlo 0x14,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+Disassembly of section \.dat[0-9a-f ]+:
+
+[0-9a-f ]+<D7>:
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_32 \.data
+
+[0-9a-f ]+<\.D0>:
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_32 \.got
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+Disassembly of section \.got:
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x8>:
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 02 add\.p gr0,fp,gr0
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_32 \.got
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_32 \.data
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-8.d b/binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-8.d
new file mode 100644
index 0000000..0de4a81
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic-pie-8.d
@@ -0,0 +1,71 @@
+#name: FRV uClinux PIC relocs to global symbols with addends, pie linking
+#source: fdpic8.s
+#objdump: -DR -j .text -j .data -j .got -j .plt
+#ld: -pie
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<F8>:
+[0-9a-f ]+: 80 3c 00 02 call [0-9a-f]+ <GF0\+0x4>
+
+[0-9a-f ]+<GF0>:
+[0-9a-f ]+: 80 40 f0 10 addi gr15,16,gr0
+[0-9a-f ]+: 80 fc 00 14 setlos 0x14,gr0
+[0-9a-f ]+: 80 f4 00 24 setlo 0x24,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 f0 0c addi gr15,12,gr0
+[0-9a-f ]+: 80 fc 00 1c setlos 0x1c,gr0
+[0-9a-f ]+: 80 f4 00 18 setlo 0x18,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 ff f8 addi gr15,-8,gr0
+[0-9a-f ]+: 80 fc ff f0 setlos 0xf+ff0,gr0
+[0-9a-f ]+: 80 f4 ff e8 setlo 0xffe8,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 40 ff e0 addi gr15,-32,gr0
+[0-9a-f ]+: 80 fc ff e0 setlos 0xf+fe0,gr0
+[0-9a-f ]+: 80 f4 ff e0 setlo 0xffe0,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 f4 00 20 setlo 0x20,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+Disassembly of section \.dat[0-9a-f ]+:
+
+[0-9a-f ]+<D8>:
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_32 \.data
+
+[0-9a-f ]+<GD0>:
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC \.text
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+Disassembly of section \.got:
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x18>:
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 02 add\.p gr0,fp,gr0
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 02 add\.p gr0,fp,gr0
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 02 add\.p gr0,fp,gr0
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC \.text
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC \.text
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC \.text
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_32 \.data
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_32 \.text
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-1.d b/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-1.d
new file mode 100644
index 0000000..7f88e18
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-1.d
@@ -0,0 +1,57 @@
+#name: FRV uClinux PIC relocs to local symbols, shared linking
+#source: fdpic1.s
+#objdump: -DR -j .text -j .data -j .got -j .plt
+#ld: -shared
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<F1>:
+[0-9a-f ]+: 80 3c 00 01 call [0-9a-f]+ <\.F0>
+
+[0-9a-f ]+<\.F0>:
+[0-9a-f ]+: 80 40 f0 0c addi gr15,12,gr0
+[0-9a-f ]+: 80 fc 00 0c setlos 0xc,gr0
+[0-9a-f ]+: 80 f4 00 0c setlo 0xc,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 f0 10 addi gr15,16,gr0
+[0-9a-f ]+: 80 fc 00 10 setlos 0x10,gr0
+[0-9a-f ]+: 80 f4 00 10 setlo 0x10,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 ff f8 addi gr15,-8,gr0
+[0-9a-f ]+: 80 fc ff f8 setlos 0xf+ff8,gr0
+[0-9a-f ]+: 80 f4 ff f8 setlo 0xfff8,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 40 ff ec addi gr15,-20,gr0
+[0-9a-f ]+: 80 fc ff ec setlos 0xf+fec,gr0
+[0-9a-f ]+: 80 f4 ff ec setlo 0xffec,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 f4 00 14 setlo 0x14,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+Disassembly of section \.dat[0-9a-f ]+:
+
+[0-9a-f ]+<D1>:
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.data
+
+[0-9a-f ]+<\.D0>:
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_32 \.got
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+Disassembly of section \.got:
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x8>:
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_32 \.got
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.data
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-2-fail.d b/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-2-fail.d
new file mode 100644
index 0000000..0cec4f6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-2-fail.d
@@ -0,0 +1,4 @@
+#name: FRV uClinux PIC relocs to global symbols, failing shared linking
+#source: fdpic2.s
+#ld: -shared
+#error: different segment
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-2.d b/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-2.d
new file mode 100644
index 0000000..cb4b68d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-2.d
@@ -0,0 +1,80 @@
+#name: FRV uClinux PIC relocs to (mostly) global symbols, shared linking
+#source: fdpic2.s
+#objdump: -DR -j .text -j .data -j .got -j .plt
+#ld: -shared --version-script fdpic2min.ldv
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.plt:
+
+[0-9a-f ]+ <\.plt>:
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: c0 1a 00 06 bra [0-9a-f]+ <F2-0x10>
+[0-9a-f ]+: 00 00 00 10 add\.p gr0,gr16,gr0
+[0-9a-f ]+: c0 1a 00 04 bra [0-9a-f]+ <F2-0x10>
+[0-9a-f ]+: 00 00 00 18 add\.p gr0,gr24,gr0
+[0-9a-f ]+: c0 1a 00 02 bra [0-9a-f]+ <F2-0x10>
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: 88 08 f1 40 ldd @\(gr15,gr0\),gr4
+[0-9a-f ]+: 80 30 40 00 jmpl @\(gr4,gr0\)
+[0-9a-f ]+: 9c cc ff f8 lddi @\(gr15,-8\),gr14
+[0-9a-f ]+: 80 30 e0 00 jmpl @\(gr14,gr0\)
+Disassembly of section \.text:
+
+[0-9a-f ]+<F2>:
+[0-9a-f ]+: fe 3f ff fe call [0-9a-f]+ <F2-0x8>
+
+[0-9a-f ]+<GF0>:
+[0-9a-f ]+: 80 40 f0 10 addi gr15,16,gr0
+[0-9a-f ]+: 80 fc 00 24 setlos 0x24,gr0
+[0-9a-f ]+: 80 f4 00 20 setlo 0x20,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 f0 0c addi gr15,12,gr0
+[0-9a-f ]+: 80 fc 00 18 setlos 0x18,gr0
+[0-9a-f ]+: 80 f4 00 14 setlo 0x14,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 ff f0 addi gr15,-16,gr0
+[0-9a-f ]+: 80 fc ff e8 setlos 0xf*ffffffe8,gr0
+[0-9a-f ]+: 80 f4 ff e0 setlo 0xffe0,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 40 ff d8 addi gr15,-40,gr0
+[0-9a-f ]+: 80 fc ff d8 setlos 0xf+fd8,gr0
+[0-9a-f ]+: 80 f4 ff d8 setlo 0xffd8,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 f4 00 1c setlo 0x1c,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+Disassembly of section \.dat[0-9a-f ]+:
+
+[0-9a-f ]+<D2>:
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_32 GD0
+
+[0-9a-f ]+<GD0>:
+ \.\.\.
+[0-9a-f ]+: R_FRV_FUNCDESC GFb
+[0-9a-f ]+: R_FRV_32 GFb
+[0-9A-F ]+isassembly of section \.got:
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x20>:
+[0-9a-f ]+: 00 00 04 a4 .*
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE GF9
+[0-9a-f ]+: 00 00 00 00 .*
+[0-9a-f ]+: 00 00 04 9c .*
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE GF8
+[0-9a-f ]+: 00 00 00 00 .*
+[0-9a-f ]+: 00 00 04 ac .*
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE GF7
+[0-9a-f ]+: 00 00 00 00 .*
+[0-9a-f ]+: 00 00 04 94 .*
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE GF0
+[0-9a-f ]+: 00 00 00 00 .*
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: R_FRV_FUNCDESC GF4
+[0-9a-f ]+: R_FRV_32 GF1
+[0-9a-f ]+: R_FRV_FUNCDESC GF6
+[0-9a-f ]+: R_FRV_FUNCDESC GF5
+[0-9a-f ]+: R_FRV_32 GD4
+[0-9a-f ]+: R_FRV_32 GF3
+[0-9a-f ]+: R_FRV_32 GF2
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-3.d b/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-3.d
new file mode 100644
index 0000000..fceb16a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-3.d
@@ -0,0 +1,83 @@
+#name: FRV uClinux PIC relocs to hidden symbols, shared linking
+#source: fdpic3.s
+#objdump: -DR -j .text -j .data -j .got -j .plt
+#ld: -shared
+
+.*: file format elf.*frv.*
+
+[0-9A-F ]+isassembly of section \.text:
+
+[0-9a-f ]+<F3>:
+[0-9a-f ]+: 80 3c 00 01 call [0-9a-f]+ <HF0>
+
+[0-9a-f ]+<HF0>:
+[0-9a-f ]+: 80 40 f0 0c addi gr15,12,gr0
+[0-9a-f ]+: 80 fc 00 18 setlos 0x18,gr0
+[0-9a-f ]+: 80 f4 00 1c setlo 0x1c,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 f0 10 addi gr15,16,gr0
+[0-9a-f ]+: 80 fc 00 20 setlos 0x20,gr0
+[0-9a-f ]+: 80 f4 00 14 setlo 0x14,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 ff f8 addi gr15,-8,gr0
+[0-9a-f ]+: 80 fc ff e8 setlos 0xf*ffffffe8,gr0
+[0-9a-f ]+: 80 f4 ff d8 setlo 0xffd8,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 40 ff bc addi gr15,-68,gr0
+[0-9a-f ]+: 80 fc ff bc setlos 0xf+fbc,gr0
+[0-9a-f ]+: 80 f4 ff bc setlo 0xffbc,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 f4 00 24 setlo 0x24,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+Disassembly of section \.dat[0-9a-f ]+:
+
+[0-9a-f ]+<D3>:
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.data
+
+[0-9a-f ]+<HD0>:
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_32 \.got
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+Disassembly of section \.got:
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x38>:
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_32 \.got
+[0-9a-f ]+: 00 00 00 28 add\.p gr0,gr40,gr0
+[0-9a-f ]+: R_FRV_32 \.got
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+[0-9a-f ]+: 00 00 00 18 add\.p gr0,gr24,gr0
+[0-9a-f ]+: R_FRV_32 \.got
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.data
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-4.d b/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-4.d
new file mode 100644
index 0000000..4045562
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-4.d
@@ -0,0 +1,71 @@
+#name: FRV uClinux PIC relocs to protected symbols, shared linking
+#source: fdpic4.s
+#objdump: -DR -j .text -j .data -j .got -j .plt
+#ld: -shared
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<F4>:
+[0-9a-f ]+: 80 3c 00 01 call [0-9a-f]+ <PF0>
+
+[0-9a-f ]+<PF0>:
+[0-9a-f ]+: 80 40 f0 10 addi gr15,16,gr0
+[0-9a-f ]+: 80 fc 00 20 setlos 0x20,gr0
+[0-9a-f ]+: 80 f4 00 1c setlo 0x1c,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 f0 0c addi gr15,12,gr0
+[0-9a-f ]+: 80 fc 00 24 setlos 0x24,gr0
+[0-9a-f ]+: 80 f4 00 18 setlo 0x18,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 ff f8 addi gr15,-8,gr0
+[0-9a-f ]+: 80 fc ff f0 setlos 0xf+ff0,gr0
+[0-9a-f ]+: 80 f4 ff e8 setlo 0xffe8,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 40 ff dc addi gr15,-36,gr0
+[0-9a-f ]+: 80 fc ff dc setlos 0xf+fdc,gr0
+[0-9a-f ]+: 80 f4 ff dc setlo 0xffdc,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 f4 00 14 setlo 0x14,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+Disassembly of section \.dat[0-9a-f ]+:
+
+[0-9a-f ]+<D4>:
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.data
+
+[0-9a-f ]+<PD0>:
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC \.text
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+Disassembly of section \.got:
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x18>:
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC \.text
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.data
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC \.text
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC \.text
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-5.d b/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-5.d
new file mode 100644
index 0000000..009c62c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-5.d
@@ -0,0 +1,82 @@
+#name: FRV uClinux PIC relocs to undefined symbols, shared linking
+#source: fdpic5.s
+#objdump: -DRz -j .text -j .data -j .got -j .plt
+#ld: -shared
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.plt:
+
+[0-9a-f ]+<\.plt>:
+[0-9a-f ]+: 00 00 00 10 add\.p gr0,gr16,gr0
+[0-9a-f ]+: c0 1a 00 06 bra [0-9a-f]+ <F5-0x10>
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: c0 1a 00 04 bra [0-9a-f]+ <F5-0x10>
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: c0 1a 00 02 bra [0-9a-f]+ <F5-0x10>
+[0-9a-f ]+: 00 00 00 18 add\.p gr0,gr24,gr0
+[0-9a-f ]+: 88 08 f1 40 ldd @\(gr15,gr0\),gr4
+[0-9a-f ]+: 80 30 40 00 jmpl @\(gr4,gr0\)
+[0-9a-f ]+: 9c cc ff f0 lddi @\(gr15,-16\),gr14
+[0-9a-f ]+: 80 30 e0 00 jmpl @\(gr14,gr0\)
+Disassembly of section \.text:
+
+[0-9a-f ]+<F5>:
+[0-9a-f ]+: fe 3f ff fe call [0-9a-f]+ <F5-0x8>
+[0-9a-f ]+: 80 40 f0 0c addi gr15,12,gr0
+[0-9a-f ]+: 80 fc 00 24 setlos 0x24,gr0
+[0-9a-f ]+: 80 f4 00 20 setlo 0x20,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 f0 10 addi gr15,16,gr0
+[0-9a-f ]+: 80 fc 00 1c setlos 0x1c,gr0
+[0-9a-f ]+: 80 f4 00 18 setlo 0x18,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 ff f8 addi gr15,-8,gr0
+[0-9a-f ]+: 80 fc ff e8 setlos 0xf*ffffffe8,gr0
+[0-9a-f ]+: 80 f4 ff e0 setlo 0xffe0,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 f4 00 14 setlo 0x14,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+Disassembly of section \.dat[0-9a-f ]+:
+
+[0-9a-f ]+<D5>:
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_32 UD0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC UFb
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_32 UFb
+Disassembly of section \.got:
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x20>:
+[0-9a-f ]+: 00 00 04 7c .*
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE UF9
+[0-9a-f ]+: 00 00 00 00 .*
+[0-9a-f ]+: 00 00 04 64 .*
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE UF8
+[0-9a-f ]+: 00 00 00 00 .*
+[0-9a-f ]+: 00 00 04 74 .*
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE UF0
+[0-9a-f ]+: 00 00 00 00 .*
+[0-9a-f ]+: 00 00 04 6c .*
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE UF7
+[0-9a-f ]+: 00 00 00 00 .*
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+[0-9a-f ]+: 00 00 00 00 .*
+[0-9a-f ]+: 00 00 00 00 .*
+[0-9a-f ]+: 00 00 00 00 .*
+[0-9a-f ]+: 00 00 00 00 .*
+[0-9a-f ]+: R_FRV_32 UF1
+[0-9a-f ]+: 00 00 00 00 .*
+[0-9a-f ]+: R_FRV_FUNCDESC UF4
+[0-9a-f ]+: 00 00 00 00 .*
+[0-9a-f ]+: R_FRV_32 UD1
+[0-9a-f ]+: 00 00 00 00 .*
+[0-9a-f ]+: R_FRV_FUNCDESC UF6
+[0-9a-f ]+: 00 00 00 00 .*
+[0-9a-f ]+: R_FRV_FUNCDESC UF5
+[0-9a-f ]+: 00 00 00 00 .*
+[0-9a-f ]+: R_FRV_32 UF3
+[0-9a-f ]+: 00 00 00 00 .*
+[0-9a-f ]+: R_FRV_32 UF2
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-6-fail.d b/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-6-fail.d
new file mode 100644
index 0000000..23a245b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-6-fail.d
@@ -0,0 +1,5 @@
+#name: FRV uClinux PIC relocs to undefined symbols, shared linking
+#source: fdpic6.s
+#objdump: -DR -j .text -j .data -j .got -j .plt
+#ld: -shared
+#error: different segment
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-6.d b/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-6.d
new file mode 100644
index 0000000..06a335f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-6.d
@@ -0,0 +1,73 @@
+#name: FRV uClinux PIC relocs to weak undefined symbols, shared linking
+#source: fdpic6.s
+#objdump: -DR -j .text -j .data -j .got -j .plt
+#ld: -shared --defsym WD1=D6 --version-script fdpic6.ldv
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.plt:
+
+[0-9a-f ]+<\.plt>:
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: c0 1a 00 06 bra [0-9a-f]+ <F6-0x10>
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: c0 1a 00 04 bra [0-9a-f]+ <F6-0x10>
+[0-9a-f ]+: 00 00 00 10 add\.p gr0,gr16,gr0
+[0-9a-f ]+: c0 1a 00 02 bra [0-9a-f]+ <F6-0x10>
+[0-9a-f ]+: 00 00 00 18 add\.p gr0,gr24,gr0
+[0-9a-f ]+: 88 08 f1 40 ldd @\(gr15,gr0\),gr4
+[0-9a-f ]+: 80 30 40 00 jmpl @\(gr4,gr0\)
+[0-9a-f ]+: 9c cc ff f0 lddi @\(gr15,-16\),gr14
+[0-9a-f ]+: 80 30 e0 00 jmpl @\(gr14,gr0\)
+Disassembly of section \.text:
+
+[0-9a-f ]+<F6>:
+[0-9a-f ]+: fe 3f ff fe call [0-9a-f]+ <F6-0x8>
+[0-9a-f ]+: 80 40 f0 0c addi gr15,12,gr0
+[0-9a-f ]+: 80 fc 00 24 setlos 0x24,gr0
+[0-9a-f ]+: 80 f4 00 20 setlo 0x20,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 f0 10 addi gr15,16,gr0
+[0-9a-f ]+: 80 fc 00 18 setlos 0x18,gr0
+[0-9a-f ]+: 80 f4 00 1c setlo 0x1c,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 ff f8 addi gr15,-8,gr0
+[0-9a-f ]+: 80 fc ff e8 setlos 0xf*ffffffe8,gr0
+[0-9a-f ]+: 80 f4 ff e0 setlo 0xffe0,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 f4 ff d0 setlo 0xffd0,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 f4 00 14 setlo 0x14,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+Disassembly of section \.dat[0-9a-f ]+:
+
+[0-9a-f ]+<D6>:
+ \.\.\.
+[0-9a-f ]+: R_FRV_32 WD0
+[0-9a-f ]+: R_FRV_FUNCDESC WFb
+[0-9a-f ]+: R_FRV_32 WFb
+Disassembly of section \.got:
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x20>:
+[0-9a-f ]+: 00 00 03 60 .*
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE WF9
+[0-9a-f ]+: 00 00 00 00 .*
+[0-9a-f ]+: 00 00 03 58 .*
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE WF8
+[0-9a-f ]+: 00 00 00 00 .*
+[0-9a-f ]+: 00 00 03 50 .*
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE WF0
+[0-9a-f ]+: 00 00 00 00 .*
+[0-9a-f ]+: 00 00 03 48 .*
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE WF7
+[0-9a-f ]+: 00 00 00 00 .*
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: R_FRV_32 WF1
+[0-9a-f ]+: R_FRV_FUNCDESC WF4
+[0-9a-f ]+: R_FRV_32 WD2
+[0-9a-f ]+: R_FRV_FUNCDESC WF5
+[0-9a-f ]+: R_FRV_FUNCDESC WF6
+[0-9a-f ]+: R_FRV_32 WF3
+[0-9a-f ]+: R_FRV_32 WF2
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-7.d b/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-7.d
new file mode 100644
index 0000000..2004a84
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-7.d
@@ -0,0 +1,57 @@
+#name: FRV uClinux PIC relocs to local symbols with addends, shared linking
+#source: fdpic7.s
+#objdump: -DR -j .text -j .data -j .got -j .plt
+#ld: -shared
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<F7>:
+[0-9a-f ]+: 80 3c 00 02 call [0-9a-f]+ <\.F0\+0x4>
+
+[0-9a-f ]+<\.F0>:
+[0-9a-f ]+: 80 40 f0 0c addi gr15,12,gr0
+[0-9a-f ]+: 80 fc 00 0c setlos 0xc,gr0
+[0-9a-f ]+: 80 f4 00 0c setlo 0xc,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 f0 10 addi gr15,16,gr0
+[0-9a-f ]+: 80 fc 00 10 setlos 0x10,gr0
+[0-9a-f ]+: 80 f4 00 10 setlo 0x10,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 ff f8 addi gr15,-8,gr0
+[0-9a-f ]+: 80 fc ff f8 setlos 0xf*fffffff8,gr0
+[0-9a-f ]+: 80 f4 ff f8 setlo 0xfff8,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 40 ff f0 addi gr15,-16,gr0
+[0-9a-f ]+: 80 fc ff f0 setlos 0xf+ff0,gr0
+[0-9a-f ]+: 80 f4 ff f0 setlo 0xfff0,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 f4 00 14 setlo 0x14,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+Disassembly of section \.dat[0-9a-f ]+:
+
+[0-9a-f ]+<D7>:
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_32 \.data
+
+[0-9a-f ]+<\.D0>:
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_32 \.got
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+Disassembly of section \.got:
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x8>:
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_32 \.got
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_32 \.data
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-8-fail.d b/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-8-fail.d
new file mode 100644
index 0000000..5634040
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-8-fail.d
@@ -0,0 +1,5 @@
+#name: FRV uClinux PIC relocs to (mostly) global symbols with addends, failing shared linking
+#source: fdpic8.s
+#objdump: -DR -j .text -j .data -j .got -j .plt
+#ld: -shared
+#error: (nonzero addend|may have caused)
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-8.d b/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-8.d
new file mode 100644
index 0000000..543d313
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-8.d
@@ -0,0 +1,83 @@
+#name: FRV uClinux PIC relocs to (mostly) global symbols with addends, shared linking
+#source: fdpic8.s
+#objdump: -DR -j .text -j .data -j .got -j .plt
+#ld: -shared --version-script fdpic8min.ldv
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<F8>:
+[0-9a-f ]+: 80 3c 00 02 call [0-9a-f]+ <GF1\+0x4>
+
+[0-9a-f ]+<GF1>:
+[0-9a-f ]+: 80 40 f0 10 addi gr15,16,gr0
+[0-9a-f ]+: 80 fc 00 14 setlos 0x14,gr0
+[0-9a-f ]+: 80 f4 00 24 setlo 0x24,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 f0 0c addi gr15,12,gr0
+[0-9a-f ]+: 80 fc 00 1c setlos 0x1c,gr0
+[0-9a-f ]+: 80 f4 00 18 setlo 0x18,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 ff f8 addi gr15,-8,gr0
+[0-9a-f ]+: 80 fc ff f0 setlos 0xf+ff0,gr0
+[0-9a-f ]+: 80 f4 ff c8 setlo 0xffc8,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 40 ff c0 addi gr15,-64,gr0
+[0-9a-f ]+: 80 fc ff c0 setlos 0xf+fc0,gr0
+[0-9a-f ]+: 80 f4 ff c0 setlo 0xffc0,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 f4 00 20 setlo 0x20,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9A-F ]+isassembly of section \.dat[0-9a-f ]+:
+
+[0-9a-f ]+<D8>:
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 GD0
+
+[0-9a-f ]+<GD0>:
+[0-9a-f ]+: 00 00 00 10 add\.p gr0,gr16,gr0
+[0-9a-f ]+: R_FRV_32 \.got
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+Disassembly of section \.got:
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x38>:
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_32 \.got
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 GF1
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 GF2
+[0-9a-f ]+: 00 00 00 20 add\.p gr0,gr32,gr0
+[0-9a-f ]+: R_FRV_32 \.got
+[0-9a-f ]+: 00 00 00 18 add\.p gr0,gr24,gr0
+[0-9a-f ]+: R_FRV_32 \.got
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 GD4
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 GF3
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-local-2.d b/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-local-2.d
new file mode 100644
index 0000000..51ca126
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-local-2.d
@@ -0,0 +1,83 @@
+#name: FRV uClinux PIC relocs to forced-local symbols, shared linking
+#source: fdpic2.s
+#objdump: -DR -j .text -j .data -j .got -j .plt
+#ld: -shared --version-script fdpic2.ldv
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<F2>:
+[0-9a-f ]+: 80 3c 00 01 call [0-9a-f]+ <GF0>
+
+[0-9a-f ]+<GF0>:
+[0-9a-f ]+: 80 40 f0 10 addi gr15,16,gr0
+[0-9a-f ]+: 80 fc 00 24 setlos 0x24,gr0
+[0-9a-f ]+: 80 f4 00 20 setlo 0x20,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 f0 0c addi gr15,12,gr0
+[0-9a-f ]+: 80 fc 00 18 setlos 0x18,gr0
+[0-9a-f ]+: 80 f4 00 14 setlo 0x14,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 ff f8 addi gr15,-8,gr0
+[0-9a-f ]+: 80 fc ff d0 setlos 0xf+fd0,gr0
+[0-9a-f ]+: 80 f4 ff c8 setlo 0xffc8,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 40 ff c0 addi gr15,-64,gr0
+[0-9a-f ]+: 80 fc ff c0 setlos 0xf+fc0,gr0
+[0-9a-f ]+: 80 f4 ff c0 setlo 0xffc0,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 f4 00 1c setlo 0x1c,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+Disassembly of section \.dat[0-9a-f ]+:
+
+[0-9a-f ]+<D2>:
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.data
+
+[0-9a-f ]+<GD0>:
+[0-9a-f ]+: 00 00 00 18 add\.p gr0,gr24,gr0
+[0-9a-f ]+: R_FRV_32 \.got
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+Disassembly of section \.got:
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x38>:
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: 00 00 00 10 add\.p gr0,gr16,gr0
+[0-9a-f ]+: R_FRV_32 \.got
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+[0-9a-f ]+: 00 00 00 28 add\.p gr0,gr40,gr0
+[0-9a-f ]+: R_FRV_32 \.got
+[0-9a-f ]+: 00 00 00 20 add\.p gr0,gr32,gr0
+[0-9a-f ]+: R_FRV_32 \.got
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.data
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+[0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0
+[0-9a-f ]+: R_FRV_32 \.text
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-local-8.d b/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-local-8.d
new file mode 100644
index 0000000..8d2c67e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic-shared-local-8.d
@@ -0,0 +1,83 @@
+#name: FRV uClinux PIC relocs to forced-local symbols with addends, shared linking
+#source: fdpic8.s
+#objdump: -DR -j .text -j .data -j .got -j .plt
+#ld: -shared --version-script fdpic8.ldv
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<F8>:
+[0-9a-f ]+: 80 3c 00 02 call [0-9a-f]+ <GF0\+0x4>
+
+[0-9a-f ]+<GF0>:
+[0-9a-f ]+: 80 40 f0 10 addi gr15,16,gr0
+[0-9a-f ]+: 80 fc 00 14 setlos 0x14,gr0
+[0-9a-f ]+: 80 f4 00 24 setlo 0x24,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 f0 0c addi gr15,12,gr0
+[0-9a-f ]+: 80 fc 00 1c setlos 0x1c,gr0
+[0-9a-f ]+: 80 f4 00 18 setlo 0x18,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 ff f8 addi gr15,-8,gr0
+[0-9a-f ]+: 80 fc ff f0 setlos 0xf+ff0,gr0
+[0-9a-f ]+: 80 f4 ff c8 setlo 0xffc8,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 40 ff c4 addi gr15,-60,gr0
+[0-9a-f ]+: 80 fc ff c4 setlos 0xf+fc4,gr0
+[0-9a-f ]+: 80 f4 ff c4 setlo 0xffc4,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 f4 00 20 setlo 0x20,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+Disassembly of section \.dat[0-9a-f ]+:
+
+[0-9a-f ]+<D8>:
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_32 \.data
+
+[0-9a-f ]+<GD0>:
+[0-9a-f ]+: 00 00 00 10 add\.p gr0,gr16,gr0
+[0-9a-f ]+: R_FRV_32 \.got
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+Disassembly of section \.got:
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x38>:
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_32 \.got
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_32 \.text
+[0-9a-f ]+: 00 00 00 20 add\.p gr0,gr32,gr0
+[0-9a-f ]+: R_FRV_32 \.got
+[0-9a-f ]+: 00 00 00 18 add\.p gr0,gr24,gr0
+[0-9a-f ]+: R_FRV_32 \.got
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_32 \.data
+[0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_32 \.text
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic-static-1.d b/binutils-2.21/ld/testsuite/ld-frv/fdpic-static-1.d
new file mode 100644
index 0000000..1c4dce1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic-static-1.d
@@ -0,0 +1,62 @@
+#name: FRV uClinux PIC relocs to local symbols, static linking
+#source: fdpic1.s
+#objdump: -D
+#ld: -static
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<F1>:
+[0-9a-f ]+: 80 3c 00 01 call [0-9a-f]+ <\.F0>
+
+[0-9a-f ]+<\.F0>:
+[0-9a-f ]+: 80 40 f0 0c addi gr15,12,gr0
+[0-9a-f ]+: 80 fc 00 0c setlos 0xc,gr0
+[0-9a-f ]+: 80 f4 00 0c setlo 0xc,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 f0 10 addi gr15,16,gr0
+[0-9a-f ]+: 80 fc 00 10 setlos 0x10,gr0
+[0-9a-f ]+: 80 f4 00 10 setlo 0x10,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 ff f8 addi gr15,-8,gr0
+[0-9a-f ]+: 80 fc ff f8 setlos 0xf*fffffff8,gr0
+[0-9a-f ]+: 80 f4 ff f8 setlo 0xfff8,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 40 ff f0 addi gr15,-16,gr0
+[0-9a-f ]+: 80 fc ff f0 setlos 0xf*fffffff0,gr0
+[0-9a-f ]+: 80 f4 ff f0 setlo 0xfff0,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 f4 00 14 setlo 0x14,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+Disassembly of section \.rofixup:
+
+[0-9a-f ]+<__ROFIXUP_LIST__>:
+[0-9a-f ]+: 00 01 41 24 sub\.p gr20,gr36,gr0
+[0-9a-f ]+: 00 01 41 28 sub\.p gr20,gr40,gr0
+[0-9a-f ]+: 00 01 41 10 sub\.p gr20,gr16,gr0
+[0-9a-f ]+: 00 01 41 14 sub\.p gr20,gr20,gr0
+[0-9a-f ]+: 00 01 41 2c sub\.p gr20,gr44,gr0
+[0-9a-f ]+: 00 01 41 04 sub\.p gr20,gr4,gr0
+[0-9a-f ]+: 00 01 41 08 sub\.p gr20,gr8,gr0
+[0-9a-f ]+: 00 01 41 0c sub\.p gr20,gr12,gr0
+[0-9a-f ]+: 00 01 41 18 sub\.p gr20,gr24,gr0
+Disassembly of section \.dat[0-9a-f ]+:
+
+[0-9a-f ]+<D1>:
+[0-9a-f ]+: 00 01 41 08 sub\.p gr20,gr8,gr0
+
+[0-9a-f ]+<\.D0>:
+[0-9a-f ]+: 00 01 41 10 sub\.p gr20,gr16,gr0
+[0-9a-f ]+: 00 01 00 98 addx\.p gr16,gr24,gr0,icc0
+Disassembly of section \.got:
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x8>:
+[0-9a-f ]+: 00 01 00 98 addx\.p gr16,gr24,gr0,icc0
+[0-9a-f ]+: 00 01 41 18 sub\.p gr20,gr24,gr0
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: 00 01 00 98 addx\.p gr16,gr24,gr0,icc0
+[0-9a-f ]+: 00 01 41 10 sub\.p gr20,gr16,gr0
+[0-9a-f ]+: 00 01 41 08 sub\.p gr20,gr8,gr0
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic-static-2.d b/binutils-2.21/ld/testsuite/ld-frv/fdpic-static-2.d
new file mode 100644
index 0000000..d2b794f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic-static-2.d
@@ -0,0 +1,94 @@
+#name: FRV uClinux PIC relocs to global symbols, static linking
+#source: fdpic2.s
+#objdump: -D
+#ld: -static
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<F2>:
+[0-9a-f ]+: 80 3c 00 01 call [0-9a-f]+ <GF0>
+
+[0-9a-f ]+<GF0>:
+[0-9a-f ]+: 80 40 f0 10 addi gr15,16,gr0
+[0-9a-f ]+: 80 fc 00 24 setlos 0x24,gr0
+[0-9a-f ]+: 80 f4 00 20 setlo 0x20,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 f0 0c addi gr15,12,gr0
+[0-9a-f ]+: 80 fc 00 18 setlos 0x18,gr0
+[0-9a-f ]+: 80 f4 00 14 setlo 0x14,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 ff f8 addi gr15,-8,gr0
+[0-9a-f ]+: 80 fc ff d0 setlos 0xf*ffffffd0,gr0
+[0-9a-f ]+: 80 f4 ff c8 setlo 0xffc8,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 40 ff c0 addi gr15,-64,gr0
+[0-9a-f ]+: 80 fc ff c0 setlos 0xf*ffffffc0,gr0
+[0-9a-f ]+: 80 f4 ff c0 setlo 0xffc0,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 f4 00 1c setlo 0x1c,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+Disassembly of section \.rofixup:
+
+[0-9a-f ]+<__ROFIXUP_LIST__>:
+[0-9a-f ]+: 00 01 41 98 subx\.p gr20,gr24,gr0,icc0
+[0-9a-f ]+: 00 01 41 ac subx\.p gr20,gr44,gr0,icc0
+[0-9a-f ]+: 00 01 41 a8 subx\.p gr20,gr40,gr0,icc0
+[0-9a-f ]+: 00 01 41 94 subx\.p gr20,gr20,gr0,icc0
+[0-9a-f ]+: 00 01 41 60 subcc\.p gr20,gr32,gr0,icc0
+[0-9a-f ]+: 00 01 41 64 subcc\.p gr20,gr36,gr0,icc0
+[0-9a-f ]+: 00 01 41 a0 subx\.p gr20,gr32,gr0,icc0
+[0-9a-f ]+: 00 01 41 70 subcc\.p gr20,gr48,gr0,icc0
+[0-9a-f ]+: 00 01 41 74 subcc\.p gr20,gr52,gr0,icc0
+[0-9a-f ]+: 00 01 41 9c subx\.p gr20,gr28,gr0,icc0
+[0-9a-f ]+: 00 01 41 78 subcc\.p gr20,gr56,gr0,icc0
+[0-9a-f ]+: 00 01 41 7c subcc\.p gr20,gr60,gr0,icc0
+[0-9a-f ]+: 00 01 41 80 subx\.p gr20,gr0,gr0,icc0
+[0-9a-f ]+: 00 01 41 84 subx\.p gr20,gr4,gr0,icc0
+[0-9a-f ]+: 00 01 41 58 subcc\.p gr20,gr24,gr0,icc0
+[0-9a-f ]+: 00 01 41 5c subcc\.p gr20,gr28,gr0,icc0
+[0-9a-f ]+: 00 01 41 50 subcc\.p gr20,gr16,gr0,icc0
+[0-9a-f ]+: 00 01 41 54 subcc\.p gr20,gr20,gr0,icc0
+[0-9a-f ]+: 00 01 41 a4 subx\.p gr20,gr36,gr0,icc0
+[0-9a-f ]+: 00 01 41 44 subcc\.p gr20,gr4,gr0,icc0
+[0-9a-f ]+: 00 01 41 68 subcc\.p gr20,gr40,gr0,icc0
+[0-9a-f ]+: 00 01 41 6c subcc\.p gr20,gr44,gr0,icc0
+[0-9a-f ]+: 00 01 41 48 subcc\.p gr20,gr8,gr0,icc0
+[0-9a-f ]+: 00 01 41 4c subcc\.p gr20,gr12,gr0,icc0
+[0-9a-f ]+: 00 01 41 88 subx\.p gr20,gr8,gr0,icc0
+Disassembly of section \.dat[0-9a-f ]+:
+
+[0-9a-f ]+<D2>:
+[0-9a-f ]+: 00 01 41 48 subcc\.p gr20,gr8,gr0,icc0
+
+[0-9a-f ]+<GD0>:
+[0-9a-f ]+: 00 01 41 68 subcc\.p gr20,gr40,gr0,icc0
+[0-9a-f ]+: 00 01 00 98 addx\.p gr16,gr24,gr0,icc0
+Disassembly of section \.got:
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x38>:
+[0-9a-f ]+: 00 01 00 98 addx\.p gr16,gr24,gr0,icc0
+[0-9a-f ]+: 00 01 41 88 subx\.p gr20,gr8,gr0,icc0
+[0-9a-f ]+: 00 01 00 98 addx\.p gr16,gr24,gr0,icc0
+[0-9a-f ]+: 00 01 41 88 subx\.p gr20,gr8,gr0,icc0
+[0-9a-f ]+: 00 01 00 98 addx\.p gr16,gr24,gr0,icc0
+[0-9a-f ]+: 00 01 41 88 subx\.p gr20,gr8,gr0,icc0
+[0-9a-f ]+: 00 01 00 98 addx\.p gr16,gr24,gr0,icc0
+[0-9a-f ]+: 00 01 41 88 subx\.p gr20,gr8,gr0,icc0
+[0-9a-f ]+: 00 01 00 98 addx\.p gr16,gr24,gr0,icc0
+[0-9a-f ]+: 00 01 41 88 subx\.p gr20,gr8,gr0,icc0
+[0-9a-f ]+: 00 01 00 98 addx\.p gr16,gr24,gr0,icc0
+[0-9a-f ]+: 00 01 41 88 subx\.p gr20,gr8,gr0,icc0
+[0-9a-f ]+: 00 01 00 98 addx\.p gr16,gr24,gr0,icc0
+[0-9a-f ]+: 00 01 41 88 subx\.p gr20,gr8,gr0,icc0
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: 00 01 41 60 subcc\.p gr20,gr32,gr0,icc0
+[0-9a-f ]+: 00 01 00 98 addx\.p gr16,gr24,gr0,icc0
+[0-9a-f ]+: 00 01 41 78 subcc\.p gr20,gr56,gr0,icc0
+[0-9a-f ]+: 00 01 41 70 subcc\.p gr20,gr48,gr0,icc0
+[0-9a-f ]+: 00 01 41 48 subcc\.p gr20,gr8,gr0,icc0
+[0-9a-f ]+: 00 01 00 98 addx\.p gr16,gr24,gr0,icc0
+[0-9a-f ]+: 00 01 00 98 addx\.p gr16,gr24,gr0,icc0
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic-static-5.d b/binutils-2.21/ld/testsuite/ld-frv/fdpic-static-5.d
new file mode 100644
index 0000000..ce687b8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic-static-5.d
@@ -0,0 +1,5 @@
+#name: FRV uClinux PIC relocs to undefined symbols, static linking
+#source: fdpic5.s
+#objdump: -D
+#ld: -static
+#error: undefined reference
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic-static-6.d b/binutils-2.21/ld/testsuite/ld-frv/fdpic-static-6.d
new file mode 100644
index 0000000..491b7c7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic-static-6.d
@@ -0,0 +1,43 @@
+#name: FRV uClinux PIC relocs to weak undefined symbols, static linking
+#source: fdpic6.s
+#objdump: -D
+#ld: -static
+#warning: different segment
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<F6>:
+[0-9a-f ]+: fe 3f bf db call 0 <_gp-0xf8d8>
+[0-9a-f ]+: 80 40 f0 0c addi gr15,12,gr0
+[0-9a-f ]+: 80 fc 00 24 setlos 0x24,gr0
+[0-9a-f ]+: 80 f4 00 20 setlo 0x20,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 f0 10 addi gr15,16,gr0
+[0-9a-f ]+: 80 fc 00 18 setlos 0x18,gr0
+[0-9a-f ]+: 80 f4 00 1c setlo 0x1c,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 ff f8 addi gr15,-8,gr0
+[0-9a-f ]+: 80 fc ff f0 setlos 0xf*fffffff0,gr0
+[0-9a-f ]+: 80 f4 ff e8 setlo 0xffe8,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 f4 be e0 setlo 0xbee0,gr0
+[0-9a-f ]+: 80 f8 ff fe sethi 0xfffe,gr0
+[0-9a-f ]+: 80 f4 00 14 setlo 0x14,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+Disassembly of section \.rofixup:
+
+[0-9a-f ]+<__ROFIXUP_LIST__>:
+[0-9a-f ]+: 00 01 41 20 sub\.p gr20,gr32,gr0
+Disassembly of section \.dat[0-9a-f ]+:
+
+[0-9a-f ]+<D6>:
+ \.\.\.
+Disassembly of section \.got:
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x38>:
+ \.\.\.
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic-static-7.d b/binutils-2.21/ld/testsuite/ld-frv/fdpic-static-7.d
new file mode 100644
index 0000000..6f8313c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic-static-7.d
@@ -0,0 +1,62 @@
+#name: FRV uClinux PIC relocs to local symbols with addends, static linking
+#source: fdpic7.s
+#objdump: -D
+#ld: -static
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<F7>:
+[0-9a-f ]+: 80 3c 00 02 call [0-9a-f]+ <\.F0\+0x4>
+
+[0-9a-f ]+<\.F0>:
+[0-9a-f ]+: 80 40 f0 0c addi gr15,12,gr0
+[0-9a-f ]+: 80 fc 00 0c setlos 0xc,gr0
+[0-9a-f ]+: 80 f4 00 0c setlo 0xc,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 f0 10 addi gr15,16,gr0
+[0-9a-f ]+: 80 fc 00 10 setlos 0x10,gr0
+[0-9a-f ]+: 80 f4 00 10 setlo 0x10,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 ff f8 addi gr15,-8,gr0
+[0-9a-f ]+: 80 fc ff f8 setlos 0xf*fffffff8,gr0
+[0-9a-f ]+: 80 f4 ff f8 setlo 0xfff8,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 40 ff f4 addi gr15,-12,gr0
+[0-9a-f ]+: 80 fc ff f4 setlos 0xf*fffffff4,gr0
+[0-9a-f ]+: 80 f4 ff f4 setlo 0xfff4,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 f4 00 14 setlo 0x14,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+Disassembly of section \.rofixup:
+
+[0-9a-f ]+<__ROFIXUP_LIST__>:
+[0-9a-f ]+: 00 01 41 24 sub\.p gr20,gr36,gr0
+[0-9a-f ]+: 00 01 41 28 sub\.p gr20,gr40,gr0
+[0-9a-f ]+: 00 01 41 10 sub\.p gr20,gr16,gr0
+[0-9a-f ]+: 00 01 41 14 sub\.p gr20,gr20,gr0
+[0-9a-f ]+: 00 01 41 2c sub\.p gr20,gr44,gr0
+[0-9a-f ]+: 00 01 41 04 sub\.p gr20,gr4,gr0
+[0-9a-f ]+: 00 01 41 08 sub\.p gr20,gr8,gr0
+[0-9a-f ]+: 00 01 41 0c sub\.p gr20,gr12,gr0
+[0-9a-f ]+: 00 01 41 18 sub\.p gr20,gr24,gr0
+Disassembly of section \.dat[0-9a-f ]+:
+
+[0-9a-f ]+<D7>:
+[0-9a-f ]+: 00 01 41 0c sub\.p gr20,gr12,gr0
+
+[0-9a-f ]+<\.D0>:
+[0-9a-f ]+: 00 01 41 10 sub\.p gr20,gr16,gr0
+[0-9a-f ]+: 00 01 00 9c addx\.p gr16,gr28,gr0,icc0
+Disassembly of section \.got:
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x8>:
+[0-9a-f ]+: 00 01 00 9c addx\.p gr16,gr28,gr0,icc0
+[0-9a-f ]+: 00 01 41 18 sub\.p gr20,gr24,gr0
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: 00 01 00 9c addx\.p gr16,gr28,gr0,icc0
+[0-9a-f ]+: 00 01 41 10 sub\.p gr20,gr16,gr0
+[0-9a-f ]+: 00 01 41 0c sub\.p gr20,gr12,gr0
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic-static-8.d b/binutils-2.21/ld/testsuite/ld-frv/fdpic-static-8.d
new file mode 100644
index 0000000..c0cc732
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic-static-8.d
@@ -0,0 +1,94 @@
+#name: FRV uClinux PIC relocs to global symbols with addends, static linking
+#source: fdpic8.s
+#objdump: -D
+#ld: -static
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<F8>:
+[0-9a-f ]+: 80 3c 00 02 call [0-9a-f]+ <GF0\+0x4>
+
+[0-9a-f ]+<GF0>:
+[0-9a-f ]+: 80 40 f0 10 addi gr15,16,gr0
+[0-9a-f ]+: 80 fc 00 14 setlos 0x14,gr0
+[0-9a-f ]+: 80 f4 00 24 setlo 0x24,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 f0 0c addi gr15,12,gr0
+[0-9a-f ]+: 80 fc 00 1c setlos 0x1c,gr0
+[0-9a-f ]+: 80 f4 00 18 setlo 0x18,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+[0-9a-f ]+: 80 40 ff f8 addi gr15,-8,gr0
+[0-9a-f ]+: 80 fc ff f0 setlos 0xf*fffffff0,gr0
+[0-9a-f ]+: 80 f4 ff c8 setlo 0xffc8,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 40 ff c4 addi gr15,-60,gr0
+[0-9a-f ]+: 80 fc ff c4 setlos 0xf*ffffffc4,gr0
+[0-9a-f ]+: 80 f4 ff c4 setlo 0xffc4,gr0
+[0-9a-f ]+: 80 f8 ff ff sethi 0xffff,gr0
+[0-9a-f ]+: 80 f4 00 20 setlo 0x20,gr0
+[0-9a-f ]+: 80 f8 00 00 sethi hi\(0x0\),gr0
+Disassembly of section \.rofixup:
+
+[0-9a-f ]+<__ROFIXUP_LIST__>:
+[0-9a-f ]+: 00 01 41 98 subx\.p gr20,gr24,gr0,icc0
+[0-9a-f ]+: 00 01 41 9c subx\.p gr20,gr28,gr0,icc0
+[0-9a-f ]+: 00 01 41 ac subx\.p gr20,gr44,gr0,icc0
+[0-9a-f ]+: 00 01 41 94 subx\.p gr20,gr20,gr0,icc0
+[0-9a-f ]+: 00 01 41 58 subcc\.p gr20,gr24,gr0,icc0
+[0-9a-f ]+: 00 01 41 5c subcc\.p gr20,gr28,gr0,icc0
+[0-9a-f ]+: 00 01 41 a4 subx\.p gr20,gr36,gr0,icc0
+[0-9a-f ]+: 00 01 41 68 subcc\.p gr20,gr40,gr0,icc0
+[0-9a-f ]+: 00 01 41 6c subcc\.p gr20,gr44,gr0,icc0
+[0-9a-f ]+: 00 01 41 a0 subx\.p gr20,gr32,gr0,icc0
+[0-9a-f ]+: 00 01 41 70 subcc\.p gr20,gr48,gr0,icc0
+[0-9a-f ]+: 00 01 41 74 subcc\.p gr20,gr52,gr0,icc0
+[0-9a-f ]+: 00 01 41 80 subx\.p gr20,gr0,gr0,icc0
+[0-9a-f ]+: 00 01 41 84 subx\.p gr20,gr4,gr0,icc0
+[0-9a-f ]+: 00 01 41 78 subcc\.p gr20,gr56,gr0,icc0
+[0-9a-f ]+: 00 01 41 7c subcc\.p gr20,gr60,gr0,icc0
+[0-9a-f ]+: 00 01 41 50 subcc\.p gr20,gr16,gr0,icc0
+[0-9a-f ]+: 00 01 41 54 subcc\.p gr20,gr20,gr0,icc0
+[0-9a-f ]+: 00 01 41 a8 subx\.p gr20,gr40,gr0,icc0
+[0-9a-f ]+: 00 01 41 44 subcc\.p gr20,gr4,gr0,icc0
+[0-9a-f ]+: 00 01 41 60 subcc\.p gr20,gr32,gr0,icc0
+[0-9a-f ]+: 00 01 41 64 subcc\.p gr20,gr36,gr0,icc0
+[0-9a-f ]+: 00 01 41 48 subcc\.p gr20,gr8,gr0,icc0
+[0-9a-f ]+: 00 01 41 4c subcc\.p gr20,gr12,gr0,icc0
+[0-9a-f ]+: 00 01 41 88 subx\.p gr20,gr8,gr0,icc0
+Disassembly of section \.dat[0-9a-f ]+:
+
+[0-9a-f ]+<D8>:
+[0-9a-f ]+: 00 01 41 4c subcc\.p gr20,gr12,gr0,icc0
+
+[0-9a-f ]+<GD0>:
+[0-9a-f ]+: 00 01 41 60 subcc\.p gr20,gr32,gr0,icc0
+[0-9a-f ]+: 00 01 00 9c addx\.p gr16,gr28,gr0,icc0
+Disassembly of section \.got:
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x38>:
+[0-9a-f ]+: 00 01 00 9c addx\.p gr16,gr28,gr0,icc0
+[0-9a-f ]+: 00 01 41 88 subx\.p gr20,gr8,gr0,icc0
+[0-9a-f ]+: 00 01 00 9c addx\.p gr16,gr28,gr0,icc0
+[0-9a-f ]+: 00 01 41 88 subx\.p gr20,gr8,gr0,icc0
+[0-9a-f ]+: 00 01 00 9c addx\.p gr16,gr28,gr0,icc0
+[0-9a-f ]+: 00 01 41 88 subx\.p gr20,gr8,gr0,icc0
+[0-9a-f ]+: 00 01 00 9c addx\.p gr16,gr28,gr0,icc0
+[0-9a-f ]+: 00 01 41 88 subx\.p gr20,gr8,gr0,icc0
+[0-9a-f ]+: 00 01 00 9c addx\.p gr16,gr28,gr0,icc0
+[0-9a-f ]+: 00 01 41 88 subx\.p gr20,gr8,gr0,icc0
+[0-9a-f ]+: 00 01 00 9c addx\.p gr16,gr28,gr0,icc0
+[0-9a-f ]+: 00 01 41 88 subx\.p gr20,gr8,gr0,icc0
+[0-9a-f ]+: 00 01 00 9c addx\.p gr16,gr28,gr0,icc0
+[0-9a-f ]+: 00 01 41 88 subx\.p gr20,gr8,gr0,icc0
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: 00 01 41 58 subcc\.p gr20,gr24,gr0,icc0
+[0-9a-f ]+: 00 01 00 9c addx\.p gr16,gr28,gr0,icc0
+[0-9a-f ]+: 00 01 00 9c addx\.p gr16,gr28,gr0,icc0
+[0-9a-f ]+: 00 01 41 70 subcc\.p gr20,gr48,gr0,icc0
+[0-9a-f ]+: 00 01 41 68 subcc\.p gr20,gr40,gr0,icc0
+[0-9a-f ]+: 00 01 41 4c subcc\.p gr20,gr12,gr0,icc0
+[0-9a-f ]+: 00 01 00 9c addx\.p gr16,gr28,gr0,icc0
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic.exp b/binutils-2.21/ld/testsuite/ld-frv/fdpic.exp
new file mode 100644
index 0000000..90da0d3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic.exp
@@ -0,0 +1,69 @@
+# Expect script for FRV FDPIC linker tests
+# Copyright 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+if {![istarget frv*-*-*] || ![is_elf_format]} {
+ return
+}
+
+global ASFLAGS
+set saved_ASFLAGS "$ASFLAGS"
+set ASFLAGS "$ASFLAGS -mfdpic"
+
+global LDFLAGS
+set saved_LDFLAGS "$LDFLAGS"
+set LDFLAGS "$LDFLAGS -melf32frvfd"
+
+run_dump_test "fdpic-static-1"
+run_dump_test "fdpic-pie-1"
+run_dump_test "fdpic-shared-1"
+
+run_dump_test "fdpic-static-2"
+run_dump_test "fdpic-pie-2"
+run_dump_test "fdpic-shared-2-fail"
+run_dump_test "fdpic-shared-2"
+run_dump_test "fdpic-shared-local-2"
+
+run_dump_test "fdpic-shared-3"
+
+run_dump_test "fdpic-shared-4"
+
+run_dump_test "fdpic-static-5"
+run_dump_test "fdpic-pie-5"
+run_dump_test "fdpic-shared-5"
+
+run_dump_test "fdpic-static-6"
+run_dump_test "fdpic-pie-6-fail"
+run_dump_test "fdpic-pie-6"
+run_dump_test "fdpic-shared-6-fail"
+run_dump_test "fdpic-shared-6"
+
+run_dump_test "fdpic-static-7"
+run_dump_test "fdpic-pie-7"
+run_dump_test "fdpic-shared-7"
+
+run_dump_test "fdpic-static-8"
+run_dump_test "fdpic-pie-8"
+run_dump_test "fdpic-shared-8-fail"
+run_dump_test "fdpic-shared-8"
+run_dump_test "fdpic-shared-local-8"
+
+set LDFLAGS "$saved_LDFLAGS"
+set ASFLAGS "$saved_ASFLAGS"
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic1.s b/binutils-2.21/ld/testsuite/ld-frv/fdpic1.s
new file mode 100644
index 0000000..29f7fff
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic1.s
@@ -0,0 +1,64 @@
+ .text
+ .weak _start
+_start:
+ .global F1
+ .type F1,@function
+F1:
+ call .F0
+
+.F0:
+.F1:
+.F2:
+.F3:
+.F4:
+.F5:
+.F6:
+.F7:
+.F8:
+.F9:
+.Fa:
+.Fb:
+.Fc:
+ addi gr15, #got12(.F1), gr0
+
+ setlos #gotlo(.F2), gr0
+
+ setlo #gotlo(.F3), gr0
+ sethi #gothi(.F3), gr0
+
+ addi gr15, #gotfuncdesc12(.F4), gr0
+
+ setlos #gotfuncdesclo(.F5), gr0
+
+ setlo #gotfuncdesclo(.F6), gr0
+ sethi #gotfuncdeschi(.F6), gr0
+
+ addi gr15, #gotofffuncdesc12(.F7), gr0
+
+ setlos #gotofffuncdesclo(.F8), gr0
+
+ setlo #gotofffuncdesclo(.F9), gr0
+ sethi #gotofffuncdeschi(.F9), gr0
+
+ addi gr15, #gotoff12(.D1), gr0
+
+ setlos #gotofflo(.D2), gr0
+
+ setlo #gotofflo(.D3), gr0
+ sethi #gotoffhi(.D3), gr0
+
+ setlo #gotlo(.D4), gr0
+ sethi #gothi(.D4), gr0
+
+ .data
+ .global D1
+D1:
+ .word .D0
+ .section .data.rel.local
+.D0:
+.D1:
+.D2:
+.D3:
+.D4:
+ .picptr funcdesc(.Fb)
+ .word .Fb
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic2.ldv b/binutils-2.21/ld/testsuite/ld-frv/fdpic2.ldv
new file mode 100644
index 0000000..b5aad4f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic2.ldv
@@ -0,0 +1 @@
+{ global: _start; F2; D2; local: *; };
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic2.s b/binutils-2.21/ld/testsuite/ld-frv/fdpic2.s
new file mode 100644
index 0000000..2987643
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic2.s
@@ -0,0 +1,81 @@
+ .text
+ .weak _start
+_start:
+ .global F2
+ .type F2,@function
+F2:
+ call GF0
+ .global GF0
+ .global GF1
+ .global GF2
+ .global GF3
+ .global GF4
+ .global GF5
+ .global GF6
+ .global GF7
+ .global GF8
+ .global GF9
+ .global GFa
+ .global GFb
+ .global GFc
+GF0:
+GF1:
+GF2:
+GF3:
+GF4:
+GF5:
+GF6:
+GF7:
+GF8:
+GF9:
+GFa:
+GFb:
+GFc:
+ addi gr15, #got12(GF1), gr0
+
+ setlos #gotlo(GF2), gr0
+
+ setlo #gotlo(GF3), gr0
+ sethi #gothi(GF3), gr0
+
+ addi gr15, #gotfuncdesc12(GF4), gr0
+
+ setlos #gotfuncdesclo(GF5), gr0
+
+ setlo #gotfuncdesclo(GF6), gr0
+ sethi #gotfuncdeschi(GF6), gr0
+
+ addi gr15, #gotofffuncdesc12(GF7), gr0
+
+ setlos #gotofffuncdesclo(GF8), gr0
+
+ setlo #gotofffuncdesclo(GF9), gr0
+ sethi #gotofffuncdeschi(GF9), gr0
+
+ addi gr15, #gotoff12(GD1), gr0
+
+ setlos #gotofflo(GD2), gr0
+
+ setlo #gotofflo(GD3), gr0
+ sethi #gotoffhi(GD3), gr0
+
+ setlo #gotlo(GD4), gr0
+ sethi #gothi(GD4), gr0
+
+ .data
+ .global D2
+D2:
+ .word GD0
+
+ .global GD0
+ .global GD1
+ .global GD2
+ .global GD3
+ .global GD4
+GD0:
+GD1:
+GD2:
+GD3:
+GD4:
+ .picptr funcdesc(GFb)
+ .word GFb
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic2min.ldv b/binutils-2.21/ld/testsuite/ld-frv/fdpic2min.ldv
new file mode 100644
index 0000000..2804526
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic2min.ldv
@@ -0,0 +1 @@
+{ global: _start; F*; GF*; D2; GD0; GD4; local: GD1; GD2; GD3; };
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic3.s b/binutils-2.21/ld/testsuite/ld-frv/fdpic3.s
new file mode 100644
index 0000000..f867b93
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic3.s
@@ -0,0 +1,99 @@
+ .text
+ .weak _start
+_start:
+ .global F3
+ .type F3,@function
+F3:
+ call HF0
+ .global HF0
+ .hidden HF0
+ .global HF1
+ .hidden HF1
+ .global HF2
+ .hidden HF2
+ .global HF3
+ .hidden HF3
+ .global HF4
+ .hidden HF4
+ .global HF5
+ .hidden HF5
+ .global HF6
+ .hidden HF6
+ .global HF7
+ .hidden HF7
+ .global HF8
+ .hidden HF8
+ .global HF9
+ .hidden HF9
+ .global HFa
+ .hidden HFa
+ .global HFb
+ .hidden HFb
+ .global HFc
+ .hidden HFc
+HF0:
+HF1:
+HF2:
+HF3:
+HF4:
+HF5:
+HF6:
+HF7:
+HF8:
+HF9:
+HFa:
+HFb:
+HFc:
+ addi gr15, #got12(HF1), gr0
+
+ setlos #gotlo(HF2), gr0
+
+ setlo #gotlo(HF3), gr0
+ sethi #gothi(HF3), gr0
+
+ addi gr15, #gotfuncdesc12(HF4), gr0
+
+ setlos #gotfuncdesclo(HF5), gr0
+
+ setlo #gotfuncdesclo(HF6), gr0
+ sethi #gotfuncdeschi(HF6), gr0
+
+ addi gr15, #gotofffuncdesc12(HF7), gr0
+
+ setlos #gotofffuncdesclo(HF8), gr0
+
+ setlo #gotofffuncdesclo(HF9), gr0
+ sethi #gotofffuncdeschi(HF9), gr0
+
+ addi gr15, #gotoff12(HD1), gr0
+
+ setlos #gotofflo(HD2), gr0
+
+ setlo #gotofflo(HD3), gr0
+ sethi #gotoffhi(HD3), gr0
+
+ setlo #gotlo(HD4), gr0
+ sethi #gothi(HD4), gr0
+
+ .data
+ .global D3
+D3:
+ .word HD0
+
+ .global HD0
+ .hidden HD0
+ .global HD1
+ .hidden HD1
+ .global HD2
+ .hidden HD2
+ .global HD3
+ .hidden HD3
+ .global HD4
+ .hidden HD4
+HD0:
+HD1:
+HD2:
+HD3:
+HD4:
+ .picptr funcdesc(HFb)
+ .word HFb
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic4.s b/binutils-2.21/ld/testsuite/ld-frv/fdpic4.s
new file mode 100644
index 0000000..795ae45
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic4.s
@@ -0,0 +1,99 @@
+ .text
+ .weak _start
+_start:
+ .global F4
+ .type F4,@function
+F4:
+ call PF0
+ .global PF0
+ .protected PF0
+ .global PF1
+ .protected PF1
+ .global PF2
+ .protected PF2
+ .global PF3
+ .protected PF3
+ .global PF4
+ .protected PF4
+ .global PF5
+ .protected PF5
+ .global PF6
+ .protected PF6
+ .global PF7
+ .protected PF7
+ .global PF8
+ .protected PF8
+ .global PF9
+ .protected PF9
+ .global PFa
+ .protected PFa
+ .global PFb
+ .protected PFb
+ .global PFc
+ .protected PFc
+PF0:
+PF1:
+PF2:
+PF3:
+PF4:
+PF5:
+PF6:
+PF7:
+PF8:
+PF9:
+PFa:
+PFb:
+PFc:
+ addi gr15, #got12(PF1), gr0
+
+ setlos #gotlo(PF2), gr0
+
+ setlo #gotlo(PF3), gr0
+ sethi #gothi(PF3), gr0
+
+ addi gr15, #gotfuncdesc12(PF4), gr0
+
+ setlos #gotfuncdesclo(PF5), gr0
+
+ setlo #gotfuncdesclo(PF6), gr0
+ sethi #gotfuncdeschi(PF6), gr0
+
+ addi gr15, #gotofffuncdesc12(PF7), gr0
+
+ setlos #gotofffuncdesclo(PF8), gr0
+
+ setlo #gotofffuncdesclo(PF9), gr0
+ sethi #gotofffuncdeschi(PF9), gr0
+
+ addi gr15, #gotoff12(PD1), gr0
+
+ setlos #gotofflo(PD2), gr0
+
+ setlo #gotofflo(PD3), gr0
+ sethi #gotoffhi(PD3), gr0
+
+ setlo #gotlo(PD4), gr0
+ sethi #gothi(PD4), gr0
+
+ .data
+ .global D4
+D4:
+ .word PD0
+
+ .global PD0
+ .protected PD0
+ .global PD1
+ .protected PD1
+ .global PD2
+ .protected PD2
+ .global PD3
+ .protected PD3
+ .global PD4
+ .protected PD4
+PD0:
+PD1:
+PD2:
+PD3:
+PD4:
+ .picptr funcdesc(PFb)
+ .word PFb
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic5.s b/binutils-2.21/ld/testsuite/ld-frv/fdpic5.s
new file mode 100644
index 0000000..f4d466a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic5.s
@@ -0,0 +1,38 @@
+ .text
+ .weak _start
+_start:
+ .global F5
+ .type F5,@function
+F5:
+ call UF0
+ addi gr15, #got12(UF1), gr0
+
+ setlos #gotlo(UF2), gr0
+
+ setlo #gotlo(UF3), gr0
+ sethi #gothi(UF3), gr0
+
+ addi gr15, #gotfuncdesc12(UF4), gr0
+
+ setlos #gotfuncdesclo(UF5), gr0
+
+ setlo #gotfuncdesclo(UF6), gr0
+ sethi #gotfuncdeschi(UF6), gr0
+
+ addi gr15, #gotofffuncdesc12(UF7), gr0
+
+ setlos #gotofffuncdesclo(UF8), gr0
+
+ setlo #gotofffuncdesclo(UF9), gr0
+ sethi #gotofffuncdeschi(UF9), gr0
+
+ setlo #gotlo(UD1), gr0
+ sethi #gothi(UD1), gr0
+
+ .data
+ .global D5
+D5:
+ .word UD0
+
+ .picptr funcdesc(UFb)
+ .word UFb
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic6.ldv b/binutils-2.21/ld/testsuite/ld-frv/fdpic6.ldv
new file mode 100644
index 0000000..5e46c03
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic6.ldv
@@ -0,0 +1 @@
+{ global: _start; F6; D6; WF*; local: *; };
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic6.s b/binutils-2.21/ld/testsuite/ld-frv/fdpic6.s
new file mode 100644
index 0000000..cd8e1d0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic6.s
@@ -0,0 +1,55 @@
+ .text
+ .weak _start
+_start:
+ .weak WF0
+ .weak WF1
+ .weak WF2
+ .weak WF3
+ .weak WF4
+ .weak WF5
+ .weak WF6
+ .weak WF7
+ .weak WF8
+ .weak WF9
+ .weak WFb
+ .weak WD0
+ .weak WD1
+ .weak WD2
+ .global F6
+ .type F6,@function
+F6:
+ call WF0
+ addi gr15, #got12(WF1), gr0
+
+ setlos #gotlo(WF2), gr0
+
+ setlo #gotlo(WF3), gr0
+ sethi #gothi(WF3), gr0
+
+ addi gr15, #gotfuncdesc12(WF4), gr0
+
+ setlos #gotfuncdesclo(WF5), gr0
+
+ setlo #gotfuncdesclo(WF6), gr0
+ sethi #gotfuncdeschi(WF6), gr0
+
+ addi gr15, #gotofffuncdesc12(WF7), gr0
+
+ setlos #gotofffuncdesclo(WF8), gr0
+
+ setlo #gotofffuncdesclo(WF9), gr0
+ sethi #gotofffuncdeschi(WF9), gr0
+
+ setlo #gotofflo(WD1), gr0
+ sethi #gotoffhi(WD1), gr0
+
+ setlo #gotlo(WD2), gr0
+ sethi #gothi(WD2), gr0
+
+ .data
+ .global D6
+D6:
+ .word WD0
+
+ .picptr funcdesc(WFb)
+ .word WFb
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic7.s b/binutils-2.21/ld/testsuite/ld-frv/fdpic7.s
new file mode 100644
index 0000000..ceac5fc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic7.s
@@ -0,0 +1,63 @@
+ .text
+ .weak _start
+_start:
+ .global F7
+ .type F7,@function
+F7:
+ call .F0+4
+
+.F0:
+.F1:
+.F2:
+.F3:
+.F4:
+.F5:
+.F6:
+.F7:
+.F8:
+.F9:
+.Fa:
+.Fb:
+.Fc:
+ addi gr15, #got12(.F1+4), gr0
+
+ setlos #gotlo(.F2+4), gr0
+
+ setlo #gotlo(.F3+4), gr0
+ sethi #gothi(.F3+4), gr0
+
+ addi gr15, #gotfuncdesc12(.F4+4), gr0
+
+ setlos #gotfuncdesclo(.F5+4), gr0
+
+ setlo #gotfuncdesclo(.F6+4), gr0
+ sethi #gotfuncdeschi(.F6+4), gr0
+
+ addi gr15, #gotofffuncdesc12(.F7+4), gr0
+
+ setlos #gotofffuncdesclo(.F8+4), gr0
+
+ setlo #gotofffuncdesclo(.F9+4), gr0
+ sethi #gotofffuncdeschi(.F9+4), gr0
+
+ addi gr15, #gotoff12(.D1+4), gr0
+
+ setlos #gotofflo(.D2+4), gr0
+
+ setlo #gotofflo(.D3+4), gr0
+ sethi #gotoffhi(.D3+4), gr0
+
+ setlo #gotlo(.D4+4), gr0
+ sethi #gothi(.D4+4), gr0
+
+ .data
+ .global D7
+D7:
+ .word .D0+4
+.D0:
+.D1:
+.D2:
+.D3:
+.D4:
+ .picptr funcdesc(.Fb+4)
+ .word .Fb+4
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic8.ldv b/binutils-2.21/ld/testsuite/ld-frv/fdpic8.ldv
new file mode 100644
index 0000000..d258f96
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic8.ldv
@@ -0,0 +1 @@
+{ global: _start; F8; D8; local: *; };
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic8.s b/binutils-2.21/ld/testsuite/ld-frv/fdpic8.s
new file mode 100644
index 0000000..037250f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic8.s
@@ -0,0 +1,81 @@
+ .text
+ .weak _start
+_start:
+ .global F8
+ .type F8,@function
+F8:
+ call GF0+4
+ .global GF0
+ .global GF1
+ .global GF2
+ .global GF3
+ .global GF4
+ .global GF5
+ .global GF6
+ .global GF7
+ .global GF8
+ .global GF9
+ .global GFa
+ .global GFb
+ .global GFc
+GF0:
+GF1:
+GF2:
+GF3:
+GF4:
+GF5:
+GF6:
+GF7:
+GF8:
+GF9:
+GFa:
+GFb:
+GFc:
+ addi gr15, #got12(GF1+4), gr0
+
+ setlos #gotlo(GF2+4), gr0
+
+ setlo #gotlo(GF3+4), gr0
+ sethi #gothi(GF3+4), gr0
+
+ addi gr15, #gotfuncdesc12(GF4+4), gr0
+
+ setlos #gotfuncdesclo(GF5+4), gr0
+
+ setlo #gotfuncdesclo(GF6+4), gr0
+ sethi #gotfuncdeschi(GF6+4), gr0
+
+ addi gr15, #gotofffuncdesc12(GF7+4), gr0
+
+ setlos #gotofffuncdesclo(GF8+4), gr0
+
+ setlo #gotofffuncdesclo(GF9+4), gr0
+ sethi #gotofffuncdeschi(GF9+4), gr0
+
+ addi gr15, #gotoff12(GD1+4), gr0
+
+ setlos #gotofflo(GD2+4), gr0
+
+ setlo #gotofflo(GD3+4), gr0
+ sethi #gotoffhi(GD3+4), gr0
+
+ setlo #gotlo(GD4+4), gr0
+ sethi #gothi(GD4+4), gr0
+
+ .data
+ .global D8
+D8:
+ .word GD0+4
+
+ .global GD0
+ .global GD1
+ .global GD2
+ .global GD3
+ .global GD4
+GD0:
+GD1:
+GD2:
+GD3:
+GD4:
+ .picptr funcdesc(GFb+4)
+ .word GFb+4
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fdpic8min.ldv b/binutils-2.21/ld/testsuite/ld-frv/fdpic8min.ldv
new file mode 100644
index 0000000..aeadb79
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fdpic8min.ldv
@@ -0,0 +1 @@
+{ global: _start; F8; GF1; GF2; GF3; D8; GD0; GD4; local: GF0; GF4; GF5; GF6; GF7; GF8; GF9; GFb; GD1; GD2; GD3; };
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fr450-link.d b/binutils-2.21/ld/testsuite/ld-frv/fr450-link.d
new file mode 100644
index 0000000..1ab80b0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fr450-link.d
@@ -0,0 +1,11 @@
+#source: fr450-linka.s -mcpu=fr400
+#source: fr450-linkb.s -mcpu=fr405
+#source: fr450-linkc.s -mcpu=fr450
+#source: fr450-linkb.s -mcpu=fr405
+#source: fr450-linka.s -mcpu=fr400
+#ld: -r
+#objdump: -p
+
+.*: file format elf32-frv(|fdpic)
+private flags = 0x800[08]000: -mcpu=fr450(| -mfdpic)
+
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fr450-linka.s b/binutils-2.21/ld/testsuite/ld-frv/fr450-linka.s
new file mode 100644
index 0000000..4e7fe2f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fr450-linka.s
@@ -0,0 +1 @@
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fr450-linkb.s b/binutils-2.21/ld/testsuite/ld-frv/fr450-linkb.s
new file mode 100644
index 0000000..4e7fe2f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fr450-linkb.s
@@ -0,0 +1 @@
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-frv/fr450-linkc.s b/binutils-2.21/ld/testsuite/ld-frv/fr450-linkc.s
new file mode 100644
index 0000000..4e7fe2f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/fr450-linkc.s
@@ -0,0 +1 @@
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-frv/frv-elf.exp b/binutils-2.21/ld/testsuite/ld-frv/frv-elf.exp
new file mode 100644
index 0000000..961e0de
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/frv-elf.exp
@@ -0,0 +1,23 @@
+# Expect script for FRV specific linker tests
+# Copyright (C) 2007 Free Software Foundation
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+if [istarget frv*-*-*] {
+ run_dump_test "fr450-link"
+}
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-1-dep.s b/binutils-2.21/ld/testsuite/ld-frv/tls-1-dep.s
new file mode 100644
index 0000000..75daab7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-1-dep.s
@@ -0,0 +1,7 @@
+ .section .tbss,"awT",@nobits
+ .align 4
+ .globl x
+ .type x, @tls_object
+ .size x, 4
+x:
+ .zero 4
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-1-shared.lds b/binutils-2.21/ld/testsuite/ld-frv/tls-1-shared.lds
new file mode 100644
index 0000000..3769e01
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-1-shared.lds
@@ -0,0 +1,3 @@
+{
+ local: x; i;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-1.s b/binutils-2.21/ld/testsuite/ld-frv/tls-1.s
new file mode 100644
index 0000000..a13c91b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-1.s
@@ -0,0 +1,85 @@
+ .section .tbss,"awT",@nobits
+ .align 4
+ .globl i
+ .type i, @object
+ .size i, 4
+i:
+ .zero 4
+ .align 4
+ .type l, @object
+ .size l, 4
+l:
+ .zero 4
+ .text
+ .globl _start
+_start:
+ call #gettlsoff(x)
+
+ sethi.p #gottlsdeschi(x), gr14
+ setlo #gottlsdesclo(x), gr14
+ ldd #tlsdesc(x)@(gr15, gr14), gr8
+ calll #gettlsoff(x)@(gr8, gr0)
+
+ lddi.p @(gr15, #gottlsdesc12(x)), gr8
+ setlos #gottlsdesclo(x), gr14
+ calll #gettlsoff(x)@(gr8, gr0)
+
+ call #gettlsoff(i)
+
+ sethi.p #gottlsdeschi(i), gr14
+ setlo #gottlsdesclo(i), gr14
+ ldd #tlsdesc(i)@(gr15, gr14), gr8
+ calll #gettlsoff(i)@(gr8, gr0)
+
+ lddi.p @(gr15, #gottlsdesc12(i)), gr8
+ setlos #gottlsdesclo(i), gr14
+ calll #gettlsoff(i)@(gr8, gr0)
+
+ call #gettlsoff(l)
+
+ sethi.p #gottlsdeschi(l), gr14
+ setlo #gottlsdesclo(l), gr14
+ ldd #tlsdesc(l)@(gr15, gr14), gr8
+ calll #gettlsoff(l)@(gr8, gr0)
+
+ lddi.p @(gr15, #gottlsdesc12(l)), gr8
+ setlos #gottlsdesclo(l), gr14
+ calll #gettlsoff(l)@(gr8, gr0)
+
+ call #gettlsoff(0)
+
+ sethi.p #gottlsdeschi(0), gr14
+ setlo #gottlsdesclo(0), gr14
+ ldd #tlsdesc(0)@(gr15, gr14), gr8
+ calll #gettlsoff(0)@(gr8, gr0)
+
+ lddi.p @(gr15, #gottlsdesc12(0)), gr8
+ setlos #gottlsdesclo(0), gr14
+ calll #gettlsoff(0)@(gr8, gr0)
+
+ sethi.p #tlsmoffhi(l), gr8
+ setlo #tlsmofflo(l), gr8
+
+ sethi.p #tlsmoffhi(i), gr9
+ setlo #tlsmofflo(i), gr9
+
+ ldi @(gr15, #gottlsoff12(x)), gr9
+ ldi @(gr15, #gottlsoff12(i)), gr9
+ ldi @(gr15, #gottlsoff12(l)), gr9
+ ldi @(gr15, #gottlsoff12(0)), gr9
+
+ sethi.p #gottlsoffhi(x), gr14
+ setlo #gottlsofflo(x), gr14
+ ld #tlsoff(x)@(gr15, gr14), gr9
+
+ sethi.p #gottlsoffhi(i), gr14
+ setlo #gottlsofflo(i), gr14
+ ld #tlsoff(i)@(gr15, gr14), gr9
+
+ sethi.p #gottlsoffhi(l), gr14
+ setlo #gottlsofflo(l), gr14
+ ld #tlsoff(l)@(gr15, gr14), gr9
+
+ sethi.p #gottlsoffhi(0), gr14
+ setlo #gottlsofflo(0), gr14
+ ld #tlsoff(0)@(gr15, gr14), gr9
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-2.s b/binutils-2.21/ld/testsuite/ld-frv/tls-2.s
new file mode 100644
index 0000000..f0712e3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-2.s
@@ -0,0 +1,183 @@
+ .section .tbss,"awT",@nobits
+ .align 4
+ .type l, @object
+ .size l, 4
+l:
+ .zero 4
+ .align 4
+ .globl i
+ .type i, @object
+ .size i, 4
+i:
+ .zero 4
+ .text
+ .globl _start
+_start:
+ call #gettlsoff(l+1)
+ call #gettlsoff(l+1+4096)
+ call #gettlsoff(l+1+65536)
+
+ sethi.p #gottlsdeschi(l+2), gr14
+ setlo #gottlsdesclo(l+2), gr14
+ ldd #tlsdesc(l+2)@(gr15, gr14), gr8
+ calll #gettlsoff(l+2)@(gr8, gr0)
+
+ sethi.p #gottlsdeschi(l+2+4096), gr14
+ setlo #gottlsdesclo(l+2+4096), gr14
+ ldd #tlsdesc(l+2+4096)@(gr15, gr14), gr8
+ calll #gettlsoff(l+2+4096)@(gr8, gr0)
+
+ sethi.p #gottlsdeschi(l+2+65536), gr14
+ setlo #gottlsdesclo(l+2+65536), gr14
+ ldd #tlsdesc(l+2+65536)@(gr15, gr14), gr8
+ calll #gettlsoff(l+2+65536)@(gr8, gr0)
+
+ lddi.p @(gr15, #gottlsdesc12(l+3)), gr8
+ setlos #gottlsdesclo(l+3), gr14
+ calll #gettlsoff(l+3)@(gr8, gr0)
+
+ lddi.p @(gr15, #gottlsdesc12(l+3+4096)), gr8
+ setlos #gottlsdesclo(l+3+4096), gr14
+ calll #gettlsoff(l+3+4096)@(gr8, gr0)
+
+ lddi.p @(gr15, #gottlsdesc12(l+3+65536)), gr8
+ setlos #gottlsdesclo(l+3+65536), gr14
+ calll #gettlsoff(l+3+65536)@(gr8, gr0)
+
+ sethi #tlsmoffhi(l+4), gr9
+ setlo #tlsmofflo(l+4), gr9
+
+ sethi #tlsmoffhi(l+4+4096), gr9
+ setlo #tlsmofflo(l+4+4096), gr9
+
+ sethi #tlsmoffhi(l+4+65536), gr9
+ setlo #tlsmofflo(l+4+65536), gr9
+
+ call #gettlsoff(i+1)
+ call #gettlsoff(i+1+4096)
+ call #gettlsoff(i+1+65536)
+
+ sethi.p #gottlsdeschi(i+2), gr14
+ setlo #gottlsdesclo(i+2), gr14
+ ldd #tlsdesc(i+2)@(gr15, gr14), gr8
+ calll #gettlsoff(i+2)@(gr8, gr0)
+
+ sethi.p #gottlsdeschi(i+2+4096), gr14
+ setlo #gottlsdesclo(i+2+4096), gr14
+ ldd #tlsdesc(i+2+4096)@(gr15, gr14), gr8
+ calll #gettlsoff(i+2+4096)@(gr8, gr0)
+
+ sethi.p #gottlsdeschi(i+2+65536), gr14
+ setlo #gottlsdesclo(i+2+65536), gr14
+ ldd #tlsdesc(i+2+65536)@(gr15, gr14), gr8
+ calll #gettlsoff(i+2+65536)@(gr8, gr0)
+
+ lddi.p @(gr15, #gottlsdesc12(i+3)), gr8
+ setlos #gottlsdesclo(i+3), gr14
+ calll #gettlsoff(i+3)@(gr8, gr0)
+
+ lddi.p @(gr15, #gottlsdesc12(i+3+4096)), gr8
+ setlos #gottlsdesclo(i+3+4096), gr14
+ calll #gettlsoff(i+3+4096)@(gr8, gr0)
+
+ lddi.p @(gr15, #gottlsdesc12(i+3+65536)), gr8
+ setlos #gottlsdesclo(i+3+65536), gr14
+ calll #gettlsoff(i+3+65536)@(gr8, gr0)
+
+ sethi #tlsmoffhi(i+4), gr9
+ setlo #tlsmofflo(i+4), gr9
+
+ sethi #tlsmoffhi(i+4+4096), gr9
+ setlo #tlsmofflo(i+4+4096), gr9
+
+ sethi #tlsmoffhi(i+4+65536), gr9
+ setlo #tlsmofflo(i+4+65536), gr9
+
+ call #gettlsoff(0+1)
+ call #gettlsoff(0+1+4096)
+ call #gettlsoff(0+1+65536)
+
+ sethi.p #gottlsdeschi(0+2), gr14
+ setlo #gottlsdesclo(0+2), gr14
+ ldd #tlsdesc(0+2)@(gr15, gr14), gr8
+ calll #gettlsoff(0+2)@(gr8, gr0)
+
+ sethi.p #gottlsdeschi(0+2+4096), gr14
+ setlo #gottlsdesclo(0+2+4096), gr14
+ ldd #tlsdesc(0+2+4096)@(gr15, gr14), gr8
+ calll #gettlsoff(0+2+4096)@(gr8, gr0)
+
+ sethi.p #gottlsdeschi(0+2+65536), gr14
+ setlo #gottlsdesclo(0+2+65536), gr14
+ ldd #tlsdesc(0+2+65536)@(gr15, gr14), gr8
+ calll #gettlsoff(0+2+65536)@(gr8, gr0)
+
+ lddi.p @(gr15, #gottlsdesc12(0+3)), gr8
+ setlos #gottlsdesclo(0+3), gr14
+ calll #gettlsoff(0+3)@(gr8, gr0)
+
+ lddi.p @(gr15, #gottlsdesc12(0+3+4096)), gr8
+ setlos #gottlsdesclo(0+3+4096), gr14
+ calll #gettlsoff(0+3+4096)@(gr8, gr0)
+
+ lddi.p @(gr15, #gottlsdesc12(0+3+65536)), gr8
+ setlos #gottlsdesclo(0+3+65536), gr14
+ calll #gettlsoff(0+3+65536)@(gr8, gr0)
+
+ sethi #tlsmoffhi(0+4), gr9
+ setlo #tlsmofflo(0+4), gr9
+
+ sethi #tlsmoffhi(0+4+4096), gr9
+ setlo #tlsmofflo(0+4+4096), gr9
+
+ sethi #tlsmoffhi(0+4+65536), gr9
+ setlo #tlsmofflo(0+4+65536), gr9
+
+ call #gettlsoff(x+1)
+ call #gettlsoff(x+1+4096)
+ call #gettlsoff(x+1+65536)
+
+ sethi.p #gottlsdeschi(x+2), gr14
+ setlo #gottlsdesclo(x+2), gr14
+ ldd #tlsdesc(x+2)@(gr15, gr14), gr8
+ calll #gettlsoff(x+2)@(gr8, gr0)
+
+ sethi.p #gottlsdeschi(x+2+4096), gr14
+ setlo #gottlsdesclo(x+2+4096), gr14
+ ldd #tlsdesc(x+2+4096)@(gr15, gr14), gr8
+ calll #gettlsoff(x+2+4096)@(gr8, gr0)
+
+ sethi.p #gottlsdeschi(x+2+65536), gr14
+ setlo #gottlsdesclo(x+2+65536), gr14
+ ldd #tlsdesc(x+2+65536)@(gr15, gr14), gr8
+ calll #gettlsoff(x+2+65536)@(gr8, gr0)
+
+ lddi.p @(gr15, #gottlsdesc12(x+3)), gr8
+ setlos #gottlsdesclo(x+3), gr14
+ calll #gettlsoff(x+3)@(gr8, gr0)
+
+ lddi.p @(gr15, #gottlsdesc12(x+3+4096)), gr8
+ setlos #gottlsdesclo(x+3+4096), gr14
+ calll #gettlsoff(x+3+4096)@(gr8, gr0)
+
+ lddi.p @(gr15, #gottlsdesc12(x+3+65536)), gr8
+ setlos #gottlsdesclo(x+3+65536), gr14
+ calll #gettlsoff(x+3+65536)@(gr8, gr0)
+
+.ifdef static_tls
+ ldi @(gr15, #gottlsoff12(l+1)), gr9
+ ldi @(gr15, #gottlsoff12(l+1+65536)), gr9
+ ldi @(gr15, #gottlsoff12(i+1)), gr9
+ ldi @(gr15, #gottlsoff12(i+1+65536)), gr9
+ ldi @(gr15, #gottlsoff12(0+1)), gr9
+ ldi @(gr15, #gottlsoff12(0+1+65536)), gr9
+ ldi @(gr15, #gottlsoff12(x+1)), gr9
+ ldi @(gr15, #gottlsoff12(x+1+65536)), gr9
+
+ setlos #gottlsofflo(l+1+4096), gr8
+ ld #tlsoff(l+1+4096)@(gr15, gr8), gr9
+
+ sethi #gottlsoffhi(i+1+4096), gr8
+ setlo #gottlsofflo(i+1+4096), gr8
+ ld #tlsoff(i+1+4096)@(gr15, gr8), gr9
+.endif
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-3.s b/binutils-2.21/ld/testsuite/ld-frv/tls-3.s
new file mode 100644
index 0000000..6dd7972
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-3.s
@@ -0,0 +1,20 @@
+ .text
+ .weak u
+ .globl _start
+_start:
+ call #gettlsoff(u)
+
+ sethi.p #gottlsdeschi(u), gr14
+ setlo #gottlsdesclo(u), gr14
+ ldd #tlsdesc(u)@(gr15, gr14), gr8
+ calll #gettlsoff(u)@(gr8, gr0)
+
+ lddi.p @(gr15, #gottlsdesc12(u)), gr8
+ setlos #gottlsdesclo(u), gr14
+ calll #gettlsoff(u)@(gr8, gr0)
+
+ ldi @(gr15, #gottlsoff12(u)), gr9
+
+ sethi.p #gottlsoffhi(u), gr14
+ setlo #gottlsofflo(u), gr14
+ ld #tlsoff(u)@(gr15, gr14), gr9
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-dynamic-1.d b/binutils-2.21/ld/testsuite/ld-frv/tls-dynamic-1.d
new file mode 100644
index 0000000..b95505e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-dynamic-1.d
@@ -0,0 +1,71 @@
+#name: FRV TLS relocs, dynamic linking
+#source: tls-1.s
+#objdump: -DR -j .text -j .got -j .plt
+#ld: tmpdir/tls-1-dep.so
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<_start>:
+[0-9a-f ]+: 92 c8 f0 10 ldi @\(gr15,16\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 10 ldi @\(gr15,16\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 10 ldi\.p @\(gr15,16\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 fc f8 10 setlos\.p 0xf*fffff810,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 20 setlos 0xf*fffff820,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 20 setlos 0xf*fffff820,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 fc f8 20 setlos\.p 0xf*fffff820,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 fc 00 00 setlos\.p lo\(0x0\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 90 fc f8 20 setlos 0xf*fffff820,gr8
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 92 c8 f0 10 ldi @\(gr15,16\),gr9
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 92 fc f8 20 setlos 0xf*fffff820,gr9
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 10 ldi @\(gr15,16\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 20 setlos 0xf*fffff820,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
+Disassembly of section \.got:
+
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
+ \.\.\.
+[0-9a-f ]+: ff ff f8 20 cop2 -32,cpr63,cpr32,cpr63
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: ff ff f8 10 cop2 -32,cpr63,cpr16,cpr63
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-dynamic-2.d b/binutils-2.21/ld/testsuite/ld-frv/tls-dynamic-2.d
new file mode 100644
index 0000000..07bf332
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-dynamic-2.d
@@ -0,0 +1,200 @@
+#name: FRV TLS relocs with addends, dynamic linking
+#source: tls-2.s
+#objdump: -DR -j .text -j .got -j .plt
+#ld: tmpdir/tls-1-dep.so
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.plt:
+
+[0-9a-f ]+<\.plt>:
+[0-9a-f ]+: c0 3a 40 00 bralr
+[0-9a-f ]+: 92 fc 08 21 setlos 0x821,gr9
+[0-9a-f ]+: c0 3a 40 00 bralr
+[0-9a-f ]+: 12 f8 00 00 sethi\.p hi\(0x0\),gr9
+[0-9a-f ]+: 92 f4 f8 21 setlo 0xf821,gr9
+[0-9a-f ]+: c0 3a 40 00 bralr
+[0-9a-f ]+: 92 fc 00 01 setlos 0x1,gr9
+[0-9a-f ]+: c0 3a 40 00 bralr
+[0-9a-f ]+: 92 c8 ff bc ldi @\(gr15,-68\),gr9
+[0-9a-f ]+: c0 3a 40 00 bralr
+[0-9a-f ]+: 92 fc f8 11 setlos 0xf*fffff811,gr9
+[0-9a-f ]+: c0 3a 40 00 bralr
+[0-9a-f ]+: 92 fc 10 01 setlos 0x1001,gr9
+[0-9a-f ]+: c0 3a 40 00 bralr
+[0-9a-f ]+: 92 c8 ff d4 ldi @\(gr15,-44\),gr9
+[0-9a-f ]+: c0 3a 40 00 bralr
+[0-9a-f ]+: 92 fc 08 11 setlos 0x811,gr9
+[0-9a-f ]+: c0 3a 40 00 bralr
+[0-9a-f ]+: 12 f8 00 01 sethi\.p 0x1,gr9
+[0-9a-f ]+: 92 f4 00 01 setlo 0x1,gr9
+[0-9a-f ]+: c0 3a 40 00 bralr
+[0-9a-f ]+: 92 c8 ff ec ldi @\(gr15,-20\),gr9
+[0-9a-f ]+: c0 3a 40 00 bralr
+[0-9a-f ]+: 12 f8 00 00 sethi\.p hi\(0x0\),gr9
+[0-9a-f ]+: 92 f4 f8 11 setlo 0xf811,gr9
+[0-9a-f ]+: c0 3a 40 00 bralr
+[0-9a-f ]+: 92 fc f8 21 setlos 0xf*fffff821,gr9
+[0-9a-f ]+: c0 3a 40 00 bralr
+Disassembly of section \.text:
+
+[0-9a-f ]+<_start>:
+[0-9a-f ]+: 92 fc f8 11 setlos 0xf*fffff811,gr9
+[0-9a-f ]+: 92 fc 08 11 setlos 0x811,gr9
+[0-9a-f ]+: 92 c8 ff f4 ldi @\(gr15,-12\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 12 setlos 0xf*fffff812,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 08 12 setlos 0x812,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 f8 00 00 sethi hi\(0x0\),gr9
+[0-9a-f ]+: 92 f4 f8 12 setlo 0xf812,gr9
+[0-9a-f ]+: 12 fc f8 13 setlos\.p 0xf*fffff813,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 fc 08 13 setlos\.p 0x813,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 f8 00 00 sethi\.p hi\(0x0\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 f4 f8 13 setlo 0xf813,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 14 setlos 0xf*fffff814,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 08 14 setlos 0x814,gr9
+[0-9a-f ]+: 92 f8 00 00 sethi hi\(0x0\),gr9
+[0-9a-f ]+: 92 f4 f8 14 setlo 0xf814,gr9
+[0-9a-f ]+: 92 fc f8 21 setlos 0xf*fffff821,gr9
+[0-9a-f ]+: 92 fc 08 21 setlos 0x821,gr9
+[0-9a-f ]+: 92 c8 ff ac ldi @\(gr15,-84\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 22 setlos 0xf*fffff822,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 08 22 setlos 0x822,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 f8 00 00 sethi hi\(0x0\),gr9
+[0-9a-f ]+: 92 f4 f8 22 setlo 0xf822,gr9
+[0-9a-f ]+: 12 fc f8 23 setlos\.p 0xf*fffff823,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 fc 08 23 setlos\.p 0x823,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 f8 00 00 sethi\.p hi\(0x0\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 f4 f8 23 setlo 0xf823,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 24 setlos 0xf*fffff824,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 08 24 setlos 0x824,gr9
+[0-9a-f ]+: 92 f8 00 00 sethi hi\(0x0\),gr9
+[0-9a-f ]+: 92 f4 f8 24 setlo 0xf824,gr9
+[0-9a-f ]+: 92 fc 00 01 setlos 0x1,gr9
+[0-9a-f ]+: 92 fc 10 01 setlos 0x1001,gr9
+[0-9a-f ]+: 92 c8 ff e4 ldi @\(gr15,-28\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 02 setlos 0x2,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 10 02 setlos 0x1002,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 f8 00 01 sethi 0x1,gr9
+[0-9a-f ]+: 92 f4 00 02 setlo 0x2,gr9
+[0-9a-f ]+: 12 fc 00 03 setlos\.p 0x3,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 fc 10 03 setlos\.p 0x1003,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 f8 00 01 sethi\.p 0x1,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 f4 00 03 setlo 0x3,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 04 setlos 0x4,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 10 04 setlos 0x1004,gr9
+[0-9a-f ]+: 92 f8 00 01 sethi 0x1,gr9
+[0-9a-f ]+: 92 f4 00 04 setlo 0x4,gr9
+[0-9a-f ]+: 92 c8 ff bc ldi @\(gr15,-68\),gr9
+[0-9a-f ]+: 92 c8 ff d4 ldi @\(gr15,-44\),gr9
+[0-9a-f ]+: 92 c8 ff ec ldi @\(gr15,-20\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 20 ldi @\(gr15,32\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 1c ldi @\(gr15,28\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 18 ldi @\(gr15,24\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 0c ldi\.p @\(gr15,12\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 10 ldi\.p @\(gr15,16\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 14 ldi\.p @\(gr15,20\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+Disassembly of section \.got:
+
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_-0x60)>:
+[0-9a-f ]+: 00 01 02 c0 .*
+[0-9a-f ]+: 00 00 08 21 .*
+[0-9a-f ]+: 00 01 02 c0 .*
+[0-9a-f ]+: 00 00 f8 21 .*
+[0-9a-f ]+: 00 01 02 c0 .*
+[0-9a-f ]+: 00 00 00 01 .*
+[0-9a-f ]+: 00 00 00 00 .*
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE x
+[0-9a-f ]+: 00 00 00 01 .*
+[0-9a-f ]+: 00 01 02 c0 .*
+[0-9a-f ]+: ff ff f8 11 .*
+[0-9a-f ]+: 00 01 02 c0 .*
+[0-9a-f ]+: 00 00 10 01 .*
+[0-9a-f ]+: 00 00 00 00 .*
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE x
+[0-9a-f ]+: 00 00 10 01 .*
+[0-9a-f ]+: 00 01 02 c0 .*
+[0-9a-f ]+: 00 00 08 11 .*
+[0-9a-f ]+: 00 01 02 c0 .*
+[0-9a-f ]+: 00 01 00 01 .*
+[0-9a-f ]+: 00 00 00 00 .*
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE x
+[0-9a-f ]+: 00 01 00 01 .*
+[0-9a-f ]+: 00 01 02 c0 .*
+[0-9a-f ]+: 00 00 f8 11 .*
+[0-9a-f ]+: 00 01 02 c0 .*
+[0-9a-f ]+: ff ff f8 21 .*
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: 00 00 00 03 .*
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 00 10 03 .*
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 01 00 03 .*
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 01 00 02 .*
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 00 10 02 .*
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 00 00 02 .*
+[0-9a-f ]+: R_FRV_TLSOFF x
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-dynamic-3.d b/binutils-2.21/ld/testsuite/ld-frv/tls-dynamic-3.d
new file mode 100644
index 0000000..c9750d2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-dynamic-3.d
@@ -0,0 +1,27 @@
+#name: FRV TLS undefweak relocs, dynamic linking
+#source: tls-3.s
+#objdump: -DR -j .text -j .got -j .plt
+#ld: tmpdir/tls-1-dep.so
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<_start>:
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 0c ldi\.p @\(gr15,12\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+Disassembly of section \.got:
+
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
+ \.\.\.
+[0-9a-f ]+: R_FRV_TLSOFF u
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-initial-shared-2.d b/binutils-2.21/ld/testsuite/ld-frv/tls-initial-shared-2.d
new file mode 100644
index 0000000..e4ea6a1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-initial-shared-2.d
@@ -0,0 +1,235 @@
+#name: FRV TLS relocs with addends, shared linking with static TLS
+#source: tls-2.s
+#as: --defsym static_tls=1
+#objdump: -DR -j .text -j .got -j .plt
+#ld: -shared tmpdir/tls-1-dep.so --version-script tls-1-shared.lds
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.plt:
+
+[0-9a-f ]+<\.plt>:
+[0-9a-f ]+: 92 c8 f0 5c ldi @\(gr15,92\),gr9
+[0-9a-f ]+: c0 3a 40 00 bralr
+[0-9a-f ]+: 90 cc ff e8 lddi @\(gr15,-24\),gr8
+[0-9a-f ]+: 80 30 80 00 jmpl @\(gr8,gr0\)
+[0-9a-f ]+: 92 c8 f0 78 ldi @\(gr15,120\),gr9
+[0-9a-f ]+: c0 3a 40 00 bralr
+[0-9a-f ]+: 90 cc ff f8 lddi @\(gr15,-8\),gr8
+[0-9a-f ]+: 80 30 80 00 jmpl @\(gr8,gr0\)
+Disassembly of section \.text:
+
+[0-9a-f ]+<_start>:
+[0-9a-f ]+: 92 c8 f0 30 ldi @\(gr15,48\),gr9
+[0-9a-f ]+: 92 c8 f0 78 ldi @\(gr15,120\),gr9
+[0-9a-f ]+: 92 c8 f0 4c ldi @\(gr15,76\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 70 ldi @\(gr15,112\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 7c ldi @\(gr15,124\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 8c ldi @\(gr15,140\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 34 ldi\.p @\(gr15,52\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 3c ldi\.p @\(gr15,60\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 50 ldi\.p @\(gr15,80\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 14 setlos 0xf*fffff814,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 08 14 setlos 0x814,gr9
+[0-9a-f ]+: 92 f8 00 00 sethi hi\(0x0\),gr9
+[0-9a-f ]+: 92 f4 f8 14 setlo 0xf814,gr9
+[0-9a-f ]+: 92 c8 f0 54 ldi @\(gr15,84\),gr9
+[0-9a-f ]+: 92 c8 f0 5c ldi @\(gr15,92\),gr9
+[0-9a-f ]+: 92 c8 f0 18 ldi @\(gr15,24\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 90 ldi @\(gr15,144\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 60 ldi @\(gr15,96\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 64 ldi @\(gr15,100\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 58 ldi\.p @\(gr15,88\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 0c ldi\.p @\(gr15,12\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 1c ldi\.p @\(gr15,28\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 24 setlos 0xf*fffff824,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 08 24 setlos 0x824,gr9
+[0-9a-f ]+: 92 f8 00 00 sethi hi\(0x0\),gr9
+[0-9a-f ]+: 92 f4 f8 24 setlo 0xf824,gr9
+[0-9a-f ]+: 92 c8 f0 24 ldi @\(gr15,36\),gr9
+[0-9a-f ]+: fe 3f ff c1 call .*
+[0-9a-f ]+: 92 c8 f0 40 ldi @\(gr15,64\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 68 ldi @\(gr15,104\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 80 ldi @\(gr15,128\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 84 ldi @\(gr15,132\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 28 ldi\.p @\(gr15,40\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 38 ldi\.p @\(gr15,56\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 44 ldi\.p @\(gr15,68\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 04 setlos 0x4,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 10 04 setlos 0x1004,gr9
+[0-9a-f ]+: 92 f8 00 01 sethi 0x1,gr9
+[0-9a-f ]+: 92 f4 00 04 setlo 0x4,gr9
+[0-9a-f ]+: 92 c8 f0 2c ldi @\(gr15,44\),gr9
+[0-9a-f ]+: fe 3f ff 9f call .*
+[0-9a-f ]+: 92 c8 f0 48 ldi @\(gr15,72\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 6c ldi @\(gr15,108\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 74 ldi @\(gr15,116\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 88 ldi @\(gr15,136\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 10 ldi\.p @\(gr15,16\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 14 ldi\.p @\(gr15,20\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 20 ldi\.p @\(gr15,32\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 30 ldi @\(gr15,48\),gr9
+[0-9a-f ]+: 92 c8 f0 4c ldi @\(gr15,76\),gr9
+[0-9a-f ]+: 92 c8 f0 54 ldi @\(gr15,84\),gr9
+[0-9a-f ]+: 92 c8 f0 18 ldi @\(gr15,24\),gr9
+[0-9a-f ]+: 92 c8 f0 24 ldi @\(gr15,36\),gr9
+[0-9a-f ]+: 92 c8 f0 40 ldi @\(gr15,64\),gr9
+[0-9a-f ]+: 92 c8 f0 2c ldi @\(gr15,44\),gr9
+[0-9a-f ]+: 92 c8 f0 48 ldi @\(gr15,72\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 78 ldi @\(gr15,120\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 5c ldi @\(gr15,92\),gr9
+Disassembly of section \.got:
+
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_-0x20)>:
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 10 11 add\.p sp,gr17,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE x
+[0-9a-f ]+: 00 00 10 01 add\.p sp,sp,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 10 01 add\.p sp,sp,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 17 f1 \*unknown\*
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: 00 00 10 13 add\.p sp,gr19,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 00 03 add\.p gr0,gr3,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 00 10 03 add\.p sp,gr3,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 01 00 11 add\.p gr16,gr17,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 01 00 13 add\.p gr16,gr19,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 01 00 03 add\.p gr16,gr3,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 00 07 f1 \*unknown\*
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 07 f3 \*unknown\*
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 00 01 add\.p gr0,sp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 00 00 01 add\.p gr0,sp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 00 03 add\.p gr0,gr3,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 17 f3 \*unknown\*
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 10 03 add\.p sp,gr3,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 01 07 f1 \*unknown\*
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 01 07 f3 \*unknown\*
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 01 00 01 add\.p gr16,sp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 01 00 01 add\.p gr16,sp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 01 00 03 add\.p gr16,gr3,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 00 11 add\.p gr0,gr17,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 00 13 add\.p gr0,gr19,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 10 11 add\.p sp,gr17,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 10 12 add\.p sp,gr18,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 01 00 12 add\.p gr16,gr18,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 07 f2 \*unknown\*
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 00 02 add\.p gr0,fp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 00 00 02 add\.p gr0,fp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 10 02 add\.p sp,fp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 00 10 01 add\.p sp,sp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 10 02 add\.p sp,fp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 17 f2 \*unknown\*
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 01 07 f2 \*unknown\*
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 01 00 02 add\.p gr16,fp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 01 00 02 add\.p gr16,fp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 00 12 add\.p gr0,gr18,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-pie-1.d b/binutils-2.21/ld/testsuite/ld-frv/tls-pie-1.d
new file mode 100644
index 0000000..0ced90a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-pie-1.d
@@ -0,0 +1,71 @@
+#name: FRV TLS relocs, pie linking
+#source: tls-1.s
+#objdump: -DR -j .text -j .got -j .plt
+#ld: -pie tmpdir/tls-1-dep.so
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<_start>:
+[0-9a-f ]+: 92 c8 f0 10 ldi @\(gr15,16\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 10 ldi @\(gr15,16\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 10 ldi\.p @\(gr15,16\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 fc f8 10 setlos\.p 0xf*fffff810,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 20 setlos 0xf*fffff820,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 20 setlos 0xf*fffff820,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 fc f8 20 setlos\.p 0xf*fffff820,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 fc 00 00 setlos\.p lo\(0x0\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 90 fc f8 20 setlos 0xf*fffff820,gr8
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 92 c8 f0 10 ldi @\(gr15,16\),gr9
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 92 fc f8 20 setlos 0xf*fffff820,gr9
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 10 ldi @\(gr15,16\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 20 setlos 0xf*fffff820,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
+Disassembly of section \.got:
+
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
+ \.\.\.
+[0-9a-f ]+: ff ff f8 20 cop2 -32,cpr63,cpr32,cpr63
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: ff ff f8 10 cop2 -32,cpr63,cpr16,cpr63
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-pie-3.d b/binutils-2.21/ld/testsuite/ld-frv/tls-pie-3.d
new file mode 100644
index 0000000..4dc3469
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-pie-3.d
@@ -0,0 +1,27 @@
+#name: FRV TLS undefweak relocs, pie linking
+#source: tls-3.s
+#objdump: -DR -j .text -j .got -j .plt
+#ld: -pie
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<_start>:
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 0c ldi\.p @\(gr15,12\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+Disassembly of section \.got:
+
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
+ \.\.\.
+[0-9a-f ]+: R_FRV_TLSOFF u
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-relax-dynamic-1.d b/binutils-2.21/ld/testsuite/ld-frv/tls-relax-dynamic-1.d
new file mode 100644
index 0000000..3d7ec36
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-relax-dynamic-1.d
@@ -0,0 +1,67 @@
+#name: FRV TLS relocs, dynamic linking with relaxation
+#source: tls-1.s
+#objdump: -DR -j .text -j .got -j .plt
+#ld: tmpdir/tls-1-dep.so --relax
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<_start>:
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 0c ldi\.p @\(gr15,12\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 fc f8 10 setlos\.p 0xf*fffff810,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 20 setlos 0xf*fffff820,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 20 setlos 0xf*fffff820,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 fc f8 20 setlos\.p 0xf*fffff820,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 fc 00 00 setlos\.p lo\(0x0\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 90 fc f8 20 setlos 0xf*fffff820,gr8
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 92 fc f8 20 setlos 0xf*fffff820,gr9
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 20 setlos 0xf*fffff820,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
+Disassembly of section \.got:
+
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
+ \.\.\.
+[0-9a-f ]+: R_FRV_TLSOFF x
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-relax-dynamic-2.d b/binutils-2.21/ld/testsuite/ld-frv/tls-relax-dynamic-2.d
new file mode 100644
index 0000000..59577d3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-relax-dynamic-2.d
@@ -0,0 +1,149 @@
+#name: FRV TLS relocs with addends, dynamic linking, relaxing
+#source: tls-2.s
+#objdump: -DR -j .text -j .got -j .plt
+#ld: tmpdir/tls-1-dep.so --relax
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<_start>:
+[0-9a-f ]+: 92 fc f8 11 setlos 0xf*fffff811,gr9
+[0-9a-f ]+: 92 fc 08 11 setlos 0x811,gr9
+[0-9a-f ]+: 92 c8 f0 2c ldi @\(gr15,44\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 12 setlos 0xf*fffff812,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 08 12 setlos 0x812,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 f8 00 00 sethi hi\(0x0\),gr9
+[0-9a-f ]+: 92 f4 f8 12 setlo 0xf812,gr9
+[0-9a-f ]+: 12 fc f8 13 setlos\.p 0xf*fffff813,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 fc 08 13 setlos\.p 0x813,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 f8 00 00 sethi\.p hi\(0x0\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 f4 f8 13 setlo 0xf813,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 14 setlos 0xf*fffff814,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 08 14 setlos 0x814,gr9
+[0-9a-f ]+: 92 f8 00 00 sethi hi\(0x0\),gr9
+[0-9a-f ]+: 92 f4 f8 14 setlo 0xf814,gr9
+[0-9a-f ]+: 92 fc f8 21 setlos 0xf*fffff821,gr9
+[0-9a-f ]+: 92 fc 08 21 setlos 0x821,gr9
+[0-9a-f ]+: 92 c8 f0 14 ldi @\(gr15,20\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 22 setlos 0xf*fffff822,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 08 22 setlos 0x822,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 f8 00 00 sethi hi\(0x0\),gr9
+[0-9a-f ]+: 92 f4 f8 22 setlo 0xf822,gr9
+[0-9a-f ]+: 12 fc f8 23 setlos\.p 0xf*fffff823,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 fc 08 23 setlos\.p 0x823,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 f8 00 00 sethi\.p hi\(0x0\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 f4 f8 23 setlo 0xf823,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 24 setlos 0xf*fffff824,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 08 24 setlos 0x824,gr9
+[0-9a-f ]+: 92 f8 00 00 sethi hi\(0x0\),gr9
+[0-9a-f ]+: 92 f4 f8 24 setlo 0xf824,gr9
+[0-9a-f ]+: 92 fc 00 01 setlos 0x1,gr9
+[0-9a-f ]+: 92 fc 10 01 setlos 0x1001,gr9
+[0-9a-f ]+: 92 c8 f0 24 ldi @\(gr15,36\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 02 setlos 0x2,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 10 02 setlos 0x1002,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 f8 00 01 sethi 0x1,gr9
+[0-9a-f ]+: 92 f4 00 02 setlo 0x2,gr9
+[0-9a-f ]+: 12 fc 00 03 setlos\.p 0x3,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 fc 10 03 setlos\.p 0x1003,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 f8 00 01 sethi\.p 0x1,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 f4 00 03 setlo 0x3,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 04 setlos 0x4,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 10 04 setlos 0x1004,gr9
+[0-9a-f ]+: 92 f8 00 01 sethi 0x1,gr9
+[0-9a-f ]+: 92 f4 00 04 setlo 0x4,gr9
+[0-9a-f ]+: 92 c8 f0 18 ldi @\(gr15,24\),gr9
+[0-9a-f ]+: 92 c8 f0 1c ldi @\(gr15,28\),gr9
+[0-9a-f ]+: 92 c8 f0 28 ldi @\(gr15,40\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 38 ldi @\(gr15,56\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 34 ldi @\(gr15,52\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 30 ldi @\(gr15,48\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 0c ldi\.p @\(gr15,12\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 10 ldi\.p @\(gr15,16\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 20 ldi\.p @\(gr15,32\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+Disassembly of section \.got:
+
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
+ \.\.\.
+[0-9a-f ]+: 00 00 00 03 add\.p gr0,gr3,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 00 10 03 add\.p sp,gr3,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 00 f8 21 \*unknown\*
+[0-9a-f ]+: 00 00 00 01 add\.p gr0,sp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 00 10 01 add\.p sp,sp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 01 00 03 add\.p gr16,gr3,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 01 00 01 add\.p gr16,sp,gr0
+[0-9a-f ]+: 00 01 00 01 add\.p gr16,sp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 00 f8 11 \*unknown\*
+[0-9a-f ]+: 00 01 00 02 add\.p gr16,fp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 00 10 02 add\.p sp,fp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 00 00 02 add\.p gr0,fp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-relax-dynamic-3.d b/binutils-2.21/ld/testsuite/ld-frv/tls-relax-dynamic-3.d
new file mode 100644
index 0000000..43cbdc7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-relax-dynamic-3.d
@@ -0,0 +1,27 @@
+#name: FRV TLS undefweak relocs, dynamic linking with relaxation
+#source: tls-3.s
+#objdump: -DR -j .text -j .got -j .plt
+#ld: tmpdir/tls-1-dep.so --relax
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<_start>:
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 0c ldi\.p @\(gr15,12\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+Disassembly of section \.got:
+
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
+ \.\.\.
+[0-9a-f ]+: R_FRV_TLSOFF u
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-relax-initial-shared-2.d b/binutils-2.21/ld/testsuite/ld-frv/tls-relax-initial-shared-2.d
new file mode 100644
index 0000000..824cf65
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-relax-initial-shared-2.d
@@ -0,0 +1,214 @@
+#name: FRV TLS relocs with addends, shared linking with static TLS, relaxing
+#source: tls-2.s
+#as: --defsym static_tls=1
+#objdump: -DR -j .text -j .got -j .plt
+#ld: -shared tmpdir/tls-1-dep.so --version-script tls-1-shared.lds --relax
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<_start>:
+[0-9a-f ]+: 92 c8 f0 34 ldi @\(gr15,52\),gr9
+[0-9a-f ]+: 92 c8 f0 44 ldi @\(gr15,68\),gr9
+[0-9a-f ]+: 92 c8 f0 5c ldi @\(gr15,92\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 7c ldi @\(gr15,124\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 84 ldi @\(gr15,132\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 94 ldi @\(gr15,148\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 38 ldi\.p @\(gr15,56\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 48 ldi\.p @\(gr15,72\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 60 ldi\.p @\(gr15,96\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 14 setlos 0xf*fffff814,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 08 14 setlos 0x814,gr9
+[0-9a-f ]+: 92 f8 00 00 sethi hi\(0x0\),gr9
+[0-9a-f ]+: 92 f4 f8 14 setlo 0xf814,gr9
+[0-9a-f ]+: 92 c8 f0 64 ldi @\(gr15,100\),gr9
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 92 c8 f0 1c ldi @\(gr15,28\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 98 ldi @\(gr15,152\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 6c ldi @\(gr15,108\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 70 ldi @\(gr15,112\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 68 ldi\.p @\(gr15,104\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 10 ldi\.p @\(gr15,16\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 20 ldi\.p @\(gr15,32\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 24 setlos 0xf*fffff824,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 08 24 setlos 0x824,gr9
+[0-9a-f ]+: 92 f8 00 00 sethi hi\(0x0\),gr9
+[0-9a-f ]+: 92 f4 f8 24 setlo 0xf824,gr9
+[0-9a-f ]+: 92 c8 f0 28 ldi @\(gr15,40\),gr9
+[0-9a-f ]+: 92 c8 f0 4c ldi @\(gr15,76\),gr9
+[0-9a-f ]+: 92 c8 f0 50 ldi @\(gr15,80\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 74 ldi @\(gr15,116\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 88 ldi @\(gr15,136\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 8c ldi @\(gr15,140\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 2c ldi\.p @\(gr15,44\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 3c ldi\.p @\(gr15,60\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 54 ldi\.p @\(gr15,84\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 04 setlos 0x4,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 10 04 setlos 0x1004,gr9
+[0-9a-f ]+: 92 f8 00 01 sethi 0x1,gr9
+[0-9a-f ]+: 92 f4 00 04 setlo 0x4,gr9
+[0-9a-f ]+: 92 c8 f0 30 ldi @\(gr15,48\),gr9
+[0-9a-f ]+: 92 c8 f0 40 ldi @\(gr15,64\),gr9
+[0-9a-f ]+: 92 c8 f0 58 ldi @\(gr15,88\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 78 ldi @\(gr15,120\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 80 ldi @\(gr15,128\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 90 ldi @\(gr15,144\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 14 ldi\.p @\(gr15,20\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 18 ldi\.p @\(gr15,24\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 24 ldi\.p @\(gr15,36\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 34 ldi @\(gr15,52\),gr9
+[0-9a-f ]+: 92 c8 f0 5c ldi @\(gr15,92\),gr9
+[0-9a-f ]+: 92 c8 f0 64 ldi @\(gr15,100\),gr9
+[0-9a-f ]+: 92 c8 f0 1c ldi @\(gr15,28\),gr9
+[0-9a-f ]+: 92 c8 f0 28 ldi @\(gr15,40\),gr9
+[0-9a-f ]+: 92 c8 f0 50 ldi @\(gr15,80\),gr9
+[0-9a-f ]+: 92 c8 f0 30 ldi @\(gr15,48\),gr9
+[0-9a-f ]+: 92 c8 f0 58 ldi @\(gr15,88\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 44 ldi @\(gr15,68\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+Disassembly of section \.got:
+
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
+ \.\.\.
+[0-9a-f ]+: 00 00 10 11 add\.p sp,gr17,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 10 13 add\.p sp,gr19,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 00 03 add\.p gr0,gr3,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 00 10 03 add\.p sp,gr3,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 01 00 11 add\.p gr16,gr17,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 01 00 13 add\.p gr16,gr19,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 01 00 03 add\.p gr16,gr3,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 00 07 f1 \*unknown\*
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 07 f3 \*unknown\*
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 00 01 add\.p gr0,sp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 00 00 01 add\.p gr0,sp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 00 03 add\.p gr0,gr3,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 17 f3 \*unknown\*
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 10 01 add\.p sp,sp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 00 10 01 add\.p sp,sp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 10 03 add\.p sp,gr3,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 17 f1 \*unknown\*
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 01 07 f1 \*unknown\*
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 01 07 f3 \*unknown\*
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 01 00 01 add\.p gr16,sp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 01 00 01 add\.p gr16,sp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 01 00 03 add\.p gr16,gr3,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 00 11 add\.p gr0,gr17,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 00 13 add\.p gr0,gr19,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 10 12 add\.p sp,gr18,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 01 00 12 add\.p gr16,gr18,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 07 f2 \*unknown\*
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 00 02 add\.p gr0,fp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 00 00 02 add\.p gr0,fp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 10 02 add\.p sp,fp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 00 10 02 add\.p sp,fp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 17 f2 \*unknown\*
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 01 07 f2 \*unknown\*
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 01 00 02 add\.p gr16,fp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: 00 01 00 02 add\.p gr16,fp,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 00 12 add\.p gr0,gr18,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-relax-pie-1.d b/binutils-2.21/ld/testsuite/ld-frv/tls-relax-pie-1.d
new file mode 100644
index 0000000..579047e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-relax-pie-1.d
@@ -0,0 +1,67 @@
+#name: FRV TLS relocs, pie linking with relaxation
+#source: tls-1.s
+#objdump: -DR -j .text -j .got -j .plt
+#ld: -pie tmpdir/tls-1-dep.so --relax
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<_start>:
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 0c ldi\.p @\(gr15,12\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 fc f8 10 setlos\.p 0xf*fffff810,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 20 setlos 0xf*fffff820,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 20 setlos 0xf*fffff820,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 fc f8 20 setlos\.p 0xf*fffff820,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 fc 00 00 setlos\.p lo\(0x0\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 90 fc f8 20 setlos 0xf*fffff820,gr8
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 92 fc f8 20 setlos 0xf*fffff820,gr9
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 20 setlos 0xf*fffff820,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
+Disassembly of section \.got:
+
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
+ \.\.\.
+[0-9a-f ]+: R_FRV_TLSOFF x
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-relax-pie-3.d b/binutils-2.21/ld/testsuite/ld-frv/tls-relax-pie-3.d
new file mode 100644
index 0000000..da26ca0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-relax-pie-3.d
@@ -0,0 +1,27 @@
+#name: FRV TLS undefweak relocs, pie linking with relaxation
+#source: tls-3.s
+#objdump: -DR -j .text -j .got -j .plt
+#ld: -pie --relax
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<_start>:
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 0c ldi\.p @\(gr15,12\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+Disassembly of section \.got:
+
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
+ \.\.\.
+[0-9a-f ]+: R_FRV_TLSOFF u
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-relax-shared-1.d b/binutils-2.21/ld/testsuite/ld-frv/tls-relax-shared-1.d
new file mode 100644
index 0000000..ba3b532
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-relax-shared-1.d
@@ -0,0 +1,73 @@
+#name: FRV TLS relocs, shared linking with relaxation
+#source: tls-1.s
+#objdump: -DR -j .text -j .got -j .plt
+#ld: -shared tmpdir/tls-1-dep.so --version-script tls-1-shared.lds --relax
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<_start>:
+[0-9a-f ]+: 92 c8 f0 10 ldi @\(gr15,16\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 10 ldi @\(gr15,16\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 10 ldi\.p @\(gr15,16\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 14 ldi @\(gr15,20\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 14 ldi @\(gr15,20\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 14 ldi\.p @\(gr15,20\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 0c ldi\.p @\(gr15,12\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 18 ldi @\(gr15,24\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 18 ldi @\(gr15,24\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 18 ldi\.p @\(gr15,24\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 90 fc f8 20 setlos 0xf*fffff820,gr8
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 92 c8 f0 10 ldi @\(gr15,16\),gr9
+[0-9a-f ]+: 92 c8 f0 14 ldi @\(gr15,20\),gr9
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 92 c8 f0 18 ldi @\(gr15,24\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 10 ldi @\(gr15,16\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 14 ldi @\(gr15,20\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 18 ldi @\(gr15,24\),gr9
+Disassembly of section \.got:
+
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
+ \.\.\.
+[0-9a-f ]+: 00 00 00 10 add\.p gr0,gr16,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+ \.\.\.
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 07 f0 \*unknown\*
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-relax-shared-2.d b/binutils-2.21/ld/testsuite/ld-frv/tls-relax-shared-2.d
new file mode 100644
index 0000000..c07bb35
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-relax-shared-2.d
@@ -0,0 +1,264 @@
+#name: FRV TLS relocs with addends, shared linking, relaxing
+#source: tls-2.s
+#objdump: -DR -j .text -j .got -j .plt
+#ld: -shared tmpdir/tls-1-dep.so --version-script tls-1-shared.lds --relax
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.plt:
+
+[0-9a-f ]+<\.plt>:
+[0-9a-f ]+: 90 cc f0 10 lddi @\(gr15,16\),gr8
+[0-9a-f ]+: 80 30 80 00 jmpl @\(gr8,gr0\)
+[0-9a-f ]+: 90 cc f0 30 lddi @\(gr15,48\),gr8
+[0-9a-f ]+: 80 30 80 00 jmpl @\(gr8,gr0\)
+[0-9a-f ]+: 90 cc f0 40 lddi @\(gr15,64\),gr8
+[0-9a-f ]+: 80 30 80 00 jmpl @\(gr8,gr0\)
+[0-9a-f ]+: 90 cc f0 50 lddi @\(gr15,80\),gr8
+[0-9a-f ]+: 80 30 80 00 jmpl @\(gr8,gr0\)
+[0-9a-f ]+: 90 cc f0 58 lddi @\(gr15,88\),gr8
+[0-9a-f ]+: 80 30 80 00 jmpl @\(gr8,gr0\)
+[0-9a-f ]+: 90 cc f0 68 lddi @\(gr15,104\),gr8
+[0-9a-f ]+: 80 30 80 00 jmpl @\(gr8,gr0\)
+[0-9a-f ]+: 90 cc ff a8 lddi @\(gr15,-88\),gr8
+[0-9a-f ]+: 80 30 80 00 jmpl @\(gr8,gr0\)
+[0-9a-f ]+: 90 cc ff b0 lddi @\(gr15,-80\),gr8
+[0-9a-f ]+: 80 30 80 00 jmpl @\(gr8,gr0\)
+[0-9a-f ]+: 90 cc ff c8 lddi @\(gr15,-56\),gr8
+[0-9a-f ]+: 80 30 80 00 jmpl @\(gr8,gr0\)
+[0-9a-f ]+: 90 cc ff d8 lddi @\(gr15,-40\),gr8
+[0-9a-f ]+: 80 30 80 00 jmpl @\(gr8,gr0\)
+[0-9a-f ]+: 90 cc ff e0 lddi @\(gr15,-32\),gr8
+[0-9a-f ]+: 80 30 80 00 jmpl @\(gr8,gr0\)
+[0-9a-f ]+: 90 cc ff f0 lddi @\(gr15,-16\),gr8
+[0-9a-f ]+: 80 30 80 00 jmpl @\(gr8,gr0\)
+Disassembly of section \.text:
+
+[0-9a-f ]+<_start>:
+[0-9a-f ]+: fe 3f ff f0 call .*
+[0-9a-f ]+: fe 3f ff f5 call .*
+[0-9a-f ]+: fe 3f ff fa call .*
+[0-9a-f ]+: 1c f8 00 00 sethi\.p hi\(0x0\),gr14
+[0-9a-f ]+: 9c f4 00 98 setlo 0x98,gr14
+[0-9a-f ]+: 90 08 f1 4e ldd @\(gr15,gr14\),gr8
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 1c f8 00 00 sethi\.p hi\(0x0\),gr14
+[0-9a-f ]+: 9c f4 00 a8 setlo 0xa8,gr14
+[0-9a-f ]+: 90 08 f1 4e ldd @\(gr15,gr14\),gr8
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 1c f8 00 00 sethi\.p hi\(0x0\),gr14
+[0-9a-f ]+: 9c f4 00 c0 setlo 0xc0,gr14
+[0-9a-f ]+: 90 08 f1 4e ldd @\(gr15,gr14\),gr8
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 10 cc f0 60 lddi\.p @\(gr15,96\),gr8
+[0-9a-f ]+: 9c fc 00 60 setlos 0x60,gr14
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 10 cc ff b8 lddi\.p @\(gr15,-72\),gr8
+[0-9a-f ]+: 9c fc ff b8 setlos 0xf*ffffffb8,gr14
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 10 cc ff e8 lddi\.p @\(gr15,-24\),gr8
+[0-9a-f ]+: 9c fc ff e8 setlos 0xf*ffffffe8,gr14
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 14 setlos 0xf*fffff814,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 08 14 setlos 0x814,gr9
+[0-9a-f ]+: 92 f8 00 00 sethi hi\(0x0\),gr9
+[0-9a-f ]+: 92 f4 f8 14 setlo 0xf814,gr9
+[0-9a-f ]+: fe 3f ff e0 call .*
+[0-9a-f ]+: fe 3f ff c9 call .*
+[0-9a-f ]+: fe 3f ff ca call .*
+[0-9a-f ]+: 1c f8 00 00 sethi\.p hi\(0x0\),gr14
+[0-9a-f ]+: 9c f4 00 c8 setlo 0xc8,gr14
+[0-9a-f ]+: 90 08 f1 4e ldd @\(gr15,gr14\),gr8
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 1c f8 00 00 sethi\.p hi\(0x0\),gr14
+[0-9a-f ]+: 9c f4 00 78 setlo 0x78,gr14
+[0-9a-f ]+: 90 08 f1 4e ldd @\(gr15,gr14\),gr8
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 1c f8 00 00 sethi\.p hi\(0x0\),gr14
+[0-9a-f ]+: 9c f4 00 88 setlo 0x88,gr14
+[0-9a-f ]+: 90 08 f1 4e ldd @\(gr15,gr14\),gr8
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 10 cc ff f8 lddi\.p @\(gr15,-8\),gr8
+[0-9a-f ]+: 9c fc ff f8 setlos 0xf*fffffff8,gr14
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 10 cc f0 18 lddi\.p @\(gr15,24\),gr8
+[0-9a-f ]+: 9c fc 00 18 setlos 0x18,gr14
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 10 cc f0 38 lddi\.p @\(gr15,56\),gr8
+[0-9a-f ]+: 9c fc 00 38 setlos 0x38,gr14
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 24 setlos 0xf*fffff824,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 08 24 setlos 0x824,gr9
+[0-9a-f ]+: 92 f8 00 00 sethi hi\(0x0\),gr9
+[0-9a-f ]+: 92 f4 f8 24 setlo 0xf824,gr9
+[0-9a-f ]+: fe 3f ff b0 call .*
+[0-9a-f ]+: fe 3f ff b5 call .*
+[0-9a-f ]+: fe 3f ff ba call .*
+[0-9a-f ]+: 1c f8 00 00 sethi\.p hi\(0x0\),gr14
+[0-9a-f ]+: 9c f4 00 90 setlo 0x90,gr14
+[0-9a-f ]+: 90 08 f1 4e ldd @\(gr15,gr14\),gr8
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 1c f8 00 00 sethi\.p hi\(0x0\),gr14
+[0-9a-f ]+: 9c f4 00 a0 setlo 0xa0,gr14
+[0-9a-f ]+: 90 08 f1 4e ldd @\(gr15,gr14\),gr8
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 1c f8 00 00 sethi\.p hi\(0x0\),gr14
+[0-9a-f ]+: 9c f4 00 b8 setlo 0xb8,gr14
+[0-9a-f ]+: 90 08 f1 4e ldd @\(gr15,gr14\),gr8
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 10 cc f0 48 lddi\.p @\(gr15,72\),gr8
+[0-9a-f ]+: 9c fc 00 48 setlos 0x48,gr14
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 10 cc ff a0 lddi\.p @\(gr15,-96\),gr8
+[0-9a-f ]+: 9c fc ff a0 setlos 0xf*ffffffa0,gr14
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 10 cc ff d0 lddi\.p @\(gr15,-48\),gr8
+[0-9a-f ]+: 9c fc ff d0 setlos 0xf*ffffffd0,gr14
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 04 setlos 0x4,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 10 04 setlos 0x1004,gr9
+[0-9a-f ]+: 92 f8 00 01 sethi 0x1,gr9
+[0-9a-f ]+: 92 f4 00 04 setlo 0x4,gr9
+[0-9a-f ]+: fe 3f ff 94 call .*
+[0-9a-f ]+: fe 3f ff 99 call .*
+[0-9a-f ]+: fe 3f ff 9e call .*
+[0-9a-f ]+: 1c f8 00 00 sethi\.p hi\(0x0\),gr14
+[0-9a-f ]+: 9c f4 00 b0 setlo 0xb0,gr14
+[0-9a-f ]+: 90 08 f1 4e ldd @\(gr15,gr14\),gr8
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 1c f8 00 00 sethi\.p hi\(0x0\),gr14
+[0-9a-f ]+: 9c f4 00 80 setlo 0x80,gr14
+[0-9a-f ]+: 90 08 f1 4e ldd @\(gr15,gr14\),gr8
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 1c f8 00 00 sethi\.p hi\(0x0\),gr14
+[0-9a-f ]+: 9c f4 00 70 setlo 0x70,gr14
+[0-9a-f ]+: 90 08 f1 4e ldd @\(gr15,gr14\),gr8
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 10 cc f0 20 lddi\.p @\(gr15,32\),gr8
+[0-9a-f ]+: 9c fc 00 20 setlos 0x20,gr14
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 10 cc f0 28 lddi\.p @\(gr15,40\),gr8
+[0-9a-f ]+: 9c fc 00 28 setlos 0x28,gr14
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 10 cc ff c0 lddi\.p @\(gr15,-64\),gr8
+[0-9a-f ]+: 9c fc ff c0 setlos 0xf*ffffffc0,gr14
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+Disassembly of section \.got:
+
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_-0x60)>:
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 17 f3 \*unknown\*
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE x
+[0-9a-f ]+: 00 00 10 01 add\.p sp,sp,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 10 01 add\.p sp,sp,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 10 03 add\.p sp,gr3,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE x
+[0-9a-f ]+: 00 01 00 03 add\.p gr16,gr3,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 01 07 f1 \*unknown\*
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 01 07 f3 \*unknown\*
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE x
+[0-9a-f ]+: 00 01 00 01 add\.p gr16,sp,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 01 00 01 add\.p gr16,sp,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 01 00 03 add\.p gr16,gr3,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 00 11 add\.p gr0,gr17,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 00 13 add\.p gr0,gr19,gr0
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 10 11 add\.p sp,gr17,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 10 13 add\.p sp,gr19,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE x
+[0-9a-f ]+: 00 00 00 03 add\.p gr0,gr3,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE x
+[0-9a-f ]+: 00 00 10 03 add\.p sp,gr3,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 01 00 11 add\.p gr16,gr17,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 01 00 13 add\.p gr16,gr19,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 07 f1 \*unknown\*
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 07 f3 \*unknown\*
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE x
+[0-9a-f ]+: 00 00 00 01 add\.p gr0,sp,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 00 01 add\.p gr0,sp,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 00 03 add\.p gr0,gr3,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 17 f1 \*unknown\*
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE x
+[0-9a-f ]+: 00 01 00 02 add\.p gr16,fp,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 10 12 add\.p sp,gr18,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE x
+[0-9a-f ]+: 00 00 10 02 add\.p sp,fp,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 01 00 12 add\.p gr16,gr18,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 07 f2 \*unknown\*
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 00 02 add\.p gr0,fp,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 17 f2 \*unknown\*
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 10 02 add\.p sp,fp,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE x
+[0-9a-f ]+: 00 00 00 02 add\.p gr0,fp,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 01 07 f2 \*unknown\*
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 01 00 02 add\.p gr16,fp,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 00 12 add\.p gr0,gr18,gr0
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-relax-shared-3.d b/binutils-2.21/ld/testsuite/ld-frv/tls-relax-shared-3.d
new file mode 100644
index 0000000..b766a00
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-relax-shared-3.d
@@ -0,0 +1,27 @@
+#name: FRV TLS undefweak relocs, shared linking with relaxation
+#source: tls-3.s
+#objdump: -DR -j .text -j .got -j .plt
+#ld: -shared --relax
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<_start>:
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 0c ldi\.p @\(gr15,12\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+Disassembly of section \.got:
+
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
+ \.\.\.
+[0-9a-f ]+: R_FRV_TLSOFF u
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-relax-static-1.d b/binutils-2.21/ld/testsuite/ld-frv/tls-relax-static-1.d
new file mode 100644
index 0000000..d87d22c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-relax-static-1.d
@@ -0,0 +1,62 @@
+#name: FRV TLS relocs, static linking with relaxation
+#source: tls-1.s
+#objdump: -D -j .text -j .got -j .plt
+#ld: -static tmpdir/tls-1-dep.o --relax
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<_start>:
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 fc f8 10 setlos\.p 0xf*fffff810,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 20 setlos 0xf*fffff820,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 20 setlos 0xf*fffff820,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 fc f8 20 setlos\.p 0xf*fffff820,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 30 setlos 0xf*fffff830,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 30 setlos 0xf*fffff830,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 fc f8 30 setlos\.p 0xf*fffff830,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 fc 00 00 setlos\.p lo\(0x0\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 90 fc f8 30 setlos 0xf*fffff830,gr8
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 92 fc f8 20 setlos 0xf*fffff820,gr9
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 92 fc f8 20 setlos 0xf*fffff820,gr9
+[0-9a-f ]+: 92 fc f8 30 setlos 0xf*fffff830,gr9
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 20 setlos 0xf*fffff820,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 30 setlos 0xf*fffff830,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-relax-static-3.d b/binutils-2.21/ld/testsuite/ld-frv/tls-relax-static-3.d
new file mode 100644
index 0000000..ed3c07a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-relax-static-3.d
@@ -0,0 +1,26 @@
+#name: FRV TLS undefweak relocs, static linking with relaxation
+#source: tls-3.s
+#objdump: -D -j .text -j .got -j .plt
+#ld: -static --relax
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+00010094 <_start>:
+ 10094: 92 fc 00 00 setlos lo\(0x0\),gr9
+ 10098: 00 88 00 00 nop\.p
+ 1009c: 80 88 00 00 nop
+ 100a0: 92 fc 00 00 setlos lo\(0x0\),gr9
+ 100a4: 80 88 00 00 nop
+ 100a8: 12 fc 00 00 setlos\.p lo\(0x0\),gr9
+ 100ac: 80 88 00 00 nop
+ 100b0: 80 88 00 00 nop
+ 100b4: 92 fc 00 00 setlos lo\(0x0\),gr9
+ 100b8: 00 88 00 00 nop\.p
+ 100bc: 80 88 00 00 nop
+ 100c0: 92 fc 00 00 setlos lo\(0x0\),gr9
+Disassembly of section \.got:
+
+000140c8 <(__data_start|_GLOBAL_OFFSET_TABLE_)>:
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-shared-1-fail.d b/binutils-2.21/ld/testsuite/ld-frv/tls-shared-1-fail.d
new file mode 100644
index 0000000..8cb220d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-shared-1-fail.d
@@ -0,0 +1,4 @@
+#name: FRV TLS relocs, shared linking
+#source: tls-1.s
+#ld: -shared tmpdir/tls-1-dep.so
+#error: different segment
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-shared-1.d b/binutils-2.21/ld/testsuite/ld-frv/tls-shared-1.d
new file mode 100644
index 0000000..2a29ba5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-shared-1.d
@@ -0,0 +1,73 @@
+#name: FRV TLS relocs, shared linking with local binding
+#source: tls-1.s
+#objdump: -DR -j .text -j .got -j .plt
+#ld: -shared tmpdir/tls-1-dep.so --version-script tls-1-shared.lds
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<_start>:
+[0-9a-f ]+: 92 c8 f0 10 ldi @\(gr15,16\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 10 ldi @\(gr15,16\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 10 ldi\.p @\(gr15,16\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 14 ldi @\(gr15,20\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 14 ldi @\(gr15,20\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 14 ldi\.p @\(gr15,20\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 0c ldi\.p @\(gr15,12\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 18 ldi @\(gr15,24\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 18 ldi @\(gr15,24\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 18 ldi\.p @\(gr15,24\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 90 fc f8 20 setlos 0xf*fffff820,gr8
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 92 c8 f0 10 ldi @\(gr15,16\),gr9
+[0-9a-f ]+: 92 c8 f0 14 ldi @\(gr15,20\),gr9
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 92 c8 f0 18 ldi @\(gr15,24\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 10 ldi @\(gr15,16\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 14 ldi @\(gr15,20\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 18 ldi @\(gr15,24\),gr9
+Disassembly of section \.got:
+
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
+ \.\.\.
+[0-9a-f ]+: 00 00 00 10 add\.p gr0,gr16,gr0
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+ \.\.\.
+[0-9a-f ]+: R_FRV_TLSOFF x
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
+[0-9a-f ]+: 00 00 07 f0 \*unknown\*
+[0-9a-f ]+: R_FRV_TLSOFF \.tbss
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-shared-2.d b/binutils-2.21/ld/testsuite/ld-frv/tls-shared-2.d
new file mode 100644
index 0000000..bd92cdb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-shared-2.d
@@ -0,0 +1,264 @@
+#name: FRV TLS relocs with addends, shared linking
+#source: tls-2.s
+#objdump: -DR -j .text -j .got -j .plt
+#ld: -shared tmpdir/tls-1-dep.so --version-script tls-1-shared.lds
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.plt:
+
+[0-9a-f ]+<\.plt>:
+[0-9a-f ]+: 90 cc f0 10 lddi @\(gr15,16\),gr8
+[0-9a-f ]+: 80 30 80 00 jmpl @\(gr8,gr0\)
+[0-9a-f ]+: 90 cc f0 30 lddi @\(gr15,48\),gr8
+[0-9a-f ]+: 80 30 80 00 jmpl @\(gr8,gr0\)
+[0-9a-f ]+: 90 cc f0 40 lddi @\(gr15,64\),gr8
+[0-9a-f ]+: 80 30 80 00 jmpl @\(gr8,gr0\)
+[0-9a-f ]+: 90 cc f0 50 lddi @\(gr15,80\),gr8
+[0-9a-f ]+: 80 30 80 00 jmpl @\(gr8,gr0\)
+[0-9a-f ]+: 90 cc f0 58 lddi @\(gr15,88\),gr8
+[0-9a-f ]+: 80 30 80 00 jmpl @\(gr8,gr0\)
+[0-9a-f ]+: 90 cc f0 68 lddi @\(gr15,104\),gr8
+[0-9a-f ]+: 80 30 80 00 jmpl @\(gr8,gr0\)
+[0-9a-f ]+: 90 cc ff a8 lddi @\(gr15,-88\),gr8
+[0-9a-f ]+: 80 30 80 00 jmpl @\(gr8,gr0\)
+[0-9a-f ]+: 90 cc ff b0 lddi @\(gr15,-80\),gr8
+[0-9a-f ]+: 80 30 80 00 jmpl @\(gr8,gr0\)
+[0-9a-f ]+: 90 cc ff c8 lddi @\(gr15,-56\),gr8
+[0-9a-f ]+: 80 30 80 00 jmpl @\(gr8,gr0\)
+[0-9a-f ]+: 90 cc ff d8 lddi @\(gr15,-40\),gr8
+[0-9a-f ]+: 80 30 80 00 jmpl @\(gr8,gr0\)
+[0-9a-f ]+: 90 cc ff e0 lddi @\(gr15,-32\),gr8
+[0-9a-f ]+: 80 30 80 00 jmpl @\(gr8,gr0\)
+[0-9a-f ]+: 90 cc ff f0 lddi @\(gr15,-16\),gr8
+[0-9a-f ]+: 80 30 80 00 jmpl @\(gr8,gr0\)
+Disassembly of section \.text:
+
+[0-9a-f ]+<_start>:
+[0-9a-f ]+: fe 3f ff f0 call .*
+[0-9a-f ]+: fe 3f ff f5 call .*
+[0-9a-f ]+: fe 3f ff fa call .*
+[0-9a-f ]+: 1c f8 00 00 sethi\.p hi\(0x0\),gr14
+[0-9a-f ]+: 9c f4 00 98 setlo 0x98,gr14
+[0-9a-f ]+: 90 08 f1 4e ldd @\(gr15,gr14\),gr8
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 1c f8 00 00 sethi\.p hi\(0x0\),gr14
+[0-9a-f ]+: 9c f4 00 a8 setlo 0xa8,gr14
+[0-9a-f ]+: 90 08 f1 4e ldd @\(gr15,gr14\),gr8
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 1c f8 00 00 sethi\.p hi\(0x0\),gr14
+[0-9a-f ]+: 9c f4 00 c0 setlo 0xc0,gr14
+[0-9a-f ]+: 90 08 f1 4e ldd @\(gr15,gr14\),gr8
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 10 cc f0 60 lddi\.p @\(gr15,96\),gr8
+[0-9a-f ]+: 9c fc 00 60 setlos 0x60,gr14
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 10 cc ff b8 lddi\.p @\(gr15,-72\),gr8
+[0-9a-f ]+: 9c fc ff b8 setlos 0xf*ffffffb8,gr14
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 10 cc ff e8 lddi\.p @\(gr15,-24\),gr8
+[0-9a-f ]+: 9c fc ff e8 setlos 0xf*ffffffe8,gr14
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 14 setlos 0xf*fffff814,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 08 14 setlos 0x814,gr9
+[0-9a-f ]+: 92 f8 00 00 sethi hi\(0x0\),gr9
+[0-9a-f ]+: 92 f4 f8 14 setlo 0xf814,gr9
+[0-9a-f ]+: fe 3f ff e0 call .*
+[0-9a-f ]+: fe 3f ff c9 call .*
+[0-9a-f ]+: fe 3f ff ca call .*
+[0-9a-f ]+: 1c f8 00 00 sethi\.p hi\(0x0\),gr14
+[0-9a-f ]+: 9c f4 00 c8 setlo 0xc8,gr14
+[0-9a-f ]+: 90 08 f1 4e ldd @\(gr15,gr14\),gr8
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 1c f8 00 00 sethi\.p hi\(0x0\),gr14
+[0-9a-f ]+: 9c f4 00 78 setlo 0x78,gr14
+[0-9a-f ]+: 90 08 f1 4e ldd @\(gr15,gr14\),gr8
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 1c f8 00 00 sethi\.p hi\(0x0\),gr14
+[0-9a-f ]+: 9c f4 00 88 setlo 0x88,gr14
+[0-9a-f ]+: 90 08 f1 4e ldd @\(gr15,gr14\),gr8
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 10 cc ff f8 lddi\.p @\(gr15,-8\),gr8
+[0-9a-f ]+: 9c fc ff f8 setlos 0xf*fffffff8,gr14
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 10 cc f0 18 lddi\.p @\(gr15,24\),gr8
+[0-9a-f ]+: 9c fc 00 18 setlos 0x18,gr14
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 10 cc f0 38 lddi\.p @\(gr15,56\),gr8
+[0-9a-f ]+: 9c fc 00 38 setlos 0x38,gr14
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 24 setlos 0xf*fffff824,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 08 24 setlos 0x824,gr9
+[0-9a-f ]+: 92 f8 00 00 sethi hi\(0x0\),gr9
+[0-9a-f ]+: 92 f4 f8 24 setlo 0xf824,gr9
+[0-9a-f ]+: fe 3f ff b0 call .*
+[0-9a-f ]+: fe 3f ff b5 call .*
+[0-9a-f ]+: fe 3f ff ba call .*
+[0-9a-f ]+: 1c f8 00 00 sethi\.p hi\(0x0\),gr14
+[0-9a-f ]+: 9c f4 00 90 setlo 0x90,gr14
+[0-9a-f ]+: 90 08 f1 4e ldd @\(gr15,gr14\),gr8
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 1c f8 00 00 sethi\.p hi\(0x0\),gr14
+[0-9a-f ]+: 9c f4 00 a0 setlo 0xa0,gr14
+[0-9a-f ]+: 90 08 f1 4e ldd @\(gr15,gr14\),gr8
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 1c f8 00 00 sethi\.p hi\(0x0\),gr14
+[0-9a-f ]+: 9c f4 00 b8 setlo 0xb8,gr14
+[0-9a-f ]+: 90 08 f1 4e ldd @\(gr15,gr14\),gr8
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 10 cc f0 48 lddi\.p @\(gr15,72\),gr8
+[0-9a-f ]+: 9c fc 00 48 setlos 0x48,gr14
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 10 cc ff a0 lddi\.p @\(gr15,-96\),gr8
+[0-9a-f ]+: 9c fc ff a0 setlos 0xf*ffffffa0,gr14
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 10 cc ff d0 lddi\.p @\(gr15,-48\),gr8
+[0-9a-f ]+: 9c fc ff d0 setlos 0xf*ffffffd0,gr14
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 04 setlos 0x4,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 10 04 setlos 0x1004,gr9
+[0-9a-f ]+: 92 f8 00 01 sethi 0x1,gr9
+[0-9a-f ]+: 92 f4 00 04 setlo 0x4,gr9
+[0-9a-f ]+: fe 3f ff 94 call .*
+[0-9a-f ]+: fe 3f ff 99 call .*
+[0-9a-f ]+: fe 3f ff 9e call .*
+[0-9a-f ]+: 1c f8 00 00 sethi\.p hi\(0x0\),gr14
+[0-9a-f ]+: 9c f4 00 b0 setlo 0xb0,gr14
+[0-9a-f ]+: 90 08 f1 4e ldd @\(gr15,gr14\),gr8
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 1c f8 00 00 sethi\.p hi\(0x0\),gr14
+[0-9a-f ]+: 9c f4 00 80 setlo 0x80,gr14
+[0-9a-f ]+: 90 08 f1 4e ldd @\(gr15,gr14\),gr8
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 1c f8 00 00 sethi\.p hi\(0x0\),gr14
+[0-9a-f ]+: 9c f4 00 70 setlo 0x70,gr14
+[0-9a-f ]+: 90 08 f1 4e ldd @\(gr15,gr14\),gr8
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 10 cc f0 20 lddi\.p @\(gr15,32\),gr8
+[0-9a-f ]+: 9c fc 00 20 setlos 0x20,gr14
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 10 cc f0 28 lddi\.p @\(gr15,40\),gr8
+[0-9a-f ]+: 9c fc 00 28 setlos 0x28,gr14
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+[0-9a-f ]+: 10 cc ff c0 lddi\.p @\(gr15,-64\),gr8
+[0-9a-f ]+: 9c fc ff c0 setlos 0xf*ffffffc0,gr14
+[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
+Disassembly of section \.got:
+
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_-0x60)>:
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 17 f3 \*unknown\*
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE x
+[0-9a-f ]+: 00 00 10 01 add\.p sp,sp,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 10 01 add\.p sp,sp,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 10 03 add\.p sp,gr3,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE x
+[0-9a-f ]+: 00 01 00 03 add\.p gr16,gr3,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 01 07 f1 \*unknown\*
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 01 07 f3 \*unknown\*
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE x
+[0-9a-f ]+: 00 01 00 01 add\.p gr16,sp,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 01 00 01 add\.p gr16,sp,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 01 00 03 add\.p gr16,gr3,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 00 11 add\.p gr0,gr17,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 00 13 add\.p gr0,gr19,gr0
+
+[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 10 11 add\.p sp,gr17,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 10 13 add\.p sp,gr19,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE x
+[0-9a-f ]+: 00 00 00 03 add\.p gr0,gr3,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE x
+[0-9a-f ]+: 00 00 10 03 add\.p sp,gr3,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 01 00 11 add\.p gr16,gr17,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 01 00 13 add\.p gr16,gr19,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 07 f1 \*unknown\*
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 07 f3 \*unknown\*
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE x
+[0-9a-f ]+: 00 00 00 01 add\.p gr0,sp,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 00 01 add\.p gr0,sp,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 00 03 add\.p gr0,gr3,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 17 f1 \*unknown\*
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE x
+[0-9a-f ]+: 00 01 00 02 add\.p gr16,fp,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 10 12 add\.p sp,gr18,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE x
+[0-9a-f ]+: 00 00 10 02 add\.p sp,fp,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 01 00 12 add\.p gr16,gr18,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 07 f2 \*unknown\*
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 00 02 add\.p gr0,fp,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 17 f2 \*unknown\*
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 10 02 add\.p sp,fp,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE x
+[0-9a-f ]+: 00 00 00 02 add\.p gr0,fp,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 01 07 f2 \*unknown\*
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 01 00 02 add\.p gr16,fp,gr0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
+[0-9a-f ]+: 00 00 00 12 add\.p gr0,gr18,gr0
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-shared-3.d b/binutils-2.21/ld/testsuite/ld-frv/tls-shared-3.d
new file mode 100644
index 0000000..c4eed38
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-shared-3.d
@@ -0,0 +1,27 @@
+#name: FRV TLS undefweak relocs, shared linking
+#source: tls-3.s
+#objdump: -DR -j .text -j .got -j .plt
+#ld: -shared
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<_start>:
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 c8 f0 0c ldi\.p @\(gr15,12\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
+Disassembly of section \.got:
+
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
+ \.\.\.
+[0-9a-f ]+: R_FRV_TLSOFF u
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-static-1.d b/binutils-2.21/ld/testsuite/ld-frv/tls-static-1.d
new file mode 100644
index 0000000..d33d8cf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-static-1.d
@@ -0,0 +1,70 @@
+#name: FRV TLS relocs, static linking
+#source: tls-1.s
+#objdump: -D -j .text -j .got -j .plt
+#ld: -static tmpdir/tls-1-dep.o
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<_start>:
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 fc f8 10 setlos\.p 0xf*fffff810,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 20 setlos 0xf*fffff820,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 20 setlos 0xf*fffff820,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 fc f8 20 setlos\.p 0xf*fffff820,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 30 setlos 0xf*fffff830,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 30 setlos 0xf*fffff830,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 fc f8 30 setlos\.p 0xf*fffff830,gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 fc 00 00 setlos\.p lo\(0x0\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 90 fc f8 30 setlos 0xf*fffff830,gr8
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 92 fc f8 20 setlos 0xf*fffff820,gr9
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 92 fc f8 20 setlos 0xf*fffff820,gr9
+[0-9a-f ]+: 92 fc f8 30 setlos 0xf*fffff830,gr9
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 10 setlos 0xf*fffff810,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 20 setlos 0xf*fffff820,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc f8 30 setlos 0xf*fffff830,gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
+Disassembly of section \.got:
+
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
+ \.\.\.
+[0-9a-f ]+: ff ff f8 30 cop2 -32,cpr63,cpr48,cpr63
+[0-9a-f ]+: ff ff f8 10 cop2 -32,cpr63,cpr16,cpr63
+[0-9a-f ]+: ff ff f8 20 cop2 -32,cpr63,cpr32,cpr63
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls-static-3.d b/binutils-2.21/ld/testsuite/ld-frv/tls-static-3.d
new file mode 100644
index 0000000..e761cc8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls-static-3.d
@@ -0,0 +1,26 @@
+#name: FRV TLS undefweak relocs, static linking
+#source: tls-3.s
+#objdump: -D -j .text -j .got -j .plt
+#ld: -static
+
+.*: file format elf.*frv.*
+
+Disassembly of section \.text:
+
+[0-9a-f ]+<_start>:
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 12 fc 00 00 setlos\.p lo\(0x0\),gr9
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
+[0-9a-f ]+: 00 88 00 00 nop\.p
+[0-9a-f ]+: 80 88 00 00 nop
+[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
+Disassembly of section \.got:
+
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-frv/tls.exp b/binutils-2.21/ld/testsuite/ld-frv/tls.exp
new file mode 100644
index 0000000..bb3d6a3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-frv/tls.exp
@@ -0,0 +1,65 @@
+# Expect script for FRV FDPIC TLS linker tests
+# Copyright 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+if {![istarget frv*-*-*] || ![is_elf_format]} {
+ return
+}
+
+global ASFLAGS
+set saved_ASFLAGS "$ASFLAGS"
+set ASFLAGS "$ASFLAGS -mfdpic"
+
+global LDFLAGS
+set saved_LDFLAGS "$LDFLAGS"
+set LDFLAGS "$LDFLAGS -melf32frvfd"
+
+run_ld_link_tests [list [list "tls-1-dep" "$LDFLAGS -shared" "" "tls-1-dep.s" [list] "tls-1-dep.so" ""]]
+run_dump_test "tls-static-1"
+run_dump_test "tls-dynamic-1"
+run_dump_test "tls-pie-1"
+run_dump_test "tls-shared-1-fail"
+run_dump_test "tls-shared-1"
+
+run_dump_test "tls-relax-static-1"
+run_dump_test "tls-relax-dynamic-1"
+run_dump_test "tls-relax-pie-1"
+run_dump_test "tls-relax-shared-1"
+
+run_dump_test "tls-dynamic-2"
+run_dump_test "tls-shared-2"
+run_dump_test "tls-initial-shared-2"
+
+run_dump_test "tls-relax-dynamic-2"
+run_dump_test "tls-relax-shared-2"
+run_dump_test "tls-relax-initial-shared-2"
+
+run_dump_test "tls-static-3"
+run_dump_test "tls-dynamic-3"
+run_dump_test "tls-pie-3"
+run_dump_test "tls-shared-3"
+
+run_dump_test "tls-relax-static-3"
+run_dump_test "tls-relax-dynamic-3"
+run_dump_test "tls-relax-pie-3"
+run_dump_test "tls-relax-shared-3"
+
+set LDFLAGS "$saved_LDFLAGS"
+set ASFLAGS "$saved_ASFLAGS"
diff --git a/binutils-2.21/ld/testsuite/ld-gc/abi-note.d b/binutils-2.21/ld/testsuite/ld-gc/abi-note.d
new file mode 100644
index 0000000..aed0a8b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-gc/abi-note.d
@@ -0,0 +1,9 @@
+#name: --gc-sections with note section
+#ld: --gc-sections -e _start
+#readelf: -S --wide
+#target: *-*-linux*
+#notarget: *-*-*aout *-*-*oldld
+
+#...
+.* .note.ABI-tag[ ]+NOTE.*
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-gc/abi-note.s b/binutils-2.21/ld/testsuite/ld-gc/abi-note.s
new file mode 100644
index 0000000..22536c0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-gc/abi-note.s
@@ -0,0 +1,15 @@
+ .text
+ .global _start
+_start:
+ .long 1
+
+ .section ".note.ABI-tag", "a"
+ .p2align 2
+ .long 1f - 0f /* name length */
+ .long 3f - 2f /* data length */
+ .long 1 /* note type */
+0: .asciz "GNU" /* vendor name */
+1: .p2align 2
+2: .long 1
+ .long 2
+3: .p2align 2 /* pad out section */
diff --git a/binutils-2.21/ld/testsuite/ld-gc/dummy.s b/binutils-2.21/ld/testsuite/ld-gc/dummy.s
new file mode 100644
index 0000000..403f980
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-gc/dummy.s
@@ -0,0 +1 @@
+# Dummy
diff --git a/binutils-2.21/ld/testsuite/ld-gc/gc.c b/binutils-2.21/ld/testsuite/ld-gc/gc.c
new file mode 100644
index 0000000..3b0e655
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-gc/gc.c
@@ -0,0 +1,41 @@
+int unused_var = 7;
+int used_var = 7;
+
+int
+unused_func (int v)
+{
+ return 3 * unused_var;
+}
+
+int
+__attribute__((noinline))
+used_func (int v)
+{
+ return 2 * used_var;
+}
+
+int
+main (void)
+{
+ return used_func (5);
+}
+
+void
+dummy_func (void)
+{
+ /* These are here in case the target prepends an underscore to
+ the start of function names. They are inside a dummy function
+ so that they will appear at the end of gcc's assembler output,
+ after the definitions of main() and used_func(), rather than
+ at the beginning of the file. */
+
+ __asm__(".ifndef main\n\
+.global main\n\
+.set main, _main\n\
+.endif");
+
+ __asm__(".ifndef used_func\n\
+.global used_func\n\
+.set used_func, _used_func\n\
+.endif");
+}
diff --git a/binutils-2.21/ld/testsuite/ld-gc/gc.exp b/binutils-2.21/ld/testsuite/ld-gc/gc.exp
new file mode 100644
index 0000000..7005442
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-gc/gc.exp
@@ -0,0 +1,102 @@
+# Expect script for ld-gc tests
+# Copyright 2008, 2009, 2010
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+# These tests require --gc-sections
+if ![check_gc_sections_available] {
+ return
+}
+
+set cflags "-ffunction-sections -fdata-sections"
+set objfile "tmpdir/gc.o"
+
+if { [is_remote host] || [which $CC] != 0 } {
+ ld_compile "$CC -c $CFLAGS $cflags" $srcdir/$subdir/gc.c $objfile
+}
+
+proc test_gc { testname filename linker ldflags} {
+ global nm
+ global srcdir
+ global subdir
+ global nm_output
+ global objfile
+
+ if ![file readable $objfile ] {
+ untested $testname
+ return
+ }
+
+ set outfile "tmpdir/$filename"
+ set options "-L$srcdir/$subdir"
+ append options " " $ldflags " " [ld_simple_link_defsyms] " " $objfile
+
+ # SH64 targets needs an extra ld option for this test.
+ if [istarget sh64*-*-*] {
+ if [istarget sh64*l*-*-*] {
+ set options "-mshlelf32 $options"
+ } else {
+ set options "-mshelf32 $options"
+ }
+ }
+
+ if ![ld_simple_link $linker $outfile $options] {
+ fail $testname
+ return
+ }
+ if ![ld_nm $nm "" $outfile] {
+ unresolved $testname
+ return
+ }
+ if {![info exists nm_output(used_func)] \
+ || ![info exists nm_output(used_var)]} {
+ send_log "used sections do not exist\n"
+ verbose "used sections do not exist"
+ fail $testname
+ return
+ }
+ #ppc64_elf_gc_mark_hook needs to be taught how to look through
+ #the .toc section to properly mark variable sections for gc.
+ setup_xfail "powerpc64*-*-*"
+ if {[info exists nm_output(unused_func)] \
+ || [info exists nm_output(unused_var)]} {
+ send_log "unused section still here\n"
+ verbose "unused section still here"
+ fail $testname
+ return
+ }
+ pass $testname
+}
+
+test_gc "Check --gc-section" "gcexe" $ld "--gc-sections -e main"
+test_gc "Check --gc-section/-q" "gcrexe" $ld "--gc-sections -q -e main"
+test_gc "Check --gc-section/-r/-e" "gcrel" $ld "-r --gc-sections -e main"
+test_gc "Check --gc-section/-r/-u" "gcrel" $ld "-r --gc-sections -u used_func"
+
+run_dump_test "noent"
+run_dump_test "abi-note"
+run_dump_test "start"
+if { [is_remote host] || [which $CC] != 0 } {
+ if { [istarget "*-*-linux*"] } {
+ ld_compile "$CC -fPIC $CFLAGS $cflags" $srcdir/$subdir/pr11218-1.c tmpdir/pr11218-1.o
+ ld_simple_link $ld tmpdir/pr11218-1.so "-shared tmpdir/pr11218-1.o"
+ ld_compile "$CC -c $CFLAGS $cflags" $srcdir/$subdir/pr11218-2.c tmpdir/pr11218-2.o
+ run_dump_test "pr11218"
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-gc/noent.d b/binutils-2.21/ld/testsuite/ld-gc/noent.d
new file mode 100644
index 0000000..1741a74
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-gc/noent.d
@@ -0,0 +1,3 @@
+# name: --gc-sections -r without -e
+# ld: --gc-sections -r
+# error: gc-sections requires either an entry or an undefined symbol
diff --git a/binutils-2.21/ld/testsuite/ld-gc/noent.s b/binutils-2.21/ld/testsuite/ld-gc/noent.s
new file mode 100644
index 0000000..ea74bf4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-gc/noent.s
@@ -0,0 +1,4 @@
+ .text
+ .globl entry
+entry:
+ .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-gc/pr11218-1.c b/binutils-2.21/ld/testsuite/ld-gc/pr11218-1.c
new file mode 100644
index 0000000..9cc79f0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-gc/pr11218-1.c
@@ -0,0 +1,5 @@
+extern void unresolved_detected_at_runtime_not_at_linktime(void);
+void foo_in_so(void)
+{
+ unresolved_detected_at_runtime_not_at_linktime();
+}
diff --git a/binutils-2.21/ld/testsuite/ld-gc/pr11218-2.c b/binutils-2.21/ld/testsuite/ld-gc/pr11218-2.c
new file mode 100644
index 0000000..2515bc6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-gc/pr11218-2.c
@@ -0,0 +1,13 @@
+extern void foo_in_so(void);
+
+void call_unresolved(void)
+{
+ unresolved_detected_at_runtime_not_at_linktime();
+}
+
+int main(int argc, char *argv[])
+{
+ foo_in_so();
+
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-gc/pr11218.d b/binutils-2.21/ld/testsuite/ld-gc/pr11218.d
new file mode 100644
index 0000000..27019a8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-gc/pr11218.d
@@ -0,0 +1,5 @@
+# name: --gc-sections with shared library
+# source: dummy.s
+# ld: --gc-sections -e main tmpdir/pr11218-2.o tmpdir/pr11218-1.so
+# target: *-*-linux*
+# error: undefined reference to `unresolved_detected_at_runtime_not_at_linktime'
diff --git a/binutils-2.21/ld/testsuite/ld-gc/start.d b/binutils-2.21/ld/testsuite/ld-gc/start.d
new file mode 100644
index 0000000..80c43d9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-gc/start.d
@@ -0,0 +1,9 @@
+#name: --gc-sections with __start_
+#ld: --gc-sections -e _start
+#nm: -n
+#target: *-*-linux*
+#notarget: *-*-*aout *-*-*oldld
+
+#...
+[0-9a-f]+ A +__start__foo
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-gc/start.s b/binutils-2.21/ld/testsuite/ld-gc/start.s
new file mode 100644
index 0000000..d9f1b2d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-gc/start.s
@@ -0,0 +1,6 @@
+.globl _start
+_start:
+ .long __start__foo
+ .section _foo,"aw",%progbits
+foo:
+ .long 1
diff --git a/binutils-2.21/ld/testsuite/ld-h8300/gcsection.d b/binutils-2.21/ld/testsuite/ld-h8300/gcsection.d
new file mode 100644
index 0000000..638d985
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-h8300/gcsection.d
@@ -0,0 +1,27 @@
+# name: H8300 GCC section test case
+# ld: --gc-sections -m h8300helf
+# objdump: -d --no-show-raw-insn
+.*: file format .*-h8300
+
+Disassembly of section .text:
+
+00000100 <_functionWeUse>:
+ 100: mov.l er6,@-er7
+ 104: mov.l er7,er6
+ 106: subs #4,er7
+ 108: mov.w r0,@\(0xfffe:16,er6\)
+ 10c: mov.w @\(0xfffe:16,er6\),r2
+ 110: mov.w r2,r0
+ 112: adds #4,er7
+ 114: mov.l @er7\+,er6
+ 118: rts
+
+0000011a <_start>:
+ 11a: mov.l er6,@-er7
+ 11e: mov.l er7,er6
+ 120: mov.w #0x4b,r0
+ 124: jsr @0x100:24
+ 128: mov.w r0,r2
+ 12a: mov.w r2,r0
+ 12c: mov.l @er7\+,er6
+ 130: rts
diff --git a/binutils-2.21/ld/testsuite/ld-h8300/gcsection.s b/binutils-2.21/ld/testsuite/ld-h8300/gcsection.s
new file mode 100644
index 0000000..2149ee9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-h8300/gcsection.s
@@ -0,0 +1,43 @@
+ .h8300h
+ .section .text.functionWeUse,"ax",@progbits
+ .align 1
+ .global _functionWeUse
+_functionWeUse:
+ mov.l er6,@-er7
+ mov.l er7,er6
+ subs #4,er7
+ mov.w r0,@(-2,er6)
+ mov.w @(-2,er6),r2
+ mov.w r2,r0
+ adds #4,er7
+ mov.l @er7+,er6
+ rts
+ .size _functionWeUse, .-_functionWeUse
+ .section .text.functionWeDontUse,"ax",@progbits
+ .align 1
+ .global _functionWeDontUse
+_functionWeDontUse:
+ mov.l er6,@-er7
+ mov.l er7,er6
+ subs #4,er7
+ mov.w r0,@(-2,er6)
+ mov.w @(-2,er6),r2
+ mov.w r2,r0
+ adds #4,er7
+ mov.l @er7+,er6
+ rts
+ .size _functionWeDontUse, .-_functionWeDontUse
+ .section .text.start,"ax",@progbits
+ .align 1
+ .global _start
+_start:
+ mov.l er6,@-er7
+ mov.l er7,er6
+ mov.w #75,r0
+ jsr @_functionWeUse
+ mov.w r0,r2
+ mov.w r2,r0
+ mov.l @er7+,er6
+ rts
+ .size _start, .-_start
+ .end
diff --git a/binutils-2.21/ld/testsuite/ld-h8300/h8300.exp b/binutils-2.21/ld/testsuite/ld-h8300/h8300.exp
new file mode 100644
index 0000000..3604dfa
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-h8300/h8300.exp
@@ -0,0 +1,44 @@
+# Expect script for ld-h8300 tests
+# Copyright 2002, 2003, 2004, 2005, 2007, 2010 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by Nick Clifton <nickc@redhat.com>
+#
+
+# Test h8300
+
+if ![istarget h8300-*-*] {
+ return
+}
+
+run_dump_test relax
+
+if [is_elf_format] {
+ run_dump_test relax-2
+ run_dump_test relax-3
+ run_dump_test relax-4
+ run_dump_test relax-5
+ run_dump_test relax-6
+ run_dump_test gcsection
+} else {
+ run_dump_test relax-3-coff
+ run_dump_test relax-4-coff
+ run_dump_test relax-5-coff
+ run_dump_test relax-6-coff
+}
diff --git a/binutils-2.21/ld/testsuite/ld-h8300/relax-2.d b/binutils-2.21/ld/testsuite/ld-h8300/relax-2.d
new file mode 100644
index 0000000..963139d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-h8300/relax-2.d
@@ -0,0 +1,11 @@
+# name: H8300 Relaxation Test 2
+# ld: --relax -m h8300helf
+# objdump: -d --no-show-raw-insn
+
+.*: file format .*-h8300
+
+Disassembly of section .text:
+
+00000100 <_start>:
+ *100: mov.b @0x67:8,r0l
+ *102: mov.b @0x4321:16,r0l
diff --git a/binutils-2.21/ld/testsuite/ld-h8300/relax-2.s b/binutils-2.21/ld/testsuite/ld-h8300/relax-2.s
new file mode 100644
index 0000000..aa82dba
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-h8300/relax-2.s
@@ -0,0 +1,8 @@
+ .h8300h
+ .globl _start
+_start:
+ mov.b @foo:16,r0l
+ mov.b @bar:32,r0l
+
+ .equ foo,0xffff67
+ .equ bar,0x4321
diff --git a/binutils-2.21/ld/testsuite/ld-h8300/relax-3-coff.d b/binutils-2.21/ld/testsuite/ld-h8300/relax-3-coff.d
new file mode 100644
index 0000000..0384398
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-h8300/relax-3-coff.d
@@ -0,0 +1,36 @@
+# name: H8300 Relaxation Test 3 (for COFF)
+# source: relax-3.s
+# ld: --relax -m h8300s
+# objdump: -d
+
+.*: file format .*-h8300
+
+Disassembly of section .text:
+
+00000100 <_start>:
+#
+# Relaxation of aa:16
+#
+.*: 6a 08 00 00.*mov.b @0x0:16,r0l
+.*: 6a 08 7f ff.*mov.b @0x7fff:16,r0l
+.*: 6a 08 80 00.*mov.b @0x8000:16,r0l
+.*: 6a 08 fe ff.*mov.b @0xfeff:16,r0l
+.*: 28 00 .*mov.b @0x0:8,r0l
+.*: 28 ff .*mov.b @0xff:8,r0l
+#
+# Relaxation of aa:32
+#
+.*: 6a 08 00 00.*mov.b @0x0:16,r0l
+.*: 6a 08 7f ff.*mov.b @0x7fff:16,r0l
+.*: 6a 28 00 00.*mov.b @0x8000:32,r0l
+.*: 80 00
+.*: 6a 28 00 00.*mov.b @0xff00:32,r0l
+.*: ff 00
+.*: 6a 28 00 ff.*mov.b @0xffff00:32,r0l
+.*: ff 00
+.*: 6a 28 ff ff.*mov.b @0xffff7fff:32,r0l
+.*: 7f ff
+.*: 6a 08 80 00.*mov.b @0x8000:16,r0l
+.*: 6a 08 fe ff.*mov.b @0xfeff:16,r0l
+.*: 28 00 .*mov.b @0x0:8,r0l
+.*: 28 ff .*mov.b @0xff:8,r0l
diff --git a/binutils-2.21/ld/testsuite/ld-h8300/relax-3.d b/binutils-2.21/ld/testsuite/ld-h8300/relax-3.d
new file mode 100644
index 0000000..b9eded2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-h8300/relax-3.d
@@ -0,0 +1,35 @@
+# name: H8300 Relaxation Test 3
+# ld: --relax -m h8300self
+# objdump: -d
+
+.*: file format .*-h8300
+
+Disassembly of section .text:
+
+00000100 <_start>:
+#
+# Relaxation of aa:16
+#
+.*: 6a 08 00 00 mov.b @0x0:16,r0l
+.*: 6a 08 7f ff mov.b @0x7fff:16,r0l
+.*: 6a 08 80 00 mov.b @0x8000:16,r0l
+.*: 6a 08 fe ff mov.b @0xfeff:16,r0l
+.*: 28 00 * mov.b @0x0:8,r0l
+.*: 28 ff * mov.b @0xff:8,r0l
+#
+# Relaxation of aa:32
+#
+.*: 6a 08 00 00 mov.b @0x0:16,r0l
+.*: 6a 08 7f ff mov.b @0x7fff:16,r0l
+.*: 6a 28 00 00 mov.b @0x8000:32,r0l
+.*: 80 00
+.*: 6a 28 00 00 mov.b @0xff00:32,r0l
+.*: ff 00
+.*: 6a 28 00 ff mov.b @0xffff00:32,r0l
+.*: ff 00
+.*: 6a 28 ff ff mov.b @0xffff7fff:32,r0l
+.*: 7f ff
+.*: 6a 08 80 00 mov.b @0x8000:16,r0l
+.*: 6a 08 fe ff mov.b @0xfeff:16,r0l
+.*: 28 00 * mov.b @0x0:8,r0l
+.*: 28 ff * mov.b @0xff:8,r0l
diff --git a/binutils-2.21/ld/testsuite/ld-h8300/relax-3.s b/binutils-2.21/ld/testsuite/ld-h8300/relax-3.s
new file mode 100644
index 0000000..f4a2346
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-h8300/relax-3.s
@@ -0,0 +1,32 @@
+ .h8300s
+ .globl _start
+_start:
+ # s3-s6 aren't valid 16-bit addresses.
+ mov.b @s1:16,r0l
+ mov.b @s2:16,r0l
+ mov.b @s7:16,r0l
+ mov.b @s8:16,r0l
+ mov.b @s9:16,r0l
+ mov.b @s10:16,r0l
+
+ mov.b @s1:32,r0l
+ mov.b @s2:32,r0l
+ mov.b @s3:32,r0l
+ mov.b @s4:32,r0l
+ mov.b @s5:32,r0l
+ mov.b @s6:32,r0l
+ mov.b @s7:32,r0l
+ mov.b @s8:32,r0l
+ mov.b @s9:32,r0l
+ mov.b @s10:32,r0l
+
+ .equ s1,0
+ .equ s2,0x7fff
+ .equ s3,0x8000
+ .equ s4,0xff00
+ .equ s5,0xffff00
+ .equ s6,0xffff7fff
+ .equ s7,0xffff8000
+ .equ s8,0xfffffeff
+ .equ s9,0xffffff00
+ .equ s10,0xffffffff
diff --git a/binutils-2.21/ld/testsuite/ld-h8300/relax-4-coff.d b/binutils-2.21/ld/testsuite/ld-h8300/relax-4-coff.d
new file mode 100644
index 0000000..d6417ac
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-h8300/relax-4-coff.d
@@ -0,0 +1,76 @@
+# name: H8300 Relaxation Test 4 (for COFF)
+# source: relax-4.s
+# ld: --relax -m h8300s
+# objdump: -d
+
+.*: file format .*-h8300
+
+Disassembly of section .text:
+
+00000100 <_start>:
+ 100: f8 03.*mov.b #0x3,r0l
+ 102: fa 05.*mov.b #0x5,r2l
+ 104: 7f ff 60 80.*bset r0l,@0xff:8
+ 108: 7f 00 60 a0.*bset r2l,@0x0:8
+ 10c: 7e ff 63 a0.*btst r2l,@0xff:8
+ 110: 7e 00 63 80.*btst r0l,@0x0:8
+ 114: 6a 18 00 00.*bset #0x5,@0x0:16
+ 118: 70 50
+ 11a: 6a 18 7f ff.*bset #0x5,@0x7fff:16
+ 11e: 70 50
+ 120: 6a 18 80 00.*bset #0x5,@0x8000:16
+ 124: 70 50
+ 126: 6a 18 fe ff.*bset #0x5,@0xfeff:16
+ 12a: 70 50
+ 12c: 7f 00 70 50.*bset #0x5,@0x0:8
+ 130: 7f ff 70 50.*bset #0x5,@0xff:8
+ 134: 6a 10 00 00.*band #0x5,@0x0:16
+ 138: 76 50
+ 13a: 6a 10 7f ff.*band #0x5,@0x7fff:16
+ 13e: 76 50
+ 140: 6a 10 80 00.*band #0x5,@0x8000:16
+ 144: 76 50
+ 146: 6a 10 fe ff.*band #0x5,@0xfeff:16
+ 14a: 76 50
+ 14c: 7e 00 76 50.*band #0x5,@0x0:8
+ 150: 7e ff 76 50.*band #0x5,@0xff:8
+ 154: 7f ff 60 a0.*bset r2l,@0xff:8
+ 158: 7f 00 60 80.*bset r0l,@0x0:8
+ 15c: 7e ff 63 80.*btst r0l,@0xff:8
+ 160: 7e 00 63 a0.*btst r2l,@0x0:8
+ 164: 6a 18 00 00.*bset #0x6,@0x0:16
+ 168: 70 60
+ 16a: 6a 18 7f ff.*bset #0x6,@0x7fff:16
+ 16e: 70 60
+ 170: 6a 38 00 00.*bset #0x6,@0x8000:32
+ 174: 80 00 70 60
+ 178: 6a 38 00 00.*bset #0x6,@0xff00:32
+ 17c: ff 00 70 60
+ 180: 6a 38 00 ff.*bset #0x6,@0xffff00:32
+ 184: ff 00 70 60
+ 188: 6a 38 ff ff.*bset #0x6,@0xffff7fff:32
+ 18c: 7f ff 70 60
+ 190: 6a 18 80 00.*bset #0x6,@0x8000:16
+ 194: 70 60
+ 196: 6a 18 fe ff.*bset #0x6,@0xfeff:16
+ 19a: 70 60
+ 19c: 7f 00 70 60.*bset #0x6,@0x0:8
+ 1a0: 7f ff 70 60.*bset #0x6,@0xff:8
+ 1a4: 6a 10 00 00.*band #0x6,@0x0:16
+ 1a8: 76 60
+ 1aa: 6a 10 7f ff.*band #0x6,@0x7fff:16
+ 1ae: 76 60
+ 1b0: 6a 30 00 00.*band #0x6,@0x8000:32
+ 1b4: 80 00 76 60
+ 1b8: 6a 30 00 00.*band #0x6,@0xff00:32
+ 1bc: ff 00 76 60
+ 1c0: 6a 30 00 ff.*band #0x6,@0xffff00:32
+ 1c4: ff 00 76 60
+ 1c8: 6a 30 ff ff.*band #0x6,@0xffff7fff:32
+ 1cc: 7f ff 76 60
+ 1d0: 6a 10 80 00.*band #0x6,@0x8000:16
+ 1d4: 76 60
+ 1d6: 6a 10 fe ff.*band #0x6,@0xfeff:16
+ 1da: 76 60
+ 1dc: 7e 00 76 60.*band #0x6,@0x0:8
+ 1e0: 7e ff 76 60.*band #0x6,@0xff:8
diff --git a/binutils-2.21/ld/testsuite/ld-h8300/relax-4.d b/binutils-2.21/ld/testsuite/ld-h8300/relax-4.d
new file mode 100644
index 0000000..b8d38ce
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-h8300/relax-4.d
@@ -0,0 +1,51 @@
+# name: H8300 Relaxation Test 4
+# ld: --relax -m h8300self
+# objdump: -d --no-show-raw-insn
+
+.*: file format .*-h8300
+
+Disassembly of section .text:
+
+00000100 <_start>:
+ 100: mov.b #0x3,r0l
+ 102: mov.b #0x5,r2l
+ 104: bset r0l,@0xff:8
+ 108: bset r2l,@0x0:8
+ 10c: btst r2l,@0xff:8
+ 110: btst r0l,@0x0:8
+ 114: bset #0x5,@0x0:16
+ 11a: bset #0x5,@0x7fff:16
+ 120: bset #0x5,@0x8000:16
+ 126: bset #0x5,@0xfeff:16
+ 12c: bset #0x5,@0x0:8
+ 130: bset #0x5,@0xff:8
+ 134: band #0x5,@0x0:16
+ 13a: band #0x5,@0x7fff:16
+ 140: band #0x5,@0x8000:16
+ 146: band #0x5,@0xfeff:16
+ 14c: band #0x5,@0x0:8
+ 150: band #0x5,@0xff:8
+ 154: bset r2l,@0xff:8
+ 158: bset r0l,@0x0:8
+ 15c: btst r0l,@0xff:8
+ 160: btst r2l,@0x0:8
+ 164: bset #0x6,@0x0:16
+ 16a: bset #0x6,@0x7fff:16
+ 170: bset #0x6,@0x8000:32
+ 178: bset #0x6,@0xff00:32
+ 180: bset #0x6,@0xffff00:32
+ 188: bset #0x6,@0xffff7fff:32
+ 190: bset #0x6,@0x8000:16
+ 196: bset #0x6,@0xfeff:16
+ 19c: bset #0x6,@0x0:8
+ 1a0: bset #0x6,@0xff:8
+ 1a4: band #0x6,@0x0:16
+ 1aa: band #0x6,@0x7fff:16
+ 1b0: band #0x6,@0x8000:32
+ 1b8: band #0x6,@0xff00:32
+ 1c0: band #0x6,@0xffff00:32
+ 1c8: band #0x6,@0xffff7fff:32
+ 1d0: band #0x6,@0x8000:16
+ 1d6: band #0x6,@0xfeff:16
+ 1dc: band #0x6,@0x0:8
+ 1e0: band #0x6,@0xff:8
diff --git a/binutils-2.21/ld/testsuite/ld-h8300/relax-4.s b/binutils-2.21/ld/testsuite/ld-h8300/relax-4.s
new file mode 100644
index 0000000..32b5b06
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-h8300/relax-4.s
@@ -0,0 +1,72 @@
+; Relaxation is possible for following bit manipulation instructions
+; BAND, BCLR, BIAND, BILD, BIOR, BIST, BIXOR, BLD, BNOT, BOR, BSET, BST, BTST, BXOR
+ .h8300s
+ .globl _start
+ _start:
+ # s3-s6 aren't valid 16-bit addresses.
+ mov.b #0x3,r0l
+ mov.b #0x5,r2l
+;
+; Relaxation of aa:16
+;
+ bset r0l,@s10:16
+ bset r2l,@s9:16
+ btst r2l,@s10:16
+ btst r0l,@s9:16
+
+ bset #5,@s1:16
+ bset #5,@s2:16
+ bset #5,@s7:16
+ bset #5,@s8:16
+ bset #5,@s9:16
+ bset #5,@s10:16
+
+ band #5,@s1:16
+ band #5,@s2:16
+ band #5,@s7:16
+ band #5,@s8:16
+ band #5,@s9:16
+ band #5,@s10:16
+;
+; Relaxation of aa:32
+;
+ bset r2l,@s10:32
+ bset r0l,@s9:32
+ btst r0l,@s10:32
+ btst r2l,@s9:32
+
+ bset #6,@s1:32
+ bset #6,@s2:32
+ bset #6,@s3:32
+ bset #6,@s4:32
+ bset #6,@s5:32
+ bset #6,@s6:32
+ bset #6,@s7:32
+ bset #6,@s8:32
+ bset #6,@s9:32
+ bset #6,@s10:32
+
+ band #6,@s1:32
+ band #6,@s2:32
+ band #6,@s3:32
+ band #6,@s4:32
+ band #6,@s5:32
+ band #6,@s6:32
+ band #6,@s7:32
+ band #6,@s8:32
+ band #6,@s9:32
+ band #6,@s10:32
+
+ .equ s1,0
+ .equ s2,0x7fff
+ .equ s3,0x8000
+ .equ s4,0xff00
+ .equ s5,0xffff00
+ .equ s6,0xffff7fff
+ .equ s7,0xffff8000
+ .equ s8,0xfffffeff
+ .equ s9,0xffffff00
+ .equ s10,0xffffffff
+
+ .end
+
diff --git a/binutils-2.21/ld/testsuite/ld-h8300/relax-5-coff.d b/binutils-2.21/ld/testsuite/ld-h8300/relax-5-coff.d
new file mode 100644
index 0000000..eed2ba0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-h8300/relax-5-coff.d
@@ -0,0 +1,50 @@
+# name: H8300 Relaxation Test 5 (for COFF)
+# source: relax-5.s
+# ld: --relax -m h8300s
+# objdump: -d --no-show-raw-insn
+
+.*: file format .*-h8300
+
+Disassembly of section .text:
+
+00000100 <_start>:
+ 100:.*ldc @0x0:16,ccr
+ 106:.*ldc @0x7fff:16,ccr
+ 10c:.*ldc @0x8000:32,ccr
+ 114:.*ldc @0xff00:32,ccr
+ 11c:.*ldc @0xffff00:32,ccr
+ 124:.*ldc @0xffff7fff:32,ccr
+ 12c:.*ldc @0x8000:16,ccr
+ 132:.*ldc @0xfeff:16,ccr
+ 138:.*ldc @0xff00:16,ccr
+ 13e:.*ldc @0xffff:16,ccr
+ 144:.*stc ccr,@0x0:16
+ 14a:.*stc ccr,@0x7fff:16
+ 150:.*stc ccr,@0x8000:32
+ 158:.*stc ccr,@0xff00:32
+ 160:.*stc ccr,@0xffff00:32
+ 168:.*stc ccr,@0xffff7fff:32
+ 170:.*stc ccr,@0x8000:16
+ 176:.*stc ccr,@0xfeff:16
+ 17c:.*stc ccr,@0xff00:16
+ 182:.*stc ccr,@0xffff:16
+ 188:.*ldc @0x0:16,exr
+ 18e:.*ldc @0x7fff:16,exr
+ 194:.*ldc @0x8000:32,exr
+ 19c:.*ldc @0xff00:32,exr
+ 1a4:.*ldc @0xffff00:32,exr
+ 1ac:.*ldc @0xffff7fff:32,exr
+ 1b4:.*ldc @0x8000:16,exr
+ 1ba:.*ldc @0xfeff:16,exr
+ 1c0:.*ldc @0xff00:16,exr
+ 1c6:.*ldc @0xffff:16,exr
+ 1cc:.*stc exr,@0x0:16
+ 1d2:.*stc exr,@0x7fff:16
+ 1d8:.*stc exr,@0x8000:32
+ 1e0:.*stc exr,@0xff00:32
+ 1e8:.*stc exr,@0xffff00:32
+ 1f0:.*stc exr,@0xffff7fff:32
+ 1f8:.*stc exr,@0x8000:16
+ 1fe:.*stc exr,@0xfeff:16
+ 204:.*stc exr,@0xff00:16
+ 20a:.*stc exr,@0xffff:16
diff --git a/binutils-2.21/ld/testsuite/ld-h8300/relax-5.d b/binutils-2.21/ld/testsuite/ld-h8300/relax-5.d
new file mode 100644
index 0000000..01e12a5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-h8300/relax-5.d
@@ -0,0 +1,50 @@
+# name: H8300 Relaxation Test 5
+# source: relax-5.s
+# ld: --relax -m h8300self
+# objdump: -d --no-show-raw-insn
+
+.*: file format .*-h8300
+
+Disassembly of section .text:
+
+00000100 <_start>:
+ 100: ldc @0x0:16,ccr
+ 106: ldc @0x7fff:16,ccr
+ 10c: ldc @0x8000:32,ccr
+ 114: ldc @0xff00:32,ccr
+ 11c: ldc @0xffff00:32,ccr
+ 124: ldc @0xffff7fff:32,ccr
+ 12c: ldc @0x8000:16,ccr
+ 132: ldc @0xfeff:16,ccr
+ 138: ldc @0xff00:16,ccr
+ 13e: ldc @0xffff:16,ccr
+ 144: stc ccr,@0x0:16
+ 14a: stc ccr,@0x7fff:16
+ 150: stc ccr,@0x8000:32
+ 158: stc ccr,@0xff00:32
+ 160: stc ccr,@0xffff00:32
+ 168: stc ccr,@0xffff7fff:32
+ 170: stc ccr,@0x8000:16
+ 176: stc ccr,@0xfeff:16
+ 17c: stc ccr,@0xff00:16
+ 182: stc ccr,@0xffff:16
+ 188: ldc @0x0:16,exr
+ 18e: ldc @0x7fff:16,exr
+ 194: ldc @0x8000:32,exr
+ 19c: ldc @0xff00:32,exr
+ 1a4: ldc @0xffff00:32,exr
+ 1ac: ldc @0xffff7fff:32,exr
+ 1b4: ldc @0x8000:16,exr
+ 1ba: ldc @0xfeff:16,exr
+ 1c0: ldc @0xff00:16,exr
+ 1c6: ldc @0xffff:16,exr
+ 1cc: stc exr,@0x0:16
+ 1d2: stc exr,@0x7fff:16
+ 1d8: stc exr,@0x8000:32
+ 1e0: stc exr,@0xff00:32
+ 1e8: stc exr,@0xffff00:32
+ 1f0: stc exr,@0xffff7fff:32
+ 1f8: stc exr,@0x8000:16
+ 1fe: stc exr,@0xfeff:16
+ 204: stc exr,@0xff00:16
+ 20a: stc exr,@0xffff:16
diff --git a/binutils-2.21/ld/testsuite/ld-h8300/relax-5.s b/binutils-2.21/ld/testsuite/ld-h8300/relax-5.s
new file mode 100644
index 0000000..b5afedb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-h8300/relax-5.s
@@ -0,0 +1,66 @@
+; Relaxation is possible from @aa:32 to @aa:16 for following instructions
+; ldc.w @@aa:32,ccr
+; stc.w ccr,@@aa:32
+; ldc.w @aa:32,exr
+; stc.w exr,@aa:32
+ .h8300s
+ .globl _start
+;
+; Relaxation of aa:32
+;
+ _start:
+ ldc @s1:32,ccr
+ ldc @s2:32,ccr
+ ldc @s3:32,ccr
+ ldc @s4:32,ccr
+ ldc @s5:32,ccr
+ ldc @s6:32,ccr
+ ldc @s7:32,ccr
+ ldc @s8:32,ccr
+ ldc @s9:32,ccr
+ ldc @s10:32,ccr
+
+ stc ccr,@s1:32
+ stc ccr,@s2:32
+ stc ccr,@s3:32
+ stc ccr,@s4:32
+ stc ccr,@s5:32
+ stc ccr,@s6:32
+ stc ccr,@s7:32
+ stc ccr,@s8:32
+ stc ccr,@s9:32
+ stc ccr,@s10:32
+
+ ldc @s1:32,exr
+ ldc @s2:32,exr
+ ldc @s3:32,exr
+ ldc @s4:32,exr
+ ldc @s5:32,exr
+ ldc @s6:32,exr
+ ldc @s7:32,exr
+ ldc @s8:32,exr
+ ldc @s9:32,exr
+ ldc @s10:32,exr
+
+ stc exr,@s1:32
+ stc exr,@s2:32
+ stc exr,@s3:32
+ stc exr,@s4:32
+ stc exr,@s5:32
+ stc exr,@s6:32
+ stc exr,@s7:32
+ stc exr,@s8:32
+ stc exr,@s9:32
+ stc exr,@s10:32
+
+ .equ s1,0
+ .equ s2,0x7fff
+ .equ s3,0x8000
+ .equ s4,0xff00
+ .equ s5,0xffff00
+ .equ s6,0xffff7fff
+ .equ s7,0xffff8000
+ .equ s8,0xfffffeff
+ .equ s9,0xffffff00
+ .equ s10,0xffffffff
+ .end
diff --git a/binutils-2.21/ld/testsuite/ld-h8300/relax-6-coff.d b/binutils-2.21/ld/testsuite/ld-h8300/relax-6-coff.d
new file mode 100644
index 0000000..b9c1e2f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-h8300/relax-6-coff.d
@@ -0,0 +1,11 @@
+# name: H8300 Relaxation Test 6
+# source: relax-6.s
+# ld: --relax -m h8300s
+# objdump: -d --no-show-raw-insn
+
+.*: file format .*-h8300
+Disassembly of section .text:
+
+00000100 <_start>:
+ 100: mov.b r2l,@0xbd:8
+ 102: rts
diff --git a/binutils-2.21/ld/testsuite/ld-h8300/relax-6.d b/binutils-2.21/ld/testsuite/ld-h8300/relax-6.d
new file mode 100644
index 0000000..023af78
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-h8300/relax-6.d
@@ -0,0 +1,11 @@
+# name: H8300 Relaxation Test 6
+# source: relax-6.s
+# ld: --relax -m h8300self
+# objdump: -d --no-show-raw-insn
+
+.*: file format .*-h8300
+Disassembly of section .text:
+
+00000100 <_start>:
+ 100: mov.b r2l,@0xbd:8
+ 102: rts
diff --git a/binutils-2.21/ld/testsuite/ld-h8300/relax-6.s b/binutils-2.21/ld/testsuite/ld-h8300/relax-6.s
new file mode 100644
index 0000000..fb44b54
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-h8300/relax-6.s
@@ -0,0 +1,5 @@
+ .h8300s
+ .global _start
+_start:
+ mov.b r2l,@0xFFFFFFBD:32
+ rts
diff --git a/binutils-2.21/ld/testsuite/ld-h8300/relax.d b/binutils-2.21/ld/testsuite/ld-h8300/relax.d
new file mode 100644
index 0000000..e7315a1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-h8300/relax.d
@@ -0,0 +1,21 @@
+# name: H8300 Relaxation Test
+# ld: --relax
+# objdump: -d
+
+# Based on the test case reported by Kazu Hirata:
+# http://sources.redhat.com/ml/binutils/2002-11/msg00301.html
+
+.*: file format .*-h8300
+
+Disassembly of section .text:
+
+00000100 <_start>:
+ 100: 0d 00.*mov.w r0,r0
+ 102: 47 02.*beq .+2 \(0x106\)
+ 104: 55 02.*bsr .+2 \(0x108\)
+
+00000106 <.L1>:
+ 106: 54 70.*rts
+
+00000108 <_bar>:
+ 108: 54 70.*rts
diff --git a/binutils-2.21/ld/testsuite/ld-h8300/relax.s b/binutils-2.21/ld/testsuite/ld-h8300/relax.s
new file mode 100644
index 0000000..b06f3a9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-h8300/relax.s
@@ -0,0 +1,10 @@
+ .text
+ .global _start
+_start:
+ mov.w r0,r0
+ beq .L1
+ jsr @_bar
+.L1:
+ rts
+_bar:
+ rts
diff --git a/binutils-2.21/ld/testsuite/ld-i386/abs.d b/binutils-2.21/ld/testsuite/ld-i386/abs.d
new file mode 100644
index 0000000..e660aca
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/abs.d
@@ -0,0 +1,11 @@
+#name: Absolute non-overflowing relocs
+#as: --32
+#source: abs.s
+#source: zero.s
+#ld: -melf_i386
+#objdump: -rs
+
+.*: file format .*
+
+Contents of section \.text:
+[ ][0-9a-f]+ c800fff0 c8000110 c9c3.*
diff --git a/binutils-2.21/ld/testsuite/ld-i386/abs.s b/binutils-2.21/ld/testsuite/ld-i386/abs.s
new file mode 100644
index 0000000..2705950
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/abs.s
@@ -0,0 +1,8 @@
+ .text
+ .global _start
+_start:
+ enter $zero + 0xff00, $zero + 0xf0
+ enter $zero - 0xff00, $zero - 0xf0
+ leave
+ ret
+ .p2align 4,0x90
diff --git a/binutils-2.21/ld/testsuite/ld-i386/alloc.d b/binutils-2.21/ld/testsuite/ld-i386/alloc.d
new file mode 100644
index 0000000..72d8e91
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/alloc.d
@@ -0,0 +1,4 @@
+#name: Invalid allocated section
+#as: --32
+#ld: -melf_i386 -T alloc.t
+#warning: .*section `.foo' can't be allocated in segment 0.*
diff --git a/binutils-2.21/ld/testsuite/ld-i386/alloc.s b/binutils-2.21/ld/testsuite/ld-i386/alloc.s
new file mode 100644
index 0000000..8c4f8fa
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/alloc.s
@@ -0,0 +1,6 @@
+ .section .bar,"ax","progbits"
+ .byte 0
+ .section .foo,"aw","progbits"
+ .byte 0
+ .bss
+ .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-i386/alloc.t b/binutils-2.21/ld/testsuite/ld-i386/alloc.t
new file mode 100644
index 0000000..ea7f48c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/alloc.t
@@ -0,0 +1,13 @@
+OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
+OUTPUT_ARCH(i386)
+PHDRS {
+ text PT_LOAD FLAGS(5); /* R_E */
+}
+SECTIONS
+{
+ . = 0xC0000000 + ((0x100000 + (0x100000 - 1)) & ~(0x100000 - 1));
+ .bar : AT(ADDR(.bar) - 0xC0000000) { *(.bar) } :text
+ .bss : AT(ADDR(.bss) - 0xC0000000) { *(.bss) }
+ .foo 0 : AT(ADDR(.bss) + SIZEOF(.bss) - 0xC0000000) { *(.foo) } :text
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-i386/combreloc.d b/binutils-2.21/ld/testsuite/ld-i386/combreloc.d
new file mode 100644
index 0000000..bbe9134
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/combreloc.d
@@ -0,0 +1,17 @@
+# Test that orphan reloc sections are merged into .rel.dyn with
+# -z combreloc.
+#source: combreloc.s
+#as: --32
+#ld: -shared -melf_i386 -z combreloc
+#readelf: -r
+
+Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 4 entries:
+ Offset Info Type Sym.Value Sym. Name
+[0-9a-f]+ [0-9a-f]+06 R_386_GLOB_DAT [0-9a-f]+ _start
+[0-9a-f]+ [0-9a-f]+01 R_386_32 [0-9a-f]+ _start
+[0-9a-f]+ [0-9a-f]+01 R_386_32 [0-9a-f]+ _start
+[0-9a-f]+ [0-9a-f]+01 R_386_32 [0-9a-f]+ _start
+
+Relocation section '.rel.plt' at offset 0x[0-9a-f]+ contains 1 entries:
+ Offset Info Type Sym.Value Sym. Name
+[0-9a-f]+ [0-9a-f]+07 R_386_JUMP_SLOT [0-9a-f]+ foo
diff --git a/binutils-2.21/ld/testsuite/ld-i386/combreloc.s b/binutils-2.21/ld/testsuite/ld-i386/combreloc.s
new file mode 100644
index 0000000..2a78a7c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/combreloc.s
@@ -0,0 +1,22 @@
+ .text
+ .globl _start, foo
+ .type _start,@function
+_start:
+ pushl %ebp
+ movl %esp, %ebp
+ pushl %ebx
+ call 1f
+1: popl %ebx
+ addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx
+ movl _start@GOT(%ebx), %eax
+ movl (%eax), %eax
+ call foo@PLT
+ movl (%esp), %ebx
+ leave
+foo: ret
+ .data
+ .long _start
+ .section "__libc_subfreeres", "aw", @progbits
+ .long _start
+ .section "__libc_atexit", "aw", @progbits
+ .long _start
diff --git a/binutils-2.21/ld/testsuite/ld-i386/compressed1.d b/binutils-2.21/ld/testsuite/ld-i386/compressed1.d
new file mode 100644
index 0000000..3a57c81
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/compressed1.d
@@ -0,0 +1,9 @@
+#name: undefined symbol with compressed debug sections
+#as: --32
+#ld: -e foo -melf_i386 --noinhibit-exec
+#warning: .*/compressed1.c:13: undefined reference to .bar.
+#nm: -n
+
+#...
+[ \t]+U bar
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-i386/compressed1.s b/binutils-2.21/ld/testsuite/ld-i386/compressed1.s
new file mode 100644
index 0000000..9d58d0b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/compressed1.s
@@ -0,0 +1,186 @@
+ .file "compressed1.c"
+ .section .debug_abbrev,"",@progbits
+.Ldebug_abbrev0:
+ .section .debug_info,"",@progbits
+.Ldebug_info0:
+ .section .debug_line,"",@progbits
+.Ldebug_line0:
+ .text
+.Ltext0:
+ .cfi_sections .debug_frame
+ .p2align 4,,15
+.globl foo
+ .type foo, @function
+foo:
+.LFB0:
+ .file 1 "compressed1.c"
+ .loc 1 12 0
+ .cfi_startproc
+ pushl %ebp
+ .cfi_def_cfa_offset 8
+ movl %esp, %ebp
+ .cfi_offset 5, -8
+ .cfi_def_cfa_register 5
+ subl $8, %esp
+ .loc 1 14 0
+ leave
+ .cfi_restore 5
+ .cfi_def_cfa 4, 4
+ .loc 1 13 0
+ jmp bar
+ .cfi_endproc
+.LFE0:
+ .size foo, .-foo
+.Letext0:
+ .section .debug_info
+ .long 0x5e
+ .value 0x3
+ .long .Ldebug_abbrev0
+ .byte 0x4
+ .uleb128 0x1
+ .long .LASF5
+ .byte 0x1
+ .long .LASF6
+ .long .LASF7
+ .long .Ltext0
+ .long .Letext0
+ .long .Ldebug_line0
+ .uleb128 0x2
+ .byte 0x1
+ .byte 0x6
+ .long .LASF0
+ .uleb128 0x2
+ .byte 0x2
+ .byte 0x5
+ .long .LASF1
+ .uleb128 0x3
+ .byte 0x4
+ .byte 0x5
+ .string "int"
+ .uleb128 0x2
+ .byte 0x4
+ .byte 0x5
+ .long .LASF2
+ .uleb128 0x2
+ .byte 0x1
+ .byte 0x8
+ .long .LASF3
+ .uleb128 0x2
+ .byte 0x2
+ .byte 0x7
+ .long .LASF4
+ .uleb128 0x4
+ .byte 0x1
+ .string "foo"
+ .byte 0x1
+ .byte 0xb
+ .long .LFB0
+ .long .LFE0
+ .byte 0x1
+ .byte 0x9c
+ .byte 0x0
+ .section .debug_abbrev
+ .uleb128 0x1
+ .uleb128 0x11
+ .byte 0x1
+ .uleb128 0x25
+ .uleb128 0xe
+ .uleb128 0x13
+ .uleb128 0xb
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x1b
+ .uleb128 0xe
+ .uleb128 0x11
+ .uleb128 0x1
+ .uleb128 0x12
+ .uleb128 0x1
+ .uleb128 0x10
+ .uleb128 0x6
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x2
+ .uleb128 0x24
+ .byte 0x0
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x3e
+ .uleb128 0xb
+ .uleb128 0x3
+ .uleb128 0xe
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x24
+ .byte 0x0
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x3e
+ .uleb128 0xb
+ .uleb128 0x3
+ .uleb128 0x8
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x4
+ .uleb128 0x2e
+ .byte 0x0
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x11
+ .uleb128 0x1
+ .uleb128 0x12
+ .uleb128 0x1
+ .uleb128 0x40
+ .uleb128 0xa
+ .byte 0x0
+ .byte 0x0
+ .byte 0x0
+ .section .debug_pubnames,"",@progbits
+ .long 0x16
+ .value 0x2
+ .long .Ldebug_info0
+ .long 0x62
+ .long 0x4f
+ .string "foo"
+ .long 0x0
+ .section .debug_pubtypes,"",@progbits
+ .long 0xe
+ .value 0x2
+ .long .Ldebug_info0
+ .long 0x62
+ .long 0x0
+ .section .debug_aranges,"",@progbits
+ .long 0x1c
+ .value 0x2
+ .long .Ldebug_info0
+ .byte 0x4
+ .byte 0x0
+ .value 0x0
+ .value 0x0
+ .long .Ltext0
+ .long .Letext0-.Ltext0
+ .long 0x0
+ .long 0x0
+ .section .debug_str,"MS",@progbits,1
+.LASF0:
+ .string "signed char"
+.LASF1:
+ .string "short int"
+.LASF6:
+ .string "compressed1.c"
+.LASF5:
+ .string "GNU C 4.4.4 20100630 (Red Hat 4.4.4-10)"
+.LASF7:
+ .string "."
+.LASF3:
+ .string "unsigned char"
+.LASF2:
+ .string "long int"
+.LASF4:
+ .string "short unsigned int"
diff --git a/binutils-2.21/ld/testsuite/ld-i386/discarded1.d b/binutils-2.21/ld/testsuite/ld-i386/discarded1.d
new file mode 100644
index 0000000..8106db3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/discarded1.d
@@ -0,0 +1,3 @@
+#as: --32
+#ld: -melf_i386 -T discarded1.t
+#error: .*discarded output section: `.got.plt'
diff --git a/binutils-2.21/ld/testsuite/ld-i386/discarded1.s b/binutils-2.21/ld/testsuite/ld-i386/discarded1.s
new file mode 100644
index 0000000..9b20c87
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/discarded1.s
@@ -0,0 +1,13 @@
+ .text
+.globl _start
+ .type _start, @function
+_start:
+ movl x@GOT(%ecx), %eax
+ .size _start, .-_start
+.globl x
+ .data
+ .align 4
+ .type x, @object
+ .size x, 4
+x:
+ .long 2
diff --git a/binutils-2.21/ld/testsuite/ld-i386/discarded1.t b/binutils-2.21/ld/testsuite/ld-i386/discarded1.t
new file mode 100644
index 0000000..a4d617f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/discarded1.t
@@ -0,0 +1,7 @@
+ENTRY(_start)
+SECTIONS
+{
+ .text : {*(.text)}
+ .data : {*(.data)}
+ /DISCARD/ : {*(*)}
+}
diff --git a/binutils-2.21/ld/testsuite/ld-i386/emit-relocs.d b/binutils-2.21/ld/testsuite/ld-i386/emit-relocs.d
new file mode 100644
index 0000000..0c16b94
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/emit-relocs.d
@@ -0,0 +1,8 @@
+
+Relocation section '\.rel\.plt' at offset .* contains 1 entries:
+ Offset Info Type Sym\.Value Sym\. Name
+.* .*07 R_386_JUMP_SLOT 00000000 foo
+
+Relocation section '\.rel\.text' at offset .* contains 1 entries:
+ Offset Info Type Sym\.Value Sym\. Name
+.* .*04 R_386_PLT32 00000000 foo
diff --git a/binutils-2.21/ld/testsuite/ld-i386/emit-relocs.s b/binutils-2.21/ld/testsuite/ld-i386/emit-relocs.s
new file mode 100644
index 0000000..e609a2e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/emit-relocs.s
@@ -0,0 +1 @@
+ call foo@plt
diff --git a/binutils-2.21/ld/testsuite/ld-i386/hidden1.d b/binutils-2.21/ld/testsuite/ld-i386/hidden1.d
new file mode 100644
index 0000000..5ace20d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/hidden1.d
@@ -0,0 +1,3 @@
+#as: --32
+#ld: -shared -melf_i386
+#error: .*relocation R_386_GOTOFF against undefined hidden symbol `foo' can not be used when making a shared object
diff --git a/binutils-2.21/ld/testsuite/ld-i386/hidden1.s b/binutils-2.21/ld/testsuite/ld-i386/hidden1.s
new file mode 100644
index 0000000..2c1ce93
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/hidden1.s
@@ -0,0 +1,9 @@
+ .text
+.globl bar
+ .type bar, @function
+bar:
+ leal foo@GOTOFF(%ecx), %eax
+ ret
+ .size bar, .-bar
+ .weak foo
+ .hidden foo
diff --git a/binutils-2.21/ld/testsuite/ld-i386/hidden2.d b/binutils-2.21/ld/testsuite/ld-i386/hidden2.d
new file mode 100644
index 0000000..0d800ce
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/hidden2.d
@@ -0,0 +1,13 @@
+#as: --32
+#ld: -shared -melf_i386
+#objdump: -drw
+
+.*: +file format .*
+
+
+Disassembly of section .text:
+
+[a-f0-9]+ <bar>:
+[ ]*[a-f0-9]+: e8 cf fe ff ff call 0 .*
+[ ]*[a-f0-9]+: c3 ret
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-i386/hidden2.s b/binutils-2.21/ld/testsuite/ld-i386/hidden2.s
new file mode 100644
index 0000000..03e2ce7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/hidden2.s
@@ -0,0 +1,9 @@
+ .text
+.globl bar
+ .type bar, @function
+bar:
+ call foo
+ ret
+ .size bar, .-bar
+ .weak foo
+ .hidden foo
diff --git a/binutils-2.21/ld/testsuite/ld-i386/hidden3.d b/binutils-2.21/ld/testsuite/ld-i386/hidden3.d
new file mode 100644
index 0000000..5ace20d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/hidden3.d
@@ -0,0 +1,3 @@
+#as: --32
+#ld: -shared -melf_i386
+#error: .*relocation R_386_GOTOFF against undefined hidden symbol `foo' can not be used when making a shared object
diff --git a/binutils-2.21/ld/testsuite/ld-i386/hidden3.s b/binutils-2.21/ld/testsuite/ld-i386/hidden3.s
new file mode 100644
index 0000000..221b159
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/hidden3.s
@@ -0,0 +1,8 @@
+ .text
+.globl bar
+ .type bar, @function
+bar:
+ leal foo@GOTOFF(%ecx), %eax
+ ret
+ .size bar, .-bar
+ .hidden foo
diff --git a/binutils-2.21/ld/testsuite/ld-i386/i386.exp b/binutils-2.21/ld/testsuite/ld-i386/i386.exp
new file mode 100644
index 0000000..6777c5f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/i386.exp
@@ -0,0 +1,201 @@
+# Expect script for ld-i386 tests
+# Copyright (C) 2002, 2005, 2006, 2007, 2008, 2009
+# Free Software Foundation
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# Test i386 linking; all types of relocs. This tests the assembler and
+# tools like objdump as well as the linker.
+
+if {[istarget "i?86-*-vxworks"]} {
+ set i386tests {
+ {"VxWorks shared library test 1" "-shared -Tvxworks1.ld"
+ "" {vxworks1-lib.s}
+ {{readelf --relocs vxworks1-lib.rd} {objdump -dr vxworks1-lib.dd}
+ {readelf --symbols vxworks1-lib.nd} {readelf -d vxworks1-lib.td}}
+ "libvxworks1.so"}
+ {"VxWorks executable test 1 (dynamic)" \
+ "tmpdir/libvxworks1.so -Tvxworks1.ld -q --force-dynamic"
+ "" {vxworks1.s}
+ {{readelf --relocs vxworks1.rd} {objdump -dr vxworks1.dd}}
+ "vxworks1"}
+ {"VxWorks executable test 2 (dynamic)" \
+ "-Tvxworks1.ld -q --force-dynamic"
+ "" {vxworks2.s}
+ {{readelf --segments vxworks2.sd}}
+ "vxworks2"}
+ {"VxWorks executable test 2 (static)"
+ "-Tvxworks1.ld"
+ "" {vxworks2.s}
+ {{readelf --segments vxworks2-static.sd}}
+ "vxworks2"}
+ }
+ run_ld_link_tests $i386tests
+ run_dump_test "vxworks1-static"
+}
+
+if [istarget "*-*-go32*"] {
+ run_ld_link_tests {{"go32 stub" "" "" {zero.s} {} "go32stub"}}
+
+ set src "tmpdir/go32stub"
+ set dest "tmpdir/go32stub-copy"
+
+ set test "go32 stub patch the source"
+ set fi [open $src r+]
+ fconfigure $fi -translation binary
+ if {[read $fi 2] != "MZ"} {
+ fail $test
+ } else {
+ pass $test
+ seek $fi 0x40
+ puts -nonewline $fi "objcopy-test-go32stub"
+ }
+ close $fi
+
+ set test "go32 stub objcopy"
+ set status [remote_exec build $OBJCOPY "$OBJCOPYFLAGS $src $dest"]
+ set exec_output [lindex $status 1]
+ set exec_output [prune_warnings $exec_output]
+ if [string match "" $exec_output] then {
+ pass $test
+ } else {
+ send_log "$exec_output\n"
+ verbose "$exec_output" 1
+ fail $test
+ }
+
+ # cmp would compare the whole files and some data after the initial exe
+ # stub could differ.
+ set test "go32 stub comparison after objcopy"
+ set fi [open $src]
+ fconfigure $fi -translation binary
+ set src_stub [read $fi 2048]
+ close $fi
+ set fi [open $dest]
+ fconfigure $fi -translation binary
+ set dest_stub [read $fi 2048]
+ close $fi
+ if {$src_stub == $dest_stub} {
+ pass $test
+ } else {
+ fail $test
+ }
+}
+
+if { !([istarget "i?86-*-elf*"]
+ || ([istarget "i?86-*-linux*"]
+ && ![istarget "*-*-*aout*"]
+ && ![istarget "*-*-*oldld*"])
+ || [istarget "x86_64-*-linux*"]
+ || [istarget "amd64-*-linux*"]) } {
+ return
+}
+
+# List contains test-items with 3 items followed by 2 lists:
+# 0:name 1:ld options 2:assembler options
+# 3:filenames of assembler files 4: action and options. 5: name of output file
+
+# Actions:
+# objdump: Apply objdump options on result. Compare with regex (last arg).
+# nm: Apply nm options on result. Compare with regex (last arg).
+# readelf: Apply readelf options on result. Compare with regex (last arg).
+
+set i386tests {
+ {"TLS -fpic -shared transitions" "-shared -melf_i386"
+ "--32" {tlspic1.s tlspic2.s}
+ {{readelf -Ssrl tlspic.rd} {objdump -drj.text tlspic.dd}
+ {objdump -sj.got tlspic.sd} {objdump -sj.tdata tlspic.td}}
+ "libtlspic.so"}
+ {"TLS descriptor -fpic -shared transitions" "-shared -melf_i386"
+ "--32" {tlsdesc.s tlspic2.s}
+ {{readelf -Ssrl tlsdesc.rd} {objdump -drj.text tlsdesc.dd}
+ {objdump "-s -j.got -j.got.plt" tlsdesc.sd} {objdump -sj.tdata tlsdesc.td}}
+ "libtlsdesc.so"}
+ {"Helper shared library" "-shared -melf_i386"
+ "--32" {tlslib.s} {} "libtlslib.so"}
+ {"TLS -fpic and -fno-pic exec transitions"
+ "-melf_i386 tmpdir/libtlslib.so" "--32" {tlsbinpic.s tlsbin.s}
+ {{readelf -Ssrl tlsbin.rd} {objdump -drj.text tlsbin.dd}
+ {objdump -sj.got tlsbin.sd} {objdump -sj.tdata tlsbin.td}}
+ "tlsbin"}
+ {"TLS descriptor -fpic and -fno-pic exec transitions"
+ "-melf_i386 tmpdir/libtlslib.so" "--32" {tlsbindesc.s tlsbin.s}
+ {{readelf -Ssrl tlsbindesc.rd} {objdump -drj.text tlsbindesc.dd}
+ {objdump -sj.got tlsbindesc.sd} {objdump -sj.tdata tlsbindesc.td}}
+ "tlsbindesc"}
+ {"TLS -fno-pic -shared" "-shared -melf_i386"
+ "--32" {tlsnopic1.s tlsnopic2.s}
+ {{readelf -Ssrl tlsnopic.rd} {objdump -drj.text tlsnopic.dd}
+ {objdump -sj.got tlsnopic.sd}} "libtlsnopic.so"}
+ {"TLS with global dynamic and descriptors"
+ "-shared -melf_i386" "--32" {tlsgdesc.s}
+ {{readelf -Ssrl tlsgdesc.rd} {objdump -drj.text tlsgdesc.dd}}
+ "libtlsgdesc.so"}
+ {"TLS in debug sections" "-melf_i386"
+ "--32" {tlsg.s}
+ {{objdump -sj.debug_foobar tlsg.sd}} "tlsg"}
+ {"TLS @indntpoff with %eax" "-melf_i386" "--32" {tlsindntpoff.s}
+ {{objdump -drj.text tlsindntpoff.dd}} "tlsindntpoff"}
+ {"Reloc section order" "-shared -melf_i386 -z nocombreloc" "--32"
+ {reloc.s} {{objdump -hw reloc.d}} "reloc.so"}
+ {"Basic --emit-relocs support" "-shared -melf_i386 --emit-relocs" "--32"
+ {emit-relocs.s} {{readelf --relocs emit-relocs.d}} "emit-relocs.so"}
+ {"-z combreloc relocation sections" "-shared -melf_i386 -z combreloc"
+ "--32" {combreloc.s} {{readelf -r combreloc.d}} "combreloc.so"}
+ {"TLS GD->LE transition" "-melf_i386"
+ "--32" {tlsgd1.s}
+ {{objdump -dwr tlsgd1.dd}} "tlsgd1"}
+ {"TLS LD->LE transition" "-melf_i386"
+ "--32" {tlsld1.s}
+ {{objdump -dwr tlsld1.dd}} "tlsld1"}
+ {"TLS IE->LE transition" "-melf_i386"
+ "--32" {tlsie1.s}
+ {{objdump -dwr tlsie1.dd}} "tlsie1"}
+}
+
+run_ld_link_tests $i386tests
+
+run_dump_test "abs"
+run_dump_test "pcrel8"
+run_dump_test "pcrel16"
+run_dump_test "pcrel16abs"
+run_dump_test "alloc"
+run_dump_test "warn1"
+run_dump_test "tlsgd2"
+run_dump_test "tlsie2"
+run_dump_test "tlsie3"
+run_dump_test "tlsie4"
+run_dump_test "tlsie5"
+run_dump_test "hidden1"
+run_dump_test "hidden2"
+run_dump_test "hidden3"
+run_dump_test "protected1"
+run_dump_test "protected2"
+run_dump_test "protected3"
+run_dump_test "tlspie1"
+run_dump_test "nogot1"
+run_dump_test "nogot2"
+run_dump_test "discarded1"
+
+if { !([istarget "i?86-*-linux*"]
+ || [istarget "x86_64-*-linux*"]) } {
+ return
+}
+
+run_dump_test "compressed1"
diff --git a/binutils-2.21/ld/testsuite/ld-i386/nogot1.d b/binutils-2.21/ld/testsuite/ld-i386/nogot1.d
new file mode 100644
index 0000000..a6c8832
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/nogot1.d
@@ -0,0 +1,8 @@
+#ld: --shared -melf_i386
+#readelf: -S --wide
+#as: --32
+
+#...
+[ ]*\[.*\][ ]+\.dynamic[ ]+DYNAMIC.*
+[ ]*\[.*\][ ]+.*STRTAB.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-i386/nogot1.s b/binutils-2.21/ld/testsuite/ld-i386/nogot1.s
new file mode 100644
index 0000000..016e172
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/nogot1.s
@@ -0,0 +1,10 @@
+ .type bar, @function
+bar:
+ ret
+ .size bar, .-bar
+.globl foo
+ .type foo, @function
+foo:
+ leal bar, %eax
+ ret
+ .size foo, .-foo
diff --git a/binutils-2.21/ld/testsuite/ld-i386/nogot2.d b/binutils-2.21/ld/testsuite/ld-i386/nogot2.d
new file mode 100644
index 0000000..a7bb788
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/nogot2.d
@@ -0,0 +1,7 @@
+#ld: -pie -melf_i386
+#readelf: -S --wide
+#as: --32
+
+#...
+[ ]*\[.*\][ ]+.*\.got\.plt.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-i386/nogot2.s b/binutils-2.21/ld/testsuite/ld-i386/nogot2.s
new file mode 100644
index 0000000..e7212cb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/nogot2.s
@@ -0,0 +1,4 @@
+ .text
+ .globl _start
+_start:
+ movl _GLOBAL_OFFSET_TABLE_, %ecx
diff --git a/binutils-2.21/ld/testsuite/ld-i386/pcrel16.d b/binutils-2.21/ld/testsuite/ld-i386/pcrel16.d
new file mode 100644
index 0000000..3d45afe
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/pcrel16.d
@@ -0,0 +1,15 @@
+#name: PCREL16 overflow
+#as: --32
+#ld: -melf_i386 -Ttext 0x0
+#objdump: -drj.text -m i8086
+
+.*: +file format elf32-i386
+
+Disassembly of section .text:
+
+0+ <_start>:
+ ...
+ 420: cd 42[ ]+int \$0x42
+ 422: ca 02 00[ ]+lret \$0x2
+ ...
+ f065: e9 b8 13[ ]+jmp 420 <_start\+0x420>
diff --git a/binutils-2.21/ld/testsuite/ld-i386/pcrel16.s b/binutils-2.21/ld/testsuite/ld-i386/pcrel16.s
new file mode 100644
index 0000000..d68a6c6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/pcrel16.s
@@ -0,0 +1,9 @@
+ .code16
+ .text
+ .globl _start
+_start:
+ .org 0x420
+ int $0x42
+ lret $2
+ .org 0xf065
+ jmp _start+((0x42) << 4)
diff --git a/binutils-2.21/ld/testsuite/ld-i386/pcrel16abs.d b/binutils-2.21/ld/testsuite/ld-i386/pcrel16abs.d
new file mode 100644
index 0000000..f4bfca5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/pcrel16abs.d
@@ -0,0 +1,12 @@
+#name: PCREL16 absolute reloc
+#as: --32
+#ld: -melf_i386 -Ttext 0xfffffff0
+#objdump: -drj.text -m i8086
+
+.*: +file format elf32-i386
+
+Disassembly of section .text:
+
+f+0 <_start>:
+f+0: e9 0d e0[ ]+jmp[ ]+ffffe000 <SEGMENT_SIZE\+0xfffee000>
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-i386/pcrel16abs.s b/binutils-2.21/ld/testsuite/ld-i386/pcrel16abs.s
new file mode 100644
index 0000000..4bf68a7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/pcrel16abs.s
@@ -0,0 +1,6 @@
+SEGMENT_SIZE = 0x10000
+RVECTOR = 0x00010
+.code16
+ .globl _start
+_start:
+ jmp SEGMENT_SIZE-(0x1f00 +0xf0 +RVECTOR)
diff --git a/binutils-2.21/ld/testsuite/ld-i386/pcrel8.d b/binutils-2.21/ld/testsuite/ld-i386/pcrel8.d
new file mode 100644
index 0000000..208c64e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/pcrel8.d
@@ -0,0 +1,4 @@
+#name: PCREL8 overflow
+#as: --32
+#ld: -melf_i386
+#error: .*relocation truncated to fit: R_386_PC8 .*
diff --git a/binutils-2.21/ld/testsuite/ld-i386/pcrel8.s b/binutils-2.21/ld/testsuite/ld-i386/pcrel8.s
new file mode 100644
index 0000000..e624aaf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/pcrel8.s
@@ -0,0 +1,11 @@
+ .text
+ .code16
+ .global _start, fwd
+_start:
+ jcxz fwd
+ .rept 10
+ testl $0x12345678, %ss:0x76543210(,%eax,4)
+ .endr
+fwd:
+ leave
+ ret
diff --git a/binutils-2.21/ld/testsuite/ld-i386/protected1.d b/binutils-2.21/ld/testsuite/ld-i386/protected1.d
new file mode 100644
index 0000000..a3cb5ce
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/protected1.d
@@ -0,0 +1,3 @@
+#as: --32
+#ld: -shared -melf_i386
+#error: .*relocation R_386_GOTOFF against protected function `foo' can not be used when making a shared object
diff --git a/binutils-2.21/ld/testsuite/ld-i386/protected1.s b/binutils-2.21/ld/testsuite/ld-i386/protected1.s
new file mode 100644
index 0000000..2edaeb2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/protected1.s
@@ -0,0 +1,13 @@
+ .text
+.globl foo
+ .protected foo
+ .type foo, @function
+foo:
+ ret
+ .size foo, .-foo
+.globl bar
+ .type bar, @function
+bar:
+ leal foo@GOTOFF(%ecx), %eax
+ ret
+ .size bar, .-bar
diff --git a/binutils-2.21/ld/testsuite/ld-i386/protected2.d b/binutils-2.21/ld/testsuite/ld-i386/protected2.d
new file mode 100644
index 0000000..ba53e59
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/protected2.d
@@ -0,0 +1,16 @@
+#as: --32
+#ld: -shared -melf_i386
+#objdump: -drw
+
+.*: +file format .*
+
+
+Disassembly of section .text:
+
+0+[a-f0-9]+ <foo>:
+[ ]*[a-f0-9]+: c3 ret
+
+0+[a-f0-9]+ <bar>:
+[ ]*[a-f0-9]+: e8 fa ff ff ff call [a-f0-9]+ <foo>
+[ ]*[a-f0-9]+: c3 ret
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-i386/protected2.s b/binutils-2.21/ld/testsuite/ld-i386/protected2.s
new file mode 100644
index 0000000..61e5aec
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/protected2.s
@@ -0,0 +1,13 @@
+ .text
+.globl foo
+ .protected foo
+ .type foo, @function
+foo:
+ ret
+ .size foo, .-foo
+.globl bar
+ .type bar, @function
+bar:
+ call foo
+ ret
+ .size bar, .-bar
diff --git a/binutils-2.21/ld/testsuite/ld-i386/protected3.d b/binutils-2.21/ld/testsuite/ld-i386/protected3.d
new file mode 100644
index 0000000..aafa2d8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/protected3.d
@@ -0,0 +1,13 @@
+#as: --32
+#ld: -shared -melf_i386
+#objdump: -drw
+
+.*: +file format .*
+
+
+Disassembly of section .text:
+
+0+[a-f0-9]+ <bar>:
+[ ]*[a-f0-9]+: 8b 81 [a-f0-9][a-f0-9] [a-f0-9][a-f0-9] 00 00 mov 0x[a-f0-9]+\(%ecx\),%eax
+[ ]*[a-f0-9]+: c3 ret
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-i386/protected3.s b/binutils-2.21/ld/testsuite/ld-i386/protected3.s
new file mode 100644
index 0000000..7a605a2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/protected3.s
@@ -0,0 +1,15 @@
+ .protected foo
+.globl foo
+ .data
+ .align 4
+ .type foo, @object
+ .size foo, 4
+foo:
+ .long 1
+ .text
+.globl bar
+ .type bar, @function
+bar:
+ movl foo@GOTOFF(%ecx), %eax
+ ret
+ .size bar, .-bar
diff --git a/binutils-2.21/ld/testsuite/ld-i386/reloc.d b/binutils-2.21/ld/testsuite/ld-i386/reloc.d
new file mode 100644
index 0000000..e559e53
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/reloc.d
@@ -0,0 +1,17 @@
+# Test that orphan reloc sections are placed before .rel.plt even when
+# .rel.plt is the only reloc section.
+#source: reloc.s
+#as: --32
+#ld: -shared -melf_i386 -z nocombreloc
+#objdump: -hw
+
+.*: +file format elf32-i386
+#...
+.*\.relplatypus.*
+#...
+.*\.rel\.plt.*
+# x86 ld doesn't output non-alloc reloc sections to shared libs, so disable
+# the following two lines for the time being.
+# #...
+# .*\.relechidna.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-i386/reloc.s b/binutils-2.21/ld/testsuite/ld-i386/reloc.s
new file mode 100644
index 0000000..0e3ff1d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/reloc.s
@@ -0,0 +1,8 @@
+ .section echidna
+ .long .text
+
+ .section platypus,"ax"
+ .long .text
+
+ .text
+ jmp _start@plt
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsbin.dd b/binutils-2.21/ld/testsuite/ld-i386/tlsbin.dd
new file mode 100644
index 0000000..9cf14a5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsbin.dd
@@ -0,0 +1,464 @@
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as: --32
+#ld: -melf_i386 tmpdir/libtlslib.so
+#objdump: -drj.text
+#target: i?86-*-*
+
+# PT_TLS layout is:
+# Offset from Offset from Name
+# TCB base TCB end
+# 0x00 -0xa0 sg1..sg8
+# 0x20 -0x80 sl1..sl8
+# 0x40 -0x60 sh1..sh8
+# 0x60 -0x40 bg1..bg8
+# 0x80 -0x20 bl1..bl8
+
+.*: +file format elf32-i386
+
+Disassembly of section .text:
+
+0+8049000 <fn2>:
+ 8049000: 55[ ]+push %ebp
+ 8049001: 89 e5[ ]+mov %esp,%ebp
+ 8049003: 53[ ]+push %ebx
+ 8049004: 50[ ]+push %eax
+ 8049005: e8 00 00 00 00[ ]+call 804900a <fn2\+0xa>
+ 804900a: 5b[ ]+pop %ebx
+ 804900b: 81 c3 1a 11 00 00[ ]+add \$0x111a,%ebx
+ 8049011: 90[ ]+nop *
+ 8049012: 90[ ]+nop *
+ 8049013: 90[ ]+nop *
+ 8049014: 90[ ]+nop *
+# GD -> IE because variable is not defined in executable
+ 8049015: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 804901b: 2b 83 f8 ff ff ff[ ]+sub -0x8\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sG1
+ 8049021: 90[ ]+nop *
+ 8049022: 90[ ]+nop *
+ 8049023: 90[ ]+nop *
+ 8049024: 90[ ]+nop *
+# GD -> IE because variable is not defined in executable where
+# the variable is referenced through @gottpoff too
+ 8049025: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 804902b: 2b 83 e8 ff ff ff[ ]+sub -0x18\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sG2
+ 8049031: 90[ ]+nop *
+ 8049032: 90[ ]+nop *
+ 8049033: 90[ ]+nop *
+ 8049034: 90[ ]+nop *
+# GD -> IE because variable is not defined in executable where
+# the variable is referenced through @gotntpoff too
+ 8049035: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 804903b: 03 83 dc ff ff ff[ ]+add -0x24\(%ebx\),%eax
+# ->R_386_TLS_TPOFF sG3
+ 8049041: 90[ ]+nop *
+ 8049042: 90[ ]+nop *
+ 8049043: 90[ ]+nop *
+ 8049044: 90[ ]+nop *
+# GD -> IE because variable is not defined in executable where
+# the variable is referenced through @gottpoff and @gotntpoff too
+ 8049045: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 804904b: 2b 83 ec ff ff ff[ ]+sub -0x14\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sG4
+ 8049051: 90[ ]+nop *
+ 8049052: 90[ ]+nop *
+ 8049053: 90[ ]+nop *
+ 8049054: 90[ ]+nop *
+# GD -> LE with global variable defined in executable
+ 8049055: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 804905b: 81 e8 00 10 00 00[ ]+sub \$0x1000,%eax
+# sg1
+ 8049061: 90[ ]+nop *
+ 8049062: 90[ ]+nop *
+ 8049063: 90[ ]+nop *
+ 8049064: 90[ ]+nop *
+# GD -> LE with local variable defined in executable
+ 8049065: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 804906b: 81 e8 e0 0f 00 00[ ]+sub \$0xfe0,%eax
+# sl1
+ 8049071: 90[ ]+nop *
+ 8049072: 90[ ]+nop *
+ 8049073: 90[ ]+nop *
+ 8049074: 90[ ]+nop *
+# GD -> LE with hidden variable defined in executable
+ 8049075: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 804907b: 81 e8 c0 0f 00 00[ ]+sub \$0xfc0,%eax
+# sh1
+ 8049081: 90[ ]+nop *
+ 8049082: 90[ ]+nop *
+ 8049083: 90[ ]+nop *
+ 8049084: 90[ ]+nop *
+# LD -> LE
+ 8049085: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 804908b: 90[ ]+nop *
+ 804908c: 8d 74 26 00[ ]+lea 0x0\(%esi,%eiz,1\),%esi
+ 8049090: 90[ ]+nop *
+ 8049091: 90[ ]+nop *
+ 8049092: 8d 90 20 f0 ff ff[ ]+lea -0xfe0\(%eax\),%edx
+# sl1
+ 8049098: 90[ ]+nop *
+ 8049099: 90[ ]+nop *
+ 804909a: 8d 88 24 f0 ff ff[ ]+lea -0xfdc\(%eax\),%ecx
+# sl2
+ 80490a0: 90[ ]+nop *
+ 80490a1: 90[ ]+nop *
+ 80490a2: 90[ ]+nop *
+ 80490a3: 90[ ]+nop *
+# LD -> LE against hidden variables
+ 80490a4: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 80490aa: 90[ ]+nop *
+ 80490ab: 8d 74 26 00[ ]+lea 0x0\(%esi,%eiz,1\),%esi
+ 80490af: 90[ ]+nop *
+ 80490b0: 90[ ]+nop *
+ 80490b1: 8d 90 40 f0 ff ff[ ]+lea -0xfc0\(%eax\),%edx
+# sh1
+ 80490b7: 90[ ]+nop *
+ 80490b8: 90[ ]+nop *
+ 80490b9: 8d 88 44 f0 ff ff[ ]+lea -0xfbc\(%eax\),%ecx
+# sh2
+ 80490bf: 90[ ]+nop *
+ 80490c0: 90[ ]+nop *
+ 80490c1: 90[ ]+nop *
+ 80490c2: 90[ ]+nop *
+# @gottpoff IE against global var
+ 80490c3: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ 80490ca: 90[ ]+nop *
+ 80490cb: 90[ ]+nop *
+ 80490cc: 2b 8b e8 ff ff ff[ ]+sub -0x18\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF32 sG2
+ 80490d2: 90[ ]+nop *
+ 80490d3: 90[ ]+nop *
+ 80490d4: 90[ ]+nop *
+ 80490d5: 90[ ]+nop *
+# @gottpoff IE against global var
+ 80490d6: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 80490dc: 90[ ]+nop *
+ 80490dd: 90[ ]+nop *
+ 80490de: 2b 83 ec ff ff ff[ ]+sub -0x14\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sG4
+ 80490e4: 90[ ]+nop *
+ 80490e5: 90[ ]+nop *
+ 80490e6: 90[ ]+nop *
+ 80490e7: 90[ ]+nop *
+# @gotntpoff IE against global var
+ 80490e8: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ 80490ef: 90[ ]+nop *
+ 80490f0: 90[ ]+nop *
+ 80490f1: 03 8b dc ff ff ff[ ]+add -0x24\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF sG3
+ 80490f7: 90[ ]+nop *
+ 80490f8: 90[ ]+nop *
+ 80490f9: 90[ ]+nop *
+ 80490fa: 90[ ]+nop *
+# @gotntpoff IE against global var
+ 80490fb: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 8049101: 90[ ]+nop *
+ 8049102: 90[ ]+nop *
+ 8049103: 03 83 f0 ff ff ff[ ]+add -0x10\(%ebx\),%eax
+# ->R_386_TLS_TPOFF sG4
+ 8049109: 90[ ]+nop *
+ 804910a: 90[ ]+nop *
+ 804910b: 90[ ]+nop *
+ 804910c: 90[ ]+nop *
+# @gottpoff IE -> LE against global var defined in exec
+ 804910d: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ 8049114: 90[ ]+nop *
+ 8049115: 90[ ]+nop *
+ 8049116: 81 e9 00 10 00 00[ ]+sub \$0x1000,%ecx
+# sg1
+ 804911c: 90[ ]+nop *
+ 804911d: 90[ ]+nop *
+ 804911e: 90[ ]+nop *
+ 804911f: 90[ ]+nop *
+# @gotntpoff IE -> LE against local var
+ 8049120: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ 8049127: 90[ ]+nop *
+ 8049128: 90[ ]+nop *
+ 8049129: 81 c0 20 f0 ff ff[ ]+add \$0xfffff020,%eax
+# sl1
+ 804912f: 90[ ]+nop *
+ 8049130: 90[ ]+nop *
+ 8049131: 90[ ]+nop *
+ 8049132: 90[ ]+nop *
+# @gottpoff IE -> LE against hidden var
+ 8049133: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ 804913a: 90[ ]+nop *
+ 804913b: 90[ ]+nop *
+ 804913c: 81 e9 c0 0f 00 00[ ]+sub \$0xfc0,%ecx
+# sh1
+ 8049142: 90[ ]+nop *
+ 8049143: 90[ ]+nop *
+ 8049144: 90[ ]+nop *
+ 8049145: 90[ ]+nop *
+# Direct access through %gs
+# @gotntpoff IE against global var
+ 8049146: 8b 8b e0 ff ff ff[ ]+mov -0x20\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF sG5
+ 804914c: 90[ ]+nop *
+ 804914d: 90[ ]+nop *
+ 804914e: 65 8b 11[ ]+mov %gs:\(%ecx\),%edx
+ 8049151: 90[ ]+nop *
+ 8049152: 90[ ]+nop *
+ 8049153: 90[ ]+nop *
+ 8049154: 90[ ]+nop *
+# @gotntpoff IE->LE against local var
+ 8049155: c7 c0 30 f0 ff ff[ ]+mov \$0xfffff030,%eax
+# sl5
+ 804915b: 90[ ]+nop *
+ 804915c: 90[ ]+nop *
+ 804915d: 65 8b 10[ ]+mov %gs:\(%eax\),%edx
+ 8049160: 90[ ]+nop *
+ 8049161: 90[ ]+nop *
+ 8049162: 90[ ]+nop *
+ 8049163: 90[ ]+nop *
+# @gotntpoff IE->LE against hidden var
+ 8049164: c7 c2 50 f0 ff ff[ ]+mov \$0xfffff050,%edx
+# sh5
+ 804916a: 90[ ]+nop *
+ 804916b: 90[ ]+nop *
+ 804916c: 65 8b 12[ ]+mov %gs:\(%edx\),%edx
+ 804916f: 90[ ]+nop *
+ 8049170: 90[ ]+nop *
+ 8049171: 90[ ]+nop *
+ 8049172: 90[ ]+nop *
+# GD -> IE because variable is not defined in executable
+ 8049173: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 8049179: 2b 83 f8 ff ff ff[ ]+sub -0x8\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sG1
+ 804917f: 90[ ]+nop *
+ 8049180: 90[ ]+nop *
+ 8049181: 90[ ]+nop *
+ 8049182: 90[ ]+nop *
+ 8049183: 8b 5d fc[ ]+mov -0x4\(%ebp\),%ebx
+ 8049186: c9[ ]+leave *
+ 8049187: c3[ ]+ret *
+
+0+8049188 <_start>:
+ 8049188: 55[ ]+push %ebp
+ 8049189: 89 e5[ ]+mov %esp,%ebp
+ 804918b: e8 00 00 00 00[ ]+call 8049190 <_start\+0x8>
+ 8049190: 59[ ]+pop %ecx
+ 8049191: 81 c1 94 0f 00 00[ ]+add \$0xf94,%ecx
+ 8049197: 90[ ]+nop *
+ 8049198: 90[ ]+nop *
+ 8049199: 90[ ]+nop *
+ 804919a: 90[ ]+nop *
+# @gottpoff IE against global var
+ 804919b: 65 8b 15 00 00 00 00[ ]+mov %gs:0x0,%edx
+ 80491a2: 90[ ]+nop *
+ 80491a3: 90[ ]+nop *
+ 80491a4: 2b 91 f4 ff ff ff[ ]+sub -0xc\(%ecx\),%edx
+# ->R_386_TLS_TPOFF32 sG6
+ 80491aa: 90[ ]+nop *
+ 80491ab: 90[ ]+nop *
+ 80491ac: 90[ ]+nop *
+ 80491ad: 90[ ]+nop *
+# @indntpoff IE against global var
+ 80491ae: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 80491b4: 90[ ]+nop *
+ 80491b5: 90[ ]+nop *
+ 80491b6: 03 05 08 a1 04 08[ ]+add 0x804a108,%eax
+# ->R_386_TLS_TPOFF sG7
+ 80491bc: 90[ ]+nop *
+ 80491bd: 90[ ]+nop *
+ 80491be: 90[ ]+nop *
+ 80491bf: 90[ ]+nop *
+# @indntpoff direct %gs access IE against global var
+ 80491c0: 8b 15 20 a1 04 08[ ]+mov 0x804a120,%edx
+# ->R_386_TLS_TPOFF sG8
+ 80491c6: 90[ ]+nop *
+ 80491c7: 90[ ]+nop *
+ 80491c8: 65 8b 02[ ]+mov %gs:\(%edx\),%eax
+ 80491cb: 90[ ]+nop *
+ 80491cc: 90[ ]+nop *
+ 80491cd: 90[ ]+nop *
+ 80491ce: 90[ ]+nop *
+# @gottpoff IE -> LE against global var defined in exec
+ 80491cf: 65 8b 15 00 00 00 00[ ]+mov %gs:0x0,%edx
+ 80491d6: 90[ ]+nop *
+ 80491d7: 90[ ]+nop *
+ 80491d8: 81 ea 8c 0f 00 00[ ]+sub \$0xf8c,%edx
+# bg6
+ 80491de: 90[ ]+nop *
+ 80491df: 90[ ]+nop *
+ 80491e0: 90[ ]+nop *
+ 80491e1: 90[ ]+nop *
+# @indntpoff IE -> LE against global var defined in exec
+ 80491e2: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 80491e8: 90[ ]+nop *
+ 80491e9: 90[ ]+nop *
+ 80491ea: 81 c0 78 f0 ff ff[ ]+add \$0xfffff078,%eax
+# bg7
+ 80491f0: 90[ ]+nop *
+ 80491f1: 90[ ]+nop *
+ 80491f2: 90[ ]+nop *
+ 80491f3: 90[ ]+nop *
+# @indntpoff direct %gs access IE -> LE against global var defined
+# in exec
+ 80491f4: c7 c2 7c f0 ff ff[ ]+mov \$0xfffff07c,%edx
+# bg8
+ 80491fa: 90[ ]+nop *
+ 80491fb: 90[ ]+nop *
+ 80491fc: 65 8b 02[ ]+mov %gs:\(%edx\),%eax
+ 80491ff: 90[ ]+nop *
+ 8049200: 90[ ]+nop *
+ 8049201: 90[ ]+nop *
+ 8049202: 90[ ]+nop *
+# @gottpoff IE -> LE against local var
+ 8049203: 65 8b 15 00 00 00 00[ ]+mov %gs:0x0,%edx
+ 804920a: 90[ ]+nop *
+ 804920b: 90[ ]+nop *
+ 804920c: 81 ea 6c 0f 00 00[ ]+sub \$0xf6c,%edx
+# bl6
+ 8049212: 90[ ]+nop *
+ 8049213: 90[ ]+nop *
+ 8049214: 90[ ]+nop *
+ 8049215: 90[ ]+nop *
+# @indntpoff IE -> LE against local var
+ 8049216: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 804921c: 90[ ]+nop *
+ 804921d: 90[ ]+nop *
+ 804921e: 81 c0 98 f0 ff ff[ ]+add \$0xfffff098,%eax
+# bl7
+ 8049224: 90[ ]+nop *
+ 8049225: 90[ ]+nop *
+ 8049226: 90[ ]+nop *
+ 8049227: 90[ ]+nop *
+# @indntpoff direct %gs access IE -> LE against local var
+ 8049228: c7 c2 9c f0 ff ff[ ]+mov \$0xfffff09c,%edx
+# bl8
+ 804922e: 90[ ]+nop *
+ 804922f: 90[ ]+nop *
+ 8049230: 65 8b 02[ ]+mov %gs:\(%edx\),%eax
+ 8049233: 90[ ]+nop *
+ 8049234: 90[ ]+nop *
+ 8049235: 90[ ]+nop *
+ 8049236: 90[ ]+nop *
+# @gottpoff IE -> LE against hidden but not local var
+ 8049237: 65 8b 15 00 00 00 00[ ]+mov %gs:0x0,%edx
+ 804923e: 90[ ]+nop *
+ 804923f: 90[ ]+nop *
+ 8049240: 81 ea ac 0f 00 00[ ]+sub \$0xfac,%edx
+# sh6
+ 8049246: 90[ ]+nop *
+ 8049247: 90[ ]+nop *
+ 8049248: 90[ ]+nop *
+ 8049249: 90[ ]+nop *
+# @indntpoff IE -> LE against hidden but not local var
+ 804924a: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 8049250: 90[ ]+nop *
+ 8049251: 90[ ]+nop *
+ 8049252: 81 c0 58 f0 ff ff[ ]+add \$0xfffff058,%eax
+# sh7
+ 8049258: 90[ ]+nop *
+ 8049259: 90[ ]+nop *
+ 804925a: 90[ ]+nop *
+ 804925b: 90[ ]+nop *
+# @indntpoff direct %gs access IE -> LE against hidden but not
+# local var
+ 804925c: c7 c2 5c f0 ff ff[ ]+mov \$0xfffff05c,%edx
+# sh8
+ 8049262: 90[ ]+nop *
+ 8049263: 90[ ]+nop *
+ 8049264: 65 8b 02[ ]+mov %gs:\(%edx\),%eax
+ 8049267: 90[ ]+nop *
+ 8049268: 90[ ]+nop *
+ 8049269: 90[ ]+nop *
+ 804926a: 90[ ]+nop *
+# LE @tpoff, global var defined in exec
+ 804926b: ba 00 10 00 00[ ]+mov \$0x1000,%edx
+# sg1
+ 8049270: 90[ ]+nop *
+ 8049271: 90[ ]+nop *
+ 8049272: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 8049278: 90[ ]+nop *
+ 8049279: 90[ ]+nop *
+ 804927a: 29 d0[ ]+sub %edx,%eax
+ 804927c: 90[ ]+nop *
+ 804927d: 90[ ]+nop *
+ 804927e: 90[ ]+nop *
+ 804927f: 90[ ]+nop *
+# LE @tpoff, local var
+ 8049280: b8 7f 0f 00 00[ ]+mov \$0xf7f,%eax
+# bl1+1
+ 8049285: 90[ ]+nop *
+ 8049286: 90[ ]+nop *
+ 8049287: 65 8b 15 00 00 00 00[ ]+mov %gs:0x0,%edx
+ 804928e: 90[ ]+nop *
+ 804928f: 90[ ]+nop *
+ 8049290: 29 c2[ ]+sub %eax,%edx
+ 8049292: 90[ ]+nop *
+ 8049293: 90[ ]+nop *
+ 8049294: 90[ ]+nop *
+ 8049295: 90[ ]+nop *
+# LE @tpoff, hidden var defined in exec
+ 8049296: b8 bd 0f 00 00[ ]+mov \$0xfbd,%eax
+# sh1+3
+ 804929b: 90[ ]+nop *
+ 804929c: 90[ ]+nop *
+ 804929d: 65 8b 15 00 00 00 00[ ]+mov %gs:0x0,%edx
+ 80492a4: 90[ ]+nop *
+ 80492a5: 90[ ]+nop *
+ 80492a6: 29 c2[ ]+sub %eax,%edx
+ 80492a8: 90[ ]+nop *
+ 80492a9: 90[ ]+nop *
+ 80492aa: 90[ ]+nop *
+ 80492ab: 90[ ]+nop *
+# LE @ntpoff, global var defined in exec
+ 80492ac: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 80492b2: 90[ ]+nop *
+ 80492b3: 90[ ]+nop *
+ 80492b4: 8d 90 04 f0 ff ff[ ]+lea -0xffc\(%eax\),%edx
+# sg2
+ 80492ba: 90[ ]+nop *
+ 80492bb: 90[ ]+nop *
+ 80492bc: 90[ ]+nop *
+ 80492bd: 90[ ]+nop *
+# LE @ntpoff, local var, non-canonical sequence
+ 80492be: b8 86 f0 ff ff[ ]+mov \$0xfffff086,%eax
+# bl2+2
+ 80492c3: 90[ ]+nop *
+ 80492c4: 90[ ]+nop *
+ 80492c5: 65 8b 15 00 00 00 00[ ]+mov %gs:0x0,%edx
+ 80492cc: 90[ ]+nop *
+ 80492cd: 90[ ]+nop *
+ 80492ce: 01 c2[ ]+add %eax,%edx
+ 80492d0: 90[ ]+nop *
+ 80492d1: 90[ ]+nop *
+ 80492d2: 90[ ]+nop *
+ 80492d3: 90[ ]+nop *
+# LE @ntpoff, hidden var defined in exec, non-canonical sequence
+ 80492d4: 65 8b 15 00 00 00 00[ ]+mov %gs:0x0,%edx
+ 80492db: 90[ ]+nop *
+ 80492dc: 90[ ]+nop *
+ 80492dd: 81 c2 45 f0 ff ff[ ]+add \$0xfffff045,%edx
+# sh2+1
+ 80492e3: 90[ ]+nop *
+ 80492e4: 90[ ]+nop *
+ 80492e5: 90[ ]+nop *
+ 80492e6: 90[ ]+nop *
+# LE @ntpoff, global var defined in exec
+ 80492e7: 65 a1 08 f0 ff ff[ ]+mov %gs:0xfffff008,%eax
+# sg3
+ 80492ed: 90[ ]+nop *
+ 80492ee: 90[ ]+nop *
+ 80492ef: 90[ ]+nop *
+ 80492f0: 90[ ]+nop *
+# LE @ntpoff, local var
+ 80492f1: 65 8b 15 8b f0 ff ff[ ]+mov %gs:0xfffff08b,%edx
+# bl3+3
+ 80492f8: 90[ ]+nop *
+ 80492f9: 90[ ]+nop *
+ 80492fa: 90[ ]+nop *
+ 80492fb: 90[ ]+nop *
+# LE @ntpoff, hidden var defined in exec
+ 80492fc: 65 8b 15 49 f0 ff ff[ ]+mov %gs:0xfffff049,%edx
+# sh3+1
+ 8049303: 90[ ]+nop *
+ 8049304: 90[ ]+nop *
+ 8049305: 90[ ]+nop *
+ 8049306: 90[ ]+nop *
+ 8049307: 8b 5d fc[ ]+mov -0x4\(%ebp\),%ebx
+ 804930a: c9[ ]+leave *
+ 804930b: c3[ ]+ret *
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsbin.rd b/binutils-2.21/ld/testsuite/ld-i386/tlsbin.rd
new file mode 100644
index 0000000..84cec78
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsbin.rd
@@ -0,0 +1,160 @@
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as: --32
+#ld: -melf_i386 tmpdir/libtlslib.so
+#readelf: -Ssrl
+#target: i?86-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
+ +\[[ 0-9]+\] \.interp +.*
+ +\[[ 0-9]+\] \.hash +.*
+ +\[[ 0-9]+\] \.dynsym +.*
+ +\[[ 0-9]+\] \.dynstr +.*
+ +\[[ 0-9]+\] \.rel.dyn +.*
+ +\[[ 0-9]+\] \.rel.plt +.*
+ +\[[ 0-9]+\] \.plt +.*
+ +\[[ 0-9]+\] \.text +PROGBITS +0+8049000 .*
+ +\[[ 0-9]+\] \.tdata +PROGBITS +0+804a000 [0-9a-f]+ 000060 00 WAT +0 +0 4096
+ +\[[ 0-9]+\] \.tbss +NOBITS +[0-9a-f]+ [0-9a-f]+ 000040 00 WAT +0 +0 +1
+ +\[[ 0-9]+\] \.dynamic +DYNAMIC +0+804a060 .*
+ +\[[ 0-9]+\] \.got +PROGBITS +0+804a100 .*
+ +\[[ 0-9]+\] \.got\.plt +PROGBITS +0+804a124 .*
+ +\[[ 0-9]+\] \.shstrtab +.*
+ +\[[ 0-9]+\] \.symtab +.*
+ +\[[ 0-9]+\] \.strtab +.*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x8049188
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +PHDR.*
+ +INTERP.*
+.*Requesting program interpreter.*
+ +LOAD.*
+ +LOAD.*
+ +DYNAMIC.*
+ +TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x0+60 0x0+a0 R +0x1000
+
+ Section to Segment mapping:
+ +Segment Sections...
+ +00 +
+ +01 +.interp *
+ +02 +.interp .hash .dynsym .dynstr .rel.dyn .rel.plt .plt .text *
+ +03 +.tdata .dynamic .got .got.plt *
+ +04 +.dynamic *
+ +05 +.tdata .tbss *
+
+Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 9 entries:
+ Offset +Info +Type +Sym.Value +Sym. Name
+[0-9a-f ]+R_386_TLS_TPOFF +0+ +sG3
+[0-9a-f ]+R_386_TLS_TPOFF +0+ +sG5
+[0-9a-f ]+R_386_TLS_TPOFF +0+ +sG7
+[0-9a-f ]+R_386_TLS_TPOFF32 0+ +sG2
+[0-9a-f ]+R_386_TLS_TPOFF32 0+ +sG4
+[0-9a-f ]+R_386_TLS_TPOFF +0+ +sG4
+[0-9a-f ]+R_386_TLS_TPOFF32 0+ +sG6
+[0-9a-f ]+R_386_TLS_TPOFF32 0+ +sG1
+[0-9a-f ]+R_386_TLS_TPOFF +0+ +sG8
+
+Relocation section '.rel.plt' at offset 0x[0-9a-f]+ contains 1 entries:
+ Offset +Info +Type +Sym.Value +Sym. Name
+[0-9a-f ]+R_386_JUMP_SLOT +[0-9a-f]+ +___tls_get_addr
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +[0-9]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND *
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG3
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG5
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG7
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG2
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG4
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG6
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG1
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG8
+ +[0-9]+: [0-9a-f]+ +0 +FUNC +GLOBAL +DEFAULT +UND ___tls_get_addr
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +[0-9]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +1 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +2 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +3 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +4 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +5 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +6 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +7 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +8 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +9 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +10 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +11 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +12 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +13 *
+ +[0-9]+: 00000020 +0 +TLS +LOCAL +DEFAULT +9 sl1
+ +[0-9]+: 00000024 +0 +TLS +LOCAL +DEFAULT +9 sl2
+ +[0-9]+: 00000028 +0 +TLS +LOCAL +DEFAULT +9 sl3
+ +[0-9]+: 0000002c +0 +TLS +LOCAL +DEFAULT +9 sl4
+ +[0-9]+: 00000030 +0 +TLS +LOCAL +DEFAULT +9 sl5
+ +[0-9]+: 00000034 +0 +TLS +LOCAL +DEFAULT +9 sl6
+ +[0-9]+: 00000038 +0 +TLS +LOCAL +DEFAULT +9 sl7
+ +[0-9]+: 0000003c +0 +TLS +LOCAL +DEFAULT +9 sl8
+ +[0-9]+: 00000080 +0 +TLS +LOCAL +DEFAULT +10 bl1
+ +[0-9]+: 00000084 +0 +TLS +LOCAL +DEFAULT +10 bl2
+ +[0-9]+: 00000088 +0 +TLS +LOCAL +DEFAULT +10 bl3
+ +[0-9]+: 0000008c +0 +TLS +LOCAL +DEFAULT +10 bl4
+ +[0-9]+: 00000090 +0 +TLS +LOCAL +DEFAULT +10 bl5
+ +[0-9]+: 00000094 +0 +TLS +LOCAL +DEFAULT +10 bl6
+ +[0-9]+: 00000098 +0 +TLS +LOCAL +DEFAULT +10 bl7
+ +[0-9]+: 0000009c +0 +TLS +LOCAL +DEFAULT +10 bl8
+ +[0-9]+: 0+804a060 +0 +OBJECT +LOCAL +DEFAULT +11 _DYNAMIC
+ +[0-9]+: [0-9a-f]+ +0 +OBJECT +LOCAL +DEFAULT +13 _GLOBAL_OFFSET_TABLE_
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG3
+ +[0-9]+: 0000001c +0 +TLS +GLOBAL +DEFAULT +9 sg8
+ +[0-9]+: 0000007c +0 +TLS +GLOBAL +DEFAULT +10 bg8
+ +[0-9]+: 00000074 +0 +TLS +GLOBAL +DEFAULT +10 bg6
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG5
+ +[0-9]+: 00000068 +0 +TLS +GLOBAL +DEFAULT +10 bg3
+ +[0-9]+: 00000008 +0 +TLS +GLOBAL +DEFAULT +9 sg3
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG7
+ +[0-9]+: 00000048 +0 +TLS +GLOBAL +HIDDEN +9 sh3
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG2
+ +[0-9]+: 0000000c +0 +TLS +GLOBAL +DEFAULT +9 sg4
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG4
+ +[0-9]+: 00000010 +0 +TLS +GLOBAL +DEFAULT +9 sg5
+ +[0-9]+: 00000070 +0 +TLS +GLOBAL +DEFAULT +10 bg5
+ +[0-9]+: 00000058 +0 +TLS +GLOBAL +HIDDEN +9 sh7
+ +[0-9]+: 0000005c +0 +TLS +GLOBAL +HIDDEN +9 sh8
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +9 sg1
+ +[0-9]+: 0+8049188 +0 +FUNC +GLOBAL +DEFAULT +8 _start
+ +[0-9]+: 0000004c +0 +TLS +GLOBAL +HIDDEN +9 sh4
+ +[0-9]+: 00000078 +0 +TLS +GLOBAL +DEFAULT +10 bg7
+ +[0-9]+: 00000050 +0 +TLS +GLOBAL +HIDDEN +9 sh5
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG6
+ +[0-9]+: 0+8049000 +0 +FUNC +GLOBAL +DEFAULT +8 fn2
+ +[0-9]+: 00000004 +0 +TLS +GLOBAL +DEFAULT +9 sg2
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG1
+ +[0-9]+: 00000040 +0 +TLS +GLOBAL +HIDDEN +9 sh1
+ +[0-9]+: 00000014 +0 +TLS +GLOBAL +DEFAULT +9 sg6
+ +[0-9]+: 00000018 +0 +TLS +GLOBAL +DEFAULT +9 sg7
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+ +[0-9]+: 00000044 +0 +TLS +GLOBAL +HIDDEN +9 sh2
+ +[0-9]+: 00000054 +0 +TLS +GLOBAL +HIDDEN +9 sh6
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG8
+ +[0-9]+: 00000064 +0 +TLS +GLOBAL +DEFAULT +10 bg2
+ +[0-9]+: 00000060 +0 +TLS +GLOBAL +DEFAULT +10 bg1
+ +[0-9]+: [0-9a-f]+ +0 +FUNC +GLOBAL +DEFAULT +UND ___tls_get_addr
+ +[0-9]+: 0000006c +0 +TLS +GLOBAL +DEFAULT +10 bg4
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsbin.s b/binutils-2.21/ld/testsuite/ld-i386/tlsbin.s
new file mode 100644
index 0000000..db80e09
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsbin.s
@@ -0,0 +1,165 @@
+ .section ".tbss", "awT", @nobits
+ .globl bg1, bg2, bg3, bg4, bg5, bg6, bg7, bg8
+bg1: .space 4
+bg2: .space 4
+bg3: .space 4
+bg4: .space 4
+bg5: .space 4
+bg6: .space 4
+bg7: .space 4
+bg8: .space 4
+bl1: .space 4
+bl2: .space 4
+bl3: .space 4
+bl4: .space 4
+bl5: .space 4
+bl6: .space 4
+bl7: .space 4
+bl8: .space 4
+ .text
+ .globl _start
+ .type _start,@function
+_start:
+ pushl %ebp
+ movl %esp, %ebp
+ /* Set up .GOT pointer for non-pic @gottpoff sequences */
+ call 1f
+1: popl %ecx
+ addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx
+ nop;nop;nop;nop
+
+ /* @gottpoff IE against global var */
+ movl %gs:0, %edx
+ nop;nop
+ subl sG6@gottpoff(%ecx), %edx
+ nop;nop;nop;nop
+
+ /* @indntpoff IE against global var */
+ movl %gs:0, %eax
+ nop;nop
+ addl sG7@indntpoff, %eax
+ nop;nop;nop;nop
+
+ /* @indntpoff direct %gs access IE against global var */
+ movl sG8@indntpoff, %edx
+ nop;nop
+ movl %gs:(%edx), %eax
+ nop;nop;nop;nop
+
+ /* @gottpoff IE -> LE against global var defined in exec */
+ movl %gs:0, %edx
+ nop;nop
+ subl bg6@gottpoff(%ecx), %edx
+ nop;nop;nop;nop
+
+ /* @indntpoff IE -> LE against global var defined in exec */
+ movl %gs:0, %eax
+ nop;nop
+ addl bg7@indntpoff, %eax
+ nop;nop;nop;nop
+
+ /* @indntpoff direct %gs access IE -> LE against global var defined
+ in exec */
+ movl bg8@indntpoff, %edx
+ nop;nop
+ movl %gs:(%edx), %eax
+ nop;nop;nop;nop
+
+ /* @gottpoff IE -> LE against local var */
+ movl %gs:0, %edx
+ nop;nop
+ subl bl6@gottpoff(%ecx), %edx
+ nop;nop;nop;nop
+
+ /* @indntpoff IE -> LE against local var */
+ movl %gs:0, %eax
+ nop;nop
+ addl bl7@indntpoff, %eax
+ nop;nop;nop;nop
+
+ /* @indntpoff direct %gs access IE -> LE against local var */
+ movl bl8@indntpoff, %edx
+ nop;nop
+ movl %gs:(%edx), %eax
+ nop;nop;nop;nop
+
+ /* @gottpoff IE -> LE against hidden but not local var */
+ movl %gs:0, %edx
+ nop;nop
+ subl sh6@gottpoff(%ecx), %edx
+ nop;nop;nop;nop
+
+ /* @indntpoff IE -> LE against hidden but not local var */
+ movl %gs:0, %eax
+ nop;nop
+ addl sh7@indntpoff, %eax
+ nop;nop;nop;nop
+
+ /* @indntpoff direct %gs access IE -> LE against hidden but not
+ local var */
+ movl sh8@indntpoff, %edx
+ nop;nop
+ movl %gs:(%edx), %eax
+ nop;nop;nop;nop
+
+ /* LE @tpoff, global var defined in exec */
+ movl $sg1@tpoff, %edx
+ nop;nop
+ movl %gs:0, %eax
+ nop;nop
+ subl %edx, %eax
+ nop;nop;nop;nop
+
+ /* LE @tpoff, local var */
+ movl $-1+bl1@tpoff, %eax
+ nop;nop
+ movl %gs:0, %edx
+ nop;nop
+ subl %eax, %edx
+ nop;nop;nop;nop
+
+ /* LE @tpoff, hidden var defined in exec */
+ movl $sh1@tpoff-3, %eax
+ nop;nop
+ movl %gs:0, %edx
+ nop;nop
+ subl %eax, %edx
+ nop;nop;nop;nop
+
+ /* LE @ntpoff, global var defined in exec */
+ movl %gs:0, %eax
+ nop;nop
+ leal sg2@ntpoff(%eax), %edx
+ nop;nop;nop;nop
+
+ /* LE @ntpoff, local var, non-canonical sequence */
+ movl $2+bl2@ntpoff, %eax
+ nop;nop
+ movl %gs:0, %edx
+ nop;nop
+ addl %eax, %edx
+ nop;nop;nop;nop
+
+ /* LE @ntpoff, hidden var defined in exec, non-canonical sequence */
+ movl %gs:0, %edx
+ nop;nop
+ addl $sh2@ntpoff+1, %edx
+ nop;nop;nop;nop
+
+ /* Direct %gs access */
+
+ /* LE @ntpoff, global var defined in exec */
+ movl %gs:sg3@ntpoff, %eax
+ nop;nop;nop;nop
+
+ /* LE @ntpoff, local var */
+ movl %gs:bl3@ntpoff+3, %edx
+ nop;nop;nop;nop
+
+ /* LE @ntpoff, hidden var defined in exec */
+ movl %gs:1+sh3@ntpoff, %edx
+ nop;nop;nop;nop
+
+ movl -4(%ebp), %ebx
+ leave
+ ret
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsbin.sd b/binutils-2.21/ld/testsuite/ld-i386/tlsbin.sd
new file mode 100644
index 0000000..2fa7a89
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsbin.sd
@@ -0,0 +1,13 @@
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as: --32
+#ld: -melf_i386 tmpdir/libtlslib.so
+#objdump: -sj.got
+#target: i?86-*-*
+
+.*: file format elf32-i386
+
+Contents of section \.got:
+ 804a100 [0-9a-f]+ 00000000 00000000 [0-9a-f]+ .*
+ 804a110 00000000 00000000 00000000 00000000 .*
+ 804a120 00000000 +.*
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsbin.td b/binutils-2.21/ld/testsuite/ld-i386/tlsbin.td
new file mode 100644
index 0000000..bb29455
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsbin.td
@@ -0,0 +1,16 @@
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as: --32
+#ld: -melf_i386 tmpdir/libtlslib.so
+#objdump: -sj.tdata
+#target: i?86-*-*
+
+.*: file format elf32-i386
+
+Contents of section \.tdata:
+ 804a000 11000000 12000000 13000000 14000000 .*
+ 804a010 15000000 16000000 17000000 18000000 .*
+ 804a020 41000000 42000000 43000000 44000000 .*
+ 804a030 45000000 46000000 47000000 48000000 .*
+ 804a040 01010000 02010000 03010000 04010000 .*
+ 804a050 05010000 06010000 07010000 08010000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsbindesc.dd b/binutils-2.21/ld/testsuite/ld-i386/tlsbindesc.dd
new file mode 100644
index 0000000..f77d1c8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsbindesc.dd
@@ -0,0 +1,456 @@
+#source: tlsbindesc.s
+#source: tlsbin.s
+#as: --32
+#ld: -melf_i386 tmpdir/libtlslib.so
+#objdump: -drj.text
+#target: i?86-*-*
+
+# PT_TLS layout is:
+# Offset from Offset from Name
+# TCB base TCB end
+# 0x00 -0xa0 sg1..sg8
+# 0x20 -0x80 sl1..sl8
+# 0x40 -0x60 sh1..sh8
+# 0x60 -0x40 bg1..bg8
+# 0x80 -0x20 bl1..bl8
+
+.*: +file format elf32-i386
+
+Disassembly of section .text:
+
+[0-9a-f]+ <fn2>:
+ [0-9a-f]+: 55[ ]+push %ebp
+ [0-9a-f]+: 89 e5[ ]+mov %esp,%ebp
+ [0-9a-f]+: 53[ ]+push %ebx
+ [0-9a-f]+: 50[ ]+push %eax
+ [0-9a-f]+: e8 00 00 00 00[ ]+call [0-9a-f]+ <fn2\+0xa>
+ [0-9a-f]+: 5b[ ]+pop %ebx
+ [0-9a-f]+: 81 c3 fa 10 00 00[ ]+add \$0x10fa,%ebx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE because variable is not defined in executable
+ [0-9a-f]+: 8b 83 f8 ff ff ff[ ]+mov -0x8\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sG1
+ [0-9a-f]+: f7 d8[ ]+neg %eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE because variable is not defined in executable where
+# the variable is referenced through @gottpoff too
+ [0-9a-f]+: 8b 83 e8 ff ff ff[ ]+mov -0x18\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sG2
+ [0-9a-f]+: f7 d8[ ]+neg %eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE because variable is not defined in executable where
+# the variable is referenced through @gotntpoff too
+ [0-9a-f]+: 8b 83 dc ff ff ff[ ]+mov -0x24\(%ebx\),%eax
+# ->R_386_TLS_TPOFF sG3
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE because variable is not defined in executable where
+# the variable is referenced through @gottpoff and @gotntpoff too
+ [0-9a-f]+: 8b 83 f0 ff ff ff[ ]+mov -0x10\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sG4
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> LE with global variable defined in executable
+ [0-9a-f]+: 8d 05 00 f0 ff ff[ ]+lea 0xfffff000,%eax
+# sg1
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> LE with local variable defined in executable
+ [0-9a-f]+: 8d 05 20 f0 ff ff[ ]+lea 0xfffff020,%eax
+# sl1
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> LE with hidden variable defined in executable
+ [0-9a-f]+: 8d 05 40 f0 ff ff[ ]+lea 0xfffff040,%eax
+# sh1
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# LD -> LE
+ [0-9a-f]+: 8d 05 00 00 00 00[ ]+lea 0x0,%eax
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 8d 90 20 f0 ff ff[ ]+lea -0xfe0\(%eax\),%edx
+# sl1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 8d 88 24 f0 ff ff[ ]+lea -0xfdc\(%eax\),%ecx
+# sl2
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# LD -> LE against hidden variables
+ [0-9a-f]+: 8d 05 00 00 00 00[ ]+lea 0x0,%eax
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 8d 90 40 f0 ff ff[ ]+lea -0xfc0\(%eax\),%edx
+# sh1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 8d 88 44 f0 ff ff[ ]+lea -0xfbc\(%eax\),%ecx
+# sh2
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gottpoff IE against global var
+ [0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 2b 8b e8 ff ff ff[ ]+sub -0x18\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF32 sG2
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gottpoff IE against global var
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 2b 83 ec ff ff ff[ ]+sub -0x14\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sG4
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE against global var
+ [0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 03 8b dc ff ff ff[ ]+add -0x24\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF sG3
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE against global var
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 03 83 f0 ff ff ff[ ]+add -0x10\(%ebx\),%eax
+# ->R_386_TLS_TPOFF sG4
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gottpoff IE -> LE against global var defined in exec
+ [0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 81 e9 00 10 00 00[ ]+sub \$0x1000,%ecx
+# sg1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE -> LE against local var
+ [0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 81 c0 20 f0 ff ff[ ]+add \$0xfffff020,%eax
+# sl1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gottpoff IE -> LE against hidden var
+ [0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 81 e9 c0 0f 00 00[ ]+sub \$0xfc0,%ecx
+# sh1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# Direct access through %gs
+# @gotntpoff IE against global var
+ [0-9a-f]+: 8b 8b e0 ff ff ff[ ]+mov -0x20\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF sG5
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 65 8b 11[ ]+mov %gs:\(%ecx\),%edx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE->LE against local var
+ [0-9a-f]+: c7 c0 30 f0 ff ff[ ]+mov \$0xfffff030,%eax
+# sl5
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 65 8b 10[ ]+mov %gs:\(%eax\),%edx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE->LE against hidden var
+ [0-9a-f]+: c7 c2 50 f0 ff ff[ ]+mov \$0xfffff050,%edx
+# sh5
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 65 8b 12[ ]+mov %gs:\(%edx\),%edx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 8b 5d fc[ ]+mov -0x4\(%ebp\),%ebx
+ [0-9a-f]+: c9[ ]+leave *
+ [0-9a-f]+: c3[ ]+ret *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+
+[0-9a-f]+ <_start>:
+ [0-9a-f]+: 55[ ]+push %ebp
+ [0-9a-f]+: 89 e5[ ]+mov %esp,%ebp
+ [0-9a-f]+: e8 00 00 00 00[ ]+call [0-9a-f]+ <_start\+0x8>
+ [0-9a-f]+: 59[ ]+pop %ecx
+ [0-9a-f]+: 81 c1 a4 0f 00 00[ ]+add \$0xfa4,%ecx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gottpoff IE against global var
+ [0-9a-f]+: 65 8b 15 00 00 00 00[ ]+mov %gs:0x0,%edx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 2b 91 f4 ff ff ff[ ]+sub -0xc\(%ecx\),%edx
+# ->R_386_TLS_TPOFF32 sG6
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @indntpoff IE against global var
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 03 05 e8 a0 04 08[ ]+add 0x804a0e8,%eax
+# ->R_386_TLS_TPOFF sG7
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @indntpoff direct %gs access IE against global var
+ [0-9a-f]+: 8b 15 00 a1 04 08[ ]+mov 0x804a100,%edx
+# ->R_386_TLS_TPOFF sG8
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 65 8b 02[ ]+mov %gs:\(%edx\),%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gottpoff IE -> LE against global var defined in exec
+ [0-9a-f]+: 65 8b 15 00 00 00 00[ ]+mov %gs:0x0,%edx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 81 ea 8c 0f 00 00[ ]+sub \$0xf8c,%edx
+# bg6
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @indntpoff IE -> LE against global var defined in exec
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 81 c0 78 f0 ff ff[ ]+add \$0xfffff078,%eax
+# bg7
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @indntpoff direct %gs access IE -> LE against global var defined
+# in exec
+ [0-9a-f]+: c7 c2 7c f0 ff ff[ ]+mov \$0xfffff07c,%edx
+# bg8
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 65 8b 02[ ]+mov %gs:\(%edx\),%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gottpoff IE -> LE against local var
+ [0-9a-f]+: 65 8b 15 00 00 00 00[ ]+mov %gs:0x0,%edx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 81 ea 6c 0f 00 00[ ]+sub \$0xf6c,%edx
+# bl6
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @indntpoff IE -> LE against local var
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 81 c0 98 f0 ff ff[ ]+add \$0xfffff098,%eax
+# bl7
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @indntpoff direct %gs access IE -> LE against local var
+ [0-9a-f]+: c7 c2 9c f0 ff ff[ ]+mov \$0xfffff09c,%edx
+# bl8
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 65 8b 02[ ]+mov %gs:\(%edx\),%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gottpoff IE -> LE against hidden but not local var
+ [0-9a-f]+: 65 8b 15 00 00 00 00[ ]+mov %gs:0x0,%edx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 81 ea ac 0f 00 00[ ]+sub \$0xfac,%edx
+# sh6
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @indntpoff IE -> LE against hidden but not local var
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 81 c0 58 f0 ff ff[ ]+add \$0xfffff058,%eax
+# sh7
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @indntpoff direct %gs access IE -> LE against hidden but not
+# local var
+ [0-9a-f]+: c7 c2 5c f0 ff ff[ ]+mov \$0xfffff05c,%edx
+# sh8
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 65 8b 02[ ]+mov %gs:\(%edx\),%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# LE @tpoff, global var defined in exec
+ [0-9a-f]+: ba 00 10 00 00[ ]+mov \$0x1000,%edx
+# sg1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 29 d0[ ]+sub %edx,%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# LE @tpoff, local var
+ [0-9a-f]+: b8 7f 0f 00 00[ ]+mov \$0xf7f,%eax
+# bl1+1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 65 8b 15 00 00 00 00[ ]+mov %gs:0x0,%edx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 29 c2[ ]+sub %eax,%edx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# LE @tpoff, hidden var defined in exec
+ [0-9a-f]+: b8 bd 0f 00 00[ ]+mov \$0xfbd,%eax
+# sh1+3
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 65 8b 15 00 00 00 00[ ]+mov %gs:0x0,%edx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 29 c2[ ]+sub %eax,%edx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# LE @ntpoff, global var defined in exec
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 8d 90 04 f0 ff ff[ ]+lea -0xffc\(%eax\),%edx
+# sg2
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# LE @ntpoff, local var, non-canonical sequence
+ [0-9a-f]+: b8 86 f0 ff ff[ ]+mov \$0xfffff086,%eax
+# bl2+2
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 65 8b 15 00 00 00 00[ ]+mov %gs:0x0,%edx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 01 c2[ ]+add %eax,%edx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# LE @ntpoff, hidden var defined in exec, non-canonical sequence
+ [0-9a-f]+: 65 8b 15 00 00 00 00[ ]+mov %gs:0x0,%edx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 81 c2 45 f0 ff ff[ ]+add \$0xfffff045,%edx
+# sh2+1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# LE @ntpoff, global var defined in exec
+ [0-9a-f]+: 65 a1 08 f0 ff ff[ ]+mov %gs:0xfffff008,%eax
+# sg3
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# LE @ntpoff, local var
+ [0-9a-f]+: 65 8b 15 8b f0 ff ff[ ]+mov %gs:0xfffff08b,%edx
+# bl3+3
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# LE @ntpoff, hidden var defined in exec
+ [0-9a-f]+: 65 8b 15 49 f0 ff ff[ ]+mov %gs:0xfffff049,%edx
+# sh3+1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 8b 5d fc[ ]+mov -0x4\(%ebp\),%ebx
+ [0-9a-f]+: c9[ ]+leave *
+ [0-9a-f]+: c3[ ]+ret *
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsbindesc.rd b/binutils-2.21/ld/testsuite/ld-i386/tlsbindesc.rd
new file mode 100644
index 0000000..c2cea19
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsbindesc.rd
@@ -0,0 +1,151 @@
+#source: tlsbindesc.s
+#source: tlsbin.s
+#as: --32
+#ld: -melf_i386 tmpdir/libtlslib.so
+#readelf: -Ssrl
+#target: i?86-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
+ +\[[ 0-9]+\] \.interp +.*
+ +\[[ 0-9]+\] \.hash +.*
+ +\[[ 0-9]+\] \.dynsym +.*
+ +\[[ 0-9]+\] \.dynstr +.*
+ +\[[ 0-9]+\] \.rel.dyn +.*
+ +\[[ 0-9]+\] \.text +PROGBITS +0+8049000 .*
+ +\[[ 0-9]+\] \.tdata +PROGBITS +0+804a000 [0-9a-f]+ 000060 00 WAT +0 +0 4096
+ +\[[ 0-9]+\] \.tbss +NOBITS +[0-9a-f]+ [0-9a-f]+ 000040 00 WAT +0 +0 +1
+ +\[[ 0-9]+\] \.dynamic +DYNAMIC +0+804a060 .*
+ +\[[ 0-9]+\] \.got +PROGBITS +0+804a0e0 .*
+ +\[[ 0-9]+\] \.got\.plt +PROGBITS +0+804a104 .*
+ +\[[ 0-9]+\] \.shstrtab +.*
+ +\[[ 0-9]+\] \.symtab +.*
+ +\[[ 0-9]+\] \.strtab +.*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x8049158
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +PHDR.*
+ +INTERP.*
+.*Requesting program interpreter.*
+ +LOAD.*
+ +LOAD.*
+ +DYNAMIC.*
+ +TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x0+60 0x0+a0 R +0x1000
+
+ Section to Segment mapping:
+ +Segment Sections...
+ +00 +
+ +01 +.interp *
+ +02 +.interp .hash .dynsym .dynstr .rel.dyn .text *
+ +03 +.tdata .dynamic .got .got.plt *
+ +04 +.dynamic *
+ +05 +.tdata .tbss *
+
+Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 9 entries:
+ Offset +Info +Type +Sym.Value +Sym. Name
+0+804a0e0 +0000010e R_386_TLS_TPOFF +0+ +sG3
+0+804a0e4 +0000020e R_386_TLS_TPOFF +0+ +sG5
+0+804a0e8 +0000030e R_386_TLS_TPOFF +0+ +sG7
+0+804a0ec +00000425 R_386_TLS_TPOFF32 0+ +sG2
+0+804a0f0 +00000525 R_386_TLS_TPOFF32 0+ +sG4
+0+804a0f4 +0000050e R_386_TLS_TPOFF +0+ +sG4
+0+804a0f8 +00000725 R_386_TLS_TPOFF32 0+ +sG6
+0+804a0fc +00000825 R_386_TLS_TPOFF32 0+ +sG1
+0+804a100 +00000b0e R_386_TLS_TPOFF +0+ +sG8
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx Name
+ +[0-9]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND *
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG3
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG5
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG7
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG2
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG4
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG6
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG1
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG8
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +[0-9]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +1 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +2 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +3 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +4 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +5 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +6 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +7 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +8 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +9 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +10 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +11 *
+ +[0-9]+: 00000020 +0 +TLS +LOCAL +DEFAULT +7 sl1
+ +[0-9]+: 00000024 +0 +TLS +LOCAL +DEFAULT +7 sl2
+ +[0-9]+: 00000028 +0 +TLS +LOCAL +DEFAULT +7 sl3
+ +[0-9]+: 0000002c +0 +TLS +LOCAL +DEFAULT +7 sl4
+ +[0-9]+: 00000030 +0 +TLS +LOCAL +DEFAULT +7 sl5
+ +[0-9]+: 00000034 +0 +TLS +LOCAL +DEFAULT +7 sl6
+ +[0-9]+: 00000038 +0 +TLS +LOCAL +DEFAULT +7 sl7
+ +[0-9]+: 0000003c +0 +TLS +LOCAL +DEFAULT +7 sl8
+ +[0-9]+: 00000080 +0 +TLS +LOCAL +DEFAULT +8 bl1
+ +[0-9]+: 00000084 +0 +TLS +LOCAL +DEFAULT +8 bl2
+ +[0-9]+: 00000088 +0 +TLS +LOCAL +DEFAULT +8 bl3
+ +[0-9]+: 0000008c +0 +TLS +LOCAL +DEFAULT +8 bl4
+ +[0-9]+: 00000090 +0 +TLS +LOCAL +DEFAULT +8 bl5
+ +[0-9]+: 00000094 +0 +TLS +LOCAL +DEFAULT +8 bl6
+ +[0-9]+: 00000098 +0 +TLS +LOCAL +DEFAULT +8 bl7
+ +[0-9]+: 0000009c +0 +TLS +LOCAL +DEFAULT +8 bl8
+ +[0-9]+: 00001000 +0 +TLS +LOCAL +DEFAULT +7 _TLS_MODULE_BASE_
+ +[0-9]+: 0+804a060 +0 +OBJECT +LOCAL +DEFAULT +9 _DYNAMIC
+ +[0-9]+: [0-9a-f]+ +0 +OBJECT +LOCAL +DEFAULT +11 _GLOBAL_OFFSET_TABLE_
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG3
+ +[0-9]+: 0000001c +0 +TLS +GLOBAL +DEFAULT +7 sg8
+ +[0-9]+: 0000007c +0 +TLS +GLOBAL +DEFAULT +8 bg8
+ +[0-9]+: 00000074 +0 +TLS +GLOBAL +DEFAULT +8 bg6
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG5
+ +[0-9]+: 00000068 +0 +TLS +GLOBAL +DEFAULT +8 bg3
+ +[0-9]+: 00000008 +0 +TLS +GLOBAL +DEFAULT +7 sg3
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG7
+ +[0-9]+: 00000048 +0 +TLS +GLOBAL +HIDDEN +7 sh3
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG2
+ +[0-9]+: 0000000c +0 +TLS +GLOBAL +DEFAULT +7 sg4
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG4
+ +[0-9]+: 00000010 +0 +TLS +GLOBAL +DEFAULT +7 sg5
+ +[0-9]+: 00000070 +0 +TLS +GLOBAL +DEFAULT +8 bg5
+ +[0-9]+: 00000058 +0 +TLS +GLOBAL +HIDDEN +7 sh7
+ +[0-9]+: 0000005c +0 +TLS +GLOBAL +HIDDEN +7 sh8
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +7 sg1
+ +[0-9]+: 0+8049158 +0 +FUNC +GLOBAL +DEFAULT +6 _start
+ +[0-9]+: 0000004c +0 +TLS +GLOBAL +HIDDEN +7 sh4
+ +[0-9]+: 00000078 +0 +TLS +GLOBAL +DEFAULT +8 bg7
+ +[0-9]+: 00000050 +0 +TLS +GLOBAL +HIDDEN +7 sh5
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG6
+ +[0-9]+: 0+8049000 +0 +FUNC +GLOBAL +DEFAULT +6 fn2
+ +[0-9]+: 00000004 +0 +TLS +GLOBAL +DEFAULT +7 sg2
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG1
+ +[0-9]+: 00000040 +0 +TLS +GLOBAL +HIDDEN +7 sh1
+ +[0-9]+: 00000014 +0 +TLS +GLOBAL +DEFAULT +7 sg6
+ +[0-9]+: 00000018 +0 +TLS +GLOBAL +DEFAULT +7 sg7
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+ +[0-9]+: 00000044 +0 +TLS +GLOBAL +HIDDEN +7 sh2
+ +[0-9]+: 00000054 +0 +TLS +GLOBAL +HIDDEN +7 sh6
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG8
+ +[0-9]+: 00000064 +0 +TLS +GLOBAL +DEFAULT +8 bg2
+ +[0-9]+: 00000060 +0 +TLS +GLOBAL +DEFAULT +8 bg1
+ +[0-9]+: 0000006c +0 +TLS +GLOBAL +DEFAULT +8 bg4
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsbindesc.s b/binutils-2.21/ld/testsuite/ld-i386/tlsbindesc.s
new file mode 100644
index 0000000..9094d08
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsbindesc.s
@@ -0,0 +1,167 @@
+ /* Force .got aligned to 4K, so it very likely gets at 0x804a100
+ (0x60 bytes .tdata and 0xa0 bytes .dynamic) */
+ .section ".tdata", "awT", @progbits
+ .balign 4096
+ .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
+ .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+ .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+sg1: .long 17
+sg2: .long 18
+sg3: .long 19
+sg4: .long 20
+sg5: .long 21
+sg6: .long 22
+sg7: .long 23
+sg8: .long 24
+sl1: .long 65
+sl2: .long 66
+sl3: .long 67
+sl4: .long 68
+sl5: .long 69
+sl6: .long 70
+sl7: .long 71
+sl8: .long 72
+sh1: .long 257
+sh2: .long 258
+sh3: .long 259
+sh4: .long 260
+sh5: .long 261
+sh6: .long 262
+sh7: .long 263
+sh8: .long 264
+ /* Force .text aligned to 4K, so it very likely gets at 0x8049000. */
+ .text
+ .balign 4096
+ .globl fn2
+ .type fn2,@function
+fn2:
+ pushl %ebp
+ movl %esp, %ebp
+ pushl %ebx
+ pushl %eax
+ call 1f
+1: popl %ebx
+ addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx
+ nop;nop;nop;nop
+
+ /* GD -> IE because variable is not defined in executable */
+ leal sG1@tlsdesc(%ebx), %eax
+ call *sG1@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* GD -> IE because variable is not defined in executable where
+ the variable is referenced through @gottpoff too */
+ leal sG2@tlsdesc(%ebx), %eax
+ call *sG2@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* GD -> IE because variable is not defined in executable where
+ the variable is referenced through @gotntpoff too */
+ leal sG3@tlsdesc(%ebx), %eax
+ call *sG3@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* GD -> IE because variable is not defined in executable where
+ the variable is referenced through @gottpoff and @gotntpoff too */
+ leal sG4@tlsdesc(%ebx), %eax
+ call *sG4@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* GD -> LE with global variable defined in executable */
+ leal sg1@tlsdesc(%ebx), %eax
+ call *sg1@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* GD -> LE with local variable defined in executable */
+ leal sl1@tlsdesc(%ebx), %eax
+ call *sl1@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* GD -> LE with hidden variable defined in executable */
+ leal sh1@tlsdesc(%ebx), %eax
+ call *sh1@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* LD -> LE */
+ leal _TLS_MODULE_BASE_@tlsdesc(%ebx), %eax
+ call *_TLS_MODULE_BASE_@tlscall(%eax)
+ nop;nop
+ leal sl1@dtpoff(%eax), %edx
+ nop;nop
+ leal sl2@dtpoff(%eax), %ecx
+ nop;nop;nop;nop
+
+ /* LD -> LE against hidden variables */
+ leal _TLS_MODULE_BASE_@tlsdesc(%ebx), %eax
+ call *_TLS_MODULE_BASE_@tlscall(%eax)
+ nop;nop
+ leal sh1@dtpoff(%eax), %edx
+ nop;nop
+ leal sh2@dtpoff(%eax), %ecx
+ nop;nop;nop;nop
+
+ /* @gottpoff IE against global var */
+ movl %gs:0, %ecx
+ nop;nop
+ subl sG2@gottpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ /* @gottpoff IE against global var */
+ movl %gs:0, %eax
+ nop;nop
+ subl sG4@gottpoff(%ebx), %eax
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against global var */
+ movl %gs:0, %ecx
+ nop;nop
+ addl sG3@gotntpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against global var */
+ movl %gs:0, %eax
+ nop;nop
+ addl sG4@gotntpoff(%ebx), %eax
+ nop;nop;nop;nop
+
+ /* @gottpoff IE -> LE against global var defined in exec */
+ movl %gs:0, %ecx
+ nop;nop
+ subl sg1@gottpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE -> LE against local var */
+ movl %gs:0, %ecx
+ nop;nop
+ addl sl1@gotntpoff(%ebx), %eax
+ nop;nop;nop;nop
+
+ /* @gottpoff IE -> LE against hidden var */
+ movl %gs:0, %ecx
+ nop;nop
+ subl sh1@gottpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ /* Direct access through %gs */
+
+ /* @gotntpoff IE against global var */
+ movl sG5@gotntpoff(%ebx), %ecx
+ nop;nop
+ movl %gs:(%ecx), %edx
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE->LE against local var */
+ movl sl5@gotntpoff(%ebx), %eax
+ nop;nop
+ movl %gs:(%eax), %edx
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE->LE against hidden var */
+ movl sh5@gotntpoff(%ebx), %edx
+ nop;nop
+ movl %gs:(%edx), %edx
+ nop;nop;nop;nop
+
+ movl -4(%ebp), %ebx
+ leave
+ ret
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsbindesc.sd b/binutils-2.21/ld/testsuite/ld-i386/tlsbindesc.sd
new file mode 100644
index 0000000..a87f5da
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsbindesc.sd
@@ -0,0 +1,13 @@
+#source: tlsbindesc.s
+#source: tlsbin.s
+#as: --32
+#ld: -melf_i386 tmpdir/libtlslib.so
+#objdump: -sj.got
+#target: i?86-*-*
+
+.*: file format elf32-i386
+
+Contents of section \.got:
+ 804a0e0 [0-9a-f]+ 00000000 00000000 [0-9a-f]+ .*
+ 804a0f0 00000000 00000000 00000000 00000000 .*
+ 804a100 00000000 +.*
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsbindesc.td b/binutils-2.21/ld/testsuite/ld-i386/tlsbindesc.td
new file mode 100644
index 0000000..726df3e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsbindesc.td
@@ -0,0 +1,16 @@
+#source: tlsbindesc.s
+#source: tlsbin.s
+#as: --32
+#ld: -melf_i386 tmpdir/libtlslib.so
+#objdump: -sj.tdata
+#target: i?86-*-*
+
+.*: file format elf32-i386
+
+Contents of section \.tdata:
+ 804a000 11000000 12000000 13000000 14000000 .*
+ 804a010 15000000 16000000 17000000 18000000 .*
+ 804a020 41000000 42000000 43000000 44000000 .*
+ 804a030 45000000 46000000 47000000 48000000 .*
+ 804a040 01010000 02010000 03010000 04010000 .*
+ 804a050 05010000 06010000 07010000 08010000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsbinpic.s b/binutils-2.21/ld/testsuite/ld-i386/tlsbinpic.s
new file mode 100644
index 0000000..9c8a006
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsbinpic.s
@@ -0,0 +1,172 @@
+ /* Force .got aligned to 4K, so it very likely gets at 0x804a100
+ (0x60 bytes .tdata and 0xa0 bytes .dynamic) */
+ .section ".tdata", "awT", @progbits
+ .balign 4096
+ .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
+ .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+ .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+sg1: .long 17
+sg2: .long 18
+sg3: .long 19
+sg4: .long 20
+sg5: .long 21
+sg6: .long 22
+sg7: .long 23
+sg8: .long 24
+sl1: .long 65
+sl2: .long 66
+sl3: .long 67
+sl4: .long 68
+sl5: .long 69
+sl6: .long 70
+sl7: .long 71
+sl8: .long 72
+sh1: .long 257
+sh2: .long 258
+sh3: .long 259
+sh4: .long 260
+sh5: .long 261
+sh6: .long 262
+sh7: .long 263
+sh8: .long 264
+ /* Force .text aligned to 4K, so it very likely gets at 0x8049000. */
+ .text
+ .balign 4096
+ .globl fn2
+ .type fn2,@function
+fn2:
+ pushl %ebp
+ movl %esp, %ebp
+ pushl %ebx
+ pushl %eax
+ call 1f
+1: popl %ebx
+ addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx
+ nop;nop;nop;nop
+
+ /* GD -> IE because variable is not defined in executable */
+ leal sG1@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> IE because variable is not defined in executable where
+ the variable is referenced through @gottpoff too */
+ leal sG2@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> IE because variable is not defined in executable where
+ the variable is referenced through @gotntpoff too */
+ leal sG3@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> IE because variable is not defined in executable where
+ the variable is referenced through @gottpoff and @gotntpoff too */
+ leal sG4@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> LE with global variable defined in executable */
+ leal sg1@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> LE with local variable defined in executable */
+ leal sl1@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> LE with hidden variable defined in executable */
+ leal sh1@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* LD -> LE */
+ leal sl1@tlsldm(%ebx), %eax
+ call ___tls_get_addr@PLT
+ nop;nop
+ leal sl1@dtpoff(%eax), %edx
+ nop;nop
+ leal sl2@dtpoff(%eax), %ecx
+ nop;nop;nop;nop
+
+ /* LD -> LE against hidden variables */
+ leal sh1@tlsldm(%ebx), %eax
+ call ___tls_get_addr@PLT
+ nop;nop
+ leal sh1@dtpoff(%eax), %edx
+ nop;nop
+ leal sh2@dtpoff(%eax), %ecx
+ nop;nop;nop;nop
+
+ /* @gottpoff IE against global var */
+ movl %gs:0, %ecx
+ nop;nop
+ subl sG2@gottpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ /* @gottpoff IE against global var */
+ movl %gs:0, %eax
+ nop;nop
+ subl sG4@gottpoff(%ebx), %eax
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against global var */
+ movl %gs:0, %ecx
+ nop;nop
+ addl sG3@gotntpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against global var */
+ movl %gs:0, %eax
+ nop;nop
+ addl sG4@gotntpoff(%ebx), %eax
+ nop;nop;nop;nop
+
+ /* @gottpoff IE -> LE against global var defined in exec */
+ movl %gs:0, %ecx
+ nop;nop
+ subl sg1@gottpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE -> LE against local var */
+ movl %gs:0, %ecx
+ nop;nop
+ addl sl1@gotntpoff(%ebx), %eax
+ nop;nop;nop;nop
+
+ /* @gottpoff IE -> LE against hidden var */
+ movl %gs:0, %ecx
+ nop;nop
+ subl sh1@gottpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ /* Direct access through %gs */
+
+ /* @gotntpoff IE against global var */
+ movl sG5@gotntpoff(%ebx), %ecx
+ nop;nop
+ movl %gs:(%ecx), %edx
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE->LE against local var */
+ movl sl5@gotntpoff(%ebx), %eax
+ nop;nop
+ movl %gs:(%eax), %edx
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE->LE against hidden var */
+ movl sh5@gotntpoff(%ebx), %edx
+ nop;nop
+ movl %gs:(%edx), %edx
+ nop;nop;nop;nop
+
+ /* GD -> IE because variable is not defined in executable */
+ leal sG1@tlsgd(%ebx), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop;nop
+
+ movl -4(%ebp), %ebx
+ leave
+ ret
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsdesc.dd b/binutils-2.21/ld/testsuite/ld-i386/tlsdesc.dd
new file mode 100644
index 0000000..bca0090
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsdesc.dd
@@ -0,0 +1,391 @@
+#source: tlsdesc.s
+#source: tlspic2.s
+#as: --32
+#ld: -shared -melf_i386
+#objdump: -drj.text
+#target: i?86-*-*
+
+.*: +file format elf32-i386
+
+Disassembly of section .text:
+
+[0-9a-f]+ <fn1>:
+ [0-9a-f]+: 55[ ]+push %ebp
+ [0-9a-f]+: 89 e5[ ]+mov %esp,%ebp
+ [0-9a-f]+: 53[ ]+push %ebx
+ [0-9a-f]+: 50[ ]+push %eax
+ [0-9a-f]+: e8 00 00 00 00[ ]+call [0-9a-f]+ <fn1\+0xa>
+ [0-9a-f]+: 5b[ ]+pop %ebx
+ [0-9a-f]+: 81 c3 9a 13 00 00[ ]+add \$0x[0-9a-f]+,%ebx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GDesc
+ [0-9a-f]+: 8d 83 24 00 00 00[ ]+lea 0x24\(%ebx\),%eax
+# ->R_386_TLS_DESC sg1
+ [0-9a-f]+: ff 10[ ]+call \*\(%eax\)
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE because variable is referenced through @gottpoff too
+ [0-9a-f]+: 8b 83 f8 ff ff ff[ ]+mov -0x8\(%ebx\),%eax
+# ->R_386_TLS_TPOFF sg2
+ [0-9a-f]+: f7 d8[ ]+neg %eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE because variable is referenced through @gotntpoff too
+ [0-9a-f]+: 8b 83 c4 ff ff ff[ ]+mov -0x3c\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sg3
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE because variable is referenced through @gottpoff and
+ [0-9a-f]+: 8b 83 d4 ff ff ff[ ]+mov -0x2c\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sg4
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD against local variable
+ [0-9a-f]+: 8d 83 0c 00 00 00[ ]+lea 0xc\(%ebx\),%eax
+# ->R_386_TLS_DESC sl1
+ [0-9a-f]+: ff 10[ ]+call \*\(%eax\)
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE against local variable referenced through @gottpoff too
+ [0-9a-f]+: 8b 83 b0 ff ff ff[ ]+mov -0x50\(%ebx\),%eax
+# ->R_386_TLS_TPOFF sl2
+ [0-9a-f]+: f7 d8[ ]+neg %eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE against local variable referenced through @gotntpoff
+ [0-9a-f]+: 8b 83 b4 ff ff ff[ ]+mov -0x4c\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sl3
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE against local variable referenced through @gottpoff and
+ [0-9a-f]+: 8b 83 bc ff ff ff[ ]+mov -0x44\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sl4
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD against hidden and local variable
+ [0-9a-f]+: 8d 83 2c 00 00 00[ ]+lea 0x2c\(%ebx\),%eax
+# ->R_386_TLS_DESC sh1
+ [0-9a-f]+: ff 10[ ]+call \*\(%eax\)
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE against hidden and local variable referenced through @gottpoff too
+ [0-9a-f]+: 8b 83 fc ff ff ff[ ]+mov -0x4\(%ebx\),%eax
+# ->R_386_TLS_TPOFF sh2
+ [0-9a-f]+: f7 d8[ ]+neg %eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE against hidden and local variable referenced through @gotntpoff too
+ [0-9a-f]+: 8b 83 c8 ff ff ff[ ]+mov -0x38\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sh3
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE against hidden and local variable referenced through @gottpoff and @gotntpoff too
+ [0-9a-f]+: 8b 83 e8 ff ff ff[ ]+mov -0x18\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sh4
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD against hidden but not local variable
+ [0-9a-f]+: 8d 83 14 00 00 00[ ]+lea 0x14\(%ebx\),%eax
+# ->R_386_TLS_DESC sH1
+ [0-9a-f]+: ff 10[ ]+call \*\(%eax\)
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE against hidden but not local variable referenced through
+ [0-9a-f]+: 8b 83 cc ff ff ff[ ]+mov -0x34\(%ebx\),%eax
+# ->R_386_TLS_TPOFF sH2
+ [0-9a-f]+: f7 d8[ ]+neg %eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE against hidden but not local variable referenced through
+ [0-9a-f]+: 8b 83 ec ff ff ff[ ]+mov -0x14\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sH3
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE against hidden but not local variable referenced through
+ [0-9a-f]+: 8b 83 e0 ff ff ff[ ]+mov -0x20\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sH4
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# LD
+ [0-9a-f]+: 8d 83 1c 00 00 00[ ]+lea 0x1c\(%ebx\),%eax
+# ->R_386_TLS_DESC _TLS_MODULE_BASE_
+ [0-9a-f]+: ff 10[ ]+call \*\(%eax\)
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 8d 90 20 00 00 00[ ]+lea 0x20\(%eax\),%edx
+# sl1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 8d 88 26 00 00 00[ ]+lea 0x26\(%eax\),%ecx
+# sl2+2
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# LD against hidden and local variables
+ [0-9a-f]+: 8d 90 40 00 00 00[ ]+lea 0x40\(%eax\),%edx
+# sh1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 8d 88 47 00 00 00[ ]+lea 0x47\(%eax\),%ecx
+# sh2+3
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# LD against hidden but not local variables
+ [0-9a-f]+: 8d 90 60 00 00 00[ ]+lea 0x60\(%eax\),%edx
+# sH1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 8d 88 65 00 00 00[ ]+lea 0x65\(%eax\),%ecx
+# sH2+1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gottpoff IE against global var
+ [0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 2b 8b f8 ff ff ff[ ]+sub -0x8\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF32 sg2
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gottpoff IE against global var
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 2b 83 d0 ff ff ff[ ]+sub -0x30\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sg4
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE against global var
+ [0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 03 8b c4 ff ff ff[ ]+add -0x3c\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF sg3
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE against global var
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 03 83 d4 ff ff ff[ ]+add -0x2c\(%ebx\),%eax
+# ->R_386_TLS_TPOFF sg4
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gottpoff IE against local var
+ [0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 2b 8b b0 ff ff ff[ ]+sub -0x50\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF32 [0xdcffffff]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gottpoff IE against local var
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 2b 83 b8 ff ff ff[ ]+sub -0x48\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 [0xd4ffffff]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE against local var
+ [0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 03 8b b4 ff ff ff[ ]+add -0x4c\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF [0x28000000]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE against local var
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 03 83 bc ff ff ff[ ]+add -0x44\(%ebx\),%eax
+# ->R_386_TLS_TPOFF [0x2c000000]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gottpoff IE against hidden and local var
+ [0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 2b 8b fc ff ff ff[ ]+sub -0x4\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF32 [0xbcffffff]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gottpoff IE against hidden and local var
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 2b 83 e4 ff ff ff[ ]+sub -0x1c\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 [0xb4ffffff]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE against hidden and local var
+ [0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 03 8b c8 ff ff ff[ ]+add -0x38\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF [0x48000000]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE against hidden and local var
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 03 83 e8 ff ff ff[ ]+add -0x18\(%ebx\),%eax
+# ->R_386_TLS_TPOFF [0x4c000000]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gottpoff IE against hidden but not local var
+ [0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 2b 8b cc ff ff ff[ ]+sub -0x34\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF32 [0x9cffffff]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gottpoff IE against hidden but not local var
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 2b 83 dc ff ff ff[ ]+sub -0x24\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 [0x94ffffff]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE against hidden but not local var
+ [0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 03 8b ec ff ff ff[ ]+add -0x14\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF [0x68000000]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE against hidden but not local var
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 03 83 e0 ff ff ff[ ]+add -0x20\(%ebx\),%eax
+# ->R_386_TLS_TPOFF [0x6c000000]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# Direct access through %gs
+# @gotntpoff IE against global var
+ [0-9a-f]+: 8b 8b d8 ff ff ff[ ]+mov -0x28\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF sg5
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 65 8b 11[ ]+mov %gs:\(%ecx\),%edx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE against local var
+ [0-9a-f]+: 8b 83 c0 ff ff ff[ ]+mov -0x40\(%ebx\),%eax
+# ->R_386_TLS_TPOFF [0x30000000]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 65 8b 10[ ]+mov %gs:\(%eax\),%edx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE against hidden and local var
+ [0-9a-f]+: 8b 93 f0 ff ff ff[ ]+mov -0x10\(%ebx\),%edx
+# ->R_386_TLS_TPOFF [0x50000000]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 65 8b 12[ ]+mov %gs:\(%edx\),%edx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE against hidden but not local var
+ [0-9a-f]+: 8b 8b f4 ff ff ff[ ]+mov -0xc\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF [0x70000000]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 65 8b 11[ ]+mov %gs:\(%ecx\),%edx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 8b 5d fc[ ]+mov -0x4\(%ebp\),%ebx
+ [0-9a-f]+: c9[ ]+leave *
+ [0-9a-f]+: c3[ ]+ret *
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsdesc.rd b/binutils-2.21/ld/testsuite/ld-i386/tlsdesc.rd
new file mode 100644
index 0000000..42edd44
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsdesc.rd
@@ -0,0 +1,149 @@
+#source: tlsdesc.s
+#source: tlspic2.s
+#as: --32
+#ld: -shared -melf_i386
+#readelf: -Ssrl
+#target: i?86-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
+ +\[[ 0-9]+\] \.hash +.*
+ +\[[ 0-9]+\] \.dynsym +.*
+ +\[[ 0-9]+\] \.dynstr +.*
+ +\[[ 0-9]+\] \.rel.dyn +.*
+ +\[[ 0-9]+\] \.rel.plt +.*
+ +\[[ 0-9]+\] \.text +.*
+ +\[[ 0-9]+\] \.tdata +PROGBITS +[0-9a-f]+ [0-9a-f]+ 000060 00 WAT +0 +0 +1
+ +\[[ 0-9]+\] \.tbss +NOBITS +[0-9aa-f]+ [0-9a-f]+ 000020 00 WAT +0 +0 +1
+ +\[[ 0-9]+\] \.dynamic +.*
+ +\[[ 0-9]+\] \.got +.*
+ +\[[ 0-9]+\] \.got.plt +.*
+ +\[[ 0-9]+\] \.shstrtab +.*
+ +\[[ 0-9]+\] \.symtab +.*
+ +\[[ 0-9]+\] \.strtab +.*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x[0-9a-f]+
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +LOAD.*
+ +LOAD.*
+ +DYNAMIC.*
+ +TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x0+60 0x0+80 R +0x1
+
+ Section to Segment mapping:
+ +Segment Sections...
+ +00 +.hash .dynsym .dynstr .rel.dyn .rel.plt .text *
+ +01 +.tdata .dynamic .got .got.plt *
+ +02 +.dynamic *
+ +03 +.tdata .tbss *
+
+Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 20 entries:
+ Offset +Info +Type +Sym.Value +Sym. Name
+[0-9a-f ]+R_386_TLS_TPOFF32
+[0-9a-f ]+R_386_TLS_TPOFF *
+[0-9a-f ]+R_386_TLS_TPOFF32
+[0-9a-f ]+R_386_TLS_TPOFF *
+[0-9a-f ]+R_386_TLS_TPOFF *
+[0-9a-f ]+R_386_TLS_TPOFF *
+[0-9a-f ]+R_386_TLS_TPOFF32
+[0-9a-f ]+R_386_TLS_TPOFF32
+[0-9a-f ]+R_386_TLS_TPOFF *
+[0-9a-f ]+R_386_TLS_TPOFF32
+[0-9a-f ]+R_386_TLS_TPOFF *
+[0-9a-f ]+R_386_TLS_TPOFF *
+[0-9a-f ]+R_386_TLS_TPOFF *
+[0-9a-f ]+R_386_TLS_TPOFF *
+[0-9a-f ]+R_386_TLS_TPOFF32
+[0-9a-f ]+R_386_TLS_TPOFF +0+8 +sg3
+[0-9a-f ]+R_386_TLS_TPOFF32 0+c +sg4
+[0-9a-f ]+R_386_TLS_TPOFF +0+c +sg4
+[0-9a-f ]+R_386_TLS_TPOFF +0+10 +sg5
+[0-9a-f ]+R_386_TLS_TPOFF32 0+4 +sg2
+
+Relocation section '.rel.plt' at offset 0x[0-9a-f]+ contains 5 entries:
+ Offset +Info +Type +Sym.Value +Sym. Name
+[0-9a-f ]+R_386_TLS_DESC * 0+ +sg1
+[0-9a-f ]+R_386_TLS_DESC *
+[0-9a-f ]+R_386_TLS_DESC *
+[0-9a-f ]+R_386_TLS_DESC *
+[0-9a-f ]+R_386_TLS_DESC *
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +[0-9]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND *
+ +[0-9]+: 0+1c +0 +TLS +GLOBAL +DEFAULT +7 sg8
+ +[0-9]+: 0+8 +0 +TLS +GLOBAL +DEFAULT +7 sg3
+ +[0-9]+: 0+c +0 +TLS +GLOBAL +DEFAULT +7 sg4
+ +[0-9]+: 0+10 +0 +TLS +GLOBAL +DEFAULT +7 sg5
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +7 sg1
+ +[0-9]+: [0-9a-f]+ +0 +FUNC +GLOBAL +DEFAULT +6 fn1
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +[0-9]+: 0+4 +0 +TLS +GLOBAL +DEFAULT +7 sg2
+ +[0-9]+: 0+14 +0 +TLS +GLOBAL +DEFAULT +7 sg6
+ +[0-9]+: 0+18 +0 +TLS +GLOBAL +DEFAULT +7 sg7
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +[0-9]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +1 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +2 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +3 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +4 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +5 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +6 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +7 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +8 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +9 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +10 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +11 *
+ +[0-9]+: 0+20 +0 +TLS +LOCAL +DEFAULT +7 sl1
+ +[0-9]+: 0+24 +0 +TLS +LOCAL +DEFAULT +7 sl2
+ +[0-9]+: 0+28 +0 +TLS +LOCAL +DEFAULT +7 sl3
+ +[0-9]+: 0+2c +0 +TLS +LOCAL +DEFAULT +7 sl4
+ +[0-9]+: 0+30 +0 +TLS +LOCAL +DEFAULT +7 sl5
+ +[0-9]+: 0+34 +0 +TLS +LOCAL +DEFAULT +7 sl6
+ +[0-9]+: 0+38 +0 +TLS +LOCAL +DEFAULT +7 sl7
+ +[0-9]+: 0+3c +0 +TLS +LOCAL +DEFAULT +7 sl8
+ +[0-9]+: 0+60 +0 +TLS +LOCAL +DEFAULT +8 sH1
+ +[0-9]+: 0+ +0 +TLS +LOCAL +DEFAULT +7 _TLS_MODULE_BASE_
+ +[0-9]+: [0-9a-f]+ +0 +OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC
+ +[0-9]+: 0+48 +0 +TLS +LOCAL +DEFAULT +7 sh3
+ +[0-9]+: 0+64 +0 +TLS +LOCAL +DEFAULT +8 sH2
+ +[0-9]+: 0+78 +0 +TLS +LOCAL +DEFAULT +8 sH7
+ +[0-9]+: 0+58 +0 +TLS +LOCAL +DEFAULT +7 sh7
+ +[0-9]+: 0+5c +0 +TLS +LOCAL +DEFAULT +7 sh8
+ +[0-9]+: 0+6c +0 +TLS +LOCAL +DEFAULT +8 sH4
+ +[0-9]+: 0+4c +0 +TLS +LOCAL +DEFAULT +7 sh4
+ +[0-9]+: 0+68 +0 +TLS +LOCAL +DEFAULT +8 sH3
+ +[0-9]+: 0+50 +0 +TLS +LOCAL +DEFAULT +7 sh5
+ +[0-9]+: 0+70 +0 +TLS +LOCAL +DEFAULT +8 sH5
+ +[0-9]+: 0+74 +0 +TLS +LOCAL +DEFAULT +8 sH6
+ +[0-9]+: 0+7c +0 +TLS +LOCAL +DEFAULT +8 sH8
+ +[0-9]+: 0+40 +0 +TLS +LOCAL +DEFAULT +7 sh1
+ +[0-9]+: [0-9a-f]+ +0 +OBJECT +LOCAL +DEFAULT +ABS _GLOBAL_OFFSET_TABLE_
+ +[0-9]+: 0+44 +0 +TLS +LOCAL +DEFAULT +7 sh2
+ +[0-9]+: 0+54 +0 +TLS +LOCAL +DEFAULT +7 sh6
+ +[0-9]+: 0+1c +0 +TLS +GLOBAL +DEFAULT +7 sg8
+ +[0-9]+: 0+8 +0 +TLS +GLOBAL +DEFAULT +7 sg3
+ +[0-9]+: 0+c +0 +TLS +GLOBAL +DEFAULT +7 sg4
+ +[0-9]+: 0+10 +0 +TLS +GLOBAL +DEFAULT +7 sg5
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +7 sg1
+ +[0-9]+: [0-9a-f]+ +0 +FUNC +GLOBAL +DEFAULT +6 fn1
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +[0-9]+: 0+4 +0 +TLS +GLOBAL +DEFAULT +7 sg2
+ +[0-9]+: 0+14 +0 +TLS +GLOBAL +DEFAULT +7 sg6
+ +[0-9]+: 0+18 +0 +TLS +GLOBAL +DEFAULT +7 sg7
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsdesc.s b/binutils-2.21/ld/testsuite/ld-i386/tlsdesc.s
new file mode 100644
index 0000000..8377f64
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsdesc.s
@@ -0,0 +1,276 @@
+ .section ".tdata", "awT", @progbits
+ .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
+ .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+ .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+sg1: .long 17
+sg2: .long 18
+sg3: .long 19
+sg4: .long 20
+sg5: .long 21
+sg6: .long 22
+sg7: .long 23
+sg8: .long 24
+sl1: .long 65
+sl2: .long 66
+sl3: .long 67
+sl4: .long 68
+sl5: .long 69
+sl6: .long 70
+sl7: .long 71
+sl8: .long 72
+sh1: .long 257
+sh2: .long 258
+sh3: .long 259
+sh4: .long 260
+sh5: .long 261
+sh6: .long 262
+sh7: .long 263
+sh8: .long 264
+ .text
+ .globl fn1
+ .type fn1,@function
+fn1:
+ pushl %ebp
+ movl %esp, %ebp
+ pushl %ebx
+ pushl %eax
+ call 1f
+1: popl %ebx
+ addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx
+ nop;nop;nop;nop
+
+ /* GD */
+ leal sg1@tlsdesc(%ebx), %eax
+ call *sg1@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* GD -> IE because variable is referenced through @gottpoff too */
+ leal sg2@tlsdesc(%ebx), %eax
+ call *sg2@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* GD -> IE because variable is referenced through @gotntpoff too */
+ leal sg3@tlsdesc(%ebx), %eax
+ call *sg3@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* GD -> IE because variable is referenced through @gottpoff and
+ @gotntpoff too */
+ leal sg4@tlsdesc(%ebx), %eax
+ call *sg4@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* GD against local variable */
+ leal sl1@tlsdesc(%ebx), %eax
+ call *sl1@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* GD -> IE against local variable referenced through @gottpoff too */
+ leal sl2@tlsdesc(%ebx), %eax
+ call *sl2@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* GD -> IE against local variable referenced through @gotntpoff
+ too */
+ leal sl3@tlsdesc(%ebx), %eax
+ call *sl3@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* GD -> IE against local variable referenced through @gottpoff and
+ @gotntpoff too */
+ leal sl4@tlsdesc(%ebx), %eax
+ call *sl4@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* GD against hidden and local variable */
+ leal sh1@tlsdesc(%ebx), %eax
+ call *sh1@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* GD -> IE against hidden and local variable referenced through
+ @gottpoff too */
+ leal sh2@tlsdesc(%ebx), %eax
+ call *sh2@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* GD -> IE against hidden and local variable referenced through
+ @gotntpoff too */
+ leal sh3@tlsdesc(%ebx), %eax
+ call *sh3@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* GD -> IE against hidden and local variable referenced through
+ @gottpoff and @gotntpoff too */
+ leal sh4@tlsdesc(%ebx), %eax
+ call *sh4@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* GD against hidden but not local variable */
+ leal sH1@tlsdesc(%ebx), %eax
+ call *sH1@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* GD -> IE against hidden but not local variable referenced through
+ @gottpoff too */
+ leal sH2@tlsdesc(%ebx), %eax
+ call *sH2@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* GD -> IE against hidden but not local variable referenced through
+ @gotntpoff too */
+ leal sH3@tlsdesc(%ebx), %eax
+ call *sH3@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* GD -> IE against hidden but not local variable referenced through
+ @gottpoff and @gotntpoff too */
+ leal sH4@tlsdesc(%ebx), %eax
+ call *sH4@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* LD */
+ leal _TLS_MODULE_BASE_@tlsdesc(%ebx), %eax
+ call *_TLS_MODULE_BASE_@tlscall(%eax)
+ nop;nop
+ leal sl1@dtpoff(%eax), %edx
+ nop;nop
+ leal 2+sl2@dtpoff(%eax), %ecx
+ nop;nop;nop;nop
+
+ /* LD against hidden and local variables */
+ leal sh1@dtpoff(%eax), %edx
+ nop;nop
+ leal sh2@dtpoff+3(%eax), %ecx
+ nop;nop;nop;nop
+
+ /* LD against hidden but not local variables */
+ leal sH1@dtpoff(%eax), %edx
+ nop;nop
+ leal sH2@dtpoff+1(%eax), %ecx
+ nop;nop
+
+ /* @gottpoff IE against global var */
+ movl %gs:0, %ecx
+ nop;nop
+ subl sg2@gottpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ /* @gottpoff IE against global var */
+ movl %gs:0, %eax
+ nop;nop
+ subl sg4@gottpoff(%ebx), %eax
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against global var */
+ movl %gs:0, %ecx
+ nop;nop
+ addl sg3@gotntpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against global var */
+ movl %gs:0, %eax
+ nop;nop
+ addl sg4@gotntpoff(%ebx), %eax
+ nop;nop;nop;nop
+
+ /* @gottpoff IE against local var */
+ movl %gs:0, %ecx
+ nop;nop
+ subl sl2@gottpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ /* @gottpoff IE against local var */
+ movl %gs:0, %eax
+ nop;nop
+ subl sl4@gottpoff(%ebx), %eax
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against local var */
+ movl %gs:0, %ecx
+ nop;nop
+ addl sl3@gotntpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against local var */
+ movl %gs:0, %eax
+ nop;nop
+ addl sl4@gotntpoff(%ebx), %eax
+ nop;nop;nop;nop
+
+ /* @gottpoff IE against hidden and local var */
+ movl %gs:0, %ecx
+ nop;nop
+ subl sh2@gottpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ /* @gottpoff IE against hidden and local var */
+ movl %gs:0, %eax
+ nop;nop
+ subl sh4@gottpoff(%ebx), %eax
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against hidden and local var */
+ movl %gs:0, %ecx
+ nop;nop
+ addl sh3@gotntpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against hidden and local var */
+ movl %gs:0, %eax
+ nop;nop
+ addl sh4@gotntpoff(%ebx), %eax
+ nop;nop;nop;nop
+
+ /* @gottpoff IE against hidden but not local var */
+ movl %gs:0, %ecx
+ nop;nop
+ subl sH2@gottpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ /* @gottpoff IE against hidden but not local var */
+ movl %gs:0, %eax
+ nop;nop
+ subl sH4@gottpoff(%ebx), %eax
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against hidden but not local var */
+ movl %gs:0, %ecx
+ nop;nop
+ addl sH3@gotntpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against hidden but not local var */
+ movl %gs:0, %eax
+ nop;nop
+ addl sH4@gotntpoff(%ebx), %eax
+ nop;nop;nop;nop
+
+ /* Direct access through %gs */
+
+ /* @gotntpoff IE against global var */
+ movl sg5@gotntpoff(%ebx), %ecx
+ nop;nop
+ movl %gs:(%ecx), %edx
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against local var */
+ movl sl5@gotntpoff(%ebx), %eax
+ nop;nop
+ movl %gs:(%eax), %edx
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against hidden and local var */
+ movl sh5@gotntpoff(%ebx), %edx
+ nop;nop
+ movl %gs:(%edx), %edx
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against hidden but not local var */
+ movl sH5@gotntpoff(%ebx), %ecx
+ nop;nop
+ movl %gs:(%ecx), %edx
+ nop;nop;nop;nop
+
+ movl -4(%ebp), %ebx
+ leave
+ ret
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsdesc.sd b/binutils-2.21/ld/testsuite/ld-i386/tlsdesc.sd
new file mode 100644
index 0000000..656c409
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsdesc.sd
@@ -0,0 +1,20 @@
+#source: tlsdesc.s
+#source: tlspic2.s
+#as: --32
+#ld: -shared -melf_i386
+#objdump: -s -j.got -j.got.plt
+#target: i?86-*-*
+
+.*: file format elf32-i386
+
+Contents of section \.got:
+ [0-9a-f]+ dcffffff 28000000 d4ffffff 2c000000 .*
+ [0-9a-f]+ 30000000 00000000 48000000 9cffffff .*
+ [0-9a-f]+ 00000000 00000000 00000000 94ffffff .*
+ [0-9a-f]+ 6c000000 b4ffffff 4c000000 68000000 .*
+ [0-9a-f]+ 50000000 70000000 00000000 bcffffff .*
+Contents of section \.got\.plt:
+ [0-9a-f]+ b0150000 00000000 00000000 00000000 .*
+ [0-9a-f]+ 20000000 00000000 60000000 00000000 .*
+ [0-9a-f]+ 00000000 00000000 00000000 00000000 .*
+ [0-9a-f]+ 40000000 +.*
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsdesc.td b/binutils-2.21/ld/testsuite/ld-i386/tlsdesc.td
new file mode 100644
index 0000000..f3612b3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsdesc.td
@@ -0,0 +1,16 @@
+#source: tlsdesc.s
+#source: tlspic2.s
+#as: --32
+#ld: -shared -melf_i386
+#objdump: -sj.tdata
+#target: i?86-*-*
+
+.*: file format elf32-i386
+
+Contents of section \.tdata:
+ [0-9a-f]+ 11000000 12000000 13000000 14000000 .*
+ [0-9a-f]+ 15000000 16000000 17000000 18000000 .*
+ [0-9a-f]+ 41000000 42000000 43000000 44000000 .*
+ [0-9a-f]+ 45000000 46000000 47000000 48000000 .*
+ [0-9a-f]+ 01010000 02010000 03010000 04010000 .*
+ [0-9a-f]+ 05010000 06010000 07010000 08010000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsg.s b/binutils-2.21/ld/testsuite/ld-i386/tlsg.s
new file mode 100644
index 0000000..b8e1a5d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsg.s
@@ -0,0 +1,12 @@
+ .section .tbss,"awT",@nobits
+ .align 4
+ .skip 24
+ .type a,@object
+ .size a,4
+a:
+ .zero 4
+ .text
+ .globl _start
+_start:
+ .section .debug_foobar
+ .long a@dtpoff
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsg.sd b/binutils-2.21/ld/testsuite/ld-i386/tlsg.sd
new file mode 100644
index 0000000..d794762
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsg.sd
@@ -0,0 +1,10 @@
+#source: tlsg.s
+#as: --32
+#ld: -melf_i386
+#objdump: -sj.debug_foobar
+#target: i?86-*-*
+
+.*: +file format elf32-i386
+
+Contents of section .debug_foobar:
+ 0+ 18000000 +.*
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsgd1.dd b/binutils-2.21/ld/testsuite/ld-i386/tlsgd1.dd
new file mode 100644
index 0000000..9a33132
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsgd1.dd
@@ -0,0 +1,16 @@
+#source: tlsgd1.s
+#as: --32
+#ld: -melf_i386 tmpdir/tlsgd1
+#objdump: -drw
+#target: i?86-*-linux*
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+[a-f0-9]+ <_start>:
+[ ]*[a-f0-9]+: 65 a1 00 00 00 00 mov %gs:0x0,%eax
+[ ]*[a-f0-9]+: 81 e8 04 00 00 00 sub \$0x4,%eax
+[ ]*[a-f0-9]+: 65 a1 00 00 00 00 mov %gs:0x0,%eax
+[ ]*[a-f0-9]+: 81 e8 04 00 00 00 sub \$0x4,%eax
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsgd1.s b/binutils-2.21/ld/testsuite/ld-i386/tlsgd1.s
new file mode 100644
index 0000000..552ca09
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsgd1.s
@@ -0,0 +1,15 @@
+ .text
+ .globl _start
+_start:
+ leal foo@TLSGD(,%ebx,1), %eax
+ call ___tls_get_addr
+ leal foo@TLSGD(%ebx), %eax
+ call ___tls_get_addr
+ nop
+ .globl foo
+ .section .tdata,"awT",@progbits
+ .align 4
+ .type foo, @object
+ .size foo, 4
+foo:
+ .long 100
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsgd2.d b/binutils-2.21/ld/testsuite/ld-i386/tlsgd2.d
new file mode 100644
index 0000000..136a8fa
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsgd2.d
@@ -0,0 +1,4 @@
+#name: TLS GD->LE transition check
+#as: --32
+#ld: -melf_i386
+#error: .*TLS transition from R_386_TLS_GD to R_386_TLS_LE_32 against `foo'.*failed.*
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsgd2.s b/binutils-2.21/ld/testsuite/ld-i386/tlsgd2.s
new file mode 100644
index 0000000..29d9339
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsgd2.s
@@ -0,0 +1,11 @@
+ .text
+ .globl _start
+_start:
+ leal foo@TLSGD(%ebx), %eax
+ call ___tls_get_addr
+ .section .tdata,"awT",@progbits
+ .align 4
+ .type foo, @object
+ .size foo, 4
+foo:
+ .long 100
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsgdesc.dd b/binutils-2.21/ld/testsuite/ld-i386/tlsgdesc.dd
new file mode 100644
index 0000000..25659de
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsgdesc.dd
@@ -0,0 +1,156 @@
+#source: tlsgdesc.s
+#as: --32
+#ld: -shared -melf_i386
+#objdump: -drj.text
+#target: i?86-*-*
+
+.*: +file format elf32-i386
+
+Disassembly of section .text:
+
+[0-9a-f]+ <fc1>:
+ [0-9a-f]+: 55[ ]+push %ebp
+ [0-9a-f]+: 89 e5[ ]+mov %esp,%ebp
+ [0-9a-f]+: 53[ ]+push %ebx
+ [0-9a-f]+: 50[ ]+push %eax
+ [0-9a-f]+: e8 00 00 00 00[ ]+call [0-9a-f]+ <.*>
+ [0-9a-f]+: 5b[ ]+pop %ebx
+ [0-9a-f]+: 81 c3 be 11 00 00[ ]+add \$0x[0-9a-f]+,%ebx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gottpoff IE against global var
+ [0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 2b 8b e0 ff ff ff[ ]+sub -0x20\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF32 sG3
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE against global var
+ [0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 03 8b f0 ff ff ff[ ]+add -0x10\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF sG4
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD
+ [0-9a-f]+: 8d 04 1d f8 ff ff ff[ ]+lea -0x8\(,%ebx,1\),%eax
+# ->R_386_TLS_DTPMOD32 sG1
+ [0-9a-f]+: e8 a9 ff ff ff[ ]+call [0-9a-f]+ <___tls_get_addr@plt>
+# ->R_386_JUMP_SLOT ___tls_get_addr
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 8d 83 18 00 00 00[ ]+lea 0x18\(%ebx\),%eax
+# ->R_386_TLS_DESC sG1
+ [0-9a-f]+: ff 10[ ]+call \*\(%eax\)
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 8d 83 10 00 00 00[ ]+lea 0x10\(%ebx\),%eax
+# ->R_386_TLS_DESC sG2
+ [0-9a-f]+: ff 10[ ]+call \*\(%eax\)
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 8d 04 1d e8 ff ff ff[ ]+lea -0x18\(,%ebx,1\),%eax
+# ->R_386_TLS_DTPMOD32 sG2
+ [0-9a-f]+: e8 81 ff ff ff[ ]+call [0-9a-f]+ <___tls_get_addr@plt>
+# ->R_386_JUMP_SLOT ___tls_get_addr
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE because variable is referenced through @gottpoff too
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 2b 83 e0 ff ff ff[ ]+sub -0x20\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sG3
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 8b 83 e0 ff ff ff[ ]+mov -0x20\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sG3
+ [0-9a-f]+: f7 d8[ ]+neg %eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE because variable is referenced through @gotntpoff too
+ [0-9a-f]+: 8b 83 f0 ff ff ff[ ]+mov -0x10\(%ebx\),%eax
+# ->R_386_TLS_TPOFF sG4
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 03 83 f0 ff ff ff[ ]+add -0x10\(%ebx\),%eax
+# ->R_386_TLS_TPOFF sG4
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE because variable is referenced through @gotntpoff too
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 03 83 e4 ff ff ff[ ]+add -0x1c\(%ebx\),%eax
+# ->R_386_TLS_TPOFF sG5
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 8b 83 e4 ff ff ff[ ]+mov -0x1c\(%ebx\),%eax
+# ->R_386_TLS_TPOFF sG5
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE because variable is referenced through @gottpoff too
+ [0-9a-f]+: 8b 83 f4 ff ff ff[ ]+mov -0xc\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sG6
+ [0-9a-f]+: f7 d8[ ]+neg %eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 2b 83 f4 ff ff ff[ ]+sub -0xc\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sG6
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE against global var
+ [0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 03 8b e4 ff ff ff[ ]+add -0x1c\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF sG5
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gottpoff IE against global var
+ [0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 2b 8b f4 ff ff ff[ ]+sub -0xc\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF32 sG6
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 8b 5d fc[ ]+mov -0x4\(%ebp\),%ebx
+ [0-9a-f]+: c9[ ]+leave *
+ [0-9a-f]+: c3[ ]+ret *
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsgdesc.rd b/binutils-2.21/ld/testsuite/ld-i386/tlsgdesc.rd
new file mode 100644
index 0000000..3a224a2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsgdesc.rd
@@ -0,0 +1,103 @@
+#source: tlsgdesc.s
+#as: --32
+#ld: -shared -melf_i386
+#readelf: -Ssrl
+#target: i?86-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
+ +\[[ 0-9]+\] \.hash +.*
+ +\[[ 0-9]+\] \.dynsym +.*
+ +\[[ 0-9]+\] \.dynstr +.*
+ +\[[ 0-9]+\] \.rel.dyn +.*
+ +\[[ 0-9]+\] \.rel.plt +.*
+ +\[[ 0-9]+\] \.plt +.*
+ +\[[ 0-9]+\] \.text +.*
+ +\[[ 0-9]+\] \.dynamic +.*
+ +\[[ 0-9]+\] \.got +.*
+ +\[[ 0-9]+\] \.got.plt +.*
+ +\[[ 0-9]+\] \.shstrtab +.*
+ +\[[ 0-9]+\] \.symtab +.*
+ +\[[ 0-9]+\] \.strtab +.*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x[0-9a-f]+
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +LOAD.*
+ +LOAD.*
+ +DYNAMIC.*
+
+ Section to Segment mapping:
+ +Segment Sections...
+ +00 +.hash .dynsym .dynstr .rel.dyn .rel.plt .plt .text *
+ +01 +.dynamic .got .got.plt *
+ +02 +.dynamic *
+
+Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 8 entries:
+ Offset +Info +Type +Sym.Value +Sym. Name
+[0-9a-f ]+R_386_TLS_TPOFF32 0+ +sG3
+[0-9a-f ]+R_386_TLS_TPOFF +0+ +sG5
+[0-9a-f ]+R_386_TLS_DTPMOD3 0+ +sG2
+[0-9a-f ]+R_386_TLS_DTPOFF3 0+ +sG2
+[0-9a-f ]+R_386_TLS_TPOFF +0+ +sG4
+[0-9a-f ]+R_386_TLS_TPOFF32 0+ +sG6
+[0-9a-f ]+R_386_TLS_DTPMOD3 0+ +sG1
+[0-9a-f ]+R_386_TLS_DTPOFF3 0+ +sG1
+
+Relocation section '.rel.plt' at offset 0x[0-9a-f]+ contains 3 entries:
+ Offset +Info +Type +Sym.Value +Sym. Name
+[0-9a-f ]+R_386_JUMP_SLOT +0+ +___tls_get_addr
+[0-9a-f ]+R_386_TLS_DESC +0+ +sG1
+[0-9a-f ]+R_386_TLS_DESC +0+ +sG2
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +[0-9]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND *
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG3
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG5
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG2
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG4
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG6
+ +[0-9]+: [0-9a-f]+ +0 +FUNC +GLOBAL +DEFAULT +7 fc1
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG1
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+ +[0-9]+: 0+ +0 +NOTYPE +GLOBAL +DEFAULT +UND ___tls_get_addr
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +[0-9]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +1 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +2 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +3 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +4 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +5 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +6 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +7 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +8 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +9 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +10 *
+ +[0-9]+: [0-9a-f]+ +0 +OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC
+ +[0-9]+: [0-9a-f]+ +0 +OBJECT +LOCAL +DEFAULT +ABS _GLOBAL_OFFSET_TABLE_
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG3
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG5
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG2
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG4
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG6
+ +[0-9]+: [0-9a-f]+ +0 +FUNC +GLOBAL +DEFAULT +7 fc1
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG1
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+ +[0-9]+: 0+ +0 +NOTYPE +GLOBAL +DEFAULT +UND ___tls_get_addr
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsgdesc.s b/binutils-2.21/ld/testsuite/ld-i386/tlsgdesc.s
new file mode 100644
index 0000000..9502a10
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsgdesc.s
@@ -0,0 +1,100 @@
+ .text
+ .globl fc1
+ .type fc1,@function
+fc1:
+ pushl %ebp
+ movl %esp, %ebp
+ pushl %ebx
+ pushl %eax
+ call 1f
+1: popl %ebx
+ addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx
+ nop;nop;nop;nop
+
+ /* @gottpoff IE against global var */
+ movl %gs:0, %ecx
+ nop;nop
+ subl sG3@gottpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against global var */
+ movl %gs:0, %ecx
+ nop;nop
+ addl sG4@gotntpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ /* GD */
+ leal sG1@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD */
+ leal sG1@tlsdesc(%ebx), %eax
+ call *sG1@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* GD */
+ leal sG2@tlsdesc(%ebx), %eax
+ call *sG2@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* GD */
+ leal sG2@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> IE tpoff */
+ leal sG3@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> IE tpoff */
+ leal sG3@tlsdesc(%ebx), %eax
+ call *sG3@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* GD -> IE ntpoff */
+ leal sG4@tlsdesc(%ebx), %eax
+ call *sG4@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* GD -> IE ntpoff */
+ leal sG4@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> IE ntpoff */
+ leal sG5@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> IE ntpoff */
+ leal sG5@tlsdesc(%ebx), %eax
+ call *sG5@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* GD -> IE tpoff */
+ leal sG6@tlsdesc(%ebx), %eax
+ call *sG6@tlscall(%eax)
+ nop;nop;nop;nop
+
+ /* GD -> IE tpoff */
+ leal sG6@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against global var */
+ movl %gs:0, %ecx
+ nop;nop
+ addl sG5@gotntpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ /* @gottpoff IE against global var */
+ movl %gs:0, %ecx
+ nop;nop
+ subl sG6@gottpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ movl -4(%ebp), %ebx
+ leave
+ ret
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsie1.dd b/binutils-2.21/ld/testsuite/ld-i386/tlsie1.dd
new file mode 100644
index 0000000..2cebc70
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsie1.dd
@@ -0,0 +1,18 @@
+#source: tlsie1.s
+#as: --32
+#ld: -melf_i386 tmpdir/tlsld1
+#objdump: -drw
+#target: i?86-*-linux*
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+[a-f0-9]+ <_start>:
+[ ]*[a-f0-9]+: 81 c1 fc ff ff ff add \$0xfffffffc,%ecx
+[ ]*[a-f0-9]+: 81 c1 fc ff ff ff add \$0xfffffffc,%ecx
+[ ]*[a-f0-9]+: c7 c0 fc ff ff ff mov \$0xfffffffc,%eax
+[ ]*[a-f0-9]+: c7 c1 fc ff ff ff mov \$0xfffffffc,%ecx
+[ ]*[a-f0-9]+: b8 fc ff ff ff mov \$0xfffffffc,%eax
+[ ]*[a-f0-9]+: c7 c1 fc ff ff ff mov \$0xfffffffc,%ecx
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsie1.s b/binutils-2.21/ld/testsuite/ld-i386/tlsie1.s
new file mode 100644
index 0000000..d4ad569
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsie1.s
@@ -0,0 +1,16 @@
+ .text
+ .globl _start
+_start:
+ addl foo@gotntpoff(%ebx), %ecx
+ addl foo@indntpoff, %ecx
+ movl foo@gotntpoff(%ebx), %eax
+ movl foo@gotntpoff(%ebx), %ecx
+ movl foo@indntpoff, %eax
+ movl foo@indntpoff, %ecx
+ .globl foo
+ .section .tdata,"awT",@progbits
+ .align 4
+ .type foo, @object
+ .size foo, 4
+foo:
+ .long 100
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsie2.d b/binutils-2.21/ld/testsuite/ld-i386/tlsie2.d
new file mode 100644
index 0000000..ebb85fd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsie2.d
@@ -0,0 +1,4 @@
+#name: TLS IE->LE transition check (R_386_TLS_GOTIE with %eax)
+#as: --32
+#ld: -melf_i386
+#error: .*TLS transition from R_386_TLS_GOTIE to R_386_TLS_LE_32 against `foo'.*failed.*
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsie2.s b/binutils-2.21/ld/testsuite/ld-i386/tlsie2.s
new file mode 100644
index 0000000..72df617
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsie2.s
@@ -0,0 +1,12 @@
+ .text
+ .globl _start
+_start:
+ leal foo@gotntpoff(%ebx), %eax
+ movl (%eax), %eax
+ .globl foo
+ .section .tdata,"awT",@progbits
+ .align 4
+ .type foo, @object
+ .size foo, 4
+foo:
+ .long 100
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsie3.d b/binutils-2.21/ld/testsuite/ld-i386/tlsie3.d
new file mode 100644
index 0000000..d993f30
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsie3.d
@@ -0,0 +1,4 @@
+#name: TLS IE->LE transition check (R_386_TLS_GOTIE)
+#as: --32
+#ld: -melf_i386
+#error: .*TLS transition from R_386_TLS_GOTIE to R_386_TLS_LE_32 against `foo'.*failed.*
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsie3.s b/binutils-2.21/ld/testsuite/ld-i386/tlsie3.s
new file mode 100644
index 0000000..865156d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsie3.s
@@ -0,0 +1,12 @@
+ .text
+ .globl _start
+_start:
+ leal foo@gotntpoff(%ebx), %ecx
+ movl (%ecx), %ecx
+ .globl foo
+ .section .tdata,"awT",@progbits
+ .align 4
+ .type foo, @object
+ .size foo, 4
+foo:
+ .long 100
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsie4.d b/binutils-2.21/ld/testsuite/ld-i386/tlsie4.d
new file mode 100644
index 0000000..3ca8fdd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsie4.d
@@ -0,0 +1,4 @@
+#name: TLS IE->LE transition check (R_386_TLS_IE with %eax)
+#as: --32
+#ld: -melf_i386
+#error: .*TLS transition from R_386_TLS_IE to R_386_TLS_LE_32 against `foo'.*failed.*
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsie4.s b/binutils-2.21/ld/testsuite/ld-i386/tlsie4.s
new file mode 100644
index 0000000..3469f29
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsie4.s
@@ -0,0 +1,12 @@
+ .text
+ .globl _start
+_start:
+ leal foo@indntpoff(%ebx), %eax
+ movl (%eax), %eax
+ .globl foo
+ .section .tdata,"awT",@progbits
+ .align 4
+ .type foo, @object
+ .size foo, 4
+foo:
+ .long 100
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsie5.d b/binutils-2.21/ld/testsuite/ld-i386/tlsie5.d
new file mode 100644
index 0000000..3febeb1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsie5.d
@@ -0,0 +1,4 @@
+#name: TLS IE->LE transition check (R_386_TLS_IE)
+#as: --32
+#ld: -melf_i386
+#error: .*TLS transition from R_386_TLS_IE to R_386_TLS_LE_32 against `foo'.*failed.*
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsie5.s b/binutils-2.21/ld/testsuite/ld-i386/tlsie5.s
new file mode 100644
index 0000000..affee31
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsie5.s
@@ -0,0 +1,12 @@
+ .text
+ .globl _start
+_start:
+ leal foo@indntpoff, %ecx
+ movl (%ecx), %ecx
+ .globl foo
+ .section .tdata,"awT",@progbits
+ .align 4
+ .type foo, @object
+ .size foo, 4
+foo:
+ .long 100
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsindntpoff.dd b/binutils-2.21/ld/testsuite/ld-i386/tlsindntpoff.dd
new file mode 100644
index 0000000..db20de1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsindntpoff.dd
@@ -0,0 +1,16 @@
+#source: tlsindntpoff.s
+#as: --32
+#ld: -melf_i386
+#objdump: -drj.text
+#target: i?86-*-*
+
+.*: +file format elf32-i386
+
+Disassembly of section .text:
+
+[0-9a-f]+000 <_start>:
+ [0-9a-f]+000: 39 d8[ ]+cmp %ebx,%eax
+ [0-9a-f]+002: 73 08[ ]+jae [0-9a-f]+00c <_start\+0xc>
+ [0-9a-f]+004: b8 fc ff ff ff[ ]+mov \$0xfffffffc,%eax
+ [0-9a-f]+009: 65 8b 00[ ]+mov %gs:\(%eax\),%eax
+ [0-9a-f]+00c: c3[ ]+ret *
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsindntpoff.s b/binutils-2.21/ld/testsuite/ld-i386/tlsindntpoff.s
new file mode 100644
index 0000000..4bc93f6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsindntpoff.s
@@ -0,0 +1,19 @@
+ /* Force .got aligned to 4K, so it very likely gets at 0x804a100
+ (0x60 bytes .tdata and 0xa0 bytes .dynamic) */
+ .data
+ .balign 4096
+ .section ".tdata", "awT", @progbits
+ .globl foo
+foo: .long 27
+
+ /* Force .text aligned to 4K, so it very likely gets at 0x8049000. */
+ .text
+ .balign 4096
+ .globl _start
+ .type _start,@function
+_start:
+ cmp %ebx, %eax
+ jae 1f
+ movl foo@indntpoff, %eax
+ movl %gs:(%eax), %eax
+1: ret
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsld1.dd b/binutils-2.21/ld/testsuite/ld-i386/tlsld1.dd
new file mode 100644
index 0000000..52ab10c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsld1.dd
@@ -0,0 +1,15 @@
+#source: tlsld1.s
+#as: --32
+#ld: -melf_i386 tmpdir/tlsld1
+#objdump: -drw
+#target: i?86-*-linux*
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+[a-f0-9]+ <_start>:
+[ ]*[a-f0-9]+: 65 a1 00 00 00 00 mov %gs:0x0,%eax
+[ ]*[a-f0-9]+: 90 nop
+[ ]*[a-f0-9]+: 8d 74 26 00 lea 0x0\(%esi,%eiz,1\),%esi
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsld1.s b/binutils-2.21/ld/testsuite/ld-i386/tlsld1.s
new file mode 100644
index 0000000..5d57e35
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsld1.s
@@ -0,0 +1,12 @@
+ .text
+ .globl _start
+_start:
+ leal foo@TLSLDM(%ebx), %eax
+ call ___tls_get_addr
+ .globl foo
+ .section .tdata,"awT",@progbits
+ .align 4
+ .type foo, @object
+ .size foo, 4
+foo:
+ .long 100
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlslib.s b/binutils-2.21/ld/testsuite/ld-i386/tlslib.s
new file mode 100644
index 0000000..22e1f8d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlslib.s
@@ -0,0 +1,17 @@
+ .section ".tdata", "awT", @progbits
+ .globl sG1, sG2, sG3, sG4, sG5, sG6, sG7, sG8
+sG1: .long 513
+sG2: .long 514
+sG3: .long 515
+sG4: .long 516
+sG5: .long 517
+sG6: .long 518
+sG7: .long 519
+sG8: .long 520
+
+ .text
+ /* Dummy. */
+ .globl ___tls_get_addr
+ .type ___tls_get_addr,@function
+___tls_get_addr:
+ ret
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsnopic.dd b/binutils-2.21/ld/testsuite/ld-i386/tlsnopic.dd
new file mode 100644
index 0000000..a0a8853
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsnopic.dd
@@ -0,0 +1,161 @@
+#source: tlsnopic1.s
+#source: tlsnopic2.s
+#as: --32
+#ld: -shared -melf_i386
+#objdump: -drj.text
+#target: i?86-*-*
+
+.*: +file format elf32-i386
+
+Disassembly of section .text:
+
+0+1000 <fn3>:
+ 1000: 55[ ]+push %ebp
+ 1001: 89 e5[ ]+mov %esp,%ebp
+# @indntpoff IE against global var
+ 1003: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 1009: 90[ ]+nop *
+ 100a: 90[ ]+nop *
+ 100b: 03 05 7c 21 00 00[ ]+add 0x217c,%eax
+# ->R_386_TLS_TPOFF sg1
+ 1011: 90[ ]+nop *
+ 1012: 90[ ]+nop *
+ 1013: 90[ ]+nop *
+ 1014: 90[ ]+nop *
+# @indntpoff direct %gs access IE against global var
+ 1015: 8b 15 80 21 00 00[ ]+mov 0x2180,%edx
+# ->R_386_TLS_TPOFF sg2
+ 101b: 90[ ]+nop *
+ 101c: 90[ ]+nop *
+ 101d: 65 8b 02[ ]+mov %gs:\(%edx\),%eax
+ 1020: 90[ ]+nop *
+ 1021: 90[ ]+nop *
+ 1022: 90[ ]+nop *
+ 1023: 90[ ]+nop *
+# @indntpoff IE against hidden var
+ 1024: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 102a: 90[ ]+nop *
+ 102b: 90[ ]+nop *
+ 102c: 03 05 84 21 00 00[ ]+add 0x2184,%eax
+# ->R_386_TLS_TPOFF [0x14000000]
+ 1032: 90[ ]+nop *
+ 1033: 90[ ]+nop *
+ 1034: 90[ ]+nop *
+ 1035: 90[ ]+nop *
+# @indntpoff direct %gs access IE against hidden var
+ 1036: 8b 15 88 21 00 00[ ]+mov 0x2188,%edx
+# ->R_386_TLS_TPOFF [0x18000000]
+ 103c: 90[ ]+nop *
+ 103d: 90[ ]+nop *
+ 103e: 65 8b 02[ ]+mov %gs:\(%edx\),%eax
+ 1041: 90[ ]+nop *
+ 1042: 90[ ]+nop *
+ 1043: 90[ ]+nop *
+ 1044: 90[ ]+nop *
+# @indntpoff IE against local var
+ 1045: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 104b: 90[ ]+nop *
+ 104c: 90[ ]+nop *
+ 104d: 03 05 74 21 00 00[ ]+add 0x2174,%eax
+# ->R_386_TLS_TPOFF [0x00000000]
+ 1053: 90[ ]+nop *
+ 1054: 90[ ]+nop *
+ 1055: 90[ ]+nop *
+ 1056: 90[ ]+nop *
+# @indntpoff direct %gs access IE against local var
+ 1057: 8b 15 78 21 00 00[ ]+mov 0x2178,%edx
+# ->R_386_TLS_TPOFF [0x04000000]
+ 105d: 90[ ]+nop *
+ 105e: 90[ ]+nop *
+ 105f: 65 8b 02[ ]+mov %gs:\(%edx\),%eax
+ 1062: 90[ ]+nop *
+ 1063: 90[ ]+nop *
+ 1064: 90[ ]+nop *
+ 1065: 90[ ]+nop *
+# LE @tpoff, global var
+ 1066: ba fd ff ff ff[ ]+mov \$0xfffffffd,%edx
+# R_386_TLS_TPOFF32 sg3
+ 106b: 90[ ]+nop *
+ 106c: 90[ ]+nop *
+ 106d: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 1073: 90[ ]+nop *
+ 1074: 90[ ]+nop *
+ 1075: 29 d0[ ]+sub %edx,%eax
+ 1077: 90[ ]+nop *
+ 1078: 90[ ]+nop *
+ 1079: 90[ ]+nop *
+ 107a: 90[ ]+nop *
+# LE @tpoff, local var
+ 107b: b8 f7 ff ff ff[ ]+mov \$0xfffffff7,%eax
+# R_386_TLS_TPOFF32
+ 1080: 90[ ]+nop *
+ 1081: 90[ ]+nop *
+ 1082: 65 8b 15 00 00 00 00 mov %gs:0x0,%edx
+ 1089: 90[ ]+nop *
+ 108a: 90[ ]+nop *
+ 108b: 29 c2[ ]+sub %eax,%edx
+ 108d: 90[ ]+nop *
+ 108e: 90[ ]+nop *
+ 108f: 90[ ]+nop *
+ 1090: 90[ ]+nop *
+# LE @ntpoff, global var
+ 1091: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 1097: 90[ ]+nop *
+ 1098: 90[ ]+nop *
+ 1099: 8d 90 02 00 00 00[ ]+lea 0x2\(%eax\),%edx
+# R_386_TLS_TPOFF sg4
+ 109f: 90[ ]+nop *
+ 10a0: 90[ ]+nop *
+ 10a1: 90[ ]+nop *
+ 10a2: 90[ ]+nop *
+# LE @ntpoff, hidden var, non-canonical sequence
+ 10a3: b8 1c 00 00 00[ ]+mov \$0x1c,%eax
+# R_386_TLS_TPOFF
+ 10a8: 90[ ]+nop *
+ 10a9: 90[ ]+nop *
+ 10aa: 65 8b 15 00 00 00 00 mov %gs:0x0,%edx
+ 10b1: 90[ ]+nop *
+ 10b2: 90[ ]+nop *
+ 10b3: 01 c2[ ]+add %eax,%edx
+ 10b5: 90[ ]+nop *
+ 10b6: 90[ ]+nop *
+ 10b7: 90[ ]+nop *
+ 10b8: 90[ ]+nop *
+# LE @ntpoff, local var, non-canonical sequence
+ 10b9: 65 8b 15 00 00 00 00 mov %gs:0x0,%edx
+ 10c0: 90[ ]+nop *
+ 10c1: 90[ ]+nop *
+ 10c2: 81 c2 0d 00 00 00[ ]+add \$0xd,%edx
+# R_386_TLS_TPOFF
+ 10c8: 90[ ]+nop *
+ 10c9: 90[ ]+nop *
+ 10ca: 90[ ]+nop *
+ 10cb: 90[ ]+nop *
+# Direct %gs access
+# LE @ntpoff, global var
+ 10cc: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+# R_386_TLS_TPOFF sg5
+ 10d2: 90[ ]+nop *
+ 10d3: 90[ ]+nop *
+ 10d4: 90[ ]+nop *
+ 10d5: 90[ ]+nop *
+# LE @ntpoff, local var
+ 10d6: 65 8b 15 13 00 00 00 mov %gs:0x13,%edx
+# R_386_TLS_TPOFF
+ 10dd: 90[ ]+nop *
+ 10de: 90[ ]+nop *
+ 10df: 90[ ]+nop *
+ 10e0: 90[ ]+nop *
+# LE @ntpoff, hidden var
+ 10e1: 65 8b 15 21 00 00 00 mov %gs:0x21,%edx
+# R_386_TLS_TPOFF
+ 10e8: 90[ ]+nop *
+ 10e9: 90[ ]+nop *
+ 10ea: 90[ ]+nop *
+ 10eb: 90[ ]+nop *
+ 10ec: 8b 5d fc[ ]+mov -0x4\(%ebp\),%ebx
+ 10ef: c9[ ]+leave *
+ 10f0: c3[ ]+ret *
+ 10f1: 90[ ]+nop *
+ 10f2: 90[ ]+nop *
+ 10f3: 90[ ]+nop *
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsnopic.rd b/binutils-2.21/ld/testsuite/ld-i386/tlsnopic.rd
new file mode 100644
index 0000000..2590a9f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsnopic.rd
@@ -0,0 +1,116 @@
+#source: tlsnopic1.s
+#source: tlsnopic2.s
+#as: --32
+#ld: -shared -melf_i386
+#readelf: -Ssrl
+#target: i?86-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
+ +\[[ 0-9]+\] \.hash +.*
+ +\[[ 0-9]+\] \.dynsym +.*
+ +\[[ 0-9]+\] \.dynstr +.*
+ +\[[ 0-9]+\] \.rel.dyn +.*
+ +\[[ 0-9]+\] \.text +PROGBITS +0+1000 .*
+ +\[[ 0-9]+\] \.tbss +NOBITS +[0-9a-f]+ [0-9a-f]+ 000024 00 WAT +0 +0 +1
+ +\[[ 0-9]+\] \.dynamic +DYNAMIC +0+20f4 .*
+ +\[[ 0-9]+\] \.got +PROGBITS +0+2174 .*
+ +\[[ 0-9]+\] \.got.plt +PROGBITS +0+218c .*
+ +\[[ 0-9]+\] \.shstrtab +.*
+ +\[[ 0-9]+\] \.symtab +.*
+ +\[[ 0-9]+\] \.strtab +.*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x1000
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +LOAD.*
+ +LOAD.*
+ +DYNAMIC.*
+ +TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x0+ 0x0+24 R +0x1
+
+ Section to Segment mapping:
+ +Segment Sections...
+ +00 +.hash .dynsym .dynstr .rel.dyn .text *
+ +01 +.dynamic .got .got.plt *
+ +02 +.dynamic *
+ +03 +.tbss *
+
+Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 20 entries:
+ Offset +Info +Type +Sym.Value +Sym. Name
+[0-9a-f ]+R_386_RELATIVE +
+[0-9a-f ]+R_386_RELATIVE +
+[0-9a-f ]+R_386_RELATIVE +
+[0-9a-f ]+R_386_RELATIVE +
+[0-9a-f ]+R_386_RELATIVE +
+[0-9a-f ]+R_386_RELATIVE +
+[0-9a-f ]+R_386_TLS_TPOFF32 0+ +sg3
+[0-9a-f ]+R_386_TLS_TPOFF32
+[0-9a-f ]+R_386_TLS_TPOFF +
+[0-9a-f ]+R_386_TLS_TPOFF +
+[0-9a-f ]+R_386_TLS_TPOFF +
+[0-9a-f ]+R_386_TLS_TPOFF +
+[0-9a-f ]+R_386_TLS_TPOFF +
+[0-9a-f ]+R_386_TLS_TPOFF +
+[0-9a-f ]+R_386_TLS_TPOFF +
+[0-9a-f ]+R_386_TLS_TPOFF +
+[0-9a-f ]+R_386_TLS_TPOFF +0+ +sg4
+[0-9a-f ]+R_386_TLS_TPOFF +0+ +sg5
+[0-9a-f ]+R_386_TLS_TPOFF +0+ +sg1
+[0-9a-f ]+R_386_TLS_TPOFF +0+ +sg2
+
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +[0-9]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND *
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sg3
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sg4
+ +[0-9]+: 0+1000 +0 +FUNC +GLOBAL +DEFAULT +5 fn3
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sg5
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sg1
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sg2
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +[0-9]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +1 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +2 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +3 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +4 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +5 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +6 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +7 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +8 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +9 *
+ +[0-9]+: 0+00 +0 +TLS +LOCAL +DEFAULT +6 bl1
+ +[0-9]+: 0+04 +0 +TLS +LOCAL +DEFAULT +6 bl2
+ +[0-9]+: 0+08 +0 +TLS +LOCAL +DEFAULT +6 bl3
+ +[0-9]+: 0+0c +0 +TLS +LOCAL +DEFAULT +6 bl4
+ +[0-9]+: 0+10 +0 +TLS +LOCAL +DEFAULT +6 bl5
+ +[0-9]+: [0-9a-f]+ +0 +OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC
+ +[0-9]+: 0+1c +0 +TLS +LOCAL +DEFAULT +6 sh3
+ +[0-9]+: 0+20 +0 +TLS +LOCAL +DEFAULT +6 sh4
+ +[0-9]+: 0+14 +0 +TLS +LOCAL +DEFAULT +6 sh1
+ +[0-9]+: 0+218c +0 +OBJECT +LOCAL +DEFAULT +ABS _GLOBAL_OFFSET_TABLE_
+ +[0-9]+: 0+18 +0 +TLS +LOCAL +DEFAULT +6 sh2
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sg3
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sg4
+ +[0-9]+: 0+1000 +0 +FUNC +GLOBAL +DEFAULT +5 fn3
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sg5
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sg1
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sg2
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsnopic.sd b/binutils-2.21/ld/testsuite/ld-i386/tlsnopic.sd
new file mode 100644
index 0000000..fdfaacf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsnopic.sd
@@ -0,0 +1,12 @@
+#source: tlsnopic1.s
+#source: tlsnopic2.s
+#as: --32
+#ld: -shared -melf_i386
+#objdump: -sj.got
+#target: i?86-*-*
+
+.*: file format elf32-i386
+
+Contents of section \.got:
+ 2174 00000000 04000000 00000000 00000000 .*
+ 2184 14000000 18000000 +.*
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsnopic1.s b/binutils-2.21/ld/testsuite/ld-i386/tlsnopic1.s
new file mode 100644
index 0000000..80a28bf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsnopic1.s
@@ -0,0 +1,107 @@
+ .section ".data.rel.ro", "aw", @progbits
+ /* Align, so that .got is likely at address 0x2080. */
+ .balign 4096
+ .section ".tbss", "awT", @nobits
+bl1: .space 4
+bl2: .space 4
+bl3: .space 4
+bl4: .space 4
+bl5: .space 4
+ .text
+ /* Align, so that fn3 is likely at address 0x1000. */
+ .balign 4096
+ .globl fn3
+ .type fn3,@function
+fn3:
+ pushl %ebp
+ movl %esp, %ebp
+
+ /* @indntpoff IE against global var */
+ movl %gs:0, %eax
+ nop;nop
+ addl sg1@indntpoff, %eax
+ nop;nop;nop;nop
+
+ /* @indntpoff direct %gs access IE against global var */
+ movl sg2@indntpoff, %edx
+ nop;nop
+ movl %gs:(%edx), %eax
+ nop;nop;nop;nop
+
+ /* @indntpoff IE against hidden var */
+ movl %gs:0, %eax
+ nop;nop
+ addl sh1@indntpoff, %eax
+ nop;nop;nop;nop
+
+ /* @indntpoff direct %gs access IE against hidden var */
+ movl sh2@indntpoff, %edx
+ nop;nop
+ movl %gs:(%edx), %eax
+ nop;nop;nop;nop
+
+ /* @indntpoff IE against local var */
+ movl %gs:0, %eax
+ nop;nop
+ addl bl1@indntpoff, %eax
+ nop;nop;nop;nop
+
+ /* @indntpoff direct %gs access IE against local var */
+ movl bl2@indntpoff, %edx
+ nop;nop
+ movl %gs:(%edx), %eax
+ nop;nop;nop;nop
+
+ /* LE @tpoff, global var */
+ movl $-3+sg3@tpoff, %edx
+ nop;nop
+ movl %gs:0, %eax
+ nop;nop
+ subl %edx, %eax
+ nop;nop;nop;nop
+
+ /* LE @tpoff, local var */
+ movl $-1+bl3@tpoff, %eax
+ nop;nop
+ movl %gs:0, %edx
+ nop;nop
+ subl %eax, %edx
+ nop;nop;nop;nop
+
+ /* LE @ntpoff, global var */
+ movl %gs:0, %eax
+ nop;nop
+ leal 2+sg4@ntpoff(%eax), %edx
+ nop;nop;nop;nop
+
+ /* LE @ntpoff, hidden var, non-canonical sequence */
+ movl $sh3@ntpoff, %eax
+ nop;nop
+ movl %gs:0, %edx
+ nop;nop
+ addl %eax, %edx
+ nop;nop;nop;nop
+
+ /* LE @ntpoff, local var, non-canonical sequence */
+ movl %gs:0, %edx
+ nop;nop
+ addl $bl4@ntpoff+1, %edx
+ nop;nop;nop;nop
+
+ /* Direct %gs access */
+
+ /* LE @ntpoff, global var */
+ movl %gs:sg5@ntpoff, %eax
+ nop;nop;nop;nop
+
+ /* LE @ntpoff, local var */
+ movl %gs:bl5@ntpoff+3, %edx
+ nop;nop;nop;nop
+
+ /* LE @ntpoff, hidden var */
+ movl %gs:1+sh4@ntpoff, %edx
+ nop;nop;nop;nop
+
+ movl -4(%ebp), %ebx
+ leave
+ ret
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlsnopic2.s b/binutils-2.21/ld/testsuite/ld-i386/tlsnopic2.s
new file mode 100644
index 0000000..d932956
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlsnopic2.s
@@ -0,0 +1,7 @@
+ .section ".tbss", "awT", @nobits
+ .globl sh1, sh2, sh3, sh4
+ .hidden sh1, sh2, sh3, sh4
+sh1: .space 4
+sh2: .space 4
+sh3: .space 4
+sh4: .space 4
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlspic.dd b/binutils-2.21/ld/testsuite/ld-i386/tlspic.dd
new file mode 100644
index 0000000..dd436d2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlspic.dd
@@ -0,0 +1,411 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as: --32
+#ld: -shared -melf_i386
+#objdump: -drj.text
+#target: i?86-*-*
+
+.*: +file format elf32-i386
+
+Disassembly of section .text:
+
+[0-9a-f]+ <fn1>:
+ [0-9a-f]+: 55[ ]+push %ebp
+ [0-9a-f]+: 89 e5[ ]+mov %esp,%ebp
+ [0-9a-f]+: 53[ ]+push %ebx
+ [0-9a-f]+: 50[ ]+push %eax
+ [0-9a-f]+: e8 00 00 00 00[ ]+call [0-9a-f]+ <fn1\+0xa>
+ [0-9a-f]+: 5b[ ]+pop %ebx
+ [0-9a-f]+: 81 c3 42 14 00 00[ ]+add \$0x[0-9a-f]+,%ebx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD
+ [0-9a-f]+: 8d 04 1d d4 ff ff ff[ ]+lea -0x2c\(,%ebx,1\),%eax
+# ->R_386_TLS_DTPMOD32 sg1
+ [0-9a-f]+: e8 cf ff ff ff[ ]+call [0-9a-f]+ <___tls_get_addr@plt>
+# ->R_386_JUMP_SLOT ___tls_get_addr
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE because variable is referenced through @gottpoff too
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 2b 83 f0 ff ff ff[ ]+sub -0x10\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sg2
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE because variable is referenced through @gotntpoff too
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 03 83 b4 ff ff ff[ ]+add -0x4c\(%ebx\),%eax
+# ->R_386_TLS_TPOFF sg3
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE because variable is referenced through @gottpoff and
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 2b 83 c0 ff ff ff[ ]+sub -0x40\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sg4
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD against local variable
+ [0-9a-f]+: 8d 04 1d 88 ff ff ff[ ]+lea -0x78\(,%ebx,1\),%eax
+# ->R_386_TLS_DTPMOD32 [0x00000000 0x20000000]
+ [0-9a-f]+: e8 8f ff ff ff[ ]+call [0-9a-f]+ <___tls_get_addr@plt>
+# ->R_386_JUMP_SLOT ___tls_get_addr
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE against local variable referenced through @gottpoff too
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 2b 83 90 ff ff ff[ ]+sub -0x70\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 [0xdcffffff]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE against local variable referenced through @gotntpoff
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 03 83 94 ff ff ff[ ]+add -0x6c\(%ebx\),%eax
+# ->R_386_TLS_TPOFF [0x28000000]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE against local variable referenced through @gottpoff and
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 2b 83 98 ff ff ff[ ]+sub -0x68\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 [0xd4ffffff]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD against hidden and local variable
+ [0-9a-f]+: 8d 04 1d f4 ff ff ff[ ]+lea -0xc\(,%ebx,1\),%eax
+# ->R_386_TLS_DTPMOD32 [0x00000000 0x40000000]
+ [0-9a-f]+: e8 4f ff ff ff[ ]+call [0-9a-f]+ <___tls_get_addr@plt>
+# ->R_386_JUMP_SLOT ___tls_get_addr
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE against hidden and local variable referenced through @gottpoff too
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 2b 83 fc ff ff ff[ ]+sub -0x4\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 [0xbcffffff]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE against hidden and local variable referenced through @gotntpoff too
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 03 83 b8 ff ff ff[ ]+add -0x48\(%ebx\),%eax
+# ->R_386_TLS_TPOFF [0x48000000]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE against hidden and local variable referenced through @gottpoff and @gotntpoff too
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 2b 83 dc ff ff ff[ ]+sub -0x24\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 [0xb4ffffff]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD against hidden but not local variable
+ [0-9a-f]+: 8d 04 1d ac ff ff ff[ ]+lea -0x54\(,%ebx,1\),%eax
+# ->R_386_TLS_DTPMOD32 [0x00000000 0x60000000]
+ [0-9a-f]+: e8 0f ff ff ff[ ]+call [0-9a-f]+ <___tls_get_addr@plt>
+# ->R_386_JUMP_SLOT ___tls_get_addr
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE against hidden but not local variable referenced through
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 2b 83 bc ff ff ff[ ]+sub -0x44\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 [0x9cffffff]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE against hidden but not local variable referenced through
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 03 83 e4 ff ff ff[ ]+add -0x1c\(%ebx\),%eax
+# ->R_386_TLS_TPOFF [0x68000000]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE against hidden but not local variable referenced through
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 2b 83 cc ff ff ff[ ]+sub -0x34\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 [0x94ffffff]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# LD
+ [0-9a-f]+: 8d 83 a4 ff ff ff[ ]+lea -0x5c\(%ebx\),%eax
+# ->R_386_TLS_DTPMOD32 [0x00000000 0x00000000]
+ [0-9a-f]+: e8 d0 fe ff ff[ ]+call [0-9a-f]+ <___tls_get_addr@plt>
+# ->R_386_JUMP_SLOT ___tls_get_addr
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 8d 90 20 00 00 00[ ]+lea 0x20\(%eax\),%edx
+# sl1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 8d 88 26 00 00 00[ ]+lea 0x26\(%eax\),%ecx
+# sl2+2
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# LD against hidden and local variables
+ [0-9a-f]+: 8d 83 a4 ff ff ff[ ]+lea -0x5c\(%ebx\),%eax
+# ->R_386_TLS_DTPMOD32 [0x00000000 0x00000000]
+ [0-9a-f]+: e8 b1 fe ff ff[ ]+call [0-9a-f]+ <___tls_get_addr@plt>
+# ->R_386_JUMP_SLOT ___tls_get_addr
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 8d 90 40 00 00 00[ ]+lea 0x40\(%eax\),%edx
+# sh1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 8d 88 47 00 00 00[ ]+lea 0x47\(%eax\),%ecx
+# sh2+3
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# LD against hidden but not local variables
+ [0-9a-f]+: 8d 83 a4 ff ff ff[ ]+lea -0x5c\(%ebx\),%eax
+# ->R_386_TLS_DTPMOD32 [0x00000000 0x00000000]
+ [0-9a-f]+: e8 92 fe ff ff[ ]+call [0-9a-f]+ <___tls_get_addr@plt>
+# ->R_386_JUMP_SLOT ___tls_get_addr
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 8d 90 60 00 00 00[ ]+lea 0x60\(%eax\),%edx
+# sH1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 8d 88 65 00 00 00[ ]+lea 0x65\(%eax\),%ecx
+# sH2+1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gottpoff IE against global var
+ [0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 2b 8b f0 ff ff ff[ ]+sub -0x10\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF32 sg2
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gottpoff IE against global var
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 2b 83 c0 ff ff ff[ ]+sub -0x40\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sg4
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE against global var
+ [0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 03 8b b4 ff ff ff[ ]+add -0x4c\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF sg3
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE against global var
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 03 83 c4 ff ff ff[ ]+add -0x3c\(%ebx\),%eax
+# ->R_386_TLS_TPOFF sg4
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gottpoff IE against local var
+ [0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 2b 8b 90 ff ff ff[ ]+sub -0x70\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF32 [0xdcffffff]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gottpoff IE against local var
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 2b 83 98 ff ff ff[ ]+sub -0x68\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 [0xd4ffffff]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE against local var
+ [0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 03 8b 94 ff ff ff[ ]+add -0x6c\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF [0x28000000]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE against local var
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 03 83 9c ff ff ff[ ]+add -0x64\(%ebx\),%eax
+# ->R_386_TLS_TPOFF [0x2c000000]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gottpoff IE against hidden and local var
+ [0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 2b 8b fc ff ff ff[ ]+sub -0x4\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF32 [0xbcffffff]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gottpoff IE against hidden and local var
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 2b 83 dc ff ff ff[ ]+sub -0x24\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 [0xb4ffffff]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE against hidden and local var
+ [0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 03 8b b8 ff ff ff[ ]+add -0x48\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF [0x48000000]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE against hidden and local var
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 03 83 e0 ff ff ff[ ]+add -0x20\(%ebx\),%eax
+# ->R_386_TLS_TPOFF [0x4c000000]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gottpoff IE against hidden but not local var
+ [0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 2b 8b bc ff ff ff[ ]+sub -0x44\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF32 [0x9cffffff]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gottpoff IE against hidden but not local var
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 2b 83 cc ff ff ff[ ]+sub -0x34\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 [0x94ffffff]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE against hidden but not local var
+ [0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 03 8b e4 ff ff ff[ ]+add -0x1c\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF [0x68000000]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE against hidden but not local var
+ [0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 03 83 d0 ff ff ff[ ]+add -0x30\(%ebx\),%eax
+# ->R_386_TLS_TPOFF [0x6c000000]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# Direct access through %gs
+# @gotntpoff IE against global var
+ [0-9a-f]+: 8b 8b c8 ff ff ff[ ]+mov -0x38\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF sg5
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 65 8b 11[ ]+mov %gs:\(%ecx\),%edx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE against local var
+ [0-9a-f]+: 8b 83 a0 ff ff ff[ ]+mov -0x60\(%ebx\),%eax
+# ->R_386_TLS_TPOFF [0x30000000]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 65 8b 10[ ]+mov %gs:\(%eax\),%edx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE against hidden and local var
+ [0-9a-f]+: 8b 93 e8 ff ff ff[ ]+mov -0x18\(%ebx\),%edx
+# ->R_386_TLS_TPOFF [0x50000000]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 65 8b 12[ ]+mov %gs:\(%edx\),%edx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# @gotntpoff IE against hidden but not local var
+ [0-9a-f]+: 8b 8b ec ff ff ff[ ]+mov -0x14\(%ebx\),%ecx
+# ->R_386_TLS_TPOFF [0x70000000]
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 65 8b 11[ ]+mov %gs:\(%ecx\),%edx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 8b 5d fc[ ]+mov -0x4\(%ebp\),%ebx
+ [0-9a-f]+: c9[ ]+leave *
+ [0-9a-f]+: c3[ ]+ret *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlspic.rd b/binutils-2.21/ld/testsuite/ld-i386/tlspic.rd
new file mode 100644
index 0000000..46b8ed5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlspic.rd
@@ -0,0 +1,154 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as: --32
+#ld: -shared -melf_i386
+#readelf: -Ssrl
+#target: i?86-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
+ +\[[ 0-9]+\] \.hash +.*
+ +\[[ 0-9]+\] \.dynsym +.*
+ +\[[ 0-9]+\] \.dynstr +.*
+ +\[[ 0-9]+\] \.rel.dyn +.*
+ +\[[ 0-9]+\] \.rel.plt +.*
+ +\[[ 0-9]+\] \.plt +.*
+ +\[[ 0-9]+\] \.text +.*
+ +\[[ 0-9]+\] \.tdata +PROGBITS +[0-9a-f]+ [0-9a-f]+ 000060 00 WAT +0 +0 +1
+ +\[[ 0-9]+\] \.tbss +NOBITS +[0-9aa-f]+ [0-9a-f]+ 000020 00 WAT +0 +0 +1
+ +\[[ 0-9]+\] \.dynamic +.*
+ +\[[ 0-9]+\] \.got +.*
+ +\[[ 0-9]+\] \.got.plt +.*
+ +\[[ 0-9]+\] \.shstrtab +.*
+ +\[[ 0-9]+\] \.symtab +.*
+ +\[[ 0-9]+\] \.strtab +.*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x[0-9a-f]+
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +LOAD.*
+ +LOAD.*
+ +DYNAMIC.*
+ +TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x0+60 0x0+80 R +0x1
+
+ Section to Segment mapping:
+ +Segment Sections...
+ +00 +.hash .dynsym .dynstr .rel.dyn .rel.plt .plt .text *
+ +01 +.tdata .dynamic .got .got.plt *
+ +02 +.dynamic *
+ +03 +.tdata .tbss *
+
+Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 26 entries:
+ Offset +Info +Type +Sym.Value +Sym. Name
+[0-9a-f ]+R_386_TLS_DTPMOD3
+[0-9a-f ]+R_386_TLS_TPOFF32
+[0-9a-f ]+R_386_TLS_TPOFF *
+[0-9a-f ]+R_386_TLS_TPOFF32
+[0-9a-f ]+R_386_TLS_TPOFF *
+[0-9a-f ]+R_386_TLS_TPOFF *
+[0-9a-f ]+R_386_TLS_DTPMOD3
+[0-9a-f ]+R_386_TLS_DTPMOD3
+[0-9a-f ]+R_386_TLS_TPOFF *
+[0-9a-f ]+R_386_TLS_TPOFF32
+[0-9a-f ]+R_386_TLS_TPOFF32
+[0-9a-f ]+R_386_TLS_TPOFF *
+[0-9a-f ]+R_386_TLS_TPOFF32
+[0-9a-f ]+R_386_TLS_TPOFF *
+[0-9a-f ]+R_386_TLS_TPOFF *
+[0-9a-f ]+R_386_TLS_TPOFF *
+[0-9a-f ]+R_386_TLS_TPOFF *
+[0-9a-f ]+R_386_TLS_DTPMOD3
+[0-9a-f ]+R_386_TLS_TPOFF32
+[0-9a-f ]+R_386_TLS_TPOFF +0+8 +sg3
+[0-9a-f ]+R_386_TLS_TPOFF32 0+c +sg4
+[0-9a-f ]+R_386_TLS_TPOFF +0+c +sg4
+[0-9a-f ]+R_386_TLS_TPOFF +0+10 +sg5
+[0-9a-f ]+R_386_TLS_DTPMOD3 0+ +sg1
+[0-9a-f ]+R_386_TLS_DTPOFF3 0+ +sg1
+[0-9a-f ]+R_386_TLS_TPOFF32 0+4 +sg2
+
+Relocation section '.rel.plt' at offset 0x[0-9a-f]+ contains 1 entries:
+ Offset +Info +Type +Sym.Value +Sym. Name
+[0-9a-f ]+R_386_JUMP_SLOT +0+ +___tls_get_addr
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +[0-9]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND *
+ +[0-9]+: 0+1c +0 +TLS +GLOBAL +DEFAULT +8 sg8
+ +[0-9]+: 0+8 +0 +TLS +GLOBAL +DEFAULT +8 sg3
+ +[0-9]+: 0+c +0 +TLS +GLOBAL +DEFAULT +8 sg4
+ +[0-9]+: 0+10 +0 +TLS +GLOBAL +DEFAULT +8 sg5
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +8 sg1
+ +[0-9]+: [0-9a-f]+ +0 +FUNC +GLOBAL +DEFAULT +7 fn1
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +[0-9]+: 0+4 +0 +TLS +GLOBAL +DEFAULT +8 sg2
+ +[0-9]+: 0+14 +0 +TLS +GLOBAL +DEFAULT +8 sg6
+ +[0-9]+: 0+18 +0 +TLS +GLOBAL +DEFAULT +8 sg7
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+ +[0-9]+: 0+ +0 +NOTYPE +GLOBAL +DEFAULT +UND ___tls_get_addr
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +[0-9]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +1 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +2 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +3 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +4 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +5 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +6 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +7 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +8 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +9 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +10 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +11 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +12 *
+ +[0-9]+: 0+20 +0 +TLS +LOCAL +DEFAULT +8 sl1
+ +[0-9]+: 0+24 +0 +TLS +LOCAL +DEFAULT +8 sl2
+ +[0-9]+: 0+28 +0 +TLS +LOCAL +DEFAULT +8 sl3
+ +[0-9]+: 0+2c +0 +TLS +LOCAL +DEFAULT +8 sl4
+ +[0-9]+: 0+30 +0 +TLS +LOCAL +DEFAULT +8 sl5
+ +[0-9]+: 0+34 +0 +TLS +LOCAL +DEFAULT +8 sl6
+ +[0-9]+: 0+38 +0 +TLS +LOCAL +DEFAULT +8 sl7
+ +[0-9]+: 0+3c +0 +TLS +LOCAL +DEFAULT +8 sl8
+ +[0-9]+: 0+60 +0 +TLS +LOCAL +DEFAULT +9 sH1
+ +[0-9]+: [0-9a-f]+ +0 +OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC
+ +[0-9]+: 0+48 +0 +TLS +LOCAL +DEFAULT +8 sh3
+ +[0-9]+: 0+64 +0 +TLS +LOCAL +DEFAULT +9 sH2
+ +[0-9]+: 0+78 +0 +TLS +LOCAL +DEFAULT +9 sH7
+ +[0-9]+: 0+58 +0 +TLS +LOCAL +DEFAULT +8 sh7
+ +[0-9]+: 0+5c +0 +TLS +LOCAL +DEFAULT +8 sh8
+ +[0-9]+: 0+6c +0 +TLS +LOCAL +DEFAULT +9 sH4
+ +[0-9]+: 0+4c +0 +TLS +LOCAL +DEFAULT +8 sh4
+ +[0-9]+: 0+68 +0 +TLS +LOCAL +DEFAULT +9 sH3
+ +[0-9]+: 0+50 +0 +TLS +LOCAL +DEFAULT +8 sh5
+ +[0-9]+: 0+70 +0 +TLS +LOCAL +DEFAULT +9 sH5
+ +[0-9]+: 0+74 +0 +TLS +LOCAL +DEFAULT +9 sH6
+ +[0-9]+: 0+7c +0 +TLS +LOCAL +DEFAULT +9 sH8
+ +[0-9]+: 0+40 +0 +TLS +LOCAL +DEFAULT +8 sh1
+ +[0-9]+: [0-9a-f]+ +0 +OBJECT +LOCAL +DEFAULT +ABS _GLOBAL_OFFSET_TABLE_
+ +[0-9]+: 0+44 +0 +TLS +LOCAL +DEFAULT +8 sh2
+ +[0-9]+: 0+54 +0 +TLS +LOCAL +DEFAULT +8 sh6
+ +[0-9]+: 0+1c +0 +TLS +GLOBAL +DEFAULT +8 sg8
+ +[0-9]+: 0+8 +0 +TLS +GLOBAL +DEFAULT +8 sg3
+ +[0-9]+: 0+c +0 +TLS +GLOBAL +DEFAULT +8 sg4
+ +[0-9]+: 0+10 +0 +TLS +GLOBAL +DEFAULT +8 sg5
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +8 sg1
+ +[0-9]+: [0-9a-f]+ +0 +FUNC +GLOBAL +DEFAULT +7 fn1
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +[0-9]+: 0+4 +0 +TLS +GLOBAL +DEFAULT +8 sg2
+ +[0-9]+: 0+14 +0 +TLS +GLOBAL +DEFAULT +8 sg6
+ +[0-9]+: 0+18 +0 +TLS +GLOBAL +DEFAULT +8 sg7
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+ +[0-9]+: 0+ +0 +NOTYPE +GLOBAL +DEFAULT +UND ___tls_get_addr
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlspic.sd b/binutils-2.21/ld/testsuite/ld-i386/tlspic.sd
new file mode 100644
index 0000000..f9c9627
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlspic.sd
@@ -0,0 +1,18 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as: --32
+#ld: -shared -melf_i386
+#objdump: -sj.got
+#target: i?86-*-*
+
+.*: file format elf32-i386
+
+Contents of section \.got:
+ [0-9a-f]+ 00000000 20000000 dcffffff 28000000 .*
+ [0-9a-f]+ d4ffffff 2c000000 30000000 00000000 .*
+ [0-9a-f]+ 00000000 00000000 60000000 00000000 .*
+ [0-9a-f]+ 48000000 9cffffff 00000000 00000000 .*
+ [0-9a-f]+ 00000000 94ffffff 6c000000 00000000 .*
+ [0-9a-f]+ 00000000 b4ffffff 4c000000 68000000 .*
+ [0-9a-f]+ 50000000 70000000 00000000 00000000 .*
+ [0-9a-f]+ 40000000 bcffffff +.*
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlspic.td b/binutils-2.21/ld/testsuite/ld-i386/tlspic.td
new file mode 100644
index 0000000..1291584
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlspic.td
@@ -0,0 +1,16 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as: --32
+#ld: -shared -melf_i386
+#objdump: -sj.tdata
+#target: i?86-*-*
+
+.*: file format elf32-i386
+
+Contents of section \.tdata:
+ [0-9a-f]+ 11000000 12000000 13000000 14000000 .*
+ [0-9a-f]+ 15000000 16000000 17000000 18000000 .*
+ [0-9a-f]+ 41000000 42000000 43000000 44000000 .*
+ [0-9a-f]+ 45000000 46000000 47000000 48000000 .*
+ [0-9a-f]+ 01010000 02010000 03010000 04010000 .*
+ [0-9a-f]+ 05010000 06010000 07010000 08010000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlspic1.s b/binutils-2.21/ld/testsuite/ld-i386/tlspic1.s
new file mode 100644
index 0000000..9dcb3b7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlspic1.s
@@ -0,0 +1,282 @@
+ .section ".tdata", "awT", @progbits
+ .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
+ .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+ .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+sg1: .long 17
+sg2: .long 18
+sg3: .long 19
+sg4: .long 20
+sg5: .long 21
+sg6: .long 22
+sg7: .long 23
+sg8: .long 24
+sl1: .long 65
+sl2: .long 66
+sl3: .long 67
+sl4: .long 68
+sl5: .long 69
+sl6: .long 70
+sl7: .long 71
+sl8: .long 72
+sh1: .long 257
+sh2: .long 258
+sh3: .long 259
+sh4: .long 260
+sh5: .long 261
+sh6: .long 262
+sh7: .long 263
+sh8: .long 264
+ .text
+ .globl fn1
+ .type fn1,@function
+fn1:
+ pushl %ebp
+ movl %esp, %ebp
+ pushl %ebx
+ pushl %eax
+ call 1f
+1: popl %ebx
+ addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx
+ nop;nop;nop;nop
+
+ /* GD */
+ leal sg1@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> IE because variable is referenced through @gottpoff too */
+ leal sg2@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> IE because variable is referenced through @gotntpoff too */
+ leal sg3@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> IE because variable is referenced through @gottpoff and
+ @gotntpoff too */
+ leal sg4@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD against local variable */
+ leal sl1@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> IE against local variable referenced through @gottpoff too */
+ leal sl2@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> IE against local variable referenced through @gotntpoff
+ too */
+ leal sl3@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> IE against local variable referenced through @gottpoff and
+ @gotntpoff too */
+ leal sl4@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD against hidden and local variable */
+ leal sh1@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> IE against hidden and local variable referenced through
+ @gottpoff too */
+ leal sh2@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> IE against hidden and local variable referenced through
+ @gotntpoff too */
+ leal sh3@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> IE against hidden and local variable referenced through
+ @gottpoff and @gotntpoff too */
+ leal sh4@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD against hidden but not local variable */
+ leal sH1@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> IE against hidden but not local variable referenced through
+ @gottpoff too */
+ leal sH2@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> IE against hidden but not local variable referenced through
+ @gotntpoff too */
+ leal sH3@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> IE against hidden but not local variable referenced through
+ @gottpoff and @gotntpoff too */
+ leal sH4@tlsgd(,%ebx,1), %eax
+ call ___tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* LD */
+ leal sl1@tlsldm(%ebx), %eax
+ call ___tls_get_addr@PLT
+ nop;nop
+ leal sl1@dtpoff(%eax), %edx
+ nop;nop
+ leal 2+sl2@dtpoff(%eax), %ecx
+ nop;nop;nop;nop
+
+ /* LD against hidden and local variables */
+ leal sh1@tlsldm(%ebx), %eax
+ call ___tls_get_addr@PLT
+ nop;nop
+ leal sh1@dtpoff(%eax), %edx
+ nop;nop
+ leal sh2@dtpoff+3(%eax), %ecx
+ nop;nop;nop;nop
+
+ /* LD against hidden but not local variables */
+ leal sH1@tlsldm(%ebx), %eax
+ call ___tls_get_addr@PLT
+ nop;nop
+ leal sH1@dtpoff(%eax), %edx
+ nop;nop
+ leal sH2@dtpoff+1(%eax), %ecx
+ nop;nop
+
+ /* @gottpoff IE against global var */
+ movl %gs:0, %ecx
+ nop;nop
+ subl sg2@gottpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ /* @gottpoff IE against global var */
+ movl %gs:0, %eax
+ nop;nop
+ subl sg4@gottpoff(%ebx), %eax
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against global var */
+ movl %gs:0, %ecx
+ nop;nop
+ addl sg3@gotntpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against global var */
+ movl %gs:0, %eax
+ nop;nop
+ addl sg4@gotntpoff(%ebx), %eax
+ nop;nop;nop;nop
+
+ /* @gottpoff IE against local var */
+ movl %gs:0, %ecx
+ nop;nop
+ subl sl2@gottpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ /* @gottpoff IE against local var */
+ movl %gs:0, %eax
+ nop;nop
+ subl sl4@gottpoff(%ebx), %eax
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against local var */
+ movl %gs:0, %ecx
+ nop;nop
+ addl sl3@gotntpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against local var */
+ movl %gs:0, %eax
+ nop;nop
+ addl sl4@gotntpoff(%ebx), %eax
+ nop;nop;nop;nop
+
+ /* @gottpoff IE against hidden and local var */
+ movl %gs:0, %ecx
+ nop;nop
+ subl sh2@gottpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ /* @gottpoff IE against hidden and local var */
+ movl %gs:0, %eax
+ nop;nop
+ subl sh4@gottpoff(%ebx), %eax
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against hidden and local var */
+ movl %gs:0, %ecx
+ nop;nop
+ addl sh3@gotntpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against hidden and local var */
+ movl %gs:0, %eax
+ nop;nop
+ addl sh4@gotntpoff(%ebx), %eax
+ nop;nop;nop;nop
+
+ /* @gottpoff IE against hidden but not local var */
+ movl %gs:0, %ecx
+ nop;nop
+ subl sH2@gottpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ /* @gottpoff IE against hidden but not local var */
+ movl %gs:0, %eax
+ nop;nop
+ subl sH4@gottpoff(%ebx), %eax
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against hidden but not local var */
+ movl %gs:0, %ecx
+ nop;nop
+ addl sH3@gotntpoff(%ebx), %ecx
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against hidden but not local var */
+ movl %gs:0, %eax
+ nop;nop
+ addl sH4@gotntpoff(%ebx), %eax
+ nop;nop;nop;nop
+
+ /* Direct access through %gs */
+
+ /* @gotntpoff IE against global var */
+ movl sg5@gotntpoff(%ebx), %ecx
+ nop;nop
+ movl %gs:(%ecx), %edx
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against local var */
+ movl sl5@gotntpoff(%ebx), %eax
+ nop;nop
+ movl %gs:(%eax), %edx
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against hidden and local var */
+ movl sh5@gotntpoff(%ebx), %edx
+ nop;nop
+ movl %gs:(%edx), %edx
+ nop;nop;nop;nop
+
+ /* @gotntpoff IE against hidden but not local var */
+ movl sH5@gotntpoff(%ebx), %ecx
+ nop;nop
+ movl %gs:(%ecx), %edx
+ nop;nop;nop;nop
+
+ movl -4(%ebp), %ebx
+ leave
+ ret
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlspic2.s b/binutils-2.21/ld/testsuite/ld-i386/tlspic2.s
new file mode 100644
index 0000000..5513f9b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlspic2.s
@@ -0,0 +1,11 @@
+ .section ".tbss", "awT", @nobits
+ .globl sH1, sH2, sH3, sH4, sH5, sH6, sH7, sH8
+ .hidden sH1, sH2, sH3, sH4, sH5, sH6, sH7, sH8
+sH1: .space 4
+sH2: .space 4
+sH3: .space 4
+sH4: .space 4
+sH5: .space 4
+sH6: .space 4
+sH7: .space 4
+sH8: .space 4
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlspie1.d b/binutils-2.21/ld/testsuite/ld-i386/tlspie1.d
new file mode 100644
index 0000000..bac5dc6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlspie1.d
@@ -0,0 +1,6 @@
+#name: TLS with PIE
+#as: --32
+#ld: -melf_i386 -pie
+#readelf: -r
+
+There are no relocations in this file.
diff --git a/binutils-2.21/ld/testsuite/ld-i386/tlspie1.s b/binutils-2.21/ld/testsuite/ld-i386/tlspie1.s
new file mode 100644
index 0000000..c2b6151
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/tlspie1.s
@@ -0,0 +1,64 @@
+ .text
+ .globl ___tls_get_addr
+ .type ___tls_get_addr, @function
+___tls_get_addr:
+ ret
+ .size ___tls_get_addr, .-___tls_get_addr
+.globl _start
+ .type _start, @function
+_start:
+ pushl %ebp
+ movl %esp, %ebp
+ pushl %esi
+ pushl %ebx
+ call .L3
+.L3:
+ popl %ebx
+ addl $_GLOBAL_OFFSET_TABLE_+[.-.L3], %ebx
+ movl %gs:foo2@NTPOFF, %esi
+ addl %gs:foo1@NTPOFF, %esi
+ movl foo3@GOTNTPOFF(%ebx), %eax
+ addl %gs:(%eax), %esi
+ leal foo4@TLSGD(,%ebx,1), %eax
+ call ___tls_get_addr@PLT
+ addl (%eax), %esi
+ leal foo5@TLSGD(,%ebx,1), %eax
+ call ___tls_get_addr@PLT
+ addl (%eax), %esi
+ movl %esi, %eax
+ popl %ebx
+ popl %esi
+ leave
+ ret
+ .size _start, .-_start
+.globl foo1
+ .section .tbss,"awT",@nobits
+ .align 4
+ .type foo1, @object
+ .size foo1, 4
+foo1:
+ .zero 4
+.globl foo2
+ .align 4
+ .type foo2, @object
+ .size foo2, 4
+foo2:
+ .zero 4
+.globl foo3
+ .align 4
+ .type foo3, @object
+ .size foo3, 4
+foo3:
+ .zero 4
+.globl foo4
+ .align 4
+ .type foo4, @object
+ .size foo4, 4
+foo4:
+ .zero 4
+.globl foo5
+ .align 4
+ .type foo5, @object
+ .size foo5, 4
+foo5:
+ .zero 4
diff --git a/binutils-2.21/ld/testsuite/ld-i386/vxworks1-lib.dd b/binutils-2.21/ld/testsuite/ld-i386/vxworks1-lib.dd
new file mode 100644
index 0000000..6d56eb2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/vxworks1-lib.dd
@@ -0,0 +1,41 @@
+
+.*: file format .*
+
+Disassembly of section \.plt:
+
+00080800 <_PROCEDURE_LINKAGE_TABLE_>:
+ 80800: ff b3 04 00 00 00 pushl 0x4\(%ebx\)
+ 80806: ff a3 08 00 00 00 jmp \*0x8\(%ebx\)
+ 8080c: 90 nop
+ 8080d: 90 nop
+ 8080e: 90 nop
+ 8080f: 90 nop
+
+00080810 <sexternal@plt>:
+ 80810: ff a3 0c 00 00 00 jmp \*0xc\(%ebx\)
+ 80816: 68 00 00 00 00 push \$0x0
+ 8081b: e9 e0 ff ff ff jmp 80800 <_PROCEDURE_LINKAGE_TABLE_>
+
+00080820 <sglobal@plt>:
+ 80820: ff a3 10 00 00 00 jmp \*0x10\(%ebx\)
+ 80826: 68 08 00 00 00 push \$0x8
+ 8082b: e9 d0 ff ff ff jmp 80800 <_PROCEDURE_LINKAGE_TABLE_>
+Disassembly of section \.text:
+
+00080c00 <foo>:
+ 80c00: 53 push %ebx
+ 80c01: 8b 1d 00 00 00 00 mov 0x0,%ebx
+ 80c07: 8b 99 00 00 00 00 mov 0x0\(%ecx\),%ebx
+ 80c0d: 8b 83 14 00 00 00 mov 0x14\(%ebx\),%eax
+ 80c13: ff 00 incl \(%eax\)
+ 80c15: e8 0c 00 00 00 call 80c26 <slocal>
+ 80c1a: e8 01 fc ff ff call 80820 <sglobal@plt>
+ 80c1f: e8 ec fb ff ff call 80810 <sexternal@plt>
+ 80c24: 5b pop %ebx
+ 80c25: c3 ret
+
+00080c26 <slocal>:
+ 80c26: c3 ret
+
+00080c27 <sglobal>:
+ 80c27: c3 ret
diff --git a/binutils-2.21/ld/testsuite/ld-i386/vxworks1-lib.nd b/binutils-2.21/ld/testsuite/ld-i386/vxworks1-lib.nd
new file mode 100644
index 0000000..edf3db3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/vxworks1-lib.nd
@@ -0,0 +1,9 @@
+#...
+Symbol table '\.dynsym' .*:
+#...
+.*: 00081400 * 0 * OBJECT * GLOBAL * DEFAULT * [0-9]+ _GLOBAL_OFFSET_TABLE_
+#...
+Symbol table '\.symtab' .*:
+#...
+.*: 00081400 * 0 * OBJECT * GLOBAL * DEFAULT * [0-9]+ _GLOBAL_OFFSET_TABLE_
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-i386/vxworks1-lib.rd b/binutils-2.21/ld/testsuite/ld-i386/vxworks1-lib.rd
new file mode 100644
index 0000000..b899b73
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/vxworks1-lib.rd
@@ -0,0 +1,12 @@
+
+Relocation section '\.rel\.dyn' at offset .* contains 4 entries:
+ Offset Info Type Sym\.Value Sym\. Name
+00081800 00000008 R_386_RELATIVE *
+00080c03 .*01 R_386_32 00000000 __GOTT_BASE__
+00080c09 .*01 R_386_32 00000000 __GOTT_INDEX__
+00081414 .*06 R_386_GLOB_DAT 00081c00 x
+
+Relocation section '\.rel\.plt' at offset .* contains 2 entries:
+ Offset Info Type Sym\.Value Sym\. Name
+0008140c .*07 R_386_JUMP_SLOT 00000000 sexternal
+00081410 .*07 R_386_JUMP_SLOT 00080c27 sglobal
diff --git a/binutils-2.21/ld/testsuite/ld-i386/vxworks1-lib.s b/binutils-2.21/ld/testsuite/ld-i386/vxworks1-lib.s
new file mode 100644
index 0000000..f9f05dc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/vxworks1-lib.s
@@ -0,0 +1,31 @@
+ .text
+ .globl foo
+ .type foo, @function
+foo:
+ push %ebx
+ movl __GOTT_BASE__, %ebx
+ movl __GOTT_INDEX__(%ecx), %ebx
+ movl x@GOT(%ebx), %eax
+ incl (%eax)
+ call slocal@plt
+ call sglobal@plt
+ call sexternal@plt
+ pop %ebx
+ ret
+ .size foo, .-foo
+
+ .type slocal, @function
+slocal:
+ ret
+ .size slocal, .-slocal
+
+ .globl sglobal
+ .type sglobal, @function
+sglobal:
+ ret
+ .size sglobal, .-sglobal
+
+ .data
+ .4byte slocal
+
+ .comm x,4,4
diff --git a/binutils-2.21/ld/testsuite/ld-i386/vxworks1-lib.td b/binutils-2.21/ld/testsuite/ld-i386/vxworks1-lib.td
new file mode 100644
index 0000000..9f223e3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/vxworks1-lib.td
@@ -0,0 +1,3 @@
+#...
+ 0x0+16 \(TEXTREL\) +0x0
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-i386/vxworks1-static.d b/binutils-2.21/ld/testsuite/ld-i386/vxworks1-static.d
new file mode 100644
index 0000000..88c0baf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/vxworks1-static.d
@@ -0,0 +1,4 @@
+#name: VxWorks executable test 1 (static)
+#source: vxworks1.s
+#ld: tmpdir/libvxworks1.so -Tvxworks1.ld
+#error: Dynamic sections created in non-dynamic link
diff --git a/binutils-2.21/ld/testsuite/ld-i386/vxworks1.dd b/binutils-2.21/ld/testsuite/ld-i386/vxworks1.dd
new file mode 100644
index 0000000..02b8bc0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/vxworks1.dd
@@ -0,0 +1,38 @@
+
+.*: file format .*
+
+Disassembly of section \.plt:
+
+00080800 <_PROCEDURE_LINKAGE_TABLE_>:
+ 80800: ff 35 04 14 08 00 pushl 0x81404
+ 80802: R_386_32 _GLOBAL_OFFSET_TABLE_
+ 80806: ff 25 08 14 08 00 jmp \*0x81408
+ 80808: R_386_32 _GLOBAL_OFFSET_TABLE_
+ 8080c: 90 nop
+ 8080d: 90 nop
+ 8080e: 90 nop
+ 8080f: 90 nop
+
+00080810 <sglobal@plt>:
+ 80810: ff 25 0c 14 08 00 jmp \*0x8140c
+ 80812: R_386_32 _GLOBAL_OFFSET_TABLE_
+ 80816: 68 00 00 00 00 push \$0x0
+ 8081b: e9 e0 ff ff ff jmp 80800 <_PROCEDURE_LINKAGE_TABLE_>
+
+00080820 <foo@plt>:
+ 80820: ff 25 10 14 08 00 jmp \*0x81410
+ 80822: R_386_32 _GLOBAL_OFFSET_TABLE_
+ 80826: 68 08 00 00 00 push \$0x8
+ 8082b: e9 d0 ff ff ff jmp 80800 <_PROCEDURE_LINKAGE_TABLE_>
+Disassembly of section \.text:
+
+00080c00 <_start>:
+ 80c00: e8 1b fc ff ff call 80820 <foo@plt>
+ 80c01: R_386_PLT32 \.plt
+ 80c05: e8 05 00 00 00 call 80c0f <sexternal>
+ 80c06: R_386_PLT32 sexternal
+ 80c0a: e9 01 fc ff ff jmp 80810 <sglobal@plt>
+ 80c0b: R_386_PLT32 \.plt
+
+00080c0f <sexternal>:
+ 80c0f: c3 ret
diff --git a/binutils-2.21/ld/testsuite/ld-i386/vxworks1.ld b/binutils-2.21/ld/testsuite/ld-i386/vxworks1.ld
new file mode 100644
index 0000000..ed76f18
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/vxworks1.ld
@@ -0,0 +1,30 @@
+SECTIONS
+{
+ . = 0x80000;
+ .interp : { *(.interp) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+
+ . = ALIGN (0x400);
+ .rel.dyn : { *(.rel.dyn) }
+ .rel.plt : { *(.rel.plt) }
+
+ . = ALIGN (0x400);
+ .plt : { *(.plt) }
+
+ . = ALIGN (0x400);
+ .text : { *(.text) }
+
+ . = ALIGN (0x1000);
+ .dynamic : { *(.dynamic) }
+
+ . = ALIGN (0x400);
+ .got : { *(.got.plt) *(.got) }
+
+ . = ALIGN (0x400);
+ .data : { *(.data) }
+
+ . = ALIGN (0x400);
+ .bss : { *(.bss) *(.dynbss) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-i386/vxworks1.rd b/binutils-2.21/ld/testsuite/ld-i386/vxworks1.rd
new file mode 100644
index 0000000..9fd7383
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/vxworks1.rd
@@ -0,0 +1,20 @@
+
+Relocation section '\.rel\.plt' at offset .* contains 2 entries:
+ Offset Info Type Sym\.Value Sym\. Name
+0008140c .*07 R_386_JUMP_SLOT 00000000 sglobal
+00081410 .*07 R_386_JUMP_SLOT 00000000 foo
+
+Relocation section '\.rel\.text' at offset .* contains 3 entries:
+ Offset Info Type Sym.Value Sym. Name
+00080c01 .*04 R_386_PLT32 00080800 .plt
+00080c06 .*04 R_386_PLT32 00080c0f sexternal
+00080c0b .*04 R_386_PLT32 00080800 .plt
+
+Relocation section '\.rel\.plt\.unloaded' at offset .* contains 6 entries:
+ Offset Info Type Sym\.Value Sym\. Name
+00080802 .*01 R_386_32 00081400 _GLOBAL_OFFSET_TABLE_
+00080808 .*01 R_386_32 00081400 _GLOBAL_OFFSET_TABLE_
+00080812 .*01 R_386_32 00081400 _GLOBAL_OFFSET_TABLE_
+0008140c .*01 R_386_32 00080800 _PROCEDURE_LINKAGE_TAB.*
+00080822 .*01 R_386_32 00081400 _GLOBAL_OFFSET_TABLE_
+00081410 .*01 R_386_32 00080800 _PROCEDURE_LINKAGE_TAB.*
diff --git a/binutils-2.21/ld/testsuite/ld-i386/vxworks1.s b/binutils-2.21/ld/testsuite/ld-i386/vxworks1.s
new file mode 100644
index 0000000..5cb68af
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/vxworks1.s
@@ -0,0 +1,14 @@
+ .text
+ .globl _start
+ .type _start,@function
+_start:
+ call foo@plt
+ call sexternal@plt
+ jmp sglobal@plt
+ .size _start, .-_start
+
+ .globl sexternal
+ .type sexternal,@function
+sexternal:
+ ret
+ .size sexternal, .-sexternal
diff --git a/binutils-2.21/ld/testsuite/ld-i386/vxworks2-static.sd b/binutils-2.21/ld/testsuite/ld-i386/vxworks2-static.sd
new file mode 100644
index 0000000..912755b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/vxworks2-static.sd
@@ -0,0 +1,9 @@
+#...
+Elf file type is EXEC \(Executable file\)
+Entry point 0x80000
+#...
+Program Headers:
+ Type .*
+ LOAD .* 0x00080000 0x00080000 .* R E 0x1000
+
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-i386/vxworks2.s b/binutils-2.21/ld/testsuite/ld-i386/vxworks2.s
new file mode 100644
index 0000000..28c8acb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/vxworks2.s
@@ -0,0 +1,5 @@
+ .globl _start
+ .type _start,@function
+_start:
+ ret
+ .end _start
diff --git a/binutils-2.21/ld/testsuite/ld-i386/vxworks2.sd b/binutils-2.21/ld/testsuite/ld-i386/vxworks2.sd
new file mode 100644
index 0000000..5ff87d3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/vxworks2.sd
@@ -0,0 +1,13 @@
+#...
+Elf file type is EXEC \(Executable file\)
+Entry point 0x80400
+#...
+Program Headers:
+ Type .*
+ PHDR .*
+#...
+ LOAD .* 0x00080000 0x00080000 .* R E 0x1000
+ LOAD .* 0x00081000 0x00081000 .* RW 0x1000
+ DYNAMIC .*
+
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-i386/warn1.d b/binutils-2.21/ld/testsuite/ld-i386/warn1.d
new file mode 100644
index 0000000..dd541f2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/warn1.d
@@ -0,0 +1,4 @@
+#name: --warn-shared-textrel --fatal-warnings
+#as: --32
+#ld: -shared -melf_i386 --warn-shared-textrel --fatal-warnings
+#error: .*warning: creating a DT_TEXTREL in a shared object.
diff --git a/binutils-2.21/ld/testsuite/ld-i386/warn1.s b/binutils-2.21/ld/testsuite/ld-i386/warn1.s
new file mode 100644
index 0000000..ca3481a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/warn1.s
@@ -0,0 +1,5 @@
+ .text
+ .globl foo
+ .type foo, @function
+foo:
+ movl bar, %eax
diff --git a/binutils-2.21/ld/testsuite/ld-i386/zero.s b/binutils-2.21/ld/testsuite/ld-i386/zero.s
new file mode 100644
index 0000000..f716bba
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-i386/zero.s
@@ -0,0 +1,2 @@
+ .global zero
+ .equiv zero, 0
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/ia64.exp b/binutils-2.21/ld/testsuite/ld-ia64/ia64.exp
new file mode 100644
index 0000000..6d4860e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/ia64.exp
@@ -0,0 +1,64 @@
+# Expect script for ld-ia64 tests
+# Copyright (C) 2002, 2003, 2005, 2007 Free Software Foundation
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# Test ia64 linking; all types of relocs. This tests the assembler and
+# tools like objdump as well as the linker.
+
+if { !([istarget "ia64-*-elf*"]
+ || [istarget "ia64-*-linux*"]) } {
+ return
+}
+
+# List contains test-items with 3 items followed by 2 lists:
+# 0:name 1:ld options 2:assembler options
+# 3:filenames of assembler files 4: action and options. 5: name of output file
+
+# Actions:
+# objdump: Apply objdump options on result. Compare with regex (last arg).
+# nm: Apply nm options on result. Compare with regex (last arg).
+# readelf: Apply readelf options on result. Compare with regex (last arg).
+
+set ia64tests {
+ {"TLS -fpic -shared" "-shared"
+ "-mtune=itanium1" {tlspic1.s tlspic2.s}
+ {{readelf -WSsrl tlspic.rd} {objdump -drj.text tlspic.dd}
+ {objdump -sj.got tlspic.sd} {objdump -sj.tdata tlspic.td}}
+ "libtlspic.so"}
+ {"Helper shared library" "-shared"
+ "" {tlslib.s} {} "libtlslib.so"}
+ {"TLS -fpic and -fno-pic exec"
+ "tmpdir/libtlslib.so" "-mtune=itanium1" {tlsbinpic.s tlsbin.s}
+ {{readelf -WSsrl tlsbin.rd} {objdump -drj.text tlsbin.dd}
+ {objdump -sj.got tlsbin.sd} {objdump -sj.tdata tlsbin.td}}
+ "tlsbin"}
+ {"TLS in debug sections" ""
+ "" {tlsg.s}
+ {{objdump -sj.debug_foobar tlsg.sd}} "tlsg"}
+}
+
+run_ld_link_tests $ia64tests
+
+set test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
+foreach t $test_list {
+ # We need to strip the ".d", but can leave the dirname.
+ verbose [file rootname $t]
+ run_dump_test [file rootname $t]
+}
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/line.exp b/binutils-2.21/ld/testsuite/ld-ia64/line.exp
new file mode 100644
index 0000000..2ebc7d6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/line.exp
@@ -0,0 +1,57 @@
+# Test that the linker reports undefined symbol line number correctly.
+#
+# Copyright 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+if { !([istarget "ia64-*-elf*"]
+ || [istarget "ia64-*-linux*"]) } {
+ return
+}
+
+set testline "undefined line"
+
+if ![ld_assemble $as "-x $srcdir/$subdir/undefined.s" tmpdir/undefined.o] {
+ verbose "Unable to assemble test file!" 1
+ unresolved $testline
+ return
+}
+
+remote_file host delete "tmpdir/undefined"
+
+# Using -e start prevents the SunOS linker from trying to build a
+# shared library.
+send_log "$ld -e start -o tmpdir/undefined tmpdir/undefined.o\n"
+set exec_output [run_host_cmd "$ld" "-e start -o tmpdir/undefined tmpdir/undefined.o"]
+
+send_log "$exec_output\n"
+verbose "$exec_output"
+
+proc checkund { string testname } {
+ global exec_output
+
+ if [string match "*$string*" $exec_output] {
+ pass $testname
+ } else {
+ fail $testname
+ }
+}
+
+set ml "undefined.c:9: undefined reference to `*this_function_is_not_defined'"
+
+checkund $ml $testline
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/link-order.d b/binutils-2.21/ld/testsuite/ld-ia64/link-order.d
new file mode 100644
index 0000000..53a3794
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/link-order.d
@@ -0,0 +1,9 @@
+#source: ../../../binutils/testsuite/binutils-all/link-order.s
+#ld: -r
+#readelf: -S --wide
+
+#...
+ \[[ ]+1\] \.text.*[ \t]+PROGBITS[ \t0-9a-f]+AX.*
+#...
+ \[[ 0-9]+\] \.IA_64.unwind[ \t]+IA_64_UNWIND[ \t0-9a-f]+AL[ \t]+1[ \t]+1[ \t]+8
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/local1.d b/binutils-2.21/ld/testsuite/ld-ia64/local1.d
new file mode 100644
index 0000000..728faa2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/local1.d
@@ -0,0 +1,9 @@
+#as: -x
+#ld: -shared --version-script local1.map
+#readelf: -s --wide
+
+#...
+ .*: [0-9a-f]* +[0-9a-f]+ +FUNC +LOCAL +DEFAULT +[0-9] +hidden
+#...
+ .*: [0-9a-f]* +[0-9a-f]+ +FUNC +LOCAL +DEFAULT +[0-9] +hidden
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/local1.map b/binutils-2.21/ld/testsuite/ld-ia64/local1.map
new file mode 100644
index 0000000..904d025
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/local1.map
@@ -0,0 +1,6 @@
+{
+global:
+ *;
+local:
+ hidden;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/local1.s b/binutils-2.21/ld/testsuite/ld-ia64/local1.s
new file mode 100644
index 0000000..2eacae1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/local1.s
@@ -0,0 +1,21 @@
+ .pred.safe_across_calls p1-p5,p16-p63
+ .global foo#
+ .section .sdata,"aw",@progbits
+ .align 8
+ .type foo#, @object
+ .size foo#, 8
+foo:
+ data8 @fptr(hidden#)
+ .text
+ .align 16
+ .global hidden#
+ .hidden hidden#
+ .proc hidden#
+hidden:
+ .prologue
+ .body
+ .bbb
+ nop 0
+ nop 0
+ br.ret.sptk.many b0
+ .endp hidden#
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/merge1.d b/binutils-2.21/ld/testsuite/ld-ia64/merge1.d
new file mode 100644
index 0000000..39882b8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/merge1.d
@@ -0,0 +1,10 @@
+#source: merge1.s
+#as: -x
+#ld: -shared
+#objdump: -d
+
+#...
+0+1e0 <.text>:
+[ ]*[a-f0-9]+: 0b 60 80 02 00 24 \[MMI\] addl r12=32,r1;;
+[ ]*[a-f0-9]+: c0 c0 04 00 48 00 addl r12=24,r1
+[ ]*[a-f0-9]+: 00 00 04 00 nop.i 0x0;;
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/merge1.s b/binutils-2.21/ld/testsuite/ld-ia64/merge1.s
new file mode 100644
index 0000000..8998db4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/merge1.s
@@ -0,0 +1,12 @@
+ .section .rodata.str1.8,"aMS", 1
+.LC1: .string "foo"
+.LC2: .string "foo"
+ .section .data.rel.local,"aw"
+ .quad .LC2
+ .section .rodata,"a"
+.LC3: .string "bar"
+ .balign 8
+ .space 0x400000
+ .text
+ addl r12=@ltoffx(.LC1),r1 ;;
+ addl r12=@ltoffx(.LC3),r1 ;;
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/merge2.d b/binutils-2.21/ld/testsuite/ld-ia64/merge2.d
new file mode 100644
index 0000000..dde3d09
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/merge2.d
@@ -0,0 +1,10 @@
+#source: merge2.s
+#as: -x
+#ld: -shared
+#objdump: -d
+
+#...
+0+1e0 <.text>:
+[ ]*[a-f0-9]+: 0b 60 80 02 00 24 \[MMI\] addl r12=32,r1;;
+[ ]*[a-f0-9]+: c0 c0 04 00 48 00 addl r12=24,r1
+[ ]*[a-f0-9]+: 00 00 04 00 nop.i 0x0;;
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/merge2.s b/binutils-2.21/ld/testsuite/ld-ia64/merge2.s
new file mode 100644
index 0000000..6c85ac2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/merge2.s
@@ -0,0 +1,12 @@
+ .section .rodata.str1.8,"aMS", 1
+.LC2: .string "foo"
+.LC1: .string "foo"
+ .section .data.rel.local,"aw"
+ .quad .LC2
+ .section .rodata,"a"
+.LC3: .string "bar"
+ .balign 8
+ .space 0x400000
+ .text
+ addl r12=@ltoffx(.LC1),r1 ;;
+ addl r12=@ltoffx(.LC3),r1 ;;
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/merge3.d b/binutils-2.21/ld/testsuite/ld-ia64/merge3.d
new file mode 100644
index 0000000..d0163f3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/merge3.d
@@ -0,0 +1,13 @@
+#source: merge3.s
+#as: -x
+#ld: -shared
+#objdump: -d
+
+#...
+0+210 <.text>:
+[ ]*[a-f0-9]+: 0b 60 80 02 00 24 \[MMI\] addl r12=32,r1;;
+[ ]*[a-f0-9]+: c0 40 05 00 48 00 addl r12=40,r1
+[ ]*[a-f0-9]+: 00 00 04 00 nop.i 0x0;;
+[ ]*[a-f0-9]+: 01 60 60 02 00 24 \[MII\] addl r12=24,r1
+[ ]*[a-f0-9]+: 00 00 00 02 00 00 nop.i 0x0
+[ ]*[a-f0-9]+: 00 00 04 00 nop.i 0x0;;
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/merge3.s b/binutils-2.21/ld/testsuite/ld-ia64/merge3.s
new file mode 100644
index 0000000..2442701
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/merge3.s
@@ -0,0 +1,16 @@
+ .section .rodata.str1.8,"aMS", 1
+.LC1: .string "foo"
+.LC2: .string "foo"
+.LC3: .string "bar"
+.LC4: .string "bar"
+ .section .data.rel.local,"aw"
+ .quad .LC2
+ .quad .LC3
+ .section .rodata,"a"
+.LC5: .string "mumble"
+ .balign 8
+ .space 0x400000
+ .text
+ addl r12=@ltoffx(.LC1),r1 ;;
+ addl r12=@ltoffx(.LC4),r1 ;;
+ addl r12=@ltoffx(.LC5),r1 ;;
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/merge4.d b/binutils-2.21/ld/testsuite/ld-ia64/merge4.d
new file mode 100644
index 0000000..0ed5621
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/merge4.d
@@ -0,0 +1,13 @@
+#source: merge4.s
+#as: -x
+#ld: -shared
+#objdump: -d
+
+#...
+0+240 <.text>:
+[ ]*[a-f0-9]+: 0b 60 80 02 00 24 \[MMI\] addl r12=32,r1;;
+[ ]*[a-f0-9]+: c0 40 05 00 48 00 addl r12=40,r1
+[ ]*[a-f0-9]+: 00 00 04 00 nop.i 0x0;;
+[ ]*[a-f0-9]+: 0b 60 c0 02 00 24 \[MMI\] addl r12=48,r1;;
+[ ]*[a-f0-9]+: c0 c0 04 00 48 00 addl r12=24,r1
+[ ]*[a-f0-9]+: 00 00 04 00 nop.i 0x0;;
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/merge4.s b/binutils-2.21/ld/testsuite/ld-ia64/merge4.s
new file mode 100644
index 0000000..c23b4d0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/merge4.s
@@ -0,0 +1,21 @@
+ .section .rodata.str1.8,"aMS", 1
+.LC1: .string "foo"
+.LC2: .string "foo"
+.LC3: .string "bar"
+.LC4: .string "bar"
+.LC5: .string "baz"
+.LC6: .string "baz"
+ .section .data.rel.local,"aw"
+ .quad .LC2
+ .quad .LC4
+ .quad .LC5
+ .section .rodata,"a"
+.LC7: .string "mumble"
+ .balign 8
+ .space 0x400000
+ .text
+ addl r12=@ltoffx(.LC1),r1 ;;
+ addl r12=@ltoffx(.LC3),r1 ;;
+ addl r12=@ltoffx(.LC6),r1 ;;
+ addl r12=@ltoffx(.LC7),r1 ;;
+
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/merge5.d b/binutils-2.21/ld/testsuite/ld-ia64/merge5.d
new file mode 100644
index 0000000..3adfa55
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/merge5.d
@@ -0,0 +1,16 @@
+#source: merge5.s
+#as: -x
+#ld: -shared
+#objdump: -d
+
+#...
+0+270 <.text>:
+[ ]*[a-f0-9]+: 0b 60 80 02 00 24 \[MMI\] addl r12=32,r1;;
+[ ]*[a-f0-9]+: c0 40 05 00 48 00 addl r12=40,r1
+[ ]*[a-f0-9]+: 00 00 04 00 nop.i 0x0;;
+[ ]*[a-f0-9]+: 0b 60 a0 02 00 24 \[MMI\] addl r12=40,r1;;
+[ ]*[a-f0-9]+: c0 c0 05 00 48 00 addl r12=56,r1
+[ ]*[a-f0-9]+: 00 00 04 00 nop.i 0x0;;
+[ ]*[a-f0-9]+: 01 60 60 02 00 24 \[MII\] addl r12=24,r1
+[ ]*[a-f0-9]+: 00 00 00 02 00 00 nop.i 0x0
+[ ]*[a-f0-9]+: 00 00 04 00 nop.i 0x0;;
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/merge5.s b/binutils-2.21/ld/testsuite/ld-ia64/merge5.s
new file mode 100644
index 0000000..81428c4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/merge5.s
@@ -0,0 +1,24 @@
+ .section .rodata.str1.8,"aMS", 1
+.LC1: .string "foo"
+.LC2: .string "foo"
+.LC3: .string "bar"
+.LC4: .string "bar"
+.LC5: .string "bar"
+.LC6: .string "bar"
+.LC7: .string "baz"
+.LC8: .string "baz"
+ .section .data.rel.local,"aw"
+ .quad .LC2
+ .quad .LC4
+ .quad .LC6
+ .quad .LC7
+ .section .rodata,"a"
+.LC9: .string "mumble"
+ .balign 8
+ .space 0x400000
+ .text
+ addl r12=@ltoffx(.LC1),r1 ;;
+ addl r12=@ltoffx(.LC3),r1 ;;
+ addl r12=@ltoffx(.LC5),r1 ;;
+ addl r12=@ltoffx(.LC8),r1 ;;
+ addl r12=@ltoffx(.LC9),r1 ;;
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/tlsbin.dd b/binutils-2.21/ld/testsuite/ld-ia64/tlsbin.dd
new file mode 100644
index 0000000..1c5bc2f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/tlsbin.dd
@@ -0,0 +1,74 @@
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as:
+#ld: -shared
+#objdump: -drj.text
+#target: ia64-*-*
+
+.*: +file format elf..-ia64-.*
+
+Disassembly of section .text:
+
+40+1000 <fn2>:
+40+1000: 10 10 15 06 80 05[ ]+\[MIB\][ ]+alloc r34=ar.pfs,5,3,0
+40+1006: 10 02 00 62 00 00[ ]+mov r33=b0
+40+100c: 00 00 00 20[ ]+nop.b 0x0
+40+1010: 0d 70 .0 0. 00 24[ ]+\[MFI\][ ]+addl r14=(24|32|40|48|56|64),r1
+40+1016: 00 00 00 02 00 e0[ ]+nop.f 0x0
+40+101c: .1 0. 00 90[ ]+addl r15=(24|32|40|48|56|64),r1;;
+40+1020: 19 18 01 1c 18 10[ ]+\[MMB\][ ]+ld8 r35=\[r14\]
+40+1026: 40 02 3c 30 20 00[ ]+ld8 r36=\[r15\]
+40+102c: [0-9a-f ]+br.call.sptk.many b0=[0-9a-f]+ <.*>;;
+40+1030: 0d 70 .0 0. 00 24[ ]+\[MFI\][ ]+addl r14=(24|32|40|48|56|64),r1
+40+1036: 00 00 00 02 00 e0[ ]+nop.f 0x0
+40+103c: .1 0. 00 90[ ]+addl r15=(24|32|40|48|56|64),r1;;
+40+1040: 19 18 01 1c 18 10[ ]+\[MMB\][ ]+ld8 r35=\[r14\]
+40+1046: 40 02 3c 30 20 00[ ]+ld8 r36=\[r15\]
+40+104c: [0-9a-f ]+br.call.sptk.many b0=[0-9a-f]+ <.*>;;
+40+1050: 0d 70 .0 0. 00 24[ ]+\[MFI\][ ]+addl r14=(24|32|40|48|56|64),r1
+40+1056: 00 00 00 02 00 80[ ]+nop.f 0x0
+40+105c: 14 02 00 90[ ]+mov r36=33;;
+40+1060: 1d 18 01 1c 18 10[ ]+\[MFB\][ ]+ld8 r35=\[r14\]
+40+1066: 00 00 00 02 00 00[ ]+nop.f 0x0
+40+106c: [0-9a-f ]+br.call.sptk.many b0=[0-9a-f]+ <.*>;;
+40+1070: 0d 70 .0 0. 00 24[ ]+\[MFI\][ ]+addl r14=(24|32|40|48|56|64),r1
+40+1076: 00 00 00 02 00 80[ ]+nop.f 0x0
+40+107c: 04 00 00 84[ ]+mov r36=r0;;
+40+1080: 1d 18 01 1c 18 10[ ]+\[MFB\][ ]+ld8 r35=\[r14\]
+40+1086: 00 00 00 02 00 00[ ]+nop.f 0x0
+40+108c: [0-9a-f ]+br.call.sptk.many b0=[0-9a-f]+ <.*>;;
+40+1090: 0b 10 00 10 00 21[ ]+\[MMI\][ ]+mov r2=r8;;
+40+1096: e0 00 0a 00 48 e0[ ]+addl r14=64,r2
+40+109c: 61 14 00 90[ ]+addl r15=70,r2;;
+40+10a0: 05 70 2c 11 00 21[ ]+\[MLX\][ ]+adds r14=75,r8
+40+10a6: 00 00 00 00 00 e0[ ]+movl r15=0x4d;;
+40+10ac: d1 04 00 60
+40+10b0: 0a 78 3c 10 00 20[ ]+\[MMI\][ ]+add r15=r15,r8;;
+40+10b6: 00 00 00 02 00 00[ ]+nop.m 0x0
+40+10bc: 20 02 aa 00[ ]+mov.i ar.pfs=r34
+40+10c0: 11 00 00 00 01 00[ ]+\[MIB\][ ]+nop.m 0x0
+40+10c6: 00 08 05 80 03 80[ ]+mov b0=r33
+40+10cc: 08 00 84 00[ ]+br.ret.sptk.many b0;;
+
+40+10d0 <_start>:
+40+10d0: 0b 70 .0 0. 00 24[ ]+\[MMI\][ ]+addl r14=(24|32|40|48|56|64),r1;;
+40+10d6: e0 00 38 30 20 00[ ]+ld8 r14=\[r14\]
+40+10dc: 00 00 04 00[ ]+nop.i 0x0;;
+40+10e0: 0b 70 38 1a 00 20[ ]+\[MMI\][ ]+add r14=r14,r13;;
+40+10e6: e0 .0 0. 00 48 00[ ]+addl r14=(24|32|40|48|56|64),r1
+40+10ec: 00 00 04 00[ ]+nop.i 0x0;;
+40+10f0: 0b 70 00 1c 18 10[ ]+\[MMI\][ ]+ld8 r14=\[r14\];;
+40+10f6: e0 70 34 00 40 00[ ]+add r14=r14,r13
+40+10fc: 00 00 04 00[ ]+nop.i 0x0;;
+40+1100: 0b 10 00 1a 00 21[ ]+\[MMI\][ ]+mov r2=r13;;
+40+1106: e0 80 08 00 48 e0[ ]+addl r14=16,r2
+40+110c: 61 11 04 90[ ]+addl r15=150,r2;;
+40+1110: 05 70 5c 1b 00 21[ ]+\[MLX\][ ]+adds r14=87,r13
+40+1116: 00 00 00 00 00 e0[ ]+movl r15=0x95;;
+40+111c: 51 01 04 60
+40+1120: 0a 78 3c 1a 00 20[ ]+\[MMI\][ ]+add r15=r15,r13;;
+40+1126: 00 00 00 02 00 00[ ]+nop.m 0x0
+40+112c: 00 00 04 00[ ]+nop.i 0x0
+40+1130: 1d 00 00 00 01 00[ ]+\[MFB\][ ]+nop.m 0x0
+40+1136: 00 00 00 02 00 80[ ]+nop.f 0x0
+40+113c: 08 00 84 00[ ]+br.ret.sptk.many b0;;
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/tlsbin.rd b/binutils-2.21/ld/testsuite/ld-ia64/tlsbin.rd
new file mode 100644
index 0000000..0ad3a77
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/tlsbin.rd
@@ -0,0 +1,136 @@
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as:
+#ld: -shared
+#readelf: -WSsrl
+#target: ia64-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 00 +0 +0 +0
+ +\[[ 0-9]+\] .interp +.*
+ +\[[ 0-9]+\] .hash +.*
+ +\[[ 0-9]+\] .dynsym +.*
+ +\[[ 0-9]+\] .dynstr +.*
+ +\[[ 0-9]+\] .rela.dyn +.*
+ +\[[ 0-9]+\] .rela.IA_64.pltoff +.*
+ +\[[ 0-9]+\] .plt +.*
+ +\[[ 0-9]+\] .text +PROGBITS +40+1000 0+1000 0+140 00 +AX +0 +0 4096
+ +\[[ 0-9]+\] .IA_64.unwind_info +.*
+ +\[[ 0-9]+\] .IA_64.unwind +.*
+ +\[[ 0-9]+\] .tdata +PROGBITS +60+1[0-9a-f]+ 0+1[0-9a-f]+ 0+60 00 WAT +0 +0 +4
+ +\[[ 0-9]+\] .tbss +NOBITS +60+1[0-9a-f]+ 0+1[0-9a-f]+ 0+40 00 WAT +0 +0 +1
+ +\[[ 0-9]+\] .dynamic +DYNAMIC +60+1[0-9a-f]+ 0+1[0-9a-f]+ 0+150 10 +WA +4 +0 +8
+ +\[[ 0-9]+\] .got +PROGBITS +60+1318 0+1318 0+48 00 WAp +0 +0 +8
+ +\[[ 0-9]+\] .IA_64.pltoff +.*
+ +\[[ 0-9]+\] .shstrtab +.*
+ +\[[ 0-9]+\] .symtab +.*
+ +\[[ 0-9]+\] .strtab +.*
+#...
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x40+10d0
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +PHDR +0x0+40 0x40+40 0x40+40 0x0+188 0x0+188 R E 0x8
+ +INTERP +0x0+1c8 0x40+1c8 0x40+1c8 0x[0-9a-f]+ 0x[0-9a-f]+ R +0x1
+.*Requesting program interpreter.*
+ +LOAD +0x0+ 0x40+ 0x40+ 0x0+1[0-9a-f]+ 0x0+1[0-9a-f]+ R E 0x10000
+ +LOAD +0x0+1[0-9a-f]+ 0x60+1[0-9a-f]+ 0x60+1[0-9a-f]+ 0x0+0[0-9a-f]+ 0x0+0[0-9a-f]+ RW +0x10000
+ +DYNAMIC +0x0+1[0-9a-f]+ 0x60+1[0-9a-f]+ 0x60+1[0-9a-f]+ 0x0+150 0x0+150 RW +0x8
+ +TLS +0x0+1[0-9a-f]+ 0x60+1[0-9a-f]+ 0x60+1[0-9a-f]+ 0x0+60 0x0+a0 R +0x4
+ +IA_64_UNWIND .* R +0x8
+#...
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 3 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_IA64_TPREL64LSB +0+ sG2 \+ 0
+[0-9a-f ]+R_IA64_DTPMOD64LSB +0+ sG1 \+ 0
+[0-9a-f ]+R_IA64_DTPREL64LSB +0+ sG1 \+ 0
+
+Relocation section '.rela.IA_64.pltoff' at offset 0x[0-9a-f]+ contains 1 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_IA64_IPLTLSB +0+ __tls_get_addr \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND *
+.* TLS +GLOBAL +DEFAULT +UND sG2
+.* FUNC +GLOBAL +DEFAULT +UND __tls_get_addr
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* TLS +GLOBAL +DEFAULT +UND sG1
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND *
+.* SECTION +LOCAL +DEFAULT +1 *
+.* SECTION +LOCAL +DEFAULT +2 *
+.* SECTION +LOCAL +DEFAULT +3 *
+.* SECTION +LOCAL +DEFAULT +4 *
+.* SECTION +LOCAL +DEFAULT +5 *
+.* SECTION +LOCAL +DEFAULT +6 *
+.* SECTION +LOCAL +DEFAULT +7 *
+.* SECTION +LOCAL +DEFAULT +8 *
+.* SECTION +LOCAL +DEFAULT +9 *
+.* SECTION +LOCAL +DEFAULT +10 *
+.* SECTION +LOCAL +DEFAULT +11 *
+.* SECTION +LOCAL +DEFAULT +12 *
+.* SECTION +LOCAL +DEFAULT +13 *
+.* SECTION +LOCAL +DEFAULT +14 *
+.* SECTION +LOCAL +DEFAULT +15 *
+.* TLS +LOCAL +DEFAULT +11 sl1
+.* TLS +LOCAL +DEFAULT +11 sl2
+.* TLS +LOCAL +DEFAULT +11 sl3
+.* TLS +LOCAL +DEFAULT +11 sl4
+.* TLS +LOCAL +DEFAULT +11 sl5
+.* TLS +LOCAL +DEFAULT +11 sl6
+.* TLS +LOCAL +DEFAULT +11 sl7
+.* TLS +LOCAL +DEFAULT +11 sl8
+.* TLS +LOCAL +DEFAULT +12 bl1
+.* TLS +LOCAL +DEFAULT +12 bl2
+.* TLS +LOCAL +DEFAULT +12 bl3
+.* TLS +LOCAL +DEFAULT +12 bl4
+.* TLS +LOCAL +DEFAULT +12 bl5
+.* TLS +LOCAL +DEFAULT +12 bl6
+.* TLS +LOCAL +DEFAULT +12 bl7
+.* TLS +LOCAL +DEFAULT +12 bl8
+.* OBJECT +LOCAL +DEFAULT +13 _DYNAMIC
+.* OBJECT +LOCAL +DEFAULT +14 _GLOBAL_OFFSET_TABLE_
+.* TLS +GLOBAL +DEFAULT +11 sg8
+.* TLS +GLOBAL +DEFAULT +12 bg8
+.* TLS +GLOBAL +DEFAULT +12 bg6
+.* TLS +GLOBAL +DEFAULT +12 bg3
+.* TLS +GLOBAL +DEFAULT +11 sg3
+.* TLS +GLOBAL +HIDDEN +11 sh3
+.* TLS +GLOBAL +DEFAULT +UND sG2
+.* TLS +GLOBAL +DEFAULT +11 sg4
+.* TLS +GLOBAL +DEFAULT +11 sg5
+.* TLS +GLOBAL +DEFAULT +12 bg5
+.* FUNC +GLOBAL +DEFAULT +UND __tls_get_addr
+.* TLS +GLOBAL +HIDDEN +11 sh7
+.* TLS +GLOBAL +HIDDEN +11 sh8
+.* TLS +GLOBAL +DEFAULT +11 sg1
+.* FUNC +GLOBAL +DEFAULT +8 _start
+.* TLS +GLOBAL +HIDDEN +11 sh4
+.* TLS +GLOBAL +DEFAULT +12 bg7
+.* TLS +GLOBAL +HIDDEN +11 sh5
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* FUNC +GLOBAL +DEFAULT +8 fn2
+.* TLS +GLOBAL +DEFAULT +11 sg2
+.* TLS +GLOBAL +DEFAULT +UND sG1
+.* TLS +GLOBAL +HIDDEN +11 sh1
+.* TLS +GLOBAL +DEFAULT +11 sg6
+.* TLS +GLOBAL +DEFAULT +11 sg7
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+.* TLS +GLOBAL +HIDDEN +11 sh2
+.* TLS +GLOBAL +HIDDEN +11 sh6
+.* TLS +GLOBAL +DEFAULT +12 bg2
+.* TLS +GLOBAL +DEFAULT +12 bg1
+.* TLS +GLOBAL +DEFAULT +12 bg4
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/tlsbin.s b/binutils-2.21/ld/testsuite/ld-ia64/tlsbin.s
new file mode 100644
index 0000000..7b5f34a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/tlsbin.s
@@ -0,0 +1,54 @@
+ .section ".tbss", "awT", @nobits
+ .globl bg1, bg2, bg3, bg4, bg5, bg6, bg7, bg8
+bg1: .space 4
+bg2: .space 4
+bg3: .space 4
+bg4: .space 4
+bg5: .space 4
+bg6: .space 4
+bg7: .space 4
+bg8: .space 4
+bl1: .space 4
+bl2: .space 4
+bl3: .space 4
+bl4: .space 4
+bl5: .space 4
+bl6: .space 4
+bl7: .space 4
+bl8: .space 4
+ .explicit
+ .pred.safe_across_calls p1-p5,p16-p63
+ .text
+ .globl _start#
+ .proc _start#
+_start:
+ /* IE */
+ addl r14 = @ltoff(@tprel(sG2#)), gp
+ ;;
+ ld8 r14 = [r14]
+ ;;
+ add r14 = r14, r13
+ ;;
+
+ /* IE against global symbol in exec */
+ addl r14 = @ltoff(@tprel(bl1#)), gp
+ ;;
+ ld8 r14 = [r14]
+ ;;
+ add r14 = r14, r13
+ ;;
+
+ /* LE */
+ mov r2 = r13
+ ;;
+ addl r14 = @tprel(sg1#), r2
+ addl r15 = @tprel(bl2#) + 2, r2
+ ;;
+ adds r14 = @tprel(sh2#) + 3, r13
+ movl r15 = @tprel(bl2#) + 1
+ ;;
+ add r15 = r15, r13
+ ;;
+
+ br.ret.sptk.many b0
+ .endp _start#
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/tlsbin.sd b/binutils-2.21/ld/testsuite/ld-ia64/tlsbin.sd
new file mode 100644
index 0000000..411eedb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/tlsbin.sd
@@ -0,0 +1,15 @@
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as:
+#ld: -shared
+#objdump: -sj.got
+#target: ia64-*-*
+
+.*: +file format elf..-ia64-.*
+
+Contents of section .got:
+ (60+)?1318 0+ 0+ 0+ 0+ .*
+ (60+)?1328 0+ 0+ 0+ 0+ .*
+ (60+)?1338 0+ 0+ 0+ 0+ .*
+ (60+)?1348 (00|01|24|90)000000 0+ (00|01|24|90)000000 0+ .*
+ (60+)?1358 (00|01|24|90)000000 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/tlsbin.td b/binutils-2.21/ld/testsuite/ld-ia64/tlsbin.td
new file mode 100644
index 0000000..1e724e7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/tlsbin.td
@@ -0,0 +1,16 @@
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as:
+#ld: -shared
+#objdump: -sj.tdata
+#target: ia64-*-*
+
+.*: +file format elf..-ia64-.*
+
+Contents of section .tdata:
+ (60+)?1[0-9a-f]+ 11000000 12000000 13000000 14000000 .*
+ (60+)?1[0-9a-f]+ 15000000 16000000 17000000 18000000 .*
+ (60+)?1[0-9a-f]+ 41000000 42000000 43000000 44000000 .*
+ (60+)?1[0-9a-f]+ 45000000 46000000 47000000 48000000 .*
+ (60+)?1[0-9a-f]+ 01010000 02010000 03010000 04010000 .*
+ (60+)?1[0-9a-f]+ 05010000 06010000 07010000 08010000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/tlsbinpic.s b/binutils-2.21/ld/testsuite/ld-ia64/tlsbinpic.s
new file mode 100644
index 0000000..f061343
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/tlsbinpic.s
@@ -0,0 +1,97 @@
+ /* Force .data aligned to 4K, so that .got very likely gets at
+ 0x60000000000031b0 (0x60 bytes .tdata and 0x150 bytes
+ .dynamic). */
+ .data
+ .balign 4096
+ .section ".tdata", "awT", @progbits
+ .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
+ .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+ .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+sg1: .long 17
+sg2: .long 18
+sg3: .long 19
+sg4: .long 20
+sg5: .long 21
+sg6: .long 22
+sg7: .long 23
+sg8: .long 24
+sl1: .long 65
+sl2: .long 66
+sl3: .long 67
+sl4: .long 68
+sl5: .long 69
+sl6: .long 70
+sl7: .long 71
+sl8: .long 72
+sh1: .long 257
+sh2: .long 258
+sh3: .long 259
+sh4: .long 260
+sh5: .long 261
+sh6: .long 262
+sh7: .long 263
+sh8: .long 264
+ .explicit
+ .pred.safe_across_calls p1-p5,p16-p63
+ /* Force .text aligned to 4K, so it very likely gets at
+ 0x4000000000001000. */
+ .text
+ .balign 4096
+ .globl fn2#
+ .proc fn2#
+fn2:
+ .prologue 12, 33
+ .mib
+ .save ar.pfs, r34
+ alloc r34 = ar.pfs, 0, 3, 2, 0
+ .save rp, r33
+ mov r33 = b0
+
+ /* GD */
+ addl r14 = @ltoff(@dtpmod(sG1#)), gp
+ addl r15 = @ltoff(@dtprel(sG1#)), gp
+ ;;
+ ld8 out0 = [r14]
+ ld8 out1 = [r15]
+ br.call.sptk.many b0 = __tls_get_addr#
+ ;;
+
+ /* GD against local symbol */
+ addl r14 = @ltoff(@dtpmod(sl2#)), gp
+ addl r15 = @ltoff(@dtprel(sl2#)), gp
+ ;;
+ ld8 out0 = [r14]
+ ld8 out1 = [r15]
+ br.call.sptk.many b0 = __tls_get_addr#
+ ;;
+
+ /* LD */
+ addl r14 = @ltoff(@dtpmod(sl1#)), gp
+ addl out1 = @dtprel(sl1#) + 1, r0
+ ;;
+ ld8 out0 = [r14]
+ br.call.sptk.many b0 = __tls_get_addr#
+ ;;
+
+ /* LD with 4 variables variables */
+ addl r14 = @ltoff(@dtpmod(sh1#)), gp
+ mov out1 = r0
+ ;;
+ ld8 out0 = [r14]
+ br.call.sptk.many b0 = __tls_get_addr#
+ ;;
+ mov r2 = r8
+ ;;
+ addl r14 = @dtprel(sh1#), r2
+ addl r15 = @dtprel(sh2#) + 2, r2
+ ;;
+ adds r14 = @dtprel(sh3#) + 3, r8
+ movl r15 = @dtprel(sh4#) + 1
+ ;;
+ add r15 = r15, r8
+ ;;
+
+ mov ar.pfs = r34
+ mov b0 = r33
+ br.ret.sptk.many b0
+ .endp fn2#
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/tlsg.s b/binutils-2.21/ld/testsuite/ld-ia64/tlsg.s
new file mode 100644
index 0000000..fa3fce0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/tlsg.s
@@ -0,0 +1,14 @@
+ .section .tbss,"awT",@nobits
+ .align 4
+ .skip 24
+ .type a#,@object
+ .size a#,4
+a:
+ data4 0
+ .text
+ .globl _start#
+ .proc _start#
+_start:
+ .endp _start#
+ .section .debug_foobar
+ data8 @dtprel(a#)
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/tlsg.sd b/binutils-2.21/ld/testsuite/ld-ia64/tlsg.sd
new file mode 100644
index 0000000..67bc9cd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/tlsg.sd
@@ -0,0 +1,10 @@
+#source: tlsg.s
+#as:
+#ld:
+#objdump: -sj.debug_foobar
+#target: ia64-*-*
+
+.*: +file format elf..-ia64-.*
+
+Contents of section .debug_foobar:
+ 0+ 18000000 0+ +.*
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/tlslib.s b/binutils-2.21/ld/testsuite/ld-ia64/tlslib.s
new file mode 100644
index 0000000..d0e63fe
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/tlslib.s
@@ -0,0 +1,18 @@
+ .section ".tdata", "awT", @progbits
+ .globl sG1, sG2, sG3, sG4, sG5, sG6, sG7, sG8
+sG1: .long 513
+sG2: .long 514
+sG3: .long 515
+sG4: .long 516
+sG5: .long 517
+sG6: .long 518
+sG7: .long 519
+sG8: .long 520
+
+ .text
+ /* Dummy. */
+ .globl __tls_get_addr#
+ .proc __tls_get_addr#
+__tls_get_addr:
+ br.ret.sptk.many b0
+ .endp __tls_get_addr#
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/tlspic.dd b/binutils-2.21/ld/testsuite/ld-ia64/tlspic.dd
new file mode 100644
index 0000000..32850f0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/tlspic.dd
@@ -0,0 +1,64 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as:
+#ld:
+#objdump: -drj.text
+#target: ia64-*-*
+
+.*: +file format elf..-ia64-.*
+
+Disassembly of section .text:
+
+0+1000 <fn1>:
+ +1000: 10 10 15 06 80 05[ ]+\[MIB\] +alloc r34=ar.pfs,5,3,0
+ +1006: 10 02 00 62 00 00[ ]+mov r33=b0
+ +100c: 00 00 00 20[ ]+nop.b 0x0
+ +1010: 0d 70 60 02 00 24[ ]+\[MFI\] +addl r14=24,r1
+ +1016: 00 00 00 02 00 e0[ ]+nop.f 0x0
+ +101c: 01 0a 00 90[ ]+addl r15=32,r1;;
+ +1020: 19 18 01 1c 18 10[ ]+\[MMB\] +ld8 r35=\[r14\]
+ +1026: 40 02 3c 30 20 00[ ]+ld8 r36=\[r15\]
+ +102c: [0-9a-f ]+br.call.sptk.many b0=[0-9a-f]+ <.*>;;
+ +1030: 0d 70 c0 02 00 24[ ]+\[MFI\] +addl r14=48,r1
+ +1036: 00 00 00 02 00 e0[ ]+nop.f 0x0
+ +103c: 01 0c 00 90[ ]+addl r15=64,r1;;
+ +1040: 19 18 01 1c 18 10[ ]+\[MMB\] +ld8 r35=\[r14\]
+ +1046: 40 02 3c 30 20 00[ ]+ld8 r36=\[r15\]
+ +104c: [0-9a-f ]+br.call.sptk.many b0=[0-9a-f]+ <.*>;;
+ +1050: 0d 70 c0 02 00 24[ ]+\[MFI\] +addl r14=48,r1
+ +1056: 00 00 00 02 00 80[ ]+nop.f 0x0
+ +105c: 14 02 00 90[ ]+mov r36=33;;
+ +1060: 1d 18 01 1c 18 10[ ]+\[MFB\] +ld8 r35=\[r14\]
+ +1066: 00 00 00 02 00 00[ ]+nop.f 0x0
+ +106c: [0-9a-f ]+br.call.sptk.many b0=[0-9a-f]+ <.*>;;
+ +1070: 0d 70 c0 02 00 24[ ]+\[MFI\] +addl r14=48,r1
+ +1076: 00 00 00 02 00 80[ ]+nop.f 0x0
+ +107c: 04 00 00 84[ ]+mov r36=r0;;
+ +1080: 1d 18 01 1c 18 10[ ]+\[MFB\] +ld8 r35=\[r14\]
+ +1086: 00 00 00 02 00 00[ ]+nop.f 0x0
+ +108c: [0-9a-f ]+br.call.sptk.many b0=[0-9a-f]+ <.*>;;
+ +1090: 0b 10 00 10 00 21[ ]+\[MMI\] +mov r2=r8;;
+ +1096: e0 00 0a 00 48 e0[ ]+addl r14=64,r2
+ +109c: 21 16 00 90[ ]+addl r15=98,r2;;
+ +10a0: 05 70 4c 11 00 21[ ]+\[MLX\] +adds r14=83,r8
+ +10a6: 00 00 00 00 00 e0[ ]+movl r15=0x71;;
+ +10ac: 11 07 00 60
+ +10b0: 0b 78 3c 10 00 20[ ]+\[MMI\] +add r15=r15,r8;;
+ +10b6: e0 40 05 00 48 00[ ]+addl r14=40,r1
+ +10bc: 00 00 04 00[ ]+nop.i 0x0;;
+ +10c0: 0b 78 00 1c 18 10[ ]+\[MMI\] +ld8 r15=\[r14\];;
+ +10c6: e0 78 34 00 40 00[ ]+add r14=r15,r13
+ +10cc: 00 00 04 00[ ]+nop.i 0x0;;
+ +10d0: 0d 70 20 03 00 24[ ]+\[MFI\] +addl r14=72,r1
+ +10d6: 00 00 00 02 00 e0[ ]+nop.f 0x0
+ +10dc: 81 0b 00 90[ ]+addl r15=56,r1;;
+ +10e0: 09 70 00 1c 18 10[ ]+\[MMI\] +ld8 r14=\[r14\]
+ +10e6: f0 00 3c 30 20 00[ ]+ld8 r15=\[r15\]
+ +10ec: 00 00 04 00[ ]+nop.i 0x0;;
+ +10f0: 02 70 38 1a 00 20[ ]+\[MII\] +add r14=r14,r13
+ +10f6: f0 78 34 00 40 00[ ]+add r15=r15,r13;;
+ +10fc: 20 02 aa 00[ ]+mov.i ar.pfs=r34
+ +1100: 11 00 00 00 01 00[ ]+\[MIB\] +nop.m 0x0
+ +1106: 00 08 05 80 03 80[ ]+mov b0=r33
+ +110c: 08 00 84 00[ ]+br.ret.sptk.many b0;;
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/tlspic.rd b/binutils-2.21/ld/testsuite/ld-ia64/tlspic.rd
new file mode 100644
index 0000000..8320365
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/tlspic.rd
@@ -0,0 +1,131 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as:
+#ld: -shared
+#readelf: -WSsrl
+#target: ia64-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 00 +0 +0 +0
+ +\[[ 0-9]+\] .hash +.*
+ +\[[ 0-9]+\] .dynsym +.*
+ +\[[ 0-9]+\] .dynstr +.*
+ +\[[ 0-9]+\] .rela.dyn +.*
+ +\[[ 0-9]+\] .rela.IA_64.pltoff +.*
+ +\[[ 0-9]+\] .plt +.*
+ +\[[ 0-9]+\] .text +PROGBITS +0+1000 0+1000 0+110 00 +AX +0 +0 4096
+ +\[[ 0-9]+\] .IA_64.unwind_info +.*
+ +\[[ 0-9]+\] .IA_64.unwind +.*
+ +\[[ 0-9]+\] .tdata +PROGBITS +0+11[0-9a-f]+ 0+1[0-9a-f]+ 0+60 00 WAT +0 +0 +4
+ +\[[ 0-9]+\] .tbss +NOBITS +0+11[0-9a-f]+ 0+1[0-9a-f]+ 0+20 00 WAT +0 +0 +1
+ +\[[ 0-9]+\] .dynamic +DYNAMIC +0+11[0-9a-f]+ 0+1[0-9a-f]+ 0+140 10 +WA +3 +0 +8
+ +\[[ 0-9]+\] .got +PROGBITS +0+112d8 0+12d8 0+50 00 WAp +0 +0 +8
+ +\[[ 0-9]+\] .IA_64.pltoff +.*
+ +\[[ 0-9]+\] .shstrtab +.*
+ +\[[ 0-9]+\] .symtab +.*
+ +\[[ 0-9]+\] .strtab +.*
+Key to Flags:
+#...
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x1000
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +LOAD +0x0+ 0x0+ 0x0+ 0x0+1[0-9a-f]+ 0x0+1[0-9a-f]+ R E 0x10000
+ +LOAD +0x0+1[0-9a-f]+ 0x0+11[0-9a-f]+ 0x0+11[0-9a-f]+ 0x0+0[0-9a-f]+ 0x0+0[0-9a-f]+ RW +0x10000
+ +DYNAMIC +0x0+1[0-9a-f]+ 0x0+11[0-9a-f]+ 0x0+11[0-9a-f]+ 0x0+140 0x0+140 RW +0x8
+ +TLS +0x0+1[0-9a-f]+ 0x0+11[0-9a-f]+ 0x0+11[0-9a-f]+ 0x0+60 0x0+80 R +0x4
+ +IA_64_UNWIND +0x0+1[0-9a-f]+ 0x0+1[0-9a-f]+ 0x0+1[0-9a-f]+ 0x0+18 0x0+18 R +0x8
+#...
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 6 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_IA64_DTPMOD64LSB +0+ sg1 \+ 0
+[0-9a-f ]+R_IA64_DTPREL64LSB +0+ sg1 \+ 0
+[0-9a-f ]+R_IA64_TPREL64LSB +0+4 sg2 \+ 0
+[0-9a-f ]+R_IA64_DTPMOD64LSB +0+
+[0-9a-f ]+R_IA64_TPREL64LSB +0+44
+[0-9a-f ]+R_IA64_TPREL64LSB +0+24
+
+Relocation section '.rela.IA_64.pltoff' at offset 0x[0-9a-f]+ contains 1 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_IA64_IPLTLSB +0+ __tls_get_addr \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND *
+.* TLS +GLOBAL +DEFAULT +10 sg8
+.* TLS +GLOBAL +DEFAULT +10 sg3
+.* TLS +GLOBAL +DEFAULT +10 sg4
+.* TLS +GLOBAL +DEFAULT +10 sg5
+.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr
+.* TLS +GLOBAL +DEFAULT +10 sg1
+.* FUNC +GLOBAL +DEFAULT +7 fn1
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* TLS +GLOBAL +DEFAULT +10 sg2
+.* TLS +GLOBAL +DEFAULT +10 sg6
+.* TLS +GLOBAL +DEFAULT +10 sg7
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size Type +Bind +Vis +Ndx Name
+.* NOTYPE +LOCAL +DEFAULT +UND *
+.* SECTION +LOCAL +DEFAULT +1 *
+.* SECTION +LOCAL +DEFAULT +2 *
+.* SECTION +LOCAL +DEFAULT +3 *
+.* SECTION +LOCAL +DEFAULT +4 *
+.* SECTION +LOCAL +DEFAULT +5 *
+.* SECTION +LOCAL +DEFAULT +6 *
+.* SECTION +LOCAL +DEFAULT +7 *
+.* SECTION +LOCAL +DEFAULT +8 *
+.* SECTION +LOCAL +DEFAULT +9 *
+.* SECTION +LOCAL +DEFAULT +10 *
+.* SECTION +LOCAL +DEFAULT +11 *
+.* SECTION +LOCAL +DEFAULT +12 *
+.* SECTION +LOCAL +DEFAULT +13 *
+.* SECTION +LOCAL +DEFAULT +14 *
+.* TLS +LOCAL +DEFAULT +10 sl1
+.* TLS +LOCAL +DEFAULT +10 sl2
+.* TLS +LOCAL +DEFAULT +10 sl3
+.* TLS +LOCAL +DEFAULT +10 sl4
+.* TLS +LOCAL +DEFAULT +10 sl5
+.* TLS +LOCAL +DEFAULT +10 sl6
+.* TLS +LOCAL +DEFAULT +10 sl7
+.* TLS +LOCAL +DEFAULT +10 sl8
+.* TLS +LOCAL +DEFAULT +11 sH1
+.* OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC
+.* TLS +LOCAL +DEFAULT +10 sh3
+.* TLS +LOCAL +DEFAULT +11 sH2
+.* TLS +LOCAL +DEFAULT +11 sH7
+.* TLS +LOCAL +DEFAULT +10 sh7
+.* TLS +LOCAL +DEFAULT +10 sh8
+.* TLS +LOCAL +DEFAULT +11 sH4
+.* TLS +LOCAL +DEFAULT +10 sh4
+.* TLS +LOCAL +DEFAULT +11 sH3
+.* TLS +LOCAL +DEFAULT +10 sh5
+.* TLS +LOCAL +DEFAULT +11 sH5
+.* TLS +LOCAL +DEFAULT +11 sH6
+.* TLS +LOCAL +DEFAULT +11 sH8
+.* TLS +LOCAL +DEFAULT +10 sh1
+.* OBJECT +LOCAL +DEFAULT +ABS _GLOBAL_OFFSET_TABLE_
+.* TLS +LOCAL +DEFAULT +10 sh2
+.* TLS +LOCAL +DEFAULT +10 sh6
+.* TLS +GLOBAL +DEFAULT +10 sg8
+.* TLS +GLOBAL +DEFAULT +10 sg3
+.* TLS +GLOBAL +DEFAULT +10 sg4
+.* TLS +GLOBAL +DEFAULT +10 sg5
+.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr
+.* TLS +GLOBAL +DEFAULT +10 sg1
+.* FUNC +GLOBAL +DEFAULT +7 fn1
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* TLS +GLOBAL +DEFAULT +10 sg2
+.* TLS +GLOBAL +DEFAULT +10 sg6
+.* TLS +GLOBAL +DEFAULT +10 sg7
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/tlspic.sd b/binutils-2.21/ld/testsuite/ld-ia64/tlspic.sd
new file mode 100644
index 0000000..7b03a08
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/tlspic.sd
@@ -0,0 +1,15 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as:
+#ld: -shared
+#objdump: -sj.got
+#target: ia64-*-*
+
+.*: +file format elf..-ia64-.*
+
+Contents of section .got:
+ 112d8 0+ 0+ 0+ 0+ .*
+ 112e8 0+ 0+ [0-9a-f]+ [0-9a-f]+ .*
+ 112f8 [0-9a-f]+ [0-9a-f]+ [0-9a-f]+ [0-9a-f]+ .*
+ 11308 [0-9a-f]+ [0-9a-f]+ [0-9a-f]+ [0-9a-f]+ .*
+ 11318 440+ 0+ [0-9a-f]+ [0-9a-f]+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/tlspic.td b/binutils-2.21/ld/testsuite/ld-ia64/tlspic.td
new file mode 100644
index 0000000..47b5b6c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/tlspic.td
@@ -0,0 +1,16 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as:
+#ld: -shared
+#objdump: -sj.tdata
+#target: ia64-*-*
+
+.*: +file format elf..-ia64-.*
+
+Contents of section .tdata:
+ 11[0-9a-f]+ 11000000 12000000 13000000 14000000 .*
+ 11[0-9a-f]+ 15000000 16000000 17000000 18000000 .*
+ 11[0-9a-f]+ 41000000 42000000 43000000 44000000 .*
+ 11[0-9a-f]+ 45000000 46000000 47000000 48000000 .*
+ 11[0-9a-f]+ 01010000 02010000 03010000 04010000 .*
+ 11[0-9a-f]+ 05010000 06010000 07010000 08010000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/tlspic1.s b/binutils-2.21/ld/testsuite/ld-ia64/tlspic1.s
new file mode 100644
index 0000000..5242d28
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/tlspic1.s
@@ -0,0 +1,114 @@
+ /* Force .data aligned to 4K, so .got very likely gets at 0x13190
+ (0x60 bytes .tdata and 0x130 bytes .dynamic) */
+ .data
+ .balign 4096
+ .section ".tdata", "awT", @progbits
+ .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
+ .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+ .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+sg1: .long 17
+sg2: .long 18
+sg3: .long 19
+sg4: .long 20
+sg5: .long 21
+sg6: .long 22
+sg7: .long 23
+sg8: .long 24
+sl1: .long 65
+sl2: .long 66
+sl3: .long 67
+sl4: .long 68
+sl5: .long 69
+sl6: .long 70
+sl7: .long 71
+sl8: .long 72
+sh1: .long 257
+sh2: .long 258
+sh3: .long 259
+sh4: .long 260
+sh5: .long 261
+sh6: .long 262
+sh7: .long 263
+sh8: .long 264
+ .explicit
+ .pred.safe_across_calls p1-p5,p16-p63
+ /* Force .text aligned to 4K, so it very likely gets at 0x1000. */
+ .text
+ .balign 4096
+ .globl fn1#
+ .proc fn1#
+fn1:
+ .prologue 12, 33
+ .mib
+ .save ar.pfs, r34
+ alloc r34 = ar.pfs, 0, 3, 2, 0
+ .save rp, r33
+ mov r33 = b0
+
+ /* GD */
+ addl r14 = @ltoff(@dtpmod(sg1#)), gp
+ addl r15 = @ltoff(@dtprel(sg1#)), gp
+ ;;
+ ld8 out0 = [r14]
+ ld8 out1 = [r15]
+ br.call.sptk.many b0 = __tls_get_addr#
+ ;;
+
+ /* GD against hidden symbol */
+ addl r14 = @ltoff(@dtpmod(sh2#)), gp
+ addl r15 = @ltoff(@dtprel(sh2#)), gp
+ ;;
+ ld8 out0 = [r14]
+ ld8 out1 = [r15]
+ br.call.sptk.many b0 = __tls_get_addr#
+ ;;
+
+ /* LD */
+ addl r14 = @ltoff(@dtpmod(sl1#)), gp
+ addl out1 = @dtprel(sl1#) + 1, r0
+ ;;
+ ld8 out0 = [r14]
+ br.call.sptk.many b0 = __tls_get_addr#
+ ;;
+
+ /* LD with 4 variables variables */
+ addl r14 = @ltoff(@dtpmod(sh1#)), gp
+ mov out1 = r0
+ ;;
+ ld8 out0 = [r14]
+ br.call.sptk.many b0 = __tls_get_addr#
+ ;;
+ mov r2 = r8
+ ;;
+ addl r14 = @dtprel(sh1#), r2
+ addl r15 = @dtprel(sH1#) + 2, r2
+ ;;
+ adds r14 = @dtprel(sh5#) + 3, r8
+ movl r15 = @dtprel(sH5#) + 1
+ ;;
+ add r15 = r15, r8
+ ;;
+
+ /* IE against global */
+ addl r14 = @ltoff(@tprel(sg2#)), gp
+ ;;
+ ld8 r15 = [r14]
+ ;;
+ add r14 = r15, r13
+ ;;
+
+ /* IE against local and hidden */
+ addl r14 = @ltoff(@tprel(sl2#)), gp
+ addl r15 = @ltoff(@tprel(sh2#)), gp
+ ;;
+ ld8 r14 = [r14]
+ ld8 r15 = [r15]
+ ;;
+ add r14 = r14, r13
+ add r15 = r15, r13
+ ;;
+
+ mov ar.pfs = r34
+ mov b0 = r33
+ br.ret.sptk.many b0
+ .endp fn1#
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/tlspic2.s b/binutils-2.21/ld/testsuite/ld-ia64/tlspic2.s
new file mode 100644
index 0000000..5513f9b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/tlspic2.s
@@ -0,0 +1,11 @@
+ .section ".tbss", "awT", @nobits
+ .globl sH1, sH2, sH3, sH4, sH5, sH6, sH7, sH8
+ .hidden sH1, sH2, sH3, sH4, sH5, sH6, sH7, sH8
+sH1: .space 4
+sH2: .space 4
+sH3: .space 4
+sH4: .space 4
+sH5: .space 4
+sH6: .space 4
+sH7: .space 4
+sH8: .space 4
diff --git a/binutils-2.21/ld/testsuite/ld-ia64/undefined.s b/binutils-2.21/ld/testsuite/ld-ia64/undefined.s
new file mode 100644
index 0000000..d563c62
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ia64/undefined.s
@@ -0,0 +1,152 @@
+ .file "undefined.c"
+ .pred.safe_across_calls p1-p5,p16-p63
+ .section .debug_abbrev,"",@progbits
+.Ldebug_abbrev0:
+ .section .debug_info,"",@progbits
+.Ldebug_info0:
+ .section .debug_line,"",@progbits
+.Ldebug_line0:
+ .text
+.Ltext0:
+ .align 16
+ .global function#
+ .proc function#
+function:
+[.LFB2:]
+ .file 1 "undefined.c"
+ .loc 1 8 0
+ .prologue 12, 32
+ .mii
+ .save ar.pfs, r33
+ alloc r33 = ar.pfs, 0, 3, 0, 0
+ .save rp, r32
+ mov r32 = b0
+ mov r34 = r1
+ .body
+ .loc 1 9 0
+ ;;
+ .mib
+ nop 0
+ nop 0
+ br.call.sptk.many b0 = this_function_is_not_defined#
+ .loc 1 10 0
+ ;;
+ .loc 1 9 0
+ .mmi
+ nop 0
+ mov r1 = r34
+ .loc 1 10 0
+ mov b0 = r32
+ .mib
+ nop 0
+ mov ar.pfs = r33
+ br.ret.sptk.many b0
+.LFE2:
+ .endp function#
+.Letext0:
+ .section .debug_info
+ data4.ua 0x4c
+ data2.ua 0x2
+ data4.ua @secrel(.Ldebug_abbrev0)
+ data1 0x8
+ .uleb128 0x1
+ data4.ua @secrel(.Ldebug_line0)
+ data8.ua .Letext0
+ data8.ua .Ltext0
+ data4.ua @secrel(.LASF0)
+ data1 0x1
+ data4.ua @secrel(.LASF1)
+ .uleb128 0x2
+ data1 0x1
+ data4.ua @secrel(.LASF2)
+ data1 0x1
+ data1 0x8
+ data4.ua 0x48
+ data8.ua .LFB2
+ data8.ua .LFE2
+ data1 0x2
+ data1 0x7c
+ .sleb128 16
+ .uleb128 0x3
+ stringz "int"
+ data1 0x4
+ data1 0x5
+ data1 0x0
+ .section .debug_abbrev
+ .uleb128 0x1
+ .uleb128 0x11
+ data1 0x1
+ .uleb128 0x10
+ .uleb128 0x6
+ .uleb128 0x12
+ .uleb128 0x1
+ .uleb128 0x11
+ .uleb128 0x1
+ .uleb128 0x25
+ .uleb128 0xe
+ .uleb128 0x13
+ .uleb128 0xb
+ .uleb128 0x3
+ .uleb128 0xe
+ data1 0x0
+ data1 0x0
+ .uleb128 0x2
+ .uleb128 0x2e
+ data1 0x0
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x11
+ .uleb128 0x1
+ .uleb128 0x12
+ .uleb128 0x1
+ .uleb128 0x40
+ .uleb128 0xa
+ data1 0x0
+ data1 0x0
+ .uleb128 0x3
+ .uleb128 0x24
+ data1 0x0
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x3e
+ .uleb128 0xb
+ data1 0x0
+ data1 0x0
+ data1 0x0
+ .section .debug_pubnames,"",@progbits
+ data4.ua 0x1b
+ data2.ua 0x2
+ data4.ua @secrel(.Ldebug_info0)
+ data4.ua 0x50
+ data4.ua 0x29
+ stringz "function"
+ data4.ua 0x0
+ .section .debug_aranges,"",@progbits
+ data4.ua 0x2c
+ data2.ua 0x2
+ data4.ua @secrel(.Ldebug_info0)
+ data1 0x8
+ data1 0x0
+ data2.ua 0x0
+ data2.ua 0x0
+ data8.ua .Ltext0
+ data8.ua .Letext0-.Ltext0
+ data8.ua 0x0
+ data8.ua 0x0
+ .section .debug_str,"MS",@progbits,1
+.LASF0:
+ stringz "GNU C 4.1.2"
+.LASF1:
+ stringz "undefined.c"
+.LASF2:
+ stringz "function"
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/binutils.exp b/binutils-2.21/ld/testsuite/ld-ifunc/binutils.exp
new file mode 100644
index 0000000..bd6c953
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/binutils.exp
@@ -0,0 +1,101 @@
+# Expect script for binutils tests
+# Copyright 2009 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by H.J. Lu (hongjiu.lu@intel.com)
+#
+
+# Make sure that binutils can correctly handle ld output in ELF with
+# STT_GNU_IFUNC symbols.
+
+# Run on Linux/x86 only.
+if { !([istarget "i?86-*-elf*"]
+ || ([istarget "i?86-*-linux*"]
+ && ![istarget "*-*-*aout*"]
+ && ![istarget "*-*-*oldld*"])
+ || [istarget "x86_64-*-linux*"]
+ || [istarget "amd64-*-linux*"]) } {
+ return
+}
+
+proc binutils_test { prog_name ld_options test } {
+ global as
+ global ld
+ global READELF
+ global objcopy
+ global strip
+ global srcdir
+ global subdir
+ global link_output
+
+ eval set prog \$$prog_name
+ set test_name "$prog_name $ld_options ($test)"
+
+ if { ![ld_assemble $as $srcdir/$subdir/$test.s tmpdir/$test.o ] } {
+ unresolved "$test_name"
+ return
+ }
+
+ if { ![ld_simple_link $ld tmpdir/$test "$ld_options tmpdir/$test.o"] } {
+ if { [string match "*not supported*" $link_output]
+ || [string match "*unrecognized option*" $link_output] } {
+ unsupported "$ld_options is not supported by this target"
+ } else {
+ unresolved "$test_name"
+ }
+ return
+ }
+
+ send_log "$READELF -l --wide tmpdir/$test > tmpdir/$test.exp\n"
+ set got [remote_exec host "$READELF -l --wide tmpdir/$test" "" "/dev/null" "tmpdir/$test.exp"]
+ if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
+ send_log "$got\n"
+ unresolved "$test_name"
+ return
+ }
+
+ send_log "$prog tmpdir/$test\n"
+ set got [remote_exec host "$prog tmpdir/$test"]
+ if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
+ send_log "$got\n"
+ fail "$test_name"
+ return
+ }
+
+ send_log "$READELF -l --wide tmpdir/$test > tmpdir/$test.out\n"
+ set got [remote_exec host "$READELF -l --wide tmpdir/$test" "" "/dev/null" "tmpdir/$test.out"]
+ if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
+ send_log "$got\n"
+ unresolved "$test_name"
+ return
+ }
+
+ if { [catch {exec cmp tmpdir/$test.exp tmpdir/$test.out}] } then {
+ send_log "tmpdir/$test.exp tmpdir/$test.out differ.\n"
+ fail "$test_name"
+ return
+ }
+
+ pass "$test_name"
+}
+
+binutils_test strip "" ifunc-4-x86
+binutils_test objcopy "" ifunc-4-x86
+binutils_test strip "" ifunc-4-local-x86
+binutils_test objcopy "" ifunc-4-local-x86
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-1-local-x86.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-1-local-x86.d
new file mode 100644
index 0000000..80cbe41
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-1-local-x86.d
@@ -0,0 +1,7 @@
+#ld: -shared
+#objdump: -dw
+#target: x86_64-*-* i?86-*-*
+
+#...
+[ \t0-9a-f]+:[ \t0-9a-f]+call[ \t0-9a-fq]+<\*ABS\*(\+0x200|)@plt>
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-1-local-x86.s b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-1-local-x86.s
new file mode 100644
index 0000000..bd2b5bb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-1-local-x86.s
@@ -0,0 +1,13 @@
+ .type foo, %gnu_indirect_function
+ .set __GI_foo, foo
+ .text
+ .type foo, @function
+foo:
+ ret
+ .size foo, .-foo
+.globl bar
+ .type bar, @function
+bar:
+ call __GI_foo@PLT
+ ret
+ .size bar, .-bar
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-1-x86.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-1-x86.d
new file mode 100644
index 0000000..1fa2d56
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-1-x86.d
@@ -0,0 +1,7 @@
+#ld: -shared
+#objdump: -dw
+#target: x86_64-*-* i?86-*-*
+
+#...
+[ \t0-9a-f]+:[ \t0-9a-f]+call[ \t0-9a-fq]+<\*ABS\*(\+0x220|)@plt>
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-1-x86.s b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-1-x86.s
new file mode 100644
index 0000000..82b64f0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-1-x86.s
@@ -0,0 +1,16 @@
+ .type foo, %gnu_indirect_function
+ .global __GI_foo
+ .hidden __GI_foo
+ .set __GI_foo, foo
+ .text
+.globl foo
+ .type foo, @function
+foo:
+ ret
+ .size foo, .-foo
+.globl bar
+ .type bar, @function
+bar:
+ call __GI_foo@PLT
+ ret
+ .size bar, .-bar
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-10-i386.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-10-i386.d
new file mode 100644
index 0000000..5f56b24
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-10-i386.d
@@ -0,0 +1,6 @@
+#ld: -m elf_i386 -e bar --gc-sections
+#as: --32
+#readelf: -r --wide
+#target: x86_64-*-* i?86-*-*
+
+There are no relocations in this file.
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-10-i386.s b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-10-i386.s
new file mode 100644
index 0000000..8411e81
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-10-i386.s
@@ -0,0 +1,20 @@
+ .section .text.foo,"ax",@progbits
+ .type foo, @function
+foo:
+ .global foo
+ movl ifunc@GOT(%ecx), %eax
+ movl ifunc@GOTOFF(%ecx), %eax
+ call ifunc@PLT
+ call ifunc
+ ret
+
+ .section .text.bar,"ax",@progbits
+ .type bar, @function
+bar:
+ .global bar
+ ret
+
+ .section .text.ifunc,"ax",@progbits
+ .type ifunc, @gnu_indirect_function
+ifunc:
+ ret
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-10-x86-64.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-10-x86-64.d
new file mode 100644
index 0000000..8ece379
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-10-x86-64.d
@@ -0,0 +1,6 @@
+#ld: -m elf_x86_64 -e bar --gc-sections
+#as: --64
+#readelf: -r --wide
+#target: x86_64-*-*
+
+There are no relocations in this file.
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-10-x86-64.s b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-10-x86-64.s
new file mode 100644
index 0000000..ea6f8c2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-10-x86-64.s
@@ -0,0 +1,20 @@
+ .section .text.foo,"ax",@progbits
+ .type foo, @function
+foo:
+ .global foo
+ movl ifunc@GOTPCREL(%rip), %eax
+ movl ifunc(%rip), %eax
+ call ifunc@PLT
+ call ifunc
+ ret
+
+ .section .text.bar,"ax",@progbits
+ .type bar, @function
+bar:
+ .global bar
+ ret
+
+ .section .text.ifunc,"ax",@progbits
+ .type ifunc, @gnu_indirect_function
+ifunc:
+ ret
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-11-i386.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-11-i386.d
new file mode 100644
index 0000000..5f56b24
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-11-i386.d
@@ -0,0 +1,6 @@
+#ld: -m elf_i386 -e bar --gc-sections
+#as: --32
+#readelf: -r --wide
+#target: x86_64-*-* i?86-*-*
+
+There are no relocations in this file.
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-11-i386.s b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-11-i386.s
new file mode 100644
index 0000000..06f5924
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-11-i386.s
@@ -0,0 +1,21 @@
+ .section .text.foo,"ax",@progbits
+ .type foo, @function
+foo:
+ .global foo
+ movl ifunc@GOT(%ecx), %eax
+ movl ifunc@GOTOFF(%ecx), %eax
+ call ifunc@PLT
+ call ifunc
+ ret
+
+ .section .text.bar,"ax",@progbits
+ .type bar, @function
+bar:
+ .global bar
+ ret
+
+ .section .text.ifunc,"ax",@progbits
+ .type ifunc, @gnu_indirect_function
+ .global ifunc
+ifunc:
+ ret
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-11-x86-64.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-11-x86-64.d
new file mode 100644
index 0000000..8ece379
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-11-x86-64.d
@@ -0,0 +1,6 @@
+#ld: -m elf_x86_64 -e bar --gc-sections
+#as: --64
+#readelf: -r --wide
+#target: x86_64-*-*
+
+There are no relocations in this file.
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-11-x86-64.s b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-11-x86-64.s
new file mode 100644
index 0000000..70d4fbf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-11-x86-64.s
@@ -0,0 +1,21 @@
+ .section .text.foo,"ax",@progbits
+ .type foo, @function
+foo:
+ .global foo
+ movl ifunc@GOTPCREL(%rip), %eax
+ movl ifunc(%rip), %eax
+ call ifunc@PLT
+ call ifunc
+ ret
+
+ .section .text.bar,"ax",@progbits
+ .type bar, @function
+bar:
+ .global bar
+ ret
+
+ .section .text.ifunc,"ax",@progbits
+ .type ifunc, @gnu_indirect_function
+ .global ifunc
+ifunc:
+ ret
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-i386.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-i386.d
new file mode 100644
index 0000000..7dfc1fe
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-i386.d
@@ -0,0 +1,8 @@
+#ld: -m elf_i386 -shared
+#as: --32
+#objdump: -dw
+#target: x86_64-*-* i?86-*-*
+
+#...
+[ \t0-9a-f]+:[ \t0-9a-f]+call[ \t0-9a-f]+<\*ABS\*@plt>
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-i386.s b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-i386.s
new file mode 100644
index 0000000..32d8812
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-i386.s
@@ -0,0 +1,21 @@
+ .type foo, %gnu_indirect_function
+ .global __GI_foo
+ .hidden __GI_foo
+ .set __GI_foo, foo
+ .text
+.globl foo
+ .type foo, @function
+foo:
+ ret
+ .size foo, .-foo
+.globl bar
+ .type bar, @function
+bar:
+ call .L6
+.L6:
+ popl %ebx
+ addl $_GLOBAL_OFFSET_TABLE_+[.-.L6], %ebx
+ call __GI_foo
+ leal __GI_foo@GOTOFF(%ebx), %eax
+ ret
+ .size bar, .-bar
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-local-i386.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-local-i386.d
new file mode 100644
index 0000000..7dfc1fe
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-local-i386.d
@@ -0,0 +1,8 @@
+#ld: -m elf_i386 -shared
+#as: --32
+#objdump: -dw
+#target: x86_64-*-* i?86-*-*
+
+#...
+[ \t0-9a-f]+:[ \t0-9a-f]+call[ \t0-9a-f]+<\*ABS\*@plt>
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-local-i386.s b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-local-i386.s
new file mode 100644
index 0000000..4e0b6ae
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-local-i386.s
@@ -0,0 +1,18 @@
+ .type foo, %gnu_indirect_function
+ .set __GI_foo, foo
+ .text
+ .type foo, @function
+foo:
+ ret
+ .size foo, .-foo
+.globl bar
+ .type bar, @function
+bar:
+ call .L6
+.L6:
+ popl %ebx
+ addl $_GLOBAL_OFFSET_TABLE_+[.-.L6], %ebx
+ call __GI_foo
+ leal __GI_foo@GOTOFF(%ebx), %eax
+ ret
+ .size bar, .-bar
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-local-x86-64.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-local-x86-64.d
new file mode 100644
index 0000000..f72359d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-local-x86-64.d
@@ -0,0 +1,9 @@
+#as: --64
+#ld: -shared -melf_x86_64
+#objdump: -dw
+#target: x86_64-*-*
+
+#...
+[ \t0-9a-f]+:[ \t0-9a-f]+call[ \t0-9a-fq]+<\*ABS\*\+0x220@plt>
+[ \t0-9a-f]+:[ \t0-9a-f]+lea[ \t]+.*\(%rip\),%rax.*[ \t0-9a-fq]+<\*ABS\*\+0x220@plt>
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-local-x86-64.s b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-local-x86-64.s
new file mode 100644
index 0000000..4137ff1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-local-x86-64.s
@@ -0,0 +1,17 @@
+ .type foo, %gnu_indirect_function
+ .global __GI_foo
+ .hidden __GI_foo
+ .set __GI_foo, foo
+ .text
+.globl foo
+ .type foo, @function
+foo:
+ ret
+ .size foo, .-foo
+.globl bar
+ .type bar, @function
+bar:
+ call __GI_foo
+ leaq __GI_foo(%rip), %rax
+ ret
+ .size bar, .-bar
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-x86-64.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-x86-64.d
new file mode 100644
index 0000000..f72359d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-x86-64.d
@@ -0,0 +1,9 @@
+#as: --64
+#ld: -shared -melf_x86_64
+#objdump: -dw
+#target: x86_64-*-*
+
+#...
+[ \t0-9a-f]+:[ \t0-9a-f]+call[ \t0-9a-fq]+<\*ABS\*\+0x220@plt>
+[ \t0-9a-f]+:[ \t0-9a-f]+lea[ \t]+.*\(%rip\),%rax.*[ \t0-9a-fq]+<\*ABS\*\+0x220@plt>
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-x86-64.s b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-x86-64.s
new file mode 100644
index 0000000..4137ff1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-2-x86-64.s
@@ -0,0 +1,17 @@
+ .type foo, %gnu_indirect_function
+ .global __GI_foo
+ .hidden __GI_foo
+ .set __GI_foo, foo
+ .text
+.globl foo
+ .type foo, @function
+foo:
+ ret
+ .size foo, .-foo
+.globl bar
+ .type bar, @function
+bar:
+ call __GI_foo
+ leaq __GI_foo(%rip), %rax
+ ret
+ .size bar, .-bar
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-3-x86.s b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-3-x86.s
new file mode 100644
index 0000000..24af7eb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-3-x86.s
@@ -0,0 +1,16 @@
+ .type foo, %gnu_indirect_function
+ .global __GI_foo
+ .protected __GI_foo
+ .set __GI_foo, foo
+ .text
+.globl foo
+ .type foo, @function
+foo:
+ ret
+ .size foo, .-foo
+.globl bar
+ .type bar, @function
+bar:
+ call __GI_foo@PLT
+ ret
+ .size bar, .-bar
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-3a-x86.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-3a-x86.d
new file mode 100644
index 0000000..3924dda
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-3a-x86.d
@@ -0,0 +1,8 @@
+#source: ifunc-3-x86.s
+#ld: -shared
+#objdump: -dw
+#target: x86_64-*-* i?86-*-*
+
+#...
+[ \t0-9a-f]+:[ \t0-9a-f]+call[ \t0-9a-fq]+<\*ABS\*(\+0x258|)@plt>
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-3b-x86.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-3b-x86.d
new file mode 100644
index 0000000..a543825
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-3b-x86.d
@@ -0,0 +1,8 @@
+#source: ifunc-3-x86.s
+#ld: -shared
+#readelf: -r --wide
+#target: x86_64-*-* i?86-*-*
+
+#...
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_[_0-9A-Z]+_IRELATIVE[ ]*[0-9a-f]*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-4-local-x86.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-4-local-x86.d
new file mode 100644
index 0000000..5fe66e0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-4-local-x86.d
@@ -0,0 +1,7 @@
+#ld:
+#readelf: -r --wide
+#target: x86_64-*-* i?86-*-*
+
+#...
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_[_0-9A-Z]+_IRELATIVE[ ]*[0-9a-f]*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-4-local-x86.s b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-4-local-x86.s
new file mode 100644
index 0000000..4f72d7f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-4-local-x86.s
@@ -0,0 +1,18 @@
+ .text
+ .type foo, %gnu_indirect_function
+ .type foo, @function
+foo:
+ ret
+ .size foo, .-foo
+ .type start,"function"
+ .global start
+start:
+ .type _start,"function"
+ .global _start
+_start:
+ .type __start,"function"
+ .global __start
+__start:
+ .type __start,"function"
+ call foo
+ movl $foo,%eax
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-4-x86.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-4-x86.d
new file mode 100644
index 0000000..5fe66e0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-4-x86.d
@@ -0,0 +1,7 @@
+#ld:
+#readelf: -r --wide
+#target: x86_64-*-* i?86-*-*
+
+#...
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_[_0-9A-Z]+_IRELATIVE[ ]*[0-9a-f]*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-4-x86.s b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-4-x86.s
new file mode 100644
index 0000000..1c7e07e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-4-x86.s
@@ -0,0 +1,19 @@
+ .text
+ .type foo, %gnu_indirect_function
+.globl foo
+ .type foo, @function
+foo:
+ ret
+ .size foo, .-foo
+ .type start,"function"
+ .global start
+start:
+ .type _start,"function"
+ .global _start
+_start:
+ .type __start,"function"
+ .global __start
+__start:
+ .type __start,"function"
+ call foo
+ movl $foo,%eax
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-4a-x86.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-4a-x86.d
new file mode 100644
index 0000000..d06f589
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-4a-x86.d
@@ -0,0 +1,8 @@
+#ld: -s
+#readelf: -r --wide
+#target: x86_64-*-* i?86-*-*
+#source: ifunc-4-x86.s
+
+#...
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_[_0-9A-Z]+_IRELATIVE[ ]*[0-9a-f]*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5-i386.s b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5-i386.s
new file mode 100644
index 0000000..8e351ff
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5-i386.s
@@ -0,0 +1,23 @@
+ .text
+ .type foo, %gnu_indirect_function
+.globl foo
+ .type foo, @function
+foo:
+ ret
+ .size foo, .-foo
+ .type start,"function"
+ .global start
+start:
+ .type _start,"function"
+ .global _start
+_start:
+ .type __start,"function"
+ .global __start
+__start:
+ .type __start,"function"
+ call .L6
+.L6:
+ popl %ebx
+ addl $_GLOBAL_OFFSET_TABLE_+[.-.L6], %ebx
+ call foo@PLT
+ leal foo@GOT(%ebx), %eax
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5-local-i386.s b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5-local-i386.s
new file mode 100644
index 0000000..d7bb5cf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5-local-i386.s
@@ -0,0 +1,22 @@
+ .text
+ .type foo, %gnu_indirect_function
+ .type foo, @function
+foo:
+ ret
+ .size foo, .-foo
+ .type start,"function"
+ .global start
+start:
+ .type _start,"function"
+ .global _start
+_start:
+ .type __start,"function"
+ .global __start
+__start:
+ .type __start,"function"
+ call .L6
+.L6:
+ popl %ebx
+ addl $_GLOBAL_OFFSET_TABLE_+[.-.L6], %ebx
+ call foo@PLT
+ leal foo@GOT(%ebx), %eax
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5-local-x86-64.s b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5-local-x86-64.s
new file mode 100644
index 0000000..5469747
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5-local-x86-64.s
@@ -0,0 +1,18 @@
+ .text
+ .type foo, %gnu_indirect_function
+ .type foo, @function
+foo:
+ ret
+ .size foo, .-foo
+ .type start,"function"
+ .global start
+start:
+ .type _start,"function"
+ .global _start
+_start:
+ .type __start,"function"
+ .global __start
+__start:
+ .type __start,"function"
+ call foo@PLT
+ movq foo@GOTPCREL(%rip), %rax
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5-x86-64.s b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5-x86-64.s
new file mode 100644
index 0000000..054ce97
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5-x86-64.s
@@ -0,0 +1,19 @@
+ .text
+ .type foo, %gnu_indirect_function
+.globl foo
+ .type foo, @function
+foo:
+ ret
+ .size foo, .-foo
+ .type start,"function"
+ .global start
+start:
+ .type _start,"function"
+ .global _start
+_start:
+ .type __start,"function"
+ .global __start
+__start:
+ .type __start,"function"
+ call foo@PLT
+ movq foo@GOTPCREL(%rip), %rax
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5a-i386.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5a-i386.d
new file mode 100644
index 0000000..8fba080
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5a-i386.d
@@ -0,0 +1,9 @@
+#source: ifunc-5-i386.s
+#ld: -m elf_i386
+#as: --32
+#readelf: -r --wide
+#target: x86_64-*-* i?86-*-*
+
+Relocation section '.rel.plt' at .*
+[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_386_IRELATIVE[ ]*
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5a-local-i386.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5a-local-i386.d
new file mode 100644
index 0000000..88814f7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5a-local-i386.d
@@ -0,0 +1,9 @@
+#source: ifunc-5-local-i386.s
+#ld: -m elf_i386
+#as: --32
+#readelf: -r --wide
+#target: x86_64-*-* i?86-*-*
+
+Relocation section '.rel.plt' at .*
+[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_386_IRELATIVE[ ]*
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5a-local-x86-64.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5a-local-x86-64.d
new file mode 100644
index 0000000..73a822d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5a-local-x86-64.d
@@ -0,0 +1,9 @@
+#source: ifunc-5-local-x86-64.s
+#as: --64
+#ld: -melf_x86_64
+#readelf: -r --wide
+#target: x86_64-*-*
+
+Relocation section '.rela.plt' at .*
+[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_X86_64_IRELATIVE[ ]+[0-9a-f]*
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5a-x86-64.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5a-x86-64.d
new file mode 100644
index 0000000..46f4186
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5a-x86-64.d
@@ -0,0 +1,9 @@
+#source: ifunc-5-x86-64.s
+#as: --64
+#ld: -melf_x86_64
+#readelf: -r --wide
+#target: x86_64-*-*
+
+Relocation section '.rela.plt' at .*
+[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_X86_64_IRELATIVE[ ]+[0-9a-f]*
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5b-i386.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5b-i386.d
new file mode 100644
index 0000000..e00401b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5b-i386.d
@@ -0,0 +1,13 @@
+#source: ifunc-5-i386.s
+#ld: -shared -m elf_i386 -z nocombreloc
+#as: --32
+#readelf: -r --wide
+#target: x86_64-*-* i?86-*-*
+
+Relocation section '.rel.got' at .*
+[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_386_GLOB_DAT[ ]+foo\(\)[ ]+foo
+#...
+Relocation section '.rel.plt' at .*
+[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_386_JUMP_SLOT[ ]+foo\(\)[ ]+foo
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5b-local-i386.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5b-local-i386.d
new file mode 100644
index 0000000..75cb7d9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5b-local-i386.d
@@ -0,0 +1,9 @@
+#source: ifunc-5-local-i386.s
+#ld: -shared -m elf_i386 -z nocombreloc
+#as: --32
+#readelf: -r --wide
+#target: x86_64-*-* i?86-*-*
+
+Relocation section '.rel.plt' at .*
+[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_386_IRELATIVE[ ]*
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5b-local-x86-64.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5b-local-x86-64.d
new file mode 100644
index 0000000..3913dd6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5b-local-x86-64.d
@@ -0,0 +1,9 @@
+#source: ifunc-5-local-x86-64.s
+#as: --64
+#ld: -melf_x86_64 -shared -z nocombreloc
+#readelf: -r --wide
+#target: x86_64-*-*
+
+Relocation section '.rela.plt' at .*
+[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_X86_64_IRELATIVE[ ]+[0-9a-f]*
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5b-x86-64.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5b-x86-64.d
new file mode 100644
index 0000000..02aff6b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5b-x86-64.d
@@ -0,0 +1,13 @@
+#source: ifunc-5-x86-64.s
+#as: --64
+#ld: -melf_x86_64 -shared -z nocombreloc
+#readelf: -r --wide
+#target: x86_64-*-*
+
+Relocation section '.rela.got' at .*
+[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_X86_64_GLOB_DAT[ ]+foo\(\)[ ]+foo \+ 0
+#...
+Relocation section '.rela.plt' at .*
+[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_X86_64_JUMP_SLOT[ ]+foo\(\)[ ]+foo \+ 0
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5r-local-i386.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5r-local-i386.d
new file mode 100644
index 0000000..18e1295
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5r-local-i386.d
@@ -0,0 +1,11 @@
+#source: ifunc-5-local-i386.s
+#ld: -r -m elf_i386
+#as: --32
+#readelf: -r --wide
+#target: x86_64-*-* i?86-*-*
+
+Relocation section '.rel.text' at .*
+[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_386_GOTPC[ ]+0+[ ]+_GLOBAL_OFFSET_TABLE_[ ]*
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_386_PLT32[ ]+foo\(\)[ ]+foo[ ]*
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_386_GOT32[ ]+foo\(\)[ ]+foo[ ]*
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5r-local-x86-64.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5r-local-x86-64.d
new file mode 100644
index 0000000..e9ad214
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-5r-local-x86-64.d
@@ -0,0 +1,10 @@
+#source: ifunc-5-local-x86-64.s
+#as: --64
+#ld: -r -melf_x86_64
+#readelf: -r --wide
+#target: x86_64-*-*
+
+Relocation section '.rela.text' at .*
+[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_X86_64_PLT32[ ]+foo\(\)[ ]+foo - 4
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_X86_64_GOTPCREL[ ]+foo\(\)[ ]+foo - 4
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-6-i386.s b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-6-i386.s
new file mode 100644
index 0000000..bc632c9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-6-i386.s
@@ -0,0 +1,24 @@
+ .text
+ .type foo, %gnu_indirect_function
+.globl foo
+ .type foo, @function
+foo:
+ ret
+ .size foo, .-foo
+ .protected foo
+ .type start,"function"
+ .global start
+start:
+ .type _start,"function"
+ .global _start
+_start:
+ .type __start,"function"
+ .global __start
+__start:
+ .type __start,"function"
+ call .L6
+.L6:
+ popl %ebx
+ addl $_GLOBAL_OFFSET_TABLE_+[.-.L6], %ebx
+ call foo@PLT
+ leal foo@GOT(%ebx), %eax
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-6-x86-64.s b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-6-x86-64.s
new file mode 100644
index 0000000..954d67d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-6-x86-64.s
@@ -0,0 +1,20 @@
+ .text
+ .type foo, %gnu_indirect_function
+.globl foo
+ .type foo, @function
+foo:
+ ret
+ .size foo, .-foo
+ .protected foo
+ .type start,"function"
+ .global start
+start:
+ .type _start,"function"
+ .global _start
+_start:
+ .type __start,"function"
+ .global __start
+__start:
+ .type __start,"function"
+ call foo@PLT
+ movq foo@GOTPCREL(%rip), %rax
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-6a-i386.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-6a-i386.d
new file mode 100644
index 0000000..a83e62b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-6a-i386.d
@@ -0,0 +1,9 @@
+#source: ifunc-6-i386.s
+#ld: -m elf_i386
+#as: --32
+#readelf: -r --wide
+#target: x86_64-*-* i?86-*-*
+
+Relocation section '.rel.plt' at .*
+[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_386_IRELATIVE[ ]*
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-6a-x86-64.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-6a-x86-64.d
new file mode 100644
index 0000000..cc3ff94
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-6a-x86-64.d
@@ -0,0 +1,9 @@
+#source: ifunc-6-x86-64.s
+#as: --64
+#ld: -melf_x86_64
+#readelf: -r --wide
+#target: x86_64-*-*
+
+Relocation section '.rela.plt' at .*
+[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_X86_64_IRELATIVE[ ]+[0-9a-f]*
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-6b-i386.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-6b-i386.d
new file mode 100644
index 0000000..e53fc72
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-6b-i386.d
@@ -0,0 +1,13 @@
+#source: ifunc-6-i386.s
+#ld: -shared -m elf_i386 -z nocombreloc
+#as: --32
+#readelf: -r --wide
+#target: x86_64-*-* i?86-*-*
+
+Relocation section '.rel.got' at .*
+[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_386_GLOB_DAT[ ]+foo\(\)[ ]+foo
+#...
+Relocation section '.rel.plt' at .*
+[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_386_IRELATIVE[ ]*
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-6b-x86-64.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-6b-x86-64.d
new file mode 100644
index 0000000..16ccfd7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-6b-x86-64.d
@@ -0,0 +1,13 @@
+#source: ifunc-6-x86-64.s
+#as: --64
+#ld: -melf_x86_64 -shared -z nocombreloc
+#readelf: -r --wide
+#target: x86_64-*-*
+
+Relocation section '.rela.got' at .*
+[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_X86_64_GLOB_DAT[ ]+foo\(\)[ ]+foo \+ 0
+#...
+Relocation section '.rela.plt' at .*
+[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_X86_64_IRELATIVE[ ]+[0-9a-f]*
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-7-i386.s b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-7-i386.s
new file mode 100644
index 0000000..8616c4e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-7-i386.s
@@ -0,0 +1,24 @@
+ .text
+ .type foo, %gnu_indirect_function
+.globl foo
+ .type foo, @function
+foo:
+ ret
+ .size foo, .-foo
+ .hidden foo
+ .type start,"function"
+ .global start
+start:
+ .type _start,"function"
+ .global _start
+_start:
+ .type __start,"function"
+ .global __start
+__start:
+ .type __start,"function"
+ call .L6
+.L6:
+ popl %ebx
+ addl $_GLOBAL_OFFSET_TABLE_+[.-.L6], %ebx
+ call foo@PLT
+ leal foo@GOT(%ebx), %eax
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-7-x86-64.s b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-7-x86-64.s
new file mode 100644
index 0000000..24fce11
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-7-x86-64.s
@@ -0,0 +1,20 @@
+ .text
+ .type foo, %gnu_indirect_function
+.globl foo
+ .type foo, @function
+foo:
+ ret
+ .size foo, .-foo
+ .hidden foo
+ .type start,"function"
+ .global start
+start:
+ .type _start,"function"
+ .global _start
+_start:
+ .type __start,"function"
+ .global __start
+__start:
+ .type __start,"function"
+ call foo@PLT
+ movq foo@GOTPCREL(%rip), %rax
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-7a-i386.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-7a-i386.d
new file mode 100644
index 0000000..6b4afe1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-7a-i386.d
@@ -0,0 +1,9 @@
+#source: ifunc-7-i386.s
+#ld: -m elf_i386
+#as: --32
+#readelf: -r --wide
+#target: x86_64-*-* i?86-*-*
+
+Relocation section '.rel.plt' at .*
+[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_386_IRELATIVE[ ]*
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-7a-x86-64.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-7a-x86-64.d
new file mode 100644
index 0000000..2544401
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-7a-x86-64.d
@@ -0,0 +1,9 @@
+#source: ifunc-7-x86-64.s
+#as: --64
+#ld: -melf_x86_64
+#readelf: -r --wide
+#target: x86_64-*-*
+
+Relocation section '.rela.plt' at .*
+[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_X86_64_IRELATIVE[ ]+[0-9a-f]*
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-7b-i386.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-7b-i386.d
new file mode 100644
index 0000000..31cdd97
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-7b-i386.d
@@ -0,0 +1,9 @@
+#source: ifunc-7-i386.s
+#ld: -shared -m elf_i386
+#as: --32
+#readelf: -r --wide
+#target: x86_64-*-* i?86-*-*
+
+Relocation section '.rel.plt' at .*
+[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_386_IRELATIVE[ ]*
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-7b-x86-64.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-7b-x86-64.d
new file mode 100644
index 0000000..846fe34
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-7b-x86-64.d
@@ -0,0 +1,9 @@
+#source: ifunc-7-x86-64.s
+#as: --64
+#ld: -melf_x86_64 -shared
+#readelf: -r --wide
+#target: x86_64-*-*
+
+Relocation section '.rela.plt' at .*
+[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_X86_64_IRELATIVE[ ]+[0-9a-f]*
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-8-i386.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-8-i386.d
new file mode 100644
index 0000000..e40a9e6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-8-i386.d
@@ -0,0 +1,10 @@
+#source: ifunc-8a-i386.s
+#source: ifunc-8b-i386.s
+#ld: -m elf_i386
+#as: --32
+#readelf: -r --wide
+#target: x86_64-*-* i?86-*-*
+
+Relocation section '.rel.plt' at .*
+[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_386_IRELATIVE[ ]*
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-8-x86-64.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-8-x86-64.d
new file mode 100644
index 0000000..ad6a5dd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-8-x86-64.d
@@ -0,0 +1,10 @@
+#source: ifunc-8a-x86-64.s
+#source: ifunc-8b-x86-64.s
+#as: --64
+#ld: -melf_x86_64
+#readelf: -r --wide
+#target: x86_64-*-*
+
+Relocation section '.rela.plt' at .*
+[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
+[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_X86_64_IRELATIVE[ ]+[0-9a-f]*
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-8a-i386.s b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-8a-i386.s
new file mode 100644
index 0000000..9d42d0e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-8a-i386.s
@@ -0,0 +1,16 @@
+ .text
+ .type start,"function"
+ .global start
+start:
+ .type _start,"function"
+ .global _start
+_start:
+ .type __start,"function"
+ .global __start
+__start:
+ .type __start,"function"
+ call .L6
+.L6:
+ popl %ebx
+ addl $_GLOBAL_OFFSET_TABLE_+[.-.L6], %ebx
+ mov foo@GOT(%ebx), %eax
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-8a-x86-64.s b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-8a-x86-64.s
new file mode 100644
index 0000000..8137a07
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-8a-x86-64.s
@@ -0,0 +1,12 @@
+ .text
+ .type start,"function"
+ .global start
+start:
+ .type _start,"function"
+ .global _start
+_start:
+ .type __start,"function"
+ .global __start
+__start:
+ .type __start,"function"
+ movq foo@GOTPCREL(%rip), %rax
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-8b-i386.s b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-8b-i386.s
new file mode 100644
index 0000000..1f108f8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-8b-i386.s
@@ -0,0 +1,7 @@
+ .text
+ .type foo, %gnu_indirect_function
+.globl foo
+ .type foo, @function
+foo:
+ ret
+ .size foo, .-foo
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-8b-x86-64.s b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-8b-x86-64.s
new file mode 100644
index 0000000..1f108f8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-8b-x86-64.s
@@ -0,0 +1,7 @@
+ .text
+ .type foo, %gnu_indirect_function
+.globl foo
+ .type foo, @function
+foo:
+ ret
+ .size foo, .-foo
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-9-x86.d b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-9-x86.d
new file mode 100644
index 0000000..7390dd1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-9-x86.d
@@ -0,0 +1,3 @@
+#ld: --export-dynamic
+#error: .*dynamic STT_GNU_IFUNC symbol `foo' with pointer equality in `.*.o' can not be used when making an executable; recompile with -fPIE and relink with -pie
+#target: x86_64-*-* i?86-*-*
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-9-x86.s b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-9-x86.s
new file mode 100644
index 0000000..05321e4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc-9-x86.s
@@ -0,0 +1,18 @@
+ .text
+ .type foo, %gnu_indirect_function
+.globl foo
+ .type foo, @function
+foo:
+ ret
+ .size foo, .-foo
+ .type start,"function"
+ .global start
+start:
+ .type _start,"function"
+ .global _start
+_start:
+ .type __start,"function"
+ .global __start
+__start:
+ .type __start,"function"
+ movl foo, %eax
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/ifunc.exp b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc.exp
new file mode 100644
index 0000000..38fe2d3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/ifunc.exp
@@ -0,0 +1,353 @@
+# Expect script for linker support of IFUNC symbols and relocations.
+#
+# Copyright 2009 Free Software Foundation, Inc.
+# Contributed by Red Hat.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by Nick Clifton <nickc@redhat.com>
+
+
+# IFUNC support has only been implemented for the ix86, x86_64, powerpc,
+# and sparc so far.
+if {!(([istarget "i?86-*-*"]
+ || [istarget "x86_64-*-*"]
+ || [istarget "powerpc*-*-*"]
+ || [istarget "sparc*-*-*"])
+ && ([istarget "*-*-elf*"]
+ || ([istarget "*-*-linux*"]
+ && ![istarget "*-*-*aout*"]
+ && ![istarget "*-*-*oldld*"]))) } {
+ verbose "IFUNC tests not run - target does not support IFUNC"
+ return
+}
+
+# We need a native system. FIXME: Strictly speaking this
+# is not true, we just need to know how to create a fully
+# linked executable, including the C and Z libraries, using
+# the linker that is under test.
+if ![isnative] {
+ verbose "IFUNC tests not run - not a native toolchain"
+ return
+}
+
+# We need a working compiler. (Strictly speaking this is
+# not true, we could use target specific assembler files).
+if { [which $CC] == 0 } {
+ verbose "IFUNC tests not run - no compiler available"
+ return
+}
+
+# A procedure to check the OS/ABI field in the ELF header of a binary file.
+proc check_osabi { binary_file expected_osabi } {
+ global READELF
+ global READELFFLAGS
+
+ catch "exec $READELF $READELFFLAGS --file-header $binary_file > readelf.out" got
+
+ if ![string match "" $got] then {
+ verbose "proc check_osabi: Readelf produced unexpected out processing $binary_file: $got"
+ return 0
+ }
+
+ if { ![regexp "\n\[ \]*OS/ABI:\[ \]*(.+)\n\[ \]*ABI" \
+ [file_contents readelf.out] nil osabi] } {
+ verbose "proc check_osabi: Readelf failed to extract an ELF header from $binary_file"
+ return 0
+ }
+
+ if { $osabi == $expected_osabi } {
+ return 1
+ }
+
+ verbose "Expected OSABI: $expected_osabi, Obtained osabi: $osabi"
+
+ return 0
+}
+
+# A procedure to confirm that a file contains the IFUNC symbol.
+# Returns -1 upon error, 0 if the symbol was not found and 1 if it was found.
+proc contains_ifunc_symbol { binary_file } {
+ global READELF
+ global READELFFLAGS
+
+ catch "exec $READELF $READELFFLAGS --symbols $binary_file > readelf.out" got
+
+ if ![string match "" $got] then {
+ verbose "proc contains_ifunc_symbol: Readelf produced unexpected out processing $binary_file: $got"
+ return -1
+ }
+
+ # Look for a line like this:
+ # 58: 0000000000400600 30 IFUNC GLOBAL DEFAULT 12 library_func2
+
+ if { ![regexp ".*\[ \]*IFUNC\[ \]+GLOBAL\[ \]+DEFAULT\[ \]+\[UND0-9\]+\[ \]+library_func2\n" [file_contents readelf.out]] } {
+ return 0
+ }
+
+ return 1
+}
+
+# A procedure to confirm that a file contains the R_*_IRELATIVE
+# relocation.
+# Returns -1 upon error, 0 if the relocation was not found and 1 if
+# it was found.
+proc contains_irelative_reloc { binary_file } {
+ global READELF
+ global READELFFLAGS
+
+ catch "exec $READELF $READELFFLAGS --relocs --wide $binary_file > readelf.out" got
+
+ if ![string match "" $got] then {
+ verbose "proc contains_irelative_reloc: Readelf produced unexpected out processing $binary_file: $got"
+ return -1
+ }
+
+ # Look for a line like this:
+ # 0000000000600ab0 0000000000000025 R_X86_64_IRELATIVE 000000000040061c
+ # 080496f4 0000002a R_386_IRELATIVE
+
+
+ if { ![regexp "\[0-9a-f\]+\[ \]+\[0-9a-f\]+\[ \]+R_\[_0-9A-Z\]+_IREL(|ATIVE)\[ \]*\[0-9a-f\]*\n" [file_contents readelf.out]] } {
+ return 0
+ }
+
+ return 1
+}
+
+# A procedure to confirm that a file contains a relocation that references an IFUNC symbol.
+# Returns -1 upon error, 0 if the reloc was not found and 1 if it was found.
+proc contains_ifunc_reloc { binary_file } {
+ global READELF
+ global READELFFLAGS
+
+ catch "exec $READELF $READELFFLAGS --relocs $binary_file > readelf.out" got
+
+ if ![string match "" $got] then {
+ verbose "proc contains_ifunc_reloc: Readelf produced unexpected out processing $binary_file: $got"
+ return -1
+ }
+
+ if [string match "" [file_contents readelf.out]] then {
+ verbose "No relocs found in $binary_file"
+ return 0
+ }
+
+ if { ![regexp "\\(\\)" [file_contents readelf.out]] } {
+ return 0
+ }
+
+ return 1
+}
+
+set fails 0
+
+# Create the object files, libraries and executables.
+if ![ld_compile "$CC -c -fPIC" "$srcdir/$subdir/prog.c" "tmpdir/shared_prog.o"] {
+ fail "Could not create a PIC object file"
+ set fails [expr $fails + 1]
+}
+if ![ld_compile "$CC -c" "$srcdir/$subdir/prog.c" "tmpdir/static_prog.o"] {
+ fail "Could not create a non-PIC object file"
+ set fails [expr $fails + 1]
+}
+if ![ld_compile "$CC -c -fPIC -DWITH_IFUNC" "$srcdir/$subdir/lib.c" "tmpdir/shared_ifunc.o"] {
+ fail "Could not create a PIC object file containing an IFUNC symbol"
+ set fails [expr $fails + 1]
+}
+if ![ld_compile "$CC -c -DWITH_IFUNC" "$srcdir/$subdir/lib.c" "tmpdir/static_ifunc.o"] {
+ fail "Could not create a non-PIC object file containing an IFUNC symbol"
+ set fails [expr $fails + 1]
+}
+if ![ld_compile "$CC -c -DWITHOUT_IFUNC" "$srcdir/$subdir/lib.c" "tmpdir/static_noifunc.o"] {
+ fail "Could not create an ordinary non-PIC object file"
+ set fails [expr $fails + 1]
+}
+if ![ld_assemble $as "$srcdir/ld-elf/empty.s" "tmpdir/empty.o"] {
+ fail "Could not create an empty object file"
+ set fails [expr $fails + 1]
+}
+if ![ld_compile "$CC -c" "$srcdir/$subdir/test-1.c" "tmpdir/test-1.o"] {
+ fail "Could not create test-1.o"
+ set fails [expr $fails + 1]
+}
+if ![ld_compile "$CC -fPIC -c" "$srcdir/$subdir/test-2.c" "tmpdir/test-2.o"] {
+ fail "Could not create test-2.o"
+ set fails [expr $fails + 1]
+}
+
+if { $fails != 0 } {
+ return
+}
+
+if ![ld_simple_link $ld "tmpdir/libshared_ifunc.so" "-shared tmpdir/shared_ifunc.o"] {
+ fail "Could not create a shared library containing an IFUNC symbol"
+ set fails [expr $fails + 1]
+}
+if ![ar_simple_create $ar "" "tmpdir/libifunc.a" "tmpdir/static_ifunc.o"] {
+ fail "Could not create a static library containing an IFUNC symbol"
+ set fails [expr $fails + 1]
+}
+
+if { $fails != 0 } {
+ return
+}
+
+if ![default_ld_link $ld "tmpdir/dynamic_prog" "-Ltmpdir tmpdir/shared_prog.o -Bdynamic -lshared_ifunc -rpath ./tmpdir"] {
+ fail "Could not link a dynamic executable"
+ set fails [expr $fails + 1]
+}
+if ![default_ld_link $ld "tmpdir/local_prog" "-Ltmpdir tmpdir/static_prog.o -lifunc"] {
+ fail "Could not link a dynamic executable using local ifunc"
+ set fails [expr $fails + 1]
+}
+if ![default_ld_link $ld "tmpdir/static_prog" "-static -Ltmpdir tmpdir/static_prog.o -lifunc"] {
+ fail "Could not link a static executable"
+ set fails [expr $fails + 1]
+}
+if ![ld_simple_link $ld "tmpdir/static_nonifunc_prog" "-static tmpdir/empty.o"] {
+ fail "Could not link a non-ifunc using static executable"
+ set fails [expr $fails + 1]
+}
+if ![default_ld_link $ld "tmpdir/test-1" "tmpdir/test-1.o tmpdir/libshared_ifunc.so"] {
+ fail "Could not link test-1"
+ set fails [expr $fails + 1]
+}
+if ![ld_simple_link $ld "tmpdir/libtest-2.so" "-shared tmpdir/test-2.o"] {
+ fail "Could not link libtest-2.so"
+ set fails [expr $fails + 1]
+}
+
+if { $fails == 0 } {
+ pass "Building ifunc binaries"
+ set fails 0
+} else {
+ return
+}
+
+# Check the executables and shared libraries
+#
+# The linked ifunc using executables and the shared library containing
+# ifunc should have an OSABI field of LINUX. The linked non-ifunc using
+# executable should have an OSABI field of NONE (aka System V).
+
+if {! [check_osabi tmpdir/libshared_ifunc.so {UNIX - Linux}]} {
+ fail "Shared libraries containing ifunc does not have an OS/ABI field of LINUX"
+ set fails [expr $fails + 1]
+}
+if {! [check_osabi tmpdir/local_prog {UNIX - Linux}]} {
+ fail "Local ifunc-using executable does not have an OS/ABI field of LINUX"
+ set fails [expr $fails + 1]
+}
+if {! [check_osabi tmpdir/static_prog {UNIX - Linux}]} {
+ fail "Static ifunc-using executable does not have an OS/ABI field of LINUX"
+ set fails [expr $fails + 1]
+}
+if {! [check_osabi tmpdir/dynamic_prog {UNIX - System V}]} {
+ fail "Dynamic ifunc-using executable does not have an OS/ABI field of System V"
+ set fails [expr $fails + 1]
+}
+if {! [check_osabi tmpdir/static_nonifunc_prog {UNIX - System V}]} {
+ fail "Static non-ifunc-using executable does not have an OS/ABI field of System V"
+ set fails [expr $fails + 1]
+}
+
+# The linked ifunc using executables and the shared library containing
+# ifunc should contain an IFUNC symbol. The non-ifunc using executable
+# should not.
+
+if {[contains_ifunc_symbol tmpdir/libshared_ifunc.so] != 1} {
+ fail "Shared libraries containing ifunc does not contain an IFUNC symbol"
+ set fails [expr $fails + 1]
+}
+if {[contains_ifunc_symbol tmpdir/local_prog] != 1} {
+ fail "Local ifunc-using executable does not contain an IFUNC symbol"
+ set fails [expr $fails + 1]
+}
+if {[contains_ifunc_symbol tmpdir/static_prog] != 1} {
+ fail "Static ifunc-using executable does not contain an IFUNC symbol"
+ set fails [expr $fails + 1]
+}
+if {[contains_ifunc_symbol tmpdir/dynamic_prog] != 0} {
+ fail "Dynamic ifunc-using executable contains an IFUNC symbol"
+ set fails [expr $fails + 1]
+}
+if {[contains_ifunc_symbol tmpdir/static_nonifunc_prog] != 0} {
+ fail "Static non-ifunc-using executable contains an IFUNC symbol"
+ set fails [expr $fails + 1]
+}
+if {[contains_ifunc_symbol tmpdir/test-1] != 0} {
+ fail "test-1 contains IFUNC symbols"
+ set fails [expr $fails + 1]
+}
+if {[contains_ifunc_symbol tmpdir/libtest-2.so] != 0} {
+ fail "libtest-2.so contains IFUNC symbols"
+ set fails [expr $fails + 1]
+}
+
+# The linked ifunc using executables and shared libraries should contain
+# a dynamic reloc referencing the IFUNC symbol. (Even the static
+# executable which should have a dynamic section created for it). The
+# non-ifunc using executable should not.
+
+if {[contains_irelative_reloc tmpdir/libshared_ifunc.so] != 1} {
+ fail "ifunc-using shared library does not contain R_*_IRELATIVE relocation"
+ set fails [expr $fails + 1]
+}
+if {[contains_irelative_reloc tmpdir/local_prog] != 1} {
+ fail "Local ifunc-using executable does not contain R_*_IRELATIVE relocation"
+ set fails [expr $fails + 1]
+}
+if {[contains_irelative_reloc tmpdir/static_prog] != 1} {
+ fail "Static ifunc-using executable does not contain R_*_IRELATIVE relocation"
+ set fails [expr $fails + 1]
+}
+if {[contains_ifunc_reloc tmpdir/dynamic_prog] != 0} {
+ fail "Dynamic ifunc-using executable contains a reloc against an IFUNC symbol"
+ set fails [expr $fails + 1]
+}
+if {[contains_ifunc_reloc tmpdir/static_nonifunc_prog] == 1} {
+ fail "Static non-ifunc-using executable contains a reloc against an IFUNC symbol!"
+ set fails [expr $fails + 1]
+}
+
+if { $fails == 0 } {
+ pass "Checking ifunc binaries"
+}
+
+# Clean up, unless we are being verbose, in which case we leave the files available.
+if { $verbose < 1 } {
+ remote_file host delete "tmpdir/shared_prog.o"
+ remote_file host delete "tmpdir/static_prog.o"
+ remote_file host delete "tmpdir/shared_ifunc.o"
+ remote_file host delete "tmpdir/static_ifunc.o"
+ remote_file host delete "tmpdir/static_noifunc.o"
+ remote_file host delete "tmpdir/libshared_ifunc.so"
+ remote_file host delete "tmpdir/libifunc.a"
+ remote_file host delete "tmpdir/dynamic_prog"
+ remote_file host delete "tmpdir/local_prog"
+ remote_file host delete "tmpdir/static_prog"
+ remote_file host delete "tmpdir/static_nonifunc_prog"
+}
+
+set test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
+foreach t $test_list {
+ # We need to strip the ".d", but can leave the dirname.
+ verbose [file rootname $t]
+ run_dump_test [file rootname $t]
+}
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/lib.c b/binutils-2.21/ld/testsuite/ld-ifunc/lib.c
new file mode 100644
index 0000000..393dabf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/lib.c
@@ -0,0 +1,39 @@
+int
+library_func1 (void)
+{
+ return 2;
+}
+
+int global = 1;
+
+#ifdef WITH_IFUNC
+
+static int minus_one (void) { return -1; }
+static int zero (void) { return 0; }
+
+void * library_func2_ifunc (void) __asm__ ("library_func2");
+void * library_func2_ifunc (void) { return global ? minus_one : zero ; }
+__asm__(".type library_func2, %gnu_indirect_function");
+
+extern int library_func2 (int);
+extern __typeof (library_func2) library_func2 __asm__ ("__GI_library_func2");
+
+__asm__(".global __GI_library_func2");
+__asm__(".hidden __GI_library_func2");
+__asm__(".set __GI_library_func2, library_func2");
+
+int
+library_func (int x)
+{
+ return library_func2 (x);
+}
+
+#else /* WITHOUT_IFUNC */
+
+int
+library_func2 (void)
+{
+ return 3;
+}
+
+#endif
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/prog.c b/binutils-2.21/ld/testsuite/ld-ifunc/prog.c
new file mode 100644
index 0000000..da786a5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/prog.c
@@ -0,0 +1,46 @@
+extern int printf (const char *, ...);
+
+extern int library_func1 (void);
+extern int library_func2 (void);
+extern int global;
+
+int
+main (void)
+{
+ int res = -1;
+
+ res += library_func1 ();
+ res += library_func2 ();
+
+ switch (res)
+ {
+ case 0:
+ if (global)
+ printf ("ifunc working correctly\n");
+ else
+ {
+ printf ("wrong value returned by library_func2\n");
+ res = -1;
+ }
+ break;
+
+ case 1:
+ if (global)
+ printf ("wrong value returned by library_func2\n");
+ else
+ {
+ printf ("ifunc working correctly\n");
+ res = 0;
+ }
+ break;
+
+ case 4:
+ printf ("non-ifunc testcase\n");
+ break;
+
+ default:
+ printf ("ifunc function not evaluated at run-time, res = %x\n", res);
+ break;
+ }
+ return res;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/test-1.c b/binutils-2.21/ld/testsuite/ld-ifunc/test-1.c
new file mode 100644
index 0000000..6930e56
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/test-1.c
@@ -0,0 +1,3 @@
+extern int library_func2 (void);
+int (*fn) (void) = library_func2;
+int main (void) { fn (); return 0; }
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/test-2.c b/binutils-2.21/ld/testsuite/ld-ifunc/test-2.c
new file mode 100644
index 0000000..8343d0c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-ifunc/test-2.c
@@ -0,0 +1,3 @@
+extern int library_func2 (void);
+int foo (void) { library_func2 (); return 0; }
+__asm__(".type library_func2, %gnu_indirect_function");
diff --git a/binutils-2.21/ld/testsuite/ld-libs/lib-1.s b/binutils-2.21/ld/testsuite/ld-libs/lib-1.s
new file mode 100644
index 0000000..5ff67b1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-libs/lib-1.s
@@ -0,0 +1,2 @@
+ .globl foo
+ foo == 0x2000
diff --git a/binutils-2.21/ld/testsuite/ld-libs/lib-2.d b/binutils-2.21/ld/testsuite/ld-libs/lib-2.d
new file mode 100644
index 0000000..b055417
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-libs/lib-2.d
@@ -0,0 +1,4 @@
+#...
+0+1000 A bar
+0+2000 A foo
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-libs/lib-2.s b/binutils-2.21/ld/testsuite/ld-libs/lib-2.s
new file mode 100644
index 0000000..b1544f3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-libs/lib-2.s
@@ -0,0 +1,2 @@
+ .globl bar
+ bar == 0x1000
diff --git a/binutils-2.21/ld/testsuite/ld-libs/libs.exp b/binutils-2.21/ld/testsuite/ld-libs/libs.exp
new file mode 100644
index 0000000..6b64d8c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-libs/libs.exp
@@ -0,0 +1,30 @@
+# Expect script for the linker's -l command line option
+# Copyright (C) 2007 Free Software Foundation
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+file mkdir tmpdir/libtmp
+
+# Check that -l: works. The first "test" just creates an object file
+# for the second one.
+run_ld_link_tests {
+ {"-l: test (preparation)" "-r" "" {lib-1.s} {} "libtmp/anobject"}
+ {"-l: test" "-r -Ltmpdir/libtmp -l:anobject" "" {lib-2.s}
+ {{nm -C lib-2.d}} "lib-2"}
+}
diff --git a/binutils-2.21/ld/testsuite/ld-linkonce/linkonce.exp b/binutils-2.21/ld/testsuite/ld-linkonce/linkonce.exp
new file mode 100644
index 0000000..5328734
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-linkonce/linkonce.exp
@@ -0,0 +1,46 @@
+# Expect script for ld linkonce tests
+# Copyright 2001, 2002, 2005, 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by Hans-Peter Nilsson (hp@axis.com)
+#
+
+# Test for ELF here (or really, .gnu.linkonce functionality), so we don't
+# have to qualify on ELF specifically in every .d-file.
+
+if { ![istarget *-*-linux*] \
+ && ![istarget *-*-gnu] \
+ && ![istarget hppa*64*-*-hpux*] \
+ && ![istarget *-*-elf] } {
+ return
+}
+
+if { [istarget *-*-linux*aout*] \
+ || [istarget *-*-linux*oldld*] } {
+ return
+}
+
+load_lib ld-lib.exp
+
+set rd_test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
+for { set i 0 } { $i < [llength $rd_test_list] } { incr i } {
+ # We need to strip the ".d", but can leave the dirname.
+ verbose [file rootname [lindex $rd_test_list $i]]
+ run_dump_test [file rootname [lindex $rd_test_list $i]]
+}
diff --git a/binutils-2.21/ld/testsuite/ld-linkonce/x.s b/binutils-2.21/ld/testsuite/ld-linkonce/x.s
new file mode 100644
index 0000000..d07f73e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-linkonce/x.s
@@ -0,0 +1,47 @@
+;# Main file, x.s, with the program (_start) referring to two
+;# linkonce functions fn and fn2. The functions fn and fn2 are
+;# supposed to be equivalent of C++ template instantiations; the
+;# main file instantiates fn.
+
+ .text
+ .global _start
+_start:
+ .long fn
+ .long fn2
+
+ .section .gnu.linkonce.t.fn,"ax",@progbits
+ .weak fn
+ .type fn,@function
+fn:
+.La:
+ .long 1
+ .long 2
+.Lb:
+ .size fn,.Lb-.La
+
+ .section .gcc_except_table,"aw",@progbits
+ .long 2
+ .long .La
+ .long .Lb-.La
+
+ .section .eh_frame,"aw",@progbits
+.Lframe1:
+ .long .LECIE1-.LSCIE1
+.LSCIE1:
+ .long 0x0
+ .byte 0x1
+ .byte 0
+ .uleb128 0x1
+ .sleb128 -4
+ .byte 0
+ .p2align 2
+.LECIE1:
+
+.LSFDE1:
+ .long .LEFDE1-.LASFDE1
+.LASFDE1:
+ .long .LASFDE1-.Lframe1
+ .long .La
+ .long .Lb-.La
+ .p2align 2
+.LEFDE1:
diff --git a/binutils-2.21/ld/testsuite/ld-linkonce/y.s b/binutils-2.21/ld/testsuite/ld-linkonce/y.s
new file mode 100644
index 0000000..c1eb511
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-linkonce/y.s
@@ -0,0 +1,64 @@
+;# Library file y.s has linkonce entries for fn and fn2. Note
+;# that this version of fn has different code, as if compiled
+;# with different optimization flags than the one in x.s (not
+;# important for this test, though). The reference from
+;# .gcc_except_table to the linkonce-excluded fn2 must be zero, or g++
+;# EH will not work.
+
+ .section .gnu.linkonce.t.fn2,"ax",@progbits
+ .weak fn2
+ .type fn2,@function
+fn2:
+.Lc:
+ .long 3
+.Ld:
+ .size fn2,.Ld-.Lc
+
+ .section .gnu.linkonce.t.fn,"ax",@progbits
+ .weak fn
+ .type fn,@function
+fn:
+.Le:
+ .long 4
+.Lf:
+ .size fn,.Lf-.Le
+
+ .section .gcc_except_table,"aw",@progbits
+ .long 7
+ .long .Lc
+ .long .Ld-.Lc
+
+ .long 0x6066
+ .long .Le
+ .long .Lf-.Le
+
+ .section .eh_frame,"aw",@progbits
+.Lframe1:
+ .long .LECIE1-.LSCIE1
+.LSCIE1:
+ .long 0x0
+ .byte 0x1
+ .byte 0
+ .uleb128 0x1
+ .sleb128 -4
+ .byte 0
+ .p2align 2
+.LECIE1:
+
+.LSFDE1:
+ .long .LEFDE1-.LASFDE1
+.LASFDE1:
+ .long .LASFDE1-.Lframe1
+ .long .Lc
+ .long .Ld-.Lc
+ .p2align 2
+.LEFDE1:
+
+.LSFDE2:
+ .long .LEFDE2-.LASFDE2
+.LASFDE2:
+ .long .LASFDE2-.Lframe1
+ .long .Le
+ .long .Lf-.Le
+ .p2align 2
+.LEFDE2:
diff --git a/binutils-2.21/ld/testsuite/ld-linkonce/zeroeh.ld b/binutils-2.21/ld/testsuite/ld-linkonce/zeroeh.ld
new file mode 100644
index 0000000..b22eaa1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-linkonce/zeroeh.ld
@@ -0,0 +1,5 @@
+SECTIONS {
+ .text 0xa00 : { *(.text); *(.gnu.linkonce.t.*) }
+ .gcc_except_table 0x2000 : { *(.gcc_except_table) }
+ .eh_frame 0x4000 : { *(.eh_frame) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-linkonce/zeroehl32.d b/binutils-2.21/ld/testsuite/ld-linkonce/zeroehl32.d
new file mode 100644
index 0000000..5b51836
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-linkonce/zeroehl32.d
@@ -0,0 +1,21 @@
+#source: x.s
+#source: y.s
+#ld: -Ttext 0xa00 -T zeroeh.ld
+#objdump: -s
+#target: cris-*-elf cris-*-linux* i?86-*-elf i?86-*-linux*
+
+# The word at address 201c, for the linkonce-excluded section, must be zero.
+
+.*: file format elf32.*
+
+Contents of section \.text:
+ 0a00 080a0000 100a0000 01000000 02000000 .*
+ 0a10 03000000 .*
+Contents of section \.gcc_except_table:
+ 2000 02000000 080a0000 08000000 07000000 .*
+ 2010 100a0000 04000000 66600000 00000000 .*
+ 2020 04000000 .*
+Contents of section \.eh_frame:
+ 4000 0c000000 00000000 0100017c 00000000 .*
+ 4010 0c000000 14000000 080a0000 08000000 .*
+ 4020 0c000000 24000000 100a0000 04000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-m68hc11/adj-brset.d b/binutils-2.21/ld/testsuite/ld-m68hc11/adj-brset.d
new file mode 100644
index 0000000..f1788f7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68hc11/adj-brset.d
@@ -0,0 +1,32 @@
+#source: adj-brset.s
+#as: -m68hc11
+#ld: --relax
+#objdump: -d --prefix-addresses -r
+#target: m6811-*-* m6812-*-*
+
+.*: +file format elf32\-m68hc11
+
+Disassembly of section .text:
+0+8000 <_start> brclr 140,x \#\$c8 0+804a <L8>
+0+8004 <L1> addd \*0+4 <_toto>
+0+8006 <L1\+0x2> brclr 20,x \#\$03 0+8004 <L1>
+0+800a <L1\+0x6> brclr 90,x \#\$63 0+801a <L3>
+0+800e <L2> addd \*0+4 <_toto>
+0+8010 <L2\+0x2> brclr 19,y \#\$04 0+800e <L2>
+0+8015 <L2\+0x7> brclr 91,y \#\$62 0+8024 <L4>
+0+801a <L3> addd \*0+4 <_toto>
+0+801c <L3\+0x2> brset 18,x \#\$05 0+801a <L3>
+0+8020 <L3\+0x6> brset 92,x \#\$61 0+8030 <L5>
+0+8024 <L4> addd \*0+4 <_toto>
+0+8026 <L4\+0x2> brset 17,y \#\$06 0+8024 <L4>
+0+802b <L4\+0x7> brset 93,y \#\$60 0+8030 <L5>
+0+8030 <L5> addd \*0+4 <_toto>
+0+8032 <L5\+0x2> brset \*0+32 <_table> \#\$07 0+8030 <L5>
+0+8036 <L5\+0x6> brset \*0+3c <_table\+0xa> \#\$5f 0+8044 <L7>
+0+803a <L6> addd \*0+4 <_toto>
+0+803c <L6\+0x2> brclr \*0+33 <_table\+0x1> \#\$08 0+803a <L6>
+0+8040 <L6\+0x6> brset \*0+3d <_table\+0xb> \#\$5e 0+804a <L8>
+0+8044 <L7> addd \*0+4 <_toto>
+0+8046 <L7\+0x2> brclr \*0+33 <_table\+0x1> \#\$08 0+803a <L6>
+0+804a <L8> brclr 140,x \#\$c8 0+8000 <_start>
+0+804e <L8\+0x4> rts
diff --git a/binutils-2.21/ld/testsuite/ld-m68hc11/adj-brset.s b/binutils-2.21/ld/testsuite/ld-m68hc11/adj-brset.s
new file mode 100644
index 0000000..1aaff41
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68hc11/adj-brset.s
@@ -0,0 +1,51 @@
+;;; Test 68HC11 linker relaxation and fixup of brclr/brset branches
+;;;
+ .sect .text
+ .globl _start
+_start:
+start:
+ brclr 140,x#200,L8 ; Branch adjustment covers the whole test
+;;; The 'addd' is relaxed and we win 1 byte. The next brclr/brset
+;;; branch must be fixed and reduced by 1. We check for different
+;;; addressing modes because the instruction has different opcode and
+;;; different lengths.
+L1:
+ addd _toto
+ brclr 20,x,#3,L1
+ brclr 90,x,#99,L3 ; Likewise with forward branch
+L2:
+ addd _toto
+ brclr 19,y,#4,L2
+ brclr 91,y,#98,L4
+L3:
+ addd _toto
+ brset 18,x,#5,L3
+ brset 92,x,#97,L5
+L4:
+ addd _toto
+ brset 17,y,#6,L4
+ brset 93,y,#96,L5
+L5:
+ addd _toto
+ brset *_table,#7,L5
+ brset *_table+10,#95,L7
+L6:
+ addd _toto
+ brclr *_table+1,#8,L6
+ brset *_table+11,#94,L8
+L7:
+ addd _toto
+ brclr *_table+1,#8,L6
+L8:
+ brclr 140,x#200,_start ; Branch adjustment covers the whole test
+ rts
+
+ .sect .page0
+_bar:
+ .long 0
+_toto:
+ .long 0
+ .skip 32
+stack:
+ .skip 10
+_table:
diff --git a/binutils-2.21/ld/testsuite/ld-m68hc11/adj-jump.d b/binutils-2.21/ld/testsuite/ld-m68hc11/adj-jump.d
new file mode 100644
index 0000000..be87524
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68hc11/adj-jump.d
@@ -0,0 +1,60 @@
+#source: adj-jump.s
+#as: -m68hc11
+#ld: --relax
+#objdump: -d --prefix-addresses -r
+#target: m6811-*-* m6812-*-*
+
+.*: +file format elf32\-m68hc11
+
+Disassembly of section .text:
+0+8000 <_start> bra 0+8074 <L3>
+ ...
+0+8016 <_start\+0x16> bra 0+8074 <L3>
+0+8018 <L1> addd 0,x
+0+801a <L1\+0x2> bne 0+8018 <L1>
+0+801c <L1\+0x4> addd \*0+4 <_toto>
+0+801e <L1\+0x6> beq 0+8018 <L1>
+0+8020 <L1\+0x8> addd \*0+5 <_toto\+0x1>
+0+8022 <L1\+0xa> bne 0+8018 <L1>
+0+8024 <L1\+0xc> bgt 0+8018 <L1>
+0+8026 <L1\+0xe> bge 0+8018 <L1>
+0+8028 <L1\+0x10> beq 0+8018 <L1>
+0+802a <L1\+0x12> ble 0+8018 <L1>
+0+802c <L1\+0x14> blt 0+8018 <L1>
+0+802e <L1\+0x16> bhi 0+8018 <L1>
+0+8030 <L1\+0x18> bcc 0+8018 <L1>
+0+8032 <L1\+0x1a> beq 0+8018 <L1>
+0+8034 <L1\+0x1c> bls 0+8018 <L1>
+0+8036 <L1\+0x1e> bcs 0+8018 <L1>
+0+8038 <L1\+0x20> bcs 0+8018 <L1>
+0+803a <L1\+0x22> bmi 0+8018 <L1>
+0+803c <L1\+0x24> bvs 0+8018 <L1>
+0+803e <L1\+0x26> bcc 0+8018 <L1>
+0+8040 <L1\+0x28> bpl 0+8018 <L1>
+0+8042 <L1\+0x2a> bvc 0+8018 <L1>
+0+8044 <L1\+0x2c> bne 0+8018 <L1>
+0+8046 <L1\+0x2e> brn 0+8018 <L1>
+0+8048 <L1\+0x30> bra 0+8018 <L1>
+0+804a <L1\+0x32> addd \*0+4 <_toto>
+0+804c <L1\+0x34> addd \*0+4 <_toto>
+0+804e <L1\+0x36> addd \*0+4 <_toto>
+0+8050 <L1\+0x38> addd \*0+4 <_toto>
+0+8052 <L1\+0x3a> addd \*0+4 <_toto>
+0+8054 <L1\+0x3c> addd \*0+4 <_toto>
+0+8056 <L1\+0x3e> addd \*0+4 <_toto>
+0+8058 <L1\+0x40> addd \*0+4 <_toto>
+0+805a <L1\+0x42> addd \*0+4 <_toto>
+0+805c <L1\+0x44> addd \*0+4 <_toto>
+0+805e <L1\+0x46> addd \*0+4 <_toto>
+0+8060 <L1\+0x48> addd \*0+4 <_toto>
+0+8062 <L1\+0x4a> addd \*0+4 <_toto>
+0+8064 <L1\+0x4c> addd \*0+4 <_toto>
+0+8066 <L1\+0x4e> addd \*0+4 <_toto>
+0+8068 <L2> bra 0+8000 <_start>
+0+806a <L2\+0x2> bne 0+8068 <L2>
+0+806c <L2\+0x4> beq 0+8074 <L3>
+0+806e <L2\+0x6> addd \*0+4 <_toto>
+0+8070 <L2\+0x8> beq 0+8074 <L3>
+0+8072 <L2\+0xa> addd \*0+4 <_toto>
+0+8074 <L3> addd \*0+4 <_toto>
+0+8076 <L3\+0x2> rts
diff --git a/binutils-2.21/ld/testsuite/ld-m68hc11/adj-jump.s b/binutils-2.21/ld/testsuite/ld-m68hc11/adj-jump.s
new file mode 100644
index 0000000..99b7258
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68hc11/adj-jump.s
@@ -0,0 +1,74 @@
+;;; Test 68HC11 linker relaxation and fixup of bcc/bra branches
+;;;
+ .sect .text
+ .globl _start
+_start:
+ ;; Next 'bra' is assembled as a 'jmp'. It is relaxed to 'bra L3'
+ ;; during a second pass of relax.
+ bra L3
+ .skip 20
+ ;; Next 'jmp' must be relaxed to a 'bra' during the first pass.
+ ;; The branch offset must then be adjusted by consecutive relax.
+ jmp L3
+L1:
+ addd 0,x
+ bne L1 ; Branch not adjusted
+ addd _toto
+ beq L1 ; Backward branch, adjust -1
+ addd _toto+1
+ jbne L1 ; Backward branch, adjust -2
+ bgt L1 ; All possible backward branchs, adjust -2
+ bge L1
+ beq L1
+ ble L1
+ blt L1
+ bhi L1
+ bhs L1
+ beq L1
+ bls L1
+ blo L1
+ bcs L1
+ bmi L1
+ bvs L1
+ bcc L1
+ bpl L1
+ bvc L1
+ bne L1
+ brn L1
+ bra L1
+ ;; Relax several insn to reduce block by 15
+ addd _toto
+ addd _toto
+ addd _toto
+ addd _toto
+ addd _toto
+ addd _toto
+ addd _toto
+ addd _toto
+ addd _toto
+ addd _toto
+ addd _toto
+ addd _toto
+ addd _toto
+ addd _toto
+ addd _toto
+L2:
+ jmp _start ; -> relax to bra _start
+ bne L2 ; Backward branch, adjust -1
+ beq L3 ; Forward branch, adjust -2
+ addd _toto
+ beq L3 ; Forward branch, adjust -1
+ addd _toto
+L3:
+ addd _toto
+ rts
+
+ .sect .page0
+_bar:
+ .long 0
+_toto:
+ .long 0
+ .skip 32
+stack:
+ .skip 10
+_table:
diff --git a/binutils-2.21/ld/testsuite/ld-m68hc11/bug-1403.d b/binutils-2.21/ld/testsuite/ld-m68hc11/bug-1403.d
new file mode 100644
index 0000000..c643cd1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68hc11/bug-1403.d
@@ -0,0 +1,12 @@
+#source: bug-1403.s
+#as: -m68hc11
+#ld: --relax
+#objdump: -d --prefix-addresses -r
+#target: m6811-*-* m6812-*-*
+
+.*: +file format elf32-m68hc11
+
+Disassembly of section .text:
+0+8000 <_start> bset \*0+ <__bss_size> \#\$04
+0+8003 <L1> bra 0+8005 <toto>
+0+8005 <toto> rts
diff --git a/binutils-2.21/ld/testsuite/ld-m68hc11/bug-1403.s b/binutils-2.21/ld/testsuite/ld-m68hc11/bug-1403.s
new file mode 100644
index 0000000..9c6fc9b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68hc11/bug-1403.s
@@ -0,0 +1,20 @@
+;;; Bug #1403: Branch adjustment to another section not correct when doing linker relaxation
+;;; http://savannah.gnu.org/bugs/?func=detailbug&bug_id=1403&group_id=2424
+;;;
+ .sect .text
+ .globl _start
+_start:
+ .relax L1
+ ldx #table
+ bset 0,x #4
+L1:
+ bra toto ; bra is assembled as a jmp and relaxed
+
+ .sect .page0
+ .globl table
+table: .long 0
+
+ .sect .text.toto
+ .globl toto
+toto:
+ rts
diff --git a/binutils-2.21/ld/testsuite/ld-m68hc11/bug-1417.d b/binutils-2.21/ld/testsuite/ld-m68hc11/bug-1417.d
new file mode 100644
index 0000000..84b3ad4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68hc11/bug-1417.d
@@ -0,0 +1,15 @@
+#source: bug-1417.s
+#as: -m68hc11
+#ld: --relax
+#objdump: -d --prefix-addresses -r
+#target: m6811-*-* m6812-*-*
+
+.*: +file format elf32-m68hc11
+
+Disassembly of section .text:
+0+8000 <_start> tst 0+ <__bss_size>
+0+8003 <_start\+0x3> bne 0+8007 <L1>
+0+8005 <_start\+0x5> bsr 0+800b <foo>
+0+8007 <L1> bset \*0+ <__bss_size> \#\$04
+0+800a <L2> rts
+0+800b <foo> rts
diff --git a/binutils-2.21/ld/testsuite/ld-m68hc11/bug-1417.s b/binutils-2.21/ld/testsuite/ld-m68hc11/bug-1417.s
new file mode 100644
index 0000000..2b3e6a1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68hc11/bug-1417.s
@@ -0,0 +1,21 @@
+;;; Bug #1417: Branch wrong after linker relaxation
+;;; http://savannah.gnu.org/bugs/?func=detailbug&bug_id=1417&group_id=2424
+;;;
+ .sect .text
+ .globl _start
+_start:
+ tst table
+ bne L1 ; Branch was adjusted but it must not
+ jsr foo
+L1:
+ .relax L2
+ ldx #table ; Instruction removed
+ bset 0,x #4 ; Changed to bset *table #4
+L2:
+ rts
+foo:
+ rts
+
+ .sect .page0
+ .globl table
+table: .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-m68hc11/bug-3331.d b/binutils-2.21/ld/testsuite/ld-m68hc11/bug-3331.d
new file mode 100644
index 0000000..91050bf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68hc11/bug-3331.d
@@ -0,0 +1,14 @@
+#source: bug-3331.s
+#as: -m68hc11
+#ld: --relax
+#objdump: -d --prefix-addresses -r
+#target: m6811-*-* m6812-*-*
+
+.*: +file format elf32-m68hc11
+
+Disassembly of section .text:
+0+8000 <_start> ldx #0+1100 <__data_section_start>
+0+8003 <_start\+0x3> bset 0,x \#\$04
+0+8006 <L1> ldd \#0+2 <__bss_size\+0x2>
+0+8009 <L1\+0x3> std \*0+ <__bss_size>
+0+800b <L1\+0x5> rts
diff --git a/binutils-2.21/ld/testsuite/ld-m68hc11/bug-3331.s b/binutils-2.21/ld/testsuite/ld-m68hc11/bug-3331.s
new file mode 100644
index 0000000..19a3201
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68hc11/bug-3331.s
@@ -0,0 +1,23 @@
+;;; Bug #3331: Invalid group relaxation, bset uses an invalid address
+;;; http://savannah.gnu.org/bugs/?func=detailbug&bug_id=3331&group_id=2424
+;;;
+ .sect .text
+ .globl _start
+_start:
+ .relax L1
+ ldx #foo ;; This relax group must not be changed.
+ bset 0,x #4
+L1:
+ ldd #2
+ std table ;; This instruction uses a symbol in page0
+ ;; and it triggered the relaxation of the
+ ;; previous relax group
+ rts
+
+ .sect .page0
+ .globl table
+table: .long 0
+
+ .sect .data
+ .globl foo
+foo: .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-m68hc11/far-hc11.d b/binutils-2.21/ld/testsuite/ld-m68hc11/far-hc11.d
new file mode 100644
index 0000000..e380511
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68hc11/far-hc11.d
@@ -0,0 +1,73 @@
+#source: far-hc11.s
+#as: -m68hc11
+#ld: -m m68hc11elf
+#objdump: -d --prefix-addresses -r
+#target: m6811-*-* m6812-*-*
+
+.*: file format elf32-m68hc11
+
+Disassembly of section .text:
+0+8000 <tramp._far_foo> pshb
+0+8001 <tramp._far_foo\+0x1> ldab \#0
+0+8003 <tramp._far_foo\+0x3> ldy \#0+6c <_far_foo>
+0+8007 <tramp._far_foo\+0x7> jmp 0+8056 <__far_trampoline>
+0+800a <tramp._far_bar> pshb
+0+800b <tramp._far_bar\+0x1> ldab \#0
+0+800d <tramp._far_bar\+0x3> ldy \#0+64 <stack>
+0+8011 <tramp._far_bar\+0x7> jmp 0+8056 <__far_trampoline>
+0+8014 <_start> lds \#0+64 <stack>
+0+8017 <_start\+0x3> ldx \#0+abcd <__data_image\+0x2b63>
+0+801a <_start\+0x6> pshx
+0+801b <_start\+0x7> ldd \#0+1234 <__data_section_start\+0x134>
+0+801e <_start\+0xa> ldx \#0+5678 <__data_section_start\+0x4578>
+0+8021 <_start\+0xd> jsr 0+800a <tramp._far_bar>
+0+8024 <_start\+0x10> cpx \#0+1234 <__data_section_start\+0x134>
+0+8027 <_start\+0x13> bne 0+804e <fail>
+0+8029 <_start\+0x15> cpd \#0+5678 <__data_section_start\+0x4578>
+0+802d <_start\+0x19> bne 0+804e <fail>
+0+802f <_start\+0x1b> pulx
+0+8030 <_start\+0x1c> cpx \#0+abcd <__data_image\+0x2b63>
+0+8033 <_start\+0x1f> bne 0+804e <fail>
+0+8035 <_start\+0x21> ldd \#0+8000 <tramp._far_foo>
+0+8038 <_start\+0x24> xgdx
+0+8039 <_start\+0x25> jsr 0,x
+0+803b <_start\+0x27> ldd \#0+800a <tramp._far_bar>
+0+803e <_start\+0x2a> xgdy
+0+8040 <_start\+0x2c> jsr 0,y
+0+8043 <_start\+0x2f> ldaa \#0
+0+8045 <_start\+0x31> ldy \#0+73 <_far_no_tramp>
+0+8049 <_start\+0x35> bsr 0+8066 <__call_a16>
+0+804b <_start\+0x37> clra
+0+804c <_start\+0x38> clrb
+0+804d <_start\+0x39> wai
+0+804e <fail> ldd \#0+1 <__bss_size\+0x1>
+0+8051 <fail\+0x3> wai
+0+8052 <fail\+0x4> bra 0+8014 <_start>
+0+8054 <__return> ins
+0+8055 <__return\+0x1> rts
+0+8056 <__far_trampoline> psha
+0+8057 <__far_trampoline\+0x1> psha
+0+8058 <__far_trampoline\+0x2> pshx
+0+8059 <__far_trampoline\+0x3> tsx
+0+805a <__far_trampoline\+0x4> ldab 4,x
+0+805c <__far_trampoline\+0x6> ldaa 2,x
+0+805e <__far_trampoline\+0x8> staa 4,x
+0+8060 <__far_trampoline\+0xa> pulx
+0+8061 <__far_trampoline\+0xb> pula
+0+8062 <__far_trampoline\+0xc> pula
+0+8063 <__far_trampoline\+0xd> jmp 0,y
+0+8066 <__call_a16> psha
+0+8067 <__call_a16\+0x1> jmp 0,y
+Disassembly of section .bank1:
+0+64 <_far_bar> jsr 0+6b <local_bank1>
+0+67 <_far_bar\+0x3> xgdx
+0+68 <_far_bar\+0x4> jmp 0+8054 <__return>
+0+6b <local_bank1> rts
+Disassembly of section .bank2:
+0+6c <_far_foo> jsr 0+72 <local_bank2>
+0+6f <_far_foo\+0x3> jmp 0+8054 <__return>
+0+72 <local_bank2> rts
+Disassembly of section .bank3:
+0+73 <_far_no_tramp> jsr 0+79 <local_bank3>
+0+76 <_far_no_tramp\+0x3> jmp 0+8054 <__return>
+0+79 <local_bank3> rts
diff --git a/binutils-2.21/ld/testsuite/ld-m68hc11/far-hc11.s b/binutils-2.21/ld/testsuite/ld-m68hc11/far-hc11.s
new file mode 100644
index 0000000..e8e63d4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68hc11/far-hc11.s
@@ -0,0 +1,105 @@
+;;; Test 68HC11 FAR trampoline generation
+;;; 2 trampolines are generated:
+;;; - one for '_far_bar'
+;;; - one for '_far_foo'
+;;; 'far_no_tramp' does not have any trampoline generated.
+;;;
+ .sect .text
+ .globl _start
+_start:
+start:
+ lds #stack
+ ldx #0xabcd
+ pshx
+ ldd #0x1234
+ ldx #0x5678
+ bsr _far_bar ; Call to trampoline generated code
+ cpx #0x1234
+ bne fail ; X and D preserved (swapped by _far_bar)
+ cpd #0x5678
+ bne fail
+ pulx
+ cpx #0xabcd ; Stack parameter preserved
+ bne fail
+ ldd #_far_foo ; Get address of trampoline handler
+ xgdx
+ jsr 0,x
+ ldd #_far_bar ; Likewise (unique trampoline check)
+ xgdy
+ jsr 0,y
+ ldaa #%page(_far_no_tramp)
+ ldy #%addr(_far_no_tramp)
+ bsr __call_a16 ; No trampoline generated for _far_no_tramp
+ clra
+ clrb
+ wai
+fail:
+ ldd #1
+ wai
+ bra start
+ .global __return
+__return:
+ ins
+ rts
+
+ .sect .bank1,"ax"
+ .globl _far_bar
+ .far _far_bar ; Must mark symbol as far
+_far_bar:
+ jsr local_bank1
+ xgdx
+ jmp __return
+
+local_bank1:
+ rts
+
+ .sect .bank2,"ax"
+ .globl _far_foo
+ .far _far_foo
+_far_foo:
+ jsr local_bank2
+ jmp __return
+
+local_bank2:
+ rts
+
+ .sect .bank3,"ax"
+ .globl _far_no_tramp
+ .far _far_no_tramp
+_far_no_tramp:
+ jsr local_bank3
+ jmp __return
+
+local_bank3:
+ rts
+
+ .sect .text
+ .globl __far_trampoline
+__far_trampoline:
+ psha ; (2) Save function parameter (high)
+ ;; <Read current page in A>
+ psha ; (2)
+ ;; <Set currenge page from B>
+ pshx ; (4)
+ tsx ; (3)
+ ldab 4,x ; (4) Restore function parameter (low)
+ ldaa 2,x ; (4) Get saved page number
+ staa 4,x ; (4) Save it below return PC
+ pulx ; (5)
+ pula ; (3)
+ pula ; (3) Restore function parameter (high)
+ jmp 0,y ; (4)
+
+ .globl __call_a16
+__call_a16:
+ ;; xgdx ; (3)
+ ;; <Read current page in A> ; (3) ldaa _current_page
+ psha ; (2)
+ ;; <Set current page from B> ; (4) staa _current_page
+ ;; xgdx ; (3)
+ jmp 0,y ; (4)
+
+ .sect .page0
+ .skip 100
+stack:
+
diff --git a/binutils-2.21/ld/testsuite/ld-m68hc11/far-hc12.d b/binutils-2.21/ld/testsuite/ld-m68hc11/far-hc12.d
new file mode 100644
index 0000000..304ae87
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68hc11/far-hc12.d
@@ -0,0 +1,55 @@
+#source: far-hc12.s
+#as: -m68hc12
+#ld: -m m68hc12elf --script $srcdir/$subdir/far-hc12.ld
+#objdump: -d --prefix-addresses -r
+#target: m6811-*-* m6812-*-*
+
+.*: file format elf32\-m68hc12
+
+Disassembly of section .text:
+0+c000 <tramp\._far_foo> ldy \#0+8000 <__bank_start>
+0+c003 <tramp\._far_foo\+0x3> call 0+c049 <__far_trampoline> \{0+c049 <__far_trampoline>, 1\}
+0+c007 <tramp\._far_bar> ldy \#0+8000 <__bank_start>
+0+c00a <tramp\._far_bar\+0x3> call 0+c049 <__far_trampoline> \{0+c049 <__far_trampoline>, 0\}
+0+c00e <_start> lds \#0+2063 <stack-0x1>
+0+c011 <_start\+0x3> ldx \#0+abcd <__bank_start\+0x2bcd>
+0+c014 <_start\+0x6> pshx
+0+c015 <_start\+0x7> ldd \#0+1234 <stack\-0xe30>
+0+c018 <_start\+0xa> ldx \#0+5678 <__bank_size\+0x1678>
+0+c01b <_start\+0xd> jsr 0+c007 <tramp._far_bar>
+0+c01e <_start\+0x10> cpx \#0+1234 <stack\-0xe30>
+0+c021 <_start\+0x13> bne 0+c043 <fail>
+0+c023 <_start\+0x15> cpd \#0+5678 <__bank_size\+0x1678>
+0+c026 <_start\+0x18> bne 0+c043 <fail>
+0+c028 <_start\+0x1a> pulx
+0+c029 <_start\+0x1b> cpx \#0+abcd <__bank_start\+0x2bcd>
+0+c02c <_start\+0x1e> bne 0+c043 <fail>
+0+c02e <_start\+0x20> ldd \#0+c000 <tramp._far_foo>
+0+c031 <_start\+0x23> xgdx
+0+c033 <_start\+0x25> jsr 0,X
+0+c035 <_start\+0x27> ldd \#0+c007 <tramp._far_bar>
+0+c038 <_start\+0x2a> xgdy
+0+c03a <_start\+0x2c> jsr 0,Y
+0+c03c <_start\+0x2e> call 0+18000 <_far_no_tramp> \{0+8000 <__bank_start>, 2\}
+0+c040 <_start\+0x32> clra
+0+c041 <_start\+0x33> clrb
+0+c042 <_start\+0x34> wai
+0+c043 <fail> ldd \#0+1 <stack\-0x2063>
+0+c046 <fail\+0x3> wai
+0+c047 <fail\+0x4> bra 0+c00e <_start>
+0+c049 <__far_trampoline> movb 0,SP, 2,SP
+0+c04d <__far_trampoline\+0x4> leas 2,SP
+0+c04f <__far_trampoline\+0x6> jmp 0,Y
+Disassembly of section .bank1:
+0+10+ <_far_bar> jsr 0+10006 <local_bank1>
+0+10003 <_far_bar\+0x3> xgdx
+0+10005 <_far_bar\+0x5> rtc
+0+10006 <local_bank1> rts
+Disassembly of section .bank2:
+0+14000 <_far_foo> jsr 0+14004 <local_bank2>
+0+14003 <_far_foo\+0x3> rtc
+0+14004 <local_bank2> rts
+Disassembly of section .bank3:
+0+18000 <_far_no_tramp> jsr 0+18004 <local_bank3>
+0+18003 <_far_no_tramp\+0x3> rtc
+0+18004 <local_bank3> rts
diff --git a/binutils-2.21/ld/testsuite/ld-m68hc11/far-hc12.ld b/binutils-2.21/ld/testsuite/ld-m68hc11/far-hc12.ld
new file mode 100644
index 0000000..78dffe6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68hc11/far-hc12.ld
@@ -0,0 +1,18 @@
+ENTRY(_start)
+SECTIONS {
+ .text 0xc000 : {
+ *(.text)
+ }
+ .bank1 0x10000 : {
+ *(.bank1)
+ }
+ .bank2 0x14000 : {
+ *(.bank2)
+ }
+ .bank3 0x18000 : {
+ *(.bank3)
+ }
+ .bss 0x2000 : {
+ *(.bss)
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-m68hc11/far-hc12.s b/binutils-2.21/ld/testsuite/ld-m68hc11/far-hc12.s
new file mode 100644
index 0000000..0081e38
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68hc11/far-hc12.s
@@ -0,0 +1,83 @@
+;;; Test 68HC12 FAR trampoline generation
+;;; 2 trampolines are generated:
+;;; - one for '_far_bar'
+;;; - one for '_far_foo'
+;;; 'far_no_tramp' does not have any trampoline generated.
+;;;
+ .sect .text
+ .globl _start
+_start:
+start:
+ lds #stack-1
+ ldx #0xabcd
+ pshx
+ ldd #0x1234
+ ldx #0x5678
+ bsr _far_bar ; Call to trampoline generated code
+ cpx #0x1234
+ bne fail ; X and D preserved (swapped by _far_bar)
+ cpd #0x5678
+ bne fail
+ pulx
+ cpx #0xabcd ; Stack parameter preserved
+ bne fail
+ ldd #_far_foo ; Get address of trampoline handler
+ xgdx
+ jsr 0,x
+ ldd #_far_bar ; Likewise (unique trampoline check)
+ xgdy
+ jsr 0,y
+ call _far_no_tramp ; No trampoline generated for _far_no_tramp
+ clra
+ clrb
+ wai
+fail:
+ ldd #1
+ wai
+ bra start
+
+ .sect .bank1,"ax"
+ .globl _far_bar
+ .far _far_bar ; Must mark symbol as far
+_far_bar:
+ jsr local_bank1
+ xgdx
+ rtc
+
+local_bank1:
+ rts
+
+ .sect .bank2,"ax"
+ .globl _far_foo
+ .far _far_foo
+_far_foo:
+ jsr local_bank2
+ rtc
+
+local_bank2:
+ rts
+
+ .sect .bank3,"ax"
+ .globl _far_no_tramp
+ .far _far_no_tramp
+_far_no_tramp:
+ jsr local_bank3
+ rtc
+
+local_bank3:
+ rts
+
+ .sect .text
+ .globl __far_trampoline
+__far_trampoline:
+ movb 0,sp, 2,sp ; Copy page register below the caller's return
+ leas 2,sp ; address.
+ jmp 0,y ; We have a 'call/rtc' stack layout now
+ ; and can jump to the far handler
+ ; (whose memory bank is mapped due to the
+ ; call to the trampoline).
+
+ .sect .bss
+ .skip 100
+stack:
+
diff --git a/binutils-2.21/ld/testsuite/ld-m68hc11/link-hc12.s b/binutils-2.21/ld/testsuite/ld-m68hc11/link-hc12.s
new file mode 100644
index 0000000..43b97c5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68hc11/link-hc12.s
@@ -0,0 +1,6 @@
+;;; Test 68HCS12 and 68HC12 mixes (compatible case)
+;;;
+ .sect .text
+ .globl main
+main:
+ rts
diff --git a/binutils-2.21/ld/testsuite/ld-m68hc11/link-hcs12.d b/binutils-2.21/ld/testsuite/ld-m68hc11/link-hcs12.d
new file mode 100644
index 0000000..f243da2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68hc11/link-hcs12.d
@@ -0,0 +1,24 @@
+#source: link-hcs12.s -m68hcs12
+#source: link-hc12.s -m68hc12
+#as: -mshort
+#ld: -m m68hc12elf
+#objdump: -p -d --prefix-addresses -r
+#target: m6811-*-* m6812-*-*
+
+.*: file format elf32\-m68hc12
+
+Program Header:
+ LOAD off 0x0+ vaddr 0x0+1000 paddr 0x0+1000 align 2\*\*12
+ filesz 0x0+100 memsz 0x0+100 flags rw-
+ LOAD off 0x0+1000 vaddr 0x0+8000 paddr 0x0+8000 align 2\*\*12
+ filesz 0x0+6 memsz 0x0+6 flags r-x
+ LOAD off 0x0+1100 vaddr 0x0+1100 paddr 0x0+8006 align 2\*\*12
+ filesz 0x0+ memsz 0x0+ flags rw-
+private flags = 22:\[abi=16\-bit int, 64\-bit double, cpu=HCS12\] \[memory=flat\]
+
+Disassembly of section .text:
+0+8000 <_start> jsr 0+8005 <main>
+0+8003 <_start\+0x3> bra 0+8000 <_start>
+0+8005 <main> rts
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-m68hc11/link-hcs12.s b/binutils-2.21/ld/testsuite/ld-m68hc11/link-hcs12.s
new file mode 100644
index 0000000..868d4cf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68hc11/link-hcs12.s
@@ -0,0 +1,7 @@
+;;; Test 68HCS12 and 68HC12 mixes (compatible case)
+;;;
+ .sect .text
+ .globl _start
+_start:
+ bsr main
+ bra _start
diff --git a/binutils-2.21/ld/testsuite/ld-m68hc11/m68hc11.exp b/binutils-2.21/ld/testsuite/ld-m68hc11/m68hc11.exp
new file mode 100644
index 0000000..103b792
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68hc11/m68hc11.exp
@@ -0,0 +1,34 @@
+# Expect script for run_dump_test based ld-m68hc11 tests.
+# Copyright 2002, 2005, 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Adapted from ld-sh/rd-sh.exp
+
+# Test 68HC11 relaxing. This tests the assembler as well as the linker.
+
+if { ![istarget m6811-*-*] && ![istarget m6812-*-*] } {
+ return
+}
+
+set rd_test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
+foreach shtest $rd_test_list {
+ # We need to strip the ".d", but can leave the dirname.
+ verbose [file rootname $shtest]
+ run_dump_test [file rootname $shtest]
+}
diff --git a/binutils-2.21/ld/testsuite/ld-m68hc11/relax-direct.d b/binutils-2.21/ld/testsuite/ld-m68hc11/relax-direct.d
new file mode 100644
index 0000000..9bd0822
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68hc11/relax-direct.d
@@ -0,0 +1,63 @@
+#source: relax-direct.s
+#as: -m68hc11
+#ld: --relax
+#objdump: -d --prefix-addresses -r
+#target: m6811-*-* m6812-*-*
+
+.*: +file format elf32-m68hc11
+
+Disassembly of section .text:
+0+8000 <_start> lds \*0+28 <stack>
+0+8002 <_start\+0x2> ldd \*0+ <__bss_size>
+0+8004 <_start\+0x4> beq 0+800f <F1>
+0+8006 <_start\+0x6> bne 0+800b <_start\+0xb>
+0+8008 <_start\+0x8> jmp 0+8138 <F2>
+0+800b <_start\+0xb> std \*0+ <__bss_size>
+0+800d <_start\+0xd> jsr \*0+ <__bss_size>
+0+800f <F1> addd \*0+4 <_toto>
+0+8011 <F1\+0x2> bne 0+8000 <_start>
+0+8013 <F1\+0x4> addd \*0+cc <_table\+0x9a>
+0+8015 <F1\+0x6> addd 0+114 <_stack_top\+0x1a>
+0+8018 <F1\+0x9> adca \*0+34 <_table\+0x2>
+0+801a <F1\+0xb> adcb \*0+35 <_table\+0x3>
+0+801c <F1\+0xd> adda \*0+36 <_table\+0x4>
+0+801e <F1\+0xf> addb \*0+37 <_table\+0x5>
+0+8020 <F1\+0x11> addd \*0+38 <_table\+0x6>
+0+8022 <F1\+0x13> anda \*0+39 <_table\+0x7>
+0+8024 <F1\+0x15> andb \*0+3a <_table\+0x8>
+0+8026 <F1\+0x17> cmpa \*0+3b <_table\+0x9>
+0+8028 <F1\+0x19> cmpb \*0+3c <_table\+0xa>
+0+802a <F1\+0x1b> cpd \*0+3d <_table\+0xb>
+0+802d <F1\+0x1e> cpx \*0+3e <_table\+0xc>
+0+802f <F1\+0x20> cpy \*0+3f <_table\+0xd>
+0+8032 <F1\+0x23> eora \*0+40 <_table\+0xe>
+0+8034 <F1\+0x25> eorb \*0+41 <_table\+0xf>
+0+8036 <F1\+0x27> jsr \*0+42 <_table\+0x10>
+0+8038 <F1\+0x29> ldaa \*0+43 <_table\+0x11>
+0+803a <F1\+0x2b> ldab \*0+44 <_table\+0x12>
+0+803c <F1\+0x2d> ldd \*0+45 <_table\+0x13>
+0+803e <F1\+0x2f> lds \*0+46 <_table\+0x14>
+0+8040 <F1\+0x31> ldx \*0+47 <_table\+0x15>
+0+8042 <F1\+0x33> ldy \*0+48 <_table\+0x16>
+0+8045 <F1\+0x36> oraa \*0+49 <_table\+0x17>
+0+8047 <F1\+0x38> orab \*0+4a <_table\+0x18>
+0+8049 <F1\+0x3a> sbcb \*0+4b <_table\+0x19>
+0+804b <F1\+0x3c> sbca \*0+4c <_table\+0x1a>
+0+804d <F1\+0x3e> staa \*0+4d <_table\+0x1b>
+0+804f <F1\+0x40> stab \*0+4e <_table\+0x1c>
+0+8051 <F1\+0x42> std \*0+4f <_table\+0x1d>
+0+8053 <F1\+0x44> sts \*0+50 <_table\+0x1e>
+0+8055 <F1\+0x46> stx \*0+51 <_table\+0x1f>
+0+8057 <F1\+0x48> sty \*0+52 <_table\+0x20>
+0+805a <F1\+0x4b> suba \*0+53 <_table\+0x21>
+0+805c <F1\+0x4d> subb \*0+54 <_table\+0x22>
+0+805e <F1\+0x4f> subd \*0+55 <_table\+0x23>
+0+8060 <F1\+0x51> bne 0+8000 <_start>
+0+8062 <F1\+0x53> bra 0+800f <F1>
+0+8064 <F1\+0x55> rts
+0+8065 <no_relax> addd 0+136 <_stack_top\+0x3c>
+0+8068 <no_relax\+0x3> std 0+122 <_stack_top\+0x28>
+0+806b <no_relax\+0x6> tst 0+5 <_toto\+0x1>
+0+806e <no_relax\+0x9> bne 0+8065 <no_relax>
+ ...
+0+8138 <F2> jmp 0+8000 <_start>
diff --git a/binutils-2.21/ld/testsuite/ld-m68hc11/relax-direct.s b/binutils-2.21/ld/testsuite/ld-m68hc11/relax-direct.s
new file mode 100644
index 0000000..f449772
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68hc11/relax-direct.s
@@ -0,0 +1,84 @@
+;;; Test 68HC11 linker relaxation from extended addressing to direct
+;;; addressing modes
+;;;
+ .sect .text
+ .globl _start
+_start:
+start:
+ lds stack
+ ldd _bar
+ beq F1
+ beq F2
+ std _bar
+ jsr _bar
+F1:
+ addd _toto
+ bne start
+ ;; All the following instructions will be relaxed and win 1 byte
+ ;; for each.
+ addd _toto+200
+ addd stack+256-20
+ adca _table+2
+ adcb _table+3
+ adda _table+4
+ addb _table+5
+ addd _table+6
+ anda _table+7
+ andb _table+8
+ cmpa _table+9
+ cmpb _table+10
+ cpd _table+11
+ cpx _table+12
+ cpy _table+13
+ eora _table+14
+ eorb _table+15
+ jsr _table+16
+ ldaa _table+17
+ ldab _table+18
+ ldd _table+19
+ lds _table+20
+ ldx _table+21
+ ldy _table+22
+ oraa _table+23
+ orab _table+24
+ sbcb _table+25
+ sbca _table+26
+ staa _table+27
+ stab _table+28
+ std _table+29
+ sts _table+30
+ stx _table+31
+ sty _table+32
+ suba _table+33
+ subb _table+34
+ subd _table+35
+ ;; 'bne' is assembled as far branch and must relax to
+ ;; a relative 8-bit branch.
+ bne _start
+ ;; Likewise for next branch
+ bra F1
+ rts
+
+;;; The following instructions will not be relaxed
+no_relax:
+ addd _stack_top+60
+ std _stack_top+40
+ ;; 'tst' does not support direct addressing mode.
+ tst _toto+1
+ bne no_relax
+ .skip 200
+F2:
+ bra _start
+
+ .sect .page0
+_bar:
+ .long 0
+_toto:
+ .long 0
+ .skip 32
+stack:
+ .skip 10
+_table:
+ .skip 200
+_stack_top:
+
diff --git a/binutils-2.21/ld/testsuite/ld-m68hc11/relax-group.d b/binutils-2.21/ld/testsuite/ld-m68hc11/relax-group.d
new file mode 100644
index 0000000..baf294b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68hc11/relax-group.d
@@ -0,0 +1,63 @@
+#source: relax-group.s
+#as: -m68hc11
+#ld: --relax
+#objdump: -d --prefix-addresses -r
+#target: m6811-*-* m6812-*-*
+
+.*: +file format elf32-m68hc11
+
+Disassembly of section .text:
+0+8000 <_start> bset \*0+ <__bss_size> #\$04
+0+8003 <L1x> bset \*0+ <__bss_size> #\$04
+0+8006 <L1y> bset \*0+3 <__bss_size\+0x3> #\$04
+0+8009 <L1y\+0x3> bset \*0+4 <table4> #\$08
+0+800c <L2x> bset \*0+3 <__bss_size\+0x3> #\$04
+0+800f <L2x\+0x3> bset \*0+4 <table4> #\$08
+0+8012 <L2y> bset \*0+6 <table4\+0x2> #\$04
+0+8015 <L2y\+0x3> bset \*0+7 <table4\+0x3> #\$08
+0+8018 <L2y\+0x6> bset \*0+8 <table8> #\$0c
+0+801b <L2y\+0x9> bset \*0+9 <table8\+0x1> #\$0c
+0+801e <L2y\+0xc> bset \*0+a <table8\+0x2> #\$0c
+0+8021 <L2y\+0xf> bset \*0+b <table8\+0x3> #\$0c
+0+8024 <L3x> bset \*0+6 <table4\+0x2> #\$04
+0+8027 <L3x\+0x3> bset \*0+7 <table4\+0x3> #\$08
+0+802a <L3x\+0x6> bset \*0+8 <table8> #\$0c
+0+802d <L3x\+0x9> bset \*0+9 <table8\+0x1> #\$0c
+0+8030 <L3x\+0xc> bset \*0+a <table8\+0x2> #\$0c
+0+8033 <L3x\+0xf> bset \*0+b <table8\+0x3> #\$0c
+0+8036 <L3y> bra 0+8000 <_start>
+0+8038 <L3y\+0x2> ldx #0+fe <end_table\+0xe8>
+0+803b <L3y\+0x5> bset \*0+fe <end_table\+0xe8> #\$04
+0+803e <L3y\+0x8> bset \*0+ff <end_table\+0xe9> #\$08
+0+8041 <L3y\+0xb> bset 2,x #\$0c
+0+8044 <L3y\+0xe> bset 3,x #\$0c
+0+8047 <L3y\+0x11> bset 4,x #\$0c
+0+804a <L3y\+0x14> bset 5,x #\$0c
+0+804d <L4x> ldy #0+fe <end_table\+0xe8>
+0+8051 <L4x\+0x4> bset \*0+fe <end_table\+0xe8> #\$04
+0+8054 <L4x\+0x7> bset \*0+ff <end_table\+0xe9> #\$08
+0+8057 <L4x\+0xa> bset 2,y #\$0c
+0+805b <L4x\+0xe> bset 3,y #\$0c
+0+805f <L4x\+0x12> bset 4,y #\$0c
+0+8063 <L4x\+0x16> bset 5,y #\$0c
+0+8067 <L4y> bclr \*0+a <table8\+0x2> #\$04
+0+806a <L4y\+0x3> bclr \*0+b <table8\+0x3> #\$08
+0+806d <L5x> bclr \*0+1a <end_table\+0x4> #\$04
+0+8070 <L5x\+0x3> bclr \*0+1b <end_table\+0x5> #\$08
+0+8073 <L5y> brset \*0+8 <table8> #\$04 0+8073 <L5y>
+0+8077 <L6x> brset \*0+8 <table8> #\$04 0+8077 <L6x>
+0+807b <L7x> brset \*0+8 <table8> #\$04 0+8094 <brend>
+0+807f <L8x> brset \*0+8 <table8> #\$04 0+8094 <brend>
+0+8083 <L8y> brclr \*0+8 <table8> #\$04 0+8083 <L8y>
+0+8087 <L9x> brclr \*0+8 <table8> #\$04 0+8087 <L9x>
+0+808b <L9y> brclr \*0+8 <table8> #\$04 0+8094 <brend>
+0+808f <L10x> brclr \*0+8 <table8> #\$04 0+8094 <brend>
+0+8093 <L10y> nop
+0+8094 <brend> bset 0,x #\$04
+0+8097 <w2> ldx #0+ <__bss_size>
+0+809a <w3> ldy #0+8 <table8>
+0+809e <w4> rts
+0+809f <w5> ldx #0+ <__bss_size>
+0+80a2 <w5\+0x3> bset 0,x #\$05
+0+80a5 <w5\+0x6> jmp 0+8000 <_start>
+0+80a8 <w5\+0x9> rts
diff --git a/binutils-2.21/ld/testsuite/ld-m68hc11/relax-group.s b/binutils-2.21/ld/testsuite/ld-m68hc11/relax-group.s
new file mode 100644
index 0000000..41c55f5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68hc11/relax-group.s
@@ -0,0 +1,161 @@
+;;; Test 68HC11 linker relaxation (group relax)
+;;;
+ .sect .text
+ .globl _start
+_start:
+;;;
+;;; The following group of instructions are adjusted.
+;;;
+ .relax L1x
+ ldx #table
+ bset 0,x #4
+L1x:
+ .relax L1y
+ ldy #table
+ bset 0,y #4
+L1y:
+ .relax L2x
+ ldx #table+3
+ bset 0,x #4
+ bset 1,x #8
+L2x:
+ .relax L2y
+ ldy #table+3
+ bset 0,y #4
+ bset 1,y #8
+L2y:
+ .relax L3x
+ ldx #table+6
+ bset 0,x #4
+ bset 1,x #8
+ bset 2,x #12
+ bset 3,x #12
+ bset 4,x #12
+ bset 5,x #12
+L3x:
+ .relax L3y
+ ldy #table+6
+ bset 0,y #4
+ bset 1,y #8
+ bset 2,y #12
+ bset 3,y #12
+ bset 4,y #12
+ bset 5,y #12
+L3y:
+ ;; Next branch is always relative. It must be adjusted while
+ ;; above instructions are relaxed.
+ bra _start
+;;;
+;;; This group has the first two bset insn relaxable while the
+;;; others are not. The ldx/ldy must not be removed.
+;;;
+ .relax L4x
+ ldx #table+0xfe
+ bset 0,x #4
+ bset 1,x #8
+ bset 2,x #12
+ bset 3,x #12
+ bset 4,x #12
+ bset 5,x #12
+L4x:
+ .relax L4y
+ ldy #table+0xfe
+ bset 0,y #4
+ bset 1,y #8
+ bset 2,y #12
+ bset 3,y #12
+ bset 4,y #12
+ bset 5,y #12
+L4y:
+;;;
+;;; Relax group for bclr
+;;;
+ .relax L5x
+ ldx #table+10
+ bclr 0,x #4
+ bclr 1,x #8
+L5x:
+ .relax L5y
+ ldy #table+16
+ bclr 10,y #4
+ bclr 11,y #8
+L5y:
+;;;
+;;; Relax group for brset (with backward branch)
+;;;
+ .relax L6x
+ ldx #table+8
+ brset 0,x #4 L5y
+L6x:
+ .relax L7x
+ ldy #table+8
+ brset 0,y #4 L6x
+L7x:
+;;;
+;;; Relax group for brset (with forward branch)
+;;;
+ .relax L8x
+ ldx #table+8
+ brset 0,x #4 brend
+L8x:
+ .relax L8y
+ ldy #table+8
+ brset 0,y #4 brend
+L8y:
+;;;
+;;; Relax group for brclr (with backward branch)
+;;;
+ .relax L9x
+ ldx #table+8
+ brclr 0,x #4 L8y
+L9x:
+ .relax L9y
+ ldy #table+8
+ brclr 0,y #4 L9x
+L9y:
+;;;
+;;; Relax group for brclr (with forward branch)
+;;;
+ .relax L10x
+ ldx #table+8
+ brclr 0,x #4 brend
+L10x:
+ .relax L10y
+ ldy #table+8
+ brclr 0,y #4 brend
+L10y:
+ nop
+brend:
+;;;
+;;; The following are wrong use of .relax groups.
+;;;
+ .relax w1
+w1:
+ .relax w2
+ bset 0,x #4
+w2:
+ .relax w3
+ ldx #table
+w3:
+ .relax w4
+ ldy #table+8
+w4:
+ .relax w5
+ rts
+w5:
+;;;
+;;; Next insn is not in a .relax group
+ ldx #table
+ bset 0,x #5
+ bra _start
+ rts
+
+ .sect .page0
+ .globl table
+table: .long 0
+table4: .long 0
+table8: .long 0
+ .skip 10
+end_table:
+ .long 0
+
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/got-1.d b/binutils-2.21/ld/testsuite/ld-m68k/got-1.d
new file mode 100644
index 0000000..e8070e9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/got-1.d
@@ -0,0 +1,19 @@
+#source: got-1.s
+#ld: -shared
+#readelf: -d -r
+
+Dynamic section at offset .* contains 9 entries:
+ Tag Type Name/Value
+ 0x00000004 \(HASH\) 0x[0-9a-f]+
+ 0x00000005 \(STRTAB\) 0x[0-9a-f]+
+ 0x00000006 \(SYMTAB\) 0x[0-9a-f]+
+ 0x0000000a \(STRSZ\) [0-9]+ \(bytes\)
+ 0x0000000b \(SYMENT\) 16 \(bytes\)
+ 0x00000007 \(RELA\) 0x[0-9a-f]+
+ 0x00000008 \(RELASZ\) 12 \(bytes\)
+ 0x00000009 \(RELAENT\) 12 \(bytes\)
+ 0x00000000 \(NULL\) 0x0
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
+ Offset Info Type Sym.Value Sym. Name \+ Addend
+[0-9a-f]+ [0-9a-f]+ R_68K_GLOB_DAT 00000000 a \+ 0
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/got-1.s b/binutils-2.21/ld/testsuite/ld-m68k/got-1.s
new file mode 100644
index 0000000..0cf3692
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/got-1.s
@@ -0,0 +1,18 @@
+#NO_APP
+ .file "got-1.c"
+ .text
+ .align 2
+ .globl foo
+ .type foo, @function
+foo:
+ link.w %fp,#0
+ move.l %a5,-(%sp)
+ lea (%pc, _GLOBAL_OFFSET_TABLE_@GOTPC), %a5
+ move.l a@GOT(%a5),%d0
+ move.l %d0,%a0
+ move.l (%a0),%d0
+ move.l (%sp)+,%a5
+ unlk %fp
+ rts
+ .size foo, .-foo
+ .section .note.GNU-stack,"",@progbits
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/got-multigot-12-13-14-34-35-ok.d b/binutils-2.21/ld/testsuite/ld-m68k/got-multigot-12-13-14-34-35-ok.d
new file mode 100644
index 0000000..176961b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/got-multigot-12-13-14-34-35-ok.d
@@ -0,0 +1,18 @@
+#as: -mcpu=5206
+#ld: -shared --got=multigot
+#readelf: -d -r
+
+Dynamic section at offset .* contains 9 entries:
+ Tag Type Name/Value
+ 0x00000004 \(HASH\) 0x[0-9a-f]+
+ 0x00000005 \(STRTAB\) 0x[0-9a-f]+
+ 0x00000006 \(SYMTAB\) 0x[0-9a-f]+
+ 0x0000000a \(STRSZ\) [0-9]+ \(bytes\)
+ 0x0000000b \(SYMENT\) 16 \(bytes\)
+ 0x00000007 \(RELA\) 0x[0-9a-f]+
+ 0x00000008 \(RELASZ\) 294936 \(bytes\)
+ 0x00000009 \(RELAENT\) 12 \(bytes\)
+ 0x00000000 \(NULL\) 0x0
+
+Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 24578 entries:
+ Offset Info Type Sym.Value Sym. Name \+ Addend
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/got-multigot-14-ok.d b/binutils-2.21/ld/testsuite/ld-m68k/got-multigot-14-ok.d
new file mode 100644
index 0000000..7ebc589
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/got-multigot-14-ok.d
@@ -0,0 +1,18 @@
+#as: -mcpu=5206
+#ld: -shared --got=multigot
+#readelf: -d -r
+
+Dynamic section at offset .* contains 9 entries:
+ Tag Type Name/Value
+ 0x00000004 \(HASH\) 0x[0-9a-f]+
+ 0x00000005 \(STRTAB\) 0x[0-9a-f]+
+ 0x00000006 \(SYMTAB\) 0x[0-9a-f]+
+ 0x0000000a \(STRSZ\) [0-9]+ \(bytes\)
+ 0x0000000b \(SYMENT\) 16 \(bytes\)
+ 0x00000007 \(RELA\) 0x[0-9a-f]+
+ 0x00000008 \(RELASZ\) 196584 \(bytes\)
+ 0x00000009 \(RELAENT\) 12 \(bytes\)
+ 0x00000000 \(NULL\) 0x0
+
+Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 16382 entries:
+ Offset Info Type Sym.Value Sym. Name \+ Addend
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/got-multigot-15-er.d b/binutils-2.21/ld/testsuite/ld-m68k/got-multigot-15-er.d
new file mode 100644
index 0000000..58381ae
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/got-multigot-15-er.d
@@ -0,0 +1,3 @@
+#as: -mcpu=5206
+#ld: -shared --got=multigot
+#error: .*GOT overflow.*
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/got-negative-12-13-14-34-ok.d b/binutils-2.21/ld/testsuite/ld-m68k/got-negative-12-13-14-34-ok.d
new file mode 100644
index 0000000..451df80
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/got-negative-12-13-14-34-ok.d
@@ -0,0 +1,18 @@
+#as: -mcpu=5206
+#ld: -shared --got=negative
+#readelf: -d -r
+
+Dynamic section at offset .* contains 9 entries:
+ Tag Type Name/Value
+ 0x00000004 \(HASH\) 0x[0-9a-f]+
+ 0x00000005 \(STRTAB\) 0x[0-9a-f]+
+ 0x00000006 \(SYMTAB\) 0x[0-9a-f]+
+ 0x0000000a \(STRSZ\) [0-9]+ \(bytes\)
+ 0x0000000b \(SYMENT\) 16 \(bytes\)
+ 0x00000007 \(RELA\) 0x[0-9a-f]+
+ 0x00000008 \(RELASZ\) 196584 \(bytes\)
+ 0x00000009 \(RELAENT\) 12 \(bytes\)
+ 0x00000000 \(NULL\) 0x0
+
+Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 16382 entries:
+ Offset Info Type Sym.Value Sym. Name \+ Addend
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/got-negative-12-13-14-35-er.d b/binutils-2.21/ld/testsuite/ld-m68k/got-negative-12-13-14-35-er.d
new file mode 100644
index 0000000..4487a8c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/got-negative-12-13-14-35-er.d
@@ -0,0 +1,3 @@
+#as: -mcpu=5206
+#ld: -shared --got=negative
+#error: .*relocation truncated to fit.*
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/got-negative-14-ok.d b/binutils-2.21/ld/testsuite/ld-m68k/got-negative-14-ok.d
new file mode 100644
index 0000000..451df80
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/got-negative-14-ok.d
@@ -0,0 +1,18 @@
+#as: -mcpu=5206
+#ld: -shared --got=negative
+#readelf: -d -r
+
+Dynamic section at offset .* contains 9 entries:
+ Tag Type Name/Value
+ 0x00000004 \(HASH\) 0x[0-9a-f]+
+ 0x00000005 \(STRTAB\) 0x[0-9a-f]+
+ 0x00000006 \(SYMTAB\) 0x[0-9a-f]+
+ 0x0000000a \(STRSZ\) [0-9]+ \(bytes\)
+ 0x0000000b \(SYMENT\) 16 \(bytes\)
+ 0x00000007 \(RELA\) 0x[0-9a-f]+
+ 0x00000008 \(RELASZ\) 196584 \(bytes\)
+ 0x00000009 \(RELAENT\) 12 \(bytes\)
+ 0x00000000 \(NULL\) 0x0
+
+Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 16382 entries:
+ Offset Info Type Sym.Value Sym. Name \+ Addend
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/got-negative-15-er.d b/binutils-2.21/ld/testsuite/ld-m68k/got-negative-15-er.d
new file mode 100644
index 0000000..c1b7409
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/got-negative-15-er.d
@@ -0,0 +1,3 @@
+#as: -mcpu=5206
+#ld: -shared --got=negative
+#error: .*GOT overflow.*
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/got-single-12-ok.d b/binutils-2.21/ld/testsuite/ld-m68k/got-single-12-ok.d
new file mode 100644
index 0000000..a7fdeb9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/got-single-12-ok.d
@@ -0,0 +1,18 @@
+#as: -mcpu=5206
+#ld: -shared --got=single
+#readelf: -d -r
+
+Dynamic section at offset .* contains 9 entries:
+ Tag Type Name/Value
+ 0x00000004 \(HASH\) 0x[0-9a-f]+
+ 0x00000005 \(STRTAB\) 0x[0-9a-f]+
+ 0x00000006 \(SYMTAB\) 0x[0-9a-f]+
+ 0x0000000a \(STRSZ\) [0-9]+ \(bytes\)
+ 0x0000000b \(SYMENT\) 16 \(bytes\)
+ 0x00000007 \(RELA\) 0x[0-9a-f]+
+ 0x00000008 \(RELASZ\) 98268 \(bytes\)
+ 0x00000009 \(RELAENT\) 12 \(bytes\)
+ 0x00000000 \(NULL\) 0x0
+
+Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 8189 entries:
+ Offset Info Type Sym.Value Sym. Name \+ Addend
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/got-single-13-er.d b/binutils-2.21/ld/testsuite/ld-m68k/got-single-13-er.d
new file mode 100644
index 0000000..bfca9f8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/got-single-13-er.d
@@ -0,0 +1,3 @@
+#as: -mcpu=5206
+#ld: -shared --got=single
+#error: .*relocation truncated to fit.*
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/got-xgot-12-13-14-15-34-35-ok.d b/binutils-2.21/ld/testsuite/ld-m68k/got-xgot-12-13-14-15-34-35-ok.d
new file mode 100644
index 0000000..dd2c21d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/got-xgot-12-13-14-15-34-35-ok.d
@@ -0,0 +1,18 @@
+#as: -mcpu=5206
+#ld: -shared --got=multigot
+#readelf: -d -r
+
+Dynamic section at offset .* contains 9 entries:
+ Tag Type Name/Value
+ 0x00000004 \(HASH\) 0x[0-9a-f]+
+ 0x00000005 \(STRTAB\) 0x[0-9a-f]+
+ 0x00000006 \(SYMTAB\) 0x[0-9a-f]+
+ 0x0000000a \(STRSZ\) [0-9]+ \(bytes\)
+ 0x0000000b \(SYMENT\) 16 \(bytes\)
+ 0x00000007 \(RELA\) 0x[0-9a-f]+
+ 0x00000008 \(RELASZ\) 294972 \(bytes\)
+ 0x00000009 \(RELAENT\) 12 \(bytes\)
+ 0x00000000 \(NULL\) 0x0
+
+Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 24581 entries:
+ Offset Info Type Sym.Value Sym. Name \+ Addend
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/got-xgot-15-ok.d b/binutils-2.21/ld/testsuite/ld-m68k/got-xgot-15-ok.d
new file mode 100644
index 0000000..bc11849
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/got-xgot-15-ok.d
@@ -0,0 +1,18 @@
+#as: -mcpu=5206
+#ld: -shared --got=multigot
+#readelf: -d -r
+
+Dynamic section at offset .* contains 9 entries:
+ Tag Type Name/Value
+ 0x00000004 \(HASH\) 0x[0-9a-f]+
+ 0x00000005 \(STRTAB\) 0x[0-9a-f]+
+ 0x00000006 \(SYMTAB\) 0x[0-9a-f]+
+ 0x0000000a \(STRSZ\) [0-9]+ \(bytes\)
+ 0x0000000b \(SYMENT\) 16 \(bytes\)
+ 0x00000007 \(RELA\) 0x[0-9a-f]+
+ 0x00000008 \(RELASZ\) 196620 \(bytes\)
+ 0x00000009 \(RELAENT\) 12 \(bytes\)
+ 0x00000000 \(NULL\) 0x0
+
+Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 16385 entries:
+ Offset Info Type Sym.Value Sym. Name \+ Addend
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/isaa-mac.d b/binutils-2.21/ld/testsuite/ld-m68k/isaa-mac.d
new file mode 100644
index 0000000..79b809a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/isaa-mac.d
@@ -0,0 +1,7 @@
+
+.*: file format elf32-m68k
+
+Program Header:
+#...
+private flags = 12: \[isa A\] \[mac\]
+
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/isaa-mac.s b/binutils-2.21/ld/testsuite/ld-m68k/isaa-mac.s
new file mode 100644
index 0000000..e3ec277
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/isaa-mac.s
@@ -0,0 +1,3 @@
+ .arch isaa,mac
+
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/isaa-nodiv.s b/binutils-2.21/ld/testsuite/ld-m68k/isaa-nodiv.s
new file mode 100644
index 0000000..de327f1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/isaa-nodiv.s
@@ -0,0 +1,3 @@
+ .arch isaa,no-div
+
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/isaa.d b/binutils-2.21/ld/testsuite/ld-m68k/isaa.d
new file mode 100644
index 0000000..48e4fa2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/isaa.d
@@ -0,0 +1,7 @@
+
+.*: file format elf32-m68k
+
+Program Header:
+#...
+private flags = 2: \[isa A\]
+
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/isaa.s b/binutils-2.21/ld/testsuite/ld-m68k/isaa.s
new file mode 100644
index 0000000..f4675c1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/isaa.s
@@ -0,0 +1,3 @@
+ .arch isaa
+
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/isaaplus.d b/binutils-2.21/ld/testsuite/ld-m68k/isaaplus.d
new file mode 100644
index 0000000..88623ce
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/isaaplus.d
@@ -0,0 +1,7 @@
+
+.*: file format elf32-m68k
+
+Program Header:
+#...
+private flags = 3: \[isa A\+\]
+
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/isaaplus.s b/binutils-2.21/ld/testsuite/ld-m68k/isaaplus.s
new file mode 100644
index 0000000..5b0a0b8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/isaaplus.s
@@ -0,0 +1,3 @@
+ .arch isaaplus
+
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/isab-float.d b/binutils-2.21/ld/testsuite/ld-m68k/isab-float.d
new file mode 100644
index 0000000..3547ea7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/isab-float.d
@@ -0,0 +1,7 @@
+
+.*: file format elf32-m68k
+
+Program Header:
+#...
+private flags = 8045: \[cfv4e\] \[isa B\] \[float\]
+
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/isab-float.s b/binutils-2.21/ld/testsuite/ld-m68k/isab-float.s
new file mode 100644
index 0000000..3889d0d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/isab-float.s
@@ -0,0 +1,3 @@
+ .arch isab,float
+
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/isab-nousp.s b/binutils-2.21/ld/testsuite/ld-m68k/isab-nousp.s
new file mode 100644
index 0000000..1e52357
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/isab-nousp.s
@@ -0,0 +1,3 @@
+ .arch isab,no-usp
+
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/isab.d b/binutils-2.21/ld/testsuite/ld-m68k/isab.d
new file mode 100644
index 0000000..c5b0134
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/isab.d
@@ -0,0 +1,7 @@
+
+.*: file format elf32-m68k
+
+Program Header:
+#...
+private flags = 5: \[isa B\]
+
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/isab.s b/binutils-2.21/ld/testsuite/ld-m68k/isab.s
new file mode 100644
index 0000000..3f93db7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/isab.s
@@ -0,0 +1,3 @@
+ .arch isab
+
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/m68k-got.exp b/binutils-2.21/ld/testsuite/ld-m68k/m68k-got.exp
new file mode 100644
index 0000000..fbd98bc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/m68k-got.exp
@@ -0,0 +1,250 @@
+# Expect script for run_dump_test based ld-m68k GOT tests.
+# Copyright 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+if { ![is_elf_format] || ![istarget m68k-*-*] } {
+ return
+}
+
+# 1 - 1
+# 2 - 8189
+# 3 - 8190
+# 4 - 16382
+# 5 - 16385
+
+proc gen_got_test { testname } {
+ global srcdir
+ global subdir
+
+ if [catch { set ofd [open "tmpdir/$testname.s" w] } msg] {
+ perror "$msg"
+ unresolved $testname
+ return
+ }
+
+ switch -- $testname {
+ "got-12" {
+ set start 1
+ set count 8189
+ set xgot 0
+ }
+ "got-13" {
+ set start 1
+ set count 8190
+ set xgot 0
+ }
+ "got-14" {
+ set start 1
+ set count 16382
+ set xgot 0
+ }
+ "got-15" {
+ set start 1
+ set count 16385
+ set xgot 0
+ }
+ "got-34" {
+ set start 8190
+ set count 16382
+ set xgot 0
+ }
+ "got-35" {
+ set start 8190
+ set count 16385
+ set xgot 0
+ }
+ "xgot-15" {
+ set start 1
+ set count 16385
+ set xgot 1
+ }
+ }
+
+ set func [format "sum_%05d_%05d" $start $count]
+ puts $ofd "\t.text"
+ puts $ofd "\t.align 2"
+ puts $ofd "\t.globl $func"
+ puts $ofd "\t.type $func,@function"
+ puts $ofd "$func:"
+ puts $ofd "\tlink.w %fp,#0"
+ puts $ofd "\tmove.l %a5,-(%sp)"
+ puts $ofd "\tmove.l #_GLOBAL_OFFSET_TABLE_@GOTPC, %a5"
+ puts $ofd "\tlea (-6, %pc, %a5), %a5"
+
+ if { $xgot == 1 } {
+ set symbol [format "a%05d" $start]
+ incr start
+ puts $ofd "\tlea $symbol@GOT,%a0"
+ puts $ofd "\tadd.l %a5,%a0"
+ puts $ofd "\tmove.l (%a0),%a0"
+ puts $ofd "\tmove.l (%a0),%d1"
+ for { set i $start } { $i < $count } { incr i } {
+ set symbol [format "a%05d" $i]
+ puts $ofd "\tlea $symbol@GOT,%a0"
+ puts $ofd "\tadd.l %a5,%a0"
+ puts $ofd "\tmove.l (%a0),%a0"
+ puts $ofd "\tmove.l (%a0),%d0"
+ puts $ofd "\tadd.l %d0,%d1"
+ }
+ set symbol [format "a%05d" $count]
+ puts $ofd "\tlea $symbol@GOT,%a0"
+ puts $ofd "\tadd.l %a5,%a0"
+ puts $ofd "\tmove.l (%a0),%a0"
+ puts $ofd "\tmove.l (%a0),%d0"
+ puts $ofd "\tadd.l %d1,%d0"
+ } else {
+ set symbol [format "a%05d" $start]
+ incr start
+ puts $ofd "\tmove.l $symbol@GOT(%a5),%d0"
+ puts $ofd "\tmove.l %d0,%a0"
+ puts $ofd "\tmove.l (%a0),%d1"
+ for { set i $start } { $i < $count } { incr i } {
+ set symbol [format "a%05d" $i]
+ puts $ofd "\tmove.l $symbol@GOT(%a5),%d0"
+ puts $ofd "\tmove.l %d0,%a0"
+ puts $ofd "\tmove.l (%a0),%d0"
+ puts $ofd "\tadd.l %d0,%d1"
+ }
+ set symbol [format "a%05d" $count]
+ puts $ofd "\tmove.l $symbol@GOT(%a5),%d0"
+ puts $ofd "\tmove.l %d0,%a0"
+ puts $ofd "\tmove.l (%a0),%d0"
+ puts $ofd "\tadd.l %d1,%d0"
+ }
+
+ puts $ofd "\tmove.l (%sp)+,%a5"
+ puts $ofd "\tunlk %fp"
+ puts $ofd "\trts"
+ puts $ofd "\t.size $func, .-$func"
+
+ close $ofd
+}
+
+proc got_test { testname } {
+ global srcdir
+ global subdir
+ global objdir
+
+ if [catch { set ifd [open "$srcdir/$subdir/$testname.d" r] } msg] {
+ perror "$msg"
+ unresolved $testname
+ return
+ }
+ if [catch { set ofd [open "tmpdir/$testname.d" w] } msg] {
+ perror "$msg"
+ unresolved $testname
+ return
+ }
+
+ switch -- $testname {
+ "got-single-12-ok" {
+ puts $ofd "#source: $objdir/tmpdir/got-12.s"
+ set count 8189
+ }
+ "got-single-13-er" {
+ puts $ofd "#source: $objdir/tmpdir/got-13.s"
+ set count 0
+ }
+ "got-negative-14-ok" {
+ puts $ofd "#source: $objdir/tmpdir/got-14.s"
+ set count 16382
+ }
+ "got-negative-15-er" {
+ puts $ofd "#source: $objdir/tmpdir/got-15.s"
+ set count 0
+ }
+ "got-negative-12-13-14-34-ok" {
+ puts $ofd "#source: $objdir/tmpdir/got-12.s"
+ puts $ofd "#source: $objdir/tmpdir/got-13.s"
+ puts $ofd "#source: $objdir/tmpdir/got-14.s"
+ puts $ofd "#source: $objdir/tmpdir/got-34.s"
+ set count 16382
+ }
+ "got-negative-12-13-14-35-er" {
+ puts $ofd "#source: $objdir/tmpdir/got-12.s"
+ puts $ofd "#source: $objdir/tmpdir/got-13.s"
+ puts $ofd "#source: $objdir/tmpdir/got-14.s"
+ puts $ofd "#source: $objdir/tmpdir/got-35.s"
+ set count 0
+ }
+ "got-multigot-14-ok" {
+ puts $ofd "#source: $objdir/tmpdir/got-14.s"
+ set count 16382
+ }
+ "got-multigot-15-er" {
+ puts $ofd "#source: $objdir/tmpdir/got-15.s"
+ set count 0
+ }
+ "got-multigot-12-13-14-34-35-ok" {
+ puts $ofd "#source: $objdir/tmpdir/got-12.s"
+ puts $ofd "#source: $objdir/tmpdir/got-13.s"
+ puts $ofd "#source: $objdir/tmpdir/got-14.s"
+ puts $ofd "#source: $objdir/tmpdir/got-34.s"
+ puts $ofd "#source: $objdir/tmpdir/got-35.s"
+ set count 24578
+ }
+ "got-xgot-15-ok" {
+ puts $ofd "#source: $objdir/tmpdir/xgot-15.s"
+ set count 16385
+ }
+ "got-xgot-12-13-14-15-34-35-ok" {
+ puts $ofd "#source: $objdir/tmpdir/got-12.s"
+ puts $ofd "#source: $objdir/tmpdir/got-13.s"
+ puts $ofd "#source: $objdir/tmpdir/got-14.s"
+ puts $ofd "#source: $objdir/tmpdir/xgot-15.s"
+ puts $ofd "#source: $objdir/tmpdir/got-34.s"
+ puts $ofd "#source: $objdir/tmpdir/got-35.s"
+ set count 24581
+ }
+ }
+
+ while { [gets $ifd line] != -1 } {
+ puts $ofd $line
+ }
+
+ for { set i 0 } { $i < $count } { incr i } {
+ puts $ofd "^\[0-9a-f\]+ \[0-9a-f\]+ R_68K_GLOB_DAT 00000000 a\[0-9\]+ \\\+ 0"
+ }
+
+ close $ifd
+ close $ofd
+ run_dump_test "tmpdir/$testname"
+}
+
+gen_got_test got-12
+gen_got_test got-13
+gen_got_test got-14
+gen_got_test got-15
+gen_got_test got-34
+gen_got_test got-35
+gen_got_test xgot-15
+
+run_dump_test "got-1"
+got_test "got-single-12-ok"
+got_test "got-single-13-er"
+got_test "got-negative-14-ok"
+got_test "got-negative-15-er"
+got_test "got-negative-12-13-14-34-ok"
+got_test "got-negative-12-13-14-35-er"
+got_test "got-multigot-14-ok"
+got_test "got-multigot-15-er"
+got_test "got-multigot-12-13-14-34-35-ok"
+got_test "got-xgot-15-ok"
+got_test "got-xgot-12-13-14-15-34-35-ok"
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/m68k.exp b/binutils-2.21/ld/testsuite/ld-m68k/m68k.exp
new file mode 100644
index 0000000..198a5e2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/m68k.exp
@@ -0,0 +1,93 @@
+# Expect script for run_dump_test based ld-m68k tests.
+# Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Test m68k object merging
+
+if { ![is_elf_format] || ![istarget m68k-*-*] } {
+ return
+}
+
+# List contains test-items with 3 items followed by 2 lists:
+# 0:name 1:ld options 2:assembler options
+# 3:filenames of assembler files 4: action and options. 5: name of output file
+
+# Actions:
+# objdump: Apply objdump options on result. Compare with regex (last arg).
+# nm: Apply nm options on result. Compare with regex (last arg).
+# readelf: Apply readelf options on result. Compare with regex (last arg).
+
+set m68k_mergeok_tests {
+ {"merge isa-a isa-a:nodiv" "-T merge.ld" ""
+ {isaa.s isaa-nodiv.s} {{objdump -p isaa.d}} "isaa-nodiv"}
+ {"merge isa-a isa-b" "-T merge.ld" ""
+ {isaa.s isab.s} {{objdump -p isab.d}} "isab"}
+ {"merge isa-a isa-aplus" "-T merge.ld" ""
+ {isaa.s isaaplus.s} {{objdump -p isaaplus.d}} "isaplus"}
+ {"merge isa-b isa-b:nousp" "-T merge.ld" ""
+ {isab.s isab-nousp.s} {{objdump -p isab.d}} "isab"}
+ {"merge isa-a isa-a:mac" "-T merge.ld" ""
+ {isaa.s isaa-mac.s} {{objdump -p isaa-mac.d}} "isaa-mac"}
+ {"merge isa-b isa-b:float" "-T merge.ld" ""
+ {isab.s isab-float.s} {{objdump -p isab-float.d}} "isab-float"}}
+
+run_ld_link_tests $m68k_mergeok_tests
+
+run_dump_test "merge-error-1a"
+run_dump_test "merge-error-1b"
+run_dump_test "merge-error-1c"
+run_dump_test "merge-error-1d"
+run_dump_test "merge-error-1e"
+run_dump_test "merge-ok-1a"
+run_dump_test "merge-ok-1b"
+run_dump_test "merge-ok-1c"
+
+foreach { id sources } { a { plt1.s } b { plt1-empty.s plt1.s } } {
+ foreach arch { 68020 cpu32 isab isac } {
+ run_ld_link_tests [list \
+ [list "PLT 1$id ($arch)" "-shared -T plt1.ld" "-m$arch" \
+ $sources [list [list objdump -dr plt1-$arch.d]] \
+ plt1-${id}-${arch}.so]]
+ }
+}
+
+if { [istarget m68k-*-linux*] } then {
+ run_dump_test "tls-gd-1"
+ run_dump_test "tls-gd-2"
+ run_dump_test "tls-gd-ie-1"
+ run_dump_test "tls-ie-1"
+ run_dump_test "tls-ld-1"
+ run_dump_test "tls-ld-2"
+
+ set m68k_tls_tests {
+ {"TLS definition"
+ "-shared" "" {tls-def-1.s}
+ {{nm -ngD tls-def-1.d}}
+ "tls-def-1.so"}
+ {"TLS direct symbol use"
+ "-shared tmpdir/tls-def-1.so" "" {tls-gd-1.s}
+ {{nm -ngD tls-gd-1.d2} {readelf -d tls-gd-1.d3}}
+ "tls-gd-1.so"}
+ {"TLS indirect symbol use"
+ "tmpdir/tls-gd-1.so -rpath-link ./" "" {tls-main-1.s}
+ {{readelf -d tls-main-1.d}}
+ "tls-main-1"}}
+
+ run_ld_link_tests $m68k_tls_tests
+}
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/merge-error-1a.d b/binutils-2.21/ld/testsuite/ld-m68k/merge-error-1a.d
new file mode 100644
index 0000000..3629f39
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/merge-error-1a.d
@@ -0,0 +1,4 @@
+#source: merge-error-1a.s -mcpu=cpu32
+#source: merge-error-1b.s -mcpu=68000
+#ld: -r
+#error: ^[^\n]* m68k:68000 [^\n]* incompatible with m68k:cpu32 [^\n]*$
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/merge-error-1a.s b/binutils-2.21/ld/testsuite/ld-m68k/merge-error-1a.s
new file mode 100644
index 0000000..ee48942
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/merge-error-1a.s
@@ -0,0 +1 @@
+ rts
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/merge-error-1b.d b/binutils-2.21/ld/testsuite/ld-m68k/merge-error-1b.d
new file mode 100644
index 0000000..bedd3d6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/merge-error-1b.d
@@ -0,0 +1,4 @@
+#source: merge-error-1a.s -mcpu=cpu32
+#source: merge-error-1b.s -mcpu=5207
+#ld: -r
+#error: ^[^\n]* m68k:isa-aplus:emac [^\n]* incompatible with m68k:cpu32 [^\n]*$
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/merge-error-1b.s b/binutils-2.21/ld/testsuite/ld-m68k/merge-error-1b.s
new file mode 100644
index 0000000..ee48942
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/merge-error-1b.s
@@ -0,0 +1 @@
+ rts
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/merge-error-1c.d b/binutils-2.21/ld/testsuite/ld-m68k/merge-error-1c.d
new file mode 100644
index 0000000..9538e77
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/merge-error-1c.d
@@ -0,0 +1,4 @@
+#source: merge-error-1a.s -march=isaaplus
+#source: merge-error-1b.s -march=isab
+#ld: -r
+#error: ^[^\n]* m68k:isa-b [^\n]* incompatible with m68k:isa-aplus [^\n]*$
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/merge-error-1d.d b/binutils-2.21/ld/testsuite/ld-m68k/merge-error-1d.d
new file mode 100644
index 0000000..4d86771
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/merge-error-1d.d
@@ -0,0 +1,4 @@
+#source: merge-error-1a.s -march=isaa -mmac
+#source: merge-error-1b.s -march=isaa -memac
+#ld: -r
+#error: ^[^\n]* m68k:isa-a:emac [^\n]* incompatible with m68k:isa-a:mac [^\n]*$
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/merge-error-1e.d b/binutils-2.21/ld/testsuite/ld-m68k/merge-error-1e.d
new file mode 100644
index 0000000..969f844
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/merge-error-1e.d
@@ -0,0 +1,4 @@
+#source: merge-error-1a.s -march=isaa -mno-div -mmac
+#source: merge-error-1b.s -march=isaa -mno-div -memac
+#ld: -r
+#error: ^[^\n]* m68k:isa-a:emac [^\n]* is incompatible with m68k:isa-a:mac [^\n]*$
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/merge-ok-1a.d b/binutils-2.21/ld/testsuite/ld-m68k/merge-ok-1a.d
new file mode 100644
index 0000000..96da556
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/merge-ok-1a.d
@@ -0,0 +1,6 @@
+#source: merge-error-1a.s -mcpu=5207
+#source: merge-error-1b.s -mcpu=528x
+#ld: -r
+#objdump: -p
+#...
+private flags = 23: \[isa A\+\] \[emac\]
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/merge-ok-1b.d b/binutils-2.21/ld/testsuite/ld-m68k/merge-ok-1b.d
new file mode 100644
index 0000000..03ae258
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/merge-ok-1b.d
@@ -0,0 +1,6 @@
+#source: merge-error-1a.s -march=isaa -mno-div -mmac
+#source: merge-error-1b.s -march=isaa -mno-div -mfloat
+#ld: -r
+#objdump: -p
+#...
+private flags = 8051: \[cfv4e\] \[isa A\] \[nodiv\] \[float\] \[mac\]
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/merge-ok-1c.d b/binutils-2.21/ld/testsuite/ld-m68k/merge-ok-1c.d
new file mode 100644
index 0000000..81cf5a6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/merge-ok-1c.d
@@ -0,0 +1,6 @@
+#source: merge-error-1a.s -march=cpu32
+#source: merge-error-1b.s -march=cpu32
+#ld: -r
+#objdump: -p
+#...
+private flags = 810000: \[cpu32\]
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/merge.ld b/binutils-2.21/ld/testsuite/ld-m68k/merge.ld
new file mode 100644
index 0000000..ed2acfe
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/merge.ld
@@ -0,0 +1,9 @@
+OUTPUT_FORMAT("elf32-m68k", "elf32-m68k",
+ "elf32-m68k")
+OUTPUT_ARCH(m68k)
+ENTRY(_start)
+
+SECTIONS {
+
+ .text : {_start = .; *(.text)}
+}
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/plt1-68020.d b/binutils-2.21/ld/testsuite/ld-m68k/plt1-68020.d
new file mode 100644
index 0000000..54463b9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/plt1-68020.d
@@ -0,0 +1,35 @@
+
+.*: file format elf32-m68k
+
+Disassembly of section \.plt:
+
+00020800 <f.@plt-0x14>:
+ 20800: 2f3b 0170 0000 movel %pc@\(30404 <_GLOBAL_OFFSET_TABLE_\+0x4>\),%sp@-
+ 20806: fc02
+ 20808: 4efb 0171 0000 jmp %pc@\(30408 <_GLOBAL_OFFSET_TABLE_\+0x8>\)@\(0*\)
+ 2080e: fbfe
+ 20810: 0000 0000 orib #0,%d0
+
+00020814 <f.@plt>:
+ 20814: 4efb 0171 0000 jmp %pc@\(3040c <_GLOBAL_OFFSET_TABLE_\+0xc>\)@\(0*\)
+ 2081a: fbf6
+ 2081c: 2f3c 0000 0000 movel #0,%sp@-
+ 20822: 60ff ffff ffdc bral 20800 <f.@plt-0x14>
+
+00020828 <f.@plt>:
+ 20828: 4efb 0171 0000 jmp %pc@\(30410 <_GLOBAL_OFFSET_TABLE_\+0x10>\)@\(0*\)
+ 2082e: fbe6
+ 20830: 2f3c 0000 000c movel #12,%sp@-
+ 20836: 60ff ffff ffc8 bral 20800 <f.@plt-0x14>
+
+0002083c <f.@plt>:
+ 2083c: 4efb 0171 0000 jmp %pc@\(30414 <_GLOBAL_OFFSET_TABLE_\+0x14>\)@\(0*\)
+ 20842: fbd6
+ 20844: 2f3c 0000 0018 movel #24,%sp@-
+ 2084a: 60ff ffff ffb4 bral 20800 <f.@plt-0x14>
+Disassembly of section \.text:
+
+00020c00 <.*>:
+ 20c00: 61ff ffff fc.. bsrl 208.. <f1@plt>
+ 20c06: 61ff ffff fc.. bsrl 208.. <f2@plt>
+ 20c0c: 61ff ffff fc.. bsrl 208.. <f3@plt>
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/plt1-cpu32.d b/binutils-2.21/ld/testsuite/ld-m68k/plt1-cpu32.d
new file mode 100644
index 0000000..a497740
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/plt1-cpu32.d
@@ -0,0 +1,43 @@
+
+.*: file format elf32-m68k
+
+Disassembly of section \.plt:
+
+00020800 <f.@plt-0x18>:
+ 20800: 2f3b 0170 0000 movel %pc@\(30404 <_GLOBAL_OFFSET_TABLE_\+0x4>\),%sp@-
+ 20806: fc02
+ 20808: 227b 0170 0000 moveal %pc@\(30408 <_GLOBAL_OFFSET_TABLE_\+0x8>\),%a1
+ 2080e: fbfe
+ 20810: 4ed1 jmp %a1@
+ 20812: 0000 0000 orib #0,%d0
+ \.\.\.
+
+00020818 <f.@plt>:
+ 20818: 227b 0170 0000 moveal %pc@\(3040c <_GLOBAL_OFFSET_TABLE_\+0xc>\),%a1
+ 2081e: fbf2
+ 20820: 4ed1 jmp %a1@
+ 20822: 2f3c 0000 0000 movel #0,%sp@-
+ 20828: 60ff ffff ffd6 bral 20800 <f.@plt-0x18>
+ \.\.\.
+
+00020830 <f.@plt>:
+ 20830: 227b 0170 0000 moveal %pc@\(30410 <_GLOBAL_OFFSET_TABLE_\+0x10>\),%a1
+ 20836: fbde
+ 20838: 4ed1 jmp %a1@
+ 2083a: 2f3c 0000 000c movel #12,%sp@-
+ 20840: 60ff ffff ffbe bral 20800 <f.@plt-0x18>
+ \.\.\.
+
+00020848 <f.@plt>:
+ 20848: 227b 0170 0000 moveal %pc@\(30414 <_GLOBAL_OFFSET_TABLE_\+0x14>\),%a1
+ 2084e: fbca
+ 20850: 4ed1 jmp %a1@
+ 20852: 2f3c 0000 0018 movel #24,%sp@-
+ 20858: 60ff ffff ffa6 bral 20800 <f.@plt-0x18>
+ \.\.\.
+Disassembly of section \.text:
+
+00020c00 <.*>:
+ 20c00: 61ff ffff fc.. bsrl 208.. <f1@plt>
+ 20c06: 61ff ffff fc.. bsrl 208.. <f2@plt>
+ 20c0c: 61ff ffff fc.. bsrl 208.. <f3@plt>
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/plt1-empty.s b/binutils-2.21/ld/testsuite/ld-m68k/plt1-empty.s
new file mode 100644
index 0000000..a59477d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/plt1-empty.s
@@ -0,0 +1,3 @@
+ .text
+ .globl foo
+foo:
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/plt1-isab.d b/binutils-2.21/ld/testsuite/ld-m68k/plt1-isab.d
new file mode 100644
index 0000000..a9aeacb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/plt1-isab.d
@@ -0,0 +1,44 @@
+
+.*: file format elf32-m68k
+
+Disassembly of section \.plt:
+
+00020800 <f.@plt-0x18>:
+# _GLOBAL_OFFSET_TABLE_ + 4 == 0x30404 == 0x20802 + 0xfc02
+ 20800: 203c 0000 fc02 movel #64514,%d0
+ 20806: 2f3b 08fa movel %pc@\(20802 <f.@plt-0x16>,%d0:l\),%sp@-
+# _GLOBAL_OFFSET_TABLE_ + 8 == 0x30408 == 0x2080c + 0xfbfc
+ 2080a: 203c 0000 fbfc movel #64508,%d0
+ 20810: 207b 08fa moveal %pc@\(2080c <f.@plt-0xc>,%d0:l\),%a0
+ 20814: 4ed0 jmp %a0@
+ 20816: 4e71 nop
+
+00020818 <f.@plt>:
+# _GLOBAL_OFFSET_TABLE_ + 12 == 0x3040c == 0x2081a + 0xfbf2
+ 20818: 203c 0000 fbf2 movel #64498,%d0
+ 2081e: 207b 08fa moveal %pc@\(2081a <f.@plt\+0x2>,%d0:l\),%a0
+ 20822: 4ed0 jmp %a0@
+ 20824: 2f3c 0000 0000 movel #0,%sp@-
+ 2082a: 60ff ffff ffd4 bral 20800 <f.@plt-0x18>
+
+00020830 <f.@plt>:
+# _GLOBAL_OFFSET_TABLE_ + 16 == 0x30410 == 0x20832 + 0xfbde
+ 20830: 203c 0000 fbde movel #64478,%d0
+ 20836: 207b 08fa moveal %pc@\(20832 <f.@plt\+0x2>,%d0:l\),%a0
+ 2083a: 4ed0 jmp %a0@
+ 2083c: 2f3c 0000 000c movel #12,%sp@-
+ 20842: 60ff ffff ffbc bral 20800 <f.@plt-0x18>
+
+00020848 <f.@plt>:
+# _GLOBAL_OFFSET_TABLE_ + 20 == 0x30414 == 0x2084a + 0xfbca
+ 20848: 203c 0000 fbca movel #64458,%d0
+ 2084e: 207b 08fa moveal %pc@\(2084a <f.@plt\+0x2>,%d0:l\),%a0
+ 20852: 4ed0 jmp %a0@
+ 20854: 2f3c 0000 0018 movel #24,%sp@-
+ 2085a: 60ff ffff ffa4 bral 20800 <f.@plt-0x18>
+Disassembly of section \.text:
+
+00020c00 <.*>:
+ 20c00: 61ff ffff fc.. bsrl 208.. <f1@plt>
+ 20c06: 61ff ffff fc.. bsrl 208.. <f2@plt>
+ 20c0c: 61ff ffff fc.. bsrl 208.. <f3@plt>
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/plt1-isac.d b/binutils-2.21/ld/testsuite/ld-m68k/plt1-isac.d
new file mode 100644
index 0000000..ae299ce
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/plt1-isac.d
@@ -0,0 +1,44 @@
+
+.*: file format elf32-m68k
+
+Disassembly of section \.plt:
+
+00020800 <f.@plt-0x18>:
+# _GLOBAL_OFFSET_TABLE_ + 4 == 0x30404 == 0x20802 + 0xfc02
+ 20800: 203c 0000 fc02 movel #64514,%d0
+ 20806: 2ebb 08fa movel %pc@\(20802 <f.@plt-0x16>,%d0:l\),%sp@
+# _GLOBAL_OFFSET_TABLE_ + 8 == 0x30408 == 0x2080c + 0xfbfc
+ 2080a: 203c 0000 fbfc movel #64508,%d0
+ 20810: 207b 08fa moveal %pc@\(2080c <f.@plt-0xc>,%d0:l\),%a0
+ 20814: 4ed0 jmp %a0@
+ 20816: 4e71 nop
+
+00020818 <f.@plt>:
+# _GLOBAL_OFFSET_TABLE_ + 12 == 0x3040c == 0x2081a + 0xfbf2
+ 20818: 203c 0000 fbf2 movel #64498,%d0
+ 2081e: 207b 08fa moveal %pc@\(2081a <f.@plt\+0x2>,%d0:l\),%a0
+ 20822: 4ed0 jmp %a0@
+ 20824: 2f3c 0000 0000 movel #0,%sp@-
+ 2082a: 61ff ffff ffd4 bsrl 20800 <f.@plt-0x18>
+
+00020830 <f.@plt>:
+# _GLOBAL_OFFSET_TABLE_ + 16 == 0x30410 == 0x20832 + 0xfbde
+ 20830: 203c 0000 fbde movel #64478,%d0
+ 20836: 207b 08fa moveal %pc@\(20832 <f.@plt\+0x2>,%d0:l\),%a0
+ 2083a: 4ed0 jmp %a0@
+ 2083c: 2f3c 0000 000c movel #12,%sp@-
+ 20842: 61ff ffff ffbc bsrl 20800 <f.@plt-0x18>
+
+00020848 <f.@plt>:
+# _GLOBAL_OFFSET_TABLE_ + 20 == 0x30414 == 0x2084a + 0xfbca
+ 20848: 203c 0000 fbca movel #64458,%d0
+ 2084e: 207b 08fa moveal %pc@\(2084a <f.@plt\+0x2>,%d0:l\),%a0
+ 20852: 4ed0 jmp %a0@
+ 20854: 2f3c 0000 0018 movel #24,%sp@-
+ 2085a: 61ff ffff ffa4 bsrl 20800 <f.@plt-0x18>
+Disassembly of section \.text:
+
+00020c00 <.*>:
+ 20c00: 61ff ffff fc.. bsrl 208.. <f1@plt>
+ 20c06: 61ff ffff fc.. bsrl 208.. <f2@plt>
+ 20c0c: 61ff ffff fc.. bsrl 208.. <f3@plt>
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/plt1.ld b/binutils-2.21/ld/testsuite/ld-m68k/plt1.ld
new file mode 100644
index 0000000..718e2ad
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/plt1.ld
@@ -0,0 +1,23 @@
+SECTIONS
+{
+ . = 0x20000;
+ .interp : { *(.interp) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+
+ . = ALIGN (0x400);
+ .rela.plt : { *(.rela.plt) }
+
+ . = ALIGN (0x400);
+ .plt : { *(.plt) }
+
+ . = ALIGN (0x400);
+ .text : { *(.text) }
+
+ . = ALIGN (0x10000);
+ .dynamic : { *(.dynamic) }
+
+ . = ALIGN (0x400);
+ .got : { *(.got.plt) *(.got) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/plt1.s b/binutils-2.21/ld/testsuite/ld-m68k/plt1.s
new file mode 100644
index 0000000..855fb19
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/plt1.s
@@ -0,0 +1,3 @@
+ bsr.l f1@PLTPC
+ bsr.l f2@PLTPC
+ bsr.l f3@PLTPC
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/tls-def-1.d b/binutils-2.21/ld/testsuite/ld-m68k/tls-def-1.d
new file mode 100644
index 0000000..59b4397
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/tls-def-1.d
@@ -0,0 +1,4 @@
+00000000 B x
+.*
+.*
+.*
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/tls-def-1.s b/binutils-2.21/ld/testsuite/ld-m68k/tls-def-1.s
new file mode 100644
index 0000000..3d758a9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/tls-def-1.s
@@ -0,0 +1,9 @@
+#NO_APP
+ .globl x
+ .section .tbss,"awT",@nobits
+ .align 2
+ .type x, @object
+ .size x, 4
+x:
+ .zero 4
+ .section .note.GNU-stack,"",@progbits
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/tls-gd-1.d b/binutils-2.21/ld/testsuite/ld-m68k/tls-gd-1.d
new file mode 100644
index 0000000..0cad6fc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/tls-gd-1.d
@@ -0,0 +1,21 @@
+#as: -mcpu=5206
+#source: tls-gd-1.s
+#ld: -shared
+#readelf: -d -r
+
+Dynamic section at offset .* contains 9 entries:
+ Tag Type Name/Value
+ 0x00000004 \(HASH\) 0x[0-9a-f]+
+ 0x00000005 \(STRTAB\) 0x[0-9a-f]+
+ 0x00000006 \(SYMTAB\) 0x[0-9a-f]+
+ 0x0000000a \(STRSZ\) [0-9]+ \(bytes\)
+ 0x0000000b \(SYMENT\) 16 \(bytes\)
+ 0x00000007 \(RELA\) 0x[0-9a-f]+
+ 0x00000008 \(RELASZ\) 24 \(bytes\)
+ 0x00000009 \(RELAENT\) 12 \(bytes\)
+ 0x00000000 \(NULL\) 0x0
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 2 entries:
+ Offset Info Type Sym.Value Sym. Name \+ Addend
+[0-9a-f]+ [0-9a-f]+ R_68K_TLS_DTPMOD3 00000000 x \+ 0
+[0-9a-f]+ [0-9a-f]+ R_68K_TLS_DTPREL3 00000000 x \+ 0
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/tls-gd-1.d2 b/binutils-2.21/ld/testsuite/ld-m68k/tls-gd-1.d2
new file mode 100644
index 0000000..b6167e3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/tls-gd-1.d2
@@ -0,0 +1,5 @@
+.* U x
+.*
+.*
+.*
+.*
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/tls-gd-1.d3 b/binutils-2.21/ld/testsuite/ld-m68k/tls-gd-1.d3
new file mode 100644
index 0000000..4b835d3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/tls-gd-1.d3
@@ -0,0 +1,13 @@
+
+Dynamic section at offset .* contains .*:
+ * Tag * Type * Name/Value
+ 0x00000001 \(NEEDED\) * Shared library: \[tmpdir/tls-def-1.so\]
+ 0x00000004 \(HASH\) .*
+ 0x00000005 \(STRTAB\) .*
+ 0x00000006 \(SYMTAB\) .*
+ 0x0000000a \(STRSZ\) .*
+ 0x0000000b \(SYMENT\) .*
+ 0x00000007 \(RELA\) .*
+ 0x00000008 \(RELASZ\) .*
+ 0x00000009 \(RELAENT\) .*
+ 0x00000000 \(NULL\) .*
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/tls-gd-1.s b/binutils-2.21/ld/testsuite/ld-m68k/tls-gd-1.s
new file mode 100644
index 0000000..c79da2e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/tls-gd-1.s
@@ -0,0 +1,16 @@
+#NO_APP
+ .text
+ .align 2
+ .globl foo
+ .type foo, @function
+foo:
+ link.w %fp,#0
+ move.l %a5,-(%sp)
+
+ pea x@TLSGD(%a5)
+
+ move.l (%sp)+,%a5
+ unlk %fp
+ rts
+ .size foo, .-foo
+ .section .note.GNU-stack,"",@progbits
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/tls-gd-2.d b/binutils-2.21/ld/testsuite/ld-m68k/tls-gd-2.d
new file mode 100644
index 0000000..28ba4f5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/tls-gd-2.d
@@ -0,0 +1,24 @@
+#as: -mcpu=5206
+#source: tls-gd-2.s
+#ld: -shared
+#readelf: -d -r
+
+Dynamic section at offset .* contains 10 entries:
+ Tag Type Name/Value
+ 0x00000004 \(HASH\) 0x[0-9a-f]+
+ 0x00000005 \(STRTAB\) 0x[0-9a-f]+
+ 0x00000006 \(SYMTAB\) 0x[0-9a-f]+
+ 0x0000000a \(STRSZ\) [0-9]+ \(bytes\)
+ 0x0000000b \(SYMENT\) 16 \(bytes\)
+ 0x00000007 \(RELA\) 0x[0-9a-f]+
+ 0x00000008 \(RELASZ\) 48 \(bytes\)
+ 0x00000009 \(RELAENT\) 12 \(bytes\)
+ 0x00000016 \(TEXTREL\) 0x0
+ 0x00000000 \(NULL\) 0x0
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 4 entries:
+ Offset Info Type Sym.Value Sym. Name \+ Addend
+[0-9a-f]+ [0-9a-f]+ R_68K_32 00000000 __tls_get_addr \+ 0
+[0-9a-f]+ [0-9a-f]+ R_68K_32 00000000 __tls_get_addr \+ 0
+[0-9a-f]+ [0-9a-f]+ R_68K_TLS_DTPMOD3 00000000 x \+ 0
+[0-9a-f]+ [0-9a-f]+ R_68K_TLS_DTPREL3 00000000 x \+ 0
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/tls-gd-2.s b/binutils-2.21/ld/testsuite/ld-m68k/tls-gd-2.s
new file mode 100644
index 0000000..3bb58d4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/tls-gd-2.s
@@ -0,0 +1,24 @@
+#NO_APP
+ .text
+ .align 2
+ .globl foo
+ .type foo, @function
+foo:
+ link.w %fp,#0
+ move.l %a5,-(%sp)
+ move.l #_GLOBAL_OFFSET_TABLE_@GOTPC, %a5
+ lea (-6, %pc, %a5), %a5
+
+ pea x@TLSGD(%a5)
+ jbsr __tls_get_addr
+
+ move.l %a5,%a0
+ add.l x@TLSGD,%a0
+ pea (%a0)
+ jbsr __tls_get_addr
+
+ move.l (%sp)+,%a5
+ unlk %fp
+ rts
+ .size foo, .-foo
+ .section .note.GNU-stack,"",@progbits
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/tls-gd-ie-1.d b/binutils-2.21/ld/testsuite/ld-m68k/tls-gd-ie-1.d
new file mode 100644
index 0000000..87de346
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/tls-gd-ie-1.d
@@ -0,0 +1,25 @@
+#as: -mcpu=5206
+#source: tls-gd-ie-1.s
+#ld: -shared
+#readelf: -d -r
+
+Dynamic section at offset .* contains 10 entries:
+ Tag Type Name/Value
+ 0x00000004 \(HASH\) 0x[0-9a-f]+
+ 0x00000005 \(STRTAB\) 0x[0-9a-f]+
+ 0x00000006 \(SYMTAB\) 0x[0-9a-f]+
+ 0x0000000a \(STRSZ\) [0-9]+ \(bytes\)
+ 0x0000000b \(SYMENT\) 16 \(bytes\)
+ 0x00000007 \(RELA\) 0x[0-9a-f]+
+ 0x00000008 \(RELASZ\) 60 \(bytes\)
+ 0x00000009 \(RELAENT\) 12 \(bytes\)
+ 0x00000016 \(TEXTREL\) 0x0
+ 0x00000000 \(NULL\) 0x0
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 5 entries:
+ Offset Info Type Sym.Value Sym. Name \+ Addend
+[0-9a-f]+ [0-9a-f]+ R_68K_32 00000000 __tls_get_addr \+ 0
+[0-9a-f]+ [0-9a-f]+ R_68K_32 00000000 __m68k_read_tp \+ 0
+[0-9a-f]+ [0-9a-f]+ R_68K_TLS_DTPMOD3 00000000 x \+ 0
+[0-9a-f]+ [0-9a-f]+ R_68K_TLS_DTPREL3 00000000 x \+ 0
+[0-9a-f]+ [0-9a-f]+ R_68K_TLS_TPREL32 00000000 x \+ 0
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/tls-gd-ie-1.s b/binutils-2.21/ld/testsuite/ld-m68k/tls-gd-ie-1.s
new file mode 100644
index 0000000..6536137
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/tls-gd-ie-1.s
@@ -0,0 +1,23 @@
+#NO_APP
+ .text
+ .align 2
+ .globl foo
+ .type foo, @function
+foo:
+ link.w %fp,#0
+ move.l %a5,-(%sp)
+ move.l #_GLOBAL_OFFSET_TABLE_@GOTPC, %a5
+ lea (-6, %pc, %a5), %a5
+
+ pea x@TLSGD(%a5)
+ jbsr __tls_get_addr
+
+ jbsr __m68k_read_tp
+ move.l x@TLSIE(%a5),%a1
+ add.l %a0,%a1
+
+ move.l (%sp)+,%a5
+ unlk %fp
+ rts
+ .size foo, .-foo
+ .section .note.GNU-stack,"",@progbits
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/tls-ie-1.d b/binutils-2.21/ld/testsuite/ld-m68k/tls-ie-1.d
new file mode 100644
index 0000000..5574ad4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/tls-ie-1.d
@@ -0,0 +1,22 @@
+#as: -mcpu=5206
+#source: tls-ie-1.s
+#ld: -shared
+#readelf: -d -r
+
+Dynamic section at offset .* contains 10 entries:
+ Tag Type Name/Value
+ 0x00000004 \(HASH\) 0x[0-9a-f]+
+ 0x00000005 \(STRTAB\) 0x[0-9a-f]+
+ 0x00000006 \(SYMTAB\) 0x[0-9a-f]+
+ 0x0000000a \(STRSZ\) [0-9]+ \(bytes\)
+ 0x0000000b \(SYMENT\) 16 \(bytes\)
+ 0x00000007 \(RELA\) 0x[0-9a-f]+
+ 0x00000008 \(RELASZ\) 24 \(bytes\)
+ 0x00000009 \(RELAENT\) 12 \(bytes\)
+ 0x00000016 \(TEXTREL\) 0x0
+ 0x00000000 \(NULL\) 0x0
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 2 entries:
+ Offset Info Type Sym.Value Sym. Name \+ Addend
+[0-9a-f]+ [0-9a-f]+ R_68K_32 00000000 __m68k_read_tp \+ 0
+[0-9a-f]+ [0-9a-f]+ R_68K_TLS_TPREL32 00000000 x \+ 0
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/tls-ie-1.s b/binutils-2.21/ld/testsuite/ld-m68k/tls-ie-1.s
new file mode 100644
index 0000000..29326a0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/tls-ie-1.s
@@ -0,0 +1,20 @@
+#NO_APP
+ .text
+ .align 2
+ .globl foo
+ .type foo, @function
+foo:
+ link.w %fp,#0
+ move.l %a5,-(%sp)
+ move.l #_GLOBAL_OFFSET_TABLE_@GOTPC, %a5
+ lea (-6, %pc, %a5), %a5
+
+ jbsr __m68k_read_tp
+ move.l x@TLSIE(%a5),%a1
+ add.l %a0,%a1
+
+ move.l (%sp)+,%a5
+ unlk %fp
+ rts
+ .size foo, .-foo
+ .section .note.GNU-stack,"",@progbits
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/tls-ld-1.d b/binutils-2.21/ld/testsuite/ld-m68k/tls-ld-1.d
new file mode 100644
index 0000000..01e8904
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/tls-ld-1.d
@@ -0,0 +1,22 @@
+#as: -mcpu=5206
+#source: tls-ld-1.s
+#ld: -shared
+#readelf: -d -r
+
+Dynamic section at offset .* contains 10 entries:
+ Tag Type Name/Value
+ 0x00000004 \(HASH\) 0x[0-9a-f]+
+ 0x00000005 \(STRTAB\) 0x[0-9a-f]+
+ 0x00000006 \(SYMTAB\) 0x[0-9a-f]+
+ 0x0000000a \(STRSZ\) [0-9]+ \(bytes\)
+ 0x0000000b \(SYMENT\) 16 \(bytes\)
+ 0x00000007 \(RELA\) 0x[0-9a-f]+
+ 0x00000008 \(RELASZ\) 24 \(bytes\)
+ 0x00000009 \(RELAENT\) 12 \(bytes\)
+ 0x00000016 \(TEXTREL\) 0x0
+ 0x00000000 \(NULL\) 0x0
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 2 entries:
+ Offset Info Type Sym.Value Sym. Name \+ Addend
+[0-9a-f]+ [0-9a-f]+ R_68K_32 00000000 __tls_get_addr \+ 0
+[0-9a-f]+ [0-9a-f]+ R_68K_TLS_DTPMOD3 00000000
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/tls-ld-1.s b/binutils-2.21/ld/testsuite/ld-m68k/tls-ld-1.s
new file mode 100644
index 0000000..47bc6e1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/tls-ld-1.s
@@ -0,0 +1,21 @@
+#NO_APP
+ .text
+ .align 2
+ .globl foo
+ .type foo, @function
+foo:
+ link.w %fp,#0
+ move.l %a5,-(%sp)
+ move.l #_GLOBAL_OFFSET_TABLE_@GOTPC, %a5
+ lea (-6, %pc, %a5), %a5
+
+ pea x3@TLSLDM(%a5)
+ jbsr __tls_get_addr
+ move.l %d0,%a1
+ add.l x4@TLSLDO,%a1
+
+ move.l (%sp)+,%a5
+ unlk %fp
+ rts
+ .size foo, .-foo
+ .section .note.GNU-stack,"",@progbits
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/tls-ld-2.d b/binutils-2.21/ld/testsuite/ld-m68k/tls-ld-2.d
new file mode 100644
index 0000000..ee1bac5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/tls-ld-2.d
@@ -0,0 +1,15 @@
+#as: -mcpu=5206
+#source: tls-ld-2.s
+#ld: -shared
+#readelf: -d -r
+
+Dynamic section at offset .* contains 6 entries:
+ Tag Type Name/Value
+ 0x00000004 \(HASH\) 0x[0-9a-f]+
+ 0x00000005 \(STRTAB\) 0x[0-9a-f]+
+ 0x00000006 \(SYMTAB\) 0x[0-9a-f]+
+ 0x0000000a \(STRSZ\) [0-9]+ \(bytes\)
+ 0x0000000b \(SYMENT\) 16 \(bytes\)
+ 0x00000000 \(NULL\) 0x0
+
+There are no relocations in this file.
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/tls-ld-2.s b/binutils-2.21/ld/testsuite/ld-m68k/tls-ld-2.s
new file mode 100644
index 0000000..b1c447f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/tls-ld-2.s
@@ -0,0 +1,19 @@
+#NO_APP
+ .text
+ .align 2
+ .globl foo
+ .type foo, @function
+foo:
+ link.w %fp,#0
+ move.l %a5,-(%sp)
+ move.l #_GLOBAL_OFFSET_TABLE_@GOTPC, %a5
+ lea (-6, %pc, %a5), %a5
+
+ move.l %d0,%a1
+ add.l x@TLSLDO,%a1
+
+ move.l (%sp)+,%a5
+ unlk %fp
+ rts
+ .size foo, .-foo
+ .section .note.GNU-stack,"",@progbits
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/tls-le-1.s b/binutils-2.21/ld/testsuite/ld-m68k/tls-le-1.s
new file mode 100644
index 0000000..b1e9c13
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/tls-le-1.s
@@ -0,0 +1,20 @@
+#NO_APP
+ .text
+ .align 2
+ .globl foo
+ .type foo, @function
+foo:
+ link.w %fp,#0
+ move.l %a5,-(%sp)
+ move.l #_GLOBAL_OFFSET_TABLE_@GOTPC, %a5
+ lea (-6, %pc, %a5), %a5
+
+ jbsr __m68k_read_tp
+ move.l x@TLSLE(%a5),%a1
+ add.l %a0,%a1
+
+ move.l (%sp)+,%a5
+ unlk %fp
+ rts
+ .size foo, .-foo
+ .section .note.GNU-stack,"",@progbits
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/tls-main-1.d b/binutils-2.21/ld/testsuite/ld-m68k/tls-main-1.d
new file mode 100644
index 0000000..7da24ab
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/tls-main-1.d
@@ -0,0 +1,15 @@
+
+Dynamic section at offset .* contains .*:
+ * Tag * Type * Name/Value
+ 0x00000001 \(NEEDED\) * Shared library: \[tmpdir/tls-gd-1.so\]
+ 0x00000001 \(NEEDED\) * Shared library: \[tls-def-1.so\]
+ 0x00000004 \(HASH\) .*
+ 0x00000005 \(STRTAB\) .*
+ 0x00000006 \(SYMTAB\) .*
+ 0x0000000a \(STRSZ\) .*
+ 0x0000000b \(SYMENT\) .*
+ 0x00000015 \(DEBUG\) .*
+ 0x00000007 \(RELA\) .*
+ 0x00000008 \(RELASZ\) .*
+ 0x00000009 \(RELAENT\) .*
+ 0x00000000 \(NULL\) .*
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/tls-main-1.s b/binutils-2.21/ld/testsuite/ld-m68k/tls-main-1.s
new file mode 100644
index 0000000..75fb6d6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/tls-main-1.s
@@ -0,0 +1,19 @@
+#NO_APP
+ .text
+ .align 2
+ .globl main
+ .type main, @function
+ .globl _start
+ .type _start, @function
+main:
+_start:
+ link.w %fp,#0
+ move.l %a5,-(%sp)
+ move.l #_GLOBAL_OFFSET_TABLE_@GOTPC, %a5
+ lea (-6, %pc, %a5), %a5
+ move.l x@TLSIE(%a5),%a0
+ move.l -4(%fp),%a5
+ unlk %fp
+ rts
+ .size main, .-main
+ .section .note.GNU-stack,"",@progbits
diff --git a/binutils-2.21/ld/testsuite/ld-m68k/tls-no-1.s b/binutils-2.21/ld/testsuite/ld-m68k/tls-no-1.s
new file mode 100644
index 0000000..4e59919
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-m68k/tls-no-1.s
@@ -0,0 +1,18 @@
+#NO_APP
+ .text
+ .align 2
+ .globl foo
+ .type foo, @function
+foo:
+ link.w %fp,#0
+ move.l %a5,-(%sp)
+ move.l #_GLOBAL_OFFSET_TABLE_@GOTPC, %a5
+ lea (-6, %pc, %a5), %a5
+
+ move.l x@GOT(%a5),%d0
+
+ move.l (%sp)+,%a5
+ unlk %fp
+ rts
+ .size foo, .-foo
+ .section .note.GNU-stack,"",@progbits
diff --git a/binutils-2.21/ld/testsuite/ld-mep/mep.exp b/binutils-2.21/ld/testsuite/ld-mep/mep.exp
new file mode 100644
index 0000000..3c54f8f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mep/mep.exp
@@ -0,0 +1,38 @@
+# Expect script for ld-mep tests
+# Copyright 2002, 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by DJ Delorie (dj@redhat.com)
+#
+
+# Test MeP linking for special cases.
+
+if ![istarget mep*-*-*] {
+ return
+}
+
+set testbsrweak "MeP bsr to undefined weak function"
+
+if ![ld_assemble $as "$srcdir/$subdir/mep1.s" tmpdir/mep1.o] {
+ unresolved $testbsrweak
+} else { if ![ld_simple_link $ld tmpdir/mep1 "-T$srcdir/$subdir/mep1.ld tmpdir/mep1.o"] {
+ fail $testbsrweak
+} else {
+ pass $testbsrweak
+} }
diff --git a/binutils-2.21/ld/testsuite/ld-mep/mep1.ld b/binutils-2.21/ld/testsuite/ld-mep/mep1.ld
new file mode 100644
index 0000000..d0a4104
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mep/mep1.ld
@@ -0,0 +1,8 @@
+SECTIONS
+{
+ /* This is beyond the normal range of a PCREL24 (bsr) relocation. */
+ . = 0x100000;
+ .text1 : { *(.text1) }
+ . = 0x900000;
+ .text2 : { *(.text2) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mep/mep1.s b/binutils-2.21/ld/testsuite/ld-mep/mep1.s
new file mode 100644
index 0000000..ab5414f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mep/mep1.s
@@ -0,0 +1,13 @@
+ .weak bar
+
+ # This will be in low memory.
+ .section .text1,"ax"
+ bsr bar
+ jmp bar
+
+ # This will be in high memory.
+ .section .text2,"ax"
+ # This needs special handling
+ bsr bar
+ # This shouldn't
+ jmp bar
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-0.s b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-0.s
new file mode 100644
index 0000000..a143746
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-0.s
@@ -0,0 +1 @@
+.gnu_attribute 4,0
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-00.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-00.d
new file mode 100644
index 0000000..cd95356
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-00.d
@@ -0,0 +1,7 @@
+#source: attr-gnu-4-0.s
+#source: attr-gnu-4-0.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-01.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-01.d
new file mode 100644
index 0000000..88bd9c2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-01.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-0.s
+#source: attr-gnu-4-1.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_MIPS_ABI_FP: Hard float \(double precision\)
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-02.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-02.d
new file mode 100644
index 0000000..a9cd487
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-02.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-0.s
+#source: attr-gnu-4-2.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_MIPS_ABI_FP: Hard float \(single precision\)
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-03.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-03.d
new file mode 100644
index 0000000..64f03f5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-03.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-0.s
+#source: attr-gnu-4-3.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_MIPS_ABI_FP: Soft float
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-04.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-04.d
new file mode 100644
index 0000000..62b9eef
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-04.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-0.s
+#source: attr-gnu-4-4.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_MIPS_ABI_FP: Hard float \(MIPS32r2 64-bit FPU\)
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-05.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-05.d
new file mode 100644
index 0000000..ebfc6d8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-05.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-0.s
+#source: attr-gnu-4-5.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_MIPS_ABI_FP: \?\?\? \(5\)
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-1.s b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-1.s
new file mode 100644
index 0000000..e985a56
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-1.s
@@ -0,0 +1 @@
+.gnu_attribute 4,1
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-10.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-10.d
new file mode 100644
index 0000000..cd15000
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-10.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-1.s
+#source: attr-gnu-4-0.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_MIPS_ABI_FP: Hard float \(double precision\)
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-11.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-11.d
new file mode 100644
index 0000000..37ccda1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-11.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-1.s
+#source: attr-gnu-4-1.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_MIPS_ABI_FP: Hard float \(double precision\)
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-12.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-12.d
new file mode 100644
index 0000000..3ee6025
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-12.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-1.s
+#source: attr-gnu-4-2.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#warning: Warning: .* uses -msingle-float, .* uses -mdouble-float
+#target: mips*-*-*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-13.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-13.d
new file mode 100644
index 0000000..a48c119
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-13.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-1.s
+#source: attr-gnu-4-3.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#warning: Warning: .* uses hard float, .* uses soft float
+#target: mips*-*-*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-14.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-14.d
new file mode 100644
index 0000000..e899382
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-14.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-1.s
+#source: attr-gnu-4-4.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#warning: Warning: .* uses -msingle-float, .* uses -mips32r2 -mfp64
+#target: mips*-*-*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-15.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-15.d
new file mode 100644
index 0000000..e3ac7fc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-15.d
@@ -0,0 +1,11 @@
+#source: attr-gnu-4-1.s
+#source: attr-gnu-4-5.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#readelf: -A
+#warning: Warning: .* uses unknown floating point ABI 5
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_MIPS_ABI_FP: Hard float \(double precision\)
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-2.s b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-2.s
new file mode 100644
index 0000000..54ebf4e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-2.s
@@ -0,0 +1 @@
+.gnu_attribute 4,2
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-20.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-20.d
new file mode 100644
index 0000000..23fc72d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-20.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-2.s
+#source: attr-gnu-4-0.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_MIPS_ABI_FP: Hard float \(single precision\)
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-21.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-21.d
new file mode 100644
index 0000000..3f84867
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-21.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-2.s
+#source: attr-gnu-4-1.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#warning: Warning: .* uses -msingle-float, .* uses -mdouble-float
+#target: mips*-*-*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-22.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-22.d
new file mode 100644
index 0000000..062bfaf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-22.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-2.s
+#source: attr-gnu-4-2.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_MIPS_ABI_FP: Hard float \(single precision\)
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-23.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-23.d
new file mode 100644
index 0000000..c0c14fd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-23.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-2.s
+#source: attr-gnu-4-3.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#warning: Warning: .* uses hard float, .* uses soft float
+#target: mips*-*-*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-24.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-24.d
new file mode 100644
index 0000000..09e8175
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-24.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-2.s
+#source: attr-gnu-4-4.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#warning: Warning: .* uses -mips32r2 -mfp64
+#target: mips*-*-*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-25.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-25.d
new file mode 100644
index 0000000..0f27255
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-25.d
@@ -0,0 +1,11 @@
+#source: attr-gnu-4-2.s
+#source: attr-gnu-4-5.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#readelf: -A
+#warning: Warning: .* uses unknown floating point ABI 5
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_MIPS_ABI_FP: Hard float \(single precision\)
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-3.s b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-3.s
new file mode 100644
index 0000000..32e5f5d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-3.s
@@ -0,0 +1 @@
+.gnu_attribute 4,3
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-30.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-30.d
new file mode 100644
index 0000000..d123328
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-30.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-3.s
+#source: attr-gnu-4-0.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_MIPS_ABI_FP: Soft float
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-31.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-31.d
new file mode 100644
index 0000000..6a629e7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-31.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-3.s
+#source: attr-gnu-4-1.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#warning: Warning: .* uses hard float, .* uses soft float
+#target: mips*-*-*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-32.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-32.d
new file mode 100644
index 0000000..824d467
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-32.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-3.s
+#source: attr-gnu-4-2.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#warning: Warning: .* uses hard float, .* uses soft float
+#target: mips*-*-*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-33.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-33.d
new file mode 100644
index 0000000..28d9d31
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-33.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-3.s
+#source: attr-gnu-4-3.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_MIPS_ABI_FP: Soft float
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-34.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-34.d
new file mode 100644
index 0000000..2a9b0f3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-34.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-3.s
+#source: attr-gnu-4-4.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#warning: Warning: .* uses hard float, .* uses soft float
+#target: mips*-*-*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-35.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-35.d
new file mode 100644
index 0000000..c3ad25f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-35.d
@@ -0,0 +1,11 @@
+#source: attr-gnu-4-3.s
+#source: attr-gnu-4-5.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#readelf: -A
+#warning: Warning: .* uses unknown floating point ABI 5
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_MIPS_ABI_FP: Soft float
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-4.s b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-4.s
new file mode 100644
index 0000000..3ff129a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-4.s
@@ -0,0 +1 @@
+.gnu_attribute 4,4
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-40.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-40.d
new file mode 100644
index 0000000..d28aa2a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-40.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-4.s
+#source: attr-gnu-4-0.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_MIPS_ABI_FP: Hard float \(MIPS32r2 64-bit FPU\)
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-41.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-41.d
new file mode 100644
index 0000000..71f74a9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-41.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-4.s
+#source: attr-gnu-4-1.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#warning: Warning: .* uses -msingle-float, .* uses -mips32r2 -mfp64
+#target: mips*-*-*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-42.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-42.d
new file mode 100644
index 0000000..c095695
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-42.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-4.s
+#source: attr-gnu-4-2.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#warning: Warning: .* uses -mips32r2 -mfp64
+#target: mips*-*-*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-43.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-43.d
new file mode 100644
index 0000000..8396e38
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-43.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-4.s
+#source: attr-gnu-4-3.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#warning: Warning: .* uses hard float, .* uses soft float
+#target: mips*-*-*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-44.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-44.d
new file mode 100644
index 0000000..8be31de
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-44.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-4.s
+#source: attr-gnu-4-4.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_MIPS_ABI_FP: Hard float \(MIPS32r2 64-bit FPU\)
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-45.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-45.d
new file mode 100644
index 0000000..11738c5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-45.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-4.s
+#source: attr-gnu-4-5.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#warning: Warning: .* uses unknown floating point ABI 5
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_MIPS_ABI_FP: 64-bit float \(-mips32r2 -mfp64\)
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-5.s b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-5.s
new file mode 100644
index 0000000..b21ec3b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-5.s
@@ -0,0 +1 @@
+.gnu_attribute 4,5
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-51.d b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-51.d
new file mode 100644
index 0000000..b5f1c22
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/attr-gnu-4-51.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-5.s
+#source: attr-gnu-4-1.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#warning: Warning: .* uses unknown floating point ABI 5
+#target: mips*-*-*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/branch-misc-1.d b/binutils-2.21/ld/testsuite/ld-mips-elf/branch-misc-1.d
new file mode 100644
index 0000000..0cd3701
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/branch-misc-1.d
@@ -0,0 +1,30 @@
+#name: MIPS branch-misc-1
+#source: ../../../gas/testsuite/gas/mips/branch-misc-1.s
+#objdump: --prefix-addresses -tdr --show-raw-insn
+#ld: -Ttext 0x20000000 -e 0x20000000 -N
+
+.*: file format elf.*mips.*
+
+#...
+
+Disassembly of section \.text:
+ \.\.\.
+ \.\.\.
+ \.\.\.
+0*2000003c <[^>]*> 0411fff0 bal 0*20000000 <[^>]*>
+0*20000040 <[^>]*> 00000000 nop
+0*20000044 <[^>]*> 0411fff3 bal 0*20000014 <[^>]*>
+0*20000048 <[^>]*> 00000000 nop
+0*2000004c <[^>]*> 0411fff6 bal 0*20000028 <[^>]*>
+0*20000050 <[^>]*> 00000000 nop
+0*20000054 <[^>]*> 0411000a bal 0*20000080 <[^>]*>
+0*20000058 <[^>]*> 00000000 nop
+0*2000005c <[^>]*> 0411000d bal 0*20000094 <[^>]*>
+0*20000060 <[^>]*> 00000000 nop
+0*20000064 <[^>]*> 04110010 bal 0*200000a8 <[^>]*>
+0*20000068 <[^>]*> 00000000 nop
+ \.\.\.
+ \.\.\.
+ \.\.\.
+ \.\.\.
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/dyn-sec64.d b/binutils-2.21/ld/testsuite/ld-mips-elf/dyn-sec64.d
new file mode 100644
index 0000000..9564c11
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/dyn-sec64.d
@@ -0,0 +1,30 @@
+#name: objdump -p print 64-bit values
+#source: dyn-sec64.s
+#as: -mips3 -EB -64
+#ld: -Tdyn-sec64.ld -shared -melf64btsmip
+#objdump: -p
+
+.*: .* file format .*
+
+Program Header:
+.* LOAD .*
+.*
+.* LOAD .*
+.*
+.* DYNAMIC .*
+.*
+.* NULL .*
+.*
+
+Dynamic Section:
+
+ INIT .* 0x0001234000003000
+ FINI .* 0x0001234000004000
+ HASH .* 0x0001234000001000
+ STRTAB .*
+ SYMTAB .*
+ STRSZ .*
+ SYMENT .*
+ PLTGOT .* 0x0001235000000000
+ REL .* 0x0001234000002000
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/dyn-sec64.ld b/binutils-2.21/ld/testsuite/ld-mips-elf/dyn-sec64.ld
new file mode 100644
index 0000000..bb75d73
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/dyn-sec64.ld
@@ -0,0 +1,23 @@
+SECTIONS
+{
+ . = 0x1234000000000;
+ .dynamic : { *(.dynamic) }
+ . = 0x1234000001000;
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ . = 0x1234000002000;
+ .rel.dyn : { *(.rel.dyn) }
+
+ . = 0x1234000003000;
+ .init : { *(.init) }
+ . = 0x1234000004000;
+ .fini : { *(.fini) }
+ .text : { *(.text) }
+ .MIPS.stubs : { *(.MIPS.stubs) }
+
+ . = 0x1235000000000;
+ _gp = ALIGN (16) + 0x7ff0;
+ .got : { *(.got) }
+ .data : { *(.data) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/dyn-sec64.s b/binutils-2.21/ld/testsuite/ld-mips-elf/dyn-sec64.s
new file mode 100644
index 0000000..7d634ee
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/dyn-sec64.s
@@ -0,0 +1,19 @@
+ .section .init,"ax",@progbits
+ .globl _init
+ .ent _init
+ .type _init, @function
+_init:
+ ld $2,%call16(bar)
+ .end _init
+
+ .section .fini,"ax",@progbits
+ .globl _fini
+ .ent _fini
+ .type _fini, @function
+_fini:
+ .end _fini
+
+ .data
+foo:
+ .dword bar
+
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame1-n32.d b/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame1-n32.d
new file mode 100644
index 0000000..a460512
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame1-n32.d
@@ -0,0 +1,202 @@
+#name: MIPS eh-frame 1, n32
+#source: eh-frame1.s
+#source: eh-frame1.s
+#as: -EB -n32 --defsym alignment=2 --defsym fill=0x40
+#readelf: --relocs -wf
+#ld: -shared -melf32btsmipn32 -Teh-frame1.ld
+#warning: fde encoding in.*prevents \.eh_frame_hdr table being created.
+
+Relocation section '\.rel\.dyn' .*:
+ *Offset .*
+00000000 [0-9a-f]+ R_MIPS_NONE *
+# Initial PCs for the FDEs attached to CIE 0xbc
+000300dc [0-9a-f]+ R_MIPS_REL32 *
+000300f0 [0-9a-f]+ R_MIPS_REL32 *
+000301f8 [0-9a-f]+ R_MIPS_REL32 *
+0003020c [0-9a-f]+ R_MIPS_REL32 *
+0003008b [0-9a-f]+ R_MIPS_REL32 00000000 foo
+000300d0 [0-9a-f]+ R_MIPS_REL32 00000000 foo
+0003010e [0-9a-f]+ R_MIPS_REL32 00000000 foo
+Contents of the \.eh_frame section:
+
+00000000 00000010 00000000 CIE
+ Version: 1
+ Augmentation: "zR"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 1b
+
+ DW_CFA_advance_loc: 0 to 00000000
+ DW_CFA_advance_loc: 0 to 00000000
+ DW_CFA_advance_loc: 0 to 00000000
+
+00000014 00000010 00000018 FDE cie=00000000 pc=00020000..00020010
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000028 00000010 0000002c FDE cie=00000000 pc=00020010..00020030
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+# basic2 removed
+0000003c 00000010 00000040 FDE cie=00000000 pc=00020030..00020060
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+# basic3 removed
+00000050 00000010 00000054 FDE cie=00000000 pc=00020060..000200a0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+# basic4 removed
+00000064 00000010 00000068 FDE cie=00000000 pc=000200a0..000200f0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000078 00000018 00000000 CIE
+ Version: 1
+ Augmentation: "zRP"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 1b 00 00 00 00 00
+
+ DW_CFA_advance_loc: 0 to 00000000
+ DW_CFA_advance_loc: 0 to 00000000
+ DW_CFA_advance_loc: 0 to 00000000
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000094 00000010 00000020 FDE cie=00000078 pc=000200f0..00020100
+ DW_CFA_advance_loc: 0 to 000200f0
+ DW_CFA_advance_loc: 0 to 000200f0
+ DW_CFA_advance_loc: 0 to 000200f0
+
+000000a8 00000010 00000034 FDE cie=00000078 pc=00020100..00020120
+ DW_CFA_advance_loc: 0 to 00020100
+ DW_CFA_advance_loc: 0 to 00020100
+ DW_CFA_advance_loc: 0 to 00020100
+
+000000bc 00000014 00000000 CIE
+ Version: 1
+ Augmentation: "zP"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 50 00 00 00 00 00 00 00
+
+
+000000d4 00000010 0000001c FDE cie=000000bc pc=00020120..00020130
+ DW_CFA_advance_loc: 0 to 00020120
+ DW_CFA_advance_loc: 0 to 00020120
+ DW_CFA_advance_loc: 0 to 00020120
+
+000000e8 00000010 00000030 FDE cie=000000bc pc=00020130..00020150
+ DW_CFA_advance_loc: 0 to 00020130
+ DW_CFA_advance_loc: 0 to 00020130
+ DW_CFA_advance_loc: 0 to 00020130
+
+000000fc 00000014 00000000 CIE
+ Version: 1
+ Augmentation: "zPR"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 00 00 00 00 00 1b
+
+ DW_CFA_advance_loc: 0 to 00000000
+
+00000114 00000010 0000001c FDE cie=000000fc pc=00020150..00020160
+ DW_CFA_advance_loc: 0 to 00020150
+ DW_CFA_advance_loc: 0 to 00020150
+ DW_CFA_advance_loc: 0 to 00020150
+
+# FDE for .discard removed
+# zPR2 removed
+00000128 00000010 00000030 FDE cie=000000fc pc=00020160..00020190
+ DW_CFA_advance_loc: 0 to 00020160
+ DW_CFA_advance_loc: 0 to 00020160
+ DW_CFA_advance_loc: 0 to 00020160
+
+0000013c 00000010 00000044 FDE cie=000000fc pc=00020190..000201d0
+ DW_CFA_advance_loc: 0 to 00020190
+ DW_CFA_advance_loc: 0 to 00020190
+ DW_CFA_advance_loc: 0 to 00020190
+
+00000150 00000010 00000154 FDE cie=00000000 pc=000201d0..000201e0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+# basic1 removed, followed by repeat of above
+00000164 00000010 00000168 FDE cie=00000000 pc=000201e0..000201f0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000178 00000010 0000017c FDE cie=00000000 pc=000201f0..00020210
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+0000018c 00000010 00000190 FDE cie=00000000 pc=00020210..00020240
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001a0 00000010 000001a4 FDE cie=00000000 pc=00020240..00020280
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001b4 00000010 000001b8 FDE cie=00000000 pc=00020280..000202d0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001c8 00000010 00000154 FDE cie=00000078 pc=000202d0..000202e0
+ DW_CFA_advance_loc: 0 to 000202d0
+ DW_CFA_advance_loc: 0 to 000202d0
+ DW_CFA_advance_loc: 0 to 000202d0
+
+000001dc 00000010 00000168 FDE cie=00000078 pc=000202e0..00020300
+ DW_CFA_advance_loc: 0 to 000202e0
+ DW_CFA_advance_loc: 0 to 000202e0
+ DW_CFA_advance_loc: 0 to 000202e0
+
+000001f0 00000010 00000138 FDE cie=000000bc pc=00020300..00020310
+ DW_CFA_advance_loc: 0 to 00020300
+ DW_CFA_advance_loc: 0 to 00020300
+ DW_CFA_advance_loc: 0 to 00020300
+
+00000204 00000010 0000014c FDE cie=000000bc pc=00020310..00020330
+ DW_CFA_advance_loc: 0 to 00020310
+ DW_CFA_advance_loc: 0 to 00020310
+ DW_CFA_advance_loc: 0 to 00020310
+
+00000218 00000010 00000120 FDE cie=000000fc pc=00020330..00020340
+ DW_CFA_advance_loc: 0 to 00020330
+ DW_CFA_advance_loc: 0 to 00020330
+ DW_CFA_advance_loc: 0 to 00020330
+
+0000022c 00000010 00000134 FDE cie=000000fc pc=00020340..00020370
+ DW_CFA_advance_loc: 0 to 00020340
+ DW_CFA_advance_loc: 0 to 00020340
+ DW_CFA_advance_loc: 0 to 00020340
+
+00000240 00000010 00000148 FDE cie=000000fc pc=00020370..000203b0
+ DW_CFA_advance_loc: 0 to 00020370
+ DW_CFA_advance_loc: 0 to 00020370
+ DW_CFA_advance_loc: 0 to 00020370
+
+00000254 00000010 00000258 FDE cie=00000000 pc=000203b0..000203c0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame1-n64.d b/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame1-n64.d
new file mode 100644
index 0000000..c77315f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame1-n64.d
@@ -0,0 +1,338 @@
+#name: MIPS eh-frame 1, n64
+#source: eh-frame1.s
+#source: eh-frame1.s
+#as: -EB -64 --defsym alignment=3 --defsym fill=0x40
+#readelf: --relocs -wf
+#ld: -shared -melf64btsmip -Teh-frame1.ld
+#warning: fde encoding in.*prevents \.eh_frame_hdr table being created.
+
+Relocation section '\.rel\.dyn' .*:
+ *Offset .*
+000000000000 [0-9a-f]+ R_MIPS_NONE *
+ *Type2: R_MIPS_NONE *
+ *Type3: R_MIPS_NONE *
+# Initial PCs for the FDEs attached to CIE 0x120
+000000030148 [0-9a-f]+ R_MIPS_REL32 *
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+000000030168 [0-9a-f]+ R_MIPS_REL32 *
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+000000030308 [0-9a-f]+ R_MIPS_REL32 *
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+000000030328 [0-9a-f]+ R_MIPS_REL32 *
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+0000000300cb [0-9a-f]+ R_MIPS_REL32 0000000000000000 foo
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+000000030138 [0-9a-f]+ R_MIPS_REL32 0000000000000000 foo
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+000000030192 [0-9a-f]+ R_MIPS_REL32 0000000000000000 foo
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+Contents of the \.eh_frame section:
+
+00000000 00000014 00000000 CIE
+ Version: 1
+ Augmentation: "zR"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 1c
+
+ DW_CFA_advance_loc: 0 to 00000000
+ DW_CFA_advance_loc: 0 to 00000000
+ DW_CFA_advance_loc: 0 to 00000000
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000018 0000001c 0000001c FDE cie=00000000 pc=00020000..00020010
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000038 0000001c 0000003c FDE cie=00000000 pc=00020010..00020030
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+# basic2 removed
+00000058 0000001c 0000005c FDE cie=00000000 pc=00020030..00020060
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+# basic3 removed
+00000078 0000001c 0000007c FDE cie=00000000 pc=00020060..000200a0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+# basic4 removed
+00000098 0000001c 0000009c FDE cie=00000000 pc=000200a0..000200f0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000000b8 00000024 00000000 CIE
+ Version: 1
+ Augmentation: "zRP"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 1c 00 00 00 00 00 00 00 00 00
+
+ DW_CFA_advance_loc: 0 to 00000000
+ DW_CFA_advance_loc: 0 to 00000000
+ DW_CFA_advance_loc: 0 to 00000000
+ DW_CFA_advance_loc: 0 to 00000000
+ DW_CFA_advance_loc: 0 to 00000000
+ DW_CFA_advance_loc: 0 to 00000000
+ DW_CFA_advance_loc: 0 to 00000000
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000000e0 0000001c 0000002c FDE cie=000000b8 pc=000200f0..00020100
+ DW_CFA_advance_loc: 0 to 000200f0
+ DW_CFA_advance_loc: 0 to 000200f0
+ DW_CFA_advance_loc: 0 to 000200f0
+ DW_CFA_advance_loc: 0 to 000200f0
+ DW_CFA_advance_loc: 0 to 000200f0
+ DW_CFA_advance_loc: 0 to 000200f0
+ DW_CFA_advance_loc: 0 to 000200f0
+
+00000100 0000001c 0000004c FDE cie=000000b8 pc=00020100..00020120
+ DW_CFA_advance_loc: 0 to 00020100
+ DW_CFA_advance_loc: 0 to 00020100
+ DW_CFA_advance_loc: 0 to 00020100
+ DW_CFA_advance_loc: 0 to 00020100
+ DW_CFA_advance_loc: 0 to 00020100
+ DW_CFA_advance_loc: 0 to 00020100
+ DW_CFA_advance_loc: 0 to 00020100
+
+00000120 0000001c 00000000 CIE
+ Version: 1
+ Augmentation: "zP"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+
+
+00000140 0000001c 00000024 FDE cie=00000120 pc=00020120..00020130
+ DW_CFA_advance_loc: 0 to 00020120
+ DW_CFA_advance_loc: 0 to 00020120
+ DW_CFA_advance_loc: 0 to 00020120
+ DW_CFA_advance_loc: 0 to 00020120
+ DW_CFA_advance_loc: 0 to 00020120
+ DW_CFA_advance_loc: 0 to 00020120
+ DW_CFA_advance_loc: 0 to 00020120
+
+00000160 0000001c 00000044 FDE cie=00000120 pc=00020130..00020150
+ DW_CFA_advance_loc: 0 to 00020130
+ DW_CFA_advance_loc: 0 to 00020130
+ DW_CFA_advance_loc: 0 to 00020130
+ DW_CFA_advance_loc: 0 to 00020130
+ DW_CFA_advance_loc: 0 to 00020130
+ DW_CFA_advance_loc: 0 to 00020130
+ DW_CFA_advance_loc: 0 to 00020130
+
+00000180 0000001c 00000000 CIE
+ Version: 1
+ Augmentation: "zPR"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 00 00 00 00 00 00 00 00 00 1c
+
+ DW_CFA_advance_loc: 0 to 00000000
+ DW_CFA_advance_loc: 0 to 00000000
+ DW_CFA_advance_loc: 0 to 00000000
+ DW_CFA_advance_loc: 0 to 00000000
+ DW_CFA_advance_loc: 0 to 00000000
+
+000001a0 0000001c 00000024 FDE cie=00000180 pc=00020150..00020160
+ DW_CFA_advance_loc: 0 to 00020150
+ DW_CFA_advance_loc: 0 to 00020150
+ DW_CFA_advance_loc: 0 to 00020150
+ DW_CFA_advance_loc: 0 to 00020150
+ DW_CFA_advance_loc: 0 to 00020150
+ DW_CFA_advance_loc: 0 to 00020150
+ DW_CFA_advance_loc: 0 to 00020150
+
+# FDE for .discard removed
+# zPR2 removed
+000001c0 0000001c 00000044 FDE cie=00000180 pc=00020160..00020190
+ DW_CFA_advance_loc: 0 to 00020160
+ DW_CFA_advance_loc: 0 to 00020160
+ DW_CFA_advance_loc: 0 to 00020160
+ DW_CFA_advance_loc: 0 to 00020160
+ DW_CFA_advance_loc: 0 to 00020160
+ DW_CFA_advance_loc: 0 to 00020160
+ DW_CFA_advance_loc: 0 to 00020160
+
+000001e0 0000001c 00000064 FDE cie=00000180 pc=00020190..000201d0
+ DW_CFA_advance_loc: 0 to 00020190
+ DW_CFA_advance_loc: 0 to 00020190
+ DW_CFA_advance_loc: 0 to 00020190
+ DW_CFA_advance_loc: 0 to 00020190
+ DW_CFA_advance_loc: 0 to 00020190
+ DW_CFA_advance_loc: 0 to 00020190
+ DW_CFA_advance_loc: 0 to 00020190
+
+00000200 0000001c 00000204 FDE cie=00000000 pc=000201d0..000201e0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+# basic1 removed, followed by repeat of above
+00000220 0000001c 00000224 FDE cie=00000000 pc=000201e0..000201f0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000240 0000001c 00000244 FDE cie=00000000 pc=000201f0..00020210
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000260 0000001c 00000264 FDE cie=00000000 pc=00020210..00020240
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000280 0000001c 00000284 FDE cie=00000000 pc=00020240..00020280
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000002a0 0000001c 000002a4 FDE cie=00000000 pc=00020280..000202d0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000002c0 0000001c 0000020c FDE cie=000000b8 pc=000202d0..000202e0
+ DW_CFA_advance_loc: 0 to 000202d0
+ DW_CFA_advance_loc: 0 to 000202d0
+ DW_CFA_advance_loc: 0 to 000202d0
+ DW_CFA_advance_loc: 0 to 000202d0
+ DW_CFA_advance_loc: 0 to 000202d0
+ DW_CFA_advance_loc: 0 to 000202d0
+ DW_CFA_advance_loc: 0 to 000202d0
+
+000002e0 0000001c 0000022c FDE cie=000000b8 pc=000202e0..00020300
+ DW_CFA_advance_loc: 0 to 000202e0
+ DW_CFA_advance_loc: 0 to 000202e0
+ DW_CFA_advance_loc: 0 to 000202e0
+ DW_CFA_advance_loc: 0 to 000202e0
+ DW_CFA_advance_loc: 0 to 000202e0
+ DW_CFA_advance_loc: 0 to 000202e0
+ DW_CFA_advance_loc: 0 to 000202e0
+
+00000300 0000001c 000001e4 FDE cie=00000120 pc=00020300..00020310
+ DW_CFA_advance_loc: 0 to 00020300
+ DW_CFA_advance_loc: 0 to 00020300
+ DW_CFA_advance_loc: 0 to 00020300
+ DW_CFA_advance_loc: 0 to 00020300
+ DW_CFA_advance_loc: 0 to 00020300
+ DW_CFA_advance_loc: 0 to 00020300
+ DW_CFA_advance_loc: 0 to 00020300
+
+00000320 0000001c 00000204 FDE cie=00000120 pc=00020310..00020330
+ DW_CFA_advance_loc: 0 to 00020310
+ DW_CFA_advance_loc: 0 to 00020310
+ DW_CFA_advance_loc: 0 to 00020310
+ DW_CFA_advance_loc: 0 to 00020310
+ DW_CFA_advance_loc: 0 to 00020310
+ DW_CFA_advance_loc: 0 to 00020310
+ DW_CFA_advance_loc: 0 to 00020310
+
+00000340 0000001c 000001c4 FDE cie=00000180 pc=00020330..00020340
+ DW_CFA_advance_loc: 0 to 00020330
+ DW_CFA_advance_loc: 0 to 00020330
+ DW_CFA_advance_loc: 0 to 00020330
+ DW_CFA_advance_loc: 0 to 00020330
+ DW_CFA_advance_loc: 0 to 00020330
+ DW_CFA_advance_loc: 0 to 00020330
+ DW_CFA_advance_loc: 0 to 00020330
+
+00000360 0000001c 000001e4 FDE cie=00000180 pc=00020340..00020370
+ DW_CFA_advance_loc: 0 to 00020340
+ DW_CFA_advance_loc: 0 to 00020340
+ DW_CFA_advance_loc: 0 to 00020340
+ DW_CFA_advance_loc: 0 to 00020340
+ DW_CFA_advance_loc: 0 to 00020340
+ DW_CFA_advance_loc: 0 to 00020340
+ DW_CFA_advance_loc: 0 to 00020340
+
+00000380 0000001c 00000204 FDE cie=00000180 pc=00020370..000203b0
+ DW_CFA_advance_loc: 0 to 00020370
+ DW_CFA_advance_loc: 0 to 00020370
+ DW_CFA_advance_loc: 0 to 00020370
+ DW_CFA_advance_loc: 0 to 00020370
+ DW_CFA_advance_loc: 0 to 00020370
+ DW_CFA_advance_loc: 0 to 00020370
+ DW_CFA_advance_loc: 0 to 00020370
+
+000003a0 0000001c 000003a4 FDE cie=00000000 pc=000203b0..000203c0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame1.ld b/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame1.ld
new file mode 100644
index 0000000..93c4972
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame1.ld
@@ -0,0 +1,19 @@
+SECTIONS
+{
+ . = 0x10000;
+ .dynamic : { *(.dynamic) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ .rel.dyn : { *(.rel.dyn) }
+
+ . = 0x20000;
+ .text : { *(.text) }
+
+ . = 0x30000;
+ .eh_frame : { *(.eh_frame) }
+ .got : { *(.got) }
+ .gcc_compiled_long32 : { *(.gcc_compiled_long32) }
+
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame1.s b/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame1.s
new file mode 100644
index 0000000..94ed70d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame1.s
@@ -0,0 +1,152 @@
+#----------------------------------------------------------------------------
+# Macros
+#----------------------------------------------------------------------------
+
+ mask = (1 << alignment) - 1
+
+ # Output VALUE as an unaligned pointer-sized quantity.
+ .macro pbyte value
+ .if alignment == 2
+ .4byte \value
+ .else
+ .8byte \value
+ .endif
+ .endm
+
+
+ # Start a new CIE, and emit everything up to the augmentation data.
+ # Use LABEL to mark the start of the entry and AUG as the augmentation
+ # string.
+ .macro start_cie label,aug
+ .section .eh_frame,"aw",@progbits
+\label:
+ .word 2f-1f # Length
+1:
+ .word 0 # Identifier
+ .byte 1 # Version
+ .string "\aug" # Augmentation
+ .byte 1 # Code alignment
+ .byte 4 # Data alignment
+ .byte 31 # Return address column
+ .endm
+
+
+ # Create a dummy function of SIZE bytes in SECTION and emit the
+ # first four entries of an FDE for it.
+ .macro start_fde cie,section,size
+ .section \section,"ax",@progbits
+3:
+ .rept \size / 4
+ nop
+ .endr
+4:
+ .section .eh_frame,"aw",@progbits
+ .word 2f-1f # Length
+1:
+ .word .-\cie # CIE offset
+ pbyte 3b # Initial PC
+ pbyte 4b-3b # Size of code
+ .endm
+
+
+ # Finish a CIE or FDE entry.
+ .macro end_entry
+ .p2align alignment,fill
+2:
+ .endm
+
+
+ # Start the augmentation data for a CIE that has a 'P' entry
+ # followed by EXTRA bytes. AUGLEN is the length of augmentation
+ # string (including zero terminator), ENCODING is the encoding to
+ # use for the personality routine and VALUE is the value it
+ # should have.
+ .macro persaug auglen,extra,encoding,value
+ .if (\encoding & 0xf0) == 0x50
+ .byte (-(9 + \auglen + 3 + 2) & mask) + 2 + mask + \extra
+ .byte \encoding
+ .fill -(9 + \auglen + 3 + 2) & mask,1,0
+ .else
+ .byte 2 + mask + \extra
+ .byte \encoding
+ .endif
+ pbyte \value
+ .endm
+
+
+ .macro cie_basic label
+ start_cie \label,""
+ end_entry
+ .endm
+
+ .macro fde_basic cie,section,size
+ start_fde \cie,\section,\size
+ end_entry
+ .endm
+
+
+ .macro cie_zP label,encoding,value
+ start_cie \label,"zP"
+ persaug 3,0,\encoding,\value
+ end_entry
+ .endm
+
+ .macro fde_zP cie,section,size
+ start_fde \cie,\section,\size
+ .byte 0 # Augmentation length
+ end_entry
+ .endm
+
+
+ .macro cie_zPR label,encoding,value
+ start_cie \label,"zPR"
+ persaug 4,1,\encoding,\value
+ .byte 0 # FDE enconding
+ end_entry
+ .endm
+
+ .macro fde_zPR cie,section,size
+ start_fde \cie,\section,\size
+ .byte 0 # Augmentation length
+ end_entry
+ .endm
+
+#----------------------------------------------------------------------------
+# Test code
+#----------------------------------------------------------------------------
+
+ cie_basic basic1
+ fde_basic basic1,.text,0x10
+ fde_basic basic1,.text,0x20
+
+ cie_basic basic2
+ fde_basic basic2,.text,0x30
+
+ cie_basic basic3
+ fde_basic basic3,.text,0x40
+
+ cie_basic basic4
+ fde_basic basic4,.text,0x50
+
+ cie_zP zP_unalign1,0x00,foo
+ fde_zP zP_unalign1,.text,0x10
+ fde_zP zP_unalign1,.text,0x20
+
+ cie_zP zP_align1,0x50,foo
+ fde_zP zP_align1,.text,0x10
+ fde_zP zP_align1,.text,0x20
+
+ cie_zPR zPR1,0x00,foo
+ fde_zPR zPR1,.text,0x10
+ fde_zPR zPR1,.discard,0x20
+
+ cie_zPR zPR2,0x00,foo
+ fde_zPR zPR2,.text,0x30
+ fde_zPR zPR2,.text,0x40
+
+ cie_basic basic5
+ fde_basic basic5,.text,0x10
+
+ .if alignment == 2
+ .section .gcc_compiled_long32
+ .endif
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame2-n32.d b/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame2-n32.d
new file mode 100644
index 0000000..e264955
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame2-n32.d
@@ -0,0 +1,198 @@
+#name: MIPS eh-frame 2, n32
+#source: eh-frame1.s
+#source: eh-frame1.s
+#as: -EB -n32 --defsym alignment=2 --defsym fill=0
+#readelf: --relocs -wf
+#ld: -shared -melf32btsmipn32 -Teh-frame1.ld
+#warning: fde encoding in.*prevents \.eh_frame_hdr table being created.
+
+Relocation section '\.rel\.dyn' .*:
+ *Offset .*
+00000000 [0-9a-f]+ R_MIPS_NONE *
+# Initial PCs for the FDEs attached to CIE 0xb8
+000300d8 [0-9a-f]+ R_MIPS_REL32 *
+000300ec [0-9a-f]+ R_MIPS_REL32 *
+000301f4 [0-9a-f]+ R_MIPS_REL32 *
+00030208 [0-9a-f]+ R_MIPS_REL32 *
+0003008b [0-9a-f]+ R_MIPS_REL32 00000000 foo
+000300cc [0-9a-f]+ R_MIPS_REL32 00000000 foo
+0003010a [0-9a-f]+ R_MIPS_REL32 00000000 foo
+Contents of the \.eh_frame section:
+
+00000000 00000010 00000000 CIE
+ Version: 1
+ Augmentation: "zR"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 1b
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000014 00000010 00000018 FDE cie=00000000 pc=00020000..00020010
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000028 00000010 0000002c FDE cie=00000000 pc=00020010..00020030
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+# basic2 removed
+0000003c 00000010 00000040 FDE cie=00000000 pc=00020030..00020060
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+# basic3 removed
+00000050 00000010 00000054 FDE cie=00000000 pc=00020060..000200a0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+# basic4 removed
+00000064 00000010 00000068 FDE cie=00000000 pc=000200a0..000200f0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000078 00000014 00000000 CIE
+ Version: 1
+ Augmentation: "zRP"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 1b 00 00 00 00 00
+
+ DW_CFA_nop
+
+00000090 00000010 0000001c FDE cie=00000078 pc=000200f0..00020100
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000000a4 00000010 00000030 FDE cie=00000078 pc=00020100..00020120
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000000b8 00000014 00000000 CIE
+ Version: 1
+ Augmentation: "zP"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 50 00 00 00 00 00 00 00
+
+
+000000d0 00000010 0000001c FDE cie=000000b8 pc=00020120..00020130
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000000e4 00000010 00000030 FDE cie=000000b8 pc=00020130..00020150
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000000f8 00000014 00000000 CIE
+ Version: 1
+ Augmentation: "zPR"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 00 00 00 00 00 1b
+
+ DW_CFA_nop
+
+00000110 00000010 0000001c FDE cie=000000f8 pc=00020150..00020160
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+# FDE for .discard removed
+# zPR2 removed
+00000124 00000010 00000030 FDE cie=000000f8 pc=00020160..00020190
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000138 00000010 00000044 FDE cie=000000f8 pc=00020190..000201d0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+0000014c 00000010 00000150 FDE cie=00000000 pc=000201d0..000201e0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+# basic1 removed, followed by repeat of above
+00000160 00000010 00000164 FDE cie=00000000 pc=000201e0..000201f0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000174 00000010 00000178 FDE cie=00000000 pc=000201f0..00020210
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000188 00000010 0000018c FDE cie=00000000 pc=00020210..00020240
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+0000019c 00000010 000001a0 FDE cie=00000000 pc=00020240..00020280
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001b0 00000010 000001b4 FDE cie=00000000 pc=00020280..000202d0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001c4 00000010 00000150 FDE cie=00000078 pc=000202d0..000202e0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001d8 00000010 00000164 FDE cie=00000078 pc=000202e0..00020300
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001ec 00000010 00000138 FDE cie=000000b8 pc=00020300..00020310
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000200 00000010 0000014c FDE cie=000000b8 pc=00020310..00020330
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000214 00000010 00000120 FDE cie=000000f8 pc=00020330..00020340
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000228 00000010 00000134 FDE cie=000000f8 pc=00020340..00020370
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+0000023c 00000010 00000148 FDE cie=000000f8 pc=00020370..000203b0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000250 00000010 00000254 FDE cie=00000000 pc=000203b0..000203c0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame2-n64.d b/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame2-n64.d
new file mode 100644
index 0000000..237c3d4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame2-n64.d
@@ -0,0 +1,330 @@
+#name: MIPS eh-frame 2, n64
+#source: eh-frame1.s
+#source: eh-frame1.s
+#as: -EB -64 --defsym alignment=3 --defsym fill=0
+#readelf: --relocs -wf
+#ld: -shared -melf64btsmip -Teh-frame1.ld
+#warning: fde encoding in.*prevents \.eh_frame_hdr table being created.
+
+Relocation section '\.rel\.dyn' .*:
+ *Offset .*
+000000000000 [0-9a-f]+ R_MIPS_NONE *
+ *Type2: R_MIPS_NONE *
+ *Type3: R_MIPS_NONE *
+# Initial PCs for the FDEs attached to CIE 0x118
+000000030140 [0-9a-f]+ R_MIPS_REL32 *
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+000000030160 [0-9a-f]+ R_MIPS_REL32 *
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+000000030300 [0-9a-f]+ R_MIPS_REL32 *
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+000000030320 [0-9a-f]+ R_MIPS_REL32 *
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+0000000300cb [0-9a-f]+ R_MIPS_REL32 0000000000000000 foo
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+000000030130 [0-9a-f]+ R_MIPS_REL32 0000000000000000 foo
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+00000003018a [0-9a-f]+ R_MIPS_REL32 0000000000000000 foo
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+Contents of the \.eh_frame section:
+
+00000000 00000014 00000000 CIE
+ Version: 1
+ Augmentation: "zR"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 1c
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000018 0000001c 0000001c FDE cie=00000000 pc=00020000..00020010
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000038 0000001c 0000003c FDE cie=00000000 pc=00020010..00020030
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+# basic2 removed
+00000058 0000001c 0000005c FDE cie=00000000 pc=00020030..00020060
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+# basic3 removed
+00000078 0000001c 0000007c FDE cie=00000000 pc=00020060..000200a0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+# basic4 removed
+00000098 0000001c 0000009c FDE cie=00000000 pc=000200a0..000200f0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000000b8 0000001c 00000000 CIE
+ Version: 1
+ Augmentation: "zRP"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 1c 00 00 00 00 00 00 00 00 00
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000000d8 0000001c 00000024 FDE cie=000000b8 pc=000200f0..00020100
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000000f8 0000001c 00000044 FDE cie=000000b8 pc=00020100..00020120
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000118 0000001c 00000000 CIE
+ Version: 1
+ Augmentation: "zP"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+
+
+00000138 0000001c 00000024 FDE cie=00000118 pc=00020120..00020130
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000158 0000001c 00000044 FDE cie=00000118 pc=00020130..00020150
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000178 0000001c 00000000 CIE
+ Version: 1
+ Augmentation: "zPR"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 00 00 00 00 00 00 00 00 00 1c
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000198 0000001c 00000024 FDE cie=00000178 pc=00020150..00020160
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+# FDE for .discard removed
+# zPR2 removed
+000001b8 0000001c 00000044 FDE cie=00000178 pc=00020160..00020190
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001d8 0000001c 00000064 FDE cie=00000178 pc=00020190..000201d0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001f8 0000001c 000001fc FDE cie=00000000 pc=000201d0..000201e0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+# basic1 removed, followed by repeat of above
+00000218 0000001c 0000021c FDE cie=00000000 pc=000201e0..000201f0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000238 0000001c 0000023c FDE cie=00000000 pc=000201f0..00020210
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000258 0000001c 0000025c FDE cie=00000000 pc=00020210..00020240
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000278 0000001c 0000027c FDE cie=00000000 pc=00020240..00020280
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000298 0000001c 0000029c FDE cie=00000000 pc=00020280..000202d0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000002b8 0000001c 00000204 FDE cie=000000b8 pc=000202d0..000202e0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000002d8 0000001c 00000224 FDE cie=000000b8 pc=000202e0..00020300
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000002f8 0000001c 000001e4 FDE cie=00000118 pc=00020300..00020310
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000318 0000001c 00000204 FDE cie=00000118 pc=00020310..00020330
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000338 0000001c 000001c4 FDE cie=00000178 pc=00020330..00020340
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000358 0000001c 000001e4 FDE cie=00000178 pc=00020340..00020370
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000378 0000001c 00000204 FDE cie=00000178 pc=00020370..000203b0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000398 0000001c 0000039c FDE cie=00000000 pc=000203b0..000203c0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame3.d b/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame3.d
new file mode 100644
index 0000000..0328eb8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame3.d
@@ -0,0 +1,281 @@
+#name: MIPS eh-frame 3
+#source: eh-frame1.s
+#source: eh-frame1.s
+#as: -EB -mips3 -mabi=eabi --defsym alignment=3 --defsym fill=0 --defsym foo=0x1020304050607080
+#readelf: -wf
+#ld: -EB -Teh-frame1.ld
+#
+# This test is for the official LP64 version of EABI64, which uses a
+# combination of 32-bit objects and 64-bit FDE addresses.
+#
+
+Contents of the \.eh_frame section:
+
+00000000 0000000c 00000000 CIE
+ Version: 1
+ Augmentation: ""
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000010 00000014 00000014 FDE cie=00000000 pc=00020000..00020010
+
+00000028 00000014 0000002c FDE cie=00000000 pc=00020010..00020030
+
+# basic2 removed
+00000040 00000014 00000044 FDE cie=00000000 pc=00020030..00020060
+
+# basic3 removed
+00000058 00000014 0000005c FDE cie=00000000 pc=00020060..000200a0
+
+# basic4 removed
+00000070 00000014 00000074 FDE cie=00000000 pc=000200a0..000200f0
+
+00000088 0000001c 00000000 CIE
+ Version: 1
+ Augmentation: "zP"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 00 10 20 30 40 50 60 70 80
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000000a8 0000001c 00000024 FDE cie=00000088 pc=000200f0..00020100
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000000c8 0000001c 00000044 FDE cie=00000088 pc=00020100..00020120
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000000e8 0000001c 00000000 CIE
+ Version: 1
+ Augmentation: "zP"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 50 00 00 00 00 00 00 00 10 20 30 40 50 60 70 80
+
+
+00000108 0000001c 00000024 FDE cie=000000e8 pc=00020120..00020130
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000128 0000001c 00000044 FDE cie=000000e8 pc=00020130..00020150
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000148 0000001c 00000000 CIE
+ Version: 1
+ Augmentation: "zPR"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 00 10 20 30 40 50 60 70 80 00
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000168 0000001c 00000024 FDE cie=00000148 pc=00020150..00020160
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+# FDE for .discard removed
+# zPR2 removed
+00000188 0000001c 00000044 FDE cie=00000148 pc=00020160..00020190
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001a8 0000001c 00000064 FDE cie=00000148 pc=00020190..000201d0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001c8 0000000c 00000000 CIE
+ Version: 1
+ Augmentation: ""
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001d8 00000014 00000014 FDE cie=000001c8 pc=000201d0..000201e0
+
+# basic1 removed, followed by repeat of above
+000001f0 00000014 0000002c FDE cie=000001c8 pc=000201e0..000201f0
+
+00000208 00000014 00000044 FDE cie=000001c8 pc=000201f0..00020210
+
+00000220 00000014 0000005c FDE cie=000001c8 pc=00020210..00020240
+
+00000238 00000014 00000074 FDE cie=000001c8 pc=00020240..00020280
+
+00000250 00000014 0000008c FDE cie=000001c8 pc=00020280..000202d0
+
+00000268 0000001c 00000000 CIE
+ Version: 1
+ Augmentation: "zP"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 00 10 20 30 40 50 60 70 80
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000288 0000001c 00000024 FDE cie=00000268 pc=000202d0..000202e0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000002a8 0000001c 00000044 FDE cie=00000268 pc=000202e0..00020300
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000002c8 0000001c 00000000 CIE
+ Version: 1
+ Augmentation: "zP"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 50 00 00 00 00 00 00 00 10 20 30 40 50 60 70 80
+
+
+000002e8 0000001c 00000024 FDE cie=000002c8 pc=00020300..00020310
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000308 0000001c 00000044 FDE cie=000002c8 pc=00020310..00020330
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000328 0000001c 00000000 CIE
+ Version: 1
+ Augmentation: "zPR"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 00 10 20 30 40 50 60 70 80 00
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000348 0000001c 00000024 FDE cie=00000328 pc=00020330..00020340
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+# FDE for .discard removed
+# zPR2 removed
+00000368 0000001c 00000044 FDE cie=00000328 pc=00020340..00020370
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000388 0000001c 00000064 FDE cie=00000328 pc=00020370..000203b0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000003a8 0000000c 00000000 CIE
+ Version: 1
+ Augmentation: ""
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000003b8 00000014 00000014 FDE cie=000003a8 pc=000203b0..000203c0
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame4.d b/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame4.d
new file mode 100644
index 0000000..effb457
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame4.d
@@ -0,0 +1,208 @@
+#name: MIPS eh-frame 4
+#source: eh-frame1.s
+#source: eh-frame1.s
+#as: -EB -mips3 -mabi=eabi --defsym alignment=2 --defsym fill=0 --defsym foo=0x50607080
+#readelf: -wf
+#ld: -EB -Teh-frame1.ld
+#
+# This test is for the semi-official ILP32 variation of EABI64.
+#
+
+Contents of the \.eh_frame section:
+
+00000000 0000000c 00000000 CIE
+ Version: 1
+ Augmentation: ""
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000010 0000000c 00000014 FDE cie=00000000 pc=00020000..00020010
+
+00000020 0000000c 00000024 FDE cie=00000000 pc=00020010..00020030
+
+# basic2 removed
+00000030 0000000c 00000034 FDE cie=00000000 pc=00020030..00020060
+
+# basic3 removed
+00000040 0000000c 00000044 FDE cie=00000000 pc=00020060..000200a0
+
+# basic4 removed
+00000050 0000000c 00000054 FDE cie=00000000 pc=000200a0..000200f0
+
+00000060 00000014 00000000 CIE
+ Version: 1
+ Augmentation: "zP"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 00 50 60 70 80
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000078 00000010 0000001c FDE cie=00000060 pc=000200f0..00020100
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+0000008c 00000010 00000030 FDE cie=00000060 pc=00020100..00020120
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000000a0 00000014 00000000 CIE
+ Version: 1
+ Augmentation: "zP"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 50 00 00 00 50 60 70 80
+
+
+000000b8 00000010 0000001c FDE cie=000000a0 pc=00020120..00020130
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000000cc 00000010 00000030 FDE cie=000000a0 pc=00020130..00020150
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000000e0 00000014 00000000 CIE
+ Version: 1
+ Augmentation: "zPR"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 00 50 60 70 80 00
+
+ DW_CFA_nop
+
+000000f8 00000010 0000001c FDE cie=000000e0 pc=00020150..00020160
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+# FDE for .discard removed
+# zPR2 removed
+0000010c 00000010 00000030 FDE cie=000000e0 pc=00020160..00020190
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000120 00000010 00000044 FDE cie=000000e0 pc=00020190..000201d0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000134 0000000c 00000000 CIE
+ Version: 1
+ Augmentation: ""
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000144 0000000c 00000014 FDE cie=00000134 pc=000201d0..000201e0
+
+# basic1 removed, followed by repeat of above
+00000154 0000000c 00000024 FDE cie=00000134 pc=000201e0..000201f0
+
+00000164 0000000c 00000034 FDE cie=00000134 pc=000201f0..00020210
+
+00000174 0000000c 00000044 FDE cie=00000134 pc=00020210..00020240
+
+00000184 0000000c 00000054 FDE cie=00000134 pc=00020240..00020280
+
+00000194 0000000c 00000064 FDE cie=00000134 pc=00020280..000202d0
+
+000001a4 00000014 00000000 CIE
+ Version: 1
+ Augmentation: "zP"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 00 50 60 70 80
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001bc 00000010 0000001c FDE cie=000001a4 pc=000202d0..000202e0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001d0 00000010 00000030 FDE cie=000001a4 pc=000202e0..00020300
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001e4 00000014 00000000 CIE
+ Version: 1
+ Augmentation: "zP"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 50 00 00 00 50 60 70 80
+
+
+000001fc 00000010 0000001c FDE cie=000001e4 pc=00020300..00020310
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000210 00000010 00000030 FDE cie=000001e4 pc=00020310..00020330
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000224 00000014 00000000 CIE
+ Version: 1
+ Augmentation: "zPR"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 00 50 60 70 80 00
+
+ DW_CFA_nop
+
+0000023c 00000010 0000001c FDE cie=00000224 pc=00020330..00020340
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+# FDE for .discard removed
+# zPR2 removed
+00000250 00000010 00000030 FDE cie=00000224 pc=00020340..00020370
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000264 00000010 00000044 FDE cie=00000224 pc=00020370..000203b0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000278 0000000c 00000000 CIE
+ Version: 1
+ Augmentation: ""
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000288 0000000c 00000014 FDE cie=00000278 pc=000203b0..000203c0
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame5.d b/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame5.d
new file mode 100644
index 0000000..f9304e2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame5.d
@@ -0,0 +1,279 @@
+
+Relocation section '.rel.dyn' at offset 0x101f0 contains 8 entries:
+ Offset Info Type Sym.Value Sym. Name
+00000000 .* R_MIPS_NONE *
+#
+# The order of the relocations doesn't really matter, but they must
+# be some permutation of the list below.
+#
+00010008 .* R_MIPS_REL32 00000000 pers3
+00000c7b .* R_MIPS_REL32 00000828 global_pers
+00000d7f .* R_MIPS_REL32 00000000 extern_indirect_ptr
+00010000 .* R_MIPS_REL32 00000000 pers1
+00010004 .* R_MIPS_REL32 00000000 pers2
+00000caf .* R_MIPS_REL32 00000000 extern_pers
+00000d4b .* R_MIPS_REL32 00010008 global_indirect_ptr
+Contents of the \.eh_frame section:
+
+# Text addresses
+# --------------
+# f1 = 0x800
+# f2 = 0x804
+# f3 = 0x808
+# f4 = 0x80c
+# f5 = 0x810
+# f6 = 0x814
+# f7 = 0x818
+# f8 = 0x81c
+# local_pers = 0x820
+# hidden_pers = 0x824
+# global_pers = 0x828
+
+# Data addresses
+# --------------
+# local_indirect_ptr = 0x10000
+# hidden_indirect_ptr = 0x10004
+# global_indirect_ptr = 0x10008
+# LSDA = 0x1000c
+
+#-------------------------------------------------------------------------
+# f1
+#-------------------------------------------------------------------------
+00000000 00000018 00000000 CIE
+ Version: 1
+ Augmentation: "zPLR"
+ Code alignment factor: 1
+ Data alignment factor: -4
+ Return address column: 31
+#
+# 0xc12: DW_EH_PE_pcrel | DW_EH_PE_sdata4 for personality encoding
+# 0xc13: 0x820 - 0xc13 (local_pers - .)
+# 0xc17: DW_EH_PE_pcrel | DW_EH_PE_sdata4 for LDSA encoding
+# 0xc18: DW_EH_PE_pcrel | DW_EH_PE_sdata4 for FDE encoding
+#
+ Augmentation data: 1b ff ff fc 0d 1b 1b
+
+ DW_CFA_def_cfa_register: r29
+ DW_CFA_nop
+
+0000001c 00000014 00000020 FDE cie=00000000 pc=00000800..00000804
+#
+# 0xc2d: 0x1000c - 0xc2d (LDSA - .)
+#
+ Augmentation data: 00 00 f3 df
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+#-------------------------------------------------------------------------
+# f2
+#-------------------------------------------------------------------------
+00000034 00000018 00000000 CIE
+ Version: 1
+ Augmentation: "zPLR"
+ Code alignment factor: 1
+ Data alignment factor: -4
+ Return address column: 31
+#
+# 0xc46: DW_EH_PE_pcrel | DW_EH_PE_sdata4 for personality encoding
+# 0xc47: 0x824 - 0xc47 (hidden_pers - .)
+# 0xc4d: DW_EH_PE_pcrel | DW_EH_PE_sdata4 for LDSA encoding
+# 0xc4e: DW_EH_PE_pcrel | DW_EH_PE_sdata4 for FDE encoding
+#
+ Augmentation data: 1b ff ff fb dd 1b 1b
+
+ DW_CFA_def_cfa_register: r29
+ DW_CFA_nop
+
+00000050 00000014 00000020 FDE cie=00000034 pc=00000804..00000808
+#
+# 0xc61: 0x1000c - 0xc61 (LDSA - .)
+#
+ Augmentation data: 00 00 f3 ab
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+#-------------------------------------------------------------------------
+# f3
+#-------------------------------------------------------------------------
+00000068 00000018 00000000 CIE
+ Version: 1
+ Augmentation: "zPLR"
+ Code alignment factor: 1
+ Data alignment factor: -4
+ Return address column: 31
+#
+# 0xc7a: DW_EH_PE_absptr for personality encoding
+# 0xc7b: global_pers (reloc above)
+# 0xc7f: DW_EH_PE_pcrel | DW_EH_PE_sdata4 for LDSA encoding
+# 0xc80: DW_EH_PE_pcrel | DW_EH_PE_sdata4 for FDE encoding
+#
+ Augmentation data: 00 00 00 00 00 1b 1b
+
+ DW_CFA_def_cfa_register: r29
+ DW_CFA_nop
+
+00000084 00000014 00000020 FDE cie=00000068 pc=00000808..0000080c
+#
+# 0xc95: 0x1000c - 0xc95 (LDSA - .)
+#
+ Augmentation data: 00 00 f3 77
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+#-------------------------------------------------------------------------
+# f4
+#-------------------------------------------------------------------------
+0000009c 00000018 00000000 CIE
+ Version: 1
+ Augmentation: "zPLR"
+ Code alignment factor: 1
+ Data alignment factor: -4
+ Return address column: 31
+#
+# 0xcae: DW_EH_PE_absptr for personality encoding
+# 0xcaf: extern_pers (reloc above)
+# 0xcb3: DW_EH_PE_pcrel | DW_EH_PE_sdata4 for LDSA encoding
+# 0xcb4: DW_EH_PE_pcrel | DW_EH_PE_sdata4 for FDE encoding
+#
+ Augmentation data: 00 00 00 00 00 1b 1b
+
+ DW_CFA_def_cfa_register: r29
+ DW_CFA_nop
+
+000000b8 00000014 00000020 FDE cie=0000009c pc=0000080c..00000810
+#
+# 0xcc9: 0x1000c - 0xcc9 (LDSA - .)
+#
+ Augmentation data: 00 00 f3 43
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+#-------------------------------------------------------------------------
+# f5
+#-------------------------------------------------------------------------
+000000d0 00000018 00000000 CIE
+ Version: 1
+ Augmentation: "zPLR"
+ Code alignment factor: 1
+ Data alignment factor: -4
+ Return address column: 31
+#
+# 0xce2: DW_EH_PE_indirect | DW_EH_PE_pcrel | DW_EH_PE_sdata4
+# for personality encoding
+# 0xce3: 0x10000 - 0xce3 (local_indirect_ptr - .)
+# 0xce7: DW_EH_PE_pcrel | DW_EH_PE_sdata4 for LDSA encoding
+# 0xce8: DW_EH_PE_pcrel | DW_EH_PE_sdata4 for FDE encoding
+#
+ Augmentation data: 9b 00 00 f3 1d 1b 1b
+
+ DW_CFA_def_cfa_register: r29
+ DW_CFA_nop
+
+000000ec 00000014 00000020 FDE cie=000000d0 pc=00000810..00000814
+#
+# 0xcfd: 0x1000c - 0xcfd (LDSA - .)
+#
+ Augmentation data: 00 00 f3 0f
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+#-------------------------------------------------------------------------
+# f6
+#-------------------------------------------------------------------------
+00000104 00000018 00000000 CIE
+ Version: 1
+ Augmentation: "zPLR"
+ Code alignment factor: 1
+ Data alignment factor: -4
+ Return address column: 31
+#
+# 0xd16: DW_EH_PE_pcrel | DW_EH_PE_sdata4 for personality encoding
+# 0xd17: 0x10004 - 0xd17 (hidden_indirect_ptr - .)
+# 0xd1d: DW_EH_PE_pcrel | DW_EH_PE_sdata4 for LDSA encoding
+# 0xd1e: DW_EH_PE_pcrel | DW_EH_PE_sdata4 for FDE encoding
+#
+ Augmentation data: 9b 00 00 f2 ed 1b 1b
+
+ DW_CFA_def_cfa_register: r29
+ DW_CFA_nop
+
+00000120 00000014 00000020 FDE cie=00000104 pc=00000814..00000818
+#
+# 0xd31: 0x1000c - 0xd31 (LDSA - .)
+#
+ Augmentation data: 00 00 f2 db
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+#-------------------------------------------------------------------------
+# f7
+#-------------------------------------------------------------------------
+00000138 00000018 00000000 CIE
+ Version: 1
+ Augmentation: "zPLR"
+ Code alignment factor: 1
+ Data alignment factor: -4
+ Return address column: 31
+#
+# 0xd4a: DW_EH_PE_indirect | DW_EH_PE_absptr for personality encoding
+# 0xd4b: global_indirect_ptr (reloc above)
+# 0xd4f: DW_EH_PE_pcrel | DW_EH_PE_sdata4 for LDSA encoding
+# 0xd50: DW_EH_PE_pcrel | DW_EH_PE_sdata4 for FDE encoding
+#
+ Augmentation data: 80 00 00 00 00 1b 1b
+
+ DW_CFA_def_cfa_register: r29
+ DW_CFA_nop
+
+00000154 00000014 00000020 FDE cie=00000138 pc=00000818..0000081c
+#
+# 0xd65: 0x1000c - 0xd65 (LDSA - .)
+#
+ Augmentation data: 00 00 f2 a7
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+#-------------------------------------------------------------------------
+# f8
+#-------------------------------------------------------------------------
+0000016c 00000018 00000000 CIE
+ Version: 1
+ Augmentation: "zPLR"
+ Code alignment factor: 1
+ Data alignment factor: -4
+ Return address column: 31
+#
+# 0xd7e: DW_EH_PE_indirect | DW_EH_PE_absptr for personality encoding
+# 0xd7f: extern_indirect_ptr (reloc above)
+# 0xd83: DW_EH_PE_pcrel | DW_EH_PE_sdata4 for LDSA encoding
+# 0xd84: DW_EH_PE_pcrel | DW_EH_PE_sdata4 for FDE encoding
+#
+ Augmentation data: 80 00 00 00 00 1b 1b
+
+ DW_CFA_def_cfa_register: r29
+ DW_CFA_nop
+
+00000188 00000014 00000020 FDE cie=0000016c pc=0000081c..00000820
+#
+# 0xd99: 0x1000c - 0xd99 (LDSA - .)
+#
+ Augmentation data: 00 00 f2 73
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame5.ld b/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame5.ld
new file mode 100644
index 0000000..f00cb27
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame5.ld
@@ -0,0 +1,18 @@
+SECTIONS
+{
+ . = 0;
+ .reginfo : { *(.reginfo) }
+ .dynamic : { *(.dynamic) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ .rel.dyn : { *(.rel.dyn) }
+ . = 0x800;
+ .text : { *(.text) }
+ . = 0xc00;
+ .eh_frame : { *(.eh_frame) }
+ . = 0x10000;
+ .data : { *(.data) }
+ . = 0x10400;
+ _gp = . + 0x7ff0;
+ .got : { *(.got) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame5.s b/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame5.s
new file mode 100644
index 0000000..741a021
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/eh-frame5.s
@@ -0,0 +1,107 @@
+ .cfi_startproc
+ .cfi_personality 0x0,local_pers
+ .cfi_lsda 0x0,LSDA
+ .ent f1
+f1:
+ nop
+ .end f1
+ .cfi_endproc
+
+ .cfi_startproc
+ .cfi_personality 0x0,hidden_pers
+ .cfi_lsda 0x0,LSDA
+ .ent f2
+f2:
+ nop
+ .end f2
+ .cfi_endproc
+
+ .cfi_startproc
+ .cfi_personality 0x0,global_pers
+ .cfi_lsda 0x0,LSDA
+ .ent f3
+f3:
+ nop
+ .end f3
+ .cfi_endproc
+
+ .cfi_startproc
+ .cfi_personality 0x0,extern_pers
+ .cfi_lsda 0x0,LSDA
+ .ent f4
+f4:
+ nop
+ .end f4
+ .cfi_endproc
+
+ .cfi_startproc
+ .cfi_personality 0x80,local_indirect_ptr
+ .cfi_lsda 0x0,LSDA
+ .ent f5
+f5:
+ nop
+ .end f5
+ .cfi_endproc
+
+ .cfi_startproc
+ .cfi_personality 0x80,hidden_indirect_ptr
+ .cfi_lsda 0x0,LSDA
+ .ent f6
+f6:
+ nop
+ .end f6
+ .cfi_endproc
+
+ .cfi_startproc
+ .cfi_personality 0x80,global_indirect_ptr
+ .cfi_lsda 0x0,LSDA
+ .ent f7
+f7:
+ nop
+ .end f7
+ .cfi_endproc
+
+ .cfi_startproc
+ .cfi_personality 0x80,extern_indirect_ptr
+ .cfi_lsda 0x0,LSDA
+ .ent f8
+f8:
+ nop
+ .end f8
+ .cfi_endproc
+
+
+ .ent local_pers
+local_pers:
+ nop
+ .end local_pers
+
+ .globl hidden_pers
+ .hidden hidden_pers
+ .ent hidden_pers
+hidden_pers:
+ nop
+ .end hidden_pers
+
+ .globl global_pers
+ .ent global_pers
+global_pers:
+ nop
+ .end global_pers
+
+ .section .data,"aw",@progbits
+
+local_indirect_ptr:
+ .4byte pers1
+
+ .globl hidden_indirect_ptr
+ .hidden hidden_indirect_ptr
+hidden_indirect_ptr:
+ .4byte pers2
+
+ .globl global_indirect_ptr
+global_indirect_ptr:
+ .4byte pers3
+
+LSDA:
+ .4byte 0
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/elf-rel-got-n32.d b/binutils-2.21/ld/testsuite/ld-mips-elf/elf-rel-got-n32.d
new file mode 100644
index 0000000..a209aa5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/elf-rel-got-n32.d
@@ -0,0 +1,311 @@
+#name: MIPS ELF got reloc n32
+#as: -EB -n32 -KPIC
+#source: ../../../gas/testsuite/gas/mips/elf-rel-got-n32.s
+#ld: -melf32btsmipn32
+#objdump: -D --show-raw-insn
+
+.*: +file format elf32-n.*mips.*
+
+Disassembly of section \.reginfo:
+
+10000098 <\.reginfo>:
+10000098: 92020022 .*
+ \.\.\.
+100000ac: 100185a0 .*
+
+Disassembly of section \.text:
+
+100000b0 <fn>:
+100000b0: 8f858018 lw a1,-32744\(gp\)
+100000b4: 8f858018 lw a1,-32744\(gp\)
+100000b8: 24a5000c addiu a1,a1,12
+100000bc: 8f858018 lw a1,-32744\(gp\)
+100000c0: 3c010001 lui at,0x1
+100000c4: 3421e240 ori at,at,0xe240
+100000c8: 00a12821 addu a1,a1,at
+100000cc: 8f858018 lw a1,-32744\(gp\)
+100000d0: 00b12821 addu a1,a1,s1
+100000d4: 8f858018 lw a1,-32744\(gp\)
+100000d8: 24a5000c addiu a1,a1,12
+100000dc: 00b12821 addu a1,a1,s1
+100000e0: 8f858018 lw a1,-32744\(gp\)
+100000e4: 3c010001 lui at,0x1
+100000e8: 3421e240 ori at,at,0xe240
+100000ec: 00a12821 addu a1,a1,at
+100000f0: 00b12821 addu a1,a1,s1
+100000f4: 8f85801c lw a1,-32740\(gp\)
+100000f8: 8ca504fc lw a1,1276\(a1\)
+100000fc: 8f85801c lw a1,-32740\(gp\)
+10000100: 8ca50508 lw a1,1288\(a1\)
+10000104: 8f85801c lw a1,-32740\(gp\)
+10000108: 00b12821 addu a1,a1,s1
+1000010c: 8ca504fc lw a1,1276\(a1\)
+10000110: 8f85801c lw a1,-32740\(gp\)
+10000114: 00b12821 addu a1,a1,s1
+10000118: 8ca50508 lw a1,1288\(a1\)
+1000011c: 8f81801c lw at,-32740\(gp\)
+10000120: 00250821 addu at,at,a1
+10000124: 8c25051e lw a1,1310\(at\)
+10000128: 8f81801c lw at,-32740\(gp\)
+1000012c: 00250821 addu at,at,a1
+10000130: ac250534 sw a1,1332\(at\)
+10000134: 8f818018 lw at,-32744\(gp\)
+10000138: 88250000 lwl a1,0\(at\)
+1000013c: 98250003 lwr a1,3\(at\)
+10000140: 8f818018 lw at,-32744\(gp\)
+10000144: 2421000c addiu at,at,12
+10000148: 88250000 lwl a1,0\(at\)
+1000014c: 98250003 lwr a1,3\(at\)
+10000150: 8f818018 lw at,-32744\(gp\)
+10000154: 00310821 addu at,at,s1
+10000158: 88250000 lwl a1,0\(at\)
+1000015c: 98250003 lwr a1,3\(at\)
+10000160: 8f818018 lw at,-32744\(gp\)
+10000164: 2421000c addiu at,at,12
+10000168: 00310821 addu at,at,s1
+1000016c: 88250000 lwl a1,0\(at\)
+10000170: 98250003 lwr a1,3\(at\)
+10000174: 8f818018 lw at,-32744\(gp\)
+10000178: 24210022 addiu at,at,34
+1000017c: 00250821 addu at,at,a1
+10000180: 88250000 lwl a1,0\(at\)
+10000184: 98250003 lwr a1,3\(at\)
+10000188: 8f818018 lw at,-32744\(gp\)
+1000018c: 24210038 addiu at,at,56
+10000190: 00250821 addu at,at,a1
+10000194: a8250000 swl a1,0\(at\)
+10000198: b8250003 swr a1,3\(at\)
+1000019c: 8f858018 lw a1,-32744\(gp\)
+100001a0: 8f858020 lw a1,-32736\(gp\)
+100001a4: 8f858024 lw a1,-32732\(gp\)
+100001a8: 8f858018 lw a1,-32744\(gp\)
+100001ac: 00b12821 addu a1,a1,s1
+100001b0: 8f858020 lw a1,-32736\(gp\)
+100001b4: 00b12821 addu a1,a1,s1
+100001b8: 8f858024 lw a1,-32732\(gp\)
+100001bc: 00b12821 addu a1,a1,s1
+100001c0: 8f85801c lw a1,-32740\(gp\)
+100001c4: 8ca504fc lw a1,1276\(a1\)
+100001c8: 8f85801c lw a1,-32740\(gp\)
+100001cc: 8ca50508 lw a1,1288\(a1\)
+100001d0: 8f85801c lw a1,-32740\(gp\)
+100001d4: 00b12821 addu a1,a1,s1
+100001d8: 8ca504fc lw a1,1276\(a1\)
+100001dc: 8f85801c lw a1,-32740\(gp\)
+100001e0: 00b12821 addu a1,a1,s1
+100001e4: 8ca50508 lw a1,1288\(a1\)
+100001e8: 8f81801c lw at,-32740\(gp\)
+100001ec: 00250821 addu at,at,a1
+100001f0: 8c25051e lw a1,1310\(at\)
+100001f4: 8f81801c lw at,-32740\(gp\)
+100001f8: 00250821 addu at,at,a1
+100001fc: ac250534 sw a1,1332\(at\)
+10000200: 8f818018 lw at,-32744\(gp\)
+10000204: 88250000 lwl a1,0\(at\)
+10000208: 98250003 lwr a1,3\(at\)
+1000020c: 8f818020 lw at,-32736\(gp\)
+10000210: 88250000 lwl a1,0\(at\)
+10000214: 98250003 lwr a1,3\(at\)
+10000218: 8f818018 lw at,-32744\(gp\)
+1000021c: 00310821 addu at,at,s1
+10000220: 88250000 lwl a1,0\(at\)
+10000224: 98250003 lwr a1,3\(at\)
+10000228: 8f818020 lw at,-32736\(gp\)
+1000022c: 00310821 addu at,at,s1
+10000230: 88250000 lwl a1,0\(at\)
+10000234: 98250003 lwr a1,3\(at\)
+10000238: 8f818028 lw at,-32728\(gp\)
+1000023c: 00250821 addu at,at,a1
+10000240: 88250000 lwl a1,0\(at\)
+10000244: 98250003 lwr a1,3\(at\)
+10000248: 8f81802c lw at,-32724\(gp\)
+1000024c: 00250821 addu at,at,a1
+10000250: a8250000 swl a1,0\(at\)
+10000254: b8250003 swr a1,3\(at\)
+10000258: 8f858030 lw a1,-32720\(gp\)
+1000025c: 8f858030 lw a1,-32720\(gp\)
+10000260: 8f998030 lw t9,-32720\(gp\)
+10000264: 8f998030 lw t9,-32720\(gp\)
+10000268: 8f998030 lw t9,-32720\(gp\)
+1000026c: 0411ff90 bal 100000b0 <fn>
+10000270: 00000000 nop
+10000274: 8f998030 lw t9,-32720\(gp\)
+10000278: 0411ff8d bal 100000b0 <fn>
+1000027c: 00000000 nop
+10000280: 8f858034 lw a1,-32716\(gp\)
+10000284: 8f858034 lw a1,-32716\(gp\)
+10000288: 24a5000c addiu a1,a1,12
+1000028c: 8f858034 lw a1,-32716\(gp\)
+10000290: 3c010001 lui at,0x1
+10000294: 3421e240 ori at,at,0xe240
+10000298: 00a12821 addu a1,a1,at
+1000029c: 8f858034 lw a1,-32716\(gp\)
+100002a0: 00b12821 addu a1,a1,s1
+100002a4: 8f858034 lw a1,-32716\(gp\)
+100002a8: 24a5000c addiu a1,a1,12
+100002ac: 00b12821 addu a1,a1,s1
+100002b0: 8f858034 lw a1,-32716\(gp\)
+100002b4: 3c010001 lui at,0x1
+100002b8: 3421e240 ori at,at,0xe240
+100002bc: 00a12821 addu a1,a1,at
+100002c0: 00b12821 addu a1,a1,s1
+100002c4: 8f85801c lw a1,-32740\(gp\)
+100002c8: 8ca50574 lw a1,1396\(a1\)
+100002cc: 8f85801c lw a1,-32740\(gp\)
+100002d0: 8ca50580 lw a1,1408\(a1\)
+100002d4: 8f85801c lw a1,-32740\(gp\)
+100002d8: 00b12821 addu a1,a1,s1
+100002dc: 8ca50574 lw a1,1396\(a1\)
+100002e0: 8f85801c lw a1,-32740\(gp\)
+100002e4: 00b12821 addu a1,a1,s1
+100002e8: 8ca50580 lw a1,1408\(a1\)
+100002ec: 8f81801c lw at,-32740\(gp\)
+100002f0: 00250821 addu at,at,a1
+100002f4: 8c250596 lw a1,1430\(at\)
+100002f8: 8f81801c lw at,-32740\(gp\)
+100002fc: 00250821 addu at,at,a1
+10000300: ac2505ac sw a1,1452\(at\)
+10000304: 8f818034 lw at,-32716\(gp\)
+10000308: 88250000 lwl a1,0\(at\)
+1000030c: 98250003 lwr a1,3\(at\)
+10000310: 8f818034 lw at,-32716\(gp\)
+10000314: 2421000c addiu at,at,12
+10000318: 88250000 lwl a1,0\(at\)
+1000031c: 98250003 lwr a1,3\(at\)
+10000320: 8f818034 lw at,-32716\(gp\)
+10000324: 00310821 addu at,at,s1
+10000328: 88250000 lwl a1,0\(at\)
+1000032c: 98250003 lwr a1,3\(at\)
+10000330: 8f818034 lw at,-32716\(gp\)
+10000334: 2421000c addiu at,at,12
+10000338: 00310821 addu at,at,s1
+1000033c: 88250000 lwl a1,0\(at\)
+10000340: 98250003 lwr a1,3\(at\)
+10000344: 8f818034 lw at,-32716\(gp\)
+10000348: 24210022 addiu at,at,34
+1000034c: 00250821 addu at,at,a1
+10000350: 88250000 lwl a1,0\(at\)
+10000354: 98250003 lwr a1,3\(at\)
+10000358: 8f818034 lw at,-32716\(gp\)
+1000035c: 24210038 addiu at,at,56
+10000360: 00250821 addu at,at,a1
+10000364: a8250000 swl a1,0\(at\)
+10000368: b8250003 swr a1,3\(at\)
+1000036c: 8f858034 lw a1,-32716\(gp\)
+10000370: 8f858038 lw a1,-32712\(gp\)
+10000374: 8f85803c lw a1,-32708\(gp\)
+10000378: 8f858034 lw a1,-32716\(gp\)
+1000037c: 00b12821 addu a1,a1,s1
+10000380: 8f858038 lw a1,-32712\(gp\)
+10000384: 00b12821 addu a1,a1,s1
+10000388: 8f85803c lw a1,-32708\(gp\)
+1000038c: 00b12821 addu a1,a1,s1
+10000390: 8f85801c lw a1,-32740\(gp\)
+10000394: 8ca50574 lw a1,1396\(a1\)
+10000398: 8f85801c lw a1,-32740\(gp\)
+1000039c: 8ca50580 lw a1,1408\(a1\)
+100003a0: 8f85801c lw a1,-32740\(gp\)
+100003a4: 00b12821 addu a1,a1,s1
+100003a8: 8ca50574 lw a1,1396\(a1\)
+100003ac: 8f85801c lw a1,-32740\(gp\)
+100003b0: 00b12821 addu a1,a1,s1
+100003b4: 8ca50580 lw a1,1408\(a1\)
+100003b8: 8f81801c lw at,-32740\(gp\)
+100003bc: 00250821 addu at,at,a1
+100003c0: 8c250596 lw a1,1430\(at\)
+100003c4: 8f81801c lw at,-32740\(gp\)
+100003c8: 00250821 addu at,at,a1
+100003cc: ac2505ac sw a1,1452\(at\)
+100003d0: 8f818034 lw at,-32716\(gp\)
+100003d4: 88250000 lwl a1,0\(at\)
+100003d8: 98250003 lwr a1,3\(at\)
+100003dc: 8f818038 lw at,-32712\(gp\)
+100003e0: 88250000 lwl a1,0\(at\)
+100003e4: 98250003 lwr a1,3\(at\)
+100003e8: 8f818034 lw at,-32716\(gp\)
+100003ec: 00310821 addu at,at,s1
+100003f0: 88250000 lwl a1,0\(at\)
+100003f4: 98250003 lwr a1,3\(at\)
+100003f8: 8f818038 lw at,-32712\(gp\)
+100003fc: 00310821 addu at,at,s1
+10000400: 88250000 lwl a1,0\(at\)
+10000404: 98250003 lwr a1,3\(at\)
+10000408: 8f818040 lw at,-32704\(gp\)
+1000040c: 00250821 addu at,at,a1
+10000410: 88250000 lwl a1,0\(at\)
+10000414: 98250003 lwr a1,3\(at\)
+10000418: 8f818044 lw at,-32700\(gp\)
+1000041c: 00250821 addu at,at,a1
+10000420: a8250000 swl a1,0\(at\)
+10000424: b8250003 swr a1,3\(at\)
+10000428: 8f858048 lw a1,-32696\(gp\)
+1000042c: 8f858048 lw a1,-32696\(gp\)
+10000430: 8f998048 lw t9,-32696\(gp\)
+10000434: 8f998048 lw t9,-32696\(gp\)
+10000438: 8f998048 lw t9,-32696\(gp\)
+1000043c: 0411001d bal 100004b4 <fn2>
+10000440: 00000000 nop
+10000444: 8f998048 lw t9,-32696\(gp\)
+10000448: 0411001a bal 100004b4 <fn2>
+1000044c: 00000000 nop
+10000450: 1000ff17 b 100000b0 <fn>
+10000454: 8f858018 lw a1,-32744\(gp\)
+10000458: 8f85801c lw a1,-32740\(gp\)
+1000045c: 10000015 b 100004b4 <fn2>
+10000460: 8ca50574 lw a1,1396\(a1\)
+10000464: 1000ff12 b 100000b0 <fn>
+10000468: 8f858018 lw a1,-32744\(gp\)
+1000046c: 8f858038 lw a1,-32712\(gp\)
+10000470: 10000010 b 100004b4 <fn2>
+10000474: 00000000 nop
+10000478: 8f858024 lw a1,-32732\(gp\)
+1000047c: 1000ff0c b 100000b0 <fn>
+10000480: 00000000 nop
+10000484: 8f85801c lw a1,-32740\(gp\)
+10000488: 1000000a b 100004b4 <fn2>
+1000048c: 8ca50574 lw a1,1396\(a1\)
+10000490: 8f85801c lw a1,-32740\(gp\)
+10000494: 1000ff06 b 100000b0 <fn>
+10000498: 8ca50508 lw a1,1288\(a1\)
+1000049c: 8f81801c lw at,-32740\(gp\)
+100004a0: 00250821 addu at,at,a1
+100004a4: 10000003 b 100004b4 <fn2>
+100004a8: 8c250596 lw a1,1430\(at\)
+ \.\.\.
+
+100004b4 <fn2>:
+ \.\.\.
+Disassembly of section \.data:
+
+100104c0 <_fdata>:
+ \.\.\.
+
+100104fc <dg1>:
+ \.\.\.
+
+10010538 <sp2>:
+ \.\.\.
+
+10010574 <dg2>:
+ \.\.\.
+Disassembly of section \.got:
+
+100105b0 <_GLOBAL_OFFSET_TABLE_>:
+100105b0: 00000000 .*
+100105b4: 80000000 .*
+100105b8: 100104fc .*
+100105bc: 10010000 .*
+100105c0: 10010508 .*
+100105c4: 1002e73c .*
+100105c8: 1001051e .*
+100105cc: 10010534 .*
+100105d0: 100000b0 .*
+100105d4: 10010574 .*
+100105d8: 10010580 .*
+100105dc: 1002e7b4 .*
+100105e0: 10010596 .*
+100105e4: 100105ac .*
+100105e8: 100004b4 .*
+100105ec: 00000000 .*
+ \.\.\.
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/elf-rel-got-n64-linux.d b/binutils-2.21/ld/testsuite/ld-mips-elf/elf-rel-got-n64-linux.d
new file mode 100644
index 0000000..b5a7ab8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/elf-rel-got-n64-linux.d
@@ -0,0 +1,326 @@
+#name: MIPS ELF got reloc n64
+#as: -EB -64 -KPIC
+#source: ../../../gas/testsuite/gas/mips/elf-rel-got-n64.s
+#ld: -melf64btsmip
+#objdump: -D --show-raw-insn
+
+.*: +file format elf64-.*mips.*
+
+Disassembly of section \.MIPS\.options:
+
+00000001200000b0 <\.MIPS\.options>:
+ 1200000b0: 01280000 .*
+ 1200000b4: 00000000 .*
+ 1200000b8: 92020022 .*
+ \.\.\.
+ 1200000d0: 00000001 .*
+ 1200000d4: 200185d0 .*
+Disassembly of section \.text:
+
+00000001200000e0 <fn>:
+ 1200000e0: df858020 ld a1,-32736\(gp\)
+ 1200000e4: df858020 ld a1,-32736\(gp\)
+ 1200000e8: 64a5000c daddiu a1,a1,12
+ 1200000ec: df858020 ld a1,-32736\(gp\)
+ 1200000f0: 3c010001 lui at,0x1
+ 1200000f4: 3421e240 ori at,at,0xe240
+ 1200000f8: 00a1282d daddu a1,a1,at
+ 1200000fc: df858020 ld a1,-32736\(gp\)
+ 120000100: 00b1282d daddu a1,a1,s1
+ 120000104: df858020 ld a1,-32736\(gp\)
+ 120000108: 64a5000c daddiu a1,a1,12
+ 12000010c: 00b1282d daddu a1,a1,s1
+ 120000110: df858020 ld a1,-32736\(gp\)
+ 120000114: 3c010001 lui at,0x1
+ 120000118: 3421e240 ori at,at,0xe240
+ 12000011c: 00a1282d daddu a1,a1,at
+ 120000120: 00b1282d daddu a1,a1,s1
+ 120000124: df858028 ld a1,-32728\(gp\)
+ 120000128: dca5052c ld a1,1324\(a1\)
+ 12000012c: df858028 ld a1,-32728\(gp\)
+ 120000130: dca50538 ld a1,1336\(a1\)
+ 120000134: df858028 ld a1,-32728\(gp\)
+ 120000138: 00b1282d daddu a1,a1,s1
+ 12000013c: dca5052c ld a1,1324\(a1\)
+ 120000140: df858028 ld a1,-32728\(gp\)
+ 120000144: 00b1282d daddu a1,a1,s1
+ 120000148: dca50538 ld a1,1336\(a1\)
+ 12000014c: df818028 ld at,-32728\(gp\)
+ 120000150: 0025082d daddu at,at,a1
+ 120000154: dc25054e ld a1,1358\(at\)
+ 120000158: df818028 ld at,-32728\(gp\)
+ 12000015c: 0025082d daddu at,at,a1
+ 120000160: fc250564 sd a1,1380\(at\)
+ 120000164: df818020 ld at,-32736\(gp\)
+ 120000168: 88250000 lwl a1,0\(at\)
+ 12000016c: 98250003 lwr a1,3\(at\)
+ 120000170: df818020 ld at,-32736\(gp\)
+ 120000174: 6421000c daddiu at,at,12
+ 120000178: 88250000 lwl a1,0\(at\)
+ 12000017c: 98250003 lwr a1,3\(at\)
+ 120000180: df818020 ld at,-32736\(gp\)
+ 120000184: 0031082d daddu at,at,s1
+ 120000188: 88250000 lwl a1,0\(at\)
+ 12000018c: 98250003 lwr a1,3\(at\)
+ 120000190: df818020 ld at,-32736\(gp\)
+ 120000194: 6421000c daddiu at,at,12
+ 120000198: 0031082d daddu at,at,s1
+ 12000019c: 88250000 lwl a1,0\(at\)
+ 1200001a0: 98250003 lwr a1,3\(at\)
+ 1200001a4: df818020 ld at,-32736\(gp\)
+ 1200001a8: 64210022 daddiu at,at,34
+ 1200001ac: 0025082d daddu at,at,a1
+ 1200001b0: 88250000 lwl a1,0\(at\)
+ 1200001b4: 98250003 lwr a1,3\(at\)
+ 1200001b8: df818020 ld at,-32736\(gp\)
+ 1200001bc: 64210038 daddiu at,at,56
+ 1200001c0: 0025082d daddu at,at,a1
+ 1200001c4: a8250000 swl a1,0\(at\)
+ 1200001c8: b8250003 swr a1,3\(at\)
+ 1200001cc: df858020 ld a1,-32736\(gp\)
+ 1200001d0: df858030 ld a1,-32720\(gp\)
+ 1200001d4: df858038 ld a1,-32712\(gp\)
+ 1200001d8: df858020 ld a1,-32736\(gp\)
+ 1200001dc: 00b1282d daddu a1,a1,s1
+ 1200001e0: df858030 ld a1,-32720\(gp\)
+ 1200001e4: 00b1282d daddu a1,a1,s1
+ 1200001e8: df858038 ld a1,-32712\(gp\)
+ 1200001ec: 00b1282d daddu a1,a1,s1
+ 1200001f0: df858028 ld a1,-32728\(gp\)
+ 1200001f4: dca5052c ld a1,1324\(a1\)
+ 1200001f8: df858028 ld a1,-32728\(gp\)
+ 1200001fc: dca50538 ld a1,1336\(a1\)
+ 120000200: df858028 ld a1,-32728\(gp\)
+ 120000204: 00b1282d daddu a1,a1,s1
+ 120000208: dca5052c ld a1,1324\(a1\)
+ 12000020c: df858028 ld a1,-32728\(gp\)
+ 120000210: 00b1282d daddu a1,a1,s1
+ 120000214: dca50538 ld a1,1336\(a1\)
+ 120000218: df818028 ld at,-32728\(gp\)
+ 12000021c: 0025082d daddu at,at,a1
+ 120000220: dc25054e ld a1,1358\(at\)
+ 120000224: df818028 ld at,-32728\(gp\)
+ 120000228: 0025082d daddu at,at,a1
+ 12000022c: fc250564 sd a1,1380\(at\)
+ 120000230: df818020 ld at,-32736\(gp\)
+ 120000234: 88250000 lwl a1,0\(at\)
+ 120000238: 98250003 lwr a1,3\(at\)
+ 12000023c: df818030 ld at,-32720\(gp\)
+ 120000240: 88250000 lwl a1,0\(at\)
+ 120000244: 98250003 lwr a1,3\(at\)
+ 120000248: df818020 ld at,-32736\(gp\)
+ 12000024c: 0031082d daddu at,at,s1
+ 120000250: 88250000 lwl a1,0\(at\)
+ 120000254: 98250003 lwr a1,3\(at\)
+ 120000258: df818030 ld at,-32720\(gp\)
+ 12000025c: 0031082d daddu at,at,s1
+ 120000260: 88250000 lwl a1,0\(at\)
+ 120000264: 98250003 lwr a1,3\(at\)
+ 120000268: df818040 ld at,-32704\(gp\)
+ 12000026c: 0025082d daddu at,at,a1
+ 120000270: 88250000 lwl a1,0\(at\)
+ 120000274: 98250003 lwr a1,3\(at\)
+ 120000278: df818048 ld at,-32696\(gp\)
+ 12000027c: 0025082d daddu at,at,a1
+ 120000280: a8250000 swl a1,0\(at\)
+ 120000284: b8250003 swr a1,3\(at\)
+ 120000288: df858050 ld a1,-32688\(gp\)
+ 12000028c: df858050 ld a1,-32688\(gp\)
+ 120000290: df998050 ld t9,-32688\(gp\)
+ 120000294: df998050 ld t9,-32688\(gp\)
+ 120000298: df998050 ld t9,-32688\(gp\)
+ 12000029c: 0411ff90 bal 1200000e0 <fn>
+ 1200002a0: 00000000 nop
+ 1200002a4: df998050 ld t9,-32688\(gp\)
+ 1200002a8: 0411ff8d bal 1200000e0 <fn>
+ 1200002ac: 00000000 nop
+ 1200002b0: df858058 ld a1,-32680\(gp\)
+ 1200002b4: df858058 ld a1,-32680\(gp\)
+ 1200002b8: 64a5000c daddiu a1,a1,12
+ 1200002bc: df858058 ld a1,-32680\(gp\)
+ 1200002c0: 3c010001 lui at,0x1
+ 1200002c4: 3421e240 ori at,at,0xe240
+ 1200002c8: 00a1282d daddu a1,a1,at
+ 1200002cc: df858058 ld a1,-32680\(gp\)
+ 1200002d0: 00b1282d daddu a1,a1,s1
+ 1200002d4: df858058 ld a1,-32680\(gp\)
+ 1200002d8: 64a5000c daddiu a1,a1,12
+ 1200002dc: 00b1282d daddu a1,a1,s1
+ 1200002e0: df858058 ld a1,-32680\(gp\)
+ 1200002e4: 3c010001 lui at,0x1
+ 1200002e8: 3421e240 ori at,at,0xe240
+ 1200002ec: 00a1282d daddu a1,a1,at
+ 1200002f0: 00b1282d daddu a1,a1,s1
+ 1200002f4: df858028 ld a1,-32728\(gp\)
+ 1200002f8: dca505a4 ld a1,1444\(a1\)
+ 1200002fc: df858028 ld a1,-32728\(gp\)
+ 120000300: dca505b0 ld a1,1456\(a1\)
+ 120000304: df858028 ld a1,-32728\(gp\)
+ 120000308: 00b1282d daddu a1,a1,s1
+ 12000030c: dca505a4 ld a1,1444\(a1\)
+ 120000310: df858028 ld a1,-32728\(gp\)
+ 120000314: 00b1282d daddu a1,a1,s1
+ 120000318: dca505b0 ld a1,1456\(a1\)
+ 12000031c: df818028 ld at,-32728\(gp\)
+ 120000320: 0025082d daddu at,at,a1
+ 120000324: dc2505c6 ld a1,1478\(at\)
+ 120000328: df818028 ld at,-32728\(gp\)
+ 12000032c: 0025082d daddu at,at,a1
+ 120000330: fc2505dc sd a1,1500\(at\)
+ 120000334: df818058 ld at,-32680\(gp\)
+ 120000338: 88250000 lwl a1,0\(at\)
+ 12000033c: 98250003 lwr a1,3\(at\)
+ 120000340: df818058 ld at,-32680\(gp\)
+ 120000344: 6421000c daddiu at,at,12
+ 120000348: 88250000 lwl a1,0\(at\)
+ 12000034c: 98250003 lwr a1,3\(at\)
+ 120000350: df818058 ld at,-32680\(gp\)
+ 120000354: 0031082d daddu at,at,s1
+ 120000358: 88250000 lwl a1,0\(at\)
+ 12000035c: 98250003 lwr a1,3\(at\)
+ 120000360: df818058 ld at,-32680\(gp\)
+ 120000364: 6421000c daddiu at,at,12
+ 120000368: 0031082d daddu at,at,s1
+ 12000036c: 88250000 lwl a1,0\(at\)
+ 120000370: 98250003 lwr a1,3\(at\)
+ 120000374: df818058 ld at,-32680\(gp\)
+ 120000378: 64210022 daddiu at,at,34
+ 12000037c: 0025082d daddu at,at,a1
+ 120000380: 88250000 lwl a1,0\(at\)
+ 120000384: 98250003 lwr a1,3\(at\)
+ 120000388: df818058 ld at,-32680\(gp\)
+ 12000038c: 64210038 daddiu at,at,56
+ 120000390: 0025082d daddu at,at,a1
+ 120000394: a8250000 swl a1,0\(at\)
+ 120000398: b8250003 swr a1,3\(at\)
+ 12000039c: df858058 ld a1,-32680\(gp\)
+ 1200003a0: df858060 ld a1,-32672\(gp\)
+ 1200003a4: df858068 ld a1,-32664\(gp\)
+ 1200003a8: df858058 ld a1,-32680\(gp\)
+ 1200003ac: 00b1282d daddu a1,a1,s1
+ 1200003b0: df858060 ld a1,-32672\(gp\)
+ 1200003b4: 00b1282d daddu a1,a1,s1
+ 1200003b8: df858068 ld a1,-32664\(gp\)
+ 1200003bc: 00b1282d daddu a1,a1,s1
+ 1200003c0: df858028 ld a1,-32728\(gp\)
+ 1200003c4: dca505a4 ld a1,1444\(a1\)
+ 1200003c8: df858028 ld a1,-32728\(gp\)
+ 1200003cc: dca505b0 ld a1,1456\(a1\)
+ 1200003d0: df858028 ld a1,-32728\(gp\)
+ 1200003d4: 00b1282d daddu a1,a1,s1
+ 1200003d8: dca505a4 ld a1,1444\(a1\)
+ 1200003dc: df858028 ld a1,-32728\(gp\)
+ 1200003e0: 00b1282d daddu a1,a1,s1
+ 1200003e4: dca505b0 ld a1,1456\(a1\)
+ 1200003e8: df818028 ld at,-32728\(gp\)
+ 1200003ec: 0025082d daddu at,at,a1
+ 1200003f0: dc2505c6 ld a1,1478\(at\)
+ 1200003f4: df818028 ld at,-32728\(gp\)
+ 1200003f8: 0025082d daddu at,at,a1
+ 1200003fc: fc2505dc sd a1,1500\(at\)
+ 120000400: df818058 ld at,-32680\(gp\)
+ 120000404: 88250000 lwl a1,0\(at\)
+ 120000408: 98250003 lwr a1,3\(at\)
+ 12000040c: df818060 ld at,-32672\(gp\)
+ 120000410: 88250000 lwl a1,0\(at\)
+ 120000414: 98250003 lwr a1,3\(at\)
+ 120000418: df818058 ld at,-32680\(gp\)
+ 12000041c: 0031082d daddu at,at,s1
+ 120000420: 88250000 lwl a1,0\(at\)
+ 120000424: 98250003 lwr a1,3\(at\)
+ 120000428: df818060 ld at,-32672\(gp\)
+ 12000042c: 0031082d daddu at,at,s1
+ 120000430: 88250000 lwl a1,0\(at\)
+ 120000434: 98250003 lwr a1,3\(at\)
+ 120000438: df818070 ld at,-32656\(gp\)
+ 12000043c: 0025082d daddu at,at,a1
+ 120000440: 88250000 lwl a1,0\(at\)
+ 120000444: 98250003 lwr a1,3\(at\)
+ 120000448: df818078 ld at,-32648\(gp\)
+ 12000044c: 0025082d daddu at,at,a1
+ 120000450: a8250000 swl a1,0\(at\)
+ 120000454: b8250003 swr a1,3\(at\)
+ 120000458: df858080 ld a1,-32640\(gp\)
+ 12000045c: df858080 ld a1,-32640\(gp\)
+ 120000460: df998080 ld t9,-32640\(gp\)
+ 120000464: df998080 ld t9,-32640\(gp\)
+ 120000468: df998080 ld t9,-32640\(gp\)
+ 12000046c: 0411001d bal 1200004e4 <fn2>
+ 120000470: 00000000 nop
+ 120000474: df998080 ld t9,-32640\(gp\)
+ 120000478: 0411001a bal 1200004e4 <fn2>
+ 12000047c: 00000000 nop
+ 120000480: 1000ff17 b 1200000e0 <fn>
+ 120000484: df858020 ld a1,-32736\(gp\)
+ 120000488: df858028 ld a1,-32728\(gp\)
+ 12000048c: 10000015 b 1200004e4 <fn2>
+ 120000490: dca505a4 ld a1,1444\(a1\)
+ 120000494: 1000ff12 b 1200000e0 <fn>
+ 120000498: df858020 ld a1,-32736\(gp\)
+ 12000049c: df858060 ld a1,-32672\(gp\)
+ 1200004a0: 10000010 b 1200004e4 <fn2>
+ 1200004a4: 00000000 nop
+ 1200004a8: df858038 ld a1,-32712\(gp\)
+ 1200004ac: 1000ff0c b 1200000e0 <fn>
+ 1200004b0: 00000000 nop
+ 1200004b4: df858028 ld a1,-32728\(gp\)
+ 1200004b8: 1000000a b 1200004e4 <fn2>
+ 1200004bc: dca505a4 ld a1,1444\(a1\)
+ 1200004c0: df858028 ld a1,-32728\(gp\)
+ 1200004c4: 1000ff06 b 1200000e0 <fn>
+ 1200004c8: dca50538 ld a1,1336\(a1\)
+ 1200004cc: df818028 ld at,-32728\(gp\)
+ 1200004d0: 0025082d daddu at,at,a1
+ 1200004d4: 10000003 b 1200004e4 <fn2>
+ 1200004d8: dc2505c6 ld a1,1478\(at\)
+ \.\.\.
+
+00000001200004e4 <fn2>:
+ \.\.\.
+Disassembly of section \.data:
+
+00000001200104f0 <_fdata>:
+ \.\.\.
+
+000000012001052c <dg1>:
+ \.\.\.
+
+0000000120010568 <sp2>:
+ \.\.\.
+
+00000001200105a4 <dg2>:
+ \.\.\.
+Disassembly of section \.got:
+
+00000001200105e0 <_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+ 1200105e8: 80000000 .*
+ 1200105ec: 00000000 .*
+ 1200105f0: 00000001 .*
+ 1200105f4: 2001052c .*
+ 1200105f8: 00000001 .*
+ 1200105fc: 20010000 .*
+ 120010600: 00000001 .*
+ 120010604: 20010538 .*
+ 120010608: 00000001 .*
+ 12001060c: 2002e76c .*
+ 120010610: 00000001 .*
+ 120010614: 2001054e .*
+ 120010618: 00000001 .*
+ 12001061c: 20010564 .*
+ 120010620: 00000001 .*
+ 120010624: 200000e0 .*
+ 120010628: 00000001 .*
+ 12001062c: 200105a4 .*
+ 120010630: 00000001 .*
+ 120010634: 200105b0 .*
+ 120010638: 00000001 .*
+ 12001063c: 2002e7e4 .*
+ 120010640: 00000001 .*
+ 120010644: 200105c6 .*
+ 120010648: 00000001 .*
+ 12001064c: 200105dc .*
+ 120010650: 00000001 .*
+ 120010654: 200004e4 .*
+ \.\.\.
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/elf-rel-got-n64.d b/binutils-2.21/ld/testsuite/ld-mips-elf/elf-rel-got-n64.d
new file mode 100644
index 0000000..8ebfdf8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/elf-rel-got-n64.d
@@ -0,0 +1,332 @@
+#name: MIPS ELF got reloc n64
+#as: -EB -64 -KPIC
+#source: ../../../gas/testsuite/gas/mips/elf-rel-got-n64.s
+#ld: -melf64btsmip
+#objdump: -D --show-raw-insn
+
+.*: +file format elf64-.*mips.*
+
+Disassembly of section \.MIPS\.options:
+
+00000000100000b0 <\.MIPS\.options>:
+ 100000b0: 01280000 .*
+ 100000b4: 00000000 .*
+ 100000b8: 92020022 .*
+ \.\.\.
+ 100000d4: 101085d0 .*
+Disassembly of section \.text:
+
+00000000100000e0 <fn>:
+ 100000e0: df8580b8 ld a1,-32584\(gp\)
+ 100000e4: df8580b8 ld a1,-32584\(gp\)
+ 100000e8: 64a5000c daddiu a1,a1,12
+ 100000ec: df8580b8 ld a1,-32584\(gp\)
+ 100000f0: 3c010002 lui at,0x2
+ 100000f4: 6421e240 daddiu at,at,-7616
+ 100000f8: 00a1282d daddu a1,a1,at
+ 100000fc: df8580b8 ld a1,-32584\(gp\)
+ 10000100: 00b1282d daddu a1,a1,s1
+ 10000104: df8580b8 ld a1,-32584\(gp\)
+ 10000108: 64a5000c daddiu a1,a1,12
+ 1000010c: 00b1282d daddu a1,a1,s1
+ 10000110: df8580b8 ld a1,-32584\(gp\)
+ 10000114: 3c010002 lui at,0x2
+ 10000118: 6421e240 daddiu at,at,-7616
+ 1000011c: 00a1282d daddu a1,a1,at
+ 10000120: 00b1282d daddu a1,a1,s1
+ 10000124: df8580b8 ld a1,-32584\(gp\)
+ 10000128: dca50000 ld a1,0\(a1\)
+ 1000012c: df8580b8 ld a1,-32584\(gp\)
+ 10000130: dca5000c ld a1,12\(a1\)
+ 10000134: df8580b8 ld a1,-32584\(gp\)
+ 10000138: 00b1282d daddu a1,a1,s1
+ 1000013c: dca50000 ld a1,0\(a1\)
+ 10000140: df8580b8 ld a1,-32584\(gp\)
+ 10000144: 00b1282d daddu a1,a1,s1
+ 10000148: dca5000c ld a1,12\(a1\)
+ 1000014c: df8180b8 ld at,-32584\(gp\)
+ 10000150: 0025082d daddu at,at,a1
+ 10000154: dc250022 ld a1,34\(at\)
+ 10000158: df8180b8 ld at,-32584\(gp\)
+ 1000015c: 0025082d daddu at,at,a1
+ 10000160: fc250038 sd a1,56\(at\)
+ 10000164: df8180b8 ld at,-32584\(gp\)
+ 10000168: 88250000 lwl a1,0\(at\)
+ 1000016c: 98250003 lwr a1,3\(at\)
+ 10000170: df8180b8 ld at,-32584\(gp\)
+ 10000174: 6421000c daddiu at,at,12
+ 10000178: 88250000 lwl a1,0\(at\)
+ 1000017c: 98250003 lwr a1,3\(at\)
+ 10000180: df8180b8 ld at,-32584\(gp\)
+ 10000184: 0031082d daddu at,at,s1
+ 10000188: 88250000 lwl a1,0\(at\)
+ 1000018c: 98250003 lwr a1,3\(at\)
+ 10000190: df8180b8 ld at,-32584\(gp\)
+ 10000194: 6421000c daddiu at,at,12
+ 10000198: 0031082d daddu at,at,s1
+ 1000019c: 88250000 lwl a1,0\(at\)
+ 100001a0: 98250003 lwr a1,3\(at\)
+ 100001a4: df8180b8 ld at,-32584\(gp\)
+ 100001a8: 64210022 daddiu at,at,34
+ 100001ac: 0025082d daddu at,at,a1
+ 100001b0: 88250000 lwl a1,0\(at\)
+ 100001b4: 98250003 lwr a1,3\(at\)
+ 100001b8: df8180b8 ld at,-32584\(gp\)
+ 100001bc: 64210038 daddiu at,at,56
+ 100001c0: 0025082d daddu at,at,a1
+ 100001c4: a8250000 swl a1,0\(at\)
+ 100001c8: b8250003 swr a1,3\(at\)
+ 100001cc: df858020 ld a1,-32736\(gp\)
+ 100001d0: df858028 ld a1,-32728\(gp\)
+ 100001d4: df858030 ld a1,-32720\(gp\)
+ 100001d8: df858020 ld a1,-32736\(gp\)
+ 100001dc: 00b1282d daddu a1,a1,s1
+ 100001e0: df858028 ld a1,-32728\(gp\)
+ 100001e4: 00b1282d daddu a1,a1,s1
+ 100001e8: df858030 ld a1,-32720\(gp\)
+ 100001ec: 00b1282d daddu a1,a1,s1
+ 100001f0: df858038 ld a1,-32712\(gp\)
+ 100001f4: dca5052c ld a1,1324\(a1\)
+ 100001f8: df858038 ld a1,-32712\(gp\)
+ 100001fc: dca50538 ld a1,1336\(a1\)
+ 10000200: df858038 ld a1,-32712\(gp\)
+ 10000204: 00b1282d daddu a1,a1,s1
+ 10000208: dca5052c ld a1,1324\(a1\)
+ 1000020c: df858038 ld a1,-32712\(gp\)
+ 10000210: 00b1282d daddu a1,a1,s1
+ 10000214: dca50538 ld a1,1336\(a1\)
+ 10000218: df818038 ld at,-32712\(gp\)
+ 1000021c: 0025082d daddu at,at,a1
+ 10000220: dc25054e ld a1,1358\(at\)
+ 10000224: df818038 ld at,-32712\(gp\)
+ 10000228: 0025082d daddu at,at,a1
+ 1000022c: fc250564 sd a1,1380\(at\)
+ 10000230: df818020 ld at,-32736\(gp\)
+ 10000234: 88250000 lwl a1,0\(at\)
+ 10000238: 98250003 lwr a1,3\(at\)
+ 1000023c: df818028 ld at,-32728\(gp\)
+ 10000240: 88250000 lwl a1,0\(at\)
+ 10000244: 98250003 lwr a1,3\(at\)
+ 10000248: df818020 ld at,-32736\(gp\)
+ 1000024c: 0031082d daddu at,at,s1
+ 10000250: 88250000 lwl a1,0\(at\)
+ 10000254: 98250003 lwr a1,3\(at\)
+ 10000258: df818028 ld at,-32728\(gp\)
+ 1000025c: 0031082d daddu at,at,s1
+ 10000260: 88250000 lwl a1,0\(at\)
+ 10000264: 98250003 lwr a1,3\(at\)
+ 10000268: df818040 ld at,-32704\(gp\)
+ 1000026c: 0025082d daddu at,at,a1
+ 10000270: 88250000 lwl a1,0\(at\)
+ 10000274: 98250003 lwr a1,3\(at\)
+ 10000278: df818048 ld at,-32696\(gp\)
+ 1000027c: 0025082d daddu at,at,a1
+ 10000280: a8250000 swl a1,0\(at\)
+ 10000284: b8250003 swr a1,3\(at\)
+ 10000288: df8580a8 ld a1,-32600\(gp\)
+ 1000028c: df858050 ld a1,-32688\(gp\)
+ 10000290: df9980a8 ld t9,-32600\(gp\)
+ 10000294: df998050 ld t9,-32688\(gp\)
+ 10000298: df9980a8 ld t9,-32600\(gp\)
+ 1000029c: 0320f809 jalr t9
+ 100002a0: 00000000 nop
+ 100002a4: df998050 ld t9,-32688\(gp\)
+ 100002a8: 0320f809 jalr t9
+ 100002ac: 00000000 nop
+ 100002b0: df8580c0 ld a1,-32576\(gp\)
+ 100002b4: df8580c0 ld a1,-32576\(gp\)
+ 100002b8: 64a5000c daddiu a1,a1,12
+ 100002bc: df8580c0 ld a1,-32576\(gp\)
+ 100002c0: 3c010002 lui at,0x2
+ 100002c4: 6421e240 daddiu at,at,-7616
+ 100002c8: 00a1282d daddu a1,a1,at
+ 100002cc: df8580c0 ld a1,-32576\(gp\)
+ 100002d0: 00b1282d daddu a1,a1,s1
+ 100002d4: df8580c0 ld a1,-32576\(gp\)
+ 100002d8: 64a5000c daddiu a1,a1,12
+ 100002dc: 00b1282d daddu a1,a1,s1
+ 100002e0: df8580c0 ld a1,-32576\(gp\)
+ 100002e4: 3c010002 lui at,0x2
+ 100002e8: 6421e240 daddiu at,at,-7616
+ 100002ec: 00a1282d daddu a1,a1,at
+ 100002f0: 00b1282d daddu a1,a1,s1
+ 100002f4: df8580c0 ld a1,-32576\(gp\)
+ 100002f8: dca50000 ld a1,0\(a1\)
+ 100002fc: df8580c0 ld a1,-32576\(gp\)
+ 10000300: dca5000c ld a1,12\(a1\)
+ 10000304: df8580c0 ld a1,-32576\(gp\)
+ 10000308: 00b1282d daddu a1,a1,s1
+ 1000030c: dca50000 ld a1,0\(a1\)
+ 10000310: df8580c0 ld a1,-32576\(gp\)
+ 10000314: 00b1282d daddu a1,a1,s1
+ 10000318: dca5000c ld a1,12\(a1\)
+ 1000031c: df8180c0 ld at,-32576\(gp\)
+ 10000320: 0025082d daddu at,at,a1
+ 10000324: dc250022 ld a1,34\(at\)
+ 10000328: df8180c0 ld at,-32576\(gp\)
+ 1000032c: 0025082d daddu at,at,a1
+ 10000330: fc250038 sd a1,56\(at\)
+ 10000334: df8180c0 ld at,-32576\(gp\)
+ 10000338: 88250000 lwl a1,0\(at\)
+ 1000033c: 98250003 lwr a1,3\(at\)
+ 10000340: df8180c0 ld at,-32576\(gp\)
+ 10000344: 6421000c daddiu at,at,12
+ 10000348: 88250000 lwl a1,0\(at\)
+ 1000034c: 98250003 lwr a1,3\(at\)
+ 10000350: df8180c0 ld at,-32576\(gp\)
+ 10000354: 0031082d daddu at,at,s1
+ 10000358: 88250000 lwl a1,0\(at\)
+ 1000035c: 98250003 lwr a1,3\(at\)
+ 10000360: df8180c0 ld at,-32576\(gp\)
+ 10000364: 6421000c daddiu at,at,12
+ 10000368: 0031082d daddu at,at,s1
+ 1000036c: 88250000 lwl a1,0\(at\)
+ 10000370: 98250003 lwr a1,3\(at\)
+ 10000374: df8180c0 ld at,-32576\(gp\)
+ 10000378: 64210022 daddiu at,at,34
+ 1000037c: 0025082d daddu at,at,a1
+ 10000380: 88250000 lwl a1,0\(at\)
+ 10000384: 98250003 lwr a1,3\(at\)
+ 10000388: df8180c0 ld at,-32576\(gp\)
+ 1000038c: 64210038 daddiu at,at,56
+ 10000390: 0025082d daddu at,at,a1
+ 10000394: a8250000 swl a1,0\(at\)
+ 10000398: b8250003 swr a1,3\(at\)
+ 1000039c: df858058 ld a1,-32680\(gp\)
+ 100003a0: df858060 ld a1,-32672\(gp\)
+ 100003a4: df858068 ld a1,-32664\(gp\)
+ 100003a8: df858058 ld a1,-32680\(gp\)
+ 100003ac: 00b1282d daddu a1,a1,s1
+ 100003b0: df858060 ld a1,-32672\(gp\)
+ 100003b4: 00b1282d daddu a1,a1,s1
+ 100003b8: df858068 ld a1,-32664\(gp\)
+ 100003bc: 00b1282d daddu a1,a1,s1
+ 100003c0: df858038 ld a1,-32712\(gp\)
+ 100003c4: dca505a4 ld a1,1444\(a1\)
+ 100003c8: df858038 ld a1,-32712\(gp\)
+ 100003cc: dca505b0 ld a1,1456\(a1\)
+ 100003d0: df858038 ld a1,-32712\(gp\)
+ 100003d4: 00b1282d daddu a1,a1,s1
+ 100003d8: dca505a4 ld a1,1444\(a1\)
+ 100003dc: df858038 ld a1,-32712\(gp\)
+ 100003e0: 00b1282d daddu a1,a1,s1
+ 100003e4: dca505b0 ld a1,1456\(a1\)
+ 100003e8: df818038 ld at,-32712\(gp\)
+ 100003ec: 0025082d daddu at,at,a1
+ 100003f0: dc2505c6 ld a1,1478\(at\)
+ 100003f4: df818038 ld at,-32712\(gp\)
+ 100003f8: 0025082d daddu at,at,a1
+ 100003fc: fc2505dc sd a1,1500\(at\)
+ 10000400: df818058 ld at,-32680\(gp\)
+ 10000404: 88250000 lwl a1,0\(at\)
+ 10000408: 98250003 lwr a1,3\(at\)
+ 1000040c: df818060 ld at,-32672\(gp\)
+ 10000410: 88250000 lwl a1,0\(at\)
+ 10000414: 98250003 lwr a1,3\(at\)
+ 10000418: df818058 ld at,-32680\(gp\)
+ 1000041c: 0031082d daddu at,at,s1
+ 10000420: 88250000 lwl a1,0\(at\)
+ 10000424: 98250003 lwr a1,3\(at\)
+ 10000428: df818060 ld at,-32672\(gp\)
+ 1000042c: 0031082d daddu at,at,s1
+ 10000430: 88250000 lwl a1,0\(at\)
+ 10000434: 98250003 lwr a1,3\(at\)
+ 10000438: df818070 ld at,-32656\(gp\)
+ 1000043c: 0025082d daddu at,at,a1
+ 10000440: 88250000 lwl a1,0\(at\)
+ 10000444: 98250003 lwr a1,3\(at\)
+ 10000448: df818078 ld at,-32648\(gp\)
+ 1000044c: 0025082d daddu at,at,a1
+ 10000450: a8250000 swl a1,0\(at\)
+ 10000454: b8250003 swr a1,3\(at\)
+ 10000458: df8580b0 ld a1,-32592\(gp\)
+ 1000045c: df858080 ld a1,-32640\(gp\)
+ 10000460: df9980b0 ld t9,-32592\(gp\)
+ 10000464: df998080 ld t9,-32640\(gp\)
+ 10000468: df9980b0 ld t9,-32592\(gp\)
+ 1000046c: 0320f809 jalr t9
+ 10000470: 00000000 nop
+ 10000474: df998080 ld t9,-32640\(gp\)
+ 10000478: 0320f809 jalr t9
+ 1000047c: 00000000 nop
+ 10000480: 1000ff17 b 100000e0 <fn>
+ 10000484: df8580b8 ld a1,-32584\(gp\)
+ 10000488: df8580c0 ld a1,-32576\(gp\)
+ 1000048c: 10000015 b 100004e4 <fn2>
+ 10000490: dca50000 ld a1,0\(a1\)
+ 10000494: 1000ff12 b 100000e0 <fn>
+ 10000498: df858020 ld a1,-32736\(gp\)
+ 1000049c: df858060 ld a1,-32672\(gp\)
+ 100004a0: 10000010 b 100004e4 <fn2>
+ 100004a4: 00000000 nop
+ 100004a8: df858030 ld a1,-32720\(gp\)
+ 100004ac: 1000ff0c b 100000e0 <fn>
+ 100004b0: 00000000 nop
+ 100004b4: df858038 ld a1,-32712\(gp\)
+ 100004b8: 1000000a b 100004e4 <fn2>
+ 100004bc: dca505a4 ld a1,1444\(a1\)
+ 100004c0: df858038 ld a1,-32712\(gp\)
+ 100004c4: 1000ff06 b 100000e0 <fn>
+ 100004c8: dca50538 ld a1,1336\(a1\)
+ 100004cc: df818038 ld at,-32712\(gp\)
+ 100004d0: 0025082d daddu at,at,a1
+ 100004d4: 10000003 b 100004e4 <fn2>
+ 100004d8: dc2505c6 ld a1,1478\(at\)
+ \.\.\.
+
+00000000100004e4 <fn2>:
+ \.\.\.
+Disassembly of section \.data:
+
+00000000101004f0 <_fdata>:
+ \.\.\.
+
+000000001010052c <dg1>:
+ \.\.\.
+
+0000000010100568 <sp2>:
+ \.\.\.
+
+00000000101005a4 <dg2>:
+ \.\.\.
+Disassembly of section \.got:
+
+00000000101005e0 <_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+ 101005e8: 80000000 .*
+ 101005ec: 00000000 .*
+ 101005f0: 00000000 .*
+ 101005f4: 1010052c .*
+ 101005f8: 00000000 .*
+ 101005fc: 10100538 .*
+ 10100600: 00000000 .*
+ 10100604: 1011e76c .*
+ 10100608: 00000000 .*
+ 1010060c: 10100000 .*
+ 10100610: 00000000 .*
+ 10100614: 1010054e .*
+ 10100618: 00000000 .*
+ 1010061c: 10100564 .*
+ 10100620: 00000000 .*
+ 10100624: 100000e0 .*
+ 10100628: 00000000 .*
+ 1010062c: 101005a4 .*
+ 10100630: 00000000 .*
+ 10100634: 101005b0 .*
+ 10100638: 00000000 .*
+ 1010063c: 1011e7e4 .*
+ 10100640: 00000000 .*
+ 10100644: 101005c6 .*
+ 10100648: 00000000 .*
+ 1010064c: 101005dc .*
+ 10100650: 00000000 .*
+ 10100654: 100004e4 .*
+ 10100658: 00000000 .*
+ \.\.\.
+ 1010067c: 100000e0 .*
+ 10100680: 00000000 .*
+ 10100684: 100004e4 .*
+ 10100688: 00000000 .*
+ 1010068c: 1010052c .*
+ 10100690: 00000000 .*
+ 10100694: 101005a4 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/elf-rel-xgot-n32.d b/binutils-2.21/ld/testsuite/ld-mips-elf/elf-rel-xgot-n32.d
new file mode 100644
index 0000000..d1980b9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/elf-rel-xgot-n32.d
@@ -0,0 +1,431 @@
+#name: MIPS ELF xgot reloc n32
+#as: -EB -n32 -KPIC -xgot
+#source: ../../../gas/testsuite/gas/mips/elf-rel-got-n32.s
+#ld: -melf32btsmipn32
+#objdump: -D --show-raw-insn
+
+.*: +file format elf32-n.*mips.*
+
+Disassembly of section \.reginfo:
+
+10000098 <\.reginfo>:
+10000098: 92020022 .*
+ \.\.\.
+100000ac: 10018790 .*
+
+Disassembly of section \.text:
+
+100000b0 <fn>:
+100000b0: 3c050000 lui a1,0x0
+100000b4: 00bc2821 addu a1,a1,gp
+100000b8: 8ca58018 lw a1,-32744\(a1\)
+100000bc: 3c050000 lui a1,0x0
+100000c0: 00bc2821 addu a1,a1,gp
+100000c4: 8ca58018 lw a1,-32744\(a1\)
+100000c8: 24a5000c addiu a1,a1,12
+100000cc: 3c050000 lui a1,0x0
+100000d0: 00bc2821 addu a1,a1,gp
+100000d4: 8ca58018 lw a1,-32744\(a1\)
+100000d8: 3c010001 lui at,0x1
+100000dc: 3421e240 ori at,at,0xe240
+100000e0: 00a12821 addu a1,a1,at
+100000e4: 3c050000 lui a1,0x0
+100000e8: 00bc2821 addu a1,a1,gp
+100000ec: 8ca58018 lw a1,-32744\(a1\)
+100000f0: 00b12821 addu a1,a1,s1
+100000f4: 3c050000 lui a1,0x0
+100000f8: 00bc2821 addu a1,a1,gp
+100000fc: 8ca58018 lw a1,-32744\(a1\)
+10000100: 24a5000c addiu a1,a1,12
+10000104: 00b12821 addu a1,a1,s1
+10000108: 3c050000 lui a1,0x0
+1000010c: 00bc2821 addu a1,a1,gp
+10000110: 8ca58018 lw a1,-32744\(a1\)
+10000114: 3c010001 lui at,0x1
+10000118: 3421e240 ori at,at,0xe240
+1000011c: 00a12821 addu a1,a1,at
+10000120: 00b12821 addu a1,a1,s1
+10000124: 3c050000 lui a1,0x0
+10000128: 00bc2821 addu a1,a1,gp
+1000012c: 8ca58018 lw a1,-32744\(a1\)
+10000130: 8ca50000 lw a1,0\(a1\)
+10000134: 3c050000 lui a1,0x0
+10000138: 00bc2821 addu a1,a1,gp
+1000013c: 8ca58018 lw a1,-32744\(a1\)
+10000140: 8ca5000c lw a1,12\(a1\)
+10000144: 3c050000 lui a1,0x0
+10000148: 00bc2821 addu a1,a1,gp
+1000014c: 8ca58018 lw a1,-32744\(a1\)
+10000150: 00b12821 addu a1,a1,s1
+10000154: 8ca50000 lw a1,0\(a1\)
+10000158: 3c050000 lui a1,0x0
+1000015c: 00bc2821 addu a1,a1,gp
+10000160: 8ca58018 lw a1,-32744\(a1\)
+10000164: 00b12821 addu a1,a1,s1
+10000168: 8ca5000c lw a1,12\(a1\)
+1000016c: 3c010000 lui at,0x0
+10000170: 003c0821 addu at,at,gp
+10000174: 8c218018 lw at,-32744\(at\)
+10000178: 00250821 addu at,at,a1
+1000017c: 8c250022 lw a1,34\(at\)
+10000180: 3c010000 lui at,0x0
+10000184: 003c0821 addu at,at,gp
+10000188: 8c218018 lw at,-32744\(at\)
+1000018c: 00250821 addu at,at,a1
+10000190: ac250038 sw a1,56\(at\)
+10000194: 3c010000 lui at,0x0
+10000198: 003c0821 addu at,at,gp
+1000019c: 8c218018 lw at,-32744\(at\)
+100001a0: 88250000 lwl a1,0\(at\)
+100001a4: 98250003 lwr a1,3\(at\)
+100001a8: 3c010000 lui at,0x0
+100001ac: 003c0821 addu at,at,gp
+100001b0: 8c218018 lw at,-32744\(at\)
+100001b4: 2421000c addiu at,at,12
+100001b8: 88250000 lwl a1,0\(at\)
+100001bc: 98250003 lwr a1,3\(at\)
+100001c0: 3c010000 lui at,0x0
+100001c4: 003c0821 addu at,at,gp
+100001c8: 8c218018 lw at,-32744\(at\)
+100001cc: 00310821 addu at,at,s1
+100001d0: 88250000 lwl a1,0\(at\)
+100001d4: 98250003 lwr a1,3\(at\)
+100001d8: 3c010000 lui at,0x0
+100001dc: 003c0821 addu at,at,gp
+100001e0: 8c218018 lw at,-32744\(at\)
+100001e4: 2421000c addiu at,at,12
+100001e8: 00310821 addu at,at,s1
+100001ec: 88250000 lwl a1,0\(at\)
+100001f0: 98250003 lwr a1,3\(at\)
+100001f4: 3c010000 lui at,0x0
+100001f8: 003c0821 addu at,at,gp
+100001fc: 8c218018 lw at,-32744\(at\)
+10000200: 24210022 addiu at,at,34
+10000204: 00250821 addu at,at,a1
+10000208: 88250000 lwl a1,0\(at\)
+1000020c: 98250003 lwr a1,3\(at\)
+10000210: 3c010000 lui at,0x0
+10000214: 003c0821 addu at,at,gp
+10000218: 8c218018 lw at,-32744\(at\)
+1000021c: 24210038 addiu at,at,56
+10000220: 00250821 addu at,at,a1
+10000224: a8250000 swl a1,0\(at\)
+10000228: b8250003 swr a1,3\(at\)
+1000022c: 8f85801c lw a1,-32740\(gp\)
+10000230: 24a506ec addiu a1,a1,1772
+10000234: 8f85801c lw a1,-32740\(gp\)
+10000238: 24a506f8 addiu a1,a1,1784
+1000023c: 8f858020 lw a1,-32736\(gp\)
+10000240: 24a5e92c addiu a1,a1,-5844
+10000244: 8f85801c lw a1,-32740\(gp\)
+10000248: 24a506ec addiu a1,a1,1772
+1000024c: 00b12821 addu a1,a1,s1
+10000250: 8f85801c lw a1,-32740\(gp\)
+10000254: 24a506f8 addiu a1,a1,1784
+10000258: 00b12821 addu a1,a1,s1
+1000025c: 8f858020 lw a1,-32736\(gp\)
+10000260: 24a5e92c addiu a1,a1,-5844
+10000264: 00b12821 addu a1,a1,s1
+10000268: 8f85801c lw a1,-32740\(gp\)
+1000026c: 8ca506ec lw a1,1772\(a1\)
+10000270: 8f85801c lw a1,-32740\(gp\)
+10000274: 8ca506f8 lw a1,1784\(a1\)
+10000278: 8f85801c lw a1,-32740\(gp\)
+1000027c: 00b12821 addu a1,a1,s1
+10000280: 8ca506ec lw a1,1772\(a1\)
+10000284: 8f85801c lw a1,-32740\(gp\)
+10000288: 00b12821 addu a1,a1,s1
+1000028c: 8ca506f8 lw a1,1784\(a1\)
+10000290: 8f81801c lw at,-32740\(gp\)
+10000294: 00250821 addu at,at,a1
+10000298: 8c25070e lw a1,1806\(at\)
+1000029c: 8f81801c lw at,-32740\(gp\)
+100002a0: 00250821 addu at,at,a1
+100002a4: ac250724 sw a1,1828\(at\)
+100002a8: 8f81801c lw at,-32740\(gp\)
+100002ac: 242106ec addiu at,at,1772
+100002b0: 88250000 lwl a1,0\(at\)
+100002b4: 98250003 lwr a1,3\(at\)
+100002b8: 8f81801c lw at,-32740\(gp\)
+100002bc: 242106f8 addiu at,at,1784
+100002c0: 88250000 lwl a1,0\(at\)
+100002c4: 98250003 lwr a1,3\(at\)
+100002c8: 8f81801c lw at,-32740\(gp\)
+100002cc: 242106ec addiu at,at,1772
+100002d0: 00310821 addu at,at,s1
+100002d4: 88250000 lwl a1,0\(at\)
+100002d8: 98250003 lwr a1,3\(at\)
+100002dc: 8f81801c lw at,-32740\(gp\)
+100002e0: 242106f8 addiu at,at,1784
+100002e4: 00310821 addu at,at,s1
+100002e8: 88250000 lwl a1,0\(at\)
+100002ec: 98250003 lwr a1,3\(at\)
+100002f0: 8f81801c lw at,-32740\(gp\)
+100002f4: 2421070e addiu at,at,1806
+100002f8: 00250821 addu at,at,a1
+100002fc: 88250000 lwl a1,0\(at\)
+10000300: 98250003 lwr a1,3\(at\)
+10000304: 8f81801c lw at,-32740\(gp\)
+10000308: 24210724 addiu at,at,1828
+1000030c: 00250821 addu at,at,a1
+10000310: a8250000 swl a1,0\(at\)
+10000314: b8250003 swr a1,3\(at\)
+10000318: 3c050000 lui a1,0x0
+1000031c: 00bc2821 addu a1,a1,gp
+10000320: 8ca58024 lw a1,-32732\(a1\)
+10000324: 8f858028 lw a1,-32728\(gp\)
+10000328: 24a500b0 addiu a1,a1,176
+1000032c: 3c190000 lui t9,0x0
+10000330: 033cc821 addu t9,t9,gp
+10000334: 8f398024 lw t9,-32732\(t9\)
+10000338: 8f998028 lw t9,-32728\(gp\)
+1000033c: 273900b0 addiu t9,t9,176
+10000340: 3c190000 lui t9,0x0
+10000344: 033cc821 addu t9,t9,gp
+10000348: 8f398024 lw t9,-32732\(t9\)
+1000034c: 0411ff58 bal 100000b0 <fn>
+10000350: 00000000 nop
+10000354: 8f998028 lw t9,-32728\(gp\)
+10000358: 273900b0 addiu t9,t9,176
+1000035c: 0411ff54 bal 100000b0 <fn>
+10000360: 00000000 nop
+10000364: 3c050000 lui a1,0x0
+10000368: 00bc2821 addu a1,a1,gp
+1000036c: 8ca5802c lw a1,-32724\(a1\)
+10000370: 3c050000 lui a1,0x0
+10000374: 00bc2821 addu a1,a1,gp
+10000378: 8ca5802c lw a1,-32724\(a1\)
+1000037c: 24a5000c addiu a1,a1,12
+10000380: 3c050000 lui a1,0x0
+10000384: 00bc2821 addu a1,a1,gp
+10000388: 8ca5802c lw a1,-32724\(a1\)
+1000038c: 3c010001 lui at,0x1
+10000390: 3421e240 ori at,at,0xe240
+10000394: 00a12821 addu a1,a1,at
+10000398: 3c050000 lui a1,0x0
+1000039c: 00bc2821 addu a1,a1,gp
+100003a0: 8ca5802c lw a1,-32724\(a1\)
+100003a4: 00b12821 addu a1,a1,s1
+100003a8: 3c050000 lui a1,0x0
+100003ac: 00bc2821 addu a1,a1,gp
+100003b0: 8ca5802c lw a1,-32724\(a1\)
+100003b4: 24a5000c addiu a1,a1,12
+100003b8: 00b12821 addu a1,a1,s1
+100003bc: 3c050000 lui a1,0x0
+100003c0: 00bc2821 addu a1,a1,gp
+100003c4: 8ca5802c lw a1,-32724\(a1\)
+100003c8: 3c010001 lui at,0x1
+100003cc: 3421e240 ori at,at,0xe240
+100003d0: 00a12821 addu a1,a1,at
+100003d4: 00b12821 addu a1,a1,s1
+100003d8: 3c050000 lui a1,0x0
+100003dc: 00bc2821 addu a1,a1,gp
+100003e0: 8ca5802c lw a1,-32724\(a1\)
+100003e4: 8ca50000 lw a1,0\(a1\)
+100003e8: 3c050000 lui a1,0x0
+100003ec: 00bc2821 addu a1,a1,gp
+100003f0: 8ca5802c lw a1,-32724\(a1\)
+100003f4: 8ca5000c lw a1,12\(a1\)
+100003f8: 3c050000 lui a1,0x0
+100003fc: 00bc2821 addu a1,a1,gp
+10000400: 8ca5802c lw a1,-32724\(a1\)
+10000404: 00b12821 addu a1,a1,s1
+10000408: 8ca50000 lw a1,0\(a1\)
+1000040c: 3c050000 lui a1,0x0
+10000410: 00bc2821 addu a1,a1,gp
+10000414: 8ca5802c lw a1,-32724\(a1\)
+10000418: 00b12821 addu a1,a1,s1
+1000041c: 8ca5000c lw a1,12\(a1\)
+10000420: 3c010000 lui at,0x0
+10000424: 003c0821 addu at,at,gp
+10000428: 8c21802c lw at,-32724\(at\)
+1000042c: 00250821 addu at,at,a1
+10000430: 8c250022 lw a1,34\(at\)
+10000434: 3c010000 lui at,0x0
+10000438: 003c0821 addu at,at,gp
+1000043c: 8c21802c lw at,-32724\(at\)
+10000440: 00250821 addu at,at,a1
+10000444: ac250038 sw a1,56\(at\)
+10000448: 3c010000 lui at,0x0
+1000044c: 003c0821 addu at,at,gp
+10000450: 8c21802c lw at,-32724\(at\)
+10000454: 88250000 lwl a1,0\(at\)
+10000458: 98250003 lwr a1,3\(at\)
+1000045c: 3c010000 lui at,0x0
+10000460: 003c0821 addu at,at,gp
+10000464: 8c21802c lw at,-32724\(at\)
+10000468: 2421000c addiu at,at,12
+1000046c: 88250000 lwl a1,0\(at\)
+10000470: 98250003 lwr a1,3\(at\)
+10000474: 3c010000 lui at,0x0
+10000478: 003c0821 addu at,at,gp
+1000047c: 8c21802c lw at,-32724\(at\)
+10000480: 00310821 addu at,at,s1
+10000484: 88250000 lwl a1,0\(at\)
+10000488: 98250003 lwr a1,3\(at\)
+1000048c: 3c010000 lui at,0x0
+10000490: 003c0821 addu at,at,gp
+10000494: 8c21802c lw at,-32724\(at\)
+10000498: 2421000c addiu at,at,12
+1000049c: 00310821 addu at,at,s1
+100004a0: 88250000 lwl a1,0\(at\)
+100004a4: 98250003 lwr a1,3\(at\)
+100004a8: 3c010000 lui at,0x0
+100004ac: 003c0821 addu at,at,gp
+100004b0: 8c21802c lw at,-32724\(at\)
+100004b4: 24210022 addiu at,at,34
+100004b8: 00250821 addu at,at,a1
+100004bc: 88250000 lwl a1,0\(at\)
+100004c0: 98250003 lwr a1,3\(at\)
+100004c4: 3c010000 lui at,0x0
+100004c8: 003c0821 addu at,at,gp
+100004cc: 8c21802c lw at,-32724\(at\)
+100004d0: 24210038 addiu at,at,56
+100004d4: 00250821 addu at,at,a1
+100004d8: a8250000 swl a1,0\(at\)
+100004dc: b8250003 swr a1,3\(at\)
+100004e0: 8f85801c lw a1,-32740\(gp\)
+100004e4: 24a50764 addiu a1,a1,1892
+100004e8: 8f85801c lw a1,-32740\(gp\)
+100004ec: 24a50770 addiu a1,a1,1904
+100004f0: 8f858020 lw a1,-32736\(gp\)
+100004f4: 24a5e9a4 addiu a1,a1,-5724
+100004f8: 8f85801c lw a1,-32740\(gp\)
+100004fc: 24a50764 addiu a1,a1,1892
+10000500: 00b12821 addu a1,a1,s1
+10000504: 8f85801c lw a1,-32740\(gp\)
+10000508: 24a50770 addiu a1,a1,1904
+1000050c: 00b12821 addu a1,a1,s1
+10000510: 8f858020 lw a1,-32736\(gp\)
+10000514: 24a5e9a4 addiu a1,a1,-5724
+10000518: 00b12821 addu a1,a1,s1
+1000051c: 8f85801c lw a1,-32740\(gp\)
+10000520: 8ca50764 lw a1,1892\(a1\)
+10000524: 8f85801c lw a1,-32740\(gp\)
+10000528: 8ca50770 lw a1,1904\(a1\)
+1000052c: 8f85801c lw a1,-32740\(gp\)
+10000530: 00b12821 addu a1,a1,s1
+10000534: 8ca50764 lw a1,1892\(a1\)
+10000538: 8f85801c lw a1,-32740\(gp\)
+1000053c: 00b12821 addu a1,a1,s1
+10000540: 8ca50770 lw a1,1904\(a1\)
+10000544: 8f81801c lw at,-32740\(gp\)
+10000548: 00250821 addu at,at,a1
+1000054c: 8c250786 lw a1,1926\(at\)
+10000550: 8f81801c lw at,-32740\(gp\)
+10000554: 00250821 addu at,at,a1
+10000558: ac25079c sw a1,1948\(at\)
+1000055c: 8f81801c lw at,-32740\(gp\)
+10000560: 24210764 addiu at,at,1892
+10000564: 88250000 lwl a1,0\(at\)
+10000568: 98250003 lwr a1,3\(at\)
+1000056c: 8f81801c lw at,-32740\(gp\)
+10000570: 24210770 addiu at,at,1904
+10000574: 88250000 lwl a1,0\(at\)
+10000578: 98250003 lwr a1,3\(at\)
+1000057c: 8f81801c lw at,-32740\(gp\)
+10000580: 24210764 addiu at,at,1892
+10000584: 00310821 addu at,at,s1
+10000588: 88250000 lwl a1,0\(at\)
+1000058c: 98250003 lwr a1,3\(at\)
+10000590: 8f81801c lw at,-32740\(gp\)
+10000594: 24210770 addiu at,at,1904
+10000598: 00310821 addu at,at,s1
+1000059c: 88250000 lwl a1,0\(at\)
+100005a0: 98250003 lwr a1,3\(at\)
+100005a4: 8f81801c lw at,-32740\(gp\)
+100005a8: 24210786 addiu at,at,1926
+100005ac: 00250821 addu at,at,a1
+100005b0: 88250000 lwl a1,0\(at\)
+100005b4: 98250003 lwr a1,3\(at\)
+100005b8: 8f81801c lw at,-32740\(gp\)
+100005bc: 2421079c addiu at,at,1948
+100005c0: 00250821 addu at,at,a1
+100005c4: a8250000 swl a1,0\(at\)
+100005c8: b8250003 swr a1,3\(at\)
+100005cc: 3c050000 lui a1,0x0
+100005d0: 00bc2821 addu a1,a1,gp
+100005d4: 8ca58030 lw a1,-32720\(a1\)
+100005d8: 8f858028 lw a1,-32728\(gp\)
+100005dc: 24a506b0 addiu a1,a1,1712
+100005e0: 3c190000 lui t9,0x0
+100005e4: 033cc821 addu t9,t9,gp
+100005e8: 8f398030 lw t9,-32720\(t9\)
+100005ec: 8f998028 lw t9,-32728\(gp\)
+100005f0: 273906b0 addiu t9,t9,1712
+100005f4: 3c190000 lui t9,0x0
+100005f8: 033cc821 addu t9,t9,gp
+100005fc: 8f398030 lw t9,-32720\(t9\)
+10000600: 0411002b bal 100006b0 <fn2>
+10000604: 00000000 nop
+10000608: 8f998028 lw t9,-32728\(gp\)
+1000060c: 273906b0 addiu t9,t9,1712
+10000610: 04110027 bal 100006b0 <fn2>
+10000614: 00000000 nop
+10000618: 3c050000 lui a1,0x0
+1000061c: 00bc2821 addu a1,a1,gp
+10000620: 8ca58018 lw a1,-32744\(a1\)
+10000624: 1000fea2 b 100000b0 <fn>
+10000628: 00000000 nop
+1000062c: 3c050000 lui a1,0x0
+10000630: 00bc2821 addu a1,a1,gp
+10000634: 8ca5802c lw a1,-32724\(a1\)
+10000638: 8ca50000 lw a1,0\(a1\)
+1000063c: 1000001c b 100006b0 <fn2>
+10000640: 00000000 nop
+10000644: 8f85801c lw a1,-32740\(gp\)
+10000648: 24a506ec addiu a1,a1,1772
+1000064c: 1000fe98 b 100000b0 <fn>
+10000650: 00000000 nop
+10000654: 8f85801c lw a1,-32740\(gp\)
+10000658: 24a50770 addiu a1,a1,1904
+1000065c: 10000014 b 100006b0 <fn2>
+10000660: 00000000 nop
+10000664: 8f858020 lw a1,-32736\(gp\)
+10000668: 24a5e92c addiu a1,a1,-5844
+1000066c: 1000fe90 b 100000b0 <fn>
+10000670: 00000000 nop
+10000674: 8f85801c lw a1,-32740\(gp\)
+10000678: 8ca50764 lw a1,1892\(a1\)
+1000067c: 1000000c b 100006b0 <fn2>
+10000680: 00000000 nop
+10000684: 8f85801c lw a1,-32740\(gp\)
+10000688: 8ca506f8 lw a1,1784\(a1\)
+1000068c: 1000fe88 b 100000b0 <fn>
+10000690: 00000000 nop
+10000694: 8f81801c lw at,-32740\(gp\)
+10000698: 00250821 addu at,at,a1
+1000069c: 8c250786 lw a1,1926\(at\)
+100006a0: 10000003 b 100006b0 <fn2>
+100006a4: 00000000 nop
+ \.\.\.
+
+Disassembly of section \.data:
+
+100106b0 <_fdata>:
+ \.\.\.
+
+100106ec <dg1>:
+ \.\.\.
+
+10010728 <sp2>:
+ \.\.\.
+
+10010764 <dg2>:
+ \.\.\.
+
+Disassembly of section \.got:
+
+100107a0 <_GLOBAL_OFFSET_TABLE_>:
+100107a0: 00000000 .*
+100107a4: 80000000 .*
+100107a8: 100106ec .*
+100107ac: 10010000 .*
+100107b0: 10030000 .*
+100107b4: 100000b0 .*
+100107b8: 10000000 .*
+100107bc: 10010764 .*
+100107c0: 100006b0 .*
+100107c4: 00000000 .*
+100107c8: 00000000 .*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64-linux.d b/binutils-2.21/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64-linux.d
new file mode 100644
index 0000000..075b294
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64-linux.d
@@ -0,0 +1,441 @@
+#name: MIPS ELF xgot reloc n64
+#as: -EB -64 -KPIC -xgot
+#source: ../../../gas/testsuite/gas/mips/elf-rel-got-n64.s
+#ld: -melf64btsmip
+#objdump: -D --show-raw-insn
+
+.*: +file format elf64-.*mips.*
+
+Disassembly of section \.MIPS\.options:
+
+00000001200000b0 <\.MIPS\.options>:
+ 1200000b0: 01280000 .*
+ 1200000b4: 00000000 .*
+ 1200000b8: 92020022 .*
+ \.\.\.
+ 1200000d0: 00000001 .*
+ 1200000d4: 200187c0 .*
+
+Disassembly of section \.text:
+
+00000001200000e0 <fn>:
+ 1200000e0: 3c050000 lui a1,0x0
+ 1200000e4: 00bc282d daddu a1,a1,gp
+ 1200000e8: dca58020 ld a1,-32736\(a1\)
+ 1200000ec: 3c050000 lui a1,0x0
+ 1200000f0: 00bc282d daddu a1,a1,gp
+ 1200000f4: dca58020 ld a1,-32736\(a1\)
+ 1200000f8: 64a5000c daddiu a1,a1,12
+ 1200000fc: 3c050000 lui a1,0x0
+ 120000100: 00bc282d daddu a1,a1,gp
+ 120000104: dca58020 ld a1,-32736\(a1\)
+ 120000108: 3c010001 lui at,0x1
+ 12000010c: 3421e240 ori at,at,0xe240
+ 120000110: 00a1282d daddu a1,a1,at
+ 120000114: 3c050000 lui a1,0x0
+ 120000118: 00bc282d daddu a1,a1,gp
+ 12000011c: dca58020 ld a1,-32736\(a1\)
+ 120000120: 00b1282d daddu a1,a1,s1
+ 120000124: 3c050000 lui a1,0x0
+ 120000128: 00bc282d daddu a1,a1,gp
+ 12000012c: dca58020 ld a1,-32736\(a1\)
+ 120000130: 64a5000c daddiu a1,a1,12
+ 120000134: 00b1282d daddu a1,a1,s1
+ 120000138: 3c050000 lui a1,0x0
+ 12000013c: 00bc282d daddu a1,a1,gp
+ 120000140: dca58020 ld a1,-32736\(a1\)
+ 120000144: 3c010001 lui at,0x1
+ 120000148: 3421e240 ori at,at,0xe240
+ 12000014c: 00a1282d daddu a1,a1,at
+ 120000150: 00b1282d daddu a1,a1,s1
+ 120000154: 3c050000 lui a1,0x0
+ 120000158: 00bc282d daddu a1,a1,gp
+ 12000015c: dca58020 ld a1,-32736\(a1\)
+ 120000160: dca50000 ld a1,0\(a1\)
+ 120000164: 3c050000 lui a1,0x0
+ 120000168: 00bc282d daddu a1,a1,gp
+ 12000016c: dca58020 ld a1,-32736\(a1\)
+ 120000170: dca5000c ld a1,12\(a1\)
+ 120000174: 3c050000 lui a1,0x0
+ 120000178: 00bc282d daddu a1,a1,gp
+ 12000017c: dca58020 ld a1,-32736\(a1\)
+ 120000180: 00b1282d daddu a1,a1,s1
+ 120000184: dca50000 ld a1,0\(a1\)
+ 120000188: 3c050000 lui a1,0x0
+ 12000018c: 00bc282d daddu a1,a1,gp
+ 120000190: dca58020 ld a1,-32736\(a1\)
+ 120000194: 00b1282d daddu a1,a1,s1
+ 120000198: dca5000c ld a1,12\(a1\)
+ 12000019c: 3c010000 lui at,0x0
+ 1200001a0: 003c082d daddu at,at,gp
+ 1200001a4: dc218020 ld at,-32736\(at\)
+ 1200001a8: 0025082d daddu at,at,a1
+ 1200001ac: dc250022 ld a1,34\(at\)
+ 1200001b0: 3c010000 lui at,0x0
+ 1200001b4: 003c082d daddu at,at,gp
+ 1200001b8: dc218020 ld at,-32736\(at\)
+ 1200001bc: 0025082d daddu at,at,a1
+ 1200001c0: fc250038 sd a1,56\(at\)
+ 1200001c4: 3c010000 lui at,0x0
+ 1200001c8: 003c082d daddu at,at,gp
+ 1200001cc: dc218020 ld at,-32736\(at\)
+ 1200001d0: 88250000 lwl a1,0\(at\)
+ 1200001d4: 98250003 lwr a1,3\(at\)
+ 1200001d8: 3c010000 lui at,0x0
+ 1200001dc: 003c082d daddu at,at,gp
+ 1200001e0: dc218020 ld at,-32736\(at\)
+ 1200001e4: 6421000c daddiu at,at,12
+ 1200001e8: 88250000 lwl a1,0\(at\)
+ 1200001ec: 98250003 lwr a1,3\(at\)
+ 1200001f0: 3c010000 lui at,0x0
+ 1200001f4: 003c082d daddu at,at,gp
+ 1200001f8: dc218020 ld at,-32736\(at\)
+ 1200001fc: 0031082d daddu at,at,s1
+ 120000200: 88250000 lwl a1,0\(at\)
+ 120000204: 98250003 lwr a1,3\(at\)
+ 120000208: 3c010000 lui at,0x0
+ 12000020c: 003c082d daddu at,at,gp
+ 120000210: dc218020 ld at,-32736\(at\)
+ 120000214: 6421000c daddiu at,at,12
+ 120000218: 0031082d daddu at,at,s1
+ 12000021c: 88250000 lwl a1,0\(at\)
+ 120000220: 98250003 lwr a1,3\(at\)
+ 120000224: 3c010000 lui at,0x0
+ 120000228: 003c082d daddu at,at,gp
+ 12000022c: dc218020 ld at,-32736\(at\)
+ 120000230: 64210022 daddiu at,at,34
+ 120000234: 0025082d daddu at,at,a1
+ 120000238: 88250000 lwl a1,0\(at\)
+ 12000023c: 98250003 lwr a1,3\(at\)
+ 120000240: 3c010000 lui at,0x0
+ 120000244: 003c082d daddu at,at,gp
+ 120000248: dc218020 ld at,-32736\(at\)
+ 12000024c: 64210038 daddiu at,at,56
+ 120000250: 0025082d daddu at,at,a1
+ 120000254: a8250000 swl a1,0\(at\)
+ 120000258: b8250003 swr a1,3\(at\)
+ 12000025c: df858028 ld a1,-32728\(gp\)
+ 120000260: 64a5071c daddiu a1,a1,1820
+ 120000264: df858028 ld a1,-32728\(gp\)
+ 120000268: 64a50728 daddiu a1,a1,1832
+ 12000026c: df858030 ld a1,-32720\(gp\)
+ 120000270: 64a5e95c daddiu a1,a1,-5796
+ 120000274: df858028 ld a1,-32728\(gp\)
+ 120000278: 64a5071c daddiu a1,a1,1820
+ 12000027c: 00b1282d daddu a1,a1,s1
+ 120000280: df858028 ld a1,-32728\(gp\)
+ 120000284: 64a50728 daddiu a1,a1,1832
+ 120000288: 00b1282d daddu a1,a1,s1
+ 12000028c: df858030 ld a1,-32720\(gp\)
+ 120000290: 64a5e95c daddiu a1,a1,-5796
+ 120000294: 00b1282d daddu a1,a1,s1
+ 120000298: df858028 ld a1,-32728\(gp\)
+ 12000029c: dca5071c ld a1,1820\(a1\)
+ 1200002a0: df858028 ld a1,-32728\(gp\)
+ 1200002a4: dca50728 ld a1,1832\(a1\)
+ 1200002a8: df858028 ld a1,-32728\(gp\)
+ 1200002ac: 00b1282d daddu a1,a1,s1
+ 1200002b0: dca5071c ld a1,1820\(a1\)
+ 1200002b4: df858028 ld a1,-32728\(gp\)
+ 1200002b8: 00b1282d daddu a1,a1,s1
+ 1200002bc: dca50728 ld a1,1832\(a1\)
+ 1200002c0: df818028 ld at,-32728\(gp\)
+ 1200002c4: 0025082d daddu at,at,a1
+ 1200002c8: dc25073e ld a1,1854\(at\)
+ 1200002cc: df818028 ld at,-32728\(gp\)
+ 1200002d0: 0025082d daddu at,at,a1
+ 1200002d4: fc250754 sd a1,1876\(at\)
+ 1200002d8: df818028 ld at,-32728\(gp\)
+ 1200002dc: 6421071c daddiu at,at,1820
+ 1200002e0: 88250000 lwl a1,0\(at\)
+ 1200002e4: 98250003 lwr a1,3\(at\)
+ 1200002e8: df818028 ld at,-32728\(gp\)
+ 1200002ec: 64210728 daddiu at,at,1832
+ 1200002f0: 88250000 lwl a1,0\(at\)
+ 1200002f4: 98250003 lwr a1,3\(at\)
+ 1200002f8: df818028 ld at,-32728\(gp\)
+ 1200002fc: 6421071c daddiu at,at,1820
+ 120000300: 0031082d daddu at,at,s1
+ 120000304: 88250000 lwl a1,0\(at\)
+ 120000308: 98250003 lwr a1,3\(at\)
+ 12000030c: df818028 ld at,-32728\(gp\)
+ 120000310: 64210728 daddiu at,at,1832
+ 120000314: 0031082d daddu at,at,s1
+ 120000318: 88250000 lwl a1,0\(at\)
+ 12000031c: 98250003 lwr a1,3\(at\)
+ 120000320: df818028 ld at,-32728\(gp\)
+ 120000324: 6421073e daddiu at,at,1854
+ 120000328: 0025082d daddu at,at,a1
+ 12000032c: 88250000 lwl a1,0\(at\)
+ 120000330: 98250003 lwr a1,3\(at\)
+ 120000334: df818028 ld at,-32728\(gp\)
+ 120000338: 64210754 daddiu at,at,1876
+ 12000033c: 0025082d daddu at,at,a1
+ 120000340: a8250000 swl a1,0\(at\)
+ 120000344: b8250003 swr a1,3\(at\)
+ 120000348: 3c050000 lui a1,0x0
+ 12000034c: 00bc282d daddu a1,a1,gp
+ 120000350: dca58038 ld a1,-32712\(a1\)
+ 120000354: df858040 ld a1,-32704\(gp\)
+ 120000358: 64a500e0 daddiu a1,a1,224
+ 12000035c: 3c190000 lui t9,0x0
+ 120000360: 033cc82d daddu t9,t9,gp
+ 120000364: df398038 ld t9,-32712\(t9\)
+ 120000368: df998040 ld t9,-32704\(gp\)
+ 12000036c: 673900e0 daddiu t9,t9,224
+ 120000370: 3c190000 lui t9,0x0
+ 120000374: 033cc82d daddu t9,t9,gp
+ 120000378: df398038 ld t9,-32712\(t9\)
+ 12000037c: 0411ff58 bal 1200000e0 <fn>
+ 120000380: 00000000 nop
+ 120000384: df998040 ld t9,-32704\(gp\)
+ 120000388: 673900e0 daddiu t9,t9,224
+ 12000038c: 0411ff54 bal 1200000e0 <fn>
+ 120000390: 00000000 nop
+ 120000394: 3c050000 lui a1,0x0
+ 120000398: 00bc282d daddu a1,a1,gp
+ 12000039c: dca58048 ld a1,-32696\(a1\)
+ 1200003a0: 3c050000 lui a1,0x0
+ 1200003a4: 00bc282d daddu a1,a1,gp
+ 1200003a8: dca58048 ld a1,-32696\(a1\)
+ 1200003ac: 64a5000c daddiu a1,a1,12
+ 1200003b0: 3c050000 lui a1,0x0
+ 1200003b4: 00bc282d daddu a1,a1,gp
+ 1200003b8: dca58048 ld a1,-32696\(a1\)
+ 1200003bc: 3c010001 lui at,0x1
+ 1200003c0: 3421e240 ori at,at,0xe240
+ 1200003c4: 00a1282d daddu a1,a1,at
+ 1200003c8: 3c050000 lui a1,0x0
+ 1200003cc: 00bc282d daddu a1,a1,gp
+ 1200003d0: dca58048 ld a1,-32696\(a1\)
+ 1200003d4: 00b1282d daddu a1,a1,s1
+ 1200003d8: 3c050000 lui a1,0x0
+ 1200003dc: 00bc282d daddu a1,a1,gp
+ 1200003e0: dca58048 ld a1,-32696\(a1\)
+ 1200003e4: 64a5000c daddiu a1,a1,12
+ 1200003e8: 00b1282d daddu a1,a1,s1
+ 1200003ec: 3c050000 lui a1,0x0
+ 1200003f0: 00bc282d daddu a1,a1,gp
+ 1200003f4: dca58048 ld a1,-32696\(a1\)
+ 1200003f8: 3c010001 lui at,0x1
+ 1200003fc: 3421e240 ori at,at,0xe240
+ 120000400: 00a1282d daddu a1,a1,at
+ 120000404: 00b1282d daddu a1,a1,s1
+ 120000408: 3c050000 lui a1,0x0
+ 12000040c: 00bc282d daddu a1,a1,gp
+ 120000410: dca58048 ld a1,-32696\(a1\)
+ 120000414: dca50000 ld a1,0\(a1\)
+ 120000418: 3c050000 lui a1,0x0
+ 12000041c: 00bc282d daddu a1,a1,gp
+ 120000420: dca58048 ld a1,-32696\(a1\)
+ 120000424: dca5000c ld a1,12\(a1\)
+ 120000428: 3c050000 lui a1,0x0
+ 12000042c: 00bc282d daddu a1,a1,gp
+ 120000430: dca58048 ld a1,-32696\(a1\)
+ 120000434: 00b1282d daddu a1,a1,s1
+ 120000438: dca50000 ld a1,0\(a1\)
+ 12000043c: 3c050000 lui a1,0x0
+ 120000440: 00bc282d daddu a1,a1,gp
+ 120000444: dca58048 ld a1,-32696\(a1\)
+ 120000448: 00b1282d daddu a1,a1,s1
+ 12000044c: dca5000c ld a1,12\(a1\)
+ 120000450: 3c010000 lui at,0x0
+ 120000454: 003c082d daddu at,at,gp
+ 120000458: dc218048 ld at,-32696\(at\)
+ 12000045c: 0025082d daddu at,at,a1
+ 120000460: dc250022 ld a1,34\(at\)
+ 120000464: 3c010000 lui at,0x0
+ 120000468: 003c082d daddu at,at,gp
+ 12000046c: dc218048 ld at,-32696\(at\)
+ 120000470: 0025082d daddu at,at,a1
+ 120000474: fc250038 sd a1,56\(at\)
+ 120000478: 3c010000 lui at,0x0
+ 12000047c: 003c082d daddu at,at,gp
+ 120000480: dc218048 ld at,-32696\(at\)
+ 120000484: 88250000 lwl a1,0\(at\)
+ 120000488: 98250003 lwr a1,3\(at\)
+ 12000048c: 3c010000 lui at,0x0
+ 120000490: 003c082d daddu at,at,gp
+ 120000494: dc218048 ld at,-32696\(at\)
+ 120000498: 6421000c daddiu at,at,12
+ 12000049c: 88250000 lwl a1,0\(at\)
+ 1200004a0: 98250003 lwr a1,3\(at\)
+ 1200004a4: 3c010000 lui at,0x0
+ 1200004a8: 003c082d daddu at,at,gp
+ 1200004ac: dc218048 ld at,-32696\(at\)
+ 1200004b0: 0031082d daddu at,at,s1
+ 1200004b4: 88250000 lwl a1,0\(at\)
+ 1200004b8: 98250003 lwr a1,3\(at\)
+ 1200004bc: 3c010000 lui at,0x0
+ 1200004c0: 003c082d daddu at,at,gp
+ 1200004c4: dc218048 ld at,-32696\(at\)
+ 1200004c8: 6421000c daddiu at,at,12
+ 1200004cc: 0031082d daddu at,at,s1
+ 1200004d0: 88250000 lwl a1,0\(at\)
+ 1200004d4: 98250003 lwr a1,3\(at\)
+ 1200004d8: 3c010000 lui at,0x0
+ 1200004dc: 003c082d daddu at,at,gp
+ 1200004e0: dc218048 ld at,-32696\(at\)
+ 1200004e4: 64210022 daddiu at,at,34
+ 1200004e8: 0025082d daddu at,at,a1
+ 1200004ec: 88250000 lwl a1,0\(at\)
+ 1200004f0: 98250003 lwr a1,3\(at\)
+ 1200004f4: 3c010000 lui at,0x0
+ 1200004f8: 003c082d daddu at,at,gp
+ 1200004fc: dc218048 ld at,-32696\(at\)
+ 120000500: 64210038 daddiu at,at,56
+ 120000504: 0025082d daddu at,at,a1
+ 120000508: a8250000 swl a1,0\(at\)
+ 12000050c: b8250003 swr a1,3\(at\)
+ 120000510: df858028 ld a1,-32728\(gp\)
+ 120000514: 64a50794 daddiu a1,a1,1940
+ 120000518: df858028 ld a1,-32728\(gp\)
+ 12000051c: 64a507a0 daddiu a1,a1,1952
+ 120000520: df858030 ld a1,-32720\(gp\)
+ 120000524: 64a5e9d4 daddiu a1,a1,-5676
+ 120000528: df858028 ld a1,-32728\(gp\)
+ 12000052c: 64a50794 daddiu a1,a1,1940
+ 120000530: 00b1282d daddu a1,a1,s1
+ 120000534: df858028 ld a1,-32728\(gp\)
+ 120000538: 64a507a0 daddiu a1,a1,1952
+ 12000053c: 00b1282d daddu a1,a1,s1
+ 120000540: df858030 ld a1,-32720\(gp\)
+ 120000544: 64a5e9d4 daddiu a1,a1,-5676
+ 120000548: 00b1282d daddu a1,a1,s1
+ 12000054c: df858028 ld a1,-32728\(gp\)
+ 120000550: dca50794 ld a1,1940\(a1\)
+ 120000554: df858028 ld a1,-32728\(gp\)
+ 120000558: dca507a0 ld a1,1952\(a1\)
+ 12000055c: df858028 ld a1,-32728\(gp\)
+ 120000560: 00b1282d daddu a1,a1,s1
+ 120000564: dca50794 ld a1,1940\(a1\)
+ 120000568: df858028 ld a1,-32728\(gp\)
+ 12000056c: 00b1282d daddu a1,a1,s1
+ 120000570: dca507a0 ld a1,1952\(a1\)
+ 120000574: df818028 ld at,-32728\(gp\)
+ 120000578: 0025082d daddu at,at,a1
+ 12000057c: dc2507b6 ld a1,1974\(at\)
+ 120000580: df818028 ld at,-32728\(gp\)
+ 120000584: 0025082d daddu at,at,a1
+ 120000588: fc2507cc sd a1,1996\(at\)
+ 12000058c: df818028 ld at,-32728\(gp\)
+ 120000590: 64210794 daddiu at,at,1940
+ 120000594: 88250000 lwl a1,0\(at\)
+ 120000598: 98250003 lwr a1,3\(at\)
+ 12000059c: df818028 ld at,-32728\(gp\)
+ 1200005a0: 642107a0 daddiu at,at,1952
+ 1200005a4: 88250000 lwl a1,0\(at\)
+ 1200005a8: 98250003 lwr a1,3\(at\)
+ 1200005ac: df818028 ld at,-32728\(gp\)
+ 1200005b0: 64210794 daddiu at,at,1940
+ 1200005b4: 0031082d daddu at,at,s1
+ 1200005b8: 88250000 lwl a1,0\(at\)
+ 1200005bc: 98250003 lwr a1,3\(at\)
+ 1200005c0: df818028 ld at,-32728\(gp\)
+ 1200005c4: 642107a0 daddiu at,at,1952
+ 1200005c8: 0031082d daddu at,at,s1
+ 1200005cc: 88250000 lwl a1,0\(at\)
+ 1200005d0: 98250003 lwr a1,3\(at\)
+ 1200005d4: df818028 ld at,-32728\(gp\)
+ 1200005d8: 642107b6 daddiu at,at,1974
+ 1200005dc: 0025082d daddu at,at,a1
+ 1200005e0: 88250000 lwl a1,0\(at\)
+ 1200005e4: 98250003 lwr a1,3\(at\)
+ 1200005e8: df818028 ld at,-32728\(gp\)
+ 1200005ec: 642107cc daddiu at,at,1996
+ 1200005f0: 0025082d daddu at,at,a1
+ 1200005f4: a8250000 swl a1,0\(at\)
+ 1200005f8: b8250003 swr a1,3\(at\)
+ 1200005fc: 3c050000 lui a1,0x0
+ 120000600: 00bc282d daddu a1,a1,gp
+ 120000604: dca58050 ld a1,-32688\(a1\)
+ 120000608: df858040 ld a1,-32704\(gp\)
+ 12000060c: 64a506e0 daddiu a1,a1,1760
+ 120000610: 3c190000 lui t9,0x0
+ 120000614: 033cc82d daddu t9,t9,gp
+ 120000618: df398050 ld t9,-32688\(t9\)
+ 12000061c: df998040 ld t9,-32704\(gp\)
+ 120000620: 673906e0 daddiu t9,t9,1760
+ 120000624: 3c190000 lui t9,0x0
+ 120000628: 033cc82d daddu t9,t9,gp
+ 12000062c: df398050 ld t9,-32688\(t9\)
+ 120000630: 0411002b bal 1200006e0 <fn2>
+ 120000634: 00000000 nop
+ 120000638: df998040 ld t9,-32704\(gp\)
+ 12000063c: 673906e0 daddiu t9,t9,1760
+ 120000640: 04110027 bal 1200006e0 <fn2>
+ 120000644: 00000000 nop
+ 120000648: 3c050000 lui a1,0x0
+ 12000064c: 00bc282d daddu a1,a1,gp
+ 120000650: dca58020 ld a1,-32736\(a1\)
+ 120000654: 1000fea2 b 1200000e0 <fn>
+ 120000658: 00000000 nop
+ 12000065c: 3c050000 lui a1,0x0
+ 120000660: 00bc282d daddu a1,a1,gp
+ 120000664: dca58048 ld a1,-32696\(a1\)
+ 120000668: dca50000 ld a1,0\(a1\)
+ 12000066c: 1000001c b 1200006e0 <fn2>
+ 120000670: 00000000 nop
+ 120000674: df858028 ld a1,-32728\(gp\)
+ 120000678: 64a5071c daddiu a1,a1,1820
+ 12000067c: 1000fe98 b 1200000e0 <fn>
+ 120000680: 00000000 nop
+ 120000684: df858028 ld a1,-32728\(gp\)
+ 120000688: 64a507a0 daddiu a1,a1,1952
+ 12000068c: 10000014 b 1200006e0 <fn2>
+ 120000690: 00000000 nop
+ 120000694: df858030 ld a1,-32720\(gp\)
+ 120000698: 64a5e95c daddiu a1,a1,-5796
+ 12000069c: 1000fe90 b 1200000e0 <fn>
+ 1200006a0: 00000000 nop
+ 1200006a4: df858028 ld a1,-32728\(gp\)
+ 1200006a8: dca50794 ld a1,1940\(a1\)
+ 1200006ac: 1000000c b 1200006e0 <fn2>
+ 1200006b0: 00000000 nop
+ 1200006b4: df858028 ld a1,-32728\(gp\)
+ 1200006b8: dca50728 ld a1,1832\(a1\)
+ 1200006bc: 1000fe88 b 1200000e0 <fn>
+ 1200006c0: 00000000 nop
+ 1200006c4: df818028 ld at,-32728\(gp\)
+ 1200006c8: 0025082d daddu at,at,a1
+ 1200006cc: dc2507b6 ld a1,1974\(at\)
+ 1200006d0: 10000003 b 1200006e0 <fn2>
+ 1200006d4: 00000000 nop
+ \.\.\.
+
+Disassembly of section \.data:
+
+00000001200106e0 <_fdata>:
+ \.\.\.
+
+000000012001071c <dg1>:
+ \.\.\.
+
+0000000120010758 <sp2>:
+ \.\.\.
+
+0000000120010794 <dg2>:
+ \.\.\.
+
+Disassembly of section \.got:
+
+00000001200107d0 <_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+ 1200107d8: 80000000 .*
+ 1200107dc: 00000000 .*
+ 1200107e0: 00000001 .*
+ 1200107e4: 2001071c .*
+ 1200107e8: 00000001 .*
+ 1200107ec: 20010000 .*
+ 1200107f0: 00000001 .*
+ 1200107f4: 20030000 .*
+ 1200107f8: 00000001 .*
+ 1200107fc: 200000e0 .*
+ 120010800: 00000001 .*
+ 120010804: 20000000 .*
+ 120010808: 00000001 .*
+ 12001080c: 20010794 .*
+ 120010810: 00000001 .*
+ 120010814: 200006e0 .*
+ \.\.\.
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64.d b/binutils-2.21/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64.d
new file mode 100644
index 0000000..0111f78
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64.d
@@ -0,0 +1,436 @@
+#name: MIPS ELF xgot reloc n64
+#as: -EB -64 -KPIC -xgot
+#source: ../../../gas/testsuite/gas/mips/elf-rel-got-n64.s
+#ld: -melf64btsmip
+#objdump: -D --show-raw-insn
+
+.*: +file format elf64-.*mips.*
+
+Disassembly of section \.MIPS\.options:
+
+00000000100000b0 <\.MIPS\.options>:
+ 100000b0: 01280000 .*
+ 100000b4: 00000000 .*
+ 100000b8: 92020022 .*
+ \.\.\.
+ 100000d4: 101087c0 .*
+Disassembly of section \.text:
+
+00000000100000e0 <fn>:
+ 100000e0: 3c050000 lui a1,0x0
+ 100000e4: 00bc282d daddu a1,a1,gp
+ 100000e8: dca58058 ld a1,-32680\(a1\)
+ 100000ec: 3c050000 lui a1,0x0
+ 100000f0: 00bc282d daddu a1,a1,gp
+ 100000f4: dca58058 ld a1,-32680\(a1\)
+ 100000f8: 64a5000c daddiu a1,a1,12
+ 100000fc: 3c050000 lui a1,0x0
+ 10000100: 00bc282d daddu a1,a1,gp
+ 10000104: dca58058 ld a1,-32680\(a1\)
+ 10000108: 3c010002 lui at,0x2
+ 1000010c: 6421e240 daddiu at,at,-7616
+ 10000110: 00a1282d daddu a1,a1,at
+ 10000114: 3c050000 lui a1,0x0
+ 10000118: 00bc282d daddu a1,a1,gp
+ 1000011c: dca58058 ld a1,-32680\(a1\)
+ 10000120: 00b1282d daddu a1,a1,s1
+ 10000124: 3c050000 lui a1,0x0
+ 10000128: 00bc282d daddu a1,a1,gp
+ 1000012c: dca58058 ld a1,-32680\(a1\)
+ 10000130: 64a5000c daddiu a1,a1,12
+ 10000134: 00b1282d daddu a1,a1,s1
+ 10000138: 3c050000 lui a1,0x0
+ 1000013c: 00bc282d daddu a1,a1,gp
+ 10000140: dca58058 ld a1,-32680\(a1\)
+ 10000144: 3c010002 lui at,0x2
+ 10000148: 6421e240 daddiu at,at,-7616
+ 1000014c: 00a1282d daddu a1,a1,at
+ 10000150: 00b1282d daddu a1,a1,s1
+ 10000154: 3c050000 lui a1,0x0
+ 10000158: 00bc282d daddu a1,a1,gp
+ 1000015c: dca58058 ld a1,-32680\(a1\)
+ 10000160: dca50000 ld a1,0\(a1\)
+ 10000164: 3c050000 lui a1,0x0
+ 10000168: 00bc282d daddu a1,a1,gp
+ 1000016c: dca58058 ld a1,-32680\(a1\)
+ 10000170: dca5000c ld a1,12\(a1\)
+ 10000174: 3c050000 lui a1,0x0
+ 10000178: 00bc282d daddu a1,a1,gp
+ 1000017c: dca58058 ld a1,-32680\(a1\)
+ 10000180: 00b1282d daddu a1,a1,s1
+ 10000184: dca50000 ld a1,0\(a1\)
+ 10000188: 3c050000 lui a1,0x0
+ 1000018c: 00bc282d daddu a1,a1,gp
+ 10000190: dca58058 ld a1,-32680\(a1\)
+ 10000194: 00b1282d daddu a1,a1,s1
+ 10000198: dca5000c ld a1,12\(a1\)
+ 1000019c: 3c010000 lui at,0x0
+ 100001a0: 003c082d daddu at,at,gp
+ 100001a4: dc218058 ld at,-32680\(at\)
+ 100001a8: 0025082d daddu at,at,a1
+ 100001ac: dc250022 ld a1,34\(at\)
+ 100001b0: 3c010000 lui at,0x0
+ 100001b4: 003c082d daddu at,at,gp
+ 100001b8: dc218058 ld at,-32680\(at\)
+ 100001bc: 0025082d daddu at,at,a1
+ 100001c0: fc250038 sd a1,56\(at\)
+ 100001c4: 3c010000 lui at,0x0
+ 100001c8: 003c082d daddu at,at,gp
+ 100001cc: dc218058 ld at,-32680\(at\)
+ 100001d0: 88250000 lwl a1,0\(at\)
+ 100001d4: 98250003 lwr a1,3\(at\)
+ 100001d8: 3c010000 lui at,0x0
+ 100001dc: 003c082d daddu at,at,gp
+ 100001e0: dc218058 ld at,-32680\(at\)
+ 100001e4: 6421000c daddiu at,at,12
+ 100001e8: 88250000 lwl a1,0\(at\)
+ 100001ec: 98250003 lwr a1,3\(at\)
+ 100001f0: 3c010000 lui at,0x0
+ 100001f4: 003c082d daddu at,at,gp
+ 100001f8: dc218058 ld at,-32680\(at\)
+ 100001fc: 0031082d daddu at,at,s1
+ 10000200: 88250000 lwl a1,0\(at\)
+ 10000204: 98250003 lwr a1,3\(at\)
+ 10000208: 3c010000 lui at,0x0
+ 1000020c: 003c082d daddu at,at,gp
+ 10000210: dc218058 ld at,-32680\(at\)
+ 10000214: 6421000c daddiu at,at,12
+ 10000218: 0031082d daddu at,at,s1
+ 1000021c: 88250000 lwl a1,0\(at\)
+ 10000220: 98250003 lwr a1,3\(at\)
+ 10000224: 3c010000 lui at,0x0
+ 10000228: 003c082d daddu at,at,gp
+ 1000022c: dc218058 ld at,-32680\(at\)
+ 10000230: 64210022 daddiu at,at,34
+ 10000234: 0025082d daddu at,at,a1
+ 10000238: 88250000 lwl a1,0\(at\)
+ 1000023c: 98250003 lwr a1,3\(at\)
+ 10000240: 3c010000 lui at,0x0
+ 10000244: 003c082d daddu at,at,gp
+ 10000248: dc218058 ld at,-32680\(at\)
+ 1000024c: 64210038 daddiu at,at,56
+ 10000250: 0025082d daddu at,at,a1
+ 10000254: a8250000 swl a1,0\(at\)
+ 10000258: b8250003 swr a1,3\(at\)
+ 1000025c: df858020 ld a1,-32736\(gp\)
+ 10000260: 64a5071c daddiu a1,a1,1820
+ 10000264: df858020 ld a1,-32736\(gp\)
+ 10000268: 64a50728 daddiu a1,a1,1832
+ 1000026c: df858028 ld a1,-32728\(gp\)
+ 10000270: 64a5e95c daddiu a1,a1,-5796
+ 10000274: df858020 ld a1,-32736\(gp\)
+ 10000278: 64a5071c daddiu a1,a1,1820
+ 1000027c: 00b1282d daddu a1,a1,s1
+ 10000280: df858020 ld a1,-32736\(gp\)
+ 10000284: 64a50728 daddiu a1,a1,1832
+ 10000288: 00b1282d daddu a1,a1,s1
+ 1000028c: df858028 ld a1,-32728\(gp\)
+ 10000290: 64a5e95c daddiu a1,a1,-5796
+ 10000294: 00b1282d daddu a1,a1,s1
+ 10000298: df858020 ld a1,-32736\(gp\)
+ 1000029c: dca5071c ld a1,1820\(a1\)
+ 100002a0: df858020 ld a1,-32736\(gp\)
+ 100002a4: dca50728 ld a1,1832\(a1\)
+ 100002a8: df858020 ld a1,-32736\(gp\)
+ 100002ac: 00b1282d daddu a1,a1,s1
+ 100002b0: dca5071c ld a1,1820\(a1\)
+ 100002b4: df858020 ld a1,-32736\(gp\)
+ 100002b8: 00b1282d daddu a1,a1,s1
+ 100002bc: dca50728 ld a1,1832\(a1\)
+ 100002c0: df818020 ld at,-32736\(gp\)
+ 100002c4: 0025082d daddu at,at,a1
+ 100002c8: dc25073e ld a1,1854\(at\)
+ 100002cc: df818020 ld at,-32736\(gp\)
+ 100002d0: 0025082d daddu at,at,a1
+ 100002d4: fc250754 sd a1,1876\(at\)
+ 100002d8: df818020 ld at,-32736\(gp\)
+ 100002dc: 6421071c daddiu at,at,1820
+ 100002e0: 88250000 lwl a1,0\(at\)
+ 100002e4: 98250003 lwr a1,3\(at\)
+ 100002e8: df818020 ld at,-32736\(gp\)
+ 100002ec: 64210728 daddiu at,at,1832
+ 100002f0: 88250000 lwl a1,0\(at\)
+ 100002f4: 98250003 lwr a1,3\(at\)
+ 100002f8: df818020 ld at,-32736\(gp\)
+ 100002fc: 6421071c daddiu at,at,1820
+ 10000300: 0031082d daddu at,at,s1
+ 10000304: 88250000 lwl a1,0\(at\)
+ 10000308: 98250003 lwr a1,3\(at\)
+ 1000030c: df818020 ld at,-32736\(gp\)
+ 10000310: 64210728 daddiu at,at,1832
+ 10000314: 0031082d daddu at,at,s1
+ 10000318: 88250000 lwl a1,0\(at\)
+ 1000031c: 98250003 lwr a1,3\(at\)
+ 10000320: df818020 ld at,-32736\(gp\)
+ 10000324: 6421073e daddiu at,at,1854
+ 10000328: 0025082d daddu at,at,a1
+ 1000032c: 88250000 lwl a1,0\(at\)
+ 10000330: 98250003 lwr a1,3\(at\)
+ 10000334: df818020 ld at,-32736\(gp\)
+ 10000338: 64210754 daddiu at,at,1876
+ 1000033c: 0025082d daddu at,at,a1
+ 10000340: a8250000 swl a1,0\(at\)
+ 10000344: b8250003 swr a1,3\(at\)
+ 10000348: 3c050000 lui a1,0x0
+ 1000034c: 00bc282d daddu a1,a1,gp
+ 10000350: dca58048 ld a1,-32696\(a1\)
+ 10000354: df858030 ld a1,-32720\(gp\)
+ 10000358: 64a500e0 daddiu a1,a1,224
+ 1000035c: 3c190000 lui t9,0x0
+ 10000360: 033cc82d daddu t9,t9,gp
+ 10000364: df398048 ld t9,-32696\(t9\)
+ 10000368: df998030 ld t9,-32720\(gp\)
+ 1000036c: 673900e0 daddiu t9,t9,224
+ 10000370: 3c190000 lui t9,0x0
+ 10000374: 033cc82d daddu t9,t9,gp
+ 10000378: df398048 ld t9,-32696\(t9\)
+ 1000037c: 0320f809 jalr t9
+ 10000380: 00000000 nop
+ 10000384: df998030 ld t9,-32720\(gp\)
+ 10000388: 673900e0 daddiu t9,t9,224
+ 1000038c: 0320f809 jalr t9
+ 10000390: 00000000 nop
+ 10000394: 3c050000 lui a1,0x0
+ 10000398: 00bc282d daddu a1,a1,gp
+ 1000039c: dca58060 ld a1,-32672\(a1\)
+ 100003a0: 3c050000 lui a1,0x0
+ 100003a4: 00bc282d daddu a1,a1,gp
+ 100003a8: dca58060 ld a1,-32672\(a1\)
+ 100003ac: 64a5000c daddiu a1,a1,12
+ 100003b0: 3c050000 lui a1,0x0
+ 100003b4: 00bc282d daddu a1,a1,gp
+ 100003b8: dca58060 ld a1,-32672\(a1\)
+ 100003bc: 3c010002 lui at,0x2
+ 100003c0: 6421e240 daddiu at,at,-7616
+ 100003c4: 00a1282d daddu a1,a1,at
+ 100003c8: 3c050000 lui a1,0x0
+ 100003cc: 00bc282d daddu a1,a1,gp
+ 100003d0: dca58060 ld a1,-32672\(a1\)
+ 100003d4: 00b1282d daddu a1,a1,s1
+ 100003d8: 3c050000 lui a1,0x0
+ 100003dc: 00bc282d daddu a1,a1,gp
+ 100003e0: dca58060 ld a1,-32672\(a1\)
+ 100003e4: 64a5000c daddiu a1,a1,12
+ 100003e8: 00b1282d daddu a1,a1,s1
+ 100003ec: 3c050000 lui a1,0x0
+ 100003f0: 00bc282d daddu a1,a1,gp
+ 100003f4: dca58060 ld a1,-32672\(a1\)
+ 100003f8: 3c010002 lui at,0x2
+ 100003fc: 6421e240 daddiu at,at,-7616
+ 10000400: 00a1282d daddu a1,a1,at
+ 10000404: 00b1282d daddu a1,a1,s1
+ 10000408: 3c050000 lui a1,0x0
+ 1000040c: 00bc282d daddu a1,a1,gp
+ 10000410: dca58060 ld a1,-32672\(a1\)
+ 10000414: dca50000 ld a1,0\(a1\)
+ 10000418: 3c050000 lui a1,0x0
+ 1000041c: 00bc282d daddu a1,a1,gp
+ 10000420: dca58060 ld a1,-32672\(a1\)
+ 10000424: dca5000c ld a1,12\(a1\)
+ 10000428: 3c050000 lui a1,0x0
+ 1000042c: 00bc282d daddu a1,a1,gp
+ 10000430: dca58060 ld a1,-32672\(a1\)
+ 10000434: 00b1282d daddu a1,a1,s1
+ 10000438: dca50000 ld a1,0\(a1\)
+ 1000043c: 3c050000 lui a1,0x0
+ 10000440: 00bc282d daddu a1,a1,gp
+ 10000444: dca58060 ld a1,-32672\(a1\)
+ 10000448: 00b1282d daddu a1,a1,s1
+ 1000044c: dca5000c ld a1,12\(a1\)
+ 10000450: 3c010000 lui at,0x0
+ 10000454: 003c082d daddu at,at,gp
+ 10000458: dc218060 ld at,-32672\(at\)
+ 1000045c: 0025082d daddu at,at,a1
+ 10000460: dc250022 ld a1,34\(at\)
+ 10000464: 3c010000 lui at,0x0
+ 10000468: 003c082d daddu at,at,gp
+ 1000046c: dc218060 ld at,-32672\(at\)
+ 10000470: 0025082d daddu at,at,a1
+ 10000474: fc250038 sd a1,56\(at\)
+ 10000478: 3c010000 lui at,0x0
+ 1000047c: 003c082d daddu at,at,gp
+ 10000480: dc218060 ld at,-32672\(at\)
+ 10000484: 88250000 lwl a1,0\(at\)
+ 10000488: 98250003 lwr a1,3\(at\)
+ 1000048c: 3c010000 lui at,0x0
+ 10000490: 003c082d daddu at,at,gp
+ 10000494: dc218060 ld at,-32672\(at\)
+ 10000498: 6421000c daddiu at,at,12
+ 1000049c: 88250000 lwl a1,0\(at\)
+ 100004a0: 98250003 lwr a1,3\(at\)
+ 100004a4: 3c010000 lui at,0x0
+ 100004a8: 003c082d daddu at,at,gp
+ 100004ac: dc218060 ld at,-32672\(at\)
+ 100004b0: 0031082d daddu at,at,s1
+ 100004b4: 88250000 lwl a1,0\(at\)
+ 100004b8: 98250003 lwr a1,3\(at\)
+ 100004bc: 3c010000 lui at,0x0
+ 100004c0: 003c082d daddu at,at,gp
+ 100004c4: dc218060 ld at,-32672\(at\)
+ 100004c8: 6421000c daddiu at,at,12
+ 100004cc: 0031082d daddu at,at,s1
+ 100004d0: 88250000 lwl a1,0\(at\)
+ 100004d4: 98250003 lwr a1,3\(at\)
+ 100004d8: 3c010000 lui at,0x0
+ 100004dc: 003c082d daddu at,at,gp
+ 100004e0: dc218060 ld at,-32672\(at\)
+ 100004e4: 64210022 daddiu at,at,34
+ 100004e8: 0025082d daddu at,at,a1
+ 100004ec: 88250000 lwl a1,0\(at\)
+ 100004f0: 98250003 lwr a1,3\(at\)
+ 100004f4: 3c010000 lui at,0x0
+ 100004f8: 003c082d daddu at,at,gp
+ 100004fc: dc218060 ld at,-32672\(at\)
+ 10000500: 64210038 daddiu at,at,56
+ 10000504: 0025082d daddu at,at,a1
+ 10000508: a8250000 swl a1,0\(at\)
+ 1000050c: b8250003 swr a1,3\(at\)
+ 10000510: df858020 ld a1,-32736\(gp\)
+ 10000514: 64a50794 daddiu a1,a1,1940
+ 10000518: df858020 ld a1,-32736\(gp\)
+ 1000051c: 64a507a0 daddiu a1,a1,1952
+ 10000520: df858028 ld a1,-32728\(gp\)
+ 10000524: 64a5e9d4 daddiu a1,a1,-5676
+ 10000528: df858020 ld a1,-32736\(gp\)
+ 1000052c: 64a50794 daddiu a1,a1,1940
+ 10000530: 00b1282d daddu a1,a1,s1
+ 10000534: df858020 ld a1,-32736\(gp\)
+ 10000538: 64a507a0 daddiu a1,a1,1952
+ 1000053c: 00b1282d daddu a1,a1,s1
+ 10000540: df858028 ld a1,-32728\(gp\)
+ 10000544: 64a5e9d4 daddiu a1,a1,-5676
+ 10000548: 00b1282d daddu a1,a1,s1
+ 1000054c: df858020 ld a1,-32736\(gp\)
+ 10000550: dca50794 ld a1,1940\(a1\)
+ 10000554: df858020 ld a1,-32736\(gp\)
+ 10000558: dca507a0 ld a1,1952\(a1\)
+ 1000055c: df858020 ld a1,-32736\(gp\)
+ 10000560: 00b1282d daddu a1,a1,s1
+ 10000564: dca50794 ld a1,1940\(a1\)
+ 10000568: df858020 ld a1,-32736\(gp\)
+ 1000056c: 00b1282d daddu a1,a1,s1
+ 10000570: dca507a0 ld a1,1952\(a1\)
+ 10000574: df818020 ld at,-32736\(gp\)
+ 10000578: 0025082d daddu at,at,a1
+ 1000057c: dc250794 ld a1,1940\(at\)
+ 10000580: df818020 ld at,-32736\(gp\)
+ 10000584: 0025082d daddu at,at,a1
+ 10000588: fc2507cc sd a1,1996\(at\)
+ 1000058c: df818020 ld at,-32736\(gp\)
+ 10000590: 64210794 daddiu at,at,1940
+ 10000594: 88250000 lwl a1,0\(at\)
+ 10000598: 98250003 lwr a1,3\(at\)
+ 1000059c: df818020 ld at,-32736\(gp\)
+ 100005a0: 642107a0 daddiu at,at,1952
+ 100005a4: 88250000 lwl a1,0\(at\)
+ 100005a8: 98250003 lwr a1,3\(at\)
+ 100005ac: df818020 ld at,-32736\(gp\)
+ 100005b0: 64210794 daddiu at,at,1940
+ 100005b4: 0031082d daddu at,at,s1
+ 100005b8: 88250000 lwl a1,0\(at\)
+ 100005bc: 98250003 lwr a1,3\(at\)
+ 100005c0: df818020 ld at,-32736\(gp\)
+ 100005c4: 642107a0 daddiu at,at,1952
+ 100005c8: 0031082d daddu at,at,s1
+ 100005cc: 88250000 lwl a1,0\(at\)
+ 100005d0: 98250003 lwr a1,3\(at\)
+ 100005d4: df818020 ld at,-32736\(gp\)
+ 100005d8: 642107b6 daddiu at,at,1974
+ 100005dc: 0025082d daddu at,at,a1
+ 100005e0: 88250000 lwl a1,0\(at\)
+ 100005e4: 98250003 lwr a1,3\(at\)
+ 100005e8: df818020 ld at,-32736\(gp\)
+ 100005ec: 642107cc daddiu at,at,1996
+ 100005f0: 0025082d daddu at,at,a1
+ 100005f4: a8250000 swl a1,0\(at\)
+ 100005f8: b8250003 swr a1,3\(at\)
+ 100005fc: 3c050000 lui a1,0x0
+ 10000600: 00bc282d daddu a1,a1,gp
+ 10000604: dca58050 ld a1,-32688\(a1\)
+ 10000608: df858030 ld a1,-32720\(gp\)
+ 1000060c: 64a506e0 daddiu a1,a1,1760
+ 10000610: 3c190000 lui t9,0x0
+ 10000614: 033cc82d daddu t9,t9,gp
+ 10000618: df398050 ld t9,-32688\(t9\)
+ 1000061c: df998030 ld t9,-32720\(gp\)
+ 10000620: 673906e0 daddiu t9,t9,1760
+ 10000624: 3c190000 lui t9,0x0
+ 10000628: 033cc82d daddu t9,t9,gp
+ 1000062c: df398050 ld t9,-32688\(t9\)
+ 10000630: 0320f809 jalr t9
+ 10000634: 00000000 nop
+ 10000638: df998030 ld t9,-32720\(gp\)
+ 1000063c: 673906e0 daddiu t9,t9,1760
+ 10000640: 0320f809 jalr t9
+ 10000644: 00000000 nop
+ 10000648: 3c050000 lui a1,0x0
+ 1000064c: 00bc282d daddu a1,a1,gp
+ 10000650: dca58058 ld a1,-32680\(a1\)
+ 10000654: 1000fea2 b 100000e0 <fn>
+ 10000658: 00000000 nop
+ 1000065c: 3c050000 lui a1,0x0
+ 10000660: 00bc282d daddu a1,a1,gp
+ 10000664: dca58060 ld a1,-32672\(a1\)
+ 10000668: dca50000 ld a1,0\(a1\)
+ 1000066c: 1000001c b 100006e0 <fn2>
+ 10000670: 00000000 nop
+ 10000674: df858020 ld a1,-32736\(gp\)
+ 10000678: 64a5071c daddiu a1,a1,1820
+ 1000067c: 1000fe98 b 100000e0 <fn>
+ 10000680: 00000000 nop
+ 10000684: df858020 ld a1,-32736\(gp\)
+ 10000688: 64a507a0 daddiu a1,a1,1952
+ 1000068c: 10000014 b 100006e0 <fn2>
+ 10000690: 00000000 nop
+ 10000694: df858028 ld a1,-32728\(gp\)
+ 10000698: 64a5e95c daddiu a1,a1,-5796
+ 1000069c: 1000fe90 b 100000e0 <fn>
+ 100006a0: 00000000 nop
+ 100006a4: df858020 ld a1,-32736\(gp\)
+ 100006a8: dca50794 ld a1,1940\(a1\)
+ 100006ac: 1000000c b 100006e0 <fn2>
+ 100006b0: 00000000 nop
+ 100006b4: df858020 ld a1,-32736\(gp\)
+ 100006b8: dca50728 ld a1,1832\(a1\)
+ 100006bc: 1000fe88 b 100000e0 <fn>
+ 100006c0: 00000000 nop
+ 100006c4: df818020 ld at,-32736\(gp\)
+ 100006c8: 0025082d daddu at,at,a1
+ 100006cc: dc2507b6 ld a1,1974\(at\)
+ 100006d0: 10000003 b 100006e0 <fn2>
+ 100006d4: 00000000 nop
+ \.\.\.
+Disassembly of section \.data:
+
+00000000101006e0 <_fdata>:
+ \.\.\.
+
+000000001010071c <dg1>:
+ \.\.\.
+
+0000000010100758 <sp2>:
+ \.\.\.
+
+0000000010100794 <dg2>:
+ \.\.\.
+Disassembly of section \.got:
+
+00000000101007d0 <_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+ 101007d8: 80000000 .*
+ 101007dc: 00000000 .*
+ 101007e0: 00000000 .*
+ 101007e4: 10100000 .*
+ 101007e8: 00000000 .*
+ 101007ec: 10120000 .*
+ 101007f0: 00000000 .*
+ 101007f4: 10000000 .*
+ 101007f8: 00000000 .*
+ \.\.\.
+ 1010080c: 100000e0 .*
+ 10100810: 00000000 .*
+ 10100814: 100006e0 .*
+ 10100818: 00000000 .*
+ 1010081c: 1010071c .*
+ 10100820: 00000000 .*
+ 10100824: 10100794 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/emit-relocs-1.d b/binutils-2.21/ld/testsuite/ld-mips-elf/emit-relocs-1.d
new file mode 100644
index 0000000..520d401
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/emit-relocs-1.d
@@ -0,0 +1,37 @@
+#name: Emit relocs 1
+#source: emit-relocs-1a.s -mabi=n32 -EB
+#source: emit-relocs-1b.s -mabi=n32 -EB
+#ld: -q -T emit-relocs-1.ld -melf32btsmipn32
+#objdump: -sr
+
+.*: file format .*
+
+RELOCATION RECORDS FOR \[\.data\]:
+OFFSET TYPE VALUE *
+00000000 R_MIPS_32 \.data
+00000004 R_MIPS_32 \.data\+0x00001000
+00000008 R_MIPS_32 \.merge1\+0x00000002
+0000000c R_MIPS_32 \.merge2
+00000010 R_MIPS_32 \.merge3
+00000014 R_MIPS_32 \.merge3\+0x00000004
+00000020 R_MIPS_32 \.data\+0x00000020
+00000024 R_MIPS_32 \.data\+0x00001020
+00000028 R_MIPS_32 \.merge1
+0000002c R_MIPS_32 \.merge2\+0x00000002
+00000030 R_MIPS_32 \.merge3\+0x00000008
+00000034 R_MIPS_32 \.merge3\+0x00000004
+
+
+Contents of section \.text:
+ 80000 03e00008 00000000 00000000 00000000 .*
+Contents of section \.merge1:
+ 80400 666c7574 74657200 flutter.*
+Contents of section \.merge2:
+ 80800 74617374 696e6700 tasting.*
+Contents of section \.merge3:
+ 80c00 00000100 00000200 00000300 .*
+Contents of section \.data:
+ 81000 00081000 00082000 00080402 00080800 .*
+ 81010 00080c00 00080c04 00000000 00000000 .*
+ 81020 00081020 00082020 00080400 00080802 .*
+ 81030 00080c08 00080c04 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/emit-relocs-1.ld b/binutils-2.21/ld/testsuite/ld-mips-elf/emit-relocs-1.ld
new file mode 100644
index 0000000..1879ef4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/emit-relocs-1.ld
@@ -0,0 +1,20 @@
+ENTRY(_start)
+SECTIONS
+{
+ . = 0x80000;
+ .text : { *(.text) }
+
+ . = ALIGN (0x400);
+ .merge1 : { *(.merge1) }
+
+ . = ALIGN (0x400);
+ .merge2 : { *(.merge2) }
+
+ . = ALIGN (0x400);
+ .merge3 : { *(.merge3) }
+
+ . = ALIGN (0x400);
+ .data : { *(.data) }
+
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/emit-relocs-1a.s b/binutils-2.21/ld/testsuite/ld-mips-elf/emit-relocs-1a.s
new file mode 100644
index 0000000..9176f97
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/emit-relocs-1a.s
@@ -0,0 +1,22 @@
+ .text
+ .globl _start
+_start:
+ jr $31
+
+ .section .merge1,"aMS",@progbits,1
+A: .string "utter"
+
+ .section .merge2,"aMS",@progbits,1
+B: .string "tasting"
+
+ .section .merge3,"aM",@progbits,4
+C: .4byte 0x100
+D: .4byte 0x200
+
+ .data
+E: .4byte E
+ .4byte E + 0x1000
+ .4byte A
+ .4byte B
+ .4byte C
+ .4byte D
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/emit-relocs-1b.s b/binutils-2.21/ld/testsuite/ld-mips-elf/emit-relocs-1b.s
new file mode 100644
index 0000000..0e88c14
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/emit-relocs-1b.s
@@ -0,0 +1,17 @@
+ .section .merge1,"aMS",@progbits,1
+A: .string "flutter"
+
+ .section .merge2,"aMS",@progbits,1
+B: .string "sting"
+
+ .section .merge3,"aM",@progbits,4
+C: .4byte 0x300
+D: .4byte 0x200
+
+ .data
+E: .4byte E
+ .4byte E + 0x1000
+ .4byte A
+ .4byte B
+ .4byte C
+ .4byte D
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/got-dump-1.d b/binutils-2.21/ld/testsuite/ld-mips-elf/got-dump-1.d
new file mode 100644
index 0000000..b14adff
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/got-dump-1.d
@@ -0,0 +1,25 @@
+#name: GOT dump (readelf -A) test 1
+#source: got-dump-1.s
+#as: -mips3
+#ld: -Tgot-dump-1.ld -shared
+#readelf: -A
+
+Primary GOT:
+ Canonical gp value: 00068000
+
+ Reserved entries:
+ Address Access Initial Purpose
+ 00060010 -32752\(gp\) 00000000 Lazy resolver
+ 00060014 -32748\(gp\) 80000000 Module pointer \(GNU extension\)
+
+ Local entries:
+ Address Access Initial
+ 00060018 -32744\(gp\) 00060000
+ 0006001c -32740\(gp\) 00060004
+
+ Global entries:
+ Address Access Initial Sym.Val. Type Ndx Name
+ 00060020 -32736\(gp\) 00050020 00050020 FUNC UND extern
+ 00060024 -32732\(gp\) 00050000 00050000 FUNC 7 glob
+ 00060028 -32728\(gp\) 00000000 00000000 NOTYPE UND undef
+
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/got-dump-1.ld b/binutils-2.21/ld/testsuite/ld-mips-elf/got-dump-1.ld
new file mode 100644
index 0000000..4fe5c1a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/got-dump-1.ld
@@ -0,0 +1,19 @@
+SECTIONS
+{
+ . = 0x40000;
+ .reginfo : { *(.reginfo) }
+ .dynamic : { *(.dynamic) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ .rel.dyn : { *(.rel.dyn) }
+
+ . = 0x50000;
+ .text : { *(.text) }
+ .MIPS.stubs : { *(.MIPS.stubs) }
+
+ . = 0x60000;
+ .data : { *(.data) }
+ _gp = ALIGN (16) + 0x7ff0;
+ .got : { *(.got) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/got-dump-1.s b/binutils-2.21/ld/testsuite/ld-mips-elf/got-dump-1.s
new file mode 100644
index 0000000..d6c318e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/got-dump-1.s
@@ -0,0 +1,22 @@
+ .global glob
+ .ent glob
+glob:
+ lw $4,%got(local)($28)
+ addiu $4,$4,%lo(local)
+ lw $4,%got(hidden)($28)
+ lw $4,%call16(glob)($28)
+ lw $4,%call16(extern)($28)
+ .end glob
+
+ .data
+ .type local,%object
+ .size local,4
+local:
+ .word undef
+
+ .globl hidden
+ .hidden hidden
+ .type hidden,%object
+ .size hidden,4
+hidden:
+ .word 0
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/got-dump-2.d b/binutils-2.21/ld/testsuite/ld-mips-elf/got-dump-2.d
new file mode 100644
index 0000000..56cc0b3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/got-dump-2.d
@@ -0,0 +1,25 @@
+#name: GOT dump (readelf -A) test 2
+#source: got-dump-2.s
+#as: -mips3 -EB -64
+#ld: -Tgot-dump-2.ld -shared -melf64btsmip
+#readelf: -A
+
+Primary GOT:
+ Canonical gp value: 0001236000008000
+
+ Reserved entries:
+ Address Access Initial Purpose
+ 0001236000000010 -32752\(gp\) 0000000000000000 Lazy resolver
+ 0001236000000018 -32744\(gp\) 8000000000000000 Module pointer \(GNU extension\)
+
+ Local entries:
+ Address Access Initial
+ 0001236000000020 -32736\(gp\) 0001236000000000
+ 0001236000000028 -32728\(gp\) 0001236000000008
+
+ Global entries:
+ Address Access Initial Sym.Val. Type Ndx Name
+ 0001236000000030 -32720\(gp\) 0001235000000020 0001235000000020 FUNC UND extern
+ 0001236000000038 -32712\(gp\) 0001235000000000 0001235000000000 FUNC 7 glob
+ 0001236000000040 -32704\(gp\) 0000000000000000 0000000000000000 NOTYPE UND undef
+
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/got-dump-2.ld b/binutils-2.21/ld/testsuite/ld-mips-elf/got-dump-2.ld
new file mode 100644
index 0000000..cab0f4b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/got-dump-2.ld
@@ -0,0 +1,18 @@
+SECTIONS
+{
+ . = 0x1234000000000;
+ .dynamic : { *(.dynamic) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ .rel.dyn : { *(.rel.dyn) }
+
+ . = 0x1235000000000;
+ .text : { *(.text) }
+ .MIPS.stubs : { *(.MIPS.stubs) }
+
+ . = 0x1236000000000;
+ .data : { *(.data) }
+ _gp = ALIGN (16) + 0x7ff0;
+ .got : { *(.got) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/got-dump-2.s b/binutils-2.21/ld/testsuite/ld-mips-elf/got-dump-2.s
new file mode 100644
index 0000000..5a237fe
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/got-dump-2.s
@@ -0,0 +1,22 @@
+ .global glob
+ .ent glob
+glob:
+ ld $4,%got_page(local)($28)
+ daddiu $4,$4,%got_ofst(local)
+ ld $4,%got_disp(hidden)($28)
+ ld $4,%call16(glob)($28)
+ ld $4,%call16(extern)($28)
+ .end glob
+
+ .data
+ .type local,%object
+ .size local,8
+local:
+ .dword undef
+
+ .globl hidden
+ .hidden hidden
+ .type hidden,%object
+ .size hidden,8
+hidden:
+ .dword 0
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/got-page-1.d b/binutils-2.21/ld/testsuite/ld-mips-elf/got-page-1.d
new file mode 100644
index 0000000..6f4cfd3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/got-page-1.d
@@ -0,0 +1,10 @@
+#name: GOT page test 1
+#source: got-page-1.s
+#ld: -T got-page-1.ld -shared
+#readelf: -d
+#
+# There should be 10 page entries and 2 reserved entries
+#
+#...
+.* \(MIPS_LOCAL_GOTNO\) *12
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/got-page-1.ld b/binutils-2.21/ld/testsuite/ld-mips-elf/got-page-1.ld
new file mode 100644
index 0000000..fe2afe6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/got-page-1.ld
@@ -0,0 +1,31 @@
+SECTIONS
+{
+ . = 0x80000;
+ .interp : { *(.interp) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+
+ . = ALIGN (0x400);
+ .rel.dyn : { *(.rel.dyn) }
+
+ . = ALIGN (0x400);
+ .MIPS.stubs : { *(.MIPS.stubs) }
+
+ . = ALIGN (0x400);
+ .text : { *(.text) }
+
+ . = ALIGN (0x10000);
+ _gp = . + 0x7ff0;
+ .got : { *(.got) }
+
+ . = ALIGN (0x400);
+ .bss : { *(.bss .bss.*) }
+
+ /DISCARD/ : { *(.reginfo) }
+}
+
+VERSION
+{
+ { local: *; };
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/got-page-1.s b/binutils-2.21/ld/testsuite/ld-mips-elf/got-page-1.s
new file mode 100644
index 0000000..976a522
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/got-page-1.s
@@ -0,0 +1,46 @@
+ # See below.
+ lw $4,%got(foo+0x120000)($gp)
+ addiu $4,$4,%lo(foo+0x120000)
+
+ # 2 pages
+ lw $4,%got(foo-0x8000)($gp)
+ addiu $4,$4,%lo(foo-0x8000)
+ lw $4,%got(foo+0x800)($gp)
+ addiu $4,$4,%lo(foo+0x8000)
+
+ # 2 pages
+ lw $4,%got(foo-0x1000000)($gp)
+ addiu $4,$4,%lo(foo-0x1000000)
+ lw $4,%got(foo-0xffffff)($gp)
+ addiu $4,$4,%lo(foo-0xffffff)
+
+ # 1 page
+ lw $4,%got(foo+0x120000)($gp)
+ addiu $4,$4,%lo(foo+0x120000)
+
+ # 5 pages
+ lw $4,%got(bar)($gp)
+ addiu $4,$4,%lo(bar)
+ lw $4,%got(bar+0x20000)($gp)
+ addiu $4,$4,%lo(bar+0x20000)
+ lw $4,%got(bar+0x40000)($gp)
+ addiu $4,$4,%lo(bar+0x40000)
+ lw $4,%got(bar+0x30000)($gp)
+ addiu $4,$4,%lo(bar+0x30000)
+ lw $4,%got(bar+0x10000)($gp)
+ addiu $4,$4,%lo(bar+0x10000)
+ lw $4,%got(bar+0x38000)($gp)
+ addiu $4,$4,%lo(bar+0x38000)
+ lw $4,%got(bar+0x14000)($gp)
+ addiu $4,$4,%lo(bar+0x14000)
+ lw $4,%got(bar+0x2c000)($gp)
+ addiu $4,$4,%lo(bar+0x2c000)
+ lw $4,%got(bar+0x02000)($gp)
+ addiu $4,$4,%lo(bar+0x02000)
+
+ .section .bss.foo,"aw",@nobits
+ .fill 0x800000
+foo: .fill 0x800000
+
+ .section .bss.bar,"aw",@nobits
+bar: .fill 0xc00000
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/got-page-2.d b/binutils-2.21/ld/testsuite/ld-mips-elf/got-page-2.d
new file mode 100644
index 0000000..ad198d0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/got-page-2.d
@@ -0,0 +1,11 @@
+#name: GOT page test 2
+#source: got-page-2.s
+#as: -EB -n32
+#ld: -T got-page-1.ld -shared -melf32btsmipn32
+#readelf: -d
+#
+# There should be 10 page entries and 2 reserved entries
+#
+#...
+.* \(MIPS_LOCAL_GOTNO\) *12
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/got-page-2.s b/binutils-2.21/ld/testsuite/ld-mips-elf/got-page-2.s
new file mode 100644
index 0000000..9482570
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/got-page-2.s
@@ -0,0 +1,46 @@
+ # See below.
+ lw $4,%got_page(foo+0x120000)($gp)
+ addiu $4,$4,%got_ofst(foo+0x120000)
+
+ # 2 pages
+ lw $4,%got_page(foo-0x8000)($gp)
+ addiu $4,$4,%got_ofst(foo-0x8000)
+ lw $4,%got_page(foo+0x800)($gp)
+ addiu $4,$4,%got_ofst(foo+0x8000)
+
+ # 2 pages
+ lw $4,%got_page(foo-0x1000000)($gp)
+ addiu $4,$4,%got_ofst(foo-0x1000000)
+ lw $4,%got_page(foo-0xffffff)($gp)
+ addiu $4,$4,%got_ofst(foo-0xffffff)
+
+ # 1 page
+ lw $4,%got_page(foo+0x120000)($gp)
+ addiu $4,$4,%got_ofst(foo+0x120000)
+
+ # 5 pages
+ lw $4,%got_page(bar)($gp)
+ addiu $4,$4,%got_ofst(bar)
+ lw $4,%got_page(bar+0x20000)($gp)
+ addiu $4,$4,%got_ofst(bar+0x20000)
+ lw $4,%got_page(bar+0x40000)($gp)
+ addiu $4,$4,%got_ofst(bar+0x40000)
+ lw $4,%got_page(bar+0x30000)($gp)
+ addiu $4,$4,%got_ofst(bar+0x30000)
+ lw $4,%got_page(bar+0x10000)($gp)
+ addiu $4,$4,%got_ofst(bar+0x10000)
+ lw $4,%got_page(bar+0x38000)($gp)
+ addiu $4,$4,%got_ofst(bar+0x38000)
+ lw $4,%got_page(bar+0x14000)($gp)
+ addiu $4,$4,%got_ofst(bar+0x14000)
+ lw $4,%got_page(bar+0x2c000)($gp)
+ addiu $4,$4,%got_ofst(bar+0x2c000)
+ lw $4,%got_page(bar+0x02000)($gp)
+ addiu $4,$4,%got_ofst(bar+0x02000)
+
+ .section .bss.foo,"aw",@nobits
+ .fill 0x800000
+foo: .fill 0x800000
+
+ .section .bss.bar,"aw",@nobits
+bar: .fill 0xc00000
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/got-page-3.d b/binutils-2.21/ld/testsuite/ld-mips-elf/got-page-3.d
new file mode 100644
index 0000000..913b0c9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/got-page-3.d
@@ -0,0 +1,26 @@
+#name: GOT page test 3
+#source: got-page-3a.s
+#source: got-page-3b.s
+#source: got-page-3c.s
+#as: -mips3
+#ld: -T got-page-1.ld -shared
+#objdump: -dr
+#
+# got-page-3a.s and got-page-3b.s should get assigned the same GOT,
+# with a page estimate of 10. Thus the first page entry has offset
+# -32744 (-32768 + 0x8000 - ELF_MIPS_GP_OFFSET + MIPS_RESERVED_GOTNO)
+# and the first global entry has an offset -32744 + 40 == -32704.
+#
+# got-page-3c.s should get its own GOT, and needs no page entries.
+# The first global symbol should therefore be at offset -32744.
+#
+#...
+.* lw a0,-32744\(gp\)
+.* addiu a0,a0,.*
+#...
+.* lw a1,-32704\(gp\)
+#...
+.* <f3>:
+#...
+.* lw a1,-32744\(gp\)
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/got-page-3a.s b/binutils-2.21/ld/testsuite/ld-mips-elf/got-page-3a.s
new file mode 100644
index 0000000..c0d4633
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/got-page-3a.s
@@ -0,0 +1,58 @@
+ .macro makeref,sym
+ lw $5,%got(\sym\@)($gp)
+ .endm
+
+ .globl f1
+ .ent f1
+f1:
+ # See below.
+ lw $4,%got(foo+0x120000)($gp)
+ addiu $4,$4,%lo(foo+0x120000)
+
+ # 2 pages
+ lw $4,%got(foo-0x8000)($gp)
+ addiu $4,$4,%lo(foo-0x8000)
+ lw $4,%got(foo+0x800)($gp)
+ addiu $4,$4,%lo(foo+0x8000)
+
+ # 2 pages
+ lw $4,%got(foo-0x1000000)($gp)
+ addiu $4,$4,%lo(foo-0x1000000)
+ lw $4,%got(foo-0xffffff)($gp)
+ addiu $4,$4,%lo(foo-0xffffff)
+
+ # 1 page
+ lw $4,%got(foo+0x120000)($gp)
+ addiu $4,$4,%lo(foo+0x120000)
+
+ # 5 pages
+ lw $4,%got(bar)($gp)
+ addiu $4,$4,%lo(bar)
+ lw $4,%got(bar+0x20000)($gp)
+ addiu $4,$4,%lo(bar+0x20000)
+ lw $4,%got(bar+0x40000)($gp)
+ addiu $4,$4,%lo(bar+0x40000)
+ lw $4,%got(bar+0x30000)($gp)
+ addiu $4,$4,%lo(bar+0x30000)
+ lw $4,%got(bar+0x10000)($gp)
+ addiu $4,$4,%lo(bar+0x10000)
+ lw $4,%got(bar+0x38000)($gp)
+ addiu $4,$4,%lo(bar+0x38000)
+ lw $4,%got(bar+0x14000)($gp)
+ addiu $4,$4,%lo(bar+0x14000)
+ lw $4,%got(bar+0x2c000)($gp)
+ addiu $4,$4,%lo(bar+0x2c000)
+ lw $4,%got(bar+0x02000)($gp)
+ addiu $4,$4,%lo(bar+0x02000)
+ .end f1
+
+ .rept 8000
+ makeref foo
+ .endr
+
+ .section .bss.foo,"aw",@nobits
+ .fill 0x800000
+foo: .fill 0x800000
+
+ .section .bss.bar,"aw",@nobits
+bar: .fill 0xc00000
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/got-page-3b.s b/binutils-2.21/ld/testsuite/ld-mips-elf/got-page-3b.s
new file mode 100644
index 0000000..6b399db
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/got-page-3b.s
@@ -0,0 +1,11 @@
+ .macro makeref,sym
+ lw $5,%got(\sym\@)($gp)
+ .endm
+
+ .globl f2
+ .ent f2
+f2:
+ .rept 8000
+ makeref bar
+ .endr
+ .end f2
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/got-page-3c.s b/binutils-2.21/ld/testsuite/ld-mips-elf/got-page-3c.s
new file mode 100644
index 0000000..cd7656c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/got-page-3c.s
@@ -0,0 +1,11 @@
+ .macro makeref,sym
+ lw $5,%got(\sym\@)($gp)
+ .endm
+
+ .globl f3
+ .ent f3
+f3:
+ .rept 8000
+ makeref frob
+ .endr
+ .end f3
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/got-vers-1.dd b/binutils-2.21/ld/testsuite/ld-mips-elf/got-vers-1.dd
new file mode 100644
index 0000000..98cda95
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/got-vers-1.dd
@@ -0,0 +1,6 @@
+# There must be one global GOT symbol. Its index doesn't matter.
+#...
+ 0x70000011 \(MIPS_SYMTABNO\) * 4
+#...
+ 0x70000013 \(MIPS_GOTSYM\) * 0x3
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/got-vers-1.rd b/binutils-2.21/ld/testsuite/ld-mips-elf/got-vers-1.rd
new file mode 100644
index 0000000..d99ead1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/got-vers-1.rd
@@ -0,0 +1,6 @@
+
+Relocation section '\.rel\.dyn' at offset .* contains 2 entries:
+ *Offset * Info * Type * Sym\.Value * Sym\. Name
+00000000 * 00000000 * R_MIPS_NONE *
+# This index must be the same as DT_MIPS_GOTsYM.
+[^ ]+ * 00000303 * R_MIPS_REL32 * [^ ]+ * foo
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/got-vers-1.sd b/binutils-2.21/ld/testsuite/ld-mips-elf/got-vers-1.sd
new file mode 100644
index 0000000..fac41d3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/got-vers-1.sd
@@ -0,0 +1,6 @@
+# foo@@V2 must have index DT_MIPS_GOTSYM
+#...
+ *3: .* 4 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +foo@@V2
+
+Symbol table '\.symtab' contains .*:
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/got-vers-1.ver b/binutils-2.21/ld/testsuite/ld-mips-elf/got-vers-1.ver
new file mode 100644
index 0000000..defa8e9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/got-vers-1.ver
@@ -0,0 +1 @@
+V2 { global: foo; local: *; };
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/got-vers-1a.s b/binutils-2.21/ld/testsuite/ld-mips-elf/got-vers-1a.s
new file mode 100644
index 0000000..b9959ff
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/got-vers-1a.s
@@ -0,0 +1,2 @@
+ .abicalls
+ .word foo
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/got-vers-1b.s b/binutils-2.21/ld/testsuite/ld-mips-elf/got-vers-1b.s
new file mode 100644
index 0000000..dd308b4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/got-vers-1b.s
@@ -0,0 +1,7 @@
+ .abicalls
+ .symver foo2,foo@@V2
+ .global foo2
+ .data
+ .type foo2,%object
+ .size foo2,4
+foo2: .word 0
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/hash1.s b/binutils-2.21/ld/testsuite/ld-mips-elf/hash1.s
new file mode 100644
index 0000000..4e7fe2f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/hash1.s
@@ -0,0 +1 @@
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/hash1a.d b/binutils-2.21/ld/testsuite/ld-mips-elf/hash1a.d
new file mode 100644
index 0000000..f3adaa8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/hash1a.d
@@ -0,0 +1,4 @@
+#source: hash1.s
+#ld: -shared --hash-style=sysv
+#objdump: -dr
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/hash1b.d b/binutils-2.21/ld/testsuite/ld-mips-elf/hash1b.d
new file mode 100644
index 0000000..5af9037
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/hash1b.d
@@ -0,0 +1,3 @@
+#source: hash1.s
+#ld: -shared --hash-style=both
+#error: .gnu.hash is incompatible with the MIPS ABI
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/hash1c.d b/binutils-2.21/ld/testsuite/ld-mips-elf/hash1c.d
new file mode 100644
index 0000000..09bff3c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/hash1c.d
@@ -0,0 +1,3 @@
+#source: hash1.s
+#ld: -shared --hash-style=gnu
+#error: .gnu.hash is incompatible with the MIPS ABI
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/jalbal.d b/binutils-2.21/ld/testsuite/ld-mips-elf/jalbal.d
new file mode 100644
index 0000000..49cda75
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/jalbal.d
@@ -0,0 +1,24 @@
+#name: jal to bal
+#source: jalbal.s
+#as: -EB -n32 -march=rm9000
+#ld: -EB -e s1 -Ttext 0x200000a0
+#objdump: -d
+
+.*file format elf.*mips.*
+
+Disassembly of section \.text:
+
+.* <s1>:
+.* 0c00802a jal .*200200a8 <s3>
+.* 00000000 nop
+.* 04117fff bal .*200200a8 <s3>
+
+.* <s2>:
+.* \.\.\.
+
+.* <s3>:
+.* 04118000 bal .*200000ac <s2>
+.* 00000000 nop
+.* 0c00002b jal .*200000ac <s2>
+.* 00000000 nop
+.* \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/jalbal.s b/binutils-2.21/ld/testsuite/ld-mips-elf/jalbal.s
new file mode 100644
index 0000000..4273b9f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/jalbal.s
@@ -0,0 +1,18 @@
+# Test that jal gets converted to bal on the RM9000 when it is in range.
+ .text
+ .global s1
+ .type s1,@function
+ .set noreorder
+s1:
+ jal s3
+ nop
+ jal s3
+s2:
+ nop
+ .space 0x1fff8
+s3:
+ jal s2
+ nop
+ jal s2
+ nop
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/jaloverflow-2.d b/binutils-2.21/ld/testsuite/ld-mips-elf/jaloverflow-2.d
new file mode 100644
index 0000000..b40f428
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/jaloverflow-2.d
@@ -0,0 +1,8 @@
+#name: JAL overflow 2
+#source: jaloverflow-2.s
+#as:
+#ld: -Ttext=0x20000000 -e start
+#objdump: -dr
+#...
+0*20000000: 0c000000.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/jaloverflow-2.s b/binutils-2.21/ld/testsuite/ld-mips-elf/jaloverflow-2.s
new file mode 100644
index 0000000..71acf29
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/jaloverflow-2.s
@@ -0,0 +1,7 @@
+# jal relocs against undefined weak symbols should not be treated as
+# overflowing
+
+ .globl start
+ .weak foo
+start:
+ jal foo
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/jaloverflow.d b/binutils-2.21/ld/testsuite/ld-mips-elf/jaloverflow.d
new file mode 100644
index 0000000..b77afe6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/jaloverflow.d
@@ -0,0 +1,11 @@
+#name: JAL overflow
+#source: jaloverflow.s
+#as:
+#ld: -Ttext=0xffffff0 -e start
+#error: .*relocation truncated to fit.*
+
+# This tests whether we correctly detect overflow in the jal
+# instruction. jal is a bit weird since the upper four bits of the
+# destination address are taken from the source address. So overflow
+# occurs if the source and destination address do not have the same
+# most significant four bits.
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/jaloverflow.s b/binutils-2.21/ld/testsuite/ld-mips-elf/jaloverflow.s
new file mode 100644
index 0000000..4dd98b8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/jaloverflow.s
@@ -0,0 +1,12 @@
+# This file gets linked to start at 0xffffff0, so the call is an overflow.
+ .text
+ .global start
+ .set noreorder
+start:
+ nop
+ nop
+ nop
+ nop
+ jal start
+ nop
+ .type start, @function
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/jr-to-b-1.d b/binutils-2.21/ld/testsuite/ld-mips-elf/jr-to-b-1.d
new file mode 100644
index 0000000..c786847
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/jr-to-b-1.d
@@ -0,0 +1,25 @@
+#name: jr to b conversion
+#source: jr-to-b-1.s
+#as: -32 -mips1 -EB
+#ld: -shared -melf32btsmip
+#objdump: -d
+
+.*: file format .*
+
+
+Disassembly of section \.text:
+
+.* <s>:
+.*: 03e00008 jr ra
+.*: 24020001 li v0,1
+
+.* <t>:
+.*: 3c1c.... lui gp,.*
+.*: 279c.... addiu gp,gp,.*
+.*: 0399e021 addu gp,gp,t9
+.*: 8f998018 lw t9,.*\(gp\)
+.*: 00000000 nop
+.*: 2739.... addiu t9,t9,.*
+.*: 1000fff7 b .* <s>
+.*: 00000000 nop
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/jr-to-b-1.s b/binutils-2.21/ld/testsuite/ld-mips-elf/jr-to-b-1.s
new file mode 100644
index 0000000..8f07005
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/jr-to-b-1.s
@@ -0,0 +1,42 @@
+ .abicalls
+ .text
+ .align 2
+ .set nomips16
+ .ent s
+ .type s, @function
+s:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+ j $31
+ li $2,1 # 0x1
+
+ .set macro
+ .set reorder
+ .end s
+ .size s, .-s
+ .align 2
+ .globl t
+ .set nomips16
+ .ent t
+ .type t, @function
+t:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .cpload $25
+ .set nomacro
+ lw $25,%got(s)($28)
+ nop
+ addiu $25,$25,%lo(s)
+ .reloc 1f,R_MIPS_JALR,s
+1: jr $25
+ nop
+
+ .set macro
+ .set reorder
+ .end t
+ .size t, .-t
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/jr-to-b-2.d b/binutils-2.21/ld/testsuite/ld-mips-elf/jr-to-b-2.d
new file mode 100644
index 0000000..4b6399f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/jr-to-b-2.d
@@ -0,0 +1,25 @@
+#name: jr not to b conversion
+#source: jr-to-b-2.s
+#as: -32 -mips1 -EB
+#ld: -shared -melf32btsmip
+#objdump: -d
+
+.*: file format .*
+
+
+Disassembly of section \.text:
+
+.* <s>:
+.*: e820 jr ra
+.*: 6a01 li v0,1
+
+.* <t>:
+.*: 3c1c.... lui gp,.*
+.*: 279c.... addiu gp,gp,.*
+.*: 0399e021 addu gp,gp,t9
+.*: 8f99.... lw t9,.*\(gp\)
+.*: 00000000 nop
+.*: 2739.... addiu t9,t9,.*
+.*: 03200008 jr t9
+.*: 00000000 nop
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/jr-to-b-2.s b/binutils-2.21/ld/testsuite/ld-mips-elf/jr-to-b-2.s
new file mode 100644
index 0000000..ac883c3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/jr-to-b-2.s
@@ -0,0 +1,42 @@
+ .abicalls
+ .text
+ .align 2
+ .set mips16
+ .ent s
+ .type s, @function
+s:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+ j $31
+ li $2,1
+ .set macro
+ .set reorder
+
+ .end s
+ .size s, .-s
+ .align 2
+ .globl t
+ .set nomips16
+ .ent t
+ .type t, @function
+t:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .cpload $25
+ .set nomacro
+ lw $25,%got(s)($28)
+ nop
+ addiu $25,$25,%lo(s)
+ .reloc 1f,R_MIPS_JALR,s
+1: jr $25
+ nop
+
+ .set macro
+ .set reorder
+ .end t
+ .size t, .-t
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/jr.s b/binutils-2.21/ld/testsuite/ld-mips-elf/jr.s
new file mode 100644
index 0000000..df487d8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/jr.s
@@ -0,0 +1 @@
+ jr $31
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips-dyn.ld b/binutils-2.21/ld/testsuite/ld-mips-elf/mips-dyn.ld
new file mode 100644
index 0000000..8f734d2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips-dyn.ld
@@ -0,0 +1,223 @@
+/* Script for -z combreloc: combine and sort reloc sections */
+OUTPUT_FORMAT("elf32-tradbigmips", "elf32-tradbigmips",
+ "elf32-tradlittlemips")
+OUTPUT_ARCH(mips)
+ENTRY(__start)
+SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
+/* Do we need any of these for elf?
+ __DYNAMIC = 0; */
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ PROVIDE (__executable_start = 0x0400000); . = 0x0400000 + SIZEOF_HEADERS;
+ .interp : { *(.interp) }
+ .reginfo : { *(.reginfo) }
+ .dynamic : { *(.dynamic) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ .gnu.version : { *(.gnu.version) }
+ .gnu.version_d : { *(.gnu.version_d) }
+ .gnu.version_r : { *(.gnu.version_r) }
+ .rel.dyn :
+ {
+ *(.rel.init)
+ *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+ *(.rel.fini)
+ *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+ *(.rel.data.rel.ro*)
+ *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+ *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+ *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+ *(.rel.ctors)
+ *(.rel.dtors)
+ *(.rel.got)
+ *(.rel.sdata .rel.sdata.* .rel.gnu.linkonce.s.*)
+ *(.rel.sbss .rel.sbss.* .rel.gnu.linkonce.sb.*)
+ *(.rel.sdata2 .rel.sdata2.* .rel.gnu.linkonce.s2.*)
+ *(.rel.sbss2 .rel.sbss2.* .rel.gnu.linkonce.sb2.*)
+ *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+ }
+ .rela.dyn :
+ {
+ *(.rela.init)
+ *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+ *(.rela.fini)
+ *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+ *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+ *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+ *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+ *(.rela.ctors)
+ *(.rela.dtors)
+ *(.rela.got)
+ *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*)
+ *(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*)
+ *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*)
+ *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*)
+ *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+ }
+ .rel.plt : { *(.rel.plt) }
+ .rela.plt : { *(.rela.plt) }
+ .init :
+ {
+ KEEP (*(.init))
+ } =0
+ .plt : { *(.plt) }
+ .text :
+ {
+ _ftext = . ;
+ *(.text .stub .text.* .gnu.linkonce.t.*)
+ KEEP (*(.text.*personality*))
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ *(.mips16.fn.*) *(.mips16.call.*)
+ } =0
+ .fini :
+ {
+ KEEP (*(.fini))
+ } =0
+ PROVIDE (__etext = .);
+ PROVIDE (_etext = .);
+ PROVIDE (etext = .);
+ .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+ .rodata1 : { *(.rodata1) }
+ .sdata2 : { *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) }
+ .sbss2 : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) }
+ .eh_frame_hdr : { *(.eh_frame_hdr) }
+ .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) }
+ .gcc_except_table : ONLY_IF_RO { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) }
+ /* Adjust the address for the data segment. We want to adjust up to
+ the same address within the page on the next page up. */
+ . = 0x10000000;
+ /* Exception handling */
+ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) }
+ .gcc_except_table : ONLY_IF_RW { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) }
+ /* Thread Local Storage sections */
+ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
+ .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+ /* Ensure the __preinit_array_start label is properly aligned. We
+ could instead move the label definition inside the section, but
+ the linker would then create the section even if it turns out to
+ be empty, which isn't pretty. */
+ . = ALIGN(32 / 8);
+ PROVIDE (__preinit_array_start = .);
+ .preinit_array : { KEEP (*(.preinit_array)) }
+ PROVIDE (__preinit_array_end = .);
+ PROVIDE (__init_array_start = .);
+ .init_array : { KEEP (*(.init_array)) }
+ PROVIDE (__init_array_end = .);
+ PROVIDE (__fini_array_start = .);
+ .fini_array : { KEEP (*(.fini_array)) }
+ PROVIDE (__fini_array_end = .);
+ .ctors :
+ {
+ /* gcc uses crtbegin.o to find the start of
+ the constructors, so we make sure it is
+ first. Because this is a wildcard, it
+ doesn't matter if the user does not
+ actually link against crtbegin.o; the
+ linker won't look for a file to match a
+ wildcard. The wildcard also means that it
+ doesn't matter which directory crtbegin.o
+ is in. */
+ KEEP (*crtbegin*.o(.ctors))
+ /* We don't want to include the .ctor section from
+ from the crtend.o file until after the sorted ctors.
+ The .ctor section from the crtend file contains the
+ end of ctors marker and it must be last */
+ KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ }
+ .dtors :
+ {
+ KEEP (*crtbegin*.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ }
+ .jcr : { KEEP (*(.jcr)) }
+ .data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) }
+ .data :
+ {
+ _fdata = . ;
+ *(.data .data.* .gnu.linkonce.d.*)
+ KEEP (*(.gnu.linkonce.d.*personality*))
+ SORT(CONSTRUCTORS)
+ }
+ .data1 : { *(.data1) }
+ _gp = ALIGN(16) + 0x7ff0;
+ .got : { *(.got.plt) *(.got) }
+ /* We want the small data sections together, so single-instruction offsets
+ can access them all, and initialized data all before uninitialized, so
+ we can shorten the on-disk segment size. */
+ .sdata :
+ {
+ *(.sdata .sdata.* .gnu.linkonce.s.*)
+ }
+ .lit8 : { *(.lit8) }
+ .lit4 : { *(.lit4) }
+ _edata = .;
+ PROVIDE (edata = .);
+ __bss_start = .;
+ _fbss = .;
+ .sbss :
+ {
+ PROVIDE (__sbss_start = .);
+ PROVIDE (___sbss_start = .);
+ *(.dynsbss)
+ *(.sbss .sbss.* .gnu.linkonce.sb.*)
+ *(.scommon)
+ PROVIDE (__sbss_end = .);
+ PROVIDE (___sbss_end = .);
+ }
+ .bss :
+ {
+ *(.dynbss)
+ *(.bss .bss.* .gnu.linkonce.b.*)
+ *(COMMON)
+ /* Align here to ensure that the .bss section occupies space up to
+ _end. Align after .bss to ensure correct alignment even if the
+ .bss section disappears because there are no input sections. */
+ . = ALIGN(32 / 8);
+ }
+ . = ALIGN(32 / 8);
+ _end = .;
+ PROVIDE (end = .);
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames) }
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames) }
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
+ .debug_abbrev 0 : { *(.debug_abbrev) }
+ .debug_line 0 : { *(.debug_line) }
+ .debug_frame 0 : { *(.debug_frame) }
+ .debug_str 0 : { *(.debug_str) }
+ .debug_loc 0 : { *(.debug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo) }
+ /* SGI/MIPS DWARF 2 extensions */
+ .debug_weaknames 0 : { *(.debug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames) }
+ .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) }
+ .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) }
+ /DISCARD/ : { *(.note.GNU-stack) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips-elf-flags.exp b/binutils-2.21/ld/testsuite/ld-mips-elf/mips-elf-flags.exp
new file mode 100644
index 0000000..512cf51
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips-elf-flags.exp
@@ -0,0 +1,166 @@
+# Copyright 2003, 2005, 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+if {![istarget mips*-*-*] || ![is_elf_format]} {
+ return
+}
+
+global ldemul
+if {[istarget mips*-*-irix6*]} {
+ set ldemul "-melf32bsmip"
+} elseif {[istarget mips*el-*-linux*]} {
+ set ldemul "-melf32ltsmip"
+} elseif {[istarget mips*-*-linux*]} {
+ set ldemul "-melf32btsmip"
+} else {
+ set ldemul ""
+}
+
+# Assemble jr.s using each of the argument lists in ARGLIST. Return the
+# list of object files on success and an empty list on failure.
+proc assemble_for_flags {arglist} {
+ global as srcdir subdir
+
+ set objs {}
+ set index 1
+
+ foreach args $arglist {
+ set obj "tmpdir/mips-flags-${index}.o"
+ if {![ld_assemble $as "$args $srcdir/$subdir/jr.s" $obj]} {
+ return ""
+ }
+ lappend objs $obj
+ incr index
+ }
+ return $objs
+}
+
+# Assemble a file using each set of arguments in ARGLIST. Check that
+# the objects can be linked together and that the readelf output
+# includes each flag named in FLAGS.
+proc good_combination {arglist flags} {
+ global ld ldemul READELF
+
+ set finalobj "tmpdir/mips-flags.o"
+ set testname "MIPS compatible objects: $arglist"
+ set objs [assemble_for_flags $arglist]
+
+ if {$objs == ""} {
+ unresolved $testname
+ } elseif {![ld_simple_link "$ld $ldemul" $finalobj "-r $objs"]} {
+ fail $testname
+ } else {
+ catch "exec $READELF --headers $finalobj" output
+ if {![regexp "Flags: *(\[^\n\]*)" $output full gotflags]} {
+ unresolved $testname
+ } else {
+ set failed 0
+
+ # GOTFLAGS is a list of flags separated by ", ".
+ # Convert it to a tcl list.
+ regsub -all ", " $gotflags "," gotflags
+ set gotflags [split $gotflags ","]
+
+ foreach flag $flags {
+ if {[lsearch -exact $gotflags $flag] < 0} {
+ set failed 1
+ }
+ }
+ if {$failed} {
+ fail $testname
+ } else {
+ pass $testname
+ }
+ }
+ }
+}
+
+# Like good_combination, but check that the objects can't be linked
+# together successfully and that the output includes MESSAGE.
+proc bad_combination {arglist message} {
+ global link_output ld ldemul
+
+ set finalobj "tmpdir/mips-flags.o"
+ set testname "MIPS incompatible objects: $arglist"
+ set objs [assemble_for_flags $arglist]
+
+ if {$objs == ""} {
+ unresolved $testname
+ } elseif {[ld_simple_link "$ld $ldemul" $finalobj "-r $objs"]
+ || [string first $message $link_output] < 0} {
+ fail $testname
+ } else {
+ pass $testname
+ }
+}
+
+# Routines to check for various kinds of incompatibility.
+
+proc abi_conflict {arglist firstabi secondabi} {
+ bad_combination $arglist \
+ "linking $secondabi module with previous $firstabi modules"
+}
+
+proc isa_conflict {arglist firstisa secondisa} {
+ bad_combination $arglist \
+ "linking mips:$secondisa module with previous mips:$firstisa modules"
+}
+
+proc regsize_conflict {arglist} {
+ bad_combination $arglist \
+ "linking 32-bit code with 64-bit code"
+}
+
+abi_conflict { "-mabi=eabi -mgp32" "-mips4 -mabi=32" } EABI32 O32
+abi_conflict { "-mips4 -mabi=o64" "-mips3 -mabi=eabi" } O64 EABI64
+
+isa_conflict { "-march=vr5500 -32" "-march=sb1 -32" } 5500 sb1
+isa_conflict { "-march=vr5400 -32" "-march=4120 -32" } 5400 4120
+isa_conflict { "-march=r3900 -32" "-march=r6000 -32" } 3900 6000
+isa_conflict { "-march=r4010 -32" "-march=r4650 -32" } 4010 4650
+isa_conflict { "-mips3 -mgp32 -32" "-mips32 -32" } 4000 isa32
+isa_conflict { "-march=sb1 -mgp32 -32" "-mips32r2 -32" } sb1 isa32r2
+isa_conflict { "-march=sb1 -32" "-mips64r2 -32" } sb1 isa64r2
+
+regsize_conflict { "-mips4 -mgp64 -mabi=o64" "-mips2 -32" }
+regsize_conflict { "-mips4 -mabi=o64" "-mips4 -mabi=32" }
+regsize_conflict { "-mips4 -mabi=eabi -mgp32" "-mips4 -mabi=eabi -mgp64" }
+regsize_conflict { "-march=vr5000 -mgp64 -mabi=o64" "-march=vr5000 -mgp32 -32" }
+regsize_conflict { "-mips32 -32" "-mips64 -mabi=o64" }
+regsize_conflict { "-mips32r2 -32" "-mips64 -mabi=o64" }
+regsize_conflict { "-mips32r2 -32" "-mips64r2 -mabi=o64" }
+
+good_combination { "-mips4 -mgp32 -32" "-mips2 -32" } { mips4 o32 }
+good_combination { "-mips4 -mabi=32" "-mips2 -32" } { mips4 o32 }
+good_combination { "-mips2 -32" "-mips4 -mabi=32" } { mips4 o32 }
+good_combination { "-mips2 -mabi=eabi" "-mips4 -mabi=eabi -mgp32" } { mips4 eabi32 }
+good_combination { "-mips2 -32" "-mips32 -32" "-mips32r2 -32" } { mips32r2 }
+good_combination { "-mips1 -32" "-mips32r2 -32" "-mips32 -32" } { mips32r2 }
+
+good_combination { "-march=vr4100 -32" "-march=vr4120 -32" } { 4120 }
+good_combination { "-march=vr5400 -32" "-march=vr5500 -32" "-mips4 -32" } { 5500 }
+good_combination { "-mips3 -32" "-mips4 -32" "-march=sb1 -32" "-mips5 -32" } { sb1 }
+good_combination { "-mips1 -32" "-march=3900 -32" } { 3900 }
+good_combination { "-mips3 -32" "-mips64r2 -32" "-mips64 -32" } { mips64r2 }
+
+good_combination { "-march=vr4120 -mabi=32" "-mips3 -mabi=32" } { 4120 o32 }
+good_combination { "-march=sb1 -mgp32 -32" "-march=4000 -mgp32 -32" } { sb1 o32 }
+good_combination { "-mips32 -mabi=32" "-march=sb1 -mabi=32" } { sb1 o32 }
+good_combination { "-mips64r2 -mabi=32" "-mips32 -mabi=32" } { mips64r2 o32 }
+good_combination { "-mips5 -mabi=o64" "-mips64r2 -mabi=o64" } { mips64r2 o64 }
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips-elf.exp b/binutils-2.21/ld/testsuite/ld-mips-elf/mips-elf.exp
new file mode 100644
index 0000000..6c283e2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips-elf.exp
@@ -0,0 +1,532 @@
+# Expect script for MIPS ELF linker tests
+# Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+if {[istarget "mips*-*-vxworks"]} {
+ set mipsvxtests {
+ {"VxWorks shared library test 1" "-shared -Tvxworks1.ld"
+ "-mips2" {vxworks1-lib.s}
+ {{readelf --relocs vxworks1-lib.rd} {objdump -dr vxworks1-lib.dd}
+ {readelf --symbols vxworks1-lib.nd} {readelf -d vxworks1-lib.td}}
+ "libvxworks1.so"}
+ {"VxWorks executable test 1 (dynamic)" \
+ "tmpdir/libvxworks1.so -Tvxworks1.ld -q --force-dynamic"
+ "-mips2" {vxworks1.s}
+ {{readelf --relocs vxworks1.rd} {objdump -dr vxworks1.dd}}
+ "vxworks1"}
+ {"VxWorks executable test 2 (dynamic)" \
+ "-Tvxworks1.ld -q --force-dynamic"
+ "-mips2" {vxworks2.s}
+ {{readelf --segments vxworks2.sd}}
+ "vxworks2"}
+ {"VxWorks executable test 2 (static)"
+ "-Tvxworks1.ld"
+ "-mips2" {vxworks2.s}
+ {{readelf --segments vxworks2-static.sd}}
+ "vxworks2"}
+ }
+ run_ld_link_tests $mipsvxtests
+ run_dump_test "vxworks1-static"
+ run_dump_test "vxworks-forced-local-1"
+ return
+}
+
+if {![istarget mips*-*-*] || ![is_elf_format]} {
+ return
+}
+
+set has_newabi [expr [istarget *-*-irix6*] || [istarget mips64*-*-linux*]]
+set linux_gnu [expr [istarget mips*-*-linux*]]
+set embedded_elf [expr [istarget mips*-*-elf]]
+
+if { $linux_gnu } {
+ run_ld_link_tests [list \
+ [list "Dummy shared library for MIPS16 PIC test 1" \
+ "-shared -melf32btsmip" \
+ "-EB -32 -mips1" \
+ { mips16-pic-1-dummy.s } \
+ {} \
+ "mips16-pic-1-dummy.so"] \
+ [list "MIPS16 PIC test 1" \
+ "-melf32btsmip -T mips16-pic-1.ld tmpdir/mips16-pic-1-dummy.so" \
+ "-EB -32 -mips1 -I $srcdir/$subdir" \
+ { mips16-pic-1a.s mips16-pic-1b.s } \
+ { { objdump { -dr -j.text } mips16-pic-1.dd }
+ { readelf -A mips16-pic-1.gd } } \
+ "mips16-pic-1"] \
+ [list "MIPS16 PIC test 2" \
+ "-melf32btsmip -T mips16-pic-1.ld -shared" \
+ "-EB -32 -mips1 -I $srcdir/$subdir" \
+ { mips16-pic-2a.s mips16-pic-2b.s } \
+ { { objdump { -dr -j.text } mips16-pic-2.dd } \
+ { readelf -A mips16-pic-2.gd } \
+ { readelf --symbols mips16-pic-2.nd } \
+ { readelf --relocs mips16-pic-2.rd } \
+ { readelf -d mips16-pic-2.ad } } \
+ "mips16-pic-2"] \
+ [list "MIPS16 PIC test 3" \
+ "-melf32btsmip -T mips16-pic-1.ld tmpdir/mips16-pic-1-dummy.so" \
+ "-EB -32 -mips1 -I $srcdir/$subdir" \
+ { mips16-pic-3a.s mips16-pic-3b.s } \
+ { { objdump -dr mips16-pic-3.dd } \
+ { readelf --relocs mips16-pic-3.rd } \
+ { readelf -A mips16-pic-3.gd } } \
+ "mips16-pic-3"] \
+ [list "MIPS16 PIC test 4 (shared library)" \
+ "-shared -melf32btsmip -T mips16-pic-1.ld --version-script mips16-pic-4.ver" \
+ "-EB -32 -mips1" \
+ { mips16-pic-4a.s mips16-pic-4b.s } \
+ { { objdump -dr mips16-pic-4a.dd } \
+ { readelf --symbols mips16-pic-4a.nd } \
+ { readelf -A mips16-pic-4a.gd } } \
+ "mips16-pic-4.so"] \
+ [list "MIPS16 PIC test 4 (executable)" \
+ "-melf32btsmip -T mips16-pic-1.ld tmpdir/mips16-pic-4.so" \
+ "-EB -32 -mips1" \
+ { mips16-pic-4c.s } \
+ { { objdump -dr mips16-pic-4b.dd } } \
+ "mips16-pic-4"]]
+}
+
+if { [istarget mips64*-linux-gnu] } {
+ set o32_as_flags "-32 -EB"
+ set o32_ld_flags "-melf32btsmip"
+} else {
+ set o32_as_flags ""
+ set o32_ld_flags ""
+}
+
+# Check MIPS16 markings being passed through link.
+run_dump_test "mips16-1"
+
+# MIPS branch offset final link checking.
+run_dump_test "branch-misc-1"
+
+# Test multi-got link. We only do this on GNU/Linux because it requires
+# the "traditional" emulations.
+if { $linux_gnu } {
+ run_dump_test "multi-got-1"
+ run_dump_test "multi-got-no-shared"
+ run_dump_test "multi-got-hidden-1"
+ run_dump_test "multi-got-hidden-2"
+}
+
+# Test __gnu_local_gp accesses
+if { $linux_gnu } {
+ run_dump_test "no-shared-1-o32"
+ if { $has_newabi } {
+ run_dump_test "no-shared-1-n32"
+ run_dump_test "no-shared-1-n64"
+ }
+}
+
+if $has_newabi {
+ run_dump_test "elf-rel-got-n32"
+ run_dump_test "elf-rel-xgot-n32"
+ if { $linux_gnu } {
+ run_dump_test "elf-rel-got-n64-linux"
+ run_dump_test "elf-rel-xgot-n64-linux"
+ } else {
+ run_dump_test "elf-rel-got-n64"
+ run_dump_test "elf-rel-xgot-n64"
+ }
+
+ run_dump_test "relax-jalr-n32"
+ run_dump_test "relax-jalr-n32-shared"
+ run_dump_test "relax-jalr-n64"
+ run_dump_test "relax-jalr-n64-shared"
+}
+
+if { $linux_gnu } {
+ run_dump_test "rel32-o32"
+ run_dump_test "rel32-n32"
+ run_dump_test "rel64"
+ # The first test checks that a mixed PIC/non-PIC relocatable link
+ # will not introduce any stubs itself, but will flag PIC functions
+ # for the final link.
+ #
+ # The second test checks that we insert stubs for calls from
+ # non-PIC functions to PIC functions when linking the original
+ # two objects together.
+ #
+ # The third test checks that we do the same when linking the
+ # result of the first link (with no other source files).
+ run_ld_link_tests {
+ {"PIC and non-PIC test 1 (relocatable)" "-r -melf32btsmip"
+ "-32 -EB -mips2" {pic-and-nonpic-1a.s pic-and-nonpic-1b.s}
+ {{objdump -dr pic-and-nonpic-1-rel.dd}
+ {readelf --symbols pic-and-nonpic-1-rel.nd}}
+ "pic-and-nonpic-1-rel.o"}
+ {"PIC and non-PIC test 1 (static 1)"
+ "-melf32btsmip -Tpic-and-nonpic-1.ld"
+ "-32 -EB -mips2" {pic-and-nonpic-1a.s pic-and-nonpic-1b.s}
+ {{objdump -dr pic-and-nonpic-1.dd}
+ {readelf --symbols pic-and-nonpic-1.nd}}
+ "pic-and-nonpic-1-static1.o"}
+ {"PIC and non-PIC test 1 (static 2)"
+ "-melf32btsmip -Tpic-and-nonpic-1.ld tmpdir/pic-and-nonpic-1-rel.o"
+ "" {}
+ {{objdump -dr pic-and-nonpic-1.dd}
+ {readelf --symbols pic-and-nonpic-1.nd}}
+ "pic-and-nonpic-1-static2.o"}
+ }
+ run_dump_test "pic-and-nonpic-2"
+ run_ld_link_tests {
+ {"PIC and non-PIC test 3 (shared library)"
+ "-melf32btsmip -shared -Tpic-and-nonpic-3a.ld"
+ "-32 -EB -mips2" {pic-and-nonpic-3a.s}
+ {{readelf --segments pic-and-nonpic-3a.sd}
+ {readelf -A pic-and-nonpic-3a.gd}
+ {objdump -dr pic-and-nonpic-3a.dd}}
+ "pic-and-nonpic-3a.so"}
+ {"PIC and non-PIC test 3 (executable)"
+ "-melf32btsmip -Tpic-and-nonpic-3b.ld tmpdir/pic-and-nonpic-3a.so"
+ "-32 -EB -mips2" {pic-and-nonpic-3b.s}
+ {{readelf --segments pic-and-nonpic-3b.sd}
+ {objdump -dr pic-and-nonpic-3b.dd}
+ {objdump {-s -j.got.plt} pic-and-nonpic-3b.pd}
+ {readelf -A pic-and-nonpic-3b.gd}
+ {readelf --relocs pic-and-nonpic-3b.rd}
+ {readelf --symbols pic-and-nonpic-3b.nd}
+ {readelf -d pic-and-nonpic-3b.ad}}
+ "pic-and-nonpic-3b"}
+ }
+ run_dump_test "pic-and-nonpic-3-error"
+ run_ld_link_tests {
+ {"PIC and non-PIC test 4 (shared library)"
+ "-melf32btsmip -shared -Tpic-and-nonpic-3a.ld"
+ "-32 -EB -mips2" {pic-and-nonpic-4a.s}
+ {}
+ "pic-and-nonpic-4a.so"}
+ {"PIC and non-PIC test 4 (executable)"
+ "-melf32btsmip -Tpic-and-nonpic-4b.ld tmpdir/pic-and-nonpic-4a.so"
+ "-32 -EB -mips2" {pic-and-nonpic-4b.s}
+ {{readelf --segments pic-and-nonpic-4b.sd}
+ {objdump -dr pic-and-nonpic-4b.dd}
+ {objdump {-s -j.got -j.data} pic-and-nonpic-4b.gd}
+ {readelf --relocs pic-and-nonpic-4b.rd}
+ {readelf --symbols pic-and-nonpic-4b.nd}
+ {readelf -d pic-and-nonpic-4b.ad}}
+ "pic-and-nonpic-4b"}
+ }
+ run_dump_test "pic-and-nonpic-4-error"
+ run_ld_link_tests {
+ {"PIC and non-PIC test 5 (executable)"
+ "-melf32btsmip -Tpic-and-nonpic-5b.ld tmpdir/pic-and-nonpic-3a.so tmpdir/pic-and-nonpic-4a.so"
+ "-32 -EB -mips2" {pic-and-nonpic-5a.s pic-and-nonpic-5b.s}
+ {{readelf --segments pic-and-nonpic-5b.sd}
+ {objdump -dr pic-and-nonpic-5b.dd}
+ {objdump {-s -j.got.plt -j.data} pic-and-nonpic-5b.pd}
+ {readelf -A pic-and-nonpic-5b.gd}
+ {readelf --relocs pic-and-nonpic-5b.rd}
+ {readelf --symbols pic-and-nonpic-5b.nd}
+ {readelf -d pic-and-nonpic-5b.ad}}
+ "pic-and-nonpic-5b"}
+ }
+ set abis { o32 -32 elf32btsmip }
+ if $has_newabi {
+ lappend abis n32 -n32 elf32btsmipn32
+ lappend abis n64 -64 elf64btsmip
+ }
+ foreach { abi flag emul } $abis {
+ run_ld_link_tests [list \
+ [list "PIC and non-PIC test 6 ($abi shared library)" \
+ "-m$emul -shared -Tpic-and-nonpic-3a.ld" \
+ "$flag -EB -mips3" \
+ [list "pic-and-nonpic-6-${abi}a.s"] {} \
+ "pic-and-nonpic-6-${abi}.so"] \
+ [list "PIC and non-PIC test 6 ($abi executable)" \
+ "-m$emul -Tpic-and-nonpic-6.ld tmpdir/pic-and-nonpic-6-${abi}.so" \
+ "$flag -EB -mips3" \
+ [list "pic-and-nonpic-6-${abi}b.s" \
+ "pic-and-nonpic-6-${abi}c.s"] \
+ [list "readelf {--wide --segments} pic-and-nonpic-6-${abi}.sd" \
+ "objdump -dr pic-and-nonpic-6-${abi}.dd" \
+ "objdump {-s -j.got.plt} pic-and-nonpic-6-${abi}.pd" \
+ "readelf -A pic-and-nonpic-6-${abi}.gd" \
+ "readelf --relocs pic-and-nonpic-6-${abi}.rd" \
+ "readelf --symbols pic-and-nonpic-6-${abi}.nd" \
+ "readelf -d pic-and-nonpic-6-${abi}.ad"] \
+ "pic-and-nonpic-6-${abi}"]]
+ }
+}
+
+if { $embedded_elf } {
+ run_dump_test "region1"
+}
+
+if $embedded_elf {
+ # This could work on other targets too, but would need the appropriate
+ # ld -m switch.
+ run_dump_test "reloc-1-rel"
+}
+if $has_newabi {
+ run_dump_test "reloc-1-n32"
+ if $linux_gnu {
+ # Uses a linux-specific ld -m switch
+ run_dump_test "reloc-1-n64"
+ }
+}
+run_dump_test "reloc-2"
+run_dump_test "reloc-merge-lo16"
+run_dump_test "reloc-3"
+if {$has_newabi} {
+ run_dump_test "reloc-3-n32"
+}
+run_dump_test "reloc-4"
+run_dump_test "reloc-5"
+
+if {$has_newabi && $linux_gnu} {
+ run_dump_test "eh-frame1-n32"
+ run_dump_test "eh-frame1-n64"
+ run_dump_test "eh-frame2-n32"
+ run_dump_test "eh-frame2-n64"
+}
+if {$embedded_elf} {
+ run_dump_test "eh-frame3"
+ run_dump_test "eh-frame4"
+}
+if {$linux_gnu} {
+ set eh_frame5_test {
+ {"MIPS eh-frame 5"
+ "-melf32btsmip -shared -Teh-frame5.ld"
+ "-32 -EB"
+ {eh-frame5.s}
+ {{readelf {--relocs -wf} eh-frame5.d}}
+ "eh-frame5.so"}
+ }
+ run_ld_link_tests $eh_frame5_test
+}
+
+run_dump_test "jaloverflow"
+run_dump_test "jaloverflow-2"
+if {$has_newabi} {
+ run_dump_test "jalbal"
+}
+
+run_dump_test "mode-change-error-1"
+
+run_dump_test "mips16-hilo"
+if {$has_newabi} {
+ run_dump_test "mips16-hilo-n32"
+}
+
+if { $linux_gnu } {
+ run_dump_test "textrel-1"
+ run_dump_test "got-page-1"
+ if $has_newabi {
+ run_dump_test "got-page-2"
+ run_dump_test "dyn-sec64"
+ }
+ run_dump_test "got-page-3"
+ run_dump_test "got-dump-1"
+ if $has_newabi {
+ run_dump_test "got-dump-2"
+ }
+ run_dump_test "reloc-estimate-1"
+}
+
+if $has_newabi {
+ run_dump_test "emit-relocs-1"
+}
+
+run_dump_test "hash1a"
+run_dump_test "hash1b"
+run_dump_test "hash1c"
+
+if {[istarget mips*-*-linux*]} {
+ # The number of symbols that are always included in the symbol table
+ # for these tests. The 4 are:
+ #
+ # the null symbol entry
+ # the .MIPS.stubs section symbol
+ # _gp
+ # _GLOBAL_OFFSET_TABLE_
+ set base_syms 4
+ foreach dynsym { 7fff 8000 fff0 10000 2fe80 } {
+ run_ld_link_tests \
+ [list [list \
+ "Stub for dynsym 0x$dynsym" \
+ "-shared -melf32btsmip -T stub-dynsym-1.ld" \
+ [concat \
+ "-EB -march=mips1 -32 -KPIC" \
+ "--defsym base_syms=$base_syms" \
+ "--defsym dynsym=0x$dynsym"] \
+ [list "stub-dynsym-1.s"] \
+ [list [list \
+ "objdump" "-dz" \
+ "stub-dynsym-1-$dynsym.d"]] \
+ "stub-dynsym-1-$dynsym"]]
+ }
+ }
+
+# For tests which may involve multiple files, use run_ld_link_tests.
+
+# List contains test-items with 3 items followed by 2 lists:
+# 0:name 1:ld options 2:assembler options
+# 3:filenames of assembler files 4: action and options. 5: name of output file
+
+# Actions:
+# objdump: Apply objdump options on result. Compare with regex (last arg).
+# nm: Apply nm options on result. Compare with regex (last arg).
+# readelf: Apply readelf options on result. Compare with regex (last arg).
+
+set mips_tls_tests {
+ {"Static executable with TLS" "-static -melf32btsmip -T mips-dyn.ld"
+ "-EB -march=mips1 -32 -KPIC" {tlsbin-o32.s}
+ {{objdump {-dr -m mips:isa32r2} tlsbin-o32.d} {objdump -srj.got tlsbin-o32.got}}
+ "tls-static-o32"}
+ {"Shared library with TLS" "-shared -melf32btsmip -T mips-lib.ld"
+ "-EB -march=mips1 -32 -KPIC" {tlslib-o32.s}
+ {{objdump {-dr -m mips:isa32r2} tlslib-o32.d} {objdump -Rsj.got tlslib-o32.got}}
+ "tlslib-o32.so"}
+ {"Dynamic executable with TLS"
+ "-melf32btsmip -T mips-dyn.ld tmpdir/tlslib-o32.so"
+ "-EB -march=mips1 -32 -KPIC" {tlsdyn-o32.s}
+ {{objdump {-dr -m mips:isa32r2} tlsdyn-o32.d} {objdump -Rsj.got tlsdyn-o32.got}}
+ "tls-dynamic-o32"}
+ {"Shared library with multiple GOTs and TLS"
+ "-shared -melf32btsmip -T mips-lib.ld"
+ "-EB -march=mips1 -32 -KPIC" {tls-multi-got-1-1.s tls-multi-got-1-2.s}
+ {{readelf {-d -r} tls-multi-got-1.r}
+ {objdump {-dr -m mips:isa32r2} tls-multi-got-1.d}
+ {objdump -Rsj.got tls-multi-got-1.got}}
+ "tlslib-multi.so"}
+ {"Shared library with TLS and versioning"
+ "-shared -melf32btsmip -T mips-lib.ld --version-script tlslib.ver"
+ "-EB -march=mips1 -32 -KPIC" {tlslib-o32.s}
+ {{objdump {-dr -m mips:isa32r2} tlslib-o32.d} {objdump -Rsj.got tlslib-o32-ver.got}}
+ "tlslib-o32-ver.so"}
+ {"Dynamic executable with TLS and versioning"
+ "-melf32btsmip -T mips-dyn.ld tmpdir/tlslib-o32-ver.so"
+ "-EB -march=mips1 -32 -KPIC" {tlsdyn-o32.s tlsdyn-o32-2.s}
+ {{objdump {-dr -m mips:isa32r2} tlsdyn-o32-1.d} {objdump -Rsj.got tlsdyn-o32-1.got}}
+ "tls-dynamic-o32-ver"}
+ {"Dynamic executable with TLS and versioning (order 2)"
+ "-melf32btsmip -T mips-dyn.ld tmpdir/tlsdyn-o32.o tmpdir/tlslib-o32-ver.so tmpdir/tlsdyn-o32-2.o"
+ "-EB -march=mips1 -32 -KPIC" {}
+ {{objdump {-dr -m mips:isa32r2} tlsdyn-o32-2.d} {objdump -Rsj.got tlsdyn-o32-2.got}}
+ "tls-dynamic-o32-ver-2"}
+ {"Dynamic executable with TLS and versioning (order 3)"
+ "-melf32btsmip -T mips-dyn.ld tmpdir/tlsdyn-o32-2.o tmpdir/tlslib-o32-ver.so tmpdir/tlsdyn-o32.o"
+ "-EB -march=mips1 -32 -KPIC" {}
+ {{objdump {-dr -m mips:isa32r2} tlsdyn-o32-3.d} {objdump -Rsj.got tlsdyn-o32-3.got}}
+ "tls-dynamic-o32-ver-3"}
+ {"Shared library with TLS and hidden symbols"
+ "-shared -melf32btsmip -T mips-lib.ld --version-script tlslib-hidden.ver"
+ "-EB -march=mips1 -32 -KPIC" {tlslib-o32.s}
+ {{objdump {-dr -m mips:isa32r2} tlslib-o32.d} {objdump -Rsj.got tlslib-o32-hidden.got}}
+ "tlslib-o32-hidden.so"}
+ {"Shared library with TLS and hidden symbols (2)"
+ "-shared -melf32btsmip -T mips-lib.ld"
+ "-EB -march=mips1 -32 -KPIC" {tls-hidden2a.s tls-hidden2b.s}
+ {{objdump -drj.text tls-hidden2.d} {objdump -sj.got tls-hidden2-got.d}}
+ "tls-hidden2.so"}
+ {"Shared library with TLS and hidden symbols (3)"
+ "-shared -melf32btsmip -T tls-hidden3.ld"
+ "-EB -march=mips2 -32 -KPIC" {tls-hidden3a.s tls-hidden3b.s}
+ {{objdump -dj.text tls-hidden3.d} {objdump -sj.got tls-hidden3.got}
+ {readelf --relocs tls-hidden3.r}}
+ "tls-hidden3.so"}
+ {"Shared library with TLS and hidden symbols (4)"
+ "-shared -melf32btsmip -T tls-hidden3.ld"
+ "-EB -march=mips2 -32 -KPIC" {tls-hidden4a.s tls-hidden4b.s}
+ {{objdump -sj.got tls-hidden4.got} {readelf --relocs tls-hidden4.r}}
+ "tls-hidden4.so"}
+}
+
+if {[istarget mips*-*-linux*]} {
+ run_ld_link_tests $mips_tls_tests
+}
+
+set mips16_call_global_test [list \
+ [list "Global calls from mips16" \
+ "$o32_ld_flags" \
+ "$o32_as_flags -mips32r2" \
+ {mips16-call-global-1.s mips16-call-global-2.s mips16-call-global-3.s} \
+ {{objdump -dr mips16-call-global.d}} \
+ "mips16-call-global"]]
+
+run_ld_link_tests $mips16_call_global_test
+
+set mips16_intermix_test [list \
+ [list "Intermixing mips32 and mips16 functions" \
+ "$o32_ld_flags" \
+ "$o32_as_flags -mips32r2" \
+ {mips16-intermix-1.s mips16-intermix-2.s} \
+ {{objdump -t mips16-intermix.d}} \
+ "mips16-intermix"]]
+
+run_ld_link_tests $mips16_intermix_test
+
+run_dump_test "mips16-local-stubs-1"
+
+run_dump_test "attr-gnu-4-00"
+run_dump_test "attr-gnu-4-01"
+run_dump_test "attr-gnu-4-02"
+run_dump_test "attr-gnu-4-03"
+run_dump_test "attr-gnu-4-04"
+run_dump_test "attr-gnu-4-05"
+run_dump_test "attr-gnu-4-10"
+run_dump_test "attr-gnu-4-11"
+run_dump_test "attr-gnu-4-12"
+run_dump_test "attr-gnu-4-13"
+run_dump_test "attr-gnu-4-14"
+run_dump_test "attr-gnu-4-15"
+run_dump_test "attr-gnu-4-20"
+run_dump_test "attr-gnu-4-21"
+run_dump_test "attr-gnu-4-22"
+run_dump_test "attr-gnu-4-23"
+run_dump_test "attr-gnu-4-24"
+run_dump_test "attr-gnu-4-25"
+run_dump_test "attr-gnu-4-30"
+run_dump_test "attr-gnu-4-31"
+run_dump_test "attr-gnu-4-32"
+run_dump_test "attr-gnu-4-33"
+run_dump_test "attr-gnu-4-34"
+run_dump_test "attr-gnu-4-35"
+run_dump_test "attr-gnu-4-40"
+run_dump_test "attr-gnu-4-41"
+run_dump_test "attr-gnu-4-42"
+run_dump_test "attr-gnu-4-43"
+run_dump_test "attr-gnu-4-44"
+run_dump_test "attr-gnu-4-45"
+run_dump_test "attr-gnu-4-51"
+
+if { $linux_gnu } {
+ run_ld_link_tests {
+ {"GOT and versioning 1"
+ "-shared -melf32btsmip --version-script got-vers-1.ver"
+ "-EB -mips2 -32" {got-vers-1a.s got-vers-1b.s}
+ {{readelf -d got-vers-1.dd}
+ {readelf --symbols got-vers-1.sd}
+ {readelf --relocs got-vers-1.rd}}
+ "got-vers-1.so"}
+ }
+}
+
+run_dump_test "undefined"
+
+# Test the conversion from jr to b
+if { $linux_gnu } {
+ run_dump_test "jr-to-b-1"
+ run_dump_test "jr-to-b-2"
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips-lib.ld b/binutils-2.21/ld/testsuite/ld-mips-elf/mips-lib.ld
new file mode 100644
index 0000000..10b4140
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips-lib.ld
@@ -0,0 +1,218 @@
+/* Script for --shared -z combreloc: shared library, combine & sort relocs */
+OUTPUT_FORMAT("elf32-tradbigmips", "elf32-tradbigmips",
+ "elf32-tradlittlemips")
+OUTPUT_ARCH(mips)
+ENTRY(__start)
+SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
+/* Do we need any of these for elf?
+ __DYNAMIC = 0; */
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ . = 0 + SIZEOF_HEADERS;
+ .reginfo : { *(.reginfo) }
+ .dynamic : { *(.dynamic) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ .gnu.version : { *(.gnu.version) }
+ .gnu.version_d : { *(.gnu.version_d) }
+ .gnu.version_r : { *(.gnu.version_r) }
+ .rel.dyn :
+ {
+ *(.rel.init)
+ *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+ *(.rel.fini)
+ *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+ *(.rel.data.rel.ro*)
+ *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+ *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+ *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+ *(.rel.ctors)
+ *(.rel.dtors)
+ *(.rel.got)
+ *(.rel.sdata .rel.sdata.* .rel.gnu.linkonce.s.*)
+ *(.rel.sbss .rel.sbss.* .rel.gnu.linkonce.sb.*)
+ *(.rel.sdata2 .rel.sdata2.* .rel.gnu.linkonce.s2.*)
+ *(.rel.sbss2 .rel.sbss2.* .rel.gnu.linkonce.sb2.*)
+ *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+ }
+ .rela.dyn :
+ {
+ *(.rela.init)
+ *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+ *(.rela.fini)
+ *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+ *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+ *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+ *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+ *(.rela.ctors)
+ *(.rela.dtors)
+ *(.rela.got)
+ *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*)
+ *(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*)
+ *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*)
+ *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*)
+ *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+ }
+ .rel.plt : { *(.rel.plt) }
+ .rela.plt : { *(.rela.plt) }
+ .init :
+ {
+ KEEP (*(.init))
+ } =0
+ .plt : { *(.plt) }
+ .text :
+ {
+ _ftext = . ;
+ *(.text .stub .text.* .gnu.linkonce.t.*)
+ KEEP (*(.text.*personality*))
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ *(.mips16.fn.*) *(.mips16.call.*)
+ } =0
+ .fini :
+ {
+ KEEP (*(.fini))
+ } =0
+ PROVIDE (__etext = .);
+ PROVIDE (_etext = .);
+ PROVIDE (etext = .);
+ .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+ .rodata1 : { *(.rodata1) }
+ .eh_frame_hdr : { *(.eh_frame_hdr) }
+ .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) }
+ .gcc_except_table : ONLY_IF_RO { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) }
+ /* Adjust the address for the data segment. We want to adjust up to
+ the same address within the page on the next page up. */
+ . = ALIGN (0x40000) - ((0x40000 - .) & (0x40000 - 1)); . = DATA_SEGMENT_ALIGN (0x40000, 0x1000);
+ /* Exception handling */
+ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) }
+ .gcc_except_table : ONLY_IF_RW { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) }
+ /* Thread Local Storage sections */
+ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
+ .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+ /* Ensure the __preinit_array_start label is properly aligned. We
+ could instead move the label definition inside the section, but
+ the linker would then create the section even if it turns out to
+ be empty, which isn't pretty. */
+ . = ALIGN(32 / 8);
+ .preinit_array : { KEEP (*(.preinit_array)) }
+ .init_array : { KEEP (*(.init_array)) }
+ .fini_array : { KEEP (*(.fini_array)) }
+ .ctors :
+ {
+ /* gcc uses crtbegin.o to find the start of
+ the constructors, so we make sure it is
+ first. Because this is a wildcard, it
+ doesn't matter if the user does not
+ actually link against crtbegin.o; the
+ linker won't look for a file to match a
+ wildcard. The wildcard also means that it
+ doesn't matter which directory crtbegin.o
+ is in. */
+ KEEP (*crtbegin*.o(.ctors))
+ /* We don't want to include the .ctor section from
+ from the crtend.o file until after the sorted ctors.
+ The .ctor section from the crtend file contains the
+ end of ctors marker and it must be last */
+ KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ }
+ .dtors :
+ {
+ KEEP (*crtbegin*.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ }
+ .jcr : { KEEP (*(.jcr)) }
+ .data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) }
+ . = DATA_SEGMENT_RELRO_END (0, .);
+ .data :
+ {
+ _fdata = . ;
+ *(.data .data.* .gnu.linkonce.d.*)
+ KEEP (*(.gnu.linkonce.d.*personality*))
+ SORT(CONSTRUCTORS)
+ }
+ .data1 : { *(.data1) }
+ _gp = ALIGN(16) + 0x7ff0;
+ .got : { *(.got.plt) *(.got) }
+ .sdata2 : { *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) }
+ .sbss2 : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) }
+ /* We want the small data sections together, so single-instruction offsets
+ can access them all, and initialized data all before uninitialized, so
+ we can shorten the on-disk segment size. */
+ .sdata :
+ {
+ *(.sdata .sdata.* .gnu.linkonce.s.*)
+ }
+ .lit8 : { *(.lit8) }
+ .lit4 : { *(.lit4) }
+ _edata = .;
+ PROVIDE (edata = .);
+ __bss_start = .;
+ _fbss = .;
+ .sbss :
+ {
+ PROVIDE (__sbss_start = .);
+ PROVIDE (___sbss_start = .);
+ *(.dynsbss)
+ *(.sbss .sbss.* .gnu.linkonce.sb.*)
+ *(.scommon)
+ PROVIDE (__sbss_end = .);
+ PROVIDE (___sbss_end = .);
+ }
+ .bss :
+ {
+ *(.dynbss)
+ *(.bss .bss.* .gnu.linkonce.b.*)
+ *(COMMON)
+ /* Align here to ensure that the .bss section occupies space up to
+ _end. Align after .bss to ensure correct alignment even if the
+ .bss section disappears because there are no input sections. */
+ . = ALIGN(32 / 8);
+ }
+ . = ALIGN(32 / 8);
+ _end = .;
+ PROVIDE (end = .);
+ . = DATA_SEGMENT_END (.);
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames) }
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames) }
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
+ .debug_abbrev 0 : { *(.debug_abbrev) }
+ .debug_line 0 : { *(.debug_line) }
+ .debug_frame 0 : { *(.debug_frame) }
+ .debug_str 0 : { *(.debug_str) }
+ .debug_loc 0 : { *(.debug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo) }
+ /* SGI/MIPS DWARF 2 extensions */
+ .debug_weaknames 0 : { *(.debug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames) }
+ .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) }
+ .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) }
+ /DISCARD/ : { *(.note.GNU-stack) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-1.d b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-1.d
new file mode 100644
index 0000000..77d1316
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-1.d
@@ -0,0 +1,9 @@
+#source: mips16-1a.s -no-mips16
+#source: mips16-1b.s -mips16
+#ld: -r
+#objdump: -pd
+
+.*:.*file format.*mips.*
+private flags = [0-9a-f]*[4-7c-f]......: .*[[,]mips16[],].*
+
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-1a.s b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-1a.s
new file mode 100644
index 0000000..a361a65
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-1a.s
@@ -0,0 +1,2 @@
+ .text
+foo1: jr $31
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-1b.s b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-1b.s
new file mode 100644
index 0000000..11e36f7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-1b.s
@@ -0,0 +1,2 @@
+ .text
+foo2: jr $31
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-call-global-1.s b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-call-global-1.s
new file mode 100644
index 0000000..1e60bcc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-call-global-1.s
@@ -0,0 +1,12 @@
+ .set mips16
+
+ .globl __start
+ .ent __start
+__start:
+ .frame $sp,24,$31
+ save 24,$31
+ jal x+8
+ jal y+8
+ restore 24,$31
+ j $31
+ .end __start
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-call-global-2.s b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-call-global-2.s
new file mode 100644
index 0000000..2843fcd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-call-global-2.s
@@ -0,0 +1,8 @@
+ .set mips16
+
+ .globl x
+ .ent x
+ .type x,@function
+x:
+ jr $31
+ .end x
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-call-global-3.s b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-call-global-3.s
new file mode 100644
index 0000000..5113c5d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-call-global-3.s
@@ -0,0 +1,16 @@
+ .set nomips16
+
+ .globl y
+ .ent y
+ .type y,@function
+y:
+ jr $31
+ .end y
+
+ .ent z
+ .type z,@function
+z:
+ jr $31
+ .end z
+
+ .space 8
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-call-global.d b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-call-global.d
new file mode 100644
index 0000000..051ebcd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-call-global.d
@@ -0,0 +1,39 @@
+
+.*: file format elf.*mips
+
+Disassembly of section .text:
+
+.*0090 <__start>:
+.*0090: 64c3 save 24,ra
+.*0092: 1a00 002e jal .*00b8 <x\+0x8>
+.*0096: 6500 nop
+.*0098: 1e00 0032 jalx .*00c8 <z>
+.*009c: 6500 nop
+.*009e: 6443 restore 24,ra
+.*00a0: e8a0 jrc ra
+.*00a2: 6500 nop
+.*00a4: 6500 nop
+.*00a6: 6500 nop
+.*00a8: 6500 nop
+.*00aa: 6500 nop
+.*00ac: 6500 nop
+.*00ae: 6500 nop
+
+.*00b0 <x>:
+.*00b0: e8a0 jrc ra
+.*00b2: 6500 nop
+.*00b4: 6500 nop
+.*00b6: 6500 nop
+.*00b8: 6500 nop
+.*00ba: 6500 nop
+.*00bc: 6500 nop
+.*00be: 6500 nop
+
+.*00c0 <y>:
+.*00c0: 03e00008 jr ra
+.*00c4: 00000000 nop
+
+.*00c8 <z>:
+.*00c8: 03e00008 jr ra
+.*00cc: 00000000 nop
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-hilo-n32.d b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-hilo-n32.d
new file mode 100644
index 0000000..28c2b61
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-hilo-n32.d
@@ -0,0 +1,338 @@
+#name: R_MIPS16_HI16 and R_MIPS16_LO16 relocs n32
+#source: ../../../gas/testsuite/gas/mips/mips16-hilo.s
+#source: mips16-hilo.s
+#as: -march=mips64 -mabi=n32 -EB
+#objdump: -mmips:16 --prefix-addresses -tdr --show-raw-insn
+#ld: -Tmips16-hilo.ld -e 0x500000 -N -melf32btsmipn32
+
+.*: file format elf.*mips.*
+
+#...
+
+Disassembly of section .text:
+0+500000 <[^>]*> 6c00 li a0,0
+0+500002 <[^>]*> f400 3480 sll a0,16
+0+500006 <[^>]*> 4c00 addiu a0,0
+0+500008 <[^>]*> f060 6c05 li a0,101
+0+50000c <[^>]*> f400 3480 sll a0,16
+0+500010 <[^>]*> f328 4c00 addiu a0,17184
+0+500014 <[^>]*> f060 6c05 li a0,101
+0+500018 <[^>]*> f400 3480 sll a0,16
+0+50001c <[^>]*> f328 4c04 addiu a0,17188
+0+500020 <[^>]*> f060 6c05 li a0,101
+0+500024 <[^>]*> f400 3480 sll a0,16
+0+500028 <[^>]*> f328 4c10 addiu a0,17200
+0+50002c <[^>]*> f060 6c05 li a0,101
+0+500030 <[^>]*> f400 3480 sll a0,16
+0+500034 <[^>]*> f728 4c00 addiu a0,18208
+0+500038 <[^>]*> f060 6c16 li a0,118
+0+50003c <[^>]*> f400 3480 sll a0,16
+0+500040 <[^>]*> f02b 4c00 addiu a0,22560
+0+500044 <[^>]*> f060 6c16 li a0,118
+0+500048 <[^>]*> f400 3480 sll a0,16
+0+50004c <[^>]*> f40b 4c09 addiu a0,23561
+0+500050 <[^>]*> f060 6c16 li a0,118
+0+500054 <[^>]*> f400 3480 sll a0,16
+0+500058 <[^>]*> f42a 4c10 addiu a0,21552
+0+50005c <[^>]*> f060 6c16 li a0,118
+0+500060 <[^>]*> f400 3480 sll a0,16
+0+500064 <[^>]*> f40b 4c08 addiu a0,23560
+0+500068 <[^>]*> 6c00 li a0,0
+0+50006a <[^>]*> f400 3480 sll a0,16
+0+50006e <[^>]*> 4c01 addiu a0,1
+0+500070 <[^>]*> f060 6c05 li a0,101
+0+500074 <[^>]*> f400 3480 sll a0,16
+0+500078 <[^>]*> f328 4c01 addiu a0,17185
+0+50007c <[^>]*> f060 6c05 li a0,101
+0+500080 <[^>]*> f400 3480 sll a0,16
+0+500084 <[^>]*> f328 4c05 addiu a0,17189
+0+500088 <[^>]*> f060 6c05 li a0,101
+0+50008c <[^>]*> f400 3480 sll a0,16
+0+500090 <[^>]*> f328 4c11 addiu a0,17201
+0+500094 <[^>]*> f060 6c05 li a0,101
+0+500098 <[^>]*> f400 3480 sll a0,16
+0+50009c <[^>]*> f728 4c01 addiu a0,18209
+0+5000a0 <[^>]*> f060 6c16 li a0,118
+0+5000a4 <[^>]*> f400 3480 sll a0,16
+0+5000a8 <[^>]*> f02b 4c01 addiu a0,22561
+0+5000ac <[^>]*> f060 6c16 li a0,118
+0+5000b0 <[^>]*> f400 3480 sll a0,16
+0+5000b4 <[^>]*> f40b 4c0a addiu a0,23562
+0+5000b8 <[^>]*> f060 6c16 li a0,118
+0+5000bc <[^>]*> f400 3480 sll a0,16
+0+5000c0 <[^>]*> f42a 4c11 addiu a0,21553
+0+5000c4 <[^>]*> f060 6c16 li a0,118
+0+5000c8 <[^>]*> f400 3480 sll a0,16
+0+5000cc <[^>]*> f40b 4c09 addiu a0,23561
+0+5000d0 <[^>]*> 6c01 li a0,1
+0+5000d2 <[^>]*> f400 3480 sll a0,16
+0+5000d6 <[^>]*> f010 4c00 addiu a0,-32768
+0+5000da <[^>]*> f060 6c06 li a0,102
+0+5000de <[^>]*> f400 3480 sll a0,16
+0+5000e2 <[^>]*> f338 4c00 addiu a0,-15584
+0+5000e6 <[^>]*> f060 6c06 li a0,102
+0+5000ea <[^>]*> f400 3480 sll a0,16
+0+5000ee <[^>]*> f338 4c04 addiu a0,-15580
+0+5000f2 <[^>]*> f060 6c06 li a0,102
+0+5000f6 <[^>]*> f400 3480 sll a0,16
+0+5000fa <[^>]*> f338 4c10 addiu a0,-15568
+0+5000fe <[^>]*> f060 6c06 li a0,102
+0+500102 <[^>]*> f400 3480 sll a0,16
+0+500106 <[^>]*> f738 4c00 addiu a0,-14560
+0+50010a <[^>]*> f060 6c17 li a0,119
+0+50010e <[^>]*> f400 3480 sll a0,16
+0+500112 <[^>]*> f03b 4c00 addiu a0,-10208
+0+500116 <[^>]*> f060 6c17 li a0,119
+0+50011a <[^>]*> f400 3480 sll a0,16
+0+50011e <[^>]*> f41b 4c09 addiu a0,-9207
+0+500122 <[^>]*> f060 6c17 li a0,119
+0+500126 <[^>]*> f400 3480 sll a0,16
+0+50012a <[^>]*> f43a 4c10 addiu a0,-11216
+0+50012e <[^>]*> f060 6c17 li a0,119
+0+500132 <[^>]*> f400 3480 sll a0,16
+0+500136 <[^>]*> f41b 4c08 addiu a0,-9208
+0+50013a <[^>]*> 6c00 li a0,0
+0+50013c <[^>]*> f400 3480 sll a0,16
+0+500140 <[^>]*> f010 4c00 addiu a0,-32768
+0+500144 <[^>]*> f060 6c05 li a0,101
+0+500148 <[^>]*> f400 3480 sll a0,16
+0+50014c <[^>]*> f338 4c00 addiu a0,-15584
+0+500150 <[^>]*> f060 6c05 li a0,101
+0+500154 <[^>]*> f400 3480 sll a0,16
+0+500158 <[^>]*> f338 4c04 addiu a0,-15580
+0+50015c <[^>]*> f060 6c05 li a0,101
+0+500160 <[^>]*> f400 3480 sll a0,16
+0+500164 <[^>]*> f338 4c10 addiu a0,-15568
+0+500168 <[^>]*> f060 6c05 li a0,101
+0+50016c <[^>]*> f400 3480 sll a0,16
+0+500170 <[^>]*> f738 4c00 addiu a0,-14560
+0+500174 <[^>]*> f060 6c16 li a0,118
+0+500178 <[^>]*> f400 3480 sll a0,16
+0+50017c <[^>]*> f03b 4c00 addiu a0,-10208
+0+500180 <[^>]*> f060 6c16 li a0,118
+0+500184 <[^>]*> f400 3480 sll a0,16
+0+500188 <[^>]*> f41b 4c09 addiu a0,-9207
+0+50018c <[^>]*> f060 6c16 li a0,118
+0+500190 <[^>]*> f400 3480 sll a0,16
+0+500194 <[^>]*> f43a 4c10 addiu a0,-11216
+0+500198 <[^>]*> f060 6c16 li a0,118
+0+50019c <[^>]*> f400 3480 sll a0,16
+0+5001a0 <[^>]*> f41b 4c08 addiu a0,-9208
+0+5001a4 <[^>]*> 6c01 li a0,1
+0+5001a6 <[^>]*> f400 3480 sll a0,16
+0+5001aa <[^>]*> 4c00 addiu a0,0
+0+5001ac <[^>]*> f060 6c06 li a0,102
+0+5001b0 <[^>]*> f400 3480 sll a0,16
+0+5001b4 <[^>]*> f328 4c00 addiu a0,17184
+0+5001b8 <[^>]*> f060 6c06 li a0,102
+0+5001bc <[^>]*> f400 3480 sll a0,16
+0+5001c0 <[^>]*> f328 4c04 addiu a0,17188
+0+5001c4 <[^>]*> f060 6c06 li a0,102
+0+5001c8 <[^>]*> f400 3480 sll a0,16
+0+5001cc <[^>]*> f328 4c10 addiu a0,17200
+0+5001d0 <[^>]*> f060 6c06 li a0,102
+0+5001d4 <[^>]*> f400 3480 sll a0,16
+0+5001d8 <[^>]*> f728 4c00 addiu a0,18208
+0+5001dc <[^>]*> f060 6c17 li a0,119
+0+5001e0 <[^>]*> f400 3480 sll a0,16
+0+5001e4 <[^>]*> f02b 4c00 addiu a0,22560
+0+5001e8 <[^>]*> f060 6c17 li a0,119
+0+5001ec <[^>]*> f400 3480 sll a0,16
+0+5001f0 <[^>]*> f40b 4c09 addiu a0,23561
+0+5001f4 <[^>]*> f060 6c17 li a0,119
+0+5001f8 <[^>]*> f400 3480 sll a0,16
+0+5001fc <[^>]*> f42a 4c10 addiu a0,21552
+0+500200 <[^>]*> f060 6c17 li a0,119
+0+500204 <[^>]*> f400 3480 sll a0,16
+0+500208 <[^>]*> f40b 4c08 addiu a0,23560
+0+50020c <[^>]*> 6c02 li a0,2
+0+50020e <[^>]*> f400 3480 sll a0,16
+0+500212 <[^>]*> f5b4 4c05 addiu a0,-23131
+0+500216 <[^>]*> f060 6c07 li a0,103
+0+50021a <[^>]*> f400 3480 sll a0,16
+0+50021e <[^>]*> f0dd 4c05 addiu a0,-5947
+0+500222 <[^>]*> f060 6c07 li a0,103
+0+500226 <[^>]*> f400 3480 sll a0,16
+0+50022a <[^>]*> f0dd 4c09 addiu a0,-5943
+0+50022e <[^>]*> f060 6c07 li a0,103
+0+500232 <[^>]*> f400 3480 sll a0,16
+0+500236 <[^>]*> f0dd 4c15 addiu a0,-5931
+0+50023a <[^>]*> f060 6c07 li a0,103
+0+50023e <[^>]*> f400 3480 sll a0,16
+0+500242 <[^>]*> f4dd 4c05 addiu a0,-4923
+0+500246 <[^>]*> f060 6c18 li a0,120
+0+50024a <[^>]*> f400 3480 sll a0,16
+0+50024e <[^>]*> f5df 4c05 addiu a0,-571
+0+500252 <[^>]*> f060 6c18 li a0,120
+0+500256 <[^>]*> f400 3480 sll a0,16
+0+50025a <[^>]*> f1a0 4c0e addiu a0,430
+0+50025e <[^>]*> f060 6c18 li a0,120
+0+500262 <[^>]*> f400 3480 sll a0,16
+0+500266 <[^>]*> f1df 4c15 addiu a0,-1579
+0+50026a <[^>]*> f060 6c18 li a0,120
+0+50026e <[^>]*> f400 3480 sll a0,16
+0+500272 <[^>]*> f1a0 4c0d addiu a0,429
+0+500276 <[^>]*> 6d00 li a1,0
+0+500278 <[^>]*> f400 35a0 sll a1,16
+0+50027c <[^>]*> 9d80 lw a0,0\(a1\)
+0+50027e <[^>]*> f060 6d05 li a1,101
+0+500282 <[^>]*> f400 35a0 sll a1,16
+0+500286 <[^>]*> f060 9d85 lw a0,101\(a1\)
+0+50028a <[^>]*> f060 6d05 li a1,101
+0+50028e <[^>]*> f400 35a0 sll a1,16
+0+500292 <[^>]*> f060 9d85 lw a0,101\(a1\)
+0+500296 <[^>]*> f060 6d05 li a1,101
+0+50029a <[^>]*> f400 35a0 sll a1,16
+0+50029e <[^>]*> f328 9d90 lw a0,17200\(a1\)
+0+5002a2 <[^>]*> f060 6d05 li a1,101
+0+5002a6 <[^>]*> f400 35a0 sll a1,16
+0+5002aa <[^>]*> f728 9d80 lw a0,18208\(a1\)
+0+5002ae <[^>]*> f060 6d16 li a1,118
+0+5002b2 <[^>]*> f400 35a0 sll a1,16
+0+5002b6 <[^>]*> f02b 9d80 lw a0,22560\(a1\)
+0+5002ba <[^>]*> f060 6d16 li a1,118
+0+5002be <[^>]*> f400 35a0 sll a1,16
+0+5002c2 <[^>]*> f40b 9d89 lw a0,23561\(a1\)
+0+5002c6 <[^>]*> f060 6d16 li a1,118
+0+5002ca <[^>]*> f400 35a0 sll a1,16
+0+5002ce <[^>]*> f42a 9d90 lw a0,21552\(a1\)
+0+5002d2 <[^>]*> f060 6d16 li a1,118
+0+5002d6 <[^>]*> f400 35a0 sll a1,16
+0+5002da <[^>]*> f40b 9d88 lw a0,23560\(a1\)
+0+5002de <[^>]*> 6d00 li a1,0
+0+5002e0 <[^>]*> f400 35a0 sll a1,16
+0+5002e4 <[^>]*> f000 9d81 lw a0,1\(a1\)
+0+5002e8 <[^>]*> f060 6d05 li a1,101
+0+5002ec <[^>]*> f400 35a0 sll a1,16
+0+5002f0 <[^>]*> f328 9d81 lw a0,17185\(a1\)
+0+5002f4 <[^>]*> f060 6d05 li a1,101
+0+5002f8 <[^>]*> f400 35a0 sll a1,16
+0+5002fc <[^>]*> f328 9d85 lw a0,17189\(a1\)
+0+500300 <[^>]*> f060 6d05 li a1,101
+0+500304 <[^>]*> f400 35a0 sll a1,16
+0+500308 <[^>]*> f328 9d91 lw a0,17201\(a1\)
+0+50030c <[^>]*> f060 6d05 li a1,101
+0+500310 <[^>]*> f400 35a0 sll a1,16
+0+500314 <[^>]*> f728 9d81 lw a0,18209\(a1\)
+0+500318 <[^>]*> f060 6d16 li a1,118
+0+50031c <[^>]*> f400 35a0 sll a1,16
+0+500320 <[^>]*> f02b 9d81 lw a0,22561\(a1\)
+0+500324 <[^>]*> f060 6d16 li a1,118
+0+500328 <[^>]*> f400 35a0 sll a1,16
+0+50032c <[^>]*> f40b 9d8a lw a0,23562\(a1\)
+0+500330 <[^>]*> f060 6d16 li a1,118
+0+500334 <[^>]*> f400 35a0 sll a1,16
+0+500338 <[^>]*> f42a 9d91 lw a0,21553\(a1\)
+0+50033c <[^>]*> f060 6d16 li a1,118
+0+500340 <[^>]*> f400 35a0 sll a1,16
+0+500344 <[^>]*> f40b 9d89 lw a0,23561\(a1\)
+0+500348 <[^>]*> 6d01 li a1,1
+0+50034a <[^>]*> f400 35a0 sll a1,16
+0+50034e <[^>]*> f010 9d80 lw a0,-32768\(a1\)
+0+500352 <[^>]*> f060 6d06 li a1,102
+0+500356 <[^>]*> f400 35a0 sll a1,16
+0+50035a <[^>]*> f338 9d80 lw a0,-15584\(a1\)
+0+50035e <[^>]*> f060 6d06 li a1,102
+0+500362 <[^>]*> f400 35a0 sll a1,16
+0+500366 <[^>]*> f338 9d84 lw a0,-15580\(a1\)
+0+50036a <[^>]*> f060 6d06 li a1,102
+0+50036e <[^>]*> f400 35a0 sll a1,16
+0+500372 <[^>]*> f338 9d90 lw a0,-15568\(a1\)
+0+500376 <[^>]*> f060 6d06 li a1,102
+0+50037a <[^>]*> f400 35a0 sll a1,16
+0+50037e <[^>]*> f738 9d80 lw a0,-14560\(a1\)
+0+500382 <[^>]*> f060 6d17 li a1,119
+0+500386 <[^>]*> f400 35a0 sll a1,16
+0+50038a <[^>]*> f03b 9d80 lw a0,-10208\(a1\)
+0+50038e <[^>]*> f060 6d17 li a1,119
+0+500392 <[^>]*> f400 35a0 sll a1,16
+0+500396 <[^>]*> f41b 9d89 lw a0,-9207\(a1\)
+0+50039a <[^>]*> f060 6d17 li a1,119
+0+50039e <[^>]*> f400 35a0 sll a1,16
+0+5003a2 <[^>]*> f43a 9d90 lw a0,-11216\(a1\)
+0+5003a6 <[^>]*> f060 6d17 li a1,119
+0+5003aa <[^>]*> f400 35a0 sll a1,16
+0+5003ae <[^>]*> f41b 9d88 lw a0,-9208\(a1\)
+0+5003b2 <[^>]*> 6d00 li a1,0
+0+5003b4 <[^>]*> f400 35a0 sll a1,16
+0+5003b8 <[^>]*> f010 9d80 lw a0,-32768\(a1\)
+0+5003bc <[^>]*> f060 6d05 li a1,101
+0+5003c0 <[^>]*> f400 35a0 sll a1,16
+0+5003c4 <[^>]*> f338 9d80 lw a0,-15584\(a1\)
+0+5003c8 <[^>]*> f060 6d05 li a1,101
+0+5003cc <[^>]*> f400 35a0 sll a1,16
+0+5003d0 <[^>]*> f338 9d84 lw a0,-15580\(a1\)
+0+5003d4 <[^>]*> f060 6d05 li a1,101
+0+5003d8 <[^>]*> f400 35a0 sll a1,16
+0+5003dc <[^>]*> f338 9d90 lw a0,-15568\(a1\)
+0+5003e0 <[^>]*> f060 6d05 li a1,101
+0+5003e4 <[^>]*> f400 35a0 sll a1,16
+0+5003e8 <[^>]*> f738 9d80 lw a0,-14560\(a1\)
+0+5003ec <[^>]*> f060 6d16 li a1,118
+0+5003f0 <[^>]*> f400 35a0 sll a1,16
+0+5003f4 <[^>]*> f03b 9d80 lw a0,-10208\(a1\)
+0+5003f8 <[^>]*> f060 6d16 li a1,118
+0+5003fc <[^>]*> f400 35a0 sll a1,16
+0+500400 <[^>]*> f41b 9d89 lw a0,-9207\(a1\)
+0+500404 <[^>]*> f060 6d16 li a1,118
+0+500408 <[^>]*> f400 35a0 sll a1,16
+0+50040c <[^>]*> f43a 9d90 lw a0,-11216\(a1\)
+0+500410 <[^>]*> f060 6d16 li a1,118
+0+500414 <[^>]*> f400 35a0 sll a1,16
+0+500418 <[^>]*> f41b 9d88 lw a0,-9208\(a1\)
+0+50041c <[^>]*> 6d01 li a1,1
+0+50041e <[^>]*> f400 35a0 sll a1,16
+0+500422 <[^>]*> 9d80 lw a0,0\(a1\)
+0+500424 <[^>]*> f060 6d06 li a1,102
+0+500428 <[^>]*> f400 35a0 sll a1,16
+0+50042c <[^>]*> f328 9d80 lw a0,17184\(a1\)
+0+500430 <[^>]*> f060 6d06 li a1,102
+0+500434 <[^>]*> f400 35a0 sll a1,16
+0+500438 <[^>]*> f328 9d84 lw a0,17188\(a1\)
+0+50043c <[^>]*> f060 6d06 li a1,102
+0+500440 <[^>]*> f400 35a0 sll a1,16
+0+500444 <[^>]*> f328 9d90 lw a0,17200\(a1\)
+0+500448 <[^>]*> f060 6d06 li a1,102
+0+50044c <[^>]*> f400 35a0 sll a1,16
+0+500450 <[^>]*> f728 9d80 lw a0,18208\(a1\)
+0+500454 <[^>]*> f060 6d17 li a1,119
+0+500458 <[^>]*> f400 35a0 sll a1,16
+0+50045c <[^>]*> f02b 9d80 lw a0,22560\(a1\)
+0+500460 <[^>]*> f060 6d17 li a1,119
+0+500464 <[^>]*> f400 35a0 sll a1,16
+0+500468 <[^>]*> f40b 9d89 lw a0,23561\(a1\)
+0+50046c <[^>]*> f060 6d17 li a1,119
+0+500470 <[^>]*> f400 35a0 sll a1,16
+0+500474 <[^>]*> f42a 9d90 lw a0,21552\(a1\)
+0+500478 <[^>]*> f060 6d17 li a1,119
+0+50047c <[^>]*> f400 35a0 sll a1,16
+0+500480 <[^>]*> f40b 9d88 lw a0,23560\(a1\)
+0+500484 <[^>]*> 6d02 li a1,2
+0+500486 <[^>]*> f400 35a0 sll a1,16
+0+50048a <[^>]*> f5b4 9d85 lw a0,-23131\(a1\)
+0+50048e <[^>]*> f060 6d07 li a1,103
+0+500492 <[^>]*> f400 35a0 sll a1,16
+0+500496 <[^>]*> f0dd 9d85 lw a0,-5947\(a1\)
+0+50049a <[^>]*> f060 6d07 li a1,103
+0+50049e <[^>]*> f400 35a0 sll a1,16
+0+5004a2 <[^>]*> f0dd 9d89 lw a0,-5943\(a1\)
+0+5004a6 <[^>]*> f060 6d07 li a1,103
+0+5004aa <[^>]*> f400 35a0 sll a1,16
+0+5004ae <[^>]*> f0dd 9d95 lw a0,-5931\(a1\)
+0+5004b2 <[^>]*> f060 6d07 li a1,103
+0+5004b6 <[^>]*> f400 35a0 sll a1,16
+0+5004ba <[^>]*> f4dd 9d85 lw a0,-4923\(a1\)
+0+5004be <[^>]*> f060 6d18 li a1,120
+0+5004c2 <[^>]*> f400 35a0 sll a1,16
+0+5004c6 <[^>]*> f5df 9d85 lw a0,-571\(a1\)
+0+5004ca <[^>]*> f060 6d18 li a1,120
+0+5004ce <[^>]*> f400 35a0 sll a1,16
+0+5004d2 <[^>]*> f1a0 9d8e lw a0,430\(a1\)
+0+5004d6 <[^>]*> f060 6d18 li a1,120
+0+5004da <[^>]*> f400 35a0 sll a1,16
+0+5004de <[^>]*> f1df 9d95 lw a0,-1579\(a1\)
+0+5004e2 <[^>]*> f060 6d18 li a1,120
+0+5004e6 <[^>]*> f400 35a0 sll a1,16
+0+5004ea <[^>]*> f1a0 9d8d lw a0,429\(a1\)
+0+5004ee <[^>]*> 6500 nop
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-hilo.d b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-hilo.d
new file mode 100644
index 0000000..5600983
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-hilo.d
@@ -0,0 +1,337 @@
+#name: R_MIPS16_HI16 and R_MIPS16_LO16 relocs
+#source: ../../../gas/testsuite/gas/mips/mips16-hilo.s
+#source: mips16-hilo.s
+#objdump: -mmips:16 --prefix-addresses -tdr --show-raw-insn
+#ld: -Tmips16-hilo.ld -e 0x500000 -N
+
+.*: file format elf.*mips.*
+
+#...
+
+Disassembly of section .text:
+0+500000 <[^>]*> 6c00 li a0,0
+0+500002 <[^>]*> f400 3480 sll a0,16
+0+500006 <[^>]*> 4c00 addiu a0,0
+0+500008 <[^>]*> f060 6c05 li a0,101
+0+50000c <[^>]*> f400 3480 sll a0,16
+0+500010 <[^>]*> f328 4c00 addiu a0,17184
+0+500014 <[^>]*> f060 6c05 li a0,101
+0+500018 <[^>]*> f400 3480 sll a0,16
+0+50001c <[^>]*> f328 4c04 addiu a0,17188
+0+500020 <[^>]*> f060 6c05 li a0,101
+0+500024 <[^>]*> f400 3480 sll a0,16
+0+500028 <[^>]*> f328 4c10 addiu a0,17200
+0+50002c <[^>]*> f060 6c05 li a0,101
+0+500030 <[^>]*> f400 3480 sll a0,16
+0+500034 <[^>]*> f728 4c00 addiu a0,18208
+0+500038 <[^>]*> f060 6c16 li a0,118
+0+50003c <[^>]*> f400 3480 sll a0,16
+0+500040 <[^>]*> f02b 4c00 addiu a0,22560
+0+500044 <[^>]*> f060 6c16 li a0,118
+0+500048 <[^>]*> f400 3480 sll a0,16
+0+50004c <[^>]*> f40b 4c09 addiu a0,23561
+0+500050 <[^>]*> f060 6c16 li a0,118
+0+500054 <[^>]*> f400 3480 sll a0,16
+0+500058 <[^>]*> f42a 4c10 addiu a0,21552
+0+50005c <[^>]*> f060 6c16 li a0,118
+0+500060 <[^>]*> f400 3480 sll a0,16
+0+500064 <[^>]*> f40b 4c08 addiu a0,23560
+0+500068 <[^>]*> 6c00 li a0,0
+0+50006a <[^>]*> f400 3480 sll a0,16
+0+50006e <[^>]*> 4c01 addiu a0,1
+0+500070 <[^>]*> f060 6c05 li a0,101
+0+500074 <[^>]*> f400 3480 sll a0,16
+0+500078 <[^>]*> f328 4c01 addiu a0,17185
+0+50007c <[^>]*> f060 6c05 li a0,101
+0+500080 <[^>]*> f400 3480 sll a0,16
+0+500084 <[^>]*> f328 4c05 addiu a0,17189
+0+500088 <[^>]*> f060 6c05 li a0,101
+0+50008c <[^>]*> f400 3480 sll a0,16
+0+500090 <[^>]*> f328 4c11 addiu a0,17201
+0+500094 <[^>]*> f060 6c05 li a0,101
+0+500098 <[^>]*> f400 3480 sll a0,16
+0+50009c <[^>]*> f728 4c01 addiu a0,18209
+0+5000a0 <[^>]*> f060 6c16 li a0,118
+0+5000a4 <[^>]*> f400 3480 sll a0,16
+0+5000a8 <[^>]*> f02b 4c01 addiu a0,22561
+0+5000ac <[^>]*> f060 6c16 li a0,118
+0+5000b0 <[^>]*> f400 3480 sll a0,16
+0+5000b4 <[^>]*> f40b 4c0a addiu a0,23562
+0+5000b8 <[^>]*> f060 6c16 li a0,118
+0+5000bc <[^>]*> f400 3480 sll a0,16
+0+5000c0 <[^>]*> f42a 4c11 addiu a0,21553
+0+5000c4 <[^>]*> f060 6c16 li a0,118
+0+5000c8 <[^>]*> f400 3480 sll a0,16
+0+5000cc <[^>]*> f40b 4c09 addiu a0,23561
+0+5000d0 <[^>]*> 6c01 li a0,1
+0+5000d2 <[^>]*> f400 3480 sll a0,16
+0+5000d6 <[^>]*> f010 4c00 addiu a0,-32768
+0+5000da <[^>]*> f060 6c06 li a0,102
+0+5000de <[^>]*> f400 3480 sll a0,16
+0+5000e2 <[^>]*> f338 4c00 addiu a0,-15584
+0+5000e6 <[^>]*> f060 6c06 li a0,102
+0+5000ea <[^>]*> f400 3480 sll a0,16
+0+5000ee <[^>]*> f338 4c04 addiu a0,-15580
+0+5000f2 <[^>]*> f060 6c06 li a0,102
+0+5000f6 <[^>]*> f400 3480 sll a0,16
+0+5000fa <[^>]*> f338 4c10 addiu a0,-15568
+0+5000fe <[^>]*> f060 6c06 li a0,102
+0+500102 <[^>]*> f400 3480 sll a0,16
+0+500106 <[^>]*> f738 4c00 addiu a0,-14560
+0+50010a <[^>]*> f060 6c17 li a0,119
+0+50010e <[^>]*> f400 3480 sll a0,16
+0+500112 <[^>]*> f03b 4c00 addiu a0,-10208
+0+500116 <[^>]*> f060 6c17 li a0,119
+0+50011a <[^>]*> f400 3480 sll a0,16
+0+50011e <[^>]*> f41b 4c09 addiu a0,-9207
+0+500122 <[^>]*> f060 6c17 li a0,119
+0+500126 <[^>]*> f400 3480 sll a0,16
+0+50012a <[^>]*> f43a 4c10 addiu a0,-11216
+0+50012e <[^>]*> f060 6c17 li a0,119
+0+500132 <[^>]*> f400 3480 sll a0,16
+0+500136 <[^>]*> f41b 4c08 addiu a0,-9208
+0+50013a <[^>]*> 6c00 li a0,0
+0+50013c <[^>]*> f400 3480 sll a0,16
+0+500140 <[^>]*> f010 4c00 addiu a0,-32768
+0+500144 <[^>]*> f060 6c05 li a0,101
+0+500148 <[^>]*> f400 3480 sll a0,16
+0+50014c <[^>]*> f338 4c00 addiu a0,-15584
+0+500150 <[^>]*> f060 6c05 li a0,101
+0+500154 <[^>]*> f400 3480 sll a0,16
+0+500158 <[^>]*> f338 4c04 addiu a0,-15580
+0+50015c <[^>]*> f060 6c05 li a0,101
+0+500160 <[^>]*> f400 3480 sll a0,16
+0+500164 <[^>]*> f338 4c10 addiu a0,-15568
+0+500168 <[^>]*> f060 6c05 li a0,101
+0+50016c <[^>]*> f400 3480 sll a0,16
+0+500170 <[^>]*> f738 4c00 addiu a0,-14560
+0+500174 <[^>]*> f060 6c16 li a0,118
+0+500178 <[^>]*> f400 3480 sll a0,16
+0+50017c <[^>]*> f03b 4c00 addiu a0,-10208
+0+500180 <[^>]*> f060 6c16 li a0,118
+0+500184 <[^>]*> f400 3480 sll a0,16
+0+500188 <[^>]*> f41b 4c09 addiu a0,-9207
+0+50018c <[^>]*> f060 6c16 li a0,118
+0+500190 <[^>]*> f400 3480 sll a0,16
+0+500194 <[^>]*> f43a 4c10 addiu a0,-11216
+0+500198 <[^>]*> f060 6c16 li a0,118
+0+50019c <[^>]*> f400 3480 sll a0,16
+0+5001a0 <[^>]*> f41b 4c08 addiu a0,-9208
+0+5001a4 <[^>]*> 6c01 li a0,1
+0+5001a6 <[^>]*> f400 3480 sll a0,16
+0+5001aa <[^>]*> 4c00 addiu a0,0
+0+5001ac <[^>]*> f060 6c06 li a0,102
+0+5001b0 <[^>]*> f400 3480 sll a0,16
+0+5001b4 <[^>]*> f328 4c00 addiu a0,17184
+0+5001b8 <[^>]*> f060 6c06 li a0,102
+0+5001bc <[^>]*> f400 3480 sll a0,16
+0+5001c0 <[^>]*> f328 4c04 addiu a0,17188
+0+5001c4 <[^>]*> f060 6c06 li a0,102
+0+5001c8 <[^>]*> f400 3480 sll a0,16
+0+5001cc <[^>]*> f328 4c10 addiu a0,17200
+0+5001d0 <[^>]*> f060 6c06 li a0,102
+0+5001d4 <[^>]*> f400 3480 sll a0,16
+0+5001d8 <[^>]*> f728 4c00 addiu a0,18208
+0+5001dc <[^>]*> f060 6c17 li a0,119
+0+5001e0 <[^>]*> f400 3480 sll a0,16
+0+5001e4 <[^>]*> f02b 4c00 addiu a0,22560
+0+5001e8 <[^>]*> f060 6c17 li a0,119
+0+5001ec <[^>]*> f400 3480 sll a0,16
+0+5001f0 <[^>]*> f40b 4c09 addiu a0,23561
+0+5001f4 <[^>]*> f060 6c17 li a0,119
+0+5001f8 <[^>]*> f400 3480 sll a0,16
+0+5001fc <[^>]*> f42a 4c10 addiu a0,21552
+0+500200 <[^>]*> f060 6c17 li a0,119
+0+500204 <[^>]*> f400 3480 sll a0,16
+0+500208 <[^>]*> f40b 4c08 addiu a0,23560
+0+50020c <[^>]*> 6c02 li a0,2
+0+50020e <[^>]*> f400 3480 sll a0,16
+0+500212 <[^>]*> f5b4 4c05 addiu a0,-23131
+0+500216 <[^>]*> f060 6c07 li a0,103
+0+50021a <[^>]*> f400 3480 sll a0,16
+0+50021e <[^>]*> f0dd 4c05 addiu a0,-5947
+0+500222 <[^>]*> f060 6c07 li a0,103
+0+500226 <[^>]*> f400 3480 sll a0,16
+0+50022a <[^>]*> f0dd 4c09 addiu a0,-5943
+0+50022e <[^>]*> f060 6c07 li a0,103
+0+500232 <[^>]*> f400 3480 sll a0,16
+0+500236 <[^>]*> f0dd 4c15 addiu a0,-5931
+0+50023a <[^>]*> f060 6c07 li a0,103
+0+50023e <[^>]*> f400 3480 sll a0,16
+0+500242 <[^>]*> f4dd 4c05 addiu a0,-4923
+0+500246 <[^>]*> f060 6c18 li a0,120
+0+50024a <[^>]*> f400 3480 sll a0,16
+0+50024e <[^>]*> f5df 4c05 addiu a0,-571
+0+500252 <[^>]*> f060 6c18 li a0,120
+0+500256 <[^>]*> f400 3480 sll a0,16
+0+50025a <[^>]*> f1a0 4c0e addiu a0,430
+0+50025e <[^>]*> f060 6c18 li a0,120
+0+500262 <[^>]*> f400 3480 sll a0,16
+0+500266 <[^>]*> f1df 4c15 addiu a0,-1579
+0+50026a <[^>]*> f060 6c18 li a0,120
+0+50026e <[^>]*> f400 3480 sll a0,16
+0+500272 <[^>]*> f1a0 4c0d addiu a0,429
+0+500276 <[^>]*> 6d00 li a1,0
+0+500278 <[^>]*> f400 35a0 sll a1,16
+0+50027c <[^>]*> 9d80 lw a0,0\(a1\)
+0+50027e <[^>]*> f060 6d05 li a1,101
+0+500282 <[^>]*> f400 35a0 sll a1,16
+0+500286 <[^>]*> f060 9d85 lw a0,101\(a1\)
+0+50028a <[^>]*> f060 6d05 li a1,101
+0+50028e <[^>]*> f400 35a0 sll a1,16
+0+500292 <[^>]*> f060 9d85 lw a0,101\(a1\)
+0+500296 <[^>]*> f060 6d05 li a1,101
+0+50029a <[^>]*> f400 35a0 sll a1,16
+0+50029e <[^>]*> f328 9d90 lw a0,17200\(a1\)
+0+5002a2 <[^>]*> f060 6d05 li a1,101
+0+5002a6 <[^>]*> f400 35a0 sll a1,16
+0+5002aa <[^>]*> f728 9d80 lw a0,18208\(a1\)
+0+5002ae <[^>]*> f060 6d16 li a1,118
+0+5002b2 <[^>]*> f400 35a0 sll a1,16
+0+5002b6 <[^>]*> f02b 9d80 lw a0,22560\(a1\)
+0+5002ba <[^>]*> f060 6d16 li a1,118
+0+5002be <[^>]*> f400 35a0 sll a1,16
+0+5002c2 <[^>]*> f40b 9d89 lw a0,23561\(a1\)
+0+5002c6 <[^>]*> f060 6d16 li a1,118
+0+5002ca <[^>]*> f400 35a0 sll a1,16
+0+5002ce <[^>]*> f42a 9d90 lw a0,21552\(a1\)
+0+5002d2 <[^>]*> f060 6d16 li a1,118
+0+5002d6 <[^>]*> f400 35a0 sll a1,16
+0+5002da <[^>]*> f40b 9d88 lw a0,23560\(a1\)
+0+5002de <[^>]*> 6d00 li a1,0
+0+5002e0 <[^>]*> f400 35a0 sll a1,16
+0+5002e4 <[^>]*> f000 9d81 lw a0,1\(a1\)
+0+5002e8 <[^>]*> f060 6d05 li a1,101
+0+5002ec <[^>]*> f400 35a0 sll a1,16
+0+5002f0 <[^>]*> f328 9d81 lw a0,17185\(a1\)
+0+5002f4 <[^>]*> f060 6d05 li a1,101
+0+5002f8 <[^>]*> f400 35a0 sll a1,16
+0+5002fc <[^>]*> f328 9d85 lw a0,17189\(a1\)
+0+500300 <[^>]*> f060 6d05 li a1,101
+0+500304 <[^>]*> f400 35a0 sll a1,16
+0+500308 <[^>]*> f328 9d91 lw a0,17201\(a1\)
+0+50030c <[^>]*> f060 6d05 li a1,101
+0+500310 <[^>]*> f400 35a0 sll a1,16
+0+500314 <[^>]*> f728 9d81 lw a0,18209\(a1\)
+0+500318 <[^>]*> f060 6d16 li a1,118
+0+50031c <[^>]*> f400 35a0 sll a1,16
+0+500320 <[^>]*> f02b 9d81 lw a0,22561\(a1\)
+0+500324 <[^>]*> f060 6d16 li a1,118
+0+500328 <[^>]*> f400 35a0 sll a1,16
+0+50032c <[^>]*> f40b 9d8a lw a0,23562\(a1\)
+0+500330 <[^>]*> f060 6d16 li a1,118
+0+500334 <[^>]*> f400 35a0 sll a1,16
+0+500338 <[^>]*> f42a 9d91 lw a0,21553\(a1\)
+0+50033c <[^>]*> f060 6d16 li a1,118
+0+500340 <[^>]*> f400 35a0 sll a1,16
+0+500344 <[^>]*> f40b 9d89 lw a0,23561\(a1\)
+0+500348 <[^>]*> 6d01 li a1,1
+0+50034a <[^>]*> f400 35a0 sll a1,16
+0+50034e <[^>]*> f010 9d80 lw a0,-32768\(a1\)
+0+500352 <[^>]*> f060 6d06 li a1,102
+0+500356 <[^>]*> f400 35a0 sll a1,16
+0+50035a <[^>]*> f338 9d80 lw a0,-15584\(a1\)
+0+50035e <[^>]*> f060 6d06 li a1,102
+0+500362 <[^>]*> f400 35a0 sll a1,16
+0+500366 <[^>]*> f338 9d84 lw a0,-15580\(a1\)
+0+50036a <[^>]*> f060 6d06 li a1,102
+0+50036e <[^>]*> f400 35a0 sll a1,16
+0+500372 <[^>]*> f338 9d90 lw a0,-15568\(a1\)
+0+500376 <[^>]*> f060 6d06 li a1,102
+0+50037a <[^>]*> f400 35a0 sll a1,16
+0+50037e <[^>]*> f738 9d80 lw a0,-14560\(a1\)
+0+500382 <[^>]*> f060 6d17 li a1,119
+0+500386 <[^>]*> f400 35a0 sll a1,16
+0+50038a <[^>]*> f03b 9d80 lw a0,-10208\(a1\)
+0+50038e <[^>]*> f060 6d17 li a1,119
+0+500392 <[^>]*> f400 35a0 sll a1,16
+0+500396 <[^>]*> f41b 9d89 lw a0,-9207\(a1\)
+0+50039a <[^>]*> f060 6d17 li a1,119
+0+50039e <[^>]*> f400 35a0 sll a1,16
+0+5003a2 <[^>]*> f43a 9d90 lw a0,-11216\(a1\)
+0+5003a6 <[^>]*> f060 6d17 li a1,119
+0+5003aa <[^>]*> f400 35a0 sll a1,16
+0+5003ae <[^>]*> f41b 9d88 lw a0,-9208\(a1\)
+0+5003b2 <[^>]*> 6d00 li a1,0
+0+5003b4 <[^>]*> f400 35a0 sll a1,16
+0+5003b8 <[^>]*> f010 9d80 lw a0,-32768\(a1\)
+0+5003bc <[^>]*> f060 6d05 li a1,101
+0+5003c0 <[^>]*> f400 35a0 sll a1,16
+0+5003c4 <[^>]*> f338 9d80 lw a0,-15584\(a1\)
+0+5003c8 <[^>]*> f060 6d05 li a1,101
+0+5003cc <[^>]*> f400 35a0 sll a1,16
+0+5003d0 <[^>]*> f338 9d84 lw a0,-15580\(a1\)
+0+5003d4 <[^>]*> f060 6d05 li a1,101
+0+5003d8 <[^>]*> f400 35a0 sll a1,16
+0+5003dc <[^>]*> f338 9d90 lw a0,-15568\(a1\)
+0+5003e0 <[^>]*> f060 6d05 li a1,101
+0+5003e4 <[^>]*> f400 35a0 sll a1,16
+0+5003e8 <[^>]*> f738 9d80 lw a0,-14560\(a1\)
+0+5003ec <[^>]*> f060 6d16 li a1,118
+0+5003f0 <[^>]*> f400 35a0 sll a1,16
+0+5003f4 <[^>]*> f03b 9d80 lw a0,-10208\(a1\)
+0+5003f8 <[^>]*> f060 6d16 li a1,118
+0+5003fc <[^>]*> f400 35a0 sll a1,16
+0+500400 <[^>]*> f41b 9d89 lw a0,-9207\(a1\)
+0+500404 <[^>]*> f060 6d16 li a1,118
+0+500408 <[^>]*> f400 35a0 sll a1,16
+0+50040c <[^>]*> f43a 9d90 lw a0,-11216\(a1\)
+0+500410 <[^>]*> f060 6d16 li a1,118
+0+500414 <[^>]*> f400 35a0 sll a1,16
+0+500418 <[^>]*> f41b 9d88 lw a0,-9208\(a1\)
+0+50041c <[^>]*> 6d01 li a1,1
+0+50041e <[^>]*> f400 35a0 sll a1,16
+0+500422 <[^>]*> 9d80 lw a0,0\(a1\)
+0+500424 <[^>]*> f060 6d06 li a1,102
+0+500428 <[^>]*> f400 35a0 sll a1,16
+0+50042c <[^>]*> f328 9d80 lw a0,17184\(a1\)
+0+500430 <[^>]*> f060 6d06 li a1,102
+0+500434 <[^>]*> f400 35a0 sll a1,16
+0+500438 <[^>]*> f328 9d84 lw a0,17188\(a1\)
+0+50043c <[^>]*> f060 6d06 li a1,102
+0+500440 <[^>]*> f400 35a0 sll a1,16
+0+500444 <[^>]*> f328 9d90 lw a0,17200\(a1\)
+0+500448 <[^>]*> f060 6d06 li a1,102
+0+50044c <[^>]*> f400 35a0 sll a1,16
+0+500450 <[^>]*> f728 9d80 lw a0,18208\(a1\)
+0+500454 <[^>]*> f060 6d17 li a1,119
+0+500458 <[^>]*> f400 35a0 sll a1,16
+0+50045c <[^>]*> f02b 9d80 lw a0,22560\(a1\)
+0+500460 <[^>]*> f060 6d17 li a1,119
+0+500464 <[^>]*> f400 35a0 sll a1,16
+0+500468 <[^>]*> f40b 9d89 lw a0,23561\(a1\)
+0+50046c <[^>]*> f060 6d17 li a1,119
+0+500470 <[^>]*> f400 35a0 sll a1,16
+0+500474 <[^>]*> f42a 9d90 lw a0,21552\(a1\)
+0+500478 <[^>]*> f060 6d17 li a1,119
+0+50047c <[^>]*> f400 35a0 sll a1,16
+0+500480 <[^>]*> f40b 9d88 lw a0,23560\(a1\)
+0+500484 <[^>]*> 6d02 li a1,2
+0+500486 <[^>]*> f400 35a0 sll a1,16
+0+50048a <[^>]*> f5b4 9d85 lw a0,-23131\(a1\)
+0+50048e <[^>]*> f060 6d07 li a1,103
+0+500492 <[^>]*> f400 35a0 sll a1,16
+0+500496 <[^>]*> f0dd 9d85 lw a0,-5947\(a1\)
+0+50049a <[^>]*> f060 6d07 li a1,103
+0+50049e <[^>]*> f400 35a0 sll a1,16
+0+5004a2 <[^>]*> f0dd 9d89 lw a0,-5943\(a1\)
+0+5004a6 <[^>]*> f060 6d07 li a1,103
+0+5004aa <[^>]*> f400 35a0 sll a1,16
+0+5004ae <[^>]*> f0dd 9d95 lw a0,-5931\(a1\)
+0+5004b2 <[^>]*> f060 6d07 li a1,103
+0+5004b6 <[^>]*> f400 35a0 sll a1,16
+0+5004ba <[^>]*> f4dd 9d85 lw a0,-4923\(a1\)
+0+5004be <[^>]*> f060 6d18 li a1,120
+0+5004c2 <[^>]*> f400 35a0 sll a1,16
+0+5004c6 <[^>]*> f5df 9d85 lw a0,-571\(a1\)
+0+5004ca <[^>]*> f060 6d18 li a1,120
+0+5004ce <[^>]*> f400 35a0 sll a1,16
+0+5004d2 <[^>]*> f1a0 9d8e lw a0,430\(a1\)
+0+5004d6 <[^>]*> f060 6d18 li a1,120
+0+5004da <[^>]*> f400 35a0 sll a1,16
+0+5004de <[^>]*> f1df 9d95 lw a0,-1579\(a1\)
+0+5004e2 <[^>]*> f060 6d18 li a1,120
+0+5004e6 <[^>]*> f400 35a0 sll a1,16
+0+5004ea <[^>]*> f1a0 9d8d lw a0,429\(a1\)
+0+5004ee <[^>]*> 6500 nop
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-hilo.ld b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-hilo.ld
new file mode 100644
index 0000000..1b54352
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-hilo.ld
@@ -0,0 +1,12 @@
+SECTIONS
+{
+ . = 0x0500000;
+ .text : { *(.text) }
+ . = 0x0654320;
+ .data : { *(.data) }
+ .sdata : { *(.sdata) }
+ . = 0x0765430;
+ .bss : { *(.bss) *(COMMON) }
+ .sbss : { *(.sbss) *(.scommon) }
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-hilo.s b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-hilo.s
new file mode 100644
index 0000000..79ac2fb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-hilo.s
@@ -0,0 +1,14 @@
+ .data
+ .globl big_external_data_label
+big_external_data_label:
+ .fill 1000
+
+# align section end to 16-byte boundary for easier testing on multiple targets
+ .p2align 4
+
+ .globl small_external_data_label
+small_external_data_label:
+ .fill 1
+
+# align section end to 16-byte boundary for easier testing on multiple targets
+ .p2align 4
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-intermix-1.s b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-intermix-1.s
new file mode 100644
index 0000000..c596619
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-intermix-1.s
@@ -0,0 +1,104 @@
+ .text
+ .align 2
+ .globl __start
+ .set nomips16
+ .ent __start
+__start:
+ .frame $sp,56,$31 # vars= 0, regs= 3/2, args= 24, gp= 0
+ .mask 0x80030000,-24
+ .fmask 0x00f00000,-8
+ .set noreorder
+ .set nomacro
+
+ addiu $sp,$sp,-56
+ sw $31,32($sp)
+ sw $17,28($sp)
+ sw $16,24($sp)
+ sdc1 $f22,48($sp)
+ sdc1 $f20,40($sp)
+ jal m32_l
+ move $4,$17
+
+ move $4,$17
+ jal m16_l
+ move $16,$2
+
+ addu $16,$16,$2
+ jal m32_d
+ mov.d $f12,$f22
+
+ addu $16,$16,$2
+ jal m16_d
+ mov.d $f12,$f22
+
+ move $4,$17
+ mfc1 $7,$f22
+ mfc1 $6,$f23
+ jal m32_ld
+ addu $16,$16,$2
+
+ move $4,$17
+ mfc1 $7,$f22
+ mfc1 $6,$f23
+ jal m16_ld
+ addu $16,$16,$2
+
+ move $6,$17
+ mov.d $f12,$f22
+ jal m32_dl
+ addu $16,$16,$2
+
+ move $6,$17
+ mov.d $f12,$f22
+ jal m16_dl
+ addu $16,$16,$2
+
+ move $6,$17
+ move $7,$17
+ sdc1 $f22,16($sp)
+ mov.d $f12,$f22
+ jal m32_dlld
+ addu $16,$16,$2
+
+ move $6,$17
+ move $7,$17
+ mov.d $f12,$f22
+ sdc1 $f22,16($sp)
+ jal m16_dlld
+ addu $16,$16,$2
+
+ move $4,$17
+ jal m32_d_l
+ addu $16,$16,$2
+
+ move $4,$17
+ jal m16_d_l
+ mov.d $f20,$f0
+
+ move $4,$17
+ mfc1 $7,$f22
+ mfc1 $6,$f23
+ jal f32
+ add.d $f20,$f20,$f0
+
+ move $4,$17
+ add.d $f20,$f20,$f0
+ mfc1 $7,$f22
+ jal f16
+ mfc1 $6,$f23
+
+ add.d $f20,$f20,$f0
+ lw $31,32($sp)
+ trunc.w.d $f0,$f20
+ lw $17,28($sp)
+ mfc1 $3,$f0
+ addu $2,$3,$16
+ lw $16,24($sp)
+ ldc1 $f22,48($sp)
+ ldc1 $f20,40($sp)
+ j $31
+ addiu $sp,$sp,56
+
+ .set macro
+ .set reorder
+ .end __start
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-intermix-2.s b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-intermix-2.s
new file mode 100644
index 0000000..472f0c9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-intermix-2.s
@@ -0,0 +1,2631 @@
+ .text
+ .align 2
+ .globl m32_l
+ .set nomips16
+ .ent m32_l
+m32_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ move $2,$4
+
+ .set macro
+ .set reorder
+ .end m32_l
+
+ .align 2
+ .globl m16_l
+ .set mips16
+ .ent m16_l
+m16_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+ j $31
+ move $2,$4
+ .set macro
+ .set reorder
+
+ .end m16_l
+
+ .align 2
+ .set nomips16
+ .ent m32_static_l
+m32_static_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ move $2,$4
+
+ .set macro
+ .set reorder
+ .end m32_static_l
+
+ .align 2
+ .set mips16
+ .ent m16_static_l
+m16_static_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+ j $31
+ move $2,$4
+ .set macro
+ .set reorder
+
+ .end m16_static_l
+
+ .align 2
+ .set nomips16
+ .ent m32_static1_l
+m32_static1_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ move $2,$4
+
+ .set macro
+ .set reorder
+ .end m32_static1_l
+
+ .align 2
+ .set mips16
+ .ent m16_static1_l
+m16_static1_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+ j $31
+ move $2,$4
+ .set macro
+ .set reorder
+
+ .end m16_static1_l
+
+ .align 2
+ .set nomips16
+ .ent m32_static32_l
+m32_static32_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ move $2,$4
+
+ .set macro
+ .set reorder
+ .end m32_static32_l
+
+ .align 2
+ .set mips16
+ .ent m16_static32_l
+m16_static32_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+ j $31
+ move $2,$4
+ .set macro
+ .set reorder
+
+ .end m16_static32_l
+
+ .align 2
+ .set nomips16
+ .ent m32_static16_l
+m32_static16_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ move $2,$4
+
+ .set macro
+ .set reorder
+ .end m32_static16_l
+
+ .align 2
+ .set mips16
+ .ent m16_static16_l
+m16_static16_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+ j $31
+ move $2,$4
+ .set macro
+ .set reorder
+
+ .end m16_static16_l
+
+ .align 2
+ .globl m32_d
+ .set nomips16
+ .ent m32_d
+m32_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f12,$f12
+ j $31
+ mfc1 $2,$f12
+
+ .set macro
+ .set reorder
+ .end m32_d
+
+ .align 2
+ .globl m16_d
+ .set mips16
+ .ent m16_d
+m16_d:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ #jal __mips16_fixdfsi
+ restore 24,$31
+ j $31
+ .end m16_d
+ # Stub function for m16_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_d
+__fn_stub_m16_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_d
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static_d
+m32_static_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f12,$f12
+ j $31
+ mfc1 $2,$f12
+
+ .set macro
+ .set reorder
+ .end m32_static_d
+
+ .align 2
+ .set mips16
+ .ent m16_static_d
+m16_static_d:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ #jal __mips16_fixdfsi
+ restore 24,$31
+ j $31
+ .end m16_static_d
+ # Stub function for m16_static_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_static_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static_d
+__fn_stub_m16_static_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static_d
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static1_d
+m32_static1_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f12,$f12
+ j $31
+ mfc1 $2,$f12
+
+ .set macro
+ .set reorder
+ .end m32_static1_d
+
+ .align 2
+ .set mips16
+ .ent m16_static1_d
+m16_static1_d:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ #jal __mips16_fixdfsi
+ restore 24,$31
+ j $31
+ .end m16_static1_d
+ # Stub function for m16_static1_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_static1_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static1_d
+__fn_stub_m16_static1_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static1_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static1_d
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static32_d
+m32_static32_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f12,$f12
+ j $31
+ mfc1 $2,$f12
+
+ .set macro
+ .set reorder
+ .end m32_static32_d
+
+ .align 2
+ .set mips16
+ .ent m16_static32_d
+m16_static32_d:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ #jal __mips16_fixdfsi
+ restore 24,$31
+ j $31
+ .end m16_static32_d
+ # Stub function for m16_static32_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_static32_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static32_d
+__fn_stub_m16_static32_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static32_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static32_d
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static16_d
+m32_static16_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f12,$f12
+ j $31
+ mfc1 $2,$f12
+
+ .set macro
+ .set reorder
+ .end m32_static16_d
+
+ .align 2
+ .set mips16
+ .ent m16_static16_d
+m16_static16_d:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ #jal __mips16_fixdfsi
+ restore 24,$31
+ j $31
+ .end m16_static16_d
+ # Stub function for m16_static16_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_static16_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static16_d
+__fn_stub_m16_static16_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static16_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static16_d
+ .previous
+
+ .align 2
+ .globl m32_ld
+ .set nomips16
+ .ent m32_ld
+m32_ld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $7,$f2
+ mtc1 $6,$f3
+ trunc.w.d $f0,$f2
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$4
+
+ .set macro
+ .set reorder
+ .end m32_ld
+
+ .align 2
+ .globl m16_ld
+ .set mips16
+ .ent m16_ld
+m16_ld:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ move $16,$4
+ move $5,$7
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $4,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_ld
+
+ .align 2
+ .set nomips16
+ .ent m32_static_ld
+m32_static_ld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $7,$f2
+ mtc1 $6,$f3
+ trunc.w.d $f0,$f2
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$4
+
+ .set macro
+ .set reorder
+ .end m32_static_ld
+
+ .align 2
+ .set mips16
+ .ent m16_static_ld
+m16_static_ld:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ move $16,$4
+ move $5,$7
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $4,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_static_ld
+
+ .align 2
+ .set nomips16
+ .ent m32_static1_ld
+m32_static1_ld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $7,$f2
+ mtc1 $6,$f3
+ trunc.w.d $f0,$f2
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$4
+
+ .set macro
+ .set reorder
+ .end m32_static1_ld
+
+ .align 2
+ .set mips16
+ .ent m16_static1_ld
+m16_static1_ld:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ move $16,$4
+ move $5,$7
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $4,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_static1_ld
+
+ .align 2
+ .set nomips16
+ .ent m32_static32_ld
+m32_static32_ld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $7,$f2
+ mtc1 $6,$f3
+ trunc.w.d $f0,$f2
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$4
+
+ .set macro
+ .set reorder
+ .end m32_static32_ld
+
+ .align 2
+ .set mips16
+ .ent m16_static32_ld
+m16_static32_ld:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ move $16,$4
+ move $5,$7
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $4,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_static32_ld
+
+ .align 2
+ .set nomips16
+ .ent m32_static16_ld
+m32_static16_ld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $7,$f2
+ mtc1 $6,$f3
+ trunc.w.d $f0,$f2
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$4
+
+ .set macro
+ .set reorder
+ .end m32_static16_ld
+
+ .align 2
+ .set mips16
+ .ent m16_static16_ld
+m16_static16_ld:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ move $16,$4
+ move $5,$7
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $4,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_static16_ld
+
+ .align 2
+ .globl m32_dl
+ .set nomips16
+ .ent m32_dl
+m32_dl:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f0,$f12
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$6
+
+ .set macro
+ .set reorder
+ .end m32_dl
+
+ .align 2
+ .globl m16_dl
+ .set mips16
+ .ent m16_dl
+m16_dl:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $16,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_dl
+ # Stub function for m16_dl (double)
+ .set nomips16
+ .section .mips16.fn.m16_dl,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_dl
+__fn_stub_m16_dl:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_dl
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_dl
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static_dl
+m32_static_dl:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f0,$f12
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$6
+
+ .set macro
+ .set reorder
+ .end m32_static_dl
+
+ .align 2
+ .set mips16
+ .ent m16_static_dl
+m16_static_dl:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $16,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_static_dl
+ # Stub function for m16_static_dl (double)
+ .set nomips16
+ .section .mips16.fn.m16_static_dl,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static_dl
+__fn_stub_m16_static_dl:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static_dl
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static_dl
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static1_dl
+m32_static1_dl:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f0,$f12
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$6
+
+ .set macro
+ .set reorder
+ .end m32_static1_dl
+
+ .align 2
+ .set mips16
+ .ent m16_static1_dl
+m16_static1_dl:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $16,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_static1_dl
+ # Stub function for m16_static1_dl (double)
+ .set nomips16
+ .section .mips16.fn.m16_static1_dl,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static1_dl
+__fn_stub_m16_static1_dl:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static1_dl
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static1_dl
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static32_dl
+m32_static32_dl:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f0,$f12
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$6
+
+ .set macro
+ .set reorder
+ .end m32_static32_dl
+
+ .align 2
+ .set mips16
+ .ent m16_static32_dl
+m16_static32_dl:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $16,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_static32_dl
+ # Stub function for m16_static32_dl (double)
+ .set nomips16
+ .section .mips16.fn.m16_static32_dl,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static32_dl
+__fn_stub_m16_static32_dl:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static32_dl
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static32_dl
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static16_dl
+m32_static16_dl:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f0,$f12
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$6
+
+ .set macro
+ .set reorder
+ .end m32_static16_dl
+
+ .align 2
+ .set mips16
+ .ent m16_static16_dl
+m16_static16_dl:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $16,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_static16_dl
+ # Stub function for m16_static16_dl (double)
+ .set nomips16
+ .section .mips16.fn.m16_static16_dl,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static16_dl
+__fn_stub_m16_static16_dl:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static16_dl
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static16_dl
+ .previous
+
+ .align 2
+ .globl m32_dlld
+ .set nomips16
+ .ent m32_dlld
+m32_dlld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f1,$f12
+ mfc1 $4,$f1
+ addu $3,$4,$6
+ addu $2,$3,$7
+ ldc1 $f0,16($sp)
+ trunc.w.d $f2,$f0
+ mfc1 $24,$f2
+ j $31
+ addu $2,$2,$24
+
+ .set macro
+ .set reorder
+ .end m32_dlld
+
+ .align 2
+ .globl m16_dlld
+ .set mips16
+ .ent m16_dlld
+m16_dlld:
+ .frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
+ .mask 0x80030000,-4
+ .fmask 0x00000000,0
+ save 32,$16,$17,$31
+ move $16,$6
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $17,$7
+ .set macro
+ .set reorder
+
+ lw $5,52($sp)
+ lw $4,48($sp)
+ addu $16,$2,$16
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ addu $16,$17
+ .set macro
+ .set reorder
+
+ addu $2,$16,$2
+ restore 32,$16,$17,$31
+ j $31
+ .end m16_dlld
+ # Stub function for m16_dlld (double)
+ .set nomips16
+ .section .mips16.fn.m16_dlld,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_dlld
+__fn_stub_m16_dlld:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_dlld
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_dlld
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static_dlld
+m32_static_dlld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f1,$f12
+ mfc1 $4,$f1
+ addu $3,$4,$6
+ addu $2,$3,$7
+ ldc1 $f0,16($sp)
+ trunc.w.d $f2,$f0
+ mfc1 $24,$f2
+ j $31
+ addu $2,$2,$24
+
+ .set macro
+ .set reorder
+ .end m32_static_dlld
+
+ .align 2
+ .set mips16
+ .ent m16_static_dlld
+m16_static_dlld:
+ .frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
+ .mask 0x80030000,-4
+ .fmask 0x00000000,0
+ save 32,$16,$17,$31
+ move $16,$6
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $17,$7
+ .set macro
+ .set reorder
+
+ lw $5,52($sp)
+ lw $4,48($sp)
+ addu $16,$2,$16
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ addu $16,$17
+ .set macro
+ .set reorder
+
+ addu $2,$16,$2
+ restore 32,$16,$17,$31
+ j $31
+ .end m16_static_dlld
+ # Stub function for m16_static_dlld (double)
+ .set nomips16
+ .section .mips16.fn.m16_static_dlld,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static_dlld
+__fn_stub_m16_static_dlld:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static_dlld
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static_dlld
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static1_dlld
+m32_static1_dlld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f1,$f12
+ mfc1 $4,$f1
+ addu $3,$4,$6
+ addu $2,$3,$7
+ ldc1 $f0,16($sp)
+ trunc.w.d $f2,$f0
+ mfc1 $24,$f2
+ j $31
+ addu $2,$2,$24
+
+ .set macro
+ .set reorder
+ .end m32_static1_dlld
+
+ .align 2
+ .set mips16
+ .ent m16_static1_dlld
+m16_static1_dlld:
+ .frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
+ .mask 0x80030000,-4
+ .fmask 0x00000000,0
+ save 32,$16,$17,$31
+ move $16,$6
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $17,$7
+ .set macro
+ .set reorder
+
+ lw $5,52($sp)
+ lw $4,48($sp)
+ addu $16,$2,$16
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ addu $16,$17
+ .set macro
+ .set reorder
+
+ addu $2,$16,$2
+ restore 32,$16,$17,$31
+ j $31
+ .end m16_static1_dlld
+ # Stub function for m16_static1_dlld (double)
+ .set nomips16
+ .section .mips16.fn.m16_static1_dlld,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static1_dlld
+__fn_stub_m16_static1_dlld:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static1_dlld
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static1_dlld
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static32_dlld
+m32_static32_dlld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f1,$f12
+ mfc1 $4,$f1
+ addu $3,$4,$6
+ addu $2,$3,$7
+ ldc1 $f0,16($sp)
+ trunc.w.d $f2,$f0
+ mfc1 $24,$f2
+ j $31
+ addu $2,$2,$24
+
+ .set macro
+ .set reorder
+ .end m32_static32_dlld
+
+ .align 2
+ .set mips16
+ .ent m16_static32_dlld
+m16_static32_dlld:
+ .frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
+ .mask 0x80030000,-4
+ .fmask 0x00000000,0
+ save 32,$16,$17,$31
+ move $16,$6
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $17,$7
+ .set macro
+ .set reorder
+
+ lw $5,52($sp)
+ lw $4,48($sp)
+ addu $16,$2,$16
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ addu $16,$17
+ .set macro
+ .set reorder
+
+ addu $2,$16,$2
+ restore 32,$16,$17,$31
+ j $31
+ .end m16_static32_dlld
+ # Stub function for m16_static32_dlld (double)
+ .set nomips16
+ .section .mips16.fn.m16_static32_dlld,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static32_dlld
+__fn_stub_m16_static32_dlld:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static32_dlld
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static32_dlld
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static16_dlld
+m32_static16_dlld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f1,$f12
+ mfc1 $4,$f1
+ addu $3,$4,$6
+ addu $2,$3,$7
+ ldc1 $f0,16($sp)
+ trunc.w.d $f2,$f0
+ mfc1 $24,$f2
+ j $31
+ addu $2,$2,$24
+
+ .set macro
+ .set reorder
+ .end m32_static16_dlld
+
+ .align 2
+ .set mips16
+ .ent m16_static16_dlld
+m16_static16_dlld:
+ .frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
+ .mask 0x80030000,-4
+ .fmask 0x00000000,0
+ save 32,$16,$17,$31
+ move $16,$6
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $17,$7
+ .set macro
+ .set reorder
+
+ lw $5,52($sp)
+ lw $4,48($sp)
+ addu $16,$2,$16
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ addu $16,$17
+ .set macro
+ .set reorder
+
+ addu $2,$16,$2
+ restore 32,$16,$17,$31
+ j $31
+ .end m16_static16_dlld
+ # Stub function for m16_static16_dlld (double)
+ .set nomips16
+ .section .mips16.fn.m16_static16_dlld,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static16_dlld
+__fn_stub_m16_static16_dlld:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static16_dlld
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static16_dlld
+ .previous
+
+ .align 2
+ .globl m32_d_l
+ .set nomips16
+ .ent m32_d_l
+m32_d_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $4,$f2
+ j $31
+ cvt.d.w $f0,$f2
+
+ .set macro
+ .set reorder
+ .end m32_d_l
+
+ .align 2
+ .globl m16_d_l
+ .set mips16
+ .ent m16_d_l
+m16_d_l:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ #jal __mips16_floatsidf
+ #jal __mips16_ret_df
+ restore 24,$31
+ j $31
+ .end m16_d_l
+
+ .align 2
+ .set nomips16
+ .ent m32_static_d_l
+m32_static_d_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $4,$f2
+ j $31
+ cvt.d.w $f0,$f2
+
+ .set macro
+ .set reorder
+ .end m32_static_d_l
+
+ .align 2
+ .set mips16
+ .ent m16_static_d_l
+m16_static_d_l:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ #jal __mips16_floatsidf
+ #jal __mips16_ret_df
+ restore 24,$31
+ j $31
+ .end m16_static_d_l
+
+ .align 2
+ .set nomips16
+ .ent m32_static1_d_l
+m32_static1_d_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $4,$f2
+ j $31
+ cvt.d.w $f0,$f2
+
+ .set macro
+ .set reorder
+ .end m32_static1_d_l
+
+ .align 2
+ .set mips16
+ .ent m16_static1_d_l
+m16_static1_d_l:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ #jal __mips16_floatsidf
+ #jal __mips16_ret_df
+ restore 24,$31
+ j $31
+ .end m16_static1_d_l
+
+ .align 2
+ .set nomips16
+ .ent m32_static32_d_l
+m32_static32_d_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $4,$f2
+ j $31
+ cvt.d.w $f0,$f2
+
+ .set macro
+ .set reorder
+ .end m32_static32_d_l
+
+ .align 2
+ .set mips16
+ .ent m16_static32_d_l
+m16_static32_d_l:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ #jal __mips16_floatsidf
+ #jal __mips16_ret_df
+ restore 24,$31
+ j $31
+ .end m16_static32_d_l
+
+ .align 2
+ .set nomips16
+ .ent m32_static16_d_l
+m32_static16_d_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $4,$f2
+ j $31
+ cvt.d.w $f0,$f2
+
+ .set macro
+ .set reorder
+ .end m32_static16_d_l
+
+ .align 2
+ .set mips16
+ .ent m16_static16_d_l
+m16_static16_d_l:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ #jal __mips16_floatsidf
+ #jal __mips16_ret_df
+ restore 24,$31
+ j $31
+ .end m16_static16_d_l
+
+ .align 2
+ .globl m32_d_d
+ .set nomips16
+ .ent m32_d_d
+m32_d_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ mov.d $f0,$f12
+
+ .set macro
+ .set reorder
+ .end m32_d_d
+
+ .align 2
+ .globl m16_d_d
+ .set mips16
+ .ent m16_d_d
+m16_d_d:
+ .frame $sp,8,$31 # vars= 0, regs= 1/0, args= 0, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 8,$31
+ move $3,$5
+ .set noreorder
+ .set nomacro
+ #jal __mips16_ret_df
+ move $2,$4
+ .set macro
+ .set reorder
+
+ restore 8,$31
+ j $31
+ .end m16_d_d
+ # Stub function for m16_d_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_d_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_d_d
+__fn_stub_m16_d_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_d_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_d_d
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static_d_d
+m32_static_d_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ mov.d $f0,$f12
+
+ .set macro
+ .set reorder
+ .end m32_static_d_d
+
+ .align 2
+ .set mips16
+ .ent m16_static_d_d
+m16_static_d_d:
+ .frame $sp,8,$31 # vars= 0, regs= 1/0, args= 0, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 8,$31
+ move $3,$5
+ .set noreorder
+ .set nomacro
+ #jal __mips16_ret_df
+ move $2,$4
+ .set macro
+ .set reorder
+
+ restore 8,$31
+ j $31
+ .end m16_static_d_d
+ # Stub function for m16_static_d_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_static_d_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static_d_d
+__fn_stub_m16_static_d_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static_d_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static_d_d
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static1_d_d
+m32_static1_d_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ mov.d $f0,$f12
+
+ .set macro
+ .set reorder
+ .end m32_static1_d_d
+
+ .align 2
+ .set mips16
+ .ent m16_static1_d_d
+m16_static1_d_d:
+ .frame $sp,8,$31 # vars= 0, regs= 1/0, args= 0, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 8,$31
+ move $3,$5
+ .set noreorder
+ .set nomacro
+ #jal __mips16_ret_df
+ move $2,$4
+ .set macro
+ .set reorder
+
+ restore 8,$31
+ j $31
+ .end m16_static1_d_d
+ # Stub function for m16_static1_d_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_static1_d_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static1_d_d
+__fn_stub_m16_static1_d_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static1_d_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static1_d_d
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static32_d_d
+m32_static32_d_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ mov.d $f0,$f12
+
+ .set macro
+ .set reorder
+ .end m32_static32_d_d
+
+ .align 2
+ .set mips16
+ .ent m16_static32_d_d
+m16_static32_d_d:
+ .frame $sp,8,$31 # vars= 0, regs= 1/0, args= 0, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 8,$31
+ move $3,$5
+ .set noreorder
+ .set nomacro
+ #jal __mips16_ret_df
+ move $2,$4
+ .set macro
+ .set reorder
+
+ restore 8,$31
+ j $31
+ .end m16_static32_d_d
+ # Stub function for m16_static32_d_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_static32_d_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static32_d_d
+__fn_stub_m16_static32_d_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static32_d_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static32_d_d
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static16_d_d
+m32_static16_d_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ mov.d $f0,$f12
+
+ .set macro
+ .set reorder
+ .end m32_static16_d_d
+
+ .align 2
+ .set mips16
+ .ent m16_static16_d_d
+m16_static16_d_d:
+ .frame $sp,8,$31 # vars= 0, regs= 1/0, args= 0, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 8,$31
+ move $3,$5
+ .set noreorder
+ .set nomacro
+ #jal __mips16_ret_df
+ move $2,$4
+ .set macro
+ .set reorder
+
+ restore 8,$31
+ j $31
+ .end m16_static16_d_d
+ # Stub function for m16_static16_d_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_static16_d_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static16_d_d
+__fn_stub_m16_static16_d_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static16_d_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static16_d_d
+ .previous
+
+ .align 2
+ .globl f32
+ .set nomips16
+ .ent f32
+f32:
+ .frame $sp,64,$31 # vars= 0, regs= 3/3, args= 24, gp= 0
+ .mask 0x80030000,-32
+ .fmask 0x03f00000,-8
+ .set noreorder
+ .set nomacro
+
+ addiu $sp,$sp,-64
+ sw $17,28($sp)
+ move $17,$4
+ sw $31,32($sp)
+ sdc1 $f24,56($sp)
+ sw $16,24($sp)
+ sdc1 $f22,48($sp)
+ sdc1 $f20,40($sp)
+ mtc1 $7,$f22
+ jal m32_static1_l
+ mtc1 $6,$f23
+
+ move $4,$17
+ jal m16_static1_l
+ move $16,$2
+
+ addu $16,$16,$2
+ jal m32_static1_d
+ mov.d $f12,$f22
+
+ addu $16,$16,$2
+ jal m16_static1_d
+ mov.d $f12,$f22
+
+ move $4,$17
+ mfc1 $7,$f22
+ mfc1 $6,$f23
+ jal m32_static1_ld
+ addu $16,$16,$2
+
+ move $4,$17
+ mfc1 $7,$f22
+ mfc1 $6,$f23
+ jal m16_static1_ld
+ addu $16,$16,$2
+
+ move $6,$17
+ mov.d $f12,$f22
+ jal m32_static1_dl
+ addu $16,$16,$2
+
+ move $6,$17
+ mov.d $f12,$f22
+ jal m16_static1_dl
+ addu $16,$16,$2
+
+ move $6,$17
+ move $7,$17
+ sdc1 $f22,16($sp)
+ mov.d $f12,$f22
+ jal m32_static1_dlld
+ addu $16,$16,$2
+
+ move $6,$17
+ move $7,$17
+ mov.d $f12,$f22
+ sdc1 $f22,16($sp)
+ jal m16_static1_dlld
+ addu $16,$16,$2
+
+ move $4,$17
+ jal m32_static1_d_l
+ addu $16,$16,$2
+
+ move $4,$17
+ jal m16_static1_d_l
+ mov.d $f20,$f0
+
+ add.d $f20,$f20,$f0
+ jal m32_static1_d_d
+ mov.d $f12,$f22
+
+ add.d $f20,$f20,$f0
+ jal m16_static1_d_d
+ mov.d $f12,$f22
+
+ move $4,$17
+ jal m32_static32_l
+ add.d $f20,$f20,$f0
+
+ move $4,$17
+ jal m16_static32_l
+ addu $16,$16,$2
+
+ addu $16,$16,$2
+ jal m32_static32_d
+ mov.d $f12,$f22
+
+ addu $16,$16,$2
+ jal m16_static32_d
+ mov.d $f12,$f22
+
+ move $4,$17
+ mfc1 $7,$f22
+ mfc1 $6,$f23
+ jal m32_static32_ld
+ addu $16,$16,$2
+
+ move $4,$17
+ mfc1 $7,$f22
+ mfc1 $6,$f23
+ jal m16_static32_ld
+ addu $16,$16,$2
+
+ move $6,$17
+ mov.d $f12,$f22
+ jal m32_static32_dl
+ addu $16,$16,$2
+
+ move $6,$17
+ mov.d $f12,$f22
+ jal m16_static32_dl
+ addu $16,$16,$2
+
+ move $6,$17
+ move $7,$17
+ sdc1 $f22,16($sp)
+ mov.d $f12,$f22
+ jal m32_static32_dlld
+ addu $16,$16,$2
+
+ move $6,$17
+ move $7,$17
+ mov.d $f12,$f22
+ sdc1 $f22,16($sp)
+ jal m16_static32_dlld
+ addu $16,$16,$2
+
+ move $4,$17
+ jal m32_static32_d_l
+ addu $16,$16,$2
+
+ move $4,$17
+ jal m16_static32_d_l
+ add.d $f20,$f20,$f0
+
+ add.d $f20,$f20,$f0
+ jal m32_static32_d_d
+ mov.d $f12,$f22
+
+ mtc1 $16,$f24
+ add.d $f20,$f20,$f0
+ jal m16_static32_d_d
+ mov.d $f12,$f22
+
+ lw $31,32($sp)
+ lw $17,28($sp)
+ lw $16,24($sp)
+ add.d $f20,$f20,$f0
+ ldc1 $f22,48($sp)
+ cvt.d.w $f0,$f24
+ ldc1 $f24,56($sp)
+ add.d $f0,$f0,$f20
+ ldc1 $f20,40($sp)
+ j $31
+ addiu $sp,$sp,64
+
+ .set macro
+ .set reorder
+ .end f32
+
+ # Stub function to call m32_static1_d (double)
+ .set nomips16
+ .section .mips16.call.m32_static1_d,"ax",@progbits
+ .align 2
+ .ent __call_stub_m32_static1_d
+__call_stub_m32_static1_d:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m32_static1_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m32_static1_d
+ .previous
+
+ # Stub function to call m16_static1_d (double)
+ .set nomips16
+ .section .mips16.call.m16_static1_d,"ax",@progbits
+ .align 2
+ .ent __call_stub_m16_static1_d
+__call_stub_m16_static1_d:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m16_static1_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m16_static1_d
+ .previous
+
+ # Stub function to call m32_static1_dl (double)
+ .set nomips16
+ .section .mips16.call.m32_static1_dl,"ax",@progbits
+ .align 2
+ .ent __call_stub_m32_static1_dl
+__call_stub_m32_static1_dl:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m32_static1_dl
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m32_static1_dl
+ .previous
+
+ # Stub function to call m16_static1_dl (double)
+ .set nomips16
+ .section .mips16.call.m16_static1_dl,"ax",@progbits
+ .align 2
+ .ent __call_stub_m16_static1_dl
+__call_stub_m16_static1_dl:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m16_static1_dl
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m16_static1_dl
+ .previous
+
+ # Stub function to call m32_static1_dlld (double)
+ .set nomips16
+ .section .mips16.call.m32_static1_dlld,"ax",@progbits
+ .align 2
+ .ent __call_stub_m32_static1_dlld
+__call_stub_m32_static1_dlld:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m32_static1_dlld
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m32_static1_dlld
+ .previous
+
+ # Stub function to call m16_static1_dlld (double)
+ .set nomips16
+ .section .mips16.call.m16_static1_dlld,"ax",@progbits
+ .align 2
+ .ent __call_stub_m16_static1_dlld
+__call_stub_m16_static1_dlld:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m16_static1_dlld
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m16_static1_dlld
+ .previous
+
+ # Stub function to call double m32_static1_d_l ()
+ .set nomips16
+ .section .mips16.call.fp.m32_static1_d_l,"ax",@progbits
+ .align 2
+ .ent __call_stub_fp_m32_static1_d_l
+__call_stub_fp_m32_static1_d_l:
+ .set noreorder
+ move $18,$31
+ jal m32_static1_d_l
+ nop
+ mfc1 $2,$f1
+ mfc1 $3,$f0
+ j $18
+ nop
+ .set reorder
+ .end __call_stub_fp_m32_static1_d_l
+ .previous
+
+ # Stub function to call double m16_static1_d_l ()
+ .set nomips16
+ .section .mips16.call.fp.m16_static1_d_l,"ax",@progbits
+ .align 2
+ .ent __call_stub_fp_m16_static1_d_l
+__call_stub_fp_m16_static1_d_l:
+ .set noreorder
+ move $18,$31
+ jal m16_static1_d_l
+ nop
+ mfc1 $2,$f1
+ mfc1 $3,$f0
+ j $18
+ nop
+ .set reorder
+ .end __call_stub_fp_m16_static1_d_l
+ .previous
+
+ # Stub function to call double m32_static1_d_d (double)
+ .set nomips16
+ .section .mips16.call.fp.m32_static1_d_d,"ax",@progbits
+ .align 2
+ .ent __call_stub_fp_m32_static1_d_d
+__call_stub_fp_m32_static1_d_d:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ move $18,$31
+ jal m32_static1_d_d
+ nop
+ mfc1 $2,$f1
+ mfc1 $3,$f0
+ j $18
+ nop
+ .set reorder
+ .end __call_stub_fp_m32_static1_d_d
+ .previous
+
+ # Stub function to call double m16_static1_d_d (double)
+ .set nomips16
+ .section .mips16.call.fp.m16_static1_d_d,"ax",@progbits
+ .align 2
+ .ent __call_stub_fp_m16_static1_d_d
+__call_stub_fp_m16_static1_d_d:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ move $18,$31
+ jal m16_static1_d_d
+ nop
+ mfc1 $2,$f1
+ mfc1 $3,$f0
+ j $18
+ nop
+ .set reorder
+ .end __call_stub_fp_m16_static1_d_d
+ .previous
+
+ # Stub function to call m32_static16_d (double)
+ .set nomips16
+ .section .mips16.call.m32_static16_d,"ax",@progbits
+ .align 2
+ .ent __call_stub_m32_static16_d
+__call_stub_m32_static16_d:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m32_static16_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m32_static16_d
+ .previous
+
+ # Stub function to call m16_static16_d (double)
+ .set nomips16
+ .section .mips16.call.m16_static16_d,"ax",@progbits
+ .align 2
+ .ent __call_stub_m16_static16_d
+__call_stub_m16_static16_d:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m16_static16_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m16_static16_d
+ .previous
+
+ # Stub function to call m32_static16_dl (double)
+ .set nomips16
+ .section .mips16.call.m32_static16_dl,"ax",@progbits
+ .align 2
+ .ent __call_stub_m32_static16_dl
+__call_stub_m32_static16_dl:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m32_static16_dl
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m32_static16_dl
+ .previous
+
+ # Stub function to call m16_static16_dl (double)
+ .set nomips16
+ .section .mips16.call.m16_static16_dl,"ax",@progbits
+ .align 2
+ .ent __call_stub_m16_static16_dl
+__call_stub_m16_static16_dl:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m16_static16_dl
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m16_static16_dl
+ .previous
+
+ # Stub function to call m32_static16_dlld (double)
+ .set nomips16
+ .section .mips16.call.m32_static16_dlld,"ax",@progbits
+ .align 2
+ .ent __call_stub_m32_static16_dlld
+__call_stub_m32_static16_dlld:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m32_static16_dlld
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m32_static16_dlld
+ .previous
+
+ # Stub function to call m16_static16_dlld (double)
+ .set nomips16
+ .section .mips16.call.m16_static16_dlld,"ax",@progbits
+ .align 2
+ .ent __call_stub_m16_static16_dlld
+__call_stub_m16_static16_dlld:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m16_static16_dlld
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m16_static16_dlld
+ .previous
+
+ # Stub function to call double m32_static16_d_l ()
+ .set nomips16
+ .section .mips16.call.fp.m32_static16_d_l,"ax",@progbits
+ .align 2
+ .ent __call_stub_fp_m32_static16_d_l
+__call_stub_fp_m32_static16_d_l:
+ .set noreorder
+ move $18,$31
+ jal m32_static16_d_l
+ nop
+ mfc1 $2,$f1
+ mfc1 $3,$f0
+ j $18
+ nop
+ .set reorder
+ .end __call_stub_fp_m32_static16_d_l
+ .previous
+
+ # Stub function to call double m16_static16_d_l ()
+ .set nomips16
+ .section .mips16.call.fp.m16_static16_d_l,"ax",@progbits
+ .align 2
+ .ent __call_stub_fp_m16_static16_d_l
+__call_stub_fp_m16_static16_d_l:
+ .set noreorder
+ move $18,$31
+ jal m16_static16_d_l
+ nop
+ mfc1 $2,$f1
+ mfc1 $3,$f0
+ j $18
+ nop
+ .set reorder
+ .end __call_stub_fp_m16_static16_d_l
+ .previous
+
+ # Stub function to call double m32_static16_d_d (double)
+ .set nomips16
+ .section .mips16.call.fp.m32_static16_d_d,"ax",@progbits
+ .align 2
+ .ent __call_stub_fp_m32_static16_d_d
+__call_stub_fp_m32_static16_d_d:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ move $18,$31
+ jal m32_static16_d_d
+ nop
+ mfc1 $2,$f1
+ mfc1 $3,$f0
+ j $18
+ nop
+ .set reorder
+ .end __call_stub_fp_m32_static16_d_d
+ .previous
+
+ # Stub function to call double m16_static16_d_d (double)
+ .set nomips16
+ .section .mips16.call.fp.m16_static16_d_d,"ax",@progbits
+ .align 2
+ .ent __call_stub_fp_m16_static16_d_d
+__call_stub_fp_m16_static16_d_d:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ move $18,$31
+ jal m16_static16_d_d
+ nop
+ mfc1 $2,$f1
+ mfc1 $3,$f0
+ j $18
+ nop
+ .set reorder
+ .end __call_stub_fp_m16_static16_d_d
+ .previous
+
+ .align 2
+ .globl f16
+ .set mips16
+ .ent f16
+f16:
+ .frame $sp,104,$31 # vars= 64, regs= 4/0, args= 24, gp= 0
+ .mask 0x80070000,-4
+ .fmask 0x00000000,0
+ save 104,$16,$17,$18,$31
+ move $17,$4
+ sw $7,116($sp)
+ .set noreorder
+ .set nomacro
+ jal m32_static1_l
+ sw $6,112($sp)
+ .set macro
+ .set reorder
+
+ move $4,$17
+ .set noreorder
+ .set nomacro
+ jal m16_static1_l
+ move $16,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ .set noreorder
+ .set nomacro
+ jal m32_static1_d
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ .set noreorder
+ .set nomacro
+ jal m16_static1_d
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $7,116($sp)
+ lw $6,112($sp)
+ move $4,$17
+ .set noreorder
+ .set nomacro
+ jal m32_static1_ld
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $7,116($sp)
+ lw $6,112($sp)
+ move $4,$17
+ .set noreorder
+ .set nomacro
+ jal m16_static1_ld
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ move $6,$17
+ .set noreorder
+ .set nomacro
+ jal m32_static1_dl
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ move $6,$17
+ .set noreorder
+ .set nomacro
+ jal m16_static1_dl
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $3,116($sp)
+ lw $6,112($sp)
+ sw $3,20($sp)
+ move $5,$3
+ sw $6,16($sp)
+ move $4,$6
+ move $7,$17
+ move $6,$17
+ .set noreorder
+ .set nomacro
+ jal m32_static1_dlld
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ addu $16,$2
+ lw $7,112($sp)
+ lw $2,116($sp)
+ move $6,$17
+ move $5,$2
+ sw $7,16($sp)
+ move $4,$7
+ sw $2,20($sp)
+ .set noreorder
+ .set nomacro
+ jal m16_static1_dlld
+ move $7,$17
+ .set macro
+ .set reorder
+
+ move $4,$17
+ .set noreorder
+ .set nomacro
+ jal m32_static1_d_l
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ move $4,$17
+ sw $3,28($sp)
+ .set noreorder
+ .set nomacro
+ jal m16_static1_d_l
+ sw $2,24($sp)
+ .set macro
+ .set reorder
+
+ lw $5,28($sp)
+ lw $4,24($sp)
+ move $7,$3
+ .set noreorder
+ .set nomacro
+ #jal __mips16_adddf3
+ move $6,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ sw $3,36($sp)
+ .set noreorder
+ .set nomacro
+ jal m32_static1_d_d
+ sw $2,32($sp)
+ .set macro
+ .set reorder
+
+ lw $5,36($sp)
+ lw $4,32($sp)
+ move $7,$3
+ .set noreorder
+ .set nomacro
+ #jal __mips16_adddf3
+ move $6,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ sw $3,44($sp)
+ .set noreorder
+ .set nomacro
+ jal m16_static1_d_d
+ sw $2,40($sp)
+ .set macro
+ .set reorder
+
+ lw $5,44($sp)
+ lw $4,40($sp)
+ move $7,$3
+ .set noreorder
+ .set nomacro
+ #jal __mips16_adddf3
+ move $6,$2
+ .set macro
+ .set reorder
+
+ move $4,$17
+ sw $3,52($sp)
+ .set noreorder
+ .set nomacro
+ jal m32_static16_l
+ sw $2,48($sp)
+ .set macro
+ .set reorder
+
+ move $4,$17
+ .set noreorder
+ .set nomacro
+ jal m16_static16_l
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ .set noreorder
+ .set nomacro
+ jal m32_static16_d
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ .set noreorder
+ .set nomacro
+ jal m16_static16_d
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $7,116($sp)
+ lw $6,112($sp)
+ move $4,$17
+ .set noreorder
+ .set nomacro
+ jal m32_static16_ld
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $7,116($sp)
+ lw $6,112($sp)
+ move $4,$17
+ .set noreorder
+ .set nomacro
+ jal m16_static16_ld
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ move $6,$17
+ .set noreorder
+ .set nomacro
+ jal m32_static16_dl
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ move $6,$17
+ .set noreorder
+ .set nomacro
+ jal m16_static16_dl
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $4,116($sp)
+ lw $6,112($sp)
+ sw $4,20($sp)
+ sw $6,16($sp)
+ move $5,$4
+ move $7,$17
+ move $4,$6
+ move $6,$17
+ .set noreorder
+ .set nomacro
+ jal m32_static16_dlld
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ addu $16,$2
+ lw $3,116($sp)
+ lw $2,112($sp)
+ move $6,$17
+ move $7,$17
+ sw $3,20($sp)
+ move $5,$3
+ sw $2,16($sp)
+ .set noreorder
+ .set nomacro
+ jal m16_static16_dlld
+ move $4,$2
+ .set macro
+ .set reorder
+
+ move $4,$17
+ .set noreorder
+ .set nomacro
+ jal m32_static16_d_l
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $5,52($sp)
+ lw $4,48($sp)
+ move $7,$3
+ .set noreorder
+ .set nomacro
+ #jal __mips16_adddf3
+ move $6,$2
+ .set macro
+ .set reorder
+
+ move $4,$17
+ sw $3,60($sp)
+ .set noreorder
+ .set nomacro
+ jal m16_static16_d_l
+ sw $2,56($sp)
+ .set macro
+ .set reorder
+
+ lw $5,60($sp)
+ lw $4,56($sp)
+ move $7,$3
+ .set noreorder
+ .set nomacro
+ #jal __mips16_adddf3
+ move $6,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ sw $3,68($sp)
+ .set noreorder
+ .set nomacro
+ jal m32_static16_d_d
+ sw $2,64($sp)
+ .set macro
+ .set reorder
+
+ lw $5,68($sp)
+ lw $4,64($sp)
+ move $7,$3
+ .set noreorder
+ .set nomacro
+ #jal __mips16_adddf3
+ move $6,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ sw $3,76($sp)
+ .set noreorder
+ .set nomacro
+ jal m16_static16_d_d
+ sw $2,72($sp)
+ .set macro
+ .set reorder
+
+ lw $5,76($sp)
+ lw $4,72($sp)
+ move $7,$3
+ .set noreorder
+ .set nomacro
+ #jal __mips16_adddf3
+ move $6,$2
+ .set macro
+ .set reorder
+
+ move $4,$16
+ sw $3,84($sp)
+ .set noreorder
+ .set nomacro
+ #jal __mips16_floatsidf
+ sw $2,80($sp)
+ .set macro
+ .set reorder
+
+ lw $7,84($sp)
+ lw $6,80($sp)
+ move $5,$3
+ .set noreorder
+ .set nomacro
+ #jal __mips16_adddf3
+ move $4,$2
+ .set macro
+ .set reorder
+
+ #jal __mips16_ret_df
+ restore 104,$16,$17,$18,$31
+ j $31
+ .end f16
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-intermix.d b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-intermix.d
new file mode 100644
index 0000000..cc8c1fe
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-intermix.d
@@ -0,0 +1,126 @@
+
+.*: +file format elf.*mips
+
+SYMBOL TABLE:
+#...
+.* l F .text 0+[0-9a-f]+ m32_static_l
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static_l
+.* l F .text 0+[0-9a-f]+ m32_static1_l
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static1_l
+.* l F .text 0+[0-9a-f]+ m32_static32_l
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static32_l
+.* l F .text 0+[0-9a-f]+ m32_static16_l
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static16_l
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_d
+.* l F .text 0+[0-9a-f]+ m32_static_d
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static_d
+.* l F .text 0+[0-9a-f]+ m32_static1_d
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static1_d
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_static1_d
+.* l F .text 0+[0-9a-f]+ m32_static32_d
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static32_d
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_static32_d
+.* l F .text 0+[0-9a-f]+ m32_static16_d
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static16_d
+.* l F .text 0+[0-9a-f]+ m32_static_ld
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static_ld
+.* l F .text 0+[0-9a-f]+ m32_static1_ld
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static1_ld
+.* l F .text 0+[0-9a-f]+ m32_static32_ld
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static32_ld
+.* l F .text 0+[0-9a-f]+ m32_static16_ld
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static16_ld
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_dl
+.* l F .text 0+[0-9a-f]+ m32_static_dl
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static_dl
+.* l F .text 0+[0-9a-f]+ m32_static1_dl
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static1_dl
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_static1_dl
+.* l F .text 0+[0-9a-f]+ m32_static32_dl
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static32_dl
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_static32_dl
+.* l F .text 0+[0-9a-f]+ m32_static16_dl
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static16_dl
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_dlld
+.* l F .text 0+[0-9a-f]+ m32_static_dlld
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static_dlld
+.* l F .text 0+[0-9a-f]+ m32_static1_dlld
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static1_dlld
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_static1_dlld
+.* l F .text 0+[0-9a-f]+ m32_static32_dlld
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static32_dlld
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_static32_dlld
+.* l F .text 0+[0-9a-f]+ m32_static16_dlld
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static16_dlld
+.* l F .text 0+[0-9a-f]+ m32_static_d_l
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static_d_l
+.* l F .text 0+[0-9a-f]+ m32_static1_d_l
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static1_d_l
+.* l F .text 0+[0-9a-f]+ m32_static32_d_l
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static32_d_l
+.* l F .text 0+[0-9a-f]+ m32_static16_d_l
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static16_d_l
+# ??? We aren't yet able to get rid of the symbol table entry for
+# __fn_stub_m16_d_d, or its .pdr entry.
+.* l F .text 0+[0-9a-f]+ *
+.* l F .text 0+[0-9a-f]+ m32_static_d_d
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static_d_d
+.* l F .text 0+[0-9a-f]+ m32_static1_d_d
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static1_d_d
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_static1_d_d
+.* l F .text 0+[0-9a-f]+ m32_static32_d_d
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static32_d_d
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_static32_d_d
+.* l F .text 0+[0-9a-f]+ m32_static16_d_d
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static16_d_d
+#...
+.* l F .text 0+[0-9a-f]+ __call_stub_m32_static1_d
+.* l F .text 0+[0-9a-f]+ __call_stub_m16_static1_d
+.* l F .text 0+[0-9a-f]+ __call_stub_m32_static1_dl
+.* l F .text 0+[0-9a-f]+ __call_stub_m16_static1_dl
+.* l F .text 0+[0-9a-f]+ __call_stub_m32_static1_dlld
+.* l F .text 0+[0-9a-f]+ __call_stub_m16_static1_dlld
+.* l F .text 0+[0-9a-f]+ __call_stub_fp_m32_static1_d_l
+.* l F .text 0+[0-9a-f]+ __call_stub_fp_m16_static1_d_l
+.* l F .text 0+[0-9a-f]+ __call_stub_fp_m32_static1_d_d
+.* l F .text 0+[0-9a-f]+ __call_stub_fp_m16_static1_d_d
+.* l F .text 0+[0-9a-f]+ __call_stub_m32_static16_d
+.* l F .text 0+[0-9a-f]+ __call_stub_m16_static16_d
+.* l F .text 0+[0-9a-f]+ __call_stub_m32_static16_dl
+.* l F .text 0+[0-9a-f]+ __call_stub_m16_static16_dl
+.* l F .text 0+[0-9a-f]+ __call_stub_m32_static16_dlld
+.* l F .text 0+[0-9a-f]+ __call_stub_m16_static16_dlld
+.* l F .text 0+[0-9a-f]+ __call_stub_fp_m32_static16_d_l
+.* l F .text 0+[0-9a-f]+ __call_stub_fp_m16_static16_d_l
+.* l F .text 0+[0-9a-f]+ __call_stub_fp_m32_static16_d_d
+.* l F .text 0+[0-9a-f]+ __call_stub_fp_m16_static16_d_d
+#...
+.* g F .text 0+[0-9a-f]+ m32_ld
+#...
+.* g F .text 0+[0-9a-f]+ m32_d_l
+.* g F .text 0+[0-9a-f]+ 0xf0 m16_d_d
+.* g F .text 0+[0-9a-f]+ 0xf0 m16_d
+#...
+.* g F .text 0+[0-9a-f]+ 0xf0 f16
+#...
+.* g F .text 0+[0-9a-f]+ m32_d
+#...
+.* g F .text 0+[0-9a-f]+ 0xf0 m16_dl
+#...
+.* g F .text 0+[0-9a-f]+ f32
+#...
+.* g F .text 0+[0-9a-f]+ 0xf0 m16_l
+#...
+.* g F .text 0+[0-9a-f]+ 0xf0 m16_ld
+#...
+.* g F .text 0+[0-9a-f]+ 0xf0 m16_dlld
+.* g F .text 0+[0-9a-f]+ m32_d_d
+#...
+.* g F .text 0+[0-9a-f]+ m32_dl
+#...
+.* g F .text 0+[0-9a-f]+ m32_dlld
+#...
+.* g F .text 0+[0-9a-f]+ 0xf0 m16_d_l
+#...
+.* g F .text 0+[0-9a-f]+ m32_l
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-local-stubs-1.d b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-local-stubs-1.d
new file mode 100644
index 0000000..1ffa1d1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-local-stubs-1.d
@@ -0,0 +1,107 @@
+#name: MIPS16 interlinking for local functions 1
+#source: mips16-local-stubs-1.s
+#as: -mips4
+#ld: -Ttext 0x20000000 -e caller1
+#objdump: -dr
+#...
+Disassembly of section \.text:
+
+20000000 <f1>:
+20000000: 03e00008 jr ra
+20000004: 00000000 nop
+
+20000008 <g1>:
+20000008: 03e00008 jr ra
+2000000c: 00000000 nop
+
+20000010 <h1>:
+20000010: e820 jr ra
+20000012: 6500 nop
+
+20000014 <f2>:
+20000014: 03e00008 jr ra
+20000018: 00000000 nop
+
+2000001c <g2>:
+2000001c: 03e00008 jr ra
+20000020: 00000000 nop
+
+20000024 <h2>:
+20000024: e820 jr ra
+20000026: 6500 nop
+
+20000028 <f3>:
+20000028: 03e00008 jr ra
+2000002c: 00000000 nop
+
+20000030 <g3>:
+20000030: 03e00008 jr ra
+20000034: 00000000 nop
+
+20000038 <h3>:
+20000038: e820 jr ra
+2000003a: 6500 nop
+
+2000003c <caller1>:
+2000003c: 0c000000 jal 20000000 <f1>
+20000040: 00000000 nop
+20000044: 0c000005 jal 20000014 <f2>
+20000048: 00000000 nop
+2000004c: 0c000002 jal 20000008 <g1>
+20000050: 00000000 nop
+20000054: 0c000007 jal 2000001c <g2>
+20000058: 00000000 nop
+2000005c: 0c000024 jal 20000090 <stub_for_h1>
+20000060: 00000000 nop
+20000064: 0c000028 jal 200000a0 <stub_for_h2>
+20000068: 00000000 nop
+
+2000006c <caller2>:
+2000006c: 1c00 002c jalx 200000b0 <stub_for_f1>
+20000070: 6500 nop
+20000072: 1c00 0034 jalx 200000d0 <stub_for_f2>
+20000076: 6500 nop
+20000078: 1c00 0030 jalx 200000c0 <stub_for_g1>
+2000007c: 6500 nop
+2000007e: 1c00 0038 jalx 200000e0 <stub_for_g2>
+20000082: 6500 nop
+20000084: 1800 0004 jal 20000010 <h1>
+20000088: 6500 nop
+2000008a: 1800 0009 jal 20000024 <h2>
+2000008e: 6500 nop
+
+20000090 <stub_for_h1>:
+20000090: 3c012000 lui at,0x2000
+20000094: 24210011 addiu at,at,17
+20000098: 00200008 jr at
+2000009c: 00000000 nop
+
+200000a0 <stub_for_h2>:
+200000a0: 3c012000 lui at,0x2000
+200000a4: 24210025 addiu at,at,37
+200000a8: 00200008 jr at
+200000ac: 00000000 nop
+
+200000b0 <stub_for_f1>:
+200000b0: 3c012000 lui at,0x2000
+200000b4: 24210000 addiu at,at,0
+200000b8: 00200008 jr at
+200000bc: 00000000 nop
+
+200000c0 <stub_for_g1>:
+200000c0: 3c012000 lui at,0x2000
+200000c4: 24210008 addiu at,at,8
+200000c8: 00200008 jr at
+200000cc: 00000000 nop
+
+200000d0 <stub_for_f2>:
+200000d0: 3c012000 lui at,0x2000
+200000d4: 24210014 addiu at,at,20
+200000d8: 00200008 jr at
+200000dc: 00000000 nop
+
+200000e0 <stub_for_g2>:
+200000e0: 3c012000 lui at,0x2000
+200000e4: 2421001c addiu at,at,28
+200000e8: 00200008 jr at
+200000ec: 00000000 nop
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-local-stubs-1.s b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-local-stubs-1.s
new file mode 100644
index 0000000..9904402
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-local-stubs-1.s
@@ -0,0 +1,49 @@
+ .macro makestub,type,func,section
+ .text
+ .set \type
+ .type \func,@function
+ .ent \func
+\func:
+ jr $31
+ .end \func
+
+ .section \section,"ax",@progbits
+ .set nomips16
+ .type stub_for_\func,@function
+ .ent stub_for_\func
+stub_for_\func:
+ .set noat
+ la $1,\func
+ jr $1
+ .set at
+ .end stub_for_\func
+ .endm
+
+ .macro makestubs,id
+ makestub nomips16,f\id,.mips16.call.F\id
+ makestub nomips16,g\id,.mips16.call.fp.G\id
+ makestub mips16,h\id,.mips16.fn.H\id
+ .endm
+
+ .macro makecaller,type,func
+ .text
+ .set \type
+ .globl \func
+ .type \func,@function
+ .ent \func
+\func:
+ jal f1
+ jal f2
+ jal g1
+ jal g2
+ jal h1
+ jal h2
+ .end \func
+ .endm
+
+ makestubs 1
+ makestubs 2
+ makestubs 3
+
+ makecaller nomips16,caller1
+ makecaller mips16,caller2
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1-dummy.s b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1-dummy.s
new file mode 100644
index 0000000..6ee56e0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1-dummy.s
@@ -0,0 +1,15 @@
+ .abicalls
+ nop
+
+ .macro dummyfn,name
+ .global \name
+ .ent \name
+\name:
+ jr $31
+ .end \name
+ .endm
+
+ dummyfn extern1
+ dummyfn extern2
+ dummyfn extern3
+ dummyfn extern4
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1.dd b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1.dd
new file mode 100644
index 0000000..ba9a246
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1.dd
@@ -0,0 +1,1227 @@
+
+.*
+
+
+Disassembly of section \.text:
+
+00040400 <a_unused1>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040404 <b_unused1>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040408 <callpic_unused1_mips16>:
+.*: [^\t]* li v0,1
+.*: [^\t]* la v1,47ff0 <.*>
+.*: [^\t]* sll v0,16
+.*: [^\t]* addu v0,v1
+.*: [^\t]* move gp,v0
+.*: [^\t]* addiu sp,-32
+.*: [^\t]* sw v0,16\(sp\)
+.*: [^\t]* sw ra,20\(sp\)
+# 0x40400: a_unused1
+.*: [^\t]* lw v0,-32744\(v0\)
+.*: [^\t]* addiu v0,1025
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+# 0x40404: b_unused2
+.*: [^\t]* lw v0,-32744\(v0\)
+.*: [^\t]* addiu v0,1029
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,20\(sp\)
+.*: [^\t]* jr v0
+.*: [^\t]* addiu sp,32
+
+00040444 <a_unused2>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040448 <b_unused2>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+0004044c <jals_unused2_mips16>:
+.*: [^\t]* jal .* <a_unused2>
+.*: [^\t]* nop
+.*: [^\t]* jal .* <b_unused2>
+.*: [^\t]* nop
+
+00040458 <a_unused3>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+0004045c <b_unused3>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040460 <a_unused4>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040464 <b_unused4>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040468 <callpic_unused4_mips16>:
+.*: [^\t]* li v0,1
+.*: [^\t]* la v1,47ff0 <.*>
+.*: [^\t]* sll v0,16
+.*: [^\t]* addu v0,v1
+.*: [^\t]* move gp,v0
+.*: [^\t]* addiu sp,-32
+.*: [^\t]* sw v0,16\(sp\)
+.*: [^\t]* sw ra,20\(sp\)
+.*: [^\t]* lw v0,-32740\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,-32736\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,20\(sp\)
+.*: [^\t]* jr v0
+.*: [^\t]* addiu sp,32
+
+0004049c <a_unused5>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000404a0 <b_unused5>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000404a4 <jals_unused5_mips16>:
+.*: [^\t]* jal .* <a_unused5>
+.*: [^\t]* nop
+.*: [^\t]* jal .* <b_unused5>
+.*: [^\t]* nop
+
+000404b0 <a_unused6>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000404b4 <b_unused6>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000404b8 <a_unused7>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000404bc <b_unused7>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000404c0 <a_unused8>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000404c4 <b_unused8>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000404c8 <a_unused9>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000404cc <b_unused9>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000404d0 <jals_unused9_mips16>:
+.*: [^\t]* jal .* <a_unused9>
+.*: [^\t]* nop
+.*: [^\t]* jal .* <b_unused9>
+.*: [^\t]* nop
+
+000404dc <a_unused10>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000404e0 <b_unused10>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000404e4 <a_unused11>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000404e8 <b_unused11>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000404ec <a_used1>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000404f0 <b_used1>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000404f4 <callpic_used1_nomips16>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+.*: [^\t]* move v0,gp
+.*: [^\t]* addiu sp,sp,-32
+.*: [^\t]* sw v0,16\(sp\)
+.*: [^\t]* sw ra,20\(sp\)
+# 0x40b10: __fn_a_used1
+.*: [^\t]* lw v0,-32744\(v0\)
+.*: [^\t]* addiu v0,v0,2832
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+# 0x40b24: __fn_b_used1
+.*: [^\t]* lw v0,-32744\(v0\)
+.*: [^\t]* addiu v0,v0,2852
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,20\(sp\)
+.*: [^\t]* jr v0
+.*: [^\t]* addiu sp,sp,32
+
+0004054c <a_used2>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040550 <b_used2>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040554 <jals_used2_nomips16>:
+.*: [^\t]* jal .* <__fn_a_used2>
+.*: [^\t]* nop
+.*: [^\t]* jal .* <__fn_b_used2>
+.*: [^\t]* nop
+
+00040564 <a_used3>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040568 <b_used3>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+0004056c <callpic_used3_nomips16>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+.*: [^\t]* move v0,gp
+.*: [^\t]* addiu sp,sp,-32
+.*: [^\t]* sw v0,16\(sp\)
+.*: [^\t]* sw ra,20\(sp\)
+# 0x40b80: __fn_a_used3
+.*: [^\t]* lw v0,-32744\(v0\)
+.*: [^\t]* addiu v0,v0,2944
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+# 0x40b94: __fn_b_used3
+.*: [^\t]* lw v0,-32744\(v0\)
+.*: [^\t]* addiu v0,v0,2964
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,20\(sp\)
+.*: [^\t]* jr v0
+.*: [^\t]* addiu sp,sp,32
+
+000405c4 <callpic_used3_mips16>:
+.*: [^\t]* li v0,1
+.*: [^\t]* la v1,47ff0 <.*>
+.*: [^\t]* sll v0,16
+.*: [^\t]* addu v0,v1
+.*: [^\t]* move gp,v0
+.*: [^\t]* addiu sp,-32
+.*: [^\t]* sw v0,16\(sp\)
+.*: [^\t]* sw ra,20\(sp\)
+# 0x40564: a_used3
+.*: [^\t]* lw v0,-32744\(v0\)
+.*: [^\t]* addiu v0,1381
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+# 0x40568: b_used3
+.*: [^\t]* lw v0,-32744\(v0\)
+.*: [^\t]* addiu v0,1385
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,20\(sp\)
+.*: [^\t]* jr v0
+.*: [^\t]* addiu sp,32
+
+00040600 <a_used4>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040604 <b_used4>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040608 <jals_used4_nomips16>:
+.*: [^\t]* jal .* <__fn_a_used4>
+.*: [^\t]* nop
+.*: [^\t]* jal .* <__fn_b_used4>
+.*: [^\t]* nop
+
+00040618 <jals_used4_mips16>:
+.*: [^\t]* jal .* <a_used4>
+.*: [^\t]* nop
+.*: [^\t]* jal .* <b_used4>
+.*: [^\t]* nop
+
+00040624 <a_used5>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040628 <b_used5>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+0004062c <jals_used5_nomips16>:
+.*: [^\t]* jal .* <__fn_a_used5>
+.*: [^\t]* nop
+.*: [^\t]* jal .* <__fn_b_used5>
+.*: [^\t]* nop
+
+0004063c <callpic_used5_mips16>:
+.*: [^\t]* li v0,1
+.*: [^\t]* la v1,47ff0 <.*>
+.*: [^\t]* sll v0,16
+.*: [^\t]* addu v0,v1
+.*: [^\t]* move gp,v0
+.*: [^\t]* addiu sp,-32
+.*: [^\t]* sw v0,16\(sp\)
+.*: [^\t]* sw ra,20\(sp\)
+# 0x40624: a_used5
+.*: [^\t]* lw v0,-32744\(v0\)
+.*: [^\t]* addiu v0,1573
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+# 0x40628: b_used5
+.*: [^\t]* lw v0,-32744\(v0\)
+.*: [^\t]* addiu v0,1577
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,20\(sp\)
+.*: [^\t]* jr v0
+.*: [^\t]* addiu sp,32
+
+00040678 <a_used6>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+0004067c <b_used6>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040680 <callpic_used6_nomips16>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+.*: [^\t]* move v0,gp
+.*: [^\t]* addiu sp,sp,-32
+.*: [^\t]* sw v0,16\(sp\)
+.*: [^\t]* sw ra,20\(sp\)
+.*: [^\t]* lw v0,-32732\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,-32728\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,20\(sp\)
+.*: [^\t]* jr v0
+.*: [^\t]* addiu sp,sp,32
+
+000406d0 <a_used7>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000406d4 <b_used7>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000406d8 <jals_used7_nomips16>:
+.*: [^\t]* jal .* <__fn_a_used7>
+.*: [^\t]* nop
+.*: [^\t]* jal .* <__fn_b_used7>
+.*: [^\t]* nop
+
+000406e8 <a_used8>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000406ec <b_used8>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000406f0 <a_used9>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000406f4 <b_used9>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000406f8 <a_used10>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000406fc <b_used10>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040700 <callpic_used10_nomips16>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+.*: [^\t]* move v0,gp
+.*: [^\t]* addiu sp,sp,-32
+.*: [^\t]* sw v0,16\(sp\)
+.*: [^\t]* sw ra,20\(sp\)
+.*: [^\t]* lw v0,-32724\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,-32720\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,20\(sp\)
+.*: [^\t]* jr v0
+.*: [^\t]* addiu sp,sp,32
+
+00040750 <callpic_used10_mips16>:
+.*: [^\t]* li v0,1
+.*: [^\t]* la v1,47ff0 <.*>
+.*: [^\t]* sll v0,16
+.*: [^\t]* addu v0,v1
+.*: [^\t]* move gp,v0
+.*: [^\t]* addiu sp,-32
+.*: [^\t]* sw v0,16\(sp\)
+.*: [^\t]* sw ra,20\(sp\)
+.*: [^\t]* lw v0,-32724\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,-32720\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,20\(sp\)
+.*: [^\t]* jr v0
+.*: [^\t]* addiu sp,32
+
+00040784 <a_used11>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040788 <b_used11>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+0004078c <jals_used11_nomips16>:
+.*: [^\t]* jal .* <__fn_a_used11>
+.*: [^\t]* nop
+.*: [^\t]* jal .* <__fn_b_used11>
+.*: [^\t]* nop
+
+0004079c <jals_used11_mips16>:
+.*: [^\t]* jal .* <a_used11>
+.*: [^\t]* nop
+.*: [^\t]* jal .* <b_used11>
+.*: [^\t]* nop
+
+000407a8 <a_used12>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000407ac <b_used12>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000407b0 <jals_used12_nomips16>:
+.*: [^\t]* jal .* <__fn_a_used12>
+.*: [^\t]* nop
+.*: [^\t]* jal .* <__fn_b_used12>
+.*: [^\t]* nop
+
+000407c0 <callpic_used12_mips16>:
+.*: [^\t]* li v0,1
+.*: [^\t]* la v1,47ff0 <.*>
+.*: [^\t]* sll v0,16
+.*: [^\t]* addu v0,v1
+.*: [^\t]* move gp,v0
+.*: [^\t]* addiu sp,-32
+.*: [^\t]* sw v0,16\(sp\)
+.*: [^\t]* sw ra,20\(sp\)
+.*: [^\t]* lw v0,-32716\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,-32712\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,20\(sp\)
+.*: [^\t]* jr v0
+.*: [^\t]* addiu sp,32
+
+000407f4 <.mips16.a_used13>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000407f8 <.mips16.b_used13>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000407fc <callpic_used13_nomips16>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+.*: [^\t]* move v0,gp
+.*: [^\t]* addiu sp,sp,-32
+.*: [^\t]* sw v0,16\(sp\)
+.*: [^\t]* sw ra,20\(sp\)
+.*: [^\t]* lw v0,-32708\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,-32704\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,20\(sp\)
+.*: [^\t]* jr v0
+.*: [^\t]* addiu sp,sp,32
+
+0004084c <a_used14>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040850 <b_used14>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040854 <jals_used14_nomips16>:
+.*: [^\t]* jal .* <__fn_a_used14>
+.*: [^\t]* nop
+ .*: [^\t]* jal .* <__fn_b_used14>
+.*: [^\t]* nop
+
+00040864 <.mips16.a_used15>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040868 <.mips16.b_used15>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+0004086c <a_used16>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040870 <b_used16>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040874 <.mips16.a_used17>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040878 <.mips16.b_used17>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+0004087c <callpic_used17_nomips16>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+.*: [^\t]* move v0,gp
+.*: [^\t]* addiu sp,sp,-32
+.*: [^\t]* sw v0,16\(sp\)
+.*: [^\t]* sw ra,20\(sp\)
+.*: [^\t]* lw v0,-32700\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,-32696\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,20\(sp\)
+.*: [^\t]* jr v0
+.*: [^\t]* addiu sp,sp,32
+
+000408cc <callpic_used17_mips16>:
+.*: [^\t]* li v0,1
+.*: [^\t]* la v1,47ff0 <.*>
+.*: [^\t]* sll v0,16
+.*: [^\t]* addu v0,v1
+.*: [^\t]* move gp,v0
+.*: [^\t]* addiu sp,-32
+.*: [^\t]* sw v0,16\(sp\)
+.*: [^\t]* sw ra,20\(sp\)
+.*: [^\t]* lw v0,-32700\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,-32696\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,20\(sp\)
+.*: [^\t]* jr v0
+.*: [^\t]* addiu sp,32
+
+00040900 <a_used18>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040904 <b_used18>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040908 <jals_used18_nomips16>:
+.*: [^\t]* jal .* <__fn_a_used18>
+.*: [^\t]* nop
+.*: [^\t]* jal .* <__fn_b_used18>
+.*: [^\t]* nop
+
+00040918 <jals_used18_mips16>:
+.*: [^\t]* jal .* <a_used18>
+.*: [^\t]* nop
+.*: [^\t]* jal .* <b_used18>
+.*: [^\t]* nop
+
+00040924 <.mips16.a_used19>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040928 <.mips16.b_used19>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+0004092c <jals_used19_nomips16>:
+.*: [^\t]* jal .* <a_used19>
+.*: [^\t]* nop
+.*: [^\t]* jal .* <b_used19>
+.*: [^\t]* nop
+
+0004093c <callpic_used19_mips16>:
+.*: [^\t]* li v0,1
+.*: [^\t]* la v1,47ff0 <.*>
+.*: [^\t]* sll v0,16
+.*: [^\t]* addu v0,v1
+.*: [^\t]* move gp,v0
+.*: [^\t]* addiu sp,-32
+.*: [^\t]* sw v0,16\(sp\)
+.*: [^\t]* sw ra,20\(sp\)
+.*: [^\t]* lw v0,-32692\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,-32688\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,20\(sp\)
+.*: [^\t]* jr v0
+.*: [^\t]* addiu sp,32
+
+00040970 <.mips16.a_used20>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040974 <.mips16.b_used20>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040978 <callpic_used20_mips16>:
+.*: [^\t]* li v0,1
+.*: [^\t]* la v1,47ff0 <.*>
+.*: [^\t]* sll v0,16
+.*: [^\t]* addu v0,v1
+.*: [^\t]* move gp,v0
+.*: [^\t]* addiu sp,-32
+.*: [^\t]* sw v0,16\(sp\)
+.*: [^\t]* sw ra,20\(sp\)
+.*: [^\t]* lw v0,-32684\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,-32680\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,20\(sp\)
+.*: [^\t]* jr v0
+.*: [^\t]* addiu sp,32
+
+000409ac <.mips16.a_used21>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+000409b0 <.mips16.b_used21>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+#...
+
+000409c0 <callpic_unused6_mips16>:
+.*: [^\t]* li v0,1
+.*: [^\t]* la v1,47ff0 <.*>
+.*: [^\t]* sll v0,16
+.*: [^\t]* addu v0,v1
+.*: [^\t]* move gp,v0
+.*: [^\t]* addiu sp,-32
+.*: [^\t]* sw v0,16\(sp\)
+.*: [^\t]* sw ra,20\(sp\)
+.*: [^\t]* lw v0,-32676\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,-32672\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,20\(sp\)
+.*: [^\t]* jr v0
+.*: [^\t]* addiu sp,32
+
+000409f4 <jals_unused7_mips16>:
+.*: [^\t]* jal .* <a_unused7>
+.*: [^\t]* nop
+.*: [^\t]* jal .* <b_unused7>
+.*: [^\t]* nop
+
+00040a00 <jals_unused10_mips16>:
+.*: [^\t]* jal .* <a_unused10>
+.*: [^\t]* nop
+.*: [^\t]* jal .* <b_unused10>
+.*: [^\t]* nop
+
+00040a0c <callpic_used8_nomips16>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+.*: [^\t]* move v0,gp
+.*: [^\t]* addiu sp,sp,-32
+.*: [^\t]* sw v0,16\(sp\)
+.*: [^\t]* sw ra,20\(sp\)
+.*: [^\t]* lw v0,-32668\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,-32664\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,20\(sp\)
+.*: [^\t]* jr v0
+.*: [^\t]* addiu sp,sp,32
+
+00040a5c <jals_used9_nomips16>:
+.*: [^\t]* jal .* <__fn_a_used9>
+.*: [^\t]* nop
+.*: [^\t]* jal .* <__fn_b_used9>
+.*: [^\t]* nop
+
+00040a6c <callpic_used15_nomips16>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+.*: [^\t]* move v0,gp
+.*: [^\t]* addiu sp,sp,-32
+.*: [^\t]* sw v0,16\(sp\)
+.*: [^\t]* sw ra,20\(sp\)
+.*: [^\t]* lw v0,-32660\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,-32656\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,20\(sp\)
+.*: [^\t]* jr v0
+.*: [^\t]* addiu sp,sp,32
+
+00040abc <jals_used16_nomips16>:
+.*: [^\t]* jal .* <__fn_a_used16>
+.*: [^\t]* nop
+.*: [^\t]* jal .* <__fn_b_used16>
+.*: [^\t]* nop
+
+00040acc <callpic_used21_mips16>:
+.*: [^\t]* li v0,1
+.*: [^\t]* la v1,47ff0 <.*>
+.*: [^\t]* sll v0,16
+.*: [^\t]* addu v0,v1
+.*: [^\t]* move gp,v0
+.*: [^\t]* addiu sp,-32
+.*: [^\t]* sw v0,16\(sp\)
+.*: [^\t]* sw ra,20\(sp\)
+.*: [^\t]* lw v0,-32652\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,-32648\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,20\(sp\)
+.*: [^\t]* jr v0
+.*: [^\t]* addiu sp,32
+
+00040b00 <__start>:
+ \.\.\.
+
+00040b10 <__fn_a_used1>:
+.*: [^\t]* lui v0,.*
+.*: [^\t]* addiu v0,v0,.*
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040b24 <__fn_b_used1>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 0x404f0: b_used1
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,1265
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040b48 <__fn_a_used2>:
+.*: [^\t]* lui v0,.*
+.*: [^\t]* addiu v0,v0,.*
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040b5c <__fn_b_used2>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 0x40550: b_used2
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,1361
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040b80 <__fn_a_used3>:
+.*: [^\t]* lui v0,.*
+.*: [^\t]* addiu v0,v0,.*
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040b94 <__fn_b_used3>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 0x40568: b_used3
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,1385
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040bb8 <__fn_a_used4>:
+.*: [^\t]* lui v0,.*
+.*: [^\t]* addiu v0,v0,.*
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040bcc <__fn_b_used4>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 0x40604: b_used4
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,1541
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040bf0 <__fn_a_used5>:
+.*: [^\t]* lui v0,.*
+.*: [^\t]* addiu v0,v0,.*
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040c04 <__fn_b_used5>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 0x40628: b_used5
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,1577
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040c28 <__fn_a_used6>:
+.*: [^\t]* lui v0,.*
+.*: [^\t]* addiu v0,v0,.*
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040c3c <__fn_b_used6>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 0x4067c: b_used6
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,1661
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040c60 <__fn_a_used7>:
+.*: [^\t]* lui v0,.*
+.*: [^\t]* addiu v0,v0,.*
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040c74 <__fn_b_used7>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 0x406d4: b_used7
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,1749
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040c98 <__fn_a_used8>:
+.*: [^\t]* lui v0,.*
+.*: [^\t]* addiu v0,v0,.*
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040cac <__fn_b_used8>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 0x406ec: b_used8
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,1773
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040cd0 <__fn_a_used9>:
+.*: [^\t]* lui v0,.*
+.*: [^\t]* addiu v0,v0,.*
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040ce4 <__fn_b_used9>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 0x406f4: b_used9
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,1781
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040d08 <__fn_a_used10>:
+.*: [^\t]* lui v0,.*
+.*: [^\t]* addiu v0,v0,.*
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040d1c <__fn_b_used10>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 0x406fc: b_used10
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,1789
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040d40 <__fn_a_used11>:
+.*: [^\t]* lui v0,.*
+.*: [^\t]* addiu v0,v0,.*
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040d54 <__fn_b_used11>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 0x40788: b_used11
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,1929
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040d78 <__fn_a_used12>:
+.*: [^\t]* lui v0,.*
+.*: [^\t]* addiu v0,v0,.*
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040d8c <__fn_b_used12>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 0x407ac: b_used12
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,1965
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040db0 <a_used13>:
+.*: [^\t]* lui v0,.*
+.*: [^\t]* addiu v0,v0,.*
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040dc4 <b_used13>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 0x407f8: .mips16.b_used13
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,2041
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040de8 <__fn_a_used14>:
+.*: [^\t]* lui v0,.*
+.*: [^\t]* addiu v0,v0,.*
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040dfc <__fn_b_used14>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 0x40850: b_used14
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,2129
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040e20 <a_used15>:
+.*: [^\t]* lui v0,.*
+.*: [^\t]* addiu v0,v0,.*
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040e34 <b_used15>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 0x40628: .mips16.b_used15
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,2153
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040e58 <__fn_a_used16>:
+.*: [^\t]* lui v0,.*
+.*: [^\t]* addiu v0,v0,.*
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040e6c <__fn_b_used16>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 0x40870: b_used16
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,2161
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040e90 <a_used17>:
+.*: [^\t]* lui v0,.*
+.*: [^\t]* addiu v0,v0,.*
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040ea4 <b_used17>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 0x40878: .mips16.b_used17
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,2169
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040ec8 <__fn_a_used18>:
+.*: [^\t]* lui v0,.*
+.*: [^\t]* addiu v0,v0,.*
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040edc <__fn_b_used18>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 0x40904: b_used18
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,2309
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040f00 <a_used19>:
+.*: [^\t]* lui v0,.*
+.*: [^\t]* addiu v0,v0,.*
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040f14 <b_used19>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 0x40928: .mips16.b_used19
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,2345
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040f38 <a_used20>:
+.*: [^\t]* lui v0,.*
+.*: [^\t]* addiu v0,v0,.*
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040f4c <b_used20>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 0x40974: .mips16.b_used20
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,2421
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040f70 <a_used21>:
+.*: [^\t]* lui v0,.*
+.*: [^\t]* addiu v0,v0,.*
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040f84 <b_used21>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 0x409b0: .mips16.b_used21
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,2481
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1.gd b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1.gd
new file mode 100644
index 0000000..b8d8b34
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1.gd
@@ -0,0 +1,64 @@
+
+Primary GOT:
+ Canonical gp value: 00057ff0
+
+ Reserved entries:
+ Address Access Initial Purpose
+ 00050000 -32752\(gp\) 00000000 Lazy resolver
+ 00050004 -32748\(gp\) 80000000 Module pointer \(GNU extension\)
+
+ Local entries:
+ Address Access Initial
+# GOT page entry
+ 00050008 -32744\(gp\) 00040000
+# a_unused4
+ 0005000c -32740\(gp\) 00040461
+# b_unused4
+ 00050010 -32736\(gp\) 00040465
+# __fn_a_used6
+ 00050014 -32732\(gp\) 00040c28
+# __fn_b_used6
+ 00050018 -32728\(gp\) 00040c3c
+# __fn_a_used10
+ 0005001c -32724\(gp\) 00040d08
+# __fn_b_used10
+ 00050020 -32720\(gp\) 00040d1c
+# __fn_a_used12
+ 00050024 -32716\(gp\) 00040d78
+# __fn_b_used12
+ 00050028 -32712\(gp\) 00040d8c
+# a_used13
+ 0005002c -32708\(gp\) 00040db0
+# b_used13
+ 00050030 -32704\(gp\) 00040dc4
+# a_used17
+ 00050034 -32700\(gp\) 00040e90
+# b_used17
+ 00050038 -32696\(gp\) 00040ea4
+# a_used19
+ 0005003c -32692\(gp\) 00040f00
+# b_used19
+ 00050040 -32688\(gp\) 00040f14
+# a_used20
+ 00050044 -32684\(gp\) 00040f38
+# b_used20
+ 00050048 -32680\(gp\) 00040f4c
+# a_unused6
+ 0005004c -32676\(gp\) 000404b1
+# b_unused6
+ 00050050 -32672\(gp\) 000404b5
+# __fn_a_used8
+ 00050054 -32668\(gp\) 00040c98
+# __fn_b_used8
+ 00050058 -32664\(gp\) 00040cac
+# a_used15
+ 0005005c -32660\(gp\) 00040e20
+# b_used15
+ 00050060 -32656\(gp\) 00040e34
+# a_used21
+ 00050064 -32652\(gp\) 00040f70
+# b_used21
+ 00050068 -32648\(gp\) 00040f84
+ 0005006c -32644\(gp\) 00000000
+#pass
+
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1.inc b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1.inc
new file mode 100644
index 0000000..9268a07
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1.inc
@@ -0,0 +1,147 @@
+ # Declare a function called NAME and an __fn_NAME stub for it.
+ # Make the stub use la_TYPE to load the the target address into $2.
+ .macro stub,name,type
+ .set nomips16
+ .section .mips16.fn.\name, "ax", @progbits
+ .ent __fn_\name
+__fn_\name:
+ la_\type \name
+ mfc1 $4,$f12
+ jr $2
+ nop
+ .end __fn_\name
+
+ .set mips16
+ .text
+ .ent \name
+\name:
+__fn_local_\name:
+ jr $31
+ nop
+ .end \name
+ .endm
+
+ # Like stub, but ensure NAME is a local symbol.
+ .macro lstub,name,type
+ stub \name, \type
+ .equ local_\name,1
+ .endm
+
+ # Like stub, but ensure NAME is a hidden symbol.
+ .macro hstub,name,type
+ .globl \name
+ .hidden \name
+ stub \name, \type
+ .endm
+
+ # Like lstub, but make the MIPS16 function global rather than local.
+ .macro gstub,name,type
+ .globl \name
+ stub \name, \type
+ .endm
+
+ # Use an absolute sequence to load NAME into a register.
+ .macro la_noshared,name
+ lui $2,%hi(\name)
+ addiu $2,$2,%lo(\name)
+ .endm
+
+ # Use the normal PIC sequence to load __fn_local_NAME into $2
+ # and emit a dummy relocation against NAME. This macro is always
+ # used at the start of a function.
+ .macro la_shared,name
+ .reloc 0,R_MIPS_NONE,\name
+ .cpload $25
+ la $2,__fn_local_\name
+ .endm
+
+ # Use TYPE (either LSTUB, HSTUB or GSTUB) to define functions
+ # called a_NAME and b_NAME. The former uses absolute accesses
+ # and the latter uses PIC accesses.
+ .macro decl,name,type
+ \type a_\name, noshared
+ \type b_\name, shared
+ .endm
+
+ # Emit the MIPS16 PIC sequence for setting $28 from $25.
+ # Make the value of $25 available in $2 as well.
+ .macro cpload_mips16
+ li $2,%hi(_gp_disp)
+ addiu $3,$pc,%lo(_gp_disp)
+ sll $2,16
+ addu $2,$2,$3
+ move $28,$2
+ .endm
+
+ # Likewise, but for non-MIPS16 code.
+ .macro cpload_nomips16
+ .cpload $25
+ move $2,$28
+ .endm
+
+ # Start a PIC function in ISA mode MODE, which is either "mips16"
+ # or "nomips16".
+ .macro pic_prologue,mode
+ cpload_\mode
+ addiu $sp,$sp,-32
+ sw $2,16($sp)
+ sw $31,20($sp)
+ .endm
+
+ # Use a PIC function to call NAME.
+ .macro pic_call,name,mode
+ .ifdef local_\name
+ .ifc \mode,mips16
+ lw $2,%got(__fn_local_\name)($2)
+ addiu $2,%lo(__fn_local_\name)
+ .else
+ lw $2,%got(\name)($2)
+ addiu $2,%lo(\name)
+ .endif
+ .else
+ lw $2,%call16(\name)($2)
+ .endif
+ jalr $2
+ move $25,$2
+ lw $2,16($sp)
+ move $28,$2
+ .endm
+
+ # Finish a PIC function started by pic_prologue.
+ .macro pic_epilogue
+ lw $2,20($sp)
+ jr $2
+ addiu $sp,$sp,32
+ .endm
+
+ # Use PIC %call16 sequences to call a_NAME and b_NAME.
+ # MODE selects the ISA mode of the code: either "mips16"
+ # or "nomips16".
+ .macro callpic,name,mode
+ .text
+ .set \mode
+ .ent callpic_\name\()_\mode
+callpic_\name\()_\mode:
+ pic_prologue \mode
+ pic_call a_\name,\mode
+ pic_call b_\name,\mode
+ pic_epilogue
+ .end callpic_\name\()_\mode
+ .endm
+
+ # Use absolute jals to call a_NAME and b_NAME. MODE selects the
+ # ISA mode of the code: either "mips16" or "nomips16".
+ .macro jals,name,mode
+ .text
+ .set \mode
+ .ent jals_\name\()_\mode
+jals_\name\()_\mode:
+ .option pic0
+ jal a_\name
+ nop
+
+ jal b_\name
+ nop
+ .option pic2
+ .end jals_\name\()_\mode
+ .endm
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1.ld b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1.ld
new file mode 100644
index 0000000..91f1464
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1.ld
@@ -0,0 +1,22 @@
+SECTIONS
+{
+ . = 0x40000;
+ .interp : { *(.interp) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ .dynamic : { *(.dynamic) }
+ .reginfo : { *(.reginfo) }
+ .hash : { *(.hash) }
+ . = ALIGN (0x400);
+ .text : { *(.text) *(.mips16.*) }
+ .MIPS.stubs : { *(.MIPS.stubs) }
+ . = ALIGN (0x400);
+ .rel.plt : { *(.rel.plt) }
+ .rel.dyn : { *(.rel.dyn) }
+ . = 0x50000;
+ _gp = . + 0x7ff0;
+ .got : { *(.got) }
+ . = 0x50400;
+ .data : { *(.data) }
+ .rld_map : { *(.rld_map) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1a.s b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1a.s
new file mode 100644
index 0000000..14ea93c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1a.s
@@ -0,0 +1,144 @@
+ .abicalls
+ .set noreorder
+ .include "mips16-pic-1.inc"
+
+ # Test local stubs that are only used by MIPS16 PIC calls in this file.
+ decl unused1,lstub
+ callpic unused1,mips16
+
+ # Test local stubs that are only used by MIPS16 jals in this file.
+ decl unused2,lstub
+ jals unused2,mips16
+
+ # Test local stubs that aren't called at all.
+ decl unused3,lstub
+
+ # Test hidden stubs that are called by MIPS16 PIC calls in this file.
+ decl unused4,hstub
+ callpic unused4,mips16
+
+ # Test hidden stubs that are called by MIPS16 jals in this file.
+ decl unused5,hstub
+ jals unused5,mips16
+
+ # Test hidden stubs that are called by MIPS16 PIC calls in another file.
+ decl unused6,hstub
+
+ # Test hidden stubs that are called by MIPS16 jals in another file.
+ decl unused7,hstub
+
+ # Test hidden stubs that aren't called at all.
+ decl unused8,hstub
+
+ # Test global stubs that are called by MIPS16 jals in this file.
+ decl unused9,gstub
+ jals unused9,mips16
+
+ # Test global stubs that are called by MIPS16 jals in another file.
+ decl unused10,gstub
+
+ # Test global stubs that aren't called at all.
+ decl unused11,gstub
+
+ # Test local stubs that are used by non-MIPS16 PIC calls in this file.
+ decl used1,lstub
+ callpic used1,nomips16
+
+ # Test local stubs that are used by non-MIPS16 jals in this file.
+ decl used2,lstub
+ jals used2,nomips16
+
+ # Test local stubs that are used by both MIPS16 and non-MIPS16 PIC
+ # calls in this file.
+ decl used3,lstub
+ callpic used3,nomips16
+ callpic used3,mips16
+
+ # Test local stubs that are used by both MIPS16 and non-MIPS16 jals
+ # in this file.
+ decl used4,lstub
+ jals used4,nomips16
+ jals used4,mips16
+
+ # Test local stubs that are used by a combination of MIPS16 PIC calls
+ # and non-MIPS16 jals in this file.
+ decl used5,lstub
+ jals used5,nomips16
+ callpic used5,mips16
+
+ # Test hidden stubs that are used by non-MIPS16 PIC calls in this file.
+ decl used6,hstub
+ callpic used6,nomips16
+
+ # Test hidden stubs that are used by non-MIPS16 jals in this file.
+ decl used7,hstub
+ jals used7,nomips16
+
+ # Test hidden stubs that are used by non-MIPS16 PIC calls in another
+ # file.
+ decl used8,hstub
+
+ # Test hidden stubs that are used by non-MIPS16 jals in another
+ # file.
+ decl used9,hstub
+
+ # Test hidden stubs that are used by both MIPS16 and non-MIPS16 PIC
+ # calls in this file.
+ decl used10,hstub
+ callpic used10,nomips16
+ callpic used10,mips16
+
+ # Test hidden stubs that are used by both MIPS16 and non-MIPS16 jals
+ # in this file.
+ decl used11,hstub
+ jals used11,nomips16
+ jals used11,mips16
+
+ # Test hidden stubs that are used by a combination of MIPS16 PIC calls
+ # and non-MIPS16 jals in this file.
+ decl used12,hstub
+ jals used12,nomips16
+ callpic used12,mips16
+
+ # Test global stubs that are used by non-MIPS16 PIC calls in this file.
+ decl used13,gstub
+ callpic used13,nomips16
+
+ # Test global stubs that are used by non-MIPS16 jals in this file.
+ decl used14,gstub
+ jals used14,nomips16
+
+ # Test global stubs that are used by non-MIPS16 PIC calls in another
+ # file.
+ decl used15,gstub
+
+ # Test global stubs that are used by non-MIPS16 jals in another file.
+ decl used16,gstub
+
+ # Test global stubs that are used by both MIPS16 and non-MIPS16 PIC
+ # calls in this file.
+ decl used17,gstub
+ callpic used17,nomips16
+ callpic used17,mips16
+
+ # Test global stubs that are used by both MIPS16 and non-MIPS16 jals
+ # in this file.
+ decl used18,gstub
+ jals used18,nomips16
+ jals used18,mips16
+
+ # Test global stubs that are used by a combination of MIPS16 PIC calls
+ # and non-MIPS16 jals in this file.
+ decl used19,gstub
+ jals used19,nomips16
+ callpic used19,mips16
+
+ # Test global stubs that are used by MIPS16 PIC calls in this file.
+ # We currently force all targets of call16 relocations to be dynamic,
+ # and the stub must be the definition of the dynamic symbol.
+ decl used20,gstub
+ callpic used20,mips16
+
+ # Test global stubs that are used by MIPS16 PIC calls in another file.
+ # Needed for the same reason as used21.
+ decl used21,gstub
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1b.s b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1b.s
new file mode 100644
index 0000000..9a17072
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-1b.s
@@ -0,0 +1,19 @@
+ .abicalls
+ .set noreorder
+ .include "mips16-pic-1.inc"
+
+ callpic unused6,mips16
+ jals unused7,mips16
+ jals unused10,mips16
+ callpic used8,nomips16
+ jals used9,nomips16
+ callpic used15,nomips16
+ jals used16,nomips16
+ callpic used21,mips16
+
+ .globl __start
+ .ent __start
+ .set nomips16
+__start:
+ nop
+ .end __start
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2.ad b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2.ad
new file mode 100644
index 0000000..95c53e5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2.ad
@@ -0,0 +1,6 @@
+# [MIPS_GOTSYM, MIPS_SYMTABNO) covers used4...used7.
+#...
+ .* \(MIPS_SYMTABNO\) * 10
+#...
+ .* \(MIPS_GOTSYM\) * 0x6
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2.dd b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2.dd
new file mode 100644
index 0000000..7052057
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2.dd
@@ -0,0 +1,208 @@
+
+.*
+
+
+Disassembly of section \.text:
+
+00040400 <unused1>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040404 <unused2>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040408 <unused3>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+0004040c <unused4>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040410 <unused5>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040414 <used1>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040418 <used2>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+0004041c <used3>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040420 <\.mips16\.used4>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040424 <\.mips16\.used5>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040428 <\.mips16\.used6>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+0004042c <\.mips16\.used7>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040430 <\.mips16\.used8>:
+.*: [^\t]* jr ra
+.*: [^\t]* nop
+
+00040434 <foo>:
+.*: [^\t]* li v0,1
+.*: [^\t]* la v1,47ff0 <.*>
+.*: [^\t]* sll v0,16
+.*: [^\t]* addu v0,v1
+.*: [^\t]* move gp,v0
+.*: [^\t]* addiu sp,-32
+.*: [^\t]* sw v0,16\(sp\)
+.*: [^\t]* sw ra,20\(sp\)
+# 40400: unused1
+.*: [^\t]* lw v0,-32744\(v0\)
+.*: [^\t]* addiu v0,1025
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,-32740\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,-32716\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,20\(sp\)
+.*: [^\t]* jr v0
+.*: [^\t]* addiu sp,32
+#...
+
+00040480 <bar>:
+.*: [^\t]* li v0,1
+.*: [^\t]* la v1,47ff0 <.*>
+.*: [^\t]* sll v0,16
+.*: [^\t]* addu v0,v1
+.*: [^\t]* move gp,v0
+.*: [^\t]* addiu sp,-32
+.*: [^\t]* sw v0,16\(sp\)
+.*: [^\t]* sw ra,20\(sp\)
+.*: [^\t]* lw v0,-32736\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,-32712\(v0\)
+.*: [^\t]* jalr v0
+.*: [^\t]* move t9,v0
+.*: [^\t]* lw v0,16\(sp\)
+.*: [^\t]* move gp,v0
+.*: [^\t]* lw v0,20\(sp\)
+.*: [^\t]* jr v0
+.*: [^\t]* addiu sp,32
+#...
+
+000404c0 <__fn_used1>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 40414: used1
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,1045
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+000404e4 <__fn_used2>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 40418: used2
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,1049
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040508 <__fn_used3>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 4041c: used3
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,1053
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+0004052c <used4>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 40420: used4
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,1057
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040550 <used5>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 40424: used5
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,1061
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040574 <used6>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 40428: used6
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,1065
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+00040598 <used7>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 4042c: used7
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,1069
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
+
+000405bc <used8>:
+.*: [^\t]* lui gp,.*
+.*: [^\t]* addiu gp,gp,.*
+.*: [^\t]* addu gp,gp,t9
+# 40430: used8
+.*: [^\t]* lw v0,-32744\(gp\)
+.*: [^\t]* nop
+.*: [^\t]* addiu v0,v0,1073
+.*: [^\t]* mfc1 a0,\$f12
+.*: [^\t]* jr v0
+.*: [^\t]* nop
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2.gd b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2.gd
new file mode 100644
index 0000000..d8d1451
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2.gd
@@ -0,0 +1,26 @@
+
+Primary GOT:
+ Canonical gp value: 00057ff0
+
+ Reserved entries:
+ Address Access Initial Purpose
+ 00050000 -32752\(gp\) 00000000 Lazy resolver
+ 00050004 -32748\(gp\) 80000000 Module pointer \(GNU extension\)
+
+ Local entries:
+ Address Access Initial
+ 00050008 -32744\(gp\) 00040000
+ 0005000c -32740\(gp\) 00040409
+ 00050010 -32736\(gp\) 0004040d
+ 00050014 -32732\(gp\) 00000000
+ 00050018 -32728\(gp\) 00000000
+ 0005001c -32724\(gp\) 00000000
+ 00050020 -32720\(gp\) 00000000
+
+ Global entries:
+ Address Access Initial Sym\.Val\. Type Ndx Name
+ 00050024 -32716\(gp\) 00040574 00040574 FUNC 6 used6
+ 00050028 -32712\(gp\) 00040598 00040598 FUNC 6 used7
+ 0005002c -32708\(gp\) 00040550 00040550 FUNC 6 used5
+ 00050030 -32704\(gp\) 0004052c 0004052c FUNC 6 used4
+
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2.nd b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2.nd
new file mode 100644
index 0000000..94615b5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2.nd
@@ -0,0 +1,10 @@
+# used8 should come before MIPS_GOTSYM.
+#...
+ +4: 000405bc +36 +FUNC +GLOBAL +DEFAULT .* used8
+ +5: .* _GLOBAL_OFFSET_TABLE_
+ +6: 00040574 +36 +FUNC +GLOBAL +DEFAULT .* used6
+ +7: 00040598 +36 +FUNC +GLOBAL +DEFAULT .* used7
+ +8: 00040550 +36 +FUNC +GLOBAL +DEFAULT .* used5
+ +9: 0004052c +36 +FUNC +GLOBAL +DEFAULT .* used4
+
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2.rd b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2.rd
new file mode 100644
index 0000000..09a97b7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2.rd
@@ -0,0 +1,9 @@
+
+Relocation section '\.rel\.dyn' .*:
+.*
+0+00000 * [0-9]+ * R_MIPS_NONE *
+0+50400 * [0-9]+ * R_MIPS_REL32 *
+0+50404 * [0-9]+ * R_MIPS_REL32 *
+0+50410 * [0-9]+ * R_MIPS_REL32 *
+0+50414 * [0-9]+ * R_MIPS_REL32 * 00040550 * used5
+0+50408 * [0-9]+ * R_MIPS_REL32 * 0004052c * used4
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2a.s b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2a.s
new file mode 100644
index 0000000..08a1269
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2a.s
@@ -0,0 +1,63 @@
+ .abicalls
+ .set noreorder
+ .include "mips16-pic-1.inc"
+
+ # Test local stubs that are only used by MIPS16 PIC calls in this file.
+ lstub unused1,shared
+
+ # Test local stubs that aren't called at all.
+ lstub unused2,shared
+
+ # Test hidden stubs that are called by MIPS16 PIC calls in this file.
+ hstub unused3,shared
+
+ # Test hidden stubs that are called by MIPS16 PIC calls in another file.
+ hstub unused4,shared
+
+ # Test hidden stubs that aren't called at all.
+ hstub unused5,shared
+
+
+ # Test local stubs that are referenced by absolute relocations
+ # in this file.
+ lstub used1,shared
+
+ # Test hidden stubs that are referenced by absolute relocations
+ # in this file.
+ hstub used2,shared
+
+ # Test hidden stubs that are referenced by absolute relocations
+ # in another file.
+ hstub used3,shared
+
+ # Test global stubs that are referenced by absolute relocations
+ # in this file.
+ gstub used4,shared
+
+ # Test global stubs that are referenced by absolute relocations
+ # in another file.
+ gstub used5,shared
+
+ # Test global stubs that are called by MIPS16 PIC calls in this file.
+ gstub used6,shared
+
+ # Test global stubs that are called by MIPS16 PIC calls in another file.
+ gstub used7,shared
+
+ # Test global stubs that aren't referenced at all.
+ gstub used8,shared
+
+ .set mips16
+ .ent foo
+foo:
+ pic_prologue mips16
+ pic_call unused1,mips16
+ pic_call unused3,mips16
+ pic_call used6,mips16
+ pic_epilogue
+ .end foo
+
+ .data
+ .word used1
+ .word used2
+ .word used4
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2b.s b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2b.s
new file mode 100644
index 0000000..2a66b5a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-2b.s
@@ -0,0 +1,16 @@
+ .abicalls
+ .set noreorder
+ .include "mips16-pic-1.inc"
+
+ .set mips16
+ .ent bar
+bar:
+ pic_prologue mips16
+ pic_call unused4,mips16
+ pic_call used7,mips16
+ pic_epilogue
+ .end bar
+
+ .data
+ .word used3
+ .word used5
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-3.dd b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-3.dd
new file mode 100644
index 0000000..93ba085
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-3.dd
@@ -0,0 +1,265 @@
+
+.*
+
+
+Disassembly of section \.text:
+
+00040400 <unused1>:
+.*: e820 jr ra
+.*: 6500 nop
+
+00040404 <unused2>:
+.*: e820 jr ra
+.*: 6500 nop
+
+00040408 <unused3>:
+.*: e820 jr ra
+.*: 6500 nop
+
+0004040c <unused4>:
+.*: e820 jr ra
+.*: 6500 nop
+
+00040410 <used1>:
+.*: 03e00008 jr ra
+.*: 00000000 nop
+
+00040418 <used2>:
+.*: 03e00008 jr ra
+.*: 00000000 nop
+
+00040420 <used3>:
+.*: 03e00008 jr ra
+.*: 00000000 nop
+
+00040428 <used4>:
+.*: 03e00008 jr ra
+.*: 00000000 nop
+
+00040430 <used5>:
+.*: 03e00008 jr ra
+.*: 00000000 nop
+
+00040438 <used6>:
+.*: 03e00008 jr ra
+.*: 00000000 nop
+
+00040440 <used7>:
+.*: 03e00008 jr ra
+.*: 00000000 nop
+
+00040448 <used8>:
+.*: 03e00008 jr ra
+.*: 00000000 nop
+
+00040450 <used9>:
+.*: 03e00008 jr ra
+.*: 00000000 nop
+
+00040458 <used10>:
+.*: 03e00008 jr ra
+.*: 00000000 nop
+
+00040460 <test_unused1>:
+.*: .* jal .* <unused1>
+
+00040464 <test_used1>:
+.*: .* jalx .* <__call_used1>
+
+00040468 <test_used3>:
+.*: .* jalx .* <__call_used3>
+
+0004046c <test_used7>:
+.*: .* jalx .* <__call_used7>
+
+00040470 <test_extern1>:
+.*: .* jalx .* <__call_extern1>
+
+00040474 <test_unused2>:
+.*: .* jal .* <unused2>
+
+00040478 <test_used2>:
+.*: .* jalx .* <__call_fp_used2>
+
+0004047c <test_used4>:
+.*: .* jalx .* <__call_fp_used4>
+
+00040480 <test_used8>:
+.*: .* jalx .* <__call_fp_used8>
+
+00040484 <test_extern2>:
+.*: .* jalx .* <__call_fp_extern2>
+#...
+
+00040490 <test_unused3>:
+.*: .* jal .* <unused3>
+
+00040494 <test_used5>:
+.*: .* jalx .* <__call_used5>
+
+00040498 <test_used9>:
+.*: .* jalx .* <__call_used9>
+
+0004049c <test_extern3>:
+.*: .* jalx .* <__call_extern3>
+
+000404a0 <test_unused4>:
+.*: .* jal .* <unused4>
+
+000404a4 <test_used6>:
+.*: .* jalx .* <__call_fp_used6>
+
+000404a8 <test_used10>:
+.*: .* jalx .* <__call_fp_used10>
+
+000404ac <test_extern4>:
+.*: .* jalx .* <__call_fp_extern4>
+
+000404b0 <__call_used1>:
+.*: 3c190004 lui t9,.*
+.*: 27390410 addiu t9,t9,.*
+.*: 03200008 jr t9
+.*: 44846000 mtc1 a0,\$f12
+
+000404c0 <__call_used3>:
+.*: 3c190004 lui t9,.*
+.*: 27390420 addiu t9,t9,.*
+.*: 03200008 jr t9
+.*: 44846000 mtc1 a0,\$f12
+
+000404d0 <__call_used7>:
+.*: 3c190004 lui t9,.*
+.*: 27390440 addiu t9,t9,.*
+.*: 03200008 jr t9
+.*: 44846000 mtc1 a0,\$f12
+
+000404e0 <__call_extern1>:
+.*: 3c190004 lui t9,.*
+.*: 27390650 addiu t9,t9,.*
+.*: 03200008 jr t9
+.*: 44846000 mtc1 a0,\$f12
+
+000404f0 <__call_fp_used2>:
+.*: 03e09021 move s2,ra
+.*: 3c190004 lui t9,.*
+.*: 27390418 addiu t9,t9,.*
+.*: 0320f809 jalr t9
+.*: 44846000 mtc1 a0,\$f12
+.*: 44020000 mfc1 v0,\$f0
+.*: 02400008 jr s2
+.*: 00000000 nop
+
+00040510 <__call_fp_used4>:
+.*: 03e09021 move s2,ra
+.*: 3c190004 lui t9,.*
+.*: 27390428 addiu t9,t9,.*
+.*: 0320f809 jalr t9
+.*: 44846000 mtc1 a0,\$f12
+.*: 44020000 mfc1 v0,\$f0
+.*: 02400008 jr s2
+.*: 00000000 nop
+
+00040530 <__call_fp_used8>:
+.*: 03e09021 move s2,ra
+.*: 3c190004 lui t9,.*
+.*: 27390448 addiu t9,t9,.*
+.*: 0320f809 jalr t9
+.*: 44846000 mtc1 a0,\$f12
+.*: 44020000 mfc1 v0,\$f0
+.*: 02400008 jr s2
+.*: 00000000 nop
+
+00040550 <__call_fp_extern2>:
+.*: 03e09021 move s2,ra
+.*: 3c190004 lui t9,.*
+.*: 27390630 addiu t9,t9,.*
+.*: 0320f809 jalr t9
+.*: 44846000 mtc1 a0,\$f12
+.*: 44020000 mfc1 v0,\$f0
+.*: 02400008 jr s2
+.*: 00000000 nop
+
+00040570 <__call_used5>:
+.*: 3c190004 lui t9,.*
+.*: 27390430 addiu t9,t9,.*
+.*: 03200008 jr t9
+.*: 44846000 mtc1 a0,\$f12
+
+00040580 <__call_used9>:
+.*: 3c190004 lui t9,.*
+.*: 27390450 addiu t9,t9,.*
+.*: 03200008 jr t9
+.*: 44846000 mtc1 a0,\$f12
+
+00040590 <__call_extern3>:
+.*: 3c190004 lui t9,.*
+.*: 27390620 addiu t9,t9,.*
+.*: 03200008 jr t9
+.*: 44846000 mtc1 a0,\$f12
+
+000405a0 <__call_fp_used6>:
+.*: 03e09021 move s2,ra
+.*: 3c190004 lui t9,.*
+.*: 27390438 addiu t9,t9,.*
+.*: 0320f809 jalr t9
+.*: 44846000 mtc1 a0,\$f12
+.*: 44020000 mfc1 v0,\$f0
+.*: 02400008 jr s2
+.*: 00000000 nop
+
+000405c0 <__call_fp_used10>:
+.*: 03e09021 move s2,ra
+.*: 3c190004 lui t9,.*
+.*: 27390458 addiu t9,t9,.*
+.*: 0320f809 jalr t9
+.*: 44846000 mtc1 a0,\$f12
+.*: 44020000 mfc1 v0,\$f0
+.*: 02400008 jr s2
+.*: 00000000 nop
+
+000405e0 <__call_fp_extern4>:
+.*: 03e09021 move s2,ra
+.*: 3c190004 lui t9,.*
+.*: 27390640 addiu t9,t9,.*
+.*: 0320f809 jalr t9
+.*: 44846000 mtc1 a0,\$f12
+.*: 44020000 mfc1 v0,\$f0
+.*: 02400008 jr s2
+.*: 00000000 nop
+
+Disassembly of section \.plt:
+
+00040600 <.*>:
+.*: 3c1c0005 lui gp,0x5
+.*: 8f990400 lw t9,1024\(gp\)
+.*: 279c0400 addiu gp,gp,1024
+.*: 031cc023 subu t8,t8,gp
+.*: 03e07821 move t7,ra
+.*: 0018c082 srl t8,t8,0x2
+.*: 0320f809 jalr t9
+.*: 2718fffe addiu t8,t8,-2
+
+00040620 <extern3@plt>:
+.*: 3c0f0005 lui t7,0x5
+.*: 8df90408 lw t9,1032\(t7\)
+.*: 25f80408 addiu t8,t7,1032
+.*: 03200008 jr t9
+
+00040630 <extern2@plt>:
+.*: 3c0f0005 lui t7,0x5
+.*: 8df9040c lw t9,1036\(t7\)
+.*: 25f8040c addiu t8,t7,1036
+.*: 03200008 jr t9
+
+00040640 <extern4@plt>:
+.*: 3c0f0005 lui t7,0x5
+.*: 8df90410 lw t9,1040\(t7\)
+.*: 25f80410 addiu t8,t7,1040
+.*: 03200008 jr t9
+
+00040650 <extern1@plt>:
+.*: 3c0f0005 lui t7,0x5
+.*: 8df90414 lw t9,1044\(t7\)
+.*: 25f80414 addiu t8,t7,1044
+.*: 03200008 jr t9
+.*: 00000000 nop
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-3.gd b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-3.gd
new file mode 100644
index 0000000..9297fe6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-3.gd
@@ -0,0 +1,23 @@
+
+Primary GOT:
+ Canonical gp value: 00057ff0
+
+ Reserved entries:
+ Address Access Initial Purpose
+ 00050000 -32752\(gp\) 00000000 Lazy resolver
+ 00050004 -32748\(gp\) 80000000 Module pointer \(GNU extension\)
+
+
+PLT GOT:
+
+ Reserved entries:
+ Address Initial Purpose
+ 00050400 00000000 PLT lazy resolver
+ 00050404 00000000 Module pointer
+
+ Entries:
+ Address Initial Sym.Val. Type Ndx Name
+ 00050408 00040600 00040620 FUNC UND extern3
+ 0005040c 00040600 00040630 FUNC UND extern2
+ 00050410 00040600 00040640 FUNC UND extern4
+ 00050414 00040600 00040650 FUNC UND extern1
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-3.inc b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-3.inc
new file mode 100644
index 0000000..9611611
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-3.inc
@@ -0,0 +1,59 @@
+ .macro test_call,name
+ .set mips16
+ .text
+ .ent test_\name
+test_\name:
+ jal \name
+ .end test_\name
+ .endm
+
+ .macro call_stub,name
+ .set nomips16
+ .section .mips16.call.\name, "ax", @progbits
+ .ent __call_\name
+__call_\name:
+ la $25,\name
+ jr $25
+ mtc1 $4,$f12
+ .end __call_\name
+
+ test_call \name
+ .endm
+
+ .macro call_fp_stub,name
+ .set nomips16
+ .section .mips16.call.fp.\name, "ax", @progbits
+ .ent __call_fp_\name
+__call_fp_\name:
+ move $18,$31
+ la $25,\name
+ jalr $25
+ mtc1 $4,$f12
+ mfc1 $2,$f0
+ jr $18
+ nop
+ .end __call_fp_\name
+
+ test_call \name
+ .endm
+
+ .macro lstub,name,mode
+ .set \mode
+ .text
+ .ent \name
+\name:
+ jr $31
+ nop
+ .end \name
+ .endm
+
+ .macro hstub,name,mode
+ .globl \name
+ .hidden \name
+ lstub \name, \mode
+ .endm
+
+ .macro gstub,name,mode
+ .globl \name
+ lstub \name, \mode
+ .endm
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-3.rd b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-3.rd
new file mode 100644
index 0000000..6293cf7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-3.rd
@@ -0,0 +1,7 @@
+
+Relocation section '\.rel\.plt' at offset .* contains 4 entries:
+ Offset Info Type Sym\.Value Sym\. Name
+00050408 .*7f R_MIPS_JUMP_SLOT 00040620 extern3
+0005040c .*7f R_MIPS_JUMP_SLOT 00040630 extern2
+00050410 .*7f R_MIPS_JUMP_SLOT 00040640 extern4
+00050414 .*7f R_MIPS_JUMP_SLOT 00040650 extern1
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-3a.s b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-3a.s
new file mode 100644
index 0000000..bbe3a67
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-3a.s
@@ -0,0 +1,59 @@
+ .abicalls
+ .option pic0
+ .set noreorder
+ .include "mips16-pic-3.inc"
+
+ # For symbols called by a .call stub in this file.
+ hstub unused1,mips16
+
+ # For symbols called by a .call.fp stub in this file.
+ hstub unused2,mips16
+
+ # For symbols called by a .call stub in another file.
+ hstub unused3,mips16
+
+ # For symbols called by a .call.fp stub in another file.
+ hstub unused4,mips16
+
+
+ # For symbols called by a .call stub in this file.
+ lstub used1,nomips16
+
+ # For symbols called by a .call.fp stub in this file.
+ lstub used2,nomips16
+
+ # For symbols called by a .call stub in this file.
+ hstub used3,nomips16
+
+ # For symbols called by a .call.fp stub in this file.
+ hstub used4,nomips16
+
+ # For symbols called by a .call stub in another file.
+ hstub used5,nomips16
+
+ # For symbols called by a .call.fp stub in another file.
+ hstub used6,nomips16
+
+ # For symbols called by a .call stub in this file.
+ gstub used7,nomips16
+
+ # For symbols called by a .call.fp stub in this file.
+ gstub used8,nomips16
+
+ # For symbols called by a .call stub in another file.
+ gstub used9,nomips16
+
+ # For symbols called by a .call.fp stub in another file.
+ gstub used10,nomips16
+
+ call_stub unused1
+ call_stub used1
+ call_stub used3
+ call_stub used7
+ call_stub extern1
+
+ call_fp_stub unused2
+ call_fp_stub used2
+ call_fp_stub used4
+ call_fp_stub used8
+ call_fp_stub extern2
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-3b.s b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-3b.s
new file mode 100644
index 0000000..3003145
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-3b.s
@@ -0,0 +1,14 @@
+ .abicalls
+ .option pic0
+ .set noreorder
+ .include "mips16-pic-3.inc"
+
+ call_stub unused3
+ call_stub used5
+ call_stub used9
+ call_stub extern3
+
+ call_fp_stub unused4
+ call_fp_stub used6
+ call_fp_stub used10
+ call_fp_stub extern4
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4.ver b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4.ver
new file mode 100644
index 0000000..fc7b185
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4.ver
@@ -0,0 +1,8 @@
+V1 {
+ global:
+ f1;
+ f2;
+ f3;
+ local:
+ *;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4a.dd b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4a.dd
new file mode 100644
index 0000000..d4e4f22
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4a.dd
@@ -0,0 +1,23 @@
+
+.*
+
+
+Disassembly of section \.text:
+
+00040400 <f2>:
+.* jr ra
+.* nop
+
+00040408 <f3>:
+.* jr ra
+.* nop
+
+00040410 <_f1>:
+.* jr ra
+.* nop
+#...
+
+00040420 <f1@@V1>:
+.* lw t9,-32744\(gp\)
+.* jr t9
+.* mfc1 a0,\$f12
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4a.gd b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4a.gd
new file mode 100644
index 0000000..1ab835e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4a.gd
@@ -0,0 +1,13 @@
+
+Primary GOT:
+ Canonical gp value: 00057ff0
+
+ Reserved entries:
+ Address Access Initial Purpose
+ 00050000 -32752\(gp\) 00000000 Lazy resolver
+ 00050004 -32748\(gp\) 80000000 Module pointer \(GNU extension\)
+
+ Local entries:
+ Address Access Initial
+ 00050008 -32744\(gp\) 00040411
+
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4a.nd b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4a.nd
new file mode 100644
index 0000000..3abf8aa
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4a.nd
@@ -0,0 +1,10 @@
+
+Symbol table '\.dynsym' contains 6 entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +0: 00000000 +0 +NOTYPE +LOCAL +DEFAULT +UND
+ +1: 00040400 +0 +SECTION +LOCAL +DEFAULT +.*
+ +2: 00040420 +12 +FUNC +GLOBAL +DEFAULT +.* f1@@V1
+ +3: 00000000 +0 +OBJECT +GLOBAL +DEFAULT +ABS V1
+ +4: 00040408 +8 +FUNC +GLOBAL +DEFAULT +.* f3@@V1
+ +5: 00040400 +8 +FUNC +GLOBAL +DEFAULT +.* f2@@V1
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4a.s b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4a.s
new file mode 100644
index 0000000..812d9d7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4a.s
@@ -0,0 +1,33 @@
+ .abicalls
+ .set noreorder
+
+ # Define a stub for f1, which is defined in another file.
+ #
+ # (It's questionable whether defining the stub and real function
+ # in separate files is really valid or useful. However, if we
+ # accept it without error, we should do something useful with it.)
+
+ .section .mips16.fn.f1, "ax", @progbits
+ .ent __fn
+__fn:
+ .reloc 0,R_MIPS_NONE,f1
+ la $25,_f1
+ jr $25
+ mfc1 $4,$f12
+ .end __fn
+
+ # Define dummy functions for the executable to call.
+
+ .macro dummy,name
+ .text
+ .global \name
+ .type \name,@function
+ .ent \name
+\name:
+ jr $31
+ nop
+ .end \name
+ .endm
+
+ dummy f2
+ dummy f3
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4b.dd b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4b.dd
new file mode 100644
index 0000000..ddc55c3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4b.dd
@@ -0,0 +1,35 @@
+
+.*
+
+
+Disassembly of section \.text:
+
+00040400 <__start>:
+.* jalx 40410 <__call>
+.* nop
+.* jalx 40420 <__call_fp>
+.* nop
+#...
+
+00040410 <__call>:
+.*0004 lui t9,.*
+.*0460 addiu t9,t9,.*
+.* jr t9
+.* nop
+
+00040420 <__call_fp>:
+.*0004 lui t9,.*
+.*0470 addiu t9,t9,.*
+.* jr t9
+.* nop
+
+Disassembly of section \.plt:
+
+00040440 <_PROCEDURE_LINKAGE_TABLE_>:
+#...
+
+00040460 <f2@plt>:
+#...
+
+00040470 <f3@plt>:
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4b.s b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4b.s
new file mode 100644
index 0000000..9cb5cb4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4b.s
@@ -0,0 +1,15 @@
+ .abicalls
+ .set noreorder
+
+ # Define a MIPS16 function f1@@V1.
+
+ .global _f1
+ .symver _f1,f1@@V1
+
+ .set mips16
+ .type _f1,@function
+ .ent _f1
+_f1:
+ jr $31
+ nop
+ .end _f1
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4c.s b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4c.s
new file mode 100644
index 0000000..338d378
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mips16-pic-4c.s
@@ -0,0 +1,38 @@
+ .abicalls
+ .option pic0
+ .set noreorder
+
+ # Create a call stub for f2. We pretend that f2 takes floating-point
+ # arguments but doesn't return a floating-point value.
+
+ .section .mips16.call.f2, "ax", @progbits
+ .ent __call
+__call:
+ la $25,f2
+ jr $25
+ nop
+ .end __call
+
+ # Create a call stub for f3. We pretend that f3 returns a
+ # floating-point value.
+
+ .section .mips16.call.fp.f3, "ax", @progbits
+ .ent __call_fp
+__call_fp:
+ la $25,f3
+ jr $25
+ nop
+ .end __call_fp
+
+ # Make sure that f2 and f3 are called from MIPS16 code.
+ .set mips16
+ .text
+ .global __start
+ .type __start,@function
+ .ent __start
+__start:
+ jal f2
+ nop
+ jal f3
+ nop
+ .end __start
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mode-change-error-1.d b/binutils-2.21/ld/testsuite/ld-mips-elf/mode-change-error-1.d
new file mode 100644
index 0000000..55e9027
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mode-change-error-1.d
@@ -0,0 +1,5 @@
+#name: Mode Change Error 1
+#source: mode-change-error-1a.s
+#source: mode-change-error-1b.s
+#ld: -e 0x8000000
+#error: .*: Direct jumps between ISA modes are not allowed; consider recompiling with interlinking enabled.
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mode-change-error-1a.s b/binutils-2.21/ld/testsuite/ld-mips-elf/mode-change-error-1a.s
new file mode 100644
index 0000000..44bdb1f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mode-change-error-1a.s
@@ -0,0 +1,17 @@
+ .option pic0
+ .text
+ .align 4
+ .globl main
+ .set nomips16
+ .ent main
+ .type main, @function
+main:
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ .set noreorder
+
+ j doit
+ nop
+
+ .end main
+ .size main, .-main
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/mode-change-error-1b.s b/binutils-2.21/ld/testsuite/ld-mips-elf/mode-change-error-1b.s
new file mode 100644
index 0000000..84e15d6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/mode-change-error-1b.s
@@ -0,0 +1,18 @@
+ .text
+ .align 4
+ .globl doit
+ .set mips16
+ .ent doit
+ .type doit, @function
+doit:
+ .frame $sp,0,$31
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ sll $2,$4,1
+ sll $4,$4,3
+ .set noreorder
+ .set nomacro
+ j $31
+ addu $2,$2,$4
+ .end doit
+ .size doit, .-doit
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-1-1.s b/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-1-1.s
new file mode 100644
index 0000000..8f70ee1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-1-1.s
@@ -0,0 +1,16384 @@
+.globl sym_1_1
+sym_1_1: la $2, sym_1_1
+.globl sym_1_2
+sym_1_2: la $2, sym_1_2
+.globl sym_1_3
+sym_1_3: la $2, sym_1_3
+.globl sym_1_4
+sym_1_4: la $2, sym_1_4
+.globl sym_1_5
+sym_1_5: la $2, sym_1_5
+.globl sym_1_6
+sym_1_6: la $2, sym_1_6
+.globl sym_1_7
+sym_1_7: la $2, sym_1_7
+.globl sym_1_8
+sym_1_8: la $2, sym_1_8
+.globl sym_1_9
+sym_1_9: la $2, sym_1_9
+.globl sym_1_10
+sym_1_10: la $2, sym_1_10
+.globl sym_1_11
+sym_1_11: la $2, sym_1_11
+.globl sym_1_12
+sym_1_12: la $2, sym_1_12
+.globl sym_1_13
+sym_1_13: la $2, sym_1_13
+.globl sym_1_14
+sym_1_14: la $2, sym_1_14
+.globl sym_1_15
+sym_1_15: la $2, sym_1_15
+.globl sym_1_16
+sym_1_16: la $2, sym_1_16
+.globl sym_1_17
+sym_1_17: la $2, sym_1_17
+.globl sym_1_18
+sym_1_18: la $2, sym_1_18
+.globl sym_1_19
+sym_1_19: la $2, sym_1_19
+.globl sym_1_20
+sym_1_20: la $2, sym_1_20
+.globl sym_1_21
+sym_1_21: la $2, sym_1_21
+.globl sym_1_22
+sym_1_22: la $2, sym_1_22
+.globl sym_1_23
+sym_1_23: la $2, sym_1_23
+.globl sym_1_24
+sym_1_24: la $2, sym_1_24
+.globl sym_1_25
+sym_1_25: la $2, sym_1_25
+.globl sym_1_26
+sym_1_26: la $2, sym_1_26
+.globl sym_1_27
+sym_1_27: la $2, sym_1_27
+.globl sym_1_28
+sym_1_28: la $2, sym_1_28
+.globl sym_1_29
+sym_1_29: la $2, sym_1_29
+.globl sym_1_30
+sym_1_30: la $2, sym_1_30
+.globl sym_1_31
+sym_1_31: la $2, sym_1_31
+.globl sym_1_32
+sym_1_32: la $2, sym_1_32
+.globl sym_1_33
+sym_1_33: la $2, sym_1_33
+.globl sym_1_34
+sym_1_34: la $2, sym_1_34
+.globl sym_1_35
+sym_1_35: la $2, sym_1_35
+.globl sym_1_36
+sym_1_36: la $2, sym_1_36
+.globl sym_1_37
+sym_1_37: la $2, sym_1_37
+.globl sym_1_38
+sym_1_38: la $2, sym_1_38
+.globl sym_1_39
+sym_1_39: la $2, sym_1_39
+.globl sym_1_40
+sym_1_40: la $2, sym_1_40
+.globl sym_1_41
+sym_1_41: la $2, sym_1_41
+.globl sym_1_42
+sym_1_42: la $2, sym_1_42
+.globl sym_1_43
+sym_1_43: la $2, sym_1_43
+.globl sym_1_44
+sym_1_44: la $2, sym_1_44
+.globl sym_1_45
+sym_1_45: la $2, sym_1_45
+.globl sym_1_46
+sym_1_46: la $2, sym_1_46
+.globl sym_1_47
+sym_1_47: la $2, sym_1_47
+.globl sym_1_48
+sym_1_48: la $2, sym_1_48
+.globl sym_1_49
+sym_1_49: la $2, sym_1_49
+.globl sym_1_50
+sym_1_50: la $2, sym_1_50
+.globl sym_1_51
+sym_1_51: la $2, sym_1_51
+.globl sym_1_52
+sym_1_52: la $2, sym_1_52
+.globl sym_1_53
+sym_1_53: la $2, sym_1_53
+.globl sym_1_54
+sym_1_54: la $2, sym_1_54
+.globl sym_1_55
+sym_1_55: la $2, sym_1_55
+.globl sym_1_56
+sym_1_56: la $2, sym_1_56
+.globl sym_1_57
+sym_1_57: la $2, sym_1_57
+.globl sym_1_58
+sym_1_58: la $2, sym_1_58
+.globl sym_1_59
+sym_1_59: la $2, sym_1_59
+.globl sym_1_60
+sym_1_60: la $2, sym_1_60
+.globl sym_1_61
+sym_1_61: la $2, sym_1_61
+.globl sym_1_62
+sym_1_62: la $2, sym_1_62
+.globl sym_1_63
+sym_1_63: la $2, sym_1_63
+.globl sym_1_64
+sym_1_64: la $2, sym_1_64
+.globl sym_1_65
+sym_1_65: la $2, sym_1_65
+.globl sym_1_66
+sym_1_66: la $2, sym_1_66
+.globl sym_1_67
+sym_1_67: la $2, sym_1_67
+.globl sym_1_68
+sym_1_68: la $2, sym_1_68
+.globl sym_1_69
+sym_1_69: la $2, sym_1_69
+.globl sym_1_70
+sym_1_70: la $2, sym_1_70
+.globl sym_1_71
+sym_1_71: la $2, sym_1_71
+.globl sym_1_72
+sym_1_72: la $2, sym_1_72
+.globl sym_1_73
+sym_1_73: la $2, sym_1_73
+.globl sym_1_74
+sym_1_74: la $2, sym_1_74
+.globl sym_1_75
+sym_1_75: la $2, sym_1_75
+.globl sym_1_76
+sym_1_76: la $2, sym_1_76
+.globl sym_1_77
+sym_1_77: la $2, sym_1_77
+.globl sym_1_78
+sym_1_78: la $2, sym_1_78
+.globl sym_1_79
+sym_1_79: la $2, sym_1_79
+.globl sym_1_80
+sym_1_80: la $2, sym_1_80
+.globl sym_1_81
+sym_1_81: la $2, sym_1_81
+.globl sym_1_82
+sym_1_82: la $2, sym_1_82
+.globl sym_1_83
+sym_1_83: la $2, sym_1_83
+.globl sym_1_84
+sym_1_84: la $2, sym_1_84
+.globl sym_1_85
+sym_1_85: la $2, sym_1_85
+.globl sym_1_86
+sym_1_86: la $2, sym_1_86
+.globl sym_1_87
+sym_1_87: la $2, sym_1_87
+.globl sym_1_88
+sym_1_88: la $2, sym_1_88
+.globl sym_1_89
+sym_1_89: la $2, sym_1_89
+.globl sym_1_90
+sym_1_90: la $2, sym_1_90
+.globl sym_1_91
+sym_1_91: la $2, sym_1_91
+.globl sym_1_92
+sym_1_92: la $2, sym_1_92
+.globl sym_1_93
+sym_1_93: la $2, sym_1_93
+.globl sym_1_94
+sym_1_94: la $2, sym_1_94
+.globl sym_1_95
+sym_1_95: la $2, sym_1_95
+.globl sym_1_96
+sym_1_96: la $2, sym_1_96
+.globl sym_1_97
+sym_1_97: la $2, sym_1_97
+.globl sym_1_98
+sym_1_98: la $2, sym_1_98
+.globl sym_1_99
+sym_1_99: la $2, sym_1_99
+.globl sym_1_100
+sym_1_100: la $2, sym_1_100
+.globl sym_1_101
+sym_1_101: la $2, sym_1_101
+.globl sym_1_102
+sym_1_102: la $2, sym_1_102
+.globl sym_1_103
+sym_1_103: la $2, sym_1_103
+.globl sym_1_104
+sym_1_104: la $2, sym_1_104
+.globl sym_1_105
+sym_1_105: la $2, sym_1_105
+.globl sym_1_106
+sym_1_106: la $2, sym_1_106
+.globl sym_1_107
+sym_1_107: la $2, sym_1_107
+.globl sym_1_108
+sym_1_108: la $2, sym_1_108
+.globl sym_1_109
+sym_1_109: la $2, sym_1_109
+.globl sym_1_110
+sym_1_110: la $2, sym_1_110
+.globl sym_1_111
+sym_1_111: la $2, sym_1_111
+.globl sym_1_112
+sym_1_112: la $2, sym_1_112
+.globl sym_1_113
+sym_1_113: la $2, sym_1_113
+.globl sym_1_114
+sym_1_114: la $2, sym_1_114
+.globl sym_1_115
+sym_1_115: la $2, sym_1_115
+.globl sym_1_116
+sym_1_116: la $2, sym_1_116
+.globl sym_1_117
+sym_1_117: la $2, sym_1_117
+.globl sym_1_118
+sym_1_118: la $2, sym_1_118
+.globl sym_1_119
+sym_1_119: la $2, sym_1_119
+.globl sym_1_120
+sym_1_120: la $2, sym_1_120
+.globl sym_1_121
+sym_1_121: la $2, sym_1_121
+.globl sym_1_122
+sym_1_122: la $2, sym_1_122
+.globl sym_1_123
+sym_1_123: la $2, sym_1_123
+.globl sym_1_124
+sym_1_124: la $2, sym_1_124
+.globl sym_1_125
+sym_1_125: la $2, sym_1_125
+.globl sym_1_126
+sym_1_126: la $2, sym_1_126
+.globl sym_1_127
+sym_1_127: la $2, sym_1_127
+.globl sym_1_128
+sym_1_128: la $2, sym_1_128
+.globl sym_1_129
+sym_1_129: la $2, sym_1_129
+.globl sym_1_130
+sym_1_130: la $2, sym_1_130
+.globl sym_1_131
+sym_1_131: la $2, sym_1_131
+.globl sym_1_132
+sym_1_132: la $2, sym_1_132
+.globl sym_1_133
+sym_1_133: la $2, sym_1_133
+.globl sym_1_134
+sym_1_134: la $2, sym_1_134
+.globl sym_1_135
+sym_1_135: la $2, sym_1_135
+.globl sym_1_136
+sym_1_136: la $2, sym_1_136
+.globl sym_1_137
+sym_1_137: la $2, sym_1_137
+.globl sym_1_138
+sym_1_138: la $2, sym_1_138
+.globl sym_1_139
+sym_1_139: la $2, sym_1_139
+.globl sym_1_140
+sym_1_140: la $2, sym_1_140
+.globl sym_1_141
+sym_1_141: la $2, sym_1_141
+.globl sym_1_142
+sym_1_142: la $2, sym_1_142
+.globl sym_1_143
+sym_1_143: la $2, sym_1_143
+.globl sym_1_144
+sym_1_144: la $2, sym_1_144
+.globl sym_1_145
+sym_1_145: la $2, sym_1_145
+.globl sym_1_146
+sym_1_146: la $2, sym_1_146
+.globl sym_1_147
+sym_1_147: la $2, sym_1_147
+.globl sym_1_148
+sym_1_148: la $2, sym_1_148
+.globl sym_1_149
+sym_1_149: la $2, sym_1_149
+.globl sym_1_150
+sym_1_150: la $2, sym_1_150
+.globl sym_1_151
+sym_1_151: la $2, sym_1_151
+.globl sym_1_152
+sym_1_152: la $2, sym_1_152
+.globl sym_1_153
+sym_1_153: la $2, sym_1_153
+.globl sym_1_154
+sym_1_154: la $2, sym_1_154
+.globl sym_1_155
+sym_1_155: la $2, sym_1_155
+.globl sym_1_156
+sym_1_156: la $2, sym_1_156
+.globl sym_1_157
+sym_1_157: la $2, sym_1_157
+.globl sym_1_158
+sym_1_158: la $2, sym_1_158
+.globl sym_1_159
+sym_1_159: la $2, sym_1_159
+.globl sym_1_160
+sym_1_160: la $2, sym_1_160
+.globl sym_1_161
+sym_1_161: la $2, sym_1_161
+.globl sym_1_162
+sym_1_162: la $2, sym_1_162
+.globl sym_1_163
+sym_1_163: la $2, sym_1_163
+.globl sym_1_164
+sym_1_164: la $2, sym_1_164
+.globl sym_1_165
+sym_1_165: la $2, sym_1_165
+.globl sym_1_166
+sym_1_166: la $2, sym_1_166
+.globl sym_1_167
+sym_1_167: la $2, sym_1_167
+.globl sym_1_168
+sym_1_168: la $2, sym_1_168
+.globl sym_1_169
+sym_1_169: la $2, sym_1_169
+.globl sym_1_170
+sym_1_170: la $2, sym_1_170
+.globl sym_1_171
+sym_1_171: la $2, sym_1_171
+.globl sym_1_172
+sym_1_172: la $2, sym_1_172
+.globl sym_1_173
+sym_1_173: la $2, sym_1_173
+.globl sym_1_174
+sym_1_174: la $2, sym_1_174
+.globl sym_1_175
+sym_1_175: la $2, sym_1_175
+.globl sym_1_176
+sym_1_176: la $2, sym_1_176
+.globl sym_1_177
+sym_1_177: la $2, sym_1_177
+.globl sym_1_178
+sym_1_178: la $2, sym_1_178
+.globl sym_1_179
+sym_1_179: la $2, sym_1_179
+.globl sym_1_180
+sym_1_180: la $2, sym_1_180
+.globl sym_1_181
+sym_1_181: la $2, sym_1_181
+.globl sym_1_182
+sym_1_182: la $2, sym_1_182
+.globl sym_1_183
+sym_1_183: la $2, sym_1_183
+.globl sym_1_184
+sym_1_184: la $2, sym_1_184
+.globl sym_1_185
+sym_1_185: la $2, sym_1_185
+.globl sym_1_186
+sym_1_186: la $2, sym_1_186
+.globl sym_1_187
+sym_1_187: la $2, sym_1_187
+.globl sym_1_188
+sym_1_188: la $2, sym_1_188
+.globl sym_1_189
+sym_1_189: la $2, sym_1_189
+.globl sym_1_190
+sym_1_190: la $2, sym_1_190
+.globl sym_1_191
+sym_1_191: la $2, sym_1_191
+.globl sym_1_192
+sym_1_192: la $2, sym_1_192
+.globl sym_1_193
+sym_1_193: la $2, sym_1_193
+.globl sym_1_194
+sym_1_194: la $2, sym_1_194
+.globl sym_1_195
+sym_1_195: la $2, sym_1_195
+.globl sym_1_196
+sym_1_196: la $2, sym_1_196
+.globl sym_1_197
+sym_1_197: la $2, sym_1_197
+.globl sym_1_198
+sym_1_198: la $2, sym_1_198
+.globl sym_1_199
+sym_1_199: la $2, sym_1_199
+.globl sym_1_200
+sym_1_200: la $2, sym_1_200
+.globl sym_1_201
+sym_1_201: la $2, sym_1_201
+.globl sym_1_202
+sym_1_202: la $2, sym_1_202
+.globl sym_1_203
+sym_1_203: la $2, sym_1_203
+.globl sym_1_204
+sym_1_204: la $2, sym_1_204
+.globl sym_1_205
+sym_1_205: la $2, sym_1_205
+.globl sym_1_206
+sym_1_206: la $2, sym_1_206
+.globl sym_1_207
+sym_1_207: la $2, sym_1_207
+.globl sym_1_208
+sym_1_208: la $2, sym_1_208
+.globl sym_1_209
+sym_1_209: la $2, sym_1_209
+.globl sym_1_210
+sym_1_210: la $2, sym_1_210
+.globl sym_1_211
+sym_1_211: la $2, sym_1_211
+.globl sym_1_212
+sym_1_212: la $2, sym_1_212
+.globl sym_1_213
+sym_1_213: la $2, sym_1_213
+.globl sym_1_214
+sym_1_214: la $2, sym_1_214
+.globl sym_1_215
+sym_1_215: la $2, sym_1_215
+.globl sym_1_216
+sym_1_216: la $2, sym_1_216
+.globl sym_1_217
+sym_1_217: la $2, sym_1_217
+.globl sym_1_218
+sym_1_218: la $2, sym_1_218
+.globl sym_1_219
+sym_1_219: la $2, sym_1_219
+.globl sym_1_220
+sym_1_220: la $2, sym_1_220
+.globl sym_1_221
+sym_1_221: la $2, sym_1_221
+.globl sym_1_222
+sym_1_222: la $2, sym_1_222
+.globl sym_1_223
+sym_1_223: la $2, sym_1_223
+.globl sym_1_224
+sym_1_224: la $2, sym_1_224
+.globl sym_1_225
+sym_1_225: la $2, sym_1_225
+.globl sym_1_226
+sym_1_226: la $2, sym_1_226
+.globl sym_1_227
+sym_1_227: la $2, sym_1_227
+.globl sym_1_228
+sym_1_228: la $2, sym_1_228
+.globl sym_1_229
+sym_1_229: la $2, sym_1_229
+.globl sym_1_230
+sym_1_230: la $2, sym_1_230
+.globl sym_1_231
+sym_1_231: la $2, sym_1_231
+.globl sym_1_232
+sym_1_232: la $2, sym_1_232
+.globl sym_1_233
+sym_1_233: la $2, sym_1_233
+.globl sym_1_234
+sym_1_234: la $2, sym_1_234
+.globl sym_1_235
+sym_1_235: la $2, sym_1_235
+.globl sym_1_236
+sym_1_236: la $2, sym_1_236
+.globl sym_1_237
+sym_1_237: la $2, sym_1_237
+.globl sym_1_238
+sym_1_238: la $2, sym_1_238
+.globl sym_1_239
+sym_1_239: la $2, sym_1_239
+.globl sym_1_240
+sym_1_240: la $2, sym_1_240
+.globl sym_1_241
+sym_1_241: la $2, sym_1_241
+.globl sym_1_242
+sym_1_242: la $2, sym_1_242
+.globl sym_1_243
+sym_1_243: la $2, sym_1_243
+.globl sym_1_244
+sym_1_244: la $2, sym_1_244
+.globl sym_1_245
+sym_1_245: la $2, sym_1_245
+.globl sym_1_246
+sym_1_246: la $2, sym_1_246
+.globl sym_1_247
+sym_1_247: la $2, sym_1_247
+.globl sym_1_248
+sym_1_248: la $2, sym_1_248
+.globl sym_1_249
+sym_1_249: la $2, sym_1_249
+.globl sym_1_250
+sym_1_250: la $2, sym_1_250
+.globl sym_1_251
+sym_1_251: la $2, sym_1_251
+.globl sym_1_252
+sym_1_252: la $2, sym_1_252
+.globl sym_1_253
+sym_1_253: la $2, sym_1_253
+.globl sym_1_254
+sym_1_254: la $2, sym_1_254
+.globl sym_1_255
+sym_1_255: la $2, sym_1_255
+.globl sym_1_256
+sym_1_256: la $2, sym_1_256
+.globl sym_1_257
+sym_1_257: la $2, sym_1_257
+.globl sym_1_258
+sym_1_258: la $2, sym_1_258
+.globl sym_1_259
+sym_1_259: la $2, sym_1_259
+.globl sym_1_260
+sym_1_260: la $2, sym_1_260
+.globl sym_1_261
+sym_1_261: la $2, sym_1_261
+.globl sym_1_262
+sym_1_262: la $2, sym_1_262
+.globl sym_1_263
+sym_1_263: la $2, sym_1_263
+.globl sym_1_264
+sym_1_264: la $2, sym_1_264
+.globl sym_1_265
+sym_1_265: la $2, sym_1_265
+.globl sym_1_266
+sym_1_266: la $2, sym_1_266
+.globl sym_1_267
+sym_1_267: la $2, sym_1_267
+.globl sym_1_268
+sym_1_268: la $2, sym_1_268
+.globl sym_1_269
+sym_1_269: la $2, sym_1_269
+.globl sym_1_270
+sym_1_270: la $2, sym_1_270
+.globl sym_1_271
+sym_1_271: la $2, sym_1_271
+.globl sym_1_272
+sym_1_272: la $2, sym_1_272
+.globl sym_1_273
+sym_1_273: la $2, sym_1_273
+.globl sym_1_274
+sym_1_274: la $2, sym_1_274
+.globl sym_1_275
+sym_1_275: la $2, sym_1_275
+.globl sym_1_276
+sym_1_276: la $2, sym_1_276
+.globl sym_1_277
+sym_1_277: la $2, sym_1_277
+.globl sym_1_278
+sym_1_278: la $2, sym_1_278
+.globl sym_1_279
+sym_1_279: la $2, sym_1_279
+.globl sym_1_280
+sym_1_280: la $2, sym_1_280
+.globl sym_1_281
+sym_1_281: la $2, sym_1_281
+.globl sym_1_282
+sym_1_282: la $2, sym_1_282
+.globl sym_1_283
+sym_1_283: la $2, sym_1_283
+.globl sym_1_284
+sym_1_284: la $2, sym_1_284
+.globl sym_1_285
+sym_1_285: la $2, sym_1_285
+.globl sym_1_286
+sym_1_286: la $2, sym_1_286
+.globl sym_1_287
+sym_1_287: la $2, sym_1_287
+.globl sym_1_288
+sym_1_288: la $2, sym_1_288
+.globl sym_1_289
+sym_1_289: la $2, sym_1_289
+.globl sym_1_290
+sym_1_290: la $2, sym_1_290
+.globl sym_1_291
+sym_1_291: la $2, sym_1_291
+.globl sym_1_292
+sym_1_292: la $2, sym_1_292
+.globl sym_1_293
+sym_1_293: la $2, sym_1_293
+.globl sym_1_294
+sym_1_294: la $2, sym_1_294
+.globl sym_1_295
+sym_1_295: la $2, sym_1_295
+.globl sym_1_296
+sym_1_296: la $2, sym_1_296
+.globl sym_1_297
+sym_1_297: la $2, sym_1_297
+.globl sym_1_298
+sym_1_298: la $2, sym_1_298
+.globl sym_1_299
+sym_1_299: la $2, sym_1_299
+.globl sym_1_300
+sym_1_300: la $2, sym_1_300
+.globl sym_1_301
+sym_1_301: la $2, sym_1_301
+.globl sym_1_302
+sym_1_302: la $2, sym_1_302
+.globl sym_1_303
+sym_1_303: la $2, sym_1_303
+.globl sym_1_304
+sym_1_304: la $2, sym_1_304
+.globl sym_1_305
+sym_1_305: la $2, sym_1_305
+.globl sym_1_306
+sym_1_306: la $2, sym_1_306
+.globl sym_1_307
+sym_1_307: la $2, sym_1_307
+.globl sym_1_308
+sym_1_308: la $2, sym_1_308
+.globl sym_1_309
+sym_1_309: la $2, sym_1_309
+.globl sym_1_310
+sym_1_310: la $2, sym_1_310
+.globl sym_1_311
+sym_1_311: la $2, sym_1_311
+.globl sym_1_312
+sym_1_312: la $2, sym_1_312
+.globl sym_1_313
+sym_1_313: la $2, sym_1_313
+.globl sym_1_314
+sym_1_314: la $2, sym_1_314
+.globl sym_1_315
+sym_1_315: la $2, sym_1_315
+.globl sym_1_316
+sym_1_316: la $2, sym_1_316
+.globl sym_1_317
+sym_1_317: la $2, sym_1_317
+.globl sym_1_318
+sym_1_318: la $2, sym_1_318
+.globl sym_1_319
+sym_1_319: la $2, sym_1_319
+.globl sym_1_320
+sym_1_320: la $2, sym_1_320
+.globl sym_1_321
+sym_1_321: la $2, sym_1_321
+.globl sym_1_322
+sym_1_322: la $2, sym_1_322
+.globl sym_1_323
+sym_1_323: la $2, sym_1_323
+.globl sym_1_324
+sym_1_324: la $2, sym_1_324
+.globl sym_1_325
+sym_1_325: la $2, sym_1_325
+.globl sym_1_326
+sym_1_326: la $2, sym_1_326
+.globl sym_1_327
+sym_1_327: la $2, sym_1_327
+.globl sym_1_328
+sym_1_328: la $2, sym_1_328
+.globl sym_1_329
+sym_1_329: la $2, sym_1_329
+.globl sym_1_330
+sym_1_330: la $2, sym_1_330
+.globl sym_1_331
+sym_1_331: la $2, sym_1_331
+.globl sym_1_332
+sym_1_332: la $2, sym_1_332
+.globl sym_1_333
+sym_1_333: la $2, sym_1_333
+.globl sym_1_334
+sym_1_334: la $2, sym_1_334
+.globl sym_1_335
+sym_1_335: la $2, sym_1_335
+.globl sym_1_336
+sym_1_336: la $2, sym_1_336
+.globl sym_1_337
+sym_1_337: la $2, sym_1_337
+.globl sym_1_338
+sym_1_338: la $2, sym_1_338
+.globl sym_1_339
+sym_1_339: la $2, sym_1_339
+.globl sym_1_340
+sym_1_340: la $2, sym_1_340
+.globl sym_1_341
+sym_1_341: la $2, sym_1_341
+.globl sym_1_342
+sym_1_342: la $2, sym_1_342
+.globl sym_1_343
+sym_1_343: la $2, sym_1_343
+.globl sym_1_344
+sym_1_344: la $2, sym_1_344
+.globl sym_1_345
+sym_1_345: la $2, sym_1_345
+.globl sym_1_346
+sym_1_346: la $2, sym_1_346
+.globl sym_1_347
+sym_1_347: la $2, sym_1_347
+.globl sym_1_348
+sym_1_348: la $2, sym_1_348
+.globl sym_1_349
+sym_1_349: la $2, sym_1_349
+.globl sym_1_350
+sym_1_350: la $2, sym_1_350
+.globl sym_1_351
+sym_1_351: la $2, sym_1_351
+.globl sym_1_352
+sym_1_352: la $2, sym_1_352
+.globl sym_1_353
+sym_1_353: la $2, sym_1_353
+.globl sym_1_354
+sym_1_354: la $2, sym_1_354
+.globl sym_1_355
+sym_1_355: la $2, sym_1_355
+.globl sym_1_356
+sym_1_356: la $2, sym_1_356
+.globl sym_1_357
+sym_1_357: la $2, sym_1_357
+.globl sym_1_358
+sym_1_358: la $2, sym_1_358
+.globl sym_1_359
+sym_1_359: la $2, sym_1_359
+.globl sym_1_360
+sym_1_360: la $2, sym_1_360
+.globl sym_1_361
+sym_1_361: la $2, sym_1_361
+.globl sym_1_362
+sym_1_362: la $2, sym_1_362
+.globl sym_1_363
+sym_1_363: la $2, sym_1_363
+.globl sym_1_364
+sym_1_364: la $2, sym_1_364
+.globl sym_1_365
+sym_1_365: la $2, sym_1_365
+.globl sym_1_366
+sym_1_366: la $2, sym_1_366
+.globl sym_1_367
+sym_1_367: la $2, sym_1_367
+.globl sym_1_368
+sym_1_368: la $2, sym_1_368
+.globl sym_1_369
+sym_1_369: la $2, sym_1_369
+.globl sym_1_370
+sym_1_370: la $2, sym_1_370
+.globl sym_1_371
+sym_1_371: la $2, sym_1_371
+.globl sym_1_372
+sym_1_372: la $2, sym_1_372
+.globl sym_1_373
+sym_1_373: la $2, sym_1_373
+.globl sym_1_374
+sym_1_374: la $2, sym_1_374
+.globl sym_1_375
+sym_1_375: la $2, sym_1_375
+.globl sym_1_376
+sym_1_376: la $2, sym_1_376
+.globl sym_1_377
+sym_1_377: la $2, sym_1_377
+.globl sym_1_378
+sym_1_378: la $2, sym_1_378
+.globl sym_1_379
+sym_1_379: la $2, sym_1_379
+.globl sym_1_380
+sym_1_380: la $2, sym_1_380
+.globl sym_1_381
+sym_1_381: la $2, sym_1_381
+.globl sym_1_382
+sym_1_382: la $2, sym_1_382
+.globl sym_1_383
+sym_1_383: la $2, sym_1_383
+.globl sym_1_384
+sym_1_384: la $2, sym_1_384
+.globl sym_1_385
+sym_1_385: la $2, sym_1_385
+.globl sym_1_386
+sym_1_386: la $2, sym_1_386
+.globl sym_1_387
+sym_1_387: la $2, sym_1_387
+.globl sym_1_388
+sym_1_388: la $2, sym_1_388
+.globl sym_1_389
+sym_1_389: la $2, sym_1_389
+.globl sym_1_390
+sym_1_390: la $2, sym_1_390
+.globl sym_1_391
+sym_1_391: la $2, sym_1_391
+.globl sym_1_392
+sym_1_392: la $2, sym_1_392
+.globl sym_1_393
+sym_1_393: la $2, sym_1_393
+.globl sym_1_394
+sym_1_394: la $2, sym_1_394
+.globl sym_1_395
+sym_1_395: la $2, sym_1_395
+.globl sym_1_396
+sym_1_396: la $2, sym_1_396
+.globl sym_1_397
+sym_1_397: la $2, sym_1_397
+.globl sym_1_398
+sym_1_398: la $2, sym_1_398
+.globl sym_1_399
+sym_1_399: la $2, sym_1_399
+.globl sym_1_400
+sym_1_400: la $2, sym_1_400
+.globl sym_1_401
+sym_1_401: la $2, sym_1_401
+.globl sym_1_402
+sym_1_402: la $2, sym_1_402
+.globl sym_1_403
+sym_1_403: la $2, sym_1_403
+.globl sym_1_404
+sym_1_404: la $2, sym_1_404
+.globl sym_1_405
+sym_1_405: la $2, sym_1_405
+.globl sym_1_406
+sym_1_406: la $2, sym_1_406
+.globl sym_1_407
+sym_1_407: la $2, sym_1_407
+.globl sym_1_408
+sym_1_408: la $2, sym_1_408
+.globl sym_1_409
+sym_1_409: la $2, sym_1_409
+.globl sym_1_410
+sym_1_410: la $2, sym_1_410
+.globl sym_1_411
+sym_1_411: la $2, sym_1_411
+.globl sym_1_412
+sym_1_412: la $2, sym_1_412
+.globl sym_1_413
+sym_1_413: la $2, sym_1_413
+.globl sym_1_414
+sym_1_414: la $2, sym_1_414
+.globl sym_1_415
+sym_1_415: la $2, sym_1_415
+.globl sym_1_416
+sym_1_416: la $2, sym_1_416
+.globl sym_1_417
+sym_1_417: la $2, sym_1_417
+.globl sym_1_418
+sym_1_418: la $2, sym_1_418
+.globl sym_1_419
+sym_1_419: la $2, sym_1_419
+.globl sym_1_420
+sym_1_420: la $2, sym_1_420
+.globl sym_1_421
+sym_1_421: la $2, sym_1_421
+.globl sym_1_422
+sym_1_422: la $2, sym_1_422
+.globl sym_1_423
+sym_1_423: la $2, sym_1_423
+.globl sym_1_424
+sym_1_424: la $2, sym_1_424
+.globl sym_1_425
+sym_1_425: la $2, sym_1_425
+.globl sym_1_426
+sym_1_426: la $2, sym_1_426
+.globl sym_1_427
+sym_1_427: la $2, sym_1_427
+.globl sym_1_428
+sym_1_428: la $2, sym_1_428
+.globl sym_1_429
+sym_1_429: la $2, sym_1_429
+.globl sym_1_430
+sym_1_430: la $2, sym_1_430
+.globl sym_1_431
+sym_1_431: la $2, sym_1_431
+.globl sym_1_432
+sym_1_432: la $2, sym_1_432
+.globl sym_1_433
+sym_1_433: la $2, sym_1_433
+.globl sym_1_434
+sym_1_434: la $2, sym_1_434
+.globl sym_1_435
+sym_1_435: la $2, sym_1_435
+.globl sym_1_436
+sym_1_436: la $2, sym_1_436
+.globl sym_1_437
+sym_1_437: la $2, sym_1_437
+.globl sym_1_438
+sym_1_438: la $2, sym_1_438
+.globl sym_1_439
+sym_1_439: la $2, sym_1_439
+.globl sym_1_440
+sym_1_440: la $2, sym_1_440
+.globl sym_1_441
+sym_1_441: la $2, sym_1_441
+.globl sym_1_442
+sym_1_442: la $2, sym_1_442
+.globl sym_1_443
+sym_1_443: la $2, sym_1_443
+.globl sym_1_444
+sym_1_444: la $2, sym_1_444
+.globl sym_1_445
+sym_1_445: la $2, sym_1_445
+.globl sym_1_446
+sym_1_446: la $2, sym_1_446
+.globl sym_1_447
+sym_1_447: la $2, sym_1_447
+.globl sym_1_448
+sym_1_448: la $2, sym_1_448
+.globl sym_1_449
+sym_1_449: la $2, sym_1_449
+.globl sym_1_450
+sym_1_450: la $2, sym_1_450
+.globl sym_1_451
+sym_1_451: la $2, sym_1_451
+.globl sym_1_452
+sym_1_452: la $2, sym_1_452
+.globl sym_1_453
+sym_1_453: la $2, sym_1_453
+.globl sym_1_454
+sym_1_454: la $2, sym_1_454
+.globl sym_1_455
+sym_1_455: la $2, sym_1_455
+.globl sym_1_456
+sym_1_456: la $2, sym_1_456
+.globl sym_1_457
+sym_1_457: la $2, sym_1_457
+.globl sym_1_458
+sym_1_458: la $2, sym_1_458
+.globl sym_1_459
+sym_1_459: la $2, sym_1_459
+.globl sym_1_460
+sym_1_460: la $2, sym_1_460
+.globl sym_1_461
+sym_1_461: la $2, sym_1_461
+.globl sym_1_462
+sym_1_462: la $2, sym_1_462
+.globl sym_1_463
+sym_1_463: la $2, sym_1_463
+.globl sym_1_464
+sym_1_464: la $2, sym_1_464
+.globl sym_1_465
+sym_1_465: la $2, sym_1_465
+.globl sym_1_466
+sym_1_466: la $2, sym_1_466
+.globl sym_1_467
+sym_1_467: la $2, sym_1_467
+.globl sym_1_468
+sym_1_468: la $2, sym_1_468
+.globl sym_1_469
+sym_1_469: la $2, sym_1_469
+.globl sym_1_470
+sym_1_470: la $2, sym_1_470
+.globl sym_1_471
+sym_1_471: la $2, sym_1_471
+.globl sym_1_472
+sym_1_472: la $2, sym_1_472
+.globl sym_1_473
+sym_1_473: la $2, sym_1_473
+.globl sym_1_474
+sym_1_474: la $2, sym_1_474
+.globl sym_1_475
+sym_1_475: la $2, sym_1_475
+.globl sym_1_476
+sym_1_476: la $2, sym_1_476
+.globl sym_1_477
+sym_1_477: la $2, sym_1_477
+.globl sym_1_478
+sym_1_478: la $2, sym_1_478
+.globl sym_1_479
+sym_1_479: la $2, sym_1_479
+.globl sym_1_480
+sym_1_480: la $2, sym_1_480
+.globl sym_1_481
+sym_1_481: la $2, sym_1_481
+.globl sym_1_482
+sym_1_482: la $2, sym_1_482
+.globl sym_1_483
+sym_1_483: la $2, sym_1_483
+.globl sym_1_484
+sym_1_484: la $2, sym_1_484
+.globl sym_1_485
+sym_1_485: la $2, sym_1_485
+.globl sym_1_486
+sym_1_486: la $2, sym_1_486
+.globl sym_1_487
+sym_1_487: la $2, sym_1_487
+.globl sym_1_488
+sym_1_488: la $2, sym_1_488
+.globl sym_1_489
+sym_1_489: la $2, sym_1_489
+.globl sym_1_490
+sym_1_490: la $2, sym_1_490
+.globl sym_1_491
+sym_1_491: la $2, sym_1_491
+.globl sym_1_492
+sym_1_492: la $2, sym_1_492
+.globl sym_1_493
+sym_1_493: la $2, sym_1_493
+.globl sym_1_494
+sym_1_494: la $2, sym_1_494
+.globl sym_1_495
+sym_1_495: la $2, sym_1_495
+.globl sym_1_496
+sym_1_496: la $2, sym_1_496
+.globl sym_1_497
+sym_1_497: la $2, sym_1_497
+.globl sym_1_498
+sym_1_498: la $2, sym_1_498
+.globl sym_1_499
+sym_1_499: la $2, sym_1_499
+.globl sym_1_500
+sym_1_500: la $2, sym_1_500
+.globl sym_1_501
+sym_1_501: la $2, sym_1_501
+.globl sym_1_502
+sym_1_502: la $2, sym_1_502
+.globl sym_1_503
+sym_1_503: la $2, sym_1_503
+.globl sym_1_504
+sym_1_504: la $2, sym_1_504
+.globl sym_1_505
+sym_1_505: la $2, sym_1_505
+.globl sym_1_506
+sym_1_506: la $2, sym_1_506
+.globl sym_1_507
+sym_1_507: la $2, sym_1_507
+.globl sym_1_508
+sym_1_508: la $2, sym_1_508
+.globl sym_1_509
+sym_1_509: la $2, sym_1_509
+.globl sym_1_510
+sym_1_510: la $2, sym_1_510
+.globl sym_1_511
+sym_1_511: la $2, sym_1_511
+.globl sym_1_512
+sym_1_512: la $2, sym_1_512
+.globl sym_1_513
+sym_1_513: la $2, sym_1_513
+.globl sym_1_514
+sym_1_514: la $2, sym_1_514
+.globl sym_1_515
+sym_1_515: la $2, sym_1_515
+.globl sym_1_516
+sym_1_516: la $2, sym_1_516
+.globl sym_1_517
+sym_1_517: la $2, sym_1_517
+.globl sym_1_518
+sym_1_518: la $2, sym_1_518
+.globl sym_1_519
+sym_1_519: la $2, sym_1_519
+.globl sym_1_520
+sym_1_520: la $2, sym_1_520
+.globl sym_1_521
+sym_1_521: la $2, sym_1_521
+.globl sym_1_522
+sym_1_522: la $2, sym_1_522
+.globl sym_1_523
+sym_1_523: la $2, sym_1_523
+.globl sym_1_524
+sym_1_524: la $2, sym_1_524
+.globl sym_1_525
+sym_1_525: la $2, sym_1_525
+.globl sym_1_526
+sym_1_526: la $2, sym_1_526
+.globl sym_1_527
+sym_1_527: la $2, sym_1_527
+.globl sym_1_528
+sym_1_528: la $2, sym_1_528
+.globl sym_1_529
+sym_1_529: la $2, sym_1_529
+.globl sym_1_530
+sym_1_530: la $2, sym_1_530
+.globl sym_1_531
+sym_1_531: la $2, sym_1_531
+.globl sym_1_532
+sym_1_532: la $2, sym_1_532
+.globl sym_1_533
+sym_1_533: la $2, sym_1_533
+.globl sym_1_534
+sym_1_534: la $2, sym_1_534
+.globl sym_1_535
+sym_1_535: la $2, sym_1_535
+.globl sym_1_536
+sym_1_536: la $2, sym_1_536
+.globl sym_1_537
+sym_1_537: la $2, sym_1_537
+.globl sym_1_538
+sym_1_538: la $2, sym_1_538
+.globl sym_1_539
+sym_1_539: la $2, sym_1_539
+.globl sym_1_540
+sym_1_540: la $2, sym_1_540
+.globl sym_1_541
+sym_1_541: la $2, sym_1_541
+.globl sym_1_542
+sym_1_542: la $2, sym_1_542
+.globl sym_1_543
+sym_1_543: la $2, sym_1_543
+.globl sym_1_544
+sym_1_544: la $2, sym_1_544
+.globl sym_1_545
+sym_1_545: la $2, sym_1_545
+.globl sym_1_546
+sym_1_546: la $2, sym_1_546
+.globl sym_1_547
+sym_1_547: la $2, sym_1_547
+.globl sym_1_548
+sym_1_548: la $2, sym_1_548
+.globl sym_1_549
+sym_1_549: la $2, sym_1_549
+.globl sym_1_550
+sym_1_550: la $2, sym_1_550
+.globl sym_1_551
+sym_1_551: la $2, sym_1_551
+.globl sym_1_552
+sym_1_552: la $2, sym_1_552
+.globl sym_1_553
+sym_1_553: la $2, sym_1_553
+.globl sym_1_554
+sym_1_554: la $2, sym_1_554
+.globl sym_1_555
+sym_1_555: la $2, sym_1_555
+.globl sym_1_556
+sym_1_556: la $2, sym_1_556
+.globl sym_1_557
+sym_1_557: la $2, sym_1_557
+.globl sym_1_558
+sym_1_558: la $2, sym_1_558
+.globl sym_1_559
+sym_1_559: la $2, sym_1_559
+.globl sym_1_560
+sym_1_560: la $2, sym_1_560
+.globl sym_1_561
+sym_1_561: la $2, sym_1_561
+.globl sym_1_562
+sym_1_562: la $2, sym_1_562
+.globl sym_1_563
+sym_1_563: la $2, sym_1_563
+.globl sym_1_564
+sym_1_564: la $2, sym_1_564
+.globl sym_1_565
+sym_1_565: la $2, sym_1_565
+.globl sym_1_566
+sym_1_566: la $2, sym_1_566
+.globl sym_1_567
+sym_1_567: la $2, sym_1_567
+.globl sym_1_568
+sym_1_568: la $2, sym_1_568
+.globl sym_1_569
+sym_1_569: la $2, sym_1_569
+.globl sym_1_570
+sym_1_570: la $2, sym_1_570
+.globl sym_1_571
+sym_1_571: la $2, sym_1_571
+.globl sym_1_572
+sym_1_572: la $2, sym_1_572
+.globl sym_1_573
+sym_1_573: la $2, sym_1_573
+.globl sym_1_574
+sym_1_574: la $2, sym_1_574
+.globl sym_1_575
+sym_1_575: la $2, sym_1_575
+.globl sym_1_576
+sym_1_576: la $2, sym_1_576
+.globl sym_1_577
+sym_1_577: la $2, sym_1_577
+.globl sym_1_578
+sym_1_578: la $2, sym_1_578
+.globl sym_1_579
+sym_1_579: la $2, sym_1_579
+.globl sym_1_580
+sym_1_580: la $2, sym_1_580
+.globl sym_1_581
+sym_1_581: la $2, sym_1_581
+.globl sym_1_582
+sym_1_582: la $2, sym_1_582
+.globl sym_1_583
+sym_1_583: la $2, sym_1_583
+.globl sym_1_584
+sym_1_584: la $2, sym_1_584
+.globl sym_1_585
+sym_1_585: la $2, sym_1_585
+.globl sym_1_586
+sym_1_586: la $2, sym_1_586
+.globl sym_1_587
+sym_1_587: la $2, sym_1_587
+.globl sym_1_588
+sym_1_588: la $2, sym_1_588
+.globl sym_1_589
+sym_1_589: la $2, sym_1_589
+.globl sym_1_590
+sym_1_590: la $2, sym_1_590
+.globl sym_1_591
+sym_1_591: la $2, sym_1_591
+.globl sym_1_592
+sym_1_592: la $2, sym_1_592
+.globl sym_1_593
+sym_1_593: la $2, sym_1_593
+.globl sym_1_594
+sym_1_594: la $2, sym_1_594
+.globl sym_1_595
+sym_1_595: la $2, sym_1_595
+.globl sym_1_596
+sym_1_596: la $2, sym_1_596
+.globl sym_1_597
+sym_1_597: la $2, sym_1_597
+.globl sym_1_598
+sym_1_598: la $2, sym_1_598
+.globl sym_1_599
+sym_1_599: la $2, sym_1_599
+.globl sym_1_600
+sym_1_600: la $2, sym_1_600
+.globl sym_1_601
+sym_1_601: la $2, sym_1_601
+.globl sym_1_602
+sym_1_602: la $2, sym_1_602
+.globl sym_1_603
+sym_1_603: la $2, sym_1_603
+.globl sym_1_604
+sym_1_604: la $2, sym_1_604
+.globl sym_1_605
+sym_1_605: la $2, sym_1_605
+.globl sym_1_606
+sym_1_606: la $2, sym_1_606
+.globl sym_1_607
+sym_1_607: la $2, sym_1_607
+.globl sym_1_608
+sym_1_608: la $2, sym_1_608
+.globl sym_1_609
+sym_1_609: la $2, sym_1_609
+.globl sym_1_610
+sym_1_610: la $2, sym_1_610
+.globl sym_1_611
+sym_1_611: la $2, sym_1_611
+.globl sym_1_612
+sym_1_612: la $2, sym_1_612
+.globl sym_1_613
+sym_1_613: la $2, sym_1_613
+.globl sym_1_614
+sym_1_614: la $2, sym_1_614
+.globl sym_1_615
+sym_1_615: la $2, sym_1_615
+.globl sym_1_616
+sym_1_616: la $2, sym_1_616
+.globl sym_1_617
+sym_1_617: la $2, sym_1_617
+.globl sym_1_618
+sym_1_618: la $2, sym_1_618
+.globl sym_1_619
+sym_1_619: la $2, sym_1_619
+.globl sym_1_620
+sym_1_620: la $2, sym_1_620
+.globl sym_1_621
+sym_1_621: la $2, sym_1_621
+.globl sym_1_622
+sym_1_622: la $2, sym_1_622
+.globl sym_1_623
+sym_1_623: la $2, sym_1_623
+.globl sym_1_624
+sym_1_624: la $2, sym_1_624
+.globl sym_1_625
+sym_1_625: la $2, sym_1_625
+.globl sym_1_626
+sym_1_626: la $2, sym_1_626
+.globl sym_1_627
+sym_1_627: la $2, sym_1_627
+.globl sym_1_628
+sym_1_628: la $2, sym_1_628
+.globl sym_1_629
+sym_1_629: la $2, sym_1_629
+.globl sym_1_630
+sym_1_630: la $2, sym_1_630
+.globl sym_1_631
+sym_1_631: la $2, sym_1_631
+.globl sym_1_632
+sym_1_632: la $2, sym_1_632
+.globl sym_1_633
+sym_1_633: la $2, sym_1_633
+.globl sym_1_634
+sym_1_634: la $2, sym_1_634
+.globl sym_1_635
+sym_1_635: la $2, sym_1_635
+.globl sym_1_636
+sym_1_636: la $2, sym_1_636
+.globl sym_1_637
+sym_1_637: la $2, sym_1_637
+.globl sym_1_638
+sym_1_638: la $2, sym_1_638
+.globl sym_1_639
+sym_1_639: la $2, sym_1_639
+.globl sym_1_640
+sym_1_640: la $2, sym_1_640
+.globl sym_1_641
+sym_1_641: la $2, sym_1_641
+.globl sym_1_642
+sym_1_642: la $2, sym_1_642
+.globl sym_1_643
+sym_1_643: la $2, sym_1_643
+.globl sym_1_644
+sym_1_644: la $2, sym_1_644
+.globl sym_1_645
+sym_1_645: la $2, sym_1_645
+.globl sym_1_646
+sym_1_646: la $2, sym_1_646
+.globl sym_1_647
+sym_1_647: la $2, sym_1_647
+.globl sym_1_648
+sym_1_648: la $2, sym_1_648
+.globl sym_1_649
+sym_1_649: la $2, sym_1_649
+.globl sym_1_650
+sym_1_650: la $2, sym_1_650
+.globl sym_1_651
+sym_1_651: la $2, sym_1_651
+.globl sym_1_652
+sym_1_652: la $2, sym_1_652
+.globl sym_1_653
+sym_1_653: la $2, sym_1_653
+.globl sym_1_654
+sym_1_654: la $2, sym_1_654
+.globl sym_1_655
+sym_1_655: la $2, sym_1_655
+.globl sym_1_656
+sym_1_656: la $2, sym_1_656
+.globl sym_1_657
+sym_1_657: la $2, sym_1_657
+.globl sym_1_658
+sym_1_658: la $2, sym_1_658
+.globl sym_1_659
+sym_1_659: la $2, sym_1_659
+.globl sym_1_660
+sym_1_660: la $2, sym_1_660
+.globl sym_1_661
+sym_1_661: la $2, sym_1_661
+.globl sym_1_662
+sym_1_662: la $2, sym_1_662
+.globl sym_1_663
+sym_1_663: la $2, sym_1_663
+.globl sym_1_664
+sym_1_664: la $2, sym_1_664
+.globl sym_1_665
+sym_1_665: la $2, sym_1_665
+.globl sym_1_666
+sym_1_666: la $2, sym_1_666
+.globl sym_1_667
+sym_1_667: la $2, sym_1_667
+.globl sym_1_668
+sym_1_668: la $2, sym_1_668
+.globl sym_1_669
+sym_1_669: la $2, sym_1_669
+.globl sym_1_670
+sym_1_670: la $2, sym_1_670
+.globl sym_1_671
+sym_1_671: la $2, sym_1_671
+.globl sym_1_672
+sym_1_672: la $2, sym_1_672
+.globl sym_1_673
+sym_1_673: la $2, sym_1_673
+.globl sym_1_674
+sym_1_674: la $2, sym_1_674
+.globl sym_1_675
+sym_1_675: la $2, sym_1_675
+.globl sym_1_676
+sym_1_676: la $2, sym_1_676
+.globl sym_1_677
+sym_1_677: la $2, sym_1_677
+.globl sym_1_678
+sym_1_678: la $2, sym_1_678
+.globl sym_1_679
+sym_1_679: la $2, sym_1_679
+.globl sym_1_680
+sym_1_680: la $2, sym_1_680
+.globl sym_1_681
+sym_1_681: la $2, sym_1_681
+.globl sym_1_682
+sym_1_682: la $2, sym_1_682
+.globl sym_1_683
+sym_1_683: la $2, sym_1_683
+.globl sym_1_684
+sym_1_684: la $2, sym_1_684
+.globl sym_1_685
+sym_1_685: la $2, sym_1_685
+.globl sym_1_686
+sym_1_686: la $2, sym_1_686
+.globl sym_1_687
+sym_1_687: la $2, sym_1_687
+.globl sym_1_688
+sym_1_688: la $2, sym_1_688
+.globl sym_1_689
+sym_1_689: la $2, sym_1_689
+.globl sym_1_690
+sym_1_690: la $2, sym_1_690
+.globl sym_1_691
+sym_1_691: la $2, sym_1_691
+.globl sym_1_692
+sym_1_692: la $2, sym_1_692
+.globl sym_1_693
+sym_1_693: la $2, sym_1_693
+.globl sym_1_694
+sym_1_694: la $2, sym_1_694
+.globl sym_1_695
+sym_1_695: la $2, sym_1_695
+.globl sym_1_696
+sym_1_696: la $2, sym_1_696
+.globl sym_1_697
+sym_1_697: la $2, sym_1_697
+.globl sym_1_698
+sym_1_698: la $2, sym_1_698
+.globl sym_1_699
+sym_1_699: la $2, sym_1_699
+.globl sym_1_700
+sym_1_700: la $2, sym_1_700
+.globl sym_1_701
+sym_1_701: la $2, sym_1_701
+.globl sym_1_702
+sym_1_702: la $2, sym_1_702
+.globl sym_1_703
+sym_1_703: la $2, sym_1_703
+.globl sym_1_704
+sym_1_704: la $2, sym_1_704
+.globl sym_1_705
+sym_1_705: la $2, sym_1_705
+.globl sym_1_706
+sym_1_706: la $2, sym_1_706
+.globl sym_1_707
+sym_1_707: la $2, sym_1_707
+.globl sym_1_708
+sym_1_708: la $2, sym_1_708
+.globl sym_1_709
+sym_1_709: la $2, sym_1_709
+.globl sym_1_710
+sym_1_710: la $2, sym_1_710
+.globl sym_1_711
+sym_1_711: la $2, sym_1_711
+.globl sym_1_712
+sym_1_712: la $2, sym_1_712
+.globl sym_1_713
+sym_1_713: la $2, sym_1_713
+.globl sym_1_714
+sym_1_714: la $2, sym_1_714
+.globl sym_1_715
+sym_1_715: la $2, sym_1_715
+.globl sym_1_716
+sym_1_716: la $2, sym_1_716
+.globl sym_1_717
+sym_1_717: la $2, sym_1_717
+.globl sym_1_718
+sym_1_718: la $2, sym_1_718
+.globl sym_1_719
+sym_1_719: la $2, sym_1_719
+.globl sym_1_720
+sym_1_720: la $2, sym_1_720
+.globl sym_1_721
+sym_1_721: la $2, sym_1_721
+.globl sym_1_722
+sym_1_722: la $2, sym_1_722
+.globl sym_1_723
+sym_1_723: la $2, sym_1_723
+.globl sym_1_724
+sym_1_724: la $2, sym_1_724
+.globl sym_1_725
+sym_1_725: la $2, sym_1_725
+.globl sym_1_726
+sym_1_726: la $2, sym_1_726
+.globl sym_1_727
+sym_1_727: la $2, sym_1_727
+.globl sym_1_728
+sym_1_728: la $2, sym_1_728
+.globl sym_1_729
+sym_1_729: la $2, sym_1_729
+.globl sym_1_730
+sym_1_730: la $2, sym_1_730
+.globl sym_1_731
+sym_1_731: la $2, sym_1_731
+.globl sym_1_732
+sym_1_732: la $2, sym_1_732
+.globl sym_1_733
+sym_1_733: la $2, sym_1_733
+.globl sym_1_734
+sym_1_734: la $2, sym_1_734
+.globl sym_1_735
+sym_1_735: la $2, sym_1_735
+.globl sym_1_736
+sym_1_736: la $2, sym_1_736
+.globl sym_1_737
+sym_1_737: la $2, sym_1_737
+.globl sym_1_738
+sym_1_738: la $2, sym_1_738
+.globl sym_1_739
+sym_1_739: la $2, sym_1_739
+.globl sym_1_740
+sym_1_740: la $2, sym_1_740
+.globl sym_1_741
+sym_1_741: la $2, sym_1_741
+.globl sym_1_742
+sym_1_742: la $2, sym_1_742
+.globl sym_1_743
+sym_1_743: la $2, sym_1_743
+.globl sym_1_744
+sym_1_744: la $2, sym_1_744
+.globl sym_1_745
+sym_1_745: la $2, sym_1_745
+.globl sym_1_746
+sym_1_746: la $2, sym_1_746
+.globl sym_1_747
+sym_1_747: la $2, sym_1_747
+.globl sym_1_748
+sym_1_748: la $2, sym_1_748
+.globl sym_1_749
+sym_1_749: la $2, sym_1_749
+.globl sym_1_750
+sym_1_750: la $2, sym_1_750
+.globl sym_1_751
+sym_1_751: la $2, sym_1_751
+.globl sym_1_752
+sym_1_752: la $2, sym_1_752
+.globl sym_1_753
+sym_1_753: la $2, sym_1_753
+.globl sym_1_754
+sym_1_754: la $2, sym_1_754
+.globl sym_1_755
+sym_1_755: la $2, sym_1_755
+.globl sym_1_756
+sym_1_756: la $2, sym_1_756
+.globl sym_1_757
+sym_1_757: la $2, sym_1_757
+.globl sym_1_758
+sym_1_758: la $2, sym_1_758
+.globl sym_1_759
+sym_1_759: la $2, sym_1_759
+.globl sym_1_760
+sym_1_760: la $2, sym_1_760
+.globl sym_1_761
+sym_1_761: la $2, sym_1_761
+.globl sym_1_762
+sym_1_762: la $2, sym_1_762
+.globl sym_1_763
+sym_1_763: la $2, sym_1_763
+.globl sym_1_764
+sym_1_764: la $2, sym_1_764
+.globl sym_1_765
+sym_1_765: la $2, sym_1_765
+.globl sym_1_766
+sym_1_766: la $2, sym_1_766
+.globl sym_1_767
+sym_1_767: la $2, sym_1_767
+.globl sym_1_768
+sym_1_768: la $2, sym_1_768
+.globl sym_1_769
+sym_1_769: la $2, sym_1_769
+.globl sym_1_770
+sym_1_770: la $2, sym_1_770
+.globl sym_1_771
+sym_1_771: la $2, sym_1_771
+.globl sym_1_772
+sym_1_772: la $2, sym_1_772
+.globl sym_1_773
+sym_1_773: la $2, sym_1_773
+.globl sym_1_774
+sym_1_774: la $2, sym_1_774
+.globl sym_1_775
+sym_1_775: la $2, sym_1_775
+.globl sym_1_776
+sym_1_776: la $2, sym_1_776
+.globl sym_1_777
+sym_1_777: la $2, sym_1_777
+.globl sym_1_778
+sym_1_778: la $2, sym_1_778
+.globl sym_1_779
+sym_1_779: la $2, sym_1_779
+.globl sym_1_780
+sym_1_780: la $2, sym_1_780
+.globl sym_1_781
+sym_1_781: la $2, sym_1_781
+.globl sym_1_782
+sym_1_782: la $2, sym_1_782
+.globl sym_1_783
+sym_1_783: la $2, sym_1_783
+.globl sym_1_784
+sym_1_784: la $2, sym_1_784
+.globl sym_1_785
+sym_1_785: la $2, sym_1_785
+.globl sym_1_786
+sym_1_786: la $2, sym_1_786
+.globl sym_1_787
+sym_1_787: la $2, sym_1_787
+.globl sym_1_788
+sym_1_788: la $2, sym_1_788
+.globl sym_1_789
+sym_1_789: la $2, sym_1_789
+.globl sym_1_790
+sym_1_790: la $2, sym_1_790
+.globl sym_1_791
+sym_1_791: la $2, sym_1_791
+.globl sym_1_792
+sym_1_792: la $2, sym_1_792
+.globl sym_1_793
+sym_1_793: la $2, sym_1_793
+.globl sym_1_794
+sym_1_794: la $2, sym_1_794
+.globl sym_1_795
+sym_1_795: la $2, sym_1_795
+.globl sym_1_796
+sym_1_796: la $2, sym_1_796
+.globl sym_1_797
+sym_1_797: la $2, sym_1_797
+.globl sym_1_798
+sym_1_798: la $2, sym_1_798
+.globl sym_1_799
+sym_1_799: la $2, sym_1_799
+.globl sym_1_800
+sym_1_800: la $2, sym_1_800
+.globl sym_1_801
+sym_1_801: la $2, sym_1_801
+.globl sym_1_802
+sym_1_802: la $2, sym_1_802
+.globl sym_1_803
+sym_1_803: la $2, sym_1_803
+.globl sym_1_804
+sym_1_804: la $2, sym_1_804
+.globl sym_1_805
+sym_1_805: la $2, sym_1_805
+.globl sym_1_806
+sym_1_806: la $2, sym_1_806
+.globl sym_1_807
+sym_1_807: la $2, sym_1_807
+.globl sym_1_808
+sym_1_808: la $2, sym_1_808
+.globl sym_1_809
+sym_1_809: la $2, sym_1_809
+.globl sym_1_810
+sym_1_810: la $2, sym_1_810
+.globl sym_1_811
+sym_1_811: la $2, sym_1_811
+.globl sym_1_812
+sym_1_812: la $2, sym_1_812
+.globl sym_1_813
+sym_1_813: la $2, sym_1_813
+.globl sym_1_814
+sym_1_814: la $2, sym_1_814
+.globl sym_1_815
+sym_1_815: la $2, sym_1_815
+.globl sym_1_816
+sym_1_816: la $2, sym_1_816
+.globl sym_1_817
+sym_1_817: la $2, sym_1_817
+.globl sym_1_818
+sym_1_818: la $2, sym_1_818
+.globl sym_1_819
+sym_1_819: la $2, sym_1_819
+.globl sym_1_820
+sym_1_820: la $2, sym_1_820
+.globl sym_1_821
+sym_1_821: la $2, sym_1_821
+.globl sym_1_822
+sym_1_822: la $2, sym_1_822
+.globl sym_1_823
+sym_1_823: la $2, sym_1_823
+.globl sym_1_824
+sym_1_824: la $2, sym_1_824
+.globl sym_1_825
+sym_1_825: la $2, sym_1_825
+.globl sym_1_826
+sym_1_826: la $2, sym_1_826
+.globl sym_1_827
+sym_1_827: la $2, sym_1_827
+.globl sym_1_828
+sym_1_828: la $2, sym_1_828
+.globl sym_1_829
+sym_1_829: la $2, sym_1_829
+.globl sym_1_830
+sym_1_830: la $2, sym_1_830
+.globl sym_1_831
+sym_1_831: la $2, sym_1_831
+.globl sym_1_832
+sym_1_832: la $2, sym_1_832
+.globl sym_1_833
+sym_1_833: la $2, sym_1_833
+.globl sym_1_834
+sym_1_834: la $2, sym_1_834
+.globl sym_1_835
+sym_1_835: la $2, sym_1_835
+.globl sym_1_836
+sym_1_836: la $2, sym_1_836
+.globl sym_1_837
+sym_1_837: la $2, sym_1_837
+.globl sym_1_838
+sym_1_838: la $2, sym_1_838
+.globl sym_1_839
+sym_1_839: la $2, sym_1_839
+.globl sym_1_840
+sym_1_840: la $2, sym_1_840
+.globl sym_1_841
+sym_1_841: la $2, sym_1_841
+.globl sym_1_842
+sym_1_842: la $2, sym_1_842
+.globl sym_1_843
+sym_1_843: la $2, sym_1_843
+.globl sym_1_844
+sym_1_844: la $2, sym_1_844
+.globl sym_1_845
+sym_1_845: la $2, sym_1_845
+.globl sym_1_846
+sym_1_846: la $2, sym_1_846
+.globl sym_1_847
+sym_1_847: la $2, sym_1_847
+.globl sym_1_848
+sym_1_848: la $2, sym_1_848
+.globl sym_1_849
+sym_1_849: la $2, sym_1_849
+.globl sym_1_850
+sym_1_850: la $2, sym_1_850
+.globl sym_1_851
+sym_1_851: la $2, sym_1_851
+.globl sym_1_852
+sym_1_852: la $2, sym_1_852
+.globl sym_1_853
+sym_1_853: la $2, sym_1_853
+.globl sym_1_854
+sym_1_854: la $2, sym_1_854
+.globl sym_1_855
+sym_1_855: la $2, sym_1_855
+.globl sym_1_856
+sym_1_856: la $2, sym_1_856
+.globl sym_1_857
+sym_1_857: la $2, sym_1_857
+.globl sym_1_858
+sym_1_858: la $2, sym_1_858
+.globl sym_1_859
+sym_1_859: la $2, sym_1_859
+.globl sym_1_860
+sym_1_860: la $2, sym_1_860
+.globl sym_1_861
+sym_1_861: la $2, sym_1_861
+.globl sym_1_862
+sym_1_862: la $2, sym_1_862
+.globl sym_1_863
+sym_1_863: la $2, sym_1_863
+.globl sym_1_864
+sym_1_864: la $2, sym_1_864
+.globl sym_1_865
+sym_1_865: la $2, sym_1_865
+.globl sym_1_866
+sym_1_866: la $2, sym_1_866
+.globl sym_1_867
+sym_1_867: la $2, sym_1_867
+.globl sym_1_868
+sym_1_868: la $2, sym_1_868
+.globl sym_1_869
+sym_1_869: la $2, sym_1_869
+.globl sym_1_870
+sym_1_870: la $2, sym_1_870
+.globl sym_1_871
+sym_1_871: la $2, sym_1_871
+.globl sym_1_872
+sym_1_872: la $2, sym_1_872
+.globl sym_1_873
+sym_1_873: la $2, sym_1_873
+.globl sym_1_874
+sym_1_874: la $2, sym_1_874
+.globl sym_1_875
+sym_1_875: la $2, sym_1_875
+.globl sym_1_876
+sym_1_876: la $2, sym_1_876
+.globl sym_1_877
+sym_1_877: la $2, sym_1_877
+.globl sym_1_878
+sym_1_878: la $2, sym_1_878
+.globl sym_1_879
+sym_1_879: la $2, sym_1_879
+.globl sym_1_880
+sym_1_880: la $2, sym_1_880
+.globl sym_1_881
+sym_1_881: la $2, sym_1_881
+.globl sym_1_882
+sym_1_882: la $2, sym_1_882
+.globl sym_1_883
+sym_1_883: la $2, sym_1_883
+.globl sym_1_884
+sym_1_884: la $2, sym_1_884
+.globl sym_1_885
+sym_1_885: la $2, sym_1_885
+.globl sym_1_886
+sym_1_886: la $2, sym_1_886
+.globl sym_1_887
+sym_1_887: la $2, sym_1_887
+.globl sym_1_888
+sym_1_888: la $2, sym_1_888
+.globl sym_1_889
+sym_1_889: la $2, sym_1_889
+.globl sym_1_890
+sym_1_890: la $2, sym_1_890
+.globl sym_1_891
+sym_1_891: la $2, sym_1_891
+.globl sym_1_892
+sym_1_892: la $2, sym_1_892
+.globl sym_1_893
+sym_1_893: la $2, sym_1_893
+.globl sym_1_894
+sym_1_894: la $2, sym_1_894
+.globl sym_1_895
+sym_1_895: la $2, sym_1_895
+.globl sym_1_896
+sym_1_896: la $2, sym_1_896
+.globl sym_1_897
+sym_1_897: la $2, sym_1_897
+.globl sym_1_898
+sym_1_898: la $2, sym_1_898
+.globl sym_1_899
+sym_1_899: la $2, sym_1_899
+.globl sym_1_900
+sym_1_900: la $2, sym_1_900
+.globl sym_1_901
+sym_1_901: la $2, sym_1_901
+.globl sym_1_902
+sym_1_902: la $2, sym_1_902
+.globl sym_1_903
+sym_1_903: la $2, sym_1_903
+.globl sym_1_904
+sym_1_904: la $2, sym_1_904
+.globl sym_1_905
+sym_1_905: la $2, sym_1_905
+.globl sym_1_906
+sym_1_906: la $2, sym_1_906
+.globl sym_1_907
+sym_1_907: la $2, sym_1_907
+.globl sym_1_908
+sym_1_908: la $2, sym_1_908
+.globl sym_1_909
+sym_1_909: la $2, sym_1_909
+.globl sym_1_910
+sym_1_910: la $2, sym_1_910
+.globl sym_1_911
+sym_1_911: la $2, sym_1_911
+.globl sym_1_912
+sym_1_912: la $2, sym_1_912
+.globl sym_1_913
+sym_1_913: la $2, sym_1_913
+.globl sym_1_914
+sym_1_914: la $2, sym_1_914
+.globl sym_1_915
+sym_1_915: la $2, sym_1_915
+.globl sym_1_916
+sym_1_916: la $2, sym_1_916
+.globl sym_1_917
+sym_1_917: la $2, sym_1_917
+.globl sym_1_918
+sym_1_918: la $2, sym_1_918
+.globl sym_1_919
+sym_1_919: la $2, sym_1_919
+.globl sym_1_920
+sym_1_920: la $2, sym_1_920
+.globl sym_1_921
+sym_1_921: la $2, sym_1_921
+.globl sym_1_922
+sym_1_922: la $2, sym_1_922
+.globl sym_1_923
+sym_1_923: la $2, sym_1_923
+.globl sym_1_924
+sym_1_924: la $2, sym_1_924
+.globl sym_1_925
+sym_1_925: la $2, sym_1_925
+.globl sym_1_926
+sym_1_926: la $2, sym_1_926
+.globl sym_1_927
+sym_1_927: la $2, sym_1_927
+.globl sym_1_928
+sym_1_928: la $2, sym_1_928
+.globl sym_1_929
+sym_1_929: la $2, sym_1_929
+.globl sym_1_930
+sym_1_930: la $2, sym_1_930
+.globl sym_1_931
+sym_1_931: la $2, sym_1_931
+.globl sym_1_932
+sym_1_932: la $2, sym_1_932
+.globl sym_1_933
+sym_1_933: la $2, sym_1_933
+.globl sym_1_934
+sym_1_934: la $2, sym_1_934
+.globl sym_1_935
+sym_1_935: la $2, sym_1_935
+.globl sym_1_936
+sym_1_936: la $2, sym_1_936
+.globl sym_1_937
+sym_1_937: la $2, sym_1_937
+.globl sym_1_938
+sym_1_938: la $2, sym_1_938
+.globl sym_1_939
+sym_1_939: la $2, sym_1_939
+.globl sym_1_940
+sym_1_940: la $2, sym_1_940
+.globl sym_1_941
+sym_1_941: la $2, sym_1_941
+.globl sym_1_942
+sym_1_942: la $2, sym_1_942
+.globl sym_1_943
+sym_1_943: la $2, sym_1_943
+.globl sym_1_944
+sym_1_944: la $2, sym_1_944
+.globl sym_1_945
+sym_1_945: la $2, sym_1_945
+.globl sym_1_946
+sym_1_946: la $2, sym_1_946
+.globl sym_1_947
+sym_1_947: la $2, sym_1_947
+.globl sym_1_948
+sym_1_948: la $2, sym_1_948
+.globl sym_1_949
+sym_1_949: la $2, sym_1_949
+.globl sym_1_950
+sym_1_950: la $2, sym_1_950
+.globl sym_1_951
+sym_1_951: la $2, sym_1_951
+.globl sym_1_952
+sym_1_952: la $2, sym_1_952
+.globl sym_1_953
+sym_1_953: la $2, sym_1_953
+.globl sym_1_954
+sym_1_954: la $2, sym_1_954
+.globl sym_1_955
+sym_1_955: la $2, sym_1_955
+.globl sym_1_956
+sym_1_956: la $2, sym_1_956
+.globl sym_1_957
+sym_1_957: la $2, sym_1_957
+.globl sym_1_958
+sym_1_958: la $2, sym_1_958
+.globl sym_1_959
+sym_1_959: la $2, sym_1_959
+.globl sym_1_960
+sym_1_960: la $2, sym_1_960
+.globl sym_1_961
+sym_1_961: la $2, sym_1_961
+.globl sym_1_962
+sym_1_962: la $2, sym_1_962
+.globl sym_1_963
+sym_1_963: la $2, sym_1_963
+.globl sym_1_964
+sym_1_964: la $2, sym_1_964
+.globl sym_1_965
+sym_1_965: la $2, sym_1_965
+.globl sym_1_966
+sym_1_966: la $2, sym_1_966
+.globl sym_1_967
+sym_1_967: la $2, sym_1_967
+.globl sym_1_968
+sym_1_968: la $2, sym_1_968
+.globl sym_1_969
+sym_1_969: la $2, sym_1_969
+.globl sym_1_970
+sym_1_970: la $2, sym_1_970
+.globl sym_1_971
+sym_1_971: la $2, sym_1_971
+.globl sym_1_972
+sym_1_972: la $2, sym_1_972
+.globl sym_1_973
+sym_1_973: la $2, sym_1_973
+.globl sym_1_974
+sym_1_974: la $2, sym_1_974
+.globl sym_1_975
+sym_1_975: la $2, sym_1_975
+.globl sym_1_976
+sym_1_976: la $2, sym_1_976
+.globl sym_1_977
+sym_1_977: la $2, sym_1_977
+.globl sym_1_978
+sym_1_978: la $2, sym_1_978
+.globl sym_1_979
+sym_1_979: la $2, sym_1_979
+.globl sym_1_980
+sym_1_980: la $2, sym_1_980
+.globl sym_1_981
+sym_1_981: la $2, sym_1_981
+.globl sym_1_982
+sym_1_982: la $2, sym_1_982
+.globl sym_1_983
+sym_1_983: la $2, sym_1_983
+.globl sym_1_984
+sym_1_984: la $2, sym_1_984
+.globl sym_1_985
+sym_1_985: la $2, sym_1_985
+.globl sym_1_986
+sym_1_986: la $2, sym_1_986
+.globl sym_1_987
+sym_1_987: la $2, sym_1_987
+.globl sym_1_988
+sym_1_988: la $2, sym_1_988
+.globl sym_1_989
+sym_1_989: la $2, sym_1_989
+.globl sym_1_990
+sym_1_990: la $2, sym_1_990
+.globl sym_1_991
+sym_1_991: la $2, sym_1_991
+.globl sym_1_992
+sym_1_992: la $2, sym_1_992
+.globl sym_1_993
+sym_1_993: la $2, sym_1_993
+.globl sym_1_994
+sym_1_994: la $2, sym_1_994
+.globl sym_1_995
+sym_1_995: la $2, sym_1_995
+.globl sym_1_996
+sym_1_996: la $2, sym_1_996
+.globl sym_1_997
+sym_1_997: la $2, sym_1_997
+.globl sym_1_998
+sym_1_998: la $2, sym_1_998
+.globl sym_1_999
+sym_1_999: la $2, sym_1_999
+.globl sym_1_1000
+sym_1_1000: la $2, sym_1_1000
+.globl sym_1_1001
+sym_1_1001: la $2, sym_1_1001
+.globl sym_1_1002
+sym_1_1002: la $2, sym_1_1002
+.globl sym_1_1003
+sym_1_1003: la $2, sym_1_1003
+.globl sym_1_1004
+sym_1_1004: la $2, sym_1_1004
+.globl sym_1_1005
+sym_1_1005: la $2, sym_1_1005
+.globl sym_1_1006
+sym_1_1006: la $2, sym_1_1006
+.globl sym_1_1007
+sym_1_1007: la $2, sym_1_1007
+.globl sym_1_1008
+sym_1_1008: la $2, sym_1_1008
+.globl sym_1_1009
+sym_1_1009: la $2, sym_1_1009
+.globl sym_1_1010
+sym_1_1010: la $2, sym_1_1010
+.globl sym_1_1011
+sym_1_1011: la $2, sym_1_1011
+.globl sym_1_1012
+sym_1_1012: la $2, sym_1_1012
+.globl sym_1_1013
+sym_1_1013: la $2, sym_1_1013
+.globl sym_1_1014
+sym_1_1014: la $2, sym_1_1014
+.globl sym_1_1015
+sym_1_1015: la $2, sym_1_1015
+.globl sym_1_1016
+sym_1_1016: la $2, sym_1_1016
+.globl sym_1_1017
+sym_1_1017: la $2, sym_1_1017
+.globl sym_1_1018
+sym_1_1018: la $2, sym_1_1018
+.globl sym_1_1019
+sym_1_1019: la $2, sym_1_1019
+.globl sym_1_1020
+sym_1_1020: la $2, sym_1_1020
+.globl sym_1_1021
+sym_1_1021: la $2, sym_1_1021
+.globl sym_1_1022
+sym_1_1022: la $2, sym_1_1022
+.globl sym_1_1023
+sym_1_1023: la $2, sym_1_1023
+.globl sym_1_1024
+sym_1_1024: la $2, sym_1_1024
+.globl sym_1_1025
+sym_1_1025: la $2, sym_1_1025
+.globl sym_1_1026
+sym_1_1026: la $2, sym_1_1026
+.globl sym_1_1027
+sym_1_1027: la $2, sym_1_1027
+.globl sym_1_1028
+sym_1_1028: la $2, sym_1_1028
+.globl sym_1_1029
+sym_1_1029: la $2, sym_1_1029
+.globl sym_1_1030
+sym_1_1030: la $2, sym_1_1030
+.globl sym_1_1031
+sym_1_1031: la $2, sym_1_1031
+.globl sym_1_1032
+sym_1_1032: la $2, sym_1_1032
+.globl sym_1_1033
+sym_1_1033: la $2, sym_1_1033
+.globl sym_1_1034
+sym_1_1034: la $2, sym_1_1034
+.globl sym_1_1035
+sym_1_1035: la $2, sym_1_1035
+.globl sym_1_1036
+sym_1_1036: la $2, sym_1_1036
+.globl sym_1_1037
+sym_1_1037: la $2, sym_1_1037
+.globl sym_1_1038
+sym_1_1038: la $2, sym_1_1038
+.globl sym_1_1039
+sym_1_1039: la $2, sym_1_1039
+.globl sym_1_1040
+sym_1_1040: la $2, sym_1_1040
+.globl sym_1_1041
+sym_1_1041: la $2, sym_1_1041
+.globl sym_1_1042
+sym_1_1042: la $2, sym_1_1042
+.globl sym_1_1043
+sym_1_1043: la $2, sym_1_1043
+.globl sym_1_1044
+sym_1_1044: la $2, sym_1_1044
+.globl sym_1_1045
+sym_1_1045: la $2, sym_1_1045
+.globl sym_1_1046
+sym_1_1046: la $2, sym_1_1046
+.globl sym_1_1047
+sym_1_1047: la $2, sym_1_1047
+.globl sym_1_1048
+sym_1_1048: la $2, sym_1_1048
+.globl sym_1_1049
+sym_1_1049: la $2, sym_1_1049
+.globl sym_1_1050
+sym_1_1050: la $2, sym_1_1050
+.globl sym_1_1051
+sym_1_1051: la $2, sym_1_1051
+.globl sym_1_1052
+sym_1_1052: la $2, sym_1_1052
+.globl sym_1_1053
+sym_1_1053: la $2, sym_1_1053
+.globl sym_1_1054
+sym_1_1054: la $2, sym_1_1054
+.globl sym_1_1055
+sym_1_1055: la $2, sym_1_1055
+.globl sym_1_1056
+sym_1_1056: la $2, sym_1_1056
+.globl sym_1_1057
+sym_1_1057: la $2, sym_1_1057
+.globl sym_1_1058
+sym_1_1058: la $2, sym_1_1058
+.globl sym_1_1059
+sym_1_1059: la $2, sym_1_1059
+.globl sym_1_1060
+sym_1_1060: la $2, sym_1_1060
+.globl sym_1_1061
+sym_1_1061: la $2, sym_1_1061
+.globl sym_1_1062
+sym_1_1062: la $2, sym_1_1062
+.globl sym_1_1063
+sym_1_1063: la $2, sym_1_1063
+.globl sym_1_1064
+sym_1_1064: la $2, sym_1_1064
+.globl sym_1_1065
+sym_1_1065: la $2, sym_1_1065
+.globl sym_1_1066
+sym_1_1066: la $2, sym_1_1066
+.globl sym_1_1067
+sym_1_1067: la $2, sym_1_1067
+.globl sym_1_1068
+sym_1_1068: la $2, sym_1_1068
+.globl sym_1_1069
+sym_1_1069: la $2, sym_1_1069
+.globl sym_1_1070
+sym_1_1070: la $2, sym_1_1070
+.globl sym_1_1071
+sym_1_1071: la $2, sym_1_1071
+.globl sym_1_1072
+sym_1_1072: la $2, sym_1_1072
+.globl sym_1_1073
+sym_1_1073: la $2, sym_1_1073
+.globl sym_1_1074
+sym_1_1074: la $2, sym_1_1074
+.globl sym_1_1075
+sym_1_1075: la $2, sym_1_1075
+.globl sym_1_1076
+sym_1_1076: la $2, sym_1_1076
+.globl sym_1_1077
+sym_1_1077: la $2, sym_1_1077
+.globl sym_1_1078
+sym_1_1078: la $2, sym_1_1078
+.globl sym_1_1079
+sym_1_1079: la $2, sym_1_1079
+.globl sym_1_1080
+sym_1_1080: la $2, sym_1_1080
+.globl sym_1_1081
+sym_1_1081: la $2, sym_1_1081
+.globl sym_1_1082
+sym_1_1082: la $2, sym_1_1082
+.globl sym_1_1083
+sym_1_1083: la $2, sym_1_1083
+.globl sym_1_1084
+sym_1_1084: la $2, sym_1_1084
+.globl sym_1_1085
+sym_1_1085: la $2, sym_1_1085
+.globl sym_1_1086
+sym_1_1086: la $2, sym_1_1086
+.globl sym_1_1087
+sym_1_1087: la $2, sym_1_1087
+.globl sym_1_1088
+sym_1_1088: la $2, sym_1_1088
+.globl sym_1_1089
+sym_1_1089: la $2, sym_1_1089
+.globl sym_1_1090
+sym_1_1090: la $2, sym_1_1090
+.globl sym_1_1091
+sym_1_1091: la $2, sym_1_1091
+.globl sym_1_1092
+sym_1_1092: la $2, sym_1_1092
+.globl sym_1_1093
+sym_1_1093: la $2, sym_1_1093
+.globl sym_1_1094
+sym_1_1094: la $2, sym_1_1094
+.globl sym_1_1095
+sym_1_1095: la $2, sym_1_1095
+.globl sym_1_1096
+sym_1_1096: la $2, sym_1_1096
+.globl sym_1_1097
+sym_1_1097: la $2, sym_1_1097
+.globl sym_1_1098
+sym_1_1098: la $2, sym_1_1098
+.globl sym_1_1099
+sym_1_1099: la $2, sym_1_1099
+.globl sym_1_1100
+sym_1_1100: la $2, sym_1_1100
+.globl sym_1_1101
+sym_1_1101: la $2, sym_1_1101
+.globl sym_1_1102
+sym_1_1102: la $2, sym_1_1102
+.globl sym_1_1103
+sym_1_1103: la $2, sym_1_1103
+.globl sym_1_1104
+sym_1_1104: la $2, sym_1_1104
+.globl sym_1_1105
+sym_1_1105: la $2, sym_1_1105
+.globl sym_1_1106
+sym_1_1106: la $2, sym_1_1106
+.globl sym_1_1107
+sym_1_1107: la $2, sym_1_1107
+.globl sym_1_1108
+sym_1_1108: la $2, sym_1_1108
+.globl sym_1_1109
+sym_1_1109: la $2, sym_1_1109
+.globl sym_1_1110
+sym_1_1110: la $2, sym_1_1110
+.globl sym_1_1111
+sym_1_1111: la $2, sym_1_1111
+.globl sym_1_1112
+sym_1_1112: la $2, sym_1_1112
+.globl sym_1_1113
+sym_1_1113: la $2, sym_1_1113
+.globl sym_1_1114
+sym_1_1114: la $2, sym_1_1114
+.globl sym_1_1115
+sym_1_1115: la $2, sym_1_1115
+.globl sym_1_1116
+sym_1_1116: la $2, sym_1_1116
+.globl sym_1_1117
+sym_1_1117: la $2, sym_1_1117
+.globl sym_1_1118
+sym_1_1118: la $2, sym_1_1118
+.globl sym_1_1119
+sym_1_1119: la $2, sym_1_1119
+.globl sym_1_1120
+sym_1_1120: la $2, sym_1_1120
+.globl sym_1_1121
+sym_1_1121: la $2, sym_1_1121
+.globl sym_1_1122
+sym_1_1122: la $2, sym_1_1122
+.globl sym_1_1123
+sym_1_1123: la $2, sym_1_1123
+.globl sym_1_1124
+sym_1_1124: la $2, sym_1_1124
+.globl sym_1_1125
+sym_1_1125: la $2, sym_1_1125
+.globl sym_1_1126
+sym_1_1126: la $2, sym_1_1126
+.globl sym_1_1127
+sym_1_1127: la $2, sym_1_1127
+.globl sym_1_1128
+sym_1_1128: la $2, sym_1_1128
+.globl sym_1_1129
+sym_1_1129: la $2, sym_1_1129
+.globl sym_1_1130
+sym_1_1130: la $2, sym_1_1130
+.globl sym_1_1131
+sym_1_1131: la $2, sym_1_1131
+.globl sym_1_1132
+sym_1_1132: la $2, sym_1_1132
+.globl sym_1_1133
+sym_1_1133: la $2, sym_1_1133
+.globl sym_1_1134
+sym_1_1134: la $2, sym_1_1134
+.globl sym_1_1135
+sym_1_1135: la $2, sym_1_1135
+.globl sym_1_1136
+sym_1_1136: la $2, sym_1_1136
+.globl sym_1_1137
+sym_1_1137: la $2, sym_1_1137
+.globl sym_1_1138
+sym_1_1138: la $2, sym_1_1138
+.globl sym_1_1139
+sym_1_1139: la $2, sym_1_1139
+.globl sym_1_1140
+sym_1_1140: la $2, sym_1_1140
+.globl sym_1_1141
+sym_1_1141: la $2, sym_1_1141
+.globl sym_1_1142
+sym_1_1142: la $2, sym_1_1142
+.globl sym_1_1143
+sym_1_1143: la $2, sym_1_1143
+.globl sym_1_1144
+sym_1_1144: la $2, sym_1_1144
+.globl sym_1_1145
+sym_1_1145: la $2, sym_1_1145
+.globl sym_1_1146
+sym_1_1146: la $2, sym_1_1146
+.globl sym_1_1147
+sym_1_1147: la $2, sym_1_1147
+.globl sym_1_1148
+sym_1_1148: la $2, sym_1_1148
+.globl sym_1_1149
+sym_1_1149: la $2, sym_1_1149
+.globl sym_1_1150
+sym_1_1150: la $2, sym_1_1150
+.globl sym_1_1151
+sym_1_1151: la $2, sym_1_1151
+.globl sym_1_1152
+sym_1_1152: la $2, sym_1_1152
+.globl sym_1_1153
+sym_1_1153: la $2, sym_1_1153
+.globl sym_1_1154
+sym_1_1154: la $2, sym_1_1154
+.globl sym_1_1155
+sym_1_1155: la $2, sym_1_1155
+.globl sym_1_1156
+sym_1_1156: la $2, sym_1_1156
+.globl sym_1_1157
+sym_1_1157: la $2, sym_1_1157
+.globl sym_1_1158
+sym_1_1158: la $2, sym_1_1158
+.globl sym_1_1159
+sym_1_1159: la $2, sym_1_1159
+.globl sym_1_1160
+sym_1_1160: la $2, sym_1_1160
+.globl sym_1_1161
+sym_1_1161: la $2, sym_1_1161
+.globl sym_1_1162
+sym_1_1162: la $2, sym_1_1162
+.globl sym_1_1163
+sym_1_1163: la $2, sym_1_1163
+.globl sym_1_1164
+sym_1_1164: la $2, sym_1_1164
+.globl sym_1_1165
+sym_1_1165: la $2, sym_1_1165
+.globl sym_1_1166
+sym_1_1166: la $2, sym_1_1166
+.globl sym_1_1167
+sym_1_1167: la $2, sym_1_1167
+.globl sym_1_1168
+sym_1_1168: la $2, sym_1_1168
+.globl sym_1_1169
+sym_1_1169: la $2, sym_1_1169
+.globl sym_1_1170
+sym_1_1170: la $2, sym_1_1170
+.globl sym_1_1171
+sym_1_1171: la $2, sym_1_1171
+.globl sym_1_1172
+sym_1_1172: la $2, sym_1_1172
+.globl sym_1_1173
+sym_1_1173: la $2, sym_1_1173
+.globl sym_1_1174
+sym_1_1174: la $2, sym_1_1174
+.globl sym_1_1175
+sym_1_1175: la $2, sym_1_1175
+.globl sym_1_1176
+sym_1_1176: la $2, sym_1_1176
+.globl sym_1_1177
+sym_1_1177: la $2, sym_1_1177
+.globl sym_1_1178
+sym_1_1178: la $2, sym_1_1178
+.globl sym_1_1179
+sym_1_1179: la $2, sym_1_1179
+.globl sym_1_1180
+sym_1_1180: la $2, sym_1_1180
+.globl sym_1_1181
+sym_1_1181: la $2, sym_1_1181
+.globl sym_1_1182
+sym_1_1182: la $2, sym_1_1182
+.globl sym_1_1183
+sym_1_1183: la $2, sym_1_1183
+.globl sym_1_1184
+sym_1_1184: la $2, sym_1_1184
+.globl sym_1_1185
+sym_1_1185: la $2, sym_1_1185
+.globl sym_1_1186
+sym_1_1186: la $2, sym_1_1186
+.globl sym_1_1187
+sym_1_1187: la $2, sym_1_1187
+.globl sym_1_1188
+sym_1_1188: la $2, sym_1_1188
+.globl sym_1_1189
+sym_1_1189: la $2, sym_1_1189
+.globl sym_1_1190
+sym_1_1190: la $2, sym_1_1190
+.globl sym_1_1191
+sym_1_1191: la $2, sym_1_1191
+.globl sym_1_1192
+sym_1_1192: la $2, sym_1_1192
+.globl sym_1_1193
+sym_1_1193: la $2, sym_1_1193
+.globl sym_1_1194
+sym_1_1194: la $2, sym_1_1194
+.globl sym_1_1195
+sym_1_1195: la $2, sym_1_1195
+.globl sym_1_1196
+sym_1_1196: la $2, sym_1_1196
+.globl sym_1_1197
+sym_1_1197: la $2, sym_1_1197
+.globl sym_1_1198
+sym_1_1198: la $2, sym_1_1198
+.globl sym_1_1199
+sym_1_1199: la $2, sym_1_1199
+.globl sym_1_1200
+sym_1_1200: la $2, sym_1_1200
+.globl sym_1_1201
+sym_1_1201: la $2, sym_1_1201
+.globl sym_1_1202
+sym_1_1202: la $2, sym_1_1202
+.globl sym_1_1203
+sym_1_1203: la $2, sym_1_1203
+.globl sym_1_1204
+sym_1_1204: la $2, sym_1_1204
+.globl sym_1_1205
+sym_1_1205: la $2, sym_1_1205
+.globl sym_1_1206
+sym_1_1206: la $2, sym_1_1206
+.globl sym_1_1207
+sym_1_1207: la $2, sym_1_1207
+.globl sym_1_1208
+sym_1_1208: la $2, sym_1_1208
+.globl sym_1_1209
+sym_1_1209: la $2, sym_1_1209
+.globl sym_1_1210
+sym_1_1210: la $2, sym_1_1210
+.globl sym_1_1211
+sym_1_1211: la $2, sym_1_1211
+.globl sym_1_1212
+sym_1_1212: la $2, sym_1_1212
+.globl sym_1_1213
+sym_1_1213: la $2, sym_1_1213
+.globl sym_1_1214
+sym_1_1214: la $2, sym_1_1214
+.globl sym_1_1215
+sym_1_1215: la $2, sym_1_1215
+.globl sym_1_1216
+sym_1_1216: la $2, sym_1_1216
+.globl sym_1_1217
+sym_1_1217: la $2, sym_1_1217
+.globl sym_1_1218
+sym_1_1218: la $2, sym_1_1218
+.globl sym_1_1219
+sym_1_1219: la $2, sym_1_1219
+.globl sym_1_1220
+sym_1_1220: la $2, sym_1_1220
+.globl sym_1_1221
+sym_1_1221: la $2, sym_1_1221
+.globl sym_1_1222
+sym_1_1222: la $2, sym_1_1222
+.globl sym_1_1223
+sym_1_1223: la $2, sym_1_1223
+.globl sym_1_1224
+sym_1_1224: la $2, sym_1_1224
+.globl sym_1_1225
+sym_1_1225: la $2, sym_1_1225
+.globl sym_1_1226
+sym_1_1226: la $2, sym_1_1226
+.globl sym_1_1227
+sym_1_1227: la $2, sym_1_1227
+.globl sym_1_1228
+sym_1_1228: la $2, sym_1_1228
+.globl sym_1_1229
+sym_1_1229: la $2, sym_1_1229
+.globl sym_1_1230
+sym_1_1230: la $2, sym_1_1230
+.globl sym_1_1231
+sym_1_1231: la $2, sym_1_1231
+.globl sym_1_1232
+sym_1_1232: la $2, sym_1_1232
+.globl sym_1_1233
+sym_1_1233: la $2, sym_1_1233
+.globl sym_1_1234
+sym_1_1234: la $2, sym_1_1234
+.globl sym_1_1235
+sym_1_1235: la $2, sym_1_1235
+.globl sym_1_1236
+sym_1_1236: la $2, sym_1_1236
+.globl sym_1_1237
+sym_1_1237: la $2, sym_1_1237
+.globl sym_1_1238
+sym_1_1238: la $2, sym_1_1238
+.globl sym_1_1239
+sym_1_1239: la $2, sym_1_1239
+.globl sym_1_1240
+sym_1_1240: la $2, sym_1_1240
+.globl sym_1_1241
+sym_1_1241: la $2, sym_1_1241
+.globl sym_1_1242
+sym_1_1242: la $2, sym_1_1242
+.globl sym_1_1243
+sym_1_1243: la $2, sym_1_1243
+.globl sym_1_1244
+sym_1_1244: la $2, sym_1_1244
+.globl sym_1_1245
+sym_1_1245: la $2, sym_1_1245
+.globl sym_1_1246
+sym_1_1246: la $2, sym_1_1246
+.globl sym_1_1247
+sym_1_1247: la $2, sym_1_1247
+.globl sym_1_1248
+sym_1_1248: la $2, sym_1_1248
+.globl sym_1_1249
+sym_1_1249: la $2, sym_1_1249
+.globl sym_1_1250
+sym_1_1250: la $2, sym_1_1250
+.globl sym_1_1251
+sym_1_1251: la $2, sym_1_1251
+.globl sym_1_1252
+sym_1_1252: la $2, sym_1_1252
+.globl sym_1_1253
+sym_1_1253: la $2, sym_1_1253
+.globl sym_1_1254
+sym_1_1254: la $2, sym_1_1254
+.globl sym_1_1255
+sym_1_1255: la $2, sym_1_1255
+.globl sym_1_1256
+sym_1_1256: la $2, sym_1_1256
+.globl sym_1_1257
+sym_1_1257: la $2, sym_1_1257
+.globl sym_1_1258
+sym_1_1258: la $2, sym_1_1258
+.globl sym_1_1259
+sym_1_1259: la $2, sym_1_1259
+.globl sym_1_1260
+sym_1_1260: la $2, sym_1_1260
+.globl sym_1_1261
+sym_1_1261: la $2, sym_1_1261
+.globl sym_1_1262
+sym_1_1262: la $2, sym_1_1262
+.globl sym_1_1263
+sym_1_1263: la $2, sym_1_1263
+.globl sym_1_1264
+sym_1_1264: la $2, sym_1_1264
+.globl sym_1_1265
+sym_1_1265: la $2, sym_1_1265
+.globl sym_1_1266
+sym_1_1266: la $2, sym_1_1266
+.globl sym_1_1267
+sym_1_1267: la $2, sym_1_1267
+.globl sym_1_1268
+sym_1_1268: la $2, sym_1_1268
+.globl sym_1_1269
+sym_1_1269: la $2, sym_1_1269
+.globl sym_1_1270
+sym_1_1270: la $2, sym_1_1270
+.globl sym_1_1271
+sym_1_1271: la $2, sym_1_1271
+.globl sym_1_1272
+sym_1_1272: la $2, sym_1_1272
+.globl sym_1_1273
+sym_1_1273: la $2, sym_1_1273
+.globl sym_1_1274
+sym_1_1274: la $2, sym_1_1274
+.globl sym_1_1275
+sym_1_1275: la $2, sym_1_1275
+.globl sym_1_1276
+sym_1_1276: la $2, sym_1_1276
+.globl sym_1_1277
+sym_1_1277: la $2, sym_1_1277
+.globl sym_1_1278
+sym_1_1278: la $2, sym_1_1278
+.globl sym_1_1279
+sym_1_1279: la $2, sym_1_1279
+.globl sym_1_1280
+sym_1_1280: la $2, sym_1_1280
+.globl sym_1_1281
+sym_1_1281: la $2, sym_1_1281
+.globl sym_1_1282
+sym_1_1282: la $2, sym_1_1282
+.globl sym_1_1283
+sym_1_1283: la $2, sym_1_1283
+.globl sym_1_1284
+sym_1_1284: la $2, sym_1_1284
+.globl sym_1_1285
+sym_1_1285: la $2, sym_1_1285
+.globl sym_1_1286
+sym_1_1286: la $2, sym_1_1286
+.globl sym_1_1287
+sym_1_1287: la $2, sym_1_1287
+.globl sym_1_1288
+sym_1_1288: la $2, sym_1_1288
+.globl sym_1_1289
+sym_1_1289: la $2, sym_1_1289
+.globl sym_1_1290
+sym_1_1290: la $2, sym_1_1290
+.globl sym_1_1291
+sym_1_1291: la $2, sym_1_1291
+.globl sym_1_1292
+sym_1_1292: la $2, sym_1_1292
+.globl sym_1_1293
+sym_1_1293: la $2, sym_1_1293
+.globl sym_1_1294
+sym_1_1294: la $2, sym_1_1294
+.globl sym_1_1295
+sym_1_1295: la $2, sym_1_1295
+.globl sym_1_1296
+sym_1_1296: la $2, sym_1_1296
+.globl sym_1_1297
+sym_1_1297: la $2, sym_1_1297
+.globl sym_1_1298
+sym_1_1298: la $2, sym_1_1298
+.globl sym_1_1299
+sym_1_1299: la $2, sym_1_1299
+.globl sym_1_1300
+sym_1_1300: la $2, sym_1_1300
+.globl sym_1_1301
+sym_1_1301: la $2, sym_1_1301
+.globl sym_1_1302
+sym_1_1302: la $2, sym_1_1302
+.globl sym_1_1303
+sym_1_1303: la $2, sym_1_1303
+.globl sym_1_1304
+sym_1_1304: la $2, sym_1_1304
+.globl sym_1_1305
+sym_1_1305: la $2, sym_1_1305
+.globl sym_1_1306
+sym_1_1306: la $2, sym_1_1306
+.globl sym_1_1307
+sym_1_1307: la $2, sym_1_1307
+.globl sym_1_1308
+sym_1_1308: la $2, sym_1_1308
+.globl sym_1_1309
+sym_1_1309: la $2, sym_1_1309
+.globl sym_1_1310
+sym_1_1310: la $2, sym_1_1310
+.globl sym_1_1311
+sym_1_1311: la $2, sym_1_1311
+.globl sym_1_1312
+sym_1_1312: la $2, sym_1_1312
+.globl sym_1_1313
+sym_1_1313: la $2, sym_1_1313
+.globl sym_1_1314
+sym_1_1314: la $2, sym_1_1314
+.globl sym_1_1315
+sym_1_1315: la $2, sym_1_1315
+.globl sym_1_1316
+sym_1_1316: la $2, sym_1_1316
+.globl sym_1_1317
+sym_1_1317: la $2, sym_1_1317
+.globl sym_1_1318
+sym_1_1318: la $2, sym_1_1318
+.globl sym_1_1319
+sym_1_1319: la $2, sym_1_1319
+.globl sym_1_1320
+sym_1_1320: la $2, sym_1_1320
+.globl sym_1_1321
+sym_1_1321: la $2, sym_1_1321
+.globl sym_1_1322
+sym_1_1322: la $2, sym_1_1322
+.globl sym_1_1323
+sym_1_1323: la $2, sym_1_1323
+.globl sym_1_1324
+sym_1_1324: la $2, sym_1_1324
+.globl sym_1_1325
+sym_1_1325: la $2, sym_1_1325
+.globl sym_1_1326
+sym_1_1326: la $2, sym_1_1326
+.globl sym_1_1327
+sym_1_1327: la $2, sym_1_1327
+.globl sym_1_1328
+sym_1_1328: la $2, sym_1_1328
+.globl sym_1_1329
+sym_1_1329: la $2, sym_1_1329
+.globl sym_1_1330
+sym_1_1330: la $2, sym_1_1330
+.globl sym_1_1331
+sym_1_1331: la $2, sym_1_1331
+.globl sym_1_1332
+sym_1_1332: la $2, sym_1_1332
+.globl sym_1_1333
+sym_1_1333: la $2, sym_1_1333
+.globl sym_1_1334
+sym_1_1334: la $2, sym_1_1334
+.globl sym_1_1335
+sym_1_1335: la $2, sym_1_1335
+.globl sym_1_1336
+sym_1_1336: la $2, sym_1_1336
+.globl sym_1_1337
+sym_1_1337: la $2, sym_1_1337
+.globl sym_1_1338
+sym_1_1338: la $2, sym_1_1338
+.globl sym_1_1339
+sym_1_1339: la $2, sym_1_1339
+.globl sym_1_1340
+sym_1_1340: la $2, sym_1_1340
+.globl sym_1_1341
+sym_1_1341: la $2, sym_1_1341
+.globl sym_1_1342
+sym_1_1342: la $2, sym_1_1342
+.globl sym_1_1343
+sym_1_1343: la $2, sym_1_1343
+.globl sym_1_1344
+sym_1_1344: la $2, sym_1_1344
+.globl sym_1_1345
+sym_1_1345: la $2, sym_1_1345
+.globl sym_1_1346
+sym_1_1346: la $2, sym_1_1346
+.globl sym_1_1347
+sym_1_1347: la $2, sym_1_1347
+.globl sym_1_1348
+sym_1_1348: la $2, sym_1_1348
+.globl sym_1_1349
+sym_1_1349: la $2, sym_1_1349
+.globl sym_1_1350
+sym_1_1350: la $2, sym_1_1350
+.globl sym_1_1351
+sym_1_1351: la $2, sym_1_1351
+.globl sym_1_1352
+sym_1_1352: la $2, sym_1_1352
+.globl sym_1_1353
+sym_1_1353: la $2, sym_1_1353
+.globl sym_1_1354
+sym_1_1354: la $2, sym_1_1354
+.globl sym_1_1355
+sym_1_1355: la $2, sym_1_1355
+.globl sym_1_1356
+sym_1_1356: la $2, sym_1_1356
+.globl sym_1_1357
+sym_1_1357: la $2, sym_1_1357
+.globl sym_1_1358
+sym_1_1358: la $2, sym_1_1358
+.globl sym_1_1359
+sym_1_1359: la $2, sym_1_1359
+.globl sym_1_1360
+sym_1_1360: la $2, sym_1_1360
+.globl sym_1_1361
+sym_1_1361: la $2, sym_1_1361
+.globl sym_1_1362
+sym_1_1362: la $2, sym_1_1362
+.globl sym_1_1363
+sym_1_1363: la $2, sym_1_1363
+.globl sym_1_1364
+sym_1_1364: la $2, sym_1_1364
+.globl sym_1_1365
+sym_1_1365: la $2, sym_1_1365
+.globl sym_1_1366
+sym_1_1366: la $2, sym_1_1366
+.globl sym_1_1367
+sym_1_1367: la $2, sym_1_1367
+.globl sym_1_1368
+sym_1_1368: la $2, sym_1_1368
+.globl sym_1_1369
+sym_1_1369: la $2, sym_1_1369
+.globl sym_1_1370
+sym_1_1370: la $2, sym_1_1370
+.globl sym_1_1371
+sym_1_1371: la $2, sym_1_1371
+.globl sym_1_1372
+sym_1_1372: la $2, sym_1_1372
+.globl sym_1_1373
+sym_1_1373: la $2, sym_1_1373
+.globl sym_1_1374
+sym_1_1374: la $2, sym_1_1374
+.globl sym_1_1375
+sym_1_1375: la $2, sym_1_1375
+.globl sym_1_1376
+sym_1_1376: la $2, sym_1_1376
+.globl sym_1_1377
+sym_1_1377: la $2, sym_1_1377
+.globl sym_1_1378
+sym_1_1378: la $2, sym_1_1378
+.globl sym_1_1379
+sym_1_1379: la $2, sym_1_1379
+.globl sym_1_1380
+sym_1_1380: la $2, sym_1_1380
+.globl sym_1_1381
+sym_1_1381: la $2, sym_1_1381
+.globl sym_1_1382
+sym_1_1382: la $2, sym_1_1382
+.globl sym_1_1383
+sym_1_1383: la $2, sym_1_1383
+.globl sym_1_1384
+sym_1_1384: la $2, sym_1_1384
+.globl sym_1_1385
+sym_1_1385: la $2, sym_1_1385
+.globl sym_1_1386
+sym_1_1386: la $2, sym_1_1386
+.globl sym_1_1387
+sym_1_1387: la $2, sym_1_1387
+.globl sym_1_1388
+sym_1_1388: la $2, sym_1_1388
+.globl sym_1_1389
+sym_1_1389: la $2, sym_1_1389
+.globl sym_1_1390
+sym_1_1390: la $2, sym_1_1390
+.globl sym_1_1391
+sym_1_1391: la $2, sym_1_1391
+.globl sym_1_1392
+sym_1_1392: la $2, sym_1_1392
+.globl sym_1_1393
+sym_1_1393: la $2, sym_1_1393
+.globl sym_1_1394
+sym_1_1394: la $2, sym_1_1394
+.globl sym_1_1395
+sym_1_1395: la $2, sym_1_1395
+.globl sym_1_1396
+sym_1_1396: la $2, sym_1_1396
+.globl sym_1_1397
+sym_1_1397: la $2, sym_1_1397
+.globl sym_1_1398
+sym_1_1398: la $2, sym_1_1398
+.globl sym_1_1399
+sym_1_1399: la $2, sym_1_1399
+.globl sym_1_1400
+sym_1_1400: la $2, sym_1_1400
+.globl sym_1_1401
+sym_1_1401: la $2, sym_1_1401
+.globl sym_1_1402
+sym_1_1402: la $2, sym_1_1402
+.globl sym_1_1403
+sym_1_1403: la $2, sym_1_1403
+.globl sym_1_1404
+sym_1_1404: la $2, sym_1_1404
+.globl sym_1_1405
+sym_1_1405: la $2, sym_1_1405
+.globl sym_1_1406
+sym_1_1406: la $2, sym_1_1406
+.globl sym_1_1407
+sym_1_1407: la $2, sym_1_1407
+.globl sym_1_1408
+sym_1_1408: la $2, sym_1_1408
+.globl sym_1_1409
+sym_1_1409: la $2, sym_1_1409
+.globl sym_1_1410
+sym_1_1410: la $2, sym_1_1410
+.globl sym_1_1411
+sym_1_1411: la $2, sym_1_1411
+.globl sym_1_1412
+sym_1_1412: la $2, sym_1_1412
+.globl sym_1_1413
+sym_1_1413: la $2, sym_1_1413
+.globl sym_1_1414
+sym_1_1414: la $2, sym_1_1414
+.globl sym_1_1415
+sym_1_1415: la $2, sym_1_1415
+.globl sym_1_1416
+sym_1_1416: la $2, sym_1_1416
+.globl sym_1_1417
+sym_1_1417: la $2, sym_1_1417
+.globl sym_1_1418
+sym_1_1418: la $2, sym_1_1418
+.globl sym_1_1419
+sym_1_1419: la $2, sym_1_1419
+.globl sym_1_1420
+sym_1_1420: la $2, sym_1_1420
+.globl sym_1_1421
+sym_1_1421: la $2, sym_1_1421
+.globl sym_1_1422
+sym_1_1422: la $2, sym_1_1422
+.globl sym_1_1423
+sym_1_1423: la $2, sym_1_1423
+.globl sym_1_1424
+sym_1_1424: la $2, sym_1_1424
+.globl sym_1_1425
+sym_1_1425: la $2, sym_1_1425
+.globl sym_1_1426
+sym_1_1426: la $2, sym_1_1426
+.globl sym_1_1427
+sym_1_1427: la $2, sym_1_1427
+.globl sym_1_1428
+sym_1_1428: la $2, sym_1_1428
+.globl sym_1_1429
+sym_1_1429: la $2, sym_1_1429
+.globl sym_1_1430
+sym_1_1430: la $2, sym_1_1430
+.globl sym_1_1431
+sym_1_1431: la $2, sym_1_1431
+.globl sym_1_1432
+sym_1_1432: la $2, sym_1_1432
+.globl sym_1_1433
+sym_1_1433: la $2, sym_1_1433
+.globl sym_1_1434
+sym_1_1434: la $2, sym_1_1434
+.globl sym_1_1435
+sym_1_1435: la $2, sym_1_1435
+.globl sym_1_1436
+sym_1_1436: la $2, sym_1_1436
+.globl sym_1_1437
+sym_1_1437: la $2, sym_1_1437
+.globl sym_1_1438
+sym_1_1438: la $2, sym_1_1438
+.globl sym_1_1439
+sym_1_1439: la $2, sym_1_1439
+.globl sym_1_1440
+sym_1_1440: la $2, sym_1_1440
+.globl sym_1_1441
+sym_1_1441: la $2, sym_1_1441
+.globl sym_1_1442
+sym_1_1442: la $2, sym_1_1442
+.globl sym_1_1443
+sym_1_1443: la $2, sym_1_1443
+.globl sym_1_1444
+sym_1_1444: la $2, sym_1_1444
+.globl sym_1_1445
+sym_1_1445: la $2, sym_1_1445
+.globl sym_1_1446
+sym_1_1446: la $2, sym_1_1446
+.globl sym_1_1447
+sym_1_1447: la $2, sym_1_1447
+.globl sym_1_1448
+sym_1_1448: la $2, sym_1_1448
+.globl sym_1_1449
+sym_1_1449: la $2, sym_1_1449
+.globl sym_1_1450
+sym_1_1450: la $2, sym_1_1450
+.globl sym_1_1451
+sym_1_1451: la $2, sym_1_1451
+.globl sym_1_1452
+sym_1_1452: la $2, sym_1_1452
+.globl sym_1_1453
+sym_1_1453: la $2, sym_1_1453
+.globl sym_1_1454
+sym_1_1454: la $2, sym_1_1454
+.globl sym_1_1455
+sym_1_1455: la $2, sym_1_1455
+.globl sym_1_1456
+sym_1_1456: la $2, sym_1_1456
+.globl sym_1_1457
+sym_1_1457: la $2, sym_1_1457
+.globl sym_1_1458
+sym_1_1458: la $2, sym_1_1458
+.globl sym_1_1459
+sym_1_1459: la $2, sym_1_1459
+.globl sym_1_1460
+sym_1_1460: la $2, sym_1_1460
+.globl sym_1_1461
+sym_1_1461: la $2, sym_1_1461
+.globl sym_1_1462
+sym_1_1462: la $2, sym_1_1462
+.globl sym_1_1463
+sym_1_1463: la $2, sym_1_1463
+.globl sym_1_1464
+sym_1_1464: la $2, sym_1_1464
+.globl sym_1_1465
+sym_1_1465: la $2, sym_1_1465
+.globl sym_1_1466
+sym_1_1466: la $2, sym_1_1466
+.globl sym_1_1467
+sym_1_1467: la $2, sym_1_1467
+.globl sym_1_1468
+sym_1_1468: la $2, sym_1_1468
+.globl sym_1_1469
+sym_1_1469: la $2, sym_1_1469
+.globl sym_1_1470
+sym_1_1470: la $2, sym_1_1470
+.globl sym_1_1471
+sym_1_1471: la $2, sym_1_1471
+.globl sym_1_1472
+sym_1_1472: la $2, sym_1_1472
+.globl sym_1_1473
+sym_1_1473: la $2, sym_1_1473
+.globl sym_1_1474
+sym_1_1474: la $2, sym_1_1474
+.globl sym_1_1475
+sym_1_1475: la $2, sym_1_1475
+.globl sym_1_1476
+sym_1_1476: la $2, sym_1_1476
+.globl sym_1_1477
+sym_1_1477: la $2, sym_1_1477
+.globl sym_1_1478
+sym_1_1478: la $2, sym_1_1478
+.globl sym_1_1479
+sym_1_1479: la $2, sym_1_1479
+.globl sym_1_1480
+sym_1_1480: la $2, sym_1_1480
+.globl sym_1_1481
+sym_1_1481: la $2, sym_1_1481
+.globl sym_1_1482
+sym_1_1482: la $2, sym_1_1482
+.globl sym_1_1483
+sym_1_1483: la $2, sym_1_1483
+.globl sym_1_1484
+sym_1_1484: la $2, sym_1_1484
+.globl sym_1_1485
+sym_1_1485: la $2, sym_1_1485
+.globl sym_1_1486
+sym_1_1486: la $2, sym_1_1486
+.globl sym_1_1487
+sym_1_1487: la $2, sym_1_1487
+.globl sym_1_1488
+sym_1_1488: la $2, sym_1_1488
+.globl sym_1_1489
+sym_1_1489: la $2, sym_1_1489
+.globl sym_1_1490
+sym_1_1490: la $2, sym_1_1490
+.globl sym_1_1491
+sym_1_1491: la $2, sym_1_1491
+.globl sym_1_1492
+sym_1_1492: la $2, sym_1_1492
+.globl sym_1_1493
+sym_1_1493: la $2, sym_1_1493
+.globl sym_1_1494
+sym_1_1494: la $2, sym_1_1494
+.globl sym_1_1495
+sym_1_1495: la $2, sym_1_1495
+.globl sym_1_1496
+sym_1_1496: la $2, sym_1_1496
+.globl sym_1_1497
+sym_1_1497: la $2, sym_1_1497
+.globl sym_1_1498
+sym_1_1498: la $2, sym_1_1498
+.globl sym_1_1499
+sym_1_1499: la $2, sym_1_1499
+.globl sym_1_1500
+sym_1_1500: la $2, sym_1_1500
+.globl sym_1_1501
+sym_1_1501: la $2, sym_1_1501
+.globl sym_1_1502
+sym_1_1502: la $2, sym_1_1502
+.globl sym_1_1503
+sym_1_1503: la $2, sym_1_1503
+.globl sym_1_1504
+sym_1_1504: la $2, sym_1_1504
+.globl sym_1_1505
+sym_1_1505: la $2, sym_1_1505
+.globl sym_1_1506
+sym_1_1506: la $2, sym_1_1506
+.globl sym_1_1507
+sym_1_1507: la $2, sym_1_1507
+.globl sym_1_1508
+sym_1_1508: la $2, sym_1_1508
+.globl sym_1_1509
+sym_1_1509: la $2, sym_1_1509
+.globl sym_1_1510
+sym_1_1510: la $2, sym_1_1510
+.globl sym_1_1511
+sym_1_1511: la $2, sym_1_1511
+.globl sym_1_1512
+sym_1_1512: la $2, sym_1_1512
+.globl sym_1_1513
+sym_1_1513: la $2, sym_1_1513
+.globl sym_1_1514
+sym_1_1514: la $2, sym_1_1514
+.globl sym_1_1515
+sym_1_1515: la $2, sym_1_1515
+.globl sym_1_1516
+sym_1_1516: la $2, sym_1_1516
+.globl sym_1_1517
+sym_1_1517: la $2, sym_1_1517
+.globl sym_1_1518
+sym_1_1518: la $2, sym_1_1518
+.globl sym_1_1519
+sym_1_1519: la $2, sym_1_1519
+.globl sym_1_1520
+sym_1_1520: la $2, sym_1_1520
+.globl sym_1_1521
+sym_1_1521: la $2, sym_1_1521
+.globl sym_1_1522
+sym_1_1522: la $2, sym_1_1522
+.globl sym_1_1523
+sym_1_1523: la $2, sym_1_1523
+.globl sym_1_1524
+sym_1_1524: la $2, sym_1_1524
+.globl sym_1_1525
+sym_1_1525: la $2, sym_1_1525
+.globl sym_1_1526
+sym_1_1526: la $2, sym_1_1526
+.globl sym_1_1527
+sym_1_1527: la $2, sym_1_1527
+.globl sym_1_1528
+sym_1_1528: la $2, sym_1_1528
+.globl sym_1_1529
+sym_1_1529: la $2, sym_1_1529
+.globl sym_1_1530
+sym_1_1530: la $2, sym_1_1530
+.globl sym_1_1531
+sym_1_1531: la $2, sym_1_1531
+.globl sym_1_1532
+sym_1_1532: la $2, sym_1_1532
+.globl sym_1_1533
+sym_1_1533: la $2, sym_1_1533
+.globl sym_1_1534
+sym_1_1534: la $2, sym_1_1534
+.globl sym_1_1535
+sym_1_1535: la $2, sym_1_1535
+.globl sym_1_1536
+sym_1_1536: la $2, sym_1_1536
+.globl sym_1_1537
+sym_1_1537: la $2, sym_1_1537
+.globl sym_1_1538
+sym_1_1538: la $2, sym_1_1538
+.globl sym_1_1539
+sym_1_1539: la $2, sym_1_1539
+.globl sym_1_1540
+sym_1_1540: la $2, sym_1_1540
+.globl sym_1_1541
+sym_1_1541: la $2, sym_1_1541
+.globl sym_1_1542
+sym_1_1542: la $2, sym_1_1542
+.globl sym_1_1543
+sym_1_1543: la $2, sym_1_1543
+.globl sym_1_1544
+sym_1_1544: la $2, sym_1_1544
+.globl sym_1_1545
+sym_1_1545: la $2, sym_1_1545
+.globl sym_1_1546
+sym_1_1546: la $2, sym_1_1546
+.globl sym_1_1547
+sym_1_1547: la $2, sym_1_1547
+.globl sym_1_1548
+sym_1_1548: la $2, sym_1_1548
+.globl sym_1_1549
+sym_1_1549: la $2, sym_1_1549
+.globl sym_1_1550
+sym_1_1550: la $2, sym_1_1550
+.globl sym_1_1551
+sym_1_1551: la $2, sym_1_1551
+.globl sym_1_1552
+sym_1_1552: la $2, sym_1_1552
+.globl sym_1_1553
+sym_1_1553: la $2, sym_1_1553
+.globl sym_1_1554
+sym_1_1554: la $2, sym_1_1554
+.globl sym_1_1555
+sym_1_1555: la $2, sym_1_1555
+.globl sym_1_1556
+sym_1_1556: la $2, sym_1_1556
+.globl sym_1_1557
+sym_1_1557: la $2, sym_1_1557
+.globl sym_1_1558
+sym_1_1558: la $2, sym_1_1558
+.globl sym_1_1559
+sym_1_1559: la $2, sym_1_1559
+.globl sym_1_1560
+sym_1_1560: la $2, sym_1_1560
+.globl sym_1_1561
+sym_1_1561: la $2, sym_1_1561
+.globl sym_1_1562
+sym_1_1562: la $2, sym_1_1562
+.globl sym_1_1563
+sym_1_1563: la $2, sym_1_1563
+.globl sym_1_1564
+sym_1_1564: la $2, sym_1_1564
+.globl sym_1_1565
+sym_1_1565: la $2, sym_1_1565
+.globl sym_1_1566
+sym_1_1566: la $2, sym_1_1566
+.globl sym_1_1567
+sym_1_1567: la $2, sym_1_1567
+.globl sym_1_1568
+sym_1_1568: la $2, sym_1_1568
+.globl sym_1_1569
+sym_1_1569: la $2, sym_1_1569
+.globl sym_1_1570
+sym_1_1570: la $2, sym_1_1570
+.globl sym_1_1571
+sym_1_1571: la $2, sym_1_1571
+.globl sym_1_1572
+sym_1_1572: la $2, sym_1_1572
+.globl sym_1_1573
+sym_1_1573: la $2, sym_1_1573
+.globl sym_1_1574
+sym_1_1574: la $2, sym_1_1574
+.globl sym_1_1575
+sym_1_1575: la $2, sym_1_1575
+.globl sym_1_1576
+sym_1_1576: la $2, sym_1_1576
+.globl sym_1_1577
+sym_1_1577: la $2, sym_1_1577
+.globl sym_1_1578
+sym_1_1578: la $2, sym_1_1578
+.globl sym_1_1579
+sym_1_1579: la $2, sym_1_1579
+.globl sym_1_1580
+sym_1_1580: la $2, sym_1_1580
+.globl sym_1_1581
+sym_1_1581: la $2, sym_1_1581
+.globl sym_1_1582
+sym_1_1582: la $2, sym_1_1582
+.globl sym_1_1583
+sym_1_1583: la $2, sym_1_1583
+.globl sym_1_1584
+sym_1_1584: la $2, sym_1_1584
+.globl sym_1_1585
+sym_1_1585: la $2, sym_1_1585
+.globl sym_1_1586
+sym_1_1586: la $2, sym_1_1586
+.globl sym_1_1587
+sym_1_1587: la $2, sym_1_1587
+.globl sym_1_1588
+sym_1_1588: la $2, sym_1_1588
+.globl sym_1_1589
+sym_1_1589: la $2, sym_1_1589
+.globl sym_1_1590
+sym_1_1590: la $2, sym_1_1590
+.globl sym_1_1591
+sym_1_1591: la $2, sym_1_1591
+.globl sym_1_1592
+sym_1_1592: la $2, sym_1_1592
+.globl sym_1_1593
+sym_1_1593: la $2, sym_1_1593
+.globl sym_1_1594
+sym_1_1594: la $2, sym_1_1594
+.globl sym_1_1595
+sym_1_1595: la $2, sym_1_1595
+.globl sym_1_1596
+sym_1_1596: la $2, sym_1_1596
+.globl sym_1_1597
+sym_1_1597: la $2, sym_1_1597
+.globl sym_1_1598
+sym_1_1598: la $2, sym_1_1598
+.globl sym_1_1599
+sym_1_1599: la $2, sym_1_1599
+.globl sym_1_1600
+sym_1_1600: la $2, sym_1_1600
+.globl sym_1_1601
+sym_1_1601: la $2, sym_1_1601
+.globl sym_1_1602
+sym_1_1602: la $2, sym_1_1602
+.globl sym_1_1603
+sym_1_1603: la $2, sym_1_1603
+.globl sym_1_1604
+sym_1_1604: la $2, sym_1_1604
+.globl sym_1_1605
+sym_1_1605: la $2, sym_1_1605
+.globl sym_1_1606
+sym_1_1606: la $2, sym_1_1606
+.globl sym_1_1607
+sym_1_1607: la $2, sym_1_1607
+.globl sym_1_1608
+sym_1_1608: la $2, sym_1_1608
+.globl sym_1_1609
+sym_1_1609: la $2, sym_1_1609
+.globl sym_1_1610
+sym_1_1610: la $2, sym_1_1610
+.globl sym_1_1611
+sym_1_1611: la $2, sym_1_1611
+.globl sym_1_1612
+sym_1_1612: la $2, sym_1_1612
+.globl sym_1_1613
+sym_1_1613: la $2, sym_1_1613
+.globl sym_1_1614
+sym_1_1614: la $2, sym_1_1614
+.globl sym_1_1615
+sym_1_1615: la $2, sym_1_1615
+.globl sym_1_1616
+sym_1_1616: la $2, sym_1_1616
+.globl sym_1_1617
+sym_1_1617: la $2, sym_1_1617
+.globl sym_1_1618
+sym_1_1618: la $2, sym_1_1618
+.globl sym_1_1619
+sym_1_1619: la $2, sym_1_1619
+.globl sym_1_1620
+sym_1_1620: la $2, sym_1_1620
+.globl sym_1_1621
+sym_1_1621: la $2, sym_1_1621
+.globl sym_1_1622
+sym_1_1622: la $2, sym_1_1622
+.globl sym_1_1623
+sym_1_1623: la $2, sym_1_1623
+.globl sym_1_1624
+sym_1_1624: la $2, sym_1_1624
+.globl sym_1_1625
+sym_1_1625: la $2, sym_1_1625
+.globl sym_1_1626
+sym_1_1626: la $2, sym_1_1626
+.globl sym_1_1627
+sym_1_1627: la $2, sym_1_1627
+.globl sym_1_1628
+sym_1_1628: la $2, sym_1_1628
+.globl sym_1_1629
+sym_1_1629: la $2, sym_1_1629
+.globl sym_1_1630
+sym_1_1630: la $2, sym_1_1630
+.globl sym_1_1631
+sym_1_1631: la $2, sym_1_1631
+.globl sym_1_1632
+sym_1_1632: la $2, sym_1_1632
+.globl sym_1_1633
+sym_1_1633: la $2, sym_1_1633
+.globl sym_1_1634
+sym_1_1634: la $2, sym_1_1634
+.globl sym_1_1635
+sym_1_1635: la $2, sym_1_1635
+.globl sym_1_1636
+sym_1_1636: la $2, sym_1_1636
+.globl sym_1_1637
+sym_1_1637: la $2, sym_1_1637
+.globl sym_1_1638
+sym_1_1638: la $2, sym_1_1638
+.globl sym_1_1639
+sym_1_1639: la $2, sym_1_1639
+.globl sym_1_1640
+sym_1_1640: la $2, sym_1_1640
+.globl sym_1_1641
+sym_1_1641: la $2, sym_1_1641
+.globl sym_1_1642
+sym_1_1642: la $2, sym_1_1642
+.globl sym_1_1643
+sym_1_1643: la $2, sym_1_1643
+.globl sym_1_1644
+sym_1_1644: la $2, sym_1_1644
+.globl sym_1_1645
+sym_1_1645: la $2, sym_1_1645
+.globl sym_1_1646
+sym_1_1646: la $2, sym_1_1646
+.globl sym_1_1647
+sym_1_1647: la $2, sym_1_1647
+.globl sym_1_1648
+sym_1_1648: la $2, sym_1_1648
+.globl sym_1_1649
+sym_1_1649: la $2, sym_1_1649
+.globl sym_1_1650
+sym_1_1650: la $2, sym_1_1650
+.globl sym_1_1651
+sym_1_1651: la $2, sym_1_1651
+.globl sym_1_1652
+sym_1_1652: la $2, sym_1_1652
+.globl sym_1_1653
+sym_1_1653: la $2, sym_1_1653
+.globl sym_1_1654
+sym_1_1654: la $2, sym_1_1654
+.globl sym_1_1655
+sym_1_1655: la $2, sym_1_1655
+.globl sym_1_1656
+sym_1_1656: la $2, sym_1_1656
+.globl sym_1_1657
+sym_1_1657: la $2, sym_1_1657
+.globl sym_1_1658
+sym_1_1658: la $2, sym_1_1658
+.globl sym_1_1659
+sym_1_1659: la $2, sym_1_1659
+.globl sym_1_1660
+sym_1_1660: la $2, sym_1_1660
+.globl sym_1_1661
+sym_1_1661: la $2, sym_1_1661
+.globl sym_1_1662
+sym_1_1662: la $2, sym_1_1662
+.globl sym_1_1663
+sym_1_1663: la $2, sym_1_1663
+.globl sym_1_1664
+sym_1_1664: la $2, sym_1_1664
+.globl sym_1_1665
+sym_1_1665: la $2, sym_1_1665
+.globl sym_1_1666
+sym_1_1666: la $2, sym_1_1666
+.globl sym_1_1667
+sym_1_1667: la $2, sym_1_1667
+.globl sym_1_1668
+sym_1_1668: la $2, sym_1_1668
+.globl sym_1_1669
+sym_1_1669: la $2, sym_1_1669
+.globl sym_1_1670
+sym_1_1670: la $2, sym_1_1670
+.globl sym_1_1671
+sym_1_1671: la $2, sym_1_1671
+.globl sym_1_1672
+sym_1_1672: la $2, sym_1_1672
+.globl sym_1_1673
+sym_1_1673: la $2, sym_1_1673
+.globl sym_1_1674
+sym_1_1674: la $2, sym_1_1674
+.globl sym_1_1675
+sym_1_1675: la $2, sym_1_1675
+.globl sym_1_1676
+sym_1_1676: la $2, sym_1_1676
+.globl sym_1_1677
+sym_1_1677: la $2, sym_1_1677
+.globl sym_1_1678
+sym_1_1678: la $2, sym_1_1678
+.globl sym_1_1679
+sym_1_1679: la $2, sym_1_1679
+.globl sym_1_1680
+sym_1_1680: la $2, sym_1_1680
+.globl sym_1_1681
+sym_1_1681: la $2, sym_1_1681
+.globl sym_1_1682
+sym_1_1682: la $2, sym_1_1682
+.globl sym_1_1683
+sym_1_1683: la $2, sym_1_1683
+.globl sym_1_1684
+sym_1_1684: la $2, sym_1_1684
+.globl sym_1_1685
+sym_1_1685: la $2, sym_1_1685
+.globl sym_1_1686
+sym_1_1686: la $2, sym_1_1686
+.globl sym_1_1687
+sym_1_1687: la $2, sym_1_1687
+.globl sym_1_1688
+sym_1_1688: la $2, sym_1_1688
+.globl sym_1_1689
+sym_1_1689: la $2, sym_1_1689
+.globl sym_1_1690
+sym_1_1690: la $2, sym_1_1690
+.globl sym_1_1691
+sym_1_1691: la $2, sym_1_1691
+.globl sym_1_1692
+sym_1_1692: la $2, sym_1_1692
+.globl sym_1_1693
+sym_1_1693: la $2, sym_1_1693
+.globl sym_1_1694
+sym_1_1694: la $2, sym_1_1694
+.globl sym_1_1695
+sym_1_1695: la $2, sym_1_1695
+.globl sym_1_1696
+sym_1_1696: la $2, sym_1_1696
+.globl sym_1_1697
+sym_1_1697: la $2, sym_1_1697
+.globl sym_1_1698
+sym_1_1698: la $2, sym_1_1698
+.globl sym_1_1699
+sym_1_1699: la $2, sym_1_1699
+.globl sym_1_1700
+sym_1_1700: la $2, sym_1_1700
+.globl sym_1_1701
+sym_1_1701: la $2, sym_1_1701
+.globl sym_1_1702
+sym_1_1702: la $2, sym_1_1702
+.globl sym_1_1703
+sym_1_1703: la $2, sym_1_1703
+.globl sym_1_1704
+sym_1_1704: la $2, sym_1_1704
+.globl sym_1_1705
+sym_1_1705: la $2, sym_1_1705
+.globl sym_1_1706
+sym_1_1706: la $2, sym_1_1706
+.globl sym_1_1707
+sym_1_1707: la $2, sym_1_1707
+.globl sym_1_1708
+sym_1_1708: la $2, sym_1_1708
+.globl sym_1_1709
+sym_1_1709: la $2, sym_1_1709
+.globl sym_1_1710
+sym_1_1710: la $2, sym_1_1710
+.globl sym_1_1711
+sym_1_1711: la $2, sym_1_1711
+.globl sym_1_1712
+sym_1_1712: la $2, sym_1_1712
+.globl sym_1_1713
+sym_1_1713: la $2, sym_1_1713
+.globl sym_1_1714
+sym_1_1714: la $2, sym_1_1714
+.globl sym_1_1715
+sym_1_1715: la $2, sym_1_1715
+.globl sym_1_1716
+sym_1_1716: la $2, sym_1_1716
+.globl sym_1_1717
+sym_1_1717: la $2, sym_1_1717
+.globl sym_1_1718
+sym_1_1718: la $2, sym_1_1718
+.globl sym_1_1719
+sym_1_1719: la $2, sym_1_1719
+.globl sym_1_1720
+sym_1_1720: la $2, sym_1_1720
+.globl sym_1_1721
+sym_1_1721: la $2, sym_1_1721
+.globl sym_1_1722
+sym_1_1722: la $2, sym_1_1722
+.globl sym_1_1723
+sym_1_1723: la $2, sym_1_1723
+.globl sym_1_1724
+sym_1_1724: la $2, sym_1_1724
+.globl sym_1_1725
+sym_1_1725: la $2, sym_1_1725
+.globl sym_1_1726
+sym_1_1726: la $2, sym_1_1726
+.globl sym_1_1727
+sym_1_1727: la $2, sym_1_1727
+.globl sym_1_1728
+sym_1_1728: la $2, sym_1_1728
+.globl sym_1_1729
+sym_1_1729: la $2, sym_1_1729
+.globl sym_1_1730
+sym_1_1730: la $2, sym_1_1730
+.globl sym_1_1731
+sym_1_1731: la $2, sym_1_1731
+.globl sym_1_1732
+sym_1_1732: la $2, sym_1_1732
+.globl sym_1_1733
+sym_1_1733: la $2, sym_1_1733
+.globl sym_1_1734
+sym_1_1734: la $2, sym_1_1734
+.globl sym_1_1735
+sym_1_1735: la $2, sym_1_1735
+.globl sym_1_1736
+sym_1_1736: la $2, sym_1_1736
+.globl sym_1_1737
+sym_1_1737: la $2, sym_1_1737
+.globl sym_1_1738
+sym_1_1738: la $2, sym_1_1738
+.globl sym_1_1739
+sym_1_1739: la $2, sym_1_1739
+.globl sym_1_1740
+sym_1_1740: la $2, sym_1_1740
+.globl sym_1_1741
+sym_1_1741: la $2, sym_1_1741
+.globl sym_1_1742
+sym_1_1742: la $2, sym_1_1742
+.globl sym_1_1743
+sym_1_1743: la $2, sym_1_1743
+.globl sym_1_1744
+sym_1_1744: la $2, sym_1_1744
+.globl sym_1_1745
+sym_1_1745: la $2, sym_1_1745
+.globl sym_1_1746
+sym_1_1746: la $2, sym_1_1746
+.globl sym_1_1747
+sym_1_1747: la $2, sym_1_1747
+.globl sym_1_1748
+sym_1_1748: la $2, sym_1_1748
+.globl sym_1_1749
+sym_1_1749: la $2, sym_1_1749
+.globl sym_1_1750
+sym_1_1750: la $2, sym_1_1750
+.globl sym_1_1751
+sym_1_1751: la $2, sym_1_1751
+.globl sym_1_1752
+sym_1_1752: la $2, sym_1_1752
+.globl sym_1_1753
+sym_1_1753: la $2, sym_1_1753
+.globl sym_1_1754
+sym_1_1754: la $2, sym_1_1754
+.globl sym_1_1755
+sym_1_1755: la $2, sym_1_1755
+.globl sym_1_1756
+sym_1_1756: la $2, sym_1_1756
+.globl sym_1_1757
+sym_1_1757: la $2, sym_1_1757
+.globl sym_1_1758
+sym_1_1758: la $2, sym_1_1758
+.globl sym_1_1759
+sym_1_1759: la $2, sym_1_1759
+.globl sym_1_1760
+sym_1_1760: la $2, sym_1_1760
+.globl sym_1_1761
+sym_1_1761: la $2, sym_1_1761
+.globl sym_1_1762
+sym_1_1762: la $2, sym_1_1762
+.globl sym_1_1763
+sym_1_1763: la $2, sym_1_1763
+.globl sym_1_1764
+sym_1_1764: la $2, sym_1_1764
+.globl sym_1_1765
+sym_1_1765: la $2, sym_1_1765
+.globl sym_1_1766
+sym_1_1766: la $2, sym_1_1766
+.globl sym_1_1767
+sym_1_1767: la $2, sym_1_1767
+.globl sym_1_1768
+sym_1_1768: la $2, sym_1_1768
+.globl sym_1_1769
+sym_1_1769: la $2, sym_1_1769
+.globl sym_1_1770
+sym_1_1770: la $2, sym_1_1770
+.globl sym_1_1771
+sym_1_1771: la $2, sym_1_1771
+.globl sym_1_1772
+sym_1_1772: la $2, sym_1_1772
+.globl sym_1_1773
+sym_1_1773: la $2, sym_1_1773
+.globl sym_1_1774
+sym_1_1774: la $2, sym_1_1774
+.globl sym_1_1775
+sym_1_1775: la $2, sym_1_1775
+.globl sym_1_1776
+sym_1_1776: la $2, sym_1_1776
+.globl sym_1_1777
+sym_1_1777: la $2, sym_1_1777
+.globl sym_1_1778
+sym_1_1778: la $2, sym_1_1778
+.globl sym_1_1779
+sym_1_1779: la $2, sym_1_1779
+.globl sym_1_1780
+sym_1_1780: la $2, sym_1_1780
+.globl sym_1_1781
+sym_1_1781: la $2, sym_1_1781
+.globl sym_1_1782
+sym_1_1782: la $2, sym_1_1782
+.globl sym_1_1783
+sym_1_1783: la $2, sym_1_1783
+.globl sym_1_1784
+sym_1_1784: la $2, sym_1_1784
+.globl sym_1_1785
+sym_1_1785: la $2, sym_1_1785
+.globl sym_1_1786
+sym_1_1786: la $2, sym_1_1786
+.globl sym_1_1787
+sym_1_1787: la $2, sym_1_1787
+.globl sym_1_1788
+sym_1_1788: la $2, sym_1_1788
+.globl sym_1_1789
+sym_1_1789: la $2, sym_1_1789
+.globl sym_1_1790
+sym_1_1790: la $2, sym_1_1790
+.globl sym_1_1791
+sym_1_1791: la $2, sym_1_1791
+.globl sym_1_1792
+sym_1_1792: la $2, sym_1_1792
+.globl sym_1_1793
+sym_1_1793: la $2, sym_1_1793
+.globl sym_1_1794
+sym_1_1794: la $2, sym_1_1794
+.globl sym_1_1795
+sym_1_1795: la $2, sym_1_1795
+.globl sym_1_1796
+sym_1_1796: la $2, sym_1_1796
+.globl sym_1_1797
+sym_1_1797: la $2, sym_1_1797
+.globl sym_1_1798
+sym_1_1798: la $2, sym_1_1798
+.globl sym_1_1799
+sym_1_1799: la $2, sym_1_1799
+.globl sym_1_1800
+sym_1_1800: la $2, sym_1_1800
+.globl sym_1_1801
+sym_1_1801: la $2, sym_1_1801
+.globl sym_1_1802
+sym_1_1802: la $2, sym_1_1802
+.globl sym_1_1803
+sym_1_1803: la $2, sym_1_1803
+.globl sym_1_1804
+sym_1_1804: la $2, sym_1_1804
+.globl sym_1_1805
+sym_1_1805: la $2, sym_1_1805
+.globl sym_1_1806
+sym_1_1806: la $2, sym_1_1806
+.globl sym_1_1807
+sym_1_1807: la $2, sym_1_1807
+.globl sym_1_1808
+sym_1_1808: la $2, sym_1_1808
+.globl sym_1_1809
+sym_1_1809: la $2, sym_1_1809
+.globl sym_1_1810
+sym_1_1810: la $2, sym_1_1810
+.globl sym_1_1811
+sym_1_1811: la $2, sym_1_1811
+.globl sym_1_1812
+sym_1_1812: la $2, sym_1_1812
+.globl sym_1_1813
+sym_1_1813: la $2, sym_1_1813
+.globl sym_1_1814
+sym_1_1814: la $2, sym_1_1814
+.globl sym_1_1815
+sym_1_1815: la $2, sym_1_1815
+.globl sym_1_1816
+sym_1_1816: la $2, sym_1_1816
+.globl sym_1_1817
+sym_1_1817: la $2, sym_1_1817
+.globl sym_1_1818
+sym_1_1818: la $2, sym_1_1818
+.globl sym_1_1819
+sym_1_1819: la $2, sym_1_1819
+.globl sym_1_1820
+sym_1_1820: la $2, sym_1_1820
+.globl sym_1_1821
+sym_1_1821: la $2, sym_1_1821
+.globl sym_1_1822
+sym_1_1822: la $2, sym_1_1822
+.globl sym_1_1823
+sym_1_1823: la $2, sym_1_1823
+.globl sym_1_1824
+sym_1_1824: la $2, sym_1_1824
+.globl sym_1_1825
+sym_1_1825: la $2, sym_1_1825
+.globl sym_1_1826
+sym_1_1826: la $2, sym_1_1826
+.globl sym_1_1827
+sym_1_1827: la $2, sym_1_1827
+.globl sym_1_1828
+sym_1_1828: la $2, sym_1_1828
+.globl sym_1_1829
+sym_1_1829: la $2, sym_1_1829
+.globl sym_1_1830
+sym_1_1830: la $2, sym_1_1830
+.globl sym_1_1831
+sym_1_1831: la $2, sym_1_1831
+.globl sym_1_1832
+sym_1_1832: la $2, sym_1_1832
+.globl sym_1_1833
+sym_1_1833: la $2, sym_1_1833
+.globl sym_1_1834
+sym_1_1834: la $2, sym_1_1834
+.globl sym_1_1835
+sym_1_1835: la $2, sym_1_1835
+.globl sym_1_1836
+sym_1_1836: la $2, sym_1_1836
+.globl sym_1_1837
+sym_1_1837: la $2, sym_1_1837
+.globl sym_1_1838
+sym_1_1838: la $2, sym_1_1838
+.globl sym_1_1839
+sym_1_1839: la $2, sym_1_1839
+.globl sym_1_1840
+sym_1_1840: la $2, sym_1_1840
+.globl sym_1_1841
+sym_1_1841: la $2, sym_1_1841
+.globl sym_1_1842
+sym_1_1842: la $2, sym_1_1842
+.globl sym_1_1843
+sym_1_1843: la $2, sym_1_1843
+.globl sym_1_1844
+sym_1_1844: la $2, sym_1_1844
+.globl sym_1_1845
+sym_1_1845: la $2, sym_1_1845
+.globl sym_1_1846
+sym_1_1846: la $2, sym_1_1846
+.globl sym_1_1847
+sym_1_1847: la $2, sym_1_1847
+.globl sym_1_1848
+sym_1_1848: la $2, sym_1_1848
+.globl sym_1_1849
+sym_1_1849: la $2, sym_1_1849
+.globl sym_1_1850
+sym_1_1850: la $2, sym_1_1850
+.globl sym_1_1851
+sym_1_1851: la $2, sym_1_1851
+.globl sym_1_1852
+sym_1_1852: la $2, sym_1_1852
+.globl sym_1_1853
+sym_1_1853: la $2, sym_1_1853
+.globl sym_1_1854
+sym_1_1854: la $2, sym_1_1854
+.globl sym_1_1855
+sym_1_1855: la $2, sym_1_1855
+.globl sym_1_1856
+sym_1_1856: la $2, sym_1_1856
+.globl sym_1_1857
+sym_1_1857: la $2, sym_1_1857
+.globl sym_1_1858
+sym_1_1858: la $2, sym_1_1858
+.globl sym_1_1859
+sym_1_1859: la $2, sym_1_1859
+.globl sym_1_1860
+sym_1_1860: la $2, sym_1_1860
+.globl sym_1_1861
+sym_1_1861: la $2, sym_1_1861
+.globl sym_1_1862
+sym_1_1862: la $2, sym_1_1862
+.globl sym_1_1863
+sym_1_1863: la $2, sym_1_1863
+.globl sym_1_1864
+sym_1_1864: la $2, sym_1_1864
+.globl sym_1_1865
+sym_1_1865: la $2, sym_1_1865
+.globl sym_1_1866
+sym_1_1866: la $2, sym_1_1866
+.globl sym_1_1867
+sym_1_1867: la $2, sym_1_1867
+.globl sym_1_1868
+sym_1_1868: la $2, sym_1_1868
+.globl sym_1_1869
+sym_1_1869: la $2, sym_1_1869
+.globl sym_1_1870
+sym_1_1870: la $2, sym_1_1870
+.globl sym_1_1871
+sym_1_1871: la $2, sym_1_1871
+.globl sym_1_1872
+sym_1_1872: la $2, sym_1_1872
+.globl sym_1_1873
+sym_1_1873: la $2, sym_1_1873
+.globl sym_1_1874
+sym_1_1874: la $2, sym_1_1874
+.globl sym_1_1875
+sym_1_1875: la $2, sym_1_1875
+.globl sym_1_1876
+sym_1_1876: la $2, sym_1_1876
+.globl sym_1_1877
+sym_1_1877: la $2, sym_1_1877
+.globl sym_1_1878
+sym_1_1878: la $2, sym_1_1878
+.globl sym_1_1879
+sym_1_1879: la $2, sym_1_1879
+.globl sym_1_1880
+sym_1_1880: la $2, sym_1_1880
+.globl sym_1_1881
+sym_1_1881: la $2, sym_1_1881
+.globl sym_1_1882
+sym_1_1882: la $2, sym_1_1882
+.globl sym_1_1883
+sym_1_1883: la $2, sym_1_1883
+.globl sym_1_1884
+sym_1_1884: la $2, sym_1_1884
+.globl sym_1_1885
+sym_1_1885: la $2, sym_1_1885
+.globl sym_1_1886
+sym_1_1886: la $2, sym_1_1886
+.globl sym_1_1887
+sym_1_1887: la $2, sym_1_1887
+.globl sym_1_1888
+sym_1_1888: la $2, sym_1_1888
+.globl sym_1_1889
+sym_1_1889: la $2, sym_1_1889
+.globl sym_1_1890
+sym_1_1890: la $2, sym_1_1890
+.globl sym_1_1891
+sym_1_1891: la $2, sym_1_1891
+.globl sym_1_1892
+sym_1_1892: la $2, sym_1_1892
+.globl sym_1_1893
+sym_1_1893: la $2, sym_1_1893
+.globl sym_1_1894
+sym_1_1894: la $2, sym_1_1894
+.globl sym_1_1895
+sym_1_1895: la $2, sym_1_1895
+.globl sym_1_1896
+sym_1_1896: la $2, sym_1_1896
+.globl sym_1_1897
+sym_1_1897: la $2, sym_1_1897
+.globl sym_1_1898
+sym_1_1898: la $2, sym_1_1898
+.globl sym_1_1899
+sym_1_1899: la $2, sym_1_1899
+.globl sym_1_1900
+sym_1_1900: la $2, sym_1_1900
+.globl sym_1_1901
+sym_1_1901: la $2, sym_1_1901
+.globl sym_1_1902
+sym_1_1902: la $2, sym_1_1902
+.globl sym_1_1903
+sym_1_1903: la $2, sym_1_1903
+.globl sym_1_1904
+sym_1_1904: la $2, sym_1_1904
+.globl sym_1_1905
+sym_1_1905: la $2, sym_1_1905
+.globl sym_1_1906
+sym_1_1906: la $2, sym_1_1906
+.globl sym_1_1907
+sym_1_1907: la $2, sym_1_1907
+.globl sym_1_1908
+sym_1_1908: la $2, sym_1_1908
+.globl sym_1_1909
+sym_1_1909: la $2, sym_1_1909
+.globl sym_1_1910
+sym_1_1910: la $2, sym_1_1910
+.globl sym_1_1911
+sym_1_1911: la $2, sym_1_1911
+.globl sym_1_1912
+sym_1_1912: la $2, sym_1_1912
+.globl sym_1_1913
+sym_1_1913: la $2, sym_1_1913
+.globl sym_1_1914
+sym_1_1914: la $2, sym_1_1914
+.globl sym_1_1915
+sym_1_1915: la $2, sym_1_1915
+.globl sym_1_1916
+sym_1_1916: la $2, sym_1_1916
+.globl sym_1_1917
+sym_1_1917: la $2, sym_1_1917
+.globl sym_1_1918
+sym_1_1918: la $2, sym_1_1918
+.globl sym_1_1919
+sym_1_1919: la $2, sym_1_1919
+.globl sym_1_1920
+sym_1_1920: la $2, sym_1_1920
+.globl sym_1_1921
+sym_1_1921: la $2, sym_1_1921
+.globl sym_1_1922
+sym_1_1922: la $2, sym_1_1922
+.globl sym_1_1923
+sym_1_1923: la $2, sym_1_1923
+.globl sym_1_1924
+sym_1_1924: la $2, sym_1_1924
+.globl sym_1_1925
+sym_1_1925: la $2, sym_1_1925
+.globl sym_1_1926
+sym_1_1926: la $2, sym_1_1926
+.globl sym_1_1927
+sym_1_1927: la $2, sym_1_1927
+.globl sym_1_1928
+sym_1_1928: la $2, sym_1_1928
+.globl sym_1_1929
+sym_1_1929: la $2, sym_1_1929
+.globl sym_1_1930
+sym_1_1930: la $2, sym_1_1930
+.globl sym_1_1931
+sym_1_1931: la $2, sym_1_1931
+.globl sym_1_1932
+sym_1_1932: la $2, sym_1_1932
+.globl sym_1_1933
+sym_1_1933: la $2, sym_1_1933
+.globl sym_1_1934
+sym_1_1934: la $2, sym_1_1934
+.globl sym_1_1935
+sym_1_1935: la $2, sym_1_1935
+.globl sym_1_1936
+sym_1_1936: la $2, sym_1_1936
+.globl sym_1_1937
+sym_1_1937: la $2, sym_1_1937
+.globl sym_1_1938
+sym_1_1938: la $2, sym_1_1938
+.globl sym_1_1939
+sym_1_1939: la $2, sym_1_1939
+.globl sym_1_1940
+sym_1_1940: la $2, sym_1_1940
+.globl sym_1_1941
+sym_1_1941: la $2, sym_1_1941
+.globl sym_1_1942
+sym_1_1942: la $2, sym_1_1942
+.globl sym_1_1943
+sym_1_1943: la $2, sym_1_1943
+.globl sym_1_1944
+sym_1_1944: la $2, sym_1_1944
+.globl sym_1_1945
+sym_1_1945: la $2, sym_1_1945
+.globl sym_1_1946
+sym_1_1946: la $2, sym_1_1946
+.globl sym_1_1947
+sym_1_1947: la $2, sym_1_1947
+.globl sym_1_1948
+sym_1_1948: la $2, sym_1_1948
+.globl sym_1_1949
+sym_1_1949: la $2, sym_1_1949
+.globl sym_1_1950
+sym_1_1950: la $2, sym_1_1950
+.globl sym_1_1951
+sym_1_1951: la $2, sym_1_1951
+.globl sym_1_1952
+sym_1_1952: la $2, sym_1_1952
+.globl sym_1_1953
+sym_1_1953: la $2, sym_1_1953
+.globl sym_1_1954
+sym_1_1954: la $2, sym_1_1954
+.globl sym_1_1955
+sym_1_1955: la $2, sym_1_1955
+.globl sym_1_1956
+sym_1_1956: la $2, sym_1_1956
+.globl sym_1_1957
+sym_1_1957: la $2, sym_1_1957
+.globl sym_1_1958
+sym_1_1958: la $2, sym_1_1958
+.globl sym_1_1959
+sym_1_1959: la $2, sym_1_1959
+.globl sym_1_1960
+sym_1_1960: la $2, sym_1_1960
+.globl sym_1_1961
+sym_1_1961: la $2, sym_1_1961
+.globl sym_1_1962
+sym_1_1962: la $2, sym_1_1962
+.globl sym_1_1963
+sym_1_1963: la $2, sym_1_1963
+.globl sym_1_1964
+sym_1_1964: la $2, sym_1_1964
+.globl sym_1_1965
+sym_1_1965: la $2, sym_1_1965
+.globl sym_1_1966
+sym_1_1966: la $2, sym_1_1966
+.globl sym_1_1967
+sym_1_1967: la $2, sym_1_1967
+.globl sym_1_1968
+sym_1_1968: la $2, sym_1_1968
+.globl sym_1_1969
+sym_1_1969: la $2, sym_1_1969
+.globl sym_1_1970
+sym_1_1970: la $2, sym_1_1970
+.globl sym_1_1971
+sym_1_1971: la $2, sym_1_1971
+.globl sym_1_1972
+sym_1_1972: la $2, sym_1_1972
+.globl sym_1_1973
+sym_1_1973: la $2, sym_1_1973
+.globl sym_1_1974
+sym_1_1974: la $2, sym_1_1974
+.globl sym_1_1975
+sym_1_1975: la $2, sym_1_1975
+.globl sym_1_1976
+sym_1_1976: la $2, sym_1_1976
+.globl sym_1_1977
+sym_1_1977: la $2, sym_1_1977
+.globl sym_1_1978
+sym_1_1978: la $2, sym_1_1978
+.globl sym_1_1979
+sym_1_1979: la $2, sym_1_1979
+.globl sym_1_1980
+sym_1_1980: la $2, sym_1_1980
+.globl sym_1_1981
+sym_1_1981: la $2, sym_1_1981
+.globl sym_1_1982
+sym_1_1982: la $2, sym_1_1982
+.globl sym_1_1983
+sym_1_1983: la $2, sym_1_1983
+.globl sym_1_1984
+sym_1_1984: la $2, sym_1_1984
+.globl sym_1_1985
+sym_1_1985: la $2, sym_1_1985
+.globl sym_1_1986
+sym_1_1986: la $2, sym_1_1986
+.globl sym_1_1987
+sym_1_1987: la $2, sym_1_1987
+.globl sym_1_1988
+sym_1_1988: la $2, sym_1_1988
+.globl sym_1_1989
+sym_1_1989: la $2, sym_1_1989
+.globl sym_1_1990
+sym_1_1990: la $2, sym_1_1990
+.globl sym_1_1991
+sym_1_1991: la $2, sym_1_1991
+.globl sym_1_1992
+sym_1_1992: la $2, sym_1_1992
+.globl sym_1_1993
+sym_1_1993: la $2, sym_1_1993
+.globl sym_1_1994
+sym_1_1994: la $2, sym_1_1994
+.globl sym_1_1995
+sym_1_1995: la $2, sym_1_1995
+.globl sym_1_1996
+sym_1_1996: la $2, sym_1_1996
+.globl sym_1_1997
+sym_1_1997: la $2, sym_1_1997
+.globl sym_1_1998
+sym_1_1998: la $2, sym_1_1998
+.globl sym_1_1999
+sym_1_1999: la $2, sym_1_1999
+.globl sym_1_2000
+sym_1_2000: la $2, sym_1_2000
+.globl sym_1_2001
+sym_1_2001: la $2, sym_1_2001
+.globl sym_1_2002
+sym_1_2002: la $2, sym_1_2002
+.globl sym_1_2003
+sym_1_2003: la $2, sym_1_2003
+.globl sym_1_2004
+sym_1_2004: la $2, sym_1_2004
+.globl sym_1_2005
+sym_1_2005: la $2, sym_1_2005
+.globl sym_1_2006
+sym_1_2006: la $2, sym_1_2006
+.globl sym_1_2007
+sym_1_2007: la $2, sym_1_2007
+.globl sym_1_2008
+sym_1_2008: la $2, sym_1_2008
+.globl sym_1_2009
+sym_1_2009: la $2, sym_1_2009
+.globl sym_1_2010
+sym_1_2010: la $2, sym_1_2010
+.globl sym_1_2011
+sym_1_2011: la $2, sym_1_2011
+.globl sym_1_2012
+sym_1_2012: la $2, sym_1_2012
+.globl sym_1_2013
+sym_1_2013: la $2, sym_1_2013
+.globl sym_1_2014
+sym_1_2014: la $2, sym_1_2014
+.globl sym_1_2015
+sym_1_2015: la $2, sym_1_2015
+.globl sym_1_2016
+sym_1_2016: la $2, sym_1_2016
+.globl sym_1_2017
+sym_1_2017: la $2, sym_1_2017
+.globl sym_1_2018
+sym_1_2018: la $2, sym_1_2018
+.globl sym_1_2019
+sym_1_2019: la $2, sym_1_2019
+.globl sym_1_2020
+sym_1_2020: la $2, sym_1_2020
+.globl sym_1_2021
+sym_1_2021: la $2, sym_1_2021
+.globl sym_1_2022
+sym_1_2022: la $2, sym_1_2022
+.globl sym_1_2023
+sym_1_2023: la $2, sym_1_2023
+.globl sym_1_2024
+sym_1_2024: la $2, sym_1_2024
+.globl sym_1_2025
+sym_1_2025: la $2, sym_1_2025
+.globl sym_1_2026
+sym_1_2026: la $2, sym_1_2026
+.globl sym_1_2027
+sym_1_2027: la $2, sym_1_2027
+.globl sym_1_2028
+sym_1_2028: la $2, sym_1_2028
+.globl sym_1_2029
+sym_1_2029: la $2, sym_1_2029
+.globl sym_1_2030
+sym_1_2030: la $2, sym_1_2030
+.globl sym_1_2031
+sym_1_2031: la $2, sym_1_2031
+.globl sym_1_2032
+sym_1_2032: la $2, sym_1_2032
+.globl sym_1_2033
+sym_1_2033: la $2, sym_1_2033
+.globl sym_1_2034
+sym_1_2034: la $2, sym_1_2034
+.globl sym_1_2035
+sym_1_2035: la $2, sym_1_2035
+.globl sym_1_2036
+sym_1_2036: la $2, sym_1_2036
+.globl sym_1_2037
+sym_1_2037: la $2, sym_1_2037
+.globl sym_1_2038
+sym_1_2038: la $2, sym_1_2038
+.globl sym_1_2039
+sym_1_2039: la $2, sym_1_2039
+.globl sym_1_2040
+sym_1_2040: la $2, sym_1_2040
+.globl sym_1_2041
+sym_1_2041: la $2, sym_1_2041
+.globl sym_1_2042
+sym_1_2042: la $2, sym_1_2042
+.globl sym_1_2043
+sym_1_2043: la $2, sym_1_2043
+.globl sym_1_2044
+sym_1_2044: la $2, sym_1_2044
+.globl sym_1_2045
+sym_1_2045: la $2, sym_1_2045
+.globl sym_1_2046
+sym_1_2046: la $2, sym_1_2046
+.globl sym_1_2047
+sym_1_2047: la $2, sym_1_2047
+.globl sym_1_2048
+sym_1_2048: la $2, sym_1_2048
+.globl sym_1_2049
+sym_1_2049: la $2, sym_1_2049
+.globl sym_1_2050
+sym_1_2050: la $2, sym_1_2050
+.globl sym_1_2051
+sym_1_2051: la $2, sym_1_2051
+.globl sym_1_2052
+sym_1_2052: la $2, sym_1_2052
+.globl sym_1_2053
+sym_1_2053: la $2, sym_1_2053
+.globl sym_1_2054
+sym_1_2054: la $2, sym_1_2054
+.globl sym_1_2055
+sym_1_2055: la $2, sym_1_2055
+.globl sym_1_2056
+sym_1_2056: la $2, sym_1_2056
+.globl sym_1_2057
+sym_1_2057: la $2, sym_1_2057
+.globl sym_1_2058
+sym_1_2058: la $2, sym_1_2058
+.globl sym_1_2059
+sym_1_2059: la $2, sym_1_2059
+.globl sym_1_2060
+sym_1_2060: la $2, sym_1_2060
+.globl sym_1_2061
+sym_1_2061: la $2, sym_1_2061
+.globl sym_1_2062
+sym_1_2062: la $2, sym_1_2062
+.globl sym_1_2063
+sym_1_2063: la $2, sym_1_2063
+.globl sym_1_2064
+sym_1_2064: la $2, sym_1_2064
+.globl sym_1_2065
+sym_1_2065: la $2, sym_1_2065
+.globl sym_1_2066
+sym_1_2066: la $2, sym_1_2066
+.globl sym_1_2067
+sym_1_2067: la $2, sym_1_2067
+.globl sym_1_2068
+sym_1_2068: la $2, sym_1_2068
+.globl sym_1_2069
+sym_1_2069: la $2, sym_1_2069
+.globl sym_1_2070
+sym_1_2070: la $2, sym_1_2070
+.globl sym_1_2071
+sym_1_2071: la $2, sym_1_2071
+.globl sym_1_2072
+sym_1_2072: la $2, sym_1_2072
+.globl sym_1_2073
+sym_1_2073: la $2, sym_1_2073
+.globl sym_1_2074
+sym_1_2074: la $2, sym_1_2074
+.globl sym_1_2075
+sym_1_2075: la $2, sym_1_2075
+.globl sym_1_2076
+sym_1_2076: la $2, sym_1_2076
+.globl sym_1_2077
+sym_1_2077: la $2, sym_1_2077
+.globl sym_1_2078
+sym_1_2078: la $2, sym_1_2078
+.globl sym_1_2079
+sym_1_2079: la $2, sym_1_2079
+.globl sym_1_2080
+sym_1_2080: la $2, sym_1_2080
+.globl sym_1_2081
+sym_1_2081: la $2, sym_1_2081
+.globl sym_1_2082
+sym_1_2082: la $2, sym_1_2082
+.globl sym_1_2083
+sym_1_2083: la $2, sym_1_2083
+.globl sym_1_2084
+sym_1_2084: la $2, sym_1_2084
+.globl sym_1_2085
+sym_1_2085: la $2, sym_1_2085
+.globl sym_1_2086
+sym_1_2086: la $2, sym_1_2086
+.globl sym_1_2087
+sym_1_2087: la $2, sym_1_2087
+.globl sym_1_2088
+sym_1_2088: la $2, sym_1_2088
+.globl sym_1_2089
+sym_1_2089: la $2, sym_1_2089
+.globl sym_1_2090
+sym_1_2090: la $2, sym_1_2090
+.globl sym_1_2091
+sym_1_2091: la $2, sym_1_2091
+.globl sym_1_2092
+sym_1_2092: la $2, sym_1_2092
+.globl sym_1_2093
+sym_1_2093: la $2, sym_1_2093
+.globl sym_1_2094
+sym_1_2094: la $2, sym_1_2094
+.globl sym_1_2095
+sym_1_2095: la $2, sym_1_2095
+.globl sym_1_2096
+sym_1_2096: la $2, sym_1_2096
+.globl sym_1_2097
+sym_1_2097: la $2, sym_1_2097
+.globl sym_1_2098
+sym_1_2098: la $2, sym_1_2098
+.globl sym_1_2099
+sym_1_2099: la $2, sym_1_2099
+.globl sym_1_2100
+sym_1_2100: la $2, sym_1_2100
+.globl sym_1_2101
+sym_1_2101: la $2, sym_1_2101
+.globl sym_1_2102
+sym_1_2102: la $2, sym_1_2102
+.globl sym_1_2103
+sym_1_2103: la $2, sym_1_2103
+.globl sym_1_2104
+sym_1_2104: la $2, sym_1_2104
+.globl sym_1_2105
+sym_1_2105: la $2, sym_1_2105
+.globl sym_1_2106
+sym_1_2106: la $2, sym_1_2106
+.globl sym_1_2107
+sym_1_2107: la $2, sym_1_2107
+.globl sym_1_2108
+sym_1_2108: la $2, sym_1_2108
+.globl sym_1_2109
+sym_1_2109: la $2, sym_1_2109
+.globl sym_1_2110
+sym_1_2110: la $2, sym_1_2110
+.globl sym_1_2111
+sym_1_2111: la $2, sym_1_2111
+.globl sym_1_2112
+sym_1_2112: la $2, sym_1_2112
+.globl sym_1_2113
+sym_1_2113: la $2, sym_1_2113
+.globl sym_1_2114
+sym_1_2114: la $2, sym_1_2114
+.globl sym_1_2115
+sym_1_2115: la $2, sym_1_2115
+.globl sym_1_2116
+sym_1_2116: la $2, sym_1_2116
+.globl sym_1_2117
+sym_1_2117: la $2, sym_1_2117
+.globl sym_1_2118
+sym_1_2118: la $2, sym_1_2118
+.globl sym_1_2119
+sym_1_2119: la $2, sym_1_2119
+.globl sym_1_2120
+sym_1_2120: la $2, sym_1_2120
+.globl sym_1_2121
+sym_1_2121: la $2, sym_1_2121
+.globl sym_1_2122
+sym_1_2122: la $2, sym_1_2122
+.globl sym_1_2123
+sym_1_2123: la $2, sym_1_2123
+.globl sym_1_2124
+sym_1_2124: la $2, sym_1_2124
+.globl sym_1_2125
+sym_1_2125: la $2, sym_1_2125
+.globl sym_1_2126
+sym_1_2126: la $2, sym_1_2126
+.globl sym_1_2127
+sym_1_2127: la $2, sym_1_2127
+.globl sym_1_2128
+sym_1_2128: la $2, sym_1_2128
+.globl sym_1_2129
+sym_1_2129: la $2, sym_1_2129
+.globl sym_1_2130
+sym_1_2130: la $2, sym_1_2130
+.globl sym_1_2131
+sym_1_2131: la $2, sym_1_2131
+.globl sym_1_2132
+sym_1_2132: la $2, sym_1_2132
+.globl sym_1_2133
+sym_1_2133: la $2, sym_1_2133
+.globl sym_1_2134
+sym_1_2134: la $2, sym_1_2134
+.globl sym_1_2135
+sym_1_2135: la $2, sym_1_2135
+.globl sym_1_2136
+sym_1_2136: la $2, sym_1_2136
+.globl sym_1_2137
+sym_1_2137: la $2, sym_1_2137
+.globl sym_1_2138
+sym_1_2138: la $2, sym_1_2138
+.globl sym_1_2139
+sym_1_2139: la $2, sym_1_2139
+.globl sym_1_2140
+sym_1_2140: la $2, sym_1_2140
+.globl sym_1_2141
+sym_1_2141: la $2, sym_1_2141
+.globl sym_1_2142
+sym_1_2142: la $2, sym_1_2142
+.globl sym_1_2143
+sym_1_2143: la $2, sym_1_2143
+.globl sym_1_2144
+sym_1_2144: la $2, sym_1_2144
+.globl sym_1_2145
+sym_1_2145: la $2, sym_1_2145
+.globl sym_1_2146
+sym_1_2146: la $2, sym_1_2146
+.globl sym_1_2147
+sym_1_2147: la $2, sym_1_2147
+.globl sym_1_2148
+sym_1_2148: la $2, sym_1_2148
+.globl sym_1_2149
+sym_1_2149: la $2, sym_1_2149
+.globl sym_1_2150
+sym_1_2150: la $2, sym_1_2150
+.globl sym_1_2151
+sym_1_2151: la $2, sym_1_2151
+.globl sym_1_2152
+sym_1_2152: la $2, sym_1_2152
+.globl sym_1_2153
+sym_1_2153: la $2, sym_1_2153
+.globl sym_1_2154
+sym_1_2154: la $2, sym_1_2154
+.globl sym_1_2155
+sym_1_2155: la $2, sym_1_2155
+.globl sym_1_2156
+sym_1_2156: la $2, sym_1_2156
+.globl sym_1_2157
+sym_1_2157: la $2, sym_1_2157
+.globl sym_1_2158
+sym_1_2158: la $2, sym_1_2158
+.globl sym_1_2159
+sym_1_2159: la $2, sym_1_2159
+.globl sym_1_2160
+sym_1_2160: la $2, sym_1_2160
+.globl sym_1_2161
+sym_1_2161: la $2, sym_1_2161
+.globl sym_1_2162
+sym_1_2162: la $2, sym_1_2162
+.globl sym_1_2163
+sym_1_2163: la $2, sym_1_2163
+.globl sym_1_2164
+sym_1_2164: la $2, sym_1_2164
+.globl sym_1_2165
+sym_1_2165: la $2, sym_1_2165
+.globl sym_1_2166
+sym_1_2166: la $2, sym_1_2166
+.globl sym_1_2167
+sym_1_2167: la $2, sym_1_2167
+.globl sym_1_2168
+sym_1_2168: la $2, sym_1_2168
+.globl sym_1_2169
+sym_1_2169: la $2, sym_1_2169
+.globl sym_1_2170
+sym_1_2170: la $2, sym_1_2170
+.globl sym_1_2171
+sym_1_2171: la $2, sym_1_2171
+.globl sym_1_2172
+sym_1_2172: la $2, sym_1_2172
+.globl sym_1_2173
+sym_1_2173: la $2, sym_1_2173
+.globl sym_1_2174
+sym_1_2174: la $2, sym_1_2174
+.globl sym_1_2175
+sym_1_2175: la $2, sym_1_2175
+.globl sym_1_2176
+sym_1_2176: la $2, sym_1_2176
+.globl sym_1_2177
+sym_1_2177: la $2, sym_1_2177
+.globl sym_1_2178
+sym_1_2178: la $2, sym_1_2178
+.globl sym_1_2179
+sym_1_2179: la $2, sym_1_2179
+.globl sym_1_2180
+sym_1_2180: la $2, sym_1_2180
+.globl sym_1_2181
+sym_1_2181: la $2, sym_1_2181
+.globl sym_1_2182
+sym_1_2182: la $2, sym_1_2182
+.globl sym_1_2183
+sym_1_2183: la $2, sym_1_2183
+.globl sym_1_2184
+sym_1_2184: la $2, sym_1_2184
+.globl sym_1_2185
+sym_1_2185: la $2, sym_1_2185
+.globl sym_1_2186
+sym_1_2186: la $2, sym_1_2186
+.globl sym_1_2187
+sym_1_2187: la $2, sym_1_2187
+.globl sym_1_2188
+sym_1_2188: la $2, sym_1_2188
+.globl sym_1_2189
+sym_1_2189: la $2, sym_1_2189
+.globl sym_1_2190
+sym_1_2190: la $2, sym_1_2190
+.globl sym_1_2191
+sym_1_2191: la $2, sym_1_2191
+.globl sym_1_2192
+sym_1_2192: la $2, sym_1_2192
+.globl sym_1_2193
+sym_1_2193: la $2, sym_1_2193
+.globl sym_1_2194
+sym_1_2194: la $2, sym_1_2194
+.globl sym_1_2195
+sym_1_2195: la $2, sym_1_2195
+.globl sym_1_2196
+sym_1_2196: la $2, sym_1_2196
+.globl sym_1_2197
+sym_1_2197: la $2, sym_1_2197
+.globl sym_1_2198
+sym_1_2198: la $2, sym_1_2198
+.globl sym_1_2199
+sym_1_2199: la $2, sym_1_2199
+.globl sym_1_2200
+sym_1_2200: la $2, sym_1_2200
+.globl sym_1_2201
+sym_1_2201: la $2, sym_1_2201
+.globl sym_1_2202
+sym_1_2202: la $2, sym_1_2202
+.globl sym_1_2203
+sym_1_2203: la $2, sym_1_2203
+.globl sym_1_2204
+sym_1_2204: la $2, sym_1_2204
+.globl sym_1_2205
+sym_1_2205: la $2, sym_1_2205
+.globl sym_1_2206
+sym_1_2206: la $2, sym_1_2206
+.globl sym_1_2207
+sym_1_2207: la $2, sym_1_2207
+.globl sym_1_2208
+sym_1_2208: la $2, sym_1_2208
+.globl sym_1_2209
+sym_1_2209: la $2, sym_1_2209
+.globl sym_1_2210
+sym_1_2210: la $2, sym_1_2210
+.globl sym_1_2211
+sym_1_2211: la $2, sym_1_2211
+.globl sym_1_2212
+sym_1_2212: la $2, sym_1_2212
+.globl sym_1_2213
+sym_1_2213: la $2, sym_1_2213
+.globl sym_1_2214
+sym_1_2214: la $2, sym_1_2214
+.globl sym_1_2215
+sym_1_2215: la $2, sym_1_2215
+.globl sym_1_2216
+sym_1_2216: la $2, sym_1_2216
+.globl sym_1_2217
+sym_1_2217: la $2, sym_1_2217
+.globl sym_1_2218
+sym_1_2218: la $2, sym_1_2218
+.globl sym_1_2219
+sym_1_2219: la $2, sym_1_2219
+.globl sym_1_2220
+sym_1_2220: la $2, sym_1_2220
+.globl sym_1_2221
+sym_1_2221: la $2, sym_1_2221
+.globl sym_1_2222
+sym_1_2222: la $2, sym_1_2222
+.globl sym_1_2223
+sym_1_2223: la $2, sym_1_2223
+.globl sym_1_2224
+sym_1_2224: la $2, sym_1_2224
+.globl sym_1_2225
+sym_1_2225: la $2, sym_1_2225
+.globl sym_1_2226
+sym_1_2226: la $2, sym_1_2226
+.globl sym_1_2227
+sym_1_2227: la $2, sym_1_2227
+.globl sym_1_2228
+sym_1_2228: la $2, sym_1_2228
+.globl sym_1_2229
+sym_1_2229: la $2, sym_1_2229
+.globl sym_1_2230
+sym_1_2230: la $2, sym_1_2230
+.globl sym_1_2231
+sym_1_2231: la $2, sym_1_2231
+.globl sym_1_2232
+sym_1_2232: la $2, sym_1_2232
+.globl sym_1_2233
+sym_1_2233: la $2, sym_1_2233
+.globl sym_1_2234
+sym_1_2234: la $2, sym_1_2234
+.globl sym_1_2235
+sym_1_2235: la $2, sym_1_2235
+.globl sym_1_2236
+sym_1_2236: la $2, sym_1_2236
+.globl sym_1_2237
+sym_1_2237: la $2, sym_1_2237
+.globl sym_1_2238
+sym_1_2238: la $2, sym_1_2238
+.globl sym_1_2239
+sym_1_2239: la $2, sym_1_2239
+.globl sym_1_2240
+sym_1_2240: la $2, sym_1_2240
+.globl sym_1_2241
+sym_1_2241: la $2, sym_1_2241
+.globl sym_1_2242
+sym_1_2242: la $2, sym_1_2242
+.globl sym_1_2243
+sym_1_2243: la $2, sym_1_2243
+.globl sym_1_2244
+sym_1_2244: la $2, sym_1_2244
+.globl sym_1_2245
+sym_1_2245: la $2, sym_1_2245
+.globl sym_1_2246
+sym_1_2246: la $2, sym_1_2246
+.globl sym_1_2247
+sym_1_2247: la $2, sym_1_2247
+.globl sym_1_2248
+sym_1_2248: la $2, sym_1_2248
+.globl sym_1_2249
+sym_1_2249: la $2, sym_1_2249
+.globl sym_1_2250
+sym_1_2250: la $2, sym_1_2250
+.globl sym_1_2251
+sym_1_2251: la $2, sym_1_2251
+.globl sym_1_2252
+sym_1_2252: la $2, sym_1_2252
+.globl sym_1_2253
+sym_1_2253: la $2, sym_1_2253
+.globl sym_1_2254
+sym_1_2254: la $2, sym_1_2254
+.globl sym_1_2255
+sym_1_2255: la $2, sym_1_2255
+.globl sym_1_2256
+sym_1_2256: la $2, sym_1_2256
+.globl sym_1_2257
+sym_1_2257: la $2, sym_1_2257
+.globl sym_1_2258
+sym_1_2258: la $2, sym_1_2258
+.globl sym_1_2259
+sym_1_2259: la $2, sym_1_2259
+.globl sym_1_2260
+sym_1_2260: la $2, sym_1_2260
+.globl sym_1_2261
+sym_1_2261: la $2, sym_1_2261
+.globl sym_1_2262
+sym_1_2262: la $2, sym_1_2262
+.globl sym_1_2263
+sym_1_2263: la $2, sym_1_2263
+.globl sym_1_2264
+sym_1_2264: la $2, sym_1_2264
+.globl sym_1_2265
+sym_1_2265: la $2, sym_1_2265
+.globl sym_1_2266
+sym_1_2266: la $2, sym_1_2266
+.globl sym_1_2267
+sym_1_2267: la $2, sym_1_2267
+.globl sym_1_2268
+sym_1_2268: la $2, sym_1_2268
+.globl sym_1_2269
+sym_1_2269: la $2, sym_1_2269
+.globl sym_1_2270
+sym_1_2270: la $2, sym_1_2270
+.globl sym_1_2271
+sym_1_2271: la $2, sym_1_2271
+.globl sym_1_2272
+sym_1_2272: la $2, sym_1_2272
+.globl sym_1_2273
+sym_1_2273: la $2, sym_1_2273
+.globl sym_1_2274
+sym_1_2274: la $2, sym_1_2274
+.globl sym_1_2275
+sym_1_2275: la $2, sym_1_2275
+.globl sym_1_2276
+sym_1_2276: la $2, sym_1_2276
+.globl sym_1_2277
+sym_1_2277: la $2, sym_1_2277
+.globl sym_1_2278
+sym_1_2278: la $2, sym_1_2278
+.globl sym_1_2279
+sym_1_2279: la $2, sym_1_2279
+.globl sym_1_2280
+sym_1_2280: la $2, sym_1_2280
+.globl sym_1_2281
+sym_1_2281: la $2, sym_1_2281
+.globl sym_1_2282
+sym_1_2282: la $2, sym_1_2282
+.globl sym_1_2283
+sym_1_2283: la $2, sym_1_2283
+.globl sym_1_2284
+sym_1_2284: la $2, sym_1_2284
+.globl sym_1_2285
+sym_1_2285: la $2, sym_1_2285
+.globl sym_1_2286
+sym_1_2286: la $2, sym_1_2286
+.globl sym_1_2287
+sym_1_2287: la $2, sym_1_2287
+.globl sym_1_2288
+sym_1_2288: la $2, sym_1_2288
+.globl sym_1_2289
+sym_1_2289: la $2, sym_1_2289
+.globl sym_1_2290
+sym_1_2290: la $2, sym_1_2290
+.globl sym_1_2291
+sym_1_2291: la $2, sym_1_2291
+.globl sym_1_2292
+sym_1_2292: la $2, sym_1_2292
+.globl sym_1_2293
+sym_1_2293: la $2, sym_1_2293
+.globl sym_1_2294
+sym_1_2294: la $2, sym_1_2294
+.globl sym_1_2295
+sym_1_2295: la $2, sym_1_2295
+.globl sym_1_2296
+sym_1_2296: la $2, sym_1_2296
+.globl sym_1_2297
+sym_1_2297: la $2, sym_1_2297
+.globl sym_1_2298
+sym_1_2298: la $2, sym_1_2298
+.globl sym_1_2299
+sym_1_2299: la $2, sym_1_2299
+.globl sym_1_2300
+sym_1_2300: la $2, sym_1_2300
+.globl sym_1_2301
+sym_1_2301: la $2, sym_1_2301
+.globl sym_1_2302
+sym_1_2302: la $2, sym_1_2302
+.globl sym_1_2303
+sym_1_2303: la $2, sym_1_2303
+.globl sym_1_2304
+sym_1_2304: la $2, sym_1_2304
+.globl sym_1_2305
+sym_1_2305: la $2, sym_1_2305
+.globl sym_1_2306
+sym_1_2306: la $2, sym_1_2306
+.globl sym_1_2307
+sym_1_2307: la $2, sym_1_2307
+.globl sym_1_2308
+sym_1_2308: la $2, sym_1_2308
+.globl sym_1_2309
+sym_1_2309: la $2, sym_1_2309
+.globl sym_1_2310
+sym_1_2310: la $2, sym_1_2310
+.globl sym_1_2311
+sym_1_2311: la $2, sym_1_2311
+.globl sym_1_2312
+sym_1_2312: la $2, sym_1_2312
+.globl sym_1_2313
+sym_1_2313: la $2, sym_1_2313
+.globl sym_1_2314
+sym_1_2314: la $2, sym_1_2314
+.globl sym_1_2315
+sym_1_2315: la $2, sym_1_2315
+.globl sym_1_2316
+sym_1_2316: la $2, sym_1_2316
+.globl sym_1_2317
+sym_1_2317: la $2, sym_1_2317
+.globl sym_1_2318
+sym_1_2318: la $2, sym_1_2318
+.globl sym_1_2319
+sym_1_2319: la $2, sym_1_2319
+.globl sym_1_2320
+sym_1_2320: la $2, sym_1_2320
+.globl sym_1_2321
+sym_1_2321: la $2, sym_1_2321
+.globl sym_1_2322
+sym_1_2322: la $2, sym_1_2322
+.globl sym_1_2323
+sym_1_2323: la $2, sym_1_2323
+.globl sym_1_2324
+sym_1_2324: la $2, sym_1_2324
+.globl sym_1_2325
+sym_1_2325: la $2, sym_1_2325
+.globl sym_1_2326
+sym_1_2326: la $2, sym_1_2326
+.globl sym_1_2327
+sym_1_2327: la $2, sym_1_2327
+.globl sym_1_2328
+sym_1_2328: la $2, sym_1_2328
+.globl sym_1_2329
+sym_1_2329: la $2, sym_1_2329
+.globl sym_1_2330
+sym_1_2330: la $2, sym_1_2330
+.globl sym_1_2331
+sym_1_2331: la $2, sym_1_2331
+.globl sym_1_2332
+sym_1_2332: la $2, sym_1_2332
+.globl sym_1_2333
+sym_1_2333: la $2, sym_1_2333
+.globl sym_1_2334
+sym_1_2334: la $2, sym_1_2334
+.globl sym_1_2335
+sym_1_2335: la $2, sym_1_2335
+.globl sym_1_2336
+sym_1_2336: la $2, sym_1_2336
+.globl sym_1_2337
+sym_1_2337: la $2, sym_1_2337
+.globl sym_1_2338
+sym_1_2338: la $2, sym_1_2338
+.globl sym_1_2339
+sym_1_2339: la $2, sym_1_2339
+.globl sym_1_2340
+sym_1_2340: la $2, sym_1_2340
+.globl sym_1_2341
+sym_1_2341: la $2, sym_1_2341
+.globl sym_1_2342
+sym_1_2342: la $2, sym_1_2342
+.globl sym_1_2343
+sym_1_2343: la $2, sym_1_2343
+.globl sym_1_2344
+sym_1_2344: la $2, sym_1_2344
+.globl sym_1_2345
+sym_1_2345: la $2, sym_1_2345
+.globl sym_1_2346
+sym_1_2346: la $2, sym_1_2346
+.globl sym_1_2347
+sym_1_2347: la $2, sym_1_2347
+.globl sym_1_2348
+sym_1_2348: la $2, sym_1_2348
+.globl sym_1_2349
+sym_1_2349: la $2, sym_1_2349
+.globl sym_1_2350
+sym_1_2350: la $2, sym_1_2350
+.globl sym_1_2351
+sym_1_2351: la $2, sym_1_2351
+.globl sym_1_2352
+sym_1_2352: la $2, sym_1_2352
+.globl sym_1_2353
+sym_1_2353: la $2, sym_1_2353
+.globl sym_1_2354
+sym_1_2354: la $2, sym_1_2354
+.globl sym_1_2355
+sym_1_2355: la $2, sym_1_2355
+.globl sym_1_2356
+sym_1_2356: la $2, sym_1_2356
+.globl sym_1_2357
+sym_1_2357: la $2, sym_1_2357
+.globl sym_1_2358
+sym_1_2358: la $2, sym_1_2358
+.globl sym_1_2359
+sym_1_2359: la $2, sym_1_2359
+.globl sym_1_2360
+sym_1_2360: la $2, sym_1_2360
+.globl sym_1_2361
+sym_1_2361: la $2, sym_1_2361
+.globl sym_1_2362
+sym_1_2362: la $2, sym_1_2362
+.globl sym_1_2363
+sym_1_2363: la $2, sym_1_2363
+.globl sym_1_2364
+sym_1_2364: la $2, sym_1_2364
+.globl sym_1_2365
+sym_1_2365: la $2, sym_1_2365
+.globl sym_1_2366
+sym_1_2366: la $2, sym_1_2366
+.globl sym_1_2367
+sym_1_2367: la $2, sym_1_2367
+.globl sym_1_2368
+sym_1_2368: la $2, sym_1_2368
+.globl sym_1_2369
+sym_1_2369: la $2, sym_1_2369
+.globl sym_1_2370
+sym_1_2370: la $2, sym_1_2370
+.globl sym_1_2371
+sym_1_2371: la $2, sym_1_2371
+.globl sym_1_2372
+sym_1_2372: la $2, sym_1_2372
+.globl sym_1_2373
+sym_1_2373: la $2, sym_1_2373
+.globl sym_1_2374
+sym_1_2374: la $2, sym_1_2374
+.globl sym_1_2375
+sym_1_2375: la $2, sym_1_2375
+.globl sym_1_2376
+sym_1_2376: la $2, sym_1_2376
+.globl sym_1_2377
+sym_1_2377: la $2, sym_1_2377
+.globl sym_1_2378
+sym_1_2378: la $2, sym_1_2378
+.globl sym_1_2379
+sym_1_2379: la $2, sym_1_2379
+.globl sym_1_2380
+sym_1_2380: la $2, sym_1_2380
+.globl sym_1_2381
+sym_1_2381: la $2, sym_1_2381
+.globl sym_1_2382
+sym_1_2382: la $2, sym_1_2382
+.globl sym_1_2383
+sym_1_2383: la $2, sym_1_2383
+.globl sym_1_2384
+sym_1_2384: la $2, sym_1_2384
+.globl sym_1_2385
+sym_1_2385: la $2, sym_1_2385
+.globl sym_1_2386
+sym_1_2386: la $2, sym_1_2386
+.globl sym_1_2387
+sym_1_2387: la $2, sym_1_2387
+.globl sym_1_2388
+sym_1_2388: la $2, sym_1_2388
+.globl sym_1_2389
+sym_1_2389: la $2, sym_1_2389
+.globl sym_1_2390
+sym_1_2390: la $2, sym_1_2390
+.globl sym_1_2391
+sym_1_2391: la $2, sym_1_2391
+.globl sym_1_2392
+sym_1_2392: la $2, sym_1_2392
+.globl sym_1_2393
+sym_1_2393: la $2, sym_1_2393
+.globl sym_1_2394
+sym_1_2394: la $2, sym_1_2394
+.globl sym_1_2395
+sym_1_2395: la $2, sym_1_2395
+.globl sym_1_2396
+sym_1_2396: la $2, sym_1_2396
+.globl sym_1_2397
+sym_1_2397: la $2, sym_1_2397
+.globl sym_1_2398
+sym_1_2398: la $2, sym_1_2398
+.globl sym_1_2399
+sym_1_2399: la $2, sym_1_2399
+.globl sym_1_2400
+sym_1_2400: la $2, sym_1_2400
+.globl sym_1_2401
+sym_1_2401: la $2, sym_1_2401
+.globl sym_1_2402
+sym_1_2402: la $2, sym_1_2402
+.globl sym_1_2403
+sym_1_2403: la $2, sym_1_2403
+.globl sym_1_2404
+sym_1_2404: la $2, sym_1_2404
+.globl sym_1_2405
+sym_1_2405: la $2, sym_1_2405
+.globl sym_1_2406
+sym_1_2406: la $2, sym_1_2406
+.globl sym_1_2407
+sym_1_2407: la $2, sym_1_2407
+.globl sym_1_2408
+sym_1_2408: la $2, sym_1_2408
+.globl sym_1_2409
+sym_1_2409: la $2, sym_1_2409
+.globl sym_1_2410
+sym_1_2410: la $2, sym_1_2410
+.globl sym_1_2411
+sym_1_2411: la $2, sym_1_2411
+.globl sym_1_2412
+sym_1_2412: la $2, sym_1_2412
+.globl sym_1_2413
+sym_1_2413: la $2, sym_1_2413
+.globl sym_1_2414
+sym_1_2414: la $2, sym_1_2414
+.globl sym_1_2415
+sym_1_2415: la $2, sym_1_2415
+.globl sym_1_2416
+sym_1_2416: la $2, sym_1_2416
+.globl sym_1_2417
+sym_1_2417: la $2, sym_1_2417
+.globl sym_1_2418
+sym_1_2418: la $2, sym_1_2418
+.globl sym_1_2419
+sym_1_2419: la $2, sym_1_2419
+.globl sym_1_2420
+sym_1_2420: la $2, sym_1_2420
+.globl sym_1_2421
+sym_1_2421: la $2, sym_1_2421
+.globl sym_1_2422
+sym_1_2422: la $2, sym_1_2422
+.globl sym_1_2423
+sym_1_2423: la $2, sym_1_2423
+.globl sym_1_2424
+sym_1_2424: la $2, sym_1_2424
+.globl sym_1_2425
+sym_1_2425: la $2, sym_1_2425
+.globl sym_1_2426
+sym_1_2426: la $2, sym_1_2426
+.globl sym_1_2427
+sym_1_2427: la $2, sym_1_2427
+.globl sym_1_2428
+sym_1_2428: la $2, sym_1_2428
+.globl sym_1_2429
+sym_1_2429: la $2, sym_1_2429
+.globl sym_1_2430
+sym_1_2430: la $2, sym_1_2430
+.globl sym_1_2431
+sym_1_2431: la $2, sym_1_2431
+.globl sym_1_2432
+sym_1_2432: la $2, sym_1_2432
+.globl sym_1_2433
+sym_1_2433: la $2, sym_1_2433
+.globl sym_1_2434
+sym_1_2434: la $2, sym_1_2434
+.globl sym_1_2435
+sym_1_2435: la $2, sym_1_2435
+.globl sym_1_2436
+sym_1_2436: la $2, sym_1_2436
+.globl sym_1_2437
+sym_1_2437: la $2, sym_1_2437
+.globl sym_1_2438
+sym_1_2438: la $2, sym_1_2438
+.globl sym_1_2439
+sym_1_2439: la $2, sym_1_2439
+.globl sym_1_2440
+sym_1_2440: la $2, sym_1_2440
+.globl sym_1_2441
+sym_1_2441: la $2, sym_1_2441
+.globl sym_1_2442
+sym_1_2442: la $2, sym_1_2442
+.globl sym_1_2443
+sym_1_2443: la $2, sym_1_2443
+.globl sym_1_2444
+sym_1_2444: la $2, sym_1_2444
+.globl sym_1_2445
+sym_1_2445: la $2, sym_1_2445
+.globl sym_1_2446
+sym_1_2446: la $2, sym_1_2446
+.globl sym_1_2447
+sym_1_2447: la $2, sym_1_2447
+.globl sym_1_2448
+sym_1_2448: la $2, sym_1_2448
+.globl sym_1_2449
+sym_1_2449: la $2, sym_1_2449
+.globl sym_1_2450
+sym_1_2450: la $2, sym_1_2450
+.globl sym_1_2451
+sym_1_2451: la $2, sym_1_2451
+.globl sym_1_2452
+sym_1_2452: la $2, sym_1_2452
+.globl sym_1_2453
+sym_1_2453: la $2, sym_1_2453
+.globl sym_1_2454
+sym_1_2454: la $2, sym_1_2454
+.globl sym_1_2455
+sym_1_2455: la $2, sym_1_2455
+.globl sym_1_2456
+sym_1_2456: la $2, sym_1_2456
+.globl sym_1_2457
+sym_1_2457: la $2, sym_1_2457
+.globl sym_1_2458
+sym_1_2458: la $2, sym_1_2458
+.globl sym_1_2459
+sym_1_2459: la $2, sym_1_2459
+.globl sym_1_2460
+sym_1_2460: la $2, sym_1_2460
+.globl sym_1_2461
+sym_1_2461: la $2, sym_1_2461
+.globl sym_1_2462
+sym_1_2462: la $2, sym_1_2462
+.globl sym_1_2463
+sym_1_2463: la $2, sym_1_2463
+.globl sym_1_2464
+sym_1_2464: la $2, sym_1_2464
+.globl sym_1_2465
+sym_1_2465: la $2, sym_1_2465
+.globl sym_1_2466
+sym_1_2466: la $2, sym_1_2466
+.globl sym_1_2467
+sym_1_2467: la $2, sym_1_2467
+.globl sym_1_2468
+sym_1_2468: la $2, sym_1_2468
+.globl sym_1_2469
+sym_1_2469: la $2, sym_1_2469
+.globl sym_1_2470
+sym_1_2470: la $2, sym_1_2470
+.globl sym_1_2471
+sym_1_2471: la $2, sym_1_2471
+.globl sym_1_2472
+sym_1_2472: la $2, sym_1_2472
+.globl sym_1_2473
+sym_1_2473: la $2, sym_1_2473
+.globl sym_1_2474
+sym_1_2474: la $2, sym_1_2474
+.globl sym_1_2475
+sym_1_2475: la $2, sym_1_2475
+.globl sym_1_2476
+sym_1_2476: la $2, sym_1_2476
+.globl sym_1_2477
+sym_1_2477: la $2, sym_1_2477
+.globl sym_1_2478
+sym_1_2478: la $2, sym_1_2478
+.globl sym_1_2479
+sym_1_2479: la $2, sym_1_2479
+.globl sym_1_2480
+sym_1_2480: la $2, sym_1_2480
+.globl sym_1_2481
+sym_1_2481: la $2, sym_1_2481
+.globl sym_1_2482
+sym_1_2482: la $2, sym_1_2482
+.globl sym_1_2483
+sym_1_2483: la $2, sym_1_2483
+.globl sym_1_2484
+sym_1_2484: la $2, sym_1_2484
+.globl sym_1_2485
+sym_1_2485: la $2, sym_1_2485
+.globl sym_1_2486
+sym_1_2486: la $2, sym_1_2486
+.globl sym_1_2487
+sym_1_2487: la $2, sym_1_2487
+.globl sym_1_2488
+sym_1_2488: la $2, sym_1_2488
+.globl sym_1_2489
+sym_1_2489: la $2, sym_1_2489
+.globl sym_1_2490
+sym_1_2490: la $2, sym_1_2490
+.globl sym_1_2491
+sym_1_2491: la $2, sym_1_2491
+.globl sym_1_2492
+sym_1_2492: la $2, sym_1_2492
+.globl sym_1_2493
+sym_1_2493: la $2, sym_1_2493
+.globl sym_1_2494
+sym_1_2494: la $2, sym_1_2494
+.globl sym_1_2495
+sym_1_2495: la $2, sym_1_2495
+.globl sym_1_2496
+sym_1_2496: la $2, sym_1_2496
+.globl sym_1_2497
+sym_1_2497: la $2, sym_1_2497
+.globl sym_1_2498
+sym_1_2498: la $2, sym_1_2498
+.globl sym_1_2499
+sym_1_2499: la $2, sym_1_2499
+.globl sym_1_2500
+sym_1_2500: la $2, sym_1_2500
+.globl sym_1_2501
+sym_1_2501: la $2, sym_1_2501
+.globl sym_1_2502
+sym_1_2502: la $2, sym_1_2502
+.globl sym_1_2503
+sym_1_2503: la $2, sym_1_2503
+.globl sym_1_2504
+sym_1_2504: la $2, sym_1_2504
+.globl sym_1_2505
+sym_1_2505: la $2, sym_1_2505
+.globl sym_1_2506
+sym_1_2506: la $2, sym_1_2506
+.globl sym_1_2507
+sym_1_2507: la $2, sym_1_2507
+.globl sym_1_2508
+sym_1_2508: la $2, sym_1_2508
+.globl sym_1_2509
+sym_1_2509: la $2, sym_1_2509
+.globl sym_1_2510
+sym_1_2510: la $2, sym_1_2510
+.globl sym_1_2511
+sym_1_2511: la $2, sym_1_2511
+.globl sym_1_2512
+sym_1_2512: la $2, sym_1_2512
+.globl sym_1_2513
+sym_1_2513: la $2, sym_1_2513
+.globl sym_1_2514
+sym_1_2514: la $2, sym_1_2514
+.globl sym_1_2515
+sym_1_2515: la $2, sym_1_2515
+.globl sym_1_2516
+sym_1_2516: la $2, sym_1_2516
+.globl sym_1_2517
+sym_1_2517: la $2, sym_1_2517
+.globl sym_1_2518
+sym_1_2518: la $2, sym_1_2518
+.globl sym_1_2519
+sym_1_2519: la $2, sym_1_2519
+.globl sym_1_2520
+sym_1_2520: la $2, sym_1_2520
+.globl sym_1_2521
+sym_1_2521: la $2, sym_1_2521
+.globl sym_1_2522
+sym_1_2522: la $2, sym_1_2522
+.globl sym_1_2523
+sym_1_2523: la $2, sym_1_2523
+.globl sym_1_2524
+sym_1_2524: la $2, sym_1_2524
+.globl sym_1_2525
+sym_1_2525: la $2, sym_1_2525
+.globl sym_1_2526
+sym_1_2526: la $2, sym_1_2526
+.globl sym_1_2527
+sym_1_2527: la $2, sym_1_2527
+.globl sym_1_2528
+sym_1_2528: la $2, sym_1_2528
+.globl sym_1_2529
+sym_1_2529: la $2, sym_1_2529
+.globl sym_1_2530
+sym_1_2530: la $2, sym_1_2530
+.globl sym_1_2531
+sym_1_2531: la $2, sym_1_2531
+.globl sym_1_2532
+sym_1_2532: la $2, sym_1_2532
+.globl sym_1_2533
+sym_1_2533: la $2, sym_1_2533
+.globl sym_1_2534
+sym_1_2534: la $2, sym_1_2534
+.globl sym_1_2535
+sym_1_2535: la $2, sym_1_2535
+.globl sym_1_2536
+sym_1_2536: la $2, sym_1_2536
+.globl sym_1_2537
+sym_1_2537: la $2, sym_1_2537
+.globl sym_1_2538
+sym_1_2538: la $2, sym_1_2538
+.globl sym_1_2539
+sym_1_2539: la $2, sym_1_2539
+.globl sym_1_2540
+sym_1_2540: la $2, sym_1_2540
+.globl sym_1_2541
+sym_1_2541: la $2, sym_1_2541
+.globl sym_1_2542
+sym_1_2542: la $2, sym_1_2542
+.globl sym_1_2543
+sym_1_2543: la $2, sym_1_2543
+.globl sym_1_2544
+sym_1_2544: la $2, sym_1_2544
+.globl sym_1_2545
+sym_1_2545: la $2, sym_1_2545
+.globl sym_1_2546
+sym_1_2546: la $2, sym_1_2546
+.globl sym_1_2547
+sym_1_2547: la $2, sym_1_2547
+.globl sym_1_2548
+sym_1_2548: la $2, sym_1_2548
+.globl sym_1_2549
+sym_1_2549: la $2, sym_1_2549
+.globl sym_1_2550
+sym_1_2550: la $2, sym_1_2550
+.globl sym_1_2551
+sym_1_2551: la $2, sym_1_2551
+.globl sym_1_2552
+sym_1_2552: la $2, sym_1_2552
+.globl sym_1_2553
+sym_1_2553: la $2, sym_1_2553
+.globl sym_1_2554
+sym_1_2554: la $2, sym_1_2554
+.globl sym_1_2555
+sym_1_2555: la $2, sym_1_2555
+.globl sym_1_2556
+sym_1_2556: la $2, sym_1_2556
+.globl sym_1_2557
+sym_1_2557: la $2, sym_1_2557
+.globl sym_1_2558
+sym_1_2558: la $2, sym_1_2558
+.globl sym_1_2559
+sym_1_2559: la $2, sym_1_2559
+.globl sym_1_2560
+sym_1_2560: la $2, sym_1_2560
+.globl sym_1_2561
+sym_1_2561: la $2, sym_1_2561
+.globl sym_1_2562
+sym_1_2562: la $2, sym_1_2562
+.globl sym_1_2563
+sym_1_2563: la $2, sym_1_2563
+.globl sym_1_2564
+sym_1_2564: la $2, sym_1_2564
+.globl sym_1_2565
+sym_1_2565: la $2, sym_1_2565
+.globl sym_1_2566
+sym_1_2566: la $2, sym_1_2566
+.globl sym_1_2567
+sym_1_2567: la $2, sym_1_2567
+.globl sym_1_2568
+sym_1_2568: la $2, sym_1_2568
+.globl sym_1_2569
+sym_1_2569: la $2, sym_1_2569
+.globl sym_1_2570
+sym_1_2570: la $2, sym_1_2570
+.globl sym_1_2571
+sym_1_2571: la $2, sym_1_2571
+.globl sym_1_2572
+sym_1_2572: la $2, sym_1_2572
+.globl sym_1_2573
+sym_1_2573: la $2, sym_1_2573
+.globl sym_1_2574
+sym_1_2574: la $2, sym_1_2574
+.globl sym_1_2575
+sym_1_2575: la $2, sym_1_2575
+.globl sym_1_2576
+sym_1_2576: la $2, sym_1_2576
+.globl sym_1_2577
+sym_1_2577: la $2, sym_1_2577
+.globl sym_1_2578
+sym_1_2578: la $2, sym_1_2578
+.globl sym_1_2579
+sym_1_2579: la $2, sym_1_2579
+.globl sym_1_2580
+sym_1_2580: la $2, sym_1_2580
+.globl sym_1_2581
+sym_1_2581: la $2, sym_1_2581
+.globl sym_1_2582
+sym_1_2582: la $2, sym_1_2582
+.globl sym_1_2583
+sym_1_2583: la $2, sym_1_2583
+.globl sym_1_2584
+sym_1_2584: la $2, sym_1_2584
+.globl sym_1_2585
+sym_1_2585: la $2, sym_1_2585
+.globl sym_1_2586
+sym_1_2586: la $2, sym_1_2586
+.globl sym_1_2587
+sym_1_2587: la $2, sym_1_2587
+.globl sym_1_2588
+sym_1_2588: la $2, sym_1_2588
+.globl sym_1_2589
+sym_1_2589: la $2, sym_1_2589
+.globl sym_1_2590
+sym_1_2590: la $2, sym_1_2590
+.globl sym_1_2591
+sym_1_2591: la $2, sym_1_2591
+.globl sym_1_2592
+sym_1_2592: la $2, sym_1_2592
+.globl sym_1_2593
+sym_1_2593: la $2, sym_1_2593
+.globl sym_1_2594
+sym_1_2594: la $2, sym_1_2594
+.globl sym_1_2595
+sym_1_2595: la $2, sym_1_2595
+.globl sym_1_2596
+sym_1_2596: la $2, sym_1_2596
+.globl sym_1_2597
+sym_1_2597: la $2, sym_1_2597
+.globl sym_1_2598
+sym_1_2598: la $2, sym_1_2598
+.globl sym_1_2599
+sym_1_2599: la $2, sym_1_2599
+.globl sym_1_2600
+sym_1_2600: la $2, sym_1_2600
+.globl sym_1_2601
+sym_1_2601: la $2, sym_1_2601
+.globl sym_1_2602
+sym_1_2602: la $2, sym_1_2602
+.globl sym_1_2603
+sym_1_2603: la $2, sym_1_2603
+.globl sym_1_2604
+sym_1_2604: la $2, sym_1_2604
+.globl sym_1_2605
+sym_1_2605: la $2, sym_1_2605
+.globl sym_1_2606
+sym_1_2606: la $2, sym_1_2606
+.globl sym_1_2607
+sym_1_2607: la $2, sym_1_2607
+.globl sym_1_2608
+sym_1_2608: la $2, sym_1_2608
+.globl sym_1_2609
+sym_1_2609: la $2, sym_1_2609
+.globl sym_1_2610
+sym_1_2610: la $2, sym_1_2610
+.globl sym_1_2611
+sym_1_2611: la $2, sym_1_2611
+.globl sym_1_2612
+sym_1_2612: la $2, sym_1_2612
+.globl sym_1_2613
+sym_1_2613: la $2, sym_1_2613
+.globl sym_1_2614
+sym_1_2614: la $2, sym_1_2614
+.globl sym_1_2615
+sym_1_2615: la $2, sym_1_2615
+.globl sym_1_2616
+sym_1_2616: la $2, sym_1_2616
+.globl sym_1_2617
+sym_1_2617: la $2, sym_1_2617
+.globl sym_1_2618
+sym_1_2618: la $2, sym_1_2618
+.globl sym_1_2619
+sym_1_2619: la $2, sym_1_2619
+.globl sym_1_2620
+sym_1_2620: la $2, sym_1_2620
+.globl sym_1_2621
+sym_1_2621: la $2, sym_1_2621
+.globl sym_1_2622
+sym_1_2622: la $2, sym_1_2622
+.globl sym_1_2623
+sym_1_2623: la $2, sym_1_2623
+.globl sym_1_2624
+sym_1_2624: la $2, sym_1_2624
+.globl sym_1_2625
+sym_1_2625: la $2, sym_1_2625
+.globl sym_1_2626
+sym_1_2626: la $2, sym_1_2626
+.globl sym_1_2627
+sym_1_2627: la $2, sym_1_2627
+.globl sym_1_2628
+sym_1_2628: la $2, sym_1_2628
+.globl sym_1_2629
+sym_1_2629: la $2, sym_1_2629
+.globl sym_1_2630
+sym_1_2630: la $2, sym_1_2630
+.globl sym_1_2631
+sym_1_2631: la $2, sym_1_2631
+.globl sym_1_2632
+sym_1_2632: la $2, sym_1_2632
+.globl sym_1_2633
+sym_1_2633: la $2, sym_1_2633
+.globl sym_1_2634
+sym_1_2634: la $2, sym_1_2634
+.globl sym_1_2635
+sym_1_2635: la $2, sym_1_2635
+.globl sym_1_2636
+sym_1_2636: la $2, sym_1_2636
+.globl sym_1_2637
+sym_1_2637: la $2, sym_1_2637
+.globl sym_1_2638
+sym_1_2638: la $2, sym_1_2638
+.globl sym_1_2639
+sym_1_2639: la $2, sym_1_2639
+.globl sym_1_2640
+sym_1_2640: la $2, sym_1_2640
+.globl sym_1_2641
+sym_1_2641: la $2, sym_1_2641
+.globl sym_1_2642
+sym_1_2642: la $2, sym_1_2642
+.globl sym_1_2643
+sym_1_2643: la $2, sym_1_2643
+.globl sym_1_2644
+sym_1_2644: la $2, sym_1_2644
+.globl sym_1_2645
+sym_1_2645: la $2, sym_1_2645
+.globl sym_1_2646
+sym_1_2646: la $2, sym_1_2646
+.globl sym_1_2647
+sym_1_2647: la $2, sym_1_2647
+.globl sym_1_2648
+sym_1_2648: la $2, sym_1_2648
+.globl sym_1_2649
+sym_1_2649: la $2, sym_1_2649
+.globl sym_1_2650
+sym_1_2650: la $2, sym_1_2650
+.globl sym_1_2651
+sym_1_2651: la $2, sym_1_2651
+.globl sym_1_2652
+sym_1_2652: la $2, sym_1_2652
+.globl sym_1_2653
+sym_1_2653: la $2, sym_1_2653
+.globl sym_1_2654
+sym_1_2654: la $2, sym_1_2654
+.globl sym_1_2655
+sym_1_2655: la $2, sym_1_2655
+.globl sym_1_2656
+sym_1_2656: la $2, sym_1_2656
+.globl sym_1_2657
+sym_1_2657: la $2, sym_1_2657
+.globl sym_1_2658
+sym_1_2658: la $2, sym_1_2658
+.globl sym_1_2659
+sym_1_2659: la $2, sym_1_2659
+.globl sym_1_2660
+sym_1_2660: la $2, sym_1_2660
+.globl sym_1_2661
+sym_1_2661: la $2, sym_1_2661
+.globl sym_1_2662
+sym_1_2662: la $2, sym_1_2662
+.globl sym_1_2663
+sym_1_2663: la $2, sym_1_2663
+.globl sym_1_2664
+sym_1_2664: la $2, sym_1_2664
+.globl sym_1_2665
+sym_1_2665: la $2, sym_1_2665
+.globl sym_1_2666
+sym_1_2666: la $2, sym_1_2666
+.globl sym_1_2667
+sym_1_2667: la $2, sym_1_2667
+.globl sym_1_2668
+sym_1_2668: la $2, sym_1_2668
+.globl sym_1_2669
+sym_1_2669: la $2, sym_1_2669
+.globl sym_1_2670
+sym_1_2670: la $2, sym_1_2670
+.globl sym_1_2671
+sym_1_2671: la $2, sym_1_2671
+.globl sym_1_2672
+sym_1_2672: la $2, sym_1_2672
+.globl sym_1_2673
+sym_1_2673: la $2, sym_1_2673
+.globl sym_1_2674
+sym_1_2674: la $2, sym_1_2674
+.globl sym_1_2675
+sym_1_2675: la $2, sym_1_2675
+.globl sym_1_2676
+sym_1_2676: la $2, sym_1_2676
+.globl sym_1_2677
+sym_1_2677: la $2, sym_1_2677
+.globl sym_1_2678
+sym_1_2678: la $2, sym_1_2678
+.globl sym_1_2679
+sym_1_2679: la $2, sym_1_2679
+.globl sym_1_2680
+sym_1_2680: la $2, sym_1_2680
+.globl sym_1_2681
+sym_1_2681: la $2, sym_1_2681
+.globl sym_1_2682
+sym_1_2682: la $2, sym_1_2682
+.globl sym_1_2683
+sym_1_2683: la $2, sym_1_2683
+.globl sym_1_2684
+sym_1_2684: la $2, sym_1_2684
+.globl sym_1_2685
+sym_1_2685: la $2, sym_1_2685
+.globl sym_1_2686
+sym_1_2686: la $2, sym_1_2686
+.globl sym_1_2687
+sym_1_2687: la $2, sym_1_2687
+.globl sym_1_2688
+sym_1_2688: la $2, sym_1_2688
+.globl sym_1_2689
+sym_1_2689: la $2, sym_1_2689
+.globl sym_1_2690
+sym_1_2690: la $2, sym_1_2690
+.globl sym_1_2691
+sym_1_2691: la $2, sym_1_2691
+.globl sym_1_2692
+sym_1_2692: la $2, sym_1_2692
+.globl sym_1_2693
+sym_1_2693: la $2, sym_1_2693
+.globl sym_1_2694
+sym_1_2694: la $2, sym_1_2694
+.globl sym_1_2695
+sym_1_2695: la $2, sym_1_2695
+.globl sym_1_2696
+sym_1_2696: la $2, sym_1_2696
+.globl sym_1_2697
+sym_1_2697: la $2, sym_1_2697
+.globl sym_1_2698
+sym_1_2698: la $2, sym_1_2698
+.globl sym_1_2699
+sym_1_2699: la $2, sym_1_2699
+.globl sym_1_2700
+sym_1_2700: la $2, sym_1_2700
+.globl sym_1_2701
+sym_1_2701: la $2, sym_1_2701
+.globl sym_1_2702
+sym_1_2702: la $2, sym_1_2702
+.globl sym_1_2703
+sym_1_2703: la $2, sym_1_2703
+.globl sym_1_2704
+sym_1_2704: la $2, sym_1_2704
+.globl sym_1_2705
+sym_1_2705: la $2, sym_1_2705
+.globl sym_1_2706
+sym_1_2706: la $2, sym_1_2706
+.globl sym_1_2707
+sym_1_2707: la $2, sym_1_2707
+.globl sym_1_2708
+sym_1_2708: la $2, sym_1_2708
+.globl sym_1_2709
+sym_1_2709: la $2, sym_1_2709
+.globl sym_1_2710
+sym_1_2710: la $2, sym_1_2710
+.globl sym_1_2711
+sym_1_2711: la $2, sym_1_2711
+.globl sym_1_2712
+sym_1_2712: la $2, sym_1_2712
+.globl sym_1_2713
+sym_1_2713: la $2, sym_1_2713
+.globl sym_1_2714
+sym_1_2714: la $2, sym_1_2714
+.globl sym_1_2715
+sym_1_2715: la $2, sym_1_2715
+.globl sym_1_2716
+sym_1_2716: la $2, sym_1_2716
+.globl sym_1_2717
+sym_1_2717: la $2, sym_1_2717
+.globl sym_1_2718
+sym_1_2718: la $2, sym_1_2718
+.globl sym_1_2719
+sym_1_2719: la $2, sym_1_2719
+.globl sym_1_2720
+sym_1_2720: la $2, sym_1_2720
+.globl sym_1_2721
+sym_1_2721: la $2, sym_1_2721
+.globl sym_1_2722
+sym_1_2722: la $2, sym_1_2722
+.globl sym_1_2723
+sym_1_2723: la $2, sym_1_2723
+.globl sym_1_2724
+sym_1_2724: la $2, sym_1_2724
+.globl sym_1_2725
+sym_1_2725: la $2, sym_1_2725
+.globl sym_1_2726
+sym_1_2726: la $2, sym_1_2726
+.globl sym_1_2727
+sym_1_2727: la $2, sym_1_2727
+.globl sym_1_2728
+sym_1_2728: la $2, sym_1_2728
+.globl sym_1_2729
+sym_1_2729: la $2, sym_1_2729
+.globl sym_1_2730
+sym_1_2730: la $2, sym_1_2730
+.globl sym_1_2731
+sym_1_2731: la $2, sym_1_2731
+.globl sym_1_2732
+sym_1_2732: la $2, sym_1_2732
+.globl sym_1_2733
+sym_1_2733: la $2, sym_1_2733
+.globl sym_1_2734
+sym_1_2734: la $2, sym_1_2734
+.globl sym_1_2735
+sym_1_2735: la $2, sym_1_2735
+.globl sym_1_2736
+sym_1_2736: la $2, sym_1_2736
+.globl sym_1_2737
+sym_1_2737: la $2, sym_1_2737
+.globl sym_1_2738
+sym_1_2738: la $2, sym_1_2738
+.globl sym_1_2739
+sym_1_2739: la $2, sym_1_2739
+.globl sym_1_2740
+sym_1_2740: la $2, sym_1_2740
+.globl sym_1_2741
+sym_1_2741: la $2, sym_1_2741
+.globl sym_1_2742
+sym_1_2742: la $2, sym_1_2742
+.globl sym_1_2743
+sym_1_2743: la $2, sym_1_2743
+.globl sym_1_2744
+sym_1_2744: la $2, sym_1_2744
+.globl sym_1_2745
+sym_1_2745: la $2, sym_1_2745
+.globl sym_1_2746
+sym_1_2746: la $2, sym_1_2746
+.globl sym_1_2747
+sym_1_2747: la $2, sym_1_2747
+.globl sym_1_2748
+sym_1_2748: la $2, sym_1_2748
+.globl sym_1_2749
+sym_1_2749: la $2, sym_1_2749
+.globl sym_1_2750
+sym_1_2750: la $2, sym_1_2750
+.globl sym_1_2751
+sym_1_2751: la $2, sym_1_2751
+.globl sym_1_2752
+sym_1_2752: la $2, sym_1_2752
+.globl sym_1_2753
+sym_1_2753: la $2, sym_1_2753
+.globl sym_1_2754
+sym_1_2754: la $2, sym_1_2754
+.globl sym_1_2755
+sym_1_2755: la $2, sym_1_2755
+.globl sym_1_2756
+sym_1_2756: la $2, sym_1_2756
+.globl sym_1_2757
+sym_1_2757: la $2, sym_1_2757
+.globl sym_1_2758
+sym_1_2758: la $2, sym_1_2758
+.globl sym_1_2759
+sym_1_2759: la $2, sym_1_2759
+.globl sym_1_2760
+sym_1_2760: la $2, sym_1_2760
+.globl sym_1_2761
+sym_1_2761: la $2, sym_1_2761
+.globl sym_1_2762
+sym_1_2762: la $2, sym_1_2762
+.globl sym_1_2763
+sym_1_2763: la $2, sym_1_2763
+.globl sym_1_2764
+sym_1_2764: la $2, sym_1_2764
+.globl sym_1_2765
+sym_1_2765: la $2, sym_1_2765
+.globl sym_1_2766
+sym_1_2766: la $2, sym_1_2766
+.globl sym_1_2767
+sym_1_2767: la $2, sym_1_2767
+.globl sym_1_2768
+sym_1_2768: la $2, sym_1_2768
+.globl sym_1_2769
+sym_1_2769: la $2, sym_1_2769
+.globl sym_1_2770
+sym_1_2770: la $2, sym_1_2770
+.globl sym_1_2771
+sym_1_2771: la $2, sym_1_2771
+.globl sym_1_2772
+sym_1_2772: la $2, sym_1_2772
+.globl sym_1_2773
+sym_1_2773: la $2, sym_1_2773
+.globl sym_1_2774
+sym_1_2774: la $2, sym_1_2774
+.globl sym_1_2775
+sym_1_2775: la $2, sym_1_2775
+.globl sym_1_2776
+sym_1_2776: la $2, sym_1_2776
+.globl sym_1_2777
+sym_1_2777: la $2, sym_1_2777
+.globl sym_1_2778
+sym_1_2778: la $2, sym_1_2778
+.globl sym_1_2779
+sym_1_2779: la $2, sym_1_2779
+.globl sym_1_2780
+sym_1_2780: la $2, sym_1_2780
+.globl sym_1_2781
+sym_1_2781: la $2, sym_1_2781
+.globl sym_1_2782
+sym_1_2782: la $2, sym_1_2782
+.globl sym_1_2783
+sym_1_2783: la $2, sym_1_2783
+.globl sym_1_2784
+sym_1_2784: la $2, sym_1_2784
+.globl sym_1_2785
+sym_1_2785: la $2, sym_1_2785
+.globl sym_1_2786
+sym_1_2786: la $2, sym_1_2786
+.globl sym_1_2787
+sym_1_2787: la $2, sym_1_2787
+.globl sym_1_2788
+sym_1_2788: la $2, sym_1_2788
+.globl sym_1_2789
+sym_1_2789: la $2, sym_1_2789
+.globl sym_1_2790
+sym_1_2790: la $2, sym_1_2790
+.globl sym_1_2791
+sym_1_2791: la $2, sym_1_2791
+.globl sym_1_2792
+sym_1_2792: la $2, sym_1_2792
+.globl sym_1_2793
+sym_1_2793: la $2, sym_1_2793
+.globl sym_1_2794
+sym_1_2794: la $2, sym_1_2794
+.globl sym_1_2795
+sym_1_2795: la $2, sym_1_2795
+.globl sym_1_2796
+sym_1_2796: la $2, sym_1_2796
+.globl sym_1_2797
+sym_1_2797: la $2, sym_1_2797
+.globl sym_1_2798
+sym_1_2798: la $2, sym_1_2798
+.globl sym_1_2799
+sym_1_2799: la $2, sym_1_2799
+.globl sym_1_2800
+sym_1_2800: la $2, sym_1_2800
+.globl sym_1_2801
+sym_1_2801: la $2, sym_1_2801
+.globl sym_1_2802
+sym_1_2802: la $2, sym_1_2802
+.globl sym_1_2803
+sym_1_2803: la $2, sym_1_2803
+.globl sym_1_2804
+sym_1_2804: la $2, sym_1_2804
+.globl sym_1_2805
+sym_1_2805: la $2, sym_1_2805
+.globl sym_1_2806
+sym_1_2806: la $2, sym_1_2806
+.globl sym_1_2807
+sym_1_2807: la $2, sym_1_2807
+.globl sym_1_2808
+sym_1_2808: la $2, sym_1_2808
+.globl sym_1_2809
+sym_1_2809: la $2, sym_1_2809
+.globl sym_1_2810
+sym_1_2810: la $2, sym_1_2810
+.globl sym_1_2811
+sym_1_2811: la $2, sym_1_2811
+.globl sym_1_2812
+sym_1_2812: la $2, sym_1_2812
+.globl sym_1_2813
+sym_1_2813: la $2, sym_1_2813
+.globl sym_1_2814
+sym_1_2814: la $2, sym_1_2814
+.globl sym_1_2815
+sym_1_2815: la $2, sym_1_2815
+.globl sym_1_2816
+sym_1_2816: la $2, sym_1_2816
+.globl sym_1_2817
+sym_1_2817: la $2, sym_1_2817
+.globl sym_1_2818
+sym_1_2818: la $2, sym_1_2818
+.globl sym_1_2819
+sym_1_2819: la $2, sym_1_2819
+.globl sym_1_2820
+sym_1_2820: la $2, sym_1_2820
+.globl sym_1_2821
+sym_1_2821: la $2, sym_1_2821
+.globl sym_1_2822
+sym_1_2822: la $2, sym_1_2822
+.globl sym_1_2823
+sym_1_2823: la $2, sym_1_2823
+.globl sym_1_2824
+sym_1_2824: la $2, sym_1_2824
+.globl sym_1_2825
+sym_1_2825: la $2, sym_1_2825
+.globl sym_1_2826
+sym_1_2826: la $2, sym_1_2826
+.globl sym_1_2827
+sym_1_2827: la $2, sym_1_2827
+.globl sym_1_2828
+sym_1_2828: la $2, sym_1_2828
+.globl sym_1_2829
+sym_1_2829: la $2, sym_1_2829
+.globl sym_1_2830
+sym_1_2830: la $2, sym_1_2830
+.globl sym_1_2831
+sym_1_2831: la $2, sym_1_2831
+.globl sym_1_2832
+sym_1_2832: la $2, sym_1_2832
+.globl sym_1_2833
+sym_1_2833: la $2, sym_1_2833
+.globl sym_1_2834
+sym_1_2834: la $2, sym_1_2834
+.globl sym_1_2835
+sym_1_2835: la $2, sym_1_2835
+.globl sym_1_2836
+sym_1_2836: la $2, sym_1_2836
+.globl sym_1_2837
+sym_1_2837: la $2, sym_1_2837
+.globl sym_1_2838
+sym_1_2838: la $2, sym_1_2838
+.globl sym_1_2839
+sym_1_2839: la $2, sym_1_2839
+.globl sym_1_2840
+sym_1_2840: la $2, sym_1_2840
+.globl sym_1_2841
+sym_1_2841: la $2, sym_1_2841
+.globl sym_1_2842
+sym_1_2842: la $2, sym_1_2842
+.globl sym_1_2843
+sym_1_2843: la $2, sym_1_2843
+.globl sym_1_2844
+sym_1_2844: la $2, sym_1_2844
+.globl sym_1_2845
+sym_1_2845: la $2, sym_1_2845
+.globl sym_1_2846
+sym_1_2846: la $2, sym_1_2846
+.globl sym_1_2847
+sym_1_2847: la $2, sym_1_2847
+.globl sym_1_2848
+sym_1_2848: la $2, sym_1_2848
+.globl sym_1_2849
+sym_1_2849: la $2, sym_1_2849
+.globl sym_1_2850
+sym_1_2850: la $2, sym_1_2850
+.globl sym_1_2851
+sym_1_2851: la $2, sym_1_2851
+.globl sym_1_2852
+sym_1_2852: la $2, sym_1_2852
+.globl sym_1_2853
+sym_1_2853: la $2, sym_1_2853
+.globl sym_1_2854
+sym_1_2854: la $2, sym_1_2854
+.globl sym_1_2855
+sym_1_2855: la $2, sym_1_2855
+.globl sym_1_2856
+sym_1_2856: la $2, sym_1_2856
+.globl sym_1_2857
+sym_1_2857: la $2, sym_1_2857
+.globl sym_1_2858
+sym_1_2858: la $2, sym_1_2858
+.globl sym_1_2859
+sym_1_2859: la $2, sym_1_2859
+.globl sym_1_2860
+sym_1_2860: la $2, sym_1_2860
+.globl sym_1_2861
+sym_1_2861: la $2, sym_1_2861
+.globl sym_1_2862
+sym_1_2862: la $2, sym_1_2862
+.globl sym_1_2863
+sym_1_2863: la $2, sym_1_2863
+.globl sym_1_2864
+sym_1_2864: la $2, sym_1_2864
+.globl sym_1_2865
+sym_1_2865: la $2, sym_1_2865
+.globl sym_1_2866
+sym_1_2866: la $2, sym_1_2866
+.globl sym_1_2867
+sym_1_2867: la $2, sym_1_2867
+.globl sym_1_2868
+sym_1_2868: la $2, sym_1_2868
+.globl sym_1_2869
+sym_1_2869: la $2, sym_1_2869
+.globl sym_1_2870
+sym_1_2870: la $2, sym_1_2870
+.globl sym_1_2871
+sym_1_2871: la $2, sym_1_2871
+.globl sym_1_2872
+sym_1_2872: la $2, sym_1_2872
+.globl sym_1_2873
+sym_1_2873: la $2, sym_1_2873
+.globl sym_1_2874
+sym_1_2874: la $2, sym_1_2874
+.globl sym_1_2875
+sym_1_2875: la $2, sym_1_2875
+.globl sym_1_2876
+sym_1_2876: la $2, sym_1_2876
+.globl sym_1_2877
+sym_1_2877: la $2, sym_1_2877
+.globl sym_1_2878
+sym_1_2878: la $2, sym_1_2878
+.globl sym_1_2879
+sym_1_2879: la $2, sym_1_2879
+.globl sym_1_2880
+sym_1_2880: la $2, sym_1_2880
+.globl sym_1_2881
+sym_1_2881: la $2, sym_1_2881
+.globl sym_1_2882
+sym_1_2882: la $2, sym_1_2882
+.globl sym_1_2883
+sym_1_2883: la $2, sym_1_2883
+.globl sym_1_2884
+sym_1_2884: la $2, sym_1_2884
+.globl sym_1_2885
+sym_1_2885: la $2, sym_1_2885
+.globl sym_1_2886
+sym_1_2886: la $2, sym_1_2886
+.globl sym_1_2887
+sym_1_2887: la $2, sym_1_2887
+.globl sym_1_2888
+sym_1_2888: la $2, sym_1_2888
+.globl sym_1_2889
+sym_1_2889: la $2, sym_1_2889
+.globl sym_1_2890
+sym_1_2890: la $2, sym_1_2890
+.globl sym_1_2891
+sym_1_2891: la $2, sym_1_2891
+.globl sym_1_2892
+sym_1_2892: la $2, sym_1_2892
+.globl sym_1_2893
+sym_1_2893: la $2, sym_1_2893
+.globl sym_1_2894
+sym_1_2894: la $2, sym_1_2894
+.globl sym_1_2895
+sym_1_2895: la $2, sym_1_2895
+.globl sym_1_2896
+sym_1_2896: la $2, sym_1_2896
+.globl sym_1_2897
+sym_1_2897: la $2, sym_1_2897
+.globl sym_1_2898
+sym_1_2898: la $2, sym_1_2898
+.globl sym_1_2899
+sym_1_2899: la $2, sym_1_2899
+.globl sym_1_2900
+sym_1_2900: la $2, sym_1_2900
+.globl sym_1_2901
+sym_1_2901: la $2, sym_1_2901
+.globl sym_1_2902
+sym_1_2902: la $2, sym_1_2902
+.globl sym_1_2903
+sym_1_2903: la $2, sym_1_2903
+.globl sym_1_2904
+sym_1_2904: la $2, sym_1_2904
+.globl sym_1_2905
+sym_1_2905: la $2, sym_1_2905
+.globl sym_1_2906
+sym_1_2906: la $2, sym_1_2906
+.globl sym_1_2907
+sym_1_2907: la $2, sym_1_2907
+.globl sym_1_2908
+sym_1_2908: la $2, sym_1_2908
+.globl sym_1_2909
+sym_1_2909: la $2, sym_1_2909
+.globl sym_1_2910
+sym_1_2910: la $2, sym_1_2910
+.globl sym_1_2911
+sym_1_2911: la $2, sym_1_2911
+.globl sym_1_2912
+sym_1_2912: la $2, sym_1_2912
+.globl sym_1_2913
+sym_1_2913: la $2, sym_1_2913
+.globl sym_1_2914
+sym_1_2914: la $2, sym_1_2914
+.globl sym_1_2915
+sym_1_2915: la $2, sym_1_2915
+.globl sym_1_2916
+sym_1_2916: la $2, sym_1_2916
+.globl sym_1_2917
+sym_1_2917: la $2, sym_1_2917
+.globl sym_1_2918
+sym_1_2918: la $2, sym_1_2918
+.globl sym_1_2919
+sym_1_2919: la $2, sym_1_2919
+.globl sym_1_2920
+sym_1_2920: la $2, sym_1_2920
+.globl sym_1_2921
+sym_1_2921: la $2, sym_1_2921
+.globl sym_1_2922
+sym_1_2922: la $2, sym_1_2922
+.globl sym_1_2923
+sym_1_2923: la $2, sym_1_2923
+.globl sym_1_2924
+sym_1_2924: la $2, sym_1_2924
+.globl sym_1_2925
+sym_1_2925: la $2, sym_1_2925
+.globl sym_1_2926
+sym_1_2926: la $2, sym_1_2926
+.globl sym_1_2927
+sym_1_2927: la $2, sym_1_2927
+.globl sym_1_2928
+sym_1_2928: la $2, sym_1_2928
+.globl sym_1_2929
+sym_1_2929: la $2, sym_1_2929
+.globl sym_1_2930
+sym_1_2930: la $2, sym_1_2930
+.globl sym_1_2931
+sym_1_2931: la $2, sym_1_2931
+.globl sym_1_2932
+sym_1_2932: la $2, sym_1_2932
+.globl sym_1_2933
+sym_1_2933: la $2, sym_1_2933
+.globl sym_1_2934
+sym_1_2934: la $2, sym_1_2934
+.globl sym_1_2935
+sym_1_2935: la $2, sym_1_2935
+.globl sym_1_2936
+sym_1_2936: la $2, sym_1_2936
+.globl sym_1_2937
+sym_1_2937: la $2, sym_1_2937
+.globl sym_1_2938
+sym_1_2938: la $2, sym_1_2938
+.globl sym_1_2939
+sym_1_2939: la $2, sym_1_2939
+.globl sym_1_2940
+sym_1_2940: la $2, sym_1_2940
+.globl sym_1_2941
+sym_1_2941: la $2, sym_1_2941
+.globl sym_1_2942
+sym_1_2942: la $2, sym_1_2942
+.globl sym_1_2943
+sym_1_2943: la $2, sym_1_2943
+.globl sym_1_2944
+sym_1_2944: la $2, sym_1_2944
+.globl sym_1_2945
+sym_1_2945: la $2, sym_1_2945
+.globl sym_1_2946
+sym_1_2946: la $2, sym_1_2946
+.globl sym_1_2947
+sym_1_2947: la $2, sym_1_2947
+.globl sym_1_2948
+sym_1_2948: la $2, sym_1_2948
+.globl sym_1_2949
+sym_1_2949: la $2, sym_1_2949
+.globl sym_1_2950
+sym_1_2950: la $2, sym_1_2950
+.globl sym_1_2951
+sym_1_2951: la $2, sym_1_2951
+.globl sym_1_2952
+sym_1_2952: la $2, sym_1_2952
+.globl sym_1_2953
+sym_1_2953: la $2, sym_1_2953
+.globl sym_1_2954
+sym_1_2954: la $2, sym_1_2954
+.globl sym_1_2955
+sym_1_2955: la $2, sym_1_2955
+.globl sym_1_2956
+sym_1_2956: la $2, sym_1_2956
+.globl sym_1_2957
+sym_1_2957: la $2, sym_1_2957
+.globl sym_1_2958
+sym_1_2958: la $2, sym_1_2958
+.globl sym_1_2959
+sym_1_2959: la $2, sym_1_2959
+.globl sym_1_2960
+sym_1_2960: la $2, sym_1_2960
+.globl sym_1_2961
+sym_1_2961: la $2, sym_1_2961
+.globl sym_1_2962
+sym_1_2962: la $2, sym_1_2962
+.globl sym_1_2963
+sym_1_2963: la $2, sym_1_2963
+.globl sym_1_2964
+sym_1_2964: la $2, sym_1_2964
+.globl sym_1_2965
+sym_1_2965: la $2, sym_1_2965
+.globl sym_1_2966
+sym_1_2966: la $2, sym_1_2966
+.globl sym_1_2967
+sym_1_2967: la $2, sym_1_2967
+.globl sym_1_2968
+sym_1_2968: la $2, sym_1_2968
+.globl sym_1_2969
+sym_1_2969: la $2, sym_1_2969
+.globl sym_1_2970
+sym_1_2970: la $2, sym_1_2970
+.globl sym_1_2971
+sym_1_2971: la $2, sym_1_2971
+.globl sym_1_2972
+sym_1_2972: la $2, sym_1_2972
+.globl sym_1_2973
+sym_1_2973: la $2, sym_1_2973
+.globl sym_1_2974
+sym_1_2974: la $2, sym_1_2974
+.globl sym_1_2975
+sym_1_2975: la $2, sym_1_2975
+.globl sym_1_2976
+sym_1_2976: la $2, sym_1_2976
+.globl sym_1_2977
+sym_1_2977: la $2, sym_1_2977
+.globl sym_1_2978
+sym_1_2978: la $2, sym_1_2978
+.globl sym_1_2979
+sym_1_2979: la $2, sym_1_2979
+.globl sym_1_2980
+sym_1_2980: la $2, sym_1_2980
+.globl sym_1_2981
+sym_1_2981: la $2, sym_1_2981
+.globl sym_1_2982
+sym_1_2982: la $2, sym_1_2982
+.globl sym_1_2983
+sym_1_2983: la $2, sym_1_2983
+.globl sym_1_2984
+sym_1_2984: la $2, sym_1_2984
+.globl sym_1_2985
+sym_1_2985: la $2, sym_1_2985
+.globl sym_1_2986
+sym_1_2986: la $2, sym_1_2986
+.globl sym_1_2987
+sym_1_2987: la $2, sym_1_2987
+.globl sym_1_2988
+sym_1_2988: la $2, sym_1_2988
+.globl sym_1_2989
+sym_1_2989: la $2, sym_1_2989
+.globl sym_1_2990
+sym_1_2990: la $2, sym_1_2990
+.globl sym_1_2991
+sym_1_2991: la $2, sym_1_2991
+.globl sym_1_2992
+sym_1_2992: la $2, sym_1_2992
+.globl sym_1_2993
+sym_1_2993: la $2, sym_1_2993
+.globl sym_1_2994
+sym_1_2994: la $2, sym_1_2994
+.globl sym_1_2995
+sym_1_2995: la $2, sym_1_2995
+.globl sym_1_2996
+sym_1_2996: la $2, sym_1_2996
+.globl sym_1_2997
+sym_1_2997: la $2, sym_1_2997
+.globl sym_1_2998
+sym_1_2998: la $2, sym_1_2998
+.globl sym_1_2999
+sym_1_2999: la $2, sym_1_2999
+.globl sym_1_3000
+sym_1_3000: la $2, sym_1_3000
+.globl sym_1_3001
+sym_1_3001: la $2, sym_1_3001
+.globl sym_1_3002
+sym_1_3002: la $2, sym_1_3002
+.globl sym_1_3003
+sym_1_3003: la $2, sym_1_3003
+.globl sym_1_3004
+sym_1_3004: la $2, sym_1_3004
+.globl sym_1_3005
+sym_1_3005: la $2, sym_1_3005
+.globl sym_1_3006
+sym_1_3006: la $2, sym_1_3006
+.globl sym_1_3007
+sym_1_3007: la $2, sym_1_3007
+.globl sym_1_3008
+sym_1_3008: la $2, sym_1_3008
+.globl sym_1_3009
+sym_1_3009: la $2, sym_1_3009
+.globl sym_1_3010
+sym_1_3010: la $2, sym_1_3010
+.globl sym_1_3011
+sym_1_3011: la $2, sym_1_3011
+.globl sym_1_3012
+sym_1_3012: la $2, sym_1_3012
+.globl sym_1_3013
+sym_1_3013: la $2, sym_1_3013
+.globl sym_1_3014
+sym_1_3014: la $2, sym_1_3014
+.globl sym_1_3015
+sym_1_3015: la $2, sym_1_3015
+.globl sym_1_3016
+sym_1_3016: la $2, sym_1_3016
+.globl sym_1_3017
+sym_1_3017: la $2, sym_1_3017
+.globl sym_1_3018
+sym_1_3018: la $2, sym_1_3018
+.globl sym_1_3019
+sym_1_3019: la $2, sym_1_3019
+.globl sym_1_3020
+sym_1_3020: la $2, sym_1_3020
+.globl sym_1_3021
+sym_1_3021: la $2, sym_1_3021
+.globl sym_1_3022
+sym_1_3022: la $2, sym_1_3022
+.globl sym_1_3023
+sym_1_3023: la $2, sym_1_3023
+.globl sym_1_3024
+sym_1_3024: la $2, sym_1_3024
+.globl sym_1_3025
+sym_1_3025: la $2, sym_1_3025
+.globl sym_1_3026
+sym_1_3026: la $2, sym_1_3026
+.globl sym_1_3027
+sym_1_3027: la $2, sym_1_3027
+.globl sym_1_3028
+sym_1_3028: la $2, sym_1_3028
+.globl sym_1_3029
+sym_1_3029: la $2, sym_1_3029
+.globl sym_1_3030
+sym_1_3030: la $2, sym_1_3030
+.globl sym_1_3031
+sym_1_3031: la $2, sym_1_3031
+.globl sym_1_3032
+sym_1_3032: la $2, sym_1_3032
+.globl sym_1_3033
+sym_1_3033: la $2, sym_1_3033
+.globl sym_1_3034
+sym_1_3034: la $2, sym_1_3034
+.globl sym_1_3035
+sym_1_3035: la $2, sym_1_3035
+.globl sym_1_3036
+sym_1_3036: la $2, sym_1_3036
+.globl sym_1_3037
+sym_1_3037: la $2, sym_1_3037
+.globl sym_1_3038
+sym_1_3038: la $2, sym_1_3038
+.globl sym_1_3039
+sym_1_3039: la $2, sym_1_3039
+.globl sym_1_3040
+sym_1_3040: la $2, sym_1_3040
+.globl sym_1_3041
+sym_1_3041: la $2, sym_1_3041
+.globl sym_1_3042
+sym_1_3042: la $2, sym_1_3042
+.globl sym_1_3043
+sym_1_3043: la $2, sym_1_3043
+.globl sym_1_3044
+sym_1_3044: la $2, sym_1_3044
+.globl sym_1_3045
+sym_1_3045: la $2, sym_1_3045
+.globl sym_1_3046
+sym_1_3046: la $2, sym_1_3046
+.globl sym_1_3047
+sym_1_3047: la $2, sym_1_3047
+.globl sym_1_3048
+sym_1_3048: la $2, sym_1_3048
+.globl sym_1_3049
+sym_1_3049: la $2, sym_1_3049
+.globl sym_1_3050
+sym_1_3050: la $2, sym_1_3050
+.globl sym_1_3051
+sym_1_3051: la $2, sym_1_3051
+.globl sym_1_3052
+sym_1_3052: la $2, sym_1_3052
+.globl sym_1_3053
+sym_1_3053: la $2, sym_1_3053
+.globl sym_1_3054
+sym_1_3054: la $2, sym_1_3054
+.globl sym_1_3055
+sym_1_3055: la $2, sym_1_3055
+.globl sym_1_3056
+sym_1_3056: la $2, sym_1_3056
+.globl sym_1_3057
+sym_1_3057: la $2, sym_1_3057
+.globl sym_1_3058
+sym_1_3058: la $2, sym_1_3058
+.globl sym_1_3059
+sym_1_3059: la $2, sym_1_3059
+.globl sym_1_3060
+sym_1_3060: la $2, sym_1_3060
+.globl sym_1_3061
+sym_1_3061: la $2, sym_1_3061
+.globl sym_1_3062
+sym_1_3062: la $2, sym_1_3062
+.globl sym_1_3063
+sym_1_3063: la $2, sym_1_3063
+.globl sym_1_3064
+sym_1_3064: la $2, sym_1_3064
+.globl sym_1_3065
+sym_1_3065: la $2, sym_1_3065
+.globl sym_1_3066
+sym_1_3066: la $2, sym_1_3066
+.globl sym_1_3067
+sym_1_3067: la $2, sym_1_3067
+.globl sym_1_3068
+sym_1_3068: la $2, sym_1_3068
+.globl sym_1_3069
+sym_1_3069: la $2, sym_1_3069
+.globl sym_1_3070
+sym_1_3070: la $2, sym_1_3070
+.globl sym_1_3071
+sym_1_3071: la $2, sym_1_3071
+.globl sym_1_3072
+sym_1_3072: la $2, sym_1_3072
+.globl sym_1_3073
+sym_1_3073: la $2, sym_1_3073
+.globl sym_1_3074
+sym_1_3074: la $2, sym_1_3074
+.globl sym_1_3075
+sym_1_3075: la $2, sym_1_3075
+.globl sym_1_3076
+sym_1_3076: la $2, sym_1_3076
+.globl sym_1_3077
+sym_1_3077: la $2, sym_1_3077
+.globl sym_1_3078
+sym_1_3078: la $2, sym_1_3078
+.globl sym_1_3079
+sym_1_3079: la $2, sym_1_3079
+.globl sym_1_3080
+sym_1_3080: la $2, sym_1_3080
+.globl sym_1_3081
+sym_1_3081: la $2, sym_1_3081
+.globl sym_1_3082
+sym_1_3082: la $2, sym_1_3082
+.globl sym_1_3083
+sym_1_3083: la $2, sym_1_3083
+.globl sym_1_3084
+sym_1_3084: la $2, sym_1_3084
+.globl sym_1_3085
+sym_1_3085: la $2, sym_1_3085
+.globl sym_1_3086
+sym_1_3086: la $2, sym_1_3086
+.globl sym_1_3087
+sym_1_3087: la $2, sym_1_3087
+.globl sym_1_3088
+sym_1_3088: la $2, sym_1_3088
+.globl sym_1_3089
+sym_1_3089: la $2, sym_1_3089
+.globl sym_1_3090
+sym_1_3090: la $2, sym_1_3090
+.globl sym_1_3091
+sym_1_3091: la $2, sym_1_3091
+.globl sym_1_3092
+sym_1_3092: la $2, sym_1_3092
+.globl sym_1_3093
+sym_1_3093: la $2, sym_1_3093
+.globl sym_1_3094
+sym_1_3094: la $2, sym_1_3094
+.globl sym_1_3095
+sym_1_3095: la $2, sym_1_3095
+.globl sym_1_3096
+sym_1_3096: la $2, sym_1_3096
+.globl sym_1_3097
+sym_1_3097: la $2, sym_1_3097
+.globl sym_1_3098
+sym_1_3098: la $2, sym_1_3098
+.globl sym_1_3099
+sym_1_3099: la $2, sym_1_3099
+.globl sym_1_3100
+sym_1_3100: la $2, sym_1_3100
+.globl sym_1_3101
+sym_1_3101: la $2, sym_1_3101
+.globl sym_1_3102
+sym_1_3102: la $2, sym_1_3102
+.globl sym_1_3103
+sym_1_3103: la $2, sym_1_3103
+.globl sym_1_3104
+sym_1_3104: la $2, sym_1_3104
+.globl sym_1_3105
+sym_1_3105: la $2, sym_1_3105
+.globl sym_1_3106
+sym_1_3106: la $2, sym_1_3106
+.globl sym_1_3107
+sym_1_3107: la $2, sym_1_3107
+.globl sym_1_3108
+sym_1_3108: la $2, sym_1_3108
+.globl sym_1_3109
+sym_1_3109: la $2, sym_1_3109
+.globl sym_1_3110
+sym_1_3110: la $2, sym_1_3110
+.globl sym_1_3111
+sym_1_3111: la $2, sym_1_3111
+.globl sym_1_3112
+sym_1_3112: la $2, sym_1_3112
+.globl sym_1_3113
+sym_1_3113: la $2, sym_1_3113
+.globl sym_1_3114
+sym_1_3114: la $2, sym_1_3114
+.globl sym_1_3115
+sym_1_3115: la $2, sym_1_3115
+.globl sym_1_3116
+sym_1_3116: la $2, sym_1_3116
+.globl sym_1_3117
+sym_1_3117: la $2, sym_1_3117
+.globl sym_1_3118
+sym_1_3118: la $2, sym_1_3118
+.globl sym_1_3119
+sym_1_3119: la $2, sym_1_3119
+.globl sym_1_3120
+sym_1_3120: la $2, sym_1_3120
+.globl sym_1_3121
+sym_1_3121: la $2, sym_1_3121
+.globl sym_1_3122
+sym_1_3122: la $2, sym_1_3122
+.globl sym_1_3123
+sym_1_3123: la $2, sym_1_3123
+.globl sym_1_3124
+sym_1_3124: la $2, sym_1_3124
+.globl sym_1_3125
+sym_1_3125: la $2, sym_1_3125
+.globl sym_1_3126
+sym_1_3126: la $2, sym_1_3126
+.globl sym_1_3127
+sym_1_3127: la $2, sym_1_3127
+.globl sym_1_3128
+sym_1_3128: la $2, sym_1_3128
+.globl sym_1_3129
+sym_1_3129: la $2, sym_1_3129
+.globl sym_1_3130
+sym_1_3130: la $2, sym_1_3130
+.globl sym_1_3131
+sym_1_3131: la $2, sym_1_3131
+.globl sym_1_3132
+sym_1_3132: la $2, sym_1_3132
+.globl sym_1_3133
+sym_1_3133: la $2, sym_1_3133
+.globl sym_1_3134
+sym_1_3134: la $2, sym_1_3134
+.globl sym_1_3135
+sym_1_3135: la $2, sym_1_3135
+.globl sym_1_3136
+sym_1_3136: la $2, sym_1_3136
+.globl sym_1_3137
+sym_1_3137: la $2, sym_1_3137
+.globl sym_1_3138
+sym_1_3138: la $2, sym_1_3138
+.globl sym_1_3139
+sym_1_3139: la $2, sym_1_3139
+.globl sym_1_3140
+sym_1_3140: la $2, sym_1_3140
+.globl sym_1_3141
+sym_1_3141: la $2, sym_1_3141
+.globl sym_1_3142
+sym_1_3142: la $2, sym_1_3142
+.globl sym_1_3143
+sym_1_3143: la $2, sym_1_3143
+.globl sym_1_3144
+sym_1_3144: la $2, sym_1_3144
+.globl sym_1_3145
+sym_1_3145: la $2, sym_1_3145
+.globl sym_1_3146
+sym_1_3146: la $2, sym_1_3146
+.globl sym_1_3147
+sym_1_3147: la $2, sym_1_3147
+.globl sym_1_3148
+sym_1_3148: la $2, sym_1_3148
+.globl sym_1_3149
+sym_1_3149: la $2, sym_1_3149
+.globl sym_1_3150
+sym_1_3150: la $2, sym_1_3150
+.globl sym_1_3151
+sym_1_3151: la $2, sym_1_3151
+.globl sym_1_3152
+sym_1_3152: la $2, sym_1_3152
+.globl sym_1_3153
+sym_1_3153: la $2, sym_1_3153
+.globl sym_1_3154
+sym_1_3154: la $2, sym_1_3154
+.globl sym_1_3155
+sym_1_3155: la $2, sym_1_3155
+.globl sym_1_3156
+sym_1_3156: la $2, sym_1_3156
+.globl sym_1_3157
+sym_1_3157: la $2, sym_1_3157
+.globl sym_1_3158
+sym_1_3158: la $2, sym_1_3158
+.globl sym_1_3159
+sym_1_3159: la $2, sym_1_3159
+.globl sym_1_3160
+sym_1_3160: la $2, sym_1_3160
+.globl sym_1_3161
+sym_1_3161: la $2, sym_1_3161
+.globl sym_1_3162
+sym_1_3162: la $2, sym_1_3162
+.globl sym_1_3163
+sym_1_3163: la $2, sym_1_3163
+.globl sym_1_3164
+sym_1_3164: la $2, sym_1_3164
+.globl sym_1_3165
+sym_1_3165: la $2, sym_1_3165
+.globl sym_1_3166
+sym_1_3166: la $2, sym_1_3166
+.globl sym_1_3167
+sym_1_3167: la $2, sym_1_3167
+.globl sym_1_3168
+sym_1_3168: la $2, sym_1_3168
+.globl sym_1_3169
+sym_1_3169: la $2, sym_1_3169
+.globl sym_1_3170
+sym_1_3170: la $2, sym_1_3170
+.globl sym_1_3171
+sym_1_3171: la $2, sym_1_3171
+.globl sym_1_3172
+sym_1_3172: la $2, sym_1_3172
+.globl sym_1_3173
+sym_1_3173: la $2, sym_1_3173
+.globl sym_1_3174
+sym_1_3174: la $2, sym_1_3174
+.globl sym_1_3175
+sym_1_3175: la $2, sym_1_3175
+.globl sym_1_3176
+sym_1_3176: la $2, sym_1_3176
+.globl sym_1_3177
+sym_1_3177: la $2, sym_1_3177
+.globl sym_1_3178
+sym_1_3178: la $2, sym_1_3178
+.globl sym_1_3179
+sym_1_3179: la $2, sym_1_3179
+.globl sym_1_3180
+sym_1_3180: la $2, sym_1_3180
+.globl sym_1_3181
+sym_1_3181: la $2, sym_1_3181
+.globl sym_1_3182
+sym_1_3182: la $2, sym_1_3182
+.globl sym_1_3183
+sym_1_3183: la $2, sym_1_3183
+.globl sym_1_3184
+sym_1_3184: la $2, sym_1_3184
+.globl sym_1_3185
+sym_1_3185: la $2, sym_1_3185
+.globl sym_1_3186
+sym_1_3186: la $2, sym_1_3186
+.globl sym_1_3187
+sym_1_3187: la $2, sym_1_3187
+.globl sym_1_3188
+sym_1_3188: la $2, sym_1_3188
+.globl sym_1_3189
+sym_1_3189: la $2, sym_1_3189
+.globl sym_1_3190
+sym_1_3190: la $2, sym_1_3190
+.globl sym_1_3191
+sym_1_3191: la $2, sym_1_3191
+.globl sym_1_3192
+sym_1_3192: la $2, sym_1_3192
+.globl sym_1_3193
+sym_1_3193: la $2, sym_1_3193
+.globl sym_1_3194
+sym_1_3194: la $2, sym_1_3194
+.globl sym_1_3195
+sym_1_3195: la $2, sym_1_3195
+.globl sym_1_3196
+sym_1_3196: la $2, sym_1_3196
+.globl sym_1_3197
+sym_1_3197: la $2, sym_1_3197
+.globl sym_1_3198
+sym_1_3198: la $2, sym_1_3198
+.globl sym_1_3199
+sym_1_3199: la $2, sym_1_3199
+.globl sym_1_3200
+sym_1_3200: la $2, sym_1_3200
+.globl sym_1_3201
+sym_1_3201: la $2, sym_1_3201
+.globl sym_1_3202
+sym_1_3202: la $2, sym_1_3202
+.globl sym_1_3203
+sym_1_3203: la $2, sym_1_3203
+.globl sym_1_3204
+sym_1_3204: la $2, sym_1_3204
+.globl sym_1_3205
+sym_1_3205: la $2, sym_1_3205
+.globl sym_1_3206
+sym_1_3206: la $2, sym_1_3206
+.globl sym_1_3207
+sym_1_3207: la $2, sym_1_3207
+.globl sym_1_3208
+sym_1_3208: la $2, sym_1_3208
+.globl sym_1_3209
+sym_1_3209: la $2, sym_1_3209
+.globl sym_1_3210
+sym_1_3210: la $2, sym_1_3210
+.globl sym_1_3211
+sym_1_3211: la $2, sym_1_3211
+.globl sym_1_3212
+sym_1_3212: la $2, sym_1_3212
+.globl sym_1_3213
+sym_1_3213: la $2, sym_1_3213
+.globl sym_1_3214
+sym_1_3214: la $2, sym_1_3214
+.globl sym_1_3215
+sym_1_3215: la $2, sym_1_3215
+.globl sym_1_3216
+sym_1_3216: la $2, sym_1_3216
+.globl sym_1_3217
+sym_1_3217: la $2, sym_1_3217
+.globl sym_1_3218
+sym_1_3218: la $2, sym_1_3218
+.globl sym_1_3219
+sym_1_3219: la $2, sym_1_3219
+.globl sym_1_3220
+sym_1_3220: la $2, sym_1_3220
+.globl sym_1_3221
+sym_1_3221: la $2, sym_1_3221
+.globl sym_1_3222
+sym_1_3222: la $2, sym_1_3222
+.globl sym_1_3223
+sym_1_3223: la $2, sym_1_3223
+.globl sym_1_3224
+sym_1_3224: la $2, sym_1_3224
+.globl sym_1_3225
+sym_1_3225: la $2, sym_1_3225
+.globl sym_1_3226
+sym_1_3226: la $2, sym_1_3226
+.globl sym_1_3227
+sym_1_3227: la $2, sym_1_3227
+.globl sym_1_3228
+sym_1_3228: la $2, sym_1_3228
+.globl sym_1_3229
+sym_1_3229: la $2, sym_1_3229
+.globl sym_1_3230
+sym_1_3230: la $2, sym_1_3230
+.globl sym_1_3231
+sym_1_3231: la $2, sym_1_3231
+.globl sym_1_3232
+sym_1_3232: la $2, sym_1_3232
+.globl sym_1_3233
+sym_1_3233: la $2, sym_1_3233
+.globl sym_1_3234
+sym_1_3234: la $2, sym_1_3234
+.globl sym_1_3235
+sym_1_3235: la $2, sym_1_3235
+.globl sym_1_3236
+sym_1_3236: la $2, sym_1_3236
+.globl sym_1_3237
+sym_1_3237: la $2, sym_1_3237
+.globl sym_1_3238
+sym_1_3238: la $2, sym_1_3238
+.globl sym_1_3239
+sym_1_3239: la $2, sym_1_3239
+.globl sym_1_3240
+sym_1_3240: la $2, sym_1_3240
+.globl sym_1_3241
+sym_1_3241: la $2, sym_1_3241
+.globl sym_1_3242
+sym_1_3242: la $2, sym_1_3242
+.globl sym_1_3243
+sym_1_3243: la $2, sym_1_3243
+.globl sym_1_3244
+sym_1_3244: la $2, sym_1_3244
+.globl sym_1_3245
+sym_1_3245: la $2, sym_1_3245
+.globl sym_1_3246
+sym_1_3246: la $2, sym_1_3246
+.globl sym_1_3247
+sym_1_3247: la $2, sym_1_3247
+.globl sym_1_3248
+sym_1_3248: la $2, sym_1_3248
+.globl sym_1_3249
+sym_1_3249: la $2, sym_1_3249
+.globl sym_1_3250
+sym_1_3250: la $2, sym_1_3250
+.globl sym_1_3251
+sym_1_3251: la $2, sym_1_3251
+.globl sym_1_3252
+sym_1_3252: la $2, sym_1_3252
+.globl sym_1_3253
+sym_1_3253: la $2, sym_1_3253
+.globl sym_1_3254
+sym_1_3254: la $2, sym_1_3254
+.globl sym_1_3255
+sym_1_3255: la $2, sym_1_3255
+.globl sym_1_3256
+sym_1_3256: la $2, sym_1_3256
+.globl sym_1_3257
+sym_1_3257: la $2, sym_1_3257
+.globl sym_1_3258
+sym_1_3258: la $2, sym_1_3258
+.globl sym_1_3259
+sym_1_3259: la $2, sym_1_3259
+.globl sym_1_3260
+sym_1_3260: la $2, sym_1_3260
+.globl sym_1_3261
+sym_1_3261: la $2, sym_1_3261
+.globl sym_1_3262
+sym_1_3262: la $2, sym_1_3262
+.globl sym_1_3263
+sym_1_3263: la $2, sym_1_3263
+.globl sym_1_3264
+sym_1_3264: la $2, sym_1_3264
+.globl sym_1_3265
+sym_1_3265: la $2, sym_1_3265
+.globl sym_1_3266
+sym_1_3266: la $2, sym_1_3266
+.globl sym_1_3267
+sym_1_3267: la $2, sym_1_3267
+.globl sym_1_3268
+sym_1_3268: la $2, sym_1_3268
+.globl sym_1_3269
+sym_1_3269: la $2, sym_1_3269
+.globl sym_1_3270
+sym_1_3270: la $2, sym_1_3270
+.globl sym_1_3271
+sym_1_3271: la $2, sym_1_3271
+.globl sym_1_3272
+sym_1_3272: la $2, sym_1_3272
+.globl sym_1_3273
+sym_1_3273: la $2, sym_1_3273
+.globl sym_1_3274
+sym_1_3274: la $2, sym_1_3274
+.globl sym_1_3275
+sym_1_3275: la $2, sym_1_3275
+.globl sym_1_3276
+sym_1_3276: la $2, sym_1_3276
+.globl sym_1_3277
+sym_1_3277: la $2, sym_1_3277
+.globl sym_1_3278
+sym_1_3278: la $2, sym_1_3278
+.globl sym_1_3279
+sym_1_3279: la $2, sym_1_3279
+.globl sym_1_3280
+sym_1_3280: la $2, sym_1_3280
+.globl sym_1_3281
+sym_1_3281: la $2, sym_1_3281
+.globl sym_1_3282
+sym_1_3282: la $2, sym_1_3282
+.globl sym_1_3283
+sym_1_3283: la $2, sym_1_3283
+.globl sym_1_3284
+sym_1_3284: la $2, sym_1_3284
+.globl sym_1_3285
+sym_1_3285: la $2, sym_1_3285
+.globl sym_1_3286
+sym_1_3286: la $2, sym_1_3286
+.globl sym_1_3287
+sym_1_3287: la $2, sym_1_3287
+.globl sym_1_3288
+sym_1_3288: la $2, sym_1_3288
+.globl sym_1_3289
+sym_1_3289: la $2, sym_1_3289
+.globl sym_1_3290
+sym_1_3290: la $2, sym_1_3290
+.globl sym_1_3291
+sym_1_3291: la $2, sym_1_3291
+.globl sym_1_3292
+sym_1_3292: la $2, sym_1_3292
+.globl sym_1_3293
+sym_1_3293: la $2, sym_1_3293
+.globl sym_1_3294
+sym_1_3294: la $2, sym_1_3294
+.globl sym_1_3295
+sym_1_3295: la $2, sym_1_3295
+.globl sym_1_3296
+sym_1_3296: la $2, sym_1_3296
+.globl sym_1_3297
+sym_1_3297: la $2, sym_1_3297
+.globl sym_1_3298
+sym_1_3298: la $2, sym_1_3298
+.globl sym_1_3299
+sym_1_3299: la $2, sym_1_3299
+.globl sym_1_3300
+sym_1_3300: la $2, sym_1_3300
+.globl sym_1_3301
+sym_1_3301: la $2, sym_1_3301
+.globl sym_1_3302
+sym_1_3302: la $2, sym_1_3302
+.globl sym_1_3303
+sym_1_3303: la $2, sym_1_3303
+.globl sym_1_3304
+sym_1_3304: la $2, sym_1_3304
+.globl sym_1_3305
+sym_1_3305: la $2, sym_1_3305
+.globl sym_1_3306
+sym_1_3306: la $2, sym_1_3306
+.globl sym_1_3307
+sym_1_3307: la $2, sym_1_3307
+.globl sym_1_3308
+sym_1_3308: la $2, sym_1_3308
+.globl sym_1_3309
+sym_1_3309: la $2, sym_1_3309
+.globl sym_1_3310
+sym_1_3310: la $2, sym_1_3310
+.globl sym_1_3311
+sym_1_3311: la $2, sym_1_3311
+.globl sym_1_3312
+sym_1_3312: la $2, sym_1_3312
+.globl sym_1_3313
+sym_1_3313: la $2, sym_1_3313
+.globl sym_1_3314
+sym_1_3314: la $2, sym_1_3314
+.globl sym_1_3315
+sym_1_3315: la $2, sym_1_3315
+.globl sym_1_3316
+sym_1_3316: la $2, sym_1_3316
+.globl sym_1_3317
+sym_1_3317: la $2, sym_1_3317
+.globl sym_1_3318
+sym_1_3318: la $2, sym_1_3318
+.globl sym_1_3319
+sym_1_3319: la $2, sym_1_3319
+.globl sym_1_3320
+sym_1_3320: la $2, sym_1_3320
+.globl sym_1_3321
+sym_1_3321: la $2, sym_1_3321
+.globl sym_1_3322
+sym_1_3322: la $2, sym_1_3322
+.globl sym_1_3323
+sym_1_3323: la $2, sym_1_3323
+.globl sym_1_3324
+sym_1_3324: la $2, sym_1_3324
+.globl sym_1_3325
+sym_1_3325: la $2, sym_1_3325
+.globl sym_1_3326
+sym_1_3326: la $2, sym_1_3326
+.globl sym_1_3327
+sym_1_3327: la $2, sym_1_3327
+.globl sym_1_3328
+sym_1_3328: la $2, sym_1_3328
+.globl sym_1_3329
+sym_1_3329: la $2, sym_1_3329
+.globl sym_1_3330
+sym_1_3330: la $2, sym_1_3330
+.globl sym_1_3331
+sym_1_3331: la $2, sym_1_3331
+.globl sym_1_3332
+sym_1_3332: la $2, sym_1_3332
+.globl sym_1_3333
+sym_1_3333: la $2, sym_1_3333
+.globl sym_1_3334
+sym_1_3334: la $2, sym_1_3334
+.globl sym_1_3335
+sym_1_3335: la $2, sym_1_3335
+.globl sym_1_3336
+sym_1_3336: la $2, sym_1_3336
+.globl sym_1_3337
+sym_1_3337: la $2, sym_1_3337
+.globl sym_1_3338
+sym_1_3338: la $2, sym_1_3338
+.globl sym_1_3339
+sym_1_3339: la $2, sym_1_3339
+.globl sym_1_3340
+sym_1_3340: la $2, sym_1_3340
+.globl sym_1_3341
+sym_1_3341: la $2, sym_1_3341
+.globl sym_1_3342
+sym_1_3342: la $2, sym_1_3342
+.globl sym_1_3343
+sym_1_3343: la $2, sym_1_3343
+.globl sym_1_3344
+sym_1_3344: la $2, sym_1_3344
+.globl sym_1_3345
+sym_1_3345: la $2, sym_1_3345
+.globl sym_1_3346
+sym_1_3346: la $2, sym_1_3346
+.globl sym_1_3347
+sym_1_3347: la $2, sym_1_3347
+.globl sym_1_3348
+sym_1_3348: la $2, sym_1_3348
+.globl sym_1_3349
+sym_1_3349: la $2, sym_1_3349
+.globl sym_1_3350
+sym_1_3350: la $2, sym_1_3350
+.globl sym_1_3351
+sym_1_3351: la $2, sym_1_3351
+.globl sym_1_3352
+sym_1_3352: la $2, sym_1_3352
+.globl sym_1_3353
+sym_1_3353: la $2, sym_1_3353
+.globl sym_1_3354
+sym_1_3354: la $2, sym_1_3354
+.globl sym_1_3355
+sym_1_3355: la $2, sym_1_3355
+.globl sym_1_3356
+sym_1_3356: la $2, sym_1_3356
+.globl sym_1_3357
+sym_1_3357: la $2, sym_1_3357
+.globl sym_1_3358
+sym_1_3358: la $2, sym_1_3358
+.globl sym_1_3359
+sym_1_3359: la $2, sym_1_3359
+.globl sym_1_3360
+sym_1_3360: la $2, sym_1_3360
+.globl sym_1_3361
+sym_1_3361: la $2, sym_1_3361
+.globl sym_1_3362
+sym_1_3362: la $2, sym_1_3362
+.globl sym_1_3363
+sym_1_3363: la $2, sym_1_3363
+.globl sym_1_3364
+sym_1_3364: la $2, sym_1_3364
+.globl sym_1_3365
+sym_1_3365: la $2, sym_1_3365
+.globl sym_1_3366
+sym_1_3366: la $2, sym_1_3366
+.globl sym_1_3367
+sym_1_3367: la $2, sym_1_3367
+.globl sym_1_3368
+sym_1_3368: la $2, sym_1_3368
+.globl sym_1_3369
+sym_1_3369: la $2, sym_1_3369
+.globl sym_1_3370
+sym_1_3370: la $2, sym_1_3370
+.globl sym_1_3371
+sym_1_3371: la $2, sym_1_3371
+.globl sym_1_3372
+sym_1_3372: la $2, sym_1_3372
+.globl sym_1_3373
+sym_1_3373: la $2, sym_1_3373
+.globl sym_1_3374
+sym_1_3374: la $2, sym_1_3374
+.globl sym_1_3375
+sym_1_3375: la $2, sym_1_3375
+.globl sym_1_3376
+sym_1_3376: la $2, sym_1_3376
+.globl sym_1_3377
+sym_1_3377: la $2, sym_1_3377
+.globl sym_1_3378
+sym_1_3378: la $2, sym_1_3378
+.globl sym_1_3379
+sym_1_3379: la $2, sym_1_3379
+.globl sym_1_3380
+sym_1_3380: la $2, sym_1_3380
+.globl sym_1_3381
+sym_1_3381: la $2, sym_1_3381
+.globl sym_1_3382
+sym_1_3382: la $2, sym_1_3382
+.globl sym_1_3383
+sym_1_3383: la $2, sym_1_3383
+.globl sym_1_3384
+sym_1_3384: la $2, sym_1_3384
+.globl sym_1_3385
+sym_1_3385: la $2, sym_1_3385
+.globl sym_1_3386
+sym_1_3386: la $2, sym_1_3386
+.globl sym_1_3387
+sym_1_3387: la $2, sym_1_3387
+.globl sym_1_3388
+sym_1_3388: la $2, sym_1_3388
+.globl sym_1_3389
+sym_1_3389: la $2, sym_1_3389
+.globl sym_1_3390
+sym_1_3390: la $2, sym_1_3390
+.globl sym_1_3391
+sym_1_3391: la $2, sym_1_3391
+.globl sym_1_3392
+sym_1_3392: la $2, sym_1_3392
+.globl sym_1_3393
+sym_1_3393: la $2, sym_1_3393
+.globl sym_1_3394
+sym_1_3394: la $2, sym_1_3394
+.globl sym_1_3395
+sym_1_3395: la $2, sym_1_3395
+.globl sym_1_3396
+sym_1_3396: la $2, sym_1_3396
+.globl sym_1_3397
+sym_1_3397: la $2, sym_1_3397
+.globl sym_1_3398
+sym_1_3398: la $2, sym_1_3398
+.globl sym_1_3399
+sym_1_3399: la $2, sym_1_3399
+.globl sym_1_3400
+sym_1_3400: la $2, sym_1_3400
+.globl sym_1_3401
+sym_1_3401: la $2, sym_1_3401
+.globl sym_1_3402
+sym_1_3402: la $2, sym_1_3402
+.globl sym_1_3403
+sym_1_3403: la $2, sym_1_3403
+.globl sym_1_3404
+sym_1_3404: la $2, sym_1_3404
+.globl sym_1_3405
+sym_1_3405: la $2, sym_1_3405
+.globl sym_1_3406
+sym_1_3406: la $2, sym_1_3406
+.globl sym_1_3407
+sym_1_3407: la $2, sym_1_3407
+.globl sym_1_3408
+sym_1_3408: la $2, sym_1_3408
+.globl sym_1_3409
+sym_1_3409: la $2, sym_1_3409
+.globl sym_1_3410
+sym_1_3410: la $2, sym_1_3410
+.globl sym_1_3411
+sym_1_3411: la $2, sym_1_3411
+.globl sym_1_3412
+sym_1_3412: la $2, sym_1_3412
+.globl sym_1_3413
+sym_1_3413: la $2, sym_1_3413
+.globl sym_1_3414
+sym_1_3414: la $2, sym_1_3414
+.globl sym_1_3415
+sym_1_3415: la $2, sym_1_3415
+.globl sym_1_3416
+sym_1_3416: la $2, sym_1_3416
+.globl sym_1_3417
+sym_1_3417: la $2, sym_1_3417
+.globl sym_1_3418
+sym_1_3418: la $2, sym_1_3418
+.globl sym_1_3419
+sym_1_3419: la $2, sym_1_3419
+.globl sym_1_3420
+sym_1_3420: la $2, sym_1_3420
+.globl sym_1_3421
+sym_1_3421: la $2, sym_1_3421
+.globl sym_1_3422
+sym_1_3422: la $2, sym_1_3422
+.globl sym_1_3423
+sym_1_3423: la $2, sym_1_3423
+.globl sym_1_3424
+sym_1_3424: la $2, sym_1_3424
+.globl sym_1_3425
+sym_1_3425: la $2, sym_1_3425
+.globl sym_1_3426
+sym_1_3426: la $2, sym_1_3426
+.globl sym_1_3427
+sym_1_3427: la $2, sym_1_3427
+.globl sym_1_3428
+sym_1_3428: la $2, sym_1_3428
+.globl sym_1_3429
+sym_1_3429: la $2, sym_1_3429
+.globl sym_1_3430
+sym_1_3430: la $2, sym_1_3430
+.globl sym_1_3431
+sym_1_3431: la $2, sym_1_3431
+.globl sym_1_3432
+sym_1_3432: la $2, sym_1_3432
+.globl sym_1_3433
+sym_1_3433: la $2, sym_1_3433
+.globl sym_1_3434
+sym_1_3434: la $2, sym_1_3434
+.globl sym_1_3435
+sym_1_3435: la $2, sym_1_3435
+.globl sym_1_3436
+sym_1_3436: la $2, sym_1_3436
+.globl sym_1_3437
+sym_1_3437: la $2, sym_1_3437
+.globl sym_1_3438
+sym_1_3438: la $2, sym_1_3438
+.globl sym_1_3439
+sym_1_3439: la $2, sym_1_3439
+.globl sym_1_3440
+sym_1_3440: la $2, sym_1_3440
+.globl sym_1_3441
+sym_1_3441: la $2, sym_1_3441
+.globl sym_1_3442
+sym_1_3442: la $2, sym_1_3442
+.globl sym_1_3443
+sym_1_3443: la $2, sym_1_3443
+.globl sym_1_3444
+sym_1_3444: la $2, sym_1_3444
+.globl sym_1_3445
+sym_1_3445: la $2, sym_1_3445
+.globl sym_1_3446
+sym_1_3446: la $2, sym_1_3446
+.globl sym_1_3447
+sym_1_3447: la $2, sym_1_3447
+.globl sym_1_3448
+sym_1_3448: la $2, sym_1_3448
+.globl sym_1_3449
+sym_1_3449: la $2, sym_1_3449
+.globl sym_1_3450
+sym_1_3450: la $2, sym_1_3450
+.globl sym_1_3451
+sym_1_3451: la $2, sym_1_3451
+.globl sym_1_3452
+sym_1_3452: la $2, sym_1_3452
+.globl sym_1_3453
+sym_1_3453: la $2, sym_1_3453
+.globl sym_1_3454
+sym_1_3454: la $2, sym_1_3454
+.globl sym_1_3455
+sym_1_3455: la $2, sym_1_3455
+.globl sym_1_3456
+sym_1_3456: la $2, sym_1_3456
+.globl sym_1_3457
+sym_1_3457: la $2, sym_1_3457
+.globl sym_1_3458
+sym_1_3458: la $2, sym_1_3458
+.globl sym_1_3459
+sym_1_3459: la $2, sym_1_3459
+.globl sym_1_3460
+sym_1_3460: la $2, sym_1_3460
+.globl sym_1_3461
+sym_1_3461: la $2, sym_1_3461
+.globl sym_1_3462
+sym_1_3462: la $2, sym_1_3462
+.globl sym_1_3463
+sym_1_3463: la $2, sym_1_3463
+.globl sym_1_3464
+sym_1_3464: la $2, sym_1_3464
+.globl sym_1_3465
+sym_1_3465: la $2, sym_1_3465
+.globl sym_1_3466
+sym_1_3466: la $2, sym_1_3466
+.globl sym_1_3467
+sym_1_3467: la $2, sym_1_3467
+.globl sym_1_3468
+sym_1_3468: la $2, sym_1_3468
+.globl sym_1_3469
+sym_1_3469: la $2, sym_1_3469
+.globl sym_1_3470
+sym_1_3470: la $2, sym_1_3470
+.globl sym_1_3471
+sym_1_3471: la $2, sym_1_3471
+.globl sym_1_3472
+sym_1_3472: la $2, sym_1_3472
+.globl sym_1_3473
+sym_1_3473: la $2, sym_1_3473
+.globl sym_1_3474
+sym_1_3474: la $2, sym_1_3474
+.globl sym_1_3475
+sym_1_3475: la $2, sym_1_3475
+.globl sym_1_3476
+sym_1_3476: la $2, sym_1_3476
+.globl sym_1_3477
+sym_1_3477: la $2, sym_1_3477
+.globl sym_1_3478
+sym_1_3478: la $2, sym_1_3478
+.globl sym_1_3479
+sym_1_3479: la $2, sym_1_3479
+.globl sym_1_3480
+sym_1_3480: la $2, sym_1_3480
+.globl sym_1_3481
+sym_1_3481: la $2, sym_1_3481
+.globl sym_1_3482
+sym_1_3482: la $2, sym_1_3482
+.globl sym_1_3483
+sym_1_3483: la $2, sym_1_3483
+.globl sym_1_3484
+sym_1_3484: la $2, sym_1_3484
+.globl sym_1_3485
+sym_1_3485: la $2, sym_1_3485
+.globl sym_1_3486
+sym_1_3486: la $2, sym_1_3486
+.globl sym_1_3487
+sym_1_3487: la $2, sym_1_3487
+.globl sym_1_3488
+sym_1_3488: la $2, sym_1_3488
+.globl sym_1_3489
+sym_1_3489: la $2, sym_1_3489
+.globl sym_1_3490
+sym_1_3490: la $2, sym_1_3490
+.globl sym_1_3491
+sym_1_3491: la $2, sym_1_3491
+.globl sym_1_3492
+sym_1_3492: la $2, sym_1_3492
+.globl sym_1_3493
+sym_1_3493: la $2, sym_1_3493
+.globl sym_1_3494
+sym_1_3494: la $2, sym_1_3494
+.globl sym_1_3495
+sym_1_3495: la $2, sym_1_3495
+.globl sym_1_3496
+sym_1_3496: la $2, sym_1_3496
+.globl sym_1_3497
+sym_1_3497: la $2, sym_1_3497
+.globl sym_1_3498
+sym_1_3498: la $2, sym_1_3498
+.globl sym_1_3499
+sym_1_3499: la $2, sym_1_3499
+.globl sym_1_3500
+sym_1_3500: la $2, sym_1_3500
+.globl sym_1_3501
+sym_1_3501: la $2, sym_1_3501
+.globl sym_1_3502
+sym_1_3502: la $2, sym_1_3502
+.globl sym_1_3503
+sym_1_3503: la $2, sym_1_3503
+.globl sym_1_3504
+sym_1_3504: la $2, sym_1_3504
+.globl sym_1_3505
+sym_1_3505: la $2, sym_1_3505
+.globl sym_1_3506
+sym_1_3506: la $2, sym_1_3506
+.globl sym_1_3507
+sym_1_3507: la $2, sym_1_3507
+.globl sym_1_3508
+sym_1_3508: la $2, sym_1_3508
+.globl sym_1_3509
+sym_1_3509: la $2, sym_1_3509
+.globl sym_1_3510
+sym_1_3510: la $2, sym_1_3510
+.globl sym_1_3511
+sym_1_3511: la $2, sym_1_3511
+.globl sym_1_3512
+sym_1_3512: la $2, sym_1_3512
+.globl sym_1_3513
+sym_1_3513: la $2, sym_1_3513
+.globl sym_1_3514
+sym_1_3514: la $2, sym_1_3514
+.globl sym_1_3515
+sym_1_3515: la $2, sym_1_3515
+.globl sym_1_3516
+sym_1_3516: la $2, sym_1_3516
+.globl sym_1_3517
+sym_1_3517: la $2, sym_1_3517
+.globl sym_1_3518
+sym_1_3518: la $2, sym_1_3518
+.globl sym_1_3519
+sym_1_3519: la $2, sym_1_3519
+.globl sym_1_3520
+sym_1_3520: la $2, sym_1_3520
+.globl sym_1_3521
+sym_1_3521: la $2, sym_1_3521
+.globl sym_1_3522
+sym_1_3522: la $2, sym_1_3522
+.globl sym_1_3523
+sym_1_3523: la $2, sym_1_3523
+.globl sym_1_3524
+sym_1_3524: la $2, sym_1_3524
+.globl sym_1_3525
+sym_1_3525: la $2, sym_1_3525
+.globl sym_1_3526
+sym_1_3526: la $2, sym_1_3526
+.globl sym_1_3527
+sym_1_3527: la $2, sym_1_3527
+.globl sym_1_3528
+sym_1_3528: la $2, sym_1_3528
+.globl sym_1_3529
+sym_1_3529: la $2, sym_1_3529
+.globl sym_1_3530
+sym_1_3530: la $2, sym_1_3530
+.globl sym_1_3531
+sym_1_3531: la $2, sym_1_3531
+.globl sym_1_3532
+sym_1_3532: la $2, sym_1_3532
+.globl sym_1_3533
+sym_1_3533: la $2, sym_1_3533
+.globl sym_1_3534
+sym_1_3534: la $2, sym_1_3534
+.globl sym_1_3535
+sym_1_3535: la $2, sym_1_3535
+.globl sym_1_3536
+sym_1_3536: la $2, sym_1_3536
+.globl sym_1_3537
+sym_1_3537: la $2, sym_1_3537
+.globl sym_1_3538
+sym_1_3538: la $2, sym_1_3538
+.globl sym_1_3539
+sym_1_3539: la $2, sym_1_3539
+.globl sym_1_3540
+sym_1_3540: la $2, sym_1_3540
+.globl sym_1_3541
+sym_1_3541: la $2, sym_1_3541
+.globl sym_1_3542
+sym_1_3542: la $2, sym_1_3542
+.globl sym_1_3543
+sym_1_3543: la $2, sym_1_3543
+.globl sym_1_3544
+sym_1_3544: la $2, sym_1_3544
+.globl sym_1_3545
+sym_1_3545: la $2, sym_1_3545
+.globl sym_1_3546
+sym_1_3546: la $2, sym_1_3546
+.globl sym_1_3547
+sym_1_3547: la $2, sym_1_3547
+.globl sym_1_3548
+sym_1_3548: la $2, sym_1_3548
+.globl sym_1_3549
+sym_1_3549: la $2, sym_1_3549
+.globl sym_1_3550
+sym_1_3550: la $2, sym_1_3550
+.globl sym_1_3551
+sym_1_3551: la $2, sym_1_3551
+.globl sym_1_3552
+sym_1_3552: la $2, sym_1_3552
+.globl sym_1_3553
+sym_1_3553: la $2, sym_1_3553
+.globl sym_1_3554
+sym_1_3554: la $2, sym_1_3554
+.globl sym_1_3555
+sym_1_3555: la $2, sym_1_3555
+.globl sym_1_3556
+sym_1_3556: la $2, sym_1_3556
+.globl sym_1_3557
+sym_1_3557: la $2, sym_1_3557
+.globl sym_1_3558
+sym_1_3558: la $2, sym_1_3558
+.globl sym_1_3559
+sym_1_3559: la $2, sym_1_3559
+.globl sym_1_3560
+sym_1_3560: la $2, sym_1_3560
+.globl sym_1_3561
+sym_1_3561: la $2, sym_1_3561
+.globl sym_1_3562
+sym_1_3562: la $2, sym_1_3562
+.globl sym_1_3563
+sym_1_3563: la $2, sym_1_3563
+.globl sym_1_3564
+sym_1_3564: la $2, sym_1_3564
+.globl sym_1_3565
+sym_1_3565: la $2, sym_1_3565
+.globl sym_1_3566
+sym_1_3566: la $2, sym_1_3566
+.globl sym_1_3567
+sym_1_3567: la $2, sym_1_3567
+.globl sym_1_3568
+sym_1_3568: la $2, sym_1_3568
+.globl sym_1_3569
+sym_1_3569: la $2, sym_1_3569
+.globl sym_1_3570
+sym_1_3570: la $2, sym_1_3570
+.globl sym_1_3571
+sym_1_3571: la $2, sym_1_3571
+.globl sym_1_3572
+sym_1_3572: la $2, sym_1_3572
+.globl sym_1_3573
+sym_1_3573: la $2, sym_1_3573
+.globl sym_1_3574
+sym_1_3574: la $2, sym_1_3574
+.globl sym_1_3575
+sym_1_3575: la $2, sym_1_3575
+.globl sym_1_3576
+sym_1_3576: la $2, sym_1_3576
+.globl sym_1_3577
+sym_1_3577: la $2, sym_1_3577
+.globl sym_1_3578
+sym_1_3578: la $2, sym_1_3578
+.globl sym_1_3579
+sym_1_3579: la $2, sym_1_3579
+.globl sym_1_3580
+sym_1_3580: la $2, sym_1_3580
+.globl sym_1_3581
+sym_1_3581: la $2, sym_1_3581
+.globl sym_1_3582
+sym_1_3582: la $2, sym_1_3582
+.globl sym_1_3583
+sym_1_3583: la $2, sym_1_3583
+.globl sym_1_3584
+sym_1_3584: la $2, sym_1_3584
+.globl sym_1_3585
+sym_1_3585: la $2, sym_1_3585
+.globl sym_1_3586
+sym_1_3586: la $2, sym_1_3586
+.globl sym_1_3587
+sym_1_3587: la $2, sym_1_3587
+.globl sym_1_3588
+sym_1_3588: la $2, sym_1_3588
+.globl sym_1_3589
+sym_1_3589: la $2, sym_1_3589
+.globl sym_1_3590
+sym_1_3590: la $2, sym_1_3590
+.globl sym_1_3591
+sym_1_3591: la $2, sym_1_3591
+.globl sym_1_3592
+sym_1_3592: la $2, sym_1_3592
+.globl sym_1_3593
+sym_1_3593: la $2, sym_1_3593
+.globl sym_1_3594
+sym_1_3594: la $2, sym_1_3594
+.globl sym_1_3595
+sym_1_3595: la $2, sym_1_3595
+.globl sym_1_3596
+sym_1_3596: la $2, sym_1_3596
+.globl sym_1_3597
+sym_1_3597: la $2, sym_1_3597
+.globl sym_1_3598
+sym_1_3598: la $2, sym_1_3598
+.globl sym_1_3599
+sym_1_3599: la $2, sym_1_3599
+.globl sym_1_3600
+sym_1_3600: la $2, sym_1_3600
+.globl sym_1_3601
+sym_1_3601: la $2, sym_1_3601
+.globl sym_1_3602
+sym_1_3602: la $2, sym_1_3602
+.globl sym_1_3603
+sym_1_3603: la $2, sym_1_3603
+.globl sym_1_3604
+sym_1_3604: la $2, sym_1_3604
+.globl sym_1_3605
+sym_1_3605: la $2, sym_1_3605
+.globl sym_1_3606
+sym_1_3606: la $2, sym_1_3606
+.globl sym_1_3607
+sym_1_3607: la $2, sym_1_3607
+.globl sym_1_3608
+sym_1_3608: la $2, sym_1_3608
+.globl sym_1_3609
+sym_1_3609: la $2, sym_1_3609
+.globl sym_1_3610
+sym_1_3610: la $2, sym_1_3610
+.globl sym_1_3611
+sym_1_3611: la $2, sym_1_3611
+.globl sym_1_3612
+sym_1_3612: la $2, sym_1_3612
+.globl sym_1_3613
+sym_1_3613: la $2, sym_1_3613
+.globl sym_1_3614
+sym_1_3614: la $2, sym_1_3614
+.globl sym_1_3615
+sym_1_3615: la $2, sym_1_3615
+.globl sym_1_3616
+sym_1_3616: la $2, sym_1_3616
+.globl sym_1_3617
+sym_1_3617: la $2, sym_1_3617
+.globl sym_1_3618
+sym_1_3618: la $2, sym_1_3618
+.globl sym_1_3619
+sym_1_3619: la $2, sym_1_3619
+.globl sym_1_3620
+sym_1_3620: la $2, sym_1_3620
+.globl sym_1_3621
+sym_1_3621: la $2, sym_1_3621
+.globl sym_1_3622
+sym_1_3622: la $2, sym_1_3622
+.globl sym_1_3623
+sym_1_3623: la $2, sym_1_3623
+.globl sym_1_3624
+sym_1_3624: la $2, sym_1_3624
+.globl sym_1_3625
+sym_1_3625: la $2, sym_1_3625
+.globl sym_1_3626
+sym_1_3626: la $2, sym_1_3626
+.globl sym_1_3627
+sym_1_3627: la $2, sym_1_3627
+.globl sym_1_3628
+sym_1_3628: la $2, sym_1_3628
+.globl sym_1_3629
+sym_1_3629: la $2, sym_1_3629
+.globl sym_1_3630
+sym_1_3630: la $2, sym_1_3630
+.globl sym_1_3631
+sym_1_3631: la $2, sym_1_3631
+.globl sym_1_3632
+sym_1_3632: la $2, sym_1_3632
+.globl sym_1_3633
+sym_1_3633: la $2, sym_1_3633
+.globl sym_1_3634
+sym_1_3634: la $2, sym_1_3634
+.globl sym_1_3635
+sym_1_3635: la $2, sym_1_3635
+.globl sym_1_3636
+sym_1_3636: la $2, sym_1_3636
+.globl sym_1_3637
+sym_1_3637: la $2, sym_1_3637
+.globl sym_1_3638
+sym_1_3638: la $2, sym_1_3638
+.globl sym_1_3639
+sym_1_3639: la $2, sym_1_3639
+.globl sym_1_3640
+sym_1_3640: la $2, sym_1_3640
+.globl sym_1_3641
+sym_1_3641: la $2, sym_1_3641
+.globl sym_1_3642
+sym_1_3642: la $2, sym_1_3642
+.globl sym_1_3643
+sym_1_3643: la $2, sym_1_3643
+.globl sym_1_3644
+sym_1_3644: la $2, sym_1_3644
+.globl sym_1_3645
+sym_1_3645: la $2, sym_1_3645
+.globl sym_1_3646
+sym_1_3646: la $2, sym_1_3646
+.globl sym_1_3647
+sym_1_3647: la $2, sym_1_3647
+.globl sym_1_3648
+sym_1_3648: la $2, sym_1_3648
+.globl sym_1_3649
+sym_1_3649: la $2, sym_1_3649
+.globl sym_1_3650
+sym_1_3650: la $2, sym_1_3650
+.globl sym_1_3651
+sym_1_3651: la $2, sym_1_3651
+.globl sym_1_3652
+sym_1_3652: la $2, sym_1_3652
+.globl sym_1_3653
+sym_1_3653: la $2, sym_1_3653
+.globl sym_1_3654
+sym_1_3654: la $2, sym_1_3654
+.globl sym_1_3655
+sym_1_3655: la $2, sym_1_3655
+.globl sym_1_3656
+sym_1_3656: la $2, sym_1_3656
+.globl sym_1_3657
+sym_1_3657: la $2, sym_1_3657
+.globl sym_1_3658
+sym_1_3658: la $2, sym_1_3658
+.globl sym_1_3659
+sym_1_3659: la $2, sym_1_3659
+.globl sym_1_3660
+sym_1_3660: la $2, sym_1_3660
+.globl sym_1_3661
+sym_1_3661: la $2, sym_1_3661
+.globl sym_1_3662
+sym_1_3662: la $2, sym_1_3662
+.globl sym_1_3663
+sym_1_3663: la $2, sym_1_3663
+.globl sym_1_3664
+sym_1_3664: la $2, sym_1_3664
+.globl sym_1_3665
+sym_1_3665: la $2, sym_1_3665
+.globl sym_1_3666
+sym_1_3666: la $2, sym_1_3666
+.globl sym_1_3667
+sym_1_3667: la $2, sym_1_3667
+.globl sym_1_3668
+sym_1_3668: la $2, sym_1_3668
+.globl sym_1_3669
+sym_1_3669: la $2, sym_1_3669
+.globl sym_1_3670
+sym_1_3670: la $2, sym_1_3670
+.globl sym_1_3671
+sym_1_3671: la $2, sym_1_3671
+.globl sym_1_3672
+sym_1_3672: la $2, sym_1_3672
+.globl sym_1_3673
+sym_1_3673: la $2, sym_1_3673
+.globl sym_1_3674
+sym_1_3674: la $2, sym_1_3674
+.globl sym_1_3675
+sym_1_3675: la $2, sym_1_3675
+.globl sym_1_3676
+sym_1_3676: la $2, sym_1_3676
+.globl sym_1_3677
+sym_1_3677: la $2, sym_1_3677
+.globl sym_1_3678
+sym_1_3678: la $2, sym_1_3678
+.globl sym_1_3679
+sym_1_3679: la $2, sym_1_3679
+.globl sym_1_3680
+sym_1_3680: la $2, sym_1_3680
+.globl sym_1_3681
+sym_1_3681: la $2, sym_1_3681
+.globl sym_1_3682
+sym_1_3682: la $2, sym_1_3682
+.globl sym_1_3683
+sym_1_3683: la $2, sym_1_3683
+.globl sym_1_3684
+sym_1_3684: la $2, sym_1_3684
+.globl sym_1_3685
+sym_1_3685: la $2, sym_1_3685
+.globl sym_1_3686
+sym_1_3686: la $2, sym_1_3686
+.globl sym_1_3687
+sym_1_3687: la $2, sym_1_3687
+.globl sym_1_3688
+sym_1_3688: la $2, sym_1_3688
+.globl sym_1_3689
+sym_1_3689: la $2, sym_1_3689
+.globl sym_1_3690
+sym_1_3690: la $2, sym_1_3690
+.globl sym_1_3691
+sym_1_3691: la $2, sym_1_3691
+.globl sym_1_3692
+sym_1_3692: la $2, sym_1_3692
+.globl sym_1_3693
+sym_1_3693: la $2, sym_1_3693
+.globl sym_1_3694
+sym_1_3694: la $2, sym_1_3694
+.globl sym_1_3695
+sym_1_3695: la $2, sym_1_3695
+.globl sym_1_3696
+sym_1_3696: la $2, sym_1_3696
+.globl sym_1_3697
+sym_1_3697: la $2, sym_1_3697
+.globl sym_1_3698
+sym_1_3698: la $2, sym_1_3698
+.globl sym_1_3699
+sym_1_3699: la $2, sym_1_3699
+.globl sym_1_3700
+sym_1_3700: la $2, sym_1_3700
+.globl sym_1_3701
+sym_1_3701: la $2, sym_1_3701
+.globl sym_1_3702
+sym_1_3702: la $2, sym_1_3702
+.globl sym_1_3703
+sym_1_3703: la $2, sym_1_3703
+.globl sym_1_3704
+sym_1_3704: la $2, sym_1_3704
+.globl sym_1_3705
+sym_1_3705: la $2, sym_1_3705
+.globl sym_1_3706
+sym_1_3706: la $2, sym_1_3706
+.globl sym_1_3707
+sym_1_3707: la $2, sym_1_3707
+.globl sym_1_3708
+sym_1_3708: la $2, sym_1_3708
+.globl sym_1_3709
+sym_1_3709: la $2, sym_1_3709
+.globl sym_1_3710
+sym_1_3710: la $2, sym_1_3710
+.globl sym_1_3711
+sym_1_3711: la $2, sym_1_3711
+.globl sym_1_3712
+sym_1_3712: la $2, sym_1_3712
+.globl sym_1_3713
+sym_1_3713: la $2, sym_1_3713
+.globl sym_1_3714
+sym_1_3714: la $2, sym_1_3714
+.globl sym_1_3715
+sym_1_3715: la $2, sym_1_3715
+.globl sym_1_3716
+sym_1_3716: la $2, sym_1_3716
+.globl sym_1_3717
+sym_1_3717: la $2, sym_1_3717
+.globl sym_1_3718
+sym_1_3718: la $2, sym_1_3718
+.globl sym_1_3719
+sym_1_3719: la $2, sym_1_3719
+.globl sym_1_3720
+sym_1_3720: la $2, sym_1_3720
+.globl sym_1_3721
+sym_1_3721: la $2, sym_1_3721
+.globl sym_1_3722
+sym_1_3722: la $2, sym_1_3722
+.globl sym_1_3723
+sym_1_3723: la $2, sym_1_3723
+.globl sym_1_3724
+sym_1_3724: la $2, sym_1_3724
+.globl sym_1_3725
+sym_1_3725: la $2, sym_1_3725
+.globl sym_1_3726
+sym_1_3726: la $2, sym_1_3726
+.globl sym_1_3727
+sym_1_3727: la $2, sym_1_3727
+.globl sym_1_3728
+sym_1_3728: la $2, sym_1_3728
+.globl sym_1_3729
+sym_1_3729: la $2, sym_1_3729
+.globl sym_1_3730
+sym_1_3730: la $2, sym_1_3730
+.globl sym_1_3731
+sym_1_3731: la $2, sym_1_3731
+.globl sym_1_3732
+sym_1_3732: la $2, sym_1_3732
+.globl sym_1_3733
+sym_1_3733: la $2, sym_1_3733
+.globl sym_1_3734
+sym_1_3734: la $2, sym_1_3734
+.globl sym_1_3735
+sym_1_3735: la $2, sym_1_3735
+.globl sym_1_3736
+sym_1_3736: la $2, sym_1_3736
+.globl sym_1_3737
+sym_1_3737: la $2, sym_1_3737
+.globl sym_1_3738
+sym_1_3738: la $2, sym_1_3738
+.globl sym_1_3739
+sym_1_3739: la $2, sym_1_3739
+.globl sym_1_3740
+sym_1_3740: la $2, sym_1_3740
+.globl sym_1_3741
+sym_1_3741: la $2, sym_1_3741
+.globl sym_1_3742
+sym_1_3742: la $2, sym_1_3742
+.globl sym_1_3743
+sym_1_3743: la $2, sym_1_3743
+.globl sym_1_3744
+sym_1_3744: la $2, sym_1_3744
+.globl sym_1_3745
+sym_1_3745: la $2, sym_1_3745
+.globl sym_1_3746
+sym_1_3746: la $2, sym_1_3746
+.globl sym_1_3747
+sym_1_3747: la $2, sym_1_3747
+.globl sym_1_3748
+sym_1_3748: la $2, sym_1_3748
+.globl sym_1_3749
+sym_1_3749: la $2, sym_1_3749
+.globl sym_1_3750
+sym_1_3750: la $2, sym_1_3750
+.globl sym_1_3751
+sym_1_3751: la $2, sym_1_3751
+.globl sym_1_3752
+sym_1_3752: la $2, sym_1_3752
+.globl sym_1_3753
+sym_1_3753: la $2, sym_1_3753
+.globl sym_1_3754
+sym_1_3754: la $2, sym_1_3754
+.globl sym_1_3755
+sym_1_3755: la $2, sym_1_3755
+.globl sym_1_3756
+sym_1_3756: la $2, sym_1_3756
+.globl sym_1_3757
+sym_1_3757: la $2, sym_1_3757
+.globl sym_1_3758
+sym_1_3758: la $2, sym_1_3758
+.globl sym_1_3759
+sym_1_3759: la $2, sym_1_3759
+.globl sym_1_3760
+sym_1_3760: la $2, sym_1_3760
+.globl sym_1_3761
+sym_1_3761: la $2, sym_1_3761
+.globl sym_1_3762
+sym_1_3762: la $2, sym_1_3762
+.globl sym_1_3763
+sym_1_3763: la $2, sym_1_3763
+.globl sym_1_3764
+sym_1_3764: la $2, sym_1_3764
+.globl sym_1_3765
+sym_1_3765: la $2, sym_1_3765
+.globl sym_1_3766
+sym_1_3766: la $2, sym_1_3766
+.globl sym_1_3767
+sym_1_3767: la $2, sym_1_3767
+.globl sym_1_3768
+sym_1_3768: la $2, sym_1_3768
+.globl sym_1_3769
+sym_1_3769: la $2, sym_1_3769
+.globl sym_1_3770
+sym_1_3770: la $2, sym_1_3770
+.globl sym_1_3771
+sym_1_3771: la $2, sym_1_3771
+.globl sym_1_3772
+sym_1_3772: la $2, sym_1_3772
+.globl sym_1_3773
+sym_1_3773: la $2, sym_1_3773
+.globl sym_1_3774
+sym_1_3774: la $2, sym_1_3774
+.globl sym_1_3775
+sym_1_3775: la $2, sym_1_3775
+.globl sym_1_3776
+sym_1_3776: la $2, sym_1_3776
+.globl sym_1_3777
+sym_1_3777: la $2, sym_1_3777
+.globl sym_1_3778
+sym_1_3778: la $2, sym_1_3778
+.globl sym_1_3779
+sym_1_3779: la $2, sym_1_3779
+.globl sym_1_3780
+sym_1_3780: la $2, sym_1_3780
+.globl sym_1_3781
+sym_1_3781: la $2, sym_1_3781
+.globl sym_1_3782
+sym_1_3782: la $2, sym_1_3782
+.globl sym_1_3783
+sym_1_3783: la $2, sym_1_3783
+.globl sym_1_3784
+sym_1_3784: la $2, sym_1_3784
+.globl sym_1_3785
+sym_1_3785: la $2, sym_1_3785
+.globl sym_1_3786
+sym_1_3786: la $2, sym_1_3786
+.globl sym_1_3787
+sym_1_3787: la $2, sym_1_3787
+.globl sym_1_3788
+sym_1_3788: la $2, sym_1_3788
+.globl sym_1_3789
+sym_1_3789: la $2, sym_1_3789
+.globl sym_1_3790
+sym_1_3790: la $2, sym_1_3790
+.globl sym_1_3791
+sym_1_3791: la $2, sym_1_3791
+.globl sym_1_3792
+sym_1_3792: la $2, sym_1_3792
+.globl sym_1_3793
+sym_1_3793: la $2, sym_1_3793
+.globl sym_1_3794
+sym_1_3794: la $2, sym_1_3794
+.globl sym_1_3795
+sym_1_3795: la $2, sym_1_3795
+.globl sym_1_3796
+sym_1_3796: la $2, sym_1_3796
+.globl sym_1_3797
+sym_1_3797: la $2, sym_1_3797
+.globl sym_1_3798
+sym_1_3798: la $2, sym_1_3798
+.globl sym_1_3799
+sym_1_3799: la $2, sym_1_3799
+.globl sym_1_3800
+sym_1_3800: la $2, sym_1_3800
+.globl sym_1_3801
+sym_1_3801: la $2, sym_1_3801
+.globl sym_1_3802
+sym_1_3802: la $2, sym_1_3802
+.globl sym_1_3803
+sym_1_3803: la $2, sym_1_3803
+.globl sym_1_3804
+sym_1_3804: la $2, sym_1_3804
+.globl sym_1_3805
+sym_1_3805: la $2, sym_1_3805
+.globl sym_1_3806
+sym_1_3806: la $2, sym_1_3806
+.globl sym_1_3807
+sym_1_3807: la $2, sym_1_3807
+.globl sym_1_3808
+sym_1_3808: la $2, sym_1_3808
+.globl sym_1_3809
+sym_1_3809: la $2, sym_1_3809
+.globl sym_1_3810
+sym_1_3810: la $2, sym_1_3810
+.globl sym_1_3811
+sym_1_3811: la $2, sym_1_3811
+.globl sym_1_3812
+sym_1_3812: la $2, sym_1_3812
+.globl sym_1_3813
+sym_1_3813: la $2, sym_1_3813
+.globl sym_1_3814
+sym_1_3814: la $2, sym_1_3814
+.globl sym_1_3815
+sym_1_3815: la $2, sym_1_3815
+.globl sym_1_3816
+sym_1_3816: la $2, sym_1_3816
+.globl sym_1_3817
+sym_1_3817: la $2, sym_1_3817
+.globl sym_1_3818
+sym_1_3818: la $2, sym_1_3818
+.globl sym_1_3819
+sym_1_3819: la $2, sym_1_3819
+.globl sym_1_3820
+sym_1_3820: la $2, sym_1_3820
+.globl sym_1_3821
+sym_1_3821: la $2, sym_1_3821
+.globl sym_1_3822
+sym_1_3822: la $2, sym_1_3822
+.globl sym_1_3823
+sym_1_3823: la $2, sym_1_3823
+.globl sym_1_3824
+sym_1_3824: la $2, sym_1_3824
+.globl sym_1_3825
+sym_1_3825: la $2, sym_1_3825
+.globl sym_1_3826
+sym_1_3826: la $2, sym_1_3826
+.globl sym_1_3827
+sym_1_3827: la $2, sym_1_3827
+.globl sym_1_3828
+sym_1_3828: la $2, sym_1_3828
+.globl sym_1_3829
+sym_1_3829: la $2, sym_1_3829
+.globl sym_1_3830
+sym_1_3830: la $2, sym_1_3830
+.globl sym_1_3831
+sym_1_3831: la $2, sym_1_3831
+.globl sym_1_3832
+sym_1_3832: la $2, sym_1_3832
+.globl sym_1_3833
+sym_1_3833: la $2, sym_1_3833
+.globl sym_1_3834
+sym_1_3834: la $2, sym_1_3834
+.globl sym_1_3835
+sym_1_3835: la $2, sym_1_3835
+.globl sym_1_3836
+sym_1_3836: la $2, sym_1_3836
+.globl sym_1_3837
+sym_1_3837: la $2, sym_1_3837
+.globl sym_1_3838
+sym_1_3838: la $2, sym_1_3838
+.globl sym_1_3839
+sym_1_3839: la $2, sym_1_3839
+.globl sym_1_3840
+sym_1_3840: la $2, sym_1_3840
+.globl sym_1_3841
+sym_1_3841: la $2, sym_1_3841
+.globl sym_1_3842
+sym_1_3842: la $2, sym_1_3842
+.globl sym_1_3843
+sym_1_3843: la $2, sym_1_3843
+.globl sym_1_3844
+sym_1_3844: la $2, sym_1_3844
+.globl sym_1_3845
+sym_1_3845: la $2, sym_1_3845
+.globl sym_1_3846
+sym_1_3846: la $2, sym_1_3846
+.globl sym_1_3847
+sym_1_3847: la $2, sym_1_3847
+.globl sym_1_3848
+sym_1_3848: la $2, sym_1_3848
+.globl sym_1_3849
+sym_1_3849: la $2, sym_1_3849
+.globl sym_1_3850
+sym_1_3850: la $2, sym_1_3850
+.globl sym_1_3851
+sym_1_3851: la $2, sym_1_3851
+.globl sym_1_3852
+sym_1_3852: la $2, sym_1_3852
+.globl sym_1_3853
+sym_1_3853: la $2, sym_1_3853
+.globl sym_1_3854
+sym_1_3854: la $2, sym_1_3854
+.globl sym_1_3855
+sym_1_3855: la $2, sym_1_3855
+.globl sym_1_3856
+sym_1_3856: la $2, sym_1_3856
+.globl sym_1_3857
+sym_1_3857: la $2, sym_1_3857
+.globl sym_1_3858
+sym_1_3858: la $2, sym_1_3858
+.globl sym_1_3859
+sym_1_3859: la $2, sym_1_3859
+.globl sym_1_3860
+sym_1_3860: la $2, sym_1_3860
+.globl sym_1_3861
+sym_1_3861: la $2, sym_1_3861
+.globl sym_1_3862
+sym_1_3862: la $2, sym_1_3862
+.globl sym_1_3863
+sym_1_3863: la $2, sym_1_3863
+.globl sym_1_3864
+sym_1_3864: la $2, sym_1_3864
+.globl sym_1_3865
+sym_1_3865: la $2, sym_1_3865
+.globl sym_1_3866
+sym_1_3866: la $2, sym_1_3866
+.globl sym_1_3867
+sym_1_3867: la $2, sym_1_3867
+.globl sym_1_3868
+sym_1_3868: la $2, sym_1_3868
+.globl sym_1_3869
+sym_1_3869: la $2, sym_1_3869
+.globl sym_1_3870
+sym_1_3870: la $2, sym_1_3870
+.globl sym_1_3871
+sym_1_3871: la $2, sym_1_3871
+.globl sym_1_3872
+sym_1_3872: la $2, sym_1_3872
+.globl sym_1_3873
+sym_1_3873: la $2, sym_1_3873
+.globl sym_1_3874
+sym_1_3874: la $2, sym_1_3874
+.globl sym_1_3875
+sym_1_3875: la $2, sym_1_3875
+.globl sym_1_3876
+sym_1_3876: la $2, sym_1_3876
+.globl sym_1_3877
+sym_1_3877: la $2, sym_1_3877
+.globl sym_1_3878
+sym_1_3878: la $2, sym_1_3878
+.globl sym_1_3879
+sym_1_3879: la $2, sym_1_3879
+.globl sym_1_3880
+sym_1_3880: la $2, sym_1_3880
+.globl sym_1_3881
+sym_1_3881: la $2, sym_1_3881
+.globl sym_1_3882
+sym_1_3882: la $2, sym_1_3882
+.globl sym_1_3883
+sym_1_3883: la $2, sym_1_3883
+.globl sym_1_3884
+sym_1_3884: la $2, sym_1_3884
+.globl sym_1_3885
+sym_1_3885: la $2, sym_1_3885
+.globl sym_1_3886
+sym_1_3886: la $2, sym_1_3886
+.globl sym_1_3887
+sym_1_3887: la $2, sym_1_3887
+.globl sym_1_3888
+sym_1_3888: la $2, sym_1_3888
+.globl sym_1_3889
+sym_1_3889: la $2, sym_1_3889
+.globl sym_1_3890
+sym_1_3890: la $2, sym_1_3890
+.globl sym_1_3891
+sym_1_3891: la $2, sym_1_3891
+.globl sym_1_3892
+sym_1_3892: la $2, sym_1_3892
+.globl sym_1_3893
+sym_1_3893: la $2, sym_1_3893
+.globl sym_1_3894
+sym_1_3894: la $2, sym_1_3894
+.globl sym_1_3895
+sym_1_3895: la $2, sym_1_3895
+.globl sym_1_3896
+sym_1_3896: la $2, sym_1_3896
+.globl sym_1_3897
+sym_1_3897: la $2, sym_1_3897
+.globl sym_1_3898
+sym_1_3898: la $2, sym_1_3898
+.globl sym_1_3899
+sym_1_3899: la $2, sym_1_3899
+.globl sym_1_3900
+sym_1_3900: la $2, sym_1_3900
+.globl sym_1_3901
+sym_1_3901: la $2, sym_1_3901
+.globl sym_1_3902
+sym_1_3902: la $2, sym_1_3902
+.globl sym_1_3903
+sym_1_3903: la $2, sym_1_3903
+.globl sym_1_3904
+sym_1_3904: la $2, sym_1_3904
+.globl sym_1_3905
+sym_1_3905: la $2, sym_1_3905
+.globl sym_1_3906
+sym_1_3906: la $2, sym_1_3906
+.globl sym_1_3907
+sym_1_3907: la $2, sym_1_3907
+.globl sym_1_3908
+sym_1_3908: la $2, sym_1_3908
+.globl sym_1_3909
+sym_1_3909: la $2, sym_1_3909
+.globl sym_1_3910
+sym_1_3910: la $2, sym_1_3910
+.globl sym_1_3911
+sym_1_3911: la $2, sym_1_3911
+.globl sym_1_3912
+sym_1_3912: la $2, sym_1_3912
+.globl sym_1_3913
+sym_1_3913: la $2, sym_1_3913
+.globl sym_1_3914
+sym_1_3914: la $2, sym_1_3914
+.globl sym_1_3915
+sym_1_3915: la $2, sym_1_3915
+.globl sym_1_3916
+sym_1_3916: la $2, sym_1_3916
+.globl sym_1_3917
+sym_1_3917: la $2, sym_1_3917
+.globl sym_1_3918
+sym_1_3918: la $2, sym_1_3918
+.globl sym_1_3919
+sym_1_3919: la $2, sym_1_3919
+.globl sym_1_3920
+sym_1_3920: la $2, sym_1_3920
+.globl sym_1_3921
+sym_1_3921: la $2, sym_1_3921
+.globl sym_1_3922
+sym_1_3922: la $2, sym_1_3922
+.globl sym_1_3923
+sym_1_3923: la $2, sym_1_3923
+.globl sym_1_3924
+sym_1_3924: la $2, sym_1_3924
+.globl sym_1_3925
+sym_1_3925: la $2, sym_1_3925
+.globl sym_1_3926
+sym_1_3926: la $2, sym_1_3926
+.globl sym_1_3927
+sym_1_3927: la $2, sym_1_3927
+.globl sym_1_3928
+sym_1_3928: la $2, sym_1_3928
+.globl sym_1_3929
+sym_1_3929: la $2, sym_1_3929
+.globl sym_1_3930
+sym_1_3930: la $2, sym_1_3930
+.globl sym_1_3931
+sym_1_3931: la $2, sym_1_3931
+.globl sym_1_3932
+sym_1_3932: la $2, sym_1_3932
+.globl sym_1_3933
+sym_1_3933: la $2, sym_1_3933
+.globl sym_1_3934
+sym_1_3934: la $2, sym_1_3934
+.globl sym_1_3935
+sym_1_3935: la $2, sym_1_3935
+.globl sym_1_3936
+sym_1_3936: la $2, sym_1_3936
+.globl sym_1_3937
+sym_1_3937: la $2, sym_1_3937
+.globl sym_1_3938
+sym_1_3938: la $2, sym_1_3938
+.globl sym_1_3939
+sym_1_3939: la $2, sym_1_3939
+.globl sym_1_3940
+sym_1_3940: la $2, sym_1_3940
+.globl sym_1_3941
+sym_1_3941: la $2, sym_1_3941
+.globl sym_1_3942
+sym_1_3942: la $2, sym_1_3942
+.globl sym_1_3943
+sym_1_3943: la $2, sym_1_3943
+.globl sym_1_3944
+sym_1_3944: la $2, sym_1_3944
+.globl sym_1_3945
+sym_1_3945: la $2, sym_1_3945
+.globl sym_1_3946
+sym_1_3946: la $2, sym_1_3946
+.globl sym_1_3947
+sym_1_3947: la $2, sym_1_3947
+.globl sym_1_3948
+sym_1_3948: la $2, sym_1_3948
+.globl sym_1_3949
+sym_1_3949: la $2, sym_1_3949
+.globl sym_1_3950
+sym_1_3950: la $2, sym_1_3950
+.globl sym_1_3951
+sym_1_3951: la $2, sym_1_3951
+.globl sym_1_3952
+sym_1_3952: la $2, sym_1_3952
+.globl sym_1_3953
+sym_1_3953: la $2, sym_1_3953
+.globl sym_1_3954
+sym_1_3954: la $2, sym_1_3954
+.globl sym_1_3955
+sym_1_3955: la $2, sym_1_3955
+.globl sym_1_3956
+sym_1_3956: la $2, sym_1_3956
+.globl sym_1_3957
+sym_1_3957: la $2, sym_1_3957
+.globl sym_1_3958
+sym_1_3958: la $2, sym_1_3958
+.globl sym_1_3959
+sym_1_3959: la $2, sym_1_3959
+.globl sym_1_3960
+sym_1_3960: la $2, sym_1_3960
+.globl sym_1_3961
+sym_1_3961: la $2, sym_1_3961
+.globl sym_1_3962
+sym_1_3962: la $2, sym_1_3962
+.globl sym_1_3963
+sym_1_3963: la $2, sym_1_3963
+.globl sym_1_3964
+sym_1_3964: la $2, sym_1_3964
+.globl sym_1_3965
+sym_1_3965: la $2, sym_1_3965
+.globl sym_1_3966
+sym_1_3966: la $2, sym_1_3966
+.globl sym_1_3967
+sym_1_3967: la $2, sym_1_3967
+.globl sym_1_3968
+sym_1_3968: la $2, sym_1_3968
+.globl sym_1_3969
+sym_1_3969: la $2, sym_1_3969
+.globl sym_1_3970
+sym_1_3970: la $2, sym_1_3970
+.globl sym_1_3971
+sym_1_3971: la $2, sym_1_3971
+.globl sym_1_3972
+sym_1_3972: la $2, sym_1_3972
+.globl sym_1_3973
+sym_1_3973: la $2, sym_1_3973
+.globl sym_1_3974
+sym_1_3974: la $2, sym_1_3974
+.globl sym_1_3975
+sym_1_3975: la $2, sym_1_3975
+.globl sym_1_3976
+sym_1_3976: la $2, sym_1_3976
+.globl sym_1_3977
+sym_1_3977: la $2, sym_1_3977
+.globl sym_1_3978
+sym_1_3978: la $2, sym_1_3978
+.globl sym_1_3979
+sym_1_3979: la $2, sym_1_3979
+.globl sym_1_3980
+sym_1_3980: la $2, sym_1_3980
+.globl sym_1_3981
+sym_1_3981: la $2, sym_1_3981
+.globl sym_1_3982
+sym_1_3982: la $2, sym_1_3982
+.globl sym_1_3983
+sym_1_3983: la $2, sym_1_3983
+.globl sym_1_3984
+sym_1_3984: la $2, sym_1_3984
+.globl sym_1_3985
+sym_1_3985: la $2, sym_1_3985
+.globl sym_1_3986
+sym_1_3986: la $2, sym_1_3986
+.globl sym_1_3987
+sym_1_3987: la $2, sym_1_3987
+.globl sym_1_3988
+sym_1_3988: la $2, sym_1_3988
+.globl sym_1_3989
+sym_1_3989: la $2, sym_1_3989
+.globl sym_1_3990
+sym_1_3990: la $2, sym_1_3990
+.globl sym_1_3991
+sym_1_3991: la $2, sym_1_3991
+.globl sym_1_3992
+sym_1_3992: la $2, sym_1_3992
+.globl sym_1_3993
+sym_1_3993: la $2, sym_1_3993
+.globl sym_1_3994
+sym_1_3994: la $2, sym_1_3994
+.globl sym_1_3995
+sym_1_3995: la $2, sym_1_3995
+.globl sym_1_3996
+sym_1_3996: la $2, sym_1_3996
+.globl sym_1_3997
+sym_1_3997: la $2, sym_1_3997
+.globl sym_1_3998
+sym_1_3998: la $2, sym_1_3998
+.globl sym_1_3999
+sym_1_3999: la $2, sym_1_3999
+.globl sym_1_4000
+sym_1_4000: la $2, sym_1_4000
+.globl sym_1_4001
+sym_1_4001: la $2, sym_1_4001
+.globl sym_1_4002
+sym_1_4002: la $2, sym_1_4002
+.globl sym_1_4003
+sym_1_4003: la $2, sym_1_4003
+.globl sym_1_4004
+sym_1_4004: la $2, sym_1_4004
+.globl sym_1_4005
+sym_1_4005: la $2, sym_1_4005
+.globl sym_1_4006
+sym_1_4006: la $2, sym_1_4006
+.globl sym_1_4007
+sym_1_4007: la $2, sym_1_4007
+.globl sym_1_4008
+sym_1_4008: la $2, sym_1_4008
+.globl sym_1_4009
+sym_1_4009: la $2, sym_1_4009
+.globl sym_1_4010
+sym_1_4010: la $2, sym_1_4010
+.globl sym_1_4011
+sym_1_4011: la $2, sym_1_4011
+.globl sym_1_4012
+sym_1_4012: la $2, sym_1_4012
+.globl sym_1_4013
+sym_1_4013: la $2, sym_1_4013
+.globl sym_1_4014
+sym_1_4014: la $2, sym_1_4014
+.globl sym_1_4015
+sym_1_4015: la $2, sym_1_4015
+.globl sym_1_4016
+sym_1_4016: la $2, sym_1_4016
+.globl sym_1_4017
+sym_1_4017: la $2, sym_1_4017
+.globl sym_1_4018
+sym_1_4018: la $2, sym_1_4018
+.globl sym_1_4019
+sym_1_4019: la $2, sym_1_4019
+.globl sym_1_4020
+sym_1_4020: la $2, sym_1_4020
+.globl sym_1_4021
+sym_1_4021: la $2, sym_1_4021
+.globl sym_1_4022
+sym_1_4022: la $2, sym_1_4022
+.globl sym_1_4023
+sym_1_4023: la $2, sym_1_4023
+.globl sym_1_4024
+sym_1_4024: la $2, sym_1_4024
+.globl sym_1_4025
+sym_1_4025: la $2, sym_1_4025
+.globl sym_1_4026
+sym_1_4026: la $2, sym_1_4026
+.globl sym_1_4027
+sym_1_4027: la $2, sym_1_4027
+.globl sym_1_4028
+sym_1_4028: la $2, sym_1_4028
+.globl sym_1_4029
+sym_1_4029: la $2, sym_1_4029
+.globl sym_1_4030
+sym_1_4030: la $2, sym_1_4030
+.globl sym_1_4031
+sym_1_4031: la $2, sym_1_4031
+.globl sym_1_4032
+sym_1_4032: la $2, sym_1_4032
+.globl sym_1_4033
+sym_1_4033: la $2, sym_1_4033
+.globl sym_1_4034
+sym_1_4034: la $2, sym_1_4034
+.globl sym_1_4035
+sym_1_4035: la $2, sym_1_4035
+.globl sym_1_4036
+sym_1_4036: la $2, sym_1_4036
+.globl sym_1_4037
+sym_1_4037: la $2, sym_1_4037
+.globl sym_1_4038
+sym_1_4038: la $2, sym_1_4038
+.globl sym_1_4039
+sym_1_4039: la $2, sym_1_4039
+.globl sym_1_4040
+sym_1_4040: la $2, sym_1_4040
+.globl sym_1_4041
+sym_1_4041: la $2, sym_1_4041
+.globl sym_1_4042
+sym_1_4042: la $2, sym_1_4042
+.globl sym_1_4043
+sym_1_4043: la $2, sym_1_4043
+.globl sym_1_4044
+sym_1_4044: la $2, sym_1_4044
+.globl sym_1_4045
+sym_1_4045: la $2, sym_1_4045
+.globl sym_1_4046
+sym_1_4046: la $2, sym_1_4046
+.globl sym_1_4047
+sym_1_4047: la $2, sym_1_4047
+.globl sym_1_4048
+sym_1_4048: la $2, sym_1_4048
+.globl sym_1_4049
+sym_1_4049: la $2, sym_1_4049
+.globl sym_1_4050
+sym_1_4050: la $2, sym_1_4050
+.globl sym_1_4051
+sym_1_4051: la $2, sym_1_4051
+.globl sym_1_4052
+sym_1_4052: la $2, sym_1_4052
+.globl sym_1_4053
+sym_1_4053: la $2, sym_1_4053
+.globl sym_1_4054
+sym_1_4054: la $2, sym_1_4054
+.globl sym_1_4055
+sym_1_4055: la $2, sym_1_4055
+.globl sym_1_4056
+sym_1_4056: la $2, sym_1_4056
+.globl sym_1_4057
+sym_1_4057: la $2, sym_1_4057
+.globl sym_1_4058
+sym_1_4058: la $2, sym_1_4058
+.globl sym_1_4059
+sym_1_4059: la $2, sym_1_4059
+.globl sym_1_4060
+sym_1_4060: la $2, sym_1_4060
+.globl sym_1_4061
+sym_1_4061: la $2, sym_1_4061
+.globl sym_1_4062
+sym_1_4062: la $2, sym_1_4062
+.globl sym_1_4063
+sym_1_4063: la $2, sym_1_4063
+.globl sym_1_4064
+sym_1_4064: la $2, sym_1_4064
+.globl sym_1_4065
+sym_1_4065: la $2, sym_1_4065
+.globl sym_1_4066
+sym_1_4066: la $2, sym_1_4066
+.globl sym_1_4067
+sym_1_4067: la $2, sym_1_4067
+.globl sym_1_4068
+sym_1_4068: la $2, sym_1_4068
+.globl sym_1_4069
+sym_1_4069: la $2, sym_1_4069
+.globl sym_1_4070
+sym_1_4070: la $2, sym_1_4070
+.globl sym_1_4071
+sym_1_4071: la $2, sym_1_4071
+.globl sym_1_4072
+sym_1_4072: la $2, sym_1_4072
+.globl sym_1_4073
+sym_1_4073: la $2, sym_1_4073
+.globl sym_1_4074
+sym_1_4074: la $2, sym_1_4074
+.globl sym_1_4075
+sym_1_4075: la $2, sym_1_4075
+.globl sym_1_4076
+sym_1_4076: la $2, sym_1_4076
+.globl sym_1_4077
+sym_1_4077: la $2, sym_1_4077
+.globl sym_1_4078
+sym_1_4078: la $2, sym_1_4078
+.globl sym_1_4079
+sym_1_4079: la $2, sym_1_4079
+.globl sym_1_4080
+sym_1_4080: la $2, sym_1_4080
+.globl sym_1_4081
+sym_1_4081: la $2, sym_1_4081
+.globl sym_1_4082
+sym_1_4082: la $2, sym_1_4082
+.globl sym_1_4083
+sym_1_4083: la $2, sym_1_4083
+.globl sym_1_4084
+sym_1_4084: la $2, sym_1_4084
+.globl sym_1_4085
+sym_1_4085: la $2, sym_1_4085
+.globl sym_1_4086
+sym_1_4086: la $2, sym_1_4086
+.globl sym_1_4087
+sym_1_4087: la $2, sym_1_4087
+.globl sym_1_4088
+sym_1_4088: la $2, sym_1_4088
+.globl sym_1_4089
+sym_1_4089: la $2, sym_1_4089
+.globl sym_1_4090
+sym_1_4090: la $2, sym_1_4090
+.globl sym_1_4091
+sym_1_4091: la $2, sym_1_4091
+.globl sym_1_4092
+sym_1_4092: la $2, sym_1_4092
+.globl sym_1_4093
+sym_1_4093: la $2, sym_1_4093
+.globl sym_1_4094
+sym_1_4094: la $2, sym_1_4094
+.globl sym_1_4095
+sym_1_4095: la $2, sym_1_4095
+.globl sym_1_4096
+sym_1_4096: la $2, sym_1_4096
+.globl sym_1_4097
+sym_1_4097: la $2, sym_1_4097
+.globl sym_1_4098
+sym_1_4098: la $2, sym_1_4098
+.globl sym_1_4099
+sym_1_4099: la $2, sym_1_4099
+.globl sym_1_4100
+sym_1_4100: la $2, sym_1_4100
+.globl sym_1_4101
+sym_1_4101: la $2, sym_1_4101
+.globl sym_1_4102
+sym_1_4102: la $2, sym_1_4102
+.globl sym_1_4103
+sym_1_4103: la $2, sym_1_4103
+.globl sym_1_4104
+sym_1_4104: la $2, sym_1_4104
+.globl sym_1_4105
+sym_1_4105: la $2, sym_1_4105
+.globl sym_1_4106
+sym_1_4106: la $2, sym_1_4106
+.globl sym_1_4107
+sym_1_4107: la $2, sym_1_4107
+.globl sym_1_4108
+sym_1_4108: la $2, sym_1_4108
+.globl sym_1_4109
+sym_1_4109: la $2, sym_1_4109
+.globl sym_1_4110
+sym_1_4110: la $2, sym_1_4110
+.globl sym_1_4111
+sym_1_4111: la $2, sym_1_4111
+.globl sym_1_4112
+sym_1_4112: la $2, sym_1_4112
+.globl sym_1_4113
+sym_1_4113: la $2, sym_1_4113
+.globl sym_1_4114
+sym_1_4114: la $2, sym_1_4114
+.globl sym_1_4115
+sym_1_4115: la $2, sym_1_4115
+.globl sym_1_4116
+sym_1_4116: la $2, sym_1_4116
+.globl sym_1_4117
+sym_1_4117: la $2, sym_1_4117
+.globl sym_1_4118
+sym_1_4118: la $2, sym_1_4118
+.globl sym_1_4119
+sym_1_4119: la $2, sym_1_4119
+.globl sym_1_4120
+sym_1_4120: la $2, sym_1_4120
+.globl sym_1_4121
+sym_1_4121: la $2, sym_1_4121
+.globl sym_1_4122
+sym_1_4122: la $2, sym_1_4122
+.globl sym_1_4123
+sym_1_4123: la $2, sym_1_4123
+.globl sym_1_4124
+sym_1_4124: la $2, sym_1_4124
+.globl sym_1_4125
+sym_1_4125: la $2, sym_1_4125
+.globl sym_1_4126
+sym_1_4126: la $2, sym_1_4126
+.globl sym_1_4127
+sym_1_4127: la $2, sym_1_4127
+.globl sym_1_4128
+sym_1_4128: la $2, sym_1_4128
+.globl sym_1_4129
+sym_1_4129: la $2, sym_1_4129
+.globl sym_1_4130
+sym_1_4130: la $2, sym_1_4130
+.globl sym_1_4131
+sym_1_4131: la $2, sym_1_4131
+.globl sym_1_4132
+sym_1_4132: la $2, sym_1_4132
+.globl sym_1_4133
+sym_1_4133: la $2, sym_1_4133
+.globl sym_1_4134
+sym_1_4134: la $2, sym_1_4134
+.globl sym_1_4135
+sym_1_4135: la $2, sym_1_4135
+.globl sym_1_4136
+sym_1_4136: la $2, sym_1_4136
+.globl sym_1_4137
+sym_1_4137: la $2, sym_1_4137
+.globl sym_1_4138
+sym_1_4138: la $2, sym_1_4138
+.globl sym_1_4139
+sym_1_4139: la $2, sym_1_4139
+.globl sym_1_4140
+sym_1_4140: la $2, sym_1_4140
+.globl sym_1_4141
+sym_1_4141: la $2, sym_1_4141
+.globl sym_1_4142
+sym_1_4142: la $2, sym_1_4142
+.globl sym_1_4143
+sym_1_4143: la $2, sym_1_4143
+.globl sym_1_4144
+sym_1_4144: la $2, sym_1_4144
+.globl sym_1_4145
+sym_1_4145: la $2, sym_1_4145
+.globl sym_1_4146
+sym_1_4146: la $2, sym_1_4146
+.globl sym_1_4147
+sym_1_4147: la $2, sym_1_4147
+.globl sym_1_4148
+sym_1_4148: la $2, sym_1_4148
+.globl sym_1_4149
+sym_1_4149: la $2, sym_1_4149
+.globl sym_1_4150
+sym_1_4150: la $2, sym_1_4150
+.globl sym_1_4151
+sym_1_4151: la $2, sym_1_4151
+.globl sym_1_4152
+sym_1_4152: la $2, sym_1_4152
+.globl sym_1_4153
+sym_1_4153: la $2, sym_1_4153
+.globl sym_1_4154
+sym_1_4154: la $2, sym_1_4154
+.globl sym_1_4155
+sym_1_4155: la $2, sym_1_4155
+.globl sym_1_4156
+sym_1_4156: la $2, sym_1_4156
+.globl sym_1_4157
+sym_1_4157: la $2, sym_1_4157
+.globl sym_1_4158
+sym_1_4158: la $2, sym_1_4158
+.globl sym_1_4159
+sym_1_4159: la $2, sym_1_4159
+.globl sym_1_4160
+sym_1_4160: la $2, sym_1_4160
+.globl sym_1_4161
+sym_1_4161: la $2, sym_1_4161
+.globl sym_1_4162
+sym_1_4162: la $2, sym_1_4162
+.globl sym_1_4163
+sym_1_4163: la $2, sym_1_4163
+.globl sym_1_4164
+sym_1_4164: la $2, sym_1_4164
+.globl sym_1_4165
+sym_1_4165: la $2, sym_1_4165
+.globl sym_1_4166
+sym_1_4166: la $2, sym_1_4166
+.globl sym_1_4167
+sym_1_4167: la $2, sym_1_4167
+.globl sym_1_4168
+sym_1_4168: la $2, sym_1_4168
+.globl sym_1_4169
+sym_1_4169: la $2, sym_1_4169
+.globl sym_1_4170
+sym_1_4170: la $2, sym_1_4170
+.globl sym_1_4171
+sym_1_4171: la $2, sym_1_4171
+.globl sym_1_4172
+sym_1_4172: la $2, sym_1_4172
+.globl sym_1_4173
+sym_1_4173: la $2, sym_1_4173
+.globl sym_1_4174
+sym_1_4174: la $2, sym_1_4174
+.globl sym_1_4175
+sym_1_4175: la $2, sym_1_4175
+.globl sym_1_4176
+sym_1_4176: la $2, sym_1_4176
+.globl sym_1_4177
+sym_1_4177: la $2, sym_1_4177
+.globl sym_1_4178
+sym_1_4178: la $2, sym_1_4178
+.globl sym_1_4179
+sym_1_4179: la $2, sym_1_4179
+.globl sym_1_4180
+sym_1_4180: la $2, sym_1_4180
+.globl sym_1_4181
+sym_1_4181: la $2, sym_1_4181
+.globl sym_1_4182
+sym_1_4182: la $2, sym_1_4182
+.globl sym_1_4183
+sym_1_4183: la $2, sym_1_4183
+.globl sym_1_4184
+sym_1_4184: la $2, sym_1_4184
+.globl sym_1_4185
+sym_1_4185: la $2, sym_1_4185
+.globl sym_1_4186
+sym_1_4186: la $2, sym_1_4186
+.globl sym_1_4187
+sym_1_4187: la $2, sym_1_4187
+.globl sym_1_4188
+sym_1_4188: la $2, sym_1_4188
+.globl sym_1_4189
+sym_1_4189: la $2, sym_1_4189
+.globl sym_1_4190
+sym_1_4190: la $2, sym_1_4190
+.globl sym_1_4191
+sym_1_4191: la $2, sym_1_4191
+.globl sym_1_4192
+sym_1_4192: la $2, sym_1_4192
+.globl sym_1_4193
+sym_1_4193: la $2, sym_1_4193
+.globl sym_1_4194
+sym_1_4194: la $2, sym_1_4194
+.globl sym_1_4195
+sym_1_4195: la $2, sym_1_4195
+.globl sym_1_4196
+sym_1_4196: la $2, sym_1_4196
+.globl sym_1_4197
+sym_1_4197: la $2, sym_1_4197
+.globl sym_1_4198
+sym_1_4198: la $2, sym_1_4198
+.globl sym_1_4199
+sym_1_4199: la $2, sym_1_4199
+.globl sym_1_4200
+sym_1_4200: la $2, sym_1_4200
+.globl sym_1_4201
+sym_1_4201: la $2, sym_1_4201
+.globl sym_1_4202
+sym_1_4202: la $2, sym_1_4202
+.globl sym_1_4203
+sym_1_4203: la $2, sym_1_4203
+.globl sym_1_4204
+sym_1_4204: la $2, sym_1_4204
+.globl sym_1_4205
+sym_1_4205: la $2, sym_1_4205
+.globl sym_1_4206
+sym_1_4206: la $2, sym_1_4206
+.globl sym_1_4207
+sym_1_4207: la $2, sym_1_4207
+.globl sym_1_4208
+sym_1_4208: la $2, sym_1_4208
+.globl sym_1_4209
+sym_1_4209: la $2, sym_1_4209
+.globl sym_1_4210
+sym_1_4210: la $2, sym_1_4210
+.globl sym_1_4211
+sym_1_4211: la $2, sym_1_4211
+.globl sym_1_4212
+sym_1_4212: la $2, sym_1_4212
+.globl sym_1_4213
+sym_1_4213: la $2, sym_1_4213
+.globl sym_1_4214
+sym_1_4214: la $2, sym_1_4214
+.globl sym_1_4215
+sym_1_4215: la $2, sym_1_4215
+.globl sym_1_4216
+sym_1_4216: la $2, sym_1_4216
+.globl sym_1_4217
+sym_1_4217: la $2, sym_1_4217
+.globl sym_1_4218
+sym_1_4218: la $2, sym_1_4218
+.globl sym_1_4219
+sym_1_4219: la $2, sym_1_4219
+.globl sym_1_4220
+sym_1_4220: la $2, sym_1_4220
+.globl sym_1_4221
+sym_1_4221: la $2, sym_1_4221
+.globl sym_1_4222
+sym_1_4222: la $2, sym_1_4222
+.globl sym_1_4223
+sym_1_4223: la $2, sym_1_4223
+.globl sym_1_4224
+sym_1_4224: la $2, sym_1_4224
+.globl sym_1_4225
+sym_1_4225: la $2, sym_1_4225
+.globl sym_1_4226
+sym_1_4226: la $2, sym_1_4226
+.globl sym_1_4227
+sym_1_4227: la $2, sym_1_4227
+.globl sym_1_4228
+sym_1_4228: la $2, sym_1_4228
+.globl sym_1_4229
+sym_1_4229: la $2, sym_1_4229
+.globl sym_1_4230
+sym_1_4230: la $2, sym_1_4230
+.globl sym_1_4231
+sym_1_4231: la $2, sym_1_4231
+.globl sym_1_4232
+sym_1_4232: la $2, sym_1_4232
+.globl sym_1_4233
+sym_1_4233: la $2, sym_1_4233
+.globl sym_1_4234
+sym_1_4234: la $2, sym_1_4234
+.globl sym_1_4235
+sym_1_4235: la $2, sym_1_4235
+.globl sym_1_4236
+sym_1_4236: la $2, sym_1_4236
+.globl sym_1_4237
+sym_1_4237: la $2, sym_1_4237
+.globl sym_1_4238
+sym_1_4238: la $2, sym_1_4238
+.globl sym_1_4239
+sym_1_4239: la $2, sym_1_4239
+.globl sym_1_4240
+sym_1_4240: la $2, sym_1_4240
+.globl sym_1_4241
+sym_1_4241: la $2, sym_1_4241
+.globl sym_1_4242
+sym_1_4242: la $2, sym_1_4242
+.globl sym_1_4243
+sym_1_4243: la $2, sym_1_4243
+.globl sym_1_4244
+sym_1_4244: la $2, sym_1_4244
+.globl sym_1_4245
+sym_1_4245: la $2, sym_1_4245
+.globl sym_1_4246
+sym_1_4246: la $2, sym_1_4246
+.globl sym_1_4247
+sym_1_4247: la $2, sym_1_4247
+.globl sym_1_4248
+sym_1_4248: la $2, sym_1_4248
+.globl sym_1_4249
+sym_1_4249: la $2, sym_1_4249
+.globl sym_1_4250
+sym_1_4250: la $2, sym_1_4250
+.globl sym_1_4251
+sym_1_4251: la $2, sym_1_4251
+.globl sym_1_4252
+sym_1_4252: la $2, sym_1_4252
+.globl sym_1_4253
+sym_1_4253: la $2, sym_1_4253
+.globl sym_1_4254
+sym_1_4254: la $2, sym_1_4254
+.globl sym_1_4255
+sym_1_4255: la $2, sym_1_4255
+.globl sym_1_4256
+sym_1_4256: la $2, sym_1_4256
+.globl sym_1_4257
+sym_1_4257: la $2, sym_1_4257
+.globl sym_1_4258
+sym_1_4258: la $2, sym_1_4258
+.globl sym_1_4259
+sym_1_4259: la $2, sym_1_4259
+.globl sym_1_4260
+sym_1_4260: la $2, sym_1_4260
+.globl sym_1_4261
+sym_1_4261: la $2, sym_1_4261
+.globl sym_1_4262
+sym_1_4262: la $2, sym_1_4262
+.globl sym_1_4263
+sym_1_4263: la $2, sym_1_4263
+.globl sym_1_4264
+sym_1_4264: la $2, sym_1_4264
+.globl sym_1_4265
+sym_1_4265: la $2, sym_1_4265
+.globl sym_1_4266
+sym_1_4266: la $2, sym_1_4266
+.globl sym_1_4267
+sym_1_4267: la $2, sym_1_4267
+.globl sym_1_4268
+sym_1_4268: la $2, sym_1_4268
+.globl sym_1_4269
+sym_1_4269: la $2, sym_1_4269
+.globl sym_1_4270
+sym_1_4270: la $2, sym_1_4270
+.globl sym_1_4271
+sym_1_4271: la $2, sym_1_4271
+.globl sym_1_4272
+sym_1_4272: la $2, sym_1_4272
+.globl sym_1_4273
+sym_1_4273: la $2, sym_1_4273
+.globl sym_1_4274
+sym_1_4274: la $2, sym_1_4274
+.globl sym_1_4275
+sym_1_4275: la $2, sym_1_4275
+.globl sym_1_4276
+sym_1_4276: la $2, sym_1_4276
+.globl sym_1_4277
+sym_1_4277: la $2, sym_1_4277
+.globl sym_1_4278
+sym_1_4278: la $2, sym_1_4278
+.globl sym_1_4279
+sym_1_4279: la $2, sym_1_4279
+.globl sym_1_4280
+sym_1_4280: la $2, sym_1_4280
+.globl sym_1_4281
+sym_1_4281: la $2, sym_1_4281
+.globl sym_1_4282
+sym_1_4282: la $2, sym_1_4282
+.globl sym_1_4283
+sym_1_4283: la $2, sym_1_4283
+.globl sym_1_4284
+sym_1_4284: la $2, sym_1_4284
+.globl sym_1_4285
+sym_1_4285: la $2, sym_1_4285
+.globl sym_1_4286
+sym_1_4286: la $2, sym_1_4286
+.globl sym_1_4287
+sym_1_4287: la $2, sym_1_4287
+.globl sym_1_4288
+sym_1_4288: la $2, sym_1_4288
+.globl sym_1_4289
+sym_1_4289: la $2, sym_1_4289
+.globl sym_1_4290
+sym_1_4290: la $2, sym_1_4290
+.globl sym_1_4291
+sym_1_4291: la $2, sym_1_4291
+.globl sym_1_4292
+sym_1_4292: la $2, sym_1_4292
+.globl sym_1_4293
+sym_1_4293: la $2, sym_1_4293
+.globl sym_1_4294
+sym_1_4294: la $2, sym_1_4294
+.globl sym_1_4295
+sym_1_4295: la $2, sym_1_4295
+.globl sym_1_4296
+sym_1_4296: la $2, sym_1_4296
+.globl sym_1_4297
+sym_1_4297: la $2, sym_1_4297
+.globl sym_1_4298
+sym_1_4298: la $2, sym_1_4298
+.globl sym_1_4299
+sym_1_4299: la $2, sym_1_4299
+.globl sym_1_4300
+sym_1_4300: la $2, sym_1_4300
+.globl sym_1_4301
+sym_1_4301: la $2, sym_1_4301
+.globl sym_1_4302
+sym_1_4302: la $2, sym_1_4302
+.globl sym_1_4303
+sym_1_4303: la $2, sym_1_4303
+.globl sym_1_4304
+sym_1_4304: la $2, sym_1_4304
+.globl sym_1_4305
+sym_1_4305: la $2, sym_1_4305
+.globl sym_1_4306
+sym_1_4306: la $2, sym_1_4306
+.globl sym_1_4307
+sym_1_4307: la $2, sym_1_4307
+.globl sym_1_4308
+sym_1_4308: la $2, sym_1_4308
+.globl sym_1_4309
+sym_1_4309: la $2, sym_1_4309
+.globl sym_1_4310
+sym_1_4310: la $2, sym_1_4310
+.globl sym_1_4311
+sym_1_4311: la $2, sym_1_4311
+.globl sym_1_4312
+sym_1_4312: la $2, sym_1_4312
+.globl sym_1_4313
+sym_1_4313: la $2, sym_1_4313
+.globl sym_1_4314
+sym_1_4314: la $2, sym_1_4314
+.globl sym_1_4315
+sym_1_4315: la $2, sym_1_4315
+.globl sym_1_4316
+sym_1_4316: la $2, sym_1_4316
+.globl sym_1_4317
+sym_1_4317: la $2, sym_1_4317
+.globl sym_1_4318
+sym_1_4318: la $2, sym_1_4318
+.globl sym_1_4319
+sym_1_4319: la $2, sym_1_4319
+.globl sym_1_4320
+sym_1_4320: la $2, sym_1_4320
+.globl sym_1_4321
+sym_1_4321: la $2, sym_1_4321
+.globl sym_1_4322
+sym_1_4322: la $2, sym_1_4322
+.globl sym_1_4323
+sym_1_4323: la $2, sym_1_4323
+.globl sym_1_4324
+sym_1_4324: la $2, sym_1_4324
+.globl sym_1_4325
+sym_1_4325: la $2, sym_1_4325
+.globl sym_1_4326
+sym_1_4326: la $2, sym_1_4326
+.globl sym_1_4327
+sym_1_4327: la $2, sym_1_4327
+.globl sym_1_4328
+sym_1_4328: la $2, sym_1_4328
+.globl sym_1_4329
+sym_1_4329: la $2, sym_1_4329
+.globl sym_1_4330
+sym_1_4330: la $2, sym_1_4330
+.globl sym_1_4331
+sym_1_4331: la $2, sym_1_4331
+.globl sym_1_4332
+sym_1_4332: la $2, sym_1_4332
+.globl sym_1_4333
+sym_1_4333: la $2, sym_1_4333
+.globl sym_1_4334
+sym_1_4334: la $2, sym_1_4334
+.globl sym_1_4335
+sym_1_4335: la $2, sym_1_4335
+.globl sym_1_4336
+sym_1_4336: la $2, sym_1_4336
+.globl sym_1_4337
+sym_1_4337: la $2, sym_1_4337
+.globl sym_1_4338
+sym_1_4338: la $2, sym_1_4338
+.globl sym_1_4339
+sym_1_4339: la $2, sym_1_4339
+.globl sym_1_4340
+sym_1_4340: la $2, sym_1_4340
+.globl sym_1_4341
+sym_1_4341: la $2, sym_1_4341
+.globl sym_1_4342
+sym_1_4342: la $2, sym_1_4342
+.globl sym_1_4343
+sym_1_4343: la $2, sym_1_4343
+.globl sym_1_4344
+sym_1_4344: la $2, sym_1_4344
+.globl sym_1_4345
+sym_1_4345: la $2, sym_1_4345
+.globl sym_1_4346
+sym_1_4346: la $2, sym_1_4346
+.globl sym_1_4347
+sym_1_4347: la $2, sym_1_4347
+.globl sym_1_4348
+sym_1_4348: la $2, sym_1_4348
+.globl sym_1_4349
+sym_1_4349: la $2, sym_1_4349
+.globl sym_1_4350
+sym_1_4350: la $2, sym_1_4350
+.globl sym_1_4351
+sym_1_4351: la $2, sym_1_4351
+.globl sym_1_4352
+sym_1_4352: la $2, sym_1_4352
+.globl sym_1_4353
+sym_1_4353: la $2, sym_1_4353
+.globl sym_1_4354
+sym_1_4354: la $2, sym_1_4354
+.globl sym_1_4355
+sym_1_4355: la $2, sym_1_4355
+.globl sym_1_4356
+sym_1_4356: la $2, sym_1_4356
+.globl sym_1_4357
+sym_1_4357: la $2, sym_1_4357
+.globl sym_1_4358
+sym_1_4358: la $2, sym_1_4358
+.globl sym_1_4359
+sym_1_4359: la $2, sym_1_4359
+.globl sym_1_4360
+sym_1_4360: la $2, sym_1_4360
+.globl sym_1_4361
+sym_1_4361: la $2, sym_1_4361
+.globl sym_1_4362
+sym_1_4362: la $2, sym_1_4362
+.globl sym_1_4363
+sym_1_4363: la $2, sym_1_4363
+.globl sym_1_4364
+sym_1_4364: la $2, sym_1_4364
+.globl sym_1_4365
+sym_1_4365: la $2, sym_1_4365
+.globl sym_1_4366
+sym_1_4366: la $2, sym_1_4366
+.globl sym_1_4367
+sym_1_4367: la $2, sym_1_4367
+.globl sym_1_4368
+sym_1_4368: la $2, sym_1_4368
+.globl sym_1_4369
+sym_1_4369: la $2, sym_1_4369
+.globl sym_1_4370
+sym_1_4370: la $2, sym_1_4370
+.globl sym_1_4371
+sym_1_4371: la $2, sym_1_4371
+.globl sym_1_4372
+sym_1_4372: la $2, sym_1_4372
+.globl sym_1_4373
+sym_1_4373: la $2, sym_1_4373
+.globl sym_1_4374
+sym_1_4374: la $2, sym_1_4374
+.globl sym_1_4375
+sym_1_4375: la $2, sym_1_4375
+.globl sym_1_4376
+sym_1_4376: la $2, sym_1_4376
+.globl sym_1_4377
+sym_1_4377: la $2, sym_1_4377
+.globl sym_1_4378
+sym_1_4378: la $2, sym_1_4378
+.globl sym_1_4379
+sym_1_4379: la $2, sym_1_4379
+.globl sym_1_4380
+sym_1_4380: la $2, sym_1_4380
+.globl sym_1_4381
+sym_1_4381: la $2, sym_1_4381
+.globl sym_1_4382
+sym_1_4382: la $2, sym_1_4382
+.globl sym_1_4383
+sym_1_4383: la $2, sym_1_4383
+.globl sym_1_4384
+sym_1_4384: la $2, sym_1_4384
+.globl sym_1_4385
+sym_1_4385: la $2, sym_1_4385
+.globl sym_1_4386
+sym_1_4386: la $2, sym_1_4386
+.globl sym_1_4387
+sym_1_4387: la $2, sym_1_4387
+.globl sym_1_4388
+sym_1_4388: la $2, sym_1_4388
+.globl sym_1_4389
+sym_1_4389: la $2, sym_1_4389
+.globl sym_1_4390
+sym_1_4390: la $2, sym_1_4390
+.globl sym_1_4391
+sym_1_4391: la $2, sym_1_4391
+.globl sym_1_4392
+sym_1_4392: la $2, sym_1_4392
+.globl sym_1_4393
+sym_1_4393: la $2, sym_1_4393
+.globl sym_1_4394
+sym_1_4394: la $2, sym_1_4394
+.globl sym_1_4395
+sym_1_4395: la $2, sym_1_4395
+.globl sym_1_4396
+sym_1_4396: la $2, sym_1_4396
+.globl sym_1_4397
+sym_1_4397: la $2, sym_1_4397
+.globl sym_1_4398
+sym_1_4398: la $2, sym_1_4398
+.globl sym_1_4399
+sym_1_4399: la $2, sym_1_4399
+.globl sym_1_4400
+sym_1_4400: la $2, sym_1_4400
+.globl sym_1_4401
+sym_1_4401: la $2, sym_1_4401
+.globl sym_1_4402
+sym_1_4402: la $2, sym_1_4402
+.globl sym_1_4403
+sym_1_4403: la $2, sym_1_4403
+.globl sym_1_4404
+sym_1_4404: la $2, sym_1_4404
+.globl sym_1_4405
+sym_1_4405: la $2, sym_1_4405
+.globl sym_1_4406
+sym_1_4406: la $2, sym_1_4406
+.globl sym_1_4407
+sym_1_4407: la $2, sym_1_4407
+.globl sym_1_4408
+sym_1_4408: la $2, sym_1_4408
+.globl sym_1_4409
+sym_1_4409: la $2, sym_1_4409
+.globl sym_1_4410
+sym_1_4410: la $2, sym_1_4410
+.globl sym_1_4411
+sym_1_4411: la $2, sym_1_4411
+.globl sym_1_4412
+sym_1_4412: la $2, sym_1_4412
+.globl sym_1_4413
+sym_1_4413: la $2, sym_1_4413
+.globl sym_1_4414
+sym_1_4414: la $2, sym_1_4414
+.globl sym_1_4415
+sym_1_4415: la $2, sym_1_4415
+.globl sym_1_4416
+sym_1_4416: la $2, sym_1_4416
+.globl sym_1_4417
+sym_1_4417: la $2, sym_1_4417
+.globl sym_1_4418
+sym_1_4418: la $2, sym_1_4418
+.globl sym_1_4419
+sym_1_4419: la $2, sym_1_4419
+.globl sym_1_4420
+sym_1_4420: la $2, sym_1_4420
+.globl sym_1_4421
+sym_1_4421: la $2, sym_1_4421
+.globl sym_1_4422
+sym_1_4422: la $2, sym_1_4422
+.globl sym_1_4423
+sym_1_4423: la $2, sym_1_4423
+.globl sym_1_4424
+sym_1_4424: la $2, sym_1_4424
+.globl sym_1_4425
+sym_1_4425: la $2, sym_1_4425
+.globl sym_1_4426
+sym_1_4426: la $2, sym_1_4426
+.globl sym_1_4427
+sym_1_4427: la $2, sym_1_4427
+.globl sym_1_4428
+sym_1_4428: la $2, sym_1_4428
+.globl sym_1_4429
+sym_1_4429: la $2, sym_1_4429
+.globl sym_1_4430
+sym_1_4430: la $2, sym_1_4430
+.globl sym_1_4431
+sym_1_4431: la $2, sym_1_4431
+.globl sym_1_4432
+sym_1_4432: la $2, sym_1_4432
+.globl sym_1_4433
+sym_1_4433: la $2, sym_1_4433
+.globl sym_1_4434
+sym_1_4434: la $2, sym_1_4434
+.globl sym_1_4435
+sym_1_4435: la $2, sym_1_4435
+.globl sym_1_4436
+sym_1_4436: la $2, sym_1_4436
+.globl sym_1_4437
+sym_1_4437: la $2, sym_1_4437
+.globl sym_1_4438
+sym_1_4438: la $2, sym_1_4438
+.globl sym_1_4439
+sym_1_4439: la $2, sym_1_4439
+.globl sym_1_4440
+sym_1_4440: la $2, sym_1_4440
+.globl sym_1_4441
+sym_1_4441: la $2, sym_1_4441
+.globl sym_1_4442
+sym_1_4442: la $2, sym_1_4442
+.globl sym_1_4443
+sym_1_4443: la $2, sym_1_4443
+.globl sym_1_4444
+sym_1_4444: la $2, sym_1_4444
+.globl sym_1_4445
+sym_1_4445: la $2, sym_1_4445
+.globl sym_1_4446
+sym_1_4446: la $2, sym_1_4446
+.globl sym_1_4447
+sym_1_4447: la $2, sym_1_4447
+.globl sym_1_4448
+sym_1_4448: la $2, sym_1_4448
+.globl sym_1_4449
+sym_1_4449: la $2, sym_1_4449
+.globl sym_1_4450
+sym_1_4450: la $2, sym_1_4450
+.globl sym_1_4451
+sym_1_4451: la $2, sym_1_4451
+.globl sym_1_4452
+sym_1_4452: la $2, sym_1_4452
+.globl sym_1_4453
+sym_1_4453: la $2, sym_1_4453
+.globl sym_1_4454
+sym_1_4454: la $2, sym_1_4454
+.globl sym_1_4455
+sym_1_4455: la $2, sym_1_4455
+.globl sym_1_4456
+sym_1_4456: la $2, sym_1_4456
+.globl sym_1_4457
+sym_1_4457: la $2, sym_1_4457
+.globl sym_1_4458
+sym_1_4458: la $2, sym_1_4458
+.globl sym_1_4459
+sym_1_4459: la $2, sym_1_4459
+.globl sym_1_4460
+sym_1_4460: la $2, sym_1_4460
+.globl sym_1_4461
+sym_1_4461: la $2, sym_1_4461
+.globl sym_1_4462
+sym_1_4462: la $2, sym_1_4462
+.globl sym_1_4463
+sym_1_4463: la $2, sym_1_4463
+.globl sym_1_4464
+sym_1_4464: la $2, sym_1_4464
+.globl sym_1_4465
+sym_1_4465: la $2, sym_1_4465
+.globl sym_1_4466
+sym_1_4466: la $2, sym_1_4466
+.globl sym_1_4467
+sym_1_4467: la $2, sym_1_4467
+.globl sym_1_4468
+sym_1_4468: la $2, sym_1_4468
+.globl sym_1_4469
+sym_1_4469: la $2, sym_1_4469
+.globl sym_1_4470
+sym_1_4470: la $2, sym_1_4470
+.globl sym_1_4471
+sym_1_4471: la $2, sym_1_4471
+.globl sym_1_4472
+sym_1_4472: la $2, sym_1_4472
+.globl sym_1_4473
+sym_1_4473: la $2, sym_1_4473
+.globl sym_1_4474
+sym_1_4474: la $2, sym_1_4474
+.globl sym_1_4475
+sym_1_4475: la $2, sym_1_4475
+.globl sym_1_4476
+sym_1_4476: la $2, sym_1_4476
+.globl sym_1_4477
+sym_1_4477: la $2, sym_1_4477
+.globl sym_1_4478
+sym_1_4478: la $2, sym_1_4478
+.globl sym_1_4479
+sym_1_4479: la $2, sym_1_4479
+.globl sym_1_4480
+sym_1_4480: la $2, sym_1_4480
+.globl sym_1_4481
+sym_1_4481: la $2, sym_1_4481
+.globl sym_1_4482
+sym_1_4482: la $2, sym_1_4482
+.globl sym_1_4483
+sym_1_4483: la $2, sym_1_4483
+.globl sym_1_4484
+sym_1_4484: la $2, sym_1_4484
+.globl sym_1_4485
+sym_1_4485: la $2, sym_1_4485
+.globl sym_1_4486
+sym_1_4486: la $2, sym_1_4486
+.globl sym_1_4487
+sym_1_4487: la $2, sym_1_4487
+.globl sym_1_4488
+sym_1_4488: la $2, sym_1_4488
+.globl sym_1_4489
+sym_1_4489: la $2, sym_1_4489
+.globl sym_1_4490
+sym_1_4490: la $2, sym_1_4490
+.globl sym_1_4491
+sym_1_4491: la $2, sym_1_4491
+.globl sym_1_4492
+sym_1_4492: la $2, sym_1_4492
+.globl sym_1_4493
+sym_1_4493: la $2, sym_1_4493
+.globl sym_1_4494
+sym_1_4494: la $2, sym_1_4494
+.globl sym_1_4495
+sym_1_4495: la $2, sym_1_4495
+.globl sym_1_4496
+sym_1_4496: la $2, sym_1_4496
+.globl sym_1_4497
+sym_1_4497: la $2, sym_1_4497
+.globl sym_1_4498
+sym_1_4498: la $2, sym_1_4498
+.globl sym_1_4499
+sym_1_4499: la $2, sym_1_4499
+.globl sym_1_4500
+sym_1_4500: la $2, sym_1_4500
+.globl sym_1_4501
+sym_1_4501: la $2, sym_1_4501
+.globl sym_1_4502
+sym_1_4502: la $2, sym_1_4502
+.globl sym_1_4503
+sym_1_4503: la $2, sym_1_4503
+.globl sym_1_4504
+sym_1_4504: la $2, sym_1_4504
+.globl sym_1_4505
+sym_1_4505: la $2, sym_1_4505
+.globl sym_1_4506
+sym_1_4506: la $2, sym_1_4506
+.globl sym_1_4507
+sym_1_4507: la $2, sym_1_4507
+.globl sym_1_4508
+sym_1_4508: la $2, sym_1_4508
+.globl sym_1_4509
+sym_1_4509: la $2, sym_1_4509
+.globl sym_1_4510
+sym_1_4510: la $2, sym_1_4510
+.globl sym_1_4511
+sym_1_4511: la $2, sym_1_4511
+.globl sym_1_4512
+sym_1_4512: la $2, sym_1_4512
+.globl sym_1_4513
+sym_1_4513: la $2, sym_1_4513
+.globl sym_1_4514
+sym_1_4514: la $2, sym_1_4514
+.globl sym_1_4515
+sym_1_4515: la $2, sym_1_4515
+.globl sym_1_4516
+sym_1_4516: la $2, sym_1_4516
+.globl sym_1_4517
+sym_1_4517: la $2, sym_1_4517
+.globl sym_1_4518
+sym_1_4518: la $2, sym_1_4518
+.globl sym_1_4519
+sym_1_4519: la $2, sym_1_4519
+.globl sym_1_4520
+sym_1_4520: la $2, sym_1_4520
+.globl sym_1_4521
+sym_1_4521: la $2, sym_1_4521
+.globl sym_1_4522
+sym_1_4522: la $2, sym_1_4522
+.globl sym_1_4523
+sym_1_4523: la $2, sym_1_4523
+.globl sym_1_4524
+sym_1_4524: la $2, sym_1_4524
+.globl sym_1_4525
+sym_1_4525: la $2, sym_1_4525
+.globl sym_1_4526
+sym_1_4526: la $2, sym_1_4526
+.globl sym_1_4527
+sym_1_4527: la $2, sym_1_4527
+.globl sym_1_4528
+sym_1_4528: la $2, sym_1_4528
+.globl sym_1_4529
+sym_1_4529: la $2, sym_1_4529
+.globl sym_1_4530
+sym_1_4530: la $2, sym_1_4530
+.globl sym_1_4531
+sym_1_4531: la $2, sym_1_4531
+.globl sym_1_4532
+sym_1_4532: la $2, sym_1_4532
+.globl sym_1_4533
+sym_1_4533: la $2, sym_1_4533
+.globl sym_1_4534
+sym_1_4534: la $2, sym_1_4534
+.globl sym_1_4535
+sym_1_4535: la $2, sym_1_4535
+.globl sym_1_4536
+sym_1_4536: la $2, sym_1_4536
+.globl sym_1_4537
+sym_1_4537: la $2, sym_1_4537
+.globl sym_1_4538
+sym_1_4538: la $2, sym_1_4538
+.globl sym_1_4539
+sym_1_4539: la $2, sym_1_4539
+.globl sym_1_4540
+sym_1_4540: la $2, sym_1_4540
+.globl sym_1_4541
+sym_1_4541: la $2, sym_1_4541
+.globl sym_1_4542
+sym_1_4542: la $2, sym_1_4542
+.globl sym_1_4543
+sym_1_4543: la $2, sym_1_4543
+.globl sym_1_4544
+sym_1_4544: la $2, sym_1_4544
+.globl sym_1_4545
+sym_1_4545: la $2, sym_1_4545
+.globl sym_1_4546
+sym_1_4546: la $2, sym_1_4546
+.globl sym_1_4547
+sym_1_4547: la $2, sym_1_4547
+.globl sym_1_4548
+sym_1_4548: la $2, sym_1_4548
+.globl sym_1_4549
+sym_1_4549: la $2, sym_1_4549
+.globl sym_1_4550
+sym_1_4550: la $2, sym_1_4550
+.globl sym_1_4551
+sym_1_4551: la $2, sym_1_4551
+.globl sym_1_4552
+sym_1_4552: la $2, sym_1_4552
+.globl sym_1_4553
+sym_1_4553: la $2, sym_1_4553
+.globl sym_1_4554
+sym_1_4554: la $2, sym_1_4554
+.globl sym_1_4555
+sym_1_4555: la $2, sym_1_4555
+.globl sym_1_4556
+sym_1_4556: la $2, sym_1_4556
+.globl sym_1_4557
+sym_1_4557: la $2, sym_1_4557
+.globl sym_1_4558
+sym_1_4558: la $2, sym_1_4558
+.globl sym_1_4559
+sym_1_4559: la $2, sym_1_4559
+.globl sym_1_4560
+sym_1_4560: la $2, sym_1_4560
+.globl sym_1_4561
+sym_1_4561: la $2, sym_1_4561
+.globl sym_1_4562
+sym_1_4562: la $2, sym_1_4562
+.globl sym_1_4563
+sym_1_4563: la $2, sym_1_4563
+.globl sym_1_4564
+sym_1_4564: la $2, sym_1_4564
+.globl sym_1_4565
+sym_1_4565: la $2, sym_1_4565
+.globl sym_1_4566
+sym_1_4566: la $2, sym_1_4566
+.globl sym_1_4567
+sym_1_4567: la $2, sym_1_4567
+.globl sym_1_4568
+sym_1_4568: la $2, sym_1_4568
+.globl sym_1_4569
+sym_1_4569: la $2, sym_1_4569
+.globl sym_1_4570
+sym_1_4570: la $2, sym_1_4570
+.globl sym_1_4571
+sym_1_4571: la $2, sym_1_4571
+.globl sym_1_4572
+sym_1_4572: la $2, sym_1_4572
+.globl sym_1_4573
+sym_1_4573: la $2, sym_1_4573
+.globl sym_1_4574
+sym_1_4574: la $2, sym_1_4574
+.globl sym_1_4575
+sym_1_4575: la $2, sym_1_4575
+.globl sym_1_4576
+sym_1_4576: la $2, sym_1_4576
+.globl sym_1_4577
+sym_1_4577: la $2, sym_1_4577
+.globl sym_1_4578
+sym_1_4578: la $2, sym_1_4578
+.globl sym_1_4579
+sym_1_4579: la $2, sym_1_4579
+.globl sym_1_4580
+sym_1_4580: la $2, sym_1_4580
+.globl sym_1_4581
+sym_1_4581: la $2, sym_1_4581
+.globl sym_1_4582
+sym_1_4582: la $2, sym_1_4582
+.globl sym_1_4583
+sym_1_4583: la $2, sym_1_4583
+.globl sym_1_4584
+sym_1_4584: la $2, sym_1_4584
+.globl sym_1_4585
+sym_1_4585: la $2, sym_1_4585
+.globl sym_1_4586
+sym_1_4586: la $2, sym_1_4586
+.globl sym_1_4587
+sym_1_4587: la $2, sym_1_4587
+.globl sym_1_4588
+sym_1_4588: la $2, sym_1_4588
+.globl sym_1_4589
+sym_1_4589: la $2, sym_1_4589
+.globl sym_1_4590
+sym_1_4590: la $2, sym_1_4590
+.globl sym_1_4591
+sym_1_4591: la $2, sym_1_4591
+.globl sym_1_4592
+sym_1_4592: la $2, sym_1_4592
+.globl sym_1_4593
+sym_1_4593: la $2, sym_1_4593
+.globl sym_1_4594
+sym_1_4594: la $2, sym_1_4594
+.globl sym_1_4595
+sym_1_4595: la $2, sym_1_4595
+.globl sym_1_4596
+sym_1_4596: la $2, sym_1_4596
+.globl sym_1_4597
+sym_1_4597: la $2, sym_1_4597
+.globl sym_1_4598
+sym_1_4598: la $2, sym_1_4598
+.globl sym_1_4599
+sym_1_4599: la $2, sym_1_4599
+.globl sym_1_4600
+sym_1_4600: la $2, sym_1_4600
+.globl sym_1_4601
+sym_1_4601: la $2, sym_1_4601
+.globl sym_1_4602
+sym_1_4602: la $2, sym_1_4602
+.globl sym_1_4603
+sym_1_4603: la $2, sym_1_4603
+.globl sym_1_4604
+sym_1_4604: la $2, sym_1_4604
+.globl sym_1_4605
+sym_1_4605: la $2, sym_1_4605
+.globl sym_1_4606
+sym_1_4606: la $2, sym_1_4606
+.globl sym_1_4607
+sym_1_4607: la $2, sym_1_4607
+.globl sym_1_4608
+sym_1_4608: la $2, sym_1_4608
+.globl sym_1_4609
+sym_1_4609: la $2, sym_1_4609
+.globl sym_1_4610
+sym_1_4610: la $2, sym_1_4610
+.globl sym_1_4611
+sym_1_4611: la $2, sym_1_4611
+.globl sym_1_4612
+sym_1_4612: la $2, sym_1_4612
+.globl sym_1_4613
+sym_1_4613: la $2, sym_1_4613
+.globl sym_1_4614
+sym_1_4614: la $2, sym_1_4614
+.globl sym_1_4615
+sym_1_4615: la $2, sym_1_4615
+.globl sym_1_4616
+sym_1_4616: la $2, sym_1_4616
+.globl sym_1_4617
+sym_1_4617: la $2, sym_1_4617
+.globl sym_1_4618
+sym_1_4618: la $2, sym_1_4618
+.globl sym_1_4619
+sym_1_4619: la $2, sym_1_4619
+.globl sym_1_4620
+sym_1_4620: la $2, sym_1_4620
+.globl sym_1_4621
+sym_1_4621: la $2, sym_1_4621
+.globl sym_1_4622
+sym_1_4622: la $2, sym_1_4622
+.globl sym_1_4623
+sym_1_4623: la $2, sym_1_4623
+.globl sym_1_4624
+sym_1_4624: la $2, sym_1_4624
+.globl sym_1_4625
+sym_1_4625: la $2, sym_1_4625
+.globl sym_1_4626
+sym_1_4626: la $2, sym_1_4626
+.globl sym_1_4627
+sym_1_4627: la $2, sym_1_4627
+.globl sym_1_4628
+sym_1_4628: la $2, sym_1_4628
+.globl sym_1_4629
+sym_1_4629: la $2, sym_1_4629
+.globl sym_1_4630
+sym_1_4630: la $2, sym_1_4630
+.globl sym_1_4631
+sym_1_4631: la $2, sym_1_4631
+.globl sym_1_4632
+sym_1_4632: la $2, sym_1_4632
+.globl sym_1_4633
+sym_1_4633: la $2, sym_1_4633
+.globl sym_1_4634
+sym_1_4634: la $2, sym_1_4634
+.globl sym_1_4635
+sym_1_4635: la $2, sym_1_4635
+.globl sym_1_4636
+sym_1_4636: la $2, sym_1_4636
+.globl sym_1_4637
+sym_1_4637: la $2, sym_1_4637
+.globl sym_1_4638
+sym_1_4638: la $2, sym_1_4638
+.globl sym_1_4639
+sym_1_4639: la $2, sym_1_4639
+.globl sym_1_4640
+sym_1_4640: la $2, sym_1_4640
+.globl sym_1_4641
+sym_1_4641: la $2, sym_1_4641
+.globl sym_1_4642
+sym_1_4642: la $2, sym_1_4642
+.globl sym_1_4643
+sym_1_4643: la $2, sym_1_4643
+.globl sym_1_4644
+sym_1_4644: la $2, sym_1_4644
+.globl sym_1_4645
+sym_1_4645: la $2, sym_1_4645
+.globl sym_1_4646
+sym_1_4646: la $2, sym_1_4646
+.globl sym_1_4647
+sym_1_4647: la $2, sym_1_4647
+.globl sym_1_4648
+sym_1_4648: la $2, sym_1_4648
+.globl sym_1_4649
+sym_1_4649: la $2, sym_1_4649
+.globl sym_1_4650
+sym_1_4650: la $2, sym_1_4650
+.globl sym_1_4651
+sym_1_4651: la $2, sym_1_4651
+.globl sym_1_4652
+sym_1_4652: la $2, sym_1_4652
+.globl sym_1_4653
+sym_1_4653: la $2, sym_1_4653
+.globl sym_1_4654
+sym_1_4654: la $2, sym_1_4654
+.globl sym_1_4655
+sym_1_4655: la $2, sym_1_4655
+.globl sym_1_4656
+sym_1_4656: la $2, sym_1_4656
+.globl sym_1_4657
+sym_1_4657: la $2, sym_1_4657
+.globl sym_1_4658
+sym_1_4658: la $2, sym_1_4658
+.globl sym_1_4659
+sym_1_4659: la $2, sym_1_4659
+.globl sym_1_4660
+sym_1_4660: la $2, sym_1_4660
+.globl sym_1_4661
+sym_1_4661: la $2, sym_1_4661
+.globl sym_1_4662
+sym_1_4662: la $2, sym_1_4662
+.globl sym_1_4663
+sym_1_4663: la $2, sym_1_4663
+.globl sym_1_4664
+sym_1_4664: la $2, sym_1_4664
+.globl sym_1_4665
+sym_1_4665: la $2, sym_1_4665
+.globl sym_1_4666
+sym_1_4666: la $2, sym_1_4666
+.globl sym_1_4667
+sym_1_4667: la $2, sym_1_4667
+.globl sym_1_4668
+sym_1_4668: la $2, sym_1_4668
+.globl sym_1_4669
+sym_1_4669: la $2, sym_1_4669
+.globl sym_1_4670
+sym_1_4670: la $2, sym_1_4670
+.globl sym_1_4671
+sym_1_4671: la $2, sym_1_4671
+.globl sym_1_4672
+sym_1_4672: la $2, sym_1_4672
+.globl sym_1_4673
+sym_1_4673: la $2, sym_1_4673
+.globl sym_1_4674
+sym_1_4674: la $2, sym_1_4674
+.globl sym_1_4675
+sym_1_4675: la $2, sym_1_4675
+.globl sym_1_4676
+sym_1_4676: la $2, sym_1_4676
+.globl sym_1_4677
+sym_1_4677: la $2, sym_1_4677
+.globl sym_1_4678
+sym_1_4678: la $2, sym_1_4678
+.globl sym_1_4679
+sym_1_4679: la $2, sym_1_4679
+.globl sym_1_4680
+sym_1_4680: la $2, sym_1_4680
+.globl sym_1_4681
+sym_1_4681: la $2, sym_1_4681
+.globl sym_1_4682
+sym_1_4682: la $2, sym_1_4682
+.globl sym_1_4683
+sym_1_4683: la $2, sym_1_4683
+.globl sym_1_4684
+sym_1_4684: la $2, sym_1_4684
+.globl sym_1_4685
+sym_1_4685: la $2, sym_1_4685
+.globl sym_1_4686
+sym_1_4686: la $2, sym_1_4686
+.globl sym_1_4687
+sym_1_4687: la $2, sym_1_4687
+.globl sym_1_4688
+sym_1_4688: la $2, sym_1_4688
+.globl sym_1_4689
+sym_1_4689: la $2, sym_1_4689
+.globl sym_1_4690
+sym_1_4690: la $2, sym_1_4690
+.globl sym_1_4691
+sym_1_4691: la $2, sym_1_4691
+.globl sym_1_4692
+sym_1_4692: la $2, sym_1_4692
+.globl sym_1_4693
+sym_1_4693: la $2, sym_1_4693
+.globl sym_1_4694
+sym_1_4694: la $2, sym_1_4694
+.globl sym_1_4695
+sym_1_4695: la $2, sym_1_4695
+.globl sym_1_4696
+sym_1_4696: la $2, sym_1_4696
+.globl sym_1_4697
+sym_1_4697: la $2, sym_1_4697
+.globl sym_1_4698
+sym_1_4698: la $2, sym_1_4698
+.globl sym_1_4699
+sym_1_4699: la $2, sym_1_4699
+.globl sym_1_4700
+sym_1_4700: la $2, sym_1_4700
+.globl sym_1_4701
+sym_1_4701: la $2, sym_1_4701
+.globl sym_1_4702
+sym_1_4702: la $2, sym_1_4702
+.globl sym_1_4703
+sym_1_4703: la $2, sym_1_4703
+.globl sym_1_4704
+sym_1_4704: la $2, sym_1_4704
+.globl sym_1_4705
+sym_1_4705: la $2, sym_1_4705
+.globl sym_1_4706
+sym_1_4706: la $2, sym_1_4706
+.globl sym_1_4707
+sym_1_4707: la $2, sym_1_4707
+.globl sym_1_4708
+sym_1_4708: la $2, sym_1_4708
+.globl sym_1_4709
+sym_1_4709: la $2, sym_1_4709
+.globl sym_1_4710
+sym_1_4710: la $2, sym_1_4710
+.globl sym_1_4711
+sym_1_4711: la $2, sym_1_4711
+.globl sym_1_4712
+sym_1_4712: la $2, sym_1_4712
+.globl sym_1_4713
+sym_1_4713: la $2, sym_1_4713
+.globl sym_1_4714
+sym_1_4714: la $2, sym_1_4714
+.globl sym_1_4715
+sym_1_4715: la $2, sym_1_4715
+.globl sym_1_4716
+sym_1_4716: la $2, sym_1_4716
+.globl sym_1_4717
+sym_1_4717: la $2, sym_1_4717
+.globl sym_1_4718
+sym_1_4718: la $2, sym_1_4718
+.globl sym_1_4719
+sym_1_4719: la $2, sym_1_4719
+.globl sym_1_4720
+sym_1_4720: la $2, sym_1_4720
+.globl sym_1_4721
+sym_1_4721: la $2, sym_1_4721
+.globl sym_1_4722
+sym_1_4722: la $2, sym_1_4722
+.globl sym_1_4723
+sym_1_4723: la $2, sym_1_4723
+.globl sym_1_4724
+sym_1_4724: la $2, sym_1_4724
+.globl sym_1_4725
+sym_1_4725: la $2, sym_1_4725
+.globl sym_1_4726
+sym_1_4726: la $2, sym_1_4726
+.globl sym_1_4727
+sym_1_4727: la $2, sym_1_4727
+.globl sym_1_4728
+sym_1_4728: la $2, sym_1_4728
+.globl sym_1_4729
+sym_1_4729: la $2, sym_1_4729
+.globl sym_1_4730
+sym_1_4730: la $2, sym_1_4730
+.globl sym_1_4731
+sym_1_4731: la $2, sym_1_4731
+.globl sym_1_4732
+sym_1_4732: la $2, sym_1_4732
+.globl sym_1_4733
+sym_1_4733: la $2, sym_1_4733
+.globl sym_1_4734
+sym_1_4734: la $2, sym_1_4734
+.globl sym_1_4735
+sym_1_4735: la $2, sym_1_4735
+.globl sym_1_4736
+sym_1_4736: la $2, sym_1_4736
+.globl sym_1_4737
+sym_1_4737: la $2, sym_1_4737
+.globl sym_1_4738
+sym_1_4738: la $2, sym_1_4738
+.globl sym_1_4739
+sym_1_4739: la $2, sym_1_4739
+.globl sym_1_4740
+sym_1_4740: la $2, sym_1_4740
+.globl sym_1_4741
+sym_1_4741: la $2, sym_1_4741
+.globl sym_1_4742
+sym_1_4742: la $2, sym_1_4742
+.globl sym_1_4743
+sym_1_4743: la $2, sym_1_4743
+.globl sym_1_4744
+sym_1_4744: la $2, sym_1_4744
+.globl sym_1_4745
+sym_1_4745: la $2, sym_1_4745
+.globl sym_1_4746
+sym_1_4746: la $2, sym_1_4746
+.globl sym_1_4747
+sym_1_4747: la $2, sym_1_4747
+.globl sym_1_4748
+sym_1_4748: la $2, sym_1_4748
+.globl sym_1_4749
+sym_1_4749: la $2, sym_1_4749
+.globl sym_1_4750
+sym_1_4750: la $2, sym_1_4750
+.globl sym_1_4751
+sym_1_4751: la $2, sym_1_4751
+.globl sym_1_4752
+sym_1_4752: la $2, sym_1_4752
+.globl sym_1_4753
+sym_1_4753: la $2, sym_1_4753
+.globl sym_1_4754
+sym_1_4754: la $2, sym_1_4754
+.globl sym_1_4755
+sym_1_4755: la $2, sym_1_4755
+.globl sym_1_4756
+sym_1_4756: la $2, sym_1_4756
+.globl sym_1_4757
+sym_1_4757: la $2, sym_1_4757
+.globl sym_1_4758
+sym_1_4758: la $2, sym_1_4758
+.globl sym_1_4759
+sym_1_4759: la $2, sym_1_4759
+.globl sym_1_4760
+sym_1_4760: la $2, sym_1_4760
+.globl sym_1_4761
+sym_1_4761: la $2, sym_1_4761
+.globl sym_1_4762
+sym_1_4762: la $2, sym_1_4762
+.globl sym_1_4763
+sym_1_4763: la $2, sym_1_4763
+.globl sym_1_4764
+sym_1_4764: la $2, sym_1_4764
+.globl sym_1_4765
+sym_1_4765: la $2, sym_1_4765
+.globl sym_1_4766
+sym_1_4766: la $2, sym_1_4766
+.globl sym_1_4767
+sym_1_4767: la $2, sym_1_4767
+.globl sym_1_4768
+sym_1_4768: la $2, sym_1_4768
+.globl sym_1_4769
+sym_1_4769: la $2, sym_1_4769
+.globl sym_1_4770
+sym_1_4770: la $2, sym_1_4770
+.globl sym_1_4771
+sym_1_4771: la $2, sym_1_4771
+.globl sym_1_4772
+sym_1_4772: la $2, sym_1_4772
+.globl sym_1_4773
+sym_1_4773: la $2, sym_1_4773
+.globl sym_1_4774
+sym_1_4774: la $2, sym_1_4774
+.globl sym_1_4775
+sym_1_4775: la $2, sym_1_4775
+.globl sym_1_4776
+sym_1_4776: la $2, sym_1_4776
+.globl sym_1_4777
+sym_1_4777: la $2, sym_1_4777
+.globl sym_1_4778
+sym_1_4778: la $2, sym_1_4778
+.globl sym_1_4779
+sym_1_4779: la $2, sym_1_4779
+.globl sym_1_4780
+sym_1_4780: la $2, sym_1_4780
+.globl sym_1_4781
+sym_1_4781: la $2, sym_1_4781
+.globl sym_1_4782
+sym_1_4782: la $2, sym_1_4782
+.globl sym_1_4783
+sym_1_4783: la $2, sym_1_4783
+.globl sym_1_4784
+sym_1_4784: la $2, sym_1_4784
+.globl sym_1_4785
+sym_1_4785: la $2, sym_1_4785
+.globl sym_1_4786
+sym_1_4786: la $2, sym_1_4786
+.globl sym_1_4787
+sym_1_4787: la $2, sym_1_4787
+.globl sym_1_4788
+sym_1_4788: la $2, sym_1_4788
+.globl sym_1_4789
+sym_1_4789: la $2, sym_1_4789
+.globl sym_1_4790
+sym_1_4790: la $2, sym_1_4790
+.globl sym_1_4791
+sym_1_4791: la $2, sym_1_4791
+.globl sym_1_4792
+sym_1_4792: la $2, sym_1_4792
+.globl sym_1_4793
+sym_1_4793: la $2, sym_1_4793
+.globl sym_1_4794
+sym_1_4794: la $2, sym_1_4794
+.globl sym_1_4795
+sym_1_4795: la $2, sym_1_4795
+.globl sym_1_4796
+sym_1_4796: la $2, sym_1_4796
+.globl sym_1_4797
+sym_1_4797: la $2, sym_1_4797
+.globl sym_1_4798
+sym_1_4798: la $2, sym_1_4798
+.globl sym_1_4799
+sym_1_4799: la $2, sym_1_4799
+.globl sym_1_4800
+sym_1_4800: la $2, sym_1_4800
+.globl sym_1_4801
+sym_1_4801: la $2, sym_1_4801
+.globl sym_1_4802
+sym_1_4802: la $2, sym_1_4802
+.globl sym_1_4803
+sym_1_4803: la $2, sym_1_4803
+.globl sym_1_4804
+sym_1_4804: la $2, sym_1_4804
+.globl sym_1_4805
+sym_1_4805: la $2, sym_1_4805
+.globl sym_1_4806
+sym_1_4806: la $2, sym_1_4806
+.globl sym_1_4807
+sym_1_4807: la $2, sym_1_4807
+.globl sym_1_4808
+sym_1_4808: la $2, sym_1_4808
+.globl sym_1_4809
+sym_1_4809: la $2, sym_1_4809
+.globl sym_1_4810
+sym_1_4810: la $2, sym_1_4810
+.globl sym_1_4811
+sym_1_4811: la $2, sym_1_4811
+.globl sym_1_4812
+sym_1_4812: la $2, sym_1_4812
+.globl sym_1_4813
+sym_1_4813: la $2, sym_1_4813
+.globl sym_1_4814
+sym_1_4814: la $2, sym_1_4814
+.globl sym_1_4815
+sym_1_4815: la $2, sym_1_4815
+.globl sym_1_4816
+sym_1_4816: la $2, sym_1_4816
+.globl sym_1_4817
+sym_1_4817: la $2, sym_1_4817
+.globl sym_1_4818
+sym_1_4818: la $2, sym_1_4818
+.globl sym_1_4819
+sym_1_4819: la $2, sym_1_4819
+.globl sym_1_4820
+sym_1_4820: la $2, sym_1_4820
+.globl sym_1_4821
+sym_1_4821: la $2, sym_1_4821
+.globl sym_1_4822
+sym_1_4822: la $2, sym_1_4822
+.globl sym_1_4823
+sym_1_4823: la $2, sym_1_4823
+.globl sym_1_4824
+sym_1_4824: la $2, sym_1_4824
+.globl sym_1_4825
+sym_1_4825: la $2, sym_1_4825
+.globl sym_1_4826
+sym_1_4826: la $2, sym_1_4826
+.globl sym_1_4827
+sym_1_4827: la $2, sym_1_4827
+.globl sym_1_4828
+sym_1_4828: la $2, sym_1_4828
+.globl sym_1_4829
+sym_1_4829: la $2, sym_1_4829
+.globl sym_1_4830
+sym_1_4830: la $2, sym_1_4830
+.globl sym_1_4831
+sym_1_4831: la $2, sym_1_4831
+.globl sym_1_4832
+sym_1_4832: la $2, sym_1_4832
+.globl sym_1_4833
+sym_1_4833: la $2, sym_1_4833
+.globl sym_1_4834
+sym_1_4834: la $2, sym_1_4834
+.globl sym_1_4835
+sym_1_4835: la $2, sym_1_4835
+.globl sym_1_4836
+sym_1_4836: la $2, sym_1_4836
+.globl sym_1_4837
+sym_1_4837: la $2, sym_1_4837
+.globl sym_1_4838
+sym_1_4838: la $2, sym_1_4838
+.globl sym_1_4839
+sym_1_4839: la $2, sym_1_4839
+.globl sym_1_4840
+sym_1_4840: la $2, sym_1_4840
+.globl sym_1_4841
+sym_1_4841: la $2, sym_1_4841
+.globl sym_1_4842
+sym_1_4842: la $2, sym_1_4842
+.globl sym_1_4843
+sym_1_4843: la $2, sym_1_4843
+.globl sym_1_4844
+sym_1_4844: la $2, sym_1_4844
+.globl sym_1_4845
+sym_1_4845: la $2, sym_1_4845
+.globl sym_1_4846
+sym_1_4846: la $2, sym_1_4846
+.globl sym_1_4847
+sym_1_4847: la $2, sym_1_4847
+.globl sym_1_4848
+sym_1_4848: la $2, sym_1_4848
+.globl sym_1_4849
+sym_1_4849: la $2, sym_1_4849
+.globl sym_1_4850
+sym_1_4850: la $2, sym_1_4850
+.globl sym_1_4851
+sym_1_4851: la $2, sym_1_4851
+.globl sym_1_4852
+sym_1_4852: la $2, sym_1_4852
+.globl sym_1_4853
+sym_1_4853: la $2, sym_1_4853
+.globl sym_1_4854
+sym_1_4854: la $2, sym_1_4854
+.globl sym_1_4855
+sym_1_4855: la $2, sym_1_4855
+.globl sym_1_4856
+sym_1_4856: la $2, sym_1_4856
+.globl sym_1_4857
+sym_1_4857: la $2, sym_1_4857
+.globl sym_1_4858
+sym_1_4858: la $2, sym_1_4858
+.globl sym_1_4859
+sym_1_4859: la $2, sym_1_4859
+.globl sym_1_4860
+sym_1_4860: la $2, sym_1_4860
+.globl sym_1_4861
+sym_1_4861: la $2, sym_1_4861
+.globl sym_1_4862
+sym_1_4862: la $2, sym_1_4862
+.globl sym_1_4863
+sym_1_4863: la $2, sym_1_4863
+.globl sym_1_4864
+sym_1_4864: la $2, sym_1_4864
+.globl sym_1_4865
+sym_1_4865: la $2, sym_1_4865
+.globl sym_1_4866
+sym_1_4866: la $2, sym_1_4866
+.globl sym_1_4867
+sym_1_4867: la $2, sym_1_4867
+.globl sym_1_4868
+sym_1_4868: la $2, sym_1_4868
+.globl sym_1_4869
+sym_1_4869: la $2, sym_1_4869
+.globl sym_1_4870
+sym_1_4870: la $2, sym_1_4870
+.globl sym_1_4871
+sym_1_4871: la $2, sym_1_4871
+.globl sym_1_4872
+sym_1_4872: la $2, sym_1_4872
+.globl sym_1_4873
+sym_1_4873: la $2, sym_1_4873
+.globl sym_1_4874
+sym_1_4874: la $2, sym_1_4874
+.globl sym_1_4875
+sym_1_4875: la $2, sym_1_4875
+.globl sym_1_4876
+sym_1_4876: la $2, sym_1_4876
+.globl sym_1_4877
+sym_1_4877: la $2, sym_1_4877
+.globl sym_1_4878
+sym_1_4878: la $2, sym_1_4878
+.globl sym_1_4879
+sym_1_4879: la $2, sym_1_4879
+.globl sym_1_4880
+sym_1_4880: la $2, sym_1_4880
+.globl sym_1_4881
+sym_1_4881: la $2, sym_1_4881
+.globl sym_1_4882
+sym_1_4882: la $2, sym_1_4882
+.globl sym_1_4883
+sym_1_4883: la $2, sym_1_4883
+.globl sym_1_4884
+sym_1_4884: la $2, sym_1_4884
+.globl sym_1_4885
+sym_1_4885: la $2, sym_1_4885
+.globl sym_1_4886
+sym_1_4886: la $2, sym_1_4886
+.globl sym_1_4887
+sym_1_4887: la $2, sym_1_4887
+.globl sym_1_4888
+sym_1_4888: la $2, sym_1_4888
+.globl sym_1_4889
+sym_1_4889: la $2, sym_1_4889
+.globl sym_1_4890
+sym_1_4890: la $2, sym_1_4890
+.globl sym_1_4891
+sym_1_4891: la $2, sym_1_4891
+.globl sym_1_4892
+sym_1_4892: la $2, sym_1_4892
+.globl sym_1_4893
+sym_1_4893: la $2, sym_1_4893
+.globl sym_1_4894
+sym_1_4894: la $2, sym_1_4894
+.globl sym_1_4895
+sym_1_4895: la $2, sym_1_4895
+.globl sym_1_4896
+sym_1_4896: la $2, sym_1_4896
+.globl sym_1_4897
+sym_1_4897: la $2, sym_1_4897
+.globl sym_1_4898
+sym_1_4898: la $2, sym_1_4898
+.globl sym_1_4899
+sym_1_4899: la $2, sym_1_4899
+.globl sym_1_4900
+sym_1_4900: la $2, sym_1_4900
+.globl sym_1_4901
+sym_1_4901: la $2, sym_1_4901
+.globl sym_1_4902
+sym_1_4902: la $2, sym_1_4902
+.globl sym_1_4903
+sym_1_4903: la $2, sym_1_4903
+.globl sym_1_4904
+sym_1_4904: la $2, sym_1_4904
+.globl sym_1_4905
+sym_1_4905: la $2, sym_1_4905
+.globl sym_1_4906
+sym_1_4906: la $2, sym_1_4906
+.globl sym_1_4907
+sym_1_4907: la $2, sym_1_4907
+.globl sym_1_4908
+sym_1_4908: la $2, sym_1_4908
+.globl sym_1_4909
+sym_1_4909: la $2, sym_1_4909
+.globl sym_1_4910
+sym_1_4910: la $2, sym_1_4910
+.globl sym_1_4911
+sym_1_4911: la $2, sym_1_4911
+.globl sym_1_4912
+sym_1_4912: la $2, sym_1_4912
+.globl sym_1_4913
+sym_1_4913: la $2, sym_1_4913
+.globl sym_1_4914
+sym_1_4914: la $2, sym_1_4914
+.globl sym_1_4915
+sym_1_4915: la $2, sym_1_4915
+.globl sym_1_4916
+sym_1_4916: la $2, sym_1_4916
+.globl sym_1_4917
+sym_1_4917: la $2, sym_1_4917
+.globl sym_1_4918
+sym_1_4918: la $2, sym_1_4918
+.globl sym_1_4919
+sym_1_4919: la $2, sym_1_4919
+.globl sym_1_4920
+sym_1_4920: la $2, sym_1_4920
+.globl sym_1_4921
+sym_1_4921: la $2, sym_1_4921
+.globl sym_1_4922
+sym_1_4922: la $2, sym_1_4922
+.globl sym_1_4923
+sym_1_4923: la $2, sym_1_4923
+.globl sym_1_4924
+sym_1_4924: la $2, sym_1_4924
+.globl sym_1_4925
+sym_1_4925: la $2, sym_1_4925
+.globl sym_1_4926
+sym_1_4926: la $2, sym_1_4926
+.globl sym_1_4927
+sym_1_4927: la $2, sym_1_4927
+.globl sym_1_4928
+sym_1_4928: la $2, sym_1_4928
+.globl sym_1_4929
+sym_1_4929: la $2, sym_1_4929
+.globl sym_1_4930
+sym_1_4930: la $2, sym_1_4930
+.globl sym_1_4931
+sym_1_4931: la $2, sym_1_4931
+.globl sym_1_4932
+sym_1_4932: la $2, sym_1_4932
+.globl sym_1_4933
+sym_1_4933: la $2, sym_1_4933
+.globl sym_1_4934
+sym_1_4934: la $2, sym_1_4934
+.globl sym_1_4935
+sym_1_4935: la $2, sym_1_4935
+.globl sym_1_4936
+sym_1_4936: la $2, sym_1_4936
+.globl sym_1_4937
+sym_1_4937: la $2, sym_1_4937
+.globl sym_1_4938
+sym_1_4938: la $2, sym_1_4938
+.globl sym_1_4939
+sym_1_4939: la $2, sym_1_4939
+.globl sym_1_4940
+sym_1_4940: la $2, sym_1_4940
+.globl sym_1_4941
+sym_1_4941: la $2, sym_1_4941
+.globl sym_1_4942
+sym_1_4942: la $2, sym_1_4942
+.globl sym_1_4943
+sym_1_4943: la $2, sym_1_4943
+.globl sym_1_4944
+sym_1_4944: la $2, sym_1_4944
+.globl sym_1_4945
+sym_1_4945: la $2, sym_1_4945
+.globl sym_1_4946
+sym_1_4946: la $2, sym_1_4946
+.globl sym_1_4947
+sym_1_4947: la $2, sym_1_4947
+.globl sym_1_4948
+sym_1_4948: la $2, sym_1_4948
+.globl sym_1_4949
+sym_1_4949: la $2, sym_1_4949
+.globl sym_1_4950
+sym_1_4950: la $2, sym_1_4950
+.globl sym_1_4951
+sym_1_4951: la $2, sym_1_4951
+.globl sym_1_4952
+sym_1_4952: la $2, sym_1_4952
+.globl sym_1_4953
+sym_1_4953: la $2, sym_1_4953
+.globl sym_1_4954
+sym_1_4954: la $2, sym_1_4954
+.globl sym_1_4955
+sym_1_4955: la $2, sym_1_4955
+.globl sym_1_4956
+sym_1_4956: la $2, sym_1_4956
+.globl sym_1_4957
+sym_1_4957: la $2, sym_1_4957
+.globl sym_1_4958
+sym_1_4958: la $2, sym_1_4958
+.globl sym_1_4959
+sym_1_4959: la $2, sym_1_4959
+.globl sym_1_4960
+sym_1_4960: la $2, sym_1_4960
+.globl sym_1_4961
+sym_1_4961: la $2, sym_1_4961
+.globl sym_1_4962
+sym_1_4962: la $2, sym_1_4962
+.globl sym_1_4963
+sym_1_4963: la $2, sym_1_4963
+.globl sym_1_4964
+sym_1_4964: la $2, sym_1_4964
+.globl sym_1_4965
+sym_1_4965: la $2, sym_1_4965
+.globl sym_1_4966
+sym_1_4966: la $2, sym_1_4966
+.globl sym_1_4967
+sym_1_4967: la $2, sym_1_4967
+.globl sym_1_4968
+sym_1_4968: la $2, sym_1_4968
+.globl sym_1_4969
+sym_1_4969: la $2, sym_1_4969
+.globl sym_1_4970
+sym_1_4970: la $2, sym_1_4970
+.globl sym_1_4971
+sym_1_4971: la $2, sym_1_4971
+.globl sym_1_4972
+sym_1_4972: la $2, sym_1_4972
+.globl sym_1_4973
+sym_1_4973: la $2, sym_1_4973
+.globl sym_1_4974
+sym_1_4974: la $2, sym_1_4974
+.globl sym_1_4975
+sym_1_4975: la $2, sym_1_4975
+.globl sym_1_4976
+sym_1_4976: la $2, sym_1_4976
+.globl sym_1_4977
+sym_1_4977: la $2, sym_1_4977
+.globl sym_1_4978
+sym_1_4978: la $2, sym_1_4978
+.globl sym_1_4979
+sym_1_4979: la $2, sym_1_4979
+.globl sym_1_4980
+sym_1_4980: la $2, sym_1_4980
+.globl sym_1_4981
+sym_1_4981: la $2, sym_1_4981
+.globl sym_1_4982
+sym_1_4982: la $2, sym_1_4982
+.globl sym_1_4983
+sym_1_4983: la $2, sym_1_4983
+.globl sym_1_4984
+sym_1_4984: la $2, sym_1_4984
+.globl sym_1_4985
+sym_1_4985: la $2, sym_1_4985
+.globl sym_1_4986
+sym_1_4986: la $2, sym_1_4986
+.globl sym_1_4987
+sym_1_4987: la $2, sym_1_4987
+.globl sym_1_4988
+sym_1_4988: la $2, sym_1_4988
+.globl sym_1_4989
+sym_1_4989: la $2, sym_1_4989
+.globl sym_1_4990
+sym_1_4990: la $2, sym_1_4990
+.globl sym_1_4991
+sym_1_4991: la $2, sym_1_4991
+.globl sym_1_4992
+sym_1_4992: la $2, sym_1_4992
+.globl sym_1_4993
+sym_1_4993: la $2, sym_1_4993
+.globl sym_1_4994
+sym_1_4994: la $2, sym_1_4994
+.globl sym_1_4995
+sym_1_4995: la $2, sym_1_4995
+.globl sym_1_4996
+sym_1_4996: la $2, sym_1_4996
+.globl sym_1_4997
+sym_1_4997: la $2, sym_1_4997
+.globl sym_1_4998
+sym_1_4998: la $2, sym_1_4998
+.globl sym_1_4999
+sym_1_4999: la $2, sym_1_4999
+.globl sym_1_5000
+sym_1_5000: la $2, sym_1_5000
+.globl sym_1_5001
+sym_1_5001: la $2, sym_1_5001
+.globl sym_1_5002
+sym_1_5002: la $2, sym_1_5002
+.globl sym_1_5003
+sym_1_5003: la $2, sym_1_5003
+.globl sym_1_5004
+sym_1_5004: la $2, sym_1_5004
+.globl sym_1_5005
+sym_1_5005: la $2, sym_1_5005
+.globl sym_1_5006
+sym_1_5006: la $2, sym_1_5006
+.globl sym_1_5007
+sym_1_5007: la $2, sym_1_5007
+.globl sym_1_5008
+sym_1_5008: la $2, sym_1_5008
+.globl sym_1_5009
+sym_1_5009: la $2, sym_1_5009
+.globl sym_1_5010
+sym_1_5010: la $2, sym_1_5010
+.globl sym_1_5011
+sym_1_5011: la $2, sym_1_5011
+.globl sym_1_5012
+sym_1_5012: la $2, sym_1_5012
+.globl sym_1_5013
+sym_1_5013: la $2, sym_1_5013
+.globl sym_1_5014
+sym_1_5014: la $2, sym_1_5014
+.globl sym_1_5015
+sym_1_5015: la $2, sym_1_5015
+.globl sym_1_5016
+sym_1_5016: la $2, sym_1_5016
+.globl sym_1_5017
+sym_1_5017: la $2, sym_1_5017
+.globl sym_1_5018
+sym_1_5018: la $2, sym_1_5018
+.globl sym_1_5019
+sym_1_5019: la $2, sym_1_5019
+.globl sym_1_5020
+sym_1_5020: la $2, sym_1_5020
+.globl sym_1_5021
+sym_1_5021: la $2, sym_1_5021
+.globl sym_1_5022
+sym_1_5022: la $2, sym_1_5022
+.globl sym_1_5023
+sym_1_5023: la $2, sym_1_5023
+.globl sym_1_5024
+sym_1_5024: la $2, sym_1_5024
+.globl sym_1_5025
+sym_1_5025: la $2, sym_1_5025
+.globl sym_1_5026
+sym_1_5026: la $2, sym_1_5026
+.globl sym_1_5027
+sym_1_5027: la $2, sym_1_5027
+.globl sym_1_5028
+sym_1_5028: la $2, sym_1_5028
+.globl sym_1_5029
+sym_1_5029: la $2, sym_1_5029
+.globl sym_1_5030
+sym_1_5030: la $2, sym_1_5030
+.globl sym_1_5031
+sym_1_5031: la $2, sym_1_5031
+.globl sym_1_5032
+sym_1_5032: la $2, sym_1_5032
+.globl sym_1_5033
+sym_1_5033: la $2, sym_1_5033
+.globl sym_1_5034
+sym_1_5034: la $2, sym_1_5034
+.globl sym_1_5035
+sym_1_5035: la $2, sym_1_5035
+.globl sym_1_5036
+sym_1_5036: la $2, sym_1_5036
+.globl sym_1_5037
+sym_1_5037: la $2, sym_1_5037
+.globl sym_1_5038
+sym_1_5038: la $2, sym_1_5038
+.globl sym_1_5039
+sym_1_5039: la $2, sym_1_5039
+.globl sym_1_5040
+sym_1_5040: la $2, sym_1_5040
+.globl sym_1_5041
+sym_1_5041: la $2, sym_1_5041
+.globl sym_1_5042
+sym_1_5042: la $2, sym_1_5042
+.globl sym_1_5043
+sym_1_5043: la $2, sym_1_5043
+.globl sym_1_5044
+sym_1_5044: la $2, sym_1_5044
+.globl sym_1_5045
+sym_1_5045: la $2, sym_1_5045
+.globl sym_1_5046
+sym_1_5046: la $2, sym_1_5046
+.globl sym_1_5047
+sym_1_5047: la $2, sym_1_5047
+.globl sym_1_5048
+sym_1_5048: la $2, sym_1_5048
+.globl sym_1_5049
+sym_1_5049: la $2, sym_1_5049
+.globl sym_1_5050
+sym_1_5050: la $2, sym_1_5050
+.globl sym_1_5051
+sym_1_5051: la $2, sym_1_5051
+.globl sym_1_5052
+sym_1_5052: la $2, sym_1_5052
+.globl sym_1_5053
+sym_1_5053: la $2, sym_1_5053
+.globl sym_1_5054
+sym_1_5054: la $2, sym_1_5054
+.globl sym_1_5055
+sym_1_5055: la $2, sym_1_5055
+.globl sym_1_5056
+sym_1_5056: la $2, sym_1_5056
+.globl sym_1_5057
+sym_1_5057: la $2, sym_1_5057
+.globl sym_1_5058
+sym_1_5058: la $2, sym_1_5058
+.globl sym_1_5059
+sym_1_5059: la $2, sym_1_5059
+.globl sym_1_5060
+sym_1_5060: la $2, sym_1_5060
+.globl sym_1_5061
+sym_1_5061: la $2, sym_1_5061
+.globl sym_1_5062
+sym_1_5062: la $2, sym_1_5062
+.globl sym_1_5063
+sym_1_5063: la $2, sym_1_5063
+.globl sym_1_5064
+sym_1_5064: la $2, sym_1_5064
+.globl sym_1_5065
+sym_1_5065: la $2, sym_1_5065
+.globl sym_1_5066
+sym_1_5066: la $2, sym_1_5066
+.globl sym_1_5067
+sym_1_5067: la $2, sym_1_5067
+.globl sym_1_5068
+sym_1_5068: la $2, sym_1_5068
+.globl sym_1_5069
+sym_1_5069: la $2, sym_1_5069
+.globl sym_1_5070
+sym_1_5070: la $2, sym_1_5070
+.globl sym_1_5071
+sym_1_5071: la $2, sym_1_5071
+.globl sym_1_5072
+sym_1_5072: la $2, sym_1_5072
+.globl sym_1_5073
+sym_1_5073: la $2, sym_1_5073
+.globl sym_1_5074
+sym_1_5074: la $2, sym_1_5074
+.globl sym_1_5075
+sym_1_5075: la $2, sym_1_5075
+.globl sym_1_5076
+sym_1_5076: la $2, sym_1_5076
+.globl sym_1_5077
+sym_1_5077: la $2, sym_1_5077
+.globl sym_1_5078
+sym_1_5078: la $2, sym_1_5078
+.globl sym_1_5079
+sym_1_5079: la $2, sym_1_5079
+.globl sym_1_5080
+sym_1_5080: la $2, sym_1_5080
+.globl sym_1_5081
+sym_1_5081: la $2, sym_1_5081
+.globl sym_1_5082
+sym_1_5082: la $2, sym_1_5082
+.globl sym_1_5083
+sym_1_5083: la $2, sym_1_5083
+.globl sym_1_5084
+sym_1_5084: la $2, sym_1_5084
+.globl sym_1_5085
+sym_1_5085: la $2, sym_1_5085
+.globl sym_1_5086
+sym_1_5086: la $2, sym_1_5086
+.globl sym_1_5087
+sym_1_5087: la $2, sym_1_5087
+.globl sym_1_5088
+sym_1_5088: la $2, sym_1_5088
+.globl sym_1_5089
+sym_1_5089: la $2, sym_1_5089
+.globl sym_1_5090
+sym_1_5090: la $2, sym_1_5090
+.globl sym_1_5091
+sym_1_5091: la $2, sym_1_5091
+.globl sym_1_5092
+sym_1_5092: la $2, sym_1_5092
+.globl sym_1_5093
+sym_1_5093: la $2, sym_1_5093
+.globl sym_1_5094
+sym_1_5094: la $2, sym_1_5094
+.globl sym_1_5095
+sym_1_5095: la $2, sym_1_5095
+.globl sym_1_5096
+sym_1_5096: la $2, sym_1_5096
+.globl sym_1_5097
+sym_1_5097: la $2, sym_1_5097
+.globl sym_1_5098
+sym_1_5098: la $2, sym_1_5098
+.globl sym_1_5099
+sym_1_5099: la $2, sym_1_5099
+.globl sym_1_5100
+sym_1_5100: la $2, sym_1_5100
+.globl sym_1_5101
+sym_1_5101: la $2, sym_1_5101
+.globl sym_1_5102
+sym_1_5102: la $2, sym_1_5102
+.globl sym_1_5103
+sym_1_5103: la $2, sym_1_5103
+.globl sym_1_5104
+sym_1_5104: la $2, sym_1_5104
+.globl sym_1_5105
+sym_1_5105: la $2, sym_1_5105
+.globl sym_1_5106
+sym_1_5106: la $2, sym_1_5106
+.globl sym_1_5107
+sym_1_5107: la $2, sym_1_5107
+.globl sym_1_5108
+sym_1_5108: la $2, sym_1_5108
+.globl sym_1_5109
+sym_1_5109: la $2, sym_1_5109
+.globl sym_1_5110
+sym_1_5110: la $2, sym_1_5110
+.globl sym_1_5111
+sym_1_5111: la $2, sym_1_5111
+.globl sym_1_5112
+sym_1_5112: la $2, sym_1_5112
+.globl sym_1_5113
+sym_1_5113: la $2, sym_1_5113
+.globl sym_1_5114
+sym_1_5114: la $2, sym_1_5114
+.globl sym_1_5115
+sym_1_5115: la $2, sym_1_5115
+.globl sym_1_5116
+sym_1_5116: la $2, sym_1_5116
+.globl sym_1_5117
+sym_1_5117: la $2, sym_1_5117
+.globl sym_1_5118
+sym_1_5118: la $2, sym_1_5118
+.globl sym_1_5119
+sym_1_5119: la $2, sym_1_5119
+.globl sym_1_5120
+sym_1_5120: la $2, sym_1_5120
+.globl sym_1_5121
+sym_1_5121: la $2, sym_1_5121
+.globl sym_1_5122
+sym_1_5122: la $2, sym_1_5122
+.globl sym_1_5123
+sym_1_5123: la $2, sym_1_5123
+.globl sym_1_5124
+sym_1_5124: la $2, sym_1_5124
+.globl sym_1_5125
+sym_1_5125: la $2, sym_1_5125
+.globl sym_1_5126
+sym_1_5126: la $2, sym_1_5126
+.globl sym_1_5127
+sym_1_5127: la $2, sym_1_5127
+.globl sym_1_5128
+sym_1_5128: la $2, sym_1_5128
+.globl sym_1_5129
+sym_1_5129: la $2, sym_1_5129
+.globl sym_1_5130
+sym_1_5130: la $2, sym_1_5130
+.globl sym_1_5131
+sym_1_5131: la $2, sym_1_5131
+.globl sym_1_5132
+sym_1_5132: la $2, sym_1_5132
+.globl sym_1_5133
+sym_1_5133: la $2, sym_1_5133
+.globl sym_1_5134
+sym_1_5134: la $2, sym_1_5134
+.globl sym_1_5135
+sym_1_5135: la $2, sym_1_5135
+.globl sym_1_5136
+sym_1_5136: la $2, sym_1_5136
+.globl sym_1_5137
+sym_1_5137: la $2, sym_1_5137
+.globl sym_1_5138
+sym_1_5138: la $2, sym_1_5138
+.globl sym_1_5139
+sym_1_5139: la $2, sym_1_5139
+.globl sym_1_5140
+sym_1_5140: la $2, sym_1_5140
+.globl sym_1_5141
+sym_1_5141: la $2, sym_1_5141
+.globl sym_1_5142
+sym_1_5142: la $2, sym_1_5142
+.globl sym_1_5143
+sym_1_5143: la $2, sym_1_5143
+.globl sym_1_5144
+sym_1_5144: la $2, sym_1_5144
+.globl sym_1_5145
+sym_1_5145: la $2, sym_1_5145
+.globl sym_1_5146
+sym_1_5146: la $2, sym_1_5146
+.globl sym_1_5147
+sym_1_5147: la $2, sym_1_5147
+.globl sym_1_5148
+sym_1_5148: la $2, sym_1_5148
+.globl sym_1_5149
+sym_1_5149: la $2, sym_1_5149
+.globl sym_1_5150
+sym_1_5150: la $2, sym_1_5150
+.globl sym_1_5151
+sym_1_5151: la $2, sym_1_5151
+.globl sym_1_5152
+sym_1_5152: la $2, sym_1_5152
+.globl sym_1_5153
+sym_1_5153: la $2, sym_1_5153
+.globl sym_1_5154
+sym_1_5154: la $2, sym_1_5154
+.globl sym_1_5155
+sym_1_5155: la $2, sym_1_5155
+.globl sym_1_5156
+sym_1_5156: la $2, sym_1_5156
+.globl sym_1_5157
+sym_1_5157: la $2, sym_1_5157
+.globl sym_1_5158
+sym_1_5158: la $2, sym_1_5158
+.globl sym_1_5159
+sym_1_5159: la $2, sym_1_5159
+.globl sym_1_5160
+sym_1_5160: la $2, sym_1_5160
+.globl sym_1_5161
+sym_1_5161: la $2, sym_1_5161
+.globl sym_1_5162
+sym_1_5162: la $2, sym_1_5162
+.globl sym_1_5163
+sym_1_5163: la $2, sym_1_5163
+.globl sym_1_5164
+sym_1_5164: la $2, sym_1_5164
+.globl sym_1_5165
+sym_1_5165: la $2, sym_1_5165
+.globl sym_1_5166
+sym_1_5166: la $2, sym_1_5166
+.globl sym_1_5167
+sym_1_5167: la $2, sym_1_5167
+.globl sym_1_5168
+sym_1_5168: la $2, sym_1_5168
+.globl sym_1_5169
+sym_1_5169: la $2, sym_1_5169
+.globl sym_1_5170
+sym_1_5170: la $2, sym_1_5170
+.globl sym_1_5171
+sym_1_5171: la $2, sym_1_5171
+.globl sym_1_5172
+sym_1_5172: la $2, sym_1_5172
+.globl sym_1_5173
+sym_1_5173: la $2, sym_1_5173
+.globl sym_1_5174
+sym_1_5174: la $2, sym_1_5174
+.globl sym_1_5175
+sym_1_5175: la $2, sym_1_5175
+.globl sym_1_5176
+sym_1_5176: la $2, sym_1_5176
+.globl sym_1_5177
+sym_1_5177: la $2, sym_1_5177
+.globl sym_1_5178
+sym_1_5178: la $2, sym_1_5178
+.globl sym_1_5179
+sym_1_5179: la $2, sym_1_5179
+.globl sym_1_5180
+sym_1_5180: la $2, sym_1_5180
+.globl sym_1_5181
+sym_1_5181: la $2, sym_1_5181
+.globl sym_1_5182
+sym_1_5182: la $2, sym_1_5182
+.globl sym_1_5183
+sym_1_5183: la $2, sym_1_5183
+.globl sym_1_5184
+sym_1_5184: la $2, sym_1_5184
+.globl sym_1_5185
+sym_1_5185: la $2, sym_1_5185
+.globl sym_1_5186
+sym_1_5186: la $2, sym_1_5186
+.globl sym_1_5187
+sym_1_5187: la $2, sym_1_5187
+.globl sym_1_5188
+sym_1_5188: la $2, sym_1_5188
+.globl sym_1_5189
+sym_1_5189: la $2, sym_1_5189
+.globl sym_1_5190
+sym_1_5190: la $2, sym_1_5190
+.globl sym_1_5191
+sym_1_5191: la $2, sym_1_5191
+.globl sym_1_5192
+sym_1_5192: la $2, sym_1_5192
+.globl sym_1_5193
+sym_1_5193: la $2, sym_1_5193
+.globl sym_1_5194
+sym_1_5194: la $2, sym_1_5194
+.globl sym_1_5195
+sym_1_5195: la $2, sym_1_5195
+.globl sym_1_5196
+sym_1_5196: la $2, sym_1_5196
+.globl sym_1_5197
+sym_1_5197: la $2, sym_1_5197
+.globl sym_1_5198
+sym_1_5198: la $2, sym_1_5198
+.globl sym_1_5199
+sym_1_5199: la $2, sym_1_5199
+.globl sym_1_5200
+sym_1_5200: la $2, sym_1_5200
+.globl sym_1_5201
+sym_1_5201: la $2, sym_1_5201
+.globl sym_1_5202
+sym_1_5202: la $2, sym_1_5202
+.globl sym_1_5203
+sym_1_5203: la $2, sym_1_5203
+.globl sym_1_5204
+sym_1_5204: la $2, sym_1_5204
+.globl sym_1_5205
+sym_1_5205: la $2, sym_1_5205
+.globl sym_1_5206
+sym_1_5206: la $2, sym_1_5206
+.globl sym_1_5207
+sym_1_5207: la $2, sym_1_5207
+.globl sym_1_5208
+sym_1_5208: la $2, sym_1_5208
+.globl sym_1_5209
+sym_1_5209: la $2, sym_1_5209
+.globl sym_1_5210
+sym_1_5210: la $2, sym_1_5210
+.globl sym_1_5211
+sym_1_5211: la $2, sym_1_5211
+.globl sym_1_5212
+sym_1_5212: la $2, sym_1_5212
+.globl sym_1_5213
+sym_1_5213: la $2, sym_1_5213
+.globl sym_1_5214
+sym_1_5214: la $2, sym_1_5214
+.globl sym_1_5215
+sym_1_5215: la $2, sym_1_5215
+.globl sym_1_5216
+sym_1_5216: la $2, sym_1_5216
+.globl sym_1_5217
+sym_1_5217: la $2, sym_1_5217
+.globl sym_1_5218
+sym_1_5218: la $2, sym_1_5218
+.globl sym_1_5219
+sym_1_5219: la $2, sym_1_5219
+.globl sym_1_5220
+sym_1_5220: la $2, sym_1_5220
+.globl sym_1_5221
+sym_1_5221: la $2, sym_1_5221
+.globl sym_1_5222
+sym_1_5222: la $2, sym_1_5222
+.globl sym_1_5223
+sym_1_5223: la $2, sym_1_5223
+.globl sym_1_5224
+sym_1_5224: la $2, sym_1_5224
+.globl sym_1_5225
+sym_1_5225: la $2, sym_1_5225
+.globl sym_1_5226
+sym_1_5226: la $2, sym_1_5226
+.globl sym_1_5227
+sym_1_5227: la $2, sym_1_5227
+.globl sym_1_5228
+sym_1_5228: la $2, sym_1_5228
+.globl sym_1_5229
+sym_1_5229: la $2, sym_1_5229
+.globl sym_1_5230
+sym_1_5230: la $2, sym_1_5230
+.globl sym_1_5231
+sym_1_5231: la $2, sym_1_5231
+.globl sym_1_5232
+sym_1_5232: la $2, sym_1_5232
+.globl sym_1_5233
+sym_1_5233: la $2, sym_1_5233
+.globl sym_1_5234
+sym_1_5234: la $2, sym_1_5234
+.globl sym_1_5235
+sym_1_5235: la $2, sym_1_5235
+.globl sym_1_5236
+sym_1_5236: la $2, sym_1_5236
+.globl sym_1_5237
+sym_1_5237: la $2, sym_1_5237
+.globl sym_1_5238
+sym_1_5238: la $2, sym_1_5238
+.globl sym_1_5239
+sym_1_5239: la $2, sym_1_5239
+.globl sym_1_5240
+sym_1_5240: la $2, sym_1_5240
+.globl sym_1_5241
+sym_1_5241: la $2, sym_1_5241
+.globl sym_1_5242
+sym_1_5242: la $2, sym_1_5242
+.globl sym_1_5243
+sym_1_5243: la $2, sym_1_5243
+.globl sym_1_5244
+sym_1_5244: la $2, sym_1_5244
+.globl sym_1_5245
+sym_1_5245: la $2, sym_1_5245
+.globl sym_1_5246
+sym_1_5246: la $2, sym_1_5246
+.globl sym_1_5247
+sym_1_5247: la $2, sym_1_5247
+.globl sym_1_5248
+sym_1_5248: la $2, sym_1_5248
+.globl sym_1_5249
+sym_1_5249: la $2, sym_1_5249
+.globl sym_1_5250
+sym_1_5250: la $2, sym_1_5250
+.globl sym_1_5251
+sym_1_5251: la $2, sym_1_5251
+.globl sym_1_5252
+sym_1_5252: la $2, sym_1_5252
+.globl sym_1_5253
+sym_1_5253: la $2, sym_1_5253
+.globl sym_1_5254
+sym_1_5254: la $2, sym_1_5254
+.globl sym_1_5255
+sym_1_5255: la $2, sym_1_5255
+.globl sym_1_5256
+sym_1_5256: la $2, sym_1_5256
+.globl sym_1_5257
+sym_1_5257: la $2, sym_1_5257
+.globl sym_1_5258
+sym_1_5258: la $2, sym_1_5258
+.globl sym_1_5259
+sym_1_5259: la $2, sym_1_5259
+.globl sym_1_5260
+sym_1_5260: la $2, sym_1_5260
+.globl sym_1_5261
+sym_1_5261: la $2, sym_1_5261
+.globl sym_1_5262
+sym_1_5262: la $2, sym_1_5262
+.globl sym_1_5263
+sym_1_5263: la $2, sym_1_5263
+.globl sym_1_5264
+sym_1_5264: la $2, sym_1_5264
+.globl sym_1_5265
+sym_1_5265: la $2, sym_1_5265
+.globl sym_1_5266
+sym_1_5266: la $2, sym_1_5266
+.globl sym_1_5267
+sym_1_5267: la $2, sym_1_5267
+.globl sym_1_5268
+sym_1_5268: la $2, sym_1_5268
+.globl sym_1_5269
+sym_1_5269: la $2, sym_1_5269
+.globl sym_1_5270
+sym_1_5270: la $2, sym_1_5270
+.globl sym_1_5271
+sym_1_5271: la $2, sym_1_5271
+.globl sym_1_5272
+sym_1_5272: la $2, sym_1_5272
+.globl sym_1_5273
+sym_1_5273: la $2, sym_1_5273
+.globl sym_1_5274
+sym_1_5274: la $2, sym_1_5274
+.globl sym_1_5275
+sym_1_5275: la $2, sym_1_5275
+.globl sym_1_5276
+sym_1_5276: la $2, sym_1_5276
+.globl sym_1_5277
+sym_1_5277: la $2, sym_1_5277
+.globl sym_1_5278
+sym_1_5278: la $2, sym_1_5278
+.globl sym_1_5279
+sym_1_5279: la $2, sym_1_5279
+.globl sym_1_5280
+sym_1_5280: la $2, sym_1_5280
+.globl sym_1_5281
+sym_1_5281: la $2, sym_1_5281
+.globl sym_1_5282
+sym_1_5282: la $2, sym_1_5282
+.globl sym_1_5283
+sym_1_5283: la $2, sym_1_5283
+.globl sym_1_5284
+sym_1_5284: la $2, sym_1_5284
+.globl sym_1_5285
+sym_1_5285: la $2, sym_1_5285
+.globl sym_1_5286
+sym_1_5286: la $2, sym_1_5286
+.globl sym_1_5287
+sym_1_5287: la $2, sym_1_5287
+.globl sym_1_5288
+sym_1_5288: la $2, sym_1_5288
+.globl sym_1_5289
+sym_1_5289: la $2, sym_1_5289
+.globl sym_1_5290
+sym_1_5290: la $2, sym_1_5290
+.globl sym_1_5291
+sym_1_5291: la $2, sym_1_5291
+.globl sym_1_5292
+sym_1_5292: la $2, sym_1_5292
+.globl sym_1_5293
+sym_1_5293: la $2, sym_1_5293
+.globl sym_1_5294
+sym_1_5294: la $2, sym_1_5294
+.globl sym_1_5295
+sym_1_5295: la $2, sym_1_5295
+.globl sym_1_5296
+sym_1_5296: la $2, sym_1_5296
+.globl sym_1_5297
+sym_1_5297: la $2, sym_1_5297
+.globl sym_1_5298
+sym_1_5298: la $2, sym_1_5298
+.globl sym_1_5299
+sym_1_5299: la $2, sym_1_5299
+.globl sym_1_5300
+sym_1_5300: la $2, sym_1_5300
+.globl sym_1_5301
+sym_1_5301: la $2, sym_1_5301
+.globl sym_1_5302
+sym_1_5302: la $2, sym_1_5302
+.globl sym_1_5303
+sym_1_5303: la $2, sym_1_5303
+.globl sym_1_5304
+sym_1_5304: la $2, sym_1_5304
+.globl sym_1_5305
+sym_1_5305: la $2, sym_1_5305
+.globl sym_1_5306
+sym_1_5306: la $2, sym_1_5306
+.globl sym_1_5307
+sym_1_5307: la $2, sym_1_5307
+.globl sym_1_5308
+sym_1_5308: la $2, sym_1_5308
+.globl sym_1_5309
+sym_1_5309: la $2, sym_1_5309
+.globl sym_1_5310
+sym_1_5310: la $2, sym_1_5310
+.globl sym_1_5311
+sym_1_5311: la $2, sym_1_5311
+.globl sym_1_5312
+sym_1_5312: la $2, sym_1_5312
+.globl sym_1_5313
+sym_1_5313: la $2, sym_1_5313
+.globl sym_1_5314
+sym_1_5314: la $2, sym_1_5314
+.globl sym_1_5315
+sym_1_5315: la $2, sym_1_5315
+.globl sym_1_5316
+sym_1_5316: la $2, sym_1_5316
+.globl sym_1_5317
+sym_1_5317: la $2, sym_1_5317
+.globl sym_1_5318
+sym_1_5318: la $2, sym_1_5318
+.globl sym_1_5319
+sym_1_5319: la $2, sym_1_5319
+.globl sym_1_5320
+sym_1_5320: la $2, sym_1_5320
+.globl sym_1_5321
+sym_1_5321: la $2, sym_1_5321
+.globl sym_1_5322
+sym_1_5322: la $2, sym_1_5322
+.globl sym_1_5323
+sym_1_5323: la $2, sym_1_5323
+.globl sym_1_5324
+sym_1_5324: la $2, sym_1_5324
+.globl sym_1_5325
+sym_1_5325: la $2, sym_1_5325
+.globl sym_1_5326
+sym_1_5326: la $2, sym_1_5326
+.globl sym_1_5327
+sym_1_5327: la $2, sym_1_5327
+.globl sym_1_5328
+sym_1_5328: la $2, sym_1_5328
+.globl sym_1_5329
+sym_1_5329: la $2, sym_1_5329
+.globl sym_1_5330
+sym_1_5330: la $2, sym_1_5330
+.globl sym_1_5331
+sym_1_5331: la $2, sym_1_5331
+.globl sym_1_5332
+sym_1_5332: la $2, sym_1_5332
+.globl sym_1_5333
+sym_1_5333: la $2, sym_1_5333
+.globl sym_1_5334
+sym_1_5334: la $2, sym_1_5334
+.globl sym_1_5335
+sym_1_5335: la $2, sym_1_5335
+.globl sym_1_5336
+sym_1_5336: la $2, sym_1_5336
+.globl sym_1_5337
+sym_1_5337: la $2, sym_1_5337
+.globl sym_1_5338
+sym_1_5338: la $2, sym_1_5338
+.globl sym_1_5339
+sym_1_5339: la $2, sym_1_5339
+.globl sym_1_5340
+sym_1_5340: la $2, sym_1_5340
+.globl sym_1_5341
+sym_1_5341: la $2, sym_1_5341
+.globl sym_1_5342
+sym_1_5342: la $2, sym_1_5342
+.globl sym_1_5343
+sym_1_5343: la $2, sym_1_5343
+.globl sym_1_5344
+sym_1_5344: la $2, sym_1_5344
+.globl sym_1_5345
+sym_1_5345: la $2, sym_1_5345
+.globl sym_1_5346
+sym_1_5346: la $2, sym_1_5346
+.globl sym_1_5347
+sym_1_5347: la $2, sym_1_5347
+.globl sym_1_5348
+sym_1_5348: la $2, sym_1_5348
+.globl sym_1_5349
+sym_1_5349: la $2, sym_1_5349
+.globl sym_1_5350
+sym_1_5350: la $2, sym_1_5350
+.globl sym_1_5351
+sym_1_5351: la $2, sym_1_5351
+.globl sym_1_5352
+sym_1_5352: la $2, sym_1_5352
+.globl sym_1_5353
+sym_1_5353: la $2, sym_1_5353
+.globl sym_1_5354
+sym_1_5354: la $2, sym_1_5354
+.globl sym_1_5355
+sym_1_5355: la $2, sym_1_5355
+.globl sym_1_5356
+sym_1_5356: la $2, sym_1_5356
+.globl sym_1_5357
+sym_1_5357: la $2, sym_1_5357
+.globl sym_1_5358
+sym_1_5358: la $2, sym_1_5358
+.globl sym_1_5359
+sym_1_5359: la $2, sym_1_5359
+.globl sym_1_5360
+sym_1_5360: la $2, sym_1_5360
+.globl sym_1_5361
+sym_1_5361: la $2, sym_1_5361
+.globl sym_1_5362
+sym_1_5362: la $2, sym_1_5362
+.globl sym_1_5363
+sym_1_5363: la $2, sym_1_5363
+.globl sym_1_5364
+sym_1_5364: la $2, sym_1_5364
+.globl sym_1_5365
+sym_1_5365: la $2, sym_1_5365
+.globl sym_1_5366
+sym_1_5366: la $2, sym_1_5366
+.globl sym_1_5367
+sym_1_5367: la $2, sym_1_5367
+.globl sym_1_5368
+sym_1_5368: la $2, sym_1_5368
+.globl sym_1_5369
+sym_1_5369: la $2, sym_1_5369
+.globl sym_1_5370
+sym_1_5370: la $2, sym_1_5370
+.globl sym_1_5371
+sym_1_5371: la $2, sym_1_5371
+.globl sym_1_5372
+sym_1_5372: la $2, sym_1_5372
+.globl sym_1_5373
+sym_1_5373: la $2, sym_1_5373
+.globl sym_1_5374
+sym_1_5374: la $2, sym_1_5374
+.globl sym_1_5375
+sym_1_5375: la $2, sym_1_5375
+.globl sym_1_5376
+sym_1_5376: la $2, sym_1_5376
+.globl sym_1_5377
+sym_1_5377: la $2, sym_1_5377
+.globl sym_1_5378
+sym_1_5378: la $2, sym_1_5378
+.globl sym_1_5379
+sym_1_5379: la $2, sym_1_5379
+.globl sym_1_5380
+sym_1_5380: la $2, sym_1_5380
+.globl sym_1_5381
+sym_1_5381: la $2, sym_1_5381
+.globl sym_1_5382
+sym_1_5382: la $2, sym_1_5382
+.globl sym_1_5383
+sym_1_5383: la $2, sym_1_5383
+.globl sym_1_5384
+sym_1_5384: la $2, sym_1_5384
+.globl sym_1_5385
+sym_1_5385: la $2, sym_1_5385
+.globl sym_1_5386
+sym_1_5386: la $2, sym_1_5386
+.globl sym_1_5387
+sym_1_5387: la $2, sym_1_5387
+.globl sym_1_5388
+sym_1_5388: la $2, sym_1_5388
+.globl sym_1_5389
+sym_1_5389: la $2, sym_1_5389
+.globl sym_1_5390
+sym_1_5390: la $2, sym_1_5390
+.globl sym_1_5391
+sym_1_5391: la $2, sym_1_5391
+.globl sym_1_5392
+sym_1_5392: la $2, sym_1_5392
+.globl sym_1_5393
+sym_1_5393: la $2, sym_1_5393
+.globl sym_1_5394
+sym_1_5394: la $2, sym_1_5394
+.globl sym_1_5395
+sym_1_5395: la $2, sym_1_5395
+.globl sym_1_5396
+sym_1_5396: la $2, sym_1_5396
+.globl sym_1_5397
+sym_1_5397: la $2, sym_1_5397
+.globl sym_1_5398
+sym_1_5398: la $2, sym_1_5398
+.globl sym_1_5399
+sym_1_5399: la $2, sym_1_5399
+.globl sym_1_5400
+sym_1_5400: la $2, sym_1_5400
+.globl sym_1_5401
+sym_1_5401: la $2, sym_1_5401
+.globl sym_1_5402
+sym_1_5402: la $2, sym_1_5402
+.globl sym_1_5403
+sym_1_5403: la $2, sym_1_5403
+.globl sym_1_5404
+sym_1_5404: la $2, sym_1_5404
+.globl sym_1_5405
+sym_1_5405: la $2, sym_1_5405
+.globl sym_1_5406
+sym_1_5406: la $2, sym_1_5406
+.globl sym_1_5407
+sym_1_5407: la $2, sym_1_5407
+.globl sym_1_5408
+sym_1_5408: la $2, sym_1_5408
+.globl sym_1_5409
+sym_1_5409: la $2, sym_1_5409
+.globl sym_1_5410
+sym_1_5410: la $2, sym_1_5410
+.globl sym_1_5411
+sym_1_5411: la $2, sym_1_5411
+.globl sym_1_5412
+sym_1_5412: la $2, sym_1_5412
+.globl sym_1_5413
+sym_1_5413: la $2, sym_1_5413
+.globl sym_1_5414
+sym_1_5414: la $2, sym_1_5414
+.globl sym_1_5415
+sym_1_5415: la $2, sym_1_5415
+.globl sym_1_5416
+sym_1_5416: la $2, sym_1_5416
+.globl sym_1_5417
+sym_1_5417: la $2, sym_1_5417
+.globl sym_1_5418
+sym_1_5418: la $2, sym_1_5418
+.globl sym_1_5419
+sym_1_5419: la $2, sym_1_5419
+.globl sym_1_5420
+sym_1_5420: la $2, sym_1_5420
+.globl sym_1_5421
+sym_1_5421: la $2, sym_1_5421
+.globl sym_1_5422
+sym_1_5422: la $2, sym_1_5422
+.globl sym_1_5423
+sym_1_5423: la $2, sym_1_5423
+.globl sym_1_5424
+sym_1_5424: la $2, sym_1_5424
+.globl sym_1_5425
+sym_1_5425: la $2, sym_1_5425
+.globl sym_1_5426
+sym_1_5426: la $2, sym_1_5426
+.globl sym_1_5427
+sym_1_5427: la $2, sym_1_5427
+.globl sym_1_5428
+sym_1_5428: la $2, sym_1_5428
+.globl sym_1_5429
+sym_1_5429: la $2, sym_1_5429
+.globl sym_1_5430
+sym_1_5430: la $2, sym_1_5430
+.globl sym_1_5431
+sym_1_5431: la $2, sym_1_5431
+.globl sym_1_5432
+sym_1_5432: la $2, sym_1_5432
+.globl sym_1_5433
+sym_1_5433: la $2, sym_1_5433
+.globl sym_1_5434
+sym_1_5434: la $2, sym_1_5434
+.globl sym_1_5435
+sym_1_5435: la $2, sym_1_5435
+.globl sym_1_5436
+sym_1_5436: la $2, sym_1_5436
+.globl sym_1_5437
+sym_1_5437: la $2, sym_1_5437
+.globl sym_1_5438
+sym_1_5438: la $2, sym_1_5438
+.globl sym_1_5439
+sym_1_5439: la $2, sym_1_5439
+.globl sym_1_5440
+sym_1_5440: la $2, sym_1_5440
+.globl sym_1_5441
+sym_1_5441: la $2, sym_1_5441
+.globl sym_1_5442
+sym_1_5442: la $2, sym_1_5442
+.globl sym_1_5443
+sym_1_5443: la $2, sym_1_5443
+.globl sym_1_5444
+sym_1_5444: la $2, sym_1_5444
+.globl sym_1_5445
+sym_1_5445: la $2, sym_1_5445
+.globl sym_1_5446
+sym_1_5446: la $2, sym_1_5446
+.globl sym_1_5447
+sym_1_5447: la $2, sym_1_5447
+.globl sym_1_5448
+sym_1_5448: la $2, sym_1_5448
+.globl sym_1_5449
+sym_1_5449: la $2, sym_1_5449
+.globl sym_1_5450
+sym_1_5450: la $2, sym_1_5450
+.globl sym_1_5451
+sym_1_5451: la $2, sym_1_5451
+.globl sym_1_5452
+sym_1_5452: la $2, sym_1_5452
+.globl sym_1_5453
+sym_1_5453: la $2, sym_1_5453
+.globl sym_1_5454
+sym_1_5454: la $2, sym_1_5454
+.globl sym_1_5455
+sym_1_5455: la $2, sym_1_5455
+.globl sym_1_5456
+sym_1_5456: la $2, sym_1_5456
+.globl sym_1_5457
+sym_1_5457: la $2, sym_1_5457
+.globl sym_1_5458
+sym_1_5458: la $2, sym_1_5458
+.globl sym_1_5459
+sym_1_5459: la $2, sym_1_5459
+.globl sym_1_5460
+sym_1_5460: la $2, sym_1_5460
+.globl sym_1_5461
+sym_1_5461: la $2, sym_1_5461
+.globl sym_1_5462
+sym_1_5462: la $2, sym_1_5462
+.globl sym_1_5463
+sym_1_5463: la $2, sym_1_5463
+.globl sym_1_5464
+sym_1_5464: la $2, sym_1_5464
+.globl sym_1_5465
+sym_1_5465: la $2, sym_1_5465
+.globl sym_1_5466
+sym_1_5466: la $2, sym_1_5466
+.globl sym_1_5467
+sym_1_5467: la $2, sym_1_5467
+.globl sym_1_5468
+sym_1_5468: la $2, sym_1_5468
+.globl sym_1_5469
+sym_1_5469: la $2, sym_1_5469
+.globl sym_1_5470
+sym_1_5470: la $2, sym_1_5470
+.globl sym_1_5471
+sym_1_5471: la $2, sym_1_5471
+.globl sym_1_5472
+sym_1_5472: la $2, sym_1_5472
+.globl sym_1_5473
+sym_1_5473: la $2, sym_1_5473
+.globl sym_1_5474
+sym_1_5474: la $2, sym_1_5474
+.globl sym_1_5475
+sym_1_5475: la $2, sym_1_5475
+.globl sym_1_5476
+sym_1_5476: la $2, sym_1_5476
+.globl sym_1_5477
+sym_1_5477: la $2, sym_1_5477
+.globl sym_1_5478
+sym_1_5478: la $2, sym_1_5478
+.globl sym_1_5479
+sym_1_5479: la $2, sym_1_5479
+.globl sym_1_5480
+sym_1_5480: la $2, sym_1_5480
+.globl sym_1_5481
+sym_1_5481: la $2, sym_1_5481
+.globl sym_1_5482
+sym_1_5482: la $2, sym_1_5482
+.globl sym_1_5483
+sym_1_5483: la $2, sym_1_5483
+.globl sym_1_5484
+sym_1_5484: la $2, sym_1_5484
+.globl sym_1_5485
+sym_1_5485: la $2, sym_1_5485
+.globl sym_1_5486
+sym_1_5486: la $2, sym_1_5486
+.globl sym_1_5487
+sym_1_5487: la $2, sym_1_5487
+.globl sym_1_5488
+sym_1_5488: la $2, sym_1_5488
+.globl sym_1_5489
+sym_1_5489: la $2, sym_1_5489
+.globl sym_1_5490
+sym_1_5490: la $2, sym_1_5490
+.globl sym_1_5491
+sym_1_5491: la $2, sym_1_5491
+.globl sym_1_5492
+sym_1_5492: la $2, sym_1_5492
+.globl sym_1_5493
+sym_1_5493: la $2, sym_1_5493
+.globl sym_1_5494
+sym_1_5494: la $2, sym_1_5494
+.globl sym_1_5495
+sym_1_5495: la $2, sym_1_5495
+.globl sym_1_5496
+sym_1_5496: la $2, sym_1_5496
+.globl sym_1_5497
+sym_1_5497: la $2, sym_1_5497
+.globl sym_1_5498
+sym_1_5498: la $2, sym_1_5498
+.globl sym_1_5499
+sym_1_5499: la $2, sym_1_5499
+.globl sym_1_5500
+sym_1_5500: la $2, sym_1_5500
+.globl sym_1_5501
+sym_1_5501: la $2, sym_1_5501
+.globl sym_1_5502
+sym_1_5502: la $2, sym_1_5502
+.globl sym_1_5503
+sym_1_5503: la $2, sym_1_5503
+.globl sym_1_5504
+sym_1_5504: la $2, sym_1_5504
+.globl sym_1_5505
+sym_1_5505: la $2, sym_1_5505
+.globl sym_1_5506
+sym_1_5506: la $2, sym_1_5506
+.globl sym_1_5507
+sym_1_5507: la $2, sym_1_5507
+.globl sym_1_5508
+sym_1_5508: la $2, sym_1_5508
+.globl sym_1_5509
+sym_1_5509: la $2, sym_1_5509
+.globl sym_1_5510
+sym_1_5510: la $2, sym_1_5510
+.globl sym_1_5511
+sym_1_5511: la $2, sym_1_5511
+.globl sym_1_5512
+sym_1_5512: la $2, sym_1_5512
+.globl sym_1_5513
+sym_1_5513: la $2, sym_1_5513
+.globl sym_1_5514
+sym_1_5514: la $2, sym_1_5514
+.globl sym_1_5515
+sym_1_5515: la $2, sym_1_5515
+.globl sym_1_5516
+sym_1_5516: la $2, sym_1_5516
+.globl sym_1_5517
+sym_1_5517: la $2, sym_1_5517
+.globl sym_1_5518
+sym_1_5518: la $2, sym_1_5518
+.globl sym_1_5519
+sym_1_5519: la $2, sym_1_5519
+.globl sym_1_5520
+sym_1_5520: la $2, sym_1_5520
+.globl sym_1_5521
+sym_1_5521: la $2, sym_1_5521
+.globl sym_1_5522
+sym_1_5522: la $2, sym_1_5522
+.globl sym_1_5523
+sym_1_5523: la $2, sym_1_5523
+.globl sym_1_5524
+sym_1_5524: la $2, sym_1_5524
+.globl sym_1_5525
+sym_1_5525: la $2, sym_1_5525
+.globl sym_1_5526
+sym_1_5526: la $2, sym_1_5526
+.globl sym_1_5527
+sym_1_5527: la $2, sym_1_5527
+.globl sym_1_5528
+sym_1_5528: la $2, sym_1_5528
+.globl sym_1_5529
+sym_1_5529: la $2, sym_1_5529
+.globl sym_1_5530
+sym_1_5530: la $2, sym_1_5530
+.globl sym_1_5531
+sym_1_5531: la $2, sym_1_5531
+.globl sym_1_5532
+sym_1_5532: la $2, sym_1_5532
+.globl sym_1_5533
+sym_1_5533: la $2, sym_1_5533
+.globl sym_1_5534
+sym_1_5534: la $2, sym_1_5534
+.globl sym_1_5535
+sym_1_5535: la $2, sym_1_5535
+.globl sym_1_5536
+sym_1_5536: la $2, sym_1_5536
+.globl sym_1_5537
+sym_1_5537: la $2, sym_1_5537
+.globl sym_1_5538
+sym_1_5538: la $2, sym_1_5538
+.globl sym_1_5539
+sym_1_5539: la $2, sym_1_5539
+.globl sym_1_5540
+sym_1_5540: la $2, sym_1_5540
+.globl sym_1_5541
+sym_1_5541: la $2, sym_1_5541
+.globl sym_1_5542
+sym_1_5542: la $2, sym_1_5542
+.globl sym_1_5543
+sym_1_5543: la $2, sym_1_5543
+.globl sym_1_5544
+sym_1_5544: la $2, sym_1_5544
+.globl sym_1_5545
+sym_1_5545: la $2, sym_1_5545
+.globl sym_1_5546
+sym_1_5546: la $2, sym_1_5546
+.globl sym_1_5547
+sym_1_5547: la $2, sym_1_5547
+.globl sym_1_5548
+sym_1_5548: la $2, sym_1_5548
+.globl sym_1_5549
+sym_1_5549: la $2, sym_1_5549
+.globl sym_1_5550
+sym_1_5550: la $2, sym_1_5550
+.globl sym_1_5551
+sym_1_5551: la $2, sym_1_5551
+.globl sym_1_5552
+sym_1_5552: la $2, sym_1_5552
+.globl sym_1_5553
+sym_1_5553: la $2, sym_1_5553
+.globl sym_1_5554
+sym_1_5554: la $2, sym_1_5554
+.globl sym_1_5555
+sym_1_5555: la $2, sym_1_5555
+.globl sym_1_5556
+sym_1_5556: la $2, sym_1_5556
+.globl sym_1_5557
+sym_1_5557: la $2, sym_1_5557
+.globl sym_1_5558
+sym_1_5558: la $2, sym_1_5558
+.globl sym_1_5559
+sym_1_5559: la $2, sym_1_5559
+.globl sym_1_5560
+sym_1_5560: la $2, sym_1_5560
+.globl sym_1_5561
+sym_1_5561: la $2, sym_1_5561
+.globl sym_1_5562
+sym_1_5562: la $2, sym_1_5562
+.globl sym_1_5563
+sym_1_5563: la $2, sym_1_5563
+.globl sym_1_5564
+sym_1_5564: la $2, sym_1_5564
+.globl sym_1_5565
+sym_1_5565: la $2, sym_1_5565
+.globl sym_1_5566
+sym_1_5566: la $2, sym_1_5566
+.globl sym_1_5567
+sym_1_5567: la $2, sym_1_5567
+.globl sym_1_5568
+sym_1_5568: la $2, sym_1_5568
+.globl sym_1_5569
+sym_1_5569: la $2, sym_1_5569
+.globl sym_1_5570
+sym_1_5570: la $2, sym_1_5570
+.globl sym_1_5571
+sym_1_5571: la $2, sym_1_5571
+.globl sym_1_5572
+sym_1_5572: la $2, sym_1_5572
+.globl sym_1_5573
+sym_1_5573: la $2, sym_1_5573
+.globl sym_1_5574
+sym_1_5574: la $2, sym_1_5574
+.globl sym_1_5575
+sym_1_5575: la $2, sym_1_5575
+.globl sym_1_5576
+sym_1_5576: la $2, sym_1_5576
+.globl sym_1_5577
+sym_1_5577: la $2, sym_1_5577
+.globl sym_1_5578
+sym_1_5578: la $2, sym_1_5578
+.globl sym_1_5579
+sym_1_5579: la $2, sym_1_5579
+.globl sym_1_5580
+sym_1_5580: la $2, sym_1_5580
+.globl sym_1_5581
+sym_1_5581: la $2, sym_1_5581
+.globl sym_1_5582
+sym_1_5582: la $2, sym_1_5582
+.globl sym_1_5583
+sym_1_5583: la $2, sym_1_5583
+.globl sym_1_5584
+sym_1_5584: la $2, sym_1_5584
+.globl sym_1_5585
+sym_1_5585: la $2, sym_1_5585
+.globl sym_1_5586
+sym_1_5586: la $2, sym_1_5586
+.globl sym_1_5587
+sym_1_5587: la $2, sym_1_5587
+.globl sym_1_5588
+sym_1_5588: la $2, sym_1_5588
+.globl sym_1_5589
+sym_1_5589: la $2, sym_1_5589
+.globl sym_1_5590
+sym_1_5590: la $2, sym_1_5590
+.globl sym_1_5591
+sym_1_5591: la $2, sym_1_5591
+.globl sym_1_5592
+sym_1_5592: la $2, sym_1_5592
+.globl sym_1_5593
+sym_1_5593: la $2, sym_1_5593
+.globl sym_1_5594
+sym_1_5594: la $2, sym_1_5594
+.globl sym_1_5595
+sym_1_5595: la $2, sym_1_5595
+.globl sym_1_5596
+sym_1_5596: la $2, sym_1_5596
+.globl sym_1_5597
+sym_1_5597: la $2, sym_1_5597
+.globl sym_1_5598
+sym_1_5598: la $2, sym_1_5598
+.globl sym_1_5599
+sym_1_5599: la $2, sym_1_5599
+.globl sym_1_5600
+sym_1_5600: la $2, sym_1_5600
+.globl sym_1_5601
+sym_1_5601: la $2, sym_1_5601
+.globl sym_1_5602
+sym_1_5602: la $2, sym_1_5602
+.globl sym_1_5603
+sym_1_5603: la $2, sym_1_5603
+.globl sym_1_5604
+sym_1_5604: la $2, sym_1_5604
+.globl sym_1_5605
+sym_1_5605: la $2, sym_1_5605
+.globl sym_1_5606
+sym_1_5606: la $2, sym_1_5606
+.globl sym_1_5607
+sym_1_5607: la $2, sym_1_5607
+.globl sym_1_5608
+sym_1_5608: la $2, sym_1_5608
+.globl sym_1_5609
+sym_1_5609: la $2, sym_1_5609
+.globl sym_1_5610
+sym_1_5610: la $2, sym_1_5610
+.globl sym_1_5611
+sym_1_5611: la $2, sym_1_5611
+.globl sym_1_5612
+sym_1_5612: la $2, sym_1_5612
+.globl sym_1_5613
+sym_1_5613: la $2, sym_1_5613
+.globl sym_1_5614
+sym_1_5614: la $2, sym_1_5614
+.globl sym_1_5615
+sym_1_5615: la $2, sym_1_5615
+.globl sym_1_5616
+sym_1_5616: la $2, sym_1_5616
+.globl sym_1_5617
+sym_1_5617: la $2, sym_1_5617
+.globl sym_1_5618
+sym_1_5618: la $2, sym_1_5618
+.globl sym_1_5619
+sym_1_5619: la $2, sym_1_5619
+.globl sym_1_5620
+sym_1_5620: la $2, sym_1_5620
+.globl sym_1_5621
+sym_1_5621: la $2, sym_1_5621
+.globl sym_1_5622
+sym_1_5622: la $2, sym_1_5622
+.globl sym_1_5623
+sym_1_5623: la $2, sym_1_5623
+.globl sym_1_5624
+sym_1_5624: la $2, sym_1_5624
+.globl sym_1_5625
+sym_1_5625: la $2, sym_1_5625
+.globl sym_1_5626
+sym_1_5626: la $2, sym_1_5626
+.globl sym_1_5627
+sym_1_5627: la $2, sym_1_5627
+.globl sym_1_5628
+sym_1_5628: la $2, sym_1_5628
+.globl sym_1_5629
+sym_1_5629: la $2, sym_1_5629
+.globl sym_1_5630
+sym_1_5630: la $2, sym_1_5630
+.globl sym_1_5631
+sym_1_5631: la $2, sym_1_5631
+.globl sym_1_5632
+sym_1_5632: la $2, sym_1_5632
+.globl sym_1_5633
+sym_1_5633: la $2, sym_1_5633
+.globl sym_1_5634
+sym_1_5634: la $2, sym_1_5634
+.globl sym_1_5635
+sym_1_5635: la $2, sym_1_5635
+.globl sym_1_5636
+sym_1_5636: la $2, sym_1_5636
+.globl sym_1_5637
+sym_1_5637: la $2, sym_1_5637
+.globl sym_1_5638
+sym_1_5638: la $2, sym_1_5638
+.globl sym_1_5639
+sym_1_5639: la $2, sym_1_5639
+.globl sym_1_5640
+sym_1_5640: la $2, sym_1_5640
+.globl sym_1_5641
+sym_1_5641: la $2, sym_1_5641
+.globl sym_1_5642
+sym_1_5642: la $2, sym_1_5642
+.globl sym_1_5643
+sym_1_5643: la $2, sym_1_5643
+.globl sym_1_5644
+sym_1_5644: la $2, sym_1_5644
+.globl sym_1_5645
+sym_1_5645: la $2, sym_1_5645
+.globl sym_1_5646
+sym_1_5646: la $2, sym_1_5646
+.globl sym_1_5647
+sym_1_5647: la $2, sym_1_5647
+.globl sym_1_5648
+sym_1_5648: la $2, sym_1_5648
+.globl sym_1_5649
+sym_1_5649: la $2, sym_1_5649
+.globl sym_1_5650
+sym_1_5650: la $2, sym_1_5650
+.globl sym_1_5651
+sym_1_5651: la $2, sym_1_5651
+.globl sym_1_5652
+sym_1_5652: la $2, sym_1_5652
+.globl sym_1_5653
+sym_1_5653: la $2, sym_1_5653
+.globl sym_1_5654
+sym_1_5654: la $2, sym_1_5654
+.globl sym_1_5655
+sym_1_5655: la $2, sym_1_5655
+.globl sym_1_5656
+sym_1_5656: la $2, sym_1_5656
+.globl sym_1_5657
+sym_1_5657: la $2, sym_1_5657
+.globl sym_1_5658
+sym_1_5658: la $2, sym_1_5658
+.globl sym_1_5659
+sym_1_5659: la $2, sym_1_5659
+.globl sym_1_5660
+sym_1_5660: la $2, sym_1_5660
+.globl sym_1_5661
+sym_1_5661: la $2, sym_1_5661
+.globl sym_1_5662
+sym_1_5662: la $2, sym_1_5662
+.globl sym_1_5663
+sym_1_5663: la $2, sym_1_5663
+.globl sym_1_5664
+sym_1_5664: la $2, sym_1_5664
+.globl sym_1_5665
+sym_1_5665: la $2, sym_1_5665
+.globl sym_1_5666
+sym_1_5666: la $2, sym_1_5666
+.globl sym_1_5667
+sym_1_5667: la $2, sym_1_5667
+.globl sym_1_5668
+sym_1_5668: la $2, sym_1_5668
+.globl sym_1_5669
+sym_1_5669: la $2, sym_1_5669
+.globl sym_1_5670
+sym_1_5670: la $2, sym_1_5670
+.globl sym_1_5671
+sym_1_5671: la $2, sym_1_5671
+.globl sym_1_5672
+sym_1_5672: la $2, sym_1_5672
+.globl sym_1_5673
+sym_1_5673: la $2, sym_1_5673
+.globl sym_1_5674
+sym_1_5674: la $2, sym_1_5674
+.globl sym_1_5675
+sym_1_5675: la $2, sym_1_5675
+.globl sym_1_5676
+sym_1_5676: la $2, sym_1_5676
+.globl sym_1_5677
+sym_1_5677: la $2, sym_1_5677
+.globl sym_1_5678
+sym_1_5678: la $2, sym_1_5678
+.globl sym_1_5679
+sym_1_5679: la $2, sym_1_5679
+.globl sym_1_5680
+sym_1_5680: la $2, sym_1_5680
+.globl sym_1_5681
+sym_1_5681: la $2, sym_1_5681
+.globl sym_1_5682
+sym_1_5682: la $2, sym_1_5682
+.globl sym_1_5683
+sym_1_5683: la $2, sym_1_5683
+.globl sym_1_5684
+sym_1_5684: la $2, sym_1_5684
+.globl sym_1_5685
+sym_1_5685: la $2, sym_1_5685
+.globl sym_1_5686
+sym_1_5686: la $2, sym_1_5686
+.globl sym_1_5687
+sym_1_5687: la $2, sym_1_5687
+.globl sym_1_5688
+sym_1_5688: la $2, sym_1_5688
+.globl sym_1_5689
+sym_1_5689: la $2, sym_1_5689
+.globl sym_1_5690
+sym_1_5690: la $2, sym_1_5690
+.globl sym_1_5691
+sym_1_5691: la $2, sym_1_5691
+.globl sym_1_5692
+sym_1_5692: la $2, sym_1_5692
+.globl sym_1_5693
+sym_1_5693: la $2, sym_1_5693
+.globl sym_1_5694
+sym_1_5694: la $2, sym_1_5694
+.globl sym_1_5695
+sym_1_5695: la $2, sym_1_5695
+.globl sym_1_5696
+sym_1_5696: la $2, sym_1_5696
+.globl sym_1_5697
+sym_1_5697: la $2, sym_1_5697
+.globl sym_1_5698
+sym_1_5698: la $2, sym_1_5698
+.globl sym_1_5699
+sym_1_5699: la $2, sym_1_5699
+.globl sym_1_5700
+sym_1_5700: la $2, sym_1_5700
+.globl sym_1_5701
+sym_1_5701: la $2, sym_1_5701
+.globl sym_1_5702
+sym_1_5702: la $2, sym_1_5702
+.globl sym_1_5703
+sym_1_5703: la $2, sym_1_5703
+.globl sym_1_5704
+sym_1_5704: la $2, sym_1_5704
+.globl sym_1_5705
+sym_1_5705: la $2, sym_1_5705
+.globl sym_1_5706
+sym_1_5706: la $2, sym_1_5706
+.globl sym_1_5707
+sym_1_5707: la $2, sym_1_5707
+.globl sym_1_5708
+sym_1_5708: la $2, sym_1_5708
+.globl sym_1_5709
+sym_1_5709: la $2, sym_1_5709
+.globl sym_1_5710
+sym_1_5710: la $2, sym_1_5710
+.globl sym_1_5711
+sym_1_5711: la $2, sym_1_5711
+.globl sym_1_5712
+sym_1_5712: la $2, sym_1_5712
+.globl sym_1_5713
+sym_1_5713: la $2, sym_1_5713
+.globl sym_1_5714
+sym_1_5714: la $2, sym_1_5714
+.globl sym_1_5715
+sym_1_5715: la $2, sym_1_5715
+.globl sym_1_5716
+sym_1_5716: la $2, sym_1_5716
+.globl sym_1_5717
+sym_1_5717: la $2, sym_1_5717
+.globl sym_1_5718
+sym_1_5718: la $2, sym_1_5718
+.globl sym_1_5719
+sym_1_5719: la $2, sym_1_5719
+.globl sym_1_5720
+sym_1_5720: la $2, sym_1_5720
+.globl sym_1_5721
+sym_1_5721: la $2, sym_1_5721
+.globl sym_1_5722
+sym_1_5722: la $2, sym_1_5722
+.globl sym_1_5723
+sym_1_5723: la $2, sym_1_5723
+.globl sym_1_5724
+sym_1_5724: la $2, sym_1_5724
+.globl sym_1_5725
+sym_1_5725: la $2, sym_1_5725
+.globl sym_1_5726
+sym_1_5726: la $2, sym_1_5726
+.globl sym_1_5727
+sym_1_5727: la $2, sym_1_5727
+.globl sym_1_5728
+sym_1_5728: la $2, sym_1_5728
+.globl sym_1_5729
+sym_1_5729: la $2, sym_1_5729
+.globl sym_1_5730
+sym_1_5730: la $2, sym_1_5730
+.globl sym_1_5731
+sym_1_5731: la $2, sym_1_5731
+.globl sym_1_5732
+sym_1_5732: la $2, sym_1_5732
+.globl sym_1_5733
+sym_1_5733: la $2, sym_1_5733
+.globl sym_1_5734
+sym_1_5734: la $2, sym_1_5734
+.globl sym_1_5735
+sym_1_5735: la $2, sym_1_5735
+.globl sym_1_5736
+sym_1_5736: la $2, sym_1_5736
+.globl sym_1_5737
+sym_1_5737: la $2, sym_1_5737
+.globl sym_1_5738
+sym_1_5738: la $2, sym_1_5738
+.globl sym_1_5739
+sym_1_5739: la $2, sym_1_5739
+.globl sym_1_5740
+sym_1_5740: la $2, sym_1_5740
+.globl sym_1_5741
+sym_1_5741: la $2, sym_1_5741
+.globl sym_1_5742
+sym_1_5742: la $2, sym_1_5742
+.globl sym_1_5743
+sym_1_5743: la $2, sym_1_5743
+.globl sym_1_5744
+sym_1_5744: la $2, sym_1_5744
+.globl sym_1_5745
+sym_1_5745: la $2, sym_1_5745
+.globl sym_1_5746
+sym_1_5746: la $2, sym_1_5746
+.globl sym_1_5747
+sym_1_5747: la $2, sym_1_5747
+.globl sym_1_5748
+sym_1_5748: la $2, sym_1_5748
+.globl sym_1_5749
+sym_1_5749: la $2, sym_1_5749
+.globl sym_1_5750
+sym_1_5750: la $2, sym_1_5750
+.globl sym_1_5751
+sym_1_5751: la $2, sym_1_5751
+.globl sym_1_5752
+sym_1_5752: la $2, sym_1_5752
+.globl sym_1_5753
+sym_1_5753: la $2, sym_1_5753
+.globl sym_1_5754
+sym_1_5754: la $2, sym_1_5754
+.globl sym_1_5755
+sym_1_5755: la $2, sym_1_5755
+.globl sym_1_5756
+sym_1_5756: la $2, sym_1_5756
+.globl sym_1_5757
+sym_1_5757: la $2, sym_1_5757
+.globl sym_1_5758
+sym_1_5758: la $2, sym_1_5758
+.globl sym_1_5759
+sym_1_5759: la $2, sym_1_5759
+.globl sym_1_5760
+sym_1_5760: la $2, sym_1_5760
+.globl sym_1_5761
+sym_1_5761: la $2, sym_1_5761
+.globl sym_1_5762
+sym_1_5762: la $2, sym_1_5762
+.globl sym_1_5763
+sym_1_5763: la $2, sym_1_5763
+.globl sym_1_5764
+sym_1_5764: la $2, sym_1_5764
+.globl sym_1_5765
+sym_1_5765: la $2, sym_1_5765
+.globl sym_1_5766
+sym_1_5766: la $2, sym_1_5766
+.globl sym_1_5767
+sym_1_5767: la $2, sym_1_5767
+.globl sym_1_5768
+sym_1_5768: la $2, sym_1_5768
+.globl sym_1_5769
+sym_1_5769: la $2, sym_1_5769
+.globl sym_1_5770
+sym_1_5770: la $2, sym_1_5770
+.globl sym_1_5771
+sym_1_5771: la $2, sym_1_5771
+.globl sym_1_5772
+sym_1_5772: la $2, sym_1_5772
+.globl sym_1_5773
+sym_1_5773: la $2, sym_1_5773
+.globl sym_1_5774
+sym_1_5774: la $2, sym_1_5774
+.globl sym_1_5775
+sym_1_5775: la $2, sym_1_5775
+.globl sym_1_5776
+sym_1_5776: la $2, sym_1_5776
+.globl sym_1_5777
+sym_1_5777: la $2, sym_1_5777
+.globl sym_1_5778
+sym_1_5778: la $2, sym_1_5778
+.globl sym_1_5779
+sym_1_5779: la $2, sym_1_5779
+.globl sym_1_5780
+sym_1_5780: la $2, sym_1_5780
+.globl sym_1_5781
+sym_1_5781: la $2, sym_1_5781
+.globl sym_1_5782
+sym_1_5782: la $2, sym_1_5782
+.globl sym_1_5783
+sym_1_5783: la $2, sym_1_5783
+.globl sym_1_5784
+sym_1_5784: la $2, sym_1_5784
+.globl sym_1_5785
+sym_1_5785: la $2, sym_1_5785
+.globl sym_1_5786
+sym_1_5786: la $2, sym_1_5786
+.globl sym_1_5787
+sym_1_5787: la $2, sym_1_5787
+.globl sym_1_5788
+sym_1_5788: la $2, sym_1_5788
+.globl sym_1_5789
+sym_1_5789: la $2, sym_1_5789
+.globl sym_1_5790
+sym_1_5790: la $2, sym_1_5790
+.globl sym_1_5791
+sym_1_5791: la $2, sym_1_5791
+.globl sym_1_5792
+sym_1_5792: la $2, sym_1_5792
+.globl sym_1_5793
+sym_1_5793: la $2, sym_1_5793
+.globl sym_1_5794
+sym_1_5794: la $2, sym_1_5794
+.globl sym_1_5795
+sym_1_5795: la $2, sym_1_5795
+.globl sym_1_5796
+sym_1_5796: la $2, sym_1_5796
+.globl sym_1_5797
+sym_1_5797: la $2, sym_1_5797
+.globl sym_1_5798
+sym_1_5798: la $2, sym_1_5798
+.globl sym_1_5799
+sym_1_5799: la $2, sym_1_5799
+.globl sym_1_5800
+sym_1_5800: la $2, sym_1_5800
+.globl sym_1_5801
+sym_1_5801: la $2, sym_1_5801
+.globl sym_1_5802
+sym_1_5802: la $2, sym_1_5802
+.globl sym_1_5803
+sym_1_5803: la $2, sym_1_5803
+.globl sym_1_5804
+sym_1_5804: la $2, sym_1_5804
+.globl sym_1_5805
+sym_1_5805: la $2, sym_1_5805
+.globl sym_1_5806
+sym_1_5806: la $2, sym_1_5806
+.globl sym_1_5807
+sym_1_5807: la $2, sym_1_5807
+.globl sym_1_5808
+sym_1_5808: la $2, sym_1_5808
+.globl sym_1_5809
+sym_1_5809: la $2, sym_1_5809
+.globl sym_1_5810
+sym_1_5810: la $2, sym_1_5810
+.globl sym_1_5811
+sym_1_5811: la $2, sym_1_5811
+.globl sym_1_5812
+sym_1_5812: la $2, sym_1_5812
+.globl sym_1_5813
+sym_1_5813: la $2, sym_1_5813
+.globl sym_1_5814
+sym_1_5814: la $2, sym_1_5814
+.globl sym_1_5815
+sym_1_5815: la $2, sym_1_5815
+.globl sym_1_5816
+sym_1_5816: la $2, sym_1_5816
+.globl sym_1_5817
+sym_1_5817: la $2, sym_1_5817
+.globl sym_1_5818
+sym_1_5818: la $2, sym_1_5818
+.globl sym_1_5819
+sym_1_5819: la $2, sym_1_5819
+.globl sym_1_5820
+sym_1_5820: la $2, sym_1_5820
+.globl sym_1_5821
+sym_1_5821: la $2, sym_1_5821
+.globl sym_1_5822
+sym_1_5822: la $2, sym_1_5822
+.globl sym_1_5823
+sym_1_5823: la $2, sym_1_5823
+.globl sym_1_5824
+sym_1_5824: la $2, sym_1_5824
+.globl sym_1_5825
+sym_1_5825: la $2, sym_1_5825
+.globl sym_1_5826
+sym_1_5826: la $2, sym_1_5826
+.globl sym_1_5827
+sym_1_5827: la $2, sym_1_5827
+.globl sym_1_5828
+sym_1_5828: la $2, sym_1_5828
+.globl sym_1_5829
+sym_1_5829: la $2, sym_1_5829
+.globl sym_1_5830
+sym_1_5830: la $2, sym_1_5830
+.globl sym_1_5831
+sym_1_5831: la $2, sym_1_5831
+.globl sym_1_5832
+sym_1_5832: la $2, sym_1_5832
+.globl sym_1_5833
+sym_1_5833: la $2, sym_1_5833
+.globl sym_1_5834
+sym_1_5834: la $2, sym_1_5834
+.globl sym_1_5835
+sym_1_5835: la $2, sym_1_5835
+.globl sym_1_5836
+sym_1_5836: la $2, sym_1_5836
+.globl sym_1_5837
+sym_1_5837: la $2, sym_1_5837
+.globl sym_1_5838
+sym_1_5838: la $2, sym_1_5838
+.globl sym_1_5839
+sym_1_5839: la $2, sym_1_5839
+.globl sym_1_5840
+sym_1_5840: la $2, sym_1_5840
+.globl sym_1_5841
+sym_1_5841: la $2, sym_1_5841
+.globl sym_1_5842
+sym_1_5842: la $2, sym_1_5842
+.globl sym_1_5843
+sym_1_5843: la $2, sym_1_5843
+.globl sym_1_5844
+sym_1_5844: la $2, sym_1_5844
+.globl sym_1_5845
+sym_1_5845: la $2, sym_1_5845
+.globl sym_1_5846
+sym_1_5846: la $2, sym_1_5846
+.globl sym_1_5847
+sym_1_5847: la $2, sym_1_5847
+.globl sym_1_5848
+sym_1_5848: la $2, sym_1_5848
+.globl sym_1_5849
+sym_1_5849: la $2, sym_1_5849
+.globl sym_1_5850
+sym_1_5850: la $2, sym_1_5850
+.globl sym_1_5851
+sym_1_5851: la $2, sym_1_5851
+.globl sym_1_5852
+sym_1_5852: la $2, sym_1_5852
+.globl sym_1_5853
+sym_1_5853: la $2, sym_1_5853
+.globl sym_1_5854
+sym_1_5854: la $2, sym_1_5854
+.globl sym_1_5855
+sym_1_5855: la $2, sym_1_5855
+.globl sym_1_5856
+sym_1_5856: la $2, sym_1_5856
+.globl sym_1_5857
+sym_1_5857: la $2, sym_1_5857
+.globl sym_1_5858
+sym_1_5858: la $2, sym_1_5858
+.globl sym_1_5859
+sym_1_5859: la $2, sym_1_5859
+.globl sym_1_5860
+sym_1_5860: la $2, sym_1_5860
+.globl sym_1_5861
+sym_1_5861: la $2, sym_1_5861
+.globl sym_1_5862
+sym_1_5862: la $2, sym_1_5862
+.globl sym_1_5863
+sym_1_5863: la $2, sym_1_5863
+.globl sym_1_5864
+sym_1_5864: la $2, sym_1_5864
+.globl sym_1_5865
+sym_1_5865: la $2, sym_1_5865
+.globl sym_1_5866
+sym_1_5866: la $2, sym_1_5866
+.globl sym_1_5867
+sym_1_5867: la $2, sym_1_5867
+.globl sym_1_5868
+sym_1_5868: la $2, sym_1_5868
+.globl sym_1_5869
+sym_1_5869: la $2, sym_1_5869
+.globl sym_1_5870
+sym_1_5870: la $2, sym_1_5870
+.globl sym_1_5871
+sym_1_5871: la $2, sym_1_5871
+.globl sym_1_5872
+sym_1_5872: la $2, sym_1_5872
+.globl sym_1_5873
+sym_1_5873: la $2, sym_1_5873
+.globl sym_1_5874
+sym_1_5874: la $2, sym_1_5874
+.globl sym_1_5875
+sym_1_5875: la $2, sym_1_5875
+.globl sym_1_5876
+sym_1_5876: la $2, sym_1_5876
+.globl sym_1_5877
+sym_1_5877: la $2, sym_1_5877
+.globl sym_1_5878
+sym_1_5878: la $2, sym_1_5878
+.globl sym_1_5879
+sym_1_5879: la $2, sym_1_5879
+.globl sym_1_5880
+sym_1_5880: la $2, sym_1_5880
+.globl sym_1_5881
+sym_1_5881: la $2, sym_1_5881
+.globl sym_1_5882
+sym_1_5882: la $2, sym_1_5882
+.globl sym_1_5883
+sym_1_5883: la $2, sym_1_5883
+.globl sym_1_5884
+sym_1_5884: la $2, sym_1_5884
+.globl sym_1_5885
+sym_1_5885: la $2, sym_1_5885
+.globl sym_1_5886
+sym_1_5886: la $2, sym_1_5886
+.globl sym_1_5887
+sym_1_5887: la $2, sym_1_5887
+.globl sym_1_5888
+sym_1_5888: la $2, sym_1_5888
+.globl sym_1_5889
+sym_1_5889: la $2, sym_1_5889
+.globl sym_1_5890
+sym_1_5890: la $2, sym_1_5890
+.globl sym_1_5891
+sym_1_5891: la $2, sym_1_5891
+.globl sym_1_5892
+sym_1_5892: la $2, sym_1_5892
+.globl sym_1_5893
+sym_1_5893: la $2, sym_1_5893
+.globl sym_1_5894
+sym_1_5894: la $2, sym_1_5894
+.globl sym_1_5895
+sym_1_5895: la $2, sym_1_5895
+.globl sym_1_5896
+sym_1_5896: la $2, sym_1_5896
+.globl sym_1_5897
+sym_1_5897: la $2, sym_1_5897
+.globl sym_1_5898
+sym_1_5898: la $2, sym_1_5898
+.globl sym_1_5899
+sym_1_5899: la $2, sym_1_5899
+.globl sym_1_5900
+sym_1_5900: la $2, sym_1_5900
+.globl sym_1_5901
+sym_1_5901: la $2, sym_1_5901
+.globl sym_1_5902
+sym_1_5902: la $2, sym_1_5902
+.globl sym_1_5903
+sym_1_5903: la $2, sym_1_5903
+.globl sym_1_5904
+sym_1_5904: la $2, sym_1_5904
+.globl sym_1_5905
+sym_1_5905: la $2, sym_1_5905
+.globl sym_1_5906
+sym_1_5906: la $2, sym_1_5906
+.globl sym_1_5907
+sym_1_5907: la $2, sym_1_5907
+.globl sym_1_5908
+sym_1_5908: la $2, sym_1_5908
+.globl sym_1_5909
+sym_1_5909: la $2, sym_1_5909
+.globl sym_1_5910
+sym_1_5910: la $2, sym_1_5910
+.globl sym_1_5911
+sym_1_5911: la $2, sym_1_5911
+.globl sym_1_5912
+sym_1_5912: la $2, sym_1_5912
+.globl sym_1_5913
+sym_1_5913: la $2, sym_1_5913
+.globl sym_1_5914
+sym_1_5914: la $2, sym_1_5914
+.globl sym_1_5915
+sym_1_5915: la $2, sym_1_5915
+.globl sym_1_5916
+sym_1_5916: la $2, sym_1_5916
+.globl sym_1_5917
+sym_1_5917: la $2, sym_1_5917
+.globl sym_1_5918
+sym_1_5918: la $2, sym_1_5918
+.globl sym_1_5919
+sym_1_5919: la $2, sym_1_5919
+.globl sym_1_5920
+sym_1_5920: la $2, sym_1_5920
+.globl sym_1_5921
+sym_1_5921: la $2, sym_1_5921
+.globl sym_1_5922
+sym_1_5922: la $2, sym_1_5922
+.globl sym_1_5923
+sym_1_5923: la $2, sym_1_5923
+.globl sym_1_5924
+sym_1_5924: la $2, sym_1_5924
+.globl sym_1_5925
+sym_1_5925: la $2, sym_1_5925
+.globl sym_1_5926
+sym_1_5926: la $2, sym_1_5926
+.globl sym_1_5927
+sym_1_5927: la $2, sym_1_5927
+.globl sym_1_5928
+sym_1_5928: la $2, sym_1_5928
+.globl sym_1_5929
+sym_1_5929: la $2, sym_1_5929
+.globl sym_1_5930
+sym_1_5930: la $2, sym_1_5930
+.globl sym_1_5931
+sym_1_5931: la $2, sym_1_5931
+.globl sym_1_5932
+sym_1_5932: la $2, sym_1_5932
+.globl sym_1_5933
+sym_1_5933: la $2, sym_1_5933
+.globl sym_1_5934
+sym_1_5934: la $2, sym_1_5934
+.globl sym_1_5935
+sym_1_5935: la $2, sym_1_5935
+.globl sym_1_5936
+sym_1_5936: la $2, sym_1_5936
+.globl sym_1_5937
+sym_1_5937: la $2, sym_1_5937
+.globl sym_1_5938
+sym_1_5938: la $2, sym_1_5938
+.globl sym_1_5939
+sym_1_5939: la $2, sym_1_5939
+.globl sym_1_5940
+sym_1_5940: la $2, sym_1_5940
+.globl sym_1_5941
+sym_1_5941: la $2, sym_1_5941
+.globl sym_1_5942
+sym_1_5942: la $2, sym_1_5942
+.globl sym_1_5943
+sym_1_5943: la $2, sym_1_5943
+.globl sym_1_5944
+sym_1_5944: la $2, sym_1_5944
+.globl sym_1_5945
+sym_1_5945: la $2, sym_1_5945
+.globl sym_1_5946
+sym_1_5946: la $2, sym_1_5946
+.globl sym_1_5947
+sym_1_5947: la $2, sym_1_5947
+.globl sym_1_5948
+sym_1_5948: la $2, sym_1_5948
+.globl sym_1_5949
+sym_1_5949: la $2, sym_1_5949
+.globl sym_1_5950
+sym_1_5950: la $2, sym_1_5950
+.globl sym_1_5951
+sym_1_5951: la $2, sym_1_5951
+.globl sym_1_5952
+sym_1_5952: la $2, sym_1_5952
+.globl sym_1_5953
+sym_1_5953: la $2, sym_1_5953
+.globl sym_1_5954
+sym_1_5954: la $2, sym_1_5954
+.globl sym_1_5955
+sym_1_5955: la $2, sym_1_5955
+.globl sym_1_5956
+sym_1_5956: la $2, sym_1_5956
+.globl sym_1_5957
+sym_1_5957: la $2, sym_1_5957
+.globl sym_1_5958
+sym_1_5958: la $2, sym_1_5958
+.globl sym_1_5959
+sym_1_5959: la $2, sym_1_5959
+.globl sym_1_5960
+sym_1_5960: la $2, sym_1_5960
+.globl sym_1_5961
+sym_1_5961: la $2, sym_1_5961
+.globl sym_1_5962
+sym_1_5962: la $2, sym_1_5962
+.globl sym_1_5963
+sym_1_5963: la $2, sym_1_5963
+.globl sym_1_5964
+sym_1_5964: la $2, sym_1_5964
+.globl sym_1_5965
+sym_1_5965: la $2, sym_1_5965
+.globl sym_1_5966
+sym_1_5966: la $2, sym_1_5966
+.globl sym_1_5967
+sym_1_5967: la $2, sym_1_5967
+.globl sym_1_5968
+sym_1_5968: la $2, sym_1_5968
+.globl sym_1_5969
+sym_1_5969: la $2, sym_1_5969
+.globl sym_1_5970
+sym_1_5970: la $2, sym_1_5970
+.globl sym_1_5971
+sym_1_5971: la $2, sym_1_5971
+.globl sym_1_5972
+sym_1_5972: la $2, sym_1_5972
+.globl sym_1_5973
+sym_1_5973: la $2, sym_1_5973
+.globl sym_1_5974
+sym_1_5974: la $2, sym_1_5974
+.globl sym_1_5975
+sym_1_5975: la $2, sym_1_5975
+.globl sym_1_5976
+sym_1_5976: la $2, sym_1_5976
+.globl sym_1_5977
+sym_1_5977: la $2, sym_1_5977
+.globl sym_1_5978
+sym_1_5978: la $2, sym_1_5978
+.globl sym_1_5979
+sym_1_5979: la $2, sym_1_5979
+.globl sym_1_5980
+sym_1_5980: la $2, sym_1_5980
+.globl sym_1_5981
+sym_1_5981: la $2, sym_1_5981
+.globl sym_1_5982
+sym_1_5982: la $2, sym_1_5982
+.globl sym_1_5983
+sym_1_5983: la $2, sym_1_5983
+.globl sym_1_5984
+sym_1_5984: la $2, sym_1_5984
+.globl sym_1_5985
+sym_1_5985: la $2, sym_1_5985
+.globl sym_1_5986
+sym_1_5986: la $2, sym_1_5986
+.globl sym_1_5987
+sym_1_5987: la $2, sym_1_5987
+.globl sym_1_5988
+sym_1_5988: la $2, sym_1_5988
+.globl sym_1_5989
+sym_1_5989: la $2, sym_1_5989
+.globl sym_1_5990
+sym_1_5990: la $2, sym_1_5990
+.globl sym_1_5991
+sym_1_5991: la $2, sym_1_5991
+.globl sym_1_5992
+sym_1_5992: la $2, sym_1_5992
+.globl sym_1_5993
+sym_1_5993: la $2, sym_1_5993
+.globl sym_1_5994
+sym_1_5994: la $2, sym_1_5994
+.globl sym_1_5995
+sym_1_5995: la $2, sym_1_5995
+.globl sym_1_5996
+sym_1_5996: la $2, sym_1_5996
+.globl sym_1_5997
+sym_1_5997: la $2, sym_1_5997
+.globl sym_1_5998
+sym_1_5998: la $2, sym_1_5998
+.globl sym_1_5999
+sym_1_5999: la $2, sym_1_5999
+.globl sym_1_6000
+sym_1_6000: la $2, sym_1_6000
+.globl sym_1_6001
+sym_1_6001: la $2, sym_1_6001
+.globl sym_1_6002
+sym_1_6002: la $2, sym_1_6002
+.globl sym_1_6003
+sym_1_6003: la $2, sym_1_6003
+.globl sym_1_6004
+sym_1_6004: la $2, sym_1_6004
+.globl sym_1_6005
+sym_1_6005: la $2, sym_1_6005
+.globl sym_1_6006
+sym_1_6006: la $2, sym_1_6006
+.globl sym_1_6007
+sym_1_6007: la $2, sym_1_6007
+.globl sym_1_6008
+sym_1_6008: la $2, sym_1_6008
+.globl sym_1_6009
+sym_1_6009: la $2, sym_1_6009
+.globl sym_1_6010
+sym_1_6010: la $2, sym_1_6010
+.globl sym_1_6011
+sym_1_6011: la $2, sym_1_6011
+.globl sym_1_6012
+sym_1_6012: la $2, sym_1_6012
+.globl sym_1_6013
+sym_1_6013: la $2, sym_1_6013
+.globl sym_1_6014
+sym_1_6014: la $2, sym_1_6014
+.globl sym_1_6015
+sym_1_6015: la $2, sym_1_6015
+.globl sym_1_6016
+sym_1_6016: la $2, sym_1_6016
+.globl sym_1_6017
+sym_1_6017: la $2, sym_1_6017
+.globl sym_1_6018
+sym_1_6018: la $2, sym_1_6018
+.globl sym_1_6019
+sym_1_6019: la $2, sym_1_6019
+.globl sym_1_6020
+sym_1_6020: la $2, sym_1_6020
+.globl sym_1_6021
+sym_1_6021: la $2, sym_1_6021
+.globl sym_1_6022
+sym_1_6022: la $2, sym_1_6022
+.globl sym_1_6023
+sym_1_6023: la $2, sym_1_6023
+.globl sym_1_6024
+sym_1_6024: la $2, sym_1_6024
+.globl sym_1_6025
+sym_1_6025: la $2, sym_1_6025
+.globl sym_1_6026
+sym_1_6026: la $2, sym_1_6026
+.globl sym_1_6027
+sym_1_6027: la $2, sym_1_6027
+.globl sym_1_6028
+sym_1_6028: la $2, sym_1_6028
+.globl sym_1_6029
+sym_1_6029: la $2, sym_1_6029
+.globl sym_1_6030
+sym_1_6030: la $2, sym_1_6030
+.globl sym_1_6031
+sym_1_6031: la $2, sym_1_6031
+.globl sym_1_6032
+sym_1_6032: la $2, sym_1_6032
+.globl sym_1_6033
+sym_1_6033: la $2, sym_1_6033
+.globl sym_1_6034
+sym_1_6034: la $2, sym_1_6034
+.globl sym_1_6035
+sym_1_6035: la $2, sym_1_6035
+.globl sym_1_6036
+sym_1_6036: la $2, sym_1_6036
+.globl sym_1_6037
+sym_1_6037: la $2, sym_1_6037
+.globl sym_1_6038
+sym_1_6038: la $2, sym_1_6038
+.globl sym_1_6039
+sym_1_6039: la $2, sym_1_6039
+.globl sym_1_6040
+sym_1_6040: la $2, sym_1_6040
+.globl sym_1_6041
+sym_1_6041: la $2, sym_1_6041
+.globl sym_1_6042
+sym_1_6042: la $2, sym_1_6042
+.globl sym_1_6043
+sym_1_6043: la $2, sym_1_6043
+.globl sym_1_6044
+sym_1_6044: la $2, sym_1_6044
+.globl sym_1_6045
+sym_1_6045: la $2, sym_1_6045
+.globl sym_1_6046
+sym_1_6046: la $2, sym_1_6046
+.globl sym_1_6047
+sym_1_6047: la $2, sym_1_6047
+.globl sym_1_6048
+sym_1_6048: la $2, sym_1_6048
+.globl sym_1_6049
+sym_1_6049: la $2, sym_1_6049
+.globl sym_1_6050
+sym_1_6050: la $2, sym_1_6050
+.globl sym_1_6051
+sym_1_6051: la $2, sym_1_6051
+.globl sym_1_6052
+sym_1_6052: la $2, sym_1_6052
+.globl sym_1_6053
+sym_1_6053: la $2, sym_1_6053
+.globl sym_1_6054
+sym_1_6054: la $2, sym_1_6054
+.globl sym_1_6055
+sym_1_6055: la $2, sym_1_6055
+.globl sym_1_6056
+sym_1_6056: la $2, sym_1_6056
+.globl sym_1_6057
+sym_1_6057: la $2, sym_1_6057
+.globl sym_1_6058
+sym_1_6058: la $2, sym_1_6058
+.globl sym_1_6059
+sym_1_6059: la $2, sym_1_6059
+.globl sym_1_6060
+sym_1_6060: la $2, sym_1_6060
+.globl sym_1_6061
+sym_1_6061: la $2, sym_1_6061
+.globl sym_1_6062
+sym_1_6062: la $2, sym_1_6062
+.globl sym_1_6063
+sym_1_6063: la $2, sym_1_6063
+.globl sym_1_6064
+sym_1_6064: la $2, sym_1_6064
+.globl sym_1_6065
+sym_1_6065: la $2, sym_1_6065
+.globl sym_1_6066
+sym_1_6066: la $2, sym_1_6066
+.globl sym_1_6067
+sym_1_6067: la $2, sym_1_6067
+.globl sym_1_6068
+sym_1_6068: la $2, sym_1_6068
+.globl sym_1_6069
+sym_1_6069: la $2, sym_1_6069
+.globl sym_1_6070
+sym_1_6070: la $2, sym_1_6070
+.globl sym_1_6071
+sym_1_6071: la $2, sym_1_6071
+.globl sym_1_6072
+sym_1_6072: la $2, sym_1_6072
+.globl sym_1_6073
+sym_1_6073: la $2, sym_1_6073
+.globl sym_1_6074
+sym_1_6074: la $2, sym_1_6074
+.globl sym_1_6075
+sym_1_6075: la $2, sym_1_6075
+.globl sym_1_6076
+sym_1_6076: la $2, sym_1_6076
+.globl sym_1_6077
+sym_1_6077: la $2, sym_1_6077
+.globl sym_1_6078
+sym_1_6078: la $2, sym_1_6078
+.globl sym_1_6079
+sym_1_6079: la $2, sym_1_6079
+.globl sym_1_6080
+sym_1_6080: la $2, sym_1_6080
+.globl sym_1_6081
+sym_1_6081: la $2, sym_1_6081
+.globl sym_1_6082
+sym_1_6082: la $2, sym_1_6082
+.globl sym_1_6083
+sym_1_6083: la $2, sym_1_6083
+.globl sym_1_6084
+sym_1_6084: la $2, sym_1_6084
+.globl sym_1_6085
+sym_1_6085: la $2, sym_1_6085
+.globl sym_1_6086
+sym_1_6086: la $2, sym_1_6086
+.globl sym_1_6087
+sym_1_6087: la $2, sym_1_6087
+.globl sym_1_6088
+sym_1_6088: la $2, sym_1_6088
+.globl sym_1_6089
+sym_1_6089: la $2, sym_1_6089
+.globl sym_1_6090
+sym_1_6090: la $2, sym_1_6090
+.globl sym_1_6091
+sym_1_6091: la $2, sym_1_6091
+.globl sym_1_6092
+sym_1_6092: la $2, sym_1_6092
+.globl sym_1_6093
+sym_1_6093: la $2, sym_1_6093
+.globl sym_1_6094
+sym_1_6094: la $2, sym_1_6094
+.globl sym_1_6095
+sym_1_6095: la $2, sym_1_6095
+.globl sym_1_6096
+sym_1_6096: la $2, sym_1_6096
+.globl sym_1_6097
+sym_1_6097: la $2, sym_1_6097
+.globl sym_1_6098
+sym_1_6098: la $2, sym_1_6098
+.globl sym_1_6099
+sym_1_6099: la $2, sym_1_6099
+.globl sym_1_6100
+sym_1_6100: la $2, sym_1_6100
+.globl sym_1_6101
+sym_1_6101: la $2, sym_1_6101
+.globl sym_1_6102
+sym_1_6102: la $2, sym_1_6102
+.globl sym_1_6103
+sym_1_6103: la $2, sym_1_6103
+.globl sym_1_6104
+sym_1_6104: la $2, sym_1_6104
+.globl sym_1_6105
+sym_1_6105: la $2, sym_1_6105
+.globl sym_1_6106
+sym_1_6106: la $2, sym_1_6106
+.globl sym_1_6107
+sym_1_6107: la $2, sym_1_6107
+.globl sym_1_6108
+sym_1_6108: la $2, sym_1_6108
+.globl sym_1_6109
+sym_1_6109: la $2, sym_1_6109
+.globl sym_1_6110
+sym_1_6110: la $2, sym_1_6110
+.globl sym_1_6111
+sym_1_6111: la $2, sym_1_6111
+.globl sym_1_6112
+sym_1_6112: la $2, sym_1_6112
+.globl sym_1_6113
+sym_1_6113: la $2, sym_1_6113
+.globl sym_1_6114
+sym_1_6114: la $2, sym_1_6114
+.globl sym_1_6115
+sym_1_6115: la $2, sym_1_6115
+.globl sym_1_6116
+sym_1_6116: la $2, sym_1_6116
+.globl sym_1_6117
+sym_1_6117: la $2, sym_1_6117
+.globl sym_1_6118
+sym_1_6118: la $2, sym_1_6118
+.globl sym_1_6119
+sym_1_6119: la $2, sym_1_6119
+.globl sym_1_6120
+sym_1_6120: la $2, sym_1_6120
+.globl sym_1_6121
+sym_1_6121: la $2, sym_1_6121
+.globl sym_1_6122
+sym_1_6122: la $2, sym_1_6122
+.globl sym_1_6123
+sym_1_6123: la $2, sym_1_6123
+.globl sym_1_6124
+sym_1_6124: la $2, sym_1_6124
+.globl sym_1_6125
+sym_1_6125: la $2, sym_1_6125
+.globl sym_1_6126
+sym_1_6126: la $2, sym_1_6126
+.globl sym_1_6127
+sym_1_6127: la $2, sym_1_6127
+.globl sym_1_6128
+sym_1_6128: la $2, sym_1_6128
+.globl sym_1_6129
+sym_1_6129: la $2, sym_1_6129
+.globl sym_1_6130
+sym_1_6130: la $2, sym_1_6130
+.globl sym_1_6131
+sym_1_6131: la $2, sym_1_6131
+.globl sym_1_6132
+sym_1_6132: la $2, sym_1_6132
+.globl sym_1_6133
+sym_1_6133: la $2, sym_1_6133
+.globl sym_1_6134
+sym_1_6134: la $2, sym_1_6134
+.globl sym_1_6135
+sym_1_6135: la $2, sym_1_6135
+.globl sym_1_6136
+sym_1_6136: la $2, sym_1_6136
+.globl sym_1_6137
+sym_1_6137: la $2, sym_1_6137
+.globl sym_1_6138
+sym_1_6138: la $2, sym_1_6138
+.globl sym_1_6139
+sym_1_6139: la $2, sym_1_6139
+.globl sym_1_6140
+sym_1_6140: la $2, sym_1_6140
+.globl sym_1_6141
+sym_1_6141: la $2, sym_1_6141
+.globl sym_1_6142
+sym_1_6142: la $2, sym_1_6142
+.globl sym_1_6143
+sym_1_6143: la $2, sym_1_6143
+.globl sym_1_6144
+sym_1_6144: la $2, sym_1_6144
+.globl sym_1_6145
+sym_1_6145: la $2, sym_1_6145
+.globl sym_1_6146
+sym_1_6146: la $2, sym_1_6146
+.globl sym_1_6147
+sym_1_6147: la $2, sym_1_6147
+.globl sym_1_6148
+sym_1_6148: la $2, sym_1_6148
+.globl sym_1_6149
+sym_1_6149: la $2, sym_1_6149
+.globl sym_1_6150
+sym_1_6150: la $2, sym_1_6150
+.globl sym_1_6151
+sym_1_6151: la $2, sym_1_6151
+.globl sym_1_6152
+sym_1_6152: la $2, sym_1_6152
+.globl sym_1_6153
+sym_1_6153: la $2, sym_1_6153
+.globl sym_1_6154
+sym_1_6154: la $2, sym_1_6154
+.globl sym_1_6155
+sym_1_6155: la $2, sym_1_6155
+.globl sym_1_6156
+sym_1_6156: la $2, sym_1_6156
+.globl sym_1_6157
+sym_1_6157: la $2, sym_1_6157
+.globl sym_1_6158
+sym_1_6158: la $2, sym_1_6158
+.globl sym_1_6159
+sym_1_6159: la $2, sym_1_6159
+.globl sym_1_6160
+sym_1_6160: la $2, sym_1_6160
+.globl sym_1_6161
+sym_1_6161: la $2, sym_1_6161
+.globl sym_1_6162
+sym_1_6162: la $2, sym_1_6162
+.globl sym_1_6163
+sym_1_6163: la $2, sym_1_6163
+.globl sym_1_6164
+sym_1_6164: la $2, sym_1_6164
+.globl sym_1_6165
+sym_1_6165: la $2, sym_1_6165
+.globl sym_1_6166
+sym_1_6166: la $2, sym_1_6166
+.globl sym_1_6167
+sym_1_6167: la $2, sym_1_6167
+.globl sym_1_6168
+sym_1_6168: la $2, sym_1_6168
+.globl sym_1_6169
+sym_1_6169: la $2, sym_1_6169
+.globl sym_1_6170
+sym_1_6170: la $2, sym_1_6170
+.globl sym_1_6171
+sym_1_6171: la $2, sym_1_6171
+.globl sym_1_6172
+sym_1_6172: la $2, sym_1_6172
+.globl sym_1_6173
+sym_1_6173: la $2, sym_1_6173
+.globl sym_1_6174
+sym_1_6174: la $2, sym_1_6174
+.globl sym_1_6175
+sym_1_6175: la $2, sym_1_6175
+.globl sym_1_6176
+sym_1_6176: la $2, sym_1_6176
+.globl sym_1_6177
+sym_1_6177: la $2, sym_1_6177
+.globl sym_1_6178
+sym_1_6178: la $2, sym_1_6178
+.globl sym_1_6179
+sym_1_6179: la $2, sym_1_6179
+.globl sym_1_6180
+sym_1_6180: la $2, sym_1_6180
+.globl sym_1_6181
+sym_1_6181: la $2, sym_1_6181
+.globl sym_1_6182
+sym_1_6182: la $2, sym_1_6182
+.globl sym_1_6183
+sym_1_6183: la $2, sym_1_6183
+.globl sym_1_6184
+sym_1_6184: la $2, sym_1_6184
+.globl sym_1_6185
+sym_1_6185: la $2, sym_1_6185
+.globl sym_1_6186
+sym_1_6186: la $2, sym_1_6186
+.globl sym_1_6187
+sym_1_6187: la $2, sym_1_6187
+.globl sym_1_6188
+sym_1_6188: la $2, sym_1_6188
+.globl sym_1_6189
+sym_1_6189: la $2, sym_1_6189
+.globl sym_1_6190
+sym_1_6190: la $2, sym_1_6190
+.globl sym_1_6191
+sym_1_6191: la $2, sym_1_6191
+.globl sym_1_6192
+sym_1_6192: la $2, sym_1_6192
+.globl sym_1_6193
+sym_1_6193: la $2, sym_1_6193
+.globl sym_1_6194
+sym_1_6194: la $2, sym_1_6194
+.globl sym_1_6195
+sym_1_6195: la $2, sym_1_6195
+.globl sym_1_6196
+sym_1_6196: la $2, sym_1_6196
+.globl sym_1_6197
+sym_1_6197: la $2, sym_1_6197
+.globl sym_1_6198
+sym_1_6198: la $2, sym_1_6198
+.globl sym_1_6199
+sym_1_6199: la $2, sym_1_6199
+.globl sym_1_6200
+sym_1_6200: la $2, sym_1_6200
+.globl sym_1_6201
+sym_1_6201: la $2, sym_1_6201
+.globl sym_1_6202
+sym_1_6202: la $2, sym_1_6202
+.globl sym_1_6203
+sym_1_6203: la $2, sym_1_6203
+.globl sym_1_6204
+sym_1_6204: la $2, sym_1_6204
+.globl sym_1_6205
+sym_1_6205: la $2, sym_1_6205
+.globl sym_1_6206
+sym_1_6206: la $2, sym_1_6206
+.globl sym_1_6207
+sym_1_6207: la $2, sym_1_6207
+.globl sym_1_6208
+sym_1_6208: la $2, sym_1_6208
+.globl sym_1_6209
+sym_1_6209: la $2, sym_1_6209
+.globl sym_1_6210
+sym_1_6210: la $2, sym_1_6210
+.globl sym_1_6211
+sym_1_6211: la $2, sym_1_6211
+.globl sym_1_6212
+sym_1_6212: la $2, sym_1_6212
+.globl sym_1_6213
+sym_1_6213: la $2, sym_1_6213
+.globl sym_1_6214
+sym_1_6214: la $2, sym_1_6214
+.globl sym_1_6215
+sym_1_6215: la $2, sym_1_6215
+.globl sym_1_6216
+sym_1_6216: la $2, sym_1_6216
+.globl sym_1_6217
+sym_1_6217: la $2, sym_1_6217
+.globl sym_1_6218
+sym_1_6218: la $2, sym_1_6218
+.globl sym_1_6219
+sym_1_6219: la $2, sym_1_6219
+.globl sym_1_6220
+sym_1_6220: la $2, sym_1_6220
+.globl sym_1_6221
+sym_1_6221: la $2, sym_1_6221
+.globl sym_1_6222
+sym_1_6222: la $2, sym_1_6222
+.globl sym_1_6223
+sym_1_6223: la $2, sym_1_6223
+.globl sym_1_6224
+sym_1_6224: la $2, sym_1_6224
+.globl sym_1_6225
+sym_1_6225: la $2, sym_1_6225
+.globl sym_1_6226
+sym_1_6226: la $2, sym_1_6226
+.globl sym_1_6227
+sym_1_6227: la $2, sym_1_6227
+.globl sym_1_6228
+sym_1_6228: la $2, sym_1_6228
+.globl sym_1_6229
+sym_1_6229: la $2, sym_1_6229
+.globl sym_1_6230
+sym_1_6230: la $2, sym_1_6230
+.globl sym_1_6231
+sym_1_6231: la $2, sym_1_6231
+.globl sym_1_6232
+sym_1_6232: la $2, sym_1_6232
+.globl sym_1_6233
+sym_1_6233: la $2, sym_1_6233
+.globl sym_1_6234
+sym_1_6234: la $2, sym_1_6234
+.globl sym_1_6235
+sym_1_6235: la $2, sym_1_6235
+.globl sym_1_6236
+sym_1_6236: la $2, sym_1_6236
+.globl sym_1_6237
+sym_1_6237: la $2, sym_1_6237
+.globl sym_1_6238
+sym_1_6238: la $2, sym_1_6238
+.globl sym_1_6239
+sym_1_6239: la $2, sym_1_6239
+.globl sym_1_6240
+sym_1_6240: la $2, sym_1_6240
+.globl sym_1_6241
+sym_1_6241: la $2, sym_1_6241
+.globl sym_1_6242
+sym_1_6242: la $2, sym_1_6242
+.globl sym_1_6243
+sym_1_6243: la $2, sym_1_6243
+.globl sym_1_6244
+sym_1_6244: la $2, sym_1_6244
+.globl sym_1_6245
+sym_1_6245: la $2, sym_1_6245
+.globl sym_1_6246
+sym_1_6246: la $2, sym_1_6246
+.globl sym_1_6247
+sym_1_6247: la $2, sym_1_6247
+.globl sym_1_6248
+sym_1_6248: la $2, sym_1_6248
+.globl sym_1_6249
+sym_1_6249: la $2, sym_1_6249
+.globl sym_1_6250
+sym_1_6250: la $2, sym_1_6250
+.globl sym_1_6251
+sym_1_6251: la $2, sym_1_6251
+.globl sym_1_6252
+sym_1_6252: la $2, sym_1_6252
+.globl sym_1_6253
+sym_1_6253: la $2, sym_1_6253
+.globl sym_1_6254
+sym_1_6254: la $2, sym_1_6254
+.globl sym_1_6255
+sym_1_6255: la $2, sym_1_6255
+.globl sym_1_6256
+sym_1_6256: la $2, sym_1_6256
+.globl sym_1_6257
+sym_1_6257: la $2, sym_1_6257
+.globl sym_1_6258
+sym_1_6258: la $2, sym_1_6258
+.globl sym_1_6259
+sym_1_6259: la $2, sym_1_6259
+.globl sym_1_6260
+sym_1_6260: la $2, sym_1_6260
+.globl sym_1_6261
+sym_1_6261: la $2, sym_1_6261
+.globl sym_1_6262
+sym_1_6262: la $2, sym_1_6262
+.globl sym_1_6263
+sym_1_6263: la $2, sym_1_6263
+.globl sym_1_6264
+sym_1_6264: la $2, sym_1_6264
+.globl sym_1_6265
+sym_1_6265: la $2, sym_1_6265
+.globl sym_1_6266
+sym_1_6266: la $2, sym_1_6266
+.globl sym_1_6267
+sym_1_6267: la $2, sym_1_6267
+.globl sym_1_6268
+sym_1_6268: la $2, sym_1_6268
+.globl sym_1_6269
+sym_1_6269: la $2, sym_1_6269
+.globl sym_1_6270
+sym_1_6270: la $2, sym_1_6270
+.globl sym_1_6271
+sym_1_6271: la $2, sym_1_6271
+.globl sym_1_6272
+sym_1_6272: la $2, sym_1_6272
+.globl sym_1_6273
+sym_1_6273: la $2, sym_1_6273
+.globl sym_1_6274
+sym_1_6274: la $2, sym_1_6274
+.globl sym_1_6275
+sym_1_6275: la $2, sym_1_6275
+.globl sym_1_6276
+sym_1_6276: la $2, sym_1_6276
+.globl sym_1_6277
+sym_1_6277: la $2, sym_1_6277
+.globl sym_1_6278
+sym_1_6278: la $2, sym_1_6278
+.globl sym_1_6279
+sym_1_6279: la $2, sym_1_6279
+.globl sym_1_6280
+sym_1_6280: la $2, sym_1_6280
+.globl sym_1_6281
+sym_1_6281: la $2, sym_1_6281
+.globl sym_1_6282
+sym_1_6282: la $2, sym_1_6282
+.globl sym_1_6283
+sym_1_6283: la $2, sym_1_6283
+.globl sym_1_6284
+sym_1_6284: la $2, sym_1_6284
+.globl sym_1_6285
+sym_1_6285: la $2, sym_1_6285
+.globl sym_1_6286
+sym_1_6286: la $2, sym_1_6286
+.globl sym_1_6287
+sym_1_6287: la $2, sym_1_6287
+.globl sym_1_6288
+sym_1_6288: la $2, sym_1_6288
+.globl sym_1_6289
+sym_1_6289: la $2, sym_1_6289
+.globl sym_1_6290
+sym_1_6290: la $2, sym_1_6290
+.globl sym_1_6291
+sym_1_6291: la $2, sym_1_6291
+.globl sym_1_6292
+sym_1_6292: la $2, sym_1_6292
+.globl sym_1_6293
+sym_1_6293: la $2, sym_1_6293
+.globl sym_1_6294
+sym_1_6294: la $2, sym_1_6294
+.globl sym_1_6295
+sym_1_6295: la $2, sym_1_6295
+.globl sym_1_6296
+sym_1_6296: la $2, sym_1_6296
+.globl sym_1_6297
+sym_1_6297: la $2, sym_1_6297
+.globl sym_1_6298
+sym_1_6298: la $2, sym_1_6298
+.globl sym_1_6299
+sym_1_6299: la $2, sym_1_6299
+.globl sym_1_6300
+sym_1_6300: la $2, sym_1_6300
+.globl sym_1_6301
+sym_1_6301: la $2, sym_1_6301
+.globl sym_1_6302
+sym_1_6302: la $2, sym_1_6302
+.globl sym_1_6303
+sym_1_6303: la $2, sym_1_6303
+.globl sym_1_6304
+sym_1_6304: la $2, sym_1_6304
+.globl sym_1_6305
+sym_1_6305: la $2, sym_1_6305
+.globl sym_1_6306
+sym_1_6306: la $2, sym_1_6306
+.globl sym_1_6307
+sym_1_6307: la $2, sym_1_6307
+.globl sym_1_6308
+sym_1_6308: la $2, sym_1_6308
+.globl sym_1_6309
+sym_1_6309: la $2, sym_1_6309
+.globl sym_1_6310
+sym_1_6310: la $2, sym_1_6310
+.globl sym_1_6311
+sym_1_6311: la $2, sym_1_6311
+.globl sym_1_6312
+sym_1_6312: la $2, sym_1_6312
+.globl sym_1_6313
+sym_1_6313: la $2, sym_1_6313
+.globl sym_1_6314
+sym_1_6314: la $2, sym_1_6314
+.globl sym_1_6315
+sym_1_6315: la $2, sym_1_6315
+.globl sym_1_6316
+sym_1_6316: la $2, sym_1_6316
+.globl sym_1_6317
+sym_1_6317: la $2, sym_1_6317
+.globl sym_1_6318
+sym_1_6318: la $2, sym_1_6318
+.globl sym_1_6319
+sym_1_6319: la $2, sym_1_6319
+.globl sym_1_6320
+sym_1_6320: la $2, sym_1_6320
+.globl sym_1_6321
+sym_1_6321: la $2, sym_1_6321
+.globl sym_1_6322
+sym_1_6322: la $2, sym_1_6322
+.globl sym_1_6323
+sym_1_6323: la $2, sym_1_6323
+.globl sym_1_6324
+sym_1_6324: la $2, sym_1_6324
+.globl sym_1_6325
+sym_1_6325: la $2, sym_1_6325
+.globl sym_1_6326
+sym_1_6326: la $2, sym_1_6326
+.globl sym_1_6327
+sym_1_6327: la $2, sym_1_6327
+.globl sym_1_6328
+sym_1_6328: la $2, sym_1_6328
+.globl sym_1_6329
+sym_1_6329: la $2, sym_1_6329
+.globl sym_1_6330
+sym_1_6330: la $2, sym_1_6330
+.globl sym_1_6331
+sym_1_6331: la $2, sym_1_6331
+.globl sym_1_6332
+sym_1_6332: la $2, sym_1_6332
+.globl sym_1_6333
+sym_1_6333: la $2, sym_1_6333
+.globl sym_1_6334
+sym_1_6334: la $2, sym_1_6334
+.globl sym_1_6335
+sym_1_6335: la $2, sym_1_6335
+.globl sym_1_6336
+sym_1_6336: la $2, sym_1_6336
+.globl sym_1_6337
+sym_1_6337: la $2, sym_1_6337
+.globl sym_1_6338
+sym_1_6338: la $2, sym_1_6338
+.globl sym_1_6339
+sym_1_6339: la $2, sym_1_6339
+.globl sym_1_6340
+sym_1_6340: la $2, sym_1_6340
+.globl sym_1_6341
+sym_1_6341: la $2, sym_1_6341
+.globl sym_1_6342
+sym_1_6342: la $2, sym_1_6342
+.globl sym_1_6343
+sym_1_6343: la $2, sym_1_6343
+.globl sym_1_6344
+sym_1_6344: la $2, sym_1_6344
+.globl sym_1_6345
+sym_1_6345: la $2, sym_1_6345
+.globl sym_1_6346
+sym_1_6346: la $2, sym_1_6346
+.globl sym_1_6347
+sym_1_6347: la $2, sym_1_6347
+.globl sym_1_6348
+sym_1_6348: la $2, sym_1_6348
+.globl sym_1_6349
+sym_1_6349: la $2, sym_1_6349
+.globl sym_1_6350
+sym_1_6350: la $2, sym_1_6350
+.globl sym_1_6351
+sym_1_6351: la $2, sym_1_6351
+.globl sym_1_6352
+sym_1_6352: la $2, sym_1_6352
+.globl sym_1_6353
+sym_1_6353: la $2, sym_1_6353
+.globl sym_1_6354
+sym_1_6354: la $2, sym_1_6354
+.globl sym_1_6355
+sym_1_6355: la $2, sym_1_6355
+.globl sym_1_6356
+sym_1_6356: la $2, sym_1_6356
+.globl sym_1_6357
+sym_1_6357: la $2, sym_1_6357
+.globl sym_1_6358
+sym_1_6358: la $2, sym_1_6358
+.globl sym_1_6359
+sym_1_6359: la $2, sym_1_6359
+.globl sym_1_6360
+sym_1_6360: la $2, sym_1_6360
+.globl sym_1_6361
+sym_1_6361: la $2, sym_1_6361
+.globl sym_1_6362
+sym_1_6362: la $2, sym_1_6362
+.globl sym_1_6363
+sym_1_6363: la $2, sym_1_6363
+.globl sym_1_6364
+sym_1_6364: la $2, sym_1_6364
+.globl sym_1_6365
+sym_1_6365: la $2, sym_1_6365
+.globl sym_1_6366
+sym_1_6366: la $2, sym_1_6366
+.globl sym_1_6367
+sym_1_6367: la $2, sym_1_6367
+.globl sym_1_6368
+sym_1_6368: la $2, sym_1_6368
+.globl sym_1_6369
+sym_1_6369: la $2, sym_1_6369
+.globl sym_1_6370
+sym_1_6370: la $2, sym_1_6370
+.globl sym_1_6371
+sym_1_6371: la $2, sym_1_6371
+.globl sym_1_6372
+sym_1_6372: la $2, sym_1_6372
+.globl sym_1_6373
+sym_1_6373: la $2, sym_1_6373
+.globl sym_1_6374
+sym_1_6374: la $2, sym_1_6374
+.globl sym_1_6375
+sym_1_6375: la $2, sym_1_6375
+.globl sym_1_6376
+sym_1_6376: la $2, sym_1_6376
+.globl sym_1_6377
+sym_1_6377: la $2, sym_1_6377
+.globl sym_1_6378
+sym_1_6378: la $2, sym_1_6378
+.globl sym_1_6379
+sym_1_6379: la $2, sym_1_6379
+.globl sym_1_6380
+sym_1_6380: la $2, sym_1_6380
+.globl sym_1_6381
+sym_1_6381: la $2, sym_1_6381
+.globl sym_1_6382
+sym_1_6382: la $2, sym_1_6382
+.globl sym_1_6383
+sym_1_6383: la $2, sym_1_6383
+.globl sym_1_6384
+sym_1_6384: la $2, sym_1_6384
+.globl sym_1_6385
+sym_1_6385: la $2, sym_1_6385
+.globl sym_1_6386
+sym_1_6386: la $2, sym_1_6386
+.globl sym_1_6387
+sym_1_6387: la $2, sym_1_6387
+.globl sym_1_6388
+sym_1_6388: la $2, sym_1_6388
+.globl sym_1_6389
+sym_1_6389: la $2, sym_1_6389
+.globl sym_1_6390
+sym_1_6390: la $2, sym_1_6390
+.globl sym_1_6391
+sym_1_6391: la $2, sym_1_6391
+.globl sym_1_6392
+sym_1_6392: la $2, sym_1_6392
+.globl sym_1_6393
+sym_1_6393: la $2, sym_1_6393
+.globl sym_1_6394
+sym_1_6394: la $2, sym_1_6394
+.globl sym_1_6395
+sym_1_6395: la $2, sym_1_6395
+.globl sym_1_6396
+sym_1_6396: la $2, sym_1_6396
+.globl sym_1_6397
+sym_1_6397: la $2, sym_1_6397
+.globl sym_1_6398
+sym_1_6398: la $2, sym_1_6398
+.globl sym_1_6399
+sym_1_6399: la $2, sym_1_6399
+.globl sym_1_6400
+sym_1_6400: la $2, sym_1_6400
+.globl sym_1_6401
+sym_1_6401: la $2, sym_1_6401
+.globl sym_1_6402
+sym_1_6402: la $2, sym_1_6402
+.globl sym_1_6403
+sym_1_6403: la $2, sym_1_6403
+.globl sym_1_6404
+sym_1_6404: la $2, sym_1_6404
+.globl sym_1_6405
+sym_1_6405: la $2, sym_1_6405
+.globl sym_1_6406
+sym_1_6406: la $2, sym_1_6406
+.globl sym_1_6407
+sym_1_6407: la $2, sym_1_6407
+.globl sym_1_6408
+sym_1_6408: la $2, sym_1_6408
+.globl sym_1_6409
+sym_1_6409: la $2, sym_1_6409
+.globl sym_1_6410
+sym_1_6410: la $2, sym_1_6410
+.globl sym_1_6411
+sym_1_6411: la $2, sym_1_6411
+.globl sym_1_6412
+sym_1_6412: la $2, sym_1_6412
+.globl sym_1_6413
+sym_1_6413: la $2, sym_1_6413
+.globl sym_1_6414
+sym_1_6414: la $2, sym_1_6414
+.globl sym_1_6415
+sym_1_6415: la $2, sym_1_6415
+.globl sym_1_6416
+sym_1_6416: la $2, sym_1_6416
+.globl sym_1_6417
+sym_1_6417: la $2, sym_1_6417
+.globl sym_1_6418
+sym_1_6418: la $2, sym_1_6418
+.globl sym_1_6419
+sym_1_6419: la $2, sym_1_6419
+.globl sym_1_6420
+sym_1_6420: la $2, sym_1_6420
+.globl sym_1_6421
+sym_1_6421: la $2, sym_1_6421
+.globl sym_1_6422
+sym_1_6422: la $2, sym_1_6422
+.globl sym_1_6423
+sym_1_6423: la $2, sym_1_6423
+.globl sym_1_6424
+sym_1_6424: la $2, sym_1_6424
+.globl sym_1_6425
+sym_1_6425: la $2, sym_1_6425
+.globl sym_1_6426
+sym_1_6426: la $2, sym_1_6426
+.globl sym_1_6427
+sym_1_6427: la $2, sym_1_6427
+.globl sym_1_6428
+sym_1_6428: la $2, sym_1_6428
+.globl sym_1_6429
+sym_1_6429: la $2, sym_1_6429
+.globl sym_1_6430
+sym_1_6430: la $2, sym_1_6430
+.globl sym_1_6431
+sym_1_6431: la $2, sym_1_6431
+.globl sym_1_6432
+sym_1_6432: la $2, sym_1_6432
+.globl sym_1_6433
+sym_1_6433: la $2, sym_1_6433
+.globl sym_1_6434
+sym_1_6434: la $2, sym_1_6434
+.globl sym_1_6435
+sym_1_6435: la $2, sym_1_6435
+.globl sym_1_6436
+sym_1_6436: la $2, sym_1_6436
+.globl sym_1_6437
+sym_1_6437: la $2, sym_1_6437
+.globl sym_1_6438
+sym_1_6438: la $2, sym_1_6438
+.globl sym_1_6439
+sym_1_6439: la $2, sym_1_6439
+.globl sym_1_6440
+sym_1_6440: la $2, sym_1_6440
+.globl sym_1_6441
+sym_1_6441: la $2, sym_1_6441
+.globl sym_1_6442
+sym_1_6442: la $2, sym_1_6442
+.globl sym_1_6443
+sym_1_6443: la $2, sym_1_6443
+.globl sym_1_6444
+sym_1_6444: la $2, sym_1_6444
+.globl sym_1_6445
+sym_1_6445: la $2, sym_1_6445
+.globl sym_1_6446
+sym_1_6446: la $2, sym_1_6446
+.globl sym_1_6447
+sym_1_6447: la $2, sym_1_6447
+.globl sym_1_6448
+sym_1_6448: la $2, sym_1_6448
+.globl sym_1_6449
+sym_1_6449: la $2, sym_1_6449
+.globl sym_1_6450
+sym_1_6450: la $2, sym_1_6450
+.globl sym_1_6451
+sym_1_6451: la $2, sym_1_6451
+.globl sym_1_6452
+sym_1_6452: la $2, sym_1_6452
+.globl sym_1_6453
+sym_1_6453: la $2, sym_1_6453
+.globl sym_1_6454
+sym_1_6454: la $2, sym_1_6454
+.globl sym_1_6455
+sym_1_6455: la $2, sym_1_6455
+.globl sym_1_6456
+sym_1_6456: la $2, sym_1_6456
+.globl sym_1_6457
+sym_1_6457: la $2, sym_1_6457
+.globl sym_1_6458
+sym_1_6458: la $2, sym_1_6458
+.globl sym_1_6459
+sym_1_6459: la $2, sym_1_6459
+.globl sym_1_6460
+sym_1_6460: la $2, sym_1_6460
+.globl sym_1_6461
+sym_1_6461: la $2, sym_1_6461
+.globl sym_1_6462
+sym_1_6462: la $2, sym_1_6462
+.globl sym_1_6463
+sym_1_6463: la $2, sym_1_6463
+.globl sym_1_6464
+sym_1_6464: la $2, sym_1_6464
+.globl sym_1_6465
+sym_1_6465: la $2, sym_1_6465
+.globl sym_1_6466
+sym_1_6466: la $2, sym_1_6466
+.globl sym_1_6467
+sym_1_6467: la $2, sym_1_6467
+.globl sym_1_6468
+sym_1_6468: la $2, sym_1_6468
+.globl sym_1_6469
+sym_1_6469: la $2, sym_1_6469
+.globl sym_1_6470
+sym_1_6470: la $2, sym_1_6470
+.globl sym_1_6471
+sym_1_6471: la $2, sym_1_6471
+.globl sym_1_6472
+sym_1_6472: la $2, sym_1_6472
+.globl sym_1_6473
+sym_1_6473: la $2, sym_1_6473
+.globl sym_1_6474
+sym_1_6474: la $2, sym_1_6474
+.globl sym_1_6475
+sym_1_6475: la $2, sym_1_6475
+.globl sym_1_6476
+sym_1_6476: la $2, sym_1_6476
+.globl sym_1_6477
+sym_1_6477: la $2, sym_1_6477
+.globl sym_1_6478
+sym_1_6478: la $2, sym_1_6478
+.globl sym_1_6479
+sym_1_6479: la $2, sym_1_6479
+.globl sym_1_6480
+sym_1_6480: la $2, sym_1_6480
+.globl sym_1_6481
+sym_1_6481: la $2, sym_1_6481
+.globl sym_1_6482
+sym_1_6482: la $2, sym_1_6482
+.globl sym_1_6483
+sym_1_6483: la $2, sym_1_6483
+.globl sym_1_6484
+sym_1_6484: la $2, sym_1_6484
+.globl sym_1_6485
+sym_1_6485: la $2, sym_1_6485
+.globl sym_1_6486
+sym_1_6486: la $2, sym_1_6486
+.globl sym_1_6487
+sym_1_6487: la $2, sym_1_6487
+.globl sym_1_6488
+sym_1_6488: la $2, sym_1_6488
+.globl sym_1_6489
+sym_1_6489: la $2, sym_1_6489
+.globl sym_1_6490
+sym_1_6490: la $2, sym_1_6490
+.globl sym_1_6491
+sym_1_6491: la $2, sym_1_6491
+.globl sym_1_6492
+sym_1_6492: la $2, sym_1_6492
+.globl sym_1_6493
+sym_1_6493: la $2, sym_1_6493
+.globl sym_1_6494
+sym_1_6494: la $2, sym_1_6494
+.globl sym_1_6495
+sym_1_6495: la $2, sym_1_6495
+.globl sym_1_6496
+sym_1_6496: la $2, sym_1_6496
+.globl sym_1_6497
+sym_1_6497: la $2, sym_1_6497
+.globl sym_1_6498
+sym_1_6498: la $2, sym_1_6498
+.globl sym_1_6499
+sym_1_6499: la $2, sym_1_6499
+.globl sym_1_6500
+sym_1_6500: la $2, sym_1_6500
+.globl sym_1_6501
+sym_1_6501: la $2, sym_1_6501
+.globl sym_1_6502
+sym_1_6502: la $2, sym_1_6502
+.globl sym_1_6503
+sym_1_6503: la $2, sym_1_6503
+.globl sym_1_6504
+sym_1_6504: la $2, sym_1_6504
+.globl sym_1_6505
+sym_1_6505: la $2, sym_1_6505
+.globl sym_1_6506
+sym_1_6506: la $2, sym_1_6506
+.globl sym_1_6507
+sym_1_6507: la $2, sym_1_6507
+.globl sym_1_6508
+sym_1_6508: la $2, sym_1_6508
+.globl sym_1_6509
+sym_1_6509: la $2, sym_1_6509
+.globl sym_1_6510
+sym_1_6510: la $2, sym_1_6510
+.globl sym_1_6511
+sym_1_6511: la $2, sym_1_6511
+.globl sym_1_6512
+sym_1_6512: la $2, sym_1_6512
+.globl sym_1_6513
+sym_1_6513: la $2, sym_1_6513
+.globl sym_1_6514
+sym_1_6514: la $2, sym_1_6514
+.globl sym_1_6515
+sym_1_6515: la $2, sym_1_6515
+.globl sym_1_6516
+sym_1_6516: la $2, sym_1_6516
+.globl sym_1_6517
+sym_1_6517: la $2, sym_1_6517
+.globl sym_1_6518
+sym_1_6518: la $2, sym_1_6518
+.globl sym_1_6519
+sym_1_6519: la $2, sym_1_6519
+.globl sym_1_6520
+sym_1_6520: la $2, sym_1_6520
+.globl sym_1_6521
+sym_1_6521: la $2, sym_1_6521
+.globl sym_1_6522
+sym_1_6522: la $2, sym_1_6522
+.globl sym_1_6523
+sym_1_6523: la $2, sym_1_6523
+.globl sym_1_6524
+sym_1_6524: la $2, sym_1_6524
+.globl sym_1_6525
+sym_1_6525: la $2, sym_1_6525
+.globl sym_1_6526
+sym_1_6526: la $2, sym_1_6526
+.globl sym_1_6527
+sym_1_6527: la $2, sym_1_6527
+.globl sym_1_6528
+sym_1_6528: la $2, sym_1_6528
+.globl sym_1_6529
+sym_1_6529: la $2, sym_1_6529
+.globl sym_1_6530
+sym_1_6530: la $2, sym_1_6530
+.globl sym_1_6531
+sym_1_6531: la $2, sym_1_6531
+.globl sym_1_6532
+sym_1_6532: la $2, sym_1_6532
+.globl sym_1_6533
+sym_1_6533: la $2, sym_1_6533
+.globl sym_1_6534
+sym_1_6534: la $2, sym_1_6534
+.globl sym_1_6535
+sym_1_6535: la $2, sym_1_6535
+.globl sym_1_6536
+sym_1_6536: la $2, sym_1_6536
+.globl sym_1_6537
+sym_1_6537: la $2, sym_1_6537
+.globl sym_1_6538
+sym_1_6538: la $2, sym_1_6538
+.globl sym_1_6539
+sym_1_6539: la $2, sym_1_6539
+.globl sym_1_6540
+sym_1_6540: la $2, sym_1_6540
+.globl sym_1_6541
+sym_1_6541: la $2, sym_1_6541
+.globl sym_1_6542
+sym_1_6542: la $2, sym_1_6542
+.globl sym_1_6543
+sym_1_6543: la $2, sym_1_6543
+.globl sym_1_6544
+sym_1_6544: la $2, sym_1_6544
+.globl sym_1_6545
+sym_1_6545: la $2, sym_1_6545
+.globl sym_1_6546
+sym_1_6546: la $2, sym_1_6546
+.globl sym_1_6547
+sym_1_6547: la $2, sym_1_6547
+.globl sym_1_6548
+sym_1_6548: la $2, sym_1_6548
+.globl sym_1_6549
+sym_1_6549: la $2, sym_1_6549
+.globl sym_1_6550
+sym_1_6550: la $2, sym_1_6550
+.globl sym_1_6551
+sym_1_6551: la $2, sym_1_6551
+.globl sym_1_6552
+sym_1_6552: la $2, sym_1_6552
+.globl sym_1_6553
+sym_1_6553: la $2, sym_1_6553
+.globl sym_1_6554
+sym_1_6554: la $2, sym_1_6554
+.globl sym_1_6555
+sym_1_6555: la $2, sym_1_6555
+.globl sym_1_6556
+sym_1_6556: la $2, sym_1_6556
+.globl sym_1_6557
+sym_1_6557: la $2, sym_1_6557
+.globl sym_1_6558
+sym_1_6558: la $2, sym_1_6558
+.globl sym_1_6559
+sym_1_6559: la $2, sym_1_6559
+.globl sym_1_6560
+sym_1_6560: la $2, sym_1_6560
+.globl sym_1_6561
+sym_1_6561: la $2, sym_1_6561
+.globl sym_1_6562
+sym_1_6562: la $2, sym_1_6562
+.globl sym_1_6563
+sym_1_6563: la $2, sym_1_6563
+.globl sym_1_6564
+sym_1_6564: la $2, sym_1_6564
+.globl sym_1_6565
+sym_1_6565: la $2, sym_1_6565
+.globl sym_1_6566
+sym_1_6566: la $2, sym_1_6566
+.globl sym_1_6567
+sym_1_6567: la $2, sym_1_6567
+.globl sym_1_6568
+sym_1_6568: la $2, sym_1_6568
+.globl sym_1_6569
+sym_1_6569: la $2, sym_1_6569
+.globl sym_1_6570
+sym_1_6570: la $2, sym_1_6570
+.globl sym_1_6571
+sym_1_6571: la $2, sym_1_6571
+.globl sym_1_6572
+sym_1_6572: la $2, sym_1_6572
+.globl sym_1_6573
+sym_1_6573: la $2, sym_1_6573
+.globl sym_1_6574
+sym_1_6574: la $2, sym_1_6574
+.globl sym_1_6575
+sym_1_6575: la $2, sym_1_6575
+.globl sym_1_6576
+sym_1_6576: la $2, sym_1_6576
+.globl sym_1_6577
+sym_1_6577: la $2, sym_1_6577
+.globl sym_1_6578
+sym_1_6578: la $2, sym_1_6578
+.globl sym_1_6579
+sym_1_6579: la $2, sym_1_6579
+.globl sym_1_6580
+sym_1_6580: la $2, sym_1_6580
+.globl sym_1_6581
+sym_1_6581: la $2, sym_1_6581
+.globl sym_1_6582
+sym_1_6582: la $2, sym_1_6582
+.globl sym_1_6583
+sym_1_6583: la $2, sym_1_6583
+.globl sym_1_6584
+sym_1_6584: la $2, sym_1_6584
+.globl sym_1_6585
+sym_1_6585: la $2, sym_1_6585
+.globl sym_1_6586
+sym_1_6586: la $2, sym_1_6586
+.globl sym_1_6587
+sym_1_6587: la $2, sym_1_6587
+.globl sym_1_6588
+sym_1_6588: la $2, sym_1_6588
+.globl sym_1_6589
+sym_1_6589: la $2, sym_1_6589
+.globl sym_1_6590
+sym_1_6590: la $2, sym_1_6590
+.globl sym_1_6591
+sym_1_6591: la $2, sym_1_6591
+.globl sym_1_6592
+sym_1_6592: la $2, sym_1_6592
+.globl sym_1_6593
+sym_1_6593: la $2, sym_1_6593
+.globl sym_1_6594
+sym_1_6594: la $2, sym_1_6594
+.globl sym_1_6595
+sym_1_6595: la $2, sym_1_6595
+.globl sym_1_6596
+sym_1_6596: la $2, sym_1_6596
+.globl sym_1_6597
+sym_1_6597: la $2, sym_1_6597
+.globl sym_1_6598
+sym_1_6598: la $2, sym_1_6598
+.globl sym_1_6599
+sym_1_6599: la $2, sym_1_6599
+.globl sym_1_6600
+sym_1_6600: la $2, sym_1_6600
+.globl sym_1_6601
+sym_1_6601: la $2, sym_1_6601
+.globl sym_1_6602
+sym_1_6602: la $2, sym_1_6602
+.globl sym_1_6603
+sym_1_6603: la $2, sym_1_6603
+.globl sym_1_6604
+sym_1_6604: la $2, sym_1_6604
+.globl sym_1_6605
+sym_1_6605: la $2, sym_1_6605
+.globl sym_1_6606
+sym_1_6606: la $2, sym_1_6606
+.globl sym_1_6607
+sym_1_6607: la $2, sym_1_6607
+.globl sym_1_6608
+sym_1_6608: la $2, sym_1_6608
+.globl sym_1_6609
+sym_1_6609: la $2, sym_1_6609
+.globl sym_1_6610
+sym_1_6610: la $2, sym_1_6610
+.globl sym_1_6611
+sym_1_6611: la $2, sym_1_6611
+.globl sym_1_6612
+sym_1_6612: la $2, sym_1_6612
+.globl sym_1_6613
+sym_1_6613: la $2, sym_1_6613
+.globl sym_1_6614
+sym_1_6614: la $2, sym_1_6614
+.globl sym_1_6615
+sym_1_6615: la $2, sym_1_6615
+.globl sym_1_6616
+sym_1_6616: la $2, sym_1_6616
+.globl sym_1_6617
+sym_1_6617: la $2, sym_1_6617
+.globl sym_1_6618
+sym_1_6618: la $2, sym_1_6618
+.globl sym_1_6619
+sym_1_6619: la $2, sym_1_6619
+.globl sym_1_6620
+sym_1_6620: la $2, sym_1_6620
+.globl sym_1_6621
+sym_1_6621: la $2, sym_1_6621
+.globl sym_1_6622
+sym_1_6622: la $2, sym_1_6622
+.globl sym_1_6623
+sym_1_6623: la $2, sym_1_6623
+.globl sym_1_6624
+sym_1_6624: la $2, sym_1_6624
+.globl sym_1_6625
+sym_1_6625: la $2, sym_1_6625
+.globl sym_1_6626
+sym_1_6626: la $2, sym_1_6626
+.globl sym_1_6627
+sym_1_6627: la $2, sym_1_6627
+.globl sym_1_6628
+sym_1_6628: la $2, sym_1_6628
+.globl sym_1_6629
+sym_1_6629: la $2, sym_1_6629
+.globl sym_1_6630
+sym_1_6630: la $2, sym_1_6630
+.globl sym_1_6631
+sym_1_6631: la $2, sym_1_6631
+.globl sym_1_6632
+sym_1_6632: la $2, sym_1_6632
+.globl sym_1_6633
+sym_1_6633: la $2, sym_1_6633
+.globl sym_1_6634
+sym_1_6634: la $2, sym_1_6634
+.globl sym_1_6635
+sym_1_6635: la $2, sym_1_6635
+.globl sym_1_6636
+sym_1_6636: la $2, sym_1_6636
+.globl sym_1_6637
+sym_1_6637: la $2, sym_1_6637
+.globl sym_1_6638
+sym_1_6638: la $2, sym_1_6638
+.globl sym_1_6639
+sym_1_6639: la $2, sym_1_6639
+.globl sym_1_6640
+sym_1_6640: la $2, sym_1_6640
+.globl sym_1_6641
+sym_1_6641: la $2, sym_1_6641
+.globl sym_1_6642
+sym_1_6642: la $2, sym_1_6642
+.globl sym_1_6643
+sym_1_6643: la $2, sym_1_6643
+.globl sym_1_6644
+sym_1_6644: la $2, sym_1_6644
+.globl sym_1_6645
+sym_1_6645: la $2, sym_1_6645
+.globl sym_1_6646
+sym_1_6646: la $2, sym_1_6646
+.globl sym_1_6647
+sym_1_6647: la $2, sym_1_6647
+.globl sym_1_6648
+sym_1_6648: la $2, sym_1_6648
+.globl sym_1_6649
+sym_1_6649: la $2, sym_1_6649
+.globl sym_1_6650
+sym_1_6650: la $2, sym_1_6650
+.globl sym_1_6651
+sym_1_6651: la $2, sym_1_6651
+.globl sym_1_6652
+sym_1_6652: la $2, sym_1_6652
+.globl sym_1_6653
+sym_1_6653: la $2, sym_1_6653
+.globl sym_1_6654
+sym_1_6654: la $2, sym_1_6654
+.globl sym_1_6655
+sym_1_6655: la $2, sym_1_6655
+.globl sym_1_6656
+sym_1_6656: la $2, sym_1_6656
+.globl sym_1_6657
+sym_1_6657: la $2, sym_1_6657
+.globl sym_1_6658
+sym_1_6658: la $2, sym_1_6658
+.globl sym_1_6659
+sym_1_6659: la $2, sym_1_6659
+.globl sym_1_6660
+sym_1_6660: la $2, sym_1_6660
+.globl sym_1_6661
+sym_1_6661: la $2, sym_1_6661
+.globl sym_1_6662
+sym_1_6662: la $2, sym_1_6662
+.globl sym_1_6663
+sym_1_6663: la $2, sym_1_6663
+.globl sym_1_6664
+sym_1_6664: la $2, sym_1_6664
+.globl sym_1_6665
+sym_1_6665: la $2, sym_1_6665
+.globl sym_1_6666
+sym_1_6666: la $2, sym_1_6666
+.globl sym_1_6667
+sym_1_6667: la $2, sym_1_6667
+.globl sym_1_6668
+sym_1_6668: la $2, sym_1_6668
+.globl sym_1_6669
+sym_1_6669: la $2, sym_1_6669
+.globl sym_1_6670
+sym_1_6670: la $2, sym_1_6670
+.globl sym_1_6671
+sym_1_6671: la $2, sym_1_6671
+.globl sym_1_6672
+sym_1_6672: la $2, sym_1_6672
+.globl sym_1_6673
+sym_1_6673: la $2, sym_1_6673
+.globl sym_1_6674
+sym_1_6674: la $2, sym_1_6674
+.globl sym_1_6675
+sym_1_6675: la $2, sym_1_6675
+.globl sym_1_6676
+sym_1_6676: la $2, sym_1_6676
+.globl sym_1_6677
+sym_1_6677: la $2, sym_1_6677
+.globl sym_1_6678
+sym_1_6678: la $2, sym_1_6678
+.globl sym_1_6679
+sym_1_6679: la $2, sym_1_6679
+.globl sym_1_6680
+sym_1_6680: la $2, sym_1_6680
+.globl sym_1_6681
+sym_1_6681: la $2, sym_1_6681
+.globl sym_1_6682
+sym_1_6682: la $2, sym_1_6682
+.globl sym_1_6683
+sym_1_6683: la $2, sym_1_6683
+.globl sym_1_6684
+sym_1_6684: la $2, sym_1_6684
+.globl sym_1_6685
+sym_1_6685: la $2, sym_1_6685
+.globl sym_1_6686
+sym_1_6686: la $2, sym_1_6686
+.globl sym_1_6687
+sym_1_6687: la $2, sym_1_6687
+.globl sym_1_6688
+sym_1_6688: la $2, sym_1_6688
+.globl sym_1_6689
+sym_1_6689: la $2, sym_1_6689
+.globl sym_1_6690
+sym_1_6690: la $2, sym_1_6690
+.globl sym_1_6691
+sym_1_6691: la $2, sym_1_6691
+.globl sym_1_6692
+sym_1_6692: la $2, sym_1_6692
+.globl sym_1_6693
+sym_1_6693: la $2, sym_1_6693
+.globl sym_1_6694
+sym_1_6694: la $2, sym_1_6694
+.globl sym_1_6695
+sym_1_6695: la $2, sym_1_6695
+.globl sym_1_6696
+sym_1_6696: la $2, sym_1_6696
+.globl sym_1_6697
+sym_1_6697: la $2, sym_1_6697
+.globl sym_1_6698
+sym_1_6698: la $2, sym_1_6698
+.globl sym_1_6699
+sym_1_6699: la $2, sym_1_6699
+.globl sym_1_6700
+sym_1_6700: la $2, sym_1_6700
+.globl sym_1_6701
+sym_1_6701: la $2, sym_1_6701
+.globl sym_1_6702
+sym_1_6702: la $2, sym_1_6702
+.globl sym_1_6703
+sym_1_6703: la $2, sym_1_6703
+.globl sym_1_6704
+sym_1_6704: la $2, sym_1_6704
+.globl sym_1_6705
+sym_1_6705: la $2, sym_1_6705
+.globl sym_1_6706
+sym_1_6706: la $2, sym_1_6706
+.globl sym_1_6707
+sym_1_6707: la $2, sym_1_6707
+.globl sym_1_6708
+sym_1_6708: la $2, sym_1_6708
+.globl sym_1_6709
+sym_1_6709: la $2, sym_1_6709
+.globl sym_1_6710
+sym_1_6710: la $2, sym_1_6710
+.globl sym_1_6711
+sym_1_6711: la $2, sym_1_6711
+.globl sym_1_6712
+sym_1_6712: la $2, sym_1_6712
+.globl sym_1_6713
+sym_1_6713: la $2, sym_1_6713
+.globl sym_1_6714
+sym_1_6714: la $2, sym_1_6714
+.globl sym_1_6715
+sym_1_6715: la $2, sym_1_6715
+.globl sym_1_6716
+sym_1_6716: la $2, sym_1_6716
+.globl sym_1_6717
+sym_1_6717: la $2, sym_1_6717
+.globl sym_1_6718
+sym_1_6718: la $2, sym_1_6718
+.globl sym_1_6719
+sym_1_6719: la $2, sym_1_6719
+.globl sym_1_6720
+sym_1_6720: la $2, sym_1_6720
+.globl sym_1_6721
+sym_1_6721: la $2, sym_1_6721
+.globl sym_1_6722
+sym_1_6722: la $2, sym_1_6722
+.globl sym_1_6723
+sym_1_6723: la $2, sym_1_6723
+.globl sym_1_6724
+sym_1_6724: la $2, sym_1_6724
+.globl sym_1_6725
+sym_1_6725: la $2, sym_1_6725
+.globl sym_1_6726
+sym_1_6726: la $2, sym_1_6726
+.globl sym_1_6727
+sym_1_6727: la $2, sym_1_6727
+.globl sym_1_6728
+sym_1_6728: la $2, sym_1_6728
+.globl sym_1_6729
+sym_1_6729: la $2, sym_1_6729
+.globl sym_1_6730
+sym_1_6730: la $2, sym_1_6730
+.globl sym_1_6731
+sym_1_6731: la $2, sym_1_6731
+.globl sym_1_6732
+sym_1_6732: la $2, sym_1_6732
+.globl sym_1_6733
+sym_1_6733: la $2, sym_1_6733
+.globl sym_1_6734
+sym_1_6734: la $2, sym_1_6734
+.globl sym_1_6735
+sym_1_6735: la $2, sym_1_6735
+.globl sym_1_6736
+sym_1_6736: la $2, sym_1_6736
+.globl sym_1_6737
+sym_1_6737: la $2, sym_1_6737
+.globl sym_1_6738
+sym_1_6738: la $2, sym_1_6738
+.globl sym_1_6739
+sym_1_6739: la $2, sym_1_6739
+.globl sym_1_6740
+sym_1_6740: la $2, sym_1_6740
+.globl sym_1_6741
+sym_1_6741: la $2, sym_1_6741
+.globl sym_1_6742
+sym_1_6742: la $2, sym_1_6742
+.globl sym_1_6743
+sym_1_6743: la $2, sym_1_6743
+.globl sym_1_6744
+sym_1_6744: la $2, sym_1_6744
+.globl sym_1_6745
+sym_1_6745: la $2, sym_1_6745
+.globl sym_1_6746
+sym_1_6746: la $2, sym_1_6746
+.globl sym_1_6747
+sym_1_6747: la $2, sym_1_6747
+.globl sym_1_6748
+sym_1_6748: la $2, sym_1_6748
+.globl sym_1_6749
+sym_1_6749: la $2, sym_1_6749
+.globl sym_1_6750
+sym_1_6750: la $2, sym_1_6750
+.globl sym_1_6751
+sym_1_6751: la $2, sym_1_6751
+.globl sym_1_6752
+sym_1_6752: la $2, sym_1_6752
+.globl sym_1_6753
+sym_1_6753: la $2, sym_1_6753
+.globl sym_1_6754
+sym_1_6754: la $2, sym_1_6754
+.globl sym_1_6755
+sym_1_6755: la $2, sym_1_6755
+.globl sym_1_6756
+sym_1_6756: la $2, sym_1_6756
+.globl sym_1_6757
+sym_1_6757: la $2, sym_1_6757
+.globl sym_1_6758
+sym_1_6758: la $2, sym_1_6758
+.globl sym_1_6759
+sym_1_6759: la $2, sym_1_6759
+.globl sym_1_6760
+sym_1_6760: la $2, sym_1_6760
+.globl sym_1_6761
+sym_1_6761: la $2, sym_1_6761
+.globl sym_1_6762
+sym_1_6762: la $2, sym_1_6762
+.globl sym_1_6763
+sym_1_6763: la $2, sym_1_6763
+.globl sym_1_6764
+sym_1_6764: la $2, sym_1_6764
+.globl sym_1_6765
+sym_1_6765: la $2, sym_1_6765
+.globl sym_1_6766
+sym_1_6766: la $2, sym_1_6766
+.globl sym_1_6767
+sym_1_6767: la $2, sym_1_6767
+.globl sym_1_6768
+sym_1_6768: la $2, sym_1_6768
+.globl sym_1_6769
+sym_1_6769: la $2, sym_1_6769
+.globl sym_1_6770
+sym_1_6770: la $2, sym_1_6770
+.globl sym_1_6771
+sym_1_6771: la $2, sym_1_6771
+.globl sym_1_6772
+sym_1_6772: la $2, sym_1_6772
+.globl sym_1_6773
+sym_1_6773: la $2, sym_1_6773
+.globl sym_1_6774
+sym_1_6774: la $2, sym_1_6774
+.globl sym_1_6775
+sym_1_6775: la $2, sym_1_6775
+.globl sym_1_6776
+sym_1_6776: la $2, sym_1_6776
+.globl sym_1_6777
+sym_1_6777: la $2, sym_1_6777
+.globl sym_1_6778
+sym_1_6778: la $2, sym_1_6778
+.globl sym_1_6779
+sym_1_6779: la $2, sym_1_6779
+.globl sym_1_6780
+sym_1_6780: la $2, sym_1_6780
+.globl sym_1_6781
+sym_1_6781: la $2, sym_1_6781
+.globl sym_1_6782
+sym_1_6782: la $2, sym_1_6782
+.globl sym_1_6783
+sym_1_6783: la $2, sym_1_6783
+.globl sym_1_6784
+sym_1_6784: la $2, sym_1_6784
+.globl sym_1_6785
+sym_1_6785: la $2, sym_1_6785
+.globl sym_1_6786
+sym_1_6786: la $2, sym_1_6786
+.globl sym_1_6787
+sym_1_6787: la $2, sym_1_6787
+.globl sym_1_6788
+sym_1_6788: la $2, sym_1_6788
+.globl sym_1_6789
+sym_1_6789: la $2, sym_1_6789
+.globl sym_1_6790
+sym_1_6790: la $2, sym_1_6790
+.globl sym_1_6791
+sym_1_6791: la $2, sym_1_6791
+.globl sym_1_6792
+sym_1_6792: la $2, sym_1_6792
+.globl sym_1_6793
+sym_1_6793: la $2, sym_1_6793
+.globl sym_1_6794
+sym_1_6794: la $2, sym_1_6794
+.globl sym_1_6795
+sym_1_6795: la $2, sym_1_6795
+.globl sym_1_6796
+sym_1_6796: la $2, sym_1_6796
+.globl sym_1_6797
+sym_1_6797: la $2, sym_1_6797
+.globl sym_1_6798
+sym_1_6798: la $2, sym_1_6798
+.globl sym_1_6799
+sym_1_6799: la $2, sym_1_6799
+.globl sym_1_6800
+sym_1_6800: la $2, sym_1_6800
+.globl sym_1_6801
+sym_1_6801: la $2, sym_1_6801
+.globl sym_1_6802
+sym_1_6802: la $2, sym_1_6802
+.globl sym_1_6803
+sym_1_6803: la $2, sym_1_6803
+.globl sym_1_6804
+sym_1_6804: la $2, sym_1_6804
+.globl sym_1_6805
+sym_1_6805: la $2, sym_1_6805
+.globl sym_1_6806
+sym_1_6806: la $2, sym_1_6806
+.globl sym_1_6807
+sym_1_6807: la $2, sym_1_6807
+.globl sym_1_6808
+sym_1_6808: la $2, sym_1_6808
+.globl sym_1_6809
+sym_1_6809: la $2, sym_1_6809
+.globl sym_1_6810
+sym_1_6810: la $2, sym_1_6810
+.globl sym_1_6811
+sym_1_6811: la $2, sym_1_6811
+.globl sym_1_6812
+sym_1_6812: la $2, sym_1_6812
+.globl sym_1_6813
+sym_1_6813: la $2, sym_1_6813
+.globl sym_1_6814
+sym_1_6814: la $2, sym_1_6814
+.globl sym_1_6815
+sym_1_6815: la $2, sym_1_6815
+.globl sym_1_6816
+sym_1_6816: la $2, sym_1_6816
+.globl sym_1_6817
+sym_1_6817: la $2, sym_1_6817
+.globl sym_1_6818
+sym_1_6818: la $2, sym_1_6818
+.globl sym_1_6819
+sym_1_6819: la $2, sym_1_6819
+.globl sym_1_6820
+sym_1_6820: la $2, sym_1_6820
+.globl sym_1_6821
+sym_1_6821: la $2, sym_1_6821
+.globl sym_1_6822
+sym_1_6822: la $2, sym_1_6822
+.globl sym_1_6823
+sym_1_6823: la $2, sym_1_6823
+.globl sym_1_6824
+sym_1_6824: la $2, sym_1_6824
+.globl sym_1_6825
+sym_1_6825: la $2, sym_1_6825
+.globl sym_1_6826
+sym_1_6826: la $2, sym_1_6826
+.globl sym_1_6827
+sym_1_6827: la $2, sym_1_6827
+.globl sym_1_6828
+sym_1_6828: la $2, sym_1_6828
+.globl sym_1_6829
+sym_1_6829: la $2, sym_1_6829
+.globl sym_1_6830
+sym_1_6830: la $2, sym_1_6830
+.globl sym_1_6831
+sym_1_6831: la $2, sym_1_6831
+.globl sym_1_6832
+sym_1_6832: la $2, sym_1_6832
+.globl sym_1_6833
+sym_1_6833: la $2, sym_1_6833
+.globl sym_1_6834
+sym_1_6834: la $2, sym_1_6834
+.globl sym_1_6835
+sym_1_6835: la $2, sym_1_6835
+.globl sym_1_6836
+sym_1_6836: la $2, sym_1_6836
+.globl sym_1_6837
+sym_1_6837: la $2, sym_1_6837
+.globl sym_1_6838
+sym_1_6838: la $2, sym_1_6838
+.globl sym_1_6839
+sym_1_6839: la $2, sym_1_6839
+.globl sym_1_6840
+sym_1_6840: la $2, sym_1_6840
+.globl sym_1_6841
+sym_1_6841: la $2, sym_1_6841
+.globl sym_1_6842
+sym_1_6842: la $2, sym_1_6842
+.globl sym_1_6843
+sym_1_6843: la $2, sym_1_6843
+.globl sym_1_6844
+sym_1_6844: la $2, sym_1_6844
+.globl sym_1_6845
+sym_1_6845: la $2, sym_1_6845
+.globl sym_1_6846
+sym_1_6846: la $2, sym_1_6846
+.globl sym_1_6847
+sym_1_6847: la $2, sym_1_6847
+.globl sym_1_6848
+sym_1_6848: la $2, sym_1_6848
+.globl sym_1_6849
+sym_1_6849: la $2, sym_1_6849
+.globl sym_1_6850
+sym_1_6850: la $2, sym_1_6850
+.globl sym_1_6851
+sym_1_6851: la $2, sym_1_6851
+.globl sym_1_6852
+sym_1_6852: la $2, sym_1_6852
+.globl sym_1_6853
+sym_1_6853: la $2, sym_1_6853
+.globl sym_1_6854
+sym_1_6854: la $2, sym_1_6854
+.globl sym_1_6855
+sym_1_6855: la $2, sym_1_6855
+.globl sym_1_6856
+sym_1_6856: la $2, sym_1_6856
+.globl sym_1_6857
+sym_1_6857: la $2, sym_1_6857
+.globl sym_1_6858
+sym_1_6858: la $2, sym_1_6858
+.globl sym_1_6859
+sym_1_6859: la $2, sym_1_6859
+.globl sym_1_6860
+sym_1_6860: la $2, sym_1_6860
+.globl sym_1_6861
+sym_1_6861: la $2, sym_1_6861
+.globl sym_1_6862
+sym_1_6862: la $2, sym_1_6862
+.globl sym_1_6863
+sym_1_6863: la $2, sym_1_6863
+.globl sym_1_6864
+sym_1_6864: la $2, sym_1_6864
+.globl sym_1_6865
+sym_1_6865: la $2, sym_1_6865
+.globl sym_1_6866
+sym_1_6866: la $2, sym_1_6866
+.globl sym_1_6867
+sym_1_6867: la $2, sym_1_6867
+.globl sym_1_6868
+sym_1_6868: la $2, sym_1_6868
+.globl sym_1_6869
+sym_1_6869: la $2, sym_1_6869
+.globl sym_1_6870
+sym_1_6870: la $2, sym_1_6870
+.globl sym_1_6871
+sym_1_6871: la $2, sym_1_6871
+.globl sym_1_6872
+sym_1_6872: la $2, sym_1_6872
+.globl sym_1_6873
+sym_1_6873: la $2, sym_1_6873
+.globl sym_1_6874
+sym_1_6874: la $2, sym_1_6874
+.globl sym_1_6875
+sym_1_6875: la $2, sym_1_6875
+.globl sym_1_6876
+sym_1_6876: la $2, sym_1_6876
+.globl sym_1_6877
+sym_1_6877: la $2, sym_1_6877
+.globl sym_1_6878
+sym_1_6878: la $2, sym_1_6878
+.globl sym_1_6879
+sym_1_6879: la $2, sym_1_6879
+.globl sym_1_6880
+sym_1_6880: la $2, sym_1_6880
+.globl sym_1_6881
+sym_1_6881: la $2, sym_1_6881
+.globl sym_1_6882
+sym_1_6882: la $2, sym_1_6882
+.globl sym_1_6883
+sym_1_6883: la $2, sym_1_6883
+.globl sym_1_6884
+sym_1_6884: la $2, sym_1_6884
+.globl sym_1_6885
+sym_1_6885: la $2, sym_1_6885
+.globl sym_1_6886
+sym_1_6886: la $2, sym_1_6886
+.globl sym_1_6887
+sym_1_6887: la $2, sym_1_6887
+.globl sym_1_6888
+sym_1_6888: la $2, sym_1_6888
+.globl sym_1_6889
+sym_1_6889: la $2, sym_1_6889
+.globl sym_1_6890
+sym_1_6890: la $2, sym_1_6890
+.globl sym_1_6891
+sym_1_6891: la $2, sym_1_6891
+.globl sym_1_6892
+sym_1_6892: la $2, sym_1_6892
+.globl sym_1_6893
+sym_1_6893: la $2, sym_1_6893
+.globl sym_1_6894
+sym_1_6894: la $2, sym_1_6894
+.globl sym_1_6895
+sym_1_6895: la $2, sym_1_6895
+.globl sym_1_6896
+sym_1_6896: la $2, sym_1_6896
+.globl sym_1_6897
+sym_1_6897: la $2, sym_1_6897
+.globl sym_1_6898
+sym_1_6898: la $2, sym_1_6898
+.globl sym_1_6899
+sym_1_6899: la $2, sym_1_6899
+.globl sym_1_6900
+sym_1_6900: la $2, sym_1_6900
+.globl sym_1_6901
+sym_1_6901: la $2, sym_1_6901
+.globl sym_1_6902
+sym_1_6902: la $2, sym_1_6902
+.globl sym_1_6903
+sym_1_6903: la $2, sym_1_6903
+.globl sym_1_6904
+sym_1_6904: la $2, sym_1_6904
+.globl sym_1_6905
+sym_1_6905: la $2, sym_1_6905
+.globl sym_1_6906
+sym_1_6906: la $2, sym_1_6906
+.globl sym_1_6907
+sym_1_6907: la $2, sym_1_6907
+.globl sym_1_6908
+sym_1_6908: la $2, sym_1_6908
+.globl sym_1_6909
+sym_1_6909: la $2, sym_1_6909
+.globl sym_1_6910
+sym_1_6910: la $2, sym_1_6910
+.globl sym_1_6911
+sym_1_6911: la $2, sym_1_6911
+.globl sym_1_6912
+sym_1_6912: la $2, sym_1_6912
+.globl sym_1_6913
+sym_1_6913: la $2, sym_1_6913
+.globl sym_1_6914
+sym_1_6914: la $2, sym_1_6914
+.globl sym_1_6915
+sym_1_6915: la $2, sym_1_6915
+.globl sym_1_6916
+sym_1_6916: la $2, sym_1_6916
+.globl sym_1_6917
+sym_1_6917: la $2, sym_1_6917
+.globl sym_1_6918
+sym_1_6918: la $2, sym_1_6918
+.globl sym_1_6919
+sym_1_6919: la $2, sym_1_6919
+.globl sym_1_6920
+sym_1_6920: la $2, sym_1_6920
+.globl sym_1_6921
+sym_1_6921: la $2, sym_1_6921
+.globl sym_1_6922
+sym_1_6922: la $2, sym_1_6922
+.globl sym_1_6923
+sym_1_6923: la $2, sym_1_6923
+.globl sym_1_6924
+sym_1_6924: la $2, sym_1_6924
+.globl sym_1_6925
+sym_1_6925: la $2, sym_1_6925
+.globl sym_1_6926
+sym_1_6926: la $2, sym_1_6926
+.globl sym_1_6927
+sym_1_6927: la $2, sym_1_6927
+.globl sym_1_6928
+sym_1_6928: la $2, sym_1_6928
+.globl sym_1_6929
+sym_1_6929: la $2, sym_1_6929
+.globl sym_1_6930
+sym_1_6930: la $2, sym_1_6930
+.globl sym_1_6931
+sym_1_6931: la $2, sym_1_6931
+.globl sym_1_6932
+sym_1_6932: la $2, sym_1_6932
+.globl sym_1_6933
+sym_1_6933: la $2, sym_1_6933
+.globl sym_1_6934
+sym_1_6934: la $2, sym_1_6934
+.globl sym_1_6935
+sym_1_6935: la $2, sym_1_6935
+.globl sym_1_6936
+sym_1_6936: la $2, sym_1_6936
+.globl sym_1_6937
+sym_1_6937: la $2, sym_1_6937
+.globl sym_1_6938
+sym_1_6938: la $2, sym_1_6938
+.globl sym_1_6939
+sym_1_6939: la $2, sym_1_6939
+.globl sym_1_6940
+sym_1_6940: la $2, sym_1_6940
+.globl sym_1_6941
+sym_1_6941: la $2, sym_1_6941
+.globl sym_1_6942
+sym_1_6942: la $2, sym_1_6942
+.globl sym_1_6943
+sym_1_6943: la $2, sym_1_6943
+.globl sym_1_6944
+sym_1_6944: la $2, sym_1_6944
+.globl sym_1_6945
+sym_1_6945: la $2, sym_1_6945
+.globl sym_1_6946
+sym_1_6946: la $2, sym_1_6946
+.globl sym_1_6947
+sym_1_6947: la $2, sym_1_6947
+.globl sym_1_6948
+sym_1_6948: la $2, sym_1_6948
+.globl sym_1_6949
+sym_1_6949: la $2, sym_1_6949
+.globl sym_1_6950
+sym_1_6950: la $2, sym_1_6950
+.globl sym_1_6951
+sym_1_6951: la $2, sym_1_6951
+.globl sym_1_6952
+sym_1_6952: la $2, sym_1_6952
+.globl sym_1_6953
+sym_1_6953: la $2, sym_1_6953
+.globl sym_1_6954
+sym_1_6954: la $2, sym_1_6954
+.globl sym_1_6955
+sym_1_6955: la $2, sym_1_6955
+.globl sym_1_6956
+sym_1_6956: la $2, sym_1_6956
+.globl sym_1_6957
+sym_1_6957: la $2, sym_1_6957
+.globl sym_1_6958
+sym_1_6958: la $2, sym_1_6958
+.globl sym_1_6959
+sym_1_6959: la $2, sym_1_6959
+.globl sym_1_6960
+sym_1_6960: la $2, sym_1_6960
+.globl sym_1_6961
+sym_1_6961: la $2, sym_1_6961
+.globl sym_1_6962
+sym_1_6962: la $2, sym_1_6962
+.globl sym_1_6963
+sym_1_6963: la $2, sym_1_6963
+.globl sym_1_6964
+sym_1_6964: la $2, sym_1_6964
+.globl sym_1_6965
+sym_1_6965: la $2, sym_1_6965
+.globl sym_1_6966
+sym_1_6966: la $2, sym_1_6966
+.globl sym_1_6967
+sym_1_6967: la $2, sym_1_6967
+.globl sym_1_6968
+sym_1_6968: la $2, sym_1_6968
+.globl sym_1_6969
+sym_1_6969: la $2, sym_1_6969
+.globl sym_1_6970
+sym_1_6970: la $2, sym_1_6970
+.globl sym_1_6971
+sym_1_6971: la $2, sym_1_6971
+.globl sym_1_6972
+sym_1_6972: la $2, sym_1_6972
+.globl sym_1_6973
+sym_1_6973: la $2, sym_1_6973
+.globl sym_1_6974
+sym_1_6974: la $2, sym_1_6974
+.globl sym_1_6975
+sym_1_6975: la $2, sym_1_6975
+.globl sym_1_6976
+sym_1_6976: la $2, sym_1_6976
+.globl sym_1_6977
+sym_1_6977: la $2, sym_1_6977
+.globl sym_1_6978
+sym_1_6978: la $2, sym_1_6978
+.globl sym_1_6979
+sym_1_6979: la $2, sym_1_6979
+.globl sym_1_6980
+sym_1_6980: la $2, sym_1_6980
+.globl sym_1_6981
+sym_1_6981: la $2, sym_1_6981
+.globl sym_1_6982
+sym_1_6982: la $2, sym_1_6982
+.globl sym_1_6983
+sym_1_6983: la $2, sym_1_6983
+.globl sym_1_6984
+sym_1_6984: la $2, sym_1_6984
+.globl sym_1_6985
+sym_1_6985: la $2, sym_1_6985
+.globl sym_1_6986
+sym_1_6986: la $2, sym_1_6986
+.globl sym_1_6987
+sym_1_6987: la $2, sym_1_6987
+.globl sym_1_6988
+sym_1_6988: la $2, sym_1_6988
+.globl sym_1_6989
+sym_1_6989: la $2, sym_1_6989
+.globl sym_1_6990
+sym_1_6990: la $2, sym_1_6990
+.globl sym_1_6991
+sym_1_6991: la $2, sym_1_6991
+.globl sym_1_6992
+sym_1_6992: la $2, sym_1_6992
+.globl sym_1_6993
+sym_1_6993: la $2, sym_1_6993
+.globl sym_1_6994
+sym_1_6994: la $2, sym_1_6994
+.globl sym_1_6995
+sym_1_6995: la $2, sym_1_6995
+.globl sym_1_6996
+sym_1_6996: la $2, sym_1_6996
+.globl sym_1_6997
+sym_1_6997: la $2, sym_1_6997
+.globl sym_1_6998
+sym_1_6998: la $2, sym_1_6998
+.globl sym_1_6999
+sym_1_6999: la $2, sym_1_6999
+.globl sym_1_7000
+sym_1_7000: la $2, sym_1_7000
+.globl sym_1_7001
+sym_1_7001: la $2, sym_1_7001
+.globl sym_1_7002
+sym_1_7002: la $2, sym_1_7002
+.globl sym_1_7003
+sym_1_7003: la $2, sym_1_7003
+.globl sym_1_7004
+sym_1_7004: la $2, sym_1_7004
+.globl sym_1_7005
+sym_1_7005: la $2, sym_1_7005
+.globl sym_1_7006
+sym_1_7006: la $2, sym_1_7006
+.globl sym_1_7007
+sym_1_7007: la $2, sym_1_7007
+.globl sym_1_7008
+sym_1_7008: la $2, sym_1_7008
+.globl sym_1_7009
+sym_1_7009: la $2, sym_1_7009
+.globl sym_1_7010
+sym_1_7010: la $2, sym_1_7010
+.globl sym_1_7011
+sym_1_7011: la $2, sym_1_7011
+.globl sym_1_7012
+sym_1_7012: la $2, sym_1_7012
+.globl sym_1_7013
+sym_1_7013: la $2, sym_1_7013
+.globl sym_1_7014
+sym_1_7014: la $2, sym_1_7014
+.globl sym_1_7015
+sym_1_7015: la $2, sym_1_7015
+.globl sym_1_7016
+sym_1_7016: la $2, sym_1_7016
+.globl sym_1_7017
+sym_1_7017: la $2, sym_1_7017
+.globl sym_1_7018
+sym_1_7018: la $2, sym_1_7018
+.globl sym_1_7019
+sym_1_7019: la $2, sym_1_7019
+.globl sym_1_7020
+sym_1_7020: la $2, sym_1_7020
+.globl sym_1_7021
+sym_1_7021: la $2, sym_1_7021
+.globl sym_1_7022
+sym_1_7022: la $2, sym_1_7022
+.globl sym_1_7023
+sym_1_7023: la $2, sym_1_7023
+.globl sym_1_7024
+sym_1_7024: la $2, sym_1_7024
+.globl sym_1_7025
+sym_1_7025: la $2, sym_1_7025
+.globl sym_1_7026
+sym_1_7026: la $2, sym_1_7026
+.globl sym_1_7027
+sym_1_7027: la $2, sym_1_7027
+.globl sym_1_7028
+sym_1_7028: la $2, sym_1_7028
+.globl sym_1_7029
+sym_1_7029: la $2, sym_1_7029
+.globl sym_1_7030
+sym_1_7030: la $2, sym_1_7030
+.globl sym_1_7031
+sym_1_7031: la $2, sym_1_7031
+.globl sym_1_7032
+sym_1_7032: la $2, sym_1_7032
+.globl sym_1_7033
+sym_1_7033: la $2, sym_1_7033
+.globl sym_1_7034
+sym_1_7034: la $2, sym_1_7034
+.globl sym_1_7035
+sym_1_7035: la $2, sym_1_7035
+.globl sym_1_7036
+sym_1_7036: la $2, sym_1_7036
+.globl sym_1_7037
+sym_1_7037: la $2, sym_1_7037
+.globl sym_1_7038
+sym_1_7038: la $2, sym_1_7038
+.globl sym_1_7039
+sym_1_7039: la $2, sym_1_7039
+.globl sym_1_7040
+sym_1_7040: la $2, sym_1_7040
+.globl sym_1_7041
+sym_1_7041: la $2, sym_1_7041
+.globl sym_1_7042
+sym_1_7042: la $2, sym_1_7042
+.globl sym_1_7043
+sym_1_7043: la $2, sym_1_7043
+.globl sym_1_7044
+sym_1_7044: la $2, sym_1_7044
+.globl sym_1_7045
+sym_1_7045: la $2, sym_1_7045
+.globl sym_1_7046
+sym_1_7046: la $2, sym_1_7046
+.globl sym_1_7047
+sym_1_7047: la $2, sym_1_7047
+.globl sym_1_7048
+sym_1_7048: la $2, sym_1_7048
+.globl sym_1_7049
+sym_1_7049: la $2, sym_1_7049
+.globl sym_1_7050
+sym_1_7050: la $2, sym_1_7050
+.globl sym_1_7051
+sym_1_7051: la $2, sym_1_7051
+.globl sym_1_7052
+sym_1_7052: la $2, sym_1_7052
+.globl sym_1_7053
+sym_1_7053: la $2, sym_1_7053
+.globl sym_1_7054
+sym_1_7054: la $2, sym_1_7054
+.globl sym_1_7055
+sym_1_7055: la $2, sym_1_7055
+.globl sym_1_7056
+sym_1_7056: la $2, sym_1_7056
+.globl sym_1_7057
+sym_1_7057: la $2, sym_1_7057
+.globl sym_1_7058
+sym_1_7058: la $2, sym_1_7058
+.globl sym_1_7059
+sym_1_7059: la $2, sym_1_7059
+.globl sym_1_7060
+sym_1_7060: la $2, sym_1_7060
+.globl sym_1_7061
+sym_1_7061: la $2, sym_1_7061
+.globl sym_1_7062
+sym_1_7062: la $2, sym_1_7062
+.globl sym_1_7063
+sym_1_7063: la $2, sym_1_7063
+.globl sym_1_7064
+sym_1_7064: la $2, sym_1_7064
+.globl sym_1_7065
+sym_1_7065: la $2, sym_1_7065
+.globl sym_1_7066
+sym_1_7066: la $2, sym_1_7066
+.globl sym_1_7067
+sym_1_7067: la $2, sym_1_7067
+.globl sym_1_7068
+sym_1_7068: la $2, sym_1_7068
+.globl sym_1_7069
+sym_1_7069: la $2, sym_1_7069
+.globl sym_1_7070
+sym_1_7070: la $2, sym_1_7070
+.globl sym_1_7071
+sym_1_7071: la $2, sym_1_7071
+.globl sym_1_7072
+sym_1_7072: la $2, sym_1_7072
+.globl sym_1_7073
+sym_1_7073: la $2, sym_1_7073
+.globl sym_1_7074
+sym_1_7074: la $2, sym_1_7074
+.globl sym_1_7075
+sym_1_7075: la $2, sym_1_7075
+.globl sym_1_7076
+sym_1_7076: la $2, sym_1_7076
+.globl sym_1_7077
+sym_1_7077: la $2, sym_1_7077
+.globl sym_1_7078
+sym_1_7078: la $2, sym_1_7078
+.globl sym_1_7079
+sym_1_7079: la $2, sym_1_7079
+.globl sym_1_7080
+sym_1_7080: la $2, sym_1_7080
+.globl sym_1_7081
+sym_1_7081: la $2, sym_1_7081
+.globl sym_1_7082
+sym_1_7082: la $2, sym_1_7082
+.globl sym_1_7083
+sym_1_7083: la $2, sym_1_7083
+.globl sym_1_7084
+sym_1_7084: la $2, sym_1_7084
+.globl sym_1_7085
+sym_1_7085: la $2, sym_1_7085
+.globl sym_1_7086
+sym_1_7086: la $2, sym_1_7086
+.globl sym_1_7087
+sym_1_7087: la $2, sym_1_7087
+.globl sym_1_7088
+sym_1_7088: la $2, sym_1_7088
+.globl sym_1_7089
+sym_1_7089: la $2, sym_1_7089
+.globl sym_1_7090
+sym_1_7090: la $2, sym_1_7090
+.globl sym_1_7091
+sym_1_7091: la $2, sym_1_7091
+.globl sym_1_7092
+sym_1_7092: la $2, sym_1_7092
+.globl sym_1_7093
+sym_1_7093: la $2, sym_1_7093
+.globl sym_1_7094
+sym_1_7094: la $2, sym_1_7094
+.globl sym_1_7095
+sym_1_7095: la $2, sym_1_7095
+.globl sym_1_7096
+sym_1_7096: la $2, sym_1_7096
+.globl sym_1_7097
+sym_1_7097: la $2, sym_1_7097
+.globl sym_1_7098
+sym_1_7098: la $2, sym_1_7098
+.globl sym_1_7099
+sym_1_7099: la $2, sym_1_7099
+.globl sym_1_7100
+sym_1_7100: la $2, sym_1_7100
+.globl sym_1_7101
+sym_1_7101: la $2, sym_1_7101
+.globl sym_1_7102
+sym_1_7102: la $2, sym_1_7102
+.globl sym_1_7103
+sym_1_7103: la $2, sym_1_7103
+.globl sym_1_7104
+sym_1_7104: la $2, sym_1_7104
+.globl sym_1_7105
+sym_1_7105: la $2, sym_1_7105
+.globl sym_1_7106
+sym_1_7106: la $2, sym_1_7106
+.globl sym_1_7107
+sym_1_7107: la $2, sym_1_7107
+.globl sym_1_7108
+sym_1_7108: la $2, sym_1_7108
+.globl sym_1_7109
+sym_1_7109: la $2, sym_1_7109
+.globl sym_1_7110
+sym_1_7110: la $2, sym_1_7110
+.globl sym_1_7111
+sym_1_7111: la $2, sym_1_7111
+.globl sym_1_7112
+sym_1_7112: la $2, sym_1_7112
+.globl sym_1_7113
+sym_1_7113: la $2, sym_1_7113
+.globl sym_1_7114
+sym_1_7114: la $2, sym_1_7114
+.globl sym_1_7115
+sym_1_7115: la $2, sym_1_7115
+.globl sym_1_7116
+sym_1_7116: la $2, sym_1_7116
+.globl sym_1_7117
+sym_1_7117: la $2, sym_1_7117
+.globl sym_1_7118
+sym_1_7118: la $2, sym_1_7118
+.globl sym_1_7119
+sym_1_7119: la $2, sym_1_7119
+.globl sym_1_7120
+sym_1_7120: la $2, sym_1_7120
+.globl sym_1_7121
+sym_1_7121: la $2, sym_1_7121
+.globl sym_1_7122
+sym_1_7122: la $2, sym_1_7122
+.globl sym_1_7123
+sym_1_7123: la $2, sym_1_7123
+.globl sym_1_7124
+sym_1_7124: la $2, sym_1_7124
+.globl sym_1_7125
+sym_1_7125: la $2, sym_1_7125
+.globl sym_1_7126
+sym_1_7126: la $2, sym_1_7126
+.globl sym_1_7127
+sym_1_7127: la $2, sym_1_7127
+.globl sym_1_7128
+sym_1_7128: la $2, sym_1_7128
+.globl sym_1_7129
+sym_1_7129: la $2, sym_1_7129
+.globl sym_1_7130
+sym_1_7130: la $2, sym_1_7130
+.globl sym_1_7131
+sym_1_7131: la $2, sym_1_7131
+.globl sym_1_7132
+sym_1_7132: la $2, sym_1_7132
+.globl sym_1_7133
+sym_1_7133: la $2, sym_1_7133
+.globl sym_1_7134
+sym_1_7134: la $2, sym_1_7134
+.globl sym_1_7135
+sym_1_7135: la $2, sym_1_7135
+.globl sym_1_7136
+sym_1_7136: la $2, sym_1_7136
+.globl sym_1_7137
+sym_1_7137: la $2, sym_1_7137
+.globl sym_1_7138
+sym_1_7138: la $2, sym_1_7138
+.globl sym_1_7139
+sym_1_7139: la $2, sym_1_7139
+.globl sym_1_7140
+sym_1_7140: la $2, sym_1_7140
+.globl sym_1_7141
+sym_1_7141: la $2, sym_1_7141
+.globl sym_1_7142
+sym_1_7142: la $2, sym_1_7142
+.globl sym_1_7143
+sym_1_7143: la $2, sym_1_7143
+.globl sym_1_7144
+sym_1_7144: la $2, sym_1_7144
+.globl sym_1_7145
+sym_1_7145: la $2, sym_1_7145
+.globl sym_1_7146
+sym_1_7146: la $2, sym_1_7146
+.globl sym_1_7147
+sym_1_7147: la $2, sym_1_7147
+.globl sym_1_7148
+sym_1_7148: la $2, sym_1_7148
+.globl sym_1_7149
+sym_1_7149: la $2, sym_1_7149
+.globl sym_1_7150
+sym_1_7150: la $2, sym_1_7150
+.globl sym_1_7151
+sym_1_7151: la $2, sym_1_7151
+.globl sym_1_7152
+sym_1_7152: la $2, sym_1_7152
+.globl sym_1_7153
+sym_1_7153: la $2, sym_1_7153
+.globl sym_1_7154
+sym_1_7154: la $2, sym_1_7154
+.globl sym_1_7155
+sym_1_7155: la $2, sym_1_7155
+.globl sym_1_7156
+sym_1_7156: la $2, sym_1_7156
+.globl sym_1_7157
+sym_1_7157: la $2, sym_1_7157
+.globl sym_1_7158
+sym_1_7158: la $2, sym_1_7158
+.globl sym_1_7159
+sym_1_7159: la $2, sym_1_7159
+.globl sym_1_7160
+sym_1_7160: la $2, sym_1_7160
+.globl sym_1_7161
+sym_1_7161: la $2, sym_1_7161
+.globl sym_1_7162
+sym_1_7162: la $2, sym_1_7162
+.globl sym_1_7163
+sym_1_7163: la $2, sym_1_7163
+.globl sym_1_7164
+sym_1_7164: la $2, sym_1_7164
+.globl sym_1_7165
+sym_1_7165: la $2, sym_1_7165
+.globl sym_1_7166
+sym_1_7166: la $2, sym_1_7166
+.globl sym_1_7167
+sym_1_7167: la $2, sym_1_7167
+.globl sym_1_7168
+sym_1_7168: la $2, sym_1_7168
+.globl sym_1_7169
+sym_1_7169: la $2, sym_1_7169
+.globl sym_1_7170
+sym_1_7170: la $2, sym_1_7170
+.globl sym_1_7171
+sym_1_7171: la $2, sym_1_7171
+.globl sym_1_7172
+sym_1_7172: la $2, sym_1_7172
+.globl sym_1_7173
+sym_1_7173: la $2, sym_1_7173
+.globl sym_1_7174
+sym_1_7174: la $2, sym_1_7174
+.globl sym_1_7175
+sym_1_7175: la $2, sym_1_7175
+.globl sym_1_7176
+sym_1_7176: la $2, sym_1_7176
+.globl sym_1_7177
+sym_1_7177: la $2, sym_1_7177
+.globl sym_1_7178
+sym_1_7178: la $2, sym_1_7178
+.globl sym_1_7179
+sym_1_7179: la $2, sym_1_7179
+.globl sym_1_7180
+sym_1_7180: la $2, sym_1_7180
+.globl sym_1_7181
+sym_1_7181: la $2, sym_1_7181
+.globl sym_1_7182
+sym_1_7182: la $2, sym_1_7182
+.globl sym_1_7183
+sym_1_7183: la $2, sym_1_7183
+.globl sym_1_7184
+sym_1_7184: la $2, sym_1_7184
+.globl sym_1_7185
+sym_1_7185: la $2, sym_1_7185
+.globl sym_1_7186
+sym_1_7186: la $2, sym_1_7186
+.globl sym_1_7187
+sym_1_7187: la $2, sym_1_7187
+.globl sym_1_7188
+sym_1_7188: la $2, sym_1_7188
+.globl sym_1_7189
+sym_1_7189: la $2, sym_1_7189
+.globl sym_1_7190
+sym_1_7190: la $2, sym_1_7190
+.globl sym_1_7191
+sym_1_7191: la $2, sym_1_7191
+.globl sym_1_7192
+sym_1_7192: la $2, sym_1_7192
+.globl sym_1_7193
+sym_1_7193: la $2, sym_1_7193
+.globl sym_1_7194
+sym_1_7194: la $2, sym_1_7194
+.globl sym_1_7195
+sym_1_7195: la $2, sym_1_7195
+.globl sym_1_7196
+sym_1_7196: la $2, sym_1_7196
+.globl sym_1_7197
+sym_1_7197: la $2, sym_1_7197
+.globl sym_1_7198
+sym_1_7198: la $2, sym_1_7198
+.globl sym_1_7199
+sym_1_7199: la $2, sym_1_7199
+.globl sym_1_7200
+sym_1_7200: la $2, sym_1_7200
+.globl sym_1_7201
+sym_1_7201: la $2, sym_1_7201
+.globl sym_1_7202
+sym_1_7202: la $2, sym_1_7202
+.globl sym_1_7203
+sym_1_7203: la $2, sym_1_7203
+.globl sym_1_7204
+sym_1_7204: la $2, sym_1_7204
+.globl sym_1_7205
+sym_1_7205: la $2, sym_1_7205
+.globl sym_1_7206
+sym_1_7206: la $2, sym_1_7206
+.globl sym_1_7207
+sym_1_7207: la $2, sym_1_7207
+.globl sym_1_7208
+sym_1_7208: la $2, sym_1_7208
+.globl sym_1_7209
+sym_1_7209: la $2, sym_1_7209
+.globl sym_1_7210
+sym_1_7210: la $2, sym_1_7210
+.globl sym_1_7211
+sym_1_7211: la $2, sym_1_7211
+.globl sym_1_7212
+sym_1_7212: la $2, sym_1_7212
+.globl sym_1_7213
+sym_1_7213: la $2, sym_1_7213
+.globl sym_1_7214
+sym_1_7214: la $2, sym_1_7214
+.globl sym_1_7215
+sym_1_7215: la $2, sym_1_7215
+.globl sym_1_7216
+sym_1_7216: la $2, sym_1_7216
+.globl sym_1_7217
+sym_1_7217: la $2, sym_1_7217
+.globl sym_1_7218
+sym_1_7218: la $2, sym_1_7218
+.globl sym_1_7219
+sym_1_7219: la $2, sym_1_7219
+.globl sym_1_7220
+sym_1_7220: la $2, sym_1_7220
+.globl sym_1_7221
+sym_1_7221: la $2, sym_1_7221
+.globl sym_1_7222
+sym_1_7222: la $2, sym_1_7222
+.globl sym_1_7223
+sym_1_7223: la $2, sym_1_7223
+.globl sym_1_7224
+sym_1_7224: la $2, sym_1_7224
+.globl sym_1_7225
+sym_1_7225: la $2, sym_1_7225
+.globl sym_1_7226
+sym_1_7226: la $2, sym_1_7226
+.globl sym_1_7227
+sym_1_7227: la $2, sym_1_7227
+.globl sym_1_7228
+sym_1_7228: la $2, sym_1_7228
+.globl sym_1_7229
+sym_1_7229: la $2, sym_1_7229
+.globl sym_1_7230
+sym_1_7230: la $2, sym_1_7230
+.globl sym_1_7231
+sym_1_7231: la $2, sym_1_7231
+.globl sym_1_7232
+sym_1_7232: la $2, sym_1_7232
+.globl sym_1_7233
+sym_1_7233: la $2, sym_1_7233
+.globl sym_1_7234
+sym_1_7234: la $2, sym_1_7234
+.globl sym_1_7235
+sym_1_7235: la $2, sym_1_7235
+.globl sym_1_7236
+sym_1_7236: la $2, sym_1_7236
+.globl sym_1_7237
+sym_1_7237: la $2, sym_1_7237
+.globl sym_1_7238
+sym_1_7238: la $2, sym_1_7238
+.globl sym_1_7239
+sym_1_7239: la $2, sym_1_7239
+.globl sym_1_7240
+sym_1_7240: la $2, sym_1_7240
+.globl sym_1_7241
+sym_1_7241: la $2, sym_1_7241
+.globl sym_1_7242
+sym_1_7242: la $2, sym_1_7242
+.globl sym_1_7243
+sym_1_7243: la $2, sym_1_7243
+.globl sym_1_7244
+sym_1_7244: la $2, sym_1_7244
+.globl sym_1_7245
+sym_1_7245: la $2, sym_1_7245
+.globl sym_1_7246
+sym_1_7246: la $2, sym_1_7246
+.globl sym_1_7247
+sym_1_7247: la $2, sym_1_7247
+.globl sym_1_7248
+sym_1_7248: la $2, sym_1_7248
+.globl sym_1_7249
+sym_1_7249: la $2, sym_1_7249
+.globl sym_1_7250
+sym_1_7250: la $2, sym_1_7250
+.globl sym_1_7251
+sym_1_7251: la $2, sym_1_7251
+.globl sym_1_7252
+sym_1_7252: la $2, sym_1_7252
+.globl sym_1_7253
+sym_1_7253: la $2, sym_1_7253
+.globl sym_1_7254
+sym_1_7254: la $2, sym_1_7254
+.globl sym_1_7255
+sym_1_7255: la $2, sym_1_7255
+.globl sym_1_7256
+sym_1_7256: la $2, sym_1_7256
+.globl sym_1_7257
+sym_1_7257: la $2, sym_1_7257
+.globl sym_1_7258
+sym_1_7258: la $2, sym_1_7258
+.globl sym_1_7259
+sym_1_7259: la $2, sym_1_7259
+.globl sym_1_7260
+sym_1_7260: la $2, sym_1_7260
+.globl sym_1_7261
+sym_1_7261: la $2, sym_1_7261
+.globl sym_1_7262
+sym_1_7262: la $2, sym_1_7262
+.globl sym_1_7263
+sym_1_7263: la $2, sym_1_7263
+.globl sym_1_7264
+sym_1_7264: la $2, sym_1_7264
+.globl sym_1_7265
+sym_1_7265: la $2, sym_1_7265
+.globl sym_1_7266
+sym_1_7266: la $2, sym_1_7266
+.globl sym_1_7267
+sym_1_7267: la $2, sym_1_7267
+.globl sym_1_7268
+sym_1_7268: la $2, sym_1_7268
+.globl sym_1_7269
+sym_1_7269: la $2, sym_1_7269
+.globl sym_1_7270
+sym_1_7270: la $2, sym_1_7270
+.globl sym_1_7271
+sym_1_7271: la $2, sym_1_7271
+.globl sym_1_7272
+sym_1_7272: la $2, sym_1_7272
+.globl sym_1_7273
+sym_1_7273: la $2, sym_1_7273
+.globl sym_1_7274
+sym_1_7274: la $2, sym_1_7274
+.globl sym_1_7275
+sym_1_7275: la $2, sym_1_7275
+.globl sym_1_7276
+sym_1_7276: la $2, sym_1_7276
+.globl sym_1_7277
+sym_1_7277: la $2, sym_1_7277
+.globl sym_1_7278
+sym_1_7278: la $2, sym_1_7278
+.globl sym_1_7279
+sym_1_7279: la $2, sym_1_7279
+.globl sym_1_7280
+sym_1_7280: la $2, sym_1_7280
+.globl sym_1_7281
+sym_1_7281: la $2, sym_1_7281
+.globl sym_1_7282
+sym_1_7282: la $2, sym_1_7282
+.globl sym_1_7283
+sym_1_7283: la $2, sym_1_7283
+.globl sym_1_7284
+sym_1_7284: la $2, sym_1_7284
+.globl sym_1_7285
+sym_1_7285: la $2, sym_1_7285
+.globl sym_1_7286
+sym_1_7286: la $2, sym_1_7286
+.globl sym_1_7287
+sym_1_7287: la $2, sym_1_7287
+.globl sym_1_7288
+sym_1_7288: la $2, sym_1_7288
+.globl sym_1_7289
+sym_1_7289: la $2, sym_1_7289
+.globl sym_1_7290
+sym_1_7290: la $2, sym_1_7290
+.globl sym_1_7291
+sym_1_7291: la $2, sym_1_7291
+.globl sym_1_7292
+sym_1_7292: la $2, sym_1_7292
+.globl sym_1_7293
+sym_1_7293: la $2, sym_1_7293
+.globl sym_1_7294
+sym_1_7294: la $2, sym_1_7294
+.globl sym_1_7295
+sym_1_7295: la $2, sym_1_7295
+.globl sym_1_7296
+sym_1_7296: la $2, sym_1_7296
+.globl sym_1_7297
+sym_1_7297: la $2, sym_1_7297
+.globl sym_1_7298
+sym_1_7298: la $2, sym_1_7298
+.globl sym_1_7299
+sym_1_7299: la $2, sym_1_7299
+.globl sym_1_7300
+sym_1_7300: la $2, sym_1_7300
+.globl sym_1_7301
+sym_1_7301: la $2, sym_1_7301
+.globl sym_1_7302
+sym_1_7302: la $2, sym_1_7302
+.globl sym_1_7303
+sym_1_7303: la $2, sym_1_7303
+.globl sym_1_7304
+sym_1_7304: la $2, sym_1_7304
+.globl sym_1_7305
+sym_1_7305: la $2, sym_1_7305
+.globl sym_1_7306
+sym_1_7306: la $2, sym_1_7306
+.globl sym_1_7307
+sym_1_7307: la $2, sym_1_7307
+.globl sym_1_7308
+sym_1_7308: la $2, sym_1_7308
+.globl sym_1_7309
+sym_1_7309: la $2, sym_1_7309
+.globl sym_1_7310
+sym_1_7310: la $2, sym_1_7310
+.globl sym_1_7311
+sym_1_7311: la $2, sym_1_7311
+.globl sym_1_7312
+sym_1_7312: la $2, sym_1_7312
+.globl sym_1_7313
+sym_1_7313: la $2, sym_1_7313
+.globl sym_1_7314
+sym_1_7314: la $2, sym_1_7314
+.globl sym_1_7315
+sym_1_7315: la $2, sym_1_7315
+.globl sym_1_7316
+sym_1_7316: la $2, sym_1_7316
+.globl sym_1_7317
+sym_1_7317: la $2, sym_1_7317
+.globl sym_1_7318
+sym_1_7318: la $2, sym_1_7318
+.globl sym_1_7319
+sym_1_7319: la $2, sym_1_7319
+.globl sym_1_7320
+sym_1_7320: la $2, sym_1_7320
+.globl sym_1_7321
+sym_1_7321: la $2, sym_1_7321
+.globl sym_1_7322
+sym_1_7322: la $2, sym_1_7322
+.globl sym_1_7323
+sym_1_7323: la $2, sym_1_7323
+.globl sym_1_7324
+sym_1_7324: la $2, sym_1_7324
+.globl sym_1_7325
+sym_1_7325: la $2, sym_1_7325
+.globl sym_1_7326
+sym_1_7326: la $2, sym_1_7326
+.globl sym_1_7327
+sym_1_7327: la $2, sym_1_7327
+.globl sym_1_7328
+sym_1_7328: la $2, sym_1_7328
+.globl sym_1_7329
+sym_1_7329: la $2, sym_1_7329
+.globl sym_1_7330
+sym_1_7330: la $2, sym_1_7330
+.globl sym_1_7331
+sym_1_7331: la $2, sym_1_7331
+.globl sym_1_7332
+sym_1_7332: la $2, sym_1_7332
+.globl sym_1_7333
+sym_1_7333: la $2, sym_1_7333
+.globl sym_1_7334
+sym_1_7334: la $2, sym_1_7334
+.globl sym_1_7335
+sym_1_7335: la $2, sym_1_7335
+.globl sym_1_7336
+sym_1_7336: la $2, sym_1_7336
+.globl sym_1_7337
+sym_1_7337: la $2, sym_1_7337
+.globl sym_1_7338
+sym_1_7338: la $2, sym_1_7338
+.globl sym_1_7339
+sym_1_7339: la $2, sym_1_7339
+.globl sym_1_7340
+sym_1_7340: la $2, sym_1_7340
+.globl sym_1_7341
+sym_1_7341: la $2, sym_1_7341
+.globl sym_1_7342
+sym_1_7342: la $2, sym_1_7342
+.globl sym_1_7343
+sym_1_7343: la $2, sym_1_7343
+.globl sym_1_7344
+sym_1_7344: la $2, sym_1_7344
+.globl sym_1_7345
+sym_1_7345: la $2, sym_1_7345
+.globl sym_1_7346
+sym_1_7346: la $2, sym_1_7346
+.globl sym_1_7347
+sym_1_7347: la $2, sym_1_7347
+.globl sym_1_7348
+sym_1_7348: la $2, sym_1_7348
+.globl sym_1_7349
+sym_1_7349: la $2, sym_1_7349
+.globl sym_1_7350
+sym_1_7350: la $2, sym_1_7350
+.globl sym_1_7351
+sym_1_7351: la $2, sym_1_7351
+.globl sym_1_7352
+sym_1_7352: la $2, sym_1_7352
+.globl sym_1_7353
+sym_1_7353: la $2, sym_1_7353
+.globl sym_1_7354
+sym_1_7354: la $2, sym_1_7354
+.globl sym_1_7355
+sym_1_7355: la $2, sym_1_7355
+.globl sym_1_7356
+sym_1_7356: la $2, sym_1_7356
+.globl sym_1_7357
+sym_1_7357: la $2, sym_1_7357
+.globl sym_1_7358
+sym_1_7358: la $2, sym_1_7358
+.globl sym_1_7359
+sym_1_7359: la $2, sym_1_7359
+.globl sym_1_7360
+sym_1_7360: la $2, sym_1_7360
+.globl sym_1_7361
+sym_1_7361: la $2, sym_1_7361
+.globl sym_1_7362
+sym_1_7362: la $2, sym_1_7362
+.globl sym_1_7363
+sym_1_7363: la $2, sym_1_7363
+.globl sym_1_7364
+sym_1_7364: la $2, sym_1_7364
+.globl sym_1_7365
+sym_1_7365: la $2, sym_1_7365
+.globl sym_1_7366
+sym_1_7366: la $2, sym_1_7366
+.globl sym_1_7367
+sym_1_7367: la $2, sym_1_7367
+.globl sym_1_7368
+sym_1_7368: la $2, sym_1_7368
+.globl sym_1_7369
+sym_1_7369: la $2, sym_1_7369
+.globl sym_1_7370
+sym_1_7370: la $2, sym_1_7370
+.globl sym_1_7371
+sym_1_7371: la $2, sym_1_7371
+.globl sym_1_7372
+sym_1_7372: la $2, sym_1_7372
+.globl sym_1_7373
+sym_1_7373: la $2, sym_1_7373
+.globl sym_1_7374
+sym_1_7374: la $2, sym_1_7374
+.globl sym_1_7375
+sym_1_7375: la $2, sym_1_7375
+.globl sym_1_7376
+sym_1_7376: la $2, sym_1_7376
+.globl sym_1_7377
+sym_1_7377: la $2, sym_1_7377
+.globl sym_1_7378
+sym_1_7378: la $2, sym_1_7378
+.globl sym_1_7379
+sym_1_7379: la $2, sym_1_7379
+.globl sym_1_7380
+sym_1_7380: la $2, sym_1_7380
+.globl sym_1_7381
+sym_1_7381: la $2, sym_1_7381
+.globl sym_1_7382
+sym_1_7382: la $2, sym_1_7382
+.globl sym_1_7383
+sym_1_7383: la $2, sym_1_7383
+.globl sym_1_7384
+sym_1_7384: la $2, sym_1_7384
+.globl sym_1_7385
+sym_1_7385: la $2, sym_1_7385
+.globl sym_1_7386
+sym_1_7386: la $2, sym_1_7386
+.globl sym_1_7387
+sym_1_7387: la $2, sym_1_7387
+.globl sym_1_7388
+sym_1_7388: la $2, sym_1_7388
+.globl sym_1_7389
+sym_1_7389: la $2, sym_1_7389
+.globl sym_1_7390
+sym_1_7390: la $2, sym_1_7390
+.globl sym_1_7391
+sym_1_7391: la $2, sym_1_7391
+.globl sym_1_7392
+sym_1_7392: la $2, sym_1_7392
+.globl sym_1_7393
+sym_1_7393: la $2, sym_1_7393
+.globl sym_1_7394
+sym_1_7394: la $2, sym_1_7394
+.globl sym_1_7395
+sym_1_7395: la $2, sym_1_7395
+.globl sym_1_7396
+sym_1_7396: la $2, sym_1_7396
+.globl sym_1_7397
+sym_1_7397: la $2, sym_1_7397
+.globl sym_1_7398
+sym_1_7398: la $2, sym_1_7398
+.globl sym_1_7399
+sym_1_7399: la $2, sym_1_7399
+.globl sym_1_7400
+sym_1_7400: la $2, sym_1_7400
+.globl sym_1_7401
+sym_1_7401: la $2, sym_1_7401
+.globl sym_1_7402
+sym_1_7402: la $2, sym_1_7402
+.globl sym_1_7403
+sym_1_7403: la $2, sym_1_7403
+.globl sym_1_7404
+sym_1_7404: la $2, sym_1_7404
+.globl sym_1_7405
+sym_1_7405: la $2, sym_1_7405
+.globl sym_1_7406
+sym_1_7406: la $2, sym_1_7406
+.globl sym_1_7407
+sym_1_7407: la $2, sym_1_7407
+.globl sym_1_7408
+sym_1_7408: la $2, sym_1_7408
+.globl sym_1_7409
+sym_1_7409: la $2, sym_1_7409
+.globl sym_1_7410
+sym_1_7410: la $2, sym_1_7410
+.globl sym_1_7411
+sym_1_7411: la $2, sym_1_7411
+.globl sym_1_7412
+sym_1_7412: la $2, sym_1_7412
+.globl sym_1_7413
+sym_1_7413: la $2, sym_1_7413
+.globl sym_1_7414
+sym_1_7414: la $2, sym_1_7414
+.globl sym_1_7415
+sym_1_7415: la $2, sym_1_7415
+.globl sym_1_7416
+sym_1_7416: la $2, sym_1_7416
+.globl sym_1_7417
+sym_1_7417: la $2, sym_1_7417
+.globl sym_1_7418
+sym_1_7418: la $2, sym_1_7418
+.globl sym_1_7419
+sym_1_7419: la $2, sym_1_7419
+.globl sym_1_7420
+sym_1_7420: la $2, sym_1_7420
+.globl sym_1_7421
+sym_1_7421: la $2, sym_1_7421
+.globl sym_1_7422
+sym_1_7422: la $2, sym_1_7422
+.globl sym_1_7423
+sym_1_7423: la $2, sym_1_7423
+.globl sym_1_7424
+sym_1_7424: la $2, sym_1_7424
+.globl sym_1_7425
+sym_1_7425: la $2, sym_1_7425
+.globl sym_1_7426
+sym_1_7426: la $2, sym_1_7426
+.globl sym_1_7427
+sym_1_7427: la $2, sym_1_7427
+.globl sym_1_7428
+sym_1_7428: la $2, sym_1_7428
+.globl sym_1_7429
+sym_1_7429: la $2, sym_1_7429
+.globl sym_1_7430
+sym_1_7430: la $2, sym_1_7430
+.globl sym_1_7431
+sym_1_7431: la $2, sym_1_7431
+.globl sym_1_7432
+sym_1_7432: la $2, sym_1_7432
+.globl sym_1_7433
+sym_1_7433: la $2, sym_1_7433
+.globl sym_1_7434
+sym_1_7434: la $2, sym_1_7434
+.globl sym_1_7435
+sym_1_7435: la $2, sym_1_7435
+.globl sym_1_7436
+sym_1_7436: la $2, sym_1_7436
+.globl sym_1_7437
+sym_1_7437: la $2, sym_1_7437
+.globl sym_1_7438
+sym_1_7438: la $2, sym_1_7438
+.globl sym_1_7439
+sym_1_7439: la $2, sym_1_7439
+.globl sym_1_7440
+sym_1_7440: la $2, sym_1_7440
+.globl sym_1_7441
+sym_1_7441: la $2, sym_1_7441
+.globl sym_1_7442
+sym_1_7442: la $2, sym_1_7442
+.globl sym_1_7443
+sym_1_7443: la $2, sym_1_7443
+.globl sym_1_7444
+sym_1_7444: la $2, sym_1_7444
+.globl sym_1_7445
+sym_1_7445: la $2, sym_1_7445
+.globl sym_1_7446
+sym_1_7446: la $2, sym_1_7446
+.globl sym_1_7447
+sym_1_7447: la $2, sym_1_7447
+.globl sym_1_7448
+sym_1_7448: la $2, sym_1_7448
+.globl sym_1_7449
+sym_1_7449: la $2, sym_1_7449
+.globl sym_1_7450
+sym_1_7450: la $2, sym_1_7450
+.globl sym_1_7451
+sym_1_7451: la $2, sym_1_7451
+.globl sym_1_7452
+sym_1_7452: la $2, sym_1_7452
+.globl sym_1_7453
+sym_1_7453: la $2, sym_1_7453
+.globl sym_1_7454
+sym_1_7454: la $2, sym_1_7454
+.globl sym_1_7455
+sym_1_7455: la $2, sym_1_7455
+.globl sym_1_7456
+sym_1_7456: la $2, sym_1_7456
+.globl sym_1_7457
+sym_1_7457: la $2, sym_1_7457
+.globl sym_1_7458
+sym_1_7458: la $2, sym_1_7458
+.globl sym_1_7459
+sym_1_7459: la $2, sym_1_7459
+.globl sym_1_7460
+sym_1_7460: la $2, sym_1_7460
+.globl sym_1_7461
+sym_1_7461: la $2, sym_1_7461
+.globl sym_1_7462
+sym_1_7462: la $2, sym_1_7462
+.globl sym_1_7463
+sym_1_7463: la $2, sym_1_7463
+.globl sym_1_7464
+sym_1_7464: la $2, sym_1_7464
+.globl sym_1_7465
+sym_1_7465: la $2, sym_1_7465
+.globl sym_1_7466
+sym_1_7466: la $2, sym_1_7466
+.globl sym_1_7467
+sym_1_7467: la $2, sym_1_7467
+.globl sym_1_7468
+sym_1_7468: la $2, sym_1_7468
+.globl sym_1_7469
+sym_1_7469: la $2, sym_1_7469
+.globl sym_1_7470
+sym_1_7470: la $2, sym_1_7470
+.globl sym_1_7471
+sym_1_7471: la $2, sym_1_7471
+.globl sym_1_7472
+sym_1_7472: la $2, sym_1_7472
+.globl sym_1_7473
+sym_1_7473: la $2, sym_1_7473
+.globl sym_1_7474
+sym_1_7474: la $2, sym_1_7474
+.globl sym_1_7475
+sym_1_7475: la $2, sym_1_7475
+.globl sym_1_7476
+sym_1_7476: la $2, sym_1_7476
+.globl sym_1_7477
+sym_1_7477: la $2, sym_1_7477
+.globl sym_1_7478
+sym_1_7478: la $2, sym_1_7478
+.globl sym_1_7479
+sym_1_7479: la $2, sym_1_7479
+.globl sym_1_7480
+sym_1_7480: la $2, sym_1_7480
+.globl sym_1_7481
+sym_1_7481: la $2, sym_1_7481
+.globl sym_1_7482
+sym_1_7482: la $2, sym_1_7482
+.globl sym_1_7483
+sym_1_7483: la $2, sym_1_7483
+.globl sym_1_7484
+sym_1_7484: la $2, sym_1_7484
+.globl sym_1_7485
+sym_1_7485: la $2, sym_1_7485
+.globl sym_1_7486
+sym_1_7486: la $2, sym_1_7486
+.globl sym_1_7487
+sym_1_7487: la $2, sym_1_7487
+.globl sym_1_7488
+sym_1_7488: la $2, sym_1_7488
+.globl sym_1_7489
+sym_1_7489: la $2, sym_1_7489
+.globl sym_1_7490
+sym_1_7490: la $2, sym_1_7490
+.globl sym_1_7491
+sym_1_7491: la $2, sym_1_7491
+.globl sym_1_7492
+sym_1_7492: la $2, sym_1_7492
+.globl sym_1_7493
+sym_1_7493: la $2, sym_1_7493
+.globl sym_1_7494
+sym_1_7494: la $2, sym_1_7494
+.globl sym_1_7495
+sym_1_7495: la $2, sym_1_7495
+.globl sym_1_7496
+sym_1_7496: la $2, sym_1_7496
+.globl sym_1_7497
+sym_1_7497: la $2, sym_1_7497
+.globl sym_1_7498
+sym_1_7498: la $2, sym_1_7498
+.globl sym_1_7499
+sym_1_7499: la $2, sym_1_7499
+.globl sym_1_7500
+sym_1_7500: la $2, sym_1_7500
+.globl sym_1_7501
+sym_1_7501: la $2, sym_1_7501
+.globl sym_1_7502
+sym_1_7502: la $2, sym_1_7502
+.globl sym_1_7503
+sym_1_7503: la $2, sym_1_7503
+.globl sym_1_7504
+sym_1_7504: la $2, sym_1_7504
+.globl sym_1_7505
+sym_1_7505: la $2, sym_1_7505
+.globl sym_1_7506
+sym_1_7506: la $2, sym_1_7506
+.globl sym_1_7507
+sym_1_7507: la $2, sym_1_7507
+.globl sym_1_7508
+sym_1_7508: la $2, sym_1_7508
+.globl sym_1_7509
+sym_1_7509: la $2, sym_1_7509
+.globl sym_1_7510
+sym_1_7510: la $2, sym_1_7510
+.globl sym_1_7511
+sym_1_7511: la $2, sym_1_7511
+.globl sym_1_7512
+sym_1_7512: la $2, sym_1_7512
+.globl sym_1_7513
+sym_1_7513: la $2, sym_1_7513
+.globl sym_1_7514
+sym_1_7514: la $2, sym_1_7514
+.globl sym_1_7515
+sym_1_7515: la $2, sym_1_7515
+.globl sym_1_7516
+sym_1_7516: la $2, sym_1_7516
+.globl sym_1_7517
+sym_1_7517: la $2, sym_1_7517
+.globl sym_1_7518
+sym_1_7518: la $2, sym_1_7518
+.globl sym_1_7519
+sym_1_7519: la $2, sym_1_7519
+.globl sym_1_7520
+sym_1_7520: la $2, sym_1_7520
+.globl sym_1_7521
+sym_1_7521: la $2, sym_1_7521
+.globl sym_1_7522
+sym_1_7522: la $2, sym_1_7522
+.globl sym_1_7523
+sym_1_7523: la $2, sym_1_7523
+.globl sym_1_7524
+sym_1_7524: la $2, sym_1_7524
+.globl sym_1_7525
+sym_1_7525: la $2, sym_1_7525
+.globl sym_1_7526
+sym_1_7526: la $2, sym_1_7526
+.globl sym_1_7527
+sym_1_7527: la $2, sym_1_7527
+.globl sym_1_7528
+sym_1_7528: la $2, sym_1_7528
+.globl sym_1_7529
+sym_1_7529: la $2, sym_1_7529
+.globl sym_1_7530
+sym_1_7530: la $2, sym_1_7530
+.globl sym_1_7531
+sym_1_7531: la $2, sym_1_7531
+.globl sym_1_7532
+sym_1_7532: la $2, sym_1_7532
+.globl sym_1_7533
+sym_1_7533: la $2, sym_1_7533
+.globl sym_1_7534
+sym_1_7534: la $2, sym_1_7534
+.globl sym_1_7535
+sym_1_7535: la $2, sym_1_7535
+.globl sym_1_7536
+sym_1_7536: la $2, sym_1_7536
+.globl sym_1_7537
+sym_1_7537: la $2, sym_1_7537
+.globl sym_1_7538
+sym_1_7538: la $2, sym_1_7538
+.globl sym_1_7539
+sym_1_7539: la $2, sym_1_7539
+.globl sym_1_7540
+sym_1_7540: la $2, sym_1_7540
+.globl sym_1_7541
+sym_1_7541: la $2, sym_1_7541
+.globl sym_1_7542
+sym_1_7542: la $2, sym_1_7542
+.globl sym_1_7543
+sym_1_7543: la $2, sym_1_7543
+.globl sym_1_7544
+sym_1_7544: la $2, sym_1_7544
+.globl sym_1_7545
+sym_1_7545: la $2, sym_1_7545
+.globl sym_1_7546
+sym_1_7546: la $2, sym_1_7546
+.globl sym_1_7547
+sym_1_7547: la $2, sym_1_7547
+.globl sym_1_7548
+sym_1_7548: la $2, sym_1_7548
+.globl sym_1_7549
+sym_1_7549: la $2, sym_1_7549
+.globl sym_1_7550
+sym_1_7550: la $2, sym_1_7550
+.globl sym_1_7551
+sym_1_7551: la $2, sym_1_7551
+.globl sym_1_7552
+sym_1_7552: la $2, sym_1_7552
+.globl sym_1_7553
+sym_1_7553: la $2, sym_1_7553
+.globl sym_1_7554
+sym_1_7554: la $2, sym_1_7554
+.globl sym_1_7555
+sym_1_7555: la $2, sym_1_7555
+.globl sym_1_7556
+sym_1_7556: la $2, sym_1_7556
+.globl sym_1_7557
+sym_1_7557: la $2, sym_1_7557
+.globl sym_1_7558
+sym_1_7558: la $2, sym_1_7558
+.globl sym_1_7559
+sym_1_7559: la $2, sym_1_7559
+.globl sym_1_7560
+sym_1_7560: la $2, sym_1_7560
+.globl sym_1_7561
+sym_1_7561: la $2, sym_1_7561
+.globl sym_1_7562
+sym_1_7562: la $2, sym_1_7562
+.globl sym_1_7563
+sym_1_7563: la $2, sym_1_7563
+.globl sym_1_7564
+sym_1_7564: la $2, sym_1_7564
+.globl sym_1_7565
+sym_1_7565: la $2, sym_1_7565
+.globl sym_1_7566
+sym_1_7566: la $2, sym_1_7566
+.globl sym_1_7567
+sym_1_7567: la $2, sym_1_7567
+.globl sym_1_7568
+sym_1_7568: la $2, sym_1_7568
+.globl sym_1_7569
+sym_1_7569: la $2, sym_1_7569
+.globl sym_1_7570
+sym_1_7570: la $2, sym_1_7570
+.globl sym_1_7571
+sym_1_7571: la $2, sym_1_7571
+.globl sym_1_7572
+sym_1_7572: la $2, sym_1_7572
+.globl sym_1_7573
+sym_1_7573: la $2, sym_1_7573
+.globl sym_1_7574
+sym_1_7574: la $2, sym_1_7574
+.globl sym_1_7575
+sym_1_7575: la $2, sym_1_7575
+.globl sym_1_7576
+sym_1_7576: la $2, sym_1_7576
+.globl sym_1_7577
+sym_1_7577: la $2, sym_1_7577
+.globl sym_1_7578
+sym_1_7578: la $2, sym_1_7578
+.globl sym_1_7579
+sym_1_7579: la $2, sym_1_7579
+.globl sym_1_7580
+sym_1_7580: la $2, sym_1_7580
+.globl sym_1_7581
+sym_1_7581: la $2, sym_1_7581
+.globl sym_1_7582
+sym_1_7582: la $2, sym_1_7582
+.globl sym_1_7583
+sym_1_7583: la $2, sym_1_7583
+.globl sym_1_7584
+sym_1_7584: la $2, sym_1_7584
+.globl sym_1_7585
+sym_1_7585: la $2, sym_1_7585
+.globl sym_1_7586
+sym_1_7586: la $2, sym_1_7586
+.globl sym_1_7587
+sym_1_7587: la $2, sym_1_7587
+.globl sym_1_7588
+sym_1_7588: la $2, sym_1_7588
+.globl sym_1_7589
+sym_1_7589: la $2, sym_1_7589
+.globl sym_1_7590
+sym_1_7590: la $2, sym_1_7590
+.globl sym_1_7591
+sym_1_7591: la $2, sym_1_7591
+.globl sym_1_7592
+sym_1_7592: la $2, sym_1_7592
+.globl sym_1_7593
+sym_1_7593: la $2, sym_1_7593
+.globl sym_1_7594
+sym_1_7594: la $2, sym_1_7594
+.globl sym_1_7595
+sym_1_7595: la $2, sym_1_7595
+.globl sym_1_7596
+sym_1_7596: la $2, sym_1_7596
+.globl sym_1_7597
+sym_1_7597: la $2, sym_1_7597
+.globl sym_1_7598
+sym_1_7598: la $2, sym_1_7598
+.globl sym_1_7599
+sym_1_7599: la $2, sym_1_7599
+.globl sym_1_7600
+sym_1_7600: la $2, sym_1_7600
+.globl sym_1_7601
+sym_1_7601: la $2, sym_1_7601
+.globl sym_1_7602
+sym_1_7602: la $2, sym_1_7602
+.globl sym_1_7603
+sym_1_7603: la $2, sym_1_7603
+.globl sym_1_7604
+sym_1_7604: la $2, sym_1_7604
+.globl sym_1_7605
+sym_1_7605: la $2, sym_1_7605
+.globl sym_1_7606
+sym_1_7606: la $2, sym_1_7606
+.globl sym_1_7607
+sym_1_7607: la $2, sym_1_7607
+.globl sym_1_7608
+sym_1_7608: la $2, sym_1_7608
+.globl sym_1_7609
+sym_1_7609: la $2, sym_1_7609
+.globl sym_1_7610
+sym_1_7610: la $2, sym_1_7610
+.globl sym_1_7611
+sym_1_7611: la $2, sym_1_7611
+.globl sym_1_7612
+sym_1_7612: la $2, sym_1_7612
+.globl sym_1_7613
+sym_1_7613: la $2, sym_1_7613
+.globl sym_1_7614
+sym_1_7614: la $2, sym_1_7614
+.globl sym_1_7615
+sym_1_7615: la $2, sym_1_7615
+.globl sym_1_7616
+sym_1_7616: la $2, sym_1_7616
+.globl sym_1_7617
+sym_1_7617: la $2, sym_1_7617
+.globl sym_1_7618
+sym_1_7618: la $2, sym_1_7618
+.globl sym_1_7619
+sym_1_7619: la $2, sym_1_7619
+.globl sym_1_7620
+sym_1_7620: la $2, sym_1_7620
+.globl sym_1_7621
+sym_1_7621: la $2, sym_1_7621
+.globl sym_1_7622
+sym_1_7622: la $2, sym_1_7622
+.globl sym_1_7623
+sym_1_7623: la $2, sym_1_7623
+.globl sym_1_7624
+sym_1_7624: la $2, sym_1_7624
+.globl sym_1_7625
+sym_1_7625: la $2, sym_1_7625
+.globl sym_1_7626
+sym_1_7626: la $2, sym_1_7626
+.globl sym_1_7627
+sym_1_7627: la $2, sym_1_7627
+.globl sym_1_7628
+sym_1_7628: la $2, sym_1_7628
+.globl sym_1_7629
+sym_1_7629: la $2, sym_1_7629
+.globl sym_1_7630
+sym_1_7630: la $2, sym_1_7630
+.globl sym_1_7631
+sym_1_7631: la $2, sym_1_7631
+.globl sym_1_7632
+sym_1_7632: la $2, sym_1_7632
+.globl sym_1_7633
+sym_1_7633: la $2, sym_1_7633
+.globl sym_1_7634
+sym_1_7634: la $2, sym_1_7634
+.globl sym_1_7635
+sym_1_7635: la $2, sym_1_7635
+.globl sym_1_7636
+sym_1_7636: la $2, sym_1_7636
+.globl sym_1_7637
+sym_1_7637: la $2, sym_1_7637
+.globl sym_1_7638
+sym_1_7638: la $2, sym_1_7638
+.globl sym_1_7639
+sym_1_7639: la $2, sym_1_7639
+.globl sym_1_7640
+sym_1_7640: la $2, sym_1_7640
+.globl sym_1_7641
+sym_1_7641: la $2, sym_1_7641
+.globl sym_1_7642
+sym_1_7642: la $2, sym_1_7642
+.globl sym_1_7643
+sym_1_7643: la $2, sym_1_7643
+.globl sym_1_7644
+sym_1_7644: la $2, sym_1_7644
+.globl sym_1_7645
+sym_1_7645: la $2, sym_1_7645
+.globl sym_1_7646
+sym_1_7646: la $2, sym_1_7646
+.globl sym_1_7647
+sym_1_7647: la $2, sym_1_7647
+.globl sym_1_7648
+sym_1_7648: la $2, sym_1_7648
+.globl sym_1_7649
+sym_1_7649: la $2, sym_1_7649
+.globl sym_1_7650
+sym_1_7650: la $2, sym_1_7650
+.globl sym_1_7651
+sym_1_7651: la $2, sym_1_7651
+.globl sym_1_7652
+sym_1_7652: la $2, sym_1_7652
+.globl sym_1_7653
+sym_1_7653: la $2, sym_1_7653
+.globl sym_1_7654
+sym_1_7654: la $2, sym_1_7654
+.globl sym_1_7655
+sym_1_7655: la $2, sym_1_7655
+.globl sym_1_7656
+sym_1_7656: la $2, sym_1_7656
+.globl sym_1_7657
+sym_1_7657: la $2, sym_1_7657
+.globl sym_1_7658
+sym_1_7658: la $2, sym_1_7658
+.globl sym_1_7659
+sym_1_7659: la $2, sym_1_7659
+.globl sym_1_7660
+sym_1_7660: la $2, sym_1_7660
+.globl sym_1_7661
+sym_1_7661: la $2, sym_1_7661
+.globl sym_1_7662
+sym_1_7662: la $2, sym_1_7662
+.globl sym_1_7663
+sym_1_7663: la $2, sym_1_7663
+.globl sym_1_7664
+sym_1_7664: la $2, sym_1_7664
+.globl sym_1_7665
+sym_1_7665: la $2, sym_1_7665
+.globl sym_1_7666
+sym_1_7666: la $2, sym_1_7666
+.globl sym_1_7667
+sym_1_7667: la $2, sym_1_7667
+.globl sym_1_7668
+sym_1_7668: la $2, sym_1_7668
+.globl sym_1_7669
+sym_1_7669: la $2, sym_1_7669
+.globl sym_1_7670
+sym_1_7670: la $2, sym_1_7670
+.globl sym_1_7671
+sym_1_7671: la $2, sym_1_7671
+.globl sym_1_7672
+sym_1_7672: la $2, sym_1_7672
+.globl sym_1_7673
+sym_1_7673: la $2, sym_1_7673
+.globl sym_1_7674
+sym_1_7674: la $2, sym_1_7674
+.globl sym_1_7675
+sym_1_7675: la $2, sym_1_7675
+.globl sym_1_7676
+sym_1_7676: la $2, sym_1_7676
+.globl sym_1_7677
+sym_1_7677: la $2, sym_1_7677
+.globl sym_1_7678
+sym_1_7678: la $2, sym_1_7678
+.globl sym_1_7679
+sym_1_7679: la $2, sym_1_7679
+.globl sym_1_7680
+sym_1_7680: la $2, sym_1_7680
+.globl sym_1_7681
+sym_1_7681: la $2, sym_1_7681
+.globl sym_1_7682
+sym_1_7682: la $2, sym_1_7682
+.globl sym_1_7683
+sym_1_7683: la $2, sym_1_7683
+.globl sym_1_7684
+sym_1_7684: la $2, sym_1_7684
+.globl sym_1_7685
+sym_1_7685: la $2, sym_1_7685
+.globl sym_1_7686
+sym_1_7686: la $2, sym_1_7686
+.globl sym_1_7687
+sym_1_7687: la $2, sym_1_7687
+.globl sym_1_7688
+sym_1_7688: la $2, sym_1_7688
+.globl sym_1_7689
+sym_1_7689: la $2, sym_1_7689
+.globl sym_1_7690
+sym_1_7690: la $2, sym_1_7690
+.globl sym_1_7691
+sym_1_7691: la $2, sym_1_7691
+.globl sym_1_7692
+sym_1_7692: la $2, sym_1_7692
+.globl sym_1_7693
+sym_1_7693: la $2, sym_1_7693
+.globl sym_1_7694
+sym_1_7694: la $2, sym_1_7694
+.globl sym_1_7695
+sym_1_7695: la $2, sym_1_7695
+.globl sym_1_7696
+sym_1_7696: la $2, sym_1_7696
+.globl sym_1_7697
+sym_1_7697: la $2, sym_1_7697
+.globl sym_1_7698
+sym_1_7698: la $2, sym_1_7698
+.globl sym_1_7699
+sym_1_7699: la $2, sym_1_7699
+.globl sym_1_7700
+sym_1_7700: la $2, sym_1_7700
+.globl sym_1_7701
+sym_1_7701: la $2, sym_1_7701
+.globl sym_1_7702
+sym_1_7702: la $2, sym_1_7702
+.globl sym_1_7703
+sym_1_7703: la $2, sym_1_7703
+.globl sym_1_7704
+sym_1_7704: la $2, sym_1_7704
+.globl sym_1_7705
+sym_1_7705: la $2, sym_1_7705
+.globl sym_1_7706
+sym_1_7706: la $2, sym_1_7706
+.globl sym_1_7707
+sym_1_7707: la $2, sym_1_7707
+.globl sym_1_7708
+sym_1_7708: la $2, sym_1_7708
+.globl sym_1_7709
+sym_1_7709: la $2, sym_1_7709
+.globl sym_1_7710
+sym_1_7710: la $2, sym_1_7710
+.globl sym_1_7711
+sym_1_7711: la $2, sym_1_7711
+.globl sym_1_7712
+sym_1_7712: la $2, sym_1_7712
+.globl sym_1_7713
+sym_1_7713: la $2, sym_1_7713
+.globl sym_1_7714
+sym_1_7714: la $2, sym_1_7714
+.globl sym_1_7715
+sym_1_7715: la $2, sym_1_7715
+.globl sym_1_7716
+sym_1_7716: la $2, sym_1_7716
+.globl sym_1_7717
+sym_1_7717: la $2, sym_1_7717
+.globl sym_1_7718
+sym_1_7718: la $2, sym_1_7718
+.globl sym_1_7719
+sym_1_7719: la $2, sym_1_7719
+.globl sym_1_7720
+sym_1_7720: la $2, sym_1_7720
+.globl sym_1_7721
+sym_1_7721: la $2, sym_1_7721
+.globl sym_1_7722
+sym_1_7722: la $2, sym_1_7722
+.globl sym_1_7723
+sym_1_7723: la $2, sym_1_7723
+.globl sym_1_7724
+sym_1_7724: la $2, sym_1_7724
+.globl sym_1_7725
+sym_1_7725: la $2, sym_1_7725
+.globl sym_1_7726
+sym_1_7726: la $2, sym_1_7726
+.globl sym_1_7727
+sym_1_7727: la $2, sym_1_7727
+.globl sym_1_7728
+sym_1_7728: la $2, sym_1_7728
+.globl sym_1_7729
+sym_1_7729: la $2, sym_1_7729
+.globl sym_1_7730
+sym_1_7730: la $2, sym_1_7730
+.globl sym_1_7731
+sym_1_7731: la $2, sym_1_7731
+.globl sym_1_7732
+sym_1_7732: la $2, sym_1_7732
+.globl sym_1_7733
+sym_1_7733: la $2, sym_1_7733
+.globl sym_1_7734
+sym_1_7734: la $2, sym_1_7734
+.globl sym_1_7735
+sym_1_7735: la $2, sym_1_7735
+.globl sym_1_7736
+sym_1_7736: la $2, sym_1_7736
+.globl sym_1_7737
+sym_1_7737: la $2, sym_1_7737
+.globl sym_1_7738
+sym_1_7738: la $2, sym_1_7738
+.globl sym_1_7739
+sym_1_7739: la $2, sym_1_7739
+.globl sym_1_7740
+sym_1_7740: la $2, sym_1_7740
+.globl sym_1_7741
+sym_1_7741: la $2, sym_1_7741
+.globl sym_1_7742
+sym_1_7742: la $2, sym_1_7742
+.globl sym_1_7743
+sym_1_7743: la $2, sym_1_7743
+.globl sym_1_7744
+sym_1_7744: la $2, sym_1_7744
+.globl sym_1_7745
+sym_1_7745: la $2, sym_1_7745
+.globl sym_1_7746
+sym_1_7746: la $2, sym_1_7746
+.globl sym_1_7747
+sym_1_7747: la $2, sym_1_7747
+.globl sym_1_7748
+sym_1_7748: la $2, sym_1_7748
+.globl sym_1_7749
+sym_1_7749: la $2, sym_1_7749
+.globl sym_1_7750
+sym_1_7750: la $2, sym_1_7750
+.globl sym_1_7751
+sym_1_7751: la $2, sym_1_7751
+.globl sym_1_7752
+sym_1_7752: la $2, sym_1_7752
+.globl sym_1_7753
+sym_1_7753: la $2, sym_1_7753
+.globl sym_1_7754
+sym_1_7754: la $2, sym_1_7754
+.globl sym_1_7755
+sym_1_7755: la $2, sym_1_7755
+.globl sym_1_7756
+sym_1_7756: la $2, sym_1_7756
+.globl sym_1_7757
+sym_1_7757: la $2, sym_1_7757
+.globl sym_1_7758
+sym_1_7758: la $2, sym_1_7758
+.globl sym_1_7759
+sym_1_7759: la $2, sym_1_7759
+.globl sym_1_7760
+sym_1_7760: la $2, sym_1_7760
+.globl sym_1_7761
+sym_1_7761: la $2, sym_1_7761
+.globl sym_1_7762
+sym_1_7762: la $2, sym_1_7762
+.globl sym_1_7763
+sym_1_7763: la $2, sym_1_7763
+.globl sym_1_7764
+sym_1_7764: la $2, sym_1_7764
+.globl sym_1_7765
+sym_1_7765: la $2, sym_1_7765
+.globl sym_1_7766
+sym_1_7766: la $2, sym_1_7766
+.globl sym_1_7767
+sym_1_7767: la $2, sym_1_7767
+.globl sym_1_7768
+sym_1_7768: la $2, sym_1_7768
+.globl sym_1_7769
+sym_1_7769: la $2, sym_1_7769
+.globl sym_1_7770
+sym_1_7770: la $2, sym_1_7770
+.globl sym_1_7771
+sym_1_7771: la $2, sym_1_7771
+.globl sym_1_7772
+sym_1_7772: la $2, sym_1_7772
+.globl sym_1_7773
+sym_1_7773: la $2, sym_1_7773
+.globl sym_1_7774
+sym_1_7774: la $2, sym_1_7774
+.globl sym_1_7775
+sym_1_7775: la $2, sym_1_7775
+.globl sym_1_7776
+sym_1_7776: la $2, sym_1_7776
+.globl sym_1_7777
+sym_1_7777: la $2, sym_1_7777
+.globl sym_1_7778
+sym_1_7778: la $2, sym_1_7778
+.globl sym_1_7779
+sym_1_7779: la $2, sym_1_7779
+.globl sym_1_7780
+sym_1_7780: la $2, sym_1_7780
+.globl sym_1_7781
+sym_1_7781: la $2, sym_1_7781
+.globl sym_1_7782
+sym_1_7782: la $2, sym_1_7782
+.globl sym_1_7783
+sym_1_7783: la $2, sym_1_7783
+.globl sym_1_7784
+sym_1_7784: la $2, sym_1_7784
+.globl sym_1_7785
+sym_1_7785: la $2, sym_1_7785
+.globl sym_1_7786
+sym_1_7786: la $2, sym_1_7786
+.globl sym_1_7787
+sym_1_7787: la $2, sym_1_7787
+.globl sym_1_7788
+sym_1_7788: la $2, sym_1_7788
+.globl sym_1_7789
+sym_1_7789: la $2, sym_1_7789
+.globl sym_1_7790
+sym_1_7790: la $2, sym_1_7790
+.globl sym_1_7791
+sym_1_7791: la $2, sym_1_7791
+.globl sym_1_7792
+sym_1_7792: la $2, sym_1_7792
+.globl sym_1_7793
+sym_1_7793: la $2, sym_1_7793
+.globl sym_1_7794
+sym_1_7794: la $2, sym_1_7794
+.globl sym_1_7795
+sym_1_7795: la $2, sym_1_7795
+.globl sym_1_7796
+sym_1_7796: la $2, sym_1_7796
+.globl sym_1_7797
+sym_1_7797: la $2, sym_1_7797
+.globl sym_1_7798
+sym_1_7798: la $2, sym_1_7798
+.globl sym_1_7799
+sym_1_7799: la $2, sym_1_7799
+.globl sym_1_7800
+sym_1_7800: la $2, sym_1_7800
+.globl sym_1_7801
+sym_1_7801: la $2, sym_1_7801
+.globl sym_1_7802
+sym_1_7802: la $2, sym_1_7802
+.globl sym_1_7803
+sym_1_7803: la $2, sym_1_7803
+.globl sym_1_7804
+sym_1_7804: la $2, sym_1_7804
+.globl sym_1_7805
+sym_1_7805: la $2, sym_1_7805
+.globl sym_1_7806
+sym_1_7806: la $2, sym_1_7806
+.globl sym_1_7807
+sym_1_7807: la $2, sym_1_7807
+.globl sym_1_7808
+sym_1_7808: la $2, sym_1_7808
+.globl sym_1_7809
+sym_1_7809: la $2, sym_1_7809
+.globl sym_1_7810
+sym_1_7810: la $2, sym_1_7810
+.globl sym_1_7811
+sym_1_7811: la $2, sym_1_7811
+.globl sym_1_7812
+sym_1_7812: la $2, sym_1_7812
+.globl sym_1_7813
+sym_1_7813: la $2, sym_1_7813
+.globl sym_1_7814
+sym_1_7814: la $2, sym_1_7814
+.globl sym_1_7815
+sym_1_7815: la $2, sym_1_7815
+.globl sym_1_7816
+sym_1_7816: la $2, sym_1_7816
+.globl sym_1_7817
+sym_1_7817: la $2, sym_1_7817
+.globl sym_1_7818
+sym_1_7818: la $2, sym_1_7818
+.globl sym_1_7819
+sym_1_7819: la $2, sym_1_7819
+.globl sym_1_7820
+sym_1_7820: la $2, sym_1_7820
+.globl sym_1_7821
+sym_1_7821: la $2, sym_1_7821
+.globl sym_1_7822
+sym_1_7822: la $2, sym_1_7822
+.globl sym_1_7823
+sym_1_7823: la $2, sym_1_7823
+.globl sym_1_7824
+sym_1_7824: la $2, sym_1_7824
+.globl sym_1_7825
+sym_1_7825: la $2, sym_1_7825
+.globl sym_1_7826
+sym_1_7826: la $2, sym_1_7826
+.globl sym_1_7827
+sym_1_7827: la $2, sym_1_7827
+.globl sym_1_7828
+sym_1_7828: la $2, sym_1_7828
+.globl sym_1_7829
+sym_1_7829: la $2, sym_1_7829
+.globl sym_1_7830
+sym_1_7830: la $2, sym_1_7830
+.globl sym_1_7831
+sym_1_7831: la $2, sym_1_7831
+.globl sym_1_7832
+sym_1_7832: la $2, sym_1_7832
+.globl sym_1_7833
+sym_1_7833: la $2, sym_1_7833
+.globl sym_1_7834
+sym_1_7834: la $2, sym_1_7834
+.globl sym_1_7835
+sym_1_7835: la $2, sym_1_7835
+.globl sym_1_7836
+sym_1_7836: la $2, sym_1_7836
+.globl sym_1_7837
+sym_1_7837: la $2, sym_1_7837
+.globl sym_1_7838
+sym_1_7838: la $2, sym_1_7838
+.globl sym_1_7839
+sym_1_7839: la $2, sym_1_7839
+.globl sym_1_7840
+sym_1_7840: la $2, sym_1_7840
+.globl sym_1_7841
+sym_1_7841: la $2, sym_1_7841
+.globl sym_1_7842
+sym_1_7842: la $2, sym_1_7842
+.globl sym_1_7843
+sym_1_7843: la $2, sym_1_7843
+.globl sym_1_7844
+sym_1_7844: la $2, sym_1_7844
+.globl sym_1_7845
+sym_1_7845: la $2, sym_1_7845
+.globl sym_1_7846
+sym_1_7846: la $2, sym_1_7846
+.globl sym_1_7847
+sym_1_7847: la $2, sym_1_7847
+.globl sym_1_7848
+sym_1_7848: la $2, sym_1_7848
+.globl sym_1_7849
+sym_1_7849: la $2, sym_1_7849
+.globl sym_1_7850
+sym_1_7850: la $2, sym_1_7850
+.globl sym_1_7851
+sym_1_7851: la $2, sym_1_7851
+.globl sym_1_7852
+sym_1_7852: la $2, sym_1_7852
+.globl sym_1_7853
+sym_1_7853: la $2, sym_1_7853
+.globl sym_1_7854
+sym_1_7854: la $2, sym_1_7854
+.globl sym_1_7855
+sym_1_7855: la $2, sym_1_7855
+.globl sym_1_7856
+sym_1_7856: la $2, sym_1_7856
+.globl sym_1_7857
+sym_1_7857: la $2, sym_1_7857
+.globl sym_1_7858
+sym_1_7858: la $2, sym_1_7858
+.globl sym_1_7859
+sym_1_7859: la $2, sym_1_7859
+.globl sym_1_7860
+sym_1_7860: la $2, sym_1_7860
+.globl sym_1_7861
+sym_1_7861: la $2, sym_1_7861
+.globl sym_1_7862
+sym_1_7862: la $2, sym_1_7862
+.globl sym_1_7863
+sym_1_7863: la $2, sym_1_7863
+.globl sym_1_7864
+sym_1_7864: la $2, sym_1_7864
+.globl sym_1_7865
+sym_1_7865: la $2, sym_1_7865
+.globl sym_1_7866
+sym_1_7866: la $2, sym_1_7866
+.globl sym_1_7867
+sym_1_7867: la $2, sym_1_7867
+.globl sym_1_7868
+sym_1_7868: la $2, sym_1_7868
+.globl sym_1_7869
+sym_1_7869: la $2, sym_1_7869
+.globl sym_1_7870
+sym_1_7870: la $2, sym_1_7870
+.globl sym_1_7871
+sym_1_7871: la $2, sym_1_7871
+.globl sym_1_7872
+sym_1_7872: la $2, sym_1_7872
+.globl sym_1_7873
+sym_1_7873: la $2, sym_1_7873
+.globl sym_1_7874
+sym_1_7874: la $2, sym_1_7874
+.globl sym_1_7875
+sym_1_7875: la $2, sym_1_7875
+.globl sym_1_7876
+sym_1_7876: la $2, sym_1_7876
+.globl sym_1_7877
+sym_1_7877: la $2, sym_1_7877
+.globl sym_1_7878
+sym_1_7878: la $2, sym_1_7878
+.globl sym_1_7879
+sym_1_7879: la $2, sym_1_7879
+.globl sym_1_7880
+sym_1_7880: la $2, sym_1_7880
+.globl sym_1_7881
+sym_1_7881: la $2, sym_1_7881
+.globl sym_1_7882
+sym_1_7882: la $2, sym_1_7882
+.globl sym_1_7883
+sym_1_7883: la $2, sym_1_7883
+.globl sym_1_7884
+sym_1_7884: la $2, sym_1_7884
+.globl sym_1_7885
+sym_1_7885: la $2, sym_1_7885
+.globl sym_1_7886
+sym_1_7886: la $2, sym_1_7886
+.globl sym_1_7887
+sym_1_7887: la $2, sym_1_7887
+.globl sym_1_7888
+sym_1_7888: la $2, sym_1_7888
+.globl sym_1_7889
+sym_1_7889: la $2, sym_1_7889
+.globl sym_1_7890
+sym_1_7890: la $2, sym_1_7890
+.globl sym_1_7891
+sym_1_7891: la $2, sym_1_7891
+.globl sym_1_7892
+sym_1_7892: la $2, sym_1_7892
+.globl sym_1_7893
+sym_1_7893: la $2, sym_1_7893
+.globl sym_1_7894
+sym_1_7894: la $2, sym_1_7894
+.globl sym_1_7895
+sym_1_7895: la $2, sym_1_7895
+.globl sym_1_7896
+sym_1_7896: la $2, sym_1_7896
+.globl sym_1_7897
+sym_1_7897: la $2, sym_1_7897
+.globl sym_1_7898
+sym_1_7898: la $2, sym_1_7898
+.globl sym_1_7899
+sym_1_7899: la $2, sym_1_7899
+.globl sym_1_7900
+sym_1_7900: la $2, sym_1_7900
+.globl sym_1_7901
+sym_1_7901: la $2, sym_1_7901
+.globl sym_1_7902
+sym_1_7902: la $2, sym_1_7902
+.globl sym_1_7903
+sym_1_7903: la $2, sym_1_7903
+.globl sym_1_7904
+sym_1_7904: la $2, sym_1_7904
+.globl sym_1_7905
+sym_1_7905: la $2, sym_1_7905
+.globl sym_1_7906
+sym_1_7906: la $2, sym_1_7906
+.globl sym_1_7907
+sym_1_7907: la $2, sym_1_7907
+.globl sym_1_7908
+sym_1_7908: la $2, sym_1_7908
+.globl sym_1_7909
+sym_1_7909: la $2, sym_1_7909
+.globl sym_1_7910
+sym_1_7910: la $2, sym_1_7910
+.globl sym_1_7911
+sym_1_7911: la $2, sym_1_7911
+.globl sym_1_7912
+sym_1_7912: la $2, sym_1_7912
+.globl sym_1_7913
+sym_1_7913: la $2, sym_1_7913
+.globl sym_1_7914
+sym_1_7914: la $2, sym_1_7914
+.globl sym_1_7915
+sym_1_7915: la $2, sym_1_7915
+.globl sym_1_7916
+sym_1_7916: la $2, sym_1_7916
+.globl sym_1_7917
+sym_1_7917: la $2, sym_1_7917
+.globl sym_1_7918
+sym_1_7918: la $2, sym_1_7918
+.globl sym_1_7919
+sym_1_7919: la $2, sym_1_7919
+.globl sym_1_7920
+sym_1_7920: la $2, sym_1_7920
+.globl sym_1_7921
+sym_1_7921: la $2, sym_1_7921
+.globl sym_1_7922
+sym_1_7922: la $2, sym_1_7922
+.globl sym_1_7923
+sym_1_7923: la $2, sym_1_7923
+.globl sym_1_7924
+sym_1_7924: la $2, sym_1_7924
+.globl sym_1_7925
+sym_1_7925: la $2, sym_1_7925
+.globl sym_1_7926
+sym_1_7926: la $2, sym_1_7926
+.globl sym_1_7927
+sym_1_7927: la $2, sym_1_7927
+.globl sym_1_7928
+sym_1_7928: la $2, sym_1_7928
+.globl sym_1_7929
+sym_1_7929: la $2, sym_1_7929
+.globl sym_1_7930
+sym_1_7930: la $2, sym_1_7930
+.globl sym_1_7931
+sym_1_7931: la $2, sym_1_7931
+.globl sym_1_7932
+sym_1_7932: la $2, sym_1_7932
+.globl sym_1_7933
+sym_1_7933: la $2, sym_1_7933
+.globl sym_1_7934
+sym_1_7934: la $2, sym_1_7934
+.globl sym_1_7935
+sym_1_7935: la $2, sym_1_7935
+.globl sym_1_7936
+sym_1_7936: la $2, sym_1_7936
+.globl sym_1_7937
+sym_1_7937: la $2, sym_1_7937
+.globl sym_1_7938
+sym_1_7938: la $2, sym_1_7938
+.globl sym_1_7939
+sym_1_7939: la $2, sym_1_7939
+.globl sym_1_7940
+sym_1_7940: la $2, sym_1_7940
+.globl sym_1_7941
+sym_1_7941: la $2, sym_1_7941
+.globl sym_1_7942
+sym_1_7942: la $2, sym_1_7942
+.globl sym_1_7943
+sym_1_7943: la $2, sym_1_7943
+.globl sym_1_7944
+sym_1_7944: la $2, sym_1_7944
+.globl sym_1_7945
+sym_1_7945: la $2, sym_1_7945
+.globl sym_1_7946
+sym_1_7946: la $2, sym_1_7946
+.globl sym_1_7947
+sym_1_7947: la $2, sym_1_7947
+.globl sym_1_7948
+sym_1_7948: la $2, sym_1_7948
+.globl sym_1_7949
+sym_1_7949: la $2, sym_1_7949
+.globl sym_1_7950
+sym_1_7950: la $2, sym_1_7950
+.globl sym_1_7951
+sym_1_7951: la $2, sym_1_7951
+.globl sym_1_7952
+sym_1_7952: la $2, sym_1_7952
+.globl sym_1_7953
+sym_1_7953: la $2, sym_1_7953
+.globl sym_1_7954
+sym_1_7954: la $2, sym_1_7954
+.globl sym_1_7955
+sym_1_7955: la $2, sym_1_7955
+.globl sym_1_7956
+sym_1_7956: la $2, sym_1_7956
+.globl sym_1_7957
+sym_1_7957: la $2, sym_1_7957
+.globl sym_1_7958
+sym_1_7958: la $2, sym_1_7958
+.globl sym_1_7959
+sym_1_7959: la $2, sym_1_7959
+.globl sym_1_7960
+sym_1_7960: la $2, sym_1_7960
+.globl sym_1_7961
+sym_1_7961: la $2, sym_1_7961
+.globl sym_1_7962
+sym_1_7962: la $2, sym_1_7962
+.globl sym_1_7963
+sym_1_7963: la $2, sym_1_7963
+.globl sym_1_7964
+sym_1_7964: la $2, sym_1_7964
+.globl sym_1_7965
+sym_1_7965: la $2, sym_1_7965
+.globl sym_1_7966
+sym_1_7966: la $2, sym_1_7966
+.globl sym_1_7967
+sym_1_7967: la $2, sym_1_7967
+.globl sym_1_7968
+sym_1_7968: la $2, sym_1_7968
+.globl sym_1_7969
+sym_1_7969: la $2, sym_1_7969
+.globl sym_1_7970
+sym_1_7970: la $2, sym_1_7970
+.globl sym_1_7971
+sym_1_7971: la $2, sym_1_7971
+.globl sym_1_7972
+sym_1_7972: la $2, sym_1_7972
+.globl sym_1_7973
+sym_1_7973: la $2, sym_1_7973
+.globl sym_1_7974
+sym_1_7974: la $2, sym_1_7974
+.globl sym_1_7975
+sym_1_7975: la $2, sym_1_7975
+.globl sym_1_7976
+sym_1_7976: la $2, sym_1_7976
+.globl sym_1_7977
+sym_1_7977: la $2, sym_1_7977
+.globl sym_1_7978
+sym_1_7978: la $2, sym_1_7978
+.globl sym_1_7979
+sym_1_7979: la $2, sym_1_7979
+.globl sym_1_7980
+sym_1_7980: la $2, sym_1_7980
+.globl sym_1_7981
+sym_1_7981: la $2, sym_1_7981
+.globl sym_1_7982
+sym_1_7982: la $2, sym_1_7982
+.globl sym_1_7983
+sym_1_7983: la $2, sym_1_7983
+.globl sym_1_7984
+sym_1_7984: la $2, sym_1_7984
+.globl sym_1_7985
+sym_1_7985: la $2, sym_1_7985
+.globl sym_1_7986
+sym_1_7986: la $2, sym_1_7986
+.globl sym_1_7987
+sym_1_7987: la $2, sym_1_7987
+.globl sym_1_7988
+sym_1_7988: la $2, sym_1_7988
+.globl sym_1_7989
+sym_1_7989: la $2, sym_1_7989
+.globl sym_1_7990
+sym_1_7990: la $2, sym_1_7990
+.globl sym_1_7991
+sym_1_7991: la $2, sym_1_7991
+.globl sym_1_7992
+sym_1_7992: la $2, sym_1_7992
+.globl sym_1_7993
+sym_1_7993: la $2, sym_1_7993
+.globl sym_1_7994
+sym_1_7994: la $2, sym_1_7994
+.globl sym_1_7995
+sym_1_7995: la $2, sym_1_7995
+.globl sym_1_7996
+sym_1_7996: la $2, sym_1_7996
+.globl sym_1_7997
+sym_1_7997: la $2, sym_1_7997
+.globl sym_1_7998
+sym_1_7998: la $2, sym_1_7998
+.globl sym_1_7999
+sym_1_7999: la $2, sym_1_7999
+.globl sym_1_8000
+sym_1_8000: la $2, sym_1_8000
+.globl sym_1_8001
+sym_1_8001: la $2, sym_1_8001
+.globl sym_1_8002
+sym_1_8002: la $2, sym_1_8002
+.globl sym_1_8003
+sym_1_8003: la $2, sym_1_8003
+.globl sym_1_8004
+sym_1_8004: la $2, sym_1_8004
+.globl sym_1_8005
+sym_1_8005: la $2, sym_1_8005
+.globl sym_1_8006
+sym_1_8006: la $2, sym_1_8006
+.globl sym_1_8007
+sym_1_8007: la $2, sym_1_8007
+.globl sym_1_8008
+sym_1_8008: la $2, sym_1_8008
+.globl sym_1_8009
+sym_1_8009: la $2, sym_1_8009
+.globl sym_1_8010
+sym_1_8010: la $2, sym_1_8010
+.globl sym_1_8011
+sym_1_8011: la $2, sym_1_8011
+.globl sym_1_8012
+sym_1_8012: la $2, sym_1_8012
+.globl sym_1_8013
+sym_1_8013: la $2, sym_1_8013
+.globl sym_1_8014
+sym_1_8014: la $2, sym_1_8014
+.globl sym_1_8015
+sym_1_8015: la $2, sym_1_8015
+.globl sym_1_8016
+sym_1_8016: la $2, sym_1_8016
+.globl sym_1_8017
+sym_1_8017: la $2, sym_1_8017
+.globl sym_1_8018
+sym_1_8018: la $2, sym_1_8018
+.globl sym_1_8019
+sym_1_8019: la $2, sym_1_8019
+.globl sym_1_8020
+sym_1_8020: la $2, sym_1_8020
+.globl sym_1_8021
+sym_1_8021: la $2, sym_1_8021
+.globl sym_1_8022
+sym_1_8022: la $2, sym_1_8022
+.globl sym_1_8023
+sym_1_8023: la $2, sym_1_8023
+.globl sym_1_8024
+sym_1_8024: la $2, sym_1_8024
+.globl sym_1_8025
+sym_1_8025: la $2, sym_1_8025
+.globl sym_1_8026
+sym_1_8026: la $2, sym_1_8026
+.globl sym_1_8027
+sym_1_8027: la $2, sym_1_8027
+.globl sym_1_8028
+sym_1_8028: la $2, sym_1_8028
+.globl sym_1_8029
+sym_1_8029: la $2, sym_1_8029
+.globl sym_1_8030
+sym_1_8030: la $2, sym_1_8030
+.globl sym_1_8031
+sym_1_8031: la $2, sym_1_8031
+.globl sym_1_8032
+sym_1_8032: la $2, sym_1_8032
+.globl sym_1_8033
+sym_1_8033: la $2, sym_1_8033
+.globl sym_1_8034
+sym_1_8034: la $2, sym_1_8034
+.globl sym_1_8035
+sym_1_8035: la $2, sym_1_8035
+.globl sym_1_8036
+sym_1_8036: la $2, sym_1_8036
+.globl sym_1_8037
+sym_1_8037: la $2, sym_1_8037
+.globl sym_1_8038
+sym_1_8038: la $2, sym_1_8038
+.globl sym_1_8039
+sym_1_8039: la $2, sym_1_8039
+.globl sym_1_8040
+sym_1_8040: la $2, sym_1_8040
+.globl sym_1_8041
+sym_1_8041: la $2, sym_1_8041
+.globl sym_1_8042
+sym_1_8042: la $2, sym_1_8042
+.globl sym_1_8043
+sym_1_8043: la $2, sym_1_8043
+.globl sym_1_8044
+sym_1_8044: la $2, sym_1_8044
+.globl sym_1_8045
+sym_1_8045: la $2, sym_1_8045
+.globl sym_1_8046
+sym_1_8046: la $2, sym_1_8046
+.globl sym_1_8047
+sym_1_8047: la $2, sym_1_8047
+.globl sym_1_8048
+sym_1_8048: la $2, sym_1_8048
+.globl sym_1_8049
+sym_1_8049: la $2, sym_1_8049
+.globl sym_1_8050
+sym_1_8050: la $2, sym_1_8050
+.globl sym_1_8051
+sym_1_8051: la $2, sym_1_8051
+.globl sym_1_8052
+sym_1_8052: la $2, sym_1_8052
+.globl sym_1_8053
+sym_1_8053: la $2, sym_1_8053
+.globl sym_1_8054
+sym_1_8054: la $2, sym_1_8054
+.globl sym_1_8055
+sym_1_8055: la $2, sym_1_8055
+.globl sym_1_8056
+sym_1_8056: la $2, sym_1_8056
+.globl sym_1_8057
+sym_1_8057: la $2, sym_1_8057
+.globl sym_1_8058
+sym_1_8058: la $2, sym_1_8058
+.globl sym_1_8059
+sym_1_8059: la $2, sym_1_8059
+.globl sym_1_8060
+sym_1_8060: la $2, sym_1_8060
+.globl sym_1_8061
+sym_1_8061: la $2, sym_1_8061
+.globl sym_1_8062
+sym_1_8062: la $2, sym_1_8062
+.globl sym_1_8063
+sym_1_8063: la $2, sym_1_8063
+.globl sym_1_8064
+sym_1_8064: la $2, sym_1_8064
+.globl sym_1_8065
+sym_1_8065: la $2, sym_1_8065
+.globl sym_1_8066
+sym_1_8066: la $2, sym_1_8066
+.globl sym_1_8067
+sym_1_8067: la $2, sym_1_8067
+.globl sym_1_8068
+sym_1_8068: la $2, sym_1_8068
+.globl sym_1_8069
+sym_1_8069: la $2, sym_1_8069
+.globl sym_1_8070
+sym_1_8070: la $2, sym_1_8070
+.globl sym_1_8071
+sym_1_8071: la $2, sym_1_8071
+.globl sym_1_8072
+sym_1_8072: la $2, sym_1_8072
+.globl sym_1_8073
+sym_1_8073: la $2, sym_1_8073
+.globl sym_1_8074
+sym_1_8074: la $2, sym_1_8074
+.globl sym_1_8075
+sym_1_8075: la $2, sym_1_8075
+.globl sym_1_8076
+sym_1_8076: la $2, sym_1_8076
+.globl sym_1_8077
+sym_1_8077: la $2, sym_1_8077
+.globl sym_1_8078
+sym_1_8078: la $2, sym_1_8078
+.globl sym_1_8079
+sym_1_8079: la $2, sym_1_8079
+.globl sym_1_8080
+sym_1_8080: la $2, sym_1_8080
+.globl sym_1_8081
+sym_1_8081: la $2, sym_1_8081
+.globl sym_1_8082
+sym_1_8082: la $2, sym_1_8082
+.globl sym_1_8083
+sym_1_8083: la $2, sym_1_8083
+.globl sym_1_8084
+sym_1_8084: la $2, sym_1_8084
+.globl sym_1_8085
+sym_1_8085: la $2, sym_1_8085
+.globl sym_1_8086
+sym_1_8086: la $2, sym_1_8086
+.globl sym_1_8087
+sym_1_8087: la $2, sym_1_8087
+.globl sym_1_8088
+sym_1_8088: la $2, sym_1_8088
+.globl sym_1_8089
+sym_1_8089: la $2, sym_1_8089
+.globl sym_1_8090
+sym_1_8090: la $2, sym_1_8090
+.globl sym_1_8091
+sym_1_8091: la $2, sym_1_8091
+.globl sym_1_8092
+sym_1_8092: la $2, sym_1_8092
+.globl sym_1_8093
+sym_1_8093: la $2, sym_1_8093
+.globl sym_1_8094
+sym_1_8094: la $2, sym_1_8094
+.globl sym_1_8095
+sym_1_8095: la $2, sym_1_8095
+.globl sym_1_8096
+sym_1_8096: la $2, sym_1_8096
+.globl sym_1_8097
+sym_1_8097: la $2, sym_1_8097
+.globl sym_1_8098
+sym_1_8098: la $2, sym_1_8098
+.globl sym_1_8099
+sym_1_8099: la $2, sym_1_8099
+.globl sym_1_8100
+sym_1_8100: la $2, sym_1_8100
+.globl sym_1_8101
+sym_1_8101: la $2, sym_1_8101
+.globl sym_1_8102
+sym_1_8102: la $2, sym_1_8102
+.globl sym_1_8103
+sym_1_8103: la $2, sym_1_8103
+.globl sym_1_8104
+sym_1_8104: la $2, sym_1_8104
+.globl sym_1_8105
+sym_1_8105: la $2, sym_1_8105
+.globl sym_1_8106
+sym_1_8106: la $2, sym_1_8106
+.globl sym_1_8107
+sym_1_8107: la $2, sym_1_8107
+.globl sym_1_8108
+sym_1_8108: la $2, sym_1_8108
+.globl sym_1_8109
+sym_1_8109: la $2, sym_1_8109
+.globl sym_1_8110
+sym_1_8110: la $2, sym_1_8110
+.globl sym_1_8111
+sym_1_8111: la $2, sym_1_8111
+.globl sym_1_8112
+sym_1_8112: la $2, sym_1_8112
+.globl sym_1_8113
+sym_1_8113: la $2, sym_1_8113
+.globl sym_1_8114
+sym_1_8114: la $2, sym_1_8114
+.globl sym_1_8115
+sym_1_8115: la $2, sym_1_8115
+.globl sym_1_8116
+sym_1_8116: la $2, sym_1_8116
+.globl sym_1_8117
+sym_1_8117: la $2, sym_1_8117
+.globl sym_1_8118
+sym_1_8118: la $2, sym_1_8118
+.globl sym_1_8119
+sym_1_8119: la $2, sym_1_8119
+.globl sym_1_8120
+sym_1_8120: la $2, sym_1_8120
+.globl sym_1_8121
+sym_1_8121: la $2, sym_1_8121
+.globl sym_1_8122
+sym_1_8122: la $2, sym_1_8122
+.globl sym_1_8123
+sym_1_8123: la $2, sym_1_8123
+.globl sym_1_8124
+sym_1_8124: la $2, sym_1_8124
+.globl sym_1_8125
+sym_1_8125: la $2, sym_1_8125
+.globl sym_1_8126
+sym_1_8126: la $2, sym_1_8126
+.globl sym_1_8127
+sym_1_8127: la $2, sym_1_8127
+.globl sym_1_8128
+sym_1_8128: la $2, sym_1_8128
+.globl sym_1_8129
+sym_1_8129: la $2, sym_1_8129
+.globl sym_1_8130
+sym_1_8130: la $2, sym_1_8130
+.globl sym_1_8131
+sym_1_8131: la $2, sym_1_8131
+.globl sym_1_8132
+sym_1_8132: la $2, sym_1_8132
+.globl sym_1_8133
+sym_1_8133: la $2, sym_1_8133
+.globl sym_1_8134
+sym_1_8134: la $2, sym_1_8134
+.globl sym_1_8135
+sym_1_8135: la $2, sym_1_8135
+.globl sym_1_8136
+sym_1_8136: la $2, sym_1_8136
+.globl sym_1_8137
+sym_1_8137: la $2, sym_1_8137
+.globl sym_1_8138
+sym_1_8138: la $2, sym_1_8138
+.globl sym_1_8139
+sym_1_8139: la $2, sym_1_8139
+.globl sym_1_8140
+sym_1_8140: la $2, sym_1_8140
+.globl sym_1_8141
+sym_1_8141: la $2, sym_1_8141
+.globl sym_1_8142
+sym_1_8142: la $2, sym_1_8142
+.globl sym_1_8143
+sym_1_8143: la $2, sym_1_8143
+.globl sym_1_8144
+sym_1_8144: la $2, sym_1_8144
+.globl sym_1_8145
+sym_1_8145: la $2, sym_1_8145
+.globl sym_1_8146
+sym_1_8146: la $2, sym_1_8146
+.globl sym_1_8147
+sym_1_8147: la $2, sym_1_8147
+.globl sym_1_8148
+sym_1_8148: la $2, sym_1_8148
+.globl sym_1_8149
+sym_1_8149: la $2, sym_1_8149
+.globl sym_1_8150
+sym_1_8150: la $2, sym_1_8150
+.globl sym_1_8151
+sym_1_8151: la $2, sym_1_8151
+.globl sym_1_8152
+sym_1_8152: la $2, sym_1_8152
+.globl sym_1_8153
+sym_1_8153: la $2, sym_1_8153
+.globl sym_1_8154
+sym_1_8154: la $2, sym_1_8154
+.globl sym_1_8155
+sym_1_8155: la $2, sym_1_8155
+.globl sym_1_8156
+sym_1_8156: la $2, sym_1_8156
+.globl sym_1_8157
+sym_1_8157: la $2, sym_1_8157
+.globl sym_1_8158
+sym_1_8158: la $2, sym_1_8158
+.globl sym_1_8159
+sym_1_8159: la $2, sym_1_8159
+.globl sym_1_8160
+sym_1_8160: la $2, sym_1_8160
+.globl sym_1_8161
+sym_1_8161: la $2, sym_1_8161
+.globl sym_1_8162
+sym_1_8162: la $2, sym_1_8162
+.globl sym_1_8163
+sym_1_8163: la $2, sym_1_8163
+.globl sym_1_8164
+sym_1_8164: la $2, sym_1_8164
+.globl sym_1_8165
+sym_1_8165: la $2, sym_1_8165
+.globl sym_1_8166
+sym_1_8166: la $2, sym_1_8166
+.globl sym_1_8167
+sym_1_8167: la $2, sym_1_8167
+.globl sym_1_8168
+sym_1_8168: la $2, sym_1_8168
+.globl sym_1_8169
+sym_1_8169: la $2, sym_1_8169
+.globl sym_1_8170
+sym_1_8170: la $2, sym_1_8170
+.globl sym_1_8171
+sym_1_8171: la $2, sym_1_8171
+.globl sym_1_8172
+sym_1_8172: la $2, sym_1_8172
+.globl sym_1_8173
+sym_1_8173: la $2, sym_1_8173
+.globl sym_1_8174
+sym_1_8174: la $2, sym_1_8174
+.globl sym_1_8175
+sym_1_8175: la $2, sym_1_8175
+.globl sym_1_8176
+sym_1_8176: la $2, sym_1_8176
+.globl sym_1_8177
+sym_1_8177: la $2, sym_1_8177
+.globl sym_1_8178
+sym_1_8178: la $2, sym_1_8178
+.globl sym_1_8179
+sym_1_8179: la $2, sym_1_8179
+.globl sym_1_8180
+sym_1_8180: la $2, sym_1_8180
+.globl sym_1_8181
+sym_1_8181: la $2, sym_1_8181
+.globl sym_1_8182
+sym_1_8182: la $2, sym_1_8182
+.globl sym_1_8183
+sym_1_8183: la $2, sym_1_8183
+.globl sym_1_8184
+sym_1_8184: la $2, sym_1_8184
+.globl sym_1_8185
+sym_1_8185: la $2, sym_1_8185
+.globl sym_1_8186
+sym_1_8186: la $2, sym_1_8186
+.globl sym_1_8187
+sym_1_8187: la $2, sym_1_8187
+.globl sym_1_8188
+sym_1_8188: la $2, sym_1_8188
+.globl sym_1_8189
+sym_1_8189: la $2, sym_1_8189
+.globl sym_1_8190
+sym_1_8190: la $2, sym_1_8190
+.globl sym_1_8191
+sym_1_8191: la $2, sym_1_8191
+.globl sym_1_8192
+sym_1_8192: la $2, sym_1_8192
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-1-2.s b/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-1-2.s
new file mode 100644
index 0000000..8904b03
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-1-2.s
@@ -0,0 +1,16384 @@
+.globl sym_2_1
+sym_2_1: la $2, sym_2_1
+.globl sym_2_2
+sym_2_2: la $2, sym_2_2
+.globl sym_2_3
+sym_2_3: la $2, sym_2_3
+.globl sym_2_4
+sym_2_4: la $2, sym_2_4
+.globl sym_2_5
+sym_2_5: la $2, sym_2_5
+.globl sym_2_6
+sym_2_6: la $2, sym_2_6
+.globl sym_2_7
+sym_2_7: la $2, sym_2_7
+.globl sym_2_8
+sym_2_8: la $2, sym_2_8
+.globl sym_2_9
+sym_2_9: la $2, sym_2_9
+.globl sym_2_10
+sym_2_10: la $2, sym_2_10
+.globl sym_2_11
+sym_2_11: la $2, sym_2_11
+.globl sym_2_12
+sym_2_12: la $2, sym_2_12
+.globl sym_2_13
+sym_2_13: la $2, sym_2_13
+.globl sym_2_14
+sym_2_14: la $2, sym_2_14
+.globl sym_2_15
+sym_2_15: la $2, sym_2_15
+.globl sym_2_16
+sym_2_16: la $2, sym_2_16
+.globl sym_2_17
+sym_2_17: la $2, sym_2_17
+.globl sym_2_18
+sym_2_18: la $2, sym_2_18
+.globl sym_2_19
+sym_2_19: la $2, sym_2_19
+.globl sym_2_20
+sym_2_20: la $2, sym_2_20
+.globl sym_2_21
+sym_2_21: la $2, sym_2_21
+.globl sym_2_22
+sym_2_22: la $2, sym_2_22
+.globl sym_2_23
+sym_2_23: la $2, sym_2_23
+.globl sym_2_24
+sym_2_24: la $2, sym_2_24
+.globl sym_2_25
+sym_2_25: la $2, sym_2_25
+.globl sym_2_26
+sym_2_26: la $2, sym_2_26
+.globl sym_2_27
+sym_2_27: la $2, sym_2_27
+.globl sym_2_28
+sym_2_28: la $2, sym_2_28
+.globl sym_2_29
+sym_2_29: la $2, sym_2_29
+.globl sym_2_30
+sym_2_30: la $2, sym_2_30
+.globl sym_2_31
+sym_2_31: la $2, sym_2_31
+.globl sym_2_32
+sym_2_32: la $2, sym_2_32
+.globl sym_2_33
+sym_2_33: la $2, sym_2_33
+.globl sym_2_34
+sym_2_34: la $2, sym_2_34
+.globl sym_2_35
+sym_2_35: la $2, sym_2_35
+.globl sym_2_36
+sym_2_36: la $2, sym_2_36
+.globl sym_2_37
+sym_2_37: la $2, sym_2_37
+.globl sym_2_38
+sym_2_38: la $2, sym_2_38
+.globl sym_2_39
+sym_2_39: la $2, sym_2_39
+.globl sym_2_40
+sym_2_40: la $2, sym_2_40
+.globl sym_2_41
+sym_2_41: la $2, sym_2_41
+.globl sym_2_42
+sym_2_42: la $2, sym_2_42
+.globl sym_2_43
+sym_2_43: la $2, sym_2_43
+.globl sym_2_44
+sym_2_44: la $2, sym_2_44
+.globl sym_2_45
+sym_2_45: la $2, sym_2_45
+.globl sym_2_46
+sym_2_46: la $2, sym_2_46
+.globl sym_2_47
+sym_2_47: la $2, sym_2_47
+.globl sym_2_48
+sym_2_48: la $2, sym_2_48
+.globl sym_2_49
+sym_2_49: la $2, sym_2_49
+.globl sym_2_50
+sym_2_50: la $2, sym_2_50
+.globl sym_2_51
+sym_2_51: la $2, sym_2_51
+.globl sym_2_52
+sym_2_52: la $2, sym_2_52
+.globl sym_2_53
+sym_2_53: la $2, sym_2_53
+.globl sym_2_54
+sym_2_54: la $2, sym_2_54
+.globl sym_2_55
+sym_2_55: la $2, sym_2_55
+.globl sym_2_56
+sym_2_56: la $2, sym_2_56
+.globl sym_2_57
+sym_2_57: la $2, sym_2_57
+.globl sym_2_58
+sym_2_58: la $2, sym_2_58
+.globl sym_2_59
+sym_2_59: la $2, sym_2_59
+.globl sym_2_60
+sym_2_60: la $2, sym_2_60
+.globl sym_2_61
+sym_2_61: la $2, sym_2_61
+.globl sym_2_62
+sym_2_62: la $2, sym_2_62
+.globl sym_2_63
+sym_2_63: la $2, sym_2_63
+.globl sym_2_64
+sym_2_64: la $2, sym_2_64
+.globl sym_2_65
+sym_2_65: la $2, sym_2_65
+.globl sym_2_66
+sym_2_66: la $2, sym_2_66
+.globl sym_2_67
+sym_2_67: la $2, sym_2_67
+.globl sym_2_68
+sym_2_68: la $2, sym_2_68
+.globl sym_2_69
+sym_2_69: la $2, sym_2_69
+.globl sym_2_70
+sym_2_70: la $2, sym_2_70
+.globl sym_2_71
+sym_2_71: la $2, sym_2_71
+.globl sym_2_72
+sym_2_72: la $2, sym_2_72
+.globl sym_2_73
+sym_2_73: la $2, sym_2_73
+.globl sym_2_74
+sym_2_74: la $2, sym_2_74
+.globl sym_2_75
+sym_2_75: la $2, sym_2_75
+.globl sym_2_76
+sym_2_76: la $2, sym_2_76
+.globl sym_2_77
+sym_2_77: la $2, sym_2_77
+.globl sym_2_78
+sym_2_78: la $2, sym_2_78
+.globl sym_2_79
+sym_2_79: la $2, sym_2_79
+.globl sym_2_80
+sym_2_80: la $2, sym_2_80
+.globl sym_2_81
+sym_2_81: la $2, sym_2_81
+.globl sym_2_82
+sym_2_82: la $2, sym_2_82
+.globl sym_2_83
+sym_2_83: la $2, sym_2_83
+.globl sym_2_84
+sym_2_84: la $2, sym_2_84
+.globl sym_2_85
+sym_2_85: la $2, sym_2_85
+.globl sym_2_86
+sym_2_86: la $2, sym_2_86
+.globl sym_2_87
+sym_2_87: la $2, sym_2_87
+.globl sym_2_88
+sym_2_88: la $2, sym_2_88
+.globl sym_2_89
+sym_2_89: la $2, sym_2_89
+.globl sym_2_90
+sym_2_90: la $2, sym_2_90
+.globl sym_2_91
+sym_2_91: la $2, sym_2_91
+.globl sym_2_92
+sym_2_92: la $2, sym_2_92
+.globl sym_2_93
+sym_2_93: la $2, sym_2_93
+.globl sym_2_94
+sym_2_94: la $2, sym_2_94
+.globl sym_2_95
+sym_2_95: la $2, sym_2_95
+.globl sym_2_96
+sym_2_96: la $2, sym_2_96
+.globl sym_2_97
+sym_2_97: la $2, sym_2_97
+.globl sym_2_98
+sym_2_98: la $2, sym_2_98
+.globl sym_2_99
+sym_2_99: la $2, sym_2_99
+.globl sym_2_100
+sym_2_100: la $2, sym_2_100
+.globl sym_2_101
+sym_2_101: la $2, sym_2_101
+.globl sym_2_102
+sym_2_102: la $2, sym_2_102
+.globl sym_2_103
+sym_2_103: la $2, sym_2_103
+.globl sym_2_104
+sym_2_104: la $2, sym_2_104
+.globl sym_2_105
+sym_2_105: la $2, sym_2_105
+.globl sym_2_106
+sym_2_106: la $2, sym_2_106
+.globl sym_2_107
+sym_2_107: la $2, sym_2_107
+.globl sym_2_108
+sym_2_108: la $2, sym_2_108
+.globl sym_2_109
+sym_2_109: la $2, sym_2_109
+.globl sym_2_110
+sym_2_110: la $2, sym_2_110
+.globl sym_2_111
+sym_2_111: la $2, sym_2_111
+.globl sym_2_112
+sym_2_112: la $2, sym_2_112
+.globl sym_2_113
+sym_2_113: la $2, sym_2_113
+.globl sym_2_114
+sym_2_114: la $2, sym_2_114
+.globl sym_2_115
+sym_2_115: la $2, sym_2_115
+.globl sym_2_116
+sym_2_116: la $2, sym_2_116
+.globl sym_2_117
+sym_2_117: la $2, sym_2_117
+.globl sym_2_118
+sym_2_118: la $2, sym_2_118
+.globl sym_2_119
+sym_2_119: la $2, sym_2_119
+.globl sym_2_120
+sym_2_120: la $2, sym_2_120
+.globl sym_2_121
+sym_2_121: la $2, sym_2_121
+.globl sym_2_122
+sym_2_122: la $2, sym_2_122
+.globl sym_2_123
+sym_2_123: la $2, sym_2_123
+.globl sym_2_124
+sym_2_124: la $2, sym_2_124
+.globl sym_2_125
+sym_2_125: la $2, sym_2_125
+.globl sym_2_126
+sym_2_126: la $2, sym_2_126
+.globl sym_2_127
+sym_2_127: la $2, sym_2_127
+.globl sym_2_128
+sym_2_128: la $2, sym_2_128
+.globl sym_2_129
+sym_2_129: la $2, sym_2_129
+.globl sym_2_130
+sym_2_130: la $2, sym_2_130
+.globl sym_2_131
+sym_2_131: la $2, sym_2_131
+.globl sym_2_132
+sym_2_132: la $2, sym_2_132
+.globl sym_2_133
+sym_2_133: la $2, sym_2_133
+.globl sym_2_134
+sym_2_134: la $2, sym_2_134
+.globl sym_2_135
+sym_2_135: la $2, sym_2_135
+.globl sym_2_136
+sym_2_136: la $2, sym_2_136
+.globl sym_2_137
+sym_2_137: la $2, sym_2_137
+.globl sym_2_138
+sym_2_138: la $2, sym_2_138
+.globl sym_2_139
+sym_2_139: la $2, sym_2_139
+.globl sym_2_140
+sym_2_140: la $2, sym_2_140
+.globl sym_2_141
+sym_2_141: la $2, sym_2_141
+.globl sym_2_142
+sym_2_142: la $2, sym_2_142
+.globl sym_2_143
+sym_2_143: la $2, sym_2_143
+.globl sym_2_144
+sym_2_144: la $2, sym_2_144
+.globl sym_2_145
+sym_2_145: la $2, sym_2_145
+.globl sym_2_146
+sym_2_146: la $2, sym_2_146
+.globl sym_2_147
+sym_2_147: la $2, sym_2_147
+.globl sym_2_148
+sym_2_148: la $2, sym_2_148
+.globl sym_2_149
+sym_2_149: la $2, sym_2_149
+.globl sym_2_150
+sym_2_150: la $2, sym_2_150
+.globl sym_2_151
+sym_2_151: la $2, sym_2_151
+.globl sym_2_152
+sym_2_152: la $2, sym_2_152
+.globl sym_2_153
+sym_2_153: la $2, sym_2_153
+.globl sym_2_154
+sym_2_154: la $2, sym_2_154
+.globl sym_2_155
+sym_2_155: la $2, sym_2_155
+.globl sym_2_156
+sym_2_156: la $2, sym_2_156
+.globl sym_2_157
+sym_2_157: la $2, sym_2_157
+.globl sym_2_158
+sym_2_158: la $2, sym_2_158
+.globl sym_2_159
+sym_2_159: la $2, sym_2_159
+.globl sym_2_160
+sym_2_160: la $2, sym_2_160
+.globl sym_2_161
+sym_2_161: la $2, sym_2_161
+.globl sym_2_162
+sym_2_162: la $2, sym_2_162
+.globl sym_2_163
+sym_2_163: la $2, sym_2_163
+.globl sym_2_164
+sym_2_164: la $2, sym_2_164
+.globl sym_2_165
+sym_2_165: la $2, sym_2_165
+.globl sym_2_166
+sym_2_166: la $2, sym_2_166
+.globl sym_2_167
+sym_2_167: la $2, sym_2_167
+.globl sym_2_168
+sym_2_168: la $2, sym_2_168
+.globl sym_2_169
+sym_2_169: la $2, sym_2_169
+.globl sym_2_170
+sym_2_170: la $2, sym_2_170
+.globl sym_2_171
+sym_2_171: la $2, sym_2_171
+.globl sym_2_172
+sym_2_172: la $2, sym_2_172
+.globl sym_2_173
+sym_2_173: la $2, sym_2_173
+.globl sym_2_174
+sym_2_174: la $2, sym_2_174
+.globl sym_2_175
+sym_2_175: la $2, sym_2_175
+.globl sym_2_176
+sym_2_176: la $2, sym_2_176
+.globl sym_2_177
+sym_2_177: la $2, sym_2_177
+.globl sym_2_178
+sym_2_178: la $2, sym_2_178
+.globl sym_2_179
+sym_2_179: la $2, sym_2_179
+.globl sym_2_180
+sym_2_180: la $2, sym_2_180
+.globl sym_2_181
+sym_2_181: la $2, sym_2_181
+.globl sym_2_182
+sym_2_182: la $2, sym_2_182
+.globl sym_2_183
+sym_2_183: la $2, sym_2_183
+.globl sym_2_184
+sym_2_184: la $2, sym_2_184
+.globl sym_2_185
+sym_2_185: la $2, sym_2_185
+.globl sym_2_186
+sym_2_186: la $2, sym_2_186
+.globl sym_2_187
+sym_2_187: la $2, sym_2_187
+.globl sym_2_188
+sym_2_188: la $2, sym_2_188
+.globl sym_2_189
+sym_2_189: la $2, sym_2_189
+.globl sym_2_190
+sym_2_190: la $2, sym_2_190
+.globl sym_2_191
+sym_2_191: la $2, sym_2_191
+.globl sym_2_192
+sym_2_192: la $2, sym_2_192
+.globl sym_2_193
+sym_2_193: la $2, sym_2_193
+.globl sym_2_194
+sym_2_194: la $2, sym_2_194
+.globl sym_2_195
+sym_2_195: la $2, sym_2_195
+.globl sym_2_196
+sym_2_196: la $2, sym_2_196
+.globl sym_2_197
+sym_2_197: la $2, sym_2_197
+.globl sym_2_198
+sym_2_198: la $2, sym_2_198
+.globl sym_2_199
+sym_2_199: la $2, sym_2_199
+.globl sym_2_200
+sym_2_200: la $2, sym_2_200
+.globl sym_2_201
+sym_2_201: la $2, sym_2_201
+.globl sym_2_202
+sym_2_202: la $2, sym_2_202
+.globl sym_2_203
+sym_2_203: la $2, sym_2_203
+.globl sym_2_204
+sym_2_204: la $2, sym_2_204
+.globl sym_2_205
+sym_2_205: la $2, sym_2_205
+.globl sym_2_206
+sym_2_206: la $2, sym_2_206
+.globl sym_2_207
+sym_2_207: la $2, sym_2_207
+.globl sym_2_208
+sym_2_208: la $2, sym_2_208
+.globl sym_2_209
+sym_2_209: la $2, sym_2_209
+.globl sym_2_210
+sym_2_210: la $2, sym_2_210
+.globl sym_2_211
+sym_2_211: la $2, sym_2_211
+.globl sym_2_212
+sym_2_212: la $2, sym_2_212
+.globl sym_2_213
+sym_2_213: la $2, sym_2_213
+.globl sym_2_214
+sym_2_214: la $2, sym_2_214
+.globl sym_2_215
+sym_2_215: la $2, sym_2_215
+.globl sym_2_216
+sym_2_216: la $2, sym_2_216
+.globl sym_2_217
+sym_2_217: la $2, sym_2_217
+.globl sym_2_218
+sym_2_218: la $2, sym_2_218
+.globl sym_2_219
+sym_2_219: la $2, sym_2_219
+.globl sym_2_220
+sym_2_220: la $2, sym_2_220
+.globl sym_2_221
+sym_2_221: la $2, sym_2_221
+.globl sym_2_222
+sym_2_222: la $2, sym_2_222
+.globl sym_2_223
+sym_2_223: la $2, sym_2_223
+.globl sym_2_224
+sym_2_224: la $2, sym_2_224
+.globl sym_2_225
+sym_2_225: la $2, sym_2_225
+.globl sym_2_226
+sym_2_226: la $2, sym_2_226
+.globl sym_2_227
+sym_2_227: la $2, sym_2_227
+.globl sym_2_228
+sym_2_228: la $2, sym_2_228
+.globl sym_2_229
+sym_2_229: la $2, sym_2_229
+.globl sym_2_230
+sym_2_230: la $2, sym_2_230
+.globl sym_2_231
+sym_2_231: la $2, sym_2_231
+.globl sym_2_232
+sym_2_232: la $2, sym_2_232
+.globl sym_2_233
+sym_2_233: la $2, sym_2_233
+.globl sym_2_234
+sym_2_234: la $2, sym_2_234
+.globl sym_2_235
+sym_2_235: la $2, sym_2_235
+.globl sym_2_236
+sym_2_236: la $2, sym_2_236
+.globl sym_2_237
+sym_2_237: la $2, sym_2_237
+.globl sym_2_238
+sym_2_238: la $2, sym_2_238
+.globl sym_2_239
+sym_2_239: la $2, sym_2_239
+.globl sym_2_240
+sym_2_240: la $2, sym_2_240
+.globl sym_2_241
+sym_2_241: la $2, sym_2_241
+.globl sym_2_242
+sym_2_242: la $2, sym_2_242
+.globl sym_2_243
+sym_2_243: la $2, sym_2_243
+.globl sym_2_244
+sym_2_244: la $2, sym_2_244
+.globl sym_2_245
+sym_2_245: la $2, sym_2_245
+.globl sym_2_246
+sym_2_246: la $2, sym_2_246
+.globl sym_2_247
+sym_2_247: la $2, sym_2_247
+.globl sym_2_248
+sym_2_248: la $2, sym_2_248
+.globl sym_2_249
+sym_2_249: la $2, sym_2_249
+.globl sym_2_250
+sym_2_250: la $2, sym_2_250
+.globl sym_2_251
+sym_2_251: la $2, sym_2_251
+.globl sym_2_252
+sym_2_252: la $2, sym_2_252
+.globl sym_2_253
+sym_2_253: la $2, sym_2_253
+.globl sym_2_254
+sym_2_254: la $2, sym_2_254
+.globl sym_2_255
+sym_2_255: la $2, sym_2_255
+.globl sym_2_256
+sym_2_256: la $2, sym_2_256
+.globl sym_2_257
+sym_2_257: la $2, sym_2_257
+.globl sym_2_258
+sym_2_258: la $2, sym_2_258
+.globl sym_2_259
+sym_2_259: la $2, sym_2_259
+.globl sym_2_260
+sym_2_260: la $2, sym_2_260
+.globl sym_2_261
+sym_2_261: la $2, sym_2_261
+.globl sym_2_262
+sym_2_262: la $2, sym_2_262
+.globl sym_2_263
+sym_2_263: la $2, sym_2_263
+.globl sym_2_264
+sym_2_264: la $2, sym_2_264
+.globl sym_2_265
+sym_2_265: la $2, sym_2_265
+.globl sym_2_266
+sym_2_266: la $2, sym_2_266
+.globl sym_2_267
+sym_2_267: la $2, sym_2_267
+.globl sym_2_268
+sym_2_268: la $2, sym_2_268
+.globl sym_2_269
+sym_2_269: la $2, sym_2_269
+.globl sym_2_270
+sym_2_270: la $2, sym_2_270
+.globl sym_2_271
+sym_2_271: la $2, sym_2_271
+.globl sym_2_272
+sym_2_272: la $2, sym_2_272
+.globl sym_2_273
+sym_2_273: la $2, sym_2_273
+.globl sym_2_274
+sym_2_274: la $2, sym_2_274
+.globl sym_2_275
+sym_2_275: la $2, sym_2_275
+.globl sym_2_276
+sym_2_276: la $2, sym_2_276
+.globl sym_2_277
+sym_2_277: la $2, sym_2_277
+.globl sym_2_278
+sym_2_278: la $2, sym_2_278
+.globl sym_2_279
+sym_2_279: la $2, sym_2_279
+.globl sym_2_280
+sym_2_280: la $2, sym_2_280
+.globl sym_2_281
+sym_2_281: la $2, sym_2_281
+.globl sym_2_282
+sym_2_282: la $2, sym_2_282
+.globl sym_2_283
+sym_2_283: la $2, sym_2_283
+.globl sym_2_284
+sym_2_284: la $2, sym_2_284
+.globl sym_2_285
+sym_2_285: la $2, sym_2_285
+.globl sym_2_286
+sym_2_286: la $2, sym_2_286
+.globl sym_2_287
+sym_2_287: la $2, sym_2_287
+.globl sym_2_288
+sym_2_288: la $2, sym_2_288
+.globl sym_2_289
+sym_2_289: la $2, sym_2_289
+.globl sym_2_290
+sym_2_290: la $2, sym_2_290
+.globl sym_2_291
+sym_2_291: la $2, sym_2_291
+.globl sym_2_292
+sym_2_292: la $2, sym_2_292
+.globl sym_2_293
+sym_2_293: la $2, sym_2_293
+.globl sym_2_294
+sym_2_294: la $2, sym_2_294
+.globl sym_2_295
+sym_2_295: la $2, sym_2_295
+.globl sym_2_296
+sym_2_296: la $2, sym_2_296
+.globl sym_2_297
+sym_2_297: la $2, sym_2_297
+.globl sym_2_298
+sym_2_298: la $2, sym_2_298
+.globl sym_2_299
+sym_2_299: la $2, sym_2_299
+.globl sym_2_300
+sym_2_300: la $2, sym_2_300
+.globl sym_2_301
+sym_2_301: la $2, sym_2_301
+.globl sym_2_302
+sym_2_302: la $2, sym_2_302
+.globl sym_2_303
+sym_2_303: la $2, sym_2_303
+.globl sym_2_304
+sym_2_304: la $2, sym_2_304
+.globl sym_2_305
+sym_2_305: la $2, sym_2_305
+.globl sym_2_306
+sym_2_306: la $2, sym_2_306
+.globl sym_2_307
+sym_2_307: la $2, sym_2_307
+.globl sym_2_308
+sym_2_308: la $2, sym_2_308
+.globl sym_2_309
+sym_2_309: la $2, sym_2_309
+.globl sym_2_310
+sym_2_310: la $2, sym_2_310
+.globl sym_2_311
+sym_2_311: la $2, sym_2_311
+.globl sym_2_312
+sym_2_312: la $2, sym_2_312
+.globl sym_2_313
+sym_2_313: la $2, sym_2_313
+.globl sym_2_314
+sym_2_314: la $2, sym_2_314
+.globl sym_2_315
+sym_2_315: la $2, sym_2_315
+.globl sym_2_316
+sym_2_316: la $2, sym_2_316
+.globl sym_2_317
+sym_2_317: la $2, sym_2_317
+.globl sym_2_318
+sym_2_318: la $2, sym_2_318
+.globl sym_2_319
+sym_2_319: la $2, sym_2_319
+.globl sym_2_320
+sym_2_320: la $2, sym_2_320
+.globl sym_2_321
+sym_2_321: la $2, sym_2_321
+.globl sym_2_322
+sym_2_322: la $2, sym_2_322
+.globl sym_2_323
+sym_2_323: la $2, sym_2_323
+.globl sym_2_324
+sym_2_324: la $2, sym_2_324
+.globl sym_2_325
+sym_2_325: la $2, sym_2_325
+.globl sym_2_326
+sym_2_326: la $2, sym_2_326
+.globl sym_2_327
+sym_2_327: la $2, sym_2_327
+.globl sym_2_328
+sym_2_328: la $2, sym_2_328
+.globl sym_2_329
+sym_2_329: la $2, sym_2_329
+.globl sym_2_330
+sym_2_330: la $2, sym_2_330
+.globl sym_2_331
+sym_2_331: la $2, sym_2_331
+.globl sym_2_332
+sym_2_332: la $2, sym_2_332
+.globl sym_2_333
+sym_2_333: la $2, sym_2_333
+.globl sym_2_334
+sym_2_334: la $2, sym_2_334
+.globl sym_2_335
+sym_2_335: la $2, sym_2_335
+.globl sym_2_336
+sym_2_336: la $2, sym_2_336
+.globl sym_2_337
+sym_2_337: la $2, sym_2_337
+.globl sym_2_338
+sym_2_338: la $2, sym_2_338
+.globl sym_2_339
+sym_2_339: la $2, sym_2_339
+.globl sym_2_340
+sym_2_340: la $2, sym_2_340
+.globl sym_2_341
+sym_2_341: la $2, sym_2_341
+.globl sym_2_342
+sym_2_342: la $2, sym_2_342
+.globl sym_2_343
+sym_2_343: la $2, sym_2_343
+.globl sym_2_344
+sym_2_344: la $2, sym_2_344
+.globl sym_2_345
+sym_2_345: la $2, sym_2_345
+.globl sym_2_346
+sym_2_346: la $2, sym_2_346
+.globl sym_2_347
+sym_2_347: la $2, sym_2_347
+.globl sym_2_348
+sym_2_348: la $2, sym_2_348
+.globl sym_2_349
+sym_2_349: la $2, sym_2_349
+.globl sym_2_350
+sym_2_350: la $2, sym_2_350
+.globl sym_2_351
+sym_2_351: la $2, sym_2_351
+.globl sym_2_352
+sym_2_352: la $2, sym_2_352
+.globl sym_2_353
+sym_2_353: la $2, sym_2_353
+.globl sym_2_354
+sym_2_354: la $2, sym_2_354
+.globl sym_2_355
+sym_2_355: la $2, sym_2_355
+.globl sym_2_356
+sym_2_356: la $2, sym_2_356
+.globl sym_2_357
+sym_2_357: la $2, sym_2_357
+.globl sym_2_358
+sym_2_358: la $2, sym_2_358
+.globl sym_2_359
+sym_2_359: la $2, sym_2_359
+.globl sym_2_360
+sym_2_360: la $2, sym_2_360
+.globl sym_2_361
+sym_2_361: la $2, sym_2_361
+.globl sym_2_362
+sym_2_362: la $2, sym_2_362
+.globl sym_2_363
+sym_2_363: la $2, sym_2_363
+.globl sym_2_364
+sym_2_364: la $2, sym_2_364
+.globl sym_2_365
+sym_2_365: la $2, sym_2_365
+.globl sym_2_366
+sym_2_366: la $2, sym_2_366
+.globl sym_2_367
+sym_2_367: la $2, sym_2_367
+.globl sym_2_368
+sym_2_368: la $2, sym_2_368
+.globl sym_2_369
+sym_2_369: la $2, sym_2_369
+.globl sym_2_370
+sym_2_370: la $2, sym_2_370
+.globl sym_2_371
+sym_2_371: la $2, sym_2_371
+.globl sym_2_372
+sym_2_372: la $2, sym_2_372
+.globl sym_2_373
+sym_2_373: la $2, sym_2_373
+.globl sym_2_374
+sym_2_374: la $2, sym_2_374
+.globl sym_2_375
+sym_2_375: la $2, sym_2_375
+.globl sym_2_376
+sym_2_376: la $2, sym_2_376
+.globl sym_2_377
+sym_2_377: la $2, sym_2_377
+.globl sym_2_378
+sym_2_378: la $2, sym_2_378
+.globl sym_2_379
+sym_2_379: la $2, sym_2_379
+.globl sym_2_380
+sym_2_380: la $2, sym_2_380
+.globl sym_2_381
+sym_2_381: la $2, sym_2_381
+.globl sym_2_382
+sym_2_382: la $2, sym_2_382
+.globl sym_2_383
+sym_2_383: la $2, sym_2_383
+.globl sym_2_384
+sym_2_384: la $2, sym_2_384
+.globl sym_2_385
+sym_2_385: la $2, sym_2_385
+.globl sym_2_386
+sym_2_386: la $2, sym_2_386
+.globl sym_2_387
+sym_2_387: la $2, sym_2_387
+.globl sym_2_388
+sym_2_388: la $2, sym_2_388
+.globl sym_2_389
+sym_2_389: la $2, sym_2_389
+.globl sym_2_390
+sym_2_390: la $2, sym_2_390
+.globl sym_2_391
+sym_2_391: la $2, sym_2_391
+.globl sym_2_392
+sym_2_392: la $2, sym_2_392
+.globl sym_2_393
+sym_2_393: la $2, sym_2_393
+.globl sym_2_394
+sym_2_394: la $2, sym_2_394
+.globl sym_2_395
+sym_2_395: la $2, sym_2_395
+.globl sym_2_396
+sym_2_396: la $2, sym_2_396
+.globl sym_2_397
+sym_2_397: la $2, sym_2_397
+.globl sym_2_398
+sym_2_398: la $2, sym_2_398
+.globl sym_2_399
+sym_2_399: la $2, sym_2_399
+.globl sym_2_400
+sym_2_400: la $2, sym_2_400
+.globl sym_2_401
+sym_2_401: la $2, sym_2_401
+.globl sym_2_402
+sym_2_402: la $2, sym_2_402
+.globl sym_2_403
+sym_2_403: la $2, sym_2_403
+.globl sym_2_404
+sym_2_404: la $2, sym_2_404
+.globl sym_2_405
+sym_2_405: la $2, sym_2_405
+.globl sym_2_406
+sym_2_406: la $2, sym_2_406
+.globl sym_2_407
+sym_2_407: la $2, sym_2_407
+.globl sym_2_408
+sym_2_408: la $2, sym_2_408
+.globl sym_2_409
+sym_2_409: la $2, sym_2_409
+.globl sym_2_410
+sym_2_410: la $2, sym_2_410
+.globl sym_2_411
+sym_2_411: la $2, sym_2_411
+.globl sym_2_412
+sym_2_412: la $2, sym_2_412
+.globl sym_2_413
+sym_2_413: la $2, sym_2_413
+.globl sym_2_414
+sym_2_414: la $2, sym_2_414
+.globl sym_2_415
+sym_2_415: la $2, sym_2_415
+.globl sym_2_416
+sym_2_416: la $2, sym_2_416
+.globl sym_2_417
+sym_2_417: la $2, sym_2_417
+.globl sym_2_418
+sym_2_418: la $2, sym_2_418
+.globl sym_2_419
+sym_2_419: la $2, sym_2_419
+.globl sym_2_420
+sym_2_420: la $2, sym_2_420
+.globl sym_2_421
+sym_2_421: la $2, sym_2_421
+.globl sym_2_422
+sym_2_422: la $2, sym_2_422
+.globl sym_2_423
+sym_2_423: la $2, sym_2_423
+.globl sym_2_424
+sym_2_424: la $2, sym_2_424
+.globl sym_2_425
+sym_2_425: la $2, sym_2_425
+.globl sym_2_426
+sym_2_426: la $2, sym_2_426
+.globl sym_2_427
+sym_2_427: la $2, sym_2_427
+.globl sym_2_428
+sym_2_428: la $2, sym_2_428
+.globl sym_2_429
+sym_2_429: la $2, sym_2_429
+.globl sym_2_430
+sym_2_430: la $2, sym_2_430
+.globl sym_2_431
+sym_2_431: la $2, sym_2_431
+.globl sym_2_432
+sym_2_432: la $2, sym_2_432
+.globl sym_2_433
+sym_2_433: la $2, sym_2_433
+.globl sym_2_434
+sym_2_434: la $2, sym_2_434
+.globl sym_2_435
+sym_2_435: la $2, sym_2_435
+.globl sym_2_436
+sym_2_436: la $2, sym_2_436
+.globl sym_2_437
+sym_2_437: la $2, sym_2_437
+.globl sym_2_438
+sym_2_438: la $2, sym_2_438
+.globl sym_2_439
+sym_2_439: la $2, sym_2_439
+.globl sym_2_440
+sym_2_440: la $2, sym_2_440
+.globl sym_2_441
+sym_2_441: la $2, sym_2_441
+.globl sym_2_442
+sym_2_442: la $2, sym_2_442
+.globl sym_2_443
+sym_2_443: la $2, sym_2_443
+.globl sym_2_444
+sym_2_444: la $2, sym_2_444
+.globl sym_2_445
+sym_2_445: la $2, sym_2_445
+.globl sym_2_446
+sym_2_446: la $2, sym_2_446
+.globl sym_2_447
+sym_2_447: la $2, sym_2_447
+.globl sym_2_448
+sym_2_448: la $2, sym_2_448
+.globl sym_2_449
+sym_2_449: la $2, sym_2_449
+.globl sym_2_450
+sym_2_450: la $2, sym_2_450
+.globl sym_2_451
+sym_2_451: la $2, sym_2_451
+.globl sym_2_452
+sym_2_452: la $2, sym_2_452
+.globl sym_2_453
+sym_2_453: la $2, sym_2_453
+.globl sym_2_454
+sym_2_454: la $2, sym_2_454
+.globl sym_2_455
+sym_2_455: la $2, sym_2_455
+.globl sym_2_456
+sym_2_456: la $2, sym_2_456
+.globl sym_2_457
+sym_2_457: la $2, sym_2_457
+.globl sym_2_458
+sym_2_458: la $2, sym_2_458
+.globl sym_2_459
+sym_2_459: la $2, sym_2_459
+.globl sym_2_460
+sym_2_460: la $2, sym_2_460
+.globl sym_2_461
+sym_2_461: la $2, sym_2_461
+.globl sym_2_462
+sym_2_462: la $2, sym_2_462
+.globl sym_2_463
+sym_2_463: la $2, sym_2_463
+.globl sym_2_464
+sym_2_464: la $2, sym_2_464
+.globl sym_2_465
+sym_2_465: la $2, sym_2_465
+.globl sym_2_466
+sym_2_466: la $2, sym_2_466
+.globl sym_2_467
+sym_2_467: la $2, sym_2_467
+.globl sym_2_468
+sym_2_468: la $2, sym_2_468
+.globl sym_2_469
+sym_2_469: la $2, sym_2_469
+.globl sym_2_470
+sym_2_470: la $2, sym_2_470
+.globl sym_2_471
+sym_2_471: la $2, sym_2_471
+.globl sym_2_472
+sym_2_472: la $2, sym_2_472
+.globl sym_2_473
+sym_2_473: la $2, sym_2_473
+.globl sym_2_474
+sym_2_474: la $2, sym_2_474
+.globl sym_2_475
+sym_2_475: la $2, sym_2_475
+.globl sym_2_476
+sym_2_476: la $2, sym_2_476
+.globl sym_2_477
+sym_2_477: la $2, sym_2_477
+.globl sym_2_478
+sym_2_478: la $2, sym_2_478
+.globl sym_2_479
+sym_2_479: la $2, sym_2_479
+.globl sym_2_480
+sym_2_480: la $2, sym_2_480
+.globl sym_2_481
+sym_2_481: la $2, sym_2_481
+.globl sym_2_482
+sym_2_482: la $2, sym_2_482
+.globl sym_2_483
+sym_2_483: la $2, sym_2_483
+.globl sym_2_484
+sym_2_484: la $2, sym_2_484
+.globl sym_2_485
+sym_2_485: la $2, sym_2_485
+.globl sym_2_486
+sym_2_486: la $2, sym_2_486
+.globl sym_2_487
+sym_2_487: la $2, sym_2_487
+.globl sym_2_488
+sym_2_488: la $2, sym_2_488
+.globl sym_2_489
+sym_2_489: la $2, sym_2_489
+.globl sym_2_490
+sym_2_490: la $2, sym_2_490
+.globl sym_2_491
+sym_2_491: la $2, sym_2_491
+.globl sym_2_492
+sym_2_492: la $2, sym_2_492
+.globl sym_2_493
+sym_2_493: la $2, sym_2_493
+.globl sym_2_494
+sym_2_494: la $2, sym_2_494
+.globl sym_2_495
+sym_2_495: la $2, sym_2_495
+.globl sym_2_496
+sym_2_496: la $2, sym_2_496
+.globl sym_2_497
+sym_2_497: la $2, sym_2_497
+.globl sym_2_498
+sym_2_498: la $2, sym_2_498
+.globl sym_2_499
+sym_2_499: la $2, sym_2_499
+.globl sym_2_500
+sym_2_500: la $2, sym_2_500
+.globl sym_2_501
+sym_2_501: la $2, sym_2_501
+.globl sym_2_502
+sym_2_502: la $2, sym_2_502
+.globl sym_2_503
+sym_2_503: la $2, sym_2_503
+.globl sym_2_504
+sym_2_504: la $2, sym_2_504
+.globl sym_2_505
+sym_2_505: la $2, sym_2_505
+.globl sym_2_506
+sym_2_506: la $2, sym_2_506
+.globl sym_2_507
+sym_2_507: la $2, sym_2_507
+.globl sym_2_508
+sym_2_508: la $2, sym_2_508
+.globl sym_2_509
+sym_2_509: la $2, sym_2_509
+.globl sym_2_510
+sym_2_510: la $2, sym_2_510
+.globl sym_2_511
+sym_2_511: la $2, sym_2_511
+.globl sym_2_512
+sym_2_512: la $2, sym_2_512
+.globl sym_2_513
+sym_2_513: la $2, sym_2_513
+.globl sym_2_514
+sym_2_514: la $2, sym_2_514
+.globl sym_2_515
+sym_2_515: la $2, sym_2_515
+.globl sym_2_516
+sym_2_516: la $2, sym_2_516
+.globl sym_2_517
+sym_2_517: la $2, sym_2_517
+.globl sym_2_518
+sym_2_518: la $2, sym_2_518
+.globl sym_2_519
+sym_2_519: la $2, sym_2_519
+.globl sym_2_520
+sym_2_520: la $2, sym_2_520
+.globl sym_2_521
+sym_2_521: la $2, sym_2_521
+.globl sym_2_522
+sym_2_522: la $2, sym_2_522
+.globl sym_2_523
+sym_2_523: la $2, sym_2_523
+.globl sym_2_524
+sym_2_524: la $2, sym_2_524
+.globl sym_2_525
+sym_2_525: la $2, sym_2_525
+.globl sym_2_526
+sym_2_526: la $2, sym_2_526
+.globl sym_2_527
+sym_2_527: la $2, sym_2_527
+.globl sym_2_528
+sym_2_528: la $2, sym_2_528
+.globl sym_2_529
+sym_2_529: la $2, sym_2_529
+.globl sym_2_530
+sym_2_530: la $2, sym_2_530
+.globl sym_2_531
+sym_2_531: la $2, sym_2_531
+.globl sym_2_532
+sym_2_532: la $2, sym_2_532
+.globl sym_2_533
+sym_2_533: la $2, sym_2_533
+.globl sym_2_534
+sym_2_534: la $2, sym_2_534
+.globl sym_2_535
+sym_2_535: la $2, sym_2_535
+.globl sym_2_536
+sym_2_536: la $2, sym_2_536
+.globl sym_2_537
+sym_2_537: la $2, sym_2_537
+.globl sym_2_538
+sym_2_538: la $2, sym_2_538
+.globl sym_2_539
+sym_2_539: la $2, sym_2_539
+.globl sym_2_540
+sym_2_540: la $2, sym_2_540
+.globl sym_2_541
+sym_2_541: la $2, sym_2_541
+.globl sym_2_542
+sym_2_542: la $2, sym_2_542
+.globl sym_2_543
+sym_2_543: la $2, sym_2_543
+.globl sym_2_544
+sym_2_544: la $2, sym_2_544
+.globl sym_2_545
+sym_2_545: la $2, sym_2_545
+.globl sym_2_546
+sym_2_546: la $2, sym_2_546
+.globl sym_2_547
+sym_2_547: la $2, sym_2_547
+.globl sym_2_548
+sym_2_548: la $2, sym_2_548
+.globl sym_2_549
+sym_2_549: la $2, sym_2_549
+.globl sym_2_550
+sym_2_550: la $2, sym_2_550
+.globl sym_2_551
+sym_2_551: la $2, sym_2_551
+.globl sym_2_552
+sym_2_552: la $2, sym_2_552
+.globl sym_2_553
+sym_2_553: la $2, sym_2_553
+.globl sym_2_554
+sym_2_554: la $2, sym_2_554
+.globl sym_2_555
+sym_2_555: la $2, sym_2_555
+.globl sym_2_556
+sym_2_556: la $2, sym_2_556
+.globl sym_2_557
+sym_2_557: la $2, sym_2_557
+.globl sym_2_558
+sym_2_558: la $2, sym_2_558
+.globl sym_2_559
+sym_2_559: la $2, sym_2_559
+.globl sym_2_560
+sym_2_560: la $2, sym_2_560
+.globl sym_2_561
+sym_2_561: la $2, sym_2_561
+.globl sym_2_562
+sym_2_562: la $2, sym_2_562
+.globl sym_2_563
+sym_2_563: la $2, sym_2_563
+.globl sym_2_564
+sym_2_564: la $2, sym_2_564
+.globl sym_2_565
+sym_2_565: la $2, sym_2_565
+.globl sym_2_566
+sym_2_566: la $2, sym_2_566
+.globl sym_2_567
+sym_2_567: la $2, sym_2_567
+.globl sym_2_568
+sym_2_568: la $2, sym_2_568
+.globl sym_2_569
+sym_2_569: la $2, sym_2_569
+.globl sym_2_570
+sym_2_570: la $2, sym_2_570
+.globl sym_2_571
+sym_2_571: la $2, sym_2_571
+.globl sym_2_572
+sym_2_572: la $2, sym_2_572
+.globl sym_2_573
+sym_2_573: la $2, sym_2_573
+.globl sym_2_574
+sym_2_574: la $2, sym_2_574
+.globl sym_2_575
+sym_2_575: la $2, sym_2_575
+.globl sym_2_576
+sym_2_576: la $2, sym_2_576
+.globl sym_2_577
+sym_2_577: la $2, sym_2_577
+.globl sym_2_578
+sym_2_578: la $2, sym_2_578
+.globl sym_2_579
+sym_2_579: la $2, sym_2_579
+.globl sym_2_580
+sym_2_580: la $2, sym_2_580
+.globl sym_2_581
+sym_2_581: la $2, sym_2_581
+.globl sym_2_582
+sym_2_582: la $2, sym_2_582
+.globl sym_2_583
+sym_2_583: la $2, sym_2_583
+.globl sym_2_584
+sym_2_584: la $2, sym_2_584
+.globl sym_2_585
+sym_2_585: la $2, sym_2_585
+.globl sym_2_586
+sym_2_586: la $2, sym_2_586
+.globl sym_2_587
+sym_2_587: la $2, sym_2_587
+.globl sym_2_588
+sym_2_588: la $2, sym_2_588
+.globl sym_2_589
+sym_2_589: la $2, sym_2_589
+.globl sym_2_590
+sym_2_590: la $2, sym_2_590
+.globl sym_2_591
+sym_2_591: la $2, sym_2_591
+.globl sym_2_592
+sym_2_592: la $2, sym_2_592
+.globl sym_2_593
+sym_2_593: la $2, sym_2_593
+.globl sym_2_594
+sym_2_594: la $2, sym_2_594
+.globl sym_2_595
+sym_2_595: la $2, sym_2_595
+.globl sym_2_596
+sym_2_596: la $2, sym_2_596
+.globl sym_2_597
+sym_2_597: la $2, sym_2_597
+.globl sym_2_598
+sym_2_598: la $2, sym_2_598
+.globl sym_2_599
+sym_2_599: la $2, sym_2_599
+.globl sym_2_600
+sym_2_600: la $2, sym_2_600
+.globl sym_2_601
+sym_2_601: la $2, sym_2_601
+.globl sym_2_602
+sym_2_602: la $2, sym_2_602
+.globl sym_2_603
+sym_2_603: la $2, sym_2_603
+.globl sym_2_604
+sym_2_604: la $2, sym_2_604
+.globl sym_2_605
+sym_2_605: la $2, sym_2_605
+.globl sym_2_606
+sym_2_606: la $2, sym_2_606
+.globl sym_2_607
+sym_2_607: la $2, sym_2_607
+.globl sym_2_608
+sym_2_608: la $2, sym_2_608
+.globl sym_2_609
+sym_2_609: la $2, sym_2_609
+.globl sym_2_610
+sym_2_610: la $2, sym_2_610
+.globl sym_2_611
+sym_2_611: la $2, sym_2_611
+.globl sym_2_612
+sym_2_612: la $2, sym_2_612
+.globl sym_2_613
+sym_2_613: la $2, sym_2_613
+.globl sym_2_614
+sym_2_614: la $2, sym_2_614
+.globl sym_2_615
+sym_2_615: la $2, sym_2_615
+.globl sym_2_616
+sym_2_616: la $2, sym_2_616
+.globl sym_2_617
+sym_2_617: la $2, sym_2_617
+.globl sym_2_618
+sym_2_618: la $2, sym_2_618
+.globl sym_2_619
+sym_2_619: la $2, sym_2_619
+.globl sym_2_620
+sym_2_620: la $2, sym_2_620
+.globl sym_2_621
+sym_2_621: la $2, sym_2_621
+.globl sym_2_622
+sym_2_622: la $2, sym_2_622
+.globl sym_2_623
+sym_2_623: la $2, sym_2_623
+.globl sym_2_624
+sym_2_624: la $2, sym_2_624
+.globl sym_2_625
+sym_2_625: la $2, sym_2_625
+.globl sym_2_626
+sym_2_626: la $2, sym_2_626
+.globl sym_2_627
+sym_2_627: la $2, sym_2_627
+.globl sym_2_628
+sym_2_628: la $2, sym_2_628
+.globl sym_2_629
+sym_2_629: la $2, sym_2_629
+.globl sym_2_630
+sym_2_630: la $2, sym_2_630
+.globl sym_2_631
+sym_2_631: la $2, sym_2_631
+.globl sym_2_632
+sym_2_632: la $2, sym_2_632
+.globl sym_2_633
+sym_2_633: la $2, sym_2_633
+.globl sym_2_634
+sym_2_634: la $2, sym_2_634
+.globl sym_2_635
+sym_2_635: la $2, sym_2_635
+.globl sym_2_636
+sym_2_636: la $2, sym_2_636
+.globl sym_2_637
+sym_2_637: la $2, sym_2_637
+.globl sym_2_638
+sym_2_638: la $2, sym_2_638
+.globl sym_2_639
+sym_2_639: la $2, sym_2_639
+.globl sym_2_640
+sym_2_640: la $2, sym_2_640
+.globl sym_2_641
+sym_2_641: la $2, sym_2_641
+.globl sym_2_642
+sym_2_642: la $2, sym_2_642
+.globl sym_2_643
+sym_2_643: la $2, sym_2_643
+.globl sym_2_644
+sym_2_644: la $2, sym_2_644
+.globl sym_2_645
+sym_2_645: la $2, sym_2_645
+.globl sym_2_646
+sym_2_646: la $2, sym_2_646
+.globl sym_2_647
+sym_2_647: la $2, sym_2_647
+.globl sym_2_648
+sym_2_648: la $2, sym_2_648
+.globl sym_2_649
+sym_2_649: la $2, sym_2_649
+.globl sym_2_650
+sym_2_650: la $2, sym_2_650
+.globl sym_2_651
+sym_2_651: la $2, sym_2_651
+.globl sym_2_652
+sym_2_652: la $2, sym_2_652
+.globl sym_2_653
+sym_2_653: la $2, sym_2_653
+.globl sym_2_654
+sym_2_654: la $2, sym_2_654
+.globl sym_2_655
+sym_2_655: la $2, sym_2_655
+.globl sym_2_656
+sym_2_656: la $2, sym_2_656
+.globl sym_2_657
+sym_2_657: la $2, sym_2_657
+.globl sym_2_658
+sym_2_658: la $2, sym_2_658
+.globl sym_2_659
+sym_2_659: la $2, sym_2_659
+.globl sym_2_660
+sym_2_660: la $2, sym_2_660
+.globl sym_2_661
+sym_2_661: la $2, sym_2_661
+.globl sym_2_662
+sym_2_662: la $2, sym_2_662
+.globl sym_2_663
+sym_2_663: la $2, sym_2_663
+.globl sym_2_664
+sym_2_664: la $2, sym_2_664
+.globl sym_2_665
+sym_2_665: la $2, sym_2_665
+.globl sym_2_666
+sym_2_666: la $2, sym_2_666
+.globl sym_2_667
+sym_2_667: la $2, sym_2_667
+.globl sym_2_668
+sym_2_668: la $2, sym_2_668
+.globl sym_2_669
+sym_2_669: la $2, sym_2_669
+.globl sym_2_670
+sym_2_670: la $2, sym_2_670
+.globl sym_2_671
+sym_2_671: la $2, sym_2_671
+.globl sym_2_672
+sym_2_672: la $2, sym_2_672
+.globl sym_2_673
+sym_2_673: la $2, sym_2_673
+.globl sym_2_674
+sym_2_674: la $2, sym_2_674
+.globl sym_2_675
+sym_2_675: la $2, sym_2_675
+.globl sym_2_676
+sym_2_676: la $2, sym_2_676
+.globl sym_2_677
+sym_2_677: la $2, sym_2_677
+.globl sym_2_678
+sym_2_678: la $2, sym_2_678
+.globl sym_2_679
+sym_2_679: la $2, sym_2_679
+.globl sym_2_680
+sym_2_680: la $2, sym_2_680
+.globl sym_2_681
+sym_2_681: la $2, sym_2_681
+.globl sym_2_682
+sym_2_682: la $2, sym_2_682
+.globl sym_2_683
+sym_2_683: la $2, sym_2_683
+.globl sym_2_684
+sym_2_684: la $2, sym_2_684
+.globl sym_2_685
+sym_2_685: la $2, sym_2_685
+.globl sym_2_686
+sym_2_686: la $2, sym_2_686
+.globl sym_2_687
+sym_2_687: la $2, sym_2_687
+.globl sym_2_688
+sym_2_688: la $2, sym_2_688
+.globl sym_2_689
+sym_2_689: la $2, sym_2_689
+.globl sym_2_690
+sym_2_690: la $2, sym_2_690
+.globl sym_2_691
+sym_2_691: la $2, sym_2_691
+.globl sym_2_692
+sym_2_692: la $2, sym_2_692
+.globl sym_2_693
+sym_2_693: la $2, sym_2_693
+.globl sym_2_694
+sym_2_694: la $2, sym_2_694
+.globl sym_2_695
+sym_2_695: la $2, sym_2_695
+.globl sym_2_696
+sym_2_696: la $2, sym_2_696
+.globl sym_2_697
+sym_2_697: la $2, sym_2_697
+.globl sym_2_698
+sym_2_698: la $2, sym_2_698
+.globl sym_2_699
+sym_2_699: la $2, sym_2_699
+.globl sym_2_700
+sym_2_700: la $2, sym_2_700
+.globl sym_2_701
+sym_2_701: la $2, sym_2_701
+.globl sym_2_702
+sym_2_702: la $2, sym_2_702
+.globl sym_2_703
+sym_2_703: la $2, sym_2_703
+.globl sym_2_704
+sym_2_704: la $2, sym_2_704
+.globl sym_2_705
+sym_2_705: la $2, sym_2_705
+.globl sym_2_706
+sym_2_706: la $2, sym_2_706
+.globl sym_2_707
+sym_2_707: la $2, sym_2_707
+.globl sym_2_708
+sym_2_708: la $2, sym_2_708
+.globl sym_2_709
+sym_2_709: la $2, sym_2_709
+.globl sym_2_710
+sym_2_710: la $2, sym_2_710
+.globl sym_2_711
+sym_2_711: la $2, sym_2_711
+.globl sym_2_712
+sym_2_712: la $2, sym_2_712
+.globl sym_2_713
+sym_2_713: la $2, sym_2_713
+.globl sym_2_714
+sym_2_714: la $2, sym_2_714
+.globl sym_2_715
+sym_2_715: la $2, sym_2_715
+.globl sym_2_716
+sym_2_716: la $2, sym_2_716
+.globl sym_2_717
+sym_2_717: la $2, sym_2_717
+.globl sym_2_718
+sym_2_718: la $2, sym_2_718
+.globl sym_2_719
+sym_2_719: la $2, sym_2_719
+.globl sym_2_720
+sym_2_720: la $2, sym_2_720
+.globl sym_2_721
+sym_2_721: la $2, sym_2_721
+.globl sym_2_722
+sym_2_722: la $2, sym_2_722
+.globl sym_2_723
+sym_2_723: la $2, sym_2_723
+.globl sym_2_724
+sym_2_724: la $2, sym_2_724
+.globl sym_2_725
+sym_2_725: la $2, sym_2_725
+.globl sym_2_726
+sym_2_726: la $2, sym_2_726
+.globl sym_2_727
+sym_2_727: la $2, sym_2_727
+.globl sym_2_728
+sym_2_728: la $2, sym_2_728
+.globl sym_2_729
+sym_2_729: la $2, sym_2_729
+.globl sym_2_730
+sym_2_730: la $2, sym_2_730
+.globl sym_2_731
+sym_2_731: la $2, sym_2_731
+.globl sym_2_732
+sym_2_732: la $2, sym_2_732
+.globl sym_2_733
+sym_2_733: la $2, sym_2_733
+.globl sym_2_734
+sym_2_734: la $2, sym_2_734
+.globl sym_2_735
+sym_2_735: la $2, sym_2_735
+.globl sym_2_736
+sym_2_736: la $2, sym_2_736
+.globl sym_2_737
+sym_2_737: la $2, sym_2_737
+.globl sym_2_738
+sym_2_738: la $2, sym_2_738
+.globl sym_2_739
+sym_2_739: la $2, sym_2_739
+.globl sym_2_740
+sym_2_740: la $2, sym_2_740
+.globl sym_2_741
+sym_2_741: la $2, sym_2_741
+.globl sym_2_742
+sym_2_742: la $2, sym_2_742
+.globl sym_2_743
+sym_2_743: la $2, sym_2_743
+.globl sym_2_744
+sym_2_744: la $2, sym_2_744
+.globl sym_2_745
+sym_2_745: la $2, sym_2_745
+.globl sym_2_746
+sym_2_746: la $2, sym_2_746
+.globl sym_2_747
+sym_2_747: la $2, sym_2_747
+.globl sym_2_748
+sym_2_748: la $2, sym_2_748
+.globl sym_2_749
+sym_2_749: la $2, sym_2_749
+.globl sym_2_750
+sym_2_750: la $2, sym_2_750
+.globl sym_2_751
+sym_2_751: la $2, sym_2_751
+.globl sym_2_752
+sym_2_752: la $2, sym_2_752
+.globl sym_2_753
+sym_2_753: la $2, sym_2_753
+.globl sym_2_754
+sym_2_754: la $2, sym_2_754
+.globl sym_2_755
+sym_2_755: la $2, sym_2_755
+.globl sym_2_756
+sym_2_756: la $2, sym_2_756
+.globl sym_2_757
+sym_2_757: la $2, sym_2_757
+.globl sym_2_758
+sym_2_758: la $2, sym_2_758
+.globl sym_2_759
+sym_2_759: la $2, sym_2_759
+.globl sym_2_760
+sym_2_760: la $2, sym_2_760
+.globl sym_2_761
+sym_2_761: la $2, sym_2_761
+.globl sym_2_762
+sym_2_762: la $2, sym_2_762
+.globl sym_2_763
+sym_2_763: la $2, sym_2_763
+.globl sym_2_764
+sym_2_764: la $2, sym_2_764
+.globl sym_2_765
+sym_2_765: la $2, sym_2_765
+.globl sym_2_766
+sym_2_766: la $2, sym_2_766
+.globl sym_2_767
+sym_2_767: la $2, sym_2_767
+.globl sym_2_768
+sym_2_768: la $2, sym_2_768
+.globl sym_2_769
+sym_2_769: la $2, sym_2_769
+.globl sym_2_770
+sym_2_770: la $2, sym_2_770
+.globl sym_2_771
+sym_2_771: la $2, sym_2_771
+.globl sym_2_772
+sym_2_772: la $2, sym_2_772
+.globl sym_2_773
+sym_2_773: la $2, sym_2_773
+.globl sym_2_774
+sym_2_774: la $2, sym_2_774
+.globl sym_2_775
+sym_2_775: la $2, sym_2_775
+.globl sym_2_776
+sym_2_776: la $2, sym_2_776
+.globl sym_2_777
+sym_2_777: la $2, sym_2_777
+.globl sym_2_778
+sym_2_778: la $2, sym_2_778
+.globl sym_2_779
+sym_2_779: la $2, sym_2_779
+.globl sym_2_780
+sym_2_780: la $2, sym_2_780
+.globl sym_2_781
+sym_2_781: la $2, sym_2_781
+.globl sym_2_782
+sym_2_782: la $2, sym_2_782
+.globl sym_2_783
+sym_2_783: la $2, sym_2_783
+.globl sym_2_784
+sym_2_784: la $2, sym_2_784
+.globl sym_2_785
+sym_2_785: la $2, sym_2_785
+.globl sym_2_786
+sym_2_786: la $2, sym_2_786
+.globl sym_2_787
+sym_2_787: la $2, sym_2_787
+.globl sym_2_788
+sym_2_788: la $2, sym_2_788
+.globl sym_2_789
+sym_2_789: la $2, sym_2_789
+.globl sym_2_790
+sym_2_790: la $2, sym_2_790
+.globl sym_2_791
+sym_2_791: la $2, sym_2_791
+.globl sym_2_792
+sym_2_792: la $2, sym_2_792
+.globl sym_2_793
+sym_2_793: la $2, sym_2_793
+.globl sym_2_794
+sym_2_794: la $2, sym_2_794
+.globl sym_2_795
+sym_2_795: la $2, sym_2_795
+.globl sym_2_796
+sym_2_796: la $2, sym_2_796
+.globl sym_2_797
+sym_2_797: la $2, sym_2_797
+.globl sym_2_798
+sym_2_798: la $2, sym_2_798
+.globl sym_2_799
+sym_2_799: la $2, sym_2_799
+.globl sym_2_800
+sym_2_800: la $2, sym_2_800
+.globl sym_2_801
+sym_2_801: la $2, sym_2_801
+.globl sym_2_802
+sym_2_802: la $2, sym_2_802
+.globl sym_2_803
+sym_2_803: la $2, sym_2_803
+.globl sym_2_804
+sym_2_804: la $2, sym_2_804
+.globl sym_2_805
+sym_2_805: la $2, sym_2_805
+.globl sym_2_806
+sym_2_806: la $2, sym_2_806
+.globl sym_2_807
+sym_2_807: la $2, sym_2_807
+.globl sym_2_808
+sym_2_808: la $2, sym_2_808
+.globl sym_2_809
+sym_2_809: la $2, sym_2_809
+.globl sym_2_810
+sym_2_810: la $2, sym_2_810
+.globl sym_2_811
+sym_2_811: la $2, sym_2_811
+.globl sym_2_812
+sym_2_812: la $2, sym_2_812
+.globl sym_2_813
+sym_2_813: la $2, sym_2_813
+.globl sym_2_814
+sym_2_814: la $2, sym_2_814
+.globl sym_2_815
+sym_2_815: la $2, sym_2_815
+.globl sym_2_816
+sym_2_816: la $2, sym_2_816
+.globl sym_2_817
+sym_2_817: la $2, sym_2_817
+.globl sym_2_818
+sym_2_818: la $2, sym_2_818
+.globl sym_2_819
+sym_2_819: la $2, sym_2_819
+.globl sym_2_820
+sym_2_820: la $2, sym_2_820
+.globl sym_2_821
+sym_2_821: la $2, sym_2_821
+.globl sym_2_822
+sym_2_822: la $2, sym_2_822
+.globl sym_2_823
+sym_2_823: la $2, sym_2_823
+.globl sym_2_824
+sym_2_824: la $2, sym_2_824
+.globl sym_2_825
+sym_2_825: la $2, sym_2_825
+.globl sym_2_826
+sym_2_826: la $2, sym_2_826
+.globl sym_2_827
+sym_2_827: la $2, sym_2_827
+.globl sym_2_828
+sym_2_828: la $2, sym_2_828
+.globl sym_2_829
+sym_2_829: la $2, sym_2_829
+.globl sym_2_830
+sym_2_830: la $2, sym_2_830
+.globl sym_2_831
+sym_2_831: la $2, sym_2_831
+.globl sym_2_832
+sym_2_832: la $2, sym_2_832
+.globl sym_2_833
+sym_2_833: la $2, sym_2_833
+.globl sym_2_834
+sym_2_834: la $2, sym_2_834
+.globl sym_2_835
+sym_2_835: la $2, sym_2_835
+.globl sym_2_836
+sym_2_836: la $2, sym_2_836
+.globl sym_2_837
+sym_2_837: la $2, sym_2_837
+.globl sym_2_838
+sym_2_838: la $2, sym_2_838
+.globl sym_2_839
+sym_2_839: la $2, sym_2_839
+.globl sym_2_840
+sym_2_840: la $2, sym_2_840
+.globl sym_2_841
+sym_2_841: la $2, sym_2_841
+.globl sym_2_842
+sym_2_842: la $2, sym_2_842
+.globl sym_2_843
+sym_2_843: la $2, sym_2_843
+.globl sym_2_844
+sym_2_844: la $2, sym_2_844
+.globl sym_2_845
+sym_2_845: la $2, sym_2_845
+.globl sym_2_846
+sym_2_846: la $2, sym_2_846
+.globl sym_2_847
+sym_2_847: la $2, sym_2_847
+.globl sym_2_848
+sym_2_848: la $2, sym_2_848
+.globl sym_2_849
+sym_2_849: la $2, sym_2_849
+.globl sym_2_850
+sym_2_850: la $2, sym_2_850
+.globl sym_2_851
+sym_2_851: la $2, sym_2_851
+.globl sym_2_852
+sym_2_852: la $2, sym_2_852
+.globl sym_2_853
+sym_2_853: la $2, sym_2_853
+.globl sym_2_854
+sym_2_854: la $2, sym_2_854
+.globl sym_2_855
+sym_2_855: la $2, sym_2_855
+.globl sym_2_856
+sym_2_856: la $2, sym_2_856
+.globl sym_2_857
+sym_2_857: la $2, sym_2_857
+.globl sym_2_858
+sym_2_858: la $2, sym_2_858
+.globl sym_2_859
+sym_2_859: la $2, sym_2_859
+.globl sym_2_860
+sym_2_860: la $2, sym_2_860
+.globl sym_2_861
+sym_2_861: la $2, sym_2_861
+.globl sym_2_862
+sym_2_862: la $2, sym_2_862
+.globl sym_2_863
+sym_2_863: la $2, sym_2_863
+.globl sym_2_864
+sym_2_864: la $2, sym_2_864
+.globl sym_2_865
+sym_2_865: la $2, sym_2_865
+.globl sym_2_866
+sym_2_866: la $2, sym_2_866
+.globl sym_2_867
+sym_2_867: la $2, sym_2_867
+.globl sym_2_868
+sym_2_868: la $2, sym_2_868
+.globl sym_2_869
+sym_2_869: la $2, sym_2_869
+.globl sym_2_870
+sym_2_870: la $2, sym_2_870
+.globl sym_2_871
+sym_2_871: la $2, sym_2_871
+.globl sym_2_872
+sym_2_872: la $2, sym_2_872
+.globl sym_2_873
+sym_2_873: la $2, sym_2_873
+.globl sym_2_874
+sym_2_874: la $2, sym_2_874
+.globl sym_2_875
+sym_2_875: la $2, sym_2_875
+.globl sym_2_876
+sym_2_876: la $2, sym_2_876
+.globl sym_2_877
+sym_2_877: la $2, sym_2_877
+.globl sym_2_878
+sym_2_878: la $2, sym_2_878
+.globl sym_2_879
+sym_2_879: la $2, sym_2_879
+.globl sym_2_880
+sym_2_880: la $2, sym_2_880
+.globl sym_2_881
+sym_2_881: la $2, sym_2_881
+.globl sym_2_882
+sym_2_882: la $2, sym_2_882
+.globl sym_2_883
+sym_2_883: la $2, sym_2_883
+.globl sym_2_884
+sym_2_884: la $2, sym_2_884
+.globl sym_2_885
+sym_2_885: la $2, sym_2_885
+.globl sym_2_886
+sym_2_886: la $2, sym_2_886
+.globl sym_2_887
+sym_2_887: la $2, sym_2_887
+.globl sym_2_888
+sym_2_888: la $2, sym_2_888
+.globl sym_2_889
+sym_2_889: la $2, sym_2_889
+.globl sym_2_890
+sym_2_890: la $2, sym_2_890
+.globl sym_2_891
+sym_2_891: la $2, sym_2_891
+.globl sym_2_892
+sym_2_892: la $2, sym_2_892
+.globl sym_2_893
+sym_2_893: la $2, sym_2_893
+.globl sym_2_894
+sym_2_894: la $2, sym_2_894
+.globl sym_2_895
+sym_2_895: la $2, sym_2_895
+.globl sym_2_896
+sym_2_896: la $2, sym_2_896
+.globl sym_2_897
+sym_2_897: la $2, sym_2_897
+.globl sym_2_898
+sym_2_898: la $2, sym_2_898
+.globl sym_2_899
+sym_2_899: la $2, sym_2_899
+.globl sym_2_900
+sym_2_900: la $2, sym_2_900
+.globl sym_2_901
+sym_2_901: la $2, sym_2_901
+.globl sym_2_902
+sym_2_902: la $2, sym_2_902
+.globl sym_2_903
+sym_2_903: la $2, sym_2_903
+.globl sym_2_904
+sym_2_904: la $2, sym_2_904
+.globl sym_2_905
+sym_2_905: la $2, sym_2_905
+.globl sym_2_906
+sym_2_906: la $2, sym_2_906
+.globl sym_2_907
+sym_2_907: la $2, sym_2_907
+.globl sym_2_908
+sym_2_908: la $2, sym_2_908
+.globl sym_2_909
+sym_2_909: la $2, sym_2_909
+.globl sym_2_910
+sym_2_910: la $2, sym_2_910
+.globl sym_2_911
+sym_2_911: la $2, sym_2_911
+.globl sym_2_912
+sym_2_912: la $2, sym_2_912
+.globl sym_2_913
+sym_2_913: la $2, sym_2_913
+.globl sym_2_914
+sym_2_914: la $2, sym_2_914
+.globl sym_2_915
+sym_2_915: la $2, sym_2_915
+.globl sym_2_916
+sym_2_916: la $2, sym_2_916
+.globl sym_2_917
+sym_2_917: la $2, sym_2_917
+.globl sym_2_918
+sym_2_918: la $2, sym_2_918
+.globl sym_2_919
+sym_2_919: la $2, sym_2_919
+.globl sym_2_920
+sym_2_920: la $2, sym_2_920
+.globl sym_2_921
+sym_2_921: la $2, sym_2_921
+.globl sym_2_922
+sym_2_922: la $2, sym_2_922
+.globl sym_2_923
+sym_2_923: la $2, sym_2_923
+.globl sym_2_924
+sym_2_924: la $2, sym_2_924
+.globl sym_2_925
+sym_2_925: la $2, sym_2_925
+.globl sym_2_926
+sym_2_926: la $2, sym_2_926
+.globl sym_2_927
+sym_2_927: la $2, sym_2_927
+.globl sym_2_928
+sym_2_928: la $2, sym_2_928
+.globl sym_2_929
+sym_2_929: la $2, sym_2_929
+.globl sym_2_930
+sym_2_930: la $2, sym_2_930
+.globl sym_2_931
+sym_2_931: la $2, sym_2_931
+.globl sym_2_932
+sym_2_932: la $2, sym_2_932
+.globl sym_2_933
+sym_2_933: la $2, sym_2_933
+.globl sym_2_934
+sym_2_934: la $2, sym_2_934
+.globl sym_2_935
+sym_2_935: la $2, sym_2_935
+.globl sym_2_936
+sym_2_936: la $2, sym_2_936
+.globl sym_2_937
+sym_2_937: la $2, sym_2_937
+.globl sym_2_938
+sym_2_938: la $2, sym_2_938
+.globl sym_2_939
+sym_2_939: la $2, sym_2_939
+.globl sym_2_940
+sym_2_940: la $2, sym_2_940
+.globl sym_2_941
+sym_2_941: la $2, sym_2_941
+.globl sym_2_942
+sym_2_942: la $2, sym_2_942
+.globl sym_2_943
+sym_2_943: la $2, sym_2_943
+.globl sym_2_944
+sym_2_944: la $2, sym_2_944
+.globl sym_2_945
+sym_2_945: la $2, sym_2_945
+.globl sym_2_946
+sym_2_946: la $2, sym_2_946
+.globl sym_2_947
+sym_2_947: la $2, sym_2_947
+.globl sym_2_948
+sym_2_948: la $2, sym_2_948
+.globl sym_2_949
+sym_2_949: la $2, sym_2_949
+.globl sym_2_950
+sym_2_950: la $2, sym_2_950
+.globl sym_2_951
+sym_2_951: la $2, sym_2_951
+.globl sym_2_952
+sym_2_952: la $2, sym_2_952
+.globl sym_2_953
+sym_2_953: la $2, sym_2_953
+.globl sym_2_954
+sym_2_954: la $2, sym_2_954
+.globl sym_2_955
+sym_2_955: la $2, sym_2_955
+.globl sym_2_956
+sym_2_956: la $2, sym_2_956
+.globl sym_2_957
+sym_2_957: la $2, sym_2_957
+.globl sym_2_958
+sym_2_958: la $2, sym_2_958
+.globl sym_2_959
+sym_2_959: la $2, sym_2_959
+.globl sym_2_960
+sym_2_960: la $2, sym_2_960
+.globl sym_2_961
+sym_2_961: la $2, sym_2_961
+.globl sym_2_962
+sym_2_962: la $2, sym_2_962
+.globl sym_2_963
+sym_2_963: la $2, sym_2_963
+.globl sym_2_964
+sym_2_964: la $2, sym_2_964
+.globl sym_2_965
+sym_2_965: la $2, sym_2_965
+.globl sym_2_966
+sym_2_966: la $2, sym_2_966
+.globl sym_2_967
+sym_2_967: la $2, sym_2_967
+.globl sym_2_968
+sym_2_968: la $2, sym_2_968
+.globl sym_2_969
+sym_2_969: la $2, sym_2_969
+.globl sym_2_970
+sym_2_970: la $2, sym_2_970
+.globl sym_2_971
+sym_2_971: la $2, sym_2_971
+.globl sym_2_972
+sym_2_972: la $2, sym_2_972
+.globl sym_2_973
+sym_2_973: la $2, sym_2_973
+.globl sym_2_974
+sym_2_974: la $2, sym_2_974
+.globl sym_2_975
+sym_2_975: la $2, sym_2_975
+.globl sym_2_976
+sym_2_976: la $2, sym_2_976
+.globl sym_2_977
+sym_2_977: la $2, sym_2_977
+.globl sym_2_978
+sym_2_978: la $2, sym_2_978
+.globl sym_2_979
+sym_2_979: la $2, sym_2_979
+.globl sym_2_980
+sym_2_980: la $2, sym_2_980
+.globl sym_2_981
+sym_2_981: la $2, sym_2_981
+.globl sym_2_982
+sym_2_982: la $2, sym_2_982
+.globl sym_2_983
+sym_2_983: la $2, sym_2_983
+.globl sym_2_984
+sym_2_984: la $2, sym_2_984
+.globl sym_2_985
+sym_2_985: la $2, sym_2_985
+.globl sym_2_986
+sym_2_986: la $2, sym_2_986
+.globl sym_2_987
+sym_2_987: la $2, sym_2_987
+.globl sym_2_988
+sym_2_988: la $2, sym_2_988
+.globl sym_2_989
+sym_2_989: la $2, sym_2_989
+.globl sym_2_990
+sym_2_990: la $2, sym_2_990
+.globl sym_2_991
+sym_2_991: la $2, sym_2_991
+.globl sym_2_992
+sym_2_992: la $2, sym_2_992
+.globl sym_2_993
+sym_2_993: la $2, sym_2_993
+.globl sym_2_994
+sym_2_994: la $2, sym_2_994
+.globl sym_2_995
+sym_2_995: la $2, sym_2_995
+.globl sym_2_996
+sym_2_996: la $2, sym_2_996
+.globl sym_2_997
+sym_2_997: la $2, sym_2_997
+.globl sym_2_998
+sym_2_998: la $2, sym_2_998
+.globl sym_2_999
+sym_2_999: la $2, sym_2_999
+.globl sym_2_1000
+sym_2_1000: la $2, sym_2_1000
+.globl sym_2_1001
+sym_2_1001: la $2, sym_2_1001
+.globl sym_2_1002
+sym_2_1002: la $2, sym_2_1002
+.globl sym_2_1003
+sym_2_1003: la $2, sym_2_1003
+.globl sym_2_1004
+sym_2_1004: la $2, sym_2_1004
+.globl sym_2_1005
+sym_2_1005: la $2, sym_2_1005
+.globl sym_2_1006
+sym_2_1006: la $2, sym_2_1006
+.globl sym_2_1007
+sym_2_1007: la $2, sym_2_1007
+.globl sym_2_1008
+sym_2_1008: la $2, sym_2_1008
+.globl sym_2_1009
+sym_2_1009: la $2, sym_2_1009
+.globl sym_2_1010
+sym_2_1010: la $2, sym_2_1010
+.globl sym_2_1011
+sym_2_1011: la $2, sym_2_1011
+.globl sym_2_1012
+sym_2_1012: la $2, sym_2_1012
+.globl sym_2_1013
+sym_2_1013: la $2, sym_2_1013
+.globl sym_2_1014
+sym_2_1014: la $2, sym_2_1014
+.globl sym_2_1015
+sym_2_1015: la $2, sym_2_1015
+.globl sym_2_1016
+sym_2_1016: la $2, sym_2_1016
+.globl sym_2_1017
+sym_2_1017: la $2, sym_2_1017
+.globl sym_2_1018
+sym_2_1018: la $2, sym_2_1018
+.globl sym_2_1019
+sym_2_1019: la $2, sym_2_1019
+.globl sym_2_1020
+sym_2_1020: la $2, sym_2_1020
+.globl sym_2_1021
+sym_2_1021: la $2, sym_2_1021
+.globl sym_2_1022
+sym_2_1022: la $2, sym_2_1022
+.globl sym_2_1023
+sym_2_1023: la $2, sym_2_1023
+.globl sym_2_1024
+sym_2_1024: la $2, sym_2_1024
+.globl sym_2_1025
+sym_2_1025: la $2, sym_2_1025
+.globl sym_2_1026
+sym_2_1026: la $2, sym_2_1026
+.globl sym_2_1027
+sym_2_1027: la $2, sym_2_1027
+.globl sym_2_1028
+sym_2_1028: la $2, sym_2_1028
+.globl sym_2_1029
+sym_2_1029: la $2, sym_2_1029
+.globl sym_2_1030
+sym_2_1030: la $2, sym_2_1030
+.globl sym_2_1031
+sym_2_1031: la $2, sym_2_1031
+.globl sym_2_1032
+sym_2_1032: la $2, sym_2_1032
+.globl sym_2_1033
+sym_2_1033: la $2, sym_2_1033
+.globl sym_2_1034
+sym_2_1034: la $2, sym_2_1034
+.globl sym_2_1035
+sym_2_1035: la $2, sym_2_1035
+.globl sym_2_1036
+sym_2_1036: la $2, sym_2_1036
+.globl sym_2_1037
+sym_2_1037: la $2, sym_2_1037
+.globl sym_2_1038
+sym_2_1038: la $2, sym_2_1038
+.globl sym_2_1039
+sym_2_1039: la $2, sym_2_1039
+.globl sym_2_1040
+sym_2_1040: la $2, sym_2_1040
+.globl sym_2_1041
+sym_2_1041: la $2, sym_2_1041
+.globl sym_2_1042
+sym_2_1042: la $2, sym_2_1042
+.globl sym_2_1043
+sym_2_1043: la $2, sym_2_1043
+.globl sym_2_1044
+sym_2_1044: la $2, sym_2_1044
+.globl sym_2_1045
+sym_2_1045: la $2, sym_2_1045
+.globl sym_2_1046
+sym_2_1046: la $2, sym_2_1046
+.globl sym_2_1047
+sym_2_1047: la $2, sym_2_1047
+.globl sym_2_1048
+sym_2_1048: la $2, sym_2_1048
+.globl sym_2_1049
+sym_2_1049: la $2, sym_2_1049
+.globl sym_2_1050
+sym_2_1050: la $2, sym_2_1050
+.globl sym_2_1051
+sym_2_1051: la $2, sym_2_1051
+.globl sym_2_1052
+sym_2_1052: la $2, sym_2_1052
+.globl sym_2_1053
+sym_2_1053: la $2, sym_2_1053
+.globl sym_2_1054
+sym_2_1054: la $2, sym_2_1054
+.globl sym_2_1055
+sym_2_1055: la $2, sym_2_1055
+.globl sym_2_1056
+sym_2_1056: la $2, sym_2_1056
+.globl sym_2_1057
+sym_2_1057: la $2, sym_2_1057
+.globl sym_2_1058
+sym_2_1058: la $2, sym_2_1058
+.globl sym_2_1059
+sym_2_1059: la $2, sym_2_1059
+.globl sym_2_1060
+sym_2_1060: la $2, sym_2_1060
+.globl sym_2_1061
+sym_2_1061: la $2, sym_2_1061
+.globl sym_2_1062
+sym_2_1062: la $2, sym_2_1062
+.globl sym_2_1063
+sym_2_1063: la $2, sym_2_1063
+.globl sym_2_1064
+sym_2_1064: la $2, sym_2_1064
+.globl sym_2_1065
+sym_2_1065: la $2, sym_2_1065
+.globl sym_2_1066
+sym_2_1066: la $2, sym_2_1066
+.globl sym_2_1067
+sym_2_1067: la $2, sym_2_1067
+.globl sym_2_1068
+sym_2_1068: la $2, sym_2_1068
+.globl sym_2_1069
+sym_2_1069: la $2, sym_2_1069
+.globl sym_2_1070
+sym_2_1070: la $2, sym_2_1070
+.globl sym_2_1071
+sym_2_1071: la $2, sym_2_1071
+.globl sym_2_1072
+sym_2_1072: la $2, sym_2_1072
+.globl sym_2_1073
+sym_2_1073: la $2, sym_2_1073
+.globl sym_2_1074
+sym_2_1074: la $2, sym_2_1074
+.globl sym_2_1075
+sym_2_1075: la $2, sym_2_1075
+.globl sym_2_1076
+sym_2_1076: la $2, sym_2_1076
+.globl sym_2_1077
+sym_2_1077: la $2, sym_2_1077
+.globl sym_2_1078
+sym_2_1078: la $2, sym_2_1078
+.globl sym_2_1079
+sym_2_1079: la $2, sym_2_1079
+.globl sym_2_1080
+sym_2_1080: la $2, sym_2_1080
+.globl sym_2_1081
+sym_2_1081: la $2, sym_2_1081
+.globl sym_2_1082
+sym_2_1082: la $2, sym_2_1082
+.globl sym_2_1083
+sym_2_1083: la $2, sym_2_1083
+.globl sym_2_1084
+sym_2_1084: la $2, sym_2_1084
+.globl sym_2_1085
+sym_2_1085: la $2, sym_2_1085
+.globl sym_2_1086
+sym_2_1086: la $2, sym_2_1086
+.globl sym_2_1087
+sym_2_1087: la $2, sym_2_1087
+.globl sym_2_1088
+sym_2_1088: la $2, sym_2_1088
+.globl sym_2_1089
+sym_2_1089: la $2, sym_2_1089
+.globl sym_2_1090
+sym_2_1090: la $2, sym_2_1090
+.globl sym_2_1091
+sym_2_1091: la $2, sym_2_1091
+.globl sym_2_1092
+sym_2_1092: la $2, sym_2_1092
+.globl sym_2_1093
+sym_2_1093: la $2, sym_2_1093
+.globl sym_2_1094
+sym_2_1094: la $2, sym_2_1094
+.globl sym_2_1095
+sym_2_1095: la $2, sym_2_1095
+.globl sym_2_1096
+sym_2_1096: la $2, sym_2_1096
+.globl sym_2_1097
+sym_2_1097: la $2, sym_2_1097
+.globl sym_2_1098
+sym_2_1098: la $2, sym_2_1098
+.globl sym_2_1099
+sym_2_1099: la $2, sym_2_1099
+.globl sym_2_1100
+sym_2_1100: la $2, sym_2_1100
+.globl sym_2_1101
+sym_2_1101: la $2, sym_2_1101
+.globl sym_2_1102
+sym_2_1102: la $2, sym_2_1102
+.globl sym_2_1103
+sym_2_1103: la $2, sym_2_1103
+.globl sym_2_1104
+sym_2_1104: la $2, sym_2_1104
+.globl sym_2_1105
+sym_2_1105: la $2, sym_2_1105
+.globl sym_2_1106
+sym_2_1106: la $2, sym_2_1106
+.globl sym_2_1107
+sym_2_1107: la $2, sym_2_1107
+.globl sym_2_1108
+sym_2_1108: la $2, sym_2_1108
+.globl sym_2_1109
+sym_2_1109: la $2, sym_2_1109
+.globl sym_2_1110
+sym_2_1110: la $2, sym_2_1110
+.globl sym_2_1111
+sym_2_1111: la $2, sym_2_1111
+.globl sym_2_1112
+sym_2_1112: la $2, sym_2_1112
+.globl sym_2_1113
+sym_2_1113: la $2, sym_2_1113
+.globl sym_2_1114
+sym_2_1114: la $2, sym_2_1114
+.globl sym_2_1115
+sym_2_1115: la $2, sym_2_1115
+.globl sym_2_1116
+sym_2_1116: la $2, sym_2_1116
+.globl sym_2_1117
+sym_2_1117: la $2, sym_2_1117
+.globl sym_2_1118
+sym_2_1118: la $2, sym_2_1118
+.globl sym_2_1119
+sym_2_1119: la $2, sym_2_1119
+.globl sym_2_1120
+sym_2_1120: la $2, sym_2_1120
+.globl sym_2_1121
+sym_2_1121: la $2, sym_2_1121
+.globl sym_2_1122
+sym_2_1122: la $2, sym_2_1122
+.globl sym_2_1123
+sym_2_1123: la $2, sym_2_1123
+.globl sym_2_1124
+sym_2_1124: la $2, sym_2_1124
+.globl sym_2_1125
+sym_2_1125: la $2, sym_2_1125
+.globl sym_2_1126
+sym_2_1126: la $2, sym_2_1126
+.globl sym_2_1127
+sym_2_1127: la $2, sym_2_1127
+.globl sym_2_1128
+sym_2_1128: la $2, sym_2_1128
+.globl sym_2_1129
+sym_2_1129: la $2, sym_2_1129
+.globl sym_2_1130
+sym_2_1130: la $2, sym_2_1130
+.globl sym_2_1131
+sym_2_1131: la $2, sym_2_1131
+.globl sym_2_1132
+sym_2_1132: la $2, sym_2_1132
+.globl sym_2_1133
+sym_2_1133: la $2, sym_2_1133
+.globl sym_2_1134
+sym_2_1134: la $2, sym_2_1134
+.globl sym_2_1135
+sym_2_1135: la $2, sym_2_1135
+.globl sym_2_1136
+sym_2_1136: la $2, sym_2_1136
+.globl sym_2_1137
+sym_2_1137: la $2, sym_2_1137
+.globl sym_2_1138
+sym_2_1138: la $2, sym_2_1138
+.globl sym_2_1139
+sym_2_1139: la $2, sym_2_1139
+.globl sym_2_1140
+sym_2_1140: la $2, sym_2_1140
+.globl sym_2_1141
+sym_2_1141: la $2, sym_2_1141
+.globl sym_2_1142
+sym_2_1142: la $2, sym_2_1142
+.globl sym_2_1143
+sym_2_1143: la $2, sym_2_1143
+.globl sym_2_1144
+sym_2_1144: la $2, sym_2_1144
+.globl sym_2_1145
+sym_2_1145: la $2, sym_2_1145
+.globl sym_2_1146
+sym_2_1146: la $2, sym_2_1146
+.globl sym_2_1147
+sym_2_1147: la $2, sym_2_1147
+.globl sym_2_1148
+sym_2_1148: la $2, sym_2_1148
+.globl sym_2_1149
+sym_2_1149: la $2, sym_2_1149
+.globl sym_2_1150
+sym_2_1150: la $2, sym_2_1150
+.globl sym_2_1151
+sym_2_1151: la $2, sym_2_1151
+.globl sym_2_1152
+sym_2_1152: la $2, sym_2_1152
+.globl sym_2_1153
+sym_2_1153: la $2, sym_2_1153
+.globl sym_2_1154
+sym_2_1154: la $2, sym_2_1154
+.globl sym_2_1155
+sym_2_1155: la $2, sym_2_1155
+.globl sym_2_1156
+sym_2_1156: la $2, sym_2_1156
+.globl sym_2_1157
+sym_2_1157: la $2, sym_2_1157
+.globl sym_2_1158
+sym_2_1158: la $2, sym_2_1158
+.globl sym_2_1159
+sym_2_1159: la $2, sym_2_1159
+.globl sym_2_1160
+sym_2_1160: la $2, sym_2_1160
+.globl sym_2_1161
+sym_2_1161: la $2, sym_2_1161
+.globl sym_2_1162
+sym_2_1162: la $2, sym_2_1162
+.globl sym_2_1163
+sym_2_1163: la $2, sym_2_1163
+.globl sym_2_1164
+sym_2_1164: la $2, sym_2_1164
+.globl sym_2_1165
+sym_2_1165: la $2, sym_2_1165
+.globl sym_2_1166
+sym_2_1166: la $2, sym_2_1166
+.globl sym_2_1167
+sym_2_1167: la $2, sym_2_1167
+.globl sym_2_1168
+sym_2_1168: la $2, sym_2_1168
+.globl sym_2_1169
+sym_2_1169: la $2, sym_2_1169
+.globl sym_2_1170
+sym_2_1170: la $2, sym_2_1170
+.globl sym_2_1171
+sym_2_1171: la $2, sym_2_1171
+.globl sym_2_1172
+sym_2_1172: la $2, sym_2_1172
+.globl sym_2_1173
+sym_2_1173: la $2, sym_2_1173
+.globl sym_2_1174
+sym_2_1174: la $2, sym_2_1174
+.globl sym_2_1175
+sym_2_1175: la $2, sym_2_1175
+.globl sym_2_1176
+sym_2_1176: la $2, sym_2_1176
+.globl sym_2_1177
+sym_2_1177: la $2, sym_2_1177
+.globl sym_2_1178
+sym_2_1178: la $2, sym_2_1178
+.globl sym_2_1179
+sym_2_1179: la $2, sym_2_1179
+.globl sym_2_1180
+sym_2_1180: la $2, sym_2_1180
+.globl sym_2_1181
+sym_2_1181: la $2, sym_2_1181
+.globl sym_2_1182
+sym_2_1182: la $2, sym_2_1182
+.globl sym_2_1183
+sym_2_1183: la $2, sym_2_1183
+.globl sym_2_1184
+sym_2_1184: la $2, sym_2_1184
+.globl sym_2_1185
+sym_2_1185: la $2, sym_2_1185
+.globl sym_2_1186
+sym_2_1186: la $2, sym_2_1186
+.globl sym_2_1187
+sym_2_1187: la $2, sym_2_1187
+.globl sym_2_1188
+sym_2_1188: la $2, sym_2_1188
+.globl sym_2_1189
+sym_2_1189: la $2, sym_2_1189
+.globl sym_2_1190
+sym_2_1190: la $2, sym_2_1190
+.globl sym_2_1191
+sym_2_1191: la $2, sym_2_1191
+.globl sym_2_1192
+sym_2_1192: la $2, sym_2_1192
+.globl sym_2_1193
+sym_2_1193: la $2, sym_2_1193
+.globl sym_2_1194
+sym_2_1194: la $2, sym_2_1194
+.globl sym_2_1195
+sym_2_1195: la $2, sym_2_1195
+.globl sym_2_1196
+sym_2_1196: la $2, sym_2_1196
+.globl sym_2_1197
+sym_2_1197: la $2, sym_2_1197
+.globl sym_2_1198
+sym_2_1198: la $2, sym_2_1198
+.globl sym_2_1199
+sym_2_1199: la $2, sym_2_1199
+.globl sym_2_1200
+sym_2_1200: la $2, sym_2_1200
+.globl sym_2_1201
+sym_2_1201: la $2, sym_2_1201
+.globl sym_2_1202
+sym_2_1202: la $2, sym_2_1202
+.globl sym_2_1203
+sym_2_1203: la $2, sym_2_1203
+.globl sym_2_1204
+sym_2_1204: la $2, sym_2_1204
+.globl sym_2_1205
+sym_2_1205: la $2, sym_2_1205
+.globl sym_2_1206
+sym_2_1206: la $2, sym_2_1206
+.globl sym_2_1207
+sym_2_1207: la $2, sym_2_1207
+.globl sym_2_1208
+sym_2_1208: la $2, sym_2_1208
+.globl sym_2_1209
+sym_2_1209: la $2, sym_2_1209
+.globl sym_2_1210
+sym_2_1210: la $2, sym_2_1210
+.globl sym_2_1211
+sym_2_1211: la $2, sym_2_1211
+.globl sym_2_1212
+sym_2_1212: la $2, sym_2_1212
+.globl sym_2_1213
+sym_2_1213: la $2, sym_2_1213
+.globl sym_2_1214
+sym_2_1214: la $2, sym_2_1214
+.globl sym_2_1215
+sym_2_1215: la $2, sym_2_1215
+.globl sym_2_1216
+sym_2_1216: la $2, sym_2_1216
+.globl sym_2_1217
+sym_2_1217: la $2, sym_2_1217
+.globl sym_2_1218
+sym_2_1218: la $2, sym_2_1218
+.globl sym_2_1219
+sym_2_1219: la $2, sym_2_1219
+.globl sym_2_1220
+sym_2_1220: la $2, sym_2_1220
+.globl sym_2_1221
+sym_2_1221: la $2, sym_2_1221
+.globl sym_2_1222
+sym_2_1222: la $2, sym_2_1222
+.globl sym_2_1223
+sym_2_1223: la $2, sym_2_1223
+.globl sym_2_1224
+sym_2_1224: la $2, sym_2_1224
+.globl sym_2_1225
+sym_2_1225: la $2, sym_2_1225
+.globl sym_2_1226
+sym_2_1226: la $2, sym_2_1226
+.globl sym_2_1227
+sym_2_1227: la $2, sym_2_1227
+.globl sym_2_1228
+sym_2_1228: la $2, sym_2_1228
+.globl sym_2_1229
+sym_2_1229: la $2, sym_2_1229
+.globl sym_2_1230
+sym_2_1230: la $2, sym_2_1230
+.globl sym_2_1231
+sym_2_1231: la $2, sym_2_1231
+.globl sym_2_1232
+sym_2_1232: la $2, sym_2_1232
+.globl sym_2_1233
+sym_2_1233: la $2, sym_2_1233
+.globl sym_2_1234
+sym_2_1234: la $2, sym_2_1234
+.globl sym_2_1235
+sym_2_1235: la $2, sym_2_1235
+.globl sym_2_1236
+sym_2_1236: la $2, sym_2_1236
+.globl sym_2_1237
+sym_2_1237: la $2, sym_2_1237
+.globl sym_2_1238
+sym_2_1238: la $2, sym_2_1238
+.globl sym_2_1239
+sym_2_1239: la $2, sym_2_1239
+.globl sym_2_1240
+sym_2_1240: la $2, sym_2_1240
+.globl sym_2_1241
+sym_2_1241: la $2, sym_2_1241
+.globl sym_2_1242
+sym_2_1242: la $2, sym_2_1242
+.globl sym_2_1243
+sym_2_1243: la $2, sym_2_1243
+.globl sym_2_1244
+sym_2_1244: la $2, sym_2_1244
+.globl sym_2_1245
+sym_2_1245: la $2, sym_2_1245
+.globl sym_2_1246
+sym_2_1246: la $2, sym_2_1246
+.globl sym_2_1247
+sym_2_1247: la $2, sym_2_1247
+.globl sym_2_1248
+sym_2_1248: la $2, sym_2_1248
+.globl sym_2_1249
+sym_2_1249: la $2, sym_2_1249
+.globl sym_2_1250
+sym_2_1250: la $2, sym_2_1250
+.globl sym_2_1251
+sym_2_1251: la $2, sym_2_1251
+.globl sym_2_1252
+sym_2_1252: la $2, sym_2_1252
+.globl sym_2_1253
+sym_2_1253: la $2, sym_2_1253
+.globl sym_2_1254
+sym_2_1254: la $2, sym_2_1254
+.globl sym_2_1255
+sym_2_1255: la $2, sym_2_1255
+.globl sym_2_1256
+sym_2_1256: la $2, sym_2_1256
+.globl sym_2_1257
+sym_2_1257: la $2, sym_2_1257
+.globl sym_2_1258
+sym_2_1258: la $2, sym_2_1258
+.globl sym_2_1259
+sym_2_1259: la $2, sym_2_1259
+.globl sym_2_1260
+sym_2_1260: la $2, sym_2_1260
+.globl sym_2_1261
+sym_2_1261: la $2, sym_2_1261
+.globl sym_2_1262
+sym_2_1262: la $2, sym_2_1262
+.globl sym_2_1263
+sym_2_1263: la $2, sym_2_1263
+.globl sym_2_1264
+sym_2_1264: la $2, sym_2_1264
+.globl sym_2_1265
+sym_2_1265: la $2, sym_2_1265
+.globl sym_2_1266
+sym_2_1266: la $2, sym_2_1266
+.globl sym_2_1267
+sym_2_1267: la $2, sym_2_1267
+.globl sym_2_1268
+sym_2_1268: la $2, sym_2_1268
+.globl sym_2_1269
+sym_2_1269: la $2, sym_2_1269
+.globl sym_2_1270
+sym_2_1270: la $2, sym_2_1270
+.globl sym_2_1271
+sym_2_1271: la $2, sym_2_1271
+.globl sym_2_1272
+sym_2_1272: la $2, sym_2_1272
+.globl sym_2_1273
+sym_2_1273: la $2, sym_2_1273
+.globl sym_2_1274
+sym_2_1274: la $2, sym_2_1274
+.globl sym_2_1275
+sym_2_1275: la $2, sym_2_1275
+.globl sym_2_1276
+sym_2_1276: la $2, sym_2_1276
+.globl sym_2_1277
+sym_2_1277: la $2, sym_2_1277
+.globl sym_2_1278
+sym_2_1278: la $2, sym_2_1278
+.globl sym_2_1279
+sym_2_1279: la $2, sym_2_1279
+.globl sym_2_1280
+sym_2_1280: la $2, sym_2_1280
+.globl sym_2_1281
+sym_2_1281: la $2, sym_2_1281
+.globl sym_2_1282
+sym_2_1282: la $2, sym_2_1282
+.globl sym_2_1283
+sym_2_1283: la $2, sym_2_1283
+.globl sym_2_1284
+sym_2_1284: la $2, sym_2_1284
+.globl sym_2_1285
+sym_2_1285: la $2, sym_2_1285
+.globl sym_2_1286
+sym_2_1286: la $2, sym_2_1286
+.globl sym_2_1287
+sym_2_1287: la $2, sym_2_1287
+.globl sym_2_1288
+sym_2_1288: la $2, sym_2_1288
+.globl sym_2_1289
+sym_2_1289: la $2, sym_2_1289
+.globl sym_2_1290
+sym_2_1290: la $2, sym_2_1290
+.globl sym_2_1291
+sym_2_1291: la $2, sym_2_1291
+.globl sym_2_1292
+sym_2_1292: la $2, sym_2_1292
+.globl sym_2_1293
+sym_2_1293: la $2, sym_2_1293
+.globl sym_2_1294
+sym_2_1294: la $2, sym_2_1294
+.globl sym_2_1295
+sym_2_1295: la $2, sym_2_1295
+.globl sym_2_1296
+sym_2_1296: la $2, sym_2_1296
+.globl sym_2_1297
+sym_2_1297: la $2, sym_2_1297
+.globl sym_2_1298
+sym_2_1298: la $2, sym_2_1298
+.globl sym_2_1299
+sym_2_1299: la $2, sym_2_1299
+.globl sym_2_1300
+sym_2_1300: la $2, sym_2_1300
+.globl sym_2_1301
+sym_2_1301: la $2, sym_2_1301
+.globl sym_2_1302
+sym_2_1302: la $2, sym_2_1302
+.globl sym_2_1303
+sym_2_1303: la $2, sym_2_1303
+.globl sym_2_1304
+sym_2_1304: la $2, sym_2_1304
+.globl sym_2_1305
+sym_2_1305: la $2, sym_2_1305
+.globl sym_2_1306
+sym_2_1306: la $2, sym_2_1306
+.globl sym_2_1307
+sym_2_1307: la $2, sym_2_1307
+.globl sym_2_1308
+sym_2_1308: la $2, sym_2_1308
+.globl sym_2_1309
+sym_2_1309: la $2, sym_2_1309
+.globl sym_2_1310
+sym_2_1310: la $2, sym_2_1310
+.globl sym_2_1311
+sym_2_1311: la $2, sym_2_1311
+.globl sym_2_1312
+sym_2_1312: la $2, sym_2_1312
+.globl sym_2_1313
+sym_2_1313: la $2, sym_2_1313
+.globl sym_2_1314
+sym_2_1314: la $2, sym_2_1314
+.globl sym_2_1315
+sym_2_1315: la $2, sym_2_1315
+.globl sym_2_1316
+sym_2_1316: la $2, sym_2_1316
+.globl sym_2_1317
+sym_2_1317: la $2, sym_2_1317
+.globl sym_2_1318
+sym_2_1318: la $2, sym_2_1318
+.globl sym_2_1319
+sym_2_1319: la $2, sym_2_1319
+.globl sym_2_1320
+sym_2_1320: la $2, sym_2_1320
+.globl sym_2_1321
+sym_2_1321: la $2, sym_2_1321
+.globl sym_2_1322
+sym_2_1322: la $2, sym_2_1322
+.globl sym_2_1323
+sym_2_1323: la $2, sym_2_1323
+.globl sym_2_1324
+sym_2_1324: la $2, sym_2_1324
+.globl sym_2_1325
+sym_2_1325: la $2, sym_2_1325
+.globl sym_2_1326
+sym_2_1326: la $2, sym_2_1326
+.globl sym_2_1327
+sym_2_1327: la $2, sym_2_1327
+.globl sym_2_1328
+sym_2_1328: la $2, sym_2_1328
+.globl sym_2_1329
+sym_2_1329: la $2, sym_2_1329
+.globl sym_2_1330
+sym_2_1330: la $2, sym_2_1330
+.globl sym_2_1331
+sym_2_1331: la $2, sym_2_1331
+.globl sym_2_1332
+sym_2_1332: la $2, sym_2_1332
+.globl sym_2_1333
+sym_2_1333: la $2, sym_2_1333
+.globl sym_2_1334
+sym_2_1334: la $2, sym_2_1334
+.globl sym_2_1335
+sym_2_1335: la $2, sym_2_1335
+.globl sym_2_1336
+sym_2_1336: la $2, sym_2_1336
+.globl sym_2_1337
+sym_2_1337: la $2, sym_2_1337
+.globl sym_2_1338
+sym_2_1338: la $2, sym_2_1338
+.globl sym_2_1339
+sym_2_1339: la $2, sym_2_1339
+.globl sym_2_1340
+sym_2_1340: la $2, sym_2_1340
+.globl sym_2_1341
+sym_2_1341: la $2, sym_2_1341
+.globl sym_2_1342
+sym_2_1342: la $2, sym_2_1342
+.globl sym_2_1343
+sym_2_1343: la $2, sym_2_1343
+.globl sym_2_1344
+sym_2_1344: la $2, sym_2_1344
+.globl sym_2_1345
+sym_2_1345: la $2, sym_2_1345
+.globl sym_2_1346
+sym_2_1346: la $2, sym_2_1346
+.globl sym_2_1347
+sym_2_1347: la $2, sym_2_1347
+.globl sym_2_1348
+sym_2_1348: la $2, sym_2_1348
+.globl sym_2_1349
+sym_2_1349: la $2, sym_2_1349
+.globl sym_2_1350
+sym_2_1350: la $2, sym_2_1350
+.globl sym_2_1351
+sym_2_1351: la $2, sym_2_1351
+.globl sym_2_1352
+sym_2_1352: la $2, sym_2_1352
+.globl sym_2_1353
+sym_2_1353: la $2, sym_2_1353
+.globl sym_2_1354
+sym_2_1354: la $2, sym_2_1354
+.globl sym_2_1355
+sym_2_1355: la $2, sym_2_1355
+.globl sym_2_1356
+sym_2_1356: la $2, sym_2_1356
+.globl sym_2_1357
+sym_2_1357: la $2, sym_2_1357
+.globl sym_2_1358
+sym_2_1358: la $2, sym_2_1358
+.globl sym_2_1359
+sym_2_1359: la $2, sym_2_1359
+.globl sym_2_1360
+sym_2_1360: la $2, sym_2_1360
+.globl sym_2_1361
+sym_2_1361: la $2, sym_2_1361
+.globl sym_2_1362
+sym_2_1362: la $2, sym_2_1362
+.globl sym_2_1363
+sym_2_1363: la $2, sym_2_1363
+.globl sym_2_1364
+sym_2_1364: la $2, sym_2_1364
+.globl sym_2_1365
+sym_2_1365: la $2, sym_2_1365
+.globl sym_2_1366
+sym_2_1366: la $2, sym_2_1366
+.globl sym_2_1367
+sym_2_1367: la $2, sym_2_1367
+.globl sym_2_1368
+sym_2_1368: la $2, sym_2_1368
+.globl sym_2_1369
+sym_2_1369: la $2, sym_2_1369
+.globl sym_2_1370
+sym_2_1370: la $2, sym_2_1370
+.globl sym_2_1371
+sym_2_1371: la $2, sym_2_1371
+.globl sym_2_1372
+sym_2_1372: la $2, sym_2_1372
+.globl sym_2_1373
+sym_2_1373: la $2, sym_2_1373
+.globl sym_2_1374
+sym_2_1374: la $2, sym_2_1374
+.globl sym_2_1375
+sym_2_1375: la $2, sym_2_1375
+.globl sym_2_1376
+sym_2_1376: la $2, sym_2_1376
+.globl sym_2_1377
+sym_2_1377: la $2, sym_2_1377
+.globl sym_2_1378
+sym_2_1378: la $2, sym_2_1378
+.globl sym_2_1379
+sym_2_1379: la $2, sym_2_1379
+.globl sym_2_1380
+sym_2_1380: la $2, sym_2_1380
+.globl sym_2_1381
+sym_2_1381: la $2, sym_2_1381
+.globl sym_2_1382
+sym_2_1382: la $2, sym_2_1382
+.globl sym_2_1383
+sym_2_1383: la $2, sym_2_1383
+.globl sym_2_1384
+sym_2_1384: la $2, sym_2_1384
+.globl sym_2_1385
+sym_2_1385: la $2, sym_2_1385
+.globl sym_2_1386
+sym_2_1386: la $2, sym_2_1386
+.globl sym_2_1387
+sym_2_1387: la $2, sym_2_1387
+.globl sym_2_1388
+sym_2_1388: la $2, sym_2_1388
+.globl sym_2_1389
+sym_2_1389: la $2, sym_2_1389
+.globl sym_2_1390
+sym_2_1390: la $2, sym_2_1390
+.globl sym_2_1391
+sym_2_1391: la $2, sym_2_1391
+.globl sym_2_1392
+sym_2_1392: la $2, sym_2_1392
+.globl sym_2_1393
+sym_2_1393: la $2, sym_2_1393
+.globl sym_2_1394
+sym_2_1394: la $2, sym_2_1394
+.globl sym_2_1395
+sym_2_1395: la $2, sym_2_1395
+.globl sym_2_1396
+sym_2_1396: la $2, sym_2_1396
+.globl sym_2_1397
+sym_2_1397: la $2, sym_2_1397
+.globl sym_2_1398
+sym_2_1398: la $2, sym_2_1398
+.globl sym_2_1399
+sym_2_1399: la $2, sym_2_1399
+.globl sym_2_1400
+sym_2_1400: la $2, sym_2_1400
+.globl sym_2_1401
+sym_2_1401: la $2, sym_2_1401
+.globl sym_2_1402
+sym_2_1402: la $2, sym_2_1402
+.globl sym_2_1403
+sym_2_1403: la $2, sym_2_1403
+.globl sym_2_1404
+sym_2_1404: la $2, sym_2_1404
+.globl sym_2_1405
+sym_2_1405: la $2, sym_2_1405
+.globl sym_2_1406
+sym_2_1406: la $2, sym_2_1406
+.globl sym_2_1407
+sym_2_1407: la $2, sym_2_1407
+.globl sym_2_1408
+sym_2_1408: la $2, sym_2_1408
+.globl sym_2_1409
+sym_2_1409: la $2, sym_2_1409
+.globl sym_2_1410
+sym_2_1410: la $2, sym_2_1410
+.globl sym_2_1411
+sym_2_1411: la $2, sym_2_1411
+.globl sym_2_1412
+sym_2_1412: la $2, sym_2_1412
+.globl sym_2_1413
+sym_2_1413: la $2, sym_2_1413
+.globl sym_2_1414
+sym_2_1414: la $2, sym_2_1414
+.globl sym_2_1415
+sym_2_1415: la $2, sym_2_1415
+.globl sym_2_1416
+sym_2_1416: la $2, sym_2_1416
+.globl sym_2_1417
+sym_2_1417: la $2, sym_2_1417
+.globl sym_2_1418
+sym_2_1418: la $2, sym_2_1418
+.globl sym_2_1419
+sym_2_1419: la $2, sym_2_1419
+.globl sym_2_1420
+sym_2_1420: la $2, sym_2_1420
+.globl sym_2_1421
+sym_2_1421: la $2, sym_2_1421
+.globl sym_2_1422
+sym_2_1422: la $2, sym_2_1422
+.globl sym_2_1423
+sym_2_1423: la $2, sym_2_1423
+.globl sym_2_1424
+sym_2_1424: la $2, sym_2_1424
+.globl sym_2_1425
+sym_2_1425: la $2, sym_2_1425
+.globl sym_2_1426
+sym_2_1426: la $2, sym_2_1426
+.globl sym_2_1427
+sym_2_1427: la $2, sym_2_1427
+.globl sym_2_1428
+sym_2_1428: la $2, sym_2_1428
+.globl sym_2_1429
+sym_2_1429: la $2, sym_2_1429
+.globl sym_2_1430
+sym_2_1430: la $2, sym_2_1430
+.globl sym_2_1431
+sym_2_1431: la $2, sym_2_1431
+.globl sym_2_1432
+sym_2_1432: la $2, sym_2_1432
+.globl sym_2_1433
+sym_2_1433: la $2, sym_2_1433
+.globl sym_2_1434
+sym_2_1434: la $2, sym_2_1434
+.globl sym_2_1435
+sym_2_1435: la $2, sym_2_1435
+.globl sym_2_1436
+sym_2_1436: la $2, sym_2_1436
+.globl sym_2_1437
+sym_2_1437: la $2, sym_2_1437
+.globl sym_2_1438
+sym_2_1438: la $2, sym_2_1438
+.globl sym_2_1439
+sym_2_1439: la $2, sym_2_1439
+.globl sym_2_1440
+sym_2_1440: la $2, sym_2_1440
+.globl sym_2_1441
+sym_2_1441: la $2, sym_2_1441
+.globl sym_2_1442
+sym_2_1442: la $2, sym_2_1442
+.globl sym_2_1443
+sym_2_1443: la $2, sym_2_1443
+.globl sym_2_1444
+sym_2_1444: la $2, sym_2_1444
+.globl sym_2_1445
+sym_2_1445: la $2, sym_2_1445
+.globl sym_2_1446
+sym_2_1446: la $2, sym_2_1446
+.globl sym_2_1447
+sym_2_1447: la $2, sym_2_1447
+.globl sym_2_1448
+sym_2_1448: la $2, sym_2_1448
+.globl sym_2_1449
+sym_2_1449: la $2, sym_2_1449
+.globl sym_2_1450
+sym_2_1450: la $2, sym_2_1450
+.globl sym_2_1451
+sym_2_1451: la $2, sym_2_1451
+.globl sym_2_1452
+sym_2_1452: la $2, sym_2_1452
+.globl sym_2_1453
+sym_2_1453: la $2, sym_2_1453
+.globl sym_2_1454
+sym_2_1454: la $2, sym_2_1454
+.globl sym_2_1455
+sym_2_1455: la $2, sym_2_1455
+.globl sym_2_1456
+sym_2_1456: la $2, sym_2_1456
+.globl sym_2_1457
+sym_2_1457: la $2, sym_2_1457
+.globl sym_2_1458
+sym_2_1458: la $2, sym_2_1458
+.globl sym_2_1459
+sym_2_1459: la $2, sym_2_1459
+.globl sym_2_1460
+sym_2_1460: la $2, sym_2_1460
+.globl sym_2_1461
+sym_2_1461: la $2, sym_2_1461
+.globl sym_2_1462
+sym_2_1462: la $2, sym_2_1462
+.globl sym_2_1463
+sym_2_1463: la $2, sym_2_1463
+.globl sym_2_1464
+sym_2_1464: la $2, sym_2_1464
+.globl sym_2_1465
+sym_2_1465: la $2, sym_2_1465
+.globl sym_2_1466
+sym_2_1466: la $2, sym_2_1466
+.globl sym_2_1467
+sym_2_1467: la $2, sym_2_1467
+.globl sym_2_1468
+sym_2_1468: la $2, sym_2_1468
+.globl sym_2_1469
+sym_2_1469: la $2, sym_2_1469
+.globl sym_2_1470
+sym_2_1470: la $2, sym_2_1470
+.globl sym_2_1471
+sym_2_1471: la $2, sym_2_1471
+.globl sym_2_1472
+sym_2_1472: la $2, sym_2_1472
+.globl sym_2_1473
+sym_2_1473: la $2, sym_2_1473
+.globl sym_2_1474
+sym_2_1474: la $2, sym_2_1474
+.globl sym_2_1475
+sym_2_1475: la $2, sym_2_1475
+.globl sym_2_1476
+sym_2_1476: la $2, sym_2_1476
+.globl sym_2_1477
+sym_2_1477: la $2, sym_2_1477
+.globl sym_2_1478
+sym_2_1478: la $2, sym_2_1478
+.globl sym_2_1479
+sym_2_1479: la $2, sym_2_1479
+.globl sym_2_1480
+sym_2_1480: la $2, sym_2_1480
+.globl sym_2_1481
+sym_2_1481: la $2, sym_2_1481
+.globl sym_2_1482
+sym_2_1482: la $2, sym_2_1482
+.globl sym_2_1483
+sym_2_1483: la $2, sym_2_1483
+.globl sym_2_1484
+sym_2_1484: la $2, sym_2_1484
+.globl sym_2_1485
+sym_2_1485: la $2, sym_2_1485
+.globl sym_2_1486
+sym_2_1486: la $2, sym_2_1486
+.globl sym_2_1487
+sym_2_1487: la $2, sym_2_1487
+.globl sym_2_1488
+sym_2_1488: la $2, sym_2_1488
+.globl sym_2_1489
+sym_2_1489: la $2, sym_2_1489
+.globl sym_2_1490
+sym_2_1490: la $2, sym_2_1490
+.globl sym_2_1491
+sym_2_1491: la $2, sym_2_1491
+.globl sym_2_1492
+sym_2_1492: la $2, sym_2_1492
+.globl sym_2_1493
+sym_2_1493: la $2, sym_2_1493
+.globl sym_2_1494
+sym_2_1494: la $2, sym_2_1494
+.globl sym_2_1495
+sym_2_1495: la $2, sym_2_1495
+.globl sym_2_1496
+sym_2_1496: la $2, sym_2_1496
+.globl sym_2_1497
+sym_2_1497: la $2, sym_2_1497
+.globl sym_2_1498
+sym_2_1498: la $2, sym_2_1498
+.globl sym_2_1499
+sym_2_1499: la $2, sym_2_1499
+.globl sym_2_1500
+sym_2_1500: la $2, sym_2_1500
+.globl sym_2_1501
+sym_2_1501: la $2, sym_2_1501
+.globl sym_2_1502
+sym_2_1502: la $2, sym_2_1502
+.globl sym_2_1503
+sym_2_1503: la $2, sym_2_1503
+.globl sym_2_1504
+sym_2_1504: la $2, sym_2_1504
+.globl sym_2_1505
+sym_2_1505: la $2, sym_2_1505
+.globl sym_2_1506
+sym_2_1506: la $2, sym_2_1506
+.globl sym_2_1507
+sym_2_1507: la $2, sym_2_1507
+.globl sym_2_1508
+sym_2_1508: la $2, sym_2_1508
+.globl sym_2_1509
+sym_2_1509: la $2, sym_2_1509
+.globl sym_2_1510
+sym_2_1510: la $2, sym_2_1510
+.globl sym_2_1511
+sym_2_1511: la $2, sym_2_1511
+.globl sym_2_1512
+sym_2_1512: la $2, sym_2_1512
+.globl sym_2_1513
+sym_2_1513: la $2, sym_2_1513
+.globl sym_2_1514
+sym_2_1514: la $2, sym_2_1514
+.globl sym_2_1515
+sym_2_1515: la $2, sym_2_1515
+.globl sym_2_1516
+sym_2_1516: la $2, sym_2_1516
+.globl sym_2_1517
+sym_2_1517: la $2, sym_2_1517
+.globl sym_2_1518
+sym_2_1518: la $2, sym_2_1518
+.globl sym_2_1519
+sym_2_1519: la $2, sym_2_1519
+.globl sym_2_1520
+sym_2_1520: la $2, sym_2_1520
+.globl sym_2_1521
+sym_2_1521: la $2, sym_2_1521
+.globl sym_2_1522
+sym_2_1522: la $2, sym_2_1522
+.globl sym_2_1523
+sym_2_1523: la $2, sym_2_1523
+.globl sym_2_1524
+sym_2_1524: la $2, sym_2_1524
+.globl sym_2_1525
+sym_2_1525: la $2, sym_2_1525
+.globl sym_2_1526
+sym_2_1526: la $2, sym_2_1526
+.globl sym_2_1527
+sym_2_1527: la $2, sym_2_1527
+.globl sym_2_1528
+sym_2_1528: la $2, sym_2_1528
+.globl sym_2_1529
+sym_2_1529: la $2, sym_2_1529
+.globl sym_2_1530
+sym_2_1530: la $2, sym_2_1530
+.globl sym_2_1531
+sym_2_1531: la $2, sym_2_1531
+.globl sym_2_1532
+sym_2_1532: la $2, sym_2_1532
+.globl sym_2_1533
+sym_2_1533: la $2, sym_2_1533
+.globl sym_2_1534
+sym_2_1534: la $2, sym_2_1534
+.globl sym_2_1535
+sym_2_1535: la $2, sym_2_1535
+.globl sym_2_1536
+sym_2_1536: la $2, sym_2_1536
+.globl sym_2_1537
+sym_2_1537: la $2, sym_2_1537
+.globl sym_2_1538
+sym_2_1538: la $2, sym_2_1538
+.globl sym_2_1539
+sym_2_1539: la $2, sym_2_1539
+.globl sym_2_1540
+sym_2_1540: la $2, sym_2_1540
+.globl sym_2_1541
+sym_2_1541: la $2, sym_2_1541
+.globl sym_2_1542
+sym_2_1542: la $2, sym_2_1542
+.globl sym_2_1543
+sym_2_1543: la $2, sym_2_1543
+.globl sym_2_1544
+sym_2_1544: la $2, sym_2_1544
+.globl sym_2_1545
+sym_2_1545: la $2, sym_2_1545
+.globl sym_2_1546
+sym_2_1546: la $2, sym_2_1546
+.globl sym_2_1547
+sym_2_1547: la $2, sym_2_1547
+.globl sym_2_1548
+sym_2_1548: la $2, sym_2_1548
+.globl sym_2_1549
+sym_2_1549: la $2, sym_2_1549
+.globl sym_2_1550
+sym_2_1550: la $2, sym_2_1550
+.globl sym_2_1551
+sym_2_1551: la $2, sym_2_1551
+.globl sym_2_1552
+sym_2_1552: la $2, sym_2_1552
+.globl sym_2_1553
+sym_2_1553: la $2, sym_2_1553
+.globl sym_2_1554
+sym_2_1554: la $2, sym_2_1554
+.globl sym_2_1555
+sym_2_1555: la $2, sym_2_1555
+.globl sym_2_1556
+sym_2_1556: la $2, sym_2_1556
+.globl sym_2_1557
+sym_2_1557: la $2, sym_2_1557
+.globl sym_2_1558
+sym_2_1558: la $2, sym_2_1558
+.globl sym_2_1559
+sym_2_1559: la $2, sym_2_1559
+.globl sym_2_1560
+sym_2_1560: la $2, sym_2_1560
+.globl sym_2_1561
+sym_2_1561: la $2, sym_2_1561
+.globl sym_2_1562
+sym_2_1562: la $2, sym_2_1562
+.globl sym_2_1563
+sym_2_1563: la $2, sym_2_1563
+.globl sym_2_1564
+sym_2_1564: la $2, sym_2_1564
+.globl sym_2_1565
+sym_2_1565: la $2, sym_2_1565
+.globl sym_2_1566
+sym_2_1566: la $2, sym_2_1566
+.globl sym_2_1567
+sym_2_1567: la $2, sym_2_1567
+.globl sym_2_1568
+sym_2_1568: la $2, sym_2_1568
+.globl sym_2_1569
+sym_2_1569: la $2, sym_2_1569
+.globl sym_2_1570
+sym_2_1570: la $2, sym_2_1570
+.globl sym_2_1571
+sym_2_1571: la $2, sym_2_1571
+.globl sym_2_1572
+sym_2_1572: la $2, sym_2_1572
+.globl sym_2_1573
+sym_2_1573: la $2, sym_2_1573
+.globl sym_2_1574
+sym_2_1574: la $2, sym_2_1574
+.globl sym_2_1575
+sym_2_1575: la $2, sym_2_1575
+.globl sym_2_1576
+sym_2_1576: la $2, sym_2_1576
+.globl sym_2_1577
+sym_2_1577: la $2, sym_2_1577
+.globl sym_2_1578
+sym_2_1578: la $2, sym_2_1578
+.globl sym_2_1579
+sym_2_1579: la $2, sym_2_1579
+.globl sym_2_1580
+sym_2_1580: la $2, sym_2_1580
+.globl sym_2_1581
+sym_2_1581: la $2, sym_2_1581
+.globl sym_2_1582
+sym_2_1582: la $2, sym_2_1582
+.globl sym_2_1583
+sym_2_1583: la $2, sym_2_1583
+.globl sym_2_1584
+sym_2_1584: la $2, sym_2_1584
+.globl sym_2_1585
+sym_2_1585: la $2, sym_2_1585
+.globl sym_2_1586
+sym_2_1586: la $2, sym_2_1586
+.globl sym_2_1587
+sym_2_1587: la $2, sym_2_1587
+.globl sym_2_1588
+sym_2_1588: la $2, sym_2_1588
+.globl sym_2_1589
+sym_2_1589: la $2, sym_2_1589
+.globl sym_2_1590
+sym_2_1590: la $2, sym_2_1590
+.globl sym_2_1591
+sym_2_1591: la $2, sym_2_1591
+.globl sym_2_1592
+sym_2_1592: la $2, sym_2_1592
+.globl sym_2_1593
+sym_2_1593: la $2, sym_2_1593
+.globl sym_2_1594
+sym_2_1594: la $2, sym_2_1594
+.globl sym_2_1595
+sym_2_1595: la $2, sym_2_1595
+.globl sym_2_1596
+sym_2_1596: la $2, sym_2_1596
+.globl sym_2_1597
+sym_2_1597: la $2, sym_2_1597
+.globl sym_2_1598
+sym_2_1598: la $2, sym_2_1598
+.globl sym_2_1599
+sym_2_1599: la $2, sym_2_1599
+.globl sym_2_1600
+sym_2_1600: la $2, sym_2_1600
+.globl sym_2_1601
+sym_2_1601: la $2, sym_2_1601
+.globl sym_2_1602
+sym_2_1602: la $2, sym_2_1602
+.globl sym_2_1603
+sym_2_1603: la $2, sym_2_1603
+.globl sym_2_1604
+sym_2_1604: la $2, sym_2_1604
+.globl sym_2_1605
+sym_2_1605: la $2, sym_2_1605
+.globl sym_2_1606
+sym_2_1606: la $2, sym_2_1606
+.globl sym_2_1607
+sym_2_1607: la $2, sym_2_1607
+.globl sym_2_1608
+sym_2_1608: la $2, sym_2_1608
+.globl sym_2_1609
+sym_2_1609: la $2, sym_2_1609
+.globl sym_2_1610
+sym_2_1610: la $2, sym_2_1610
+.globl sym_2_1611
+sym_2_1611: la $2, sym_2_1611
+.globl sym_2_1612
+sym_2_1612: la $2, sym_2_1612
+.globl sym_2_1613
+sym_2_1613: la $2, sym_2_1613
+.globl sym_2_1614
+sym_2_1614: la $2, sym_2_1614
+.globl sym_2_1615
+sym_2_1615: la $2, sym_2_1615
+.globl sym_2_1616
+sym_2_1616: la $2, sym_2_1616
+.globl sym_2_1617
+sym_2_1617: la $2, sym_2_1617
+.globl sym_2_1618
+sym_2_1618: la $2, sym_2_1618
+.globl sym_2_1619
+sym_2_1619: la $2, sym_2_1619
+.globl sym_2_1620
+sym_2_1620: la $2, sym_2_1620
+.globl sym_2_1621
+sym_2_1621: la $2, sym_2_1621
+.globl sym_2_1622
+sym_2_1622: la $2, sym_2_1622
+.globl sym_2_1623
+sym_2_1623: la $2, sym_2_1623
+.globl sym_2_1624
+sym_2_1624: la $2, sym_2_1624
+.globl sym_2_1625
+sym_2_1625: la $2, sym_2_1625
+.globl sym_2_1626
+sym_2_1626: la $2, sym_2_1626
+.globl sym_2_1627
+sym_2_1627: la $2, sym_2_1627
+.globl sym_2_1628
+sym_2_1628: la $2, sym_2_1628
+.globl sym_2_1629
+sym_2_1629: la $2, sym_2_1629
+.globl sym_2_1630
+sym_2_1630: la $2, sym_2_1630
+.globl sym_2_1631
+sym_2_1631: la $2, sym_2_1631
+.globl sym_2_1632
+sym_2_1632: la $2, sym_2_1632
+.globl sym_2_1633
+sym_2_1633: la $2, sym_2_1633
+.globl sym_2_1634
+sym_2_1634: la $2, sym_2_1634
+.globl sym_2_1635
+sym_2_1635: la $2, sym_2_1635
+.globl sym_2_1636
+sym_2_1636: la $2, sym_2_1636
+.globl sym_2_1637
+sym_2_1637: la $2, sym_2_1637
+.globl sym_2_1638
+sym_2_1638: la $2, sym_2_1638
+.globl sym_2_1639
+sym_2_1639: la $2, sym_2_1639
+.globl sym_2_1640
+sym_2_1640: la $2, sym_2_1640
+.globl sym_2_1641
+sym_2_1641: la $2, sym_2_1641
+.globl sym_2_1642
+sym_2_1642: la $2, sym_2_1642
+.globl sym_2_1643
+sym_2_1643: la $2, sym_2_1643
+.globl sym_2_1644
+sym_2_1644: la $2, sym_2_1644
+.globl sym_2_1645
+sym_2_1645: la $2, sym_2_1645
+.globl sym_2_1646
+sym_2_1646: la $2, sym_2_1646
+.globl sym_2_1647
+sym_2_1647: la $2, sym_2_1647
+.globl sym_2_1648
+sym_2_1648: la $2, sym_2_1648
+.globl sym_2_1649
+sym_2_1649: la $2, sym_2_1649
+.globl sym_2_1650
+sym_2_1650: la $2, sym_2_1650
+.globl sym_2_1651
+sym_2_1651: la $2, sym_2_1651
+.globl sym_2_1652
+sym_2_1652: la $2, sym_2_1652
+.globl sym_2_1653
+sym_2_1653: la $2, sym_2_1653
+.globl sym_2_1654
+sym_2_1654: la $2, sym_2_1654
+.globl sym_2_1655
+sym_2_1655: la $2, sym_2_1655
+.globl sym_2_1656
+sym_2_1656: la $2, sym_2_1656
+.globl sym_2_1657
+sym_2_1657: la $2, sym_2_1657
+.globl sym_2_1658
+sym_2_1658: la $2, sym_2_1658
+.globl sym_2_1659
+sym_2_1659: la $2, sym_2_1659
+.globl sym_2_1660
+sym_2_1660: la $2, sym_2_1660
+.globl sym_2_1661
+sym_2_1661: la $2, sym_2_1661
+.globl sym_2_1662
+sym_2_1662: la $2, sym_2_1662
+.globl sym_2_1663
+sym_2_1663: la $2, sym_2_1663
+.globl sym_2_1664
+sym_2_1664: la $2, sym_2_1664
+.globl sym_2_1665
+sym_2_1665: la $2, sym_2_1665
+.globl sym_2_1666
+sym_2_1666: la $2, sym_2_1666
+.globl sym_2_1667
+sym_2_1667: la $2, sym_2_1667
+.globl sym_2_1668
+sym_2_1668: la $2, sym_2_1668
+.globl sym_2_1669
+sym_2_1669: la $2, sym_2_1669
+.globl sym_2_1670
+sym_2_1670: la $2, sym_2_1670
+.globl sym_2_1671
+sym_2_1671: la $2, sym_2_1671
+.globl sym_2_1672
+sym_2_1672: la $2, sym_2_1672
+.globl sym_2_1673
+sym_2_1673: la $2, sym_2_1673
+.globl sym_2_1674
+sym_2_1674: la $2, sym_2_1674
+.globl sym_2_1675
+sym_2_1675: la $2, sym_2_1675
+.globl sym_2_1676
+sym_2_1676: la $2, sym_2_1676
+.globl sym_2_1677
+sym_2_1677: la $2, sym_2_1677
+.globl sym_2_1678
+sym_2_1678: la $2, sym_2_1678
+.globl sym_2_1679
+sym_2_1679: la $2, sym_2_1679
+.globl sym_2_1680
+sym_2_1680: la $2, sym_2_1680
+.globl sym_2_1681
+sym_2_1681: la $2, sym_2_1681
+.globl sym_2_1682
+sym_2_1682: la $2, sym_2_1682
+.globl sym_2_1683
+sym_2_1683: la $2, sym_2_1683
+.globl sym_2_1684
+sym_2_1684: la $2, sym_2_1684
+.globl sym_2_1685
+sym_2_1685: la $2, sym_2_1685
+.globl sym_2_1686
+sym_2_1686: la $2, sym_2_1686
+.globl sym_2_1687
+sym_2_1687: la $2, sym_2_1687
+.globl sym_2_1688
+sym_2_1688: la $2, sym_2_1688
+.globl sym_2_1689
+sym_2_1689: la $2, sym_2_1689
+.globl sym_2_1690
+sym_2_1690: la $2, sym_2_1690
+.globl sym_2_1691
+sym_2_1691: la $2, sym_2_1691
+.globl sym_2_1692
+sym_2_1692: la $2, sym_2_1692
+.globl sym_2_1693
+sym_2_1693: la $2, sym_2_1693
+.globl sym_2_1694
+sym_2_1694: la $2, sym_2_1694
+.globl sym_2_1695
+sym_2_1695: la $2, sym_2_1695
+.globl sym_2_1696
+sym_2_1696: la $2, sym_2_1696
+.globl sym_2_1697
+sym_2_1697: la $2, sym_2_1697
+.globl sym_2_1698
+sym_2_1698: la $2, sym_2_1698
+.globl sym_2_1699
+sym_2_1699: la $2, sym_2_1699
+.globl sym_2_1700
+sym_2_1700: la $2, sym_2_1700
+.globl sym_2_1701
+sym_2_1701: la $2, sym_2_1701
+.globl sym_2_1702
+sym_2_1702: la $2, sym_2_1702
+.globl sym_2_1703
+sym_2_1703: la $2, sym_2_1703
+.globl sym_2_1704
+sym_2_1704: la $2, sym_2_1704
+.globl sym_2_1705
+sym_2_1705: la $2, sym_2_1705
+.globl sym_2_1706
+sym_2_1706: la $2, sym_2_1706
+.globl sym_2_1707
+sym_2_1707: la $2, sym_2_1707
+.globl sym_2_1708
+sym_2_1708: la $2, sym_2_1708
+.globl sym_2_1709
+sym_2_1709: la $2, sym_2_1709
+.globl sym_2_1710
+sym_2_1710: la $2, sym_2_1710
+.globl sym_2_1711
+sym_2_1711: la $2, sym_2_1711
+.globl sym_2_1712
+sym_2_1712: la $2, sym_2_1712
+.globl sym_2_1713
+sym_2_1713: la $2, sym_2_1713
+.globl sym_2_1714
+sym_2_1714: la $2, sym_2_1714
+.globl sym_2_1715
+sym_2_1715: la $2, sym_2_1715
+.globl sym_2_1716
+sym_2_1716: la $2, sym_2_1716
+.globl sym_2_1717
+sym_2_1717: la $2, sym_2_1717
+.globl sym_2_1718
+sym_2_1718: la $2, sym_2_1718
+.globl sym_2_1719
+sym_2_1719: la $2, sym_2_1719
+.globl sym_2_1720
+sym_2_1720: la $2, sym_2_1720
+.globl sym_2_1721
+sym_2_1721: la $2, sym_2_1721
+.globl sym_2_1722
+sym_2_1722: la $2, sym_2_1722
+.globl sym_2_1723
+sym_2_1723: la $2, sym_2_1723
+.globl sym_2_1724
+sym_2_1724: la $2, sym_2_1724
+.globl sym_2_1725
+sym_2_1725: la $2, sym_2_1725
+.globl sym_2_1726
+sym_2_1726: la $2, sym_2_1726
+.globl sym_2_1727
+sym_2_1727: la $2, sym_2_1727
+.globl sym_2_1728
+sym_2_1728: la $2, sym_2_1728
+.globl sym_2_1729
+sym_2_1729: la $2, sym_2_1729
+.globl sym_2_1730
+sym_2_1730: la $2, sym_2_1730
+.globl sym_2_1731
+sym_2_1731: la $2, sym_2_1731
+.globl sym_2_1732
+sym_2_1732: la $2, sym_2_1732
+.globl sym_2_1733
+sym_2_1733: la $2, sym_2_1733
+.globl sym_2_1734
+sym_2_1734: la $2, sym_2_1734
+.globl sym_2_1735
+sym_2_1735: la $2, sym_2_1735
+.globl sym_2_1736
+sym_2_1736: la $2, sym_2_1736
+.globl sym_2_1737
+sym_2_1737: la $2, sym_2_1737
+.globl sym_2_1738
+sym_2_1738: la $2, sym_2_1738
+.globl sym_2_1739
+sym_2_1739: la $2, sym_2_1739
+.globl sym_2_1740
+sym_2_1740: la $2, sym_2_1740
+.globl sym_2_1741
+sym_2_1741: la $2, sym_2_1741
+.globl sym_2_1742
+sym_2_1742: la $2, sym_2_1742
+.globl sym_2_1743
+sym_2_1743: la $2, sym_2_1743
+.globl sym_2_1744
+sym_2_1744: la $2, sym_2_1744
+.globl sym_2_1745
+sym_2_1745: la $2, sym_2_1745
+.globl sym_2_1746
+sym_2_1746: la $2, sym_2_1746
+.globl sym_2_1747
+sym_2_1747: la $2, sym_2_1747
+.globl sym_2_1748
+sym_2_1748: la $2, sym_2_1748
+.globl sym_2_1749
+sym_2_1749: la $2, sym_2_1749
+.globl sym_2_1750
+sym_2_1750: la $2, sym_2_1750
+.globl sym_2_1751
+sym_2_1751: la $2, sym_2_1751
+.globl sym_2_1752
+sym_2_1752: la $2, sym_2_1752
+.globl sym_2_1753
+sym_2_1753: la $2, sym_2_1753
+.globl sym_2_1754
+sym_2_1754: la $2, sym_2_1754
+.globl sym_2_1755
+sym_2_1755: la $2, sym_2_1755
+.globl sym_2_1756
+sym_2_1756: la $2, sym_2_1756
+.globl sym_2_1757
+sym_2_1757: la $2, sym_2_1757
+.globl sym_2_1758
+sym_2_1758: la $2, sym_2_1758
+.globl sym_2_1759
+sym_2_1759: la $2, sym_2_1759
+.globl sym_2_1760
+sym_2_1760: la $2, sym_2_1760
+.globl sym_2_1761
+sym_2_1761: la $2, sym_2_1761
+.globl sym_2_1762
+sym_2_1762: la $2, sym_2_1762
+.globl sym_2_1763
+sym_2_1763: la $2, sym_2_1763
+.globl sym_2_1764
+sym_2_1764: la $2, sym_2_1764
+.globl sym_2_1765
+sym_2_1765: la $2, sym_2_1765
+.globl sym_2_1766
+sym_2_1766: la $2, sym_2_1766
+.globl sym_2_1767
+sym_2_1767: la $2, sym_2_1767
+.globl sym_2_1768
+sym_2_1768: la $2, sym_2_1768
+.globl sym_2_1769
+sym_2_1769: la $2, sym_2_1769
+.globl sym_2_1770
+sym_2_1770: la $2, sym_2_1770
+.globl sym_2_1771
+sym_2_1771: la $2, sym_2_1771
+.globl sym_2_1772
+sym_2_1772: la $2, sym_2_1772
+.globl sym_2_1773
+sym_2_1773: la $2, sym_2_1773
+.globl sym_2_1774
+sym_2_1774: la $2, sym_2_1774
+.globl sym_2_1775
+sym_2_1775: la $2, sym_2_1775
+.globl sym_2_1776
+sym_2_1776: la $2, sym_2_1776
+.globl sym_2_1777
+sym_2_1777: la $2, sym_2_1777
+.globl sym_2_1778
+sym_2_1778: la $2, sym_2_1778
+.globl sym_2_1779
+sym_2_1779: la $2, sym_2_1779
+.globl sym_2_1780
+sym_2_1780: la $2, sym_2_1780
+.globl sym_2_1781
+sym_2_1781: la $2, sym_2_1781
+.globl sym_2_1782
+sym_2_1782: la $2, sym_2_1782
+.globl sym_2_1783
+sym_2_1783: la $2, sym_2_1783
+.globl sym_2_1784
+sym_2_1784: la $2, sym_2_1784
+.globl sym_2_1785
+sym_2_1785: la $2, sym_2_1785
+.globl sym_2_1786
+sym_2_1786: la $2, sym_2_1786
+.globl sym_2_1787
+sym_2_1787: la $2, sym_2_1787
+.globl sym_2_1788
+sym_2_1788: la $2, sym_2_1788
+.globl sym_2_1789
+sym_2_1789: la $2, sym_2_1789
+.globl sym_2_1790
+sym_2_1790: la $2, sym_2_1790
+.globl sym_2_1791
+sym_2_1791: la $2, sym_2_1791
+.globl sym_2_1792
+sym_2_1792: la $2, sym_2_1792
+.globl sym_2_1793
+sym_2_1793: la $2, sym_2_1793
+.globl sym_2_1794
+sym_2_1794: la $2, sym_2_1794
+.globl sym_2_1795
+sym_2_1795: la $2, sym_2_1795
+.globl sym_2_1796
+sym_2_1796: la $2, sym_2_1796
+.globl sym_2_1797
+sym_2_1797: la $2, sym_2_1797
+.globl sym_2_1798
+sym_2_1798: la $2, sym_2_1798
+.globl sym_2_1799
+sym_2_1799: la $2, sym_2_1799
+.globl sym_2_1800
+sym_2_1800: la $2, sym_2_1800
+.globl sym_2_1801
+sym_2_1801: la $2, sym_2_1801
+.globl sym_2_1802
+sym_2_1802: la $2, sym_2_1802
+.globl sym_2_1803
+sym_2_1803: la $2, sym_2_1803
+.globl sym_2_1804
+sym_2_1804: la $2, sym_2_1804
+.globl sym_2_1805
+sym_2_1805: la $2, sym_2_1805
+.globl sym_2_1806
+sym_2_1806: la $2, sym_2_1806
+.globl sym_2_1807
+sym_2_1807: la $2, sym_2_1807
+.globl sym_2_1808
+sym_2_1808: la $2, sym_2_1808
+.globl sym_2_1809
+sym_2_1809: la $2, sym_2_1809
+.globl sym_2_1810
+sym_2_1810: la $2, sym_2_1810
+.globl sym_2_1811
+sym_2_1811: la $2, sym_2_1811
+.globl sym_2_1812
+sym_2_1812: la $2, sym_2_1812
+.globl sym_2_1813
+sym_2_1813: la $2, sym_2_1813
+.globl sym_2_1814
+sym_2_1814: la $2, sym_2_1814
+.globl sym_2_1815
+sym_2_1815: la $2, sym_2_1815
+.globl sym_2_1816
+sym_2_1816: la $2, sym_2_1816
+.globl sym_2_1817
+sym_2_1817: la $2, sym_2_1817
+.globl sym_2_1818
+sym_2_1818: la $2, sym_2_1818
+.globl sym_2_1819
+sym_2_1819: la $2, sym_2_1819
+.globl sym_2_1820
+sym_2_1820: la $2, sym_2_1820
+.globl sym_2_1821
+sym_2_1821: la $2, sym_2_1821
+.globl sym_2_1822
+sym_2_1822: la $2, sym_2_1822
+.globl sym_2_1823
+sym_2_1823: la $2, sym_2_1823
+.globl sym_2_1824
+sym_2_1824: la $2, sym_2_1824
+.globl sym_2_1825
+sym_2_1825: la $2, sym_2_1825
+.globl sym_2_1826
+sym_2_1826: la $2, sym_2_1826
+.globl sym_2_1827
+sym_2_1827: la $2, sym_2_1827
+.globl sym_2_1828
+sym_2_1828: la $2, sym_2_1828
+.globl sym_2_1829
+sym_2_1829: la $2, sym_2_1829
+.globl sym_2_1830
+sym_2_1830: la $2, sym_2_1830
+.globl sym_2_1831
+sym_2_1831: la $2, sym_2_1831
+.globl sym_2_1832
+sym_2_1832: la $2, sym_2_1832
+.globl sym_2_1833
+sym_2_1833: la $2, sym_2_1833
+.globl sym_2_1834
+sym_2_1834: la $2, sym_2_1834
+.globl sym_2_1835
+sym_2_1835: la $2, sym_2_1835
+.globl sym_2_1836
+sym_2_1836: la $2, sym_2_1836
+.globl sym_2_1837
+sym_2_1837: la $2, sym_2_1837
+.globl sym_2_1838
+sym_2_1838: la $2, sym_2_1838
+.globl sym_2_1839
+sym_2_1839: la $2, sym_2_1839
+.globl sym_2_1840
+sym_2_1840: la $2, sym_2_1840
+.globl sym_2_1841
+sym_2_1841: la $2, sym_2_1841
+.globl sym_2_1842
+sym_2_1842: la $2, sym_2_1842
+.globl sym_2_1843
+sym_2_1843: la $2, sym_2_1843
+.globl sym_2_1844
+sym_2_1844: la $2, sym_2_1844
+.globl sym_2_1845
+sym_2_1845: la $2, sym_2_1845
+.globl sym_2_1846
+sym_2_1846: la $2, sym_2_1846
+.globl sym_2_1847
+sym_2_1847: la $2, sym_2_1847
+.globl sym_2_1848
+sym_2_1848: la $2, sym_2_1848
+.globl sym_2_1849
+sym_2_1849: la $2, sym_2_1849
+.globl sym_2_1850
+sym_2_1850: la $2, sym_2_1850
+.globl sym_2_1851
+sym_2_1851: la $2, sym_2_1851
+.globl sym_2_1852
+sym_2_1852: la $2, sym_2_1852
+.globl sym_2_1853
+sym_2_1853: la $2, sym_2_1853
+.globl sym_2_1854
+sym_2_1854: la $2, sym_2_1854
+.globl sym_2_1855
+sym_2_1855: la $2, sym_2_1855
+.globl sym_2_1856
+sym_2_1856: la $2, sym_2_1856
+.globl sym_2_1857
+sym_2_1857: la $2, sym_2_1857
+.globl sym_2_1858
+sym_2_1858: la $2, sym_2_1858
+.globl sym_2_1859
+sym_2_1859: la $2, sym_2_1859
+.globl sym_2_1860
+sym_2_1860: la $2, sym_2_1860
+.globl sym_2_1861
+sym_2_1861: la $2, sym_2_1861
+.globl sym_2_1862
+sym_2_1862: la $2, sym_2_1862
+.globl sym_2_1863
+sym_2_1863: la $2, sym_2_1863
+.globl sym_2_1864
+sym_2_1864: la $2, sym_2_1864
+.globl sym_2_1865
+sym_2_1865: la $2, sym_2_1865
+.globl sym_2_1866
+sym_2_1866: la $2, sym_2_1866
+.globl sym_2_1867
+sym_2_1867: la $2, sym_2_1867
+.globl sym_2_1868
+sym_2_1868: la $2, sym_2_1868
+.globl sym_2_1869
+sym_2_1869: la $2, sym_2_1869
+.globl sym_2_1870
+sym_2_1870: la $2, sym_2_1870
+.globl sym_2_1871
+sym_2_1871: la $2, sym_2_1871
+.globl sym_2_1872
+sym_2_1872: la $2, sym_2_1872
+.globl sym_2_1873
+sym_2_1873: la $2, sym_2_1873
+.globl sym_2_1874
+sym_2_1874: la $2, sym_2_1874
+.globl sym_2_1875
+sym_2_1875: la $2, sym_2_1875
+.globl sym_2_1876
+sym_2_1876: la $2, sym_2_1876
+.globl sym_2_1877
+sym_2_1877: la $2, sym_2_1877
+.globl sym_2_1878
+sym_2_1878: la $2, sym_2_1878
+.globl sym_2_1879
+sym_2_1879: la $2, sym_2_1879
+.globl sym_2_1880
+sym_2_1880: la $2, sym_2_1880
+.globl sym_2_1881
+sym_2_1881: la $2, sym_2_1881
+.globl sym_2_1882
+sym_2_1882: la $2, sym_2_1882
+.globl sym_2_1883
+sym_2_1883: la $2, sym_2_1883
+.globl sym_2_1884
+sym_2_1884: la $2, sym_2_1884
+.globl sym_2_1885
+sym_2_1885: la $2, sym_2_1885
+.globl sym_2_1886
+sym_2_1886: la $2, sym_2_1886
+.globl sym_2_1887
+sym_2_1887: la $2, sym_2_1887
+.globl sym_2_1888
+sym_2_1888: la $2, sym_2_1888
+.globl sym_2_1889
+sym_2_1889: la $2, sym_2_1889
+.globl sym_2_1890
+sym_2_1890: la $2, sym_2_1890
+.globl sym_2_1891
+sym_2_1891: la $2, sym_2_1891
+.globl sym_2_1892
+sym_2_1892: la $2, sym_2_1892
+.globl sym_2_1893
+sym_2_1893: la $2, sym_2_1893
+.globl sym_2_1894
+sym_2_1894: la $2, sym_2_1894
+.globl sym_2_1895
+sym_2_1895: la $2, sym_2_1895
+.globl sym_2_1896
+sym_2_1896: la $2, sym_2_1896
+.globl sym_2_1897
+sym_2_1897: la $2, sym_2_1897
+.globl sym_2_1898
+sym_2_1898: la $2, sym_2_1898
+.globl sym_2_1899
+sym_2_1899: la $2, sym_2_1899
+.globl sym_2_1900
+sym_2_1900: la $2, sym_2_1900
+.globl sym_2_1901
+sym_2_1901: la $2, sym_2_1901
+.globl sym_2_1902
+sym_2_1902: la $2, sym_2_1902
+.globl sym_2_1903
+sym_2_1903: la $2, sym_2_1903
+.globl sym_2_1904
+sym_2_1904: la $2, sym_2_1904
+.globl sym_2_1905
+sym_2_1905: la $2, sym_2_1905
+.globl sym_2_1906
+sym_2_1906: la $2, sym_2_1906
+.globl sym_2_1907
+sym_2_1907: la $2, sym_2_1907
+.globl sym_2_1908
+sym_2_1908: la $2, sym_2_1908
+.globl sym_2_1909
+sym_2_1909: la $2, sym_2_1909
+.globl sym_2_1910
+sym_2_1910: la $2, sym_2_1910
+.globl sym_2_1911
+sym_2_1911: la $2, sym_2_1911
+.globl sym_2_1912
+sym_2_1912: la $2, sym_2_1912
+.globl sym_2_1913
+sym_2_1913: la $2, sym_2_1913
+.globl sym_2_1914
+sym_2_1914: la $2, sym_2_1914
+.globl sym_2_1915
+sym_2_1915: la $2, sym_2_1915
+.globl sym_2_1916
+sym_2_1916: la $2, sym_2_1916
+.globl sym_2_1917
+sym_2_1917: la $2, sym_2_1917
+.globl sym_2_1918
+sym_2_1918: la $2, sym_2_1918
+.globl sym_2_1919
+sym_2_1919: la $2, sym_2_1919
+.globl sym_2_1920
+sym_2_1920: la $2, sym_2_1920
+.globl sym_2_1921
+sym_2_1921: la $2, sym_2_1921
+.globl sym_2_1922
+sym_2_1922: la $2, sym_2_1922
+.globl sym_2_1923
+sym_2_1923: la $2, sym_2_1923
+.globl sym_2_1924
+sym_2_1924: la $2, sym_2_1924
+.globl sym_2_1925
+sym_2_1925: la $2, sym_2_1925
+.globl sym_2_1926
+sym_2_1926: la $2, sym_2_1926
+.globl sym_2_1927
+sym_2_1927: la $2, sym_2_1927
+.globl sym_2_1928
+sym_2_1928: la $2, sym_2_1928
+.globl sym_2_1929
+sym_2_1929: la $2, sym_2_1929
+.globl sym_2_1930
+sym_2_1930: la $2, sym_2_1930
+.globl sym_2_1931
+sym_2_1931: la $2, sym_2_1931
+.globl sym_2_1932
+sym_2_1932: la $2, sym_2_1932
+.globl sym_2_1933
+sym_2_1933: la $2, sym_2_1933
+.globl sym_2_1934
+sym_2_1934: la $2, sym_2_1934
+.globl sym_2_1935
+sym_2_1935: la $2, sym_2_1935
+.globl sym_2_1936
+sym_2_1936: la $2, sym_2_1936
+.globl sym_2_1937
+sym_2_1937: la $2, sym_2_1937
+.globl sym_2_1938
+sym_2_1938: la $2, sym_2_1938
+.globl sym_2_1939
+sym_2_1939: la $2, sym_2_1939
+.globl sym_2_1940
+sym_2_1940: la $2, sym_2_1940
+.globl sym_2_1941
+sym_2_1941: la $2, sym_2_1941
+.globl sym_2_1942
+sym_2_1942: la $2, sym_2_1942
+.globl sym_2_1943
+sym_2_1943: la $2, sym_2_1943
+.globl sym_2_1944
+sym_2_1944: la $2, sym_2_1944
+.globl sym_2_1945
+sym_2_1945: la $2, sym_2_1945
+.globl sym_2_1946
+sym_2_1946: la $2, sym_2_1946
+.globl sym_2_1947
+sym_2_1947: la $2, sym_2_1947
+.globl sym_2_1948
+sym_2_1948: la $2, sym_2_1948
+.globl sym_2_1949
+sym_2_1949: la $2, sym_2_1949
+.globl sym_2_1950
+sym_2_1950: la $2, sym_2_1950
+.globl sym_2_1951
+sym_2_1951: la $2, sym_2_1951
+.globl sym_2_1952
+sym_2_1952: la $2, sym_2_1952
+.globl sym_2_1953
+sym_2_1953: la $2, sym_2_1953
+.globl sym_2_1954
+sym_2_1954: la $2, sym_2_1954
+.globl sym_2_1955
+sym_2_1955: la $2, sym_2_1955
+.globl sym_2_1956
+sym_2_1956: la $2, sym_2_1956
+.globl sym_2_1957
+sym_2_1957: la $2, sym_2_1957
+.globl sym_2_1958
+sym_2_1958: la $2, sym_2_1958
+.globl sym_2_1959
+sym_2_1959: la $2, sym_2_1959
+.globl sym_2_1960
+sym_2_1960: la $2, sym_2_1960
+.globl sym_2_1961
+sym_2_1961: la $2, sym_2_1961
+.globl sym_2_1962
+sym_2_1962: la $2, sym_2_1962
+.globl sym_2_1963
+sym_2_1963: la $2, sym_2_1963
+.globl sym_2_1964
+sym_2_1964: la $2, sym_2_1964
+.globl sym_2_1965
+sym_2_1965: la $2, sym_2_1965
+.globl sym_2_1966
+sym_2_1966: la $2, sym_2_1966
+.globl sym_2_1967
+sym_2_1967: la $2, sym_2_1967
+.globl sym_2_1968
+sym_2_1968: la $2, sym_2_1968
+.globl sym_2_1969
+sym_2_1969: la $2, sym_2_1969
+.globl sym_2_1970
+sym_2_1970: la $2, sym_2_1970
+.globl sym_2_1971
+sym_2_1971: la $2, sym_2_1971
+.globl sym_2_1972
+sym_2_1972: la $2, sym_2_1972
+.globl sym_2_1973
+sym_2_1973: la $2, sym_2_1973
+.globl sym_2_1974
+sym_2_1974: la $2, sym_2_1974
+.globl sym_2_1975
+sym_2_1975: la $2, sym_2_1975
+.globl sym_2_1976
+sym_2_1976: la $2, sym_2_1976
+.globl sym_2_1977
+sym_2_1977: la $2, sym_2_1977
+.globl sym_2_1978
+sym_2_1978: la $2, sym_2_1978
+.globl sym_2_1979
+sym_2_1979: la $2, sym_2_1979
+.globl sym_2_1980
+sym_2_1980: la $2, sym_2_1980
+.globl sym_2_1981
+sym_2_1981: la $2, sym_2_1981
+.globl sym_2_1982
+sym_2_1982: la $2, sym_2_1982
+.globl sym_2_1983
+sym_2_1983: la $2, sym_2_1983
+.globl sym_2_1984
+sym_2_1984: la $2, sym_2_1984
+.globl sym_2_1985
+sym_2_1985: la $2, sym_2_1985
+.globl sym_2_1986
+sym_2_1986: la $2, sym_2_1986
+.globl sym_2_1987
+sym_2_1987: la $2, sym_2_1987
+.globl sym_2_1988
+sym_2_1988: la $2, sym_2_1988
+.globl sym_2_1989
+sym_2_1989: la $2, sym_2_1989
+.globl sym_2_1990
+sym_2_1990: la $2, sym_2_1990
+.globl sym_2_1991
+sym_2_1991: la $2, sym_2_1991
+.globl sym_2_1992
+sym_2_1992: la $2, sym_2_1992
+.globl sym_2_1993
+sym_2_1993: la $2, sym_2_1993
+.globl sym_2_1994
+sym_2_1994: la $2, sym_2_1994
+.globl sym_2_1995
+sym_2_1995: la $2, sym_2_1995
+.globl sym_2_1996
+sym_2_1996: la $2, sym_2_1996
+.globl sym_2_1997
+sym_2_1997: la $2, sym_2_1997
+.globl sym_2_1998
+sym_2_1998: la $2, sym_2_1998
+.globl sym_2_1999
+sym_2_1999: la $2, sym_2_1999
+.globl sym_2_2000
+sym_2_2000: la $2, sym_2_2000
+.globl sym_2_2001
+sym_2_2001: la $2, sym_2_2001
+.globl sym_2_2002
+sym_2_2002: la $2, sym_2_2002
+.globl sym_2_2003
+sym_2_2003: la $2, sym_2_2003
+.globl sym_2_2004
+sym_2_2004: la $2, sym_2_2004
+.globl sym_2_2005
+sym_2_2005: la $2, sym_2_2005
+.globl sym_2_2006
+sym_2_2006: la $2, sym_2_2006
+.globl sym_2_2007
+sym_2_2007: la $2, sym_2_2007
+.globl sym_2_2008
+sym_2_2008: la $2, sym_2_2008
+.globl sym_2_2009
+sym_2_2009: la $2, sym_2_2009
+.globl sym_2_2010
+sym_2_2010: la $2, sym_2_2010
+.globl sym_2_2011
+sym_2_2011: la $2, sym_2_2011
+.globl sym_2_2012
+sym_2_2012: la $2, sym_2_2012
+.globl sym_2_2013
+sym_2_2013: la $2, sym_2_2013
+.globl sym_2_2014
+sym_2_2014: la $2, sym_2_2014
+.globl sym_2_2015
+sym_2_2015: la $2, sym_2_2015
+.globl sym_2_2016
+sym_2_2016: la $2, sym_2_2016
+.globl sym_2_2017
+sym_2_2017: la $2, sym_2_2017
+.globl sym_2_2018
+sym_2_2018: la $2, sym_2_2018
+.globl sym_2_2019
+sym_2_2019: la $2, sym_2_2019
+.globl sym_2_2020
+sym_2_2020: la $2, sym_2_2020
+.globl sym_2_2021
+sym_2_2021: la $2, sym_2_2021
+.globl sym_2_2022
+sym_2_2022: la $2, sym_2_2022
+.globl sym_2_2023
+sym_2_2023: la $2, sym_2_2023
+.globl sym_2_2024
+sym_2_2024: la $2, sym_2_2024
+.globl sym_2_2025
+sym_2_2025: la $2, sym_2_2025
+.globl sym_2_2026
+sym_2_2026: la $2, sym_2_2026
+.globl sym_2_2027
+sym_2_2027: la $2, sym_2_2027
+.globl sym_2_2028
+sym_2_2028: la $2, sym_2_2028
+.globl sym_2_2029
+sym_2_2029: la $2, sym_2_2029
+.globl sym_2_2030
+sym_2_2030: la $2, sym_2_2030
+.globl sym_2_2031
+sym_2_2031: la $2, sym_2_2031
+.globl sym_2_2032
+sym_2_2032: la $2, sym_2_2032
+.globl sym_2_2033
+sym_2_2033: la $2, sym_2_2033
+.globl sym_2_2034
+sym_2_2034: la $2, sym_2_2034
+.globl sym_2_2035
+sym_2_2035: la $2, sym_2_2035
+.globl sym_2_2036
+sym_2_2036: la $2, sym_2_2036
+.globl sym_2_2037
+sym_2_2037: la $2, sym_2_2037
+.globl sym_2_2038
+sym_2_2038: la $2, sym_2_2038
+.globl sym_2_2039
+sym_2_2039: la $2, sym_2_2039
+.globl sym_2_2040
+sym_2_2040: la $2, sym_2_2040
+.globl sym_2_2041
+sym_2_2041: la $2, sym_2_2041
+.globl sym_2_2042
+sym_2_2042: la $2, sym_2_2042
+.globl sym_2_2043
+sym_2_2043: la $2, sym_2_2043
+.globl sym_2_2044
+sym_2_2044: la $2, sym_2_2044
+.globl sym_2_2045
+sym_2_2045: la $2, sym_2_2045
+.globl sym_2_2046
+sym_2_2046: la $2, sym_2_2046
+.globl sym_2_2047
+sym_2_2047: la $2, sym_2_2047
+.globl sym_2_2048
+sym_2_2048: la $2, sym_2_2048
+.globl sym_2_2049
+sym_2_2049: la $2, sym_2_2049
+.globl sym_2_2050
+sym_2_2050: la $2, sym_2_2050
+.globl sym_2_2051
+sym_2_2051: la $2, sym_2_2051
+.globl sym_2_2052
+sym_2_2052: la $2, sym_2_2052
+.globl sym_2_2053
+sym_2_2053: la $2, sym_2_2053
+.globl sym_2_2054
+sym_2_2054: la $2, sym_2_2054
+.globl sym_2_2055
+sym_2_2055: la $2, sym_2_2055
+.globl sym_2_2056
+sym_2_2056: la $2, sym_2_2056
+.globl sym_2_2057
+sym_2_2057: la $2, sym_2_2057
+.globl sym_2_2058
+sym_2_2058: la $2, sym_2_2058
+.globl sym_2_2059
+sym_2_2059: la $2, sym_2_2059
+.globl sym_2_2060
+sym_2_2060: la $2, sym_2_2060
+.globl sym_2_2061
+sym_2_2061: la $2, sym_2_2061
+.globl sym_2_2062
+sym_2_2062: la $2, sym_2_2062
+.globl sym_2_2063
+sym_2_2063: la $2, sym_2_2063
+.globl sym_2_2064
+sym_2_2064: la $2, sym_2_2064
+.globl sym_2_2065
+sym_2_2065: la $2, sym_2_2065
+.globl sym_2_2066
+sym_2_2066: la $2, sym_2_2066
+.globl sym_2_2067
+sym_2_2067: la $2, sym_2_2067
+.globl sym_2_2068
+sym_2_2068: la $2, sym_2_2068
+.globl sym_2_2069
+sym_2_2069: la $2, sym_2_2069
+.globl sym_2_2070
+sym_2_2070: la $2, sym_2_2070
+.globl sym_2_2071
+sym_2_2071: la $2, sym_2_2071
+.globl sym_2_2072
+sym_2_2072: la $2, sym_2_2072
+.globl sym_2_2073
+sym_2_2073: la $2, sym_2_2073
+.globl sym_2_2074
+sym_2_2074: la $2, sym_2_2074
+.globl sym_2_2075
+sym_2_2075: la $2, sym_2_2075
+.globl sym_2_2076
+sym_2_2076: la $2, sym_2_2076
+.globl sym_2_2077
+sym_2_2077: la $2, sym_2_2077
+.globl sym_2_2078
+sym_2_2078: la $2, sym_2_2078
+.globl sym_2_2079
+sym_2_2079: la $2, sym_2_2079
+.globl sym_2_2080
+sym_2_2080: la $2, sym_2_2080
+.globl sym_2_2081
+sym_2_2081: la $2, sym_2_2081
+.globl sym_2_2082
+sym_2_2082: la $2, sym_2_2082
+.globl sym_2_2083
+sym_2_2083: la $2, sym_2_2083
+.globl sym_2_2084
+sym_2_2084: la $2, sym_2_2084
+.globl sym_2_2085
+sym_2_2085: la $2, sym_2_2085
+.globl sym_2_2086
+sym_2_2086: la $2, sym_2_2086
+.globl sym_2_2087
+sym_2_2087: la $2, sym_2_2087
+.globl sym_2_2088
+sym_2_2088: la $2, sym_2_2088
+.globl sym_2_2089
+sym_2_2089: la $2, sym_2_2089
+.globl sym_2_2090
+sym_2_2090: la $2, sym_2_2090
+.globl sym_2_2091
+sym_2_2091: la $2, sym_2_2091
+.globl sym_2_2092
+sym_2_2092: la $2, sym_2_2092
+.globl sym_2_2093
+sym_2_2093: la $2, sym_2_2093
+.globl sym_2_2094
+sym_2_2094: la $2, sym_2_2094
+.globl sym_2_2095
+sym_2_2095: la $2, sym_2_2095
+.globl sym_2_2096
+sym_2_2096: la $2, sym_2_2096
+.globl sym_2_2097
+sym_2_2097: la $2, sym_2_2097
+.globl sym_2_2098
+sym_2_2098: la $2, sym_2_2098
+.globl sym_2_2099
+sym_2_2099: la $2, sym_2_2099
+.globl sym_2_2100
+sym_2_2100: la $2, sym_2_2100
+.globl sym_2_2101
+sym_2_2101: la $2, sym_2_2101
+.globl sym_2_2102
+sym_2_2102: la $2, sym_2_2102
+.globl sym_2_2103
+sym_2_2103: la $2, sym_2_2103
+.globl sym_2_2104
+sym_2_2104: la $2, sym_2_2104
+.globl sym_2_2105
+sym_2_2105: la $2, sym_2_2105
+.globl sym_2_2106
+sym_2_2106: la $2, sym_2_2106
+.globl sym_2_2107
+sym_2_2107: la $2, sym_2_2107
+.globl sym_2_2108
+sym_2_2108: la $2, sym_2_2108
+.globl sym_2_2109
+sym_2_2109: la $2, sym_2_2109
+.globl sym_2_2110
+sym_2_2110: la $2, sym_2_2110
+.globl sym_2_2111
+sym_2_2111: la $2, sym_2_2111
+.globl sym_2_2112
+sym_2_2112: la $2, sym_2_2112
+.globl sym_2_2113
+sym_2_2113: la $2, sym_2_2113
+.globl sym_2_2114
+sym_2_2114: la $2, sym_2_2114
+.globl sym_2_2115
+sym_2_2115: la $2, sym_2_2115
+.globl sym_2_2116
+sym_2_2116: la $2, sym_2_2116
+.globl sym_2_2117
+sym_2_2117: la $2, sym_2_2117
+.globl sym_2_2118
+sym_2_2118: la $2, sym_2_2118
+.globl sym_2_2119
+sym_2_2119: la $2, sym_2_2119
+.globl sym_2_2120
+sym_2_2120: la $2, sym_2_2120
+.globl sym_2_2121
+sym_2_2121: la $2, sym_2_2121
+.globl sym_2_2122
+sym_2_2122: la $2, sym_2_2122
+.globl sym_2_2123
+sym_2_2123: la $2, sym_2_2123
+.globl sym_2_2124
+sym_2_2124: la $2, sym_2_2124
+.globl sym_2_2125
+sym_2_2125: la $2, sym_2_2125
+.globl sym_2_2126
+sym_2_2126: la $2, sym_2_2126
+.globl sym_2_2127
+sym_2_2127: la $2, sym_2_2127
+.globl sym_2_2128
+sym_2_2128: la $2, sym_2_2128
+.globl sym_2_2129
+sym_2_2129: la $2, sym_2_2129
+.globl sym_2_2130
+sym_2_2130: la $2, sym_2_2130
+.globl sym_2_2131
+sym_2_2131: la $2, sym_2_2131
+.globl sym_2_2132
+sym_2_2132: la $2, sym_2_2132
+.globl sym_2_2133
+sym_2_2133: la $2, sym_2_2133
+.globl sym_2_2134
+sym_2_2134: la $2, sym_2_2134
+.globl sym_2_2135
+sym_2_2135: la $2, sym_2_2135
+.globl sym_2_2136
+sym_2_2136: la $2, sym_2_2136
+.globl sym_2_2137
+sym_2_2137: la $2, sym_2_2137
+.globl sym_2_2138
+sym_2_2138: la $2, sym_2_2138
+.globl sym_2_2139
+sym_2_2139: la $2, sym_2_2139
+.globl sym_2_2140
+sym_2_2140: la $2, sym_2_2140
+.globl sym_2_2141
+sym_2_2141: la $2, sym_2_2141
+.globl sym_2_2142
+sym_2_2142: la $2, sym_2_2142
+.globl sym_2_2143
+sym_2_2143: la $2, sym_2_2143
+.globl sym_2_2144
+sym_2_2144: la $2, sym_2_2144
+.globl sym_2_2145
+sym_2_2145: la $2, sym_2_2145
+.globl sym_2_2146
+sym_2_2146: la $2, sym_2_2146
+.globl sym_2_2147
+sym_2_2147: la $2, sym_2_2147
+.globl sym_2_2148
+sym_2_2148: la $2, sym_2_2148
+.globl sym_2_2149
+sym_2_2149: la $2, sym_2_2149
+.globl sym_2_2150
+sym_2_2150: la $2, sym_2_2150
+.globl sym_2_2151
+sym_2_2151: la $2, sym_2_2151
+.globl sym_2_2152
+sym_2_2152: la $2, sym_2_2152
+.globl sym_2_2153
+sym_2_2153: la $2, sym_2_2153
+.globl sym_2_2154
+sym_2_2154: la $2, sym_2_2154
+.globl sym_2_2155
+sym_2_2155: la $2, sym_2_2155
+.globl sym_2_2156
+sym_2_2156: la $2, sym_2_2156
+.globl sym_2_2157
+sym_2_2157: la $2, sym_2_2157
+.globl sym_2_2158
+sym_2_2158: la $2, sym_2_2158
+.globl sym_2_2159
+sym_2_2159: la $2, sym_2_2159
+.globl sym_2_2160
+sym_2_2160: la $2, sym_2_2160
+.globl sym_2_2161
+sym_2_2161: la $2, sym_2_2161
+.globl sym_2_2162
+sym_2_2162: la $2, sym_2_2162
+.globl sym_2_2163
+sym_2_2163: la $2, sym_2_2163
+.globl sym_2_2164
+sym_2_2164: la $2, sym_2_2164
+.globl sym_2_2165
+sym_2_2165: la $2, sym_2_2165
+.globl sym_2_2166
+sym_2_2166: la $2, sym_2_2166
+.globl sym_2_2167
+sym_2_2167: la $2, sym_2_2167
+.globl sym_2_2168
+sym_2_2168: la $2, sym_2_2168
+.globl sym_2_2169
+sym_2_2169: la $2, sym_2_2169
+.globl sym_2_2170
+sym_2_2170: la $2, sym_2_2170
+.globl sym_2_2171
+sym_2_2171: la $2, sym_2_2171
+.globl sym_2_2172
+sym_2_2172: la $2, sym_2_2172
+.globl sym_2_2173
+sym_2_2173: la $2, sym_2_2173
+.globl sym_2_2174
+sym_2_2174: la $2, sym_2_2174
+.globl sym_2_2175
+sym_2_2175: la $2, sym_2_2175
+.globl sym_2_2176
+sym_2_2176: la $2, sym_2_2176
+.globl sym_2_2177
+sym_2_2177: la $2, sym_2_2177
+.globl sym_2_2178
+sym_2_2178: la $2, sym_2_2178
+.globl sym_2_2179
+sym_2_2179: la $2, sym_2_2179
+.globl sym_2_2180
+sym_2_2180: la $2, sym_2_2180
+.globl sym_2_2181
+sym_2_2181: la $2, sym_2_2181
+.globl sym_2_2182
+sym_2_2182: la $2, sym_2_2182
+.globl sym_2_2183
+sym_2_2183: la $2, sym_2_2183
+.globl sym_2_2184
+sym_2_2184: la $2, sym_2_2184
+.globl sym_2_2185
+sym_2_2185: la $2, sym_2_2185
+.globl sym_2_2186
+sym_2_2186: la $2, sym_2_2186
+.globl sym_2_2187
+sym_2_2187: la $2, sym_2_2187
+.globl sym_2_2188
+sym_2_2188: la $2, sym_2_2188
+.globl sym_2_2189
+sym_2_2189: la $2, sym_2_2189
+.globl sym_2_2190
+sym_2_2190: la $2, sym_2_2190
+.globl sym_2_2191
+sym_2_2191: la $2, sym_2_2191
+.globl sym_2_2192
+sym_2_2192: la $2, sym_2_2192
+.globl sym_2_2193
+sym_2_2193: la $2, sym_2_2193
+.globl sym_2_2194
+sym_2_2194: la $2, sym_2_2194
+.globl sym_2_2195
+sym_2_2195: la $2, sym_2_2195
+.globl sym_2_2196
+sym_2_2196: la $2, sym_2_2196
+.globl sym_2_2197
+sym_2_2197: la $2, sym_2_2197
+.globl sym_2_2198
+sym_2_2198: la $2, sym_2_2198
+.globl sym_2_2199
+sym_2_2199: la $2, sym_2_2199
+.globl sym_2_2200
+sym_2_2200: la $2, sym_2_2200
+.globl sym_2_2201
+sym_2_2201: la $2, sym_2_2201
+.globl sym_2_2202
+sym_2_2202: la $2, sym_2_2202
+.globl sym_2_2203
+sym_2_2203: la $2, sym_2_2203
+.globl sym_2_2204
+sym_2_2204: la $2, sym_2_2204
+.globl sym_2_2205
+sym_2_2205: la $2, sym_2_2205
+.globl sym_2_2206
+sym_2_2206: la $2, sym_2_2206
+.globl sym_2_2207
+sym_2_2207: la $2, sym_2_2207
+.globl sym_2_2208
+sym_2_2208: la $2, sym_2_2208
+.globl sym_2_2209
+sym_2_2209: la $2, sym_2_2209
+.globl sym_2_2210
+sym_2_2210: la $2, sym_2_2210
+.globl sym_2_2211
+sym_2_2211: la $2, sym_2_2211
+.globl sym_2_2212
+sym_2_2212: la $2, sym_2_2212
+.globl sym_2_2213
+sym_2_2213: la $2, sym_2_2213
+.globl sym_2_2214
+sym_2_2214: la $2, sym_2_2214
+.globl sym_2_2215
+sym_2_2215: la $2, sym_2_2215
+.globl sym_2_2216
+sym_2_2216: la $2, sym_2_2216
+.globl sym_2_2217
+sym_2_2217: la $2, sym_2_2217
+.globl sym_2_2218
+sym_2_2218: la $2, sym_2_2218
+.globl sym_2_2219
+sym_2_2219: la $2, sym_2_2219
+.globl sym_2_2220
+sym_2_2220: la $2, sym_2_2220
+.globl sym_2_2221
+sym_2_2221: la $2, sym_2_2221
+.globl sym_2_2222
+sym_2_2222: la $2, sym_2_2222
+.globl sym_2_2223
+sym_2_2223: la $2, sym_2_2223
+.globl sym_2_2224
+sym_2_2224: la $2, sym_2_2224
+.globl sym_2_2225
+sym_2_2225: la $2, sym_2_2225
+.globl sym_2_2226
+sym_2_2226: la $2, sym_2_2226
+.globl sym_2_2227
+sym_2_2227: la $2, sym_2_2227
+.globl sym_2_2228
+sym_2_2228: la $2, sym_2_2228
+.globl sym_2_2229
+sym_2_2229: la $2, sym_2_2229
+.globl sym_2_2230
+sym_2_2230: la $2, sym_2_2230
+.globl sym_2_2231
+sym_2_2231: la $2, sym_2_2231
+.globl sym_2_2232
+sym_2_2232: la $2, sym_2_2232
+.globl sym_2_2233
+sym_2_2233: la $2, sym_2_2233
+.globl sym_2_2234
+sym_2_2234: la $2, sym_2_2234
+.globl sym_2_2235
+sym_2_2235: la $2, sym_2_2235
+.globl sym_2_2236
+sym_2_2236: la $2, sym_2_2236
+.globl sym_2_2237
+sym_2_2237: la $2, sym_2_2237
+.globl sym_2_2238
+sym_2_2238: la $2, sym_2_2238
+.globl sym_2_2239
+sym_2_2239: la $2, sym_2_2239
+.globl sym_2_2240
+sym_2_2240: la $2, sym_2_2240
+.globl sym_2_2241
+sym_2_2241: la $2, sym_2_2241
+.globl sym_2_2242
+sym_2_2242: la $2, sym_2_2242
+.globl sym_2_2243
+sym_2_2243: la $2, sym_2_2243
+.globl sym_2_2244
+sym_2_2244: la $2, sym_2_2244
+.globl sym_2_2245
+sym_2_2245: la $2, sym_2_2245
+.globl sym_2_2246
+sym_2_2246: la $2, sym_2_2246
+.globl sym_2_2247
+sym_2_2247: la $2, sym_2_2247
+.globl sym_2_2248
+sym_2_2248: la $2, sym_2_2248
+.globl sym_2_2249
+sym_2_2249: la $2, sym_2_2249
+.globl sym_2_2250
+sym_2_2250: la $2, sym_2_2250
+.globl sym_2_2251
+sym_2_2251: la $2, sym_2_2251
+.globl sym_2_2252
+sym_2_2252: la $2, sym_2_2252
+.globl sym_2_2253
+sym_2_2253: la $2, sym_2_2253
+.globl sym_2_2254
+sym_2_2254: la $2, sym_2_2254
+.globl sym_2_2255
+sym_2_2255: la $2, sym_2_2255
+.globl sym_2_2256
+sym_2_2256: la $2, sym_2_2256
+.globl sym_2_2257
+sym_2_2257: la $2, sym_2_2257
+.globl sym_2_2258
+sym_2_2258: la $2, sym_2_2258
+.globl sym_2_2259
+sym_2_2259: la $2, sym_2_2259
+.globl sym_2_2260
+sym_2_2260: la $2, sym_2_2260
+.globl sym_2_2261
+sym_2_2261: la $2, sym_2_2261
+.globl sym_2_2262
+sym_2_2262: la $2, sym_2_2262
+.globl sym_2_2263
+sym_2_2263: la $2, sym_2_2263
+.globl sym_2_2264
+sym_2_2264: la $2, sym_2_2264
+.globl sym_2_2265
+sym_2_2265: la $2, sym_2_2265
+.globl sym_2_2266
+sym_2_2266: la $2, sym_2_2266
+.globl sym_2_2267
+sym_2_2267: la $2, sym_2_2267
+.globl sym_2_2268
+sym_2_2268: la $2, sym_2_2268
+.globl sym_2_2269
+sym_2_2269: la $2, sym_2_2269
+.globl sym_2_2270
+sym_2_2270: la $2, sym_2_2270
+.globl sym_2_2271
+sym_2_2271: la $2, sym_2_2271
+.globl sym_2_2272
+sym_2_2272: la $2, sym_2_2272
+.globl sym_2_2273
+sym_2_2273: la $2, sym_2_2273
+.globl sym_2_2274
+sym_2_2274: la $2, sym_2_2274
+.globl sym_2_2275
+sym_2_2275: la $2, sym_2_2275
+.globl sym_2_2276
+sym_2_2276: la $2, sym_2_2276
+.globl sym_2_2277
+sym_2_2277: la $2, sym_2_2277
+.globl sym_2_2278
+sym_2_2278: la $2, sym_2_2278
+.globl sym_2_2279
+sym_2_2279: la $2, sym_2_2279
+.globl sym_2_2280
+sym_2_2280: la $2, sym_2_2280
+.globl sym_2_2281
+sym_2_2281: la $2, sym_2_2281
+.globl sym_2_2282
+sym_2_2282: la $2, sym_2_2282
+.globl sym_2_2283
+sym_2_2283: la $2, sym_2_2283
+.globl sym_2_2284
+sym_2_2284: la $2, sym_2_2284
+.globl sym_2_2285
+sym_2_2285: la $2, sym_2_2285
+.globl sym_2_2286
+sym_2_2286: la $2, sym_2_2286
+.globl sym_2_2287
+sym_2_2287: la $2, sym_2_2287
+.globl sym_2_2288
+sym_2_2288: la $2, sym_2_2288
+.globl sym_2_2289
+sym_2_2289: la $2, sym_2_2289
+.globl sym_2_2290
+sym_2_2290: la $2, sym_2_2290
+.globl sym_2_2291
+sym_2_2291: la $2, sym_2_2291
+.globl sym_2_2292
+sym_2_2292: la $2, sym_2_2292
+.globl sym_2_2293
+sym_2_2293: la $2, sym_2_2293
+.globl sym_2_2294
+sym_2_2294: la $2, sym_2_2294
+.globl sym_2_2295
+sym_2_2295: la $2, sym_2_2295
+.globl sym_2_2296
+sym_2_2296: la $2, sym_2_2296
+.globl sym_2_2297
+sym_2_2297: la $2, sym_2_2297
+.globl sym_2_2298
+sym_2_2298: la $2, sym_2_2298
+.globl sym_2_2299
+sym_2_2299: la $2, sym_2_2299
+.globl sym_2_2300
+sym_2_2300: la $2, sym_2_2300
+.globl sym_2_2301
+sym_2_2301: la $2, sym_2_2301
+.globl sym_2_2302
+sym_2_2302: la $2, sym_2_2302
+.globl sym_2_2303
+sym_2_2303: la $2, sym_2_2303
+.globl sym_2_2304
+sym_2_2304: la $2, sym_2_2304
+.globl sym_2_2305
+sym_2_2305: la $2, sym_2_2305
+.globl sym_2_2306
+sym_2_2306: la $2, sym_2_2306
+.globl sym_2_2307
+sym_2_2307: la $2, sym_2_2307
+.globl sym_2_2308
+sym_2_2308: la $2, sym_2_2308
+.globl sym_2_2309
+sym_2_2309: la $2, sym_2_2309
+.globl sym_2_2310
+sym_2_2310: la $2, sym_2_2310
+.globl sym_2_2311
+sym_2_2311: la $2, sym_2_2311
+.globl sym_2_2312
+sym_2_2312: la $2, sym_2_2312
+.globl sym_2_2313
+sym_2_2313: la $2, sym_2_2313
+.globl sym_2_2314
+sym_2_2314: la $2, sym_2_2314
+.globl sym_2_2315
+sym_2_2315: la $2, sym_2_2315
+.globl sym_2_2316
+sym_2_2316: la $2, sym_2_2316
+.globl sym_2_2317
+sym_2_2317: la $2, sym_2_2317
+.globl sym_2_2318
+sym_2_2318: la $2, sym_2_2318
+.globl sym_2_2319
+sym_2_2319: la $2, sym_2_2319
+.globl sym_2_2320
+sym_2_2320: la $2, sym_2_2320
+.globl sym_2_2321
+sym_2_2321: la $2, sym_2_2321
+.globl sym_2_2322
+sym_2_2322: la $2, sym_2_2322
+.globl sym_2_2323
+sym_2_2323: la $2, sym_2_2323
+.globl sym_2_2324
+sym_2_2324: la $2, sym_2_2324
+.globl sym_2_2325
+sym_2_2325: la $2, sym_2_2325
+.globl sym_2_2326
+sym_2_2326: la $2, sym_2_2326
+.globl sym_2_2327
+sym_2_2327: la $2, sym_2_2327
+.globl sym_2_2328
+sym_2_2328: la $2, sym_2_2328
+.globl sym_2_2329
+sym_2_2329: la $2, sym_2_2329
+.globl sym_2_2330
+sym_2_2330: la $2, sym_2_2330
+.globl sym_2_2331
+sym_2_2331: la $2, sym_2_2331
+.globl sym_2_2332
+sym_2_2332: la $2, sym_2_2332
+.globl sym_2_2333
+sym_2_2333: la $2, sym_2_2333
+.globl sym_2_2334
+sym_2_2334: la $2, sym_2_2334
+.globl sym_2_2335
+sym_2_2335: la $2, sym_2_2335
+.globl sym_2_2336
+sym_2_2336: la $2, sym_2_2336
+.globl sym_2_2337
+sym_2_2337: la $2, sym_2_2337
+.globl sym_2_2338
+sym_2_2338: la $2, sym_2_2338
+.globl sym_2_2339
+sym_2_2339: la $2, sym_2_2339
+.globl sym_2_2340
+sym_2_2340: la $2, sym_2_2340
+.globl sym_2_2341
+sym_2_2341: la $2, sym_2_2341
+.globl sym_2_2342
+sym_2_2342: la $2, sym_2_2342
+.globl sym_2_2343
+sym_2_2343: la $2, sym_2_2343
+.globl sym_2_2344
+sym_2_2344: la $2, sym_2_2344
+.globl sym_2_2345
+sym_2_2345: la $2, sym_2_2345
+.globl sym_2_2346
+sym_2_2346: la $2, sym_2_2346
+.globl sym_2_2347
+sym_2_2347: la $2, sym_2_2347
+.globl sym_2_2348
+sym_2_2348: la $2, sym_2_2348
+.globl sym_2_2349
+sym_2_2349: la $2, sym_2_2349
+.globl sym_2_2350
+sym_2_2350: la $2, sym_2_2350
+.globl sym_2_2351
+sym_2_2351: la $2, sym_2_2351
+.globl sym_2_2352
+sym_2_2352: la $2, sym_2_2352
+.globl sym_2_2353
+sym_2_2353: la $2, sym_2_2353
+.globl sym_2_2354
+sym_2_2354: la $2, sym_2_2354
+.globl sym_2_2355
+sym_2_2355: la $2, sym_2_2355
+.globl sym_2_2356
+sym_2_2356: la $2, sym_2_2356
+.globl sym_2_2357
+sym_2_2357: la $2, sym_2_2357
+.globl sym_2_2358
+sym_2_2358: la $2, sym_2_2358
+.globl sym_2_2359
+sym_2_2359: la $2, sym_2_2359
+.globl sym_2_2360
+sym_2_2360: la $2, sym_2_2360
+.globl sym_2_2361
+sym_2_2361: la $2, sym_2_2361
+.globl sym_2_2362
+sym_2_2362: la $2, sym_2_2362
+.globl sym_2_2363
+sym_2_2363: la $2, sym_2_2363
+.globl sym_2_2364
+sym_2_2364: la $2, sym_2_2364
+.globl sym_2_2365
+sym_2_2365: la $2, sym_2_2365
+.globl sym_2_2366
+sym_2_2366: la $2, sym_2_2366
+.globl sym_2_2367
+sym_2_2367: la $2, sym_2_2367
+.globl sym_2_2368
+sym_2_2368: la $2, sym_2_2368
+.globl sym_2_2369
+sym_2_2369: la $2, sym_2_2369
+.globl sym_2_2370
+sym_2_2370: la $2, sym_2_2370
+.globl sym_2_2371
+sym_2_2371: la $2, sym_2_2371
+.globl sym_2_2372
+sym_2_2372: la $2, sym_2_2372
+.globl sym_2_2373
+sym_2_2373: la $2, sym_2_2373
+.globl sym_2_2374
+sym_2_2374: la $2, sym_2_2374
+.globl sym_2_2375
+sym_2_2375: la $2, sym_2_2375
+.globl sym_2_2376
+sym_2_2376: la $2, sym_2_2376
+.globl sym_2_2377
+sym_2_2377: la $2, sym_2_2377
+.globl sym_2_2378
+sym_2_2378: la $2, sym_2_2378
+.globl sym_2_2379
+sym_2_2379: la $2, sym_2_2379
+.globl sym_2_2380
+sym_2_2380: la $2, sym_2_2380
+.globl sym_2_2381
+sym_2_2381: la $2, sym_2_2381
+.globl sym_2_2382
+sym_2_2382: la $2, sym_2_2382
+.globl sym_2_2383
+sym_2_2383: la $2, sym_2_2383
+.globl sym_2_2384
+sym_2_2384: la $2, sym_2_2384
+.globl sym_2_2385
+sym_2_2385: la $2, sym_2_2385
+.globl sym_2_2386
+sym_2_2386: la $2, sym_2_2386
+.globl sym_2_2387
+sym_2_2387: la $2, sym_2_2387
+.globl sym_2_2388
+sym_2_2388: la $2, sym_2_2388
+.globl sym_2_2389
+sym_2_2389: la $2, sym_2_2389
+.globl sym_2_2390
+sym_2_2390: la $2, sym_2_2390
+.globl sym_2_2391
+sym_2_2391: la $2, sym_2_2391
+.globl sym_2_2392
+sym_2_2392: la $2, sym_2_2392
+.globl sym_2_2393
+sym_2_2393: la $2, sym_2_2393
+.globl sym_2_2394
+sym_2_2394: la $2, sym_2_2394
+.globl sym_2_2395
+sym_2_2395: la $2, sym_2_2395
+.globl sym_2_2396
+sym_2_2396: la $2, sym_2_2396
+.globl sym_2_2397
+sym_2_2397: la $2, sym_2_2397
+.globl sym_2_2398
+sym_2_2398: la $2, sym_2_2398
+.globl sym_2_2399
+sym_2_2399: la $2, sym_2_2399
+.globl sym_2_2400
+sym_2_2400: la $2, sym_2_2400
+.globl sym_2_2401
+sym_2_2401: la $2, sym_2_2401
+.globl sym_2_2402
+sym_2_2402: la $2, sym_2_2402
+.globl sym_2_2403
+sym_2_2403: la $2, sym_2_2403
+.globl sym_2_2404
+sym_2_2404: la $2, sym_2_2404
+.globl sym_2_2405
+sym_2_2405: la $2, sym_2_2405
+.globl sym_2_2406
+sym_2_2406: la $2, sym_2_2406
+.globl sym_2_2407
+sym_2_2407: la $2, sym_2_2407
+.globl sym_2_2408
+sym_2_2408: la $2, sym_2_2408
+.globl sym_2_2409
+sym_2_2409: la $2, sym_2_2409
+.globl sym_2_2410
+sym_2_2410: la $2, sym_2_2410
+.globl sym_2_2411
+sym_2_2411: la $2, sym_2_2411
+.globl sym_2_2412
+sym_2_2412: la $2, sym_2_2412
+.globl sym_2_2413
+sym_2_2413: la $2, sym_2_2413
+.globl sym_2_2414
+sym_2_2414: la $2, sym_2_2414
+.globl sym_2_2415
+sym_2_2415: la $2, sym_2_2415
+.globl sym_2_2416
+sym_2_2416: la $2, sym_2_2416
+.globl sym_2_2417
+sym_2_2417: la $2, sym_2_2417
+.globl sym_2_2418
+sym_2_2418: la $2, sym_2_2418
+.globl sym_2_2419
+sym_2_2419: la $2, sym_2_2419
+.globl sym_2_2420
+sym_2_2420: la $2, sym_2_2420
+.globl sym_2_2421
+sym_2_2421: la $2, sym_2_2421
+.globl sym_2_2422
+sym_2_2422: la $2, sym_2_2422
+.globl sym_2_2423
+sym_2_2423: la $2, sym_2_2423
+.globl sym_2_2424
+sym_2_2424: la $2, sym_2_2424
+.globl sym_2_2425
+sym_2_2425: la $2, sym_2_2425
+.globl sym_2_2426
+sym_2_2426: la $2, sym_2_2426
+.globl sym_2_2427
+sym_2_2427: la $2, sym_2_2427
+.globl sym_2_2428
+sym_2_2428: la $2, sym_2_2428
+.globl sym_2_2429
+sym_2_2429: la $2, sym_2_2429
+.globl sym_2_2430
+sym_2_2430: la $2, sym_2_2430
+.globl sym_2_2431
+sym_2_2431: la $2, sym_2_2431
+.globl sym_2_2432
+sym_2_2432: la $2, sym_2_2432
+.globl sym_2_2433
+sym_2_2433: la $2, sym_2_2433
+.globl sym_2_2434
+sym_2_2434: la $2, sym_2_2434
+.globl sym_2_2435
+sym_2_2435: la $2, sym_2_2435
+.globl sym_2_2436
+sym_2_2436: la $2, sym_2_2436
+.globl sym_2_2437
+sym_2_2437: la $2, sym_2_2437
+.globl sym_2_2438
+sym_2_2438: la $2, sym_2_2438
+.globl sym_2_2439
+sym_2_2439: la $2, sym_2_2439
+.globl sym_2_2440
+sym_2_2440: la $2, sym_2_2440
+.globl sym_2_2441
+sym_2_2441: la $2, sym_2_2441
+.globl sym_2_2442
+sym_2_2442: la $2, sym_2_2442
+.globl sym_2_2443
+sym_2_2443: la $2, sym_2_2443
+.globl sym_2_2444
+sym_2_2444: la $2, sym_2_2444
+.globl sym_2_2445
+sym_2_2445: la $2, sym_2_2445
+.globl sym_2_2446
+sym_2_2446: la $2, sym_2_2446
+.globl sym_2_2447
+sym_2_2447: la $2, sym_2_2447
+.globl sym_2_2448
+sym_2_2448: la $2, sym_2_2448
+.globl sym_2_2449
+sym_2_2449: la $2, sym_2_2449
+.globl sym_2_2450
+sym_2_2450: la $2, sym_2_2450
+.globl sym_2_2451
+sym_2_2451: la $2, sym_2_2451
+.globl sym_2_2452
+sym_2_2452: la $2, sym_2_2452
+.globl sym_2_2453
+sym_2_2453: la $2, sym_2_2453
+.globl sym_2_2454
+sym_2_2454: la $2, sym_2_2454
+.globl sym_2_2455
+sym_2_2455: la $2, sym_2_2455
+.globl sym_2_2456
+sym_2_2456: la $2, sym_2_2456
+.globl sym_2_2457
+sym_2_2457: la $2, sym_2_2457
+.globl sym_2_2458
+sym_2_2458: la $2, sym_2_2458
+.globl sym_2_2459
+sym_2_2459: la $2, sym_2_2459
+.globl sym_2_2460
+sym_2_2460: la $2, sym_2_2460
+.globl sym_2_2461
+sym_2_2461: la $2, sym_2_2461
+.globl sym_2_2462
+sym_2_2462: la $2, sym_2_2462
+.globl sym_2_2463
+sym_2_2463: la $2, sym_2_2463
+.globl sym_2_2464
+sym_2_2464: la $2, sym_2_2464
+.globl sym_2_2465
+sym_2_2465: la $2, sym_2_2465
+.globl sym_2_2466
+sym_2_2466: la $2, sym_2_2466
+.globl sym_2_2467
+sym_2_2467: la $2, sym_2_2467
+.globl sym_2_2468
+sym_2_2468: la $2, sym_2_2468
+.globl sym_2_2469
+sym_2_2469: la $2, sym_2_2469
+.globl sym_2_2470
+sym_2_2470: la $2, sym_2_2470
+.globl sym_2_2471
+sym_2_2471: la $2, sym_2_2471
+.globl sym_2_2472
+sym_2_2472: la $2, sym_2_2472
+.globl sym_2_2473
+sym_2_2473: la $2, sym_2_2473
+.globl sym_2_2474
+sym_2_2474: la $2, sym_2_2474
+.globl sym_2_2475
+sym_2_2475: la $2, sym_2_2475
+.globl sym_2_2476
+sym_2_2476: la $2, sym_2_2476
+.globl sym_2_2477
+sym_2_2477: la $2, sym_2_2477
+.globl sym_2_2478
+sym_2_2478: la $2, sym_2_2478
+.globl sym_2_2479
+sym_2_2479: la $2, sym_2_2479
+.globl sym_2_2480
+sym_2_2480: la $2, sym_2_2480
+.globl sym_2_2481
+sym_2_2481: la $2, sym_2_2481
+.globl sym_2_2482
+sym_2_2482: la $2, sym_2_2482
+.globl sym_2_2483
+sym_2_2483: la $2, sym_2_2483
+.globl sym_2_2484
+sym_2_2484: la $2, sym_2_2484
+.globl sym_2_2485
+sym_2_2485: la $2, sym_2_2485
+.globl sym_2_2486
+sym_2_2486: la $2, sym_2_2486
+.globl sym_2_2487
+sym_2_2487: la $2, sym_2_2487
+.globl sym_2_2488
+sym_2_2488: la $2, sym_2_2488
+.globl sym_2_2489
+sym_2_2489: la $2, sym_2_2489
+.globl sym_2_2490
+sym_2_2490: la $2, sym_2_2490
+.globl sym_2_2491
+sym_2_2491: la $2, sym_2_2491
+.globl sym_2_2492
+sym_2_2492: la $2, sym_2_2492
+.globl sym_2_2493
+sym_2_2493: la $2, sym_2_2493
+.globl sym_2_2494
+sym_2_2494: la $2, sym_2_2494
+.globl sym_2_2495
+sym_2_2495: la $2, sym_2_2495
+.globl sym_2_2496
+sym_2_2496: la $2, sym_2_2496
+.globl sym_2_2497
+sym_2_2497: la $2, sym_2_2497
+.globl sym_2_2498
+sym_2_2498: la $2, sym_2_2498
+.globl sym_2_2499
+sym_2_2499: la $2, sym_2_2499
+.globl sym_2_2500
+sym_2_2500: la $2, sym_2_2500
+.globl sym_2_2501
+sym_2_2501: la $2, sym_2_2501
+.globl sym_2_2502
+sym_2_2502: la $2, sym_2_2502
+.globl sym_2_2503
+sym_2_2503: la $2, sym_2_2503
+.globl sym_2_2504
+sym_2_2504: la $2, sym_2_2504
+.globl sym_2_2505
+sym_2_2505: la $2, sym_2_2505
+.globl sym_2_2506
+sym_2_2506: la $2, sym_2_2506
+.globl sym_2_2507
+sym_2_2507: la $2, sym_2_2507
+.globl sym_2_2508
+sym_2_2508: la $2, sym_2_2508
+.globl sym_2_2509
+sym_2_2509: la $2, sym_2_2509
+.globl sym_2_2510
+sym_2_2510: la $2, sym_2_2510
+.globl sym_2_2511
+sym_2_2511: la $2, sym_2_2511
+.globl sym_2_2512
+sym_2_2512: la $2, sym_2_2512
+.globl sym_2_2513
+sym_2_2513: la $2, sym_2_2513
+.globl sym_2_2514
+sym_2_2514: la $2, sym_2_2514
+.globl sym_2_2515
+sym_2_2515: la $2, sym_2_2515
+.globl sym_2_2516
+sym_2_2516: la $2, sym_2_2516
+.globl sym_2_2517
+sym_2_2517: la $2, sym_2_2517
+.globl sym_2_2518
+sym_2_2518: la $2, sym_2_2518
+.globl sym_2_2519
+sym_2_2519: la $2, sym_2_2519
+.globl sym_2_2520
+sym_2_2520: la $2, sym_2_2520
+.globl sym_2_2521
+sym_2_2521: la $2, sym_2_2521
+.globl sym_2_2522
+sym_2_2522: la $2, sym_2_2522
+.globl sym_2_2523
+sym_2_2523: la $2, sym_2_2523
+.globl sym_2_2524
+sym_2_2524: la $2, sym_2_2524
+.globl sym_2_2525
+sym_2_2525: la $2, sym_2_2525
+.globl sym_2_2526
+sym_2_2526: la $2, sym_2_2526
+.globl sym_2_2527
+sym_2_2527: la $2, sym_2_2527
+.globl sym_2_2528
+sym_2_2528: la $2, sym_2_2528
+.globl sym_2_2529
+sym_2_2529: la $2, sym_2_2529
+.globl sym_2_2530
+sym_2_2530: la $2, sym_2_2530
+.globl sym_2_2531
+sym_2_2531: la $2, sym_2_2531
+.globl sym_2_2532
+sym_2_2532: la $2, sym_2_2532
+.globl sym_2_2533
+sym_2_2533: la $2, sym_2_2533
+.globl sym_2_2534
+sym_2_2534: la $2, sym_2_2534
+.globl sym_2_2535
+sym_2_2535: la $2, sym_2_2535
+.globl sym_2_2536
+sym_2_2536: la $2, sym_2_2536
+.globl sym_2_2537
+sym_2_2537: la $2, sym_2_2537
+.globl sym_2_2538
+sym_2_2538: la $2, sym_2_2538
+.globl sym_2_2539
+sym_2_2539: la $2, sym_2_2539
+.globl sym_2_2540
+sym_2_2540: la $2, sym_2_2540
+.globl sym_2_2541
+sym_2_2541: la $2, sym_2_2541
+.globl sym_2_2542
+sym_2_2542: la $2, sym_2_2542
+.globl sym_2_2543
+sym_2_2543: la $2, sym_2_2543
+.globl sym_2_2544
+sym_2_2544: la $2, sym_2_2544
+.globl sym_2_2545
+sym_2_2545: la $2, sym_2_2545
+.globl sym_2_2546
+sym_2_2546: la $2, sym_2_2546
+.globl sym_2_2547
+sym_2_2547: la $2, sym_2_2547
+.globl sym_2_2548
+sym_2_2548: la $2, sym_2_2548
+.globl sym_2_2549
+sym_2_2549: la $2, sym_2_2549
+.globl sym_2_2550
+sym_2_2550: la $2, sym_2_2550
+.globl sym_2_2551
+sym_2_2551: la $2, sym_2_2551
+.globl sym_2_2552
+sym_2_2552: la $2, sym_2_2552
+.globl sym_2_2553
+sym_2_2553: la $2, sym_2_2553
+.globl sym_2_2554
+sym_2_2554: la $2, sym_2_2554
+.globl sym_2_2555
+sym_2_2555: la $2, sym_2_2555
+.globl sym_2_2556
+sym_2_2556: la $2, sym_2_2556
+.globl sym_2_2557
+sym_2_2557: la $2, sym_2_2557
+.globl sym_2_2558
+sym_2_2558: la $2, sym_2_2558
+.globl sym_2_2559
+sym_2_2559: la $2, sym_2_2559
+.globl sym_2_2560
+sym_2_2560: la $2, sym_2_2560
+.globl sym_2_2561
+sym_2_2561: la $2, sym_2_2561
+.globl sym_2_2562
+sym_2_2562: la $2, sym_2_2562
+.globl sym_2_2563
+sym_2_2563: la $2, sym_2_2563
+.globl sym_2_2564
+sym_2_2564: la $2, sym_2_2564
+.globl sym_2_2565
+sym_2_2565: la $2, sym_2_2565
+.globl sym_2_2566
+sym_2_2566: la $2, sym_2_2566
+.globl sym_2_2567
+sym_2_2567: la $2, sym_2_2567
+.globl sym_2_2568
+sym_2_2568: la $2, sym_2_2568
+.globl sym_2_2569
+sym_2_2569: la $2, sym_2_2569
+.globl sym_2_2570
+sym_2_2570: la $2, sym_2_2570
+.globl sym_2_2571
+sym_2_2571: la $2, sym_2_2571
+.globl sym_2_2572
+sym_2_2572: la $2, sym_2_2572
+.globl sym_2_2573
+sym_2_2573: la $2, sym_2_2573
+.globl sym_2_2574
+sym_2_2574: la $2, sym_2_2574
+.globl sym_2_2575
+sym_2_2575: la $2, sym_2_2575
+.globl sym_2_2576
+sym_2_2576: la $2, sym_2_2576
+.globl sym_2_2577
+sym_2_2577: la $2, sym_2_2577
+.globl sym_2_2578
+sym_2_2578: la $2, sym_2_2578
+.globl sym_2_2579
+sym_2_2579: la $2, sym_2_2579
+.globl sym_2_2580
+sym_2_2580: la $2, sym_2_2580
+.globl sym_2_2581
+sym_2_2581: la $2, sym_2_2581
+.globl sym_2_2582
+sym_2_2582: la $2, sym_2_2582
+.globl sym_2_2583
+sym_2_2583: la $2, sym_2_2583
+.globl sym_2_2584
+sym_2_2584: la $2, sym_2_2584
+.globl sym_2_2585
+sym_2_2585: la $2, sym_2_2585
+.globl sym_2_2586
+sym_2_2586: la $2, sym_2_2586
+.globl sym_2_2587
+sym_2_2587: la $2, sym_2_2587
+.globl sym_2_2588
+sym_2_2588: la $2, sym_2_2588
+.globl sym_2_2589
+sym_2_2589: la $2, sym_2_2589
+.globl sym_2_2590
+sym_2_2590: la $2, sym_2_2590
+.globl sym_2_2591
+sym_2_2591: la $2, sym_2_2591
+.globl sym_2_2592
+sym_2_2592: la $2, sym_2_2592
+.globl sym_2_2593
+sym_2_2593: la $2, sym_2_2593
+.globl sym_2_2594
+sym_2_2594: la $2, sym_2_2594
+.globl sym_2_2595
+sym_2_2595: la $2, sym_2_2595
+.globl sym_2_2596
+sym_2_2596: la $2, sym_2_2596
+.globl sym_2_2597
+sym_2_2597: la $2, sym_2_2597
+.globl sym_2_2598
+sym_2_2598: la $2, sym_2_2598
+.globl sym_2_2599
+sym_2_2599: la $2, sym_2_2599
+.globl sym_2_2600
+sym_2_2600: la $2, sym_2_2600
+.globl sym_2_2601
+sym_2_2601: la $2, sym_2_2601
+.globl sym_2_2602
+sym_2_2602: la $2, sym_2_2602
+.globl sym_2_2603
+sym_2_2603: la $2, sym_2_2603
+.globl sym_2_2604
+sym_2_2604: la $2, sym_2_2604
+.globl sym_2_2605
+sym_2_2605: la $2, sym_2_2605
+.globl sym_2_2606
+sym_2_2606: la $2, sym_2_2606
+.globl sym_2_2607
+sym_2_2607: la $2, sym_2_2607
+.globl sym_2_2608
+sym_2_2608: la $2, sym_2_2608
+.globl sym_2_2609
+sym_2_2609: la $2, sym_2_2609
+.globl sym_2_2610
+sym_2_2610: la $2, sym_2_2610
+.globl sym_2_2611
+sym_2_2611: la $2, sym_2_2611
+.globl sym_2_2612
+sym_2_2612: la $2, sym_2_2612
+.globl sym_2_2613
+sym_2_2613: la $2, sym_2_2613
+.globl sym_2_2614
+sym_2_2614: la $2, sym_2_2614
+.globl sym_2_2615
+sym_2_2615: la $2, sym_2_2615
+.globl sym_2_2616
+sym_2_2616: la $2, sym_2_2616
+.globl sym_2_2617
+sym_2_2617: la $2, sym_2_2617
+.globl sym_2_2618
+sym_2_2618: la $2, sym_2_2618
+.globl sym_2_2619
+sym_2_2619: la $2, sym_2_2619
+.globl sym_2_2620
+sym_2_2620: la $2, sym_2_2620
+.globl sym_2_2621
+sym_2_2621: la $2, sym_2_2621
+.globl sym_2_2622
+sym_2_2622: la $2, sym_2_2622
+.globl sym_2_2623
+sym_2_2623: la $2, sym_2_2623
+.globl sym_2_2624
+sym_2_2624: la $2, sym_2_2624
+.globl sym_2_2625
+sym_2_2625: la $2, sym_2_2625
+.globl sym_2_2626
+sym_2_2626: la $2, sym_2_2626
+.globl sym_2_2627
+sym_2_2627: la $2, sym_2_2627
+.globl sym_2_2628
+sym_2_2628: la $2, sym_2_2628
+.globl sym_2_2629
+sym_2_2629: la $2, sym_2_2629
+.globl sym_2_2630
+sym_2_2630: la $2, sym_2_2630
+.globl sym_2_2631
+sym_2_2631: la $2, sym_2_2631
+.globl sym_2_2632
+sym_2_2632: la $2, sym_2_2632
+.globl sym_2_2633
+sym_2_2633: la $2, sym_2_2633
+.globl sym_2_2634
+sym_2_2634: la $2, sym_2_2634
+.globl sym_2_2635
+sym_2_2635: la $2, sym_2_2635
+.globl sym_2_2636
+sym_2_2636: la $2, sym_2_2636
+.globl sym_2_2637
+sym_2_2637: la $2, sym_2_2637
+.globl sym_2_2638
+sym_2_2638: la $2, sym_2_2638
+.globl sym_2_2639
+sym_2_2639: la $2, sym_2_2639
+.globl sym_2_2640
+sym_2_2640: la $2, sym_2_2640
+.globl sym_2_2641
+sym_2_2641: la $2, sym_2_2641
+.globl sym_2_2642
+sym_2_2642: la $2, sym_2_2642
+.globl sym_2_2643
+sym_2_2643: la $2, sym_2_2643
+.globl sym_2_2644
+sym_2_2644: la $2, sym_2_2644
+.globl sym_2_2645
+sym_2_2645: la $2, sym_2_2645
+.globl sym_2_2646
+sym_2_2646: la $2, sym_2_2646
+.globl sym_2_2647
+sym_2_2647: la $2, sym_2_2647
+.globl sym_2_2648
+sym_2_2648: la $2, sym_2_2648
+.globl sym_2_2649
+sym_2_2649: la $2, sym_2_2649
+.globl sym_2_2650
+sym_2_2650: la $2, sym_2_2650
+.globl sym_2_2651
+sym_2_2651: la $2, sym_2_2651
+.globl sym_2_2652
+sym_2_2652: la $2, sym_2_2652
+.globl sym_2_2653
+sym_2_2653: la $2, sym_2_2653
+.globl sym_2_2654
+sym_2_2654: la $2, sym_2_2654
+.globl sym_2_2655
+sym_2_2655: la $2, sym_2_2655
+.globl sym_2_2656
+sym_2_2656: la $2, sym_2_2656
+.globl sym_2_2657
+sym_2_2657: la $2, sym_2_2657
+.globl sym_2_2658
+sym_2_2658: la $2, sym_2_2658
+.globl sym_2_2659
+sym_2_2659: la $2, sym_2_2659
+.globl sym_2_2660
+sym_2_2660: la $2, sym_2_2660
+.globl sym_2_2661
+sym_2_2661: la $2, sym_2_2661
+.globl sym_2_2662
+sym_2_2662: la $2, sym_2_2662
+.globl sym_2_2663
+sym_2_2663: la $2, sym_2_2663
+.globl sym_2_2664
+sym_2_2664: la $2, sym_2_2664
+.globl sym_2_2665
+sym_2_2665: la $2, sym_2_2665
+.globl sym_2_2666
+sym_2_2666: la $2, sym_2_2666
+.globl sym_2_2667
+sym_2_2667: la $2, sym_2_2667
+.globl sym_2_2668
+sym_2_2668: la $2, sym_2_2668
+.globl sym_2_2669
+sym_2_2669: la $2, sym_2_2669
+.globl sym_2_2670
+sym_2_2670: la $2, sym_2_2670
+.globl sym_2_2671
+sym_2_2671: la $2, sym_2_2671
+.globl sym_2_2672
+sym_2_2672: la $2, sym_2_2672
+.globl sym_2_2673
+sym_2_2673: la $2, sym_2_2673
+.globl sym_2_2674
+sym_2_2674: la $2, sym_2_2674
+.globl sym_2_2675
+sym_2_2675: la $2, sym_2_2675
+.globl sym_2_2676
+sym_2_2676: la $2, sym_2_2676
+.globl sym_2_2677
+sym_2_2677: la $2, sym_2_2677
+.globl sym_2_2678
+sym_2_2678: la $2, sym_2_2678
+.globl sym_2_2679
+sym_2_2679: la $2, sym_2_2679
+.globl sym_2_2680
+sym_2_2680: la $2, sym_2_2680
+.globl sym_2_2681
+sym_2_2681: la $2, sym_2_2681
+.globl sym_2_2682
+sym_2_2682: la $2, sym_2_2682
+.globl sym_2_2683
+sym_2_2683: la $2, sym_2_2683
+.globl sym_2_2684
+sym_2_2684: la $2, sym_2_2684
+.globl sym_2_2685
+sym_2_2685: la $2, sym_2_2685
+.globl sym_2_2686
+sym_2_2686: la $2, sym_2_2686
+.globl sym_2_2687
+sym_2_2687: la $2, sym_2_2687
+.globl sym_2_2688
+sym_2_2688: la $2, sym_2_2688
+.globl sym_2_2689
+sym_2_2689: la $2, sym_2_2689
+.globl sym_2_2690
+sym_2_2690: la $2, sym_2_2690
+.globl sym_2_2691
+sym_2_2691: la $2, sym_2_2691
+.globl sym_2_2692
+sym_2_2692: la $2, sym_2_2692
+.globl sym_2_2693
+sym_2_2693: la $2, sym_2_2693
+.globl sym_2_2694
+sym_2_2694: la $2, sym_2_2694
+.globl sym_2_2695
+sym_2_2695: la $2, sym_2_2695
+.globl sym_2_2696
+sym_2_2696: la $2, sym_2_2696
+.globl sym_2_2697
+sym_2_2697: la $2, sym_2_2697
+.globl sym_2_2698
+sym_2_2698: la $2, sym_2_2698
+.globl sym_2_2699
+sym_2_2699: la $2, sym_2_2699
+.globl sym_2_2700
+sym_2_2700: la $2, sym_2_2700
+.globl sym_2_2701
+sym_2_2701: la $2, sym_2_2701
+.globl sym_2_2702
+sym_2_2702: la $2, sym_2_2702
+.globl sym_2_2703
+sym_2_2703: la $2, sym_2_2703
+.globl sym_2_2704
+sym_2_2704: la $2, sym_2_2704
+.globl sym_2_2705
+sym_2_2705: la $2, sym_2_2705
+.globl sym_2_2706
+sym_2_2706: la $2, sym_2_2706
+.globl sym_2_2707
+sym_2_2707: la $2, sym_2_2707
+.globl sym_2_2708
+sym_2_2708: la $2, sym_2_2708
+.globl sym_2_2709
+sym_2_2709: la $2, sym_2_2709
+.globl sym_2_2710
+sym_2_2710: la $2, sym_2_2710
+.globl sym_2_2711
+sym_2_2711: la $2, sym_2_2711
+.globl sym_2_2712
+sym_2_2712: la $2, sym_2_2712
+.globl sym_2_2713
+sym_2_2713: la $2, sym_2_2713
+.globl sym_2_2714
+sym_2_2714: la $2, sym_2_2714
+.globl sym_2_2715
+sym_2_2715: la $2, sym_2_2715
+.globl sym_2_2716
+sym_2_2716: la $2, sym_2_2716
+.globl sym_2_2717
+sym_2_2717: la $2, sym_2_2717
+.globl sym_2_2718
+sym_2_2718: la $2, sym_2_2718
+.globl sym_2_2719
+sym_2_2719: la $2, sym_2_2719
+.globl sym_2_2720
+sym_2_2720: la $2, sym_2_2720
+.globl sym_2_2721
+sym_2_2721: la $2, sym_2_2721
+.globl sym_2_2722
+sym_2_2722: la $2, sym_2_2722
+.globl sym_2_2723
+sym_2_2723: la $2, sym_2_2723
+.globl sym_2_2724
+sym_2_2724: la $2, sym_2_2724
+.globl sym_2_2725
+sym_2_2725: la $2, sym_2_2725
+.globl sym_2_2726
+sym_2_2726: la $2, sym_2_2726
+.globl sym_2_2727
+sym_2_2727: la $2, sym_2_2727
+.globl sym_2_2728
+sym_2_2728: la $2, sym_2_2728
+.globl sym_2_2729
+sym_2_2729: la $2, sym_2_2729
+.globl sym_2_2730
+sym_2_2730: la $2, sym_2_2730
+.globl sym_2_2731
+sym_2_2731: la $2, sym_2_2731
+.globl sym_2_2732
+sym_2_2732: la $2, sym_2_2732
+.globl sym_2_2733
+sym_2_2733: la $2, sym_2_2733
+.globl sym_2_2734
+sym_2_2734: la $2, sym_2_2734
+.globl sym_2_2735
+sym_2_2735: la $2, sym_2_2735
+.globl sym_2_2736
+sym_2_2736: la $2, sym_2_2736
+.globl sym_2_2737
+sym_2_2737: la $2, sym_2_2737
+.globl sym_2_2738
+sym_2_2738: la $2, sym_2_2738
+.globl sym_2_2739
+sym_2_2739: la $2, sym_2_2739
+.globl sym_2_2740
+sym_2_2740: la $2, sym_2_2740
+.globl sym_2_2741
+sym_2_2741: la $2, sym_2_2741
+.globl sym_2_2742
+sym_2_2742: la $2, sym_2_2742
+.globl sym_2_2743
+sym_2_2743: la $2, sym_2_2743
+.globl sym_2_2744
+sym_2_2744: la $2, sym_2_2744
+.globl sym_2_2745
+sym_2_2745: la $2, sym_2_2745
+.globl sym_2_2746
+sym_2_2746: la $2, sym_2_2746
+.globl sym_2_2747
+sym_2_2747: la $2, sym_2_2747
+.globl sym_2_2748
+sym_2_2748: la $2, sym_2_2748
+.globl sym_2_2749
+sym_2_2749: la $2, sym_2_2749
+.globl sym_2_2750
+sym_2_2750: la $2, sym_2_2750
+.globl sym_2_2751
+sym_2_2751: la $2, sym_2_2751
+.globl sym_2_2752
+sym_2_2752: la $2, sym_2_2752
+.globl sym_2_2753
+sym_2_2753: la $2, sym_2_2753
+.globl sym_2_2754
+sym_2_2754: la $2, sym_2_2754
+.globl sym_2_2755
+sym_2_2755: la $2, sym_2_2755
+.globl sym_2_2756
+sym_2_2756: la $2, sym_2_2756
+.globl sym_2_2757
+sym_2_2757: la $2, sym_2_2757
+.globl sym_2_2758
+sym_2_2758: la $2, sym_2_2758
+.globl sym_2_2759
+sym_2_2759: la $2, sym_2_2759
+.globl sym_2_2760
+sym_2_2760: la $2, sym_2_2760
+.globl sym_2_2761
+sym_2_2761: la $2, sym_2_2761
+.globl sym_2_2762
+sym_2_2762: la $2, sym_2_2762
+.globl sym_2_2763
+sym_2_2763: la $2, sym_2_2763
+.globl sym_2_2764
+sym_2_2764: la $2, sym_2_2764
+.globl sym_2_2765
+sym_2_2765: la $2, sym_2_2765
+.globl sym_2_2766
+sym_2_2766: la $2, sym_2_2766
+.globl sym_2_2767
+sym_2_2767: la $2, sym_2_2767
+.globl sym_2_2768
+sym_2_2768: la $2, sym_2_2768
+.globl sym_2_2769
+sym_2_2769: la $2, sym_2_2769
+.globl sym_2_2770
+sym_2_2770: la $2, sym_2_2770
+.globl sym_2_2771
+sym_2_2771: la $2, sym_2_2771
+.globl sym_2_2772
+sym_2_2772: la $2, sym_2_2772
+.globl sym_2_2773
+sym_2_2773: la $2, sym_2_2773
+.globl sym_2_2774
+sym_2_2774: la $2, sym_2_2774
+.globl sym_2_2775
+sym_2_2775: la $2, sym_2_2775
+.globl sym_2_2776
+sym_2_2776: la $2, sym_2_2776
+.globl sym_2_2777
+sym_2_2777: la $2, sym_2_2777
+.globl sym_2_2778
+sym_2_2778: la $2, sym_2_2778
+.globl sym_2_2779
+sym_2_2779: la $2, sym_2_2779
+.globl sym_2_2780
+sym_2_2780: la $2, sym_2_2780
+.globl sym_2_2781
+sym_2_2781: la $2, sym_2_2781
+.globl sym_2_2782
+sym_2_2782: la $2, sym_2_2782
+.globl sym_2_2783
+sym_2_2783: la $2, sym_2_2783
+.globl sym_2_2784
+sym_2_2784: la $2, sym_2_2784
+.globl sym_2_2785
+sym_2_2785: la $2, sym_2_2785
+.globl sym_2_2786
+sym_2_2786: la $2, sym_2_2786
+.globl sym_2_2787
+sym_2_2787: la $2, sym_2_2787
+.globl sym_2_2788
+sym_2_2788: la $2, sym_2_2788
+.globl sym_2_2789
+sym_2_2789: la $2, sym_2_2789
+.globl sym_2_2790
+sym_2_2790: la $2, sym_2_2790
+.globl sym_2_2791
+sym_2_2791: la $2, sym_2_2791
+.globl sym_2_2792
+sym_2_2792: la $2, sym_2_2792
+.globl sym_2_2793
+sym_2_2793: la $2, sym_2_2793
+.globl sym_2_2794
+sym_2_2794: la $2, sym_2_2794
+.globl sym_2_2795
+sym_2_2795: la $2, sym_2_2795
+.globl sym_2_2796
+sym_2_2796: la $2, sym_2_2796
+.globl sym_2_2797
+sym_2_2797: la $2, sym_2_2797
+.globl sym_2_2798
+sym_2_2798: la $2, sym_2_2798
+.globl sym_2_2799
+sym_2_2799: la $2, sym_2_2799
+.globl sym_2_2800
+sym_2_2800: la $2, sym_2_2800
+.globl sym_2_2801
+sym_2_2801: la $2, sym_2_2801
+.globl sym_2_2802
+sym_2_2802: la $2, sym_2_2802
+.globl sym_2_2803
+sym_2_2803: la $2, sym_2_2803
+.globl sym_2_2804
+sym_2_2804: la $2, sym_2_2804
+.globl sym_2_2805
+sym_2_2805: la $2, sym_2_2805
+.globl sym_2_2806
+sym_2_2806: la $2, sym_2_2806
+.globl sym_2_2807
+sym_2_2807: la $2, sym_2_2807
+.globl sym_2_2808
+sym_2_2808: la $2, sym_2_2808
+.globl sym_2_2809
+sym_2_2809: la $2, sym_2_2809
+.globl sym_2_2810
+sym_2_2810: la $2, sym_2_2810
+.globl sym_2_2811
+sym_2_2811: la $2, sym_2_2811
+.globl sym_2_2812
+sym_2_2812: la $2, sym_2_2812
+.globl sym_2_2813
+sym_2_2813: la $2, sym_2_2813
+.globl sym_2_2814
+sym_2_2814: la $2, sym_2_2814
+.globl sym_2_2815
+sym_2_2815: la $2, sym_2_2815
+.globl sym_2_2816
+sym_2_2816: la $2, sym_2_2816
+.globl sym_2_2817
+sym_2_2817: la $2, sym_2_2817
+.globl sym_2_2818
+sym_2_2818: la $2, sym_2_2818
+.globl sym_2_2819
+sym_2_2819: la $2, sym_2_2819
+.globl sym_2_2820
+sym_2_2820: la $2, sym_2_2820
+.globl sym_2_2821
+sym_2_2821: la $2, sym_2_2821
+.globl sym_2_2822
+sym_2_2822: la $2, sym_2_2822
+.globl sym_2_2823
+sym_2_2823: la $2, sym_2_2823
+.globl sym_2_2824
+sym_2_2824: la $2, sym_2_2824
+.globl sym_2_2825
+sym_2_2825: la $2, sym_2_2825
+.globl sym_2_2826
+sym_2_2826: la $2, sym_2_2826
+.globl sym_2_2827
+sym_2_2827: la $2, sym_2_2827
+.globl sym_2_2828
+sym_2_2828: la $2, sym_2_2828
+.globl sym_2_2829
+sym_2_2829: la $2, sym_2_2829
+.globl sym_2_2830
+sym_2_2830: la $2, sym_2_2830
+.globl sym_2_2831
+sym_2_2831: la $2, sym_2_2831
+.globl sym_2_2832
+sym_2_2832: la $2, sym_2_2832
+.globl sym_2_2833
+sym_2_2833: la $2, sym_2_2833
+.globl sym_2_2834
+sym_2_2834: la $2, sym_2_2834
+.globl sym_2_2835
+sym_2_2835: la $2, sym_2_2835
+.globl sym_2_2836
+sym_2_2836: la $2, sym_2_2836
+.globl sym_2_2837
+sym_2_2837: la $2, sym_2_2837
+.globl sym_2_2838
+sym_2_2838: la $2, sym_2_2838
+.globl sym_2_2839
+sym_2_2839: la $2, sym_2_2839
+.globl sym_2_2840
+sym_2_2840: la $2, sym_2_2840
+.globl sym_2_2841
+sym_2_2841: la $2, sym_2_2841
+.globl sym_2_2842
+sym_2_2842: la $2, sym_2_2842
+.globl sym_2_2843
+sym_2_2843: la $2, sym_2_2843
+.globl sym_2_2844
+sym_2_2844: la $2, sym_2_2844
+.globl sym_2_2845
+sym_2_2845: la $2, sym_2_2845
+.globl sym_2_2846
+sym_2_2846: la $2, sym_2_2846
+.globl sym_2_2847
+sym_2_2847: la $2, sym_2_2847
+.globl sym_2_2848
+sym_2_2848: la $2, sym_2_2848
+.globl sym_2_2849
+sym_2_2849: la $2, sym_2_2849
+.globl sym_2_2850
+sym_2_2850: la $2, sym_2_2850
+.globl sym_2_2851
+sym_2_2851: la $2, sym_2_2851
+.globl sym_2_2852
+sym_2_2852: la $2, sym_2_2852
+.globl sym_2_2853
+sym_2_2853: la $2, sym_2_2853
+.globl sym_2_2854
+sym_2_2854: la $2, sym_2_2854
+.globl sym_2_2855
+sym_2_2855: la $2, sym_2_2855
+.globl sym_2_2856
+sym_2_2856: la $2, sym_2_2856
+.globl sym_2_2857
+sym_2_2857: la $2, sym_2_2857
+.globl sym_2_2858
+sym_2_2858: la $2, sym_2_2858
+.globl sym_2_2859
+sym_2_2859: la $2, sym_2_2859
+.globl sym_2_2860
+sym_2_2860: la $2, sym_2_2860
+.globl sym_2_2861
+sym_2_2861: la $2, sym_2_2861
+.globl sym_2_2862
+sym_2_2862: la $2, sym_2_2862
+.globl sym_2_2863
+sym_2_2863: la $2, sym_2_2863
+.globl sym_2_2864
+sym_2_2864: la $2, sym_2_2864
+.globl sym_2_2865
+sym_2_2865: la $2, sym_2_2865
+.globl sym_2_2866
+sym_2_2866: la $2, sym_2_2866
+.globl sym_2_2867
+sym_2_2867: la $2, sym_2_2867
+.globl sym_2_2868
+sym_2_2868: la $2, sym_2_2868
+.globl sym_2_2869
+sym_2_2869: la $2, sym_2_2869
+.globl sym_2_2870
+sym_2_2870: la $2, sym_2_2870
+.globl sym_2_2871
+sym_2_2871: la $2, sym_2_2871
+.globl sym_2_2872
+sym_2_2872: la $2, sym_2_2872
+.globl sym_2_2873
+sym_2_2873: la $2, sym_2_2873
+.globl sym_2_2874
+sym_2_2874: la $2, sym_2_2874
+.globl sym_2_2875
+sym_2_2875: la $2, sym_2_2875
+.globl sym_2_2876
+sym_2_2876: la $2, sym_2_2876
+.globl sym_2_2877
+sym_2_2877: la $2, sym_2_2877
+.globl sym_2_2878
+sym_2_2878: la $2, sym_2_2878
+.globl sym_2_2879
+sym_2_2879: la $2, sym_2_2879
+.globl sym_2_2880
+sym_2_2880: la $2, sym_2_2880
+.globl sym_2_2881
+sym_2_2881: la $2, sym_2_2881
+.globl sym_2_2882
+sym_2_2882: la $2, sym_2_2882
+.globl sym_2_2883
+sym_2_2883: la $2, sym_2_2883
+.globl sym_2_2884
+sym_2_2884: la $2, sym_2_2884
+.globl sym_2_2885
+sym_2_2885: la $2, sym_2_2885
+.globl sym_2_2886
+sym_2_2886: la $2, sym_2_2886
+.globl sym_2_2887
+sym_2_2887: la $2, sym_2_2887
+.globl sym_2_2888
+sym_2_2888: la $2, sym_2_2888
+.globl sym_2_2889
+sym_2_2889: la $2, sym_2_2889
+.globl sym_2_2890
+sym_2_2890: la $2, sym_2_2890
+.globl sym_2_2891
+sym_2_2891: la $2, sym_2_2891
+.globl sym_2_2892
+sym_2_2892: la $2, sym_2_2892
+.globl sym_2_2893
+sym_2_2893: la $2, sym_2_2893
+.globl sym_2_2894
+sym_2_2894: la $2, sym_2_2894
+.globl sym_2_2895
+sym_2_2895: la $2, sym_2_2895
+.globl sym_2_2896
+sym_2_2896: la $2, sym_2_2896
+.globl sym_2_2897
+sym_2_2897: la $2, sym_2_2897
+.globl sym_2_2898
+sym_2_2898: la $2, sym_2_2898
+.globl sym_2_2899
+sym_2_2899: la $2, sym_2_2899
+.globl sym_2_2900
+sym_2_2900: la $2, sym_2_2900
+.globl sym_2_2901
+sym_2_2901: la $2, sym_2_2901
+.globl sym_2_2902
+sym_2_2902: la $2, sym_2_2902
+.globl sym_2_2903
+sym_2_2903: la $2, sym_2_2903
+.globl sym_2_2904
+sym_2_2904: la $2, sym_2_2904
+.globl sym_2_2905
+sym_2_2905: la $2, sym_2_2905
+.globl sym_2_2906
+sym_2_2906: la $2, sym_2_2906
+.globl sym_2_2907
+sym_2_2907: la $2, sym_2_2907
+.globl sym_2_2908
+sym_2_2908: la $2, sym_2_2908
+.globl sym_2_2909
+sym_2_2909: la $2, sym_2_2909
+.globl sym_2_2910
+sym_2_2910: la $2, sym_2_2910
+.globl sym_2_2911
+sym_2_2911: la $2, sym_2_2911
+.globl sym_2_2912
+sym_2_2912: la $2, sym_2_2912
+.globl sym_2_2913
+sym_2_2913: la $2, sym_2_2913
+.globl sym_2_2914
+sym_2_2914: la $2, sym_2_2914
+.globl sym_2_2915
+sym_2_2915: la $2, sym_2_2915
+.globl sym_2_2916
+sym_2_2916: la $2, sym_2_2916
+.globl sym_2_2917
+sym_2_2917: la $2, sym_2_2917
+.globl sym_2_2918
+sym_2_2918: la $2, sym_2_2918
+.globl sym_2_2919
+sym_2_2919: la $2, sym_2_2919
+.globl sym_2_2920
+sym_2_2920: la $2, sym_2_2920
+.globl sym_2_2921
+sym_2_2921: la $2, sym_2_2921
+.globl sym_2_2922
+sym_2_2922: la $2, sym_2_2922
+.globl sym_2_2923
+sym_2_2923: la $2, sym_2_2923
+.globl sym_2_2924
+sym_2_2924: la $2, sym_2_2924
+.globl sym_2_2925
+sym_2_2925: la $2, sym_2_2925
+.globl sym_2_2926
+sym_2_2926: la $2, sym_2_2926
+.globl sym_2_2927
+sym_2_2927: la $2, sym_2_2927
+.globl sym_2_2928
+sym_2_2928: la $2, sym_2_2928
+.globl sym_2_2929
+sym_2_2929: la $2, sym_2_2929
+.globl sym_2_2930
+sym_2_2930: la $2, sym_2_2930
+.globl sym_2_2931
+sym_2_2931: la $2, sym_2_2931
+.globl sym_2_2932
+sym_2_2932: la $2, sym_2_2932
+.globl sym_2_2933
+sym_2_2933: la $2, sym_2_2933
+.globl sym_2_2934
+sym_2_2934: la $2, sym_2_2934
+.globl sym_2_2935
+sym_2_2935: la $2, sym_2_2935
+.globl sym_2_2936
+sym_2_2936: la $2, sym_2_2936
+.globl sym_2_2937
+sym_2_2937: la $2, sym_2_2937
+.globl sym_2_2938
+sym_2_2938: la $2, sym_2_2938
+.globl sym_2_2939
+sym_2_2939: la $2, sym_2_2939
+.globl sym_2_2940
+sym_2_2940: la $2, sym_2_2940
+.globl sym_2_2941
+sym_2_2941: la $2, sym_2_2941
+.globl sym_2_2942
+sym_2_2942: la $2, sym_2_2942
+.globl sym_2_2943
+sym_2_2943: la $2, sym_2_2943
+.globl sym_2_2944
+sym_2_2944: la $2, sym_2_2944
+.globl sym_2_2945
+sym_2_2945: la $2, sym_2_2945
+.globl sym_2_2946
+sym_2_2946: la $2, sym_2_2946
+.globl sym_2_2947
+sym_2_2947: la $2, sym_2_2947
+.globl sym_2_2948
+sym_2_2948: la $2, sym_2_2948
+.globl sym_2_2949
+sym_2_2949: la $2, sym_2_2949
+.globl sym_2_2950
+sym_2_2950: la $2, sym_2_2950
+.globl sym_2_2951
+sym_2_2951: la $2, sym_2_2951
+.globl sym_2_2952
+sym_2_2952: la $2, sym_2_2952
+.globl sym_2_2953
+sym_2_2953: la $2, sym_2_2953
+.globl sym_2_2954
+sym_2_2954: la $2, sym_2_2954
+.globl sym_2_2955
+sym_2_2955: la $2, sym_2_2955
+.globl sym_2_2956
+sym_2_2956: la $2, sym_2_2956
+.globl sym_2_2957
+sym_2_2957: la $2, sym_2_2957
+.globl sym_2_2958
+sym_2_2958: la $2, sym_2_2958
+.globl sym_2_2959
+sym_2_2959: la $2, sym_2_2959
+.globl sym_2_2960
+sym_2_2960: la $2, sym_2_2960
+.globl sym_2_2961
+sym_2_2961: la $2, sym_2_2961
+.globl sym_2_2962
+sym_2_2962: la $2, sym_2_2962
+.globl sym_2_2963
+sym_2_2963: la $2, sym_2_2963
+.globl sym_2_2964
+sym_2_2964: la $2, sym_2_2964
+.globl sym_2_2965
+sym_2_2965: la $2, sym_2_2965
+.globl sym_2_2966
+sym_2_2966: la $2, sym_2_2966
+.globl sym_2_2967
+sym_2_2967: la $2, sym_2_2967
+.globl sym_2_2968
+sym_2_2968: la $2, sym_2_2968
+.globl sym_2_2969
+sym_2_2969: la $2, sym_2_2969
+.globl sym_2_2970
+sym_2_2970: la $2, sym_2_2970
+.globl sym_2_2971
+sym_2_2971: la $2, sym_2_2971
+.globl sym_2_2972
+sym_2_2972: la $2, sym_2_2972
+.globl sym_2_2973
+sym_2_2973: la $2, sym_2_2973
+.globl sym_2_2974
+sym_2_2974: la $2, sym_2_2974
+.globl sym_2_2975
+sym_2_2975: la $2, sym_2_2975
+.globl sym_2_2976
+sym_2_2976: la $2, sym_2_2976
+.globl sym_2_2977
+sym_2_2977: la $2, sym_2_2977
+.globl sym_2_2978
+sym_2_2978: la $2, sym_2_2978
+.globl sym_2_2979
+sym_2_2979: la $2, sym_2_2979
+.globl sym_2_2980
+sym_2_2980: la $2, sym_2_2980
+.globl sym_2_2981
+sym_2_2981: la $2, sym_2_2981
+.globl sym_2_2982
+sym_2_2982: la $2, sym_2_2982
+.globl sym_2_2983
+sym_2_2983: la $2, sym_2_2983
+.globl sym_2_2984
+sym_2_2984: la $2, sym_2_2984
+.globl sym_2_2985
+sym_2_2985: la $2, sym_2_2985
+.globl sym_2_2986
+sym_2_2986: la $2, sym_2_2986
+.globl sym_2_2987
+sym_2_2987: la $2, sym_2_2987
+.globl sym_2_2988
+sym_2_2988: la $2, sym_2_2988
+.globl sym_2_2989
+sym_2_2989: la $2, sym_2_2989
+.globl sym_2_2990
+sym_2_2990: la $2, sym_2_2990
+.globl sym_2_2991
+sym_2_2991: la $2, sym_2_2991
+.globl sym_2_2992
+sym_2_2992: la $2, sym_2_2992
+.globl sym_2_2993
+sym_2_2993: la $2, sym_2_2993
+.globl sym_2_2994
+sym_2_2994: la $2, sym_2_2994
+.globl sym_2_2995
+sym_2_2995: la $2, sym_2_2995
+.globl sym_2_2996
+sym_2_2996: la $2, sym_2_2996
+.globl sym_2_2997
+sym_2_2997: la $2, sym_2_2997
+.globl sym_2_2998
+sym_2_2998: la $2, sym_2_2998
+.globl sym_2_2999
+sym_2_2999: la $2, sym_2_2999
+.globl sym_2_3000
+sym_2_3000: la $2, sym_2_3000
+.globl sym_2_3001
+sym_2_3001: la $2, sym_2_3001
+.globl sym_2_3002
+sym_2_3002: la $2, sym_2_3002
+.globl sym_2_3003
+sym_2_3003: la $2, sym_2_3003
+.globl sym_2_3004
+sym_2_3004: la $2, sym_2_3004
+.globl sym_2_3005
+sym_2_3005: la $2, sym_2_3005
+.globl sym_2_3006
+sym_2_3006: la $2, sym_2_3006
+.globl sym_2_3007
+sym_2_3007: la $2, sym_2_3007
+.globl sym_2_3008
+sym_2_3008: la $2, sym_2_3008
+.globl sym_2_3009
+sym_2_3009: la $2, sym_2_3009
+.globl sym_2_3010
+sym_2_3010: la $2, sym_2_3010
+.globl sym_2_3011
+sym_2_3011: la $2, sym_2_3011
+.globl sym_2_3012
+sym_2_3012: la $2, sym_2_3012
+.globl sym_2_3013
+sym_2_3013: la $2, sym_2_3013
+.globl sym_2_3014
+sym_2_3014: la $2, sym_2_3014
+.globl sym_2_3015
+sym_2_3015: la $2, sym_2_3015
+.globl sym_2_3016
+sym_2_3016: la $2, sym_2_3016
+.globl sym_2_3017
+sym_2_3017: la $2, sym_2_3017
+.globl sym_2_3018
+sym_2_3018: la $2, sym_2_3018
+.globl sym_2_3019
+sym_2_3019: la $2, sym_2_3019
+.globl sym_2_3020
+sym_2_3020: la $2, sym_2_3020
+.globl sym_2_3021
+sym_2_3021: la $2, sym_2_3021
+.globl sym_2_3022
+sym_2_3022: la $2, sym_2_3022
+.globl sym_2_3023
+sym_2_3023: la $2, sym_2_3023
+.globl sym_2_3024
+sym_2_3024: la $2, sym_2_3024
+.globl sym_2_3025
+sym_2_3025: la $2, sym_2_3025
+.globl sym_2_3026
+sym_2_3026: la $2, sym_2_3026
+.globl sym_2_3027
+sym_2_3027: la $2, sym_2_3027
+.globl sym_2_3028
+sym_2_3028: la $2, sym_2_3028
+.globl sym_2_3029
+sym_2_3029: la $2, sym_2_3029
+.globl sym_2_3030
+sym_2_3030: la $2, sym_2_3030
+.globl sym_2_3031
+sym_2_3031: la $2, sym_2_3031
+.globl sym_2_3032
+sym_2_3032: la $2, sym_2_3032
+.globl sym_2_3033
+sym_2_3033: la $2, sym_2_3033
+.globl sym_2_3034
+sym_2_3034: la $2, sym_2_3034
+.globl sym_2_3035
+sym_2_3035: la $2, sym_2_3035
+.globl sym_2_3036
+sym_2_3036: la $2, sym_2_3036
+.globl sym_2_3037
+sym_2_3037: la $2, sym_2_3037
+.globl sym_2_3038
+sym_2_3038: la $2, sym_2_3038
+.globl sym_2_3039
+sym_2_3039: la $2, sym_2_3039
+.globl sym_2_3040
+sym_2_3040: la $2, sym_2_3040
+.globl sym_2_3041
+sym_2_3041: la $2, sym_2_3041
+.globl sym_2_3042
+sym_2_3042: la $2, sym_2_3042
+.globl sym_2_3043
+sym_2_3043: la $2, sym_2_3043
+.globl sym_2_3044
+sym_2_3044: la $2, sym_2_3044
+.globl sym_2_3045
+sym_2_3045: la $2, sym_2_3045
+.globl sym_2_3046
+sym_2_3046: la $2, sym_2_3046
+.globl sym_2_3047
+sym_2_3047: la $2, sym_2_3047
+.globl sym_2_3048
+sym_2_3048: la $2, sym_2_3048
+.globl sym_2_3049
+sym_2_3049: la $2, sym_2_3049
+.globl sym_2_3050
+sym_2_3050: la $2, sym_2_3050
+.globl sym_2_3051
+sym_2_3051: la $2, sym_2_3051
+.globl sym_2_3052
+sym_2_3052: la $2, sym_2_3052
+.globl sym_2_3053
+sym_2_3053: la $2, sym_2_3053
+.globl sym_2_3054
+sym_2_3054: la $2, sym_2_3054
+.globl sym_2_3055
+sym_2_3055: la $2, sym_2_3055
+.globl sym_2_3056
+sym_2_3056: la $2, sym_2_3056
+.globl sym_2_3057
+sym_2_3057: la $2, sym_2_3057
+.globl sym_2_3058
+sym_2_3058: la $2, sym_2_3058
+.globl sym_2_3059
+sym_2_3059: la $2, sym_2_3059
+.globl sym_2_3060
+sym_2_3060: la $2, sym_2_3060
+.globl sym_2_3061
+sym_2_3061: la $2, sym_2_3061
+.globl sym_2_3062
+sym_2_3062: la $2, sym_2_3062
+.globl sym_2_3063
+sym_2_3063: la $2, sym_2_3063
+.globl sym_2_3064
+sym_2_3064: la $2, sym_2_3064
+.globl sym_2_3065
+sym_2_3065: la $2, sym_2_3065
+.globl sym_2_3066
+sym_2_3066: la $2, sym_2_3066
+.globl sym_2_3067
+sym_2_3067: la $2, sym_2_3067
+.globl sym_2_3068
+sym_2_3068: la $2, sym_2_3068
+.globl sym_2_3069
+sym_2_3069: la $2, sym_2_3069
+.globl sym_2_3070
+sym_2_3070: la $2, sym_2_3070
+.globl sym_2_3071
+sym_2_3071: la $2, sym_2_3071
+.globl sym_2_3072
+sym_2_3072: la $2, sym_2_3072
+.globl sym_2_3073
+sym_2_3073: la $2, sym_2_3073
+.globl sym_2_3074
+sym_2_3074: la $2, sym_2_3074
+.globl sym_2_3075
+sym_2_3075: la $2, sym_2_3075
+.globl sym_2_3076
+sym_2_3076: la $2, sym_2_3076
+.globl sym_2_3077
+sym_2_3077: la $2, sym_2_3077
+.globl sym_2_3078
+sym_2_3078: la $2, sym_2_3078
+.globl sym_2_3079
+sym_2_3079: la $2, sym_2_3079
+.globl sym_2_3080
+sym_2_3080: la $2, sym_2_3080
+.globl sym_2_3081
+sym_2_3081: la $2, sym_2_3081
+.globl sym_2_3082
+sym_2_3082: la $2, sym_2_3082
+.globl sym_2_3083
+sym_2_3083: la $2, sym_2_3083
+.globl sym_2_3084
+sym_2_3084: la $2, sym_2_3084
+.globl sym_2_3085
+sym_2_3085: la $2, sym_2_3085
+.globl sym_2_3086
+sym_2_3086: la $2, sym_2_3086
+.globl sym_2_3087
+sym_2_3087: la $2, sym_2_3087
+.globl sym_2_3088
+sym_2_3088: la $2, sym_2_3088
+.globl sym_2_3089
+sym_2_3089: la $2, sym_2_3089
+.globl sym_2_3090
+sym_2_3090: la $2, sym_2_3090
+.globl sym_2_3091
+sym_2_3091: la $2, sym_2_3091
+.globl sym_2_3092
+sym_2_3092: la $2, sym_2_3092
+.globl sym_2_3093
+sym_2_3093: la $2, sym_2_3093
+.globl sym_2_3094
+sym_2_3094: la $2, sym_2_3094
+.globl sym_2_3095
+sym_2_3095: la $2, sym_2_3095
+.globl sym_2_3096
+sym_2_3096: la $2, sym_2_3096
+.globl sym_2_3097
+sym_2_3097: la $2, sym_2_3097
+.globl sym_2_3098
+sym_2_3098: la $2, sym_2_3098
+.globl sym_2_3099
+sym_2_3099: la $2, sym_2_3099
+.globl sym_2_3100
+sym_2_3100: la $2, sym_2_3100
+.globl sym_2_3101
+sym_2_3101: la $2, sym_2_3101
+.globl sym_2_3102
+sym_2_3102: la $2, sym_2_3102
+.globl sym_2_3103
+sym_2_3103: la $2, sym_2_3103
+.globl sym_2_3104
+sym_2_3104: la $2, sym_2_3104
+.globl sym_2_3105
+sym_2_3105: la $2, sym_2_3105
+.globl sym_2_3106
+sym_2_3106: la $2, sym_2_3106
+.globl sym_2_3107
+sym_2_3107: la $2, sym_2_3107
+.globl sym_2_3108
+sym_2_3108: la $2, sym_2_3108
+.globl sym_2_3109
+sym_2_3109: la $2, sym_2_3109
+.globl sym_2_3110
+sym_2_3110: la $2, sym_2_3110
+.globl sym_2_3111
+sym_2_3111: la $2, sym_2_3111
+.globl sym_2_3112
+sym_2_3112: la $2, sym_2_3112
+.globl sym_2_3113
+sym_2_3113: la $2, sym_2_3113
+.globl sym_2_3114
+sym_2_3114: la $2, sym_2_3114
+.globl sym_2_3115
+sym_2_3115: la $2, sym_2_3115
+.globl sym_2_3116
+sym_2_3116: la $2, sym_2_3116
+.globl sym_2_3117
+sym_2_3117: la $2, sym_2_3117
+.globl sym_2_3118
+sym_2_3118: la $2, sym_2_3118
+.globl sym_2_3119
+sym_2_3119: la $2, sym_2_3119
+.globl sym_2_3120
+sym_2_3120: la $2, sym_2_3120
+.globl sym_2_3121
+sym_2_3121: la $2, sym_2_3121
+.globl sym_2_3122
+sym_2_3122: la $2, sym_2_3122
+.globl sym_2_3123
+sym_2_3123: la $2, sym_2_3123
+.globl sym_2_3124
+sym_2_3124: la $2, sym_2_3124
+.globl sym_2_3125
+sym_2_3125: la $2, sym_2_3125
+.globl sym_2_3126
+sym_2_3126: la $2, sym_2_3126
+.globl sym_2_3127
+sym_2_3127: la $2, sym_2_3127
+.globl sym_2_3128
+sym_2_3128: la $2, sym_2_3128
+.globl sym_2_3129
+sym_2_3129: la $2, sym_2_3129
+.globl sym_2_3130
+sym_2_3130: la $2, sym_2_3130
+.globl sym_2_3131
+sym_2_3131: la $2, sym_2_3131
+.globl sym_2_3132
+sym_2_3132: la $2, sym_2_3132
+.globl sym_2_3133
+sym_2_3133: la $2, sym_2_3133
+.globl sym_2_3134
+sym_2_3134: la $2, sym_2_3134
+.globl sym_2_3135
+sym_2_3135: la $2, sym_2_3135
+.globl sym_2_3136
+sym_2_3136: la $2, sym_2_3136
+.globl sym_2_3137
+sym_2_3137: la $2, sym_2_3137
+.globl sym_2_3138
+sym_2_3138: la $2, sym_2_3138
+.globl sym_2_3139
+sym_2_3139: la $2, sym_2_3139
+.globl sym_2_3140
+sym_2_3140: la $2, sym_2_3140
+.globl sym_2_3141
+sym_2_3141: la $2, sym_2_3141
+.globl sym_2_3142
+sym_2_3142: la $2, sym_2_3142
+.globl sym_2_3143
+sym_2_3143: la $2, sym_2_3143
+.globl sym_2_3144
+sym_2_3144: la $2, sym_2_3144
+.globl sym_2_3145
+sym_2_3145: la $2, sym_2_3145
+.globl sym_2_3146
+sym_2_3146: la $2, sym_2_3146
+.globl sym_2_3147
+sym_2_3147: la $2, sym_2_3147
+.globl sym_2_3148
+sym_2_3148: la $2, sym_2_3148
+.globl sym_2_3149
+sym_2_3149: la $2, sym_2_3149
+.globl sym_2_3150
+sym_2_3150: la $2, sym_2_3150
+.globl sym_2_3151
+sym_2_3151: la $2, sym_2_3151
+.globl sym_2_3152
+sym_2_3152: la $2, sym_2_3152
+.globl sym_2_3153
+sym_2_3153: la $2, sym_2_3153
+.globl sym_2_3154
+sym_2_3154: la $2, sym_2_3154
+.globl sym_2_3155
+sym_2_3155: la $2, sym_2_3155
+.globl sym_2_3156
+sym_2_3156: la $2, sym_2_3156
+.globl sym_2_3157
+sym_2_3157: la $2, sym_2_3157
+.globl sym_2_3158
+sym_2_3158: la $2, sym_2_3158
+.globl sym_2_3159
+sym_2_3159: la $2, sym_2_3159
+.globl sym_2_3160
+sym_2_3160: la $2, sym_2_3160
+.globl sym_2_3161
+sym_2_3161: la $2, sym_2_3161
+.globl sym_2_3162
+sym_2_3162: la $2, sym_2_3162
+.globl sym_2_3163
+sym_2_3163: la $2, sym_2_3163
+.globl sym_2_3164
+sym_2_3164: la $2, sym_2_3164
+.globl sym_2_3165
+sym_2_3165: la $2, sym_2_3165
+.globl sym_2_3166
+sym_2_3166: la $2, sym_2_3166
+.globl sym_2_3167
+sym_2_3167: la $2, sym_2_3167
+.globl sym_2_3168
+sym_2_3168: la $2, sym_2_3168
+.globl sym_2_3169
+sym_2_3169: la $2, sym_2_3169
+.globl sym_2_3170
+sym_2_3170: la $2, sym_2_3170
+.globl sym_2_3171
+sym_2_3171: la $2, sym_2_3171
+.globl sym_2_3172
+sym_2_3172: la $2, sym_2_3172
+.globl sym_2_3173
+sym_2_3173: la $2, sym_2_3173
+.globl sym_2_3174
+sym_2_3174: la $2, sym_2_3174
+.globl sym_2_3175
+sym_2_3175: la $2, sym_2_3175
+.globl sym_2_3176
+sym_2_3176: la $2, sym_2_3176
+.globl sym_2_3177
+sym_2_3177: la $2, sym_2_3177
+.globl sym_2_3178
+sym_2_3178: la $2, sym_2_3178
+.globl sym_2_3179
+sym_2_3179: la $2, sym_2_3179
+.globl sym_2_3180
+sym_2_3180: la $2, sym_2_3180
+.globl sym_2_3181
+sym_2_3181: la $2, sym_2_3181
+.globl sym_2_3182
+sym_2_3182: la $2, sym_2_3182
+.globl sym_2_3183
+sym_2_3183: la $2, sym_2_3183
+.globl sym_2_3184
+sym_2_3184: la $2, sym_2_3184
+.globl sym_2_3185
+sym_2_3185: la $2, sym_2_3185
+.globl sym_2_3186
+sym_2_3186: la $2, sym_2_3186
+.globl sym_2_3187
+sym_2_3187: la $2, sym_2_3187
+.globl sym_2_3188
+sym_2_3188: la $2, sym_2_3188
+.globl sym_2_3189
+sym_2_3189: la $2, sym_2_3189
+.globl sym_2_3190
+sym_2_3190: la $2, sym_2_3190
+.globl sym_2_3191
+sym_2_3191: la $2, sym_2_3191
+.globl sym_2_3192
+sym_2_3192: la $2, sym_2_3192
+.globl sym_2_3193
+sym_2_3193: la $2, sym_2_3193
+.globl sym_2_3194
+sym_2_3194: la $2, sym_2_3194
+.globl sym_2_3195
+sym_2_3195: la $2, sym_2_3195
+.globl sym_2_3196
+sym_2_3196: la $2, sym_2_3196
+.globl sym_2_3197
+sym_2_3197: la $2, sym_2_3197
+.globl sym_2_3198
+sym_2_3198: la $2, sym_2_3198
+.globl sym_2_3199
+sym_2_3199: la $2, sym_2_3199
+.globl sym_2_3200
+sym_2_3200: la $2, sym_2_3200
+.globl sym_2_3201
+sym_2_3201: la $2, sym_2_3201
+.globl sym_2_3202
+sym_2_3202: la $2, sym_2_3202
+.globl sym_2_3203
+sym_2_3203: la $2, sym_2_3203
+.globl sym_2_3204
+sym_2_3204: la $2, sym_2_3204
+.globl sym_2_3205
+sym_2_3205: la $2, sym_2_3205
+.globl sym_2_3206
+sym_2_3206: la $2, sym_2_3206
+.globl sym_2_3207
+sym_2_3207: la $2, sym_2_3207
+.globl sym_2_3208
+sym_2_3208: la $2, sym_2_3208
+.globl sym_2_3209
+sym_2_3209: la $2, sym_2_3209
+.globl sym_2_3210
+sym_2_3210: la $2, sym_2_3210
+.globl sym_2_3211
+sym_2_3211: la $2, sym_2_3211
+.globl sym_2_3212
+sym_2_3212: la $2, sym_2_3212
+.globl sym_2_3213
+sym_2_3213: la $2, sym_2_3213
+.globl sym_2_3214
+sym_2_3214: la $2, sym_2_3214
+.globl sym_2_3215
+sym_2_3215: la $2, sym_2_3215
+.globl sym_2_3216
+sym_2_3216: la $2, sym_2_3216
+.globl sym_2_3217
+sym_2_3217: la $2, sym_2_3217
+.globl sym_2_3218
+sym_2_3218: la $2, sym_2_3218
+.globl sym_2_3219
+sym_2_3219: la $2, sym_2_3219
+.globl sym_2_3220
+sym_2_3220: la $2, sym_2_3220
+.globl sym_2_3221
+sym_2_3221: la $2, sym_2_3221
+.globl sym_2_3222
+sym_2_3222: la $2, sym_2_3222
+.globl sym_2_3223
+sym_2_3223: la $2, sym_2_3223
+.globl sym_2_3224
+sym_2_3224: la $2, sym_2_3224
+.globl sym_2_3225
+sym_2_3225: la $2, sym_2_3225
+.globl sym_2_3226
+sym_2_3226: la $2, sym_2_3226
+.globl sym_2_3227
+sym_2_3227: la $2, sym_2_3227
+.globl sym_2_3228
+sym_2_3228: la $2, sym_2_3228
+.globl sym_2_3229
+sym_2_3229: la $2, sym_2_3229
+.globl sym_2_3230
+sym_2_3230: la $2, sym_2_3230
+.globl sym_2_3231
+sym_2_3231: la $2, sym_2_3231
+.globl sym_2_3232
+sym_2_3232: la $2, sym_2_3232
+.globl sym_2_3233
+sym_2_3233: la $2, sym_2_3233
+.globl sym_2_3234
+sym_2_3234: la $2, sym_2_3234
+.globl sym_2_3235
+sym_2_3235: la $2, sym_2_3235
+.globl sym_2_3236
+sym_2_3236: la $2, sym_2_3236
+.globl sym_2_3237
+sym_2_3237: la $2, sym_2_3237
+.globl sym_2_3238
+sym_2_3238: la $2, sym_2_3238
+.globl sym_2_3239
+sym_2_3239: la $2, sym_2_3239
+.globl sym_2_3240
+sym_2_3240: la $2, sym_2_3240
+.globl sym_2_3241
+sym_2_3241: la $2, sym_2_3241
+.globl sym_2_3242
+sym_2_3242: la $2, sym_2_3242
+.globl sym_2_3243
+sym_2_3243: la $2, sym_2_3243
+.globl sym_2_3244
+sym_2_3244: la $2, sym_2_3244
+.globl sym_2_3245
+sym_2_3245: la $2, sym_2_3245
+.globl sym_2_3246
+sym_2_3246: la $2, sym_2_3246
+.globl sym_2_3247
+sym_2_3247: la $2, sym_2_3247
+.globl sym_2_3248
+sym_2_3248: la $2, sym_2_3248
+.globl sym_2_3249
+sym_2_3249: la $2, sym_2_3249
+.globl sym_2_3250
+sym_2_3250: la $2, sym_2_3250
+.globl sym_2_3251
+sym_2_3251: la $2, sym_2_3251
+.globl sym_2_3252
+sym_2_3252: la $2, sym_2_3252
+.globl sym_2_3253
+sym_2_3253: la $2, sym_2_3253
+.globl sym_2_3254
+sym_2_3254: la $2, sym_2_3254
+.globl sym_2_3255
+sym_2_3255: la $2, sym_2_3255
+.globl sym_2_3256
+sym_2_3256: la $2, sym_2_3256
+.globl sym_2_3257
+sym_2_3257: la $2, sym_2_3257
+.globl sym_2_3258
+sym_2_3258: la $2, sym_2_3258
+.globl sym_2_3259
+sym_2_3259: la $2, sym_2_3259
+.globl sym_2_3260
+sym_2_3260: la $2, sym_2_3260
+.globl sym_2_3261
+sym_2_3261: la $2, sym_2_3261
+.globl sym_2_3262
+sym_2_3262: la $2, sym_2_3262
+.globl sym_2_3263
+sym_2_3263: la $2, sym_2_3263
+.globl sym_2_3264
+sym_2_3264: la $2, sym_2_3264
+.globl sym_2_3265
+sym_2_3265: la $2, sym_2_3265
+.globl sym_2_3266
+sym_2_3266: la $2, sym_2_3266
+.globl sym_2_3267
+sym_2_3267: la $2, sym_2_3267
+.globl sym_2_3268
+sym_2_3268: la $2, sym_2_3268
+.globl sym_2_3269
+sym_2_3269: la $2, sym_2_3269
+.globl sym_2_3270
+sym_2_3270: la $2, sym_2_3270
+.globl sym_2_3271
+sym_2_3271: la $2, sym_2_3271
+.globl sym_2_3272
+sym_2_3272: la $2, sym_2_3272
+.globl sym_2_3273
+sym_2_3273: la $2, sym_2_3273
+.globl sym_2_3274
+sym_2_3274: la $2, sym_2_3274
+.globl sym_2_3275
+sym_2_3275: la $2, sym_2_3275
+.globl sym_2_3276
+sym_2_3276: la $2, sym_2_3276
+.globl sym_2_3277
+sym_2_3277: la $2, sym_2_3277
+.globl sym_2_3278
+sym_2_3278: la $2, sym_2_3278
+.globl sym_2_3279
+sym_2_3279: la $2, sym_2_3279
+.globl sym_2_3280
+sym_2_3280: la $2, sym_2_3280
+.globl sym_2_3281
+sym_2_3281: la $2, sym_2_3281
+.globl sym_2_3282
+sym_2_3282: la $2, sym_2_3282
+.globl sym_2_3283
+sym_2_3283: la $2, sym_2_3283
+.globl sym_2_3284
+sym_2_3284: la $2, sym_2_3284
+.globl sym_2_3285
+sym_2_3285: la $2, sym_2_3285
+.globl sym_2_3286
+sym_2_3286: la $2, sym_2_3286
+.globl sym_2_3287
+sym_2_3287: la $2, sym_2_3287
+.globl sym_2_3288
+sym_2_3288: la $2, sym_2_3288
+.globl sym_2_3289
+sym_2_3289: la $2, sym_2_3289
+.globl sym_2_3290
+sym_2_3290: la $2, sym_2_3290
+.globl sym_2_3291
+sym_2_3291: la $2, sym_2_3291
+.globl sym_2_3292
+sym_2_3292: la $2, sym_2_3292
+.globl sym_2_3293
+sym_2_3293: la $2, sym_2_3293
+.globl sym_2_3294
+sym_2_3294: la $2, sym_2_3294
+.globl sym_2_3295
+sym_2_3295: la $2, sym_2_3295
+.globl sym_2_3296
+sym_2_3296: la $2, sym_2_3296
+.globl sym_2_3297
+sym_2_3297: la $2, sym_2_3297
+.globl sym_2_3298
+sym_2_3298: la $2, sym_2_3298
+.globl sym_2_3299
+sym_2_3299: la $2, sym_2_3299
+.globl sym_2_3300
+sym_2_3300: la $2, sym_2_3300
+.globl sym_2_3301
+sym_2_3301: la $2, sym_2_3301
+.globl sym_2_3302
+sym_2_3302: la $2, sym_2_3302
+.globl sym_2_3303
+sym_2_3303: la $2, sym_2_3303
+.globl sym_2_3304
+sym_2_3304: la $2, sym_2_3304
+.globl sym_2_3305
+sym_2_3305: la $2, sym_2_3305
+.globl sym_2_3306
+sym_2_3306: la $2, sym_2_3306
+.globl sym_2_3307
+sym_2_3307: la $2, sym_2_3307
+.globl sym_2_3308
+sym_2_3308: la $2, sym_2_3308
+.globl sym_2_3309
+sym_2_3309: la $2, sym_2_3309
+.globl sym_2_3310
+sym_2_3310: la $2, sym_2_3310
+.globl sym_2_3311
+sym_2_3311: la $2, sym_2_3311
+.globl sym_2_3312
+sym_2_3312: la $2, sym_2_3312
+.globl sym_2_3313
+sym_2_3313: la $2, sym_2_3313
+.globl sym_2_3314
+sym_2_3314: la $2, sym_2_3314
+.globl sym_2_3315
+sym_2_3315: la $2, sym_2_3315
+.globl sym_2_3316
+sym_2_3316: la $2, sym_2_3316
+.globl sym_2_3317
+sym_2_3317: la $2, sym_2_3317
+.globl sym_2_3318
+sym_2_3318: la $2, sym_2_3318
+.globl sym_2_3319
+sym_2_3319: la $2, sym_2_3319
+.globl sym_2_3320
+sym_2_3320: la $2, sym_2_3320
+.globl sym_2_3321
+sym_2_3321: la $2, sym_2_3321
+.globl sym_2_3322
+sym_2_3322: la $2, sym_2_3322
+.globl sym_2_3323
+sym_2_3323: la $2, sym_2_3323
+.globl sym_2_3324
+sym_2_3324: la $2, sym_2_3324
+.globl sym_2_3325
+sym_2_3325: la $2, sym_2_3325
+.globl sym_2_3326
+sym_2_3326: la $2, sym_2_3326
+.globl sym_2_3327
+sym_2_3327: la $2, sym_2_3327
+.globl sym_2_3328
+sym_2_3328: la $2, sym_2_3328
+.globl sym_2_3329
+sym_2_3329: la $2, sym_2_3329
+.globl sym_2_3330
+sym_2_3330: la $2, sym_2_3330
+.globl sym_2_3331
+sym_2_3331: la $2, sym_2_3331
+.globl sym_2_3332
+sym_2_3332: la $2, sym_2_3332
+.globl sym_2_3333
+sym_2_3333: la $2, sym_2_3333
+.globl sym_2_3334
+sym_2_3334: la $2, sym_2_3334
+.globl sym_2_3335
+sym_2_3335: la $2, sym_2_3335
+.globl sym_2_3336
+sym_2_3336: la $2, sym_2_3336
+.globl sym_2_3337
+sym_2_3337: la $2, sym_2_3337
+.globl sym_2_3338
+sym_2_3338: la $2, sym_2_3338
+.globl sym_2_3339
+sym_2_3339: la $2, sym_2_3339
+.globl sym_2_3340
+sym_2_3340: la $2, sym_2_3340
+.globl sym_2_3341
+sym_2_3341: la $2, sym_2_3341
+.globl sym_2_3342
+sym_2_3342: la $2, sym_2_3342
+.globl sym_2_3343
+sym_2_3343: la $2, sym_2_3343
+.globl sym_2_3344
+sym_2_3344: la $2, sym_2_3344
+.globl sym_2_3345
+sym_2_3345: la $2, sym_2_3345
+.globl sym_2_3346
+sym_2_3346: la $2, sym_2_3346
+.globl sym_2_3347
+sym_2_3347: la $2, sym_2_3347
+.globl sym_2_3348
+sym_2_3348: la $2, sym_2_3348
+.globl sym_2_3349
+sym_2_3349: la $2, sym_2_3349
+.globl sym_2_3350
+sym_2_3350: la $2, sym_2_3350
+.globl sym_2_3351
+sym_2_3351: la $2, sym_2_3351
+.globl sym_2_3352
+sym_2_3352: la $2, sym_2_3352
+.globl sym_2_3353
+sym_2_3353: la $2, sym_2_3353
+.globl sym_2_3354
+sym_2_3354: la $2, sym_2_3354
+.globl sym_2_3355
+sym_2_3355: la $2, sym_2_3355
+.globl sym_2_3356
+sym_2_3356: la $2, sym_2_3356
+.globl sym_2_3357
+sym_2_3357: la $2, sym_2_3357
+.globl sym_2_3358
+sym_2_3358: la $2, sym_2_3358
+.globl sym_2_3359
+sym_2_3359: la $2, sym_2_3359
+.globl sym_2_3360
+sym_2_3360: la $2, sym_2_3360
+.globl sym_2_3361
+sym_2_3361: la $2, sym_2_3361
+.globl sym_2_3362
+sym_2_3362: la $2, sym_2_3362
+.globl sym_2_3363
+sym_2_3363: la $2, sym_2_3363
+.globl sym_2_3364
+sym_2_3364: la $2, sym_2_3364
+.globl sym_2_3365
+sym_2_3365: la $2, sym_2_3365
+.globl sym_2_3366
+sym_2_3366: la $2, sym_2_3366
+.globl sym_2_3367
+sym_2_3367: la $2, sym_2_3367
+.globl sym_2_3368
+sym_2_3368: la $2, sym_2_3368
+.globl sym_2_3369
+sym_2_3369: la $2, sym_2_3369
+.globl sym_2_3370
+sym_2_3370: la $2, sym_2_3370
+.globl sym_2_3371
+sym_2_3371: la $2, sym_2_3371
+.globl sym_2_3372
+sym_2_3372: la $2, sym_2_3372
+.globl sym_2_3373
+sym_2_3373: la $2, sym_2_3373
+.globl sym_2_3374
+sym_2_3374: la $2, sym_2_3374
+.globl sym_2_3375
+sym_2_3375: la $2, sym_2_3375
+.globl sym_2_3376
+sym_2_3376: la $2, sym_2_3376
+.globl sym_2_3377
+sym_2_3377: la $2, sym_2_3377
+.globl sym_2_3378
+sym_2_3378: la $2, sym_2_3378
+.globl sym_2_3379
+sym_2_3379: la $2, sym_2_3379
+.globl sym_2_3380
+sym_2_3380: la $2, sym_2_3380
+.globl sym_2_3381
+sym_2_3381: la $2, sym_2_3381
+.globl sym_2_3382
+sym_2_3382: la $2, sym_2_3382
+.globl sym_2_3383
+sym_2_3383: la $2, sym_2_3383
+.globl sym_2_3384
+sym_2_3384: la $2, sym_2_3384
+.globl sym_2_3385
+sym_2_3385: la $2, sym_2_3385
+.globl sym_2_3386
+sym_2_3386: la $2, sym_2_3386
+.globl sym_2_3387
+sym_2_3387: la $2, sym_2_3387
+.globl sym_2_3388
+sym_2_3388: la $2, sym_2_3388
+.globl sym_2_3389
+sym_2_3389: la $2, sym_2_3389
+.globl sym_2_3390
+sym_2_3390: la $2, sym_2_3390
+.globl sym_2_3391
+sym_2_3391: la $2, sym_2_3391
+.globl sym_2_3392
+sym_2_3392: la $2, sym_2_3392
+.globl sym_2_3393
+sym_2_3393: la $2, sym_2_3393
+.globl sym_2_3394
+sym_2_3394: la $2, sym_2_3394
+.globl sym_2_3395
+sym_2_3395: la $2, sym_2_3395
+.globl sym_2_3396
+sym_2_3396: la $2, sym_2_3396
+.globl sym_2_3397
+sym_2_3397: la $2, sym_2_3397
+.globl sym_2_3398
+sym_2_3398: la $2, sym_2_3398
+.globl sym_2_3399
+sym_2_3399: la $2, sym_2_3399
+.globl sym_2_3400
+sym_2_3400: la $2, sym_2_3400
+.globl sym_2_3401
+sym_2_3401: la $2, sym_2_3401
+.globl sym_2_3402
+sym_2_3402: la $2, sym_2_3402
+.globl sym_2_3403
+sym_2_3403: la $2, sym_2_3403
+.globl sym_2_3404
+sym_2_3404: la $2, sym_2_3404
+.globl sym_2_3405
+sym_2_3405: la $2, sym_2_3405
+.globl sym_2_3406
+sym_2_3406: la $2, sym_2_3406
+.globl sym_2_3407
+sym_2_3407: la $2, sym_2_3407
+.globl sym_2_3408
+sym_2_3408: la $2, sym_2_3408
+.globl sym_2_3409
+sym_2_3409: la $2, sym_2_3409
+.globl sym_2_3410
+sym_2_3410: la $2, sym_2_3410
+.globl sym_2_3411
+sym_2_3411: la $2, sym_2_3411
+.globl sym_2_3412
+sym_2_3412: la $2, sym_2_3412
+.globl sym_2_3413
+sym_2_3413: la $2, sym_2_3413
+.globl sym_2_3414
+sym_2_3414: la $2, sym_2_3414
+.globl sym_2_3415
+sym_2_3415: la $2, sym_2_3415
+.globl sym_2_3416
+sym_2_3416: la $2, sym_2_3416
+.globl sym_2_3417
+sym_2_3417: la $2, sym_2_3417
+.globl sym_2_3418
+sym_2_3418: la $2, sym_2_3418
+.globl sym_2_3419
+sym_2_3419: la $2, sym_2_3419
+.globl sym_2_3420
+sym_2_3420: la $2, sym_2_3420
+.globl sym_2_3421
+sym_2_3421: la $2, sym_2_3421
+.globl sym_2_3422
+sym_2_3422: la $2, sym_2_3422
+.globl sym_2_3423
+sym_2_3423: la $2, sym_2_3423
+.globl sym_2_3424
+sym_2_3424: la $2, sym_2_3424
+.globl sym_2_3425
+sym_2_3425: la $2, sym_2_3425
+.globl sym_2_3426
+sym_2_3426: la $2, sym_2_3426
+.globl sym_2_3427
+sym_2_3427: la $2, sym_2_3427
+.globl sym_2_3428
+sym_2_3428: la $2, sym_2_3428
+.globl sym_2_3429
+sym_2_3429: la $2, sym_2_3429
+.globl sym_2_3430
+sym_2_3430: la $2, sym_2_3430
+.globl sym_2_3431
+sym_2_3431: la $2, sym_2_3431
+.globl sym_2_3432
+sym_2_3432: la $2, sym_2_3432
+.globl sym_2_3433
+sym_2_3433: la $2, sym_2_3433
+.globl sym_2_3434
+sym_2_3434: la $2, sym_2_3434
+.globl sym_2_3435
+sym_2_3435: la $2, sym_2_3435
+.globl sym_2_3436
+sym_2_3436: la $2, sym_2_3436
+.globl sym_2_3437
+sym_2_3437: la $2, sym_2_3437
+.globl sym_2_3438
+sym_2_3438: la $2, sym_2_3438
+.globl sym_2_3439
+sym_2_3439: la $2, sym_2_3439
+.globl sym_2_3440
+sym_2_3440: la $2, sym_2_3440
+.globl sym_2_3441
+sym_2_3441: la $2, sym_2_3441
+.globl sym_2_3442
+sym_2_3442: la $2, sym_2_3442
+.globl sym_2_3443
+sym_2_3443: la $2, sym_2_3443
+.globl sym_2_3444
+sym_2_3444: la $2, sym_2_3444
+.globl sym_2_3445
+sym_2_3445: la $2, sym_2_3445
+.globl sym_2_3446
+sym_2_3446: la $2, sym_2_3446
+.globl sym_2_3447
+sym_2_3447: la $2, sym_2_3447
+.globl sym_2_3448
+sym_2_3448: la $2, sym_2_3448
+.globl sym_2_3449
+sym_2_3449: la $2, sym_2_3449
+.globl sym_2_3450
+sym_2_3450: la $2, sym_2_3450
+.globl sym_2_3451
+sym_2_3451: la $2, sym_2_3451
+.globl sym_2_3452
+sym_2_3452: la $2, sym_2_3452
+.globl sym_2_3453
+sym_2_3453: la $2, sym_2_3453
+.globl sym_2_3454
+sym_2_3454: la $2, sym_2_3454
+.globl sym_2_3455
+sym_2_3455: la $2, sym_2_3455
+.globl sym_2_3456
+sym_2_3456: la $2, sym_2_3456
+.globl sym_2_3457
+sym_2_3457: la $2, sym_2_3457
+.globl sym_2_3458
+sym_2_3458: la $2, sym_2_3458
+.globl sym_2_3459
+sym_2_3459: la $2, sym_2_3459
+.globl sym_2_3460
+sym_2_3460: la $2, sym_2_3460
+.globl sym_2_3461
+sym_2_3461: la $2, sym_2_3461
+.globl sym_2_3462
+sym_2_3462: la $2, sym_2_3462
+.globl sym_2_3463
+sym_2_3463: la $2, sym_2_3463
+.globl sym_2_3464
+sym_2_3464: la $2, sym_2_3464
+.globl sym_2_3465
+sym_2_3465: la $2, sym_2_3465
+.globl sym_2_3466
+sym_2_3466: la $2, sym_2_3466
+.globl sym_2_3467
+sym_2_3467: la $2, sym_2_3467
+.globl sym_2_3468
+sym_2_3468: la $2, sym_2_3468
+.globl sym_2_3469
+sym_2_3469: la $2, sym_2_3469
+.globl sym_2_3470
+sym_2_3470: la $2, sym_2_3470
+.globl sym_2_3471
+sym_2_3471: la $2, sym_2_3471
+.globl sym_2_3472
+sym_2_3472: la $2, sym_2_3472
+.globl sym_2_3473
+sym_2_3473: la $2, sym_2_3473
+.globl sym_2_3474
+sym_2_3474: la $2, sym_2_3474
+.globl sym_2_3475
+sym_2_3475: la $2, sym_2_3475
+.globl sym_2_3476
+sym_2_3476: la $2, sym_2_3476
+.globl sym_2_3477
+sym_2_3477: la $2, sym_2_3477
+.globl sym_2_3478
+sym_2_3478: la $2, sym_2_3478
+.globl sym_2_3479
+sym_2_3479: la $2, sym_2_3479
+.globl sym_2_3480
+sym_2_3480: la $2, sym_2_3480
+.globl sym_2_3481
+sym_2_3481: la $2, sym_2_3481
+.globl sym_2_3482
+sym_2_3482: la $2, sym_2_3482
+.globl sym_2_3483
+sym_2_3483: la $2, sym_2_3483
+.globl sym_2_3484
+sym_2_3484: la $2, sym_2_3484
+.globl sym_2_3485
+sym_2_3485: la $2, sym_2_3485
+.globl sym_2_3486
+sym_2_3486: la $2, sym_2_3486
+.globl sym_2_3487
+sym_2_3487: la $2, sym_2_3487
+.globl sym_2_3488
+sym_2_3488: la $2, sym_2_3488
+.globl sym_2_3489
+sym_2_3489: la $2, sym_2_3489
+.globl sym_2_3490
+sym_2_3490: la $2, sym_2_3490
+.globl sym_2_3491
+sym_2_3491: la $2, sym_2_3491
+.globl sym_2_3492
+sym_2_3492: la $2, sym_2_3492
+.globl sym_2_3493
+sym_2_3493: la $2, sym_2_3493
+.globl sym_2_3494
+sym_2_3494: la $2, sym_2_3494
+.globl sym_2_3495
+sym_2_3495: la $2, sym_2_3495
+.globl sym_2_3496
+sym_2_3496: la $2, sym_2_3496
+.globl sym_2_3497
+sym_2_3497: la $2, sym_2_3497
+.globl sym_2_3498
+sym_2_3498: la $2, sym_2_3498
+.globl sym_2_3499
+sym_2_3499: la $2, sym_2_3499
+.globl sym_2_3500
+sym_2_3500: la $2, sym_2_3500
+.globl sym_2_3501
+sym_2_3501: la $2, sym_2_3501
+.globl sym_2_3502
+sym_2_3502: la $2, sym_2_3502
+.globl sym_2_3503
+sym_2_3503: la $2, sym_2_3503
+.globl sym_2_3504
+sym_2_3504: la $2, sym_2_3504
+.globl sym_2_3505
+sym_2_3505: la $2, sym_2_3505
+.globl sym_2_3506
+sym_2_3506: la $2, sym_2_3506
+.globl sym_2_3507
+sym_2_3507: la $2, sym_2_3507
+.globl sym_2_3508
+sym_2_3508: la $2, sym_2_3508
+.globl sym_2_3509
+sym_2_3509: la $2, sym_2_3509
+.globl sym_2_3510
+sym_2_3510: la $2, sym_2_3510
+.globl sym_2_3511
+sym_2_3511: la $2, sym_2_3511
+.globl sym_2_3512
+sym_2_3512: la $2, sym_2_3512
+.globl sym_2_3513
+sym_2_3513: la $2, sym_2_3513
+.globl sym_2_3514
+sym_2_3514: la $2, sym_2_3514
+.globl sym_2_3515
+sym_2_3515: la $2, sym_2_3515
+.globl sym_2_3516
+sym_2_3516: la $2, sym_2_3516
+.globl sym_2_3517
+sym_2_3517: la $2, sym_2_3517
+.globl sym_2_3518
+sym_2_3518: la $2, sym_2_3518
+.globl sym_2_3519
+sym_2_3519: la $2, sym_2_3519
+.globl sym_2_3520
+sym_2_3520: la $2, sym_2_3520
+.globl sym_2_3521
+sym_2_3521: la $2, sym_2_3521
+.globl sym_2_3522
+sym_2_3522: la $2, sym_2_3522
+.globl sym_2_3523
+sym_2_3523: la $2, sym_2_3523
+.globl sym_2_3524
+sym_2_3524: la $2, sym_2_3524
+.globl sym_2_3525
+sym_2_3525: la $2, sym_2_3525
+.globl sym_2_3526
+sym_2_3526: la $2, sym_2_3526
+.globl sym_2_3527
+sym_2_3527: la $2, sym_2_3527
+.globl sym_2_3528
+sym_2_3528: la $2, sym_2_3528
+.globl sym_2_3529
+sym_2_3529: la $2, sym_2_3529
+.globl sym_2_3530
+sym_2_3530: la $2, sym_2_3530
+.globl sym_2_3531
+sym_2_3531: la $2, sym_2_3531
+.globl sym_2_3532
+sym_2_3532: la $2, sym_2_3532
+.globl sym_2_3533
+sym_2_3533: la $2, sym_2_3533
+.globl sym_2_3534
+sym_2_3534: la $2, sym_2_3534
+.globl sym_2_3535
+sym_2_3535: la $2, sym_2_3535
+.globl sym_2_3536
+sym_2_3536: la $2, sym_2_3536
+.globl sym_2_3537
+sym_2_3537: la $2, sym_2_3537
+.globl sym_2_3538
+sym_2_3538: la $2, sym_2_3538
+.globl sym_2_3539
+sym_2_3539: la $2, sym_2_3539
+.globl sym_2_3540
+sym_2_3540: la $2, sym_2_3540
+.globl sym_2_3541
+sym_2_3541: la $2, sym_2_3541
+.globl sym_2_3542
+sym_2_3542: la $2, sym_2_3542
+.globl sym_2_3543
+sym_2_3543: la $2, sym_2_3543
+.globl sym_2_3544
+sym_2_3544: la $2, sym_2_3544
+.globl sym_2_3545
+sym_2_3545: la $2, sym_2_3545
+.globl sym_2_3546
+sym_2_3546: la $2, sym_2_3546
+.globl sym_2_3547
+sym_2_3547: la $2, sym_2_3547
+.globl sym_2_3548
+sym_2_3548: la $2, sym_2_3548
+.globl sym_2_3549
+sym_2_3549: la $2, sym_2_3549
+.globl sym_2_3550
+sym_2_3550: la $2, sym_2_3550
+.globl sym_2_3551
+sym_2_3551: la $2, sym_2_3551
+.globl sym_2_3552
+sym_2_3552: la $2, sym_2_3552
+.globl sym_2_3553
+sym_2_3553: la $2, sym_2_3553
+.globl sym_2_3554
+sym_2_3554: la $2, sym_2_3554
+.globl sym_2_3555
+sym_2_3555: la $2, sym_2_3555
+.globl sym_2_3556
+sym_2_3556: la $2, sym_2_3556
+.globl sym_2_3557
+sym_2_3557: la $2, sym_2_3557
+.globl sym_2_3558
+sym_2_3558: la $2, sym_2_3558
+.globl sym_2_3559
+sym_2_3559: la $2, sym_2_3559
+.globl sym_2_3560
+sym_2_3560: la $2, sym_2_3560
+.globl sym_2_3561
+sym_2_3561: la $2, sym_2_3561
+.globl sym_2_3562
+sym_2_3562: la $2, sym_2_3562
+.globl sym_2_3563
+sym_2_3563: la $2, sym_2_3563
+.globl sym_2_3564
+sym_2_3564: la $2, sym_2_3564
+.globl sym_2_3565
+sym_2_3565: la $2, sym_2_3565
+.globl sym_2_3566
+sym_2_3566: la $2, sym_2_3566
+.globl sym_2_3567
+sym_2_3567: la $2, sym_2_3567
+.globl sym_2_3568
+sym_2_3568: la $2, sym_2_3568
+.globl sym_2_3569
+sym_2_3569: la $2, sym_2_3569
+.globl sym_2_3570
+sym_2_3570: la $2, sym_2_3570
+.globl sym_2_3571
+sym_2_3571: la $2, sym_2_3571
+.globl sym_2_3572
+sym_2_3572: la $2, sym_2_3572
+.globl sym_2_3573
+sym_2_3573: la $2, sym_2_3573
+.globl sym_2_3574
+sym_2_3574: la $2, sym_2_3574
+.globl sym_2_3575
+sym_2_3575: la $2, sym_2_3575
+.globl sym_2_3576
+sym_2_3576: la $2, sym_2_3576
+.globl sym_2_3577
+sym_2_3577: la $2, sym_2_3577
+.globl sym_2_3578
+sym_2_3578: la $2, sym_2_3578
+.globl sym_2_3579
+sym_2_3579: la $2, sym_2_3579
+.globl sym_2_3580
+sym_2_3580: la $2, sym_2_3580
+.globl sym_2_3581
+sym_2_3581: la $2, sym_2_3581
+.globl sym_2_3582
+sym_2_3582: la $2, sym_2_3582
+.globl sym_2_3583
+sym_2_3583: la $2, sym_2_3583
+.globl sym_2_3584
+sym_2_3584: la $2, sym_2_3584
+.globl sym_2_3585
+sym_2_3585: la $2, sym_2_3585
+.globl sym_2_3586
+sym_2_3586: la $2, sym_2_3586
+.globl sym_2_3587
+sym_2_3587: la $2, sym_2_3587
+.globl sym_2_3588
+sym_2_3588: la $2, sym_2_3588
+.globl sym_2_3589
+sym_2_3589: la $2, sym_2_3589
+.globl sym_2_3590
+sym_2_3590: la $2, sym_2_3590
+.globl sym_2_3591
+sym_2_3591: la $2, sym_2_3591
+.globl sym_2_3592
+sym_2_3592: la $2, sym_2_3592
+.globl sym_2_3593
+sym_2_3593: la $2, sym_2_3593
+.globl sym_2_3594
+sym_2_3594: la $2, sym_2_3594
+.globl sym_2_3595
+sym_2_3595: la $2, sym_2_3595
+.globl sym_2_3596
+sym_2_3596: la $2, sym_2_3596
+.globl sym_2_3597
+sym_2_3597: la $2, sym_2_3597
+.globl sym_2_3598
+sym_2_3598: la $2, sym_2_3598
+.globl sym_2_3599
+sym_2_3599: la $2, sym_2_3599
+.globl sym_2_3600
+sym_2_3600: la $2, sym_2_3600
+.globl sym_2_3601
+sym_2_3601: la $2, sym_2_3601
+.globl sym_2_3602
+sym_2_3602: la $2, sym_2_3602
+.globl sym_2_3603
+sym_2_3603: la $2, sym_2_3603
+.globl sym_2_3604
+sym_2_3604: la $2, sym_2_3604
+.globl sym_2_3605
+sym_2_3605: la $2, sym_2_3605
+.globl sym_2_3606
+sym_2_3606: la $2, sym_2_3606
+.globl sym_2_3607
+sym_2_3607: la $2, sym_2_3607
+.globl sym_2_3608
+sym_2_3608: la $2, sym_2_3608
+.globl sym_2_3609
+sym_2_3609: la $2, sym_2_3609
+.globl sym_2_3610
+sym_2_3610: la $2, sym_2_3610
+.globl sym_2_3611
+sym_2_3611: la $2, sym_2_3611
+.globl sym_2_3612
+sym_2_3612: la $2, sym_2_3612
+.globl sym_2_3613
+sym_2_3613: la $2, sym_2_3613
+.globl sym_2_3614
+sym_2_3614: la $2, sym_2_3614
+.globl sym_2_3615
+sym_2_3615: la $2, sym_2_3615
+.globl sym_2_3616
+sym_2_3616: la $2, sym_2_3616
+.globl sym_2_3617
+sym_2_3617: la $2, sym_2_3617
+.globl sym_2_3618
+sym_2_3618: la $2, sym_2_3618
+.globl sym_2_3619
+sym_2_3619: la $2, sym_2_3619
+.globl sym_2_3620
+sym_2_3620: la $2, sym_2_3620
+.globl sym_2_3621
+sym_2_3621: la $2, sym_2_3621
+.globl sym_2_3622
+sym_2_3622: la $2, sym_2_3622
+.globl sym_2_3623
+sym_2_3623: la $2, sym_2_3623
+.globl sym_2_3624
+sym_2_3624: la $2, sym_2_3624
+.globl sym_2_3625
+sym_2_3625: la $2, sym_2_3625
+.globl sym_2_3626
+sym_2_3626: la $2, sym_2_3626
+.globl sym_2_3627
+sym_2_3627: la $2, sym_2_3627
+.globl sym_2_3628
+sym_2_3628: la $2, sym_2_3628
+.globl sym_2_3629
+sym_2_3629: la $2, sym_2_3629
+.globl sym_2_3630
+sym_2_3630: la $2, sym_2_3630
+.globl sym_2_3631
+sym_2_3631: la $2, sym_2_3631
+.globl sym_2_3632
+sym_2_3632: la $2, sym_2_3632
+.globl sym_2_3633
+sym_2_3633: la $2, sym_2_3633
+.globl sym_2_3634
+sym_2_3634: la $2, sym_2_3634
+.globl sym_2_3635
+sym_2_3635: la $2, sym_2_3635
+.globl sym_2_3636
+sym_2_3636: la $2, sym_2_3636
+.globl sym_2_3637
+sym_2_3637: la $2, sym_2_3637
+.globl sym_2_3638
+sym_2_3638: la $2, sym_2_3638
+.globl sym_2_3639
+sym_2_3639: la $2, sym_2_3639
+.globl sym_2_3640
+sym_2_3640: la $2, sym_2_3640
+.globl sym_2_3641
+sym_2_3641: la $2, sym_2_3641
+.globl sym_2_3642
+sym_2_3642: la $2, sym_2_3642
+.globl sym_2_3643
+sym_2_3643: la $2, sym_2_3643
+.globl sym_2_3644
+sym_2_3644: la $2, sym_2_3644
+.globl sym_2_3645
+sym_2_3645: la $2, sym_2_3645
+.globl sym_2_3646
+sym_2_3646: la $2, sym_2_3646
+.globl sym_2_3647
+sym_2_3647: la $2, sym_2_3647
+.globl sym_2_3648
+sym_2_3648: la $2, sym_2_3648
+.globl sym_2_3649
+sym_2_3649: la $2, sym_2_3649
+.globl sym_2_3650
+sym_2_3650: la $2, sym_2_3650
+.globl sym_2_3651
+sym_2_3651: la $2, sym_2_3651
+.globl sym_2_3652
+sym_2_3652: la $2, sym_2_3652
+.globl sym_2_3653
+sym_2_3653: la $2, sym_2_3653
+.globl sym_2_3654
+sym_2_3654: la $2, sym_2_3654
+.globl sym_2_3655
+sym_2_3655: la $2, sym_2_3655
+.globl sym_2_3656
+sym_2_3656: la $2, sym_2_3656
+.globl sym_2_3657
+sym_2_3657: la $2, sym_2_3657
+.globl sym_2_3658
+sym_2_3658: la $2, sym_2_3658
+.globl sym_2_3659
+sym_2_3659: la $2, sym_2_3659
+.globl sym_2_3660
+sym_2_3660: la $2, sym_2_3660
+.globl sym_2_3661
+sym_2_3661: la $2, sym_2_3661
+.globl sym_2_3662
+sym_2_3662: la $2, sym_2_3662
+.globl sym_2_3663
+sym_2_3663: la $2, sym_2_3663
+.globl sym_2_3664
+sym_2_3664: la $2, sym_2_3664
+.globl sym_2_3665
+sym_2_3665: la $2, sym_2_3665
+.globl sym_2_3666
+sym_2_3666: la $2, sym_2_3666
+.globl sym_2_3667
+sym_2_3667: la $2, sym_2_3667
+.globl sym_2_3668
+sym_2_3668: la $2, sym_2_3668
+.globl sym_2_3669
+sym_2_3669: la $2, sym_2_3669
+.globl sym_2_3670
+sym_2_3670: la $2, sym_2_3670
+.globl sym_2_3671
+sym_2_3671: la $2, sym_2_3671
+.globl sym_2_3672
+sym_2_3672: la $2, sym_2_3672
+.globl sym_2_3673
+sym_2_3673: la $2, sym_2_3673
+.globl sym_2_3674
+sym_2_3674: la $2, sym_2_3674
+.globl sym_2_3675
+sym_2_3675: la $2, sym_2_3675
+.globl sym_2_3676
+sym_2_3676: la $2, sym_2_3676
+.globl sym_2_3677
+sym_2_3677: la $2, sym_2_3677
+.globl sym_2_3678
+sym_2_3678: la $2, sym_2_3678
+.globl sym_2_3679
+sym_2_3679: la $2, sym_2_3679
+.globl sym_2_3680
+sym_2_3680: la $2, sym_2_3680
+.globl sym_2_3681
+sym_2_3681: la $2, sym_2_3681
+.globl sym_2_3682
+sym_2_3682: la $2, sym_2_3682
+.globl sym_2_3683
+sym_2_3683: la $2, sym_2_3683
+.globl sym_2_3684
+sym_2_3684: la $2, sym_2_3684
+.globl sym_2_3685
+sym_2_3685: la $2, sym_2_3685
+.globl sym_2_3686
+sym_2_3686: la $2, sym_2_3686
+.globl sym_2_3687
+sym_2_3687: la $2, sym_2_3687
+.globl sym_2_3688
+sym_2_3688: la $2, sym_2_3688
+.globl sym_2_3689
+sym_2_3689: la $2, sym_2_3689
+.globl sym_2_3690
+sym_2_3690: la $2, sym_2_3690
+.globl sym_2_3691
+sym_2_3691: la $2, sym_2_3691
+.globl sym_2_3692
+sym_2_3692: la $2, sym_2_3692
+.globl sym_2_3693
+sym_2_3693: la $2, sym_2_3693
+.globl sym_2_3694
+sym_2_3694: la $2, sym_2_3694
+.globl sym_2_3695
+sym_2_3695: la $2, sym_2_3695
+.globl sym_2_3696
+sym_2_3696: la $2, sym_2_3696
+.globl sym_2_3697
+sym_2_3697: la $2, sym_2_3697
+.globl sym_2_3698
+sym_2_3698: la $2, sym_2_3698
+.globl sym_2_3699
+sym_2_3699: la $2, sym_2_3699
+.globl sym_2_3700
+sym_2_3700: la $2, sym_2_3700
+.globl sym_2_3701
+sym_2_3701: la $2, sym_2_3701
+.globl sym_2_3702
+sym_2_3702: la $2, sym_2_3702
+.globl sym_2_3703
+sym_2_3703: la $2, sym_2_3703
+.globl sym_2_3704
+sym_2_3704: la $2, sym_2_3704
+.globl sym_2_3705
+sym_2_3705: la $2, sym_2_3705
+.globl sym_2_3706
+sym_2_3706: la $2, sym_2_3706
+.globl sym_2_3707
+sym_2_3707: la $2, sym_2_3707
+.globl sym_2_3708
+sym_2_3708: la $2, sym_2_3708
+.globl sym_2_3709
+sym_2_3709: la $2, sym_2_3709
+.globl sym_2_3710
+sym_2_3710: la $2, sym_2_3710
+.globl sym_2_3711
+sym_2_3711: la $2, sym_2_3711
+.globl sym_2_3712
+sym_2_3712: la $2, sym_2_3712
+.globl sym_2_3713
+sym_2_3713: la $2, sym_2_3713
+.globl sym_2_3714
+sym_2_3714: la $2, sym_2_3714
+.globl sym_2_3715
+sym_2_3715: la $2, sym_2_3715
+.globl sym_2_3716
+sym_2_3716: la $2, sym_2_3716
+.globl sym_2_3717
+sym_2_3717: la $2, sym_2_3717
+.globl sym_2_3718
+sym_2_3718: la $2, sym_2_3718
+.globl sym_2_3719
+sym_2_3719: la $2, sym_2_3719
+.globl sym_2_3720
+sym_2_3720: la $2, sym_2_3720
+.globl sym_2_3721
+sym_2_3721: la $2, sym_2_3721
+.globl sym_2_3722
+sym_2_3722: la $2, sym_2_3722
+.globl sym_2_3723
+sym_2_3723: la $2, sym_2_3723
+.globl sym_2_3724
+sym_2_3724: la $2, sym_2_3724
+.globl sym_2_3725
+sym_2_3725: la $2, sym_2_3725
+.globl sym_2_3726
+sym_2_3726: la $2, sym_2_3726
+.globl sym_2_3727
+sym_2_3727: la $2, sym_2_3727
+.globl sym_2_3728
+sym_2_3728: la $2, sym_2_3728
+.globl sym_2_3729
+sym_2_3729: la $2, sym_2_3729
+.globl sym_2_3730
+sym_2_3730: la $2, sym_2_3730
+.globl sym_2_3731
+sym_2_3731: la $2, sym_2_3731
+.globl sym_2_3732
+sym_2_3732: la $2, sym_2_3732
+.globl sym_2_3733
+sym_2_3733: la $2, sym_2_3733
+.globl sym_2_3734
+sym_2_3734: la $2, sym_2_3734
+.globl sym_2_3735
+sym_2_3735: la $2, sym_2_3735
+.globl sym_2_3736
+sym_2_3736: la $2, sym_2_3736
+.globl sym_2_3737
+sym_2_3737: la $2, sym_2_3737
+.globl sym_2_3738
+sym_2_3738: la $2, sym_2_3738
+.globl sym_2_3739
+sym_2_3739: la $2, sym_2_3739
+.globl sym_2_3740
+sym_2_3740: la $2, sym_2_3740
+.globl sym_2_3741
+sym_2_3741: la $2, sym_2_3741
+.globl sym_2_3742
+sym_2_3742: la $2, sym_2_3742
+.globl sym_2_3743
+sym_2_3743: la $2, sym_2_3743
+.globl sym_2_3744
+sym_2_3744: la $2, sym_2_3744
+.globl sym_2_3745
+sym_2_3745: la $2, sym_2_3745
+.globl sym_2_3746
+sym_2_3746: la $2, sym_2_3746
+.globl sym_2_3747
+sym_2_3747: la $2, sym_2_3747
+.globl sym_2_3748
+sym_2_3748: la $2, sym_2_3748
+.globl sym_2_3749
+sym_2_3749: la $2, sym_2_3749
+.globl sym_2_3750
+sym_2_3750: la $2, sym_2_3750
+.globl sym_2_3751
+sym_2_3751: la $2, sym_2_3751
+.globl sym_2_3752
+sym_2_3752: la $2, sym_2_3752
+.globl sym_2_3753
+sym_2_3753: la $2, sym_2_3753
+.globl sym_2_3754
+sym_2_3754: la $2, sym_2_3754
+.globl sym_2_3755
+sym_2_3755: la $2, sym_2_3755
+.globl sym_2_3756
+sym_2_3756: la $2, sym_2_3756
+.globl sym_2_3757
+sym_2_3757: la $2, sym_2_3757
+.globl sym_2_3758
+sym_2_3758: la $2, sym_2_3758
+.globl sym_2_3759
+sym_2_3759: la $2, sym_2_3759
+.globl sym_2_3760
+sym_2_3760: la $2, sym_2_3760
+.globl sym_2_3761
+sym_2_3761: la $2, sym_2_3761
+.globl sym_2_3762
+sym_2_3762: la $2, sym_2_3762
+.globl sym_2_3763
+sym_2_3763: la $2, sym_2_3763
+.globl sym_2_3764
+sym_2_3764: la $2, sym_2_3764
+.globl sym_2_3765
+sym_2_3765: la $2, sym_2_3765
+.globl sym_2_3766
+sym_2_3766: la $2, sym_2_3766
+.globl sym_2_3767
+sym_2_3767: la $2, sym_2_3767
+.globl sym_2_3768
+sym_2_3768: la $2, sym_2_3768
+.globl sym_2_3769
+sym_2_3769: la $2, sym_2_3769
+.globl sym_2_3770
+sym_2_3770: la $2, sym_2_3770
+.globl sym_2_3771
+sym_2_3771: la $2, sym_2_3771
+.globl sym_2_3772
+sym_2_3772: la $2, sym_2_3772
+.globl sym_2_3773
+sym_2_3773: la $2, sym_2_3773
+.globl sym_2_3774
+sym_2_3774: la $2, sym_2_3774
+.globl sym_2_3775
+sym_2_3775: la $2, sym_2_3775
+.globl sym_2_3776
+sym_2_3776: la $2, sym_2_3776
+.globl sym_2_3777
+sym_2_3777: la $2, sym_2_3777
+.globl sym_2_3778
+sym_2_3778: la $2, sym_2_3778
+.globl sym_2_3779
+sym_2_3779: la $2, sym_2_3779
+.globl sym_2_3780
+sym_2_3780: la $2, sym_2_3780
+.globl sym_2_3781
+sym_2_3781: la $2, sym_2_3781
+.globl sym_2_3782
+sym_2_3782: la $2, sym_2_3782
+.globl sym_2_3783
+sym_2_3783: la $2, sym_2_3783
+.globl sym_2_3784
+sym_2_3784: la $2, sym_2_3784
+.globl sym_2_3785
+sym_2_3785: la $2, sym_2_3785
+.globl sym_2_3786
+sym_2_3786: la $2, sym_2_3786
+.globl sym_2_3787
+sym_2_3787: la $2, sym_2_3787
+.globl sym_2_3788
+sym_2_3788: la $2, sym_2_3788
+.globl sym_2_3789
+sym_2_3789: la $2, sym_2_3789
+.globl sym_2_3790
+sym_2_3790: la $2, sym_2_3790
+.globl sym_2_3791
+sym_2_3791: la $2, sym_2_3791
+.globl sym_2_3792
+sym_2_3792: la $2, sym_2_3792
+.globl sym_2_3793
+sym_2_3793: la $2, sym_2_3793
+.globl sym_2_3794
+sym_2_3794: la $2, sym_2_3794
+.globl sym_2_3795
+sym_2_3795: la $2, sym_2_3795
+.globl sym_2_3796
+sym_2_3796: la $2, sym_2_3796
+.globl sym_2_3797
+sym_2_3797: la $2, sym_2_3797
+.globl sym_2_3798
+sym_2_3798: la $2, sym_2_3798
+.globl sym_2_3799
+sym_2_3799: la $2, sym_2_3799
+.globl sym_2_3800
+sym_2_3800: la $2, sym_2_3800
+.globl sym_2_3801
+sym_2_3801: la $2, sym_2_3801
+.globl sym_2_3802
+sym_2_3802: la $2, sym_2_3802
+.globl sym_2_3803
+sym_2_3803: la $2, sym_2_3803
+.globl sym_2_3804
+sym_2_3804: la $2, sym_2_3804
+.globl sym_2_3805
+sym_2_3805: la $2, sym_2_3805
+.globl sym_2_3806
+sym_2_3806: la $2, sym_2_3806
+.globl sym_2_3807
+sym_2_3807: la $2, sym_2_3807
+.globl sym_2_3808
+sym_2_3808: la $2, sym_2_3808
+.globl sym_2_3809
+sym_2_3809: la $2, sym_2_3809
+.globl sym_2_3810
+sym_2_3810: la $2, sym_2_3810
+.globl sym_2_3811
+sym_2_3811: la $2, sym_2_3811
+.globl sym_2_3812
+sym_2_3812: la $2, sym_2_3812
+.globl sym_2_3813
+sym_2_3813: la $2, sym_2_3813
+.globl sym_2_3814
+sym_2_3814: la $2, sym_2_3814
+.globl sym_2_3815
+sym_2_3815: la $2, sym_2_3815
+.globl sym_2_3816
+sym_2_3816: la $2, sym_2_3816
+.globl sym_2_3817
+sym_2_3817: la $2, sym_2_3817
+.globl sym_2_3818
+sym_2_3818: la $2, sym_2_3818
+.globl sym_2_3819
+sym_2_3819: la $2, sym_2_3819
+.globl sym_2_3820
+sym_2_3820: la $2, sym_2_3820
+.globl sym_2_3821
+sym_2_3821: la $2, sym_2_3821
+.globl sym_2_3822
+sym_2_3822: la $2, sym_2_3822
+.globl sym_2_3823
+sym_2_3823: la $2, sym_2_3823
+.globl sym_2_3824
+sym_2_3824: la $2, sym_2_3824
+.globl sym_2_3825
+sym_2_3825: la $2, sym_2_3825
+.globl sym_2_3826
+sym_2_3826: la $2, sym_2_3826
+.globl sym_2_3827
+sym_2_3827: la $2, sym_2_3827
+.globl sym_2_3828
+sym_2_3828: la $2, sym_2_3828
+.globl sym_2_3829
+sym_2_3829: la $2, sym_2_3829
+.globl sym_2_3830
+sym_2_3830: la $2, sym_2_3830
+.globl sym_2_3831
+sym_2_3831: la $2, sym_2_3831
+.globl sym_2_3832
+sym_2_3832: la $2, sym_2_3832
+.globl sym_2_3833
+sym_2_3833: la $2, sym_2_3833
+.globl sym_2_3834
+sym_2_3834: la $2, sym_2_3834
+.globl sym_2_3835
+sym_2_3835: la $2, sym_2_3835
+.globl sym_2_3836
+sym_2_3836: la $2, sym_2_3836
+.globl sym_2_3837
+sym_2_3837: la $2, sym_2_3837
+.globl sym_2_3838
+sym_2_3838: la $2, sym_2_3838
+.globl sym_2_3839
+sym_2_3839: la $2, sym_2_3839
+.globl sym_2_3840
+sym_2_3840: la $2, sym_2_3840
+.globl sym_2_3841
+sym_2_3841: la $2, sym_2_3841
+.globl sym_2_3842
+sym_2_3842: la $2, sym_2_3842
+.globl sym_2_3843
+sym_2_3843: la $2, sym_2_3843
+.globl sym_2_3844
+sym_2_3844: la $2, sym_2_3844
+.globl sym_2_3845
+sym_2_3845: la $2, sym_2_3845
+.globl sym_2_3846
+sym_2_3846: la $2, sym_2_3846
+.globl sym_2_3847
+sym_2_3847: la $2, sym_2_3847
+.globl sym_2_3848
+sym_2_3848: la $2, sym_2_3848
+.globl sym_2_3849
+sym_2_3849: la $2, sym_2_3849
+.globl sym_2_3850
+sym_2_3850: la $2, sym_2_3850
+.globl sym_2_3851
+sym_2_3851: la $2, sym_2_3851
+.globl sym_2_3852
+sym_2_3852: la $2, sym_2_3852
+.globl sym_2_3853
+sym_2_3853: la $2, sym_2_3853
+.globl sym_2_3854
+sym_2_3854: la $2, sym_2_3854
+.globl sym_2_3855
+sym_2_3855: la $2, sym_2_3855
+.globl sym_2_3856
+sym_2_3856: la $2, sym_2_3856
+.globl sym_2_3857
+sym_2_3857: la $2, sym_2_3857
+.globl sym_2_3858
+sym_2_3858: la $2, sym_2_3858
+.globl sym_2_3859
+sym_2_3859: la $2, sym_2_3859
+.globl sym_2_3860
+sym_2_3860: la $2, sym_2_3860
+.globl sym_2_3861
+sym_2_3861: la $2, sym_2_3861
+.globl sym_2_3862
+sym_2_3862: la $2, sym_2_3862
+.globl sym_2_3863
+sym_2_3863: la $2, sym_2_3863
+.globl sym_2_3864
+sym_2_3864: la $2, sym_2_3864
+.globl sym_2_3865
+sym_2_3865: la $2, sym_2_3865
+.globl sym_2_3866
+sym_2_3866: la $2, sym_2_3866
+.globl sym_2_3867
+sym_2_3867: la $2, sym_2_3867
+.globl sym_2_3868
+sym_2_3868: la $2, sym_2_3868
+.globl sym_2_3869
+sym_2_3869: la $2, sym_2_3869
+.globl sym_2_3870
+sym_2_3870: la $2, sym_2_3870
+.globl sym_2_3871
+sym_2_3871: la $2, sym_2_3871
+.globl sym_2_3872
+sym_2_3872: la $2, sym_2_3872
+.globl sym_2_3873
+sym_2_3873: la $2, sym_2_3873
+.globl sym_2_3874
+sym_2_3874: la $2, sym_2_3874
+.globl sym_2_3875
+sym_2_3875: la $2, sym_2_3875
+.globl sym_2_3876
+sym_2_3876: la $2, sym_2_3876
+.globl sym_2_3877
+sym_2_3877: la $2, sym_2_3877
+.globl sym_2_3878
+sym_2_3878: la $2, sym_2_3878
+.globl sym_2_3879
+sym_2_3879: la $2, sym_2_3879
+.globl sym_2_3880
+sym_2_3880: la $2, sym_2_3880
+.globl sym_2_3881
+sym_2_3881: la $2, sym_2_3881
+.globl sym_2_3882
+sym_2_3882: la $2, sym_2_3882
+.globl sym_2_3883
+sym_2_3883: la $2, sym_2_3883
+.globl sym_2_3884
+sym_2_3884: la $2, sym_2_3884
+.globl sym_2_3885
+sym_2_3885: la $2, sym_2_3885
+.globl sym_2_3886
+sym_2_3886: la $2, sym_2_3886
+.globl sym_2_3887
+sym_2_3887: la $2, sym_2_3887
+.globl sym_2_3888
+sym_2_3888: la $2, sym_2_3888
+.globl sym_2_3889
+sym_2_3889: la $2, sym_2_3889
+.globl sym_2_3890
+sym_2_3890: la $2, sym_2_3890
+.globl sym_2_3891
+sym_2_3891: la $2, sym_2_3891
+.globl sym_2_3892
+sym_2_3892: la $2, sym_2_3892
+.globl sym_2_3893
+sym_2_3893: la $2, sym_2_3893
+.globl sym_2_3894
+sym_2_3894: la $2, sym_2_3894
+.globl sym_2_3895
+sym_2_3895: la $2, sym_2_3895
+.globl sym_2_3896
+sym_2_3896: la $2, sym_2_3896
+.globl sym_2_3897
+sym_2_3897: la $2, sym_2_3897
+.globl sym_2_3898
+sym_2_3898: la $2, sym_2_3898
+.globl sym_2_3899
+sym_2_3899: la $2, sym_2_3899
+.globl sym_2_3900
+sym_2_3900: la $2, sym_2_3900
+.globl sym_2_3901
+sym_2_3901: la $2, sym_2_3901
+.globl sym_2_3902
+sym_2_3902: la $2, sym_2_3902
+.globl sym_2_3903
+sym_2_3903: la $2, sym_2_3903
+.globl sym_2_3904
+sym_2_3904: la $2, sym_2_3904
+.globl sym_2_3905
+sym_2_3905: la $2, sym_2_3905
+.globl sym_2_3906
+sym_2_3906: la $2, sym_2_3906
+.globl sym_2_3907
+sym_2_3907: la $2, sym_2_3907
+.globl sym_2_3908
+sym_2_3908: la $2, sym_2_3908
+.globl sym_2_3909
+sym_2_3909: la $2, sym_2_3909
+.globl sym_2_3910
+sym_2_3910: la $2, sym_2_3910
+.globl sym_2_3911
+sym_2_3911: la $2, sym_2_3911
+.globl sym_2_3912
+sym_2_3912: la $2, sym_2_3912
+.globl sym_2_3913
+sym_2_3913: la $2, sym_2_3913
+.globl sym_2_3914
+sym_2_3914: la $2, sym_2_3914
+.globl sym_2_3915
+sym_2_3915: la $2, sym_2_3915
+.globl sym_2_3916
+sym_2_3916: la $2, sym_2_3916
+.globl sym_2_3917
+sym_2_3917: la $2, sym_2_3917
+.globl sym_2_3918
+sym_2_3918: la $2, sym_2_3918
+.globl sym_2_3919
+sym_2_3919: la $2, sym_2_3919
+.globl sym_2_3920
+sym_2_3920: la $2, sym_2_3920
+.globl sym_2_3921
+sym_2_3921: la $2, sym_2_3921
+.globl sym_2_3922
+sym_2_3922: la $2, sym_2_3922
+.globl sym_2_3923
+sym_2_3923: la $2, sym_2_3923
+.globl sym_2_3924
+sym_2_3924: la $2, sym_2_3924
+.globl sym_2_3925
+sym_2_3925: la $2, sym_2_3925
+.globl sym_2_3926
+sym_2_3926: la $2, sym_2_3926
+.globl sym_2_3927
+sym_2_3927: la $2, sym_2_3927
+.globl sym_2_3928
+sym_2_3928: la $2, sym_2_3928
+.globl sym_2_3929
+sym_2_3929: la $2, sym_2_3929
+.globl sym_2_3930
+sym_2_3930: la $2, sym_2_3930
+.globl sym_2_3931
+sym_2_3931: la $2, sym_2_3931
+.globl sym_2_3932
+sym_2_3932: la $2, sym_2_3932
+.globl sym_2_3933
+sym_2_3933: la $2, sym_2_3933
+.globl sym_2_3934
+sym_2_3934: la $2, sym_2_3934
+.globl sym_2_3935
+sym_2_3935: la $2, sym_2_3935
+.globl sym_2_3936
+sym_2_3936: la $2, sym_2_3936
+.globl sym_2_3937
+sym_2_3937: la $2, sym_2_3937
+.globl sym_2_3938
+sym_2_3938: la $2, sym_2_3938
+.globl sym_2_3939
+sym_2_3939: la $2, sym_2_3939
+.globl sym_2_3940
+sym_2_3940: la $2, sym_2_3940
+.globl sym_2_3941
+sym_2_3941: la $2, sym_2_3941
+.globl sym_2_3942
+sym_2_3942: la $2, sym_2_3942
+.globl sym_2_3943
+sym_2_3943: la $2, sym_2_3943
+.globl sym_2_3944
+sym_2_3944: la $2, sym_2_3944
+.globl sym_2_3945
+sym_2_3945: la $2, sym_2_3945
+.globl sym_2_3946
+sym_2_3946: la $2, sym_2_3946
+.globl sym_2_3947
+sym_2_3947: la $2, sym_2_3947
+.globl sym_2_3948
+sym_2_3948: la $2, sym_2_3948
+.globl sym_2_3949
+sym_2_3949: la $2, sym_2_3949
+.globl sym_2_3950
+sym_2_3950: la $2, sym_2_3950
+.globl sym_2_3951
+sym_2_3951: la $2, sym_2_3951
+.globl sym_2_3952
+sym_2_3952: la $2, sym_2_3952
+.globl sym_2_3953
+sym_2_3953: la $2, sym_2_3953
+.globl sym_2_3954
+sym_2_3954: la $2, sym_2_3954
+.globl sym_2_3955
+sym_2_3955: la $2, sym_2_3955
+.globl sym_2_3956
+sym_2_3956: la $2, sym_2_3956
+.globl sym_2_3957
+sym_2_3957: la $2, sym_2_3957
+.globl sym_2_3958
+sym_2_3958: la $2, sym_2_3958
+.globl sym_2_3959
+sym_2_3959: la $2, sym_2_3959
+.globl sym_2_3960
+sym_2_3960: la $2, sym_2_3960
+.globl sym_2_3961
+sym_2_3961: la $2, sym_2_3961
+.globl sym_2_3962
+sym_2_3962: la $2, sym_2_3962
+.globl sym_2_3963
+sym_2_3963: la $2, sym_2_3963
+.globl sym_2_3964
+sym_2_3964: la $2, sym_2_3964
+.globl sym_2_3965
+sym_2_3965: la $2, sym_2_3965
+.globl sym_2_3966
+sym_2_3966: la $2, sym_2_3966
+.globl sym_2_3967
+sym_2_3967: la $2, sym_2_3967
+.globl sym_2_3968
+sym_2_3968: la $2, sym_2_3968
+.globl sym_2_3969
+sym_2_3969: la $2, sym_2_3969
+.globl sym_2_3970
+sym_2_3970: la $2, sym_2_3970
+.globl sym_2_3971
+sym_2_3971: la $2, sym_2_3971
+.globl sym_2_3972
+sym_2_3972: la $2, sym_2_3972
+.globl sym_2_3973
+sym_2_3973: la $2, sym_2_3973
+.globl sym_2_3974
+sym_2_3974: la $2, sym_2_3974
+.globl sym_2_3975
+sym_2_3975: la $2, sym_2_3975
+.globl sym_2_3976
+sym_2_3976: la $2, sym_2_3976
+.globl sym_2_3977
+sym_2_3977: la $2, sym_2_3977
+.globl sym_2_3978
+sym_2_3978: la $2, sym_2_3978
+.globl sym_2_3979
+sym_2_3979: la $2, sym_2_3979
+.globl sym_2_3980
+sym_2_3980: la $2, sym_2_3980
+.globl sym_2_3981
+sym_2_3981: la $2, sym_2_3981
+.globl sym_2_3982
+sym_2_3982: la $2, sym_2_3982
+.globl sym_2_3983
+sym_2_3983: la $2, sym_2_3983
+.globl sym_2_3984
+sym_2_3984: la $2, sym_2_3984
+.globl sym_2_3985
+sym_2_3985: la $2, sym_2_3985
+.globl sym_2_3986
+sym_2_3986: la $2, sym_2_3986
+.globl sym_2_3987
+sym_2_3987: la $2, sym_2_3987
+.globl sym_2_3988
+sym_2_3988: la $2, sym_2_3988
+.globl sym_2_3989
+sym_2_3989: la $2, sym_2_3989
+.globl sym_2_3990
+sym_2_3990: la $2, sym_2_3990
+.globl sym_2_3991
+sym_2_3991: la $2, sym_2_3991
+.globl sym_2_3992
+sym_2_3992: la $2, sym_2_3992
+.globl sym_2_3993
+sym_2_3993: la $2, sym_2_3993
+.globl sym_2_3994
+sym_2_3994: la $2, sym_2_3994
+.globl sym_2_3995
+sym_2_3995: la $2, sym_2_3995
+.globl sym_2_3996
+sym_2_3996: la $2, sym_2_3996
+.globl sym_2_3997
+sym_2_3997: la $2, sym_2_3997
+.globl sym_2_3998
+sym_2_3998: la $2, sym_2_3998
+.globl sym_2_3999
+sym_2_3999: la $2, sym_2_3999
+.globl sym_2_4000
+sym_2_4000: la $2, sym_2_4000
+.globl sym_2_4001
+sym_2_4001: la $2, sym_2_4001
+.globl sym_2_4002
+sym_2_4002: la $2, sym_2_4002
+.globl sym_2_4003
+sym_2_4003: la $2, sym_2_4003
+.globl sym_2_4004
+sym_2_4004: la $2, sym_2_4004
+.globl sym_2_4005
+sym_2_4005: la $2, sym_2_4005
+.globl sym_2_4006
+sym_2_4006: la $2, sym_2_4006
+.globl sym_2_4007
+sym_2_4007: la $2, sym_2_4007
+.globl sym_2_4008
+sym_2_4008: la $2, sym_2_4008
+.globl sym_2_4009
+sym_2_4009: la $2, sym_2_4009
+.globl sym_2_4010
+sym_2_4010: la $2, sym_2_4010
+.globl sym_2_4011
+sym_2_4011: la $2, sym_2_4011
+.globl sym_2_4012
+sym_2_4012: la $2, sym_2_4012
+.globl sym_2_4013
+sym_2_4013: la $2, sym_2_4013
+.globl sym_2_4014
+sym_2_4014: la $2, sym_2_4014
+.globl sym_2_4015
+sym_2_4015: la $2, sym_2_4015
+.globl sym_2_4016
+sym_2_4016: la $2, sym_2_4016
+.globl sym_2_4017
+sym_2_4017: la $2, sym_2_4017
+.globl sym_2_4018
+sym_2_4018: la $2, sym_2_4018
+.globl sym_2_4019
+sym_2_4019: la $2, sym_2_4019
+.globl sym_2_4020
+sym_2_4020: la $2, sym_2_4020
+.globl sym_2_4021
+sym_2_4021: la $2, sym_2_4021
+.globl sym_2_4022
+sym_2_4022: la $2, sym_2_4022
+.globl sym_2_4023
+sym_2_4023: la $2, sym_2_4023
+.globl sym_2_4024
+sym_2_4024: la $2, sym_2_4024
+.globl sym_2_4025
+sym_2_4025: la $2, sym_2_4025
+.globl sym_2_4026
+sym_2_4026: la $2, sym_2_4026
+.globl sym_2_4027
+sym_2_4027: la $2, sym_2_4027
+.globl sym_2_4028
+sym_2_4028: la $2, sym_2_4028
+.globl sym_2_4029
+sym_2_4029: la $2, sym_2_4029
+.globl sym_2_4030
+sym_2_4030: la $2, sym_2_4030
+.globl sym_2_4031
+sym_2_4031: la $2, sym_2_4031
+.globl sym_2_4032
+sym_2_4032: la $2, sym_2_4032
+.globl sym_2_4033
+sym_2_4033: la $2, sym_2_4033
+.globl sym_2_4034
+sym_2_4034: la $2, sym_2_4034
+.globl sym_2_4035
+sym_2_4035: la $2, sym_2_4035
+.globl sym_2_4036
+sym_2_4036: la $2, sym_2_4036
+.globl sym_2_4037
+sym_2_4037: la $2, sym_2_4037
+.globl sym_2_4038
+sym_2_4038: la $2, sym_2_4038
+.globl sym_2_4039
+sym_2_4039: la $2, sym_2_4039
+.globl sym_2_4040
+sym_2_4040: la $2, sym_2_4040
+.globl sym_2_4041
+sym_2_4041: la $2, sym_2_4041
+.globl sym_2_4042
+sym_2_4042: la $2, sym_2_4042
+.globl sym_2_4043
+sym_2_4043: la $2, sym_2_4043
+.globl sym_2_4044
+sym_2_4044: la $2, sym_2_4044
+.globl sym_2_4045
+sym_2_4045: la $2, sym_2_4045
+.globl sym_2_4046
+sym_2_4046: la $2, sym_2_4046
+.globl sym_2_4047
+sym_2_4047: la $2, sym_2_4047
+.globl sym_2_4048
+sym_2_4048: la $2, sym_2_4048
+.globl sym_2_4049
+sym_2_4049: la $2, sym_2_4049
+.globl sym_2_4050
+sym_2_4050: la $2, sym_2_4050
+.globl sym_2_4051
+sym_2_4051: la $2, sym_2_4051
+.globl sym_2_4052
+sym_2_4052: la $2, sym_2_4052
+.globl sym_2_4053
+sym_2_4053: la $2, sym_2_4053
+.globl sym_2_4054
+sym_2_4054: la $2, sym_2_4054
+.globl sym_2_4055
+sym_2_4055: la $2, sym_2_4055
+.globl sym_2_4056
+sym_2_4056: la $2, sym_2_4056
+.globl sym_2_4057
+sym_2_4057: la $2, sym_2_4057
+.globl sym_2_4058
+sym_2_4058: la $2, sym_2_4058
+.globl sym_2_4059
+sym_2_4059: la $2, sym_2_4059
+.globl sym_2_4060
+sym_2_4060: la $2, sym_2_4060
+.globl sym_2_4061
+sym_2_4061: la $2, sym_2_4061
+.globl sym_2_4062
+sym_2_4062: la $2, sym_2_4062
+.globl sym_2_4063
+sym_2_4063: la $2, sym_2_4063
+.globl sym_2_4064
+sym_2_4064: la $2, sym_2_4064
+.globl sym_2_4065
+sym_2_4065: la $2, sym_2_4065
+.globl sym_2_4066
+sym_2_4066: la $2, sym_2_4066
+.globl sym_2_4067
+sym_2_4067: la $2, sym_2_4067
+.globl sym_2_4068
+sym_2_4068: la $2, sym_2_4068
+.globl sym_2_4069
+sym_2_4069: la $2, sym_2_4069
+.globl sym_2_4070
+sym_2_4070: la $2, sym_2_4070
+.globl sym_2_4071
+sym_2_4071: la $2, sym_2_4071
+.globl sym_2_4072
+sym_2_4072: la $2, sym_2_4072
+.globl sym_2_4073
+sym_2_4073: la $2, sym_2_4073
+.globl sym_2_4074
+sym_2_4074: la $2, sym_2_4074
+.globl sym_2_4075
+sym_2_4075: la $2, sym_2_4075
+.globl sym_2_4076
+sym_2_4076: la $2, sym_2_4076
+.globl sym_2_4077
+sym_2_4077: la $2, sym_2_4077
+.globl sym_2_4078
+sym_2_4078: la $2, sym_2_4078
+.globl sym_2_4079
+sym_2_4079: la $2, sym_2_4079
+.globl sym_2_4080
+sym_2_4080: la $2, sym_2_4080
+.globl sym_2_4081
+sym_2_4081: la $2, sym_2_4081
+.globl sym_2_4082
+sym_2_4082: la $2, sym_2_4082
+.globl sym_2_4083
+sym_2_4083: la $2, sym_2_4083
+.globl sym_2_4084
+sym_2_4084: la $2, sym_2_4084
+.globl sym_2_4085
+sym_2_4085: la $2, sym_2_4085
+.globl sym_2_4086
+sym_2_4086: la $2, sym_2_4086
+.globl sym_2_4087
+sym_2_4087: la $2, sym_2_4087
+.globl sym_2_4088
+sym_2_4088: la $2, sym_2_4088
+.globl sym_2_4089
+sym_2_4089: la $2, sym_2_4089
+.globl sym_2_4090
+sym_2_4090: la $2, sym_2_4090
+.globl sym_2_4091
+sym_2_4091: la $2, sym_2_4091
+.globl sym_2_4092
+sym_2_4092: la $2, sym_2_4092
+.globl sym_2_4093
+sym_2_4093: la $2, sym_2_4093
+.globl sym_2_4094
+sym_2_4094: la $2, sym_2_4094
+.globl sym_2_4095
+sym_2_4095: la $2, sym_2_4095
+.globl sym_2_4096
+sym_2_4096: la $2, sym_2_4096
+.globl sym_2_4097
+sym_2_4097: la $2, sym_2_4097
+.globl sym_2_4098
+sym_2_4098: la $2, sym_2_4098
+.globl sym_2_4099
+sym_2_4099: la $2, sym_2_4099
+.globl sym_2_4100
+sym_2_4100: la $2, sym_2_4100
+.globl sym_2_4101
+sym_2_4101: la $2, sym_2_4101
+.globl sym_2_4102
+sym_2_4102: la $2, sym_2_4102
+.globl sym_2_4103
+sym_2_4103: la $2, sym_2_4103
+.globl sym_2_4104
+sym_2_4104: la $2, sym_2_4104
+.globl sym_2_4105
+sym_2_4105: la $2, sym_2_4105
+.globl sym_2_4106
+sym_2_4106: la $2, sym_2_4106
+.globl sym_2_4107
+sym_2_4107: la $2, sym_2_4107
+.globl sym_2_4108
+sym_2_4108: la $2, sym_2_4108
+.globl sym_2_4109
+sym_2_4109: la $2, sym_2_4109
+.globl sym_2_4110
+sym_2_4110: la $2, sym_2_4110
+.globl sym_2_4111
+sym_2_4111: la $2, sym_2_4111
+.globl sym_2_4112
+sym_2_4112: la $2, sym_2_4112
+.globl sym_2_4113
+sym_2_4113: la $2, sym_2_4113
+.globl sym_2_4114
+sym_2_4114: la $2, sym_2_4114
+.globl sym_2_4115
+sym_2_4115: la $2, sym_2_4115
+.globl sym_2_4116
+sym_2_4116: la $2, sym_2_4116
+.globl sym_2_4117
+sym_2_4117: la $2, sym_2_4117
+.globl sym_2_4118
+sym_2_4118: la $2, sym_2_4118
+.globl sym_2_4119
+sym_2_4119: la $2, sym_2_4119
+.globl sym_2_4120
+sym_2_4120: la $2, sym_2_4120
+.globl sym_2_4121
+sym_2_4121: la $2, sym_2_4121
+.globl sym_2_4122
+sym_2_4122: la $2, sym_2_4122
+.globl sym_2_4123
+sym_2_4123: la $2, sym_2_4123
+.globl sym_2_4124
+sym_2_4124: la $2, sym_2_4124
+.globl sym_2_4125
+sym_2_4125: la $2, sym_2_4125
+.globl sym_2_4126
+sym_2_4126: la $2, sym_2_4126
+.globl sym_2_4127
+sym_2_4127: la $2, sym_2_4127
+.globl sym_2_4128
+sym_2_4128: la $2, sym_2_4128
+.globl sym_2_4129
+sym_2_4129: la $2, sym_2_4129
+.globl sym_2_4130
+sym_2_4130: la $2, sym_2_4130
+.globl sym_2_4131
+sym_2_4131: la $2, sym_2_4131
+.globl sym_2_4132
+sym_2_4132: la $2, sym_2_4132
+.globl sym_2_4133
+sym_2_4133: la $2, sym_2_4133
+.globl sym_2_4134
+sym_2_4134: la $2, sym_2_4134
+.globl sym_2_4135
+sym_2_4135: la $2, sym_2_4135
+.globl sym_2_4136
+sym_2_4136: la $2, sym_2_4136
+.globl sym_2_4137
+sym_2_4137: la $2, sym_2_4137
+.globl sym_2_4138
+sym_2_4138: la $2, sym_2_4138
+.globl sym_2_4139
+sym_2_4139: la $2, sym_2_4139
+.globl sym_2_4140
+sym_2_4140: la $2, sym_2_4140
+.globl sym_2_4141
+sym_2_4141: la $2, sym_2_4141
+.globl sym_2_4142
+sym_2_4142: la $2, sym_2_4142
+.globl sym_2_4143
+sym_2_4143: la $2, sym_2_4143
+.globl sym_2_4144
+sym_2_4144: la $2, sym_2_4144
+.globl sym_2_4145
+sym_2_4145: la $2, sym_2_4145
+.globl sym_2_4146
+sym_2_4146: la $2, sym_2_4146
+.globl sym_2_4147
+sym_2_4147: la $2, sym_2_4147
+.globl sym_2_4148
+sym_2_4148: la $2, sym_2_4148
+.globl sym_2_4149
+sym_2_4149: la $2, sym_2_4149
+.globl sym_2_4150
+sym_2_4150: la $2, sym_2_4150
+.globl sym_2_4151
+sym_2_4151: la $2, sym_2_4151
+.globl sym_2_4152
+sym_2_4152: la $2, sym_2_4152
+.globl sym_2_4153
+sym_2_4153: la $2, sym_2_4153
+.globl sym_2_4154
+sym_2_4154: la $2, sym_2_4154
+.globl sym_2_4155
+sym_2_4155: la $2, sym_2_4155
+.globl sym_2_4156
+sym_2_4156: la $2, sym_2_4156
+.globl sym_2_4157
+sym_2_4157: la $2, sym_2_4157
+.globl sym_2_4158
+sym_2_4158: la $2, sym_2_4158
+.globl sym_2_4159
+sym_2_4159: la $2, sym_2_4159
+.globl sym_2_4160
+sym_2_4160: la $2, sym_2_4160
+.globl sym_2_4161
+sym_2_4161: la $2, sym_2_4161
+.globl sym_2_4162
+sym_2_4162: la $2, sym_2_4162
+.globl sym_2_4163
+sym_2_4163: la $2, sym_2_4163
+.globl sym_2_4164
+sym_2_4164: la $2, sym_2_4164
+.globl sym_2_4165
+sym_2_4165: la $2, sym_2_4165
+.globl sym_2_4166
+sym_2_4166: la $2, sym_2_4166
+.globl sym_2_4167
+sym_2_4167: la $2, sym_2_4167
+.globl sym_2_4168
+sym_2_4168: la $2, sym_2_4168
+.globl sym_2_4169
+sym_2_4169: la $2, sym_2_4169
+.globl sym_2_4170
+sym_2_4170: la $2, sym_2_4170
+.globl sym_2_4171
+sym_2_4171: la $2, sym_2_4171
+.globl sym_2_4172
+sym_2_4172: la $2, sym_2_4172
+.globl sym_2_4173
+sym_2_4173: la $2, sym_2_4173
+.globl sym_2_4174
+sym_2_4174: la $2, sym_2_4174
+.globl sym_2_4175
+sym_2_4175: la $2, sym_2_4175
+.globl sym_2_4176
+sym_2_4176: la $2, sym_2_4176
+.globl sym_2_4177
+sym_2_4177: la $2, sym_2_4177
+.globl sym_2_4178
+sym_2_4178: la $2, sym_2_4178
+.globl sym_2_4179
+sym_2_4179: la $2, sym_2_4179
+.globl sym_2_4180
+sym_2_4180: la $2, sym_2_4180
+.globl sym_2_4181
+sym_2_4181: la $2, sym_2_4181
+.globl sym_2_4182
+sym_2_4182: la $2, sym_2_4182
+.globl sym_2_4183
+sym_2_4183: la $2, sym_2_4183
+.globl sym_2_4184
+sym_2_4184: la $2, sym_2_4184
+.globl sym_2_4185
+sym_2_4185: la $2, sym_2_4185
+.globl sym_2_4186
+sym_2_4186: la $2, sym_2_4186
+.globl sym_2_4187
+sym_2_4187: la $2, sym_2_4187
+.globl sym_2_4188
+sym_2_4188: la $2, sym_2_4188
+.globl sym_2_4189
+sym_2_4189: la $2, sym_2_4189
+.globl sym_2_4190
+sym_2_4190: la $2, sym_2_4190
+.globl sym_2_4191
+sym_2_4191: la $2, sym_2_4191
+.globl sym_2_4192
+sym_2_4192: la $2, sym_2_4192
+.globl sym_2_4193
+sym_2_4193: la $2, sym_2_4193
+.globl sym_2_4194
+sym_2_4194: la $2, sym_2_4194
+.globl sym_2_4195
+sym_2_4195: la $2, sym_2_4195
+.globl sym_2_4196
+sym_2_4196: la $2, sym_2_4196
+.globl sym_2_4197
+sym_2_4197: la $2, sym_2_4197
+.globl sym_2_4198
+sym_2_4198: la $2, sym_2_4198
+.globl sym_2_4199
+sym_2_4199: la $2, sym_2_4199
+.globl sym_2_4200
+sym_2_4200: la $2, sym_2_4200
+.globl sym_2_4201
+sym_2_4201: la $2, sym_2_4201
+.globl sym_2_4202
+sym_2_4202: la $2, sym_2_4202
+.globl sym_2_4203
+sym_2_4203: la $2, sym_2_4203
+.globl sym_2_4204
+sym_2_4204: la $2, sym_2_4204
+.globl sym_2_4205
+sym_2_4205: la $2, sym_2_4205
+.globl sym_2_4206
+sym_2_4206: la $2, sym_2_4206
+.globl sym_2_4207
+sym_2_4207: la $2, sym_2_4207
+.globl sym_2_4208
+sym_2_4208: la $2, sym_2_4208
+.globl sym_2_4209
+sym_2_4209: la $2, sym_2_4209
+.globl sym_2_4210
+sym_2_4210: la $2, sym_2_4210
+.globl sym_2_4211
+sym_2_4211: la $2, sym_2_4211
+.globl sym_2_4212
+sym_2_4212: la $2, sym_2_4212
+.globl sym_2_4213
+sym_2_4213: la $2, sym_2_4213
+.globl sym_2_4214
+sym_2_4214: la $2, sym_2_4214
+.globl sym_2_4215
+sym_2_4215: la $2, sym_2_4215
+.globl sym_2_4216
+sym_2_4216: la $2, sym_2_4216
+.globl sym_2_4217
+sym_2_4217: la $2, sym_2_4217
+.globl sym_2_4218
+sym_2_4218: la $2, sym_2_4218
+.globl sym_2_4219
+sym_2_4219: la $2, sym_2_4219
+.globl sym_2_4220
+sym_2_4220: la $2, sym_2_4220
+.globl sym_2_4221
+sym_2_4221: la $2, sym_2_4221
+.globl sym_2_4222
+sym_2_4222: la $2, sym_2_4222
+.globl sym_2_4223
+sym_2_4223: la $2, sym_2_4223
+.globl sym_2_4224
+sym_2_4224: la $2, sym_2_4224
+.globl sym_2_4225
+sym_2_4225: la $2, sym_2_4225
+.globl sym_2_4226
+sym_2_4226: la $2, sym_2_4226
+.globl sym_2_4227
+sym_2_4227: la $2, sym_2_4227
+.globl sym_2_4228
+sym_2_4228: la $2, sym_2_4228
+.globl sym_2_4229
+sym_2_4229: la $2, sym_2_4229
+.globl sym_2_4230
+sym_2_4230: la $2, sym_2_4230
+.globl sym_2_4231
+sym_2_4231: la $2, sym_2_4231
+.globl sym_2_4232
+sym_2_4232: la $2, sym_2_4232
+.globl sym_2_4233
+sym_2_4233: la $2, sym_2_4233
+.globl sym_2_4234
+sym_2_4234: la $2, sym_2_4234
+.globl sym_2_4235
+sym_2_4235: la $2, sym_2_4235
+.globl sym_2_4236
+sym_2_4236: la $2, sym_2_4236
+.globl sym_2_4237
+sym_2_4237: la $2, sym_2_4237
+.globl sym_2_4238
+sym_2_4238: la $2, sym_2_4238
+.globl sym_2_4239
+sym_2_4239: la $2, sym_2_4239
+.globl sym_2_4240
+sym_2_4240: la $2, sym_2_4240
+.globl sym_2_4241
+sym_2_4241: la $2, sym_2_4241
+.globl sym_2_4242
+sym_2_4242: la $2, sym_2_4242
+.globl sym_2_4243
+sym_2_4243: la $2, sym_2_4243
+.globl sym_2_4244
+sym_2_4244: la $2, sym_2_4244
+.globl sym_2_4245
+sym_2_4245: la $2, sym_2_4245
+.globl sym_2_4246
+sym_2_4246: la $2, sym_2_4246
+.globl sym_2_4247
+sym_2_4247: la $2, sym_2_4247
+.globl sym_2_4248
+sym_2_4248: la $2, sym_2_4248
+.globl sym_2_4249
+sym_2_4249: la $2, sym_2_4249
+.globl sym_2_4250
+sym_2_4250: la $2, sym_2_4250
+.globl sym_2_4251
+sym_2_4251: la $2, sym_2_4251
+.globl sym_2_4252
+sym_2_4252: la $2, sym_2_4252
+.globl sym_2_4253
+sym_2_4253: la $2, sym_2_4253
+.globl sym_2_4254
+sym_2_4254: la $2, sym_2_4254
+.globl sym_2_4255
+sym_2_4255: la $2, sym_2_4255
+.globl sym_2_4256
+sym_2_4256: la $2, sym_2_4256
+.globl sym_2_4257
+sym_2_4257: la $2, sym_2_4257
+.globl sym_2_4258
+sym_2_4258: la $2, sym_2_4258
+.globl sym_2_4259
+sym_2_4259: la $2, sym_2_4259
+.globl sym_2_4260
+sym_2_4260: la $2, sym_2_4260
+.globl sym_2_4261
+sym_2_4261: la $2, sym_2_4261
+.globl sym_2_4262
+sym_2_4262: la $2, sym_2_4262
+.globl sym_2_4263
+sym_2_4263: la $2, sym_2_4263
+.globl sym_2_4264
+sym_2_4264: la $2, sym_2_4264
+.globl sym_2_4265
+sym_2_4265: la $2, sym_2_4265
+.globl sym_2_4266
+sym_2_4266: la $2, sym_2_4266
+.globl sym_2_4267
+sym_2_4267: la $2, sym_2_4267
+.globl sym_2_4268
+sym_2_4268: la $2, sym_2_4268
+.globl sym_2_4269
+sym_2_4269: la $2, sym_2_4269
+.globl sym_2_4270
+sym_2_4270: la $2, sym_2_4270
+.globl sym_2_4271
+sym_2_4271: la $2, sym_2_4271
+.globl sym_2_4272
+sym_2_4272: la $2, sym_2_4272
+.globl sym_2_4273
+sym_2_4273: la $2, sym_2_4273
+.globl sym_2_4274
+sym_2_4274: la $2, sym_2_4274
+.globl sym_2_4275
+sym_2_4275: la $2, sym_2_4275
+.globl sym_2_4276
+sym_2_4276: la $2, sym_2_4276
+.globl sym_2_4277
+sym_2_4277: la $2, sym_2_4277
+.globl sym_2_4278
+sym_2_4278: la $2, sym_2_4278
+.globl sym_2_4279
+sym_2_4279: la $2, sym_2_4279
+.globl sym_2_4280
+sym_2_4280: la $2, sym_2_4280
+.globl sym_2_4281
+sym_2_4281: la $2, sym_2_4281
+.globl sym_2_4282
+sym_2_4282: la $2, sym_2_4282
+.globl sym_2_4283
+sym_2_4283: la $2, sym_2_4283
+.globl sym_2_4284
+sym_2_4284: la $2, sym_2_4284
+.globl sym_2_4285
+sym_2_4285: la $2, sym_2_4285
+.globl sym_2_4286
+sym_2_4286: la $2, sym_2_4286
+.globl sym_2_4287
+sym_2_4287: la $2, sym_2_4287
+.globl sym_2_4288
+sym_2_4288: la $2, sym_2_4288
+.globl sym_2_4289
+sym_2_4289: la $2, sym_2_4289
+.globl sym_2_4290
+sym_2_4290: la $2, sym_2_4290
+.globl sym_2_4291
+sym_2_4291: la $2, sym_2_4291
+.globl sym_2_4292
+sym_2_4292: la $2, sym_2_4292
+.globl sym_2_4293
+sym_2_4293: la $2, sym_2_4293
+.globl sym_2_4294
+sym_2_4294: la $2, sym_2_4294
+.globl sym_2_4295
+sym_2_4295: la $2, sym_2_4295
+.globl sym_2_4296
+sym_2_4296: la $2, sym_2_4296
+.globl sym_2_4297
+sym_2_4297: la $2, sym_2_4297
+.globl sym_2_4298
+sym_2_4298: la $2, sym_2_4298
+.globl sym_2_4299
+sym_2_4299: la $2, sym_2_4299
+.globl sym_2_4300
+sym_2_4300: la $2, sym_2_4300
+.globl sym_2_4301
+sym_2_4301: la $2, sym_2_4301
+.globl sym_2_4302
+sym_2_4302: la $2, sym_2_4302
+.globl sym_2_4303
+sym_2_4303: la $2, sym_2_4303
+.globl sym_2_4304
+sym_2_4304: la $2, sym_2_4304
+.globl sym_2_4305
+sym_2_4305: la $2, sym_2_4305
+.globl sym_2_4306
+sym_2_4306: la $2, sym_2_4306
+.globl sym_2_4307
+sym_2_4307: la $2, sym_2_4307
+.globl sym_2_4308
+sym_2_4308: la $2, sym_2_4308
+.globl sym_2_4309
+sym_2_4309: la $2, sym_2_4309
+.globl sym_2_4310
+sym_2_4310: la $2, sym_2_4310
+.globl sym_2_4311
+sym_2_4311: la $2, sym_2_4311
+.globl sym_2_4312
+sym_2_4312: la $2, sym_2_4312
+.globl sym_2_4313
+sym_2_4313: la $2, sym_2_4313
+.globl sym_2_4314
+sym_2_4314: la $2, sym_2_4314
+.globl sym_2_4315
+sym_2_4315: la $2, sym_2_4315
+.globl sym_2_4316
+sym_2_4316: la $2, sym_2_4316
+.globl sym_2_4317
+sym_2_4317: la $2, sym_2_4317
+.globl sym_2_4318
+sym_2_4318: la $2, sym_2_4318
+.globl sym_2_4319
+sym_2_4319: la $2, sym_2_4319
+.globl sym_2_4320
+sym_2_4320: la $2, sym_2_4320
+.globl sym_2_4321
+sym_2_4321: la $2, sym_2_4321
+.globl sym_2_4322
+sym_2_4322: la $2, sym_2_4322
+.globl sym_2_4323
+sym_2_4323: la $2, sym_2_4323
+.globl sym_2_4324
+sym_2_4324: la $2, sym_2_4324
+.globl sym_2_4325
+sym_2_4325: la $2, sym_2_4325
+.globl sym_2_4326
+sym_2_4326: la $2, sym_2_4326
+.globl sym_2_4327
+sym_2_4327: la $2, sym_2_4327
+.globl sym_2_4328
+sym_2_4328: la $2, sym_2_4328
+.globl sym_2_4329
+sym_2_4329: la $2, sym_2_4329
+.globl sym_2_4330
+sym_2_4330: la $2, sym_2_4330
+.globl sym_2_4331
+sym_2_4331: la $2, sym_2_4331
+.globl sym_2_4332
+sym_2_4332: la $2, sym_2_4332
+.globl sym_2_4333
+sym_2_4333: la $2, sym_2_4333
+.globl sym_2_4334
+sym_2_4334: la $2, sym_2_4334
+.globl sym_2_4335
+sym_2_4335: la $2, sym_2_4335
+.globl sym_2_4336
+sym_2_4336: la $2, sym_2_4336
+.globl sym_2_4337
+sym_2_4337: la $2, sym_2_4337
+.globl sym_2_4338
+sym_2_4338: la $2, sym_2_4338
+.globl sym_2_4339
+sym_2_4339: la $2, sym_2_4339
+.globl sym_2_4340
+sym_2_4340: la $2, sym_2_4340
+.globl sym_2_4341
+sym_2_4341: la $2, sym_2_4341
+.globl sym_2_4342
+sym_2_4342: la $2, sym_2_4342
+.globl sym_2_4343
+sym_2_4343: la $2, sym_2_4343
+.globl sym_2_4344
+sym_2_4344: la $2, sym_2_4344
+.globl sym_2_4345
+sym_2_4345: la $2, sym_2_4345
+.globl sym_2_4346
+sym_2_4346: la $2, sym_2_4346
+.globl sym_2_4347
+sym_2_4347: la $2, sym_2_4347
+.globl sym_2_4348
+sym_2_4348: la $2, sym_2_4348
+.globl sym_2_4349
+sym_2_4349: la $2, sym_2_4349
+.globl sym_2_4350
+sym_2_4350: la $2, sym_2_4350
+.globl sym_2_4351
+sym_2_4351: la $2, sym_2_4351
+.globl sym_2_4352
+sym_2_4352: la $2, sym_2_4352
+.globl sym_2_4353
+sym_2_4353: la $2, sym_2_4353
+.globl sym_2_4354
+sym_2_4354: la $2, sym_2_4354
+.globl sym_2_4355
+sym_2_4355: la $2, sym_2_4355
+.globl sym_2_4356
+sym_2_4356: la $2, sym_2_4356
+.globl sym_2_4357
+sym_2_4357: la $2, sym_2_4357
+.globl sym_2_4358
+sym_2_4358: la $2, sym_2_4358
+.globl sym_2_4359
+sym_2_4359: la $2, sym_2_4359
+.globl sym_2_4360
+sym_2_4360: la $2, sym_2_4360
+.globl sym_2_4361
+sym_2_4361: la $2, sym_2_4361
+.globl sym_2_4362
+sym_2_4362: la $2, sym_2_4362
+.globl sym_2_4363
+sym_2_4363: la $2, sym_2_4363
+.globl sym_2_4364
+sym_2_4364: la $2, sym_2_4364
+.globl sym_2_4365
+sym_2_4365: la $2, sym_2_4365
+.globl sym_2_4366
+sym_2_4366: la $2, sym_2_4366
+.globl sym_2_4367
+sym_2_4367: la $2, sym_2_4367
+.globl sym_2_4368
+sym_2_4368: la $2, sym_2_4368
+.globl sym_2_4369
+sym_2_4369: la $2, sym_2_4369
+.globl sym_2_4370
+sym_2_4370: la $2, sym_2_4370
+.globl sym_2_4371
+sym_2_4371: la $2, sym_2_4371
+.globl sym_2_4372
+sym_2_4372: la $2, sym_2_4372
+.globl sym_2_4373
+sym_2_4373: la $2, sym_2_4373
+.globl sym_2_4374
+sym_2_4374: la $2, sym_2_4374
+.globl sym_2_4375
+sym_2_4375: la $2, sym_2_4375
+.globl sym_2_4376
+sym_2_4376: la $2, sym_2_4376
+.globl sym_2_4377
+sym_2_4377: la $2, sym_2_4377
+.globl sym_2_4378
+sym_2_4378: la $2, sym_2_4378
+.globl sym_2_4379
+sym_2_4379: la $2, sym_2_4379
+.globl sym_2_4380
+sym_2_4380: la $2, sym_2_4380
+.globl sym_2_4381
+sym_2_4381: la $2, sym_2_4381
+.globl sym_2_4382
+sym_2_4382: la $2, sym_2_4382
+.globl sym_2_4383
+sym_2_4383: la $2, sym_2_4383
+.globl sym_2_4384
+sym_2_4384: la $2, sym_2_4384
+.globl sym_2_4385
+sym_2_4385: la $2, sym_2_4385
+.globl sym_2_4386
+sym_2_4386: la $2, sym_2_4386
+.globl sym_2_4387
+sym_2_4387: la $2, sym_2_4387
+.globl sym_2_4388
+sym_2_4388: la $2, sym_2_4388
+.globl sym_2_4389
+sym_2_4389: la $2, sym_2_4389
+.globl sym_2_4390
+sym_2_4390: la $2, sym_2_4390
+.globl sym_2_4391
+sym_2_4391: la $2, sym_2_4391
+.globl sym_2_4392
+sym_2_4392: la $2, sym_2_4392
+.globl sym_2_4393
+sym_2_4393: la $2, sym_2_4393
+.globl sym_2_4394
+sym_2_4394: la $2, sym_2_4394
+.globl sym_2_4395
+sym_2_4395: la $2, sym_2_4395
+.globl sym_2_4396
+sym_2_4396: la $2, sym_2_4396
+.globl sym_2_4397
+sym_2_4397: la $2, sym_2_4397
+.globl sym_2_4398
+sym_2_4398: la $2, sym_2_4398
+.globl sym_2_4399
+sym_2_4399: la $2, sym_2_4399
+.globl sym_2_4400
+sym_2_4400: la $2, sym_2_4400
+.globl sym_2_4401
+sym_2_4401: la $2, sym_2_4401
+.globl sym_2_4402
+sym_2_4402: la $2, sym_2_4402
+.globl sym_2_4403
+sym_2_4403: la $2, sym_2_4403
+.globl sym_2_4404
+sym_2_4404: la $2, sym_2_4404
+.globl sym_2_4405
+sym_2_4405: la $2, sym_2_4405
+.globl sym_2_4406
+sym_2_4406: la $2, sym_2_4406
+.globl sym_2_4407
+sym_2_4407: la $2, sym_2_4407
+.globl sym_2_4408
+sym_2_4408: la $2, sym_2_4408
+.globl sym_2_4409
+sym_2_4409: la $2, sym_2_4409
+.globl sym_2_4410
+sym_2_4410: la $2, sym_2_4410
+.globl sym_2_4411
+sym_2_4411: la $2, sym_2_4411
+.globl sym_2_4412
+sym_2_4412: la $2, sym_2_4412
+.globl sym_2_4413
+sym_2_4413: la $2, sym_2_4413
+.globl sym_2_4414
+sym_2_4414: la $2, sym_2_4414
+.globl sym_2_4415
+sym_2_4415: la $2, sym_2_4415
+.globl sym_2_4416
+sym_2_4416: la $2, sym_2_4416
+.globl sym_2_4417
+sym_2_4417: la $2, sym_2_4417
+.globl sym_2_4418
+sym_2_4418: la $2, sym_2_4418
+.globl sym_2_4419
+sym_2_4419: la $2, sym_2_4419
+.globl sym_2_4420
+sym_2_4420: la $2, sym_2_4420
+.globl sym_2_4421
+sym_2_4421: la $2, sym_2_4421
+.globl sym_2_4422
+sym_2_4422: la $2, sym_2_4422
+.globl sym_2_4423
+sym_2_4423: la $2, sym_2_4423
+.globl sym_2_4424
+sym_2_4424: la $2, sym_2_4424
+.globl sym_2_4425
+sym_2_4425: la $2, sym_2_4425
+.globl sym_2_4426
+sym_2_4426: la $2, sym_2_4426
+.globl sym_2_4427
+sym_2_4427: la $2, sym_2_4427
+.globl sym_2_4428
+sym_2_4428: la $2, sym_2_4428
+.globl sym_2_4429
+sym_2_4429: la $2, sym_2_4429
+.globl sym_2_4430
+sym_2_4430: la $2, sym_2_4430
+.globl sym_2_4431
+sym_2_4431: la $2, sym_2_4431
+.globl sym_2_4432
+sym_2_4432: la $2, sym_2_4432
+.globl sym_2_4433
+sym_2_4433: la $2, sym_2_4433
+.globl sym_2_4434
+sym_2_4434: la $2, sym_2_4434
+.globl sym_2_4435
+sym_2_4435: la $2, sym_2_4435
+.globl sym_2_4436
+sym_2_4436: la $2, sym_2_4436
+.globl sym_2_4437
+sym_2_4437: la $2, sym_2_4437
+.globl sym_2_4438
+sym_2_4438: la $2, sym_2_4438
+.globl sym_2_4439
+sym_2_4439: la $2, sym_2_4439
+.globl sym_2_4440
+sym_2_4440: la $2, sym_2_4440
+.globl sym_2_4441
+sym_2_4441: la $2, sym_2_4441
+.globl sym_2_4442
+sym_2_4442: la $2, sym_2_4442
+.globl sym_2_4443
+sym_2_4443: la $2, sym_2_4443
+.globl sym_2_4444
+sym_2_4444: la $2, sym_2_4444
+.globl sym_2_4445
+sym_2_4445: la $2, sym_2_4445
+.globl sym_2_4446
+sym_2_4446: la $2, sym_2_4446
+.globl sym_2_4447
+sym_2_4447: la $2, sym_2_4447
+.globl sym_2_4448
+sym_2_4448: la $2, sym_2_4448
+.globl sym_2_4449
+sym_2_4449: la $2, sym_2_4449
+.globl sym_2_4450
+sym_2_4450: la $2, sym_2_4450
+.globl sym_2_4451
+sym_2_4451: la $2, sym_2_4451
+.globl sym_2_4452
+sym_2_4452: la $2, sym_2_4452
+.globl sym_2_4453
+sym_2_4453: la $2, sym_2_4453
+.globl sym_2_4454
+sym_2_4454: la $2, sym_2_4454
+.globl sym_2_4455
+sym_2_4455: la $2, sym_2_4455
+.globl sym_2_4456
+sym_2_4456: la $2, sym_2_4456
+.globl sym_2_4457
+sym_2_4457: la $2, sym_2_4457
+.globl sym_2_4458
+sym_2_4458: la $2, sym_2_4458
+.globl sym_2_4459
+sym_2_4459: la $2, sym_2_4459
+.globl sym_2_4460
+sym_2_4460: la $2, sym_2_4460
+.globl sym_2_4461
+sym_2_4461: la $2, sym_2_4461
+.globl sym_2_4462
+sym_2_4462: la $2, sym_2_4462
+.globl sym_2_4463
+sym_2_4463: la $2, sym_2_4463
+.globl sym_2_4464
+sym_2_4464: la $2, sym_2_4464
+.globl sym_2_4465
+sym_2_4465: la $2, sym_2_4465
+.globl sym_2_4466
+sym_2_4466: la $2, sym_2_4466
+.globl sym_2_4467
+sym_2_4467: la $2, sym_2_4467
+.globl sym_2_4468
+sym_2_4468: la $2, sym_2_4468
+.globl sym_2_4469
+sym_2_4469: la $2, sym_2_4469
+.globl sym_2_4470
+sym_2_4470: la $2, sym_2_4470
+.globl sym_2_4471
+sym_2_4471: la $2, sym_2_4471
+.globl sym_2_4472
+sym_2_4472: la $2, sym_2_4472
+.globl sym_2_4473
+sym_2_4473: la $2, sym_2_4473
+.globl sym_2_4474
+sym_2_4474: la $2, sym_2_4474
+.globl sym_2_4475
+sym_2_4475: la $2, sym_2_4475
+.globl sym_2_4476
+sym_2_4476: la $2, sym_2_4476
+.globl sym_2_4477
+sym_2_4477: la $2, sym_2_4477
+.globl sym_2_4478
+sym_2_4478: la $2, sym_2_4478
+.globl sym_2_4479
+sym_2_4479: la $2, sym_2_4479
+.globl sym_2_4480
+sym_2_4480: la $2, sym_2_4480
+.globl sym_2_4481
+sym_2_4481: la $2, sym_2_4481
+.globl sym_2_4482
+sym_2_4482: la $2, sym_2_4482
+.globl sym_2_4483
+sym_2_4483: la $2, sym_2_4483
+.globl sym_2_4484
+sym_2_4484: la $2, sym_2_4484
+.globl sym_2_4485
+sym_2_4485: la $2, sym_2_4485
+.globl sym_2_4486
+sym_2_4486: la $2, sym_2_4486
+.globl sym_2_4487
+sym_2_4487: la $2, sym_2_4487
+.globl sym_2_4488
+sym_2_4488: la $2, sym_2_4488
+.globl sym_2_4489
+sym_2_4489: la $2, sym_2_4489
+.globl sym_2_4490
+sym_2_4490: la $2, sym_2_4490
+.globl sym_2_4491
+sym_2_4491: la $2, sym_2_4491
+.globl sym_2_4492
+sym_2_4492: la $2, sym_2_4492
+.globl sym_2_4493
+sym_2_4493: la $2, sym_2_4493
+.globl sym_2_4494
+sym_2_4494: la $2, sym_2_4494
+.globl sym_2_4495
+sym_2_4495: la $2, sym_2_4495
+.globl sym_2_4496
+sym_2_4496: la $2, sym_2_4496
+.globl sym_2_4497
+sym_2_4497: la $2, sym_2_4497
+.globl sym_2_4498
+sym_2_4498: la $2, sym_2_4498
+.globl sym_2_4499
+sym_2_4499: la $2, sym_2_4499
+.globl sym_2_4500
+sym_2_4500: la $2, sym_2_4500
+.globl sym_2_4501
+sym_2_4501: la $2, sym_2_4501
+.globl sym_2_4502
+sym_2_4502: la $2, sym_2_4502
+.globl sym_2_4503
+sym_2_4503: la $2, sym_2_4503
+.globl sym_2_4504
+sym_2_4504: la $2, sym_2_4504
+.globl sym_2_4505
+sym_2_4505: la $2, sym_2_4505
+.globl sym_2_4506
+sym_2_4506: la $2, sym_2_4506
+.globl sym_2_4507
+sym_2_4507: la $2, sym_2_4507
+.globl sym_2_4508
+sym_2_4508: la $2, sym_2_4508
+.globl sym_2_4509
+sym_2_4509: la $2, sym_2_4509
+.globl sym_2_4510
+sym_2_4510: la $2, sym_2_4510
+.globl sym_2_4511
+sym_2_4511: la $2, sym_2_4511
+.globl sym_2_4512
+sym_2_4512: la $2, sym_2_4512
+.globl sym_2_4513
+sym_2_4513: la $2, sym_2_4513
+.globl sym_2_4514
+sym_2_4514: la $2, sym_2_4514
+.globl sym_2_4515
+sym_2_4515: la $2, sym_2_4515
+.globl sym_2_4516
+sym_2_4516: la $2, sym_2_4516
+.globl sym_2_4517
+sym_2_4517: la $2, sym_2_4517
+.globl sym_2_4518
+sym_2_4518: la $2, sym_2_4518
+.globl sym_2_4519
+sym_2_4519: la $2, sym_2_4519
+.globl sym_2_4520
+sym_2_4520: la $2, sym_2_4520
+.globl sym_2_4521
+sym_2_4521: la $2, sym_2_4521
+.globl sym_2_4522
+sym_2_4522: la $2, sym_2_4522
+.globl sym_2_4523
+sym_2_4523: la $2, sym_2_4523
+.globl sym_2_4524
+sym_2_4524: la $2, sym_2_4524
+.globl sym_2_4525
+sym_2_4525: la $2, sym_2_4525
+.globl sym_2_4526
+sym_2_4526: la $2, sym_2_4526
+.globl sym_2_4527
+sym_2_4527: la $2, sym_2_4527
+.globl sym_2_4528
+sym_2_4528: la $2, sym_2_4528
+.globl sym_2_4529
+sym_2_4529: la $2, sym_2_4529
+.globl sym_2_4530
+sym_2_4530: la $2, sym_2_4530
+.globl sym_2_4531
+sym_2_4531: la $2, sym_2_4531
+.globl sym_2_4532
+sym_2_4532: la $2, sym_2_4532
+.globl sym_2_4533
+sym_2_4533: la $2, sym_2_4533
+.globl sym_2_4534
+sym_2_4534: la $2, sym_2_4534
+.globl sym_2_4535
+sym_2_4535: la $2, sym_2_4535
+.globl sym_2_4536
+sym_2_4536: la $2, sym_2_4536
+.globl sym_2_4537
+sym_2_4537: la $2, sym_2_4537
+.globl sym_2_4538
+sym_2_4538: la $2, sym_2_4538
+.globl sym_2_4539
+sym_2_4539: la $2, sym_2_4539
+.globl sym_2_4540
+sym_2_4540: la $2, sym_2_4540
+.globl sym_2_4541
+sym_2_4541: la $2, sym_2_4541
+.globl sym_2_4542
+sym_2_4542: la $2, sym_2_4542
+.globl sym_2_4543
+sym_2_4543: la $2, sym_2_4543
+.globl sym_2_4544
+sym_2_4544: la $2, sym_2_4544
+.globl sym_2_4545
+sym_2_4545: la $2, sym_2_4545
+.globl sym_2_4546
+sym_2_4546: la $2, sym_2_4546
+.globl sym_2_4547
+sym_2_4547: la $2, sym_2_4547
+.globl sym_2_4548
+sym_2_4548: la $2, sym_2_4548
+.globl sym_2_4549
+sym_2_4549: la $2, sym_2_4549
+.globl sym_2_4550
+sym_2_4550: la $2, sym_2_4550
+.globl sym_2_4551
+sym_2_4551: la $2, sym_2_4551
+.globl sym_2_4552
+sym_2_4552: la $2, sym_2_4552
+.globl sym_2_4553
+sym_2_4553: la $2, sym_2_4553
+.globl sym_2_4554
+sym_2_4554: la $2, sym_2_4554
+.globl sym_2_4555
+sym_2_4555: la $2, sym_2_4555
+.globl sym_2_4556
+sym_2_4556: la $2, sym_2_4556
+.globl sym_2_4557
+sym_2_4557: la $2, sym_2_4557
+.globl sym_2_4558
+sym_2_4558: la $2, sym_2_4558
+.globl sym_2_4559
+sym_2_4559: la $2, sym_2_4559
+.globl sym_2_4560
+sym_2_4560: la $2, sym_2_4560
+.globl sym_2_4561
+sym_2_4561: la $2, sym_2_4561
+.globl sym_2_4562
+sym_2_4562: la $2, sym_2_4562
+.globl sym_2_4563
+sym_2_4563: la $2, sym_2_4563
+.globl sym_2_4564
+sym_2_4564: la $2, sym_2_4564
+.globl sym_2_4565
+sym_2_4565: la $2, sym_2_4565
+.globl sym_2_4566
+sym_2_4566: la $2, sym_2_4566
+.globl sym_2_4567
+sym_2_4567: la $2, sym_2_4567
+.globl sym_2_4568
+sym_2_4568: la $2, sym_2_4568
+.globl sym_2_4569
+sym_2_4569: la $2, sym_2_4569
+.globl sym_2_4570
+sym_2_4570: la $2, sym_2_4570
+.globl sym_2_4571
+sym_2_4571: la $2, sym_2_4571
+.globl sym_2_4572
+sym_2_4572: la $2, sym_2_4572
+.globl sym_2_4573
+sym_2_4573: la $2, sym_2_4573
+.globl sym_2_4574
+sym_2_4574: la $2, sym_2_4574
+.globl sym_2_4575
+sym_2_4575: la $2, sym_2_4575
+.globl sym_2_4576
+sym_2_4576: la $2, sym_2_4576
+.globl sym_2_4577
+sym_2_4577: la $2, sym_2_4577
+.globl sym_2_4578
+sym_2_4578: la $2, sym_2_4578
+.globl sym_2_4579
+sym_2_4579: la $2, sym_2_4579
+.globl sym_2_4580
+sym_2_4580: la $2, sym_2_4580
+.globl sym_2_4581
+sym_2_4581: la $2, sym_2_4581
+.globl sym_2_4582
+sym_2_4582: la $2, sym_2_4582
+.globl sym_2_4583
+sym_2_4583: la $2, sym_2_4583
+.globl sym_2_4584
+sym_2_4584: la $2, sym_2_4584
+.globl sym_2_4585
+sym_2_4585: la $2, sym_2_4585
+.globl sym_2_4586
+sym_2_4586: la $2, sym_2_4586
+.globl sym_2_4587
+sym_2_4587: la $2, sym_2_4587
+.globl sym_2_4588
+sym_2_4588: la $2, sym_2_4588
+.globl sym_2_4589
+sym_2_4589: la $2, sym_2_4589
+.globl sym_2_4590
+sym_2_4590: la $2, sym_2_4590
+.globl sym_2_4591
+sym_2_4591: la $2, sym_2_4591
+.globl sym_2_4592
+sym_2_4592: la $2, sym_2_4592
+.globl sym_2_4593
+sym_2_4593: la $2, sym_2_4593
+.globl sym_2_4594
+sym_2_4594: la $2, sym_2_4594
+.globl sym_2_4595
+sym_2_4595: la $2, sym_2_4595
+.globl sym_2_4596
+sym_2_4596: la $2, sym_2_4596
+.globl sym_2_4597
+sym_2_4597: la $2, sym_2_4597
+.globl sym_2_4598
+sym_2_4598: la $2, sym_2_4598
+.globl sym_2_4599
+sym_2_4599: la $2, sym_2_4599
+.globl sym_2_4600
+sym_2_4600: la $2, sym_2_4600
+.globl sym_2_4601
+sym_2_4601: la $2, sym_2_4601
+.globl sym_2_4602
+sym_2_4602: la $2, sym_2_4602
+.globl sym_2_4603
+sym_2_4603: la $2, sym_2_4603
+.globl sym_2_4604
+sym_2_4604: la $2, sym_2_4604
+.globl sym_2_4605
+sym_2_4605: la $2, sym_2_4605
+.globl sym_2_4606
+sym_2_4606: la $2, sym_2_4606
+.globl sym_2_4607
+sym_2_4607: la $2, sym_2_4607
+.globl sym_2_4608
+sym_2_4608: la $2, sym_2_4608
+.globl sym_2_4609
+sym_2_4609: la $2, sym_2_4609
+.globl sym_2_4610
+sym_2_4610: la $2, sym_2_4610
+.globl sym_2_4611
+sym_2_4611: la $2, sym_2_4611
+.globl sym_2_4612
+sym_2_4612: la $2, sym_2_4612
+.globl sym_2_4613
+sym_2_4613: la $2, sym_2_4613
+.globl sym_2_4614
+sym_2_4614: la $2, sym_2_4614
+.globl sym_2_4615
+sym_2_4615: la $2, sym_2_4615
+.globl sym_2_4616
+sym_2_4616: la $2, sym_2_4616
+.globl sym_2_4617
+sym_2_4617: la $2, sym_2_4617
+.globl sym_2_4618
+sym_2_4618: la $2, sym_2_4618
+.globl sym_2_4619
+sym_2_4619: la $2, sym_2_4619
+.globl sym_2_4620
+sym_2_4620: la $2, sym_2_4620
+.globl sym_2_4621
+sym_2_4621: la $2, sym_2_4621
+.globl sym_2_4622
+sym_2_4622: la $2, sym_2_4622
+.globl sym_2_4623
+sym_2_4623: la $2, sym_2_4623
+.globl sym_2_4624
+sym_2_4624: la $2, sym_2_4624
+.globl sym_2_4625
+sym_2_4625: la $2, sym_2_4625
+.globl sym_2_4626
+sym_2_4626: la $2, sym_2_4626
+.globl sym_2_4627
+sym_2_4627: la $2, sym_2_4627
+.globl sym_2_4628
+sym_2_4628: la $2, sym_2_4628
+.globl sym_2_4629
+sym_2_4629: la $2, sym_2_4629
+.globl sym_2_4630
+sym_2_4630: la $2, sym_2_4630
+.globl sym_2_4631
+sym_2_4631: la $2, sym_2_4631
+.globl sym_2_4632
+sym_2_4632: la $2, sym_2_4632
+.globl sym_2_4633
+sym_2_4633: la $2, sym_2_4633
+.globl sym_2_4634
+sym_2_4634: la $2, sym_2_4634
+.globl sym_2_4635
+sym_2_4635: la $2, sym_2_4635
+.globl sym_2_4636
+sym_2_4636: la $2, sym_2_4636
+.globl sym_2_4637
+sym_2_4637: la $2, sym_2_4637
+.globl sym_2_4638
+sym_2_4638: la $2, sym_2_4638
+.globl sym_2_4639
+sym_2_4639: la $2, sym_2_4639
+.globl sym_2_4640
+sym_2_4640: la $2, sym_2_4640
+.globl sym_2_4641
+sym_2_4641: la $2, sym_2_4641
+.globl sym_2_4642
+sym_2_4642: la $2, sym_2_4642
+.globl sym_2_4643
+sym_2_4643: la $2, sym_2_4643
+.globl sym_2_4644
+sym_2_4644: la $2, sym_2_4644
+.globl sym_2_4645
+sym_2_4645: la $2, sym_2_4645
+.globl sym_2_4646
+sym_2_4646: la $2, sym_2_4646
+.globl sym_2_4647
+sym_2_4647: la $2, sym_2_4647
+.globl sym_2_4648
+sym_2_4648: la $2, sym_2_4648
+.globl sym_2_4649
+sym_2_4649: la $2, sym_2_4649
+.globl sym_2_4650
+sym_2_4650: la $2, sym_2_4650
+.globl sym_2_4651
+sym_2_4651: la $2, sym_2_4651
+.globl sym_2_4652
+sym_2_4652: la $2, sym_2_4652
+.globl sym_2_4653
+sym_2_4653: la $2, sym_2_4653
+.globl sym_2_4654
+sym_2_4654: la $2, sym_2_4654
+.globl sym_2_4655
+sym_2_4655: la $2, sym_2_4655
+.globl sym_2_4656
+sym_2_4656: la $2, sym_2_4656
+.globl sym_2_4657
+sym_2_4657: la $2, sym_2_4657
+.globl sym_2_4658
+sym_2_4658: la $2, sym_2_4658
+.globl sym_2_4659
+sym_2_4659: la $2, sym_2_4659
+.globl sym_2_4660
+sym_2_4660: la $2, sym_2_4660
+.globl sym_2_4661
+sym_2_4661: la $2, sym_2_4661
+.globl sym_2_4662
+sym_2_4662: la $2, sym_2_4662
+.globl sym_2_4663
+sym_2_4663: la $2, sym_2_4663
+.globl sym_2_4664
+sym_2_4664: la $2, sym_2_4664
+.globl sym_2_4665
+sym_2_4665: la $2, sym_2_4665
+.globl sym_2_4666
+sym_2_4666: la $2, sym_2_4666
+.globl sym_2_4667
+sym_2_4667: la $2, sym_2_4667
+.globl sym_2_4668
+sym_2_4668: la $2, sym_2_4668
+.globl sym_2_4669
+sym_2_4669: la $2, sym_2_4669
+.globl sym_2_4670
+sym_2_4670: la $2, sym_2_4670
+.globl sym_2_4671
+sym_2_4671: la $2, sym_2_4671
+.globl sym_2_4672
+sym_2_4672: la $2, sym_2_4672
+.globl sym_2_4673
+sym_2_4673: la $2, sym_2_4673
+.globl sym_2_4674
+sym_2_4674: la $2, sym_2_4674
+.globl sym_2_4675
+sym_2_4675: la $2, sym_2_4675
+.globl sym_2_4676
+sym_2_4676: la $2, sym_2_4676
+.globl sym_2_4677
+sym_2_4677: la $2, sym_2_4677
+.globl sym_2_4678
+sym_2_4678: la $2, sym_2_4678
+.globl sym_2_4679
+sym_2_4679: la $2, sym_2_4679
+.globl sym_2_4680
+sym_2_4680: la $2, sym_2_4680
+.globl sym_2_4681
+sym_2_4681: la $2, sym_2_4681
+.globl sym_2_4682
+sym_2_4682: la $2, sym_2_4682
+.globl sym_2_4683
+sym_2_4683: la $2, sym_2_4683
+.globl sym_2_4684
+sym_2_4684: la $2, sym_2_4684
+.globl sym_2_4685
+sym_2_4685: la $2, sym_2_4685
+.globl sym_2_4686
+sym_2_4686: la $2, sym_2_4686
+.globl sym_2_4687
+sym_2_4687: la $2, sym_2_4687
+.globl sym_2_4688
+sym_2_4688: la $2, sym_2_4688
+.globl sym_2_4689
+sym_2_4689: la $2, sym_2_4689
+.globl sym_2_4690
+sym_2_4690: la $2, sym_2_4690
+.globl sym_2_4691
+sym_2_4691: la $2, sym_2_4691
+.globl sym_2_4692
+sym_2_4692: la $2, sym_2_4692
+.globl sym_2_4693
+sym_2_4693: la $2, sym_2_4693
+.globl sym_2_4694
+sym_2_4694: la $2, sym_2_4694
+.globl sym_2_4695
+sym_2_4695: la $2, sym_2_4695
+.globl sym_2_4696
+sym_2_4696: la $2, sym_2_4696
+.globl sym_2_4697
+sym_2_4697: la $2, sym_2_4697
+.globl sym_2_4698
+sym_2_4698: la $2, sym_2_4698
+.globl sym_2_4699
+sym_2_4699: la $2, sym_2_4699
+.globl sym_2_4700
+sym_2_4700: la $2, sym_2_4700
+.globl sym_2_4701
+sym_2_4701: la $2, sym_2_4701
+.globl sym_2_4702
+sym_2_4702: la $2, sym_2_4702
+.globl sym_2_4703
+sym_2_4703: la $2, sym_2_4703
+.globl sym_2_4704
+sym_2_4704: la $2, sym_2_4704
+.globl sym_2_4705
+sym_2_4705: la $2, sym_2_4705
+.globl sym_2_4706
+sym_2_4706: la $2, sym_2_4706
+.globl sym_2_4707
+sym_2_4707: la $2, sym_2_4707
+.globl sym_2_4708
+sym_2_4708: la $2, sym_2_4708
+.globl sym_2_4709
+sym_2_4709: la $2, sym_2_4709
+.globl sym_2_4710
+sym_2_4710: la $2, sym_2_4710
+.globl sym_2_4711
+sym_2_4711: la $2, sym_2_4711
+.globl sym_2_4712
+sym_2_4712: la $2, sym_2_4712
+.globl sym_2_4713
+sym_2_4713: la $2, sym_2_4713
+.globl sym_2_4714
+sym_2_4714: la $2, sym_2_4714
+.globl sym_2_4715
+sym_2_4715: la $2, sym_2_4715
+.globl sym_2_4716
+sym_2_4716: la $2, sym_2_4716
+.globl sym_2_4717
+sym_2_4717: la $2, sym_2_4717
+.globl sym_2_4718
+sym_2_4718: la $2, sym_2_4718
+.globl sym_2_4719
+sym_2_4719: la $2, sym_2_4719
+.globl sym_2_4720
+sym_2_4720: la $2, sym_2_4720
+.globl sym_2_4721
+sym_2_4721: la $2, sym_2_4721
+.globl sym_2_4722
+sym_2_4722: la $2, sym_2_4722
+.globl sym_2_4723
+sym_2_4723: la $2, sym_2_4723
+.globl sym_2_4724
+sym_2_4724: la $2, sym_2_4724
+.globl sym_2_4725
+sym_2_4725: la $2, sym_2_4725
+.globl sym_2_4726
+sym_2_4726: la $2, sym_2_4726
+.globl sym_2_4727
+sym_2_4727: la $2, sym_2_4727
+.globl sym_2_4728
+sym_2_4728: la $2, sym_2_4728
+.globl sym_2_4729
+sym_2_4729: la $2, sym_2_4729
+.globl sym_2_4730
+sym_2_4730: la $2, sym_2_4730
+.globl sym_2_4731
+sym_2_4731: la $2, sym_2_4731
+.globl sym_2_4732
+sym_2_4732: la $2, sym_2_4732
+.globl sym_2_4733
+sym_2_4733: la $2, sym_2_4733
+.globl sym_2_4734
+sym_2_4734: la $2, sym_2_4734
+.globl sym_2_4735
+sym_2_4735: la $2, sym_2_4735
+.globl sym_2_4736
+sym_2_4736: la $2, sym_2_4736
+.globl sym_2_4737
+sym_2_4737: la $2, sym_2_4737
+.globl sym_2_4738
+sym_2_4738: la $2, sym_2_4738
+.globl sym_2_4739
+sym_2_4739: la $2, sym_2_4739
+.globl sym_2_4740
+sym_2_4740: la $2, sym_2_4740
+.globl sym_2_4741
+sym_2_4741: la $2, sym_2_4741
+.globl sym_2_4742
+sym_2_4742: la $2, sym_2_4742
+.globl sym_2_4743
+sym_2_4743: la $2, sym_2_4743
+.globl sym_2_4744
+sym_2_4744: la $2, sym_2_4744
+.globl sym_2_4745
+sym_2_4745: la $2, sym_2_4745
+.globl sym_2_4746
+sym_2_4746: la $2, sym_2_4746
+.globl sym_2_4747
+sym_2_4747: la $2, sym_2_4747
+.globl sym_2_4748
+sym_2_4748: la $2, sym_2_4748
+.globl sym_2_4749
+sym_2_4749: la $2, sym_2_4749
+.globl sym_2_4750
+sym_2_4750: la $2, sym_2_4750
+.globl sym_2_4751
+sym_2_4751: la $2, sym_2_4751
+.globl sym_2_4752
+sym_2_4752: la $2, sym_2_4752
+.globl sym_2_4753
+sym_2_4753: la $2, sym_2_4753
+.globl sym_2_4754
+sym_2_4754: la $2, sym_2_4754
+.globl sym_2_4755
+sym_2_4755: la $2, sym_2_4755
+.globl sym_2_4756
+sym_2_4756: la $2, sym_2_4756
+.globl sym_2_4757
+sym_2_4757: la $2, sym_2_4757
+.globl sym_2_4758
+sym_2_4758: la $2, sym_2_4758
+.globl sym_2_4759
+sym_2_4759: la $2, sym_2_4759
+.globl sym_2_4760
+sym_2_4760: la $2, sym_2_4760
+.globl sym_2_4761
+sym_2_4761: la $2, sym_2_4761
+.globl sym_2_4762
+sym_2_4762: la $2, sym_2_4762
+.globl sym_2_4763
+sym_2_4763: la $2, sym_2_4763
+.globl sym_2_4764
+sym_2_4764: la $2, sym_2_4764
+.globl sym_2_4765
+sym_2_4765: la $2, sym_2_4765
+.globl sym_2_4766
+sym_2_4766: la $2, sym_2_4766
+.globl sym_2_4767
+sym_2_4767: la $2, sym_2_4767
+.globl sym_2_4768
+sym_2_4768: la $2, sym_2_4768
+.globl sym_2_4769
+sym_2_4769: la $2, sym_2_4769
+.globl sym_2_4770
+sym_2_4770: la $2, sym_2_4770
+.globl sym_2_4771
+sym_2_4771: la $2, sym_2_4771
+.globl sym_2_4772
+sym_2_4772: la $2, sym_2_4772
+.globl sym_2_4773
+sym_2_4773: la $2, sym_2_4773
+.globl sym_2_4774
+sym_2_4774: la $2, sym_2_4774
+.globl sym_2_4775
+sym_2_4775: la $2, sym_2_4775
+.globl sym_2_4776
+sym_2_4776: la $2, sym_2_4776
+.globl sym_2_4777
+sym_2_4777: la $2, sym_2_4777
+.globl sym_2_4778
+sym_2_4778: la $2, sym_2_4778
+.globl sym_2_4779
+sym_2_4779: la $2, sym_2_4779
+.globl sym_2_4780
+sym_2_4780: la $2, sym_2_4780
+.globl sym_2_4781
+sym_2_4781: la $2, sym_2_4781
+.globl sym_2_4782
+sym_2_4782: la $2, sym_2_4782
+.globl sym_2_4783
+sym_2_4783: la $2, sym_2_4783
+.globl sym_2_4784
+sym_2_4784: la $2, sym_2_4784
+.globl sym_2_4785
+sym_2_4785: la $2, sym_2_4785
+.globl sym_2_4786
+sym_2_4786: la $2, sym_2_4786
+.globl sym_2_4787
+sym_2_4787: la $2, sym_2_4787
+.globl sym_2_4788
+sym_2_4788: la $2, sym_2_4788
+.globl sym_2_4789
+sym_2_4789: la $2, sym_2_4789
+.globl sym_2_4790
+sym_2_4790: la $2, sym_2_4790
+.globl sym_2_4791
+sym_2_4791: la $2, sym_2_4791
+.globl sym_2_4792
+sym_2_4792: la $2, sym_2_4792
+.globl sym_2_4793
+sym_2_4793: la $2, sym_2_4793
+.globl sym_2_4794
+sym_2_4794: la $2, sym_2_4794
+.globl sym_2_4795
+sym_2_4795: la $2, sym_2_4795
+.globl sym_2_4796
+sym_2_4796: la $2, sym_2_4796
+.globl sym_2_4797
+sym_2_4797: la $2, sym_2_4797
+.globl sym_2_4798
+sym_2_4798: la $2, sym_2_4798
+.globl sym_2_4799
+sym_2_4799: la $2, sym_2_4799
+.globl sym_2_4800
+sym_2_4800: la $2, sym_2_4800
+.globl sym_2_4801
+sym_2_4801: la $2, sym_2_4801
+.globl sym_2_4802
+sym_2_4802: la $2, sym_2_4802
+.globl sym_2_4803
+sym_2_4803: la $2, sym_2_4803
+.globl sym_2_4804
+sym_2_4804: la $2, sym_2_4804
+.globl sym_2_4805
+sym_2_4805: la $2, sym_2_4805
+.globl sym_2_4806
+sym_2_4806: la $2, sym_2_4806
+.globl sym_2_4807
+sym_2_4807: la $2, sym_2_4807
+.globl sym_2_4808
+sym_2_4808: la $2, sym_2_4808
+.globl sym_2_4809
+sym_2_4809: la $2, sym_2_4809
+.globl sym_2_4810
+sym_2_4810: la $2, sym_2_4810
+.globl sym_2_4811
+sym_2_4811: la $2, sym_2_4811
+.globl sym_2_4812
+sym_2_4812: la $2, sym_2_4812
+.globl sym_2_4813
+sym_2_4813: la $2, sym_2_4813
+.globl sym_2_4814
+sym_2_4814: la $2, sym_2_4814
+.globl sym_2_4815
+sym_2_4815: la $2, sym_2_4815
+.globl sym_2_4816
+sym_2_4816: la $2, sym_2_4816
+.globl sym_2_4817
+sym_2_4817: la $2, sym_2_4817
+.globl sym_2_4818
+sym_2_4818: la $2, sym_2_4818
+.globl sym_2_4819
+sym_2_4819: la $2, sym_2_4819
+.globl sym_2_4820
+sym_2_4820: la $2, sym_2_4820
+.globl sym_2_4821
+sym_2_4821: la $2, sym_2_4821
+.globl sym_2_4822
+sym_2_4822: la $2, sym_2_4822
+.globl sym_2_4823
+sym_2_4823: la $2, sym_2_4823
+.globl sym_2_4824
+sym_2_4824: la $2, sym_2_4824
+.globl sym_2_4825
+sym_2_4825: la $2, sym_2_4825
+.globl sym_2_4826
+sym_2_4826: la $2, sym_2_4826
+.globl sym_2_4827
+sym_2_4827: la $2, sym_2_4827
+.globl sym_2_4828
+sym_2_4828: la $2, sym_2_4828
+.globl sym_2_4829
+sym_2_4829: la $2, sym_2_4829
+.globl sym_2_4830
+sym_2_4830: la $2, sym_2_4830
+.globl sym_2_4831
+sym_2_4831: la $2, sym_2_4831
+.globl sym_2_4832
+sym_2_4832: la $2, sym_2_4832
+.globl sym_2_4833
+sym_2_4833: la $2, sym_2_4833
+.globl sym_2_4834
+sym_2_4834: la $2, sym_2_4834
+.globl sym_2_4835
+sym_2_4835: la $2, sym_2_4835
+.globl sym_2_4836
+sym_2_4836: la $2, sym_2_4836
+.globl sym_2_4837
+sym_2_4837: la $2, sym_2_4837
+.globl sym_2_4838
+sym_2_4838: la $2, sym_2_4838
+.globl sym_2_4839
+sym_2_4839: la $2, sym_2_4839
+.globl sym_2_4840
+sym_2_4840: la $2, sym_2_4840
+.globl sym_2_4841
+sym_2_4841: la $2, sym_2_4841
+.globl sym_2_4842
+sym_2_4842: la $2, sym_2_4842
+.globl sym_2_4843
+sym_2_4843: la $2, sym_2_4843
+.globl sym_2_4844
+sym_2_4844: la $2, sym_2_4844
+.globl sym_2_4845
+sym_2_4845: la $2, sym_2_4845
+.globl sym_2_4846
+sym_2_4846: la $2, sym_2_4846
+.globl sym_2_4847
+sym_2_4847: la $2, sym_2_4847
+.globl sym_2_4848
+sym_2_4848: la $2, sym_2_4848
+.globl sym_2_4849
+sym_2_4849: la $2, sym_2_4849
+.globl sym_2_4850
+sym_2_4850: la $2, sym_2_4850
+.globl sym_2_4851
+sym_2_4851: la $2, sym_2_4851
+.globl sym_2_4852
+sym_2_4852: la $2, sym_2_4852
+.globl sym_2_4853
+sym_2_4853: la $2, sym_2_4853
+.globl sym_2_4854
+sym_2_4854: la $2, sym_2_4854
+.globl sym_2_4855
+sym_2_4855: la $2, sym_2_4855
+.globl sym_2_4856
+sym_2_4856: la $2, sym_2_4856
+.globl sym_2_4857
+sym_2_4857: la $2, sym_2_4857
+.globl sym_2_4858
+sym_2_4858: la $2, sym_2_4858
+.globl sym_2_4859
+sym_2_4859: la $2, sym_2_4859
+.globl sym_2_4860
+sym_2_4860: la $2, sym_2_4860
+.globl sym_2_4861
+sym_2_4861: la $2, sym_2_4861
+.globl sym_2_4862
+sym_2_4862: la $2, sym_2_4862
+.globl sym_2_4863
+sym_2_4863: la $2, sym_2_4863
+.globl sym_2_4864
+sym_2_4864: la $2, sym_2_4864
+.globl sym_2_4865
+sym_2_4865: la $2, sym_2_4865
+.globl sym_2_4866
+sym_2_4866: la $2, sym_2_4866
+.globl sym_2_4867
+sym_2_4867: la $2, sym_2_4867
+.globl sym_2_4868
+sym_2_4868: la $2, sym_2_4868
+.globl sym_2_4869
+sym_2_4869: la $2, sym_2_4869
+.globl sym_2_4870
+sym_2_4870: la $2, sym_2_4870
+.globl sym_2_4871
+sym_2_4871: la $2, sym_2_4871
+.globl sym_2_4872
+sym_2_4872: la $2, sym_2_4872
+.globl sym_2_4873
+sym_2_4873: la $2, sym_2_4873
+.globl sym_2_4874
+sym_2_4874: la $2, sym_2_4874
+.globl sym_2_4875
+sym_2_4875: la $2, sym_2_4875
+.globl sym_2_4876
+sym_2_4876: la $2, sym_2_4876
+.globl sym_2_4877
+sym_2_4877: la $2, sym_2_4877
+.globl sym_2_4878
+sym_2_4878: la $2, sym_2_4878
+.globl sym_2_4879
+sym_2_4879: la $2, sym_2_4879
+.globl sym_2_4880
+sym_2_4880: la $2, sym_2_4880
+.globl sym_2_4881
+sym_2_4881: la $2, sym_2_4881
+.globl sym_2_4882
+sym_2_4882: la $2, sym_2_4882
+.globl sym_2_4883
+sym_2_4883: la $2, sym_2_4883
+.globl sym_2_4884
+sym_2_4884: la $2, sym_2_4884
+.globl sym_2_4885
+sym_2_4885: la $2, sym_2_4885
+.globl sym_2_4886
+sym_2_4886: la $2, sym_2_4886
+.globl sym_2_4887
+sym_2_4887: la $2, sym_2_4887
+.globl sym_2_4888
+sym_2_4888: la $2, sym_2_4888
+.globl sym_2_4889
+sym_2_4889: la $2, sym_2_4889
+.globl sym_2_4890
+sym_2_4890: la $2, sym_2_4890
+.globl sym_2_4891
+sym_2_4891: la $2, sym_2_4891
+.globl sym_2_4892
+sym_2_4892: la $2, sym_2_4892
+.globl sym_2_4893
+sym_2_4893: la $2, sym_2_4893
+.globl sym_2_4894
+sym_2_4894: la $2, sym_2_4894
+.globl sym_2_4895
+sym_2_4895: la $2, sym_2_4895
+.globl sym_2_4896
+sym_2_4896: la $2, sym_2_4896
+.globl sym_2_4897
+sym_2_4897: la $2, sym_2_4897
+.globl sym_2_4898
+sym_2_4898: la $2, sym_2_4898
+.globl sym_2_4899
+sym_2_4899: la $2, sym_2_4899
+.globl sym_2_4900
+sym_2_4900: la $2, sym_2_4900
+.globl sym_2_4901
+sym_2_4901: la $2, sym_2_4901
+.globl sym_2_4902
+sym_2_4902: la $2, sym_2_4902
+.globl sym_2_4903
+sym_2_4903: la $2, sym_2_4903
+.globl sym_2_4904
+sym_2_4904: la $2, sym_2_4904
+.globl sym_2_4905
+sym_2_4905: la $2, sym_2_4905
+.globl sym_2_4906
+sym_2_4906: la $2, sym_2_4906
+.globl sym_2_4907
+sym_2_4907: la $2, sym_2_4907
+.globl sym_2_4908
+sym_2_4908: la $2, sym_2_4908
+.globl sym_2_4909
+sym_2_4909: la $2, sym_2_4909
+.globl sym_2_4910
+sym_2_4910: la $2, sym_2_4910
+.globl sym_2_4911
+sym_2_4911: la $2, sym_2_4911
+.globl sym_2_4912
+sym_2_4912: la $2, sym_2_4912
+.globl sym_2_4913
+sym_2_4913: la $2, sym_2_4913
+.globl sym_2_4914
+sym_2_4914: la $2, sym_2_4914
+.globl sym_2_4915
+sym_2_4915: la $2, sym_2_4915
+.globl sym_2_4916
+sym_2_4916: la $2, sym_2_4916
+.globl sym_2_4917
+sym_2_4917: la $2, sym_2_4917
+.globl sym_2_4918
+sym_2_4918: la $2, sym_2_4918
+.globl sym_2_4919
+sym_2_4919: la $2, sym_2_4919
+.globl sym_2_4920
+sym_2_4920: la $2, sym_2_4920
+.globl sym_2_4921
+sym_2_4921: la $2, sym_2_4921
+.globl sym_2_4922
+sym_2_4922: la $2, sym_2_4922
+.globl sym_2_4923
+sym_2_4923: la $2, sym_2_4923
+.globl sym_2_4924
+sym_2_4924: la $2, sym_2_4924
+.globl sym_2_4925
+sym_2_4925: la $2, sym_2_4925
+.globl sym_2_4926
+sym_2_4926: la $2, sym_2_4926
+.globl sym_2_4927
+sym_2_4927: la $2, sym_2_4927
+.globl sym_2_4928
+sym_2_4928: la $2, sym_2_4928
+.globl sym_2_4929
+sym_2_4929: la $2, sym_2_4929
+.globl sym_2_4930
+sym_2_4930: la $2, sym_2_4930
+.globl sym_2_4931
+sym_2_4931: la $2, sym_2_4931
+.globl sym_2_4932
+sym_2_4932: la $2, sym_2_4932
+.globl sym_2_4933
+sym_2_4933: la $2, sym_2_4933
+.globl sym_2_4934
+sym_2_4934: la $2, sym_2_4934
+.globl sym_2_4935
+sym_2_4935: la $2, sym_2_4935
+.globl sym_2_4936
+sym_2_4936: la $2, sym_2_4936
+.globl sym_2_4937
+sym_2_4937: la $2, sym_2_4937
+.globl sym_2_4938
+sym_2_4938: la $2, sym_2_4938
+.globl sym_2_4939
+sym_2_4939: la $2, sym_2_4939
+.globl sym_2_4940
+sym_2_4940: la $2, sym_2_4940
+.globl sym_2_4941
+sym_2_4941: la $2, sym_2_4941
+.globl sym_2_4942
+sym_2_4942: la $2, sym_2_4942
+.globl sym_2_4943
+sym_2_4943: la $2, sym_2_4943
+.globl sym_2_4944
+sym_2_4944: la $2, sym_2_4944
+.globl sym_2_4945
+sym_2_4945: la $2, sym_2_4945
+.globl sym_2_4946
+sym_2_4946: la $2, sym_2_4946
+.globl sym_2_4947
+sym_2_4947: la $2, sym_2_4947
+.globl sym_2_4948
+sym_2_4948: la $2, sym_2_4948
+.globl sym_2_4949
+sym_2_4949: la $2, sym_2_4949
+.globl sym_2_4950
+sym_2_4950: la $2, sym_2_4950
+.globl sym_2_4951
+sym_2_4951: la $2, sym_2_4951
+.globl sym_2_4952
+sym_2_4952: la $2, sym_2_4952
+.globl sym_2_4953
+sym_2_4953: la $2, sym_2_4953
+.globl sym_2_4954
+sym_2_4954: la $2, sym_2_4954
+.globl sym_2_4955
+sym_2_4955: la $2, sym_2_4955
+.globl sym_2_4956
+sym_2_4956: la $2, sym_2_4956
+.globl sym_2_4957
+sym_2_4957: la $2, sym_2_4957
+.globl sym_2_4958
+sym_2_4958: la $2, sym_2_4958
+.globl sym_2_4959
+sym_2_4959: la $2, sym_2_4959
+.globl sym_2_4960
+sym_2_4960: la $2, sym_2_4960
+.globl sym_2_4961
+sym_2_4961: la $2, sym_2_4961
+.globl sym_2_4962
+sym_2_4962: la $2, sym_2_4962
+.globl sym_2_4963
+sym_2_4963: la $2, sym_2_4963
+.globl sym_2_4964
+sym_2_4964: la $2, sym_2_4964
+.globl sym_2_4965
+sym_2_4965: la $2, sym_2_4965
+.globl sym_2_4966
+sym_2_4966: la $2, sym_2_4966
+.globl sym_2_4967
+sym_2_4967: la $2, sym_2_4967
+.globl sym_2_4968
+sym_2_4968: la $2, sym_2_4968
+.globl sym_2_4969
+sym_2_4969: la $2, sym_2_4969
+.globl sym_2_4970
+sym_2_4970: la $2, sym_2_4970
+.globl sym_2_4971
+sym_2_4971: la $2, sym_2_4971
+.globl sym_2_4972
+sym_2_4972: la $2, sym_2_4972
+.globl sym_2_4973
+sym_2_4973: la $2, sym_2_4973
+.globl sym_2_4974
+sym_2_4974: la $2, sym_2_4974
+.globl sym_2_4975
+sym_2_4975: la $2, sym_2_4975
+.globl sym_2_4976
+sym_2_4976: la $2, sym_2_4976
+.globl sym_2_4977
+sym_2_4977: la $2, sym_2_4977
+.globl sym_2_4978
+sym_2_4978: la $2, sym_2_4978
+.globl sym_2_4979
+sym_2_4979: la $2, sym_2_4979
+.globl sym_2_4980
+sym_2_4980: la $2, sym_2_4980
+.globl sym_2_4981
+sym_2_4981: la $2, sym_2_4981
+.globl sym_2_4982
+sym_2_4982: la $2, sym_2_4982
+.globl sym_2_4983
+sym_2_4983: la $2, sym_2_4983
+.globl sym_2_4984
+sym_2_4984: la $2, sym_2_4984
+.globl sym_2_4985
+sym_2_4985: la $2, sym_2_4985
+.globl sym_2_4986
+sym_2_4986: la $2, sym_2_4986
+.globl sym_2_4987
+sym_2_4987: la $2, sym_2_4987
+.globl sym_2_4988
+sym_2_4988: la $2, sym_2_4988
+.globl sym_2_4989
+sym_2_4989: la $2, sym_2_4989
+.globl sym_2_4990
+sym_2_4990: la $2, sym_2_4990
+.globl sym_2_4991
+sym_2_4991: la $2, sym_2_4991
+.globl sym_2_4992
+sym_2_4992: la $2, sym_2_4992
+.globl sym_2_4993
+sym_2_4993: la $2, sym_2_4993
+.globl sym_2_4994
+sym_2_4994: la $2, sym_2_4994
+.globl sym_2_4995
+sym_2_4995: la $2, sym_2_4995
+.globl sym_2_4996
+sym_2_4996: la $2, sym_2_4996
+.globl sym_2_4997
+sym_2_4997: la $2, sym_2_4997
+.globl sym_2_4998
+sym_2_4998: la $2, sym_2_4998
+.globl sym_2_4999
+sym_2_4999: la $2, sym_2_4999
+.globl sym_2_5000
+sym_2_5000: la $2, sym_2_5000
+.globl sym_2_5001
+sym_2_5001: la $2, sym_2_5001
+.globl sym_2_5002
+sym_2_5002: la $2, sym_2_5002
+.globl sym_2_5003
+sym_2_5003: la $2, sym_2_5003
+.globl sym_2_5004
+sym_2_5004: la $2, sym_2_5004
+.globl sym_2_5005
+sym_2_5005: la $2, sym_2_5005
+.globl sym_2_5006
+sym_2_5006: la $2, sym_2_5006
+.globl sym_2_5007
+sym_2_5007: la $2, sym_2_5007
+.globl sym_2_5008
+sym_2_5008: la $2, sym_2_5008
+.globl sym_2_5009
+sym_2_5009: la $2, sym_2_5009
+.globl sym_2_5010
+sym_2_5010: la $2, sym_2_5010
+.globl sym_2_5011
+sym_2_5011: la $2, sym_2_5011
+.globl sym_2_5012
+sym_2_5012: la $2, sym_2_5012
+.globl sym_2_5013
+sym_2_5013: la $2, sym_2_5013
+.globl sym_2_5014
+sym_2_5014: la $2, sym_2_5014
+.globl sym_2_5015
+sym_2_5015: la $2, sym_2_5015
+.globl sym_2_5016
+sym_2_5016: la $2, sym_2_5016
+.globl sym_2_5017
+sym_2_5017: la $2, sym_2_5017
+.globl sym_2_5018
+sym_2_5018: la $2, sym_2_5018
+.globl sym_2_5019
+sym_2_5019: la $2, sym_2_5019
+.globl sym_2_5020
+sym_2_5020: la $2, sym_2_5020
+.globl sym_2_5021
+sym_2_5021: la $2, sym_2_5021
+.globl sym_2_5022
+sym_2_5022: la $2, sym_2_5022
+.globl sym_2_5023
+sym_2_5023: la $2, sym_2_5023
+.globl sym_2_5024
+sym_2_5024: la $2, sym_2_5024
+.globl sym_2_5025
+sym_2_5025: la $2, sym_2_5025
+.globl sym_2_5026
+sym_2_5026: la $2, sym_2_5026
+.globl sym_2_5027
+sym_2_5027: la $2, sym_2_5027
+.globl sym_2_5028
+sym_2_5028: la $2, sym_2_5028
+.globl sym_2_5029
+sym_2_5029: la $2, sym_2_5029
+.globl sym_2_5030
+sym_2_5030: la $2, sym_2_5030
+.globl sym_2_5031
+sym_2_5031: la $2, sym_2_5031
+.globl sym_2_5032
+sym_2_5032: la $2, sym_2_5032
+.globl sym_2_5033
+sym_2_5033: la $2, sym_2_5033
+.globl sym_2_5034
+sym_2_5034: la $2, sym_2_5034
+.globl sym_2_5035
+sym_2_5035: la $2, sym_2_5035
+.globl sym_2_5036
+sym_2_5036: la $2, sym_2_5036
+.globl sym_2_5037
+sym_2_5037: la $2, sym_2_5037
+.globl sym_2_5038
+sym_2_5038: la $2, sym_2_5038
+.globl sym_2_5039
+sym_2_5039: la $2, sym_2_5039
+.globl sym_2_5040
+sym_2_5040: la $2, sym_2_5040
+.globl sym_2_5041
+sym_2_5041: la $2, sym_2_5041
+.globl sym_2_5042
+sym_2_5042: la $2, sym_2_5042
+.globl sym_2_5043
+sym_2_5043: la $2, sym_2_5043
+.globl sym_2_5044
+sym_2_5044: la $2, sym_2_5044
+.globl sym_2_5045
+sym_2_5045: la $2, sym_2_5045
+.globl sym_2_5046
+sym_2_5046: la $2, sym_2_5046
+.globl sym_2_5047
+sym_2_5047: la $2, sym_2_5047
+.globl sym_2_5048
+sym_2_5048: la $2, sym_2_5048
+.globl sym_2_5049
+sym_2_5049: la $2, sym_2_5049
+.globl sym_2_5050
+sym_2_5050: la $2, sym_2_5050
+.globl sym_2_5051
+sym_2_5051: la $2, sym_2_5051
+.globl sym_2_5052
+sym_2_5052: la $2, sym_2_5052
+.globl sym_2_5053
+sym_2_5053: la $2, sym_2_5053
+.globl sym_2_5054
+sym_2_5054: la $2, sym_2_5054
+.globl sym_2_5055
+sym_2_5055: la $2, sym_2_5055
+.globl sym_2_5056
+sym_2_5056: la $2, sym_2_5056
+.globl sym_2_5057
+sym_2_5057: la $2, sym_2_5057
+.globl sym_2_5058
+sym_2_5058: la $2, sym_2_5058
+.globl sym_2_5059
+sym_2_5059: la $2, sym_2_5059
+.globl sym_2_5060
+sym_2_5060: la $2, sym_2_5060
+.globl sym_2_5061
+sym_2_5061: la $2, sym_2_5061
+.globl sym_2_5062
+sym_2_5062: la $2, sym_2_5062
+.globl sym_2_5063
+sym_2_5063: la $2, sym_2_5063
+.globl sym_2_5064
+sym_2_5064: la $2, sym_2_5064
+.globl sym_2_5065
+sym_2_5065: la $2, sym_2_5065
+.globl sym_2_5066
+sym_2_5066: la $2, sym_2_5066
+.globl sym_2_5067
+sym_2_5067: la $2, sym_2_5067
+.globl sym_2_5068
+sym_2_5068: la $2, sym_2_5068
+.globl sym_2_5069
+sym_2_5069: la $2, sym_2_5069
+.globl sym_2_5070
+sym_2_5070: la $2, sym_2_5070
+.globl sym_2_5071
+sym_2_5071: la $2, sym_2_5071
+.globl sym_2_5072
+sym_2_5072: la $2, sym_2_5072
+.globl sym_2_5073
+sym_2_5073: la $2, sym_2_5073
+.globl sym_2_5074
+sym_2_5074: la $2, sym_2_5074
+.globl sym_2_5075
+sym_2_5075: la $2, sym_2_5075
+.globl sym_2_5076
+sym_2_5076: la $2, sym_2_5076
+.globl sym_2_5077
+sym_2_5077: la $2, sym_2_5077
+.globl sym_2_5078
+sym_2_5078: la $2, sym_2_5078
+.globl sym_2_5079
+sym_2_5079: la $2, sym_2_5079
+.globl sym_2_5080
+sym_2_5080: la $2, sym_2_5080
+.globl sym_2_5081
+sym_2_5081: la $2, sym_2_5081
+.globl sym_2_5082
+sym_2_5082: la $2, sym_2_5082
+.globl sym_2_5083
+sym_2_5083: la $2, sym_2_5083
+.globl sym_2_5084
+sym_2_5084: la $2, sym_2_5084
+.globl sym_2_5085
+sym_2_5085: la $2, sym_2_5085
+.globl sym_2_5086
+sym_2_5086: la $2, sym_2_5086
+.globl sym_2_5087
+sym_2_5087: la $2, sym_2_5087
+.globl sym_2_5088
+sym_2_5088: la $2, sym_2_5088
+.globl sym_2_5089
+sym_2_5089: la $2, sym_2_5089
+.globl sym_2_5090
+sym_2_5090: la $2, sym_2_5090
+.globl sym_2_5091
+sym_2_5091: la $2, sym_2_5091
+.globl sym_2_5092
+sym_2_5092: la $2, sym_2_5092
+.globl sym_2_5093
+sym_2_5093: la $2, sym_2_5093
+.globl sym_2_5094
+sym_2_5094: la $2, sym_2_5094
+.globl sym_2_5095
+sym_2_5095: la $2, sym_2_5095
+.globl sym_2_5096
+sym_2_5096: la $2, sym_2_5096
+.globl sym_2_5097
+sym_2_5097: la $2, sym_2_5097
+.globl sym_2_5098
+sym_2_5098: la $2, sym_2_5098
+.globl sym_2_5099
+sym_2_5099: la $2, sym_2_5099
+.globl sym_2_5100
+sym_2_5100: la $2, sym_2_5100
+.globl sym_2_5101
+sym_2_5101: la $2, sym_2_5101
+.globl sym_2_5102
+sym_2_5102: la $2, sym_2_5102
+.globl sym_2_5103
+sym_2_5103: la $2, sym_2_5103
+.globl sym_2_5104
+sym_2_5104: la $2, sym_2_5104
+.globl sym_2_5105
+sym_2_5105: la $2, sym_2_5105
+.globl sym_2_5106
+sym_2_5106: la $2, sym_2_5106
+.globl sym_2_5107
+sym_2_5107: la $2, sym_2_5107
+.globl sym_2_5108
+sym_2_5108: la $2, sym_2_5108
+.globl sym_2_5109
+sym_2_5109: la $2, sym_2_5109
+.globl sym_2_5110
+sym_2_5110: la $2, sym_2_5110
+.globl sym_2_5111
+sym_2_5111: la $2, sym_2_5111
+.globl sym_2_5112
+sym_2_5112: la $2, sym_2_5112
+.globl sym_2_5113
+sym_2_5113: la $2, sym_2_5113
+.globl sym_2_5114
+sym_2_5114: la $2, sym_2_5114
+.globl sym_2_5115
+sym_2_5115: la $2, sym_2_5115
+.globl sym_2_5116
+sym_2_5116: la $2, sym_2_5116
+.globl sym_2_5117
+sym_2_5117: la $2, sym_2_5117
+.globl sym_2_5118
+sym_2_5118: la $2, sym_2_5118
+.globl sym_2_5119
+sym_2_5119: la $2, sym_2_5119
+.globl sym_2_5120
+sym_2_5120: la $2, sym_2_5120
+.globl sym_2_5121
+sym_2_5121: la $2, sym_2_5121
+.globl sym_2_5122
+sym_2_5122: la $2, sym_2_5122
+.globl sym_2_5123
+sym_2_5123: la $2, sym_2_5123
+.globl sym_2_5124
+sym_2_5124: la $2, sym_2_5124
+.globl sym_2_5125
+sym_2_5125: la $2, sym_2_5125
+.globl sym_2_5126
+sym_2_5126: la $2, sym_2_5126
+.globl sym_2_5127
+sym_2_5127: la $2, sym_2_5127
+.globl sym_2_5128
+sym_2_5128: la $2, sym_2_5128
+.globl sym_2_5129
+sym_2_5129: la $2, sym_2_5129
+.globl sym_2_5130
+sym_2_5130: la $2, sym_2_5130
+.globl sym_2_5131
+sym_2_5131: la $2, sym_2_5131
+.globl sym_2_5132
+sym_2_5132: la $2, sym_2_5132
+.globl sym_2_5133
+sym_2_5133: la $2, sym_2_5133
+.globl sym_2_5134
+sym_2_5134: la $2, sym_2_5134
+.globl sym_2_5135
+sym_2_5135: la $2, sym_2_5135
+.globl sym_2_5136
+sym_2_5136: la $2, sym_2_5136
+.globl sym_2_5137
+sym_2_5137: la $2, sym_2_5137
+.globl sym_2_5138
+sym_2_5138: la $2, sym_2_5138
+.globl sym_2_5139
+sym_2_5139: la $2, sym_2_5139
+.globl sym_2_5140
+sym_2_5140: la $2, sym_2_5140
+.globl sym_2_5141
+sym_2_5141: la $2, sym_2_5141
+.globl sym_2_5142
+sym_2_5142: la $2, sym_2_5142
+.globl sym_2_5143
+sym_2_5143: la $2, sym_2_5143
+.globl sym_2_5144
+sym_2_5144: la $2, sym_2_5144
+.globl sym_2_5145
+sym_2_5145: la $2, sym_2_5145
+.globl sym_2_5146
+sym_2_5146: la $2, sym_2_5146
+.globl sym_2_5147
+sym_2_5147: la $2, sym_2_5147
+.globl sym_2_5148
+sym_2_5148: la $2, sym_2_5148
+.globl sym_2_5149
+sym_2_5149: la $2, sym_2_5149
+.globl sym_2_5150
+sym_2_5150: la $2, sym_2_5150
+.globl sym_2_5151
+sym_2_5151: la $2, sym_2_5151
+.globl sym_2_5152
+sym_2_5152: la $2, sym_2_5152
+.globl sym_2_5153
+sym_2_5153: la $2, sym_2_5153
+.globl sym_2_5154
+sym_2_5154: la $2, sym_2_5154
+.globl sym_2_5155
+sym_2_5155: la $2, sym_2_5155
+.globl sym_2_5156
+sym_2_5156: la $2, sym_2_5156
+.globl sym_2_5157
+sym_2_5157: la $2, sym_2_5157
+.globl sym_2_5158
+sym_2_5158: la $2, sym_2_5158
+.globl sym_2_5159
+sym_2_5159: la $2, sym_2_5159
+.globl sym_2_5160
+sym_2_5160: la $2, sym_2_5160
+.globl sym_2_5161
+sym_2_5161: la $2, sym_2_5161
+.globl sym_2_5162
+sym_2_5162: la $2, sym_2_5162
+.globl sym_2_5163
+sym_2_5163: la $2, sym_2_5163
+.globl sym_2_5164
+sym_2_5164: la $2, sym_2_5164
+.globl sym_2_5165
+sym_2_5165: la $2, sym_2_5165
+.globl sym_2_5166
+sym_2_5166: la $2, sym_2_5166
+.globl sym_2_5167
+sym_2_5167: la $2, sym_2_5167
+.globl sym_2_5168
+sym_2_5168: la $2, sym_2_5168
+.globl sym_2_5169
+sym_2_5169: la $2, sym_2_5169
+.globl sym_2_5170
+sym_2_5170: la $2, sym_2_5170
+.globl sym_2_5171
+sym_2_5171: la $2, sym_2_5171
+.globl sym_2_5172
+sym_2_5172: la $2, sym_2_5172
+.globl sym_2_5173
+sym_2_5173: la $2, sym_2_5173
+.globl sym_2_5174
+sym_2_5174: la $2, sym_2_5174
+.globl sym_2_5175
+sym_2_5175: la $2, sym_2_5175
+.globl sym_2_5176
+sym_2_5176: la $2, sym_2_5176
+.globl sym_2_5177
+sym_2_5177: la $2, sym_2_5177
+.globl sym_2_5178
+sym_2_5178: la $2, sym_2_5178
+.globl sym_2_5179
+sym_2_5179: la $2, sym_2_5179
+.globl sym_2_5180
+sym_2_5180: la $2, sym_2_5180
+.globl sym_2_5181
+sym_2_5181: la $2, sym_2_5181
+.globl sym_2_5182
+sym_2_5182: la $2, sym_2_5182
+.globl sym_2_5183
+sym_2_5183: la $2, sym_2_5183
+.globl sym_2_5184
+sym_2_5184: la $2, sym_2_5184
+.globl sym_2_5185
+sym_2_5185: la $2, sym_2_5185
+.globl sym_2_5186
+sym_2_5186: la $2, sym_2_5186
+.globl sym_2_5187
+sym_2_5187: la $2, sym_2_5187
+.globl sym_2_5188
+sym_2_5188: la $2, sym_2_5188
+.globl sym_2_5189
+sym_2_5189: la $2, sym_2_5189
+.globl sym_2_5190
+sym_2_5190: la $2, sym_2_5190
+.globl sym_2_5191
+sym_2_5191: la $2, sym_2_5191
+.globl sym_2_5192
+sym_2_5192: la $2, sym_2_5192
+.globl sym_2_5193
+sym_2_5193: la $2, sym_2_5193
+.globl sym_2_5194
+sym_2_5194: la $2, sym_2_5194
+.globl sym_2_5195
+sym_2_5195: la $2, sym_2_5195
+.globl sym_2_5196
+sym_2_5196: la $2, sym_2_5196
+.globl sym_2_5197
+sym_2_5197: la $2, sym_2_5197
+.globl sym_2_5198
+sym_2_5198: la $2, sym_2_5198
+.globl sym_2_5199
+sym_2_5199: la $2, sym_2_5199
+.globl sym_2_5200
+sym_2_5200: la $2, sym_2_5200
+.globl sym_2_5201
+sym_2_5201: la $2, sym_2_5201
+.globl sym_2_5202
+sym_2_5202: la $2, sym_2_5202
+.globl sym_2_5203
+sym_2_5203: la $2, sym_2_5203
+.globl sym_2_5204
+sym_2_5204: la $2, sym_2_5204
+.globl sym_2_5205
+sym_2_5205: la $2, sym_2_5205
+.globl sym_2_5206
+sym_2_5206: la $2, sym_2_5206
+.globl sym_2_5207
+sym_2_5207: la $2, sym_2_5207
+.globl sym_2_5208
+sym_2_5208: la $2, sym_2_5208
+.globl sym_2_5209
+sym_2_5209: la $2, sym_2_5209
+.globl sym_2_5210
+sym_2_5210: la $2, sym_2_5210
+.globl sym_2_5211
+sym_2_5211: la $2, sym_2_5211
+.globl sym_2_5212
+sym_2_5212: la $2, sym_2_5212
+.globl sym_2_5213
+sym_2_5213: la $2, sym_2_5213
+.globl sym_2_5214
+sym_2_5214: la $2, sym_2_5214
+.globl sym_2_5215
+sym_2_5215: la $2, sym_2_5215
+.globl sym_2_5216
+sym_2_5216: la $2, sym_2_5216
+.globl sym_2_5217
+sym_2_5217: la $2, sym_2_5217
+.globl sym_2_5218
+sym_2_5218: la $2, sym_2_5218
+.globl sym_2_5219
+sym_2_5219: la $2, sym_2_5219
+.globl sym_2_5220
+sym_2_5220: la $2, sym_2_5220
+.globl sym_2_5221
+sym_2_5221: la $2, sym_2_5221
+.globl sym_2_5222
+sym_2_5222: la $2, sym_2_5222
+.globl sym_2_5223
+sym_2_5223: la $2, sym_2_5223
+.globl sym_2_5224
+sym_2_5224: la $2, sym_2_5224
+.globl sym_2_5225
+sym_2_5225: la $2, sym_2_5225
+.globl sym_2_5226
+sym_2_5226: la $2, sym_2_5226
+.globl sym_2_5227
+sym_2_5227: la $2, sym_2_5227
+.globl sym_2_5228
+sym_2_5228: la $2, sym_2_5228
+.globl sym_2_5229
+sym_2_5229: la $2, sym_2_5229
+.globl sym_2_5230
+sym_2_5230: la $2, sym_2_5230
+.globl sym_2_5231
+sym_2_5231: la $2, sym_2_5231
+.globl sym_2_5232
+sym_2_5232: la $2, sym_2_5232
+.globl sym_2_5233
+sym_2_5233: la $2, sym_2_5233
+.globl sym_2_5234
+sym_2_5234: la $2, sym_2_5234
+.globl sym_2_5235
+sym_2_5235: la $2, sym_2_5235
+.globl sym_2_5236
+sym_2_5236: la $2, sym_2_5236
+.globl sym_2_5237
+sym_2_5237: la $2, sym_2_5237
+.globl sym_2_5238
+sym_2_5238: la $2, sym_2_5238
+.globl sym_2_5239
+sym_2_5239: la $2, sym_2_5239
+.globl sym_2_5240
+sym_2_5240: la $2, sym_2_5240
+.globl sym_2_5241
+sym_2_5241: la $2, sym_2_5241
+.globl sym_2_5242
+sym_2_5242: la $2, sym_2_5242
+.globl sym_2_5243
+sym_2_5243: la $2, sym_2_5243
+.globl sym_2_5244
+sym_2_5244: la $2, sym_2_5244
+.globl sym_2_5245
+sym_2_5245: la $2, sym_2_5245
+.globl sym_2_5246
+sym_2_5246: la $2, sym_2_5246
+.globl sym_2_5247
+sym_2_5247: la $2, sym_2_5247
+.globl sym_2_5248
+sym_2_5248: la $2, sym_2_5248
+.globl sym_2_5249
+sym_2_5249: la $2, sym_2_5249
+.globl sym_2_5250
+sym_2_5250: la $2, sym_2_5250
+.globl sym_2_5251
+sym_2_5251: la $2, sym_2_5251
+.globl sym_2_5252
+sym_2_5252: la $2, sym_2_5252
+.globl sym_2_5253
+sym_2_5253: la $2, sym_2_5253
+.globl sym_2_5254
+sym_2_5254: la $2, sym_2_5254
+.globl sym_2_5255
+sym_2_5255: la $2, sym_2_5255
+.globl sym_2_5256
+sym_2_5256: la $2, sym_2_5256
+.globl sym_2_5257
+sym_2_5257: la $2, sym_2_5257
+.globl sym_2_5258
+sym_2_5258: la $2, sym_2_5258
+.globl sym_2_5259
+sym_2_5259: la $2, sym_2_5259
+.globl sym_2_5260
+sym_2_5260: la $2, sym_2_5260
+.globl sym_2_5261
+sym_2_5261: la $2, sym_2_5261
+.globl sym_2_5262
+sym_2_5262: la $2, sym_2_5262
+.globl sym_2_5263
+sym_2_5263: la $2, sym_2_5263
+.globl sym_2_5264
+sym_2_5264: la $2, sym_2_5264
+.globl sym_2_5265
+sym_2_5265: la $2, sym_2_5265
+.globl sym_2_5266
+sym_2_5266: la $2, sym_2_5266
+.globl sym_2_5267
+sym_2_5267: la $2, sym_2_5267
+.globl sym_2_5268
+sym_2_5268: la $2, sym_2_5268
+.globl sym_2_5269
+sym_2_5269: la $2, sym_2_5269
+.globl sym_2_5270
+sym_2_5270: la $2, sym_2_5270
+.globl sym_2_5271
+sym_2_5271: la $2, sym_2_5271
+.globl sym_2_5272
+sym_2_5272: la $2, sym_2_5272
+.globl sym_2_5273
+sym_2_5273: la $2, sym_2_5273
+.globl sym_2_5274
+sym_2_5274: la $2, sym_2_5274
+.globl sym_2_5275
+sym_2_5275: la $2, sym_2_5275
+.globl sym_2_5276
+sym_2_5276: la $2, sym_2_5276
+.globl sym_2_5277
+sym_2_5277: la $2, sym_2_5277
+.globl sym_2_5278
+sym_2_5278: la $2, sym_2_5278
+.globl sym_2_5279
+sym_2_5279: la $2, sym_2_5279
+.globl sym_2_5280
+sym_2_5280: la $2, sym_2_5280
+.globl sym_2_5281
+sym_2_5281: la $2, sym_2_5281
+.globl sym_2_5282
+sym_2_5282: la $2, sym_2_5282
+.globl sym_2_5283
+sym_2_5283: la $2, sym_2_5283
+.globl sym_2_5284
+sym_2_5284: la $2, sym_2_5284
+.globl sym_2_5285
+sym_2_5285: la $2, sym_2_5285
+.globl sym_2_5286
+sym_2_5286: la $2, sym_2_5286
+.globl sym_2_5287
+sym_2_5287: la $2, sym_2_5287
+.globl sym_2_5288
+sym_2_5288: la $2, sym_2_5288
+.globl sym_2_5289
+sym_2_5289: la $2, sym_2_5289
+.globl sym_2_5290
+sym_2_5290: la $2, sym_2_5290
+.globl sym_2_5291
+sym_2_5291: la $2, sym_2_5291
+.globl sym_2_5292
+sym_2_5292: la $2, sym_2_5292
+.globl sym_2_5293
+sym_2_5293: la $2, sym_2_5293
+.globl sym_2_5294
+sym_2_5294: la $2, sym_2_5294
+.globl sym_2_5295
+sym_2_5295: la $2, sym_2_5295
+.globl sym_2_5296
+sym_2_5296: la $2, sym_2_5296
+.globl sym_2_5297
+sym_2_5297: la $2, sym_2_5297
+.globl sym_2_5298
+sym_2_5298: la $2, sym_2_5298
+.globl sym_2_5299
+sym_2_5299: la $2, sym_2_5299
+.globl sym_2_5300
+sym_2_5300: la $2, sym_2_5300
+.globl sym_2_5301
+sym_2_5301: la $2, sym_2_5301
+.globl sym_2_5302
+sym_2_5302: la $2, sym_2_5302
+.globl sym_2_5303
+sym_2_5303: la $2, sym_2_5303
+.globl sym_2_5304
+sym_2_5304: la $2, sym_2_5304
+.globl sym_2_5305
+sym_2_5305: la $2, sym_2_5305
+.globl sym_2_5306
+sym_2_5306: la $2, sym_2_5306
+.globl sym_2_5307
+sym_2_5307: la $2, sym_2_5307
+.globl sym_2_5308
+sym_2_5308: la $2, sym_2_5308
+.globl sym_2_5309
+sym_2_5309: la $2, sym_2_5309
+.globl sym_2_5310
+sym_2_5310: la $2, sym_2_5310
+.globl sym_2_5311
+sym_2_5311: la $2, sym_2_5311
+.globl sym_2_5312
+sym_2_5312: la $2, sym_2_5312
+.globl sym_2_5313
+sym_2_5313: la $2, sym_2_5313
+.globl sym_2_5314
+sym_2_5314: la $2, sym_2_5314
+.globl sym_2_5315
+sym_2_5315: la $2, sym_2_5315
+.globl sym_2_5316
+sym_2_5316: la $2, sym_2_5316
+.globl sym_2_5317
+sym_2_5317: la $2, sym_2_5317
+.globl sym_2_5318
+sym_2_5318: la $2, sym_2_5318
+.globl sym_2_5319
+sym_2_5319: la $2, sym_2_5319
+.globl sym_2_5320
+sym_2_5320: la $2, sym_2_5320
+.globl sym_2_5321
+sym_2_5321: la $2, sym_2_5321
+.globl sym_2_5322
+sym_2_5322: la $2, sym_2_5322
+.globl sym_2_5323
+sym_2_5323: la $2, sym_2_5323
+.globl sym_2_5324
+sym_2_5324: la $2, sym_2_5324
+.globl sym_2_5325
+sym_2_5325: la $2, sym_2_5325
+.globl sym_2_5326
+sym_2_5326: la $2, sym_2_5326
+.globl sym_2_5327
+sym_2_5327: la $2, sym_2_5327
+.globl sym_2_5328
+sym_2_5328: la $2, sym_2_5328
+.globl sym_2_5329
+sym_2_5329: la $2, sym_2_5329
+.globl sym_2_5330
+sym_2_5330: la $2, sym_2_5330
+.globl sym_2_5331
+sym_2_5331: la $2, sym_2_5331
+.globl sym_2_5332
+sym_2_5332: la $2, sym_2_5332
+.globl sym_2_5333
+sym_2_5333: la $2, sym_2_5333
+.globl sym_2_5334
+sym_2_5334: la $2, sym_2_5334
+.globl sym_2_5335
+sym_2_5335: la $2, sym_2_5335
+.globl sym_2_5336
+sym_2_5336: la $2, sym_2_5336
+.globl sym_2_5337
+sym_2_5337: la $2, sym_2_5337
+.globl sym_2_5338
+sym_2_5338: la $2, sym_2_5338
+.globl sym_2_5339
+sym_2_5339: la $2, sym_2_5339
+.globl sym_2_5340
+sym_2_5340: la $2, sym_2_5340
+.globl sym_2_5341
+sym_2_5341: la $2, sym_2_5341
+.globl sym_2_5342
+sym_2_5342: la $2, sym_2_5342
+.globl sym_2_5343
+sym_2_5343: la $2, sym_2_5343
+.globl sym_2_5344
+sym_2_5344: la $2, sym_2_5344
+.globl sym_2_5345
+sym_2_5345: la $2, sym_2_5345
+.globl sym_2_5346
+sym_2_5346: la $2, sym_2_5346
+.globl sym_2_5347
+sym_2_5347: la $2, sym_2_5347
+.globl sym_2_5348
+sym_2_5348: la $2, sym_2_5348
+.globl sym_2_5349
+sym_2_5349: la $2, sym_2_5349
+.globl sym_2_5350
+sym_2_5350: la $2, sym_2_5350
+.globl sym_2_5351
+sym_2_5351: la $2, sym_2_5351
+.globl sym_2_5352
+sym_2_5352: la $2, sym_2_5352
+.globl sym_2_5353
+sym_2_5353: la $2, sym_2_5353
+.globl sym_2_5354
+sym_2_5354: la $2, sym_2_5354
+.globl sym_2_5355
+sym_2_5355: la $2, sym_2_5355
+.globl sym_2_5356
+sym_2_5356: la $2, sym_2_5356
+.globl sym_2_5357
+sym_2_5357: la $2, sym_2_5357
+.globl sym_2_5358
+sym_2_5358: la $2, sym_2_5358
+.globl sym_2_5359
+sym_2_5359: la $2, sym_2_5359
+.globl sym_2_5360
+sym_2_5360: la $2, sym_2_5360
+.globl sym_2_5361
+sym_2_5361: la $2, sym_2_5361
+.globl sym_2_5362
+sym_2_5362: la $2, sym_2_5362
+.globl sym_2_5363
+sym_2_5363: la $2, sym_2_5363
+.globl sym_2_5364
+sym_2_5364: la $2, sym_2_5364
+.globl sym_2_5365
+sym_2_5365: la $2, sym_2_5365
+.globl sym_2_5366
+sym_2_5366: la $2, sym_2_5366
+.globl sym_2_5367
+sym_2_5367: la $2, sym_2_5367
+.globl sym_2_5368
+sym_2_5368: la $2, sym_2_5368
+.globl sym_2_5369
+sym_2_5369: la $2, sym_2_5369
+.globl sym_2_5370
+sym_2_5370: la $2, sym_2_5370
+.globl sym_2_5371
+sym_2_5371: la $2, sym_2_5371
+.globl sym_2_5372
+sym_2_5372: la $2, sym_2_5372
+.globl sym_2_5373
+sym_2_5373: la $2, sym_2_5373
+.globl sym_2_5374
+sym_2_5374: la $2, sym_2_5374
+.globl sym_2_5375
+sym_2_5375: la $2, sym_2_5375
+.globl sym_2_5376
+sym_2_5376: la $2, sym_2_5376
+.globl sym_2_5377
+sym_2_5377: la $2, sym_2_5377
+.globl sym_2_5378
+sym_2_5378: la $2, sym_2_5378
+.globl sym_2_5379
+sym_2_5379: la $2, sym_2_5379
+.globl sym_2_5380
+sym_2_5380: la $2, sym_2_5380
+.globl sym_2_5381
+sym_2_5381: la $2, sym_2_5381
+.globl sym_2_5382
+sym_2_5382: la $2, sym_2_5382
+.globl sym_2_5383
+sym_2_5383: la $2, sym_2_5383
+.globl sym_2_5384
+sym_2_5384: la $2, sym_2_5384
+.globl sym_2_5385
+sym_2_5385: la $2, sym_2_5385
+.globl sym_2_5386
+sym_2_5386: la $2, sym_2_5386
+.globl sym_2_5387
+sym_2_5387: la $2, sym_2_5387
+.globl sym_2_5388
+sym_2_5388: la $2, sym_2_5388
+.globl sym_2_5389
+sym_2_5389: la $2, sym_2_5389
+.globl sym_2_5390
+sym_2_5390: la $2, sym_2_5390
+.globl sym_2_5391
+sym_2_5391: la $2, sym_2_5391
+.globl sym_2_5392
+sym_2_5392: la $2, sym_2_5392
+.globl sym_2_5393
+sym_2_5393: la $2, sym_2_5393
+.globl sym_2_5394
+sym_2_5394: la $2, sym_2_5394
+.globl sym_2_5395
+sym_2_5395: la $2, sym_2_5395
+.globl sym_2_5396
+sym_2_5396: la $2, sym_2_5396
+.globl sym_2_5397
+sym_2_5397: la $2, sym_2_5397
+.globl sym_2_5398
+sym_2_5398: la $2, sym_2_5398
+.globl sym_2_5399
+sym_2_5399: la $2, sym_2_5399
+.globl sym_2_5400
+sym_2_5400: la $2, sym_2_5400
+.globl sym_2_5401
+sym_2_5401: la $2, sym_2_5401
+.globl sym_2_5402
+sym_2_5402: la $2, sym_2_5402
+.globl sym_2_5403
+sym_2_5403: la $2, sym_2_5403
+.globl sym_2_5404
+sym_2_5404: la $2, sym_2_5404
+.globl sym_2_5405
+sym_2_5405: la $2, sym_2_5405
+.globl sym_2_5406
+sym_2_5406: la $2, sym_2_5406
+.globl sym_2_5407
+sym_2_5407: la $2, sym_2_5407
+.globl sym_2_5408
+sym_2_5408: la $2, sym_2_5408
+.globl sym_2_5409
+sym_2_5409: la $2, sym_2_5409
+.globl sym_2_5410
+sym_2_5410: la $2, sym_2_5410
+.globl sym_2_5411
+sym_2_5411: la $2, sym_2_5411
+.globl sym_2_5412
+sym_2_5412: la $2, sym_2_5412
+.globl sym_2_5413
+sym_2_5413: la $2, sym_2_5413
+.globl sym_2_5414
+sym_2_5414: la $2, sym_2_5414
+.globl sym_2_5415
+sym_2_5415: la $2, sym_2_5415
+.globl sym_2_5416
+sym_2_5416: la $2, sym_2_5416
+.globl sym_2_5417
+sym_2_5417: la $2, sym_2_5417
+.globl sym_2_5418
+sym_2_5418: la $2, sym_2_5418
+.globl sym_2_5419
+sym_2_5419: la $2, sym_2_5419
+.globl sym_2_5420
+sym_2_5420: la $2, sym_2_5420
+.globl sym_2_5421
+sym_2_5421: la $2, sym_2_5421
+.globl sym_2_5422
+sym_2_5422: la $2, sym_2_5422
+.globl sym_2_5423
+sym_2_5423: la $2, sym_2_5423
+.globl sym_2_5424
+sym_2_5424: la $2, sym_2_5424
+.globl sym_2_5425
+sym_2_5425: la $2, sym_2_5425
+.globl sym_2_5426
+sym_2_5426: la $2, sym_2_5426
+.globl sym_2_5427
+sym_2_5427: la $2, sym_2_5427
+.globl sym_2_5428
+sym_2_5428: la $2, sym_2_5428
+.globl sym_2_5429
+sym_2_5429: la $2, sym_2_5429
+.globl sym_2_5430
+sym_2_5430: la $2, sym_2_5430
+.globl sym_2_5431
+sym_2_5431: la $2, sym_2_5431
+.globl sym_2_5432
+sym_2_5432: la $2, sym_2_5432
+.globl sym_2_5433
+sym_2_5433: la $2, sym_2_5433
+.globl sym_2_5434
+sym_2_5434: la $2, sym_2_5434
+.globl sym_2_5435
+sym_2_5435: la $2, sym_2_5435
+.globl sym_2_5436
+sym_2_5436: la $2, sym_2_5436
+.globl sym_2_5437
+sym_2_5437: la $2, sym_2_5437
+.globl sym_2_5438
+sym_2_5438: la $2, sym_2_5438
+.globl sym_2_5439
+sym_2_5439: la $2, sym_2_5439
+.globl sym_2_5440
+sym_2_5440: la $2, sym_2_5440
+.globl sym_2_5441
+sym_2_5441: la $2, sym_2_5441
+.globl sym_2_5442
+sym_2_5442: la $2, sym_2_5442
+.globl sym_2_5443
+sym_2_5443: la $2, sym_2_5443
+.globl sym_2_5444
+sym_2_5444: la $2, sym_2_5444
+.globl sym_2_5445
+sym_2_5445: la $2, sym_2_5445
+.globl sym_2_5446
+sym_2_5446: la $2, sym_2_5446
+.globl sym_2_5447
+sym_2_5447: la $2, sym_2_5447
+.globl sym_2_5448
+sym_2_5448: la $2, sym_2_5448
+.globl sym_2_5449
+sym_2_5449: la $2, sym_2_5449
+.globl sym_2_5450
+sym_2_5450: la $2, sym_2_5450
+.globl sym_2_5451
+sym_2_5451: la $2, sym_2_5451
+.globl sym_2_5452
+sym_2_5452: la $2, sym_2_5452
+.globl sym_2_5453
+sym_2_5453: la $2, sym_2_5453
+.globl sym_2_5454
+sym_2_5454: la $2, sym_2_5454
+.globl sym_2_5455
+sym_2_5455: la $2, sym_2_5455
+.globl sym_2_5456
+sym_2_5456: la $2, sym_2_5456
+.globl sym_2_5457
+sym_2_5457: la $2, sym_2_5457
+.globl sym_2_5458
+sym_2_5458: la $2, sym_2_5458
+.globl sym_2_5459
+sym_2_5459: la $2, sym_2_5459
+.globl sym_2_5460
+sym_2_5460: la $2, sym_2_5460
+.globl sym_2_5461
+sym_2_5461: la $2, sym_2_5461
+.globl sym_2_5462
+sym_2_5462: la $2, sym_2_5462
+.globl sym_2_5463
+sym_2_5463: la $2, sym_2_5463
+.globl sym_2_5464
+sym_2_5464: la $2, sym_2_5464
+.globl sym_2_5465
+sym_2_5465: la $2, sym_2_5465
+.globl sym_2_5466
+sym_2_5466: la $2, sym_2_5466
+.globl sym_2_5467
+sym_2_5467: la $2, sym_2_5467
+.globl sym_2_5468
+sym_2_5468: la $2, sym_2_5468
+.globl sym_2_5469
+sym_2_5469: la $2, sym_2_5469
+.globl sym_2_5470
+sym_2_5470: la $2, sym_2_5470
+.globl sym_2_5471
+sym_2_5471: la $2, sym_2_5471
+.globl sym_2_5472
+sym_2_5472: la $2, sym_2_5472
+.globl sym_2_5473
+sym_2_5473: la $2, sym_2_5473
+.globl sym_2_5474
+sym_2_5474: la $2, sym_2_5474
+.globl sym_2_5475
+sym_2_5475: la $2, sym_2_5475
+.globl sym_2_5476
+sym_2_5476: la $2, sym_2_5476
+.globl sym_2_5477
+sym_2_5477: la $2, sym_2_5477
+.globl sym_2_5478
+sym_2_5478: la $2, sym_2_5478
+.globl sym_2_5479
+sym_2_5479: la $2, sym_2_5479
+.globl sym_2_5480
+sym_2_5480: la $2, sym_2_5480
+.globl sym_2_5481
+sym_2_5481: la $2, sym_2_5481
+.globl sym_2_5482
+sym_2_5482: la $2, sym_2_5482
+.globl sym_2_5483
+sym_2_5483: la $2, sym_2_5483
+.globl sym_2_5484
+sym_2_5484: la $2, sym_2_5484
+.globl sym_2_5485
+sym_2_5485: la $2, sym_2_5485
+.globl sym_2_5486
+sym_2_5486: la $2, sym_2_5486
+.globl sym_2_5487
+sym_2_5487: la $2, sym_2_5487
+.globl sym_2_5488
+sym_2_5488: la $2, sym_2_5488
+.globl sym_2_5489
+sym_2_5489: la $2, sym_2_5489
+.globl sym_2_5490
+sym_2_5490: la $2, sym_2_5490
+.globl sym_2_5491
+sym_2_5491: la $2, sym_2_5491
+.globl sym_2_5492
+sym_2_5492: la $2, sym_2_5492
+.globl sym_2_5493
+sym_2_5493: la $2, sym_2_5493
+.globl sym_2_5494
+sym_2_5494: la $2, sym_2_5494
+.globl sym_2_5495
+sym_2_5495: la $2, sym_2_5495
+.globl sym_2_5496
+sym_2_5496: la $2, sym_2_5496
+.globl sym_2_5497
+sym_2_5497: la $2, sym_2_5497
+.globl sym_2_5498
+sym_2_5498: la $2, sym_2_5498
+.globl sym_2_5499
+sym_2_5499: la $2, sym_2_5499
+.globl sym_2_5500
+sym_2_5500: la $2, sym_2_5500
+.globl sym_2_5501
+sym_2_5501: la $2, sym_2_5501
+.globl sym_2_5502
+sym_2_5502: la $2, sym_2_5502
+.globl sym_2_5503
+sym_2_5503: la $2, sym_2_5503
+.globl sym_2_5504
+sym_2_5504: la $2, sym_2_5504
+.globl sym_2_5505
+sym_2_5505: la $2, sym_2_5505
+.globl sym_2_5506
+sym_2_5506: la $2, sym_2_5506
+.globl sym_2_5507
+sym_2_5507: la $2, sym_2_5507
+.globl sym_2_5508
+sym_2_5508: la $2, sym_2_5508
+.globl sym_2_5509
+sym_2_5509: la $2, sym_2_5509
+.globl sym_2_5510
+sym_2_5510: la $2, sym_2_5510
+.globl sym_2_5511
+sym_2_5511: la $2, sym_2_5511
+.globl sym_2_5512
+sym_2_5512: la $2, sym_2_5512
+.globl sym_2_5513
+sym_2_5513: la $2, sym_2_5513
+.globl sym_2_5514
+sym_2_5514: la $2, sym_2_5514
+.globl sym_2_5515
+sym_2_5515: la $2, sym_2_5515
+.globl sym_2_5516
+sym_2_5516: la $2, sym_2_5516
+.globl sym_2_5517
+sym_2_5517: la $2, sym_2_5517
+.globl sym_2_5518
+sym_2_5518: la $2, sym_2_5518
+.globl sym_2_5519
+sym_2_5519: la $2, sym_2_5519
+.globl sym_2_5520
+sym_2_5520: la $2, sym_2_5520
+.globl sym_2_5521
+sym_2_5521: la $2, sym_2_5521
+.globl sym_2_5522
+sym_2_5522: la $2, sym_2_5522
+.globl sym_2_5523
+sym_2_5523: la $2, sym_2_5523
+.globl sym_2_5524
+sym_2_5524: la $2, sym_2_5524
+.globl sym_2_5525
+sym_2_5525: la $2, sym_2_5525
+.globl sym_2_5526
+sym_2_5526: la $2, sym_2_5526
+.globl sym_2_5527
+sym_2_5527: la $2, sym_2_5527
+.globl sym_2_5528
+sym_2_5528: la $2, sym_2_5528
+.globl sym_2_5529
+sym_2_5529: la $2, sym_2_5529
+.globl sym_2_5530
+sym_2_5530: la $2, sym_2_5530
+.globl sym_2_5531
+sym_2_5531: la $2, sym_2_5531
+.globl sym_2_5532
+sym_2_5532: la $2, sym_2_5532
+.globl sym_2_5533
+sym_2_5533: la $2, sym_2_5533
+.globl sym_2_5534
+sym_2_5534: la $2, sym_2_5534
+.globl sym_2_5535
+sym_2_5535: la $2, sym_2_5535
+.globl sym_2_5536
+sym_2_5536: la $2, sym_2_5536
+.globl sym_2_5537
+sym_2_5537: la $2, sym_2_5537
+.globl sym_2_5538
+sym_2_5538: la $2, sym_2_5538
+.globl sym_2_5539
+sym_2_5539: la $2, sym_2_5539
+.globl sym_2_5540
+sym_2_5540: la $2, sym_2_5540
+.globl sym_2_5541
+sym_2_5541: la $2, sym_2_5541
+.globl sym_2_5542
+sym_2_5542: la $2, sym_2_5542
+.globl sym_2_5543
+sym_2_5543: la $2, sym_2_5543
+.globl sym_2_5544
+sym_2_5544: la $2, sym_2_5544
+.globl sym_2_5545
+sym_2_5545: la $2, sym_2_5545
+.globl sym_2_5546
+sym_2_5546: la $2, sym_2_5546
+.globl sym_2_5547
+sym_2_5547: la $2, sym_2_5547
+.globl sym_2_5548
+sym_2_5548: la $2, sym_2_5548
+.globl sym_2_5549
+sym_2_5549: la $2, sym_2_5549
+.globl sym_2_5550
+sym_2_5550: la $2, sym_2_5550
+.globl sym_2_5551
+sym_2_5551: la $2, sym_2_5551
+.globl sym_2_5552
+sym_2_5552: la $2, sym_2_5552
+.globl sym_2_5553
+sym_2_5553: la $2, sym_2_5553
+.globl sym_2_5554
+sym_2_5554: la $2, sym_2_5554
+.globl sym_2_5555
+sym_2_5555: la $2, sym_2_5555
+.globl sym_2_5556
+sym_2_5556: la $2, sym_2_5556
+.globl sym_2_5557
+sym_2_5557: la $2, sym_2_5557
+.globl sym_2_5558
+sym_2_5558: la $2, sym_2_5558
+.globl sym_2_5559
+sym_2_5559: la $2, sym_2_5559
+.globl sym_2_5560
+sym_2_5560: la $2, sym_2_5560
+.globl sym_2_5561
+sym_2_5561: la $2, sym_2_5561
+.globl sym_2_5562
+sym_2_5562: la $2, sym_2_5562
+.globl sym_2_5563
+sym_2_5563: la $2, sym_2_5563
+.globl sym_2_5564
+sym_2_5564: la $2, sym_2_5564
+.globl sym_2_5565
+sym_2_5565: la $2, sym_2_5565
+.globl sym_2_5566
+sym_2_5566: la $2, sym_2_5566
+.globl sym_2_5567
+sym_2_5567: la $2, sym_2_5567
+.globl sym_2_5568
+sym_2_5568: la $2, sym_2_5568
+.globl sym_2_5569
+sym_2_5569: la $2, sym_2_5569
+.globl sym_2_5570
+sym_2_5570: la $2, sym_2_5570
+.globl sym_2_5571
+sym_2_5571: la $2, sym_2_5571
+.globl sym_2_5572
+sym_2_5572: la $2, sym_2_5572
+.globl sym_2_5573
+sym_2_5573: la $2, sym_2_5573
+.globl sym_2_5574
+sym_2_5574: la $2, sym_2_5574
+.globl sym_2_5575
+sym_2_5575: la $2, sym_2_5575
+.globl sym_2_5576
+sym_2_5576: la $2, sym_2_5576
+.globl sym_2_5577
+sym_2_5577: la $2, sym_2_5577
+.globl sym_2_5578
+sym_2_5578: la $2, sym_2_5578
+.globl sym_2_5579
+sym_2_5579: la $2, sym_2_5579
+.globl sym_2_5580
+sym_2_5580: la $2, sym_2_5580
+.globl sym_2_5581
+sym_2_5581: la $2, sym_2_5581
+.globl sym_2_5582
+sym_2_5582: la $2, sym_2_5582
+.globl sym_2_5583
+sym_2_5583: la $2, sym_2_5583
+.globl sym_2_5584
+sym_2_5584: la $2, sym_2_5584
+.globl sym_2_5585
+sym_2_5585: la $2, sym_2_5585
+.globl sym_2_5586
+sym_2_5586: la $2, sym_2_5586
+.globl sym_2_5587
+sym_2_5587: la $2, sym_2_5587
+.globl sym_2_5588
+sym_2_5588: la $2, sym_2_5588
+.globl sym_2_5589
+sym_2_5589: la $2, sym_2_5589
+.globl sym_2_5590
+sym_2_5590: la $2, sym_2_5590
+.globl sym_2_5591
+sym_2_5591: la $2, sym_2_5591
+.globl sym_2_5592
+sym_2_5592: la $2, sym_2_5592
+.globl sym_2_5593
+sym_2_5593: la $2, sym_2_5593
+.globl sym_2_5594
+sym_2_5594: la $2, sym_2_5594
+.globl sym_2_5595
+sym_2_5595: la $2, sym_2_5595
+.globl sym_2_5596
+sym_2_5596: la $2, sym_2_5596
+.globl sym_2_5597
+sym_2_5597: la $2, sym_2_5597
+.globl sym_2_5598
+sym_2_5598: la $2, sym_2_5598
+.globl sym_2_5599
+sym_2_5599: la $2, sym_2_5599
+.globl sym_2_5600
+sym_2_5600: la $2, sym_2_5600
+.globl sym_2_5601
+sym_2_5601: la $2, sym_2_5601
+.globl sym_2_5602
+sym_2_5602: la $2, sym_2_5602
+.globl sym_2_5603
+sym_2_5603: la $2, sym_2_5603
+.globl sym_2_5604
+sym_2_5604: la $2, sym_2_5604
+.globl sym_2_5605
+sym_2_5605: la $2, sym_2_5605
+.globl sym_2_5606
+sym_2_5606: la $2, sym_2_5606
+.globl sym_2_5607
+sym_2_5607: la $2, sym_2_5607
+.globl sym_2_5608
+sym_2_5608: la $2, sym_2_5608
+.globl sym_2_5609
+sym_2_5609: la $2, sym_2_5609
+.globl sym_2_5610
+sym_2_5610: la $2, sym_2_5610
+.globl sym_2_5611
+sym_2_5611: la $2, sym_2_5611
+.globl sym_2_5612
+sym_2_5612: la $2, sym_2_5612
+.globl sym_2_5613
+sym_2_5613: la $2, sym_2_5613
+.globl sym_2_5614
+sym_2_5614: la $2, sym_2_5614
+.globl sym_2_5615
+sym_2_5615: la $2, sym_2_5615
+.globl sym_2_5616
+sym_2_5616: la $2, sym_2_5616
+.globl sym_2_5617
+sym_2_5617: la $2, sym_2_5617
+.globl sym_2_5618
+sym_2_5618: la $2, sym_2_5618
+.globl sym_2_5619
+sym_2_5619: la $2, sym_2_5619
+.globl sym_2_5620
+sym_2_5620: la $2, sym_2_5620
+.globl sym_2_5621
+sym_2_5621: la $2, sym_2_5621
+.globl sym_2_5622
+sym_2_5622: la $2, sym_2_5622
+.globl sym_2_5623
+sym_2_5623: la $2, sym_2_5623
+.globl sym_2_5624
+sym_2_5624: la $2, sym_2_5624
+.globl sym_2_5625
+sym_2_5625: la $2, sym_2_5625
+.globl sym_2_5626
+sym_2_5626: la $2, sym_2_5626
+.globl sym_2_5627
+sym_2_5627: la $2, sym_2_5627
+.globl sym_2_5628
+sym_2_5628: la $2, sym_2_5628
+.globl sym_2_5629
+sym_2_5629: la $2, sym_2_5629
+.globl sym_2_5630
+sym_2_5630: la $2, sym_2_5630
+.globl sym_2_5631
+sym_2_5631: la $2, sym_2_5631
+.globl sym_2_5632
+sym_2_5632: la $2, sym_2_5632
+.globl sym_2_5633
+sym_2_5633: la $2, sym_2_5633
+.globl sym_2_5634
+sym_2_5634: la $2, sym_2_5634
+.globl sym_2_5635
+sym_2_5635: la $2, sym_2_5635
+.globl sym_2_5636
+sym_2_5636: la $2, sym_2_5636
+.globl sym_2_5637
+sym_2_5637: la $2, sym_2_5637
+.globl sym_2_5638
+sym_2_5638: la $2, sym_2_5638
+.globl sym_2_5639
+sym_2_5639: la $2, sym_2_5639
+.globl sym_2_5640
+sym_2_5640: la $2, sym_2_5640
+.globl sym_2_5641
+sym_2_5641: la $2, sym_2_5641
+.globl sym_2_5642
+sym_2_5642: la $2, sym_2_5642
+.globl sym_2_5643
+sym_2_5643: la $2, sym_2_5643
+.globl sym_2_5644
+sym_2_5644: la $2, sym_2_5644
+.globl sym_2_5645
+sym_2_5645: la $2, sym_2_5645
+.globl sym_2_5646
+sym_2_5646: la $2, sym_2_5646
+.globl sym_2_5647
+sym_2_5647: la $2, sym_2_5647
+.globl sym_2_5648
+sym_2_5648: la $2, sym_2_5648
+.globl sym_2_5649
+sym_2_5649: la $2, sym_2_5649
+.globl sym_2_5650
+sym_2_5650: la $2, sym_2_5650
+.globl sym_2_5651
+sym_2_5651: la $2, sym_2_5651
+.globl sym_2_5652
+sym_2_5652: la $2, sym_2_5652
+.globl sym_2_5653
+sym_2_5653: la $2, sym_2_5653
+.globl sym_2_5654
+sym_2_5654: la $2, sym_2_5654
+.globl sym_2_5655
+sym_2_5655: la $2, sym_2_5655
+.globl sym_2_5656
+sym_2_5656: la $2, sym_2_5656
+.globl sym_2_5657
+sym_2_5657: la $2, sym_2_5657
+.globl sym_2_5658
+sym_2_5658: la $2, sym_2_5658
+.globl sym_2_5659
+sym_2_5659: la $2, sym_2_5659
+.globl sym_2_5660
+sym_2_5660: la $2, sym_2_5660
+.globl sym_2_5661
+sym_2_5661: la $2, sym_2_5661
+.globl sym_2_5662
+sym_2_5662: la $2, sym_2_5662
+.globl sym_2_5663
+sym_2_5663: la $2, sym_2_5663
+.globl sym_2_5664
+sym_2_5664: la $2, sym_2_5664
+.globl sym_2_5665
+sym_2_5665: la $2, sym_2_5665
+.globl sym_2_5666
+sym_2_5666: la $2, sym_2_5666
+.globl sym_2_5667
+sym_2_5667: la $2, sym_2_5667
+.globl sym_2_5668
+sym_2_5668: la $2, sym_2_5668
+.globl sym_2_5669
+sym_2_5669: la $2, sym_2_5669
+.globl sym_2_5670
+sym_2_5670: la $2, sym_2_5670
+.globl sym_2_5671
+sym_2_5671: la $2, sym_2_5671
+.globl sym_2_5672
+sym_2_5672: la $2, sym_2_5672
+.globl sym_2_5673
+sym_2_5673: la $2, sym_2_5673
+.globl sym_2_5674
+sym_2_5674: la $2, sym_2_5674
+.globl sym_2_5675
+sym_2_5675: la $2, sym_2_5675
+.globl sym_2_5676
+sym_2_5676: la $2, sym_2_5676
+.globl sym_2_5677
+sym_2_5677: la $2, sym_2_5677
+.globl sym_2_5678
+sym_2_5678: la $2, sym_2_5678
+.globl sym_2_5679
+sym_2_5679: la $2, sym_2_5679
+.globl sym_2_5680
+sym_2_5680: la $2, sym_2_5680
+.globl sym_2_5681
+sym_2_5681: la $2, sym_2_5681
+.globl sym_2_5682
+sym_2_5682: la $2, sym_2_5682
+.globl sym_2_5683
+sym_2_5683: la $2, sym_2_5683
+.globl sym_2_5684
+sym_2_5684: la $2, sym_2_5684
+.globl sym_2_5685
+sym_2_5685: la $2, sym_2_5685
+.globl sym_2_5686
+sym_2_5686: la $2, sym_2_5686
+.globl sym_2_5687
+sym_2_5687: la $2, sym_2_5687
+.globl sym_2_5688
+sym_2_5688: la $2, sym_2_5688
+.globl sym_2_5689
+sym_2_5689: la $2, sym_2_5689
+.globl sym_2_5690
+sym_2_5690: la $2, sym_2_5690
+.globl sym_2_5691
+sym_2_5691: la $2, sym_2_5691
+.globl sym_2_5692
+sym_2_5692: la $2, sym_2_5692
+.globl sym_2_5693
+sym_2_5693: la $2, sym_2_5693
+.globl sym_2_5694
+sym_2_5694: la $2, sym_2_5694
+.globl sym_2_5695
+sym_2_5695: la $2, sym_2_5695
+.globl sym_2_5696
+sym_2_5696: la $2, sym_2_5696
+.globl sym_2_5697
+sym_2_5697: la $2, sym_2_5697
+.globl sym_2_5698
+sym_2_5698: la $2, sym_2_5698
+.globl sym_2_5699
+sym_2_5699: la $2, sym_2_5699
+.globl sym_2_5700
+sym_2_5700: la $2, sym_2_5700
+.globl sym_2_5701
+sym_2_5701: la $2, sym_2_5701
+.globl sym_2_5702
+sym_2_5702: la $2, sym_2_5702
+.globl sym_2_5703
+sym_2_5703: la $2, sym_2_5703
+.globl sym_2_5704
+sym_2_5704: la $2, sym_2_5704
+.globl sym_2_5705
+sym_2_5705: la $2, sym_2_5705
+.globl sym_2_5706
+sym_2_5706: la $2, sym_2_5706
+.globl sym_2_5707
+sym_2_5707: la $2, sym_2_5707
+.globl sym_2_5708
+sym_2_5708: la $2, sym_2_5708
+.globl sym_2_5709
+sym_2_5709: la $2, sym_2_5709
+.globl sym_2_5710
+sym_2_5710: la $2, sym_2_5710
+.globl sym_2_5711
+sym_2_5711: la $2, sym_2_5711
+.globl sym_2_5712
+sym_2_5712: la $2, sym_2_5712
+.globl sym_2_5713
+sym_2_5713: la $2, sym_2_5713
+.globl sym_2_5714
+sym_2_5714: la $2, sym_2_5714
+.globl sym_2_5715
+sym_2_5715: la $2, sym_2_5715
+.globl sym_2_5716
+sym_2_5716: la $2, sym_2_5716
+.globl sym_2_5717
+sym_2_5717: la $2, sym_2_5717
+.globl sym_2_5718
+sym_2_5718: la $2, sym_2_5718
+.globl sym_2_5719
+sym_2_5719: la $2, sym_2_5719
+.globl sym_2_5720
+sym_2_5720: la $2, sym_2_5720
+.globl sym_2_5721
+sym_2_5721: la $2, sym_2_5721
+.globl sym_2_5722
+sym_2_5722: la $2, sym_2_5722
+.globl sym_2_5723
+sym_2_5723: la $2, sym_2_5723
+.globl sym_2_5724
+sym_2_5724: la $2, sym_2_5724
+.globl sym_2_5725
+sym_2_5725: la $2, sym_2_5725
+.globl sym_2_5726
+sym_2_5726: la $2, sym_2_5726
+.globl sym_2_5727
+sym_2_5727: la $2, sym_2_5727
+.globl sym_2_5728
+sym_2_5728: la $2, sym_2_5728
+.globl sym_2_5729
+sym_2_5729: la $2, sym_2_5729
+.globl sym_2_5730
+sym_2_5730: la $2, sym_2_5730
+.globl sym_2_5731
+sym_2_5731: la $2, sym_2_5731
+.globl sym_2_5732
+sym_2_5732: la $2, sym_2_5732
+.globl sym_2_5733
+sym_2_5733: la $2, sym_2_5733
+.globl sym_2_5734
+sym_2_5734: la $2, sym_2_5734
+.globl sym_2_5735
+sym_2_5735: la $2, sym_2_5735
+.globl sym_2_5736
+sym_2_5736: la $2, sym_2_5736
+.globl sym_2_5737
+sym_2_5737: la $2, sym_2_5737
+.globl sym_2_5738
+sym_2_5738: la $2, sym_2_5738
+.globl sym_2_5739
+sym_2_5739: la $2, sym_2_5739
+.globl sym_2_5740
+sym_2_5740: la $2, sym_2_5740
+.globl sym_2_5741
+sym_2_5741: la $2, sym_2_5741
+.globl sym_2_5742
+sym_2_5742: la $2, sym_2_5742
+.globl sym_2_5743
+sym_2_5743: la $2, sym_2_5743
+.globl sym_2_5744
+sym_2_5744: la $2, sym_2_5744
+.globl sym_2_5745
+sym_2_5745: la $2, sym_2_5745
+.globl sym_2_5746
+sym_2_5746: la $2, sym_2_5746
+.globl sym_2_5747
+sym_2_5747: la $2, sym_2_5747
+.globl sym_2_5748
+sym_2_5748: la $2, sym_2_5748
+.globl sym_2_5749
+sym_2_5749: la $2, sym_2_5749
+.globl sym_2_5750
+sym_2_5750: la $2, sym_2_5750
+.globl sym_2_5751
+sym_2_5751: la $2, sym_2_5751
+.globl sym_2_5752
+sym_2_5752: la $2, sym_2_5752
+.globl sym_2_5753
+sym_2_5753: la $2, sym_2_5753
+.globl sym_2_5754
+sym_2_5754: la $2, sym_2_5754
+.globl sym_2_5755
+sym_2_5755: la $2, sym_2_5755
+.globl sym_2_5756
+sym_2_5756: la $2, sym_2_5756
+.globl sym_2_5757
+sym_2_5757: la $2, sym_2_5757
+.globl sym_2_5758
+sym_2_5758: la $2, sym_2_5758
+.globl sym_2_5759
+sym_2_5759: la $2, sym_2_5759
+.globl sym_2_5760
+sym_2_5760: la $2, sym_2_5760
+.globl sym_2_5761
+sym_2_5761: la $2, sym_2_5761
+.globl sym_2_5762
+sym_2_5762: la $2, sym_2_5762
+.globl sym_2_5763
+sym_2_5763: la $2, sym_2_5763
+.globl sym_2_5764
+sym_2_5764: la $2, sym_2_5764
+.globl sym_2_5765
+sym_2_5765: la $2, sym_2_5765
+.globl sym_2_5766
+sym_2_5766: la $2, sym_2_5766
+.globl sym_2_5767
+sym_2_5767: la $2, sym_2_5767
+.globl sym_2_5768
+sym_2_5768: la $2, sym_2_5768
+.globl sym_2_5769
+sym_2_5769: la $2, sym_2_5769
+.globl sym_2_5770
+sym_2_5770: la $2, sym_2_5770
+.globl sym_2_5771
+sym_2_5771: la $2, sym_2_5771
+.globl sym_2_5772
+sym_2_5772: la $2, sym_2_5772
+.globl sym_2_5773
+sym_2_5773: la $2, sym_2_5773
+.globl sym_2_5774
+sym_2_5774: la $2, sym_2_5774
+.globl sym_2_5775
+sym_2_5775: la $2, sym_2_5775
+.globl sym_2_5776
+sym_2_5776: la $2, sym_2_5776
+.globl sym_2_5777
+sym_2_5777: la $2, sym_2_5777
+.globl sym_2_5778
+sym_2_5778: la $2, sym_2_5778
+.globl sym_2_5779
+sym_2_5779: la $2, sym_2_5779
+.globl sym_2_5780
+sym_2_5780: la $2, sym_2_5780
+.globl sym_2_5781
+sym_2_5781: la $2, sym_2_5781
+.globl sym_2_5782
+sym_2_5782: la $2, sym_2_5782
+.globl sym_2_5783
+sym_2_5783: la $2, sym_2_5783
+.globl sym_2_5784
+sym_2_5784: la $2, sym_2_5784
+.globl sym_2_5785
+sym_2_5785: la $2, sym_2_5785
+.globl sym_2_5786
+sym_2_5786: la $2, sym_2_5786
+.globl sym_2_5787
+sym_2_5787: la $2, sym_2_5787
+.globl sym_2_5788
+sym_2_5788: la $2, sym_2_5788
+.globl sym_2_5789
+sym_2_5789: la $2, sym_2_5789
+.globl sym_2_5790
+sym_2_5790: la $2, sym_2_5790
+.globl sym_2_5791
+sym_2_5791: la $2, sym_2_5791
+.globl sym_2_5792
+sym_2_5792: la $2, sym_2_5792
+.globl sym_2_5793
+sym_2_5793: la $2, sym_2_5793
+.globl sym_2_5794
+sym_2_5794: la $2, sym_2_5794
+.globl sym_2_5795
+sym_2_5795: la $2, sym_2_5795
+.globl sym_2_5796
+sym_2_5796: la $2, sym_2_5796
+.globl sym_2_5797
+sym_2_5797: la $2, sym_2_5797
+.globl sym_2_5798
+sym_2_5798: la $2, sym_2_5798
+.globl sym_2_5799
+sym_2_5799: la $2, sym_2_5799
+.globl sym_2_5800
+sym_2_5800: la $2, sym_2_5800
+.globl sym_2_5801
+sym_2_5801: la $2, sym_2_5801
+.globl sym_2_5802
+sym_2_5802: la $2, sym_2_5802
+.globl sym_2_5803
+sym_2_5803: la $2, sym_2_5803
+.globl sym_2_5804
+sym_2_5804: la $2, sym_2_5804
+.globl sym_2_5805
+sym_2_5805: la $2, sym_2_5805
+.globl sym_2_5806
+sym_2_5806: la $2, sym_2_5806
+.globl sym_2_5807
+sym_2_5807: la $2, sym_2_5807
+.globl sym_2_5808
+sym_2_5808: la $2, sym_2_5808
+.globl sym_2_5809
+sym_2_5809: la $2, sym_2_5809
+.globl sym_2_5810
+sym_2_5810: la $2, sym_2_5810
+.globl sym_2_5811
+sym_2_5811: la $2, sym_2_5811
+.globl sym_2_5812
+sym_2_5812: la $2, sym_2_5812
+.globl sym_2_5813
+sym_2_5813: la $2, sym_2_5813
+.globl sym_2_5814
+sym_2_5814: la $2, sym_2_5814
+.globl sym_2_5815
+sym_2_5815: la $2, sym_2_5815
+.globl sym_2_5816
+sym_2_5816: la $2, sym_2_5816
+.globl sym_2_5817
+sym_2_5817: la $2, sym_2_5817
+.globl sym_2_5818
+sym_2_5818: la $2, sym_2_5818
+.globl sym_2_5819
+sym_2_5819: la $2, sym_2_5819
+.globl sym_2_5820
+sym_2_5820: la $2, sym_2_5820
+.globl sym_2_5821
+sym_2_5821: la $2, sym_2_5821
+.globl sym_2_5822
+sym_2_5822: la $2, sym_2_5822
+.globl sym_2_5823
+sym_2_5823: la $2, sym_2_5823
+.globl sym_2_5824
+sym_2_5824: la $2, sym_2_5824
+.globl sym_2_5825
+sym_2_5825: la $2, sym_2_5825
+.globl sym_2_5826
+sym_2_5826: la $2, sym_2_5826
+.globl sym_2_5827
+sym_2_5827: la $2, sym_2_5827
+.globl sym_2_5828
+sym_2_5828: la $2, sym_2_5828
+.globl sym_2_5829
+sym_2_5829: la $2, sym_2_5829
+.globl sym_2_5830
+sym_2_5830: la $2, sym_2_5830
+.globl sym_2_5831
+sym_2_5831: la $2, sym_2_5831
+.globl sym_2_5832
+sym_2_5832: la $2, sym_2_5832
+.globl sym_2_5833
+sym_2_5833: la $2, sym_2_5833
+.globl sym_2_5834
+sym_2_5834: la $2, sym_2_5834
+.globl sym_2_5835
+sym_2_5835: la $2, sym_2_5835
+.globl sym_2_5836
+sym_2_5836: la $2, sym_2_5836
+.globl sym_2_5837
+sym_2_5837: la $2, sym_2_5837
+.globl sym_2_5838
+sym_2_5838: la $2, sym_2_5838
+.globl sym_2_5839
+sym_2_5839: la $2, sym_2_5839
+.globl sym_2_5840
+sym_2_5840: la $2, sym_2_5840
+.globl sym_2_5841
+sym_2_5841: la $2, sym_2_5841
+.globl sym_2_5842
+sym_2_5842: la $2, sym_2_5842
+.globl sym_2_5843
+sym_2_5843: la $2, sym_2_5843
+.globl sym_2_5844
+sym_2_5844: la $2, sym_2_5844
+.globl sym_2_5845
+sym_2_5845: la $2, sym_2_5845
+.globl sym_2_5846
+sym_2_5846: la $2, sym_2_5846
+.globl sym_2_5847
+sym_2_5847: la $2, sym_2_5847
+.globl sym_2_5848
+sym_2_5848: la $2, sym_2_5848
+.globl sym_2_5849
+sym_2_5849: la $2, sym_2_5849
+.globl sym_2_5850
+sym_2_5850: la $2, sym_2_5850
+.globl sym_2_5851
+sym_2_5851: la $2, sym_2_5851
+.globl sym_2_5852
+sym_2_5852: la $2, sym_2_5852
+.globl sym_2_5853
+sym_2_5853: la $2, sym_2_5853
+.globl sym_2_5854
+sym_2_5854: la $2, sym_2_5854
+.globl sym_2_5855
+sym_2_5855: la $2, sym_2_5855
+.globl sym_2_5856
+sym_2_5856: la $2, sym_2_5856
+.globl sym_2_5857
+sym_2_5857: la $2, sym_2_5857
+.globl sym_2_5858
+sym_2_5858: la $2, sym_2_5858
+.globl sym_2_5859
+sym_2_5859: la $2, sym_2_5859
+.globl sym_2_5860
+sym_2_5860: la $2, sym_2_5860
+.globl sym_2_5861
+sym_2_5861: la $2, sym_2_5861
+.globl sym_2_5862
+sym_2_5862: la $2, sym_2_5862
+.globl sym_2_5863
+sym_2_5863: la $2, sym_2_5863
+.globl sym_2_5864
+sym_2_5864: la $2, sym_2_5864
+.globl sym_2_5865
+sym_2_5865: la $2, sym_2_5865
+.globl sym_2_5866
+sym_2_5866: la $2, sym_2_5866
+.globl sym_2_5867
+sym_2_5867: la $2, sym_2_5867
+.globl sym_2_5868
+sym_2_5868: la $2, sym_2_5868
+.globl sym_2_5869
+sym_2_5869: la $2, sym_2_5869
+.globl sym_2_5870
+sym_2_5870: la $2, sym_2_5870
+.globl sym_2_5871
+sym_2_5871: la $2, sym_2_5871
+.globl sym_2_5872
+sym_2_5872: la $2, sym_2_5872
+.globl sym_2_5873
+sym_2_5873: la $2, sym_2_5873
+.globl sym_2_5874
+sym_2_5874: la $2, sym_2_5874
+.globl sym_2_5875
+sym_2_5875: la $2, sym_2_5875
+.globl sym_2_5876
+sym_2_5876: la $2, sym_2_5876
+.globl sym_2_5877
+sym_2_5877: la $2, sym_2_5877
+.globl sym_2_5878
+sym_2_5878: la $2, sym_2_5878
+.globl sym_2_5879
+sym_2_5879: la $2, sym_2_5879
+.globl sym_2_5880
+sym_2_5880: la $2, sym_2_5880
+.globl sym_2_5881
+sym_2_5881: la $2, sym_2_5881
+.globl sym_2_5882
+sym_2_5882: la $2, sym_2_5882
+.globl sym_2_5883
+sym_2_5883: la $2, sym_2_5883
+.globl sym_2_5884
+sym_2_5884: la $2, sym_2_5884
+.globl sym_2_5885
+sym_2_5885: la $2, sym_2_5885
+.globl sym_2_5886
+sym_2_5886: la $2, sym_2_5886
+.globl sym_2_5887
+sym_2_5887: la $2, sym_2_5887
+.globl sym_2_5888
+sym_2_5888: la $2, sym_2_5888
+.globl sym_2_5889
+sym_2_5889: la $2, sym_2_5889
+.globl sym_2_5890
+sym_2_5890: la $2, sym_2_5890
+.globl sym_2_5891
+sym_2_5891: la $2, sym_2_5891
+.globl sym_2_5892
+sym_2_5892: la $2, sym_2_5892
+.globl sym_2_5893
+sym_2_5893: la $2, sym_2_5893
+.globl sym_2_5894
+sym_2_5894: la $2, sym_2_5894
+.globl sym_2_5895
+sym_2_5895: la $2, sym_2_5895
+.globl sym_2_5896
+sym_2_5896: la $2, sym_2_5896
+.globl sym_2_5897
+sym_2_5897: la $2, sym_2_5897
+.globl sym_2_5898
+sym_2_5898: la $2, sym_2_5898
+.globl sym_2_5899
+sym_2_5899: la $2, sym_2_5899
+.globl sym_2_5900
+sym_2_5900: la $2, sym_2_5900
+.globl sym_2_5901
+sym_2_5901: la $2, sym_2_5901
+.globl sym_2_5902
+sym_2_5902: la $2, sym_2_5902
+.globl sym_2_5903
+sym_2_5903: la $2, sym_2_5903
+.globl sym_2_5904
+sym_2_5904: la $2, sym_2_5904
+.globl sym_2_5905
+sym_2_5905: la $2, sym_2_5905
+.globl sym_2_5906
+sym_2_5906: la $2, sym_2_5906
+.globl sym_2_5907
+sym_2_5907: la $2, sym_2_5907
+.globl sym_2_5908
+sym_2_5908: la $2, sym_2_5908
+.globl sym_2_5909
+sym_2_5909: la $2, sym_2_5909
+.globl sym_2_5910
+sym_2_5910: la $2, sym_2_5910
+.globl sym_2_5911
+sym_2_5911: la $2, sym_2_5911
+.globl sym_2_5912
+sym_2_5912: la $2, sym_2_5912
+.globl sym_2_5913
+sym_2_5913: la $2, sym_2_5913
+.globl sym_2_5914
+sym_2_5914: la $2, sym_2_5914
+.globl sym_2_5915
+sym_2_5915: la $2, sym_2_5915
+.globl sym_2_5916
+sym_2_5916: la $2, sym_2_5916
+.globl sym_2_5917
+sym_2_5917: la $2, sym_2_5917
+.globl sym_2_5918
+sym_2_5918: la $2, sym_2_5918
+.globl sym_2_5919
+sym_2_5919: la $2, sym_2_5919
+.globl sym_2_5920
+sym_2_5920: la $2, sym_2_5920
+.globl sym_2_5921
+sym_2_5921: la $2, sym_2_5921
+.globl sym_2_5922
+sym_2_5922: la $2, sym_2_5922
+.globl sym_2_5923
+sym_2_5923: la $2, sym_2_5923
+.globl sym_2_5924
+sym_2_5924: la $2, sym_2_5924
+.globl sym_2_5925
+sym_2_5925: la $2, sym_2_5925
+.globl sym_2_5926
+sym_2_5926: la $2, sym_2_5926
+.globl sym_2_5927
+sym_2_5927: la $2, sym_2_5927
+.globl sym_2_5928
+sym_2_5928: la $2, sym_2_5928
+.globl sym_2_5929
+sym_2_5929: la $2, sym_2_5929
+.globl sym_2_5930
+sym_2_5930: la $2, sym_2_5930
+.globl sym_2_5931
+sym_2_5931: la $2, sym_2_5931
+.globl sym_2_5932
+sym_2_5932: la $2, sym_2_5932
+.globl sym_2_5933
+sym_2_5933: la $2, sym_2_5933
+.globl sym_2_5934
+sym_2_5934: la $2, sym_2_5934
+.globl sym_2_5935
+sym_2_5935: la $2, sym_2_5935
+.globl sym_2_5936
+sym_2_5936: la $2, sym_2_5936
+.globl sym_2_5937
+sym_2_5937: la $2, sym_2_5937
+.globl sym_2_5938
+sym_2_5938: la $2, sym_2_5938
+.globl sym_2_5939
+sym_2_5939: la $2, sym_2_5939
+.globl sym_2_5940
+sym_2_5940: la $2, sym_2_5940
+.globl sym_2_5941
+sym_2_5941: la $2, sym_2_5941
+.globl sym_2_5942
+sym_2_5942: la $2, sym_2_5942
+.globl sym_2_5943
+sym_2_5943: la $2, sym_2_5943
+.globl sym_2_5944
+sym_2_5944: la $2, sym_2_5944
+.globl sym_2_5945
+sym_2_5945: la $2, sym_2_5945
+.globl sym_2_5946
+sym_2_5946: la $2, sym_2_5946
+.globl sym_2_5947
+sym_2_5947: la $2, sym_2_5947
+.globl sym_2_5948
+sym_2_5948: la $2, sym_2_5948
+.globl sym_2_5949
+sym_2_5949: la $2, sym_2_5949
+.globl sym_2_5950
+sym_2_5950: la $2, sym_2_5950
+.globl sym_2_5951
+sym_2_5951: la $2, sym_2_5951
+.globl sym_2_5952
+sym_2_5952: la $2, sym_2_5952
+.globl sym_2_5953
+sym_2_5953: la $2, sym_2_5953
+.globl sym_2_5954
+sym_2_5954: la $2, sym_2_5954
+.globl sym_2_5955
+sym_2_5955: la $2, sym_2_5955
+.globl sym_2_5956
+sym_2_5956: la $2, sym_2_5956
+.globl sym_2_5957
+sym_2_5957: la $2, sym_2_5957
+.globl sym_2_5958
+sym_2_5958: la $2, sym_2_5958
+.globl sym_2_5959
+sym_2_5959: la $2, sym_2_5959
+.globl sym_2_5960
+sym_2_5960: la $2, sym_2_5960
+.globl sym_2_5961
+sym_2_5961: la $2, sym_2_5961
+.globl sym_2_5962
+sym_2_5962: la $2, sym_2_5962
+.globl sym_2_5963
+sym_2_5963: la $2, sym_2_5963
+.globl sym_2_5964
+sym_2_5964: la $2, sym_2_5964
+.globl sym_2_5965
+sym_2_5965: la $2, sym_2_5965
+.globl sym_2_5966
+sym_2_5966: la $2, sym_2_5966
+.globl sym_2_5967
+sym_2_5967: la $2, sym_2_5967
+.globl sym_2_5968
+sym_2_5968: la $2, sym_2_5968
+.globl sym_2_5969
+sym_2_5969: la $2, sym_2_5969
+.globl sym_2_5970
+sym_2_5970: la $2, sym_2_5970
+.globl sym_2_5971
+sym_2_5971: la $2, sym_2_5971
+.globl sym_2_5972
+sym_2_5972: la $2, sym_2_5972
+.globl sym_2_5973
+sym_2_5973: la $2, sym_2_5973
+.globl sym_2_5974
+sym_2_5974: la $2, sym_2_5974
+.globl sym_2_5975
+sym_2_5975: la $2, sym_2_5975
+.globl sym_2_5976
+sym_2_5976: la $2, sym_2_5976
+.globl sym_2_5977
+sym_2_5977: la $2, sym_2_5977
+.globl sym_2_5978
+sym_2_5978: la $2, sym_2_5978
+.globl sym_2_5979
+sym_2_5979: la $2, sym_2_5979
+.globl sym_2_5980
+sym_2_5980: la $2, sym_2_5980
+.globl sym_2_5981
+sym_2_5981: la $2, sym_2_5981
+.globl sym_2_5982
+sym_2_5982: la $2, sym_2_5982
+.globl sym_2_5983
+sym_2_5983: la $2, sym_2_5983
+.globl sym_2_5984
+sym_2_5984: la $2, sym_2_5984
+.globl sym_2_5985
+sym_2_5985: la $2, sym_2_5985
+.globl sym_2_5986
+sym_2_5986: la $2, sym_2_5986
+.globl sym_2_5987
+sym_2_5987: la $2, sym_2_5987
+.globl sym_2_5988
+sym_2_5988: la $2, sym_2_5988
+.globl sym_2_5989
+sym_2_5989: la $2, sym_2_5989
+.globl sym_2_5990
+sym_2_5990: la $2, sym_2_5990
+.globl sym_2_5991
+sym_2_5991: la $2, sym_2_5991
+.globl sym_2_5992
+sym_2_5992: la $2, sym_2_5992
+.globl sym_2_5993
+sym_2_5993: la $2, sym_2_5993
+.globl sym_2_5994
+sym_2_5994: la $2, sym_2_5994
+.globl sym_2_5995
+sym_2_5995: la $2, sym_2_5995
+.globl sym_2_5996
+sym_2_5996: la $2, sym_2_5996
+.globl sym_2_5997
+sym_2_5997: la $2, sym_2_5997
+.globl sym_2_5998
+sym_2_5998: la $2, sym_2_5998
+.globl sym_2_5999
+sym_2_5999: la $2, sym_2_5999
+.globl sym_2_6000
+sym_2_6000: la $2, sym_2_6000
+.globl sym_2_6001
+sym_2_6001: la $2, sym_2_6001
+.globl sym_2_6002
+sym_2_6002: la $2, sym_2_6002
+.globl sym_2_6003
+sym_2_6003: la $2, sym_2_6003
+.globl sym_2_6004
+sym_2_6004: la $2, sym_2_6004
+.globl sym_2_6005
+sym_2_6005: la $2, sym_2_6005
+.globl sym_2_6006
+sym_2_6006: la $2, sym_2_6006
+.globl sym_2_6007
+sym_2_6007: la $2, sym_2_6007
+.globl sym_2_6008
+sym_2_6008: la $2, sym_2_6008
+.globl sym_2_6009
+sym_2_6009: la $2, sym_2_6009
+.globl sym_2_6010
+sym_2_6010: la $2, sym_2_6010
+.globl sym_2_6011
+sym_2_6011: la $2, sym_2_6011
+.globl sym_2_6012
+sym_2_6012: la $2, sym_2_6012
+.globl sym_2_6013
+sym_2_6013: la $2, sym_2_6013
+.globl sym_2_6014
+sym_2_6014: la $2, sym_2_6014
+.globl sym_2_6015
+sym_2_6015: la $2, sym_2_6015
+.globl sym_2_6016
+sym_2_6016: la $2, sym_2_6016
+.globl sym_2_6017
+sym_2_6017: la $2, sym_2_6017
+.globl sym_2_6018
+sym_2_6018: la $2, sym_2_6018
+.globl sym_2_6019
+sym_2_6019: la $2, sym_2_6019
+.globl sym_2_6020
+sym_2_6020: la $2, sym_2_6020
+.globl sym_2_6021
+sym_2_6021: la $2, sym_2_6021
+.globl sym_2_6022
+sym_2_6022: la $2, sym_2_6022
+.globl sym_2_6023
+sym_2_6023: la $2, sym_2_6023
+.globl sym_2_6024
+sym_2_6024: la $2, sym_2_6024
+.globl sym_2_6025
+sym_2_6025: la $2, sym_2_6025
+.globl sym_2_6026
+sym_2_6026: la $2, sym_2_6026
+.globl sym_2_6027
+sym_2_6027: la $2, sym_2_6027
+.globl sym_2_6028
+sym_2_6028: la $2, sym_2_6028
+.globl sym_2_6029
+sym_2_6029: la $2, sym_2_6029
+.globl sym_2_6030
+sym_2_6030: la $2, sym_2_6030
+.globl sym_2_6031
+sym_2_6031: la $2, sym_2_6031
+.globl sym_2_6032
+sym_2_6032: la $2, sym_2_6032
+.globl sym_2_6033
+sym_2_6033: la $2, sym_2_6033
+.globl sym_2_6034
+sym_2_6034: la $2, sym_2_6034
+.globl sym_2_6035
+sym_2_6035: la $2, sym_2_6035
+.globl sym_2_6036
+sym_2_6036: la $2, sym_2_6036
+.globl sym_2_6037
+sym_2_6037: la $2, sym_2_6037
+.globl sym_2_6038
+sym_2_6038: la $2, sym_2_6038
+.globl sym_2_6039
+sym_2_6039: la $2, sym_2_6039
+.globl sym_2_6040
+sym_2_6040: la $2, sym_2_6040
+.globl sym_2_6041
+sym_2_6041: la $2, sym_2_6041
+.globl sym_2_6042
+sym_2_6042: la $2, sym_2_6042
+.globl sym_2_6043
+sym_2_6043: la $2, sym_2_6043
+.globl sym_2_6044
+sym_2_6044: la $2, sym_2_6044
+.globl sym_2_6045
+sym_2_6045: la $2, sym_2_6045
+.globl sym_2_6046
+sym_2_6046: la $2, sym_2_6046
+.globl sym_2_6047
+sym_2_6047: la $2, sym_2_6047
+.globl sym_2_6048
+sym_2_6048: la $2, sym_2_6048
+.globl sym_2_6049
+sym_2_6049: la $2, sym_2_6049
+.globl sym_2_6050
+sym_2_6050: la $2, sym_2_6050
+.globl sym_2_6051
+sym_2_6051: la $2, sym_2_6051
+.globl sym_2_6052
+sym_2_6052: la $2, sym_2_6052
+.globl sym_2_6053
+sym_2_6053: la $2, sym_2_6053
+.globl sym_2_6054
+sym_2_6054: la $2, sym_2_6054
+.globl sym_2_6055
+sym_2_6055: la $2, sym_2_6055
+.globl sym_2_6056
+sym_2_6056: la $2, sym_2_6056
+.globl sym_2_6057
+sym_2_6057: la $2, sym_2_6057
+.globl sym_2_6058
+sym_2_6058: la $2, sym_2_6058
+.globl sym_2_6059
+sym_2_6059: la $2, sym_2_6059
+.globl sym_2_6060
+sym_2_6060: la $2, sym_2_6060
+.globl sym_2_6061
+sym_2_6061: la $2, sym_2_6061
+.globl sym_2_6062
+sym_2_6062: la $2, sym_2_6062
+.globl sym_2_6063
+sym_2_6063: la $2, sym_2_6063
+.globl sym_2_6064
+sym_2_6064: la $2, sym_2_6064
+.globl sym_2_6065
+sym_2_6065: la $2, sym_2_6065
+.globl sym_2_6066
+sym_2_6066: la $2, sym_2_6066
+.globl sym_2_6067
+sym_2_6067: la $2, sym_2_6067
+.globl sym_2_6068
+sym_2_6068: la $2, sym_2_6068
+.globl sym_2_6069
+sym_2_6069: la $2, sym_2_6069
+.globl sym_2_6070
+sym_2_6070: la $2, sym_2_6070
+.globl sym_2_6071
+sym_2_6071: la $2, sym_2_6071
+.globl sym_2_6072
+sym_2_6072: la $2, sym_2_6072
+.globl sym_2_6073
+sym_2_6073: la $2, sym_2_6073
+.globl sym_2_6074
+sym_2_6074: la $2, sym_2_6074
+.globl sym_2_6075
+sym_2_6075: la $2, sym_2_6075
+.globl sym_2_6076
+sym_2_6076: la $2, sym_2_6076
+.globl sym_2_6077
+sym_2_6077: la $2, sym_2_6077
+.globl sym_2_6078
+sym_2_6078: la $2, sym_2_6078
+.globl sym_2_6079
+sym_2_6079: la $2, sym_2_6079
+.globl sym_2_6080
+sym_2_6080: la $2, sym_2_6080
+.globl sym_2_6081
+sym_2_6081: la $2, sym_2_6081
+.globl sym_2_6082
+sym_2_6082: la $2, sym_2_6082
+.globl sym_2_6083
+sym_2_6083: la $2, sym_2_6083
+.globl sym_2_6084
+sym_2_6084: la $2, sym_2_6084
+.globl sym_2_6085
+sym_2_6085: la $2, sym_2_6085
+.globl sym_2_6086
+sym_2_6086: la $2, sym_2_6086
+.globl sym_2_6087
+sym_2_6087: la $2, sym_2_6087
+.globl sym_2_6088
+sym_2_6088: la $2, sym_2_6088
+.globl sym_2_6089
+sym_2_6089: la $2, sym_2_6089
+.globl sym_2_6090
+sym_2_6090: la $2, sym_2_6090
+.globl sym_2_6091
+sym_2_6091: la $2, sym_2_6091
+.globl sym_2_6092
+sym_2_6092: la $2, sym_2_6092
+.globl sym_2_6093
+sym_2_6093: la $2, sym_2_6093
+.globl sym_2_6094
+sym_2_6094: la $2, sym_2_6094
+.globl sym_2_6095
+sym_2_6095: la $2, sym_2_6095
+.globl sym_2_6096
+sym_2_6096: la $2, sym_2_6096
+.globl sym_2_6097
+sym_2_6097: la $2, sym_2_6097
+.globl sym_2_6098
+sym_2_6098: la $2, sym_2_6098
+.globl sym_2_6099
+sym_2_6099: la $2, sym_2_6099
+.globl sym_2_6100
+sym_2_6100: la $2, sym_2_6100
+.globl sym_2_6101
+sym_2_6101: la $2, sym_2_6101
+.globl sym_2_6102
+sym_2_6102: la $2, sym_2_6102
+.globl sym_2_6103
+sym_2_6103: la $2, sym_2_6103
+.globl sym_2_6104
+sym_2_6104: la $2, sym_2_6104
+.globl sym_2_6105
+sym_2_6105: la $2, sym_2_6105
+.globl sym_2_6106
+sym_2_6106: la $2, sym_2_6106
+.globl sym_2_6107
+sym_2_6107: la $2, sym_2_6107
+.globl sym_2_6108
+sym_2_6108: la $2, sym_2_6108
+.globl sym_2_6109
+sym_2_6109: la $2, sym_2_6109
+.globl sym_2_6110
+sym_2_6110: la $2, sym_2_6110
+.globl sym_2_6111
+sym_2_6111: la $2, sym_2_6111
+.globl sym_2_6112
+sym_2_6112: la $2, sym_2_6112
+.globl sym_2_6113
+sym_2_6113: la $2, sym_2_6113
+.globl sym_2_6114
+sym_2_6114: la $2, sym_2_6114
+.globl sym_2_6115
+sym_2_6115: la $2, sym_2_6115
+.globl sym_2_6116
+sym_2_6116: la $2, sym_2_6116
+.globl sym_2_6117
+sym_2_6117: la $2, sym_2_6117
+.globl sym_2_6118
+sym_2_6118: la $2, sym_2_6118
+.globl sym_2_6119
+sym_2_6119: la $2, sym_2_6119
+.globl sym_2_6120
+sym_2_6120: la $2, sym_2_6120
+.globl sym_2_6121
+sym_2_6121: la $2, sym_2_6121
+.globl sym_2_6122
+sym_2_6122: la $2, sym_2_6122
+.globl sym_2_6123
+sym_2_6123: la $2, sym_2_6123
+.globl sym_2_6124
+sym_2_6124: la $2, sym_2_6124
+.globl sym_2_6125
+sym_2_6125: la $2, sym_2_6125
+.globl sym_2_6126
+sym_2_6126: la $2, sym_2_6126
+.globl sym_2_6127
+sym_2_6127: la $2, sym_2_6127
+.globl sym_2_6128
+sym_2_6128: la $2, sym_2_6128
+.globl sym_2_6129
+sym_2_6129: la $2, sym_2_6129
+.globl sym_2_6130
+sym_2_6130: la $2, sym_2_6130
+.globl sym_2_6131
+sym_2_6131: la $2, sym_2_6131
+.globl sym_2_6132
+sym_2_6132: la $2, sym_2_6132
+.globl sym_2_6133
+sym_2_6133: la $2, sym_2_6133
+.globl sym_2_6134
+sym_2_6134: la $2, sym_2_6134
+.globl sym_2_6135
+sym_2_6135: la $2, sym_2_6135
+.globl sym_2_6136
+sym_2_6136: la $2, sym_2_6136
+.globl sym_2_6137
+sym_2_6137: la $2, sym_2_6137
+.globl sym_2_6138
+sym_2_6138: la $2, sym_2_6138
+.globl sym_2_6139
+sym_2_6139: la $2, sym_2_6139
+.globl sym_2_6140
+sym_2_6140: la $2, sym_2_6140
+.globl sym_2_6141
+sym_2_6141: la $2, sym_2_6141
+.globl sym_2_6142
+sym_2_6142: la $2, sym_2_6142
+.globl sym_2_6143
+sym_2_6143: la $2, sym_2_6143
+.globl sym_2_6144
+sym_2_6144: la $2, sym_2_6144
+.globl sym_2_6145
+sym_2_6145: la $2, sym_2_6145
+.globl sym_2_6146
+sym_2_6146: la $2, sym_2_6146
+.globl sym_2_6147
+sym_2_6147: la $2, sym_2_6147
+.globl sym_2_6148
+sym_2_6148: la $2, sym_2_6148
+.globl sym_2_6149
+sym_2_6149: la $2, sym_2_6149
+.globl sym_2_6150
+sym_2_6150: la $2, sym_2_6150
+.globl sym_2_6151
+sym_2_6151: la $2, sym_2_6151
+.globl sym_2_6152
+sym_2_6152: la $2, sym_2_6152
+.globl sym_2_6153
+sym_2_6153: la $2, sym_2_6153
+.globl sym_2_6154
+sym_2_6154: la $2, sym_2_6154
+.globl sym_2_6155
+sym_2_6155: la $2, sym_2_6155
+.globl sym_2_6156
+sym_2_6156: la $2, sym_2_6156
+.globl sym_2_6157
+sym_2_6157: la $2, sym_2_6157
+.globl sym_2_6158
+sym_2_6158: la $2, sym_2_6158
+.globl sym_2_6159
+sym_2_6159: la $2, sym_2_6159
+.globl sym_2_6160
+sym_2_6160: la $2, sym_2_6160
+.globl sym_2_6161
+sym_2_6161: la $2, sym_2_6161
+.globl sym_2_6162
+sym_2_6162: la $2, sym_2_6162
+.globl sym_2_6163
+sym_2_6163: la $2, sym_2_6163
+.globl sym_2_6164
+sym_2_6164: la $2, sym_2_6164
+.globl sym_2_6165
+sym_2_6165: la $2, sym_2_6165
+.globl sym_2_6166
+sym_2_6166: la $2, sym_2_6166
+.globl sym_2_6167
+sym_2_6167: la $2, sym_2_6167
+.globl sym_2_6168
+sym_2_6168: la $2, sym_2_6168
+.globl sym_2_6169
+sym_2_6169: la $2, sym_2_6169
+.globl sym_2_6170
+sym_2_6170: la $2, sym_2_6170
+.globl sym_2_6171
+sym_2_6171: la $2, sym_2_6171
+.globl sym_2_6172
+sym_2_6172: la $2, sym_2_6172
+.globl sym_2_6173
+sym_2_6173: la $2, sym_2_6173
+.globl sym_2_6174
+sym_2_6174: la $2, sym_2_6174
+.globl sym_2_6175
+sym_2_6175: la $2, sym_2_6175
+.globl sym_2_6176
+sym_2_6176: la $2, sym_2_6176
+.globl sym_2_6177
+sym_2_6177: la $2, sym_2_6177
+.globl sym_2_6178
+sym_2_6178: la $2, sym_2_6178
+.globl sym_2_6179
+sym_2_6179: la $2, sym_2_6179
+.globl sym_2_6180
+sym_2_6180: la $2, sym_2_6180
+.globl sym_2_6181
+sym_2_6181: la $2, sym_2_6181
+.globl sym_2_6182
+sym_2_6182: la $2, sym_2_6182
+.globl sym_2_6183
+sym_2_6183: la $2, sym_2_6183
+.globl sym_2_6184
+sym_2_6184: la $2, sym_2_6184
+.globl sym_2_6185
+sym_2_6185: la $2, sym_2_6185
+.globl sym_2_6186
+sym_2_6186: la $2, sym_2_6186
+.globl sym_2_6187
+sym_2_6187: la $2, sym_2_6187
+.globl sym_2_6188
+sym_2_6188: la $2, sym_2_6188
+.globl sym_2_6189
+sym_2_6189: la $2, sym_2_6189
+.globl sym_2_6190
+sym_2_6190: la $2, sym_2_6190
+.globl sym_2_6191
+sym_2_6191: la $2, sym_2_6191
+.globl sym_2_6192
+sym_2_6192: la $2, sym_2_6192
+.globl sym_2_6193
+sym_2_6193: la $2, sym_2_6193
+.globl sym_2_6194
+sym_2_6194: la $2, sym_2_6194
+.globl sym_2_6195
+sym_2_6195: la $2, sym_2_6195
+.globl sym_2_6196
+sym_2_6196: la $2, sym_2_6196
+.globl sym_2_6197
+sym_2_6197: la $2, sym_2_6197
+.globl sym_2_6198
+sym_2_6198: la $2, sym_2_6198
+.globl sym_2_6199
+sym_2_6199: la $2, sym_2_6199
+.globl sym_2_6200
+sym_2_6200: la $2, sym_2_6200
+.globl sym_2_6201
+sym_2_6201: la $2, sym_2_6201
+.globl sym_2_6202
+sym_2_6202: la $2, sym_2_6202
+.globl sym_2_6203
+sym_2_6203: la $2, sym_2_6203
+.globl sym_2_6204
+sym_2_6204: la $2, sym_2_6204
+.globl sym_2_6205
+sym_2_6205: la $2, sym_2_6205
+.globl sym_2_6206
+sym_2_6206: la $2, sym_2_6206
+.globl sym_2_6207
+sym_2_6207: la $2, sym_2_6207
+.globl sym_2_6208
+sym_2_6208: la $2, sym_2_6208
+.globl sym_2_6209
+sym_2_6209: la $2, sym_2_6209
+.globl sym_2_6210
+sym_2_6210: la $2, sym_2_6210
+.globl sym_2_6211
+sym_2_6211: la $2, sym_2_6211
+.globl sym_2_6212
+sym_2_6212: la $2, sym_2_6212
+.globl sym_2_6213
+sym_2_6213: la $2, sym_2_6213
+.globl sym_2_6214
+sym_2_6214: la $2, sym_2_6214
+.globl sym_2_6215
+sym_2_6215: la $2, sym_2_6215
+.globl sym_2_6216
+sym_2_6216: la $2, sym_2_6216
+.globl sym_2_6217
+sym_2_6217: la $2, sym_2_6217
+.globl sym_2_6218
+sym_2_6218: la $2, sym_2_6218
+.globl sym_2_6219
+sym_2_6219: la $2, sym_2_6219
+.globl sym_2_6220
+sym_2_6220: la $2, sym_2_6220
+.globl sym_2_6221
+sym_2_6221: la $2, sym_2_6221
+.globl sym_2_6222
+sym_2_6222: la $2, sym_2_6222
+.globl sym_2_6223
+sym_2_6223: la $2, sym_2_6223
+.globl sym_2_6224
+sym_2_6224: la $2, sym_2_6224
+.globl sym_2_6225
+sym_2_6225: la $2, sym_2_6225
+.globl sym_2_6226
+sym_2_6226: la $2, sym_2_6226
+.globl sym_2_6227
+sym_2_6227: la $2, sym_2_6227
+.globl sym_2_6228
+sym_2_6228: la $2, sym_2_6228
+.globl sym_2_6229
+sym_2_6229: la $2, sym_2_6229
+.globl sym_2_6230
+sym_2_6230: la $2, sym_2_6230
+.globl sym_2_6231
+sym_2_6231: la $2, sym_2_6231
+.globl sym_2_6232
+sym_2_6232: la $2, sym_2_6232
+.globl sym_2_6233
+sym_2_6233: la $2, sym_2_6233
+.globl sym_2_6234
+sym_2_6234: la $2, sym_2_6234
+.globl sym_2_6235
+sym_2_6235: la $2, sym_2_6235
+.globl sym_2_6236
+sym_2_6236: la $2, sym_2_6236
+.globl sym_2_6237
+sym_2_6237: la $2, sym_2_6237
+.globl sym_2_6238
+sym_2_6238: la $2, sym_2_6238
+.globl sym_2_6239
+sym_2_6239: la $2, sym_2_6239
+.globl sym_2_6240
+sym_2_6240: la $2, sym_2_6240
+.globl sym_2_6241
+sym_2_6241: la $2, sym_2_6241
+.globl sym_2_6242
+sym_2_6242: la $2, sym_2_6242
+.globl sym_2_6243
+sym_2_6243: la $2, sym_2_6243
+.globl sym_2_6244
+sym_2_6244: la $2, sym_2_6244
+.globl sym_2_6245
+sym_2_6245: la $2, sym_2_6245
+.globl sym_2_6246
+sym_2_6246: la $2, sym_2_6246
+.globl sym_2_6247
+sym_2_6247: la $2, sym_2_6247
+.globl sym_2_6248
+sym_2_6248: la $2, sym_2_6248
+.globl sym_2_6249
+sym_2_6249: la $2, sym_2_6249
+.globl sym_2_6250
+sym_2_6250: la $2, sym_2_6250
+.globl sym_2_6251
+sym_2_6251: la $2, sym_2_6251
+.globl sym_2_6252
+sym_2_6252: la $2, sym_2_6252
+.globl sym_2_6253
+sym_2_6253: la $2, sym_2_6253
+.globl sym_2_6254
+sym_2_6254: la $2, sym_2_6254
+.globl sym_2_6255
+sym_2_6255: la $2, sym_2_6255
+.globl sym_2_6256
+sym_2_6256: la $2, sym_2_6256
+.globl sym_2_6257
+sym_2_6257: la $2, sym_2_6257
+.globl sym_2_6258
+sym_2_6258: la $2, sym_2_6258
+.globl sym_2_6259
+sym_2_6259: la $2, sym_2_6259
+.globl sym_2_6260
+sym_2_6260: la $2, sym_2_6260
+.globl sym_2_6261
+sym_2_6261: la $2, sym_2_6261
+.globl sym_2_6262
+sym_2_6262: la $2, sym_2_6262
+.globl sym_2_6263
+sym_2_6263: la $2, sym_2_6263
+.globl sym_2_6264
+sym_2_6264: la $2, sym_2_6264
+.globl sym_2_6265
+sym_2_6265: la $2, sym_2_6265
+.globl sym_2_6266
+sym_2_6266: la $2, sym_2_6266
+.globl sym_2_6267
+sym_2_6267: la $2, sym_2_6267
+.globl sym_2_6268
+sym_2_6268: la $2, sym_2_6268
+.globl sym_2_6269
+sym_2_6269: la $2, sym_2_6269
+.globl sym_2_6270
+sym_2_6270: la $2, sym_2_6270
+.globl sym_2_6271
+sym_2_6271: la $2, sym_2_6271
+.globl sym_2_6272
+sym_2_6272: la $2, sym_2_6272
+.globl sym_2_6273
+sym_2_6273: la $2, sym_2_6273
+.globl sym_2_6274
+sym_2_6274: la $2, sym_2_6274
+.globl sym_2_6275
+sym_2_6275: la $2, sym_2_6275
+.globl sym_2_6276
+sym_2_6276: la $2, sym_2_6276
+.globl sym_2_6277
+sym_2_6277: la $2, sym_2_6277
+.globl sym_2_6278
+sym_2_6278: la $2, sym_2_6278
+.globl sym_2_6279
+sym_2_6279: la $2, sym_2_6279
+.globl sym_2_6280
+sym_2_6280: la $2, sym_2_6280
+.globl sym_2_6281
+sym_2_6281: la $2, sym_2_6281
+.globl sym_2_6282
+sym_2_6282: la $2, sym_2_6282
+.globl sym_2_6283
+sym_2_6283: la $2, sym_2_6283
+.globl sym_2_6284
+sym_2_6284: la $2, sym_2_6284
+.globl sym_2_6285
+sym_2_6285: la $2, sym_2_6285
+.globl sym_2_6286
+sym_2_6286: la $2, sym_2_6286
+.globl sym_2_6287
+sym_2_6287: la $2, sym_2_6287
+.globl sym_2_6288
+sym_2_6288: la $2, sym_2_6288
+.globl sym_2_6289
+sym_2_6289: la $2, sym_2_6289
+.globl sym_2_6290
+sym_2_6290: la $2, sym_2_6290
+.globl sym_2_6291
+sym_2_6291: la $2, sym_2_6291
+.globl sym_2_6292
+sym_2_6292: la $2, sym_2_6292
+.globl sym_2_6293
+sym_2_6293: la $2, sym_2_6293
+.globl sym_2_6294
+sym_2_6294: la $2, sym_2_6294
+.globl sym_2_6295
+sym_2_6295: la $2, sym_2_6295
+.globl sym_2_6296
+sym_2_6296: la $2, sym_2_6296
+.globl sym_2_6297
+sym_2_6297: la $2, sym_2_6297
+.globl sym_2_6298
+sym_2_6298: la $2, sym_2_6298
+.globl sym_2_6299
+sym_2_6299: la $2, sym_2_6299
+.globl sym_2_6300
+sym_2_6300: la $2, sym_2_6300
+.globl sym_2_6301
+sym_2_6301: la $2, sym_2_6301
+.globl sym_2_6302
+sym_2_6302: la $2, sym_2_6302
+.globl sym_2_6303
+sym_2_6303: la $2, sym_2_6303
+.globl sym_2_6304
+sym_2_6304: la $2, sym_2_6304
+.globl sym_2_6305
+sym_2_6305: la $2, sym_2_6305
+.globl sym_2_6306
+sym_2_6306: la $2, sym_2_6306
+.globl sym_2_6307
+sym_2_6307: la $2, sym_2_6307
+.globl sym_2_6308
+sym_2_6308: la $2, sym_2_6308
+.globl sym_2_6309
+sym_2_6309: la $2, sym_2_6309
+.globl sym_2_6310
+sym_2_6310: la $2, sym_2_6310
+.globl sym_2_6311
+sym_2_6311: la $2, sym_2_6311
+.globl sym_2_6312
+sym_2_6312: la $2, sym_2_6312
+.globl sym_2_6313
+sym_2_6313: la $2, sym_2_6313
+.globl sym_2_6314
+sym_2_6314: la $2, sym_2_6314
+.globl sym_2_6315
+sym_2_6315: la $2, sym_2_6315
+.globl sym_2_6316
+sym_2_6316: la $2, sym_2_6316
+.globl sym_2_6317
+sym_2_6317: la $2, sym_2_6317
+.globl sym_2_6318
+sym_2_6318: la $2, sym_2_6318
+.globl sym_2_6319
+sym_2_6319: la $2, sym_2_6319
+.globl sym_2_6320
+sym_2_6320: la $2, sym_2_6320
+.globl sym_2_6321
+sym_2_6321: la $2, sym_2_6321
+.globl sym_2_6322
+sym_2_6322: la $2, sym_2_6322
+.globl sym_2_6323
+sym_2_6323: la $2, sym_2_6323
+.globl sym_2_6324
+sym_2_6324: la $2, sym_2_6324
+.globl sym_2_6325
+sym_2_6325: la $2, sym_2_6325
+.globl sym_2_6326
+sym_2_6326: la $2, sym_2_6326
+.globl sym_2_6327
+sym_2_6327: la $2, sym_2_6327
+.globl sym_2_6328
+sym_2_6328: la $2, sym_2_6328
+.globl sym_2_6329
+sym_2_6329: la $2, sym_2_6329
+.globl sym_2_6330
+sym_2_6330: la $2, sym_2_6330
+.globl sym_2_6331
+sym_2_6331: la $2, sym_2_6331
+.globl sym_2_6332
+sym_2_6332: la $2, sym_2_6332
+.globl sym_2_6333
+sym_2_6333: la $2, sym_2_6333
+.globl sym_2_6334
+sym_2_6334: la $2, sym_2_6334
+.globl sym_2_6335
+sym_2_6335: la $2, sym_2_6335
+.globl sym_2_6336
+sym_2_6336: la $2, sym_2_6336
+.globl sym_2_6337
+sym_2_6337: la $2, sym_2_6337
+.globl sym_2_6338
+sym_2_6338: la $2, sym_2_6338
+.globl sym_2_6339
+sym_2_6339: la $2, sym_2_6339
+.globl sym_2_6340
+sym_2_6340: la $2, sym_2_6340
+.globl sym_2_6341
+sym_2_6341: la $2, sym_2_6341
+.globl sym_2_6342
+sym_2_6342: la $2, sym_2_6342
+.globl sym_2_6343
+sym_2_6343: la $2, sym_2_6343
+.globl sym_2_6344
+sym_2_6344: la $2, sym_2_6344
+.globl sym_2_6345
+sym_2_6345: la $2, sym_2_6345
+.globl sym_2_6346
+sym_2_6346: la $2, sym_2_6346
+.globl sym_2_6347
+sym_2_6347: la $2, sym_2_6347
+.globl sym_2_6348
+sym_2_6348: la $2, sym_2_6348
+.globl sym_2_6349
+sym_2_6349: la $2, sym_2_6349
+.globl sym_2_6350
+sym_2_6350: la $2, sym_2_6350
+.globl sym_2_6351
+sym_2_6351: la $2, sym_2_6351
+.globl sym_2_6352
+sym_2_6352: la $2, sym_2_6352
+.globl sym_2_6353
+sym_2_6353: la $2, sym_2_6353
+.globl sym_2_6354
+sym_2_6354: la $2, sym_2_6354
+.globl sym_2_6355
+sym_2_6355: la $2, sym_2_6355
+.globl sym_2_6356
+sym_2_6356: la $2, sym_2_6356
+.globl sym_2_6357
+sym_2_6357: la $2, sym_2_6357
+.globl sym_2_6358
+sym_2_6358: la $2, sym_2_6358
+.globl sym_2_6359
+sym_2_6359: la $2, sym_2_6359
+.globl sym_2_6360
+sym_2_6360: la $2, sym_2_6360
+.globl sym_2_6361
+sym_2_6361: la $2, sym_2_6361
+.globl sym_2_6362
+sym_2_6362: la $2, sym_2_6362
+.globl sym_2_6363
+sym_2_6363: la $2, sym_2_6363
+.globl sym_2_6364
+sym_2_6364: la $2, sym_2_6364
+.globl sym_2_6365
+sym_2_6365: la $2, sym_2_6365
+.globl sym_2_6366
+sym_2_6366: la $2, sym_2_6366
+.globl sym_2_6367
+sym_2_6367: la $2, sym_2_6367
+.globl sym_2_6368
+sym_2_6368: la $2, sym_2_6368
+.globl sym_2_6369
+sym_2_6369: la $2, sym_2_6369
+.globl sym_2_6370
+sym_2_6370: la $2, sym_2_6370
+.globl sym_2_6371
+sym_2_6371: la $2, sym_2_6371
+.globl sym_2_6372
+sym_2_6372: la $2, sym_2_6372
+.globl sym_2_6373
+sym_2_6373: la $2, sym_2_6373
+.globl sym_2_6374
+sym_2_6374: la $2, sym_2_6374
+.globl sym_2_6375
+sym_2_6375: la $2, sym_2_6375
+.globl sym_2_6376
+sym_2_6376: la $2, sym_2_6376
+.globl sym_2_6377
+sym_2_6377: la $2, sym_2_6377
+.globl sym_2_6378
+sym_2_6378: la $2, sym_2_6378
+.globl sym_2_6379
+sym_2_6379: la $2, sym_2_6379
+.globl sym_2_6380
+sym_2_6380: la $2, sym_2_6380
+.globl sym_2_6381
+sym_2_6381: la $2, sym_2_6381
+.globl sym_2_6382
+sym_2_6382: la $2, sym_2_6382
+.globl sym_2_6383
+sym_2_6383: la $2, sym_2_6383
+.globl sym_2_6384
+sym_2_6384: la $2, sym_2_6384
+.globl sym_2_6385
+sym_2_6385: la $2, sym_2_6385
+.globl sym_2_6386
+sym_2_6386: la $2, sym_2_6386
+.globl sym_2_6387
+sym_2_6387: la $2, sym_2_6387
+.globl sym_2_6388
+sym_2_6388: la $2, sym_2_6388
+.globl sym_2_6389
+sym_2_6389: la $2, sym_2_6389
+.globl sym_2_6390
+sym_2_6390: la $2, sym_2_6390
+.globl sym_2_6391
+sym_2_6391: la $2, sym_2_6391
+.globl sym_2_6392
+sym_2_6392: la $2, sym_2_6392
+.globl sym_2_6393
+sym_2_6393: la $2, sym_2_6393
+.globl sym_2_6394
+sym_2_6394: la $2, sym_2_6394
+.globl sym_2_6395
+sym_2_6395: la $2, sym_2_6395
+.globl sym_2_6396
+sym_2_6396: la $2, sym_2_6396
+.globl sym_2_6397
+sym_2_6397: la $2, sym_2_6397
+.globl sym_2_6398
+sym_2_6398: la $2, sym_2_6398
+.globl sym_2_6399
+sym_2_6399: la $2, sym_2_6399
+.globl sym_2_6400
+sym_2_6400: la $2, sym_2_6400
+.globl sym_2_6401
+sym_2_6401: la $2, sym_2_6401
+.globl sym_2_6402
+sym_2_6402: la $2, sym_2_6402
+.globl sym_2_6403
+sym_2_6403: la $2, sym_2_6403
+.globl sym_2_6404
+sym_2_6404: la $2, sym_2_6404
+.globl sym_2_6405
+sym_2_6405: la $2, sym_2_6405
+.globl sym_2_6406
+sym_2_6406: la $2, sym_2_6406
+.globl sym_2_6407
+sym_2_6407: la $2, sym_2_6407
+.globl sym_2_6408
+sym_2_6408: la $2, sym_2_6408
+.globl sym_2_6409
+sym_2_6409: la $2, sym_2_6409
+.globl sym_2_6410
+sym_2_6410: la $2, sym_2_6410
+.globl sym_2_6411
+sym_2_6411: la $2, sym_2_6411
+.globl sym_2_6412
+sym_2_6412: la $2, sym_2_6412
+.globl sym_2_6413
+sym_2_6413: la $2, sym_2_6413
+.globl sym_2_6414
+sym_2_6414: la $2, sym_2_6414
+.globl sym_2_6415
+sym_2_6415: la $2, sym_2_6415
+.globl sym_2_6416
+sym_2_6416: la $2, sym_2_6416
+.globl sym_2_6417
+sym_2_6417: la $2, sym_2_6417
+.globl sym_2_6418
+sym_2_6418: la $2, sym_2_6418
+.globl sym_2_6419
+sym_2_6419: la $2, sym_2_6419
+.globl sym_2_6420
+sym_2_6420: la $2, sym_2_6420
+.globl sym_2_6421
+sym_2_6421: la $2, sym_2_6421
+.globl sym_2_6422
+sym_2_6422: la $2, sym_2_6422
+.globl sym_2_6423
+sym_2_6423: la $2, sym_2_6423
+.globl sym_2_6424
+sym_2_6424: la $2, sym_2_6424
+.globl sym_2_6425
+sym_2_6425: la $2, sym_2_6425
+.globl sym_2_6426
+sym_2_6426: la $2, sym_2_6426
+.globl sym_2_6427
+sym_2_6427: la $2, sym_2_6427
+.globl sym_2_6428
+sym_2_6428: la $2, sym_2_6428
+.globl sym_2_6429
+sym_2_6429: la $2, sym_2_6429
+.globl sym_2_6430
+sym_2_6430: la $2, sym_2_6430
+.globl sym_2_6431
+sym_2_6431: la $2, sym_2_6431
+.globl sym_2_6432
+sym_2_6432: la $2, sym_2_6432
+.globl sym_2_6433
+sym_2_6433: la $2, sym_2_6433
+.globl sym_2_6434
+sym_2_6434: la $2, sym_2_6434
+.globl sym_2_6435
+sym_2_6435: la $2, sym_2_6435
+.globl sym_2_6436
+sym_2_6436: la $2, sym_2_6436
+.globl sym_2_6437
+sym_2_6437: la $2, sym_2_6437
+.globl sym_2_6438
+sym_2_6438: la $2, sym_2_6438
+.globl sym_2_6439
+sym_2_6439: la $2, sym_2_6439
+.globl sym_2_6440
+sym_2_6440: la $2, sym_2_6440
+.globl sym_2_6441
+sym_2_6441: la $2, sym_2_6441
+.globl sym_2_6442
+sym_2_6442: la $2, sym_2_6442
+.globl sym_2_6443
+sym_2_6443: la $2, sym_2_6443
+.globl sym_2_6444
+sym_2_6444: la $2, sym_2_6444
+.globl sym_2_6445
+sym_2_6445: la $2, sym_2_6445
+.globl sym_2_6446
+sym_2_6446: la $2, sym_2_6446
+.globl sym_2_6447
+sym_2_6447: la $2, sym_2_6447
+.globl sym_2_6448
+sym_2_6448: la $2, sym_2_6448
+.globl sym_2_6449
+sym_2_6449: la $2, sym_2_6449
+.globl sym_2_6450
+sym_2_6450: la $2, sym_2_6450
+.globl sym_2_6451
+sym_2_6451: la $2, sym_2_6451
+.globl sym_2_6452
+sym_2_6452: la $2, sym_2_6452
+.globl sym_2_6453
+sym_2_6453: la $2, sym_2_6453
+.globl sym_2_6454
+sym_2_6454: la $2, sym_2_6454
+.globl sym_2_6455
+sym_2_6455: la $2, sym_2_6455
+.globl sym_2_6456
+sym_2_6456: la $2, sym_2_6456
+.globl sym_2_6457
+sym_2_6457: la $2, sym_2_6457
+.globl sym_2_6458
+sym_2_6458: la $2, sym_2_6458
+.globl sym_2_6459
+sym_2_6459: la $2, sym_2_6459
+.globl sym_2_6460
+sym_2_6460: la $2, sym_2_6460
+.globl sym_2_6461
+sym_2_6461: la $2, sym_2_6461
+.globl sym_2_6462
+sym_2_6462: la $2, sym_2_6462
+.globl sym_2_6463
+sym_2_6463: la $2, sym_2_6463
+.globl sym_2_6464
+sym_2_6464: la $2, sym_2_6464
+.globl sym_2_6465
+sym_2_6465: la $2, sym_2_6465
+.globl sym_2_6466
+sym_2_6466: la $2, sym_2_6466
+.globl sym_2_6467
+sym_2_6467: la $2, sym_2_6467
+.globl sym_2_6468
+sym_2_6468: la $2, sym_2_6468
+.globl sym_2_6469
+sym_2_6469: la $2, sym_2_6469
+.globl sym_2_6470
+sym_2_6470: la $2, sym_2_6470
+.globl sym_2_6471
+sym_2_6471: la $2, sym_2_6471
+.globl sym_2_6472
+sym_2_6472: la $2, sym_2_6472
+.globl sym_2_6473
+sym_2_6473: la $2, sym_2_6473
+.globl sym_2_6474
+sym_2_6474: la $2, sym_2_6474
+.globl sym_2_6475
+sym_2_6475: la $2, sym_2_6475
+.globl sym_2_6476
+sym_2_6476: la $2, sym_2_6476
+.globl sym_2_6477
+sym_2_6477: la $2, sym_2_6477
+.globl sym_2_6478
+sym_2_6478: la $2, sym_2_6478
+.globl sym_2_6479
+sym_2_6479: la $2, sym_2_6479
+.globl sym_2_6480
+sym_2_6480: la $2, sym_2_6480
+.globl sym_2_6481
+sym_2_6481: la $2, sym_2_6481
+.globl sym_2_6482
+sym_2_6482: la $2, sym_2_6482
+.globl sym_2_6483
+sym_2_6483: la $2, sym_2_6483
+.globl sym_2_6484
+sym_2_6484: la $2, sym_2_6484
+.globl sym_2_6485
+sym_2_6485: la $2, sym_2_6485
+.globl sym_2_6486
+sym_2_6486: la $2, sym_2_6486
+.globl sym_2_6487
+sym_2_6487: la $2, sym_2_6487
+.globl sym_2_6488
+sym_2_6488: la $2, sym_2_6488
+.globl sym_2_6489
+sym_2_6489: la $2, sym_2_6489
+.globl sym_2_6490
+sym_2_6490: la $2, sym_2_6490
+.globl sym_2_6491
+sym_2_6491: la $2, sym_2_6491
+.globl sym_2_6492
+sym_2_6492: la $2, sym_2_6492
+.globl sym_2_6493
+sym_2_6493: la $2, sym_2_6493
+.globl sym_2_6494
+sym_2_6494: la $2, sym_2_6494
+.globl sym_2_6495
+sym_2_6495: la $2, sym_2_6495
+.globl sym_2_6496
+sym_2_6496: la $2, sym_2_6496
+.globl sym_2_6497
+sym_2_6497: la $2, sym_2_6497
+.globl sym_2_6498
+sym_2_6498: la $2, sym_2_6498
+.globl sym_2_6499
+sym_2_6499: la $2, sym_2_6499
+.globl sym_2_6500
+sym_2_6500: la $2, sym_2_6500
+.globl sym_2_6501
+sym_2_6501: la $2, sym_2_6501
+.globl sym_2_6502
+sym_2_6502: la $2, sym_2_6502
+.globl sym_2_6503
+sym_2_6503: la $2, sym_2_6503
+.globl sym_2_6504
+sym_2_6504: la $2, sym_2_6504
+.globl sym_2_6505
+sym_2_6505: la $2, sym_2_6505
+.globl sym_2_6506
+sym_2_6506: la $2, sym_2_6506
+.globl sym_2_6507
+sym_2_6507: la $2, sym_2_6507
+.globl sym_2_6508
+sym_2_6508: la $2, sym_2_6508
+.globl sym_2_6509
+sym_2_6509: la $2, sym_2_6509
+.globl sym_2_6510
+sym_2_6510: la $2, sym_2_6510
+.globl sym_2_6511
+sym_2_6511: la $2, sym_2_6511
+.globl sym_2_6512
+sym_2_6512: la $2, sym_2_6512
+.globl sym_2_6513
+sym_2_6513: la $2, sym_2_6513
+.globl sym_2_6514
+sym_2_6514: la $2, sym_2_6514
+.globl sym_2_6515
+sym_2_6515: la $2, sym_2_6515
+.globl sym_2_6516
+sym_2_6516: la $2, sym_2_6516
+.globl sym_2_6517
+sym_2_6517: la $2, sym_2_6517
+.globl sym_2_6518
+sym_2_6518: la $2, sym_2_6518
+.globl sym_2_6519
+sym_2_6519: la $2, sym_2_6519
+.globl sym_2_6520
+sym_2_6520: la $2, sym_2_6520
+.globl sym_2_6521
+sym_2_6521: la $2, sym_2_6521
+.globl sym_2_6522
+sym_2_6522: la $2, sym_2_6522
+.globl sym_2_6523
+sym_2_6523: la $2, sym_2_6523
+.globl sym_2_6524
+sym_2_6524: la $2, sym_2_6524
+.globl sym_2_6525
+sym_2_6525: la $2, sym_2_6525
+.globl sym_2_6526
+sym_2_6526: la $2, sym_2_6526
+.globl sym_2_6527
+sym_2_6527: la $2, sym_2_6527
+.globl sym_2_6528
+sym_2_6528: la $2, sym_2_6528
+.globl sym_2_6529
+sym_2_6529: la $2, sym_2_6529
+.globl sym_2_6530
+sym_2_6530: la $2, sym_2_6530
+.globl sym_2_6531
+sym_2_6531: la $2, sym_2_6531
+.globl sym_2_6532
+sym_2_6532: la $2, sym_2_6532
+.globl sym_2_6533
+sym_2_6533: la $2, sym_2_6533
+.globl sym_2_6534
+sym_2_6534: la $2, sym_2_6534
+.globl sym_2_6535
+sym_2_6535: la $2, sym_2_6535
+.globl sym_2_6536
+sym_2_6536: la $2, sym_2_6536
+.globl sym_2_6537
+sym_2_6537: la $2, sym_2_6537
+.globl sym_2_6538
+sym_2_6538: la $2, sym_2_6538
+.globl sym_2_6539
+sym_2_6539: la $2, sym_2_6539
+.globl sym_2_6540
+sym_2_6540: la $2, sym_2_6540
+.globl sym_2_6541
+sym_2_6541: la $2, sym_2_6541
+.globl sym_2_6542
+sym_2_6542: la $2, sym_2_6542
+.globl sym_2_6543
+sym_2_6543: la $2, sym_2_6543
+.globl sym_2_6544
+sym_2_6544: la $2, sym_2_6544
+.globl sym_2_6545
+sym_2_6545: la $2, sym_2_6545
+.globl sym_2_6546
+sym_2_6546: la $2, sym_2_6546
+.globl sym_2_6547
+sym_2_6547: la $2, sym_2_6547
+.globl sym_2_6548
+sym_2_6548: la $2, sym_2_6548
+.globl sym_2_6549
+sym_2_6549: la $2, sym_2_6549
+.globl sym_2_6550
+sym_2_6550: la $2, sym_2_6550
+.globl sym_2_6551
+sym_2_6551: la $2, sym_2_6551
+.globl sym_2_6552
+sym_2_6552: la $2, sym_2_6552
+.globl sym_2_6553
+sym_2_6553: la $2, sym_2_6553
+.globl sym_2_6554
+sym_2_6554: la $2, sym_2_6554
+.globl sym_2_6555
+sym_2_6555: la $2, sym_2_6555
+.globl sym_2_6556
+sym_2_6556: la $2, sym_2_6556
+.globl sym_2_6557
+sym_2_6557: la $2, sym_2_6557
+.globl sym_2_6558
+sym_2_6558: la $2, sym_2_6558
+.globl sym_2_6559
+sym_2_6559: la $2, sym_2_6559
+.globl sym_2_6560
+sym_2_6560: la $2, sym_2_6560
+.globl sym_2_6561
+sym_2_6561: la $2, sym_2_6561
+.globl sym_2_6562
+sym_2_6562: la $2, sym_2_6562
+.globl sym_2_6563
+sym_2_6563: la $2, sym_2_6563
+.globl sym_2_6564
+sym_2_6564: la $2, sym_2_6564
+.globl sym_2_6565
+sym_2_6565: la $2, sym_2_6565
+.globl sym_2_6566
+sym_2_6566: la $2, sym_2_6566
+.globl sym_2_6567
+sym_2_6567: la $2, sym_2_6567
+.globl sym_2_6568
+sym_2_6568: la $2, sym_2_6568
+.globl sym_2_6569
+sym_2_6569: la $2, sym_2_6569
+.globl sym_2_6570
+sym_2_6570: la $2, sym_2_6570
+.globl sym_2_6571
+sym_2_6571: la $2, sym_2_6571
+.globl sym_2_6572
+sym_2_6572: la $2, sym_2_6572
+.globl sym_2_6573
+sym_2_6573: la $2, sym_2_6573
+.globl sym_2_6574
+sym_2_6574: la $2, sym_2_6574
+.globl sym_2_6575
+sym_2_6575: la $2, sym_2_6575
+.globl sym_2_6576
+sym_2_6576: la $2, sym_2_6576
+.globl sym_2_6577
+sym_2_6577: la $2, sym_2_6577
+.globl sym_2_6578
+sym_2_6578: la $2, sym_2_6578
+.globl sym_2_6579
+sym_2_6579: la $2, sym_2_6579
+.globl sym_2_6580
+sym_2_6580: la $2, sym_2_6580
+.globl sym_2_6581
+sym_2_6581: la $2, sym_2_6581
+.globl sym_2_6582
+sym_2_6582: la $2, sym_2_6582
+.globl sym_2_6583
+sym_2_6583: la $2, sym_2_6583
+.globl sym_2_6584
+sym_2_6584: la $2, sym_2_6584
+.globl sym_2_6585
+sym_2_6585: la $2, sym_2_6585
+.globl sym_2_6586
+sym_2_6586: la $2, sym_2_6586
+.globl sym_2_6587
+sym_2_6587: la $2, sym_2_6587
+.globl sym_2_6588
+sym_2_6588: la $2, sym_2_6588
+.globl sym_2_6589
+sym_2_6589: la $2, sym_2_6589
+.globl sym_2_6590
+sym_2_6590: la $2, sym_2_6590
+.globl sym_2_6591
+sym_2_6591: la $2, sym_2_6591
+.globl sym_2_6592
+sym_2_6592: la $2, sym_2_6592
+.globl sym_2_6593
+sym_2_6593: la $2, sym_2_6593
+.globl sym_2_6594
+sym_2_6594: la $2, sym_2_6594
+.globl sym_2_6595
+sym_2_6595: la $2, sym_2_6595
+.globl sym_2_6596
+sym_2_6596: la $2, sym_2_6596
+.globl sym_2_6597
+sym_2_6597: la $2, sym_2_6597
+.globl sym_2_6598
+sym_2_6598: la $2, sym_2_6598
+.globl sym_2_6599
+sym_2_6599: la $2, sym_2_6599
+.globl sym_2_6600
+sym_2_6600: la $2, sym_2_6600
+.globl sym_2_6601
+sym_2_6601: la $2, sym_2_6601
+.globl sym_2_6602
+sym_2_6602: la $2, sym_2_6602
+.globl sym_2_6603
+sym_2_6603: la $2, sym_2_6603
+.globl sym_2_6604
+sym_2_6604: la $2, sym_2_6604
+.globl sym_2_6605
+sym_2_6605: la $2, sym_2_6605
+.globl sym_2_6606
+sym_2_6606: la $2, sym_2_6606
+.globl sym_2_6607
+sym_2_6607: la $2, sym_2_6607
+.globl sym_2_6608
+sym_2_6608: la $2, sym_2_6608
+.globl sym_2_6609
+sym_2_6609: la $2, sym_2_6609
+.globl sym_2_6610
+sym_2_6610: la $2, sym_2_6610
+.globl sym_2_6611
+sym_2_6611: la $2, sym_2_6611
+.globl sym_2_6612
+sym_2_6612: la $2, sym_2_6612
+.globl sym_2_6613
+sym_2_6613: la $2, sym_2_6613
+.globl sym_2_6614
+sym_2_6614: la $2, sym_2_6614
+.globl sym_2_6615
+sym_2_6615: la $2, sym_2_6615
+.globl sym_2_6616
+sym_2_6616: la $2, sym_2_6616
+.globl sym_2_6617
+sym_2_6617: la $2, sym_2_6617
+.globl sym_2_6618
+sym_2_6618: la $2, sym_2_6618
+.globl sym_2_6619
+sym_2_6619: la $2, sym_2_6619
+.globl sym_2_6620
+sym_2_6620: la $2, sym_2_6620
+.globl sym_2_6621
+sym_2_6621: la $2, sym_2_6621
+.globl sym_2_6622
+sym_2_6622: la $2, sym_2_6622
+.globl sym_2_6623
+sym_2_6623: la $2, sym_2_6623
+.globl sym_2_6624
+sym_2_6624: la $2, sym_2_6624
+.globl sym_2_6625
+sym_2_6625: la $2, sym_2_6625
+.globl sym_2_6626
+sym_2_6626: la $2, sym_2_6626
+.globl sym_2_6627
+sym_2_6627: la $2, sym_2_6627
+.globl sym_2_6628
+sym_2_6628: la $2, sym_2_6628
+.globl sym_2_6629
+sym_2_6629: la $2, sym_2_6629
+.globl sym_2_6630
+sym_2_6630: la $2, sym_2_6630
+.globl sym_2_6631
+sym_2_6631: la $2, sym_2_6631
+.globl sym_2_6632
+sym_2_6632: la $2, sym_2_6632
+.globl sym_2_6633
+sym_2_6633: la $2, sym_2_6633
+.globl sym_2_6634
+sym_2_6634: la $2, sym_2_6634
+.globl sym_2_6635
+sym_2_6635: la $2, sym_2_6635
+.globl sym_2_6636
+sym_2_6636: la $2, sym_2_6636
+.globl sym_2_6637
+sym_2_6637: la $2, sym_2_6637
+.globl sym_2_6638
+sym_2_6638: la $2, sym_2_6638
+.globl sym_2_6639
+sym_2_6639: la $2, sym_2_6639
+.globl sym_2_6640
+sym_2_6640: la $2, sym_2_6640
+.globl sym_2_6641
+sym_2_6641: la $2, sym_2_6641
+.globl sym_2_6642
+sym_2_6642: la $2, sym_2_6642
+.globl sym_2_6643
+sym_2_6643: la $2, sym_2_6643
+.globl sym_2_6644
+sym_2_6644: la $2, sym_2_6644
+.globl sym_2_6645
+sym_2_6645: la $2, sym_2_6645
+.globl sym_2_6646
+sym_2_6646: la $2, sym_2_6646
+.globl sym_2_6647
+sym_2_6647: la $2, sym_2_6647
+.globl sym_2_6648
+sym_2_6648: la $2, sym_2_6648
+.globl sym_2_6649
+sym_2_6649: la $2, sym_2_6649
+.globl sym_2_6650
+sym_2_6650: la $2, sym_2_6650
+.globl sym_2_6651
+sym_2_6651: la $2, sym_2_6651
+.globl sym_2_6652
+sym_2_6652: la $2, sym_2_6652
+.globl sym_2_6653
+sym_2_6653: la $2, sym_2_6653
+.globl sym_2_6654
+sym_2_6654: la $2, sym_2_6654
+.globl sym_2_6655
+sym_2_6655: la $2, sym_2_6655
+.globl sym_2_6656
+sym_2_6656: la $2, sym_2_6656
+.globl sym_2_6657
+sym_2_6657: la $2, sym_2_6657
+.globl sym_2_6658
+sym_2_6658: la $2, sym_2_6658
+.globl sym_2_6659
+sym_2_6659: la $2, sym_2_6659
+.globl sym_2_6660
+sym_2_6660: la $2, sym_2_6660
+.globl sym_2_6661
+sym_2_6661: la $2, sym_2_6661
+.globl sym_2_6662
+sym_2_6662: la $2, sym_2_6662
+.globl sym_2_6663
+sym_2_6663: la $2, sym_2_6663
+.globl sym_2_6664
+sym_2_6664: la $2, sym_2_6664
+.globl sym_2_6665
+sym_2_6665: la $2, sym_2_6665
+.globl sym_2_6666
+sym_2_6666: la $2, sym_2_6666
+.globl sym_2_6667
+sym_2_6667: la $2, sym_2_6667
+.globl sym_2_6668
+sym_2_6668: la $2, sym_2_6668
+.globl sym_2_6669
+sym_2_6669: la $2, sym_2_6669
+.globl sym_2_6670
+sym_2_6670: la $2, sym_2_6670
+.globl sym_2_6671
+sym_2_6671: la $2, sym_2_6671
+.globl sym_2_6672
+sym_2_6672: la $2, sym_2_6672
+.globl sym_2_6673
+sym_2_6673: la $2, sym_2_6673
+.globl sym_2_6674
+sym_2_6674: la $2, sym_2_6674
+.globl sym_2_6675
+sym_2_6675: la $2, sym_2_6675
+.globl sym_2_6676
+sym_2_6676: la $2, sym_2_6676
+.globl sym_2_6677
+sym_2_6677: la $2, sym_2_6677
+.globl sym_2_6678
+sym_2_6678: la $2, sym_2_6678
+.globl sym_2_6679
+sym_2_6679: la $2, sym_2_6679
+.globl sym_2_6680
+sym_2_6680: la $2, sym_2_6680
+.globl sym_2_6681
+sym_2_6681: la $2, sym_2_6681
+.globl sym_2_6682
+sym_2_6682: la $2, sym_2_6682
+.globl sym_2_6683
+sym_2_6683: la $2, sym_2_6683
+.globl sym_2_6684
+sym_2_6684: la $2, sym_2_6684
+.globl sym_2_6685
+sym_2_6685: la $2, sym_2_6685
+.globl sym_2_6686
+sym_2_6686: la $2, sym_2_6686
+.globl sym_2_6687
+sym_2_6687: la $2, sym_2_6687
+.globl sym_2_6688
+sym_2_6688: la $2, sym_2_6688
+.globl sym_2_6689
+sym_2_6689: la $2, sym_2_6689
+.globl sym_2_6690
+sym_2_6690: la $2, sym_2_6690
+.globl sym_2_6691
+sym_2_6691: la $2, sym_2_6691
+.globl sym_2_6692
+sym_2_6692: la $2, sym_2_6692
+.globl sym_2_6693
+sym_2_6693: la $2, sym_2_6693
+.globl sym_2_6694
+sym_2_6694: la $2, sym_2_6694
+.globl sym_2_6695
+sym_2_6695: la $2, sym_2_6695
+.globl sym_2_6696
+sym_2_6696: la $2, sym_2_6696
+.globl sym_2_6697
+sym_2_6697: la $2, sym_2_6697
+.globl sym_2_6698
+sym_2_6698: la $2, sym_2_6698
+.globl sym_2_6699
+sym_2_6699: la $2, sym_2_6699
+.globl sym_2_6700
+sym_2_6700: la $2, sym_2_6700
+.globl sym_2_6701
+sym_2_6701: la $2, sym_2_6701
+.globl sym_2_6702
+sym_2_6702: la $2, sym_2_6702
+.globl sym_2_6703
+sym_2_6703: la $2, sym_2_6703
+.globl sym_2_6704
+sym_2_6704: la $2, sym_2_6704
+.globl sym_2_6705
+sym_2_6705: la $2, sym_2_6705
+.globl sym_2_6706
+sym_2_6706: la $2, sym_2_6706
+.globl sym_2_6707
+sym_2_6707: la $2, sym_2_6707
+.globl sym_2_6708
+sym_2_6708: la $2, sym_2_6708
+.globl sym_2_6709
+sym_2_6709: la $2, sym_2_6709
+.globl sym_2_6710
+sym_2_6710: la $2, sym_2_6710
+.globl sym_2_6711
+sym_2_6711: la $2, sym_2_6711
+.globl sym_2_6712
+sym_2_6712: la $2, sym_2_6712
+.globl sym_2_6713
+sym_2_6713: la $2, sym_2_6713
+.globl sym_2_6714
+sym_2_6714: la $2, sym_2_6714
+.globl sym_2_6715
+sym_2_6715: la $2, sym_2_6715
+.globl sym_2_6716
+sym_2_6716: la $2, sym_2_6716
+.globl sym_2_6717
+sym_2_6717: la $2, sym_2_6717
+.globl sym_2_6718
+sym_2_6718: la $2, sym_2_6718
+.globl sym_2_6719
+sym_2_6719: la $2, sym_2_6719
+.globl sym_2_6720
+sym_2_6720: la $2, sym_2_6720
+.globl sym_2_6721
+sym_2_6721: la $2, sym_2_6721
+.globl sym_2_6722
+sym_2_6722: la $2, sym_2_6722
+.globl sym_2_6723
+sym_2_6723: la $2, sym_2_6723
+.globl sym_2_6724
+sym_2_6724: la $2, sym_2_6724
+.globl sym_2_6725
+sym_2_6725: la $2, sym_2_6725
+.globl sym_2_6726
+sym_2_6726: la $2, sym_2_6726
+.globl sym_2_6727
+sym_2_6727: la $2, sym_2_6727
+.globl sym_2_6728
+sym_2_6728: la $2, sym_2_6728
+.globl sym_2_6729
+sym_2_6729: la $2, sym_2_6729
+.globl sym_2_6730
+sym_2_6730: la $2, sym_2_6730
+.globl sym_2_6731
+sym_2_6731: la $2, sym_2_6731
+.globl sym_2_6732
+sym_2_6732: la $2, sym_2_6732
+.globl sym_2_6733
+sym_2_6733: la $2, sym_2_6733
+.globl sym_2_6734
+sym_2_6734: la $2, sym_2_6734
+.globl sym_2_6735
+sym_2_6735: la $2, sym_2_6735
+.globl sym_2_6736
+sym_2_6736: la $2, sym_2_6736
+.globl sym_2_6737
+sym_2_6737: la $2, sym_2_6737
+.globl sym_2_6738
+sym_2_6738: la $2, sym_2_6738
+.globl sym_2_6739
+sym_2_6739: la $2, sym_2_6739
+.globl sym_2_6740
+sym_2_6740: la $2, sym_2_6740
+.globl sym_2_6741
+sym_2_6741: la $2, sym_2_6741
+.globl sym_2_6742
+sym_2_6742: la $2, sym_2_6742
+.globl sym_2_6743
+sym_2_6743: la $2, sym_2_6743
+.globl sym_2_6744
+sym_2_6744: la $2, sym_2_6744
+.globl sym_2_6745
+sym_2_6745: la $2, sym_2_6745
+.globl sym_2_6746
+sym_2_6746: la $2, sym_2_6746
+.globl sym_2_6747
+sym_2_6747: la $2, sym_2_6747
+.globl sym_2_6748
+sym_2_6748: la $2, sym_2_6748
+.globl sym_2_6749
+sym_2_6749: la $2, sym_2_6749
+.globl sym_2_6750
+sym_2_6750: la $2, sym_2_6750
+.globl sym_2_6751
+sym_2_6751: la $2, sym_2_6751
+.globl sym_2_6752
+sym_2_6752: la $2, sym_2_6752
+.globl sym_2_6753
+sym_2_6753: la $2, sym_2_6753
+.globl sym_2_6754
+sym_2_6754: la $2, sym_2_6754
+.globl sym_2_6755
+sym_2_6755: la $2, sym_2_6755
+.globl sym_2_6756
+sym_2_6756: la $2, sym_2_6756
+.globl sym_2_6757
+sym_2_6757: la $2, sym_2_6757
+.globl sym_2_6758
+sym_2_6758: la $2, sym_2_6758
+.globl sym_2_6759
+sym_2_6759: la $2, sym_2_6759
+.globl sym_2_6760
+sym_2_6760: la $2, sym_2_6760
+.globl sym_2_6761
+sym_2_6761: la $2, sym_2_6761
+.globl sym_2_6762
+sym_2_6762: la $2, sym_2_6762
+.globl sym_2_6763
+sym_2_6763: la $2, sym_2_6763
+.globl sym_2_6764
+sym_2_6764: la $2, sym_2_6764
+.globl sym_2_6765
+sym_2_6765: la $2, sym_2_6765
+.globl sym_2_6766
+sym_2_6766: la $2, sym_2_6766
+.globl sym_2_6767
+sym_2_6767: la $2, sym_2_6767
+.globl sym_2_6768
+sym_2_6768: la $2, sym_2_6768
+.globl sym_2_6769
+sym_2_6769: la $2, sym_2_6769
+.globl sym_2_6770
+sym_2_6770: la $2, sym_2_6770
+.globl sym_2_6771
+sym_2_6771: la $2, sym_2_6771
+.globl sym_2_6772
+sym_2_6772: la $2, sym_2_6772
+.globl sym_2_6773
+sym_2_6773: la $2, sym_2_6773
+.globl sym_2_6774
+sym_2_6774: la $2, sym_2_6774
+.globl sym_2_6775
+sym_2_6775: la $2, sym_2_6775
+.globl sym_2_6776
+sym_2_6776: la $2, sym_2_6776
+.globl sym_2_6777
+sym_2_6777: la $2, sym_2_6777
+.globl sym_2_6778
+sym_2_6778: la $2, sym_2_6778
+.globl sym_2_6779
+sym_2_6779: la $2, sym_2_6779
+.globl sym_2_6780
+sym_2_6780: la $2, sym_2_6780
+.globl sym_2_6781
+sym_2_6781: la $2, sym_2_6781
+.globl sym_2_6782
+sym_2_6782: la $2, sym_2_6782
+.globl sym_2_6783
+sym_2_6783: la $2, sym_2_6783
+.globl sym_2_6784
+sym_2_6784: la $2, sym_2_6784
+.globl sym_2_6785
+sym_2_6785: la $2, sym_2_6785
+.globl sym_2_6786
+sym_2_6786: la $2, sym_2_6786
+.globl sym_2_6787
+sym_2_6787: la $2, sym_2_6787
+.globl sym_2_6788
+sym_2_6788: la $2, sym_2_6788
+.globl sym_2_6789
+sym_2_6789: la $2, sym_2_6789
+.globl sym_2_6790
+sym_2_6790: la $2, sym_2_6790
+.globl sym_2_6791
+sym_2_6791: la $2, sym_2_6791
+.globl sym_2_6792
+sym_2_6792: la $2, sym_2_6792
+.globl sym_2_6793
+sym_2_6793: la $2, sym_2_6793
+.globl sym_2_6794
+sym_2_6794: la $2, sym_2_6794
+.globl sym_2_6795
+sym_2_6795: la $2, sym_2_6795
+.globl sym_2_6796
+sym_2_6796: la $2, sym_2_6796
+.globl sym_2_6797
+sym_2_6797: la $2, sym_2_6797
+.globl sym_2_6798
+sym_2_6798: la $2, sym_2_6798
+.globl sym_2_6799
+sym_2_6799: la $2, sym_2_6799
+.globl sym_2_6800
+sym_2_6800: la $2, sym_2_6800
+.globl sym_2_6801
+sym_2_6801: la $2, sym_2_6801
+.globl sym_2_6802
+sym_2_6802: la $2, sym_2_6802
+.globl sym_2_6803
+sym_2_6803: la $2, sym_2_6803
+.globl sym_2_6804
+sym_2_6804: la $2, sym_2_6804
+.globl sym_2_6805
+sym_2_6805: la $2, sym_2_6805
+.globl sym_2_6806
+sym_2_6806: la $2, sym_2_6806
+.globl sym_2_6807
+sym_2_6807: la $2, sym_2_6807
+.globl sym_2_6808
+sym_2_6808: la $2, sym_2_6808
+.globl sym_2_6809
+sym_2_6809: la $2, sym_2_6809
+.globl sym_2_6810
+sym_2_6810: la $2, sym_2_6810
+.globl sym_2_6811
+sym_2_6811: la $2, sym_2_6811
+.globl sym_2_6812
+sym_2_6812: la $2, sym_2_6812
+.globl sym_2_6813
+sym_2_6813: la $2, sym_2_6813
+.globl sym_2_6814
+sym_2_6814: la $2, sym_2_6814
+.globl sym_2_6815
+sym_2_6815: la $2, sym_2_6815
+.globl sym_2_6816
+sym_2_6816: la $2, sym_2_6816
+.globl sym_2_6817
+sym_2_6817: la $2, sym_2_6817
+.globl sym_2_6818
+sym_2_6818: la $2, sym_2_6818
+.globl sym_2_6819
+sym_2_6819: la $2, sym_2_6819
+.globl sym_2_6820
+sym_2_6820: la $2, sym_2_6820
+.globl sym_2_6821
+sym_2_6821: la $2, sym_2_6821
+.globl sym_2_6822
+sym_2_6822: la $2, sym_2_6822
+.globl sym_2_6823
+sym_2_6823: la $2, sym_2_6823
+.globl sym_2_6824
+sym_2_6824: la $2, sym_2_6824
+.globl sym_2_6825
+sym_2_6825: la $2, sym_2_6825
+.globl sym_2_6826
+sym_2_6826: la $2, sym_2_6826
+.globl sym_2_6827
+sym_2_6827: la $2, sym_2_6827
+.globl sym_2_6828
+sym_2_6828: la $2, sym_2_6828
+.globl sym_2_6829
+sym_2_6829: la $2, sym_2_6829
+.globl sym_2_6830
+sym_2_6830: la $2, sym_2_6830
+.globl sym_2_6831
+sym_2_6831: la $2, sym_2_6831
+.globl sym_2_6832
+sym_2_6832: la $2, sym_2_6832
+.globl sym_2_6833
+sym_2_6833: la $2, sym_2_6833
+.globl sym_2_6834
+sym_2_6834: la $2, sym_2_6834
+.globl sym_2_6835
+sym_2_6835: la $2, sym_2_6835
+.globl sym_2_6836
+sym_2_6836: la $2, sym_2_6836
+.globl sym_2_6837
+sym_2_6837: la $2, sym_2_6837
+.globl sym_2_6838
+sym_2_6838: la $2, sym_2_6838
+.globl sym_2_6839
+sym_2_6839: la $2, sym_2_6839
+.globl sym_2_6840
+sym_2_6840: la $2, sym_2_6840
+.globl sym_2_6841
+sym_2_6841: la $2, sym_2_6841
+.globl sym_2_6842
+sym_2_6842: la $2, sym_2_6842
+.globl sym_2_6843
+sym_2_6843: la $2, sym_2_6843
+.globl sym_2_6844
+sym_2_6844: la $2, sym_2_6844
+.globl sym_2_6845
+sym_2_6845: la $2, sym_2_6845
+.globl sym_2_6846
+sym_2_6846: la $2, sym_2_6846
+.globl sym_2_6847
+sym_2_6847: la $2, sym_2_6847
+.globl sym_2_6848
+sym_2_6848: la $2, sym_2_6848
+.globl sym_2_6849
+sym_2_6849: la $2, sym_2_6849
+.globl sym_2_6850
+sym_2_6850: la $2, sym_2_6850
+.globl sym_2_6851
+sym_2_6851: la $2, sym_2_6851
+.globl sym_2_6852
+sym_2_6852: la $2, sym_2_6852
+.globl sym_2_6853
+sym_2_6853: la $2, sym_2_6853
+.globl sym_2_6854
+sym_2_6854: la $2, sym_2_6854
+.globl sym_2_6855
+sym_2_6855: la $2, sym_2_6855
+.globl sym_2_6856
+sym_2_6856: la $2, sym_2_6856
+.globl sym_2_6857
+sym_2_6857: la $2, sym_2_6857
+.globl sym_2_6858
+sym_2_6858: la $2, sym_2_6858
+.globl sym_2_6859
+sym_2_6859: la $2, sym_2_6859
+.globl sym_2_6860
+sym_2_6860: la $2, sym_2_6860
+.globl sym_2_6861
+sym_2_6861: la $2, sym_2_6861
+.globl sym_2_6862
+sym_2_6862: la $2, sym_2_6862
+.globl sym_2_6863
+sym_2_6863: la $2, sym_2_6863
+.globl sym_2_6864
+sym_2_6864: la $2, sym_2_6864
+.globl sym_2_6865
+sym_2_6865: la $2, sym_2_6865
+.globl sym_2_6866
+sym_2_6866: la $2, sym_2_6866
+.globl sym_2_6867
+sym_2_6867: la $2, sym_2_6867
+.globl sym_2_6868
+sym_2_6868: la $2, sym_2_6868
+.globl sym_2_6869
+sym_2_6869: la $2, sym_2_6869
+.globl sym_2_6870
+sym_2_6870: la $2, sym_2_6870
+.globl sym_2_6871
+sym_2_6871: la $2, sym_2_6871
+.globl sym_2_6872
+sym_2_6872: la $2, sym_2_6872
+.globl sym_2_6873
+sym_2_6873: la $2, sym_2_6873
+.globl sym_2_6874
+sym_2_6874: la $2, sym_2_6874
+.globl sym_2_6875
+sym_2_6875: la $2, sym_2_6875
+.globl sym_2_6876
+sym_2_6876: la $2, sym_2_6876
+.globl sym_2_6877
+sym_2_6877: la $2, sym_2_6877
+.globl sym_2_6878
+sym_2_6878: la $2, sym_2_6878
+.globl sym_2_6879
+sym_2_6879: la $2, sym_2_6879
+.globl sym_2_6880
+sym_2_6880: la $2, sym_2_6880
+.globl sym_2_6881
+sym_2_6881: la $2, sym_2_6881
+.globl sym_2_6882
+sym_2_6882: la $2, sym_2_6882
+.globl sym_2_6883
+sym_2_6883: la $2, sym_2_6883
+.globl sym_2_6884
+sym_2_6884: la $2, sym_2_6884
+.globl sym_2_6885
+sym_2_6885: la $2, sym_2_6885
+.globl sym_2_6886
+sym_2_6886: la $2, sym_2_6886
+.globl sym_2_6887
+sym_2_6887: la $2, sym_2_6887
+.globl sym_2_6888
+sym_2_6888: la $2, sym_2_6888
+.globl sym_2_6889
+sym_2_6889: la $2, sym_2_6889
+.globl sym_2_6890
+sym_2_6890: la $2, sym_2_6890
+.globl sym_2_6891
+sym_2_6891: la $2, sym_2_6891
+.globl sym_2_6892
+sym_2_6892: la $2, sym_2_6892
+.globl sym_2_6893
+sym_2_6893: la $2, sym_2_6893
+.globl sym_2_6894
+sym_2_6894: la $2, sym_2_6894
+.globl sym_2_6895
+sym_2_6895: la $2, sym_2_6895
+.globl sym_2_6896
+sym_2_6896: la $2, sym_2_6896
+.globl sym_2_6897
+sym_2_6897: la $2, sym_2_6897
+.globl sym_2_6898
+sym_2_6898: la $2, sym_2_6898
+.globl sym_2_6899
+sym_2_6899: la $2, sym_2_6899
+.globl sym_2_6900
+sym_2_6900: la $2, sym_2_6900
+.globl sym_2_6901
+sym_2_6901: la $2, sym_2_6901
+.globl sym_2_6902
+sym_2_6902: la $2, sym_2_6902
+.globl sym_2_6903
+sym_2_6903: la $2, sym_2_6903
+.globl sym_2_6904
+sym_2_6904: la $2, sym_2_6904
+.globl sym_2_6905
+sym_2_6905: la $2, sym_2_6905
+.globl sym_2_6906
+sym_2_6906: la $2, sym_2_6906
+.globl sym_2_6907
+sym_2_6907: la $2, sym_2_6907
+.globl sym_2_6908
+sym_2_6908: la $2, sym_2_6908
+.globl sym_2_6909
+sym_2_6909: la $2, sym_2_6909
+.globl sym_2_6910
+sym_2_6910: la $2, sym_2_6910
+.globl sym_2_6911
+sym_2_6911: la $2, sym_2_6911
+.globl sym_2_6912
+sym_2_6912: la $2, sym_2_6912
+.globl sym_2_6913
+sym_2_6913: la $2, sym_2_6913
+.globl sym_2_6914
+sym_2_6914: la $2, sym_2_6914
+.globl sym_2_6915
+sym_2_6915: la $2, sym_2_6915
+.globl sym_2_6916
+sym_2_6916: la $2, sym_2_6916
+.globl sym_2_6917
+sym_2_6917: la $2, sym_2_6917
+.globl sym_2_6918
+sym_2_6918: la $2, sym_2_6918
+.globl sym_2_6919
+sym_2_6919: la $2, sym_2_6919
+.globl sym_2_6920
+sym_2_6920: la $2, sym_2_6920
+.globl sym_2_6921
+sym_2_6921: la $2, sym_2_6921
+.globl sym_2_6922
+sym_2_6922: la $2, sym_2_6922
+.globl sym_2_6923
+sym_2_6923: la $2, sym_2_6923
+.globl sym_2_6924
+sym_2_6924: la $2, sym_2_6924
+.globl sym_2_6925
+sym_2_6925: la $2, sym_2_6925
+.globl sym_2_6926
+sym_2_6926: la $2, sym_2_6926
+.globl sym_2_6927
+sym_2_6927: la $2, sym_2_6927
+.globl sym_2_6928
+sym_2_6928: la $2, sym_2_6928
+.globl sym_2_6929
+sym_2_6929: la $2, sym_2_6929
+.globl sym_2_6930
+sym_2_6930: la $2, sym_2_6930
+.globl sym_2_6931
+sym_2_6931: la $2, sym_2_6931
+.globl sym_2_6932
+sym_2_6932: la $2, sym_2_6932
+.globl sym_2_6933
+sym_2_6933: la $2, sym_2_6933
+.globl sym_2_6934
+sym_2_6934: la $2, sym_2_6934
+.globl sym_2_6935
+sym_2_6935: la $2, sym_2_6935
+.globl sym_2_6936
+sym_2_6936: la $2, sym_2_6936
+.globl sym_2_6937
+sym_2_6937: la $2, sym_2_6937
+.globl sym_2_6938
+sym_2_6938: la $2, sym_2_6938
+.globl sym_2_6939
+sym_2_6939: la $2, sym_2_6939
+.globl sym_2_6940
+sym_2_6940: la $2, sym_2_6940
+.globl sym_2_6941
+sym_2_6941: la $2, sym_2_6941
+.globl sym_2_6942
+sym_2_6942: la $2, sym_2_6942
+.globl sym_2_6943
+sym_2_6943: la $2, sym_2_6943
+.globl sym_2_6944
+sym_2_6944: la $2, sym_2_6944
+.globl sym_2_6945
+sym_2_6945: la $2, sym_2_6945
+.globl sym_2_6946
+sym_2_6946: la $2, sym_2_6946
+.globl sym_2_6947
+sym_2_6947: la $2, sym_2_6947
+.globl sym_2_6948
+sym_2_6948: la $2, sym_2_6948
+.globl sym_2_6949
+sym_2_6949: la $2, sym_2_6949
+.globl sym_2_6950
+sym_2_6950: la $2, sym_2_6950
+.globl sym_2_6951
+sym_2_6951: la $2, sym_2_6951
+.globl sym_2_6952
+sym_2_6952: la $2, sym_2_6952
+.globl sym_2_6953
+sym_2_6953: la $2, sym_2_6953
+.globl sym_2_6954
+sym_2_6954: la $2, sym_2_6954
+.globl sym_2_6955
+sym_2_6955: la $2, sym_2_6955
+.globl sym_2_6956
+sym_2_6956: la $2, sym_2_6956
+.globl sym_2_6957
+sym_2_6957: la $2, sym_2_6957
+.globl sym_2_6958
+sym_2_6958: la $2, sym_2_6958
+.globl sym_2_6959
+sym_2_6959: la $2, sym_2_6959
+.globl sym_2_6960
+sym_2_6960: la $2, sym_2_6960
+.globl sym_2_6961
+sym_2_6961: la $2, sym_2_6961
+.globl sym_2_6962
+sym_2_6962: la $2, sym_2_6962
+.globl sym_2_6963
+sym_2_6963: la $2, sym_2_6963
+.globl sym_2_6964
+sym_2_6964: la $2, sym_2_6964
+.globl sym_2_6965
+sym_2_6965: la $2, sym_2_6965
+.globl sym_2_6966
+sym_2_6966: la $2, sym_2_6966
+.globl sym_2_6967
+sym_2_6967: la $2, sym_2_6967
+.globl sym_2_6968
+sym_2_6968: la $2, sym_2_6968
+.globl sym_2_6969
+sym_2_6969: la $2, sym_2_6969
+.globl sym_2_6970
+sym_2_6970: la $2, sym_2_6970
+.globl sym_2_6971
+sym_2_6971: la $2, sym_2_6971
+.globl sym_2_6972
+sym_2_6972: la $2, sym_2_6972
+.globl sym_2_6973
+sym_2_6973: la $2, sym_2_6973
+.globl sym_2_6974
+sym_2_6974: la $2, sym_2_6974
+.globl sym_2_6975
+sym_2_6975: la $2, sym_2_6975
+.globl sym_2_6976
+sym_2_6976: la $2, sym_2_6976
+.globl sym_2_6977
+sym_2_6977: la $2, sym_2_6977
+.globl sym_2_6978
+sym_2_6978: la $2, sym_2_6978
+.globl sym_2_6979
+sym_2_6979: la $2, sym_2_6979
+.globl sym_2_6980
+sym_2_6980: la $2, sym_2_6980
+.globl sym_2_6981
+sym_2_6981: la $2, sym_2_6981
+.globl sym_2_6982
+sym_2_6982: la $2, sym_2_6982
+.globl sym_2_6983
+sym_2_6983: la $2, sym_2_6983
+.globl sym_2_6984
+sym_2_6984: la $2, sym_2_6984
+.globl sym_2_6985
+sym_2_6985: la $2, sym_2_6985
+.globl sym_2_6986
+sym_2_6986: la $2, sym_2_6986
+.globl sym_2_6987
+sym_2_6987: la $2, sym_2_6987
+.globl sym_2_6988
+sym_2_6988: la $2, sym_2_6988
+.globl sym_2_6989
+sym_2_6989: la $2, sym_2_6989
+.globl sym_2_6990
+sym_2_6990: la $2, sym_2_6990
+.globl sym_2_6991
+sym_2_6991: la $2, sym_2_6991
+.globl sym_2_6992
+sym_2_6992: la $2, sym_2_6992
+.globl sym_2_6993
+sym_2_6993: la $2, sym_2_6993
+.globl sym_2_6994
+sym_2_6994: la $2, sym_2_6994
+.globl sym_2_6995
+sym_2_6995: la $2, sym_2_6995
+.globl sym_2_6996
+sym_2_6996: la $2, sym_2_6996
+.globl sym_2_6997
+sym_2_6997: la $2, sym_2_6997
+.globl sym_2_6998
+sym_2_6998: la $2, sym_2_6998
+.globl sym_2_6999
+sym_2_6999: la $2, sym_2_6999
+.globl sym_2_7000
+sym_2_7000: la $2, sym_2_7000
+.globl sym_2_7001
+sym_2_7001: la $2, sym_2_7001
+.globl sym_2_7002
+sym_2_7002: la $2, sym_2_7002
+.globl sym_2_7003
+sym_2_7003: la $2, sym_2_7003
+.globl sym_2_7004
+sym_2_7004: la $2, sym_2_7004
+.globl sym_2_7005
+sym_2_7005: la $2, sym_2_7005
+.globl sym_2_7006
+sym_2_7006: la $2, sym_2_7006
+.globl sym_2_7007
+sym_2_7007: la $2, sym_2_7007
+.globl sym_2_7008
+sym_2_7008: la $2, sym_2_7008
+.globl sym_2_7009
+sym_2_7009: la $2, sym_2_7009
+.globl sym_2_7010
+sym_2_7010: la $2, sym_2_7010
+.globl sym_2_7011
+sym_2_7011: la $2, sym_2_7011
+.globl sym_2_7012
+sym_2_7012: la $2, sym_2_7012
+.globl sym_2_7013
+sym_2_7013: la $2, sym_2_7013
+.globl sym_2_7014
+sym_2_7014: la $2, sym_2_7014
+.globl sym_2_7015
+sym_2_7015: la $2, sym_2_7015
+.globl sym_2_7016
+sym_2_7016: la $2, sym_2_7016
+.globl sym_2_7017
+sym_2_7017: la $2, sym_2_7017
+.globl sym_2_7018
+sym_2_7018: la $2, sym_2_7018
+.globl sym_2_7019
+sym_2_7019: la $2, sym_2_7019
+.globl sym_2_7020
+sym_2_7020: la $2, sym_2_7020
+.globl sym_2_7021
+sym_2_7021: la $2, sym_2_7021
+.globl sym_2_7022
+sym_2_7022: la $2, sym_2_7022
+.globl sym_2_7023
+sym_2_7023: la $2, sym_2_7023
+.globl sym_2_7024
+sym_2_7024: la $2, sym_2_7024
+.globl sym_2_7025
+sym_2_7025: la $2, sym_2_7025
+.globl sym_2_7026
+sym_2_7026: la $2, sym_2_7026
+.globl sym_2_7027
+sym_2_7027: la $2, sym_2_7027
+.globl sym_2_7028
+sym_2_7028: la $2, sym_2_7028
+.globl sym_2_7029
+sym_2_7029: la $2, sym_2_7029
+.globl sym_2_7030
+sym_2_7030: la $2, sym_2_7030
+.globl sym_2_7031
+sym_2_7031: la $2, sym_2_7031
+.globl sym_2_7032
+sym_2_7032: la $2, sym_2_7032
+.globl sym_2_7033
+sym_2_7033: la $2, sym_2_7033
+.globl sym_2_7034
+sym_2_7034: la $2, sym_2_7034
+.globl sym_2_7035
+sym_2_7035: la $2, sym_2_7035
+.globl sym_2_7036
+sym_2_7036: la $2, sym_2_7036
+.globl sym_2_7037
+sym_2_7037: la $2, sym_2_7037
+.globl sym_2_7038
+sym_2_7038: la $2, sym_2_7038
+.globl sym_2_7039
+sym_2_7039: la $2, sym_2_7039
+.globl sym_2_7040
+sym_2_7040: la $2, sym_2_7040
+.globl sym_2_7041
+sym_2_7041: la $2, sym_2_7041
+.globl sym_2_7042
+sym_2_7042: la $2, sym_2_7042
+.globl sym_2_7043
+sym_2_7043: la $2, sym_2_7043
+.globl sym_2_7044
+sym_2_7044: la $2, sym_2_7044
+.globl sym_2_7045
+sym_2_7045: la $2, sym_2_7045
+.globl sym_2_7046
+sym_2_7046: la $2, sym_2_7046
+.globl sym_2_7047
+sym_2_7047: la $2, sym_2_7047
+.globl sym_2_7048
+sym_2_7048: la $2, sym_2_7048
+.globl sym_2_7049
+sym_2_7049: la $2, sym_2_7049
+.globl sym_2_7050
+sym_2_7050: la $2, sym_2_7050
+.globl sym_2_7051
+sym_2_7051: la $2, sym_2_7051
+.globl sym_2_7052
+sym_2_7052: la $2, sym_2_7052
+.globl sym_2_7053
+sym_2_7053: la $2, sym_2_7053
+.globl sym_2_7054
+sym_2_7054: la $2, sym_2_7054
+.globl sym_2_7055
+sym_2_7055: la $2, sym_2_7055
+.globl sym_2_7056
+sym_2_7056: la $2, sym_2_7056
+.globl sym_2_7057
+sym_2_7057: la $2, sym_2_7057
+.globl sym_2_7058
+sym_2_7058: la $2, sym_2_7058
+.globl sym_2_7059
+sym_2_7059: la $2, sym_2_7059
+.globl sym_2_7060
+sym_2_7060: la $2, sym_2_7060
+.globl sym_2_7061
+sym_2_7061: la $2, sym_2_7061
+.globl sym_2_7062
+sym_2_7062: la $2, sym_2_7062
+.globl sym_2_7063
+sym_2_7063: la $2, sym_2_7063
+.globl sym_2_7064
+sym_2_7064: la $2, sym_2_7064
+.globl sym_2_7065
+sym_2_7065: la $2, sym_2_7065
+.globl sym_2_7066
+sym_2_7066: la $2, sym_2_7066
+.globl sym_2_7067
+sym_2_7067: la $2, sym_2_7067
+.globl sym_2_7068
+sym_2_7068: la $2, sym_2_7068
+.globl sym_2_7069
+sym_2_7069: la $2, sym_2_7069
+.globl sym_2_7070
+sym_2_7070: la $2, sym_2_7070
+.globl sym_2_7071
+sym_2_7071: la $2, sym_2_7071
+.globl sym_2_7072
+sym_2_7072: la $2, sym_2_7072
+.globl sym_2_7073
+sym_2_7073: la $2, sym_2_7073
+.globl sym_2_7074
+sym_2_7074: la $2, sym_2_7074
+.globl sym_2_7075
+sym_2_7075: la $2, sym_2_7075
+.globl sym_2_7076
+sym_2_7076: la $2, sym_2_7076
+.globl sym_2_7077
+sym_2_7077: la $2, sym_2_7077
+.globl sym_2_7078
+sym_2_7078: la $2, sym_2_7078
+.globl sym_2_7079
+sym_2_7079: la $2, sym_2_7079
+.globl sym_2_7080
+sym_2_7080: la $2, sym_2_7080
+.globl sym_2_7081
+sym_2_7081: la $2, sym_2_7081
+.globl sym_2_7082
+sym_2_7082: la $2, sym_2_7082
+.globl sym_2_7083
+sym_2_7083: la $2, sym_2_7083
+.globl sym_2_7084
+sym_2_7084: la $2, sym_2_7084
+.globl sym_2_7085
+sym_2_7085: la $2, sym_2_7085
+.globl sym_2_7086
+sym_2_7086: la $2, sym_2_7086
+.globl sym_2_7087
+sym_2_7087: la $2, sym_2_7087
+.globl sym_2_7088
+sym_2_7088: la $2, sym_2_7088
+.globl sym_2_7089
+sym_2_7089: la $2, sym_2_7089
+.globl sym_2_7090
+sym_2_7090: la $2, sym_2_7090
+.globl sym_2_7091
+sym_2_7091: la $2, sym_2_7091
+.globl sym_2_7092
+sym_2_7092: la $2, sym_2_7092
+.globl sym_2_7093
+sym_2_7093: la $2, sym_2_7093
+.globl sym_2_7094
+sym_2_7094: la $2, sym_2_7094
+.globl sym_2_7095
+sym_2_7095: la $2, sym_2_7095
+.globl sym_2_7096
+sym_2_7096: la $2, sym_2_7096
+.globl sym_2_7097
+sym_2_7097: la $2, sym_2_7097
+.globl sym_2_7098
+sym_2_7098: la $2, sym_2_7098
+.globl sym_2_7099
+sym_2_7099: la $2, sym_2_7099
+.globl sym_2_7100
+sym_2_7100: la $2, sym_2_7100
+.globl sym_2_7101
+sym_2_7101: la $2, sym_2_7101
+.globl sym_2_7102
+sym_2_7102: la $2, sym_2_7102
+.globl sym_2_7103
+sym_2_7103: la $2, sym_2_7103
+.globl sym_2_7104
+sym_2_7104: la $2, sym_2_7104
+.globl sym_2_7105
+sym_2_7105: la $2, sym_2_7105
+.globl sym_2_7106
+sym_2_7106: la $2, sym_2_7106
+.globl sym_2_7107
+sym_2_7107: la $2, sym_2_7107
+.globl sym_2_7108
+sym_2_7108: la $2, sym_2_7108
+.globl sym_2_7109
+sym_2_7109: la $2, sym_2_7109
+.globl sym_2_7110
+sym_2_7110: la $2, sym_2_7110
+.globl sym_2_7111
+sym_2_7111: la $2, sym_2_7111
+.globl sym_2_7112
+sym_2_7112: la $2, sym_2_7112
+.globl sym_2_7113
+sym_2_7113: la $2, sym_2_7113
+.globl sym_2_7114
+sym_2_7114: la $2, sym_2_7114
+.globl sym_2_7115
+sym_2_7115: la $2, sym_2_7115
+.globl sym_2_7116
+sym_2_7116: la $2, sym_2_7116
+.globl sym_2_7117
+sym_2_7117: la $2, sym_2_7117
+.globl sym_2_7118
+sym_2_7118: la $2, sym_2_7118
+.globl sym_2_7119
+sym_2_7119: la $2, sym_2_7119
+.globl sym_2_7120
+sym_2_7120: la $2, sym_2_7120
+.globl sym_2_7121
+sym_2_7121: la $2, sym_2_7121
+.globl sym_2_7122
+sym_2_7122: la $2, sym_2_7122
+.globl sym_2_7123
+sym_2_7123: la $2, sym_2_7123
+.globl sym_2_7124
+sym_2_7124: la $2, sym_2_7124
+.globl sym_2_7125
+sym_2_7125: la $2, sym_2_7125
+.globl sym_2_7126
+sym_2_7126: la $2, sym_2_7126
+.globl sym_2_7127
+sym_2_7127: la $2, sym_2_7127
+.globl sym_2_7128
+sym_2_7128: la $2, sym_2_7128
+.globl sym_2_7129
+sym_2_7129: la $2, sym_2_7129
+.globl sym_2_7130
+sym_2_7130: la $2, sym_2_7130
+.globl sym_2_7131
+sym_2_7131: la $2, sym_2_7131
+.globl sym_2_7132
+sym_2_7132: la $2, sym_2_7132
+.globl sym_2_7133
+sym_2_7133: la $2, sym_2_7133
+.globl sym_2_7134
+sym_2_7134: la $2, sym_2_7134
+.globl sym_2_7135
+sym_2_7135: la $2, sym_2_7135
+.globl sym_2_7136
+sym_2_7136: la $2, sym_2_7136
+.globl sym_2_7137
+sym_2_7137: la $2, sym_2_7137
+.globl sym_2_7138
+sym_2_7138: la $2, sym_2_7138
+.globl sym_2_7139
+sym_2_7139: la $2, sym_2_7139
+.globl sym_2_7140
+sym_2_7140: la $2, sym_2_7140
+.globl sym_2_7141
+sym_2_7141: la $2, sym_2_7141
+.globl sym_2_7142
+sym_2_7142: la $2, sym_2_7142
+.globl sym_2_7143
+sym_2_7143: la $2, sym_2_7143
+.globl sym_2_7144
+sym_2_7144: la $2, sym_2_7144
+.globl sym_2_7145
+sym_2_7145: la $2, sym_2_7145
+.globl sym_2_7146
+sym_2_7146: la $2, sym_2_7146
+.globl sym_2_7147
+sym_2_7147: la $2, sym_2_7147
+.globl sym_2_7148
+sym_2_7148: la $2, sym_2_7148
+.globl sym_2_7149
+sym_2_7149: la $2, sym_2_7149
+.globl sym_2_7150
+sym_2_7150: la $2, sym_2_7150
+.globl sym_2_7151
+sym_2_7151: la $2, sym_2_7151
+.globl sym_2_7152
+sym_2_7152: la $2, sym_2_7152
+.globl sym_2_7153
+sym_2_7153: la $2, sym_2_7153
+.globl sym_2_7154
+sym_2_7154: la $2, sym_2_7154
+.globl sym_2_7155
+sym_2_7155: la $2, sym_2_7155
+.globl sym_2_7156
+sym_2_7156: la $2, sym_2_7156
+.globl sym_2_7157
+sym_2_7157: la $2, sym_2_7157
+.globl sym_2_7158
+sym_2_7158: la $2, sym_2_7158
+.globl sym_2_7159
+sym_2_7159: la $2, sym_2_7159
+.globl sym_2_7160
+sym_2_7160: la $2, sym_2_7160
+.globl sym_2_7161
+sym_2_7161: la $2, sym_2_7161
+.globl sym_2_7162
+sym_2_7162: la $2, sym_2_7162
+.globl sym_2_7163
+sym_2_7163: la $2, sym_2_7163
+.globl sym_2_7164
+sym_2_7164: la $2, sym_2_7164
+.globl sym_2_7165
+sym_2_7165: la $2, sym_2_7165
+.globl sym_2_7166
+sym_2_7166: la $2, sym_2_7166
+.globl sym_2_7167
+sym_2_7167: la $2, sym_2_7167
+.globl sym_2_7168
+sym_2_7168: la $2, sym_2_7168
+.globl sym_2_7169
+sym_2_7169: la $2, sym_2_7169
+.globl sym_2_7170
+sym_2_7170: la $2, sym_2_7170
+.globl sym_2_7171
+sym_2_7171: la $2, sym_2_7171
+.globl sym_2_7172
+sym_2_7172: la $2, sym_2_7172
+.globl sym_2_7173
+sym_2_7173: la $2, sym_2_7173
+.globl sym_2_7174
+sym_2_7174: la $2, sym_2_7174
+.globl sym_2_7175
+sym_2_7175: la $2, sym_2_7175
+.globl sym_2_7176
+sym_2_7176: la $2, sym_2_7176
+.globl sym_2_7177
+sym_2_7177: la $2, sym_2_7177
+.globl sym_2_7178
+sym_2_7178: la $2, sym_2_7178
+.globl sym_2_7179
+sym_2_7179: la $2, sym_2_7179
+.globl sym_2_7180
+sym_2_7180: la $2, sym_2_7180
+.globl sym_2_7181
+sym_2_7181: la $2, sym_2_7181
+.globl sym_2_7182
+sym_2_7182: la $2, sym_2_7182
+.globl sym_2_7183
+sym_2_7183: la $2, sym_2_7183
+.globl sym_2_7184
+sym_2_7184: la $2, sym_2_7184
+.globl sym_2_7185
+sym_2_7185: la $2, sym_2_7185
+.globl sym_2_7186
+sym_2_7186: la $2, sym_2_7186
+.globl sym_2_7187
+sym_2_7187: la $2, sym_2_7187
+.globl sym_2_7188
+sym_2_7188: la $2, sym_2_7188
+.globl sym_2_7189
+sym_2_7189: la $2, sym_2_7189
+.globl sym_2_7190
+sym_2_7190: la $2, sym_2_7190
+.globl sym_2_7191
+sym_2_7191: la $2, sym_2_7191
+.globl sym_2_7192
+sym_2_7192: la $2, sym_2_7192
+.globl sym_2_7193
+sym_2_7193: la $2, sym_2_7193
+.globl sym_2_7194
+sym_2_7194: la $2, sym_2_7194
+.globl sym_2_7195
+sym_2_7195: la $2, sym_2_7195
+.globl sym_2_7196
+sym_2_7196: la $2, sym_2_7196
+.globl sym_2_7197
+sym_2_7197: la $2, sym_2_7197
+.globl sym_2_7198
+sym_2_7198: la $2, sym_2_7198
+.globl sym_2_7199
+sym_2_7199: la $2, sym_2_7199
+.globl sym_2_7200
+sym_2_7200: la $2, sym_2_7200
+.globl sym_2_7201
+sym_2_7201: la $2, sym_2_7201
+.globl sym_2_7202
+sym_2_7202: la $2, sym_2_7202
+.globl sym_2_7203
+sym_2_7203: la $2, sym_2_7203
+.globl sym_2_7204
+sym_2_7204: la $2, sym_2_7204
+.globl sym_2_7205
+sym_2_7205: la $2, sym_2_7205
+.globl sym_2_7206
+sym_2_7206: la $2, sym_2_7206
+.globl sym_2_7207
+sym_2_7207: la $2, sym_2_7207
+.globl sym_2_7208
+sym_2_7208: la $2, sym_2_7208
+.globl sym_2_7209
+sym_2_7209: la $2, sym_2_7209
+.globl sym_2_7210
+sym_2_7210: la $2, sym_2_7210
+.globl sym_2_7211
+sym_2_7211: la $2, sym_2_7211
+.globl sym_2_7212
+sym_2_7212: la $2, sym_2_7212
+.globl sym_2_7213
+sym_2_7213: la $2, sym_2_7213
+.globl sym_2_7214
+sym_2_7214: la $2, sym_2_7214
+.globl sym_2_7215
+sym_2_7215: la $2, sym_2_7215
+.globl sym_2_7216
+sym_2_7216: la $2, sym_2_7216
+.globl sym_2_7217
+sym_2_7217: la $2, sym_2_7217
+.globl sym_2_7218
+sym_2_7218: la $2, sym_2_7218
+.globl sym_2_7219
+sym_2_7219: la $2, sym_2_7219
+.globl sym_2_7220
+sym_2_7220: la $2, sym_2_7220
+.globl sym_2_7221
+sym_2_7221: la $2, sym_2_7221
+.globl sym_2_7222
+sym_2_7222: la $2, sym_2_7222
+.globl sym_2_7223
+sym_2_7223: la $2, sym_2_7223
+.globl sym_2_7224
+sym_2_7224: la $2, sym_2_7224
+.globl sym_2_7225
+sym_2_7225: la $2, sym_2_7225
+.globl sym_2_7226
+sym_2_7226: la $2, sym_2_7226
+.globl sym_2_7227
+sym_2_7227: la $2, sym_2_7227
+.globl sym_2_7228
+sym_2_7228: la $2, sym_2_7228
+.globl sym_2_7229
+sym_2_7229: la $2, sym_2_7229
+.globl sym_2_7230
+sym_2_7230: la $2, sym_2_7230
+.globl sym_2_7231
+sym_2_7231: la $2, sym_2_7231
+.globl sym_2_7232
+sym_2_7232: la $2, sym_2_7232
+.globl sym_2_7233
+sym_2_7233: la $2, sym_2_7233
+.globl sym_2_7234
+sym_2_7234: la $2, sym_2_7234
+.globl sym_2_7235
+sym_2_7235: la $2, sym_2_7235
+.globl sym_2_7236
+sym_2_7236: la $2, sym_2_7236
+.globl sym_2_7237
+sym_2_7237: la $2, sym_2_7237
+.globl sym_2_7238
+sym_2_7238: la $2, sym_2_7238
+.globl sym_2_7239
+sym_2_7239: la $2, sym_2_7239
+.globl sym_2_7240
+sym_2_7240: la $2, sym_2_7240
+.globl sym_2_7241
+sym_2_7241: la $2, sym_2_7241
+.globl sym_2_7242
+sym_2_7242: la $2, sym_2_7242
+.globl sym_2_7243
+sym_2_7243: la $2, sym_2_7243
+.globl sym_2_7244
+sym_2_7244: la $2, sym_2_7244
+.globl sym_2_7245
+sym_2_7245: la $2, sym_2_7245
+.globl sym_2_7246
+sym_2_7246: la $2, sym_2_7246
+.globl sym_2_7247
+sym_2_7247: la $2, sym_2_7247
+.globl sym_2_7248
+sym_2_7248: la $2, sym_2_7248
+.globl sym_2_7249
+sym_2_7249: la $2, sym_2_7249
+.globl sym_2_7250
+sym_2_7250: la $2, sym_2_7250
+.globl sym_2_7251
+sym_2_7251: la $2, sym_2_7251
+.globl sym_2_7252
+sym_2_7252: la $2, sym_2_7252
+.globl sym_2_7253
+sym_2_7253: la $2, sym_2_7253
+.globl sym_2_7254
+sym_2_7254: la $2, sym_2_7254
+.globl sym_2_7255
+sym_2_7255: la $2, sym_2_7255
+.globl sym_2_7256
+sym_2_7256: la $2, sym_2_7256
+.globl sym_2_7257
+sym_2_7257: la $2, sym_2_7257
+.globl sym_2_7258
+sym_2_7258: la $2, sym_2_7258
+.globl sym_2_7259
+sym_2_7259: la $2, sym_2_7259
+.globl sym_2_7260
+sym_2_7260: la $2, sym_2_7260
+.globl sym_2_7261
+sym_2_7261: la $2, sym_2_7261
+.globl sym_2_7262
+sym_2_7262: la $2, sym_2_7262
+.globl sym_2_7263
+sym_2_7263: la $2, sym_2_7263
+.globl sym_2_7264
+sym_2_7264: la $2, sym_2_7264
+.globl sym_2_7265
+sym_2_7265: la $2, sym_2_7265
+.globl sym_2_7266
+sym_2_7266: la $2, sym_2_7266
+.globl sym_2_7267
+sym_2_7267: la $2, sym_2_7267
+.globl sym_2_7268
+sym_2_7268: la $2, sym_2_7268
+.globl sym_2_7269
+sym_2_7269: la $2, sym_2_7269
+.globl sym_2_7270
+sym_2_7270: la $2, sym_2_7270
+.globl sym_2_7271
+sym_2_7271: la $2, sym_2_7271
+.globl sym_2_7272
+sym_2_7272: la $2, sym_2_7272
+.globl sym_2_7273
+sym_2_7273: la $2, sym_2_7273
+.globl sym_2_7274
+sym_2_7274: la $2, sym_2_7274
+.globl sym_2_7275
+sym_2_7275: la $2, sym_2_7275
+.globl sym_2_7276
+sym_2_7276: la $2, sym_2_7276
+.globl sym_2_7277
+sym_2_7277: la $2, sym_2_7277
+.globl sym_2_7278
+sym_2_7278: la $2, sym_2_7278
+.globl sym_2_7279
+sym_2_7279: la $2, sym_2_7279
+.globl sym_2_7280
+sym_2_7280: la $2, sym_2_7280
+.globl sym_2_7281
+sym_2_7281: la $2, sym_2_7281
+.globl sym_2_7282
+sym_2_7282: la $2, sym_2_7282
+.globl sym_2_7283
+sym_2_7283: la $2, sym_2_7283
+.globl sym_2_7284
+sym_2_7284: la $2, sym_2_7284
+.globl sym_2_7285
+sym_2_7285: la $2, sym_2_7285
+.globl sym_2_7286
+sym_2_7286: la $2, sym_2_7286
+.globl sym_2_7287
+sym_2_7287: la $2, sym_2_7287
+.globl sym_2_7288
+sym_2_7288: la $2, sym_2_7288
+.globl sym_2_7289
+sym_2_7289: la $2, sym_2_7289
+.globl sym_2_7290
+sym_2_7290: la $2, sym_2_7290
+.globl sym_2_7291
+sym_2_7291: la $2, sym_2_7291
+.globl sym_2_7292
+sym_2_7292: la $2, sym_2_7292
+.globl sym_2_7293
+sym_2_7293: la $2, sym_2_7293
+.globl sym_2_7294
+sym_2_7294: la $2, sym_2_7294
+.globl sym_2_7295
+sym_2_7295: la $2, sym_2_7295
+.globl sym_2_7296
+sym_2_7296: la $2, sym_2_7296
+.globl sym_2_7297
+sym_2_7297: la $2, sym_2_7297
+.globl sym_2_7298
+sym_2_7298: la $2, sym_2_7298
+.globl sym_2_7299
+sym_2_7299: la $2, sym_2_7299
+.globl sym_2_7300
+sym_2_7300: la $2, sym_2_7300
+.globl sym_2_7301
+sym_2_7301: la $2, sym_2_7301
+.globl sym_2_7302
+sym_2_7302: la $2, sym_2_7302
+.globl sym_2_7303
+sym_2_7303: la $2, sym_2_7303
+.globl sym_2_7304
+sym_2_7304: la $2, sym_2_7304
+.globl sym_2_7305
+sym_2_7305: la $2, sym_2_7305
+.globl sym_2_7306
+sym_2_7306: la $2, sym_2_7306
+.globl sym_2_7307
+sym_2_7307: la $2, sym_2_7307
+.globl sym_2_7308
+sym_2_7308: la $2, sym_2_7308
+.globl sym_2_7309
+sym_2_7309: la $2, sym_2_7309
+.globl sym_2_7310
+sym_2_7310: la $2, sym_2_7310
+.globl sym_2_7311
+sym_2_7311: la $2, sym_2_7311
+.globl sym_2_7312
+sym_2_7312: la $2, sym_2_7312
+.globl sym_2_7313
+sym_2_7313: la $2, sym_2_7313
+.globl sym_2_7314
+sym_2_7314: la $2, sym_2_7314
+.globl sym_2_7315
+sym_2_7315: la $2, sym_2_7315
+.globl sym_2_7316
+sym_2_7316: la $2, sym_2_7316
+.globl sym_2_7317
+sym_2_7317: la $2, sym_2_7317
+.globl sym_2_7318
+sym_2_7318: la $2, sym_2_7318
+.globl sym_2_7319
+sym_2_7319: la $2, sym_2_7319
+.globl sym_2_7320
+sym_2_7320: la $2, sym_2_7320
+.globl sym_2_7321
+sym_2_7321: la $2, sym_2_7321
+.globl sym_2_7322
+sym_2_7322: la $2, sym_2_7322
+.globl sym_2_7323
+sym_2_7323: la $2, sym_2_7323
+.globl sym_2_7324
+sym_2_7324: la $2, sym_2_7324
+.globl sym_2_7325
+sym_2_7325: la $2, sym_2_7325
+.globl sym_2_7326
+sym_2_7326: la $2, sym_2_7326
+.globl sym_2_7327
+sym_2_7327: la $2, sym_2_7327
+.globl sym_2_7328
+sym_2_7328: la $2, sym_2_7328
+.globl sym_2_7329
+sym_2_7329: la $2, sym_2_7329
+.globl sym_2_7330
+sym_2_7330: la $2, sym_2_7330
+.globl sym_2_7331
+sym_2_7331: la $2, sym_2_7331
+.globl sym_2_7332
+sym_2_7332: la $2, sym_2_7332
+.globl sym_2_7333
+sym_2_7333: la $2, sym_2_7333
+.globl sym_2_7334
+sym_2_7334: la $2, sym_2_7334
+.globl sym_2_7335
+sym_2_7335: la $2, sym_2_7335
+.globl sym_2_7336
+sym_2_7336: la $2, sym_2_7336
+.globl sym_2_7337
+sym_2_7337: la $2, sym_2_7337
+.globl sym_2_7338
+sym_2_7338: la $2, sym_2_7338
+.globl sym_2_7339
+sym_2_7339: la $2, sym_2_7339
+.globl sym_2_7340
+sym_2_7340: la $2, sym_2_7340
+.globl sym_2_7341
+sym_2_7341: la $2, sym_2_7341
+.globl sym_2_7342
+sym_2_7342: la $2, sym_2_7342
+.globl sym_2_7343
+sym_2_7343: la $2, sym_2_7343
+.globl sym_2_7344
+sym_2_7344: la $2, sym_2_7344
+.globl sym_2_7345
+sym_2_7345: la $2, sym_2_7345
+.globl sym_2_7346
+sym_2_7346: la $2, sym_2_7346
+.globl sym_2_7347
+sym_2_7347: la $2, sym_2_7347
+.globl sym_2_7348
+sym_2_7348: la $2, sym_2_7348
+.globl sym_2_7349
+sym_2_7349: la $2, sym_2_7349
+.globl sym_2_7350
+sym_2_7350: la $2, sym_2_7350
+.globl sym_2_7351
+sym_2_7351: la $2, sym_2_7351
+.globl sym_2_7352
+sym_2_7352: la $2, sym_2_7352
+.globl sym_2_7353
+sym_2_7353: la $2, sym_2_7353
+.globl sym_2_7354
+sym_2_7354: la $2, sym_2_7354
+.globl sym_2_7355
+sym_2_7355: la $2, sym_2_7355
+.globl sym_2_7356
+sym_2_7356: la $2, sym_2_7356
+.globl sym_2_7357
+sym_2_7357: la $2, sym_2_7357
+.globl sym_2_7358
+sym_2_7358: la $2, sym_2_7358
+.globl sym_2_7359
+sym_2_7359: la $2, sym_2_7359
+.globl sym_2_7360
+sym_2_7360: la $2, sym_2_7360
+.globl sym_2_7361
+sym_2_7361: la $2, sym_2_7361
+.globl sym_2_7362
+sym_2_7362: la $2, sym_2_7362
+.globl sym_2_7363
+sym_2_7363: la $2, sym_2_7363
+.globl sym_2_7364
+sym_2_7364: la $2, sym_2_7364
+.globl sym_2_7365
+sym_2_7365: la $2, sym_2_7365
+.globl sym_2_7366
+sym_2_7366: la $2, sym_2_7366
+.globl sym_2_7367
+sym_2_7367: la $2, sym_2_7367
+.globl sym_2_7368
+sym_2_7368: la $2, sym_2_7368
+.globl sym_2_7369
+sym_2_7369: la $2, sym_2_7369
+.globl sym_2_7370
+sym_2_7370: la $2, sym_2_7370
+.globl sym_2_7371
+sym_2_7371: la $2, sym_2_7371
+.globl sym_2_7372
+sym_2_7372: la $2, sym_2_7372
+.globl sym_2_7373
+sym_2_7373: la $2, sym_2_7373
+.globl sym_2_7374
+sym_2_7374: la $2, sym_2_7374
+.globl sym_2_7375
+sym_2_7375: la $2, sym_2_7375
+.globl sym_2_7376
+sym_2_7376: la $2, sym_2_7376
+.globl sym_2_7377
+sym_2_7377: la $2, sym_2_7377
+.globl sym_2_7378
+sym_2_7378: la $2, sym_2_7378
+.globl sym_2_7379
+sym_2_7379: la $2, sym_2_7379
+.globl sym_2_7380
+sym_2_7380: la $2, sym_2_7380
+.globl sym_2_7381
+sym_2_7381: la $2, sym_2_7381
+.globl sym_2_7382
+sym_2_7382: la $2, sym_2_7382
+.globl sym_2_7383
+sym_2_7383: la $2, sym_2_7383
+.globl sym_2_7384
+sym_2_7384: la $2, sym_2_7384
+.globl sym_2_7385
+sym_2_7385: la $2, sym_2_7385
+.globl sym_2_7386
+sym_2_7386: la $2, sym_2_7386
+.globl sym_2_7387
+sym_2_7387: la $2, sym_2_7387
+.globl sym_2_7388
+sym_2_7388: la $2, sym_2_7388
+.globl sym_2_7389
+sym_2_7389: la $2, sym_2_7389
+.globl sym_2_7390
+sym_2_7390: la $2, sym_2_7390
+.globl sym_2_7391
+sym_2_7391: la $2, sym_2_7391
+.globl sym_2_7392
+sym_2_7392: la $2, sym_2_7392
+.globl sym_2_7393
+sym_2_7393: la $2, sym_2_7393
+.globl sym_2_7394
+sym_2_7394: la $2, sym_2_7394
+.globl sym_2_7395
+sym_2_7395: la $2, sym_2_7395
+.globl sym_2_7396
+sym_2_7396: la $2, sym_2_7396
+.globl sym_2_7397
+sym_2_7397: la $2, sym_2_7397
+.globl sym_2_7398
+sym_2_7398: la $2, sym_2_7398
+.globl sym_2_7399
+sym_2_7399: la $2, sym_2_7399
+.globl sym_2_7400
+sym_2_7400: la $2, sym_2_7400
+.globl sym_2_7401
+sym_2_7401: la $2, sym_2_7401
+.globl sym_2_7402
+sym_2_7402: la $2, sym_2_7402
+.globl sym_2_7403
+sym_2_7403: la $2, sym_2_7403
+.globl sym_2_7404
+sym_2_7404: la $2, sym_2_7404
+.globl sym_2_7405
+sym_2_7405: la $2, sym_2_7405
+.globl sym_2_7406
+sym_2_7406: la $2, sym_2_7406
+.globl sym_2_7407
+sym_2_7407: la $2, sym_2_7407
+.globl sym_2_7408
+sym_2_7408: la $2, sym_2_7408
+.globl sym_2_7409
+sym_2_7409: la $2, sym_2_7409
+.globl sym_2_7410
+sym_2_7410: la $2, sym_2_7410
+.globl sym_2_7411
+sym_2_7411: la $2, sym_2_7411
+.globl sym_2_7412
+sym_2_7412: la $2, sym_2_7412
+.globl sym_2_7413
+sym_2_7413: la $2, sym_2_7413
+.globl sym_2_7414
+sym_2_7414: la $2, sym_2_7414
+.globl sym_2_7415
+sym_2_7415: la $2, sym_2_7415
+.globl sym_2_7416
+sym_2_7416: la $2, sym_2_7416
+.globl sym_2_7417
+sym_2_7417: la $2, sym_2_7417
+.globl sym_2_7418
+sym_2_7418: la $2, sym_2_7418
+.globl sym_2_7419
+sym_2_7419: la $2, sym_2_7419
+.globl sym_2_7420
+sym_2_7420: la $2, sym_2_7420
+.globl sym_2_7421
+sym_2_7421: la $2, sym_2_7421
+.globl sym_2_7422
+sym_2_7422: la $2, sym_2_7422
+.globl sym_2_7423
+sym_2_7423: la $2, sym_2_7423
+.globl sym_2_7424
+sym_2_7424: la $2, sym_2_7424
+.globl sym_2_7425
+sym_2_7425: la $2, sym_2_7425
+.globl sym_2_7426
+sym_2_7426: la $2, sym_2_7426
+.globl sym_2_7427
+sym_2_7427: la $2, sym_2_7427
+.globl sym_2_7428
+sym_2_7428: la $2, sym_2_7428
+.globl sym_2_7429
+sym_2_7429: la $2, sym_2_7429
+.globl sym_2_7430
+sym_2_7430: la $2, sym_2_7430
+.globl sym_2_7431
+sym_2_7431: la $2, sym_2_7431
+.globl sym_2_7432
+sym_2_7432: la $2, sym_2_7432
+.globl sym_2_7433
+sym_2_7433: la $2, sym_2_7433
+.globl sym_2_7434
+sym_2_7434: la $2, sym_2_7434
+.globl sym_2_7435
+sym_2_7435: la $2, sym_2_7435
+.globl sym_2_7436
+sym_2_7436: la $2, sym_2_7436
+.globl sym_2_7437
+sym_2_7437: la $2, sym_2_7437
+.globl sym_2_7438
+sym_2_7438: la $2, sym_2_7438
+.globl sym_2_7439
+sym_2_7439: la $2, sym_2_7439
+.globl sym_2_7440
+sym_2_7440: la $2, sym_2_7440
+.globl sym_2_7441
+sym_2_7441: la $2, sym_2_7441
+.globl sym_2_7442
+sym_2_7442: la $2, sym_2_7442
+.globl sym_2_7443
+sym_2_7443: la $2, sym_2_7443
+.globl sym_2_7444
+sym_2_7444: la $2, sym_2_7444
+.globl sym_2_7445
+sym_2_7445: la $2, sym_2_7445
+.globl sym_2_7446
+sym_2_7446: la $2, sym_2_7446
+.globl sym_2_7447
+sym_2_7447: la $2, sym_2_7447
+.globl sym_2_7448
+sym_2_7448: la $2, sym_2_7448
+.globl sym_2_7449
+sym_2_7449: la $2, sym_2_7449
+.globl sym_2_7450
+sym_2_7450: la $2, sym_2_7450
+.globl sym_2_7451
+sym_2_7451: la $2, sym_2_7451
+.globl sym_2_7452
+sym_2_7452: la $2, sym_2_7452
+.globl sym_2_7453
+sym_2_7453: la $2, sym_2_7453
+.globl sym_2_7454
+sym_2_7454: la $2, sym_2_7454
+.globl sym_2_7455
+sym_2_7455: la $2, sym_2_7455
+.globl sym_2_7456
+sym_2_7456: la $2, sym_2_7456
+.globl sym_2_7457
+sym_2_7457: la $2, sym_2_7457
+.globl sym_2_7458
+sym_2_7458: la $2, sym_2_7458
+.globl sym_2_7459
+sym_2_7459: la $2, sym_2_7459
+.globl sym_2_7460
+sym_2_7460: la $2, sym_2_7460
+.globl sym_2_7461
+sym_2_7461: la $2, sym_2_7461
+.globl sym_2_7462
+sym_2_7462: la $2, sym_2_7462
+.globl sym_2_7463
+sym_2_7463: la $2, sym_2_7463
+.globl sym_2_7464
+sym_2_7464: la $2, sym_2_7464
+.globl sym_2_7465
+sym_2_7465: la $2, sym_2_7465
+.globl sym_2_7466
+sym_2_7466: la $2, sym_2_7466
+.globl sym_2_7467
+sym_2_7467: la $2, sym_2_7467
+.globl sym_2_7468
+sym_2_7468: la $2, sym_2_7468
+.globl sym_2_7469
+sym_2_7469: la $2, sym_2_7469
+.globl sym_2_7470
+sym_2_7470: la $2, sym_2_7470
+.globl sym_2_7471
+sym_2_7471: la $2, sym_2_7471
+.globl sym_2_7472
+sym_2_7472: la $2, sym_2_7472
+.globl sym_2_7473
+sym_2_7473: la $2, sym_2_7473
+.globl sym_2_7474
+sym_2_7474: la $2, sym_2_7474
+.globl sym_2_7475
+sym_2_7475: la $2, sym_2_7475
+.globl sym_2_7476
+sym_2_7476: la $2, sym_2_7476
+.globl sym_2_7477
+sym_2_7477: la $2, sym_2_7477
+.globl sym_2_7478
+sym_2_7478: la $2, sym_2_7478
+.globl sym_2_7479
+sym_2_7479: la $2, sym_2_7479
+.globl sym_2_7480
+sym_2_7480: la $2, sym_2_7480
+.globl sym_2_7481
+sym_2_7481: la $2, sym_2_7481
+.globl sym_2_7482
+sym_2_7482: la $2, sym_2_7482
+.globl sym_2_7483
+sym_2_7483: la $2, sym_2_7483
+.globl sym_2_7484
+sym_2_7484: la $2, sym_2_7484
+.globl sym_2_7485
+sym_2_7485: la $2, sym_2_7485
+.globl sym_2_7486
+sym_2_7486: la $2, sym_2_7486
+.globl sym_2_7487
+sym_2_7487: la $2, sym_2_7487
+.globl sym_2_7488
+sym_2_7488: la $2, sym_2_7488
+.globl sym_2_7489
+sym_2_7489: la $2, sym_2_7489
+.globl sym_2_7490
+sym_2_7490: la $2, sym_2_7490
+.globl sym_2_7491
+sym_2_7491: la $2, sym_2_7491
+.globl sym_2_7492
+sym_2_7492: la $2, sym_2_7492
+.globl sym_2_7493
+sym_2_7493: la $2, sym_2_7493
+.globl sym_2_7494
+sym_2_7494: la $2, sym_2_7494
+.globl sym_2_7495
+sym_2_7495: la $2, sym_2_7495
+.globl sym_2_7496
+sym_2_7496: la $2, sym_2_7496
+.globl sym_2_7497
+sym_2_7497: la $2, sym_2_7497
+.globl sym_2_7498
+sym_2_7498: la $2, sym_2_7498
+.globl sym_2_7499
+sym_2_7499: la $2, sym_2_7499
+.globl sym_2_7500
+sym_2_7500: la $2, sym_2_7500
+.globl sym_2_7501
+sym_2_7501: la $2, sym_2_7501
+.globl sym_2_7502
+sym_2_7502: la $2, sym_2_7502
+.globl sym_2_7503
+sym_2_7503: la $2, sym_2_7503
+.globl sym_2_7504
+sym_2_7504: la $2, sym_2_7504
+.globl sym_2_7505
+sym_2_7505: la $2, sym_2_7505
+.globl sym_2_7506
+sym_2_7506: la $2, sym_2_7506
+.globl sym_2_7507
+sym_2_7507: la $2, sym_2_7507
+.globl sym_2_7508
+sym_2_7508: la $2, sym_2_7508
+.globl sym_2_7509
+sym_2_7509: la $2, sym_2_7509
+.globl sym_2_7510
+sym_2_7510: la $2, sym_2_7510
+.globl sym_2_7511
+sym_2_7511: la $2, sym_2_7511
+.globl sym_2_7512
+sym_2_7512: la $2, sym_2_7512
+.globl sym_2_7513
+sym_2_7513: la $2, sym_2_7513
+.globl sym_2_7514
+sym_2_7514: la $2, sym_2_7514
+.globl sym_2_7515
+sym_2_7515: la $2, sym_2_7515
+.globl sym_2_7516
+sym_2_7516: la $2, sym_2_7516
+.globl sym_2_7517
+sym_2_7517: la $2, sym_2_7517
+.globl sym_2_7518
+sym_2_7518: la $2, sym_2_7518
+.globl sym_2_7519
+sym_2_7519: la $2, sym_2_7519
+.globl sym_2_7520
+sym_2_7520: la $2, sym_2_7520
+.globl sym_2_7521
+sym_2_7521: la $2, sym_2_7521
+.globl sym_2_7522
+sym_2_7522: la $2, sym_2_7522
+.globl sym_2_7523
+sym_2_7523: la $2, sym_2_7523
+.globl sym_2_7524
+sym_2_7524: la $2, sym_2_7524
+.globl sym_2_7525
+sym_2_7525: la $2, sym_2_7525
+.globl sym_2_7526
+sym_2_7526: la $2, sym_2_7526
+.globl sym_2_7527
+sym_2_7527: la $2, sym_2_7527
+.globl sym_2_7528
+sym_2_7528: la $2, sym_2_7528
+.globl sym_2_7529
+sym_2_7529: la $2, sym_2_7529
+.globl sym_2_7530
+sym_2_7530: la $2, sym_2_7530
+.globl sym_2_7531
+sym_2_7531: la $2, sym_2_7531
+.globl sym_2_7532
+sym_2_7532: la $2, sym_2_7532
+.globl sym_2_7533
+sym_2_7533: la $2, sym_2_7533
+.globl sym_2_7534
+sym_2_7534: la $2, sym_2_7534
+.globl sym_2_7535
+sym_2_7535: la $2, sym_2_7535
+.globl sym_2_7536
+sym_2_7536: la $2, sym_2_7536
+.globl sym_2_7537
+sym_2_7537: la $2, sym_2_7537
+.globl sym_2_7538
+sym_2_7538: la $2, sym_2_7538
+.globl sym_2_7539
+sym_2_7539: la $2, sym_2_7539
+.globl sym_2_7540
+sym_2_7540: la $2, sym_2_7540
+.globl sym_2_7541
+sym_2_7541: la $2, sym_2_7541
+.globl sym_2_7542
+sym_2_7542: la $2, sym_2_7542
+.globl sym_2_7543
+sym_2_7543: la $2, sym_2_7543
+.globl sym_2_7544
+sym_2_7544: la $2, sym_2_7544
+.globl sym_2_7545
+sym_2_7545: la $2, sym_2_7545
+.globl sym_2_7546
+sym_2_7546: la $2, sym_2_7546
+.globl sym_2_7547
+sym_2_7547: la $2, sym_2_7547
+.globl sym_2_7548
+sym_2_7548: la $2, sym_2_7548
+.globl sym_2_7549
+sym_2_7549: la $2, sym_2_7549
+.globl sym_2_7550
+sym_2_7550: la $2, sym_2_7550
+.globl sym_2_7551
+sym_2_7551: la $2, sym_2_7551
+.globl sym_2_7552
+sym_2_7552: la $2, sym_2_7552
+.globl sym_2_7553
+sym_2_7553: la $2, sym_2_7553
+.globl sym_2_7554
+sym_2_7554: la $2, sym_2_7554
+.globl sym_2_7555
+sym_2_7555: la $2, sym_2_7555
+.globl sym_2_7556
+sym_2_7556: la $2, sym_2_7556
+.globl sym_2_7557
+sym_2_7557: la $2, sym_2_7557
+.globl sym_2_7558
+sym_2_7558: la $2, sym_2_7558
+.globl sym_2_7559
+sym_2_7559: la $2, sym_2_7559
+.globl sym_2_7560
+sym_2_7560: la $2, sym_2_7560
+.globl sym_2_7561
+sym_2_7561: la $2, sym_2_7561
+.globl sym_2_7562
+sym_2_7562: la $2, sym_2_7562
+.globl sym_2_7563
+sym_2_7563: la $2, sym_2_7563
+.globl sym_2_7564
+sym_2_7564: la $2, sym_2_7564
+.globl sym_2_7565
+sym_2_7565: la $2, sym_2_7565
+.globl sym_2_7566
+sym_2_7566: la $2, sym_2_7566
+.globl sym_2_7567
+sym_2_7567: la $2, sym_2_7567
+.globl sym_2_7568
+sym_2_7568: la $2, sym_2_7568
+.globl sym_2_7569
+sym_2_7569: la $2, sym_2_7569
+.globl sym_2_7570
+sym_2_7570: la $2, sym_2_7570
+.globl sym_2_7571
+sym_2_7571: la $2, sym_2_7571
+.globl sym_2_7572
+sym_2_7572: la $2, sym_2_7572
+.globl sym_2_7573
+sym_2_7573: la $2, sym_2_7573
+.globl sym_2_7574
+sym_2_7574: la $2, sym_2_7574
+.globl sym_2_7575
+sym_2_7575: la $2, sym_2_7575
+.globl sym_2_7576
+sym_2_7576: la $2, sym_2_7576
+.globl sym_2_7577
+sym_2_7577: la $2, sym_2_7577
+.globl sym_2_7578
+sym_2_7578: la $2, sym_2_7578
+.globl sym_2_7579
+sym_2_7579: la $2, sym_2_7579
+.globl sym_2_7580
+sym_2_7580: la $2, sym_2_7580
+.globl sym_2_7581
+sym_2_7581: la $2, sym_2_7581
+.globl sym_2_7582
+sym_2_7582: la $2, sym_2_7582
+.globl sym_2_7583
+sym_2_7583: la $2, sym_2_7583
+.globl sym_2_7584
+sym_2_7584: la $2, sym_2_7584
+.globl sym_2_7585
+sym_2_7585: la $2, sym_2_7585
+.globl sym_2_7586
+sym_2_7586: la $2, sym_2_7586
+.globl sym_2_7587
+sym_2_7587: la $2, sym_2_7587
+.globl sym_2_7588
+sym_2_7588: la $2, sym_2_7588
+.globl sym_2_7589
+sym_2_7589: la $2, sym_2_7589
+.globl sym_2_7590
+sym_2_7590: la $2, sym_2_7590
+.globl sym_2_7591
+sym_2_7591: la $2, sym_2_7591
+.globl sym_2_7592
+sym_2_7592: la $2, sym_2_7592
+.globl sym_2_7593
+sym_2_7593: la $2, sym_2_7593
+.globl sym_2_7594
+sym_2_7594: la $2, sym_2_7594
+.globl sym_2_7595
+sym_2_7595: la $2, sym_2_7595
+.globl sym_2_7596
+sym_2_7596: la $2, sym_2_7596
+.globl sym_2_7597
+sym_2_7597: la $2, sym_2_7597
+.globl sym_2_7598
+sym_2_7598: la $2, sym_2_7598
+.globl sym_2_7599
+sym_2_7599: la $2, sym_2_7599
+.globl sym_2_7600
+sym_2_7600: la $2, sym_2_7600
+.globl sym_2_7601
+sym_2_7601: la $2, sym_2_7601
+.globl sym_2_7602
+sym_2_7602: la $2, sym_2_7602
+.globl sym_2_7603
+sym_2_7603: la $2, sym_2_7603
+.globl sym_2_7604
+sym_2_7604: la $2, sym_2_7604
+.globl sym_2_7605
+sym_2_7605: la $2, sym_2_7605
+.globl sym_2_7606
+sym_2_7606: la $2, sym_2_7606
+.globl sym_2_7607
+sym_2_7607: la $2, sym_2_7607
+.globl sym_2_7608
+sym_2_7608: la $2, sym_2_7608
+.globl sym_2_7609
+sym_2_7609: la $2, sym_2_7609
+.globl sym_2_7610
+sym_2_7610: la $2, sym_2_7610
+.globl sym_2_7611
+sym_2_7611: la $2, sym_2_7611
+.globl sym_2_7612
+sym_2_7612: la $2, sym_2_7612
+.globl sym_2_7613
+sym_2_7613: la $2, sym_2_7613
+.globl sym_2_7614
+sym_2_7614: la $2, sym_2_7614
+.globl sym_2_7615
+sym_2_7615: la $2, sym_2_7615
+.globl sym_2_7616
+sym_2_7616: la $2, sym_2_7616
+.globl sym_2_7617
+sym_2_7617: la $2, sym_2_7617
+.globl sym_2_7618
+sym_2_7618: la $2, sym_2_7618
+.globl sym_2_7619
+sym_2_7619: la $2, sym_2_7619
+.globl sym_2_7620
+sym_2_7620: la $2, sym_2_7620
+.globl sym_2_7621
+sym_2_7621: la $2, sym_2_7621
+.globl sym_2_7622
+sym_2_7622: la $2, sym_2_7622
+.globl sym_2_7623
+sym_2_7623: la $2, sym_2_7623
+.globl sym_2_7624
+sym_2_7624: la $2, sym_2_7624
+.globl sym_2_7625
+sym_2_7625: la $2, sym_2_7625
+.globl sym_2_7626
+sym_2_7626: la $2, sym_2_7626
+.globl sym_2_7627
+sym_2_7627: la $2, sym_2_7627
+.globl sym_2_7628
+sym_2_7628: la $2, sym_2_7628
+.globl sym_2_7629
+sym_2_7629: la $2, sym_2_7629
+.globl sym_2_7630
+sym_2_7630: la $2, sym_2_7630
+.globl sym_2_7631
+sym_2_7631: la $2, sym_2_7631
+.globl sym_2_7632
+sym_2_7632: la $2, sym_2_7632
+.globl sym_2_7633
+sym_2_7633: la $2, sym_2_7633
+.globl sym_2_7634
+sym_2_7634: la $2, sym_2_7634
+.globl sym_2_7635
+sym_2_7635: la $2, sym_2_7635
+.globl sym_2_7636
+sym_2_7636: la $2, sym_2_7636
+.globl sym_2_7637
+sym_2_7637: la $2, sym_2_7637
+.globl sym_2_7638
+sym_2_7638: la $2, sym_2_7638
+.globl sym_2_7639
+sym_2_7639: la $2, sym_2_7639
+.globl sym_2_7640
+sym_2_7640: la $2, sym_2_7640
+.globl sym_2_7641
+sym_2_7641: la $2, sym_2_7641
+.globl sym_2_7642
+sym_2_7642: la $2, sym_2_7642
+.globl sym_2_7643
+sym_2_7643: la $2, sym_2_7643
+.globl sym_2_7644
+sym_2_7644: la $2, sym_2_7644
+.globl sym_2_7645
+sym_2_7645: la $2, sym_2_7645
+.globl sym_2_7646
+sym_2_7646: la $2, sym_2_7646
+.globl sym_2_7647
+sym_2_7647: la $2, sym_2_7647
+.globl sym_2_7648
+sym_2_7648: la $2, sym_2_7648
+.globl sym_2_7649
+sym_2_7649: la $2, sym_2_7649
+.globl sym_2_7650
+sym_2_7650: la $2, sym_2_7650
+.globl sym_2_7651
+sym_2_7651: la $2, sym_2_7651
+.globl sym_2_7652
+sym_2_7652: la $2, sym_2_7652
+.globl sym_2_7653
+sym_2_7653: la $2, sym_2_7653
+.globl sym_2_7654
+sym_2_7654: la $2, sym_2_7654
+.globl sym_2_7655
+sym_2_7655: la $2, sym_2_7655
+.globl sym_2_7656
+sym_2_7656: la $2, sym_2_7656
+.globl sym_2_7657
+sym_2_7657: la $2, sym_2_7657
+.globl sym_2_7658
+sym_2_7658: la $2, sym_2_7658
+.globl sym_2_7659
+sym_2_7659: la $2, sym_2_7659
+.globl sym_2_7660
+sym_2_7660: la $2, sym_2_7660
+.globl sym_2_7661
+sym_2_7661: la $2, sym_2_7661
+.globl sym_2_7662
+sym_2_7662: la $2, sym_2_7662
+.globl sym_2_7663
+sym_2_7663: la $2, sym_2_7663
+.globl sym_2_7664
+sym_2_7664: la $2, sym_2_7664
+.globl sym_2_7665
+sym_2_7665: la $2, sym_2_7665
+.globl sym_2_7666
+sym_2_7666: la $2, sym_2_7666
+.globl sym_2_7667
+sym_2_7667: la $2, sym_2_7667
+.globl sym_2_7668
+sym_2_7668: la $2, sym_2_7668
+.globl sym_2_7669
+sym_2_7669: la $2, sym_2_7669
+.globl sym_2_7670
+sym_2_7670: la $2, sym_2_7670
+.globl sym_2_7671
+sym_2_7671: la $2, sym_2_7671
+.globl sym_2_7672
+sym_2_7672: la $2, sym_2_7672
+.globl sym_2_7673
+sym_2_7673: la $2, sym_2_7673
+.globl sym_2_7674
+sym_2_7674: la $2, sym_2_7674
+.globl sym_2_7675
+sym_2_7675: la $2, sym_2_7675
+.globl sym_2_7676
+sym_2_7676: la $2, sym_2_7676
+.globl sym_2_7677
+sym_2_7677: la $2, sym_2_7677
+.globl sym_2_7678
+sym_2_7678: la $2, sym_2_7678
+.globl sym_2_7679
+sym_2_7679: la $2, sym_2_7679
+.globl sym_2_7680
+sym_2_7680: la $2, sym_2_7680
+.globl sym_2_7681
+sym_2_7681: la $2, sym_2_7681
+.globl sym_2_7682
+sym_2_7682: la $2, sym_2_7682
+.globl sym_2_7683
+sym_2_7683: la $2, sym_2_7683
+.globl sym_2_7684
+sym_2_7684: la $2, sym_2_7684
+.globl sym_2_7685
+sym_2_7685: la $2, sym_2_7685
+.globl sym_2_7686
+sym_2_7686: la $2, sym_2_7686
+.globl sym_2_7687
+sym_2_7687: la $2, sym_2_7687
+.globl sym_2_7688
+sym_2_7688: la $2, sym_2_7688
+.globl sym_2_7689
+sym_2_7689: la $2, sym_2_7689
+.globl sym_2_7690
+sym_2_7690: la $2, sym_2_7690
+.globl sym_2_7691
+sym_2_7691: la $2, sym_2_7691
+.globl sym_2_7692
+sym_2_7692: la $2, sym_2_7692
+.globl sym_2_7693
+sym_2_7693: la $2, sym_2_7693
+.globl sym_2_7694
+sym_2_7694: la $2, sym_2_7694
+.globl sym_2_7695
+sym_2_7695: la $2, sym_2_7695
+.globl sym_2_7696
+sym_2_7696: la $2, sym_2_7696
+.globl sym_2_7697
+sym_2_7697: la $2, sym_2_7697
+.globl sym_2_7698
+sym_2_7698: la $2, sym_2_7698
+.globl sym_2_7699
+sym_2_7699: la $2, sym_2_7699
+.globl sym_2_7700
+sym_2_7700: la $2, sym_2_7700
+.globl sym_2_7701
+sym_2_7701: la $2, sym_2_7701
+.globl sym_2_7702
+sym_2_7702: la $2, sym_2_7702
+.globl sym_2_7703
+sym_2_7703: la $2, sym_2_7703
+.globl sym_2_7704
+sym_2_7704: la $2, sym_2_7704
+.globl sym_2_7705
+sym_2_7705: la $2, sym_2_7705
+.globl sym_2_7706
+sym_2_7706: la $2, sym_2_7706
+.globl sym_2_7707
+sym_2_7707: la $2, sym_2_7707
+.globl sym_2_7708
+sym_2_7708: la $2, sym_2_7708
+.globl sym_2_7709
+sym_2_7709: la $2, sym_2_7709
+.globl sym_2_7710
+sym_2_7710: la $2, sym_2_7710
+.globl sym_2_7711
+sym_2_7711: la $2, sym_2_7711
+.globl sym_2_7712
+sym_2_7712: la $2, sym_2_7712
+.globl sym_2_7713
+sym_2_7713: la $2, sym_2_7713
+.globl sym_2_7714
+sym_2_7714: la $2, sym_2_7714
+.globl sym_2_7715
+sym_2_7715: la $2, sym_2_7715
+.globl sym_2_7716
+sym_2_7716: la $2, sym_2_7716
+.globl sym_2_7717
+sym_2_7717: la $2, sym_2_7717
+.globl sym_2_7718
+sym_2_7718: la $2, sym_2_7718
+.globl sym_2_7719
+sym_2_7719: la $2, sym_2_7719
+.globl sym_2_7720
+sym_2_7720: la $2, sym_2_7720
+.globl sym_2_7721
+sym_2_7721: la $2, sym_2_7721
+.globl sym_2_7722
+sym_2_7722: la $2, sym_2_7722
+.globl sym_2_7723
+sym_2_7723: la $2, sym_2_7723
+.globl sym_2_7724
+sym_2_7724: la $2, sym_2_7724
+.globl sym_2_7725
+sym_2_7725: la $2, sym_2_7725
+.globl sym_2_7726
+sym_2_7726: la $2, sym_2_7726
+.globl sym_2_7727
+sym_2_7727: la $2, sym_2_7727
+.globl sym_2_7728
+sym_2_7728: la $2, sym_2_7728
+.globl sym_2_7729
+sym_2_7729: la $2, sym_2_7729
+.globl sym_2_7730
+sym_2_7730: la $2, sym_2_7730
+.globl sym_2_7731
+sym_2_7731: la $2, sym_2_7731
+.globl sym_2_7732
+sym_2_7732: la $2, sym_2_7732
+.globl sym_2_7733
+sym_2_7733: la $2, sym_2_7733
+.globl sym_2_7734
+sym_2_7734: la $2, sym_2_7734
+.globl sym_2_7735
+sym_2_7735: la $2, sym_2_7735
+.globl sym_2_7736
+sym_2_7736: la $2, sym_2_7736
+.globl sym_2_7737
+sym_2_7737: la $2, sym_2_7737
+.globl sym_2_7738
+sym_2_7738: la $2, sym_2_7738
+.globl sym_2_7739
+sym_2_7739: la $2, sym_2_7739
+.globl sym_2_7740
+sym_2_7740: la $2, sym_2_7740
+.globl sym_2_7741
+sym_2_7741: la $2, sym_2_7741
+.globl sym_2_7742
+sym_2_7742: la $2, sym_2_7742
+.globl sym_2_7743
+sym_2_7743: la $2, sym_2_7743
+.globl sym_2_7744
+sym_2_7744: la $2, sym_2_7744
+.globl sym_2_7745
+sym_2_7745: la $2, sym_2_7745
+.globl sym_2_7746
+sym_2_7746: la $2, sym_2_7746
+.globl sym_2_7747
+sym_2_7747: la $2, sym_2_7747
+.globl sym_2_7748
+sym_2_7748: la $2, sym_2_7748
+.globl sym_2_7749
+sym_2_7749: la $2, sym_2_7749
+.globl sym_2_7750
+sym_2_7750: la $2, sym_2_7750
+.globl sym_2_7751
+sym_2_7751: la $2, sym_2_7751
+.globl sym_2_7752
+sym_2_7752: la $2, sym_2_7752
+.globl sym_2_7753
+sym_2_7753: la $2, sym_2_7753
+.globl sym_2_7754
+sym_2_7754: la $2, sym_2_7754
+.globl sym_2_7755
+sym_2_7755: la $2, sym_2_7755
+.globl sym_2_7756
+sym_2_7756: la $2, sym_2_7756
+.globl sym_2_7757
+sym_2_7757: la $2, sym_2_7757
+.globl sym_2_7758
+sym_2_7758: la $2, sym_2_7758
+.globl sym_2_7759
+sym_2_7759: la $2, sym_2_7759
+.globl sym_2_7760
+sym_2_7760: la $2, sym_2_7760
+.globl sym_2_7761
+sym_2_7761: la $2, sym_2_7761
+.globl sym_2_7762
+sym_2_7762: la $2, sym_2_7762
+.globl sym_2_7763
+sym_2_7763: la $2, sym_2_7763
+.globl sym_2_7764
+sym_2_7764: la $2, sym_2_7764
+.globl sym_2_7765
+sym_2_7765: la $2, sym_2_7765
+.globl sym_2_7766
+sym_2_7766: la $2, sym_2_7766
+.globl sym_2_7767
+sym_2_7767: la $2, sym_2_7767
+.globl sym_2_7768
+sym_2_7768: la $2, sym_2_7768
+.globl sym_2_7769
+sym_2_7769: la $2, sym_2_7769
+.globl sym_2_7770
+sym_2_7770: la $2, sym_2_7770
+.globl sym_2_7771
+sym_2_7771: la $2, sym_2_7771
+.globl sym_2_7772
+sym_2_7772: la $2, sym_2_7772
+.globl sym_2_7773
+sym_2_7773: la $2, sym_2_7773
+.globl sym_2_7774
+sym_2_7774: la $2, sym_2_7774
+.globl sym_2_7775
+sym_2_7775: la $2, sym_2_7775
+.globl sym_2_7776
+sym_2_7776: la $2, sym_2_7776
+.globl sym_2_7777
+sym_2_7777: la $2, sym_2_7777
+.globl sym_2_7778
+sym_2_7778: la $2, sym_2_7778
+.globl sym_2_7779
+sym_2_7779: la $2, sym_2_7779
+.globl sym_2_7780
+sym_2_7780: la $2, sym_2_7780
+.globl sym_2_7781
+sym_2_7781: la $2, sym_2_7781
+.globl sym_2_7782
+sym_2_7782: la $2, sym_2_7782
+.globl sym_2_7783
+sym_2_7783: la $2, sym_2_7783
+.globl sym_2_7784
+sym_2_7784: la $2, sym_2_7784
+.globl sym_2_7785
+sym_2_7785: la $2, sym_2_7785
+.globl sym_2_7786
+sym_2_7786: la $2, sym_2_7786
+.globl sym_2_7787
+sym_2_7787: la $2, sym_2_7787
+.globl sym_2_7788
+sym_2_7788: la $2, sym_2_7788
+.globl sym_2_7789
+sym_2_7789: la $2, sym_2_7789
+.globl sym_2_7790
+sym_2_7790: la $2, sym_2_7790
+.globl sym_2_7791
+sym_2_7791: la $2, sym_2_7791
+.globl sym_2_7792
+sym_2_7792: la $2, sym_2_7792
+.globl sym_2_7793
+sym_2_7793: la $2, sym_2_7793
+.globl sym_2_7794
+sym_2_7794: la $2, sym_2_7794
+.globl sym_2_7795
+sym_2_7795: la $2, sym_2_7795
+.globl sym_2_7796
+sym_2_7796: la $2, sym_2_7796
+.globl sym_2_7797
+sym_2_7797: la $2, sym_2_7797
+.globl sym_2_7798
+sym_2_7798: la $2, sym_2_7798
+.globl sym_2_7799
+sym_2_7799: la $2, sym_2_7799
+.globl sym_2_7800
+sym_2_7800: la $2, sym_2_7800
+.globl sym_2_7801
+sym_2_7801: la $2, sym_2_7801
+.globl sym_2_7802
+sym_2_7802: la $2, sym_2_7802
+.globl sym_2_7803
+sym_2_7803: la $2, sym_2_7803
+.globl sym_2_7804
+sym_2_7804: la $2, sym_2_7804
+.globl sym_2_7805
+sym_2_7805: la $2, sym_2_7805
+.globl sym_2_7806
+sym_2_7806: la $2, sym_2_7806
+.globl sym_2_7807
+sym_2_7807: la $2, sym_2_7807
+.globl sym_2_7808
+sym_2_7808: la $2, sym_2_7808
+.globl sym_2_7809
+sym_2_7809: la $2, sym_2_7809
+.globl sym_2_7810
+sym_2_7810: la $2, sym_2_7810
+.globl sym_2_7811
+sym_2_7811: la $2, sym_2_7811
+.globl sym_2_7812
+sym_2_7812: la $2, sym_2_7812
+.globl sym_2_7813
+sym_2_7813: la $2, sym_2_7813
+.globl sym_2_7814
+sym_2_7814: la $2, sym_2_7814
+.globl sym_2_7815
+sym_2_7815: la $2, sym_2_7815
+.globl sym_2_7816
+sym_2_7816: la $2, sym_2_7816
+.globl sym_2_7817
+sym_2_7817: la $2, sym_2_7817
+.globl sym_2_7818
+sym_2_7818: la $2, sym_2_7818
+.globl sym_2_7819
+sym_2_7819: la $2, sym_2_7819
+.globl sym_2_7820
+sym_2_7820: la $2, sym_2_7820
+.globl sym_2_7821
+sym_2_7821: la $2, sym_2_7821
+.globl sym_2_7822
+sym_2_7822: la $2, sym_2_7822
+.globl sym_2_7823
+sym_2_7823: la $2, sym_2_7823
+.globl sym_2_7824
+sym_2_7824: la $2, sym_2_7824
+.globl sym_2_7825
+sym_2_7825: la $2, sym_2_7825
+.globl sym_2_7826
+sym_2_7826: la $2, sym_2_7826
+.globl sym_2_7827
+sym_2_7827: la $2, sym_2_7827
+.globl sym_2_7828
+sym_2_7828: la $2, sym_2_7828
+.globl sym_2_7829
+sym_2_7829: la $2, sym_2_7829
+.globl sym_2_7830
+sym_2_7830: la $2, sym_2_7830
+.globl sym_2_7831
+sym_2_7831: la $2, sym_2_7831
+.globl sym_2_7832
+sym_2_7832: la $2, sym_2_7832
+.globl sym_2_7833
+sym_2_7833: la $2, sym_2_7833
+.globl sym_2_7834
+sym_2_7834: la $2, sym_2_7834
+.globl sym_2_7835
+sym_2_7835: la $2, sym_2_7835
+.globl sym_2_7836
+sym_2_7836: la $2, sym_2_7836
+.globl sym_2_7837
+sym_2_7837: la $2, sym_2_7837
+.globl sym_2_7838
+sym_2_7838: la $2, sym_2_7838
+.globl sym_2_7839
+sym_2_7839: la $2, sym_2_7839
+.globl sym_2_7840
+sym_2_7840: la $2, sym_2_7840
+.globl sym_2_7841
+sym_2_7841: la $2, sym_2_7841
+.globl sym_2_7842
+sym_2_7842: la $2, sym_2_7842
+.globl sym_2_7843
+sym_2_7843: la $2, sym_2_7843
+.globl sym_2_7844
+sym_2_7844: la $2, sym_2_7844
+.globl sym_2_7845
+sym_2_7845: la $2, sym_2_7845
+.globl sym_2_7846
+sym_2_7846: la $2, sym_2_7846
+.globl sym_2_7847
+sym_2_7847: la $2, sym_2_7847
+.globl sym_2_7848
+sym_2_7848: la $2, sym_2_7848
+.globl sym_2_7849
+sym_2_7849: la $2, sym_2_7849
+.globl sym_2_7850
+sym_2_7850: la $2, sym_2_7850
+.globl sym_2_7851
+sym_2_7851: la $2, sym_2_7851
+.globl sym_2_7852
+sym_2_7852: la $2, sym_2_7852
+.globl sym_2_7853
+sym_2_7853: la $2, sym_2_7853
+.globl sym_2_7854
+sym_2_7854: la $2, sym_2_7854
+.globl sym_2_7855
+sym_2_7855: la $2, sym_2_7855
+.globl sym_2_7856
+sym_2_7856: la $2, sym_2_7856
+.globl sym_2_7857
+sym_2_7857: la $2, sym_2_7857
+.globl sym_2_7858
+sym_2_7858: la $2, sym_2_7858
+.globl sym_2_7859
+sym_2_7859: la $2, sym_2_7859
+.globl sym_2_7860
+sym_2_7860: la $2, sym_2_7860
+.globl sym_2_7861
+sym_2_7861: la $2, sym_2_7861
+.globl sym_2_7862
+sym_2_7862: la $2, sym_2_7862
+.globl sym_2_7863
+sym_2_7863: la $2, sym_2_7863
+.globl sym_2_7864
+sym_2_7864: la $2, sym_2_7864
+.globl sym_2_7865
+sym_2_7865: la $2, sym_2_7865
+.globl sym_2_7866
+sym_2_7866: la $2, sym_2_7866
+.globl sym_2_7867
+sym_2_7867: la $2, sym_2_7867
+.globl sym_2_7868
+sym_2_7868: la $2, sym_2_7868
+.globl sym_2_7869
+sym_2_7869: la $2, sym_2_7869
+.globl sym_2_7870
+sym_2_7870: la $2, sym_2_7870
+.globl sym_2_7871
+sym_2_7871: la $2, sym_2_7871
+.globl sym_2_7872
+sym_2_7872: la $2, sym_2_7872
+.globl sym_2_7873
+sym_2_7873: la $2, sym_2_7873
+.globl sym_2_7874
+sym_2_7874: la $2, sym_2_7874
+.globl sym_2_7875
+sym_2_7875: la $2, sym_2_7875
+.globl sym_2_7876
+sym_2_7876: la $2, sym_2_7876
+.globl sym_2_7877
+sym_2_7877: la $2, sym_2_7877
+.globl sym_2_7878
+sym_2_7878: la $2, sym_2_7878
+.globl sym_2_7879
+sym_2_7879: la $2, sym_2_7879
+.globl sym_2_7880
+sym_2_7880: la $2, sym_2_7880
+.globl sym_2_7881
+sym_2_7881: la $2, sym_2_7881
+.globl sym_2_7882
+sym_2_7882: la $2, sym_2_7882
+.globl sym_2_7883
+sym_2_7883: la $2, sym_2_7883
+.globl sym_2_7884
+sym_2_7884: la $2, sym_2_7884
+.globl sym_2_7885
+sym_2_7885: la $2, sym_2_7885
+.globl sym_2_7886
+sym_2_7886: la $2, sym_2_7886
+.globl sym_2_7887
+sym_2_7887: la $2, sym_2_7887
+.globl sym_2_7888
+sym_2_7888: la $2, sym_2_7888
+.globl sym_2_7889
+sym_2_7889: la $2, sym_2_7889
+.globl sym_2_7890
+sym_2_7890: la $2, sym_2_7890
+.globl sym_2_7891
+sym_2_7891: la $2, sym_2_7891
+.globl sym_2_7892
+sym_2_7892: la $2, sym_2_7892
+.globl sym_2_7893
+sym_2_7893: la $2, sym_2_7893
+.globl sym_2_7894
+sym_2_7894: la $2, sym_2_7894
+.globl sym_2_7895
+sym_2_7895: la $2, sym_2_7895
+.globl sym_2_7896
+sym_2_7896: la $2, sym_2_7896
+.globl sym_2_7897
+sym_2_7897: la $2, sym_2_7897
+.globl sym_2_7898
+sym_2_7898: la $2, sym_2_7898
+.globl sym_2_7899
+sym_2_7899: la $2, sym_2_7899
+.globl sym_2_7900
+sym_2_7900: la $2, sym_2_7900
+.globl sym_2_7901
+sym_2_7901: la $2, sym_2_7901
+.globl sym_2_7902
+sym_2_7902: la $2, sym_2_7902
+.globl sym_2_7903
+sym_2_7903: la $2, sym_2_7903
+.globl sym_2_7904
+sym_2_7904: la $2, sym_2_7904
+.globl sym_2_7905
+sym_2_7905: la $2, sym_2_7905
+.globl sym_2_7906
+sym_2_7906: la $2, sym_2_7906
+.globl sym_2_7907
+sym_2_7907: la $2, sym_2_7907
+.globl sym_2_7908
+sym_2_7908: la $2, sym_2_7908
+.globl sym_2_7909
+sym_2_7909: la $2, sym_2_7909
+.globl sym_2_7910
+sym_2_7910: la $2, sym_2_7910
+.globl sym_2_7911
+sym_2_7911: la $2, sym_2_7911
+.globl sym_2_7912
+sym_2_7912: la $2, sym_2_7912
+.globl sym_2_7913
+sym_2_7913: la $2, sym_2_7913
+.globl sym_2_7914
+sym_2_7914: la $2, sym_2_7914
+.globl sym_2_7915
+sym_2_7915: la $2, sym_2_7915
+.globl sym_2_7916
+sym_2_7916: la $2, sym_2_7916
+.globl sym_2_7917
+sym_2_7917: la $2, sym_2_7917
+.globl sym_2_7918
+sym_2_7918: la $2, sym_2_7918
+.globl sym_2_7919
+sym_2_7919: la $2, sym_2_7919
+.globl sym_2_7920
+sym_2_7920: la $2, sym_2_7920
+.globl sym_2_7921
+sym_2_7921: la $2, sym_2_7921
+.globl sym_2_7922
+sym_2_7922: la $2, sym_2_7922
+.globl sym_2_7923
+sym_2_7923: la $2, sym_2_7923
+.globl sym_2_7924
+sym_2_7924: la $2, sym_2_7924
+.globl sym_2_7925
+sym_2_7925: la $2, sym_2_7925
+.globl sym_2_7926
+sym_2_7926: la $2, sym_2_7926
+.globl sym_2_7927
+sym_2_7927: la $2, sym_2_7927
+.globl sym_2_7928
+sym_2_7928: la $2, sym_2_7928
+.globl sym_2_7929
+sym_2_7929: la $2, sym_2_7929
+.globl sym_2_7930
+sym_2_7930: la $2, sym_2_7930
+.globl sym_2_7931
+sym_2_7931: la $2, sym_2_7931
+.globl sym_2_7932
+sym_2_7932: la $2, sym_2_7932
+.globl sym_2_7933
+sym_2_7933: la $2, sym_2_7933
+.globl sym_2_7934
+sym_2_7934: la $2, sym_2_7934
+.globl sym_2_7935
+sym_2_7935: la $2, sym_2_7935
+.globl sym_2_7936
+sym_2_7936: la $2, sym_2_7936
+.globl sym_2_7937
+sym_2_7937: la $2, sym_2_7937
+.globl sym_2_7938
+sym_2_7938: la $2, sym_2_7938
+.globl sym_2_7939
+sym_2_7939: la $2, sym_2_7939
+.globl sym_2_7940
+sym_2_7940: la $2, sym_2_7940
+.globl sym_2_7941
+sym_2_7941: la $2, sym_2_7941
+.globl sym_2_7942
+sym_2_7942: la $2, sym_2_7942
+.globl sym_2_7943
+sym_2_7943: la $2, sym_2_7943
+.globl sym_2_7944
+sym_2_7944: la $2, sym_2_7944
+.globl sym_2_7945
+sym_2_7945: la $2, sym_2_7945
+.globl sym_2_7946
+sym_2_7946: la $2, sym_2_7946
+.globl sym_2_7947
+sym_2_7947: la $2, sym_2_7947
+.globl sym_2_7948
+sym_2_7948: la $2, sym_2_7948
+.globl sym_2_7949
+sym_2_7949: la $2, sym_2_7949
+.globl sym_2_7950
+sym_2_7950: la $2, sym_2_7950
+.globl sym_2_7951
+sym_2_7951: la $2, sym_2_7951
+.globl sym_2_7952
+sym_2_7952: la $2, sym_2_7952
+.globl sym_2_7953
+sym_2_7953: la $2, sym_2_7953
+.globl sym_2_7954
+sym_2_7954: la $2, sym_2_7954
+.globl sym_2_7955
+sym_2_7955: la $2, sym_2_7955
+.globl sym_2_7956
+sym_2_7956: la $2, sym_2_7956
+.globl sym_2_7957
+sym_2_7957: la $2, sym_2_7957
+.globl sym_2_7958
+sym_2_7958: la $2, sym_2_7958
+.globl sym_2_7959
+sym_2_7959: la $2, sym_2_7959
+.globl sym_2_7960
+sym_2_7960: la $2, sym_2_7960
+.globl sym_2_7961
+sym_2_7961: la $2, sym_2_7961
+.globl sym_2_7962
+sym_2_7962: la $2, sym_2_7962
+.globl sym_2_7963
+sym_2_7963: la $2, sym_2_7963
+.globl sym_2_7964
+sym_2_7964: la $2, sym_2_7964
+.globl sym_2_7965
+sym_2_7965: la $2, sym_2_7965
+.globl sym_2_7966
+sym_2_7966: la $2, sym_2_7966
+.globl sym_2_7967
+sym_2_7967: la $2, sym_2_7967
+.globl sym_2_7968
+sym_2_7968: la $2, sym_2_7968
+.globl sym_2_7969
+sym_2_7969: la $2, sym_2_7969
+.globl sym_2_7970
+sym_2_7970: la $2, sym_2_7970
+.globl sym_2_7971
+sym_2_7971: la $2, sym_2_7971
+.globl sym_2_7972
+sym_2_7972: la $2, sym_2_7972
+.globl sym_2_7973
+sym_2_7973: la $2, sym_2_7973
+.globl sym_2_7974
+sym_2_7974: la $2, sym_2_7974
+.globl sym_2_7975
+sym_2_7975: la $2, sym_2_7975
+.globl sym_2_7976
+sym_2_7976: la $2, sym_2_7976
+.globl sym_2_7977
+sym_2_7977: la $2, sym_2_7977
+.globl sym_2_7978
+sym_2_7978: la $2, sym_2_7978
+.globl sym_2_7979
+sym_2_7979: la $2, sym_2_7979
+.globl sym_2_7980
+sym_2_7980: la $2, sym_2_7980
+.globl sym_2_7981
+sym_2_7981: la $2, sym_2_7981
+.globl sym_2_7982
+sym_2_7982: la $2, sym_2_7982
+.globl sym_2_7983
+sym_2_7983: la $2, sym_2_7983
+.globl sym_2_7984
+sym_2_7984: la $2, sym_2_7984
+.globl sym_2_7985
+sym_2_7985: la $2, sym_2_7985
+.globl sym_2_7986
+sym_2_7986: la $2, sym_2_7986
+.globl sym_2_7987
+sym_2_7987: la $2, sym_2_7987
+.globl sym_2_7988
+sym_2_7988: la $2, sym_2_7988
+.globl sym_2_7989
+sym_2_7989: la $2, sym_2_7989
+.globl sym_2_7990
+sym_2_7990: la $2, sym_2_7990
+.globl sym_2_7991
+sym_2_7991: la $2, sym_2_7991
+.globl sym_2_7992
+sym_2_7992: la $2, sym_2_7992
+.globl sym_2_7993
+sym_2_7993: la $2, sym_2_7993
+.globl sym_2_7994
+sym_2_7994: la $2, sym_2_7994
+.globl sym_2_7995
+sym_2_7995: la $2, sym_2_7995
+.globl sym_2_7996
+sym_2_7996: la $2, sym_2_7996
+.globl sym_2_7997
+sym_2_7997: la $2, sym_2_7997
+.globl sym_2_7998
+sym_2_7998: la $2, sym_2_7998
+.globl sym_2_7999
+sym_2_7999: la $2, sym_2_7999
+.globl sym_2_8000
+sym_2_8000: la $2, sym_2_8000
+.globl sym_2_8001
+sym_2_8001: la $2, sym_2_8001
+.globl sym_2_8002
+sym_2_8002: la $2, sym_2_8002
+.globl sym_2_8003
+sym_2_8003: la $2, sym_2_8003
+.globl sym_2_8004
+sym_2_8004: la $2, sym_2_8004
+.globl sym_2_8005
+sym_2_8005: la $2, sym_2_8005
+.globl sym_2_8006
+sym_2_8006: la $2, sym_2_8006
+.globl sym_2_8007
+sym_2_8007: la $2, sym_2_8007
+.globl sym_2_8008
+sym_2_8008: la $2, sym_2_8008
+.globl sym_2_8009
+sym_2_8009: la $2, sym_2_8009
+.globl sym_2_8010
+sym_2_8010: la $2, sym_2_8010
+.globl sym_2_8011
+sym_2_8011: la $2, sym_2_8011
+.globl sym_2_8012
+sym_2_8012: la $2, sym_2_8012
+.globl sym_2_8013
+sym_2_8013: la $2, sym_2_8013
+.globl sym_2_8014
+sym_2_8014: la $2, sym_2_8014
+.globl sym_2_8015
+sym_2_8015: la $2, sym_2_8015
+.globl sym_2_8016
+sym_2_8016: la $2, sym_2_8016
+.globl sym_2_8017
+sym_2_8017: la $2, sym_2_8017
+.globl sym_2_8018
+sym_2_8018: la $2, sym_2_8018
+.globl sym_2_8019
+sym_2_8019: la $2, sym_2_8019
+.globl sym_2_8020
+sym_2_8020: la $2, sym_2_8020
+.globl sym_2_8021
+sym_2_8021: la $2, sym_2_8021
+.globl sym_2_8022
+sym_2_8022: la $2, sym_2_8022
+.globl sym_2_8023
+sym_2_8023: la $2, sym_2_8023
+.globl sym_2_8024
+sym_2_8024: la $2, sym_2_8024
+.globl sym_2_8025
+sym_2_8025: la $2, sym_2_8025
+.globl sym_2_8026
+sym_2_8026: la $2, sym_2_8026
+.globl sym_2_8027
+sym_2_8027: la $2, sym_2_8027
+.globl sym_2_8028
+sym_2_8028: la $2, sym_2_8028
+.globl sym_2_8029
+sym_2_8029: la $2, sym_2_8029
+.globl sym_2_8030
+sym_2_8030: la $2, sym_2_8030
+.globl sym_2_8031
+sym_2_8031: la $2, sym_2_8031
+.globl sym_2_8032
+sym_2_8032: la $2, sym_2_8032
+.globl sym_2_8033
+sym_2_8033: la $2, sym_2_8033
+.globl sym_2_8034
+sym_2_8034: la $2, sym_2_8034
+.globl sym_2_8035
+sym_2_8035: la $2, sym_2_8035
+.globl sym_2_8036
+sym_2_8036: la $2, sym_2_8036
+.globl sym_2_8037
+sym_2_8037: la $2, sym_2_8037
+.globl sym_2_8038
+sym_2_8038: la $2, sym_2_8038
+.globl sym_2_8039
+sym_2_8039: la $2, sym_2_8039
+.globl sym_2_8040
+sym_2_8040: la $2, sym_2_8040
+.globl sym_2_8041
+sym_2_8041: la $2, sym_2_8041
+.globl sym_2_8042
+sym_2_8042: la $2, sym_2_8042
+.globl sym_2_8043
+sym_2_8043: la $2, sym_2_8043
+.globl sym_2_8044
+sym_2_8044: la $2, sym_2_8044
+.globl sym_2_8045
+sym_2_8045: la $2, sym_2_8045
+.globl sym_2_8046
+sym_2_8046: la $2, sym_2_8046
+.globl sym_2_8047
+sym_2_8047: la $2, sym_2_8047
+.globl sym_2_8048
+sym_2_8048: la $2, sym_2_8048
+.globl sym_2_8049
+sym_2_8049: la $2, sym_2_8049
+.globl sym_2_8050
+sym_2_8050: la $2, sym_2_8050
+.globl sym_2_8051
+sym_2_8051: la $2, sym_2_8051
+.globl sym_2_8052
+sym_2_8052: la $2, sym_2_8052
+.globl sym_2_8053
+sym_2_8053: la $2, sym_2_8053
+.globl sym_2_8054
+sym_2_8054: la $2, sym_2_8054
+.globl sym_2_8055
+sym_2_8055: la $2, sym_2_8055
+.globl sym_2_8056
+sym_2_8056: la $2, sym_2_8056
+.globl sym_2_8057
+sym_2_8057: la $2, sym_2_8057
+.globl sym_2_8058
+sym_2_8058: la $2, sym_2_8058
+.globl sym_2_8059
+sym_2_8059: la $2, sym_2_8059
+.globl sym_2_8060
+sym_2_8060: la $2, sym_2_8060
+.globl sym_2_8061
+sym_2_8061: la $2, sym_2_8061
+.globl sym_2_8062
+sym_2_8062: la $2, sym_2_8062
+.globl sym_2_8063
+sym_2_8063: la $2, sym_2_8063
+.globl sym_2_8064
+sym_2_8064: la $2, sym_2_8064
+.globl sym_2_8065
+sym_2_8065: la $2, sym_2_8065
+.globl sym_2_8066
+sym_2_8066: la $2, sym_2_8066
+.globl sym_2_8067
+sym_2_8067: la $2, sym_2_8067
+.globl sym_2_8068
+sym_2_8068: la $2, sym_2_8068
+.globl sym_2_8069
+sym_2_8069: la $2, sym_2_8069
+.globl sym_2_8070
+sym_2_8070: la $2, sym_2_8070
+.globl sym_2_8071
+sym_2_8071: la $2, sym_2_8071
+.globl sym_2_8072
+sym_2_8072: la $2, sym_2_8072
+.globl sym_2_8073
+sym_2_8073: la $2, sym_2_8073
+.globl sym_2_8074
+sym_2_8074: la $2, sym_2_8074
+.globl sym_2_8075
+sym_2_8075: la $2, sym_2_8075
+.globl sym_2_8076
+sym_2_8076: la $2, sym_2_8076
+.globl sym_2_8077
+sym_2_8077: la $2, sym_2_8077
+.globl sym_2_8078
+sym_2_8078: la $2, sym_2_8078
+.globl sym_2_8079
+sym_2_8079: la $2, sym_2_8079
+.globl sym_2_8080
+sym_2_8080: la $2, sym_2_8080
+.globl sym_2_8081
+sym_2_8081: la $2, sym_2_8081
+.globl sym_2_8082
+sym_2_8082: la $2, sym_2_8082
+.globl sym_2_8083
+sym_2_8083: la $2, sym_2_8083
+.globl sym_2_8084
+sym_2_8084: la $2, sym_2_8084
+.globl sym_2_8085
+sym_2_8085: la $2, sym_2_8085
+.globl sym_2_8086
+sym_2_8086: la $2, sym_2_8086
+.globl sym_2_8087
+sym_2_8087: la $2, sym_2_8087
+.globl sym_2_8088
+sym_2_8088: la $2, sym_2_8088
+.globl sym_2_8089
+sym_2_8089: la $2, sym_2_8089
+.globl sym_2_8090
+sym_2_8090: la $2, sym_2_8090
+.globl sym_2_8091
+sym_2_8091: la $2, sym_2_8091
+.globl sym_2_8092
+sym_2_8092: la $2, sym_2_8092
+.globl sym_2_8093
+sym_2_8093: la $2, sym_2_8093
+.globl sym_2_8094
+sym_2_8094: la $2, sym_2_8094
+.globl sym_2_8095
+sym_2_8095: la $2, sym_2_8095
+.globl sym_2_8096
+sym_2_8096: la $2, sym_2_8096
+.globl sym_2_8097
+sym_2_8097: la $2, sym_2_8097
+.globl sym_2_8098
+sym_2_8098: la $2, sym_2_8098
+.globl sym_2_8099
+sym_2_8099: la $2, sym_2_8099
+.globl sym_2_8100
+sym_2_8100: la $2, sym_2_8100
+.globl sym_2_8101
+sym_2_8101: la $2, sym_2_8101
+.globl sym_2_8102
+sym_2_8102: la $2, sym_2_8102
+.globl sym_2_8103
+sym_2_8103: la $2, sym_2_8103
+.globl sym_2_8104
+sym_2_8104: la $2, sym_2_8104
+.globl sym_2_8105
+sym_2_8105: la $2, sym_2_8105
+.globl sym_2_8106
+sym_2_8106: la $2, sym_2_8106
+.globl sym_2_8107
+sym_2_8107: la $2, sym_2_8107
+.globl sym_2_8108
+sym_2_8108: la $2, sym_2_8108
+.globl sym_2_8109
+sym_2_8109: la $2, sym_2_8109
+.globl sym_2_8110
+sym_2_8110: la $2, sym_2_8110
+.globl sym_2_8111
+sym_2_8111: la $2, sym_2_8111
+.globl sym_2_8112
+sym_2_8112: la $2, sym_2_8112
+.globl sym_2_8113
+sym_2_8113: la $2, sym_2_8113
+.globl sym_2_8114
+sym_2_8114: la $2, sym_2_8114
+.globl sym_2_8115
+sym_2_8115: la $2, sym_2_8115
+.globl sym_2_8116
+sym_2_8116: la $2, sym_2_8116
+.globl sym_2_8117
+sym_2_8117: la $2, sym_2_8117
+.globl sym_2_8118
+sym_2_8118: la $2, sym_2_8118
+.globl sym_2_8119
+sym_2_8119: la $2, sym_2_8119
+.globl sym_2_8120
+sym_2_8120: la $2, sym_2_8120
+.globl sym_2_8121
+sym_2_8121: la $2, sym_2_8121
+.globl sym_2_8122
+sym_2_8122: la $2, sym_2_8122
+.globl sym_2_8123
+sym_2_8123: la $2, sym_2_8123
+.globl sym_2_8124
+sym_2_8124: la $2, sym_2_8124
+.globl sym_2_8125
+sym_2_8125: la $2, sym_2_8125
+.globl sym_2_8126
+sym_2_8126: la $2, sym_2_8126
+.globl sym_2_8127
+sym_2_8127: la $2, sym_2_8127
+.globl sym_2_8128
+sym_2_8128: la $2, sym_2_8128
+.globl sym_2_8129
+sym_2_8129: la $2, sym_2_8129
+.globl sym_2_8130
+sym_2_8130: la $2, sym_2_8130
+.globl sym_2_8131
+sym_2_8131: la $2, sym_2_8131
+.globl sym_2_8132
+sym_2_8132: la $2, sym_2_8132
+.globl sym_2_8133
+sym_2_8133: la $2, sym_2_8133
+.globl sym_2_8134
+sym_2_8134: la $2, sym_2_8134
+.globl sym_2_8135
+sym_2_8135: la $2, sym_2_8135
+.globl sym_2_8136
+sym_2_8136: la $2, sym_2_8136
+.globl sym_2_8137
+sym_2_8137: la $2, sym_2_8137
+.globl sym_2_8138
+sym_2_8138: la $2, sym_2_8138
+.globl sym_2_8139
+sym_2_8139: la $2, sym_2_8139
+.globl sym_2_8140
+sym_2_8140: la $2, sym_2_8140
+.globl sym_2_8141
+sym_2_8141: la $2, sym_2_8141
+.globl sym_2_8142
+sym_2_8142: la $2, sym_2_8142
+.globl sym_2_8143
+sym_2_8143: la $2, sym_2_8143
+.globl sym_2_8144
+sym_2_8144: la $2, sym_2_8144
+.globl sym_2_8145
+sym_2_8145: la $2, sym_2_8145
+.globl sym_2_8146
+sym_2_8146: la $2, sym_2_8146
+.globl sym_2_8147
+sym_2_8147: la $2, sym_2_8147
+.globl sym_2_8148
+sym_2_8148: la $2, sym_2_8148
+.globl sym_2_8149
+sym_2_8149: la $2, sym_2_8149
+.globl sym_2_8150
+sym_2_8150: la $2, sym_2_8150
+.globl sym_2_8151
+sym_2_8151: la $2, sym_2_8151
+.globl sym_2_8152
+sym_2_8152: la $2, sym_2_8152
+.globl sym_2_8153
+sym_2_8153: la $2, sym_2_8153
+.globl sym_2_8154
+sym_2_8154: la $2, sym_2_8154
+.globl sym_2_8155
+sym_2_8155: la $2, sym_2_8155
+.globl sym_2_8156
+sym_2_8156: la $2, sym_2_8156
+.globl sym_2_8157
+sym_2_8157: la $2, sym_2_8157
+.globl sym_2_8158
+sym_2_8158: la $2, sym_2_8158
+.globl sym_2_8159
+sym_2_8159: la $2, sym_2_8159
+.globl sym_2_8160
+sym_2_8160: la $2, sym_2_8160
+.globl sym_2_8161
+sym_2_8161: la $2, sym_2_8161
+.globl sym_2_8162
+sym_2_8162: la $2, sym_2_8162
+.globl sym_2_8163
+sym_2_8163: la $2, sym_2_8163
+.globl sym_2_8164
+sym_2_8164: la $2, sym_2_8164
+.globl sym_2_8165
+sym_2_8165: la $2, sym_2_8165
+.globl sym_2_8166
+sym_2_8166: la $2, sym_2_8166
+.globl sym_2_8167
+sym_2_8167: la $2, sym_2_8167
+.globl sym_2_8168
+sym_2_8168: la $2, sym_2_8168
+.globl sym_2_8169
+sym_2_8169: la $2, sym_2_8169
+.globl sym_2_8170
+sym_2_8170: la $2, sym_2_8170
+.globl sym_2_8171
+sym_2_8171: la $2, sym_2_8171
+.globl sym_2_8172
+sym_2_8172: la $2, sym_2_8172
+.globl sym_2_8173
+sym_2_8173: la $2, sym_2_8173
+.globl sym_2_8174
+sym_2_8174: la $2, sym_2_8174
+.globl sym_2_8175
+sym_2_8175: la $2, sym_2_8175
+.globl sym_2_8176
+sym_2_8176: la $2, sym_2_8176
+.globl sym_2_8177
+sym_2_8177: la $2, sym_2_8177
+.globl sym_2_8178
+sym_2_8178: la $2, sym_2_8178
+.globl sym_2_8179
+sym_2_8179: la $2, sym_2_8179
+.globl sym_2_8180
+sym_2_8180: la $2, sym_2_8180
+.globl sym_2_8181
+sym_2_8181: la $2, sym_2_8181
+.globl sym_2_8182
+sym_2_8182: la $2, sym_2_8182
+.globl sym_2_8183
+sym_2_8183: la $2, sym_2_8183
+.globl sym_2_8184
+sym_2_8184: la $2, sym_2_8184
+.globl sym_2_8185
+sym_2_8185: la $2, sym_2_8185
+.globl sym_2_8186
+sym_2_8186: la $2, sym_2_8186
+.globl sym_2_8187
+sym_2_8187: la $2, sym_2_8187
+.globl sym_2_8188
+sym_2_8188: la $2, sym_2_8188
+.globl sym_2_8189
+sym_2_8189: la $2, sym_2_8189
+.globl sym_2_8190
+sym_2_8190: la $2, sym_2_8190
+.globl sym_2_8191
+sym_2_8191: la $2, sym_2_8191
+.globl sym_2_8192
+sym_2_8192: la $2, sym_2_8192
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-1.d b/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-1.d
new file mode 100644
index 0000000..15f04b2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-1.d
@@ -0,0 +1,8222 @@
+#name: MIPS multi-got-1
+#as: -EB -32 -KPIC
+#source: multi-got-1-1.s
+#source: multi-got-1-2.s
+#ld: -melf32btsmip -shared
+#readelf: -d -r
+
+Dynamic section at offset .* contains 17 entries:
+ Tag Type Name/Value
+ 0x00000004 \(HASH\) 0x[0-9a-f]+
+ 0x00000005 \(STRTAB\) 0x[0-9a-f]+
+ 0x00000006 \(SYMTAB\) 0x[0-9a-f]+
+ 0x0000000a \(STRSZ\) [0-9]+ \(bytes\)
+ 0x0000000b \(SYMENT\) 16 \(bytes\)
+ 0x00000003 \(PLTGOT\) 0x[0-9a-f]+
+ 0x00000011 \(REL\) 0x[0-9a-f]+
+ 0x00000012 \(RELSZ\) 65544 \(bytes\)
+ 0x00000013 \(RELENT\) 8 \(bytes\)
+ 0x70000001 \(MIPS_RLD_VERSION\) 1
+ 0x70000005 \(MIPS_FLAGS\) NOTPOT
+ 0x70000006 \(MIPS_BASE_ADDRESS\) 0
+ 0x7000000a \(MIPS_LOCAL_GOTNO\) 2
+ 0x70000011 \(MIPS_SYMTABNO\) [0-9]+
+ 0x70000012 \(MIPS_UNREFEXTNO\) [0-9]+
+ 0x70000013 \(MIPS_GOTSYM\) 0x[0-9a-f]+
+ 0x00000000 \(NULL\) 0x0
+
+Relocation section '\.rel\.dyn' at offset 0x[0-9a-f]+ contains 8193 entries:
+ Offset Info Type Sym.Value Sym. Name
+00000000 00000000 R_MIPS_NONE
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-hidden-1.d b/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-hidden-1.d
new file mode 100644
index 0000000..46bf519
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-hidden-1.d
@@ -0,0 +1,8 @@
+#name: MIPS multi-got-hidden-1
+#as: -EB -32 -KPIC
+#source: multi-got-1-1.s
+#source: multi-got-1-2.s
+#source: multi-got-hidden-1.s
+#ld: -melf32btsmip -e 0
+#objdump: -dr
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-hidden-1.s b/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-hidden-1.s
new file mode 100644
index 0000000..195d74b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-hidden-1.s
@@ -0,0 +1,5 @@
+.hidden __init_array_end
+.hidden __init_array_start
+sym_3_1:
+la $2, __init_array_start
+la $2, __init_array_end
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-hidden-2.d b/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-hidden-2.d
new file mode 100644
index 0000000..e6173a0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-hidden-2.d
@@ -0,0 +1,7 @@
+#name: MIPS multi-got-hidden-2
+#as: -EB -32 -KPIC
+#source: multi-got-1-1.s
+#source: multi-got-hidden-2.s
+#ld: -melf32btsmip -e 0
+#objdump: -dr
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-hidden-2.s b/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-hidden-2.s
new file mode 100644
index 0000000..067bcb2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-hidden-2.s
@@ -0,0 +1,16389 @@
+.globl sym_2_1
+sym_2_1: la $2, sym_2_1
+.globl sym_2_2
+sym_2_2: la $2, sym_2_2
+.globl sym_2_3
+sym_2_3: la $2, sym_2_3
+.globl sym_2_4
+sym_2_4: la $2, sym_2_4
+.globl sym_2_5
+sym_2_5: la $2, sym_2_5
+.globl sym_2_6
+sym_2_6: la $2, sym_2_6
+.globl sym_2_7
+sym_2_7: la $2, sym_2_7
+.globl sym_2_8
+sym_2_8: la $2, sym_2_8
+.globl sym_2_9
+sym_2_9: la $2, sym_2_9
+.globl sym_2_10
+sym_2_10: la $2, sym_2_10
+.globl sym_2_11
+sym_2_11: la $2, sym_2_11
+.globl sym_2_12
+sym_2_12: la $2, sym_2_12
+.globl sym_2_13
+sym_2_13: la $2, sym_2_13
+.globl sym_2_14
+sym_2_14: la $2, sym_2_14
+.globl sym_2_15
+sym_2_15: la $2, sym_2_15
+.globl sym_2_16
+sym_2_16: la $2, sym_2_16
+.globl sym_2_17
+sym_2_17: la $2, sym_2_17
+.globl sym_2_18
+sym_2_18: la $2, sym_2_18
+.globl sym_2_19
+sym_2_19: la $2, sym_2_19
+.globl sym_2_20
+sym_2_20: la $2, sym_2_20
+.globl sym_2_21
+sym_2_21: la $2, sym_2_21
+.globl sym_2_22
+sym_2_22: la $2, sym_2_22
+.globl sym_2_23
+sym_2_23: la $2, sym_2_23
+.globl sym_2_24
+sym_2_24: la $2, sym_2_24
+.globl sym_2_25
+sym_2_25: la $2, sym_2_25
+.globl sym_2_26
+sym_2_26: la $2, sym_2_26
+.globl sym_2_27
+sym_2_27: la $2, sym_2_27
+.globl sym_2_28
+sym_2_28: la $2, sym_2_28
+.globl sym_2_29
+sym_2_29: la $2, sym_2_29
+.globl sym_2_30
+sym_2_30: la $2, sym_2_30
+.globl sym_2_31
+sym_2_31: la $2, sym_2_31
+.globl sym_2_32
+sym_2_32: la $2, sym_2_32
+.globl sym_2_33
+sym_2_33: la $2, sym_2_33
+.globl sym_2_34
+sym_2_34: la $2, sym_2_34
+.globl sym_2_35
+sym_2_35: la $2, sym_2_35
+.globl sym_2_36
+sym_2_36: la $2, sym_2_36
+.globl sym_2_37
+sym_2_37: la $2, sym_2_37
+.globl sym_2_38
+sym_2_38: la $2, sym_2_38
+.globl sym_2_39
+sym_2_39: la $2, sym_2_39
+.globl sym_2_40
+sym_2_40: la $2, sym_2_40
+.globl sym_2_41
+sym_2_41: la $2, sym_2_41
+.globl sym_2_42
+sym_2_42: la $2, sym_2_42
+.globl sym_2_43
+sym_2_43: la $2, sym_2_43
+.globl sym_2_44
+sym_2_44: la $2, sym_2_44
+.globl sym_2_45
+sym_2_45: la $2, sym_2_45
+.globl sym_2_46
+sym_2_46: la $2, sym_2_46
+.globl sym_2_47
+sym_2_47: la $2, sym_2_47
+.globl sym_2_48
+sym_2_48: la $2, sym_2_48
+.globl sym_2_49
+sym_2_49: la $2, sym_2_49
+.globl sym_2_50
+sym_2_50: la $2, sym_2_50
+.globl sym_2_51
+sym_2_51: la $2, sym_2_51
+.globl sym_2_52
+sym_2_52: la $2, sym_2_52
+.globl sym_2_53
+sym_2_53: la $2, sym_2_53
+.globl sym_2_54
+sym_2_54: la $2, sym_2_54
+.globl sym_2_55
+sym_2_55: la $2, sym_2_55
+.globl sym_2_56
+sym_2_56: la $2, sym_2_56
+.globl sym_2_57
+sym_2_57: la $2, sym_2_57
+.globl sym_2_58
+sym_2_58: la $2, sym_2_58
+.globl sym_2_59
+sym_2_59: la $2, sym_2_59
+.globl sym_2_60
+sym_2_60: la $2, sym_2_60
+.globl sym_2_61
+sym_2_61: la $2, sym_2_61
+.globl sym_2_62
+sym_2_62: la $2, sym_2_62
+.globl sym_2_63
+sym_2_63: la $2, sym_2_63
+.globl sym_2_64
+sym_2_64: la $2, sym_2_64
+.globl sym_2_65
+sym_2_65: la $2, sym_2_65
+.globl sym_2_66
+sym_2_66: la $2, sym_2_66
+.globl sym_2_67
+sym_2_67: la $2, sym_2_67
+.globl sym_2_68
+sym_2_68: la $2, sym_2_68
+.globl sym_2_69
+sym_2_69: la $2, sym_2_69
+.globl sym_2_70
+sym_2_70: la $2, sym_2_70
+.globl sym_2_71
+sym_2_71: la $2, sym_2_71
+.globl sym_2_72
+sym_2_72: la $2, sym_2_72
+.globl sym_2_73
+sym_2_73: la $2, sym_2_73
+.globl sym_2_74
+sym_2_74: la $2, sym_2_74
+.globl sym_2_75
+sym_2_75: la $2, sym_2_75
+.globl sym_2_76
+sym_2_76: la $2, sym_2_76
+.globl sym_2_77
+sym_2_77: la $2, sym_2_77
+.globl sym_2_78
+sym_2_78: la $2, sym_2_78
+.globl sym_2_79
+sym_2_79: la $2, sym_2_79
+.globl sym_2_80
+sym_2_80: la $2, sym_2_80
+.globl sym_2_81
+sym_2_81: la $2, sym_2_81
+.globl sym_2_82
+sym_2_82: la $2, sym_2_82
+.globl sym_2_83
+sym_2_83: la $2, sym_2_83
+.globl sym_2_84
+sym_2_84: la $2, sym_2_84
+.globl sym_2_85
+sym_2_85: la $2, sym_2_85
+.globl sym_2_86
+sym_2_86: la $2, sym_2_86
+.globl sym_2_87
+sym_2_87: la $2, sym_2_87
+.globl sym_2_88
+sym_2_88: la $2, sym_2_88
+.globl sym_2_89
+sym_2_89: la $2, sym_2_89
+.globl sym_2_90
+sym_2_90: la $2, sym_2_90
+.globl sym_2_91
+sym_2_91: la $2, sym_2_91
+.globl sym_2_92
+sym_2_92: la $2, sym_2_92
+.globl sym_2_93
+sym_2_93: la $2, sym_2_93
+.globl sym_2_94
+sym_2_94: la $2, sym_2_94
+.globl sym_2_95
+sym_2_95: la $2, sym_2_95
+.globl sym_2_96
+sym_2_96: la $2, sym_2_96
+.globl sym_2_97
+sym_2_97: la $2, sym_2_97
+.globl sym_2_98
+sym_2_98: la $2, sym_2_98
+.globl sym_2_99
+sym_2_99: la $2, sym_2_99
+.globl sym_2_100
+sym_2_100: la $2, sym_2_100
+.globl sym_2_101
+sym_2_101: la $2, sym_2_101
+.globl sym_2_102
+sym_2_102: la $2, sym_2_102
+.globl sym_2_103
+sym_2_103: la $2, sym_2_103
+.globl sym_2_104
+sym_2_104: la $2, sym_2_104
+.globl sym_2_105
+sym_2_105: la $2, sym_2_105
+.globl sym_2_106
+sym_2_106: la $2, sym_2_106
+.globl sym_2_107
+sym_2_107: la $2, sym_2_107
+.globl sym_2_108
+sym_2_108: la $2, sym_2_108
+.globl sym_2_109
+sym_2_109: la $2, sym_2_109
+.globl sym_2_110
+sym_2_110: la $2, sym_2_110
+.globl sym_2_111
+sym_2_111: la $2, sym_2_111
+.globl sym_2_112
+sym_2_112: la $2, sym_2_112
+.globl sym_2_113
+sym_2_113: la $2, sym_2_113
+.globl sym_2_114
+sym_2_114: la $2, sym_2_114
+.globl sym_2_115
+sym_2_115: la $2, sym_2_115
+.globl sym_2_116
+sym_2_116: la $2, sym_2_116
+.globl sym_2_117
+sym_2_117: la $2, sym_2_117
+.globl sym_2_118
+sym_2_118: la $2, sym_2_118
+.globl sym_2_119
+sym_2_119: la $2, sym_2_119
+.globl sym_2_120
+sym_2_120: la $2, sym_2_120
+.globl sym_2_121
+sym_2_121: la $2, sym_2_121
+.globl sym_2_122
+sym_2_122: la $2, sym_2_122
+.globl sym_2_123
+sym_2_123: la $2, sym_2_123
+.globl sym_2_124
+sym_2_124: la $2, sym_2_124
+.globl sym_2_125
+sym_2_125: la $2, sym_2_125
+.globl sym_2_126
+sym_2_126: la $2, sym_2_126
+.globl sym_2_127
+sym_2_127: la $2, sym_2_127
+.globl sym_2_128
+sym_2_128: la $2, sym_2_128
+.globl sym_2_129
+sym_2_129: la $2, sym_2_129
+.globl sym_2_130
+sym_2_130: la $2, sym_2_130
+.globl sym_2_131
+sym_2_131: la $2, sym_2_131
+.globl sym_2_132
+sym_2_132: la $2, sym_2_132
+.globl sym_2_133
+sym_2_133: la $2, sym_2_133
+.globl sym_2_134
+sym_2_134: la $2, sym_2_134
+.globl sym_2_135
+sym_2_135: la $2, sym_2_135
+.globl sym_2_136
+sym_2_136: la $2, sym_2_136
+.globl sym_2_137
+sym_2_137: la $2, sym_2_137
+.globl sym_2_138
+sym_2_138: la $2, sym_2_138
+.globl sym_2_139
+sym_2_139: la $2, sym_2_139
+.globl sym_2_140
+sym_2_140: la $2, sym_2_140
+.globl sym_2_141
+sym_2_141: la $2, sym_2_141
+.globl sym_2_142
+sym_2_142: la $2, sym_2_142
+.globl sym_2_143
+sym_2_143: la $2, sym_2_143
+.globl sym_2_144
+sym_2_144: la $2, sym_2_144
+.globl sym_2_145
+sym_2_145: la $2, sym_2_145
+.globl sym_2_146
+sym_2_146: la $2, sym_2_146
+.globl sym_2_147
+sym_2_147: la $2, sym_2_147
+.globl sym_2_148
+sym_2_148: la $2, sym_2_148
+.globl sym_2_149
+sym_2_149: la $2, sym_2_149
+.globl sym_2_150
+sym_2_150: la $2, sym_2_150
+.globl sym_2_151
+sym_2_151: la $2, sym_2_151
+.globl sym_2_152
+sym_2_152: la $2, sym_2_152
+.globl sym_2_153
+sym_2_153: la $2, sym_2_153
+.globl sym_2_154
+sym_2_154: la $2, sym_2_154
+.globl sym_2_155
+sym_2_155: la $2, sym_2_155
+.globl sym_2_156
+sym_2_156: la $2, sym_2_156
+.globl sym_2_157
+sym_2_157: la $2, sym_2_157
+.globl sym_2_158
+sym_2_158: la $2, sym_2_158
+.globl sym_2_159
+sym_2_159: la $2, sym_2_159
+.globl sym_2_160
+sym_2_160: la $2, sym_2_160
+.globl sym_2_161
+sym_2_161: la $2, sym_2_161
+.globl sym_2_162
+sym_2_162: la $2, sym_2_162
+.globl sym_2_163
+sym_2_163: la $2, sym_2_163
+.globl sym_2_164
+sym_2_164: la $2, sym_2_164
+.globl sym_2_165
+sym_2_165: la $2, sym_2_165
+.globl sym_2_166
+sym_2_166: la $2, sym_2_166
+.globl sym_2_167
+sym_2_167: la $2, sym_2_167
+.globl sym_2_168
+sym_2_168: la $2, sym_2_168
+.globl sym_2_169
+sym_2_169: la $2, sym_2_169
+.globl sym_2_170
+sym_2_170: la $2, sym_2_170
+.globl sym_2_171
+sym_2_171: la $2, sym_2_171
+.globl sym_2_172
+sym_2_172: la $2, sym_2_172
+.globl sym_2_173
+sym_2_173: la $2, sym_2_173
+.globl sym_2_174
+sym_2_174: la $2, sym_2_174
+.globl sym_2_175
+sym_2_175: la $2, sym_2_175
+.globl sym_2_176
+sym_2_176: la $2, sym_2_176
+.globl sym_2_177
+sym_2_177: la $2, sym_2_177
+.globl sym_2_178
+sym_2_178: la $2, sym_2_178
+.globl sym_2_179
+sym_2_179: la $2, sym_2_179
+.globl sym_2_180
+sym_2_180: la $2, sym_2_180
+.globl sym_2_181
+sym_2_181: la $2, sym_2_181
+.globl sym_2_182
+sym_2_182: la $2, sym_2_182
+.globl sym_2_183
+sym_2_183: la $2, sym_2_183
+.globl sym_2_184
+sym_2_184: la $2, sym_2_184
+.globl sym_2_185
+sym_2_185: la $2, sym_2_185
+.globl sym_2_186
+sym_2_186: la $2, sym_2_186
+.globl sym_2_187
+sym_2_187: la $2, sym_2_187
+.globl sym_2_188
+sym_2_188: la $2, sym_2_188
+.globl sym_2_189
+sym_2_189: la $2, sym_2_189
+.globl sym_2_190
+sym_2_190: la $2, sym_2_190
+.globl sym_2_191
+sym_2_191: la $2, sym_2_191
+.globl sym_2_192
+sym_2_192: la $2, sym_2_192
+.globl sym_2_193
+sym_2_193: la $2, sym_2_193
+.globl sym_2_194
+sym_2_194: la $2, sym_2_194
+.globl sym_2_195
+sym_2_195: la $2, sym_2_195
+.globl sym_2_196
+sym_2_196: la $2, sym_2_196
+.globl sym_2_197
+sym_2_197: la $2, sym_2_197
+.globl sym_2_198
+sym_2_198: la $2, sym_2_198
+.globl sym_2_199
+sym_2_199: la $2, sym_2_199
+.globl sym_2_200
+sym_2_200: la $2, sym_2_200
+.globl sym_2_201
+sym_2_201: la $2, sym_2_201
+.globl sym_2_202
+sym_2_202: la $2, sym_2_202
+.globl sym_2_203
+sym_2_203: la $2, sym_2_203
+.globl sym_2_204
+sym_2_204: la $2, sym_2_204
+.globl sym_2_205
+sym_2_205: la $2, sym_2_205
+.globl sym_2_206
+sym_2_206: la $2, sym_2_206
+.globl sym_2_207
+sym_2_207: la $2, sym_2_207
+.globl sym_2_208
+sym_2_208: la $2, sym_2_208
+.globl sym_2_209
+sym_2_209: la $2, sym_2_209
+.globl sym_2_210
+sym_2_210: la $2, sym_2_210
+.globl sym_2_211
+sym_2_211: la $2, sym_2_211
+.globl sym_2_212
+sym_2_212: la $2, sym_2_212
+.globl sym_2_213
+sym_2_213: la $2, sym_2_213
+.globl sym_2_214
+sym_2_214: la $2, sym_2_214
+.globl sym_2_215
+sym_2_215: la $2, sym_2_215
+.globl sym_2_216
+sym_2_216: la $2, sym_2_216
+.globl sym_2_217
+sym_2_217: la $2, sym_2_217
+.globl sym_2_218
+sym_2_218: la $2, sym_2_218
+.globl sym_2_219
+sym_2_219: la $2, sym_2_219
+.globl sym_2_220
+sym_2_220: la $2, sym_2_220
+.globl sym_2_221
+sym_2_221: la $2, sym_2_221
+.globl sym_2_222
+sym_2_222: la $2, sym_2_222
+.globl sym_2_223
+sym_2_223: la $2, sym_2_223
+.globl sym_2_224
+sym_2_224: la $2, sym_2_224
+.globl sym_2_225
+sym_2_225: la $2, sym_2_225
+.globl sym_2_226
+sym_2_226: la $2, sym_2_226
+.globl sym_2_227
+sym_2_227: la $2, sym_2_227
+.globl sym_2_228
+sym_2_228: la $2, sym_2_228
+.globl sym_2_229
+sym_2_229: la $2, sym_2_229
+.globl sym_2_230
+sym_2_230: la $2, sym_2_230
+.globl sym_2_231
+sym_2_231: la $2, sym_2_231
+.globl sym_2_232
+sym_2_232: la $2, sym_2_232
+.globl sym_2_233
+sym_2_233: la $2, sym_2_233
+.globl sym_2_234
+sym_2_234: la $2, sym_2_234
+.globl sym_2_235
+sym_2_235: la $2, sym_2_235
+.globl sym_2_236
+sym_2_236: la $2, sym_2_236
+.globl sym_2_237
+sym_2_237: la $2, sym_2_237
+.globl sym_2_238
+sym_2_238: la $2, sym_2_238
+.globl sym_2_239
+sym_2_239: la $2, sym_2_239
+.globl sym_2_240
+sym_2_240: la $2, sym_2_240
+.globl sym_2_241
+sym_2_241: la $2, sym_2_241
+.globl sym_2_242
+sym_2_242: la $2, sym_2_242
+.globl sym_2_243
+sym_2_243: la $2, sym_2_243
+.globl sym_2_244
+sym_2_244: la $2, sym_2_244
+.globl sym_2_245
+sym_2_245: la $2, sym_2_245
+.globl sym_2_246
+sym_2_246: la $2, sym_2_246
+.globl sym_2_247
+sym_2_247: la $2, sym_2_247
+.globl sym_2_248
+sym_2_248: la $2, sym_2_248
+.globl sym_2_249
+sym_2_249: la $2, sym_2_249
+.globl sym_2_250
+sym_2_250: la $2, sym_2_250
+.globl sym_2_251
+sym_2_251: la $2, sym_2_251
+.globl sym_2_252
+sym_2_252: la $2, sym_2_252
+.globl sym_2_253
+sym_2_253: la $2, sym_2_253
+.globl sym_2_254
+sym_2_254: la $2, sym_2_254
+.globl sym_2_255
+sym_2_255: la $2, sym_2_255
+.globl sym_2_256
+sym_2_256: la $2, sym_2_256
+.globl sym_2_257
+sym_2_257: la $2, sym_2_257
+.globl sym_2_258
+sym_2_258: la $2, sym_2_258
+.globl sym_2_259
+sym_2_259: la $2, sym_2_259
+.globl sym_2_260
+sym_2_260: la $2, sym_2_260
+.globl sym_2_261
+sym_2_261: la $2, sym_2_261
+.globl sym_2_262
+sym_2_262: la $2, sym_2_262
+.globl sym_2_263
+sym_2_263: la $2, sym_2_263
+.globl sym_2_264
+sym_2_264: la $2, sym_2_264
+.globl sym_2_265
+sym_2_265: la $2, sym_2_265
+.globl sym_2_266
+sym_2_266: la $2, sym_2_266
+.globl sym_2_267
+sym_2_267: la $2, sym_2_267
+.globl sym_2_268
+sym_2_268: la $2, sym_2_268
+.globl sym_2_269
+sym_2_269: la $2, sym_2_269
+.globl sym_2_270
+sym_2_270: la $2, sym_2_270
+.globl sym_2_271
+sym_2_271: la $2, sym_2_271
+.globl sym_2_272
+sym_2_272: la $2, sym_2_272
+.globl sym_2_273
+sym_2_273: la $2, sym_2_273
+.globl sym_2_274
+sym_2_274: la $2, sym_2_274
+.globl sym_2_275
+sym_2_275: la $2, sym_2_275
+.globl sym_2_276
+sym_2_276: la $2, sym_2_276
+.globl sym_2_277
+sym_2_277: la $2, sym_2_277
+.globl sym_2_278
+sym_2_278: la $2, sym_2_278
+.globl sym_2_279
+sym_2_279: la $2, sym_2_279
+.globl sym_2_280
+sym_2_280: la $2, sym_2_280
+.globl sym_2_281
+sym_2_281: la $2, sym_2_281
+.globl sym_2_282
+sym_2_282: la $2, sym_2_282
+.globl sym_2_283
+sym_2_283: la $2, sym_2_283
+.globl sym_2_284
+sym_2_284: la $2, sym_2_284
+.globl sym_2_285
+sym_2_285: la $2, sym_2_285
+.globl sym_2_286
+sym_2_286: la $2, sym_2_286
+.globl sym_2_287
+sym_2_287: la $2, sym_2_287
+.globl sym_2_288
+sym_2_288: la $2, sym_2_288
+.globl sym_2_289
+sym_2_289: la $2, sym_2_289
+.globl sym_2_290
+sym_2_290: la $2, sym_2_290
+.globl sym_2_291
+sym_2_291: la $2, sym_2_291
+.globl sym_2_292
+sym_2_292: la $2, sym_2_292
+.globl sym_2_293
+sym_2_293: la $2, sym_2_293
+.globl sym_2_294
+sym_2_294: la $2, sym_2_294
+.globl sym_2_295
+sym_2_295: la $2, sym_2_295
+.globl sym_2_296
+sym_2_296: la $2, sym_2_296
+.globl sym_2_297
+sym_2_297: la $2, sym_2_297
+.globl sym_2_298
+sym_2_298: la $2, sym_2_298
+.globl sym_2_299
+sym_2_299: la $2, sym_2_299
+.globl sym_2_300
+sym_2_300: la $2, sym_2_300
+.globl sym_2_301
+sym_2_301: la $2, sym_2_301
+.globl sym_2_302
+sym_2_302: la $2, sym_2_302
+.globl sym_2_303
+sym_2_303: la $2, sym_2_303
+.globl sym_2_304
+sym_2_304: la $2, sym_2_304
+.globl sym_2_305
+sym_2_305: la $2, sym_2_305
+.globl sym_2_306
+sym_2_306: la $2, sym_2_306
+.globl sym_2_307
+sym_2_307: la $2, sym_2_307
+.globl sym_2_308
+sym_2_308: la $2, sym_2_308
+.globl sym_2_309
+sym_2_309: la $2, sym_2_309
+.globl sym_2_310
+sym_2_310: la $2, sym_2_310
+.globl sym_2_311
+sym_2_311: la $2, sym_2_311
+.globl sym_2_312
+sym_2_312: la $2, sym_2_312
+.globl sym_2_313
+sym_2_313: la $2, sym_2_313
+.globl sym_2_314
+sym_2_314: la $2, sym_2_314
+.globl sym_2_315
+sym_2_315: la $2, sym_2_315
+.globl sym_2_316
+sym_2_316: la $2, sym_2_316
+.globl sym_2_317
+sym_2_317: la $2, sym_2_317
+.globl sym_2_318
+sym_2_318: la $2, sym_2_318
+.globl sym_2_319
+sym_2_319: la $2, sym_2_319
+.globl sym_2_320
+sym_2_320: la $2, sym_2_320
+.globl sym_2_321
+sym_2_321: la $2, sym_2_321
+.globl sym_2_322
+sym_2_322: la $2, sym_2_322
+.globl sym_2_323
+sym_2_323: la $2, sym_2_323
+.globl sym_2_324
+sym_2_324: la $2, sym_2_324
+.globl sym_2_325
+sym_2_325: la $2, sym_2_325
+.globl sym_2_326
+sym_2_326: la $2, sym_2_326
+.globl sym_2_327
+sym_2_327: la $2, sym_2_327
+.globl sym_2_328
+sym_2_328: la $2, sym_2_328
+.globl sym_2_329
+sym_2_329: la $2, sym_2_329
+.globl sym_2_330
+sym_2_330: la $2, sym_2_330
+.globl sym_2_331
+sym_2_331: la $2, sym_2_331
+.globl sym_2_332
+sym_2_332: la $2, sym_2_332
+.globl sym_2_333
+sym_2_333: la $2, sym_2_333
+.globl sym_2_334
+sym_2_334: la $2, sym_2_334
+.globl sym_2_335
+sym_2_335: la $2, sym_2_335
+.globl sym_2_336
+sym_2_336: la $2, sym_2_336
+.globl sym_2_337
+sym_2_337: la $2, sym_2_337
+.globl sym_2_338
+sym_2_338: la $2, sym_2_338
+.globl sym_2_339
+sym_2_339: la $2, sym_2_339
+.globl sym_2_340
+sym_2_340: la $2, sym_2_340
+.globl sym_2_341
+sym_2_341: la $2, sym_2_341
+.globl sym_2_342
+sym_2_342: la $2, sym_2_342
+.globl sym_2_343
+sym_2_343: la $2, sym_2_343
+.globl sym_2_344
+sym_2_344: la $2, sym_2_344
+.globl sym_2_345
+sym_2_345: la $2, sym_2_345
+.globl sym_2_346
+sym_2_346: la $2, sym_2_346
+.globl sym_2_347
+sym_2_347: la $2, sym_2_347
+.globl sym_2_348
+sym_2_348: la $2, sym_2_348
+.globl sym_2_349
+sym_2_349: la $2, sym_2_349
+.globl sym_2_350
+sym_2_350: la $2, sym_2_350
+.globl sym_2_351
+sym_2_351: la $2, sym_2_351
+.globl sym_2_352
+sym_2_352: la $2, sym_2_352
+.globl sym_2_353
+sym_2_353: la $2, sym_2_353
+.globl sym_2_354
+sym_2_354: la $2, sym_2_354
+.globl sym_2_355
+sym_2_355: la $2, sym_2_355
+.globl sym_2_356
+sym_2_356: la $2, sym_2_356
+.globl sym_2_357
+sym_2_357: la $2, sym_2_357
+.globl sym_2_358
+sym_2_358: la $2, sym_2_358
+.globl sym_2_359
+sym_2_359: la $2, sym_2_359
+.globl sym_2_360
+sym_2_360: la $2, sym_2_360
+.globl sym_2_361
+sym_2_361: la $2, sym_2_361
+.globl sym_2_362
+sym_2_362: la $2, sym_2_362
+.globl sym_2_363
+sym_2_363: la $2, sym_2_363
+.globl sym_2_364
+sym_2_364: la $2, sym_2_364
+.globl sym_2_365
+sym_2_365: la $2, sym_2_365
+.globl sym_2_366
+sym_2_366: la $2, sym_2_366
+.globl sym_2_367
+sym_2_367: la $2, sym_2_367
+.globl sym_2_368
+sym_2_368: la $2, sym_2_368
+.globl sym_2_369
+sym_2_369: la $2, sym_2_369
+.globl sym_2_370
+sym_2_370: la $2, sym_2_370
+.globl sym_2_371
+sym_2_371: la $2, sym_2_371
+.globl sym_2_372
+sym_2_372: la $2, sym_2_372
+.globl sym_2_373
+sym_2_373: la $2, sym_2_373
+.globl sym_2_374
+sym_2_374: la $2, sym_2_374
+.globl sym_2_375
+sym_2_375: la $2, sym_2_375
+.globl sym_2_376
+sym_2_376: la $2, sym_2_376
+.globl sym_2_377
+sym_2_377: la $2, sym_2_377
+.globl sym_2_378
+sym_2_378: la $2, sym_2_378
+.globl sym_2_379
+sym_2_379: la $2, sym_2_379
+.globl sym_2_380
+sym_2_380: la $2, sym_2_380
+.globl sym_2_381
+sym_2_381: la $2, sym_2_381
+.globl sym_2_382
+sym_2_382: la $2, sym_2_382
+.globl sym_2_383
+sym_2_383: la $2, sym_2_383
+.globl sym_2_384
+sym_2_384: la $2, sym_2_384
+.globl sym_2_385
+sym_2_385: la $2, sym_2_385
+.globl sym_2_386
+sym_2_386: la $2, sym_2_386
+.globl sym_2_387
+sym_2_387: la $2, sym_2_387
+.globl sym_2_388
+sym_2_388: la $2, sym_2_388
+.globl sym_2_389
+sym_2_389: la $2, sym_2_389
+.globl sym_2_390
+sym_2_390: la $2, sym_2_390
+.globl sym_2_391
+sym_2_391: la $2, sym_2_391
+.globl sym_2_392
+sym_2_392: la $2, sym_2_392
+.globl sym_2_393
+sym_2_393: la $2, sym_2_393
+.globl sym_2_394
+sym_2_394: la $2, sym_2_394
+.globl sym_2_395
+sym_2_395: la $2, sym_2_395
+.globl sym_2_396
+sym_2_396: la $2, sym_2_396
+.globl sym_2_397
+sym_2_397: la $2, sym_2_397
+.globl sym_2_398
+sym_2_398: la $2, sym_2_398
+.globl sym_2_399
+sym_2_399: la $2, sym_2_399
+.globl sym_2_400
+sym_2_400: la $2, sym_2_400
+.globl sym_2_401
+sym_2_401: la $2, sym_2_401
+.globl sym_2_402
+sym_2_402: la $2, sym_2_402
+.globl sym_2_403
+sym_2_403: la $2, sym_2_403
+.globl sym_2_404
+sym_2_404: la $2, sym_2_404
+.globl sym_2_405
+sym_2_405: la $2, sym_2_405
+.globl sym_2_406
+sym_2_406: la $2, sym_2_406
+.globl sym_2_407
+sym_2_407: la $2, sym_2_407
+.globl sym_2_408
+sym_2_408: la $2, sym_2_408
+.globl sym_2_409
+sym_2_409: la $2, sym_2_409
+.globl sym_2_410
+sym_2_410: la $2, sym_2_410
+.globl sym_2_411
+sym_2_411: la $2, sym_2_411
+.globl sym_2_412
+sym_2_412: la $2, sym_2_412
+.globl sym_2_413
+sym_2_413: la $2, sym_2_413
+.globl sym_2_414
+sym_2_414: la $2, sym_2_414
+.globl sym_2_415
+sym_2_415: la $2, sym_2_415
+.globl sym_2_416
+sym_2_416: la $2, sym_2_416
+.globl sym_2_417
+sym_2_417: la $2, sym_2_417
+.globl sym_2_418
+sym_2_418: la $2, sym_2_418
+.globl sym_2_419
+sym_2_419: la $2, sym_2_419
+.globl sym_2_420
+sym_2_420: la $2, sym_2_420
+.globl sym_2_421
+sym_2_421: la $2, sym_2_421
+.globl sym_2_422
+sym_2_422: la $2, sym_2_422
+.globl sym_2_423
+sym_2_423: la $2, sym_2_423
+.globl sym_2_424
+sym_2_424: la $2, sym_2_424
+.globl sym_2_425
+sym_2_425: la $2, sym_2_425
+.globl sym_2_426
+sym_2_426: la $2, sym_2_426
+.globl sym_2_427
+sym_2_427: la $2, sym_2_427
+.globl sym_2_428
+sym_2_428: la $2, sym_2_428
+.globl sym_2_429
+sym_2_429: la $2, sym_2_429
+.globl sym_2_430
+sym_2_430: la $2, sym_2_430
+.globl sym_2_431
+sym_2_431: la $2, sym_2_431
+.globl sym_2_432
+sym_2_432: la $2, sym_2_432
+.globl sym_2_433
+sym_2_433: la $2, sym_2_433
+.globl sym_2_434
+sym_2_434: la $2, sym_2_434
+.globl sym_2_435
+sym_2_435: la $2, sym_2_435
+.globl sym_2_436
+sym_2_436: la $2, sym_2_436
+.globl sym_2_437
+sym_2_437: la $2, sym_2_437
+.globl sym_2_438
+sym_2_438: la $2, sym_2_438
+.globl sym_2_439
+sym_2_439: la $2, sym_2_439
+.globl sym_2_440
+sym_2_440: la $2, sym_2_440
+.globl sym_2_441
+sym_2_441: la $2, sym_2_441
+.globl sym_2_442
+sym_2_442: la $2, sym_2_442
+.globl sym_2_443
+sym_2_443: la $2, sym_2_443
+.globl sym_2_444
+sym_2_444: la $2, sym_2_444
+.globl sym_2_445
+sym_2_445: la $2, sym_2_445
+.globl sym_2_446
+sym_2_446: la $2, sym_2_446
+.globl sym_2_447
+sym_2_447: la $2, sym_2_447
+.globl sym_2_448
+sym_2_448: la $2, sym_2_448
+.globl sym_2_449
+sym_2_449: la $2, sym_2_449
+.globl sym_2_450
+sym_2_450: la $2, sym_2_450
+.globl sym_2_451
+sym_2_451: la $2, sym_2_451
+.globl sym_2_452
+sym_2_452: la $2, sym_2_452
+.globl sym_2_453
+sym_2_453: la $2, sym_2_453
+.globl sym_2_454
+sym_2_454: la $2, sym_2_454
+.globl sym_2_455
+sym_2_455: la $2, sym_2_455
+.globl sym_2_456
+sym_2_456: la $2, sym_2_456
+.globl sym_2_457
+sym_2_457: la $2, sym_2_457
+.globl sym_2_458
+sym_2_458: la $2, sym_2_458
+.globl sym_2_459
+sym_2_459: la $2, sym_2_459
+.globl sym_2_460
+sym_2_460: la $2, sym_2_460
+.globl sym_2_461
+sym_2_461: la $2, sym_2_461
+.globl sym_2_462
+sym_2_462: la $2, sym_2_462
+.globl sym_2_463
+sym_2_463: la $2, sym_2_463
+.globl sym_2_464
+sym_2_464: la $2, sym_2_464
+.globl sym_2_465
+sym_2_465: la $2, sym_2_465
+.globl sym_2_466
+sym_2_466: la $2, sym_2_466
+.globl sym_2_467
+sym_2_467: la $2, sym_2_467
+.globl sym_2_468
+sym_2_468: la $2, sym_2_468
+.globl sym_2_469
+sym_2_469: la $2, sym_2_469
+.globl sym_2_470
+sym_2_470: la $2, sym_2_470
+.globl sym_2_471
+sym_2_471: la $2, sym_2_471
+.globl sym_2_472
+sym_2_472: la $2, sym_2_472
+.globl sym_2_473
+sym_2_473: la $2, sym_2_473
+.globl sym_2_474
+sym_2_474: la $2, sym_2_474
+.globl sym_2_475
+sym_2_475: la $2, sym_2_475
+.globl sym_2_476
+sym_2_476: la $2, sym_2_476
+.globl sym_2_477
+sym_2_477: la $2, sym_2_477
+.globl sym_2_478
+sym_2_478: la $2, sym_2_478
+.globl sym_2_479
+sym_2_479: la $2, sym_2_479
+.globl sym_2_480
+sym_2_480: la $2, sym_2_480
+.globl sym_2_481
+sym_2_481: la $2, sym_2_481
+.globl sym_2_482
+sym_2_482: la $2, sym_2_482
+.globl sym_2_483
+sym_2_483: la $2, sym_2_483
+.globl sym_2_484
+sym_2_484: la $2, sym_2_484
+.globl sym_2_485
+sym_2_485: la $2, sym_2_485
+.globl sym_2_486
+sym_2_486: la $2, sym_2_486
+.globl sym_2_487
+sym_2_487: la $2, sym_2_487
+.globl sym_2_488
+sym_2_488: la $2, sym_2_488
+.globl sym_2_489
+sym_2_489: la $2, sym_2_489
+.globl sym_2_490
+sym_2_490: la $2, sym_2_490
+.globl sym_2_491
+sym_2_491: la $2, sym_2_491
+.globl sym_2_492
+sym_2_492: la $2, sym_2_492
+.globl sym_2_493
+sym_2_493: la $2, sym_2_493
+.globl sym_2_494
+sym_2_494: la $2, sym_2_494
+.globl sym_2_495
+sym_2_495: la $2, sym_2_495
+.globl sym_2_496
+sym_2_496: la $2, sym_2_496
+.globl sym_2_497
+sym_2_497: la $2, sym_2_497
+.globl sym_2_498
+sym_2_498: la $2, sym_2_498
+.globl sym_2_499
+sym_2_499: la $2, sym_2_499
+.globl sym_2_500
+sym_2_500: la $2, sym_2_500
+.globl sym_2_501
+sym_2_501: la $2, sym_2_501
+.globl sym_2_502
+sym_2_502: la $2, sym_2_502
+.globl sym_2_503
+sym_2_503: la $2, sym_2_503
+.globl sym_2_504
+sym_2_504: la $2, sym_2_504
+.globl sym_2_505
+sym_2_505: la $2, sym_2_505
+.globl sym_2_506
+sym_2_506: la $2, sym_2_506
+.globl sym_2_507
+sym_2_507: la $2, sym_2_507
+.globl sym_2_508
+sym_2_508: la $2, sym_2_508
+.globl sym_2_509
+sym_2_509: la $2, sym_2_509
+.globl sym_2_510
+sym_2_510: la $2, sym_2_510
+.globl sym_2_511
+sym_2_511: la $2, sym_2_511
+.globl sym_2_512
+sym_2_512: la $2, sym_2_512
+.globl sym_2_513
+sym_2_513: la $2, sym_2_513
+.globl sym_2_514
+sym_2_514: la $2, sym_2_514
+.globl sym_2_515
+sym_2_515: la $2, sym_2_515
+.globl sym_2_516
+sym_2_516: la $2, sym_2_516
+.globl sym_2_517
+sym_2_517: la $2, sym_2_517
+.globl sym_2_518
+sym_2_518: la $2, sym_2_518
+.globl sym_2_519
+sym_2_519: la $2, sym_2_519
+.globl sym_2_520
+sym_2_520: la $2, sym_2_520
+.globl sym_2_521
+sym_2_521: la $2, sym_2_521
+.globl sym_2_522
+sym_2_522: la $2, sym_2_522
+.globl sym_2_523
+sym_2_523: la $2, sym_2_523
+.globl sym_2_524
+sym_2_524: la $2, sym_2_524
+.globl sym_2_525
+sym_2_525: la $2, sym_2_525
+.globl sym_2_526
+sym_2_526: la $2, sym_2_526
+.globl sym_2_527
+sym_2_527: la $2, sym_2_527
+.globl sym_2_528
+sym_2_528: la $2, sym_2_528
+.globl sym_2_529
+sym_2_529: la $2, sym_2_529
+.globl sym_2_530
+sym_2_530: la $2, sym_2_530
+.globl sym_2_531
+sym_2_531: la $2, sym_2_531
+.globl sym_2_532
+sym_2_532: la $2, sym_2_532
+.globl sym_2_533
+sym_2_533: la $2, sym_2_533
+.globl sym_2_534
+sym_2_534: la $2, sym_2_534
+.globl sym_2_535
+sym_2_535: la $2, sym_2_535
+.globl sym_2_536
+sym_2_536: la $2, sym_2_536
+.globl sym_2_537
+sym_2_537: la $2, sym_2_537
+.globl sym_2_538
+sym_2_538: la $2, sym_2_538
+.globl sym_2_539
+sym_2_539: la $2, sym_2_539
+.globl sym_2_540
+sym_2_540: la $2, sym_2_540
+.globl sym_2_541
+sym_2_541: la $2, sym_2_541
+.globl sym_2_542
+sym_2_542: la $2, sym_2_542
+.globl sym_2_543
+sym_2_543: la $2, sym_2_543
+.globl sym_2_544
+sym_2_544: la $2, sym_2_544
+.globl sym_2_545
+sym_2_545: la $2, sym_2_545
+.globl sym_2_546
+sym_2_546: la $2, sym_2_546
+.globl sym_2_547
+sym_2_547: la $2, sym_2_547
+.globl sym_2_548
+sym_2_548: la $2, sym_2_548
+.globl sym_2_549
+sym_2_549: la $2, sym_2_549
+.globl sym_2_550
+sym_2_550: la $2, sym_2_550
+.globl sym_2_551
+sym_2_551: la $2, sym_2_551
+.globl sym_2_552
+sym_2_552: la $2, sym_2_552
+.globl sym_2_553
+sym_2_553: la $2, sym_2_553
+.globl sym_2_554
+sym_2_554: la $2, sym_2_554
+.globl sym_2_555
+sym_2_555: la $2, sym_2_555
+.globl sym_2_556
+sym_2_556: la $2, sym_2_556
+.globl sym_2_557
+sym_2_557: la $2, sym_2_557
+.globl sym_2_558
+sym_2_558: la $2, sym_2_558
+.globl sym_2_559
+sym_2_559: la $2, sym_2_559
+.globl sym_2_560
+sym_2_560: la $2, sym_2_560
+.globl sym_2_561
+sym_2_561: la $2, sym_2_561
+.globl sym_2_562
+sym_2_562: la $2, sym_2_562
+.globl sym_2_563
+sym_2_563: la $2, sym_2_563
+.globl sym_2_564
+sym_2_564: la $2, sym_2_564
+.globl sym_2_565
+sym_2_565: la $2, sym_2_565
+.globl sym_2_566
+sym_2_566: la $2, sym_2_566
+.globl sym_2_567
+sym_2_567: la $2, sym_2_567
+.globl sym_2_568
+sym_2_568: la $2, sym_2_568
+.globl sym_2_569
+sym_2_569: la $2, sym_2_569
+.globl sym_2_570
+sym_2_570: la $2, sym_2_570
+.globl sym_2_571
+sym_2_571: la $2, sym_2_571
+.globl sym_2_572
+sym_2_572: la $2, sym_2_572
+.globl sym_2_573
+sym_2_573: la $2, sym_2_573
+.globl sym_2_574
+sym_2_574: la $2, sym_2_574
+.globl sym_2_575
+sym_2_575: la $2, sym_2_575
+.globl sym_2_576
+sym_2_576: la $2, sym_2_576
+.globl sym_2_577
+sym_2_577: la $2, sym_2_577
+.globl sym_2_578
+sym_2_578: la $2, sym_2_578
+.globl sym_2_579
+sym_2_579: la $2, sym_2_579
+.globl sym_2_580
+sym_2_580: la $2, sym_2_580
+.globl sym_2_581
+sym_2_581: la $2, sym_2_581
+.globl sym_2_582
+sym_2_582: la $2, sym_2_582
+.globl sym_2_583
+sym_2_583: la $2, sym_2_583
+.globl sym_2_584
+sym_2_584: la $2, sym_2_584
+.globl sym_2_585
+sym_2_585: la $2, sym_2_585
+.globl sym_2_586
+sym_2_586: la $2, sym_2_586
+.globl sym_2_587
+sym_2_587: la $2, sym_2_587
+.globl sym_2_588
+sym_2_588: la $2, sym_2_588
+.globl sym_2_589
+sym_2_589: la $2, sym_2_589
+.globl sym_2_590
+sym_2_590: la $2, sym_2_590
+.globl sym_2_591
+sym_2_591: la $2, sym_2_591
+.globl sym_2_592
+sym_2_592: la $2, sym_2_592
+.globl sym_2_593
+sym_2_593: la $2, sym_2_593
+.globl sym_2_594
+sym_2_594: la $2, sym_2_594
+.globl sym_2_595
+sym_2_595: la $2, sym_2_595
+.globl sym_2_596
+sym_2_596: la $2, sym_2_596
+.globl sym_2_597
+sym_2_597: la $2, sym_2_597
+.globl sym_2_598
+sym_2_598: la $2, sym_2_598
+.globl sym_2_599
+sym_2_599: la $2, sym_2_599
+.globl sym_2_600
+sym_2_600: la $2, sym_2_600
+.globl sym_2_601
+sym_2_601: la $2, sym_2_601
+.globl sym_2_602
+sym_2_602: la $2, sym_2_602
+.globl sym_2_603
+sym_2_603: la $2, sym_2_603
+.globl sym_2_604
+sym_2_604: la $2, sym_2_604
+.globl sym_2_605
+sym_2_605: la $2, sym_2_605
+.globl sym_2_606
+sym_2_606: la $2, sym_2_606
+.globl sym_2_607
+sym_2_607: la $2, sym_2_607
+.globl sym_2_608
+sym_2_608: la $2, sym_2_608
+.globl sym_2_609
+sym_2_609: la $2, sym_2_609
+.globl sym_2_610
+sym_2_610: la $2, sym_2_610
+.globl sym_2_611
+sym_2_611: la $2, sym_2_611
+.globl sym_2_612
+sym_2_612: la $2, sym_2_612
+.globl sym_2_613
+sym_2_613: la $2, sym_2_613
+.globl sym_2_614
+sym_2_614: la $2, sym_2_614
+.globl sym_2_615
+sym_2_615: la $2, sym_2_615
+.globl sym_2_616
+sym_2_616: la $2, sym_2_616
+.globl sym_2_617
+sym_2_617: la $2, sym_2_617
+.globl sym_2_618
+sym_2_618: la $2, sym_2_618
+.globl sym_2_619
+sym_2_619: la $2, sym_2_619
+.globl sym_2_620
+sym_2_620: la $2, sym_2_620
+.globl sym_2_621
+sym_2_621: la $2, sym_2_621
+.globl sym_2_622
+sym_2_622: la $2, sym_2_622
+.globl sym_2_623
+sym_2_623: la $2, sym_2_623
+.globl sym_2_624
+sym_2_624: la $2, sym_2_624
+.globl sym_2_625
+sym_2_625: la $2, sym_2_625
+.globl sym_2_626
+sym_2_626: la $2, sym_2_626
+.globl sym_2_627
+sym_2_627: la $2, sym_2_627
+.globl sym_2_628
+sym_2_628: la $2, sym_2_628
+.globl sym_2_629
+sym_2_629: la $2, sym_2_629
+.globl sym_2_630
+sym_2_630: la $2, sym_2_630
+.globl sym_2_631
+sym_2_631: la $2, sym_2_631
+.globl sym_2_632
+sym_2_632: la $2, sym_2_632
+.globl sym_2_633
+sym_2_633: la $2, sym_2_633
+.globl sym_2_634
+sym_2_634: la $2, sym_2_634
+.globl sym_2_635
+sym_2_635: la $2, sym_2_635
+.globl sym_2_636
+sym_2_636: la $2, sym_2_636
+.globl sym_2_637
+sym_2_637: la $2, sym_2_637
+.globl sym_2_638
+sym_2_638: la $2, sym_2_638
+.globl sym_2_639
+sym_2_639: la $2, sym_2_639
+.globl sym_2_640
+sym_2_640: la $2, sym_2_640
+.globl sym_2_641
+sym_2_641: la $2, sym_2_641
+.globl sym_2_642
+sym_2_642: la $2, sym_2_642
+.globl sym_2_643
+sym_2_643: la $2, sym_2_643
+.globl sym_2_644
+sym_2_644: la $2, sym_2_644
+.globl sym_2_645
+sym_2_645: la $2, sym_2_645
+.globl sym_2_646
+sym_2_646: la $2, sym_2_646
+.globl sym_2_647
+sym_2_647: la $2, sym_2_647
+.globl sym_2_648
+sym_2_648: la $2, sym_2_648
+.globl sym_2_649
+sym_2_649: la $2, sym_2_649
+.globl sym_2_650
+sym_2_650: la $2, sym_2_650
+.globl sym_2_651
+sym_2_651: la $2, sym_2_651
+.globl sym_2_652
+sym_2_652: la $2, sym_2_652
+.globl sym_2_653
+sym_2_653: la $2, sym_2_653
+.globl sym_2_654
+sym_2_654: la $2, sym_2_654
+.globl sym_2_655
+sym_2_655: la $2, sym_2_655
+.globl sym_2_656
+sym_2_656: la $2, sym_2_656
+.globl sym_2_657
+sym_2_657: la $2, sym_2_657
+.globl sym_2_658
+sym_2_658: la $2, sym_2_658
+.globl sym_2_659
+sym_2_659: la $2, sym_2_659
+.globl sym_2_660
+sym_2_660: la $2, sym_2_660
+.globl sym_2_661
+sym_2_661: la $2, sym_2_661
+.globl sym_2_662
+sym_2_662: la $2, sym_2_662
+.globl sym_2_663
+sym_2_663: la $2, sym_2_663
+.globl sym_2_664
+sym_2_664: la $2, sym_2_664
+.globl sym_2_665
+sym_2_665: la $2, sym_2_665
+.globl sym_2_666
+sym_2_666: la $2, sym_2_666
+.globl sym_2_667
+sym_2_667: la $2, sym_2_667
+.globl sym_2_668
+sym_2_668: la $2, sym_2_668
+.globl sym_2_669
+sym_2_669: la $2, sym_2_669
+.globl sym_2_670
+sym_2_670: la $2, sym_2_670
+.globl sym_2_671
+sym_2_671: la $2, sym_2_671
+.globl sym_2_672
+sym_2_672: la $2, sym_2_672
+.globl sym_2_673
+sym_2_673: la $2, sym_2_673
+.globl sym_2_674
+sym_2_674: la $2, sym_2_674
+.globl sym_2_675
+sym_2_675: la $2, sym_2_675
+.globl sym_2_676
+sym_2_676: la $2, sym_2_676
+.globl sym_2_677
+sym_2_677: la $2, sym_2_677
+.globl sym_2_678
+sym_2_678: la $2, sym_2_678
+.globl sym_2_679
+sym_2_679: la $2, sym_2_679
+.globl sym_2_680
+sym_2_680: la $2, sym_2_680
+.globl sym_2_681
+sym_2_681: la $2, sym_2_681
+.globl sym_2_682
+sym_2_682: la $2, sym_2_682
+.globl sym_2_683
+sym_2_683: la $2, sym_2_683
+.globl sym_2_684
+sym_2_684: la $2, sym_2_684
+.globl sym_2_685
+sym_2_685: la $2, sym_2_685
+.globl sym_2_686
+sym_2_686: la $2, sym_2_686
+.globl sym_2_687
+sym_2_687: la $2, sym_2_687
+.globl sym_2_688
+sym_2_688: la $2, sym_2_688
+.globl sym_2_689
+sym_2_689: la $2, sym_2_689
+.globl sym_2_690
+sym_2_690: la $2, sym_2_690
+.globl sym_2_691
+sym_2_691: la $2, sym_2_691
+.globl sym_2_692
+sym_2_692: la $2, sym_2_692
+.globl sym_2_693
+sym_2_693: la $2, sym_2_693
+.globl sym_2_694
+sym_2_694: la $2, sym_2_694
+.globl sym_2_695
+sym_2_695: la $2, sym_2_695
+.globl sym_2_696
+sym_2_696: la $2, sym_2_696
+.globl sym_2_697
+sym_2_697: la $2, sym_2_697
+.globl sym_2_698
+sym_2_698: la $2, sym_2_698
+.globl sym_2_699
+sym_2_699: la $2, sym_2_699
+.globl sym_2_700
+sym_2_700: la $2, sym_2_700
+.globl sym_2_701
+sym_2_701: la $2, sym_2_701
+.globl sym_2_702
+sym_2_702: la $2, sym_2_702
+.globl sym_2_703
+sym_2_703: la $2, sym_2_703
+.globl sym_2_704
+sym_2_704: la $2, sym_2_704
+.globl sym_2_705
+sym_2_705: la $2, sym_2_705
+.globl sym_2_706
+sym_2_706: la $2, sym_2_706
+.globl sym_2_707
+sym_2_707: la $2, sym_2_707
+.globl sym_2_708
+sym_2_708: la $2, sym_2_708
+.globl sym_2_709
+sym_2_709: la $2, sym_2_709
+.globl sym_2_710
+sym_2_710: la $2, sym_2_710
+.globl sym_2_711
+sym_2_711: la $2, sym_2_711
+.globl sym_2_712
+sym_2_712: la $2, sym_2_712
+.globl sym_2_713
+sym_2_713: la $2, sym_2_713
+.globl sym_2_714
+sym_2_714: la $2, sym_2_714
+.globl sym_2_715
+sym_2_715: la $2, sym_2_715
+.globl sym_2_716
+sym_2_716: la $2, sym_2_716
+.globl sym_2_717
+sym_2_717: la $2, sym_2_717
+.globl sym_2_718
+sym_2_718: la $2, sym_2_718
+.globl sym_2_719
+sym_2_719: la $2, sym_2_719
+.globl sym_2_720
+sym_2_720: la $2, sym_2_720
+.globl sym_2_721
+sym_2_721: la $2, sym_2_721
+.globl sym_2_722
+sym_2_722: la $2, sym_2_722
+.globl sym_2_723
+sym_2_723: la $2, sym_2_723
+.globl sym_2_724
+sym_2_724: la $2, sym_2_724
+.globl sym_2_725
+sym_2_725: la $2, sym_2_725
+.globl sym_2_726
+sym_2_726: la $2, sym_2_726
+.globl sym_2_727
+sym_2_727: la $2, sym_2_727
+.globl sym_2_728
+sym_2_728: la $2, sym_2_728
+.globl sym_2_729
+sym_2_729: la $2, sym_2_729
+.globl sym_2_730
+sym_2_730: la $2, sym_2_730
+.globl sym_2_731
+sym_2_731: la $2, sym_2_731
+.globl sym_2_732
+sym_2_732: la $2, sym_2_732
+.globl sym_2_733
+sym_2_733: la $2, sym_2_733
+.globl sym_2_734
+sym_2_734: la $2, sym_2_734
+.globl sym_2_735
+sym_2_735: la $2, sym_2_735
+.globl sym_2_736
+sym_2_736: la $2, sym_2_736
+.globl sym_2_737
+sym_2_737: la $2, sym_2_737
+.globl sym_2_738
+sym_2_738: la $2, sym_2_738
+.globl sym_2_739
+sym_2_739: la $2, sym_2_739
+.globl sym_2_740
+sym_2_740: la $2, sym_2_740
+.globl sym_2_741
+sym_2_741: la $2, sym_2_741
+.globl sym_2_742
+sym_2_742: la $2, sym_2_742
+.globl sym_2_743
+sym_2_743: la $2, sym_2_743
+.globl sym_2_744
+sym_2_744: la $2, sym_2_744
+.globl sym_2_745
+sym_2_745: la $2, sym_2_745
+.globl sym_2_746
+sym_2_746: la $2, sym_2_746
+.globl sym_2_747
+sym_2_747: la $2, sym_2_747
+.globl sym_2_748
+sym_2_748: la $2, sym_2_748
+.globl sym_2_749
+sym_2_749: la $2, sym_2_749
+.globl sym_2_750
+sym_2_750: la $2, sym_2_750
+.globl sym_2_751
+sym_2_751: la $2, sym_2_751
+.globl sym_2_752
+sym_2_752: la $2, sym_2_752
+.globl sym_2_753
+sym_2_753: la $2, sym_2_753
+.globl sym_2_754
+sym_2_754: la $2, sym_2_754
+.globl sym_2_755
+sym_2_755: la $2, sym_2_755
+.globl sym_2_756
+sym_2_756: la $2, sym_2_756
+.globl sym_2_757
+sym_2_757: la $2, sym_2_757
+.globl sym_2_758
+sym_2_758: la $2, sym_2_758
+.globl sym_2_759
+sym_2_759: la $2, sym_2_759
+.globl sym_2_760
+sym_2_760: la $2, sym_2_760
+.globl sym_2_761
+sym_2_761: la $2, sym_2_761
+.globl sym_2_762
+sym_2_762: la $2, sym_2_762
+.globl sym_2_763
+sym_2_763: la $2, sym_2_763
+.globl sym_2_764
+sym_2_764: la $2, sym_2_764
+.globl sym_2_765
+sym_2_765: la $2, sym_2_765
+.globl sym_2_766
+sym_2_766: la $2, sym_2_766
+.globl sym_2_767
+sym_2_767: la $2, sym_2_767
+.globl sym_2_768
+sym_2_768: la $2, sym_2_768
+.globl sym_2_769
+sym_2_769: la $2, sym_2_769
+.globl sym_2_770
+sym_2_770: la $2, sym_2_770
+.globl sym_2_771
+sym_2_771: la $2, sym_2_771
+.globl sym_2_772
+sym_2_772: la $2, sym_2_772
+.globl sym_2_773
+sym_2_773: la $2, sym_2_773
+.globl sym_2_774
+sym_2_774: la $2, sym_2_774
+.globl sym_2_775
+sym_2_775: la $2, sym_2_775
+.globl sym_2_776
+sym_2_776: la $2, sym_2_776
+.globl sym_2_777
+sym_2_777: la $2, sym_2_777
+.globl sym_2_778
+sym_2_778: la $2, sym_2_778
+.globl sym_2_779
+sym_2_779: la $2, sym_2_779
+.globl sym_2_780
+sym_2_780: la $2, sym_2_780
+.globl sym_2_781
+sym_2_781: la $2, sym_2_781
+.globl sym_2_782
+sym_2_782: la $2, sym_2_782
+.globl sym_2_783
+sym_2_783: la $2, sym_2_783
+.globl sym_2_784
+sym_2_784: la $2, sym_2_784
+.globl sym_2_785
+sym_2_785: la $2, sym_2_785
+.globl sym_2_786
+sym_2_786: la $2, sym_2_786
+.globl sym_2_787
+sym_2_787: la $2, sym_2_787
+.globl sym_2_788
+sym_2_788: la $2, sym_2_788
+.globl sym_2_789
+sym_2_789: la $2, sym_2_789
+.globl sym_2_790
+sym_2_790: la $2, sym_2_790
+.globl sym_2_791
+sym_2_791: la $2, sym_2_791
+.globl sym_2_792
+sym_2_792: la $2, sym_2_792
+.globl sym_2_793
+sym_2_793: la $2, sym_2_793
+.globl sym_2_794
+sym_2_794: la $2, sym_2_794
+.globl sym_2_795
+sym_2_795: la $2, sym_2_795
+.globl sym_2_796
+sym_2_796: la $2, sym_2_796
+.globl sym_2_797
+sym_2_797: la $2, sym_2_797
+.globl sym_2_798
+sym_2_798: la $2, sym_2_798
+.globl sym_2_799
+sym_2_799: la $2, sym_2_799
+.globl sym_2_800
+sym_2_800: la $2, sym_2_800
+.globl sym_2_801
+sym_2_801: la $2, sym_2_801
+.globl sym_2_802
+sym_2_802: la $2, sym_2_802
+.globl sym_2_803
+sym_2_803: la $2, sym_2_803
+.globl sym_2_804
+sym_2_804: la $2, sym_2_804
+.globl sym_2_805
+sym_2_805: la $2, sym_2_805
+.globl sym_2_806
+sym_2_806: la $2, sym_2_806
+.globl sym_2_807
+sym_2_807: la $2, sym_2_807
+.globl sym_2_808
+sym_2_808: la $2, sym_2_808
+.globl sym_2_809
+sym_2_809: la $2, sym_2_809
+.globl sym_2_810
+sym_2_810: la $2, sym_2_810
+.globl sym_2_811
+sym_2_811: la $2, sym_2_811
+.globl sym_2_812
+sym_2_812: la $2, sym_2_812
+.globl sym_2_813
+sym_2_813: la $2, sym_2_813
+.globl sym_2_814
+sym_2_814: la $2, sym_2_814
+.globl sym_2_815
+sym_2_815: la $2, sym_2_815
+.globl sym_2_816
+sym_2_816: la $2, sym_2_816
+.globl sym_2_817
+sym_2_817: la $2, sym_2_817
+.globl sym_2_818
+sym_2_818: la $2, sym_2_818
+.globl sym_2_819
+sym_2_819: la $2, sym_2_819
+.globl sym_2_820
+sym_2_820: la $2, sym_2_820
+.globl sym_2_821
+sym_2_821: la $2, sym_2_821
+.globl sym_2_822
+sym_2_822: la $2, sym_2_822
+.globl sym_2_823
+sym_2_823: la $2, sym_2_823
+.globl sym_2_824
+sym_2_824: la $2, sym_2_824
+.globl sym_2_825
+sym_2_825: la $2, sym_2_825
+.globl sym_2_826
+sym_2_826: la $2, sym_2_826
+.globl sym_2_827
+sym_2_827: la $2, sym_2_827
+.globl sym_2_828
+sym_2_828: la $2, sym_2_828
+.globl sym_2_829
+sym_2_829: la $2, sym_2_829
+.globl sym_2_830
+sym_2_830: la $2, sym_2_830
+.globl sym_2_831
+sym_2_831: la $2, sym_2_831
+.globl sym_2_832
+sym_2_832: la $2, sym_2_832
+.globl sym_2_833
+sym_2_833: la $2, sym_2_833
+.globl sym_2_834
+sym_2_834: la $2, sym_2_834
+.globl sym_2_835
+sym_2_835: la $2, sym_2_835
+.globl sym_2_836
+sym_2_836: la $2, sym_2_836
+.globl sym_2_837
+sym_2_837: la $2, sym_2_837
+.globl sym_2_838
+sym_2_838: la $2, sym_2_838
+.globl sym_2_839
+sym_2_839: la $2, sym_2_839
+.globl sym_2_840
+sym_2_840: la $2, sym_2_840
+.globl sym_2_841
+sym_2_841: la $2, sym_2_841
+.globl sym_2_842
+sym_2_842: la $2, sym_2_842
+.globl sym_2_843
+sym_2_843: la $2, sym_2_843
+.globl sym_2_844
+sym_2_844: la $2, sym_2_844
+.globl sym_2_845
+sym_2_845: la $2, sym_2_845
+.globl sym_2_846
+sym_2_846: la $2, sym_2_846
+.globl sym_2_847
+sym_2_847: la $2, sym_2_847
+.globl sym_2_848
+sym_2_848: la $2, sym_2_848
+.globl sym_2_849
+sym_2_849: la $2, sym_2_849
+.globl sym_2_850
+sym_2_850: la $2, sym_2_850
+.globl sym_2_851
+sym_2_851: la $2, sym_2_851
+.globl sym_2_852
+sym_2_852: la $2, sym_2_852
+.globl sym_2_853
+sym_2_853: la $2, sym_2_853
+.globl sym_2_854
+sym_2_854: la $2, sym_2_854
+.globl sym_2_855
+sym_2_855: la $2, sym_2_855
+.globl sym_2_856
+sym_2_856: la $2, sym_2_856
+.globl sym_2_857
+sym_2_857: la $2, sym_2_857
+.globl sym_2_858
+sym_2_858: la $2, sym_2_858
+.globl sym_2_859
+sym_2_859: la $2, sym_2_859
+.globl sym_2_860
+sym_2_860: la $2, sym_2_860
+.globl sym_2_861
+sym_2_861: la $2, sym_2_861
+.globl sym_2_862
+sym_2_862: la $2, sym_2_862
+.globl sym_2_863
+sym_2_863: la $2, sym_2_863
+.globl sym_2_864
+sym_2_864: la $2, sym_2_864
+.globl sym_2_865
+sym_2_865: la $2, sym_2_865
+.globl sym_2_866
+sym_2_866: la $2, sym_2_866
+.globl sym_2_867
+sym_2_867: la $2, sym_2_867
+.globl sym_2_868
+sym_2_868: la $2, sym_2_868
+.globl sym_2_869
+sym_2_869: la $2, sym_2_869
+.globl sym_2_870
+sym_2_870: la $2, sym_2_870
+.globl sym_2_871
+sym_2_871: la $2, sym_2_871
+.globl sym_2_872
+sym_2_872: la $2, sym_2_872
+.globl sym_2_873
+sym_2_873: la $2, sym_2_873
+.globl sym_2_874
+sym_2_874: la $2, sym_2_874
+.globl sym_2_875
+sym_2_875: la $2, sym_2_875
+.globl sym_2_876
+sym_2_876: la $2, sym_2_876
+.globl sym_2_877
+sym_2_877: la $2, sym_2_877
+.globl sym_2_878
+sym_2_878: la $2, sym_2_878
+.globl sym_2_879
+sym_2_879: la $2, sym_2_879
+.globl sym_2_880
+sym_2_880: la $2, sym_2_880
+.globl sym_2_881
+sym_2_881: la $2, sym_2_881
+.globl sym_2_882
+sym_2_882: la $2, sym_2_882
+.globl sym_2_883
+sym_2_883: la $2, sym_2_883
+.globl sym_2_884
+sym_2_884: la $2, sym_2_884
+.globl sym_2_885
+sym_2_885: la $2, sym_2_885
+.globl sym_2_886
+sym_2_886: la $2, sym_2_886
+.globl sym_2_887
+sym_2_887: la $2, sym_2_887
+.globl sym_2_888
+sym_2_888: la $2, sym_2_888
+.globl sym_2_889
+sym_2_889: la $2, sym_2_889
+.globl sym_2_890
+sym_2_890: la $2, sym_2_890
+.globl sym_2_891
+sym_2_891: la $2, sym_2_891
+.globl sym_2_892
+sym_2_892: la $2, sym_2_892
+.globl sym_2_893
+sym_2_893: la $2, sym_2_893
+.globl sym_2_894
+sym_2_894: la $2, sym_2_894
+.globl sym_2_895
+sym_2_895: la $2, sym_2_895
+.globl sym_2_896
+sym_2_896: la $2, sym_2_896
+.globl sym_2_897
+sym_2_897: la $2, sym_2_897
+.globl sym_2_898
+sym_2_898: la $2, sym_2_898
+.globl sym_2_899
+sym_2_899: la $2, sym_2_899
+.globl sym_2_900
+sym_2_900: la $2, sym_2_900
+.globl sym_2_901
+sym_2_901: la $2, sym_2_901
+.globl sym_2_902
+sym_2_902: la $2, sym_2_902
+.globl sym_2_903
+sym_2_903: la $2, sym_2_903
+.globl sym_2_904
+sym_2_904: la $2, sym_2_904
+.globl sym_2_905
+sym_2_905: la $2, sym_2_905
+.globl sym_2_906
+sym_2_906: la $2, sym_2_906
+.globl sym_2_907
+sym_2_907: la $2, sym_2_907
+.globl sym_2_908
+sym_2_908: la $2, sym_2_908
+.globl sym_2_909
+sym_2_909: la $2, sym_2_909
+.globl sym_2_910
+sym_2_910: la $2, sym_2_910
+.globl sym_2_911
+sym_2_911: la $2, sym_2_911
+.globl sym_2_912
+sym_2_912: la $2, sym_2_912
+.globl sym_2_913
+sym_2_913: la $2, sym_2_913
+.globl sym_2_914
+sym_2_914: la $2, sym_2_914
+.globl sym_2_915
+sym_2_915: la $2, sym_2_915
+.globl sym_2_916
+sym_2_916: la $2, sym_2_916
+.globl sym_2_917
+sym_2_917: la $2, sym_2_917
+.globl sym_2_918
+sym_2_918: la $2, sym_2_918
+.globl sym_2_919
+sym_2_919: la $2, sym_2_919
+.globl sym_2_920
+sym_2_920: la $2, sym_2_920
+.globl sym_2_921
+sym_2_921: la $2, sym_2_921
+.globl sym_2_922
+sym_2_922: la $2, sym_2_922
+.globl sym_2_923
+sym_2_923: la $2, sym_2_923
+.globl sym_2_924
+sym_2_924: la $2, sym_2_924
+.globl sym_2_925
+sym_2_925: la $2, sym_2_925
+.globl sym_2_926
+sym_2_926: la $2, sym_2_926
+.globl sym_2_927
+sym_2_927: la $2, sym_2_927
+.globl sym_2_928
+sym_2_928: la $2, sym_2_928
+.globl sym_2_929
+sym_2_929: la $2, sym_2_929
+.globl sym_2_930
+sym_2_930: la $2, sym_2_930
+.globl sym_2_931
+sym_2_931: la $2, sym_2_931
+.globl sym_2_932
+sym_2_932: la $2, sym_2_932
+.globl sym_2_933
+sym_2_933: la $2, sym_2_933
+.globl sym_2_934
+sym_2_934: la $2, sym_2_934
+.globl sym_2_935
+sym_2_935: la $2, sym_2_935
+.globl sym_2_936
+sym_2_936: la $2, sym_2_936
+.globl sym_2_937
+sym_2_937: la $2, sym_2_937
+.globl sym_2_938
+sym_2_938: la $2, sym_2_938
+.globl sym_2_939
+sym_2_939: la $2, sym_2_939
+.globl sym_2_940
+sym_2_940: la $2, sym_2_940
+.globl sym_2_941
+sym_2_941: la $2, sym_2_941
+.globl sym_2_942
+sym_2_942: la $2, sym_2_942
+.globl sym_2_943
+sym_2_943: la $2, sym_2_943
+.globl sym_2_944
+sym_2_944: la $2, sym_2_944
+.globl sym_2_945
+sym_2_945: la $2, sym_2_945
+.globl sym_2_946
+sym_2_946: la $2, sym_2_946
+.globl sym_2_947
+sym_2_947: la $2, sym_2_947
+.globl sym_2_948
+sym_2_948: la $2, sym_2_948
+.globl sym_2_949
+sym_2_949: la $2, sym_2_949
+.globl sym_2_950
+sym_2_950: la $2, sym_2_950
+.globl sym_2_951
+sym_2_951: la $2, sym_2_951
+.globl sym_2_952
+sym_2_952: la $2, sym_2_952
+.globl sym_2_953
+sym_2_953: la $2, sym_2_953
+.globl sym_2_954
+sym_2_954: la $2, sym_2_954
+.globl sym_2_955
+sym_2_955: la $2, sym_2_955
+.globl sym_2_956
+sym_2_956: la $2, sym_2_956
+.globl sym_2_957
+sym_2_957: la $2, sym_2_957
+.globl sym_2_958
+sym_2_958: la $2, sym_2_958
+.globl sym_2_959
+sym_2_959: la $2, sym_2_959
+.globl sym_2_960
+sym_2_960: la $2, sym_2_960
+.globl sym_2_961
+sym_2_961: la $2, sym_2_961
+.globl sym_2_962
+sym_2_962: la $2, sym_2_962
+.globl sym_2_963
+sym_2_963: la $2, sym_2_963
+.globl sym_2_964
+sym_2_964: la $2, sym_2_964
+.globl sym_2_965
+sym_2_965: la $2, sym_2_965
+.globl sym_2_966
+sym_2_966: la $2, sym_2_966
+.globl sym_2_967
+sym_2_967: la $2, sym_2_967
+.globl sym_2_968
+sym_2_968: la $2, sym_2_968
+.globl sym_2_969
+sym_2_969: la $2, sym_2_969
+.globl sym_2_970
+sym_2_970: la $2, sym_2_970
+.globl sym_2_971
+sym_2_971: la $2, sym_2_971
+.globl sym_2_972
+sym_2_972: la $2, sym_2_972
+.globl sym_2_973
+sym_2_973: la $2, sym_2_973
+.globl sym_2_974
+sym_2_974: la $2, sym_2_974
+.globl sym_2_975
+sym_2_975: la $2, sym_2_975
+.globl sym_2_976
+sym_2_976: la $2, sym_2_976
+.globl sym_2_977
+sym_2_977: la $2, sym_2_977
+.globl sym_2_978
+sym_2_978: la $2, sym_2_978
+.globl sym_2_979
+sym_2_979: la $2, sym_2_979
+.globl sym_2_980
+sym_2_980: la $2, sym_2_980
+.globl sym_2_981
+sym_2_981: la $2, sym_2_981
+.globl sym_2_982
+sym_2_982: la $2, sym_2_982
+.globl sym_2_983
+sym_2_983: la $2, sym_2_983
+.globl sym_2_984
+sym_2_984: la $2, sym_2_984
+.globl sym_2_985
+sym_2_985: la $2, sym_2_985
+.globl sym_2_986
+sym_2_986: la $2, sym_2_986
+.globl sym_2_987
+sym_2_987: la $2, sym_2_987
+.globl sym_2_988
+sym_2_988: la $2, sym_2_988
+.globl sym_2_989
+sym_2_989: la $2, sym_2_989
+.globl sym_2_990
+sym_2_990: la $2, sym_2_990
+.globl sym_2_991
+sym_2_991: la $2, sym_2_991
+.globl sym_2_992
+sym_2_992: la $2, sym_2_992
+.globl sym_2_993
+sym_2_993: la $2, sym_2_993
+.globl sym_2_994
+sym_2_994: la $2, sym_2_994
+.globl sym_2_995
+sym_2_995: la $2, sym_2_995
+.globl sym_2_996
+sym_2_996: la $2, sym_2_996
+.globl sym_2_997
+sym_2_997: la $2, sym_2_997
+.globl sym_2_998
+sym_2_998: la $2, sym_2_998
+.globl sym_2_999
+sym_2_999: la $2, sym_2_999
+.globl sym_2_1000
+sym_2_1000: la $2, sym_2_1000
+.globl sym_2_1001
+sym_2_1001: la $2, sym_2_1001
+.globl sym_2_1002
+sym_2_1002: la $2, sym_2_1002
+.globl sym_2_1003
+sym_2_1003: la $2, sym_2_1003
+.globl sym_2_1004
+sym_2_1004: la $2, sym_2_1004
+.globl sym_2_1005
+sym_2_1005: la $2, sym_2_1005
+.globl sym_2_1006
+sym_2_1006: la $2, sym_2_1006
+.globl sym_2_1007
+sym_2_1007: la $2, sym_2_1007
+.globl sym_2_1008
+sym_2_1008: la $2, sym_2_1008
+.globl sym_2_1009
+sym_2_1009: la $2, sym_2_1009
+.globl sym_2_1010
+sym_2_1010: la $2, sym_2_1010
+.globl sym_2_1011
+sym_2_1011: la $2, sym_2_1011
+.globl sym_2_1012
+sym_2_1012: la $2, sym_2_1012
+.globl sym_2_1013
+sym_2_1013: la $2, sym_2_1013
+.globl sym_2_1014
+sym_2_1014: la $2, sym_2_1014
+.globl sym_2_1015
+sym_2_1015: la $2, sym_2_1015
+.globl sym_2_1016
+sym_2_1016: la $2, sym_2_1016
+.globl sym_2_1017
+sym_2_1017: la $2, sym_2_1017
+.globl sym_2_1018
+sym_2_1018: la $2, sym_2_1018
+.globl sym_2_1019
+sym_2_1019: la $2, sym_2_1019
+.globl sym_2_1020
+sym_2_1020: la $2, sym_2_1020
+.globl sym_2_1021
+sym_2_1021: la $2, sym_2_1021
+.globl sym_2_1022
+sym_2_1022: la $2, sym_2_1022
+.globl sym_2_1023
+sym_2_1023: la $2, sym_2_1023
+.globl sym_2_1024
+sym_2_1024: la $2, sym_2_1024
+.globl sym_2_1025
+sym_2_1025: la $2, sym_2_1025
+.globl sym_2_1026
+sym_2_1026: la $2, sym_2_1026
+.globl sym_2_1027
+sym_2_1027: la $2, sym_2_1027
+.globl sym_2_1028
+sym_2_1028: la $2, sym_2_1028
+.globl sym_2_1029
+sym_2_1029: la $2, sym_2_1029
+.globl sym_2_1030
+sym_2_1030: la $2, sym_2_1030
+.globl sym_2_1031
+sym_2_1031: la $2, sym_2_1031
+.globl sym_2_1032
+sym_2_1032: la $2, sym_2_1032
+.globl sym_2_1033
+sym_2_1033: la $2, sym_2_1033
+.globl sym_2_1034
+sym_2_1034: la $2, sym_2_1034
+.globl sym_2_1035
+sym_2_1035: la $2, sym_2_1035
+.globl sym_2_1036
+sym_2_1036: la $2, sym_2_1036
+.globl sym_2_1037
+sym_2_1037: la $2, sym_2_1037
+.globl sym_2_1038
+sym_2_1038: la $2, sym_2_1038
+.globl sym_2_1039
+sym_2_1039: la $2, sym_2_1039
+.globl sym_2_1040
+sym_2_1040: la $2, sym_2_1040
+.globl sym_2_1041
+sym_2_1041: la $2, sym_2_1041
+.globl sym_2_1042
+sym_2_1042: la $2, sym_2_1042
+.globl sym_2_1043
+sym_2_1043: la $2, sym_2_1043
+.globl sym_2_1044
+sym_2_1044: la $2, sym_2_1044
+.globl sym_2_1045
+sym_2_1045: la $2, sym_2_1045
+.globl sym_2_1046
+sym_2_1046: la $2, sym_2_1046
+.globl sym_2_1047
+sym_2_1047: la $2, sym_2_1047
+.globl sym_2_1048
+sym_2_1048: la $2, sym_2_1048
+.globl sym_2_1049
+sym_2_1049: la $2, sym_2_1049
+.globl sym_2_1050
+sym_2_1050: la $2, sym_2_1050
+.globl sym_2_1051
+sym_2_1051: la $2, sym_2_1051
+.globl sym_2_1052
+sym_2_1052: la $2, sym_2_1052
+.globl sym_2_1053
+sym_2_1053: la $2, sym_2_1053
+.globl sym_2_1054
+sym_2_1054: la $2, sym_2_1054
+.globl sym_2_1055
+sym_2_1055: la $2, sym_2_1055
+.globl sym_2_1056
+sym_2_1056: la $2, sym_2_1056
+.globl sym_2_1057
+sym_2_1057: la $2, sym_2_1057
+.globl sym_2_1058
+sym_2_1058: la $2, sym_2_1058
+.globl sym_2_1059
+sym_2_1059: la $2, sym_2_1059
+.globl sym_2_1060
+sym_2_1060: la $2, sym_2_1060
+.globl sym_2_1061
+sym_2_1061: la $2, sym_2_1061
+.globl sym_2_1062
+sym_2_1062: la $2, sym_2_1062
+.globl sym_2_1063
+sym_2_1063: la $2, sym_2_1063
+.globl sym_2_1064
+sym_2_1064: la $2, sym_2_1064
+.globl sym_2_1065
+sym_2_1065: la $2, sym_2_1065
+.globl sym_2_1066
+sym_2_1066: la $2, sym_2_1066
+.globl sym_2_1067
+sym_2_1067: la $2, sym_2_1067
+.globl sym_2_1068
+sym_2_1068: la $2, sym_2_1068
+.globl sym_2_1069
+sym_2_1069: la $2, sym_2_1069
+.globl sym_2_1070
+sym_2_1070: la $2, sym_2_1070
+.globl sym_2_1071
+sym_2_1071: la $2, sym_2_1071
+.globl sym_2_1072
+sym_2_1072: la $2, sym_2_1072
+.globl sym_2_1073
+sym_2_1073: la $2, sym_2_1073
+.globl sym_2_1074
+sym_2_1074: la $2, sym_2_1074
+.globl sym_2_1075
+sym_2_1075: la $2, sym_2_1075
+.globl sym_2_1076
+sym_2_1076: la $2, sym_2_1076
+.globl sym_2_1077
+sym_2_1077: la $2, sym_2_1077
+.globl sym_2_1078
+sym_2_1078: la $2, sym_2_1078
+.globl sym_2_1079
+sym_2_1079: la $2, sym_2_1079
+.globl sym_2_1080
+sym_2_1080: la $2, sym_2_1080
+.globl sym_2_1081
+sym_2_1081: la $2, sym_2_1081
+.globl sym_2_1082
+sym_2_1082: la $2, sym_2_1082
+.globl sym_2_1083
+sym_2_1083: la $2, sym_2_1083
+.globl sym_2_1084
+sym_2_1084: la $2, sym_2_1084
+.globl sym_2_1085
+sym_2_1085: la $2, sym_2_1085
+.globl sym_2_1086
+sym_2_1086: la $2, sym_2_1086
+.globl sym_2_1087
+sym_2_1087: la $2, sym_2_1087
+.globl sym_2_1088
+sym_2_1088: la $2, sym_2_1088
+.globl sym_2_1089
+sym_2_1089: la $2, sym_2_1089
+.globl sym_2_1090
+sym_2_1090: la $2, sym_2_1090
+.globl sym_2_1091
+sym_2_1091: la $2, sym_2_1091
+.globl sym_2_1092
+sym_2_1092: la $2, sym_2_1092
+.globl sym_2_1093
+sym_2_1093: la $2, sym_2_1093
+.globl sym_2_1094
+sym_2_1094: la $2, sym_2_1094
+.globl sym_2_1095
+sym_2_1095: la $2, sym_2_1095
+.globl sym_2_1096
+sym_2_1096: la $2, sym_2_1096
+.globl sym_2_1097
+sym_2_1097: la $2, sym_2_1097
+.globl sym_2_1098
+sym_2_1098: la $2, sym_2_1098
+.globl sym_2_1099
+sym_2_1099: la $2, sym_2_1099
+.globl sym_2_1100
+sym_2_1100: la $2, sym_2_1100
+.globl sym_2_1101
+sym_2_1101: la $2, sym_2_1101
+.globl sym_2_1102
+sym_2_1102: la $2, sym_2_1102
+.globl sym_2_1103
+sym_2_1103: la $2, sym_2_1103
+.globl sym_2_1104
+sym_2_1104: la $2, sym_2_1104
+.globl sym_2_1105
+sym_2_1105: la $2, sym_2_1105
+.globl sym_2_1106
+sym_2_1106: la $2, sym_2_1106
+.globl sym_2_1107
+sym_2_1107: la $2, sym_2_1107
+.globl sym_2_1108
+sym_2_1108: la $2, sym_2_1108
+.globl sym_2_1109
+sym_2_1109: la $2, sym_2_1109
+.globl sym_2_1110
+sym_2_1110: la $2, sym_2_1110
+.globl sym_2_1111
+sym_2_1111: la $2, sym_2_1111
+.globl sym_2_1112
+sym_2_1112: la $2, sym_2_1112
+.globl sym_2_1113
+sym_2_1113: la $2, sym_2_1113
+.globl sym_2_1114
+sym_2_1114: la $2, sym_2_1114
+.globl sym_2_1115
+sym_2_1115: la $2, sym_2_1115
+.globl sym_2_1116
+sym_2_1116: la $2, sym_2_1116
+.globl sym_2_1117
+sym_2_1117: la $2, sym_2_1117
+.globl sym_2_1118
+sym_2_1118: la $2, sym_2_1118
+.globl sym_2_1119
+sym_2_1119: la $2, sym_2_1119
+.globl sym_2_1120
+sym_2_1120: la $2, sym_2_1120
+.globl sym_2_1121
+sym_2_1121: la $2, sym_2_1121
+.globl sym_2_1122
+sym_2_1122: la $2, sym_2_1122
+.globl sym_2_1123
+sym_2_1123: la $2, sym_2_1123
+.globl sym_2_1124
+sym_2_1124: la $2, sym_2_1124
+.globl sym_2_1125
+sym_2_1125: la $2, sym_2_1125
+.globl sym_2_1126
+sym_2_1126: la $2, sym_2_1126
+.globl sym_2_1127
+sym_2_1127: la $2, sym_2_1127
+.globl sym_2_1128
+sym_2_1128: la $2, sym_2_1128
+.globl sym_2_1129
+sym_2_1129: la $2, sym_2_1129
+.globl sym_2_1130
+sym_2_1130: la $2, sym_2_1130
+.globl sym_2_1131
+sym_2_1131: la $2, sym_2_1131
+.globl sym_2_1132
+sym_2_1132: la $2, sym_2_1132
+.globl sym_2_1133
+sym_2_1133: la $2, sym_2_1133
+.globl sym_2_1134
+sym_2_1134: la $2, sym_2_1134
+.globl sym_2_1135
+sym_2_1135: la $2, sym_2_1135
+.globl sym_2_1136
+sym_2_1136: la $2, sym_2_1136
+.globl sym_2_1137
+sym_2_1137: la $2, sym_2_1137
+.globl sym_2_1138
+sym_2_1138: la $2, sym_2_1138
+.globl sym_2_1139
+sym_2_1139: la $2, sym_2_1139
+.globl sym_2_1140
+sym_2_1140: la $2, sym_2_1140
+.globl sym_2_1141
+sym_2_1141: la $2, sym_2_1141
+.globl sym_2_1142
+sym_2_1142: la $2, sym_2_1142
+.globl sym_2_1143
+sym_2_1143: la $2, sym_2_1143
+.globl sym_2_1144
+sym_2_1144: la $2, sym_2_1144
+.globl sym_2_1145
+sym_2_1145: la $2, sym_2_1145
+.globl sym_2_1146
+sym_2_1146: la $2, sym_2_1146
+.globl sym_2_1147
+sym_2_1147: la $2, sym_2_1147
+.globl sym_2_1148
+sym_2_1148: la $2, sym_2_1148
+.globl sym_2_1149
+sym_2_1149: la $2, sym_2_1149
+.globl sym_2_1150
+sym_2_1150: la $2, sym_2_1150
+.globl sym_2_1151
+sym_2_1151: la $2, sym_2_1151
+.globl sym_2_1152
+sym_2_1152: la $2, sym_2_1152
+.globl sym_2_1153
+sym_2_1153: la $2, sym_2_1153
+.globl sym_2_1154
+sym_2_1154: la $2, sym_2_1154
+.globl sym_2_1155
+sym_2_1155: la $2, sym_2_1155
+.globl sym_2_1156
+sym_2_1156: la $2, sym_2_1156
+.globl sym_2_1157
+sym_2_1157: la $2, sym_2_1157
+.globl sym_2_1158
+sym_2_1158: la $2, sym_2_1158
+.globl sym_2_1159
+sym_2_1159: la $2, sym_2_1159
+.globl sym_2_1160
+sym_2_1160: la $2, sym_2_1160
+.globl sym_2_1161
+sym_2_1161: la $2, sym_2_1161
+.globl sym_2_1162
+sym_2_1162: la $2, sym_2_1162
+.globl sym_2_1163
+sym_2_1163: la $2, sym_2_1163
+.globl sym_2_1164
+sym_2_1164: la $2, sym_2_1164
+.globl sym_2_1165
+sym_2_1165: la $2, sym_2_1165
+.globl sym_2_1166
+sym_2_1166: la $2, sym_2_1166
+.globl sym_2_1167
+sym_2_1167: la $2, sym_2_1167
+.globl sym_2_1168
+sym_2_1168: la $2, sym_2_1168
+.globl sym_2_1169
+sym_2_1169: la $2, sym_2_1169
+.globl sym_2_1170
+sym_2_1170: la $2, sym_2_1170
+.globl sym_2_1171
+sym_2_1171: la $2, sym_2_1171
+.globl sym_2_1172
+sym_2_1172: la $2, sym_2_1172
+.globl sym_2_1173
+sym_2_1173: la $2, sym_2_1173
+.globl sym_2_1174
+sym_2_1174: la $2, sym_2_1174
+.globl sym_2_1175
+sym_2_1175: la $2, sym_2_1175
+.globl sym_2_1176
+sym_2_1176: la $2, sym_2_1176
+.globl sym_2_1177
+sym_2_1177: la $2, sym_2_1177
+.globl sym_2_1178
+sym_2_1178: la $2, sym_2_1178
+.globl sym_2_1179
+sym_2_1179: la $2, sym_2_1179
+.globl sym_2_1180
+sym_2_1180: la $2, sym_2_1180
+.globl sym_2_1181
+sym_2_1181: la $2, sym_2_1181
+.globl sym_2_1182
+sym_2_1182: la $2, sym_2_1182
+.globl sym_2_1183
+sym_2_1183: la $2, sym_2_1183
+.globl sym_2_1184
+sym_2_1184: la $2, sym_2_1184
+.globl sym_2_1185
+sym_2_1185: la $2, sym_2_1185
+.globl sym_2_1186
+sym_2_1186: la $2, sym_2_1186
+.globl sym_2_1187
+sym_2_1187: la $2, sym_2_1187
+.globl sym_2_1188
+sym_2_1188: la $2, sym_2_1188
+.globl sym_2_1189
+sym_2_1189: la $2, sym_2_1189
+.globl sym_2_1190
+sym_2_1190: la $2, sym_2_1190
+.globl sym_2_1191
+sym_2_1191: la $2, sym_2_1191
+.globl sym_2_1192
+sym_2_1192: la $2, sym_2_1192
+.globl sym_2_1193
+sym_2_1193: la $2, sym_2_1193
+.globl sym_2_1194
+sym_2_1194: la $2, sym_2_1194
+.globl sym_2_1195
+sym_2_1195: la $2, sym_2_1195
+.globl sym_2_1196
+sym_2_1196: la $2, sym_2_1196
+.globl sym_2_1197
+sym_2_1197: la $2, sym_2_1197
+.globl sym_2_1198
+sym_2_1198: la $2, sym_2_1198
+.globl sym_2_1199
+sym_2_1199: la $2, sym_2_1199
+.globl sym_2_1200
+sym_2_1200: la $2, sym_2_1200
+.globl sym_2_1201
+sym_2_1201: la $2, sym_2_1201
+.globl sym_2_1202
+sym_2_1202: la $2, sym_2_1202
+.globl sym_2_1203
+sym_2_1203: la $2, sym_2_1203
+.globl sym_2_1204
+sym_2_1204: la $2, sym_2_1204
+.globl sym_2_1205
+sym_2_1205: la $2, sym_2_1205
+.globl sym_2_1206
+sym_2_1206: la $2, sym_2_1206
+.globl sym_2_1207
+sym_2_1207: la $2, sym_2_1207
+.globl sym_2_1208
+sym_2_1208: la $2, sym_2_1208
+.globl sym_2_1209
+sym_2_1209: la $2, sym_2_1209
+.globl sym_2_1210
+sym_2_1210: la $2, sym_2_1210
+.globl sym_2_1211
+sym_2_1211: la $2, sym_2_1211
+.globl sym_2_1212
+sym_2_1212: la $2, sym_2_1212
+.globl sym_2_1213
+sym_2_1213: la $2, sym_2_1213
+.globl sym_2_1214
+sym_2_1214: la $2, sym_2_1214
+.globl sym_2_1215
+sym_2_1215: la $2, sym_2_1215
+.globl sym_2_1216
+sym_2_1216: la $2, sym_2_1216
+.globl sym_2_1217
+sym_2_1217: la $2, sym_2_1217
+.globl sym_2_1218
+sym_2_1218: la $2, sym_2_1218
+.globl sym_2_1219
+sym_2_1219: la $2, sym_2_1219
+.globl sym_2_1220
+sym_2_1220: la $2, sym_2_1220
+.globl sym_2_1221
+sym_2_1221: la $2, sym_2_1221
+.globl sym_2_1222
+sym_2_1222: la $2, sym_2_1222
+.globl sym_2_1223
+sym_2_1223: la $2, sym_2_1223
+.globl sym_2_1224
+sym_2_1224: la $2, sym_2_1224
+.globl sym_2_1225
+sym_2_1225: la $2, sym_2_1225
+.globl sym_2_1226
+sym_2_1226: la $2, sym_2_1226
+.globl sym_2_1227
+sym_2_1227: la $2, sym_2_1227
+.globl sym_2_1228
+sym_2_1228: la $2, sym_2_1228
+.globl sym_2_1229
+sym_2_1229: la $2, sym_2_1229
+.globl sym_2_1230
+sym_2_1230: la $2, sym_2_1230
+.globl sym_2_1231
+sym_2_1231: la $2, sym_2_1231
+.globl sym_2_1232
+sym_2_1232: la $2, sym_2_1232
+.globl sym_2_1233
+sym_2_1233: la $2, sym_2_1233
+.globl sym_2_1234
+sym_2_1234: la $2, sym_2_1234
+.globl sym_2_1235
+sym_2_1235: la $2, sym_2_1235
+.globl sym_2_1236
+sym_2_1236: la $2, sym_2_1236
+.globl sym_2_1237
+sym_2_1237: la $2, sym_2_1237
+.globl sym_2_1238
+sym_2_1238: la $2, sym_2_1238
+.globl sym_2_1239
+sym_2_1239: la $2, sym_2_1239
+.globl sym_2_1240
+sym_2_1240: la $2, sym_2_1240
+.globl sym_2_1241
+sym_2_1241: la $2, sym_2_1241
+.globl sym_2_1242
+sym_2_1242: la $2, sym_2_1242
+.globl sym_2_1243
+sym_2_1243: la $2, sym_2_1243
+.globl sym_2_1244
+sym_2_1244: la $2, sym_2_1244
+.globl sym_2_1245
+sym_2_1245: la $2, sym_2_1245
+.globl sym_2_1246
+sym_2_1246: la $2, sym_2_1246
+.globl sym_2_1247
+sym_2_1247: la $2, sym_2_1247
+.globl sym_2_1248
+sym_2_1248: la $2, sym_2_1248
+.globl sym_2_1249
+sym_2_1249: la $2, sym_2_1249
+.globl sym_2_1250
+sym_2_1250: la $2, sym_2_1250
+.globl sym_2_1251
+sym_2_1251: la $2, sym_2_1251
+.globl sym_2_1252
+sym_2_1252: la $2, sym_2_1252
+.globl sym_2_1253
+sym_2_1253: la $2, sym_2_1253
+.globl sym_2_1254
+sym_2_1254: la $2, sym_2_1254
+.globl sym_2_1255
+sym_2_1255: la $2, sym_2_1255
+.globl sym_2_1256
+sym_2_1256: la $2, sym_2_1256
+.globl sym_2_1257
+sym_2_1257: la $2, sym_2_1257
+.globl sym_2_1258
+sym_2_1258: la $2, sym_2_1258
+.globl sym_2_1259
+sym_2_1259: la $2, sym_2_1259
+.globl sym_2_1260
+sym_2_1260: la $2, sym_2_1260
+.globl sym_2_1261
+sym_2_1261: la $2, sym_2_1261
+.globl sym_2_1262
+sym_2_1262: la $2, sym_2_1262
+.globl sym_2_1263
+sym_2_1263: la $2, sym_2_1263
+.globl sym_2_1264
+sym_2_1264: la $2, sym_2_1264
+.globl sym_2_1265
+sym_2_1265: la $2, sym_2_1265
+.globl sym_2_1266
+sym_2_1266: la $2, sym_2_1266
+.globl sym_2_1267
+sym_2_1267: la $2, sym_2_1267
+.globl sym_2_1268
+sym_2_1268: la $2, sym_2_1268
+.globl sym_2_1269
+sym_2_1269: la $2, sym_2_1269
+.globl sym_2_1270
+sym_2_1270: la $2, sym_2_1270
+.globl sym_2_1271
+sym_2_1271: la $2, sym_2_1271
+.globl sym_2_1272
+sym_2_1272: la $2, sym_2_1272
+.globl sym_2_1273
+sym_2_1273: la $2, sym_2_1273
+.globl sym_2_1274
+sym_2_1274: la $2, sym_2_1274
+.globl sym_2_1275
+sym_2_1275: la $2, sym_2_1275
+.globl sym_2_1276
+sym_2_1276: la $2, sym_2_1276
+.globl sym_2_1277
+sym_2_1277: la $2, sym_2_1277
+.globl sym_2_1278
+sym_2_1278: la $2, sym_2_1278
+.globl sym_2_1279
+sym_2_1279: la $2, sym_2_1279
+.globl sym_2_1280
+sym_2_1280: la $2, sym_2_1280
+.globl sym_2_1281
+sym_2_1281: la $2, sym_2_1281
+.globl sym_2_1282
+sym_2_1282: la $2, sym_2_1282
+.globl sym_2_1283
+sym_2_1283: la $2, sym_2_1283
+.globl sym_2_1284
+sym_2_1284: la $2, sym_2_1284
+.globl sym_2_1285
+sym_2_1285: la $2, sym_2_1285
+.globl sym_2_1286
+sym_2_1286: la $2, sym_2_1286
+.globl sym_2_1287
+sym_2_1287: la $2, sym_2_1287
+.globl sym_2_1288
+sym_2_1288: la $2, sym_2_1288
+.globl sym_2_1289
+sym_2_1289: la $2, sym_2_1289
+.globl sym_2_1290
+sym_2_1290: la $2, sym_2_1290
+.globl sym_2_1291
+sym_2_1291: la $2, sym_2_1291
+.globl sym_2_1292
+sym_2_1292: la $2, sym_2_1292
+.globl sym_2_1293
+sym_2_1293: la $2, sym_2_1293
+.globl sym_2_1294
+sym_2_1294: la $2, sym_2_1294
+.globl sym_2_1295
+sym_2_1295: la $2, sym_2_1295
+.globl sym_2_1296
+sym_2_1296: la $2, sym_2_1296
+.globl sym_2_1297
+sym_2_1297: la $2, sym_2_1297
+.globl sym_2_1298
+sym_2_1298: la $2, sym_2_1298
+.globl sym_2_1299
+sym_2_1299: la $2, sym_2_1299
+.globl sym_2_1300
+sym_2_1300: la $2, sym_2_1300
+.globl sym_2_1301
+sym_2_1301: la $2, sym_2_1301
+.globl sym_2_1302
+sym_2_1302: la $2, sym_2_1302
+.globl sym_2_1303
+sym_2_1303: la $2, sym_2_1303
+.globl sym_2_1304
+sym_2_1304: la $2, sym_2_1304
+.globl sym_2_1305
+sym_2_1305: la $2, sym_2_1305
+.globl sym_2_1306
+sym_2_1306: la $2, sym_2_1306
+.globl sym_2_1307
+sym_2_1307: la $2, sym_2_1307
+.globl sym_2_1308
+sym_2_1308: la $2, sym_2_1308
+.globl sym_2_1309
+sym_2_1309: la $2, sym_2_1309
+.globl sym_2_1310
+sym_2_1310: la $2, sym_2_1310
+.globl sym_2_1311
+sym_2_1311: la $2, sym_2_1311
+.globl sym_2_1312
+sym_2_1312: la $2, sym_2_1312
+.globl sym_2_1313
+sym_2_1313: la $2, sym_2_1313
+.globl sym_2_1314
+sym_2_1314: la $2, sym_2_1314
+.globl sym_2_1315
+sym_2_1315: la $2, sym_2_1315
+.globl sym_2_1316
+sym_2_1316: la $2, sym_2_1316
+.globl sym_2_1317
+sym_2_1317: la $2, sym_2_1317
+.globl sym_2_1318
+sym_2_1318: la $2, sym_2_1318
+.globl sym_2_1319
+sym_2_1319: la $2, sym_2_1319
+.globl sym_2_1320
+sym_2_1320: la $2, sym_2_1320
+.globl sym_2_1321
+sym_2_1321: la $2, sym_2_1321
+.globl sym_2_1322
+sym_2_1322: la $2, sym_2_1322
+.globl sym_2_1323
+sym_2_1323: la $2, sym_2_1323
+.globl sym_2_1324
+sym_2_1324: la $2, sym_2_1324
+.globl sym_2_1325
+sym_2_1325: la $2, sym_2_1325
+.globl sym_2_1326
+sym_2_1326: la $2, sym_2_1326
+.globl sym_2_1327
+sym_2_1327: la $2, sym_2_1327
+.globl sym_2_1328
+sym_2_1328: la $2, sym_2_1328
+.globl sym_2_1329
+sym_2_1329: la $2, sym_2_1329
+.globl sym_2_1330
+sym_2_1330: la $2, sym_2_1330
+.globl sym_2_1331
+sym_2_1331: la $2, sym_2_1331
+.globl sym_2_1332
+sym_2_1332: la $2, sym_2_1332
+.globl sym_2_1333
+sym_2_1333: la $2, sym_2_1333
+.globl sym_2_1334
+sym_2_1334: la $2, sym_2_1334
+.globl sym_2_1335
+sym_2_1335: la $2, sym_2_1335
+.globl sym_2_1336
+sym_2_1336: la $2, sym_2_1336
+.globl sym_2_1337
+sym_2_1337: la $2, sym_2_1337
+.globl sym_2_1338
+sym_2_1338: la $2, sym_2_1338
+.globl sym_2_1339
+sym_2_1339: la $2, sym_2_1339
+.globl sym_2_1340
+sym_2_1340: la $2, sym_2_1340
+.globl sym_2_1341
+sym_2_1341: la $2, sym_2_1341
+.globl sym_2_1342
+sym_2_1342: la $2, sym_2_1342
+.globl sym_2_1343
+sym_2_1343: la $2, sym_2_1343
+.globl sym_2_1344
+sym_2_1344: la $2, sym_2_1344
+.globl sym_2_1345
+sym_2_1345: la $2, sym_2_1345
+.globl sym_2_1346
+sym_2_1346: la $2, sym_2_1346
+.globl sym_2_1347
+sym_2_1347: la $2, sym_2_1347
+.globl sym_2_1348
+sym_2_1348: la $2, sym_2_1348
+.globl sym_2_1349
+sym_2_1349: la $2, sym_2_1349
+.globl sym_2_1350
+sym_2_1350: la $2, sym_2_1350
+.globl sym_2_1351
+sym_2_1351: la $2, sym_2_1351
+.globl sym_2_1352
+sym_2_1352: la $2, sym_2_1352
+.globl sym_2_1353
+sym_2_1353: la $2, sym_2_1353
+.globl sym_2_1354
+sym_2_1354: la $2, sym_2_1354
+.globl sym_2_1355
+sym_2_1355: la $2, sym_2_1355
+.globl sym_2_1356
+sym_2_1356: la $2, sym_2_1356
+.globl sym_2_1357
+sym_2_1357: la $2, sym_2_1357
+.globl sym_2_1358
+sym_2_1358: la $2, sym_2_1358
+.globl sym_2_1359
+sym_2_1359: la $2, sym_2_1359
+.globl sym_2_1360
+sym_2_1360: la $2, sym_2_1360
+.globl sym_2_1361
+sym_2_1361: la $2, sym_2_1361
+.globl sym_2_1362
+sym_2_1362: la $2, sym_2_1362
+.globl sym_2_1363
+sym_2_1363: la $2, sym_2_1363
+.globl sym_2_1364
+sym_2_1364: la $2, sym_2_1364
+.globl sym_2_1365
+sym_2_1365: la $2, sym_2_1365
+.globl sym_2_1366
+sym_2_1366: la $2, sym_2_1366
+.globl sym_2_1367
+sym_2_1367: la $2, sym_2_1367
+.globl sym_2_1368
+sym_2_1368: la $2, sym_2_1368
+.globl sym_2_1369
+sym_2_1369: la $2, sym_2_1369
+.globl sym_2_1370
+sym_2_1370: la $2, sym_2_1370
+.globl sym_2_1371
+sym_2_1371: la $2, sym_2_1371
+.globl sym_2_1372
+sym_2_1372: la $2, sym_2_1372
+.globl sym_2_1373
+sym_2_1373: la $2, sym_2_1373
+.globl sym_2_1374
+sym_2_1374: la $2, sym_2_1374
+.globl sym_2_1375
+sym_2_1375: la $2, sym_2_1375
+.globl sym_2_1376
+sym_2_1376: la $2, sym_2_1376
+.globl sym_2_1377
+sym_2_1377: la $2, sym_2_1377
+.globl sym_2_1378
+sym_2_1378: la $2, sym_2_1378
+.globl sym_2_1379
+sym_2_1379: la $2, sym_2_1379
+.globl sym_2_1380
+sym_2_1380: la $2, sym_2_1380
+.globl sym_2_1381
+sym_2_1381: la $2, sym_2_1381
+.globl sym_2_1382
+sym_2_1382: la $2, sym_2_1382
+.globl sym_2_1383
+sym_2_1383: la $2, sym_2_1383
+.globl sym_2_1384
+sym_2_1384: la $2, sym_2_1384
+.globl sym_2_1385
+sym_2_1385: la $2, sym_2_1385
+.globl sym_2_1386
+sym_2_1386: la $2, sym_2_1386
+.globl sym_2_1387
+sym_2_1387: la $2, sym_2_1387
+.globl sym_2_1388
+sym_2_1388: la $2, sym_2_1388
+.globl sym_2_1389
+sym_2_1389: la $2, sym_2_1389
+.globl sym_2_1390
+sym_2_1390: la $2, sym_2_1390
+.globl sym_2_1391
+sym_2_1391: la $2, sym_2_1391
+.globl sym_2_1392
+sym_2_1392: la $2, sym_2_1392
+.globl sym_2_1393
+sym_2_1393: la $2, sym_2_1393
+.globl sym_2_1394
+sym_2_1394: la $2, sym_2_1394
+.globl sym_2_1395
+sym_2_1395: la $2, sym_2_1395
+.globl sym_2_1396
+sym_2_1396: la $2, sym_2_1396
+.globl sym_2_1397
+sym_2_1397: la $2, sym_2_1397
+.globl sym_2_1398
+sym_2_1398: la $2, sym_2_1398
+.globl sym_2_1399
+sym_2_1399: la $2, sym_2_1399
+.globl sym_2_1400
+sym_2_1400: la $2, sym_2_1400
+.globl sym_2_1401
+sym_2_1401: la $2, sym_2_1401
+.globl sym_2_1402
+sym_2_1402: la $2, sym_2_1402
+.globl sym_2_1403
+sym_2_1403: la $2, sym_2_1403
+.globl sym_2_1404
+sym_2_1404: la $2, sym_2_1404
+.globl sym_2_1405
+sym_2_1405: la $2, sym_2_1405
+.globl sym_2_1406
+sym_2_1406: la $2, sym_2_1406
+.globl sym_2_1407
+sym_2_1407: la $2, sym_2_1407
+.globl sym_2_1408
+sym_2_1408: la $2, sym_2_1408
+.globl sym_2_1409
+sym_2_1409: la $2, sym_2_1409
+.globl sym_2_1410
+sym_2_1410: la $2, sym_2_1410
+.globl sym_2_1411
+sym_2_1411: la $2, sym_2_1411
+.globl sym_2_1412
+sym_2_1412: la $2, sym_2_1412
+.globl sym_2_1413
+sym_2_1413: la $2, sym_2_1413
+.globl sym_2_1414
+sym_2_1414: la $2, sym_2_1414
+.globl sym_2_1415
+sym_2_1415: la $2, sym_2_1415
+.globl sym_2_1416
+sym_2_1416: la $2, sym_2_1416
+.globl sym_2_1417
+sym_2_1417: la $2, sym_2_1417
+.globl sym_2_1418
+sym_2_1418: la $2, sym_2_1418
+.globl sym_2_1419
+sym_2_1419: la $2, sym_2_1419
+.globl sym_2_1420
+sym_2_1420: la $2, sym_2_1420
+.globl sym_2_1421
+sym_2_1421: la $2, sym_2_1421
+.globl sym_2_1422
+sym_2_1422: la $2, sym_2_1422
+.globl sym_2_1423
+sym_2_1423: la $2, sym_2_1423
+.globl sym_2_1424
+sym_2_1424: la $2, sym_2_1424
+.globl sym_2_1425
+sym_2_1425: la $2, sym_2_1425
+.globl sym_2_1426
+sym_2_1426: la $2, sym_2_1426
+.globl sym_2_1427
+sym_2_1427: la $2, sym_2_1427
+.globl sym_2_1428
+sym_2_1428: la $2, sym_2_1428
+.globl sym_2_1429
+sym_2_1429: la $2, sym_2_1429
+.globl sym_2_1430
+sym_2_1430: la $2, sym_2_1430
+.globl sym_2_1431
+sym_2_1431: la $2, sym_2_1431
+.globl sym_2_1432
+sym_2_1432: la $2, sym_2_1432
+.globl sym_2_1433
+sym_2_1433: la $2, sym_2_1433
+.globl sym_2_1434
+sym_2_1434: la $2, sym_2_1434
+.globl sym_2_1435
+sym_2_1435: la $2, sym_2_1435
+.globl sym_2_1436
+sym_2_1436: la $2, sym_2_1436
+.globl sym_2_1437
+sym_2_1437: la $2, sym_2_1437
+.globl sym_2_1438
+sym_2_1438: la $2, sym_2_1438
+.globl sym_2_1439
+sym_2_1439: la $2, sym_2_1439
+.globl sym_2_1440
+sym_2_1440: la $2, sym_2_1440
+.globl sym_2_1441
+sym_2_1441: la $2, sym_2_1441
+.globl sym_2_1442
+sym_2_1442: la $2, sym_2_1442
+.globl sym_2_1443
+sym_2_1443: la $2, sym_2_1443
+.globl sym_2_1444
+sym_2_1444: la $2, sym_2_1444
+.globl sym_2_1445
+sym_2_1445: la $2, sym_2_1445
+.globl sym_2_1446
+sym_2_1446: la $2, sym_2_1446
+.globl sym_2_1447
+sym_2_1447: la $2, sym_2_1447
+.globl sym_2_1448
+sym_2_1448: la $2, sym_2_1448
+.globl sym_2_1449
+sym_2_1449: la $2, sym_2_1449
+.globl sym_2_1450
+sym_2_1450: la $2, sym_2_1450
+.globl sym_2_1451
+sym_2_1451: la $2, sym_2_1451
+.globl sym_2_1452
+sym_2_1452: la $2, sym_2_1452
+.globl sym_2_1453
+sym_2_1453: la $2, sym_2_1453
+.globl sym_2_1454
+sym_2_1454: la $2, sym_2_1454
+.globl sym_2_1455
+sym_2_1455: la $2, sym_2_1455
+.globl sym_2_1456
+sym_2_1456: la $2, sym_2_1456
+.globl sym_2_1457
+sym_2_1457: la $2, sym_2_1457
+.globl sym_2_1458
+sym_2_1458: la $2, sym_2_1458
+.globl sym_2_1459
+sym_2_1459: la $2, sym_2_1459
+.globl sym_2_1460
+sym_2_1460: la $2, sym_2_1460
+.globl sym_2_1461
+sym_2_1461: la $2, sym_2_1461
+.globl sym_2_1462
+sym_2_1462: la $2, sym_2_1462
+.globl sym_2_1463
+sym_2_1463: la $2, sym_2_1463
+.globl sym_2_1464
+sym_2_1464: la $2, sym_2_1464
+.globl sym_2_1465
+sym_2_1465: la $2, sym_2_1465
+.globl sym_2_1466
+sym_2_1466: la $2, sym_2_1466
+.globl sym_2_1467
+sym_2_1467: la $2, sym_2_1467
+.globl sym_2_1468
+sym_2_1468: la $2, sym_2_1468
+.globl sym_2_1469
+sym_2_1469: la $2, sym_2_1469
+.globl sym_2_1470
+sym_2_1470: la $2, sym_2_1470
+.globl sym_2_1471
+sym_2_1471: la $2, sym_2_1471
+.globl sym_2_1472
+sym_2_1472: la $2, sym_2_1472
+.globl sym_2_1473
+sym_2_1473: la $2, sym_2_1473
+.globl sym_2_1474
+sym_2_1474: la $2, sym_2_1474
+.globl sym_2_1475
+sym_2_1475: la $2, sym_2_1475
+.globl sym_2_1476
+sym_2_1476: la $2, sym_2_1476
+.globl sym_2_1477
+sym_2_1477: la $2, sym_2_1477
+.globl sym_2_1478
+sym_2_1478: la $2, sym_2_1478
+.globl sym_2_1479
+sym_2_1479: la $2, sym_2_1479
+.globl sym_2_1480
+sym_2_1480: la $2, sym_2_1480
+.globl sym_2_1481
+sym_2_1481: la $2, sym_2_1481
+.globl sym_2_1482
+sym_2_1482: la $2, sym_2_1482
+.globl sym_2_1483
+sym_2_1483: la $2, sym_2_1483
+.globl sym_2_1484
+sym_2_1484: la $2, sym_2_1484
+.globl sym_2_1485
+sym_2_1485: la $2, sym_2_1485
+.globl sym_2_1486
+sym_2_1486: la $2, sym_2_1486
+.globl sym_2_1487
+sym_2_1487: la $2, sym_2_1487
+.globl sym_2_1488
+sym_2_1488: la $2, sym_2_1488
+.globl sym_2_1489
+sym_2_1489: la $2, sym_2_1489
+.globl sym_2_1490
+sym_2_1490: la $2, sym_2_1490
+.globl sym_2_1491
+sym_2_1491: la $2, sym_2_1491
+.globl sym_2_1492
+sym_2_1492: la $2, sym_2_1492
+.globl sym_2_1493
+sym_2_1493: la $2, sym_2_1493
+.globl sym_2_1494
+sym_2_1494: la $2, sym_2_1494
+.globl sym_2_1495
+sym_2_1495: la $2, sym_2_1495
+.globl sym_2_1496
+sym_2_1496: la $2, sym_2_1496
+.globl sym_2_1497
+sym_2_1497: la $2, sym_2_1497
+.globl sym_2_1498
+sym_2_1498: la $2, sym_2_1498
+.globl sym_2_1499
+sym_2_1499: la $2, sym_2_1499
+.globl sym_2_1500
+sym_2_1500: la $2, sym_2_1500
+.globl sym_2_1501
+sym_2_1501: la $2, sym_2_1501
+.globl sym_2_1502
+sym_2_1502: la $2, sym_2_1502
+.globl sym_2_1503
+sym_2_1503: la $2, sym_2_1503
+.globl sym_2_1504
+sym_2_1504: la $2, sym_2_1504
+.globl sym_2_1505
+sym_2_1505: la $2, sym_2_1505
+.globl sym_2_1506
+sym_2_1506: la $2, sym_2_1506
+.globl sym_2_1507
+sym_2_1507: la $2, sym_2_1507
+.globl sym_2_1508
+sym_2_1508: la $2, sym_2_1508
+.globl sym_2_1509
+sym_2_1509: la $2, sym_2_1509
+.globl sym_2_1510
+sym_2_1510: la $2, sym_2_1510
+.globl sym_2_1511
+sym_2_1511: la $2, sym_2_1511
+.globl sym_2_1512
+sym_2_1512: la $2, sym_2_1512
+.globl sym_2_1513
+sym_2_1513: la $2, sym_2_1513
+.globl sym_2_1514
+sym_2_1514: la $2, sym_2_1514
+.globl sym_2_1515
+sym_2_1515: la $2, sym_2_1515
+.globl sym_2_1516
+sym_2_1516: la $2, sym_2_1516
+.globl sym_2_1517
+sym_2_1517: la $2, sym_2_1517
+.globl sym_2_1518
+sym_2_1518: la $2, sym_2_1518
+.globl sym_2_1519
+sym_2_1519: la $2, sym_2_1519
+.globl sym_2_1520
+sym_2_1520: la $2, sym_2_1520
+.globl sym_2_1521
+sym_2_1521: la $2, sym_2_1521
+.globl sym_2_1522
+sym_2_1522: la $2, sym_2_1522
+.globl sym_2_1523
+sym_2_1523: la $2, sym_2_1523
+.globl sym_2_1524
+sym_2_1524: la $2, sym_2_1524
+.globl sym_2_1525
+sym_2_1525: la $2, sym_2_1525
+.globl sym_2_1526
+sym_2_1526: la $2, sym_2_1526
+.globl sym_2_1527
+sym_2_1527: la $2, sym_2_1527
+.globl sym_2_1528
+sym_2_1528: la $2, sym_2_1528
+.globl sym_2_1529
+sym_2_1529: la $2, sym_2_1529
+.globl sym_2_1530
+sym_2_1530: la $2, sym_2_1530
+.globl sym_2_1531
+sym_2_1531: la $2, sym_2_1531
+.globl sym_2_1532
+sym_2_1532: la $2, sym_2_1532
+.globl sym_2_1533
+sym_2_1533: la $2, sym_2_1533
+.globl sym_2_1534
+sym_2_1534: la $2, sym_2_1534
+.globl sym_2_1535
+sym_2_1535: la $2, sym_2_1535
+.globl sym_2_1536
+sym_2_1536: la $2, sym_2_1536
+.globl sym_2_1537
+sym_2_1537: la $2, sym_2_1537
+.globl sym_2_1538
+sym_2_1538: la $2, sym_2_1538
+.globl sym_2_1539
+sym_2_1539: la $2, sym_2_1539
+.globl sym_2_1540
+sym_2_1540: la $2, sym_2_1540
+.globl sym_2_1541
+sym_2_1541: la $2, sym_2_1541
+.globl sym_2_1542
+sym_2_1542: la $2, sym_2_1542
+.globl sym_2_1543
+sym_2_1543: la $2, sym_2_1543
+.globl sym_2_1544
+sym_2_1544: la $2, sym_2_1544
+.globl sym_2_1545
+sym_2_1545: la $2, sym_2_1545
+.globl sym_2_1546
+sym_2_1546: la $2, sym_2_1546
+.globl sym_2_1547
+sym_2_1547: la $2, sym_2_1547
+.globl sym_2_1548
+sym_2_1548: la $2, sym_2_1548
+.globl sym_2_1549
+sym_2_1549: la $2, sym_2_1549
+.globl sym_2_1550
+sym_2_1550: la $2, sym_2_1550
+.globl sym_2_1551
+sym_2_1551: la $2, sym_2_1551
+.globl sym_2_1552
+sym_2_1552: la $2, sym_2_1552
+.globl sym_2_1553
+sym_2_1553: la $2, sym_2_1553
+.globl sym_2_1554
+sym_2_1554: la $2, sym_2_1554
+.globl sym_2_1555
+sym_2_1555: la $2, sym_2_1555
+.globl sym_2_1556
+sym_2_1556: la $2, sym_2_1556
+.globl sym_2_1557
+sym_2_1557: la $2, sym_2_1557
+.globl sym_2_1558
+sym_2_1558: la $2, sym_2_1558
+.globl sym_2_1559
+sym_2_1559: la $2, sym_2_1559
+.globl sym_2_1560
+sym_2_1560: la $2, sym_2_1560
+.globl sym_2_1561
+sym_2_1561: la $2, sym_2_1561
+.globl sym_2_1562
+sym_2_1562: la $2, sym_2_1562
+.globl sym_2_1563
+sym_2_1563: la $2, sym_2_1563
+.globl sym_2_1564
+sym_2_1564: la $2, sym_2_1564
+.globl sym_2_1565
+sym_2_1565: la $2, sym_2_1565
+.globl sym_2_1566
+sym_2_1566: la $2, sym_2_1566
+.globl sym_2_1567
+sym_2_1567: la $2, sym_2_1567
+.globl sym_2_1568
+sym_2_1568: la $2, sym_2_1568
+.globl sym_2_1569
+sym_2_1569: la $2, sym_2_1569
+.globl sym_2_1570
+sym_2_1570: la $2, sym_2_1570
+.globl sym_2_1571
+sym_2_1571: la $2, sym_2_1571
+.globl sym_2_1572
+sym_2_1572: la $2, sym_2_1572
+.globl sym_2_1573
+sym_2_1573: la $2, sym_2_1573
+.globl sym_2_1574
+sym_2_1574: la $2, sym_2_1574
+.globl sym_2_1575
+sym_2_1575: la $2, sym_2_1575
+.globl sym_2_1576
+sym_2_1576: la $2, sym_2_1576
+.globl sym_2_1577
+sym_2_1577: la $2, sym_2_1577
+.globl sym_2_1578
+sym_2_1578: la $2, sym_2_1578
+.globl sym_2_1579
+sym_2_1579: la $2, sym_2_1579
+.globl sym_2_1580
+sym_2_1580: la $2, sym_2_1580
+.globl sym_2_1581
+sym_2_1581: la $2, sym_2_1581
+.globl sym_2_1582
+sym_2_1582: la $2, sym_2_1582
+.globl sym_2_1583
+sym_2_1583: la $2, sym_2_1583
+.globl sym_2_1584
+sym_2_1584: la $2, sym_2_1584
+.globl sym_2_1585
+sym_2_1585: la $2, sym_2_1585
+.globl sym_2_1586
+sym_2_1586: la $2, sym_2_1586
+.globl sym_2_1587
+sym_2_1587: la $2, sym_2_1587
+.globl sym_2_1588
+sym_2_1588: la $2, sym_2_1588
+.globl sym_2_1589
+sym_2_1589: la $2, sym_2_1589
+.globl sym_2_1590
+sym_2_1590: la $2, sym_2_1590
+.globl sym_2_1591
+sym_2_1591: la $2, sym_2_1591
+.globl sym_2_1592
+sym_2_1592: la $2, sym_2_1592
+.globl sym_2_1593
+sym_2_1593: la $2, sym_2_1593
+.globl sym_2_1594
+sym_2_1594: la $2, sym_2_1594
+.globl sym_2_1595
+sym_2_1595: la $2, sym_2_1595
+.globl sym_2_1596
+sym_2_1596: la $2, sym_2_1596
+.globl sym_2_1597
+sym_2_1597: la $2, sym_2_1597
+.globl sym_2_1598
+sym_2_1598: la $2, sym_2_1598
+.globl sym_2_1599
+sym_2_1599: la $2, sym_2_1599
+.globl sym_2_1600
+sym_2_1600: la $2, sym_2_1600
+.globl sym_2_1601
+sym_2_1601: la $2, sym_2_1601
+.globl sym_2_1602
+sym_2_1602: la $2, sym_2_1602
+.globl sym_2_1603
+sym_2_1603: la $2, sym_2_1603
+.globl sym_2_1604
+sym_2_1604: la $2, sym_2_1604
+.globl sym_2_1605
+sym_2_1605: la $2, sym_2_1605
+.globl sym_2_1606
+sym_2_1606: la $2, sym_2_1606
+.globl sym_2_1607
+sym_2_1607: la $2, sym_2_1607
+.globl sym_2_1608
+sym_2_1608: la $2, sym_2_1608
+.globl sym_2_1609
+sym_2_1609: la $2, sym_2_1609
+.globl sym_2_1610
+sym_2_1610: la $2, sym_2_1610
+.globl sym_2_1611
+sym_2_1611: la $2, sym_2_1611
+.globl sym_2_1612
+sym_2_1612: la $2, sym_2_1612
+.globl sym_2_1613
+sym_2_1613: la $2, sym_2_1613
+.globl sym_2_1614
+sym_2_1614: la $2, sym_2_1614
+.globl sym_2_1615
+sym_2_1615: la $2, sym_2_1615
+.globl sym_2_1616
+sym_2_1616: la $2, sym_2_1616
+.globl sym_2_1617
+sym_2_1617: la $2, sym_2_1617
+.globl sym_2_1618
+sym_2_1618: la $2, sym_2_1618
+.globl sym_2_1619
+sym_2_1619: la $2, sym_2_1619
+.globl sym_2_1620
+sym_2_1620: la $2, sym_2_1620
+.globl sym_2_1621
+sym_2_1621: la $2, sym_2_1621
+.globl sym_2_1622
+sym_2_1622: la $2, sym_2_1622
+.globl sym_2_1623
+sym_2_1623: la $2, sym_2_1623
+.globl sym_2_1624
+sym_2_1624: la $2, sym_2_1624
+.globl sym_2_1625
+sym_2_1625: la $2, sym_2_1625
+.globl sym_2_1626
+sym_2_1626: la $2, sym_2_1626
+.globl sym_2_1627
+sym_2_1627: la $2, sym_2_1627
+.globl sym_2_1628
+sym_2_1628: la $2, sym_2_1628
+.globl sym_2_1629
+sym_2_1629: la $2, sym_2_1629
+.globl sym_2_1630
+sym_2_1630: la $2, sym_2_1630
+.globl sym_2_1631
+sym_2_1631: la $2, sym_2_1631
+.globl sym_2_1632
+sym_2_1632: la $2, sym_2_1632
+.globl sym_2_1633
+sym_2_1633: la $2, sym_2_1633
+.globl sym_2_1634
+sym_2_1634: la $2, sym_2_1634
+.globl sym_2_1635
+sym_2_1635: la $2, sym_2_1635
+.globl sym_2_1636
+sym_2_1636: la $2, sym_2_1636
+.globl sym_2_1637
+sym_2_1637: la $2, sym_2_1637
+.globl sym_2_1638
+sym_2_1638: la $2, sym_2_1638
+.globl sym_2_1639
+sym_2_1639: la $2, sym_2_1639
+.globl sym_2_1640
+sym_2_1640: la $2, sym_2_1640
+.globl sym_2_1641
+sym_2_1641: la $2, sym_2_1641
+.globl sym_2_1642
+sym_2_1642: la $2, sym_2_1642
+.globl sym_2_1643
+sym_2_1643: la $2, sym_2_1643
+.globl sym_2_1644
+sym_2_1644: la $2, sym_2_1644
+.globl sym_2_1645
+sym_2_1645: la $2, sym_2_1645
+.globl sym_2_1646
+sym_2_1646: la $2, sym_2_1646
+.globl sym_2_1647
+sym_2_1647: la $2, sym_2_1647
+.globl sym_2_1648
+sym_2_1648: la $2, sym_2_1648
+.globl sym_2_1649
+sym_2_1649: la $2, sym_2_1649
+.globl sym_2_1650
+sym_2_1650: la $2, sym_2_1650
+.globl sym_2_1651
+sym_2_1651: la $2, sym_2_1651
+.globl sym_2_1652
+sym_2_1652: la $2, sym_2_1652
+.globl sym_2_1653
+sym_2_1653: la $2, sym_2_1653
+.globl sym_2_1654
+sym_2_1654: la $2, sym_2_1654
+.globl sym_2_1655
+sym_2_1655: la $2, sym_2_1655
+.globl sym_2_1656
+sym_2_1656: la $2, sym_2_1656
+.globl sym_2_1657
+sym_2_1657: la $2, sym_2_1657
+.globl sym_2_1658
+sym_2_1658: la $2, sym_2_1658
+.globl sym_2_1659
+sym_2_1659: la $2, sym_2_1659
+.globl sym_2_1660
+sym_2_1660: la $2, sym_2_1660
+.globl sym_2_1661
+sym_2_1661: la $2, sym_2_1661
+.globl sym_2_1662
+sym_2_1662: la $2, sym_2_1662
+.globl sym_2_1663
+sym_2_1663: la $2, sym_2_1663
+.globl sym_2_1664
+sym_2_1664: la $2, sym_2_1664
+.globl sym_2_1665
+sym_2_1665: la $2, sym_2_1665
+.globl sym_2_1666
+sym_2_1666: la $2, sym_2_1666
+.globl sym_2_1667
+sym_2_1667: la $2, sym_2_1667
+.globl sym_2_1668
+sym_2_1668: la $2, sym_2_1668
+.globl sym_2_1669
+sym_2_1669: la $2, sym_2_1669
+.globl sym_2_1670
+sym_2_1670: la $2, sym_2_1670
+.globl sym_2_1671
+sym_2_1671: la $2, sym_2_1671
+.globl sym_2_1672
+sym_2_1672: la $2, sym_2_1672
+.globl sym_2_1673
+sym_2_1673: la $2, sym_2_1673
+.globl sym_2_1674
+sym_2_1674: la $2, sym_2_1674
+.globl sym_2_1675
+sym_2_1675: la $2, sym_2_1675
+.globl sym_2_1676
+sym_2_1676: la $2, sym_2_1676
+.globl sym_2_1677
+sym_2_1677: la $2, sym_2_1677
+.globl sym_2_1678
+sym_2_1678: la $2, sym_2_1678
+.globl sym_2_1679
+sym_2_1679: la $2, sym_2_1679
+.globl sym_2_1680
+sym_2_1680: la $2, sym_2_1680
+.globl sym_2_1681
+sym_2_1681: la $2, sym_2_1681
+.globl sym_2_1682
+sym_2_1682: la $2, sym_2_1682
+.globl sym_2_1683
+sym_2_1683: la $2, sym_2_1683
+.globl sym_2_1684
+sym_2_1684: la $2, sym_2_1684
+.globl sym_2_1685
+sym_2_1685: la $2, sym_2_1685
+.globl sym_2_1686
+sym_2_1686: la $2, sym_2_1686
+.globl sym_2_1687
+sym_2_1687: la $2, sym_2_1687
+.globl sym_2_1688
+sym_2_1688: la $2, sym_2_1688
+.globl sym_2_1689
+sym_2_1689: la $2, sym_2_1689
+.globl sym_2_1690
+sym_2_1690: la $2, sym_2_1690
+.globl sym_2_1691
+sym_2_1691: la $2, sym_2_1691
+.globl sym_2_1692
+sym_2_1692: la $2, sym_2_1692
+.globl sym_2_1693
+sym_2_1693: la $2, sym_2_1693
+.globl sym_2_1694
+sym_2_1694: la $2, sym_2_1694
+.globl sym_2_1695
+sym_2_1695: la $2, sym_2_1695
+.globl sym_2_1696
+sym_2_1696: la $2, sym_2_1696
+.globl sym_2_1697
+sym_2_1697: la $2, sym_2_1697
+.globl sym_2_1698
+sym_2_1698: la $2, sym_2_1698
+.globl sym_2_1699
+sym_2_1699: la $2, sym_2_1699
+.globl sym_2_1700
+sym_2_1700: la $2, sym_2_1700
+.globl sym_2_1701
+sym_2_1701: la $2, sym_2_1701
+.globl sym_2_1702
+sym_2_1702: la $2, sym_2_1702
+.globl sym_2_1703
+sym_2_1703: la $2, sym_2_1703
+.globl sym_2_1704
+sym_2_1704: la $2, sym_2_1704
+.globl sym_2_1705
+sym_2_1705: la $2, sym_2_1705
+.globl sym_2_1706
+sym_2_1706: la $2, sym_2_1706
+.globl sym_2_1707
+sym_2_1707: la $2, sym_2_1707
+.globl sym_2_1708
+sym_2_1708: la $2, sym_2_1708
+.globl sym_2_1709
+sym_2_1709: la $2, sym_2_1709
+.globl sym_2_1710
+sym_2_1710: la $2, sym_2_1710
+.globl sym_2_1711
+sym_2_1711: la $2, sym_2_1711
+.globl sym_2_1712
+sym_2_1712: la $2, sym_2_1712
+.globl sym_2_1713
+sym_2_1713: la $2, sym_2_1713
+.globl sym_2_1714
+sym_2_1714: la $2, sym_2_1714
+.globl sym_2_1715
+sym_2_1715: la $2, sym_2_1715
+.globl sym_2_1716
+sym_2_1716: la $2, sym_2_1716
+.globl sym_2_1717
+sym_2_1717: la $2, sym_2_1717
+.globl sym_2_1718
+sym_2_1718: la $2, sym_2_1718
+.globl sym_2_1719
+sym_2_1719: la $2, sym_2_1719
+.globl sym_2_1720
+sym_2_1720: la $2, sym_2_1720
+.globl sym_2_1721
+sym_2_1721: la $2, sym_2_1721
+.globl sym_2_1722
+sym_2_1722: la $2, sym_2_1722
+.globl sym_2_1723
+sym_2_1723: la $2, sym_2_1723
+.globl sym_2_1724
+sym_2_1724: la $2, sym_2_1724
+.globl sym_2_1725
+sym_2_1725: la $2, sym_2_1725
+.globl sym_2_1726
+sym_2_1726: la $2, sym_2_1726
+.globl sym_2_1727
+sym_2_1727: la $2, sym_2_1727
+.globl sym_2_1728
+sym_2_1728: la $2, sym_2_1728
+.globl sym_2_1729
+sym_2_1729: la $2, sym_2_1729
+.globl sym_2_1730
+sym_2_1730: la $2, sym_2_1730
+.globl sym_2_1731
+sym_2_1731: la $2, sym_2_1731
+.globl sym_2_1732
+sym_2_1732: la $2, sym_2_1732
+.globl sym_2_1733
+sym_2_1733: la $2, sym_2_1733
+.globl sym_2_1734
+sym_2_1734: la $2, sym_2_1734
+.globl sym_2_1735
+sym_2_1735: la $2, sym_2_1735
+.globl sym_2_1736
+sym_2_1736: la $2, sym_2_1736
+.globl sym_2_1737
+sym_2_1737: la $2, sym_2_1737
+.globl sym_2_1738
+sym_2_1738: la $2, sym_2_1738
+.globl sym_2_1739
+sym_2_1739: la $2, sym_2_1739
+.globl sym_2_1740
+sym_2_1740: la $2, sym_2_1740
+.globl sym_2_1741
+sym_2_1741: la $2, sym_2_1741
+.globl sym_2_1742
+sym_2_1742: la $2, sym_2_1742
+.globl sym_2_1743
+sym_2_1743: la $2, sym_2_1743
+.globl sym_2_1744
+sym_2_1744: la $2, sym_2_1744
+.globl sym_2_1745
+sym_2_1745: la $2, sym_2_1745
+.globl sym_2_1746
+sym_2_1746: la $2, sym_2_1746
+.globl sym_2_1747
+sym_2_1747: la $2, sym_2_1747
+.globl sym_2_1748
+sym_2_1748: la $2, sym_2_1748
+.globl sym_2_1749
+sym_2_1749: la $2, sym_2_1749
+.globl sym_2_1750
+sym_2_1750: la $2, sym_2_1750
+.globl sym_2_1751
+sym_2_1751: la $2, sym_2_1751
+.globl sym_2_1752
+sym_2_1752: la $2, sym_2_1752
+.globl sym_2_1753
+sym_2_1753: la $2, sym_2_1753
+.globl sym_2_1754
+sym_2_1754: la $2, sym_2_1754
+.globl sym_2_1755
+sym_2_1755: la $2, sym_2_1755
+.globl sym_2_1756
+sym_2_1756: la $2, sym_2_1756
+.globl sym_2_1757
+sym_2_1757: la $2, sym_2_1757
+.globl sym_2_1758
+sym_2_1758: la $2, sym_2_1758
+.globl sym_2_1759
+sym_2_1759: la $2, sym_2_1759
+.globl sym_2_1760
+sym_2_1760: la $2, sym_2_1760
+.globl sym_2_1761
+sym_2_1761: la $2, sym_2_1761
+.globl sym_2_1762
+sym_2_1762: la $2, sym_2_1762
+.globl sym_2_1763
+sym_2_1763: la $2, sym_2_1763
+.globl sym_2_1764
+sym_2_1764: la $2, sym_2_1764
+.globl sym_2_1765
+sym_2_1765: la $2, sym_2_1765
+.globl sym_2_1766
+sym_2_1766: la $2, sym_2_1766
+.globl sym_2_1767
+sym_2_1767: la $2, sym_2_1767
+.globl sym_2_1768
+sym_2_1768: la $2, sym_2_1768
+.globl sym_2_1769
+sym_2_1769: la $2, sym_2_1769
+.globl sym_2_1770
+sym_2_1770: la $2, sym_2_1770
+.globl sym_2_1771
+sym_2_1771: la $2, sym_2_1771
+.globl sym_2_1772
+sym_2_1772: la $2, sym_2_1772
+.globl sym_2_1773
+sym_2_1773: la $2, sym_2_1773
+.globl sym_2_1774
+sym_2_1774: la $2, sym_2_1774
+.globl sym_2_1775
+sym_2_1775: la $2, sym_2_1775
+.globl sym_2_1776
+sym_2_1776: la $2, sym_2_1776
+.globl sym_2_1777
+sym_2_1777: la $2, sym_2_1777
+.globl sym_2_1778
+sym_2_1778: la $2, sym_2_1778
+.globl sym_2_1779
+sym_2_1779: la $2, sym_2_1779
+.globl sym_2_1780
+sym_2_1780: la $2, sym_2_1780
+.globl sym_2_1781
+sym_2_1781: la $2, sym_2_1781
+.globl sym_2_1782
+sym_2_1782: la $2, sym_2_1782
+.globl sym_2_1783
+sym_2_1783: la $2, sym_2_1783
+.globl sym_2_1784
+sym_2_1784: la $2, sym_2_1784
+.globl sym_2_1785
+sym_2_1785: la $2, sym_2_1785
+.globl sym_2_1786
+sym_2_1786: la $2, sym_2_1786
+.globl sym_2_1787
+sym_2_1787: la $2, sym_2_1787
+.globl sym_2_1788
+sym_2_1788: la $2, sym_2_1788
+.globl sym_2_1789
+sym_2_1789: la $2, sym_2_1789
+.globl sym_2_1790
+sym_2_1790: la $2, sym_2_1790
+.globl sym_2_1791
+sym_2_1791: la $2, sym_2_1791
+.globl sym_2_1792
+sym_2_1792: la $2, sym_2_1792
+.globl sym_2_1793
+sym_2_1793: la $2, sym_2_1793
+.globl sym_2_1794
+sym_2_1794: la $2, sym_2_1794
+.globl sym_2_1795
+sym_2_1795: la $2, sym_2_1795
+.globl sym_2_1796
+sym_2_1796: la $2, sym_2_1796
+.globl sym_2_1797
+sym_2_1797: la $2, sym_2_1797
+.globl sym_2_1798
+sym_2_1798: la $2, sym_2_1798
+.globl sym_2_1799
+sym_2_1799: la $2, sym_2_1799
+.globl sym_2_1800
+sym_2_1800: la $2, sym_2_1800
+.globl sym_2_1801
+sym_2_1801: la $2, sym_2_1801
+.globl sym_2_1802
+sym_2_1802: la $2, sym_2_1802
+.globl sym_2_1803
+sym_2_1803: la $2, sym_2_1803
+.globl sym_2_1804
+sym_2_1804: la $2, sym_2_1804
+.globl sym_2_1805
+sym_2_1805: la $2, sym_2_1805
+.globl sym_2_1806
+sym_2_1806: la $2, sym_2_1806
+.globl sym_2_1807
+sym_2_1807: la $2, sym_2_1807
+.globl sym_2_1808
+sym_2_1808: la $2, sym_2_1808
+.globl sym_2_1809
+sym_2_1809: la $2, sym_2_1809
+.globl sym_2_1810
+sym_2_1810: la $2, sym_2_1810
+.globl sym_2_1811
+sym_2_1811: la $2, sym_2_1811
+.globl sym_2_1812
+sym_2_1812: la $2, sym_2_1812
+.globl sym_2_1813
+sym_2_1813: la $2, sym_2_1813
+.globl sym_2_1814
+sym_2_1814: la $2, sym_2_1814
+.globl sym_2_1815
+sym_2_1815: la $2, sym_2_1815
+.globl sym_2_1816
+sym_2_1816: la $2, sym_2_1816
+.globl sym_2_1817
+sym_2_1817: la $2, sym_2_1817
+.globl sym_2_1818
+sym_2_1818: la $2, sym_2_1818
+.globl sym_2_1819
+sym_2_1819: la $2, sym_2_1819
+.globl sym_2_1820
+sym_2_1820: la $2, sym_2_1820
+.globl sym_2_1821
+sym_2_1821: la $2, sym_2_1821
+.globl sym_2_1822
+sym_2_1822: la $2, sym_2_1822
+.globl sym_2_1823
+sym_2_1823: la $2, sym_2_1823
+.globl sym_2_1824
+sym_2_1824: la $2, sym_2_1824
+.globl sym_2_1825
+sym_2_1825: la $2, sym_2_1825
+.globl sym_2_1826
+sym_2_1826: la $2, sym_2_1826
+.globl sym_2_1827
+sym_2_1827: la $2, sym_2_1827
+.globl sym_2_1828
+sym_2_1828: la $2, sym_2_1828
+.globl sym_2_1829
+sym_2_1829: la $2, sym_2_1829
+.globl sym_2_1830
+sym_2_1830: la $2, sym_2_1830
+.globl sym_2_1831
+sym_2_1831: la $2, sym_2_1831
+.globl sym_2_1832
+sym_2_1832: la $2, sym_2_1832
+.globl sym_2_1833
+sym_2_1833: la $2, sym_2_1833
+.globl sym_2_1834
+sym_2_1834: la $2, sym_2_1834
+.globl sym_2_1835
+sym_2_1835: la $2, sym_2_1835
+.globl sym_2_1836
+sym_2_1836: la $2, sym_2_1836
+.globl sym_2_1837
+sym_2_1837: la $2, sym_2_1837
+.globl sym_2_1838
+sym_2_1838: la $2, sym_2_1838
+.globl sym_2_1839
+sym_2_1839: la $2, sym_2_1839
+.globl sym_2_1840
+sym_2_1840: la $2, sym_2_1840
+.globl sym_2_1841
+sym_2_1841: la $2, sym_2_1841
+.globl sym_2_1842
+sym_2_1842: la $2, sym_2_1842
+.globl sym_2_1843
+sym_2_1843: la $2, sym_2_1843
+.globl sym_2_1844
+sym_2_1844: la $2, sym_2_1844
+.globl sym_2_1845
+sym_2_1845: la $2, sym_2_1845
+.globl sym_2_1846
+sym_2_1846: la $2, sym_2_1846
+.globl sym_2_1847
+sym_2_1847: la $2, sym_2_1847
+.globl sym_2_1848
+sym_2_1848: la $2, sym_2_1848
+.globl sym_2_1849
+sym_2_1849: la $2, sym_2_1849
+.globl sym_2_1850
+sym_2_1850: la $2, sym_2_1850
+.globl sym_2_1851
+sym_2_1851: la $2, sym_2_1851
+.globl sym_2_1852
+sym_2_1852: la $2, sym_2_1852
+.globl sym_2_1853
+sym_2_1853: la $2, sym_2_1853
+.globl sym_2_1854
+sym_2_1854: la $2, sym_2_1854
+.globl sym_2_1855
+sym_2_1855: la $2, sym_2_1855
+.globl sym_2_1856
+sym_2_1856: la $2, sym_2_1856
+.globl sym_2_1857
+sym_2_1857: la $2, sym_2_1857
+.globl sym_2_1858
+sym_2_1858: la $2, sym_2_1858
+.globl sym_2_1859
+sym_2_1859: la $2, sym_2_1859
+.globl sym_2_1860
+sym_2_1860: la $2, sym_2_1860
+.globl sym_2_1861
+sym_2_1861: la $2, sym_2_1861
+.globl sym_2_1862
+sym_2_1862: la $2, sym_2_1862
+.globl sym_2_1863
+sym_2_1863: la $2, sym_2_1863
+.globl sym_2_1864
+sym_2_1864: la $2, sym_2_1864
+.globl sym_2_1865
+sym_2_1865: la $2, sym_2_1865
+.globl sym_2_1866
+sym_2_1866: la $2, sym_2_1866
+.globl sym_2_1867
+sym_2_1867: la $2, sym_2_1867
+.globl sym_2_1868
+sym_2_1868: la $2, sym_2_1868
+.globl sym_2_1869
+sym_2_1869: la $2, sym_2_1869
+.globl sym_2_1870
+sym_2_1870: la $2, sym_2_1870
+.globl sym_2_1871
+sym_2_1871: la $2, sym_2_1871
+.globl sym_2_1872
+sym_2_1872: la $2, sym_2_1872
+.globl sym_2_1873
+sym_2_1873: la $2, sym_2_1873
+.globl sym_2_1874
+sym_2_1874: la $2, sym_2_1874
+.globl sym_2_1875
+sym_2_1875: la $2, sym_2_1875
+.globl sym_2_1876
+sym_2_1876: la $2, sym_2_1876
+.globl sym_2_1877
+sym_2_1877: la $2, sym_2_1877
+.globl sym_2_1878
+sym_2_1878: la $2, sym_2_1878
+.globl sym_2_1879
+sym_2_1879: la $2, sym_2_1879
+.globl sym_2_1880
+sym_2_1880: la $2, sym_2_1880
+.globl sym_2_1881
+sym_2_1881: la $2, sym_2_1881
+.globl sym_2_1882
+sym_2_1882: la $2, sym_2_1882
+.globl sym_2_1883
+sym_2_1883: la $2, sym_2_1883
+.globl sym_2_1884
+sym_2_1884: la $2, sym_2_1884
+.globl sym_2_1885
+sym_2_1885: la $2, sym_2_1885
+.globl sym_2_1886
+sym_2_1886: la $2, sym_2_1886
+.globl sym_2_1887
+sym_2_1887: la $2, sym_2_1887
+.globl sym_2_1888
+sym_2_1888: la $2, sym_2_1888
+.globl sym_2_1889
+sym_2_1889: la $2, sym_2_1889
+.globl sym_2_1890
+sym_2_1890: la $2, sym_2_1890
+.globl sym_2_1891
+sym_2_1891: la $2, sym_2_1891
+.globl sym_2_1892
+sym_2_1892: la $2, sym_2_1892
+.globl sym_2_1893
+sym_2_1893: la $2, sym_2_1893
+.globl sym_2_1894
+sym_2_1894: la $2, sym_2_1894
+.globl sym_2_1895
+sym_2_1895: la $2, sym_2_1895
+.globl sym_2_1896
+sym_2_1896: la $2, sym_2_1896
+.globl sym_2_1897
+sym_2_1897: la $2, sym_2_1897
+.globl sym_2_1898
+sym_2_1898: la $2, sym_2_1898
+.globl sym_2_1899
+sym_2_1899: la $2, sym_2_1899
+.globl sym_2_1900
+sym_2_1900: la $2, sym_2_1900
+.globl sym_2_1901
+sym_2_1901: la $2, sym_2_1901
+.globl sym_2_1902
+sym_2_1902: la $2, sym_2_1902
+.globl sym_2_1903
+sym_2_1903: la $2, sym_2_1903
+.globl sym_2_1904
+sym_2_1904: la $2, sym_2_1904
+.globl sym_2_1905
+sym_2_1905: la $2, sym_2_1905
+.globl sym_2_1906
+sym_2_1906: la $2, sym_2_1906
+.globl sym_2_1907
+sym_2_1907: la $2, sym_2_1907
+.globl sym_2_1908
+sym_2_1908: la $2, sym_2_1908
+.globl sym_2_1909
+sym_2_1909: la $2, sym_2_1909
+.globl sym_2_1910
+sym_2_1910: la $2, sym_2_1910
+.globl sym_2_1911
+sym_2_1911: la $2, sym_2_1911
+.globl sym_2_1912
+sym_2_1912: la $2, sym_2_1912
+.globl sym_2_1913
+sym_2_1913: la $2, sym_2_1913
+.globl sym_2_1914
+sym_2_1914: la $2, sym_2_1914
+.globl sym_2_1915
+sym_2_1915: la $2, sym_2_1915
+.globl sym_2_1916
+sym_2_1916: la $2, sym_2_1916
+.globl sym_2_1917
+sym_2_1917: la $2, sym_2_1917
+.globl sym_2_1918
+sym_2_1918: la $2, sym_2_1918
+.globl sym_2_1919
+sym_2_1919: la $2, sym_2_1919
+.globl sym_2_1920
+sym_2_1920: la $2, sym_2_1920
+.globl sym_2_1921
+sym_2_1921: la $2, sym_2_1921
+.globl sym_2_1922
+sym_2_1922: la $2, sym_2_1922
+.globl sym_2_1923
+sym_2_1923: la $2, sym_2_1923
+.globl sym_2_1924
+sym_2_1924: la $2, sym_2_1924
+.globl sym_2_1925
+sym_2_1925: la $2, sym_2_1925
+.globl sym_2_1926
+sym_2_1926: la $2, sym_2_1926
+.globl sym_2_1927
+sym_2_1927: la $2, sym_2_1927
+.globl sym_2_1928
+sym_2_1928: la $2, sym_2_1928
+.globl sym_2_1929
+sym_2_1929: la $2, sym_2_1929
+.globl sym_2_1930
+sym_2_1930: la $2, sym_2_1930
+.globl sym_2_1931
+sym_2_1931: la $2, sym_2_1931
+.globl sym_2_1932
+sym_2_1932: la $2, sym_2_1932
+.globl sym_2_1933
+sym_2_1933: la $2, sym_2_1933
+.globl sym_2_1934
+sym_2_1934: la $2, sym_2_1934
+.globl sym_2_1935
+sym_2_1935: la $2, sym_2_1935
+.globl sym_2_1936
+sym_2_1936: la $2, sym_2_1936
+.globl sym_2_1937
+sym_2_1937: la $2, sym_2_1937
+.globl sym_2_1938
+sym_2_1938: la $2, sym_2_1938
+.globl sym_2_1939
+sym_2_1939: la $2, sym_2_1939
+.globl sym_2_1940
+sym_2_1940: la $2, sym_2_1940
+.globl sym_2_1941
+sym_2_1941: la $2, sym_2_1941
+.globl sym_2_1942
+sym_2_1942: la $2, sym_2_1942
+.globl sym_2_1943
+sym_2_1943: la $2, sym_2_1943
+.globl sym_2_1944
+sym_2_1944: la $2, sym_2_1944
+.globl sym_2_1945
+sym_2_1945: la $2, sym_2_1945
+.globl sym_2_1946
+sym_2_1946: la $2, sym_2_1946
+.globl sym_2_1947
+sym_2_1947: la $2, sym_2_1947
+.globl sym_2_1948
+sym_2_1948: la $2, sym_2_1948
+.globl sym_2_1949
+sym_2_1949: la $2, sym_2_1949
+.globl sym_2_1950
+sym_2_1950: la $2, sym_2_1950
+.globl sym_2_1951
+sym_2_1951: la $2, sym_2_1951
+.globl sym_2_1952
+sym_2_1952: la $2, sym_2_1952
+.globl sym_2_1953
+sym_2_1953: la $2, sym_2_1953
+.globl sym_2_1954
+sym_2_1954: la $2, sym_2_1954
+.globl sym_2_1955
+sym_2_1955: la $2, sym_2_1955
+.globl sym_2_1956
+sym_2_1956: la $2, sym_2_1956
+.globl sym_2_1957
+sym_2_1957: la $2, sym_2_1957
+.globl sym_2_1958
+sym_2_1958: la $2, sym_2_1958
+.globl sym_2_1959
+sym_2_1959: la $2, sym_2_1959
+.globl sym_2_1960
+sym_2_1960: la $2, sym_2_1960
+.globl sym_2_1961
+sym_2_1961: la $2, sym_2_1961
+.globl sym_2_1962
+sym_2_1962: la $2, sym_2_1962
+.globl sym_2_1963
+sym_2_1963: la $2, sym_2_1963
+.globl sym_2_1964
+sym_2_1964: la $2, sym_2_1964
+.globl sym_2_1965
+sym_2_1965: la $2, sym_2_1965
+.globl sym_2_1966
+sym_2_1966: la $2, sym_2_1966
+.globl sym_2_1967
+sym_2_1967: la $2, sym_2_1967
+.globl sym_2_1968
+sym_2_1968: la $2, sym_2_1968
+.globl sym_2_1969
+sym_2_1969: la $2, sym_2_1969
+.globl sym_2_1970
+sym_2_1970: la $2, sym_2_1970
+.globl sym_2_1971
+sym_2_1971: la $2, sym_2_1971
+.globl sym_2_1972
+sym_2_1972: la $2, sym_2_1972
+.globl sym_2_1973
+sym_2_1973: la $2, sym_2_1973
+.globl sym_2_1974
+sym_2_1974: la $2, sym_2_1974
+.globl sym_2_1975
+sym_2_1975: la $2, sym_2_1975
+.globl sym_2_1976
+sym_2_1976: la $2, sym_2_1976
+.globl sym_2_1977
+sym_2_1977: la $2, sym_2_1977
+.globl sym_2_1978
+sym_2_1978: la $2, sym_2_1978
+.globl sym_2_1979
+sym_2_1979: la $2, sym_2_1979
+.globl sym_2_1980
+sym_2_1980: la $2, sym_2_1980
+.globl sym_2_1981
+sym_2_1981: la $2, sym_2_1981
+.globl sym_2_1982
+sym_2_1982: la $2, sym_2_1982
+.globl sym_2_1983
+sym_2_1983: la $2, sym_2_1983
+.globl sym_2_1984
+sym_2_1984: la $2, sym_2_1984
+.globl sym_2_1985
+sym_2_1985: la $2, sym_2_1985
+.globl sym_2_1986
+sym_2_1986: la $2, sym_2_1986
+.globl sym_2_1987
+sym_2_1987: la $2, sym_2_1987
+.globl sym_2_1988
+sym_2_1988: la $2, sym_2_1988
+.globl sym_2_1989
+sym_2_1989: la $2, sym_2_1989
+.globl sym_2_1990
+sym_2_1990: la $2, sym_2_1990
+.globl sym_2_1991
+sym_2_1991: la $2, sym_2_1991
+.globl sym_2_1992
+sym_2_1992: la $2, sym_2_1992
+.globl sym_2_1993
+sym_2_1993: la $2, sym_2_1993
+.globl sym_2_1994
+sym_2_1994: la $2, sym_2_1994
+.globl sym_2_1995
+sym_2_1995: la $2, sym_2_1995
+.globl sym_2_1996
+sym_2_1996: la $2, sym_2_1996
+.globl sym_2_1997
+sym_2_1997: la $2, sym_2_1997
+.globl sym_2_1998
+sym_2_1998: la $2, sym_2_1998
+.globl sym_2_1999
+sym_2_1999: la $2, sym_2_1999
+.globl sym_2_2000
+sym_2_2000: la $2, sym_2_2000
+.globl sym_2_2001
+sym_2_2001: la $2, sym_2_2001
+.globl sym_2_2002
+sym_2_2002: la $2, sym_2_2002
+.globl sym_2_2003
+sym_2_2003: la $2, sym_2_2003
+.globl sym_2_2004
+sym_2_2004: la $2, sym_2_2004
+.globl sym_2_2005
+sym_2_2005: la $2, sym_2_2005
+.globl sym_2_2006
+sym_2_2006: la $2, sym_2_2006
+.globl sym_2_2007
+sym_2_2007: la $2, sym_2_2007
+.globl sym_2_2008
+sym_2_2008: la $2, sym_2_2008
+.globl sym_2_2009
+sym_2_2009: la $2, sym_2_2009
+.globl sym_2_2010
+sym_2_2010: la $2, sym_2_2010
+.globl sym_2_2011
+sym_2_2011: la $2, sym_2_2011
+.globl sym_2_2012
+sym_2_2012: la $2, sym_2_2012
+.globl sym_2_2013
+sym_2_2013: la $2, sym_2_2013
+.globl sym_2_2014
+sym_2_2014: la $2, sym_2_2014
+.globl sym_2_2015
+sym_2_2015: la $2, sym_2_2015
+.globl sym_2_2016
+sym_2_2016: la $2, sym_2_2016
+.globl sym_2_2017
+sym_2_2017: la $2, sym_2_2017
+.globl sym_2_2018
+sym_2_2018: la $2, sym_2_2018
+.globl sym_2_2019
+sym_2_2019: la $2, sym_2_2019
+.globl sym_2_2020
+sym_2_2020: la $2, sym_2_2020
+.globl sym_2_2021
+sym_2_2021: la $2, sym_2_2021
+.globl sym_2_2022
+sym_2_2022: la $2, sym_2_2022
+.globl sym_2_2023
+sym_2_2023: la $2, sym_2_2023
+.globl sym_2_2024
+sym_2_2024: la $2, sym_2_2024
+.globl sym_2_2025
+sym_2_2025: la $2, sym_2_2025
+.globl sym_2_2026
+sym_2_2026: la $2, sym_2_2026
+.globl sym_2_2027
+sym_2_2027: la $2, sym_2_2027
+.globl sym_2_2028
+sym_2_2028: la $2, sym_2_2028
+.globl sym_2_2029
+sym_2_2029: la $2, sym_2_2029
+.globl sym_2_2030
+sym_2_2030: la $2, sym_2_2030
+.globl sym_2_2031
+sym_2_2031: la $2, sym_2_2031
+.globl sym_2_2032
+sym_2_2032: la $2, sym_2_2032
+.globl sym_2_2033
+sym_2_2033: la $2, sym_2_2033
+.globl sym_2_2034
+sym_2_2034: la $2, sym_2_2034
+.globl sym_2_2035
+sym_2_2035: la $2, sym_2_2035
+.globl sym_2_2036
+sym_2_2036: la $2, sym_2_2036
+.globl sym_2_2037
+sym_2_2037: la $2, sym_2_2037
+.globl sym_2_2038
+sym_2_2038: la $2, sym_2_2038
+.globl sym_2_2039
+sym_2_2039: la $2, sym_2_2039
+.globl sym_2_2040
+sym_2_2040: la $2, sym_2_2040
+.globl sym_2_2041
+sym_2_2041: la $2, sym_2_2041
+.globl sym_2_2042
+sym_2_2042: la $2, sym_2_2042
+.globl sym_2_2043
+sym_2_2043: la $2, sym_2_2043
+.globl sym_2_2044
+sym_2_2044: la $2, sym_2_2044
+.globl sym_2_2045
+sym_2_2045: la $2, sym_2_2045
+.globl sym_2_2046
+sym_2_2046: la $2, sym_2_2046
+.globl sym_2_2047
+sym_2_2047: la $2, sym_2_2047
+.globl sym_2_2048
+sym_2_2048: la $2, sym_2_2048
+.globl sym_2_2049
+sym_2_2049: la $2, sym_2_2049
+.globl sym_2_2050
+sym_2_2050: la $2, sym_2_2050
+.globl sym_2_2051
+sym_2_2051: la $2, sym_2_2051
+.globl sym_2_2052
+sym_2_2052: la $2, sym_2_2052
+.globl sym_2_2053
+sym_2_2053: la $2, sym_2_2053
+.globl sym_2_2054
+sym_2_2054: la $2, sym_2_2054
+.globl sym_2_2055
+sym_2_2055: la $2, sym_2_2055
+.globl sym_2_2056
+sym_2_2056: la $2, sym_2_2056
+.globl sym_2_2057
+sym_2_2057: la $2, sym_2_2057
+.globl sym_2_2058
+sym_2_2058: la $2, sym_2_2058
+.globl sym_2_2059
+sym_2_2059: la $2, sym_2_2059
+.globl sym_2_2060
+sym_2_2060: la $2, sym_2_2060
+.globl sym_2_2061
+sym_2_2061: la $2, sym_2_2061
+.globl sym_2_2062
+sym_2_2062: la $2, sym_2_2062
+.globl sym_2_2063
+sym_2_2063: la $2, sym_2_2063
+.globl sym_2_2064
+sym_2_2064: la $2, sym_2_2064
+.globl sym_2_2065
+sym_2_2065: la $2, sym_2_2065
+.globl sym_2_2066
+sym_2_2066: la $2, sym_2_2066
+.globl sym_2_2067
+sym_2_2067: la $2, sym_2_2067
+.globl sym_2_2068
+sym_2_2068: la $2, sym_2_2068
+.globl sym_2_2069
+sym_2_2069: la $2, sym_2_2069
+.globl sym_2_2070
+sym_2_2070: la $2, sym_2_2070
+.globl sym_2_2071
+sym_2_2071: la $2, sym_2_2071
+.globl sym_2_2072
+sym_2_2072: la $2, sym_2_2072
+.globl sym_2_2073
+sym_2_2073: la $2, sym_2_2073
+.globl sym_2_2074
+sym_2_2074: la $2, sym_2_2074
+.globl sym_2_2075
+sym_2_2075: la $2, sym_2_2075
+.globl sym_2_2076
+sym_2_2076: la $2, sym_2_2076
+.globl sym_2_2077
+sym_2_2077: la $2, sym_2_2077
+.globl sym_2_2078
+sym_2_2078: la $2, sym_2_2078
+.globl sym_2_2079
+sym_2_2079: la $2, sym_2_2079
+.globl sym_2_2080
+sym_2_2080: la $2, sym_2_2080
+.globl sym_2_2081
+sym_2_2081: la $2, sym_2_2081
+.globl sym_2_2082
+sym_2_2082: la $2, sym_2_2082
+.globl sym_2_2083
+sym_2_2083: la $2, sym_2_2083
+.globl sym_2_2084
+sym_2_2084: la $2, sym_2_2084
+.globl sym_2_2085
+sym_2_2085: la $2, sym_2_2085
+.globl sym_2_2086
+sym_2_2086: la $2, sym_2_2086
+.globl sym_2_2087
+sym_2_2087: la $2, sym_2_2087
+.globl sym_2_2088
+sym_2_2088: la $2, sym_2_2088
+.globl sym_2_2089
+sym_2_2089: la $2, sym_2_2089
+.globl sym_2_2090
+sym_2_2090: la $2, sym_2_2090
+.globl sym_2_2091
+sym_2_2091: la $2, sym_2_2091
+.globl sym_2_2092
+sym_2_2092: la $2, sym_2_2092
+.globl sym_2_2093
+sym_2_2093: la $2, sym_2_2093
+.globl sym_2_2094
+sym_2_2094: la $2, sym_2_2094
+.globl sym_2_2095
+sym_2_2095: la $2, sym_2_2095
+.globl sym_2_2096
+sym_2_2096: la $2, sym_2_2096
+.globl sym_2_2097
+sym_2_2097: la $2, sym_2_2097
+.globl sym_2_2098
+sym_2_2098: la $2, sym_2_2098
+.globl sym_2_2099
+sym_2_2099: la $2, sym_2_2099
+.globl sym_2_2100
+sym_2_2100: la $2, sym_2_2100
+.globl sym_2_2101
+sym_2_2101: la $2, sym_2_2101
+.globl sym_2_2102
+sym_2_2102: la $2, sym_2_2102
+.globl sym_2_2103
+sym_2_2103: la $2, sym_2_2103
+.globl sym_2_2104
+sym_2_2104: la $2, sym_2_2104
+.globl sym_2_2105
+sym_2_2105: la $2, sym_2_2105
+.globl sym_2_2106
+sym_2_2106: la $2, sym_2_2106
+.globl sym_2_2107
+sym_2_2107: la $2, sym_2_2107
+.globl sym_2_2108
+sym_2_2108: la $2, sym_2_2108
+.globl sym_2_2109
+sym_2_2109: la $2, sym_2_2109
+.globl sym_2_2110
+sym_2_2110: la $2, sym_2_2110
+.globl sym_2_2111
+sym_2_2111: la $2, sym_2_2111
+.globl sym_2_2112
+sym_2_2112: la $2, sym_2_2112
+.globl sym_2_2113
+sym_2_2113: la $2, sym_2_2113
+.globl sym_2_2114
+sym_2_2114: la $2, sym_2_2114
+.globl sym_2_2115
+sym_2_2115: la $2, sym_2_2115
+.globl sym_2_2116
+sym_2_2116: la $2, sym_2_2116
+.globl sym_2_2117
+sym_2_2117: la $2, sym_2_2117
+.globl sym_2_2118
+sym_2_2118: la $2, sym_2_2118
+.globl sym_2_2119
+sym_2_2119: la $2, sym_2_2119
+.globl sym_2_2120
+sym_2_2120: la $2, sym_2_2120
+.globl sym_2_2121
+sym_2_2121: la $2, sym_2_2121
+.globl sym_2_2122
+sym_2_2122: la $2, sym_2_2122
+.globl sym_2_2123
+sym_2_2123: la $2, sym_2_2123
+.globl sym_2_2124
+sym_2_2124: la $2, sym_2_2124
+.globl sym_2_2125
+sym_2_2125: la $2, sym_2_2125
+.globl sym_2_2126
+sym_2_2126: la $2, sym_2_2126
+.globl sym_2_2127
+sym_2_2127: la $2, sym_2_2127
+.globl sym_2_2128
+sym_2_2128: la $2, sym_2_2128
+.globl sym_2_2129
+sym_2_2129: la $2, sym_2_2129
+.globl sym_2_2130
+sym_2_2130: la $2, sym_2_2130
+.globl sym_2_2131
+sym_2_2131: la $2, sym_2_2131
+.globl sym_2_2132
+sym_2_2132: la $2, sym_2_2132
+.globl sym_2_2133
+sym_2_2133: la $2, sym_2_2133
+.globl sym_2_2134
+sym_2_2134: la $2, sym_2_2134
+.globl sym_2_2135
+sym_2_2135: la $2, sym_2_2135
+.globl sym_2_2136
+sym_2_2136: la $2, sym_2_2136
+.globl sym_2_2137
+sym_2_2137: la $2, sym_2_2137
+.globl sym_2_2138
+sym_2_2138: la $2, sym_2_2138
+.globl sym_2_2139
+sym_2_2139: la $2, sym_2_2139
+.globl sym_2_2140
+sym_2_2140: la $2, sym_2_2140
+.globl sym_2_2141
+sym_2_2141: la $2, sym_2_2141
+.globl sym_2_2142
+sym_2_2142: la $2, sym_2_2142
+.globl sym_2_2143
+sym_2_2143: la $2, sym_2_2143
+.globl sym_2_2144
+sym_2_2144: la $2, sym_2_2144
+.globl sym_2_2145
+sym_2_2145: la $2, sym_2_2145
+.globl sym_2_2146
+sym_2_2146: la $2, sym_2_2146
+.globl sym_2_2147
+sym_2_2147: la $2, sym_2_2147
+.globl sym_2_2148
+sym_2_2148: la $2, sym_2_2148
+.globl sym_2_2149
+sym_2_2149: la $2, sym_2_2149
+.globl sym_2_2150
+sym_2_2150: la $2, sym_2_2150
+.globl sym_2_2151
+sym_2_2151: la $2, sym_2_2151
+.globl sym_2_2152
+sym_2_2152: la $2, sym_2_2152
+.globl sym_2_2153
+sym_2_2153: la $2, sym_2_2153
+.globl sym_2_2154
+sym_2_2154: la $2, sym_2_2154
+.globl sym_2_2155
+sym_2_2155: la $2, sym_2_2155
+.globl sym_2_2156
+sym_2_2156: la $2, sym_2_2156
+.globl sym_2_2157
+sym_2_2157: la $2, sym_2_2157
+.globl sym_2_2158
+sym_2_2158: la $2, sym_2_2158
+.globl sym_2_2159
+sym_2_2159: la $2, sym_2_2159
+.globl sym_2_2160
+sym_2_2160: la $2, sym_2_2160
+.globl sym_2_2161
+sym_2_2161: la $2, sym_2_2161
+.globl sym_2_2162
+sym_2_2162: la $2, sym_2_2162
+.globl sym_2_2163
+sym_2_2163: la $2, sym_2_2163
+.globl sym_2_2164
+sym_2_2164: la $2, sym_2_2164
+.globl sym_2_2165
+sym_2_2165: la $2, sym_2_2165
+.globl sym_2_2166
+sym_2_2166: la $2, sym_2_2166
+.globl sym_2_2167
+sym_2_2167: la $2, sym_2_2167
+.globl sym_2_2168
+sym_2_2168: la $2, sym_2_2168
+.globl sym_2_2169
+sym_2_2169: la $2, sym_2_2169
+.globl sym_2_2170
+sym_2_2170: la $2, sym_2_2170
+.globl sym_2_2171
+sym_2_2171: la $2, sym_2_2171
+.globl sym_2_2172
+sym_2_2172: la $2, sym_2_2172
+.globl sym_2_2173
+sym_2_2173: la $2, sym_2_2173
+.globl sym_2_2174
+sym_2_2174: la $2, sym_2_2174
+.globl sym_2_2175
+sym_2_2175: la $2, sym_2_2175
+.globl sym_2_2176
+sym_2_2176: la $2, sym_2_2176
+.globl sym_2_2177
+sym_2_2177: la $2, sym_2_2177
+.globl sym_2_2178
+sym_2_2178: la $2, sym_2_2178
+.globl sym_2_2179
+sym_2_2179: la $2, sym_2_2179
+.globl sym_2_2180
+sym_2_2180: la $2, sym_2_2180
+.globl sym_2_2181
+sym_2_2181: la $2, sym_2_2181
+.globl sym_2_2182
+sym_2_2182: la $2, sym_2_2182
+.globl sym_2_2183
+sym_2_2183: la $2, sym_2_2183
+.globl sym_2_2184
+sym_2_2184: la $2, sym_2_2184
+.globl sym_2_2185
+sym_2_2185: la $2, sym_2_2185
+.globl sym_2_2186
+sym_2_2186: la $2, sym_2_2186
+.globl sym_2_2187
+sym_2_2187: la $2, sym_2_2187
+.globl sym_2_2188
+sym_2_2188: la $2, sym_2_2188
+.globl sym_2_2189
+sym_2_2189: la $2, sym_2_2189
+.globl sym_2_2190
+sym_2_2190: la $2, sym_2_2190
+.globl sym_2_2191
+sym_2_2191: la $2, sym_2_2191
+.globl sym_2_2192
+sym_2_2192: la $2, sym_2_2192
+.globl sym_2_2193
+sym_2_2193: la $2, sym_2_2193
+.globl sym_2_2194
+sym_2_2194: la $2, sym_2_2194
+.globl sym_2_2195
+sym_2_2195: la $2, sym_2_2195
+.globl sym_2_2196
+sym_2_2196: la $2, sym_2_2196
+.globl sym_2_2197
+sym_2_2197: la $2, sym_2_2197
+.globl sym_2_2198
+sym_2_2198: la $2, sym_2_2198
+.globl sym_2_2199
+sym_2_2199: la $2, sym_2_2199
+.globl sym_2_2200
+sym_2_2200: la $2, sym_2_2200
+.globl sym_2_2201
+sym_2_2201: la $2, sym_2_2201
+.globl sym_2_2202
+sym_2_2202: la $2, sym_2_2202
+.globl sym_2_2203
+sym_2_2203: la $2, sym_2_2203
+.globl sym_2_2204
+sym_2_2204: la $2, sym_2_2204
+.globl sym_2_2205
+sym_2_2205: la $2, sym_2_2205
+.globl sym_2_2206
+sym_2_2206: la $2, sym_2_2206
+.globl sym_2_2207
+sym_2_2207: la $2, sym_2_2207
+.globl sym_2_2208
+sym_2_2208: la $2, sym_2_2208
+.globl sym_2_2209
+sym_2_2209: la $2, sym_2_2209
+.globl sym_2_2210
+sym_2_2210: la $2, sym_2_2210
+.globl sym_2_2211
+sym_2_2211: la $2, sym_2_2211
+.globl sym_2_2212
+sym_2_2212: la $2, sym_2_2212
+.globl sym_2_2213
+sym_2_2213: la $2, sym_2_2213
+.globl sym_2_2214
+sym_2_2214: la $2, sym_2_2214
+.globl sym_2_2215
+sym_2_2215: la $2, sym_2_2215
+.globl sym_2_2216
+sym_2_2216: la $2, sym_2_2216
+.globl sym_2_2217
+sym_2_2217: la $2, sym_2_2217
+.globl sym_2_2218
+sym_2_2218: la $2, sym_2_2218
+.globl sym_2_2219
+sym_2_2219: la $2, sym_2_2219
+.globl sym_2_2220
+sym_2_2220: la $2, sym_2_2220
+.globl sym_2_2221
+sym_2_2221: la $2, sym_2_2221
+.globl sym_2_2222
+sym_2_2222: la $2, sym_2_2222
+.globl sym_2_2223
+sym_2_2223: la $2, sym_2_2223
+.globl sym_2_2224
+sym_2_2224: la $2, sym_2_2224
+.globl sym_2_2225
+sym_2_2225: la $2, sym_2_2225
+.globl sym_2_2226
+sym_2_2226: la $2, sym_2_2226
+.globl sym_2_2227
+sym_2_2227: la $2, sym_2_2227
+.globl sym_2_2228
+sym_2_2228: la $2, sym_2_2228
+.globl sym_2_2229
+sym_2_2229: la $2, sym_2_2229
+.globl sym_2_2230
+sym_2_2230: la $2, sym_2_2230
+.globl sym_2_2231
+sym_2_2231: la $2, sym_2_2231
+.globl sym_2_2232
+sym_2_2232: la $2, sym_2_2232
+.globl sym_2_2233
+sym_2_2233: la $2, sym_2_2233
+.globl sym_2_2234
+sym_2_2234: la $2, sym_2_2234
+.globl sym_2_2235
+sym_2_2235: la $2, sym_2_2235
+.globl sym_2_2236
+sym_2_2236: la $2, sym_2_2236
+.globl sym_2_2237
+sym_2_2237: la $2, sym_2_2237
+.globl sym_2_2238
+sym_2_2238: la $2, sym_2_2238
+.globl sym_2_2239
+sym_2_2239: la $2, sym_2_2239
+.globl sym_2_2240
+sym_2_2240: la $2, sym_2_2240
+.globl sym_2_2241
+sym_2_2241: la $2, sym_2_2241
+.globl sym_2_2242
+sym_2_2242: la $2, sym_2_2242
+.globl sym_2_2243
+sym_2_2243: la $2, sym_2_2243
+.globl sym_2_2244
+sym_2_2244: la $2, sym_2_2244
+.globl sym_2_2245
+sym_2_2245: la $2, sym_2_2245
+.globl sym_2_2246
+sym_2_2246: la $2, sym_2_2246
+.globl sym_2_2247
+sym_2_2247: la $2, sym_2_2247
+.globl sym_2_2248
+sym_2_2248: la $2, sym_2_2248
+.globl sym_2_2249
+sym_2_2249: la $2, sym_2_2249
+.globl sym_2_2250
+sym_2_2250: la $2, sym_2_2250
+.globl sym_2_2251
+sym_2_2251: la $2, sym_2_2251
+.globl sym_2_2252
+sym_2_2252: la $2, sym_2_2252
+.globl sym_2_2253
+sym_2_2253: la $2, sym_2_2253
+.globl sym_2_2254
+sym_2_2254: la $2, sym_2_2254
+.globl sym_2_2255
+sym_2_2255: la $2, sym_2_2255
+.globl sym_2_2256
+sym_2_2256: la $2, sym_2_2256
+.globl sym_2_2257
+sym_2_2257: la $2, sym_2_2257
+.globl sym_2_2258
+sym_2_2258: la $2, sym_2_2258
+.globl sym_2_2259
+sym_2_2259: la $2, sym_2_2259
+.globl sym_2_2260
+sym_2_2260: la $2, sym_2_2260
+.globl sym_2_2261
+sym_2_2261: la $2, sym_2_2261
+.globl sym_2_2262
+sym_2_2262: la $2, sym_2_2262
+.globl sym_2_2263
+sym_2_2263: la $2, sym_2_2263
+.globl sym_2_2264
+sym_2_2264: la $2, sym_2_2264
+.globl sym_2_2265
+sym_2_2265: la $2, sym_2_2265
+.globl sym_2_2266
+sym_2_2266: la $2, sym_2_2266
+.globl sym_2_2267
+sym_2_2267: la $2, sym_2_2267
+.globl sym_2_2268
+sym_2_2268: la $2, sym_2_2268
+.globl sym_2_2269
+sym_2_2269: la $2, sym_2_2269
+.globl sym_2_2270
+sym_2_2270: la $2, sym_2_2270
+.globl sym_2_2271
+sym_2_2271: la $2, sym_2_2271
+.globl sym_2_2272
+sym_2_2272: la $2, sym_2_2272
+.globl sym_2_2273
+sym_2_2273: la $2, sym_2_2273
+.globl sym_2_2274
+sym_2_2274: la $2, sym_2_2274
+.globl sym_2_2275
+sym_2_2275: la $2, sym_2_2275
+.globl sym_2_2276
+sym_2_2276: la $2, sym_2_2276
+.globl sym_2_2277
+sym_2_2277: la $2, sym_2_2277
+.globl sym_2_2278
+sym_2_2278: la $2, sym_2_2278
+.globl sym_2_2279
+sym_2_2279: la $2, sym_2_2279
+.globl sym_2_2280
+sym_2_2280: la $2, sym_2_2280
+.globl sym_2_2281
+sym_2_2281: la $2, sym_2_2281
+.globl sym_2_2282
+sym_2_2282: la $2, sym_2_2282
+.globl sym_2_2283
+sym_2_2283: la $2, sym_2_2283
+.globl sym_2_2284
+sym_2_2284: la $2, sym_2_2284
+.globl sym_2_2285
+sym_2_2285: la $2, sym_2_2285
+.globl sym_2_2286
+sym_2_2286: la $2, sym_2_2286
+.globl sym_2_2287
+sym_2_2287: la $2, sym_2_2287
+.globl sym_2_2288
+sym_2_2288: la $2, sym_2_2288
+.globl sym_2_2289
+sym_2_2289: la $2, sym_2_2289
+.globl sym_2_2290
+sym_2_2290: la $2, sym_2_2290
+.globl sym_2_2291
+sym_2_2291: la $2, sym_2_2291
+.globl sym_2_2292
+sym_2_2292: la $2, sym_2_2292
+.globl sym_2_2293
+sym_2_2293: la $2, sym_2_2293
+.globl sym_2_2294
+sym_2_2294: la $2, sym_2_2294
+.globl sym_2_2295
+sym_2_2295: la $2, sym_2_2295
+.globl sym_2_2296
+sym_2_2296: la $2, sym_2_2296
+.globl sym_2_2297
+sym_2_2297: la $2, sym_2_2297
+.globl sym_2_2298
+sym_2_2298: la $2, sym_2_2298
+.globl sym_2_2299
+sym_2_2299: la $2, sym_2_2299
+.globl sym_2_2300
+sym_2_2300: la $2, sym_2_2300
+.globl sym_2_2301
+sym_2_2301: la $2, sym_2_2301
+.globl sym_2_2302
+sym_2_2302: la $2, sym_2_2302
+.globl sym_2_2303
+sym_2_2303: la $2, sym_2_2303
+.globl sym_2_2304
+sym_2_2304: la $2, sym_2_2304
+.globl sym_2_2305
+sym_2_2305: la $2, sym_2_2305
+.globl sym_2_2306
+sym_2_2306: la $2, sym_2_2306
+.globl sym_2_2307
+sym_2_2307: la $2, sym_2_2307
+.globl sym_2_2308
+sym_2_2308: la $2, sym_2_2308
+.globl sym_2_2309
+sym_2_2309: la $2, sym_2_2309
+.globl sym_2_2310
+sym_2_2310: la $2, sym_2_2310
+.globl sym_2_2311
+sym_2_2311: la $2, sym_2_2311
+.globl sym_2_2312
+sym_2_2312: la $2, sym_2_2312
+.globl sym_2_2313
+sym_2_2313: la $2, sym_2_2313
+.globl sym_2_2314
+sym_2_2314: la $2, sym_2_2314
+.globl sym_2_2315
+sym_2_2315: la $2, sym_2_2315
+.globl sym_2_2316
+sym_2_2316: la $2, sym_2_2316
+.globl sym_2_2317
+sym_2_2317: la $2, sym_2_2317
+.globl sym_2_2318
+sym_2_2318: la $2, sym_2_2318
+.globl sym_2_2319
+sym_2_2319: la $2, sym_2_2319
+.globl sym_2_2320
+sym_2_2320: la $2, sym_2_2320
+.globl sym_2_2321
+sym_2_2321: la $2, sym_2_2321
+.globl sym_2_2322
+sym_2_2322: la $2, sym_2_2322
+.globl sym_2_2323
+sym_2_2323: la $2, sym_2_2323
+.globl sym_2_2324
+sym_2_2324: la $2, sym_2_2324
+.globl sym_2_2325
+sym_2_2325: la $2, sym_2_2325
+.globl sym_2_2326
+sym_2_2326: la $2, sym_2_2326
+.globl sym_2_2327
+sym_2_2327: la $2, sym_2_2327
+.globl sym_2_2328
+sym_2_2328: la $2, sym_2_2328
+.globl sym_2_2329
+sym_2_2329: la $2, sym_2_2329
+.globl sym_2_2330
+sym_2_2330: la $2, sym_2_2330
+.globl sym_2_2331
+sym_2_2331: la $2, sym_2_2331
+.globl sym_2_2332
+sym_2_2332: la $2, sym_2_2332
+.globl sym_2_2333
+sym_2_2333: la $2, sym_2_2333
+.globl sym_2_2334
+sym_2_2334: la $2, sym_2_2334
+.globl sym_2_2335
+sym_2_2335: la $2, sym_2_2335
+.globl sym_2_2336
+sym_2_2336: la $2, sym_2_2336
+.globl sym_2_2337
+sym_2_2337: la $2, sym_2_2337
+.globl sym_2_2338
+sym_2_2338: la $2, sym_2_2338
+.globl sym_2_2339
+sym_2_2339: la $2, sym_2_2339
+.globl sym_2_2340
+sym_2_2340: la $2, sym_2_2340
+.globl sym_2_2341
+sym_2_2341: la $2, sym_2_2341
+.globl sym_2_2342
+sym_2_2342: la $2, sym_2_2342
+.globl sym_2_2343
+sym_2_2343: la $2, sym_2_2343
+.globl sym_2_2344
+sym_2_2344: la $2, sym_2_2344
+.globl sym_2_2345
+sym_2_2345: la $2, sym_2_2345
+.globl sym_2_2346
+sym_2_2346: la $2, sym_2_2346
+.globl sym_2_2347
+sym_2_2347: la $2, sym_2_2347
+.globl sym_2_2348
+sym_2_2348: la $2, sym_2_2348
+.globl sym_2_2349
+sym_2_2349: la $2, sym_2_2349
+.globl sym_2_2350
+sym_2_2350: la $2, sym_2_2350
+.globl sym_2_2351
+sym_2_2351: la $2, sym_2_2351
+.globl sym_2_2352
+sym_2_2352: la $2, sym_2_2352
+.globl sym_2_2353
+sym_2_2353: la $2, sym_2_2353
+.globl sym_2_2354
+sym_2_2354: la $2, sym_2_2354
+.globl sym_2_2355
+sym_2_2355: la $2, sym_2_2355
+.globl sym_2_2356
+sym_2_2356: la $2, sym_2_2356
+.globl sym_2_2357
+sym_2_2357: la $2, sym_2_2357
+.globl sym_2_2358
+sym_2_2358: la $2, sym_2_2358
+.globl sym_2_2359
+sym_2_2359: la $2, sym_2_2359
+.globl sym_2_2360
+sym_2_2360: la $2, sym_2_2360
+.globl sym_2_2361
+sym_2_2361: la $2, sym_2_2361
+.globl sym_2_2362
+sym_2_2362: la $2, sym_2_2362
+.globl sym_2_2363
+sym_2_2363: la $2, sym_2_2363
+.globl sym_2_2364
+sym_2_2364: la $2, sym_2_2364
+.globl sym_2_2365
+sym_2_2365: la $2, sym_2_2365
+.globl sym_2_2366
+sym_2_2366: la $2, sym_2_2366
+.globl sym_2_2367
+sym_2_2367: la $2, sym_2_2367
+.globl sym_2_2368
+sym_2_2368: la $2, sym_2_2368
+.globl sym_2_2369
+sym_2_2369: la $2, sym_2_2369
+.globl sym_2_2370
+sym_2_2370: la $2, sym_2_2370
+.globl sym_2_2371
+sym_2_2371: la $2, sym_2_2371
+.globl sym_2_2372
+sym_2_2372: la $2, sym_2_2372
+.globl sym_2_2373
+sym_2_2373: la $2, sym_2_2373
+.globl sym_2_2374
+sym_2_2374: la $2, sym_2_2374
+.globl sym_2_2375
+sym_2_2375: la $2, sym_2_2375
+.globl sym_2_2376
+sym_2_2376: la $2, sym_2_2376
+.globl sym_2_2377
+sym_2_2377: la $2, sym_2_2377
+.globl sym_2_2378
+sym_2_2378: la $2, sym_2_2378
+.globl sym_2_2379
+sym_2_2379: la $2, sym_2_2379
+.globl sym_2_2380
+sym_2_2380: la $2, sym_2_2380
+.globl sym_2_2381
+sym_2_2381: la $2, sym_2_2381
+.globl sym_2_2382
+sym_2_2382: la $2, sym_2_2382
+.globl sym_2_2383
+sym_2_2383: la $2, sym_2_2383
+.globl sym_2_2384
+sym_2_2384: la $2, sym_2_2384
+.globl sym_2_2385
+sym_2_2385: la $2, sym_2_2385
+.globl sym_2_2386
+sym_2_2386: la $2, sym_2_2386
+.globl sym_2_2387
+sym_2_2387: la $2, sym_2_2387
+.globl sym_2_2388
+sym_2_2388: la $2, sym_2_2388
+.globl sym_2_2389
+sym_2_2389: la $2, sym_2_2389
+.globl sym_2_2390
+sym_2_2390: la $2, sym_2_2390
+.globl sym_2_2391
+sym_2_2391: la $2, sym_2_2391
+.globl sym_2_2392
+sym_2_2392: la $2, sym_2_2392
+.globl sym_2_2393
+sym_2_2393: la $2, sym_2_2393
+.globl sym_2_2394
+sym_2_2394: la $2, sym_2_2394
+.globl sym_2_2395
+sym_2_2395: la $2, sym_2_2395
+.globl sym_2_2396
+sym_2_2396: la $2, sym_2_2396
+.globl sym_2_2397
+sym_2_2397: la $2, sym_2_2397
+.globl sym_2_2398
+sym_2_2398: la $2, sym_2_2398
+.globl sym_2_2399
+sym_2_2399: la $2, sym_2_2399
+.globl sym_2_2400
+sym_2_2400: la $2, sym_2_2400
+.globl sym_2_2401
+sym_2_2401: la $2, sym_2_2401
+.globl sym_2_2402
+sym_2_2402: la $2, sym_2_2402
+.globl sym_2_2403
+sym_2_2403: la $2, sym_2_2403
+.globl sym_2_2404
+sym_2_2404: la $2, sym_2_2404
+.globl sym_2_2405
+sym_2_2405: la $2, sym_2_2405
+.globl sym_2_2406
+sym_2_2406: la $2, sym_2_2406
+.globl sym_2_2407
+sym_2_2407: la $2, sym_2_2407
+.globl sym_2_2408
+sym_2_2408: la $2, sym_2_2408
+.globl sym_2_2409
+sym_2_2409: la $2, sym_2_2409
+.globl sym_2_2410
+sym_2_2410: la $2, sym_2_2410
+.globl sym_2_2411
+sym_2_2411: la $2, sym_2_2411
+.globl sym_2_2412
+sym_2_2412: la $2, sym_2_2412
+.globl sym_2_2413
+sym_2_2413: la $2, sym_2_2413
+.globl sym_2_2414
+sym_2_2414: la $2, sym_2_2414
+.globl sym_2_2415
+sym_2_2415: la $2, sym_2_2415
+.globl sym_2_2416
+sym_2_2416: la $2, sym_2_2416
+.globl sym_2_2417
+sym_2_2417: la $2, sym_2_2417
+.globl sym_2_2418
+sym_2_2418: la $2, sym_2_2418
+.globl sym_2_2419
+sym_2_2419: la $2, sym_2_2419
+.globl sym_2_2420
+sym_2_2420: la $2, sym_2_2420
+.globl sym_2_2421
+sym_2_2421: la $2, sym_2_2421
+.globl sym_2_2422
+sym_2_2422: la $2, sym_2_2422
+.globl sym_2_2423
+sym_2_2423: la $2, sym_2_2423
+.globl sym_2_2424
+sym_2_2424: la $2, sym_2_2424
+.globl sym_2_2425
+sym_2_2425: la $2, sym_2_2425
+.globl sym_2_2426
+sym_2_2426: la $2, sym_2_2426
+.globl sym_2_2427
+sym_2_2427: la $2, sym_2_2427
+.globl sym_2_2428
+sym_2_2428: la $2, sym_2_2428
+.globl sym_2_2429
+sym_2_2429: la $2, sym_2_2429
+.globl sym_2_2430
+sym_2_2430: la $2, sym_2_2430
+.globl sym_2_2431
+sym_2_2431: la $2, sym_2_2431
+.globl sym_2_2432
+sym_2_2432: la $2, sym_2_2432
+.globl sym_2_2433
+sym_2_2433: la $2, sym_2_2433
+.globl sym_2_2434
+sym_2_2434: la $2, sym_2_2434
+.globl sym_2_2435
+sym_2_2435: la $2, sym_2_2435
+.globl sym_2_2436
+sym_2_2436: la $2, sym_2_2436
+.globl sym_2_2437
+sym_2_2437: la $2, sym_2_2437
+.globl sym_2_2438
+sym_2_2438: la $2, sym_2_2438
+.globl sym_2_2439
+sym_2_2439: la $2, sym_2_2439
+.globl sym_2_2440
+sym_2_2440: la $2, sym_2_2440
+.globl sym_2_2441
+sym_2_2441: la $2, sym_2_2441
+.globl sym_2_2442
+sym_2_2442: la $2, sym_2_2442
+.globl sym_2_2443
+sym_2_2443: la $2, sym_2_2443
+.globl sym_2_2444
+sym_2_2444: la $2, sym_2_2444
+.globl sym_2_2445
+sym_2_2445: la $2, sym_2_2445
+.globl sym_2_2446
+sym_2_2446: la $2, sym_2_2446
+.globl sym_2_2447
+sym_2_2447: la $2, sym_2_2447
+.globl sym_2_2448
+sym_2_2448: la $2, sym_2_2448
+.globl sym_2_2449
+sym_2_2449: la $2, sym_2_2449
+.globl sym_2_2450
+sym_2_2450: la $2, sym_2_2450
+.globl sym_2_2451
+sym_2_2451: la $2, sym_2_2451
+.globl sym_2_2452
+sym_2_2452: la $2, sym_2_2452
+.globl sym_2_2453
+sym_2_2453: la $2, sym_2_2453
+.globl sym_2_2454
+sym_2_2454: la $2, sym_2_2454
+.globl sym_2_2455
+sym_2_2455: la $2, sym_2_2455
+.globl sym_2_2456
+sym_2_2456: la $2, sym_2_2456
+.globl sym_2_2457
+sym_2_2457: la $2, sym_2_2457
+.globl sym_2_2458
+sym_2_2458: la $2, sym_2_2458
+.globl sym_2_2459
+sym_2_2459: la $2, sym_2_2459
+.globl sym_2_2460
+sym_2_2460: la $2, sym_2_2460
+.globl sym_2_2461
+sym_2_2461: la $2, sym_2_2461
+.globl sym_2_2462
+sym_2_2462: la $2, sym_2_2462
+.globl sym_2_2463
+sym_2_2463: la $2, sym_2_2463
+.globl sym_2_2464
+sym_2_2464: la $2, sym_2_2464
+.globl sym_2_2465
+sym_2_2465: la $2, sym_2_2465
+.globl sym_2_2466
+sym_2_2466: la $2, sym_2_2466
+.globl sym_2_2467
+sym_2_2467: la $2, sym_2_2467
+.globl sym_2_2468
+sym_2_2468: la $2, sym_2_2468
+.globl sym_2_2469
+sym_2_2469: la $2, sym_2_2469
+.globl sym_2_2470
+sym_2_2470: la $2, sym_2_2470
+.globl sym_2_2471
+sym_2_2471: la $2, sym_2_2471
+.globl sym_2_2472
+sym_2_2472: la $2, sym_2_2472
+.globl sym_2_2473
+sym_2_2473: la $2, sym_2_2473
+.globl sym_2_2474
+sym_2_2474: la $2, sym_2_2474
+.globl sym_2_2475
+sym_2_2475: la $2, sym_2_2475
+.globl sym_2_2476
+sym_2_2476: la $2, sym_2_2476
+.globl sym_2_2477
+sym_2_2477: la $2, sym_2_2477
+.globl sym_2_2478
+sym_2_2478: la $2, sym_2_2478
+.globl sym_2_2479
+sym_2_2479: la $2, sym_2_2479
+.globl sym_2_2480
+sym_2_2480: la $2, sym_2_2480
+.globl sym_2_2481
+sym_2_2481: la $2, sym_2_2481
+.globl sym_2_2482
+sym_2_2482: la $2, sym_2_2482
+.globl sym_2_2483
+sym_2_2483: la $2, sym_2_2483
+.globl sym_2_2484
+sym_2_2484: la $2, sym_2_2484
+.globl sym_2_2485
+sym_2_2485: la $2, sym_2_2485
+.globl sym_2_2486
+sym_2_2486: la $2, sym_2_2486
+.globl sym_2_2487
+sym_2_2487: la $2, sym_2_2487
+.globl sym_2_2488
+sym_2_2488: la $2, sym_2_2488
+.globl sym_2_2489
+sym_2_2489: la $2, sym_2_2489
+.globl sym_2_2490
+sym_2_2490: la $2, sym_2_2490
+.globl sym_2_2491
+sym_2_2491: la $2, sym_2_2491
+.globl sym_2_2492
+sym_2_2492: la $2, sym_2_2492
+.globl sym_2_2493
+sym_2_2493: la $2, sym_2_2493
+.globl sym_2_2494
+sym_2_2494: la $2, sym_2_2494
+.globl sym_2_2495
+sym_2_2495: la $2, sym_2_2495
+.globl sym_2_2496
+sym_2_2496: la $2, sym_2_2496
+.globl sym_2_2497
+sym_2_2497: la $2, sym_2_2497
+.globl sym_2_2498
+sym_2_2498: la $2, sym_2_2498
+.globl sym_2_2499
+sym_2_2499: la $2, sym_2_2499
+.globl sym_2_2500
+sym_2_2500: la $2, sym_2_2500
+.globl sym_2_2501
+sym_2_2501: la $2, sym_2_2501
+.globl sym_2_2502
+sym_2_2502: la $2, sym_2_2502
+.globl sym_2_2503
+sym_2_2503: la $2, sym_2_2503
+.globl sym_2_2504
+sym_2_2504: la $2, sym_2_2504
+.globl sym_2_2505
+sym_2_2505: la $2, sym_2_2505
+.globl sym_2_2506
+sym_2_2506: la $2, sym_2_2506
+.globl sym_2_2507
+sym_2_2507: la $2, sym_2_2507
+.globl sym_2_2508
+sym_2_2508: la $2, sym_2_2508
+.globl sym_2_2509
+sym_2_2509: la $2, sym_2_2509
+.globl sym_2_2510
+sym_2_2510: la $2, sym_2_2510
+.globl sym_2_2511
+sym_2_2511: la $2, sym_2_2511
+.globl sym_2_2512
+sym_2_2512: la $2, sym_2_2512
+.globl sym_2_2513
+sym_2_2513: la $2, sym_2_2513
+.globl sym_2_2514
+sym_2_2514: la $2, sym_2_2514
+.globl sym_2_2515
+sym_2_2515: la $2, sym_2_2515
+.globl sym_2_2516
+sym_2_2516: la $2, sym_2_2516
+.globl sym_2_2517
+sym_2_2517: la $2, sym_2_2517
+.globl sym_2_2518
+sym_2_2518: la $2, sym_2_2518
+.globl sym_2_2519
+sym_2_2519: la $2, sym_2_2519
+.globl sym_2_2520
+sym_2_2520: la $2, sym_2_2520
+.globl sym_2_2521
+sym_2_2521: la $2, sym_2_2521
+.globl sym_2_2522
+sym_2_2522: la $2, sym_2_2522
+.globl sym_2_2523
+sym_2_2523: la $2, sym_2_2523
+.globl sym_2_2524
+sym_2_2524: la $2, sym_2_2524
+.globl sym_2_2525
+sym_2_2525: la $2, sym_2_2525
+.globl sym_2_2526
+sym_2_2526: la $2, sym_2_2526
+.globl sym_2_2527
+sym_2_2527: la $2, sym_2_2527
+.globl sym_2_2528
+sym_2_2528: la $2, sym_2_2528
+.globl sym_2_2529
+sym_2_2529: la $2, sym_2_2529
+.globl sym_2_2530
+sym_2_2530: la $2, sym_2_2530
+.globl sym_2_2531
+sym_2_2531: la $2, sym_2_2531
+.globl sym_2_2532
+sym_2_2532: la $2, sym_2_2532
+.globl sym_2_2533
+sym_2_2533: la $2, sym_2_2533
+.globl sym_2_2534
+sym_2_2534: la $2, sym_2_2534
+.globl sym_2_2535
+sym_2_2535: la $2, sym_2_2535
+.globl sym_2_2536
+sym_2_2536: la $2, sym_2_2536
+.globl sym_2_2537
+sym_2_2537: la $2, sym_2_2537
+.globl sym_2_2538
+sym_2_2538: la $2, sym_2_2538
+.globl sym_2_2539
+sym_2_2539: la $2, sym_2_2539
+.globl sym_2_2540
+sym_2_2540: la $2, sym_2_2540
+.globl sym_2_2541
+sym_2_2541: la $2, sym_2_2541
+.globl sym_2_2542
+sym_2_2542: la $2, sym_2_2542
+.globl sym_2_2543
+sym_2_2543: la $2, sym_2_2543
+.globl sym_2_2544
+sym_2_2544: la $2, sym_2_2544
+.globl sym_2_2545
+sym_2_2545: la $2, sym_2_2545
+.globl sym_2_2546
+sym_2_2546: la $2, sym_2_2546
+.globl sym_2_2547
+sym_2_2547: la $2, sym_2_2547
+.globl sym_2_2548
+sym_2_2548: la $2, sym_2_2548
+.globl sym_2_2549
+sym_2_2549: la $2, sym_2_2549
+.globl sym_2_2550
+sym_2_2550: la $2, sym_2_2550
+.globl sym_2_2551
+sym_2_2551: la $2, sym_2_2551
+.globl sym_2_2552
+sym_2_2552: la $2, sym_2_2552
+.globl sym_2_2553
+sym_2_2553: la $2, sym_2_2553
+.globl sym_2_2554
+sym_2_2554: la $2, sym_2_2554
+.globl sym_2_2555
+sym_2_2555: la $2, sym_2_2555
+.globl sym_2_2556
+sym_2_2556: la $2, sym_2_2556
+.globl sym_2_2557
+sym_2_2557: la $2, sym_2_2557
+.globl sym_2_2558
+sym_2_2558: la $2, sym_2_2558
+.globl sym_2_2559
+sym_2_2559: la $2, sym_2_2559
+.globl sym_2_2560
+sym_2_2560: la $2, sym_2_2560
+.globl sym_2_2561
+sym_2_2561: la $2, sym_2_2561
+.globl sym_2_2562
+sym_2_2562: la $2, sym_2_2562
+.globl sym_2_2563
+sym_2_2563: la $2, sym_2_2563
+.globl sym_2_2564
+sym_2_2564: la $2, sym_2_2564
+.globl sym_2_2565
+sym_2_2565: la $2, sym_2_2565
+.globl sym_2_2566
+sym_2_2566: la $2, sym_2_2566
+.globl sym_2_2567
+sym_2_2567: la $2, sym_2_2567
+.globl sym_2_2568
+sym_2_2568: la $2, sym_2_2568
+.globl sym_2_2569
+sym_2_2569: la $2, sym_2_2569
+.globl sym_2_2570
+sym_2_2570: la $2, sym_2_2570
+.globl sym_2_2571
+sym_2_2571: la $2, sym_2_2571
+.globl sym_2_2572
+sym_2_2572: la $2, sym_2_2572
+.globl sym_2_2573
+sym_2_2573: la $2, sym_2_2573
+.globl sym_2_2574
+sym_2_2574: la $2, sym_2_2574
+.globl sym_2_2575
+sym_2_2575: la $2, sym_2_2575
+.globl sym_2_2576
+sym_2_2576: la $2, sym_2_2576
+.globl sym_2_2577
+sym_2_2577: la $2, sym_2_2577
+.globl sym_2_2578
+sym_2_2578: la $2, sym_2_2578
+.globl sym_2_2579
+sym_2_2579: la $2, sym_2_2579
+.globl sym_2_2580
+sym_2_2580: la $2, sym_2_2580
+.globl sym_2_2581
+sym_2_2581: la $2, sym_2_2581
+.globl sym_2_2582
+sym_2_2582: la $2, sym_2_2582
+.globl sym_2_2583
+sym_2_2583: la $2, sym_2_2583
+.globl sym_2_2584
+sym_2_2584: la $2, sym_2_2584
+.globl sym_2_2585
+sym_2_2585: la $2, sym_2_2585
+.globl sym_2_2586
+sym_2_2586: la $2, sym_2_2586
+.globl sym_2_2587
+sym_2_2587: la $2, sym_2_2587
+.globl sym_2_2588
+sym_2_2588: la $2, sym_2_2588
+.globl sym_2_2589
+sym_2_2589: la $2, sym_2_2589
+.globl sym_2_2590
+sym_2_2590: la $2, sym_2_2590
+.globl sym_2_2591
+sym_2_2591: la $2, sym_2_2591
+.globl sym_2_2592
+sym_2_2592: la $2, sym_2_2592
+.globl sym_2_2593
+sym_2_2593: la $2, sym_2_2593
+.globl sym_2_2594
+sym_2_2594: la $2, sym_2_2594
+.globl sym_2_2595
+sym_2_2595: la $2, sym_2_2595
+.globl sym_2_2596
+sym_2_2596: la $2, sym_2_2596
+.globl sym_2_2597
+sym_2_2597: la $2, sym_2_2597
+.globl sym_2_2598
+sym_2_2598: la $2, sym_2_2598
+.globl sym_2_2599
+sym_2_2599: la $2, sym_2_2599
+.globl sym_2_2600
+sym_2_2600: la $2, sym_2_2600
+.globl sym_2_2601
+sym_2_2601: la $2, sym_2_2601
+.globl sym_2_2602
+sym_2_2602: la $2, sym_2_2602
+.globl sym_2_2603
+sym_2_2603: la $2, sym_2_2603
+.globl sym_2_2604
+sym_2_2604: la $2, sym_2_2604
+.globl sym_2_2605
+sym_2_2605: la $2, sym_2_2605
+.globl sym_2_2606
+sym_2_2606: la $2, sym_2_2606
+.globl sym_2_2607
+sym_2_2607: la $2, sym_2_2607
+.globl sym_2_2608
+sym_2_2608: la $2, sym_2_2608
+.globl sym_2_2609
+sym_2_2609: la $2, sym_2_2609
+.globl sym_2_2610
+sym_2_2610: la $2, sym_2_2610
+.globl sym_2_2611
+sym_2_2611: la $2, sym_2_2611
+.globl sym_2_2612
+sym_2_2612: la $2, sym_2_2612
+.globl sym_2_2613
+sym_2_2613: la $2, sym_2_2613
+.globl sym_2_2614
+sym_2_2614: la $2, sym_2_2614
+.globl sym_2_2615
+sym_2_2615: la $2, sym_2_2615
+.globl sym_2_2616
+sym_2_2616: la $2, sym_2_2616
+.globl sym_2_2617
+sym_2_2617: la $2, sym_2_2617
+.globl sym_2_2618
+sym_2_2618: la $2, sym_2_2618
+.globl sym_2_2619
+sym_2_2619: la $2, sym_2_2619
+.globl sym_2_2620
+sym_2_2620: la $2, sym_2_2620
+.globl sym_2_2621
+sym_2_2621: la $2, sym_2_2621
+.globl sym_2_2622
+sym_2_2622: la $2, sym_2_2622
+.globl sym_2_2623
+sym_2_2623: la $2, sym_2_2623
+.globl sym_2_2624
+sym_2_2624: la $2, sym_2_2624
+.globl sym_2_2625
+sym_2_2625: la $2, sym_2_2625
+.globl sym_2_2626
+sym_2_2626: la $2, sym_2_2626
+.globl sym_2_2627
+sym_2_2627: la $2, sym_2_2627
+.globl sym_2_2628
+sym_2_2628: la $2, sym_2_2628
+.globl sym_2_2629
+sym_2_2629: la $2, sym_2_2629
+.globl sym_2_2630
+sym_2_2630: la $2, sym_2_2630
+.globl sym_2_2631
+sym_2_2631: la $2, sym_2_2631
+.globl sym_2_2632
+sym_2_2632: la $2, sym_2_2632
+.globl sym_2_2633
+sym_2_2633: la $2, sym_2_2633
+.globl sym_2_2634
+sym_2_2634: la $2, sym_2_2634
+.globl sym_2_2635
+sym_2_2635: la $2, sym_2_2635
+.globl sym_2_2636
+sym_2_2636: la $2, sym_2_2636
+.globl sym_2_2637
+sym_2_2637: la $2, sym_2_2637
+.globl sym_2_2638
+sym_2_2638: la $2, sym_2_2638
+.globl sym_2_2639
+sym_2_2639: la $2, sym_2_2639
+.globl sym_2_2640
+sym_2_2640: la $2, sym_2_2640
+.globl sym_2_2641
+sym_2_2641: la $2, sym_2_2641
+.globl sym_2_2642
+sym_2_2642: la $2, sym_2_2642
+.globl sym_2_2643
+sym_2_2643: la $2, sym_2_2643
+.globl sym_2_2644
+sym_2_2644: la $2, sym_2_2644
+.globl sym_2_2645
+sym_2_2645: la $2, sym_2_2645
+.globl sym_2_2646
+sym_2_2646: la $2, sym_2_2646
+.globl sym_2_2647
+sym_2_2647: la $2, sym_2_2647
+.globl sym_2_2648
+sym_2_2648: la $2, sym_2_2648
+.globl sym_2_2649
+sym_2_2649: la $2, sym_2_2649
+.globl sym_2_2650
+sym_2_2650: la $2, sym_2_2650
+.globl sym_2_2651
+sym_2_2651: la $2, sym_2_2651
+.globl sym_2_2652
+sym_2_2652: la $2, sym_2_2652
+.globl sym_2_2653
+sym_2_2653: la $2, sym_2_2653
+.globl sym_2_2654
+sym_2_2654: la $2, sym_2_2654
+.globl sym_2_2655
+sym_2_2655: la $2, sym_2_2655
+.globl sym_2_2656
+sym_2_2656: la $2, sym_2_2656
+.globl sym_2_2657
+sym_2_2657: la $2, sym_2_2657
+.globl sym_2_2658
+sym_2_2658: la $2, sym_2_2658
+.globl sym_2_2659
+sym_2_2659: la $2, sym_2_2659
+.globl sym_2_2660
+sym_2_2660: la $2, sym_2_2660
+.globl sym_2_2661
+sym_2_2661: la $2, sym_2_2661
+.globl sym_2_2662
+sym_2_2662: la $2, sym_2_2662
+.globl sym_2_2663
+sym_2_2663: la $2, sym_2_2663
+.globl sym_2_2664
+sym_2_2664: la $2, sym_2_2664
+.globl sym_2_2665
+sym_2_2665: la $2, sym_2_2665
+.globl sym_2_2666
+sym_2_2666: la $2, sym_2_2666
+.globl sym_2_2667
+sym_2_2667: la $2, sym_2_2667
+.globl sym_2_2668
+sym_2_2668: la $2, sym_2_2668
+.globl sym_2_2669
+sym_2_2669: la $2, sym_2_2669
+.globl sym_2_2670
+sym_2_2670: la $2, sym_2_2670
+.globl sym_2_2671
+sym_2_2671: la $2, sym_2_2671
+.globl sym_2_2672
+sym_2_2672: la $2, sym_2_2672
+.globl sym_2_2673
+sym_2_2673: la $2, sym_2_2673
+.globl sym_2_2674
+sym_2_2674: la $2, sym_2_2674
+.globl sym_2_2675
+sym_2_2675: la $2, sym_2_2675
+.globl sym_2_2676
+sym_2_2676: la $2, sym_2_2676
+.globl sym_2_2677
+sym_2_2677: la $2, sym_2_2677
+.globl sym_2_2678
+sym_2_2678: la $2, sym_2_2678
+.globl sym_2_2679
+sym_2_2679: la $2, sym_2_2679
+.globl sym_2_2680
+sym_2_2680: la $2, sym_2_2680
+.globl sym_2_2681
+sym_2_2681: la $2, sym_2_2681
+.globl sym_2_2682
+sym_2_2682: la $2, sym_2_2682
+.globl sym_2_2683
+sym_2_2683: la $2, sym_2_2683
+.globl sym_2_2684
+sym_2_2684: la $2, sym_2_2684
+.globl sym_2_2685
+sym_2_2685: la $2, sym_2_2685
+.globl sym_2_2686
+sym_2_2686: la $2, sym_2_2686
+.globl sym_2_2687
+sym_2_2687: la $2, sym_2_2687
+.globl sym_2_2688
+sym_2_2688: la $2, sym_2_2688
+.globl sym_2_2689
+sym_2_2689: la $2, sym_2_2689
+.globl sym_2_2690
+sym_2_2690: la $2, sym_2_2690
+.globl sym_2_2691
+sym_2_2691: la $2, sym_2_2691
+.globl sym_2_2692
+sym_2_2692: la $2, sym_2_2692
+.globl sym_2_2693
+sym_2_2693: la $2, sym_2_2693
+.globl sym_2_2694
+sym_2_2694: la $2, sym_2_2694
+.globl sym_2_2695
+sym_2_2695: la $2, sym_2_2695
+.globl sym_2_2696
+sym_2_2696: la $2, sym_2_2696
+.globl sym_2_2697
+sym_2_2697: la $2, sym_2_2697
+.globl sym_2_2698
+sym_2_2698: la $2, sym_2_2698
+.globl sym_2_2699
+sym_2_2699: la $2, sym_2_2699
+.globl sym_2_2700
+sym_2_2700: la $2, sym_2_2700
+.globl sym_2_2701
+sym_2_2701: la $2, sym_2_2701
+.globl sym_2_2702
+sym_2_2702: la $2, sym_2_2702
+.globl sym_2_2703
+sym_2_2703: la $2, sym_2_2703
+.globl sym_2_2704
+sym_2_2704: la $2, sym_2_2704
+.globl sym_2_2705
+sym_2_2705: la $2, sym_2_2705
+.globl sym_2_2706
+sym_2_2706: la $2, sym_2_2706
+.globl sym_2_2707
+sym_2_2707: la $2, sym_2_2707
+.globl sym_2_2708
+sym_2_2708: la $2, sym_2_2708
+.globl sym_2_2709
+sym_2_2709: la $2, sym_2_2709
+.globl sym_2_2710
+sym_2_2710: la $2, sym_2_2710
+.globl sym_2_2711
+sym_2_2711: la $2, sym_2_2711
+.globl sym_2_2712
+sym_2_2712: la $2, sym_2_2712
+.globl sym_2_2713
+sym_2_2713: la $2, sym_2_2713
+.globl sym_2_2714
+sym_2_2714: la $2, sym_2_2714
+.globl sym_2_2715
+sym_2_2715: la $2, sym_2_2715
+.globl sym_2_2716
+sym_2_2716: la $2, sym_2_2716
+.globl sym_2_2717
+sym_2_2717: la $2, sym_2_2717
+.globl sym_2_2718
+sym_2_2718: la $2, sym_2_2718
+.globl sym_2_2719
+sym_2_2719: la $2, sym_2_2719
+.globl sym_2_2720
+sym_2_2720: la $2, sym_2_2720
+.globl sym_2_2721
+sym_2_2721: la $2, sym_2_2721
+.globl sym_2_2722
+sym_2_2722: la $2, sym_2_2722
+.globl sym_2_2723
+sym_2_2723: la $2, sym_2_2723
+.globl sym_2_2724
+sym_2_2724: la $2, sym_2_2724
+.globl sym_2_2725
+sym_2_2725: la $2, sym_2_2725
+.globl sym_2_2726
+sym_2_2726: la $2, sym_2_2726
+.globl sym_2_2727
+sym_2_2727: la $2, sym_2_2727
+.globl sym_2_2728
+sym_2_2728: la $2, sym_2_2728
+.globl sym_2_2729
+sym_2_2729: la $2, sym_2_2729
+.globl sym_2_2730
+sym_2_2730: la $2, sym_2_2730
+.globl sym_2_2731
+sym_2_2731: la $2, sym_2_2731
+.globl sym_2_2732
+sym_2_2732: la $2, sym_2_2732
+.globl sym_2_2733
+sym_2_2733: la $2, sym_2_2733
+.globl sym_2_2734
+sym_2_2734: la $2, sym_2_2734
+.globl sym_2_2735
+sym_2_2735: la $2, sym_2_2735
+.globl sym_2_2736
+sym_2_2736: la $2, sym_2_2736
+.globl sym_2_2737
+sym_2_2737: la $2, sym_2_2737
+.globl sym_2_2738
+sym_2_2738: la $2, sym_2_2738
+.globl sym_2_2739
+sym_2_2739: la $2, sym_2_2739
+.globl sym_2_2740
+sym_2_2740: la $2, sym_2_2740
+.globl sym_2_2741
+sym_2_2741: la $2, sym_2_2741
+.globl sym_2_2742
+sym_2_2742: la $2, sym_2_2742
+.globl sym_2_2743
+sym_2_2743: la $2, sym_2_2743
+.globl sym_2_2744
+sym_2_2744: la $2, sym_2_2744
+.globl sym_2_2745
+sym_2_2745: la $2, sym_2_2745
+.globl sym_2_2746
+sym_2_2746: la $2, sym_2_2746
+.globl sym_2_2747
+sym_2_2747: la $2, sym_2_2747
+.globl sym_2_2748
+sym_2_2748: la $2, sym_2_2748
+.globl sym_2_2749
+sym_2_2749: la $2, sym_2_2749
+.globl sym_2_2750
+sym_2_2750: la $2, sym_2_2750
+.globl sym_2_2751
+sym_2_2751: la $2, sym_2_2751
+.globl sym_2_2752
+sym_2_2752: la $2, sym_2_2752
+.globl sym_2_2753
+sym_2_2753: la $2, sym_2_2753
+.globl sym_2_2754
+sym_2_2754: la $2, sym_2_2754
+.globl sym_2_2755
+sym_2_2755: la $2, sym_2_2755
+.globl sym_2_2756
+sym_2_2756: la $2, sym_2_2756
+.globl sym_2_2757
+sym_2_2757: la $2, sym_2_2757
+.globl sym_2_2758
+sym_2_2758: la $2, sym_2_2758
+.globl sym_2_2759
+sym_2_2759: la $2, sym_2_2759
+.globl sym_2_2760
+sym_2_2760: la $2, sym_2_2760
+.globl sym_2_2761
+sym_2_2761: la $2, sym_2_2761
+.globl sym_2_2762
+sym_2_2762: la $2, sym_2_2762
+.globl sym_2_2763
+sym_2_2763: la $2, sym_2_2763
+.globl sym_2_2764
+sym_2_2764: la $2, sym_2_2764
+.globl sym_2_2765
+sym_2_2765: la $2, sym_2_2765
+.globl sym_2_2766
+sym_2_2766: la $2, sym_2_2766
+.globl sym_2_2767
+sym_2_2767: la $2, sym_2_2767
+.globl sym_2_2768
+sym_2_2768: la $2, sym_2_2768
+.globl sym_2_2769
+sym_2_2769: la $2, sym_2_2769
+.globl sym_2_2770
+sym_2_2770: la $2, sym_2_2770
+.globl sym_2_2771
+sym_2_2771: la $2, sym_2_2771
+.globl sym_2_2772
+sym_2_2772: la $2, sym_2_2772
+.globl sym_2_2773
+sym_2_2773: la $2, sym_2_2773
+.globl sym_2_2774
+sym_2_2774: la $2, sym_2_2774
+.globl sym_2_2775
+sym_2_2775: la $2, sym_2_2775
+.globl sym_2_2776
+sym_2_2776: la $2, sym_2_2776
+.globl sym_2_2777
+sym_2_2777: la $2, sym_2_2777
+.globl sym_2_2778
+sym_2_2778: la $2, sym_2_2778
+.globl sym_2_2779
+sym_2_2779: la $2, sym_2_2779
+.globl sym_2_2780
+sym_2_2780: la $2, sym_2_2780
+.globl sym_2_2781
+sym_2_2781: la $2, sym_2_2781
+.globl sym_2_2782
+sym_2_2782: la $2, sym_2_2782
+.globl sym_2_2783
+sym_2_2783: la $2, sym_2_2783
+.globl sym_2_2784
+sym_2_2784: la $2, sym_2_2784
+.globl sym_2_2785
+sym_2_2785: la $2, sym_2_2785
+.globl sym_2_2786
+sym_2_2786: la $2, sym_2_2786
+.globl sym_2_2787
+sym_2_2787: la $2, sym_2_2787
+.globl sym_2_2788
+sym_2_2788: la $2, sym_2_2788
+.globl sym_2_2789
+sym_2_2789: la $2, sym_2_2789
+.globl sym_2_2790
+sym_2_2790: la $2, sym_2_2790
+.globl sym_2_2791
+sym_2_2791: la $2, sym_2_2791
+.globl sym_2_2792
+sym_2_2792: la $2, sym_2_2792
+.globl sym_2_2793
+sym_2_2793: la $2, sym_2_2793
+.globl sym_2_2794
+sym_2_2794: la $2, sym_2_2794
+.globl sym_2_2795
+sym_2_2795: la $2, sym_2_2795
+.globl sym_2_2796
+sym_2_2796: la $2, sym_2_2796
+.globl sym_2_2797
+sym_2_2797: la $2, sym_2_2797
+.globl sym_2_2798
+sym_2_2798: la $2, sym_2_2798
+.globl sym_2_2799
+sym_2_2799: la $2, sym_2_2799
+.globl sym_2_2800
+sym_2_2800: la $2, sym_2_2800
+.globl sym_2_2801
+sym_2_2801: la $2, sym_2_2801
+.globl sym_2_2802
+sym_2_2802: la $2, sym_2_2802
+.globl sym_2_2803
+sym_2_2803: la $2, sym_2_2803
+.globl sym_2_2804
+sym_2_2804: la $2, sym_2_2804
+.globl sym_2_2805
+sym_2_2805: la $2, sym_2_2805
+.globl sym_2_2806
+sym_2_2806: la $2, sym_2_2806
+.globl sym_2_2807
+sym_2_2807: la $2, sym_2_2807
+.globl sym_2_2808
+sym_2_2808: la $2, sym_2_2808
+.globl sym_2_2809
+sym_2_2809: la $2, sym_2_2809
+.globl sym_2_2810
+sym_2_2810: la $2, sym_2_2810
+.globl sym_2_2811
+sym_2_2811: la $2, sym_2_2811
+.globl sym_2_2812
+sym_2_2812: la $2, sym_2_2812
+.globl sym_2_2813
+sym_2_2813: la $2, sym_2_2813
+.globl sym_2_2814
+sym_2_2814: la $2, sym_2_2814
+.globl sym_2_2815
+sym_2_2815: la $2, sym_2_2815
+.globl sym_2_2816
+sym_2_2816: la $2, sym_2_2816
+.globl sym_2_2817
+sym_2_2817: la $2, sym_2_2817
+.globl sym_2_2818
+sym_2_2818: la $2, sym_2_2818
+.globl sym_2_2819
+sym_2_2819: la $2, sym_2_2819
+.globl sym_2_2820
+sym_2_2820: la $2, sym_2_2820
+.globl sym_2_2821
+sym_2_2821: la $2, sym_2_2821
+.globl sym_2_2822
+sym_2_2822: la $2, sym_2_2822
+.globl sym_2_2823
+sym_2_2823: la $2, sym_2_2823
+.globl sym_2_2824
+sym_2_2824: la $2, sym_2_2824
+.globl sym_2_2825
+sym_2_2825: la $2, sym_2_2825
+.globl sym_2_2826
+sym_2_2826: la $2, sym_2_2826
+.globl sym_2_2827
+sym_2_2827: la $2, sym_2_2827
+.globl sym_2_2828
+sym_2_2828: la $2, sym_2_2828
+.globl sym_2_2829
+sym_2_2829: la $2, sym_2_2829
+.globl sym_2_2830
+sym_2_2830: la $2, sym_2_2830
+.globl sym_2_2831
+sym_2_2831: la $2, sym_2_2831
+.globl sym_2_2832
+sym_2_2832: la $2, sym_2_2832
+.globl sym_2_2833
+sym_2_2833: la $2, sym_2_2833
+.globl sym_2_2834
+sym_2_2834: la $2, sym_2_2834
+.globl sym_2_2835
+sym_2_2835: la $2, sym_2_2835
+.globl sym_2_2836
+sym_2_2836: la $2, sym_2_2836
+.globl sym_2_2837
+sym_2_2837: la $2, sym_2_2837
+.globl sym_2_2838
+sym_2_2838: la $2, sym_2_2838
+.globl sym_2_2839
+sym_2_2839: la $2, sym_2_2839
+.globl sym_2_2840
+sym_2_2840: la $2, sym_2_2840
+.globl sym_2_2841
+sym_2_2841: la $2, sym_2_2841
+.globl sym_2_2842
+sym_2_2842: la $2, sym_2_2842
+.globl sym_2_2843
+sym_2_2843: la $2, sym_2_2843
+.globl sym_2_2844
+sym_2_2844: la $2, sym_2_2844
+.globl sym_2_2845
+sym_2_2845: la $2, sym_2_2845
+.globl sym_2_2846
+sym_2_2846: la $2, sym_2_2846
+.globl sym_2_2847
+sym_2_2847: la $2, sym_2_2847
+.globl sym_2_2848
+sym_2_2848: la $2, sym_2_2848
+.globl sym_2_2849
+sym_2_2849: la $2, sym_2_2849
+.globl sym_2_2850
+sym_2_2850: la $2, sym_2_2850
+.globl sym_2_2851
+sym_2_2851: la $2, sym_2_2851
+.globl sym_2_2852
+sym_2_2852: la $2, sym_2_2852
+.globl sym_2_2853
+sym_2_2853: la $2, sym_2_2853
+.globl sym_2_2854
+sym_2_2854: la $2, sym_2_2854
+.globl sym_2_2855
+sym_2_2855: la $2, sym_2_2855
+.globl sym_2_2856
+sym_2_2856: la $2, sym_2_2856
+.globl sym_2_2857
+sym_2_2857: la $2, sym_2_2857
+.globl sym_2_2858
+sym_2_2858: la $2, sym_2_2858
+.globl sym_2_2859
+sym_2_2859: la $2, sym_2_2859
+.globl sym_2_2860
+sym_2_2860: la $2, sym_2_2860
+.globl sym_2_2861
+sym_2_2861: la $2, sym_2_2861
+.globl sym_2_2862
+sym_2_2862: la $2, sym_2_2862
+.globl sym_2_2863
+sym_2_2863: la $2, sym_2_2863
+.globl sym_2_2864
+sym_2_2864: la $2, sym_2_2864
+.globl sym_2_2865
+sym_2_2865: la $2, sym_2_2865
+.globl sym_2_2866
+sym_2_2866: la $2, sym_2_2866
+.globl sym_2_2867
+sym_2_2867: la $2, sym_2_2867
+.globl sym_2_2868
+sym_2_2868: la $2, sym_2_2868
+.globl sym_2_2869
+sym_2_2869: la $2, sym_2_2869
+.globl sym_2_2870
+sym_2_2870: la $2, sym_2_2870
+.globl sym_2_2871
+sym_2_2871: la $2, sym_2_2871
+.globl sym_2_2872
+sym_2_2872: la $2, sym_2_2872
+.globl sym_2_2873
+sym_2_2873: la $2, sym_2_2873
+.globl sym_2_2874
+sym_2_2874: la $2, sym_2_2874
+.globl sym_2_2875
+sym_2_2875: la $2, sym_2_2875
+.globl sym_2_2876
+sym_2_2876: la $2, sym_2_2876
+.globl sym_2_2877
+sym_2_2877: la $2, sym_2_2877
+.globl sym_2_2878
+sym_2_2878: la $2, sym_2_2878
+.globl sym_2_2879
+sym_2_2879: la $2, sym_2_2879
+.globl sym_2_2880
+sym_2_2880: la $2, sym_2_2880
+.globl sym_2_2881
+sym_2_2881: la $2, sym_2_2881
+.globl sym_2_2882
+sym_2_2882: la $2, sym_2_2882
+.globl sym_2_2883
+sym_2_2883: la $2, sym_2_2883
+.globl sym_2_2884
+sym_2_2884: la $2, sym_2_2884
+.globl sym_2_2885
+sym_2_2885: la $2, sym_2_2885
+.globl sym_2_2886
+sym_2_2886: la $2, sym_2_2886
+.globl sym_2_2887
+sym_2_2887: la $2, sym_2_2887
+.globl sym_2_2888
+sym_2_2888: la $2, sym_2_2888
+.globl sym_2_2889
+sym_2_2889: la $2, sym_2_2889
+.globl sym_2_2890
+sym_2_2890: la $2, sym_2_2890
+.globl sym_2_2891
+sym_2_2891: la $2, sym_2_2891
+.globl sym_2_2892
+sym_2_2892: la $2, sym_2_2892
+.globl sym_2_2893
+sym_2_2893: la $2, sym_2_2893
+.globl sym_2_2894
+sym_2_2894: la $2, sym_2_2894
+.globl sym_2_2895
+sym_2_2895: la $2, sym_2_2895
+.globl sym_2_2896
+sym_2_2896: la $2, sym_2_2896
+.globl sym_2_2897
+sym_2_2897: la $2, sym_2_2897
+.globl sym_2_2898
+sym_2_2898: la $2, sym_2_2898
+.globl sym_2_2899
+sym_2_2899: la $2, sym_2_2899
+.globl sym_2_2900
+sym_2_2900: la $2, sym_2_2900
+.globl sym_2_2901
+sym_2_2901: la $2, sym_2_2901
+.globl sym_2_2902
+sym_2_2902: la $2, sym_2_2902
+.globl sym_2_2903
+sym_2_2903: la $2, sym_2_2903
+.globl sym_2_2904
+sym_2_2904: la $2, sym_2_2904
+.globl sym_2_2905
+sym_2_2905: la $2, sym_2_2905
+.globl sym_2_2906
+sym_2_2906: la $2, sym_2_2906
+.globl sym_2_2907
+sym_2_2907: la $2, sym_2_2907
+.globl sym_2_2908
+sym_2_2908: la $2, sym_2_2908
+.globl sym_2_2909
+sym_2_2909: la $2, sym_2_2909
+.globl sym_2_2910
+sym_2_2910: la $2, sym_2_2910
+.globl sym_2_2911
+sym_2_2911: la $2, sym_2_2911
+.globl sym_2_2912
+sym_2_2912: la $2, sym_2_2912
+.globl sym_2_2913
+sym_2_2913: la $2, sym_2_2913
+.globl sym_2_2914
+sym_2_2914: la $2, sym_2_2914
+.globl sym_2_2915
+sym_2_2915: la $2, sym_2_2915
+.globl sym_2_2916
+sym_2_2916: la $2, sym_2_2916
+.globl sym_2_2917
+sym_2_2917: la $2, sym_2_2917
+.globl sym_2_2918
+sym_2_2918: la $2, sym_2_2918
+.globl sym_2_2919
+sym_2_2919: la $2, sym_2_2919
+.globl sym_2_2920
+sym_2_2920: la $2, sym_2_2920
+.globl sym_2_2921
+sym_2_2921: la $2, sym_2_2921
+.globl sym_2_2922
+sym_2_2922: la $2, sym_2_2922
+.globl sym_2_2923
+sym_2_2923: la $2, sym_2_2923
+.globl sym_2_2924
+sym_2_2924: la $2, sym_2_2924
+.globl sym_2_2925
+sym_2_2925: la $2, sym_2_2925
+.globl sym_2_2926
+sym_2_2926: la $2, sym_2_2926
+.globl sym_2_2927
+sym_2_2927: la $2, sym_2_2927
+.globl sym_2_2928
+sym_2_2928: la $2, sym_2_2928
+.globl sym_2_2929
+sym_2_2929: la $2, sym_2_2929
+.globl sym_2_2930
+sym_2_2930: la $2, sym_2_2930
+.globl sym_2_2931
+sym_2_2931: la $2, sym_2_2931
+.globl sym_2_2932
+sym_2_2932: la $2, sym_2_2932
+.globl sym_2_2933
+sym_2_2933: la $2, sym_2_2933
+.globl sym_2_2934
+sym_2_2934: la $2, sym_2_2934
+.globl sym_2_2935
+sym_2_2935: la $2, sym_2_2935
+.globl sym_2_2936
+sym_2_2936: la $2, sym_2_2936
+.globl sym_2_2937
+sym_2_2937: la $2, sym_2_2937
+.globl sym_2_2938
+sym_2_2938: la $2, sym_2_2938
+.globl sym_2_2939
+sym_2_2939: la $2, sym_2_2939
+.globl sym_2_2940
+sym_2_2940: la $2, sym_2_2940
+.globl sym_2_2941
+sym_2_2941: la $2, sym_2_2941
+.globl sym_2_2942
+sym_2_2942: la $2, sym_2_2942
+.globl sym_2_2943
+sym_2_2943: la $2, sym_2_2943
+.globl sym_2_2944
+sym_2_2944: la $2, sym_2_2944
+.globl sym_2_2945
+sym_2_2945: la $2, sym_2_2945
+.globl sym_2_2946
+sym_2_2946: la $2, sym_2_2946
+.globl sym_2_2947
+sym_2_2947: la $2, sym_2_2947
+.globl sym_2_2948
+sym_2_2948: la $2, sym_2_2948
+.globl sym_2_2949
+sym_2_2949: la $2, sym_2_2949
+.globl sym_2_2950
+sym_2_2950: la $2, sym_2_2950
+.globl sym_2_2951
+sym_2_2951: la $2, sym_2_2951
+.globl sym_2_2952
+sym_2_2952: la $2, sym_2_2952
+.globl sym_2_2953
+sym_2_2953: la $2, sym_2_2953
+.globl sym_2_2954
+sym_2_2954: la $2, sym_2_2954
+.globl sym_2_2955
+sym_2_2955: la $2, sym_2_2955
+.globl sym_2_2956
+sym_2_2956: la $2, sym_2_2956
+.globl sym_2_2957
+sym_2_2957: la $2, sym_2_2957
+.globl sym_2_2958
+sym_2_2958: la $2, sym_2_2958
+.globl sym_2_2959
+sym_2_2959: la $2, sym_2_2959
+.globl sym_2_2960
+sym_2_2960: la $2, sym_2_2960
+.globl sym_2_2961
+sym_2_2961: la $2, sym_2_2961
+.globl sym_2_2962
+sym_2_2962: la $2, sym_2_2962
+.globl sym_2_2963
+sym_2_2963: la $2, sym_2_2963
+.globl sym_2_2964
+sym_2_2964: la $2, sym_2_2964
+.globl sym_2_2965
+sym_2_2965: la $2, sym_2_2965
+.globl sym_2_2966
+sym_2_2966: la $2, sym_2_2966
+.globl sym_2_2967
+sym_2_2967: la $2, sym_2_2967
+.globl sym_2_2968
+sym_2_2968: la $2, sym_2_2968
+.globl sym_2_2969
+sym_2_2969: la $2, sym_2_2969
+.globl sym_2_2970
+sym_2_2970: la $2, sym_2_2970
+.globl sym_2_2971
+sym_2_2971: la $2, sym_2_2971
+.globl sym_2_2972
+sym_2_2972: la $2, sym_2_2972
+.globl sym_2_2973
+sym_2_2973: la $2, sym_2_2973
+.globl sym_2_2974
+sym_2_2974: la $2, sym_2_2974
+.globl sym_2_2975
+sym_2_2975: la $2, sym_2_2975
+.globl sym_2_2976
+sym_2_2976: la $2, sym_2_2976
+.globl sym_2_2977
+sym_2_2977: la $2, sym_2_2977
+.globl sym_2_2978
+sym_2_2978: la $2, sym_2_2978
+.globl sym_2_2979
+sym_2_2979: la $2, sym_2_2979
+.globl sym_2_2980
+sym_2_2980: la $2, sym_2_2980
+.globl sym_2_2981
+sym_2_2981: la $2, sym_2_2981
+.globl sym_2_2982
+sym_2_2982: la $2, sym_2_2982
+.globl sym_2_2983
+sym_2_2983: la $2, sym_2_2983
+.globl sym_2_2984
+sym_2_2984: la $2, sym_2_2984
+.globl sym_2_2985
+sym_2_2985: la $2, sym_2_2985
+.globl sym_2_2986
+sym_2_2986: la $2, sym_2_2986
+.globl sym_2_2987
+sym_2_2987: la $2, sym_2_2987
+.globl sym_2_2988
+sym_2_2988: la $2, sym_2_2988
+.globl sym_2_2989
+sym_2_2989: la $2, sym_2_2989
+.globl sym_2_2990
+sym_2_2990: la $2, sym_2_2990
+.globl sym_2_2991
+sym_2_2991: la $2, sym_2_2991
+.globl sym_2_2992
+sym_2_2992: la $2, sym_2_2992
+.globl sym_2_2993
+sym_2_2993: la $2, sym_2_2993
+.globl sym_2_2994
+sym_2_2994: la $2, sym_2_2994
+.globl sym_2_2995
+sym_2_2995: la $2, sym_2_2995
+.globl sym_2_2996
+sym_2_2996: la $2, sym_2_2996
+.globl sym_2_2997
+sym_2_2997: la $2, sym_2_2997
+.globl sym_2_2998
+sym_2_2998: la $2, sym_2_2998
+.globl sym_2_2999
+sym_2_2999: la $2, sym_2_2999
+.globl sym_2_3000
+sym_2_3000: la $2, sym_2_3000
+.globl sym_2_3001
+sym_2_3001: la $2, sym_2_3001
+.globl sym_2_3002
+sym_2_3002: la $2, sym_2_3002
+.globl sym_2_3003
+sym_2_3003: la $2, sym_2_3003
+.globl sym_2_3004
+sym_2_3004: la $2, sym_2_3004
+.globl sym_2_3005
+sym_2_3005: la $2, sym_2_3005
+.globl sym_2_3006
+sym_2_3006: la $2, sym_2_3006
+.globl sym_2_3007
+sym_2_3007: la $2, sym_2_3007
+.globl sym_2_3008
+sym_2_3008: la $2, sym_2_3008
+.globl sym_2_3009
+sym_2_3009: la $2, sym_2_3009
+.globl sym_2_3010
+sym_2_3010: la $2, sym_2_3010
+.globl sym_2_3011
+sym_2_3011: la $2, sym_2_3011
+.globl sym_2_3012
+sym_2_3012: la $2, sym_2_3012
+.globl sym_2_3013
+sym_2_3013: la $2, sym_2_3013
+.globl sym_2_3014
+sym_2_3014: la $2, sym_2_3014
+.globl sym_2_3015
+sym_2_3015: la $2, sym_2_3015
+.globl sym_2_3016
+sym_2_3016: la $2, sym_2_3016
+.globl sym_2_3017
+sym_2_3017: la $2, sym_2_3017
+.globl sym_2_3018
+sym_2_3018: la $2, sym_2_3018
+.globl sym_2_3019
+sym_2_3019: la $2, sym_2_3019
+.globl sym_2_3020
+sym_2_3020: la $2, sym_2_3020
+.globl sym_2_3021
+sym_2_3021: la $2, sym_2_3021
+.globl sym_2_3022
+sym_2_3022: la $2, sym_2_3022
+.globl sym_2_3023
+sym_2_3023: la $2, sym_2_3023
+.globl sym_2_3024
+sym_2_3024: la $2, sym_2_3024
+.globl sym_2_3025
+sym_2_3025: la $2, sym_2_3025
+.globl sym_2_3026
+sym_2_3026: la $2, sym_2_3026
+.globl sym_2_3027
+sym_2_3027: la $2, sym_2_3027
+.globl sym_2_3028
+sym_2_3028: la $2, sym_2_3028
+.globl sym_2_3029
+sym_2_3029: la $2, sym_2_3029
+.globl sym_2_3030
+sym_2_3030: la $2, sym_2_3030
+.globl sym_2_3031
+sym_2_3031: la $2, sym_2_3031
+.globl sym_2_3032
+sym_2_3032: la $2, sym_2_3032
+.globl sym_2_3033
+sym_2_3033: la $2, sym_2_3033
+.globl sym_2_3034
+sym_2_3034: la $2, sym_2_3034
+.globl sym_2_3035
+sym_2_3035: la $2, sym_2_3035
+.globl sym_2_3036
+sym_2_3036: la $2, sym_2_3036
+.globl sym_2_3037
+sym_2_3037: la $2, sym_2_3037
+.globl sym_2_3038
+sym_2_3038: la $2, sym_2_3038
+.globl sym_2_3039
+sym_2_3039: la $2, sym_2_3039
+.globl sym_2_3040
+sym_2_3040: la $2, sym_2_3040
+.globl sym_2_3041
+sym_2_3041: la $2, sym_2_3041
+.globl sym_2_3042
+sym_2_3042: la $2, sym_2_3042
+.globl sym_2_3043
+sym_2_3043: la $2, sym_2_3043
+.globl sym_2_3044
+sym_2_3044: la $2, sym_2_3044
+.globl sym_2_3045
+sym_2_3045: la $2, sym_2_3045
+.globl sym_2_3046
+sym_2_3046: la $2, sym_2_3046
+.globl sym_2_3047
+sym_2_3047: la $2, sym_2_3047
+.globl sym_2_3048
+sym_2_3048: la $2, sym_2_3048
+.globl sym_2_3049
+sym_2_3049: la $2, sym_2_3049
+.globl sym_2_3050
+sym_2_3050: la $2, sym_2_3050
+.globl sym_2_3051
+sym_2_3051: la $2, sym_2_3051
+.globl sym_2_3052
+sym_2_3052: la $2, sym_2_3052
+.globl sym_2_3053
+sym_2_3053: la $2, sym_2_3053
+.globl sym_2_3054
+sym_2_3054: la $2, sym_2_3054
+.globl sym_2_3055
+sym_2_3055: la $2, sym_2_3055
+.globl sym_2_3056
+sym_2_3056: la $2, sym_2_3056
+.globl sym_2_3057
+sym_2_3057: la $2, sym_2_3057
+.globl sym_2_3058
+sym_2_3058: la $2, sym_2_3058
+.globl sym_2_3059
+sym_2_3059: la $2, sym_2_3059
+.globl sym_2_3060
+sym_2_3060: la $2, sym_2_3060
+.globl sym_2_3061
+sym_2_3061: la $2, sym_2_3061
+.globl sym_2_3062
+sym_2_3062: la $2, sym_2_3062
+.globl sym_2_3063
+sym_2_3063: la $2, sym_2_3063
+.globl sym_2_3064
+sym_2_3064: la $2, sym_2_3064
+.globl sym_2_3065
+sym_2_3065: la $2, sym_2_3065
+.globl sym_2_3066
+sym_2_3066: la $2, sym_2_3066
+.globl sym_2_3067
+sym_2_3067: la $2, sym_2_3067
+.globl sym_2_3068
+sym_2_3068: la $2, sym_2_3068
+.globl sym_2_3069
+sym_2_3069: la $2, sym_2_3069
+.globl sym_2_3070
+sym_2_3070: la $2, sym_2_3070
+.globl sym_2_3071
+sym_2_3071: la $2, sym_2_3071
+.globl sym_2_3072
+sym_2_3072: la $2, sym_2_3072
+.globl sym_2_3073
+sym_2_3073: la $2, sym_2_3073
+.globl sym_2_3074
+sym_2_3074: la $2, sym_2_3074
+.globl sym_2_3075
+sym_2_3075: la $2, sym_2_3075
+.globl sym_2_3076
+sym_2_3076: la $2, sym_2_3076
+.globl sym_2_3077
+sym_2_3077: la $2, sym_2_3077
+.globl sym_2_3078
+sym_2_3078: la $2, sym_2_3078
+.globl sym_2_3079
+sym_2_3079: la $2, sym_2_3079
+.globl sym_2_3080
+sym_2_3080: la $2, sym_2_3080
+.globl sym_2_3081
+sym_2_3081: la $2, sym_2_3081
+.globl sym_2_3082
+sym_2_3082: la $2, sym_2_3082
+.globl sym_2_3083
+sym_2_3083: la $2, sym_2_3083
+.globl sym_2_3084
+sym_2_3084: la $2, sym_2_3084
+.globl sym_2_3085
+sym_2_3085: la $2, sym_2_3085
+.globl sym_2_3086
+sym_2_3086: la $2, sym_2_3086
+.globl sym_2_3087
+sym_2_3087: la $2, sym_2_3087
+.globl sym_2_3088
+sym_2_3088: la $2, sym_2_3088
+.globl sym_2_3089
+sym_2_3089: la $2, sym_2_3089
+.globl sym_2_3090
+sym_2_3090: la $2, sym_2_3090
+.globl sym_2_3091
+sym_2_3091: la $2, sym_2_3091
+.globl sym_2_3092
+sym_2_3092: la $2, sym_2_3092
+.globl sym_2_3093
+sym_2_3093: la $2, sym_2_3093
+.globl sym_2_3094
+sym_2_3094: la $2, sym_2_3094
+.globl sym_2_3095
+sym_2_3095: la $2, sym_2_3095
+.globl sym_2_3096
+sym_2_3096: la $2, sym_2_3096
+.globl sym_2_3097
+sym_2_3097: la $2, sym_2_3097
+.globl sym_2_3098
+sym_2_3098: la $2, sym_2_3098
+.globl sym_2_3099
+sym_2_3099: la $2, sym_2_3099
+.globl sym_2_3100
+sym_2_3100: la $2, sym_2_3100
+.globl sym_2_3101
+sym_2_3101: la $2, sym_2_3101
+.globl sym_2_3102
+sym_2_3102: la $2, sym_2_3102
+.globl sym_2_3103
+sym_2_3103: la $2, sym_2_3103
+.globl sym_2_3104
+sym_2_3104: la $2, sym_2_3104
+.globl sym_2_3105
+sym_2_3105: la $2, sym_2_3105
+.globl sym_2_3106
+sym_2_3106: la $2, sym_2_3106
+.globl sym_2_3107
+sym_2_3107: la $2, sym_2_3107
+.globl sym_2_3108
+sym_2_3108: la $2, sym_2_3108
+.globl sym_2_3109
+sym_2_3109: la $2, sym_2_3109
+.globl sym_2_3110
+sym_2_3110: la $2, sym_2_3110
+.globl sym_2_3111
+sym_2_3111: la $2, sym_2_3111
+.globl sym_2_3112
+sym_2_3112: la $2, sym_2_3112
+.globl sym_2_3113
+sym_2_3113: la $2, sym_2_3113
+.globl sym_2_3114
+sym_2_3114: la $2, sym_2_3114
+.globl sym_2_3115
+sym_2_3115: la $2, sym_2_3115
+.globl sym_2_3116
+sym_2_3116: la $2, sym_2_3116
+.globl sym_2_3117
+sym_2_3117: la $2, sym_2_3117
+.globl sym_2_3118
+sym_2_3118: la $2, sym_2_3118
+.globl sym_2_3119
+sym_2_3119: la $2, sym_2_3119
+.globl sym_2_3120
+sym_2_3120: la $2, sym_2_3120
+.globl sym_2_3121
+sym_2_3121: la $2, sym_2_3121
+.globl sym_2_3122
+sym_2_3122: la $2, sym_2_3122
+.globl sym_2_3123
+sym_2_3123: la $2, sym_2_3123
+.globl sym_2_3124
+sym_2_3124: la $2, sym_2_3124
+.globl sym_2_3125
+sym_2_3125: la $2, sym_2_3125
+.globl sym_2_3126
+sym_2_3126: la $2, sym_2_3126
+.globl sym_2_3127
+sym_2_3127: la $2, sym_2_3127
+.globl sym_2_3128
+sym_2_3128: la $2, sym_2_3128
+.globl sym_2_3129
+sym_2_3129: la $2, sym_2_3129
+.globl sym_2_3130
+sym_2_3130: la $2, sym_2_3130
+.globl sym_2_3131
+sym_2_3131: la $2, sym_2_3131
+.globl sym_2_3132
+sym_2_3132: la $2, sym_2_3132
+.globl sym_2_3133
+sym_2_3133: la $2, sym_2_3133
+.globl sym_2_3134
+sym_2_3134: la $2, sym_2_3134
+.globl sym_2_3135
+sym_2_3135: la $2, sym_2_3135
+.globl sym_2_3136
+sym_2_3136: la $2, sym_2_3136
+.globl sym_2_3137
+sym_2_3137: la $2, sym_2_3137
+.globl sym_2_3138
+sym_2_3138: la $2, sym_2_3138
+.globl sym_2_3139
+sym_2_3139: la $2, sym_2_3139
+.globl sym_2_3140
+sym_2_3140: la $2, sym_2_3140
+.globl sym_2_3141
+sym_2_3141: la $2, sym_2_3141
+.globl sym_2_3142
+sym_2_3142: la $2, sym_2_3142
+.globl sym_2_3143
+sym_2_3143: la $2, sym_2_3143
+.globl sym_2_3144
+sym_2_3144: la $2, sym_2_3144
+.globl sym_2_3145
+sym_2_3145: la $2, sym_2_3145
+.globl sym_2_3146
+sym_2_3146: la $2, sym_2_3146
+.globl sym_2_3147
+sym_2_3147: la $2, sym_2_3147
+.globl sym_2_3148
+sym_2_3148: la $2, sym_2_3148
+.globl sym_2_3149
+sym_2_3149: la $2, sym_2_3149
+.globl sym_2_3150
+sym_2_3150: la $2, sym_2_3150
+.globl sym_2_3151
+sym_2_3151: la $2, sym_2_3151
+.globl sym_2_3152
+sym_2_3152: la $2, sym_2_3152
+.globl sym_2_3153
+sym_2_3153: la $2, sym_2_3153
+.globl sym_2_3154
+sym_2_3154: la $2, sym_2_3154
+.globl sym_2_3155
+sym_2_3155: la $2, sym_2_3155
+.globl sym_2_3156
+sym_2_3156: la $2, sym_2_3156
+.globl sym_2_3157
+sym_2_3157: la $2, sym_2_3157
+.globl sym_2_3158
+sym_2_3158: la $2, sym_2_3158
+.globl sym_2_3159
+sym_2_3159: la $2, sym_2_3159
+.globl sym_2_3160
+sym_2_3160: la $2, sym_2_3160
+.globl sym_2_3161
+sym_2_3161: la $2, sym_2_3161
+.globl sym_2_3162
+sym_2_3162: la $2, sym_2_3162
+.globl sym_2_3163
+sym_2_3163: la $2, sym_2_3163
+.globl sym_2_3164
+sym_2_3164: la $2, sym_2_3164
+.globl sym_2_3165
+sym_2_3165: la $2, sym_2_3165
+.globl sym_2_3166
+sym_2_3166: la $2, sym_2_3166
+.globl sym_2_3167
+sym_2_3167: la $2, sym_2_3167
+.globl sym_2_3168
+sym_2_3168: la $2, sym_2_3168
+.globl sym_2_3169
+sym_2_3169: la $2, sym_2_3169
+.globl sym_2_3170
+sym_2_3170: la $2, sym_2_3170
+.globl sym_2_3171
+sym_2_3171: la $2, sym_2_3171
+.globl sym_2_3172
+sym_2_3172: la $2, sym_2_3172
+.globl sym_2_3173
+sym_2_3173: la $2, sym_2_3173
+.globl sym_2_3174
+sym_2_3174: la $2, sym_2_3174
+.globl sym_2_3175
+sym_2_3175: la $2, sym_2_3175
+.globl sym_2_3176
+sym_2_3176: la $2, sym_2_3176
+.globl sym_2_3177
+sym_2_3177: la $2, sym_2_3177
+.globl sym_2_3178
+sym_2_3178: la $2, sym_2_3178
+.globl sym_2_3179
+sym_2_3179: la $2, sym_2_3179
+.globl sym_2_3180
+sym_2_3180: la $2, sym_2_3180
+.globl sym_2_3181
+sym_2_3181: la $2, sym_2_3181
+.globl sym_2_3182
+sym_2_3182: la $2, sym_2_3182
+.globl sym_2_3183
+sym_2_3183: la $2, sym_2_3183
+.globl sym_2_3184
+sym_2_3184: la $2, sym_2_3184
+.globl sym_2_3185
+sym_2_3185: la $2, sym_2_3185
+.globl sym_2_3186
+sym_2_3186: la $2, sym_2_3186
+.globl sym_2_3187
+sym_2_3187: la $2, sym_2_3187
+.globl sym_2_3188
+sym_2_3188: la $2, sym_2_3188
+.globl sym_2_3189
+sym_2_3189: la $2, sym_2_3189
+.globl sym_2_3190
+sym_2_3190: la $2, sym_2_3190
+.globl sym_2_3191
+sym_2_3191: la $2, sym_2_3191
+.globl sym_2_3192
+sym_2_3192: la $2, sym_2_3192
+.globl sym_2_3193
+sym_2_3193: la $2, sym_2_3193
+.globl sym_2_3194
+sym_2_3194: la $2, sym_2_3194
+.globl sym_2_3195
+sym_2_3195: la $2, sym_2_3195
+.globl sym_2_3196
+sym_2_3196: la $2, sym_2_3196
+.globl sym_2_3197
+sym_2_3197: la $2, sym_2_3197
+.globl sym_2_3198
+sym_2_3198: la $2, sym_2_3198
+.globl sym_2_3199
+sym_2_3199: la $2, sym_2_3199
+.globl sym_2_3200
+sym_2_3200: la $2, sym_2_3200
+.globl sym_2_3201
+sym_2_3201: la $2, sym_2_3201
+.globl sym_2_3202
+sym_2_3202: la $2, sym_2_3202
+.globl sym_2_3203
+sym_2_3203: la $2, sym_2_3203
+.globl sym_2_3204
+sym_2_3204: la $2, sym_2_3204
+.globl sym_2_3205
+sym_2_3205: la $2, sym_2_3205
+.globl sym_2_3206
+sym_2_3206: la $2, sym_2_3206
+.globl sym_2_3207
+sym_2_3207: la $2, sym_2_3207
+.globl sym_2_3208
+sym_2_3208: la $2, sym_2_3208
+.globl sym_2_3209
+sym_2_3209: la $2, sym_2_3209
+.globl sym_2_3210
+sym_2_3210: la $2, sym_2_3210
+.globl sym_2_3211
+sym_2_3211: la $2, sym_2_3211
+.globl sym_2_3212
+sym_2_3212: la $2, sym_2_3212
+.globl sym_2_3213
+sym_2_3213: la $2, sym_2_3213
+.globl sym_2_3214
+sym_2_3214: la $2, sym_2_3214
+.globl sym_2_3215
+sym_2_3215: la $2, sym_2_3215
+.globl sym_2_3216
+sym_2_3216: la $2, sym_2_3216
+.globl sym_2_3217
+sym_2_3217: la $2, sym_2_3217
+.globl sym_2_3218
+sym_2_3218: la $2, sym_2_3218
+.globl sym_2_3219
+sym_2_3219: la $2, sym_2_3219
+.globl sym_2_3220
+sym_2_3220: la $2, sym_2_3220
+.globl sym_2_3221
+sym_2_3221: la $2, sym_2_3221
+.globl sym_2_3222
+sym_2_3222: la $2, sym_2_3222
+.globl sym_2_3223
+sym_2_3223: la $2, sym_2_3223
+.globl sym_2_3224
+sym_2_3224: la $2, sym_2_3224
+.globl sym_2_3225
+sym_2_3225: la $2, sym_2_3225
+.globl sym_2_3226
+sym_2_3226: la $2, sym_2_3226
+.globl sym_2_3227
+sym_2_3227: la $2, sym_2_3227
+.globl sym_2_3228
+sym_2_3228: la $2, sym_2_3228
+.globl sym_2_3229
+sym_2_3229: la $2, sym_2_3229
+.globl sym_2_3230
+sym_2_3230: la $2, sym_2_3230
+.globl sym_2_3231
+sym_2_3231: la $2, sym_2_3231
+.globl sym_2_3232
+sym_2_3232: la $2, sym_2_3232
+.globl sym_2_3233
+sym_2_3233: la $2, sym_2_3233
+.globl sym_2_3234
+sym_2_3234: la $2, sym_2_3234
+.globl sym_2_3235
+sym_2_3235: la $2, sym_2_3235
+.globl sym_2_3236
+sym_2_3236: la $2, sym_2_3236
+.globl sym_2_3237
+sym_2_3237: la $2, sym_2_3237
+.globl sym_2_3238
+sym_2_3238: la $2, sym_2_3238
+.globl sym_2_3239
+sym_2_3239: la $2, sym_2_3239
+.globl sym_2_3240
+sym_2_3240: la $2, sym_2_3240
+.globl sym_2_3241
+sym_2_3241: la $2, sym_2_3241
+.globl sym_2_3242
+sym_2_3242: la $2, sym_2_3242
+.globl sym_2_3243
+sym_2_3243: la $2, sym_2_3243
+.globl sym_2_3244
+sym_2_3244: la $2, sym_2_3244
+.globl sym_2_3245
+sym_2_3245: la $2, sym_2_3245
+.globl sym_2_3246
+sym_2_3246: la $2, sym_2_3246
+.globl sym_2_3247
+sym_2_3247: la $2, sym_2_3247
+.globl sym_2_3248
+sym_2_3248: la $2, sym_2_3248
+.globl sym_2_3249
+sym_2_3249: la $2, sym_2_3249
+.globl sym_2_3250
+sym_2_3250: la $2, sym_2_3250
+.globl sym_2_3251
+sym_2_3251: la $2, sym_2_3251
+.globl sym_2_3252
+sym_2_3252: la $2, sym_2_3252
+.globl sym_2_3253
+sym_2_3253: la $2, sym_2_3253
+.globl sym_2_3254
+sym_2_3254: la $2, sym_2_3254
+.globl sym_2_3255
+sym_2_3255: la $2, sym_2_3255
+.globl sym_2_3256
+sym_2_3256: la $2, sym_2_3256
+.globl sym_2_3257
+sym_2_3257: la $2, sym_2_3257
+.globl sym_2_3258
+sym_2_3258: la $2, sym_2_3258
+.globl sym_2_3259
+sym_2_3259: la $2, sym_2_3259
+.globl sym_2_3260
+sym_2_3260: la $2, sym_2_3260
+.globl sym_2_3261
+sym_2_3261: la $2, sym_2_3261
+.globl sym_2_3262
+sym_2_3262: la $2, sym_2_3262
+.globl sym_2_3263
+sym_2_3263: la $2, sym_2_3263
+.globl sym_2_3264
+sym_2_3264: la $2, sym_2_3264
+.globl sym_2_3265
+sym_2_3265: la $2, sym_2_3265
+.globl sym_2_3266
+sym_2_3266: la $2, sym_2_3266
+.globl sym_2_3267
+sym_2_3267: la $2, sym_2_3267
+.globl sym_2_3268
+sym_2_3268: la $2, sym_2_3268
+.globl sym_2_3269
+sym_2_3269: la $2, sym_2_3269
+.globl sym_2_3270
+sym_2_3270: la $2, sym_2_3270
+.globl sym_2_3271
+sym_2_3271: la $2, sym_2_3271
+.globl sym_2_3272
+sym_2_3272: la $2, sym_2_3272
+.globl sym_2_3273
+sym_2_3273: la $2, sym_2_3273
+.globl sym_2_3274
+sym_2_3274: la $2, sym_2_3274
+.globl sym_2_3275
+sym_2_3275: la $2, sym_2_3275
+.globl sym_2_3276
+sym_2_3276: la $2, sym_2_3276
+.globl sym_2_3277
+sym_2_3277: la $2, sym_2_3277
+.globl sym_2_3278
+sym_2_3278: la $2, sym_2_3278
+.globl sym_2_3279
+sym_2_3279: la $2, sym_2_3279
+.globl sym_2_3280
+sym_2_3280: la $2, sym_2_3280
+.globl sym_2_3281
+sym_2_3281: la $2, sym_2_3281
+.globl sym_2_3282
+sym_2_3282: la $2, sym_2_3282
+.globl sym_2_3283
+sym_2_3283: la $2, sym_2_3283
+.globl sym_2_3284
+sym_2_3284: la $2, sym_2_3284
+.globl sym_2_3285
+sym_2_3285: la $2, sym_2_3285
+.globl sym_2_3286
+sym_2_3286: la $2, sym_2_3286
+.globl sym_2_3287
+sym_2_3287: la $2, sym_2_3287
+.globl sym_2_3288
+sym_2_3288: la $2, sym_2_3288
+.globl sym_2_3289
+sym_2_3289: la $2, sym_2_3289
+.globl sym_2_3290
+sym_2_3290: la $2, sym_2_3290
+.globl sym_2_3291
+sym_2_3291: la $2, sym_2_3291
+.globl sym_2_3292
+sym_2_3292: la $2, sym_2_3292
+.globl sym_2_3293
+sym_2_3293: la $2, sym_2_3293
+.globl sym_2_3294
+sym_2_3294: la $2, sym_2_3294
+.globl sym_2_3295
+sym_2_3295: la $2, sym_2_3295
+.globl sym_2_3296
+sym_2_3296: la $2, sym_2_3296
+.globl sym_2_3297
+sym_2_3297: la $2, sym_2_3297
+.globl sym_2_3298
+sym_2_3298: la $2, sym_2_3298
+.globl sym_2_3299
+sym_2_3299: la $2, sym_2_3299
+.globl sym_2_3300
+sym_2_3300: la $2, sym_2_3300
+.globl sym_2_3301
+sym_2_3301: la $2, sym_2_3301
+.globl sym_2_3302
+sym_2_3302: la $2, sym_2_3302
+.globl sym_2_3303
+sym_2_3303: la $2, sym_2_3303
+.globl sym_2_3304
+sym_2_3304: la $2, sym_2_3304
+.globl sym_2_3305
+sym_2_3305: la $2, sym_2_3305
+.globl sym_2_3306
+sym_2_3306: la $2, sym_2_3306
+.globl sym_2_3307
+sym_2_3307: la $2, sym_2_3307
+.globl sym_2_3308
+sym_2_3308: la $2, sym_2_3308
+.globl sym_2_3309
+sym_2_3309: la $2, sym_2_3309
+.globl sym_2_3310
+sym_2_3310: la $2, sym_2_3310
+.globl sym_2_3311
+sym_2_3311: la $2, sym_2_3311
+.globl sym_2_3312
+sym_2_3312: la $2, sym_2_3312
+.globl sym_2_3313
+sym_2_3313: la $2, sym_2_3313
+.globl sym_2_3314
+sym_2_3314: la $2, sym_2_3314
+.globl sym_2_3315
+sym_2_3315: la $2, sym_2_3315
+.globl sym_2_3316
+sym_2_3316: la $2, sym_2_3316
+.globl sym_2_3317
+sym_2_3317: la $2, sym_2_3317
+.globl sym_2_3318
+sym_2_3318: la $2, sym_2_3318
+.globl sym_2_3319
+sym_2_3319: la $2, sym_2_3319
+.globl sym_2_3320
+sym_2_3320: la $2, sym_2_3320
+.globl sym_2_3321
+sym_2_3321: la $2, sym_2_3321
+.globl sym_2_3322
+sym_2_3322: la $2, sym_2_3322
+.globl sym_2_3323
+sym_2_3323: la $2, sym_2_3323
+.globl sym_2_3324
+sym_2_3324: la $2, sym_2_3324
+.globl sym_2_3325
+sym_2_3325: la $2, sym_2_3325
+.globl sym_2_3326
+sym_2_3326: la $2, sym_2_3326
+.globl sym_2_3327
+sym_2_3327: la $2, sym_2_3327
+.globl sym_2_3328
+sym_2_3328: la $2, sym_2_3328
+.globl sym_2_3329
+sym_2_3329: la $2, sym_2_3329
+.globl sym_2_3330
+sym_2_3330: la $2, sym_2_3330
+.globl sym_2_3331
+sym_2_3331: la $2, sym_2_3331
+.globl sym_2_3332
+sym_2_3332: la $2, sym_2_3332
+.globl sym_2_3333
+sym_2_3333: la $2, sym_2_3333
+.globl sym_2_3334
+sym_2_3334: la $2, sym_2_3334
+.globl sym_2_3335
+sym_2_3335: la $2, sym_2_3335
+.globl sym_2_3336
+sym_2_3336: la $2, sym_2_3336
+.globl sym_2_3337
+sym_2_3337: la $2, sym_2_3337
+.globl sym_2_3338
+sym_2_3338: la $2, sym_2_3338
+.globl sym_2_3339
+sym_2_3339: la $2, sym_2_3339
+.globl sym_2_3340
+sym_2_3340: la $2, sym_2_3340
+.globl sym_2_3341
+sym_2_3341: la $2, sym_2_3341
+.globl sym_2_3342
+sym_2_3342: la $2, sym_2_3342
+.globl sym_2_3343
+sym_2_3343: la $2, sym_2_3343
+.globl sym_2_3344
+sym_2_3344: la $2, sym_2_3344
+.globl sym_2_3345
+sym_2_3345: la $2, sym_2_3345
+.globl sym_2_3346
+sym_2_3346: la $2, sym_2_3346
+.globl sym_2_3347
+sym_2_3347: la $2, sym_2_3347
+.globl sym_2_3348
+sym_2_3348: la $2, sym_2_3348
+.globl sym_2_3349
+sym_2_3349: la $2, sym_2_3349
+.globl sym_2_3350
+sym_2_3350: la $2, sym_2_3350
+.globl sym_2_3351
+sym_2_3351: la $2, sym_2_3351
+.globl sym_2_3352
+sym_2_3352: la $2, sym_2_3352
+.globl sym_2_3353
+sym_2_3353: la $2, sym_2_3353
+.globl sym_2_3354
+sym_2_3354: la $2, sym_2_3354
+.globl sym_2_3355
+sym_2_3355: la $2, sym_2_3355
+.globl sym_2_3356
+sym_2_3356: la $2, sym_2_3356
+.globl sym_2_3357
+sym_2_3357: la $2, sym_2_3357
+.globl sym_2_3358
+sym_2_3358: la $2, sym_2_3358
+.globl sym_2_3359
+sym_2_3359: la $2, sym_2_3359
+.globl sym_2_3360
+sym_2_3360: la $2, sym_2_3360
+.globl sym_2_3361
+sym_2_3361: la $2, sym_2_3361
+.globl sym_2_3362
+sym_2_3362: la $2, sym_2_3362
+.globl sym_2_3363
+sym_2_3363: la $2, sym_2_3363
+.globl sym_2_3364
+sym_2_3364: la $2, sym_2_3364
+.globl sym_2_3365
+sym_2_3365: la $2, sym_2_3365
+.globl sym_2_3366
+sym_2_3366: la $2, sym_2_3366
+.globl sym_2_3367
+sym_2_3367: la $2, sym_2_3367
+.globl sym_2_3368
+sym_2_3368: la $2, sym_2_3368
+.globl sym_2_3369
+sym_2_3369: la $2, sym_2_3369
+.globl sym_2_3370
+sym_2_3370: la $2, sym_2_3370
+.globl sym_2_3371
+sym_2_3371: la $2, sym_2_3371
+.globl sym_2_3372
+sym_2_3372: la $2, sym_2_3372
+.globl sym_2_3373
+sym_2_3373: la $2, sym_2_3373
+.globl sym_2_3374
+sym_2_3374: la $2, sym_2_3374
+.globl sym_2_3375
+sym_2_3375: la $2, sym_2_3375
+.globl sym_2_3376
+sym_2_3376: la $2, sym_2_3376
+.globl sym_2_3377
+sym_2_3377: la $2, sym_2_3377
+.globl sym_2_3378
+sym_2_3378: la $2, sym_2_3378
+.globl sym_2_3379
+sym_2_3379: la $2, sym_2_3379
+.globl sym_2_3380
+sym_2_3380: la $2, sym_2_3380
+.globl sym_2_3381
+sym_2_3381: la $2, sym_2_3381
+.globl sym_2_3382
+sym_2_3382: la $2, sym_2_3382
+.globl sym_2_3383
+sym_2_3383: la $2, sym_2_3383
+.globl sym_2_3384
+sym_2_3384: la $2, sym_2_3384
+.globl sym_2_3385
+sym_2_3385: la $2, sym_2_3385
+.globl sym_2_3386
+sym_2_3386: la $2, sym_2_3386
+.globl sym_2_3387
+sym_2_3387: la $2, sym_2_3387
+.globl sym_2_3388
+sym_2_3388: la $2, sym_2_3388
+.globl sym_2_3389
+sym_2_3389: la $2, sym_2_3389
+.globl sym_2_3390
+sym_2_3390: la $2, sym_2_3390
+.globl sym_2_3391
+sym_2_3391: la $2, sym_2_3391
+.globl sym_2_3392
+sym_2_3392: la $2, sym_2_3392
+.globl sym_2_3393
+sym_2_3393: la $2, sym_2_3393
+.globl sym_2_3394
+sym_2_3394: la $2, sym_2_3394
+.globl sym_2_3395
+sym_2_3395: la $2, sym_2_3395
+.globl sym_2_3396
+sym_2_3396: la $2, sym_2_3396
+.globl sym_2_3397
+sym_2_3397: la $2, sym_2_3397
+.globl sym_2_3398
+sym_2_3398: la $2, sym_2_3398
+.globl sym_2_3399
+sym_2_3399: la $2, sym_2_3399
+.globl sym_2_3400
+sym_2_3400: la $2, sym_2_3400
+.globl sym_2_3401
+sym_2_3401: la $2, sym_2_3401
+.globl sym_2_3402
+sym_2_3402: la $2, sym_2_3402
+.globl sym_2_3403
+sym_2_3403: la $2, sym_2_3403
+.globl sym_2_3404
+sym_2_3404: la $2, sym_2_3404
+.globl sym_2_3405
+sym_2_3405: la $2, sym_2_3405
+.globl sym_2_3406
+sym_2_3406: la $2, sym_2_3406
+.globl sym_2_3407
+sym_2_3407: la $2, sym_2_3407
+.globl sym_2_3408
+sym_2_3408: la $2, sym_2_3408
+.globl sym_2_3409
+sym_2_3409: la $2, sym_2_3409
+.globl sym_2_3410
+sym_2_3410: la $2, sym_2_3410
+.globl sym_2_3411
+sym_2_3411: la $2, sym_2_3411
+.globl sym_2_3412
+sym_2_3412: la $2, sym_2_3412
+.globl sym_2_3413
+sym_2_3413: la $2, sym_2_3413
+.globl sym_2_3414
+sym_2_3414: la $2, sym_2_3414
+.globl sym_2_3415
+sym_2_3415: la $2, sym_2_3415
+.globl sym_2_3416
+sym_2_3416: la $2, sym_2_3416
+.globl sym_2_3417
+sym_2_3417: la $2, sym_2_3417
+.globl sym_2_3418
+sym_2_3418: la $2, sym_2_3418
+.globl sym_2_3419
+sym_2_3419: la $2, sym_2_3419
+.globl sym_2_3420
+sym_2_3420: la $2, sym_2_3420
+.globl sym_2_3421
+sym_2_3421: la $2, sym_2_3421
+.globl sym_2_3422
+sym_2_3422: la $2, sym_2_3422
+.globl sym_2_3423
+sym_2_3423: la $2, sym_2_3423
+.globl sym_2_3424
+sym_2_3424: la $2, sym_2_3424
+.globl sym_2_3425
+sym_2_3425: la $2, sym_2_3425
+.globl sym_2_3426
+sym_2_3426: la $2, sym_2_3426
+.globl sym_2_3427
+sym_2_3427: la $2, sym_2_3427
+.globl sym_2_3428
+sym_2_3428: la $2, sym_2_3428
+.globl sym_2_3429
+sym_2_3429: la $2, sym_2_3429
+.globl sym_2_3430
+sym_2_3430: la $2, sym_2_3430
+.globl sym_2_3431
+sym_2_3431: la $2, sym_2_3431
+.globl sym_2_3432
+sym_2_3432: la $2, sym_2_3432
+.globl sym_2_3433
+sym_2_3433: la $2, sym_2_3433
+.globl sym_2_3434
+sym_2_3434: la $2, sym_2_3434
+.globl sym_2_3435
+sym_2_3435: la $2, sym_2_3435
+.globl sym_2_3436
+sym_2_3436: la $2, sym_2_3436
+.globl sym_2_3437
+sym_2_3437: la $2, sym_2_3437
+.globl sym_2_3438
+sym_2_3438: la $2, sym_2_3438
+.globl sym_2_3439
+sym_2_3439: la $2, sym_2_3439
+.globl sym_2_3440
+sym_2_3440: la $2, sym_2_3440
+.globl sym_2_3441
+sym_2_3441: la $2, sym_2_3441
+.globl sym_2_3442
+sym_2_3442: la $2, sym_2_3442
+.globl sym_2_3443
+sym_2_3443: la $2, sym_2_3443
+.globl sym_2_3444
+sym_2_3444: la $2, sym_2_3444
+.globl sym_2_3445
+sym_2_3445: la $2, sym_2_3445
+.globl sym_2_3446
+sym_2_3446: la $2, sym_2_3446
+.globl sym_2_3447
+sym_2_3447: la $2, sym_2_3447
+.globl sym_2_3448
+sym_2_3448: la $2, sym_2_3448
+.globl sym_2_3449
+sym_2_3449: la $2, sym_2_3449
+.globl sym_2_3450
+sym_2_3450: la $2, sym_2_3450
+.globl sym_2_3451
+sym_2_3451: la $2, sym_2_3451
+.globl sym_2_3452
+sym_2_3452: la $2, sym_2_3452
+.globl sym_2_3453
+sym_2_3453: la $2, sym_2_3453
+.globl sym_2_3454
+sym_2_3454: la $2, sym_2_3454
+.globl sym_2_3455
+sym_2_3455: la $2, sym_2_3455
+.globl sym_2_3456
+sym_2_3456: la $2, sym_2_3456
+.globl sym_2_3457
+sym_2_3457: la $2, sym_2_3457
+.globl sym_2_3458
+sym_2_3458: la $2, sym_2_3458
+.globl sym_2_3459
+sym_2_3459: la $2, sym_2_3459
+.globl sym_2_3460
+sym_2_3460: la $2, sym_2_3460
+.globl sym_2_3461
+sym_2_3461: la $2, sym_2_3461
+.globl sym_2_3462
+sym_2_3462: la $2, sym_2_3462
+.globl sym_2_3463
+sym_2_3463: la $2, sym_2_3463
+.globl sym_2_3464
+sym_2_3464: la $2, sym_2_3464
+.globl sym_2_3465
+sym_2_3465: la $2, sym_2_3465
+.globl sym_2_3466
+sym_2_3466: la $2, sym_2_3466
+.globl sym_2_3467
+sym_2_3467: la $2, sym_2_3467
+.globl sym_2_3468
+sym_2_3468: la $2, sym_2_3468
+.globl sym_2_3469
+sym_2_3469: la $2, sym_2_3469
+.globl sym_2_3470
+sym_2_3470: la $2, sym_2_3470
+.globl sym_2_3471
+sym_2_3471: la $2, sym_2_3471
+.globl sym_2_3472
+sym_2_3472: la $2, sym_2_3472
+.globl sym_2_3473
+sym_2_3473: la $2, sym_2_3473
+.globl sym_2_3474
+sym_2_3474: la $2, sym_2_3474
+.globl sym_2_3475
+sym_2_3475: la $2, sym_2_3475
+.globl sym_2_3476
+sym_2_3476: la $2, sym_2_3476
+.globl sym_2_3477
+sym_2_3477: la $2, sym_2_3477
+.globl sym_2_3478
+sym_2_3478: la $2, sym_2_3478
+.globl sym_2_3479
+sym_2_3479: la $2, sym_2_3479
+.globl sym_2_3480
+sym_2_3480: la $2, sym_2_3480
+.globl sym_2_3481
+sym_2_3481: la $2, sym_2_3481
+.globl sym_2_3482
+sym_2_3482: la $2, sym_2_3482
+.globl sym_2_3483
+sym_2_3483: la $2, sym_2_3483
+.globl sym_2_3484
+sym_2_3484: la $2, sym_2_3484
+.globl sym_2_3485
+sym_2_3485: la $2, sym_2_3485
+.globl sym_2_3486
+sym_2_3486: la $2, sym_2_3486
+.globl sym_2_3487
+sym_2_3487: la $2, sym_2_3487
+.globl sym_2_3488
+sym_2_3488: la $2, sym_2_3488
+.globl sym_2_3489
+sym_2_3489: la $2, sym_2_3489
+.globl sym_2_3490
+sym_2_3490: la $2, sym_2_3490
+.globl sym_2_3491
+sym_2_3491: la $2, sym_2_3491
+.globl sym_2_3492
+sym_2_3492: la $2, sym_2_3492
+.globl sym_2_3493
+sym_2_3493: la $2, sym_2_3493
+.globl sym_2_3494
+sym_2_3494: la $2, sym_2_3494
+.globl sym_2_3495
+sym_2_3495: la $2, sym_2_3495
+.globl sym_2_3496
+sym_2_3496: la $2, sym_2_3496
+.globl sym_2_3497
+sym_2_3497: la $2, sym_2_3497
+.globl sym_2_3498
+sym_2_3498: la $2, sym_2_3498
+.globl sym_2_3499
+sym_2_3499: la $2, sym_2_3499
+.globl sym_2_3500
+sym_2_3500: la $2, sym_2_3500
+.globl sym_2_3501
+sym_2_3501: la $2, sym_2_3501
+.globl sym_2_3502
+sym_2_3502: la $2, sym_2_3502
+.globl sym_2_3503
+sym_2_3503: la $2, sym_2_3503
+.globl sym_2_3504
+sym_2_3504: la $2, sym_2_3504
+.globl sym_2_3505
+sym_2_3505: la $2, sym_2_3505
+.globl sym_2_3506
+sym_2_3506: la $2, sym_2_3506
+.globl sym_2_3507
+sym_2_3507: la $2, sym_2_3507
+.globl sym_2_3508
+sym_2_3508: la $2, sym_2_3508
+.globl sym_2_3509
+sym_2_3509: la $2, sym_2_3509
+.globl sym_2_3510
+sym_2_3510: la $2, sym_2_3510
+.globl sym_2_3511
+sym_2_3511: la $2, sym_2_3511
+.globl sym_2_3512
+sym_2_3512: la $2, sym_2_3512
+.globl sym_2_3513
+sym_2_3513: la $2, sym_2_3513
+.globl sym_2_3514
+sym_2_3514: la $2, sym_2_3514
+.globl sym_2_3515
+sym_2_3515: la $2, sym_2_3515
+.globl sym_2_3516
+sym_2_3516: la $2, sym_2_3516
+.globl sym_2_3517
+sym_2_3517: la $2, sym_2_3517
+.globl sym_2_3518
+sym_2_3518: la $2, sym_2_3518
+.globl sym_2_3519
+sym_2_3519: la $2, sym_2_3519
+.globl sym_2_3520
+sym_2_3520: la $2, sym_2_3520
+.globl sym_2_3521
+sym_2_3521: la $2, sym_2_3521
+.globl sym_2_3522
+sym_2_3522: la $2, sym_2_3522
+.globl sym_2_3523
+sym_2_3523: la $2, sym_2_3523
+.globl sym_2_3524
+sym_2_3524: la $2, sym_2_3524
+.globl sym_2_3525
+sym_2_3525: la $2, sym_2_3525
+.globl sym_2_3526
+sym_2_3526: la $2, sym_2_3526
+.globl sym_2_3527
+sym_2_3527: la $2, sym_2_3527
+.globl sym_2_3528
+sym_2_3528: la $2, sym_2_3528
+.globl sym_2_3529
+sym_2_3529: la $2, sym_2_3529
+.globl sym_2_3530
+sym_2_3530: la $2, sym_2_3530
+.globl sym_2_3531
+sym_2_3531: la $2, sym_2_3531
+.globl sym_2_3532
+sym_2_3532: la $2, sym_2_3532
+.globl sym_2_3533
+sym_2_3533: la $2, sym_2_3533
+.globl sym_2_3534
+sym_2_3534: la $2, sym_2_3534
+.globl sym_2_3535
+sym_2_3535: la $2, sym_2_3535
+.globl sym_2_3536
+sym_2_3536: la $2, sym_2_3536
+.globl sym_2_3537
+sym_2_3537: la $2, sym_2_3537
+.globl sym_2_3538
+sym_2_3538: la $2, sym_2_3538
+.globl sym_2_3539
+sym_2_3539: la $2, sym_2_3539
+.globl sym_2_3540
+sym_2_3540: la $2, sym_2_3540
+.globl sym_2_3541
+sym_2_3541: la $2, sym_2_3541
+.globl sym_2_3542
+sym_2_3542: la $2, sym_2_3542
+.globl sym_2_3543
+sym_2_3543: la $2, sym_2_3543
+.globl sym_2_3544
+sym_2_3544: la $2, sym_2_3544
+.globl sym_2_3545
+sym_2_3545: la $2, sym_2_3545
+.globl sym_2_3546
+sym_2_3546: la $2, sym_2_3546
+.globl sym_2_3547
+sym_2_3547: la $2, sym_2_3547
+.globl sym_2_3548
+sym_2_3548: la $2, sym_2_3548
+.globl sym_2_3549
+sym_2_3549: la $2, sym_2_3549
+.globl sym_2_3550
+sym_2_3550: la $2, sym_2_3550
+.globl sym_2_3551
+sym_2_3551: la $2, sym_2_3551
+.globl sym_2_3552
+sym_2_3552: la $2, sym_2_3552
+.globl sym_2_3553
+sym_2_3553: la $2, sym_2_3553
+.globl sym_2_3554
+sym_2_3554: la $2, sym_2_3554
+.globl sym_2_3555
+sym_2_3555: la $2, sym_2_3555
+.globl sym_2_3556
+sym_2_3556: la $2, sym_2_3556
+.globl sym_2_3557
+sym_2_3557: la $2, sym_2_3557
+.globl sym_2_3558
+sym_2_3558: la $2, sym_2_3558
+.globl sym_2_3559
+sym_2_3559: la $2, sym_2_3559
+.globl sym_2_3560
+sym_2_3560: la $2, sym_2_3560
+.globl sym_2_3561
+sym_2_3561: la $2, sym_2_3561
+.globl sym_2_3562
+sym_2_3562: la $2, sym_2_3562
+.globl sym_2_3563
+sym_2_3563: la $2, sym_2_3563
+.globl sym_2_3564
+sym_2_3564: la $2, sym_2_3564
+.globl sym_2_3565
+sym_2_3565: la $2, sym_2_3565
+.globl sym_2_3566
+sym_2_3566: la $2, sym_2_3566
+.globl sym_2_3567
+sym_2_3567: la $2, sym_2_3567
+.globl sym_2_3568
+sym_2_3568: la $2, sym_2_3568
+.globl sym_2_3569
+sym_2_3569: la $2, sym_2_3569
+.globl sym_2_3570
+sym_2_3570: la $2, sym_2_3570
+.globl sym_2_3571
+sym_2_3571: la $2, sym_2_3571
+.globl sym_2_3572
+sym_2_3572: la $2, sym_2_3572
+.globl sym_2_3573
+sym_2_3573: la $2, sym_2_3573
+.globl sym_2_3574
+sym_2_3574: la $2, sym_2_3574
+.globl sym_2_3575
+sym_2_3575: la $2, sym_2_3575
+.globl sym_2_3576
+sym_2_3576: la $2, sym_2_3576
+.globl sym_2_3577
+sym_2_3577: la $2, sym_2_3577
+.globl sym_2_3578
+sym_2_3578: la $2, sym_2_3578
+.globl sym_2_3579
+sym_2_3579: la $2, sym_2_3579
+.globl sym_2_3580
+sym_2_3580: la $2, sym_2_3580
+.globl sym_2_3581
+sym_2_3581: la $2, sym_2_3581
+.globl sym_2_3582
+sym_2_3582: la $2, sym_2_3582
+.globl sym_2_3583
+sym_2_3583: la $2, sym_2_3583
+.globl sym_2_3584
+sym_2_3584: la $2, sym_2_3584
+.globl sym_2_3585
+sym_2_3585: la $2, sym_2_3585
+.globl sym_2_3586
+sym_2_3586: la $2, sym_2_3586
+.globl sym_2_3587
+sym_2_3587: la $2, sym_2_3587
+.globl sym_2_3588
+sym_2_3588: la $2, sym_2_3588
+.globl sym_2_3589
+sym_2_3589: la $2, sym_2_3589
+.globl sym_2_3590
+sym_2_3590: la $2, sym_2_3590
+.globl sym_2_3591
+sym_2_3591: la $2, sym_2_3591
+.globl sym_2_3592
+sym_2_3592: la $2, sym_2_3592
+.globl sym_2_3593
+sym_2_3593: la $2, sym_2_3593
+.globl sym_2_3594
+sym_2_3594: la $2, sym_2_3594
+.globl sym_2_3595
+sym_2_3595: la $2, sym_2_3595
+.globl sym_2_3596
+sym_2_3596: la $2, sym_2_3596
+.globl sym_2_3597
+sym_2_3597: la $2, sym_2_3597
+.globl sym_2_3598
+sym_2_3598: la $2, sym_2_3598
+.globl sym_2_3599
+sym_2_3599: la $2, sym_2_3599
+.globl sym_2_3600
+sym_2_3600: la $2, sym_2_3600
+.globl sym_2_3601
+sym_2_3601: la $2, sym_2_3601
+.globl sym_2_3602
+sym_2_3602: la $2, sym_2_3602
+.globl sym_2_3603
+sym_2_3603: la $2, sym_2_3603
+.globl sym_2_3604
+sym_2_3604: la $2, sym_2_3604
+.globl sym_2_3605
+sym_2_3605: la $2, sym_2_3605
+.globl sym_2_3606
+sym_2_3606: la $2, sym_2_3606
+.globl sym_2_3607
+sym_2_3607: la $2, sym_2_3607
+.globl sym_2_3608
+sym_2_3608: la $2, sym_2_3608
+.globl sym_2_3609
+sym_2_3609: la $2, sym_2_3609
+.globl sym_2_3610
+sym_2_3610: la $2, sym_2_3610
+.globl sym_2_3611
+sym_2_3611: la $2, sym_2_3611
+.globl sym_2_3612
+sym_2_3612: la $2, sym_2_3612
+.globl sym_2_3613
+sym_2_3613: la $2, sym_2_3613
+.globl sym_2_3614
+sym_2_3614: la $2, sym_2_3614
+.globl sym_2_3615
+sym_2_3615: la $2, sym_2_3615
+.globl sym_2_3616
+sym_2_3616: la $2, sym_2_3616
+.globl sym_2_3617
+sym_2_3617: la $2, sym_2_3617
+.globl sym_2_3618
+sym_2_3618: la $2, sym_2_3618
+.globl sym_2_3619
+sym_2_3619: la $2, sym_2_3619
+.globl sym_2_3620
+sym_2_3620: la $2, sym_2_3620
+.globl sym_2_3621
+sym_2_3621: la $2, sym_2_3621
+.globl sym_2_3622
+sym_2_3622: la $2, sym_2_3622
+.globl sym_2_3623
+sym_2_3623: la $2, sym_2_3623
+.globl sym_2_3624
+sym_2_3624: la $2, sym_2_3624
+.globl sym_2_3625
+sym_2_3625: la $2, sym_2_3625
+.globl sym_2_3626
+sym_2_3626: la $2, sym_2_3626
+.globl sym_2_3627
+sym_2_3627: la $2, sym_2_3627
+.globl sym_2_3628
+sym_2_3628: la $2, sym_2_3628
+.globl sym_2_3629
+sym_2_3629: la $2, sym_2_3629
+.globl sym_2_3630
+sym_2_3630: la $2, sym_2_3630
+.globl sym_2_3631
+sym_2_3631: la $2, sym_2_3631
+.globl sym_2_3632
+sym_2_3632: la $2, sym_2_3632
+.globl sym_2_3633
+sym_2_3633: la $2, sym_2_3633
+.globl sym_2_3634
+sym_2_3634: la $2, sym_2_3634
+.globl sym_2_3635
+sym_2_3635: la $2, sym_2_3635
+.globl sym_2_3636
+sym_2_3636: la $2, sym_2_3636
+.globl sym_2_3637
+sym_2_3637: la $2, sym_2_3637
+.globl sym_2_3638
+sym_2_3638: la $2, sym_2_3638
+.globl sym_2_3639
+sym_2_3639: la $2, sym_2_3639
+.globl sym_2_3640
+sym_2_3640: la $2, sym_2_3640
+.globl sym_2_3641
+sym_2_3641: la $2, sym_2_3641
+.globl sym_2_3642
+sym_2_3642: la $2, sym_2_3642
+.globl sym_2_3643
+sym_2_3643: la $2, sym_2_3643
+.globl sym_2_3644
+sym_2_3644: la $2, sym_2_3644
+.globl sym_2_3645
+sym_2_3645: la $2, sym_2_3645
+.globl sym_2_3646
+sym_2_3646: la $2, sym_2_3646
+.globl sym_2_3647
+sym_2_3647: la $2, sym_2_3647
+.globl sym_2_3648
+sym_2_3648: la $2, sym_2_3648
+.globl sym_2_3649
+sym_2_3649: la $2, sym_2_3649
+.globl sym_2_3650
+sym_2_3650: la $2, sym_2_3650
+.globl sym_2_3651
+sym_2_3651: la $2, sym_2_3651
+.globl sym_2_3652
+sym_2_3652: la $2, sym_2_3652
+.globl sym_2_3653
+sym_2_3653: la $2, sym_2_3653
+.globl sym_2_3654
+sym_2_3654: la $2, sym_2_3654
+.globl sym_2_3655
+sym_2_3655: la $2, sym_2_3655
+.globl sym_2_3656
+sym_2_3656: la $2, sym_2_3656
+.globl sym_2_3657
+sym_2_3657: la $2, sym_2_3657
+.globl sym_2_3658
+sym_2_3658: la $2, sym_2_3658
+.globl sym_2_3659
+sym_2_3659: la $2, sym_2_3659
+.globl sym_2_3660
+sym_2_3660: la $2, sym_2_3660
+.globl sym_2_3661
+sym_2_3661: la $2, sym_2_3661
+.globl sym_2_3662
+sym_2_3662: la $2, sym_2_3662
+.globl sym_2_3663
+sym_2_3663: la $2, sym_2_3663
+.globl sym_2_3664
+sym_2_3664: la $2, sym_2_3664
+.globl sym_2_3665
+sym_2_3665: la $2, sym_2_3665
+.globl sym_2_3666
+sym_2_3666: la $2, sym_2_3666
+.globl sym_2_3667
+sym_2_3667: la $2, sym_2_3667
+.globl sym_2_3668
+sym_2_3668: la $2, sym_2_3668
+.globl sym_2_3669
+sym_2_3669: la $2, sym_2_3669
+.globl sym_2_3670
+sym_2_3670: la $2, sym_2_3670
+.globl sym_2_3671
+sym_2_3671: la $2, sym_2_3671
+.globl sym_2_3672
+sym_2_3672: la $2, sym_2_3672
+.globl sym_2_3673
+sym_2_3673: la $2, sym_2_3673
+.globl sym_2_3674
+sym_2_3674: la $2, sym_2_3674
+.globl sym_2_3675
+sym_2_3675: la $2, sym_2_3675
+.globl sym_2_3676
+sym_2_3676: la $2, sym_2_3676
+.globl sym_2_3677
+sym_2_3677: la $2, sym_2_3677
+.globl sym_2_3678
+sym_2_3678: la $2, sym_2_3678
+.globl sym_2_3679
+sym_2_3679: la $2, sym_2_3679
+.globl sym_2_3680
+sym_2_3680: la $2, sym_2_3680
+.globl sym_2_3681
+sym_2_3681: la $2, sym_2_3681
+.globl sym_2_3682
+sym_2_3682: la $2, sym_2_3682
+.globl sym_2_3683
+sym_2_3683: la $2, sym_2_3683
+.globl sym_2_3684
+sym_2_3684: la $2, sym_2_3684
+.globl sym_2_3685
+sym_2_3685: la $2, sym_2_3685
+.globl sym_2_3686
+sym_2_3686: la $2, sym_2_3686
+.globl sym_2_3687
+sym_2_3687: la $2, sym_2_3687
+.globl sym_2_3688
+sym_2_3688: la $2, sym_2_3688
+.globl sym_2_3689
+sym_2_3689: la $2, sym_2_3689
+.globl sym_2_3690
+sym_2_3690: la $2, sym_2_3690
+.globl sym_2_3691
+sym_2_3691: la $2, sym_2_3691
+.globl sym_2_3692
+sym_2_3692: la $2, sym_2_3692
+.globl sym_2_3693
+sym_2_3693: la $2, sym_2_3693
+.globl sym_2_3694
+sym_2_3694: la $2, sym_2_3694
+.globl sym_2_3695
+sym_2_3695: la $2, sym_2_3695
+.globl sym_2_3696
+sym_2_3696: la $2, sym_2_3696
+.globl sym_2_3697
+sym_2_3697: la $2, sym_2_3697
+.globl sym_2_3698
+sym_2_3698: la $2, sym_2_3698
+.globl sym_2_3699
+sym_2_3699: la $2, sym_2_3699
+.globl sym_2_3700
+sym_2_3700: la $2, sym_2_3700
+.globl sym_2_3701
+sym_2_3701: la $2, sym_2_3701
+.globl sym_2_3702
+sym_2_3702: la $2, sym_2_3702
+.globl sym_2_3703
+sym_2_3703: la $2, sym_2_3703
+.globl sym_2_3704
+sym_2_3704: la $2, sym_2_3704
+.globl sym_2_3705
+sym_2_3705: la $2, sym_2_3705
+.globl sym_2_3706
+sym_2_3706: la $2, sym_2_3706
+.globl sym_2_3707
+sym_2_3707: la $2, sym_2_3707
+.globl sym_2_3708
+sym_2_3708: la $2, sym_2_3708
+.globl sym_2_3709
+sym_2_3709: la $2, sym_2_3709
+.globl sym_2_3710
+sym_2_3710: la $2, sym_2_3710
+.globl sym_2_3711
+sym_2_3711: la $2, sym_2_3711
+.globl sym_2_3712
+sym_2_3712: la $2, sym_2_3712
+.globl sym_2_3713
+sym_2_3713: la $2, sym_2_3713
+.globl sym_2_3714
+sym_2_3714: la $2, sym_2_3714
+.globl sym_2_3715
+sym_2_3715: la $2, sym_2_3715
+.globl sym_2_3716
+sym_2_3716: la $2, sym_2_3716
+.globl sym_2_3717
+sym_2_3717: la $2, sym_2_3717
+.globl sym_2_3718
+sym_2_3718: la $2, sym_2_3718
+.globl sym_2_3719
+sym_2_3719: la $2, sym_2_3719
+.globl sym_2_3720
+sym_2_3720: la $2, sym_2_3720
+.globl sym_2_3721
+sym_2_3721: la $2, sym_2_3721
+.globl sym_2_3722
+sym_2_3722: la $2, sym_2_3722
+.globl sym_2_3723
+sym_2_3723: la $2, sym_2_3723
+.globl sym_2_3724
+sym_2_3724: la $2, sym_2_3724
+.globl sym_2_3725
+sym_2_3725: la $2, sym_2_3725
+.globl sym_2_3726
+sym_2_3726: la $2, sym_2_3726
+.globl sym_2_3727
+sym_2_3727: la $2, sym_2_3727
+.globl sym_2_3728
+sym_2_3728: la $2, sym_2_3728
+.globl sym_2_3729
+sym_2_3729: la $2, sym_2_3729
+.globl sym_2_3730
+sym_2_3730: la $2, sym_2_3730
+.globl sym_2_3731
+sym_2_3731: la $2, sym_2_3731
+.globl sym_2_3732
+sym_2_3732: la $2, sym_2_3732
+.globl sym_2_3733
+sym_2_3733: la $2, sym_2_3733
+.globl sym_2_3734
+sym_2_3734: la $2, sym_2_3734
+.globl sym_2_3735
+sym_2_3735: la $2, sym_2_3735
+.globl sym_2_3736
+sym_2_3736: la $2, sym_2_3736
+.globl sym_2_3737
+sym_2_3737: la $2, sym_2_3737
+.globl sym_2_3738
+sym_2_3738: la $2, sym_2_3738
+.globl sym_2_3739
+sym_2_3739: la $2, sym_2_3739
+.globl sym_2_3740
+sym_2_3740: la $2, sym_2_3740
+.globl sym_2_3741
+sym_2_3741: la $2, sym_2_3741
+.globl sym_2_3742
+sym_2_3742: la $2, sym_2_3742
+.globl sym_2_3743
+sym_2_3743: la $2, sym_2_3743
+.globl sym_2_3744
+sym_2_3744: la $2, sym_2_3744
+.globl sym_2_3745
+sym_2_3745: la $2, sym_2_3745
+.globl sym_2_3746
+sym_2_3746: la $2, sym_2_3746
+.globl sym_2_3747
+sym_2_3747: la $2, sym_2_3747
+.globl sym_2_3748
+sym_2_3748: la $2, sym_2_3748
+.globl sym_2_3749
+sym_2_3749: la $2, sym_2_3749
+.globl sym_2_3750
+sym_2_3750: la $2, sym_2_3750
+.globl sym_2_3751
+sym_2_3751: la $2, sym_2_3751
+.globl sym_2_3752
+sym_2_3752: la $2, sym_2_3752
+.globl sym_2_3753
+sym_2_3753: la $2, sym_2_3753
+.globl sym_2_3754
+sym_2_3754: la $2, sym_2_3754
+.globl sym_2_3755
+sym_2_3755: la $2, sym_2_3755
+.globl sym_2_3756
+sym_2_3756: la $2, sym_2_3756
+.globl sym_2_3757
+sym_2_3757: la $2, sym_2_3757
+.globl sym_2_3758
+sym_2_3758: la $2, sym_2_3758
+.globl sym_2_3759
+sym_2_3759: la $2, sym_2_3759
+.globl sym_2_3760
+sym_2_3760: la $2, sym_2_3760
+.globl sym_2_3761
+sym_2_3761: la $2, sym_2_3761
+.globl sym_2_3762
+sym_2_3762: la $2, sym_2_3762
+.globl sym_2_3763
+sym_2_3763: la $2, sym_2_3763
+.globl sym_2_3764
+sym_2_3764: la $2, sym_2_3764
+.globl sym_2_3765
+sym_2_3765: la $2, sym_2_3765
+.globl sym_2_3766
+sym_2_3766: la $2, sym_2_3766
+.globl sym_2_3767
+sym_2_3767: la $2, sym_2_3767
+.globl sym_2_3768
+sym_2_3768: la $2, sym_2_3768
+.globl sym_2_3769
+sym_2_3769: la $2, sym_2_3769
+.globl sym_2_3770
+sym_2_3770: la $2, sym_2_3770
+.globl sym_2_3771
+sym_2_3771: la $2, sym_2_3771
+.globl sym_2_3772
+sym_2_3772: la $2, sym_2_3772
+.globl sym_2_3773
+sym_2_3773: la $2, sym_2_3773
+.globl sym_2_3774
+sym_2_3774: la $2, sym_2_3774
+.globl sym_2_3775
+sym_2_3775: la $2, sym_2_3775
+.globl sym_2_3776
+sym_2_3776: la $2, sym_2_3776
+.globl sym_2_3777
+sym_2_3777: la $2, sym_2_3777
+.globl sym_2_3778
+sym_2_3778: la $2, sym_2_3778
+.globl sym_2_3779
+sym_2_3779: la $2, sym_2_3779
+.globl sym_2_3780
+sym_2_3780: la $2, sym_2_3780
+.globl sym_2_3781
+sym_2_3781: la $2, sym_2_3781
+.globl sym_2_3782
+sym_2_3782: la $2, sym_2_3782
+.globl sym_2_3783
+sym_2_3783: la $2, sym_2_3783
+.globl sym_2_3784
+sym_2_3784: la $2, sym_2_3784
+.globl sym_2_3785
+sym_2_3785: la $2, sym_2_3785
+.globl sym_2_3786
+sym_2_3786: la $2, sym_2_3786
+.globl sym_2_3787
+sym_2_3787: la $2, sym_2_3787
+.globl sym_2_3788
+sym_2_3788: la $2, sym_2_3788
+.globl sym_2_3789
+sym_2_3789: la $2, sym_2_3789
+.globl sym_2_3790
+sym_2_3790: la $2, sym_2_3790
+.globl sym_2_3791
+sym_2_3791: la $2, sym_2_3791
+.globl sym_2_3792
+sym_2_3792: la $2, sym_2_3792
+.globl sym_2_3793
+sym_2_3793: la $2, sym_2_3793
+.globl sym_2_3794
+sym_2_3794: la $2, sym_2_3794
+.globl sym_2_3795
+sym_2_3795: la $2, sym_2_3795
+.globl sym_2_3796
+sym_2_3796: la $2, sym_2_3796
+.globl sym_2_3797
+sym_2_3797: la $2, sym_2_3797
+.globl sym_2_3798
+sym_2_3798: la $2, sym_2_3798
+.globl sym_2_3799
+sym_2_3799: la $2, sym_2_3799
+.globl sym_2_3800
+sym_2_3800: la $2, sym_2_3800
+.globl sym_2_3801
+sym_2_3801: la $2, sym_2_3801
+.globl sym_2_3802
+sym_2_3802: la $2, sym_2_3802
+.globl sym_2_3803
+sym_2_3803: la $2, sym_2_3803
+.globl sym_2_3804
+sym_2_3804: la $2, sym_2_3804
+.globl sym_2_3805
+sym_2_3805: la $2, sym_2_3805
+.globl sym_2_3806
+sym_2_3806: la $2, sym_2_3806
+.globl sym_2_3807
+sym_2_3807: la $2, sym_2_3807
+.globl sym_2_3808
+sym_2_3808: la $2, sym_2_3808
+.globl sym_2_3809
+sym_2_3809: la $2, sym_2_3809
+.globl sym_2_3810
+sym_2_3810: la $2, sym_2_3810
+.globl sym_2_3811
+sym_2_3811: la $2, sym_2_3811
+.globl sym_2_3812
+sym_2_3812: la $2, sym_2_3812
+.globl sym_2_3813
+sym_2_3813: la $2, sym_2_3813
+.globl sym_2_3814
+sym_2_3814: la $2, sym_2_3814
+.globl sym_2_3815
+sym_2_3815: la $2, sym_2_3815
+.globl sym_2_3816
+sym_2_3816: la $2, sym_2_3816
+.globl sym_2_3817
+sym_2_3817: la $2, sym_2_3817
+.globl sym_2_3818
+sym_2_3818: la $2, sym_2_3818
+.globl sym_2_3819
+sym_2_3819: la $2, sym_2_3819
+.globl sym_2_3820
+sym_2_3820: la $2, sym_2_3820
+.globl sym_2_3821
+sym_2_3821: la $2, sym_2_3821
+.globl sym_2_3822
+sym_2_3822: la $2, sym_2_3822
+.globl sym_2_3823
+sym_2_3823: la $2, sym_2_3823
+.globl sym_2_3824
+sym_2_3824: la $2, sym_2_3824
+.globl sym_2_3825
+sym_2_3825: la $2, sym_2_3825
+.globl sym_2_3826
+sym_2_3826: la $2, sym_2_3826
+.globl sym_2_3827
+sym_2_3827: la $2, sym_2_3827
+.globl sym_2_3828
+sym_2_3828: la $2, sym_2_3828
+.globl sym_2_3829
+sym_2_3829: la $2, sym_2_3829
+.globl sym_2_3830
+sym_2_3830: la $2, sym_2_3830
+.globl sym_2_3831
+sym_2_3831: la $2, sym_2_3831
+.globl sym_2_3832
+sym_2_3832: la $2, sym_2_3832
+.globl sym_2_3833
+sym_2_3833: la $2, sym_2_3833
+.globl sym_2_3834
+sym_2_3834: la $2, sym_2_3834
+.globl sym_2_3835
+sym_2_3835: la $2, sym_2_3835
+.globl sym_2_3836
+sym_2_3836: la $2, sym_2_3836
+.globl sym_2_3837
+sym_2_3837: la $2, sym_2_3837
+.globl sym_2_3838
+sym_2_3838: la $2, sym_2_3838
+.globl sym_2_3839
+sym_2_3839: la $2, sym_2_3839
+.globl sym_2_3840
+sym_2_3840: la $2, sym_2_3840
+.globl sym_2_3841
+sym_2_3841: la $2, sym_2_3841
+.globl sym_2_3842
+sym_2_3842: la $2, sym_2_3842
+.globl sym_2_3843
+sym_2_3843: la $2, sym_2_3843
+.globl sym_2_3844
+sym_2_3844: la $2, sym_2_3844
+.globl sym_2_3845
+sym_2_3845: la $2, sym_2_3845
+.globl sym_2_3846
+sym_2_3846: la $2, sym_2_3846
+.globl sym_2_3847
+sym_2_3847: la $2, sym_2_3847
+.globl sym_2_3848
+sym_2_3848: la $2, sym_2_3848
+.globl sym_2_3849
+sym_2_3849: la $2, sym_2_3849
+.globl sym_2_3850
+sym_2_3850: la $2, sym_2_3850
+.globl sym_2_3851
+sym_2_3851: la $2, sym_2_3851
+.globl sym_2_3852
+sym_2_3852: la $2, sym_2_3852
+.globl sym_2_3853
+sym_2_3853: la $2, sym_2_3853
+.globl sym_2_3854
+sym_2_3854: la $2, sym_2_3854
+.globl sym_2_3855
+sym_2_3855: la $2, sym_2_3855
+.globl sym_2_3856
+sym_2_3856: la $2, sym_2_3856
+.globl sym_2_3857
+sym_2_3857: la $2, sym_2_3857
+.globl sym_2_3858
+sym_2_3858: la $2, sym_2_3858
+.globl sym_2_3859
+sym_2_3859: la $2, sym_2_3859
+.globl sym_2_3860
+sym_2_3860: la $2, sym_2_3860
+.globl sym_2_3861
+sym_2_3861: la $2, sym_2_3861
+.globl sym_2_3862
+sym_2_3862: la $2, sym_2_3862
+.globl sym_2_3863
+sym_2_3863: la $2, sym_2_3863
+.globl sym_2_3864
+sym_2_3864: la $2, sym_2_3864
+.globl sym_2_3865
+sym_2_3865: la $2, sym_2_3865
+.globl sym_2_3866
+sym_2_3866: la $2, sym_2_3866
+.globl sym_2_3867
+sym_2_3867: la $2, sym_2_3867
+.globl sym_2_3868
+sym_2_3868: la $2, sym_2_3868
+.globl sym_2_3869
+sym_2_3869: la $2, sym_2_3869
+.globl sym_2_3870
+sym_2_3870: la $2, sym_2_3870
+.globl sym_2_3871
+sym_2_3871: la $2, sym_2_3871
+.globl sym_2_3872
+sym_2_3872: la $2, sym_2_3872
+.globl sym_2_3873
+sym_2_3873: la $2, sym_2_3873
+.globl sym_2_3874
+sym_2_3874: la $2, sym_2_3874
+.globl sym_2_3875
+sym_2_3875: la $2, sym_2_3875
+.globl sym_2_3876
+sym_2_3876: la $2, sym_2_3876
+.globl sym_2_3877
+sym_2_3877: la $2, sym_2_3877
+.globl sym_2_3878
+sym_2_3878: la $2, sym_2_3878
+.globl sym_2_3879
+sym_2_3879: la $2, sym_2_3879
+.globl sym_2_3880
+sym_2_3880: la $2, sym_2_3880
+.globl sym_2_3881
+sym_2_3881: la $2, sym_2_3881
+.globl sym_2_3882
+sym_2_3882: la $2, sym_2_3882
+.globl sym_2_3883
+sym_2_3883: la $2, sym_2_3883
+.globl sym_2_3884
+sym_2_3884: la $2, sym_2_3884
+.globl sym_2_3885
+sym_2_3885: la $2, sym_2_3885
+.globl sym_2_3886
+sym_2_3886: la $2, sym_2_3886
+.globl sym_2_3887
+sym_2_3887: la $2, sym_2_3887
+.globl sym_2_3888
+sym_2_3888: la $2, sym_2_3888
+.globl sym_2_3889
+sym_2_3889: la $2, sym_2_3889
+.globl sym_2_3890
+sym_2_3890: la $2, sym_2_3890
+.globl sym_2_3891
+sym_2_3891: la $2, sym_2_3891
+.globl sym_2_3892
+sym_2_3892: la $2, sym_2_3892
+.globl sym_2_3893
+sym_2_3893: la $2, sym_2_3893
+.globl sym_2_3894
+sym_2_3894: la $2, sym_2_3894
+.globl sym_2_3895
+sym_2_3895: la $2, sym_2_3895
+.globl sym_2_3896
+sym_2_3896: la $2, sym_2_3896
+.globl sym_2_3897
+sym_2_3897: la $2, sym_2_3897
+.globl sym_2_3898
+sym_2_3898: la $2, sym_2_3898
+.globl sym_2_3899
+sym_2_3899: la $2, sym_2_3899
+.globl sym_2_3900
+sym_2_3900: la $2, sym_2_3900
+.globl sym_2_3901
+sym_2_3901: la $2, sym_2_3901
+.globl sym_2_3902
+sym_2_3902: la $2, sym_2_3902
+.globl sym_2_3903
+sym_2_3903: la $2, sym_2_3903
+.globl sym_2_3904
+sym_2_3904: la $2, sym_2_3904
+.globl sym_2_3905
+sym_2_3905: la $2, sym_2_3905
+.globl sym_2_3906
+sym_2_3906: la $2, sym_2_3906
+.globl sym_2_3907
+sym_2_3907: la $2, sym_2_3907
+.globl sym_2_3908
+sym_2_3908: la $2, sym_2_3908
+.globl sym_2_3909
+sym_2_3909: la $2, sym_2_3909
+.globl sym_2_3910
+sym_2_3910: la $2, sym_2_3910
+.globl sym_2_3911
+sym_2_3911: la $2, sym_2_3911
+.globl sym_2_3912
+sym_2_3912: la $2, sym_2_3912
+.globl sym_2_3913
+sym_2_3913: la $2, sym_2_3913
+.globl sym_2_3914
+sym_2_3914: la $2, sym_2_3914
+.globl sym_2_3915
+sym_2_3915: la $2, sym_2_3915
+.globl sym_2_3916
+sym_2_3916: la $2, sym_2_3916
+.globl sym_2_3917
+sym_2_3917: la $2, sym_2_3917
+.globl sym_2_3918
+sym_2_3918: la $2, sym_2_3918
+.globl sym_2_3919
+sym_2_3919: la $2, sym_2_3919
+.globl sym_2_3920
+sym_2_3920: la $2, sym_2_3920
+.globl sym_2_3921
+sym_2_3921: la $2, sym_2_3921
+.globl sym_2_3922
+sym_2_3922: la $2, sym_2_3922
+.globl sym_2_3923
+sym_2_3923: la $2, sym_2_3923
+.globl sym_2_3924
+sym_2_3924: la $2, sym_2_3924
+.globl sym_2_3925
+sym_2_3925: la $2, sym_2_3925
+.globl sym_2_3926
+sym_2_3926: la $2, sym_2_3926
+.globl sym_2_3927
+sym_2_3927: la $2, sym_2_3927
+.globl sym_2_3928
+sym_2_3928: la $2, sym_2_3928
+.globl sym_2_3929
+sym_2_3929: la $2, sym_2_3929
+.globl sym_2_3930
+sym_2_3930: la $2, sym_2_3930
+.globl sym_2_3931
+sym_2_3931: la $2, sym_2_3931
+.globl sym_2_3932
+sym_2_3932: la $2, sym_2_3932
+.globl sym_2_3933
+sym_2_3933: la $2, sym_2_3933
+.globl sym_2_3934
+sym_2_3934: la $2, sym_2_3934
+.globl sym_2_3935
+sym_2_3935: la $2, sym_2_3935
+.globl sym_2_3936
+sym_2_3936: la $2, sym_2_3936
+.globl sym_2_3937
+sym_2_3937: la $2, sym_2_3937
+.globl sym_2_3938
+sym_2_3938: la $2, sym_2_3938
+.globl sym_2_3939
+sym_2_3939: la $2, sym_2_3939
+.globl sym_2_3940
+sym_2_3940: la $2, sym_2_3940
+.globl sym_2_3941
+sym_2_3941: la $2, sym_2_3941
+.globl sym_2_3942
+sym_2_3942: la $2, sym_2_3942
+.globl sym_2_3943
+sym_2_3943: la $2, sym_2_3943
+.globl sym_2_3944
+sym_2_3944: la $2, sym_2_3944
+.globl sym_2_3945
+sym_2_3945: la $2, sym_2_3945
+.globl sym_2_3946
+sym_2_3946: la $2, sym_2_3946
+.globl sym_2_3947
+sym_2_3947: la $2, sym_2_3947
+.globl sym_2_3948
+sym_2_3948: la $2, sym_2_3948
+.globl sym_2_3949
+sym_2_3949: la $2, sym_2_3949
+.globl sym_2_3950
+sym_2_3950: la $2, sym_2_3950
+.globl sym_2_3951
+sym_2_3951: la $2, sym_2_3951
+.globl sym_2_3952
+sym_2_3952: la $2, sym_2_3952
+.globl sym_2_3953
+sym_2_3953: la $2, sym_2_3953
+.globl sym_2_3954
+sym_2_3954: la $2, sym_2_3954
+.globl sym_2_3955
+sym_2_3955: la $2, sym_2_3955
+.globl sym_2_3956
+sym_2_3956: la $2, sym_2_3956
+.globl sym_2_3957
+sym_2_3957: la $2, sym_2_3957
+.globl sym_2_3958
+sym_2_3958: la $2, sym_2_3958
+.globl sym_2_3959
+sym_2_3959: la $2, sym_2_3959
+.globl sym_2_3960
+sym_2_3960: la $2, sym_2_3960
+.globl sym_2_3961
+sym_2_3961: la $2, sym_2_3961
+.globl sym_2_3962
+sym_2_3962: la $2, sym_2_3962
+.globl sym_2_3963
+sym_2_3963: la $2, sym_2_3963
+.globl sym_2_3964
+sym_2_3964: la $2, sym_2_3964
+.globl sym_2_3965
+sym_2_3965: la $2, sym_2_3965
+.globl sym_2_3966
+sym_2_3966: la $2, sym_2_3966
+.globl sym_2_3967
+sym_2_3967: la $2, sym_2_3967
+.globl sym_2_3968
+sym_2_3968: la $2, sym_2_3968
+.globl sym_2_3969
+sym_2_3969: la $2, sym_2_3969
+.globl sym_2_3970
+sym_2_3970: la $2, sym_2_3970
+.globl sym_2_3971
+sym_2_3971: la $2, sym_2_3971
+.globl sym_2_3972
+sym_2_3972: la $2, sym_2_3972
+.globl sym_2_3973
+sym_2_3973: la $2, sym_2_3973
+.globl sym_2_3974
+sym_2_3974: la $2, sym_2_3974
+.globl sym_2_3975
+sym_2_3975: la $2, sym_2_3975
+.globl sym_2_3976
+sym_2_3976: la $2, sym_2_3976
+.globl sym_2_3977
+sym_2_3977: la $2, sym_2_3977
+.globl sym_2_3978
+sym_2_3978: la $2, sym_2_3978
+.globl sym_2_3979
+sym_2_3979: la $2, sym_2_3979
+.globl sym_2_3980
+sym_2_3980: la $2, sym_2_3980
+.globl sym_2_3981
+sym_2_3981: la $2, sym_2_3981
+.globl sym_2_3982
+sym_2_3982: la $2, sym_2_3982
+.globl sym_2_3983
+sym_2_3983: la $2, sym_2_3983
+.globl sym_2_3984
+sym_2_3984: la $2, sym_2_3984
+.globl sym_2_3985
+sym_2_3985: la $2, sym_2_3985
+.globl sym_2_3986
+sym_2_3986: la $2, sym_2_3986
+.globl sym_2_3987
+sym_2_3987: la $2, sym_2_3987
+.globl sym_2_3988
+sym_2_3988: la $2, sym_2_3988
+.globl sym_2_3989
+sym_2_3989: la $2, sym_2_3989
+.globl sym_2_3990
+sym_2_3990: la $2, sym_2_3990
+.globl sym_2_3991
+sym_2_3991: la $2, sym_2_3991
+.globl sym_2_3992
+sym_2_3992: la $2, sym_2_3992
+.globl sym_2_3993
+sym_2_3993: la $2, sym_2_3993
+.globl sym_2_3994
+sym_2_3994: la $2, sym_2_3994
+.globl sym_2_3995
+sym_2_3995: la $2, sym_2_3995
+.globl sym_2_3996
+sym_2_3996: la $2, sym_2_3996
+.globl sym_2_3997
+sym_2_3997: la $2, sym_2_3997
+.globl sym_2_3998
+sym_2_3998: la $2, sym_2_3998
+.globl sym_2_3999
+sym_2_3999: la $2, sym_2_3999
+.globl sym_2_4000
+sym_2_4000: la $2, sym_2_4000
+.globl sym_2_4001
+sym_2_4001: la $2, sym_2_4001
+.globl sym_2_4002
+sym_2_4002: la $2, sym_2_4002
+.globl sym_2_4003
+sym_2_4003: la $2, sym_2_4003
+.globl sym_2_4004
+sym_2_4004: la $2, sym_2_4004
+.globl sym_2_4005
+sym_2_4005: la $2, sym_2_4005
+.globl sym_2_4006
+sym_2_4006: la $2, sym_2_4006
+.globl sym_2_4007
+sym_2_4007: la $2, sym_2_4007
+.globl sym_2_4008
+sym_2_4008: la $2, sym_2_4008
+.globl sym_2_4009
+sym_2_4009: la $2, sym_2_4009
+.globl sym_2_4010
+sym_2_4010: la $2, sym_2_4010
+.globl sym_2_4011
+sym_2_4011: la $2, sym_2_4011
+.globl sym_2_4012
+sym_2_4012: la $2, sym_2_4012
+.globl sym_2_4013
+sym_2_4013: la $2, sym_2_4013
+.globl sym_2_4014
+sym_2_4014: la $2, sym_2_4014
+.globl sym_2_4015
+sym_2_4015: la $2, sym_2_4015
+.globl sym_2_4016
+sym_2_4016: la $2, sym_2_4016
+.globl sym_2_4017
+sym_2_4017: la $2, sym_2_4017
+.globl sym_2_4018
+sym_2_4018: la $2, sym_2_4018
+.globl sym_2_4019
+sym_2_4019: la $2, sym_2_4019
+.globl sym_2_4020
+sym_2_4020: la $2, sym_2_4020
+.globl sym_2_4021
+sym_2_4021: la $2, sym_2_4021
+.globl sym_2_4022
+sym_2_4022: la $2, sym_2_4022
+.globl sym_2_4023
+sym_2_4023: la $2, sym_2_4023
+.globl sym_2_4024
+sym_2_4024: la $2, sym_2_4024
+.globl sym_2_4025
+sym_2_4025: la $2, sym_2_4025
+.globl sym_2_4026
+sym_2_4026: la $2, sym_2_4026
+.globl sym_2_4027
+sym_2_4027: la $2, sym_2_4027
+.globl sym_2_4028
+sym_2_4028: la $2, sym_2_4028
+.globl sym_2_4029
+sym_2_4029: la $2, sym_2_4029
+.globl sym_2_4030
+sym_2_4030: la $2, sym_2_4030
+.globl sym_2_4031
+sym_2_4031: la $2, sym_2_4031
+.globl sym_2_4032
+sym_2_4032: la $2, sym_2_4032
+.globl sym_2_4033
+sym_2_4033: la $2, sym_2_4033
+.globl sym_2_4034
+sym_2_4034: la $2, sym_2_4034
+.globl sym_2_4035
+sym_2_4035: la $2, sym_2_4035
+.globl sym_2_4036
+sym_2_4036: la $2, sym_2_4036
+.globl sym_2_4037
+sym_2_4037: la $2, sym_2_4037
+.globl sym_2_4038
+sym_2_4038: la $2, sym_2_4038
+.globl sym_2_4039
+sym_2_4039: la $2, sym_2_4039
+.globl sym_2_4040
+sym_2_4040: la $2, sym_2_4040
+.globl sym_2_4041
+sym_2_4041: la $2, sym_2_4041
+.globl sym_2_4042
+sym_2_4042: la $2, sym_2_4042
+.globl sym_2_4043
+sym_2_4043: la $2, sym_2_4043
+.globl sym_2_4044
+sym_2_4044: la $2, sym_2_4044
+.globl sym_2_4045
+sym_2_4045: la $2, sym_2_4045
+.globl sym_2_4046
+sym_2_4046: la $2, sym_2_4046
+.globl sym_2_4047
+sym_2_4047: la $2, sym_2_4047
+.globl sym_2_4048
+sym_2_4048: la $2, sym_2_4048
+.globl sym_2_4049
+sym_2_4049: la $2, sym_2_4049
+.globl sym_2_4050
+sym_2_4050: la $2, sym_2_4050
+.globl sym_2_4051
+sym_2_4051: la $2, sym_2_4051
+.globl sym_2_4052
+sym_2_4052: la $2, sym_2_4052
+.globl sym_2_4053
+sym_2_4053: la $2, sym_2_4053
+.globl sym_2_4054
+sym_2_4054: la $2, sym_2_4054
+.globl sym_2_4055
+sym_2_4055: la $2, sym_2_4055
+.globl sym_2_4056
+sym_2_4056: la $2, sym_2_4056
+.globl sym_2_4057
+sym_2_4057: la $2, sym_2_4057
+.globl sym_2_4058
+sym_2_4058: la $2, sym_2_4058
+.globl sym_2_4059
+sym_2_4059: la $2, sym_2_4059
+.globl sym_2_4060
+sym_2_4060: la $2, sym_2_4060
+.globl sym_2_4061
+sym_2_4061: la $2, sym_2_4061
+.globl sym_2_4062
+sym_2_4062: la $2, sym_2_4062
+.globl sym_2_4063
+sym_2_4063: la $2, sym_2_4063
+.globl sym_2_4064
+sym_2_4064: la $2, sym_2_4064
+.globl sym_2_4065
+sym_2_4065: la $2, sym_2_4065
+.globl sym_2_4066
+sym_2_4066: la $2, sym_2_4066
+.globl sym_2_4067
+sym_2_4067: la $2, sym_2_4067
+.globl sym_2_4068
+sym_2_4068: la $2, sym_2_4068
+.globl sym_2_4069
+sym_2_4069: la $2, sym_2_4069
+.globl sym_2_4070
+sym_2_4070: la $2, sym_2_4070
+.globl sym_2_4071
+sym_2_4071: la $2, sym_2_4071
+.globl sym_2_4072
+sym_2_4072: la $2, sym_2_4072
+.globl sym_2_4073
+sym_2_4073: la $2, sym_2_4073
+.globl sym_2_4074
+sym_2_4074: la $2, sym_2_4074
+.globl sym_2_4075
+sym_2_4075: la $2, sym_2_4075
+.globl sym_2_4076
+sym_2_4076: la $2, sym_2_4076
+.globl sym_2_4077
+sym_2_4077: la $2, sym_2_4077
+.globl sym_2_4078
+sym_2_4078: la $2, sym_2_4078
+.globl sym_2_4079
+sym_2_4079: la $2, sym_2_4079
+.globl sym_2_4080
+sym_2_4080: la $2, sym_2_4080
+.globl sym_2_4081
+sym_2_4081: la $2, sym_2_4081
+.globl sym_2_4082
+sym_2_4082: la $2, sym_2_4082
+.globl sym_2_4083
+sym_2_4083: la $2, sym_2_4083
+.globl sym_2_4084
+sym_2_4084: la $2, sym_2_4084
+.globl sym_2_4085
+sym_2_4085: la $2, sym_2_4085
+.globl sym_2_4086
+sym_2_4086: la $2, sym_2_4086
+.globl sym_2_4087
+sym_2_4087: la $2, sym_2_4087
+.globl sym_2_4088
+sym_2_4088: la $2, sym_2_4088
+.globl sym_2_4089
+sym_2_4089: la $2, sym_2_4089
+.globl sym_2_4090
+sym_2_4090: la $2, sym_2_4090
+.globl sym_2_4091
+sym_2_4091: la $2, sym_2_4091
+.globl sym_2_4092
+sym_2_4092: la $2, sym_2_4092
+.globl sym_2_4093
+sym_2_4093: la $2, sym_2_4093
+.globl sym_2_4094
+sym_2_4094: la $2, sym_2_4094
+.globl sym_2_4095
+sym_2_4095: la $2, sym_2_4095
+.globl sym_2_4096
+sym_2_4096: la $2, sym_2_4096
+.globl sym_2_4097
+sym_2_4097: la $2, sym_2_4097
+.globl sym_2_4098
+sym_2_4098: la $2, sym_2_4098
+.globl sym_2_4099
+sym_2_4099: la $2, sym_2_4099
+.globl sym_2_4100
+sym_2_4100: la $2, sym_2_4100
+.globl sym_2_4101
+sym_2_4101: la $2, sym_2_4101
+.globl sym_2_4102
+sym_2_4102: la $2, sym_2_4102
+.globl sym_2_4103
+sym_2_4103: la $2, sym_2_4103
+.globl sym_2_4104
+sym_2_4104: la $2, sym_2_4104
+.globl sym_2_4105
+sym_2_4105: la $2, sym_2_4105
+.globl sym_2_4106
+sym_2_4106: la $2, sym_2_4106
+.globl sym_2_4107
+sym_2_4107: la $2, sym_2_4107
+.globl sym_2_4108
+sym_2_4108: la $2, sym_2_4108
+.globl sym_2_4109
+sym_2_4109: la $2, sym_2_4109
+.globl sym_2_4110
+sym_2_4110: la $2, sym_2_4110
+.globl sym_2_4111
+sym_2_4111: la $2, sym_2_4111
+.globl sym_2_4112
+sym_2_4112: la $2, sym_2_4112
+.globl sym_2_4113
+sym_2_4113: la $2, sym_2_4113
+.globl sym_2_4114
+sym_2_4114: la $2, sym_2_4114
+.globl sym_2_4115
+sym_2_4115: la $2, sym_2_4115
+.globl sym_2_4116
+sym_2_4116: la $2, sym_2_4116
+.globl sym_2_4117
+sym_2_4117: la $2, sym_2_4117
+.globl sym_2_4118
+sym_2_4118: la $2, sym_2_4118
+.globl sym_2_4119
+sym_2_4119: la $2, sym_2_4119
+.globl sym_2_4120
+sym_2_4120: la $2, sym_2_4120
+.globl sym_2_4121
+sym_2_4121: la $2, sym_2_4121
+.globl sym_2_4122
+sym_2_4122: la $2, sym_2_4122
+.globl sym_2_4123
+sym_2_4123: la $2, sym_2_4123
+.globl sym_2_4124
+sym_2_4124: la $2, sym_2_4124
+.globl sym_2_4125
+sym_2_4125: la $2, sym_2_4125
+.globl sym_2_4126
+sym_2_4126: la $2, sym_2_4126
+.globl sym_2_4127
+sym_2_4127: la $2, sym_2_4127
+.globl sym_2_4128
+sym_2_4128: la $2, sym_2_4128
+.globl sym_2_4129
+sym_2_4129: la $2, sym_2_4129
+.globl sym_2_4130
+sym_2_4130: la $2, sym_2_4130
+.globl sym_2_4131
+sym_2_4131: la $2, sym_2_4131
+.globl sym_2_4132
+sym_2_4132: la $2, sym_2_4132
+.globl sym_2_4133
+sym_2_4133: la $2, sym_2_4133
+.globl sym_2_4134
+sym_2_4134: la $2, sym_2_4134
+.globl sym_2_4135
+sym_2_4135: la $2, sym_2_4135
+.globl sym_2_4136
+sym_2_4136: la $2, sym_2_4136
+.globl sym_2_4137
+sym_2_4137: la $2, sym_2_4137
+.globl sym_2_4138
+sym_2_4138: la $2, sym_2_4138
+.globl sym_2_4139
+sym_2_4139: la $2, sym_2_4139
+.globl sym_2_4140
+sym_2_4140: la $2, sym_2_4140
+.globl sym_2_4141
+sym_2_4141: la $2, sym_2_4141
+.globl sym_2_4142
+sym_2_4142: la $2, sym_2_4142
+.globl sym_2_4143
+sym_2_4143: la $2, sym_2_4143
+.globl sym_2_4144
+sym_2_4144: la $2, sym_2_4144
+.globl sym_2_4145
+sym_2_4145: la $2, sym_2_4145
+.globl sym_2_4146
+sym_2_4146: la $2, sym_2_4146
+.globl sym_2_4147
+sym_2_4147: la $2, sym_2_4147
+.globl sym_2_4148
+sym_2_4148: la $2, sym_2_4148
+.globl sym_2_4149
+sym_2_4149: la $2, sym_2_4149
+.globl sym_2_4150
+sym_2_4150: la $2, sym_2_4150
+.globl sym_2_4151
+sym_2_4151: la $2, sym_2_4151
+.globl sym_2_4152
+sym_2_4152: la $2, sym_2_4152
+.globl sym_2_4153
+sym_2_4153: la $2, sym_2_4153
+.globl sym_2_4154
+sym_2_4154: la $2, sym_2_4154
+.globl sym_2_4155
+sym_2_4155: la $2, sym_2_4155
+.globl sym_2_4156
+sym_2_4156: la $2, sym_2_4156
+.globl sym_2_4157
+sym_2_4157: la $2, sym_2_4157
+.globl sym_2_4158
+sym_2_4158: la $2, sym_2_4158
+.globl sym_2_4159
+sym_2_4159: la $2, sym_2_4159
+.globl sym_2_4160
+sym_2_4160: la $2, sym_2_4160
+.globl sym_2_4161
+sym_2_4161: la $2, sym_2_4161
+.globl sym_2_4162
+sym_2_4162: la $2, sym_2_4162
+.globl sym_2_4163
+sym_2_4163: la $2, sym_2_4163
+.globl sym_2_4164
+sym_2_4164: la $2, sym_2_4164
+.globl sym_2_4165
+sym_2_4165: la $2, sym_2_4165
+.globl sym_2_4166
+sym_2_4166: la $2, sym_2_4166
+.globl sym_2_4167
+sym_2_4167: la $2, sym_2_4167
+.globl sym_2_4168
+sym_2_4168: la $2, sym_2_4168
+.globl sym_2_4169
+sym_2_4169: la $2, sym_2_4169
+.globl sym_2_4170
+sym_2_4170: la $2, sym_2_4170
+.globl sym_2_4171
+sym_2_4171: la $2, sym_2_4171
+.globl sym_2_4172
+sym_2_4172: la $2, sym_2_4172
+.globl sym_2_4173
+sym_2_4173: la $2, sym_2_4173
+.globl sym_2_4174
+sym_2_4174: la $2, sym_2_4174
+.globl sym_2_4175
+sym_2_4175: la $2, sym_2_4175
+.globl sym_2_4176
+sym_2_4176: la $2, sym_2_4176
+.globl sym_2_4177
+sym_2_4177: la $2, sym_2_4177
+.globl sym_2_4178
+sym_2_4178: la $2, sym_2_4178
+.globl sym_2_4179
+sym_2_4179: la $2, sym_2_4179
+.globl sym_2_4180
+sym_2_4180: la $2, sym_2_4180
+.globl sym_2_4181
+sym_2_4181: la $2, sym_2_4181
+.globl sym_2_4182
+sym_2_4182: la $2, sym_2_4182
+.globl sym_2_4183
+sym_2_4183: la $2, sym_2_4183
+.globl sym_2_4184
+sym_2_4184: la $2, sym_2_4184
+.globl sym_2_4185
+sym_2_4185: la $2, sym_2_4185
+.globl sym_2_4186
+sym_2_4186: la $2, sym_2_4186
+.globl sym_2_4187
+sym_2_4187: la $2, sym_2_4187
+.globl sym_2_4188
+sym_2_4188: la $2, sym_2_4188
+.globl sym_2_4189
+sym_2_4189: la $2, sym_2_4189
+.globl sym_2_4190
+sym_2_4190: la $2, sym_2_4190
+.globl sym_2_4191
+sym_2_4191: la $2, sym_2_4191
+.globl sym_2_4192
+sym_2_4192: la $2, sym_2_4192
+.globl sym_2_4193
+sym_2_4193: la $2, sym_2_4193
+.globl sym_2_4194
+sym_2_4194: la $2, sym_2_4194
+.globl sym_2_4195
+sym_2_4195: la $2, sym_2_4195
+.globl sym_2_4196
+sym_2_4196: la $2, sym_2_4196
+.globl sym_2_4197
+sym_2_4197: la $2, sym_2_4197
+.globl sym_2_4198
+sym_2_4198: la $2, sym_2_4198
+.globl sym_2_4199
+sym_2_4199: la $2, sym_2_4199
+.globl sym_2_4200
+sym_2_4200: la $2, sym_2_4200
+.globl sym_2_4201
+sym_2_4201: la $2, sym_2_4201
+.globl sym_2_4202
+sym_2_4202: la $2, sym_2_4202
+.globl sym_2_4203
+sym_2_4203: la $2, sym_2_4203
+.globl sym_2_4204
+sym_2_4204: la $2, sym_2_4204
+.globl sym_2_4205
+sym_2_4205: la $2, sym_2_4205
+.globl sym_2_4206
+sym_2_4206: la $2, sym_2_4206
+.globl sym_2_4207
+sym_2_4207: la $2, sym_2_4207
+.globl sym_2_4208
+sym_2_4208: la $2, sym_2_4208
+.globl sym_2_4209
+sym_2_4209: la $2, sym_2_4209
+.globl sym_2_4210
+sym_2_4210: la $2, sym_2_4210
+.globl sym_2_4211
+sym_2_4211: la $2, sym_2_4211
+.globl sym_2_4212
+sym_2_4212: la $2, sym_2_4212
+.globl sym_2_4213
+sym_2_4213: la $2, sym_2_4213
+.globl sym_2_4214
+sym_2_4214: la $2, sym_2_4214
+.globl sym_2_4215
+sym_2_4215: la $2, sym_2_4215
+.globl sym_2_4216
+sym_2_4216: la $2, sym_2_4216
+.globl sym_2_4217
+sym_2_4217: la $2, sym_2_4217
+.globl sym_2_4218
+sym_2_4218: la $2, sym_2_4218
+.globl sym_2_4219
+sym_2_4219: la $2, sym_2_4219
+.globl sym_2_4220
+sym_2_4220: la $2, sym_2_4220
+.globl sym_2_4221
+sym_2_4221: la $2, sym_2_4221
+.globl sym_2_4222
+sym_2_4222: la $2, sym_2_4222
+.globl sym_2_4223
+sym_2_4223: la $2, sym_2_4223
+.globl sym_2_4224
+sym_2_4224: la $2, sym_2_4224
+.globl sym_2_4225
+sym_2_4225: la $2, sym_2_4225
+.globl sym_2_4226
+sym_2_4226: la $2, sym_2_4226
+.globl sym_2_4227
+sym_2_4227: la $2, sym_2_4227
+.globl sym_2_4228
+sym_2_4228: la $2, sym_2_4228
+.globl sym_2_4229
+sym_2_4229: la $2, sym_2_4229
+.globl sym_2_4230
+sym_2_4230: la $2, sym_2_4230
+.globl sym_2_4231
+sym_2_4231: la $2, sym_2_4231
+.globl sym_2_4232
+sym_2_4232: la $2, sym_2_4232
+.globl sym_2_4233
+sym_2_4233: la $2, sym_2_4233
+.globl sym_2_4234
+sym_2_4234: la $2, sym_2_4234
+.globl sym_2_4235
+sym_2_4235: la $2, sym_2_4235
+.globl sym_2_4236
+sym_2_4236: la $2, sym_2_4236
+.globl sym_2_4237
+sym_2_4237: la $2, sym_2_4237
+.globl sym_2_4238
+sym_2_4238: la $2, sym_2_4238
+.globl sym_2_4239
+sym_2_4239: la $2, sym_2_4239
+.globl sym_2_4240
+sym_2_4240: la $2, sym_2_4240
+.globl sym_2_4241
+sym_2_4241: la $2, sym_2_4241
+.globl sym_2_4242
+sym_2_4242: la $2, sym_2_4242
+.globl sym_2_4243
+sym_2_4243: la $2, sym_2_4243
+.globl sym_2_4244
+sym_2_4244: la $2, sym_2_4244
+.globl sym_2_4245
+sym_2_4245: la $2, sym_2_4245
+.globl sym_2_4246
+sym_2_4246: la $2, sym_2_4246
+.globl sym_2_4247
+sym_2_4247: la $2, sym_2_4247
+.globl sym_2_4248
+sym_2_4248: la $2, sym_2_4248
+.globl sym_2_4249
+sym_2_4249: la $2, sym_2_4249
+.globl sym_2_4250
+sym_2_4250: la $2, sym_2_4250
+.globl sym_2_4251
+sym_2_4251: la $2, sym_2_4251
+.globl sym_2_4252
+sym_2_4252: la $2, sym_2_4252
+.globl sym_2_4253
+sym_2_4253: la $2, sym_2_4253
+.globl sym_2_4254
+sym_2_4254: la $2, sym_2_4254
+.globl sym_2_4255
+sym_2_4255: la $2, sym_2_4255
+.globl sym_2_4256
+sym_2_4256: la $2, sym_2_4256
+.globl sym_2_4257
+sym_2_4257: la $2, sym_2_4257
+.globl sym_2_4258
+sym_2_4258: la $2, sym_2_4258
+.globl sym_2_4259
+sym_2_4259: la $2, sym_2_4259
+.globl sym_2_4260
+sym_2_4260: la $2, sym_2_4260
+.globl sym_2_4261
+sym_2_4261: la $2, sym_2_4261
+.globl sym_2_4262
+sym_2_4262: la $2, sym_2_4262
+.globl sym_2_4263
+sym_2_4263: la $2, sym_2_4263
+.globl sym_2_4264
+sym_2_4264: la $2, sym_2_4264
+.globl sym_2_4265
+sym_2_4265: la $2, sym_2_4265
+.globl sym_2_4266
+sym_2_4266: la $2, sym_2_4266
+.globl sym_2_4267
+sym_2_4267: la $2, sym_2_4267
+.globl sym_2_4268
+sym_2_4268: la $2, sym_2_4268
+.globl sym_2_4269
+sym_2_4269: la $2, sym_2_4269
+.globl sym_2_4270
+sym_2_4270: la $2, sym_2_4270
+.globl sym_2_4271
+sym_2_4271: la $2, sym_2_4271
+.globl sym_2_4272
+sym_2_4272: la $2, sym_2_4272
+.globl sym_2_4273
+sym_2_4273: la $2, sym_2_4273
+.globl sym_2_4274
+sym_2_4274: la $2, sym_2_4274
+.globl sym_2_4275
+sym_2_4275: la $2, sym_2_4275
+.globl sym_2_4276
+sym_2_4276: la $2, sym_2_4276
+.globl sym_2_4277
+sym_2_4277: la $2, sym_2_4277
+.globl sym_2_4278
+sym_2_4278: la $2, sym_2_4278
+.globl sym_2_4279
+sym_2_4279: la $2, sym_2_4279
+.globl sym_2_4280
+sym_2_4280: la $2, sym_2_4280
+.globl sym_2_4281
+sym_2_4281: la $2, sym_2_4281
+.globl sym_2_4282
+sym_2_4282: la $2, sym_2_4282
+.globl sym_2_4283
+sym_2_4283: la $2, sym_2_4283
+.globl sym_2_4284
+sym_2_4284: la $2, sym_2_4284
+.globl sym_2_4285
+sym_2_4285: la $2, sym_2_4285
+.globl sym_2_4286
+sym_2_4286: la $2, sym_2_4286
+.globl sym_2_4287
+sym_2_4287: la $2, sym_2_4287
+.globl sym_2_4288
+sym_2_4288: la $2, sym_2_4288
+.globl sym_2_4289
+sym_2_4289: la $2, sym_2_4289
+.globl sym_2_4290
+sym_2_4290: la $2, sym_2_4290
+.globl sym_2_4291
+sym_2_4291: la $2, sym_2_4291
+.globl sym_2_4292
+sym_2_4292: la $2, sym_2_4292
+.globl sym_2_4293
+sym_2_4293: la $2, sym_2_4293
+.globl sym_2_4294
+sym_2_4294: la $2, sym_2_4294
+.globl sym_2_4295
+sym_2_4295: la $2, sym_2_4295
+.globl sym_2_4296
+sym_2_4296: la $2, sym_2_4296
+.globl sym_2_4297
+sym_2_4297: la $2, sym_2_4297
+.globl sym_2_4298
+sym_2_4298: la $2, sym_2_4298
+.globl sym_2_4299
+sym_2_4299: la $2, sym_2_4299
+.globl sym_2_4300
+sym_2_4300: la $2, sym_2_4300
+.globl sym_2_4301
+sym_2_4301: la $2, sym_2_4301
+.globl sym_2_4302
+sym_2_4302: la $2, sym_2_4302
+.globl sym_2_4303
+sym_2_4303: la $2, sym_2_4303
+.globl sym_2_4304
+sym_2_4304: la $2, sym_2_4304
+.globl sym_2_4305
+sym_2_4305: la $2, sym_2_4305
+.globl sym_2_4306
+sym_2_4306: la $2, sym_2_4306
+.globl sym_2_4307
+sym_2_4307: la $2, sym_2_4307
+.globl sym_2_4308
+sym_2_4308: la $2, sym_2_4308
+.globl sym_2_4309
+sym_2_4309: la $2, sym_2_4309
+.globl sym_2_4310
+sym_2_4310: la $2, sym_2_4310
+.globl sym_2_4311
+sym_2_4311: la $2, sym_2_4311
+.globl sym_2_4312
+sym_2_4312: la $2, sym_2_4312
+.globl sym_2_4313
+sym_2_4313: la $2, sym_2_4313
+.globl sym_2_4314
+sym_2_4314: la $2, sym_2_4314
+.globl sym_2_4315
+sym_2_4315: la $2, sym_2_4315
+.globl sym_2_4316
+sym_2_4316: la $2, sym_2_4316
+.globl sym_2_4317
+sym_2_4317: la $2, sym_2_4317
+.globl sym_2_4318
+sym_2_4318: la $2, sym_2_4318
+.globl sym_2_4319
+sym_2_4319: la $2, sym_2_4319
+.globl sym_2_4320
+sym_2_4320: la $2, sym_2_4320
+.globl sym_2_4321
+sym_2_4321: la $2, sym_2_4321
+.globl sym_2_4322
+sym_2_4322: la $2, sym_2_4322
+.globl sym_2_4323
+sym_2_4323: la $2, sym_2_4323
+.globl sym_2_4324
+sym_2_4324: la $2, sym_2_4324
+.globl sym_2_4325
+sym_2_4325: la $2, sym_2_4325
+.globl sym_2_4326
+sym_2_4326: la $2, sym_2_4326
+.globl sym_2_4327
+sym_2_4327: la $2, sym_2_4327
+.globl sym_2_4328
+sym_2_4328: la $2, sym_2_4328
+.globl sym_2_4329
+sym_2_4329: la $2, sym_2_4329
+.globl sym_2_4330
+sym_2_4330: la $2, sym_2_4330
+.globl sym_2_4331
+sym_2_4331: la $2, sym_2_4331
+.globl sym_2_4332
+sym_2_4332: la $2, sym_2_4332
+.globl sym_2_4333
+sym_2_4333: la $2, sym_2_4333
+.globl sym_2_4334
+sym_2_4334: la $2, sym_2_4334
+.globl sym_2_4335
+sym_2_4335: la $2, sym_2_4335
+.globl sym_2_4336
+sym_2_4336: la $2, sym_2_4336
+.globl sym_2_4337
+sym_2_4337: la $2, sym_2_4337
+.globl sym_2_4338
+sym_2_4338: la $2, sym_2_4338
+.globl sym_2_4339
+sym_2_4339: la $2, sym_2_4339
+.globl sym_2_4340
+sym_2_4340: la $2, sym_2_4340
+.globl sym_2_4341
+sym_2_4341: la $2, sym_2_4341
+.globl sym_2_4342
+sym_2_4342: la $2, sym_2_4342
+.globl sym_2_4343
+sym_2_4343: la $2, sym_2_4343
+.globl sym_2_4344
+sym_2_4344: la $2, sym_2_4344
+.globl sym_2_4345
+sym_2_4345: la $2, sym_2_4345
+.globl sym_2_4346
+sym_2_4346: la $2, sym_2_4346
+.globl sym_2_4347
+sym_2_4347: la $2, sym_2_4347
+.globl sym_2_4348
+sym_2_4348: la $2, sym_2_4348
+.globl sym_2_4349
+sym_2_4349: la $2, sym_2_4349
+.globl sym_2_4350
+sym_2_4350: la $2, sym_2_4350
+.globl sym_2_4351
+sym_2_4351: la $2, sym_2_4351
+.globl sym_2_4352
+sym_2_4352: la $2, sym_2_4352
+.globl sym_2_4353
+sym_2_4353: la $2, sym_2_4353
+.globl sym_2_4354
+sym_2_4354: la $2, sym_2_4354
+.globl sym_2_4355
+sym_2_4355: la $2, sym_2_4355
+.globl sym_2_4356
+sym_2_4356: la $2, sym_2_4356
+.globl sym_2_4357
+sym_2_4357: la $2, sym_2_4357
+.globl sym_2_4358
+sym_2_4358: la $2, sym_2_4358
+.globl sym_2_4359
+sym_2_4359: la $2, sym_2_4359
+.globl sym_2_4360
+sym_2_4360: la $2, sym_2_4360
+.globl sym_2_4361
+sym_2_4361: la $2, sym_2_4361
+.globl sym_2_4362
+sym_2_4362: la $2, sym_2_4362
+.globl sym_2_4363
+sym_2_4363: la $2, sym_2_4363
+.globl sym_2_4364
+sym_2_4364: la $2, sym_2_4364
+.globl sym_2_4365
+sym_2_4365: la $2, sym_2_4365
+.globl sym_2_4366
+sym_2_4366: la $2, sym_2_4366
+.globl sym_2_4367
+sym_2_4367: la $2, sym_2_4367
+.globl sym_2_4368
+sym_2_4368: la $2, sym_2_4368
+.globl sym_2_4369
+sym_2_4369: la $2, sym_2_4369
+.globl sym_2_4370
+sym_2_4370: la $2, sym_2_4370
+.globl sym_2_4371
+sym_2_4371: la $2, sym_2_4371
+.globl sym_2_4372
+sym_2_4372: la $2, sym_2_4372
+.globl sym_2_4373
+sym_2_4373: la $2, sym_2_4373
+.globl sym_2_4374
+sym_2_4374: la $2, sym_2_4374
+.globl sym_2_4375
+sym_2_4375: la $2, sym_2_4375
+.globl sym_2_4376
+sym_2_4376: la $2, sym_2_4376
+.globl sym_2_4377
+sym_2_4377: la $2, sym_2_4377
+.globl sym_2_4378
+sym_2_4378: la $2, sym_2_4378
+.globl sym_2_4379
+sym_2_4379: la $2, sym_2_4379
+.globl sym_2_4380
+sym_2_4380: la $2, sym_2_4380
+.globl sym_2_4381
+sym_2_4381: la $2, sym_2_4381
+.globl sym_2_4382
+sym_2_4382: la $2, sym_2_4382
+.globl sym_2_4383
+sym_2_4383: la $2, sym_2_4383
+.globl sym_2_4384
+sym_2_4384: la $2, sym_2_4384
+.globl sym_2_4385
+sym_2_4385: la $2, sym_2_4385
+.globl sym_2_4386
+sym_2_4386: la $2, sym_2_4386
+.globl sym_2_4387
+sym_2_4387: la $2, sym_2_4387
+.globl sym_2_4388
+sym_2_4388: la $2, sym_2_4388
+.globl sym_2_4389
+sym_2_4389: la $2, sym_2_4389
+.globl sym_2_4390
+sym_2_4390: la $2, sym_2_4390
+.globl sym_2_4391
+sym_2_4391: la $2, sym_2_4391
+.globl sym_2_4392
+sym_2_4392: la $2, sym_2_4392
+.globl sym_2_4393
+sym_2_4393: la $2, sym_2_4393
+.globl sym_2_4394
+sym_2_4394: la $2, sym_2_4394
+.globl sym_2_4395
+sym_2_4395: la $2, sym_2_4395
+.globl sym_2_4396
+sym_2_4396: la $2, sym_2_4396
+.globl sym_2_4397
+sym_2_4397: la $2, sym_2_4397
+.globl sym_2_4398
+sym_2_4398: la $2, sym_2_4398
+.globl sym_2_4399
+sym_2_4399: la $2, sym_2_4399
+.globl sym_2_4400
+sym_2_4400: la $2, sym_2_4400
+.globl sym_2_4401
+sym_2_4401: la $2, sym_2_4401
+.globl sym_2_4402
+sym_2_4402: la $2, sym_2_4402
+.globl sym_2_4403
+sym_2_4403: la $2, sym_2_4403
+.globl sym_2_4404
+sym_2_4404: la $2, sym_2_4404
+.globl sym_2_4405
+sym_2_4405: la $2, sym_2_4405
+.globl sym_2_4406
+sym_2_4406: la $2, sym_2_4406
+.globl sym_2_4407
+sym_2_4407: la $2, sym_2_4407
+.globl sym_2_4408
+sym_2_4408: la $2, sym_2_4408
+.globl sym_2_4409
+sym_2_4409: la $2, sym_2_4409
+.globl sym_2_4410
+sym_2_4410: la $2, sym_2_4410
+.globl sym_2_4411
+sym_2_4411: la $2, sym_2_4411
+.globl sym_2_4412
+sym_2_4412: la $2, sym_2_4412
+.globl sym_2_4413
+sym_2_4413: la $2, sym_2_4413
+.globl sym_2_4414
+sym_2_4414: la $2, sym_2_4414
+.globl sym_2_4415
+sym_2_4415: la $2, sym_2_4415
+.globl sym_2_4416
+sym_2_4416: la $2, sym_2_4416
+.globl sym_2_4417
+sym_2_4417: la $2, sym_2_4417
+.globl sym_2_4418
+sym_2_4418: la $2, sym_2_4418
+.globl sym_2_4419
+sym_2_4419: la $2, sym_2_4419
+.globl sym_2_4420
+sym_2_4420: la $2, sym_2_4420
+.globl sym_2_4421
+sym_2_4421: la $2, sym_2_4421
+.globl sym_2_4422
+sym_2_4422: la $2, sym_2_4422
+.globl sym_2_4423
+sym_2_4423: la $2, sym_2_4423
+.globl sym_2_4424
+sym_2_4424: la $2, sym_2_4424
+.globl sym_2_4425
+sym_2_4425: la $2, sym_2_4425
+.globl sym_2_4426
+sym_2_4426: la $2, sym_2_4426
+.globl sym_2_4427
+sym_2_4427: la $2, sym_2_4427
+.globl sym_2_4428
+sym_2_4428: la $2, sym_2_4428
+.globl sym_2_4429
+sym_2_4429: la $2, sym_2_4429
+.globl sym_2_4430
+sym_2_4430: la $2, sym_2_4430
+.globl sym_2_4431
+sym_2_4431: la $2, sym_2_4431
+.globl sym_2_4432
+sym_2_4432: la $2, sym_2_4432
+.globl sym_2_4433
+sym_2_4433: la $2, sym_2_4433
+.globl sym_2_4434
+sym_2_4434: la $2, sym_2_4434
+.globl sym_2_4435
+sym_2_4435: la $2, sym_2_4435
+.globl sym_2_4436
+sym_2_4436: la $2, sym_2_4436
+.globl sym_2_4437
+sym_2_4437: la $2, sym_2_4437
+.globl sym_2_4438
+sym_2_4438: la $2, sym_2_4438
+.globl sym_2_4439
+sym_2_4439: la $2, sym_2_4439
+.globl sym_2_4440
+sym_2_4440: la $2, sym_2_4440
+.globl sym_2_4441
+sym_2_4441: la $2, sym_2_4441
+.globl sym_2_4442
+sym_2_4442: la $2, sym_2_4442
+.globl sym_2_4443
+sym_2_4443: la $2, sym_2_4443
+.globl sym_2_4444
+sym_2_4444: la $2, sym_2_4444
+.globl sym_2_4445
+sym_2_4445: la $2, sym_2_4445
+.globl sym_2_4446
+sym_2_4446: la $2, sym_2_4446
+.globl sym_2_4447
+sym_2_4447: la $2, sym_2_4447
+.globl sym_2_4448
+sym_2_4448: la $2, sym_2_4448
+.globl sym_2_4449
+sym_2_4449: la $2, sym_2_4449
+.globl sym_2_4450
+sym_2_4450: la $2, sym_2_4450
+.globl sym_2_4451
+sym_2_4451: la $2, sym_2_4451
+.globl sym_2_4452
+sym_2_4452: la $2, sym_2_4452
+.globl sym_2_4453
+sym_2_4453: la $2, sym_2_4453
+.globl sym_2_4454
+sym_2_4454: la $2, sym_2_4454
+.globl sym_2_4455
+sym_2_4455: la $2, sym_2_4455
+.globl sym_2_4456
+sym_2_4456: la $2, sym_2_4456
+.globl sym_2_4457
+sym_2_4457: la $2, sym_2_4457
+.globl sym_2_4458
+sym_2_4458: la $2, sym_2_4458
+.globl sym_2_4459
+sym_2_4459: la $2, sym_2_4459
+.globl sym_2_4460
+sym_2_4460: la $2, sym_2_4460
+.globl sym_2_4461
+sym_2_4461: la $2, sym_2_4461
+.globl sym_2_4462
+sym_2_4462: la $2, sym_2_4462
+.globl sym_2_4463
+sym_2_4463: la $2, sym_2_4463
+.globl sym_2_4464
+sym_2_4464: la $2, sym_2_4464
+.globl sym_2_4465
+sym_2_4465: la $2, sym_2_4465
+.globl sym_2_4466
+sym_2_4466: la $2, sym_2_4466
+.globl sym_2_4467
+sym_2_4467: la $2, sym_2_4467
+.globl sym_2_4468
+sym_2_4468: la $2, sym_2_4468
+.globl sym_2_4469
+sym_2_4469: la $2, sym_2_4469
+.globl sym_2_4470
+sym_2_4470: la $2, sym_2_4470
+.globl sym_2_4471
+sym_2_4471: la $2, sym_2_4471
+.globl sym_2_4472
+sym_2_4472: la $2, sym_2_4472
+.globl sym_2_4473
+sym_2_4473: la $2, sym_2_4473
+.globl sym_2_4474
+sym_2_4474: la $2, sym_2_4474
+.globl sym_2_4475
+sym_2_4475: la $2, sym_2_4475
+.globl sym_2_4476
+sym_2_4476: la $2, sym_2_4476
+.globl sym_2_4477
+sym_2_4477: la $2, sym_2_4477
+.globl sym_2_4478
+sym_2_4478: la $2, sym_2_4478
+.globl sym_2_4479
+sym_2_4479: la $2, sym_2_4479
+.globl sym_2_4480
+sym_2_4480: la $2, sym_2_4480
+.globl sym_2_4481
+sym_2_4481: la $2, sym_2_4481
+.globl sym_2_4482
+sym_2_4482: la $2, sym_2_4482
+.globl sym_2_4483
+sym_2_4483: la $2, sym_2_4483
+.globl sym_2_4484
+sym_2_4484: la $2, sym_2_4484
+.globl sym_2_4485
+sym_2_4485: la $2, sym_2_4485
+.globl sym_2_4486
+sym_2_4486: la $2, sym_2_4486
+.globl sym_2_4487
+sym_2_4487: la $2, sym_2_4487
+.globl sym_2_4488
+sym_2_4488: la $2, sym_2_4488
+.globl sym_2_4489
+sym_2_4489: la $2, sym_2_4489
+.globl sym_2_4490
+sym_2_4490: la $2, sym_2_4490
+.globl sym_2_4491
+sym_2_4491: la $2, sym_2_4491
+.globl sym_2_4492
+sym_2_4492: la $2, sym_2_4492
+.globl sym_2_4493
+sym_2_4493: la $2, sym_2_4493
+.globl sym_2_4494
+sym_2_4494: la $2, sym_2_4494
+.globl sym_2_4495
+sym_2_4495: la $2, sym_2_4495
+.globl sym_2_4496
+sym_2_4496: la $2, sym_2_4496
+.globl sym_2_4497
+sym_2_4497: la $2, sym_2_4497
+.globl sym_2_4498
+sym_2_4498: la $2, sym_2_4498
+.globl sym_2_4499
+sym_2_4499: la $2, sym_2_4499
+.globl sym_2_4500
+sym_2_4500: la $2, sym_2_4500
+.globl sym_2_4501
+sym_2_4501: la $2, sym_2_4501
+.globl sym_2_4502
+sym_2_4502: la $2, sym_2_4502
+.globl sym_2_4503
+sym_2_4503: la $2, sym_2_4503
+.globl sym_2_4504
+sym_2_4504: la $2, sym_2_4504
+.globl sym_2_4505
+sym_2_4505: la $2, sym_2_4505
+.globl sym_2_4506
+sym_2_4506: la $2, sym_2_4506
+.globl sym_2_4507
+sym_2_4507: la $2, sym_2_4507
+.globl sym_2_4508
+sym_2_4508: la $2, sym_2_4508
+.globl sym_2_4509
+sym_2_4509: la $2, sym_2_4509
+.globl sym_2_4510
+sym_2_4510: la $2, sym_2_4510
+.globl sym_2_4511
+sym_2_4511: la $2, sym_2_4511
+.globl sym_2_4512
+sym_2_4512: la $2, sym_2_4512
+.globl sym_2_4513
+sym_2_4513: la $2, sym_2_4513
+.globl sym_2_4514
+sym_2_4514: la $2, sym_2_4514
+.globl sym_2_4515
+sym_2_4515: la $2, sym_2_4515
+.globl sym_2_4516
+sym_2_4516: la $2, sym_2_4516
+.globl sym_2_4517
+sym_2_4517: la $2, sym_2_4517
+.globl sym_2_4518
+sym_2_4518: la $2, sym_2_4518
+.globl sym_2_4519
+sym_2_4519: la $2, sym_2_4519
+.globl sym_2_4520
+sym_2_4520: la $2, sym_2_4520
+.globl sym_2_4521
+sym_2_4521: la $2, sym_2_4521
+.globl sym_2_4522
+sym_2_4522: la $2, sym_2_4522
+.globl sym_2_4523
+sym_2_4523: la $2, sym_2_4523
+.globl sym_2_4524
+sym_2_4524: la $2, sym_2_4524
+.globl sym_2_4525
+sym_2_4525: la $2, sym_2_4525
+.globl sym_2_4526
+sym_2_4526: la $2, sym_2_4526
+.globl sym_2_4527
+sym_2_4527: la $2, sym_2_4527
+.globl sym_2_4528
+sym_2_4528: la $2, sym_2_4528
+.globl sym_2_4529
+sym_2_4529: la $2, sym_2_4529
+.globl sym_2_4530
+sym_2_4530: la $2, sym_2_4530
+.globl sym_2_4531
+sym_2_4531: la $2, sym_2_4531
+.globl sym_2_4532
+sym_2_4532: la $2, sym_2_4532
+.globl sym_2_4533
+sym_2_4533: la $2, sym_2_4533
+.globl sym_2_4534
+sym_2_4534: la $2, sym_2_4534
+.globl sym_2_4535
+sym_2_4535: la $2, sym_2_4535
+.globl sym_2_4536
+sym_2_4536: la $2, sym_2_4536
+.globl sym_2_4537
+sym_2_4537: la $2, sym_2_4537
+.globl sym_2_4538
+sym_2_4538: la $2, sym_2_4538
+.globl sym_2_4539
+sym_2_4539: la $2, sym_2_4539
+.globl sym_2_4540
+sym_2_4540: la $2, sym_2_4540
+.globl sym_2_4541
+sym_2_4541: la $2, sym_2_4541
+.globl sym_2_4542
+sym_2_4542: la $2, sym_2_4542
+.globl sym_2_4543
+sym_2_4543: la $2, sym_2_4543
+.globl sym_2_4544
+sym_2_4544: la $2, sym_2_4544
+.globl sym_2_4545
+sym_2_4545: la $2, sym_2_4545
+.globl sym_2_4546
+sym_2_4546: la $2, sym_2_4546
+.globl sym_2_4547
+sym_2_4547: la $2, sym_2_4547
+.globl sym_2_4548
+sym_2_4548: la $2, sym_2_4548
+.globl sym_2_4549
+sym_2_4549: la $2, sym_2_4549
+.globl sym_2_4550
+sym_2_4550: la $2, sym_2_4550
+.globl sym_2_4551
+sym_2_4551: la $2, sym_2_4551
+.globl sym_2_4552
+sym_2_4552: la $2, sym_2_4552
+.globl sym_2_4553
+sym_2_4553: la $2, sym_2_4553
+.globl sym_2_4554
+sym_2_4554: la $2, sym_2_4554
+.globl sym_2_4555
+sym_2_4555: la $2, sym_2_4555
+.globl sym_2_4556
+sym_2_4556: la $2, sym_2_4556
+.globl sym_2_4557
+sym_2_4557: la $2, sym_2_4557
+.globl sym_2_4558
+sym_2_4558: la $2, sym_2_4558
+.globl sym_2_4559
+sym_2_4559: la $2, sym_2_4559
+.globl sym_2_4560
+sym_2_4560: la $2, sym_2_4560
+.globl sym_2_4561
+sym_2_4561: la $2, sym_2_4561
+.globl sym_2_4562
+sym_2_4562: la $2, sym_2_4562
+.globl sym_2_4563
+sym_2_4563: la $2, sym_2_4563
+.globl sym_2_4564
+sym_2_4564: la $2, sym_2_4564
+.globl sym_2_4565
+sym_2_4565: la $2, sym_2_4565
+.globl sym_2_4566
+sym_2_4566: la $2, sym_2_4566
+.globl sym_2_4567
+sym_2_4567: la $2, sym_2_4567
+.globl sym_2_4568
+sym_2_4568: la $2, sym_2_4568
+.globl sym_2_4569
+sym_2_4569: la $2, sym_2_4569
+.globl sym_2_4570
+sym_2_4570: la $2, sym_2_4570
+.globl sym_2_4571
+sym_2_4571: la $2, sym_2_4571
+.globl sym_2_4572
+sym_2_4572: la $2, sym_2_4572
+.globl sym_2_4573
+sym_2_4573: la $2, sym_2_4573
+.globl sym_2_4574
+sym_2_4574: la $2, sym_2_4574
+.globl sym_2_4575
+sym_2_4575: la $2, sym_2_4575
+.globl sym_2_4576
+sym_2_4576: la $2, sym_2_4576
+.globl sym_2_4577
+sym_2_4577: la $2, sym_2_4577
+.globl sym_2_4578
+sym_2_4578: la $2, sym_2_4578
+.globl sym_2_4579
+sym_2_4579: la $2, sym_2_4579
+.globl sym_2_4580
+sym_2_4580: la $2, sym_2_4580
+.globl sym_2_4581
+sym_2_4581: la $2, sym_2_4581
+.globl sym_2_4582
+sym_2_4582: la $2, sym_2_4582
+.globl sym_2_4583
+sym_2_4583: la $2, sym_2_4583
+.globl sym_2_4584
+sym_2_4584: la $2, sym_2_4584
+.globl sym_2_4585
+sym_2_4585: la $2, sym_2_4585
+.globl sym_2_4586
+sym_2_4586: la $2, sym_2_4586
+.globl sym_2_4587
+sym_2_4587: la $2, sym_2_4587
+.globl sym_2_4588
+sym_2_4588: la $2, sym_2_4588
+.globl sym_2_4589
+sym_2_4589: la $2, sym_2_4589
+.globl sym_2_4590
+sym_2_4590: la $2, sym_2_4590
+.globl sym_2_4591
+sym_2_4591: la $2, sym_2_4591
+.globl sym_2_4592
+sym_2_4592: la $2, sym_2_4592
+.globl sym_2_4593
+sym_2_4593: la $2, sym_2_4593
+.globl sym_2_4594
+sym_2_4594: la $2, sym_2_4594
+.globl sym_2_4595
+sym_2_4595: la $2, sym_2_4595
+.globl sym_2_4596
+sym_2_4596: la $2, sym_2_4596
+.globl sym_2_4597
+sym_2_4597: la $2, sym_2_4597
+.globl sym_2_4598
+sym_2_4598: la $2, sym_2_4598
+.globl sym_2_4599
+sym_2_4599: la $2, sym_2_4599
+.globl sym_2_4600
+sym_2_4600: la $2, sym_2_4600
+.globl sym_2_4601
+sym_2_4601: la $2, sym_2_4601
+.globl sym_2_4602
+sym_2_4602: la $2, sym_2_4602
+.globl sym_2_4603
+sym_2_4603: la $2, sym_2_4603
+.globl sym_2_4604
+sym_2_4604: la $2, sym_2_4604
+.globl sym_2_4605
+sym_2_4605: la $2, sym_2_4605
+.globl sym_2_4606
+sym_2_4606: la $2, sym_2_4606
+.globl sym_2_4607
+sym_2_4607: la $2, sym_2_4607
+.globl sym_2_4608
+sym_2_4608: la $2, sym_2_4608
+.globl sym_2_4609
+sym_2_4609: la $2, sym_2_4609
+.globl sym_2_4610
+sym_2_4610: la $2, sym_2_4610
+.globl sym_2_4611
+sym_2_4611: la $2, sym_2_4611
+.globl sym_2_4612
+sym_2_4612: la $2, sym_2_4612
+.globl sym_2_4613
+sym_2_4613: la $2, sym_2_4613
+.globl sym_2_4614
+sym_2_4614: la $2, sym_2_4614
+.globl sym_2_4615
+sym_2_4615: la $2, sym_2_4615
+.globl sym_2_4616
+sym_2_4616: la $2, sym_2_4616
+.globl sym_2_4617
+sym_2_4617: la $2, sym_2_4617
+.globl sym_2_4618
+sym_2_4618: la $2, sym_2_4618
+.globl sym_2_4619
+sym_2_4619: la $2, sym_2_4619
+.globl sym_2_4620
+sym_2_4620: la $2, sym_2_4620
+.globl sym_2_4621
+sym_2_4621: la $2, sym_2_4621
+.globl sym_2_4622
+sym_2_4622: la $2, sym_2_4622
+.globl sym_2_4623
+sym_2_4623: la $2, sym_2_4623
+.globl sym_2_4624
+sym_2_4624: la $2, sym_2_4624
+.globl sym_2_4625
+sym_2_4625: la $2, sym_2_4625
+.globl sym_2_4626
+sym_2_4626: la $2, sym_2_4626
+.globl sym_2_4627
+sym_2_4627: la $2, sym_2_4627
+.globl sym_2_4628
+sym_2_4628: la $2, sym_2_4628
+.globl sym_2_4629
+sym_2_4629: la $2, sym_2_4629
+.globl sym_2_4630
+sym_2_4630: la $2, sym_2_4630
+.globl sym_2_4631
+sym_2_4631: la $2, sym_2_4631
+.globl sym_2_4632
+sym_2_4632: la $2, sym_2_4632
+.globl sym_2_4633
+sym_2_4633: la $2, sym_2_4633
+.globl sym_2_4634
+sym_2_4634: la $2, sym_2_4634
+.globl sym_2_4635
+sym_2_4635: la $2, sym_2_4635
+.globl sym_2_4636
+sym_2_4636: la $2, sym_2_4636
+.globl sym_2_4637
+sym_2_4637: la $2, sym_2_4637
+.globl sym_2_4638
+sym_2_4638: la $2, sym_2_4638
+.globl sym_2_4639
+sym_2_4639: la $2, sym_2_4639
+.globl sym_2_4640
+sym_2_4640: la $2, sym_2_4640
+.globl sym_2_4641
+sym_2_4641: la $2, sym_2_4641
+.globl sym_2_4642
+sym_2_4642: la $2, sym_2_4642
+.globl sym_2_4643
+sym_2_4643: la $2, sym_2_4643
+.globl sym_2_4644
+sym_2_4644: la $2, sym_2_4644
+.globl sym_2_4645
+sym_2_4645: la $2, sym_2_4645
+.globl sym_2_4646
+sym_2_4646: la $2, sym_2_4646
+.globl sym_2_4647
+sym_2_4647: la $2, sym_2_4647
+.globl sym_2_4648
+sym_2_4648: la $2, sym_2_4648
+.globl sym_2_4649
+sym_2_4649: la $2, sym_2_4649
+.globl sym_2_4650
+sym_2_4650: la $2, sym_2_4650
+.globl sym_2_4651
+sym_2_4651: la $2, sym_2_4651
+.globl sym_2_4652
+sym_2_4652: la $2, sym_2_4652
+.globl sym_2_4653
+sym_2_4653: la $2, sym_2_4653
+.globl sym_2_4654
+sym_2_4654: la $2, sym_2_4654
+.globl sym_2_4655
+sym_2_4655: la $2, sym_2_4655
+.globl sym_2_4656
+sym_2_4656: la $2, sym_2_4656
+.globl sym_2_4657
+sym_2_4657: la $2, sym_2_4657
+.globl sym_2_4658
+sym_2_4658: la $2, sym_2_4658
+.globl sym_2_4659
+sym_2_4659: la $2, sym_2_4659
+.globl sym_2_4660
+sym_2_4660: la $2, sym_2_4660
+.globl sym_2_4661
+sym_2_4661: la $2, sym_2_4661
+.globl sym_2_4662
+sym_2_4662: la $2, sym_2_4662
+.globl sym_2_4663
+sym_2_4663: la $2, sym_2_4663
+.globl sym_2_4664
+sym_2_4664: la $2, sym_2_4664
+.globl sym_2_4665
+sym_2_4665: la $2, sym_2_4665
+.globl sym_2_4666
+sym_2_4666: la $2, sym_2_4666
+.globl sym_2_4667
+sym_2_4667: la $2, sym_2_4667
+.globl sym_2_4668
+sym_2_4668: la $2, sym_2_4668
+.globl sym_2_4669
+sym_2_4669: la $2, sym_2_4669
+.globl sym_2_4670
+sym_2_4670: la $2, sym_2_4670
+.globl sym_2_4671
+sym_2_4671: la $2, sym_2_4671
+.globl sym_2_4672
+sym_2_4672: la $2, sym_2_4672
+.globl sym_2_4673
+sym_2_4673: la $2, sym_2_4673
+.globl sym_2_4674
+sym_2_4674: la $2, sym_2_4674
+.globl sym_2_4675
+sym_2_4675: la $2, sym_2_4675
+.globl sym_2_4676
+sym_2_4676: la $2, sym_2_4676
+.globl sym_2_4677
+sym_2_4677: la $2, sym_2_4677
+.globl sym_2_4678
+sym_2_4678: la $2, sym_2_4678
+.globl sym_2_4679
+sym_2_4679: la $2, sym_2_4679
+.globl sym_2_4680
+sym_2_4680: la $2, sym_2_4680
+.globl sym_2_4681
+sym_2_4681: la $2, sym_2_4681
+.globl sym_2_4682
+sym_2_4682: la $2, sym_2_4682
+.globl sym_2_4683
+sym_2_4683: la $2, sym_2_4683
+.globl sym_2_4684
+sym_2_4684: la $2, sym_2_4684
+.globl sym_2_4685
+sym_2_4685: la $2, sym_2_4685
+.globl sym_2_4686
+sym_2_4686: la $2, sym_2_4686
+.globl sym_2_4687
+sym_2_4687: la $2, sym_2_4687
+.globl sym_2_4688
+sym_2_4688: la $2, sym_2_4688
+.globl sym_2_4689
+sym_2_4689: la $2, sym_2_4689
+.globl sym_2_4690
+sym_2_4690: la $2, sym_2_4690
+.globl sym_2_4691
+sym_2_4691: la $2, sym_2_4691
+.globl sym_2_4692
+sym_2_4692: la $2, sym_2_4692
+.globl sym_2_4693
+sym_2_4693: la $2, sym_2_4693
+.globl sym_2_4694
+sym_2_4694: la $2, sym_2_4694
+.globl sym_2_4695
+sym_2_4695: la $2, sym_2_4695
+.globl sym_2_4696
+sym_2_4696: la $2, sym_2_4696
+.globl sym_2_4697
+sym_2_4697: la $2, sym_2_4697
+.globl sym_2_4698
+sym_2_4698: la $2, sym_2_4698
+.globl sym_2_4699
+sym_2_4699: la $2, sym_2_4699
+.globl sym_2_4700
+sym_2_4700: la $2, sym_2_4700
+.globl sym_2_4701
+sym_2_4701: la $2, sym_2_4701
+.globl sym_2_4702
+sym_2_4702: la $2, sym_2_4702
+.globl sym_2_4703
+sym_2_4703: la $2, sym_2_4703
+.globl sym_2_4704
+sym_2_4704: la $2, sym_2_4704
+.globl sym_2_4705
+sym_2_4705: la $2, sym_2_4705
+.globl sym_2_4706
+sym_2_4706: la $2, sym_2_4706
+.globl sym_2_4707
+sym_2_4707: la $2, sym_2_4707
+.globl sym_2_4708
+sym_2_4708: la $2, sym_2_4708
+.globl sym_2_4709
+sym_2_4709: la $2, sym_2_4709
+.globl sym_2_4710
+sym_2_4710: la $2, sym_2_4710
+.globl sym_2_4711
+sym_2_4711: la $2, sym_2_4711
+.globl sym_2_4712
+sym_2_4712: la $2, sym_2_4712
+.globl sym_2_4713
+sym_2_4713: la $2, sym_2_4713
+.globl sym_2_4714
+sym_2_4714: la $2, sym_2_4714
+.globl sym_2_4715
+sym_2_4715: la $2, sym_2_4715
+.globl sym_2_4716
+sym_2_4716: la $2, sym_2_4716
+.globl sym_2_4717
+sym_2_4717: la $2, sym_2_4717
+.globl sym_2_4718
+sym_2_4718: la $2, sym_2_4718
+.globl sym_2_4719
+sym_2_4719: la $2, sym_2_4719
+.globl sym_2_4720
+sym_2_4720: la $2, sym_2_4720
+.globl sym_2_4721
+sym_2_4721: la $2, sym_2_4721
+.globl sym_2_4722
+sym_2_4722: la $2, sym_2_4722
+.globl sym_2_4723
+sym_2_4723: la $2, sym_2_4723
+.globl sym_2_4724
+sym_2_4724: la $2, sym_2_4724
+.globl sym_2_4725
+sym_2_4725: la $2, sym_2_4725
+.globl sym_2_4726
+sym_2_4726: la $2, sym_2_4726
+.globl sym_2_4727
+sym_2_4727: la $2, sym_2_4727
+.globl sym_2_4728
+sym_2_4728: la $2, sym_2_4728
+.globl sym_2_4729
+sym_2_4729: la $2, sym_2_4729
+.globl sym_2_4730
+sym_2_4730: la $2, sym_2_4730
+.globl sym_2_4731
+sym_2_4731: la $2, sym_2_4731
+.globl sym_2_4732
+sym_2_4732: la $2, sym_2_4732
+.globl sym_2_4733
+sym_2_4733: la $2, sym_2_4733
+.globl sym_2_4734
+sym_2_4734: la $2, sym_2_4734
+.globl sym_2_4735
+sym_2_4735: la $2, sym_2_4735
+.globl sym_2_4736
+sym_2_4736: la $2, sym_2_4736
+.globl sym_2_4737
+sym_2_4737: la $2, sym_2_4737
+.globl sym_2_4738
+sym_2_4738: la $2, sym_2_4738
+.globl sym_2_4739
+sym_2_4739: la $2, sym_2_4739
+.globl sym_2_4740
+sym_2_4740: la $2, sym_2_4740
+.globl sym_2_4741
+sym_2_4741: la $2, sym_2_4741
+.globl sym_2_4742
+sym_2_4742: la $2, sym_2_4742
+.globl sym_2_4743
+sym_2_4743: la $2, sym_2_4743
+.globl sym_2_4744
+sym_2_4744: la $2, sym_2_4744
+.globl sym_2_4745
+sym_2_4745: la $2, sym_2_4745
+.globl sym_2_4746
+sym_2_4746: la $2, sym_2_4746
+.globl sym_2_4747
+sym_2_4747: la $2, sym_2_4747
+.globl sym_2_4748
+sym_2_4748: la $2, sym_2_4748
+.globl sym_2_4749
+sym_2_4749: la $2, sym_2_4749
+.globl sym_2_4750
+sym_2_4750: la $2, sym_2_4750
+.globl sym_2_4751
+sym_2_4751: la $2, sym_2_4751
+.globl sym_2_4752
+sym_2_4752: la $2, sym_2_4752
+.globl sym_2_4753
+sym_2_4753: la $2, sym_2_4753
+.globl sym_2_4754
+sym_2_4754: la $2, sym_2_4754
+.globl sym_2_4755
+sym_2_4755: la $2, sym_2_4755
+.globl sym_2_4756
+sym_2_4756: la $2, sym_2_4756
+.globl sym_2_4757
+sym_2_4757: la $2, sym_2_4757
+.globl sym_2_4758
+sym_2_4758: la $2, sym_2_4758
+.globl sym_2_4759
+sym_2_4759: la $2, sym_2_4759
+.globl sym_2_4760
+sym_2_4760: la $2, sym_2_4760
+.globl sym_2_4761
+sym_2_4761: la $2, sym_2_4761
+.globl sym_2_4762
+sym_2_4762: la $2, sym_2_4762
+.globl sym_2_4763
+sym_2_4763: la $2, sym_2_4763
+.globl sym_2_4764
+sym_2_4764: la $2, sym_2_4764
+.globl sym_2_4765
+sym_2_4765: la $2, sym_2_4765
+.globl sym_2_4766
+sym_2_4766: la $2, sym_2_4766
+.globl sym_2_4767
+sym_2_4767: la $2, sym_2_4767
+.globl sym_2_4768
+sym_2_4768: la $2, sym_2_4768
+.globl sym_2_4769
+sym_2_4769: la $2, sym_2_4769
+.globl sym_2_4770
+sym_2_4770: la $2, sym_2_4770
+.globl sym_2_4771
+sym_2_4771: la $2, sym_2_4771
+.globl sym_2_4772
+sym_2_4772: la $2, sym_2_4772
+.globl sym_2_4773
+sym_2_4773: la $2, sym_2_4773
+.globl sym_2_4774
+sym_2_4774: la $2, sym_2_4774
+.globl sym_2_4775
+sym_2_4775: la $2, sym_2_4775
+.globl sym_2_4776
+sym_2_4776: la $2, sym_2_4776
+.globl sym_2_4777
+sym_2_4777: la $2, sym_2_4777
+.globl sym_2_4778
+sym_2_4778: la $2, sym_2_4778
+.globl sym_2_4779
+sym_2_4779: la $2, sym_2_4779
+.globl sym_2_4780
+sym_2_4780: la $2, sym_2_4780
+.globl sym_2_4781
+sym_2_4781: la $2, sym_2_4781
+.globl sym_2_4782
+sym_2_4782: la $2, sym_2_4782
+.globl sym_2_4783
+sym_2_4783: la $2, sym_2_4783
+.globl sym_2_4784
+sym_2_4784: la $2, sym_2_4784
+.globl sym_2_4785
+sym_2_4785: la $2, sym_2_4785
+.globl sym_2_4786
+sym_2_4786: la $2, sym_2_4786
+.globl sym_2_4787
+sym_2_4787: la $2, sym_2_4787
+.globl sym_2_4788
+sym_2_4788: la $2, sym_2_4788
+.globl sym_2_4789
+sym_2_4789: la $2, sym_2_4789
+.globl sym_2_4790
+sym_2_4790: la $2, sym_2_4790
+.globl sym_2_4791
+sym_2_4791: la $2, sym_2_4791
+.globl sym_2_4792
+sym_2_4792: la $2, sym_2_4792
+.globl sym_2_4793
+sym_2_4793: la $2, sym_2_4793
+.globl sym_2_4794
+sym_2_4794: la $2, sym_2_4794
+.globl sym_2_4795
+sym_2_4795: la $2, sym_2_4795
+.globl sym_2_4796
+sym_2_4796: la $2, sym_2_4796
+.globl sym_2_4797
+sym_2_4797: la $2, sym_2_4797
+.globl sym_2_4798
+sym_2_4798: la $2, sym_2_4798
+.globl sym_2_4799
+sym_2_4799: la $2, sym_2_4799
+.globl sym_2_4800
+sym_2_4800: la $2, sym_2_4800
+.globl sym_2_4801
+sym_2_4801: la $2, sym_2_4801
+.globl sym_2_4802
+sym_2_4802: la $2, sym_2_4802
+.globl sym_2_4803
+sym_2_4803: la $2, sym_2_4803
+.globl sym_2_4804
+sym_2_4804: la $2, sym_2_4804
+.globl sym_2_4805
+sym_2_4805: la $2, sym_2_4805
+.globl sym_2_4806
+sym_2_4806: la $2, sym_2_4806
+.globl sym_2_4807
+sym_2_4807: la $2, sym_2_4807
+.globl sym_2_4808
+sym_2_4808: la $2, sym_2_4808
+.globl sym_2_4809
+sym_2_4809: la $2, sym_2_4809
+.globl sym_2_4810
+sym_2_4810: la $2, sym_2_4810
+.globl sym_2_4811
+sym_2_4811: la $2, sym_2_4811
+.globl sym_2_4812
+sym_2_4812: la $2, sym_2_4812
+.globl sym_2_4813
+sym_2_4813: la $2, sym_2_4813
+.globl sym_2_4814
+sym_2_4814: la $2, sym_2_4814
+.globl sym_2_4815
+sym_2_4815: la $2, sym_2_4815
+.globl sym_2_4816
+sym_2_4816: la $2, sym_2_4816
+.globl sym_2_4817
+sym_2_4817: la $2, sym_2_4817
+.globl sym_2_4818
+sym_2_4818: la $2, sym_2_4818
+.globl sym_2_4819
+sym_2_4819: la $2, sym_2_4819
+.globl sym_2_4820
+sym_2_4820: la $2, sym_2_4820
+.globl sym_2_4821
+sym_2_4821: la $2, sym_2_4821
+.globl sym_2_4822
+sym_2_4822: la $2, sym_2_4822
+.globl sym_2_4823
+sym_2_4823: la $2, sym_2_4823
+.globl sym_2_4824
+sym_2_4824: la $2, sym_2_4824
+.globl sym_2_4825
+sym_2_4825: la $2, sym_2_4825
+.globl sym_2_4826
+sym_2_4826: la $2, sym_2_4826
+.globl sym_2_4827
+sym_2_4827: la $2, sym_2_4827
+.globl sym_2_4828
+sym_2_4828: la $2, sym_2_4828
+.globl sym_2_4829
+sym_2_4829: la $2, sym_2_4829
+.globl sym_2_4830
+sym_2_4830: la $2, sym_2_4830
+.globl sym_2_4831
+sym_2_4831: la $2, sym_2_4831
+.globl sym_2_4832
+sym_2_4832: la $2, sym_2_4832
+.globl sym_2_4833
+sym_2_4833: la $2, sym_2_4833
+.globl sym_2_4834
+sym_2_4834: la $2, sym_2_4834
+.globl sym_2_4835
+sym_2_4835: la $2, sym_2_4835
+.globl sym_2_4836
+sym_2_4836: la $2, sym_2_4836
+.globl sym_2_4837
+sym_2_4837: la $2, sym_2_4837
+.globl sym_2_4838
+sym_2_4838: la $2, sym_2_4838
+.globl sym_2_4839
+sym_2_4839: la $2, sym_2_4839
+.globl sym_2_4840
+sym_2_4840: la $2, sym_2_4840
+.globl sym_2_4841
+sym_2_4841: la $2, sym_2_4841
+.globl sym_2_4842
+sym_2_4842: la $2, sym_2_4842
+.globl sym_2_4843
+sym_2_4843: la $2, sym_2_4843
+.globl sym_2_4844
+sym_2_4844: la $2, sym_2_4844
+.globl sym_2_4845
+sym_2_4845: la $2, sym_2_4845
+.globl sym_2_4846
+sym_2_4846: la $2, sym_2_4846
+.globl sym_2_4847
+sym_2_4847: la $2, sym_2_4847
+.globl sym_2_4848
+sym_2_4848: la $2, sym_2_4848
+.globl sym_2_4849
+sym_2_4849: la $2, sym_2_4849
+.globl sym_2_4850
+sym_2_4850: la $2, sym_2_4850
+.globl sym_2_4851
+sym_2_4851: la $2, sym_2_4851
+.globl sym_2_4852
+sym_2_4852: la $2, sym_2_4852
+.globl sym_2_4853
+sym_2_4853: la $2, sym_2_4853
+.globl sym_2_4854
+sym_2_4854: la $2, sym_2_4854
+.globl sym_2_4855
+sym_2_4855: la $2, sym_2_4855
+.globl sym_2_4856
+sym_2_4856: la $2, sym_2_4856
+.globl sym_2_4857
+sym_2_4857: la $2, sym_2_4857
+.globl sym_2_4858
+sym_2_4858: la $2, sym_2_4858
+.globl sym_2_4859
+sym_2_4859: la $2, sym_2_4859
+.globl sym_2_4860
+sym_2_4860: la $2, sym_2_4860
+.globl sym_2_4861
+sym_2_4861: la $2, sym_2_4861
+.globl sym_2_4862
+sym_2_4862: la $2, sym_2_4862
+.globl sym_2_4863
+sym_2_4863: la $2, sym_2_4863
+.globl sym_2_4864
+sym_2_4864: la $2, sym_2_4864
+.globl sym_2_4865
+sym_2_4865: la $2, sym_2_4865
+.globl sym_2_4866
+sym_2_4866: la $2, sym_2_4866
+.globl sym_2_4867
+sym_2_4867: la $2, sym_2_4867
+.globl sym_2_4868
+sym_2_4868: la $2, sym_2_4868
+.globl sym_2_4869
+sym_2_4869: la $2, sym_2_4869
+.globl sym_2_4870
+sym_2_4870: la $2, sym_2_4870
+.globl sym_2_4871
+sym_2_4871: la $2, sym_2_4871
+.globl sym_2_4872
+sym_2_4872: la $2, sym_2_4872
+.globl sym_2_4873
+sym_2_4873: la $2, sym_2_4873
+.globl sym_2_4874
+sym_2_4874: la $2, sym_2_4874
+.globl sym_2_4875
+sym_2_4875: la $2, sym_2_4875
+.globl sym_2_4876
+sym_2_4876: la $2, sym_2_4876
+.globl sym_2_4877
+sym_2_4877: la $2, sym_2_4877
+.globl sym_2_4878
+sym_2_4878: la $2, sym_2_4878
+.globl sym_2_4879
+sym_2_4879: la $2, sym_2_4879
+.globl sym_2_4880
+sym_2_4880: la $2, sym_2_4880
+.globl sym_2_4881
+sym_2_4881: la $2, sym_2_4881
+.globl sym_2_4882
+sym_2_4882: la $2, sym_2_4882
+.globl sym_2_4883
+sym_2_4883: la $2, sym_2_4883
+.globl sym_2_4884
+sym_2_4884: la $2, sym_2_4884
+.globl sym_2_4885
+sym_2_4885: la $2, sym_2_4885
+.globl sym_2_4886
+sym_2_4886: la $2, sym_2_4886
+.globl sym_2_4887
+sym_2_4887: la $2, sym_2_4887
+.globl sym_2_4888
+sym_2_4888: la $2, sym_2_4888
+.globl sym_2_4889
+sym_2_4889: la $2, sym_2_4889
+.globl sym_2_4890
+sym_2_4890: la $2, sym_2_4890
+.globl sym_2_4891
+sym_2_4891: la $2, sym_2_4891
+.globl sym_2_4892
+sym_2_4892: la $2, sym_2_4892
+.globl sym_2_4893
+sym_2_4893: la $2, sym_2_4893
+.globl sym_2_4894
+sym_2_4894: la $2, sym_2_4894
+.globl sym_2_4895
+sym_2_4895: la $2, sym_2_4895
+.globl sym_2_4896
+sym_2_4896: la $2, sym_2_4896
+.globl sym_2_4897
+sym_2_4897: la $2, sym_2_4897
+.globl sym_2_4898
+sym_2_4898: la $2, sym_2_4898
+.globl sym_2_4899
+sym_2_4899: la $2, sym_2_4899
+.globl sym_2_4900
+sym_2_4900: la $2, sym_2_4900
+.globl sym_2_4901
+sym_2_4901: la $2, sym_2_4901
+.globl sym_2_4902
+sym_2_4902: la $2, sym_2_4902
+.globl sym_2_4903
+sym_2_4903: la $2, sym_2_4903
+.globl sym_2_4904
+sym_2_4904: la $2, sym_2_4904
+.globl sym_2_4905
+sym_2_4905: la $2, sym_2_4905
+.globl sym_2_4906
+sym_2_4906: la $2, sym_2_4906
+.globl sym_2_4907
+sym_2_4907: la $2, sym_2_4907
+.globl sym_2_4908
+sym_2_4908: la $2, sym_2_4908
+.globl sym_2_4909
+sym_2_4909: la $2, sym_2_4909
+.globl sym_2_4910
+sym_2_4910: la $2, sym_2_4910
+.globl sym_2_4911
+sym_2_4911: la $2, sym_2_4911
+.globl sym_2_4912
+sym_2_4912: la $2, sym_2_4912
+.globl sym_2_4913
+sym_2_4913: la $2, sym_2_4913
+.globl sym_2_4914
+sym_2_4914: la $2, sym_2_4914
+.globl sym_2_4915
+sym_2_4915: la $2, sym_2_4915
+.globl sym_2_4916
+sym_2_4916: la $2, sym_2_4916
+.globl sym_2_4917
+sym_2_4917: la $2, sym_2_4917
+.globl sym_2_4918
+sym_2_4918: la $2, sym_2_4918
+.globl sym_2_4919
+sym_2_4919: la $2, sym_2_4919
+.globl sym_2_4920
+sym_2_4920: la $2, sym_2_4920
+.globl sym_2_4921
+sym_2_4921: la $2, sym_2_4921
+.globl sym_2_4922
+sym_2_4922: la $2, sym_2_4922
+.globl sym_2_4923
+sym_2_4923: la $2, sym_2_4923
+.globl sym_2_4924
+sym_2_4924: la $2, sym_2_4924
+.globl sym_2_4925
+sym_2_4925: la $2, sym_2_4925
+.globl sym_2_4926
+sym_2_4926: la $2, sym_2_4926
+.globl sym_2_4927
+sym_2_4927: la $2, sym_2_4927
+.globl sym_2_4928
+sym_2_4928: la $2, sym_2_4928
+.globl sym_2_4929
+sym_2_4929: la $2, sym_2_4929
+.globl sym_2_4930
+sym_2_4930: la $2, sym_2_4930
+.globl sym_2_4931
+sym_2_4931: la $2, sym_2_4931
+.globl sym_2_4932
+sym_2_4932: la $2, sym_2_4932
+.globl sym_2_4933
+sym_2_4933: la $2, sym_2_4933
+.globl sym_2_4934
+sym_2_4934: la $2, sym_2_4934
+.globl sym_2_4935
+sym_2_4935: la $2, sym_2_4935
+.globl sym_2_4936
+sym_2_4936: la $2, sym_2_4936
+.globl sym_2_4937
+sym_2_4937: la $2, sym_2_4937
+.globl sym_2_4938
+sym_2_4938: la $2, sym_2_4938
+.globl sym_2_4939
+sym_2_4939: la $2, sym_2_4939
+.globl sym_2_4940
+sym_2_4940: la $2, sym_2_4940
+.globl sym_2_4941
+sym_2_4941: la $2, sym_2_4941
+.globl sym_2_4942
+sym_2_4942: la $2, sym_2_4942
+.globl sym_2_4943
+sym_2_4943: la $2, sym_2_4943
+.globl sym_2_4944
+sym_2_4944: la $2, sym_2_4944
+.globl sym_2_4945
+sym_2_4945: la $2, sym_2_4945
+.globl sym_2_4946
+sym_2_4946: la $2, sym_2_4946
+.globl sym_2_4947
+sym_2_4947: la $2, sym_2_4947
+.globl sym_2_4948
+sym_2_4948: la $2, sym_2_4948
+.globl sym_2_4949
+sym_2_4949: la $2, sym_2_4949
+.globl sym_2_4950
+sym_2_4950: la $2, sym_2_4950
+.globl sym_2_4951
+sym_2_4951: la $2, sym_2_4951
+.globl sym_2_4952
+sym_2_4952: la $2, sym_2_4952
+.globl sym_2_4953
+sym_2_4953: la $2, sym_2_4953
+.globl sym_2_4954
+sym_2_4954: la $2, sym_2_4954
+.globl sym_2_4955
+sym_2_4955: la $2, sym_2_4955
+.globl sym_2_4956
+sym_2_4956: la $2, sym_2_4956
+.globl sym_2_4957
+sym_2_4957: la $2, sym_2_4957
+.globl sym_2_4958
+sym_2_4958: la $2, sym_2_4958
+.globl sym_2_4959
+sym_2_4959: la $2, sym_2_4959
+.globl sym_2_4960
+sym_2_4960: la $2, sym_2_4960
+.globl sym_2_4961
+sym_2_4961: la $2, sym_2_4961
+.globl sym_2_4962
+sym_2_4962: la $2, sym_2_4962
+.globl sym_2_4963
+sym_2_4963: la $2, sym_2_4963
+.globl sym_2_4964
+sym_2_4964: la $2, sym_2_4964
+.globl sym_2_4965
+sym_2_4965: la $2, sym_2_4965
+.globl sym_2_4966
+sym_2_4966: la $2, sym_2_4966
+.globl sym_2_4967
+sym_2_4967: la $2, sym_2_4967
+.globl sym_2_4968
+sym_2_4968: la $2, sym_2_4968
+.globl sym_2_4969
+sym_2_4969: la $2, sym_2_4969
+.globl sym_2_4970
+sym_2_4970: la $2, sym_2_4970
+.globl sym_2_4971
+sym_2_4971: la $2, sym_2_4971
+.globl sym_2_4972
+sym_2_4972: la $2, sym_2_4972
+.globl sym_2_4973
+sym_2_4973: la $2, sym_2_4973
+.globl sym_2_4974
+sym_2_4974: la $2, sym_2_4974
+.globl sym_2_4975
+sym_2_4975: la $2, sym_2_4975
+.globl sym_2_4976
+sym_2_4976: la $2, sym_2_4976
+.globl sym_2_4977
+sym_2_4977: la $2, sym_2_4977
+.globl sym_2_4978
+sym_2_4978: la $2, sym_2_4978
+.globl sym_2_4979
+sym_2_4979: la $2, sym_2_4979
+.globl sym_2_4980
+sym_2_4980: la $2, sym_2_4980
+.globl sym_2_4981
+sym_2_4981: la $2, sym_2_4981
+.globl sym_2_4982
+sym_2_4982: la $2, sym_2_4982
+.globl sym_2_4983
+sym_2_4983: la $2, sym_2_4983
+.globl sym_2_4984
+sym_2_4984: la $2, sym_2_4984
+.globl sym_2_4985
+sym_2_4985: la $2, sym_2_4985
+.globl sym_2_4986
+sym_2_4986: la $2, sym_2_4986
+.globl sym_2_4987
+sym_2_4987: la $2, sym_2_4987
+.globl sym_2_4988
+sym_2_4988: la $2, sym_2_4988
+.globl sym_2_4989
+sym_2_4989: la $2, sym_2_4989
+.globl sym_2_4990
+sym_2_4990: la $2, sym_2_4990
+.globl sym_2_4991
+sym_2_4991: la $2, sym_2_4991
+.globl sym_2_4992
+sym_2_4992: la $2, sym_2_4992
+.globl sym_2_4993
+sym_2_4993: la $2, sym_2_4993
+.globl sym_2_4994
+sym_2_4994: la $2, sym_2_4994
+.globl sym_2_4995
+sym_2_4995: la $2, sym_2_4995
+.globl sym_2_4996
+sym_2_4996: la $2, sym_2_4996
+.globl sym_2_4997
+sym_2_4997: la $2, sym_2_4997
+.globl sym_2_4998
+sym_2_4998: la $2, sym_2_4998
+.globl sym_2_4999
+sym_2_4999: la $2, sym_2_4999
+.globl sym_2_5000
+sym_2_5000: la $2, sym_2_5000
+.globl sym_2_5001
+sym_2_5001: la $2, sym_2_5001
+.globl sym_2_5002
+sym_2_5002: la $2, sym_2_5002
+.globl sym_2_5003
+sym_2_5003: la $2, sym_2_5003
+.globl sym_2_5004
+sym_2_5004: la $2, sym_2_5004
+.globl sym_2_5005
+sym_2_5005: la $2, sym_2_5005
+.globl sym_2_5006
+sym_2_5006: la $2, sym_2_5006
+.globl sym_2_5007
+sym_2_5007: la $2, sym_2_5007
+.globl sym_2_5008
+sym_2_5008: la $2, sym_2_5008
+.globl sym_2_5009
+sym_2_5009: la $2, sym_2_5009
+.globl sym_2_5010
+sym_2_5010: la $2, sym_2_5010
+.globl sym_2_5011
+sym_2_5011: la $2, sym_2_5011
+.globl sym_2_5012
+sym_2_5012: la $2, sym_2_5012
+.globl sym_2_5013
+sym_2_5013: la $2, sym_2_5013
+.globl sym_2_5014
+sym_2_5014: la $2, sym_2_5014
+.globl sym_2_5015
+sym_2_5015: la $2, sym_2_5015
+.globl sym_2_5016
+sym_2_5016: la $2, sym_2_5016
+.globl sym_2_5017
+sym_2_5017: la $2, sym_2_5017
+.globl sym_2_5018
+sym_2_5018: la $2, sym_2_5018
+.globl sym_2_5019
+sym_2_5019: la $2, sym_2_5019
+.globl sym_2_5020
+sym_2_5020: la $2, sym_2_5020
+.globl sym_2_5021
+sym_2_5021: la $2, sym_2_5021
+.globl sym_2_5022
+sym_2_5022: la $2, sym_2_5022
+.globl sym_2_5023
+sym_2_5023: la $2, sym_2_5023
+.globl sym_2_5024
+sym_2_5024: la $2, sym_2_5024
+.globl sym_2_5025
+sym_2_5025: la $2, sym_2_5025
+.globl sym_2_5026
+sym_2_5026: la $2, sym_2_5026
+.globl sym_2_5027
+sym_2_5027: la $2, sym_2_5027
+.globl sym_2_5028
+sym_2_5028: la $2, sym_2_5028
+.globl sym_2_5029
+sym_2_5029: la $2, sym_2_5029
+.globl sym_2_5030
+sym_2_5030: la $2, sym_2_5030
+.globl sym_2_5031
+sym_2_5031: la $2, sym_2_5031
+.globl sym_2_5032
+sym_2_5032: la $2, sym_2_5032
+.globl sym_2_5033
+sym_2_5033: la $2, sym_2_5033
+.globl sym_2_5034
+sym_2_5034: la $2, sym_2_5034
+.globl sym_2_5035
+sym_2_5035: la $2, sym_2_5035
+.globl sym_2_5036
+sym_2_5036: la $2, sym_2_5036
+.globl sym_2_5037
+sym_2_5037: la $2, sym_2_5037
+.globl sym_2_5038
+sym_2_5038: la $2, sym_2_5038
+.globl sym_2_5039
+sym_2_5039: la $2, sym_2_5039
+.globl sym_2_5040
+sym_2_5040: la $2, sym_2_5040
+.globl sym_2_5041
+sym_2_5041: la $2, sym_2_5041
+.globl sym_2_5042
+sym_2_5042: la $2, sym_2_5042
+.globl sym_2_5043
+sym_2_5043: la $2, sym_2_5043
+.globl sym_2_5044
+sym_2_5044: la $2, sym_2_5044
+.globl sym_2_5045
+sym_2_5045: la $2, sym_2_5045
+.globl sym_2_5046
+sym_2_5046: la $2, sym_2_5046
+.globl sym_2_5047
+sym_2_5047: la $2, sym_2_5047
+.globl sym_2_5048
+sym_2_5048: la $2, sym_2_5048
+.globl sym_2_5049
+sym_2_5049: la $2, sym_2_5049
+.globl sym_2_5050
+sym_2_5050: la $2, sym_2_5050
+.globl sym_2_5051
+sym_2_5051: la $2, sym_2_5051
+.globl sym_2_5052
+sym_2_5052: la $2, sym_2_5052
+.globl sym_2_5053
+sym_2_5053: la $2, sym_2_5053
+.globl sym_2_5054
+sym_2_5054: la $2, sym_2_5054
+.globl sym_2_5055
+sym_2_5055: la $2, sym_2_5055
+.globl sym_2_5056
+sym_2_5056: la $2, sym_2_5056
+.globl sym_2_5057
+sym_2_5057: la $2, sym_2_5057
+.globl sym_2_5058
+sym_2_5058: la $2, sym_2_5058
+.globl sym_2_5059
+sym_2_5059: la $2, sym_2_5059
+.globl sym_2_5060
+sym_2_5060: la $2, sym_2_5060
+.globl sym_2_5061
+sym_2_5061: la $2, sym_2_5061
+.globl sym_2_5062
+sym_2_5062: la $2, sym_2_5062
+.globl sym_2_5063
+sym_2_5063: la $2, sym_2_5063
+.globl sym_2_5064
+sym_2_5064: la $2, sym_2_5064
+.globl sym_2_5065
+sym_2_5065: la $2, sym_2_5065
+.globl sym_2_5066
+sym_2_5066: la $2, sym_2_5066
+.globl sym_2_5067
+sym_2_5067: la $2, sym_2_5067
+.globl sym_2_5068
+sym_2_5068: la $2, sym_2_5068
+.globl sym_2_5069
+sym_2_5069: la $2, sym_2_5069
+.globl sym_2_5070
+sym_2_5070: la $2, sym_2_5070
+.globl sym_2_5071
+sym_2_5071: la $2, sym_2_5071
+.globl sym_2_5072
+sym_2_5072: la $2, sym_2_5072
+.globl sym_2_5073
+sym_2_5073: la $2, sym_2_5073
+.globl sym_2_5074
+sym_2_5074: la $2, sym_2_5074
+.globl sym_2_5075
+sym_2_5075: la $2, sym_2_5075
+.globl sym_2_5076
+sym_2_5076: la $2, sym_2_5076
+.globl sym_2_5077
+sym_2_5077: la $2, sym_2_5077
+.globl sym_2_5078
+sym_2_5078: la $2, sym_2_5078
+.globl sym_2_5079
+sym_2_5079: la $2, sym_2_5079
+.globl sym_2_5080
+sym_2_5080: la $2, sym_2_5080
+.globl sym_2_5081
+sym_2_5081: la $2, sym_2_5081
+.globl sym_2_5082
+sym_2_5082: la $2, sym_2_5082
+.globl sym_2_5083
+sym_2_5083: la $2, sym_2_5083
+.globl sym_2_5084
+sym_2_5084: la $2, sym_2_5084
+.globl sym_2_5085
+sym_2_5085: la $2, sym_2_5085
+.globl sym_2_5086
+sym_2_5086: la $2, sym_2_5086
+.globl sym_2_5087
+sym_2_5087: la $2, sym_2_5087
+.globl sym_2_5088
+sym_2_5088: la $2, sym_2_5088
+.globl sym_2_5089
+sym_2_5089: la $2, sym_2_5089
+.globl sym_2_5090
+sym_2_5090: la $2, sym_2_5090
+.globl sym_2_5091
+sym_2_5091: la $2, sym_2_5091
+.globl sym_2_5092
+sym_2_5092: la $2, sym_2_5092
+.globl sym_2_5093
+sym_2_5093: la $2, sym_2_5093
+.globl sym_2_5094
+sym_2_5094: la $2, sym_2_5094
+.globl sym_2_5095
+sym_2_5095: la $2, sym_2_5095
+.globl sym_2_5096
+sym_2_5096: la $2, sym_2_5096
+.globl sym_2_5097
+sym_2_5097: la $2, sym_2_5097
+.globl sym_2_5098
+sym_2_5098: la $2, sym_2_5098
+.globl sym_2_5099
+sym_2_5099: la $2, sym_2_5099
+.globl sym_2_5100
+sym_2_5100: la $2, sym_2_5100
+.globl sym_2_5101
+sym_2_5101: la $2, sym_2_5101
+.globl sym_2_5102
+sym_2_5102: la $2, sym_2_5102
+.globl sym_2_5103
+sym_2_5103: la $2, sym_2_5103
+.globl sym_2_5104
+sym_2_5104: la $2, sym_2_5104
+.globl sym_2_5105
+sym_2_5105: la $2, sym_2_5105
+.globl sym_2_5106
+sym_2_5106: la $2, sym_2_5106
+.globl sym_2_5107
+sym_2_5107: la $2, sym_2_5107
+.globl sym_2_5108
+sym_2_5108: la $2, sym_2_5108
+.globl sym_2_5109
+sym_2_5109: la $2, sym_2_5109
+.globl sym_2_5110
+sym_2_5110: la $2, sym_2_5110
+.globl sym_2_5111
+sym_2_5111: la $2, sym_2_5111
+.globl sym_2_5112
+sym_2_5112: la $2, sym_2_5112
+.globl sym_2_5113
+sym_2_5113: la $2, sym_2_5113
+.globl sym_2_5114
+sym_2_5114: la $2, sym_2_5114
+.globl sym_2_5115
+sym_2_5115: la $2, sym_2_5115
+.globl sym_2_5116
+sym_2_5116: la $2, sym_2_5116
+.globl sym_2_5117
+sym_2_5117: la $2, sym_2_5117
+.globl sym_2_5118
+sym_2_5118: la $2, sym_2_5118
+.globl sym_2_5119
+sym_2_5119: la $2, sym_2_5119
+.globl sym_2_5120
+sym_2_5120: la $2, sym_2_5120
+.globl sym_2_5121
+sym_2_5121: la $2, sym_2_5121
+.globl sym_2_5122
+sym_2_5122: la $2, sym_2_5122
+.globl sym_2_5123
+sym_2_5123: la $2, sym_2_5123
+.globl sym_2_5124
+sym_2_5124: la $2, sym_2_5124
+.globl sym_2_5125
+sym_2_5125: la $2, sym_2_5125
+.globl sym_2_5126
+sym_2_5126: la $2, sym_2_5126
+.globl sym_2_5127
+sym_2_5127: la $2, sym_2_5127
+.globl sym_2_5128
+sym_2_5128: la $2, sym_2_5128
+.globl sym_2_5129
+sym_2_5129: la $2, sym_2_5129
+.globl sym_2_5130
+sym_2_5130: la $2, sym_2_5130
+.globl sym_2_5131
+sym_2_5131: la $2, sym_2_5131
+.globl sym_2_5132
+sym_2_5132: la $2, sym_2_5132
+.globl sym_2_5133
+sym_2_5133: la $2, sym_2_5133
+.globl sym_2_5134
+sym_2_5134: la $2, sym_2_5134
+.globl sym_2_5135
+sym_2_5135: la $2, sym_2_5135
+.globl sym_2_5136
+sym_2_5136: la $2, sym_2_5136
+.globl sym_2_5137
+sym_2_5137: la $2, sym_2_5137
+.globl sym_2_5138
+sym_2_5138: la $2, sym_2_5138
+.globl sym_2_5139
+sym_2_5139: la $2, sym_2_5139
+.globl sym_2_5140
+sym_2_5140: la $2, sym_2_5140
+.globl sym_2_5141
+sym_2_5141: la $2, sym_2_5141
+.globl sym_2_5142
+sym_2_5142: la $2, sym_2_5142
+.globl sym_2_5143
+sym_2_5143: la $2, sym_2_5143
+.globl sym_2_5144
+sym_2_5144: la $2, sym_2_5144
+.globl sym_2_5145
+sym_2_5145: la $2, sym_2_5145
+.globl sym_2_5146
+sym_2_5146: la $2, sym_2_5146
+.globl sym_2_5147
+sym_2_5147: la $2, sym_2_5147
+.globl sym_2_5148
+sym_2_5148: la $2, sym_2_5148
+.globl sym_2_5149
+sym_2_5149: la $2, sym_2_5149
+.globl sym_2_5150
+sym_2_5150: la $2, sym_2_5150
+.globl sym_2_5151
+sym_2_5151: la $2, sym_2_5151
+.globl sym_2_5152
+sym_2_5152: la $2, sym_2_5152
+.globl sym_2_5153
+sym_2_5153: la $2, sym_2_5153
+.globl sym_2_5154
+sym_2_5154: la $2, sym_2_5154
+.globl sym_2_5155
+sym_2_5155: la $2, sym_2_5155
+.globl sym_2_5156
+sym_2_5156: la $2, sym_2_5156
+.globl sym_2_5157
+sym_2_5157: la $2, sym_2_5157
+.globl sym_2_5158
+sym_2_5158: la $2, sym_2_5158
+.globl sym_2_5159
+sym_2_5159: la $2, sym_2_5159
+.globl sym_2_5160
+sym_2_5160: la $2, sym_2_5160
+.globl sym_2_5161
+sym_2_5161: la $2, sym_2_5161
+.globl sym_2_5162
+sym_2_5162: la $2, sym_2_5162
+.globl sym_2_5163
+sym_2_5163: la $2, sym_2_5163
+.globl sym_2_5164
+sym_2_5164: la $2, sym_2_5164
+.globl sym_2_5165
+sym_2_5165: la $2, sym_2_5165
+.globl sym_2_5166
+sym_2_5166: la $2, sym_2_5166
+.globl sym_2_5167
+sym_2_5167: la $2, sym_2_5167
+.globl sym_2_5168
+sym_2_5168: la $2, sym_2_5168
+.globl sym_2_5169
+sym_2_5169: la $2, sym_2_5169
+.globl sym_2_5170
+sym_2_5170: la $2, sym_2_5170
+.globl sym_2_5171
+sym_2_5171: la $2, sym_2_5171
+.globl sym_2_5172
+sym_2_5172: la $2, sym_2_5172
+.globl sym_2_5173
+sym_2_5173: la $2, sym_2_5173
+.globl sym_2_5174
+sym_2_5174: la $2, sym_2_5174
+.globl sym_2_5175
+sym_2_5175: la $2, sym_2_5175
+.globl sym_2_5176
+sym_2_5176: la $2, sym_2_5176
+.globl sym_2_5177
+sym_2_5177: la $2, sym_2_5177
+.globl sym_2_5178
+sym_2_5178: la $2, sym_2_5178
+.globl sym_2_5179
+sym_2_5179: la $2, sym_2_5179
+.globl sym_2_5180
+sym_2_5180: la $2, sym_2_5180
+.globl sym_2_5181
+sym_2_5181: la $2, sym_2_5181
+.globl sym_2_5182
+sym_2_5182: la $2, sym_2_5182
+.globl sym_2_5183
+sym_2_5183: la $2, sym_2_5183
+.globl sym_2_5184
+sym_2_5184: la $2, sym_2_5184
+.globl sym_2_5185
+sym_2_5185: la $2, sym_2_5185
+.globl sym_2_5186
+sym_2_5186: la $2, sym_2_5186
+.globl sym_2_5187
+sym_2_5187: la $2, sym_2_5187
+.globl sym_2_5188
+sym_2_5188: la $2, sym_2_5188
+.globl sym_2_5189
+sym_2_5189: la $2, sym_2_5189
+.globl sym_2_5190
+sym_2_5190: la $2, sym_2_5190
+.globl sym_2_5191
+sym_2_5191: la $2, sym_2_5191
+.globl sym_2_5192
+sym_2_5192: la $2, sym_2_5192
+.globl sym_2_5193
+sym_2_5193: la $2, sym_2_5193
+.globl sym_2_5194
+sym_2_5194: la $2, sym_2_5194
+.globl sym_2_5195
+sym_2_5195: la $2, sym_2_5195
+.globl sym_2_5196
+sym_2_5196: la $2, sym_2_5196
+.globl sym_2_5197
+sym_2_5197: la $2, sym_2_5197
+.globl sym_2_5198
+sym_2_5198: la $2, sym_2_5198
+.globl sym_2_5199
+sym_2_5199: la $2, sym_2_5199
+.globl sym_2_5200
+sym_2_5200: la $2, sym_2_5200
+.globl sym_2_5201
+sym_2_5201: la $2, sym_2_5201
+.globl sym_2_5202
+sym_2_5202: la $2, sym_2_5202
+.globl sym_2_5203
+sym_2_5203: la $2, sym_2_5203
+.globl sym_2_5204
+sym_2_5204: la $2, sym_2_5204
+.globl sym_2_5205
+sym_2_5205: la $2, sym_2_5205
+.globl sym_2_5206
+sym_2_5206: la $2, sym_2_5206
+.globl sym_2_5207
+sym_2_5207: la $2, sym_2_5207
+.globl sym_2_5208
+sym_2_5208: la $2, sym_2_5208
+.globl sym_2_5209
+sym_2_5209: la $2, sym_2_5209
+.globl sym_2_5210
+sym_2_5210: la $2, sym_2_5210
+.globl sym_2_5211
+sym_2_5211: la $2, sym_2_5211
+.globl sym_2_5212
+sym_2_5212: la $2, sym_2_5212
+.globl sym_2_5213
+sym_2_5213: la $2, sym_2_5213
+.globl sym_2_5214
+sym_2_5214: la $2, sym_2_5214
+.globl sym_2_5215
+sym_2_5215: la $2, sym_2_5215
+.globl sym_2_5216
+sym_2_5216: la $2, sym_2_5216
+.globl sym_2_5217
+sym_2_5217: la $2, sym_2_5217
+.globl sym_2_5218
+sym_2_5218: la $2, sym_2_5218
+.globl sym_2_5219
+sym_2_5219: la $2, sym_2_5219
+.globl sym_2_5220
+sym_2_5220: la $2, sym_2_5220
+.globl sym_2_5221
+sym_2_5221: la $2, sym_2_5221
+.globl sym_2_5222
+sym_2_5222: la $2, sym_2_5222
+.globl sym_2_5223
+sym_2_5223: la $2, sym_2_5223
+.globl sym_2_5224
+sym_2_5224: la $2, sym_2_5224
+.globl sym_2_5225
+sym_2_5225: la $2, sym_2_5225
+.globl sym_2_5226
+sym_2_5226: la $2, sym_2_5226
+.globl sym_2_5227
+sym_2_5227: la $2, sym_2_5227
+.globl sym_2_5228
+sym_2_5228: la $2, sym_2_5228
+.globl sym_2_5229
+sym_2_5229: la $2, sym_2_5229
+.globl sym_2_5230
+sym_2_5230: la $2, sym_2_5230
+.globl sym_2_5231
+sym_2_5231: la $2, sym_2_5231
+.globl sym_2_5232
+sym_2_5232: la $2, sym_2_5232
+.globl sym_2_5233
+sym_2_5233: la $2, sym_2_5233
+.globl sym_2_5234
+sym_2_5234: la $2, sym_2_5234
+.globl sym_2_5235
+sym_2_5235: la $2, sym_2_5235
+.globl sym_2_5236
+sym_2_5236: la $2, sym_2_5236
+.globl sym_2_5237
+sym_2_5237: la $2, sym_2_5237
+.globl sym_2_5238
+sym_2_5238: la $2, sym_2_5238
+.globl sym_2_5239
+sym_2_5239: la $2, sym_2_5239
+.globl sym_2_5240
+sym_2_5240: la $2, sym_2_5240
+.globl sym_2_5241
+sym_2_5241: la $2, sym_2_5241
+.globl sym_2_5242
+sym_2_5242: la $2, sym_2_5242
+.globl sym_2_5243
+sym_2_5243: la $2, sym_2_5243
+.globl sym_2_5244
+sym_2_5244: la $2, sym_2_5244
+.globl sym_2_5245
+sym_2_5245: la $2, sym_2_5245
+.globl sym_2_5246
+sym_2_5246: la $2, sym_2_5246
+.globl sym_2_5247
+sym_2_5247: la $2, sym_2_5247
+.globl sym_2_5248
+sym_2_5248: la $2, sym_2_5248
+.globl sym_2_5249
+sym_2_5249: la $2, sym_2_5249
+.globl sym_2_5250
+sym_2_5250: la $2, sym_2_5250
+.globl sym_2_5251
+sym_2_5251: la $2, sym_2_5251
+.globl sym_2_5252
+sym_2_5252: la $2, sym_2_5252
+.globl sym_2_5253
+sym_2_5253: la $2, sym_2_5253
+.globl sym_2_5254
+sym_2_5254: la $2, sym_2_5254
+.globl sym_2_5255
+sym_2_5255: la $2, sym_2_5255
+.globl sym_2_5256
+sym_2_5256: la $2, sym_2_5256
+.globl sym_2_5257
+sym_2_5257: la $2, sym_2_5257
+.globl sym_2_5258
+sym_2_5258: la $2, sym_2_5258
+.globl sym_2_5259
+sym_2_5259: la $2, sym_2_5259
+.globl sym_2_5260
+sym_2_5260: la $2, sym_2_5260
+.globl sym_2_5261
+sym_2_5261: la $2, sym_2_5261
+.globl sym_2_5262
+sym_2_5262: la $2, sym_2_5262
+.globl sym_2_5263
+sym_2_5263: la $2, sym_2_5263
+.globl sym_2_5264
+sym_2_5264: la $2, sym_2_5264
+.globl sym_2_5265
+sym_2_5265: la $2, sym_2_5265
+.globl sym_2_5266
+sym_2_5266: la $2, sym_2_5266
+.globl sym_2_5267
+sym_2_5267: la $2, sym_2_5267
+.globl sym_2_5268
+sym_2_5268: la $2, sym_2_5268
+.globl sym_2_5269
+sym_2_5269: la $2, sym_2_5269
+.globl sym_2_5270
+sym_2_5270: la $2, sym_2_5270
+.globl sym_2_5271
+sym_2_5271: la $2, sym_2_5271
+.globl sym_2_5272
+sym_2_5272: la $2, sym_2_5272
+.globl sym_2_5273
+sym_2_5273: la $2, sym_2_5273
+.globl sym_2_5274
+sym_2_5274: la $2, sym_2_5274
+.globl sym_2_5275
+sym_2_5275: la $2, sym_2_5275
+.globl sym_2_5276
+sym_2_5276: la $2, sym_2_5276
+.globl sym_2_5277
+sym_2_5277: la $2, sym_2_5277
+.globl sym_2_5278
+sym_2_5278: la $2, sym_2_5278
+.globl sym_2_5279
+sym_2_5279: la $2, sym_2_5279
+.globl sym_2_5280
+sym_2_5280: la $2, sym_2_5280
+.globl sym_2_5281
+sym_2_5281: la $2, sym_2_5281
+.globl sym_2_5282
+sym_2_5282: la $2, sym_2_5282
+.globl sym_2_5283
+sym_2_5283: la $2, sym_2_5283
+.globl sym_2_5284
+sym_2_5284: la $2, sym_2_5284
+.globl sym_2_5285
+sym_2_5285: la $2, sym_2_5285
+.globl sym_2_5286
+sym_2_5286: la $2, sym_2_5286
+.globl sym_2_5287
+sym_2_5287: la $2, sym_2_5287
+.globl sym_2_5288
+sym_2_5288: la $2, sym_2_5288
+.globl sym_2_5289
+sym_2_5289: la $2, sym_2_5289
+.globl sym_2_5290
+sym_2_5290: la $2, sym_2_5290
+.globl sym_2_5291
+sym_2_5291: la $2, sym_2_5291
+.globl sym_2_5292
+sym_2_5292: la $2, sym_2_5292
+.globl sym_2_5293
+sym_2_5293: la $2, sym_2_5293
+.globl sym_2_5294
+sym_2_5294: la $2, sym_2_5294
+.globl sym_2_5295
+sym_2_5295: la $2, sym_2_5295
+.globl sym_2_5296
+sym_2_5296: la $2, sym_2_5296
+.globl sym_2_5297
+sym_2_5297: la $2, sym_2_5297
+.globl sym_2_5298
+sym_2_5298: la $2, sym_2_5298
+.globl sym_2_5299
+sym_2_5299: la $2, sym_2_5299
+.globl sym_2_5300
+sym_2_5300: la $2, sym_2_5300
+.globl sym_2_5301
+sym_2_5301: la $2, sym_2_5301
+.globl sym_2_5302
+sym_2_5302: la $2, sym_2_5302
+.globl sym_2_5303
+sym_2_5303: la $2, sym_2_5303
+.globl sym_2_5304
+sym_2_5304: la $2, sym_2_5304
+.globl sym_2_5305
+sym_2_5305: la $2, sym_2_5305
+.globl sym_2_5306
+sym_2_5306: la $2, sym_2_5306
+.globl sym_2_5307
+sym_2_5307: la $2, sym_2_5307
+.globl sym_2_5308
+sym_2_5308: la $2, sym_2_5308
+.globl sym_2_5309
+sym_2_5309: la $2, sym_2_5309
+.globl sym_2_5310
+sym_2_5310: la $2, sym_2_5310
+.globl sym_2_5311
+sym_2_5311: la $2, sym_2_5311
+.globl sym_2_5312
+sym_2_5312: la $2, sym_2_5312
+.globl sym_2_5313
+sym_2_5313: la $2, sym_2_5313
+.globl sym_2_5314
+sym_2_5314: la $2, sym_2_5314
+.globl sym_2_5315
+sym_2_5315: la $2, sym_2_5315
+.globl sym_2_5316
+sym_2_5316: la $2, sym_2_5316
+.globl sym_2_5317
+sym_2_5317: la $2, sym_2_5317
+.globl sym_2_5318
+sym_2_5318: la $2, sym_2_5318
+.globl sym_2_5319
+sym_2_5319: la $2, sym_2_5319
+.globl sym_2_5320
+sym_2_5320: la $2, sym_2_5320
+.globl sym_2_5321
+sym_2_5321: la $2, sym_2_5321
+.globl sym_2_5322
+sym_2_5322: la $2, sym_2_5322
+.globl sym_2_5323
+sym_2_5323: la $2, sym_2_5323
+.globl sym_2_5324
+sym_2_5324: la $2, sym_2_5324
+.globl sym_2_5325
+sym_2_5325: la $2, sym_2_5325
+.globl sym_2_5326
+sym_2_5326: la $2, sym_2_5326
+.globl sym_2_5327
+sym_2_5327: la $2, sym_2_5327
+.globl sym_2_5328
+sym_2_5328: la $2, sym_2_5328
+.globl sym_2_5329
+sym_2_5329: la $2, sym_2_5329
+.globl sym_2_5330
+sym_2_5330: la $2, sym_2_5330
+.globl sym_2_5331
+sym_2_5331: la $2, sym_2_5331
+.globl sym_2_5332
+sym_2_5332: la $2, sym_2_5332
+.globl sym_2_5333
+sym_2_5333: la $2, sym_2_5333
+.globl sym_2_5334
+sym_2_5334: la $2, sym_2_5334
+.globl sym_2_5335
+sym_2_5335: la $2, sym_2_5335
+.globl sym_2_5336
+sym_2_5336: la $2, sym_2_5336
+.globl sym_2_5337
+sym_2_5337: la $2, sym_2_5337
+.globl sym_2_5338
+sym_2_5338: la $2, sym_2_5338
+.globl sym_2_5339
+sym_2_5339: la $2, sym_2_5339
+.globl sym_2_5340
+sym_2_5340: la $2, sym_2_5340
+.globl sym_2_5341
+sym_2_5341: la $2, sym_2_5341
+.globl sym_2_5342
+sym_2_5342: la $2, sym_2_5342
+.globl sym_2_5343
+sym_2_5343: la $2, sym_2_5343
+.globl sym_2_5344
+sym_2_5344: la $2, sym_2_5344
+.globl sym_2_5345
+sym_2_5345: la $2, sym_2_5345
+.globl sym_2_5346
+sym_2_5346: la $2, sym_2_5346
+.globl sym_2_5347
+sym_2_5347: la $2, sym_2_5347
+.globl sym_2_5348
+sym_2_5348: la $2, sym_2_5348
+.globl sym_2_5349
+sym_2_5349: la $2, sym_2_5349
+.globl sym_2_5350
+sym_2_5350: la $2, sym_2_5350
+.globl sym_2_5351
+sym_2_5351: la $2, sym_2_5351
+.globl sym_2_5352
+sym_2_5352: la $2, sym_2_5352
+.globl sym_2_5353
+sym_2_5353: la $2, sym_2_5353
+.globl sym_2_5354
+sym_2_5354: la $2, sym_2_5354
+.globl sym_2_5355
+sym_2_5355: la $2, sym_2_5355
+.globl sym_2_5356
+sym_2_5356: la $2, sym_2_5356
+.globl sym_2_5357
+sym_2_5357: la $2, sym_2_5357
+.globl sym_2_5358
+sym_2_5358: la $2, sym_2_5358
+.globl sym_2_5359
+sym_2_5359: la $2, sym_2_5359
+.globl sym_2_5360
+sym_2_5360: la $2, sym_2_5360
+.globl sym_2_5361
+sym_2_5361: la $2, sym_2_5361
+.globl sym_2_5362
+sym_2_5362: la $2, sym_2_5362
+.globl sym_2_5363
+sym_2_5363: la $2, sym_2_5363
+.globl sym_2_5364
+sym_2_5364: la $2, sym_2_5364
+.globl sym_2_5365
+sym_2_5365: la $2, sym_2_5365
+.globl sym_2_5366
+sym_2_5366: la $2, sym_2_5366
+.globl sym_2_5367
+sym_2_5367: la $2, sym_2_5367
+.globl sym_2_5368
+sym_2_5368: la $2, sym_2_5368
+.globl sym_2_5369
+sym_2_5369: la $2, sym_2_5369
+.globl sym_2_5370
+sym_2_5370: la $2, sym_2_5370
+.globl sym_2_5371
+sym_2_5371: la $2, sym_2_5371
+.globl sym_2_5372
+sym_2_5372: la $2, sym_2_5372
+.globl sym_2_5373
+sym_2_5373: la $2, sym_2_5373
+.globl sym_2_5374
+sym_2_5374: la $2, sym_2_5374
+.globl sym_2_5375
+sym_2_5375: la $2, sym_2_5375
+.globl sym_2_5376
+sym_2_5376: la $2, sym_2_5376
+.globl sym_2_5377
+sym_2_5377: la $2, sym_2_5377
+.globl sym_2_5378
+sym_2_5378: la $2, sym_2_5378
+.globl sym_2_5379
+sym_2_5379: la $2, sym_2_5379
+.globl sym_2_5380
+sym_2_5380: la $2, sym_2_5380
+.globl sym_2_5381
+sym_2_5381: la $2, sym_2_5381
+.globl sym_2_5382
+sym_2_5382: la $2, sym_2_5382
+.globl sym_2_5383
+sym_2_5383: la $2, sym_2_5383
+.globl sym_2_5384
+sym_2_5384: la $2, sym_2_5384
+.globl sym_2_5385
+sym_2_5385: la $2, sym_2_5385
+.globl sym_2_5386
+sym_2_5386: la $2, sym_2_5386
+.globl sym_2_5387
+sym_2_5387: la $2, sym_2_5387
+.globl sym_2_5388
+sym_2_5388: la $2, sym_2_5388
+.globl sym_2_5389
+sym_2_5389: la $2, sym_2_5389
+.globl sym_2_5390
+sym_2_5390: la $2, sym_2_5390
+.globl sym_2_5391
+sym_2_5391: la $2, sym_2_5391
+.globl sym_2_5392
+sym_2_5392: la $2, sym_2_5392
+.globl sym_2_5393
+sym_2_5393: la $2, sym_2_5393
+.globl sym_2_5394
+sym_2_5394: la $2, sym_2_5394
+.globl sym_2_5395
+sym_2_5395: la $2, sym_2_5395
+.globl sym_2_5396
+sym_2_5396: la $2, sym_2_5396
+.globl sym_2_5397
+sym_2_5397: la $2, sym_2_5397
+.globl sym_2_5398
+sym_2_5398: la $2, sym_2_5398
+.globl sym_2_5399
+sym_2_5399: la $2, sym_2_5399
+.globl sym_2_5400
+sym_2_5400: la $2, sym_2_5400
+.globl sym_2_5401
+sym_2_5401: la $2, sym_2_5401
+.globl sym_2_5402
+sym_2_5402: la $2, sym_2_5402
+.globl sym_2_5403
+sym_2_5403: la $2, sym_2_5403
+.globl sym_2_5404
+sym_2_5404: la $2, sym_2_5404
+.globl sym_2_5405
+sym_2_5405: la $2, sym_2_5405
+.globl sym_2_5406
+sym_2_5406: la $2, sym_2_5406
+.globl sym_2_5407
+sym_2_5407: la $2, sym_2_5407
+.globl sym_2_5408
+sym_2_5408: la $2, sym_2_5408
+.globl sym_2_5409
+sym_2_5409: la $2, sym_2_5409
+.globl sym_2_5410
+sym_2_5410: la $2, sym_2_5410
+.globl sym_2_5411
+sym_2_5411: la $2, sym_2_5411
+.globl sym_2_5412
+sym_2_5412: la $2, sym_2_5412
+.globl sym_2_5413
+sym_2_5413: la $2, sym_2_5413
+.globl sym_2_5414
+sym_2_5414: la $2, sym_2_5414
+.globl sym_2_5415
+sym_2_5415: la $2, sym_2_5415
+.globl sym_2_5416
+sym_2_5416: la $2, sym_2_5416
+.globl sym_2_5417
+sym_2_5417: la $2, sym_2_5417
+.globl sym_2_5418
+sym_2_5418: la $2, sym_2_5418
+.globl sym_2_5419
+sym_2_5419: la $2, sym_2_5419
+.globl sym_2_5420
+sym_2_5420: la $2, sym_2_5420
+.globl sym_2_5421
+sym_2_5421: la $2, sym_2_5421
+.globl sym_2_5422
+sym_2_5422: la $2, sym_2_5422
+.globl sym_2_5423
+sym_2_5423: la $2, sym_2_5423
+.globl sym_2_5424
+sym_2_5424: la $2, sym_2_5424
+.globl sym_2_5425
+sym_2_5425: la $2, sym_2_5425
+.globl sym_2_5426
+sym_2_5426: la $2, sym_2_5426
+.globl sym_2_5427
+sym_2_5427: la $2, sym_2_5427
+.globl sym_2_5428
+sym_2_5428: la $2, sym_2_5428
+.globl sym_2_5429
+sym_2_5429: la $2, sym_2_5429
+.globl sym_2_5430
+sym_2_5430: la $2, sym_2_5430
+.globl sym_2_5431
+sym_2_5431: la $2, sym_2_5431
+.globl sym_2_5432
+sym_2_5432: la $2, sym_2_5432
+.globl sym_2_5433
+sym_2_5433: la $2, sym_2_5433
+.globl sym_2_5434
+sym_2_5434: la $2, sym_2_5434
+.globl sym_2_5435
+sym_2_5435: la $2, sym_2_5435
+.globl sym_2_5436
+sym_2_5436: la $2, sym_2_5436
+.globl sym_2_5437
+sym_2_5437: la $2, sym_2_5437
+.globl sym_2_5438
+sym_2_5438: la $2, sym_2_5438
+.globl sym_2_5439
+sym_2_5439: la $2, sym_2_5439
+.globl sym_2_5440
+sym_2_5440: la $2, sym_2_5440
+.globl sym_2_5441
+sym_2_5441: la $2, sym_2_5441
+.globl sym_2_5442
+sym_2_5442: la $2, sym_2_5442
+.globl sym_2_5443
+sym_2_5443: la $2, sym_2_5443
+.globl sym_2_5444
+sym_2_5444: la $2, sym_2_5444
+.globl sym_2_5445
+sym_2_5445: la $2, sym_2_5445
+.globl sym_2_5446
+sym_2_5446: la $2, sym_2_5446
+.globl sym_2_5447
+sym_2_5447: la $2, sym_2_5447
+.globl sym_2_5448
+sym_2_5448: la $2, sym_2_5448
+.globl sym_2_5449
+sym_2_5449: la $2, sym_2_5449
+.globl sym_2_5450
+sym_2_5450: la $2, sym_2_5450
+.globl sym_2_5451
+sym_2_5451: la $2, sym_2_5451
+.globl sym_2_5452
+sym_2_5452: la $2, sym_2_5452
+.globl sym_2_5453
+sym_2_5453: la $2, sym_2_5453
+.globl sym_2_5454
+sym_2_5454: la $2, sym_2_5454
+.globl sym_2_5455
+sym_2_5455: la $2, sym_2_5455
+.globl sym_2_5456
+sym_2_5456: la $2, sym_2_5456
+.globl sym_2_5457
+sym_2_5457: la $2, sym_2_5457
+.globl sym_2_5458
+sym_2_5458: la $2, sym_2_5458
+.globl sym_2_5459
+sym_2_5459: la $2, sym_2_5459
+.globl sym_2_5460
+sym_2_5460: la $2, sym_2_5460
+.globl sym_2_5461
+sym_2_5461: la $2, sym_2_5461
+.globl sym_2_5462
+sym_2_5462: la $2, sym_2_5462
+.globl sym_2_5463
+sym_2_5463: la $2, sym_2_5463
+.globl sym_2_5464
+sym_2_5464: la $2, sym_2_5464
+.globl sym_2_5465
+sym_2_5465: la $2, sym_2_5465
+.globl sym_2_5466
+sym_2_5466: la $2, sym_2_5466
+.globl sym_2_5467
+sym_2_5467: la $2, sym_2_5467
+.globl sym_2_5468
+sym_2_5468: la $2, sym_2_5468
+.globl sym_2_5469
+sym_2_5469: la $2, sym_2_5469
+.globl sym_2_5470
+sym_2_5470: la $2, sym_2_5470
+.globl sym_2_5471
+sym_2_5471: la $2, sym_2_5471
+.globl sym_2_5472
+sym_2_5472: la $2, sym_2_5472
+.globl sym_2_5473
+sym_2_5473: la $2, sym_2_5473
+.globl sym_2_5474
+sym_2_5474: la $2, sym_2_5474
+.globl sym_2_5475
+sym_2_5475: la $2, sym_2_5475
+.globl sym_2_5476
+sym_2_5476: la $2, sym_2_5476
+.globl sym_2_5477
+sym_2_5477: la $2, sym_2_5477
+.globl sym_2_5478
+sym_2_5478: la $2, sym_2_5478
+.globl sym_2_5479
+sym_2_5479: la $2, sym_2_5479
+.globl sym_2_5480
+sym_2_5480: la $2, sym_2_5480
+.globl sym_2_5481
+sym_2_5481: la $2, sym_2_5481
+.globl sym_2_5482
+sym_2_5482: la $2, sym_2_5482
+.globl sym_2_5483
+sym_2_5483: la $2, sym_2_5483
+.globl sym_2_5484
+sym_2_5484: la $2, sym_2_5484
+.globl sym_2_5485
+sym_2_5485: la $2, sym_2_5485
+.globl sym_2_5486
+sym_2_5486: la $2, sym_2_5486
+.globl sym_2_5487
+sym_2_5487: la $2, sym_2_5487
+.globl sym_2_5488
+sym_2_5488: la $2, sym_2_5488
+.globl sym_2_5489
+sym_2_5489: la $2, sym_2_5489
+.globl sym_2_5490
+sym_2_5490: la $2, sym_2_5490
+.globl sym_2_5491
+sym_2_5491: la $2, sym_2_5491
+.globl sym_2_5492
+sym_2_5492: la $2, sym_2_5492
+.globl sym_2_5493
+sym_2_5493: la $2, sym_2_5493
+.globl sym_2_5494
+sym_2_5494: la $2, sym_2_5494
+.globl sym_2_5495
+sym_2_5495: la $2, sym_2_5495
+.globl sym_2_5496
+sym_2_5496: la $2, sym_2_5496
+.globl sym_2_5497
+sym_2_5497: la $2, sym_2_5497
+.globl sym_2_5498
+sym_2_5498: la $2, sym_2_5498
+.globl sym_2_5499
+sym_2_5499: la $2, sym_2_5499
+.globl sym_2_5500
+sym_2_5500: la $2, sym_2_5500
+.globl sym_2_5501
+sym_2_5501: la $2, sym_2_5501
+.globl sym_2_5502
+sym_2_5502: la $2, sym_2_5502
+.globl sym_2_5503
+sym_2_5503: la $2, sym_2_5503
+.globl sym_2_5504
+sym_2_5504: la $2, sym_2_5504
+.globl sym_2_5505
+sym_2_5505: la $2, sym_2_5505
+.globl sym_2_5506
+sym_2_5506: la $2, sym_2_5506
+.globl sym_2_5507
+sym_2_5507: la $2, sym_2_5507
+.globl sym_2_5508
+sym_2_5508: la $2, sym_2_5508
+.globl sym_2_5509
+sym_2_5509: la $2, sym_2_5509
+.globl sym_2_5510
+sym_2_5510: la $2, sym_2_5510
+.globl sym_2_5511
+sym_2_5511: la $2, sym_2_5511
+.globl sym_2_5512
+sym_2_5512: la $2, sym_2_5512
+.globl sym_2_5513
+sym_2_5513: la $2, sym_2_5513
+.globl sym_2_5514
+sym_2_5514: la $2, sym_2_5514
+.globl sym_2_5515
+sym_2_5515: la $2, sym_2_5515
+.globl sym_2_5516
+sym_2_5516: la $2, sym_2_5516
+.globl sym_2_5517
+sym_2_5517: la $2, sym_2_5517
+.globl sym_2_5518
+sym_2_5518: la $2, sym_2_5518
+.globl sym_2_5519
+sym_2_5519: la $2, sym_2_5519
+.globl sym_2_5520
+sym_2_5520: la $2, sym_2_5520
+.globl sym_2_5521
+sym_2_5521: la $2, sym_2_5521
+.globl sym_2_5522
+sym_2_5522: la $2, sym_2_5522
+.globl sym_2_5523
+sym_2_5523: la $2, sym_2_5523
+.globl sym_2_5524
+sym_2_5524: la $2, sym_2_5524
+.globl sym_2_5525
+sym_2_5525: la $2, sym_2_5525
+.globl sym_2_5526
+sym_2_5526: la $2, sym_2_5526
+.globl sym_2_5527
+sym_2_5527: la $2, sym_2_5527
+.globl sym_2_5528
+sym_2_5528: la $2, sym_2_5528
+.globl sym_2_5529
+sym_2_5529: la $2, sym_2_5529
+.globl sym_2_5530
+sym_2_5530: la $2, sym_2_5530
+.globl sym_2_5531
+sym_2_5531: la $2, sym_2_5531
+.globl sym_2_5532
+sym_2_5532: la $2, sym_2_5532
+.globl sym_2_5533
+sym_2_5533: la $2, sym_2_5533
+.globl sym_2_5534
+sym_2_5534: la $2, sym_2_5534
+.globl sym_2_5535
+sym_2_5535: la $2, sym_2_5535
+.globl sym_2_5536
+sym_2_5536: la $2, sym_2_5536
+.globl sym_2_5537
+sym_2_5537: la $2, sym_2_5537
+.globl sym_2_5538
+sym_2_5538: la $2, sym_2_5538
+.globl sym_2_5539
+sym_2_5539: la $2, sym_2_5539
+.globl sym_2_5540
+sym_2_5540: la $2, sym_2_5540
+.globl sym_2_5541
+sym_2_5541: la $2, sym_2_5541
+.globl sym_2_5542
+sym_2_5542: la $2, sym_2_5542
+.globl sym_2_5543
+sym_2_5543: la $2, sym_2_5543
+.globl sym_2_5544
+sym_2_5544: la $2, sym_2_5544
+.globl sym_2_5545
+sym_2_5545: la $2, sym_2_5545
+.globl sym_2_5546
+sym_2_5546: la $2, sym_2_5546
+.globl sym_2_5547
+sym_2_5547: la $2, sym_2_5547
+.globl sym_2_5548
+sym_2_5548: la $2, sym_2_5548
+.globl sym_2_5549
+sym_2_5549: la $2, sym_2_5549
+.globl sym_2_5550
+sym_2_5550: la $2, sym_2_5550
+.globl sym_2_5551
+sym_2_5551: la $2, sym_2_5551
+.globl sym_2_5552
+sym_2_5552: la $2, sym_2_5552
+.globl sym_2_5553
+sym_2_5553: la $2, sym_2_5553
+.globl sym_2_5554
+sym_2_5554: la $2, sym_2_5554
+.globl sym_2_5555
+sym_2_5555: la $2, sym_2_5555
+.globl sym_2_5556
+sym_2_5556: la $2, sym_2_5556
+.globl sym_2_5557
+sym_2_5557: la $2, sym_2_5557
+.globl sym_2_5558
+sym_2_5558: la $2, sym_2_5558
+.globl sym_2_5559
+sym_2_5559: la $2, sym_2_5559
+.globl sym_2_5560
+sym_2_5560: la $2, sym_2_5560
+.globl sym_2_5561
+sym_2_5561: la $2, sym_2_5561
+.globl sym_2_5562
+sym_2_5562: la $2, sym_2_5562
+.globl sym_2_5563
+sym_2_5563: la $2, sym_2_5563
+.globl sym_2_5564
+sym_2_5564: la $2, sym_2_5564
+.globl sym_2_5565
+sym_2_5565: la $2, sym_2_5565
+.globl sym_2_5566
+sym_2_5566: la $2, sym_2_5566
+.globl sym_2_5567
+sym_2_5567: la $2, sym_2_5567
+.globl sym_2_5568
+sym_2_5568: la $2, sym_2_5568
+.globl sym_2_5569
+sym_2_5569: la $2, sym_2_5569
+.globl sym_2_5570
+sym_2_5570: la $2, sym_2_5570
+.globl sym_2_5571
+sym_2_5571: la $2, sym_2_5571
+.globl sym_2_5572
+sym_2_5572: la $2, sym_2_5572
+.globl sym_2_5573
+sym_2_5573: la $2, sym_2_5573
+.globl sym_2_5574
+sym_2_5574: la $2, sym_2_5574
+.globl sym_2_5575
+sym_2_5575: la $2, sym_2_5575
+.globl sym_2_5576
+sym_2_5576: la $2, sym_2_5576
+.globl sym_2_5577
+sym_2_5577: la $2, sym_2_5577
+.globl sym_2_5578
+sym_2_5578: la $2, sym_2_5578
+.globl sym_2_5579
+sym_2_5579: la $2, sym_2_5579
+.globl sym_2_5580
+sym_2_5580: la $2, sym_2_5580
+.globl sym_2_5581
+sym_2_5581: la $2, sym_2_5581
+.globl sym_2_5582
+sym_2_5582: la $2, sym_2_5582
+.globl sym_2_5583
+sym_2_5583: la $2, sym_2_5583
+.globl sym_2_5584
+sym_2_5584: la $2, sym_2_5584
+.globl sym_2_5585
+sym_2_5585: la $2, sym_2_5585
+.globl sym_2_5586
+sym_2_5586: la $2, sym_2_5586
+.globl sym_2_5587
+sym_2_5587: la $2, sym_2_5587
+.globl sym_2_5588
+sym_2_5588: la $2, sym_2_5588
+.globl sym_2_5589
+sym_2_5589: la $2, sym_2_5589
+.globl sym_2_5590
+sym_2_5590: la $2, sym_2_5590
+.globl sym_2_5591
+sym_2_5591: la $2, sym_2_5591
+.globl sym_2_5592
+sym_2_5592: la $2, sym_2_5592
+.globl sym_2_5593
+sym_2_5593: la $2, sym_2_5593
+.globl sym_2_5594
+sym_2_5594: la $2, sym_2_5594
+.globl sym_2_5595
+sym_2_5595: la $2, sym_2_5595
+.globl sym_2_5596
+sym_2_5596: la $2, sym_2_5596
+.globl sym_2_5597
+sym_2_5597: la $2, sym_2_5597
+.globl sym_2_5598
+sym_2_5598: la $2, sym_2_5598
+.globl sym_2_5599
+sym_2_5599: la $2, sym_2_5599
+.globl sym_2_5600
+sym_2_5600: la $2, sym_2_5600
+.globl sym_2_5601
+sym_2_5601: la $2, sym_2_5601
+.globl sym_2_5602
+sym_2_5602: la $2, sym_2_5602
+.globl sym_2_5603
+sym_2_5603: la $2, sym_2_5603
+.globl sym_2_5604
+sym_2_5604: la $2, sym_2_5604
+.globl sym_2_5605
+sym_2_5605: la $2, sym_2_5605
+.globl sym_2_5606
+sym_2_5606: la $2, sym_2_5606
+.globl sym_2_5607
+sym_2_5607: la $2, sym_2_5607
+.globl sym_2_5608
+sym_2_5608: la $2, sym_2_5608
+.globl sym_2_5609
+sym_2_5609: la $2, sym_2_5609
+.globl sym_2_5610
+sym_2_5610: la $2, sym_2_5610
+.globl sym_2_5611
+sym_2_5611: la $2, sym_2_5611
+.globl sym_2_5612
+sym_2_5612: la $2, sym_2_5612
+.globl sym_2_5613
+sym_2_5613: la $2, sym_2_5613
+.globl sym_2_5614
+sym_2_5614: la $2, sym_2_5614
+.globl sym_2_5615
+sym_2_5615: la $2, sym_2_5615
+.globl sym_2_5616
+sym_2_5616: la $2, sym_2_5616
+.globl sym_2_5617
+sym_2_5617: la $2, sym_2_5617
+.globl sym_2_5618
+sym_2_5618: la $2, sym_2_5618
+.globl sym_2_5619
+sym_2_5619: la $2, sym_2_5619
+.globl sym_2_5620
+sym_2_5620: la $2, sym_2_5620
+.globl sym_2_5621
+sym_2_5621: la $2, sym_2_5621
+.globl sym_2_5622
+sym_2_5622: la $2, sym_2_5622
+.globl sym_2_5623
+sym_2_5623: la $2, sym_2_5623
+.globl sym_2_5624
+sym_2_5624: la $2, sym_2_5624
+.globl sym_2_5625
+sym_2_5625: la $2, sym_2_5625
+.globl sym_2_5626
+sym_2_5626: la $2, sym_2_5626
+.globl sym_2_5627
+sym_2_5627: la $2, sym_2_5627
+.globl sym_2_5628
+sym_2_5628: la $2, sym_2_5628
+.globl sym_2_5629
+sym_2_5629: la $2, sym_2_5629
+.globl sym_2_5630
+sym_2_5630: la $2, sym_2_5630
+.globl sym_2_5631
+sym_2_5631: la $2, sym_2_5631
+.globl sym_2_5632
+sym_2_5632: la $2, sym_2_5632
+.globl sym_2_5633
+sym_2_5633: la $2, sym_2_5633
+.globl sym_2_5634
+sym_2_5634: la $2, sym_2_5634
+.globl sym_2_5635
+sym_2_5635: la $2, sym_2_5635
+.globl sym_2_5636
+sym_2_5636: la $2, sym_2_5636
+.globl sym_2_5637
+sym_2_5637: la $2, sym_2_5637
+.globl sym_2_5638
+sym_2_5638: la $2, sym_2_5638
+.globl sym_2_5639
+sym_2_5639: la $2, sym_2_5639
+.globl sym_2_5640
+sym_2_5640: la $2, sym_2_5640
+.globl sym_2_5641
+sym_2_5641: la $2, sym_2_5641
+.globl sym_2_5642
+sym_2_5642: la $2, sym_2_5642
+.globl sym_2_5643
+sym_2_5643: la $2, sym_2_5643
+.globl sym_2_5644
+sym_2_5644: la $2, sym_2_5644
+.globl sym_2_5645
+sym_2_5645: la $2, sym_2_5645
+.globl sym_2_5646
+sym_2_5646: la $2, sym_2_5646
+.globl sym_2_5647
+sym_2_5647: la $2, sym_2_5647
+.globl sym_2_5648
+sym_2_5648: la $2, sym_2_5648
+.globl sym_2_5649
+sym_2_5649: la $2, sym_2_5649
+.globl sym_2_5650
+sym_2_5650: la $2, sym_2_5650
+.globl sym_2_5651
+sym_2_5651: la $2, sym_2_5651
+.globl sym_2_5652
+sym_2_5652: la $2, sym_2_5652
+.globl sym_2_5653
+sym_2_5653: la $2, sym_2_5653
+.globl sym_2_5654
+sym_2_5654: la $2, sym_2_5654
+.globl sym_2_5655
+sym_2_5655: la $2, sym_2_5655
+.globl sym_2_5656
+sym_2_5656: la $2, sym_2_5656
+.globl sym_2_5657
+sym_2_5657: la $2, sym_2_5657
+.globl sym_2_5658
+sym_2_5658: la $2, sym_2_5658
+.globl sym_2_5659
+sym_2_5659: la $2, sym_2_5659
+.globl sym_2_5660
+sym_2_5660: la $2, sym_2_5660
+.globl sym_2_5661
+sym_2_5661: la $2, sym_2_5661
+.globl sym_2_5662
+sym_2_5662: la $2, sym_2_5662
+.globl sym_2_5663
+sym_2_5663: la $2, sym_2_5663
+.globl sym_2_5664
+sym_2_5664: la $2, sym_2_5664
+.globl sym_2_5665
+sym_2_5665: la $2, sym_2_5665
+.globl sym_2_5666
+sym_2_5666: la $2, sym_2_5666
+.globl sym_2_5667
+sym_2_5667: la $2, sym_2_5667
+.globl sym_2_5668
+sym_2_5668: la $2, sym_2_5668
+.globl sym_2_5669
+sym_2_5669: la $2, sym_2_5669
+.globl sym_2_5670
+sym_2_5670: la $2, sym_2_5670
+.globl sym_2_5671
+sym_2_5671: la $2, sym_2_5671
+.globl sym_2_5672
+sym_2_5672: la $2, sym_2_5672
+.globl sym_2_5673
+sym_2_5673: la $2, sym_2_5673
+.globl sym_2_5674
+sym_2_5674: la $2, sym_2_5674
+.globl sym_2_5675
+sym_2_5675: la $2, sym_2_5675
+.globl sym_2_5676
+sym_2_5676: la $2, sym_2_5676
+.globl sym_2_5677
+sym_2_5677: la $2, sym_2_5677
+.globl sym_2_5678
+sym_2_5678: la $2, sym_2_5678
+.globl sym_2_5679
+sym_2_5679: la $2, sym_2_5679
+.globl sym_2_5680
+sym_2_5680: la $2, sym_2_5680
+.globl sym_2_5681
+sym_2_5681: la $2, sym_2_5681
+.globl sym_2_5682
+sym_2_5682: la $2, sym_2_5682
+.globl sym_2_5683
+sym_2_5683: la $2, sym_2_5683
+.globl sym_2_5684
+sym_2_5684: la $2, sym_2_5684
+.globl sym_2_5685
+sym_2_5685: la $2, sym_2_5685
+.globl sym_2_5686
+sym_2_5686: la $2, sym_2_5686
+.globl sym_2_5687
+sym_2_5687: la $2, sym_2_5687
+.globl sym_2_5688
+sym_2_5688: la $2, sym_2_5688
+.globl sym_2_5689
+sym_2_5689: la $2, sym_2_5689
+.globl sym_2_5690
+sym_2_5690: la $2, sym_2_5690
+.globl sym_2_5691
+sym_2_5691: la $2, sym_2_5691
+.globl sym_2_5692
+sym_2_5692: la $2, sym_2_5692
+.globl sym_2_5693
+sym_2_5693: la $2, sym_2_5693
+.globl sym_2_5694
+sym_2_5694: la $2, sym_2_5694
+.globl sym_2_5695
+sym_2_5695: la $2, sym_2_5695
+.globl sym_2_5696
+sym_2_5696: la $2, sym_2_5696
+.globl sym_2_5697
+sym_2_5697: la $2, sym_2_5697
+.globl sym_2_5698
+sym_2_5698: la $2, sym_2_5698
+.globl sym_2_5699
+sym_2_5699: la $2, sym_2_5699
+.globl sym_2_5700
+sym_2_5700: la $2, sym_2_5700
+.globl sym_2_5701
+sym_2_5701: la $2, sym_2_5701
+.globl sym_2_5702
+sym_2_5702: la $2, sym_2_5702
+.globl sym_2_5703
+sym_2_5703: la $2, sym_2_5703
+.globl sym_2_5704
+sym_2_5704: la $2, sym_2_5704
+.globl sym_2_5705
+sym_2_5705: la $2, sym_2_5705
+.globl sym_2_5706
+sym_2_5706: la $2, sym_2_5706
+.globl sym_2_5707
+sym_2_5707: la $2, sym_2_5707
+.globl sym_2_5708
+sym_2_5708: la $2, sym_2_5708
+.globl sym_2_5709
+sym_2_5709: la $2, sym_2_5709
+.globl sym_2_5710
+sym_2_5710: la $2, sym_2_5710
+.globl sym_2_5711
+sym_2_5711: la $2, sym_2_5711
+.globl sym_2_5712
+sym_2_5712: la $2, sym_2_5712
+.globl sym_2_5713
+sym_2_5713: la $2, sym_2_5713
+.globl sym_2_5714
+sym_2_5714: la $2, sym_2_5714
+.globl sym_2_5715
+sym_2_5715: la $2, sym_2_5715
+.globl sym_2_5716
+sym_2_5716: la $2, sym_2_5716
+.globl sym_2_5717
+sym_2_5717: la $2, sym_2_5717
+.globl sym_2_5718
+sym_2_5718: la $2, sym_2_5718
+.globl sym_2_5719
+sym_2_5719: la $2, sym_2_5719
+.globl sym_2_5720
+sym_2_5720: la $2, sym_2_5720
+.globl sym_2_5721
+sym_2_5721: la $2, sym_2_5721
+.globl sym_2_5722
+sym_2_5722: la $2, sym_2_5722
+.globl sym_2_5723
+sym_2_5723: la $2, sym_2_5723
+.globl sym_2_5724
+sym_2_5724: la $2, sym_2_5724
+.globl sym_2_5725
+sym_2_5725: la $2, sym_2_5725
+.globl sym_2_5726
+sym_2_5726: la $2, sym_2_5726
+.globl sym_2_5727
+sym_2_5727: la $2, sym_2_5727
+.globl sym_2_5728
+sym_2_5728: la $2, sym_2_5728
+.globl sym_2_5729
+sym_2_5729: la $2, sym_2_5729
+.globl sym_2_5730
+sym_2_5730: la $2, sym_2_5730
+.globl sym_2_5731
+sym_2_5731: la $2, sym_2_5731
+.globl sym_2_5732
+sym_2_5732: la $2, sym_2_5732
+.globl sym_2_5733
+sym_2_5733: la $2, sym_2_5733
+.globl sym_2_5734
+sym_2_5734: la $2, sym_2_5734
+.globl sym_2_5735
+sym_2_5735: la $2, sym_2_5735
+.globl sym_2_5736
+sym_2_5736: la $2, sym_2_5736
+.globl sym_2_5737
+sym_2_5737: la $2, sym_2_5737
+.globl sym_2_5738
+sym_2_5738: la $2, sym_2_5738
+.globl sym_2_5739
+sym_2_5739: la $2, sym_2_5739
+.globl sym_2_5740
+sym_2_5740: la $2, sym_2_5740
+.globl sym_2_5741
+sym_2_5741: la $2, sym_2_5741
+.globl sym_2_5742
+sym_2_5742: la $2, sym_2_5742
+.globl sym_2_5743
+sym_2_5743: la $2, sym_2_5743
+.globl sym_2_5744
+sym_2_5744: la $2, sym_2_5744
+.globl sym_2_5745
+sym_2_5745: la $2, sym_2_5745
+.globl sym_2_5746
+sym_2_5746: la $2, sym_2_5746
+.globl sym_2_5747
+sym_2_5747: la $2, sym_2_5747
+.globl sym_2_5748
+sym_2_5748: la $2, sym_2_5748
+.globl sym_2_5749
+sym_2_5749: la $2, sym_2_5749
+.globl sym_2_5750
+sym_2_5750: la $2, sym_2_5750
+.globl sym_2_5751
+sym_2_5751: la $2, sym_2_5751
+.globl sym_2_5752
+sym_2_5752: la $2, sym_2_5752
+.globl sym_2_5753
+sym_2_5753: la $2, sym_2_5753
+.globl sym_2_5754
+sym_2_5754: la $2, sym_2_5754
+.globl sym_2_5755
+sym_2_5755: la $2, sym_2_5755
+.globl sym_2_5756
+sym_2_5756: la $2, sym_2_5756
+.globl sym_2_5757
+sym_2_5757: la $2, sym_2_5757
+.globl sym_2_5758
+sym_2_5758: la $2, sym_2_5758
+.globl sym_2_5759
+sym_2_5759: la $2, sym_2_5759
+.globl sym_2_5760
+sym_2_5760: la $2, sym_2_5760
+.globl sym_2_5761
+sym_2_5761: la $2, sym_2_5761
+.globl sym_2_5762
+sym_2_5762: la $2, sym_2_5762
+.globl sym_2_5763
+sym_2_5763: la $2, sym_2_5763
+.globl sym_2_5764
+sym_2_5764: la $2, sym_2_5764
+.globl sym_2_5765
+sym_2_5765: la $2, sym_2_5765
+.globl sym_2_5766
+sym_2_5766: la $2, sym_2_5766
+.globl sym_2_5767
+sym_2_5767: la $2, sym_2_5767
+.globl sym_2_5768
+sym_2_5768: la $2, sym_2_5768
+.globl sym_2_5769
+sym_2_5769: la $2, sym_2_5769
+.globl sym_2_5770
+sym_2_5770: la $2, sym_2_5770
+.globl sym_2_5771
+sym_2_5771: la $2, sym_2_5771
+.globl sym_2_5772
+sym_2_5772: la $2, sym_2_5772
+.globl sym_2_5773
+sym_2_5773: la $2, sym_2_5773
+.globl sym_2_5774
+sym_2_5774: la $2, sym_2_5774
+.globl sym_2_5775
+sym_2_5775: la $2, sym_2_5775
+.globl sym_2_5776
+sym_2_5776: la $2, sym_2_5776
+.globl sym_2_5777
+sym_2_5777: la $2, sym_2_5777
+.globl sym_2_5778
+sym_2_5778: la $2, sym_2_5778
+.globl sym_2_5779
+sym_2_5779: la $2, sym_2_5779
+.globl sym_2_5780
+sym_2_5780: la $2, sym_2_5780
+.globl sym_2_5781
+sym_2_5781: la $2, sym_2_5781
+.globl sym_2_5782
+sym_2_5782: la $2, sym_2_5782
+.globl sym_2_5783
+sym_2_5783: la $2, sym_2_5783
+.globl sym_2_5784
+sym_2_5784: la $2, sym_2_5784
+.globl sym_2_5785
+sym_2_5785: la $2, sym_2_5785
+.globl sym_2_5786
+sym_2_5786: la $2, sym_2_5786
+.globl sym_2_5787
+sym_2_5787: la $2, sym_2_5787
+.globl sym_2_5788
+sym_2_5788: la $2, sym_2_5788
+.globl sym_2_5789
+sym_2_5789: la $2, sym_2_5789
+.globl sym_2_5790
+sym_2_5790: la $2, sym_2_5790
+.globl sym_2_5791
+sym_2_5791: la $2, sym_2_5791
+.globl sym_2_5792
+sym_2_5792: la $2, sym_2_5792
+.globl sym_2_5793
+sym_2_5793: la $2, sym_2_5793
+.globl sym_2_5794
+sym_2_5794: la $2, sym_2_5794
+.globl sym_2_5795
+sym_2_5795: la $2, sym_2_5795
+.globl sym_2_5796
+sym_2_5796: la $2, sym_2_5796
+.globl sym_2_5797
+sym_2_5797: la $2, sym_2_5797
+.globl sym_2_5798
+sym_2_5798: la $2, sym_2_5798
+.globl sym_2_5799
+sym_2_5799: la $2, sym_2_5799
+.globl sym_2_5800
+sym_2_5800: la $2, sym_2_5800
+.globl sym_2_5801
+sym_2_5801: la $2, sym_2_5801
+.globl sym_2_5802
+sym_2_5802: la $2, sym_2_5802
+.globl sym_2_5803
+sym_2_5803: la $2, sym_2_5803
+.globl sym_2_5804
+sym_2_5804: la $2, sym_2_5804
+.globl sym_2_5805
+sym_2_5805: la $2, sym_2_5805
+.globl sym_2_5806
+sym_2_5806: la $2, sym_2_5806
+.globl sym_2_5807
+sym_2_5807: la $2, sym_2_5807
+.globl sym_2_5808
+sym_2_5808: la $2, sym_2_5808
+.globl sym_2_5809
+sym_2_5809: la $2, sym_2_5809
+.globl sym_2_5810
+sym_2_5810: la $2, sym_2_5810
+.globl sym_2_5811
+sym_2_5811: la $2, sym_2_5811
+.globl sym_2_5812
+sym_2_5812: la $2, sym_2_5812
+.globl sym_2_5813
+sym_2_5813: la $2, sym_2_5813
+.globl sym_2_5814
+sym_2_5814: la $2, sym_2_5814
+.globl sym_2_5815
+sym_2_5815: la $2, sym_2_5815
+.globl sym_2_5816
+sym_2_5816: la $2, sym_2_5816
+.globl sym_2_5817
+sym_2_5817: la $2, sym_2_5817
+.globl sym_2_5818
+sym_2_5818: la $2, sym_2_5818
+.globl sym_2_5819
+sym_2_5819: la $2, sym_2_5819
+.globl sym_2_5820
+sym_2_5820: la $2, sym_2_5820
+.globl sym_2_5821
+sym_2_5821: la $2, sym_2_5821
+.globl sym_2_5822
+sym_2_5822: la $2, sym_2_5822
+.globl sym_2_5823
+sym_2_5823: la $2, sym_2_5823
+.globl sym_2_5824
+sym_2_5824: la $2, sym_2_5824
+.globl sym_2_5825
+sym_2_5825: la $2, sym_2_5825
+.globl sym_2_5826
+sym_2_5826: la $2, sym_2_5826
+.globl sym_2_5827
+sym_2_5827: la $2, sym_2_5827
+.globl sym_2_5828
+sym_2_5828: la $2, sym_2_5828
+.globl sym_2_5829
+sym_2_5829: la $2, sym_2_5829
+.globl sym_2_5830
+sym_2_5830: la $2, sym_2_5830
+.globl sym_2_5831
+sym_2_5831: la $2, sym_2_5831
+.globl sym_2_5832
+sym_2_5832: la $2, sym_2_5832
+.globl sym_2_5833
+sym_2_5833: la $2, sym_2_5833
+.globl sym_2_5834
+sym_2_5834: la $2, sym_2_5834
+.globl sym_2_5835
+sym_2_5835: la $2, sym_2_5835
+.globl sym_2_5836
+sym_2_5836: la $2, sym_2_5836
+.globl sym_2_5837
+sym_2_5837: la $2, sym_2_5837
+.globl sym_2_5838
+sym_2_5838: la $2, sym_2_5838
+.globl sym_2_5839
+sym_2_5839: la $2, sym_2_5839
+.globl sym_2_5840
+sym_2_5840: la $2, sym_2_5840
+.globl sym_2_5841
+sym_2_5841: la $2, sym_2_5841
+.globl sym_2_5842
+sym_2_5842: la $2, sym_2_5842
+.globl sym_2_5843
+sym_2_5843: la $2, sym_2_5843
+.globl sym_2_5844
+sym_2_5844: la $2, sym_2_5844
+.globl sym_2_5845
+sym_2_5845: la $2, sym_2_5845
+.globl sym_2_5846
+sym_2_5846: la $2, sym_2_5846
+.globl sym_2_5847
+sym_2_5847: la $2, sym_2_5847
+.globl sym_2_5848
+sym_2_5848: la $2, sym_2_5848
+.globl sym_2_5849
+sym_2_5849: la $2, sym_2_5849
+.globl sym_2_5850
+sym_2_5850: la $2, sym_2_5850
+.globl sym_2_5851
+sym_2_5851: la $2, sym_2_5851
+.globl sym_2_5852
+sym_2_5852: la $2, sym_2_5852
+.globl sym_2_5853
+sym_2_5853: la $2, sym_2_5853
+.globl sym_2_5854
+sym_2_5854: la $2, sym_2_5854
+.globl sym_2_5855
+sym_2_5855: la $2, sym_2_5855
+.globl sym_2_5856
+sym_2_5856: la $2, sym_2_5856
+.globl sym_2_5857
+sym_2_5857: la $2, sym_2_5857
+.globl sym_2_5858
+sym_2_5858: la $2, sym_2_5858
+.globl sym_2_5859
+sym_2_5859: la $2, sym_2_5859
+.globl sym_2_5860
+sym_2_5860: la $2, sym_2_5860
+.globl sym_2_5861
+sym_2_5861: la $2, sym_2_5861
+.globl sym_2_5862
+sym_2_5862: la $2, sym_2_5862
+.globl sym_2_5863
+sym_2_5863: la $2, sym_2_5863
+.globl sym_2_5864
+sym_2_5864: la $2, sym_2_5864
+.globl sym_2_5865
+sym_2_5865: la $2, sym_2_5865
+.globl sym_2_5866
+sym_2_5866: la $2, sym_2_5866
+.globl sym_2_5867
+sym_2_5867: la $2, sym_2_5867
+.globl sym_2_5868
+sym_2_5868: la $2, sym_2_5868
+.globl sym_2_5869
+sym_2_5869: la $2, sym_2_5869
+.globl sym_2_5870
+sym_2_5870: la $2, sym_2_5870
+.globl sym_2_5871
+sym_2_5871: la $2, sym_2_5871
+.globl sym_2_5872
+sym_2_5872: la $2, sym_2_5872
+.globl sym_2_5873
+sym_2_5873: la $2, sym_2_5873
+.globl sym_2_5874
+sym_2_5874: la $2, sym_2_5874
+.globl sym_2_5875
+sym_2_5875: la $2, sym_2_5875
+.globl sym_2_5876
+sym_2_5876: la $2, sym_2_5876
+.globl sym_2_5877
+sym_2_5877: la $2, sym_2_5877
+.globl sym_2_5878
+sym_2_5878: la $2, sym_2_5878
+.globl sym_2_5879
+sym_2_5879: la $2, sym_2_5879
+.globl sym_2_5880
+sym_2_5880: la $2, sym_2_5880
+.globl sym_2_5881
+sym_2_5881: la $2, sym_2_5881
+.globl sym_2_5882
+sym_2_5882: la $2, sym_2_5882
+.globl sym_2_5883
+sym_2_5883: la $2, sym_2_5883
+.globl sym_2_5884
+sym_2_5884: la $2, sym_2_5884
+.globl sym_2_5885
+sym_2_5885: la $2, sym_2_5885
+.globl sym_2_5886
+sym_2_5886: la $2, sym_2_5886
+.globl sym_2_5887
+sym_2_5887: la $2, sym_2_5887
+.globl sym_2_5888
+sym_2_5888: la $2, sym_2_5888
+.globl sym_2_5889
+sym_2_5889: la $2, sym_2_5889
+.globl sym_2_5890
+sym_2_5890: la $2, sym_2_5890
+.globl sym_2_5891
+sym_2_5891: la $2, sym_2_5891
+.globl sym_2_5892
+sym_2_5892: la $2, sym_2_5892
+.globl sym_2_5893
+sym_2_5893: la $2, sym_2_5893
+.globl sym_2_5894
+sym_2_5894: la $2, sym_2_5894
+.globl sym_2_5895
+sym_2_5895: la $2, sym_2_5895
+.globl sym_2_5896
+sym_2_5896: la $2, sym_2_5896
+.globl sym_2_5897
+sym_2_5897: la $2, sym_2_5897
+.globl sym_2_5898
+sym_2_5898: la $2, sym_2_5898
+.globl sym_2_5899
+sym_2_5899: la $2, sym_2_5899
+.globl sym_2_5900
+sym_2_5900: la $2, sym_2_5900
+.globl sym_2_5901
+sym_2_5901: la $2, sym_2_5901
+.globl sym_2_5902
+sym_2_5902: la $2, sym_2_5902
+.globl sym_2_5903
+sym_2_5903: la $2, sym_2_5903
+.globl sym_2_5904
+sym_2_5904: la $2, sym_2_5904
+.globl sym_2_5905
+sym_2_5905: la $2, sym_2_5905
+.globl sym_2_5906
+sym_2_5906: la $2, sym_2_5906
+.globl sym_2_5907
+sym_2_5907: la $2, sym_2_5907
+.globl sym_2_5908
+sym_2_5908: la $2, sym_2_5908
+.globl sym_2_5909
+sym_2_5909: la $2, sym_2_5909
+.globl sym_2_5910
+sym_2_5910: la $2, sym_2_5910
+.globl sym_2_5911
+sym_2_5911: la $2, sym_2_5911
+.globl sym_2_5912
+sym_2_5912: la $2, sym_2_5912
+.globl sym_2_5913
+sym_2_5913: la $2, sym_2_5913
+.globl sym_2_5914
+sym_2_5914: la $2, sym_2_5914
+.globl sym_2_5915
+sym_2_5915: la $2, sym_2_5915
+.globl sym_2_5916
+sym_2_5916: la $2, sym_2_5916
+.globl sym_2_5917
+sym_2_5917: la $2, sym_2_5917
+.globl sym_2_5918
+sym_2_5918: la $2, sym_2_5918
+.globl sym_2_5919
+sym_2_5919: la $2, sym_2_5919
+.globl sym_2_5920
+sym_2_5920: la $2, sym_2_5920
+.globl sym_2_5921
+sym_2_5921: la $2, sym_2_5921
+.globl sym_2_5922
+sym_2_5922: la $2, sym_2_5922
+.globl sym_2_5923
+sym_2_5923: la $2, sym_2_5923
+.globl sym_2_5924
+sym_2_5924: la $2, sym_2_5924
+.globl sym_2_5925
+sym_2_5925: la $2, sym_2_5925
+.globl sym_2_5926
+sym_2_5926: la $2, sym_2_5926
+.globl sym_2_5927
+sym_2_5927: la $2, sym_2_5927
+.globl sym_2_5928
+sym_2_5928: la $2, sym_2_5928
+.globl sym_2_5929
+sym_2_5929: la $2, sym_2_5929
+.globl sym_2_5930
+sym_2_5930: la $2, sym_2_5930
+.globl sym_2_5931
+sym_2_5931: la $2, sym_2_5931
+.globl sym_2_5932
+sym_2_5932: la $2, sym_2_5932
+.globl sym_2_5933
+sym_2_5933: la $2, sym_2_5933
+.globl sym_2_5934
+sym_2_5934: la $2, sym_2_5934
+.globl sym_2_5935
+sym_2_5935: la $2, sym_2_5935
+.globl sym_2_5936
+sym_2_5936: la $2, sym_2_5936
+.globl sym_2_5937
+sym_2_5937: la $2, sym_2_5937
+.globl sym_2_5938
+sym_2_5938: la $2, sym_2_5938
+.globl sym_2_5939
+sym_2_5939: la $2, sym_2_5939
+.globl sym_2_5940
+sym_2_5940: la $2, sym_2_5940
+.globl sym_2_5941
+sym_2_5941: la $2, sym_2_5941
+.globl sym_2_5942
+sym_2_5942: la $2, sym_2_5942
+.globl sym_2_5943
+sym_2_5943: la $2, sym_2_5943
+.globl sym_2_5944
+sym_2_5944: la $2, sym_2_5944
+.globl sym_2_5945
+sym_2_5945: la $2, sym_2_5945
+.globl sym_2_5946
+sym_2_5946: la $2, sym_2_5946
+.globl sym_2_5947
+sym_2_5947: la $2, sym_2_5947
+.globl sym_2_5948
+sym_2_5948: la $2, sym_2_5948
+.globl sym_2_5949
+sym_2_5949: la $2, sym_2_5949
+.globl sym_2_5950
+sym_2_5950: la $2, sym_2_5950
+.globl sym_2_5951
+sym_2_5951: la $2, sym_2_5951
+.globl sym_2_5952
+sym_2_5952: la $2, sym_2_5952
+.globl sym_2_5953
+sym_2_5953: la $2, sym_2_5953
+.globl sym_2_5954
+sym_2_5954: la $2, sym_2_5954
+.globl sym_2_5955
+sym_2_5955: la $2, sym_2_5955
+.globl sym_2_5956
+sym_2_5956: la $2, sym_2_5956
+.globl sym_2_5957
+sym_2_5957: la $2, sym_2_5957
+.globl sym_2_5958
+sym_2_5958: la $2, sym_2_5958
+.globl sym_2_5959
+sym_2_5959: la $2, sym_2_5959
+.globl sym_2_5960
+sym_2_5960: la $2, sym_2_5960
+.globl sym_2_5961
+sym_2_5961: la $2, sym_2_5961
+.globl sym_2_5962
+sym_2_5962: la $2, sym_2_5962
+.globl sym_2_5963
+sym_2_5963: la $2, sym_2_5963
+.globl sym_2_5964
+sym_2_5964: la $2, sym_2_5964
+.globl sym_2_5965
+sym_2_5965: la $2, sym_2_5965
+.globl sym_2_5966
+sym_2_5966: la $2, sym_2_5966
+.globl sym_2_5967
+sym_2_5967: la $2, sym_2_5967
+.globl sym_2_5968
+sym_2_5968: la $2, sym_2_5968
+.globl sym_2_5969
+sym_2_5969: la $2, sym_2_5969
+.globl sym_2_5970
+sym_2_5970: la $2, sym_2_5970
+.globl sym_2_5971
+sym_2_5971: la $2, sym_2_5971
+.globl sym_2_5972
+sym_2_5972: la $2, sym_2_5972
+.globl sym_2_5973
+sym_2_5973: la $2, sym_2_5973
+.globl sym_2_5974
+sym_2_5974: la $2, sym_2_5974
+.globl sym_2_5975
+sym_2_5975: la $2, sym_2_5975
+.globl sym_2_5976
+sym_2_5976: la $2, sym_2_5976
+.globl sym_2_5977
+sym_2_5977: la $2, sym_2_5977
+.globl sym_2_5978
+sym_2_5978: la $2, sym_2_5978
+.globl sym_2_5979
+sym_2_5979: la $2, sym_2_5979
+.globl sym_2_5980
+sym_2_5980: la $2, sym_2_5980
+.globl sym_2_5981
+sym_2_5981: la $2, sym_2_5981
+.globl sym_2_5982
+sym_2_5982: la $2, sym_2_5982
+.globl sym_2_5983
+sym_2_5983: la $2, sym_2_5983
+.globl sym_2_5984
+sym_2_5984: la $2, sym_2_5984
+.globl sym_2_5985
+sym_2_5985: la $2, sym_2_5985
+.globl sym_2_5986
+sym_2_5986: la $2, sym_2_5986
+.globl sym_2_5987
+sym_2_5987: la $2, sym_2_5987
+.globl sym_2_5988
+sym_2_5988: la $2, sym_2_5988
+.globl sym_2_5989
+sym_2_5989: la $2, sym_2_5989
+.globl sym_2_5990
+sym_2_5990: la $2, sym_2_5990
+.globl sym_2_5991
+sym_2_5991: la $2, sym_2_5991
+.globl sym_2_5992
+sym_2_5992: la $2, sym_2_5992
+.globl sym_2_5993
+sym_2_5993: la $2, sym_2_5993
+.globl sym_2_5994
+sym_2_5994: la $2, sym_2_5994
+.globl sym_2_5995
+sym_2_5995: la $2, sym_2_5995
+.globl sym_2_5996
+sym_2_5996: la $2, sym_2_5996
+.globl sym_2_5997
+sym_2_5997: la $2, sym_2_5997
+.globl sym_2_5998
+sym_2_5998: la $2, sym_2_5998
+.globl sym_2_5999
+sym_2_5999: la $2, sym_2_5999
+.globl sym_2_6000
+sym_2_6000: la $2, sym_2_6000
+.globl sym_2_6001
+sym_2_6001: la $2, sym_2_6001
+.globl sym_2_6002
+sym_2_6002: la $2, sym_2_6002
+.globl sym_2_6003
+sym_2_6003: la $2, sym_2_6003
+.globl sym_2_6004
+sym_2_6004: la $2, sym_2_6004
+.globl sym_2_6005
+sym_2_6005: la $2, sym_2_6005
+.globl sym_2_6006
+sym_2_6006: la $2, sym_2_6006
+.globl sym_2_6007
+sym_2_6007: la $2, sym_2_6007
+.globl sym_2_6008
+sym_2_6008: la $2, sym_2_6008
+.globl sym_2_6009
+sym_2_6009: la $2, sym_2_6009
+.globl sym_2_6010
+sym_2_6010: la $2, sym_2_6010
+.globl sym_2_6011
+sym_2_6011: la $2, sym_2_6011
+.globl sym_2_6012
+sym_2_6012: la $2, sym_2_6012
+.globl sym_2_6013
+sym_2_6013: la $2, sym_2_6013
+.globl sym_2_6014
+sym_2_6014: la $2, sym_2_6014
+.globl sym_2_6015
+sym_2_6015: la $2, sym_2_6015
+.globl sym_2_6016
+sym_2_6016: la $2, sym_2_6016
+.globl sym_2_6017
+sym_2_6017: la $2, sym_2_6017
+.globl sym_2_6018
+sym_2_6018: la $2, sym_2_6018
+.globl sym_2_6019
+sym_2_6019: la $2, sym_2_6019
+.globl sym_2_6020
+sym_2_6020: la $2, sym_2_6020
+.globl sym_2_6021
+sym_2_6021: la $2, sym_2_6021
+.globl sym_2_6022
+sym_2_6022: la $2, sym_2_6022
+.globl sym_2_6023
+sym_2_6023: la $2, sym_2_6023
+.globl sym_2_6024
+sym_2_6024: la $2, sym_2_6024
+.globl sym_2_6025
+sym_2_6025: la $2, sym_2_6025
+.globl sym_2_6026
+sym_2_6026: la $2, sym_2_6026
+.globl sym_2_6027
+sym_2_6027: la $2, sym_2_6027
+.globl sym_2_6028
+sym_2_6028: la $2, sym_2_6028
+.globl sym_2_6029
+sym_2_6029: la $2, sym_2_6029
+.globl sym_2_6030
+sym_2_6030: la $2, sym_2_6030
+.globl sym_2_6031
+sym_2_6031: la $2, sym_2_6031
+.globl sym_2_6032
+sym_2_6032: la $2, sym_2_6032
+.globl sym_2_6033
+sym_2_6033: la $2, sym_2_6033
+.globl sym_2_6034
+sym_2_6034: la $2, sym_2_6034
+.globl sym_2_6035
+sym_2_6035: la $2, sym_2_6035
+.globl sym_2_6036
+sym_2_6036: la $2, sym_2_6036
+.globl sym_2_6037
+sym_2_6037: la $2, sym_2_6037
+.globl sym_2_6038
+sym_2_6038: la $2, sym_2_6038
+.globl sym_2_6039
+sym_2_6039: la $2, sym_2_6039
+.globl sym_2_6040
+sym_2_6040: la $2, sym_2_6040
+.globl sym_2_6041
+sym_2_6041: la $2, sym_2_6041
+.globl sym_2_6042
+sym_2_6042: la $2, sym_2_6042
+.globl sym_2_6043
+sym_2_6043: la $2, sym_2_6043
+.globl sym_2_6044
+sym_2_6044: la $2, sym_2_6044
+.globl sym_2_6045
+sym_2_6045: la $2, sym_2_6045
+.globl sym_2_6046
+sym_2_6046: la $2, sym_2_6046
+.globl sym_2_6047
+sym_2_6047: la $2, sym_2_6047
+.globl sym_2_6048
+sym_2_6048: la $2, sym_2_6048
+.globl sym_2_6049
+sym_2_6049: la $2, sym_2_6049
+.globl sym_2_6050
+sym_2_6050: la $2, sym_2_6050
+.globl sym_2_6051
+sym_2_6051: la $2, sym_2_6051
+.globl sym_2_6052
+sym_2_6052: la $2, sym_2_6052
+.globl sym_2_6053
+sym_2_6053: la $2, sym_2_6053
+.globl sym_2_6054
+sym_2_6054: la $2, sym_2_6054
+.globl sym_2_6055
+sym_2_6055: la $2, sym_2_6055
+.globl sym_2_6056
+sym_2_6056: la $2, sym_2_6056
+.globl sym_2_6057
+sym_2_6057: la $2, sym_2_6057
+.globl sym_2_6058
+sym_2_6058: la $2, sym_2_6058
+.globl sym_2_6059
+sym_2_6059: la $2, sym_2_6059
+.globl sym_2_6060
+sym_2_6060: la $2, sym_2_6060
+.globl sym_2_6061
+sym_2_6061: la $2, sym_2_6061
+.globl sym_2_6062
+sym_2_6062: la $2, sym_2_6062
+.globl sym_2_6063
+sym_2_6063: la $2, sym_2_6063
+.globl sym_2_6064
+sym_2_6064: la $2, sym_2_6064
+.globl sym_2_6065
+sym_2_6065: la $2, sym_2_6065
+.globl sym_2_6066
+sym_2_6066: la $2, sym_2_6066
+.globl sym_2_6067
+sym_2_6067: la $2, sym_2_6067
+.globl sym_2_6068
+sym_2_6068: la $2, sym_2_6068
+.globl sym_2_6069
+sym_2_6069: la $2, sym_2_6069
+.globl sym_2_6070
+sym_2_6070: la $2, sym_2_6070
+.globl sym_2_6071
+sym_2_6071: la $2, sym_2_6071
+.globl sym_2_6072
+sym_2_6072: la $2, sym_2_6072
+.globl sym_2_6073
+sym_2_6073: la $2, sym_2_6073
+.globl sym_2_6074
+sym_2_6074: la $2, sym_2_6074
+.globl sym_2_6075
+sym_2_6075: la $2, sym_2_6075
+.globl sym_2_6076
+sym_2_6076: la $2, sym_2_6076
+.globl sym_2_6077
+sym_2_6077: la $2, sym_2_6077
+.globl sym_2_6078
+sym_2_6078: la $2, sym_2_6078
+.globl sym_2_6079
+sym_2_6079: la $2, sym_2_6079
+.globl sym_2_6080
+sym_2_6080: la $2, sym_2_6080
+.globl sym_2_6081
+sym_2_6081: la $2, sym_2_6081
+.globl sym_2_6082
+sym_2_6082: la $2, sym_2_6082
+.globl sym_2_6083
+sym_2_6083: la $2, sym_2_6083
+.globl sym_2_6084
+sym_2_6084: la $2, sym_2_6084
+.globl sym_2_6085
+sym_2_6085: la $2, sym_2_6085
+.globl sym_2_6086
+sym_2_6086: la $2, sym_2_6086
+.globl sym_2_6087
+sym_2_6087: la $2, sym_2_6087
+.globl sym_2_6088
+sym_2_6088: la $2, sym_2_6088
+.globl sym_2_6089
+sym_2_6089: la $2, sym_2_6089
+.globl sym_2_6090
+sym_2_6090: la $2, sym_2_6090
+.globl sym_2_6091
+sym_2_6091: la $2, sym_2_6091
+.globl sym_2_6092
+sym_2_6092: la $2, sym_2_6092
+.globl sym_2_6093
+sym_2_6093: la $2, sym_2_6093
+.globl sym_2_6094
+sym_2_6094: la $2, sym_2_6094
+.globl sym_2_6095
+sym_2_6095: la $2, sym_2_6095
+.globl sym_2_6096
+sym_2_6096: la $2, sym_2_6096
+.globl sym_2_6097
+sym_2_6097: la $2, sym_2_6097
+.globl sym_2_6098
+sym_2_6098: la $2, sym_2_6098
+.globl sym_2_6099
+sym_2_6099: la $2, sym_2_6099
+.globl sym_2_6100
+sym_2_6100: la $2, sym_2_6100
+.globl sym_2_6101
+sym_2_6101: la $2, sym_2_6101
+.globl sym_2_6102
+sym_2_6102: la $2, sym_2_6102
+.globl sym_2_6103
+sym_2_6103: la $2, sym_2_6103
+.globl sym_2_6104
+sym_2_6104: la $2, sym_2_6104
+.globl sym_2_6105
+sym_2_6105: la $2, sym_2_6105
+.globl sym_2_6106
+sym_2_6106: la $2, sym_2_6106
+.globl sym_2_6107
+sym_2_6107: la $2, sym_2_6107
+.globl sym_2_6108
+sym_2_6108: la $2, sym_2_6108
+.globl sym_2_6109
+sym_2_6109: la $2, sym_2_6109
+.globl sym_2_6110
+sym_2_6110: la $2, sym_2_6110
+.globl sym_2_6111
+sym_2_6111: la $2, sym_2_6111
+.globl sym_2_6112
+sym_2_6112: la $2, sym_2_6112
+.globl sym_2_6113
+sym_2_6113: la $2, sym_2_6113
+.globl sym_2_6114
+sym_2_6114: la $2, sym_2_6114
+.globl sym_2_6115
+sym_2_6115: la $2, sym_2_6115
+.globl sym_2_6116
+sym_2_6116: la $2, sym_2_6116
+.globl sym_2_6117
+sym_2_6117: la $2, sym_2_6117
+.globl sym_2_6118
+sym_2_6118: la $2, sym_2_6118
+.globl sym_2_6119
+sym_2_6119: la $2, sym_2_6119
+.globl sym_2_6120
+sym_2_6120: la $2, sym_2_6120
+.globl sym_2_6121
+sym_2_6121: la $2, sym_2_6121
+.globl sym_2_6122
+sym_2_6122: la $2, sym_2_6122
+.globl sym_2_6123
+sym_2_6123: la $2, sym_2_6123
+.globl sym_2_6124
+sym_2_6124: la $2, sym_2_6124
+.globl sym_2_6125
+sym_2_6125: la $2, sym_2_6125
+.globl sym_2_6126
+sym_2_6126: la $2, sym_2_6126
+.globl sym_2_6127
+sym_2_6127: la $2, sym_2_6127
+.globl sym_2_6128
+sym_2_6128: la $2, sym_2_6128
+.globl sym_2_6129
+sym_2_6129: la $2, sym_2_6129
+.globl sym_2_6130
+sym_2_6130: la $2, sym_2_6130
+.globl sym_2_6131
+sym_2_6131: la $2, sym_2_6131
+.globl sym_2_6132
+sym_2_6132: la $2, sym_2_6132
+.globl sym_2_6133
+sym_2_6133: la $2, sym_2_6133
+.globl sym_2_6134
+sym_2_6134: la $2, sym_2_6134
+.globl sym_2_6135
+sym_2_6135: la $2, sym_2_6135
+.globl sym_2_6136
+sym_2_6136: la $2, sym_2_6136
+.globl sym_2_6137
+sym_2_6137: la $2, sym_2_6137
+.globl sym_2_6138
+sym_2_6138: la $2, sym_2_6138
+.globl sym_2_6139
+sym_2_6139: la $2, sym_2_6139
+.globl sym_2_6140
+sym_2_6140: la $2, sym_2_6140
+.globl sym_2_6141
+sym_2_6141: la $2, sym_2_6141
+.globl sym_2_6142
+sym_2_6142: la $2, sym_2_6142
+.globl sym_2_6143
+sym_2_6143: la $2, sym_2_6143
+.globl sym_2_6144
+sym_2_6144: la $2, sym_2_6144
+.globl sym_2_6145
+sym_2_6145: la $2, sym_2_6145
+.globl sym_2_6146
+sym_2_6146: la $2, sym_2_6146
+.globl sym_2_6147
+sym_2_6147: la $2, sym_2_6147
+.globl sym_2_6148
+sym_2_6148: la $2, sym_2_6148
+.globl sym_2_6149
+sym_2_6149: la $2, sym_2_6149
+.globl sym_2_6150
+sym_2_6150: la $2, sym_2_6150
+.globl sym_2_6151
+sym_2_6151: la $2, sym_2_6151
+.globl sym_2_6152
+sym_2_6152: la $2, sym_2_6152
+.globl sym_2_6153
+sym_2_6153: la $2, sym_2_6153
+.globl sym_2_6154
+sym_2_6154: la $2, sym_2_6154
+.globl sym_2_6155
+sym_2_6155: la $2, sym_2_6155
+.globl sym_2_6156
+sym_2_6156: la $2, sym_2_6156
+.globl sym_2_6157
+sym_2_6157: la $2, sym_2_6157
+.globl sym_2_6158
+sym_2_6158: la $2, sym_2_6158
+.globl sym_2_6159
+sym_2_6159: la $2, sym_2_6159
+.globl sym_2_6160
+sym_2_6160: la $2, sym_2_6160
+.globl sym_2_6161
+sym_2_6161: la $2, sym_2_6161
+.globl sym_2_6162
+sym_2_6162: la $2, sym_2_6162
+.globl sym_2_6163
+sym_2_6163: la $2, sym_2_6163
+.globl sym_2_6164
+sym_2_6164: la $2, sym_2_6164
+.globl sym_2_6165
+sym_2_6165: la $2, sym_2_6165
+.globl sym_2_6166
+sym_2_6166: la $2, sym_2_6166
+.globl sym_2_6167
+sym_2_6167: la $2, sym_2_6167
+.globl sym_2_6168
+sym_2_6168: la $2, sym_2_6168
+.globl sym_2_6169
+sym_2_6169: la $2, sym_2_6169
+.globl sym_2_6170
+sym_2_6170: la $2, sym_2_6170
+.globl sym_2_6171
+sym_2_6171: la $2, sym_2_6171
+.globl sym_2_6172
+sym_2_6172: la $2, sym_2_6172
+.globl sym_2_6173
+sym_2_6173: la $2, sym_2_6173
+.globl sym_2_6174
+sym_2_6174: la $2, sym_2_6174
+.globl sym_2_6175
+sym_2_6175: la $2, sym_2_6175
+.globl sym_2_6176
+sym_2_6176: la $2, sym_2_6176
+.globl sym_2_6177
+sym_2_6177: la $2, sym_2_6177
+.globl sym_2_6178
+sym_2_6178: la $2, sym_2_6178
+.globl sym_2_6179
+sym_2_6179: la $2, sym_2_6179
+.globl sym_2_6180
+sym_2_6180: la $2, sym_2_6180
+.globl sym_2_6181
+sym_2_6181: la $2, sym_2_6181
+.globl sym_2_6182
+sym_2_6182: la $2, sym_2_6182
+.globl sym_2_6183
+sym_2_6183: la $2, sym_2_6183
+.globl sym_2_6184
+sym_2_6184: la $2, sym_2_6184
+.globl sym_2_6185
+sym_2_6185: la $2, sym_2_6185
+.globl sym_2_6186
+sym_2_6186: la $2, sym_2_6186
+.globl sym_2_6187
+sym_2_6187: la $2, sym_2_6187
+.globl sym_2_6188
+sym_2_6188: la $2, sym_2_6188
+.globl sym_2_6189
+sym_2_6189: la $2, sym_2_6189
+.globl sym_2_6190
+sym_2_6190: la $2, sym_2_6190
+.globl sym_2_6191
+sym_2_6191: la $2, sym_2_6191
+.globl sym_2_6192
+sym_2_6192: la $2, sym_2_6192
+.globl sym_2_6193
+sym_2_6193: la $2, sym_2_6193
+.globl sym_2_6194
+sym_2_6194: la $2, sym_2_6194
+.globl sym_2_6195
+sym_2_6195: la $2, sym_2_6195
+.globl sym_2_6196
+sym_2_6196: la $2, sym_2_6196
+.globl sym_2_6197
+sym_2_6197: la $2, sym_2_6197
+.globl sym_2_6198
+sym_2_6198: la $2, sym_2_6198
+.globl sym_2_6199
+sym_2_6199: la $2, sym_2_6199
+.globl sym_2_6200
+sym_2_6200: la $2, sym_2_6200
+.globl sym_2_6201
+sym_2_6201: la $2, sym_2_6201
+.globl sym_2_6202
+sym_2_6202: la $2, sym_2_6202
+.globl sym_2_6203
+sym_2_6203: la $2, sym_2_6203
+.globl sym_2_6204
+sym_2_6204: la $2, sym_2_6204
+.globl sym_2_6205
+sym_2_6205: la $2, sym_2_6205
+.globl sym_2_6206
+sym_2_6206: la $2, sym_2_6206
+.globl sym_2_6207
+sym_2_6207: la $2, sym_2_6207
+.globl sym_2_6208
+sym_2_6208: la $2, sym_2_6208
+.globl sym_2_6209
+sym_2_6209: la $2, sym_2_6209
+.globl sym_2_6210
+sym_2_6210: la $2, sym_2_6210
+.globl sym_2_6211
+sym_2_6211: la $2, sym_2_6211
+.globl sym_2_6212
+sym_2_6212: la $2, sym_2_6212
+.globl sym_2_6213
+sym_2_6213: la $2, sym_2_6213
+.globl sym_2_6214
+sym_2_6214: la $2, sym_2_6214
+.globl sym_2_6215
+sym_2_6215: la $2, sym_2_6215
+.globl sym_2_6216
+sym_2_6216: la $2, sym_2_6216
+.globl sym_2_6217
+sym_2_6217: la $2, sym_2_6217
+.globl sym_2_6218
+sym_2_6218: la $2, sym_2_6218
+.globl sym_2_6219
+sym_2_6219: la $2, sym_2_6219
+.globl sym_2_6220
+sym_2_6220: la $2, sym_2_6220
+.globl sym_2_6221
+sym_2_6221: la $2, sym_2_6221
+.globl sym_2_6222
+sym_2_6222: la $2, sym_2_6222
+.globl sym_2_6223
+sym_2_6223: la $2, sym_2_6223
+.globl sym_2_6224
+sym_2_6224: la $2, sym_2_6224
+.globl sym_2_6225
+sym_2_6225: la $2, sym_2_6225
+.globl sym_2_6226
+sym_2_6226: la $2, sym_2_6226
+.globl sym_2_6227
+sym_2_6227: la $2, sym_2_6227
+.globl sym_2_6228
+sym_2_6228: la $2, sym_2_6228
+.globl sym_2_6229
+sym_2_6229: la $2, sym_2_6229
+.globl sym_2_6230
+sym_2_6230: la $2, sym_2_6230
+.globl sym_2_6231
+sym_2_6231: la $2, sym_2_6231
+.globl sym_2_6232
+sym_2_6232: la $2, sym_2_6232
+.globl sym_2_6233
+sym_2_6233: la $2, sym_2_6233
+.globl sym_2_6234
+sym_2_6234: la $2, sym_2_6234
+.globl sym_2_6235
+sym_2_6235: la $2, sym_2_6235
+.globl sym_2_6236
+sym_2_6236: la $2, sym_2_6236
+.globl sym_2_6237
+sym_2_6237: la $2, sym_2_6237
+.globl sym_2_6238
+sym_2_6238: la $2, sym_2_6238
+.globl sym_2_6239
+sym_2_6239: la $2, sym_2_6239
+.globl sym_2_6240
+sym_2_6240: la $2, sym_2_6240
+.globl sym_2_6241
+sym_2_6241: la $2, sym_2_6241
+.globl sym_2_6242
+sym_2_6242: la $2, sym_2_6242
+.globl sym_2_6243
+sym_2_6243: la $2, sym_2_6243
+.globl sym_2_6244
+sym_2_6244: la $2, sym_2_6244
+.globl sym_2_6245
+sym_2_6245: la $2, sym_2_6245
+.globl sym_2_6246
+sym_2_6246: la $2, sym_2_6246
+.globl sym_2_6247
+sym_2_6247: la $2, sym_2_6247
+.globl sym_2_6248
+sym_2_6248: la $2, sym_2_6248
+.globl sym_2_6249
+sym_2_6249: la $2, sym_2_6249
+.globl sym_2_6250
+sym_2_6250: la $2, sym_2_6250
+.globl sym_2_6251
+sym_2_6251: la $2, sym_2_6251
+.globl sym_2_6252
+sym_2_6252: la $2, sym_2_6252
+.globl sym_2_6253
+sym_2_6253: la $2, sym_2_6253
+.globl sym_2_6254
+sym_2_6254: la $2, sym_2_6254
+.globl sym_2_6255
+sym_2_6255: la $2, sym_2_6255
+.globl sym_2_6256
+sym_2_6256: la $2, sym_2_6256
+.globl sym_2_6257
+sym_2_6257: la $2, sym_2_6257
+.globl sym_2_6258
+sym_2_6258: la $2, sym_2_6258
+.globl sym_2_6259
+sym_2_6259: la $2, sym_2_6259
+.globl sym_2_6260
+sym_2_6260: la $2, sym_2_6260
+.globl sym_2_6261
+sym_2_6261: la $2, sym_2_6261
+.globl sym_2_6262
+sym_2_6262: la $2, sym_2_6262
+.globl sym_2_6263
+sym_2_6263: la $2, sym_2_6263
+.globl sym_2_6264
+sym_2_6264: la $2, sym_2_6264
+.globl sym_2_6265
+sym_2_6265: la $2, sym_2_6265
+.globl sym_2_6266
+sym_2_6266: la $2, sym_2_6266
+.globl sym_2_6267
+sym_2_6267: la $2, sym_2_6267
+.globl sym_2_6268
+sym_2_6268: la $2, sym_2_6268
+.globl sym_2_6269
+sym_2_6269: la $2, sym_2_6269
+.globl sym_2_6270
+sym_2_6270: la $2, sym_2_6270
+.globl sym_2_6271
+sym_2_6271: la $2, sym_2_6271
+.globl sym_2_6272
+sym_2_6272: la $2, sym_2_6272
+.globl sym_2_6273
+sym_2_6273: la $2, sym_2_6273
+.globl sym_2_6274
+sym_2_6274: la $2, sym_2_6274
+.globl sym_2_6275
+sym_2_6275: la $2, sym_2_6275
+.globl sym_2_6276
+sym_2_6276: la $2, sym_2_6276
+.globl sym_2_6277
+sym_2_6277: la $2, sym_2_6277
+.globl sym_2_6278
+sym_2_6278: la $2, sym_2_6278
+.globl sym_2_6279
+sym_2_6279: la $2, sym_2_6279
+.globl sym_2_6280
+sym_2_6280: la $2, sym_2_6280
+.globl sym_2_6281
+sym_2_6281: la $2, sym_2_6281
+.globl sym_2_6282
+sym_2_6282: la $2, sym_2_6282
+.globl sym_2_6283
+sym_2_6283: la $2, sym_2_6283
+.globl sym_2_6284
+sym_2_6284: la $2, sym_2_6284
+.globl sym_2_6285
+sym_2_6285: la $2, sym_2_6285
+.globl sym_2_6286
+sym_2_6286: la $2, sym_2_6286
+.globl sym_2_6287
+sym_2_6287: la $2, sym_2_6287
+.globl sym_2_6288
+sym_2_6288: la $2, sym_2_6288
+.globl sym_2_6289
+sym_2_6289: la $2, sym_2_6289
+.globl sym_2_6290
+sym_2_6290: la $2, sym_2_6290
+.globl sym_2_6291
+sym_2_6291: la $2, sym_2_6291
+.globl sym_2_6292
+sym_2_6292: la $2, sym_2_6292
+.globl sym_2_6293
+sym_2_6293: la $2, sym_2_6293
+.globl sym_2_6294
+sym_2_6294: la $2, sym_2_6294
+.globl sym_2_6295
+sym_2_6295: la $2, sym_2_6295
+.globl sym_2_6296
+sym_2_6296: la $2, sym_2_6296
+.globl sym_2_6297
+sym_2_6297: la $2, sym_2_6297
+.globl sym_2_6298
+sym_2_6298: la $2, sym_2_6298
+.globl sym_2_6299
+sym_2_6299: la $2, sym_2_6299
+.globl sym_2_6300
+sym_2_6300: la $2, sym_2_6300
+.globl sym_2_6301
+sym_2_6301: la $2, sym_2_6301
+.globl sym_2_6302
+sym_2_6302: la $2, sym_2_6302
+.globl sym_2_6303
+sym_2_6303: la $2, sym_2_6303
+.globl sym_2_6304
+sym_2_6304: la $2, sym_2_6304
+.globl sym_2_6305
+sym_2_6305: la $2, sym_2_6305
+.globl sym_2_6306
+sym_2_6306: la $2, sym_2_6306
+.globl sym_2_6307
+sym_2_6307: la $2, sym_2_6307
+.globl sym_2_6308
+sym_2_6308: la $2, sym_2_6308
+.globl sym_2_6309
+sym_2_6309: la $2, sym_2_6309
+.globl sym_2_6310
+sym_2_6310: la $2, sym_2_6310
+.globl sym_2_6311
+sym_2_6311: la $2, sym_2_6311
+.globl sym_2_6312
+sym_2_6312: la $2, sym_2_6312
+.globl sym_2_6313
+sym_2_6313: la $2, sym_2_6313
+.globl sym_2_6314
+sym_2_6314: la $2, sym_2_6314
+.globl sym_2_6315
+sym_2_6315: la $2, sym_2_6315
+.globl sym_2_6316
+sym_2_6316: la $2, sym_2_6316
+.globl sym_2_6317
+sym_2_6317: la $2, sym_2_6317
+.globl sym_2_6318
+sym_2_6318: la $2, sym_2_6318
+.globl sym_2_6319
+sym_2_6319: la $2, sym_2_6319
+.globl sym_2_6320
+sym_2_6320: la $2, sym_2_6320
+.globl sym_2_6321
+sym_2_6321: la $2, sym_2_6321
+.globl sym_2_6322
+sym_2_6322: la $2, sym_2_6322
+.globl sym_2_6323
+sym_2_6323: la $2, sym_2_6323
+.globl sym_2_6324
+sym_2_6324: la $2, sym_2_6324
+.globl sym_2_6325
+sym_2_6325: la $2, sym_2_6325
+.globl sym_2_6326
+sym_2_6326: la $2, sym_2_6326
+.globl sym_2_6327
+sym_2_6327: la $2, sym_2_6327
+.globl sym_2_6328
+sym_2_6328: la $2, sym_2_6328
+.globl sym_2_6329
+sym_2_6329: la $2, sym_2_6329
+.globl sym_2_6330
+sym_2_6330: la $2, sym_2_6330
+.globl sym_2_6331
+sym_2_6331: la $2, sym_2_6331
+.globl sym_2_6332
+sym_2_6332: la $2, sym_2_6332
+.globl sym_2_6333
+sym_2_6333: la $2, sym_2_6333
+.globl sym_2_6334
+sym_2_6334: la $2, sym_2_6334
+.globl sym_2_6335
+sym_2_6335: la $2, sym_2_6335
+.globl sym_2_6336
+sym_2_6336: la $2, sym_2_6336
+.globl sym_2_6337
+sym_2_6337: la $2, sym_2_6337
+.globl sym_2_6338
+sym_2_6338: la $2, sym_2_6338
+.globl sym_2_6339
+sym_2_6339: la $2, sym_2_6339
+.globl sym_2_6340
+sym_2_6340: la $2, sym_2_6340
+.globl sym_2_6341
+sym_2_6341: la $2, sym_2_6341
+.globl sym_2_6342
+sym_2_6342: la $2, sym_2_6342
+.globl sym_2_6343
+sym_2_6343: la $2, sym_2_6343
+.globl sym_2_6344
+sym_2_6344: la $2, sym_2_6344
+.globl sym_2_6345
+sym_2_6345: la $2, sym_2_6345
+.globl sym_2_6346
+sym_2_6346: la $2, sym_2_6346
+.globl sym_2_6347
+sym_2_6347: la $2, sym_2_6347
+.globl sym_2_6348
+sym_2_6348: la $2, sym_2_6348
+.globl sym_2_6349
+sym_2_6349: la $2, sym_2_6349
+.globl sym_2_6350
+sym_2_6350: la $2, sym_2_6350
+.globl sym_2_6351
+sym_2_6351: la $2, sym_2_6351
+.globl sym_2_6352
+sym_2_6352: la $2, sym_2_6352
+.globl sym_2_6353
+sym_2_6353: la $2, sym_2_6353
+.globl sym_2_6354
+sym_2_6354: la $2, sym_2_6354
+.globl sym_2_6355
+sym_2_6355: la $2, sym_2_6355
+.globl sym_2_6356
+sym_2_6356: la $2, sym_2_6356
+.globl sym_2_6357
+sym_2_6357: la $2, sym_2_6357
+.globl sym_2_6358
+sym_2_6358: la $2, sym_2_6358
+.globl sym_2_6359
+sym_2_6359: la $2, sym_2_6359
+.globl sym_2_6360
+sym_2_6360: la $2, sym_2_6360
+.globl sym_2_6361
+sym_2_6361: la $2, sym_2_6361
+.globl sym_2_6362
+sym_2_6362: la $2, sym_2_6362
+.globl sym_2_6363
+sym_2_6363: la $2, sym_2_6363
+.globl sym_2_6364
+sym_2_6364: la $2, sym_2_6364
+.globl sym_2_6365
+sym_2_6365: la $2, sym_2_6365
+.globl sym_2_6366
+sym_2_6366: la $2, sym_2_6366
+.globl sym_2_6367
+sym_2_6367: la $2, sym_2_6367
+.globl sym_2_6368
+sym_2_6368: la $2, sym_2_6368
+.globl sym_2_6369
+sym_2_6369: la $2, sym_2_6369
+.globl sym_2_6370
+sym_2_6370: la $2, sym_2_6370
+.globl sym_2_6371
+sym_2_6371: la $2, sym_2_6371
+.globl sym_2_6372
+sym_2_6372: la $2, sym_2_6372
+.globl sym_2_6373
+sym_2_6373: la $2, sym_2_6373
+.globl sym_2_6374
+sym_2_6374: la $2, sym_2_6374
+.globl sym_2_6375
+sym_2_6375: la $2, sym_2_6375
+.globl sym_2_6376
+sym_2_6376: la $2, sym_2_6376
+.globl sym_2_6377
+sym_2_6377: la $2, sym_2_6377
+.globl sym_2_6378
+sym_2_6378: la $2, sym_2_6378
+.globl sym_2_6379
+sym_2_6379: la $2, sym_2_6379
+.globl sym_2_6380
+sym_2_6380: la $2, sym_2_6380
+.globl sym_2_6381
+sym_2_6381: la $2, sym_2_6381
+.globl sym_2_6382
+sym_2_6382: la $2, sym_2_6382
+.globl sym_2_6383
+sym_2_6383: la $2, sym_2_6383
+.globl sym_2_6384
+sym_2_6384: la $2, sym_2_6384
+.globl sym_2_6385
+sym_2_6385: la $2, sym_2_6385
+.globl sym_2_6386
+sym_2_6386: la $2, sym_2_6386
+.globl sym_2_6387
+sym_2_6387: la $2, sym_2_6387
+.globl sym_2_6388
+sym_2_6388: la $2, sym_2_6388
+.globl sym_2_6389
+sym_2_6389: la $2, sym_2_6389
+.globl sym_2_6390
+sym_2_6390: la $2, sym_2_6390
+.globl sym_2_6391
+sym_2_6391: la $2, sym_2_6391
+.globl sym_2_6392
+sym_2_6392: la $2, sym_2_6392
+.globl sym_2_6393
+sym_2_6393: la $2, sym_2_6393
+.globl sym_2_6394
+sym_2_6394: la $2, sym_2_6394
+.globl sym_2_6395
+sym_2_6395: la $2, sym_2_6395
+.globl sym_2_6396
+sym_2_6396: la $2, sym_2_6396
+.globl sym_2_6397
+sym_2_6397: la $2, sym_2_6397
+.globl sym_2_6398
+sym_2_6398: la $2, sym_2_6398
+.globl sym_2_6399
+sym_2_6399: la $2, sym_2_6399
+.globl sym_2_6400
+sym_2_6400: la $2, sym_2_6400
+.globl sym_2_6401
+sym_2_6401: la $2, sym_2_6401
+.globl sym_2_6402
+sym_2_6402: la $2, sym_2_6402
+.globl sym_2_6403
+sym_2_6403: la $2, sym_2_6403
+.globl sym_2_6404
+sym_2_6404: la $2, sym_2_6404
+.globl sym_2_6405
+sym_2_6405: la $2, sym_2_6405
+.globl sym_2_6406
+sym_2_6406: la $2, sym_2_6406
+.globl sym_2_6407
+sym_2_6407: la $2, sym_2_6407
+.globl sym_2_6408
+sym_2_6408: la $2, sym_2_6408
+.globl sym_2_6409
+sym_2_6409: la $2, sym_2_6409
+.globl sym_2_6410
+sym_2_6410: la $2, sym_2_6410
+.globl sym_2_6411
+sym_2_6411: la $2, sym_2_6411
+.globl sym_2_6412
+sym_2_6412: la $2, sym_2_6412
+.globl sym_2_6413
+sym_2_6413: la $2, sym_2_6413
+.globl sym_2_6414
+sym_2_6414: la $2, sym_2_6414
+.globl sym_2_6415
+sym_2_6415: la $2, sym_2_6415
+.globl sym_2_6416
+sym_2_6416: la $2, sym_2_6416
+.globl sym_2_6417
+sym_2_6417: la $2, sym_2_6417
+.globl sym_2_6418
+sym_2_6418: la $2, sym_2_6418
+.globl sym_2_6419
+sym_2_6419: la $2, sym_2_6419
+.globl sym_2_6420
+sym_2_6420: la $2, sym_2_6420
+.globl sym_2_6421
+sym_2_6421: la $2, sym_2_6421
+.globl sym_2_6422
+sym_2_6422: la $2, sym_2_6422
+.globl sym_2_6423
+sym_2_6423: la $2, sym_2_6423
+.globl sym_2_6424
+sym_2_6424: la $2, sym_2_6424
+.globl sym_2_6425
+sym_2_6425: la $2, sym_2_6425
+.globl sym_2_6426
+sym_2_6426: la $2, sym_2_6426
+.globl sym_2_6427
+sym_2_6427: la $2, sym_2_6427
+.globl sym_2_6428
+sym_2_6428: la $2, sym_2_6428
+.globl sym_2_6429
+sym_2_6429: la $2, sym_2_6429
+.globl sym_2_6430
+sym_2_6430: la $2, sym_2_6430
+.globl sym_2_6431
+sym_2_6431: la $2, sym_2_6431
+.globl sym_2_6432
+sym_2_6432: la $2, sym_2_6432
+.globl sym_2_6433
+sym_2_6433: la $2, sym_2_6433
+.globl sym_2_6434
+sym_2_6434: la $2, sym_2_6434
+.globl sym_2_6435
+sym_2_6435: la $2, sym_2_6435
+.globl sym_2_6436
+sym_2_6436: la $2, sym_2_6436
+.globl sym_2_6437
+sym_2_6437: la $2, sym_2_6437
+.globl sym_2_6438
+sym_2_6438: la $2, sym_2_6438
+.globl sym_2_6439
+sym_2_6439: la $2, sym_2_6439
+.globl sym_2_6440
+sym_2_6440: la $2, sym_2_6440
+.globl sym_2_6441
+sym_2_6441: la $2, sym_2_6441
+.globl sym_2_6442
+sym_2_6442: la $2, sym_2_6442
+.globl sym_2_6443
+sym_2_6443: la $2, sym_2_6443
+.globl sym_2_6444
+sym_2_6444: la $2, sym_2_6444
+.globl sym_2_6445
+sym_2_6445: la $2, sym_2_6445
+.globl sym_2_6446
+sym_2_6446: la $2, sym_2_6446
+.globl sym_2_6447
+sym_2_6447: la $2, sym_2_6447
+.globl sym_2_6448
+sym_2_6448: la $2, sym_2_6448
+.globl sym_2_6449
+sym_2_6449: la $2, sym_2_6449
+.globl sym_2_6450
+sym_2_6450: la $2, sym_2_6450
+.globl sym_2_6451
+sym_2_6451: la $2, sym_2_6451
+.globl sym_2_6452
+sym_2_6452: la $2, sym_2_6452
+.globl sym_2_6453
+sym_2_6453: la $2, sym_2_6453
+.globl sym_2_6454
+sym_2_6454: la $2, sym_2_6454
+.globl sym_2_6455
+sym_2_6455: la $2, sym_2_6455
+.globl sym_2_6456
+sym_2_6456: la $2, sym_2_6456
+.globl sym_2_6457
+sym_2_6457: la $2, sym_2_6457
+.globl sym_2_6458
+sym_2_6458: la $2, sym_2_6458
+.globl sym_2_6459
+sym_2_6459: la $2, sym_2_6459
+.globl sym_2_6460
+sym_2_6460: la $2, sym_2_6460
+.globl sym_2_6461
+sym_2_6461: la $2, sym_2_6461
+.globl sym_2_6462
+sym_2_6462: la $2, sym_2_6462
+.globl sym_2_6463
+sym_2_6463: la $2, sym_2_6463
+.globl sym_2_6464
+sym_2_6464: la $2, sym_2_6464
+.globl sym_2_6465
+sym_2_6465: la $2, sym_2_6465
+.globl sym_2_6466
+sym_2_6466: la $2, sym_2_6466
+.globl sym_2_6467
+sym_2_6467: la $2, sym_2_6467
+.globl sym_2_6468
+sym_2_6468: la $2, sym_2_6468
+.globl sym_2_6469
+sym_2_6469: la $2, sym_2_6469
+.globl sym_2_6470
+sym_2_6470: la $2, sym_2_6470
+.globl sym_2_6471
+sym_2_6471: la $2, sym_2_6471
+.globl sym_2_6472
+sym_2_6472: la $2, sym_2_6472
+.globl sym_2_6473
+sym_2_6473: la $2, sym_2_6473
+.globl sym_2_6474
+sym_2_6474: la $2, sym_2_6474
+.globl sym_2_6475
+sym_2_6475: la $2, sym_2_6475
+.globl sym_2_6476
+sym_2_6476: la $2, sym_2_6476
+.globl sym_2_6477
+sym_2_6477: la $2, sym_2_6477
+.globl sym_2_6478
+sym_2_6478: la $2, sym_2_6478
+.globl sym_2_6479
+sym_2_6479: la $2, sym_2_6479
+.globl sym_2_6480
+sym_2_6480: la $2, sym_2_6480
+.globl sym_2_6481
+sym_2_6481: la $2, sym_2_6481
+.globl sym_2_6482
+sym_2_6482: la $2, sym_2_6482
+.globl sym_2_6483
+sym_2_6483: la $2, sym_2_6483
+.globl sym_2_6484
+sym_2_6484: la $2, sym_2_6484
+.globl sym_2_6485
+sym_2_6485: la $2, sym_2_6485
+.globl sym_2_6486
+sym_2_6486: la $2, sym_2_6486
+.globl sym_2_6487
+sym_2_6487: la $2, sym_2_6487
+.globl sym_2_6488
+sym_2_6488: la $2, sym_2_6488
+.globl sym_2_6489
+sym_2_6489: la $2, sym_2_6489
+.globl sym_2_6490
+sym_2_6490: la $2, sym_2_6490
+.globl sym_2_6491
+sym_2_6491: la $2, sym_2_6491
+.globl sym_2_6492
+sym_2_6492: la $2, sym_2_6492
+.globl sym_2_6493
+sym_2_6493: la $2, sym_2_6493
+.globl sym_2_6494
+sym_2_6494: la $2, sym_2_6494
+.globl sym_2_6495
+sym_2_6495: la $2, sym_2_6495
+.globl sym_2_6496
+sym_2_6496: la $2, sym_2_6496
+.globl sym_2_6497
+sym_2_6497: la $2, sym_2_6497
+.globl sym_2_6498
+sym_2_6498: la $2, sym_2_6498
+.globl sym_2_6499
+sym_2_6499: la $2, sym_2_6499
+.globl sym_2_6500
+sym_2_6500: la $2, sym_2_6500
+.globl sym_2_6501
+sym_2_6501: la $2, sym_2_6501
+.globl sym_2_6502
+sym_2_6502: la $2, sym_2_6502
+.globl sym_2_6503
+sym_2_6503: la $2, sym_2_6503
+.globl sym_2_6504
+sym_2_6504: la $2, sym_2_6504
+.globl sym_2_6505
+sym_2_6505: la $2, sym_2_6505
+.globl sym_2_6506
+sym_2_6506: la $2, sym_2_6506
+.globl sym_2_6507
+sym_2_6507: la $2, sym_2_6507
+.globl sym_2_6508
+sym_2_6508: la $2, sym_2_6508
+.globl sym_2_6509
+sym_2_6509: la $2, sym_2_6509
+.globl sym_2_6510
+sym_2_6510: la $2, sym_2_6510
+.globl sym_2_6511
+sym_2_6511: la $2, sym_2_6511
+.globl sym_2_6512
+sym_2_6512: la $2, sym_2_6512
+.globl sym_2_6513
+sym_2_6513: la $2, sym_2_6513
+.globl sym_2_6514
+sym_2_6514: la $2, sym_2_6514
+.globl sym_2_6515
+sym_2_6515: la $2, sym_2_6515
+.globl sym_2_6516
+sym_2_6516: la $2, sym_2_6516
+.globl sym_2_6517
+sym_2_6517: la $2, sym_2_6517
+.globl sym_2_6518
+sym_2_6518: la $2, sym_2_6518
+.globl sym_2_6519
+sym_2_6519: la $2, sym_2_6519
+.globl sym_2_6520
+sym_2_6520: la $2, sym_2_6520
+.globl sym_2_6521
+sym_2_6521: la $2, sym_2_6521
+.globl sym_2_6522
+sym_2_6522: la $2, sym_2_6522
+.globl sym_2_6523
+sym_2_6523: la $2, sym_2_6523
+.globl sym_2_6524
+sym_2_6524: la $2, sym_2_6524
+.globl sym_2_6525
+sym_2_6525: la $2, sym_2_6525
+.globl sym_2_6526
+sym_2_6526: la $2, sym_2_6526
+.globl sym_2_6527
+sym_2_6527: la $2, sym_2_6527
+.globl sym_2_6528
+sym_2_6528: la $2, sym_2_6528
+.globl sym_2_6529
+sym_2_6529: la $2, sym_2_6529
+.globl sym_2_6530
+sym_2_6530: la $2, sym_2_6530
+.globl sym_2_6531
+sym_2_6531: la $2, sym_2_6531
+.globl sym_2_6532
+sym_2_6532: la $2, sym_2_6532
+.globl sym_2_6533
+sym_2_6533: la $2, sym_2_6533
+.globl sym_2_6534
+sym_2_6534: la $2, sym_2_6534
+.globl sym_2_6535
+sym_2_6535: la $2, sym_2_6535
+.globl sym_2_6536
+sym_2_6536: la $2, sym_2_6536
+.globl sym_2_6537
+sym_2_6537: la $2, sym_2_6537
+.globl sym_2_6538
+sym_2_6538: la $2, sym_2_6538
+.globl sym_2_6539
+sym_2_6539: la $2, sym_2_6539
+.globl sym_2_6540
+sym_2_6540: la $2, sym_2_6540
+.globl sym_2_6541
+sym_2_6541: la $2, sym_2_6541
+.globl sym_2_6542
+sym_2_6542: la $2, sym_2_6542
+.globl sym_2_6543
+sym_2_6543: la $2, sym_2_6543
+.globl sym_2_6544
+sym_2_6544: la $2, sym_2_6544
+.globl sym_2_6545
+sym_2_6545: la $2, sym_2_6545
+.globl sym_2_6546
+sym_2_6546: la $2, sym_2_6546
+.globl sym_2_6547
+sym_2_6547: la $2, sym_2_6547
+.globl sym_2_6548
+sym_2_6548: la $2, sym_2_6548
+.globl sym_2_6549
+sym_2_6549: la $2, sym_2_6549
+.globl sym_2_6550
+sym_2_6550: la $2, sym_2_6550
+.globl sym_2_6551
+sym_2_6551: la $2, sym_2_6551
+.globl sym_2_6552
+sym_2_6552: la $2, sym_2_6552
+.globl sym_2_6553
+sym_2_6553: la $2, sym_2_6553
+.globl sym_2_6554
+sym_2_6554: la $2, sym_2_6554
+.globl sym_2_6555
+sym_2_6555: la $2, sym_2_6555
+.globl sym_2_6556
+sym_2_6556: la $2, sym_2_6556
+.globl sym_2_6557
+sym_2_6557: la $2, sym_2_6557
+.globl sym_2_6558
+sym_2_6558: la $2, sym_2_6558
+.globl sym_2_6559
+sym_2_6559: la $2, sym_2_6559
+.globl sym_2_6560
+sym_2_6560: la $2, sym_2_6560
+.globl sym_2_6561
+sym_2_6561: la $2, sym_2_6561
+.globl sym_2_6562
+sym_2_6562: la $2, sym_2_6562
+.globl sym_2_6563
+sym_2_6563: la $2, sym_2_6563
+.globl sym_2_6564
+sym_2_6564: la $2, sym_2_6564
+.globl sym_2_6565
+sym_2_6565: la $2, sym_2_6565
+.globl sym_2_6566
+sym_2_6566: la $2, sym_2_6566
+.globl sym_2_6567
+sym_2_6567: la $2, sym_2_6567
+.globl sym_2_6568
+sym_2_6568: la $2, sym_2_6568
+.globl sym_2_6569
+sym_2_6569: la $2, sym_2_6569
+.globl sym_2_6570
+sym_2_6570: la $2, sym_2_6570
+.globl sym_2_6571
+sym_2_6571: la $2, sym_2_6571
+.globl sym_2_6572
+sym_2_6572: la $2, sym_2_6572
+.globl sym_2_6573
+sym_2_6573: la $2, sym_2_6573
+.globl sym_2_6574
+sym_2_6574: la $2, sym_2_6574
+.globl sym_2_6575
+sym_2_6575: la $2, sym_2_6575
+.globl sym_2_6576
+sym_2_6576: la $2, sym_2_6576
+.globl sym_2_6577
+sym_2_6577: la $2, sym_2_6577
+.globl sym_2_6578
+sym_2_6578: la $2, sym_2_6578
+.globl sym_2_6579
+sym_2_6579: la $2, sym_2_6579
+.globl sym_2_6580
+sym_2_6580: la $2, sym_2_6580
+.globl sym_2_6581
+sym_2_6581: la $2, sym_2_6581
+.globl sym_2_6582
+sym_2_6582: la $2, sym_2_6582
+.globl sym_2_6583
+sym_2_6583: la $2, sym_2_6583
+.globl sym_2_6584
+sym_2_6584: la $2, sym_2_6584
+.globl sym_2_6585
+sym_2_6585: la $2, sym_2_6585
+.globl sym_2_6586
+sym_2_6586: la $2, sym_2_6586
+.globl sym_2_6587
+sym_2_6587: la $2, sym_2_6587
+.globl sym_2_6588
+sym_2_6588: la $2, sym_2_6588
+.globl sym_2_6589
+sym_2_6589: la $2, sym_2_6589
+.globl sym_2_6590
+sym_2_6590: la $2, sym_2_6590
+.globl sym_2_6591
+sym_2_6591: la $2, sym_2_6591
+.globl sym_2_6592
+sym_2_6592: la $2, sym_2_6592
+.globl sym_2_6593
+sym_2_6593: la $2, sym_2_6593
+.globl sym_2_6594
+sym_2_6594: la $2, sym_2_6594
+.globl sym_2_6595
+sym_2_6595: la $2, sym_2_6595
+.globl sym_2_6596
+sym_2_6596: la $2, sym_2_6596
+.globl sym_2_6597
+sym_2_6597: la $2, sym_2_6597
+.globl sym_2_6598
+sym_2_6598: la $2, sym_2_6598
+.globl sym_2_6599
+sym_2_6599: la $2, sym_2_6599
+.globl sym_2_6600
+sym_2_6600: la $2, sym_2_6600
+.globl sym_2_6601
+sym_2_6601: la $2, sym_2_6601
+.globl sym_2_6602
+sym_2_6602: la $2, sym_2_6602
+.globl sym_2_6603
+sym_2_6603: la $2, sym_2_6603
+.globl sym_2_6604
+sym_2_6604: la $2, sym_2_6604
+.globl sym_2_6605
+sym_2_6605: la $2, sym_2_6605
+.globl sym_2_6606
+sym_2_6606: la $2, sym_2_6606
+.globl sym_2_6607
+sym_2_6607: la $2, sym_2_6607
+.globl sym_2_6608
+sym_2_6608: la $2, sym_2_6608
+.globl sym_2_6609
+sym_2_6609: la $2, sym_2_6609
+.globl sym_2_6610
+sym_2_6610: la $2, sym_2_6610
+.globl sym_2_6611
+sym_2_6611: la $2, sym_2_6611
+.globl sym_2_6612
+sym_2_6612: la $2, sym_2_6612
+.globl sym_2_6613
+sym_2_6613: la $2, sym_2_6613
+.globl sym_2_6614
+sym_2_6614: la $2, sym_2_6614
+.globl sym_2_6615
+sym_2_6615: la $2, sym_2_6615
+.globl sym_2_6616
+sym_2_6616: la $2, sym_2_6616
+.globl sym_2_6617
+sym_2_6617: la $2, sym_2_6617
+.globl sym_2_6618
+sym_2_6618: la $2, sym_2_6618
+.globl sym_2_6619
+sym_2_6619: la $2, sym_2_6619
+.globl sym_2_6620
+sym_2_6620: la $2, sym_2_6620
+.globl sym_2_6621
+sym_2_6621: la $2, sym_2_6621
+.globl sym_2_6622
+sym_2_6622: la $2, sym_2_6622
+.globl sym_2_6623
+sym_2_6623: la $2, sym_2_6623
+.globl sym_2_6624
+sym_2_6624: la $2, sym_2_6624
+.globl sym_2_6625
+sym_2_6625: la $2, sym_2_6625
+.globl sym_2_6626
+sym_2_6626: la $2, sym_2_6626
+.globl sym_2_6627
+sym_2_6627: la $2, sym_2_6627
+.globl sym_2_6628
+sym_2_6628: la $2, sym_2_6628
+.globl sym_2_6629
+sym_2_6629: la $2, sym_2_6629
+.globl sym_2_6630
+sym_2_6630: la $2, sym_2_6630
+.globl sym_2_6631
+sym_2_6631: la $2, sym_2_6631
+.globl sym_2_6632
+sym_2_6632: la $2, sym_2_6632
+.globl sym_2_6633
+sym_2_6633: la $2, sym_2_6633
+.globl sym_2_6634
+sym_2_6634: la $2, sym_2_6634
+.globl sym_2_6635
+sym_2_6635: la $2, sym_2_6635
+.globl sym_2_6636
+sym_2_6636: la $2, sym_2_6636
+.globl sym_2_6637
+sym_2_6637: la $2, sym_2_6637
+.globl sym_2_6638
+sym_2_6638: la $2, sym_2_6638
+.globl sym_2_6639
+sym_2_6639: la $2, sym_2_6639
+.globl sym_2_6640
+sym_2_6640: la $2, sym_2_6640
+.globl sym_2_6641
+sym_2_6641: la $2, sym_2_6641
+.globl sym_2_6642
+sym_2_6642: la $2, sym_2_6642
+.globl sym_2_6643
+sym_2_6643: la $2, sym_2_6643
+.globl sym_2_6644
+sym_2_6644: la $2, sym_2_6644
+.globl sym_2_6645
+sym_2_6645: la $2, sym_2_6645
+.globl sym_2_6646
+sym_2_6646: la $2, sym_2_6646
+.globl sym_2_6647
+sym_2_6647: la $2, sym_2_6647
+.globl sym_2_6648
+sym_2_6648: la $2, sym_2_6648
+.globl sym_2_6649
+sym_2_6649: la $2, sym_2_6649
+.globl sym_2_6650
+sym_2_6650: la $2, sym_2_6650
+.globl sym_2_6651
+sym_2_6651: la $2, sym_2_6651
+.globl sym_2_6652
+sym_2_6652: la $2, sym_2_6652
+.globl sym_2_6653
+sym_2_6653: la $2, sym_2_6653
+.globl sym_2_6654
+sym_2_6654: la $2, sym_2_6654
+.globl sym_2_6655
+sym_2_6655: la $2, sym_2_6655
+.globl sym_2_6656
+sym_2_6656: la $2, sym_2_6656
+.globl sym_2_6657
+sym_2_6657: la $2, sym_2_6657
+.globl sym_2_6658
+sym_2_6658: la $2, sym_2_6658
+.globl sym_2_6659
+sym_2_6659: la $2, sym_2_6659
+.globl sym_2_6660
+sym_2_6660: la $2, sym_2_6660
+.globl sym_2_6661
+sym_2_6661: la $2, sym_2_6661
+.globl sym_2_6662
+sym_2_6662: la $2, sym_2_6662
+.globl sym_2_6663
+sym_2_6663: la $2, sym_2_6663
+.globl sym_2_6664
+sym_2_6664: la $2, sym_2_6664
+.globl sym_2_6665
+sym_2_6665: la $2, sym_2_6665
+.globl sym_2_6666
+sym_2_6666: la $2, sym_2_6666
+.globl sym_2_6667
+sym_2_6667: la $2, sym_2_6667
+.globl sym_2_6668
+sym_2_6668: la $2, sym_2_6668
+.globl sym_2_6669
+sym_2_6669: la $2, sym_2_6669
+.globl sym_2_6670
+sym_2_6670: la $2, sym_2_6670
+.globl sym_2_6671
+sym_2_6671: la $2, sym_2_6671
+.globl sym_2_6672
+sym_2_6672: la $2, sym_2_6672
+.globl sym_2_6673
+sym_2_6673: la $2, sym_2_6673
+.globl sym_2_6674
+sym_2_6674: la $2, sym_2_6674
+.globl sym_2_6675
+sym_2_6675: la $2, sym_2_6675
+.globl sym_2_6676
+sym_2_6676: la $2, sym_2_6676
+.globl sym_2_6677
+sym_2_6677: la $2, sym_2_6677
+.globl sym_2_6678
+sym_2_6678: la $2, sym_2_6678
+.globl sym_2_6679
+sym_2_6679: la $2, sym_2_6679
+.globl sym_2_6680
+sym_2_6680: la $2, sym_2_6680
+.globl sym_2_6681
+sym_2_6681: la $2, sym_2_6681
+.globl sym_2_6682
+sym_2_6682: la $2, sym_2_6682
+.globl sym_2_6683
+sym_2_6683: la $2, sym_2_6683
+.globl sym_2_6684
+sym_2_6684: la $2, sym_2_6684
+.globl sym_2_6685
+sym_2_6685: la $2, sym_2_6685
+.globl sym_2_6686
+sym_2_6686: la $2, sym_2_6686
+.globl sym_2_6687
+sym_2_6687: la $2, sym_2_6687
+.globl sym_2_6688
+sym_2_6688: la $2, sym_2_6688
+.globl sym_2_6689
+sym_2_6689: la $2, sym_2_6689
+.globl sym_2_6690
+sym_2_6690: la $2, sym_2_6690
+.globl sym_2_6691
+sym_2_6691: la $2, sym_2_6691
+.globl sym_2_6692
+sym_2_6692: la $2, sym_2_6692
+.globl sym_2_6693
+sym_2_6693: la $2, sym_2_6693
+.globl sym_2_6694
+sym_2_6694: la $2, sym_2_6694
+.globl sym_2_6695
+sym_2_6695: la $2, sym_2_6695
+.globl sym_2_6696
+sym_2_6696: la $2, sym_2_6696
+.globl sym_2_6697
+sym_2_6697: la $2, sym_2_6697
+.globl sym_2_6698
+sym_2_6698: la $2, sym_2_6698
+.globl sym_2_6699
+sym_2_6699: la $2, sym_2_6699
+.globl sym_2_6700
+sym_2_6700: la $2, sym_2_6700
+.globl sym_2_6701
+sym_2_6701: la $2, sym_2_6701
+.globl sym_2_6702
+sym_2_6702: la $2, sym_2_6702
+.globl sym_2_6703
+sym_2_6703: la $2, sym_2_6703
+.globl sym_2_6704
+sym_2_6704: la $2, sym_2_6704
+.globl sym_2_6705
+sym_2_6705: la $2, sym_2_6705
+.globl sym_2_6706
+sym_2_6706: la $2, sym_2_6706
+.globl sym_2_6707
+sym_2_6707: la $2, sym_2_6707
+.globl sym_2_6708
+sym_2_6708: la $2, sym_2_6708
+.globl sym_2_6709
+sym_2_6709: la $2, sym_2_6709
+.globl sym_2_6710
+sym_2_6710: la $2, sym_2_6710
+.globl sym_2_6711
+sym_2_6711: la $2, sym_2_6711
+.globl sym_2_6712
+sym_2_6712: la $2, sym_2_6712
+.globl sym_2_6713
+sym_2_6713: la $2, sym_2_6713
+.globl sym_2_6714
+sym_2_6714: la $2, sym_2_6714
+.globl sym_2_6715
+sym_2_6715: la $2, sym_2_6715
+.globl sym_2_6716
+sym_2_6716: la $2, sym_2_6716
+.globl sym_2_6717
+sym_2_6717: la $2, sym_2_6717
+.globl sym_2_6718
+sym_2_6718: la $2, sym_2_6718
+.globl sym_2_6719
+sym_2_6719: la $2, sym_2_6719
+.globl sym_2_6720
+sym_2_6720: la $2, sym_2_6720
+.globl sym_2_6721
+sym_2_6721: la $2, sym_2_6721
+.globl sym_2_6722
+sym_2_6722: la $2, sym_2_6722
+.globl sym_2_6723
+sym_2_6723: la $2, sym_2_6723
+.globl sym_2_6724
+sym_2_6724: la $2, sym_2_6724
+.globl sym_2_6725
+sym_2_6725: la $2, sym_2_6725
+.globl sym_2_6726
+sym_2_6726: la $2, sym_2_6726
+.globl sym_2_6727
+sym_2_6727: la $2, sym_2_6727
+.globl sym_2_6728
+sym_2_6728: la $2, sym_2_6728
+.globl sym_2_6729
+sym_2_6729: la $2, sym_2_6729
+.globl sym_2_6730
+sym_2_6730: la $2, sym_2_6730
+.globl sym_2_6731
+sym_2_6731: la $2, sym_2_6731
+.globl sym_2_6732
+sym_2_6732: la $2, sym_2_6732
+.globl sym_2_6733
+sym_2_6733: la $2, sym_2_6733
+.globl sym_2_6734
+sym_2_6734: la $2, sym_2_6734
+.globl sym_2_6735
+sym_2_6735: la $2, sym_2_6735
+.globl sym_2_6736
+sym_2_6736: la $2, sym_2_6736
+.globl sym_2_6737
+sym_2_6737: la $2, sym_2_6737
+.globl sym_2_6738
+sym_2_6738: la $2, sym_2_6738
+.globl sym_2_6739
+sym_2_6739: la $2, sym_2_6739
+.globl sym_2_6740
+sym_2_6740: la $2, sym_2_6740
+.globl sym_2_6741
+sym_2_6741: la $2, sym_2_6741
+.globl sym_2_6742
+sym_2_6742: la $2, sym_2_6742
+.globl sym_2_6743
+sym_2_6743: la $2, sym_2_6743
+.globl sym_2_6744
+sym_2_6744: la $2, sym_2_6744
+.globl sym_2_6745
+sym_2_6745: la $2, sym_2_6745
+.globl sym_2_6746
+sym_2_6746: la $2, sym_2_6746
+.globl sym_2_6747
+sym_2_6747: la $2, sym_2_6747
+.globl sym_2_6748
+sym_2_6748: la $2, sym_2_6748
+.globl sym_2_6749
+sym_2_6749: la $2, sym_2_6749
+.globl sym_2_6750
+sym_2_6750: la $2, sym_2_6750
+.globl sym_2_6751
+sym_2_6751: la $2, sym_2_6751
+.globl sym_2_6752
+sym_2_6752: la $2, sym_2_6752
+.globl sym_2_6753
+sym_2_6753: la $2, sym_2_6753
+.globl sym_2_6754
+sym_2_6754: la $2, sym_2_6754
+.globl sym_2_6755
+sym_2_6755: la $2, sym_2_6755
+.globl sym_2_6756
+sym_2_6756: la $2, sym_2_6756
+.globl sym_2_6757
+sym_2_6757: la $2, sym_2_6757
+.globl sym_2_6758
+sym_2_6758: la $2, sym_2_6758
+.globl sym_2_6759
+sym_2_6759: la $2, sym_2_6759
+.globl sym_2_6760
+sym_2_6760: la $2, sym_2_6760
+.globl sym_2_6761
+sym_2_6761: la $2, sym_2_6761
+.globl sym_2_6762
+sym_2_6762: la $2, sym_2_6762
+.globl sym_2_6763
+sym_2_6763: la $2, sym_2_6763
+.globl sym_2_6764
+sym_2_6764: la $2, sym_2_6764
+.globl sym_2_6765
+sym_2_6765: la $2, sym_2_6765
+.globl sym_2_6766
+sym_2_6766: la $2, sym_2_6766
+.globl sym_2_6767
+sym_2_6767: la $2, sym_2_6767
+.globl sym_2_6768
+sym_2_6768: la $2, sym_2_6768
+.globl sym_2_6769
+sym_2_6769: la $2, sym_2_6769
+.globl sym_2_6770
+sym_2_6770: la $2, sym_2_6770
+.globl sym_2_6771
+sym_2_6771: la $2, sym_2_6771
+.globl sym_2_6772
+sym_2_6772: la $2, sym_2_6772
+.globl sym_2_6773
+sym_2_6773: la $2, sym_2_6773
+.globl sym_2_6774
+sym_2_6774: la $2, sym_2_6774
+.globl sym_2_6775
+sym_2_6775: la $2, sym_2_6775
+.globl sym_2_6776
+sym_2_6776: la $2, sym_2_6776
+.globl sym_2_6777
+sym_2_6777: la $2, sym_2_6777
+.globl sym_2_6778
+sym_2_6778: la $2, sym_2_6778
+.globl sym_2_6779
+sym_2_6779: la $2, sym_2_6779
+.globl sym_2_6780
+sym_2_6780: la $2, sym_2_6780
+.globl sym_2_6781
+sym_2_6781: la $2, sym_2_6781
+.globl sym_2_6782
+sym_2_6782: la $2, sym_2_6782
+.globl sym_2_6783
+sym_2_6783: la $2, sym_2_6783
+.globl sym_2_6784
+sym_2_6784: la $2, sym_2_6784
+.globl sym_2_6785
+sym_2_6785: la $2, sym_2_6785
+.globl sym_2_6786
+sym_2_6786: la $2, sym_2_6786
+.globl sym_2_6787
+sym_2_6787: la $2, sym_2_6787
+.globl sym_2_6788
+sym_2_6788: la $2, sym_2_6788
+.globl sym_2_6789
+sym_2_6789: la $2, sym_2_6789
+.globl sym_2_6790
+sym_2_6790: la $2, sym_2_6790
+.globl sym_2_6791
+sym_2_6791: la $2, sym_2_6791
+.globl sym_2_6792
+sym_2_6792: la $2, sym_2_6792
+.globl sym_2_6793
+sym_2_6793: la $2, sym_2_6793
+.globl sym_2_6794
+sym_2_6794: la $2, sym_2_6794
+.globl sym_2_6795
+sym_2_6795: la $2, sym_2_6795
+.globl sym_2_6796
+sym_2_6796: la $2, sym_2_6796
+.globl sym_2_6797
+sym_2_6797: la $2, sym_2_6797
+.globl sym_2_6798
+sym_2_6798: la $2, sym_2_6798
+.globl sym_2_6799
+sym_2_6799: la $2, sym_2_6799
+.globl sym_2_6800
+sym_2_6800: la $2, sym_2_6800
+.globl sym_2_6801
+sym_2_6801: la $2, sym_2_6801
+.globl sym_2_6802
+sym_2_6802: la $2, sym_2_6802
+.globl sym_2_6803
+sym_2_6803: la $2, sym_2_6803
+.globl sym_2_6804
+sym_2_6804: la $2, sym_2_6804
+.globl sym_2_6805
+sym_2_6805: la $2, sym_2_6805
+.globl sym_2_6806
+sym_2_6806: la $2, sym_2_6806
+.globl sym_2_6807
+sym_2_6807: la $2, sym_2_6807
+.globl sym_2_6808
+sym_2_6808: la $2, sym_2_6808
+.globl sym_2_6809
+sym_2_6809: la $2, sym_2_6809
+.globl sym_2_6810
+sym_2_6810: la $2, sym_2_6810
+.globl sym_2_6811
+sym_2_6811: la $2, sym_2_6811
+.globl sym_2_6812
+sym_2_6812: la $2, sym_2_6812
+.globl sym_2_6813
+sym_2_6813: la $2, sym_2_6813
+.globl sym_2_6814
+sym_2_6814: la $2, sym_2_6814
+.globl sym_2_6815
+sym_2_6815: la $2, sym_2_6815
+.globl sym_2_6816
+sym_2_6816: la $2, sym_2_6816
+.globl sym_2_6817
+sym_2_6817: la $2, sym_2_6817
+.globl sym_2_6818
+sym_2_6818: la $2, sym_2_6818
+.globl sym_2_6819
+sym_2_6819: la $2, sym_2_6819
+.globl sym_2_6820
+sym_2_6820: la $2, sym_2_6820
+.globl sym_2_6821
+sym_2_6821: la $2, sym_2_6821
+.globl sym_2_6822
+sym_2_6822: la $2, sym_2_6822
+.globl sym_2_6823
+sym_2_6823: la $2, sym_2_6823
+.globl sym_2_6824
+sym_2_6824: la $2, sym_2_6824
+.globl sym_2_6825
+sym_2_6825: la $2, sym_2_6825
+.globl sym_2_6826
+sym_2_6826: la $2, sym_2_6826
+.globl sym_2_6827
+sym_2_6827: la $2, sym_2_6827
+.globl sym_2_6828
+sym_2_6828: la $2, sym_2_6828
+.globl sym_2_6829
+sym_2_6829: la $2, sym_2_6829
+.globl sym_2_6830
+sym_2_6830: la $2, sym_2_6830
+.globl sym_2_6831
+sym_2_6831: la $2, sym_2_6831
+.globl sym_2_6832
+sym_2_6832: la $2, sym_2_6832
+.globl sym_2_6833
+sym_2_6833: la $2, sym_2_6833
+.globl sym_2_6834
+sym_2_6834: la $2, sym_2_6834
+.globl sym_2_6835
+sym_2_6835: la $2, sym_2_6835
+.globl sym_2_6836
+sym_2_6836: la $2, sym_2_6836
+.globl sym_2_6837
+sym_2_6837: la $2, sym_2_6837
+.globl sym_2_6838
+sym_2_6838: la $2, sym_2_6838
+.globl sym_2_6839
+sym_2_6839: la $2, sym_2_6839
+.globl sym_2_6840
+sym_2_6840: la $2, sym_2_6840
+.globl sym_2_6841
+sym_2_6841: la $2, sym_2_6841
+.globl sym_2_6842
+sym_2_6842: la $2, sym_2_6842
+.globl sym_2_6843
+sym_2_6843: la $2, sym_2_6843
+.globl sym_2_6844
+sym_2_6844: la $2, sym_2_6844
+.globl sym_2_6845
+sym_2_6845: la $2, sym_2_6845
+.globl sym_2_6846
+sym_2_6846: la $2, sym_2_6846
+.globl sym_2_6847
+sym_2_6847: la $2, sym_2_6847
+.globl sym_2_6848
+sym_2_6848: la $2, sym_2_6848
+.globl sym_2_6849
+sym_2_6849: la $2, sym_2_6849
+.globl sym_2_6850
+sym_2_6850: la $2, sym_2_6850
+.globl sym_2_6851
+sym_2_6851: la $2, sym_2_6851
+.globl sym_2_6852
+sym_2_6852: la $2, sym_2_6852
+.globl sym_2_6853
+sym_2_6853: la $2, sym_2_6853
+.globl sym_2_6854
+sym_2_6854: la $2, sym_2_6854
+.globl sym_2_6855
+sym_2_6855: la $2, sym_2_6855
+.globl sym_2_6856
+sym_2_6856: la $2, sym_2_6856
+.globl sym_2_6857
+sym_2_6857: la $2, sym_2_6857
+.globl sym_2_6858
+sym_2_6858: la $2, sym_2_6858
+.globl sym_2_6859
+sym_2_6859: la $2, sym_2_6859
+.globl sym_2_6860
+sym_2_6860: la $2, sym_2_6860
+.globl sym_2_6861
+sym_2_6861: la $2, sym_2_6861
+.globl sym_2_6862
+sym_2_6862: la $2, sym_2_6862
+.globl sym_2_6863
+sym_2_6863: la $2, sym_2_6863
+.globl sym_2_6864
+sym_2_6864: la $2, sym_2_6864
+.globl sym_2_6865
+sym_2_6865: la $2, sym_2_6865
+.globl sym_2_6866
+sym_2_6866: la $2, sym_2_6866
+.globl sym_2_6867
+sym_2_6867: la $2, sym_2_6867
+.globl sym_2_6868
+sym_2_6868: la $2, sym_2_6868
+.globl sym_2_6869
+sym_2_6869: la $2, sym_2_6869
+.globl sym_2_6870
+sym_2_6870: la $2, sym_2_6870
+.globl sym_2_6871
+sym_2_6871: la $2, sym_2_6871
+.globl sym_2_6872
+sym_2_6872: la $2, sym_2_6872
+.globl sym_2_6873
+sym_2_6873: la $2, sym_2_6873
+.globl sym_2_6874
+sym_2_6874: la $2, sym_2_6874
+.globl sym_2_6875
+sym_2_6875: la $2, sym_2_6875
+.globl sym_2_6876
+sym_2_6876: la $2, sym_2_6876
+.globl sym_2_6877
+sym_2_6877: la $2, sym_2_6877
+.globl sym_2_6878
+sym_2_6878: la $2, sym_2_6878
+.globl sym_2_6879
+sym_2_6879: la $2, sym_2_6879
+.globl sym_2_6880
+sym_2_6880: la $2, sym_2_6880
+.globl sym_2_6881
+sym_2_6881: la $2, sym_2_6881
+.globl sym_2_6882
+sym_2_6882: la $2, sym_2_6882
+.globl sym_2_6883
+sym_2_6883: la $2, sym_2_6883
+.globl sym_2_6884
+sym_2_6884: la $2, sym_2_6884
+.globl sym_2_6885
+sym_2_6885: la $2, sym_2_6885
+.globl sym_2_6886
+sym_2_6886: la $2, sym_2_6886
+.globl sym_2_6887
+sym_2_6887: la $2, sym_2_6887
+.globl sym_2_6888
+sym_2_6888: la $2, sym_2_6888
+.globl sym_2_6889
+sym_2_6889: la $2, sym_2_6889
+.globl sym_2_6890
+sym_2_6890: la $2, sym_2_6890
+.globl sym_2_6891
+sym_2_6891: la $2, sym_2_6891
+.globl sym_2_6892
+sym_2_6892: la $2, sym_2_6892
+.globl sym_2_6893
+sym_2_6893: la $2, sym_2_6893
+.globl sym_2_6894
+sym_2_6894: la $2, sym_2_6894
+.globl sym_2_6895
+sym_2_6895: la $2, sym_2_6895
+.globl sym_2_6896
+sym_2_6896: la $2, sym_2_6896
+.globl sym_2_6897
+sym_2_6897: la $2, sym_2_6897
+.globl sym_2_6898
+sym_2_6898: la $2, sym_2_6898
+.globl sym_2_6899
+sym_2_6899: la $2, sym_2_6899
+.globl sym_2_6900
+sym_2_6900: la $2, sym_2_6900
+.globl sym_2_6901
+sym_2_6901: la $2, sym_2_6901
+.globl sym_2_6902
+sym_2_6902: la $2, sym_2_6902
+.globl sym_2_6903
+sym_2_6903: la $2, sym_2_6903
+.globl sym_2_6904
+sym_2_6904: la $2, sym_2_6904
+.globl sym_2_6905
+sym_2_6905: la $2, sym_2_6905
+.globl sym_2_6906
+sym_2_6906: la $2, sym_2_6906
+.globl sym_2_6907
+sym_2_6907: la $2, sym_2_6907
+.globl sym_2_6908
+sym_2_6908: la $2, sym_2_6908
+.globl sym_2_6909
+sym_2_6909: la $2, sym_2_6909
+.globl sym_2_6910
+sym_2_6910: la $2, sym_2_6910
+.globl sym_2_6911
+sym_2_6911: la $2, sym_2_6911
+.globl sym_2_6912
+sym_2_6912: la $2, sym_2_6912
+.globl sym_2_6913
+sym_2_6913: la $2, sym_2_6913
+.globl sym_2_6914
+sym_2_6914: la $2, sym_2_6914
+.globl sym_2_6915
+sym_2_6915: la $2, sym_2_6915
+.globl sym_2_6916
+sym_2_6916: la $2, sym_2_6916
+.globl sym_2_6917
+sym_2_6917: la $2, sym_2_6917
+.globl sym_2_6918
+sym_2_6918: la $2, sym_2_6918
+.globl sym_2_6919
+sym_2_6919: la $2, sym_2_6919
+.globl sym_2_6920
+sym_2_6920: la $2, sym_2_6920
+.globl sym_2_6921
+sym_2_6921: la $2, sym_2_6921
+.globl sym_2_6922
+sym_2_6922: la $2, sym_2_6922
+.globl sym_2_6923
+sym_2_6923: la $2, sym_2_6923
+.globl sym_2_6924
+sym_2_6924: la $2, sym_2_6924
+.globl sym_2_6925
+sym_2_6925: la $2, sym_2_6925
+.globl sym_2_6926
+sym_2_6926: la $2, sym_2_6926
+.globl sym_2_6927
+sym_2_6927: la $2, sym_2_6927
+.globl sym_2_6928
+sym_2_6928: la $2, sym_2_6928
+.globl sym_2_6929
+sym_2_6929: la $2, sym_2_6929
+.globl sym_2_6930
+sym_2_6930: la $2, sym_2_6930
+.globl sym_2_6931
+sym_2_6931: la $2, sym_2_6931
+.globl sym_2_6932
+sym_2_6932: la $2, sym_2_6932
+.globl sym_2_6933
+sym_2_6933: la $2, sym_2_6933
+.globl sym_2_6934
+sym_2_6934: la $2, sym_2_6934
+.globl sym_2_6935
+sym_2_6935: la $2, sym_2_6935
+.globl sym_2_6936
+sym_2_6936: la $2, sym_2_6936
+.globl sym_2_6937
+sym_2_6937: la $2, sym_2_6937
+.globl sym_2_6938
+sym_2_6938: la $2, sym_2_6938
+.globl sym_2_6939
+sym_2_6939: la $2, sym_2_6939
+.globl sym_2_6940
+sym_2_6940: la $2, sym_2_6940
+.globl sym_2_6941
+sym_2_6941: la $2, sym_2_6941
+.globl sym_2_6942
+sym_2_6942: la $2, sym_2_6942
+.globl sym_2_6943
+sym_2_6943: la $2, sym_2_6943
+.globl sym_2_6944
+sym_2_6944: la $2, sym_2_6944
+.globl sym_2_6945
+sym_2_6945: la $2, sym_2_6945
+.globl sym_2_6946
+sym_2_6946: la $2, sym_2_6946
+.globl sym_2_6947
+sym_2_6947: la $2, sym_2_6947
+.globl sym_2_6948
+sym_2_6948: la $2, sym_2_6948
+.globl sym_2_6949
+sym_2_6949: la $2, sym_2_6949
+.globl sym_2_6950
+sym_2_6950: la $2, sym_2_6950
+.globl sym_2_6951
+sym_2_6951: la $2, sym_2_6951
+.globl sym_2_6952
+sym_2_6952: la $2, sym_2_6952
+.globl sym_2_6953
+sym_2_6953: la $2, sym_2_6953
+.globl sym_2_6954
+sym_2_6954: la $2, sym_2_6954
+.globl sym_2_6955
+sym_2_6955: la $2, sym_2_6955
+.globl sym_2_6956
+sym_2_6956: la $2, sym_2_6956
+.globl sym_2_6957
+sym_2_6957: la $2, sym_2_6957
+.globl sym_2_6958
+sym_2_6958: la $2, sym_2_6958
+.globl sym_2_6959
+sym_2_6959: la $2, sym_2_6959
+.globl sym_2_6960
+sym_2_6960: la $2, sym_2_6960
+.globl sym_2_6961
+sym_2_6961: la $2, sym_2_6961
+.globl sym_2_6962
+sym_2_6962: la $2, sym_2_6962
+.globl sym_2_6963
+sym_2_6963: la $2, sym_2_6963
+.globl sym_2_6964
+sym_2_6964: la $2, sym_2_6964
+.globl sym_2_6965
+sym_2_6965: la $2, sym_2_6965
+.globl sym_2_6966
+sym_2_6966: la $2, sym_2_6966
+.globl sym_2_6967
+sym_2_6967: la $2, sym_2_6967
+.globl sym_2_6968
+sym_2_6968: la $2, sym_2_6968
+.globl sym_2_6969
+sym_2_6969: la $2, sym_2_6969
+.globl sym_2_6970
+sym_2_6970: la $2, sym_2_6970
+.globl sym_2_6971
+sym_2_6971: la $2, sym_2_6971
+.globl sym_2_6972
+sym_2_6972: la $2, sym_2_6972
+.globl sym_2_6973
+sym_2_6973: la $2, sym_2_6973
+.globl sym_2_6974
+sym_2_6974: la $2, sym_2_6974
+.globl sym_2_6975
+sym_2_6975: la $2, sym_2_6975
+.globl sym_2_6976
+sym_2_6976: la $2, sym_2_6976
+.globl sym_2_6977
+sym_2_6977: la $2, sym_2_6977
+.globl sym_2_6978
+sym_2_6978: la $2, sym_2_6978
+.globl sym_2_6979
+sym_2_6979: la $2, sym_2_6979
+.globl sym_2_6980
+sym_2_6980: la $2, sym_2_6980
+.globl sym_2_6981
+sym_2_6981: la $2, sym_2_6981
+.globl sym_2_6982
+sym_2_6982: la $2, sym_2_6982
+.globl sym_2_6983
+sym_2_6983: la $2, sym_2_6983
+.globl sym_2_6984
+sym_2_6984: la $2, sym_2_6984
+.globl sym_2_6985
+sym_2_6985: la $2, sym_2_6985
+.globl sym_2_6986
+sym_2_6986: la $2, sym_2_6986
+.globl sym_2_6987
+sym_2_6987: la $2, sym_2_6987
+.globl sym_2_6988
+sym_2_6988: la $2, sym_2_6988
+.globl sym_2_6989
+sym_2_6989: la $2, sym_2_6989
+.globl sym_2_6990
+sym_2_6990: la $2, sym_2_6990
+.globl sym_2_6991
+sym_2_6991: la $2, sym_2_6991
+.globl sym_2_6992
+sym_2_6992: la $2, sym_2_6992
+.globl sym_2_6993
+sym_2_6993: la $2, sym_2_6993
+.globl sym_2_6994
+sym_2_6994: la $2, sym_2_6994
+.globl sym_2_6995
+sym_2_6995: la $2, sym_2_6995
+.globl sym_2_6996
+sym_2_6996: la $2, sym_2_6996
+.globl sym_2_6997
+sym_2_6997: la $2, sym_2_6997
+.globl sym_2_6998
+sym_2_6998: la $2, sym_2_6998
+.globl sym_2_6999
+sym_2_6999: la $2, sym_2_6999
+.globl sym_2_7000
+sym_2_7000: la $2, sym_2_7000
+.globl sym_2_7001
+sym_2_7001: la $2, sym_2_7001
+.globl sym_2_7002
+sym_2_7002: la $2, sym_2_7002
+.globl sym_2_7003
+sym_2_7003: la $2, sym_2_7003
+.globl sym_2_7004
+sym_2_7004: la $2, sym_2_7004
+.globl sym_2_7005
+sym_2_7005: la $2, sym_2_7005
+.globl sym_2_7006
+sym_2_7006: la $2, sym_2_7006
+.globl sym_2_7007
+sym_2_7007: la $2, sym_2_7007
+.globl sym_2_7008
+sym_2_7008: la $2, sym_2_7008
+.globl sym_2_7009
+sym_2_7009: la $2, sym_2_7009
+.globl sym_2_7010
+sym_2_7010: la $2, sym_2_7010
+.globl sym_2_7011
+sym_2_7011: la $2, sym_2_7011
+.globl sym_2_7012
+sym_2_7012: la $2, sym_2_7012
+.globl sym_2_7013
+sym_2_7013: la $2, sym_2_7013
+.globl sym_2_7014
+sym_2_7014: la $2, sym_2_7014
+.globl sym_2_7015
+sym_2_7015: la $2, sym_2_7015
+.globl sym_2_7016
+sym_2_7016: la $2, sym_2_7016
+.globl sym_2_7017
+sym_2_7017: la $2, sym_2_7017
+.globl sym_2_7018
+sym_2_7018: la $2, sym_2_7018
+.globl sym_2_7019
+sym_2_7019: la $2, sym_2_7019
+.globl sym_2_7020
+sym_2_7020: la $2, sym_2_7020
+.globl sym_2_7021
+sym_2_7021: la $2, sym_2_7021
+.globl sym_2_7022
+sym_2_7022: la $2, sym_2_7022
+.globl sym_2_7023
+sym_2_7023: la $2, sym_2_7023
+.globl sym_2_7024
+sym_2_7024: la $2, sym_2_7024
+.globl sym_2_7025
+sym_2_7025: la $2, sym_2_7025
+.globl sym_2_7026
+sym_2_7026: la $2, sym_2_7026
+.globl sym_2_7027
+sym_2_7027: la $2, sym_2_7027
+.globl sym_2_7028
+sym_2_7028: la $2, sym_2_7028
+.globl sym_2_7029
+sym_2_7029: la $2, sym_2_7029
+.globl sym_2_7030
+sym_2_7030: la $2, sym_2_7030
+.globl sym_2_7031
+sym_2_7031: la $2, sym_2_7031
+.globl sym_2_7032
+sym_2_7032: la $2, sym_2_7032
+.globl sym_2_7033
+sym_2_7033: la $2, sym_2_7033
+.globl sym_2_7034
+sym_2_7034: la $2, sym_2_7034
+.globl sym_2_7035
+sym_2_7035: la $2, sym_2_7035
+.globl sym_2_7036
+sym_2_7036: la $2, sym_2_7036
+.globl sym_2_7037
+sym_2_7037: la $2, sym_2_7037
+.globl sym_2_7038
+sym_2_7038: la $2, sym_2_7038
+.globl sym_2_7039
+sym_2_7039: la $2, sym_2_7039
+.globl sym_2_7040
+sym_2_7040: la $2, sym_2_7040
+.globl sym_2_7041
+sym_2_7041: la $2, sym_2_7041
+.globl sym_2_7042
+sym_2_7042: la $2, sym_2_7042
+.globl sym_2_7043
+sym_2_7043: la $2, sym_2_7043
+.globl sym_2_7044
+sym_2_7044: la $2, sym_2_7044
+.globl sym_2_7045
+sym_2_7045: la $2, sym_2_7045
+.globl sym_2_7046
+sym_2_7046: la $2, sym_2_7046
+.globl sym_2_7047
+sym_2_7047: la $2, sym_2_7047
+.globl sym_2_7048
+sym_2_7048: la $2, sym_2_7048
+.globl sym_2_7049
+sym_2_7049: la $2, sym_2_7049
+.globl sym_2_7050
+sym_2_7050: la $2, sym_2_7050
+.globl sym_2_7051
+sym_2_7051: la $2, sym_2_7051
+.globl sym_2_7052
+sym_2_7052: la $2, sym_2_7052
+.globl sym_2_7053
+sym_2_7053: la $2, sym_2_7053
+.globl sym_2_7054
+sym_2_7054: la $2, sym_2_7054
+.globl sym_2_7055
+sym_2_7055: la $2, sym_2_7055
+.globl sym_2_7056
+sym_2_7056: la $2, sym_2_7056
+.globl sym_2_7057
+sym_2_7057: la $2, sym_2_7057
+.globl sym_2_7058
+sym_2_7058: la $2, sym_2_7058
+.globl sym_2_7059
+sym_2_7059: la $2, sym_2_7059
+.globl sym_2_7060
+sym_2_7060: la $2, sym_2_7060
+.globl sym_2_7061
+sym_2_7061: la $2, sym_2_7061
+.globl sym_2_7062
+sym_2_7062: la $2, sym_2_7062
+.globl sym_2_7063
+sym_2_7063: la $2, sym_2_7063
+.globl sym_2_7064
+sym_2_7064: la $2, sym_2_7064
+.globl sym_2_7065
+sym_2_7065: la $2, sym_2_7065
+.globl sym_2_7066
+sym_2_7066: la $2, sym_2_7066
+.globl sym_2_7067
+sym_2_7067: la $2, sym_2_7067
+.globl sym_2_7068
+sym_2_7068: la $2, sym_2_7068
+.globl sym_2_7069
+sym_2_7069: la $2, sym_2_7069
+.globl sym_2_7070
+sym_2_7070: la $2, sym_2_7070
+.globl sym_2_7071
+sym_2_7071: la $2, sym_2_7071
+.globl sym_2_7072
+sym_2_7072: la $2, sym_2_7072
+.globl sym_2_7073
+sym_2_7073: la $2, sym_2_7073
+.globl sym_2_7074
+sym_2_7074: la $2, sym_2_7074
+.globl sym_2_7075
+sym_2_7075: la $2, sym_2_7075
+.globl sym_2_7076
+sym_2_7076: la $2, sym_2_7076
+.globl sym_2_7077
+sym_2_7077: la $2, sym_2_7077
+.globl sym_2_7078
+sym_2_7078: la $2, sym_2_7078
+.globl sym_2_7079
+sym_2_7079: la $2, sym_2_7079
+.globl sym_2_7080
+sym_2_7080: la $2, sym_2_7080
+.globl sym_2_7081
+sym_2_7081: la $2, sym_2_7081
+.globl sym_2_7082
+sym_2_7082: la $2, sym_2_7082
+.globl sym_2_7083
+sym_2_7083: la $2, sym_2_7083
+.globl sym_2_7084
+sym_2_7084: la $2, sym_2_7084
+.globl sym_2_7085
+sym_2_7085: la $2, sym_2_7085
+.globl sym_2_7086
+sym_2_7086: la $2, sym_2_7086
+.globl sym_2_7087
+sym_2_7087: la $2, sym_2_7087
+.globl sym_2_7088
+sym_2_7088: la $2, sym_2_7088
+.globl sym_2_7089
+sym_2_7089: la $2, sym_2_7089
+.globl sym_2_7090
+sym_2_7090: la $2, sym_2_7090
+.globl sym_2_7091
+sym_2_7091: la $2, sym_2_7091
+.globl sym_2_7092
+sym_2_7092: la $2, sym_2_7092
+.globl sym_2_7093
+sym_2_7093: la $2, sym_2_7093
+.globl sym_2_7094
+sym_2_7094: la $2, sym_2_7094
+.globl sym_2_7095
+sym_2_7095: la $2, sym_2_7095
+.globl sym_2_7096
+sym_2_7096: la $2, sym_2_7096
+.globl sym_2_7097
+sym_2_7097: la $2, sym_2_7097
+.globl sym_2_7098
+sym_2_7098: la $2, sym_2_7098
+.globl sym_2_7099
+sym_2_7099: la $2, sym_2_7099
+.globl sym_2_7100
+sym_2_7100: la $2, sym_2_7100
+.globl sym_2_7101
+sym_2_7101: la $2, sym_2_7101
+.globl sym_2_7102
+sym_2_7102: la $2, sym_2_7102
+.globl sym_2_7103
+sym_2_7103: la $2, sym_2_7103
+.globl sym_2_7104
+sym_2_7104: la $2, sym_2_7104
+.globl sym_2_7105
+sym_2_7105: la $2, sym_2_7105
+.globl sym_2_7106
+sym_2_7106: la $2, sym_2_7106
+.globl sym_2_7107
+sym_2_7107: la $2, sym_2_7107
+.globl sym_2_7108
+sym_2_7108: la $2, sym_2_7108
+.globl sym_2_7109
+sym_2_7109: la $2, sym_2_7109
+.globl sym_2_7110
+sym_2_7110: la $2, sym_2_7110
+.globl sym_2_7111
+sym_2_7111: la $2, sym_2_7111
+.globl sym_2_7112
+sym_2_7112: la $2, sym_2_7112
+.globl sym_2_7113
+sym_2_7113: la $2, sym_2_7113
+.globl sym_2_7114
+sym_2_7114: la $2, sym_2_7114
+.globl sym_2_7115
+sym_2_7115: la $2, sym_2_7115
+.globl sym_2_7116
+sym_2_7116: la $2, sym_2_7116
+.globl sym_2_7117
+sym_2_7117: la $2, sym_2_7117
+.globl sym_2_7118
+sym_2_7118: la $2, sym_2_7118
+.globl sym_2_7119
+sym_2_7119: la $2, sym_2_7119
+.globl sym_2_7120
+sym_2_7120: la $2, sym_2_7120
+.globl sym_2_7121
+sym_2_7121: la $2, sym_2_7121
+.globl sym_2_7122
+sym_2_7122: la $2, sym_2_7122
+.globl sym_2_7123
+sym_2_7123: la $2, sym_2_7123
+.globl sym_2_7124
+sym_2_7124: la $2, sym_2_7124
+.globl sym_2_7125
+sym_2_7125: la $2, sym_2_7125
+.globl sym_2_7126
+sym_2_7126: la $2, sym_2_7126
+.globl sym_2_7127
+sym_2_7127: la $2, sym_2_7127
+.globl sym_2_7128
+sym_2_7128: la $2, sym_2_7128
+.globl sym_2_7129
+sym_2_7129: la $2, sym_2_7129
+.globl sym_2_7130
+sym_2_7130: la $2, sym_2_7130
+.globl sym_2_7131
+sym_2_7131: la $2, sym_2_7131
+.globl sym_2_7132
+sym_2_7132: la $2, sym_2_7132
+.globl sym_2_7133
+sym_2_7133: la $2, sym_2_7133
+.globl sym_2_7134
+sym_2_7134: la $2, sym_2_7134
+.globl sym_2_7135
+sym_2_7135: la $2, sym_2_7135
+.globl sym_2_7136
+sym_2_7136: la $2, sym_2_7136
+.globl sym_2_7137
+sym_2_7137: la $2, sym_2_7137
+.globl sym_2_7138
+sym_2_7138: la $2, sym_2_7138
+.globl sym_2_7139
+sym_2_7139: la $2, sym_2_7139
+.globl sym_2_7140
+sym_2_7140: la $2, sym_2_7140
+.globl sym_2_7141
+sym_2_7141: la $2, sym_2_7141
+.globl sym_2_7142
+sym_2_7142: la $2, sym_2_7142
+.globl sym_2_7143
+sym_2_7143: la $2, sym_2_7143
+.globl sym_2_7144
+sym_2_7144: la $2, sym_2_7144
+.globl sym_2_7145
+sym_2_7145: la $2, sym_2_7145
+.globl sym_2_7146
+sym_2_7146: la $2, sym_2_7146
+.globl sym_2_7147
+sym_2_7147: la $2, sym_2_7147
+.globl sym_2_7148
+sym_2_7148: la $2, sym_2_7148
+.globl sym_2_7149
+sym_2_7149: la $2, sym_2_7149
+.globl sym_2_7150
+sym_2_7150: la $2, sym_2_7150
+.globl sym_2_7151
+sym_2_7151: la $2, sym_2_7151
+.globl sym_2_7152
+sym_2_7152: la $2, sym_2_7152
+.globl sym_2_7153
+sym_2_7153: la $2, sym_2_7153
+.globl sym_2_7154
+sym_2_7154: la $2, sym_2_7154
+.globl sym_2_7155
+sym_2_7155: la $2, sym_2_7155
+.globl sym_2_7156
+sym_2_7156: la $2, sym_2_7156
+.globl sym_2_7157
+sym_2_7157: la $2, sym_2_7157
+.globl sym_2_7158
+sym_2_7158: la $2, sym_2_7158
+.globl sym_2_7159
+sym_2_7159: la $2, sym_2_7159
+.globl sym_2_7160
+sym_2_7160: la $2, sym_2_7160
+.globl sym_2_7161
+sym_2_7161: la $2, sym_2_7161
+.globl sym_2_7162
+sym_2_7162: la $2, sym_2_7162
+.globl sym_2_7163
+sym_2_7163: la $2, sym_2_7163
+.globl sym_2_7164
+sym_2_7164: la $2, sym_2_7164
+.globl sym_2_7165
+sym_2_7165: la $2, sym_2_7165
+.globl sym_2_7166
+sym_2_7166: la $2, sym_2_7166
+.globl sym_2_7167
+sym_2_7167: la $2, sym_2_7167
+.globl sym_2_7168
+sym_2_7168: la $2, sym_2_7168
+.globl sym_2_7169
+sym_2_7169: la $2, sym_2_7169
+.globl sym_2_7170
+sym_2_7170: la $2, sym_2_7170
+.globl sym_2_7171
+sym_2_7171: la $2, sym_2_7171
+.globl sym_2_7172
+sym_2_7172: la $2, sym_2_7172
+.globl sym_2_7173
+sym_2_7173: la $2, sym_2_7173
+.globl sym_2_7174
+sym_2_7174: la $2, sym_2_7174
+.globl sym_2_7175
+sym_2_7175: la $2, sym_2_7175
+.globl sym_2_7176
+sym_2_7176: la $2, sym_2_7176
+.globl sym_2_7177
+sym_2_7177: la $2, sym_2_7177
+.globl sym_2_7178
+sym_2_7178: la $2, sym_2_7178
+.globl sym_2_7179
+sym_2_7179: la $2, sym_2_7179
+.globl sym_2_7180
+sym_2_7180: la $2, sym_2_7180
+.globl sym_2_7181
+sym_2_7181: la $2, sym_2_7181
+.globl sym_2_7182
+sym_2_7182: la $2, sym_2_7182
+.globl sym_2_7183
+sym_2_7183: la $2, sym_2_7183
+.globl sym_2_7184
+sym_2_7184: la $2, sym_2_7184
+.globl sym_2_7185
+sym_2_7185: la $2, sym_2_7185
+.globl sym_2_7186
+sym_2_7186: la $2, sym_2_7186
+.globl sym_2_7187
+sym_2_7187: la $2, sym_2_7187
+.globl sym_2_7188
+sym_2_7188: la $2, sym_2_7188
+.globl sym_2_7189
+sym_2_7189: la $2, sym_2_7189
+.globl sym_2_7190
+sym_2_7190: la $2, sym_2_7190
+.globl sym_2_7191
+sym_2_7191: la $2, sym_2_7191
+.globl sym_2_7192
+sym_2_7192: la $2, sym_2_7192
+.globl sym_2_7193
+sym_2_7193: la $2, sym_2_7193
+.globl sym_2_7194
+sym_2_7194: la $2, sym_2_7194
+.globl sym_2_7195
+sym_2_7195: la $2, sym_2_7195
+.globl sym_2_7196
+sym_2_7196: la $2, sym_2_7196
+.globl sym_2_7197
+sym_2_7197: la $2, sym_2_7197
+.globl sym_2_7198
+sym_2_7198: la $2, sym_2_7198
+.globl sym_2_7199
+sym_2_7199: la $2, sym_2_7199
+.globl sym_2_7200
+sym_2_7200: la $2, sym_2_7200
+.globl sym_2_7201
+sym_2_7201: la $2, sym_2_7201
+.globl sym_2_7202
+sym_2_7202: la $2, sym_2_7202
+.globl sym_2_7203
+sym_2_7203: la $2, sym_2_7203
+.globl sym_2_7204
+sym_2_7204: la $2, sym_2_7204
+.globl sym_2_7205
+sym_2_7205: la $2, sym_2_7205
+.globl sym_2_7206
+sym_2_7206: la $2, sym_2_7206
+.globl sym_2_7207
+sym_2_7207: la $2, sym_2_7207
+.globl sym_2_7208
+sym_2_7208: la $2, sym_2_7208
+.globl sym_2_7209
+sym_2_7209: la $2, sym_2_7209
+.globl sym_2_7210
+sym_2_7210: la $2, sym_2_7210
+.globl sym_2_7211
+sym_2_7211: la $2, sym_2_7211
+.globl sym_2_7212
+sym_2_7212: la $2, sym_2_7212
+.globl sym_2_7213
+sym_2_7213: la $2, sym_2_7213
+.globl sym_2_7214
+sym_2_7214: la $2, sym_2_7214
+.globl sym_2_7215
+sym_2_7215: la $2, sym_2_7215
+.globl sym_2_7216
+sym_2_7216: la $2, sym_2_7216
+.globl sym_2_7217
+sym_2_7217: la $2, sym_2_7217
+.globl sym_2_7218
+sym_2_7218: la $2, sym_2_7218
+.globl sym_2_7219
+sym_2_7219: la $2, sym_2_7219
+.globl sym_2_7220
+sym_2_7220: la $2, sym_2_7220
+.globl sym_2_7221
+sym_2_7221: la $2, sym_2_7221
+.globl sym_2_7222
+sym_2_7222: la $2, sym_2_7222
+.globl sym_2_7223
+sym_2_7223: la $2, sym_2_7223
+.globl sym_2_7224
+sym_2_7224: la $2, sym_2_7224
+.globl sym_2_7225
+sym_2_7225: la $2, sym_2_7225
+.globl sym_2_7226
+sym_2_7226: la $2, sym_2_7226
+.globl sym_2_7227
+sym_2_7227: la $2, sym_2_7227
+.globl sym_2_7228
+sym_2_7228: la $2, sym_2_7228
+.globl sym_2_7229
+sym_2_7229: la $2, sym_2_7229
+.globl sym_2_7230
+sym_2_7230: la $2, sym_2_7230
+.globl sym_2_7231
+sym_2_7231: la $2, sym_2_7231
+.globl sym_2_7232
+sym_2_7232: la $2, sym_2_7232
+.globl sym_2_7233
+sym_2_7233: la $2, sym_2_7233
+.globl sym_2_7234
+sym_2_7234: la $2, sym_2_7234
+.globl sym_2_7235
+sym_2_7235: la $2, sym_2_7235
+.globl sym_2_7236
+sym_2_7236: la $2, sym_2_7236
+.globl sym_2_7237
+sym_2_7237: la $2, sym_2_7237
+.globl sym_2_7238
+sym_2_7238: la $2, sym_2_7238
+.globl sym_2_7239
+sym_2_7239: la $2, sym_2_7239
+.globl sym_2_7240
+sym_2_7240: la $2, sym_2_7240
+.globl sym_2_7241
+sym_2_7241: la $2, sym_2_7241
+.globl sym_2_7242
+sym_2_7242: la $2, sym_2_7242
+.globl sym_2_7243
+sym_2_7243: la $2, sym_2_7243
+.globl sym_2_7244
+sym_2_7244: la $2, sym_2_7244
+.globl sym_2_7245
+sym_2_7245: la $2, sym_2_7245
+.globl sym_2_7246
+sym_2_7246: la $2, sym_2_7246
+.globl sym_2_7247
+sym_2_7247: la $2, sym_2_7247
+.globl sym_2_7248
+sym_2_7248: la $2, sym_2_7248
+.globl sym_2_7249
+sym_2_7249: la $2, sym_2_7249
+.globl sym_2_7250
+sym_2_7250: la $2, sym_2_7250
+.globl sym_2_7251
+sym_2_7251: la $2, sym_2_7251
+.globl sym_2_7252
+sym_2_7252: la $2, sym_2_7252
+.globl sym_2_7253
+sym_2_7253: la $2, sym_2_7253
+.globl sym_2_7254
+sym_2_7254: la $2, sym_2_7254
+.globl sym_2_7255
+sym_2_7255: la $2, sym_2_7255
+.globl sym_2_7256
+sym_2_7256: la $2, sym_2_7256
+.globl sym_2_7257
+sym_2_7257: la $2, sym_2_7257
+.globl sym_2_7258
+sym_2_7258: la $2, sym_2_7258
+.globl sym_2_7259
+sym_2_7259: la $2, sym_2_7259
+.globl sym_2_7260
+sym_2_7260: la $2, sym_2_7260
+.globl sym_2_7261
+sym_2_7261: la $2, sym_2_7261
+.globl sym_2_7262
+sym_2_7262: la $2, sym_2_7262
+.globl sym_2_7263
+sym_2_7263: la $2, sym_2_7263
+.globl sym_2_7264
+sym_2_7264: la $2, sym_2_7264
+.globl sym_2_7265
+sym_2_7265: la $2, sym_2_7265
+.globl sym_2_7266
+sym_2_7266: la $2, sym_2_7266
+.globl sym_2_7267
+sym_2_7267: la $2, sym_2_7267
+.globl sym_2_7268
+sym_2_7268: la $2, sym_2_7268
+.globl sym_2_7269
+sym_2_7269: la $2, sym_2_7269
+.globl sym_2_7270
+sym_2_7270: la $2, sym_2_7270
+.globl sym_2_7271
+sym_2_7271: la $2, sym_2_7271
+.globl sym_2_7272
+sym_2_7272: la $2, sym_2_7272
+.globl sym_2_7273
+sym_2_7273: la $2, sym_2_7273
+.globl sym_2_7274
+sym_2_7274: la $2, sym_2_7274
+.globl sym_2_7275
+sym_2_7275: la $2, sym_2_7275
+.globl sym_2_7276
+sym_2_7276: la $2, sym_2_7276
+.globl sym_2_7277
+sym_2_7277: la $2, sym_2_7277
+.globl sym_2_7278
+sym_2_7278: la $2, sym_2_7278
+.globl sym_2_7279
+sym_2_7279: la $2, sym_2_7279
+.globl sym_2_7280
+sym_2_7280: la $2, sym_2_7280
+.globl sym_2_7281
+sym_2_7281: la $2, sym_2_7281
+.globl sym_2_7282
+sym_2_7282: la $2, sym_2_7282
+.globl sym_2_7283
+sym_2_7283: la $2, sym_2_7283
+.globl sym_2_7284
+sym_2_7284: la $2, sym_2_7284
+.globl sym_2_7285
+sym_2_7285: la $2, sym_2_7285
+.globl sym_2_7286
+sym_2_7286: la $2, sym_2_7286
+.globl sym_2_7287
+sym_2_7287: la $2, sym_2_7287
+.globl sym_2_7288
+sym_2_7288: la $2, sym_2_7288
+.globl sym_2_7289
+sym_2_7289: la $2, sym_2_7289
+.globl sym_2_7290
+sym_2_7290: la $2, sym_2_7290
+.globl sym_2_7291
+sym_2_7291: la $2, sym_2_7291
+.globl sym_2_7292
+sym_2_7292: la $2, sym_2_7292
+.globl sym_2_7293
+sym_2_7293: la $2, sym_2_7293
+.globl sym_2_7294
+sym_2_7294: la $2, sym_2_7294
+.globl sym_2_7295
+sym_2_7295: la $2, sym_2_7295
+.globl sym_2_7296
+sym_2_7296: la $2, sym_2_7296
+.globl sym_2_7297
+sym_2_7297: la $2, sym_2_7297
+.globl sym_2_7298
+sym_2_7298: la $2, sym_2_7298
+.globl sym_2_7299
+sym_2_7299: la $2, sym_2_7299
+.globl sym_2_7300
+sym_2_7300: la $2, sym_2_7300
+.globl sym_2_7301
+sym_2_7301: la $2, sym_2_7301
+.globl sym_2_7302
+sym_2_7302: la $2, sym_2_7302
+.globl sym_2_7303
+sym_2_7303: la $2, sym_2_7303
+.globl sym_2_7304
+sym_2_7304: la $2, sym_2_7304
+.globl sym_2_7305
+sym_2_7305: la $2, sym_2_7305
+.globl sym_2_7306
+sym_2_7306: la $2, sym_2_7306
+.globl sym_2_7307
+sym_2_7307: la $2, sym_2_7307
+.globl sym_2_7308
+sym_2_7308: la $2, sym_2_7308
+.globl sym_2_7309
+sym_2_7309: la $2, sym_2_7309
+.globl sym_2_7310
+sym_2_7310: la $2, sym_2_7310
+.globl sym_2_7311
+sym_2_7311: la $2, sym_2_7311
+.globl sym_2_7312
+sym_2_7312: la $2, sym_2_7312
+.globl sym_2_7313
+sym_2_7313: la $2, sym_2_7313
+.globl sym_2_7314
+sym_2_7314: la $2, sym_2_7314
+.globl sym_2_7315
+sym_2_7315: la $2, sym_2_7315
+.globl sym_2_7316
+sym_2_7316: la $2, sym_2_7316
+.globl sym_2_7317
+sym_2_7317: la $2, sym_2_7317
+.globl sym_2_7318
+sym_2_7318: la $2, sym_2_7318
+.globl sym_2_7319
+sym_2_7319: la $2, sym_2_7319
+.globl sym_2_7320
+sym_2_7320: la $2, sym_2_7320
+.globl sym_2_7321
+sym_2_7321: la $2, sym_2_7321
+.globl sym_2_7322
+sym_2_7322: la $2, sym_2_7322
+.globl sym_2_7323
+sym_2_7323: la $2, sym_2_7323
+.globl sym_2_7324
+sym_2_7324: la $2, sym_2_7324
+.globl sym_2_7325
+sym_2_7325: la $2, sym_2_7325
+.globl sym_2_7326
+sym_2_7326: la $2, sym_2_7326
+.globl sym_2_7327
+sym_2_7327: la $2, sym_2_7327
+.globl sym_2_7328
+sym_2_7328: la $2, sym_2_7328
+.globl sym_2_7329
+sym_2_7329: la $2, sym_2_7329
+.globl sym_2_7330
+sym_2_7330: la $2, sym_2_7330
+.globl sym_2_7331
+sym_2_7331: la $2, sym_2_7331
+.globl sym_2_7332
+sym_2_7332: la $2, sym_2_7332
+.globl sym_2_7333
+sym_2_7333: la $2, sym_2_7333
+.globl sym_2_7334
+sym_2_7334: la $2, sym_2_7334
+.globl sym_2_7335
+sym_2_7335: la $2, sym_2_7335
+.globl sym_2_7336
+sym_2_7336: la $2, sym_2_7336
+.globl sym_2_7337
+sym_2_7337: la $2, sym_2_7337
+.globl sym_2_7338
+sym_2_7338: la $2, sym_2_7338
+.globl sym_2_7339
+sym_2_7339: la $2, sym_2_7339
+.globl sym_2_7340
+sym_2_7340: la $2, sym_2_7340
+.globl sym_2_7341
+sym_2_7341: la $2, sym_2_7341
+.globl sym_2_7342
+sym_2_7342: la $2, sym_2_7342
+.globl sym_2_7343
+sym_2_7343: la $2, sym_2_7343
+.globl sym_2_7344
+sym_2_7344: la $2, sym_2_7344
+.globl sym_2_7345
+sym_2_7345: la $2, sym_2_7345
+.globl sym_2_7346
+sym_2_7346: la $2, sym_2_7346
+.globl sym_2_7347
+sym_2_7347: la $2, sym_2_7347
+.globl sym_2_7348
+sym_2_7348: la $2, sym_2_7348
+.globl sym_2_7349
+sym_2_7349: la $2, sym_2_7349
+.globl sym_2_7350
+sym_2_7350: la $2, sym_2_7350
+.globl sym_2_7351
+sym_2_7351: la $2, sym_2_7351
+.globl sym_2_7352
+sym_2_7352: la $2, sym_2_7352
+.globl sym_2_7353
+sym_2_7353: la $2, sym_2_7353
+.globl sym_2_7354
+sym_2_7354: la $2, sym_2_7354
+.globl sym_2_7355
+sym_2_7355: la $2, sym_2_7355
+.globl sym_2_7356
+sym_2_7356: la $2, sym_2_7356
+.globl sym_2_7357
+sym_2_7357: la $2, sym_2_7357
+.globl sym_2_7358
+sym_2_7358: la $2, sym_2_7358
+.globl sym_2_7359
+sym_2_7359: la $2, sym_2_7359
+.globl sym_2_7360
+sym_2_7360: la $2, sym_2_7360
+.globl sym_2_7361
+sym_2_7361: la $2, sym_2_7361
+.globl sym_2_7362
+sym_2_7362: la $2, sym_2_7362
+.globl sym_2_7363
+sym_2_7363: la $2, sym_2_7363
+.globl sym_2_7364
+sym_2_7364: la $2, sym_2_7364
+.globl sym_2_7365
+sym_2_7365: la $2, sym_2_7365
+.globl sym_2_7366
+sym_2_7366: la $2, sym_2_7366
+.globl sym_2_7367
+sym_2_7367: la $2, sym_2_7367
+.globl sym_2_7368
+sym_2_7368: la $2, sym_2_7368
+.globl sym_2_7369
+sym_2_7369: la $2, sym_2_7369
+.globl sym_2_7370
+sym_2_7370: la $2, sym_2_7370
+.globl sym_2_7371
+sym_2_7371: la $2, sym_2_7371
+.globl sym_2_7372
+sym_2_7372: la $2, sym_2_7372
+.globl sym_2_7373
+sym_2_7373: la $2, sym_2_7373
+.globl sym_2_7374
+sym_2_7374: la $2, sym_2_7374
+.globl sym_2_7375
+sym_2_7375: la $2, sym_2_7375
+.globl sym_2_7376
+sym_2_7376: la $2, sym_2_7376
+.globl sym_2_7377
+sym_2_7377: la $2, sym_2_7377
+.globl sym_2_7378
+sym_2_7378: la $2, sym_2_7378
+.globl sym_2_7379
+sym_2_7379: la $2, sym_2_7379
+.globl sym_2_7380
+sym_2_7380: la $2, sym_2_7380
+.globl sym_2_7381
+sym_2_7381: la $2, sym_2_7381
+.globl sym_2_7382
+sym_2_7382: la $2, sym_2_7382
+.globl sym_2_7383
+sym_2_7383: la $2, sym_2_7383
+.globl sym_2_7384
+sym_2_7384: la $2, sym_2_7384
+.globl sym_2_7385
+sym_2_7385: la $2, sym_2_7385
+.globl sym_2_7386
+sym_2_7386: la $2, sym_2_7386
+.globl sym_2_7387
+sym_2_7387: la $2, sym_2_7387
+.globl sym_2_7388
+sym_2_7388: la $2, sym_2_7388
+.globl sym_2_7389
+sym_2_7389: la $2, sym_2_7389
+.globl sym_2_7390
+sym_2_7390: la $2, sym_2_7390
+.globl sym_2_7391
+sym_2_7391: la $2, sym_2_7391
+.globl sym_2_7392
+sym_2_7392: la $2, sym_2_7392
+.globl sym_2_7393
+sym_2_7393: la $2, sym_2_7393
+.globl sym_2_7394
+sym_2_7394: la $2, sym_2_7394
+.globl sym_2_7395
+sym_2_7395: la $2, sym_2_7395
+.globl sym_2_7396
+sym_2_7396: la $2, sym_2_7396
+.globl sym_2_7397
+sym_2_7397: la $2, sym_2_7397
+.globl sym_2_7398
+sym_2_7398: la $2, sym_2_7398
+.globl sym_2_7399
+sym_2_7399: la $2, sym_2_7399
+.globl sym_2_7400
+sym_2_7400: la $2, sym_2_7400
+.globl sym_2_7401
+sym_2_7401: la $2, sym_2_7401
+.globl sym_2_7402
+sym_2_7402: la $2, sym_2_7402
+.globl sym_2_7403
+sym_2_7403: la $2, sym_2_7403
+.globl sym_2_7404
+sym_2_7404: la $2, sym_2_7404
+.globl sym_2_7405
+sym_2_7405: la $2, sym_2_7405
+.globl sym_2_7406
+sym_2_7406: la $2, sym_2_7406
+.globl sym_2_7407
+sym_2_7407: la $2, sym_2_7407
+.globl sym_2_7408
+sym_2_7408: la $2, sym_2_7408
+.globl sym_2_7409
+sym_2_7409: la $2, sym_2_7409
+.globl sym_2_7410
+sym_2_7410: la $2, sym_2_7410
+.globl sym_2_7411
+sym_2_7411: la $2, sym_2_7411
+.globl sym_2_7412
+sym_2_7412: la $2, sym_2_7412
+.globl sym_2_7413
+sym_2_7413: la $2, sym_2_7413
+.globl sym_2_7414
+sym_2_7414: la $2, sym_2_7414
+.globl sym_2_7415
+sym_2_7415: la $2, sym_2_7415
+.globl sym_2_7416
+sym_2_7416: la $2, sym_2_7416
+.globl sym_2_7417
+sym_2_7417: la $2, sym_2_7417
+.globl sym_2_7418
+sym_2_7418: la $2, sym_2_7418
+.globl sym_2_7419
+sym_2_7419: la $2, sym_2_7419
+.globl sym_2_7420
+sym_2_7420: la $2, sym_2_7420
+.globl sym_2_7421
+sym_2_7421: la $2, sym_2_7421
+.globl sym_2_7422
+sym_2_7422: la $2, sym_2_7422
+.globl sym_2_7423
+sym_2_7423: la $2, sym_2_7423
+.globl sym_2_7424
+sym_2_7424: la $2, sym_2_7424
+.globl sym_2_7425
+sym_2_7425: la $2, sym_2_7425
+.globl sym_2_7426
+sym_2_7426: la $2, sym_2_7426
+.globl sym_2_7427
+sym_2_7427: la $2, sym_2_7427
+.globl sym_2_7428
+sym_2_7428: la $2, sym_2_7428
+.globl sym_2_7429
+sym_2_7429: la $2, sym_2_7429
+.globl sym_2_7430
+sym_2_7430: la $2, sym_2_7430
+.globl sym_2_7431
+sym_2_7431: la $2, sym_2_7431
+.globl sym_2_7432
+sym_2_7432: la $2, sym_2_7432
+.globl sym_2_7433
+sym_2_7433: la $2, sym_2_7433
+.globl sym_2_7434
+sym_2_7434: la $2, sym_2_7434
+.globl sym_2_7435
+sym_2_7435: la $2, sym_2_7435
+.globl sym_2_7436
+sym_2_7436: la $2, sym_2_7436
+.globl sym_2_7437
+sym_2_7437: la $2, sym_2_7437
+.globl sym_2_7438
+sym_2_7438: la $2, sym_2_7438
+.globl sym_2_7439
+sym_2_7439: la $2, sym_2_7439
+.globl sym_2_7440
+sym_2_7440: la $2, sym_2_7440
+.globl sym_2_7441
+sym_2_7441: la $2, sym_2_7441
+.globl sym_2_7442
+sym_2_7442: la $2, sym_2_7442
+.globl sym_2_7443
+sym_2_7443: la $2, sym_2_7443
+.globl sym_2_7444
+sym_2_7444: la $2, sym_2_7444
+.globl sym_2_7445
+sym_2_7445: la $2, sym_2_7445
+.globl sym_2_7446
+sym_2_7446: la $2, sym_2_7446
+.globl sym_2_7447
+sym_2_7447: la $2, sym_2_7447
+.globl sym_2_7448
+sym_2_7448: la $2, sym_2_7448
+.globl sym_2_7449
+sym_2_7449: la $2, sym_2_7449
+.globl sym_2_7450
+sym_2_7450: la $2, sym_2_7450
+.globl sym_2_7451
+sym_2_7451: la $2, sym_2_7451
+.globl sym_2_7452
+sym_2_7452: la $2, sym_2_7452
+.globl sym_2_7453
+sym_2_7453: la $2, sym_2_7453
+.globl sym_2_7454
+sym_2_7454: la $2, sym_2_7454
+.globl sym_2_7455
+sym_2_7455: la $2, sym_2_7455
+.globl sym_2_7456
+sym_2_7456: la $2, sym_2_7456
+.globl sym_2_7457
+sym_2_7457: la $2, sym_2_7457
+.globl sym_2_7458
+sym_2_7458: la $2, sym_2_7458
+.globl sym_2_7459
+sym_2_7459: la $2, sym_2_7459
+.globl sym_2_7460
+sym_2_7460: la $2, sym_2_7460
+.globl sym_2_7461
+sym_2_7461: la $2, sym_2_7461
+.globl sym_2_7462
+sym_2_7462: la $2, sym_2_7462
+.globl sym_2_7463
+sym_2_7463: la $2, sym_2_7463
+.globl sym_2_7464
+sym_2_7464: la $2, sym_2_7464
+.globl sym_2_7465
+sym_2_7465: la $2, sym_2_7465
+.globl sym_2_7466
+sym_2_7466: la $2, sym_2_7466
+.globl sym_2_7467
+sym_2_7467: la $2, sym_2_7467
+.globl sym_2_7468
+sym_2_7468: la $2, sym_2_7468
+.globl sym_2_7469
+sym_2_7469: la $2, sym_2_7469
+.globl sym_2_7470
+sym_2_7470: la $2, sym_2_7470
+.globl sym_2_7471
+sym_2_7471: la $2, sym_2_7471
+.globl sym_2_7472
+sym_2_7472: la $2, sym_2_7472
+.globl sym_2_7473
+sym_2_7473: la $2, sym_2_7473
+.globl sym_2_7474
+sym_2_7474: la $2, sym_2_7474
+.globl sym_2_7475
+sym_2_7475: la $2, sym_2_7475
+.globl sym_2_7476
+sym_2_7476: la $2, sym_2_7476
+.globl sym_2_7477
+sym_2_7477: la $2, sym_2_7477
+.globl sym_2_7478
+sym_2_7478: la $2, sym_2_7478
+.globl sym_2_7479
+sym_2_7479: la $2, sym_2_7479
+.globl sym_2_7480
+sym_2_7480: la $2, sym_2_7480
+.globl sym_2_7481
+sym_2_7481: la $2, sym_2_7481
+.globl sym_2_7482
+sym_2_7482: la $2, sym_2_7482
+.globl sym_2_7483
+sym_2_7483: la $2, sym_2_7483
+.globl sym_2_7484
+sym_2_7484: la $2, sym_2_7484
+.globl sym_2_7485
+sym_2_7485: la $2, sym_2_7485
+.globl sym_2_7486
+sym_2_7486: la $2, sym_2_7486
+.globl sym_2_7487
+sym_2_7487: la $2, sym_2_7487
+.globl sym_2_7488
+sym_2_7488: la $2, sym_2_7488
+.globl sym_2_7489
+sym_2_7489: la $2, sym_2_7489
+.globl sym_2_7490
+sym_2_7490: la $2, sym_2_7490
+.globl sym_2_7491
+sym_2_7491: la $2, sym_2_7491
+.globl sym_2_7492
+sym_2_7492: la $2, sym_2_7492
+.globl sym_2_7493
+sym_2_7493: la $2, sym_2_7493
+.globl sym_2_7494
+sym_2_7494: la $2, sym_2_7494
+.globl sym_2_7495
+sym_2_7495: la $2, sym_2_7495
+.globl sym_2_7496
+sym_2_7496: la $2, sym_2_7496
+.globl sym_2_7497
+sym_2_7497: la $2, sym_2_7497
+.globl sym_2_7498
+sym_2_7498: la $2, sym_2_7498
+.globl sym_2_7499
+sym_2_7499: la $2, sym_2_7499
+.globl sym_2_7500
+sym_2_7500: la $2, sym_2_7500
+.globl sym_2_7501
+sym_2_7501: la $2, sym_2_7501
+.globl sym_2_7502
+sym_2_7502: la $2, sym_2_7502
+.globl sym_2_7503
+sym_2_7503: la $2, sym_2_7503
+.globl sym_2_7504
+sym_2_7504: la $2, sym_2_7504
+.globl sym_2_7505
+sym_2_7505: la $2, sym_2_7505
+.globl sym_2_7506
+sym_2_7506: la $2, sym_2_7506
+.globl sym_2_7507
+sym_2_7507: la $2, sym_2_7507
+.globl sym_2_7508
+sym_2_7508: la $2, sym_2_7508
+.globl sym_2_7509
+sym_2_7509: la $2, sym_2_7509
+.globl sym_2_7510
+sym_2_7510: la $2, sym_2_7510
+.globl sym_2_7511
+sym_2_7511: la $2, sym_2_7511
+.globl sym_2_7512
+sym_2_7512: la $2, sym_2_7512
+.globl sym_2_7513
+sym_2_7513: la $2, sym_2_7513
+.globl sym_2_7514
+sym_2_7514: la $2, sym_2_7514
+.globl sym_2_7515
+sym_2_7515: la $2, sym_2_7515
+.globl sym_2_7516
+sym_2_7516: la $2, sym_2_7516
+.globl sym_2_7517
+sym_2_7517: la $2, sym_2_7517
+.globl sym_2_7518
+sym_2_7518: la $2, sym_2_7518
+.globl sym_2_7519
+sym_2_7519: la $2, sym_2_7519
+.globl sym_2_7520
+sym_2_7520: la $2, sym_2_7520
+.globl sym_2_7521
+sym_2_7521: la $2, sym_2_7521
+.globl sym_2_7522
+sym_2_7522: la $2, sym_2_7522
+.globl sym_2_7523
+sym_2_7523: la $2, sym_2_7523
+.globl sym_2_7524
+sym_2_7524: la $2, sym_2_7524
+.globl sym_2_7525
+sym_2_7525: la $2, sym_2_7525
+.globl sym_2_7526
+sym_2_7526: la $2, sym_2_7526
+.globl sym_2_7527
+sym_2_7527: la $2, sym_2_7527
+.globl sym_2_7528
+sym_2_7528: la $2, sym_2_7528
+.globl sym_2_7529
+sym_2_7529: la $2, sym_2_7529
+.globl sym_2_7530
+sym_2_7530: la $2, sym_2_7530
+.globl sym_2_7531
+sym_2_7531: la $2, sym_2_7531
+.globl sym_2_7532
+sym_2_7532: la $2, sym_2_7532
+.globl sym_2_7533
+sym_2_7533: la $2, sym_2_7533
+.globl sym_2_7534
+sym_2_7534: la $2, sym_2_7534
+.globl sym_2_7535
+sym_2_7535: la $2, sym_2_7535
+.globl sym_2_7536
+sym_2_7536: la $2, sym_2_7536
+.globl sym_2_7537
+sym_2_7537: la $2, sym_2_7537
+.globl sym_2_7538
+sym_2_7538: la $2, sym_2_7538
+.globl sym_2_7539
+sym_2_7539: la $2, sym_2_7539
+.globl sym_2_7540
+sym_2_7540: la $2, sym_2_7540
+.globl sym_2_7541
+sym_2_7541: la $2, sym_2_7541
+.globl sym_2_7542
+sym_2_7542: la $2, sym_2_7542
+.globl sym_2_7543
+sym_2_7543: la $2, sym_2_7543
+.globl sym_2_7544
+sym_2_7544: la $2, sym_2_7544
+.globl sym_2_7545
+sym_2_7545: la $2, sym_2_7545
+.globl sym_2_7546
+sym_2_7546: la $2, sym_2_7546
+.globl sym_2_7547
+sym_2_7547: la $2, sym_2_7547
+.globl sym_2_7548
+sym_2_7548: la $2, sym_2_7548
+.globl sym_2_7549
+sym_2_7549: la $2, sym_2_7549
+.globl sym_2_7550
+sym_2_7550: la $2, sym_2_7550
+.globl sym_2_7551
+sym_2_7551: la $2, sym_2_7551
+.globl sym_2_7552
+sym_2_7552: la $2, sym_2_7552
+.globl sym_2_7553
+sym_2_7553: la $2, sym_2_7553
+.globl sym_2_7554
+sym_2_7554: la $2, sym_2_7554
+.globl sym_2_7555
+sym_2_7555: la $2, sym_2_7555
+.globl sym_2_7556
+sym_2_7556: la $2, sym_2_7556
+.globl sym_2_7557
+sym_2_7557: la $2, sym_2_7557
+.globl sym_2_7558
+sym_2_7558: la $2, sym_2_7558
+.globl sym_2_7559
+sym_2_7559: la $2, sym_2_7559
+.globl sym_2_7560
+sym_2_7560: la $2, sym_2_7560
+.globl sym_2_7561
+sym_2_7561: la $2, sym_2_7561
+.globl sym_2_7562
+sym_2_7562: la $2, sym_2_7562
+.globl sym_2_7563
+sym_2_7563: la $2, sym_2_7563
+.globl sym_2_7564
+sym_2_7564: la $2, sym_2_7564
+.globl sym_2_7565
+sym_2_7565: la $2, sym_2_7565
+.globl sym_2_7566
+sym_2_7566: la $2, sym_2_7566
+.globl sym_2_7567
+sym_2_7567: la $2, sym_2_7567
+.globl sym_2_7568
+sym_2_7568: la $2, sym_2_7568
+.globl sym_2_7569
+sym_2_7569: la $2, sym_2_7569
+.globl sym_2_7570
+sym_2_7570: la $2, sym_2_7570
+.globl sym_2_7571
+sym_2_7571: la $2, sym_2_7571
+.globl sym_2_7572
+sym_2_7572: la $2, sym_2_7572
+.globl sym_2_7573
+sym_2_7573: la $2, sym_2_7573
+.globl sym_2_7574
+sym_2_7574: la $2, sym_2_7574
+.globl sym_2_7575
+sym_2_7575: la $2, sym_2_7575
+.globl sym_2_7576
+sym_2_7576: la $2, sym_2_7576
+.globl sym_2_7577
+sym_2_7577: la $2, sym_2_7577
+.globl sym_2_7578
+sym_2_7578: la $2, sym_2_7578
+.globl sym_2_7579
+sym_2_7579: la $2, sym_2_7579
+.globl sym_2_7580
+sym_2_7580: la $2, sym_2_7580
+.globl sym_2_7581
+sym_2_7581: la $2, sym_2_7581
+.globl sym_2_7582
+sym_2_7582: la $2, sym_2_7582
+.globl sym_2_7583
+sym_2_7583: la $2, sym_2_7583
+.globl sym_2_7584
+sym_2_7584: la $2, sym_2_7584
+.globl sym_2_7585
+sym_2_7585: la $2, sym_2_7585
+.globl sym_2_7586
+sym_2_7586: la $2, sym_2_7586
+.globl sym_2_7587
+sym_2_7587: la $2, sym_2_7587
+.globl sym_2_7588
+sym_2_7588: la $2, sym_2_7588
+.globl sym_2_7589
+sym_2_7589: la $2, sym_2_7589
+.globl sym_2_7590
+sym_2_7590: la $2, sym_2_7590
+.globl sym_2_7591
+sym_2_7591: la $2, sym_2_7591
+.globl sym_2_7592
+sym_2_7592: la $2, sym_2_7592
+.globl sym_2_7593
+sym_2_7593: la $2, sym_2_7593
+.globl sym_2_7594
+sym_2_7594: la $2, sym_2_7594
+.globl sym_2_7595
+sym_2_7595: la $2, sym_2_7595
+.globl sym_2_7596
+sym_2_7596: la $2, sym_2_7596
+.globl sym_2_7597
+sym_2_7597: la $2, sym_2_7597
+.globl sym_2_7598
+sym_2_7598: la $2, sym_2_7598
+.globl sym_2_7599
+sym_2_7599: la $2, sym_2_7599
+.globl sym_2_7600
+sym_2_7600: la $2, sym_2_7600
+.globl sym_2_7601
+sym_2_7601: la $2, sym_2_7601
+.globl sym_2_7602
+sym_2_7602: la $2, sym_2_7602
+.globl sym_2_7603
+sym_2_7603: la $2, sym_2_7603
+.globl sym_2_7604
+sym_2_7604: la $2, sym_2_7604
+.globl sym_2_7605
+sym_2_7605: la $2, sym_2_7605
+.globl sym_2_7606
+sym_2_7606: la $2, sym_2_7606
+.globl sym_2_7607
+sym_2_7607: la $2, sym_2_7607
+.globl sym_2_7608
+sym_2_7608: la $2, sym_2_7608
+.globl sym_2_7609
+sym_2_7609: la $2, sym_2_7609
+.globl sym_2_7610
+sym_2_7610: la $2, sym_2_7610
+.globl sym_2_7611
+sym_2_7611: la $2, sym_2_7611
+.globl sym_2_7612
+sym_2_7612: la $2, sym_2_7612
+.globl sym_2_7613
+sym_2_7613: la $2, sym_2_7613
+.globl sym_2_7614
+sym_2_7614: la $2, sym_2_7614
+.globl sym_2_7615
+sym_2_7615: la $2, sym_2_7615
+.globl sym_2_7616
+sym_2_7616: la $2, sym_2_7616
+.globl sym_2_7617
+sym_2_7617: la $2, sym_2_7617
+.globl sym_2_7618
+sym_2_7618: la $2, sym_2_7618
+.globl sym_2_7619
+sym_2_7619: la $2, sym_2_7619
+.globl sym_2_7620
+sym_2_7620: la $2, sym_2_7620
+.globl sym_2_7621
+sym_2_7621: la $2, sym_2_7621
+.globl sym_2_7622
+sym_2_7622: la $2, sym_2_7622
+.globl sym_2_7623
+sym_2_7623: la $2, sym_2_7623
+.globl sym_2_7624
+sym_2_7624: la $2, sym_2_7624
+.globl sym_2_7625
+sym_2_7625: la $2, sym_2_7625
+.globl sym_2_7626
+sym_2_7626: la $2, sym_2_7626
+.globl sym_2_7627
+sym_2_7627: la $2, sym_2_7627
+.globl sym_2_7628
+sym_2_7628: la $2, sym_2_7628
+.globl sym_2_7629
+sym_2_7629: la $2, sym_2_7629
+.globl sym_2_7630
+sym_2_7630: la $2, sym_2_7630
+.globl sym_2_7631
+sym_2_7631: la $2, sym_2_7631
+.globl sym_2_7632
+sym_2_7632: la $2, sym_2_7632
+.globl sym_2_7633
+sym_2_7633: la $2, sym_2_7633
+.globl sym_2_7634
+sym_2_7634: la $2, sym_2_7634
+.globl sym_2_7635
+sym_2_7635: la $2, sym_2_7635
+.globl sym_2_7636
+sym_2_7636: la $2, sym_2_7636
+.globl sym_2_7637
+sym_2_7637: la $2, sym_2_7637
+.globl sym_2_7638
+sym_2_7638: la $2, sym_2_7638
+.globl sym_2_7639
+sym_2_7639: la $2, sym_2_7639
+.globl sym_2_7640
+sym_2_7640: la $2, sym_2_7640
+.globl sym_2_7641
+sym_2_7641: la $2, sym_2_7641
+.globl sym_2_7642
+sym_2_7642: la $2, sym_2_7642
+.globl sym_2_7643
+sym_2_7643: la $2, sym_2_7643
+.globl sym_2_7644
+sym_2_7644: la $2, sym_2_7644
+.globl sym_2_7645
+sym_2_7645: la $2, sym_2_7645
+.globl sym_2_7646
+sym_2_7646: la $2, sym_2_7646
+.globl sym_2_7647
+sym_2_7647: la $2, sym_2_7647
+.globl sym_2_7648
+sym_2_7648: la $2, sym_2_7648
+.globl sym_2_7649
+sym_2_7649: la $2, sym_2_7649
+.globl sym_2_7650
+sym_2_7650: la $2, sym_2_7650
+.globl sym_2_7651
+sym_2_7651: la $2, sym_2_7651
+.globl sym_2_7652
+sym_2_7652: la $2, sym_2_7652
+.globl sym_2_7653
+sym_2_7653: la $2, sym_2_7653
+.globl sym_2_7654
+sym_2_7654: la $2, sym_2_7654
+.globl sym_2_7655
+sym_2_7655: la $2, sym_2_7655
+.globl sym_2_7656
+sym_2_7656: la $2, sym_2_7656
+.globl sym_2_7657
+sym_2_7657: la $2, sym_2_7657
+.globl sym_2_7658
+sym_2_7658: la $2, sym_2_7658
+.globl sym_2_7659
+sym_2_7659: la $2, sym_2_7659
+.globl sym_2_7660
+sym_2_7660: la $2, sym_2_7660
+.globl sym_2_7661
+sym_2_7661: la $2, sym_2_7661
+.globl sym_2_7662
+sym_2_7662: la $2, sym_2_7662
+.globl sym_2_7663
+sym_2_7663: la $2, sym_2_7663
+.globl sym_2_7664
+sym_2_7664: la $2, sym_2_7664
+.globl sym_2_7665
+sym_2_7665: la $2, sym_2_7665
+.globl sym_2_7666
+sym_2_7666: la $2, sym_2_7666
+.globl sym_2_7667
+sym_2_7667: la $2, sym_2_7667
+.globl sym_2_7668
+sym_2_7668: la $2, sym_2_7668
+.globl sym_2_7669
+sym_2_7669: la $2, sym_2_7669
+.globl sym_2_7670
+sym_2_7670: la $2, sym_2_7670
+.globl sym_2_7671
+sym_2_7671: la $2, sym_2_7671
+.globl sym_2_7672
+sym_2_7672: la $2, sym_2_7672
+.globl sym_2_7673
+sym_2_7673: la $2, sym_2_7673
+.globl sym_2_7674
+sym_2_7674: la $2, sym_2_7674
+.globl sym_2_7675
+sym_2_7675: la $2, sym_2_7675
+.globl sym_2_7676
+sym_2_7676: la $2, sym_2_7676
+.globl sym_2_7677
+sym_2_7677: la $2, sym_2_7677
+.globl sym_2_7678
+sym_2_7678: la $2, sym_2_7678
+.globl sym_2_7679
+sym_2_7679: la $2, sym_2_7679
+.globl sym_2_7680
+sym_2_7680: la $2, sym_2_7680
+.globl sym_2_7681
+sym_2_7681: la $2, sym_2_7681
+.globl sym_2_7682
+sym_2_7682: la $2, sym_2_7682
+.globl sym_2_7683
+sym_2_7683: la $2, sym_2_7683
+.globl sym_2_7684
+sym_2_7684: la $2, sym_2_7684
+.globl sym_2_7685
+sym_2_7685: la $2, sym_2_7685
+.globl sym_2_7686
+sym_2_7686: la $2, sym_2_7686
+.globl sym_2_7687
+sym_2_7687: la $2, sym_2_7687
+.globl sym_2_7688
+sym_2_7688: la $2, sym_2_7688
+.globl sym_2_7689
+sym_2_7689: la $2, sym_2_7689
+.globl sym_2_7690
+sym_2_7690: la $2, sym_2_7690
+.globl sym_2_7691
+sym_2_7691: la $2, sym_2_7691
+.globl sym_2_7692
+sym_2_7692: la $2, sym_2_7692
+.globl sym_2_7693
+sym_2_7693: la $2, sym_2_7693
+.globl sym_2_7694
+sym_2_7694: la $2, sym_2_7694
+.globl sym_2_7695
+sym_2_7695: la $2, sym_2_7695
+.globl sym_2_7696
+sym_2_7696: la $2, sym_2_7696
+.globl sym_2_7697
+sym_2_7697: la $2, sym_2_7697
+.globl sym_2_7698
+sym_2_7698: la $2, sym_2_7698
+.globl sym_2_7699
+sym_2_7699: la $2, sym_2_7699
+.globl sym_2_7700
+sym_2_7700: la $2, sym_2_7700
+.globl sym_2_7701
+sym_2_7701: la $2, sym_2_7701
+.globl sym_2_7702
+sym_2_7702: la $2, sym_2_7702
+.globl sym_2_7703
+sym_2_7703: la $2, sym_2_7703
+.globl sym_2_7704
+sym_2_7704: la $2, sym_2_7704
+.globl sym_2_7705
+sym_2_7705: la $2, sym_2_7705
+.globl sym_2_7706
+sym_2_7706: la $2, sym_2_7706
+.globl sym_2_7707
+sym_2_7707: la $2, sym_2_7707
+.globl sym_2_7708
+sym_2_7708: la $2, sym_2_7708
+.globl sym_2_7709
+sym_2_7709: la $2, sym_2_7709
+.globl sym_2_7710
+sym_2_7710: la $2, sym_2_7710
+.globl sym_2_7711
+sym_2_7711: la $2, sym_2_7711
+.globl sym_2_7712
+sym_2_7712: la $2, sym_2_7712
+.globl sym_2_7713
+sym_2_7713: la $2, sym_2_7713
+.globl sym_2_7714
+sym_2_7714: la $2, sym_2_7714
+.globl sym_2_7715
+sym_2_7715: la $2, sym_2_7715
+.globl sym_2_7716
+sym_2_7716: la $2, sym_2_7716
+.globl sym_2_7717
+sym_2_7717: la $2, sym_2_7717
+.globl sym_2_7718
+sym_2_7718: la $2, sym_2_7718
+.globl sym_2_7719
+sym_2_7719: la $2, sym_2_7719
+.globl sym_2_7720
+sym_2_7720: la $2, sym_2_7720
+.globl sym_2_7721
+sym_2_7721: la $2, sym_2_7721
+.globl sym_2_7722
+sym_2_7722: la $2, sym_2_7722
+.globl sym_2_7723
+sym_2_7723: la $2, sym_2_7723
+.globl sym_2_7724
+sym_2_7724: la $2, sym_2_7724
+.globl sym_2_7725
+sym_2_7725: la $2, sym_2_7725
+.globl sym_2_7726
+sym_2_7726: la $2, sym_2_7726
+.globl sym_2_7727
+sym_2_7727: la $2, sym_2_7727
+.globl sym_2_7728
+sym_2_7728: la $2, sym_2_7728
+.globl sym_2_7729
+sym_2_7729: la $2, sym_2_7729
+.globl sym_2_7730
+sym_2_7730: la $2, sym_2_7730
+.globl sym_2_7731
+sym_2_7731: la $2, sym_2_7731
+.globl sym_2_7732
+sym_2_7732: la $2, sym_2_7732
+.globl sym_2_7733
+sym_2_7733: la $2, sym_2_7733
+.globl sym_2_7734
+sym_2_7734: la $2, sym_2_7734
+.globl sym_2_7735
+sym_2_7735: la $2, sym_2_7735
+.globl sym_2_7736
+sym_2_7736: la $2, sym_2_7736
+.globl sym_2_7737
+sym_2_7737: la $2, sym_2_7737
+.globl sym_2_7738
+sym_2_7738: la $2, sym_2_7738
+.globl sym_2_7739
+sym_2_7739: la $2, sym_2_7739
+.globl sym_2_7740
+sym_2_7740: la $2, sym_2_7740
+.globl sym_2_7741
+sym_2_7741: la $2, sym_2_7741
+.globl sym_2_7742
+sym_2_7742: la $2, sym_2_7742
+.globl sym_2_7743
+sym_2_7743: la $2, sym_2_7743
+.globl sym_2_7744
+sym_2_7744: la $2, sym_2_7744
+.globl sym_2_7745
+sym_2_7745: la $2, sym_2_7745
+.globl sym_2_7746
+sym_2_7746: la $2, sym_2_7746
+.globl sym_2_7747
+sym_2_7747: la $2, sym_2_7747
+.globl sym_2_7748
+sym_2_7748: la $2, sym_2_7748
+.globl sym_2_7749
+sym_2_7749: la $2, sym_2_7749
+.globl sym_2_7750
+sym_2_7750: la $2, sym_2_7750
+.globl sym_2_7751
+sym_2_7751: la $2, sym_2_7751
+.globl sym_2_7752
+sym_2_7752: la $2, sym_2_7752
+.globl sym_2_7753
+sym_2_7753: la $2, sym_2_7753
+.globl sym_2_7754
+sym_2_7754: la $2, sym_2_7754
+.globl sym_2_7755
+sym_2_7755: la $2, sym_2_7755
+.globl sym_2_7756
+sym_2_7756: la $2, sym_2_7756
+.globl sym_2_7757
+sym_2_7757: la $2, sym_2_7757
+.globl sym_2_7758
+sym_2_7758: la $2, sym_2_7758
+.globl sym_2_7759
+sym_2_7759: la $2, sym_2_7759
+.globl sym_2_7760
+sym_2_7760: la $2, sym_2_7760
+.globl sym_2_7761
+sym_2_7761: la $2, sym_2_7761
+.globl sym_2_7762
+sym_2_7762: la $2, sym_2_7762
+.globl sym_2_7763
+sym_2_7763: la $2, sym_2_7763
+.globl sym_2_7764
+sym_2_7764: la $2, sym_2_7764
+.globl sym_2_7765
+sym_2_7765: la $2, sym_2_7765
+.globl sym_2_7766
+sym_2_7766: la $2, sym_2_7766
+.globl sym_2_7767
+sym_2_7767: la $2, sym_2_7767
+.globl sym_2_7768
+sym_2_7768: la $2, sym_2_7768
+.globl sym_2_7769
+sym_2_7769: la $2, sym_2_7769
+.globl sym_2_7770
+sym_2_7770: la $2, sym_2_7770
+.globl sym_2_7771
+sym_2_7771: la $2, sym_2_7771
+.globl sym_2_7772
+sym_2_7772: la $2, sym_2_7772
+.globl sym_2_7773
+sym_2_7773: la $2, sym_2_7773
+.globl sym_2_7774
+sym_2_7774: la $2, sym_2_7774
+.globl sym_2_7775
+sym_2_7775: la $2, sym_2_7775
+.globl sym_2_7776
+sym_2_7776: la $2, sym_2_7776
+.globl sym_2_7777
+sym_2_7777: la $2, sym_2_7777
+.globl sym_2_7778
+sym_2_7778: la $2, sym_2_7778
+.globl sym_2_7779
+sym_2_7779: la $2, sym_2_7779
+.globl sym_2_7780
+sym_2_7780: la $2, sym_2_7780
+.globl sym_2_7781
+sym_2_7781: la $2, sym_2_7781
+.globl sym_2_7782
+sym_2_7782: la $2, sym_2_7782
+.globl sym_2_7783
+sym_2_7783: la $2, sym_2_7783
+.globl sym_2_7784
+sym_2_7784: la $2, sym_2_7784
+.globl sym_2_7785
+sym_2_7785: la $2, sym_2_7785
+.globl sym_2_7786
+sym_2_7786: la $2, sym_2_7786
+.globl sym_2_7787
+sym_2_7787: la $2, sym_2_7787
+.globl sym_2_7788
+sym_2_7788: la $2, sym_2_7788
+.globl sym_2_7789
+sym_2_7789: la $2, sym_2_7789
+.globl sym_2_7790
+sym_2_7790: la $2, sym_2_7790
+.globl sym_2_7791
+sym_2_7791: la $2, sym_2_7791
+.globl sym_2_7792
+sym_2_7792: la $2, sym_2_7792
+.globl sym_2_7793
+sym_2_7793: la $2, sym_2_7793
+.globl sym_2_7794
+sym_2_7794: la $2, sym_2_7794
+.globl sym_2_7795
+sym_2_7795: la $2, sym_2_7795
+.globl sym_2_7796
+sym_2_7796: la $2, sym_2_7796
+.globl sym_2_7797
+sym_2_7797: la $2, sym_2_7797
+.globl sym_2_7798
+sym_2_7798: la $2, sym_2_7798
+.globl sym_2_7799
+sym_2_7799: la $2, sym_2_7799
+.globl sym_2_7800
+sym_2_7800: la $2, sym_2_7800
+.globl sym_2_7801
+sym_2_7801: la $2, sym_2_7801
+.globl sym_2_7802
+sym_2_7802: la $2, sym_2_7802
+.globl sym_2_7803
+sym_2_7803: la $2, sym_2_7803
+.globl sym_2_7804
+sym_2_7804: la $2, sym_2_7804
+.globl sym_2_7805
+sym_2_7805: la $2, sym_2_7805
+.globl sym_2_7806
+sym_2_7806: la $2, sym_2_7806
+.globl sym_2_7807
+sym_2_7807: la $2, sym_2_7807
+.globl sym_2_7808
+sym_2_7808: la $2, sym_2_7808
+.globl sym_2_7809
+sym_2_7809: la $2, sym_2_7809
+.globl sym_2_7810
+sym_2_7810: la $2, sym_2_7810
+.globl sym_2_7811
+sym_2_7811: la $2, sym_2_7811
+.globl sym_2_7812
+sym_2_7812: la $2, sym_2_7812
+.globl sym_2_7813
+sym_2_7813: la $2, sym_2_7813
+.globl sym_2_7814
+sym_2_7814: la $2, sym_2_7814
+.globl sym_2_7815
+sym_2_7815: la $2, sym_2_7815
+.globl sym_2_7816
+sym_2_7816: la $2, sym_2_7816
+.globl sym_2_7817
+sym_2_7817: la $2, sym_2_7817
+.globl sym_2_7818
+sym_2_7818: la $2, sym_2_7818
+.globl sym_2_7819
+sym_2_7819: la $2, sym_2_7819
+.globl sym_2_7820
+sym_2_7820: la $2, sym_2_7820
+.globl sym_2_7821
+sym_2_7821: la $2, sym_2_7821
+.globl sym_2_7822
+sym_2_7822: la $2, sym_2_7822
+.globl sym_2_7823
+sym_2_7823: la $2, sym_2_7823
+.globl sym_2_7824
+sym_2_7824: la $2, sym_2_7824
+.globl sym_2_7825
+sym_2_7825: la $2, sym_2_7825
+.globl sym_2_7826
+sym_2_7826: la $2, sym_2_7826
+.globl sym_2_7827
+sym_2_7827: la $2, sym_2_7827
+.globl sym_2_7828
+sym_2_7828: la $2, sym_2_7828
+.globl sym_2_7829
+sym_2_7829: la $2, sym_2_7829
+.globl sym_2_7830
+sym_2_7830: la $2, sym_2_7830
+.globl sym_2_7831
+sym_2_7831: la $2, sym_2_7831
+.globl sym_2_7832
+sym_2_7832: la $2, sym_2_7832
+.globl sym_2_7833
+sym_2_7833: la $2, sym_2_7833
+.globl sym_2_7834
+sym_2_7834: la $2, sym_2_7834
+.globl sym_2_7835
+sym_2_7835: la $2, sym_2_7835
+.globl sym_2_7836
+sym_2_7836: la $2, sym_2_7836
+.globl sym_2_7837
+sym_2_7837: la $2, sym_2_7837
+.globl sym_2_7838
+sym_2_7838: la $2, sym_2_7838
+.globl sym_2_7839
+sym_2_7839: la $2, sym_2_7839
+.globl sym_2_7840
+sym_2_7840: la $2, sym_2_7840
+.globl sym_2_7841
+sym_2_7841: la $2, sym_2_7841
+.globl sym_2_7842
+sym_2_7842: la $2, sym_2_7842
+.globl sym_2_7843
+sym_2_7843: la $2, sym_2_7843
+.globl sym_2_7844
+sym_2_7844: la $2, sym_2_7844
+.globl sym_2_7845
+sym_2_7845: la $2, sym_2_7845
+.globl sym_2_7846
+sym_2_7846: la $2, sym_2_7846
+.globl sym_2_7847
+sym_2_7847: la $2, sym_2_7847
+.globl sym_2_7848
+sym_2_7848: la $2, sym_2_7848
+.globl sym_2_7849
+sym_2_7849: la $2, sym_2_7849
+.globl sym_2_7850
+sym_2_7850: la $2, sym_2_7850
+.globl sym_2_7851
+sym_2_7851: la $2, sym_2_7851
+.globl sym_2_7852
+sym_2_7852: la $2, sym_2_7852
+.globl sym_2_7853
+sym_2_7853: la $2, sym_2_7853
+.globl sym_2_7854
+sym_2_7854: la $2, sym_2_7854
+.globl sym_2_7855
+sym_2_7855: la $2, sym_2_7855
+.globl sym_2_7856
+sym_2_7856: la $2, sym_2_7856
+.globl sym_2_7857
+sym_2_7857: la $2, sym_2_7857
+.globl sym_2_7858
+sym_2_7858: la $2, sym_2_7858
+.globl sym_2_7859
+sym_2_7859: la $2, sym_2_7859
+.globl sym_2_7860
+sym_2_7860: la $2, sym_2_7860
+.globl sym_2_7861
+sym_2_7861: la $2, sym_2_7861
+.globl sym_2_7862
+sym_2_7862: la $2, sym_2_7862
+.globl sym_2_7863
+sym_2_7863: la $2, sym_2_7863
+.globl sym_2_7864
+sym_2_7864: la $2, sym_2_7864
+.globl sym_2_7865
+sym_2_7865: la $2, sym_2_7865
+.globl sym_2_7866
+sym_2_7866: la $2, sym_2_7866
+.globl sym_2_7867
+sym_2_7867: la $2, sym_2_7867
+.globl sym_2_7868
+sym_2_7868: la $2, sym_2_7868
+.globl sym_2_7869
+sym_2_7869: la $2, sym_2_7869
+.globl sym_2_7870
+sym_2_7870: la $2, sym_2_7870
+.globl sym_2_7871
+sym_2_7871: la $2, sym_2_7871
+.globl sym_2_7872
+sym_2_7872: la $2, sym_2_7872
+.globl sym_2_7873
+sym_2_7873: la $2, sym_2_7873
+.globl sym_2_7874
+sym_2_7874: la $2, sym_2_7874
+.globl sym_2_7875
+sym_2_7875: la $2, sym_2_7875
+.globl sym_2_7876
+sym_2_7876: la $2, sym_2_7876
+.globl sym_2_7877
+sym_2_7877: la $2, sym_2_7877
+.globl sym_2_7878
+sym_2_7878: la $2, sym_2_7878
+.globl sym_2_7879
+sym_2_7879: la $2, sym_2_7879
+.globl sym_2_7880
+sym_2_7880: la $2, sym_2_7880
+.globl sym_2_7881
+sym_2_7881: la $2, sym_2_7881
+.globl sym_2_7882
+sym_2_7882: la $2, sym_2_7882
+.globl sym_2_7883
+sym_2_7883: la $2, sym_2_7883
+.globl sym_2_7884
+sym_2_7884: la $2, sym_2_7884
+.globl sym_2_7885
+sym_2_7885: la $2, sym_2_7885
+.globl sym_2_7886
+sym_2_7886: la $2, sym_2_7886
+.globl sym_2_7887
+sym_2_7887: la $2, sym_2_7887
+.globl sym_2_7888
+sym_2_7888: la $2, sym_2_7888
+.globl sym_2_7889
+sym_2_7889: la $2, sym_2_7889
+.globl sym_2_7890
+sym_2_7890: la $2, sym_2_7890
+.globl sym_2_7891
+sym_2_7891: la $2, sym_2_7891
+.globl sym_2_7892
+sym_2_7892: la $2, sym_2_7892
+.globl sym_2_7893
+sym_2_7893: la $2, sym_2_7893
+.globl sym_2_7894
+sym_2_7894: la $2, sym_2_7894
+.globl sym_2_7895
+sym_2_7895: la $2, sym_2_7895
+.globl sym_2_7896
+sym_2_7896: la $2, sym_2_7896
+.globl sym_2_7897
+sym_2_7897: la $2, sym_2_7897
+.globl sym_2_7898
+sym_2_7898: la $2, sym_2_7898
+.globl sym_2_7899
+sym_2_7899: la $2, sym_2_7899
+.globl sym_2_7900
+sym_2_7900: la $2, sym_2_7900
+.globl sym_2_7901
+sym_2_7901: la $2, sym_2_7901
+.globl sym_2_7902
+sym_2_7902: la $2, sym_2_7902
+.globl sym_2_7903
+sym_2_7903: la $2, sym_2_7903
+.globl sym_2_7904
+sym_2_7904: la $2, sym_2_7904
+.globl sym_2_7905
+sym_2_7905: la $2, sym_2_7905
+.globl sym_2_7906
+sym_2_7906: la $2, sym_2_7906
+.globl sym_2_7907
+sym_2_7907: la $2, sym_2_7907
+.globl sym_2_7908
+sym_2_7908: la $2, sym_2_7908
+.globl sym_2_7909
+sym_2_7909: la $2, sym_2_7909
+.globl sym_2_7910
+sym_2_7910: la $2, sym_2_7910
+.globl sym_2_7911
+sym_2_7911: la $2, sym_2_7911
+.globl sym_2_7912
+sym_2_7912: la $2, sym_2_7912
+.globl sym_2_7913
+sym_2_7913: la $2, sym_2_7913
+.globl sym_2_7914
+sym_2_7914: la $2, sym_2_7914
+.globl sym_2_7915
+sym_2_7915: la $2, sym_2_7915
+.globl sym_2_7916
+sym_2_7916: la $2, sym_2_7916
+.globl sym_2_7917
+sym_2_7917: la $2, sym_2_7917
+.globl sym_2_7918
+sym_2_7918: la $2, sym_2_7918
+.globl sym_2_7919
+sym_2_7919: la $2, sym_2_7919
+.globl sym_2_7920
+sym_2_7920: la $2, sym_2_7920
+.globl sym_2_7921
+sym_2_7921: la $2, sym_2_7921
+.globl sym_2_7922
+sym_2_7922: la $2, sym_2_7922
+.globl sym_2_7923
+sym_2_7923: la $2, sym_2_7923
+.globl sym_2_7924
+sym_2_7924: la $2, sym_2_7924
+.globl sym_2_7925
+sym_2_7925: la $2, sym_2_7925
+.globl sym_2_7926
+sym_2_7926: la $2, sym_2_7926
+.globl sym_2_7927
+sym_2_7927: la $2, sym_2_7927
+.globl sym_2_7928
+sym_2_7928: la $2, sym_2_7928
+.globl sym_2_7929
+sym_2_7929: la $2, sym_2_7929
+.globl sym_2_7930
+sym_2_7930: la $2, sym_2_7930
+.globl sym_2_7931
+sym_2_7931: la $2, sym_2_7931
+.globl sym_2_7932
+sym_2_7932: la $2, sym_2_7932
+.globl sym_2_7933
+sym_2_7933: la $2, sym_2_7933
+.globl sym_2_7934
+sym_2_7934: la $2, sym_2_7934
+.globl sym_2_7935
+sym_2_7935: la $2, sym_2_7935
+.globl sym_2_7936
+sym_2_7936: la $2, sym_2_7936
+.globl sym_2_7937
+sym_2_7937: la $2, sym_2_7937
+.globl sym_2_7938
+sym_2_7938: la $2, sym_2_7938
+.globl sym_2_7939
+sym_2_7939: la $2, sym_2_7939
+.globl sym_2_7940
+sym_2_7940: la $2, sym_2_7940
+.globl sym_2_7941
+sym_2_7941: la $2, sym_2_7941
+.globl sym_2_7942
+sym_2_7942: la $2, sym_2_7942
+.globl sym_2_7943
+sym_2_7943: la $2, sym_2_7943
+.globl sym_2_7944
+sym_2_7944: la $2, sym_2_7944
+.globl sym_2_7945
+sym_2_7945: la $2, sym_2_7945
+.globl sym_2_7946
+sym_2_7946: la $2, sym_2_7946
+.globl sym_2_7947
+sym_2_7947: la $2, sym_2_7947
+.globl sym_2_7948
+sym_2_7948: la $2, sym_2_7948
+.globl sym_2_7949
+sym_2_7949: la $2, sym_2_7949
+.globl sym_2_7950
+sym_2_7950: la $2, sym_2_7950
+.globl sym_2_7951
+sym_2_7951: la $2, sym_2_7951
+.globl sym_2_7952
+sym_2_7952: la $2, sym_2_7952
+.globl sym_2_7953
+sym_2_7953: la $2, sym_2_7953
+.globl sym_2_7954
+sym_2_7954: la $2, sym_2_7954
+.globl sym_2_7955
+sym_2_7955: la $2, sym_2_7955
+.globl sym_2_7956
+sym_2_7956: la $2, sym_2_7956
+.globl sym_2_7957
+sym_2_7957: la $2, sym_2_7957
+.globl sym_2_7958
+sym_2_7958: la $2, sym_2_7958
+.globl sym_2_7959
+sym_2_7959: la $2, sym_2_7959
+.globl sym_2_7960
+sym_2_7960: la $2, sym_2_7960
+.globl sym_2_7961
+sym_2_7961: la $2, sym_2_7961
+.globl sym_2_7962
+sym_2_7962: la $2, sym_2_7962
+.globl sym_2_7963
+sym_2_7963: la $2, sym_2_7963
+.globl sym_2_7964
+sym_2_7964: la $2, sym_2_7964
+.globl sym_2_7965
+sym_2_7965: la $2, sym_2_7965
+.globl sym_2_7966
+sym_2_7966: la $2, sym_2_7966
+.globl sym_2_7967
+sym_2_7967: la $2, sym_2_7967
+.globl sym_2_7968
+sym_2_7968: la $2, sym_2_7968
+.globl sym_2_7969
+sym_2_7969: la $2, sym_2_7969
+.globl sym_2_7970
+sym_2_7970: la $2, sym_2_7970
+.globl sym_2_7971
+sym_2_7971: la $2, sym_2_7971
+.globl sym_2_7972
+sym_2_7972: la $2, sym_2_7972
+.globl sym_2_7973
+sym_2_7973: la $2, sym_2_7973
+.globl sym_2_7974
+sym_2_7974: la $2, sym_2_7974
+.globl sym_2_7975
+sym_2_7975: la $2, sym_2_7975
+.globl sym_2_7976
+sym_2_7976: la $2, sym_2_7976
+.globl sym_2_7977
+sym_2_7977: la $2, sym_2_7977
+.globl sym_2_7978
+sym_2_7978: la $2, sym_2_7978
+.globl sym_2_7979
+sym_2_7979: la $2, sym_2_7979
+.globl sym_2_7980
+sym_2_7980: la $2, sym_2_7980
+.globl sym_2_7981
+sym_2_7981: la $2, sym_2_7981
+.globl sym_2_7982
+sym_2_7982: la $2, sym_2_7982
+.globl sym_2_7983
+sym_2_7983: la $2, sym_2_7983
+.globl sym_2_7984
+sym_2_7984: la $2, sym_2_7984
+.globl sym_2_7985
+sym_2_7985: la $2, sym_2_7985
+.globl sym_2_7986
+sym_2_7986: la $2, sym_2_7986
+.globl sym_2_7987
+sym_2_7987: la $2, sym_2_7987
+.globl sym_2_7988
+sym_2_7988: la $2, sym_2_7988
+.globl sym_2_7989
+sym_2_7989: la $2, sym_2_7989
+.globl sym_2_7990
+sym_2_7990: la $2, sym_2_7990
+.globl sym_2_7991
+sym_2_7991: la $2, sym_2_7991
+.globl sym_2_7992
+sym_2_7992: la $2, sym_2_7992
+.globl sym_2_7993
+sym_2_7993: la $2, sym_2_7993
+.globl sym_2_7994
+sym_2_7994: la $2, sym_2_7994
+.globl sym_2_7995
+sym_2_7995: la $2, sym_2_7995
+.globl sym_2_7996
+sym_2_7996: la $2, sym_2_7996
+.globl sym_2_7997
+sym_2_7997: la $2, sym_2_7997
+.globl sym_2_7998
+sym_2_7998: la $2, sym_2_7998
+.globl sym_2_7999
+sym_2_7999: la $2, sym_2_7999
+.globl sym_2_8000
+sym_2_8000: la $2, sym_2_8000
+.globl sym_2_8001
+sym_2_8001: la $2, sym_2_8001
+.globl sym_2_8002
+sym_2_8002: la $2, sym_2_8002
+.globl sym_2_8003
+sym_2_8003: la $2, sym_2_8003
+.globl sym_2_8004
+sym_2_8004: la $2, sym_2_8004
+.globl sym_2_8005
+sym_2_8005: la $2, sym_2_8005
+.globl sym_2_8006
+sym_2_8006: la $2, sym_2_8006
+.globl sym_2_8007
+sym_2_8007: la $2, sym_2_8007
+.globl sym_2_8008
+sym_2_8008: la $2, sym_2_8008
+.globl sym_2_8009
+sym_2_8009: la $2, sym_2_8009
+.globl sym_2_8010
+sym_2_8010: la $2, sym_2_8010
+.globl sym_2_8011
+sym_2_8011: la $2, sym_2_8011
+.globl sym_2_8012
+sym_2_8012: la $2, sym_2_8012
+.globl sym_2_8013
+sym_2_8013: la $2, sym_2_8013
+.globl sym_2_8014
+sym_2_8014: la $2, sym_2_8014
+.globl sym_2_8015
+sym_2_8015: la $2, sym_2_8015
+.globl sym_2_8016
+sym_2_8016: la $2, sym_2_8016
+.globl sym_2_8017
+sym_2_8017: la $2, sym_2_8017
+.globl sym_2_8018
+sym_2_8018: la $2, sym_2_8018
+.globl sym_2_8019
+sym_2_8019: la $2, sym_2_8019
+.globl sym_2_8020
+sym_2_8020: la $2, sym_2_8020
+.globl sym_2_8021
+sym_2_8021: la $2, sym_2_8021
+.globl sym_2_8022
+sym_2_8022: la $2, sym_2_8022
+.globl sym_2_8023
+sym_2_8023: la $2, sym_2_8023
+.globl sym_2_8024
+sym_2_8024: la $2, sym_2_8024
+.globl sym_2_8025
+sym_2_8025: la $2, sym_2_8025
+.globl sym_2_8026
+sym_2_8026: la $2, sym_2_8026
+.globl sym_2_8027
+sym_2_8027: la $2, sym_2_8027
+.globl sym_2_8028
+sym_2_8028: la $2, sym_2_8028
+.globl sym_2_8029
+sym_2_8029: la $2, sym_2_8029
+.globl sym_2_8030
+sym_2_8030: la $2, sym_2_8030
+.globl sym_2_8031
+sym_2_8031: la $2, sym_2_8031
+.globl sym_2_8032
+sym_2_8032: la $2, sym_2_8032
+.globl sym_2_8033
+sym_2_8033: la $2, sym_2_8033
+.globl sym_2_8034
+sym_2_8034: la $2, sym_2_8034
+.globl sym_2_8035
+sym_2_8035: la $2, sym_2_8035
+.globl sym_2_8036
+sym_2_8036: la $2, sym_2_8036
+.globl sym_2_8037
+sym_2_8037: la $2, sym_2_8037
+.globl sym_2_8038
+sym_2_8038: la $2, sym_2_8038
+.globl sym_2_8039
+sym_2_8039: la $2, sym_2_8039
+.globl sym_2_8040
+sym_2_8040: la $2, sym_2_8040
+.globl sym_2_8041
+sym_2_8041: la $2, sym_2_8041
+.globl sym_2_8042
+sym_2_8042: la $2, sym_2_8042
+.globl sym_2_8043
+sym_2_8043: la $2, sym_2_8043
+.globl sym_2_8044
+sym_2_8044: la $2, sym_2_8044
+.globl sym_2_8045
+sym_2_8045: la $2, sym_2_8045
+.globl sym_2_8046
+sym_2_8046: la $2, sym_2_8046
+.globl sym_2_8047
+sym_2_8047: la $2, sym_2_8047
+.globl sym_2_8048
+sym_2_8048: la $2, sym_2_8048
+.globl sym_2_8049
+sym_2_8049: la $2, sym_2_8049
+.globl sym_2_8050
+sym_2_8050: la $2, sym_2_8050
+.globl sym_2_8051
+sym_2_8051: la $2, sym_2_8051
+.globl sym_2_8052
+sym_2_8052: la $2, sym_2_8052
+.globl sym_2_8053
+sym_2_8053: la $2, sym_2_8053
+.globl sym_2_8054
+sym_2_8054: la $2, sym_2_8054
+.globl sym_2_8055
+sym_2_8055: la $2, sym_2_8055
+.globl sym_2_8056
+sym_2_8056: la $2, sym_2_8056
+.globl sym_2_8057
+sym_2_8057: la $2, sym_2_8057
+.globl sym_2_8058
+sym_2_8058: la $2, sym_2_8058
+.globl sym_2_8059
+sym_2_8059: la $2, sym_2_8059
+.globl sym_2_8060
+sym_2_8060: la $2, sym_2_8060
+.globl sym_2_8061
+sym_2_8061: la $2, sym_2_8061
+.globl sym_2_8062
+sym_2_8062: la $2, sym_2_8062
+.globl sym_2_8063
+sym_2_8063: la $2, sym_2_8063
+.globl sym_2_8064
+sym_2_8064: la $2, sym_2_8064
+.globl sym_2_8065
+sym_2_8065: la $2, sym_2_8065
+.globl sym_2_8066
+sym_2_8066: la $2, sym_2_8066
+.globl sym_2_8067
+sym_2_8067: la $2, sym_2_8067
+.globl sym_2_8068
+sym_2_8068: la $2, sym_2_8068
+.globl sym_2_8069
+sym_2_8069: la $2, sym_2_8069
+.globl sym_2_8070
+sym_2_8070: la $2, sym_2_8070
+.globl sym_2_8071
+sym_2_8071: la $2, sym_2_8071
+.globl sym_2_8072
+sym_2_8072: la $2, sym_2_8072
+.globl sym_2_8073
+sym_2_8073: la $2, sym_2_8073
+.globl sym_2_8074
+sym_2_8074: la $2, sym_2_8074
+.globl sym_2_8075
+sym_2_8075: la $2, sym_2_8075
+.globl sym_2_8076
+sym_2_8076: la $2, sym_2_8076
+.globl sym_2_8077
+sym_2_8077: la $2, sym_2_8077
+.globl sym_2_8078
+sym_2_8078: la $2, sym_2_8078
+.globl sym_2_8079
+sym_2_8079: la $2, sym_2_8079
+.globl sym_2_8080
+sym_2_8080: la $2, sym_2_8080
+.globl sym_2_8081
+sym_2_8081: la $2, sym_2_8081
+.globl sym_2_8082
+sym_2_8082: la $2, sym_2_8082
+.globl sym_2_8083
+sym_2_8083: la $2, sym_2_8083
+.globl sym_2_8084
+sym_2_8084: la $2, sym_2_8084
+.globl sym_2_8085
+sym_2_8085: la $2, sym_2_8085
+.globl sym_2_8086
+sym_2_8086: la $2, sym_2_8086
+.globl sym_2_8087
+sym_2_8087: la $2, sym_2_8087
+.globl sym_2_8088
+sym_2_8088: la $2, sym_2_8088
+.globl sym_2_8089
+sym_2_8089: la $2, sym_2_8089
+.globl sym_2_8090
+sym_2_8090: la $2, sym_2_8090
+.globl sym_2_8091
+sym_2_8091: la $2, sym_2_8091
+.globl sym_2_8092
+sym_2_8092: la $2, sym_2_8092
+.globl sym_2_8093
+sym_2_8093: la $2, sym_2_8093
+.globl sym_2_8094
+sym_2_8094: la $2, sym_2_8094
+.globl sym_2_8095
+sym_2_8095: la $2, sym_2_8095
+.globl sym_2_8096
+sym_2_8096: la $2, sym_2_8096
+.globl sym_2_8097
+sym_2_8097: la $2, sym_2_8097
+.globl sym_2_8098
+sym_2_8098: la $2, sym_2_8098
+.globl sym_2_8099
+sym_2_8099: la $2, sym_2_8099
+.globl sym_2_8100
+sym_2_8100: la $2, sym_2_8100
+.globl sym_2_8101
+sym_2_8101: la $2, sym_2_8101
+.globl sym_2_8102
+sym_2_8102: la $2, sym_2_8102
+.globl sym_2_8103
+sym_2_8103: la $2, sym_2_8103
+.globl sym_2_8104
+sym_2_8104: la $2, sym_2_8104
+.globl sym_2_8105
+sym_2_8105: la $2, sym_2_8105
+.globl sym_2_8106
+sym_2_8106: la $2, sym_2_8106
+.globl sym_2_8107
+sym_2_8107: la $2, sym_2_8107
+.globl sym_2_8108
+sym_2_8108: la $2, sym_2_8108
+.globl sym_2_8109
+sym_2_8109: la $2, sym_2_8109
+.globl sym_2_8110
+sym_2_8110: la $2, sym_2_8110
+.globl sym_2_8111
+sym_2_8111: la $2, sym_2_8111
+.globl sym_2_8112
+sym_2_8112: la $2, sym_2_8112
+.globl sym_2_8113
+sym_2_8113: la $2, sym_2_8113
+.globl sym_2_8114
+sym_2_8114: la $2, sym_2_8114
+.globl sym_2_8115
+sym_2_8115: la $2, sym_2_8115
+.globl sym_2_8116
+sym_2_8116: la $2, sym_2_8116
+.globl sym_2_8117
+sym_2_8117: la $2, sym_2_8117
+.globl sym_2_8118
+sym_2_8118: la $2, sym_2_8118
+.globl sym_2_8119
+sym_2_8119: la $2, sym_2_8119
+.globl sym_2_8120
+sym_2_8120: la $2, sym_2_8120
+.globl sym_2_8121
+sym_2_8121: la $2, sym_2_8121
+.globl sym_2_8122
+sym_2_8122: la $2, sym_2_8122
+.globl sym_2_8123
+sym_2_8123: la $2, sym_2_8123
+.globl sym_2_8124
+sym_2_8124: la $2, sym_2_8124
+.globl sym_2_8125
+sym_2_8125: la $2, sym_2_8125
+.globl sym_2_8126
+sym_2_8126: la $2, sym_2_8126
+.globl sym_2_8127
+sym_2_8127: la $2, sym_2_8127
+.globl sym_2_8128
+sym_2_8128: la $2, sym_2_8128
+.globl sym_2_8129
+sym_2_8129: la $2, sym_2_8129
+.globl sym_2_8130
+sym_2_8130: la $2, sym_2_8130
+.globl sym_2_8131
+sym_2_8131: la $2, sym_2_8131
+.globl sym_2_8132
+sym_2_8132: la $2, sym_2_8132
+.globl sym_2_8133
+sym_2_8133: la $2, sym_2_8133
+.globl sym_2_8134
+sym_2_8134: la $2, sym_2_8134
+.globl sym_2_8135
+sym_2_8135: la $2, sym_2_8135
+.globl sym_2_8136
+sym_2_8136: la $2, sym_2_8136
+.globl sym_2_8137
+sym_2_8137: la $2, sym_2_8137
+.globl sym_2_8138
+sym_2_8138: la $2, sym_2_8138
+.globl sym_2_8139
+sym_2_8139: la $2, sym_2_8139
+.globl sym_2_8140
+sym_2_8140: la $2, sym_2_8140
+.globl sym_2_8141
+sym_2_8141: la $2, sym_2_8141
+.globl sym_2_8142
+sym_2_8142: la $2, sym_2_8142
+.globl sym_2_8143
+sym_2_8143: la $2, sym_2_8143
+.globl sym_2_8144
+sym_2_8144: la $2, sym_2_8144
+.globl sym_2_8145
+sym_2_8145: la $2, sym_2_8145
+.globl sym_2_8146
+sym_2_8146: la $2, sym_2_8146
+.globl sym_2_8147
+sym_2_8147: la $2, sym_2_8147
+.globl sym_2_8148
+sym_2_8148: la $2, sym_2_8148
+.globl sym_2_8149
+sym_2_8149: la $2, sym_2_8149
+.globl sym_2_8150
+sym_2_8150: la $2, sym_2_8150
+.globl sym_2_8151
+sym_2_8151: la $2, sym_2_8151
+.globl sym_2_8152
+sym_2_8152: la $2, sym_2_8152
+.globl sym_2_8153
+sym_2_8153: la $2, sym_2_8153
+.globl sym_2_8154
+sym_2_8154: la $2, sym_2_8154
+.globl sym_2_8155
+sym_2_8155: la $2, sym_2_8155
+.globl sym_2_8156
+sym_2_8156: la $2, sym_2_8156
+.globl sym_2_8157
+sym_2_8157: la $2, sym_2_8157
+.globl sym_2_8158
+sym_2_8158: la $2, sym_2_8158
+.globl sym_2_8159
+sym_2_8159: la $2, sym_2_8159
+.globl sym_2_8160
+sym_2_8160: la $2, sym_2_8160
+.globl sym_2_8161
+sym_2_8161: la $2, sym_2_8161
+.globl sym_2_8162
+sym_2_8162: la $2, sym_2_8162
+.globl sym_2_8163
+sym_2_8163: la $2, sym_2_8163
+.globl sym_2_8164
+sym_2_8164: la $2, sym_2_8164
+.globl sym_2_8165
+sym_2_8165: la $2, sym_2_8165
+.globl sym_2_8166
+sym_2_8166: la $2, sym_2_8166
+.globl sym_2_8167
+sym_2_8167: la $2, sym_2_8167
+.globl sym_2_8168
+sym_2_8168: la $2, sym_2_8168
+.globl sym_2_8169
+sym_2_8169: la $2, sym_2_8169
+.globl sym_2_8170
+sym_2_8170: la $2, sym_2_8170
+.globl sym_2_8171
+sym_2_8171: la $2, sym_2_8171
+.globl sym_2_8172
+sym_2_8172: la $2, sym_2_8172
+.globl sym_2_8173
+sym_2_8173: la $2, sym_2_8173
+.globl sym_2_8174
+sym_2_8174: la $2, sym_2_8174
+.globl sym_2_8175
+sym_2_8175: la $2, sym_2_8175
+.globl sym_2_8176
+sym_2_8176: la $2, sym_2_8176
+.globl sym_2_8177
+sym_2_8177: la $2, sym_2_8177
+.globl sym_2_8178
+sym_2_8178: la $2, sym_2_8178
+.globl sym_2_8179
+sym_2_8179: la $2, sym_2_8179
+.globl sym_2_8180
+sym_2_8180: la $2, sym_2_8180
+.globl sym_2_8181
+sym_2_8181: la $2, sym_2_8181
+.globl sym_2_8182
+sym_2_8182: la $2, sym_2_8182
+.globl sym_2_8183
+sym_2_8183: la $2, sym_2_8183
+.globl sym_2_8184
+sym_2_8184: la $2, sym_2_8184
+.globl sym_2_8185
+sym_2_8185: la $2, sym_2_8185
+.globl sym_2_8186
+sym_2_8186: la $2, sym_2_8186
+.globl sym_2_8187
+sym_2_8187: la $2, sym_2_8187
+.globl sym_2_8188
+sym_2_8188: la $2, sym_2_8188
+.globl sym_2_8189
+sym_2_8189: la $2, sym_2_8189
+.globl sym_2_8190
+sym_2_8190: la $2, sym_2_8190
+.globl sym_2_8191
+sym_2_8191: la $2, sym_2_8191
+.globl sym_2_8192
+sym_2_8192: la $2, sym_2_8192
+.hidden __init_array_end
+.hidden __init_array_start
+sym_3_1:
+la $2, __init_array_start
+la $2, __init_array_end
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-no-shared-1.s b/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-no-shared-1.s
new file mode 100644
index 0000000..a2eee84
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-no-shared-1.s
@@ -0,0 +1,29 @@
+ .macro one_sym count
+ .globl sym_1_\count
+sym_1_\count:
+ la $2, sym_1_\count
+ .endm
+
+
+ .text
+ .globl func1
+ .ent func1
+func1:
+ .frame $sp,0,$31
+ .set noreorder
+ .cpload $25
+ .set reorder
+ .cprestore 8
+ .set noreorder
+
+ .irp thou,0,1,2,3,4,5,6,7,8
+ .irp hund,0,1,2,3,4,5,6,7,8,9
+ .irp tens,0,1,2,3,4,5,6,7,8,9
+ .irp ones,0,1,2,3,4,5,6,7,8,9
+ one_sym \thou\hund\tens\ones
+ .endr
+ .endr
+ .endr
+ .endr
+
+ .end func1
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-no-shared-2.s b/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-no-shared-2.s
new file mode 100644
index 0000000..1de7a14
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-no-shared-2.s
@@ -0,0 +1,27 @@
+ .macro one_sym count
+ .globl sym_2_\count
+sym_2_\count:
+ la $2, sym_2_\count
+ .endm
+
+ .text
+ .ent func2
+func2:
+ .frame $sp,0,$31
+ .set noreorder
+ .cpload $25
+ .set reorder
+ .cprestore 8
+ .set noreorder
+
+ .irp thou,0,1,2,3,4,5,6,7,8
+ .irp hund,0,1,2,3,4,5,6,7,8,9
+ .irp tens,0,1,2,3,4,5,6,7,8,9
+ .irp ones,0,1,2,3,4,5,6,7,8,9
+ one_sym \thou\hund\tens\ones
+ .endr
+ .endr
+ .endr
+ .endr
+
+ .end func2
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-no-shared.d b/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-no-shared.d
new file mode 100644
index 0000000..25af107
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/multi-got-no-shared.d
@@ -0,0 +1,18 @@
+#name: MIPS multi-got-no-shared
+#as: -EB -32 -KPIC -mno-shared
+#source: multi-got-no-shared-1.s
+#source: multi-got-no-shared-2.s
+#ld: -melf32btsmip --entry func1
+#objdump: -D -j .text --prefix-addresses --show-raw-insn
+
+.*: +file format.*
+
+Disassembly of section \.text:
+004000b0 <[^>]*> 3c1c0043 lui gp,0x43
+004000b4 <[^>]*> 279c9ff0 addiu gp,gp,-24592
+004000b8 <[^>]*> afbc0008 sw gp,8\(sp\)
+#...
+00408d60 <[^>]*> 3c1c0043 lui gp,0x43
+00408d64 <[^>]*> 279c2c98 addiu gp,gp,11416
+00408d68 <[^>]*> afbc0008 sw gp,8\(sp\)
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/no-shared-1-n32.d b/binutils-2.21/ld/testsuite/ld-mips-elf/no-shared-1-n32.d
new file mode 100644
index 0000000..a28b22e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/no-shared-1-n32.d
@@ -0,0 +1,25 @@
+#as: -mabi=n32 -EB
+#source: no-shared-1-o32.s
+#ld: -melf32btsmipn32 -T no-shared-1.ld
+#objdump: -dr -j.text -j.data -j.got
+
+.*
+
+
+Disassembly of section \.text:
+
+00050000 <__start>:
+ 50000: 3c020007 lui v0,0x7
+ 50004: 24428000 addiu v0,v0,-32768
+ 50008: 8f828018 lw v0,-32744\(gp\)
+ 5000c: 8f828018 lw v0,-32744\(gp\)
+#...
+Disassembly of section \.data:
+
+00060000 <\.data>:
+ 60000: 00068000 .*
+#...
+Disassembly of section \.got:
+
+00060010 <_GLOBAL_OFFSET_TABLE_>:
+ 60010: 00000000 80000000 00068000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/no-shared-1-n64.d b/binutils-2.21/ld/testsuite/ld-mips-elf/no-shared-1-n64.d
new file mode 100644
index 0000000..ea74ebb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/no-shared-1-n64.d
@@ -0,0 +1,26 @@
+#as: -mabi=64 -EB
+#ld: -melf64btsmip -T no-shared-1.ld
+#objdump: -dr -j.text -j.data -j.got
+
+.*
+
+
+Disassembly of section \.text:
+
+0000000000050000 <__start>:
+ 50000: 3c020007 lui v0,0x7
+ 50004: 64428000 daddiu v0,v0,-32768
+ 50008: df828020 ld v0,-32736\(gp\)
+ 5000c: df828020 ld v0,-32736\(gp\)
+#...
+Disassembly of section \.data:
+
+0000000000060000 <\.data>:
+ 60000: 00000000 .*
+ 60004: 00068000 .*
+#...
+Disassembly of section \.got:
+
+0000000000060010 <_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+ 60018: 80000000 00000000 00000000 00068000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/no-shared-1-n64.s b/binutils-2.21/ld/testsuite/ld-mips-elf/no-shared-1-n64.s
new file mode 100644
index 0000000..8eedf12
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/no-shared-1-n64.s
@@ -0,0 +1,13 @@
+ .abicalls
+ .text
+ .globl __start
+ .ent __start
+__start:
+ lui $2,%hi(__gnu_local_gp)
+ daddiu $2,$2,%lo(__gnu_local_gp)
+ ld $2,%got(__gnu_local_gp)($gp)
+ ld $2,%call16(__gnu_local_gp)($gp)
+ .end __start
+
+ .data
+ .8byte __gnu_local_gp
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/no-shared-1-o32.d b/binutils-2.21/ld/testsuite/ld-mips-elf/no-shared-1-o32.d
new file mode 100644
index 0000000..b67737f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/no-shared-1-o32.d
@@ -0,0 +1,24 @@
+#as: -mabi=32 -EB
+#ld: -melf32btsmip -T no-shared-1.ld
+#objdump: -dr -j.text -j.data -j.got
+
+.*
+
+
+Disassembly of section \.text:
+
+00050000 <__start>:
+ 50000: 3c020007 lui v0,0x7
+ 50004: 24428000 addiu v0,v0,-32768
+ 50008: 8f828018 lw v0,-32744\(gp\)
+ 5000c: 8f828018 lw v0,-32744\(gp\)
+#...
+Disassembly of section \.data:
+
+00060000 <\.data>:
+ 60000: 00068000 .*
+#...
+Disassembly of section \.got:
+
+00060010 <_GLOBAL_OFFSET_TABLE_>:
+ 60010: 00000000 80000000 00068000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/no-shared-1-o32.s b/binutils-2.21/ld/testsuite/ld-mips-elf/no-shared-1-o32.s
new file mode 100644
index 0000000..f00fc4b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/no-shared-1-o32.s
@@ -0,0 +1,13 @@
+ .abicalls
+ .text
+ .globl __start
+ .ent __start
+__start:
+ lui $2,%hi(__gnu_local_gp)
+ addiu $2,$2,%lo(__gnu_local_gp)
+ lw $2,%got(__gnu_local_gp)($gp)
+ lw $2,%call16(__gnu_local_gp)($gp)
+ .end __start
+
+ .data
+ .4byte __gnu_local_gp
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/no-shared-1.ld b/binutils-2.21/ld/testsuite/ld-mips-elf/no-shared-1.ld
new file mode 100644
index 0000000..06d28a6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/no-shared-1.ld
@@ -0,0 +1,11 @@
+SECTIONS
+{
+ . = 0x50000;
+ .text : { *(.text) }
+ .MIPS.stubs : { *(.MIPS.stubs) }
+
+ . = 0x60000;
+ .data : { *(.data) }
+ _gp = ALIGN (16) + 0x7ff0;
+ .got : { *(.got) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1-rel.dd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1-rel.dd
new file mode 100644
index 0000000..4d15a58
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1-rel.dd
@@ -0,0 +1,46 @@
+
+.*
+
+Disassembly of section \.text:
+
+00000000 <f1>:
+ 0: 3c1c0000 lui gp,0x0
+ 0: R_MIPS_HI16 _gp_disp
+ 4: 279c0000 addiu gp,gp,0
+ 4: R_MIPS_LO16 _gp_disp
+ 8: 0399e021 addu gp,gp,t9
+ c: 0c000000 jal 0 .*
+ c: R_MIPS_26 f3
+ 10: 00000000 nop
+ 14: 03e00008 jr ra
+ 18: 00000000 nop
+
+0000001c <f2>:
+ 1c: 3c1c0000 lui gp,0x0
+ 1c: R_MIPS_HI16 _gp_disp
+ 20: 279c0000 addiu gp,gp,0
+ 20: R_MIPS_LO16 _gp_disp
+ 24: 0399e021 addu gp,gp,t9
+ 28: 03e00008 jr ra
+ 2c: 00000000 nop
+
+00000030 <f3>:
+ 30: f000 6a00 li v0,0
+ 30: R_MIPS16_HI16 _gp_disp
+ 34: f000 0b00 la v1,34 .*
+ 34: R_MIPS16_LO16 _gp_disp
+ 38: f400 3240 sll v0,16
+ 3c: e269 addu v0,v1
+ 3e: 6500 nop
+
+00000040 <__start>:
+ 40: 0c000000 jal 0 .*
+ 40: R_MIPS_26 f1
+ 44: 00000000 nop
+ 48: 0c000000 jal 0 .*
+ 48: R_MIPS_26 f2
+ 4c: 00000000 nop
+ 50: 0c000000 jal 0 .*
+ 50: R_MIPS_26 f3
+ 54: 00000000 nop
+ ...
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1-rel.nd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1-rel.nd
new file mode 100644
index 0000000..1d49c4e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1-rel.nd
@@ -0,0 +1,5 @@
+#...
+.*: 00000030 +14 +FUNC +GLOBAL +DEFAULT +\[MIPS16\] .* f3
+.*: 00000040 +24 +FUNC +GLOBAL +DEFAULT +.* __start
+.*: 0000001c +20 +FUNC +GLOBAL +DEFAULT +\[MIPS PIC\] .* f2
+.*: 00000000 +28 +FUNC +GLOBAL +DEFAULT +\[MIPS PIC\] .* f1
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1.dd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1.dd
new file mode 100644
index 0000000..9d5b1db
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1.dd
@@ -0,0 +1,46 @@
+
+.*
+
+Disassembly of section \.text:
+
+00041000 <\.pic\.f2>:
+ 41000: 3c190004 lui t9,0x4
+ 41004: 0801040f j 4103c <f2>
+ 41008: 2739103c addiu t9,t9,4156
+ \.\.\.
+
+00041018 <\.pic\.f1>:
+ 41018: 3c190004 lui t9,0x4
+ 4101c: 27391020 addiu t9,t9,4128
+
+00041020 <f1>:
+ 41020: 3c1c0002 lui gp,0x2
+ 41024: 279c6fe0 addiu gp,gp,28640
+ 41028: 0399e021 addu gp,gp,t9
+ 4102c: 74010414 jalx 41050 <f3>
+ 41030: 00000000 nop
+ 41034: 03e00008 jr ra
+ 41038: 00000000 nop
+
+0004103c <f2>:
+ 4103c: 3c1c0002 lui gp,0x2
+ 41040: 279c6fc4 addiu gp,gp,28612
+ 41044: 0399e021 addu gp,gp,t9
+ 41048: 03e00008 jr ra
+ 4104c: 00000000 nop
+
+00041050 <f3>:
+ 41050: f000 6a02 li v0,2
+ 41054: f7ad 0b0c la v1,48000 .*
+ 41058: f400 3240 sll v0,16
+ 4105c: e269 addu v0,v1
+ 4105e: 6500 nop
+
+00041060 <__start>:
+ 41060: 0c010406 jal 41018 <\.pic\.f1>
+ 41064: 00000000 nop
+ 41068: 0c010400 jal 41000 <\.pic\.f2>
+ 4106c: 00000000 nop
+ 41070: 74010414 jalx 41050 <f3>
+ 41074: 00000000 nop
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1.ld b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1.ld
new file mode 100644
index 0000000..3aa140e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1.ld
@@ -0,0 +1,9 @@
+SECTIONS
+{
+ . = 0x40000;
+ .reginfo : { *(.reginfo) }
+ .pdr : { *(.pdr) }
+ . = 0x41000;
+ .text : { *(.text) }
+ _gp = 0x68000;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1.nd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1.nd
new file mode 100644
index 0000000..4fc9ae3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1.nd
@@ -0,0 +1,9 @@
+#...
+.*: 00041018 +8 +FUNC +LOCAL +DEFAULT .* .pic.f1
+.*: 00041000 +16 +FUNC +LOCAL +DEFAULT .* .pic.f2
+.*: 00000000 +0 +OBJECT +GLOBAL +DEFAULT +UND _gp_disp
+.*: 00068000 +0 +NOTYPE +GLOBAL +DEFAULT +ABS _gp
+.*: 00041050 +14 +FUNC +GLOBAL +DEFAULT +\[MIPS16\] .* f3
+.*: 00041060 +24 +FUNC +GLOBAL +DEFAULT .* __start
+.*: 0004103c +20 +FUNC +GLOBAL +DEFAULT .* f2
+.*: 00041020 +28 +FUNC +GLOBAL +DEFAULT .* f1
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1a.s b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1a.s
new file mode 100644
index 0000000..c54030e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1a.s
@@ -0,0 +1,31 @@
+ .abicalls
+ .global f1
+ .global f2
+ .global f3
+ .ent f1
+f1:
+ .set noreorder
+ .cpload $25
+ .set reorder
+ .option pic0
+ jal f3
+ .option pic2
+ jr $31
+ .end f1
+
+ .ent f2
+f2:
+ .set noreorder
+ .cpload $25
+ .set reorder
+ jr $31
+ .end f2
+
+ .set mips16
+ .ent f3
+f3:
+ li $2,%hi(_gp_disp)
+ addiu $3,$pc,%lo(_gp_disp)
+ sll $2,16
+ addu $2,$2,$3
+ .end f3
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1b.s b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1b.s
new file mode 100644
index 0000000..5739fef
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-1b.s
@@ -0,0 +1,9 @@
+ .abicalls
+ .option pic0
+ .global __start
+ .ent __start
+__start:
+ jal f1
+ jal f2
+ jal f3
+ .end __start
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-2.d b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-2.d
new file mode 100644
index 0000000..da28cc3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-2.d
@@ -0,0 +1,23 @@
+#source: pic-and-nonpic-2a.s
+#source: pic-and-nonpic-2b.s
+#as: -32 -EB
+#ld: -melf32btsmip -Tpic-and-nonpic-1.ld
+#objdump: -dr
+
+.*
+
+Disassembly of section \.text:
+
+00041000 <__start>:
+ 41000: 0c010406 jal 41018 <\.pic\.foo@@V2>
+ 41004: 00000000 nop
+ \.\.\.
+
+00041018 <\.pic\.foo@@V2>:
+ 41018: 3c190004 lui t9,0x4
+ 4101c: 27391020 addiu t9,t9,4128
+
+00041020 <foo2>:
+ 41020: 03e00008 jr ra
+ 41024: 00000000 nop
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-2a.s b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-2a.s
new file mode 100644
index 0000000..45a490f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-2a.s
@@ -0,0 +1,7 @@
+ .abicalls
+ .option pic0
+ .global __start
+ .ent __start
+__start:
+ jal foo
+ .end __start
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-2b.s b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-2b.s
new file mode 100644
index 0000000..4770b22
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-2b.s
@@ -0,0 +1,6 @@
+ .abicalls
+ .symver foo2,foo@@V2
+ .global foo2
+ .ent foo2
+foo2: jr $31
+ .end foo2
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3-error.d b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3-error.d
new file mode 100644
index 0000000..975ffa7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3-error.d
@@ -0,0 +1,5 @@
+#name: PIC and non-PIC test 3 (error)
+#source: pic-and-nonpic-3b.s
+#as: -EB -32 -mips2
+#ld: tmpdir/pic-and-nonpic-3a.so -melf32btsmip -znocopyreloc
+#error: .*: non-dynamic relocations refer to dynamic symbol foo
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.dd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.dd
new file mode 100644
index 0000000..320e4ca
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.dd
@@ -0,0 +1,39 @@
+# GOT layout:
+#
+# -32752: lazy resolution function
+# -32748: reserved for module pointer
+# -32744: the GOT page entry
+# -32740: foo's GOT entry
+# -32736: ext's GOT entry
+
+.*
+
+Disassembly of section \.text:
+
+00000800 <foo>:
+ 800: 3c1c0001 lui gp,0x1
+ 804: 279c7bf0 addiu gp,gp,31728
+ 808: 0399e021 addu gp,gp,t9
+ 80c: 8f99801c lw t9,-32740\(gp\)
+ 810: 8f828018 lw v0,-32744\(gp\)
+ 814: 03200008 jr t9
+ 818: 24420000 addiu v0,v0,0
+
+0000081c <bar>:
+ 81c: f000 6a01 li v0,1
+ 820: f3cf 0a10 la v0,83f0 .*
+ 824: f400 3240 sll v0,16
+ 828: e269 addu v0,v1
+ 82a: f030 9a60 lw v1,-32736\(v0\)
+ 82e: 659a move gp,v0
+ 830: eb00 jr v1
+ 832: 653b move t9,v1
+#...
+Disassembly of section \.MIPS\.stubs:
+
+00000c00 <.MIPS.stubs>:
+ c00: 8f998010 lw t9,-32752\(gp\)
+ c04: 03e07821 move t7,ra
+ c08: 0320f809 jalr t9
+ c0c: 24180007 li t8,7
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.gd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.gd
new file mode 100644
index 0000000..aa9579b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.gd
@@ -0,0 +1,18 @@
+
+Primary GOT:
+ Canonical gp value: 000183f0
+
+ Reserved entries:
+ Address Access Initial Purpose
+ 00010400 -32752\(gp\) 00000000 Lazy resolver
+ 00010404 -32748\(gp\) 80000000 Module pointer \(GNU extension\)
+
+ Local entries:
+ Address Access Initial
+ 00010408 -32744\(gp\) 00010000
+
+ Global entries:
+ Address Access Initial Sym\.Val\. Type Ndx Name
+ 0001040c -32740\(gp\) 00000800 00000800 FUNC 6 foo
+ 00010410 -32736\(gp\) 00000c00 00000c00 FUNC UND ext
+
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.ld b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.ld
new file mode 100644
index 0000000..cc4bd55
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.ld
@@ -0,0 +1,23 @@
+SECTIONS
+{
+ . = 0;
+ .reginfo : { *(.reginfo) }
+
+ . = ALIGN (0x400);
+ .dynamic : { *(.dynamic) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+
+ . = ALIGN (0x400);
+ .text : { *(.text) }
+
+ . = ALIGN (0x400);
+ .MIPS.stubs : { *(.MIPS.stubs) }
+
+ . = ALIGN (0x10000);
+ .data : { *(.data) }
+
+ . = ALIGN (0x400);
+ _gp = . + 0x7ff0;
+ .got : { *(.got) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.s b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.s
new file mode 100644
index 0000000..385e7fd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.s
@@ -0,0 +1,29 @@
+ .abicalls
+ .set noreorder
+ .set nomips16
+ .global foo
+ .ent foo
+foo:
+ .cpload $25
+ lw $25,%call16(foo)($28)
+ lw $2,%got(data)($28)
+ jr $25
+ addiu $2,$2,%lo(data)
+ .end foo
+
+ .set mips16
+ .global bar
+ .ent bar
+bar:
+ li $2,%hi(_gp_disp)
+ addiu $2,$pc,%lo(_gp_disp)
+ sll $2,16
+ addu $2,$2,$3
+ lw $3,%call16(ext)($2)
+ move $28,$2
+ jr $3
+ move $25,$3
+ .end bar
+
+ .data
+data: .word 0x12345678
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.sd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.sd
new file mode 100644
index 0000000..58b50c3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.sd
@@ -0,0 +1,20 @@
+
+Elf file type is DYN \(Shared object file\)
+Entry point .*
+There are 5 program headers, starting at offset .*
+
+Program Headers:
+ * Type * Offset * VirtAddr * PhysAddr * FileSiz * MemSiz * Flg * Align
+ * REGINFO * [^ ]+ * 0x0+00000 * 0x0+00000 [^ ]+ * [^ ]+ * R * 0x.*
+ * LOAD * [^ ]+ * 0x0+00000 * 0x0+00000 [^ ]+ * [^ ]+ * R E * 0x.*
+ * LOAD * [^ ]+ * 0x0+10000 * 0x0+10000 [^ ]+ * [^ ]+ * RW * 0x.*
+ * DYNAMIC * [^ ]+ * 0x0+00400 * 0x0+00400 .*
+ * NULL * .*
+
+ *Section to Segment mapping:
+ *Segment Sections\.\.\.
+ *0*0 * \.reginfo *
+ *0*1 * \.reginfo \.dynamic \.dynsym \.dynstr \.hash \.text \.MIPS.stubs *
+ *0*2 * \.data \.got *
+ *0*3 * \.dynamic *
+ *0*4 *
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.ad b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.ad
new file mode 100644
index 0000000..fdcc0b1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.ad
@@ -0,0 +1,27 @@
+
+Dynamic section at offset .* contains .*:
+ * Tag * Type * Name/Value
+ 0x00000001 \(NEEDED\) .*
+ 0x00000004 \(HASH\) .*
+ 0x00000005 \(STRTAB\) .*
+ 0x00000006 \(SYMTAB\) .*
+ 0x0000000a \(STRSZ\) .*
+ 0x0000000b \(SYMENT\) .*
+ 0x70000016 \(MIPS_RLD_MAP\) * 0x80000
+ 0x00000015 \(DEBUG\) * 0x0
+ 0x00000003 \(PLTGOT\) * 0xa0000
+ 0x70000001 \(MIPS_RLD_VERSION\) * 1
+ 0x70000005 \(MIPS_FLAGS\) * NOTPOT
+ 0x70000006 \(MIPS_BASE_ADDRESS\) * 0x40000
+# This must be the number of GOT entries - 1, the last entry being for "bar".
+ 0x7000000a \(MIPS_LOCAL_GOTNO\) * 3
+# This must be MIPS_GOTSYM + 1.
+ 0x70000011 \(MIPS_SYMTABNO\) * 8
+ 0x70000012 \(MIPS_UNREFEXTNO\) .*
+# This must be the index of "bar".
+ 0x70000013 \(MIPS_GOTSYM\) * 0x7
+ 0x00000014 \(PLTREL\) * REL
+ 0x00000017 \(JMPREL\) * 0x43000
+ 0x00000002 \(PLTRELSZ\) * 8 \(bytes\)
+ 0x70000032 \(MIPS_PLTGOT\) * 0x81000
+ 0x00000000 \(NULL\) * 0x0
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.dd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.dd
new file mode 100644
index 0000000..dffa7f6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.dd
@@ -0,0 +1,52 @@
+# GOT layout:
+#
+# -32752: lazy resolution function
+# -32748: reserved for module pointer
+# -32744: GOT page entry.
+# -32740: bar's GOT entry
+
+.*
+
+Disassembly of section \.plt:
+
+00043020 <.*>:
+.*: 3c1c0008 lui gp,0x8
+.*: 8f991000 lw t9,4096\(gp\)
+.*: 279c1000 addiu gp,gp,4096
+.*: 031cc023 subu t8,t8,gp
+.*: 03e07821 move t7,ra
+.*: 0018c082 srl t8,t8,0x2
+.*: 0320f809 jalr t9
+.*: 2718fffe addiu t8,t8,-2
+
+00043040 <foo@plt>:
+.*: 3c0f0008 lui t7,0x8
+.*: 8df91008 lw t9,4104\(t7\)
+.*: 03200008 jr t9
+.*: 25f81008 addiu t8,t7,4104
+
+Disassembly of section \.text:
+
+00044000 <__start>:
+.*: 0c010c10 jal 43040 <foo@plt>
+.*: 00000000 nop
+.*: 08011004 j 44010 <ext>
+.*: 00000000 nop
+
+00044010 <ext>:
+.*: 3c1c000a lui gp,0xa
+.*: 279c7ff0 addiu gp,gp,32752
+.*: 8f828018 lw v0,-32744\(gp\)
+.*: 24421000 addiu v0,v0,4096
+.*: 8f99801c lw t9,-32740\(gp\)
+.*: 03200008 jr t9
+.*: 00000000 nop
+.*: 00000000 nop
+Disassembly of section .MIPS.stubs:
+
+00044030 <\.MIPS\.stubs>:
+.*: 8f998010 lw t9,-32752\(gp\)
+.*: 03e07821 move t7,ra
+.*: 0320f809 jalr t9
+.*: 24180007 li t8,7
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.gd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.gd
new file mode 100644
index 0000000..6d3d677
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.gd
@@ -0,0 +1,28 @@
+
+Primary GOT:
+ Canonical gp value: 000a7ff0
+
+ Reserved entries:
+ Address Access Initial Purpose
+ 000a0000 -32752\(gp\) 00000000 Lazy resolver
+ 000a0004 -32748\(gp\) 80000000 Module pointer \(GNU extension\)
+
+ Local entries:
+ Address Access Initial
+ 000a0008 -32744\(gp\) 000a0000
+
+ Global entries:
+ Address Access Initial Sym\.Val\. Type Ndx Name
+ 000a000c -32740\(gp\) 00044030 00044030 FUNC UND bar
+
+
+PLT GOT:
+
+ Reserved entries:
+ Address Initial Purpose
+ 00081000 00000000 PLT lazy resolver
+ 00081004 00000000 Module pointer
+
+ Entries:
+ Address Initial Sym.Val. Type Ndx Name
+ 00081008 00043020 00000000 FUNC UND foo
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.ld b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.ld
new file mode 100644
index 0000000..d41c8f9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.ld
@@ -0,0 +1,35 @@
+SECTIONS
+{
+ . = 0x40000 + SIZEOF_HEADERS;
+ .interp : { *(.interp) }
+
+ . = 0x41000;
+ .reginfo : { *(.reginfo) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+
+ . = 0x42000;
+ .dynamic : { *(.dynamic) }
+
+ . = 0x43000;
+ .rel.plt : { *(.rel.plt) }
+ .plt : { *(.plt) }
+
+ . = 0x44000;
+ .text : { *(.text) }
+ .MIPS.stubs : { *(.MIPS.stubs) }
+
+ . = 0x80000;
+ .rld_map : { *(.rld_map) }
+
+ . = 0x81000;
+ .got.plt : { *(.got.plt) }
+
+ . = 0xa0000;
+ _gp = . + 0x7ff0;
+ .got : { *(.got) }
+
+ . = 0xa1000;
+ .data : { *(.data) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.nd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.nd
new file mode 100644
index 0000000..09c9411
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.nd
@@ -0,0 +1,9 @@
+
+Symbol table '\.dynsym' contains .*:
+#...
+.*: 00000000 +0 +FUNC +GLOBAL +DEFAULT +UND +foo
+# The index on the next line should correspond to MIPS_GOTSYM.
+#...
+ *7: 00044030 +0 +FUNC +GLOBAL +DEFAULT +UND +bar
+
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.pd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.pd
new file mode 100644
index 0000000..00f8713
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.pd
@@ -0,0 +1,5 @@
+
+.*
+
+Contents of section \.got\.plt:
+ 81000 00000000 00000000 00043020 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.rd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.rd
new file mode 100644
index 0000000..d3418db
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.rd
@@ -0,0 +1,4 @@
+
+Relocation section '\.rel\.plt' at offset .* contains .*:
+ * Offset * Info * Type * Sym\.Value * Sym\. Name
+00081008 * 0000057f * R_MIPS_JUMP_SLOT * 00000000 * foo
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.s b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.s
new file mode 100644
index 0000000..571c774
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.s
@@ -0,0 +1,22 @@
+ .abicalls
+ .option pic0
+ .global __start
+ .ent __start
+__start:
+ jal foo
+ j ext
+ .end __start
+
+ .global ext
+ .ent ext
+ext:
+ lui $gp,%hi(__gnu_local_gp)
+ addiu $gp,$gp,%lo(__gnu_local_gp)
+ lw $2,%got(local)($gp)
+ addiu $2,$2,%lo(local)
+ lw $25,%call16(bar)($gp)
+ jr $25
+ .end ext
+
+ .data
+local: .word 1
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.sd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.sd
new file mode 100644
index 0000000..c73ac59
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.sd
@@ -0,0 +1,27 @@
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x44000
+There are 8 program headers, starting at offset .*
+
+Program Headers:
+ * Type * Offset * VirtAddr * PhysAddr * FileSiz * MemSiz * Flg * Align
+ * PHDR * .*
+ * INTERP * .*
+.*
+ * REGINFO * [^ ]+ * 0x0+41000 * 0x0+41000 * [^ ]+ * [^ ]+ * R * 0x.*
+ * LOAD * [^ ]+ * 0x0+40000 * 0x0+40000 [^ ]+ * [^ ]+ * R E * 0x.*
+ * LOAD * [^ ]+ * 0x0+80000 * 0x0+80000 [^ ]+ * [^ ]+ * RW * 0x.*
+ * LOAD * [^ ]+ * 0x0+a0000 * 0x0+a0000 [^ ]+ * [^ ]+ * RW * 0x.*
+ * DYNAMIC * [^ ]+ * 0x0+42000 * 0x0+42000 .*
+ * NULL * .*
+
+ *Section to Segment mapping:
+ *Segment Sections\.\.\.
+ *0*0 *
+ *0*1 *\.interp *
+ *0*2 *\.reginfo *
+ *0*3 *\.interp \.reginfo \.hash \.dynsym \.dynstr \.dynamic \.rel\.plt \.plt \.text \.MIPS.stubs *
+ *0*4 *\.rld_map \.got\.plt *
+ *0*5 *\.got \.data *
+ *0*6 *\.dynamic *
+ *0*7 *
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4-error.d b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4-error.d
new file mode 100644
index 0000000..7bc0c25
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4-error.d
@@ -0,0 +1,5 @@
+#name: PIC and non-PIC test 4 (error)
+#source: pic-and-nonpic-4b.s
+#as: -EB -32 -mips2
+#ld: tmpdir/pic-and-nonpic-4a.so -melf32btsmip -znocopyreloc
+#error: .*: non-dynamic relocations refer to dynamic symbol obj1
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4a.s b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4a.s
new file mode 100644
index 0000000..54b285a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4a.s
@@ -0,0 +1,22 @@
+ .abicalls
+ .option pic0
+ .global obj1
+ .global obj2
+ .global obj3
+
+ .type obj1,%object
+ .type obj2,%object
+ .type obj3,%object
+
+ .size obj1,8
+ .size obj2,4
+ .size obj3,16
+
+ .data
+obj1:
+ .word 1, 2
+obj2:
+ .word 3
+obj3:
+ .word 5, 6, 7, 8
+
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.ad b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.ad
new file mode 100644
index 0000000..ad300b4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.ad
@@ -0,0 +1,26 @@
+
+Dynamic section at offset .* contains .*:
+ * Tag * Type * Name/Value
+ 0x00000001 \(NEEDED\) .*
+ 0x00000004 \(HASH\) .*
+ 0x00000005 \(STRTAB\) .*
+ 0x00000006 \(SYMTAB\) .*
+ 0x0000000a \(STRSZ\) .*
+ 0x0000000b \(SYMENT\) .*
+ 0x70000016 \(MIPS_RLD_MAP\) * 0x80000
+ 0x00000015 \(DEBUG\) * 0x0
+ 0x00000003 \(PLTGOT\) * 0xa0000
+ 0x00000011 \(REL\) * 0x43000
+ 0x00000012 \(RELSZ\) * 32 \(bytes\)
+ 0x00000013 \(RELENT\) * 8 \(bytes\)
+ 0x70000001 \(MIPS_RLD_VERSION\) * 1
+ 0x70000005 \(MIPS_FLAGS\) * NOTPOT
+ 0x70000006 \(MIPS_BASE_ADDRESS\) * 0x40000
+# This must be the number of GOT entries - 1, the last entry being for "obj3".
+ 0x7000000a \(MIPS_LOCAL_GOTNO\) * 2
+# This must be MIPS_GOTSYM + 1.
+ 0x70000011 \(MIPS_SYMTABNO\) * 8
+ 0x70000012 \(MIPS_UNREFEXTNO\) .*
+# This must be the index of "obj3".
+ 0x70000013 \(MIPS_GOTSYM\) * 0x7
+ 0x00000000 \(NULL\) * 0x0
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.dd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.dd
new file mode 100644
index 0000000..d276098
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.dd
@@ -0,0 +1,10 @@
+
+.*
+
+Disassembly of section \.text:
+
+00044000 <__start>:
+ 44000: 3c02000a lui v0,0xa
+ 44004: 24422000 addiu v0,v0,8192
+ 44008: 000a2008 .*
+ 4400c: 00000000 nop
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.gd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.gd
new file mode 100644
index 0000000..0a8a77d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.gd
@@ -0,0 +1,7 @@
+
+.*
+
+Contents of section \.got:
+ a0000 00000000 80000000 00000000 .*
+Contents of section \.data:
+ a1000 000a2008 00000000 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.ld b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.ld
new file mode 100644
index 0000000..bcf9e3a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.ld
@@ -0,0 +1,33 @@
+SECTIONS
+{
+ . = 0x40000 + SIZEOF_HEADERS;
+ .interp : { *(.interp) }
+
+ . = 0x41000;
+ .reginfo : { *(.reginfo) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+
+ . = 0x42000;
+ .dynamic : { *(.dynamic) }
+
+ . = 0x43000;
+ .rel.dyn : { *(.rel.dyn) }
+
+ . = 0x44000;
+ .text : { *(.text) }
+
+ . = 0x80000;
+ .rld_map : { *(.rld_map) }
+
+ . = 0xa0000;
+ _gp = . + 0x7ff0;
+ .got : { *(.got) }
+
+ . = 0xa1000;
+ .data : { *(.data) }
+
+ . = 0xa2000;
+ .bss : { *(.dynbss) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.nd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.nd
new file mode 100644
index 0000000..047d569
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.nd
@@ -0,0 +1,12 @@
+
+Symbol table '\.dynsym' contains .*:
+# The order of the next two symbols is not important.
+#...
+.*: 000a2000 +8 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +obj1
+#...
+.*: 000a2008 +4 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +obj2
+# The index on the next line should correspond to MIPS_GOTSYM.
+#...
+ *7: 0+ +0 +OBJECT +GLOBAL +DEFAULT +UND +obj3
+
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.rd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.rd
new file mode 100644
index 0000000..452d9c7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.rd
@@ -0,0 +1,7 @@
+
+Relocation section '\.rel\.dyn' at offset .* contains .*:
+ * Offset * Info * Type * Sym\.Value * Sym\. Name
+00000000 * 00000000 * R_MIPS_NONE *
+000a2000 * 0000017e * R_MIPS_COPY * 000a2000 * obj1
+000a2008 * 0000047e * R_MIPS_COPY * 000a2008 * obj2
+000a1004 * 00000703 * R_MIPS_REL32 * 00000000 * obj3
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.s b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.s
new file mode 100644
index 0000000..7e25bf4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.s
@@ -0,0 +1,13 @@
+ .abicalls
+ .option pic0
+ .global __start
+ .ent __start
+__start:
+ lui $2,%hi(obj1)
+ addiu $2,$2,%lo(obj1)
+ .end __start
+ .word obj2
+
+ .data
+ .word obj2
+ .word obj3
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.sd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.sd
new file mode 100644
index 0000000..14b13ed
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.sd
@@ -0,0 +1,27 @@
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x44000
+There are 8 program headers, starting at offset .*
+
+Program Headers:
+ * Type * Offset * VirtAddr * PhysAddr * FileSiz * MemSiz * Flg * Align
+ * PHDR * .*
+ * INTERP * .*
+.*
+ * REGINFO * [^ ]+ * 0x0+41000 * 0x0+41000 * [^ ]+ * [^ ]+ * R * 0x.*
+ * LOAD * [^ ]+ * 0x0+40000 * 0x0+40000 [^ ]+ * [^ ]+ * R E * 0x.*
+ * LOAD * [^ ]+ * 0x0+80000 * 0x0+80000 [^ ]+ * [^ ]+ * RW * 0x.*
+ * LOAD * [^ ]+ * 0x0+a0000 * 0x0+a0000 [^ ]+ * [^ ]+ * RW * 0x.*
+ * DYNAMIC * [^ ]+ * 0x0+42000 * 0x0+42000 .*
+ * NULL * .*
+
+ *Section to Segment mapping:
+ *Segment Sections\.\.\.
+ *0*0 *
+ *0*1 * \.interp *
+ *0*2 * \.reginfo *
+ *0*3 * \.interp \.reginfo \.hash \.dynsym \.dynstr \.dynamic \.rel\.dyn \.text *
+ *0*4 * \.rld_map *
+ *0*5 * \.got \.data \.bss *
+ *0*6 * \.dynamic *
+ *0*7 *
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5a.s b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5a.s
new file mode 100644
index 0000000..7452f5e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5a.s
@@ -0,0 +1,16 @@
+ .abicalls
+ .option pic0
+ .global __start
+ .ent __start
+__start:
+ lui $2,%hi(foo)
+ addiu $2,$2,%lo(foo)
+ lui $2,%hi(obj1)
+ addiu $2,$2,%lo(obj1)
+ .end __start
+
+ .data
+ .word foo
+ .word bar
+ .word obj1
+ .word obj2
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.ad b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.ad
new file mode 100644
index 0000000..e448ec2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.ad
@@ -0,0 +1,32 @@
+
+Dynamic section at offset .* contains .*:
+ * Tag * Type * Name/Value
+ 0x00000001 \(NEEDED\) .*
+ 0x00000001 \(NEEDED\) .*
+ 0x00000004 \(HASH\) .*
+ 0x00000005 \(STRTAB\) .*
+ 0x00000006 \(SYMTAB\) .*
+ 0x0000000a \(STRSZ\) .*
+ 0x0000000b \(SYMENT\) .*
+ 0x70000016 \(MIPS_RLD_MAP\) * 0x80000
+ 0x00000015 \(DEBUG\) * 0x0
+ 0x00000016 \(TEXTREL\) * 0x0
+ 0x00000003 \(PLTGOT\) * 0xa0000
+ 0x00000011 \(REL\) * 0x43000
+ 0x00000012 \(RELSZ\) * 48 \(bytes\)
+ 0x00000013 \(RELENT\) * 8 \(bytes\)
+ 0x70000001 \(MIPS_RLD_VERSION\) * 1
+ 0x70000005 \(MIPS_FLAGS\) * NOTPOT
+ 0x70000006 \(MIPS_BASE_ADDRESS\) * 0x40000
+# This must be the number of GOT entries - 2. The last two entries are
+# for "bar" and "obj2".
+ 0x7000000a \(MIPS_LOCAL_GOTNO\) * 2
+# This must be MIPS_GOTSYM + 2.
+ 0x70000011 \(MIPS_SYMTABNO\) * 10
+ 0x70000012 \(MIPS_UNREFEXTNO\) * .*
+ 0x70000013 \(MIPS_GOTSYM\) * 0x8
+ 0x00000014 \(PLTREL\) * REL
+ 0x00000017 \(JMPREL\) * 0x43030
+ 0x00000002 \(PLTRELSZ\) * 8 \(bytes\)
+ 0x70000032 \(MIPS_PLTGOT\) * 0x81000
+ 0x00000000 \(NULL\) * 0x0
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.dd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.dd
new file mode 100644
index 0000000..9adfb31
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.dd
@@ -0,0 +1,34 @@
+
+.*
+
+Disassembly of section \.plt:
+
+00043040 <.*>:
+.*: 3c1c0008 lui gp,0x8
+.*: 8f991000 lw t9,4096\(gp\)
+.*: 279c1000 addiu gp,gp,4096
+.*: 031cc023 subu t8,t8,gp
+.*: 03e07821 move t7,ra
+.*: 0018c082 srl t8,t8,0x2
+.*: 0320f809 jalr t9
+.*: 2718fffe addiu t8,t8,-2
+
+00043060 <foo@plt>:
+.*: 3c0f0008 lui t7,0x8
+.*: 8df91008 lw t9,4104\(t7\)
+.*: 03200008 jr t9
+.*: 25f81008 addiu t8,t7,4104
+
+Disassembly of section .text:
+
+00044000 <__start>:
+ 44000: 3c020004 lui v0,0x4
+ 44004: 24423060 addiu v0,v0,12384
+ 44008: 3c02000a lui v0,0xa
+ 4400c: 24422000 addiu v0,v0,8192
+
+00044010 <ext>:
+ 44010: 00043060 .*
+ 44014: 00000000 .*
+ 44018: 000a2000 .*
+ 4401c: 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.gd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.gd
new file mode 100644
index 0000000..6919a69
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.gd
@@ -0,0 +1,26 @@
+
+Primary GOT:
+ Canonical gp value: 000a7ff0
+
+ Reserved entries:
+ Address Access Initial Purpose
+ 000a0000 -32752\(gp\) 00000000 Lazy resolver
+ 000a0004 -32748\(gp\) 80000000 Module pointer \(GNU extension\)
+
+# There must be GOT entries for the R_MIPS_REL32 relocation symbols.
+ Global entries:
+ Address Access Initial Sym\.Val\. Type Ndx Name
+ 000a0008 -32744\(gp\) 00000000 00000000 OBJECT UND obj2
+ 000a000c -32740\(gp\) 00000000 00000000 FUNC UND bar
+
+
+PLT GOT:
+
+ Reserved entries:
+ Address Initial Purpose
+ 00081000 00000000 PLT lazy resolver
+ 00081004 00000000 Module pointer
+
+ Entries:
+ Address Initial Sym.Val. Type Ndx Name
+ 00081008 00043040 00043060 FUNC UND foo
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.ld b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.ld
new file mode 100644
index 0000000..6cb7530
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.ld
@@ -0,0 +1,38 @@
+SECTIONS
+{
+ . = 0x40000 + SIZEOF_HEADERS;
+ .interp : { *(.interp) }
+
+ . = 0x41000;
+ .reginfo : { *(.reginfo) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+
+ . = 0x42000;
+ .dynamic : { *(.dynamic) }
+
+ . = 0x43000;
+ .rel.dyn : { *(.rel.dyn) }
+ .rel.plt : { *(.rel.plt) }
+ .plt : { *(.plt) }
+
+ . = 0x44000;
+ .text : { *(.text) }
+
+ . = 0x80000;
+ .rld_map : { *(.rld_map) }
+
+ . = 0x81000;
+ .got.plt : { *(.got.plt) }
+
+ . = 0xa0000;
+ _gp = . + 0x7ff0;
+ .got : { *(.got) }
+
+ . = 0xa1000;
+ .data : { *(.data) }
+
+ . = 0xa2000;
+ .bss : { *(.dynbss) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.nd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.nd
new file mode 100644
index 0000000..a7648d7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.nd
@@ -0,0 +1,10 @@
+
+Symbol table '\.dynsym' contains .*:
+#...
+.*: 00043060 +0 +FUNC +GLOBAL +DEFAULT +\[MIPS PLT\] +UND +foo
+# The index on the next line should correspond to MIPS_GOTSYM.
+#...
+ *8: 0+ +0 +OBJECT +GLOBAL +DEFAULT +UND +obj2
+ *9: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +bar
+
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.pd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.pd
new file mode 100644
index 0000000..73b2059
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.pd
@@ -0,0 +1,7 @@
+
+.*
+
+Contents of section \.got\.plt:
+ 81000 00000000 00000000 00043040 .*
+Contents of section \.data:
+ a1000 00043060 00000000 000a2000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.rd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.rd
new file mode 100644
index 0000000..21b2961
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.rd
@@ -0,0 +1,13 @@
+
+Relocation section '\.rel\.dyn' at offset .* contains .*:
+ * Offset * Info * Type * Sym\.Value * Sym\. Name
+00000000 * 00000000 * R_MIPS_NONE *
+000a2000 * [^ ]*7e * R_MIPS_COPY * 000a2000 * obj1
+0004401c * [^ ]*03 * R_MIPS_REL32 * 00000000 * obj2
+000a100c * [^ ]*03 * R_MIPS_REL32 * 00000000 * obj2
+00044014 * [^ ]*03 * R_MIPS_REL32 * 00000000 * bar
+000a1004 * [^ ]*03 * R_MIPS_REL32 * 00000000 * bar
+
+Relocation section '\.rel\.plt' at offset .* contains .*:
+ * Offset * Info * Type * Sym\.Value * Sym\. Name
+00081008 * [^ ]*7f * R_MIPS_JUMP_SLOT * 00043060 * foo
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.s b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.s
new file mode 100644
index 0000000..73b518f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.s
@@ -0,0 +1,9 @@
+ .abicalls
+ .global ext
+ .ent ext
+ext:
+ .word foo
+ .word bar
+ .word obj1
+ .word obj2
+ .end ext
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.sd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.sd
new file mode 100644
index 0000000..b7d7e3a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.sd
@@ -0,0 +1,27 @@
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x44000
+There are 8 program headers, starting at offset .*
+
+Program Headers:
+ * Type * Offset * VirtAddr * PhysAddr * FileSiz * MemSiz * Flg * Align
+ * PHDR * .*
+ * INTERP * .*
+.*
+ * REGINFO * [^ ]+ * 0x0+41000 * 0x0+41000 * [^ ]+ * [^ ]+ * R * 0x.*
+ * LOAD * [^ ]+ * 0x0+40000 * 0x0+40000 [^ ]+ * [^ ]+ * R E * 0x.*
+ * LOAD * [^ ]+ * 0x0+80000 * 0x0+80000 [^ ]+ * [^ ]+ * RW * 0x.*
+ * LOAD * [^ ]+ * 0x0+a0000 * 0x0+a0000 [^ ]+ * [^ ]+ * RW * 0x.*
+ * DYNAMIC * [^ ]+ * 0x0+42000 * 0x0+42000 .*
+ * NULL * .*
+
+ *Section to Segment mapping:
+ *Segment Sections\.\.\.
+ *0*0 *
+ *0*1 * \.interp *
+ *0*2 * \.reginfo *
+ *0*3 * \.interp \.reginfo \.hash \.dynsym \.dynstr \.dynamic \.rel\.dyn \.rel\.plt \.plt \.text *
+ *0*4 * \.rld_map \.got\.plt *
+ *0*5 * \.got \.data \.bss *
+ *0*6 * \.dynamic *
+ *0*7 *
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.ad b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.ad
new file mode 100644
index 0000000..4be2ac0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.ad
@@ -0,0 +1,27 @@
+
+Dynamic section at offset .* contains .*:
+ * Tag * Type * Name/Value
+ 0x00000001 \(NEEDED\) .*
+ 0x00000004 \(HASH\) .*
+ 0x00000005 \(STRTAB\) .*
+ 0x00000006 \(SYMTAB\) .*
+ 0x0000000a \(STRSZ\) .*
+ 0x0000000b \(SYMENT\) .*
+ 0x70000016 \(MIPS_RLD_MAP\) * 0x80000
+ 0x00000015 \(DEBUG\) * 0x0
+ 0x00000003 \(PLTGOT\) * 0xa0000
+ 0x00000011 \(REL\) * 0x43000
+ 0x00000012 \(RELSZ\) * 40 \(bytes\)
+ 0x00000013 \(RELENT\) * 8 \(bytes\)
+ 0x70000001 \(MIPS_RLD_VERSION\) * 1
+ 0x70000005 \(MIPS_FLAGS\) * NOTPOT
+ 0x70000006 \(MIPS_BASE_ADDRESS\) * 0x40000
+ 0x7000000a \(MIPS_LOCAL_GOTNO\) * 2
+ 0x70000011 \(MIPS_SYMTABNO\) * 14
+ 0x70000012 \(MIPS_UNREFEXTNO\) * .*
+ 0x70000013 \(MIPS_GOTSYM\) * 0x7
+ 0x00000014 \(PLTREL\) * REL
+ 0x00000017 \(JMPREL\) * 0x43028
+ 0x00000002 \(PLTRELSZ\) * 24 \(bytes\)
+ 0x70000032 \(MIPS_PLTGOT\) * 0x81000
+ 0x00000000 \(NULL\) * 0x0
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.dd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.dd
new file mode 100644
index 0000000..1e0dbcb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.dd
@@ -0,0 +1,101 @@
+# GOT layout:
+#
+# -32752: lazy resolution function
+# -32748: reserved for module pointer
+# -32744: extf2's GOT entry (undefined 0)
+# -32740: extf3's GOT entry (PLT entry)
+# -32736: extd2's GOT entry (copy reloc)
+# -32732: extf1's GOT entry (.MIPS.stubs entry)
+# -32728: extd1's GOT entry (undefined 0)
+# -32724: extf4's GOT entry (PLT entry)
+# -32620: extd4's GOT entry (undefined 0, reloc only)
+
+.*
+
+Disassembly of section \.plt:
+
+00043040 <.*>:
+.*: 3c0e0008 lui t2,0x8
+.*: 8dd91000 lw t9,4096\(t2\)
+.*: 25ce1000 addiu t2,t2,4096
+.*: 030ec023 subu t8,t8,t2
+.*: 03e07821 move t3,ra
+.*: 0018c082 srl t8,t8,0x2
+.*: 0320f809 jalr t9
+.*: 2718fffe addiu t8,t8,-2
+
+00043060 <extf4@plt>:
+.*: 3c0f0008 lui t3,0x8
+.*: 8df91008 lw t9,4104\(t3\)
+.*: 03200008 jr t9
+.*: 25f81008 addiu t8,t3,4104
+
+00043070 <extf5@plt>:
+.*: 3c0f0008 lui t3,0x8
+.*: 8df9100c lw t9,4108\(t3\)
+.*: 03200008 jr t9
+.*: 25f8100c addiu t8,t3,4108
+
+00043080 <extf3@plt>:
+.*: 3c0f0008 lui t3,0x8
+.*: 8df91010 lw t9,4112\(t3\)
+.*: 03200008 jr t9
+.*: 25f81010 addiu t8,t3,4112
+
+Disassembly of section \.text:
+
+00044000 <.*>:
+ \.\.\.
+
+00044008 <\.pic\.f1>:
+ 44008: 3c190004 lui t9,0x4
+ 4400c: 27394010 addiu t9,t9,16400
+
+00044010 <f1>:
+ 44010: 0c011013 jal 4404c <f3>
+ 44014: 3c020004 lui v0,0x4
+ 44018: 03e00008 jr ra
+ 4401c: 24424020 addiu v0,v0,16416
+
+00044020 <f2>:
+ 44020: 3c1c0006 lui gp,0x6
+ 44024: 0399e021 addu gp,gp,t9
+ 44028: 279c3fd0 addiu gp,gp,16336
+ 4402c: 8f998024 lw t9,-32732\(gp\)
+ 44030: 8f848018 lw a0,-32744\(gp\)
+ 44034: 8f858028 lw a1,-32728\(gp\)
+ 44038: 0320f809 jalr t9
+ 4403c: 8f868020 lw a2,-32736\(gp\)
+ 44040: 8f99801c lw t9,-32740\(gp\)
+ 44044: 03200008 jr t9
+ 44048: 8f84802c lw a0,-32724\(gp\)
+
+0004404c <f3>:
+ 4404c: 03e00008 jr ra
+ 44050: 00000000 nop
+ \.\.\.
+
+00044060 <__start>:
+ 44060: 0c011002 jal 44008 <\.pic\.f1>
+ 44064: 00000000 nop
+ 44068: 3c020004 lui v0,0x4
+ 4406c: 24424020 addiu v0,v0,16416
+ 44070: 0c010c20 jal 43080 <extf3@plt>
+ 44074: 00000000 nop
+ 44078: 0c010c18 jal 43060 <extf4@plt>
+ 4407c: 00000000 nop
+ 44080: 0c010c1c jal 43070 <extf5@plt>
+ 44084: 00000000 nop
+ 44088: 3c02000a lui v0,0xa
+ 4408c: 24422000 addiu v0,v0,8192
+ 44090: 3c02000a lui v0,0xa
+ 44094: 24422018 addiu v0,v0,8216
+ \.\.\.
+Disassembly of section \.MIPS\.stubs:
+
+000440a0 <\.MIPS\.stubs>:
+ 440a0: 8f998010 lw t9,-32752\(gp\)
+ 440a4: 03e07821 move t3,ra
+ 440a8: 0320f809 jalr t9
+ 440ac: 2418000a li t8,10
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.gd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.gd
new file mode 100644
index 0000000..8b6b5a0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.gd
@@ -0,0 +1,32 @@
+
+Primary GOT:
+ Canonical gp value: 000a7ff0
+
+ Reserved entries:
+ Address Access Initial Purpose
+ 000a0000 -32752\(gp\) 00000000 Lazy resolver
+ 000a0004 -32748\(gp\) 80000000 Module pointer \(GNU extension\)
+
+ Global entries:
+ Address Access Initial Sym\.Val\. Type Ndx Name
+ 000a0008 -32744\(gp\) 00000000 00000000 FUNC UND extf2
+ 000a000c -32740\(gp\) 00000000 00000000 FUNC UND extf3
+ 000a0010 -32736\(gp\) 000a2000 000a2000 OBJECT 16 extd2
+ 000a0014 -32732\(gp\) 000440a0 000440a0 FUNC UND extf1
+ 000a0018 -32728\(gp\) 00000000 00000000 OBJECT UND extd1
+ 000a001c -32724\(gp\) 00000000 00000000 FUNC UND extf4
+ 000a0020 -32720\(gp\) 00000000 00000000 OBJECT UND extd4
+
+
+PLT GOT:
+
+ Reserved entries:
+ Address Initial Purpose
+ 00081000 00000000 PLT lazy resolver
+ 00081004 00000000 Module pointer
+
+ Entries:
+ Address Initial Sym.Val. Type Ndx Name
+ 00081008 00043040 00000000 FUNC UND extf4
+ 0008100c 00043040 00000000 FUNC UND extf5
+ 00081010 00043040 00000000 FUNC UND extf3
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.nd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.nd
new file mode 100644
index 0000000..7afd67d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.nd
@@ -0,0 +1,17 @@
+
+Symbol table '\.dynsym' contains .*:
+#...
+.*: 00000000 +0 +FUNC +GLOBAL +DEFAULT +UND +extf5
+# The index on the next line should correspond to MIPS_GOTSYM,
+# and the remaining symbols should have the same order as the
+# GOT layout given in the *.dd dump.
+#...
+ *7: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf2
+ *8: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf3
+ *9: 0+a2000 +24 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +extd2
+ *10: 0+440a0 +0 +FUNC +GLOBAL +DEFAULT +UND +extf1
+ *11: 0+ +0 +OBJECT +GLOBAL +DEFAULT +UND +extd1
+ *12: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf4
+ *13: 0+ +0 +OBJECT +GLOBAL +DEFAULT +UND +extd4
+
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.pd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.pd
new file mode 100644
index 0000000..5f5de62
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.pd
@@ -0,0 +1,6 @@
+
+.*
+
+Contents of section \.got\.plt:
+ 81000 00000000 00000000 00043040 00043040 .*
+ 81010 00043040 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.rd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.rd
new file mode 100644
index 0000000..0fd5b7e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.rd
@@ -0,0 +1,14 @@
+
+Relocation section '\.rel\.dyn' at offset .* contains .*:
+ * Offset * Info * Type * Sym\.Value * Sym\. Name
+00000000 * 00000000 * R_MIPS_NONE *
+000a2018 * [^ ]*7e * R_MIPS_COPY * 000a2018 * extd3
+000a2000 * [^ ]*7e * R_MIPS_COPY * 000a2000 * extd2
+000a1000 * [^ ]*03 * R_MIPS_REL32 * 00000000 * extd1
+000a1014 * [^ ]*03 * R_MIPS_REL32 * 00000000 * extd4
+
+Relocation section '\.rel\.plt' at offset .* contains .*:
+ * Offset * Info * Type * Sym\.Value * Sym\. Name
+00081008 * [^ ]*7f * R_MIPS_JUMP_SLOT * 00000000 * extf4
+0008100c * [^ ]*7f * R_MIPS_JUMP_SLOT * 00000000 * extf5
+00081010 * [^ ]*7f * R_MIPS_JUMP_SLOT * 00000000 * extf3
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.sd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.sd
new file mode 100644
index 0000000..b5d51b3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.sd
@@ -0,0 +1,27 @@
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x44000
+There are 8 program headers, starting at offset .*
+
+Program Headers:
+ * Type * Offset * VirtAddr * PhysAddr * FileSiz * MemSiz * Flg * Align
+ * PHDR * .*
+ * INTERP * .*
+.*
+ * REGINFO * [^ ]+ * 0x0+41000 * 0x0+41000 * [^ ]+ * [^ ]+ * R * 0x.*
+ * LOAD * [^ ]+ * 0x0+40000 * 0x0+40000 [^ ]+ * [^ ]+ * R E * 0x.*
+ * LOAD * [^ ]+ * 0x0+80000 * 0x0+80000 [^ ]+ * [^ ]+ * RW * 0x.*
+ * LOAD * [^ ]+ * 0x0+a0000 * 0x0+a0000 [^ ]+ * [^ ]+ * RW * 0x.*
+ * DYNAMIC * [^ ]+ * 0x0+42000 * 0x0+42000 .*
+ * NULL * .*
+
+ *Section to Segment mapping:
+ *Segment Sections\.\.\.
+ *0*0 *
+ *0*1 * \.interp *
+ *0*2 * \.reginfo *
+ *0*3 * \.interp \.reginfo \.hash \.dynsym \.dynstr \.dynamic \.rel\.dyn \.rel\.plt \.plt \.text \.MIPS\.stubs *
+ *0*4 * \.rld_map \.got\.plt *
+ *0*5 * \.got \.data \.bss *
+ *0*6 * \.dynamic *
+ *0*7 *
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32a.s b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32a.s
new file mode 100644
index 0000000..a4c0075
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32a.s
@@ -0,0 +1,48 @@
+ .abicalls
+ .global extf1
+ .ent extf1
+extf1:
+ jr $31
+ .end extf1
+
+ .global extf2
+ .ent extf2
+extf2:
+ jr $31
+ .end extf2
+
+ .global extf3
+ .ent extf3
+extf3:
+ jr $31
+ .end extf3
+
+ .global extf4
+ .ent extf4
+extf4:
+ jr $31
+ .end extf4
+
+ .global extf5
+ .ent extf5
+extf5:
+ jr $31
+ .end extf5
+
+ .data
+ .global extd1
+ .global extd2
+ .global extd3
+ .global extd4
+ .type extd1,%object
+ .type extd2,%object
+ .type extd3,%object
+ .type extd4,%object
+ .size extd1,20
+ .size extd2,24
+ .size extd3,28
+ .size extd4,8
+extd1: .space 20
+extd2: .space 24
+extd3: .space 28
+extd4: .space 8
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32b.s b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32b.s
new file mode 100644
index 0000000..48cf97f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32b.s
@@ -0,0 +1,39 @@
+ .set noreorder
+ .abicalls
+ .global f1
+ .ent f1
+f1:
+ .option pic0
+ jal f3
+ .option pic2
+ lui $2,%hi(f2)
+ jr $31
+ addiu $2,$2,%lo(f2)
+ .end f1
+
+ .global f2
+ .ent f2
+f2:
+ lui $28,%hi(%neg(%gp_rel(f2)))
+ addu $28,$28,$25
+ addiu $28,$28,%lo(%neg(%gp_rel(f2)))
+ lw $25,%call16(extf1)($28)
+ lw $4,%got_disp(extf2)($28)
+ lw $5,%got_disp(extd1)($28)
+ jalr $25
+ lw $6,%got_disp(extd2)($28)
+ lw $25,%call16(extf3)($28)
+ jr $25
+ lw $4,%got_disp(extf4)($28)
+ .end f2
+
+ .global f3
+ .ent f3
+f3:
+ jr $31
+ nop
+ .end f3
+
+ .data
+ .word extd1
+ .word extd3
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32c.s b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32c.s
new file mode 100644
index 0000000..578626a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32c.s
@@ -0,0 +1,25 @@
+ .abicalls
+ .option pic0
+ .set noreorder
+ .global __start
+ .ent __start
+__start:
+ jal f1
+ nop
+ lui $2,%hi(f2)
+ addiu $2,$2,%lo(f2)
+ jal extf3
+ nop
+ jal extf4
+ nop
+ jal extf5
+ nop
+ lui $2,%hi(extd2)
+ addiu $2,$2,%lo(extd2)
+ lui $2,%hi(extd3)
+ addiu $2,$2,%lo(extd3)
+ .end __start
+
+ .data
+ .word extd2
+ .word extd4
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.ad b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.ad
new file mode 100644
index 0000000..2ccb8b8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.ad
@@ -0,0 +1,27 @@
+
+Dynamic section at offset .* contains .*:
+ * Tag * Type * Name/Value
+ 0x0+00000001 \(NEEDED\) .*
+ 0x0+00000004 \(HASH\) .*
+ 0x0+00000005 \(STRTAB\) .*
+ 0x0+00000006 \(SYMTAB\) .*
+ 0x0+0000000a \(STRSZ\) .*
+ 0x0+0000000b \(SYMENT\) .*
+ 0x0+70000016 \(MIPS_RLD_MAP\) * 0x80000
+ 0x0+00000015 \(DEBUG\) * 0x0
+ 0x0+00000003 \(PLTGOT\) * 0xa0000
+ 0x0+00000011 \(REL\) * 0x43000
+ 0x0+00000012 \(RELSZ\) * 80 \(bytes\)
+ 0x0+00000013 \(RELENT\) * 16 \(bytes\)
+ 0x0+70000001 \(MIPS_RLD_VERSION\) * 1
+ 0x0+70000005 \(MIPS_FLAGS\) * NOTPOT
+ 0x0+70000006 \(MIPS_BASE_ADDRESS\) * 0x40000
+ 0x0+7000000a \(MIPS_LOCAL_GOTNO\) * 2
+ 0x0+70000011 \(MIPS_SYMTABNO\) * 14
+ 0x0+70000012 \(MIPS_UNREFEXTNO\) * .*
+ 0x0+70000013 \(MIPS_GOTSYM\) * 0x7
+ 0x0+00000014 \(PLTREL\) * REL
+ 0x0+00000017 \(JMPREL\) * 0x43050
+ 0x0+00000002 \(PLTRELSZ\) * 48 \(bytes\)
+ 0x0+70000032 \(MIPS_PLTGOT\) * 0x81000
+ 0x0+00000000 \(NULL\) * 0x0
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.dd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.dd
new file mode 100644
index 0000000..7efa5d1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.dd
@@ -0,0 +1,101 @@
+# GOT layout:
+#
+# -32752: lazy resolution function
+# -32744: reserved for module pointer
+# -32736: extf2's GOT entry (undefined 0)
+# -32728: extf3's GOT entry (PLT entry)
+# -32720: extd2's GOT entry (copy reloc)
+# -32712: extf1's GOT entry (.MIPS.stubs entry)
+# -32704: extd1's GOT entry (undefined 0)
+# -32696: extf4's GOT entry (PLT entry)
+# -32688: extd4's GOT entry (undefined 0, reloc only)
+
+.*
+
+Disassembly of section \.plt:
+
+0+43080 <.*>:
+.*: 3c0e0008 lui t2,0x8
+.*: ddd91000 ld t9,4096\(t2\)
+.*: 25ce1000 addiu t2,t2,4096
+.*: 030ec023 subu t8,t8,t2
+.*: 03e07821 move t3,ra
+.*: 0018c0c2 srl t8,t8,0x3
+.*: 0320f809 jalr t9
+.*: 2718fffe addiu t8,t8,-2
+
+0+430a0 <extf4@plt>:
+.*: 3c0f0008 lui t3,0x8
+.*: ddf91010 ld t9,4112\(t3\)
+.*: 03200008 jr t9
+.*: 25f81010 addiu t8,t3,4112
+
+0+430b0 <extf5@plt>:
+.*: 3c0f0008 lui t3,0x8
+.*: ddf91018 ld t9,4120\(t3\)
+.*: 03200008 jr t9
+.*: 25f81018 addiu t8,t3,4120
+
+0+430c0 <extf3@plt>:
+.*: 3c0f0008 lui t3,0x8
+.*: ddf91020 ld t9,4128\(t3\)
+.*: 03200008 jr t9
+.*: 25f81020 addiu t8,t3,4128
+
+Disassembly of section \.text:
+
+0+44000 <.*>:
+ \.\.\.
+
+0+44008 <\.pic\.f1>:
+ 44008: 3c190004 lui t9,0x4
+ 4400c: 27394010 addiu t9,t9,16400
+
+0+44010 <f1>:
+ 44010: 0c011013 jal 4404c <f3>
+ 44014: 3c020004 lui v0,0x4
+ 44018: 03e00008 jr ra
+ 4401c: 24424020 addiu v0,v0,16416
+
+0+44020 <f2>:
+ 44020: 3c1c0006 lui gp,0x6
+ 44024: 0399e021 addu gp,gp,t9
+ 44028: 279c3fd0 addiu gp,gp,16336
+ 4402c: df998038 ld t9,-32712\(gp\)
+ 44030: df848020 ld a0,-32736\(gp\)
+ 44034: df858040 ld a1,-32704\(gp\)
+ 44038: 0320f809 jalr t9
+ 4403c: df868030 ld a2,-32720\(gp\)
+ 44040: df998028 ld t9,-32728\(gp\)
+ 44044: 03200008 jr t9
+ 44048: df848048 ld a0,-32696\(gp\)
+
+0+4404c <f3>:
+ 4404c: 03e00008 jr ra
+ 44050: 00000000 nop
+ \.\.\.
+
+0+44060 <__start>:
+ 44060: 0c011002 jal 44008 <\.pic\.f1>
+ 44064: 00000000 nop
+ 44068: 3c020004 lui v0,0x4
+ 4406c: 24424020 addiu v0,v0,16416
+ 44070: 0c010c30 jal 430c0 <extf3@plt>
+ 44074: 00000000 nop
+ 44078: 0c010c28 jal 430a0 <extf4@plt>
+ 4407c: 00000000 nop
+ 44080: 0c010c2c jal 430b0 <extf5@plt>
+ 44084: 00000000 nop
+ 44088: 3c02000a lui v0,0xa
+ 4408c: 24422000 addiu v0,v0,8192
+ 44090: 3c02000a lui v0,0xa
+ 44094: 24422018 addiu v0,v0,8216
+ \.\.\.
+Disassembly of section \.MIPS\.stubs:
+
+0+440a0 <\.MIPS\.stubs>:
+ 440a0: df998010 ld t9,-32752\(gp\)
+ 440a4: 03e0782d move t3,ra
+ 440a8: 0320f809 jalr t9
+ 440ac: 6418000a daddiu t8,zero,10
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.gd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.gd
new file mode 100644
index 0000000..767d150
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.gd
@@ -0,0 +1,32 @@
+
+Primary GOT:
+ Canonical gp value: 00000000000a7ff0
+
+ Reserved entries:
+ Address Access Initial Purpose
+ 00000000000a0000 -32752\(gp\) 0000000000000000 Lazy resolver
+ 00000000000a0008 -32744\(gp\) 8000000000000000 Module pointer \(GNU extension\)
+
+ Global entries:
+ Address Access Initial Sym\.Val\. Type Ndx Name
+ 00000000000a0010 -32736\(gp\) 0000000000000000 0000000000000000 FUNC UND extf2
+ 00000000000a0018 -32728\(gp\) 0000000000000000 0000000000000000 FUNC UND extf3
+ 00000000000a0020 -32720\(gp\) 00000000000a2000 00000000000a2000 OBJECT 16 extd2
+ 00000000000a0028 -32712\(gp\) 00000000000440a0 00000000000440a0 FUNC UND extf1
+ 00000000000a0030 -32704\(gp\) 0000000000000000 0000000000000000 OBJECT UND extd1
+ 00000000000a0038 -32696\(gp\) 0000000000000000 0000000000000000 FUNC UND extf4
+ 00000000000a0040 -32688\(gp\) 0000000000000000 0000000000000000 OBJECT UND extd4
+
+
+PLT GOT:
+
+ Reserved entries:
+ Address Initial Purpose
+ 0000000000081000 0000000000000000 PLT lazy resolver
+ 0000000000081008 0000000000000000 Module pointer
+
+ Entries:
+ Address Initial Sym.Val. Type Ndx Name
+ 0000000000081010 0000000000043080 0000000000000000 FUNC UND extf4
+ 0000000000081018 0000000000043080 0000000000000000 FUNC UND extf5
+ 0000000000081020 0000000000043080 0000000000000000 FUNC UND extf3
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.nd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.nd
new file mode 100644
index 0000000..e735a45
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.nd
@@ -0,0 +1,17 @@
+
+Symbol table '\.dynsym' contains .*:
+#...
+.*: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf5
+# The index on the next line should correspond to MIPS_GOTSYM,
+# and the remaining symbols should have the same order as the
+# GOT layout given in the *.dd dump.
+#...
+ *7: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf2
+ *8: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf3
+ *9: 0+a2000 +24 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +extd2
+ *10: 0+440a0 +0 +FUNC +GLOBAL +DEFAULT +UND +extf1
+ *11: 0+ +0 +OBJECT +GLOBAL +DEFAULT +UND +extd1
+ *12: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf4
+ *13: 0+ +0 +OBJECT +GLOBAL +DEFAULT +UND +extd4
+
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.pd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.pd
new file mode 100644
index 0000000..fed9d94
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.pd
@@ -0,0 +1,7 @@
+
+.*
+
+Contents of section \.got\.plt:
+ 81000 00000000 00000000 00000000 00000000 .*
+ 81010 00000000 00043080 00000000 00043080 .*
+ 81020 00000000 00043080 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.rd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.rd
new file mode 100644
index 0000000..666785e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.rd
@@ -0,0 +1,30 @@
+
+Relocation section '\.rel\.dyn' at offset .* contains .*:
+ * Offset * Info * Type * Sym\. Value * Sym\. Name
+0+00000 * 0+ * R_MIPS_NONE *
+ *Type2: R_MIPS_NONE *
+ *Type3: R_MIPS_NONE *
+0+a2018 * [^ ]*7e * R_MIPS_COPY * 0+a2018 * extd3
+ *Type2: R_MIPS_NONE *
+ *Type3: R_MIPS_NONE *
+0+a2000 * [^ ]*7e * R_MIPS_COPY * 0+a2000 * extd2
+ *Type2: R_MIPS_NONE *
+ *Type3: R_MIPS_NONE *
+0+a1000 * [^ ]*03 * R_MIPS_REL32 * 0+00000 * extd1
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+0+a1014 * [^ ]*03 * R_MIPS_REL32 * 0+00000 * extd4
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+
+Relocation section '\.rel\.plt' at offset .* contains .*:
+ * Offset * Info * Type * Sym\. Value * Sym\. Name
+0+81010 * [^ ]*7f * R_MIPS_JUMP_SLOT * 0+00000 * extf4
+ *Type2: R_MIPS_NONE *
+ *Type3: R_MIPS_NONE *
+0+81018 * [^ ]*7f * R_MIPS_JUMP_SLOT * 0+00000 * extf5
+ *Type2: R_MIPS_NONE *
+ *Type3: R_MIPS_NONE *
+0+81020 * [^ ]*7f * R_MIPS_JUMP_SLOT * 0+00000 * extf3
+ *Type2: R_MIPS_NONE *
+ *Type3: R_MIPS_NONE *
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.sd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.sd
new file mode 100644
index 0000000..3842baa
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.sd
@@ -0,0 +1,25 @@
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x44000
+There are 7 program headers, starting at offset .*
+
+Program Headers:
+ * Type * Offset * VirtAddr * PhysAddr * FileSiz * MemSiz * Flg * Align
+ * PHDR * .*
+ * INTERP * .*
+.*
+ * LOAD * [^ ]+ * 0x0+40000 * 0x0+40000 [^ ]+ * [^ ]+ * R E * 0x.*
+ * LOAD * [^ ]+ * 0x0+80000 * 0x0+80000 [^ ]+ * [^ ]+ * RW * 0x.*
+ * LOAD * [^ ]+ * 0x0+a0000 * 0x0+a0000 [^ ]+ * [^ ]+ * RW * 0x.*
+ * DYNAMIC * [^ ]+ * 0x0+42000 * 0x0+42000 .*
+ * NULL * .*
+
+ *Section to Segment mapping:
+ *Segment Sections\.\.\.
+ *0*0 *
+ *0*1 * \.interp *
+ *0*2 * \.interp \.hash \.dynsym \.dynstr \.dynamic \.rel\.dyn \.rel\.plt \.plt \.text \.MIPS\.stubs \.MIPS\.options *
+ *0*3 * \.rld_map \.got\.plt *
+ *0*4 * \.got \.data \.bss *
+ *0*5 * \.dynamic *
+ *0*6 *
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64a.s b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64a.s
new file mode 100644
index 0000000..a4c0075
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64a.s
@@ -0,0 +1,48 @@
+ .abicalls
+ .global extf1
+ .ent extf1
+extf1:
+ jr $31
+ .end extf1
+
+ .global extf2
+ .ent extf2
+extf2:
+ jr $31
+ .end extf2
+
+ .global extf3
+ .ent extf3
+extf3:
+ jr $31
+ .end extf3
+
+ .global extf4
+ .ent extf4
+extf4:
+ jr $31
+ .end extf4
+
+ .global extf5
+ .ent extf5
+extf5:
+ jr $31
+ .end extf5
+
+ .data
+ .global extd1
+ .global extd2
+ .global extd3
+ .global extd4
+ .type extd1,%object
+ .type extd2,%object
+ .type extd3,%object
+ .type extd4,%object
+ .size extd1,20
+ .size extd2,24
+ .size extd3,28
+ .size extd4,8
+extd1: .space 20
+extd2: .space 24
+extd3: .space 28
+extd4: .space 8
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64b.s b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64b.s
new file mode 100644
index 0000000..7a7979c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64b.s
@@ -0,0 +1,39 @@
+ .set noreorder
+ .abicalls
+ .global f1
+ .ent f1
+f1:
+ .option pic0
+ jal f3
+ .option pic2
+ lui $2,%hi(f2)
+ jr $31
+ addiu $2,$2,%lo(f2)
+ .end f1
+
+ .global f2
+ .ent f2
+f2:
+ lui $28,%hi(%neg(%gp_rel(f2)))
+ addu $28,$28,$25
+ addiu $28,$28,%lo(%neg(%gp_rel(f2)))
+ ld $25,%call16(extf1)($28)
+ ld $4,%got_disp(extf2)($28)
+ ld $5,%got_disp(extd1)($28)
+ jalr $25
+ ld $6,%got_disp(extd2)($28)
+ ld $25,%call16(extf3)($28)
+ jr $25
+ ld $4,%got_disp(extf4)($28)
+ .end f2
+
+ .global f3
+ .ent f3
+f3:
+ jr $31
+ nop
+ .end f3
+
+ .data
+ .word extd1
+ .word extd3
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64c.s b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64c.s
new file mode 100644
index 0000000..578626a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64c.s
@@ -0,0 +1,25 @@
+ .abicalls
+ .option pic0
+ .set noreorder
+ .global __start
+ .ent __start
+__start:
+ jal f1
+ nop
+ lui $2,%hi(f2)
+ addiu $2,$2,%lo(f2)
+ jal extf3
+ nop
+ jal extf4
+ nop
+ jal extf5
+ nop
+ lui $2,%hi(extd2)
+ addiu $2,$2,%lo(extd2)
+ lui $2,%hi(extd3)
+ addiu $2,$2,%lo(extd3)
+ .end __start
+
+ .data
+ .word extd2
+ .word extd4
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.ad b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.ad
new file mode 100644
index 0000000..4be2ac0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.ad
@@ -0,0 +1,27 @@
+
+Dynamic section at offset .* contains .*:
+ * Tag * Type * Name/Value
+ 0x00000001 \(NEEDED\) .*
+ 0x00000004 \(HASH\) .*
+ 0x00000005 \(STRTAB\) .*
+ 0x00000006 \(SYMTAB\) .*
+ 0x0000000a \(STRSZ\) .*
+ 0x0000000b \(SYMENT\) .*
+ 0x70000016 \(MIPS_RLD_MAP\) * 0x80000
+ 0x00000015 \(DEBUG\) * 0x0
+ 0x00000003 \(PLTGOT\) * 0xa0000
+ 0x00000011 \(REL\) * 0x43000
+ 0x00000012 \(RELSZ\) * 40 \(bytes\)
+ 0x00000013 \(RELENT\) * 8 \(bytes\)
+ 0x70000001 \(MIPS_RLD_VERSION\) * 1
+ 0x70000005 \(MIPS_FLAGS\) * NOTPOT
+ 0x70000006 \(MIPS_BASE_ADDRESS\) * 0x40000
+ 0x7000000a \(MIPS_LOCAL_GOTNO\) * 2
+ 0x70000011 \(MIPS_SYMTABNO\) * 14
+ 0x70000012 \(MIPS_UNREFEXTNO\) * .*
+ 0x70000013 \(MIPS_GOTSYM\) * 0x7
+ 0x00000014 \(PLTREL\) * REL
+ 0x00000017 \(JMPREL\) * 0x43028
+ 0x00000002 \(PLTRELSZ\) * 24 \(bytes\)
+ 0x70000032 \(MIPS_PLTGOT\) * 0x81000
+ 0x00000000 \(NULL\) * 0x0
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.dd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.dd
new file mode 100644
index 0000000..77f7623
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.dd
@@ -0,0 +1,101 @@
+# GOT layout:
+#
+# -32752: lazy resolution function
+# -32748: reserved for module pointer
+# -32744: extf2's GOT entry (undefined 0)
+# -32740: extf3's GOT entry (PLT entry)
+# -32736: extd2's GOT entry (copy reloc)
+# -32732: extf1's GOT entry (.MIPS.stubs entry)
+# -32728: extd1's GOT entry (undefined 0)
+# -32724: extf4's GOT entry (PLT entry)
+# -32620: extd4's GOT entry (undefined 0, reloc only)
+
+.*
+
+Disassembly of section \.plt:
+
+00043040 <.*>:
+.*: 3c1c0008 lui gp,0x8
+.*: 8f991000 lw t9,4096\(gp\)
+.*: 279c1000 addiu gp,gp,4096
+.*: 031cc023 subu t8,t8,gp
+.*: 03e07821 move t7,ra
+.*: 0018c082 srl t8,t8,0x2
+.*: 0320f809 jalr t9
+.*: 2718fffe addiu t8,t8,-2
+
+00043060 <extf4@plt>:
+.*: 3c0f0008 lui t7,0x8
+.*: 8df91008 lw t9,4104\(t7\)
+.*: 03200008 jr t9
+.*: 25f81008 addiu t8,t7,4104
+
+00043070 <extf5@plt>:
+.*: 3c0f0008 lui t7,0x8
+.*: 8df9100c lw t9,4108\(t7\)
+.*: 03200008 jr t9
+.*: 25f8100c addiu t8,t7,4108
+
+00043080 <extf3@plt>:
+.*: 3c0f0008 lui t7,0x8
+.*: 8df91010 lw t9,4112\(t7\)
+.*: 03200008 jr t9
+.*: 25f81010 addiu t8,t7,4112
+
+Disassembly of section \.text:
+
+00044000 <.*>:
+ \.\.\.
+
+00044008 <\.pic\.f1>:
+ 44008: 3c190004 lui t9,0x4
+ 4400c: 27394010 addiu t9,t9,16400
+
+00044010 <f1>:
+ 44010: 0c011013 jal 4404c <f3>
+ 44014: 3c020004 lui v0,0x4
+ 44018: 03e00008 jr ra
+ 4401c: 24424020 addiu v0,v0,16416
+
+00044020 <f2>:
+ 44020: 3c1c0006 lui gp,0x6
+ 44024: 279c3fd0 addiu gp,gp,16336
+ 44028: 0399e021 addu gp,gp,t9
+ 4402c: 8f998024 lw t9,-32732\(gp\)
+ 44030: 8f848018 lw a0,-32744\(gp\)
+ 44034: 8f858028 lw a1,-32728\(gp\)
+ 44038: 0320f809 jalr t9
+ 4403c: 8f868020 lw a2,-32736\(gp\)
+ 44040: 8f99801c lw t9,-32740\(gp\)
+ 44044: 03200008 jr t9
+ 44048: 8f84802c lw a0,-32724\(gp\)
+
+0004404c <f3>:
+ 4404c: 03e00008 jr ra
+ 44050: 00000000 nop
+ \.\.\.
+
+00044060 <__start>:
+ 44060: 0c011002 jal 44008 <\.pic\.f1>
+ 44064: 00000000 nop
+ 44068: 3c020004 lui v0,0x4
+ 4406c: 24424020 addiu v0,v0,16416
+ 44070: 0c010c20 jal 43080 <extf3@plt>
+ 44074: 00000000 nop
+ 44078: 0c010c18 jal 43060 <extf4@plt>
+ 4407c: 00000000 nop
+ 44080: 0c010c1c jal 43070 <extf5@plt>
+ 44084: 00000000 nop
+ 44088: 3c02000a lui v0,0xa
+ 4408c: 24422000 addiu v0,v0,8192
+ 44090: 3c02000a lui v0,0xa
+ 44094: 24422018 addiu v0,v0,8216
+ \.\.\.
+Disassembly of section \.MIPS\.stubs:
+
+000440a0 <\.MIPS\.stubs>:
+ 440a0: 8f998010 lw t9,-32752\(gp\)
+ 440a4: 03e07821 move t7,ra
+ 440a8: 0320f809 jalr t9
+ 440ac: 2418000a li t8,10
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.gd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.gd
new file mode 100644
index 0000000..8b6b5a0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.gd
@@ -0,0 +1,32 @@
+
+Primary GOT:
+ Canonical gp value: 000a7ff0
+
+ Reserved entries:
+ Address Access Initial Purpose
+ 000a0000 -32752\(gp\) 00000000 Lazy resolver
+ 000a0004 -32748\(gp\) 80000000 Module pointer \(GNU extension\)
+
+ Global entries:
+ Address Access Initial Sym\.Val\. Type Ndx Name
+ 000a0008 -32744\(gp\) 00000000 00000000 FUNC UND extf2
+ 000a000c -32740\(gp\) 00000000 00000000 FUNC UND extf3
+ 000a0010 -32736\(gp\) 000a2000 000a2000 OBJECT 16 extd2
+ 000a0014 -32732\(gp\) 000440a0 000440a0 FUNC UND extf1
+ 000a0018 -32728\(gp\) 00000000 00000000 OBJECT UND extd1
+ 000a001c -32724\(gp\) 00000000 00000000 FUNC UND extf4
+ 000a0020 -32720\(gp\) 00000000 00000000 OBJECT UND extd4
+
+
+PLT GOT:
+
+ Reserved entries:
+ Address Initial Purpose
+ 00081000 00000000 PLT lazy resolver
+ 00081004 00000000 Module pointer
+
+ Entries:
+ Address Initial Sym.Val. Type Ndx Name
+ 00081008 00043040 00000000 FUNC UND extf4
+ 0008100c 00043040 00000000 FUNC UND extf5
+ 00081010 00043040 00000000 FUNC UND extf3
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.nd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.nd
new file mode 100644
index 0000000..7afd67d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.nd
@@ -0,0 +1,17 @@
+
+Symbol table '\.dynsym' contains .*:
+#...
+.*: 00000000 +0 +FUNC +GLOBAL +DEFAULT +UND +extf5
+# The index on the next line should correspond to MIPS_GOTSYM,
+# and the remaining symbols should have the same order as the
+# GOT layout given in the *.dd dump.
+#...
+ *7: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf2
+ *8: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf3
+ *9: 0+a2000 +24 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +extd2
+ *10: 0+440a0 +0 +FUNC +GLOBAL +DEFAULT +UND +extf1
+ *11: 0+ +0 +OBJECT +GLOBAL +DEFAULT +UND +extd1
+ *12: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf4
+ *13: 0+ +0 +OBJECT +GLOBAL +DEFAULT +UND +extd4
+
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.pd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.pd
new file mode 100644
index 0000000..5f5de62
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.pd
@@ -0,0 +1,6 @@
+
+.*
+
+Contents of section \.got\.plt:
+ 81000 00000000 00000000 00043040 00043040 .*
+ 81010 00043040 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.rd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.rd
new file mode 100644
index 0000000..0fd5b7e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.rd
@@ -0,0 +1,14 @@
+
+Relocation section '\.rel\.dyn' at offset .* contains .*:
+ * Offset * Info * Type * Sym\.Value * Sym\. Name
+00000000 * 00000000 * R_MIPS_NONE *
+000a2018 * [^ ]*7e * R_MIPS_COPY * 000a2018 * extd3
+000a2000 * [^ ]*7e * R_MIPS_COPY * 000a2000 * extd2
+000a1000 * [^ ]*03 * R_MIPS_REL32 * 00000000 * extd1
+000a1014 * [^ ]*03 * R_MIPS_REL32 * 00000000 * extd4
+
+Relocation section '\.rel\.plt' at offset .* contains .*:
+ * Offset * Info * Type * Sym\.Value * Sym\. Name
+00081008 * [^ ]*7f * R_MIPS_JUMP_SLOT * 00000000 * extf4
+0008100c * [^ ]*7f * R_MIPS_JUMP_SLOT * 00000000 * extf5
+00081010 * [^ ]*7f * R_MIPS_JUMP_SLOT * 00000000 * extf3
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.sd b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.sd
new file mode 100644
index 0000000..b5d51b3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.sd
@@ -0,0 +1,27 @@
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x44000
+There are 8 program headers, starting at offset .*
+
+Program Headers:
+ * Type * Offset * VirtAddr * PhysAddr * FileSiz * MemSiz * Flg * Align
+ * PHDR * .*
+ * INTERP * .*
+.*
+ * REGINFO * [^ ]+ * 0x0+41000 * 0x0+41000 * [^ ]+ * [^ ]+ * R * 0x.*
+ * LOAD * [^ ]+ * 0x0+40000 * 0x0+40000 [^ ]+ * [^ ]+ * R E * 0x.*
+ * LOAD * [^ ]+ * 0x0+80000 * 0x0+80000 [^ ]+ * [^ ]+ * RW * 0x.*
+ * LOAD * [^ ]+ * 0x0+a0000 * 0x0+a0000 [^ ]+ * [^ ]+ * RW * 0x.*
+ * DYNAMIC * [^ ]+ * 0x0+42000 * 0x0+42000 .*
+ * NULL * .*
+
+ *Section to Segment mapping:
+ *Segment Sections\.\.\.
+ *0*0 *
+ *0*1 * \.interp *
+ *0*2 * \.reginfo *
+ *0*3 * \.interp \.reginfo \.hash \.dynsym \.dynstr \.dynamic \.rel\.dyn \.rel\.plt \.plt \.text \.MIPS\.stubs *
+ *0*4 * \.rld_map \.got\.plt *
+ *0*5 * \.got \.data \.bss *
+ *0*6 * \.dynamic *
+ *0*7 *
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32a.s b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32a.s
new file mode 100644
index 0000000..a4c0075
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32a.s
@@ -0,0 +1,48 @@
+ .abicalls
+ .global extf1
+ .ent extf1
+extf1:
+ jr $31
+ .end extf1
+
+ .global extf2
+ .ent extf2
+extf2:
+ jr $31
+ .end extf2
+
+ .global extf3
+ .ent extf3
+extf3:
+ jr $31
+ .end extf3
+
+ .global extf4
+ .ent extf4
+extf4:
+ jr $31
+ .end extf4
+
+ .global extf5
+ .ent extf5
+extf5:
+ jr $31
+ .end extf5
+
+ .data
+ .global extd1
+ .global extd2
+ .global extd3
+ .global extd4
+ .type extd1,%object
+ .type extd2,%object
+ .type extd3,%object
+ .type extd4,%object
+ .size extd1,20
+ .size extd2,24
+ .size extd3,28
+ .size extd4,8
+extd1: .space 20
+extd2: .space 24
+extd3: .space 28
+extd4: .space 8
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32b.s b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32b.s
new file mode 100644
index 0000000..4f8816b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32b.s
@@ -0,0 +1,37 @@
+ .set noreorder
+ .abicalls
+ .global f1
+ .ent f1
+f1:
+ .option pic0
+ jal f3
+ .option pic2
+ lui $2,%hi(f2)
+ jr $31
+ addiu $2,$2,%lo(f2)
+ .end f1
+
+ .global f2
+ .ent f2
+f2:
+ .cpload $25
+ lw $25,%call16(extf1)($28)
+ lw $4,%got(extf2)($28)
+ lw $5,%got(extd1)($28)
+ jalr $25
+ lw $6,%got(extd2)($28)
+ lw $25,%call16(extf3)($28)
+ jr $25
+ lw $4,%got(extf4)($28)
+ .end f2
+
+ .global f3
+ .ent f3
+f3:
+ jr $31
+ nop
+ .end f3
+
+ .data
+ .word extd1
+ .word extd3
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32c.s b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32c.s
new file mode 100644
index 0000000..578626a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32c.s
@@ -0,0 +1,25 @@
+ .abicalls
+ .option pic0
+ .set noreorder
+ .global __start
+ .ent __start
+__start:
+ jal f1
+ nop
+ lui $2,%hi(f2)
+ addiu $2,$2,%lo(f2)
+ jal extf3
+ nop
+ jal extf4
+ nop
+ jal extf5
+ nop
+ lui $2,%hi(extd2)
+ addiu $2,$2,%lo(extd2)
+ lui $2,%hi(extd3)
+ addiu $2,$2,%lo(extd3)
+ .end __start
+
+ .data
+ .word extd2
+ .word extd4
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6.ld b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6.ld
new file mode 100644
index 0000000..aff900e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/pic-and-nonpic-6.ld
@@ -0,0 +1,40 @@
+SECTIONS
+{
+ . = 0x40000 + SIZEOF_HEADERS;
+ .interp : { *(.interp) }
+
+ . = 0x41000;
+ .reginfo : { *(.reginfo) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+
+ . = 0x42000;
+ .dynamic : { *(.dynamic) }
+
+ . = 0x43000;
+ .rel.dyn : { *(.rel.dyn) }
+ .rel.plt : { *(.rel.plt) }
+ .plt : { *(.plt) }
+
+ . = 0x44000;
+ .text : { *(.text) }
+ .MIPS.stubs : { *(.MIPS.stubs) }
+ .MIPS.options : { *(.MIPS.options) }
+
+ . = 0x80000;
+ .rld_map : { *(.rld_map) }
+
+ . = 0x81000;
+ .got.plt : { *(.got.plt) }
+
+ . = 0xa0000;
+ _gp = . + 0x7ff0;
+ .got : { *(.got) }
+
+ . = 0xa1000;
+ .data : { *(.data) }
+
+ . = 0xa2000;
+ .bss : { *(.dynbss) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/region1.d b/binutils-2.21/ld/testsuite/ld-mips-elf/region1.d
new file mode 100644
index 0000000..4e65f53
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/region1.d
@@ -0,0 +1,11 @@
+# as: -mabi=eabi -mips1 -G0
+# source: region1a.s
+# source: region1b.s
+# ld: -T region1.t
+# name: MIPS region1
+# objdump: --headers
+#...
+ 0 \.text +0+004 +0+10000 .*
+#...
+ 1 \.data +0+004 +0+20000 .*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/region1.t b/binutils-2.21/ld/testsuite/ld-mips-elf/region1.t
new file mode 100644
index 0000000..13077ab
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/region1.t
@@ -0,0 +1,12 @@
+MEMORY
+{
+ TEXTMEM : ORIGIN = 0x10000, LENGTH = 32K
+ DATAMEM : ORIGIN = 0x20000, LENGTH = 32K
+}
+
+SECTIONS
+{
+ .text : { *(.text) } > TEXTMEM
+ .data : { *(.data) } > DATAMEM
+ .bss : { *(.bss) } > DATAMEM
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/region1a.s b/binutils-2.21/ld/testsuite/ld-mips-elf/region1a.s
new file mode 100644
index 0000000..715a986
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/region1a.s
@@ -0,0 +1,3 @@
+ .text
+ .global foo
+foo: .4byte 1
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/region1b.s b/binutils-2.21/ld/testsuite/ld-mips-elf/region1b.s
new file mode 100644
index 0000000..9a72c96
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/region1b.s
@@ -0,0 +1,2 @@
+ .data
+ .4byte foo
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/rel32-n32.d b/binutils-2.21/ld/testsuite/ld-mips-elf/rel32-n32.d
new file mode 100644
index 0000000..aae33b3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/rel32-n32.d
@@ -0,0 +1,15 @@
+#name: MIPS rel32 n32
+#source: rel32.s
+#as: -KPIC -EB -n32
+#readelf: -x .text -r
+#ld: -shared -melf32btsmipn32
+
+Relocation section '.rel.dyn' at offset .* contains 2 entries:
+ Offset Info Type Sym.Value Sym. Name
+[0-9a-f ]+R_MIPS_NONE
+[0-9a-f ]+R_MIPS_REL32
+
+Hex dump of section '.text':
+ 0x000002e0 00000000 00000000 00000000 00000000 ................
+ 0x000002f0 000002f0 00000000 00000000 00000000 ................
+ 0x00000300 00000000 00000000 00000000 00000000 ................
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/rel32-o32.d b/binutils-2.21/ld/testsuite/ld-mips-elf/rel32-o32.d
new file mode 100644
index 0000000..742cdaa
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/rel32-o32.d
@@ -0,0 +1,15 @@
+#name: MIPS rel32 o32
+#source: rel32.s
+#as: -KPIC -EB -32
+#readelf: -x .text -r
+#ld: -shared -melf32btsmip
+
+Relocation section '.rel.dyn' at offset .* contains 2 entries:
+ Offset Info Type Sym.Value Sym. Name
+[0-9a-f ]+R_MIPS_NONE
+[0-9a-f ]+R_MIPS_REL32
+
+Hex dump of section '.text':
+ 0x000002e0 00000000 00000000 00000000 00000000 ................
+ 0x000002f0 000002f0 00000000 00000000 00000000 ................
+ 0x00000300 00000000 00000000 00000000 00000000 ................
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/rel32.s b/binutils-2.21/ld/testsuite/ld-mips-elf/rel32.s
new file mode 100644
index 0000000..dad4670
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/rel32.s
@@ -0,0 +1,4 @@
+ .space 16
+.Lfoo:
+ .word .Lfoo
+ .space 16
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/rel64.d b/binutils-2.21/ld/testsuite/ld-mips-elf/rel64.d
new file mode 100644
index 0000000..4279e28
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/rel64.d
@@ -0,0 +1,19 @@
+#name: MIPS rel64 n64
+#source: rel64.s
+#as: -KPIC -EB -64
+#readelf: -x .text -r
+#ld: -shared -melf64btsmip
+
+Relocation section '.rel.dyn' at offset .* contains 2 entries:
+ Offset Info Type Sym. Value Sym. Name
+[0-9a-f ]+R_MIPS_NONE
+ +Type2: R_MIPS_NONE
+ +Type3: R_MIPS_NONE
+[0-9a-f ]+R_MIPS_REL32
+ +Type2: R_MIPS_64
+ +Type3: R_MIPS_NONE
+
+Hex dump of section '.text':
+ 0x00000450 00000000 00000000 00000000 00000000 ................
+ 0x00000460 00000000 00000460 00000000 00000000 ................
+ 0x00000470 00000000 00000000 00000000 00000000 ................
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/rel64.s b/binutils-2.21/ld/testsuite/ld-mips-elf/rel64.s
new file mode 100644
index 0000000..3971eb8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/rel64.s
@@ -0,0 +1,4 @@
+ .space 16
+.Lfoo:
+ .dword .Lfoo
+ .space 16
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/relax-jalr-n32-shared.d b/binutils-2.21/ld/testsuite/ld-mips-elf/relax-jalr-n32-shared.d
new file mode 100644
index 0000000..c9288c1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/relax-jalr-n32-shared.d
@@ -0,0 +1,23 @@
+#name: MIPS relax-jalr-shared n32
+#source: relax-jalr.s
+#as: -KPIC -n32 -EB
+#objdump: --prefix-addresses -d --show-raw-insn
+#ld: --relax -shared -melf32btsmipn32
+
+.*: file format elf.*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+ \.\.\.
+.* lw t9,.*
+.* jalr t9
+.* nop
+ \.\.\.
+.* lw t9,.*
+.* jalr t9
+.* nop
+ \.\.\.
+.* lw t9,.*
+.* bal .* <__start>
+.* nop
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/relax-jalr-n32.d b/binutils-2.21/ld/testsuite/ld-mips-elf/relax-jalr-n32.d
new file mode 100644
index 0000000..2478b52
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/relax-jalr-n32.d
@@ -0,0 +1,23 @@
+#name: MIPS relax-jalr n32
+#source: relax-jalr.s
+#as: -KPIC -n32 -EB
+#objdump: --prefix-addresses -d --show-raw-insn
+#ld: --relax -melf32btsmipn32
+
+.*: file format elf.*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+ \.\.\.
+.* lw t9,.*
+.* bal .* <__start>
+.* nop
+ \.\.\.
+.* lw t9,.*
+.* bal .* <__start>
+.* nop
+ \.\.\.
+.* lw t9,.*
+.* bal .* <__start>
+.* nop
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/relax-jalr-n64-shared.d b/binutils-2.21/ld/testsuite/ld-mips-elf/relax-jalr-n64-shared.d
new file mode 100644
index 0000000..e26d5f1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/relax-jalr-n64-shared.d
@@ -0,0 +1,23 @@
+#name: MIPS relax-jalr-shared n64
+#source: relax-jalr.s
+#as: -KPIC -64 -EB
+#objdump: --prefix-addresses -d --show-raw-insn
+#ld: --relax -shared -melf64btsmip
+
+.*: file format elf.*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+ \.\.\.
+.* ld t9,.*
+.* jalr t9
+.* nop
+ \.\.\.
+.* ld t9,.*
+.* jalr t9
+.* nop
+ \.\.\.
+.* ld t9,.*
+.* bal .* <__start>
+.* nop
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/relax-jalr-n64.d b/binutils-2.21/ld/testsuite/ld-mips-elf/relax-jalr-n64.d
new file mode 100644
index 0000000..9e16974
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/relax-jalr-n64.d
@@ -0,0 +1,23 @@
+#name: MIPS relax-jalr n64
+#source: relax-jalr.s
+#as: -KPIC -64 -EB
+#objdump: --prefix-addresses -d --show-raw-insn
+#ld: --relax -melf64btsmip
+
+.*: file format elf.*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+ \.\.\.
+.* ld t9,.*
+.* bal .* <__start>
+.* nop
+ \.\.\.
+.* ld t9,.*
+.* bal .* <__start>
+.* nop
+ \.\.\.
+.* ld t9,.*
+.* bal .* <__start>
+.* nop
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/relax-jalr.s b/binutils-2.21/ld/testsuite/ld-mips-elf/relax-jalr.s
new file mode 100644
index 0000000..ba7ea1a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/relax-jalr.s
@@ -0,0 +1,15 @@
+.globl __start
+ .space 8
+.ent __start
+__start:
+.Lstart:
+ .space 16
+ jal __start
+ .space 32
+ jal __start
+ .space 64
+ jal .Lstart
+.end __start
+
+# make objdump print ...
+ .space 8
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-1-n32.d b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-1-n32.d
new file mode 100644
index 0000000..87a55f9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-1-n32.d
@@ -0,0 +1,199 @@
+#source: reloc-1a.s -mabi=n32
+#source: reloc-1b.s -mabi=n32
+#ld: -r
+#readelf: --relocs
+
+Relocation section '\.rela\.text' .*
+.*
+#
+# Relocations against tstarta
+#
+.* R_MIPS_HI16 .* \.text \- 8010
+.* R_MIPS_LO16 .* \.text \- 8010
+.* R_MIPS_HI16 .* \.text \- 8000
+.* R_MIPS_LO16 .* \.text \- 8000
+.* R_MIPS_HI16 .* \.text \+ 0
+.* R_MIPS_LO16 .* \.text \+ 0
+.* R_MIPS_HI16 .* \.text \+ 7ff0
+.* R_MIPS_LO16 .* \.text \+ 7ff0
+.* R_MIPS_HI16 .* \.text \+ 8010
+.* R_MIPS_LO16 .* \.text \+ 8010
+#
+# Relocations against t32a
+#
+.* R_MIPS_HI16 .* \.text \- 7ff0
+.* R_MIPS_LO16 .* \.text \- 7ff0
+.* R_MIPS_HI16 .* \.text \- 7fe0
+.* R_MIPS_LO16 .* \.text \- 7fe0
+.* R_MIPS_HI16 .* \.text \+ 20
+.* R_MIPS_LO16 .* \.text \+ 20
+.* R_MIPS_HI16 .* \.text \+ 8010
+.* R_MIPS_LO16 .* \.text \+ 8010
+.* R_MIPS_HI16 .* \.text \+ 8030
+.* R_MIPS_LO16 .* \.text \+ 8030
+#
+# Relocations against _start
+#
+.* R_MIPS_HI16 .* _start \- 8010
+.* R_MIPS_LO16 .* _start \- 8010
+.* R_MIPS_HI16 .* _start \- 8000
+.* R_MIPS_LO16 .* _start \- 8000
+.* R_MIPS_HI16 .* _start \+ 0
+.* R_MIPS_LO16 .* _start \+ 0
+.* R_MIPS_HI16 .* _start \+ 7ff0
+.* R_MIPS_LO16 .* _start \+ 7ff0
+.* R_MIPS_HI16 .* _start \+ 8010
+.* R_MIPS_LO16 .* _start \+ 8010
+#
+# Relocations against tstarta
+#
+.* R_MIPS_GOT16 .* \.text \- 8010
+.* R_MIPS_LO16 .* \.text \- 8010
+.* R_MIPS_GOT16 .* \.text \- 8000
+.* R_MIPS_LO16 .* \.text \- 8000
+.* R_MIPS_GOT16 .* \.text \+ 0
+.* R_MIPS_LO16 .* \.text \+ 0
+.* R_MIPS_GOT16 .* \.text \+ 7ff0
+.* R_MIPS_LO16 .* \.text \+ 7ff0
+.* R_MIPS_GOT16 .* \.text \+ 8010
+.* R_MIPS_LO16 .* \.text \+ 8010
+#
+# Relocations against t32a
+#
+.* R_MIPS_GOT16 .* \.text \- 7ff0
+.* R_MIPS_LO16 .* \.text \- 7ff0
+.* R_MIPS_GOT16 .* \.text \- 7fe0
+.* R_MIPS_LO16 .* \.text \- 7fe0
+.* R_MIPS_GOT16 .* \.text \+ 20
+.* R_MIPS_LO16 .* \.text \+ 20
+.* R_MIPS_GOT16 .* \.text \+ 8010
+.* R_MIPS_LO16 .* \.text \+ 8010
+.* R_MIPS_GOT16 .* \.text \+ 8030
+.* R_MIPS_LO16 .* \.text \+ 8030
+#
+# Relocations against sdg
+#
+.* R_MIPS_GPREL16 .* sdg \- 4
+.* R_MIPS_GPREL16 .* sdg \+ 0
+.* R_MIPS_GPREL16 .* sdg \+ 4
+#
+# Relocations against sdla. .sdata should be the first piece of gp-relative
+# data, which the linker script should put _gp - 0x7ff0.
+#
+.* R_MIPS_GPREL16 .* \.sdata \- 7fe4
+.* R_MIPS_GPREL16 .* \.sdata \- 7fe0
+.* R_MIPS_GPREL16 .* \.sdata \- 7fdc
+#
+# Relocations against tstarta
+#
+.* R_MIPS_26 .* \.text \- 4
+.* R_MIPS_26 .* \.text \+ 0
+.* R_MIPS_26 .* \.text \+ 4
+#
+# Relocations against t32a
+#
+.* R_MIPS_26 .* \.text \+ 1c
+.* R_MIPS_26 .* \.text \+ 20
+.* R_MIPS_26 .* \.text \+ 24
+#
+# Relocations against _start
+#
+.* R_MIPS_26 .* _start \- 4
+.* R_MIPS_26 .* _start \+ 0
+.* R_MIPS_26 .* _start \+ 4
+#
+# Relocations against tstartb
+#
+.* R_MIPS_HI16 .* \.text \+ 7fe0
+.* R_MIPS_LO16 .* \.text \+ 7fe0
+.* R_MIPS_HI16 .* \.text \+ 7ff0
+.* R_MIPS_LO16 .* \.text \+ 7ff0
+.* R_MIPS_HI16 .* \.text \+ fff0
+.* R_MIPS_LO16 .* \.text \+ fff0
+.* R_MIPS_HI16 .* \.text \+ 17fe0
+.* R_MIPS_LO16 .* \.text \+ 17fe0
+.* R_MIPS_HI16 .* \.text \+ 18000
+.* R_MIPS_LO16 .* \.text \+ 18000
+#
+# Relocations against t32b
+#
+.* R_MIPS_HI16 .* \.text \+ 8000
+.* R_MIPS_LO16 .* \.text \+ 8000
+.* R_MIPS_HI16 .* \.text \+ 8010
+.* R_MIPS_LO16 .* \.text \+ 8010
+.* R_MIPS_HI16 .* \.text \+ 10010
+.* R_MIPS_LO16 .* \.text \+ 10010
+.* R_MIPS_HI16 .* \.text \+ 18000
+.* R_MIPS_LO16 .* \.text \+ 18000
+.* R_MIPS_HI16 .* \.text \+ 18020
+.* R_MIPS_LO16 .* \.text \+ 18020
+#
+# Relocations against _start
+#
+.* R_MIPS_HI16 .* _start \- 8010
+.* R_MIPS_LO16 .* _start \- 8010
+.* R_MIPS_HI16 .* _start \- 8000
+.* R_MIPS_LO16 .* _start \- 8000
+.* R_MIPS_HI16 .* _start \+ 0
+.* R_MIPS_LO16 .* _start \+ 0
+.* R_MIPS_HI16 .* _start \+ 7ff0
+.* R_MIPS_LO16 .* _start \+ 7ff0
+.* R_MIPS_HI16 .* _start \+ 8010
+.* R_MIPS_LO16 .* _start \+ 8010
+#
+# Relocations against tstartb
+#
+.* R_MIPS_GOT16 .* \.text \+ 7fe0
+.* R_MIPS_LO16 .* \.text \+ 7fe0
+.* R_MIPS_GOT16 .* \.text \+ 7ff0
+.* R_MIPS_LO16 .* \.text \+ 7ff0
+.* R_MIPS_GOT16 .* \.text \+ fff0
+.* R_MIPS_LO16 .* \.text \+ fff0
+.* R_MIPS_GOT16 .* \.text \+ 17fe0
+.* R_MIPS_LO16 .* \.text \+ 17fe0
+.* R_MIPS_GOT16 .* \.text \+ 18000
+.* R_MIPS_LO16 .* \.text \+ 18000
+#
+# Relocations against t32b
+#
+.* R_MIPS_GOT16 .* \.text \+ 8000
+.* R_MIPS_LO16 .* \.text \+ 8000
+.* R_MIPS_GOT16 .* \.text \+ 8010
+.* R_MIPS_LO16 .* \.text \+ 8010
+.* R_MIPS_GOT16 .* \.text \+ 10010
+.* R_MIPS_LO16 .* \.text \+ 10010
+.* R_MIPS_GOT16 .* \.text \+ 18000
+.* R_MIPS_LO16 .* \.text \+ 18000
+.* R_MIPS_GOT16 .* \.text \+ 18020
+.* R_MIPS_LO16 .* \.text \+ 18020
+#
+# Relocations against sdg
+#
+.* R_MIPS_GPREL16 .* sdg \- 4
+.* R_MIPS_GPREL16 .* sdg \+ 0
+.* R_MIPS_GPREL16 .* sdg \+ 4
+#
+# Relocations against sdlb
+#
+.* R_MIPS_GPREL16 .* \.sdata \- 7fc4
+.* R_MIPS_GPREL16 .* \.sdata \- 7fc0
+.* R_MIPS_GPREL16 .* \.sdata \- 7fbc
+#
+# Relocations against tstartb
+#
+.* R_MIPS_26 .* \.text \+ ffec
+.* R_MIPS_26 .* \.text \+ fff0
+.* R_MIPS_26 .* \.text \+ fff4
+#
+# Relocations against t32b
+#
+.* R_MIPS_26 .* \.text \+ 1000c
+.* R_MIPS_26 .* \.text \+ 10010
+.* R_MIPS_26 .* \.text \+ 10014
+#
+# Relocations against _start
+#
+.* R_MIPS_26 .* _start \- 4
+.* R_MIPS_26 .* _start \+ 0
+.* R_MIPS_26 .* _start \+ 4
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-1-n64.d b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-1-n64.d
new file mode 100644
index 0000000..2cfbe9a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-1-n64.d
@@ -0,0 +1,459 @@
+#source: reloc-1a.s -mabi=64 -EB
+#source: reloc-1b.s -mabi=64 -EB
+#ld: -melf64btsmip -r
+#readelf: --relocs
+
+Relocation section '\.rela\.text' .*
+.*
+#
+# Relocations against tstarta
+#
+.* R_MIPS_HI16 .* \.text \- 8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \- 8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* \.text \- 8000
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \- 8000
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* \.text \+ 0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* \.text \+ 7ff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 7ff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* \.text \+ 8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+#
+# Relocations against t32a
+#
+.* R_MIPS_HI16 .* \.text \- 7ff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \- 7ff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* \.text \- 7fe0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \- 7fe0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* \.text \+ 20
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 20
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* \.text \+ 8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* \.text \+ 8030
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 8030
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+#
+# Relocations against _start
+#
+.* R_MIPS_HI16 .* _start \- 8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* _start \- 8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* _start \- 8000
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* _start \- 8000
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* _start \+ 0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* _start \+ 0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* _start \+ 7ff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* _start \+ 7ff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* _start \+ 8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* _start \+ 8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+#
+# Relocations against tstarta
+#
+.* R_MIPS_GOT16 .* \.text \- 8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \- 8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GOT16 .* \.text \- 8000
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \- 8000
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GOT16 .* \.text \+ 0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GOT16 .* \.text \+ 7ff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 7ff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GOT16 .* \.text \+ 8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+#
+# Relocations against t32a
+#
+.* R_MIPS_GOT16 .* \.text \- 7ff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \- 7ff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GOT16 .* \.text \- 7fe0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \- 7fe0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GOT16 .* \.text \+ 20
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 20
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GOT16 .* \.text \+ 8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GOT16 .* \.text \+ 8030
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 8030
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+#
+# Relocations against sdg
+#
+.* R_MIPS_GPREL16 .* sdg \- 4
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GPREL16 .* sdg \+ 0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GPREL16 .* sdg \+ 4
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+#
+# Relocations against sdla. .sdata should be the first piece of gp-relative
+# data, which the linker script should put _gp - 0x7ff0.
+#
+.* R_MIPS_GPREL16 .* \.sdata \- 7fe4
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GPREL16 .* \.sdata \- 7fe0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GPREL16 .* \.sdata \- 7fdc
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+#
+# Relocations against tstarta
+#
+.* R_MIPS_26 .* \.text \- 4
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_26 .* \.text \+ 0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_26 .* \.text \+ 4
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+#
+# Relocations against t32a
+#
+.* R_MIPS_26 .* \.text \+ 1c
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_26 .* \.text \+ 20
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_26 .* \.text \+ 24
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+#
+# Relocations against _start
+#
+.* R_MIPS_26 .* _start \- 4
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_26 .* _start \+ 0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_26 .* _start \+ 4
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+#
+# Relocations against tstartb
+#
+.* R_MIPS_HI16 .* \.text \+ 7fe0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 7fe0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* \.text \+ 7ff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 7ff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* \.text \+ fff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ fff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* \.text \+ 17fe0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 17fe0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* \.text \+ 18000
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 18000
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+#
+# Relocations against t32b
+#
+.* R_MIPS_HI16 .* \.text \+ 8000
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 8000
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* \.text \+ 8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* \.text \+ 10010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 10010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* \.text \+ 18000
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 18000
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* \.text \+ 18020
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 18020
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+#
+# Relocations against _start
+#
+.* R_MIPS_HI16 .* _start \- 8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* _start \- 8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* _start \- 8000
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* _start \- 8000
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* _start \+ 0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* _start \+ 0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* _start \+ 7ff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* _start \+ 7ff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* _start \+ 8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* _start \+ 8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+#
+# Relocations against tstartb
+#
+.* R_MIPS_GOT16 .* \.text \+ 7fe0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 7fe0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GOT16 .* \.text \+ 7ff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 7ff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GOT16 .* \.text \+ fff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ fff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GOT16 .* \.text \+ 17fe0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 17fe0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GOT16 .* \.text \+ 18000
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 18000
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+#
+# Relocations against t32b
+#
+.* R_MIPS_GOT16 .* \.text \+ 8000
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 8000
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GOT16 .* \.text \+ 8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GOT16 .* \.text \+ 10010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 10010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GOT16 .* \.text \+ 18000
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 18000
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GOT16 .* \.text \+ 18020
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ 18020
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+#
+# Relocations against sdg
+#
+.* R_MIPS_GPREL16 .* sdg \- 4
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GPREL16 .* sdg \+ 0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GPREL16 .* sdg \+ 4
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+#
+# Relocations against sdlb
+#
+.* R_MIPS_GPREL16 .* \.sdata \- 7fc4
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GPREL16 .* \.sdata \- 7fc0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GPREL16 .* \.sdata \- 7fbc
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+#
+# Relocations against tstartb
+#
+.* R_MIPS_26 .* \.text \+ ffec
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_26 .* \.text \+ fff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_26 .* \.text \+ fff4
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+#
+# Relocations against t32b
+#
+.* R_MIPS_26 .* \.text \+ 1000c
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_26 .* \.text \+ 10010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_26 .* \.text \+ 10014
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+#
+# Relocations against _start
+#
+.* R_MIPS_26 .* _start \- 4
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_26 .* _start \+ 0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_26 .* _start \+ 4
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-1-rel.d b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-1-rel.d
new file mode 100644
index 0000000..e37da1e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-1-rel.d
@@ -0,0 +1,356 @@
+#source: reloc-1a.s
+#source: reloc-1b.s
+#ld: -r
+#objdump: -dr
+
+.*: file format .*
+
+Disassembly of section \.text:
+
+.* <.*>:
+#
+# Relocations against tstarta
+#
+.*: 3c04ffff lui a0,0xffff
+ .*: R_MIPS_HI16 \.text
+.*: 24847ff0 addiu a0,a0,32752
+ .*: R_MIPS_LO16 \.text
+.*: 3c040000 lui a0,0x0
+ .*: R_MIPS_HI16 \.text
+.*: 24848000 addiu a0,a0,-32768
+ .*: R_MIPS_LO16 \.text
+.*: 3c040000 lui a0,0x0
+ .*: R_MIPS_HI16 \.text
+.*: 24840000 addiu a0,a0,0
+ .*: R_MIPS_LO16 \.text
+.*: 3c040000 lui a0,0x0
+ .*: R_MIPS_HI16 \.text
+.*: 24847ff0 addiu a0,a0,32752
+ .*: R_MIPS_LO16 \.text
+
+.* <t32a>:
+.*: 3c040001 lui a0,0x1
+ .*: R_MIPS_HI16 \.text
+.*: 24848010 addiu a0,a0,-32752
+ .*: R_MIPS_LO16 \.text
+#
+# Relocations against t32a
+#
+.*: 3c040000 lui a0,0x0
+ .*: R_MIPS_HI16 \.text
+.*: 24848010 addiu a0,a0,-32752
+ .*: R_MIPS_LO16 \.text
+.*: 3c040000 lui a0,0x0
+ .*: R_MIPS_HI16 \.text
+.*: 24848020 addiu a0,a0,-32736
+ .*: R_MIPS_LO16 \.text
+.*: 3c040000 lui a0,0x0
+ .*: R_MIPS_HI16 \.text
+.*: 24840020 addiu a0,a0,32
+ .*: R_MIPS_LO16 \.text
+.*: 3c040001 lui a0,0x1
+ .*: R_MIPS_HI16 \.text
+.*: 24848010 addiu a0,a0,-32752
+ .*: R_MIPS_LO16 \.text
+.*: 3c040001 lui a0,0x1
+ .*: R_MIPS_HI16 \.text
+.*: 24848030 addiu a0,a0,-32720
+ .*: R_MIPS_LO16 \.text
+#
+# Relocations against _start
+#
+.*: 3c04ffff lui a0,0xffff
+ .*: R_MIPS_HI16 _start
+.*: 24847ff0 addiu a0,a0,32752
+ .*: R_MIPS_LO16 _start
+.*: 3c040000 lui a0,0x0
+ .*: R_MIPS_HI16 _start
+.*: 24848000 addiu a0,a0,-32768
+ .*: R_MIPS_LO16 _start
+.*: 3c040000 lui a0,0x0
+ .*: R_MIPS_HI16 _start
+.*: 24840000 addiu a0,a0,0
+ .*: R_MIPS_LO16 _start
+.*: 3c040000 lui a0,0x0
+ .*: R_MIPS_HI16 _start
+.*: 24847ff0 addiu a0,a0,32752
+ .*: R_MIPS_LO16 _start
+.*: 3c040001 lui a0,0x1
+ .*: R_MIPS_HI16 _start
+.*: 24848010 addiu a0,a0,-32752
+ .*: R_MIPS_LO16 _start
+#
+# Relocations against tstarta
+#
+.*: 3c04ffff lui a0,0xffff
+ .*: R_MIPS_GOT16 \.text
+.*: 24847ff0 addiu a0,a0,32752
+ .*: R_MIPS_LO16 \.text
+.*: 3c040000 lui a0,0x0
+ .*: R_MIPS_GOT16 \.text
+.*: 24848000 addiu a0,a0,-32768
+ .*: R_MIPS_LO16 \.text
+.*: 3c040000 lui a0,0x0
+ .*: R_MIPS_GOT16 \.text
+.*: 24840000 addiu a0,a0,0
+ .*: R_MIPS_LO16 \.text
+.*: 3c040000 lui a0,0x0
+ .*: R_MIPS_GOT16 \.text
+.*: 24847ff0 addiu a0,a0,32752
+ .*: R_MIPS_LO16 \.text
+.*: 3c040001 lui a0,0x1
+ .*: R_MIPS_GOT16 \.text
+.*: 24848010 addiu a0,a0,-32752
+ .*: R_MIPS_LO16 \.text
+#
+# Relocations against t32a
+#
+.*: 3c040000 lui a0,0x0
+ .*: R_MIPS_GOT16 \.text
+.*: 24848010 addiu a0,a0,-32752
+ .*: R_MIPS_LO16 \.text
+.*: 3c040000 lui a0,0x0
+ .*: R_MIPS_GOT16 \.text
+.*: 24848020 addiu a0,a0,-32736
+ .*: R_MIPS_LO16 \.text
+.*: 3c040000 lui a0,0x0
+ .*: R_MIPS_GOT16 \.text
+.*: 24840020 addiu a0,a0,32
+ .*: R_MIPS_LO16 \.text
+.*: 3c040001 lui a0,0x1
+ .*: R_MIPS_GOT16 \.text
+.*: 24848010 addiu a0,a0,-32752
+ .*: R_MIPS_LO16 \.text
+.*: 3c040001 lui a0,0x1
+ .*: R_MIPS_GOT16 \.text
+.*: 24848030 addiu a0,a0,-32720
+ .*: R_MIPS_LO16 \.text
+#
+# Relocations against sdg
+#
+.*: 2484fffc addiu a0,a0,-4
+ .*: R_MIPS_GPREL16 sdg
+.*: 24840000 addiu a0,a0,0
+ .*: R_MIPS_GPREL16 sdg
+.*: 24840004 addiu a0,a0,4
+ .*: R_MIPS_GPREL16 sdg
+#
+# Relocations against sdla
+#
+.*: 2484801c addiu a0,a0,-32740
+ .*: R_MIPS_GPREL16 \.sdata\+0x7ff0
+.*: 24848020 addiu a0,a0,-32736
+ .*: R_MIPS_GPREL16 \.sdata\+0x7ff0
+.*: 24848024 addiu a0,a0,-32732
+ .*: R_MIPS_GPREL16 \.sdata\+0x7ff0
+#
+# Relocations against tstarta
+#
+.*: 0fffffff jal .*
+ .*: R_MIPS_26 \.text
+.*: 00000000 nop
+.*: 0c000000 jal .*
+ .*: R_MIPS_26 \.text
+.*: 00000000 nop
+.*: 0c000001 jal .*
+ .*: R_MIPS_26 \.text
+.*: 00000000 nop
+#
+# Relocations against t32a
+#
+.*: 0c000007 jal .*
+ .*: R_MIPS_26 \.text
+.*: 00000000 nop
+.*: 0c000008 jal .*
+ .*: R_MIPS_26 \.text
+.*: 00000000 nop
+.*: 0c000009 jal .*
+ .*: R_MIPS_26 \.text
+.*: 00000000 nop
+#
+# Relocations against _start
+#
+.*: 0fffffff jal .*
+ .*: R_MIPS_26 _start
+.*: 00000000 nop
+.*: 0c000000 jal .*
+ .*: R_MIPS_26 _start
+.*: 00000000 nop
+.*: 0c000001 jal .*
+ .*: R_MIPS_26 _start
+.*: 00000000 nop
+ \.\.\.
+
+.* <tstartb>:
+#
+# Relocations against tstartb
+#
+.*: 3c040000 lui a0,0x0
+ .*: R_MIPS_HI16 \.text
+.*: 24847fe0 addiu a0,a0,32736
+ .*: R_MIPS_LO16 \.text
+.*: 3c040000 lui a0,0x0
+ .*: R_MIPS_HI16 \.text
+.*: 24847ff0 addiu a0,a0,32752
+ .*: R_MIPS_LO16 \.text
+.*: 3c040001 lui a0,0x1
+ .*: R_MIPS_HI16 \.text
+.*: 2484fff0 addiu a0,a0,-16
+ .*: R_MIPS_LO16 \.text
+.*: 3c040001 lui a0,0x1
+ .*: R_MIPS_HI16 \.text
+.*: 24847fe0 addiu a0,a0,32736
+ .*: R_MIPS_LO16 \.text
+
+.* <t32b>:
+.*: 3c040002 lui a0,0x2
+ .*: R_MIPS_HI16 \.text
+.*: 24848000 addiu a0,a0,-32768
+ .*: R_MIPS_LO16 \.text
+#
+# Relocations against t32b
+#
+.*: 3c040001 lui a0,0x1
+ .*: R_MIPS_HI16 \.text
+.*: 24848000 addiu a0,a0,-32768
+ .*: R_MIPS_LO16 \.text
+.*: 3c040001 lui a0,0x1
+ .*: R_MIPS_HI16 \.text
+.*: 24848010 addiu a0,a0,-32752
+ .*: R_MIPS_LO16 \.text
+.*: 3c040001 lui a0,0x1
+ .*: R_MIPS_HI16 \.text
+.*: 24840010 addiu a0,a0,16
+ .*: R_MIPS_LO16 \.text
+.*: 3c040002 lui a0,0x2
+ .*: R_MIPS_HI16 \.text
+.*: 24848000 addiu a0,a0,-32768
+ .*: R_MIPS_LO16 \.text
+.*: 3c040002 lui a0,0x2
+ .*: R_MIPS_HI16 \.text
+.*: 24848020 addiu a0,a0,-32736
+ .*: R_MIPS_LO16 \.text
+#
+# Relocations against _start
+#
+.*: 3c04ffff lui a0,0xffff
+ .*: R_MIPS_HI16 _start
+.*: 24847ff0 addiu a0,a0,32752
+ .*: R_MIPS_LO16 _start
+.*: 3c040000 lui a0,0x0
+ .*: R_MIPS_HI16 _start
+.*: 24848000 addiu a0,a0,-32768
+ .*: R_MIPS_LO16 _start
+.*: 3c040000 lui a0,0x0
+ .*: R_MIPS_HI16 _start
+.*: 24840000 addiu a0,a0,0
+ .*: R_MIPS_LO16 _start
+.*: 3c040000 lui a0,0x0
+ .*: R_MIPS_HI16 _start
+.*: 24847ff0 addiu a0,a0,32752
+ .*: R_MIPS_LO16 _start
+.*: 3c040001 lui a0,0x1
+ .*: R_MIPS_HI16 _start
+.*: 24848010 addiu a0,a0,-32752
+ .*: R_MIPS_LO16 _start
+#
+# Relocations against tstartb
+#
+.*: 3c040000 lui a0,0x0
+ .*: R_MIPS_GOT16 \.text
+.*: 24847fe0 addiu a0,a0,32736
+ .*: R_MIPS_LO16 \.text
+.*: 3c040000 lui a0,0x0
+ .*: R_MIPS_GOT16 \.text
+.*: 24847ff0 addiu a0,a0,32752
+ .*: R_MIPS_LO16 \.text
+.*: 3c040001 lui a0,0x1
+ .*: R_MIPS_GOT16 \.text
+.*: 2484fff0 addiu a0,a0,-16
+ .*: R_MIPS_LO16 \.text
+.*: 3c040001 lui a0,0x1
+ .*: R_MIPS_GOT16 \.text
+.*: 24847fe0 addiu a0,a0,32736
+ .*: R_MIPS_LO16 \.text
+.*: 3c040002 lui a0,0x2
+ .*: R_MIPS_GOT16 \.text
+.*: 24848000 addiu a0,a0,-32768
+ .*: R_MIPS_LO16 \.text
+#
+# Relocations against t32b
+#
+.*: 3c040001 lui a0,0x1
+ .*: R_MIPS_GOT16 \.text
+.*: 24848000 addiu a0,a0,-32768
+ .*: R_MIPS_LO16 \.text
+.*: 3c040001 lui a0,0x1
+ .*: R_MIPS_GOT16 \.text
+.*: 24848010 addiu a0,a0,-32752
+ .*: R_MIPS_LO16 \.text
+.*: 3c040001 lui a0,0x1
+ .*: R_MIPS_GOT16 \.text
+.*: 24840010 addiu a0,a0,16
+ .*: R_MIPS_LO16 \.text
+.*: 3c040002 lui a0,0x2
+ .*: R_MIPS_GOT16 \.text
+.*: 24848000 addiu a0,a0,-32768
+ .*: R_MIPS_LO16 \.text
+.*: 3c040002 lui a0,0x2
+ .*: R_MIPS_GOT16 \.text
+.*: 24848020 addiu a0,a0,-32736
+ .*: R_MIPS_LO16 \.text
+#
+# Relocations against sdg
+#
+.*: 2484fffc addiu a0,a0,-4
+ .*: R_MIPS_GPREL16 sdg
+.*: 24840000 addiu a0,a0,0
+ .*: R_MIPS_GPREL16 sdg
+.*: 24840004 addiu a0,a0,4
+ .*: R_MIPS_GPREL16 sdg
+#
+# Relocations against sdlb
+#
+.*: 2484803c addiu a0,a0,-32708
+ .*: R_MIPS_GPREL16 \.sdata\+0x7ff0
+.*: 24848040 addiu a0,a0,-32704
+ .*: R_MIPS_GPREL16 \.sdata\+0x7ff0
+.*: 24848044 addiu a0,a0,-32700
+ .*: R_MIPS_GPREL16 \.sdata\+0x7ff0
+#
+# Relocations against tstartb
+#
+.*: 0c003ffb jal .*
+ .*: R_MIPS_26 \.text
+.*: 00000000 nop
+.*: 0c003ffc jal .*
+ .*: R_MIPS_26 \.text
+.*: 00000000 nop
+.*: 0c003ffd jal .*
+ .*: R_MIPS_26 \.text
+.*: 00000000 nop
+#
+# Relocations against t32b
+#
+.*: 0c004003 jal .*
+ .*: R_MIPS_26 \.text
+.*: 00000000 nop
+.*: 0c004004 jal .*
+ .*: R_MIPS_26 \.text
+.*: 00000000 nop
+.*: 0c004005 jal .*
+ .*: R_MIPS_26 \.text
+.*: 00000000 nop
+#
+# Relocations against _start
+#
+.*: 0fffffff jal .*
+ .*: R_MIPS_26 _start
+.*: 00000000 nop
+.*: 0c000000 jal .*
+ .*: R_MIPS_26 _start
+.*: 00000000 nop
+.*: 0c000001 jal .*
+ .*: R_MIPS_26 _start
+.*: 00000000 nop
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-1a.s b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-1a.s
new file mode 100644
index 0000000..5fcd4bb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-1a.s
@@ -0,0 +1,100 @@
+ .globl _start
+ .globl sdg
+ .set noreorder
+ .ent tstarta
+tstarta:
+_start:
+ lui $4,%hi(tstarta - 0x8010)
+ addiu $4,$4,%lo(tstarta - 0x8010)
+ lui $4,%hi(tstarta - 0x8000)
+ addiu $4,$4,%lo(tstarta - 0x8000)
+ lui $4,%hi(tstarta)
+ addiu $4,$4,%lo(tstarta)
+ lui $4,%hi(tstarta + 0x7ff0)
+ addiu $4,$4,%lo(tstarta + 0x7ff0)
+t32a:
+ lui $4,%hi(tstarta + 0x8010)
+ addiu $4,$4,%lo(tstarta + 0x8010)
+
+ lui $4,%hi(t32a - 0x8010)
+ addiu $4,$4,%lo(t32a - 0x8010)
+ lui $4,%hi(t32a - 0x8000)
+ addiu $4,$4,%lo(t32a - 0x8000)
+ lui $4,%hi(t32a)
+ addiu $4,$4,%lo(t32a)
+ lui $4,%hi(t32a + 0x7ff0)
+ addiu $4,$4,%lo(t32a + 0x7ff0)
+ lui $4,%hi(t32a + 0x8010)
+ addiu $4,$4,%lo(t32a + 0x8010)
+
+ lui $4,%hi(_start - 0x8010)
+ addiu $4,$4,%lo(_start - 0x8010)
+ lui $4,%hi(_start - 0x8000)
+ addiu $4,$4,%lo(_start - 0x8000)
+ lui $4,%hi(_start)
+ addiu $4,$4,%lo(_start)
+ lui $4,%hi(_start + 0x7ff0)
+ addiu $4,$4,%lo(_start + 0x7ff0)
+ lui $4,%hi(_start + 0x8010)
+ addiu $4,$4,%lo(_start + 0x8010)
+
+ lui $4,%got(tstarta - 0x8010)
+ addiu $4,$4,%lo(tstarta - 0x8010)
+ lui $4,%got(tstarta - 0x8000)
+ addiu $4,$4,%lo(tstarta - 0x8000)
+ lui $4,%got(tstarta)
+ addiu $4,$4,%lo(tstarta)
+ lui $4,%got(tstarta + 0x7ff0)
+ addiu $4,$4,%lo(tstarta + 0x7ff0)
+ lui $4,%got(tstarta + 0x8010)
+ addiu $4,$4,%lo(tstarta + 0x8010)
+
+ lui $4,%got(t32a - 0x8010)
+ addiu $4,$4,%lo(t32a - 0x8010)
+ lui $4,%got(t32a - 0x8000)
+ addiu $4,$4,%lo(t32a - 0x8000)
+ lui $4,%got(t32a)
+ addiu $4,$4,%lo(t32a)
+ lui $4,%got(t32a + 0x7ff0)
+ addiu $4,$4,%lo(t32a + 0x7ff0)
+ lui $4,%got(t32a + 0x8010)
+ addiu $4,$4,%lo(t32a + 0x8010)
+
+ addiu $4,$4,%gp_rel(sdg - 4)
+ addiu $4,$4,%gp_rel(sdg)
+ addiu $4,$4,%gp_rel(sdg + 4)
+
+ addiu $4,$4,%gp_rel(sdla - 4)
+ addiu $4,$4,%gp_rel(sdla)
+ addiu $4,$4,%gp_rel(sdla + 4)
+
+ jal tstarta - 4
+ nop
+ jal tstarta
+ nop
+ jal tstarta + 4
+ nop
+
+ jal t32a - 4
+ nop
+ jal t32a
+ nop
+ jal t32a + 4
+ nop
+
+ jal _start - 4
+ nop
+ jal _start
+ nop
+ jal _start + 4
+ nop
+
+ .org 0xfff0
+
+ .end tstarta
+
+ .section .sdata
+ .space 16
+sdg:
+sdla:
+ .space 16
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-1b.s b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-1b.s
new file mode 100644
index 0000000..8b9544c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-1b.s
@@ -0,0 +1,95 @@
+ .set noreorder
+ .ent tstartb
+tstartb:
+ lui $4,%hi(tstartb - 0x8010) # .text + 0x7fe0
+ addiu $4,$4,%lo(tstartb - 0x8010)
+ lui $4,%hi(tstartb - 0x8000) # .text + 0x7ff0
+ addiu $4,$4,%lo(tstartb - 0x8000)
+ lui $4,%hi(tstartb) # .text + 0xfff0
+ addiu $4,$4,%lo(tstartb)
+ lui $4,%hi(tstartb + 0x7ff0) # .text + 0x17fe0
+ addiu $4,$4,%lo(tstartb + 0x7ff0)
+t32b:
+ lui $4,%hi(tstartb + 0x8010) # .text + 0x18000
+ addiu $4,$4,%lo(tstartb + 0x8010)
+
+ lui $4,%hi(t32b - 0x8010) # .text + 0x8000
+ addiu $4,$4,%lo(t32b - 0x8010)
+ lui $4,%hi(t32b - 0x8000) # .text + 0x8010
+ addiu $4,$4,%lo(t32b - 0x8000)
+ lui $4,%hi(t32b) # .text + 0x10010
+ addiu $4,$4,%lo(t32b)
+ lui $4,%hi(t32b + 0x7ff0) # .text + 0x18000
+ addiu $4,$4,%lo(t32b + 0x7ff0)
+ lui $4,%hi(t32b + 0x8010) # .text + 0x18020
+ addiu $4,$4,%lo(t32b + 0x8010)
+
+ lui $4,%hi(_start - 0x8010)
+ addiu $4,$4,%lo(_start - 0x8010)
+ lui $4,%hi(_start - 0x8000)
+ addiu $4,$4,%lo(_start - 0x8000)
+ lui $4,%hi(_start)
+ addiu $4,$4,%lo(_start)
+ lui $4,%hi(_start + 0x7ff0)
+ addiu $4,$4,%lo(_start + 0x7ff0)
+ lui $4,%hi(_start + 0x8010)
+ addiu $4,$4,%lo(_start + 0x8010)
+
+ lui $4,%got(tstartb - 0x8010) # .text + 0x7fe0
+ addiu $4,$4,%lo(tstartb - 0x8010)
+ lui $4,%got(tstartb - 0x8000) # .text + 0x7ff0
+ addiu $4,$4,%lo(tstartb - 0x8000)
+ lui $4,%got(tstartb) # .text + 0xfff0
+ addiu $4,$4,%lo(tstartb)
+ lui $4,%got(tstartb + 0x7ff0) # .text + 0x17fe0
+ addiu $4,$4,%lo(tstartb + 0x7ff0)
+ lui $4,%got(tstartb + 0x8010) # .text + 0x18000
+ addiu $4,$4,%lo(tstartb + 0x8010)
+
+ lui $4,%got(t32b - 0x8010) # .text + 0x8000
+ addiu $4,$4,%lo(t32b - 0x8010)
+ lui $4,%got(t32b - 0x8000) # .text + 0x8010
+ addiu $4,$4,%lo(t32b - 0x8000)
+ lui $4,%got(t32b) # .text + 0x10010
+ addiu $4,$4,%lo(t32b)
+ lui $4,%got(t32b + 0x7ff0) # .text + 0x18000
+ addiu $4,$4,%lo(t32b + 0x7ff0)
+ lui $4,%got(t32b + 0x8010) # .text + 0x18020
+ addiu $4,$4,%lo(t32b + 0x8010)
+
+ addiu $4,$4,%gp_rel(sdg - 4)
+ addiu $4,$4,%gp_rel(sdg)
+ addiu $4,$4,%gp_rel(sdg + 4)
+
+ addiu $4,$4,%gp_rel(sdlb - 4)
+ addiu $4,$4,%gp_rel(sdlb)
+ addiu $4,$4,%gp_rel(sdlb + 4)
+
+ jal tstartb - 4 # .text + 0xffec
+ nop
+ jal tstartb # .text + 0xfff0
+ nop
+ jal tstartb + 4 # .text + 0xfff4
+ nop
+
+ jal t32b - 4 # .text + 0x1000c
+ nop
+ jal t32b # .text + 0x10010
+ nop
+ jal t32b + 4 # .text + 0x10014
+ nop
+
+ jal _start - 4
+ nop
+ jal _start
+ nop
+ jal _start + 4
+ nop
+
+ .space 16
+ .end tstartb
+
+ .section .sdata
+ .space 16
+sdlb:
+ .space 16
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-2.d b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-2.d
new file mode 100644
index 0000000..740211e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-2.d
@@ -0,0 +1,169 @@
+#source: reloc-2a.s -EB -mabi=32
+#source: reloc-2b.s -EB -mabi=32
+#ld: --oformat=srec -Treloc-2.ld
+#objdump: -D -mmips:4000 --endian=big
+
+.*: file format .*
+
+Disassembly of section .*:
+
+.* <.*>:
+#
+# Relocations against tstarta
+#
+.*: 3c040020 lui a0,0x20
+.*: 2484fff0 addiu a0,a0,-16
+.*: 3c040020 lui a0,0x20
+.*: 24840000 addiu a0,a0,0
+.*: 3c040021 lui a0,0x21
+.*: 24848000 addiu a0,a0,-32768
+.*: 3c040021 lui a0,0x21
+.*: 2484fff0 addiu a0,a0,-16
+.*: 3c040021 lui a0,0x21
+.*: 24840010 addiu a0,a0,16
+#
+# Relocations against t32a
+#
+.*: 3c040020 lui a0,0x20
+.*: 24840010 addiu a0,a0,16
+.*: 3c040020 lui a0,0x20
+.*: 24840020 addiu a0,a0,32
+.*: 3c040021 lui a0,0x21
+.*: 24848020 addiu a0,a0,-32736
+.*: 3c040021 lui a0,0x21
+.*: 24840010 addiu a0,a0,16
+.*: 3c040021 lui a0,0x21
+.*: 24840030 addiu a0,a0,48
+#
+# Relocations against _start
+#
+.*: 3c040020 lui a0,0x20
+.*: 2484fff0 addiu a0,a0,-16
+.*: 3c040020 lui a0,0x20
+.*: 24840000 addiu a0,a0,0
+.*: 3c040021 lui a0,0x21
+.*: 24848000 addiu a0,a0,-32768
+.*: 3c040021 lui a0,0x21
+.*: 2484fff0 addiu a0,a0,-16
+.*: 3c040021 lui a0,0x21
+.*: 24840010 addiu a0,a0,16
+#
+# Relocations against sdg
+#
+.*: 2484edd8 addiu a0,a0,-4648
+.*: 2484eddc addiu a0,a0,-4644
+.*: 2484ede0 addiu a0,a0,-4640
+#
+# Relocations against sdla
+#
+.*: 2484edd8 addiu a0,a0,-4648
+.*: 2484eddc addiu a0,a0,-4644
+.*: 2484ede0 addiu a0,a0,-4640
+#
+# Relocations against tstarta
+#
+.*: 0c081fff jal 0x207ffc
+.*: 00000000 nop
+.*: 0c082000 jal 0x208000
+.*: 00000000 nop
+.*: 0c082001 jal 0x208004
+.*: 00000000 nop
+#
+# Relocations against t32a
+#
+.*: 0c082007 jal 0x20801c
+.*: 00000000 nop
+.*: 0c082008 jal 0x208020
+.*: 00000000 nop
+.*: 0c082009 jal 0x208024
+.*: 00000000 nop
+#
+# Relocations against _start
+#
+.*: 0c081fff jal 0x207ffc
+.*: 00000000 nop
+.*: 0c082000 jal 0x208000
+.*: 00000000 nop
+.*: 0c082001 jal 0x208004
+.*: 00000000 nop
+ \.\.\.
+#
+# Relocations against tstartb
+#
+.*: 3c040021 lui a0,0x21
+.*: 2484ffe0 addiu a0,a0,-32
+.*: 3c040021 lui a0,0x21
+.*: 2484fff0 addiu a0,a0,-16
+.*: 3c040021 lui a0,0x21
+.*: 24847ff0 addiu a0,a0,32752
+.*: 3c040022 lui a0,0x22
+.*: 2484ffe0 addiu a0,a0,-32
+.*: 3c040022 lui a0,0x22
+.*: 24840000 addiu a0,a0,0
+#
+# Relocations against t32b
+#
+.*: 3c040021 lui a0,0x21
+.*: 24840000 addiu a0,a0,0
+.*: 3c040021 lui a0,0x21
+.*: 24840010 addiu a0,a0,16
+.*: 3c040022 lui a0,0x22
+.*: 24848010 addiu a0,a0,-32752
+.*: 3c040022 lui a0,0x22
+.*: 24840000 addiu a0,a0,0
+.*: 3c040022 lui a0,0x22
+.*: 24840020 addiu a0,a0,32
+#
+# Relocations against _start
+#
+.*: 3c040020 lui a0,0x20
+.*: 2484fff0 addiu a0,a0,-16
+.*: 3c040020 lui a0,0x20
+.*: 24840000 addiu a0,a0,0
+.*: 3c040021 lui a0,0x21
+.*: 24848000 addiu a0,a0,-32768
+.*: 3c040021 lui a0,0x21
+.*: 2484fff0 addiu a0,a0,-16
+.*: 3c040021 lui a0,0x21
+.*: 24840010 addiu a0,a0,16
+#
+# Relocations against sdg
+#
+.*: 2484edd8 addiu a0,a0,-4648
+.*: 2484eddc addiu a0,a0,-4644
+.*: 2484ede0 addiu a0,a0,-4640
+#
+# Relocations against sdl2
+#
+.*: 2484edf8 addiu a0,a0,-4616
+.*: 2484edfc addiu a0,a0,-4612
+.*: 2484ee00 addiu a0,a0,-4608
+#
+# Relocations against tstartb
+#
+.*: 0c085ffb jal 0x217fec
+.*: 00000000 nop
+.*: 0c085ffc jal 0x217ff0
+.*: 00000000 nop
+.*: 0c085ffd jal 0x217ff4
+.*: 00000000 nop
+#
+# Relocations against t32b
+#
+.*: 0c086003 jal 0x21800c
+.*: 00000000 nop
+.*: 0c086004 jal 0x218010
+.*: 00000000 nop
+.*: 0c086005 jal 0x218014
+.*: 00000000 nop
+#
+# Relocations against _start
+#
+.*: 0c081fff jal 0x207ffc
+.*: 00000000 nop
+.*: 0c082000 jal 0x208000
+.*: 00000000 nop
+.*: 0c082001 jal 0x208004
+.*: 00000000 nop
+ \.\.\.
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-2.ld b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-2.ld
new file mode 100644
index 0000000..ff0b291
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-2.ld
@@ -0,0 +1,9 @@
+SECTIONS
+{
+ . = 0x208000;
+ .text : { *(.text) }
+ . = 0x400000;
+ _gp = 0x401234;
+ .sdata : { *(.sdata) }
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-2a.s b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-2a.s
new file mode 100644
index 0000000..0ea830a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-2a.s
@@ -0,0 +1,78 @@
+ .globl _start
+ .globl sdg
+ .set noreorder
+ .ent tstarta
+tstarta:
+_start:
+ lui $4,%hi(tstarta - 0x8010)
+ addiu $4,$4,%lo(tstarta - 0x8010)
+ lui $4,%hi(tstarta - 0x8000)
+ addiu $4,$4,%lo(tstarta - 0x8000)
+ lui $4,%hi(tstarta)
+ addiu $4,$4,%lo(tstarta)
+ lui $4,%hi(tstarta + 0x7ff0)
+ addiu $4,$4,%lo(tstarta + 0x7ff0)
+t32a:
+ lui $4,%hi(tstarta + 0x8010)
+ addiu $4,$4,%lo(tstarta + 0x8010)
+
+ lui $4,%hi(t32a - 0x8010)
+ addiu $4,$4,%lo(t32a - 0x8010)
+ lui $4,%hi(t32a - 0x8000)
+ addiu $4,$4,%lo(t32a - 0x8000)
+ lui $4,%hi(t32a)
+ addiu $4,$4,%lo(t32a)
+ lui $4,%hi(t32a + 0x7ff0)
+ addiu $4,$4,%lo(t32a + 0x7ff0)
+ lui $4,%hi(t32a + 0x8010)
+ addiu $4,$4,%lo(t32a + 0x8010)
+
+ lui $4,%hi(_start - 0x8010)
+ addiu $4,$4,%lo(_start - 0x8010)
+ lui $4,%hi(_start - 0x8000)
+ addiu $4,$4,%lo(_start - 0x8000)
+ lui $4,%hi(_start)
+ addiu $4,$4,%lo(_start)
+ lui $4,%hi(_start + 0x7ff0)
+ addiu $4,$4,%lo(_start + 0x7ff0)
+ lui $4,%hi(_start + 0x8010)
+ addiu $4,$4,%lo(_start + 0x8010)
+
+ addiu $4,$4,%gp_rel(sdg - 4)
+ addiu $4,$4,%gp_rel(sdg)
+ addiu $4,$4,%gp_rel(sdg + 4)
+
+ addiu $4,$4,%gp_rel(sdla - 4)
+ addiu $4,$4,%gp_rel(sdla)
+ addiu $4,$4,%gp_rel(sdla + 4)
+
+ jal tstarta - 4
+ nop
+ jal tstarta
+ nop
+ jal tstarta + 4
+ nop
+
+ jal t32a - 4
+ nop
+ jal t32a
+ nop
+ jal t32a + 4
+ nop
+
+ jal _start - 4
+ nop
+ jal _start
+ nop
+ jal _start + 4
+ nop
+
+ .org 0xfff0
+
+ .end tstarta
+
+ .section .sdata
+ .space 16
+sdg:
+sdla:
+ .space 16
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-2b.s b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-2b.s
new file mode 100644
index 0000000..3a9d694
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-2b.s
@@ -0,0 +1,73 @@
+ .set noreorder
+ .ent tstartb
+tstartb:
+ lui $4,%hi(tstartb - 0x8010) # .text + 0x7fe0
+ addiu $4,$4,%lo(tstartb - 0x8010)
+ lui $4,%hi(tstartb - 0x8000) # .text + 0x7ff0
+ addiu $4,$4,%lo(tstartb - 0x8000)
+ lui $4,%hi(tstartb) # .text + 0xfff0
+ addiu $4,$4,%lo(tstartb)
+ lui $4,%hi(tstartb + 0x7ff0) # .text + 0x17fe0
+ addiu $4,$4,%lo(tstartb + 0x7ff0)
+t32b:
+ lui $4,%hi(tstartb + 0x8010) # .text + 0x18000
+ addiu $4,$4,%lo(tstartb + 0x8010)
+
+ lui $4,%hi(t32b - 0x8010) # .text + 0x8000
+ addiu $4,$4,%lo(t32b - 0x8010)
+ lui $4,%hi(t32b - 0x8000) # .text + 0x8010
+ addiu $4,$4,%lo(t32b - 0x8000)
+ lui $4,%hi(t32b) # .text + 0x10010
+ addiu $4,$4,%lo(t32b)
+ lui $4,%hi(t32b + 0x7ff0) # .text + 0x18000
+ addiu $4,$4,%lo(t32b + 0x7ff0)
+ lui $4,%hi(t32b + 0x8010) # .text + 0x18020
+ addiu $4,$4,%lo(t32b + 0x8010)
+
+ lui $4,%hi(_start - 0x8010)
+ addiu $4,$4,%lo(_start - 0x8010)
+ lui $4,%hi(_start - 0x8000)
+ addiu $4,$4,%lo(_start - 0x8000)
+ lui $4,%hi(_start)
+ addiu $4,$4,%lo(_start)
+ lui $4,%hi(_start + 0x7ff0)
+ addiu $4,$4,%lo(_start + 0x7ff0)
+ lui $4,%hi(_start + 0x8010)
+ addiu $4,$4,%lo(_start + 0x8010)
+
+ addiu $4,$4,%gp_rel(sdg - 4)
+ addiu $4,$4,%gp_rel(sdg)
+ addiu $4,$4,%gp_rel(sdg + 4)
+
+ addiu $4,$4,%gp_rel(sdlb - 4)
+ addiu $4,$4,%gp_rel(sdlb)
+ addiu $4,$4,%gp_rel(sdlb + 4)
+
+ jal tstartb - 4 # .text + 0xffec
+ nop
+ jal tstartb # .text + 0xfff0
+ nop
+ jal tstartb + 4 # .text + 0xfff4
+ nop
+
+ jal t32b - 4 # .text + 0x1000c
+ nop
+ jal t32b # .text + 0x10010
+ nop
+ jal t32b + 4 # .text + 0x10014
+ nop
+
+ jal _start - 4
+ nop
+ jal _start
+ nop
+ jal _start + 4
+ nop
+
+ .space 16
+ .end tstartb
+
+ .section .sdata
+ .space 16
+sdlb:
+ .space 16
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-3-n32.d b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-3-n32.d
new file mode 100644
index 0000000..e90180b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-3-n32.d
@@ -0,0 +1,18 @@
+#name: R_MIPS16_GPREL reloc n32
+#source: ../../../gas/testsuite/gas/mips/elf-rel6.s
+#as: -march=mips64 -mabi=n32 -EB
+#objdump: --prefix-addresses -tdr --show-raw-insn
+#ld: -Ttext 0x20000000 -e 0x20000000 -N -melf32btsmipn32
+
+
+.*: file format elf.*mips.*
+
+#...
+
+Disassembly of section \.text:
+0*20000000 <[^>]*> f010 8352 lb v0,-32750\(v1\)
+0*20000004 <[^>]*> f010 8353 lb v0,-32749\(v1\)
+0*20000008 <[^>]*> f252 8346 lb v0,-28090\(v1\)
+0*2000000c <[^>]*> 6500 nop
+0*2000000e <[^>]*> 6500 nop
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-3.d b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-3.d
new file mode 100644
index 0000000..1ec51c5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-3.d
@@ -0,0 +1,16 @@
+#name: R_MIPS16_GPREL reloc
+#source: ../../../gas/testsuite/gas/mips/elf-rel6.s
+#objdump: --prefix-addresses -tdr --show-raw-insn
+#ld: -Ttext 0x20000000 -e 0x20000000 -N
+
+.*: file format elf.*mips.*
+
+#...
+
+Disassembly of section \.text:
+0*20000000 <[^>]*> f010 8352 lb v0,-32750\(v1\)
+0*20000004 <[^>]*> f010 8353 lb v0,-32749\(v1\)
+0*20000008 <[^>]*> f252 8346 lb v0,-28090\(v1\)
+0*2000000c <[^>]*> 6500 nop
+0*2000000e <[^>]*> 6500 nop
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-4.d b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-4.d
new file mode 100644
index 0000000..936a861
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-4.d
@@ -0,0 +1,3 @@
+#source: reloc-4.s
+#ld:
+#error: small-data section exceeds 64KB.*truncated to fit: R_MIPS_LITERAL
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-4.s b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-4.s
new file mode 100644
index 0000000..061fa80
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-4.s
@@ -0,0 +1,7 @@
+ .text
+ .globl _start
+_start:
+ li.d $f2,1.10000000000000000000e0
+
+ .section .sdata
+ .space 0x10000
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-5.d b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-5.d
new file mode 100644
index 0000000..2fc74ea
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-5.d
@@ -0,0 +1,3 @@
+#source: reloc-5.s
+#ld:
+#error: small-data section exceeds 64KB.*truncated to fit: R_MIPS_GPREL16
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-5.s b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-5.s
new file mode 100644
index 0000000..a4b31b7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-5.s
@@ -0,0 +1,11 @@
+ .text
+ .globl _start
+_start:
+ lw $2, %gp_rel(i)($28)
+
+ .section .sdata
+ .space 0x10000
+
+ .section .sbss
+i:
+ .space 4
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-estimate-1.d b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-estimate-1.d
new file mode 100644
index 0000000..0d49b05
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-estimate-1.d
@@ -0,0 +1,18 @@
+#name: MIPS reloc estimation 1
+#source: reloc-estimate-1a.s
+#source: reloc-estimate-1b.s
+#ld: -shared -T reloc-estimate-1.ld
+#objdump: -R -sj.foo
+
+.*
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00000000 R_MIPS_NONE \*ABS\*
+00010000 R_MIPS_REL32 foo
+
+
+# The address must be 0x810. We should only ever allocate one dynamic
+# reloc over and above the first R_MIPS_NONE entry.
+Contents of section \.foo:
+ 0810 (deadbeef|efbeadde) ....
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-estimate-1.ld b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-estimate-1.ld
new file mode 100644
index 0000000..776e503
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-estimate-1.ld
@@ -0,0 +1,29 @@
+SECTIONS
+{
+ . = 0;
+ .reginfo : { *(.reginfo) }
+
+ . = ALIGN (0x400);
+ .dynamic : { *(.dynamic) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+
+ . = ALIGN (0x400);
+ .rel.dyn : { *(.rel.dyn) }
+ .foo : { *(.foo) }
+ .text : { *(.text) }
+
+ . = ALIGN (0x400);
+ .MIPS.stubs : { *(.MIPS.stubs) }
+
+ . = ALIGN (0x10000);
+ .data : { *(.data) }
+
+ . = ALIGN (0x400);
+ _gp = . + 0x7ff0;
+ .got : { *(.got) }
+}
+
+VERSION {
+ V2 { global: foo; local: *; };
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-estimate-1a.s b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-estimate-1a.s
new file mode 100644
index 0000000..564c62a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-estimate-1a.s
@@ -0,0 +1,6 @@
+ .section .foo,"a",@progbits
+ .word 0xdeadbeef
+
+ .abicalls
+ .data
+ .word foo
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-estimate-1b.s b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-estimate-1b.s
new file mode 100644
index 0000000..dd308b4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-estimate-1b.s
@@ -0,0 +1,7 @@
+ .abicalls
+ .symver foo2,foo@@V2
+ .global foo2
+ .data
+ .type foo2,%object
+ .size foo2,4
+foo2: .word 0
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-merge-lo16.d b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-merge-lo16.d
new file mode 100644
index 0000000..7cb3cfe
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-merge-lo16.d
@@ -0,0 +1,16 @@
+#name: MIPS ELF lo16 merge
+#source: reloc-merge-lo16.s
+#ld: -Treloc-merge-lo16.ld
+#objdump: -td --prefix-addresses --show-raw-insn
+
+# Test lo16 reloc calculation with string merging.
+
+.*: +file format .*mips.*
+#...
+0+80fe70 l .rodata 0+000000 g
+0+400000 g F .text 0+00000c __start
+#...
+0+400000 <[^>]*> 3c020081 lui v0,0x81
+0+400004 <[^>]*> 2443fe70 addiu v1,v0,-400
+0+400008 <[^>]*> 2442fe70 addiu v0,v0,-400
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-merge-lo16.ld b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-merge-lo16.ld
new file mode 100644
index 0000000..4d487dd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-merge-lo16.ld
@@ -0,0 +1,9 @@
+ENTRY(__start)
+SECTIONS
+{
+ . = 0x0400000;
+ .text : { *(.text) }
+ . = 0x0800000;
+ .rodata : { *(.rodata.*) }
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-merge-lo16.s b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-merge-lo16.s
new file mode 100644
index 0000000..33158b1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/reloc-merge-lo16.s
@@ -0,0 +1,28 @@
+ .section .rodata.str1.4,"aMS", @progbits, 1
+ .macro fillstr char
+ .rept 0x3fff - \char
+ .byte \char
+ .endr
+ .byte 0
+ .endm
+ fillstr 'a'
+ fillstr 'h'
+ fillstr 'c'
+ fillstr 'd'
+ fillstr 'g'
+ fillstr 'f'
+g:
+ fillstr 'g'
+ fillstr 'h'
+
+ .text
+ .globl __start
+ .ent __start
+ .type __start, @function
+__start:
+ lui $2, %hi(g)
+ addiu $3, $2, %lo(g)
+ addiu $2, $2, %lo(g)
+ .end __start
+
+ .space 16
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1-10000.d b/binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1-10000.d
new file mode 100644
index 0000000..b59bb5f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1-10000.d
@@ -0,0 +1,18 @@
+
+.*: file format elf32-tradbigmips
+
+Disassembly of section \.MIPS\.stubs:
+
+.* <\.MIPS.stubs>:
+.*: 8f998010 lw t9,-32752\(gp\)
+.*: 03e07821 move t7,ra
+.*: 3c180001 lui t8,0x1
+.*: 0320f809 jalr t9
+.*: 37180000 ori t8,t8,0x0
+.*: 00000000 nop
+.*: 00000000 nop
+.*: 00000000 nop
+.*: 00000000 nop
+.*: 00000000 nop
+Disassembly of section .text:
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1-2fe80.d b/binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1-2fe80.d
new file mode 100644
index 0000000..07ca1a2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1-2fe80.d
@@ -0,0 +1,18 @@
+
+.*: file format elf32-tradbigmips
+
+Disassembly of section \.MIPS\.stubs:
+
+.* <\.MIPS.stubs>:
+.*: 8f998010 lw t9,-32752\(gp\)
+.*: 03e07821 move t7,ra
+.*: 3c180002 lui t8,0x2
+.*: 0320f809 jalr t9
+.*: 3718fe80 ori t8,t8,0xfe80
+.*: 00000000 nop
+.*: 00000000 nop
+.*: 00000000 nop
+.*: 00000000 nop
+.*: 00000000 nop
+Disassembly of section .text:
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1-7fff.d b/binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1-7fff.d
new file mode 100644
index 0000000..bfc94c5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1-7fff.d
@@ -0,0 +1,16 @@
+
+.*: file format elf32-tradbigmips
+
+Disassembly of section \.MIPS\.stubs:
+
+.* <\.MIPS.stubs>:
+.*: 8f998010 lw t9,-32752\(gp\)
+.*: 03e07821 move t7,ra
+.*: 0320f809 jalr t9
+.*: 24187fff li t8,32767
+.*: 00000000 nop
+.*: 00000000 nop
+.*: 00000000 nop
+.*: 00000000 nop
+Disassembly of section .text:
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1-8000.d b/binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1-8000.d
new file mode 100644
index 0000000..2861ac2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1-8000.d
@@ -0,0 +1,16 @@
+
+.*: file format elf32-tradbigmips
+
+Disassembly of section \.MIPS\.stubs:
+
+.* <\.MIPS.stubs>:
+.*: 8f998010 lw t9,-32752\(gp\)
+.*: 03e07821 move t7,ra
+.*: 0320f809 jalr t9
+.*: 34188000 li t8,0x8000
+.*: 00000000 nop
+.*: 00000000 nop
+.*: 00000000 nop
+.*: 00000000 nop
+Disassembly of section .text:
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1-fff0.d b/binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1-fff0.d
new file mode 100644
index 0000000..440d32a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1-fff0.d
@@ -0,0 +1,16 @@
+
+.*: file format elf32-tradbigmips
+
+Disassembly of section \.MIPS\.stubs:
+
+.* <\.MIPS.stubs>:
+.*: 8f998010 lw t9,-32752\(gp\)
+.*: 03e07821 move t7,ra
+.*: 0320f809 jalr t9
+.*: 3418fff0 li t8,0xfff0
+.*: 00000000 nop
+.*: 00000000 nop
+.*: 00000000 nop
+.*: 00000000 nop
+Disassembly of section .text:
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1.ld b/binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1.ld
new file mode 100644
index 0000000..17c998d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1.ld
@@ -0,0 +1,17 @@
+SECTIONS
+{
+ . = 0x80000;
+ .interp : { *(.interp) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ .rel.dyn : { *(.rel.dyn) }
+ .MIPS.stubs : { *(.MIPS.stubs) }
+ .text : { *(.text) }
+
+ . = ALIGN (0x10000);
+ _gp = . + 0x7ff0;
+ .got : { *(.got) }
+
+ /DISCARD/ : { *(.reginfo) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1.s b/binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1.s
new file mode 100644
index 0000000..15d2e1b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/stub-dynsym-1.s
@@ -0,0 +1,10 @@
+ .macro decl
+ .global exported\@
+ .equ exported\@,\@
+ .endm
+
+ .rept dynsym - base_syms
+ decl
+ .endr
+
+ lw $25,%call16(foo)($gp)
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/textrel-1.d b/binutils-2.21/ld/testsuite/ld-mips-elf/textrel-1.d
new file mode 100644
index 0000000..16bd727
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/textrel-1.d
@@ -0,0 +1,25 @@
+#name: MIPS textrel-1
+#source: textrel-1.s
+#as: -EB -n32
+#ld: -shared -melf32btsmipn32
+#readelf: -d
+
+Dynamic section at offset .* contains 17 entries:
+ Tag Type Name/Value
+ 0x00000004 \(HASH\) 0x[0-9a-f]*
+ 0x00000005 \(STRTAB\) 0x[0-9a-f]*
+ 0x00000006 \(SYMTAB\) 0x[0-9a-f]*
+ 0x0000000a \(STRSZ\) [0-9]* \(bytes\)
+ 0x0000000b \(SYMENT\) 16 \(bytes\)
+ 0x00000003 \(PLTGOT\) 0x[0-9a-f]*
+ 0x00000011 \(REL\) 0x[0-9a-f]*
+ 0x00000012 \(RELSZ\) 8 \(bytes\)
+ 0x00000013 \(RELENT\) 8 \(bytes\)
+ 0x70000001 \(MIPS_RLD_VERSION\) 1
+ 0x70000005 \(MIPS_FLAGS\) NOTPOT
+ 0x70000006 \(MIPS_BASE_ADDRESS\) 0
+ 0x7000000a \(MIPS_LOCAL_GOTNO\) [0-9]*
+ 0x70000011 \(MIPS_SYMTABNO\) [0-9]*
+ 0x70000012 \(MIPS_UNREFEXTNO\) [0-9]*
+ 0x70000013 \(MIPS_GOTSYM\) 0x[0-9a-f]*
+ 0x00000000 \(NULL\) 0x0
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/textrel-1.s b/binutils-2.21/ld/testsuite/ld-mips-elf/textrel-1.s
new file mode 100644
index 0000000..f6b4a6a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/textrel-1.s
@@ -0,0 +1,9 @@
+ .globl foo
+foo:
+ .cfi_startproc
+ nop
+ .cfi_def_cfa_offset 4
+ nop
+ .cfi_register $29, $0
+ nop
+ .cfi_endproc
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden2-got.d b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden2-got.d
new file mode 100644
index 0000000..9c252ee
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden2-got.d
@@ -0,0 +1,5 @@
+
+.*file format.*
+
+Contents of section \.got:
+ *[0-9a-f]* 00000000 80000000 00000ba8 *\..*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden2.d b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden2.d
new file mode 100644
index 0000000..58e6eac
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden2.d
@@ -0,0 +1,10 @@
+
+.*file format.*
+
+Disassembly of section \.text:
+
+.* <.*>:
+.*: 8f828018 * lw v0,-32744\(gp\)
+ \.\.\.
+.*: 8f828018 * lw v0,-32744\(gp\)
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden2a.s b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden2a.s
new file mode 100644
index 0000000..91a0b9e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden2a.s
@@ -0,0 +1,11 @@
+ .text
+ lw $2,%gottprel(tls_hidden)($28)
+
+ .section .tdata,"awT"
+ .globl tls_hidden
+ .hidden tls_hidden
+ .type tls_hidden,@object
+ .size tls_hidden,4
+ .space 0xba8
+tls_hidden:
+ .word 1
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden2b.s b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden2b.s
new file mode 100644
index 0000000..6a8e190
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden2b.s
@@ -0,0 +1,2 @@
+ .text
+ lw $2,%gottprel(tls_hidden)($28)
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden3.d b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden3.d
new file mode 100644
index 0000000..06a0c66
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden3.d
@@ -0,0 +1,24 @@
+
+.*: file format .*
+
+Disassembly of section \.text:
+
+#
+# The TLS entries are ordered as follows:
+#
+# foo0 (-0x7ff0 + 0x20)
+# foo2 (-0x7ff0 + 0x24)
+# foo3 (-0x7ff0 + 0x28)
+# foo1 (-0x7ff0 + 0x2c)
+#
+# Any order would be acceptable, but it must match the .got dump.
+#
+00080c00 <\.text>:
+ 80c00: 8f84801c lw a0,-32740\(gp\)
+ 80c04: 8f848028 lw a0,-32728\(gp\)
+ 80c08: 8f848020 lw a0,-32736\(gp\)
+ 80c0c: 8f848024 lw a0,-32732\(gp\)
+ 80c10: 8f84801c lw a0,-32740\(gp\)
+ 80c14: 8f848028 lw a0,-32728\(gp\)
+ 80c18: 8f848020 lw a0,-32736\(gp\)
+ 80c1c: 8f848024 lw a0,-32732\(gp\)
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden3.got b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden3.got
new file mode 100644
index 0000000..282a027
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden3.got
@@ -0,0 +1,23 @@
+
+.*: file format .*
+
+#
+# The GOT layout is:
+#
+# - 2 reserved entries
+# - 5 local page entries
+# - 1 global entry for "undef"
+# - 4 TLS entries
+#
+# The order of the TLS entries is:
+#
+# foo0 (offset 0x20)
+# foo2 (offset 0x24)
+# foo3 (offset 0x28)
+# foo1 (offset 0x2c)
+#
+# Any order would be acceptable, but it must match the .d dump.
+#
+Contents of section \.got:
+ 90000 00000000 80000000 00000000 0000abc0 .*
+ 90010 0000abc8 0000abcc 0000abc4 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden3.ld b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden3.ld
new file mode 100644
index 0000000..261edce
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden3.ld
@@ -0,0 +1,28 @@
+SECTIONS
+{
+ . = 0x80000;
+ .interp : { *(.interp) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+
+ . = ALIGN (0x400);
+ .rel.dyn : { *(.rel.dyn) }
+
+ . = ALIGN (0x400) + 0x400;
+ .text : { *(.text) }
+
+ . = ALIGN (0x10000);
+ _gp = . + 0x7ff0;
+ .got : { *(.got) }
+
+ . = ALIGN (0x400);
+ .tdata : { *(.tdata) }
+
+ /DISCARD/ : { *(.reginfo) }
+}
+
+VERSION
+{
+ { local: *; };
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden3.r b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden3.r
new file mode 100644
index 0000000..e7b7665
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden3.r
@@ -0,0 +1,13 @@
+
+Relocation section '\.rel\.dyn' at offset .* contains 6 entries:
+ Offset Info Type Sym\.Value Sym\. Name
+00000000 00000000 R_MIPS_NONE
+#
+# The order of the next four entries doesn't matter. The important thing
+# is that there is exactly one entry per GOT TLS slot.
+#
+0009000c 0000002f R_MIPS_TLS_TPREL3
+00090010 0000002f R_MIPS_TLS_TPREL3
+00090014 0000002f R_MIPS_TLS_TPREL3
+00090018 0000002f R_MIPS_TLS_TPREL3
+00090020 .*03 R_MIPS_REL32 00000000 undef
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden3a.s b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden3a.s
new file mode 100644
index 0000000..d1e6d64
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden3a.s
@@ -0,0 +1,10 @@
+ .macro load
+ lw $4,%gottprel(foo\@)($gp)
+ .endm
+
+ .rept 4
+ load
+ .endr
+
+ .section .tdata,"awT",@progbits
+ .fill 0xabc0
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden3b.s b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden3b.s
new file mode 100644
index 0000000..0744b07
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden3b.s
@@ -0,0 +1,18 @@
+ .macro load
+ .text
+ lw $4,%gottprel(foo\@)($gp)
+
+ .global foo\@
+ .type foo\@,@object
+ .size foo\@,4
+ .section .tdata,"awT",@progbits
+foo\@:
+ .word \@
+ .endm
+
+ .rept 4
+ load
+ .endr
+
+ .data
+ .word undef
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden4.got b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden4.got
new file mode 100644
index 0000000..e6b2115
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden4.got
@@ -0,0 +1,29 @@
+
+.*: file format .*
+
+Contents of section \.got:
+#
+# The order of the TLS entries in this GOT is:
+#
+# foo2
+# foo3
+# foo0
+# foo1
+#
+# The order and address don't matter; the important thing is that the
+# addresses match the relocs in the .r dump and that there is a separate
+# entry for each symbol.
+#
+#...
+ 1c4010 00000000 0000abc8 0000abcc 0000abc0 .*
+ 1c4020 0000abc4 00000000 80000000 00000000 .*
+#
+# Likewise, but the order of the entries in this GOT is:
+#
+# foo3
+# foo2
+# foo0
+# foo1
+#...
+ 1d0020 00000000 00000000 00000000 0000abcc .*
+ 1d0030 0000abc8 0000abc0 0000abc4 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden4.r b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden4.r
new file mode 100644
index 0000000..ccf2e80
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden4.r
@@ -0,0 +1,19 @@
+
+Relocation section '\.rel\.dyn' at offset .* contains .* entries:
+ Offset Info Type Sym\.Value Sym\. Name
+00000000 00000000 R_MIPS_NONE
+#
+# The order and addresses of the next eight entries don't matter. The
+# important thing is that there is exactly one entry per GOT TLS slot
+# and that the addresses match those in the .got dump.
+#
+001c4014 0000002f R_MIPS_TLS_TPREL3
+001c4018 0000002f R_MIPS_TLS_TPREL3
+001c401c 0000002f R_MIPS_TLS_TPREL3
+001c4020 0000002f R_MIPS_TLS_TPREL3
+001d002c 0000002f R_MIPS_TLS_TPREL3
+001d0030 0000002f R_MIPS_TLS_TPREL3
+001d0034 0000002f R_MIPS_TLS_TPREL3
+001d0038 0000002f R_MIPS_TLS_TPREL3
+.* R_MIPS_REL32 .*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden4a.s b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden4a.s
new file mode 100644
index 0000000..02a0d35
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden4a.s
@@ -0,0 +1,18 @@
+ .macro load
+ lw $4,%gottprel(foo\@)($gp)
+ .endm
+
+ .rept 4
+ load
+ .endr
+
+ .macro load2
+ lw $4,%got(undefa\@)($gp)
+ .endm
+
+ .rept 0x3000
+ load2
+ .endr
+
+ .section .tdata,"awT",@progbits
+ .fill 0xabc0
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden4b.s b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden4b.s
new file mode 100644
index 0000000..d6deb00
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-hidden4b.s
@@ -0,0 +1,27 @@
+ .macro load
+ .text
+ lw $4,%gottprel(foo\@)($gp)
+
+ .global foo\@
+ .type foo\@,@object
+ .size foo\@,4
+ .section .tdata,"awT",@progbits
+foo\@:
+ .word \@
+ .endm
+
+ .rept 4
+ load
+ .endr
+
+ .text
+ .macro load2
+ lw $4,%got(undefb\@)($gp)
+ .endm
+
+ .rept 0x3000
+ load2
+ .endr
+
+ .data
+ .word undef
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tls-multi-got-1-1.s b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-multi-got-1-1.s
new file mode 100644
index 0000000..60f6717
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-multi-got-1-1.s
@@ -0,0 +1,39 @@
+.macro one_sym count
+.globl sym_1_\count
+sym_1_\count:
+ la $2, sym_1_\count
+.endm
+
+.irp thou,0,1,2,3,4,5,6,7,8,9
+.irp hund,0,1,2,3,4,5,6,7,8,9
+.irp tens,0,1,2,3,4,5,6,7,8,9
+.irp ones,0,1,2,3,4,5,6,7,8,9
+one_sym \thou\hund\tens\ones
+.endr
+.endr
+.endr
+.endr
+
+tls_bits_1:
+ addiu $4,$28,%tlsgd(tlsvar_gd)
+ addiu $4,$28,%tlsldm(tlsvar_ld)
+ addiu $4,$2,%gottprel(tlsvar_ie)
+
+ .section .tbss,"awT",@nobits
+ .align 2
+ .global tlsvar_gd
+ .type tlsvar_gd,@object
+ .size tlsvar_gd,4
+tlsvar_gd:
+ .space 4
+ .global tlsvar_ie
+ .type tlsvar_ie,@object
+ .size tlsvar_ie,4
+tlsvar_ie:
+ .space 4
+ .global tlsvar_ld
+ .hidden tlsvar_ld
+ .type tlsvar_ld,@object
+ .size tlsvar_ld,4
+tlsvar_ld:
+ .word 1
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tls-multi-got-1-2.s b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-multi-got-1-2.s
new file mode 100644
index 0000000..6b04b98
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-multi-got-1-2.s
@@ -0,0 +1,20 @@
+.macro one_sym count
+.globl sym_2_\count
+sym_2_\count:
+ la $2, sym_2_\count
+.endm
+
+.irp thou,0,1,2,3,4,5,6,7,8,9
+.irp hund,0,1,2,3,4,5,6,7,8,9
+.irp tens,0,1,2,3,4,5,6,7,8,9
+.irp ones,0,1,2,3,4,5,6,7,8,9
+one_sym \thou\hund\tens\ones
+.endr
+.endr
+.endr
+.endr
+
+tls_bits_2:
+ addiu $4,$28,%tlsgd(tlsvar_gd)
+ addiu $4,$28,%tlsldm(tlsvar_ld)
+ addiu $4,$2,%gottprel(tlsvar_ie)
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tls-multi-got-1.d b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-multi-got-1.d
new file mode 100644
index 0000000..147dc83
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-multi-got-1.d
@@ -0,0 +1,20 @@
+
+.*: file format elf32-tradbigmips
+
+Disassembly of section .text:
+
+#...
+[0-9a-f]+ <tls_bits_1>:
+ [0-9a-f]+: 27841c64 addiu a0,gp,7268
+ [0-9a-f]+: 27841c58 addiu a0,gp,7256
+ [0-9a-f]+: 24441c60 addiu a0,v0,7264
+ [0-9a-f]+: 00000000 nop
+
+[0-9a-f]+ <sym_2_0000>:
+#...
+[0-9a-f]+ <tls_bits_2>:
+ [0-9a-f]+: 27841c64 addiu a0,gp,7268
+ [0-9a-f]+: 27841c58 addiu a0,gp,7256
+ [0-9a-f]+: 24441c60 addiu a0,v0,7264
+ [0-9a-f]+: 00000000 nop
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tls-multi-got-1.got b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-multi-got-1.got
new file mode 100644
index 0000000..b62d413
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-multi-got-1.got
@@ -0,0 +1,36 @@
+
+.*: file format elf32-tradbigmips
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00000000 R_MIPS_NONE \*ABS\*
+0013f830 R_MIPS_TLS_DTPMOD32 \*ABS\*
+0014948c R_MIPS_TLS_DTPMOD32 \*ABS\*
+0013f83c R_MIPS_TLS_DTPMOD32 tlsvar_gd
+0013f840 R_MIPS_TLS_DTPREL32 tlsvar_gd
+00149498 R_MIPS_TLS_DTPMOD32 tlsvar_gd
+0014949c R_MIPS_TLS_DTPREL32 tlsvar_gd
+0013f838 R_MIPS_TLS_TPREL32 tlsvar_ie
+00149494 R_MIPS_TLS_TPREL32 tlsvar_ie
+00143e38 R_MIPS_REL32 sym_1_9526
+#...
+00139ab8 R_MIPS_REL32 sym_2_8654
+
+
+Contents of section .got:
+ 122360 00000000 80000000 000d7f98 000d65f4 .*
+ 122370 000d1fa4 000d6010 000d5a48 000d19c0 .*
+#...
+ 135be0 000cf204 000e0e48 00000000 80000000 .*
+ 135bf0 00000000 00000000 00000000 00000000 .*
+#...
+ 13f820 00000000 00000000 00000000 00000000 .*
+ 13f830 00000000 00000000 00000000 00000000 .*
+ 13f840 00000000 00000000 80000000 00000000 .*
+#...
+ 149450 00000000 00000000 00000000 00000000 .*
+ 149460 00000000 00000000 00000000 00000000 .*
+ 149470 00000000 00000000 00000000 00000000 .*
+ 149480 00000000 00000000 00000000 00000000 .*
+ 149490 00000000 00000000 00000000 00000000 .*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tls-multi-got-1.r b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-multi-got-1.r
new file mode 100644
index 0000000..a51abf1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tls-multi-got-1.r
@@ -0,0 +1,38 @@
+
+Dynamic section at offset .* contains 18 entries:
+ Tag Type Name/Value
+ 0x00000004 \(HASH\) 0x1c4
+ 0x00000005 \(STRTAB\).*
+ 0x00000006 \(SYMTAB\).*
+ 0x0000000a \(STRSZ\) 220091 \(bytes\)
+ 0x0000000b \(SYMENT\) 16 \(bytes\)
+ 0x00000003 \(PLTGOT\) 0x122360
+ 0x00000011 \(REL\) 0xa7978
+ 0x00000012 \(RELSZ\) 160072 \(bytes\)
+ 0x00000013 \(RELENT\) 8 \(bytes\)
+ 0x70000001 \(MIPS_RLD_VERSION\) 1
+ 0x70000005 \(MIPS_FLAGS\) NOTPOT
+ 0x70000006 \(MIPS_BASE_ADDRESS\) 0
+ 0x7000000a \(MIPS_LOCAL_GOTNO\) 2
+ 0x70000011 \(MIPS_SYMTABNO\) 20013
+ 0x70000012 \(MIPS_UNREFEXTNO\) 10
+ 0x70000013 \(MIPS_GOTSYM\) 0xd
+ 0x0000001e \(FLAGS\) STATIC_TLS
+ 0x00000000 \(NULL\) 0x0
+
+Relocation section '\.rel\.dyn' at offset 0x[0-9a-f]+ contains 20009 entries:
+ Offset Info Type Sym.Value Sym. Name
+[0-9a-f ]+R_MIPS_NONE
+[0-9a-f ]+R_MIPS_TLS_DTPMOD
+[0-9a-f ]+R_MIPS_TLS_DTPMOD
+[0-9a-f ]+R_MIPS_TLS_DTPMOD 00000000 tlsvar_gd
+[0-9a-f ]+R_MIPS_TLS_DTPREL 00000000 tlsvar_gd
+[0-9a-f ]+R_MIPS_TLS_DTPMOD 00000000 tlsvar_gd
+[0-9a-f ]+R_MIPS_TLS_DTPREL 00000000 tlsvar_gd
+[0-9a-f ]+R_MIPS_TLS_TPREL3 00000004 tlsvar_ie
+[0-9a-f ]+R_MIPS_TLS_TPREL3 00000004 tlsvar_ie
+[0-9a-f ]+R_MIPS_REL32 000d7f98 sym_1_9526
+[0-9a-f ]+R_MIPS_REL32 000d65f4 sym_1_7885
+#...
+[0-9a-f ]+R_MIPS_REL32 000cf204 sym_1_0465
+[0-9a-f ]+R_MIPS_REL32 000e0e48 sym_2_8654
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tlsbin-o32.d b/binutils-2.21/ld/testsuite/ld-mips-elf/tlsbin-o32.d
new file mode 100644
index 0000000..0319649
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tlsbin-o32.d
@@ -0,0 +1,43 @@
+.*: file format elf32-tradbigmips
+
+Disassembly of section .text:
+
+004000d0 <__start>:
+ 4000d0: 3c1c0fc0 lui gp,0xfc0
+ 4000d4: 279c7f30 addiu gp,gp,32560
+ 4000d8: 0399e021 addu gp,gp,t9
+ 4000dc: 27bdfff0 addiu sp,sp,-16
+ 4000e0: afbe0008 sw s8,8\(sp\)
+ 4000e4: 03a0f021 move s8,sp
+ 4000e8: afbc0000 sw gp,0\(sp\)
+ 4000ec: 8f998018 lw t9,-32744\(gp\)
+ 4000f0: 27848028 addiu a0,gp,-32728
+ 4000f4: 0320f809 jalr t9
+ 4000f8: 00000000 nop
+ 4000fc: 8fdc0000 lw gp,0\(s8\)
+ 400100: 00000000 nop
+ 400104: 8f998018 lw t9,-32744\(gp\)
+ 400108: 27848020 addiu a0,gp,-32736
+ 40010c: 0320f809 jalr t9
+ 400110: 00000000 nop
+ 400114: 8fdc0000 lw gp,0\(s8\)
+ 400118: 00401021 move v0,v0
+ 40011c: 3c030000 lui v1,0x0
+ 400120: 24638000 addiu v1,v1,-32768
+ 400124: 00621821 addu v1,v1,v0
+ 400128: 7c02283b rdhwr v0,\$5
+ 40012c: 8f83801c lw v1,-32740\(gp\)
+ 400130: 00000000 nop
+ 400134: 00621821 addu v1,v1,v0
+ 400138: 7c02283b rdhwr v0,\$5
+ 40013c: 3c030000 lui v1,0x0
+ 400140: 24639004 addiu v1,v1,-28668
+ 400144: 00621821 addu v1,v1,v0
+ 400148: 03c0e821 move sp,s8
+ 40014c: 8fbe0008 lw s8,8\(sp\)
+ 400150: 03e00008 jr ra
+ 400154: 27bd0010 addiu sp,sp,16
+
+00400158 <__tls_get_addr>:
+ 400158: 03e00008 jr ra
+ 40015c: 00000000 nop
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tlsbin-o32.got b/binutils-2.21/ld/testsuite/ld-mips-elf/tlsbin-o32.got
new file mode 100644
index 0000000..7deecf5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tlsbin-o32.got
@@ -0,0 +1,6 @@
+
+.*: file format elf32-tradbigmips
+
+Contents of section .got:
+ 10000010 00000000 80000000 00400158 ffff900c .........@.X....
+ 10000020 00000001 00000000 00000001 ffff8008 ................
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tlsbin-o32.s b/binutils-2.21/ld/testsuite/ld-mips-elf/tlsbin-o32.s
new file mode 100644
index 0000000..8ff9831
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tlsbin-o32.s
@@ -0,0 +1,89 @@
+ .file 1 "tlsbin-o32.s"
+ .abicalls
+ .text
+ .align 2
+ .globl __start
+ .ent __start
+ .type __start,@function
+__start:
+ .frame $fp,16,$31
+ .mask 0x40000000,-8
+ .fmask 0x00000000,0
+ .set noreorder
+ .cpload $25
+ .set reorder
+ addiu $sp,$sp,-16
+ sw $fp,8($sp)
+ move $fp,$sp
+ .cprestore 0
+
+ # General Dynamic
+ lw $25,%call16(__tls_get_addr)($28)
+ addiu $4,$28,%tlsgd(tlsvar_gd)
+ jal $25
+
+ # Local Dynamic
+ lw $25,%call16(__tls_get_addr)($28)
+ addiu $4,$28,%tlsldm(tlsvar_ld)
+ jal $25
+
+ move $2,$2 # Arbitrary instructions
+
+ lui $3,%dtprel_hi(tlsvar_ld)
+ addiu $3,$3,%dtprel_lo(tlsvar_ld)
+ addu $3,$3,$2
+
+ # Initial Exec
+ .set push
+ .set mips32r2
+ rdhwr $2, $5
+ .set pop
+ lw $3,%gottprel(tlsvar_ie)($28)
+ addu $3,$3,$2
+
+ # Local Exec
+ .set push
+ .set mips32r2
+ rdhwr $2, $5
+ .set pop
+ lui $3,%tprel_hi(tlsvar_le)
+ addiu $3,$3,%tprel_lo(tlsvar_le)
+ addu $3,$3,$2
+
+ move $sp,$fp
+ lw $fp,8($sp)
+ addiu $sp,$sp,16
+ j $31
+ .end __start
+
+ .globl __tls_get_addr
+__tls_get_addr:
+ j $31
+
+ .section .tbss,"awT",@nobits
+ .align 2
+ .global tlsvar_gd
+ .type tlsvar_gd,@object
+ .size tlsvar_gd,4
+tlsvar_gd:
+ .space 4
+ .global tlsvar_ie
+ .type tlsvar_ie,@object
+ .size tlsvar_ie,4
+tlsvar_ie:
+ .space 4
+
+ .section .tdata,"awT"
+ .align 2
+ .global tlsvar_ld
+ .hidden tlsvar_ld
+ .type tlsvar_ld,@object
+ .size tlsvar_ld,4
+tlsvar_ld:
+ .word 1
+ .global tlsvar_le
+ .hidden tlsvar_le
+ .type tlsvar_le,@object
+ .size tlsvar_le,4
+tlsvar_le:
+ .word 1
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.d b/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.d
new file mode 100644
index 0000000..bf803c8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.d
@@ -0,0 +1,100 @@
+
+.*: file format elf32-tradbigmips
+
+Disassembly of section .text:
+
+.* <__start>:
+ .*: 3c1c0fc0 lui gp,0xfc0
+ .*: 279c7b80 addiu gp,gp,31616
+ .*: 0399e021 addu gp,gp,t9
+ .*: 27bdfff0 addiu sp,sp,-16
+ .*: afbe0008 sw s8,8\(sp\)
+ .*: 03a0f021 move s8,sp
+ .*: afbc0000 sw gp,0\(sp\)
+ .*: 8f998018 lw t9,-32744\(gp\)
+ .*: 27848030 addiu a0,gp,-32720
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f998018 lw t9,-32744\(gp\)
+ .*: 27848024 addiu a0,gp,-32732
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f998018 lw t9,-32744\(gp\)
+ .*: 2784801c addiu a0,gp,-32740
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00401021 move v0,v0
+ .*: 3c030000 lui v1,0x0
+ .*: 24638000 addiu v1,v1,-32768
+ .*: 00621821 addu v1,v1,v0
+ .*: 7c02283b rdhwr v0,\$5
+ .*: 8f838038 lw v1,-32712\(gp\)
+ .*: 00000000 nop
+ .*: 00621821 addu v1,v1,v0
+ .*: 8f83802c lw v1,-32724\(gp\)
+ .*: 00000000 nop
+ .*: 00621821 addu v1,v1,v0
+ .*: 7c02283b rdhwr v0,\$5
+ .*: 3c030000 lui v1,0x0
+ .*: 24639004 addiu v1,v1,-28668
+ .*: 00621821 addu v1,v1,v0
+ .*: 03c0e821 move sp,s8
+ .*: 8fbe0008 lw s8,8\(sp\)
+ .*: 03e00008 jr ra
+ .*: 27bd0010 addiu sp,sp,16
+
+.* <__tls_get_addr>:
+ .*: 03e00008 jr ra
+ .*: 00000000 nop
+ ...
+
+.* <other>:
+ .*: 3c1c0fc0 lui gp,0xfc0
+ .*: 279c7ac0 addiu gp,gp,31424
+ .*: 0399e021 addu gp,gp,t9
+ .*: 27bdfff0 addiu sp,sp,-16
+ .*: afbe0008 sw s8,8\(sp\)
+ .*: 03a0f021 move s8,sp
+ .*: afbc0000 sw gp,0\(sp\)
+ .*: 8f998018 lw t9,-32744\(gp\)
+ .*: 27848030 addiu a0,gp,-32720
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f998018 lw t9,-32744\(gp\)
+ .*: 27848024 addiu a0,gp,-32732
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f998018 lw t9,-32744\(gp\)
+ .*: 2784801c addiu a0,gp,-32740
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00401021 move v0,v0
+ .*: 3c030000 lui v1,0x0
+ .*: 24638000 addiu v1,v1,-32768
+ .*: 00621821 addu v1,v1,v0
+ .*: 7c02283b rdhwr v0,\$5
+ .*: 8f838038 lw v1,-32712\(gp\)
+ .*: 00000000 nop
+ .*: 00621821 addu v1,v1,v0
+ .*: 8f83802c lw v1,-32724\(gp\)
+ .*: 00000000 nop
+ .*: 00621821 addu v1,v1,v0
+ .*: 7c02283b rdhwr v0,\$5
+ .*: 3c030000 lui v1,0x0
+ .*: 24639004 addiu v1,v1,-28668
+ .*: 00621821 addu v1,v1,v0
+ .*: 03c0e821 move sp,s8
+ .*: 8fbe0008 lw s8,8\(sp\)
+ .*: 03e00008 jr ra
+ .*: 27bd0010 addiu sp,sp,16
+ .*: 00000000 nop
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.got b/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.got
new file mode 100644
index 0000000..7053939
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.got
@@ -0,0 +1,18 @@
+
+.*: file format elf32-tradbigmips
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00000000 R_MIPS_NONE \*ABS\*
+10000040 R_MIPS_TLS_DTPMOD32 tlsbin_gd
+10000044 R_MIPS_TLS_DTPREL32 tlsbin_gd
+10000034 R_MIPS_TLS_DTPMOD32 tlsvar_gd
+10000038 R_MIPS_TLS_DTPREL32 tlsvar_gd
+1000003c R_MIPS_TLS_TPREL32 tlsvar_ie
+10000048 R_MIPS_TLS_TPREL32 tlsbin_ie
+
+
+Contents of section .got:
+ 10000020 00000000 80000000 0040053c 00000001 .........@......
+ 10000030 00000000 00000000 00000000 00000000 ................
+ 10000040 00000000 00000000 00000000 ............
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.d b/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.d
new file mode 100644
index 0000000..e1f76b5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.d
@@ -0,0 +1,100 @@
+
+.*: file format elf32-tradbigmips
+
+Disassembly of section .text:
+
+.* <__start>:
+ .*: 3c1c0fc0 lui gp,0xfc0
+ .*: 279c7b80 addiu gp,gp,31616
+ .*: 0399e021 addu gp,gp,t9
+ .*: 27bdfff0 addiu sp,sp,-16
+ .*: afbe0008 sw s8,8\(sp\)
+ .*: 03a0f021 move s8,sp
+ .*: afbc0000 sw gp,0\(sp\)
+ .*: 8f998018 lw t9,-32744\(gp\)
+ .*: 27848028 addiu a0,gp,-32728
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f998018 lw t9,-32744\(gp\)
+ .*: 27848020 addiu a0,gp,-32736
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f998018 lw t9,-32744\(gp\)
+ .*: 27848030 addiu a0,gp,-32720
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00401021 move v0,v0
+ .*: 3c030000 lui v1,0x0
+ .*: 24638000 addiu v1,v1,-32768
+ .*: 00621821 addu v1,v1,v0
+ .*: 7c02283b rdhwr v0,\$5
+ .*: 8f838038 lw v1,-32712\(gp\)
+ .*: 00000000 nop
+ .*: 00621821 addu v1,v1,v0
+ .*: 8f83801c lw v1,-32740\(gp\)
+ .*: 00000000 nop
+ .*: 00621821 addu v1,v1,v0
+ .*: 7c02283b rdhwr v0,\$5
+ .*: 3c030000 lui v1,0x0
+ .*: 24639004 addiu v1,v1,-28668
+ .*: 00621821 addu v1,v1,v0
+ .*: 03c0e821 move sp,s8
+ .*: 8fbe0008 lw s8,8\(sp\)
+ .*: 03e00008 jr ra
+ .*: 27bd0010 addiu sp,sp,16
+
+.* <__tls_get_addr>:
+ .*: 03e00008 jr ra
+ .*: 00000000 nop
+ ...
+
+.* <other>:
+ .*: 3c1c0fc0 lui gp,0xfc0
+ .*: 279c7ac0 addiu gp,gp,31424
+ .*: 0399e021 addu gp,gp,t9
+ .*: 27bdfff0 addiu sp,sp,-16
+ .*: afbe0008 sw s8,8\(sp\)
+ .*: 03a0f021 move s8,sp
+ .*: afbc0000 sw gp,0\(sp\)
+ .*: 8f998018 lw t9,-32744\(gp\)
+ .*: 27848028 addiu a0,gp,-32728
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f998018 lw t9,-32744\(gp\)
+ .*: 27848020 addiu a0,gp,-32736
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f998018 lw t9,-32744\(gp\)
+ .*: 27848030 addiu a0,gp,-32720
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00401021 move v0,v0
+ .*: 3c030000 lui v1,0x0
+ .*: 24638000 addiu v1,v1,-32768
+ .*: 00621821 addu v1,v1,v0
+ .*: 7c02283b rdhwr v0,\$5
+ .*: 8f838038 lw v1,-32712\(gp\)
+ .*: 00000000 nop
+ .*: 00621821 addu v1,v1,v0
+ .*: 8f83801c lw v1,-32740\(gp\)
+ .*: 00000000 nop
+ .*: 00621821 addu v1,v1,v0
+ .*: 7c02283b rdhwr v0,\$5
+ .*: 3c030000 lui v1,0x0
+ .*: 24639004 addiu v1,v1,-28668
+ .*: 00621821 addu v1,v1,v0
+ .*: 03c0e821 move sp,s8
+ .*: 8fbe0008 lw s8,8\(sp\)
+ .*: 03e00008 jr ra
+ .*: 27bd0010 addiu sp,sp,16
+ .*: 00000000 nop
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got b/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got
new file mode 100644
index 0000000..c5516c5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got
@@ -0,0 +1,19 @@
+
+.*: file format elf32-tradbigmips
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00000000 R_MIPS_NONE \*ABS\*
+10000038 R_MIPS_TLS_DTPMOD32 tlsbin_gd
+1000003c R_MIPS_TLS_DTPREL32 tlsbin_gd
+10000030 R_MIPS_TLS_DTPMOD32 tlsvar_gd
+10000034 R_MIPS_TLS_DTPREL32 tlsvar_gd
+1000002c R_MIPS_TLS_TPREL32 tlsvar_ie
+10000048 R_MIPS_TLS_TPREL32 tlsbin_ie
+
+
+Contents of section .got:
+ 10000020 00000000 80000000 0040053c 00000000 .*
+ 10000030 00000000 00000000 00000000 00000000 .*
+ 10000040 00000001 00000000 00000000 00000000 .*
+ 10000050 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.s b/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.s
new file mode 100644
index 0000000..7943775
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.s
@@ -0,0 +1,64 @@
+ .file 1 "tlsbin-o32.s"
+ .abicalls
+ .text
+ .align 2
+ .globl other
+ .ent other
+ .type other,@function
+other:
+ .frame $fp,16,$31
+ .mask 0x40000000,-8
+ .fmask 0x00000000,0
+ .set noreorder
+ .cpload $25
+ .set reorder
+ addiu $sp,$sp,-16
+ sw $fp,8($sp)
+ move $fp,$sp
+ .cprestore 0
+
+ # General Dynamic
+ lw $25,%call16(__tls_get_addr)($28)
+ addiu $4,$28,%tlsgd(tlsbin_gd)
+ jal $25
+
+ lw $25,%call16(__tls_get_addr)($28)
+ addiu $4,$28,%tlsgd(tlsvar_gd)
+ jal $25
+
+ # Local Dynamic
+ lw $25,%call16(__tls_get_addr)($28)
+ addiu $4,$28,%tlsldm(tlsbin_ld)
+ jal $25
+
+ move $2,$2 # Arbitrary instructions
+
+ lui $3,%dtprel_hi(tlsbin_ld)
+ addiu $3,$3,%dtprel_lo(tlsbin_ld)
+ addu $3,$3,$2
+
+ # Initial Exec
+ .set push
+ .set mips32r2
+ rdhwr $2, $5
+ .set pop
+ lw $3,%gottprel(tlsbin_ie)($28)
+ addu $3,$3,$2
+
+ lw $3,%gottprel(tlsvar_ie)($28)
+ addu $3,$3,$2
+
+ # Local Exec
+ .set push
+ .set mips32r2
+ rdhwr $2, $5
+ .set pop
+ lui $3,%tprel_hi(tlsbin_le)
+ addiu $3,$3,%tprel_lo(tlsbin_le)
+ addu $3,$3,$2
+
+ move $sp,$fp
+ lw $fp,8($sp)
+ addiu $sp,$sp,16
+ j $31
+ .end other
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.d b/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.d
new file mode 100644
index 0000000..27db816
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.d
@@ -0,0 +1,100 @@
+
+.*: file format elf32-tradbigmips
+
+Disassembly of section .text:
+
+.* <other>:
+ .*: 3c1c0fc0 lui gp,0xfc0
+ .*: 279c7b80 addiu gp,gp,31616
+ .*: 0399e021 addu gp,gp,t9
+ .*: 27bdfff0 addiu sp,sp,-16
+ .*: afbe0008 sw s8,8\(sp\)
+ .*: 03a0f021 move s8,sp
+ .*: afbc0000 sw gp,0\(sp\)
+ .*: 8f998018 lw t9,-32744\(gp\)
+ .*: 27848028 addiu a0,gp,-32728
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f998018 lw t9,-32744\(gp\)
+ .*: 27848020 addiu a0,gp,-32736
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f998018 lw t9,-32744\(gp\)
+ .*: 27848030 addiu a0,gp,-32720
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00401021 move v0,v0
+ .*: 3c030000 lui v1,0x0
+ .*: 24638000 addiu v1,v1,-32768
+ .*: 00621821 addu v1,v1,v0
+ .*: 7c02283b rdhwr v0,\$5
+ .*: 8f838038 lw v1,-32712\(gp\)
+ .*: 00000000 nop
+ .*: 00621821 addu v1,v1,v0
+ .*: 8f83801c lw v1,-32740\(gp\)
+ .*: 00000000 nop
+ .*: 00621821 addu v1,v1,v0
+ .*: 7c02283b rdhwr v0,\$5
+ .*: 3c030000 lui v1,0x0
+ .*: 24639004 addiu v1,v1,-28668
+ .*: 00621821 addu v1,v1,v0
+ .*: 03c0e821 move sp,s8
+ .*: 8fbe0008 lw s8,8\(sp\)
+ .*: 03e00008 jr ra
+ .*: 27bd0010 addiu sp,sp,16
+ .*: 00000000 nop
+
+.* <__start>:
+ .*: 3c1c0fc0 lui gp,0xfc0
+ .*: 279c7ad0 addiu gp,gp,31440
+ .*: 0399e021 addu gp,gp,t9
+ .*: 27bdfff0 addiu sp,sp,-16
+ .*: afbe0008 sw s8,8\(sp\)
+ .*: 03a0f021 move s8,sp
+ .*: afbc0000 sw gp,0\(sp\)
+ .*: 8f998018 lw t9,-32744\(gp\)
+ .*: 27848028 addiu a0,gp,-32728
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f998018 lw t9,-32744\(gp\)
+ .*: 27848020 addiu a0,gp,-32736
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f998018 lw t9,-32744\(gp\)
+ .*: 27848030 addiu a0,gp,-32720
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00401021 move v0,v0
+ .*: 3c030000 lui v1,0x0
+ .*: 24638000 addiu v1,v1,-32768
+ .*: 00621821 addu v1,v1,v0
+ .*: 7c02283b rdhwr v0,\$5
+ .*: 8f838038 lw v1,-32712\(gp\)
+ .*: 00000000 nop
+ .*: 00621821 addu v1,v1,v0
+ .*: 8f83801c lw v1,-32740\(gp\)
+ .*: 00000000 nop
+ .*: 00621821 addu v1,v1,v0
+ .*: 7c02283b rdhwr v0,\$5
+ .*: 3c030000 lui v1,0x0
+ .*: 24639004 addiu v1,v1,-28668
+ .*: 00621821 addu v1,v1,v0
+ .*: 03c0e821 move sp,s8
+ .*: 8fbe0008 lw s8,8\(sp\)
+ .*: 03e00008 jr ra
+ .*: 27bd0010 addiu sp,sp,16
+
+.* <__tls_get_addr>:
+ .*: 03e00008 jr ra
+ .*: 00000000 nop
+ ...
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got b/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got
new file mode 100644
index 0000000..54f491e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got
@@ -0,0 +1,19 @@
+
+.*: file format elf32-tradbigmips
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00000000 R_MIPS_NONE \*ABS\*
+10000038 R_MIPS_TLS_DTPMOD32 tlsbin_gd
+1000003c R_MIPS_TLS_DTPREL32 tlsbin_gd
+10000030 R_MIPS_TLS_DTPMOD32 tlsvar_gd
+10000034 R_MIPS_TLS_DTPREL32 tlsvar_gd
+1000002c R_MIPS_TLS_TPREL32 tlsvar_ie
+10000048 R_MIPS_TLS_TPREL32 tlsbin_ie
+
+
+Contents of section .got:
+ 10000020 00000000 80000000 004005ec 00000000 .*
+ 10000030 00000000 00000000 00000000 00000000 .*
+ 10000040 00000001 00000000 00000000 00000000 .*
+ 10000050 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32.d b/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32.d
new file mode 100644
index 0000000..32c3e7d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32.d
@@ -0,0 +1,54 @@
+
+.*: file format elf32-tradbigmips
+
+Disassembly of section .text:
+
+.* <__start>:
+ .*: 3c1c0fc0 lui gp,0xfc0
+ .*: 279c7ba0 addiu gp,gp,31648
+ .*: 0399e021 addu gp,gp,t9
+ .*: 27bdfff0 addiu sp,sp,-16
+ .*: afbe0008 sw s8,8\(sp\)
+ .*: 03a0f021 move s8,sp
+ .*: afbc0000 sw gp,0\(sp\)
+ .*: 8f998018 lw t9,-32744\(gp\)
+ .*: 27848024 addiu a0,gp,-32732
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f998018 lw t9,-32744\(gp\)
+ .*: 27848034 addiu a0,gp,-32716
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f998018 lw t9,-32744\(gp\)
+ .*: 2784801c addiu a0,gp,-32740
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00401021 move v0,v0
+ .*: 3c030000 lui v1,0x0
+ .*: 24638000 addiu v1,v1,-32768
+ .*: 00621821 addu v1,v1,v0
+ .*: 7c02283b rdhwr v0,\$5
+ .*: 8f838030 lw v1,-32720\(gp\)
+ .*: 00000000 nop
+ .*: 00621821 addu v1,v1,v0
+ .*: 8f83802c lw v1,-32724\(gp\)
+ .*: 00000000 nop
+ .*: 00621821 addu v1,v1,v0
+ .*: 7c02283b rdhwr v0,\$5
+ .*: 3c030000 lui v1,0x0
+ .*: 24639004 addiu v1,v1,-28668
+ .*: 00621821 addu v1,v1,v0
+ .*: 03c0e821 move sp,s8
+ .*: 8fbe0008 lw s8,8\(sp\)
+ .*: 03e00008 jr ra
+ .*: 27bd0010 addiu sp,sp,16
+
+.* <__tls_get_addr>:
+ .*: 03e00008 jr ra
+ .*: 00000000 nop
+ ...
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32.got b/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32.got
new file mode 100644
index 0000000..5f93c17
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32.got
@@ -0,0 +1,18 @@
+
+tmpdir/tls-dynamic-o32: file format elf32-tradbigmips
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00000000 R_MIPS_NONE \*ABS\*
+10000034 R_MIPS_TLS_DTPMOD32 tlsbin_gd
+10000038 R_MIPS_TLS_DTPREL32 tlsbin_gd
+10000044 R_MIPS_TLS_DTPMOD32 tlsvar_gd
+10000048 R_MIPS_TLS_DTPREL32 tlsvar_gd
+10000040 R_MIPS_TLS_TPREL32 tlsbin_ie
+1000003c R_MIPS_TLS_TPREL32 tlsvar_ie
+
+
+Contents of section .got:
+ 10000020 00000000 80000000 0040051c 00000001 ................
+ 10000030 00000000 00000000 00000000 00000000 ................
+ 10000040 00000000 00000000 00000000 ............
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32.s b/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32.s
new file mode 100644
index 0000000..2924221
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tlsdyn-o32.s
@@ -0,0 +1,96 @@
+ .file 1 "tlsbin-o32.s"
+ .abicalls
+ .text
+ .align 2
+ .globl __start
+ .ent __start
+ .type __start,@function
+__start:
+ .frame $fp,16,$31
+ .mask 0x40000000,-8
+ .fmask 0x00000000,0
+ .set noreorder
+ .cpload $25
+ .set reorder
+ addiu $sp,$sp,-16
+ sw $fp,8($sp)
+ move $fp,$sp
+ .cprestore 0
+
+ # General Dynamic
+ lw $25,%call16(__tls_get_addr)($28)
+ addiu $4,$28,%tlsgd(tlsbin_gd)
+ jal $25
+
+ lw $25,%call16(__tls_get_addr)($28)
+ addiu $4,$28,%tlsgd(tlsvar_gd)
+ jal $25
+
+ # Local Dynamic
+ lw $25,%call16(__tls_get_addr)($28)
+ addiu $4,$28,%tlsldm(tlsbin_ld)
+ jal $25
+
+ move $2,$2 # Arbitrary instructions
+
+ lui $3,%dtprel_hi(tlsbin_ld)
+ addiu $3,$3,%dtprel_lo(tlsbin_ld)
+ addu $3,$3,$2
+
+ # Initial Exec
+ .set push
+ .set mips32r2
+ rdhwr $2, $5
+ .set pop
+ lw $3,%gottprel(tlsbin_ie)($28)
+ addu $3,$3,$2
+
+ lw $3,%gottprel(tlsvar_ie)($28)
+ addu $3,$3,$2
+
+ # Local Exec
+ .set push
+ .set mips32r2
+ rdhwr $2, $5
+ .set pop
+ lui $3,%tprel_hi(tlsbin_le)
+ addiu $3,$3,%tprel_lo(tlsbin_le)
+ addu $3,$3,$2
+
+ move $sp,$fp
+ lw $fp,8($sp)
+ addiu $sp,$sp,16
+ j $31
+ .end __start
+
+ .globl __tls_get_addr
+__tls_get_addr:
+ j $31
+
+ .section .tbss,"awT",@nobits
+ .align 2
+ .global tlsbin_gd
+ .type tlsbin_gd,@object
+ .size tlsbin_gd,4
+tlsbin_gd:
+ .space 4
+ .global tlsbin_ie
+ .type tlsbin_ie,@object
+ .size tlsbin_ie,4
+tlsbin_ie:
+ .space 4
+
+ .section .tdata,"awT"
+ .align 2
+ .global tlsbin_ld
+ .hidden tlsbin_ld
+ .type tlsbin_ld,@object
+ .size tlsbin_ld,4
+tlsbin_ld:
+ .word 1
+ .global tlsbin_le
+ .hidden tlsbin_le
+ .type tlsbin_le,@object
+ .size tlsbin_le,4
+tlsbin_le:
+ .word 1
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tlslib-hidden.ver b/binutils-2.21/ld/testsuite/ld-mips-elf/tlslib-hidden.ver
new file mode 100644
index 0000000..e59012f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tlslib-hidden.ver
@@ -0,0 +1,3 @@
+VER_1 {
+ local: *;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tlslib-o32-hidden.got b/binutils-2.21/ld/testsuite/ld-mips-elf/tlslib-o32-hidden.got
new file mode 100644
index 0000000..b1a8317
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tlslib-o32-hidden.got
@@ -0,0 +1,14 @@
+
+.*: file format elf32-tradbigmips
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00000000 R_MIPS_NONE \*ABS\*
+000403bc R_MIPS_TLS_TPREL32 \*ABS\*
+000403c0 R_MIPS_TLS_DTPMOD32 \*ABS\*
+000403c8 R_MIPS_TLS_DTPMOD32 \*ABS\*
+
+
+Contents of section .got:
+ 403b0 00000000 80000000 00000380 00000008 ................
+ 403c0 00000000 00000000 00000000 ffff8004 ................
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tlslib-o32-ver.got b/binutils-2.21/ld/testsuite/ld-mips-elf/tlslib-o32-ver.got
new file mode 100644
index 0000000..a2bc239
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tlslib-o32-ver.got
@@ -0,0 +1,15 @@
+
+.*: file format elf32-tradbigmips
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00000000 R_MIPS_NONE \*ABS\*
+00040520 R_MIPS_TLS_DTPMOD32 \*ABS\*
+00040528 R_MIPS_TLS_DTPMOD32 tlsvar_gd
+0004052c R_MIPS_TLS_DTPREL32 tlsvar_gd
+0004051c R_MIPS_TLS_TPREL32 tlsvar_ie
+
+
+Contents of section .got:
+ 40510 00000000 80000000 000004e0 00000000 ................
+ 40520 00000000 00000000 00000000 00000000 ................
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tlslib-o32.d b/binutils-2.21/ld/testsuite/ld-mips-elf/tlslib-o32.d
new file mode 100644
index 0000000..cdeeded
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tlslib-o32.d
@@ -0,0 +1,45 @@
+
+.*: file format elf32-tradbigmips
+
+Disassembly of section .text:
+
+.* <fn>:
+ .*: 3c1c0005 lui gp,0x5
+ .*: 279c80a0 addiu gp,gp,-32608
+ .*: 0399e021 addu gp,gp,t9
+ .*: 27bdfff0 addiu sp,sp,-16
+ .*: afbe0008 sw s8,8\(sp\)
+ .*: 03a0f021 move s8,sp
+ .*: afbc0000 sw gp,0\(sp\)
+ .*: 8f998018 lw t9,-32744\(gp\)
+ .*: 27848028 addiu a0,gp,-32728
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f998018 lw t9,-32744\(gp\)
+ .*: 27848020 addiu a0,gp,-32736
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00401021 move v0,v0
+ .*: 3c030000 lui v1,0x0
+ .*: 24638000 addiu v1,v1,-32768
+ .*: 00621821 addu v1,v1,v0
+ .*: 7c02283b rdhwr v0,\$5
+ .*: 8f83801c lw v1,-32740\(gp\)
+ .*: 00000000 nop
+ .*: 00621821 addu v1,v1,v0
+ .*: 03c0e821 move sp,s8
+ .*: 8fbe0008 lw s8,8\(sp\)
+ .*: 03e00008 jr ra
+ .*: 27bd0010 addiu sp,sp,16
+ ...
+Disassembly of section .MIPS.stubs:
+
+.* <.MIPS.stubs>:
+ .*: 8f998010 lw t9,-32752\(gp\)
+ .*: 03e07821 move t7,ra
+ .*: 0320f809 jalr t9
+ .*: 241800.* li t8,.*
+ ...
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tlslib-o32.got b/binutils-2.21/ld/testsuite/ld-mips-elf/tlslib-o32.got
new file mode 100644
index 0000000..7dca58e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tlslib-o32.got
@@ -0,0 +1,15 @@
+
+tmpdir/tlslib-o32.so: file format elf32-tradbigmips
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00000000 R_MIPS_NONE \*ABS\*
+00040480 R_MIPS_TLS_DTPMOD32 \*ABS\*
+00040488 R_MIPS_TLS_DTPMOD32 tlsvar_gd
+0004048c R_MIPS_TLS_DTPREL32 tlsvar_gd
+0004047c R_MIPS_TLS_TPREL32 tlsvar_ie
+
+
+Contents of section .got:
+ 40470 00000000 80000000 00000440 00000000 ................
+ 40480 00000000 00000000 00000000 00000000 ................
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tlslib-o32.s b/binutils-2.21/ld/testsuite/ld-mips-elf/tlslib-o32.s
new file mode 100644
index 0000000..c15829f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tlslib-o32.s
@@ -0,0 +1,70 @@
+ .file 1 "tlslib-o32.s"
+ .abicalls
+ .text
+ .align 2
+ .globl fn
+ .ent fn
+ .type fn,@function
+fn:
+ .frame $fp,16,$31
+ .mask 0x40000000,-8
+ .fmask 0x00000000,0
+ .set noreorder
+ .cpload $25
+ .set reorder
+ addiu $sp,$sp,-16
+ sw $fp,8($sp)
+ move $fp,$sp
+ .cprestore 0
+
+ # General Dynamic
+ lw $25,%call16(__tls_get_addr)($28)
+ addiu $4,$28,%tlsgd(tlsvar_gd)
+ jal $25
+
+ # Local Dynamic
+ lw $25,%call16(__tls_get_addr)($28)
+ addiu $4,$28,%tlsldm(tlsvar_ld)
+ jal $25
+
+ move $2,$2 # Arbitrary instructions
+
+ lui $3,%dtprel_hi(tlsvar_ld)
+ addiu $3,$3,%dtprel_lo(tlsvar_ld)
+ addu $3,$3,$2
+
+ # Initial Exec
+ .set push
+ .set mips32r2
+ rdhwr $2, $5
+ .set pop
+ lw $3,%gottprel(tlsvar_ie)($28)
+ addu $3,$3,$2
+
+ move $sp,$fp
+ lw $fp,8($sp)
+ addiu $sp,$sp,16
+ j $31
+ .end fn
+
+ .section .tbss,"awT",@nobits
+ .align 2
+ .global tlsvar_gd
+ .type tlsvar_gd,@object
+ .size tlsvar_gd,4
+tlsvar_gd:
+ .space 4
+ .global tlsvar_ie
+ .type tlsvar_ie,@object
+ .size tlsvar_ie,4
+tlsvar_ie:
+ .space 4
+
+ .section .tdata,"awT"
+ .align 2
+ .global tlsvar_ld
+ .hidden tlsvar_ld
+ .type tlsvar_ld,@object
+ .size tlsvar_ld,4
+tlsvar_ld:
+ .word 1
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/tlslib.ver b/binutils-2.21/ld/testsuite/ld-mips-elf/tlslib.ver
new file mode 100644
index 0000000..441c525
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/tlslib.ver
@@ -0,0 +1,3 @@
+VER_1 {
+ global: *;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/undefined.d b/binutils-2.21/ld/testsuite/ld-mips-elf/undefined.d
new file mode 100644
index 0000000..e5231df
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/undefined.d
@@ -0,0 +1,4 @@
+#name: MIPS undefined reference
+#source: undefined.s
+#ld: -e foo
+#error: \A[^\n]*\.o: In function `foo':\n\(\.text\+0x0\): undefined reference to `bar'\Z
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/undefined.s b/binutils-2.21/ld/testsuite/ld-mips-elf/undefined.s
new file mode 100644
index 0000000..d946a5a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/undefined.s
@@ -0,0 +1,24 @@
+# Relocations against undefined symbols would be incorrectly let through
+# by mips_elf_calculate_relocation() once the result of the
+# ->undefined_symbol() callback has been interpreted in the opposite
+# sense. The link would fail anyway, but for R_MIPS_GOT_PAGE relocations
+# a failure of the following assertion:
+#
+# BFD_ASSERT (h->dynindx >= global_got_dynindx);
+#
+# would additionally be reported in mips_elf_global_got_index(), because
+# at this point h->dynindx for the undefined symbol would be set to -1.
+# Other kinds of GOT relocations allocate a GOT index for the symbol
+# referred and set its h->dynindx in _bfd_mips_elf_check_relocs(), but
+# R_MIPS_GOT_PAGE relocations only allocate a GOT page at that point and
+# for undefined symbols the page never gets resolved any further.
+
+ .abicalls
+ .text
+ .globl foo
+ .type foo, @function
+ .ent foo
+foo:
+ li $2, %got_page(bar)
+ .end foo
+ .size foo, . - foo
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks-forced-local-1.d b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks-forced-local-1.d
new file mode 100644
index 0000000..dc02a3b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks-forced-local-1.d
@@ -0,0 +1,12 @@
+#as: -mips2 -mvxworks-pic
+#source: vxworks-forced-local-1.s
+#ld: -shared -Tvxworks1.ld --version-script vxworks-forced-local-1.ver
+#readelf: --relocs
+
+Relocation section '\.rela\.dyn' .*
+.*
+0008140c 00000002 R_MIPS_32 *00080810
+00081410 00000002 R_MIPS_32 *00080814
+00081414 00000002 R_MIPS_32 *00080818
+00081418 00000302 R_MIPS_32 *00000000 *bar \+ 0
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks-forced-local-1.s b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks-forced-local-1.s
new file mode 100644
index 0000000..a0c0212
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks-forced-local-1.s
@@ -0,0 +1,13 @@
+ .globl foo1
+ .globl foo2
+ .globl foo3
+ lw $4,%call16(foo1)($gp)
+ lw $4,%call16(foo2)($gp)
+ lw $4,%call16(foo3)($gp)
+ lw $4,%got(bar)($gp)
+foo1:
+ nop
+foo2:
+ nop
+foo3:
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks-forced-local-1.ver b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks-forced-local-1.ver
new file mode 100644
index 0000000..a53c620
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks-forced-local-1.ver
@@ -0,0 +1 @@
+{ local: foo*; };
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1-lib.dd b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1-lib.dd
new file mode 100644
index 0000000..17ea125
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1-lib.dd
@@ -0,0 +1,50 @@
+
+.*: file format .*
+
+Disassembly of section \.plt:
+
+00080800 <_PROCEDURE_LINKAGE_TABLE_>:
+ 80800: 8f990008 lw t9,8\(gp\)
+ 80804: 00000000 nop
+ 80808: 03200008 jr t9
+ 8080c: 00000000 nop
+ \.\.\.
+ 80818: 1000fff9 b 80800 <_PROCEDURE_LINKAGE_TABLE_>
+ 8081c: 24180000 li t8,0
+ 80820: 1000fff7 b 80800 <_PROCEDURE_LINKAGE_TABLE_>
+ 80824: 24180001 li t8,1
+Disassembly of section \.text:
+
+00080c00 <foo>:
+ 80c00: 27bdffe0 addiu sp,sp,-32
+ 80c04: afbf0000 sw ra,0\(sp\)
+ 80c08: afbc0004 sw gp,4\(sp\)
+ 80c0c: 3c1c0000 lui gp,0x0
+ 80c10: 8f9c0000 lw gp,0\(gp\)
+ 80c14: 8f9c0000 lw gp,0\(gp\)
+ 80c18: 8f820010 lw v0,16\(gp\)
+ 80c1c: 8c430000 lw v1,0\(v0\)
+ 80c20: 24630001 addiu v1,v1,1
+ 80c24: ac430000 sw v1,0\(v0\)
+ 80c28: 8f99000c lw t9,12\(gp\)
+ 80c2c: 0320f809 jalr t9
+ 80c30: 00000000 nop
+ 80c34: 8f99fff4 lw t9,-12\(gp\)
+ 80c38: 0320f809 jalr t9
+ 80c3c: 00000000 nop
+ 80c40: 8f99fff0 lw t9,-16\(gp\)
+ 80c44: 0320f809 jalr t9
+ 80c48: 00000000 nop
+ 80c4c: 8fbf0000 lw ra,0\(sp\)
+ 80c50: 8fbc0004 lw gp,4\(sp\)
+ 80c54: 03e00008 jr ra
+ 80c58: 27bd0020 addiu sp,sp,32
+
+00080c5c <slocal>:
+ 80c5c: 03e00008 jr ra
+ 80c60: 00000000 nop
+
+00080c64 <sglobal>:
+ 80c64: 03e00008 jr ra
+ 80c68: 00000000 nop
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1-lib.nd b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1-lib.nd
new file mode 100644
index 0000000..c5f31a7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1-lib.nd
@@ -0,0 +1,9 @@
+#...
+Symbol table '\.dynsym' .*:
+#...
+.*: 00081410 +0 +OBJECT +GLOBAL +DEFAULT +[0-9]+ _GLOBAL_OFFSET_TABLE_
+#...
+Symbol table '\.symtab' .*:
+#...
+.*: 00081410 +0 +OBJECT +GLOBAL +DEFAULT +[0-9]+ _GLOBAL_OFFSET_TABLE_
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1-lib.rd b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1-lib.rd
new file mode 100644
index 0000000..12ceb00
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1-lib.rd
@@ -0,0 +1,17 @@
+
+Relocation section '\.rela\.dyn' at offset .* contains .* entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+00080c0c .*05 R_MIPS_HI16 00000000 __GOTT_BASE__ \+ 0
+00080c10 .*06 R_MIPS_LO16 00000000 __GOTT_BASE__ \+ 0
+00080c14 .*01 R_MIPS_16 00000000 __GOTT_INDEX__ \+ 0
+0008141c 00000002 R_MIPS_32 00080c5c
+00081800 00000002 R_MIPS_32 00080c5c
+00081804 00000002 R_MIPS_32 00081800
+00081808 .*02 R_MIPS_32 00081808 dglobal \+ 0
+0008180c .*02 R_MIPS_32 00000000 dexternal \+ 0
+00081420 .*02 R_MIPS_32 00081c00 x \+ 0
+
+Relocation section '\.rela\.plt' at offset .* contains 2 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+00081400 .*7f R_MIPS_JUMP_SLOT 00000000 sexternal \+ 0
+00081404 .*7f R_MIPS_JUMP_SLOT 00080c64 sglobal \+ 0
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1-lib.s b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1-lib.s
new file mode 100644
index 0000000..827332c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1-lib.s
@@ -0,0 +1,52 @@
+ .text
+ .globl foo
+ .type foo, @function
+foo:
+ addiu $sp,$sp,-32
+ sw $31,($sp)
+ sw $28,4($sp)
+ lui $28,%hi(__GOTT_BASE__)
+ lw $28,%lo(__GOTT_BASE__)($28)
+ lw $28,%half(__GOTT_INDEX__)($28)
+ lw $2,%got(x)($28)
+ lw $3,($2)
+ addiu $3,$3,1
+ sw $3,($2)
+ lw $25,%got(slocal)($gp)
+ jalr $25
+ lw $25,%call16(sglobal)($gp)
+ jalr $25
+ lw $25,%call16(sexternal)($gp)
+ jalr $25
+ lw $31,($sp)
+ lw $28,4($sp)
+ addiu $sp,$sp,32
+ jr $31
+ .size foo, .-foo
+
+ .type slocal, @function
+slocal:
+ jr $31
+ .size slocal, .-slocal
+
+ .globl sglobal
+ .type sglobal, @function
+sglobal:
+ jr $31
+ .size sglobal, .-sglobal
+
+ .comm x,4,4
+
+ .data
+ .type dlocal, @object
+dlocal:
+ .word slocal
+ .word dlocal
+ .size dlocal, .-dlocal
+
+ .globl dglobal
+ .type dglobal, @object
+dglobal:
+ .word dglobal
+ .word dexternal
+ .size dglobal, .-dglobal
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1-lib.td b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1-lib.td
new file mode 100644
index 0000000..9f223e3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1-lib.td
@@ -0,0 +1,3 @@
+#...
+ 0x0+16 \(TEXTREL\) +0x0
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1-static.d b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1-static.d
new file mode 100644
index 0000000..69765ae
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1-static.d
@@ -0,0 +1,4 @@
+#name: VxWorks executable test 1 (static)
+#source: vxworks1.s
+#ld: tmpdir/libvxworks1.so -Tvxworks1.ld [big_or_little_endian]
+#error: Dynamic sections created in non-dynamic link
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1.dd b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1.dd
new file mode 100644
index 0000000..af9e354
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1.dd
@@ -0,0 +1,51 @@
+
+.*: file format .*
+
+Disassembly of section \.plt:
+
+00080800 <_PROCEDURE_LINKAGE_TABLE_>:
+ 80800: 3c190008 lui t9,0x8
+ 80800: R_MIPS_HI16 _GLOBAL_OFFSET_TABLE_
+ 80804: 27391410 addiu t9,t9,5136
+ 80804: R_MIPS_LO16 _GLOBAL_OFFSET_TABLE_
+ 80808: 8f390008 lw t9,8\(t9\)
+ 8080c: 00000000 nop
+ 80810: 03200008 jr t9
+ 80814: 00000000 nop
+ 80818: 1000fff9 b 80800 <_PROCEDURE_LINKAGE_TABLE_>
+ 8081c: 24180000 li t8,0
+ 80820: 3c190008 lui t9,0x8
+ 80820: R_MIPS_HI16 _GLOBAL_OFFSET_TABLE_\+0xfffffff0
+ 80824: 27391400 addiu t9,t9,5120
+ 80824: R_MIPS_LO16 _GLOBAL_OFFSET_TABLE_\+0xfffffff0
+ 80828: 8f390000 lw t9,0\(t9\)
+ 8082c: 00000000 nop
+ 80830: 03200008 jr t9
+ 80834: 00000000 nop
+ 80838: 1000fff1 b 80800 <_PROCEDURE_LINKAGE_TABLE_>
+ 8083c: 24180001 li t8,1
+ 80840: 3c190008 lui t9,0x8
+ 80840: R_MIPS_HI16 _GLOBAL_OFFSET_TABLE_\+0xfffffff4
+ 80844: 27391404 addiu t9,t9,5124
+ 80844: R_MIPS_LO16 _GLOBAL_OFFSET_TABLE_\+0xfffffff4
+ 80848: 8f390000 lw t9,0\(t9\)
+ 8084c: 00000000 nop
+ 80850: 03200008 jr t9
+ 80854: 00000000 nop
+Disassembly of section \.text:
+
+00080c00 <_start>:
+ 80c00: 0c020210 jal 80840 <_PROCEDURE_LINKAGE_TABLE_\+0x40>
+ 80c00: R_MIPS_26 \.plt\+0x40
+ 80c04: 00000000 nop
+ 80c08: 0c020306 jal 80c18 <sexternal>
+ 80c08: R_MIPS_26 sexternal
+ 80c0c: 00000000 nop
+ 80c10: 08020208 j 80820 <_PROCEDURE_LINKAGE_TABLE_\+0x20>
+ 80c10: R_MIPS_26 \.plt\+0x20
+ 80c14: 00000000 nop
+
+00080c18 <sexternal>:
+ 80c18: 03e00008 jr ra
+ 80c1c: 00000000 nop
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1.ld b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1.ld
new file mode 100644
index 0000000..8fe3c48
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1.ld
@@ -0,0 +1,32 @@
+SECTIONS
+{
+ . = 0x80000;
+ .interp : { *(.interp) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+
+ . = ALIGN (0x400);
+ .rela.dyn : { *(.rela.dyn) }
+ .rela.plt : { *(.rela.plt) }
+
+ . = ALIGN (0x400);
+ .plt : { *(.plt) }
+
+ . = ALIGN (0x400);
+ .text : { *(.text) }
+
+ . = ALIGN (0x1000);
+ .dynamic : { *(.dynamic) }
+
+ . = ALIGN (0x400);
+ .got : { *(.got.plt) *(.got) }
+
+ . = ALIGN (0x400);
+ .data : { *(.data) }
+
+ . = ALIGN (0x400);
+ .bss : { *(.bss) *(.dynbss) }
+
+ /DISCARD/ : { *(.reginfo) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1.rd b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1.rd
new file mode 100644
index 0000000..f4455f5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1.rd
@@ -0,0 +1,32 @@
+
+Relocation section '\.rela\.dyn' at offset .* contains 1 entries:
+ Offset Info Type Sym.Value Sym. Name \+ Addend
+00081c00 .*7e R_MIPS_COPY 00081c00 dglobal \+ 0
+
+Relocation section '\.rela\.plt' at offset .* contains 2 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+00081400 .*7f R_MIPS_JUMP_SLOT 00080820 sglobal \+ 0
+00081404 .*7f R_MIPS_JUMP_SLOT 00080840 foo \+ 0
+
+Relocation section '\.rela\.text' at offset .* contains 3 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+00080c00 .*04 R_MIPS_26 00080800 \.plt \+ 40
+00080c08 .*04 R_MIPS_26 00080c18 sexternal \+ 0
+00080c10 .*04 R_MIPS_26 00080800 \.plt \+ 20
+
+Relocation section '\.rela\.data' at offset .* contains 3 entries:
+ Offset Info Type Sym.Value Sym. Name \+ Addend
+00081800 .*02 R_MIPS_32 00081800 .data \+ 0
+00081804 .*02 R_MIPS_32 00081c00 .bss \+ 0
+00081808 .*02 R_MIPS_32 00081804 dexternal \+ 0
+
+Relocation section '\.rela\.plt\.unloaded' at offset .* contains 8 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+00080800 .*05 R_MIPS_HI16 00081410 _GLOBAL_OFFSET_TABLE_ \+ 0
+00080804 .*06 R_MIPS_LO16 00081410 _GLOBAL_OFFSET_TABLE_ \+ 0
+00081400 .*02 R_MIPS_32 00080800 _PROCEDURE_LINKAGE_TAB.* \+ 18
+00080820 .*05 R_MIPS_HI16 00081410 _GLOBAL_OFFSET_TABLE_ \+ fffffff0
+00080824 .*06 R_MIPS_LO16 00081410 _GLOBAL_OFFSET_TABLE_ \+ fffffff0
+00081404 .*02 R_MIPS_32 00080800 _PROCEDURE_LINKAGE_TAB.* \+ 38
+00080840 .*05 R_MIPS_HI16 00081410 _GLOBAL_OFFSET_TABLE_ \+ fffffff4
+00080844 .*06 R_MIPS_LO16 00081410 _GLOBAL_OFFSET_TABLE_ \+ fffffff4
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1.s b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1.s
new file mode 100644
index 0000000..33a247f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks1.s
@@ -0,0 +1,27 @@
+ .text
+ .globl _start
+ .type _start, @function
+_start:
+ jal foo
+ jal sexternal
+ j sglobal
+ .size _start, .-_start
+
+ .globl sexternal
+ .type sexternal, @function
+sexternal:
+ jr $31
+ .size sexternal, .-sexternal
+
+ .data
+ .type dlocal, @object
+dlocal:
+ .word dlocal
+ .size dlocal, .-dlocal
+
+ .globl dexternal
+ .type dexternal, @object
+dexternal:
+ .word dglobal
+ .word dexternal
+ .size dexternal, .-dexternal
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks2-static.sd b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks2-static.sd
new file mode 100644
index 0000000..912755b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks2-static.sd
@@ -0,0 +1,9 @@
+#...
+Elf file type is EXEC \(Executable file\)
+Entry point 0x80000
+#...
+Program Headers:
+ Type .*
+ LOAD .* 0x00080000 0x00080000 .* R E 0x1000
+
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks2.s b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks2.s
new file mode 100644
index 0000000..25f078e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks2.s
@@ -0,0 +1,5 @@
+ .globl _start
+ .type _start, @function
+_start:
+ jr $31
+ .size _start, .-_start
diff --git a/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks2.sd b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks2.sd
new file mode 100644
index 0000000..5ff87d3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mips-elf/vxworks2.sd
@@ -0,0 +1,13 @@
+#...
+Elf file type is EXEC \(Executable file\)
+Entry point 0x80400
+#...
+Program Headers:
+ Type .*
+ PHDR .*
+#...
+ LOAD .* 0x00080000 0x00080000 .* R E 0x1000
+ LOAD .* 0x00081000 0x00081000 .* RW 0x1000
+ DYNAMIC .*
+
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/a.s b/binutils-2.21/ld/testsuite/ld-mmix/a.s
new file mode 100644
index 0000000..20e571b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/a.s
@@ -0,0 +1,5 @@
+* The symbol "a" is found here.
+ .text
+ .global a
+a:
+ SET $253,4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/areg-256.s b/binutils-2.21/ld/testsuite/ld-mmix/areg-256.s
new file mode 100644
index 0000000..21012d8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/areg-256.s
@@ -0,0 +1,2 @@
+ .global areg
+areg IS $255+1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/areg-t.s b/binutils-2.21/ld/testsuite/ld-mmix/areg-t.s
new file mode 100644
index 0000000..364b01c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/areg-t.s
@@ -0,0 +1,3 @@
+ .text
+ .global areg
+areg SWYM 4,8,16
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/aregm.s b/binutils-2.21/ld/testsuite/ld-mmix/aregm.s
new file mode 100644
index 0000000..2dacbad
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/aregm.s
@@ -0,0 +1,5 @@
+ .global areg
+areg GREG Main+4
+ LDOU $3,areg,16
+ LDOU $3,$7,areg
+ LDOU $5,Main+8
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-badfil1.d b/binutils-2.21/ld/testsuite/ld-mmix/b-badfil1.d
new file mode 100644
index 0000000..8a945fb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-badfil1.d
@@ -0,0 +1,7 @@
+#source: b-twoinsn.s
+#source: b-badfil1.s
+#source: b-post1.s
+#source: b-goodmain.s
+#ld: --oformat binary
+#objcopy_linked_file:
+#error: invalid mmo file: file number 42 `bar.s', was already entered as `foo.s'
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-badfil1.s b/binutils-2.21/ld/testsuite/ld-mmix/b-badfil1.s
new file mode 100644
index 0000000..256fa78
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-badfil1.s
@@ -0,0 +1,10 @@
+% The .text contents is supposed to be linked --oformat binary with
+% b-twoinsn.s and b-goodmain.s, and will provide two LOP_FILEs, but
+% specifying the same file number.
+ .text
+ .byte 0x98,06,42,2
+ .ascii "foo.s"
+ .byte 0,0,0
+ .byte 0x98,06,42,2
+ .ascii "bar.s"
+ .byte 0,0,0
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-badfil2.d b/binutils-2.21/ld/testsuite/ld-mmix/b-badfil2.d
new file mode 100644
index 0000000..3f98a77
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-badfil2.d
@@ -0,0 +1,7 @@
+#source: b-twoinsn.s
+#source: b-badfil2.s
+#source: b-post1.s
+#source: b-goodmain.s
+#ld: --oformat binary
+#objcopy_linked_file:
+#error: invalid mmo file: file name for number 42 was not specified before use
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-badfil2.s b/binutils-2.21/ld/testsuite/ld-mmix/b-badfil2.s
new file mode 100644
index 0000000..23d68ba
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-badfil2.s
@@ -0,0 +1,6 @@
+% The .text contents is supposed to be linked --oformat binary with
+% b-twoinsn.s and b-goodmain.s, and will provide a LOP_FILE for file
+% number 42, without specifying the file name, which an earlier LOP_FILE
+% for the same file number was supposed to have filled in
+ .text
+ .byte 0x98,06,42,0
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-badfixo.d b/binutils-2.21/ld/testsuite/ld-mmix/b-badfixo.d
new file mode 100644
index 0000000..3cb6088
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-badfixo.d
@@ -0,0 +1,7 @@
+#source: b-twoinsn.s
+#source: b-badfixo.s
+#source: b-post1.s
+#source: b-goodmain.s
+#ld: --oformat binary
+#objcopy_linked_file:
+#error: invalid mmo file: .* lop_fixo
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-badfixo.s b/binutils-2.21/ld/testsuite/ld-mmix/b-badfixo.s
new file mode 100644
index 0000000..93cd6d0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-badfixo.s
@@ -0,0 +1,5 @@
+% The .text contents is supposed to be linked --oformat binary with
+% b-twoinsn.s and b-goodmain.s, and will provide a LOP_FIXO with invalid;
+% (!= 1, != 2), YZ field.
+ .text
+ .byte 0x98,3,0,3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-badloc.d b/binutils-2.21/ld/testsuite/ld-mmix/b-badloc.d
new file mode 100644
index 0000000..dce1ebf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-badloc.d
@@ -0,0 +1,7 @@
+#source: b-twoinsn.s
+#source: b-badloc.s
+#source: b-post1.s
+#source: b-goodmain.s
+#ld: --oformat binary
+#objcopy_linked_file:
+#error: invalid mmo file: .* lop_loc
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-badloc.s b/binutils-2.21/ld/testsuite/ld-mmix/b-badloc.s
new file mode 100644
index 0000000..098098a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-badloc.s
@@ -0,0 +1,5 @@
+% The .text contents is supposed to be linked --oformat binary with
+% b-twoinsn.s and b-goodmain.s, and will provide a LOP_LOC with invalid;
+% (!= 1, != 2), YZ field.
+ .text
+ .byte 0x98,1,0,0
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-badlop.d b/binutils-2.21/ld/testsuite/ld-mmix/b-badlop.d
new file mode 100644
index 0000000..b8c55e5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-badlop.d
@@ -0,0 +1,7 @@
+#source: b-twoinsn.s
+#source: b-badlop.s
+#source: b-post1.s
+#source: b-goodmain.s
+#ld: --oformat binary
+#objcopy_linked_file:
+#error: invalid mmo file: unsupported lopcode
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-badlop.s b/binutils-2.21/ld/testsuite/ld-mmix/b-badlop.s
new file mode 100644
index 0000000..9e13332
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-badlop.s
@@ -0,0 +1,4 @@
+% The .text contents is supposed to be linked --oformat binary with
+% b-twoinsn.s and b-goodmain.s, and will provide an invalid lopcode.
+ .text
+ .byte 0x98,0xff,0,0
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-badm.d b/binutils-2.21/ld/testsuite/ld-mmix/b-badm.d
new file mode 100644
index 0000000..39d8ecb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-badm.d
@@ -0,0 +1,6 @@
+#source: b-twoinsn.s
+#source: b-post1.s
+#source: b-badmain.s
+#ld: --oformat binary
+#objcopy_linked_file:
+#error: invalid mmo file: initialization value for .255 is not `Main'
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-badm2.s b/binutils-2.21/ld/testsuite/ld-mmix/b-badm2.s
new file mode 100644
index 0000000..eb94278
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-badm2.s
@@ -0,0 +1,6 @@
+% The .text contents is supposed to be linked --oformat binary with
+% b-twoinsn.s. It will provide an incorrect LOP_END; its YZ field is not
+% the number of tetras to the preceding LOP_STAB.
+ .text
+ .byte 0x98,0x0b,0x00,0x00,0x20,0x3a,0x30,0x4d,0x20,0x61,0x20,0x69
+ .byte 0x01,0x6e,0x04,0x81,0x01,0x61,0x04,0x82,0x98,0x0c,0x00,0x03
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-badmain.s b/binutils-2.21/ld/testsuite/ld-mmix/b-badmain.s
new file mode 100644
index 0000000..4736955
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-badmain.s
@@ -0,0 +1,7 @@
+% The .text contents is supposed to be linked --oformat binary with
+% b-twoinsn.s, and will provide the end of a mmo file with a value of
+% :Main that does not correspond to the address in the initialization of
+% $255 - the start address.
+ .text
+ .byte 0x98,0x0b,0,0,0x20,0x3a,0x30,0x4d,0x20,0x61,0x20,0x69
+ .byte 1,0x6e,0,0x81,1,0x61,4,0x82,0x98,0x0c,0,4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-badquot.d b/binutils-2.21/ld/testsuite/ld-mmix/b-badquot.d
new file mode 100644
index 0000000..ae3d095
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-badquot.d
@@ -0,0 +1,7 @@
+#source: b-twoinsn.s
+#source: b-badquot.s
+#source: b-post1.s
+#source: b-goodmain.s
+#ld: --oformat binary
+#objcopy_linked_file:
+#error: invalid mmo file: .* lop_quote
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-badquot.s b/binutils-2.21/ld/testsuite/ld-mmix/b-badquot.s
new file mode 100644
index 0000000..77742db
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-badquot.s
@@ -0,0 +1,5 @@
+% The .text contents is supposed to be linked --oformat binary with
+% b-twoinsn.s and b-goodmain.s, and will provide a LOP_QUOTE with invalid;
+% non-zero, YZ field.
+ .text
+ .byte 0x98,0,0xff,0
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-badrx1.d b/binutils-2.21/ld/testsuite/ld-mmix/b-badrx1.d
new file mode 100644
index 0000000..1033476
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-badrx1.d
@@ -0,0 +1,7 @@
+#source: b-twoinsn.s
+#source: b-badrx1.s
+#source: b-post1.s
+#source: b-goodmain.s
+#ld: --oformat binary
+#objcopy_linked_file:
+#error: invalid mmo file: expected y = 0, .* lop_fixrx
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-badrx1.s b/binutils-2.21/ld/testsuite/ld-mmix/b-badrx1.s
new file mode 100644
index 0000000..dd35763
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-badrx1.s
@@ -0,0 +1,6 @@
+% The .text contents is supposed to be linked --oformat binary with
+% b-twoinsn.s and b-goodmain.s, and will provide a LOP_FIXRX with invalid
+% (non-zero), Y field.
+ .text
+ .byte 0x98,5,1,0
+ .4byte 0
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-badrx2.d b/binutils-2.21/ld/testsuite/ld-mmix/b-badrx2.d
new file mode 100644
index 0000000..6e13019
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-badrx2.d
@@ -0,0 +1,7 @@
+#source: b-twoinsn.s
+#source: b-badrx2.s
+#source: b-post1.s
+#source: b-goodmain.s
+#ld: --oformat binary
+#objcopy_linked_file:
+#error: invalid mmo file: expected z .* lop_fixrx
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-badrx2.s b/binutils-2.21/ld/testsuite/ld-mmix/b-badrx2.s
new file mode 100644
index 0000000..20def6c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-badrx2.s
@@ -0,0 +1,6 @@
+% The .text contents is supposed to be linked --oformat binary with
+% b-twoinsn.s and b-goodmain.s, and will provide a LOP_FIXRX with invalid
+% (!= 16, != 24), Z field.
+ .text
+ .byte 0x98,5,0,8
+ .4byte 0
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-badrx3.d b/binutils-2.21/ld/testsuite/ld-mmix/b-badrx3.d
new file mode 100644
index 0000000..c1cffed
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-badrx3.d
@@ -0,0 +1,7 @@
+#source: b-twoinsn.s
+#source: b-badrx3.s
+#source: b-post1.s
+#source: b-goodmain.s
+#ld: --oformat binary
+#objcopy_linked_file:
+#error: invalid mmo file: leading byte of operand word .* lop_fixrx
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-badrx3.s b/binutils-2.21/ld/testsuite/ld-mmix/b-badrx3.s
new file mode 100644
index 0000000..59cd5cb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-badrx3.s
@@ -0,0 +1,6 @@
+% The .text contents is supposed to be linked --oformat binary with
+% b-twoinsn.s and b-goodmain.s, and will provide a LOP_FIXRX with invalid
+% (!= 0, != 1), first byte of the operand word.
+ .text
+ .byte 0x98,5,0,24
+ .byte 2,0,0,0
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-bend.s b/binutils-2.21/ld/testsuite/ld-mmix/b-bend.s
new file mode 100644
index 0000000..1168ee9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-bend.s
@@ -0,0 +1,6 @@
+% The .text contents is supposed to be linked --oformat binary with
+% b-twoinsn.s and b-goodmain.s, and will provide an invalid LOP_END; one
+% not at the end of a file. It also does not in YZ specify a correct
+% number of bytes between it and a preceding lop_stab.
+ .text
+ .byte 0x98,12,0,0
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-bend1.d b/binutils-2.21/ld/testsuite/ld-mmix/b-bend1.d
new file mode 100644
index 0000000..e747753
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-bend1.d
@@ -0,0 +1,11 @@
+#source: b-twoinsn.s
+#source: b-bend.s
+#source: b-post1.s
+#source: b-goodmain.s
+#ld: --oformat binary
+#objcopy_linked_file:
+#error: invalid mmo file: lop_end not last item in file
+
+# This test depend on that the non-at-end condition is tested before
+# not-correct-YZ-field and might need tweaking if the implementation
+# changes.
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-bend2.d b/binutils-2.21/ld/testsuite/ld-mmix/b-bend2.d
new file mode 100644
index 0000000..234b4e5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-bend2.d
@@ -0,0 +1,10 @@
+#source: b-twoinsn.s
+#source: b-post1.s
+#source: b-goodmain.s
+#source: b-bend.s
+#ld: --oformat binary
+#objcopy_linked_file:
+#error: invalid mmo file: lop_end not last item in file
+
+# We use the b-bend.s file just to make the correct lop_end in
+# b-goodmain.s not the last one.
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-bend3.d b/binutils-2.21/ld/testsuite/ld-mmix/b-bend3.d
new file mode 100644
index 0000000..3448c22
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-bend3.d
@@ -0,0 +1,6 @@
+#source: b-twoinsn.s
+#source: b-post1.s
+#source: b-badm2.s
+#ld: --oformat binary
+#objcopy_linked_file:
+#error: invalid mmo file: YZ of lop_end .* not equal to the number of tetras to the preceding lop_stab
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-bstab1.d b/binutils-2.21/ld/testsuite/ld-mmix/b-bstab1.d
new file mode 100644
index 0000000..6281f06
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-bstab1.d
@@ -0,0 +1,7 @@
+#source: b-twoinsn.s
+#source: b-bstab1.s
+#source: b-post1.s
+#source: b-goodmain.s
+#ld: --oformat binary
+#objcopy_linked_file:
+#error: invalid mmo file: fields y and z of lop_stab non-zero, y: 1, z: 2
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-bstab1.s b/binutils-2.21/ld/testsuite/ld-mmix/b-bstab1.s
new file mode 100644
index 0000000..0210106
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-bstab1.s
@@ -0,0 +1,5 @@
+% The .text contents is supposed to be linked --oformat binary with
+% b-twoinsn.s and b-goodmain.s, and will provide an invalid LOP_STAB, one
+% with non-zero y and/or z.
+ .text
+ .byte 0x98,11,1,2
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-fixo2.d b/binutils-2.21/ld/testsuite/ld-mmix/b-fixo2.d
new file mode 100644
index 0000000..e8e2ff8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-fixo2.d
@@ -0,0 +1,27 @@
+#source: b-twoinsn.s
+#source: b-fixo2.s
+#source: b-post1.s
+#source: b-goodmain.s
+#ld: --oformat binary
+#objcopy_linked_file:
+#objdump: -sht
+
+# Note that we "optimize" out the high tetrabyte of 0 written to
+# 2068098510aa5560, hence only the low part is left.
+
+.*: file format mmo
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0+8 0+ 0+ 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, CODE
+ 1 \.data 0+4 2068098510aa5564 2068098510aa5564 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD
+SYMBOL TABLE:
+0+4 g \.text Main
+0+4 g \.text a
+
+Contents of section \.text:
+ 0000 e3fd0001 e3fd0004 .*
+Contents of section \.data:
+ 2068098510aa5564 00000008 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-fixo2.s b/binutils-2.21/ld/testsuite/ld-mmix/b-fixo2.s
new file mode 100644
index 0000000..f892999
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-fixo2.s
@@ -0,0 +1,6 @@
+% The .text contents is supposed to be linked --oformat binary with
+% b-twoinsn.s and b-goodmain.s, and will provide a LOP_FIXO storing the
+% current address at address 0x2068098510aa5560.
+ .text
+ .byte 0x98,3,0x20,2
+ .8byte 0x68098510aa5560
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-goodmain.s b/binutils-2.21/ld/testsuite/ld-mmix/b-goodmain.s
new file mode 100644
index 0000000..c90063e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-goodmain.s
@@ -0,0 +1,5 @@
+% The .text contents is supposed to be linked --oformat binary with
+% b-twoinsn.s, and will provide a valid end of a mmo file.
+ .text
+ .byte 0x98,0x0b,0x00,0x00,0x20,0x3a,0x30,0x4d,0x20,0x61,0x20,0x69
+ .byte 0x01,0x6e,0x04,0x81,0x01,0x61,0x04,0x82,0x98,0x0c,0x00,0x04
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-loc64k.d b/binutils-2.21/ld/testsuite/ld-mmix/b-loc64k.d
new file mode 100644
index 0000000..0124643
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-loc64k.d
@@ -0,0 +1,24 @@
+#source: b-loc64k.s
+#source: b-goodmain.s
+#ld: --oformat binary
+#objcopy_linked_file:
+#objdump: -dht
+
+.*: file format mmo
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0+10004 0+ 0+ 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, CODE
+SYMBOL TABLE:
+0+4 g \.text Main
+0+4 g \.text a
+
+Disassembly of section \.text:
+
+0+ <Main-0x4>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <Main>:
+ \.\.\.
+ 10000: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-loc64k.s b/binutils-2.21/ld/testsuite/ld-mmix/b-loc64k.s
new file mode 100644
index 0000000..ea563d2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-loc64k.s
@@ -0,0 +1,8 @@
+% The .text contents is supposed to be linked --oformat binary, and will
+% correspond to the start of a mmo file with two instructions, 64k apart.
+% This file ends before the LOP_STAB.
+ .text
+ .byte 0x98,9,1,1,0x3b,0x7f,0x9c,0xe3,0x98,1,0,2,0,0,0,0
+ .byte 0,0,0,0,0xe3,0xfd,0,1,0x98,1,0,2,0,0,0,0
+ .byte 0,1,0,0,0xe3,0xfd,0,4,0x98,0x0a,0,0xff,0,0,0,0
+ .byte 0,0,0,4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-nosym.d b/binutils-2.21/ld/testsuite/ld-mmix/b-nosym.d
new file mode 100644
index 0000000..c7953ec
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-nosym.d
@@ -0,0 +1,18 @@
+#source: b-twoinsn.s
+#source: b-post1.s
+#source: b-nosym.s
+#ld: --oformat binary
+#objcopy_linked_file:
+#objdump: -st 2>/dev/null
+
+# Note that we have to redirect stderr when objdumping to get rid of the
+# "no symbols" message that would otherwise cause a spurious failure and
+# which we seemingly can't identify or prune in another way.
+
+.*: file format mmo
+
+SYMBOL TABLE:
+no symbols
+
+Contents of section \.text:
+ 0000 e3fd0001 e3fd0004 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-nosym.s b/binutils-2.21/ld/testsuite/ld-mmix/b-nosym.s
new file mode 100644
index 0000000..08bfdbf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-nosym.s
@@ -0,0 +1,5 @@
+% The .text contents is supposed to be linked --oformat binary with
+% b-twoinsn.s, and will provide a valid end of a mmo file but with no
+% symbols (if that is actually valid).
+ .text
+ .byte 0x98,0x0b,0x00,0x00,0x98,0x0c,0x00,0x00
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-offloc.s b/binutils-2.21/ld/testsuite/ld-mmix/b-offloc.s
new file mode 100644
index 0000000..c2fb2cc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-offloc.s
@@ -0,0 +1,9 @@
+% The .text contents is supposed to be linked --oformat binary with
+% b-post1.s and b-goodmain.s. The code below will provide a LOP_LOC
+% with a 64-bit address (0x789abcdef0123456) then 16 bytes of % random data.
+
+ .text
+ .byte 0x98,1,0,2
+ .8byte 0x789abcdef0123458
+ .byte 0xb0,0x45,0x19,0x7d,0x2c,0x1b,0x3,0xb2
+ .byte 0xe4,0xdb,0xf8,0x77,0xf,0xc7,0x66,0xfb
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-post1.s b/binutils-2.21/ld/testsuite/ld-mmix/b-post1.s
new file mode 100644
index 0000000..a60aece
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-post1.s
@@ -0,0 +1,5 @@
+% The .text contents is supposed to be linked --oformat binary, and will
+% correspond to a LOP_POST for an initialization of $255 with 4. A
+% LOP_STAB, such as in b-goodmain.s should follow.
+ .text
+ .byte 0x98,0x0a,0,0xff,0,0,0,0,0,0,0,4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-twoinsn.s b/binutils-2.21/ld/testsuite/ld-mmix/b-twoinsn.s
new file mode 100644
index 0000000..d9e0147
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-twoinsn.s
@@ -0,0 +1,7 @@
+% The .text contents is supposed to be linked --oformat binary, and will
+% correspond to the start of a mmo file with two instructions. This file
+% ends before the LOP_STAB.
+ .text
+ .byte 0x98,9,1,1,0x3b,0x7f,0x9c,0xe3,0x98,1,0,2,0,0,0,0
+ .byte 0,0,0,0,0xe3,0xfd,0,1,0x98,1,0,2,0,0,0,0
+ .byte 0,0,0,4,0xe3,0xfd,0,4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-widec.s b/binutils-2.21/ld/testsuite/ld-mmix/b-widec.s
new file mode 100644
index 0000000..c6f8c30
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-widec.s
@@ -0,0 +1,7 @@
+% The .text contents is supposed to be linked --oformat binary with
+% b-twoinsn.s, and will provide a valid end of a mmo file, but with the
+% "n" in :Main in wide character format; the widening is with a nil, so it
+% is treated like a normal "n".
+ .text
+ .byte 0x98,0x0b,0x00,0x00,0x20,0x3a,0x30,0x4d,0x20,0x61,0x20,0x69
+ .byte 0x81,0,0x6e,0x04,0x81,0x01,0x61,0x04,0x82,0,0,0,0x98,0x0c,0x00,0x05
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-widec1.d b/binutils-2.21/ld/testsuite/ld-mmix/b-widec1.d
new file mode 100644
index 0000000..e290ba1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-widec1.d
@@ -0,0 +1,12 @@
+#source: b-twoinsn.s
+#source: b-post1.s
+#source: b-widec.s
+#ld: --oformat binary
+#objcopy_linked_file:
+#objdump: -t
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+4 g \.text Main
+0+4 g \.text a
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-widec2.d b/binutils-2.21/ld/testsuite/ld-mmix/b-widec2.d
new file mode 100644
index 0000000..4094b59
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-widec2.d
@@ -0,0 +1,6 @@
+#source: b-twoinsn.s
+#source: b-post1.s
+#source: b-widec2.s
+#ld: --oformat binary
+#objcopy_linked_file:
+#error: unsupported wide character sequence 0xFF 0x6E
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-widec2.s b/binutils-2.21/ld/testsuite/ld-mmix/b-widec2.s
new file mode 100644
index 0000000..7745365
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-widec2.s
@@ -0,0 +1,7 @@
+% The .text contents is supposed to be linked --oformat binary with
+% b-twoinsn.s, and will provide a valid end of a mmo file, but with the
+% "n" in :Main in wide character format; the widening is with a 0xff, so it
+% isn't supported, and the file is rejected.
+ .text
+ .byte 0x98,0x0b,0x00,0x00,0x20,0x3a,0x30,0x4d,0x20,0x61,0x20,0x69
+ .byte 0x81,0xff,0x6e,0x04,0x81,0x01,0x61,0x04,0x82,0,0,0,0x98,0x0c,0x00,0x05
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-widec3.d b/binutils-2.21/ld/testsuite/ld-mmix/b-widec3.d
new file mode 100644
index 0000000..f4cb3b9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-widec3.d
@@ -0,0 +1,6 @@
+#source: b-twoinsn.s
+#source: b-post1.s
+#source: b-widec3.s
+#ld: --oformat binary
+#objcopy_linked_file:
+#error: invalid symbol table: duplicate symbol `Main'
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/b-widec3.s b/binutils-2.21/ld/testsuite/ld-mmix/b-widec3.s
new file mode 100644
index 0000000..0c02892
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/b-widec3.s
@@ -0,0 +1,8 @@
+% The .text contents is supposed to be linked --oformat binary with
+% b-twoinsn.s, and will provide a valid end of a mmo file, but with the
+% "n" in :Main in wide character format; the widening is with a nil, so it
+% is treated like a normal "n". Also, it provides a normal "n", so the
+% two symbols collide.
+ .text
+ .byte 0x98,0x0b,0x00,0x00,0x20,0x3a,0x30,0x4d,0x20,0x61,0x20,0x69
+ .byte 0x91,0,0x6e,0x04,0x81,0x01,0x6e,0x04,0x83,1,0x01,0x61,0x04,0x82,0,0,0x98,0x0c,0,0x06
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-1.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-1.d
new file mode 100644
index 0000000..97bc33d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-1.d
@@ -0,0 +1,21 @@
+#source: start.s
+#source: bpo-1.s
+#as: -linker-allocated-gregs
+#ld: -m elf64mmix
+#objdump: -st
+
+# Just a simple linker-allocated GREG with no explicit GREGs.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0000000000000000 l d \.text 0+ (|\.text)
+0+7f0 l d \.MMIX\.reg_contents 0+ (|\.MMIX\.reg_contents)
+0+4 l \.text 0+ x
+0+ g \.text 0+ _start
+#...
+
+Contents of section \.text:
+ 0000 e3fd0001 232afe00 .*
+Contents of section \.MMIX\.reg_contents:
+ 07f0 00000000 0000002e .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-1.s b/binutils-2.21/ld/testsuite/ld-mmix/bpo-1.s
new file mode 100644
index 0000000..0a76e40
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-1.s
@@ -0,0 +1,2 @@
+# A most simple instruction needing a linker-supplied GREG.
+x LDA $42,x+42
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-10.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-10.d
new file mode 100644
index 0000000..713d7ad
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-10.d
@@ -0,0 +1,22 @@
+#source: start4.s
+#source: bpo-6.s
+#source: bpo-5.s
+#as: -linker-allocated-gregs
+#ld: -m elf64mmix --gc-sections
+#objdump: -st
+
+# Check that GC removes all (two) BPO:s when all are collected.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+ l d \.init 0+ (|\.init)
+0+7f8 l +d \.MMIX.reg_contents 0+ (|\.MMIX\.reg_contents)
+0+ l \.init 0+ _start
+2000000000000000 g \*ABS\* 0+ __bss_start
+2000000000000000 g \*ABS\* 0+ _edata
+2000000000000000 g \*ABS\* 0+ _end
+0+4 g \.init 0+ _start\.
+
+Contents of section \.init:
+ 0000 e37704a6 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-10.s b/binutils-2.21/ld/testsuite/ld-mmix/bpo-10.s
new file mode 100644
index 0000000..a4d1c12
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-10.s
@@ -0,0 +1,6 @@
+# Overflow; specify 223*8 registers.
+ .set i,0
+ .rept 223*4*8
+ LDA $11,_start+i*64
+ .set i,i+1
+ .endr
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-11.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-11.d
new file mode 100644
index 0000000..5925cff
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-11.d
@@ -0,0 +1,31 @@
+#source: start3.s
+#source: bpo-6.s
+#source: bpo-2.s
+#source: bpo-5.s
+#as: -linker-allocated-gregs
+#ld: -m elf64mmix --gc-sections
+#objdump: -st
+
+# Check that GC removes one of the three BPO:s, for the collected section.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+ l d \.init 0+ (|\.init)
+0+10 l d \.text 0+ (|\.text)
+0+7e8 l d \.MMIX\.reg_contents 0+ (|\.MMIX\.reg_contents)
+0+ l \.init 0+ _start
+0+14 g \.text 0+ x
+0+10 g \.text 0+ x2
+2000000000000000 g \*ABS\* 0+ __bss_start
+2000000000000000 g \*ABS\* 0+ _edata
+2000000000000000 g \*ABS\* 0+ _end
+0+10 g \.text 0+ _start\.
+
+
+Contents of section \.init:
+ 0000 00000000 0000003d 00000000 0000003a .*
+Contents of section \.text:
+ 0010 232dfe00 232dfd00 .*
+Contents of section \.MMIX\.reg_contents:
+ 07e8 00000000 0000107c 00000000 0000a420 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-11.s b/binutils-2.21/ld/testsuite/ld-mmix/bpo-11.s
new file mode 100644
index 0000000..51ed92f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-11.s
@@ -0,0 +1,5 @@
+ .set i,0
+ .rept 222
+ LDA $11,_start+i*256
+ .set i,i+1
+ .endr
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-12.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-12.d
new file mode 100644
index 0000000..2961e8b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-12.d
@@ -0,0 +1,9 @@
+#source: start.s
+#source: bpo-7.s
+#source: greg-1.s
+#as: -linker-allocated-gregs
+#ld: -m elf64mmix
+#error: base-plus-offset relocation against register symbol
+
+# Check that we get an error message if we see a BPO against a register
+# symbol. Variant 1: a GREG allocated register.
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-12m.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-12m.d
new file mode 100644
index 0000000..7d847fe
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-12m.d
@@ -0,0 +1,9 @@
+#source: start.s
+#source: bpo-7.s
+#source: greg-1.s
+#as: -linker-allocated-gregs
+#ld: -m mmo
+#error: base-plus-offset relocation against register symbol
+
+# Check that we get an error message if we see a BPO against a register
+# symbol. Variant 1: a GREG allocated register.
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-13.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-13.d
new file mode 100644
index 0000000..78f7c7a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-13.d
@@ -0,0 +1,9 @@
+#source: start.s
+#source: bpo-7.s
+#source: areg-256.s
+#as: -linker-allocated-gregs
+#ld: -m elf64mmix
+#error: base-plus-offset relocation against register symbol
+
+# Check that we get an error message if we see a BPO against a register
+# symbol. Variant 2: a register symbol.
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-13m.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-13m.d
new file mode 100644
index 0000000..8bd0bf6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-13m.d
@@ -0,0 +1,9 @@
+#source: start.s
+#source: bpo-7.s
+#source: areg-256.s
+#as: -linker-allocated-gregs
+#ld: -m mmo
+#error: base-plus-offset relocation against register symbol
+
+# Check that we get an error message if we see a BPO against a register
+# symbol. Variant 2: a register symbol.
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-14.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-14.d
new file mode 100644
index 0000000..e19e4a8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-14.d
@@ -0,0 +1,22 @@
+#source: start.s
+#source: bpo-7.s
+#source: areg-t.s
+#as: -linker-allocated-gregs
+#ld: -m elf64mmix
+#objdump: -st
+
+# A BPO against an external symbol.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+ l d \.text 0+ (|\.text)
+0+7f0 l d \.MMIX\.reg_contents 0+ (|\.MMIX\.reg_contents)
+0+ g \.text 0+ _start
+0+8 g \.text 0+ areg
+#...
+
+Contents of section \.text:
+ 0000 e3fd0001 234dfe00 fd040810 .*
+Contents of section \.MMIX\.reg_contents:
+ 07f0 00000000 00000003 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-14m.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-14m.d
new file mode 100644
index 0000000..541b108
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-14m.d
@@ -0,0 +1,20 @@
+#source: start.s
+#source: bpo-7.s
+#source: areg-t.s
+#as: -linker-allocated-gregs
+#ld: -m mmo
+#objdump: -st
+
+# A BPO against an external symbol.
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+ g \.text Main
+0+ g \.text _start
+0+8 g \.text areg
+
+Contents of section \.text:
+ 0000 e3fd0001 234dfe00 fd040810 .*
+Contents of section \.MMIX\.reg_contents:
+ 07f0 00000000 00000003 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-15.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-15.d
new file mode 100644
index 0000000..6845a87
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-15.d
@@ -0,0 +1,7 @@
+#source: start.s
+#source: bpo-7.s
+#as: -linker-allocated-gregs
+#ld: -m elf64mmix
+#error: ^[^c][^h][^i][^l][^d].* undefined reference to `areg'$
+
+# A BPO against an undefined symbol.
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-15m.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-15m.d
new file mode 100644
index 0000000..eacedf5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-15m.d
@@ -0,0 +1,7 @@
+#source: start.s
+#source: bpo-7.s
+#as: -linker-allocated-gregs
+#ld: -m mmo
+#error: ^[^c][^h][^i][^l][^d].* undefined reference to `areg'$
+
+# A BPO against an undefined symbol.
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-16.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-16.d
new file mode 100644
index 0000000..d7e372c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-16.d
@@ -0,0 +1,23 @@
+#source: start.s
+#source: bpo-7.s
+#source: bpo-7.s
+#source: areg-t.s
+#as: -linker-allocated-gregs
+#ld: -m elf64mmix
+#objdump: -st
+
+# Two BPO:s against the same value get merged.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+ l d \.text 0+ (|\.text)
+0+7f0 l d \.MMIX\.reg_contents 0+ (|\.MMIX\.reg_contents)
+0+ g \.text 0+ _start
+0+c g \.text 0+ areg
+#...
+
+Contents of section \.text:
+ 0000 e3fd0001 234dfe00 234dfe00 fd040810 .*
+Contents of section \.MMIX\.reg_contents:
+ 07f0 00000000 00000007 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-16m.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-16m.d
new file mode 100644
index 0000000..f1fe336
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-16m.d
@@ -0,0 +1,21 @@
+#source: start.s
+#source: bpo-7.s
+#source: bpo-7.s
+#source: areg-t.s
+#as: -linker-allocated-gregs
+#ld: -m mmo
+#objdump: -st
+
+# Two BPO:s against the same value get merged.
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+ g \.text Main
+0+ g \.text _start
+0+c g \.text areg
+
+Contents of section \.text:
+ 0000 e3fd0001 234dfe00 234dfe00 fd040810 .*
+Contents of section \.MMIX\.reg_contents:
+ 07f0 00000000 00000007 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-17.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-17.d
new file mode 100644
index 0000000..f70b852
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-17.d
@@ -0,0 +1,23 @@
+#source: start.s
+#source: bpo-8.s
+#source: areg-t.s
+#as: -linker-allocated-gregs
+#ld: -m elf64mmix
+#objdump: -st
+
+# A BPO and another reloc in the same section.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+ l d \.text 0+ (|\.text)
+0+7f0 l d \.MMIX\.reg_contents 0+ (|\.MMIX\.reg_contents)
+0+ g \.text 0+ _start
+0+10 g \.text 0+ areg
+#...
+
+Contents of section \.text:
+ 0000 e3fd0001 2336fe00 00000000 0000000c .*
+ 0010 fd040810 .*
+Contents of section \.MMIX\.reg_contents:
+ 07f0 00000000 00000008 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-17m.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-17m.d
new file mode 100644
index 0000000..6458ebe
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-17m.d
@@ -0,0 +1,22 @@
+#source: start.s
+#source: bpo-8.s
+#source: areg-t.s
+#as: -linker-allocated-gregs
+#ld: -m mmo
+#objdump: -st
+
+# A BPO and another reloc in the same section.
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+ g \.text Main
+0+ g \.text _start
+0+10 g \.text areg
+
+
+Contents of section \.text:
+ 0000 e3fd0001 2336fe00 00000000 0000000c .*
+ 0010 fd040810 .*
+Contents of section \.MMIX\.reg_contents:
+ 07f0 00000000 00000008 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-18.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-18.d
new file mode 100644
index 0000000..3d1d2f1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-18.d
@@ -0,0 +1,29 @@
+#source: start.s
+#source: bpo-1.s
+#source: bpo-2.s
+#source: bpo-5.s
+#source: bpo-6.s
+#as: -linker-allocated-gregs
+#ld: -m elf64mmix -T$srcdir/$subdir/bpo64addr.ld
+#objdump: -st
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+100 l d \.text 0+ (|\.text)
+4000000000001060 l d \.text\.away 0+ (|\.text\.away)
+0+7e0 l d \.MMIX\.reg_contents 0+ (|\.MMIX\.reg_contents)
+4000000000001064 l \.text\.away 0+ x
+0+100 g \.text 0+ x
+4000000000001060 g \.text\.away 0+ Main
+0+104 g \.text 0+ x2
+4000000000001060 g \.text\.away 0+ _start
+4000000000001068 g \.text\.away 0+ y
+
+Contents of section \.text:
+ 0100 232dfc00 232dfd00 .*
+Contents of section \.text\.away:
+ 4000000000001060 e3fd0001 232afe1e 2321fe00 .*
+Contents of section \.MMIX\.reg_contents:
+ 07e0 00000000 00001168 00000000 0000a514 .*
+ 07f0 40000000 00001070 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-18m.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-18m.d
new file mode 100644
index 0000000..b21b6cf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-18m.d
@@ -0,0 +1,25 @@
+#source: start.s
+#source: bpo-1.s
+#source: bpo-2.s
+#source: bpo-5.s
+#source: bpo-6.s
+#as: -linker-allocated-gregs
+#ld: -m mmo -T$srcdir/$subdir/bpo64addr.ld
+#objdump: -st
+
+.*: file format mmo
+
+SYMBOL TABLE:
+4000000000001060 g \*ABS\* Main
+0+100 g \.text x
+0+104 g \.text x2
+4000000000001060 g \*ABS\* _start
+4000000000001068 g \*ABS\* y
+
+Contents of section \.text:
+ 0100 232dfc00 232dfd00 .*
+Contents of section \.text\.away:
+ 4000000000001060 e3fd0001 232afe1e 2321fe00 .*
+Contents of section \.MMIX\.reg_contents:
+ 07e0 00000000 00001168 00000000 0000a514 .*
+ 07f0 40000000 00001070 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-19.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-19.d
new file mode 100644
index 0000000..d8ee554
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-19.d
@@ -0,0 +1,33 @@
+#source: start.s
+#source: bpo-9.s
+#as: -linker-allocated-gregs
+#ld: -m elf64mmix
+#objdump: -st
+
+# 223 (max) linker-allocated GREGs, four relocs merged for each register
+# allocated.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+ l d \.text 0+ (|\.text)
+0+100 l d \.MMIX\.reg_contents 0+ (|\.MMIX\.reg_contents)
+#...
+0+ g \.text 0+ _start
+#...
+
+Contents of section \.text:
+ 0000 e3fd0001 230b2000 230b2040 230b2080 .*
+ 0010 230b20c0 230b2100 230b2140 230b2180 .*
+ 0020 230b21c0 230b2200 230b2240 230b2280 .*
+#...
+ 0dd0 230bfcc0 230bfd00 230bfd40 230bfd80 .*
+ 0de0 230bfdc0 230bfe00 230bfe40 230bfe80 .*
+ 0df0 230bfec0 .*
+Contents of section \.MMIX\.reg_contents:
+ 0100 00000000 00000000 00000000 00000100 .*
+ 0110 00000000 00000200 00000000 00000300 .*
+#...
+ 07d0 00000000 0000da00 00000000 0000db00 .*
+ 07e0 00000000 0000dc00 00000000 0000dd00 .*
+ 07f0 00000000 0000de00 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-19m.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-19m.d
new file mode 100644
index 0000000..7f740e1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-19m.d
@@ -0,0 +1,30 @@
+#source: start.s
+#source: bpo-9.s
+#as: -linker-allocated-gregs
+#ld: -m mmo
+#objdump: -st
+
+# 223 (max) linker-allocated GREGs, four relocs merged for each register
+# allocated.
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+ g \.text Main
+0+ g \.text _start
+
+Contents of section \.text:
+ 0000 e3fd0001 230b2000 230b2040 230b2080 .*
+ 0010 230b20c0 230b2100 230b2140 230b2180 .*
+ 0020 230b21c0 230b2200 230b2240 230b2280 .*
+#...
+ 0dd0 230bfcc0 230bfd00 230bfd40 230bfd80 .*
+ 0de0 230bfdc0 230bfe00 230bfe40 230bfe80 .*
+ 0df0 230bfec0 .*
+Contents of section \.MMIX\.reg_contents:
+ 0100 00000000 00000000 00000000 00000100 .*
+ 0110 00000000 00000200 00000000 00000300 .*
+#...
+ 07d0 00000000 0000da00 00000000 0000db00 .*
+ 07e0 00000000 0000dc00 00000000 0000dd00 .*
+ 07f0 00000000 0000de00 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-1m.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-1m.d
new file mode 100644
index 0000000..b2d0384
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-1m.d
@@ -0,0 +1,18 @@
+#source: start.s
+#source: bpo-1.s
+#as: -linker-allocated-gregs
+#ld: -m mmo
+#objdump: -st
+
+# Just a simple linker-allocated GREG with no explicit GREGs.
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+ g \.text Main
+0+ g \.text _start
+
+Contents of section \.text:
+ 0000 e3fd0001 232afe00 .*
+Contents of section \.MMIX\.reg_contents:
+ 07f0 00000000 0000002e .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-2.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-2.d
new file mode 100644
index 0000000..7206cab
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-2.d
@@ -0,0 +1,23 @@
+#source: start.s
+#source: greg-1.s
+#source: bpo-1.s
+#as: -linker-allocated-gregs
+#ld: -m elf64mmix
+#objdump: -st
+
+# Just a simple linker-allocated GREG plus one explicit GREG.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+ l d \.text 0+ (|\.text)
+0+7e8 l d \.MMIX\.reg_contents 0+ (|\.MMIX\.reg_contents)
+0+4 l \.text 0+ x
+0+ g \.text 0+ _start
+0+fe g \*REG\* 0+ areg
+#...
+
+Contents of section \.text:
+ 0000 e3fd0001 232afd00 .*
+Contents of section \.MMIX\.reg_contents:
+ 07e8 00000000 0000002e 00007048 860f3a38 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-2.s b/binutils-2.21/ld/testsuite/ld-mmix/bpo-2.s
new file mode 100644
index 0000000..02c7901
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-2.s
@@ -0,0 +1,2 @@
+ .global y
+y LDA $33,y+8
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-20.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-20.d
new file mode 100644
index 0000000..f05edfb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-20.d
@@ -0,0 +1,8 @@
+#source: start.s
+#source: bpo-10.s
+#as: -linker-allocated-gregs
+#ld: -m elf64mmix
+#error: Too many global registers
+
+# Check that many too many gregs are recognized (and not signed/unsigned
+# bugs with checks for < 32 appear).
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-20m.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-20m.d
new file mode 100644
index 0000000..91126b4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-20m.d
@@ -0,0 +1,8 @@
+#source: start.s
+#source: bpo-10.s
+#as: -linker-allocated-gregs
+#ld: -m mmo
+#error: Too many global registers
+
+# Check that many too many gregs are recognized (and not signed/unsigned
+# bugs with checks for < 32 appear).
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-21.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-21.d
new file mode 100644
index 0000000..f208cb6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-21.d
@@ -0,0 +1,10 @@
+#source: start.s
+#source: bpo-11.s
+#source: bpo-7.s
+#as: -linker-allocated-gregs
+#ld: -m elf64mmix
+#error: ^[^c][^h][^i][^l][^d].* undefined reference to `areg'$
+
+# A BPO reloc against an undefined symbol, with a full set of normal
+# BPO:s.
+
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-21m.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-21m.d
new file mode 100644
index 0000000..b437dd3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-21m.d
@@ -0,0 +1,9 @@
+#source: start.s
+#source: bpo-11.s
+#source: bpo-7.s
+#as: -linker-allocated-gregs
+#ld: -m mmo
+#error: ^[^c][^h][^i][^l][^d].* undefined reference to `areg'$
+
+# A BPO reloc against an undefined symbol, with a full set of normal
+# BPO:s.
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-22.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-22.d
new file mode 100644
index 0000000..c6a1314
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-22.d
@@ -0,0 +1,22 @@
+#source: start.s
+#source: bpo-1.s
+#as: -linker-allocated-gregs
+#ld: -m mmo --oformat elf64-mmix
+#objdump: -st
+
+# This weird combination of format and emulation options caused hiccups in
+# the reloc accounting machinery.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0000000000000000 l d \.text 0+ (|\.text)
+0+7f0 l d \.MMIX\.reg_contents 0+ (|\.MMIX\.reg_contents)
+0+4 l \.text 0+ x
+0+ g \.text 0+ Main
+0+ g \.text 0+ _start
+
+Contents of section \.text:
+ 0000 e3fd0001 232afe00 .*
+Contents of section \.MMIX\.reg_contents:
+ 07f0 00000000 0000002e .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-2m.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-2m.d
new file mode 100644
index 0000000..7ddcfd2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-2m.d
@@ -0,0 +1,21 @@
+#source: start.s
+#source: greg-1.s
+#source: bpo-1.s
+#as: -linker-allocated-gregs
+#ld: -m mmo
+#objdump: -st
+
+# Just a simple linker-allocated GREG plus one explicit GREG.
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+ g \.text Main
+0+ g \.text _start
+0+fe g \*REG\* areg
+
+Contents of section \.text:
+ 0000 e3fd0001 232afd00 .*
+Contents of section \.MMIX\.reg_contents:
+ 07e8 00000000 0000002e 00007048 860f3a38 .*
+
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-3.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-3.d
new file mode 100644
index 0000000..e1435ef
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-3.d
@@ -0,0 +1,24 @@
+#source: start.s
+#source: bpo-1.s
+#source: bpo-2.s
+#as: -linker-allocated-gregs
+#ld: -m elf64mmix
+#objdump: -st
+
+# Just two BPO relocs merged as one linker-allocated GREG.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+ l d \.text 0+ (|\.text)
+0+7f0 l d \.MMIX\.reg_contents 0+ (|\.MMIX\.reg_contents)
+0+4 l \.text 0+ x
+0+ g \.text 0+ _start
+#...
+0+8 g \.text 0+ y
+#...
+
+Contents of section \.text:
+ 0000 e3fd0001 232afe1e 2321fe00 .*
+Contents of section \.MMIX\.reg_contents:
+ 07f0 00000000 00000010 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-3.s b/binutils-2.21/ld/testsuite/ld-mmix/bpo-3.s
new file mode 100644
index 0000000..b975a82
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-3.s
@@ -0,0 +1 @@
+ LDOU $121,_start+42+4+4+257
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-3m.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-3m.d
new file mode 100644
index 0000000..c0f4707
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-3m.d
@@ -0,0 +1,20 @@
+#source: start.s
+#source: bpo-1.s
+#source: bpo-2.s
+#as: -linker-allocated-gregs
+#ld: -m mmo
+#objdump: -st
+
+# Just two BPO relocs merged as one linker-allocated GREG.
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+ g \.text Main
+0+ g \.text _start
+0+8 g \.text y
+
+Contents of section \.text:
+ 0000 e3fd0001 232afe1e 2321fe00 .*
+Contents of section \.MMIX\.reg_contents:
+ 07f0 00000000 00000010 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-4.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-4.d
new file mode 100644
index 0000000..372e7e6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-4.d
@@ -0,0 +1,25 @@
+#source: start.s
+#source: greg-1.s
+#source: bpo-3.s
+#source: bpo-1.s
+#as: -linker-allocated-gregs
+#ld: -m elf64mmix
+#objdump: -st
+
+# Three GREGs: one explicit, two linker-allocated.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+ l d \.text 0+ (|\.text)
+0+7e0 l d \.MMIX\.reg_contents 0+ (|\.MMIX\.reg_contents)
+0+8 l \.text 0+ x
+0+ g \.text 0+ _start
+0+fe g \*REG\* 0+ areg
+#...
+
+Contents of section \.text:
+ 0000 e3fd0001 8f79fd00 232afc00 .*
+Contents of section \.MMIX\.reg_contents:
+ 07e0 00000000 00000032 00000000 00000133 .*
+ 07f0 00007048 860f3a38 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-4.s b/binutils-2.21/ld/testsuite/ld-mmix/bpo-4.s
new file mode 100644
index 0000000..c5c21cf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-4.s
@@ -0,0 +1,5 @@
+ .set i,0
+ .rept 223
+ LDA $11,_start+i*256
+ .set i,i+1
+ .endr
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-4m.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-4m.d
new file mode 100644
index 0000000..2f3b59c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-4m.d
@@ -0,0 +1,22 @@
+#source: start.s
+#source: greg-1.s
+#source: bpo-3.s
+#source: bpo-1.s
+#as: -linker-allocated-gregs
+#ld: -m mmo
+#objdump: -st
+
+# Three GREGs: one explicit, two linker-allocated.
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+ g \.text Main
+0+ g \.text _start
+0+fe g \*REG\* areg
+
+Contents of section \.text:
+ 0000 e3fd0001 8f79fd00 232afc00 .*
+Contents of section \.MMIX\.reg_contents:
+ 07e0 00000000 00000032 00000000 00000133 .*
+ 07f0 00007048 860f3a38 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-5.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-5.d
new file mode 100644
index 0000000..a1a192d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-5.d
@@ -0,0 +1,25 @@
+#source: start.s
+#source: bpo-1.s
+#source: bpo-3.s
+#source: bpo-2.s
+#as: -linker-allocated-gregs
+#ld: -m elf64mmix
+#objdump: -st
+
+# Three linker-allocated GREGs: one eliminated.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+ l d \.text 0+ (|\.text)
+0+7e8 l d \.MMIX\.reg_contents 0+ (|\.MMIX\.reg_contents)
+0+4 l \.text 0+ x
+0+ g \.text 0+ _start
+#...
+0+c g \.text 0+ y
+#...
+
+Contents of section \.text:
+ 0000 e3fd0001 232afd1a 8f79fe00 2321fd00 .*
+Contents of section \.MMIX\.reg_contents:
+ 07e8 00000000 00000014 00000000 00000133 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-5.s b/binutils-2.21/ld/testsuite/ld-mmix/bpo-5.s
new file mode 100644
index 0000000..c0fcfac
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-5.s
@@ -0,0 +1,4 @@
+# A section with a symbol and a BPO allocation.
+ .section .text.x,"ax",@progbits
+ .global x
+x LDA $45,x+4200
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-5m.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-5m.d
new file mode 100644
index 0000000..078d34e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-5m.d
@@ -0,0 +1,21 @@
+#source: start.s
+#source: bpo-1.s
+#source: bpo-3.s
+#source: bpo-2.s
+#as: -linker-allocated-gregs
+#ld: -m mmo
+#objdump: -st
+
+# Three linker-allocated GREGs: one eliminated.
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+ g \.text Main
+0+ g \.text _start
+0+c g \.text y
+
+Contents of section \.text:
+ 0000 e3fd0001 232afd1a 8f79fe00 2321fd00 .*
+Contents of section \.MMIX\.reg_contents:
+ 07e8 00000000 00000014 00000000 00000133 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-6.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-6.d
new file mode 100644
index 0000000..a5978c9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-6.d
@@ -0,0 +1,30 @@
+#source: start.s
+#source: bpo-4.s
+#as: -linker-allocated-gregs
+#ld: -m elf64mmix
+#objdump: -st
+
+# 223 (max) linker-allocated GREGs.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+ l d \.text 0+ (|\.text)
+0+100 l d \.MMIX\.reg_contents 0+ (|\.MMIX\.reg_contents)
+#...
+0+ g \.text 0+ _start
+#...
+
+Contents of section \.text:
+ 0000 e3fd0001 230b2000 230b2100 230b2200 .*
+ 0010 230b2300 230b2400 230b2500 230b2600 .*
+#...
+ 0360 230bf700 230bf800 230bf900 230bfa00 .*
+ 0370 230bfb00 230bfc00 230bfd00 230bfe00 .*
+Contents of section \.MMIX\.reg_contents:
+ 0100 00000000 00000000 00000000 00000100 .*
+ 0110 00000000 00000200 00000000 00000300 .*
+#...
+ 07d0 00000000 0000da00 00000000 0000db00 .*
+ 07e0 00000000 0000dc00 00000000 0000dd00 .*
+ 07f0 00000000 0000de00 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-6.s b/binutils-2.21/ld/testsuite/ld-mmix/bpo-6.s
new file mode 100644
index 0000000..a10e9a8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-6.s
@@ -0,0 +1,4 @@
+# A section with a symbol and a BPO allocation.
+ .section .text.x2,"ax",@progbits
+ .global x2
+x2 LDA $45,x2+42000
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-6m.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-6m.d
new file mode 100644
index 0000000..9d8e304
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-6m.d
@@ -0,0 +1,27 @@
+#source: start.s
+#source: bpo-4.s
+#as: -linker-allocated-gregs
+#ld: -m mmo
+#objdump: -st
+
+# 223 (max) linker-allocated GREGs.
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+ g \.text Main
+0+ g \.text _start
+
+Contents of section \.text:
+ 0000 e3fd0001 230b2000 230b2100 230b2200 .*
+ 0010 230b2300 230b2400 230b2500 230b2600 .*
+#...
+ 0360 230bf700 230bf800 230bf900 230bfa00 .*
+ 0370 230bfb00 230bfc00 230bfd00 230bfe00 .*
+Contents of section \.MMIX\.reg_contents:
+ 0100 00000000 00000000 00000000 00000100 .*
+ 0110 00000000 00000200 00000000 00000300 .*
+#...
+ 07d0 00000000 0000da00 00000000 0000db00 .*
+ 07e0 00000000 0000dc00 00000000 0000dd00 .*
+ 07f0 00000000 0000de00 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-7.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-7.d
new file mode 100644
index 0000000..693a502
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-7.d
@@ -0,0 +1,6 @@
+#source: start.s
+#source: bpo-4.s
+#source: greg-1.s
+#as: -linker-allocated-gregs
+#ld: -m elf64mmix
+#error: Too many global registers: 224
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-7.s b/binutils-2.21/ld/testsuite/ld-mmix/bpo-7.s
new file mode 100644
index 0000000..b920764
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-7.s
@@ -0,0 +1,2 @@
+# If the symbol is a register then this is an error.
+ LDA $77,areg-5
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-7m.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-7m.d
new file mode 100644
index 0000000..21c4659
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-7m.d
@@ -0,0 +1,6 @@
+#source: start.s
+#source: bpo-4.s
+#source: greg-1.s
+#as: -linker-allocated-gregs
+#ld: -m mmo
+#error: Too many global registers: 224
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-8.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-8.d
new file mode 100644
index 0000000..438b072
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-8.d
@@ -0,0 +1,7 @@
+#source: start.s
+#source: bpo-4.s
+#source: pad2p18m32.s
+#source: bpo-1.s
+#as: -linker-allocated-gregs
+#ld: -m elf64mmix
+#error: Too many global registers: 224
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-8.s b/binutils-2.21/ld/testsuite/ld-mmix/bpo-8.s
new file mode 100644
index 0000000..ebe410d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-8.s
@@ -0,0 +1,3 @@
+# A BPO and an ordinary reloc in the same section.
+ LDA $54,areg-8
+ .quad areg-4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-8m.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-8m.d
new file mode 100644
index 0000000..9187672
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-8m.d
@@ -0,0 +1,7 @@
+#source: start.s
+#source: bpo-4.s
+#source: pad2p18m32.s
+#source: bpo-1.s
+#as: -linker-allocated-gregs
+#ld: -m mmo
+#error: Too many global registers: 224
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-9.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-9.d
new file mode 100644
index 0000000..16d0017
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-9.d
@@ -0,0 +1,26 @@
+#source: start3.s
+#source: bpo-6.s
+#source: bpo-5.s
+#as: -linker-allocated-gregs
+#ld: -m elf64mmix --gc-sections
+#objdump: -st
+
+# Check that GC does not mess up things when no BPO:s are collected.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+ l d \.init 0+ (|\.init)
+0+10 l d \.text 0+ (|\.text)
+0+7e8 l d \.MMIX\.reg_contents 0+ (|\.MMIX\.reg_contents)
+0+ l \.init 0+ _start
+0+14 g \.text 0+ x
+0+10 g \.text 0+ x2
+#...
+
+Contents of section \.init:
+ 0000 00000000 0000003d 00000000 0000003a .*
+Contents of section \.text:
+ 0010 232dfe00 232dfd00 .*
+Contents of section \.MMIX\.reg_contents:
+ 07e8 00000000 0000107c 00000000 0000a420 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-9.s b/binutils-2.21/ld/testsuite/ld-mmix/bpo-9.s
new file mode 100644
index 0000000..a608c68
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-9.s
@@ -0,0 +1,5 @@
+ .set i,0
+ .rept 223*4
+ LDA $11,_start+i*64
+ .set i,i+1
+ .endr
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo-9m.d b/binutils-2.21/ld/testsuite/ld-mmix/bpo-9m.d
new file mode 100644
index 0000000..fa3f97c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo-9m.d
@@ -0,0 +1,22 @@
+#source: start3.s
+#source: bpo-6.s
+#source: bpo-5.s
+#as: -linker-allocated-gregs
+#ld: -m mmo --gc-sections
+#objdump: -st
+
+# Check that GC does not mess up things when no BPO:s are collected.
+# Note that mmo doesn't support GC at the moment; it's a nop.
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+ g \.text Main
+0+4 g \.text x
+0+ g \.text x2
+
+Contents of section \.text:
+ 0000 232dfe00 232dfd00 00000000 0000002d .*
+ 0010 00000000 0000002a .*
+Contents of section \.MMIX\.reg_contents:
+ 07e8 00000000 0000106c 00000000 0000a410 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bpo64addr.ld b/binutils-2.21/ld/testsuite/ld-mmix/bpo64addr.ld
new file mode 100644
index 0000000..0324aa5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bpo64addr.ld
@@ -0,0 +1,13 @@
+OUTPUT_ARCH(mmix)
+ENTRY(Main)
+SECTIONS
+{
+ .text 0x100 :
+ { *(.text.x); *(.text.x2); }
+
+ .text.away 0x4000000000001060 :
+ { *(.text); Main = _start; }
+
+ .MMIX.reg_contents :
+ { *(.MMIX.reg_contents.linker_allocated); *(.MMIX.reg_contents); }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bspec1.d b/binutils-2.21/ld/testsuite/ld-mmix/bspec1.d
new file mode 100644
index 0000000..16db5f4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bspec1.d
@@ -0,0 +1,41 @@
+#source: bspec1.s
+#source: start.s
+#ld: -m elf64mmix
+#readelf: -Ssr -x1 -x2
+
+There are 6 section headers, starting at offset 0xb8:
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +Offset
+ +Size +EntSize +Flags +Link +Info +Align
+ +\[ 0\] +NULL +0+ +0+
+ +0+ +0+ +0 +0 +0
+ +\[ 1\] \.text +PROGBITS +0+ +0+78
+ +0+4 +0+ +AX +0 +0 +4
+ +\[ 2\] \.MMIX\.spec_data\.2 PROGBITS +0+ +0+7c
+ +0+4 +0+ +0 +0 +4
+ +\[ 3\] \.shstrtab +STRTAB +0+ +0+80
+ +0+33 +0+ +0 +0 +1
+ +\[ 4\] \.symtab +SYMTAB +0+ +0+238
+ +0+d8 +0+18 +5 +3 +8
+ +\[ 5\] \.strtab +STRTAB +0+ +0+310
+ +0+2d +0+ +0 +0 +1
+Key to Flags:
+#...
+
+There are no relocations in this file\.
+
+Symbol table '\.symtab' contains 9 entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +0: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND
+ +1: 0+ +0 +SECTION +LOCAL +DEFAULT +1
+ +2: 0+ +0 +SECTION +LOCAL +DEFAULT +2
+ +3: 0+ +0 +FUNC +GLOBAL +DEFAULT +1 Main
+ +4: 0+ +0 +NOTYPE +GLOBAL +DEFAULT +1 _start
+#...
+
+Hex dump of section '\.text':
+ 0x0+ e3fd0001 .*
+
+Hex dump of section '\.MMIX\.spec_data\.2':
+ 0x0+ 0000002a .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bspec1.s b/binutils-2.21/ld/testsuite/ld-mmix/bspec1.s
new file mode 100644
index 0000000..0c1707f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bspec1.s
@@ -0,0 +1,3 @@
+ BSPEC 2
+ TETRA :Main+42
+ ESPEC
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bspec1m.d b/binutils-2.21/ld/testsuite/ld-mmix/bspec1m.d
new file mode 100644
index 0000000..c3fedf8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bspec1m.d
@@ -0,0 +1,15 @@
+#source: bspec1.s
+#source: start.s
+#ld: -m mmo
+#objdump: -str
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+ g \.text Main
+0+ g \.text _start
+
+Contents of section \.text:
+ 0+ e3fd0001 .*
+Contents of section \.MMIX\.spec_data\.2:
+ 0000 0000002a .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bspec2.d b/binutils-2.21/ld/testsuite/ld-mmix/bspec2.d
new file mode 100644
index 0000000..d2fd6dd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bspec2.d
@@ -0,0 +1,51 @@
+#source: bspec1.s
+#source: bspec2.s
+#source: bspec1.s
+#source: start.s
+#source: ext1.s
+#ld: -m elf64mmix
+#readelf: -Ssr -x1 -x2 -x3
+
+There are 7 section headers, starting at offset 0xd0:
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +Offset
+ +Size +EntSize +Flags +Link +Info +Align
+ +\[ 0\] +NULL +0+ +0+
+ +0+ +0+ +0 +0 +0
+ +\[ 1\] \.text +PROGBITS +0+ +0+78
+ +0+4 +0+ +AX +0 +0 +4
+ +\[ 2\] \.MMIX\.spec_data\.2 PROGBITS +0+ +0+7c
+ +0+8 +0+ +0 +0 +4
+ +\[ 3\] \.MMIX\.spec_data\.3 PROGBITS +0+ +0+84
+ +0+4 +0+ +0 +0 +4
+ +\[ 4\] \.shstrtab +STRTAB +0+ +0+88
+ +0+45 +0+ +0 +0 +1
+ +\[ 5\] \.symtab +SYMTAB +0+ +0+290
+ +0+108 +0+18 +6 +4 +8
+ +\[ 6\] \.strtab +STRTAB +0+ +0+398
+ +0+32 +0+ +0 +0 +1
+Key to Flags:
+#...
+
+There are no relocations in this file\.
+
+Symbol table '\.symtab' contains 11 entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +0: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND
+ +1: 0+ +0 +SECTION +LOCAL +DEFAULT +1
+ +2: 0+ +0 +SECTION +LOCAL +DEFAULT +2
+ +3: 0+ +0 +SECTION +LOCAL +DEFAULT +3
+ +4: 0+ +0 +FUNC +GLOBAL +DEFAULT +1 Main
+ +5: 0+fc +0 +NOTYPE +GLOBAL +DEFAULT +ABS ext1
+ +6: 0+ +0 +NOTYPE +GLOBAL +DEFAULT +1 _start
+#...
+
+Hex dump of section '\.text':
+ 0x0+ e3fd0001 .*
+
+Hex dump of section '\.MMIX\.spec_data\.2':
+ 0x0+ 0000002a 0000002a .*
+
+Hex dump of section '\.MMIX\.spec_data\.3':
+ 0x0+ 000000fc .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bspec2.s b/binutils-2.21/ld/testsuite/ld-mmix/bspec2.s
new file mode 100644
index 0000000..f939d77
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bspec2.s
@@ -0,0 +1,3 @@
+ BSPEC 3
+ TETRA ext1
+ ESPEC
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bspec2m.d b/binutils-2.21/ld/testsuite/ld-mmix/bspec2m.d
new file mode 100644
index 0000000..11bd48e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bspec2m.d
@@ -0,0 +1,21 @@
+#source: bspec1.s
+#source: bspec2.s
+#source: bspec1.s
+#source: start.s
+#source: ext1.s
+#ld: -m mmo
+#objdump: -str
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+ g \.text Main
+0+fc g \*ABS\* ext1
+0+ g \.text _start
+
+Contents of section \.text:
+ 0+ e3fd0001 .*
+Contents of section \.MMIX\.spec_data\.2:
+ 0000 0000002a 0000002a .*
+Contents of section \.MMIX\.spec_data\.3:
+ 0000 000000fc .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bspec801.s b/binutils-2.21/ld/testsuite/ld-mmix/bspec801.s
new file mode 100644
index 0000000..9c62909
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bspec801.s
@@ -0,0 +1,3 @@
+ BSPEC 80
+ TETRA 0x98000001
+ ESPEC
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bspec802.s b/binutils-2.21/ld/testsuite/ld-mmix/bspec802.s
new file mode 100644
index 0000000..13cbec4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bspec802.s
@@ -0,0 +1,7 @@
+ BSPEC 80
+ TETRA 4 % Decent section length name (in 32-bit words). However...
+ ESPEC % Everything ends here. The next thing is a LOP_LOC for .data, or
+ % an ending LOP-something, hence a non-LOP_QUOTE in the name.
+
+ .data
+ TETRA 0x112233
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bspec803.s b/binutils-2.21/ld/testsuite/ld-mmix/bspec803.s
new file mode 100644
index 0000000..64b5e3b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bspec803.s
@@ -0,0 +1,9 @@
+ BSPEC 80
+ TETRA 2 % Decent section length name (in 32-bit words). However...
+ BYTE "aaaa"
+ BYTE 0x98,"aaa" # A LOP_QUOTEd part here. And also...
+ ESPEC % Everything ends here. The next thing is a LOP_LOC for .data, or
+ % an ending LOP-something, hence a non-LOP_QUOTE in the section flags.
+
+ .data
+ TETRA 0x112233
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bspec804.s b/binutils-2.21/ld/testsuite/ld-mmix/bspec804.s
new file mode 100644
index 0000000..2c64c0a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bspec804.s
@@ -0,0 +1,9 @@
+ BSPEC 80
+ TETRA 2 % Decent section length name (in 32-bit words).
+ BYTE "aaaaaaaa"
+ TETRA 0x11 % Flags. However...
+ ESPEC % Everything ends here. The next thing is a LOP_LOC for .data, or
+ % an ending LOP-something, hence a non-LOP_QUOTE in the section
+ % length, high part.
+ .data
+ TETRA 0x112233
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bspec805.s b/binutils-2.21/ld/testsuite/ld-mmix/bspec805.s
new file mode 100644
index 0000000..a5c09e3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bspec805.s
@@ -0,0 +1,10 @@
+ BSPEC 80
+ TETRA 2 % Decent section length name (in 32-bit words).
+ BYTE "aaaaaaaa"
+ TETRA 0x11 % Flags.
+ TETRA 0 % Decent high-part of section length. However...
+ ESPEC % Everything ends here. The next thing is a LOP_LOC for .data, or
+ % an ending LOP-something, hence a non-LOP_QUOTE in the section
+ % length, high part.
+ .data
+ TETRA 0x112233
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bspec806.s b/binutils-2.21/ld/testsuite/ld-mmix/bspec806.s
new file mode 100644
index 0000000..8f6c75f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bspec806.s
@@ -0,0 +1,10 @@
+ BSPEC 80
+ TETRA 2 % Decent section length name (in 32-bit words).
+ BYTE "aaaaaaaa"
+ TETRA 0x11 % Flags.
+ OCTA 12 % Decent section length. However...
+ ESPEC % Everything ends here. The next thing is a LOP_LOC for .data, or
+ % an ending LOP-something, hence a non-LOP_QUOTE in the section
+ % length, high part.
+ .data
+ TETRA 0x112233
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bspec807.s b/binutils-2.21/ld/testsuite/ld-mmix/bspec807.s
new file mode 100644
index 0000000..3c16c12
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bspec807.s
@@ -0,0 +1,9 @@
+ BSPEC 80
+ TETRA 2 % Decent section length name (in 32-bit words).
+ BYTE "aaaaaaaa"
+ TETRA 0x11 % Flags.
+ TETRA 0,12 % Decent section length. However...
+ TETRA 0 % Things end stops after the high part of the VMA.
+ ESPEC
+ .data
+ TETRA 0x112233
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bspec808.s b/binutils-2.21/ld/testsuite/ld-mmix/bspec808.s
new file mode 100644
index 0000000..b8fc495
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bspec808.s
@@ -0,0 +1,9 @@
+ BSPEC 80
+ TETRA 2 % Decent section length name (in 32-bit words).
+ BYTE "aaaaaaaa"
+ TETRA 0x11 % Flags.
+ TETRA 0xff00,0 % Indecent section length
+ TETRA 0xff,0 % Decent vma.
+ ESPEC
+ .data
+ TETRA 0x112233
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bza-1b.d b/binutils-2.21/ld/testsuite/ld-mmix/bza-1b.d
new file mode 100644
index 0000000..dcd0313
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bza-1b.d
@@ -0,0 +1,26 @@
+#source: start.s
+#source: a.s
+#source: bza.s
+#as: -x
+#ld: -m elf64mmix
+#objdump: -dr
+
+.*: file format elf64-mmix
+
+Disassembly of section \.text:
+
+0+ <_start>:
+ 0+: e3fd0001 setl \$253,0x1
+
+0+4 <a>:
+ 4: e3fd0004 setl \$253,0x4
+
+0+8 <bza>:
+ 8: e3fd0002 setl \$253,0x2
+ c: 5aea0006 pbnz \$234,24 <bza\+0x1c>
+ 10: e3ff0004 setl \$255,0x4
+ 14: e6ff0000 incml \$255,0x0
+ 18: e5ff0000 incmh \$255,0x0
+ 1c: e4ff0000 inch \$255,0x0
+ 20: 9fffff00 go \$255,\$255,0
+ 24: e3fd0003 setl \$253,0x3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bza-1f.d b/binutils-2.21/ld/testsuite/ld-mmix/bza-1f.d
new file mode 100644
index 0000000..bc4006f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bza-1f.d
@@ -0,0 +1,26 @@
+#source: start.s
+#source: bza.s
+#source: a.s
+#as: -x
+#ld: -m elf64mmix
+#objdump: -dr
+
+.*: file format elf64-mmix
+
+Disassembly of section \.text:
+
+0+ <_start>:
+ 0+: e3fd0001 setl \$253,0x1
+
+0+4 <bza>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: 5aea0006 pbnz \$234,20 <bza\+0x1c>
+ c: e3ff0024 setl \$255,0x24
+ 10: e6ff0000 incml \$255,0x0
+ 14: e5ff0000 incmh \$255,0x0
+ 18: e4ff0000 inch \$255,0x0
+ 1c: 9fffff00 go \$255,\$255,0
+ 20: e3fd0003 setl \$253,0x3
+
+0+24 <a>:
+ 24: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bza-2b.d b/binutils-2.21/ld/testsuite/ld-mmix/bza-2b.d
new file mode 100644
index 0000000..a5d9b28
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bza-2b.d
@@ -0,0 +1,21 @@
+#source: start.s
+#source: a.s
+#source: bza.s
+#as: -no-expand
+#ld: -m elf64mmix
+#objdump: -dr
+
+.*: file format elf64-mmix
+
+Disassembly of section \.text:
+
+0+ <_start>:
+ 0+: e3fd0001 setl \$253,0x1
+
+0+4 <a>:
+ 4: e3fd0004 setl \$253,0x4
+
+0+8 <bza>:
+ 8: e3fd0002 setl \$253,0x2
+ c: 43eafffe bz \$234,4 <a>
+ 10: e3fd0003 setl \$253,0x3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bza-2f.d b/binutils-2.21/ld/testsuite/ld-mmix/bza-2f.d
new file mode 100644
index 0000000..21a6ca9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bza-2f.d
@@ -0,0 +1,21 @@
+#source: start.s
+#source: bza.s
+#source: a.s
+#as: -no-expand
+#ld: -m elf64mmix
+#objdump: -dr
+
+.*: file format elf64-mmix
+
+Disassembly of section \.text:
+
+0+ <_start>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <bza>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: 42ea0002 bz \$234,10 <a>
+ c: e3fd0003 setl \$253,0x3
+
+0+10 <a>:
+ 10: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bza-7b.d b/binutils-2.21/ld/testsuite/ld-mmix/bza-7b.d
new file mode 100644
index 0000000..ab98ad3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bza-7b.d
@@ -0,0 +1,26 @@
+#source: start.s
+#source: a.s
+#source: bza.s
+#as: -x
+#ld: -m mmo
+#objdump: -dr
+
+.*: file format mmo
+
+Disassembly of section \.text:
+
+0+ <(Main|_start)>:
+ 0+: e3fd0001 setl \$253,0x1
+
+0+4 <a>:
+ 4: e3fd0004 setl \$253,0x4
+
+0+8 <bza>:
+ 8: e3fd0002 setl \$253,0x2
+ c: 5aea0006 pbnz \$234,24 <bza\+0x1c>
+ 10: e3ff0004 setl \$255,0x4
+ 14: e6ff0000 incml \$255,0x0
+ 18: e5ff0000 incmh \$255,0x0
+ 1c: e4ff0000 inch \$255,0x0
+ 20: 9fffff00 go \$255,\$255,0
+ 24: e3fd0003 setl \$253,0x3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bza-7f.d b/binutils-2.21/ld/testsuite/ld-mmix/bza-7f.d
new file mode 100644
index 0000000..be2ea56
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bza-7f.d
@@ -0,0 +1,26 @@
+#source: start.s
+#source: bza.s
+#source: a.s
+#as: -x
+#ld: -m mmo
+#objdump: -dr
+
+.*: file format mmo
+
+Disassembly of section \.text:
+
+0+ <(Main|_start)>:
+ 0+: e3fd0001 setl \$253,0x1
+
+0+4 <bza>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: 5aea0006 pbnz \$234,20 <bza\+0x1c>
+ c: e3ff0024 setl \$255,0x24
+ 10: e6ff0000 incml \$255,0x0
+ 14: e5ff0000 incmh \$255,0x0
+ 18: e4ff0000 inch \$255,0x0
+ 1c: 9fffff00 go \$255,\$255,0
+ 20: e3fd0003 setl \$253,0x3
+
+0+24 <a>:
+ 24: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bza-8b.d b/binutils-2.21/ld/testsuite/ld-mmix/bza-8b.d
new file mode 100644
index 0000000..b0eef74
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bza-8b.d
@@ -0,0 +1,21 @@
+#source: start.s
+#source: a.s
+#source: bza.s
+#as: -no-expand
+#ld: -m mmo
+#objdump: -dr
+
+.*: file format mmo
+
+Disassembly of section \.text:
+
+0+ <(Main|_start)>:
+ 0+: e3fd0001 setl \$253,0x1
+
+0+4 <a>:
+ 4: e3fd0004 setl \$253,0x4
+
+0+8 <bza>:
+ 8: e3fd0002 setl \$253,0x2
+ c: 43eafffe bz \$234,4 <a>
+ 10: e3fd0003 setl \$253,0x3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bza-8f.d b/binutils-2.21/ld/testsuite/ld-mmix/bza-8f.d
new file mode 100644
index 0000000..2d2a521
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bza-8f.d
@@ -0,0 +1,21 @@
+#source: start.s
+#source: bza.s
+#source: a.s
+#as: -no-expand
+#ld: -m mmo
+#objdump: -dr
+
+.*: file format mmo
+
+Disassembly of section \.text:
+
+0+ <(Main|_start)>:
+ 0+: e3fd0001 setl \$253,0x1
+
+0+4 <bza>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: 42ea0002 bz \$234,10 <a>
+ c: e3fd0003 setl \$253,0x3
+
+0+10 <a>:
+ 10: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/bza.s b/binutils-2.21/ld/testsuite/ld-mmix/bza.s
new file mode 100644
index 0000000..4cf848d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/bza.s
@@ -0,0 +1,7 @@
+* Just BEQs to an external symbol, with some padding.
+ .text
+ .global bza
+bza:
+ SET $253,2
+ BZ $234,a
+ SET $253,3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/data1.s b/binutils-2.21/ld/testsuite/ld-mmix/data1.s
new file mode 100644
index 0000000..0f4baf9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/data1.s
@@ -0,0 +1,2 @@
+ LOC #20 << 56
+xx OCTA Main+44
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/dloc1.s b/binutils-2.21/ld/testsuite/ld-mmix/dloc1.s
new file mode 100644
index 0000000..ba095c4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/dloc1.s
@@ -0,0 +1,3 @@
+ LOC #20 << 56 + #200
+dloc1 TETRA 4,5,6
+ .global dloc1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/dloc2.s b/binutils-2.21/ld/testsuite/ld-mmix/dloc2.s
new file mode 100644
index 0000000..704da08
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/dloc2.s
@@ -0,0 +1,3 @@
+ LOC #20 << 56 + #200
+dloc2 TETRA 7,8,9
+ .global dloc2
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/ext1-254.s b/binutils-2.21/ld/testsuite/ld-mmix/ext1-254.s
new file mode 100644
index 0000000..baaf22f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/ext1-254.s
@@ -0,0 +1,2 @@
+ .global ext1
+ext1 IS 254
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/ext1.s b/binutils-2.21/ld/testsuite/ld-mmix/ext1.s
new file mode 100644
index 0000000..d69420e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/ext1.s
@@ -0,0 +1,2 @@
+ .global ext1
+ext1 IS 252
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/ext1g.s b/binutils-2.21/ld/testsuite/ld-mmix/ext1g.s
new file mode 100644
index 0000000..1a167ab
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/ext1g.s
@@ -0,0 +1,2 @@
+ .global ext1
+ext1 GREG
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/ext1l.s b/binutils-2.21/ld/testsuite/ld-mmix/ext1l.s
new file mode 100644
index 0000000..b7e6096
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/ext1l.s
@@ -0,0 +1,2 @@
+ .global ext1
+ext1 SWYM 4,8,16
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/getaa-1b.d b/binutils-2.21/ld/testsuite/ld-mmix/getaa-1b.d
new file mode 100644
index 0000000..84b477d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/getaa-1b.d
@@ -0,0 +1,24 @@
+#source: start.s
+#source: a.s
+#source: getaa.s
+#as: -x
+#ld: -m elf64mmix
+#objdump: -dr
+
+.*: file format elf64-mmix
+
+Disassembly of section \.text:
+
+0+ <_start>:
+ 0+: e3fd0001 setl \$253,0x1
+
+0+4 <a>:
+ 4: e3fd0004 setl \$253,0x4
+
+0+8 <getaa>:
+ 8: e3fd0002 setl \$253,0x2
+ c: e37b0004 setl \$123,0x4
+ 10: e67b0000 incml \$123,0x0
+ 14: e57b0000 incmh \$123,0x0
+ 18: e47b0000 inch \$123,0x0
+ 1c: e3fd0003 setl \$253,0x3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/getaa-1f.d b/binutils-2.21/ld/testsuite/ld-mmix/getaa-1f.d
new file mode 100644
index 0000000..cc628a2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/getaa-1f.d
@@ -0,0 +1,24 @@
+#source: start.s
+#source: getaa.s
+#source: a.s
+#as: -x
+#ld: -m elf64mmix
+#objdump: -dr
+
+.*: file format elf64-mmix
+
+Disassembly of section \.text:
+
+0+ <_start>:
+ 0+: e3fd0001 setl \$253,0x1
+
+0+4 <getaa>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: e37b001c setl \$123,0x1c
+ c: e67b0000 incml \$123,0x0
+ 10: e57b0000 incmh \$123,0x0
+ 14: e47b0000 inch \$123,0x0
+ 18: e3fd0003 setl \$253,0x3
+
+0+1c <a>:
+ 1c: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/getaa-2b.d b/binutils-2.21/ld/testsuite/ld-mmix/getaa-2b.d
new file mode 100644
index 0000000..4300128
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/getaa-2b.d
@@ -0,0 +1,21 @@
+#source: start.s
+#source: a.s
+#source: getaa.s
+#as: -no-expand
+#ld: -m elf64mmix
+#objdump: -dr
+
+.*: file format elf64-mmix
+
+Disassembly of section \.text:
+
+0+ <_start>:
+ 0+: e3fd0001 setl \$253,0x1
+
+0+4 <a>:
+ 4: e3fd0004 setl \$253,0x4
+
+0+8 <getaa>:
+ 8: e3fd0002 setl \$253,0x2
+ c: f57bfffe geta \$123,4 <a>
+ 10: e3fd0003 setl \$253,0x3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/getaa-2f.d b/binutils-2.21/ld/testsuite/ld-mmix/getaa-2f.d
new file mode 100644
index 0000000..fd32834
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/getaa-2f.d
@@ -0,0 +1,21 @@
+#source: start.s
+#source: getaa.s
+#source: a.s
+#as: -no-expand
+#ld: -m elf64mmix
+#objdump: -dr
+
+.*: file format elf64-mmix
+
+Disassembly of section \.text:
+
+0+ <_start>:
+ 0+: e3fd0001 setl \$253,0x1
+
+0+4 <getaa>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f47b0002 geta \$123,10 <a>
+ c: e3fd0003 setl \$253,0x3
+
+0+10 <a>:
+ 10: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/getaa-4b.d b/binutils-2.21/ld/testsuite/ld-mmix/getaa-4b.d
new file mode 100644
index 0000000..1a3614b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/getaa-4b.d
@@ -0,0 +1,26 @@
+#source: start.s
+#source: a.s
+#source: pad2p18m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pad4.s
+#source: getaa.s
+#as: -no-expand
+#ld: -m elf64mmix
+#objdump: -dr
+
+.*: file format elf64-mmix
+
+Disassembly of section \.text:
+
+0+ <_start>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <a>:
+ 4: e3fd0004 setl \$253,0x4
+ \.\.\.
+
+0+40000 <getaa>:
+ 40000: e3fd0002 setl \$253,0x2
+ 40004: f57b0000 geta \$123,4 <a>
+ 40008: e3fd0003 setl \$253,0x3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/getaa-4f.d b/binutils-2.21/ld/testsuite/ld-mmix/getaa-4f.d
new file mode 100644
index 0000000..30062a6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/getaa-4f.d
@@ -0,0 +1,25 @@
+#source: start.s
+#source: getaa.s
+#source: pad2p18m32.s
+#source: pad16.s
+#source: pad4.s
+#source: a.s
+#as: -no-expand
+#ld: -m elf64mmix
+#objdump: -dr
+
+.*: file format elf64-mmix
+
+Disassembly of section \.text:
+
+0+ <_start>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <getaa>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f47bffff geta \$123,40004 <a>
+ c: e3fd0003 setl \$253,0x3
+ \.\.\.
+
+0+40004 <a>:
+ 40004: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/getaa-6b.d b/binutils-2.21/ld/testsuite/ld-mmix/getaa-6b.d
new file mode 100644
index 0000000..0d3c711
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/getaa-6b.d
@@ -0,0 +1,11 @@
+#source: start.s
+#source: a.s
+#source: pad2p18m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pad4.s
+#source: pad4.s
+#source: getaa.s
+#as: -no-expand
+#ld: -m elf64mmix
+#error: relocation truncated to fit: R_MMIX_ADDR19 against symbol `a'
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/getaa-6f.d b/binutils-2.21/ld/testsuite/ld-mmix/getaa-6f.d
new file mode 100644
index 0000000..370f614
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/getaa-6f.d
@@ -0,0 +1,10 @@
+#source: start.s
+#source: getaa.s
+#source: pad2p18m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pad4.s
+#source: a.s
+#as: -no-expand
+#ld: -m elf64mmix
+#error: relocation truncated to fit: R_MMIX_ADDR19 against symbol `a'
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/getaa-7b.d b/binutils-2.21/ld/testsuite/ld-mmix/getaa-7b.d
new file mode 100644
index 0000000..7a71c31
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/getaa-7b.d
@@ -0,0 +1,24 @@
+#source: start.s
+#source: a.s
+#source: getaa.s
+#as: -x
+#ld: -m mmo
+#objdump: -dr
+
+.*: file format mmo
+
+Disassembly of section .text:
+
+0+ <(Main|_start)>:
+ 0+: e3fd0001 setl \$253,0x1
+
+0+4 <a>:
+ 4: e3fd0004 setl \$253,0x4
+
+0+8 <getaa>:
+ 8: e3fd0002 setl \$253,0x2
+ c: e37b0004 setl \$123,0x4
+ 10: e67b0000 incml \$123,0x0
+ 14: e57b0000 incmh \$123,0x0
+ 18: e47b0000 inch \$123,0x0
+ 1c: e3fd0003 setl \$253,0x3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/getaa-7f.d b/binutils-2.21/ld/testsuite/ld-mmix/getaa-7f.d
new file mode 100644
index 0000000..ea831a9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/getaa-7f.d
@@ -0,0 +1,24 @@
+#source: start.s
+#source: getaa.s
+#source: a.s
+#as: -x
+#ld: -m mmo
+#objdump: -dr
+
+.*: file format mmo
+
+Disassembly of section \.text:
+
+0+ <(Main|_start)>:
+ 0+: e3fd0001 setl \$253,0x1
+
+0+4 <getaa>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: e37b001c setl \$123,0x1c
+ c: e67b0000 incml \$123,0x0
+ 10: e57b0000 incmh \$123,0x0
+ 14: e47b0000 inch \$123,0x0
+ 18: e3fd0003 setl \$253,0x3
+
+0+1c <a>:
+ 1c: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/getaa-8b.d b/binutils-2.21/ld/testsuite/ld-mmix/getaa-8b.d
new file mode 100644
index 0000000..a54cc10
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/getaa-8b.d
@@ -0,0 +1,21 @@
+#source: start.s
+#source: a.s
+#source: getaa.s
+#as: -no-expand
+#ld: -m mmo
+#objdump: -dr
+
+.*: file format mmo
+
+Disassembly of section \.text:
+
+0+ <(Main|_start)>:
+ 0+: e3fd0001 setl \$253,0x1
+
+0+4 <a>:
+ 4: e3fd0004 setl \$253,0x4
+
+0+8 <getaa>:
+ 8: e3fd0002 setl \$253,0x2
+ c: f57bfffe geta \$123,4 <a>
+ 10: e3fd0003 setl \$253,0x3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/getaa-8f.d b/binutils-2.21/ld/testsuite/ld-mmix/getaa-8f.d
new file mode 100644
index 0000000..4ba7307
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/getaa-8f.d
@@ -0,0 +1,21 @@
+#source: start.s
+#source: getaa.s
+#source: a.s
+#as: -no-expand
+#ld: -m mmo
+#objdump: -dr
+
+.*: file format mmo
+
+Disassembly of section \.text:
+
+0+ <(Main|_start)>:
+ 0+: e3fd0001 setl \$253,0x1
+
+0+4 <getaa>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f47b0002 geta \$123,10 <a>
+ c: e3fd0003 setl \$253,0x3
+
+0+10 <a>:
+ 10: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/getaa.s b/binutils-2.21/ld/testsuite/ld-mmix/getaa.s
new file mode 100644
index 0000000..cc4dfb7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/getaa.s
@@ -0,0 +1,7 @@
+* Just geta an external symbol, with some padding.
+ .text
+ .global getaa
+getaa:
+ SET $253,2
+ GETA $123,a
+ SET $253,3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/getaa12b.d b/binutils-2.21/ld/testsuite/ld-mmix/getaa12b.d
new file mode 100644
index 0000000..c4e49e4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/getaa12b.d
@@ -0,0 +1,26 @@
+#source: start.s
+#source: a.s
+#source: pad2p18m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pad4.s
+#source: getaa.s
+#as: -no-expand
+#ld: -m mmo
+#objdump: -dr
+
+.*: file format mmo
+
+Disassembly of section \.text:
+
+0+ <(Main|_start)>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <a>:
+ 4: e3fd0004 setl \$253,0x4
+ \.\.\.
+
+0+40000 <getaa>:
+ 40000: e3fd0002 setl \$253,0x2
+ 40004: f57b0000 geta \$123,4 <a>
+ 40008: e3fd0003 setl \$253,0x3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/getaa12f.d b/binutils-2.21/ld/testsuite/ld-mmix/getaa12f.d
new file mode 100644
index 0000000..d80a39c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/getaa12f.d
@@ -0,0 +1,25 @@
+#source: start.s
+#source: getaa.s
+#source: pad2p18m32.s
+#source: pad16.s
+#source: pad4.s
+#source: a.s
+#as: -no-expand
+#ld: -m mmo
+#objdump: -dr
+
+.*: file format mmo
+
+Disassembly of section \.text:
+
+0+ <(Main|_start)>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <getaa>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f47bffff geta \$123,40004 <a>
+ c: e3fd0003 setl \$253,0x3
+ \.\.\.
+
+0+40004 <a>:
+ 40004: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/getaa14b.d b/binutils-2.21/ld/testsuite/ld-mmix/getaa14b.d
new file mode 100644
index 0000000..47f37b9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/getaa14b.d
@@ -0,0 +1,11 @@
+#source: start.s
+#source: a.s
+#source: pad2p18m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pad4.s
+#source: pad4.s
+#source: getaa.s
+#as: -no-expand
+#ld: -m mmo
+#error: relocation truncated to fit: R_MMIX_ADDR19 against `a'$
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/getaa14f.d b/binutils-2.21/ld/testsuite/ld-mmix/getaa14f.d
new file mode 100644
index 0000000..58eb70b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/getaa14f.d
@@ -0,0 +1,10 @@
+#source: start.s
+#source: getaa.s
+#source: pad2p18m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pad4.s
+#source: a.s
+#as: -no-expand
+#ld: -m mmo
+#error: relocation truncated to fit: R_MMIX_ADDR19 against `a'$
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-1.d b/binutils-2.21/ld/testsuite/ld-mmix/greg-1.d
new file mode 100644
index 0000000..d64ce0a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-1.d
@@ -0,0 +1,27 @@
+#source: greg-1.s
+#source: gregldo1.s
+#source: start.s
+#ld: -m elf64mmix
+#objdump: -dt
+
+# Most simple greg usage: relocate to each possible location within an
+# insn.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+ l d \.text 0+ (|\.text)
+0+7f0 l d \.MMIX\.reg_contents 0+ (|\.MMIX\.reg_contents)
+0+c g \.text 0+ _start
+0+fe g \*REG\* 0+ areg
+#...
+
+Disassembly of section \.text:
+
+0+ <_start-0xc>:
+ 0: 8c0c20fe ldo \$12,\$32,\$254
+ 4: 8d7bfe22 ldo \$123,\$254,34
+ 8: 8dfeea38 ldo \$254,\$234,56
+
+0+c <_start>:
+ c: e3fd0001 setl \$253,0x1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-1.s b/binutils-2.21/ld/testsuite/ld-mmix/greg-1.s
new file mode 100644
index 0000000..821460c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-1.s
@@ -0,0 +1,3 @@
+# Have a single GREG register allocation.
+ .global areg
+areg GREG 123456789101112
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-10.d b/binutils-2.21/ld/testsuite/ld-mmix/greg-10.d
new file mode 100644
index 0000000..acc702d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-10.d
@@ -0,0 +1,25 @@
+#source: greg-1.s
+#source: gregldo1.s
+#source: start.s
+#ld: -m mmo
+#objdump: -dt
+
+# Most simple greg usage: relocate to each possible location within an
+# insn; mmo.
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+c g \.text Main
+0+c g \.text _start
+0+fe g \*REG\* areg
+
+Disassembly of section \.text:
+
+0+ <Main-0xc>:
+ 0: 8c0c20fe ldo \$12,\$32,areg
+ 4: 8d7bfe22 ldo \$123,areg,34
+ 8: 8dfeea38 ldo areg,\$234,56
+
+0+c <(Main|_start)>:
+ c: e3fd0001 setl \$253,0x1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-11.d b/binutils-2.21/ld/testsuite/ld-mmix/greg-11.d
new file mode 100644
index 0000000..5fc474b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-11.d
@@ -0,0 +1,39 @@
+#source: greg-1.s
+#source: gregldo1.s
+#source: gregget2.s
+#source: a.s
+#source: greg-3.s
+#source: start.s
+#source: greg-2.s
+#as: -x
+#ld: -m mmo
+#objdump: -dt
+
+# Have two used gregs and one unused, mmo.
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+20 g \.text Main
+0+fe g \*REG\* b
+0+20 g \.text _start
+0+fc g \*REG\* areg
+0+fd g \*REG\* c
+0+1c g \.text a
+
+Disassembly of section \.text:
+
+0+ <a-0x1c>:
+ 0: 8c0c20fc ldo \$12,\$32,areg
+ 4: 8d7bfc22 ldo \$123,areg,34
+ 8: 8dfcea38 ldo areg,\$234,56
+ c: e3fe001c setl b,0x1c
+ 10: e6fe0000 incml b,0x0
+ 14: e5fe0000 incmh b,0x0
+ 18: e4fe0000 inch b,0x0
+
+0+1c <a>:
+ 1c: e3fd0004 setl c,0x4
+
+0+20 <(Main|_start)>:
+ 20: e3fd0001 setl c,0x1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-11b.d b/binutils-2.21/ld/testsuite/ld-mmix/greg-11b.d
new file mode 100644
index 0000000..50665d0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-11b.d
@@ -0,0 +1,32 @@
+#source: greg-1.s
+#source: gregldo1.s
+#source: gregget2.s
+#source: a.s
+#source: greg-3.s
+#source: start.s
+#source: greg-2.s
+#as: -x
+#ld: -m mmo
+#objdump: -str
+
+# Have two used gregs and one unused, mmo; display contents to visualize
+# mmo bug with register contents.
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+20 g \.text Main
+0+fe g \*REG\* b
+0+20 g \.text _start
+0+fc g \*REG\* areg
+0+fd g \*REG\* c
+0+1c g \.text a
+
+
+Contents of section \.text:
+ 0+ 8c0c20fc 8d7bfc22 8dfcea38 e3fe001c .*
+ 0+10 e6fe0000 e5fe0000 e4fe0000 e3fd0004 .*
+ 0+20 e3fd0001 .*
+Contents of section \.MMIX\.reg_contents:
+ 07e0 00007048 860f3a38 00000000 00000042 .*
+ 07f0 007acf50 505a30a2 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-12.d b/binutils-2.21/ld/testsuite/ld-mmix/greg-12.d
new file mode 100644
index 0000000..b438632
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-12.d
@@ -0,0 +1,34 @@
+#source: greg-1.s
+#source: gregget1.s
+#source: start.s
+#source: a.s
+#as: -x
+#ld: -m mmo
+#objdump: -dt
+
+# A greg usage with an expanding insn. The register reloc must be
+# evaluated before the expanding reloc. Here, it doesn't appear in the
+# wrong order, and it doesn't seem like they would naturally appear in the
+# wrong order, but anyway; mmo.
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+10 g \.text Main
+0+10 g \.text _start
+0+fe g \*REG\* areg
+0+14 g \.text a
+
+Disassembly of section \.text:
+
+0+ <(Main|_start)-0x10>:
+ 0: e3fe0014 setl areg,0x14
+ 4: e6fe0000 incml areg,0x0
+ 8: e5fe0000 incmh areg,0x0
+ c: e4fe0000 inch areg,0x0
+
+0+10 <(Main|_start)>:
+ 10: e3fd0001 setl \$253,0x1
+
+0+14 <a>:
+ 14: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-13.d b/binutils-2.21/ld/testsuite/ld-mmix/greg-13.d
new file mode 100644
index 0000000..091cf46
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-13.d
@@ -0,0 +1,33 @@
+#source: greg-1.s
+#source: gregbza1.s
+#source: start.s
+#source: a.s
+#as: -x
+#ld: -m mmo
+#objdump: -dt
+
+# Like greg-3, but a different expanding insn, mmo.
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+18 g \.text Main
+0+18 g \.text _start
+0+fe g \*REG\* areg
+0+1c g \.text a
+
+Disassembly of section \.text:
+
+0+ <(Main|_start)-0x18>:
+ 0: 5afe0006 pbnz areg,18 <(Main|_start)>
+ 4: e3ff001c setl \$255,0x1c
+ 8: e6ff0000 incml \$255,0x0
+ c: e5ff0000 incmh \$255,0x0
+ 10: e4ff0000 inch \$255,0x0
+ 14: 9fffff00 go \$255,\$255,0
+
+0+18 <(Main|_start)>:
+ 18: e3fd0001 setl \$253,0x1
+
+0+1c <a>:
+ 1c: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-14.d b/binutils-2.21/ld/testsuite/ld-mmix/greg-14.d
new file mode 100644
index 0000000..19cc451
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-14.d
@@ -0,0 +1,32 @@
+#source: greg-1.s
+#source: gregpsj1.s
+#source: start.s
+#source: a.s
+#as: -x --no-pushj-stubs
+#ld: -m mmo
+#objdump: -dt
+
+# Like greg-3, but a different expanding insn.
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+14 g \.text Main
+0+14 g \.text _start
+0+fe g \*REG\* areg
+0+18 g \.text a
+
+Disassembly of section \.text:
+
+0+ <(Main|_start)-0x14>:
+ 0: e3ff0018 setl \$255,0x18
+ 4: e6ff0000 incml \$255,0x0
+ 8: e5ff0000 incmh \$255,0x0
+ c: e4ff0000 inch \$255,0x0
+ 10: bffeff00 pushgo areg,\$255,0
+
+0+14 <(Main|_start)>:
+ 14: e3fd0001 setl \$253,0x1
+
+0+18 <a>:
+ 18: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-14s.d b/binutils-2.21/ld/testsuite/ld-mmix/greg-14s.d
new file mode 100644
index 0000000..466661c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-14s.d
@@ -0,0 +1,23 @@
+#source: greg-1.s
+#source: gregpsj1.s
+#source: start.s
+#source: a.s
+#as: -x
+#ld: -m mmo
+#objdump: -dt
+
+# Like greg-14, but using PUSHJ stubs.
+
+.*: file format mmo
+SYMBOL TABLE:
+0+4 g \.text Main
+0+4 g \.text _start
+0+fe g \*REG\* areg
+0+8 g \.text a
+Disassembly of section \.text:
+0+ <(Main|_start)-0x4>:
+ 0: f2fe0002 pushj areg,8 <a>
+0+4 <(Main|_start)>:
+ 4: e3fd0001 setl \$253,0x1
+0+8 <a>:
+ 8: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-15.d b/binutils-2.21/ld/testsuite/ld-mmix/greg-15.d
new file mode 100644
index 0000000..4b54153
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-15.d
@@ -0,0 +1,59 @@
+#source: gregget1.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-1.s
+#source: a.s
+#source: start.s
+#as: -x
+#ld: -m mmo
+#objdump: -dt
+
+# Allocating the maximum number of gregs and referring to one at the end
+# still works, mmo.
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+14 g \.text Main
+0+14 g \.text _start
+0+fe g \*REG\* areg
+0+10 g \.text a
+
+Disassembly of section \.text:
+
+0+ <a-0x10>:
+ 0: e3fe0010 setl areg,0x10
+ 4: e6fe0000 incml areg,0x0
+ 8: e5fe0000 incmh areg,0x0
+ c: e4fe0000 inch areg,0x0
+
+0+10 <a>:
+ 10: e3fd0004 setl \$253,0x4
+
+0+14 <(Main|_start)>:
+ 14: e3fd0001 setl \$253,0x1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-16.d b/binutils-2.21/ld/testsuite/ld-mmix/greg-16.d
new file mode 100644
index 0000000..80b2338
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-16.d
@@ -0,0 +1,59 @@
+#source: gregget1.s
+#source: greg-1.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: a.s
+#source: start.s
+#as: -x
+#ld: -m mmo
+#objdump: -dt
+
+# Allocating the maximum number of gregs and referring to one at the
+# *other* end still works, mmo.
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+14 g \.text Main
+0+14 g \.text _start
+0+20 g \*REG\* areg
+0+10 g \.text a
+
+Disassembly of section \.text:
+
+0+ <a-0x10>:
+ 0: e3200010 setl areg,0x10
+ 4: e6200000 incml areg,0x0
+ 8: e5200000 incmh areg,0x0
+ c: e4200000 inch areg,0x0
+
+0+10 <a>:
+ 10: e3fd0004 setl \$253,0x4
+
+0+14 <(Main|_start)>:
+ 14: e3fd0001 setl \$253,0x1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-17.d b/binutils-2.21/ld/testsuite/ld-mmix/greg-17.d
new file mode 100644
index 0000000..e1af4b5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-17.d
@@ -0,0 +1,37 @@
+#source: gregget1.s
+#source: greg-1.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: a.s
+#source: start.s
+#as: -x
+#ld: -m mmo
+#error: Too many global registers: 224, max 223
+
+# Allocating the maximum number of gregs *plus one* is an error, mmo.
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-18.d b/binutils-2.21/ld/testsuite/ld-mmix/greg-18.d
new file mode 100644
index 0000000..ed1bbaf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-18.d
@@ -0,0 +1,39 @@
+#source: gregget1.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-1.s
+#source: a.s
+#source: start.s
+#as: -x
+#ld: -m mmo
+#objdump: -dt
+#error: Too many global registers: 224, max 223
+
+# Allocating the maximum number of gregs *plus one* is an error; other end
+# of the stick, mmo.
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-19.d b/binutils-2.21/ld/testsuite/ld-mmix/greg-19.d
new file mode 100644
index 0000000..4468161
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-19.d
@@ -0,0 +1,21 @@
+#source: start.s
+#source: aregm.s
+#source: gregldo1.s
+#ld: -m elf64mmix
+#objdump: -str
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+ l d \.text 0+ (|\.text)
+0+7f0 l d \.MMIX\.reg_contents 0+ (|\.MMIX\.reg_contents)
+0+ g F \.text 0+ Main
+0+ g \.text 0+ _start
+0+fe g \*REG\* 0+ areg
+#...
+
+Contents of section \.text:
+ 0+ e3fd0001 8f03fe10 8e0307fe 8f05fe04 .*
+ 0+10 8c0c20fe 8d7bfe22 8dfeea38 .*
+Contents of section \.MMIX\.reg_contents:
+ 07f0 00000000 00000004 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-2.d b/binutils-2.21/ld/testsuite/ld-mmix/greg-2.d
new file mode 100644
index 0000000..ab8fbb2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-2.d
@@ -0,0 +1,41 @@
+#source: greg-1.s
+#source: gregldo1.s
+#source: gregget2.s
+#source: a.s
+#source: greg-3.s
+#source: start.s
+#source: greg-2.s
+#as: -x
+#ld: -m elf64mmix
+#objdump: -dt
+
+# Have two used gregs and one unused.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+ l d \.text 0+ (|\.text)
+0+7e0 l d \.MMIX\.reg_contents 0+ (|\.MMIX\.reg_contents)
+0+fe g \*REG\* 0+ b
+0+20 g \.text 0+ _start
+0+fc g \*REG\* 0+ areg
+0+fd g \*REG\* 0+ c
+#...
+0+1c g \.text 0+ a
+
+Disassembly of section \.text:
+
+0+ <a-0x1c>:
+ 0: 8c0c20fc ldo \$12,\$32,\$252
+ 4: 8d7bfc22 ldo \$123,\$252,34
+ 8: 8dfcea38 ldo \$252,\$234,56
+ c: e3fe001c setl \$254,0x1c
+ 10: e6fe0000 incml \$254,0x0
+ 14: e5fe0000 incmh \$254,0x0
+ 18: e4fe0000 inch \$254,0x0
+
+0+1c <a>:
+ 1c: e3fd0004 setl \$253,0x4
+
+0+20 <_start>:
+ 20: e3fd0001 setl \$253,0x1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-2.s b/binutils-2.21/ld/testsuite/ld-mmix/greg-2.s
new file mode 100644
index 0000000..588cbf1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-2.s
@@ -0,0 +1,3 @@
+# Have another GREG register allocation.
+ .global b
+b GREG 34567891011121314
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-20.d b/binutils-2.21/ld/testsuite/ld-mmix/greg-20.d
new file mode 100644
index 0000000..10daa08
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-20.d
@@ -0,0 +1,18 @@
+#source: start.s
+#source: aregm.s
+#source: gregldo1.s
+#ld: -m mmo
+#objdump: -str
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+ g \.text Main
+0+ g \.text _start
+0+fe g \*REG\* areg
+
+Contents of section \.text:
+ 0+ e3fd0001 8f03fe10 8e0307fe 8f05fe04 .*
+ 0+10 8c0c20fe 8d7bfe22 8dfeea38 .*
+Contents of section \.MMIX\.reg_contents:
+ 07f0 00000000 00000004 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-3.d b/binutils-2.21/ld/testsuite/ld-mmix/greg-3.d
new file mode 100644
index 0000000..25189c2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-3.d
@@ -0,0 +1,36 @@
+#source: greg-1.s
+#source: gregget1.s
+#source: start.s
+#source: a.s
+#as: -x
+#ld: -m elf64mmix
+#objdump: -dt
+
+# A greg usage with an expanding insn. The register reloc must be
+# evaluated before the expanding reloc. Here, it doesn't appear in the
+# wrong order, and it doesn't seem like they would naturally appear in the
+# wrong order, but anyway.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+ l d \.text 0+ (|\.text)
+0+7f0 l d \.MMIX\.reg_contents 0+ (|\.MMIX\.reg_contents)
+0+10 g \.text 0+ _start
+0+fe g \*REG\* 0+ areg
+#...
+0+14 g \.text 0+ a
+
+Disassembly of section \.text:
+
+0+ <_start-0x10>:
+ 0: e3fe0014 setl \$254,0x14
+ 4: e6fe0000 incml \$254,0x0
+ 8: e5fe0000 incmh \$254,0x0
+ c: e4fe0000 inch \$254,0x0
+
+0+10 <_start>:
+ 10: e3fd0001 setl \$253,0x1
+
+0+14 <a>:
+ 14: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-3.s b/binutils-2.21/ld/testsuite/ld-mmix/greg-3.s
new file mode 100644
index 0000000..5248591
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-3.s
@@ -0,0 +1,3 @@
+# Have yet another GREG register allocation.
+ .global c
+c GREG #42
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-4.d b/binutils-2.21/ld/testsuite/ld-mmix/greg-4.d
new file mode 100644
index 0000000..8b882c1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-4.d
@@ -0,0 +1,35 @@
+#source: greg-1.s
+#source: gregbza1.s
+#source: start.s
+#source: a.s
+#as: -x
+#ld: -m elf64mmix
+#objdump: -dt
+
+# Like greg-3, but a different expanding insn.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+ l d \.text 0+ (|\.text)
+0+7f0 l d \.MMIX\.reg_contents 0+ (|\.MMIX\.reg_contents)
+0+18 g \.text 0+ _start
+0+fe g \*REG\* 0+ areg
+#...
+0+1c g \.text 0+ a
+
+Disassembly of section \.text:
+
+0+ <_start-0x18>:
+ 0: 5afe0006 pbnz \$254,18 <_start>
+ 4: e3ff001c setl \$255,0x1c
+ 8: e6ff0000 incml \$255,0x0
+ c: e5ff0000 incmh \$255,0x0
+ 10: e4ff0000 inch \$255,0x0
+ 14: 9fffff00 go \$255,\$255,0
+
+0+18 <_start>:
+ 18: e3fd0001 setl \$253,0x1
+
+0+1c <a>:
+ 1c: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-4.s b/binutils-2.21/ld/testsuite/ld-mmix/greg-4.s
new file mode 100644
index 0000000..5e5a30f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-4.s
@@ -0,0 +1,2 @@
+# A single local greg.
+lsym GREG 78
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-5.d b/binutils-2.21/ld/testsuite/ld-mmix/greg-5.d
new file mode 100644
index 0000000..67e50d2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-5.d
@@ -0,0 +1,34 @@
+#source: greg-1.s
+#source: gregpsj1.s
+#source: start.s
+#source: a.s
+#as: -x --no-pushj-stubs
+#ld: -m elf64mmix
+#objdump: -dt
+
+# Like greg-3, but a different expanding insn.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+ l d \.text 0+ (|\.text)
+0+7f0 l d \.MMIX\.reg_contents 0+ (|\.MMIX\.reg_contents)
+0+14 g \.text 0+ _start
+0+fe g \*REG\* 0+ areg
+#...
+0+18 g \.text 0+ a
+
+Disassembly of section \.text:
+
+0+ <_start-0x14>:
+ 0: e3ff0018 setl \$255,0x18
+ 4: e6ff0000 incml \$255,0x0
+ 8: e5ff0000 incmh \$255,0x0
+ c: e4ff0000 inch \$255,0x0
+ 10: bffeff00 pushgo \$254,\$255,0
+
+0+14 <_start>:
+ 14: e3fd0001 setl \$253,0x1
+
+0+18 <a>:
+ 18: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-5.s b/binutils-2.21/ld/testsuite/ld-mmix/greg-5.s
new file mode 100644
index 0000000..65400af
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-5.s
@@ -0,0 +1,20 @@
+# 16 local gregs.
+A GREG
+B GREG
+C GREG
+D GREG
+
+E GREG
+F GREG
+G GREG
+H GREG
+
+I GREG
+J GREG
+K GREG
+L GREG
+
+M GREG
+N GREG
+O GREG
+P GREG
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-5s.d b/binutils-2.21/ld/testsuite/ld-mmix/greg-5s.d
new file mode 100644
index 0000000..84f5951
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-5s.d
@@ -0,0 +1,25 @@
+#source: greg-1.s
+#source: gregpsj1.s
+#source: start.s
+#source: a.s
+#as: -x
+#ld: -m elf64mmix
+#objdump: -dt
+
+# Like greg-3, but a different expanding insn.
+
+.*: file format elf64-mmix
+SYMBOL TABLE:
+0+ l d \.text 0+ (|\.text)
+0+7f0 l d \.MMIX\.reg_contents 0+ (|\.MMIX\.reg_contents)
+0+4 g \.text 0+ _start
+0+fe g \*REG\* 0+ areg
+#...
+0+8 g \.text 0+ a
+Disassembly of section \.text:
+0+ <_start-0x4>:
+ 0: f2fe0002 pushj \$254,8 <a>
+0+4 <_start>:
+ 4: e3fd0001 setl \$253,0x1
+0+8 <a>:
+ 8: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-6.d b/binutils-2.21/ld/testsuite/ld-mmix/greg-6.d
new file mode 100644
index 0000000..e4df905
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-6.d
@@ -0,0 +1,286 @@
+#source: gregget1.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-1.s
+#source: a.s
+#source: start.s
+#as: -x
+#ld: -m elf64mmix
+#objdump: -dt
+
+# Allocating the maximum number of gregs and referring to one at the end
+# still works.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+0 l d \.text 0+ (|\.text)
+0+100 l d \.MMIX\.reg_contents 0+ (|\.MMIX\.reg_contents)
+0+20 l \*REG\* 0+ P
+0+21 l \*REG\* 0+ O
+0+22 l \*REG\* 0+ N
+0+23 l \*REG\* 0+ M
+0+24 l \*REG\* 0+ L
+0+25 l \*REG\* 0+ K
+0+26 l \*REG\* 0+ J
+0+27 l \*REG\* 0+ I
+0+28 l \*REG\* 0+ H
+0+29 l \*REG\* 0+ G
+0+2a l \*REG\* 0+ F
+0+2b l \*REG\* 0+ E
+0+2c l \*REG\* 0+ D
+0+2d l \*REG\* 0+ C
+0+2e l \*REG\* 0+ B
+0+2f l \*REG\* 0+ A
+0+30 l \*REG\* 0+ P
+0+31 l \*REG\* 0+ O
+0+32 l \*REG\* 0+ N
+0+33 l \*REG\* 0+ M
+0+34 l \*REG\* 0+ L
+0+35 l \*REG\* 0+ K
+0+36 l \*REG\* 0+ J
+0+37 l \*REG\* 0+ I
+0+38 l \*REG\* 0+ H
+0+39 l \*REG\* 0+ G
+0+3a l \*REG\* 0+ F
+0+3b l \*REG\* 0+ E
+0+3c l \*REG\* 0+ D
+0+3d l \*REG\* 0+ C
+0+3e l \*REG\* 0+ B
+0+3f l \*REG\* 0+ A
+0+40 l \*REG\* 0+ P
+0+41 l \*REG\* 0+ O
+0+42 l \*REG\* 0+ N
+0+43 l \*REG\* 0+ M
+0+44 l \*REG\* 0+ L
+0+45 l \*REG\* 0+ K
+0+46 l \*REG\* 0+ J
+0+47 l \*REG\* 0+ I
+0+48 l \*REG\* 0+ H
+0+49 l \*REG\* 0+ G
+0+4a l \*REG\* 0+ F
+0+4b l \*REG\* 0+ E
+0+4c l \*REG\* 0+ D
+0+4d l \*REG\* 0+ C
+0+4e l \*REG\* 0+ B
+0+4f l \*REG\* 0+ A
+0+50 l \*REG\* 0+ P
+0+51 l \*REG\* 0+ O
+0+52 l \*REG\* 0+ N
+0+53 l \*REG\* 0+ M
+0+54 l \*REG\* 0+ L
+0+55 l \*REG\* 0+ K
+0+56 l \*REG\* 0+ J
+0+57 l \*REG\* 0+ I
+0+58 l \*REG\* 0+ H
+0+59 l \*REG\* 0+ G
+0+5a l \*REG\* 0+ F
+0+5b l \*REG\* 0+ E
+0+5c l \*REG\* 0+ D
+0+5d l \*REG\* 0+ C
+0+5e l \*REG\* 0+ B
+0+5f l \*REG\* 0+ A
+0+60 l \*REG\* 0+ P
+0+61 l \*REG\* 0+ O
+0+62 l \*REG\* 0+ N
+0+63 l \*REG\* 0+ M
+0+64 l \*REG\* 0+ L
+0+65 l \*REG\* 0+ K
+0+66 l \*REG\* 0+ J
+0+67 l \*REG\* 0+ I
+0+68 l \*REG\* 0+ H
+0+69 l \*REG\* 0+ G
+0+6a l \*REG\* 0+ F
+0+6b l \*REG\* 0+ E
+0+6c l \*REG\* 0+ D
+0+6d l \*REG\* 0+ C
+0+6e l \*REG\* 0+ B
+0+6f l \*REG\* 0+ A
+0+70 l \*REG\* 0+ P
+0+71 l \*REG\* 0+ O
+0+72 l \*REG\* 0+ N
+0+73 l \*REG\* 0+ M
+0+74 l \*REG\* 0+ L
+0+75 l \*REG\* 0+ K
+0+76 l \*REG\* 0+ J
+0+77 l \*REG\* 0+ I
+0+78 l \*REG\* 0+ H
+0+79 l \*REG\* 0+ G
+0+7a l \*REG\* 0+ F
+0+7b l \*REG\* 0+ E
+0+7c l \*REG\* 0+ D
+0+7d l \*REG\* 0+ C
+0+7e l \*REG\* 0+ B
+0+7f l \*REG\* 0+ A
+0+80 l \*REG\* 0+ P
+0+81 l \*REG\* 0+ O
+0+82 l \*REG\* 0+ N
+0+83 l \*REG\* 0+ M
+0+84 l \*REG\* 0+ L
+0+85 l \*REG\* 0+ K
+0+86 l \*REG\* 0+ J
+0+87 l \*REG\* 0+ I
+0+88 l \*REG\* 0+ H
+0+89 l \*REG\* 0+ G
+0+8a l \*REG\* 0+ F
+0+8b l \*REG\* 0+ E
+0+8c l \*REG\* 0+ D
+0+8d l \*REG\* 0+ C
+0+8e l \*REG\* 0+ B
+0+8f l \*REG\* 0+ A
+0+90 l \*REG\* 0+ P
+0+91 l \*REG\* 0+ O
+0+92 l \*REG\* 0+ N
+0+93 l \*REG\* 0+ M
+0+94 l \*REG\* 0+ L
+0+95 l \*REG\* 0+ K
+0+96 l \*REG\* 0+ J
+0+97 l \*REG\* 0+ I
+0+98 l \*REG\* 0+ H
+0+99 l \*REG\* 0+ G
+0+9a l \*REG\* 0+ F
+0+9b l \*REG\* 0+ E
+0+9c l \*REG\* 0+ D
+0+9d l \*REG\* 0+ C
+0+9e l \*REG\* 0+ B
+0+9f l \*REG\* 0+ A
+0+a0 l \*REG\* 0+ P
+0+a1 l \*REG\* 0+ O
+0+a2 l \*REG\* 0+ N
+0+a3 l \*REG\* 0+ M
+0+a4 l \*REG\* 0+ L
+0+a5 l \*REG\* 0+ K
+0+a6 l \*REG\* 0+ J
+0+a7 l \*REG\* 0+ I
+0+a8 l \*REG\* 0+ H
+0+a9 l \*REG\* 0+ G
+0+aa l \*REG\* 0+ F
+0+ab l \*REG\* 0+ E
+0+ac l \*REG\* 0+ D
+0+ad l \*REG\* 0+ C
+0+ae l \*REG\* 0+ B
+0+af l \*REG\* 0+ A
+0+b0 l \*REG\* 0+ P
+0+b1 l \*REG\* 0+ O
+0+b2 l \*REG\* 0+ N
+0+b3 l \*REG\* 0+ M
+0+b4 l \*REG\* 0+ L
+0+b5 l \*REG\* 0+ K
+0+b6 l \*REG\* 0+ J
+0+b7 l \*REG\* 0+ I
+0+b8 l \*REG\* 0+ H
+0+b9 l \*REG\* 0+ G
+0+ba l \*REG\* 0+ F
+0+bb l \*REG\* 0+ E
+0+bc l \*REG\* 0+ D
+0+bd l \*REG\* 0+ C
+0+be l \*REG\* 0+ B
+0+bf l \*REG\* 0+ A
+0+c0 l \*REG\* 0+ P
+0+c1 l \*REG\* 0+ O
+0+c2 l \*REG\* 0+ N
+0+c3 l \*REG\* 0+ M
+0+c4 l \*REG\* 0+ L
+0+c5 l \*REG\* 0+ K
+0+c6 l \*REG\* 0+ J
+0+c7 l \*REG\* 0+ I
+0+c8 l \*REG\* 0+ H
+0+c9 l \*REG\* 0+ G
+0+ca l \*REG\* 0+ F
+0+cb l \*REG\* 0+ E
+0+cc l \*REG\* 0+ D
+0+cd l \*REG\* 0+ C
+0+ce l \*REG\* 0+ B
+0+cf l \*REG\* 0+ A
+0+d0 l \*REG\* 0+ P
+0+d1 l \*REG\* 0+ O
+0+d2 l \*REG\* 0+ N
+0+d3 l \*REG\* 0+ M
+0+d4 l \*REG\* 0+ L
+0+d5 l \*REG\* 0+ K
+0+d6 l \*REG\* 0+ J
+0+d7 l \*REG\* 0+ I
+0+d8 l \*REG\* 0+ H
+0+d9 l \*REG\* 0+ G
+0+da l \*REG\* 0+ F
+0+db l \*REG\* 0+ E
+0+dc l \*REG\* 0+ D
+0+dd l \*REG\* 0+ C
+0+de l \*REG\* 0+ B
+0+df l \*REG\* 0+ A
+0+e0 l \*REG\* 0+ P
+0+e1 l \*REG\* 0+ O
+0+e2 l \*REG\* 0+ N
+0+e3 l \*REG\* 0+ M
+0+e4 l \*REG\* 0+ L
+0+e5 l \*REG\* 0+ K
+0+e6 l \*REG\* 0+ J
+0+e7 l \*REG\* 0+ I
+0+e8 l \*REG\* 0+ H
+0+e9 l \*REG\* 0+ G
+0+ea l \*REG\* 0+ F
+0+eb l \*REG\* 0+ E
+0+ec l \*REG\* 0+ D
+0+ed l \*REG\* 0+ C
+0+ee l \*REG\* 0+ B
+0+ef l \*REG\* 0+ A
+0+f0 l \*REG\* 0+ lsym
+0+f1 l \*REG\* 0+ lsym
+0+f2 l \*REG\* 0+ lsym
+0+f3 l \*REG\* 0+ lsym
+0+f4 l \*REG\* 0+ lsym
+0+f5 l \*REG\* 0+ lsym
+0+f6 l \*REG\* 0+ lsym
+0+f7 l \*REG\* 0+ lsym
+0+f8 l \*REG\* 0+ lsym
+0+f9 l \*REG\* 0+ lsym
+0+fa l \*REG\* 0+ lsym
+0+fb l \*REG\* 0+ lsym
+0+fc l \*REG\* 0+ lsym
+0+fd l \*REG\* 0+ lsym
+0+14 g \.text 0+ _start
+0+fe g \*REG\* 0+ areg
+2000000000000000 g \*ABS\* 0+ __bss_start
+2000000000000000 g \*ABS\* 0+ _edata
+2000000000000000 g \*ABS\* 0+ _end
+0+14 g \.text 0+ _start\.
+0+10 g \.text 0+ a
+
+Disassembly of section \.text:
+
+0+ <a-0x10>:
+ 0: e3fe0010 setl \$254,0x10
+ 4: e6fe0000 incml \$254,0x0
+ 8: e5fe0000 incmh \$254,0x0
+ c: e4fe0000 inch \$254,0x0
+
+0+10 <a>:
+ 10: e3fd0004 setl \$253,0x4
+
+0+14 <_start>:
+ 14: e3fd0001 setl \$253,0x1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-7.d b/binutils-2.21/ld/testsuite/ld-mmix/greg-7.d
new file mode 100644
index 0000000..a5d1692
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-7.d
@@ -0,0 +1,286 @@
+#source: gregget1.s
+#source: greg-1.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: a.s
+#source: start.s
+#as: -x
+#ld: -m elf64mmix
+#objdump: -dt
+
+# Allocating the maximum number of gregs and referring to one at the
+# *other* end still works.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+ l d \.text 0+ (|\.text)
+0+100 l d \.MMIX\.reg_contents 0+ (|\.MMIX\.reg_contents)
+0+21 l \*REG\* 0+ P
+0+22 l \*REG\* 0+ O
+0+23 l \*REG\* 0+ N
+0+24 l \*REG\* 0+ M
+0+25 l \*REG\* 0+ L
+0+26 l \*REG\* 0+ K
+0+27 l \*REG\* 0+ J
+0+28 l \*REG\* 0+ I
+0+29 l \*REG\* 0+ H
+0+2a l \*REG\* 0+ G
+0+2b l \*REG\* 0+ F
+0+2c l \*REG\* 0+ E
+0+2d l \*REG\* 0+ D
+0+2e l \*REG\* 0+ C
+0+2f l \*REG\* 0+ B
+0+30 l \*REG\* 0+ A
+0+31 l \*REG\* 0+ P
+0+32 l \*REG\* 0+ O
+0+33 l \*REG\* 0+ N
+0+34 l \*REG\* 0+ M
+0+35 l \*REG\* 0+ L
+0+36 l \*REG\* 0+ K
+0+37 l \*REG\* 0+ J
+0+38 l \*REG\* 0+ I
+0+39 l \*REG\* 0+ H
+0+3a l \*REG\* 0+ G
+0+3b l \*REG\* 0+ F
+0+3c l \*REG\* 0+ E
+0+3d l \*REG\* 0+ D
+0+3e l \*REG\* 0+ C
+0+3f l \*REG\* 0+ B
+0+40 l \*REG\* 0+ A
+0+41 l \*REG\* 0+ P
+0+42 l \*REG\* 0+ O
+0+43 l \*REG\* 0+ N
+0+44 l \*REG\* 0+ M
+0+45 l \*REG\* 0+ L
+0+46 l \*REG\* 0+ K
+0+47 l \*REG\* 0+ J
+0+48 l \*REG\* 0+ I
+0+49 l \*REG\* 0+ H
+0+4a l \*REG\* 0+ G
+0+4b l \*REG\* 0+ F
+0+4c l \*REG\* 0+ E
+0+4d l \*REG\* 0+ D
+0+4e l \*REG\* 0+ C
+0+4f l \*REG\* 0+ B
+0+50 l \*REG\* 0+ A
+0+51 l \*REG\* 0+ P
+0+52 l \*REG\* 0+ O
+0+53 l \*REG\* 0+ N
+0+54 l \*REG\* 0+ M
+0+55 l \*REG\* 0+ L
+0+56 l \*REG\* 0+ K
+0+57 l \*REG\* 0+ J
+0+58 l \*REG\* 0+ I
+0+59 l \*REG\* 0+ H
+0+5a l \*REG\* 0+ G
+0+5b l \*REG\* 0+ F
+0+5c l \*REG\* 0+ E
+0+5d l \*REG\* 0+ D
+0+5e l \*REG\* 0+ C
+0+5f l \*REG\* 0+ B
+0+60 l \*REG\* 0+ A
+0+61 l \*REG\* 0+ P
+0+62 l \*REG\* 0+ O
+0+63 l \*REG\* 0+ N
+0+64 l \*REG\* 0+ M
+0+65 l \*REG\* 0+ L
+0+66 l \*REG\* 0+ K
+0+67 l \*REG\* 0+ J
+0+68 l \*REG\* 0+ I
+0+69 l \*REG\* 0+ H
+0+6a l \*REG\* 0+ G
+0+6b l \*REG\* 0+ F
+0+6c l \*REG\* 0+ E
+0+6d l \*REG\* 0+ D
+0+6e l \*REG\* 0+ C
+0+6f l \*REG\* 0+ B
+0+70 l \*REG\* 0+ A
+0+71 l \*REG\* 0+ P
+0+72 l \*REG\* 0+ O
+0+73 l \*REG\* 0+ N
+0+74 l \*REG\* 0+ M
+0+75 l \*REG\* 0+ L
+0+76 l \*REG\* 0+ K
+0+77 l \*REG\* 0+ J
+0+78 l \*REG\* 0+ I
+0+79 l \*REG\* 0+ H
+0+7a l \*REG\* 0+ G
+0+7b l \*REG\* 0+ F
+0+7c l \*REG\* 0+ E
+0+7d l \*REG\* 0+ D
+0+7e l \*REG\* 0+ C
+0+7f l \*REG\* 0+ B
+0+80 l \*REG\* 0+ A
+0+81 l \*REG\* 0+ P
+0+82 l \*REG\* 0+ O
+0+83 l \*REG\* 0+ N
+0+84 l \*REG\* 0+ M
+0+85 l \*REG\* 0+ L
+0+86 l \*REG\* 0+ K
+0+87 l \*REG\* 0+ J
+0+88 l \*REG\* 0+ I
+0+89 l \*REG\* 0+ H
+0+8a l \*REG\* 0+ G
+0+8b l \*REG\* 0+ F
+0+8c l \*REG\* 0+ E
+0+8d l \*REG\* 0+ D
+0+8e l \*REG\* 0+ C
+0+8f l \*REG\* 0+ B
+0+90 l \*REG\* 0+ A
+0+91 l \*REG\* 0+ P
+0+92 l \*REG\* 0+ O
+0+93 l \*REG\* 0+ N
+0+94 l \*REG\* 0+ M
+0+95 l \*REG\* 0+ L
+0+96 l \*REG\* 0+ K
+0+97 l \*REG\* 0+ J
+0+98 l \*REG\* 0+ I
+0+99 l \*REG\* 0+ H
+0+9a l \*REG\* 0+ G
+0+9b l \*REG\* 0+ F
+0+9c l \*REG\* 0+ E
+0+9d l \*REG\* 0+ D
+0+9e l \*REG\* 0+ C
+0+9f l \*REG\* 0+ B
+0+a0 l \*REG\* 0+ A
+0+a1 l \*REG\* 0+ P
+0+a2 l \*REG\* 0+ O
+0+a3 l \*REG\* 0+ N
+0+a4 l \*REG\* 0+ M
+0+a5 l \*REG\* 0+ L
+0+a6 l \*REG\* 0+ K
+0+a7 l \*REG\* 0+ J
+0+a8 l \*REG\* 0+ I
+0+a9 l \*REG\* 0+ H
+0+aa l \*REG\* 0+ G
+0+ab l \*REG\* 0+ F
+0+ac l \*REG\* 0+ E
+0+ad l \*REG\* 0+ D
+0+ae l \*REG\* 0+ C
+0+af l \*REG\* 0+ B
+0+b0 l \*REG\* 0+ A
+0+b1 l \*REG\* 0+ P
+0+b2 l \*REG\* 0+ O
+0+b3 l \*REG\* 0+ N
+0+b4 l \*REG\* 0+ M
+0+b5 l \*REG\* 0+ L
+0+b6 l \*REG\* 0+ K
+0+b7 l \*REG\* 0+ J
+0+b8 l \*REG\* 0+ I
+0+b9 l \*REG\* 0+ H
+0+ba l \*REG\* 0+ G
+0+bb l \*REG\* 0+ F
+0+bc l \*REG\* 0+ E
+0+bd l \*REG\* 0+ D
+0+be l \*REG\* 0+ C
+0+bf l \*REG\* 0+ B
+0+c0 l \*REG\* 0+ A
+0+c1 l \*REG\* 0+ P
+0+c2 l \*REG\* 0+ O
+0+c3 l \*REG\* 0+ N
+0+c4 l \*REG\* 0+ M
+0+c5 l \*REG\* 0+ L
+0+c6 l \*REG\* 0+ K
+0+c7 l \*REG\* 0+ J
+0+c8 l \*REG\* 0+ I
+0+c9 l \*REG\* 0+ H
+0+ca l \*REG\* 0+ G
+0+cb l \*REG\* 0+ F
+0+cc l \*REG\* 0+ E
+0+cd l \*REG\* 0+ D
+0+ce l \*REG\* 0+ C
+0+cf l \*REG\* 0+ B
+0+d0 l \*REG\* 0+ A
+0+d1 l \*REG\* 0+ P
+0+d2 l \*REG\* 0+ O
+0+d3 l \*REG\* 0+ N
+0+d4 l \*REG\* 0+ M
+0+d5 l \*REG\* 0+ L
+0+d6 l \*REG\* 0+ K
+0+d7 l \*REG\* 0+ J
+0+d8 l \*REG\* 0+ I
+0+d9 l \*REG\* 0+ H
+0+da l \*REG\* 0+ G
+0+db l \*REG\* 0+ F
+0+dc l \*REG\* 0+ E
+0+dd l \*REG\* 0+ D
+0+de l \*REG\* 0+ C
+0+df l \*REG\* 0+ B
+0+e0 l \*REG\* 0+ A
+0+e1 l \*REG\* 0+ P
+0+e2 l \*REG\* 0+ O
+0+e3 l \*REG\* 0+ N
+0+e4 l \*REG\* 0+ M
+0+e5 l \*REG\* 0+ L
+0+e6 l \*REG\* 0+ K
+0+e7 l \*REG\* 0+ J
+0+e8 l \*REG\* 0+ I
+0+e9 l \*REG\* 0+ H
+0+ea l \*REG\* 0+ G
+0+eb l \*REG\* 0+ F
+0+ec l \*REG\* 0+ E
+0+ed l \*REG\* 0+ D
+0+ee l \*REG\* 0+ C
+0+ef l \*REG\* 0+ B
+0+f0 l \*REG\* 0+ A
+0+f1 l \*REG\* 0+ lsym
+0+f2 l \*REG\* 0+ lsym
+0+f3 l \*REG\* 0+ lsym
+0+f4 l \*REG\* 0+ lsym
+0+f5 l \*REG\* 0+ lsym
+0+f6 l \*REG\* 0+ lsym
+0+f7 l \*REG\* 0+ lsym
+0+f8 l \*REG\* 0+ lsym
+0+f9 l \*REG\* 0+ lsym
+0+fa l \*REG\* 0+ lsym
+0+fb l \*REG\* 0+ lsym
+0+fc l \*REG\* 0+ lsym
+0+fd l \*REG\* 0+ lsym
+0+fe l \*REG\* 0+ lsym
+0+14 g \.text 0+ _start
+0+20 g \*REG\* 0+ areg
+2000000000000000 g \*ABS\* 0+ __bss_start
+2000000000000000 g \*ABS\* 0+ _edata
+2000000000000000 g \*ABS\* 0+ _end
+0+14 g \.text 0+ _start\.
+0+10 g \.text 0+ a
+
+Disassembly of section \.text:
+
+0+ <a-0x10>:
+ 0: e3200010 setl \$32,0x10
+ 4: e6200000 incml \$32,0x0
+ 8: e5200000 incmh \$32,0x0
+ c: e4200000 inch \$32,0x0
+
+0+10 <a>:
+ 10: e3fd0004 setl \$253,0x4
+
+0+14 <_start>:
+ 14: e3fd0001 setl \$253,0x1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-8.d b/binutils-2.21/ld/testsuite/ld-mmix/greg-8.d
new file mode 100644
index 0000000..cb6b776
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-8.d
@@ -0,0 +1,37 @@
+#source: gregget1.s
+#source: greg-1.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: a.s
+#source: start.s
+#as: -x
+#ld: -m elf64mmix
+#error: Too many global registers: 224, max 223
+
+# Allocating the maximum number of gregs *plus one* is an error.
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/greg-9.d b/binutils-2.21/ld/testsuite/ld-mmix/greg-9.d
new file mode 100644
index 0000000..c9d9fcd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/greg-9.d
@@ -0,0 +1,39 @@
+#source: gregget1.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-1.s
+#source: a.s
+#source: start.s
+#as: -x
+#ld: -m elf64mmix
+#objdump: -dt
+#error: Too many global registers: 224, max 223
+
+# Allocating the maximum number of gregs *plus one* is an error; other end
+# of the stick.
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/gregbza1.s b/binutils-2.21/ld/testsuite/ld-mmix/gregbza1.s
new file mode 100644
index 0000000..878c66f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/gregbza1.s
@@ -0,0 +1,4 @@
+# Use a symbolic register areg, presumably allocated by greg in another file.
+# The "BZ" will be expanded, and the reloc for areg must be resolved
+# before the other relocs for that insn.
+ BZ areg,a
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/gregget1.s b/binutils-2.21/ld/testsuite/ld-mmix/gregget1.s
new file mode 100644
index 0000000..49f97f0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/gregget1.s
@@ -0,0 +1,4 @@
+# Use a symbolic register areg, presumably allocated by greg in another file.
+# The "GETA" will be expanded, and the reloc for areg must be resolved
+# before the other relocs for that insn.
+ GETA areg,a
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/gregget2.s b/binutils-2.21/ld/testsuite/ld-mmix/gregget2.s
new file mode 100644
index 0000000..855136c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/gregget2.s
@@ -0,0 +1,4 @@
+# Use a symbolic register b, presumably allocated by greg in another file.
+# The "GETA" will be expanded, and the reloc for b must be resolved before
+# the other relocs for that insn.
+ GETA b,a
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/gregldo1.s b/binutils-2.21/ld/testsuite/ld-mmix/gregldo1.s
new file mode 100644
index 0000000..a69bd8c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/gregldo1.s
@@ -0,0 +1,4 @@
+# Use a symbolic register areg, presumably allocated by greg in another file.
+ LDO $12,$32,areg
+ LDO $123,areg,34
+ LDO areg,$234,56
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/gregpsj1.s b/binutils-2.21/ld/testsuite/ld-mmix/gregpsj1.s
new file mode 100644
index 0000000..87b68a3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/gregpsj1.s
@@ -0,0 +1,4 @@
+# Use a symbolic register areg, presumably allocated by greg in another file.
+# The "PUSHJ" will be expanded, and the reloc for areg must be resolved
+# before the other relocs for that insn.
+ PUSHJ areg,a
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/hdr-1.d b/binutils-2.21/ld/testsuite/ld-mmix/hdr-1.d
new file mode 100644
index 0000000..3cb8265
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/hdr-1.d
@@ -0,0 +1,19 @@
+#source: start.s
+#source: a.s
+#ld: -T $srcdir/$subdir/mmohdr1.ld
+#objdump: -sht
+
+.*: file format mmo
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0+8 0+100 0+100 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, CODE
+SYMBOL TABLE:
+0+100 g \.text Main
+0+100 g \.text _start
+0+104 g \.text a
+
+
+Contents of section \.text:
+ 0100 e3fd0001 e3fd0004 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/jumpa-1b.d b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-1b.d
new file mode 100644
index 0000000..3baff9b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-1b.d
@@ -0,0 +1,25 @@
+#source: start.s
+#source: a.s
+#source: jumpa.s
+#as: -x
+#ld: -m elf64mmix
+#objdump: -dr
+
+.*: file format elf64-mmix
+
+Disassembly of section \.text:
+
+0+ <_start>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <a>:
+ 4: e3fd0004 setl \$253,0x4
+
+0+8 <jumpa>:
+ 8: e3fd0002 setl \$253,0x2
+ c: f1fffffe jmp 4 <a>
+ 10: fd000000 swym 0,0,0
+ 14: fd000000 swym 0,0,0
+ 18: fd000000 swym 0,0,0
+ 1c: fd000000 swym 0,0,0
+ 20: e3fd0003 setl \$253,0x3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/jumpa-1f.d b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-1f.d
new file mode 100644
index 0000000..983d294
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-1f.d
@@ -0,0 +1,25 @@
+#source: start.s
+#source: jumpa.s
+#source: a.s
+#as: -x
+#ld: -m elf64mmix
+#objdump: -dr
+
+.*: file format elf64-mmix
+
+Disassembly of section \.text:
+
+0+ <_start>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <jumpa>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f0000006 jmp 20 <a>
+ c: fd000000 swym 0,0,0
+ 10: fd000000 swym 0,0,0
+ 14: fd000000 swym 0,0,0
+ 18: fd000000 swym 0,0,0
+ 1c: e3fd0003 setl \$253,0x3
+
+0+20 <a>:
+ 20: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/jumpa-2b.d b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-2b.d
new file mode 100644
index 0000000..f594055
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-2b.d
@@ -0,0 +1,21 @@
+#source: start.s
+#source: a.s
+#source: jumpa.s
+#as: -no-expand
+#ld: -m elf64mmix
+#objdump: -dr
+
+.*: file format elf64-mmix
+
+Disassembly of section \.text:
+
+0+ <_start>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <a>:
+ 4: e3fd0004 setl \$253,0x4
+
+0+8 <jumpa>:
+ 8: e3fd0002 setl \$253,0x2
+ c: f1fffffe jmp 4 <a>
+ 10: e3fd0003 setl \$253,0x3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/jumpa-2f.d b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-2f.d
new file mode 100644
index 0000000..a923e21
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-2f.d
@@ -0,0 +1,21 @@
+#source: start.s
+#source: jumpa.s
+#source: a.s
+#as: -no-expand
+#ld: -m elf64mmix
+#objdump: -dr
+
+.*: file format elf64-mmix
+
+Disassembly of section \.text:
+
+0+ <_start>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <jumpa>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f0000002 jmp 10 <a>
+ c: e3fd0003 setl \$253,0x3
+
+0+10 <a>:
+ 10: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/jumpa-3b.d b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-3b.d
new file mode 100644
index 0000000..d2f1b50
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-3b.d
@@ -0,0 +1,30 @@
+#source: start.s
+#source: a.s
+#source: pad2p26m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pad4.s
+#source: jumpa.s
+#as: -x
+#ld: -m elf64mmix
+#objdump: -dr
+
+.*: file format elf64-mmix
+
+Disassembly of section \.text:
+
+0+ <_start>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <a>:
+ 4: e3fd0004 setl \$253,0x4
+ \.\.\.
+
+0+4000000 <jumpa>:
+ 4000000: e3fd0002 setl \$253,0x2
+ 4000004: f1000000 jmp 4 <a>
+ 4000008: fd000000 swym 0,0,0
+ 400000c: fd000000 swym 0,0,0
+ 4000010: fd000000 swym 0,0,0
+ 4000014: fd000000 swym 0,0,0
+ 4000018: e3fd0003 setl \$253,0x3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/jumpa-3f.d b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-3f.d
new file mode 100644
index 0000000..4a5e10d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-3f.d
@@ -0,0 +1,28 @@
+#source: start.s
+#source: jumpa.s
+#source: pad2p26m32.s
+#source: pad4.s
+#source: a.s
+#as: -x
+#ld: -m elf64mmix
+#objdump: -dr
+
+.*: file format elf64-mmix
+
+Disassembly of section \.text:
+
+0+ <_start>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <jumpa>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f0ffffff jmp 4000004 <a>
+ c: fd000000 swym 0,0,0
+ 10: fd000000 swym 0,0,0
+ 14: fd000000 swym 0,0,0
+ 18: fd000000 swym 0,0,0
+ 1c: e3fd0003 setl \$253,0x3
+ \.\.\.
+
+0+4000004 <a>:
+ 4000004: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/jumpa-4b.d b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-4b.d
new file mode 100644
index 0000000..9d35932
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-4b.d
@@ -0,0 +1,26 @@
+#source: start.s
+#source: a.s
+#source: pad2p26m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pad4.s
+#source: jumpa.s
+#as: -no-expand
+#ld: -m elf64mmix
+#objdump: -dr
+
+.*: file format elf64-mmix
+
+Disassembly of section \.text:
+
+0+ <_start>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <a>:
+ 4: e3fd0004 setl \$253,0x4
+ \.\.\.
+
+0+4000000 <jumpa>:
+ 4000000: e3fd0002 setl \$253,0x2
+ 4000004: f1000000 jmp 4 <a>
+ 4000008: e3fd0003 setl \$253,0x3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/jumpa-4f.d b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-4f.d
new file mode 100644
index 0000000..3c0885b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-4f.d
@@ -0,0 +1,25 @@
+#source: start.s
+#source: jumpa.s
+#source: pad2p26m32.s
+#source: pad16.s
+#source: pad4.s
+#source: a.s
+#as: -no-expand
+#ld: -m elf64mmix
+#objdump: -dr
+
+.*: file format elf64-mmix
+
+Disassembly of section \.text:
+
+0+ <_start>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <jumpa>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f0ffffff jmp 4000004 <a>
+ c: e3fd0003 setl \$253,0x3
+ \.\.\.
+
+0+4000004 <a>:
+ 4000004: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/jumpa-5b.d b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-5b.d
new file mode 100644
index 0000000..b2fcaf4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-5b.d
@@ -0,0 +1,31 @@
+#source: start.s
+#source: a.s
+#source: pad2p26m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pad4.s
+#source: pad4.s
+#source: jumpa.s
+#as: -x
+#ld: -m elf64mmix
+#objdump: -dr
+
+.*: file format elf64-mmix
+
+Disassembly of section \.text:
+
+0+ <_start>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <a>:
+ 4: e3fd0004 setl \$253,0x4
+ \.\.\.
+
+0+4000004 <jumpa>:
+ 4000004: e3fd0002 setl \$253,0x2
+ 4000008: e3ff0004 setl \$255,0x4
+ 400000c: e6ff0000 incml \$255,0x0
+ 4000010: e5ff0000 incmh \$255,0x0
+ 4000014: e4ff0000 inch \$255,0x0
+ 4000018: 9fffff00 go \$255,\$255,0
+ 400001c: e3fd0003 setl \$253,0x3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/jumpa-5f.d b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-5f.d
new file mode 100644
index 0000000..bb91e70
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-5f.d
@@ -0,0 +1,29 @@
+#source: start.s
+#source: jumpa.s
+#source: pad2p26m32.s
+#source: pad4.s
+#source: pad4.s
+#source: a.s
+#as: -x
+#ld: -m elf64mmix
+#objdump: -dr
+
+.*: file format elf64-mmix
+
+Disassembly of section \.text:
+
+0+ <_start>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <jumpa>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: e3ff0008 setl \$255,0x8
+ c: e6ff0400 incml \$255,0x400
+ 10: e5ff0000 incmh \$255,0x0
+ 14: e4ff0000 inch \$255,0x0
+ 18: 9fffff00 go \$255,\$255,0
+ 1c: e3fd0003 setl \$253,0x3
+ \.\.\.
+
+0+4000008 <a>:
+ 4000008: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/jumpa-6b.d b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-6b.d
new file mode 100644
index 0000000..e4ba8cd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-6b.d
@@ -0,0 +1,11 @@
+#source: start.s
+#source: a.s
+#source: pad2p26m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pad4.s
+#source: pad4.s
+#source: jumpa.s
+#as: -no-expand
+#ld: -m elf64mmix
+#error: relocation truncated to fit: R_MMIX_ADDR27 against symbol `a'
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/jumpa-6f.d b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-6f.d
new file mode 100644
index 0000000..65c4ab0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-6f.d
@@ -0,0 +1,10 @@
+#source: start.s
+#source: jumpa.s
+#source: pad2p26m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pad4.s
+#source: a.s
+#as: -no-expand
+#ld: -m elf64mmix
+#error: relocation truncated to fit: R_MMIX_ADDR27 against symbol `a'
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/jumpa-7b.d b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-7b.d
new file mode 100644
index 0000000..202d006
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-7b.d
@@ -0,0 +1,25 @@
+#source: start.s
+#source: a.s
+#source: jumpa.s
+#as: -x
+#ld: -m mmo
+#objdump: -dr
+
+.*: file format mmo
+
+Disassembly of section \.text:
+
+0+ <(Main|_start)>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <a>:
+ 4: e3fd0004 setl \$253,0x4
+
+0+8 <jumpa>:
+ 8: e3fd0002 setl \$253,0x2
+ c: f1fffffe jmp 4 <a>
+ 10: fd000000 swym 0,0,0
+ 14: fd000000 swym 0,0,0
+ 18: fd000000 swym 0,0,0
+ 1c: fd000000 swym 0,0,0
+ 20: e3fd0003 setl \$253,0x3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/jumpa-7f.d b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-7f.d
new file mode 100644
index 0000000..b8345e1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-7f.d
@@ -0,0 +1,25 @@
+#source: start.s
+#source: jumpa.s
+#source: a.s
+#as: -x
+#ld: -m mmo
+#objdump: -dr
+
+.*: file format mmo
+
+Disassembly of section \.text:
+
+0+ <(Main|_start)>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <jumpa>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f0000006 jmp 20 <a>
+ c: fd000000 swym 0,0,0
+ 10: fd000000 swym 0,0,0
+ 14: fd000000 swym 0,0,0
+ 18: fd000000 swym 0,0,0
+ 1c: e3fd0003 setl \$253,0x3
+
+0+20 <a>:
+ 20: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/jumpa-8b.d b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-8b.d
new file mode 100644
index 0000000..456c949
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-8b.d
@@ -0,0 +1,21 @@
+#source: start.s
+#source: a.s
+#source: jumpa.s
+#as: -no-expand
+#ld: -m mmo
+#objdump: -dr
+
+.*: file format mmo
+
+Disassembly of section \.text:
+
+0+ <(Main|_start)>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <a>:
+ 4: e3fd0004 setl \$253,0x4
+
+0+8 <jumpa>:
+ 8: e3fd0002 setl \$253,0x2
+ c: f1fffffe jmp 4 <a>
+ 10: e3fd0003 setl \$253,0x3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/jumpa-8f.d b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-8f.d
new file mode 100644
index 0000000..05777ce
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-8f.d
@@ -0,0 +1,21 @@
+#source: start.s
+#source: jumpa.s
+#source: a.s
+#as: -no-expand
+#ld: -m mmo
+#objdump: -dr
+
+.*: file format mmo
+
+Disassembly of section \.text:
+
+0+ <(Main|_start)>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <jumpa>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f0000002 jmp 10 <a>
+ c: e3fd0003 setl \$253,0x3
+
+0+10 <a>:
+ 10: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/jumpa-9b.d b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-9b.d
new file mode 100644
index 0000000..2a639d3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-9b.d
@@ -0,0 +1,30 @@
+#source: start.s
+#source: a.s
+#source: pad2p26m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pad4.s
+#source: jumpa.s
+#as: -x
+#ld: -m mmo
+#objdump: -dr
+
+.*: file format mmo
+
+Disassembly of section \.text:
+
+0+ <(Main|_start)>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <a>:
+ 4: e3fd0004 setl \$253,0x4
+ \.\.\.
+
+0+4000000 <jumpa>:
+ 4000000: e3fd0002 setl \$253,0x2
+ 4000004: f1000000 jmp 4 <a>
+ 4000008: fd000000 swym 0,0,0
+ 400000c: fd000000 swym 0,0,0
+ 4000010: fd000000 swym 0,0,0
+ 4000014: fd000000 swym 0,0,0
+ 4000018: e3fd0003 setl \$253,0x3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/jumpa-9f.d b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-9f.d
new file mode 100644
index 0000000..a4a2932
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/jumpa-9f.d
@@ -0,0 +1,28 @@
+#source: start.s
+#source: jumpa.s
+#source: pad2p26m32.s
+#source: pad4.s
+#source: a.s
+#as: -x
+#ld: -m mmo
+#objdump: -dr
+
+.*: file format mmo
+
+Disassembly of section \.text:
+
+0+ <(Main|_start)>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <jumpa>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f0ffffff jmp 4000004 <a>
+ c: fd000000 swym 0,0,0
+ 10: fd000000 swym 0,0,0
+ 14: fd000000 swym 0,0,0
+ 18: fd000000 swym 0,0,0
+ 1c: e3fd0003 setl \$253,0x3
+ \.\.\.
+
+0+4000004 <a>:
+ 4000004: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/jumpa.s b/binutils-2.21/ld/testsuite/ld-mmix/jumpa.s
new file mode 100644
index 0000000..16ba54b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/jumpa.s
@@ -0,0 +1,7 @@
+* Just jump to an external symbol, with some padding.
+ .text
+ .global jumpa
+jumpa:
+ SET $253,2
+ JMP a
+ SET $253,3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/jumpa12b.d b/binutils-2.21/ld/testsuite/ld-mmix/jumpa12b.d
new file mode 100644
index 0000000..8efe690
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/jumpa12b.d
@@ -0,0 +1,26 @@
+#source: start.s
+#source: a.s
+#source: pad2p26m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pad4.s
+#source: jumpa.s
+#as: -no-expand
+#ld: -m mmo
+#objdump: -dr
+
+.*: file format mmo
+
+Disassembly of section \.text:
+
+0+ <(Main|_start)>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <a>:
+ 4: e3fd0004 setl \$253,0x4
+ \.\.\.
+
+0+4000000 <jumpa>:
+ 4000000: e3fd0002 setl \$253,0x2
+ 4000004: f1000000 jmp 4 <a>
+ 4000008: e3fd0003 setl \$253,0x3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/jumpa12f.d b/binutils-2.21/ld/testsuite/ld-mmix/jumpa12f.d
new file mode 100644
index 0000000..6e2968f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/jumpa12f.d
@@ -0,0 +1,25 @@
+#source: start.s
+#source: jumpa.s
+#source: pad2p26m32.s
+#source: pad16.s
+#source: pad4.s
+#source: a.s
+#as: -no-expand
+#ld: -m mmo
+#objdump: -dr
+
+.*: file format mmo
+
+Disassembly of section \.text:
+
+0+ <(Main|_start)>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <jumpa>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f0ffffff jmp 4000004 <a>
+ c: e3fd0003 setl \$253,0x3
+ \.\.\.
+
+0+4000004 <a>:
+ 4000004: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/jumpa13b.d b/binutils-2.21/ld/testsuite/ld-mmix/jumpa13b.d
new file mode 100644
index 0000000..bda81e3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/jumpa13b.d
@@ -0,0 +1,31 @@
+#source: start.s
+#source: a.s
+#source: pad2p26m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pad4.s
+#source: pad4.s
+#source: jumpa.s
+#as: -x
+#ld: -m mmo
+#objdump: -dr
+
+.*: file format mmo
+
+Disassembly of section \.text:
+
+0+ <(Main|_start)>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <a>:
+ 4: e3fd0004 setl \$253,0x4
+ \.\.\.
+
+0+4000004 <jumpa>:
+ 4000004: e3fd0002 setl \$253,0x2
+ 4000008: e3ff0004 setl \$255,0x4
+ 400000c: e6ff0000 incml \$255,0x0
+ 4000010: e5ff0000 incmh \$255,0x0
+ 4000014: e4ff0000 inch \$255,0x0
+ 4000018: 9fffff00 go \$255,\$255,0
+ 400001c: e3fd0003 setl \$253,0x3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/jumpa13f.d b/binutils-2.21/ld/testsuite/ld-mmix/jumpa13f.d
new file mode 100644
index 0000000..335d7ab
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/jumpa13f.d
@@ -0,0 +1,29 @@
+#source: start.s
+#source: jumpa.s
+#source: pad2p26m32.s
+#source: pad4.s
+#source: pad4.s
+#source: a.s
+#as: -x
+#ld: -m mmo
+#objdump: -dr
+
+.*: file format mmo
+
+Disassembly of section \.text:
+
+0+ <(Main|_start)>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <jumpa>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: e3ff0008 setl \$255,0x8
+ c: e6ff0400 incml \$255,0x400
+ 10: e5ff0000 incmh \$255,0x0
+ 14: e4ff0000 inch \$255,0x0
+ 18: 9fffff00 go \$255,\$255,0
+ 1c: e3fd0003 setl \$253,0x3
+ \.\.\.
+
+0+4000008 <a>:
+ 4000008: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/jumpa14b.d b/binutils-2.21/ld/testsuite/ld-mmix/jumpa14b.d
new file mode 100644
index 0000000..006e1bd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/jumpa14b.d
@@ -0,0 +1,11 @@
+#source: start.s
+#source: a.s
+#source: pad2p26m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pad4.s
+#source: pad4.s
+#source: jumpa.s
+#as: -no-expand
+#ld: -m mmo
+#error: relocation truncated to fit: R_MMIX_ADDR27 against `a'$
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/jumpa14f.d b/binutils-2.21/ld/testsuite/ld-mmix/jumpa14f.d
new file mode 100644
index 0000000..bcf7504
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/jumpa14f.d
@@ -0,0 +1,10 @@
+#source: start.s
+#source: jumpa.s
+#source: pad2p26m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pad4.s
+#source: a.s
+#as: -no-expand
+#ld: -m mmo
+#error: relocation truncated to fit: R_MMIX_ADDR27 against `a'$
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/loc1.d b/binutils-2.21/ld/testsuite/ld-mmix/loc1.d
new file mode 100644
index 0000000..cac2689
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/loc1.d
@@ -0,0 +1,19 @@
+#source: loc1.s
+#ld: -e loc1 -m elf64mmix
+#objdump: -str
+
+# Single text file.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+1000 l d \.text 0+ (|\.text)
+0+1000 g \.text 0+ loc1
+0+1000 g \*ABS\* 0+ __\.MMIX\.start\.\.text
+2000000000000000 g \*ABS\* 0+ __bss_start
+2000000000000000 g \*ABS\* 0+ _edata
+2000000000000000 g \*ABS\* 0+ _end
+0+1000 g \.text 0+ _start\.
+
+Contents of section \.text:
+ 1000 fd030303 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/loc1.s b/binutils-2.21/ld/testsuite/ld-mmix/loc1.s
new file mode 100644
index 0000000..d420650
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/loc1.s
@@ -0,0 +1,3 @@
+ LOC #1000
+loc1 SWYM 3,3,3
+ .global loc1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/loc10.d b/binutils-2.21/ld/testsuite/ld-mmix/loc10.d
new file mode 100644
index 0000000..84180b4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/loc10.d
@@ -0,0 +1,13 @@
+#ld: -m elf64mmix --defsym __.MMIX.start..text=0x8000000000000000
+#objdump: -str
+
+# Setting file start through the special symbol.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+#...
+8000000000000000 g \*ABS\* 0+ __\.MMIX\.start\.\.text
+#...
+Contents of section \.text:
+ 8000000000000000 f4000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/loc10.s b/binutils-2.21/ld/testsuite/ld-mmix/loc10.s
new file mode 100644
index 0000000..3d139d3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/loc10.s
@@ -0,0 +1 @@
+Boot GETA $0,Boot %set dynamic- and forced-trap handler
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/loc10m.d b/binutils-2.21/ld/testsuite/ld-mmix/loc10m.d
new file mode 100644
index 0000000..509f151
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/loc10m.d
@@ -0,0 +1,10 @@
+#source: loc10.s
+#ld: -m mmo --defsym __.MMIX.start..text=0x8000000000000000
+#objdump: -str
+
+# Setting file start through the special symbol, mmo version.
+
+.*: file format mmo
+#...
+Contents of section \.text:
+ 8000000000000000 f4000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/loc1m.d b/binutils-2.21/ld/testsuite/ld-mmix/loc1m.d
new file mode 100644
index 0000000..9721bcb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/loc1m.d
@@ -0,0 +1,14 @@
+#source: loc1.s
+#ld: -m mmo -e loc1
+#objdump: -str
+
+# err: two locs.
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+1000 g \.text Main
+0+1000 g \.text loc1
+
+Contents of section \.text:
+ 1000 fd030303 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/loc2.d b/binutils-2.21/ld/testsuite/ld-mmix/loc2.d
new file mode 100644
index 0000000..7d44c22
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/loc2.d
@@ -0,0 +1,21 @@
+#source: loc1.s
+#source: start.s
+#ld: -m elf64mmix
+#objdump: -str
+
+# Two text files.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+1000 l d \.text 0+ (|\.text)
+0+1004 g \.text 0+ _start
+0+1000 g \.text 0+ loc1
+0+1000 g \*ABS\* 0+ __\.MMIX\.start\.\.text
+2000000000000000 g \*ABS\* 0+ __bss_start
+2000000000000000 g \*ABS\* 0+ _edata
+2000000000000000 g \*ABS\* 0+ _end
+0+1004 g \.text 0+ _start\.
+
+Contents of section \.text:
+ 1000 fd030303 e3fd0001 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/loc2.s b/binutils-2.21/ld/testsuite/ld-mmix/loc2.s
new file mode 100644
index 0000000..1c25693
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/loc2.s
@@ -0,0 +1,3 @@
+ LOC #2000
+loc2 SWYM 3,2,3
+ .global loc2
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/loc2m.d b/binutils-2.21/ld/testsuite/ld-mmix/loc2m.d
new file mode 100644
index 0000000..4d62b24
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/loc2m.d
@@ -0,0 +1,14 @@
+#source: loc1.s
+#source: start.s
+#ld: -m mmo
+#objdump: -str
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+1004 g \.text Main
+0+1004 g \.text _start
+0+1000 g \.text loc1
+
+Contents of section \.text:
+ 1000 fd030303 e3fd0001 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/loc3.d b/binutils-2.21/ld/testsuite/ld-mmix/loc3.d
new file mode 100644
index 0000000..ff0fe8a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/loc3.d
@@ -0,0 +1,21 @@
+#source: start.s
+#source: loc1.s
+#ld: -m elf64mmix
+#objdump: -str
+
+# Two text files in opposite order.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+1000 l d \.text 0+ (|\.text)
+0+1000 g \.text 0+ _start
+0+1004 g \.text 0+ loc1
+0+1000 g \*ABS\* 0+ __\.MMIX\.start\.\.text
+2000000000000000 g \*ABS\* 0+ __bss_start
+2000000000000000 g \*ABS\* 0+ _edata
+2000000000000000 g \*ABS\* 0+ _end
+0+1000 g \.text 0+ _start\.
+
+Contents of section \.text:
+ 1000 e3fd0001 fd030303 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/loc3m.d b/binutils-2.21/ld/testsuite/ld-mmix/loc3m.d
new file mode 100644
index 0000000..928ac9e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/loc3m.d
@@ -0,0 +1,14 @@
+#source: start.s
+#source: loc1.s
+#ld: -m mmo
+#objdump: -str
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+1000 g \.text Main
+0+1000 g \.text _start
+0+1004 g \.text loc1
+
+Contents of section \.text:
+ 1000 e3fd0001 fd030303 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/loc4.d b/binutils-2.21/ld/testsuite/ld-mmix/loc4.d
new file mode 100644
index 0000000..34428a9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/loc4.d
@@ -0,0 +1,28 @@
+#source: loc1.s
+#source: data1.s
+#source: start.s
+#ld: -m elf64mmix
+#objdump: -str
+
+# Two text files and one data.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+1000 l d \.text 0+ (|\.text)
+2000000000000000 l d \.data 0+ (|\.data)
+2000000000000000 l \.data 0+ xx
+0+1004 g F \.text 0+ Main
+2000000000000000 g \*ABS\* 0+ __\.MMIX\.start\.\.data
+0+1004 g \.text 0+ _start
+0+1000 g \.text 0+ loc1
+0+1000 g \*ABS\* 0+ __\.MMIX\.start\.\.text
+2000000000000008 g \*ABS\* 0+ __bss_start
+2000000000000008 g \*ABS\* 0+ _edata
+2000000000000008 g \*ABS\* 0+ _end
+0+1004 g \.text 0+ _start\.
+
+Contents of section \.text:
+ 1000 fd030303 e3fd0001 .*
+Contents of section \.data:
+ 2000000000000000 00000000 00001030 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/loc4m.d b/binutils-2.21/ld/testsuite/ld-mmix/loc4m.d
new file mode 100644
index 0000000..40a4f97
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/loc4m.d
@@ -0,0 +1,17 @@
+#source: loc1.s
+#source: data1.s
+#source: start.s
+#ld: -m mmo
+#objdump: -str
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+1004 g \.text Main
+0+1004 g \.text _start
+0+1000 g \.text loc1
+
+Contents of section \.text:
+ 1000 fd030303 e3fd0001 .*
+Contents of section \.data:
+ 2000000000000004 00001030 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/loc5.d b/binutils-2.21/ld/testsuite/ld-mmix/loc5.d
new file mode 100644
index 0000000..089c155
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/loc5.d
@@ -0,0 +1,6 @@
+#source: loc1.s
+#source: start.s
+#source: loc2.s
+#ld: -m elf64mmix
+#objdump: -str
+#error: multiple definition of `__\.MMIX\.start\.\.text'
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/loc5m.d b/binutils-2.21/ld/testsuite/ld-mmix/loc5m.d
new file mode 100644
index 0000000..8fedb1c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/loc5m.d
@@ -0,0 +1,6 @@
+#source: loc1.s
+#source: start.s
+#source: loc2.s
+#ld: -m mmo
+#objdump: -str
+#error: multiple definition of `__\.MMIX\.start\.\.text'
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/loc6.d b/binutils-2.21/ld/testsuite/ld-mmix/loc6.d
new file mode 100644
index 0000000..425edae
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/loc6.d
@@ -0,0 +1,24 @@
+#source: dloc1.s
+#source: start.s
+#ld: -m elf64mmix
+#objdump: -str
+
+# Text files and one loc:ed data at offset.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+ l d \.text 0+ (|\.text)
+2000000000000200 l d \.data 0+ (|\.data)
+2000000000000200 g \.data 0+ dloc1
+2000000000000200 g \*ABS\* 0+ __\.MMIX\.start\.\.data
+0+ g \.text 0+ _start
+200000000000020c g \*ABS\* 0+ __bss_start
+200000000000020c g \*ABS\* 0+ _edata
+2000000000000210 g \*ABS\* 0+ _end
+0+ g \.text 0+ _start\.
+
+Contents of section \.text:
+ 0000 e3fd0001 .*
+Contents of section \.data:
+ 2000000000000200 00000004 00000005 00000006 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/loc6m.d b/binutils-2.21/ld/testsuite/ld-mmix/loc6m.d
new file mode 100644
index 0000000..b2a58a7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/loc6m.d
@@ -0,0 +1,18 @@
+#source: dloc1.s
+#source: start.s
+#ld: -m mmo
+#objdump: -str
+
+# Text files and one loc:ed data at offset.
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+ g \.text Main
+2000000000000200 g \.data dloc1
+0+ g \.text _start
+
+Contents of section \.text:
+ 0000 e3fd0001 .*
+Contents of section \.data:
+ 2000000000000200 00000004 00000005 00000006 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/loc7.d b/binutils-2.21/ld/testsuite/ld-mmix/loc7.d
new file mode 100644
index 0000000..b980f61
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/loc7.d
@@ -0,0 +1,6 @@
+#source: dloc1.s
+#source: start.s
+#source: dloc2.s
+#ld: -m elf64mmix
+#objdump: -str
+#error: multiple definition of `__\.MMIX\.start\.\.data'
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/loc7m.d b/binutils-2.21/ld/testsuite/ld-mmix/loc7m.d
new file mode 100644
index 0000000..be8115f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/loc7m.d
@@ -0,0 +1,6 @@
+#source: dloc1.s
+#source: start.s
+#source: dloc2.s
+#ld: -m mmo
+#objdump: -str
+#error: multiple definition of `__\.MMIX\.start\.\.data'
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/loc8.d b/binutils-2.21/ld/testsuite/ld-mmix/loc8.d
new file mode 100644
index 0000000..ac68990
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/loc8.d
@@ -0,0 +1,13 @@
+#ld: -m elf64mmix
+#objdump: -str
+
+# Setting file start through the special symbol, in-source.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+#...
+8000000000000000 g \*ABS\* 0+ __\.MMIX\.start\.\.text
+#...
+Contents of section \.text:
+ 8000000000000000 f4000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/loc8.s b/binutils-2.21/ld/testsuite/ld-mmix/loc8.s
new file mode 100644
index 0000000..28592f9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/loc8.s
@@ -0,0 +1,3 @@
+ .globl __.MMIX.start..text
+ .set __.MMIX.start..text,0x8000000000000000
+Boot GETA $0,Boot %set dynamic- and forced-trap handler
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/loc8m.d b/binutils-2.21/ld/testsuite/ld-mmix/loc8m.d
new file mode 100644
index 0000000..52fb079
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/loc8m.d
@@ -0,0 +1,10 @@
+#source: loc8.s
+#ld: -m mmo
+#objdump: -str
+
+# Setting file start through the special symbol, in-source, mmo version.
+
+.*: file format mmo
+#...
+Contents of section \.text:
+ 8000000000000000 f4000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/loc9.d b/binutils-2.21/ld/testsuite/ld-mmix/loc9.d
new file mode 100644
index 0000000..458fef6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/loc9.d
@@ -0,0 +1,13 @@
+#ld: -m elf64mmix
+#objdump: -str
+
+# Setting file start through the LOC pseudo, see PR 6607.
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+#...
+8000000000000000 g \*ABS\* 0+ __\.MMIX\.start\.\.text
+#...
+Contents of section \.text:
+ 8000000000000000 f4000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/loc9.s b/binutils-2.21/ld/testsuite/ld-mmix/loc9.s
new file mode 100644
index 0000000..99a5c5d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/loc9.s
@@ -0,0 +1,3 @@
+ LOC #8000000000000000
+Boot GETA $0,Boot %set dynamic- and forced-trap handler
+ .globl Boot
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/loc9m.d b/binutils-2.21/ld/testsuite/ld-mmix/loc9m.d
new file mode 100644
index 0000000..be2beff
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/loc9m.d
@@ -0,0 +1,14 @@
+#source: loc9.s
+#ld: -e Boot -m mmo
+#objdump: -str
+
+# Setting file start through the LOC pseudo, see PR 6607, mmo version.
+
+.*: file format mmo
+
+SYMBOL TABLE:
+#...
+8000000000000000 g \.text Boot
+#...
+Contents of section \.text:
+ 8000000000000000 f4000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/local1.d b/binutils-2.21/ld/testsuite/ld-mmix/local1.d
new file mode 100644
index 0000000..3899f74
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/local1.d
@@ -0,0 +1,48 @@
+#source: greg-4.s
+#source: greg-4.s
+#source: local1.s
+#source: regext1.s
+#source: start.s
+#ld: -m elf64mmix
+#readelf: -Ssx1 -x2
+
+# We check that the externally visible symbol ext1 is a local register
+# (different meaning of "local" than for symbol), which can be seen as
+# somewhat twisted.
+
+There are 6 section headers, starting at offset 0xc8:
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +Offset
+ +Size +EntSize +Flags +Link +Info +Align
+ +\[ 0\] +NULL +0+ +0+
+ +0+ +0+ +0 +0 +0
+ +\[ 1\] \.text +PROGBITS +0+ +0+78
+ +0+8 +0+ +AX +0 +0 +4
+ +\[ 2\] \.MMIX\.reg_content PROGBITS +0+7e8 +0+80
+ +0+10 +0+ +W +0 +0 +1
+ +\[ 3\] \.shstrtab +STRTAB +0+ +0+90
+ +0+34 +0+ +0 +0 +1
+ +\[ 4\] \.symtab +SYMTAB +0+ +0+248
+ +0+108 +0+18 +5 +5 +8
+ +\[ 5\] \.strtab +STRTAB +0+ +0+350
+ +0+32 +0+ +0 +0 +1
+Key to Flags:
+#...
+
+Symbol table '\.symtab' contains 11 entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +0: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND
+ +1: 0+ +0 +SECTION +LOCAL +DEFAULT +1
+ +2: 0+7e8 +0 +SECTION +LOCAL +DEFAULT +2
+ +3: 0+fd +0 +NOTYPE +LOCAL +DEFAULT +PRC\[0xff00\] lsym
+ +4: 0+fe +0 +NOTYPE +LOCAL +DEFAULT +PRC\[0xff00\] lsym
+ +5: 0+fc +0 +NOTYPE +GLOBAL +DEFAULT +PRC\[0xff00\] ext1
+ +6: 0+4 +0 +NOTYPE +GLOBAL +DEFAULT +1 _start
+#...
+
+Hex dump of section '\.text':
+ 0x0+ fd030201 e3fd0001 .*
+
+Hex dump of section '\.MMIX\.reg_contents':
+ 0x0+7e8 00000000 0000004e 00000000 0000004e .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/local1.s b/binutils-2.21/ld/testsuite/ld-mmix/local1.s
new file mode 100644
index 0000000..47bf390
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/local1.s
@@ -0,0 +1,2 @@
+ LOCAL ext1
+ SWYM 3,2,1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/local10.d b/binutils-2.21/ld/testsuite/ld-mmix/local10.d
new file mode 100644
index 0000000..f276405
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/local10.d
@@ -0,0 +1,5 @@
+#source: local1.s
+#source: ext1g.s
+#source: start.s
+#ld: -m elf64mmix
+#error: 254 is not a local register
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/local10m.d b/binutils-2.21/ld/testsuite/ld-mmix/local10m.d
new file mode 100644
index 0000000..9095d74
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/local10m.d
@@ -0,0 +1,5 @@
+#source: local1.s
+#source: ext1g.s
+#source: start.s
+#ld: -m mmo
+#error: 254 is not a local register
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/local11.d b/binutils-2.21/ld/testsuite/ld-mmix/local11.d
new file mode 100644
index 0000000..761cea0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/local11.d
@@ -0,0 +1,6 @@
+#source: local1.s
+#source: greg-1.s
+#source: ext1l.s
+#source: start.s
+#ld: -m elf64mmix
+#error: valid only with a register or absolute value
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/local11m.d b/binutils-2.21/ld/testsuite/ld-mmix/local11m.d
new file mode 100644
index 0000000..b6952a7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/local11m.d
@@ -0,0 +1,6 @@
+#source: local1.s
+#source: greg-1.s
+#source: ext1l.s
+#source: start.s
+#ld: -m mmo
+#error: valid only with a register or absolute value
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/local12.d b/binutils-2.21/ld/testsuite/ld-mmix/local12.d
new file mode 100644
index 0000000..2dd1eb4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/local12.d
@@ -0,0 +1,16 @@
+#source: local1.s
+#source: ext1-254.s
+#source: start.s
+#ld: -m elf64mmix
+#objdump: -shr
+
+# Check that 254 is local when we don't have any registers.
+
+.*: file format elf64-mmix
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0+8 0+ 0+ 0+78 2\*\*2
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+Contents of section \.text:
+ 0000 fd030201 e3fd0001 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/local12m.d b/binutils-2.21/ld/testsuite/ld-mmix/local12m.d
new file mode 100644
index 0000000..2cfb701
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/local12m.d
@@ -0,0 +1,16 @@
+#source: local1.s
+#source: ext1-254.s
+#source: start.s
+#ld: -m mmo
+#objdump: -shr
+
+# Check that 254 is local when we don't have any registers.
+
+.*: file format mmo
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0+8 0+ 0+ 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, CODE
+Contents of section \.text:
+ 0000 fd030201 e3fd0001 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/local1m.d b/binutils-2.21/ld/testsuite/ld-mmix/local1m.d
new file mode 100644
index 0000000..a5c63e7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/local1m.d
@@ -0,0 +1,19 @@
+#source: greg-4.s
+#source: greg-4.s
+#source: local1.s
+#source: regext1.s
+#source: start.s
+#ld: -m mmo
+#objdump: -str
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+4 g \.text Main
+0+fc g \*REG\* ext1
+0+4 g \.text _start
+
+Contents of section \.text:
+ 0000 fd030201 e3fd0001 .*
+Contents of section \.MMIX\.reg_contents:
+ 07e8 00000000 0000004e 00000000 0000004e .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/local2.d b/binutils-2.21/ld/testsuite/ld-mmix/local2.d
new file mode 100644
index 0000000..e5ad203
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/local2.d
@@ -0,0 +1,8 @@
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: local1.s
+#source: regext1.s
+#source: start.s
+#ld: -m elf64mmix
+#error: not a local register
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/local2.s b/binutils-2.21/ld/testsuite/ld-mmix/local2.s
new file mode 100644
index 0000000..9d2c329
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/local2.s
@@ -0,0 +1,2 @@
+ LOCAL 128
+ SWYM 2,2,2
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/local2m.d b/binutils-2.21/ld/testsuite/ld-mmix/local2m.d
new file mode 100644
index 0000000..6e88936
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/local2m.d
@@ -0,0 +1,8 @@
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: local1.s
+#source: regext1.s
+#source: start.s
+#ld: -m mmo
+#error: not a local register
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/local3.d b/binutils-2.21/ld/testsuite/ld-mmix/local3.d
new file mode 100644
index 0000000..cebdf09
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/local3.d
@@ -0,0 +1,46 @@
+#source: greg-4.s
+#source: greg-4.s
+#source: local1.s
+#source: ext1.s
+#source: start.s
+#ld: -m elf64mmix
+#readelf: -Ssx1 -x2
+
+# Like local1, but ext1 is here a constant, not a global register.
+
+There are 6 section headers, starting at offset 0xc8:
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +Offset
+ +Size +EntSize +Flags +Link +Info +Align
+ +\[ 0\] +NULL +0+ +0+
+ +0+ +0+ +0 +0 +0
+ +\[ 1\] \.text +PROGBITS +0+ +0+78
+ +0+8 +0+ +AX +0 +0 +4
+ +\[ 2\] \.MMIX\.reg_content PROGBITS +0+7e8 +0+80
+ +0+10 +0+ +W +0 +0 +1
+ +\[ 3\] \.shstrtab +STRTAB +0+ +0+90
+ +0+34 +0+ +0 +0 +1
+ +\[ 4\] \.symtab +SYMTAB +0+ +0+248
+ +0+108 +0+18 +5 +5 +8
+ +\[ 5\] \.strtab +STRTAB +0+ +0+350
+ +0+32 +0+ +0 +0 +1
+Key to Flags:
+#...
+
+Symbol table '\.symtab' contains 11 entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +0: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND
+ +1: 0+ +0 +SECTION +LOCAL +DEFAULT +1
+ +2: 0+7e8 +0 +SECTION +LOCAL +DEFAULT +2
+ +3: 0+fd +0 +NOTYPE +LOCAL +DEFAULT +PRC\[0xff00\] lsym
+ +4: 0+fe +0 +NOTYPE +LOCAL +DEFAULT +PRC\[0xff00\] lsym
+ +5: 0+fc +0 +NOTYPE +GLOBAL +DEFAULT +ABS ext1
+ +6: 0+4 +0 +NOTYPE +GLOBAL +DEFAULT +1 _start
+#...
+
+Hex dump of section '\.text':
+ 0x0+ fd030201 e3fd0001 .*
+
+Hex dump of section '\.MMIX\.reg_contents':
+ 0x0+7e8 00000000 0000004e 00000000 0000004e .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/local3m.d b/binutils-2.21/ld/testsuite/ld-mmix/local3m.d
new file mode 100644
index 0000000..2143d70
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/local3m.d
@@ -0,0 +1,19 @@
+#source: greg-4.s
+#source: greg-4.s
+#source: local1.s
+#source: ext1.s
+#source: start.s
+#ld: -m mmo
+#objdump: -str
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+4 g \.text Main
+0+fc g \*ABS\* ext1
+0+4 g \.text _start
+
+Contents of section \.text:
+ 0000 fd030201 e3fd0001 .*
+Contents of section \.MMIX\.reg_contents:
+ 07e8 00000000 0000004e 00000000 0000004e .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/local4.d b/binutils-2.21/ld/testsuite/ld-mmix/local4.d
new file mode 100644
index 0000000..13fa8e6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/local4.d
@@ -0,0 +1,8 @@
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: local1.s
+#source: ext1.s
+#source: start.s
+#ld: -m elf64mmix
+#error: not a local register
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/local4m.d b/binutils-2.21/ld/testsuite/ld-mmix/local4m.d
new file mode 100644
index 0000000..d18cb20
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/local4m.d
@@ -0,0 +1,8 @@
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: local1.s
+#source: ext1.s
+#source: start.s
+#ld: -m mmo
+#error: is not a local register
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/local5.d b/binutils-2.21/ld/testsuite/ld-mmix/local5.d
new file mode 100644
index 0000000..ee60297
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/local5.d
@@ -0,0 +1,47 @@
+#source: greg-4.s
+#source: greg-4.s
+#source: local2.s
+#source: local1.s
+#source: regext1.s
+#source: start.s
+#ld: -m elf64mmix
+#readelf: -Ssx1 -x2
+
+# Like local1, but with two checks for a local register.
+
+There are 6 section headers, starting at offset 0xc8:
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +Offset
+ +Size +EntSize +Flags +Link +Info +Align
+ +\[ 0\] +NULL +0+ +0+
+ +0+ +0+ +0 +0 +0
+ +\[ 1\] \.text +PROGBITS +0+ +0+78
+ +0+c +0+ +AX +0 +0 +4
+ +\[ 2\] \.MMIX\.reg_content PROGBITS +0+7e8 +0+84
+ +0+10 +0+ +W +0 +0 +1
+ +\[ 3\] \.shstrtab +STRTAB +0+ +0+94
+ +0+34 +0+ +0 +0 +1
+ +\[ 4\] \.symtab +SYMTAB +0+ +0+248
+ +0+108 +0+18 +5 +5 +8
+ +\[ 5\] \.strtab +STRTAB +0+ +0+350
+ +0+32 +0+ +0 +0 +1
+Key to Flags:
+#...
+
+Symbol table '\.symtab' contains 11 entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +0: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND
+ +1: 0+ +0 +SECTION +LOCAL +DEFAULT +1
+ +2: 0+7e8 +0 +SECTION +LOCAL +DEFAULT +2
+ +3: 0+fd +0 +NOTYPE +LOCAL +DEFAULT +PRC\[0xff00\] lsym
+ +4: 0+fe +0 +NOTYPE +LOCAL +DEFAULT +PRC\[0xff00\] lsym
+ +5: 0+fc +0 +NOTYPE +GLOBAL +DEFAULT +PRC\[0xff00\] ext1
+ +6: 0+8 +0 +NOTYPE +GLOBAL +DEFAULT +1 _start
+#...
+
+Hex dump of section '\.text':
+ 0x0+ fd020202 fd030201 e3fd0001 .*
+
+Hex dump of section '\.MMIX\.reg_contents':
+ 0x0+7e8 00000000 0000004e 00000000 0000004e .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/local5m.d b/binutils-2.21/ld/testsuite/ld-mmix/local5m.d
new file mode 100644
index 0000000..6b4c89b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/local5m.d
@@ -0,0 +1,21 @@
+#source: greg-4.s
+#source: greg-4.s
+#source: local2.s
+#source: local1.s
+#source: regext1.s
+#source: start.s
+#ld: -m mmo
+#objdump: -str
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+8 g \.text Main
+0+fc g \*REG\* ext1
+0+8 g \.text _start
+
+
+Contents of section \.text:
+ 0000 fd020202 fd030201 e3fd0001 .*
+Contents of section \.MMIX\.reg_contents:
+ 07e8 00000000 0000004e 00000000 0000004e .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/local6.d b/binutils-2.21/ld/testsuite/ld-mmix/local6.d
new file mode 100644
index 0000000..b2ed1ed
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/local6.d
@@ -0,0 +1,9 @@
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: local1.s
+#source: local2.s
+#source: ext1.s
+#source: start.s
+#ld: -m elf64mmix
+#error: not a local register
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/local6m.d b/binutils-2.21/ld/testsuite/ld-mmix/local6m.d
new file mode 100644
index 0000000..be64ca2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/local6m.d
@@ -0,0 +1,9 @@
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: local1.s
+#source: local2.s
+#source: ext1.s
+#source: start.s
+#ld: -m mmo
+#error: not a local register
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/local7.d b/binutils-2.21/ld/testsuite/ld-mmix/local7.d
new file mode 100644
index 0000000..bc2cd6c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/local7.d
@@ -0,0 +1,48 @@
+#source: greg-4.s
+#source: greg-4.s
+#source: local1.s
+#source: local2.s
+#source: ext1.s
+#source: start.s
+#ld: -m elf64mmix
+#readelf: -Ssx1 -x2
+
+# Like local1, but ext1 is here a constant, not a global register and two
+# local-register checks.
+
+There are 6 section headers, starting at offset 0xc8:
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +Offset
+ +Size +EntSize +Flags +Link +Info +Align
+ +\[ 0\] +NULL +0+ +0+
+ +0+ +0+ +0 +0 +0
+ +\[ 1\] \.text +PROGBITS +0+ +0+78
+ +0+c +0+ +AX +0 +0 +4
+ +\[ 2\] \.MMIX\.reg_content PROGBITS +0+7e8 +0+84
+ +0+10 +0+ +W +0 +0 +1
+ +\[ 3\] \.shstrtab +STRTAB +0+ +0+94
+ +0+34 +0+ +0 +0 +1
+ +\[ 4\] \.symtab +SYMTAB +0+ +0+248
+ +0+108 +0+18 +5 +5 +8
+ +\[ 5\] \.strtab +STRTAB +0+ +0+350
+ +0+32 +0+ +0 +0 +1
+Key to Flags:
+#...
+
+Symbol table '\.symtab' contains 11 entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +0: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND
+ +1: 0+ +0 +SECTION +LOCAL +DEFAULT +1
+ +2: 0+7e8 +0 +SECTION +LOCAL +DEFAULT +2
+ +3: 0+fd +0 +NOTYPE +LOCAL +DEFAULT +PRC\[0xff00\] lsym
+ +4: 0+fe +0 +NOTYPE +LOCAL +DEFAULT +PRC\[0xff00\] lsym
+ +5: 0+fc +0 +NOTYPE +GLOBAL +DEFAULT +ABS ext1
+ +6: 0+8 +0 +NOTYPE +GLOBAL +DEFAULT +1 _start
+#...
+
+Hex dump of section '\.text':
+ 0x0+ fd030201 fd020202 e3fd0001 .*
+
+Hex dump of section '\.MMIX\.reg_contents':
+ 0x0+7e8 00000000 0000004e 00000000 0000004e .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/local7m.d b/binutils-2.21/ld/testsuite/ld-mmix/local7m.d
new file mode 100644
index 0000000..8277a94
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/local7m.d
@@ -0,0 +1,20 @@
+#source: greg-4.s
+#source: greg-4.s
+#source: local1.s
+#source: local2.s
+#source: ext1.s
+#source: start.s
+#ld: -m mmo
+#objdump: -str
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+8 g \.text Main
+0+fc g \*ABS\* ext1
+0+8 g \.text _start
+
+Contents of section \.text:
+ 0000 fd030201 fd020202 e3fd0001 .*
+Contents of section \.MMIX\.reg_contents:
+ 07e8 00000000 0000004e 00000000 0000004e .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/local8.d b/binutils-2.21/ld/testsuite/ld-mmix/local8.d
new file mode 100644
index 0000000..f82e6d0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/local8.d
@@ -0,0 +1,28 @@
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: local2.s
+#source: local1.s
+#source: ext1.s
+#source: start.s
+#ld: -m elf64mmix
+#error: 128 is not a local register
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/local8m.d b/binutils-2.21/ld/testsuite/ld-mmix/local8m.d
new file mode 100644
index 0000000..4e07afe
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/local8m.d
@@ -0,0 +1,28 @@
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-5.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: greg-4.s
+#source: local2.s
+#source: local1.s
+#source: ext1.s
+#source: start.s
+#ld: -m mmo
+#error: 128 is not a local register
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/local9.d b/binutils-2.21/ld/testsuite/ld-mmix/local9.d
new file mode 100644
index 0000000..cc4f8c7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/local9.d
@@ -0,0 +1,5 @@
+#source: local1.s
+#source: ext1l.s
+#source: start.s
+#ld: -m elf64mmix
+#error: valid only with a register or absolute value
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/local9m.d b/binutils-2.21/ld/testsuite/ld-mmix/local9m.d
new file mode 100644
index 0000000..7842984
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/local9m.d
@@ -0,0 +1,5 @@
+#source: local1.s
+#source: ext1l.s
+#source: start.s
+#ld: -m mmo
+#error: valid only with a register or absolute value
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/locdo-1.d b/binutils-2.21/ld/testsuite/ld-mmix/locdo-1.d
new file mode 100644
index 0000000..4a16735
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/locdo-1.d
@@ -0,0 +1,23 @@
+#source: locdo.s -globalize-symbols
+#source: start.s
+#ld: -m elf64mmix
+#objdump: -str
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+ l d \.text 0+ (|\.text)
+2000000000000008 l d \.data 0+ (|\.data)
+2000000000000008 g \*ABS\* 0+ __\.MMIX\.start\.\.data
+2000000000000008 g \.data 0+ od
+0+ g \.text 0+ _start
+2000000000000010 g \*ABS\* 0+ __bss_start
+2000000000000000 g \*ABS\* 0+ Data_Segment
+2000000000000010 g \*ABS\* 0+ _edata
+2000000000000010 g \*ABS\* 0+ _end
+0+ g \.text 0+ _start\.
+
+Contents of section \.text:
+ 0000 e3fd0001 .*
+Contents of section \.data:
+ 2000000000000008 20000000 00000008 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/locdo.s b/binutils-2.21/ld/testsuite/ld-mmix/locdo.s
new file mode 100644
index 0000000..3402445
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/locdo.s
@@ -0,0 +1,2 @@
+ LOC Data_Segment+2
+od OCTA od
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/loct-1.d b/binutils-2.21/ld/testsuite/ld-mmix/loct-1.d
new file mode 100644
index 0000000..24f4112
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/loct-1.d
@@ -0,0 +1,19 @@
+#source: loct.s
+#source: start.s
+#ld: -m elf64mmix
+#objdump: -str
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+1004 l d \.text 0+ (|\.text)
+0+1004 l \.text 0+ t
+0+100c g \.text 0+ _start
+0+1004 g \*ABS\* 0+ __\.MMIX\.start\.\.text
+2000000000000000 g \*ABS\* 0+ __bss_start
+2000000000000000 g \*ABS\* 0+ _edata
+2000000000000000 g \*ABS\* 0+ _end
+0+100c g \.text 0+ _start\.
+
+Contents of section \.text:
+ 1004 fd000000 00001004 e3fd0001 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/loct.s b/binutils-2.21/ld/testsuite/ld-mmix/loct.s
new file mode 100644
index 0000000..5aaa406
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/loct.s
@@ -0,0 +1,3 @@
+ LOC #1002
+t SWYM
+ TETRA t
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/locto-1.d b/binutils-2.21/ld/testsuite/ld-mmix/locto-1.d
new file mode 100644
index 0000000..5c5c391
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/locto-1.d
@@ -0,0 +1,19 @@
+#source: locto.s -globalize-symbols
+#source: start.s
+#ld: -m elf64mmix
+#objdump: -str
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+1008 l d \.text 0+ (|\.text)
+0+1008 g \.text 0+ od
+0+1010 g \.text 0+ _start
+0+1008 g \*ABS\* 0+ __\.MMIX\.start\.\.text
+2000000000000000 g \*ABS\* 0+ __bss_start
+2000000000000000 g \*ABS\* 0+ _edata
+2000000000000000 g \*ABS\* 0+ _end
+0+1010 g \.text 0+ _start\.
+
+Contents of section \.text:
+ 1008 00000000 00001008 e3fd0001 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/locto.s b/binutils-2.21/ld/testsuite/ld-mmix/locto.s
new file mode 100644
index 0000000..5ffa445
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/locto.s
@@ -0,0 +1,2 @@
+ LOC #1002
+od OCTA od
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/main1.s b/binutils-2.21/ld/testsuite/ld-mmix/main1.s
new file mode 100644
index 0000000..212d1ef
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/main1.s
@@ -0,0 +1,5 @@
+% For tests regarding the Main symbol and mmo. Most tests use start.s as
+% a base file.
+ .text
+Main:
+ SET $253,1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/mmix.exp b/binutils-2.21/ld/testsuite/ld-mmix/mmix.exp
new file mode 100644
index 0000000..e44101e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/mmix.exp
@@ -0,0 +1,35 @@
+# Expect script for ld-mmix tests
+# Copyright 2001, 2005, 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by Hans-Peter Nilsson (hp@bitrange.com)
+#
+
+# Test MMIX and mmo object format handling.
+
+if ![istarget mmix-*-*] {
+ return
+}
+
+set rd_test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
+foreach mmixtest $rd_test_list {
+ # We need to strip the ".d", but can leave the dirname.
+ verbose [file rootname $mmixtest]
+ run_dump_test [file rootname $mmixtest]
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/mmohdr1.ld b/binutils-2.21/ld/testsuite/ld-mmix/mmohdr1.ld
new file mode 100644
index 0000000..716c3f4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/mmohdr1.ld
@@ -0,0 +1,11 @@
+OUTPUT_ARCH(mmix)
+OUTPUT_FORMAT("mmo")
+ENTRY(Main)
+SECTIONS
+{
+ .text 0x100 + sizeof_headers :
+ { *(.text); Main = _start; }
+
+ .MMIX.reg_contents :
+ { *(.MMIX.reg_contents); }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/mmosec1.ld b/binutils-2.21/ld/testsuite/ld-mmix/mmosec1.ld
new file mode 100644
index 0000000..4e7e799
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/mmosec1.ld
@@ -0,0 +1,16 @@
+OUTPUT_ARCH(mmix)
+ENTRY(Main)
+SECTIONS
+{
+ .text 0x100 :
+ { *(.text); Main = _start; }
+
+ .other 0x1000000000000000 :
+ { *(secname); *(anothersec); *(thirdsec); *(.a.fourth.section); }
+
+ .data 0x2000000000000000 :
+ { *(.data); }
+
+ .MMIX.reg_contents :
+ { *(.MMIX.reg_contents); }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/mmosec2.ld b/binutils-2.21/ld/testsuite/ld-mmix/mmosec2.ld
new file mode 100644
index 0000000..57025e2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/mmosec2.ld
@@ -0,0 +1,13 @@
+OUTPUT_ARCH(mmix)
+ENTRY(Main)
+SECTIONS
+{
+ .text 0x1000000000000000 :
+ { *(.text); Main = _start; }
+
+ .data 0x2000000000000000 :
+ { *(.data); }
+
+ .MMIX.reg_contents :
+ { *(.MMIX.reg_contents); }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/nop123.s b/binutils-2.21/ld/testsuite/ld-mmix/nop123.s
new file mode 100644
index 0000000..2d14f43
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/nop123.s
@@ -0,0 +1,3 @@
+# A nop to pad with an explicit insn.
+ .text
+ SWYM 1,2,3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pad16.s b/binutils-2.21/ld/testsuite/ld-mmix/pad16.s
new file mode 100644
index 0000000..7692337
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pad16.s
@@ -0,0 +1,4 @@
+* Padding 16 bytes, suitable for testing relocs together with the larger
+* padding files.
+ .text
+ .space 16,0
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pad2p18m32.s b/binutils-2.21/ld/testsuite/ld-mmix/pad2p18m32.s
new file mode 100644
index 0000000..ede581f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pad2p18m32.s
@@ -0,0 +1,4 @@
+* Padding (1 << 19)/2 - 32 bytes; that is, suitable for testing the
+* short-range relocs.
+ .text
+ .space (1 << 19)/2 - 32,0
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pad2p26m32.s b/binutils-2.21/ld/testsuite/ld-mmix/pad2p26m32.s
new file mode 100644
index 0000000..05f45c8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pad2p26m32.s
@@ -0,0 +1,4 @@
+* Padding (1 << 27)/2 - 32 bytes; that is, suitable for testing the
+* long-range relocs.
+ .text
+ .space (1 << 27)/2 - 32,0
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pad4.s b/binutils-2.21/ld/testsuite/ld-mmix/pad4.s
new file mode 100644
index 0000000..49dbe6d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pad4.s
@@ -0,0 +1,4 @@
+* Padding 16 bytes, suitable for testing relocs together with the larger
+* padding files.
+ .text
+ .space 4,0
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushja.s b/binutils-2.21/ld/testsuite/ld-mmix/pushja.s
new file mode 100644
index 0000000..857ca9d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushja.s
@@ -0,0 +1,7 @@
+* Just PUSHJs to an external symbol, with some padding.
+ .text
+ .global pushja
+pushja:
+ SET $253,2
+ PUSHJ $12,a
+ SET $253,3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushja1b-s.d b/binutils-2.21/ld/testsuite/ld-mmix/pushja1b-s.d
new file mode 100644
index 0000000..ac55651
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushja1b-s.d
@@ -0,0 +1,19 @@
+#source: start.s
+#source: a.s
+#source: pushja.s
+#as: -x
+#ld: -m elf64mmix
+#objdump: -dr
+
+# Like pushja1b but with PUSHJ stub.
+
+.*: file format elf64-mmix
+Disassembly of section \.text:
+0+ <_start>:
+ 0: e3fd0001 setl \$253,0x1
+0+4 <a>:
+ 4: e3fd0004 setl \$253,0x4
+0+8 <pushja>:
+ 8: e3fd0002 setl \$253,0x2
+ c: f30cfffe pushj \$12,4 <a>
+ 10: e3fd0003 setl \$253,0x3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushja1b.d b/binutils-2.21/ld/testsuite/ld-mmix/pushja1b.d
new file mode 100644
index 0000000..b61162f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushja1b.d
@@ -0,0 +1,25 @@
+#source: start.s
+#source: a.s
+#source: pushja.s
+#as: -x --no-pushj-stubs
+#ld: -m elf64mmix
+#objdump: -dr
+
+.*: file format elf64-mmix
+
+Disassembly of section \.text:
+
+0+ <_start>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <a>:
+ 4: e3fd0004 setl \$253,0x4
+
+0+8 <pushja>:
+ 8: e3fd0002 setl \$253,0x2
+ c: e3ff0004 setl \$255,0x4
+ 10: e6ff0000 incml \$255,0x0
+ 14: e5ff0000 incmh \$255,0x0
+ 18: e4ff0000 inch \$255,0x0
+ 1c: bf0cff00 pushgo \$12,\$255,0
+ 20: e3fd0003 setl \$253,0x3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushja1f-s.d b/binutils-2.21/ld/testsuite/ld-mmix/pushja1f-s.d
new file mode 100644
index 0000000..801ff22
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushja1f-s.d
@@ -0,0 +1,19 @@
+#source: start.s
+#source: pushja.s
+#source: a.s
+#as: -x
+#ld: -m elf64mmix
+#objdump: -dr
+
+# Like pushja1f, but with PUSHJ stub.
+
+.*: file format elf64-mmix
+Disassembly of section \.text:
+0+ <_start>:
+ 0: e3fd0001 setl \$253,0x1
+0+4 <pushja>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f20c0002 pushj \$12,10 <a>
+ c: e3fd0003 setl \$253,0x3
+0+10 <a>:
+ 10: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushja1f.d b/binutils-2.21/ld/testsuite/ld-mmix/pushja1f.d
new file mode 100644
index 0000000..5f27400
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushja1f.d
@@ -0,0 +1,25 @@
+#source: start.s
+#source: pushja.s
+#source: a.s
+#as: -x --no-pushj-stubs
+#ld: -m elf64mmix
+#objdump: -dr
+
+.*: file format elf64-mmix
+
+Disassembly of section \.text:
+
+0+ <_start>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <pushja>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: e3ff0020 setl \$255,0x20
+ c: e6ff0000 incml \$255,0x0
+ 10: e5ff0000 incmh \$255,0x0
+ 14: e4ff0000 inch \$255,0x0
+ 18: bf0cff00 pushgo \$12,\$255,0
+ 1c: e3fd0003 setl \$253,0x3
+
+0+20 <a>:
+ 20: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushja2b.d b/binutils-2.21/ld/testsuite/ld-mmix/pushja2b.d
new file mode 100644
index 0000000..623754f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushja2b.d
@@ -0,0 +1,21 @@
+#source: start.s
+#source: a.s
+#source: pushja.s
+#as: -no-expand
+#ld: -m elf64mmix
+#objdump: -dr
+
+.*: file format elf64-mmix
+
+Disassembly of section \.text:
+
+0+ <_start>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <a>:
+ 4: e3fd0004 setl \$253,0x4
+
+0+8 <pushja>:
+ 8: e3fd0002 setl \$253,0x2
+ c: f30cfffe pushj \$12,4 <a>
+ 10: e3fd0003 setl \$253,0x3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushja2f.d b/binutils-2.21/ld/testsuite/ld-mmix/pushja2f.d
new file mode 100644
index 0000000..687d559
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushja2f.d
@@ -0,0 +1,21 @@
+#source: start.s
+#source: pushja.s
+#source: a.s
+#as: -no-expand
+#ld: -m elf64mmix
+#objdump: -dr
+
+.*: file format elf64-mmix
+
+Disassembly of section \.text:
+
+0+ <_start>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <pushja>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f20c0002 pushj \$12,10 <a>
+ c: e3fd0003 setl \$253,0x3
+
+0+10 <a>:
+ 10: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushja7b-s.d b/binutils-2.21/ld/testsuite/ld-mmix/pushja7b-s.d
new file mode 100644
index 0000000..7835eda
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushja7b-s.d
@@ -0,0 +1,19 @@
+#source: start.s
+#source: a.s
+#source: pushja.s
+#as: -x
+#ld: -m mmo
+#objdump: -dr
+
+# Like pushja7b, but with PUSHJ stub.
+
+.*: file format mmo
+Disassembly of section \.text:
+0+ <(Main|_start)>:
+ 0: e3fd0001 setl \$253,0x1
+0+4 <a>:
+ 4: e3fd0004 setl \$253,0x4
+0+8 <pushja>:
+ 8: e3fd0002 setl \$253,0x2
+ c: f30cfffe pushj \$12,4 <a>
+ 10: e3fd0003 setl \$253,0x3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushja7b.d b/binutils-2.21/ld/testsuite/ld-mmix/pushja7b.d
new file mode 100644
index 0000000..5da05e3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushja7b.d
@@ -0,0 +1,25 @@
+#source: start.s
+#source: a.s
+#source: pushja.s
+#as: -x --no-pushj-stubs
+#ld: -m mmo
+#objdump: -dr
+
+.*: file format mmo
+
+Disassembly of section \.text:
+
+0+ <(Main|_start)>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <a>:
+ 4: e3fd0004 setl \$253,0x4
+
+0+8 <pushja>:
+ 8: e3fd0002 setl \$253,0x2
+ c: e3ff0004 setl \$255,0x4
+ 10: e6ff0000 incml \$255,0x0
+ 14: e5ff0000 incmh \$255,0x0
+ 18: e4ff0000 inch \$255,0x0
+ 1c: bf0cff00 pushgo \$12,\$255,0
+ 20: e3fd0003 setl \$253,0x3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushja7f-s.d b/binutils-2.21/ld/testsuite/ld-mmix/pushja7f-s.d
new file mode 100644
index 0000000..487d54a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushja7f-s.d
@@ -0,0 +1,19 @@
+#source: start.s
+#source: pushja.s
+#source: a.s
+#as: -x
+#ld: -m mmo
+#objdump: -dr
+
+# Like pushja7f, but with PUSHJ stub.
+
+.*: file format mmo
+Disassembly of section \.text:
+0+ <(Main|_start)>:
+ 0: e3fd0001 setl \$253,0x1
+0+4 <pushja>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f20c0002 pushj \$12,10 <a>
+ c: e3fd0003 setl \$253,0x3
+0+10 <a>:
+ 10: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushja7f.d b/binutils-2.21/ld/testsuite/ld-mmix/pushja7f.d
new file mode 100644
index 0000000..83721c7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushja7f.d
@@ -0,0 +1,25 @@
+#source: start.s
+#source: pushja.s
+#source: a.s
+#as: -x --no-pushj-stubs
+#ld: -m mmo
+#objdump: -dr
+
+.*: file format mmo
+
+Disassembly of section \.text:
+
+0+ <(Main|_start)>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <pushja>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: e3ff0020 setl \$255,0x20
+ c: e6ff0000 incml \$255,0x0
+ 10: e5ff0000 incmh \$255,0x0
+ 14: e4ff0000 inch \$255,0x0
+ 18: bf0cff00 pushgo \$12,\$255,0
+ 1c: e3fd0003 setl \$253,0x3
+
+0+20 <a>:
+ 20: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushja8b.d b/binutils-2.21/ld/testsuite/ld-mmix/pushja8b.d
new file mode 100644
index 0000000..da1f216
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushja8b.d
@@ -0,0 +1,21 @@
+#source: start.s
+#source: a.s
+#source: pushja.s
+#as: -no-expand
+#ld: -m mmo
+#objdump: -dr
+
+.*: file format mmo
+
+Disassembly of section \.text:
+
+0+ <(Main|_start)>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <a>:
+ 4: e3fd0004 setl \$253,0x4
+
+0+8 <pushja>:
+ 8: e3fd0002 setl \$253,0x2
+ c: f30cfffe pushj \$12,4 <a>
+ 10: e3fd0003 setl \$253,0x3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushja8f.d b/binutils-2.21/ld/testsuite/ld-mmix/pushja8f.d
new file mode 100644
index 0000000..8ae45f9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushja8f.d
@@ -0,0 +1,21 @@
+#source: start.s
+#source: pushja.s
+#source: a.s
+#as: -no-expand
+#ld: -m mmo
+#objdump: -dr
+
+.*: file format mmo
+
+Disassembly of section \.text:
+
+0+ <(Main|_start)>:
+ 0: e3fd0001 setl \$253,0x1
+
+0+4 <pushja>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f20c0002 pushj \$12,10 <a>
+ c: e3fd0003 setl \$253,0x3
+
+0+10 <a>:
+ 10: e3fd0004 setl \$253,0x4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushjs1.d b/binutils-2.21/ld/testsuite/ld-mmix/pushjs1.d
new file mode 100644
index 0000000..66892e0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushjs1.d
@@ -0,0 +1,27 @@
+#source: start4.s
+#source: pushja.s
+#source: pad2p18m32.s
+#source: pad16.s
+#source: pad4.s
+#source: a.s
+#source: start.s
+#ld: -m elf64mmix
+#objdump: -dr
+
+# Check that PUSHJ with an offset just within the offset range gets no
+# stub expansion, ELF version.
+
+.*: file format elf64-mmix
+Disassembly of section \.init:
+0+ <_start>:
+ 0: e37704a6 setl \$119,0x4a6
+Disassembly of section \.text:
+0+4 <pushja>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f20cffff pushj \$12,40004 <a>
+ c: e3fd0003 setl \$253,0x3
+ \.\.\.
+0+40004 <a>:
+ 40004: e3fd0004 setl \$253,0x4
+0+40008 <_start>:
+ 40008: e3fd0001 setl \$253,0x1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushjs1b.d b/binutils-2.21/ld/testsuite/ld-mmix/pushjs1b.d
new file mode 100644
index 0000000..f9a2491
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushjs1b.d
@@ -0,0 +1,31 @@
+#source: start4.s
+#source: nop123.s
+#source: a.s
+#source: pad2p18m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pad4.s
+#source: pushja.s
+#source: start.s
+#ld: -m elf64mmix
+#objdump: -dr
+
+# Check that PUSHJ with an offset just within the offset range gets no
+# stub expansion, backwards, ELF version.
+
+.*: file format elf64-mmix
+Disassembly of section \.init:
+0+ <_start>:
+ 0: e37704a6 setl \$119,0x4a6
+Disassembly of section \.text:
+0+4 <a-0x4>:
+ 4: fd010203 swym 1,2,3
+0+8 <a>:
+ 8: e3fd0004 setl \$253,0x4
+ \.\.\.
+0+40004 <pushja>:
+ 40004: e3fd0002 setl \$253,0x2
+ 40008: f30c0000 pushj \$12,8 <a>
+ 4000c: e3fd0003 setl \$253,0x3
+0+40010 <_start>:
+ 40010: e3fd0001 setl \$253,0x1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushjs1bm.d b/binutils-2.21/ld/testsuite/ld-mmix/pushjs1bm.d
new file mode 100644
index 0000000..d70da89
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushjs1bm.d
@@ -0,0 +1,29 @@
+#source: nop123.s
+#source: nop123.s
+#source: a.s
+#source: pad2p18m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pad4.s
+#source: pushja.s
+#source: start.s
+#ld: -m mmo
+#objdump: -dr
+
+# Check that PUSHJ with an offset just within the offset range gets no
+# stub expansion, backwards, mmo version.
+
+.*: file format mmo
+Disassembly of section \.text:
+0+ <a-0x8>:
+ 0: fd010203 swym 1,2,3
+ 4: fd010203 swym 1,2,3
+0+8 <a>:
+ 8: e3fd0004 setl \$253,0x4
+ \.\.\.
+0+40004 <pushja>:
+ 40004: e3fd0002 setl \$253,0x2
+ 40008: f30c0000 pushj \$12,8 <a>
+ 4000c: e3fd0003 setl \$253,0x3
+0+40010 <Main>:
+ 40010: e3fd0001 setl \$253,0x1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushjs1m.d b/binutils-2.21/ld/testsuite/ld-mmix/pushjs1m.d
new file mode 100644
index 0000000..0df80a2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushjs1m.d
@@ -0,0 +1,26 @@
+#source: nop123.s
+#source: pushja.s
+#source: pad2p18m32.s
+#source: pad16.s
+#source: pad4.s
+#source: a.s
+#source: start.s
+#ld: -m mmo
+#objdump: -dr
+
+# Check that PUSHJ with an offset just within the offset range gets no
+# stub expansion, mmo version.
+
+.*: file format mmo
+Disassembly of section \.text:
+0+ <pushja-0x4>:
+ 0: fd010203 swym 1,2,3
+0+4 <pushja>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f20cffff pushj \$12,40004 <a>
+ c: e3fd0003 setl \$253,0x3
+ \.\.\.
+0+40004 <a>:
+ 40004: e3fd0004 setl \$253,0x4
+0+40008 <Main>:
+ 40008: e3fd0001 setl \$253,0x1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushjs1r.d b/binutils-2.21/ld/testsuite/ld-mmix/pushjs1r.d
new file mode 100644
index 0000000..3083274
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushjs1r.d
@@ -0,0 +1,22 @@
+#source: nop123.s
+#source: pushja.s
+#source: pad2p18m32.s
+#source: pad16.s
+#source: nop123.s
+#ld: -r -m elf64mmix
+#objdump: -dr
+
+# When linking relocatable, check that PUSHJ with a distance to the end of
+# the section just within the offset range gets no stub expansion.
+
+.*: file format elf64-mmix
+Disassembly of section \.text:
+0+ <pushja-0x4>:
+ 0: fd010203 swym 1,2,3
+0+4 <pushja>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f20c0000 pushj \$12,8 <pushja\+0x4>
+ 8: R_MMIX_PUSHJ_STUBBABLE a
+ c: e3fd0003 setl \$253,0x3
+ \.\.\.
+ 40000: fd010203 swym 1,2,3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushjs2.d b/binutils-2.21/ld/testsuite/ld-mmix/pushjs2.d
new file mode 100644
index 0000000..c6b5829
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushjs2.d
@@ -0,0 +1,29 @@
+#source: start4.s
+#source: pushja.s
+#source: pad2p18m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pad4.s
+#source: a.s
+#source: start.s
+#ld: -m elf64mmix
+#objdump: -dr
+
+# Check that PUSHJ with an offset just outside the PUSHJ offset range gets
+# a JMP stub expansion, ELF version.
+
+.*: file format elf64-mmix
+Disassembly of section \.init:
+0+ <_start>:
+ 0: e37704a6 setl \$119,0x4a6
+Disassembly of section \.text:
+0+4 <pushja>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f20c0002 pushj \$12,10 <pushja\+0xc>
+ c: e3fd0003 setl \$253,0x3
+ 10: f000ffff jmp 4000c <a>
+ \.\.\.
+0+4000c <a>:
+ 4000c: e3fd0004 setl \$253,0x4
+0+40010 <_start>:
+ 40010: e3fd0001 setl \$253,0x1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushjs2b.d b/binutils-2.21/ld/testsuite/ld-mmix/pushjs2b.d
new file mode 100644
index 0000000..a6f2299
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushjs2b.d
@@ -0,0 +1,33 @@
+#source: start4.s
+#source: nop123.s
+#source: a.s
+#source: pad2p18m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pad4.s
+#source: pad4.s
+#source: pushja.s
+#source: start.s
+#ld: -m elf64mmix
+#objdump: -dr
+
+# Check that PUSHJ with an offset just outside the offset range gets a JMP
+# stub expansion, backwards, ELF version.
+
+.*: file format elf64-mmix
+Disassembly of section \.init:
+0+ <_start>:
+ 0: e37704a6 setl \$119,0x4a6
+Disassembly of section \.text:
+0+4 <a-0x4>:
+ 4: fd010203 swym 1,2,3
+0+8 <a>:
+ 8: e3fd0004 setl \$253,0x4
+ \.\.\.
+0+40008 <pushja>:
+ 40008: e3fd0002 setl \$253,0x2
+ 4000c: f20c0002 pushj \$12,40014 <pushja\+0xc>
+ 40010: e3fd0003 setl \$253,0x3
+ 40014: f1fefffd jmp 8 <a>
+0+40018 <_start>:
+ 40018: e3fd0001 setl \$253,0x1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushjs2bm.d b/binutils-2.21/ld/testsuite/ld-mmix/pushjs2bm.d
new file mode 100644
index 0000000..1f37c66
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushjs2bm.d
@@ -0,0 +1,31 @@
+#source: nop123.s
+#source: nop123.s
+#source: a.s
+#source: pad2p18m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pad4.s
+#source: pad4.s
+#source: pushja.s
+#source: start.s
+#ld: -m mmo
+#objdump: -dr
+
+# Check that PUSHJ with an offset just outside the offset range gets a JMP
+# stub expansion, backwards, mmo version.
+
+.*: file format mmo
+Disassembly of section \.text:
+0+ <a-0x8>:
+ 0: fd010203 swym 1,2,3
+ 4: fd010203 swym 1,2,3
+0+8 <a>:
+ 8: e3fd0004 setl \$253,0x4
+ \.\.\.
+0+40008 <pushja>:
+ 40008: e3fd0002 setl \$253,0x2
+ 4000c: f20c0002 pushj \$12,40014 <pushja\+0xc>
+ 40010: e3fd0003 setl \$253,0x3
+ 40014: f1fefffd jmp 8 <a>
+0+40018 <Main>:
+ 40018: e3fd0001 setl \$253,0x1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushjs2m.d b/binutils-2.21/ld/testsuite/ld-mmix/pushjs2m.d
new file mode 100644
index 0000000..8c7af13
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushjs2m.d
@@ -0,0 +1,28 @@
+#source: nop123.s
+#source: pushja.s
+#source: pad2p18m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pad4.s
+#source: a.s
+#source: start.s
+#ld: -m mmo
+#objdump: -dr
+
+# Check that PUSHJ with an offset just outside the PUSHJ offset range gets
+# a JMP stub expansion, mmo version.
+
+.*: file format mmo
+Disassembly of section \.text:
+0+ <pushja-0x4>:
+ 0: fd010203 swym 1,2,3
+0+4 <pushja>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f20c0002 pushj \$12,10 <pushja\+0xc>
+ c: e3fd0003 setl \$253,0x3
+ 10: f000ffff jmp 4000c <a>
+ \.\.\.
+0+4000c <a>:
+ 4000c: e3fd0004 setl \$253,0x4
+0+40010 <Main>:
+ 40010: e3fd0001 setl \$253,0x1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushjs2r.d b/binutils-2.21/ld/testsuite/ld-mmix/pushjs2r.d
new file mode 100644
index 0000000..df181e0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushjs2r.d
@@ -0,0 +1,27 @@
+#source: nop123.s
+#source: pushja.s
+#source: ext1l.s
+#source: pad2p18m32.s
+#source: pad16.s
+#source: nop123.s
+#ld: -r -m elf64mmix
+#objdump: -dr
+
+# When linking relocatably, check that PUSHJ with a distance to the end of
+# the section just outside the offset range gets expanded.
+
+.*: file format elf64-mmix
+Disassembly of section \.text:
+0+ <pushja-0x4>:
+ 0: fd010203 swym 1,2,3
+0+4 <pushja>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f20c0002 pushj \$12,10 <pushja\+0xc>
+ c: e3fd0003 setl \$253,0x3
+ 10: f0000000 jmp 10 <pushja\+0xc>
+ 10: R_MMIX_JMP a
+ \.\.\.
+0+24 <ext1>:
+ 24: fd040810 swym 4,8,16
+ \.\.\.
+ 40018: fd010203 swym 1,2,3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushjs3.d b/binutils-2.21/ld/testsuite/ld-mmix/pushjs3.d
new file mode 100644
index 0000000..75afe1b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushjs3.d
@@ -0,0 +1,29 @@
+#source: start4.s
+#source: pushja.s
+#source: pad2p26m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pad4.s
+#source: a.s
+#source: start.s
+#ld: -m elf64mmix
+#objdump: -dr
+
+# Check that PUSHJ with an offset just within reach of JMP gets it, ELF
+# version.
+
+.*: file format elf64-mmix
+Disassembly of section \.init:
+0+ <_start>:
+ 0: e37704a6 setl \$119,0x4a6
+Disassembly of section \.text:
+0+4 <pushja>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f20c0002 pushj \$12,10 <pushja\+0xc>
+ c: e3fd0003 setl \$253,0x3
+ 10: f0ffffff jmp 400000c <a>
+ \.\.\.
+0+400000c <a>:
+ 400000c: e3fd0004 setl \$253,0x4
+0+4000010 <_start>:
+ 4000010: e3fd0001 setl \$253,0x1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushjs3b.d b/binutils-2.21/ld/testsuite/ld-mmix/pushjs3b.d
new file mode 100644
index 0000000..33812bb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushjs3b.d
@@ -0,0 +1,30 @@
+#source: start4.s
+#source: nop123.s
+#source: a.s
+#source: pad2p26m32.s
+#source: pad16.s
+#source: pushja.s
+#source: start.s
+#ld: -m elf64mmix
+#objdump: -dr
+
+# Check that PUSHJ with an offset just inside the offset range of a JMP
+# stub expansion works, backwards, ELF version.
+
+.*: file format elf64-mmix
+Disassembly of section \.init:
+0+ <_start>:
+ 0: e37704a6 setl \$119,0x4a6
+Disassembly of section \.text:
+0+4 <a-0x4>:
+ 4: fd010203 swym 1,2,3
+0+8 <a>:
+ 8: e3fd0004 setl \$253,0x4
+ \.\.\.
+0+3fffffc <pushja>:
+ 3fffffc: e3fd0002 setl \$253,0x2
+ 4000000: f20c0002 pushj \$12,4000008 <pushja\+0xc>
+ 4000004: e3fd0003 setl \$253,0x3
+ 4000008: f1000000 jmp 8 <a>
+0+400000c <_start>:
+ 400000c: e3fd0001 setl \$253,0x1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushjs3bm.d b/binutils-2.21/ld/testsuite/ld-mmix/pushjs3bm.d
new file mode 100644
index 0000000..f485d14
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushjs3bm.d
@@ -0,0 +1,28 @@
+#source: nop123.s
+#source: nop123.s
+#source: a.s
+#source: pad2p26m32.s
+#source: pad16.s
+#source: pushja.s
+#source: start.s
+#ld: -m mmo
+#objdump: -dr
+
+# Check that PUSHJ with an offset just inside the offset range of a JMP
+# stub expansion works, backwards, mmo version.
+
+.*: file format mmo
+Disassembly of section \.text:
+0+ <a-0x8>:
+ 0: fd010203 swym 1,2,3
+ 4: fd010203 swym 1,2,3
+0+8 <a>:
+ 8: e3fd0004 setl \$253,0x4
+ \.\.\.
+0+3fffffc <pushja>:
+ 3fffffc: e3fd0002 setl \$253,0x2
+ 4000000: f20c0002 pushj \$12,4000008 <pushja\+0xc>
+ 4000004: e3fd0003 setl \$253,0x3
+ 4000008: f1000000 jmp 8 <a>
+0+400000c <Main>:
+ 400000c: e3fd0001 setl \$253,0x1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushjs3m.d b/binutils-2.21/ld/testsuite/ld-mmix/pushjs3m.d
new file mode 100644
index 0000000..35df726
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushjs3m.d
@@ -0,0 +1,28 @@
+#source: nop123.s
+#source: pushja.s
+#source: pad2p26m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pad4.s
+#source: a.s
+#source: start.s
+#ld: -m mmo
+#objdump: -dr
+
+# Check that PUSHJ with an offset just within reach of JMP gets it, mmo
+# version.
+
+.*: file format mmo
+Disassembly of section \.text:
+0+ <pushja-0x4>:
+ 0: fd010203 swym 1,2,3
+0+4 <pushja>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f20c0002 pushj \$12,10 <pushja\+0xc>
+ c: e3fd0003 setl \$253,0x3
+ 10: f0ffffff jmp 400000c <a>
+ \.\.\.
+0+400000c <a>:
+ 400000c: e3fd0004 setl \$253,0x4
+0+4000010 <Main>:
+ 4000010: e3fd0001 setl \$253,0x1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushjs3r.d b/binutils-2.21/ld/testsuite/ld-mmix/pushjs3r.d
new file mode 100644
index 0000000..537b3f9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushjs3r.d
@@ -0,0 +1,32 @@
+#source: nop123.s
+#source: pushja.s
+#source: undef-2.s
+#source: nop123.s
+#source: pad16.s
+#source: pad2p18m32.s
+#ld: -r -m elf64mmix
+#objdump: -dr
+
+# When linking relocatably, check two expanded stubbable PUSHJs.
+
+# With better relaxation support for relocatable links, both should be
+# able to pass through unexpanded. Right now, we just check that they can
+# coexist peacefully.
+
+.*: file format elf64-mmix
+Disassembly of section \.text:
+0+ <pushja-0x4>:
+ 0: fd010203 swym 1,2,3
+0+4 <pushja>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f20c0002 pushj \$12,10 <pushja\+0xc>
+ c: e3fd0003 setl \$253,0x3
+ 10: f0000000 jmp 10 <pushja\+0xc>
+ 10: R_MMIX_JMP a
+ \.\.\.
+ 24: f2050001 pushj \$5,28 <pushja\+0x24>
+ 28: f0000000 jmp 28 <pushja\+0x24>
+ 28: R_MMIX_JMP undefd
+ \.\.\.
+ 3c: fd010203 swym 1,2,3
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushjs4.d b/binutils-2.21/ld/testsuite/ld-mmix/pushjs4.d
new file mode 100644
index 0000000..e010449
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushjs4.d
@@ -0,0 +1,34 @@
+#source: start4.s
+#source: pushja.s
+#source: pad2p26m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pad4.s
+#source: pad4.s
+#source: a.s
+#source: start.s
+#ld: -m elf64mmix
+#objdump: -dr
+
+# Check that PUSHJ with an offset just outside reach of JMP works; it will
+# get the full expansion, ELF version.
+
+.*: file format elf64-mmix
+Disassembly of section \.init:
+0+ <_start>:
+ 0: e37704a6 setl \$119,0x4a6
+Disassembly of section \.text:
+0+4 <pushja>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f20c0002 pushj \$12,10 <pushja\+0xc>
+ c: e3fd0003 setl \$253,0x3
+ 10: e3ff0020 setl \$255,0x20
+ 14: e6ff0400 incml \$255,0x400
+ 18: e5ff0000 incmh \$255,0x0
+ 1c: e4ff0000 inch \$255,0x0
+ 20: 9f00ff00 go \$0,\$255,0
+ \.\.\.
+0+4000020 <a>:
+ 4000020: e3fd0004 setl \$253,0x4
+0+4000024 <_start>:
+ 4000024: e3fd0001 setl \$253,0x1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushjs4b.d b/binutils-2.21/ld/testsuite/ld-mmix/pushjs4b.d
new file mode 100644
index 0000000..cef68d7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushjs4b.d
@@ -0,0 +1,35 @@
+#source: start4.s
+#source: nop123.s
+#source: a.s
+#source: pad2p26m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pushja.s
+#source: start.s
+#ld: -m elf64mmix
+#objdump: -dr
+
+# Check that PUSHJ with an offset just outside the offset range of a JMP
+# stub expansion works, backwards, ELF version.
+
+.*: file format elf64-mmix
+Disassembly of section \.init:
+0+ <_start>:
+ 0: e37704a6 setl \$119,0x4a6
+Disassembly of section \.text:
+0+4 <a-0x4>:
+ 4: fd010203 swym 1,2,3
+0+8 <a>:
+ 8: e3fd0004 setl \$253,0x4
+ \.\.\.
+0+4000000 <pushja>:
+ 4000000: e3fd0002 setl \$253,0x2
+ 4000004: f20c0002 pushj \$12,400000c <pushja\+0xc>
+ 4000008: e3fd0003 setl \$253,0x3
+ 400000c: e3ff0008 setl \$255,0x8
+ 4000010: e6ff0000 incml \$255,0x0
+ 4000014: e5ff0000 incmh \$255,0x0
+ 4000018: e4ff0000 inch \$255,0x0
+ 400001c: 9f00ff00 go \$0,\$255,0
+0+4000020 <_start>:
+ 4000020: e3fd0001 setl \$253,0x1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushjs4bm.d b/binutils-2.21/ld/testsuite/ld-mmix/pushjs4bm.d
new file mode 100644
index 0000000..53b74f1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushjs4bm.d
@@ -0,0 +1,33 @@
+#source: nop123.s
+#source: nop123.s
+#source: a.s
+#source: pad2p26m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pushja.s
+#source: start.s
+#ld: -m mmo
+#objdump: -dr
+
+# Check that PUSHJ with an offset just outside the offset range of a JMP
+# stub expansion works, backwards, mmo version.
+
+.*: file format mmo
+Disassembly of section \.text:
+0+ <a-0x8>:
+ 0: fd010203 swym 1,2,3
+ 4: fd010203 swym 1,2,3
+0+8 <a>:
+ 8: e3fd0004 setl \$253,0x4
+ \.\.\.
+0+4000000 <pushja>:
+ 4000000: e3fd0002 setl \$253,0x2
+ 4000004: f20c0002 pushj \$12,400000c <pushja\+0xc>
+ 4000008: e3fd0003 setl \$253,0x3
+ 400000c: e3ff0008 setl \$255,0x8
+ 4000010: e6ff0000 incml \$255,0x0
+ 4000014: e5ff0000 incmh \$255,0x0
+ 4000018: e4ff0000 inch \$255,0x0
+ 400001c: 9f00ff00 go \$0,\$255,0
+0+4000020 <Main>:
+ 4000020: e3fd0001 setl \$253,0x1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushjs4m.d b/binutils-2.21/ld/testsuite/ld-mmix/pushjs4m.d
new file mode 100644
index 0000000..153e96c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushjs4m.d
@@ -0,0 +1,33 @@
+#source: nop123.s
+#source: pushja.s
+#source: pad2p26m32.s
+#source: pad16.s
+#source: pad4.s
+#source: pad4.s
+#source: pad4.s
+#source: a.s
+#source: start.s
+#ld: -m mmo
+#objdump: -dr
+
+# Check that PUSHJ with an offset just outside reach of JMP works; it will
+# get the full expansion, mmo version.
+
+.*: file format mmo
+Disassembly of section \.text:
+0+ <pushja-0x4>:
+ 0: fd010203 swym 1,2,3
+0+4 <pushja>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f20c0002 pushj \$12,10 <pushja\+0xc>
+ c: e3fd0003 setl \$253,0x3
+ 10: e3ff0020 setl \$255,0x20
+ 14: e6ff0400 incml \$255,0x400
+ 18: e5ff0000 incmh \$255,0x0
+ 1c: e4ff0000 inch \$255,0x0
+ 20: 9f00ff00 go \$0,\$255,0
+ \.\.\.
+0+4000020 <a>:
+ 4000020: e3fd0004 setl \$253,0x4
+0+4000024 <Main>:
+ 4000024: e3fd0001 setl \$253,0x1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/pushjs4r.d b/binutils-2.21/ld/testsuite/ld-mmix/pushjs4r.d
new file mode 100644
index 0000000..e734dc6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/pushjs4r.d
@@ -0,0 +1,29 @@
+#source: nop123.s
+#source: pushja.s
+#source: undef-2.s
+#source: pad2p18m32.s
+#source: nop123.s
+#ld: -r -m elf64mmix
+#objdump: -dr
+
+# When linking relocatably, check two stubbable PUSHJ:s, one expanded.
+
+# With better relaxation support for relocatable links, both should be
+# able to pass through unexpanded. Right now, we just check that they can
+# coexist peacefully.
+
+.*: file format elf64-mmix
+Disassembly of section \.text:
+0+ <pushja-0x4>:
+ 0: fd010203 swym 1,2,3
+0+4 <pushja>:
+ 4: e3fd0002 setl \$253,0x2
+ 8: f20c0002 pushj \$12,10 <pushja\+0xc>
+ c: e3fd0003 setl \$253,0x3
+ 10: f0000000 jmp 10 <pushja\+0xc>
+ 10: R_MMIX_JMP a
+ \.\.\.
+ 24: f2050000 pushj \$5,24 <pushja\+0x20>
+ 24: R_MMIX_PUSHJ_STUBBABLE undefd
+ \.\.\.
+ 40008: fd010203 swym 1,2,3
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/reg-1.d b/binutils-2.21/ld/testsuite/ld-mmix/reg-1.d
new file mode 100644
index 0000000..125fa32
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/reg-1.d
@@ -0,0 +1,7 @@
+#source: areg-256.s
+#source: gregget1.s
+#source: start.s
+#source: a.s
+#as: -x
+#ld: -m elf64mmix
+#error: relocation truncated to fit: R_MMIX_REG against symbol `areg'
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/reg-1m.d b/binutils-2.21/ld/testsuite/ld-mmix/reg-1m.d
new file mode 100644
index 0000000..73bdb1a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/reg-1m.d
@@ -0,0 +1,7 @@
+#source: areg-256.s
+#source: gregget1.s
+#source: start.s
+#source: a.s
+#as: -x
+#ld: -m mmo
+#error: relocation truncated to fit: R_MMIX_REG against `areg'
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/reg-2.d b/binutils-2.21/ld/testsuite/ld-mmix/reg-2.d
new file mode 100644
index 0000000..09b0da4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/reg-2.d
@@ -0,0 +1,7 @@
+#source: areg-t.s
+#source: gregget1.s
+#source: start.s
+#source: a.s
+#as: -x
+#ld: -m elf64mmix
+#error: register relocation against non-register symbol: areg in \.text
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/reg-2m.d b/binutils-2.21/ld/testsuite/ld-mmix/reg-2m.d
new file mode 100644
index 0000000..f6edbef
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/reg-2m.d
@@ -0,0 +1,7 @@
+#source: areg-t.s
+#source: gregget1.s
+#source: start.s
+#source: a.s
+#as: -x
+#ld: -m mmo
+#error: register relocation against non-register symbol: areg in \.text
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/regext1.s b/binutils-2.21/ld/testsuite/ld-mmix/regext1.s
new file mode 100644
index 0000000..7703905
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/regext1.s
@@ -0,0 +1,2 @@
+ .global ext1
+ext1 IS $252
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/sec-1.d b/binutils-2.21/ld/testsuite/ld-mmix/sec-1.d
new file mode 100644
index 0000000..eab62a2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/sec-1.d
@@ -0,0 +1,35 @@
+#source: sec-1.s
+#source: start.s
+#ld: -m elf64mmix
+#objcopy_linked_file: -O mmo
+#objdump: -sh
+
+# Test conversion from ELF to mmo with non-mmo-sections present,
+# testing that support.
+
+.*: file format mmo
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0+4 0+ 0+ 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, CODE
+ 1 secname 0+19 0+4 0+4 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 2 \.a\.fourth\.section 0+10 0+20 0+20 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, READONLY, DATA
+ 3 anothersec 0+13 2000000000000000 2000000000000000 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, DATA
+ 4 thirdsec 0+a 0+ 0+ 0+ 2\*\*2
+ CONTENTS, READONLY
+Contents of section \.text:
+ 0000 e3fd0001 .*
+Contents of section secname:
+ 0004 00000001 00000002 00000003 00000004 .*
+ 0014 ffffffff fffff827 50 .*
+Contents of section \.a\.fourth\.section:
+ 0020 00000000 0087a238 00000000 302a55a8 .*
+Contents of section anothersec:
+ 2000000000000000 0000000a 00000009 00000008 00000007 .*
+ 2000000000000010 252729 .*
+Contents of section thirdsec:
+ 0000 00030d41 000186a2 2628 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/sec-1.s b/binutils-2.21/ld/testsuite/ld-mmix/sec-1.s
new file mode 100644
index 0000000..77e26e3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/sec-1.s
@@ -0,0 +1,14 @@
+ .section secname,"ax"
+ TETRA 1,2,3,4,-1,-2009
+ BYTE 80
+
+ .section anothersec,"aw"
+ TETRA 10,9,8,7
+ BYTE 37,39,41
+
+ .section thirdsec
+ TETRA 200001,100002
+ BYTE 38,40
+
+ .section .a.fourth.section,"a"
+ OCTA 8888888,808080808
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/sec-2.d b/binutils-2.21/ld/testsuite/ld-mmix/sec-2.d
new file mode 100644
index 0000000..10623f3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/sec-2.d
@@ -0,0 +1,26 @@
+#source: sec-1.s
+#source: start.s
+#source: data1.s
+#ld: -m mmo -T $srcdir/$subdir/mmosec1.ld
+#objdump: -sh
+
+.*: file format mmo
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0+4 0+100 0+100 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, CODE
+ 1 \.other 0+50 1000000000000000 1000000000000000 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, CODE, DATA
+ 2 \.data 0+4 2000000000000004 2000000000000004 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD
+Contents of section \.text:
+ 0100 e3fd0001 .*
+Contents of section \.other:
+ 1000000000000000 00000001 00000002 00000003 00000004 .*
+ 1000000000000010 ffffffff fffff827 50000000 0000000a .*
+ 1000000000000020 00000009 00000008 00000007 25272900 .*
+ 1000000000000030 00030d41 000186a2 26280000 00000000 .*
+ 1000000000000040 00000000 0087a238 00000000 302a55a8 .*
+Contents of section \.data:
+ 2000000000000004 0000012c .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/sec-2.s b/binutils-2.21/ld/testsuite/ld-mmix/sec-2.s
new file mode 100644
index 0000000..3ac0555
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/sec-2.s
@@ -0,0 +1,2 @@
+ .section .other,"ax"
+ TETRA 12,34,1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/sec-3.d b/binutils-2.21/ld/testsuite/ld-mmix/sec-3.d
new file mode 100644
index 0000000..791b5ea
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/sec-3.d
@@ -0,0 +1,36 @@
+#source: sec-1.s
+#source: start.s
+#source: data1.s
+#ld: -m mmo
+#objdump: -sh
+
+.*: file format mmo
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0+4 0+ 0+ 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, CODE
+ 1 secname 0+19 0+4 0+4 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 2 \.a\.fourth\.section 0+10 0+20 0+20 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, READONLY, DATA
+ 3 \.data 0+4 2000000000000004 2000000000000004 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD
+ 4 anothersec 0+13 2000000000000008 2000000000000008 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, DATA
+ 5 thirdsec 0+a 0+ 0+ 0+ 2\*\*2
+ CONTENTS, READONLY
+Contents of section \.text:
+ 0000 e3fd0001 .*
+Contents of section secname:
+ 0004 00000001 00000002 00000003 00000004 .*
+ 0014 ffffffff fffff827 50 .*
+Contents of section \.a\.fourth\.section:
+ 0020 00000000 0087a238 00000000 302a55a8 .*
+Contents of section \.data:
+ 2000000000000004 0000002c .*
+Contents of section anothersec:
+ 2000000000000008 0000000a 00000009 00000008 00000007 .*
+ 2000000000000018 252729 .*
+Contents of section thirdsec:
+ 0000 00030d41 000186a2 2628 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/sec-4.d b/binutils-2.21/ld/testsuite/ld-mmix/sec-4.d
new file mode 100644
index 0000000..251f6a2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/sec-4.d
@@ -0,0 +1,22 @@
+#source: sec-2.s
+#source: start.s
+#source: data1.s
+#ld: -m mmo -T $srcdir/$subdir/mmosec1.ld
+#objdump: -sh
+
+.*: file format mmo
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0+4 0+100 0+100 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, CODE
+ 1 \.data 0+4 2000000000000004 2000000000000004 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD
+ 2 \.other 0+c 1000000000000000 1000000000000000 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+Contents of section \.text:
+ 0100 e3fd0001 .*
+Contents of section \.data:
+ 2000000000000004 0000012c .*
+Contents of section \.other:
+ 1000000000000000 0000000c 00000022 00000001 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/sec-5.d b/binutils-2.21/ld/testsuite/ld-mmix/sec-5.d
new file mode 100644
index 0000000..24aa0e1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/sec-5.d
@@ -0,0 +1,28 @@
+#source: b-twoinsn.s
+#source: b-offloc.s
+#source: b-post1.s
+#source: b-goodmain.s
+#ld: --oformat binary
+#objdump: -sh
+
+# Check that sections are automatically created to cope with contents at
+# unexpected addresses when an mmo is read in. We used to do this by
+# e.g. linking .text at an unexpected address, like in sec-9.d. That no
+# longer works, because .text and .data now gets section descriptors at
+# mmo output when the address and contents doesn't trivially reflect the
+# section contents at link time. To test, we instead read in an mmo
+# formed from a link to binary format, like the b-*.d tests for mmo
+# execution paths.
+
+.*: file format mmo
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0+8 0+ 0+ 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, CODE
+ 1 \.MMIX\.sec\.0 0+10 789abcdef0123458 789abcdef0123458 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD
+Contents of section \.text:
+ 0+ e3fd0001 e3fd0004 .*
+Contents of section \.MMIX\.sec\.0:
+ 789abcdef0123458 b045197d 2c1b03b2 e4dbf877 0fc766fb .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/sec-6.d b/binutils-2.21/ld/testsuite/ld-mmix/sec-6.d
new file mode 100644
index 0000000..5b692e2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/sec-6.d
@@ -0,0 +1,37 @@
+#source: start.s
+#source: sec-6.s
+#source: a.s
+#as: -x
+#ld: -m elf64mmix
+#objcopy_linked_file: -O mmo
+#objdump: -xs
+
+# A non-loaded section with relocs would have the SEC_RELOC bit set in the
+# output if we didn't clear it. For reference, here's the ELF copied to
+# mmo, so we make sure no spurious flags are introduced.
+
+.*: file format mmo
+.*
+architecture: mmix, flags 0x0+10:
+HAS_SYMS
+start address 0x0+
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0+8 0+ 0+ 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, CODE
+ 1 \.debug_frame 0+10 0+ 0+ 0+ 2\*\*2
+ CONTENTS, READONLY, DEBUGGING
+SYMBOL TABLE:
+0+ g \.text Main
+0+ g \.text _start
+0+8 g \.text debugb
+2000000000000000 g \*ABS\* __bss_start
+2000000000000000 g \*ABS\* _edata
+2000000000000000 g \*ABS\* _end
+0+4 g \.text a
+
+Contents of section \.text:
+ 0000 e3fd0001 e3fd0004 .*
+Contents of section \.debug_frame:
+ 0000 00000000 00000004 00000000 00000008 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/sec-6.s b/binutils-2.21/ld/testsuite/ld-mmix/sec-6.s
new file mode 100644
index 0000000..7d83883
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/sec-6.s
@@ -0,0 +1,5 @@
+ .global debugb
+ .section .debug_frame,"",@progbits
+ .8byte a
+debugb:
+ .8byte debugb
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/sec-6m.d b/binutils-2.21/ld/testsuite/ld-mmix/sec-6m.d
new file mode 100644
index 0000000..8d12cfb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/sec-6m.d
@@ -0,0 +1,32 @@
+#source: start.s
+#source: sec-6.s
+#source: a.s
+#as: -x
+#ld: -m mmo
+#objdump: -xs
+
+# A non-loaded section with relocs would have the SEC_RELOC bit set in the
+# output if we didn't clear it.
+
+.*: file format mmo
+.*
+architecture: mmix, flags 0x0+10:
+HAS_SYMS
+start address 0x0+
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0+8 0+ 0+ 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, CODE
+ 1 \.debug_frame 0+10 0+ 0+ 0+ 2\*\*2
+ CONTENTS, READONLY, DEBUGGING
+SYMBOL TABLE:
+0+ g \.text Main
+0+ g \.text _start
+0+8 g \.text debugb
+0+4 g \.text a
+
+Contents of section \.text:
+ 0000 e3fd0001 e3fd0004 .*
+Contents of section \.debug_frame:
+ 0000 00000000 00000004 00000000 00000008 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/sec-7a.s b/binutils-2.21/ld/testsuite/ld-mmix/sec-7a.s
new file mode 100644
index 0000000..58cc7ab
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/sec-7a.s
@@ -0,0 +1,6 @@
+ .section .di
+ .byte 42
+ .rept 32763
+ .byte 0
+ .endr
+ .byte 43
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/sec-7b.s b/binutils-2.21/ld/testsuite/ld-mmix/sec-7b.s
new file mode 100644
index 0000000..963ca47
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/sec-7b.s
@@ -0,0 +1,6 @@
+ .section .di
+ .byte 44
+ .rept 32764
+ .byte 0
+ .endr
+ .byte 45
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/sec-7c.s b/binutils-2.21/ld/testsuite/ld-mmix/sec-7c.s
new file mode 100644
index 0000000..f6faf85
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/sec-7c.s
@@ -0,0 +1,6 @@
+ .section .di
+ .byte 46
+ .rept 32765
+ .byte 0
+ .endr
+ .byte 47
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/sec-7d.s b/binutils-2.21/ld/testsuite/ld-mmix/sec-7d.s
new file mode 100644
index 0000000..4d73c5f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/sec-7d.s
@@ -0,0 +1,6 @@
+ .section .di
+ .byte 48
+ .rept 32766
+ .byte 0
+ .endr
+ .byte 49
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/sec-7e.s b/binutils-2.21/ld/testsuite/ld-mmix/sec-7e.s
new file mode 100644
index 0000000..2ffde13
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/sec-7e.s
@@ -0,0 +1,6 @@
+ .section .di
+ .byte 50
+ .rept 32767
+ .byte 0
+ .endr
+ .byte 51
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/sec-7m.d b/binutils-2.21/ld/testsuite/ld-mmix/sec-7m.d
new file mode 100644
index 0000000..bc930e5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/sec-7m.d
@@ -0,0 +1,38 @@
+#source: start.s
+#source: sec-7a.s
+#source: sec-7b.s
+#source: sec-7c.s
+#source: sec-7d.s
+#source: sec-7e.s
+#ld: -m mmo
+#objcopy_linked_file:
+#objdump: -hs
+
+# When producing mmo output: sections with an input length not a
+# multiple of 4, and whose total length in linked output
+# exceeded the "chunk size" (32768), would get to-4-padding
+# inserted at each chunk division. Also check that section
+# sizes aren't rounded up at objcopy.
+
+.*: file format mmo
+
+Sections:
+Idx Name[ ]+Size[ ]+VMA[ ]+LMA[ ]+File off Algn
+ 0 \.text[ ]+0+4 0+ 0+ 0+ 2\*\*2
+[ ]+CONTENTS, ALLOC, LOAD, CODE
+ 1 \.di +0+27ffb +0+4 +0+4 +0+ +2\*\*2
+[ ]+CONTENTS, READONLY
+Contents of section \.text:
+ 0000 e3fd0001[ ]+.*
+Contents of section \.di:
+ 00000 2a000000 00000000 00000000 00000000 .*
+#...
+ 07ff0 00000000 00000000 00000000 2b2c0000 .*
+#...
+ 0fff0 00000000 00000000 00002d2e 00000000 .*
+#...
+ 17ff0 00000000 00000000 002f3000 00000000 .*
+#...
+ 1fff0 00000000 00000000 00313200 00000000 .*
+#...
+ 27ff0 00000000 00000000 000033[ ]+.*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/sec-8a.s b/binutils-2.21/ld/testsuite/ld-mmix/sec-8a.s
new file mode 100644
index 0000000..4ac94f7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/sec-8a.s
@@ -0,0 +1,4 @@
+ .section .text.1
+ .byte 42
+ .space 32759
+ .byte 43
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/sec-8b.s b/binutils-2.21/ld/testsuite/ld-mmix/sec-8b.s
new file mode 100644
index 0000000..17eb415
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/sec-8b.s
@@ -0,0 +1,4 @@
+ .section .text.1
+ .byte 44
+ .space 32764
+ .byte 45
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/sec-8d.s b/binutils-2.21/ld/testsuite/ld-mmix/sec-8d.s
new file mode 100644
index 0000000..0eb5b56
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/sec-8d.s
@@ -0,0 +1,4 @@
+ .section .text.1
+ .byte 48
+ .space 32766
+ .byte 49
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/sec-8m.d b/binutils-2.21/ld/testsuite/ld-mmix/sec-8m.d
new file mode 100644
index 0000000..fb06b04
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/sec-8m.d
@@ -0,0 +1,30 @@
+#source: start.s
+#source: sec-8a.s
+#source: sec-8b.s
+#source: sec-8m.s
+#source: sec-8d.s
+#ld: -m mmo
+#objdump: -s
+
+# Distantly related to sec-7m.s in that section lengths mattered for the
+# bug. When one input-section (seen in mmo.c as a chunk of data to
+# output) had a length not a multiple of four, the last bytes were saved
+# to be concatenated with the next chunk. If it was followed by a chunk
+# with a leading multiple-of-four number of zero bytes, those zero bytes
+# would be omitted, and the "saved" bytes would be concatenated with the
+# following (not-all-zeros) bytes. Hence a shift of the last bytes of the
+# first chunk.
+
+.*: file format mmo
+
+Contents of section \.text:
+ 00000 e3fd0001 2a000000 00000000 00000000 .*
+#...
+ 07ff0 00000000 00000000 00000000 2b2c0000 .*
+#...
+ 0fff0 00000000 00000000 00002d00 00000000 .*
+ 10000 00000000 00000000 0000002e 2f303132 .*
+ 10010 33000000 00000000 00000000 00000000 .*
+ 10020 00300000 00000000 00000000 00000000 .*
+#...
+ 18020 31 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/sec-8m.s b/binutils-2.21/ld/testsuite/ld-mmix/sec-8m.s
new file mode 100644
index 0000000..dc695da
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/sec-8m.s
@@ -0,0 +1,4 @@
+ .section .text.1
+ .byte 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0
+ .byte 46, 47, 48, 49, 50, 51
+ .byte 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/sec-9.d b/binutils-2.21/ld/testsuite/ld-mmix/sec-9.d
new file mode 100644
index 0000000..4bddc35
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/sec-9.d
@@ -0,0 +1,19 @@
+#source: start.s
+#ld: -m mmo -T $srcdir/$subdir/mmosec2.ld
+#objdump: -sh
+
+# This is based on sec-5.d which used to link .text at an unexpected
+# address to check that a special section was created in objdump when
+# reading in contents at an unusual location without a proper section
+# descriptor. As .text (like .data) now gets a section descriptor when
+# linked to an unexpected location, the old test is transformed into a
+# specific check that the section description for .text works.
+
+.*: file format mmo
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0+4 1000000000000000 1000000000000000 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+Contents of section \.text:
+ 1000000000000000 e3fd0001 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/spec801.d b/binutils-2.21/ld/testsuite/ld-mmix/spec801.d
new file mode 100644
index 0000000..27918e9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/spec801.d
@@ -0,0 +1,21 @@
+#source: bspec801.s
+#source: start.s
+#ld: -m mmo
+#objdump: -sh
+
+# Check exceptional cases for LOP_SPEC 80, which we parse according to a
+# specific format: see documentation and mmo.c
+# #1: name length has LOP_QUOTE.
+
+.*: file format mmo
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 00000004 0000000000000000 0000000000000000 00000000 2\*\*2
+ CONTENTS, ALLOC, LOAD, CODE
+ 1 \.MMIX\.spec_data\.80 00000004 0000000000000000 0000000000000000 00000000 2\*\*2
+ CONTENTS
+Contents of section \.text:
+ 0000 e3fd0001 .*
+Contents of section \.MMIX\.spec_data\.80:
+ 0000 98000001 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/spec802.d b/binutils-2.21/ld/testsuite/ld-mmix/spec802.d
new file mode 100644
index 0000000..ea0ebc3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/spec802.d
@@ -0,0 +1,24 @@
+#source: bspec802.s
+#source: start.s
+#ld: -m mmo
+#objdump: -sh
+
+# See spec801.d.
+# #2: non-quote LOP in name.
+
+.*: file format mmo
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0+4 0+ 0+ 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, CODE
+ 1 \.data 0+4 2000000000000000 2000000000000000 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD
+ 2 \.MMIX\.spec_data\.80 0+4 0+ 0+ 0+ 2\*\*2
+ CONTENTS
+Contents of section \.text:
+ 0000 e3fd0001 .*
+Contents of section \.data:
+ 2000000000000000 00112233 .*
+Contents of section \.MMIX\.spec_data\.80:
+ 0000 00000004 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/spec803.d b/binutils-2.21/ld/testsuite/ld-mmix/spec803.d
new file mode 100644
index 0000000..b933d6c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/spec803.d
@@ -0,0 +1,24 @@
+#source: bspec803.s
+#source: start.s
+#ld: -m mmo
+#objdump: -sh
+
+# See spec801.d.
+# #3: LOP_QUOTE in name and non-quote LOP in section flags.
+
+.*: file format mmo
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0+4 0+ 0+ 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, CODE
+ 1 \.data 0+4 2000000000000000 2000000000000000 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD
+ 2 \.MMIX\.spec_data\.80 0+c 0+ 0+ 0+ 2\*\*2
+ CONTENTS
+Contents of section \.text:
+ 0000 e3fd0001 .*
+Contents of section \.data:
+ 2000000000000000 00112233 .*
+Contents of section \.MMIX\.spec_data\.80:
+ 0000 00000002 61616161 98616161 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/spec804.d b/binutils-2.21/ld/testsuite/ld-mmix/spec804.d
new file mode 100644
index 0000000..170bc5e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/spec804.d
@@ -0,0 +1,24 @@
+#source: bspec804.s
+#source: start.s
+#ld: -m mmo
+#objdump: -sh
+
+# See spec801.d.
+# #4: non-quote LOP in section length, high part.
+
+.*: file format mmo
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0+4 0+ 0+ 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, CODE
+ 1 \.data 0+4 2000000000000000 2000000000000000 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD
+ 2 \.MMIX\.spec_data\.80 0+10 0+ 0+ 0+ 2\*\*2
+ CONTENTS
+Contents of section \.text:
+ 0000 e3fd0001 .*
+Contents of section \.data:
+ 2000000000000000 00112233 .*
+Contents of section \.MMIX\.spec_data\.80:
+ 0000 00000002 61616161 61616161 00000011 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/spec805.d b/binutils-2.21/ld/testsuite/ld-mmix/spec805.d
new file mode 100644
index 0000000..c4cdd02
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/spec805.d
@@ -0,0 +1,25 @@
+#source: bspec805.s
+#source: start.s
+#ld: -m mmo
+#objdump: -sh
+
+# See spec801.d.
+# #5: non-quote LOP in section length, low part.
+
+.*: file format mmo
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0+4 0+ 0+ 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, CODE
+ 1 \.data 0+4 2000000000000000 2000000000000000 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD
+ 2 \.MMIX\.spec_data\.80 0+14 0+ 0+ 0+ 2\*\*2
+ CONTENTS
+Contents of section \.text:
+ 0000 e3fd0001 .*
+Contents of section \.data:
+ 2000000000000000 00112233 .*
+Contents of section \.MMIX\.spec_data\.80:
+ 0000 00000002 61616161 61616161 00000011 .*
+ 0010 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/spec806.d b/binutils-2.21/ld/testsuite/ld-mmix/spec806.d
new file mode 100644
index 0000000..7f64948
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/spec806.d
@@ -0,0 +1,25 @@
+#source: bspec806.s
+#source: start.s
+#ld: -m mmo
+#objdump: -sh
+
+# See spec801.d.
+# #6: non-quote LOP in section vma, high part.
+
+.*: file format mmo
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0+4 0+ 0+ 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, CODE
+ 1 \.data 0+4 2000000000000000 2000000000000000 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD
+ 2 \.MMIX\.spec_data\.80 0+18 0+ 0+ 0+ 2\*\*2
+ CONTENTS
+Contents of section \.text:
+ 0000 e3fd0001 .*
+Contents of section \.data:
+ 2000000000000000 00112233 .*
+Contents of section \.MMIX\.spec_data\.80:
+ 0000 00000002 61616161 61616161 00000011 .*
+ 0010 00000000 0000000c .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/spec807.d b/binutils-2.21/ld/testsuite/ld-mmix/spec807.d
new file mode 100644
index 0000000..f37e57a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/spec807.d
@@ -0,0 +1,25 @@
+#source: bspec807.s
+#source: start.s
+#ld: -m mmo
+#objdump: -sh
+
+# See spec801.d.
+# #7: non-quote LOP in section vma, low part.
+
+.*: file format mmo
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0+4 0+ 0+ 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, CODE
+ 1 \.data 0+4 2000000000000000 2000000000000000 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD
+ 2 \.MMIX\.spec_data\.80 0+1c 0+ 0+ 0+ 2\*\*2
+ CONTENTS
+Contents of section \.text:
+ 0000 e3fd0001 .*
+Contents of section \.data:
+ 2000000000000000 00112233 .*
+Contents of section \.MMIX\.spec_data\.80:
+ 0000 00000002 61616161 61616161 00000011 .*
+ 0010 00000000 0000000c 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/spec808.d b/binutils-2.21/ld/testsuite/ld-mmix/spec808.d
new file mode 100644
index 0000000..e1d6784
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/spec808.d
@@ -0,0 +1,25 @@
+#source: bspec808.s
+#source: start.s
+#ld: -m mmo
+#objdump: -sh
+
+# See spec801.d.
+# #8: Indecent section length.
+
+.*: file format mmo
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0+4 0+ 0+ 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, CODE
+ 1 \.data 0+4 2000000000000000 2000000000000000 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD
+ 2 \.MMIX\.spec_data\.80 0+20 0+ 0+ 0+ 2\*\*2
+ CONTENTS
+Contents of section \.text:
+ 0000 e3fd0001 .*
+Contents of section \.data:
+ 2000000000000000 00112233 .*
+Contents of section \.MMIX\.spec_data\.80:
+ 0000 00000002 61616161 61616161 00000011 .*
+ 0010 0000ff00 00000000 000000ff 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/start-1.d b/binutils-2.21/ld/testsuite/ld-mmix/start-1.d
new file mode 100644
index 0000000..37c23d6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/start-1.d
@@ -0,0 +1,21 @@
+#source: start2.s
+#ld: -m elf64mmix
+#objdump: -td
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+ l d \.text 0+ (|\.text)
+0+4 g \.text 0+ _start
+2000000000000000 g \*ABS\* 0+ __bss_start
+2000000000000000 g \*ABS\* 0+ _edata
+2000000000000000 g \*ABS\* 0+ _end
+0+4 g \.text 0+ _start\.
+
+Disassembly of section \.text:
+
+0+ <_start-0x4>:
+ 0: fd000001 swym 0,0,1
+
+0+4 <_start>:
+ 4: fd000002 swym 0,0,2
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/start-2.d b/binutils-2.21/ld/testsuite/ld-mmix/start-2.d
new file mode 100644
index 0000000..e380dc0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/start-2.d
@@ -0,0 +1,4 @@
+#source: main1.s
+#source: a.s
+#ld: -m mmo -e a
+#error: Bad symbol definition: `Main' set to
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/start.s b/binutils-2.21/ld/testsuite/ld-mmix/start.s
new file mode 100644
index 0000000..b2e3c85
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/start.s
@@ -0,0 +1,5 @@
+* Just a start symbol and some non-NOP padding.
+ .text
+ .global _start
+_start:
+ SET $253,1
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/start2.s b/binutils-2.21/ld/testsuite/ld-mmix/start2.s
new file mode 100644
index 0000000..3398788
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/start2.s
@@ -0,0 +1,5 @@
+ .text
+ SWYM 1
+ .global _start
+_start:
+ SWYM 2
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/start3.s b/binutils-2.21/ld/testsuite/ld-mmix/start3.s
new file mode 100644
index 0000000..1055870
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/start3.s
@@ -0,0 +1,7 @@
+# When GC, all sections in each file must be referenced from within a kept
+# section.
+ .section .init,"ax",@progbits
+_start:
+ .quad x+41
+ .quad x2+42
+
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/start4.s b/binutils-2.21/ld/testsuite/ld-mmix/start4.s
new file mode 100644
index 0000000..4948d78
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/start4.s
@@ -0,0 +1,6 @@
+# When GC, all sections in each file must be referenced from within a kept
+# section (which .init is, which .text isn't). Here, we don't refer to
+# anything so whatever is linked will be discarded.
+ .section .init,"ax",@progbits
+_start:
+ SETL $119,1190
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/sym-1.d b/binutils-2.21/ld/testsuite/ld-mmix/sym-1.d
new file mode 100644
index 0000000..64d6376
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/sym-1.d
@@ -0,0 +1,11 @@
+#source: start.s
+#source: a.s
+#ld: -m mmo
+#nm: -n
+
+# Test that nm can grok a simple mmo symbol table (or that mmo lets nm
+# grok it).
+
+0+ T Main
+0+ T _start
+0+4 T a
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/sym-2.d b/binutils-2.21/ld/testsuite/ld-mmix/sym-2.d
new file mode 100644
index 0000000..61bae32
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/sym-2.d
@@ -0,0 +1,142 @@
+#source: start.s
+#source: sym-2.s
+#source: a.s
+#as: -globalize-symbols
+#ld: -m mmo
+#objcopy_linked_file:
+#objdump: -t
+
+.*: file format mmo
+
+SYMBOL TABLE:
+0+ g[ ]+\.text Main
+0+4 g[ ]+\.text a40
+0+4 g[ ]+\.text a33
+0+4 g[ ]+\.text a45
+0+4 g[ ]+\.text a21
+0+4 g[ ]+\.text a99
+0+4 g[ ]+\.text a114
+0+4 g[ ]+\.text a122
+0+4 g[ ]+\.text a73
+0+4 g[ ]+\.text a111
+0+4 g[ ]+\.text a109
+0+4 g[ ]+\.text a65
+0+4 g[ ]+\.text a28
+0+4 g[ ]+\.text a30
+0+4 g[ ]+\.text a10
+0+4 g[ ]+\.text a103
+0+4 g[ ]+\.text a42
+0+4 g[ ]+\.text a62
+0+4 g[ ]+\.text a25
+0+4 g[ ]+\.text a128
+0+4 g[ ]+\.text a9
+0+4 g[ ]+\.text a11
+0+4 g[ ]+\.text a81
+0+4 g[ ]+\.text a55
+0+4 g[ ]+\.text a88
+0+4 g[ ]+\.text a100
+0+4 g[ ]+\.text a104
+0+4 g[ ]+\.text a8
+0+4 g[ ]+\.text a86
+0+4 g[ ]+\.text a91
+0+4 g[ ]+\.text a1
+0+4 g[ ]+\.text a49
+0+4 g[ ]+\.text a43
+0+4 g[ ]+\.text a56
+0+4 g[ ]+\.text a116
+0+4 g[ ]+\.text a124
+0+4 g[ ]+\.text a98
+0+4 g[ ]+\.text a117
+0+4 g[ ]+\.text a80
+0+4 g[ ]+\.text a121
+0+4 g[ ]+\.text a36
+0+4 g[ ]+\.text a75
+0+4 g[ ]+\.text a48
+0+4 g[ ]+\.text a3
+0+4 g[ ]+\.text a63
+0+4 g[ ]+\.text a26
+0+4 g[ ]+\.text a78
+0+4 g[ ]+\.text a61
+0+4 g[ ]+\.text a24
+0+4 g[ ]+\.text a64
+0+4 g[ ]+\.text a27
+0+4 g[ ]+\.text a83
+0+4 g[ ]+\.text a57
+0+4 g[ ]+\.text a123
+0+4 g[ ]+\.text a34
+0+4 g[ ]+\.text a12
+0+4 g[ ]+\.text a14
+0+4 g[ ]+\.text a70
+0+4 g[ ]+\.text a39
+0+4 g[ ]+\.text a82
+0+4 g[ ]+\.text a102
+0+4 g[ ]+\.text a106
+0+4 g[ ]+\.text a110
+0+ g[ ]+\.text _start
+0+4 g[ ]+\.text a41
+0+4 g[ ]+\.text a85
+0+4 g[ ]+\.text a58
+0+4 g[ ]+\.text a89
+0+4 g[ ]+\.text a54
+0+4 g[ ]+\.text a19
+0+4 g[ ]+\.text a93
+0+4 g[ ]+\.text a126
+0+4 g[ ]+\.text a22
+0+4 g[ ]+\.text a96
+0+4 g[ ]+\.text a7
+0+4 g[ ]+\.text a35
+0+4 g[ ]+\.text a31
+0+4 g[ ]+\.text a5
+0+4 g[ ]+\.text a44
+0+4 g[ ]+\.text a105
+0+4 g[ ]+\.text a90
+0+4 g[ ]+\.text a97
+0+4 g[ ]+\.text a92
+0+4 g[ ]+\.text a2
+0+4 g[ ]+\.text a120
+0+4 g[ ]+\.text a113
+0+4 g[ ]+\.text a77
+0+4 g[ ]+\.text a125
+0+4 g[ ]+\.text a118
+0+4 g[ ]+\.text a32
+0+4 g[ ]+\.text a108
+0+4 g[ ]+\.text a47
+0+4 g[ ]+\.text a112
+0+4 g[ ]+\.text a59
+0+4 g[ ]+\.text a87
+0+4 g[ ]+\.text a94
+0+4 g[ ]+\.text a20
+0+4 g[ ]+\.text a51
+0+4 g[ ]+\.text a16
+0+4 g[ ]+\.text a53
+0+4 g[ ]+\.text a18
+0+4 g[ ]+\.text a66
+0+4 g[ ]+\.text a29
+0+4 g[ ]+\.text a72
+0+4 g[ ]+\.text a79
+0+4 g[ ]+\.text a74
+0+4 g[ ]+\.text a68
+0+4 g[ ]+\.text a95
+0+4 g[ ]+\.text a60
+0+4 g[ ]+\.text a23
+0+4 g[ ]+\.text a67
+0+4 g[ ]+\.text a
+0+4 g[ ]+\.text a38
+0+4 g[ ]+\.text a107
+0+4 g[ ]+\.text a127
+0+4 g[ ]+\.text a101
+0+4 g[ ]+\.text a115
+0+4 g[ ]+\.text a71
+0+4 g[ ]+\.text a84
+0+4 g[ ]+\.text a69
+0+4 g[ ]+\.text a37
+0+4 g[ ]+\.text a76
+0+4 g[ ]+\.text a52
+0+4 g[ ]+\.text a17
+0+4 g[ ]+\.text a13
+0+4 g[ ]+\.text a50
+0+4 g[ ]+\.text a15
+0+4 g[ ]+\.text a119
+0+4 g[ ]+\.text a6
+0+4 g[ ]+\.text a46
+0+4 g[ ]+\.text a4
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/sym-2.s b/binutils-2.21/ld/testsuite/ld-mmix/sym-2.s
new file mode 100644
index 0000000..c8df27e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/sym-2.s
@@ -0,0 +1,130 @@
+% Just 128 symbols to test that we can handle it in mmo. Assemble it with
+% -globalize-symbols.
+a1:
+a2:
+a3:
+a4:
+a5:
+a6:
+a7:
+a8:
+a9:
+a10:
+a11:
+a12:
+a13:
+a14:
+a15:
+a16:
+a17:
+a18:
+a19:
+a20:
+a21:
+a22:
+a23:
+a24:
+a25:
+a26:
+a27:
+a28:
+a29:
+a30:
+a31:
+a32:
+a33:
+a34:
+a35:
+a36:
+a37:
+a38:
+a39:
+a40:
+a41:
+a42:
+a43:
+a44:
+a45:
+a46:
+a47:
+a48:
+a49:
+a50:
+a51:
+a52:
+a53:
+a54:
+a55:
+a56:
+a57:
+a58:
+a59:
+a60:
+a61:
+a62:
+a63:
+a64:
+a65:
+a66:
+a67:
+a68:
+a69:
+a70:
+a71:
+a72:
+a73:
+a74:
+a75:
+a76:
+a77:
+a78:
+a79:
+a80:
+a81:
+a82:
+a83:
+a84:
+a85:
+a86:
+a87:
+a88:
+a89:
+a90:
+a91:
+a92:
+a93:
+a94:
+a95:
+a96:
+a97:
+a98:
+a99:
+a100:
+a101:
+a102:
+a103:
+a104:
+a105:
+a106:
+a107:
+a108:
+a109:
+a110:
+a111:
+a112:
+a113:
+a114:
+a115:
+a116:
+a117:
+a118:
+a119:
+a120:
+a121:
+a122:
+a123:
+a124:
+a125:
+a126:
+a127:
+a128:
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/undef-1.d b/binutils-2.21/ld/testsuite/ld-mmix/undef-1.d
new file mode 100644
index 0000000..fb8c7ee
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/undef-1.d
@@ -0,0 +1,4 @@
+#source: undef-1.s
+#source: start.s
+#ld: -m elf64mmix
+#error: undefined reference to `regvar'
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/undef-1.s b/binutils-2.21/ld/testsuite/ld-mmix/undef-1.s
new file mode 100644
index 0000000..668cd15
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/undef-1.s
@@ -0,0 +1 @@
+ ADDU regvar,$8,$9
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/undef-1m.d b/binutils-2.21/ld/testsuite/ld-mmix/undef-1m.d
new file mode 100644
index 0000000..001d7f6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/undef-1m.d
@@ -0,0 +1,4 @@
+#source: undef-1.s
+#source: start.s
+#ld: -m mmo
+#error: undefined reference to `regvar'
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/undef-2.d b/binutils-2.21/ld/testsuite/ld-mmix/undef-2.d
new file mode 100644
index 0000000..52844db
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/undef-2.d
@@ -0,0 +1,5 @@
+#source: undef-2.s
+#source: start.s
+#as: -x
+#ld: -m elf64mmix
+#error: undefined reference to `undefd'
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/undef-2.s b/binutils-2.21/ld/testsuite/ld-mmix/undef-2.s
new file mode 100644
index 0000000..d912b15
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/undef-2.s
@@ -0,0 +1 @@
+ PUSHJ $5,undefd
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/undef-2m.d b/binutils-2.21/ld/testsuite/ld-mmix/undef-2m.d
new file mode 100644
index 0000000..aa0becc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/undef-2m.d
@@ -0,0 +1,5 @@
+#source: undef-2.s
+#source: start.s
+#as: -x
+#ld: -m mmo
+#error: undefined reference to `undefd'
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/undef-3.d b/binutils-2.21/ld/testsuite/ld-mmix/undef-3.d
new file mode 100644
index 0000000..2571513
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/undef-3.d
@@ -0,0 +1,32 @@
+#source: start.s
+#ld: -u undefd -m elf64mmix
+#readelf: -S -s
+
+There are 5 section headers, starting at offset 0xa0:
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +Offset
+ +Size +EntSize +Flags +Link +Info +Align
+ +\[ 0\] +NULL +0+ +0+
+ +0+ +0+ +0 +0 +0
+ +\[ 1\] \.text +PROGBITS +0+ +0+78
+ +0+4 +0+ +AX +0 +0 +4
+ +\[ 2\] \.shstrtab +STRTAB +0+ +0+7c
+ +0+21 +0+ +0 +0 +1
+ +\[ 3\] \.symtab +SYMTAB +0+ +0+1e0
+ +0+c0 +0+18 +4 +2 +8
+ +\[ 4\] \.strtab +STRTAB +0+ +0+2a0
+ +0+2f +0+ +0 +0 +1
+Key to Flags:
+#...
+
+Symbol table '\.symtab' contains 8 entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +0: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND
+ +1: 0+ +0 +SECTION +LOCAL +DEFAULT +1
+ +2: 0+ +0 +NOTYPE +GLOBAL +DEFAULT +UND undefd
+ +3: 0+ +0 +NOTYPE +GLOBAL +DEFAULT +1 _start
+ +4: 2000000000000000 +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +5: 2000000000000000 +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +6: 2000000000000000 +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+ +7: 0+ +0 +NOTYPE +GLOBAL +DEFAULT +1 _start\.
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/undef-3m.d b/binutils-2.21/ld/testsuite/ld-mmix/undef-3m.d
new file mode 100644
index 0000000..08e1df1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/undef-3m.d
@@ -0,0 +1,18 @@
+#source: start.s
+#ld: -m mmo -u undefd
+#objdump: -x
+
+.*: file format mmo
+.*
+architecture: mmix, flags 0x0+10:
+HAS_SYMS
+start address 0x0+
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0+4 0+ 0+ 0+ 2\*\*2
+ CONTENTS, ALLOC, LOAD, CODE
+SYMBOL TABLE:
+0+ g \.text Main
+0+ g \*UND\* undefd
+0+ g \.text _start
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/x.s b/binutils-2.21/ld/testsuite/ld-mmix/x.s
new file mode 100644
index 0000000..e7222b1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/x.s
@@ -0,0 +1,29 @@
+;# Main file, x.s, with the program (_start) referring to two
+;# linkonce functions fn and fn2. The functions fn and fn2 are
+;# supposed to be equivalent of C++ template instantiations; the
+;# main file instantiates fn. An exception-table-lookalike entry
+;# refers to fn via a local label. We use .gcc_except_table as we
+;# can't be bothered to produce syntactically valid .eh_frame contents
+;# and there's no option to turn off warning messages for invalid
+;# contents.
+
+ .text
+ .global _start
+_start:
+ .long fn
+ .long fn2
+
+ .section .gnu.linkonce.t.fn,"ax",@progbits
+ .weak fn
+ .type fn,@function
+fn:
+L:a:
+ .long 1
+ .long 2
+L:b:
+ .size fn,L:b-L:a
+
+ .section .gcc_except_table,"aw",@progbits
+ .long 2
+ .long L:a
+ .long L:b-L:a
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/y.s b/binutils-2.21/ld/testsuite/ld-mmix/y.s
new file mode 100644
index 0000000..1773d67
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/y.s
@@ -0,0 +1,33 @@
+;# Library file y.s has linkonce entries for fn and fn2. Note
+;# that this version of fn has different code, as if compiled
+;# with different optimization flags than the one in x.s (not
+;# important for this test, though). The reference from
+;# .gcc_except_table to the linkonce-excluded fn2 must be zero,
+;# or g++ EH will not work.
+
+ .section .gnu.linkonce.t.fn2,"ax",@progbits
+ .weak fn2
+ .type fn2,@function
+fn2:
+L:c:
+ .long 3
+L:d:
+ .size fn2,L:d-L:c
+
+ .section .gnu.linkonce.t.fn,"ax",@progbits
+ .weak fn
+ .type fn,@function
+fn:
+L:e:
+ .long 4
+L:f:
+ .size fn,L:f-L:e
+
+ .section .gcc_except_table,"aw",@progbits
+ .long 7
+ .long L:c
+ .long L:d-L:c
+
+ .long 0x6066
+ .long L:e
+ .long L:f-L:e
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/zeroeh.ld b/binutils-2.21/ld/testsuite/ld-mmix/zeroeh.ld
new file mode 100644
index 0000000..efdab4d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/zeroeh.ld
@@ -0,0 +1,4 @@
+SECTIONS {
+ .text 0xa00 : { *(.text); *(.gnu.linkonce.t.*) }
+ .gcc_except_table 0x2000 : { *(.gcc_except_table) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/zeroehelf.d b/binutils-2.21/ld/testsuite/ld-mmix/zeroehelf.d
new file mode 100644
index 0000000..7299234
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/zeroehelf.d
@@ -0,0 +1,17 @@
+#source: x.s
+#source: y.s
+#ld: -m elf64mmix -Ttext 0xa00 -T $srcdir/$subdir/zeroeh.ld
+#objdump: -s
+
+# The word at address 201c, for the linkonce-excluded section, must be zero.
+
+.*: file format elf64-mmix
+
+Contents of section \.text:
+ 0a00 00000a08 00000a10 00000001 00000002 .*
+ 0a10 00000003 .*
+Contents of section \.gcc_except_table:
+ 2000 00000002 00000a08 00000008 00000007 .*
+ 2010 00000a10 00000004 00006066 00000000 .*
+ 2020 00000004 .*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mmix/zeroehmmo.d b/binutils-2.21/ld/testsuite/ld-mmix/zeroehmmo.d
new file mode 100644
index 0000000..1b76532
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mmix/zeroehmmo.d
@@ -0,0 +1,16 @@
+#source: x.s
+#source: y.s
+#ld: -m mmo -Ttext 0xa00 -T $srcdir/$subdir/zeroeh.ld
+#objdump: -s
+
+# The word at address 201c, for the linkonce-excluded section, must be zero.
+
+.*: file format mmo
+
+Contents of section \.text:
+ 0a00 00000a08 00000a10 00000001 00000002 .*
+ 0a10 00000003 .*
+Contents of section \.gcc_except_table:
+ 2000 00000002 00000a08 00000008 00000007 .*
+ 2010 00000a10 00000004 00006066 00000000 .*
+ 2020 00000004 .*
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i112045-1.d b/binutils-2.21/ld/testsuite/ld-mn10300/i112045-1.d
new file mode 100644
index 0000000..dcb5a41
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i112045-1.d
@@ -0,0 +1,22 @@
+
+tmpdir/i112045-1.x: file format elf32-.*
+
+Disassembly of section .text:
+
+0+0 <_start>:
+ 0: fc d0 f8 0f[ ]+add 4088,a0
+ 4: 00 00
+ 6: cb[ ]+nop[ ]+
+ 7: cb[ ]+nop[ ]+
+
+0+08 <L01>:
+ 8: fc d0 2b 01[ ]+add 299,a0
+ c: 00 00
+ e: cb[ ]+nop[ ]+
+ f: cb[ ]+nop[ ]+
+
+0+010 <L02>:
+ 10: fc d0 08 00[ ]+add 8,a0
+ 14: 00 00
+ 16: cb[ ]+nop[ ]+
+ 17: cb[ ]+nop[ ]+
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i112045-1.s b/binutils-2.21/ld/testsuite/ld-mn10300/i112045-1.s
new file mode 100644
index 0000000..b9e0346
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i112045-1.s
@@ -0,0 +1,14 @@
+ .text
+ .global _start
+_start:
+ add 0x1000 - L01, A0
+ nop
+ nop
+L01:
+ add L01 + 0x123, A0
+ nop
+ nop
+L02:
+ add L02 - L01, A0
+ nop
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i112045-2.d b/binutils-2.21/ld/testsuite/ld-mn10300/i112045-2.d
new file mode 100644
index 0000000..9aa2d82
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i112045-2.d
@@ -0,0 +1,6 @@
+
+tmpdir/i112045-2.x: file format elf32-.*
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+[0-9a-f]+ R_MN10300_RELATIVE \*ABS\*\+0x[0-9a-f]+
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i112045-2.s b/binutils-2.21/ld/testsuite/ld-mn10300/i112045-2.s
new file mode 100644
index 0000000..90e942d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i112045-2.s
@@ -0,0 +1,12 @@
+ .section .data
+L01:
+ .long L04 - L01
+L02:
+ .long L04 - L02
+L03:
+ .long L04 - L03
+L04:
+ .long L04
+ .long L00
+ .equ L00, 0xff
+
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i112045-3.d b/binutils-2.21/ld/testsuite/ld-mn10300/i112045-3.d
new file mode 100644
index 0000000..c4b2f4b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i112045-3.d
@@ -0,0 +1,17 @@
+
+tmpdir/i112045-3.x: file format elf32-.*
+
+Disassembly of section .text:
+
+0+0100 <L001>:
+ 100:[ ]+24 00 01[ ]+mov[ ]+256,a0
+
+0+0103 <L002>:
+ 103:[ ]+24 00 01[ ]+mov[ ]+256,a0
+Disassembly of section .rodata:
+
+0+0106 <L004>:
+ 106:[ ]+06 00 00[ ]+movbu[ ]+d1,\(0 <L001-0x100>\)
+ 109:[ ]+00[ ]+clr[ ]+d0
+ 10a:[ ]+03 00 00[ ]+movhu[ ]+d0,\(0 <L001-0x100>\)
+[ ]+...
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i112045-3.s b/binutils-2.21/ld/testsuite/ld-mn10300/i112045-3.s
new file mode 100644
index 0000000..b372a77
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i112045-3.s
@@ -0,0 +1,11 @@
+ .text
+L001:
+ mov L001,A0
+L002:
+ mov L001,A0
+L003:
+
+ .section .rodata
+L004:
+ .long L003-L001
+ .long L003-L002
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i126256-1.c b/binutils-2.21/ld/testsuite/ld-mn10300/i126256-1.c
new file mode 100644
index 0000000..5907d87
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i126256-1.c
@@ -0,0 +1,7 @@
+void
+sub0 (int i)
+{
+ extern int sub (int);
+
+ sub (i);
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i126256-2.c b/binutils-2.21/ld/testsuite/ld-mn10300/i126256-2.c
new file mode 100644
index 0000000..2948e5b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i126256-2.c
@@ -0,0 +1,5 @@
+int
+sub (int i)
+{
+ return i + 10;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i127740.d b/binutils-2.21/ld/testsuite/ld-mn10300/i127740.d
new file mode 100644
index 0000000..456a75b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i127740.d
@@ -0,0 +1,17 @@
+
+tmpdir/i127740.x: file format elf32-.*
+
+Disassembly of section .text:
+
+0+0100 <_main>:
+ 100: 2d 00 03[ ]+mov 768,d1
+ 103: cb[ ]+nop
+ 104: cb[ ]+nop
+ 105: cb[ ]+nop
+ ...
+
+0+0200 <_dummy>:
+ 200: 00[ ]+clr d0
+ 201: 02 00 00[ ]+movbu d0,\(0 <_main-0x100>\)
+ 204: df 00 00[ ]+ret \[\],0
+ ...
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i127740.s b/binutils-2.21/ld/testsuite/ld-mn10300/i127740.s
new file mode 100644
index 0000000..358266b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i127740.s
@@ -0,0 +1,12 @@
+ .section .text
+ .global _main
+ .global _dummy
+_main:
+ mov _g_label,d1 # instruction is changed by relaxations
+
+ .balign 0x100
+_dummy:
+ .long _dummy
+ ret [],0
+ .size _main, .-_main
+ .comm _g_label,4,4
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i135409-1.d b/binutils-2.21/ld/testsuite/ld-mn10300/i135409-1.d
new file mode 100644
index 0000000..7fa868a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i135409-1.d
@@ -0,0 +1,11 @@
+
+Symbol table '.symtab' contains .. entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+#...
+ +..: 0[0-9a-f]+ +7 +FUNC +LOCAL +DEFAULT +. _func
+#...
+ +..: 0[0-9a-f]+ +0 +NOTYPE +LOCAL +DEFAULT +. A
+ +..: 0[0-9a-f]+ +7 +FUNC +GLOBAL +DEFAULT +. _func2
+#...
+ +..: 0[0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +. BOTTOM
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i135409-1.s b/binutils-2.21/ld/testsuite/ld-mn10300/i135409-1.s
new file mode 100644
index 0000000..b9faaf4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i135409-1.s
@@ -0,0 +1,29 @@
+ .text
+
+ nop
+
+ .global _start
+_start:
+ .type _func, @function
+_func:
+ mov L001,A1
+ nop
+A:
+ mov L001,A1
+ .size _func, . - _func
+
+
+ .global _func2
+_func2:
+ .type _func2, @function
+ mov L001,A1
+ nop
+ mov L001,A1
+ .size _func2, . - _func2
+
+ .global BOTTOM
+BOTTOM:
+
+ .data
+L001:
+
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i135409-2.d b/binutils-2.21/ld/testsuite/ld-mn10300/i135409-2.d
new file mode 100644
index 0000000..502a3ba
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i135409-2.d
@@ -0,0 +1,11 @@
+
+Symbol table '.symtab' contains .. entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+#...
+ +..: 0[0-9a-f]+02 +0 +NOTYPE +LOCAL +DEFAULT +. _A
+ +..: 0[0-9a-f]+08 +0 +NOTYPE +LOCAL +DEFAULT +. _B
+ +..: 0[0-9a-f]+08 +0 +NOTYPE +LOCAL +DEFAULT +. _C
+ +..: 0[0-9a-f]+10 +7 +FUNC +LOCAL +DEFAULT +. _func
+ +..: 0[0-9a-f]+14 +0 +NOTYPE +LOCAL +DEFAULT +. _D
+ +..: 0[0-9a-f]+17 +0 +NOTYPE +LOCAL +DEFAULT +. BOTTOM
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i135409-2.s b/binutils-2.21/ld/testsuite/ld-mn10300/i135409-2.s
new file mode 100644
index 0000000..36448ed
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i135409-2.s
@@ -0,0 +1,23 @@
+ .text
+ .global _start
+_start:
+ add A0, A1
+_A:
+ mov L001, A0
+_B:
+ .balign 0x8
+_C:
+ nop
+ .balign 0x10
+
+ .type _func, @function
+_func:
+ mov L001, A1
+ nop
+_D:
+ mov L001, A1
+BOTTOM:
+ .size _func, . - _func
+
+ .data
+L001:
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i135409-3.d b/binutils-2.21/ld/testsuite/ld-mn10300/i135409-3.d
new file mode 100644
index 0000000..1ea91ba
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i135409-3.d
@@ -0,0 +1,16 @@
+
+tmpdir/i135409-3.x: file format elf32-.*
+
+Disassembly of section .text:
+
+0+0 <_func>:
+ 0: 25 1f 00[ ]+mov 31,a1
+ 3: cb[ ]+nop
+
+0+04 <A>:
+ 4: 25 1f 00[ ]+mov 31,a1
+ 7: cb[ ]+nop
+
+0+08 <BOTTOM>:
+ 8: e1[ ]+add d0,d1
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i135409-3.s b/binutils-2.21/ld/testsuite/ld-mn10300/i135409-3.s
new file mode 100644
index 0000000..e83ad96
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i135409-3.s
@@ -0,0 +1,16 @@
+ .text
+ .global _start
+_start:
+ .type _func, @function
+_func:
+ mov L001,A1
+ nop
+A:
+ mov L001,A1
+BOTTOM:
+ .balign 0x8
+ add D0,D1
+ .size _func, .-func
+
+ .data
+L001:
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i135409-4.d b/binutils-2.21/ld/testsuite/ld-mn10300/i135409-4.d
new file mode 100644
index 0000000..f14ea7d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i135409-4.d
@@ -0,0 +1,7 @@
+
+tmpdir/i135409-4.x: file format elf32-.*
+
+Disassembly of section .text:
+
+0+0 <_start>:
+ 0:[ ]+cc 00 07[ ]+jmp[ ]+700 \<L001\>
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i135409-4.s b/binutils-2.21/ld/testsuite/ld-mn10300/i135409-4.s
new file mode 100644
index 0000000..90badde
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i135409-4.s
@@ -0,0 +1,8 @@
+ .text
+ .global _start
+_start:
+ jmp L001
+
+ .section .text1
+L001:
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i135409-4.t b/binutils-2.21/ld/testsuite/ld-mn10300/i135409-4.t
new file mode 100644
index 0000000..9d905cb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i135409-4.t
@@ -0,0 +1,23 @@
+SECTIONS
+{
+ . = 0x0;
+ .text :
+ {
+ *(.text)
+ }
+
+ . = 0x700;
+ .text1 :
+ {
+ *(.text1)
+ }
+ . = 0x8100;
+ .bss :
+ {
+ *(.bss)
+ }
+ .data :
+ {
+ *(.data)
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i135409-5.d b/binutils-2.21/ld/testsuite/ld-mn10300/i135409-5.d
new file mode 100644
index 0000000..dbff701
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i135409-5.d
@@ -0,0 +1,7 @@
+
+tmpdir/i135409-5.x: file format elf32-.*
+
+Disassembly of section .text:
+
+0+0700 <_start>:
+ 700:[ ]+cc 00 f9[ ]+jmp[ ]+0 \<L001\>
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i135409-5.s b/binutils-2.21/ld/testsuite/ld-mn10300/i135409-5.s
new file mode 100644
index 0000000..23897e8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i135409-5.s
@@ -0,0 +1,8 @@
+ .text
+ .global _start
+_start:
+ jmp L001
+
+ .section .text1
+L001:
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i135409-5.t b/binutils-2.21/ld/testsuite/ld-mn10300/i135409-5.t
new file mode 100644
index 0000000..8b42814
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i135409-5.t
@@ -0,0 +1,23 @@
+SECTIONS
+{
+ . = 0x0;
+ .text1 :
+ {
+ *(.text1)
+ }
+
+ . = 0x700;
+ .text :
+ {
+ *(.text)
+ }
+ . = 0x8100;
+ .bss :
+ {
+ *(.bss)
+ }
+ .data :
+ {
+ *(.data)
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i143317.d b/binutils-2.21/ld/testsuite/ld-mn10300/i143317.d
new file mode 100644
index 0000000..ace2831
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i143317.d
@@ -0,0 +1,8 @@
+
+tmpdir/i143317.x: file format elf32-.*
+
+Disassembly of section .text:
+
+0+100c <.text>:
+[ ]+100c:[ ]+fa 02 fe 7f[ ]+mov[ ]+\(32766,a2\),d0
+[ ]+1010:[ ]+fa 06 fe 7f[ ]+mov[ ]+\(32766,a2\),d1
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i143317.s b/binutils-2.21/ld/testsuite/ld-mn10300/i143317.s
new file mode 100644
index 0000000..abcc896
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i143317.s
@@ -0,0 +1,36 @@
+.section .rodata.str1.1 ,"aMS",@progbits,0x1
+_start:
+.string "abcdefgh"
+L001:
+.string "hogehoge"
+L002:
+.string "fooooooo"
+L003:
+
+.text
+.align 0x02
+mov (L001@GOTOFF,A2),D0
+mov (L004@GOTOFF,A2),D1
+
+
+.section .rodata.str1.1 ,"aMS",@progbits,0x1
+L006:
+.string ""
+.string ""
+.string ""
+.string "%"
+.string ""
+.string ""
+.string "s"
+.string ""
+L005:
+.string ""
+.string ""
+.string ""
+.string "%"
+.string ""
+.string ""
+.string "r"
+.string ""
+L004:
+.string "hogehoge"
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i143317.t b/binutils-2.21/ld/testsuite/ld-mn10300/i143317.t
new file mode 100644
index 0000000..47d9262
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i143317.t
@@ -0,0 +1,31 @@
+SECTIONS
+{
+.bss :
+{
+*(.bss)
+end = .;
+}
+. = 0x1000;
+.got : { *(.got.plt) *(.got) }
+.text :
+{
+*(.text)
+}
+. = 0x8ff5;
+.rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+.data :
+{
+*(.data)
+}
+edata = .;
+.stac :
+{
+*(.stack)
+}
+.plt : { *(.plt) }
+.rela.plt : { *(.rela.plt) }
+.rela.dyn :
+{
+*(.rela.text)
+}
+}
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i36434-2.s b/binutils-2.21/ld/testsuite/ld-mn10300/i36434-2.s
new file mode 100644
index 0000000..cf31ce1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i36434-2.s
@@ -0,0 +1,16 @@
+ .section .text
+ .global _bar
+ .type _bar,@function
+_bar:
+ mov .LC1,d0
+ mov .LC2,d1
+ nop
+
+ .section .rodata.str1.1,"aMS",@progbits,1
+.LC1:
+ .rept 32768
+ .byte 'a'
+ .endr
+ .byte 0
+.LC2:
+ .string "abc\n"
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i36434.d b/binutils-2.21/ld/testsuite/ld-mn10300/i36434.d
new file mode 100644
index 0000000..af37b3b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i36434.d
@@ -0,0 +1,16 @@
+
+tmpdir/i36434.x: file format elf32-.*
+
+Disassembly of section .text:
+
+08000074 <_start>:
+ 8000074: fc cd 8c 80 mov 134250636,d1
+ 8000078: 00 08
+ 800007a: cb nop
+
+0800007b <_bar>:
+ 800007b: fc cc 88 00 mov 134217864,d0
+ 800007f: 00 08
+ 8000081: fc cd 89 80 mov 134250633,d1
+ 8000085: 00 08
+ 8000087: cb nop
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/i36434.s b/binutils-2.21/ld/testsuite/ld-mn10300/i36434.s
new file mode 100644
index 0000000..84c1d83
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/i36434.s
@@ -0,0 +1,10 @@
+ .section .text
+ .global _start
+ .type _start,@function
+_start:
+ mov .LC2,d1
+ nop
+
+ .section .rodata.str1.1,"aMS",@progbits,1
+.LC2:
+ .string "\n"
diff --git a/binutils-2.21/ld/testsuite/ld-mn10300/mn10300.exp b/binutils-2.21/ld/testsuite/ld-mn10300/mn10300.exp
new file mode 100644
index 0000000..617ad8a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-mn10300/mn10300.exp
@@ -0,0 +1,163 @@
+# Expect script for ld-mn10300 tests
+# Copyright (C) 2007 Free Software Foundation
+#
+# This file 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 3 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.
+#
+
+if {!([istarget "am3*-*-*"]) && !([istarget "mn10300*-*-*"]) } {
+ return
+}
+
+# Set up a list as described in ld-lib.exp
+
+set mn10300_tests {
+ {
+ "am33 string merging"
+ "-relax -Ttext 0x8000074"
+ ""
+ { "i36434.s" "i36434-2.s" }
+ { {objdump -dz i36434.d} }
+ "i36434.x"
+ }
+ {
+ "difference of two same-section symbols"
+ "-Ttext 0"
+ ""
+ { "i112045-1.s" }
+ { {objdump -d i112045-1.d} }
+ "i112045-1.x"
+ }
+ {
+ "difference of two same-section symbols where the difference is held in another section"
+ "-relax -Ttext 100"
+ ""
+ { "i112045-3.s" }
+ { {objdump -D i112045-3.d} }
+ "i112045-3.x"
+ }
+ {
+ "relaxation and alignment directives"
+ "-relax -Ttext 100 -Tbss 300"
+ ""
+ { "i127740.s" }
+ { {objdump -d i127740.d} }
+ "i127740.x"
+ }
+ {
+ "adjustment of symbols due to relaxation"
+ "-Tdata 1f -Ttext 0 -relax"
+ ""
+ { "i135409-1.s" }
+ { {readelf --syms i135409-1.d} }
+ "i135409-1.x"
+ }
+ {
+ "adjustment of symbols due to relaxation (with alignment directives)"
+ "-Tdata 1f -Ttext 0 -relax"
+ ""
+ { "i135409-2.s" }
+ { {readelf --syms i135409-2.d} }
+ "i135409-2.x"
+ }
+ {
+ "adjustment of symbols due to relaxation (with a symbol in the deleted region)"
+ "-Tdata 1f -Ttext 0 -relax"
+ ""
+ { "i135409-3.s" }
+ { {objdump -d i135409-3.d} }
+ "i135409-3.x"
+ }
+ {
+ "adjusting a 16-bit forward branch"
+ "-Ti135409-4.t -relax"
+ ""
+ { "i135409-4.s" }
+ { {objdump -d i135409-4.d} }
+ "i135409-4.x"
+ }
+ {
+ "adjusting a 16-bit backward branch"
+ "-Ti135409-5.t -relax"
+ ""
+ { "i135409-5.s" }
+ { {objdump -d i135409-5.d} }
+ "i135409-5.x"
+ }
+ {
+ "relaxing offsets into a merged string section"
+ "-Ti143317.t -shared -relax"
+ ""
+ { "i143317.s" }
+ { {objdump -d i143317.d} }
+ "i143317.x"
+ }
+}
+
+run_ld_link_tests $mn10300_tests
+
+if {!([istarget "am3*-*-*"])} {
+ return
+}
+
+set am33_tests {
+ {
+ "difference of two same-section symbols (in a shared library)"
+ "-shared"
+ ""
+ { "i112045-2.s" }
+ { {objdump -R i112045-2.d} }
+ "i112045-2.x"
+ }
+}
+
+run_ld_link_tests $am33_tests
+
+proc i126256-test { } {
+ global CC
+ global ld
+ global srcdir
+ global subdir
+
+ set tmpdir tmpdir
+ set testname "Seg fault whilst linking one shared library into another when relaxation is enabled."
+
+ if {![is_remote host] && [which $CC] == 0} then {
+ return
+ }
+
+ if { ![ld_compile "$CC -mrelax -fPIC" $srcdir/$subdir/i126256-1.c $tmpdir/i126256-1.o] } {
+ unresolved $testname
+ return
+ }
+
+ if { ![ld_compile "$CC -mrelax -fPIC" $srcdir/$subdir/i126256-2.c $tmpdir/i126256-2.o] } {
+ unresolved $testname
+ return
+ }
+
+ if { ![ld_simple_link $ld $tmpdir/i126256-1.so "-shared $tmpdir/i126256-1.o -e 0"]} {
+ unresolved $testname
+ return
+ }
+
+ if { ![ld_simple_link $ld $tmpdir/i126256-2.so "--relax -shared $tmpdir/i126256-2.o $tmpdir/i126256-1.so -e 0"]} {
+ fail $testname
+ return
+ }
+
+ pass $testname
+}
+
+i126256-test
diff --git a/binutils-2.21/ld/testsuite/ld-pe/aligncomm-1.c b/binutils-2.21/ld/testsuite/ld-pe/aligncomm-1.c
new file mode 100755
index 0000000..fc6cb03
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/aligncomm-1.c
@@ -0,0 +1,26 @@
+
+typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__));
+typedef __SIZE_TYPE__ size_t;
+
+long s1 = 0;
+__m128 r;
+__m128 * volatile raddr = &r;
+
+int main (int argc, const char **argv)
+{
+ return 15 & (int)(size_t)raddr;
+}
+
+void __main (void)
+{
+ asm (".section .drectve\n"
+ " .ascii \" -aligncomm:_r,4\"\n"
+ " .ascii \" -aligncomm:r,4\"\n"
+ " .text");
+}
+
+#if defined (__CYGWIN__) || defined (__MINGW32__)
+void _alloca (void)
+{
+}
+#endif
diff --git a/binutils-2.21/ld/testsuite/ld-pe/aligncomm-2.c b/binutils-2.21/ld/testsuite/ld-pe/aligncomm-2.c
new file mode 100755
index 0000000..5e042b8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/aligncomm-2.c
@@ -0,0 +1,27 @@
+
+typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__));
+typedef __SIZE_TYPE__ size_t;
+
+long s1 = 0;
+long s2 = 0;
+__m128 r;
+__m128 * volatile raddr = &r;
+
+int main (int argc, const char **argv)
+{
+ return 15 & (int)(size_t)raddr;
+}
+
+void __main (void)
+{
+ asm (".section .drectve\n"
+ " .ascii \" -aligncomm:_r,4\"\n"
+ " .ascii \" -aligncomm:r,4\"\n"
+ " .text");
+}
+
+#if defined (__CYGWIN__) || defined (__MINGW32__)
+void _alloca (void)
+{
+}
+#endif
diff --git a/binutils-2.21/ld/testsuite/ld-pe/aligncomm-3.c b/binutils-2.21/ld/testsuite/ld-pe/aligncomm-3.c
new file mode 100755
index 0000000..69184f9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/aligncomm-3.c
@@ -0,0 +1,28 @@
+
+typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__));
+typedef __SIZE_TYPE__ size_t;
+
+long s1 = 0;
+long s2 = 0;
+long s3 = 0;
+__m128 r;
+__m128 * volatile raddr = &r;
+
+int main (int argc, const char **argv)
+{
+ return 15 & (int)(size_t)raddr;
+}
+
+void __main (void)
+{
+ asm (".section .drectve\n"
+ " .ascii \" -aligncomm:_r,4\"\n"
+ " .ascii \" -aligncomm:r,4\"\n"
+ " .text");
+}
+
+#if defined (__CYGWIN__) || defined (__MINGW32__)
+void _alloca (void)
+{
+}
+#endif
diff --git a/binutils-2.21/ld/testsuite/ld-pe/aligncomm-4.c b/binutils-2.21/ld/testsuite/ld-pe/aligncomm-4.c
new file mode 100755
index 0000000..085335a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/aligncomm-4.c
@@ -0,0 +1,29 @@
+
+typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__));
+typedef __SIZE_TYPE__ size_t;
+
+long s1 = 0;
+long s2 = 0;
+long s3 = 0;
+long s4 = 0;
+__m128 r;
+__m128 * volatile raddr = &r;
+
+int main (int argc, const char **argv)
+{
+ return 15 & (int)(size_t)raddr;
+}
+
+void __main (void)
+{
+ asm (".section .drectve\n"
+ " .ascii \" -aligncomm:_r,4\"\n"
+ " .ascii \" -aligncomm:r,4\"\n"
+ " .text");
+}
+
+#if defined (__CYGWIN__) || defined (__MINGW32__)
+void _alloca (void)
+{
+}
+#endif
diff --git a/binutils-2.21/ld/testsuite/ld-pe/aligncomm.d b/binutils-2.21/ld/testsuite/ld-pe/aligncomm.d
new file mode 100755
index 0000000..6f33644
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/aligncomm.d
@@ -0,0 +1,3 @@
+#...
+[0-9a-fA-F]{7,15}0 . r
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-pe/basefile1.s b/binutils-2.21/ld/testsuite/ld-pe/basefile1.s
new file mode 100644
index 0000000..f24c4fc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/basefile1.s
@@ -0,0 +1,18 @@
+.globl _start
+.globl start
+.text
+_start:
+start:
+ .long 0
+
+.globl _d1
+.globl _d2
+.globl _d3
+.data
+_d1:
+ .long 1
+_d2:
+ .secrel32 _d3
+_d3:
+ .long 2
+
diff --git a/binutils-2.21/ld/testsuite/ld-pe/direct2_client.c b/binutils-2.21/ld/testsuite/ld-pe/direct2_client.c
new file mode 100644
index 0000000..84cdcb6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/direct2_client.c
@@ -0,0 +1,47 @@
+extern void abort (void);
+
+void
+__cdecl
+lib2foocdecl(int junk1, int* junk2);
+
+void
+__stdcall
+lib2foostdcall(int junk1, int* junk2);
+
+void
+__fastcall
+lib2foofastcall(int junk1, int* junk2);
+
+void
+__cdecl
+lib1foocdecl(int junk1, int* junk2)
+{
+ lib2foocdecl(junk1, junk2);
+}
+
+void
+__stdcall
+lib1foostdcall(int junk1, int* junk2)
+{
+ lib2foostdcall(junk1, junk2);
+}
+
+void
+__fastcall
+lib1foofastcall(int junk1, int* junk2)
+{
+ lib2foofastcall(junk1, junk2);
+}
+
+int main()
+{
+ int junk[3];
+ lib1foofastcall (1, &junk[0]);
+ lib1foostdcall (2, &junk[1]);
+ lib1foocdecl (3, &junk[2]);
+ if (junk[1] != 2 || junk[0] != 1 || junk[2] != 3)
+ abort ();
+
+ return 0;
+}
+
diff --git a/binutils-2.21/ld/testsuite/ld-pe/direct2_dll.c b/binutils-2.21/ld/testsuite/ld-pe/direct2_dll.c
new file mode 100644
index 0000000..115f9b9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/direct2_dll.c
@@ -0,0 +1,20 @@
+void
+__cdecl
+lib2foocdecl(int junk1, int* junk2)
+{
+ *junk2 = junk1;
+}
+
+void
+__stdcall
+lib2foostdcall(int junk1, int* junk2)
+{
+ *junk2 = junk1;
+}
+
+void
+__fastcall
+lib2foofastcall(int junk1, int* junk2)
+{
+ *junk2 = junk1;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-pe/direct2_dll.def b/binutils-2.21/ld/testsuite/ld-pe/direct2_dll.def
new file mode 100644
index 0000000..2e8986d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/direct2_dll.def
@@ -0,0 +1,6 @@
+LIBRARY "direct2_dll.dll"
+
+EXPORTS
+lib2foocdecl
+lib2foostdcall
+lib2foofastcall
diff --git a/binutils-2.21/ld/testsuite/ld-pe/direct_client.c b/binutils-2.21/ld/testsuite/ld-pe/direct_client.c
new file mode 100644
index 0000000..6264a78
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/direct_client.c
@@ -0,0 +1,8 @@
+__declspec(dllimport) int dll_func (void);
+
+int
+main()
+{
+ dll_func ();
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-pe/direct_dll.c b/binutils-2.21/ld/testsuite/ld-pe/direct_dll.c
new file mode 100644
index 0000000..9863d1a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/direct_dll.c
@@ -0,0 +1,5 @@
+__declspec(dllexport) int
+dll_func (void)
+{
+ return 10;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-pe/export_dynamic_warning.d b/binutils-2.21/ld/testsuite/ld-pe/export_dynamic_warning.d
new file mode 100644
index 0000000..38759b7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/export_dynamic_warning.d
@@ -0,0 +1,5 @@
+#name: PE-COFF --export-dynamic warning
+#target: *-*-mingw32 *-*-cygwin *-*-pe
+#ld: --export-dynamic
+#warning: warning: --export-dynamic is not supported for PE\+? targets, did you mean --export-all-symbols\?
+
diff --git a/binutils-2.21/ld/testsuite/ld-pe/export_dynamic_warning.s b/binutils-2.21/ld/testsuite/ld-pe/export_dynamic_warning.s
new file mode 100755
index 0000000..8089e06
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/export_dynamic_warning.s
@@ -0,0 +1,4 @@
+
+_start:
+ nop
+
diff --git a/binutils-2.21/ld/testsuite/ld-pe/exports.d b/binutils-2.21/ld/testsuite/ld-pe/exports.d
new file mode 100644
index 0000000..bbeda11
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/exports.d
@@ -0,0 +1,4 @@
+#...
+The Data Directory
+Entry 0 00000000 00000000 Export Directory \[\.edata \(or where ever we found it\)\]
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-pe/exports.s b/binutils-2.21/ld/testsuite/ld-pe/exports.s
new file mode 100644
index 0000000..aac7075
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/exports.s
@@ -0,0 +1,2 @@
+# Deliberately left empty.
+
diff --git a/binutils-2.21/ld/testsuite/ld-pe/exports64.d b/binutils-2.21/ld/testsuite/ld-pe/exports64.d
new file mode 100755
index 0000000..5fc5aeb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/exports64.d
@@ -0,0 +1,4 @@
+#...
+The Data Directory
+Entry 0 0000000000000000 00000000 Export Directory \[\.edata \(or where ever we found it\)\]
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-pe/image_size.d b/binutils-2.21/ld/testsuite/ld-pe/image_size.d
new file mode 100644
index 0000000..bd709e6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/image_size.d
@@ -0,0 +1,9 @@
+#name: PE-COFF SizeOfImage
+#ld: -T image_size.t
+#objdump: -p
+#target: *-*-mingw32 *-*-cygwin
+
+.*: file format .*
+#...
+SizeOfImage 00004000
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-pe/image_size.s b/binutils-2.21/ld/testsuite/ld-pe/image_size.s
new file mode 100644
index 0000000..3b56d7f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/image_size.s
@@ -0,0 +1,8 @@
+ .text
+ .global _start
+_start:
+ .byte 1
+ .global data
+ .data
+data:
+ .byte 2
diff --git a/binutils-2.21/ld/testsuite/ld-pe/image_size.t b/binutils-2.21/ld/testsuite/ld-pe/image_size.t
new file mode 100644
index 0000000..f646eca
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/image_size.t
@@ -0,0 +1,15 @@
+SECTIONS
+{
+ . = SIZEOF_HEADERS;
+ . = ALIGN(__section_alignment__);
+ .text __image_base__ + ( __section_alignment__ < 0x1000 ? . : __section_alignment__ ) :
+ {
+ *(.text)
+ }
+ . = . + 0x1000;
+ .data BLOCK(__section_alignment__) :
+ {
+ *(.data)
+ }
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-pe/longsecn-1.d b/binutils-2.21/ld/testsuite/ld-pe/longsecn-1.d
new file mode 100755
index 0000000..95b3337
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/longsecn-1.d
@@ -0,0 +1,22 @@
+#name: PE-COFF Long section names (disabled)
+#ld: --disable-long-section-names
+#objdump: -h
+#source: longsecn.s
+
+.*: file format .*
+
+Sections:
+Idx Name Size VMA +LMA +File off Algn
+ 0 \.text [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, READONLY, CODE, DATA
+ 1 \.data [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 2 \.rodata [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 3 \.data\.ve [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 4 \.rodata\. [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 5 \.idata [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+
diff --git a/binutils-2.21/ld/testsuite/ld-pe/longsecn-2.d b/binutils-2.21/ld/testsuite/ld-pe/longsecn-2.d
new file mode 100755
index 0000000..8170006
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/longsecn-2.d
@@ -0,0 +1,21 @@
+#name: PE-COFF Long section names (enabled)
+#ld: --enable-long-section-names
+#objdump: -h
+#source: longsecn.s
+
+.*: file format .*
+
+Sections:
+Idx Name Size VMA +LMA +File off Algn
+ 0 \.text [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, READONLY, CODE, DATA
+ 1 \.data [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 2 \.rodata [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 3 \.data\.very\.long\.section [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 4 \.rodata\.very.long\.section [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 5 \.idata [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
diff --git a/binutils-2.21/ld/testsuite/ld-pe/longsecn-3.d b/binutils-2.21/ld/testsuite/ld-pe/longsecn-3.d
new file mode 100755
index 0000000..0317be3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/longsecn-3.d
@@ -0,0 +1,41 @@
+#name: PE-COFF Long section names in objects (default)
+#ld: -r
+#objdump: -h
+#source: longsecn.s
+
+.*: file format .*
+
+Sections:
+Idx Name Size VMA +LMA +File off Algn
+ 0 \.(text|bss ) [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ (CONTENTS, ALLOC, LOAD, (READONLY, )?CODE|ALLOC)
+ 1 \.text\.very\.long\.section\.name [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, READONLY, CODE, DATA
+ 2 \.data [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 3 \.data\$1 [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 4 \.rodata\$1 [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 5 \.data\$123 [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 6 \.rodata\$123 [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 7 \.data\$123456789 [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 8 \.rodata\$123456789 [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 9 \.data\.very\.long\.section [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 10 \.rodata\.very\.long\.section [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 11 \.data\.very\.long\.section\$1 [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 12 \.rodata\.very\.long\.section\$1 [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 13 \.data\.very\.long\.section\$1234 [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 14 \.rodata\.very\.long\.section\$1234 [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 15 \.(bss |text) [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ (ALLOC|CONTENTS, ALLOC, LOAD, (READONLY, )?CODE)
diff --git a/binutils-2.21/ld/testsuite/ld-pe/longsecn-4.d b/binutils-2.21/ld/testsuite/ld-pe/longsecn-4.d
new file mode 100755
index 0000000..565ef38
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/longsecn-4.d
@@ -0,0 +1,41 @@
+#name: PE-COFF Long section names in objects (disabled)
+#ld: --disable-long-section-names -r
+#objdump: -h
+#source: longsecn.s
+
+.*: file format .*
+
+Sections:
+Idx Name Size VMA +LMA +File off Algn
+ 0 \.(text|bss ) [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ (CONTENTS, ALLOC, LOAD, (READONLY, )?CODE|ALLOC)
+ 1 \.text\.ve [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, READONLY, CODE, DATA
+ 2 \.data [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 3 \.data\$1 [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 4 \.rodata\$ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 5 \.data\$12 [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 6 \.rodata\$ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 7 \.data\$12 [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 8 \.rodata\$ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 9 \.data\.ve [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 10 \.rodata\. [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 11 \.data\.ve [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 12 \.rodata\. [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 13 \.data\.ve [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 14 \.rodata\. [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 15 \.(bss |text) [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ (ALLOC|CONTENTS, ALLOC, LOAD, (READONLY, )?CODE)
diff --git a/binutils-2.21/ld/testsuite/ld-pe/longsecn-5.d b/binutils-2.21/ld/testsuite/ld-pe/longsecn-5.d
new file mode 100755
index 0000000..82d94b8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/longsecn-5.d
@@ -0,0 +1,41 @@
+#name: PE-COFF Long section names in objects (enabled)
+#ld: --enable-long-section-names -r
+#objdump: -h
+#source: longsecn.s
+
+.*: file format .*
+
+Sections:
+Idx Name Size VMA +LMA +File off Algn
+ 0 \.(text|bss ) [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ (CONTENTS, ALLOC, LOAD, (READONLY, )?CODE|ALLOC)
+ 1 \.text\.very\.long\.section\.name [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, READONLY, CODE, DATA
+ 2 \.data [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 3 \.data\$1 [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 4 \.rodata\$1 [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 5 \.data\$123 [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 6 \.rodata\$123 [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 7 \.data\$123456789 [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 8 \.rodata\$123456789 [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 9 \.data\.very\.long\.section [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 10 \.rodata\.very\.long\.section [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 11 \.data\.very\.long\.section\$1 [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 12 \.rodata\.very\.long\.section\$1 [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 13 \.data\.very\.long\.section\$1234 [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 14 \.rodata\.very\.long\.section\$1234 [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 15 \.(bss |text) [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ (ALLOC|CONTENTS, ALLOC, LOAD, (READONLY, )?CODE)
diff --git a/binutils-2.21/ld/testsuite/ld-pe/longsecn.d b/binutils-2.21/ld/testsuite/ld-pe/longsecn.d
new file mode 100755
index 0000000..2dcde35
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/longsecn.d
@@ -0,0 +1,22 @@
+#name: PE-COFF Long section names (default)
+#ld:
+#objdump: -h
+#source: longsecn.s
+
+.*: file format .*
+
+Sections:
+Idx Name Size VMA +LMA +File off Algn
+ 0 \.text [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, READONLY, CODE, DATA
+ 1 \.data [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 2 \.rodata [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 3 \.data\.ve [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 4 \.rodata\. [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+ 5 \.idata [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ 2\*\*[0-9]
+ CONTENTS, ALLOC, LOAD, DATA
+
diff --git a/binutils-2.21/ld/testsuite/ld-pe/longsecn.s b/binutils-2.21/ld/testsuite/ld-pe/longsecn.s
new file mode 100755
index 0000000..1fc4da3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/longsecn.s
@@ -0,0 +1,44 @@
+ .text
+ .global _start
+ .global _mainCRTStartup
+_start:
+_mainCRTStartup:
+ .byte 1
+ .global data
+ .data
+data:
+ .byte 2
+
+ .section .text.very.long.section.name,"rx"
+vls:
+ .byte 3
+
+ .section .data$1,"wd"
+ .byte 4
+ .section .rodata$1,"rd"
+ .byte 5
+
+ .section .data$123,"wd"
+ .byte 4
+ .section .rodata$123,"rd"
+ .byte 5
+ .section .data$123456789,"wd"
+ .byte 4
+ .section .rodata$123456789,"rd"
+ .byte 5
+
+ .section .data.very.long.section,"wd"
+ .byte 6
+ .section .rodata.very.long.section,"rd"
+ .byte 7
+
+ .section .data.very.long.section$1,"wd"
+ .byte 6
+ .section .rodata.very.long.section$1,"rd"
+ .byte 7
+ .section .data.very.long.section$1234,"wd"
+ .byte 6
+ .section .rodata.very.long.section$1234,"rd"
+ .byte 7
+
+ .end
diff --git a/binutils-2.21/ld/testsuite/ld-pe/non-c-lang-syms.d b/binutils-2.21/ld/testsuite/ld-pe/non-c-lang-syms.d
new file mode 100755
index 0000000..3c7fa93
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/non-c-lang-syms.d
@@ -0,0 +1,10 @@
+#...
+[0-9A-Fa-f]{6,14}[08]0 B _?test\$equiv\.eq\.
+[0-9A-Fa-f]{6,14}[02468aAcCeE]0 B _?test\$equiv\.eq\.100
+[0-9A-Fa-f]{6,14}[0-9A-Fa-f]0 B _?test\$equiv\.eq\.1_
+[0-9A-Fa-f]{6,14}[048cC]0 B _?test\$equiv\.eq\._
+[0-9A-Fa-f]{6,14}[08]0 B _?test_equiv\.eq\.
+[0-9A-Fa-f]{6,14}[02468aAcCeE]0 B _?test_equiv\.eq\.100
+[0-9A-Fa-f]{6,14}[0-9A-Fa-f]0 B _?test_equiv\.eq\.1_
+[0-9A-Fa-f]{6,14}[048cC]0 B _?test_equiv\.eq\._
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-pe/non-c-lang-syms.s b/binutils-2.21/ld/testsuite/ld-pe/non-c-lang-syms.s
new file mode 100755
index 0000000..e849d9e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/non-c-lang-syms.s
@@ -0,0 +1,15 @@
+
+main:
+_main:
+ nop
+
+ .comm _test_equiv.eq.1_, 16, 4
+ .comm _test_equiv.eq.100, 16, 5
+ .comm _test_equiv.eq._, 16, 6
+ .comm _test_equiv.eq., 16, 7
+
+ .comm _test$equiv.eq.1_, 16, 4
+ .comm _test$equiv.eq.100, 16, 5
+ .comm _test$equiv.eq._, 16, 6
+ .comm _test$equiv.eq., 16, 7
+
diff --git a/binutils-2.21/ld/testsuite/ld-pe/orphan.d b/binutils-2.21/ld/testsuite/ld-pe/orphan.d
new file mode 100644
index 0000000..4047a6a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/orphan.d
@@ -0,0 +1,13 @@
+#source: orphana.s
+#source: orphanb.s
+#source: orphand.s
+#source: orphane.s
+#ld: --file-align 1 --section-align 1
+#objdump: -h --wide
+
+#...
+ +0 +\.text .*
+ +1 +\.foo +0+20 .*
+ +2 +\.foo +0+20 .*
+ +3 +\.idata .*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-pe/orphan_nu.d b/binutils-2.21/ld/testsuite/ld-pe/orphan_nu.d
new file mode 100644
index 0000000..5e88da7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/orphan_nu.d
@@ -0,0 +1,13 @@
+#source: orphana_nu.s
+#source: orphanb.s
+#source: orphand.s
+#source: orphane.s
+#ld: --file-align 1 --section-align 1 --no-leading-underscore
+#objdump: -h --wide
+
+#...
+ +0 +\.text .*
+ +1 +\.foo +0+20 .*
+ +2 +\.foo +0+20 .*
+ +3 +\.idata .*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-pe/orphana.s b/binutils-2.21/ld/testsuite/ld-pe/orphana.s
new file mode 100644
index 0000000..6510491
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/orphana.s
@@ -0,0 +1,8 @@
+ .globl _mainCRTStartup
+ .globl _start
+ .text
+_mainCRTStartup:
+_start:
+
+ .section .foo,"b"
+ .space 16
diff --git a/binutils-2.21/ld/testsuite/ld-pe/orphana_nu.s b/binutils-2.21/ld/testsuite/ld-pe/orphana_nu.s
new file mode 100644
index 0000000..d3c564f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/orphana_nu.s
@@ -0,0 +1,8 @@
+ .globl mainCRTStartup
+ .globl start
+ .text
+mainCRTStartup:
+start:
+
+ .section .foo,"b"
+ .space 16
diff --git a/binutils-2.21/ld/testsuite/ld-pe/orphanb.s b/binutils-2.21/ld/testsuite/ld-pe/orphanb.s
new file mode 100644
index 0000000..6f26b94
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/orphanb.s
@@ -0,0 +1,2 @@
+ .section .foo
+ .long 1,1,1,1
diff --git a/binutils-2.21/ld/testsuite/ld-pe/orphand.s b/binutils-2.21/ld/testsuite/ld-pe/orphand.s
new file mode 100644
index 0000000..9b23cb5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/orphand.s
@@ -0,0 +1,2 @@
+ .section .foo,"b"
+ .space 16
diff --git a/binutils-2.21/ld/testsuite/ld-pe/orphane.s b/binutils-2.21/ld/testsuite/ld-pe/orphane.s
new file mode 100644
index 0000000..aff3e84
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/orphane.s
@@ -0,0 +1,2 @@
+ .section .foo
+ .long 4,4,4,4
diff --git a/binutils-2.21/ld/testsuite/ld-pe/pe-compile.exp b/binutils-2.21/ld/testsuite/ld-pe/pe-compile.exp
new file mode 100755
index 0000000..d912719
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/pe-compile.exp
@@ -0,0 +1,143 @@
+# Expect script for complex PE tests that require a C compiler
+# in addition to the just-built binutils.
+# Copyright 2009
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# These tests can only be run on PE/COFF platforms.
+if {![is_pecoff_format]} {
+ return
+}
+
+# No compiler, no test.
+if { [which $CC] == 0 } {
+ untested "PE version scripts"
+ untested "aligned common tests"
+ # Add more "untested" directives here when adding more tests below.
+ return
+}
+
+proc build_basefile1_o {} {
+ global CC
+ global CFLAGS
+ global srcdir
+ global subdir
+
+ # Compile the object file.
+ if ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/basefile1.s tmpdir/basefile1.o] {
+ fail "compiling basefile1 object"
+ }
+}
+
+proc run_basefile_test { testname } {
+ global LD
+ global DLLTOOL
+ global srcdir
+ global subdir
+ global verbose
+
+ if ![ld_simple_link "$LD -e start \
+ --base-file=tmpdir/$testname.base \
+ --export-all-symbols" tmpdir/$testname.dll \
+ "tmpdir/basefile1.o"] {
+ fail "linking DLL"
+ return
+ }
+
+ if { $verbose > 2 } then { verbose "output is [file_contents tmpdir/$testname.base]" 3 }
+
+ catch "exec wc -c tmpdir/$testname.base" err
+
+ if ![string match "0 tmpdir/$testname.base" [string trim $err]] then {
+ send_log "$err\n"
+ if { $verbose == 2 } then { verbose "$err" 2 }
+ fail $testname
+ return
+ }
+
+ pass "$testname"
+}
+
+proc build_vers_script_dll_o {} {
+ global CC
+ global CFLAGS
+ global srcdir
+ global subdir
+
+ # Compile the object file.
+ if ![ld_compile "$CC $CFLAGS -shared" $srcdir/$subdir/vers-script-dll.c tmpdir/vers-script-dll.o] {
+ fail "compiling shared lib object"
+ }
+}
+
+proc run_ver_script_test { testname } {
+ global CC
+ global srcdir
+ global subdir
+ global verbose
+
+ if ![ld_simple_link "$CC -shared \
+ -Wl,--version-script,$srcdir/$subdir/$testname.ver \
+ -Wl,--output-def,tmpdir/$testname.def" tmpdir/$testname.dll \
+ "tmpdir/vers-script-dll.o"] {
+ fail "linking DLL"
+ }
+
+ if { $verbose > 2 } then { verbose "output is [file_contents tmpdir/$testname.def]" 3 }
+ if { [regexp_diff tmpdir/$testname.def $srcdir/$subdir/$testname.d] } then {
+ fail $testname
+ if { $verbose == 2 } then { verbose "output is [file_contents tmpdir/$testname.def]" 2 }
+ return
+ }
+
+ pass "$testname"
+}
+
+
+build_vers_script_dll_o
+
+run_ver_script_test "vers-script-1"
+run_ver_script_test "vers-script-2"
+run_ver_script_test "vers-script-3"
+run_ver_script_test "vers-script-4"
+
+if {[istarget i*86-*-cygwin*]
+ || [istarget i*86-*-pe]
+ || [istarget i*86-*-mingw*]
+ || [istarget x86_64-*-mingw*] } {
+
+ build_basefile1_o
+ run_basefile_test "basefile-secrel"
+ } else {
+ untested "PE basefile test"
+ }
+
+set align_tests {
+ {"aligned common 1" "" "" {aligncomm-1.c}
+ {{nm -C aligncomm.d}} "aligncomm-1.x"}
+ {"aligned common 2" "" "" {aligncomm-2.c}
+ {{nm -C aligncomm.d}} "aligncomm-2.x"}
+ {"aligned common 3" "" "" {aligncomm-3.c}
+ {{nm -C aligncomm.d}} "aligncomm-3.x"}
+ {"aligned common 4" "" "" {aligncomm-4.c}
+ {{nm -C aligncomm.d}} "aligncomm-4.x"}
+}
+
+run_ld_link_tests $align_tests
diff --git a/binutils-2.21/ld/testsuite/ld-pe/pe-run.exp b/binutils-2.21/ld/testsuite/ld-pe/pe-run.exp
new file mode 100755
index 0000000..709fb19
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/pe-run.exp
@@ -0,0 +1,149 @@
+# Expect script for complex PE tests that require a C compiler and the ability
+# to run target executables natively, in addition to the just-built binutils.
+# Copyright 2006, 2007, 2009
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by Pedro Alves <pedro_alves@portugalmail.pt>
+#
+
+# Note:
+#
+# This test checks the "direct linking to a dll" functionality.
+#
+# The test has 7 stages:
+#
+# 1. compile and link a test dll with ".dll" extension.
+#
+# 2. compile and link a test dll with ".sl" (i.e. != ".dll") extension.
+#
+# 3. compile and link a client application linking directly to the ".dll" dll built in 1.
+# This should produce no errors.
+#
+# 4. compile and link a client application linking directly to the ".sl" dll built in 2.
+# This should produce no errors.
+#
+# 5. compile and link a client application linking directly to a symlink into
+# the ".dll" dll built in 1.
+# This should produce no errors.
+#
+# 6. compile and link a client application linking directly to a symlink into
+# the ".sl" dll built in 1.
+# This should produce no errors.
+#
+# 7. run the produced executables
+
+# This test can only be run on PE/COFF platforms.
+if {![is_pecoff_format]} {
+ return
+}
+
+# No compiler, no test.
+if { [which $CC] == 0 } {
+ untested "Direct linking to dll test"
+ return
+}
+
+set tmpdir tmpdir
+
+proc test_direct_link_dll {} {
+ global CC
+ global CFLAGS
+ global srcdir
+ global subdir
+ global tmpdir
+
+ # Compile the dll.
+ if ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/direct_dll.c $tmpdir/direct_dll.o ] {
+ fail "compiling shared lib"
+ } elseif ![ld_simple_link "$CC -shared" $tmpdir/direct_dll.dll "$tmpdir/direct_dll.o" ] {
+ fail "linking shared lib (.dll)"
+ } elseif ![ld_simple_link "$CC -shared" $tmpdir/direct_dll.sl "$tmpdir/direct_dll.o" ] {
+ fail "linking shared lib (.sl)"
+ } else {
+ # Compile and link the client program.
+ if ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/direct_client.c $tmpdir/direct_client.o ] {
+ fail "compiling client"
+ } else {
+ # Check linking directly to direct_dll.dll.
+ set msg "linking client (.dll)"
+ if [ld_simple_link "$CC -Wl,--enable-auto-import" $tmpdir/direct_client_dll.exe \
+ "$tmpdir/direct_client.o $tmpdir/direct_dll.dll" ] {
+ pass $msg
+ } else {
+ fail $msg
+ }
+
+ # Check linking directly to direct_dll.sl.
+ set msg "linking client (.sl)"
+ if [ld_simple_link "$CC -Wl,--enable-auto-import" $tmpdir/direct_client_sl.exe \
+ "$tmpdir/direct_client.o $tmpdir/direct_dll.sl" ] {
+ pass $msg
+ } else {
+ fail $msg
+ }
+
+ # Check dll direct linking through symlink to .dll.
+ # Create symbolic link.
+ catch "exec ln -fs direct_dll.dll $tmpdir/libdirect_dll.dll.a" ln_catch
+ set msg "linking client (symlink -> .dll)"
+ if [ld_simple_link "$CC -Wl,--enable-auto-import" $tmpdir/direct_client_symlink_dll.exe \
+ "$tmpdir/direct_client.o $tmpdir/libdirect_dll.dll.a" ] {
+ pass $msg
+ } else {
+ fail $msg
+ }
+
+ # Check dll direct linking through symlink to .sl.
+ # Create symbolic link.
+ catch "exec ln -fs direct_dll.sl $tmpdir/libdirect_sl.dll.a" ln_catch
+ set msg "linking client (symlink -> .sl)"
+ if [ld_simple_link "$CC -Wl,--enable-auto-import" $tmpdir/direct_client_symlink_sl.exe \
+ "$tmpdir/direct_client.o $tmpdir/libdirect_sl.dll.a" ] {
+ pass $msg
+ } else {
+ fail $msg
+ }
+ }
+ }
+}
+
+proc directdll_execute {exe msg} {
+ set expected ""
+ catch "exec $exe" prog_output
+ if [string match $expected $prog_output] then {
+ pass $msg
+ } else {
+ verbose $prog_output
+ fail $msg
+ }
+}
+
+test_direct_link_dll
+
+# This is as far as we can go with a cross-compiler
+if ![isnative] then {
+ verbose "Not running natively, so cannot execute binaries"
+ return
+}
+
+directdll_execute "$tmpdir/direct_client_dll.exe" "running direct linked dll (.dll)"
+directdll_execute "$tmpdir/direct_client_sl.exe" "running direct linked dll (.sl)"
+directdll_execute "$tmpdir/direct_client_symlink_sl.exe" "running direct linked dll (symlink -> .sl)"
+directdll_execute "$tmpdir/direct_client_symlink_dll.exe" "running direct linked dll (symlink -> .dll)"
diff --git a/binutils-2.21/ld/testsuite/ld-pe/pe-run2.exp b/binutils-2.21/ld/testsuite/ld-pe/pe-run2.exp
new file mode 100644
index 0000000..6cc066e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/pe-run2.exp
@@ -0,0 +1,151 @@
+# Expect script for complex PE tests that require a C compiler and the ability
+# to run target executables natively, in addition to the just-built binutils.
+# Copyright 2006, 2007, 2009
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Based on the script pe-run.exp written by Pedro Alves.
+# Written by Kai Tietz <kai.tietz@onevision.com>
+#
+
+# Note:
+#
+# This test checks the "direct linking to a dll" functionality with stdcall
+# and fastcall fixup.
+#
+# The test has 7 stages:
+#
+# 1. compile and link a test dll with ".dll" extension.
+#
+# 2. compile and link a test dll with ".sl" (i.e. != ".dll") extension.
+#
+# 3. compile and link a client application linking directly to the ".dll" dll built in 1.
+# This should produce no errors.
+#
+# 4. compile and link a client application linking directly to the ".sl" dll built in 2.
+# This should produce no errors.
+#
+# 5. compile and link a client application linking directly to a symlink into
+# the ".dll" dll built in 1.
+# This should produce no errors.
+#
+# 6. compile and link a client application linking directly to a symlink into
+# the ".sl" dll built in 1.
+# This should produce no errors.
+#
+# 7. run the produced executables
+
+# This test can only be run on PE/COFF platforms.
+if {![is_pecoff_format]} {
+ return
+}
+
+# No compiler, no test.
+if { [which $CC] == 0 } {
+ untested "Direct linking to dll fastcall/stdcall test"
+ return
+}
+
+set tmpdir tmpdir
+
+proc test_direct2_link_dll {} {
+ global CC
+ global CFLAGS
+ global srcdir
+ global subdir
+ global tmpdir
+
+ # Compile the dll.
+ if ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/direct2_dll.c $tmpdir/direct2_dll.o ] {
+ fail "compiling shared lib fastcall/stdcall"
+ } elseif ![ld_simple_link "$CC -shared -Wl,--enable-stdcall-fixup -Wl,--kill-at " $tmpdir/direct2_dll.dll "$tmpdir/direct2_dll.o" ] {
+ fail "linking shared lib (.dll) fastcall/stdcall"
+ } elseif ![ld_simple_link "$CC -shared -Wl,--enable-stdcall-fixup -Wl,--kill-at " $tmpdir/direct2_dll.sl "$tmpdir/direct2_dll.o" ] {
+ fail "linking shared lib (.sl) fastcall/stdcall"
+ } else {
+ # Compile and link the client program.
+ if ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/direct2_client.c $tmpdir/direct2_client.o ] {
+ fail "compiling client fastcall/stdcall"
+ } else {
+ # Check linking directly to direct2_dll.dll.
+ set msg "linking client (.dll) fastcall/stdcall"
+ if [ld_simple_link "$CC -Wl,--enable-stdcall-fixup -Wl,--enable-auto-import" $tmpdir/direct2_client_dll.exe \
+ "$tmpdir/direct2_client.o $tmpdir/direct2_dll.dll" ] {
+ pass $msg
+ } else {
+ fail $msg
+ }
+
+ # Check linking directly to direct2_dll.sl.
+ set msg "linking client (.sl) fastcall/stdcall"
+ if [ld_simple_link "$CC -Wl,--enable-stdcall-fixup -Wl,--enable-auto-import" $tmpdir/direct2_client_sl.exe \
+ "$tmpdir/direct2_client.o $tmpdir/direct2_dll.sl" ] {
+ pass $msg
+ } else {
+ fail $msg
+ }
+
+ # Check dll direct linking through symlink to .dll.
+ # Create symbolic link.
+ catch "exec ln -fs direct2_dll.dll $tmpdir/libdirect2_dll.dll.a" ln_catch
+ set msg "linking client (symlink -> .dll) fastcall/stdcall"
+ if [ld_simple_link "$CC -Wl,--enable-stdcall-fixup -Wl,--enable-auto-import" $tmpdir/direct2_client_symlink_dll.exe \
+ "$tmpdir/direct2_client.o $tmpdir/libdirect2_dll.dll.a" ] {
+ pass $msg
+ } else {
+ fail $msg
+ }
+
+ # Check dll direct linking through symlink to .sl.
+ # Create symbolic link.
+ catch "exec ln -fs direct2_dll.sl $tmpdir/libdirect2_sl.dll.a" ln_catch
+ set msg "linking client (symlink -> .sl) fastcall/stdcall"
+ if [ld_simple_link "$CC -Wl,--enable-stdcall-fixup -Wl,--enable-auto-import" $tmpdir/direct2_client_symlink_sl.exe \
+ "$tmpdir/direct2_client.o $tmpdir/libdirect2_sl.dll.a" ] {
+ pass $msg
+ } else {
+ fail $msg
+ }
+ }
+ }
+}
+
+proc directdll_execute {exe msg} {
+ set expected ""
+ catch "exec $exe" prog_output
+ if [string match $expected $prog_output] then {
+ pass $msg
+ } else {
+ verbose $prog_output
+ fail $msg
+ }
+}
+
+test_direct2_link_dll
+
+# This is as far as we can go with a cross-compiler
+if ![isnative] then {
+ verbose "Not running natively, so cannot execute binaries"
+ return
+}
+
+directdll_execute "$tmpdir/direct2_client_dll.exe" "running direct linked dll (.dll) fastcall/stdcall"
+directdll_execute "$tmpdir/direct2_client_sl.exe" "running direct linked dll (.sl) fastcall/stdcall"
+directdll_execute "$tmpdir/direct2_client_symlink_sl.exe" "running direct linked dll (symlink -> .sl) fastcall/stdcall"
+directdll_execute "$tmpdir/direct2_client_symlink_dll.exe" "running direct linked dll (symlink -> .dll) fastcall/stdcall"
diff --git a/binutils-2.21/ld/testsuite/ld-pe/pe.exp b/binutils-2.21/ld/testsuite/ld-pe/pe.exp
new file mode 100644
index 0000000..dd4b9f7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/pe.exp
@@ -0,0 +1,79 @@
+# Expect script for simple PE tests that require the just-built binutils only.
+# Copyright 2004, 2005, 2006, 2007, 2009
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# These tests can only be run on PE/COFF platforms.
+if {![is_pecoff_format]} {
+ return
+}
+
+# This test can only be run on PE/COFF platforms that support .secrel32.
+if {[istarget i*86-*-cygwin*]
+ || [istarget i*86-*-pe]
+ || [istarget i*86-*-mingw*]
+ || [istarget x86_64-*-mingw*]
+ || [istarget arm-wince-pe] } {
+
+ if {[istarget x86_64-*-mingw*] } {
+ set pe_tests {
+ {".secrel32" "" "" {secrel1.s secrel2.s}
+ {{objdump -s secrel_64.d}} "secrel.x"}
+ {"Empty export table" "" "" "exports.s"
+ {{objdump -p exports64.d}} "exports.dll"}
+ }
+ } elseif {[istarget i*86-*-cygwin*] } {
+ set pe_tests {
+ {".secrel32" "--disable-auto-import" "" {secrel1.s secrel2.s}
+ {{objdump -s secrel.d}} "secrel.x"}
+ {"Empty export table" "" "" "exports.s"
+ {{objdump -p exports.d}} "exports.dll"}
+ }
+ } else {
+ set pe_tests {
+ {".secrel32" "" "" {secrel1.s secrel2.s}
+ {{objdump -s secrel.d}} "secrel.x"}
+ {"Empty export table" "" "" "exports.s"
+ {{objdump -p exports.d}} "exports.dll"}
+ }
+ }
+
+ run_ld_link_tests $pe_tests
+}
+
+run_dump_test "image_size"
+run_dump_test "export_dynamic_warning"
+
+run_dump_test "longsecn"
+run_dump_test "longsecn-1"
+run_dump_test "longsecn-2"
+run_dump_test "longsecn-3"
+run_dump_test "longsecn-4"
+run_dump_test "longsecn-5"
+
+run_dump_test "orphan"
+run_dump_test "orphan_nu"
+
+set foreign_sym_test {
+ {"non-C aligned common" "" "" {non-c-lang-syms.s}
+ {{nm -C non-c-lang-syms.d}} "non-c-lang-syms.x"}
+}
+
+run_ld_link_tests $foreign_sym_test
diff --git a/binutils-2.21/ld/testsuite/ld-pe/secrel.d b/binutils-2.21/ld/testsuite/ld-pe/secrel.d
new file mode 100644
index 0000000..b924f54
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/secrel.d
@@ -0,0 +1,27 @@
+
+tmpdir/secrel\.x: +file format pei-.*
+
+Contents of section \.text:
+ .*1000 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<<
+ .*1010 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>><
+ .*1020 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<<
+ .*1030 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>><
+ .*1040 ........ ........ ........ ........ ................
+Contents of section \.data:
+ .*2000 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<<
+ .*2010 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>><
+ .*2020 3e3e3e3e 04000000 110d0000 00111600 >>>>............
+ .*2030 0000111f 00000011 3c3c3c3c 3c3c3c3c ........<<<<<<<<
+ .*2040 3e3e3e3e 04000000 110d0000 00111600 >>>>............
+ .*2050 0000111f 00000011 3c3c3c3c 3c3c3c3c ........<<<<<<<<
+ .*2060 3e3e3e3e 04000000 110d0000 00111600 >>>>............
+ .*2070 0000111f 00000011 3c3c3c3c 3c3c3c3c ........<<<<<<<<
+ .*2080 3e3e3e3e 24000000 112d0000 00113600 >>>>\$....-....6.
+ .*2090 0000113f 00000011 3c3c3c3c 3c3c3c3c ...\?....<<<<<<<<
+Contents of section \.rdata:
+ .*3000 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<<
+ .*3010 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>><
+ .*3020 3e3e3e3e 00000000 00000000 00000000 >>>>............
+Contents of section \.idata:
+ .*4000 00000000 00000000 00000000 00000000 ................
+ .*4010 00000000 ....
diff --git a/binutils-2.21/ld/testsuite/ld-pe/secrel1.s b/binutils-2.21/ld/testsuite/ld-pe/secrel1.s
new file mode 100644
index 0000000..c162990
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/secrel1.s
@@ -0,0 +1,79 @@
+.text
+
+ .ascii ">>>>"
+pre04: .ascii "<<<<"
+ .ascii ">>>>>"
+pre0d: .ascii "<<<"
+ .ascii ">>>>>>"
+pre16: .ascii "<<"
+ .ascii ">>>>>>>"
+pre1f: .ascii "<"
+
+.data
+
+ .ascii ">>>>"
+sam04: .ascii "<<<<"
+ .ascii ">>>>>"
+sam0d: .ascii "<<<"
+ .ascii ">>>>>>"
+sam16: .ascii "<<"
+ .ascii ">>>>>>>"
+sam1f: .ascii "<"
+
+ .ascii ">>>>"
+ .secrel32 pre04
+ .byte 0x11
+ .secrel32 pre0d
+ .byte 0x11
+ .secrel32 pre16
+ .byte 0x11
+ .secrel32 pre1f
+ .byte 0x11
+ .ascii "<<<<<<<<"
+
+ .ascii ">>>>"
+ .secrel32 sam04
+ .byte 0x11
+ .secrel32 sam0d
+ .byte 0x11
+ .secrel32 sam16
+ .byte 0x11
+ .secrel32 sam1f
+ .byte 0x11
+ .ascii "<<<<<<<<"
+
+ .ascii ">>>>"
+ .secrel32 nex04
+ .byte 0x11
+ .secrel32 nex0d
+ .byte 0x11
+ .secrel32 nex16
+ .byte 0x11
+ .secrel32 nex1f
+ .byte 0x11
+ .ascii "<<<<<<<<"
+
+ .ascii ">>>>"
+ .secrel32 ext24
+ .byte 0x11
+ .secrel32 ext2d
+ .byte 0x11
+ .secrel32 ext36
+ .byte 0x11
+ .secrel32 ext3f
+ .byte 0x11
+ .ascii "<<<<<<<<"
+
+.section .rdata
+
+ .ascii ">>>>"
+nex04: .ascii "<<<<"
+ .ascii ">>>>>"
+nex0d: .ascii "<<<"
+ .ascii ">>>>>>"
+nex16: .ascii "<<"
+ .ascii ">>>>>>>"
+nex1f: .ascii "<"
+ .ascii ">>>>"
+
+ .p2align 4,0
diff --git a/binutils-2.21/ld/testsuite/ld-pe/secrel2.s b/binutils-2.21/ld/testsuite/ld-pe/secrel2.s
new file mode 100644
index 0000000..a1f871f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/secrel2.s
@@ -0,0 +1,14 @@
+.text
+
+ .ascii ">>>>"
+.global ext24
+ext24: .ascii "<<<<"
+ .ascii ">>>>>"
+.global ext2d
+ext2d: .ascii "<<<"
+ .ascii ">>>>>>"
+.global ext36
+ext36: .ascii "<<"
+ .ascii ">>>>>>>"
+.global ext3f
+ext3f: .ascii "<"
diff --git a/binutils-2.21/ld/testsuite/ld-pe/secrel_64.d b/binutils-2.21/ld/testsuite/ld-pe/secrel_64.d
new file mode 100644
index 0000000..aba1bf1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/secrel_64.d
@@ -0,0 +1,28 @@
+
+tmpdir/secrel\.x: +file format pei-.*
+
+Contents of section \.text:
+ .*1000 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<<
+ .*1010 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>><
+ .*1020 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<<
+ .*1030 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>><
+ .*1040 ffffffff ffffffff 00000000 00000000 ................
+ .*1050 ffffffff ffffffff 00000000 00000000 ................
+Contents of section \.data:
+ .*2000 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<<
+ .*2010 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>><
+ .*2020 3e3e3e3e 04000000 110d0000 00111600 >>>>............
+ .*2030 0000111f 00000011 3c3c3c3c 3c3c3c3c ........<<<<<<<<
+ .*2040 3e3e3e3e 04000000 110d0000 00111600 >>>>............
+ .*2050 0000111f 00000011 3c3c3c3c 3c3c3c3c ........<<<<<<<<
+ .*2060 3e3e3e3e 04000000 110d0000 00111600 >>>>............
+ .*2070 0000111f 00000011 3c3c3c3c 3c3c3c3c ........<<<<<<<<
+ .*2080 3e3e3e3e 24000000 112d0000 00113600 >>>>\$....-....6.
+ .*2090 0000113f 00000011 3c3c3c3c 3c3c3c3c ...\?....<<<<<<<<
+Contents of section \.rdata:
+ .*3000 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<<
+ .*3010 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>><
+ .*3020 3e3e3e3e 00000000 00000000 00000000 >>>>............
+Contents of section \.idata:
+ .*4000 00000000 00000000 00000000 00000000 ................
+ .*4010 00000000 ....
diff --git a/binutils-2.21/ld/testsuite/ld-pe/vers-script-1.d b/binutils-2.21/ld/testsuite/ld-pe/vers-script-1.d
new file mode 100644
index 0000000..d494cfc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/vers-script-1.d
@@ -0,0 +1,153 @@
+EXPORTS
+ A @1
+ B @2
+ C @3
+ D @4
+ E @5
+ GC_abort @6
+ GC_add_ext_descriptor @7
+ GC_add_leaked @8
+ GC_add_map_entry @9
+ GC_used_heap_size_after_full @10
+ GC_version @11
+ GC_with_callee_saves_pushed @12
+ GC_words_allocd_at_reset @13
+ GC_world_stopped @14
+ GC_write @15
+ JIS0208_to_Unicode @16
+ JIS0212_to_Unicode @17
+ JvConvertArgv @18
+ JvRunMain @19
+ JvRunMainName @20
+ Unicode_to_JIS @21
+ _Jv_AllocBytes @22
+ _Jv_AllocObject @23
+ _Jv_AllocObjectNoFinalizer @24
+ _Jv_JNIFunctions @25
+ _Jv_JNI_InvokeFunctions @26
+ _Jv_JNI_PopSystemFrame @27
+ _Jv_JVMPI_Notify_OBJECT_ALLOC @28
+ _Jv_JVMPI_Notify_THREAD_END @29
+ _Jv_JVMPI_Notify_THREAD_START @30
+ _Jv_JVMTI_Interface @31
+ _Jv_LookupInterfaceMethod @32
+ _Jv_LookupInterfaceMethodIdx @33
+ _Jv_LookupJNIMethod @34
+ _Jv_Malloc @35
+ _Jv_Throw @36
+ _Jv_ThrowAbstractMethodError @37
+ _Jv_UnwrapJNIweakReference @38
+ _Jv__mcmp @39
+ _Jv__mdiff @40
+ _Jv__mprec_bigtens @41
+ _Jv__mprec_tinytens @42
+ _Jv_argc @43
+ _Jv_argv @44
+ _Jv_b2d @45
+ _Jv_booleanClass @46
+ _Jv_byteClass @47
+ _Jv_charClass @48
+ _Jv_d2b @49
+ _Jv_ulp @50
+ _Jv_voidClass @51
+ _Z10_Jv_InitGCv @52
+ _Z10_Jv_equalnP13_Jv_Utf8ConstPN4java4lang6StringEi @53
+ _Z11_Jv_SetArgsiPPKc @54
+ _Z11_Jv_ZMallocPvjj @55
+ _Z11trie_lookupPtt @56
+ _Z12_Jv_CondWaitP23_Jv_ConditionVariable_tP11_Jv_Mutex_txi @57
+ _Z12_Jv_init_cifP13_Jv_Utf8ConstibP7ffi_cifPP9_ffi_typeS5_ @58
+ _Z12_Jv_is_proxyPv @59
+ _Z12shsTransformP8SHS_INFO @60
+ _Z13_Jv_DisableGCv @61
+ _Z15_Jv_create_coreP14_Jv_core_chainPN4java4lang6StringE @62
+ _Z16_Jv_BlockSigchldv @63
+ _Z16_Jv_BuildGCDescrPN4java4lang5ClassE @64
+ _Z16_Jv_GCFreeMemoryv @65
+ _Z16_Jv_SetStackSizePKc @66
+ _Z16_Jv_VerifyMethodP16_Jv_InterpMethod @67
+ _Z17JvNewStringLatin1PKc @68
+ _Z24_Jv_isPrimitiveOrDerivedPK13_Jv_Utf8Const @69
+ _Z26_Jv_FindSymbolInExecutablePKc @70
+ _Z26_Jv_GCInitializeFinalizersPFvvE @71
+ _Z37_Jv_FindClassFromSignatureNoExceptionPcPN4java4lang11ClassLoaderEPS_ @72
+ _Z39_Jv_ThrowNoClassDefFoundErrorTrampolineP7ffi_cifPvPS1_S1_ @73
+ _Z7in_hashPN4java4lang6ObjectE @74
+ _Z7shsInitP8SHS_INFO @75
+ _Z8shsFinalP8SHS_INFO @76
+ _Z9_Jv_AbortPKcS0_iS0_ @77
+ _Z9_Jv_RunGCv @78
+ _Z9_Jv_ZFreePvS_ @79
+ _Z9_Jv_equalP13_Jv_Utf8ConstPN4java4lang6StringEi @80
+ _Z9shsUpdateP8SHS_INFOPhi @81
+ _ZGr30_java_Sutil_Sweeks__properties @82
+ _ZGr32_java_Sutil_Siso4217__properties @83
+ _ZGr48_gnu_Sjavax_Sprint_SPrinterDialog_de__properties @84
+ _ZGr49_gnu_Sjava_Slocale_SLocaleInformation__properties @85
+ _ZGr51_gnu_Sjava_Sutil_Sregex_SMessagesBundle__properties @86
+ _ZTVN5javax8security4auth4x50021X500PrivateCredentialE @87
+ _ZTVN5javax8security4auth5login12LoginContextE @88
+ _ZTVN5javax8security4auth5login13ConfigurationE @89
+ _ZTVN5javax8security4auth5login14LoginExceptionE @90
+ _ZTVN5javax8security4sasl19RealmChoiceCallbackE @91
+ _ZTVN5javax8security4sasl23AuthenticationExceptionE @92
+ _ZTVN5javax8security4sasl4SaslE @93
+ __gcj_personality_v0 @94
+ __ieee754_acos @95
+ __ieee754_asin @96
+ __ieee754_atan2 @97
+ __kernel_cos @98
+ __kernel_rem_pio2 @99
+ __kernel_sin @100
+ __kernel_tan @101
+ _dist_code @102
+ _length_code @103
+ _mprec_log10 @104
+ _tr_align @105
+ _tr_flush_block @106
+ _tr_init @107
+ _tr_stored_block @108
+ _tr_tally @109
+ adler32 @110
+ adler32_combine @111
+ crc32 @112
+ crc32_combine @113
+ deflate @114
+ deflateBound @115
+ deflateCopy @116
+ ffi_call_STDCALL @117
+ ffi_call_SYSV @118
+ ffi_closure_SYSV @119
+ ffi_closure_SYSV_inner @120
+ ffi_closure_alloc @121
+ ffi_closure_free @122
+ free_list_index_of @123
+ get_crc_table @124
+ gzclearerr @125
+ gzclose @126
+ gzungetc @127
+ gzwrite @128
+ h0 @129
+ h1 @130
+ h2 @131
+ h3 @132
+ h4 @133
+ inflate @134
+ inflateBack @135
+ inflateBackEnd @136
+ inflate_fast @137
+ inflate_table @138
+ lt_dladderror @139
+ lt_dladdsearchdir @140
+ lt_dlsetsearchpath @141
+ lt_dlsym @142
+ lt_preloaded_symbols @143
+ print @144
+ thread_table @145
+ uncompress @146
+ zError @147
+ z_errmsg @148
+ zcalloc @149
+ zcfree @150
+ zlibCompileFlags @151
+ zlibVersion @152
diff --git a/binutils-2.21/ld/testsuite/ld-pe/vers-script-1.ver b/binutils-2.21/ld/testsuite/ld-pe/vers-script-1.ver
new file mode 100755
index 0000000..07f54aa
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/vers-script-1.ver
@@ -0,0 +1,5 @@
+# Anonymous GNU ld version script to export everything.
+
+{
+ global: *;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-pe/vers-script-2.d b/binutils-2.21/ld/testsuite/ld-pe/vers-script-2.d
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/vers-script-2.d
diff --git a/binutils-2.21/ld/testsuite/ld-pe/vers-script-2.ver b/binutils-2.21/ld/testsuite/ld-pe/vers-script-2.ver
new file mode 100755
index 0000000..6e7cac6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/vers-script-2.ver
@@ -0,0 +1,5 @@
+# Anonymous GNU ld version script to export nothing.
+
+{
+ local: *;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-pe/vers-script-3.d b/binutils-2.21/ld/testsuite/ld-pe/vers-script-3.d
new file mode 100644
index 0000000..0feafe0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/vers-script-3.d
@@ -0,0 +1,77 @@
+EXPORTS
+ JvConvertArgv @1
+ JvRunMain @2
+ JvRunMainName @3
+ _Jv_AllocBytes @4
+ _Jv_AllocObject @5
+ _Jv_AllocObjectNoFinalizer @6
+ _Jv_JNIFunctions @7
+ _Jv_JNI_InvokeFunctions @8
+ _Jv_JNI_PopSystemFrame @9
+ _Jv_JVMPI_Notify_OBJECT_ALLOC @10
+ _Jv_JVMPI_Notify_THREAD_END @11
+ _Jv_JVMPI_Notify_THREAD_START @12
+ _Jv_JVMTI_Interface @13
+ _Jv_LookupInterfaceMethod @14
+ _Jv_LookupInterfaceMethodIdx @15
+ _Jv_LookupJNIMethod @16
+ _Jv_Malloc @17
+ _Jv_Throw @18
+ _Jv_ThrowAbstractMethodError @19
+ _Jv_UnwrapJNIweakReference @20
+ _Jv__mcmp @21
+ _Jv__mdiff @22
+ _Jv__mprec_bigtens @23
+ _Jv__mprec_tinytens @24
+ _Jv_argc @25
+ _Jv_argv @26
+ _Jv_b2d @27
+ _Jv_booleanClass @28
+ _Jv_byteClass @29
+ _Jv_charClass @30
+ _Jv_d2b @31
+ _Jv_ulp @32
+ _Jv_voidClass @33
+ _Z10_Jv_InitGCv @34
+ _Z10_Jv_equalnP13_Jv_Utf8ConstPN4java4lang6StringEi @35
+ _Z11_Jv_SetArgsiPPKc @36
+ _Z11_Jv_ZMallocPvjj @37
+ _Z11trie_lookupPtt @38
+ _Z12_Jv_CondWaitP23_Jv_ConditionVariable_tP11_Jv_Mutex_txi @39
+ _Z12_Jv_init_cifP13_Jv_Utf8ConstibP7ffi_cifPP9_ffi_typeS5_ @40
+ _Z12_Jv_is_proxyPv @41
+ _Z12shsTransformP8SHS_INFO @42
+ _Z13_Jv_DisableGCv @43
+ _Z15_Jv_create_coreP14_Jv_core_chainPN4java4lang6StringE @44
+ _Z16_Jv_BlockSigchldv @45
+ _Z16_Jv_BuildGCDescrPN4java4lang5ClassE @46
+ _Z16_Jv_GCFreeMemoryv @47
+ _Z16_Jv_SetStackSizePKc @48
+ _Z16_Jv_VerifyMethodP16_Jv_InterpMethod @49
+ _Z17JvNewStringLatin1PKc @50
+ _Z24_Jv_isPrimitiveOrDerivedPK13_Jv_Utf8Const @51
+ _Z26_Jv_FindSymbolInExecutablePKc @52
+ _Z26_Jv_GCInitializeFinalizersPFvvE @53
+ _Z37_Jv_FindClassFromSignatureNoExceptionPcPN4java4lang11ClassLoaderEPS_ @54
+ _Z39_Jv_ThrowNoClassDefFoundErrorTrampolineP7ffi_cifPvPS1_S1_ @55
+ _Z7in_hashPN4java4lang6ObjectE @56
+ _Z7shsInitP8SHS_INFO @57
+ _Z8shsFinalP8SHS_INFO @58
+ _Z9_Jv_AbortPKcS0_iS0_ @59
+ _Z9_Jv_RunGCv @60
+ _Z9_Jv_ZFreePvS_ @61
+ _Z9_Jv_equalP13_Jv_Utf8ConstPN4java4lang6StringEi @62
+ _Z9shsUpdateP8SHS_INFOPhi @63
+ _ZGr30_java_Sutil_Sweeks__properties @64
+ _ZGr32_java_Sutil_Siso4217__properties @65
+ _ZGr48_gnu_Sjavax_Sprint_SPrinterDialog_de__properties @66
+ _ZGr49_gnu_Sjava_Slocale_SLocaleInformation__properties @67
+ _ZGr51_gnu_Sjava_Sutil_Sregex_SMessagesBundle__properties @68
+ _ZTVN5javax8security4auth4x50021X500PrivateCredentialE @69
+ _ZTVN5javax8security4auth5login12LoginContextE @70
+ _ZTVN5javax8security4auth5login13ConfigurationE @71
+ _ZTVN5javax8security4auth5login14LoginExceptionE @72
+ _ZTVN5javax8security4sasl19RealmChoiceCallbackE @73
+ _ZTVN5javax8security4sasl23AuthenticationExceptionE @74
+ _ZTVN5javax8security4sasl4SaslE @75
+ __gcj_personality_v0 @76
diff --git a/binutils-2.21/ld/testsuite/ld-pe/vers-script-3.ver b/binutils-2.21/ld/testsuite/ld-pe/vers-script-3.ver
new file mode 100755
index 0000000..d2d189b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/vers-script-3.ver
@@ -0,0 +1,7 @@
+# Anonymous GNU ld version script to hide boehm-gc, libffi and fdlibm
+# symbols in libgcj.so.
+
+{
+ global: Jv*; _Jv_*; __gcj_personality_v0; __gcj_personality_sj0; _Z*;
+ local: *;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-pe/vers-script-4.d b/binutils-2.21/ld/testsuite/ld-pe/vers-script-4.d
new file mode 100644
index 0000000..0feafe0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/vers-script-4.d
@@ -0,0 +1,77 @@
+EXPORTS
+ JvConvertArgv @1
+ JvRunMain @2
+ JvRunMainName @3
+ _Jv_AllocBytes @4
+ _Jv_AllocObject @5
+ _Jv_AllocObjectNoFinalizer @6
+ _Jv_JNIFunctions @7
+ _Jv_JNI_InvokeFunctions @8
+ _Jv_JNI_PopSystemFrame @9
+ _Jv_JVMPI_Notify_OBJECT_ALLOC @10
+ _Jv_JVMPI_Notify_THREAD_END @11
+ _Jv_JVMPI_Notify_THREAD_START @12
+ _Jv_JVMTI_Interface @13
+ _Jv_LookupInterfaceMethod @14
+ _Jv_LookupInterfaceMethodIdx @15
+ _Jv_LookupJNIMethod @16
+ _Jv_Malloc @17
+ _Jv_Throw @18
+ _Jv_ThrowAbstractMethodError @19
+ _Jv_UnwrapJNIweakReference @20
+ _Jv__mcmp @21
+ _Jv__mdiff @22
+ _Jv__mprec_bigtens @23
+ _Jv__mprec_tinytens @24
+ _Jv_argc @25
+ _Jv_argv @26
+ _Jv_b2d @27
+ _Jv_booleanClass @28
+ _Jv_byteClass @29
+ _Jv_charClass @30
+ _Jv_d2b @31
+ _Jv_ulp @32
+ _Jv_voidClass @33
+ _Z10_Jv_InitGCv @34
+ _Z10_Jv_equalnP13_Jv_Utf8ConstPN4java4lang6StringEi @35
+ _Z11_Jv_SetArgsiPPKc @36
+ _Z11_Jv_ZMallocPvjj @37
+ _Z11trie_lookupPtt @38
+ _Z12_Jv_CondWaitP23_Jv_ConditionVariable_tP11_Jv_Mutex_txi @39
+ _Z12_Jv_init_cifP13_Jv_Utf8ConstibP7ffi_cifPP9_ffi_typeS5_ @40
+ _Z12_Jv_is_proxyPv @41
+ _Z12shsTransformP8SHS_INFO @42
+ _Z13_Jv_DisableGCv @43
+ _Z15_Jv_create_coreP14_Jv_core_chainPN4java4lang6StringE @44
+ _Z16_Jv_BlockSigchldv @45
+ _Z16_Jv_BuildGCDescrPN4java4lang5ClassE @46
+ _Z16_Jv_GCFreeMemoryv @47
+ _Z16_Jv_SetStackSizePKc @48
+ _Z16_Jv_VerifyMethodP16_Jv_InterpMethod @49
+ _Z17JvNewStringLatin1PKc @50
+ _Z24_Jv_isPrimitiveOrDerivedPK13_Jv_Utf8Const @51
+ _Z26_Jv_FindSymbolInExecutablePKc @52
+ _Z26_Jv_GCInitializeFinalizersPFvvE @53
+ _Z37_Jv_FindClassFromSignatureNoExceptionPcPN4java4lang11ClassLoaderEPS_ @54
+ _Z39_Jv_ThrowNoClassDefFoundErrorTrampolineP7ffi_cifPvPS1_S1_ @55
+ _Z7in_hashPN4java4lang6ObjectE @56
+ _Z7shsInitP8SHS_INFO @57
+ _Z8shsFinalP8SHS_INFO @58
+ _Z9_Jv_AbortPKcS0_iS0_ @59
+ _Z9_Jv_RunGCv @60
+ _Z9_Jv_ZFreePvS_ @61
+ _Z9_Jv_equalP13_Jv_Utf8ConstPN4java4lang6StringEi @62
+ _Z9shsUpdateP8SHS_INFOPhi @63
+ _ZGr30_java_Sutil_Sweeks__properties @64
+ _ZGr32_java_Sutil_Siso4217__properties @65
+ _ZGr48_gnu_Sjavax_Sprint_SPrinterDialog_de__properties @66
+ _ZGr49_gnu_Sjava_Slocale_SLocaleInformation__properties @67
+ _ZGr51_gnu_Sjava_Sutil_Sregex_SMessagesBundle__properties @68
+ _ZTVN5javax8security4auth4x50021X500PrivateCredentialE @69
+ _ZTVN5javax8security4auth5login12LoginContextE @70
+ _ZTVN5javax8security4auth5login13ConfigurationE @71
+ _ZTVN5javax8security4auth5login14LoginExceptionE @72
+ _ZTVN5javax8security4sasl19RealmChoiceCallbackE @73
+ _ZTVN5javax8security4sasl23AuthenticationExceptionE @74
+ _ZTVN5javax8security4sasl4SaslE @75
+ __gcj_personality_v0 @76
diff --git a/binutils-2.21/ld/testsuite/ld-pe/vers-script-4.ver b/binutils-2.21/ld/testsuite/ld-pe/vers-script-4.ver
new file mode 100755
index 0000000..f38abf1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/vers-script-4.ver
@@ -0,0 +1,10 @@
+# GNU ld version script to hide boehm-gc, libffi and fdlibm
+# symbols in libgcj.so.
+
+TEST_1_0 {
+ local: *;
+};
+
+TEST_1_1 {
+ global: Jv*; _Jv_*; __gcj_personality_v0; __gcj_personality_sj0; _Z*;
+}; \ No newline at end of file
diff --git a/binutils-2.21/ld/testsuite/ld-pe/vers-script-dll.c b/binutils-2.21/ld/testsuite/ld-pe/vers-script-dll.c
new file mode 100755
index 0000000..547ddb5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pe/vers-script-dll.c
@@ -0,0 +1,156 @@
+
+#define FUNC(X_) extern void X_ (void); void X_ (void) { };
+
+FUNC(A)
+FUNC(B)
+FUNC(C)
+FUNC(D)
+FUNC(E)
+FUNC(GC_abort)
+FUNC(GC_add_ext_descriptor)
+FUNC(GC_add_leaked)
+FUNC(GC_add_map_entry)
+FUNC(GC_used_heap_size_after_full)
+FUNC(GC_version)
+FUNC(GC_with_callee_saves_pushed)
+FUNC(GC_words_allocd_at_reset)
+FUNC(GC_world_stopped)
+FUNC(GC_write)
+FUNC(JIS0208_to_Unicode)
+FUNC(JIS0212_to_Unicode)
+FUNC(JvConvertArgv)
+FUNC(JvRunMain)
+FUNC(JvRunMainName)
+FUNC(Unicode_to_JIS)
+FUNC(_Jv_AllocBytes)
+FUNC(_Jv_AllocObject)
+FUNC(_Jv_AllocObjectNoFinalizer)
+FUNC(_ZTVN5javax8security4sasl23AuthenticationExceptionE)
+FUNC(_ZTVN5javax8security4sasl4SaslE)
+FUNC(__gcj_personality_v0)
+FUNC(__ieee754_acos)
+FUNC(__ieee754_asin)
+FUNC(__ieee754_atan2)
+FUNC(__kernel_cos)
+FUNC(__kernel_rem_pio2)
+FUNC(__kernel_sin)
+FUNC(__kernel_tan)
+FUNC(_dist_code)
+FUNC(_length_code)
+FUNC(_mprec_log10)
+FUNC(_tr_align)
+FUNC(_tr_flush_block)
+FUNC(_tr_init)
+FUNC(_tr_stored_block)
+FUNC(_tr_tally)
+FUNC(adler32)
+FUNC(adler32_combine)
+FUNC(crc32)
+FUNC(crc32_combine)
+FUNC(deflate)
+FUNC(deflateBound)
+FUNC(deflateCopy)
+FUNC(ffi_call_STDCALL)
+FUNC(ffi_call_SYSV)
+FUNC(ffi_closure_SYSV)
+FUNC(ffi_closure_SYSV_inner)
+FUNC(ffi_closure_alloc)
+FUNC(ffi_closure_free)
+FUNC(free_list_index_of)
+FUNC(get_crc_table)
+FUNC(gzclearerr)
+FUNC(gzclose)
+FUNC(gzungetc)
+FUNC(gzwrite)
+FUNC(h0)
+FUNC(h1)
+FUNC(h2)
+FUNC(h3)
+FUNC(h4)
+FUNC(inflate)
+FUNC(inflateBack)
+FUNC(inflateBackEnd)
+FUNC(inflate_fast)
+FUNC(inflate_table)
+FUNC(lt_dladderror)
+FUNC(lt_dladdsearchdir)
+FUNC(lt_dlsetsearchpath)
+FUNC(lt_dlsym)
+FUNC(lt_preloaded_symbols)
+FUNC(print)
+FUNC(thread_table)
+FUNC(uncompress)
+FUNC(zError)
+FUNC(z_errmsg)
+FUNC(zcalloc)
+FUNC(zcfree)
+FUNC(zlibCompileFlags)
+FUNC(zlibVersion)
+FUNC(_Jv_JNIFunctions)
+FUNC(_Jv_JNI_InvokeFunctions)
+FUNC(_Jv_JNI_PopSystemFrame)
+FUNC(_Jv_JVMPI_Notify_OBJECT_ALLOC)
+FUNC(_Jv_JVMPI_Notify_THREAD_END)
+FUNC(_Jv_JVMPI_Notify_THREAD_START)
+FUNC(_Jv_JVMTI_Interface)
+FUNC(_Jv_LookupInterfaceMethod)
+FUNC(_Jv_LookupInterfaceMethodIdx)
+FUNC(_Jv_LookupJNIMethod)
+FUNC(_Jv_Malloc)
+FUNC(_Jv_Throw)
+FUNC(_Jv_ThrowAbstractMethodError)
+FUNC(_Jv_UnwrapJNIweakReference)
+FUNC(_Jv__mcmp)
+FUNC(_Jv__mdiff)
+FUNC(_Jv__mprec_bigtens)
+FUNC(_Jv__mprec_tinytens)
+FUNC(_Jv_argc)
+FUNC(_Jv_argv)
+FUNC(_Jv_b2d)
+FUNC(_Jv_booleanClass)
+FUNC(_Jv_byteClass)
+FUNC(_Jv_charClass)
+FUNC(_Jv_d2b)
+FUNC(_Jv_ulp)
+FUNC(_Jv_voidClass)
+FUNC(_Z10_Jv_InitGCv)
+FUNC(_Z10_Jv_equalnP13_Jv_Utf8ConstPN4java4lang6StringEi)
+FUNC(_Z11_Jv_SetArgsiPPKc)
+FUNC(_Z11_Jv_ZMallocPvjj)
+FUNC(_Z11trie_lookupPtt)
+FUNC(_Z12_Jv_CondWaitP23_Jv_ConditionVariable_tP11_Jv_Mutex_txi)
+FUNC(_Z12_Jv_init_cifP13_Jv_Utf8ConstibP7ffi_cifPP9_ffi_typeS5_)
+FUNC(_Z12_Jv_is_proxyPv)
+FUNC(_Z12shsTransformP8SHS_INFO)
+FUNC(_Z13_Jv_DisableGCv)
+FUNC(_Z15_Jv_create_coreP14_Jv_core_chainPN4java4lang6StringE)
+FUNC(_Z16_Jv_BlockSigchldv)
+FUNC(_Z16_Jv_BuildGCDescrPN4java4lang5ClassE)
+FUNC(_Z16_Jv_GCFreeMemoryv)
+FUNC(_Z16_Jv_SetStackSizePKc)
+FUNC(_Z16_Jv_VerifyMethodP16_Jv_InterpMethod)
+FUNC(_Z17JvNewStringLatin1PKc)
+FUNC(_ZTVN5javax8security4auth4x50021X500PrivateCredentialE)
+FUNC(_ZTVN5javax8security4auth5login12LoginContextE)
+FUNC(_ZTVN5javax8security4auth5login13ConfigurationE)
+FUNC(_ZTVN5javax8security4auth5login14LoginExceptionE)
+FUNC(_ZTVN5javax8security4sasl19RealmChoiceCallbackE)
+FUNC(_Z24_Jv_isPrimitiveOrDerivedPK13_Jv_Utf8Const)
+FUNC(_Z26_Jv_FindSymbolInExecutablePKc)
+FUNC(_Z26_Jv_GCInitializeFinalizersPFvvE)
+FUNC(_Z37_Jv_FindClassFromSignatureNoExceptionPcPN4java4lang11ClassLoaderEPS_)
+FUNC(_Z39_Jv_ThrowNoClassDefFoundErrorTrampolineP7ffi_cifPvPS1_S1_)
+FUNC(_Z7in_hashPN4java4lang6ObjectE)
+FUNC(_Z7shsInitP8SHS_INFO)
+FUNC(_Z8shsFinalP8SHS_INFO)
+FUNC(_Z9_Jv_AbortPKcS0_iS0_)
+FUNC(_Z9_Jv_RunGCv)
+FUNC(_Z9_Jv_ZFreePvS_)
+FUNC(_Z9_Jv_equalP13_Jv_Utf8ConstPN4java4lang6StringEi)
+FUNC(_Z9shsUpdateP8SHS_INFOPhi)
+FUNC(_ZGr30_java_Sutil_Sweeks__properties)
+FUNC(_ZGr32_java_Sutil_Siso4217__properties)
+FUNC(_ZGr48_gnu_Sjavax_Sprint_SPrinterDialog_de__properties)
+FUNC(_ZGr49_gnu_Sjava_Slocale_SLocaleInformation__properties)
+FUNC(_ZGr51_gnu_Sjava_Sutil_Sregex_SMessagesBundle__properties)
+
diff --git a/binutils-2.21/ld/testsuite/ld-pie/pie.c b/binutils-2.21/ld/testsuite/ld-pie/pie.c
new file mode 100644
index 0000000..a9bce4a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pie/pie.c
@@ -0,0 +1,5 @@
+int
+main ()
+{
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-pie/pie.exp b/binutils-2.21/ld/testsuite/ld-pie/pie.exp
new file mode 100644
index 0000000..19a2ac0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pie/pie.exp
@@ -0,0 +1,50 @@
+# Expect script for various PIE tests.
+# Copyright 2006, 2007, 2009 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# This test can only be run if ld generates native executables.
+if ![isnative] then {return}
+
+# Run on Linux only.
+if { ![istarget *-*-linux*] } {
+ return
+}
+
+# Check if -pie is supported or not.
+send_log "$CC -fpie -pie $srcdir/$subdir/pie.c -o tmpdir/pie"
+catch "exec $CC -fpie -pie $srcdir/$subdir/pie.c -o tmpdir/pie" exec_output
+send_log "$exec_output\n"
+if { ![string match "" $exec_output] } {
+ return
+}
+
+set array_tests {
+ {"weak undefined" "-pie" "" {weakundef.c} "weakundef" "weakundef.out" "-fPIC"}
+ {"weak undefined data" "-pie" "" {weakundef-data.c} "weakundef-data" "weakundef.out" "-fPIC"}
+}
+
+run_ld_link_exec_tests [] $array_tests
+
+set test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
+foreach t $test_list {
+ # We need to strip the ".d", but can leave the dirname.
+ verbose [file rootname $t]
+ run_dump_test [file rootname $t]
+}
diff --git a/binutils-2.21/ld/testsuite/ld-pie/start.d b/binutils-2.21/ld/testsuite/ld-pie/start.d
new file mode 100644
index 0000000..1ee22e0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pie/start.d
@@ -0,0 +1,8 @@
+#name: missing entry symbol
+#ld: -pie
+#warning: .*: warning: cannot find entry symbol .*
+#nm: -n
+
+#...
+[0-9a-f]+ T +foo
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-pie/start.s b/binutils-2.21/ld/testsuite/ld-pie/start.s
new file mode 100644
index 0000000..4a70181
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pie/start.s
@@ -0,0 +1,4 @@
+ .text
+ .globl foo
+foo:
+ .byte 0
diff --git a/binutils-2.21/ld/testsuite/ld-pie/weakundef-data.c b/binutils-2.21/ld/testsuite/ld-pie/weakundef-data.c
new file mode 100644
index 0000000..af411bc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pie/weakundef-data.c
@@ -0,0 +1,15 @@
+#include <stdio.h>
+
+#pragma weak undef_data
+
+extern int undef_data;
+int *ptr_to_data = &undef_data;
+
+int
+main (void)
+{
+ if (ptr_to_data == NULL)
+ printf ("PASSED\n");
+
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-pie/weakundef.c b/binutils-2.21/ld/testsuite/ld-pie/weakundef.c
new file mode 100644
index 0000000..c206781
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pie/weakundef.c
@@ -0,0 +1,15 @@
+#include <stdio.h>
+
+#pragma weak undef_func
+
+extern int undef_func (void);
+int (*ptr_to_func)(void) = undef_func;
+
+int
+main (void)
+{
+ if (ptr_to_func == NULL)
+ printf ("PASSED\n");
+
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-pie/weakundef.out b/binutils-2.21/ld/testsuite/ld-pie/weakundef.out
new file mode 100644
index 0000000..53cdf1e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-pie/weakundef.out
@@ -0,0 +1 @@
+PASSED
diff --git a/binutils-2.21/ld/testsuite/ld-plugin/func.c b/binutils-2.21/ld/testsuite/ld-plugin/func.c
new file mode 100644
index 0000000..8c668db
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-plugin/func.c
@@ -0,0 +1,7 @@
+
+extern int retval;
+
+int func (void)
+{
+ return retval;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-plugin/main.c b/binutils-2.21/ld/testsuite/ld-plugin/main.c
new file mode 100644
index 0000000..2d64617
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-plugin/main.c
@@ -0,0 +1,13 @@
+
+extern int printf (const char *fmt, ...);
+
+extern const char *text;
+extern int func (void);
+
+int retval = 0;
+
+int main (int argc, const char **argv)
+{
+ printf ("%s\n", text);
+ return func ();
+}
diff --git a/binutils-2.21/ld/testsuite/ld-plugin/plugin-1.d b/binutils-2.21/ld/testsuite/ld-plugin/plugin-1.d
new file mode 100644
index 0000000..0ce0794
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-plugin/plugin-1.d
@@ -0,0 +1,18 @@
+Hello from testplugin.
+tv\[0\]: LDPT_MESSAGE func@0x.*
+tv\[1\]: LDPT_API_VERSION value 0x1 \(1\)
+tv\[2\]: LDPT_GNU_LD_VERSION value 0x.*
+tv\[3\]: LDPT_LINKER_OUTPUT value 0x1 \(1\)
+tv\[4\]: LDPT_OUTPUT_NAME 'tmpdir/main.x'
+tv\[5\]: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
+tv\[6\]: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
+tv\[7\]: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
+tv\[8\]: LDPT_ADD_SYMBOLS func@0x.*
+tv\[9\]: LDPT_GET_INPUT_FILE func@0x.*
+tv\[10\]: LDPT_RELEASE_INPUT_FILE func@0x.*
+tv\[11\]: LDPT_GET_SYMBOLS func@0x.*
+tv\[12\]: LDPT_ADD_INPUT_FILE func@0x.*
+tv\[13\]: LDPT_ADD_INPUT_LIBRARY func@0x.*
+tv\[14\]: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
+tv\[15\]: LDPT_NULL value 0x0 \(0\)
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-plugin/plugin-10.d b/binutils-2.21/ld/testsuite/ld-plugin/plugin-10.d
new file mode 100644
index 0000000..7e3c3bb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-plugin/plugin-10.d
@@ -0,0 +1,36 @@
+Hello from testplugin.
+tv\[0\]: LDPT_MESSAGE func@0x.*
+tv\[1\]: LDPT_API_VERSION value 0x1 \(1\)
+tv\[2\]: LDPT_GNU_LD_VERSION value 0x.*
+tv\[3\]: LDPT_LINKER_OUTPUT value 0x1 \(1\)
+tv\[4\]: LDPT_OUTPUT_NAME 'tmpdir/main.x'
+tv\[5\]: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
+tv\[6\]: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
+tv\[7\]: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
+tv\[8\]: LDPT_ADD_SYMBOLS func@0x.*
+tv\[9\]: LDPT_GET_INPUT_FILE func@0x.*
+tv\[10\]: LDPT_RELEASE_INPUT_FILE func@0x.*
+tv\[11\]: LDPT_GET_SYMBOLS func@0x.*
+tv\[12\]: LDPT_ADD_INPUT_FILE func@0x.*
+tv\[13\]: LDPT_ADD_INPUT_LIBRARY func@0x.*
+tv\[14\]: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
+tv\[15\]: LDPT_OPTION 'registerclaimfile'
+tv\[16\]: LDPT_OPTION 'registerallsymbolsread'
+tv\[17\]: LDPT_OPTION 'registercleanup'
+tv\[18\]: LDPT_OPTION 'claim:tmpdir/func.o'
+tv\[19\]: LDPT_OPTION 'sym:_?func::0:0:0'
+tv\[20\]: LDPT_OPTION 'sym:_?func2::0:0:0'
+tv\[21\]: LDPT_OPTION 'dumpresolutions'
+tv\[22\]: LDPT_OPTION 'add:tmpdir/func.o'
+tv\[23\]: LDPT_NULL value 0x0 \(0\)
+#...
+hook called: claim_file tmpdir/main.o \[@0/.* not claimed
+hook called: claim_file tmpdir/func.o \[@0/.* CLAIMED
+#...
+hook called: claim_file tmpdir/libtext.a \[@.* not claimed
+#...
+hook called: all symbols read.
+Sym: '_?func' Resolution: LDPR_PREVAILING_DEF
+Sym: '_?func2' Resolution: LDPR_PREVAILING_DEF_IRONLY
+hook called: cleanup.
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-plugin/plugin-11.d b/binutils-2.21/ld/testsuite/ld-plugin/plugin-11.d
new file mode 100644
index 0000000..927cffd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-plugin/plugin-11.d
@@ -0,0 +1,40 @@
+Hello from testplugin.
+tv\[0\]: LDPT_MESSAGE func@0x.*
+tv\[1\]: LDPT_API_VERSION value 0x1 \(1\)
+tv\[2\]: LDPT_GNU_LD_VERSION value 0x.*
+tv\[3\]: LDPT_LINKER_OUTPUT value 0x1 \(1\)
+tv\[4\]: LDPT_OUTPUT_NAME 'tmpdir/main.x'
+tv\[5\]: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
+tv\[6\]: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
+tv\[7\]: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
+tv\[8\]: LDPT_ADD_SYMBOLS func@0x.*
+tv\[9\]: LDPT_GET_INPUT_FILE func@0x.*
+tv\[10\]: LDPT_RELEASE_INPUT_FILE func@0x.*
+tv\[11\]: LDPT_GET_SYMBOLS func@0x.*
+tv\[12\]: LDPT_ADD_INPUT_FILE func@0x.*
+tv\[13\]: LDPT_ADD_INPUT_LIBRARY func@0x.*
+tv\[14\]: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
+tv\[15\]: LDPT_OPTION 'registerclaimfile'
+tv\[16\]: LDPT_OPTION 'registerallsymbolsread'
+tv\[17\]: LDPT_OPTION 'registercleanup'
+tv\[18\]: LDPT_OPTION 'claim:tmpdir/func.o'
+tv\[19\]: LDPT_OPTION 'sym:_?func::0:0:0'
+tv\[20\]: LDPT_OPTION 'sym:_?func2::0:0:0'
+tv\[21\]: LDPT_OPTION 'dumpresolutions'
+tv\[22\]: LDPT_OPTION 'add:tmpdir/func.o'
+tv\[23\]: LDPT_OPTION 'claim:tmpdir/libtext.a'
+tv\[24\]: LDPT_OPTION 'sym:_?text::0:0:0'
+tv\[25\]: LDPT_OPTION 'add:tmpdir/text.o'
+tv\[26\]: LDPT_NULL value 0x0 \(0\)
+#...
+hook called: claim_file tmpdir/main.o \[@0/.* not claimed
+hook called: claim_file tmpdir/func.o \[@0/.* CLAIMED
+#...
+hook called: claim_file tmpdir/libtext.a \[@.* CLAIMED
+#...
+hook called: all symbols read.
+Sym: '_?func' Resolution: LDPR_PREVAILING_DEF
+Sym: '_?func2' Resolution: LDPR_PREVAILING_DEF_IRONLY
+Sym: '_?text' Resolution: LDPR_PREVAILING_DEF
+hook called: cleanup.
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-plugin/plugin-2.d b/binutils-2.21/ld/testsuite/ld-plugin/plugin-2.d
new file mode 100644
index 0000000..677f8fb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-plugin/plugin-2.d
@@ -0,0 +1,21 @@
+Hello from testplugin.
+tv\[0\]: LDPT_MESSAGE func@0x.*
+tv\[1\]: LDPT_API_VERSION value 0x1 \(1\)
+tv\[2\]: LDPT_GNU_LD_VERSION value 0x.*
+tv\[3\]: LDPT_LINKER_OUTPUT value 0x1 \(1\)
+tv\[4\]: LDPT_OUTPUT_NAME 'tmpdir/main.x'
+tv\[5\]: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
+tv\[6\]: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
+tv\[7\]: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
+tv\[8\]: LDPT_ADD_SYMBOLS func@0x.*
+tv\[9\]: LDPT_GET_INPUT_FILE func@0x.*
+tv\[10\]: LDPT_RELEASE_INPUT_FILE func@0x.*
+tv\[11\]: LDPT_GET_SYMBOLS func@0x.*
+tv\[12\]: LDPT_ADD_INPUT_FILE func@0x.*
+tv\[13\]: LDPT_ADD_INPUT_LIBRARY func@0x.*
+tv\[14\]: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
+tv\[15\]: LDPT_OPTION 'failonload'
+tv\[16\]: LDPT_NULL value 0x0 \(0\)
+#...
+.*ld.*:.*ldtestplug.*: error loading plugin
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-plugin/plugin-3.d b/binutils-2.21/ld/testsuite/ld-plugin/plugin-3.d
new file mode 100644
index 0000000..73aba1b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-plugin/plugin-3.d
@@ -0,0 +1,22 @@
+Hello from testplugin.
+tv\[0\]: LDPT_MESSAGE func@0x.*
+tv\[1\]: LDPT_API_VERSION value 0x1 \(1\)
+tv\[2\]: LDPT_GNU_LD_VERSION value 0x.*
+tv\[3\]: LDPT_LINKER_OUTPUT value 0x1 \(1\)
+tv\[4\]: LDPT_OUTPUT_NAME 'tmpdir/main.x'
+tv\[5\]: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
+tv\[6\]: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
+tv\[7\]: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
+tv\[8\]: LDPT_ADD_SYMBOLS func@0x.*
+tv\[9\]: LDPT_GET_INPUT_FILE func@0x.*
+tv\[10\]: LDPT_RELEASE_INPUT_FILE func@0x.*
+tv\[11\]: LDPT_GET_SYMBOLS func@0x.*
+tv\[12\]: LDPT_ADD_INPUT_FILE func@0x.*
+tv\[13\]: LDPT_ADD_INPUT_LIBRARY func@0x.*
+tv\[14\]: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
+tv\[15\]: LDPT_OPTION 'registerallsymbolsread'
+tv\[16\]: LDPT_OPTION 'failallsymbolsread'
+tv\[17\]: LDPT_NULL value 0x0 \(0\)
+#...
+.*ld.*:.*ldtestplug.*: plugin reported error after all symbols read
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-plugin/plugin-4.d b/binutils-2.21/ld/testsuite/ld-plugin/plugin-4.d
new file mode 100644
index 0000000..580cbac
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-plugin/plugin-4.d
@@ -0,0 +1,23 @@
+Hello from testplugin.
+tv\[0\]: LDPT_MESSAGE func@0x.*
+tv\[1\]: LDPT_API_VERSION value 0x1 \(1\)
+tv\[2\]: LDPT_GNU_LD_VERSION value 0x.*
+tv\[3\]: LDPT_LINKER_OUTPUT value 0x1 \(1\)
+tv\[4\]: LDPT_OUTPUT_NAME 'tmpdir/main.x'
+tv\[5\]: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
+tv\[6\]: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
+tv\[7\]: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
+tv\[8\]: LDPT_ADD_SYMBOLS func@0x.*
+tv\[9\]: LDPT_GET_INPUT_FILE func@0x.*
+tv\[10\]: LDPT_RELEASE_INPUT_FILE func@0x.*
+tv\[11\]: LDPT_GET_SYMBOLS func@0x.*
+tv\[12\]: LDPT_ADD_INPUT_FILE func@0x.*
+tv\[13\]: LDPT_ADD_INPUT_LIBRARY func@0x.*
+tv\[14\]: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
+tv\[15\]: LDPT_OPTION 'failcleanup'
+tv\[16\]: LDPT_OPTION 'registercleanup'
+tv\[17\]: LDPT_NULL value 0x0 \(0\)
+#...
+hook called: cleanup.
+.*ld.*:.*ldtestplug.*: error in plugin cleanup \(ignored\)
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-plugin/plugin-5.d b/binutils-2.21/ld/testsuite/ld-plugin/plugin-5.d
new file mode 100644
index 0000000..c0ffa66
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-plugin/plugin-5.d
@@ -0,0 +1,29 @@
+Hello from testplugin.
+tv\[0\]: LDPT_MESSAGE func@0x.*
+tv\[1\]: LDPT_API_VERSION value 0x1 \(1\)
+tv\[2\]: LDPT_GNU_LD_VERSION value 0x.*
+tv\[3\]: LDPT_LINKER_OUTPUT value 0x1 \(1\)
+tv\[4\]: LDPT_OUTPUT_NAME 'tmpdir/main.x'
+tv\[5\]: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
+tv\[6\]: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
+tv\[7\]: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
+tv\[8\]: LDPT_ADD_SYMBOLS func@0x.*
+tv\[9\]: LDPT_GET_INPUT_FILE func@0x.*
+tv\[10\]: LDPT_RELEASE_INPUT_FILE func@0x.*
+tv\[11\]: LDPT_GET_SYMBOLS func@0x.*
+tv\[12\]: LDPT_ADD_INPUT_FILE func@0x.*
+tv\[13\]: LDPT_ADD_INPUT_LIBRARY func@0x.*
+tv\[14\]: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
+tv\[15\]: LDPT_OPTION 'registerclaimfile'
+tv\[16\]: LDPT_OPTION 'registerallsymbolsread'
+tv\[17\]: LDPT_OPTION 'registercleanup'
+tv\[18\]: LDPT_NULL value 0x0 \(0\)
+#...
+hook called: claim_file tmpdir/main.o \[@0/.*
+hook called: claim_file tmpdir/func.o \[@0/.*
+hook called: claim_file tmpdir/text.o \[@0/.*
+#...
+hook called: all symbols read.
+#...
+hook called: cleanup.
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-plugin/plugin-6.d b/binutils-2.21/ld/testsuite/ld-plugin/plugin-6.d
new file mode 100644
index 0000000..cb9257d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-plugin/plugin-6.d
@@ -0,0 +1,31 @@
+Hello from testplugin.
+tv\[0\]: LDPT_MESSAGE func@0x.*
+tv\[1\]: LDPT_API_VERSION value 0x1 \(1\)
+tv\[2\]: LDPT_GNU_LD_VERSION value 0x.*
+tv\[3\]: LDPT_LINKER_OUTPUT value 0x1 \(1\)
+tv\[4\]: LDPT_OUTPUT_NAME 'tmpdir/main.x'
+tv\[5\]: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
+tv\[6\]: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
+tv\[7\]: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
+tv\[8\]: LDPT_ADD_SYMBOLS func@0x.*
+tv\[9\]: LDPT_GET_INPUT_FILE func@0x.*
+tv\[10\]: LDPT_RELEASE_INPUT_FILE func@0x.*
+tv\[11\]: LDPT_GET_SYMBOLS func@0x.*
+tv\[12\]: LDPT_ADD_INPUT_FILE func@0x.*
+tv\[13\]: LDPT_ADD_INPUT_LIBRARY func@0x.*
+tv\[14\]: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
+tv\[15\]: LDPT_OPTION 'registerclaimfile'
+tv\[16\]: LDPT_OPTION 'registerallsymbolsread'
+tv\[17\]: LDPT_OPTION 'registercleanup'
+tv\[18\]: LDPT_OPTION 'claim:tmpdir/func.o'
+tv\[19\]: LDPT_NULL value 0x0 \(0\)
+#...
+hook called: claim_file tmpdir/main.o \[@0/.* not claimed
+hook called: claim_file tmpdir/func.o \[@0/.* CLAIMED
+hook called: claim_file tmpdir/text.o \[@0/.* not claimed
+#...
+hook called: all symbols read.
+tmpdir/main.o: In function `main':
+.*ld/testsuite/ld-plugin/main.c:12: undefined reference to `func'
+hook called: cleanup.
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-plugin/plugin-7.d b/binutils-2.21/ld/testsuite/ld-plugin/plugin-7.d
new file mode 100644
index 0000000..75f25e0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-plugin/plugin-7.d
@@ -0,0 +1,30 @@
+Hello from testplugin.
+tv\[0\]: LDPT_MESSAGE func@0x.*
+tv\[1\]: LDPT_API_VERSION value 0x1 \(1\)
+tv\[2\]: LDPT_GNU_LD_VERSION value 0x.*
+tv\[3\]: LDPT_LINKER_OUTPUT value 0x1 \(1\)
+tv\[4\]: LDPT_OUTPUT_NAME 'tmpdir/main.x'
+tv\[5\]: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
+tv\[6\]: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
+tv\[7\]: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
+tv\[8\]: LDPT_ADD_SYMBOLS func@0x.*
+tv\[9\]: LDPT_GET_INPUT_FILE func@0x.*
+tv\[10\]: LDPT_RELEASE_INPUT_FILE func@0x.*
+tv\[11\]: LDPT_GET_SYMBOLS func@0x.*
+tv\[12\]: LDPT_ADD_INPUT_FILE func@0x.*
+tv\[13\]: LDPT_ADD_INPUT_LIBRARY func@0x.*
+tv\[14\]: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
+tv\[15\]: LDPT_OPTION 'registerclaimfile'
+tv\[16\]: LDPT_OPTION 'registerallsymbolsread'
+tv\[17\]: LDPT_OPTION 'registercleanup'
+tv\[18\]: LDPT_OPTION 'claim:tmpdir/func.o'
+tv\[19\]: LDPT_OPTION 'sym:_?func::0:0:0'
+tv\[20\]: LDPT_NULL value 0x0 \(0\)
+#...
+hook called: claim_file tmpdir/main.o \[@0/.* not claimed
+hook called: claim_file tmpdir/func.o \[@0/.* CLAIMED
+hook called: claim_file tmpdir/text.o \[@0/.* not claimed
+#...
+hook called: all symbols read.
+hook called: cleanup.
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-plugin/plugin-8.d b/binutils-2.21/ld/testsuite/ld-plugin/plugin-8.d
new file mode 100644
index 0000000..e72b039
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-plugin/plugin-8.d
@@ -0,0 +1,34 @@
+Hello from testplugin.
+tv\[0\]: LDPT_MESSAGE func@0x.*
+tv\[1\]: LDPT_API_VERSION value 0x1 \(1\)
+tv\[2\]: LDPT_GNU_LD_VERSION value 0x.*
+tv\[3\]: LDPT_LINKER_OUTPUT value 0x1 \(1\)
+tv\[4\]: LDPT_OUTPUT_NAME 'tmpdir/main.x'
+tv\[5\]: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
+tv\[6\]: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
+tv\[7\]: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
+tv\[8\]: LDPT_ADD_SYMBOLS func@0x.*
+tv\[9\]: LDPT_GET_INPUT_FILE func@0x.*
+tv\[10\]: LDPT_RELEASE_INPUT_FILE func@0x.*
+tv\[11\]: LDPT_GET_SYMBOLS func@0x.*
+tv\[12\]: LDPT_ADD_INPUT_FILE func@0x.*
+tv\[13\]: LDPT_ADD_INPUT_LIBRARY func@0x.*
+tv\[14\]: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
+tv\[15\]: LDPT_OPTION 'registerclaimfile'
+tv\[16\]: LDPT_OPTION 'registerallsymbolsread'
+tv\[17\]: LDPT_OPTION 'registercleanup'
+tv\[18\]: LDPT_OPTION 'claim:tmpdir/func.o'
+tv\[19\]: LDPT_OPTION 'sym:_?func::0:0:0'
+tv\[20\]: LDPT_OPTION 'sym:_?func2::0:0:0'
+tv\[21\]: LDPT_OPTION 'dumpresolutions'
+tv\[22\]: LDPT_NULL value 0x0 \(0\)
+#...
+hook called: claim_file tmpdir/main.o \[@0/.* not claimed
+hook called: claim_file tmpdir/func.o \[@0/.* CLAIMED
+hook called: claim_file tmpdir/text.o \[@0/.* not claimed
+#...
+hook called: all symbols read.
+Sym: '_?func' Resolution: LDPR_PREVAILING_DEF
+Sym: '_?func2' Resolution: LDPR_PREVAILING_DEF_IRONLY
+hook called: cleanup.
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-plugin/plugin-9.d b/binutils-2.21/ld/testsuite/ld-plugin/plugin-9.d
new file mode 100644
index 0000000..b74f4a6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-plugin/plugin-9.d
@@ -0,0 +1,35 @@
+Hello from testplugin.
+tv\[0\]: LDPT_MESSAGE func@0x.*
+tv\[1\]: LDPT_API_VERSION value 0x1 \(1\)
+tv\[2\]: LDPT_GNU_LD_VERSION value 0x.*
+tv\[3\]: LDPT_LINKER_OUTPUT value 0x1 \(1\)
+tv\[4\]: LDPT_OUTPUT_NAME 'tmpdir/main.x'
+tv\[5\]: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
+tv\[6\]: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
+tv\[7\]: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
+tv\[8\]: LDPT_ADD_SYMBOLS func@0x.*
+tv\[9\]: LDPT_GET_INPUT_FILE func@0x.*
+tv\[10\]: LDPT_RELEASE_INPUT_FILE func@0x.*
+tv\[11\]: LDPT_GET_SYMBOLS func@0x.*
+tv\[12\]: LDPT_ADD_INPUT_FILE func@0x.*
+tv\[13\]: LDPT_ADD_INPUT_LIBRARY func@0x.*
+tv\[14\]: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
+tv\[15\]: LDPT_OPTION 'registerclaimfile'
+tv\[16\]: LDPT_OPTION 'registerallsymbolsread'
+tv\[17\]: LDPT_OPTION 'registercleanup'
+tv\[18\]: LDPT_OPTION 'claim:tmpdir/func.o'
+tv\[19\]: LDPT_OPTION 'sym:_?func::0:0:0'
+tv\[20\]: LDPT_OPTION 'sym:_?func2::0:0:0'
+tv\[21\]: LDPT_OPTION 'dumpresolutions'
+tv\[22\]: LDPT_OPTION 'add:tmpdir/func.o'
+tv\[23\]: LDPT_NULL value 0x0 \(0\)
+#...
+hook called: claim_file tmpdir/main.o \[@0/.* not claimed
+hook called: claim_file tmpdir/func.o \[@0/.* CLAIMED
+hook called: claim_file tmpdir/text.o \[@0/.* not claimed
+#...
+hook called: all symbols read.
+Sym: '_?func' Resolution: LDPR_PREVAILING_DEF
+Sym: '_?func2' Resolution: LDPR_PREVAILING_DEF_IRONLY
+hook called: cleanup.
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-plugin/plugin-ignore.d b/binutils-2.21/ld/testsuite/ld-plugin/plugin-ignore.d
new file mode 100644
index 0000000..875ac51
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-plugin/plugin-ignore.d
@@ -0,0 +1 @@
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-plugin/plugin-vis-1.d b/binutils-2.21/ld/testsuite/ld-plugin/plugin-vis-1.d
new file mode 100644
index 0000000..41f4971
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-plugin/plugin-vis-1.d
@@ -0,0 +1,9 @@
+#...
+.*(PROTECTED.*func3|DEFAULT.*func|HIDDEN.*func2|INTERNAL.*func1)
+#...
+.*(PROTECTED.*func3|DEFAULT.*func|HIDDEN.*func2|INTERNAL.*func1)
+#...
+.*(PROTECTED.*func3|DEFAULT.*func|HIDDEN.*func2|INTERNAL.*func1)
+#...
+.*(PROTECTED.*func3|DEFAULT.*func|HIDDEN.*func2|INTERNAL.*func1)
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-plugin/plugin.exp b/binutils-2.21/ld/testsuite/ld-plugin/plugin.exp
new file mode 100644
index 0000000..710e991
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-plugin/plugin.exp
@@ -0,0 +1,193 @@
+# Expect script for ld-plugin tests
+# Copyright 2010
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+# These tests require the plugin API to be configured in.
+if ![check_plugin_api_available] {
+ return
+}
+
+# And a compiler to be available.
+set can_compile 1
+set failure_kind "unresolved"
+if { [which $CC] == 0 } {
+ # Don't fail immediately,
+ set can_compile 0
+ set failure_kind "unsupported"
+}
+
+pass "plugin API enabled"
+
+global base_dir
+
+# Look for the name we can dlopen in the test plugin's libtool control script.
+set plugin_name [file_contents "$base_dir/libldtestplug.la"]
+set plugin_name [regsub "'.*" [regsub ".*dlname='" "$plugin_name" ""] ""]
+verbose "plugin name is '$plugin_name'"
+
+# Use libtool to find full path to plugin rather than worrying
+# about run paths or anything like that.
+catch "exec $base_dir/libtool --config" lt_config
+verbose "Full lt config: $lt_config" 3
+# Look for "objdir=.libs"
+regexp -line "^objdir=.*$" "$lt_config" lt_objdir
+verbose "lt_objdir line is '$lt_objdir'" 3
+set lt_objdir [regsub "objdir=" "$lt_objdir" ""]
+set plugin_path "$base_dir/$lt_objdir/$plugin_name"
+verbose "Full plugin path $plugin_path" 2
+
+set regclm "-plugin-opt registerclaimfile"
+set regas "-plugin-opt registerallsymbolsread"
+set regcln "-plugin-opt registercleanup"
+
+# In order to define symbols in plugin options in the list of tests below,
+# we need to know if the platform prepends an underscore to C symbols,
+# which we find out by compiling the test objects now. If there is any
+# error compiling, we defer reporting it until after the list of tests has
+# been initialised, so that we can use the names in the list to report;
+# otherwise, we scan one of the files with 'nm' and look for a known symbol
+# in the output to see if it is prefixed or not.
+set failed_compile 0
+set _ ""
+set plugin_nm_output ""
+if { $can_compile && \
+ (![ld_compile "$CC $CFLAGS" $srcdir/$subdir/main.c tmpdir/main.o] \
+ || ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/func.c tmpdir/func.o] \
+ || ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/text.c tmpdir/text.o]) } {
+ # Defer fail until we have list of tests set.
+ set failed_compile 1
+}
+
+if { $can_compile && !$failed_compile } {
+ # Find out if symbols have prefix on this platform before setting tests.
+ catch "exec $NM tmpdir/func.o" plugin_nm_output
+ if { [regexp "_func" "$plugin_nm_output"] } {
+ set _ "_"
+ }
+}
+
+set testobjfiles "tmpdir/main.o tmpdir/func.o tmpdir/text.o"
+set testobjfiles_notext "tmpdir/main.o tmpdir/func.o"
+# Rather than having libs we just define dummy values for anything
+# we may need to link a target exe; we aren't going to run it anyway.
+set libs "[ld_simple_link_defsyms] --defsym ${_}printf=0 --defsym ${_}puts=0"
+
+set plugin_tests [list \
+ [list "load plugin" "-plugin $plugin_path \
+ $testobjfiles $libs" "" "" {{ld plugin-1.d}} "main.x" ] \
+ [list "fail plugin onload" "-plugin $plugin_path -plugin-opt failonload \
+ $testobjfiles $libs" "" "" {{ld plugin-2.d}} "main.x" ] \
+ [list "fail plugin allsymbolsread" "-plugin $plugin_path $regas \
+ -plugin-opt failallsymbolsread \
+ $testobjfiles $libs" "" "" {{ld plugin-3.d}} "main.x" ] \
+ [list "fail plugin cleanup" "-plugin $plugin_path -plugin-opt failcleanup \
+ $regcln \
+ $testobjfiles $libs" "" "" {{ld plugin-4.d}} "main.x" ] \
+ [list "plugin all hooks" "-plugin $plugin_path $regclm $regas $regcln \
+ $testobjfiles $libs" "" "" {{ld plugin-5.d}} "main.x" ] \
+ [list "plugin claimfile lost symbol" "-plugin $plugin_path $regclm \
+ $regas $regcln -plugin-opt claim:tmpdir/func.o \
+ $testobjfiles $libs" "" "" {{ld plugin-6.d}} "main.x" ] \
+ [list "plugin claimfile replace symbol" "-plugin $plugin_path $regclm \
+ $regas $regcln -plugin-opt claim:tmpdir/func.o \
+ -plugin-opt sym:${_}func::0:0:0 \
+ $testobjfiles $libs" "" "" {{ld plugin-7.d}} "main.x" ] \
+ [list "plugin claimfile resolve symbol" "-plugin $plugin_path $regclm \
+ $regas $regcln -plugin-opt claim:tmpdir/func.o \
+ -plugin-opt sym:${_}func::0:0:0 \
+ -plugin-opt sym:${_}func2::0:0:0 \
+ -plugin-opt dumpresolutions \
+ $testobjfiles $libs" "" "" {{ld plugin-8.d}} "main.x" ] \
+ [list "plugin claimfile replace file" "-plugin $plugin_path $regclm \
+ $regas $regcln -plugin-opt claim:tmpdir/func.o \
+ -plugin-opt sym:${_}func::0:0:0 \
+ -plugin-opt sym:${_}func2::0:0:0 \
+ -plugin-opt dumpresolutions \
+ -plugin-opt add:tmpdir/func.o \
+ $testobjfiles $libs" "" "" {{ld plugin-9.d}} "main.x" ] \
+]
+
+set plugin_lib_tests [list \
+ [list "plugin ignore lib" "-plugin $plugin_path $regclm \
+ $regas $regcln -plugin-opt claim:tmpdir/func.o \
+ -plugin-opt sym:${_}func::0:0:0 \
+ -plugin-opt sym:${_}func2::0:0:0 \
+ -plugin-opt dumpresolutions \
+ -plugin-opt add:tmpdir/func.o \
+ $testobjfiles_notext -Ltmpdir -ltext $libs" "" "" {{ld plugin-10.d}} "main.x" ] \
+ [list "plugin claimfile replace lib" "-plugin $plugin_path $regclm \
+ $regas $regcln -plugin-opt claim:tmpdir/func.o \
+ -plugin-opt sym:${_}func::0:0:0 \
+ -plugin-opt sym:${_}func2::0:0:0 \
+ -plugin-opt dumpresolutions \
+ -plugin-opt add:tmpdir/func.o \
+ -plugin-opt claim:tmpdir/libtext.a \
+ -plugin-opt sym:${_}text::0:0:0 \
+ -plugin-opt add:tmpdir/text.o \
+ $testobjfiles_notext -Ltmpdir -ltext $libs" "" "" {{ld plugin-11.d}} "main.x" ] \
+]
+
+set plugin_extra_elf_tests [list \
+ [list "plugin set symbol visibility" "-plugin $plugin_path $regclm \
+ $regas $regcln -plugin-opt claim:tmpdir/func.o \
+ -plugin-opt sym:${_}func::0:0:0 \
+ -plugin-opt sym:${_}func1::0:1:0 \
+ -plugin-opt sym:${_}func2::0:2:0 \
+ -plugin-opt sym:${_}func3::0:3:0 \
+ -plugin-opt dumpresolutions \
+ $testobjfiles $libs" "" "" {{ld plugin-ignore.d} \
+ {readelf -s plugin-vis-1.d}} "main.x" ] \
+]
+
+# TODO(simonb): Plugin tests attempt to use ld-new to link a test program,
+# but on powerpc platforms the link command these tests generate results
+# in spurious errors and warnings from ld-new that cause the tests to fail.
+# For the moment, XFAIL these tests on powerpc by unsetting can_compile so
+# that we enter the error handling loop below.
+if { [istarget "powerpc*-*-*"] } {
+ set can_compile 0
+ set failure_kind "xfail"
+}
+
+if { !$can_compile || $failed_compile } {
+ foreach testitem $plugin_tests {
+ $failure_kind [lindex $testitem 0]
+ }
+ if { [is_elf_format] } {
+ foreach testitem $plugin_extra_elf_tests {
+ $failure_kind [lindex $testitem 0]
+ }
+ }
+ return
+}
+
+run_ld_link_tests $plugin_tests
+
+if { [is_elf_format] } {
+ run_ld_link_tests $plugin_extra_elf_tests
+}
+
+if ![ar_simple_create $ar "" "tmpdir/libtext.a" "tmpdir/text.o"] {
+ foreach testitem $plugin_lib_tests {
+ unresolved [lindex $testitem 0]
+ }
+} else {
+ run_ld_link_tests $plugin_lib_tests
+}
diff --git a/binutils-2.21/ld/testsuite/ld-plugin/text.c b/binutils-2.21/ld/testsuite/ld-plugin/text.c
new file mode 100644
index 0000000..6d02114
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-plugin/text.c
@@ -0,0 +1,3 @@
+
+const char *text = "Hello world!\n";
+
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-branch-1.dd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-branch-1.dd
new file mode 100644
index 0000000..6bfd136
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-branch-1.dd
@@ -0,0 +1,14 @@
+
+.*
+
+
+Disassembly of section \.text:
+
+0*10000000 <foo>:
+ *10000000:.* bla * 144d000 <.*>
+ *10000004:.* l(wz|) * r1,80\(r1\)
+ *10000008:.* bla * 1451000 <.*>
+ *1000000c:.* (oril * r0,r0,0|nop)
+ *10000010:.* bla * 1452800 <.*>
+ *10000014:.* (oril * r0,r0,0|nop)
+ *10000018:.* bla * 1450000 <.*>
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-branch-1.ex b/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-branch-1.ex
new file mode 100644
index 0000000..257cc56
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-branch-1.ex
@@ -0,0 +1 @@
+foo
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-branch-1.im b/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-branch-1.im
new file mode 100644
index 0000000..0efbfc9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-branch-1.im
@@ -0,0 +1 @@
+bar 0x1450000
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-branch-1.nd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-branch-1.nd
new file mode 100644
index 0000000..6c5022a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-branch-1.nd
@@ -0,0 +1,3 @@
+0*01450000 C bar
+0*10000000 t foo
+0*10000000 T foo
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-branch-1.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-branch-1.s
new file mode 100644
index 0000000..82c322f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-branch-1.s
@@ -0,0 +1,14 @@
+ .globl foo
+ .csect foo[PR]
+foo:
+ bl bar - 0x3000
+ lwz 1,80(1)
+ bl bar + 0x1000
+ .ifeq size - 32
+ lwz 2,20(1)
+ .else
+ ld 2,40(1)
+ .endif
+ bl bar + 0x2800
+ nop
+ bl bar
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-reloc-1.ex b/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-reloc-1.ex
new file mode 100644
index 0000000..257cc56
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-reloc-1.ex
@@ -0,0 +1 @@
+foo
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-reloc-1.im b/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-reloc-1.im
new file mode 100644
index 0000000..66f78a4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-reloc-1.im
@@ -0,0 +1 @@
+bar 0xdeadbeef
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-reloc-1.nd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-reloc-1.nd
new file mode 100644
index 0000000..003c796
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-reloc-1.nd
@@ -0,0 +1,3 @@
+0*deadbeef C bar
+0*10000000 d foo
+0*10000000 D foo
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-reloc-1.od b/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-reloc-1.od
new file mode 100644
index 0000000..db65b4b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-reloc-1.od
@@ -0,0 +1,7 @@
+
+.*
+
+DYNAMIC RELOCATION RECORDS \(none\)
+
+Contents of section \.data:
+ 10000000 deadbeef .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-reloc-1.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-reloc-1.s
new file mode 100644
index 0000000..5eb3980
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-abs-reloc-1.s
@@ -0,0 +1,4 @@
+ .globl foo
+ .csect foo[RW]
+foo:
+ .long bar
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-1.ex b/binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-1.ex
new file mode 100644
index 0000000..257cc56
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-1.ex
@@ -0,0 +1 @@
+foo
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-1.hd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-1.hd
new file mode 100644
index 0000000..19d09e4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-1.hd
@@ -0,0 +1,11 @@
+#...
+Sections:
+.*
+ * 0 * \.text * 0+8 .*
+ * CONTENTS, ALLOC, LOAD, CODE
+ * 1 * \.data * 0+0 .*
+ * ALLOC, LOAD, DATA
+ * 2 * \.bss * 0+0 .*
+ * ALLOC
+ * 3 * \.loader .*
+ * CONTENTS, ALLOC, LOAD
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-1.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-1.s
new file mode 100644
index 0000000..edb4669
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-1.s
@@ -0,0 +1,5 @@
+ .globl foo
+ .csect foo[RO]
+foo:
+ .long 0x12345678
+ .long 0xdeadbeef
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-2.ex b/binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-2.ex
new file mode 100644
index 0000000..257cc56
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-2.ex
@@ -0,0 +1 @@
+foo
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-2.hd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-2.hd
new file mode 100644
index 0000000..39facd8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-2.hd
@@ -0,0 +1,11 @@
+#...
+Sections:
+.*
+ * 0 * \.text * 0+0 .*
+ * ALLOC, LOAD, CODE
+ * 1 * \.data * 0+8 .*
+ * CONTENTS, ALLOC, LOAD, DATA
+ * 2 * \.bss * 0+0 .*
+ * ALLOC
+ * 3 * \.loader .*
+ * CONTENTS, ALLOC, LOAD
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-2.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-2.s
new file mode 100644
index 0000000..357796e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-2.s
@@ -0,0 +1,5 @@
+ .globl foo
+ .csect foo[RW]
+foo:
+ .long 0x12345678
+ .long 0xdeadbeef
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-3.ex b/binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-3.ex
new file mode 100644
index 0000000..257cc56
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-3.ex
@@ -0,0 +1 @@
+foo
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-3.hd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-3.hd
new file mode 100644
index 0000000..f7acc39
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-3.hd
@@ -0,0 +1,11 @@
+#...
+Sections:
+.*
+ * 0 * \.text * 0+0 .*
+ * ALLOC, LOAD, CODE
+ * 1 * \.data * 0+0 .*
+ * ALLOC, LOAD, DATA
+ * 2 * \.bss * 0+8 .*
+ * ALLOC
+ * 3 * \.loader .*
+ * CONTENTS, ALLOC, LOAD
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-3.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-3.s
new file mode 100644
index 0000000..df5293f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-core-sec-3.s
@@ -0,0 +1 @@
+ .comm foo,8
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-export-1-all.dd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-export-1-all.dd
new file mode 100644
index 0000000..90eec95
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-export-1-all.dd
@@ -0,0 +1,11 @@
+
+.*
+
+
+Disassembly of section \.data:
+
+0*10000000 <main1>:
+ *10000000: 10 00 00 04 .*
+
+0*10000004 <lib1>:
+ *10000004: 11 11 00 01 .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-export-1-full.dd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-export-1-full.dd
new file mode 100644
index 0000000..d300fa2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-export-1-full.dd
@@ -0,0 +1,21 @@
+
+.*
+
+
+Disassembly of section .data:
+
+0*10000000 <main1>:
+ *10000000: 10 00 00 08 .*
+
+0*10000004 <_main2>:
+ *10000004: 10 00 00 0c .*
+
+0*10000008 <lib1>:
+ *10000008: 11 11 00 01 .*
+
+0*1000000c <_lib2>:
+ *1000000c: 11 11 00 02 .*
+
+0*10000010 <lib3>:
+ *10000010: 11 11 00 03 .*
+ *10000014: 00 00 00 00 .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-export-1a.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-export-1a.s
new file mode 100644
index 0000000..69701e5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-export-1a.s
@@ -0,0 +1,14 @@
+ .globl lib1
+ .csect lib1[RW]
+lib1:
+ .long 0x11110001
+
+ .globl _lib2
+ .csect _lib2[RW]
+_lib2:
+ .long 0x11110002
+
+ .globl lib3
+ .csect lib3[RW]
+lib3:
+ .long 0x11110003
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-export-1b.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-export-1b.s
new file mode 100644
index 0000000..32c355d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-export-1b.s
@@ -0,0 +1,9 @@
+ .globl main1
+ .csect main1[RW]
+main1:
+ .long lib1
+
+ .globl _main2
+ .csect _main2[RW]
+_main2:
+ .long _lib2
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-export-2.nd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-export-2.nd
new file mode 100644
index 0000000..6f97433
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-export-2.nd
@@ -0,0 +1 @@
+0*10000000 B x
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-export-2.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-export-2.s
new file mode 100644
index 0000000..f720635
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-export-2.s
@@ -0,0 +1 @@
+ .comm x,4
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-gc-1-32.dd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-gc-1-32.dd
new file mode 100644
index 0000000..324b298
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-gc-1-32.dd
@@ -0,0 +1,67 @@
+
+.*
+
+
+Disassembly of section \.text:
+
+10000000 <\.init_function>:
+10000000: 80 22 00 00 l r1,0\(r2\)
+
+10000004 <\.fini_function>:
+10000004: 80 22 00 04 l r1,4\(r2\)
+
+10000008 <\.exported_global>:
+10000008: 48 00 00 09 bl 10000010 <\.indirect2>
+
+1000000c <\.indirect1>:
+1000000c: 81 08 00 04 l r8,4\(r8\)
+
+10000010 <\.indirect2>:
+10000010: 81 08 00 08 l r8,8\(r8\)
+
+10000014 <\.indirect3>:
+10000014: 81 08 00 0c l r8,12\(r8\)
+
+Disassembly of section \.data:
+
+20000000 <block>:
+# Pointer to indirect3.
+20000000: 20 00 00 98 .*
+20000004: 11 22 33 44 .*
+
+20000008 <__rtinit>:
+#...
+
+20000068 <exported_global>:
+20000068: 10 00 00 08 .*
+2000006c: 20 00 00 a4 .*
+20000070: 00 00 00 00 .*
+
+20000074 <init_function>:
+20000074: 10 00 00 00 .*
+20000078: 20 00 00 a4 .*
+2000007c: 00 00 00 00 .*
+
+20000080 <indirect1>:
+20000080: 10 00 00 0c .*
+20000084: 20 00 00 a4 .*
+20000088: 00 00 00 00 .*
+
+2000008c <fini_function>:
+2000008c: 10 00 00 04 .*
+20000090: 20 00 00 a4 .*
+20000094: 00 00 00 00 .*
+
+20000098 <indirect3>:
+20000098: 10 00 00 14 .*
+2000009c: 20 00 00 a4 .*
+200000a0: 00 00 00 00 .*
+
+200000a4 <TOC>:
+# TOC entry for indirect1.
+200000a4: 20 00 00 80 .*
+
+200000a8 <block>:
+# TOC entry for block.
+200000a8: 20 00 00 00 .*
+200000ac: 00 00 00 00 .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-gc-1-64.dd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-gc-1-64.dd
new file mode 100644
index 0000000..00e9a88
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-gc-1-64.dd
@@ -0,0 +1,81 @@
+
+.*
+
+
+Disassembly of section \.text:
+
+0000000010000000 <\.init_function>:
+ 10000000: e8 22 00 00 ld r1,0\(r2\)
+
+0000000010000004 <\.fini_function>:
+ 10000004: e8 22 00 08 ld r1,8\(r2\)
+
+0000000010000008 <\.exported_global>:
+ 10000008: 48 00 00 09 bl 10000010 <\.indirect2>
+
+000000001000000c <\.indirect1>:
+ 1000000c: 81 08 00 04 lwz r8,4\(r8\)
+
+0000000010000010 <\.indirect2>:
+ 10000010: 81 08 00 08 lwz r8,8\(r8\)
+
+0000000010000014 <\.indirect3>:
+ 10000014: 81 08 00 0c lwz r8,12\(r8\)
+
+Disassembly of section \.data:
+
+0000000020000000 <block>:
+# Pointer to indirect3.
+ 20000000: 20 00 00 e0 .*
+ 20000004: 11 22 33 44 .*
+
+0000000020000008 <__rtinit>:
+#...
+
+0000000020000080 <exported_global>:
+ 20000080: 00 00 00 00 .*
+ 20000084: 10 00 00 08 .*
+ 20000088: 00 00 00 00 .*
+ 2000008c: 20 00 00 f8 .*
+ 20000090: 00 00 00 00 .*
+ 20000094: 00 00 00 00 .*
+
+0000000020000098 <init_function>:
+ 20000098: 00 00 00 00 .*
+ 2000009c: 10 00 00 00 .*
+ 200000a0: 00 00 00 00 .*
+ 200000a4: 20 00 00 f8 .*
+ 200000a8: 00 00 00 00 .*
+ 200000ac: 00 00 00 00 .*
+
+00000000200000b0 <indirect1>:
+ 200000b0: 00 00 00 00 .*
+ 200000b4: 10 00 00 0c .*
+ 200000b8: 00 00 00 00 .*
+ 200000bc: 20 00 00 f8 .*
+ 200000c0: 00 00 00 00 .*
+ 200000c4: 00 00 00 00 .*
+
+00000000200000c8 <fini_function>:
+ 200000c8: 00 00 00 00 .*
+ 200000cc: 10 00 00 04 .*
+ 200000d0: 00 00 00 00 .*
+ 200000d4: 20 00 00 f8 .*
+ 200000d8: 00 00 00 00 .*
+ 200000dc: 00 00 00 00 .*
+
+00000000200000e0 <indirect3>:
+ 200000e0: 00 00 00 00 .*
+ 200000e4: 10 00 00 14 .*
+ 200000e8: 00 00 00 00 .*
+ 200000ec: 20 00 00 f8 .*
+ 200000f0: 00 00 00 00 .*
+ 200000f4: 00 00 00 00 .*
+
+00000000200000f8 <TOC>:
+ 200000f8: 00 00 00 00 .*
+ 200000fc: 20 00 00 b0 .*
+
+0000000020000100 <block>:
+ 20000100: 00 00 00 00 .*
+ 20000104: 20 00 00 00 .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-gc-1.ex b/binutils-2.21/ld/testsuite/ld-powerpc/aix-gc-1.ex
new file mode 100644
index 0000000..c7a82ec
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-gc-1.ex
@@ -0,0 +1 @@
+exported_global
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-gc-1.nd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-gc-1.nd
new file mode 100644
index 0000000..f399646
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-gc-1.nd
@@ -0,0 +1,3 @@
+#...
+0*20000008 d __rtinit
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-gc-1.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-gc-1.s
new file mode 100644
index 0000000..821fd5c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-gc-1.s
@@ -0,0 +1,55 @@
+ .macro loadtoc,sym
+ .if size == 32
+ lwz 1,\sym(2)
+ .else
+ ld 1,\sym(2)
+ .endif
+ .endm
+
+ .toc
+LC01: .tc indirect1[TC],indirect1[RW]
+LC02: .tc block[TC],block[RW]
+
+ .csect .unused_local[PR]
+.unused_local:
+ bl .unused_global
+
+ .globl .init_function
+ .csect .init_function[PR]
+.init_function:
+ loadtoc LC01
+
+ .globl .fini_function
+ .csect .fini_function[PR]
+.fini_function:
+ loadtoc LC02
+
+ .globl .unused_global
+ .csect .unused_global[PR]
+.unused_global:
+ bl .unused_local
+
+ .globl .exported_global
+ .csect .exported_global[PR]
+.exported_global:
+ bl .indirect2
+
+ .globl .indirect1
+ .csect .indirect1[PR]
+.indirect1:
+ lwz 8,4(8)
+
+ .csect .indirect2[PR]
+.indirect2:
+ lwz 8,8(8)
+
+ .globl .indirect3
+ .csect .indirect3[PR]
+.indirect3:
+ lwz 8,12(8)
+
+ .globl block
+ .csect block[RW]
+block:
+ .long indirect3
+ .long 0x11223344
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-1-32.d b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-1-32.d
new file mode 100644
index 0000000..129845f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-1-32.d
@@ -0,0 +1,5 @@
+#name: Glink test 1 (error) (32-bit)
+#source: aix-glink-1.s
+#as: -a32
+#ld: -b32 -bM:SRE -bnogc
+#error: undefined reference to `\.ext'
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-1-32.dd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-1-32.dd
new file mode 100644
index 0000000..33cf812
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-1-32.dd
@@ -0,0 +1,44 @@
+
+.*
+
+
+Disassembly of section \.text:
+
+10000000 <\.f1>:
+10000000: 4e 80 00 20 br
+
+10000004 <\.f2>:
+10000004: 48 00 00 05 bl 10000008 <\.f3>
+
+10000008 <\.f3>:
+10000008: 4e 80 00 20 br
+
+1000000c <\.ext>:
+1000000c: 81 82 00 00 l r12,0\(r2\)
+10000010: 90 41 00 14 st r2,20\(r1\)
+10000014: 80 0c 00 00 l r0,0\(r12\)
+10000018: 80 4c 00 04 l r2,4\(r12\)
+1000001c: 7c 09 03 a6 mtctr r0
+10000020: 4e 80 04 20 bctr
+10000024: 00 00 00 00 \.long 0x0
+10000028: 00 0c 80 00 \.long 0xc8000
+1000002c: 00 00 00 00 \.long 0x0
+
+Disassembly of section \.data:
+
+20000000 <foo>:
+20000000: 20 00 00 08 .*
+20000004: 10 00 00 0c .*
+
+20000008 <f1>:
+20000008: 10 00 00 00 .*
+2000000c: 20 00 00 20 .*
+20000010: 00 00 00 00 .*
+
+20000014 <f2>:
+20000014: 10 00 00 04 .*
+20000018: 20 00 00 20 .*
+2000001c: 00 00 00 00 .*
+
+20000020 <TOC>:
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-1-64.d b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-1-64.d
new file mode 100644
index 0000000..b8ee35f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-1-64.d
@@ -0,0 +1,5 @@
+#name: Glink test 1 (error) (64-bit)
+#source: aix-glink-1.s
+#as: -a64
+#ld: -b64 -bM:SRE -bnogc
+#error: undefined reference to `\.ext'
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-1-64.dd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-1-64.dd
new file mode 100644
index 0000000..b5a557c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-1-64.dd
@@ -0,0 +1,49 @@
+
+.*
+
+
+Disassembly of section \.text:
+
+0000000010000000 <\.f1>:
+ 10000000: 4e 80 00 20 blr
+
+0000000010000004 <\.f2>:
+ 10000004: 48 00 00 05 bl 10000008 <\.f3>
+
+0000000010000008 <\.f3>:
+ 10000008: 4e 80 00 20 blr
+
+000000001000000c <\.ext>:
+ 1000000c: e9 82 00 00 ld r12,0\(r2\)
+ 10000010: f8 41 00 28 std r2,40\(r1\)
+ 10000014: e8 0c 00 00 ld r0,0\(r12\)
+ 10000018: e8 4c 00 08 ld r2,8\(r12\)
+ 1000001c: 7c 09 03 a6 mtctr r0
+ 10000020: 4e 80 04 20 bctr
+ 10000024: 00 00 00 00 \.long 0x0
+ 10000028: 00 0c a0 00 \.long 0xca000
+ 1000002c: 00 00 00 00 \.long 0x0
+ 10000030: 00 00 00 18 \.long 0x18
+
+Disassembly of section \.data:
+
+0000000020000000 <foo>:
+ 20000000: 20 00 00 08 .*
+ 20000004: 10 00 00 0c .*
+
+0000000020000008 <f1>:
+ 20000008: 00 00 00 00 .*
+ 2000000c: 10 00 00 00 .*
+ 20000010: 00 00 00 00 .*
+ 20000014: 20 00 00 38 .*
+ \.\.\.
+
+0000000020000020 <f2>:
+ 20000020: 00 00 00 00 .*
+ 20000024: 10 00 00 04 .*
+ 20000028: 00 00 00 00 .*
+ 2000002c: 20 00 00 38 .*
+ \.\.\.
+
+0000000020000038 <TOC>:
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-1.ex b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-1.ex
new file mode 100644
index 0000000..643cdf3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-1.ex
@@ -0,0 +1,2 @@
+f2
+foo
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-1.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-1.s
new file mode 100644
index 0000000..f7901b2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-1.s
@@ -0,0 +1,21 @@
+ .toc
+ .globl .f1
+ .csect .f1[PR]
+.f1:
+ blr
+
+ .globl .f2
+ .csect .f2[PR]
+.f2:
+ bl .f3
+
+ .globl .f3
+ .csect .f3[PR]
+.f3:
+ blr
+
+ .globl foo
+ .csect foo[RW]
+foo:
+ .long f1
+ .long .ext
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2-32.dd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2-32.dd
new file mode 100644
index 0000000..2c91d23
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2-32.dd
@@ -0,0 +1,69 @@
+
+tmpdir/aix-glink-2: file format aixcoff-rs6000
+
+
+Disassembly of section \.text:
+
+10000000 <\.b1>:
+10000000: 60 00 00 00 oril r0,r0,0
+
+10000004 <\.b2>:
+10000004: 60 00 00 00 oril r0,r0,0
+
+10000008 <\.b3>:
+10000008: 60 00 00 00 oril r0,r0,0
+
+1000000c <\.main>:
+1000000c: 48 00 f1 03 bla f100 <.*>
+10000010: 48 00 00 21 bl 10000030 <\.a2>
+10000014: 48 00 00 41 bl 10000054 <\.a3>
+10000018: 4b ff ff e9 bl 10000000 <\.b1>
+1000001c: 4b ff ff e9 bl 10000004 <\.b2>
+10000020: 4b ff ff e9 bl 10000008 <\.b3>
+10000024: 48 00 f5 03 bla f500 <.*>
+10000028: 48 00 00 51 bl 10000078 <\.c2>
+1000002c: 48 00 00 71 bl 1000009c <\.c3>
+
+10000030 <\.a2>:
+10000030: 81 82 00 00 l r12,0\(r2\)
+10000034: 90 41 00 14 st r2,20\(r1\)
+10000038: 80 0c 00 00 l r0,0\(r12\)
+1000003c: 80 4c 00 04 l r2,4\(r12\)
+10000040: 7c 09 03 a6 mtctr r0
+10000044: 4e 80 04 20 bctr
+10000048: 00 00 00 00 \.long 0x0
+1000004c: 00 0c 80 00 \.long 0xc8000
+10000050: 00 00 00 00 \.long 0x0
+
+10000054 <\.a3>:
+10000054: 81 82 00 04 l r12,4\(r2\)
+10000058: 90 41 00 14 st r2,20\(r1\)
+1000005c: 80 0c 00 00 l r0,0\(r12\)
+10000060: 80 4c 00 04 l r2,4\(r12\)
+10000064: 7c 09 03 a6 mtctr r0
+10000068: 4e 80 04 20 bctr
+1000006c: 00 00 00 00 \.long 0x0
+10000070: 00 0c 80 00 \.long 0xc8000
+10000074: 00 00 00 00 \.long 0x0
+
+10000078 <\.c2>:
+10000078: 81 82 00 08 l r12,8\(r2\)
+1000007c: 90 41 00 14 st r2,20\(r1\)
+10000080: 80 0c 00 00 l r0,0\(r12\)
+10000084: 80 4c 00 04 l r2,4\(r12\)
+10000088: 7c 09 03 a6 mtctr r0
+1000008c: 4e 80 04 20 bctr
+10000090: 00 00 00 00 \.long 0x0
+10000094: 00 0c 80 00 \.long 0xc8000
+10000098: 00 00 00 00 \.long 0x0
+
+1000009c <\.c3>:
+1000009c: 81 82 00 0c l r12,12\(r2\)
+100000a0: 90 41 00 14 st r2,20\(r1\)
+100000a4: 80 0c 00 00 l r0,0\(r12\)
+100000a8: 80 4c 00 04 l r2,4\(r12\)
+100000ac: 7c 09 03 a6 mtctr r0
+100000b0: 4e 80 04 20 bctr
+100000b4: 00 00 00 00 \.long 0x0
+100000b8: 00 0c 80 00 \.long 0xc8000
+100000bc: 00 00 00 00 \.long 0x0
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2-64.dd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2-64.dd
new file mode 100644
index 0000000..5a34f0a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2-64.dd
@@ -0,0 +1,73 @@
+
+tmpdir/aix64-glink-2: file format aix5coff64-rs6000
+
+
+Disassembly of section \.text:
+
+0000000010000000 <\.b1>:
+ 10000000: 60 00 00 00 nop
+
+0000000010000004 <\.b2>:
+ 10000004: 60 00 00 00 nop
+
+0000000010000008 <\.b3>:
+ 10000008: 60 00 00 00 nop
+
+000000001000000c <\.main>:
+ 1000000c: 48 00 f1 03 bla f100 <.*>
+ 10000010: 48 00 00 21 bl 10000030 <\.a2>
+ 10000014: 48 00 00 45 bl 10000058 <\.a3>
+ 10000018: 4b ff ff e9 bl 10000000 <\.b1>
+ 1000001c: 4b ff ff e9 bl 10000004 <\.b2>
+ 10000020: 4b ff ff e9 bl 10000008 <\.b3>
+ 10000024: 48 00 f5 03 bla f500 <.*>
+ 10000028: 48 00 00 59 bl 10000080 <\.c2>
+ 1000002c: 48 00 00 7d bl 100000a8 <\.c3>
+
+0000000010000030 <\.a2>:
+ 10000030: e9 82 00 00 ld r12,0\(r2\)
+ 10000034: f8 41 00 28 std r2,40\(r1\)
+ 10000038: e8 0c 00 00 ld r0,0\(r12\)
+ 1000003c: e8 4c 00 08 ld r2,8\(r12\)
+ 10000040: 7c 09 03 a6 mtctr r0
+ 10000044: 4e 80 04 20 bctr
+ 10000048: 00 00 00 00 \.long 0x0
+ 1000004c: 00 0c a0 00 \.long 0xca000
+ 10000050: 00 00 00 00 \.long 0x0
+ 10000054: 00 00 00 18 \.long 0x18
+
+0000000010000058 <\.a3>:
+ 10000058: e9 82 00 08 ld r12,8\(r2\)
+ 1000005c: f8 41 00 28 std r2,40\(r1\)
+ 10000060: e8 0c 00 00 ld r0,0\(r12\)
+ 10000064: e8 4c 00 08 ld r2,8\(r12\)
+ 10000068: 7c 09 03 a6 mtctr r0
+ 1000006c: 4e 80 04 20 bctr
+ 10000070: 00 00 00 00 \.long 0x0
+ 10000074: 00 0c a0 00 \.long 0xca000
+ 10000078: 00 00 00 00 \.long 0x0
+ 1000007c: 00 00 00 18 \.long 0x18
+
+0000000010000080 <\.c2>:
+ 10000080: e9 82 00 10 ld r12,16\(r2\)
+ 10000084: f8 41 00 28 std r2,40\(r1\)
+ 10000088: e8 0c 00 00 ld r0,0\(r12\)
+ 1000008c: e8 4c 00 08 ld r2,8\(r12\)
+ 10000090: 7c 09 03 a6 mtctr r0
+ 10000094: 4e 80 04 20 bctr
+ 10000098: 00 00 00 00 \.long 0x0
+ 1000009c: 00 0c a0 00 \.long 0xca000
+ 100000a0: 00 00 00 00 \.long 0x0
+ 100000a4: 00 00 00 18 \.long 0x18
+
+00000000100000a8 <\.c3>:
+ 100000a8: e9 82 00 18 ld r12,24\(r2\)
+ 100000ac: f8 41 00 28 std r2,40\(r1\)
+ 100000b0: e8 0c 00 00 ld r0,0\(r12\)
+ 100000b4: e8 4c 00 08 ld r2,8\(r12\)
+ 100000b8: 7c 09 03 a6 mtctr r0
+ 100000bc: 4e 80 04 20 bctr
+ 100000c0: 00 00 00 00 \.long 0x0
+ 100000c4: 00 0c a0 00 \.long 0xca000
+ 100000c8: 00 00 00 00 \.long 0x0
+ 100000cc: 00 00 00 18 \.long 0x18
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2a.ex b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2a.ex
new file mode 100644
index 0000000..406cabb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2a.ex
@@ -0,0 +1,9 @@
+a1
+a2
+a3
+b1
+b2
+b3
+c1
+c2
+c3
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2a.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2a.s
new file mode 100644
index 0000000..fafbe43
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2a.s
@@ -0,0 +1,41 @@
+ .toc
+
+ .macro defabs,type,name,value
+ \type \name
+ \name = \value
+ .endm
+
+ .macro deffun,type,name,fn
+ \type \name
+ .csect \name\()[DS]
+\name\():
+ .if size == 32
+ .long .\name\()[PR],TOC[TC0],0
+ .else
+ .llong .\name\()[PR],TOC[TC0],0
+ .endif
+
+ .globl .\name
+ .csect .\name\()[PR]
+.\name\():
+ nop
+ .endm
+
+ .macro defdata,type,name,contents
+ \type \name
+ .csect \name\()[RW]
+\name\():
+ .long \contents
+ .endm
+
+ defabs .globl,a1,0xf100
+ deffun .globl,a2
+ defdata .globl,a3,0x1100
+
+ defabs .globl,b1,0xf200
+ deffun .globl,b2
+ defdata .globl,b3,0x2200
+
+ defabs .weak,c1,0xf300
+ deffun .weak,c2
+ defdata .weak,c3,0x3300
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2b.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2b.s
new file mode 100644
index 0000000..9c06d48
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2b.s
@@ -0,0 +1,12 @@
+ .toc
+
+ .macro deffun,type,name
+ .globl .\name
+ .csect .\name\()[PR]
+.\name\():
+ nop
+ .endm
+
+ deffun .globl,b1
+ deffun .globl,b2
+ deffun .globl,b3
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2c.ex b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2c.ex
new file mode 100644
index 0000000..4e16c9b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2c.ex
@@ -0,0 +1,6 @@
+a1
+a2
+a3
+c1
+c2
+c3
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2c.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2c.s
new file mode 100644
index 0000000..7dd6dad
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2c.s
@@ -0,0 +1,33 @@
+ .toc
+
+ .macro defabs,type,name,value
+ \type \name
+ \name = \value
+ .endm
+
+ .macro deffun,type,name
+ \type \name
+ .csect \name\()[DS]
+\name\():
+ .long \name\()[PR],TOC[TC0],0
+
+ .globl .\name
+ .csect .\name\()[PR]
+.\name\():
+ nop
+ .endm
+
+ .macro defdata,type,name,contents
+ \type \name
+ .csect \name\()[RW]
+\name\():
+ .long \contents
+ .endm
+
+ defabs .globl,a1,0xf400
+ deffun .globl,a2
+ defdata .globl,a3,0x4400
+
+ defabs .globl,c1,0xf500
+ deffun .globl,c2
+ defdata .globl,c3,0x5500
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2d.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2d.s
new file mode 100644
index 0000000..ba78609
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-2d.s
@@ -0,0 +1,12 @@
+ .globl .main
+ .csect .main[PR]
+.main:
+ bl .a1
+ bl .a2
+ bl .a3
+ bl .b1
+ bl .b2
+ bl .b3
+ bl .c1
+ bl .c2
+ bl .c3
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-3-32.d b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-3-32.d
new file mode 100644
index 0000000..754789f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-3-32.d
@@ -0,0 +1,5 @@
+#name: Glink test 3 (error) (32-bit)
+#source: aix-glink-3.s
+#as: -a32
+#ld: -b32 -bnoautoimp tmpdir/aix-glink-3b.so
+#error: undefined reference to `\.g'
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-3-64.d b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-3-64.d
new file mode 100644
index 0000000..3ea6817
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-3-64.d
@@ -0,0 +1,5 @@
+#name: Glink test 3 (error) (64-bit)
+#source: aix-glink-3.s
+#as: -a64
+#ld: -b64 -bnoautoimp tmpdir/aix64-glink-3b.so
+#error: undefined reference to `\.g'
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-3.dd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-3.dd
new file mode 100644
index 0000000..b154936
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-3.dd
@@ -0,0 +1,14 @@
+
+.*
+
+
+Disassembly of section \.text:
+
+0*10000000 <\.f>:
+ *10000000: 48 00 00 05 bl 10000004 <\.g>
+
+0*10000004 <\.g>:
+ *10000004: 4e 80 00 20 bl?r
+
+0*10000008 <__start>:
+ *10000008: 4b ff ff f9 bl 10000000 <\.f>
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-3.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-3.s
new file mode 100644
index 0000000..355dcc6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-3.s
@@ -0,0 +1,5 @@
+ .extern .f
+ .globl __start
+ .csect __start[PR]
+__start:
+ bl .f
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-3a.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-3a.s
new file mode 100644
index 0000000..76aad8c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-3a.s
@@ -0,0 +1,10 @@
+ .toc
+
+ .globl .g
+ .csect .g[PR]
+.g:
+ blr
+
+ .globl g
+ .csect g[DS]
+g: .long .g,TOC[tc0],0
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-3b.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-3b.s
new file mode 100644
index 0000000..0bedb3b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-glink-3b.s
@@ -0,0 +1,11 @@
+ .toc
+
+ .extern .g
+ .globl .f
+ .csect .f[PR]
+.f:
+ bl .g
+
+ .globl f
+ .csect f[DS]
+f: .long .f,TOC[tc0],0
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-lineno-1.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-lineno-1.s
new file mode 100644
index 0000000..196e012
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-lineno-1.s
@@ -0,0 +1,25 @@
+ .file "tmpdir/aix-lineno-1.txt"
+ .csect .foo[PR]
+ .function .foo,.foo
+.foo:
+ .bf 1
+ nop
+ .line 2
+ nop
+ .line 3
+ nop
+ .line 4
+ nop
+ .line 5
+ nop
+ .ef 1
+
+ .globl .main
+ .csect .main[PR]
+ .function .main,.main
+.main:
+ .bf 7
+ bl .foo
+ .line 2
+ nop
+ .ef 7
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-lineno-1.txt b/binutils-2.21/ld/testsuite/ld-powerpc/aix-lineno-1.txt
new file mode 100644
index 0000000..0e8dc16
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-lineno-1.txt
@@ -0,0 +1,8 @@
+Four
+and
+twenty
+blackbirds
+baked
+in
+a
+pie
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-lineno-1a.dd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-lineno-1a.dd
new file mode 100644
index 0000000..72410c9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-lineno-1a.dd
@@ -0,0 +1,24 @@
+
+.*
+
+
+Disassembly of section \.text:
+
+0*10000000 <\.foo>:
+Four
+ *10000000: 60 00 00 00 (oril r0,r0,0|nop)
+and
+ *10000004: 60 00 00 00 (oril r0,r0,0|nop)
+twenty
+ *10000008: 60 00 00 00 (oril r0,r0,0|nop)
+blackbirds
+ *1000000c: 60 00 00 00 (oril r0,r0,0|nop)
+baked
+ *10000010: 60 00 00 00 (oril r0,r0,0|nop)
+
+0*10000014 <\.main>:
+in
+a
+ *10000014: 4b ff ff ed bl 10000000 <\.foo>
+pie
+ *10000018: 60 00 00 00 (oril r0,r0,0|nop)
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-lineno-1a.nd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-lineno-1a.nd
new file mode 100644
index 0000000..5e84188
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-lineno-1a.nd
@@ -0,0 +1,8 @@
+0*10000000 t \.bf
+0*10000014 t \.bf
+0*10000014 t \.ef
+0*1000001c t \.ef
+0*10000000 t \.foo
+0*10000000 t \.foo
+0*10000014 t \.main
+0*10000014 T \.main
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-lineno-1b.dd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-lineno-1b.dd
new file mode 100644
index 0000000..64c08df
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-lineno-1b.dd
@@ -0,0 +1,16 @@
+
+.*
+
+
+Disassembly of section \.text:
+
+0*10000000 <\.foo>:
+ *10000000: 60 00 00 00 (oril r0,r0,0|nop)
+ *10000004: 60 00 00 00 (oril r0,r0,0|nop)
+ *10000008: 60 00 00 00 (oril r0,r0,0|nop)
+ *1000000c: 60 00 00 00 (oril r0,r0,0|nop)
+ *10000010: 60 00 00 00 (oril r0,r0,0|nop)
+
+0*10000014 <\.main>:
+ *10000014: 4b ff ff ed bl 10000000 <\.foo>
+ *10000018: 60 00 00 00 (oril r0,r0,0|nop)
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-lineno-1b.nd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-lineno-1b.nd
new file mode 100644
index 0000000..d341470
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-lineno-1b.nd
@@ -0,0 +1,3 @@
+0*10000000 t \.foo
+0*10000014 t \.main
+0*10000014 T \.main
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1-dso.dnd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1-dso.dnd
new file mode 100644
index 0000000..1fccdeb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1-dso.dnd
@@ -0,0 +1,4 @@
+ * U foo
+0*10000000 D x
+0*10000004 D x1
+0*10000014 D x2
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1-dso.drd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1-dso.drd
new file mode 100644
index 0000000..f262feb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1-dso.drd
@@ -0,0 +1,9 @@
+
+.*
+
+DYNAMIC RELOCATION RECORDS
+OFFSET * TYPE * VALUE
+0*10000004 R_POS(|_32) * \.data
+0*10000008 R_POS(|_32) * foo
+0*10000014 R_POS(|_32) * \.data
+0*10000018 R_POS(|_32) * foo
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1-dso.nd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1-dso.nd
new file mode 100644
index 0000000..be25ff3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1-dso.nd
@@ -0,0 +1,8 @@
+ * U foo
+0*10000000 d x
+0*10000000 D x
+0*10000010 d x
+0*10000004 d x1
+0*10000004 D x1
+0*10000014 d x2
+0*10000014 D x2
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1-dso.rd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1-dso.rd
new file mode 100644
index 0000000..d17151b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1-dso.rd
@@ -0,0 +1,9 @@
+
+.*
+
+RELOCATION RECORDS FOR \[\.data\]:
+OFFSET * TYPE * VALUE
+0+04 R_POS(|_32) * x\+0xf*f0000000
+0+08 R_POS(|_32) * foo
+0+14 R_POS(|_32) * x\+0xf*effffff0
+0+18 R_POS(|_32) * foo
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1-rel.nd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1-rel.nd
new file mode 100644
index 0000000..e2bdbc4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1-rel.nd
@@ -0,0 +1,8 @@
+ + U foo
+0+00 d x
+0+00 D x
+0+10 d x
+0+04 d x1
+0+04 D x1
+0+14 d x2
+0+14 D x2
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1-rel.rd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1-rel.rd
new file mode 100644
index 0000000..436ad98
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1-rel.rd
@@ -0,0 +1,9 @@
+
+.*
+
+RELOCATION RECORDS FOR \[\.data\]:
+OFFSET * TYPE * VALUE
+0+04 R_POS(|_32) * x
+0+08 R_POS(|_32) * foo
+0+14 R_POS(|_32) * x\+0xf+0
+0+18 R_POS(|_32) * foo
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1.ex b/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1.ex
new file mode 100644
index 0000000..8f1fe4d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1.ex
@@ -0,0 +1,3 @@
+x
+x1
+x2
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1.im b/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1.im
new file mode 100644
index 0000000..257cc56
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1.im
@@ -0,0 +1 @@
+foo
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1a.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1a.s
new file mode 100644
index 0000000..3138670
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1a.s
@@ -0,0 +1,9 @@
+ .globl x
+ .csect x[RW]
+x:
+ .long 4
+ .globl x1
+ .csect x1[RW]
+x1:
+ .long x
+ .long foo
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1b.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1b.s
new file mode 100644
index 0000000..c5fcf38
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-no-dup-syms-1b.s
@@ -0,0 +1,9 @@
+ .globl x
+ .csect x[RW]
+x:
+ .long 8
+ .globl x2
+ .csect x2[RW]
+x2:
+ .long x
+ .long foo
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-ref-1-32.od b/binutils-2.21/ld/testsuite/ld-powerpc/aix-ref-1-32.od
new file mode 100644
index 0000000..1ba90ec
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-ref-1-32.od
@@ -0,0 +1,30 @@
+
+.*
+
+
+Disassembly of section \.text:
+
+.* <foo1>:
+.*: 60 00 00 00 oril r0,r0,0
+ .*: R_REF foo2\+.*
+.*: 80 22 00 00 l r1,0\(r2\)
+ .*: R_TOC stuff\+.*
+.*: 4e 80 00 20 br
+
+.* <foo2>:
+.*: 60 00 00 00 oril r0,r0,0
+ .*: R_REF foo6\+.*
+ .*: R_REF foo4\+.*
+.*: 80 22 00 00 l r1,0\(r2\)
+ .*: R_TOC stuff\+.*
+
+.* <foo4>:
+.*: 60 00 00 00 oril r0,r0,0
+.*: 80 22 00 00 l r1,0\(r2\)
+ .*: R_TOC stuff\+.*
+
+.* <foo6>:
+.*: 60 00 00 00 oril r0,r0,0
+.*: 80 22 00 00 l r1,0\(r2\)
+ .*: R_TOC stuff\+.*
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-ref-1-64.od b/binutils-2.21/ld/testsuite/ld-powerpc/aix-ref-1-64.od
new file mode 100644
index 0000000..9cc6e9d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-ref-1-64.od
@@ -0,0 +1,30 @@
+
+.*
+
+
+Disassembly of section \.text:
+
+.* <foo1>:
+ .*: 60 00 00 00 nop
+ .*: R_REF foo2\+.*
+ .*: e8 22 00 00 ld r1,0\(r2\)
+ .*: R_TOC stuff\+.*
+ .*: 4e 80 00 20 blr
+
+.* <foo2>:
+ .*: 60 00 00 00 nop
+ .*: R_REF foo6\+.*
+ .*: R_REF foo4\+.*
+ .*: e8 22 00 00 ld r1,0\(r2\)
+ .*: R_TOC stuff\+.*
+
+.* <foo4>:
+ .*: 60 00 00 00 nop
+ .*: e8 22 00 00 ld r1,0\(r2\)
+ .*: R_TOC stuff\+.*
+
+.* <foo6>:
+ .*: 60 00 00 00 nop
+ .*: e8 22 00 00 ld r1,0\(r2\)
+ .*: R_TOC stuff\+.*
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-ref-1.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-ref-1.s
new file mode 100644
index 0000000..33445a6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-ref-1.s
@@ -0,0 +1,57 @@
+ .macro loadtoc,sym
+ .if size == 32
+ lwz 1,\sym(2)
+ .else
+ ld 1,\sym(2)
+ .endif
+ .endm
+
+ .toc
+LC01: .tc stuff[TC],stuff[RW]
+
+ .globl foo1
+ .csect foo1[pr]
+foo1:
+ .align 8
+ nop
+ loadtoc LC01
+
+ .globl foo2
+ .csect foo2[pr]
+foo2:
+ nop
+ loadtoc LC01
+ .ref foo4 , foo6
+
+ .globl foo3
+ .csect foo3[pr]
+foo3:
+ nop
+ loadtoc LC01
+
+ .globl foo4
+ .csect foo4[pr]
+foo4:
+ nop
+ loadtoc LC01
+
+ .globl foo5
+ .csect foo5[pr]
+foo5:
+ nop
+ loadtoc LC01
+ .ref foo3
+
+ .globl foo6
+ .csect foo6[pr]
+foo6:
+ nop
+ loadtoc LC01
+
+ .csect foo1[pr]
+ blr
+ .ref foo2
+
+ .csect stuff[rw]
+stuff:
+ .long 1
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-rel-1.od b/binutils-2.21/ld/testsuite/ld-powerpc/aix-rel-1.od
new file mode 100644
index 0000000..0d9f2bb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-rel-1.od
@@ -0,0 +1,22 @@
+
+.*
+
+# It doesn't matter whether .text, .bss and .debug are listed, as long as
+# they're empty. The important thing is that .loader shouldn't appear
+# at all.
+Sections:
+ *Idx Name * Size .*
+ *0 \.text * 0+0 .*
+ *ALLOC, LOAD, CODE
+ *1 \.data * 0+8 .*
+ *CONTENTS, ALLOC, LOAD, RELOC, DATA
+ *2 \.bss * 0+0 .*
+ *ALLOC
+ *3 \.debug * 0+0 .*
+
+RELOCATION RECORDS FOR \[\.data\]:
+OFFSET * TYPE * VALUE
+0+0 R_POS(|_32) * \.puts
+0+4 R_POS(|_32) * foobar
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-rel-1.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-rel-1.s
new file mode 100644
index 0000000..9891ba8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-rel-1.s
@@ -0,0 +1,5 @@
+ .globl foo
+ .csect foo[RW]
+foo:
+ .long .puts
+ .long foobar
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-toc-1-32.dd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-toc-1-32.dd
new file mode 100644
index 0000000..e129d34
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-toc-1-32.dd
@@ -0,0 +1,12 @@
+
+.*
+
+
+Disassembly of section \.text:
+
+10000000 <\.f1>:
+10000000: 80 22 80 08 l r1,-32760\(r2\)
+ 10000002: R_TOC sym0.*
+#...
+1000fff4: 80 22 7f fc l r1,32764\(r2\)
+ 1000fff6: R_TOC asym8190.*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-toc-1-64.dd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-toc-1-64.dd
new file mode 100644
index 0000000..c169ff6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-toc-1-64.dd
@@ -0,0 +1,12 @@
+
+.*
+
+
+Disassembly of section \.text:
+
+0000000010000000 <.f1>:
+ 10000000: e8 22 80 10 ld r1,-32752\(r2\)
+ 10000002: R_TOC sym0.*
+#...
+ 10007ff4: e8 22 7f f8 ld r1,32760\(r2\)
+ 10007ff6: R_TOC asym4094.*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-toc-1.ex b/binutils-2.21/ld/testsuite/ld-powerpc/aix-toc-1.ex
new file mode 100644
index 0000000..13a2943
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-toc-1.ex
@@ -0,0 +1,2 @@
+f1
+f2
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-toc-1a.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-toc-1a.s
new file mode 100644
index 0000000..e67d5d3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-toc-1a.s
@@ -0,0 +1,23 @@
+ .macro loadtoc
+ .toc
+ .tc sym\@[TC], \@
+
+ .csect .f1[PR]
+ .if size == 32
+ lwz 1,sym\@[TC](2)
+ .else
+ ld 1,sym\@[TC](2)
+ .endif
+ .endm
+
+ .globl .f1
+ .csect .f1[PR]
+.f1:
+ .rept 0x7ffc * 8 / size
+ loadtoc
+ .endr
+
+ .globl f1
+ .csect f1[DS]
+f1:
+ .long .f1[PR],TOC[TC0],0
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-toc-1b.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-toc-1b.s
new file mode 100644
index 0000000..d4cee8a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-toc-1b.s
@@ -0,0 +1,23 @@
+ .macro loadtoc
+ .toc
+ .tc asym\@[TC], \@ | 0x10000
+
+ .csect .f2[PR]
+ .if size == 32
+ lwz 1,asym\@[TC](2)
+ .else
+ ld 1,asym\@[TC](2)
+ .endif
+ .endm
+
+ .globl .f2
+ .csect .f2[PR]
+.f2:
+ .rept 0x7ffc * 8 / size
+ loadtoc
+ .endr
+
+ .globl f2
+ .csect f2[DS]
+f2:
+ .long .f2[PR],TOC[TC0],0
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-dso.dnd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-dso.dnd
new file mode 100644
index 0000000..3105fa3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-dso.dnd
@@ -0,0 +1,17 @@
+# Comments are (aix-weak-1a.s type) wins over/loses to (aix-weak-1b.s type)
+# (strong common) loses to (strong data)
+0*10000010 D a
+# (strong common) wins over (weak data)
+0*10000020 B b
+# (strong data) wins over (strong common)
+0*10000000 D c
+# (weak data) loses to (strong common)
+0*10000028 B d
+# (weak common) loses to (strong data)
+0*10000018 D e
+# (weak common) wins over (weak data)
+0*10000024 W f
+# (strong data) wins over (weak common)
+0*10000008 D g
+# (weak data) wins over (weak common)
+0*1000000c W h
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-dso.hd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-dso.hd
new file mode 100644
index 0000000..7368a5a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-dso.hd
@@ -0,0 +1,12 @@
+.*
+
+Sections:
+Idx Name * Size * VMA * LMA * File off *Algn
+ *0 \.text * 0+00 * 0*10000000 * 0*10000000 * [^ ]+ * 2\*\*2
+ *ALLOC, LOAD, CODE
+ *1 \.data * 0+20 * 0*10000000 * 0*10000000 * [^ ]+ * 2\*\*3
+ *CONTENTS, ALLOC, LOAD, DATA
+# Should only have 3 three common symbols.
+ *2 \.bss * 0+0c * 0*10000020 * 0*10000020 * [^ ]+ * 2\*\*3
+ *ALLOC
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-dso.nd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-dso.nd
new file mode 100644
index 0000000..3289e25
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-dso.nd
@@ -0,0 +1,25 @@
+# Comments are (aix-weak-1a.s type) wins over/loses to (aix-weak-1b.s type)
+# (strong common) loses to (strong data)
+0*10000010 d a
+0*10000010 D a
+# (strong common) wins over (weak data)
+0*10000020 B b
+0*10000014 d b
+# (strong data) wins over (strong common)
+0*10000000 d c
+0*10000000 D c
+# (weak data) loses to (strong common)
+0*10000004 d d
+0*10000028 B d
+# (weak common) loses to (strong data)
+0*10000018 d e
+0*10000018 D e
+# (weak common) wins over (weak data)
+0*10000024 W f
+0*1000001c d f
+# (strong data) wins over (weak common)
+0*10000008 d g
+0*10000008 D g
+# (weak data) wins over (weak common)
+0*1000000c d h
+0*1000000c W h
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-gcdso.dnd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-gcdso.dnd
new file mode 100644
index 0000000..ba82e27
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-gcdso.dnd
@@ -0,0 +1,17 @@
+# Comments are (aix-weak-1a.s type) wins over/loses to (aix-weak-1b.s type)
+# (strong common) loses to (strong data)
+0*1000000c D a
+# (strong common) wins over (weak data)
+0*10000018 B b
+# (strong data) wins over (strong common)
+0*10000000 D c
+# (weak data) loses to (strong common)
+0*10000020 B d
+# (weak common) loses to (strong data)
+0*10000010 D e
+# (weak common) wins over (weak data)
+0*1000001c W f
+# (strong data) wins over (weak common)
+0*10000004 D g
+# (weak data) wins over (weak common)
+0*10000008 W h
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-gcdso.hd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-gcdso.hd
new file mode 100644
index 0000000..6afe1be
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-gcdso.hd
@@ -0,0 +1,12 @@
+.*
+
+Sections:
+Idx Name * Size * VMA * LMA * File off *Algn
+ *0 \.text * 0+00 * 0*10000000 * 0*10000000 * [^ ]+ * 2\*\*2
+ *ALLOC, LOAD, CODE
+ *1 \.data * 0+18 * 0*10000000 * 0*10000000 * [^ ]+ * 2\*\*3
+ *CONTENTS, ALLOC, LOAD, DATA
+# Should only have 3 three common symbols.
+ *2 \.bss * 0+0c * 0*10000018 * 0*10000018 * [^ ]+ * 2\*\*3
+ *ALLOC
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-gcdso.nd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-gcdso.nd
new file mode 100644
index 0000000..d8d9a78
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-gcdso.nd
@@ -0,0 +1,22 @@
+# Comments are (aix-weak-1a.s type) wins over/loses to (aix-weak-1b.s type)
+# (strong common) loses to (strong data)
+0*1000000c d a
+0*1000000c D a
+# (strong common) wins over (weak data)
+0*10000018 B b
+# (strong data) wins over (strong common)
+0*10000000 d c
+0*10000000 D c
+# (weak data) loses to (strong common)
+0*10000020 B d
+# (weak common) loses to (strong data)
+0*10000010 d e
+0*10000010 D e
+# (weak common) wins over (weak data)
+0*1000001c W f
+# (strong data) wins over (weak common)
+0*10000004 d g
+0*10000004 D g
+# (weak data) wins over (weak common)
+0*10000008 d h
+0*10000008 W h
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-rel.hd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-rel.hd
new file mode 100644
index 0000000..9ae4d47
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-rel.hd
@@ -0,0 +1,12 @@
+.*
+
+Sections:
+Idx Name * Size * VMA * LMA * File off *Algn
+ *0 \.text * 0+00 * 0+00 * 0+00 * [^ ]+ * 2\*\*2
+ *ALLOC, LOAD, CODE
+ *1 \.data * 0+20 * 0+00 * 0+00 * [^ ]+ * 2\*\*3
+ *CONTENTS, ALLOC, LOAD, DATA
+# Should only have 3 three common symbols.
+ *2 \.bss * 0+0c * 0+20 * 0+20 * [^ ]+ * 2\*\*3
+ *ALLOC
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-rel.nd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-rel.nd
new file mode 100644
index 0000000..73cfe90
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1-rel.nd
@@ -0,0 +1,25 @@
+# Comments are (aix-weak-1a.s type) wins over/loses to (aix-weak-1b.s type)
+# (strong common) loses to (strong data)
+0+10 d a
+0+10 D a
+# (strong common) wins over (weak data)
+0+20 B b
+0+14 d b
+# (strong data) wins over (strong common)
+0+00 d c
+0+00 D c
+# (weak data) loses to (strong common)
+0+04 d d
+0+28 B d
+# (weak common) loses to (strong data)
+0+18 d e
+0+18 D e
+# (weak common) wins over (weak data)
+0+24 W f
+0+1c d f
+# (strong data) wins over (weak common)
+0+08 d g
+0+08 D g
+# (weak data) wins over (weak common)
+0+0c d h
+0+0c W h
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1.ex b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1.ex
new file mode 100644
index 0000000..71ac1b5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1.ex
@@ -0,0 +1,8 @@
+a
+b
+c
+d
+e
+f
+g
+h
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1a.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1a.s
new file mode 100644
index 0000000..da529ca
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1a.s
@@ -0,0 +1,24 @@
+ .comm a,4
+ .comm b,4
+ .globl c
+ .csect c[RW],2
+c:
+ .long 0x11111111
+ .weak d
+ .csect d[RW],2
+d:
+ .long 0x22222222
+
+ # Same again, with weak common symbols
+ .weak e
+ .comm e,4
+ .weak f
+ .comm f,4
+ .globl g
+ .csect g[RW],2
+g:
+ .long 0x33333333
+ .weak h
+ .csect h[RW],2
+h:
+ .long 0x44444444
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1b.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1b.s
new file mode 100644
index 0000000..e6c2429
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-1b.s
@@ -0,0 +1,24 @@
+ .globl a
+ .csect a[RW],2
+a:
+ .long 0x55555555
+ .weak b
+ .csect b[RW],2
+b:
+ .long 0x66666666
+ .comm c,4
+ .comm d,4
+
+ # Same again, with weak common symbols
+ .globl e
+ .csect e[RW],2
+e:
+ .long 0x77777777
+ .weak f
+ .csect f[RW],2
+f:
+ .long 0x88888888
+ .weak g
+ .comm g,4
+ .weak h
+ .comm h,4
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2a.ex b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2a.ex
new file mode 100644
index 0000000..0e65a8f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2a.ex
@@ -0,0 +1,8 @@
+c1
+c2
+c3
+c4
+d1
+d2
+d3
+d4
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2a.nd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2a.nd
new file mode 100644
index 0000000..2c2ea1c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2a.nd
@@ -0,0 +1,8 @@
+0*cccc1111 W c1
+0*cccc2222 W c2
+0*cccc3333 A c3
+0*cccc4444 A c4
+0*ffff1111 W d1
+0*ffff2222 W d2
+0*10000000 D d3
+0*10000004 D d4
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2a.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2a.s
new file mode 100644
index 0000000..e4d8a04
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2a.s
@@ -0,0 +1,21 @@
+ .weak c1
+ c1 = 0xcccc1111
+ .weak c2
+ c2 = 0xcccc2222
+ .globl c3
+ c3 = 0xcccc3333
+ .globl c4
+ c4 = 0xcccc4444
+
+ .weak d1
+ d1 = 0xffff1111
+ .weak d2
+ d2 = 0xffff2222
+ .globl d3
+ .csect d3[DS]
+d3:
+ .long 0xffff3333
+ .globl d4
+ .csect d4[DS]
+d4:
+ .long 0xffff4444
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2b.nd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2b.nd
new file mode 100644
index 0000000..d54b35b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2b.nd
@@ -0,0 +1,8 @@
+0*dddd1111 A c1
+0*dddd2222 W c2
+0*dddd3333 A c3
+0*dddd4444 W c4
+0*10000000 D d1
+0*eeee2222 W d2
+0*10000004 D d3
+0*eeee4444 W d4
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2b.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2b.s
new file mode 100644
index 0000000..84885ab
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2b.s
@@ -0,0 +1,21 @@
+ .globl c1
+ c1 = 0xdddd1111
+ .weak c2
+ c2 = 0xdddd2222
+ .globl c3
+ c3 = 0xdddd3333
+ .weak c4
+ c4 = 0xdddd4444
+
+ .globl d1
+ .csect d1[DS]
+d1:
+ .long 0xeeee1111
+ .weak d2
+ d2 = 0xeeee2222
+ .globl d3
+ .csect d3[DS]
+d3:
+ .long 0xeeee3333
+ .weak d4
+ d4 = 0xeeee4444
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2c.ex b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2c.ex
new file mode 100644
index 0000000..257cc56
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2c.ex
@@ -0,0 +1 @@
+foo
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2c.nd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2c.nd
new file mode 100644
index 0000000..d42034b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2c.nd
@@ -0,0 +1,10 @@
+0*dddd1111 C c1
+0*cccc2222 C c2
+0*cccc3333 C c3
+0*cccc4444 C c4
+ * U d1
+0*ffff2222 C d2
+ * U d3
+ * U d4
+0*10000000 d foo
+0*10000000 D foo
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2c.od b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2c.od
new file mode 100644
index 0000000..272c80e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2c.od
@@ -0,0 +1,13 @@
+
+.*
+
+DYNAMIC RELOCATION RECORDS
+OFFSET * TYPE * VALUE
+0*10000010 R_POS * d1
+0*10000018 R_POS * d3
+0*1000001c R_POS * d4
+
+
+Contents of section \.data:
+ 0*10000000 dddd1111 cccc2222 cccc3333 cccc4444 .*
+ 0*10000010 00000000 ffff2222 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2c.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2c.s
new file mode 100644
index 0000000..5ca93d3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-2c.s
@@ -0,0 +1,11 @@
+ .globl foo
+ .csect foo[DS]
+foo:
+ .long c1
+ .long c2
+ .long c3
+ .long c4
+ .long d1
+ .long d2
+ .long d3
+ .long d4
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3-32.d b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3-32.d
new file mode 100644
index 0000000..45976c9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3-32.d
@@ -0,0 +1,5 @@
+#name: Weak test 3 (main, static) (32-bit)
+#source: aix-weak-3b.s
+#as: -a32 --defsym size=32
+#ld: -b32 -e.main -bnoautoimp tmpdir/aix-weak-3a.so
+#error: .*multiple definition of `x1'\n[^\n]*first defined here
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3-32.dd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3-32.dd
new file mode 100644
index 0000000..c52b735
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3-32.dd
@@ -0,0 +1,24 @@
+
+.*
+
+
+Disassembly of section \.data:
+
+20000000 <x1>:
+20000000: 00 00 01 02 .*
+
+20000004 <x2>:
+20000004: 00 00 03 04 .*
+
+20000008 <TOC>:
+20000008: 20 00 00 00 .*
+ 20000008: R_POS x1\+.*
+
+2000000c <x2>:
+2000000c: 20 00 00 04 .*
+ 2000000c: R_POS x2\+.*
+
+20000010 <x3>:
+20000010: 00 00 00 00 .*
+ 20000010: R_POS x3
+20000014: 00 00 00 00 .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3-64.d b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3-64.d
new file mode 100644
index 0000000..4673175
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3-64.d
@@ -0,0 +1,5 @@
+#name: Weak test 3 (main, static) (64-bit)
+#source: aix-weak-3b.s
+#as: -a64 --defsym size=64
+#ld: -b64 -e.main -bnoautoimp tmpdir/aix64-weak-3a.so
+#error: .*multiple definition of `x1'\n[^\n]*first defined here
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3-64.dd b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3-64.dd
new file mode 100644
index 0000000..7c10f6c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3-64.dd
@@ -0,0 +1,26 @@
+
+.*
+
+
+Disassembly of section \.data:
+
+0000000020000000 <x1>:
+ 20000000: 00 00 01 02 .*
+
+0000000020000004 <x2>:
+ 20000004: 00 00 03 04 .*
+
+0000000020000008 <TOC>:
+ 20000008: 00 00 00 00 .*
+ 20000008: R_POS_64 x1\+.*
+ 2000000c: 20 00 00 00 .*
+
+0000000020000010 <x2>:
+ 20000010: 00 00 00 00 .*
+ 20000010: R_POS_64 x2\+.*
+ 20000014: 20 00 00 04 .*
+
+0000000020000018 <x3>:
+ 20000018: 00 00 00 00 .*
+ 20000018: R_POS_64 x3
+ 2000001c: 00 00 00 00 .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3a.ex b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3a.ex
new file mode 100644
index 0000000..589f40b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3a.ex
@@ -0,0 +1,3 @@
+x1
+x2
+x3
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3a.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3a.s
new file mode 100644
index 0000000..e8b9d96
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3a.s
@@ -0,0 +1,8 @@
+ .globl x1
+ x1 = 0x11223344
+ .globl x2
+ x2 = 0x55667788
+ .globl x3
+ .csect x3[RW]
+x3:
+ .long 42
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3b.ex b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3b.ex
new file mode 100644
index 0000000..975fbec
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3b.ex
@@ -0,0 +1 @@
+y
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3b.s b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3b.s
new file mode 100644
index 0000000..4e69082
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix-weak-3b.s
@@ -0,0 +1,30 @@
+ .globl x1
+ .csect x1[RW]
+x1:
+ .long 0x0102
+
+ .weak x2
+ .csect x2[RW]
+x2:
+ .long 0x0304
+
+ .toc
+Tx1:
+ .tc x1[TC],x1
+Tx2:
+ .tc x2[TC],x2
+Tx3:
+ .tc x3[TC],x3
+
+ .globl .main
+ .csect .main[PR]
+.main:
+ .if size == 32
+ lwz 1,Tx1(2)
+ lwz 1,Tx2(2)
+ lwz 1,Tx3(2)
+ .else
+ ld 1,Tx1(2)
+ ld 1,Tx2(2)
+ ld 1,Tx3(2)
+ .endif
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/aix52.exp b/binutils-2.21/ld/testsuite/ld-powerpc/aix52.exp
new file mode 100644
index 0000000..2f00cff
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/aix52.exp
@@ -0,0 +1,265 @@
+# Expect script for AIX 5.2+ tests
+# Copyright 2009 Free Software Foundation
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+if { ![istarget "powerpc*-*-aix\[5-9\]*"]
+ || [istarget "powerpc*-*-aix5.\[01\]*"] } {
+ return
+}
+
+# Run a run_link_tests-style test for AIX. SIZE selects the target size
+# (32 or 64). The other arguments are elements of a run_link_tests test.
+#
+# Make the following changes before running the test:
+#
+# - Mention SIZE in the test name.
+# - Add "-aSIZE --defsym size=SIZE" to the assembler options.
+# - Add the source directory to any "-bI:" and "-bE:" linker options.
+# - Add "-bSIZE" to the linker options.
+# - Add "-XSIZE" to the archiver options.
+# - Replace "SIZE" with SIZE in TOOLS.
+# - When testing 64-bit targets:
+# - Turn tmpdir/aix-* into tmpdir/aix64-*.
+# - Turn tmpdir/libaix-* into tmpdir/libaix64-*.
+# - Turn -laix* into -laix64*, to compensate for the above.
+proc run_aix_test { size name ldopts asopts sources tools output } {
+ global srcdir subdir
+
+ if { $size == 64 } {
+ regsub -all {tmpdir/aix-} $ldopts {tmpdir/aix64-} ldopts
+ regsub {^aix} $output {aix64} output
+
+ regsub -all -- {-laix-} $ldopts {-laix64-} ldopts
+ regsub {^libaix} $output {libaix64} output
+ }
+ if { [regexp {.a$} $output] } {
+ append ldopts " -X$size"
+ } else {
+ regsub -all {(-b[IE]):} $ldopts "\\1:$srcdir/$subdir/" ldopts
+ append ldopts " -b$size"
+ }
+ regsub -all {SIZE} $tools $size tools
+ run_ld_link_tests [list [list "$name ($size-bit)" \
+ $ldopts \
+ "$asopts -a$size --defsym size=$size" \
+ $sources \
+ $tools \
+ $output]]
+}
+
+foreach file { "aix-lineno-1.txt" } {
+ remote_upload host "$srcdir/$subdir/$file" "tmpdir/$file"
+}
+
+set aix52tests {
+ {"Absolute branch test 1"
+ "-shared -bI:aix-abs-branch-1.im -bE:aix-abs-branch-1.ex"
+ "" {aix-abs-branch-1.s}
+ {{objdump {-dR} aix-abs-branch-1.dd} {nm {} aix-abs-branch-1.nd}}
+ "aix-abs-branch-1.so"}
+
+ {"Relocations against absolute symbols 1"
+ "-shared -bI:aix-abs-reloc-1.im -bE:aix-abs-reloc-1.ex"
+ {} {aix-abs-reloc-1.s}
+ {{objdump -sRj.data aix-abs-reloc-1.od} {nm {} aix-abs-reloc-1.nd}}
+ "aix-abs-reloc-1.so"}
+
+ {"Core sections test 1" "-shared -bE:aix-core-sec-1.ex"
+ "" {aix-core-sec-1.s}
+ {{objdump -h aix-core-sec-1.hd}}
+ "aix-core-sec-1.so"}
+
+ {"Core sections test 2" "-shared -bE:aix-core-sec-2.ex"
+ "" {aix-core-sec-2.s}
+ {{objdump -h aix-core-sec-2.hd}}
+ "aix-core-sec-2.so"}
+
+ {"Core sections test 3" "-shared -bE:aix-core-sec-3.ex"
+ "" {aix-core-sec-3.s}
+ {{objdump -h aix-core-sec-3.hd}}
+ "aix-core-sec-3.so"}
+
+ {"Duplicate symbol check 1 (rel)" "-r"
+ "" {aix-no-dup-syms-1a.s aix-no-dup-syms-1b.s}
+ {{nm {} aix-no-dup-syms-1-rel.nd} {objdump -r aix-no-dup-syms-1-rel.rd}}
+ "aix-no-dup-syms-1.o"}
+
+ {"Duplicate symbol check 1 (shared)"
+ "-shared --allow-multiple-definition -bI:aix-no-dup-syms-1.im -bE:aix-no-dup-syms-1.ex"
+ "" {aix-no-dup-syms-1a.s aix-no-dup-syms-1b.s}
+ {{nm {} aix-no-dup-syms-1-dso.nd} {objdump -r aix-no-dup-syms-1-dso.rd}
+ {nm -D aix-no-dup-syms-1-dso.dnd} {objdump -R aix-no-dup-syms-1-dso.drd}}
+ "aix-no-dup-syms-1.so"}
+
+ {"Export test 1 (archive)" ""
+ "" {aix-export-1a.s}
+ {} "libaix-export-1.a"}
+
+ {"Export test 1 (object)" "-r"
+ "" {aix-export-1b.s}
+ {} "aix-export-1.o"}
+
+ {"Export test 1 (-bexpall)"
+ "-shared -bexpall tmpdir/aix-export-1.o -Ltmpdir -laix-export-1"
+ "" {}
+ {{objdump -dj.data aix-export-1-all.dd}}
+ "aix-export-1-all.so"}
+
+ {"Export test 1 (-bexpfull)"
+ "-shared -bexpfull tmpdir/aix-export-1.o -Ltmpdir -laix-export-1"
+ "" {}
+ {{objdump -dj.data aix-export-1-full.dd}}
+ "aix-export-1-full.so"}
+
+ {"Export test 2" "-shared -bexpall"
+ {} {aix-export-2.s}
+ {{nm -D aix-export-2.nd}} "aix-export-2.so"}
+
+ {"Garbage collection test 1"
+ "-shared -binitfini:init_function:fini_function -bE:aix-gc-1.ex"
+ "" {aix-gc-1.s}
+ {{objdump {-dz -j.text -j.data} aix-gc-1-SIZE.dd}
+ {nm {} aix-gc-1.nd}}
+ "aix-gc-1.so"}
+
+ {"Glink test 1"
+ "-shared -bE:aix-glink-1.ex --unresolved-symbols=ignore-all"
+ "" {aix-glink-1.s}
+ {{objdump {-D -j.text -j.data} aix-glink-1-SIZE.dd}}
+ "aix-glink-1.so"}
+
+ {"Glink test 2 (part a)" "-shared -bE:aix-glink-2a.ex"
+ "" {aix-glink-2a.s}
+ {}
+ "aix-glink-2a.so"}
+
+ {"Glink test 2 (part b)" "-r"
+ "" {aix-glink-2b.s}
+ {}
+ "aix-glink-2b.ro"}
+
+ {"Glink test 2 (part c)" "-shared -bE:aix-glink-2c.ex"
+ "" {aix-glink-2c.s}
+ {}
+ "aix-glink-2c.so"}
+
+ {"Glink test 2"
+ "-e.main tmpdir/aix-glink-2a.so tmpdir/aix-glink-2b.ro tmpdir/aix-glink-2c.so"
+ "" {aix-glink-2d.s}
+ {{objdump -d aix-glink-2-SIZE.dd}}
+ "aix-glink-2"}
+
+ {"Glink test 3 (shared library a)"
+ "-shared -bexpall"
+ "" {aix-glink-3a.s}
+ {} "aix-glink-3a.so"}
+
+ {"Glink test 3 (shared library b)"
+ "-shared -bexpall"
+ "" {aix-glink-3b.s}
+ {} "aix-glink-3b.so"}
+
+ {"Glink test 3 (main test)"
+ "-bnoautoimp tmpdir/aix-glink-3b.so tmpdir/aix-glink-3a.so"
+ "" {aix-glink-3.s}
+ {{objdump -d aix-glink-3.dd}}
+ "aix-glink-3"}
+
+ {"Line number test 1 (no discards)" "-e.main"
+ "" {aix-lineno-1.s}
+ {{objdump -dS aix-lineno-1a.dd} {nm {} aix-lineno-1a.nd}}
+ "aix-lineno-1a.exe"}
+
+ {"Line number test 1 (discard locals)" "-e.main -x"
+ "" {aix-lineno-1.s}
+ {{objdump -dS aix-lineno-1b.dd} {nm {} aix-lineno-1b.nd}}
+ "aix-lineno-1b.exe"}
+
+ {"Relocatable test 1" "-r"
+ "" {aix-rel-1.s}
+ {{objdump -hr aix-rel-1.od}} "aix-rel-1.ro"}
+
+ {".ref test 1" "-efoo1"
+ "" {aix-ref-1.s}
+ {{objdump -dr aix-ref-1-SIZE.od}}
+ "aix-ref-1"}
+
+ {"Weak test 1 (rel)" "-r"
+ "" {aix-weak-1a.s aix-weak-1b.s}
+ {{nm {} aix-weak-1-rel.nd} {objdump -h aix-weak-1-rel.hd}}
+ "aix-weak-1.o"}
+
+ {"Weak test 1 (shared, nogc)" "-shared -bE:aix-weak-1.ex -bnogc"
+ "" {aix-weak-1a.s aix-weak-1b.s}
+ {{nm {} aix-weak-1-dso.nd} {objdump -h aix-weak-1-dso.hd}
+ {nm -D aix-weak-1-dso.dnd}}
+ "aix-weak-1-nogc.so"}
+
+ {"Weak test 1 (shared, gc)" "-shared -bE:aix-weak-1.ex"
+ "" {aix-weak-1a.s aix-weak-1b.s}
+ {{nm {} aix-weak-1-gcdso.nd} {objdump -h aix-weak-1-gcdso.hd}
+ {nm -D aix-weak-1-gcdso.dnd}}
+ "aix-weak-1-gc.so"}
+
+ {"Weak test 2 (library 1)" "-shared -bE:aix-weak-2a.ex"
+ "" {aix-weak-2a.s}
+ {{nm -D aix-weak-2a.nd}}
+ "aix-weak-2a.so"}
+
+ {"Weak test 2 (library 2)" "-shared -bE:aix-weak-2a.ex"
+ "" {aix-weak-2b.s}
+ {{nm -D aix-weak-2b.nd}}
+ "aix-weak-2b.so"}
+
+ {"Weak test 2 (main library)"
+ "-shared -bE:aix-weak-2c.ex tmpdir/aix-weak-2a.so tmpdir/aix-weak-2b.so"
+ "" {aix-weak-2c.s}
+ {{nm {} aix-weak-2c.nd} {objdump {-sj.data -R} aix-weak-2c.od}}
+ "aix-weak-2c.so"}
+
+ {"Weak test 3 (library)" "-shared -bE:aix-weak-3a.ex"
+ "" {aix-weak-3a.s}
+ {}
+ "aix-weak-3a.so"}
+
+ {"Weak test 3 (main, dynamic)" "-e.main tmpdir/aix-weak-3a.so"
+ "" {aix-weak-3b.s}
+ {{objdump -Dzrj.data aix-weak-3-SIZE.dd}}
+ "aix-weak-3"}
+
+ {"TOC test 1" "-shared -bE:aix-toc-1.ex"
+ "" {aix-toc-1a.s aix-toc-1b.s}
+ {{objdump -dr aix-toc-1-SIZE.dd}}
+ "aix-toc-1.so"}
+}
+
+foreach test $aix52tests {
+ foreach { name ldopts asopts sources tools output } $test {
+ run_aix_test 32 $name $ldopts $asopts $sources $tools $output
+ run_aix_test 64 $name $ldopts $asopts $sources $tools $output
+ }
+}
+
+run_dump_test "aix-glink-1-32"
+run_dump_test "aix-glink-1-64"
+run_dump_test "aix-glink-3-32"
+run_dump_test "aix-glink-3-64"
+run_dump_test "aix-weak-3-32"
+run_dump_test "aix-weak-3-64"
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/apuinfo-nul.rd b/binutils-2.21/ld/testsuite/ld-powerpc/apuinfo-nul.rd
new file mode 100644
index 0000000..c20fc5e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/apuinfo-nul.rd
@@ -0,0 +1,9 @@
+#source: apuinfo-nul.s
+#source: apuinfo-nul1.s
+#as: -me500
+#readelf: -x2
+#target: powerpc-eabi*
+
+Hex dump of section '.PPC.EMB.apuinfo':
+ 0x00000000 00000008 00000000 00000002 41505569 ............APUi
+ 0x00000010 6e666f00 nfo.
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/apuinfo-nul.s b/binutils-2.21/ld/testsuite/ld-powerpc/apuinfo-nul.s
new file mode 100644
index 0000000..6b17142
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/apuinfo-nul.s
@@ -0,0 +1,10 @@
+ .text
+ nop
+
+ # dummy empty apuinfo
+ # some other tools emit these
+ .section ".PPC.EMB.apuinfo"
+ .long 8
+ .long 0
+ .long 2
+ .asciz "APUinfo"
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/apuinfo-nul1.s b/binutils-2.21/ld/testsuite/ld-powerpc/apuinfo-nul1.s
new file mode 100644
index 0000000..f415e71
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/apuinfo-nul1.s
@@ -0,0 +1,10 @@
+ .text
+_start: nop
+
+ # dummy empty apuinfo
+ # some other tools emit these
+ .section ".PPC.EMB.apuinfo"
+ .long 8
+ .long 0
+ .long 2
+ .asciz "APUinfo"
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/apuinfo.rd b/binutils-2.21/ld/testsuite/ld-powerpc/apuinfo.rd
new file mode 100644
index 0000000..7a27bc0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/apuinfo.rd
@@ -0,0 +1,11 @@
+#source: apuinfo1.s
+#source: apuinfo2.s
+#source: apuinfo-nul.s
+#as: -me500
+#readelf: -x2
+#target: powerpc-eabi*
+
+Hex dump of section '.PPC.EMB.apuinfo':
+ 0x00000000 00000008 0000001c 00000002 41505569 ............APUi
+ 0x00000010 6e666f00 00420001 00430001 00410001 nfo..B...C...A..
+ 0x00000020 01020001 01010001 00400001 01000001 .........@......
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/apuinfo1.s b/binutils-2.21/ld/testsuite/ld-powerpc/apuinfo1.s
new file mode 100644
index 0000000..fd42eac
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/apuinfo1.s
@@ -0,0 +1,9 @@
+ .text
+ .global apuinfo1
+apuinfo1:
+ evstdd 29,8(1)
+ isellt 29, 28, 27
+ efsabs 29, 28
+ .global _start
+_start:
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/apuinfo2.s b/binutils-2.21/ld/testsuite/ld-powerpc/apuinfo2.s
new file mode 100644
index 0000000..7f4e7bb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/apuinfo2.s
@@ -0,0 +1,8 @@
+ .text
+ .global apuinfo2
+apuinfo2:
+ evstdd 29,8(1)
+ mfbbear 29
+ mfpmr 29, 27
+ dcbtstls 1, 29, 28
+ rfmci
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-12-1.s b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-12-1.s
new file mode 100644
index 0000000..10cbe3b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-12-1.s
@@ -0,0 +1 @@
+.gnu_attribute 12,1
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-12-11.d b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-12-11.d
new file mode 100644
index 0000000..e88c4ba
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-12-11.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-12-1.s
+#source: attr-gnu-12-1.s
+#as: -a32
+#ld: -r -melf32ppc
+#readelf: -A
+#target: powerpc*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_Power_ABI_Struct_Return: r3/r4
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-12-2.s b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-12-2.s
new file mode 100644
index 0000000..c39de66
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-12-2.s
@@ -0,0 +1 @@
+.gnu_attribute 12,2
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-12-21.d b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-12-21.d
new file mode 100644
index 0000000..ef14e35
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-12-21.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-12-2.s
+#source: attr-gnu-12-1.s
+#as: -a32
+#ld: -r -melf32ppc
+#warning: Warning: .* uses r3/r4 for small structure returns, .* uses memory
+#target: powerpc*-*-*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-0.s b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-0.s
new file mode 100644
index 0000000..a143746
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-0.s
@@ -0,0 +1 @@
+.gnu_attribute 4,0
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-00.d b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-00.d
new file mode 100644
index 0000000..a4751a1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-00.d
@@ -0,0 +1,7 @@
+#source: attr-gnu-4-0.s
+#source: attr-gnu-4-0.s
+#as: -a32
+#ld: -r -melf32ppc
+#readelf: -A
+#target: powerpc*-*-*
+
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-01.d b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-01.d
new file mode 100644
index 0000000..212e0c4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-01.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-0.s
+#source: attr-gnu-4-1.s
+#as: -a32
+#ld: -r -melf32ppc
+#readelf: -A
+#target: powerpc*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_Power_ABI_FP: Hard float
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-02.d b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-02.d
new file mode 100644
index 0000000..9bd42b5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-02.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-0.s
+#source: attr-gnu-4-2.s
+#as: -a32
+#ld: -r -melf32ppc
+#readelf: -A
+#target: powerpc*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_Power_ABI_FP: Soft float
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-03.d b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-03.d
new file mode 100644
index 0000000..03b0c3c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-03.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-0.s
+#source: attr-gnu-4-3.s
+#as: -a32
+#ld: -r -melf32ppc
+#readelf: -A
+#target: powerpc*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_Power_ABI_FP: Single-precision hard float
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-1.s b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-1.s
new file mode 100644
index 0000000..e985a56
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-1.s
@@ -0,0 +1 @@
+.gnu_attribute 4,1
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-10.d b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-10.d
new file mode 100644
index 0000000..93297c2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-10.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-1.s
+#source: attr-gnu-4-0.s
+#as: -a32
+#ld: -r -melf32ppc
+#readelf: -A
+#target: powerpc*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_Power_ABI_FP: Hard float
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-11.d b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-11.d
new file mode 100644
index 0000000..fb2b76e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-11.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-1.s
+#source: attr-gnu-4-1.s
+#as: -a32
+#ld: -r -melf32ppc
+#readelf: -A
+#target: powerpc*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_Power_ABI_FP: Hard float
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-12.d b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-12.d
new file mode 100644
index 0000000..b7ffba0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-12.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-1.s
+#source: attr-gnu-4-2.s
+#as: -a32
+#ld: -r -melf32ppc
+#warning: Warning: .* uses hard float, .* uses soft float
+#target: powerpc*-*-*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-13.d b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-13.d
new file mode 100644
index 0000000..6bc3de4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-13.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-1.s
+#source: attr-gnu-4-3.s
+#as: -a32
+#ld: -r -melf32ppc
+#warning: Warning: .* uses double-precision hard float, .* uses single-precision hard float
+#target: powerpc*-*-*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-14.d b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-14.d
new file mode 100644
index 0000000..3bb6661
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-14.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-1.s
+#source: attr-gnu-4-4.s
+#as: -a32
+#ld: -r -melf32ppc
+#warning: Warning: .* uses unknown floating point ABI 4
+#target: powerpc*-*-*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-2.s b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-2.s
new file mode 100644
index 0000000..54ebf4e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-2.s
@@ -0,0 +1 @@
+.gnu_attribute 4,2
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-20.d b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-20.d
new file mode 100644
index 0000000..3d83893
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-20.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-2.s
+#source: attr-gnu-4-0.s
+#as: -a32
+#ld: -r -melf32ppc
+#readelf: -A
+#target: powerpc*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_Power_ABI_FP: Soft float
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-21.d b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-21.d
new file mode 100644
index 0000000..b38f248
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-21.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-2.s
+#source: attr-gnu-4-1.s
+#as: -a32
+#ld: -r -melf32ppc
+#warning: Warning: .* uses hard float, .* uses soft float
+#target: powerpc*-*-*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-22.d b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-22.d
new file mode 100644
index 0000000..f6bd198
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-22.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-2.s
+#source: attr-gnu-4-2.s
+#as: -a32
+#ld: -r -melf32ppc
+#readelf: -A
+#target: powerpc*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_Power_ABI_FP: Soft float
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-23.d b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-23.d
new file mode 100644
index 0000000..f72c258
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-23.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-2.s
+#source: attr-gnu-4-3.s
+#as: -a32
+#ld: -r -melf32ppc
+#warning: Warning: .* uses hard float, .* uses soft float
+#target: powerpc*-*-*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-24.d b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-24.d
new file mode 100644
index 0000000..fc17f91
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-24.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-2.s
+#source: attr-gnu-4-4.s
+#as: -a32
+#ld: -r -melf32ppc
+#warning: Warning: .* uses unknown floating point ABI 4
+#target: powerpc*-*-*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-3.s b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-3.s
new file mode 100644
index 0000000..32e5f5d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-3.s
@@ -0,0 +1 @@
+.gnu_attribute 4,3
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-31.d b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-31.d
new file mode 100644
index 0000000..8ee1874
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-31.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-3.s
+#source: attr-gnu-4-1.s
+#as: -a32
+#ld: -r -melf32ppc
+#warning: Warning: .* uses double-precision hard float, .* uses single-precision hard float
+#target: powerpc*-*-*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-32.d b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-32.d
new file mode 100644
index 0000000..3b7cb29
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-32.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-3.s
+#source: attr-gnu-4-2.s
+#as: -a32
+#ld: -r -melf32ppc
+#warning: Warning: .* uses soft float, .* uses single-precision hard float
+#target: powerpc*-*-*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-33.d b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-33.d
new file mode 100644
index 0000000..88367ae
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-33.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-3.s
+#source: attr-gnu-4-3.s
+#as: -a32
+#ld: -r -melf32ppc
+#readelf: -A
+#target: powerpc*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_Power_ABI_FP: Single-precision hard float
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-34.d b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-34.d
new file mode 100644
index 0000000..6f6e1fe
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-34.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-3.s
+#source: attr-gnu-4-4.s
+#as: -a32
+#ld: -r -melf32ppc
+#warning: Warning: .* uses unknown floating point ABI 4
+#target: powerpc*-*-*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-4.s b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-4.s
new file mode 100644
index 0000000..3ff129a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-4.s
@@ -0,0 +1 @@
+.gnu_attribute 4,4
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-41.d b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-41.d
new file mode 100644
index 0000000..b909476
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-4-41.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-4.s
+#source: attr-gnu-4-1.s
+#as: -a32
+#ld: -r -melf32ppc
+#warning: Warning: .* uses unknown floating point ABI 4
+#target: powerpc*-*-*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-8-1.s b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-8-1.s
new file mode 100644
index 0000000..81c7b7f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-8-1.s
@@ -0,0 +1 @@
+.gnu_attribute 8,1
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-8-11.d b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-8-11.d
new file mode 100644
index 0000000..7e49d4a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-8-11.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-8-1.s
+#source: attr-gnu-8-1.s
+#as: -a32
+#ld: -r -melf32ppc
+#readelf: -A
+#target: powerpc*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_Power_ABI_Vector: Generic
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-8-2.s b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-8-2.s
new file mode 100644
index 0000000..0f18f5f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-8-2.s
@@ -0,0 +1 @@
+.gnu_attribute 8,2
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-8-23.d b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-8-23.d
new file mode 100644
index 0000000..b22e4bd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-8-23.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-8-2.s
+#source: attr-gnu-8-3.s
+#as: -a32
+#ld: -r -melf32ppc
+#warning: Warning: .* uses vector ABI "SPE", .* uses "AltiVec"
+#target: powerpc*-*-*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-8-3.s b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-8-3.s
new file mode 100644
index 0000000..6a1cf4e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-8-3.s
@@ -0,0 +1 @@
+.gnu_attribute 8,3
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-8-31.d b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-8-31.d
new file mode 100644
index 0000000..53e8f99
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/attr-gnu-8-31.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-8-3.s
+#source: attr-gnu-8-1.s
+#as: -a32
+#ld: -r -melf32ppc
+#readelf: -A
+#target: powerpc*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_Power_ABI_Vector: SPE
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/oldtlslib.s b/binutils-2.21/ld/testsuite/ld-powerpc/oldtlslib.s
new file mode 100644
index 0000000..5786df1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/oldtlslib.s
@@ -0,0 +1,29 @@
+ .global __tls_get_addr,__tls_get_addr_opt,gd,ld
+ .global .__tls_get_addr,.__tls_get_addr_opt
+ .type .__tls_get_addr,@function
+ .type .__tls_get_addr_opt,@function
+
+ .section ".opd","aw",@progbits
+__tls_get_addr:
+__tls_get_addr_opt:
+ .align 3
+ .quad .__tls_get_addr
+ .quad .TOC.@tocbase
+ .quad 0
+ .size __tls_get_addr,24
+ .size __tls_get_addr_opt,24
+
+ .section ".tbss","awT",@nobits
+ .align 3
+gd: .space 8
+
+ .section ".tdata","awT",@progbits
+ .align 2
+ld: .long 0xc0ffee
+
+ .text
+.__tls_get_addr:
+.__tls_get_addr_opt:
+ blr
+ .size .__tls_get_addr,. - .__tls_get_addr
+ .size .__tls_get_addr_opt,. - .__tls_get_addr_opt
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/plt1.d b/binutils-2.21/ld/testsuite/ld-powerpc/plt1.d
new file mode 100644
index 0000000..d8d9d8d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/plt1.d
@@ -0,0 +1,20 @@
+#source: plt1.s
+#as: -a32
+#objdump: -dr
+#target: powerpc*-*-*
+
+.*: file format elf32-powerpc
+
+Disassembly of section .text:
+
+0+ <_start>:
+ 0: 42 9f 00 05 bcl- 20,4\*cr7\+so,4 .*
+ 4: 7f c8 02 a6 mflr r30
+ 8: 3f de 00 00 addis r30,r30,0
+ a: R_PPC_REL16_HA _GLOBAL_OFFSET_TABLE_\+0x6
+ c: 3b de 00 0a addi r30,r30,10
+ e: R_PPC_REL16_LO _GLOBAL_OFFSET_TABLE_\+0xa
+ 10: 48 00 00 01 bl 10 .*
+ 10: R_PPC_PLTREL24 _exit
+ 14: 48 00 00 00 b 14 .*
+ 14: R_PPC_REL24 _start
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/plt1.s b/binutils-2.21/ld/testsuite/ld-powerpc/plt1.s
new file mode 100644
index 0000000..c00c264
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/plt1.s
@@ -0,0 +1,9 @@
+ .text
+ .global _start
+_start:
+ bcl 20,31,1f
+1: mflr 30
+ addis 30,30,(_GLOBAL_OFFSET_TABLE_-1b)@ha
+ addi 30,30,(_GLOBAL_OFFSET_TABLE_-1b)@l
+ bl _exit@plt
+ b _start
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/powerpc.exp b/binutils-2.21/ld/testsuite/ld-powerpc/powerpc.exp
new file mode 100644
index 0000000..6cb797e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/powerpc.exp
@@ -0,0 +1,220 @@
+# Expect script for ld-powerpc tests
+# Copyright 2002, 2003, 2005, 2006, 2007, 2008, 2009 Free Software Foundation
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+if { ![istarget "powerpc*-*-*"] } {
+ return
+}
+
+if {[istarget "*-*-vxworks"]} {
+ set ppcvxtests {
+ {"VxWorks shared library test 1 (default script)" "-shared"
+ "-mregnames" {vxworks1-lib.s}
+ {{readelf --segments vxworks1-lib.sd}}
+ "libvxworks1.so"}
+ {"VxWorks shared library test 1" "-shared -Tvxworks1.ld"
+ "-mregnames" {vxworks1-lib.s}
+ {{readelf --relocs vxworks1-lib.rd} {objdump -dr vxworks1-lib.dd}
+ {readelf --symbols vxworks1-lib.nd} {readelf -d vxworks1-lib.td}}
+ "libvxworks1.so"}
+ {"VxWorks executable test 1 (dynamic)" \
+ "tmpdir/libvxworks1.so -Tvxworks1.ld -q --force-dynamic"
+ "-mregnames" {vxworks1.s}
+ {{readelf --relocs vxworks1.rd} {objdump -dr vxworks1.dd}}
+ "vxworks1"}
+ {"VxWorks executable test 2 (dynamic)" \
+ "-Tvxworks1.ld -q --force-dynamic"
+ "-mregnames" {vxworks2.s}
+ {{readelf --segments vxworks2.sd}}
+ "vxworks2"}
+ {"VxWorks executable test 2 (static)"
+ "-Tvxworks1.ld"
+ "-mregnames" {vxworks2.s}
+ {{readelf --segments vxworks2-static.sd}}
+ "vxworks2"}
+ {"VxWorks relax test"
+ "-Tvxworks1.ld --relax -q"
+ "-mregnames" {vxworks-relax.s}
+ {{readelf --relocs vxworks-relax.rd}}
+ "vxworks-relax"}
+ {"VxWorks relocatable relax test"
+ "-Tvxworks1.ld -r --relax -q"
+ "-mregnames" {vxworks-relax-2.s}
+ {{readelf --relocs vxworks-relax-2.rd}}
+ "vxworks-relax-2"}
+ }
+ run_ld_link_tests $ppcvxtests
+ run_dump_test "vxworks1-static"
+ return
+}
+
+# powerpc ELF only at the moment. Disable for nto too, even though it
+# is ELF, because we pass -melf32ppc to ld and powerpc-nto-ld wants
+# -melf32ppcnto.
+
+if { [istarget "*-*-macos*"] || [istarget "*-*-netware*"]
+ || [istarget "*-*-pe"] || [istarget "*-*-winnt*"]
+ || [istarget "*-*-cygwin*"] || [istarget "*-*-aix*"]
+ || [istarget "*-*-beos*"] || [istarget "*-*-lynxos*"]
+ || [istarget "*-*-nto*"] } {
+ return
+}
+
+proc supports_ppc64 { } {
+ global ld
+
+ catch "exec $ld --help | grep emulations" tmp
+ if [ string match "*elf64ppc*" $tmp ] then {
+ return 1
+ } else {
+ return 0
+ }
+}
+
+# List contains test-items with 3 items followed by 2 lists:
+# 0:name 1:ld options 2:assembler options
+# 3:filenames of assembler files 4: action and options. 5: name of output file
+
+# Actions:
+# objdump: Apply objdump options on result. Compare with regex (last arg).
+# nm: Apply nm options on result. Compare with regex (last arg).
+# readelf: Apply readelf options on result. Compare with regex (last arg).
+
+set ppcelftests {
+ {"Reloc section order" "-melf32ppc -shared -z nocombreloc" "-a32" {reloc.s}
+ {{objdump -hw reloc.d}} "reloc.so"}
+ {"APUinfo section processing" "-melf32ppc"
+ "-a32 -me500" {apuinfo1.s apuinfo-nul.s apuinfo2.s}
+ {{readelf -x2 apuinfo.rd}} "apuinfo"}
+ {"APUinfo NULL section processing" "-melf32ppc"
+ "-a32 -me500" {apuinfo-nul1.s apuinfo-nul.s}
+ {{readelf -x2 apuinfo-nul.rd}} "apuinfo"}
+ {"TLS32 static exec" "-melf32ppc" "-a32" {tls32.s tlslib32.s}
+ {{objdump -dr tls32.d} {objdump -sj.got tls32.g}
+ {objdump -sj.tdata tls32.t}}
+ "tls32"}
+ {"TLS32 helper shared library" "-shared -melf32ppc tmpdir/tlslib32.o" "" {}
+ {} "libtlslib32.so"}
+ {"TLS32 dynamic exec" "-melf32ppc tmpdir/tls32.o tmpdir/libtlslib32.so" "" {}
+ {{readelf -WSsrl tlsexe32.r} {objdump -dr tlsexe32.d}
+ {objdump -sj.got tlsexe32.g} {objdump -sj.tdata tlsexe32.t}}
+ "tlsexe32"}
+ {"TLS32 shared" "-shared -melf32ppc tmpdir/tls32.o" "" {}
+ {{readelf -WSsrl tlsso32.r} {objdump -dr tlsso32.d}
+ {objdump -sj.got tlsso32.g} {objdump -sj.tdata tlsso32.t}}
+ "tls32.so"}
+ {"TLS32 markers" "-melf32ppc" "-a32" {tlsmark32.s tlslib32.s}
+ {{objdump -dr tlsmark32.d}}
+ "tlsmark32"}
+ {"Shared library with global symbol" "-shared -melf32ppc" "-a32" {sdalib.s}
+ {} "sdalib.so"}
+ {"Dynamic application with SDA" "-melf32ppc tmpdir/sdalib.so" "-a32" {sdadyn.s}
+ {{objdump -R sdadyn.d}} "sdadyn"}
+ {"relaxing" "-melf32ppc --relax -Ttext=0 --defsym far=0x80001234 --defsym near=0x00004320" "-a32" "relax.s"
+ {{objdump -dr relax.d}}
+ "relax"}
+ {"relocatable relaxing" "-melf32ppc -r --relax" "-a32" "relax.s"
+ {{objdump -dr relaxr.d}}
+ "relax"}
+}
+
+set ppc64elftests {
+ {"TLS static exec" "-melf64ppc" "-a64" {tls.s tlslib.s}
+ {{objdump -dr tls.d} {objdump -sj.got tls.g} {objdump -sj.tdata tls.t}}
+ "tls"}
+ {"TLS helper shared library" "-shared -melf64ppc tmpdir/tlslib.o" "" {}
+ {} "libtlslib.so"}
+ {"TLS helper old shared lib" "-shared -melf64ppc" "-a64" {oldtlslib.s}
+ {} "liboldlib.so"}
+ {"TLS dynamic exec" "-melf64ppc tmpdir/tls.o tmpdir/libtlslib.so" "" {}
+ {{readelf -WSsrl tlsexe.r} {objdump -dr tlsexe.d}
+ {objdump -sj.got tlsexe.g} {objdump -sj.tdata tlsexe.t}}
+ "tlsexe"}
+ {"TLS dynamic old" "-melf64ppc tmpdir/tls.o tmpdir/liboldlib.so" "" {}
+ {{readelf -WSsrl tlsexe.r} {objdump -dr tlsexe.d}
+ {objdump -sj.got tlsexe.g} {objdump -sj.tdata tlsexe.t}}
+ "tlsexeold"}
+ {"TLS shared" "-shared -melf64ppc tmpdir/tls.o" "" {}
+ {{readelf -WSsrl tlsso.r} {objdump -dr tlsso.d}
+ {objdump -sj.got tlsso.g} {objdump -sj.tdata tlsso.t}}
+ "tls.so"}
+ {"TLSTOC static exec" "-melf64ppc tmpdir/tlslib.o " "-a64" {tlstoc.s}
+ {{objdump -dr tlstoc.d} {objdump -sj.got tlstoc.g}
+ {objdump -sj.tdata tlstoc.t}}
+ "tlstoc"}
+ {"TLSTOC dynamic exec" "-melf64ppc tmpdir/tlstoc.o tmpdir/libtlslib.so"
+ "" {}
+ {{readelf -WSsrl tlsexetoc.r} {objdump -dr tlsexetoc.d}
+ {objdump -sj.got tlsexetoc.g} {objdump -sj.tdata tlsexetoc.t}}
+ "tlsexetoc"}
+ {"TLSTOC dynamic old" "-melf64ppc tmpdir/tlstoc.o tmpdir/liboldlib.so"
+ "" {}
+ {{readelf -WSsrl tlsexetoc.r} {objdump -dr tlsexetoc.d}
+ {objdump -sj.got tlsexetoc.g} {objdump -sj.tdata tlsexetoc.t}}
+ "tlsexetocold"}
+ {"TLSTOC shared" "-shared -melf64ppc tmpdir/tlstoc.o" "" {}
+ {{readelf -WSsrl tlstocso.r} {objdump -dr tlstocso.d}
+ {objdump -sj.got tlstocso.g} {objdump -sj.tdata tlstocso.t}}
+ "tlstoc.so"}
+ {"TLS markers" "-melf64ppc" "-a64" {tlsmark.s tlslib.s}
+ {{objdump -dr tlsmark.d}}
+ "tlsmark"}
+ {"sym@tocbase" "-shared -melf64ppc" "-a64" {symtocbase-1.s symtocbase-2.s}
+ {{objdump -dj.data symtocbase.d}} "symtocbase.so"}
+ {"TOC opt" "-melf64ppc" "-a64" {tocopt.s}
+ {{objdump -s tocopt.d}} "tocopt"}
+}
+
+
+run_ld_link_tests $ppcelftests
+
+if [ supports_ppc64 ] then {
+ run_ld_link_tests $ppc64elftests
+ run_dump_test "relbrlt"
+}
+
+run_dump_test "plt1"
+
+run_dump_test "attr-gnu-4-00"
+run_dump_test "attr-gnu-4-01"
+run_dump_test "attr-gnu-4-02"
+run_dump_test "attr-gnu-4-03"
+run_dump_test "attr-gnu-4-10"
+run_dump_test "attr-gnu-4-11"
+run_dump_test "attr-gnu-4-12"
+run_dump_test "attr-gnu-4-13"
+run_dump_test "attr-gnu-4-14"
+run_dump_test "attr-gnu-4-20"
+run_dump_test "attr-gnu-4-21"
+run_dump_test "attr-gnu-4-22"
+run_dump_test "attr-gnu-4-23"
+run_dump_test "attr-gnu-4-24"
+run_dump_test "attr-gnu-4-31"
+run_dump_test "attr-gnu-4-32"
+run_dump_test "attr-gnu-4-33"
+run_dump_test "attr-gnu-4-34"
+run_dump_test "attr-gnu-4-41"
+
+run_dump_test "attr-gnu-8-11"
+run_dump_test "attr-gnu-8-23"
+run_dump_test "attr-gnu-8-31"
+
+run_dump_test "attr-gnu-12-11"
+run_dump_test "attr-gnu-12-21"
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/relax.d b/binutils-2.21/ld/testsuite/ld-powerpc/relax.d
new file mode 100644
index 0000000..5a6b3dd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/relax.d
@@ -0,0 +1,15 @@
+
+.*: file format .*
+
+Disassembly of section .text:
+
+00000000 <_start>:
+ 0: 48 00 43 21 bl 4320 <near>
+ 4: 48 00 00 11 bl 14 <_start\+0x14>
+ 8: 48 00 43 19 bl 4320 <near>
+ c: 48 00 00 09 bl 14 <_start\+0x14>
+ 10: 4b ff ff f0 b 0 <.*>
+ 14: 3d 80 80 00 lis r12,-32768
+ 18: 39 8c 12 34 addi r12,r12,4660
+ 1c: 7d 89 03 a6 mtctr r12
+ 20: 4e 80 04 20 bctr
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/relax.s b/binutils-2.21/ld/testsuite/ld-powerpc/relax.s
new file mode 100644
index 0000000..11afc53
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/relax.s
@@ -0,0 +1,7 @@
+ .globl _start
+_start:
+ bl near
+ bl far
+ bl near
+ bl far
+ b _start
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/relaxr.d b/binutils-2.21/ld/testsuite/ld-powerpc/relaxr.d
new file mode 100644
index 0000000..6e55984
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/relaxr.d
@@ -0,0 +1,26 @@
+
+.*: file format .*
+
+Disassembly of section .text:
+
+00000000 <_start>:
+ 0: 48 00 00 15 bl 14 <_start\+0x14>
+ 4: 48 00 00 21 bl 24 <_start\+0x24>
+ 8: 48 00 00 0d bl 14 <_start\+0x14>
+ 8: R_PPC_NONE \*ABS\*
+ c: 48 00 00 19 bl 24 <_start\+0x24>
+ c: R_PPC_NONE \*ABS\*
+ 10: 48 00 00 00 b 10 <_start\+0x10>
+ 10: R_PPC_REL24 _start
+ 14: 3d 80 00 00 lis r12,0
+ 16: R_PPC_ADDR16_HA near
+ 18: 39 8c 00 00 addi r12,r12,0
+ 1a: R_PPC_ADDR16_LO near
+ 1c: 7d 89 03 a6 mtctr r12
+ 20: 4e 80 04 20 bctr
+ 24: 3d 80 00 00 lis r12,0
+ 26: R_PPC_ADDR16_HA far
+ 28: 39 8c 00 00 addi r12,r12,0
+ 2a: R_PPC_ADDR16_LO far
+ 2c: 7d 89 03 a6 mtctr r12
+ 30: 4e 80 04 20 bctr
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/relbrlt.d b/binutils-2.21/ld/testsuite/ld-powerpc/relbrlt.d
new file mode 100644
index 0000000..69321eb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/relbrlt.d
@@ -0,0 +1,60 @@
+#source: relbrlt.s
+#as: -a64
+#ld: -melf64ppc --emit-relocs
+#objdump: -Dr
+
+.*: file format elf64-powerpc
+
+Disassembly of section \.text:
+
+0*100000b0 <_start>:
+[0-9a-f ]*: 49 bf 00 2d bl .*
+[0-9a-f ]*: R_PPC64_REL24 \.text\+0x37e003c
+[0-9a-f ]*: 60 00 00 00 nop
+[0-9a-f ]*: 49 bf 00 19 bl .*
+[0-9a-f ]*: R_PPC64_REL24 \.text\+0x3bf0020
+[0-9a-f ]*: 60 00 00 00 nop
+[0-9a-f ]*: 49 bf 00 21 bl .*
+[0-9a-f ]*: R_PPC64_REL24 \.text\+0x57e0024
+[0-9a-f ]*: 60 00 00 00 nop
+[0-9a-f ]*: 00 00 00 00 \.long 0x0
+[0-9a-f ]*: 4b ff ff e4 b .* <_start>
+ \.\.\.
+
+[0-9a-f ]*<.*plt_branch.*>:
+[0-9a-f ]*: e9 62 80 00 ld r11,-32768\(r2\)
+[0-9a-f ]*: R_PPC64_TOC16_DS \*ABS\*\+0x157f00d8
+[0-9a-f ]*: 7d 69 03 a6 mtctr r11
+[0-9a-f ]*: 4e 80 04 20 bctr
+
+[0-9a-f ]*<.*long_branch.*>:
+[0-9a-f ]*: 49 bf 00 10 b .* <far>
+[0-9a-f ]*: R_PPC64_REL24 \*ABS\*\+0x137e00ec
+
+[0-9a-f ]*<.*plt_branch.*>:
+[0-9a-f ]*: e9 62 80 08 ld r11,-32760\(r2\)
+[0-9a-f ]*: R_PPC64_TOC16_DS \*ABS\*\+0x157f00e0
+[0-9a-f ]*: 7d 69 03 a6 mtctr r11
+[0-9a-f ]*: 4e 80 04 20 bctr
+ \.\.\.
+
+0*137e00ec <far>:
+[0-9a-f ]*: 4e 80 00 20 blr
+ \.\.\.
+
+0*13bf00d0 <far2far>:
+[0-9a-f ]*: 4e 80 00 20 blr
+ \.\.\.
+
+0*157e00d4 <huge>:
+[0-9a-f ]*: 4e 80 00 20 blr
+
+Disassembly of section \.branch_lt:
+
+0*157f00d8 <\.branch_lt>:
+[0-9a-f ]*: 00 00 00 00 .*
+[0-9a-f ]*: R_PPC64_RELATIVE \*ABS\*\+0x13bf00d0
+[0-9a-f ]*: 13 bf 00 d0 .*
+[0-9a-f ]*: 00 00 00 00 .*
+[0-9a-f ]*: R_PPC64_RELATIVE \*ABS\*\+0x157e00d4
+[0-9a-f ]*: 15 7e 00 d4 .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/relbrlt.s b/binutils-2.21/ld/testsuite/ld-powerpc/relbrlt.s
new file mode 100644
index 0000000..cee0cdd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/relbrlt.s
@@ -0,0 +1,34 @@
+ .text
+ .global _start
+_start:
+1:
+ bl far
+ nop
+ bl far2far
+ nop
+ bl huge
+ nop
+ .long 0
+ b 1b
+ .space 0x1bf0000
+
+ .section .text.pad1,"ax"
+ .space 0x1bf0000
+
+ .section .text.far,"ax"
+far:
+ blr
+
+ .section .text.pad2,"ax"
+ .space 0x40ffe0
+
+ .section .text.far2far,"ax"
+far2far:
+ blr
+
+ .section .text.pad3,"ax"
+ .space 0x1bf0000
+
+ .section .text.huge,"ax"
+huge:
+ blr
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/reloc.d b/binutils-2.21/ld/testsuite/ld-powerpc/reloc.d
new file mode 100644
index 0000000..1c7eb8a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/reloc.d
@@ -0,0 +1,13 @@
+# Test that orphan reloc sections are placed before .rela.plt even when
+# .rela.plt is the only reloc section.
+
+#source: reloc.s
+#ld: -shared -z nocombreloc
+#objdump: -hw
+
+.*: +file format elf.*
+#...
+.*\.relaplatypus.*
+#...
+.*\.rela\.plt.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/reloc.s b/binutils-2.21/ld/testsuite/ld-powerpc/reloc.s
new file mode 100644
index 0000000..4e66151
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/reloc.s
@@ -0,0 +1,9 @@
+ .section echidna
+ .long .text
+
+ .section platypus,"ax"
+ .long .text
+
+ .text
+ b _start@plt
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/sdadyn.d b/binutils-2.21/ld/testsuite/ld-powerpc/sdadyn.d
new file mode 100644
index 0000000..42e389f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/sdadyn.d
@@ -0,0 +1,8 @@
+
+.*: +file format elf32-powerpc
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+#...
+.* R_PPC_COPY lib_var
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/sdadyn.s b/binutils-2.21/ld/testsuite/ld-powerpc/sdadyn.s
new file mode 100644
index 0000000..1b2d13f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/sdadyn.s
@@ -0,0 +1,3 @@
+ .globl _start
+_start:
+ lwz 3,lib_var@sda21(0)
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/sdalib.s b/binutils-2.21/ld/testsuite/ld-powerpc/sdalib.s
new file mode 100644
index 0000000..69b0391
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/sdalib.s
@@ -0,0 +1,5 @@
+ .globl lib_var
+ .type lib_var, @object
+ .size lib_var, 2
+lib_var:
+ .word 1
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/symtocbase-1.s b/binutils-2.21/ld/testsuite/ld-powerpc/symtocbase-1.s
new file mode 100644
index 0000000..ba6f073
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/symtocbase-1.s
@@ -0,0 +1,18 @@
+.section .toc,"aw",@progbits
+ .align 15
+ .globl x
+x: .quad .x,.x@tocbase,0
+.LCi: .quad i
+ .space 48 * 1024
+.data
+ .globl i
+i: .long 0
+.L1bases:
+ .quad .TOC.@tocbase
+ .quad .x@tocbase
+ .quad .y@tocbase
+.text
+ .globl .x
+.x:
+ ld 9,.LCi@toc(2)
+ blr
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/symtocbase-2.s b/binutils-2.21/ld/testsuite/ld-powerpc/symtocbase-2.s
new file mode 100644
index 0000000..1176cb8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/symtocbase-2.s
@@ -0,0 +1,16 @@
+.section .toc,"aw",@progbits
+ .align 15
+ .globl y
+y: .quad .y,.y@tocbase,0
+.LCi: .quad i
+ .space 48 * 1024
+.data
+.L2bases:
+ .quad .TOC.@tocbase
+ .quad .x@tocbase
+ .quad .y@tocbase
+.text
+ .globl .y
+.y:
+ ld 9,.LCi@toc(2)
+ blr
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/symtocbase.d b/binutils-2.21/ld/testsuite/ld-powerpc/symtocbase.d
new file mode 100644
index 0000000..5ffab72
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/symtocbase.d
@@ -0,0 +1,24 @@
+#source: symtocbase-1.s
+#source: symtocbase-2.s
+#as: -a64
+#ld: -shared -melf64ppc
+#objdump: -dj.data
+#target: powerpc64*-*-*
+
+.*: file format elf64-powerpc
+
+Disassembly of section \.data:
+
+.* <i>:
+ \.\.\.
+.*: 00 02 80 00 \.long 0x28000
+.*: 00 00 00 00 \.long 0x0
+.*: 00 02 80 00 \.long 0x28000
+.*: 00 00 00 00 \.long 0x0
+.*: 00 03 80 00 \.long 0x38000
+.*: 00 00 00 00 \.long 0x0
+.*: 00 03 80 00 \.long 0x38000
+.*: 00 00 00 00 \.long 0x0
+.*: 00 02 80 00 \.long 0x28000
+.*: 00 00 00 00 \.long 0x0
+.*: 00 03 80 00 \.long 0x38000
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tls.d b/binutils-2.21/ld/testsuite/ld-powerpc/tls.d
new file mode 100644
index 0000000..abae98a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tls.d
@@ -0,0 +1,53 @@
+#source: tls.s
+#source: tlslib.s
+#as: -a64
+#ld: -melf64ppc
+#objdump: -dr
+#target: powerpc64*-*-*
+
+.*: +file format elf64-powerpc
+
+Disassembly of section \.text:
+
+0+100000e8 <_start>:
+ 100000e8: 3c 6d 00 00 addis r3,r13,0
+ 100000ec: 60 00 00 00 nop
+ 100000f0: 38 63 90 78 addi r3,r3,-28552
+ 100000f4: 3c 6d 00 00 addis r3,r13,0
+ 100000f8: 60 00 00 00 nop
+ 100000fc: 38 63 10 00 addi r3,r3,4096
+ 10000100: 3c 6d 00 00 addis r3,r13,0
+ 10000104: 60 00 00 00 nop
+ 10000108: 38 63 90 40 addi r3,r3,-28608
+ 1000010c: 3c 6d 00 00 addis r3,r13,0
+ 10000110: 60 00 00 00 nop
+ 10000114: 38 63 10 00 addi r3,r3,4096
+ 10000118: 39 23 80 48 addi r9,r3,-32696
+ 1000011c: 3d 23 00 00 addis r9,r3,0
+ 10000120: 81 49 80 50 lwz r10,-32688\(r9\)
+ 10000124: e9 22 80 10 ld r9,-32752\(r2\)
+ 10000128: 7d 49 18 2a ldx r10,r9,r3
+ 1000012c: 3d 2d 00 00 addis r9,r13,0
+ 10000130: a1 49 90 60 lhz r10,-28576\(r9\)
+ 10000134: 89 4d 90 68 lbz r10,-28568\(r13\)
+ 10000138: 3d 2d 00 00 addis r9,r13,0
+ 1000013c: 99 49 90 70 stb r10,-28560\(r9\)
+ 10000140: 3c 6d 00 00 addis r3,r13,0
+ 10000144: 60 00 00 00 nop
+ 10000148: 38 63 90 00 addi r3,r3,-28672
+ 1000014c: 3c 6d 00 00 addis r3,r13,0
+ 10000150: 60 00 00 00 nop
+ 10000154: 38 63 10 00 addi r3,r3,4096
+ 10000158: f9 43 80 08 std r10,-32760\(r3\)
+ 1000015c: 3d 23 00 00 addis r9,r3,0
+ 10000160: 91 49 80 10 stw r10,-32752\(r9\)
+ 10000164: e9 22 80 08 ld r9,-32760\(r2\)
+ 10000168: 7d 49 19 2a stdx r10,r9,r3
+ 1000016c: 3d 2d 00 00 addis r9,r13,0
+ 10000170: b1 49 90 60 sth r10,-28576\(r9\)
+ 10000174: e9 4d 90 2a lwa r10,-28632\(r13\)
+ 10000178: 3d 2d 00 00 addis r9,r13,0
+ 1000017c: a9 49 90 30 lha r10,-28624\(r9\)
+
+0+10000180 <\.__tls_get_addr>:
+ 10000180: 4e 80 00 20 blr
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tls.g b/binutils-2.21/ld/testsuite/ld-powerpc/tls.g
new file mode 100644
index 0000000..051ddd1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tls.g
@@ -0,0 +1,12 @@
+#source: tls.s
+#source: tlslib.s
+#as: -a64
+#ld: -melf64ppc
+#objdump: -sj.got
+#target: powerpc64*-*-*
+
+.*: +file format elf64-powerpc
+
+Contents of section \.got:
+ 100101e0 00000000 100181e0 ffffffff ffff8018 .*
+ 100101f0 ffffffff ffff8058 .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tls.s b/binutils-2.21/ld/testsuite/ld-powerpc/tls.s
new file mode 100644
index 0000000..5ad9f3d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tls.s
@@ -0,0 +1,92 @@
+ .section ".tbss","awT",@nobits
+ .global _start,gd0,ld0,ld1,ld2,ie0,le0,le1
+ .align 3
+gd0: .space 8
+ld0: .space 8
+ld1: .space 8
+ld2: .space 8
+ie0: .space 8
+le0: .space 8
+le1: .space 8
+
+ .section ".tdata","awT",@progbits
+ .align 3
+gd4: .quad 0x123456789abcdef0
+ld4: .quad 0x23456789abcdef01
+ld5: .quad 0x3456789abcdef012
+ld6: .quad 0x456789abcdef0123
+ie4: .quad 0x56789abcdef01234
+le4: .quad 0x6789abcdef012345
+le5: .quad 0x789abcdef0123456
+
+ .text
+_start:
+#extern syms
+#GD
+ addi 3,2,gd@got@tlsgd #R_PPC64_GOT_TLSGD16 gd
+ bl .__tls_get_addr #R_PPC64_REL24 .__tls_get_addr
+ nop
+
+#LD
+ addi 3,2,ld@got@tlsld #R_PPC64_GOT_TLSLD16 ld
+ bl .__tls_get_addr #R_PPC64_REL24 .__tls_get_addr
+ nop
+
+#global syms
+#GD
+ addi 3,2,gd0@got@tlsgd #R_PPC64_GOT_TLSGD16 gd0
+ bl .__tls_get_addr #R_PPC64_REL24 .__tls_get_addr
+ nop
+
+#LD
+ addi 3,2,ld0@got@tlsld #R_PPC64_GOT_TLSLD16 ld0
+ bl .__tls_get_addr #R_PPC64_REL24 .__tls_get_addr
+ nop
+
+ addi 9,3,ld0@dtprel #R_PPC64_DTPREL16 ld0
+
+ addis 9,3,ld1@dtprel@ha #R_PPC64_DTPREL16_HA ld1
+ lwz 10,ld1@dtprel@l(9) #R_PPC64_DTPREL16_LO ld1
+
+ ld 9,ld2@got@dtprel(2) #R_PPC64_GOT_DTPREL16_DS ld2
+ ldx 10,9,3
+
+#IE
+ ld 9,ie0@got@tprel(2) #R_PPC64_GOT_TPREL16_DS ie0
+ lhzx 10,9,ie0@tls #R_PPC64_TLS ie0
+
+#LE
+ lbz 10,le0@tprel(13) #R_PPC64_TPREL16 le0
+
+ addis 9,13,le1@tprel@ha #R_PPC64_TPREL16_HA le1
+ stb 10,le1@tprel@l(9) #R_PPC64_TPREL16_LO le1
+
+#local syms
+#GD
+ addi 3,2,gd4@got@tlsgd #R_PPC64_GOT_TLSGD16 gd4
+ bl .__tls_get_addr #R_PPC64_REL24 .__tls_get_addr
+ nop
+
+#LD
+ addi 3,2,ld4@got@tlsld #R_PPC64_GOT_TLSLD16 ld4
+ bl .__tls_get_addr #R_PPC64_REL24 .__tls_get_addr
+ nop
+
+ std 10,ld4@dtprel(3) #R_PPC64_DTPREL16_DS ld4
+
+ addis 9,3,ld5@dtprel@ha #R_PPC64_DTPREL16_HA ld5
+ stw 10,ld5@dtprel@l(9) #R_PPC64_DTPREL16_LO ld5
+
+ ld 9,ld6@got@dtprel(2) #R_PPC64_GOT_DTPREL16_DS ld6
+ stdx 10,9,3
+
+#IE
+ ld 9,ie0@got@tprel(2) #R_PPC64_GOT_TPREL16_DS ie4
+ sthx 10,9,ie0@tls #R_PPC64_TLS ie4
+
+#LE
+ lwa 10,le4@tprel(13) #R_PPC64_TPREL16 le4
+
+ addis 9,13,le5@tprel@ha #R_PPC64_TPREL16_HA le5
+ lha 10,le5@tprel@l(9) #R_PPC64_TPREL16_LO le5
+
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tls.t b/binutils-2.21/ld/testsuite/ld-powerpc/tls.t
new file mode 100644
index 0000000..32a909b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tls.t
@@ -0,0 +1,14 @@
+#source: tls.s
+#source: tlslib.s
+#as: -a64
+#ld: -melf64ppc
+#objdump: -sj.tdata
+#target: powerpc64*-*-*
+
+.*: +file format elf64-powerpc
+
+Contents of section \.tdata:
+.* 12345678 9abcdef0 23456789 abcdef01 .*
+.* 3456789a bcdef012 456789ab cdef0123 .*
+.* 56789abc def01234 6789abcd ef012345 .*
+.* 789abcde f0123456 00c0ffee .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tls32.d b/binutils-2.21/ld/testsuite/ld-powerpc/tls32.d
new file mode 100644
index 0000000..86fe04a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tls32.d
@@ -0,0 +1,50 @@
+#source: tls32.s
+#source: tlslib32.s
+#as: -a32
+#ld: -melf32ppc
+#objdump: -dr
+#target: powerpc*-*-*
+
+.*: +file format elf32-powerpc
+
+Disassembly of section \.text:
+
+0+1800094 <_start>:
+ 1800094: 3c 62 00 00 addis r3,r2,0
+ 1800098: 38 63 90 3c addi r3,r3,-28612
+ 180009c: 3c 62 00 00 addis r3,r2,0
+ 18000a0: 38 63 10 00 addi r3,r3,4096
+ 18000a4: 3c 62 00 00 addis r3,r2,0
+ 18000a8: 38 63 90 20 addi r3,r3,-28640
+ 18000ac: 3c 62 00 00 addis r3,r2,0
+ 18000b0: 38 63 10 00 addi r3,r3,4096
+ 18000b4: 39 23 80 24 addi r9,r3,-32732
+ 18000b8: 3d 23 00 00 addis r9,r3,0
+ 18000bc: 81 49 80 28 lwz r10,-32728\(r9\)
+ 18000c0: 3d 22 00 00 addis r9,r2,0
+ 18000c4: a1 49 90 30 lhz r10,-28624\(r9\)
+ 18000c8: 89 42 90 34 lbz r10,-28620\(r2\)
+ 18000cc: 3d 22 00 00 addis r9,r2,0
+ 18000d0: 99 49 90 38 stb r10,-28616\(r9\)
+ 18000d4: 3c 62 00 00 addis r3,r2,0
+ 18000d8: 38 63 90 00 addi r3,r3,-28672
+ 18000dc: 3c 62 00 00 addis r3,r2,0
+ 18000e0: 38 63 10 00 addi r3,r3,4096
+ 18000e4: 91 43 80 04 stw r10,-32764\(r3\)
+ 18000e8: 3d 23 00 00 addis r9,r3,0
+ 18000ec: 91 49 80 08 stw r10,-32760\(r9\)
+ 18000f0: 3d 22 00 00 addis r9,r2,0
+ 18000f4: b1 49 90 30 sth r10,-28624\(r9\)
+ 18000f8: a1 42 90 14 lhz r10,-28652\(r2\)
+ 18000fc: 3d 22 00 00 addis r9,r2,0
+ 1800100: a9 49 90 18 lha r10,-28648\(r9\)
+
+0+1800104 <__tls_get_addr>:
+ 1800104: 4e 80 00 20 blr
+Disassembly of section \.got:
+
+0+1810128 <_GLOBAL_OFFSET_TABLE_-0x4>:
+ 1810128: 4e 80 00 21 blrl
+
+0+181012c <_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tls32.g b/binutils-2.21/ld/testsuite/ld-powerpc/tls32.g
new file mode 100644
index 0000000..e8c72cc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tls32.g
@@ -0,0 +1,11 @@
+#source: tls32.s
+#source: tlslib32.s
+#as: -a32
+#ld: -melf32ppc
+#objdump: -sj.got
+#target: powerpc*-*-*
+
+.*: +file format elf32-powerpc
+
+Contents of section \.got:
+ 1810128 4e800021 00000000 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tls32.s b/binutils-2.21/ld/testsuite/ld-powerpc/tls32.s
new file mode 100644
index 0000000..1c3092d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tls32.s
@@ -0,0 +1,80 @@
+ .section ".tbss","awT",@nobits
+ .global _start,gd0,ld0,ld1,ld2,ie0,le0,le1
+ .align 2
+gd0: .space 4
+ld0: .space 4
+ld1: .space 4
+ld2: .space 4
+ie0: .space 4
+le0: .space 4
+le1: .space 4
+
+ .section ".tdata","awT",@progbits
+ .align 2
+gd4: .long 0x12345678
+ld4: .long 0x23456789
+ld5: .long 0x3456789a
+ld6: .long 0x456789ab
+ie4: .long 0x56789abc
+le4: .long 0x6789abcd
+le5: .long 0x789abcde
+
+ .text
+_start:
+#extern syms
+#GD
+ addi 3,31,gd@got@tlsgd #R_PPC_GOT_TLSGD16 gd
+ bl __tls_get_addr #R_PPC_REL24 __tls_get_addr
+
+#LD
+ addi 3,31,ld@got@tlsld #R_PPC_GOT_TLSLD16 ld
+ bl __tls_get_addr #R_PPC_REL24 __tls_get_addr
+
+#global syms
+#GD
+ addi 3,31,gd0@got@tlsgd #R_PPC_GOT_TLSGD16 gd0
+ bl __tls_get_addr+0x8000@plt #R_PPC_PLTREL24 __tls_get_addr
+
+#LD
+ addi 3,31,ld0@got@tlsld #R_PPC_GOT_TLSLD16 ld0
+ bl __tls_get_addr+0x8000@plt #R_PPC_PLTREL24 __tls_get_addr
+
+ addi 9,3,ld0@dtprel #R_PPC_DTPREL16 ld0
+
+ addis 9,3,ld1@dtprel@ha #R_PPC_DTPREL16_HA ld1
+ lwz 10,ld1@dtprel@l(9) #R_PPC_DTPREL16_LO ld1
+
+#IE
+ lwz 9,ie0@got@tprel(31) #R_PPC_GOT_TPREL16 ie0
+ lhzx 10,9,ie0@tls #R_PPC_TLS ie0
+
+#LE
+ lbz 10,le0@tprel(2) #R_PPC_TPREL16 le0
+
+ addis 9,2,le1@tprel@ha #R_PPC_TPREL16_HA le1
+ stb 10,le1@tprel@l(9) #R_PPC_TPREL16_LO le1
+
+#local syms, use a different got reg too.
+#GD
+ addi 3,30,gd4@got@tlsgd #R_PPC_GOT_TLSGD16 gd4
+ bl __tls_get_addr #R_PPC_REL24 __tls_get_addr
+
+#LD
+ addi 3,30,ld4@got@tlsld #R_PPC_GOT_TLSLD16 ld4
+ bl __tls_get_addr #R_PPC_REL24 __tls_get_addr
+
+ stw 10,ld4@dtprel(3) #R_PPC_DTPREL16 ld4
+
+ addis 9,3,ld5@dtprel@ha #R_PPC_DTPREL16_HA ld5
+ stw 10,ld5@dtprel@l(9) #R_PPC_DTPREL16_LO ld5
+
+#IE
+ lwz 9,ie0@got@tprel(30) #R_PPC_GOT_TPREL16 ie4
+ sthx 10,9,ie0@tls #R_PPC_TLS ie4
+
+#LE
+ lhz 10,le4@tprel(2) #R_PPC_TPREL16 le4
+
+ addis 9,2,le5@tprel@ha #R_PPC_TPREL16_HA le5
+ lha 10,le5@tprel@l(9) #R_PPC_TPREL16_LO le5
+
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tls32.t b/binutils-2.21/ld/testsuite/ld-powerpc/tls32.t
new file mode 100644
index 0000000..8149a28
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tls32.t
@@ -0,0 +1,12 @@
+#source: tls32.s
+#source: tlslib32.s
+#as: -a32
+#ld: -melf32ppc
+#objdump: -sj.tdata
+#target: powerpc*-*-*
+
+.*: +file format elf32-powerpc
+
+Contents of section \.tdata:
+ 1810108 12345678 23456789 3456789a 456789ab .*
+ 1810118 56789abc 6789abcd 789abcde 00c0ffee .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlsexe.d b/binutils-2.21/ld/testsuite/ld-powerpc/tlsexe.d
new file mode 100644
index 0000000..54db23d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlsexe.d
@@ -0,0 +1,90 @@
+#source: tls.s
+#as: -a64
+#ld: -melf64ppc tmpdir/libtlslib.so
+#objdump: -dr
+#target: powerpc64*-*-*
+
+.*: +file format elf64-powerpc
+
+Disassembly of section \.text:
+
+.* <00000010\.plt_call\.__tls_get_addr(|_opt)\+0>:
+.* e9 63 00 00 ld r11,0\(r3\)
+.* e9 83 00 08 ld r12,8\(r3\)
+.* 7c 60 1b 78 mr r0,r3
+.* 2c 2b 00 00 cmpdi r11,0
+.* 7c 6c 6a 14 add r3,r12,r13
+.* 4d 82 00 20 beqlr
+.* 7c 03 03 78 mr r3,r0
+.* 7d 68 02 a6 mflr r11
+.* f9 61 00 20 std r11,32\(r1\)
+.* f8 41 00 28 std r2,40\(r1\)
+.* e9 62 80 48 ld r11,-32696\(r2\)
+.* 7d 69 03 a6 mtctr r11
+.* e9 62 80 58 ld r11,-32680\(r2\)
+.* e8 42 80 50 ld r2,-32688\(r2\)
+.* 4e 80 04 21 bctrl
+.* e9 61 00 20 ld r11,32\(r1\)
+.* e8 41 00 28 ld r2,40\(r1\)
+.* 7d 68 03 a6 mtlr r11
+.* 4e 80 00 20 blr
+
+.* <_start>:
+.* e8 62 80 10 ld r3,-32752\(r2\)
+.* 60 00 00 00 nop
+.* 7c 63 6a 14 add r3,r3,r13
+.* 38 62 80 18 addi r3,r2,-32744
+.* 4b ff ff a5 bl .*
+.* 60 00 00 00 nop
+.* 3c 6d 00 00 addis r3,r13,0
+.* 60 00 00 00 nop
+.* 38 63 90 38 addi r3,r3,-28616
+.* 3c 6d 00 00 addis r3,r13,0
+.* 60 00 00 00 nop
+.* 38 63 10 00 addi r3,r3,4096
+.* 39 23 80 40 addi r9,r3,-32704
+.* 3d 23 00 00 addis r9,r3,0
+.* 81 49 80 48 lwz r10,-32696\(r9\)
+.* e9 22 80 28 ld r9,-32728\(r2\)
+.* 7d 49 18 2a ldx r10,r9,r3
+.* 3d 2d 00 00 addis r9,r13,0
+.* a1 49 90 58 lhz r10,-28584\(r9\)
+.* 89 4d 90 60 lbz r10,-28576\(r13\)
+.* 3d 2d 00 00 addis r9,r13,0
+.* 99 49 90 68 stb r10,-28568\(r9\)
+.* 3c 6d 00 00 addis r3,r13,0
+.* 60 00 00 00 nop
+.* 38 63 90 00 addi r3,r3,-28672
+.* 3c 6d 00 00 addis r3,r13,0
+.* 60 00 00 00 nop
+.* 38 63 10 00 addi r3,r3,4096
+.* f9 43 80 08 std r10,-32760\(r3\)
+.* 3d 23 00 00 addis r9,r3,0
+.* 91 49 80 10 stw r10,-32752\(r9\)
+.* e9 22 80 08 ld r9,-32760\(r2\)
+.* 7d 49 19 2a stdx r10,r9,r3
+.* 3d 2d 00 00 addis r9,r13,0
+.* b1 49 90 58 sth r10,-28584\(r9\)
+.* e9 4d 90 2a lwa r10,-28632\(r13\)
+.* 3d 2d 00 00 addis r9,r13,0
+.* a9 49 90 30 lha r10,-28624\(r9\)
+.* 60 00 00 00 nop
+.* 00 00 00 00 .*
+.* 00 01 02 00 .*
+.* <__glink_PLTresolve>:
+.* 7d 88 02 a6 mflr r12
+.* 42 9f 00 05 bcl- 20,4\*cr7\+so,.*
+.* 7d 68 02 a6 mflr r11
+.* e8 4b ff f0 ld r2,-16\(r11\)
+.* 7d 88 03 a6 mtlr r12
+.* 7d 82 5a 14 add r12,r2,r11
+.* e9 6c 00 00 ld r11,0\(r12\)
+.* e8 4c 00 08 ld r2,8\(r12\)
+.* 7d 69 03 a6 mtctr r11
+.* e9 6c 00 10 ld r11,16\(r12\)
+.* 4e 80 04 20 bctr
+.* 60 00 00 00 nop
+.* 60 00 00 00 nop
+.* 60 00 00 00 nop
+.* 38 00 00 00 li r0,0
+.* 4b ff ff c4 b .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlsexe.g b/binutils-2.21/ld/testsuite/ld-powerpc/tlsexe.g
new file mode 100644
index 0000000..c68175f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlsexe.g
@@ -0,0 +1,12 @@
+#source: tls.s
+#as: -a64
+#ld: -melf64ppc tmpdir/libtlslib.so
+#objdump: -sj.got
+#target: powerpc64*-*-*
+
+.*: +file format elf64-powerpc
+
+Contents of section \.got:
+.* 00000000 10018618 ffffffff ffff8018 .*
+.* 00000000 00000000 00000000 00000000 .*
+.* 00000000 00000000 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlsexe.r b/binutils-2.21/ld/testsuite/ld-powerpc/tlsexe.r
new file mode 100644
index 0000000..68b36bb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlsexe.r
@@ -0,0 +1,115 @@
+#source: tls.s
+#source: tlslib.s
+#as: -a64
+#ld: -melf64ppc
+#readelf: -WSsrl
+#target: powerpc64*-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
+ +\[[ 0-9]+\] \.interp +.*
+ +\[[ 0-9]+\] \.hash +.*
+ +\[[ 0-9]+\] \.dynsym +.*
+ +\[[ 0-9]+\] \.dynstr +.*
+ +\[[ 0-9]+\] \.rela\.dyn +.*
+ +\[[ 0-9]+\] \.rela\.plt +.*
+ +\[[ 0-9]+\] \.text +PROGBITS .* 0+130 0+ +AX +0 +0 +8
+ +\[[ 0-9]+\] \.tdata +PROGBITS .* 0+38 0+ WAT +0 +0 +8
+ +\[[ 0-9]+\] \.tbss +NOBITS .* 0+38 0+ WAT +0 +0 +8
+ +\[[ 0-9]+\] \.dynamic +DYNAMIC .* 0+160 10 +WA +4 +0 +8
+ +\[[ 0-9]+\] \.branch_lt + PROGBITS .* 0+ 0+ +WA +0 +0 +8
+ +\[[ 0-9]+\] \.got +PROGBITS .* 0+30 08 +WA +0 +0 +8
+ +\[[ 0-9]+\] \.plt +.*
+ +\[[ 0-9]+\] \.shstrtab +.*
+ +\[[ 0-9]+\] \.symtab +.*
+ +\[[ 0-9]+\] \.strtab +.*
+#...
+
+Elf file type is EXEC \(Executable file\)
+Entry point .*
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +PHDR +0x0+40 0x0+10000040 0x0+10000040 0x0+150 0x0+150 R E 0x8
+ +INTERP +0x0+190 0x0+10000190 0x0+10000190 0x0+11 0x0+11 R +0x1
+ +\[Requesting program interpreter: .*\]
+ +LOAD .* R E 0x10000
+ +LOAD .* RW +0x10000
+ +DYNAMIC .* RW +0x8
+ +TLS .* 0x0+38 0x0+70 R +0x8
+
+ Section to Segment mapping:
+ +Segment Sections\.\.\.
+ +0+ +
+ +01 +\.interp
+ +02 +\.interp \.hash \.dynsym \.dynstr \.rela\.dyn \.rela\.plt \.text
+ +03 +\.tdata \.dynamic (\.branch_lt |)\.got \.plt
+ +04 +\.dynamic
+ +05 +\.tdata \.tbss
+
+Relocation section '\.rela\.dyn' at offset .* contains 3 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_PPC64_TPREL64 +0+ gd \+ 0
+[0-9a-f ]+R_PPC64_DTPMOD64 +0+ ld \+ 0
+[0-9a-f ]+R_PPC64_DTPREL64 +0+50 ld2 \+ 0
+
+Relocation section '\.rela\.plt' at offset .* contains 1 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_PPC64_JMP_SLOT +0+ __tls_get_addr_opt \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND
+.* TLS +GLOBAL +DEFAULT +UND gd
+.* TLS +GLOBAL +DEFAULT +UND ld
+.* TLS +GLOBAL +DEFAULT +9 ld2
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* FUNC +GLOBAL +DEFAULT +UND __tls_get_addr_opt
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND
+.* SECTION +LOCAL +DEFAULT +1
+.* SECTION +LOCAL +DEFAULT +2
+.* SECTION +LOCAL +DEFAULT +3
+.* SECTION +LOCAL +DEFAULT +4
+.* SECTION +LOCAL +DEFAULT +5
+.* SECTION +LOCAL +DEFAULT +6
+.* SECTION +LOCAL +DEFAULT +7
+.* SECTION +LOCAL +DEFAULT +8
+.* SECTION +LOCAL +DEFAULT +9
+.* SECTION +LOCAL +DEFAULT +10
+.* SECTION +LOCAL +DEFAULT +11
+.* SECTION +LOCAL +DEFAULT +12
+.* SECTION +LOCAL +DEFAULT +13
+.* TLS +LOCAL +DEFAULT +8 gd4
+.* TLS +LOCAL +DEFAULT +8 ld4
+.* TLS +LOCAL +DEFAULT +8 ld5
+.* TLS +LOCAL +DEFAULT +8 ld6
+.* TLS +LOCAL +DEFAULT +8 ie4
+.* TLS +LOCAL +DEFAULT +8 le4
+.* TLS +LOCAL +DEFAULT +8 le5
+.* OBJECT +LOCAL +DEFAULT +10 _DYNAMIC
+.* (NOTYPE +LOCAL +DEFAULT +7 00000010\.plt_call\.__tls_get_addr(|_opt)\+0|(FUNC|NOTYPE) +LOCAL +DEFAULT +UND \.__tls_get_addr(|_opt))
+.* (NOTYPE +LOCAL +DEFAULT +7 __glink_PLTresolve|NOTYPE +LOCAL +DEFAULT +7 00000010\.plt_call\.__tls_get_addr(|_opt)\+0)
+.* ((FUNC|NOTYPE) +LOCAL +DEFAULT +UND \.__tls_get_addr(|_opt)|NOTYPE +LOCAL +DEFAULT +7 __glink_PLTresolve)
+.* GLOBAL +DEFAULT +UND gd
+.* GLOBAL +DEFAULT +9 le0
+.* GLOBAL +DEFAULT +9 ld0
+.* GLOBAL +DEFAULT +9 le1
+.* GLOBAL +DEFAULT +UND ld
+.* NOTYPE +GLOBAL +DEFAULT +7 _start
+.* TLS +GLOBAL +DEFAULT +9 ld2
+.* TLS +GLOBAL +DEFAULT +9 ld1
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* FUNC +GLOBAL +DEFAULT +UND __tls_get_addr_opt
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+.* TLS +GLOBAL +DEFAULT +9 gd0
+.* TLS +GLOBAL +DEFAULT +9 ie0
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlsexe.t b/binutils-2.21/ld/testsuite/ld-powerpc/tlsexe.t
new file mode 100644
index 0000000..bb512fd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlsexe.t
@@ -0,0 +1,13 @@
+#source: tls.s
+#as: -a64
+#ld: -melf64ppc tmpdir/libtlslib.so
+#objdump: -sj.tdata
+#target: powerpc64*-*-*
+
+.*: +file format elf64-powerpc
+
+Contents of section \.tdata:
+ .* 12345678 9abcdef0 23456789 abcdef01 .*
+ .* 3456789a bcdef012 456789ab cdef0123 .*
+ .* 56789abc def01234 6789abcd ef012345 .*
+ .* 789abcde f0123456 .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlsexe32.d b/binutils-2.21/ld/testsuite/ld-powerpc/tlsexe32.d
new file mode 100644
index 0000000..527ded0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlsexe32.d
@@ -0,0 +1,47 @@
+#source: tls32.s
+#as: -a32
+#ld: -melf32ppc tmpdir/libtlslib32.so
+#objdump: -dr
+#target: powerpc*-*-*
+
+.*: +file format elf32-powerpc
+
+Disassembly of section \.text:
+
+.* <_start>:
+.*: 80 7f ff f0 lwz r3,-16\(r31\)
+.*: 7c 63 12 14 add r3,r3,r2
+.*: 38 7f ff f4 addi r3,r31,-12
+.*: 48 01 01 85 bl .*<__tls_get_addr_opt@plt>
+.*: 3c 62 00 00 addis r3,r2,0
+.*: 38 63 90 1c addi r3,r3,-28644
+.*: 3c 62 00 00 addis r3,r2,0
+.*: 38 63 10 00 addi r3,r3,4096
+.*: 39 23 80 20 addi r9,r3,-32736
+.*: 3d 23 00 00 addis r9,r3,0
+.*: 81 49 80 24 lwz r10,-32732\(r9\)
+.*: 3d 22 00 00 addis r9,r2,0
+.*: a1 49 90 2c lhz r10,-28628\(r9\)
+.*: 89 42 90 30 lbz r10,-28624\(r2\)
+.*: 3d 22 00 00 addis r9,r2,0
+.*: 99 49 90 34 stb r10,-28620\(r9\)
+.*: 3c 62 00 00 addis r3,r2,0
+.*: 38 63 90 00 addi r3,r3,-28672
+.*: 3c 62 00 00 addis r3,r2,0
+.*: 38 63 10 00 addi r3,r3,4096
+.*: 91 43 80 04 stw r10,-32764\(r3\)
+.*: 3d 23 00 00 addis r9,r3,0
+.*: 91 49 80 08 stw r10,-32760\(r9\)
+.*: 3d 22 00 00 addis r9,r2,0
+.*: b1 49 90 2c sth r10,-28628\(r9\)
+.*: a1 42 90 14 lhz r10,-28652\(r2\)
+.*: 3d 22 00 00 addis r9,r2,0
+.*: a9 49 90 18 lha r10,-28648\(r9\)
+Disassembly of section \.got:
+
+.* <_GLOBAL_OFFSET_TABLE_-0x10>:
+ \.\.\.
+.*: 4e 80 00 21 blrl
+
+.* <_GLOBAL_OFFSET_TABLE_>:
+.*: 01 81 02 b8 00 00 00 00 00 00 00 00 .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlsexe32.g b/binutils-2.21/ld/testsuite/ld-powerpc/tlsexe32.g
new file mode 100644
index 0000000..c2023a8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlsexe32.g
@@ -0,0 +1,11 @@
+#source: tls32.s
+#as: -a32
+#ld: -melf32ppc tmpdir/libtlslib32.so
+#objdump: -sj.got
+#target: powerpc*-*-*
+
+.*: +file format elf32-powerpc
+
+Contents of section \.got:
+.* 00000000 00000000 00000000 4e800021 .*
+.* 018102b8 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlsexe32.r b/binutils-2.21/ld/testsuite/ld-powerpc/tlsexe32.r
new file mode 100644
index 0000000..6983b08
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlsexe32.r
@@ -0,0 +1,111 @@
+#source: tls32.s
+#source: tlslib32.s
+#as: -a32
+#ld: -melf32ppc
+#readelf: -WSsrl
+#target: powerpc*-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 00 +0 +0 +0
+ +\[[ 0-9]+\] \.interp +.*
+ +\[[ 0-9]+\] \.hash +.*
+ +\[[ 0-9]+\] \.dynsym +.*
+ +\[[ 0-9]+\] \.dynstr +.*
+ +\[[ 0-9]+\] \.rela\.dyn +.*
+ +\[[ 0-9]+\] \.rela\.plt +.*
+ +\[[ 0-9]+\] \.text +PROGBITS +[0-9a-f]+ [0-9a-f]+ 000070 00 +AX +0 +0 +1
+ +\[[ 0-9]+\] \.tdata +PROGBITS +[0-9a-f]+ [0-9a-f]+ 00001c 00 WAT +0 +0 +4
+ +\[[ 0-9]+\] \.tbss +NOBITS +[0-9a-f]+ [0-9a-f]+ 00001c 00 WAT +0 +0 +4
+ +\[[ 0-9]+\] \.dynamic +DYNAMIC +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 08 +WA +4 +0 +4
+ +\[[ 0-9]+\] \.got +PROGBITS +[0-9a-f]+ [0-9a-f]+ 00001c 04 WAX +0 +0 +4
+ +\[[ 0-9]+\] \.plt +NOBITS +.*
+ +\[[ 0-9]+\] \.shstrtab +STRTAB +.*
+ +\[[ 0-9]+\] \.symtab +SYMTAB +.*
+ +\[[ 0-9]+\] \.strtab +STRTAB +.*
+#...
+
+Elf file type is EXEC \(Executable file\)
+Entry point .*
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz MemSiz +Flg Align
+ +PHDR +0x000034 0x01800034 0x01800034 0x000c0 0x000c0 R E 0x4
+ +INTERP +0x0000f4 0x018000f4 0x018000f4 0x00011 0x00011 R +0x1
+ +\[Requesting program interpreter: .*\]
+ +LOAD .* R E 0x10000
+ +LOAD .* RWE 0x10000
+ +DYNAMIC .* RW +0x4
+ +TLS .* 0x0001c 0x00038 R +0x4
+
+ Section to Segment mapping:
+ +Segment Sections\.\.\.
+ +00 +
+ +01 +\.interp
+ +02 +\.interp \.hash \.dynsym \.dynstr \.rela\.dyn \.rela\.plt \.text
+ +03 +\.tdata \.dynamic \.got \.plt
+ +04 +\.dynamic
+ +05 +\.tdata \.tbss
+
+Relocation section '\.rela\.dyn' at offset .* contains 2 entries:
+ Offset +Info +Type +Sym\. Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_PPC_TPREL32 +00000000 +gd \+ 0
+[0-9a-f ]+R_PPC_DTPMOD32 +00000000 +ld \+ 0
+
+Relocation section '\.rela\.plt' at offset .* contains 1 entries:
+ Offset +Info +Type +Sym\. Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_PPC_JMP_SLOT[0-9a-f ]+__tls_get_addr_opt \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND
+.* TLS +GLOBAL +DEFAULT +UND gd
+.* TLS +GLOBAL +DEFAULT +UND ld
+.* NOTYPE +GLOBAL +DEFAULT +ABS __end
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* FUNC +GLOBAL +DEFAULT +UND __tls_get_addr_opt
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND
+.* SECTION +LOCAL +DEFAULT +1
+.* SECTION +LOCAL +DEFAULT +2
+.* SECTION +LOCAL +DEFAULT +3
+.* SECTION +LOCAL +DEFAULT +4
+.* SECTION +LOCAL +DEFAULT +5
+.* SECTION +LOCAL +DEFAULT +6
+.* SECTION +LOCAL +DEFAULT +7
+.* SECTION +LOCAL +DEFAULT +8
+.* SECTION +LOCAL +DEFAULT +9
+.* SECTION +LOCAL +DEFAULT +10
+.* SECTION +LOCAL +DEFAULT +11
+.* SECTION +LOCAL +DEFAULT +12
+.* TLS +LOCAL +DEFAULT +8 gd4
+.* TLS +LOCAL +DEFAULT +8 ld4
+.* TLS +LOCAL +DEFAULT +8 ld5
+.* TLS +LOCAL +DEFAULT +8 ld6
+.* TLS +LOCAL +DEFAULT +8 ie4
+.* TLS +LOCAL +DEFAULT +8 le4
+.* TLS +LOCAL +DEFAULT +8 le5
+.* OBJECT +LOCAL +DEFAULT +10 _DYNAMIC
+.* OBJECT +LOCAL +DEFAULT +11 _GLOBAL_OFFSET_TABLE_
+.* TLS +GLOBAL +DEFAULT +UND gd
+.* TLS +GLOBAL +DEFAULT +9 le0
+.* TLS +GLOBAL +DEFAULT +9 ld0
+.* TLS +GLOBAL +DEFAULT +9 le1
+.* TLS +GLOBAL +DEFAULT +UND ld
+.* NOTYPE +GLOBAL +DEFAULT +7 _start
+.* NOTYPE +GLOBAL +DEFAULT +ABS __end
+.* TLS +GLOBAL +DEFAULT +9 ld2
+.* TLS +GLOBAL +DEFAULT +9 ld1
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* FUNC +GLOBAL +DEFAULT +UND __tls_get_addr_opt
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+.* TLS +GLOBAL +DEFAULT +9 gd0
+.* TLS +GLOBAL +DEFAULT +9 ie0
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlsexe32.t b/binutils-2.21/ld/testsuite/ld-powerpc/tlsexe32.t
new file mode 100644
index 0000000..2312b33
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlsexe32.t
@@ -0,0 +1,11 @@
+#source: tls32.s
+#as: -a32
+#ld: -melf32ppc tmpdir/libtlslib32.so
+#objdump: -sj.tdata
+#target: powerpc*-*-*
+
+.*: +file format elf32-powerpc
+
+Contents of section \.tdata:
+.* 12345678 23456789 3456789a 456789ab .*
+.* 56789abc 6789abcd 789abcde .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlsexetoc.d b/binutils-2.21/ld/testsuite/ld-powerpc/tlsexetoc.d
new file mode 100644
index 0000000..8354e2d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlsexetoc.d
@@ -0,0 +1,74 @@
+#source: tlstoc.s
+#as: -a64
+#ld: -melf64ppc tmpdir/libtlslib.so
+#objdump: -dr
+#target: powerpc64*-*-*
+
+.*: +file format elf64-powerpc
+
+Disassembly of section \.text:
+
+.* <00000010\.plt_call\.__tls_get_addr(|_opt)\+0>:
+.* e9 63 00 00 ld r11,0\(r3\)
+.* e9 83 00 08 ld r12,8\(r3\)
+.* 7c 60 1b 78 mr r0,r3
+.* 2c 2b 00 00 cmpdi r11,0
+.* 7c 6c 6a 14 add r3,r12,r13
+.* 4d 82 00 20 beqlr
+.* 7c 03 03 78 mr r3,r0
+.* 7d 68 02 a6 mflr r11
+.* f9 61 00 20 std r11,32\(r1\)
+.* f8 41 00 28 std r2,40\(r1\)
+.* e9 62 80 70 ld r11,-32656\(r2\)
+.* 7d 69 03 a6 mtctr r11
+.* e9 62 80 80 ld r11,-32640\(r2\)
+.* e8 42 80 78 ld r2,-32648\(r2\)
+.* 4e 80 04 21 bctrl
+.* e9 61 00 20 ld r11,32\(r1\)
+.* e8 41 00 28 ld r2,40\(r1\)
+.* 7d 68 03 a6 mtlr r11
+.* 4e 80 00 20 blr
+
+.* <_start>:
+.* 38 62 80 08 addi r3,r2,-32760
+.* 4b ff ff b1 bl .*
+.* 60 00 00 00 nop
+.* 38 62 80 18 addi r3,r2,-32744
+.* 4b ff ff a5 bl .*
+.* 60 00 00 00 nop
+.* 3c 6d 00 00 addis r3,r13,0
+.* 60 00 00 00 nop
+.* 38 63 90 38 addi r3,r3,-28616
+.* 3c 6d 00 00 addis r3,r13,0
+.* 60 00 00 00 nop
+.* 38 63 10 00 addi r3,r3,4096
+.* 39 23 80 40 addi r9,r3,-32704
+.* 3d 23 00 00 addis r9,r3,0
+.* 81 49 80 48 lwz r10,-32696\(r9\)
+.* e9 22 80 48 ld r9,-32696\(r2\)
+.* 7d 49 18 2a ldx r10,r9,r3
+.* 3d 2d 00 00 addis r9,r13,0
+.* a1 49 90 58 lhz r10,-28584\(r9\)
+.* 89 4d 90 60 lbz r10,-28576\(r13\)
+.* 3d 2d 00 00 addis r9,r13,0
+.* 99 49 90 68 stb r10,-28568\(r9\)
+.* 60 00 00 00 nop
+.* 00 00 00 00 .*
+.* 00 01 02 28 .*
+.* <__glink_PLTresolve>:
+.* 7d 88 02 a6 mflr r12
+.* 42 9f 00 05 bcl- 20,4\*cr7\+so,.*
+.* 7d 68 02 a6 mflr r11
+.* e8 4b ff f0 ld r2,-16\(r11\)
+.* 7d 88 03 a6 mtlr r12
+.* 7d 82 5a 14 add r12,r2,r11
+.* e9 6c 00 00 ld r11,0\(r12\)
+.* e8 4c 00 08 ld r2,8\(r12\)
+.* 7d 69 03 a6 mtctr r11
+.* e9 6c 00 10 ld r11,16\(r12\)
+.* 4e 80 04 20 bctr
+.* 60 00 00 00 nop
+.* 60 00 00 00 nop
+.* 60 00 00 00 nop
+.* 38 00 00 00 li r0,0
+.* 4b ff ff c4 b .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlsexetoc.g b/binutils-2.21/ld/testsuite/ld-powerpc/tlsexetoc.g
new file mode 100644
index 0000000..387e9cd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlsexetoc.g
@@ -0,0 +1,15 @@
+#source: tlstoc.s
+#as: -a64
+#ld: -melf64ppc tmpdir/libtlslib.so
+#objdump: -sj.got
+#target: powerpc64*-*-*
+
+.*: +file format elf64-powerpc
+
+Contents of section \.got:
+.* 00000000 100185b0 00000000 00000000 .*
+.* 00000000 00000000 00000000 00000000 .*
+.* 00000000 00000000 00000000 00000001 .*
+.* 00000000 00000000 00000000 00000001 .*
+.* 00000000 00000000 ffffffff ffff8050 .*
+.* 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlsexetoc.r b/binutils-2.21/ld/testsuite/ld-powerpc/tlsexetoc.r
new file mode 100644
index 0000000..8ba8503
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlsexetoc.r
@@ -0,0 +1,115 @@
+#source: tlslib.s
+#source: tlstoc.s
+#as: -a64
+#ld: -melf64ppc
+#readelf: -WSsrl
+#target: powerpc64*-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
+ +\[[ 0-9]+\] \.interp +.*
+ +\[[ 0-9]+\] \.hash +.*
+ +\[[ 0-9]+\] \.dynsym +.*
+ +\[[ 0-9]+\] \.dynstr +.*
+ +\[[ 0-9]+\] \.rela\.dyn +.*
+ +\[[ 0-9]+\] \.rela\.plt +.*
+ +\[[ 0-9]+\] \.text +PROGBITS .* 0+f0 0+ +AX +0 +0 +8
+ +\[[ 0-9]+\] \.tdata +PROGBITS .* 0+38 0+ WAT +0 +0 +8
+ +\[[ 0-9]+\] \.tbss +NOBITS .* 0+38 0+ WAT +0 +0 +8
+ +\[[ 0-9]+\] \.dynamic +DYNAMIC .* 0+160 10 +WA +4 +0 +8
+ +\[[ 0-9]+\] \.branch_lt +PROGBITS .* 0+ 0+ +WA +0 +0 +8
+ +\[[ 0-9]+\] \.got +PROGBITS .* 0+58 08 +WA +0 +0 +8
+ +\[[ 0-9]+\] \.plt +.*
+ +\[[ 0-9]+\] \.shstrtab +.*
+ +\[[ 0-9]+\] \.symtab +.*
+ +\[[ 0-9]+\] \.strtab +.*
+#...
+
+Elf file type is EXEC \(Executable file\)
+Entry point .*
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +PHDR +0x0+40 0x0+10000040 0x0+10000040 0x0+150 0x0+150 R E 0x8
+ +INTERP +0x0+190 0x0+10000190 0x0+10000190 0x0+11 0x0+11 R +0x1
+ +\[Requesting program interpreter: .*\]
+ +LOAD .* R E 0x10000
+ +LOAD .* RW +0x10000
+ +DYNAMIC .* RW +0x8
+ +TLS .* 0x0+38 0x0+70 R +0x8
+
+ Section to Segment mapping:
+ +Segment Sections\.\.\.
+ +0+ +
+ +01 +\.interp
+ +02 +\.interp \.hash \.dynsym \.dynstr \.rela\.dyn \.rela\.plt \.text
+ +03 +\.tdata \.dynamic (\.branch_lt |)\.got \.plt
+ +04 +\.dynamic
+ +05 +\.tdata \.tbss
+
+Relocation section '\.rela\.dyn' at offset .* contains 3 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_PPC64_DTPMOD64 +0+ gd \+ 0
+[0-9a-f ]+R_PPC64_DTPREL64 +0+ gd \+ 0
+[0-9a-f ]+R_PPC64_DTPMOD64 +0+ ld \+ 0
+
+Relocation section '\.rela\.plt' at offset .* contains 1 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_PPC64_JMP_SLOT +0+ __tls_get_addr_opt \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND
+.* TLS +GLOBAL +DEFAULT +UND gd
+.* TLS +GLOBAL +DEFAULT +UND ld
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* FUNC +GLOBAL +DEFAULT +UND __tls_get_addr_opt
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND
+.* SECTION +LOCAL +DEFAULT +1
+.* SECTION +LOCAL +DEFAULT +2
+.* SECTION +LOCAL +DEFAULT +3
+.* SECTION +LOCAL +DEFAULT +4
+.* SECTION +LOCAL +DEFAULT +5
+.* SECTION +LOCAL +DEFAULT +6
+.* SECTION +LOCAL +DEFAULT +7
+.* SECTION +LOCAL +DEFAULT +8
+.* SECTION +LOCAL +DEFAULT +9
+.* SECTION +LOCAL +DEFAULT +10
+.* SECTION +LOCAL +DEFAULT +11
+.* SECTION +LOCAL +DEFAULT +12
+.* SECTION +LOCAL +DEFAULT +13
+.* TLS +LOCAL +DEFAULT +8 gd4
+.* TLS +LOCAL +DEFAULT +8 ld4
+.* TLS +LOCAL +DEFAULT +8 ld5
+.* TLS +LOCAL +DEFAULT +8 ld6
+.* TLS +LOCAL +DEFAULT +8 ie4
+.* TLS +LOCAL +DEFAULT +8 le4
+.* TLS +LOCAL +DEFAULT +8 le5
+.* NOTYPE +LOCAL +DEFAULT +12 \.Lie0
+.* OBJECT +LOCAL +DEFAULT +10 _DYNAMIC
+.* (NOTYPE +LOCAL +DEFAULT +7 00000010\.plt_call\.__tls_get_addr(|_opt)\+0|(FUNC|NOTYPE) +LOCAL +DEFAULT +UND \.__tls_get_addr(|_opt))
+.* (NOTYPE +LOCAL +DEFAULT +7 __glink_PLTresolve|NOTYPE +LOCAL +DEFAULT +7 00000010\.plt_call\.__tls_get_addr(|_opt)\+0)
+.* ((FUNC|NOTYPE) +LOCAL +DEFAULT +UND \.__tls_get_addr(|_opt)|NOTYPE +LOCAL +DEFAULT +7 __glink_PLTresolve)
+.* TLS +GLOBAL +DEFAULT +UND gd
+.* TLS +GLOBAL +DEFAULT +9 le0
+.* TLS +GLOBAL +DEFAULT +9 ld0
+.* TLS +GLOBAL +DEFAULT +9 le1
+.* TLS +GLOBAL +DEFAULT +UND ld
+.* NOTYPE +GLOBAL +DEFAULT +7 _start
+.* TLS +GLOBAL +DEFAULT +9 ld2
+.* TLS +GLOBAL +DEFAULT +9 ld1
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* FUNC +GLOBAL +DEFAULT +UND __tls_get_addr_opt
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+.* TLS +GLOBAL +DEFAULT +9 gd0
+.* TLS +GLOBAL +DEFAULT +9 ie0
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlsexetoc.t b/binutils-2.21/ld/testsuite/ld-powerpc/tlsexetoc.t
new file mode 100644
index 0000000..10bfaa4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlsexetoc.t
@@ -0,0 +1,13 @@
+#source: tlstoc.s
+#as: -a64
+#ld: -melf64ppc tmpdir/libtlslib.so
+#objdump: -sj.tdata
+#target: powerpc64*-*-*
+
+.*: +file format elf64-powerpc
+
+Contents of section \.tdata:
+.* 12345678 9abcdef0 23456789 abcdef01 .*
+.* 3456789a bcdef012 456789ab cdef0123 .*
+.* 56789abc def01234 6789abcd ef012345 .*
+.* 789abcde f0123456 .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlslib.s b/binutils-2.21/ld/testsuite/ld-powerpc/tlslib.s
new file mode 100644
index 0000000..59c40d2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlslib.s
@@ -0,0 +1,24 @@
+ .global __tls_get_addr,__tls_get_addr_opt,gd,ld
+ .type __tls_get_addr,@function
+ .type __tls_get_addr_opt,@function
+
+ .section ".opd","aw",@progbits
+__tls_get_addr:
+__tls_get_addr_opt:
+ .align 3
+ .quad .L.__tls_get_addr
+ .quad .TOC.@tocbase
+ .quad 0
+
+ .section ".tbss","awT",@nobits
+ .align 3
+gd: .space 8
+
+ .section ".tdata","awT",@progbits
+ .align 2
+ld: .long 0xc0ffee
+
+ .text
+.L.__tls_get_addr:
+ blr
+ .size __tls_get_addr,. - .L.__tls_get_addr
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlslib32.s b/binutils-2.21/ld/testsuite/ld-powerpc/tlslib32.s
new file mode 100644
index 0000000..14dc966
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlslib32.s
@@ -0,0 +1,16 @@
+ .global __tls_get_addr,__tls_get_addr_opt,gd,ld
+ .type __tls_get_addr,@function
+ .type __tls_get_addr_opt,@function
+
+ .section ".tbss","awT",@nobits
+ .align 2
+gd: .space 4
+
+ .section ".tdata","awT",@progbits
+ .align 2
+ld: .long 0xc0ffee
+
+ .text
+__tls_get_addr:
+__tls_get_addr_opt:
+ blr
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlsmark.d b/binutils-2.21/ld/testsuite/ld-powerpc/tlsmark.d
new file mode 100644
index 0000000..8ba350e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlsmark.d
@@ -0,0 +1,42 @@
+#source: tlsmark.s
+#source: tlslib.s
+#as: -a64
+#ld: -melf64ppc
+#objdump: -dr
+#target: powerpc64*-*-*
+
+.*: +file format elf64-powerpc
+
+Disassembly of section \.text:
+
+0+100000e8 <_start>:
+ 100000e8: 48 00 00 18 b 10000100 <_start\+0x18>
+ 100000ec: 60 00 00 00 nop
+ 100000f0: 38 63 90 00 addi r3,r3,-28672
+ 100000f4: e8 83 00 00 ld r4,0\(r3\)
+ 100000f8: 3c 6d 00 00 addis r3,r13,0
+ 100000fc: 48 00 00 0c b 10000108 <_start\+0x20>
+ 10000100: 3c 6d 00 00 addis r3,r13,0
+ 10000104: 4b ff ff e8 b 100000ec <_start\+0x4>
+ 10000108: 60 00 00 00 nop
+ 1000010c: 38 63 10 00 addi r3,r3,4096
+ 10000110: e8 83 80 00 ld r4,-32768\(r3\)
+ 10000114: 3c 6d 00 00 addis r3,r13,0
+ 10000118: 48 00 00 0c b 10000124 <_start\+0x3c>
+ 1000011c: 3c 6d 00 00 addis r3,r13,0
+ 10000120: 48 00 00 14 b 10000134 <_start\+0x4c>
+ 10000124: 60 00 00 00 nop
+ 10000128: 38 63 90 04 addi r3,r3,-28668
+ 1000012c: e8 a3 00 00 ld r5,0\(r3\)
+ 10000130: 4b ff ff ec b 1000011c <_start\+0x34>
+ 10000134: 60 00 00 00 nop
+ 10000138: 38 63 10 00 addi r3,r3,4096
+ 1000013c: e8 a3 80 04 ld r5,-32764\(r3\)
+ 10000140: 38 62 80 28 addi r3,r2,-32728
+ 10000144: 3f a0 10 01 lis r29,4097
+ 10000148: 3b bd 01 68 addi r29,r29,360
+ 1000014c: 48 00 00 09 bl 10000154 <\.__tls_get_addr>
+ 10000150: 60 00 00 00 nop
+
+0+10000154 <\.__tls_get_addr>:
+ 10000154: 4e 80 00 20 blr
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlsmark.s b/binutils-2.21/ld/testsuite/ld-powerpc/tlsmark.s
new file mode 100644
index 0000000..dc42327
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlsmark.s
@@ -0,0 +1,55 @@
+ .section ".tdata","awT",@progbits
+x: .int 1
+y: .int 2
+
+ .section ".toc","aw",@progbits
+ .p2align 3
+.LC0:
+ .quad y@dtpmod
+ .quad y@dtprel
+.LC1:
+ .quad y@dtpmod
+ .quad 0
+
+ .text
+ .global _start
+_start:
+ b .L2
+
+.L1:
+ bl __tls_get_addr(x@tlsgd)
+ nop
+ ld 4,0(3)
+ addi 3,2,x@got@tlsld
+ b .L3
+.L2:
+ addi 3,2,x@got@tlsgd
+ b .L1
+.L3:
+ bl __tls_get_addr(x@tlsld)
+ nop
+ ld 4,x@dtprel(3)
+
+ addi 3,2,.LC0@toc
+ b .L5
+.L4:
+ addi 3,2,.LC1@toc
+ b .L6
+.L5:
+ bl .__tls_get_addr(.LC0@tlsgd)
+ nop
+ ld 5,0(3)
+ b .L4
+.L6:
+ bl .__tls_get_addr(.LC1@tlsld)
+ nop
+ ld 5,y@dtprel(3)
+
+
+ .section ".text.no","ax",@progbits
+ .p2align 2
+ addi 3,2,gd@got@tlsgd
+ lis 29,__tls_get_addr@ha
+ addi 29,29,__tls_get_addr@l
+ bl __tls_get_addr
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlsmark32.d b/binutils-2.21/ld/testsuite/ld-powerpc/tlsmark32.d
new file mode 100644
index 0000000..74b74e3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlsmark32.d
@@ -0,0 +1,29 @@
+#source: tlsmark32.s
+#source: tlslib32.s
+#as: -a32
+#ld: -melf32ppc
+#objdump: -dr
+#target: powerpc*-*-*
+
+.*: file format elf32-powerpc
+
+Disassembly of section \.text:
+
+0+1800094 <_start>:
+ 1800094: 48 00 00 14 b 18000a8 <_start\+0x14>
+ 1800098: 38 63 90 00 addi r3,r3,-28672
+ 180009c: 80 83 00 00 lwz r4,0\(r3\)
+ 18000a0: 3c 62 00 00 addis r3,r2,0
+ 18000a4: 48 00 00 0c b 18000b0 <_start\+0x1c>
+ 18000a8: 3c 62 00 00 addis r3,r2,0
+ 18000ac: 4b ff ff ec b 1800098 <_start\+0x4>
+ 18000b0: 38 63 10 00 addi r3,r3,4096
+ 18000b4: 80 83 80 00 lwz r4,-32768\(r3\)
+ 18000b8: 38 7f ff f4 addi r3,r31,-12
+ 18000bc: 3f a0 01 80 lis r29,384
+ 18000c0: 3b bd 00 c8 addi r29,r29,200
+ 18000c4: 48 00 00 05 bl 18000c8 <__tls_get_addr>
+
+0+18000c8 <__tls_get_addr>:
+ 18000c8: 4e 80 00 20 blr
+#pass \ No newline at end of file
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlsmark32.s b/binutils-2.21/ld/testsuite/ld-powerpc/tlsmark32.s
new file mode 100644
index 0000000..2fa48ae
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlsmark32.s
@@ -0,0 +1,27 @@
+ .section ".tdata","awT",@progbits
+x: .int 1
+
+ .text
+ .global _start
+_start:
+ b .L2
+
+.L1:
+ bl __tls_get_addr(x@tlsgd)
+ lwz 4,0(3)
+ addi 3,31,x@got@tlsld
+ b .L3
+.L2:
+ addi 3,31,x@got@tlsgd
+ b .L1
+.L3:
+ bl __tls_get_addr(x@tlsld)
+ lwz 4,x@dtprel(3)
+
+
+ .section ".text.no","ax",@progbits
+ .p2align 2
+ addi 3,31,gd@got@tlsgd
+ lis 29,__tls_get_addr@ha
+ addi 29,29,__tls_get_addr@l
+ bl __tls_get_addr
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlsso.d b/binutils-2.21/ld/testsuite/ld-powerpc/tlsso.d
new file mode 100644
index 0000000..4a3b045
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlsso.d
@@ -0,0 +1,76 @@
+#source: tls.s
+#as: -a64
+#ld: -shared -melf64ppc
+#objdump: -dr
+#target: powerpc64*-*-*
+
+.*: +file format elf64-powerpc
+
+Disassembly of section \.text:
+
+.* <00000010\.plt_call\.__tls_get_addr(|_opt)\+0>:
+.* f8 41 00 28 std r2,40\(r1\)
+.* e9 62 80 78 ld r11,-32648\(r2\)
+.* 7d 69 03 a6 mtctr r11
+.* e9 62 80 88 ld r11,-32632\(r2\)
+.* e8 42 80 80 ld r2,-32640\(r2\)
+.* 4e 80 04 20 bctr
+
+.* <_start>:
+.* 38 62 80 20 addi r3,r2,-32736
+.* 4b ff ff e5 bl .*
+.* e8 41 00 28 ld r2,40\(r1\)
+.* 38 62 80 50 addi r3,r2,-32688
+.* 4b ff ff d9 bl .*
+.* e8 41 00 28 ld r2,40\(r1\)
+.* 38 62 80 38 addi r3,r2,-32712
+.* 4b ff ff cd bl .*
+.* e8 41 00 28 ld r2,40\(r1\)
+.* 38 62 80 50 addi r3,r2,-32688
+.* 4b ff ff c1 bl .*
+.* e8 41 00 28 ld r2,40\(r1\)
+.* 39 23 80 40 addi r9,r3,-32704
+.* 3d 23 00 00 addis r9,r3,0
+.* 81 49 80 48 lwz r10,-32696\(r9\)
+.* e9 22 80 30 ld r9,-32720\(r2\)
+.* 7d 49 18 2a ldx r10,r9,r3
+.* e9 22 80 48 ld r9,-32696\(r2\)
+.* 7d 49 6a 2e lhzx r10,r9,r13
+.* 89 4d 00 00 lbz r10,0\(r13\)
+.* 3d 2d 00 00 addis r9,r13,0
+.* 99 49 00 00 stb r10,0\(r9\)
+.* 38 62 80 08 addi r3,r2,-32760
+.* 4b ff ff 8d bl .*
+.* e8 41 00 28 ld r2,40\(r1\)
+.* 38 62 80 50 addi r3,r2,-32688
+.* 4b ff ff 81 bl .*
+.* e8 41 00 28 ld r2,40\(r1\)
+.* f9 43 80 08 std r10,-32760\(r3\)
+.* 3d 23 00 00 addis r9,r3,0
+.* 91 49 80 10 stw r10,-32752\(r9\)
+.* e9 22 80 18 ld r9,-32744\(r2\)
+.* 7d 49 19 2a stdx r10,r9,r3
+.* e9 22 80 48 ld r9,-32696\(r2\)
+.* 7d 49 6b 2e sthx r10,r9,r13
+.* e9 4d 00 02 lwa r10,0\(r13\)
+.* 3d 2d 00 00 addis r9,r13,0
+.* a9 49 00 00 lha r10,0\(r9\)
+.* 00 00 00 00 .*
+.* 00 01 02 20 .*
+.* <__glink_PLTresolve>:
+.* 7d 88 02 a6 mflr r12
+.* 42 9f 00 05 bcl- 20,4\*cr7\+so,.*
+.* 7d 68 02 a6 mflr r11
+.* e8 4b ff f0 ld r2,-16\(r11\)
+.* 7d 88 03 a6 mtlr r12
+.* 7d 82 5a 14 add r12,r2,r11
+.* e9 6c 00 00 ld r11,0\(r12\)
+.* e8 4c 00 08 ld r2,8\(r12\)
+.* 7d 69 03 a6 mtctr r11
+.* e9 6c 00 10 ld r11,16\(r12\)
+.* 4e 80 04 20 bctr
+.* 60 00 00 00 nop
+.* 60 00 00 00 nop
+.* 60 00 00 00 nop
+.* 38 00 00 00 li r0,0
+.* 4b ff ff c4 b .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlsso.g b/binutils-2.21/ld/testsuite/ld-powerpc/tlsso.g
new file mode 100644
index 0000000..330cb18
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlsso.g
@@ -0,0 +1,15 @@
+#source: tls.s
+#as: -a64
+#ld: -shared -melf64ppc
+#objdump: -sj.got
+#target: powerpc64*-*-*
+
+.*: +file format elf64-powerpc
+
+Contents of section \.got:
+.* 00000000 00018778 00000000 00000000 .*
+.* 00000000 00000000 00000000 00000000 .*
+.* 00000000 00000000 00000000 00000000 .*
+.* 00000000 00000000 00000000 00000000 .*
+.* 00000000 00000000 00000000 00000000 .*
+.* 00000000 00000000 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlsso.r b/binutils-2.21/ld/testsuite/ld-powerpc/tlsso.r
new file mode 100644
index 0000000..99c3659
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlsso.r
@@ -0,0 +1,129 @@
+#source: tls.s
+#as: -a64
+#ld: -shared -melf64ppc
+#readelf: -WSsrl
+#target: powerpc64*-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
+ +\[[ 0-9]+\] \.hash .*
+ +\[[ 0-9]+\] \.dynsym .*
+ +\[[ 0-9]+\] \.dynstr .*
+ +\[[ 0-9]+\] \.rela\.dyn .*
+ +\[[ 0-9]+\] \.rela\.plt .*
+ +\[[ 0-9]+\] \.text .*
+ +\[[ 0-9]+\] \.tdata +PROGBITS .* 0+38 0+ WAT +0 +0 +8
+ +\[[ 0-9]+\] \.tbss +NOBITS .* 0+38 0+ WAT +0 +0 +8
+ +\[[ 0-9]+\] \.dynamic .*
+ +\[[ 0-9]+\] \.branch_lt .*
+ +\[[ 0-9]+\] \.got .*
+ +\[[ 0-9]+\] \.plt .*
+ +\[[ 0-9]+\] \.shstrtab .*
+ +\[[ 0-9]+\] \.symtab .*
+ +\[[ 0-9]+\] \.strtab .*
+#...
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x[0-9a-f]+
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +LOAD .* R E 0x10000
+ +LOAD .* RW +0x10000
+ +DYNAMIC .* RW +0x8
+ +TLS .* 0x0+38 0x0+70 R +0x8
+
+ Section to Segment mapping:
+ +Segment Sections\.\.\.
+ +0+ +\.hash \.dynsym \.dynstr \.rela\.dyn \.rela\.plt \.text
+ +01 +\.tdata \.dynamic (\.branch_lt |)\.got \.plt
+ +02 +\.dynamic
+ +03 +\.tdata \.tbss
+
+Relocation section '\.rela\.dyn' at offset .* contains 16 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_PPC64_TPREL16 +0+60 le0 \+ 0
+[0-9a-f ]+R_PPC64_TPREL16_HA +0+68 le1 \+ 0
+[0-9a-f ]+R_PPC64_TPREL16_LO +0+68 le1 \+ 0
+[0-9a-f ]+R_PPC64_TPREL16_DS +0+105f0 \.tdata \+ 28
+[0-9a-f ]+R_PPC64_TPREL16_HA +0+105f0 \.tdata \+ 30
+[0-9a-f ]+R_PPC64_TPREL16_LO +0+105f0 \.tdata \+ 30
+[0-9a-f ]+R_PPC64_DTPMOD64 +0+
+[0-9a-f ]+R_PPC64_DTPREL64 +0+
+[0-9a-f ]+R_PPC64_DTPREL64 +0+18
+[0-9a-f ]+R_PPC64_DTPMOD64 +0+
+[0-9a-f ]+R_PPC64_DTPMOD64 +0+ gd \+ 0
+[0-9a-f ]+R_PPC64_DTPREL64 +0+ gd \+ 0
+[0-9a-f ]+R_PPC64_DTPREL64 +0+50 ld2 \+ 0
+[0-9a-f ]+R_PPC64_DTPMOD64 +0+38 gd0 \+ 0
+[0-9a-f ]+R_PPC64_DTPREL64 +0+38 gd0 \+ 0
+[0-9a-f ]+R_PPC64_TPREL64 +0+58 ie0 \+ 0
+
+Relocation section '\.rela\.plt' at offset .* contains 1 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_PPC64_JMP_SLOT +0+ __tls_get_addr \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND
+.* SECTION +LOCAL +DEFAULT +6
+.* SECTION +LOCAL +DEFAULT +7
+.* TLS +GLOBAL +DEFAULT +UND gd
+.* TLS +GLOBAL +DEFAULT +8 le0
+.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr
+.* TLS +GLOBAL +DEFAULT +8 ld0
+.* TLS +GLOBAL +DEFAULT +8 le1
+.* TLS +GLOBAL +DEFAULT +UND ld
+.* NOTYPE +GLOBAL +DEFAULT +6 _start
+.* TLS +GLOBAL +DEFAULT +8 ld2
+.* TLS +GLOBAL +DEFAULT +8 ld1
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+.* TLS +GLOBAL +DEFAULT +8 gd0
+.* TLS +GLOBAL +DEFAULT +8 ie0
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND
+.* SECTION +LOCAL +DEFAULT +1
+.* SECTION +LOCAL +DEFAULT +2
+.* SECTION +LOCAL +DEFAULT +3
+.* SECTION +LOCAL +DEFAULT +4
+.* SECTION +LOCAL +DEFAULT +5
+.* SECTION +LOCAL +DEFAULT +6
+.* SECTION +LOCAL +DEFAULT +7
+.* SECTION +LOCAL +DEFAULT +8
+.* SECTION +LOCAL +DEFAULT +9
+.* SECTION +LOCAL +DEFAULT +10
+.* SECTION +LOCAL +DEFAULT +11
+.* SECTION +LOCAL +DEFAULT +12
+.* TLS +LOCAL +DEFAULT +7 gd4
+.* TLS +LOCAL +DEFAULT +7 ld4
+.* TLS +LOCAL +DEFAULT +7 ld5
+.* TLS +LOCAL +DEFAULT +7 ld6
+.* TLS +LOCAL +DEFAULT +7 ie4
+.* TLS +LOCAL +DEFAULT +7 le4
+.* TLS +LOCAL +DEFAULT +7 le5
+.* OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC
+.* NOTYPE +LOCAL +DEFAULT +6 00000010\.plt_call\.__tls_get_addr\+0
+.* NOTYPE +LOCAL +DEFAULT +6 __glink_PLTresolve
+.* NOTYPE +LOCAL +DEFAULT +UND \.__tls_get_addr
+.* TLS +GLOBAL +DEFAULT +UND gd
+.* TLS +GLOBAL +DEFAULT +8 le0
+.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr
+.* TLS +GLOBAL +DEFAULT +8 ld0
+.* TLS +GLOBAL +DEFAULT +8 le1
+.* TLS +GLOBAL +DEFAULT +UND ld
+.* NOTYPE +GLOBAL +DEFAULT +6 _start
+.* TLS +GLOBAL +DEFAULT +8 ld2
+.* TLS +GLOBAL +DEFAULT +8 ld1
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+.* TLS +GLOBAL +DEFAULT +8 gd0
+.* TLS +GLOBAL +DEFAULT +8 ie0
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlsso.t b/binutils-2.21/ld/testsuite/ld-powerpc/tlsso.t
new file mode 100644
index 0000000..63f92f6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlsso.t
@@ -0,0 +1,13 @@
+#source: tls.s
+#as: -a64
+#ld: -shared -melf64ppc
+#objdump: -sj.tdata
+#target: powerpc64*-*-*
+
+.*: +file format elf64-powerpc
+
+Contents of section \.tdata:
+.* 12345678 9abcdef0 23456789 abcdef01 .*
+.* 3456789a bcdef012 456789ab cdef0123 .*
+.* 56789abc def01234 6789abcd ef012345 .*
+.* 789abcde f0123456 .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlsso32.d b/binutils-2.21/ld/testsuite/ld-powerpc/tlsso32.d
new file mode 100644
index 0000000..b4e45d8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlsso32.d
@@ -0,0 +1,46 @@
+#source: tls32.s
+#as: -a32
+#ld: -shared -melf32ppc
+#objdump: -dr
+#target: powerpc*-*-*
+
+.*: +file format elf32-powerpc
+
+Disassembly of section \.text:
+
+.* <_start>:
+.*: 38 7f ff e0 addi r3,r31,-32
+.*: 48 00 00 01 bl .*
+.*: 38 7f ff f4 addi r3,r31,-12
+.*: 48 00 00 01 bl .*
+.*: 38 7f ff e8 addi r3,r31,-24
+.*: 48 01 01 95 bl .*<__tls_get_addr@plt>
+.*: 38 7f ff f4 addi r3,r31,-12
+.*: 48 01 01 8d bl .*<__tls_get_addr@plt>
+.*: 39 23 80 20 addi r9,r3,-32736
+.*: 3d 23 00 00 addis r9,r3,0
+.*: 81 49 80 24 lwz r10,-32732\(r9\)
+.*: 81 3f ff f0 lwz r9,-16\(r31\)
+.*: 7d 49 12 2e lhzx r10,r9,r2
+.*: 89 42 00 00 lbz r10,0\(r2\)
+.*: 3d 22 00 00 addis r9,r2,0
+.*: 99 49 00 00 stb r10,0\(r9\)
+.*: 38 7e ff d8 addi r3,r30,-40
+.*: 48 00 00 01 bl .*
+.*: 38 7e ff f4 addi r3,r30,-12
+.*: 48 00 00 01 bl .*
+.*: 91 43 80 04 stw r10,-32764\(r3\)
+.*: 3d 23 00 00 addis r9,r3,0
+.*: 91 49 80 08 stw r10,-32760\(r9\)
+.*: 81 3e ff f0 lwz r9,-16\(r30\)
+.*: 7d 49 13 2e sthx r10,r9,r2
+.*: a1 42 00 00 lhz r10,0\(r2\)
+.*: 3d 22 00 00 addis r9,r2,0
+.*: a9 49 00 00 lha r10,0\(r9\)
+Disassembly of section \.got:
+
+.* <\.got>:
+ \.\.\.
+.*: 4e 80 00 21 blrl
+.*: 00 01 03 ec .*
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlsso32.g b/binutils-2.21/ld/testsuite/ld-powerpc/tlsso32.g
new file mode 100644
index 0000000..028e869
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlsso32.g
@@ -0,0 +1,13 @@
+#source: tls32.s
+#as: -a32
+#ld: -shared -melf32ppc
+#objdump: -sj.got
+#target: powerpc*-*-*
+
+.*: +file format elf32-powerpc
+
+Contents of section \.got:
+.* 00000000 00000000 00000000 00000000 .*
+.* 00000000 00000000 00000000 00000000 .*
+.* 00000000 4e800021 000103ec 00000000 .*
+.* 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlsso32.r b/binutils-2.21/ld/testsuite/ld-powerpc/tlsso32.r
new file mode 100644
index 0000000..e075db2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlsso32.r
@@ -0,0 +1,129 @@
+#source: tls32.s
+#as: -a32
+#ld: -shared -melf32ppc
+#readelf: -WSsrl
+#target: powerpc*-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
+ +\[[ 0-9]+\] \.hash +.*
+ +\[[ 0-9]+\] \.dynsym +.*
+ +\[[ 0-9]+\] \.dynstr +.*
+ +\[[ 0-9]+\] \.rela\.dyn +.*
+ +\[[ 0-9]+\] \.rela\.plt +.*
+ +\[[ 0-9]+\] \.text +PROGBITS .* 0+70 0+ +AX +0 +0 +1
+ +\[[ 0-9]+\] \.tdata +PROGBITS .* 0+1c 0+ WAT +0 +0 +4
+ +\[[ 0-9]+\] \.tbss +NOBITS .* 0+1c 0+ WAT +0 +0 +4
+ +\[[ 0-9]+\] \.dynamic +DYNAMIC .* 08 +WA +3 +0 +4
+ +\[[ 0-9]+\] \.got +PROGBITS .* 0+34 04 WAX +0 +0 +4
+ +\[[ 0-9]+\] \.plt +.*
+ +\[[ 0-9]+\] \.shstrtab +.*
+ +\[[ 0-9]+\] \.symtab +.*
+ +\[[ 0-9]+\] \.strtab +.*
+#...
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x[0-9a-f]+
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz MemSiz +Flg Align
+ +LOAD .* R E 0x10000
+ +LOAD .* RWE 0x10000
+ +DYNAMIC .* RW +0x4
+ +TLS .* 0x0+1c 0x0+38 R +0x4
+
+ Section to Segment mapping:
+ +Segment Sections\.\.\.
+ +0+ +\.hash \.dynsym \.dynstr \.rela\.dyn \.rela\.plt \.text
+ +01 +\.tdata \.dynamic \.got \.plt
+ +02 +\.dynamic
+ +03 +\.tdata \.tbss
+
+Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 18 entries:
+ Offset +Info +Type +Sym\. Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_PPC_REL24 +0+ +__tls_get_addr \+ 0
+[0-9a-f ]+R_PPC_REL24 +0+ +__tls_get_addr \+ 0
+[0-9a-f ]+R_PPC_REL24 +0+ +__tls_get_addr \+ 0
+[0-9a-f ]+R_PPC_REL24 +0+ +__tls_get_addr \+ 0
+[0-9a-f ]+R_PPC_TPREL16 +0+30 +le0 \+ 0
+[0-9a-f ]+R_PPC_TPREL16_HA +0+34 +le1 \+ 0
+[0-9a-f ]+R_PPC_TPREL16_LO +0+34 +le1 \+ 0
+[0-9a-f ]+R_PPC_TPREL16 +0+103d0 +\.tdata \+ 103e4
+[0-9a-f ]+R_PPC_TPREL16_HA +0+103d0 +\.tdata \+ 103e8
+[0-9a-f ]+R_PPC_TPREL16_LO +0+103d0 +\.tdata \+ 103e8
+[0-9a-f ]+R_PPC_DTPMOD32 +0+
+[0-9a-f ]+R_PPC_DTPREL32 +0+
+[0-9a-f ]+R_PPC_DTPMOD32 +0+
+[0-9a-f ]+R_PPC_DTPMOD32 +0+ +gd \+ 0
+[0-9a-f ]+R_PPC_DTPREL32 +0+ +gd \+ 0
+[0-9a-f ]+R_PPC_DTPMOD32 +0+1c +gd0 \+ 0
+[0-9a-f ]+R_PPC_DTPREL32 +0+1c +gd0 \+ 0
+[0-9a-f ]+R_PPC_TPREL32 +0+2c +ie0 \+ 0
+
+Relocation section '\.rela\.plt' at offset 0x[0-9a-f]+ contains 1 entries:
+ Offset +Info +Type +Sym\. Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_PPC_JMP_SLOT +0+ +__tls_get_addr \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND
+.* SECTION +LOCAL +DEFAULT +6
+.* SECTION +LOCAL +DEFAULT +7
+.* TLS +GLOBAL +DEFAULT +UND gd
+.* TLS +GLOBAL +DEFAULT +8 le0
+.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr
+.* TLS +GLOBAL +DEFAULT +8 ld0
+.* TLS +GLOBAL +DEFAULT +8 le1
+.* TLS +GLOBAL +DEFAULT +UND ld
+.* NOTYPE +GLOBAL +DEFAULT +6 _start
+.* NOTYPE +GLOBAL +DEFAULT +ABS __end
+.* TLS +GLOBAL +DEFAULT +8 ld2
+.* TLS +GLOBAL +DEFAULT +8 ld1
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+.* TLS +GLOBAL +DEFAULT +8 gd0
+.* TLS +GLOBAL +DEFAULT +8 ie0
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND
+.* SECTION +LOCAL +DEFAULT +1
+.* SECTION +LOCAL +DEFAULT +2
+.* SECTION +LOCAL +DEFAULT +3
+.* SECTION +LOCAL +DEFAULT +4
+.* SECTION +LOCAL +DEFAULT +5
+.* SECTION +LOCAL +DEFAULT +6
+.* SECTION +LOCAL +DEFAULT +7
+.* SECTION +LOCAL +DEFAULT +8
+.* SECTION +LOCAL +DEFAULT +9
+.* SECTION +LOCAL +DEFAULT +10
+.* SECTION +LOCAL +DEFAULT +11
+.* TLS +LOCAL +DEFAULT +7 gd4
+.* TLS +LOCAL +DEFAULT +7 ld4
+.* TLS +LOCAL +DEFAULT +7 ld5
+.* TLS +LOCAL +DEFAULT +7 ld6
+.* TLS +LOCAL +DEFAULT +7 ie4
+.* TLS +LOCAL +DEFAULT +7 le4
+.* TLS +LOCAL +DEFAULT +7 le5
+.* OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC
+.* OBJECT +LOCAL +DEFAULT +ABS _GLOBAL_OFFSET_TABLE_
+.* TLS +GLOBAL +DEFAULT +UND gd
+.* TLS +GLOBAL +DEFAULT +8 le0
+.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr
+.* TLS +GLOBAL +DEFAULT +8 ld0
+.* TLS +GLOBAL +DEFAULT +8 le1
+.* TLS +GLOBAL +DEFAULT +UND ld
+.* NOTYPE +GLOBAL +DEFAULT +6 _start
+.* NOTYPE +GLOBAL +DEFAULT +ABS __end
+.* TLS +GLOBAL +DEFAULT +8 ld2
+.* TLS +GLOBAL +DEFAULT +8 ld1
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+.* TLS +GLOBAL +DEFAULT +8 gd0
+.* TLS +GLOBAL +DEFAULT +8 ie0
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlsso32.t b/binutils-2.21/ld/testsuite/ld-powerpc/tlsso32.t
new file mode 100644
index 0000000..4190a9a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlsso32.t
@@ -0,0 +1,11 @@
+#source: tls32.s
+#as: -a32
+#ld: -shared -melf32ppc
+#objdump: -sj.tdata
+#target: powerpc*-*-*
+
+.*: +file format elf32-powerpc
+
+Contents of section \.tdata:
+.* 12345678 23456789 3456789a 456789ab .*
+.* 56789abc 6789abcd 789abcde .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlstoc.d b/binutils-2.21/ld/testsuite/ld-powerpc/tlstoc.d
new file mode 100644
index 0000000..cfa8aba
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlstoc.d
@@ -0,0 +1,37 @@
+#source: tlslib.s
+#source: tlstoc.s
+#as: -a64
+#ld: -melf64ppc
+#objdump: -dr
+#target: powerpc64*-*-*
+
+.*: +file format elf64-powerpc
+
+Disassembly of section \.text:
+
+.* <\.__tls_get_addr>:
+.* 4e 80 00 20 blr
+
+.* <_start>:
+.* 3c 6d 00 00 addis r3,r13,0
+.* 60 00 00 00 nop
+.* 38 63 90 40 addi r3,r3,-28608
+.* 3c 6d 00 00 addis r3,r13,0
+.* 60 00 00 00 nop
+.* 38 63 10 00 addi r3,r3,4096
+.* 3c 6d 00 00 addis r3,r13,0
+.* 60 00 00 00 nop
+.* 38 63 90 48 addi r3,r3,-28600
+.* 3c 6d 00 00 addis r3,r13,0
+.* 60 00 00 00 nop
+.* 38 63 10 00 addi r3,r3,4096
+.* 39 23 80 50 addi r9,r3,-32688
+.* 3d 23 00 00 addis r9,r3,0
+.* 81 49 80 58 lwz r10,-32680\(r9\)
+.* e9 22 80 40 ld r9,-32704\(r2\)
+.* 7d 49 18 2a ldx r10,r9,r3
+.* 3d 2d 00 00 addis r9,r13,0
+.* a1 49 90 68 lhz r10,-28568\(r9\)
+.* 89 4d 90 70 lbz r10,-28560\(r13\)
+.* 3d 2d 00 00 addis r9,r13,0
+.* 99 49 90 78 stb r10,-28552\(r9\)
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlstoc.g b/binutils-2.21/ld/testsuite/ld-powerpc/tlstoc.g
new file mode 100644
index 0000000..9ae4100
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlstoc.g
@@ -0,0 +1,15 @@
+#source: tlslib.s
+#source: tlstoc.s
+#as: -a64
+#ld: -melf64ppc
+#objdump: -sj.got
+#target: powerpc64*-*-*
+
+.*: +file format elf64-powerpc
+
+Contents of section \.got:
+ 100101a0 00000000 00000001 00000000 00000000 .*
+ 100101b0 00000000 00000001 00000000 00000000 .*
+ 100101c0 00000000 00000001 00000000 00000000 .*
+ 100101d0 00000000 00000001 00000000 00000000 .*
+ 100101e0 ffffffff ffff8060 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlstoc.s b/binutils-2.21/ld/testsuite/ld-powerpc/tlstoc.s
new file mode 100644
index 0000000..5008d89
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlstoc.s
@@ -0,0 +1,88 @@
+ .section ".tbss","awT",@nobits
+ .global _start,gd0,ld0,ld1,ld2,ie0,le0,le1
+ .align 3
+gd0: .space 8
+ld0: .space 8
+ld1: .space 8
+ld2: .space 8
+ie0: .space 8
+le0: .space 8
+le1: .space 8
+
+ .section ".tdata","awT",@progbits
+ .align 3
+gd4: .quad 0x123456789abcdef0
+ld4: .quad 0x23456789abcdef01
+ld5: .quad 0x3456789abcdef012
+ld6: .quad 0x456789abcdef0123
+ie4: .quad 0x56789abcdef01234
+le4: .quad 0x6789abcdef012345
+le5: .quad 0x789abcdef0123456
+
+ .text
+_start:
+#extern syms
+#GD
+ addi 3,2,.Lgd@toc
+ bl .__tls_get_addr
+ nop
+ .section .toc,"aw",@progbits
+.Lgd:
+ .quad gd@dtpmod
+ .quad gd@dtprel
+ .text
+#LD
+ addi 3,2,.Lld@toc
+ bl .__tls_get_addr
+ nop
+ .section .toc,"aw",@progbits
+.Lld:
+ .quad ld@dtpmod
+ .quad 0
+ .text
+
+#global syms
+#GD
+ addi 3,2,.Lgd0@toc
+ bl .__tls_get_addr
+ nop
+ .section .toc,"aw",@progbits
+.Lgd0:
+ .quad gd0@dtpmod
+ .quad gd0@dtprel
+ .text
+#LD
+ addi 3,2,.Lld0@toc
+ bl .__tls_get_addr
+ nop
+ .section .toc,"aw",@progbits
+.Lld0:
+ .quad ld0@dtpmod
+ .quad 0
+ .text
+
+ addi 9,3,ld0@dtprel
+
+ addis 9,3,ld1@dtprel@ha
+ lwz 10,ld1@dtprel@l(9)
+
+ ld 9,.Lld2@toc(2)
+ ldx 10,9,3
+ .section .toc,"aw",@progbits
+.Lld2:
+ .quad ld2@dtprel
+ .text
+
+#IE
+ ld 9,.Lie0@toc(2)
+ lhzx 10,9,.Lie0@tls
+ .section .toc,"aw",@progbits
+.Lie0:
+ .quad ie0@tprel
+ .text
+
+#LE
+ lbz 10,le0@tprel(13) #R_PPC64_TPREL16 le0
+
+ addis 9,13,le1@tprel@ha #R_PPC64_TPREL16_HA le1
+ stb 10,le1@tprel@l(9) #R_PPC64_TPREL16_LO le1
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlstoc.t b/binutils-2.21/ld/testsuite/ld-powerpc/tlstoc.t
new file mode 100644
index 0000000..5a8129a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlstoc.t
@@ -0,0 +1,14 @@
+#source: tlslib.s
+#source: tlstoc.s
+#as: -a64
+#ld: -melf64ppc
+#objdump: -sj.tdata
+#target: powerpc64*-*-*
+
+.*: +file format elf64-powerpc
+
+Contents of section \.tdata:
+ 10010148 00c0ffee 00000000 12345678 9abcdef0 .*
+ 10010158 23456789 abcdef01 3456789a bcdef012 .*
+ 10010168 456789ab cdef0123 56789abc def01234 .*
+ 10010178 6789abcd ef012345 789abcde f0123456 .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlstocso.d b/binutils-2.21/ld/testsuite/ld-powerpc/tlstocso.d
new file mode 100644
index 0000000..0b84311
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlstocso.d
@@ -0,0 +1,60 @@
+#source: tlstoc.s
+#as: -a64
+#ld: -shared -melf64ppc
+#objdump: -dr
+#target: powerpc64*-*-*
+
+.*: +file format elf64-powerpc
+
+Disassembly of section \.text:
+
+.* <00000010\.plt_call\.__tls_get_addr(|_opt)\+0>:
+.* f8 41 00 28 std r2,40\(r1\)
+.* e9 62 80 70 ld r11,-32656\(r2\)
+.* 7d 69 03 a6 mtctr r11
+.* e9 62 80 80 ld r11,-32640\(r2\)
+.* e8 42 80 78 ld r2,-32648\(r2\)
+.* 4e 80 04 20 bctr
+
+.* <_start>:
+.* 38 62 80 08 addi r3,r2,-32760
+.* 4b ff ff e5 bl .*
+.* e8 41 00 28 ld r2,40\(r1\)
+.* 38 62 80 18 addi r3,r2,-32744
+.* 4b ff ff d9 bl .*
+.* e8 41 00 28 ld r2,40\(r1\)
+.* 38 62 80 28 addi r3,r2,-32728
+.* 4b ff ff cd bl .*
+.* e8 41 00 28 ld r2,40\(r1\)
+.* 38 62 80 38 addi r3,r2,-32712
+.* 4b ff ff c1 bl .*
+.* e8 41 00 28 ld r2,40\(r1\)
+.* 39 23 80 40 addi r9,r3,-32704
+.* 3d 23 00 00 addis r9,r3,0
+.* 81 49 80 48 lwz r10,-32696\(r9\)
+.* e9 22 80 48 ld r9,-32696\(r2\)
+.* 7d 49 18 2a ldx r10,r9,r3
+.* e9 22 80 50 ld r9,-32688\(r2\)
+.* 7d 49 6a 2e lhzx r10,r9,r13
+.* 89 4d 00 00 lbz r10,0\(r13\)
+.* 3d 2d 00 00 addis r9,r13,0
+.* 99 49 00 00 stb r10,0\(r9\)
+.* 00 00 00 00 .*
+.* 00 01 02 18 .*
+.* <__glink_PLTresolve>:
+.* 7d 88 02 a6 mflr r12
+.* 42 9f 00 05 bcl- 20,4\*cr7\+so,.*
+.* 7d 68 02 a6 mflr r11
+.* e8 4b ff f0 ld r2,-16\(r11\)
+.* 7d 88 03 a6 mtlr r12
+.* 7d 82 5a 14 add r12,r2,r11
+.* e9 6c 00 00 ld r11,0\(r12\)
+.* e8 4c 00 08 ld r2,8\(r12\)
+.* 7d 69 03 a6 mtctr r11
+.* e9 6c 00 10 ld r11,16\(r12\)
+.* 4e 80 04 20 bctr
+.* 60 00 00 00 nop
+.* 60 00 00 00 nop
+.* 60 00 00 00 nop
+.* 38 00 00 00 li r0,0
+.* 4b ff ff c4 b .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlstocso.g b/binutils-2.21/ld/testsuite/ld-powerpc/tlstocso.g
new file mode 100644
index 0000000..d670a21
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlstocso.g
@@ -0,0 +1,15 @@
+#source: tlstoc.s
+#as: -a64
+#ld: -shared -melf64ppc
+#objdump: -sj.got
+#target: powerpc64*-*-*
+
+.*: +file format elf64-powerpc
+
+Contents of section \.got:
+.* 00000000 000186c0 00000000 00000000 .*
+.* 00000000 00000000 00000000 00000000 .*
+.* 00000000 00000000 00000000 00000000 .*
+.* 00000000 00000000 00000000 00000000 .*
+.* 00000000 00000000 00000000 00000000 .*
+.* 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlstocso.r b/binutils-2.21/ld/testsuite/ld-powerpc/tlstocso.r
new file mode 100644
index 0000000..d04cf70
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlstocso.r
@@ -0,0 +1,125 @@
+#source: tlstoc.s
+#as: -a64
+#ld: -shared -melf64ppc
+#readelf: -WSsrl
+#target: powerpc64*-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
+ +\[[ 0-9]+\] \.hash .*
+ +\[[ 0-9]+\] \.dynsym .*
+ +\[[ 0-9]+\] \.dynstr .*
+ +\[[ 0-9]+\] \.rela\.dyn .*
+ +\[[ 0-9]+\] \.rela\.plt .*
+ +\[[ 0-9]+\] \.text .*
+ +\[[ 0-9]+\] \.tdata +PROGBITS .* 0+38 0+ WAT +0 +0 +8
+ +\[[ 0-9]+\] \.tbss +NOBITS .* 0+38 0+ WAT +0 +0 +8
+ +\[[ 0-9]+\] \.dynamic .*
+ +\[[ 0-9]+\] \.branch_lt .*
+ +\[[ 0-9]+\] \.got .*
+ +\[[ 0-9]+\] \.plt .*
+ +\[[ 0-9]+\] \.shstrtab .*
+ +\[[ 0-9]+\] \.symtab .*
+ +\[[ 0-9]+\] \.strtab .*
+#...
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x[0-9a-f]+
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +LOAD .* R E 0x10000
+ +LOAD .* RW +0x10000
+ +DYNAMIC .* RW +0x8
+ +TLS .* 0x0+38 0x0+70 R +0x8
+
+ Section to Segment mapping:
+ +Segment Sections\.\.\.
+ +0+ +\.hash \.dynsym \.dynstr \.rela\.dyn \.rela\.plt \.text
+ +01 +\.tdata \.dynamic (\.branch_lt |)\.got \.plt
+ +02 +\.dynamic
+ +03 +\.tdata \.tbss
+
+Relocation section '\.rela\.dyn' at offset .* contains 11 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_PPC64_TPREL16 +0+60 le0 \+ 0
+[0-9a-f ]+R_PPC64_TPREL16_HA +0+68 le1 \+ 0
+[0-9a-f ]+R_PPC64_TPREL16_LO +0+68 le1 \+ 0
+[0-9a-f ]+R_PPC64_DTPMOD64 +0+ gd \+ 0
+[0-9a-f ]+R_PPC64_DTPREL64 +0+ gd \+ 0
+[0-9a-f ]+R_PPC64_DTPMOD64 +0+ ld \+ 0
+[0-9a-f ]+R_PPC64_DTPMOD64 +0+38 gd0 \+ 0
+[0-9a-f ]+R_PPC64_DTPREL64 +0+38 gd0 \+ 0
+[0-9a-f ]+R_PPC64_DTPMOD64 +0+40 ld0 \+ 0
+[0-9a-f ]+R_PPC64_DTPREL64 +0+50 ld2 \+ 0
+[0-9a-f ]+R_PPC64_TPREL64 +0+58 ie0 \+ 0
+
+Relocation section '\.rela\.plt' at offset .* contains 1 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_PPC64_JMP_SLOT +0+ __tls_get_addr \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND
+.* SECTION +LOCAL +DEFAULT +6
+.* SECTION +LOCAL +DEFAULT +7
+.* TLS +GLOBAL +DEFAULT +UND gd
+.* TLS +GLOBAL +DEFAULT +8 le0
+.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr
+.* TLS +GLOBAL +DEFAULT +8 ld0
+.* TLS +GLOBAL +DEFAULT +8 le1
+.* TLS +GLOBAL +DEFAULT +UND ld
+.* NOTYPE +GLOBAL +DEFAULT +6 _start
+.* TLS +GLOBAL +DEFAULT +8 ld2
+.* TLS +GLOBAL +DEFAULT +8 ld1
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+.* TLS +GLOBAL +DEFAULT +8 gd0
+.* TLS +GLOBAL +DEFAULT +8 ie0
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND
+.* SECTION +LOCAL +DEFAULT +1
+.* SECTION +LOCAL +DEFAULT +2
+.* SECTION +LOCAL +DEFAULT +3
+.* SECTION +LOCAL +DEFAULT +4
+.* SECTION +LOCAL +DEFAULT +5
+.* SECTION +LOCAL +DEFAULT +6
+.* SECTION +LOCAL +DEFAULT +7
+.* SECTION +LOCAL +DEFAULT +8
+.* SECTION +LOCAL +DEFAULT +9
+.* SECTION +LOCAL +DEFAULT +10
+.* SECTION +LOCAL +DEFAULT +11
+.* SECTION +LOCAL +DEFAULT +12
+.* TLS +LOCAL +DEFAULT +7 gd4
+.* TLS +LOCAL +DEFAULT +7 ld4
+.* TLS +LOCAL +DEFAULT +7 ld5
+.* TLS +LOCAL +DEFAULT +7 ld6
+.* TLS +LOCAL +DEFAULT +7 ie4
+.* TLS +LOCAL +DEFAULT +7 le4
+.* TLS +LOCAL +DEFAULT +7 le5
+.* NOTYPE +LOCAL +DEFAULT +11 \.Lie0
+.* OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC
+.* NOTYPE +LOCAL +DEFAULT +6 00000010\.plt_call\.__tls_get_addr\+0
+.* NOTYPE +LOCAL +DEFAULT +6 __glink_PLTresolve
+.* NOTYPE +LOCAL +DEFAULT +UND \.__tls_get_addr
+.* TLS +GLOBAL +DEFAULT +UND gd
+.* TLS +GLOBAL +DEFAULT +8 le0
+.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr
+.* TLS +GLOBAL +DEFAULT +8 ld0
+.* TLS +GLOBAL +DEFAULT +8 le1
+.* TLS +GLOBAL +DEFAULT +UND ld
+.* NOTYPE +GLOBAL +DEFAULT +6 _start
+.* TLS +GLOBAL +DEFAULT +8 ld2
+.* TLS +GLOBAL +DEFAULT +8 ld1
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+.* TLS +GLOBAL +DEFAULT +8 gd0
+.* TLS +GLOBAL +DEFAULT +8 ie0
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tlstocso.t b/binutils-2.21/ld/testsuite/ld-powerpc/tlstocso.t
new file mode 100644
index 0000000..fe9def4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tlstocso.t
@@ -0,0 +1,13 @@
+#source: tlstoc.s
+#as: -a64
+#ld: -shared -melf64ppc
+#objdump: -sj.tdata
+#target: powerpc64*-*-*
+
+.*: +file format elf64-powerpc
+
+Contents of section \.tdata:
+.* 12345678 9abcdef0 23456789 abcdef01 .*
+.* 3456789a bcdef012 456789ab cdef0123 .*
+.* 56789abc def01234 6789abcd ef012345 .*
+.* 789abcde f0123456 .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tocopt.d b/binutils-2.21/ld/testsuite/ld-powerpc/tocopt.d
new file mode 100644
index 0000000..9168661
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tocopt.d
@@ -0,0 +1,14 @@
+
+.*: file format .*
+
+Contents of section \.text:
+ 100000b0 60000000 e9228018 60000000 38a28020 .*
+ 100000c0 e8c50000 60000000 3ba08028 7c62e82a .*
+ 100000d0 60000000 39228033 60000000 38a28008 .*
+ 100000e0 e8c50000 60000000 3ba08010 7c62e82a .*
+Contents of section \.got:
+ 100100f0 00000000 100180f0 00000000 10010124 .*
+ 10010100 00000000 10010125 00000000 10010120 .*
+ 10010110 00000000 10010121 00000000 10010122 .*
+Contents of section \.sdata:
+ 10010120 01020304 0506 .*
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/tocopt.s b/binutils-2.21/ld/testsuite/ld-powerpc/tocopt.s
new file mode 100644
index 0000000..a2447ca
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/tocopt.s
@@ -0,0 +1,51 @@
+ .section .toc,"aw"
+x4t:
+ .quad x4
+x5t:
+ .quad x5
+x6t:
+ .quad x6
+
+ .section .sdata,"aw"
+x1:
+ .byte 1
+x2:
+ .byte 2
+x3:
+ .byte 3
+x4:
+ .byte 4
+x5:
+ .byte 5
+x6:
+ .byte 6
+
+ .globl _start
+ .text
+_start:
+# no need for got entry, optimise to nop,addi
+# note: ld doesn't yet do got optimisation, so we get nop,ld
+ addis 9,2,x1@got@ha
+ ld 9,x1@got@l(9)
+# must keep got entry, optimise to nop,addi,ld
+ addis 4,2,x2@got@ha
+ addi 5,4,x2@got@l
+ ld 6,0(5)
+# must keep got entry, optimise to nop,li,ldx
+ lis 29,x3@got@ha
+ addi 29,29,x3@got@l
+ ldx 3,2,29
+
+# no need for toc entry, optimise to nop,addi
+ addis 9,2,x4t@toc@ha
+ ld 9,x4t@toc@l(9)
+# must keep toc entry, optimise to nop,addi,ld
+# if we had a reloc tying the ld to x5/x5t then we could throw away
+# the toc entry and optimise to nop,nop,addi
+ addis 4,2,x5t@toc@ha
+ addi 5,4,x5t@toc@l
+ ld 6,0(5)
+# must keep toc entry, optimise to nop,li,ldx
+ lis 29,x6t@toc@ha
+ addi 29,29,x6t@toc@l
+ ldx 3,2,29
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/vxworks-relax-2.rd b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks-relax-2.rd
new file mode 100644
index 0000000..02eb964
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks-relax-2.rd
@@ -0,0 +1,11 @@
+
+Relocation section '.rela.text' at offset 0x[0-9a-f]+ contains 8 entries:
+ Offset Info Type Sym.Value Sym. Name \+ Addend
+00000016 00000106 R_PPC_ADDR16_HA 00000000 .text \+ 4000034
+0000001a 00000104 R_PPC_ADDR16_LO 00000000 .text \+ 4000034
+00000006 00000106 R_PPC_ADDR16_HA 00000000 .text \+ 4000034
+0000000a 00000104 R_PPC_ADDR16_LO 00000000 .text \+ 4000034
+00000026 00000506 R_PPC_ADDR16_HA 00000000 undefined \+ 0
+0000002a 00000504 R_PPC_ADDR16_LO 00000000 undefined \+ 0
+0400003e 00000606 R_PPC_ADDR16_HA 00000000 _start \+ 0
+04000042 00000604 R_PPC_ADDR16_LO 00000000 _start \+ 0
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/vxworks-relax-2.s b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks-relax-2.s
new file mode 100644
index 0000000..bfb87aa
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks-relax-2.s
@@ -0,0 +1,15 @@
+ .globl _start
+_start:
+ bl elsewhere
+ lis 9,elsewhere@ha
+ la 0,elsewhere@l(9)
+ bl undefined
+ b .
+
+ .section .far,"ax",@progbits
+elsewhere:
+ bl _start
+ b .
+
+ .section .pad
+ .space 0x4000000
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/vxworks-relax.rd b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks-relax.rd
new file mode 100644
index 0000000..e28094c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks-relax.rd
@@ -0,0 +1,9 @@
+
+Relocation section '.rela.text' at offset 0x4010150 contains 6 entries:
+ Offset Info Type Sym.Value Sym. Name \+ Addend
+00080012 00000106 R_PPC_ADDR16_HA 00080000 .text \+ 4000020
+00080016 00000104 R_PPC_ADDR16_LO 00080000 .text \+ 4000020
+00080006 00000106 R_PPC_ADDR16_HA 00080000 .text \+ 4000020
+0008000a 00000104 R_PPC_ADDR16_LO 00080000 .text \+ 4000020
+0408002a 00000306 R_PPC_ADDR16_HA 00080000 _start \+ 0
+0408002e 00000304 R_PPC_ADDR16_LO 00080000 _start \+ 0
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/vxworks-relax.s b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks-relax.s
new file mode 100644
index 0000000..60ec418
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks-relax.s
@@ -0,0 +1,14 @@
+ .globl _start
+_start:
+ bl elsewhere
+ lis 9,elsewhere@ha
+ la 0,elsewhere@l(9)
+ b .
+
+ .section .far,"ax",@progbits
+elsewhere:
+ bl _start
+ b .
+
+ .section .pad
+ .space 0x4000000
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-lib.dd b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-lib.dd
new file mode 100644
index 0000000..1c1861e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-lib.dd
@@ -0,0 +1,56 @@
+
+.*: file format .*
+
+Disassembly of section \.plt:
+
+00080800 <_PROCEDURE_LINKAGE_TABLE_>:
+ 80800: 81 9e 00 08 lwz r12,8\(r30\)
+ 80804: 7d 89 03 a6 mtctr r12
+ 80808: 81 9e 00 04 lwz r12,4\(r30\)
+ 8080c: 4e 80 04 20 bctr
+ 80810: 60 00 00 00 nop
+ 80814: 60 00 00 00 nop
+ 80818: 60 00 00 00 nop
+ 8081c: 60 00 00 00 nop
+ 80820: 3d 9e 00 00 addis r12,r30,0
+ 80824: 81 8c 00 0c lwz r12,12\(r12\)
+ 80828: 7d 89 03 a6 mtctr r12
+ 8082c: 4e 80 04 20 bctr
+ 80830: 39 60 00 00 li r11,0
+ 80834: 4b ff ff cc b 80800 <_PROCEDURE_LINKAGE_TABLE_>
+ 80838: 60 00 00 00 nop
+ 8083c: 60 00 00 00 nop
+ 80840: 3d 9e 00 00 addis r12,r30,0
+ 80844: 81 8c 00 10 lwz r12,16\(r12\)
+ 80848: 7d 89 03 a6 mtctr r12
+ 8084c: 4e 80 04 20 bctr
+ 80850: 39 60 00 01 li r11,1
+ 80854: 4b ff ff ac b 80800 <_PROCEDURE_LINKAGE_TABLE_>
+ 80858: 60 00 00 00 nop
+ 8085c: 60 00 00 00 nop
+Disassembly of section \.text:
+
+00080c00 <foo>:
+ 80c00: 94 21 ff e8 stwu r1,-24\(r1\)
+ 80c04: 7c 08 02 a6 mflr r0
+ 80c08: 90 01 00 1c stw r0,28\(r1\)
+ 80c0c: 3f c0 00 00 lis r30,0
+ 80c10: 83 de 00 00 lwz r30,0\(r30\)
+ 80c14: 83 de 00 00 lwz r30,0\(r30\)
+ 80c18: 80 3e 00 14 lwz r1,20\(r30\)
+ 80c1c: 80 01 00 00 lwz r0,0\(r1\)
+ 80c20: 38 00 00 01 li r0,1
+ 80c24: 90 01 00 00 stw r0,0\(r1\)
+ 80c28: 48 00 00 1d bl 80c44 <slocal>
+ 80c2c: 4b ff fc 15 bl 80840 <_PROCEDURE_LINKAGE_TABLE_\+0x40>
+ 80c30: 4b ff fb f1 bl 80820 <_PROCEDURE_LINKAGE_TABLE_\+0x20>
+ 80c34: 80 01 00 1c lwz r0,28\(r1\)
+ 80c38: 7c 08 03 a6 mtlr r0
+ 80c3c: 38 21 00 18 addi r1,r1,24
+ 80c40: 4e 80 00 20 blr
+
+00080c44 <slocal>:
+ 80c44: 4e 80 00 20 blr
+
+00080c48 <sglobal>:
+ 80c48: 4e 80 00 20 blr
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-lib.nd b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-lib.nd
new file mode 100644
index 0000000..7531ec7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-lib.nd
@@ -0,0 +1,9 @@
+#...
+Symbol table '\.dynsym' .*:
+#...
+.*: 00090400 +0 +OBJECT +GLOBAL +DEFAULT +[0-9]+ _GLOBAL_OFFSET_TABLE_
+#...
+Symbol table '\.symtab' .*:
+#...
+.*: 00090400 +0 +OBJECT +GLOBAL +DEFAULT +[0-9]+ _GLOBAL_OFFSET_TABLE_
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-lib.rd b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-lib.rd
new file mode 100644
index 0000000..40a5d55
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-lib.rd
@@ -0,0 +1,13 @@
+
+Relocation section '\.rela\.plt' at offset .* contains 2 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+0009040c .*15 R_PPC_JMP_SLOT 00000000 sexternal \+ 0
+00090410 .*15 R_PPC_JMP_SLOT 00080c48 sglobal \+ 0
+
+Relocation section '\.rela\.dyn' at offset .* contains 5 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+00090800 00000016 R_PPC_RELATIVE * 00080c44
+00080c0e .*06 R_PPC_ADDR16_HA 00000000 __GOTT_BASE__ \+ 0
+00080c12 .*04 R_PPC_ADDR16_LO 00000000 __GOTT_BASE__ \+ 0
+00080c16 .*03 R_PPC_ADDR16 00000000 __GOTT_INDEX__ \+ 0
+00090414 .*14 R_PPC_GLOB_DAT 00090c00 x \+ 0
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-lib.s b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-lib.s
new file mode 100644
index 0000000..9dfcb0f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-lib.s
@@ -0,0 +1,38 @@
+ .text
+ .globl foo
+ .type foo, @function
+foo:
+ stwu r1,-24(r1)
+ mflr r0
+ stw r0,28(r1)
+ lis r30,__GOTT_BASE__@ha
+ lwz r30,__GOTT_BASE__@l(r30)
+ lwz r30,__GOTT_INDEX__(r30)
+ lwz r1,x@got(r30)
+ lwz r0,0(r1)
+ addi r0,r0,1
+ stw r0,0(r1)
+ bl slocal
+ bl sglobal@plt
+ bl sexternal@plt
+ lwz r0,28(r1)
+ mtlr r0
+ addi r1,r1,24
+ blr
+ .size foo, .-foo
+
+ .type slocal, @function
+slocal:
+ blr
+ .size slocal, .-slocal
+
+ .globl sglobal
+ .type sglobal, @function
+sglobal:
+ blr
+ .size sglobal, .-sglobal
+
+ .data
+ .4byte slocal
+
+ .comm x,4,4
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-lib.sd b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-lib.sd
new file mode 100644
index 0000000..1d2ed5c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-lib.sd
@@ -0,0 +1,12 @@
+#...
+Program Headers:
+ Type .* Flg Align
+ LOAD .* R E 0x10000
+ LOAD .* RW 0x10000
+ DYNAMIC .* RW 0x4
+
+ Section to Segment mapping:
+ Segment Sections\.\.\.
+ 00 .* \.plt .*
+ 01 .* \.got .*
+ 02 .* \.dynamic $
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-lib.td b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-lib.td
new file mode 100644
index 0000000..9f223e3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-lib.td
@@ -0,0 +1,3 @@
+#...
+ 0x0+16 \(TEXTREL\) +0x0
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-static.d b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-static.d
new file mode 100644
index 0000000..4c2d1fd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1-static.d
@@ -0,0 +1,4 @@
+#name: VxWorks executable test 1 (static)
+#source: vxworks1.s -mregnames
+#ld: tmpdir/libvxworks1.so -Tvxworks1.ld
+#error: Dynamic sections created in non-dynamic link
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1.dd b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1.dd
new file mode 100644
index 0000000..09e5a6a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1.dd
@@ -0,0 +1,48 @@
+
+.*: file format .*
+
+Disassembly of section \.plt:
+
+00080800 <_PROCEDURE_LINKAGE_TABLE_>:
+ 80800: 3d 80 00 09 lis r12,9
+ 80802: R_PPC_ADDR16_HA _GLOBAL_OFFSET_TABLE_
+ 80804: 39 8c 04 00 addi r12,r12,1024
+ 80806: R_PPC_ADDR16_LO _GLOBAL_OFFSET_TABLE_
+ 80808: 80 0c 00 08 lwz r0,8\(r12\)
+ 8080c: 7c 09 03 a6 mtctr r0
+ 80810: 81 8c 00 04 lwz r12,4\(r12\)
+ 80814: 4e 80 04 20 bctr
+ 80818: 60 00 00 00 nop
+ 8081c: 60 00 00 00 nop
+ 80820: 3d 80 00 09 lis r12,9
+ 80822: R_PPC_ADDR16_HA _GLOBAL_OFFSET_TABLE_\+0xc
+ 80824: 81 8c 04 0c lwz r12,1036\(r12\)
+ 80826: R_PPC_ADDR16_LO _GLOBAL_OFFSET_TABLE_\+0xc
+ 80828: 7d 89 03 a6 mtctr r12
+ 8082c: 4e 80 04 20 bctr
+ 80830: 39 60 00 00 li r11,0
+ 80834: 4b ff ff cc b 80800 <_PROCEDURE_LINKAGE_TABLE_>
+ 80838: 60 00 00 00 nop
+ 8083c: 60 00 00 00 nop
+ 80840: 3d 80 00 09 lis r12,9
+ 80842: R_PPC_ADDR16_HA _GLOBAL_OFFSET_TABLE_\+0x10
+ 80844: 81 8c 04 10 lwz r12,1040\(r12\)
+ 80846: R_PPC_ADDR16_LO _GLOBAL_OFFSET_TABLE_\+0x10
+ 80848: 7d 89 03 a6 mtctr r12
+ 8084c: 4e 80 04 20 bctr
+ 80850: 39 60 00 01 li r11,1
+ 80854: 4b ff ff ac b 80800 <_PROCEDURE_LINKAGE_TABLE_>
+ 80858: 60 00 00 00 nop
+ 8085c: 60 00 00 00 nop
+Disassembly of section \.text:
+
+00080c00 <_start>:
+ 80c00: 4b ff fc 41 bl 80840 <_PROCEDURE_LINKAGE_TABLE_\+0x40>
+ 80c00: R_PPC_PLTREL24 \.plt\+0x40
+ 80c04: 48 00 00 09 bl 80c0c <sexternal>
+ 80c04: R_PPC_PLTREL24 sexternal
+ 80c08: 4b ff fc 19 bl 80820 <_PROCEDURE_LINKAGE_TABLE_\+0x20>
+ 80c08: R_PPC_PLTREL24 \.plt\+0x20
+
+00080c0c <sexternal>:
+ 80c0c: 4e 80 00 20 blr
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1.ld b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1.ld
new file mode 100644
index 0000000..3106d55
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1.ld
@@ -0,0 +1,30 @@
+SECTIONS
+{
+ . = 0x80000;
+ .interp : { *(.interp) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+
+ . = ALIGN (0x400);
+ .rela.dyn : { *(.rela.dyn) }
+ .rela.plt : { *(.rela.plt) }
+
+ . = ALIGN (0x400);
+ .plt : { *(.plt) }
+
+ . = ALIGN (0x400);
+ .text : { *(.text) *(.pad) *(.far) }
+
+ . = ALIGN (0x10000);
+ .dynamic : { *(.dynamic) }
+
+ . = ALIGN (0x400);
+ .got : { *(.got.plt) *(.got) }
+
+ . = ALIGN (0x400);
+ .data : { *(.data) }
+
+ . = ALIGN (0x400);
+ .bss : { *(.bss) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1.rd b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1.rd
new file mode 100644
index 0000000..b8591a8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1.rd
@@ -0,0 +1,22 @@
+
+Relocation section '\.rela\.plt' at offset .* contains 2 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+0009040c .*15 R_PPC_JMP_SLOT 00000000 sglobal \+ 0
+00090410 .*15 R_PPC_JMP_SLOT 00000000 foo \+ 0
+
+Relocation section '\.rela\.text' at offset .* contains 3 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+00080c00 .*12 R_PPC_PLTREL24 00080800 \.plt \+ 40
+00080c04 .*12 R_PPC_PLTREL24 00080c0c sexternal \+ 0
+00080c08 .*12 R_PPC_PLTREL24 00080800 \.plt \+ 20
+
+Relocation section '\.rela\.plt\.unloaded' at offset .* contains 8 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+00080802 .*06 R_PPC_ADDR16_HA 00090400 _GLOBAL_OFFSET_TABLE_ \+ 0
+00080806 .*04 R_PPC_ADDR16_LO 00090400 _GLOBAL_OFFSET_TABLE_ \+ 0
+00080822 .*06 R_PPC_ADDR16_HA 00090400 _GLOBAL_OFFSET_TABLE_ \+ c
+00080826 .*04 R_PPC_ADDR16_LO 00090400 _GLOBAL_OFFSET_TABLE_ \+ c
+0009040c .*01 R_PPC_ADDR32 00080800 _PROCEDURE_LINKAGE_TAB.* \+ 30
+00080842 .*06 R_PPC_ADDR16_HA 00090400 _GLOBAL_OFFSET_TABLE_ \+ 10
+00080846 .*04 R_PPC_ADDR16_LO 00090400 _GLOBAL_OFFSET_TABLE_ \+ 10
+00090410 .*01 R_PPC_ADDR32 00080800 _PROCEDURE_LINKAGE_TAB.* \+ 50
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1.s b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1.s
new file mode 100644
index 0000000..cd54d57
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks1.s
@@ -0,0 +1,14 @@
+ .text
+ .globl _start
+ .type _start,@function
+_start:
+ bl foo@plt
+ bl sexternal@plt
+ bl sglobal@plt
+ .size _start, .-_start
+
+ .globl sexternal
+ .type sexternal,@function
+sexternal:
+ blr
+ .size sexternal, .-sexternal
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/vxworks2-static.sd b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks2-static.sd
new file mode 100644
index 0000000..55fc529
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks2-static.sd
@@ -0,0 +1,9 @@
+#...
+Elf file type is EXEC \(Executable file\)
+Entry point 0x80000
+#...
+Program Headers:
+ Type .*
+ LOAD .* 0x00080000 0x00080000 .* R E 0x10000
+
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/vxworks2.s b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks2.s
new file mode 100644
index 0000000..5e8d73a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks2.s
@@ -0,0 +1,5 @@
+ .globl _start
+ .type _start,@function
+_start:
+ blr
+ .end _start
diff --git a/binutils-2.21/ld/testsuite/ld-powerpc/vxworks2.sd b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks2.sd
new file mode 100644
index 0000000..0876568
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-powerpc/vxworks2.sd
@@ -0,0 +1,13 @@
+#...
+Elf file type is EXEC \(Executable file\)
+Entry point 0x80400
+#...
+Program Headers:
+ Type .*
+ PHDR .*
+#...
+ LOAD .* 0x00080000 0x00080000 .* R E 0x10000
+ LOAD .* 0x00090000 0x00090000 .* RW 0x10000
+ DYNAMIC .*
+
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-s390/s390.exp b/binutils-2.21/ld/testsuite/ld-s390/s390.exp
new file mode 100644
index 0000000..fe0a6c1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-s390/s390.exp
@@ -0,0 +1,75 @@
+# Expect script for ld-s390 tests
+# Copyright (C) 2003, 2005, 2007 Free Software Foundation
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# Test s390 linking; all types of relocs. This tests the assembler and
+# tools like objdump as well as the linker.
+
+if { !([istarget "s390-*-*"] || [istarget "s390x-*-*"]) } {
+ return
+}
+
+# List contains test-items with 3 items followed by 2 lists:
+# 0:name 1:ld options 2:assembler options
+# 3:filenames of assembler files 4: action and options. 5: name of output file
+
+# Actions:
+# objdump: Apply objdump options on result. Compare with regex (last arg).
+# nm: Apply nm options on result. Compare with regex (last arg).
+# readelf: Apply readelf options on result. Compare with regex (last arg).
+
+set s390tests {
+ {"TLS -fpic -shared transitions" "-shared -melf_s390"
+ "-m31" {tlspic1.s tlspic2.s}
+ {{readelf -Ssrl tlspic.rd} {objdump -dzrj.text tlspic.dd}
+ {objdump -sj.got tlspic.sd} {objdump -sj.tdata tlspic.td}}
+ "libtlspic.so"}
+ {"Helper shared library" "-shared -melf_s390"
+ "-m31" {tlslib.s} {} "libtlslib.so"}
+ {"TLS -fpic and -fno-pic exec transitions"
+ "-melf_s390 tmpdir/libtlslib.so" "-m31" {tlsbinpic.s tlsbin.s}
+ {{readelf -Ssrl tlsbin.rd} {objdump -dzrj.text tlsbin.dd}
+ {objdump -sj.got tlsbin.sd} {objdump -sj.tdata tlsbin.td}}
+ "tlsbin"}
+}
+
+set s390xtests {
+ {"TLS -fpic -shared transitions" "-shared -melf64_s390"
+ "-m64 -Aesame" {tlspic1_64.s tlspic2_64.s}
+ {{readelf -WSsrl tlspic_64.rd} {objdump -dzrj.text tlspic_64.dd}
+ {objdump -sj.got tlspic_64.sd} {objdump -sj.tdata tlspic_64.td}}
+ "libtlspic_64.so"}
+ {"Helper shared library" "-shared -melf64_s390"
+ "-m64 -Aesame" {tlslib_64.s} {} "libtlslib_64.so"}
+ {"TLS -fpic and -fno-pic exec transitions"
+ "-melf64_s390 tmpdir/libtlslib_64.so" "-m64 -Aesame"
+ {tlsbinpic_64.s tlsbin_64.s}
+ {{readelf -WSsrl tlsbin_64.rd} {objdump -dzrj.text tlsbin_64.dd}
+ {objdump -sj.got tlsbin_64.sd} {objdump -sj.tdata tlsbin_64.td}}
+ "tlsbin_64"}
+}
+
+if [istarget "s390-*-*"] {
+ run_ld_link_tests $s390tests
+}
+
+if [istarget "s390x-*-*"] {
+ run_ld_link_tests $s390xtests
+}
diff --git a/binutils-2.21/ld/testsuite/ld-s390/tlsbin.dd b/binutils-2.21/ld/testsuite/ld-s390/tlsbin.dd
new file mode 100644
index 0000000..0e824da
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-s390/tlsbin.dd
@@ -0,0 +1,193 @@
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as: -m31
+#ld: -shared -melf_s390
+#objdump: -dzrj.text
+#target: s390-*-*
+
+# PT_TLS layout is:
+# Offset from Offset from Name
+# TCB base TCB end
+# 0x00 -0xa0 sg1..sg2
+# 0x20 -0x80 sl1..sl2
+# 0x40 -0x60 sh1..sh2
+# 0x60 -0x40 bg1..bg2
+# 0x80 -0x20 bl1..bl2
+
+.*: +file format elf32-s390
+
+Disassembly of section .text:
+
+0+[0-9a-f]+ <fn2>:
+# function prolog
+ +[0-9a-f]+: 90 6e f0 18 stm %r6,%r14,24\(%r15\)
+ +[0-9a-f]+: a7 d5 00 24 bras %r13,[0-9a-f]+ <fn2\+0x4c>
+# _GLOBAL_OFFSET_TABLE_
+ +[0-9a-f]+: [0-9a-f ]+ .long 0x[0-9a-f]+
+# __tls_get_addr@plt-.LT1
+ +[0-9a-f]+: [0-9a-f ]+ .long 0x[0-9a-f]+
+# sG1@tlsgd
+ +[0-9a-f]+: 00 00 00 28 .long 0x00000028
+# sG2@tlsgd
+ +[0-9a-f]+: 00 00 00 20 .long 0x00000020
+# sg1@tlsgd
+ +[0-9a-f]+: ff ff ff 60 .long 0xffffff60
+# sl1@tlsgd
+ +[0-9a-f]+: ff ff ff 80 .long 0xffffff80
+# sh1@tlsgd
+ +[0-9a-f]+: ff ff ff a0 .long 0xffffffa0
+# sl1@tlsldm
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+# sl1@dtpoff
+ +[0-9a-f]+: ff ff ff 80 .long 0xffffff80
+# sl2@dtpoff
+ +[0-9a-f]+: ff ff ff 84 .long 0xffffff84
+# sh1@tlsldm
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+# sh1@dtpoff
+ +[0-9a-f]+: ff ff ff a0 .long 0xffffffa0
+# sh2@dtpoff
+ +[0-9a-f]+: ff ff ff a4 .long 0xffffffa4
+# sG2@gotntpoff
+ +[0-9a-f]+: 00 00 00 20 .long 0x00000020
+# sg1@gotntpoff
+ +[0-9a-f]+: ff ff ff 60 .long 0xffffff60
+# sl1@gotntpoff
+ +[0-9a-f]+: ff ff ff 80 .long 0xffffff80
+# sh1@gotntpoff
+ +[0-9a-f]+: ff ff ff a0 .long 0xffffffa0
+# function prolog
+ +[0-9a-f]+: 18 ef lr %r14,%r15
+ +[0-9a-f]+: 58 c0 d0 00 l %r12,0\(%r13\)
+ +[0-9a-f]+: a7 fa ff a0 ahi %r15,-96
+ +[0-9a-f]+: 41 cc d0 00 la %r12,0\(%r12,%r13\)
+ +[0-9a-f]+: 50 e0 e0 00 st %r14,0\(%r14\)
+# Extract TCB and load branch offset
+ +[0-9a-f]+: b2 4f 00 90 ear %r9,%a0
+ +[0-9a-f]+: 58 70 d0 04 l %r7,4\(%r13\)
+# GD -> IE because variable is not defined in executable
+ +[0-9a-f]+: 58 20 d0 08 l %r2,8\(%r13\)
+ +[0-9a-f]+: 58 22 c0 00 l %r2,0\(%r2,%r12\)
+ +[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
+# GD -> IE because variable is not defined in executable where
+# the variable is referenced through IE too
+ +[0-9a-f]+: 58 20 d0 0c l %r2,12\(%r13\)
+ +[0-9a-f]+: 58 22 c0 00 l %r2,0\(%r2,%r12\)
+ +[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
+# GD -> LE with global variable defined in executable
+ +[0-9a-f]+: 58 20 d0 10 l %r2,16\(%r13\)
+ +[0-9a-f]+: 47 00 00 00 nop 0
+ +[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
+# GD -> LE with local variable defined in executable
+ +[0-9a-f]+: 58 20 d0 14 l %r2,20\(%r13\)
+ +[0-9a-f]+: 47 00 00 00 nop 0
+ +[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
+# GD -> LE with hidden variable defined in executable
+ +[0-9a-f]+: 58 20 d0 18 l %r2,24\(%r13\)
+ +[0-9a-f]+: 47 00 00 00 nop 0
+ +[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
+# LD -> LE
+ +[0-9a-f]+: 58 20 d0 1c l %r2,28\(%r13\)
+ +[0-9a-f]+: 47 00 00 00 nop 0
+ +[0-9a-f]+: 41 32 90 00 la %r3,0\(%r2,%r9\)
+ +[0-9a-f]+: 58 40 d0 20 l %r4,32\(%r13\)
+ +[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
+ +[0-9a-f]+: 58 40 d0 24 l %r4,36\(%r13\)
+ +[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
+# LD -> LE against hidden variables
+ +[0-9a-f]+: 58 20 d0 28 l %r2,40\(%r13\)
+ +[0-9a-f]+: 47 00 00 00 nop 0
+ +[0-9a-f]+: 41 32 90 00 la %r3,0\(%r2,%r9\)
+ +[0-9a-f]+: 58 40 d0 2c l %r4,44\(%r13\)
+ +[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
+ +[0-9a-f]+: 58 40 d0 30 l %r4,48\(%r13\)
+ +[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
+# IE against global var
+ +[0-9a-f]+: 58 30 d0 34 l %r3,52\(%r13\)
+ +[0-9a-f]+: 58 33 c0 00 l %r3,0\(%r3,%r12\)
+ +[0-9a-f]+: 58 33 90 00 l %r3,0\(%r3,%r9\)
+# IE -> LE against global var defined in exec
+ +[0-9a-f]+: 58 30 d0 38 l %r3,56\(%r13\)
+ +[0-9a-f]+: 18 43 lr %r4,%r3
+ +[0-9a-f]+: 07 00 nopr %r0
+ +[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
+# IE -> LE against local var
+ +[0-9a-f]+: 58 30 d0 3c l %r3,60\(%r13\)
+ +[0-9a-f]+: 18 43 lr %r4,%r3
+ +[0-9a-f]+: 07 00 nopr %r0
+ +[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
+# IE -> LE against hidden var
+ +[0-9a-f]+: 58 30 d0 40 l %r3,64\(%r13\)
+ +[0-9a-f]+: 18 43 lr %r4,%r3
+ +[0-9a-f]+: 07 00 nopr %r0
+ +[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
+# IE against global var with small got access (no optimization)
+ +[0-9a-f]+: 58 30 c0 14 l %r3,20\(%r12\)
+ +[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
+# IE against global var defined in exec with small got access
+# (no optimization)
+ +[0-9a-f]+: 58 30 c0 18 l %r3,24\(%r12\)
+ +[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
+# IE against local var with small got access (no optimization)
+ +[0-9a-f]+: 58 30 c0 10 l %r3,16\(%r12\)
+ +[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
+# IE against hidden var with small got access (no optimization)
+ +[0-9a-f]+: 58 30 c0 1c l %r3,28\(%r12\)
+ +[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
+# function epilog
+ +[0-9a-f]+: 98 6e f0 78 lm %r6,%r14,120\(%r15\)
+ +[0-9a-f]+: 07 fe br %r14
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+
+0+[0-9a-f]+ <_start>:
+# function prolog
+ +[0-9a-f]+: 90 6e f0 18 stm %r6,%r14,24\(%r15\)
+ +[0-9a-f]+: a7 d5 00 0c bras %r13,[0-9a-f]+ <_start\+0x1c>
+# sG6@indntpoff
+ +[0-9a-f]+: 00 40 15 a4 .long 0x004015a4
+# bg6@indntpoff
+ +[0-9a-f]+: ff ff ff d4 .long 0xffffffd4
+# bl6@indntpoff
+ +[0-9a-f]+: ff ff ff f4 .long 0xfffffff4
+# sh6@indntpoff
+ +[0-9a-f]+: ff ff ff b4 .long 0xffffffb4
+# sg3@indntpoff
+ +[0-9a-f]+: ff ff ff 68 .long 0xffffff68
+# function prolog
+ +[0-9a-f]+: 18 ef lr %r14,%r15
+ +[0-9a-f]+: a7 fa ff a0 ahi %r15,-96
+ +[0-9a-f]+: 50 e0 e0 00 st %r14,0\(%r14\)
+# Extract TCB
+ +[0-9a-f]+: b2 4f 00 90 ear %r9,%a0
+# IE against global var
+ +[0-9a-f]+: 58 30 d0 00 l %r3,0\(%r13\)
+ +[0-9a-f]+: 58 33 c0 00 l %r3,0\(%r3,%r12\)
+ +[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
+# IE -> LE against global var defined in exec
+ +[0-9a-f]+: 58 30 d0 04 l %r3,4\(%r13\)
+ +[0-9a-f]+: 18 43 lr %r4,%r3
+ +[0-9a-f]+: 07 00 nopr %r0
+ +[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
+# IE -> LE against local var
+ +[0-9a-f]+: 58 30 d0 08 l %r3,8\(%r13\)
+ +[0-9a-f]+: 18 43 lr %r4,%r3
+ +[0-9a-f]+: 07 00 nopr %r0
+ +[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
+# IE -> LE against hidden but not local var
+ +[0-9a-f]+: 58 30 d0 0c l %r3,12\(%r13\)
+ +[0-9a-f]+: 18 43 lr %r4,%r3
+ +[0-9a-f]+: 07 00 nopr %r0
+ +[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
+# LE, global var defined in exec
+ +[0-9a-f]+: 58 40 d0 10 l %r4,16\(%r13\)
+ +[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
+# function epilog
+ +[0-9a-f]+: 98 6e f0 78 lm %r6,%r14,120\(%r15\)
+ +[0-9a-f]+: 07 fe br %r14
diff --git a/binutils-2.21/ld/testsuite/ld-s390/tlsbin.rd b/binutils-2.21/ld/testsuite/ld-s390/tlsbin.rd
new file mode 100644
index 0000000..678d92c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-s390/tlsbin.rd
@@ -0,0 +1,145 @@
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as: -m31
+#ld: -shared -melf_s390
+#readelf: -Ssrl
+#target: s390-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 00 +0 +0 +0
+ +\[[ 0-9]+\] .interp .*
+ +\[[ 0-9]+\] .hash .*
+ +\[[ 0-9]+\] .dynsym .*
+ +\[[ 0-9]+\] .dynstr .*
+ +\[[ 0-9]+\] .rela.dyn .*
+ +\[[ 0-9]+\] .rela.plt .*
+ +\[[ 0-9]+\] .plt .*
+ +\[[ 0-9]+\] .text +PROGBITS .*
+ +\[[ 0-9]+\] .tdata +PROGBITS .* 0+60 00 WAT +0 +0 +32
+ +\[[ 0-9]+\] .tbss +NOBITS .* 0+40 00 WAT +0 +0 +1
+ +\[[ 0-9]+\] .dynamic +DYNAMIC .*
+ +\[[ 0-9]+\] .got +PROGBITS .*
+ +\[[ 0-9]+\] .shstrtab .*
+ +\[[ 0-9]+\] .symtab .*
+ +\[[ 0-9]+\] .strtab .*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x[0-9a-f]+
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +PHDR +0x0+34 0x0+400034 0x0+400034 0x0+c0 0x0+c0 R E 0x4
+ +INTERP +0x0+f4 0x0+4000f4 0x0+4000f4 0x0+11 0x0+11 R +0x1
+.*Requesting program interpreter.*
+ +LOAD .* R E 0x1000
+ +LOAD .* RW +0x1000
+ +DYNAMIC .* RW +0x4
+ +TLS .* 0x0+60 0x0+a0 R +0x20
+
+ Section to Segment mapping:
+ +Segment Sections...
+ +00 *
+ +01 +.interp *
+ +02 +.interp .hash .dynsym .dynstr .rela.dyn .rela.plt .plt .text *
+ +03 +.tdata .dynamic .got *
+ +04 +.dynamic *
+ +05 +.tdata .tbss *
+
+Relocation section '.rela.dyn' at offset .* contains 4 entries:
+ Offset +Info +Type +Sym.Value +Sym. Name \+ Addend
+[0-9a-f ]+R_390_TLS_TPOFF +0+ +sG3 \+ 0
+[0-9a-f ]+R_390_TLS_TPOFF +0+ +sG2 \+ 0
+[0-9a-f ]+R_390_TLS_TPOFF +0+ +sG6 \+ 0
+[0-9a-f ]+R_390_TLS_TPOFF +0+ +sG1 \+ 0
+
+Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
+ Offset +Info +Type +Sym.Value +Sym. Name \+ Addend
+[0-9a-f ]+R_390_JMP_SLOT[0-9a-f ]+__tls_get_offset \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND
+.* TLS +GLOBAL +DEFAULT +UND sG3
+.* TLS +GLOBAL +DEFAULT +UND sG2
+.* FUNC +GLOBAL +DEFAULT +UND __tls_get_offset
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* TLS +GLOBAL +DEFAULT +UND sG6
+.* TLS +GLOBAL +DEFAULT +UND sG1
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND
+.* SECTION +LOCAL +DEFAULT +1
+.* SECTION +LOCAL +DEFAULT +2
+.* SECTION +LOCAL +DEFAULT +3
+.* SECTION +LOCAL +DEFAULT +4
+.* SECTION +LOCAL +DEFAULT +5
+.* SECTION +LOCAL +DEFAULT +6
+.* SECTION +LOCAL +DEFAULT +7
+.* SECTION +LOCAL +DEFAULT +8
+.* SECTION +LOCAL +DEFAULT +9
+.* SECTION +LOCAL +DEFAULT +10
+.* SECTION +LOCAL +DEFAULT +11
+.* SECTION +LOCAL +DEFAULT +12
+.* TLS +LOCAL +DEFAULT +9 sl1
+.* TLS +LOCAL +DEFAULT +9 sl2
+.* TLS +LOCAL +DEFAULT +9 sl3
+.* TLS +LOCAL +DEFAULT +9 sl4
+.* TLS +LOCAL +DEFAULT +9 sl5
+.* TLS +LOCAL +DEFAULT +9 sl6
+.* TLS +LOCAL +DEFAULT +9 sl7
+.* TLS +LOCAL +DEFAULT +9 sl8
+.* TLS +LOCAL +DEFAULT +10 bl1
+.* TLS +LOCAL +DEFAULT +10 bl2
+.* TLS +LOCAL +DEFAULT +10 bl3
+.* TLS +LOCAL +DEFAULT +10 bl4
+.* TLS +LOCAL +DEFAULT +10 bl5
+.* TLS +LOCAL +DEFAULT +10 bl6
+.* TLS +LOCAL +DEFAULT +10 bl7
+.* TLS +LOCAL +DEFAULT +10 bl8
+.* OBJECT +LOCAL +DEFAULT +11 _DYNAMIC
+.* OBJECT +LOCAL +DEFAULT +12 _GLOBAL_OFFSET_TABLE_
+.* TLS +GLOBAL +DEFAULT +UND sG3
+.* TLS +GLOBAL +DEFAULT +9 sg8
+.* TLS +GLOBAL +DEFAULT +10 bg8
+.* TLS +GLOBAL +DEFAULT +10 bg6
+.* TLS +GLOBAL +DEFAULT +10 bg3
+.* TLS +GLOBAL +DEFAULT +9 sg3
+.* TLS +GLOBAL +HIDDEN +9 sh3
+.* TLS +GLOBAL +DEFAULT +UND sG2
+.* TLS +GLOBAL +DEFAULT +9 sg4
+.* TLS +GLOBAL +DEFAULT +9 sg5
+.* TLS +GLOBAL +DEFAULT +10 bg5
+.* TLS +GLOBAL +HIDDEN +9 sh7
+.* TLS +GLOBAL +HIDDEN +9 sh8
+.* FUNC +GLOBAL +DEFAULT +UND __tls_get_offset
+.* TLS +GLOBAL +DEFAULT +9 sg1
+.* FUNC +GLOBAL +DEFAULT +8 _start
+.* TLS +GLOBAL +HIDDEN +9 sh4
+.* TLS +GLOBAL +DEFAULT +10 bg7
+.* TLS +GLOBAL +HIDDEN +9 sh5
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* TLS +GLOBAL +DEFAULT +UND sG6
+.* FUNC +GLOBAL +DEFAULT +8 fn2
+.* TLS +GLOBAL +DEFAULT +9 sg2
+.* TLS +GLOBAL +DEFAULT +UND sG1
+.* TLS +GLOBAL +HIDDEN +9 sh1
+.* TLS +GLOBAL +DEFAULT +9 sg6
+.* TLS +GLOBAL +DEFAULT +9 sg7
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+.* TLS +GLOBAL +HIDDEN +9 sh2
+.* TLS +GLOBAL +HIDDEN +9 sh6
+.* TLS +GLOBAL +DEFAULT +10 bg2
+.* TLS +GLOBAL +DEFAULT +10 bg1
+.* TLS +GLOBAL +DEFAULT +10 bg4
diff --git a/binutils-2.21/ld/testsuite/ld-s390/tlsbin.s b/binutils-2.21/ld/testsuite/ld-s390/tlsbin.s
new file mode 100644
index 0000000..4da50e7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-s390/tlsbin.s
@@ -0,0 +1,73 @@
+ .section ".tbss", "awT", @nobits
+ .globl bg1, bg2, bg3, bg4, bg5, bg6, bg7, bg8
+bg1: .space 4
+bg2: .space 4
+bg3: .space 4
+bg4: .space 4
+bg5: .space 4
+bg6: .space 4
+bg7: .space 4
+bg8: .space 4
+bl1: .space 4
+bl2: .space 4
+bl3: .space 4
+bl4: .space 4
+bl5: .space 4
+bl6: .space 4
+bl7: .space 4
+bl8: .space 4
+ .text
+ .globl _start
+ .type _start,@function
+_start:
+ /* Function prolog */
+ stm %r6,%r14,24(%r15)
+ bras %r13,.LTN1
+ /* Literal pool */
+.LT1:
+.LC0:
+ .long sG6@indntpoff
+.LC1:
+ .long bg6@indntpoff
+.LC2:
+ .long bl6@indntpoff
+.LC3:
+ .long sh6@indntpoff
+.LC4:
+ .long sg3@indntpoff
+.LTN1:
+ /* Function prolog */
+ lr %r14,%r15
+ ahi %r15,-96
+ st %r14,0(%r14)
+
+ /* Extract TCB */
+ ear %r9,%a0
+
+ /* IE against global var */
+ l %r3,.LC0-.LT1(%r13)
+ l %r3,0(%r3,%r12):tls_load:sG6
+ la %r3,0(%r3,%r9)
+
+ /* IE -> LE against global var defined in exec */
+ l %r3,.LC1-.LT1(%r13)
+ l %r4,0(%r3,%r12):tls_load:bg6
+ la %r5,0(%r4,%r9)
+
+ /* IE -> LE against local var */
+ l %r3,.LC2-.LT1(%r13)
+ l %r4,0(%r3,%r12):tls_load:bl6
+ la %r5,0(%r4,%r9)
+
+ /* IE -> LE against hidden but not local var */
+ l %r3,.LC3-.LT1(%r13)
+ l %r4,0(%r3,%r12):tls_load:sh6
+ la %r5,0(%r4,%r9)
+
+ /* LE, global var defined in exec */
+ l %r4,.LC4-.LT1(%r13)
+ la %r5,0(%r4,%r9)
+
+ /* Function epilog */
+ lm %r6,%r14,120(%r15)
+ br %r14
diff --git a/binutils-2.21/ld/testsuite/ld-s390/tlsbin.sd b/binutils-2.21/ld/testsuite/ld-s390/tlsbin.sd
new file mode 100644
index 0000000..b1ecbf0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-s390/tlsbin.sd
@@ -0,0 +1,13 @@
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as: -m31
+#ld: -shared -melf_s390
+#objdump: -sj.got
+#target: s390-*-*
+
+.*: file format elf32-s390
+
+Contents of section .got:
+ [0-9a-f]+ [0-9a-f]+ 00000000 00000000 [0-9a-f]+ .@...........@..
+ [0-9a-f]+ ffffff88 00000000 ffffff68 ffffffa8 ...........h....
+ [0-9a-f]+ 00000000 00000000 00000000 ............
diff --git a/binutils-2.21/ld/testsuite/ld-s390/tlsbin.td b/binutils-2.21/ld/testsuite/ld-s390/tlsbin.td
new file mode 100644
index 0000000..f0a61b8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-s390/tlsbin.td
@@ -0,0 +1,16 @@
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as: -m31
+#ld: -shared -melf_s390
+#objdump: -sj.tdata
+#target: s390-*-*
+
+.*: file format elf32-s390
+
+Contents of section .tdata:
+ [0-9a-f]+ 00000011 00000012 00000013 00000014 .*
+ [0-9a-f]+ 00000015 00000016 00000017 00000018 .*
+ [0-9a-f]+ 00000041 00000042 00000043 00000044 .*
+ [0-9a-f]+ 00000045 00000046 00000047 00000048 .*
+ [0-9a-f]+ 00000101 00000102 00000103 00000104 .*
+ [0-9a-f]+ 00000105 00000106 00000107 00000108 .*
diff --git a/binutils-2.21/ld/testsuite/ld-s390/tlsbin_64.dd b/binutils-2.21/ld/testsuite/ld-s390/tlsbin_64.dd
new file mode 100644
index 0000000..c5c3ba0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-s390/tlsbin_64.dd
@@ -0,0 +1,223 @@
+#source: tlsbinpic_64.s
+#source: tlsbin_64.s
+#as: -m64 -Aesame
+#ld: -shared -melf64_s390
+#objdump: -dzrj.text
+#target: s390x-*-*
+
+# PT_TLS layout is:
+# Offset from Offset from Name
+# TCB base TCB end
+# 0x00 -0xa0 sg1..sg2
+# 0x20 -0x80 sl1..sl2
+# 0x40 -0x60 sh1..sh2
+# 0x60 -0x40 bg1..bg2
+# 0x80 -0x20 bl1..bl2
+
+.*: +file format elf64-s390
+
+Disassembly of section .text:
+
+0+[0-9a-f]+ <fn2>:
+# function prolog
+ +[0-9a-f]+: eb 6e f0 30 00 24 stmg %r6,%r14,48\(%r15\)
+ +[0-9a-f]+: a7 d5 00 3e bras %r13,[0-9a-f]+ <fn2\+0x82>
+# sG1@tlsgd
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+ +[0-9a-f]+: 00 00 00 60 .long 0x00000060
+# sG2@tlsgd
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+ +[0-9a-f]+: 00 00 00 48 .long 0x00000048
+# sg1@tlsgd
+ +[0-9a-f]+: ff ff ff ff .long 0xffffffff
+ +[0-9a-f]+: ff ff ff 60 .long 0xffffff60
+# sl1@tlsgd
+ +[0-9a-f]+: ff ff ff ff .long 0xffffffff
+ +[0-9a-f]+: ff ff ff 80 .long 0xffffff80
+# sh1@tlsgd
+ +[0-9a-f]+: ff ff ff ff .long 0xffffffff
+ +[0-9a-f]+: ff ff ff a0 .long 0xffffffa0
+# sl1@tlsldm
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+# sl1@dtpoff
+ +[0-9a-f]+: ff ff ff ff .long 0xffffffff
+ +[0-9a-f]+: ff ff ff 80 .long 0xffffff80
+# sl2@dtpoff
+ +[0-9a-f]+: ff ff ff ff .long 0xffffffff
+ +[0-9a-f]+: ff ff ff 84 .long 0xffffff84
+# sh1@tlsldm
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+# sh1@dtpoff
+ +[0-9a-f]+: ff ff ff ff .long 0xffffffff
+ +[0-9a-f]+: ff ff ff a0 .long 0xffffffa0
+# sh2@dtpoff
+ +[0-9a-f]+: ff ff ff ff .long 0xffffffff
+ +[0-9a-f]+: ff ff ff a4 .long 0xffffffa4
+# sG2@gotntpoff
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+ +[0-9a-f]+: 00 00 00 48 .long 0x00000048
+# sg1@gotntpoff
+ +[0-9a-f]+: ff ff ff ff .long 0xffffffff
+ +[0-9a-f]+: ff ff ff 60 .long 0xffffff60
+# sl1@gotntpoff
+ +[0-9a-f]+: ff ff ff ff .long 0xffffffff
+ +[0-9a-f]+: ff ff ff 80 .long 0xffffff80
+# sh1@gotntpoff
+ +[0-9a-f]+: ff ff ff ff .long 0xffffffff
+ +[0-9a-f]+: ff ff ff a0 .long 0xffffffa0
+# function prolog
+ +[0-9a-f]+: b9 04 00 ef lgr %r14,%r15
+ +[0-9a-f]+: a7 fb ff 60 aghi %r15,-160
+ +[0-9a-f]+: c0 c0 [0-9a-f ]+ larl %r12,[0-9a-f]+ <_GLOBAL_OFFSET_TABLE_>
+ +[0-9a-f]+: e3 e0 e0 00 00 24 stg %r14,0\(%r14\)
+# extract TCB
+ +[0-9a-f]+: b2 4f 00 90 ear %r9,%a0
+ +[0-9a-f]+: eb 94 00 20 00 0d sllg %r9,%r4,32
+ +[0-9a-f]+: b2 4f 00 91 ear %r9,%a1
+# GD -> IE because variable is not defined in executable
+ +[0-9a-f]+: e3 c0 d0 00 00 04 lg %r12,0\(%r13\)
+ +[0-9a-f]+: e3 22 c0 00 00 04 lg %r2,0\(%r2,%r12\)
+ +[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
+# GD -> IE because variable is not defined in executable where
+# the variable is referenced through IE too
+ +[0-9a-f]+: e3 20 d0 08 00 04 lg %r2,8\(%r13\)
+ +[0-9a-f]+: e3 22 c0 00 00 04 lg %r2,0\(%r2,%r12\)
+ +[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
+# GD -> LE with global variable defined in executable
+ +[0-9a-f]+: e3 20 d0 10 00 04 lg %r2,16\(%r13\)
+ +[0-9a-f]+: c0 04 00 00 00 00 brcl 0,[0-9a-f]+ <fn2\+0xca>
+ +[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
+# GD -> LE with local variable defined in executable
+ +[0-9a-f]+: e3 20 d0 18 00 04 lg %r2,24\(%r13\)
+ +[0-9a-f]+: c0 04 00 00 00 00 brcl 0,[0-9a-f]+ <fn2\+0xda>
+ +[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
+# GD -> LE with hidden variable defined in executable
+ +[0-9a-f]+: e3 20 d0 20 00 04 lg %r2,32\(%r13\)
+ +[0-9a-f]+: c0 04 00 00 00 00 brcl 0,[0-9a-f]+ <fn2\+0xea>
+ +[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
+# LD -> LE
+ +[0-9a-f]+: e3 20 d0 28 00 04 lg %r2,40\(%r13\)
+ +[0-9a-f]+: c0 04 00 00 00 00 brcl 0,[0-9a-f]+ <fn2\+0xfa>
+ +[0-9a-f]+: 41 32 90 00 la %r3,0\(%r2,%r9\)
+ +[0-9a-f]+: e3 40 d0 30 00 04 lg %r4,48\(%r13\)
+ +[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
+ +[0-9a-f]+: e3 40 d0 38 00 04 lg %r4,56\(%r13\)
+ +[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
+ +[0-9a-f]+: e3 20 d0 40 00 04 lg %r2,64\(%r13\)
+ +[0-9a-f]+: c0 04 00 00 00 00 brcl 0,[0-9a-f]+ <fn2\+0x11e>
+ +[0-9a-f]+: 41 32 90 00 la %r3,0\(%r2,%r9\)
+ +[0-9a-f]+: e3 40 d0 48 00 04 lg %r4,72\(%r13\)
+ +[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
+ +[0-9a-f]+: e3 40 d0 50 00 04 lg %r4,80\(%r13\)
+ +[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
+# IE against global var
+ +[0-9a-f]+: e3 30 d0 58 00 04 lg %r3,88\(%r13\)
+ +[0-9a-f]+: e3 33 c0 00 00 04 lg %r3,0\(%r3,%r12\)
+ +[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
+# IE -> LE against global var defined in exec
+ +[0-9a-f]+: e3 30 d0 60 00 04 lg %r3,96\(%r13\)
+ +[0-9a-f]+: eb 43 00 00 00 0d sllg %r4,%r3,0
+ +[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
+# IE -> LE against local var
+ +[0-9a-f]+: e3 30 d0 68 00 04 lg %r3,104\(%r13\)
+ +[0-9a-f]+: eb 43 00 00 00 0d sllg %r4,%r3,0
+ +[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
+# IE -> LE against hidden var
+ +[0-9a-f]+: e3 30 d0 70 00 04 lg %r3,112\(%r13\)
+ +[0-9a-f]+: eb 43 00 00 00 0d sllg %r4,%r3,0
+ +[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
+# IE against global var with larl got access
+ +[0-9a-f]+: c0 30 [0-9a-f ]+ larl %r3,[0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x28>
+ +[0-9a-f]+: e3 33 c0 00 00 04 lg %r3,0\(%r3,%r12\)
+ +[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
+# IE against global var defined in exec with larl got access
+ +[0-9a-f]+: c0 30 [0-9a-f ]+ larl %r3,[0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x38>
+ +[0-9a-f]+: eb 43 00 00 00 0d sllg %r4,%r3,0
+ +[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
+# IE against local var with larl got access
+ +[0-9a-f]+: c0 30 [0-9a-f ]+ larl %r3,[0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x20>
+ +[0-9a-f]+: eb 43 00 00 00 0d sllg %r4,%r3,0
+ +[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
+# IE against hidden var with larl got access
+ +[0-9a-f]+: c0 30 [0-9a-f ]+ larl %r3,[0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x40>
+ +[0-9a-f]+: eb 43 00 00 00 0d sllg %r4,%r3,0
+ +[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
+# IE against global var with small got access (no optimization)
+ +[0-9a-f]+: e3 30 c0 28 00 04 lg %r3,40\(%r12\)
+ +[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
+# IE against global var defined in exec with small got access
+# (no optimization)
+ +[0-9a-f]+: e3 30 c0 38 00 04 lg %r3,56\(%r12\)
+ +[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
+# IE against local var with small got access (no optimization)
+ +[0-9a-f]+: e3 30 c0 20 00 04 lg %r3,32\(%r12\)
+ +[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
+# IE against hidden var with small got access (no optimization)
+ +[0-9a-f]+: e3 30 c0 40 00 04 lg %r3,64\(%r12\)
+ +[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
+# function epilog
+ +[0-9a-f]+: eb 6e f0 d0 00 04 lmg %r6,%r14,208\(%r15\)
+ +[0-9a-f]+: 07 fe br %r14
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+
+0+[0-9a-f]+ <_start>:
+# function prolog
+ +[0-9a-f]+: 90 6e f0 18 stm %r6,%r14,24\(%r15\)
+ +[0-9a-f]+: a7 d5 00 16 bras %r13,[0-9a-f]+ <_start\+0x30>
+# sG6@indntpoff
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+ +[0-9a-f]+: 80 00 [0-9a-f ]+ ssm [0-9]+\(%r1\)
+# bg6@indntpoff
+ +[0-9a-f]+: ff ff ff ff .long 0xffffffff
+ +[0-9a-f]+: ff ff ff d4 .long 0xffffffd4
+# bl6@indntpoff
+ +[0-9a-f]+: ff ff ff ff .long 0xffffffff
+ +[0-9a-f]+: ff ff ff f4 .long 0xfffffff4
+# sh6@indntpoff
+ +[0-9a-f]+: ff ff ff ff .long 0xffffffff
+ +[0-9a-f]+: ff ff ff b4 .long 0xffffffb4
+# sg3@indntpoff
+ +[0-9a-f]+: ff ff ff ff .long 0xffffffff
+ +[0-9a-f]+: ff ff ff 68 .long 0xffffff68
+# function prolog
+ +[0-9a-f]+: b9 04 00 ef lgr %r14,%r15
+ +[0-9a-f]+: a7 fb ff 60 aghi %r15,-160
+ +[0-9a-f]+: e3 e0 e0 00 00 24 stg %r14,0\(%r14\)
+# extract TCB
+ +[0-9a-f]+: b2 4f 00 90 ear %r9,%a0
+ +[0-9a-f]+: eb 94 00 20 00 0d sllg %r9,%r4,32
+ +[0-9a-f]+: b2 4f 00 91 ear %r9,%a1
+# IE against global var
+ +[0-9a-f]+: e3 30 d0 00 00 04 lg %r3,0\(%r13\)
+ +[0-9a-f]+: e3 33 c0 00 00 04 lg %r3,0\(%r3,%r12\)
+ +[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
+# IE -> LE against global var defined in exec
+ +[0-9a-f]+: e3 30 d0 08 00 04 lg %r3,8\(%r13\)
+ +[0-9a-f]+: eb 43 00 00 00 0d sllg %r4,%r3,0
+ +[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
+# IE -> LE against local var
+ +[0-9a-f]+: e3 30 d0 10 00 04 lg %r3,16\(%r13\)
+ +[0-9a-f]+: eb 43 00 00 00 0d sllg %r4,%r3,0
+ +[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
+# IE -> LE against hidden but not local var
+ +[0-9a-f]+: e3 30 d0 18 00 04 lg %r3,24\(%r13\)
+ +[0-9a-f]+: eb 43 00 00 00 0d sllg %r4,%r3,0
+ +[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
+# LE, global var defined in exec
+ +[0-9a-f]+: e3 40 d0 20 00 04 lg %r4,32\(%r13\)
+ +[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
+# function epilog
+ +[0-9a-f]+: eb 6e f0 d0 00 04 lmg %r6,%r14,208\(%r15\)
+ +[0-9a-f]+: 07 fe br %r14
+ +[0-9a-f]+: 07 07 nopr %r7
diff --git a/binutils-2.21/ld/testsuite/ld-s390/tlsbin_64.rd b/binutils-2.21/ld/testsuite/ld-s390/tlsbin_64.rd
new file mode 100644
index 0000000..1dcb6b7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-s390/tlsbin_64.rd
@@ -0,0 +1,145 @@
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as: -m64 -Aesame
+#ld: -shared -melf64_s390
+#readelf: -Ssrl
+#target: s390x-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 00 +0 +0 +0
+ +\[[ 0-9]+\] .interp .*
+ +\[[ 0-9]+\] .hash .*
+ +\[[ 0-9]+\] .dynsym .*
+ +\[[ 0-9]+\] .dynstr .*
+ +\[[ 0-9]+\] .rela.dyn .*
+ +\[[ 0-9]+\] .rela.plt .*
+ +\[[ 0-9]+\] .plt .*
+ +\[[ 0-9]+\] .text +PROGBITS .*
+ +\[[ 0-9]+\] .tdata +PROGBITS .* 0+60 00 WAT +0 +0 +32
+ +\[[ 0-9]+\] .tbss +NOBITS .* 0+40 00 WAT +0 +0 +1
+ +\[[ 0-9]+\] .dynamic +DYNAMIC .*
+ +\[[ 0-9]+\] .got +PROGBITS .*
+ +\[[ 0-9]+\] .shstrtab .*
+ +\[[ 0-9]+\] .symtab .*
+ +\[[ 0-9]+\] .strtab .*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x[0-9a-f]+
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +PHDR +0x0+40 0x0+80000040 0x0+80000040 0x0+150 0x0+150 R E 0x8
+ +INTERP +0x0+190 0x0+80000190 0x0+80000190 0x0+11 0x0+11 R +0x1
+.*Requesting program interpreter.*
+ +LOAD .* R E 0x1000
+ +LOAD .* RW +0x1000
+ +DYNAMIC .* RW +0x8
+ +TLS .* 0x0+60 0x0+a0 R +0x20
+
+ Section to Segment mapping:
+ +Segment Sections...
+ +00 *
+ +01 +.interp *
+ +02 +.interp .hash .dynsym .dynstr .rela.dyn .rela.plt .plt .text *
+ +03 +.tdata .dynamic .got *
+ +04 +.dynamic *
+ +05 +.tdata .tbss *
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 4 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_390_TLS_TPOFF +0+ sG3 \+ 0
+[0-9a-f ]+R_390_TLS_TPOFF +0+ sG2 \+ 0
+[0-9a-f ]+R_390_TLS_TPOFF +0+ sG6 \+ 0
+[0-9a-f ]+R_390_TLS_TPOFF +0+ sG1 \+ 0
+
+Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_390_JMP_SLOT[0-9a-f ]+__tls_get_offset \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND
+.* TLS +GLOBAL +DEFAULT +UND sG3
+.* TLS +GLOBAL +DEFAULT +UND sG2
+.* FUNC +GLOBAL +DEFAULT +UND __tls_get_offset
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* TLS +GLOBAL +DEFAULT +UND sG6
+.* TLS +GLOBAL +DEFAULT +UND sG1
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND
+.* SECTION +LOCAL +DEFAULT +1
+.* SECTION +LOCAL +DEFAULT +2
+.* SECTION +LOCAL +DEFAULT +3
+.* SECTION +LOCAL +DEFAULT +4
+.* SECTION +LOCAL +DEFAULT +5
+.* SECTION +LOCAL +DEFAULT +6
+.* SECTION +LOCAL +DEFAULT +7
+.* SECTION +LOCAL +DEFAULT +8
+.* SECTION +LOCAL +DEFAULT +9
+.* SECTION +LOCAL +DEFAULT +10
+.* SECTION +LOCAL +DEFAULT +11
+.* SECTION +LOCAL +DEFAULT +12
+.* TLS +LOCAL +DEFAULT +9 sl1
+.* TLS +LOCAL +DEFAULT +9 sl2
+.* TLS +LOCAL +DEFAULT +9 sl3
+.* TLS +LOCAL +DEFAULT +9 sl4
+.* TLS +LOCAL +DEFAULT +9 sl5
+.* TLS +LOCAL +DEFAULT +9 sl6
+.* TLS +LOCAL +DEFAULT +9 sl7
+.* TLS +LOCAL +DEFAULT +9 sl8
+.* TLS +LOCAL +DEFAULT +10 bl1
+.* TLS +LOCAL +DEFAULT +10 bl2
+.* TLS +LOCAL +DEFAULT +10 bl3
+.* TLS +LOCAL +DEFAULT +10 bl4
+.* TLS +LOCAL +DEFAULT +10 bl5
+.* TLS +LOCAL +DEFAULT +10 bl6
+.* TLS +LOCAL +DEFAULT +10 bl7
+.* TLS +LOCAL +DEFAULT +10 bl8
+.* OBJECT +LOCAL +DEFAULT +11 _DYNAMIC
+.* OBJECT +LOCAL +DEFAULT +12 _GLOBAL_OFFSET_TABLE_
+.* TLS +GLOBAL +DEFAULT +UND sG3
+.* TLS +GLOBAL +DEFAULT +9 sg8
+.* TLS +GLOBAL +DEFAULT +10 bg8
+.* TLS +GLOBAL +DEFAULT +10 bg6
+.* TLS +GLOBAL +DEFAULT +10 bg3
+.* TLS +GLOBAL +DEFAULT +9 sg3
+.* TLS +GLOBAL +HIDDEN +9 sh3
+.* TLS +GLOBAL +DEFAULT +UND sG2
+.* TLS +GLOBAL +DEFAULT +9 sg4
+.* TLS +GLOBAL +DEFAULT +9 sg5
+.* TLS +GLOBAL +DEFAULT +10 bg5
+.* TLS +GLOBAL +HIDDEN +9 sh7
+.* TLS +GLOBAL +HIDDEN +9 sh8
+.* FUNC +GLOBAL +DEFAULT +UND __tls_get_offset
+.* TLS +GLOBAL +DEFAULT +9 sg1
+.* FUNC +GLOBAL +DEFAULT +8 _start
+.* TLS +GLOBAL +HIDDEN +9 sh4
+.* TLS +GLOBAL +DEFAULT +10 bg7
+.* TLS +GLOBAL +HIDDEN +9 sh5
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* TLS +GLOBAL +DEFAULT +UND sG6
+.* FUNC +GLOBAL +DEFAULT +8 fn2
+.* TLS +GLOBAL +DEFAULT +9 sg2
+.* TLS +GLOBAL +DEFAULT +UND sG1
+.* TLS +GLOBAL +HIDDEN +9 sh1
+.* TLS +GLOBAL +DEFAULT +9 sg6
+.* TLS +GLOBAL +DEFAULT +9 sg7
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+.* TLS +GLOBAL +HIDDEN +9 sh2
+.* TLS +GLOBAL +HIDDEN +9 sh6
+.* TLS +GLOBAL +DEFAULT +10 bg2
+.* TLS +GLOBAL +DEFAULT +10 bg1
+.* TLS +GLOBAL +DEFAULT +10 bg4
diff --git a/binutils-2.21/ld/testsuite/ld-s390/tlsbin_64.s b/binutils-2.21/ld/testsuite/ld-s390/tlsbin_64.s
new file mode 100644
index 0000000..c40fcfc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-s390/tlsbin_64.s
@@ -0,0 +1,75 @@
+ .section ".tbss", "awT", @nobits
+ .globl bg1, bg2, bg3, bg4, bg5, bg6, bg7, bg8
+bg1: .space 4
+bg2: .space 4
+bg3: .space 4
+bg4: .space 4
+bg5: .space 4
+bg6: .space 4
+bg7: .space 4
+bg8: .space 4
+bl1: .space 4
+bl2: .space 4
+bl3: .space 4
+bl4: .space 4
+bl5: .space 4
+bl6: .space 4
+bl7: .space 4
+bl8: .space 4
+ .text
+ .globl _start
+ .type _start,@function
+_start:
+ /* Function prolog */
+ stm %r6,%r14,24(%r15)
+ bras %r13,.LTN1
+ /* Literal pool */
+.LT1:
+.LC0:
+ .quad sG6@indntpoff
+.LC1:
+ .quad bg6@indntpoff
+.LC2:
+ .quad bl6@indntpoff
+.LC3:
+ .quad sh6@indntpoff
+.LC4:
+ .quad sg3@indntpoff
+.LTN1:
+ /* Function prolog */
+ lgr %r14,%r15
+ aghi %r15,-160
+ stg %r14,0(%r14)
+
+ /* Extract TCB */
+ ear %r9,%a0
+ sllg %r9,%r4,32
+ ear %r9,%a1
+
+ /* IE against global var */
+ lg %r3,.LC0-.LT1(%r13)
+ lg %r3,0(%r3,%r12):tls_load:sG6
+ la %r3,0(%r3,%r9)
+
+ /* IE -> LE against global var defined in exec */
+ lg %r3,.LC1-.LT1(%r13)
+ lg %r4,0(%r3,%r12):tls_load:bg6
+ la %r5,0(%r4,%r9)
+
+ /* IE -> LE against local var */
+ lg %r3,.LC2-.LT1(%r13)
+ lg %r4,0(%r3,%r12):tls_load:bl6
+ la %r5,0(%r4,%r9)
+
+ /* IE -> LE against hidden but not local var */
+ lg %r3,.LC3-.LT1(%r13)
+ lg %r4,0(%r3,%r12):tls_load:sh6
+ la %r5,0(%r4,%r9)
+
+ /* LE, global var defined in exec */
+ lg %r4,.LC4-.LT1(%r13)
+ la %r5,0(%r4,%r9)
+
+ /* Function epilog */
+ lmg %r6,%r14,208(%r15)
+ br %r14
diff --git a/binutils-2.21/ld/testsuite/ld-s390/tlsbin_64.sd b/binutils-2.21/ld/testsuite/ld-s390/tlsbin_64.sd
new file mode 100644
index 0000000..6618e45
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-s390/tlsbin_64.sd
@@ -0,0 +1,18 @@
+#source: tlsbinpic_64.s
+#source: tlsbin_64.s
+#as: -m64 -Aesame
+#ld: -shared -melf64_s390
+#objdump: -sj.got
+#target: s390x-*-*
+
+.*: file format elf64-s390
+
+Contents of section .got:
+ [0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00000000 00000000 .*
+ [0-9a-f]+ 00000000 00000000 [0-9a-f]+ [0-9a-f]+ .*
+ [0-9a-f]+ ffffffff ffffff88 00000000 00000000 .*
+ [0-9a-f]+ 00000000 00000000 ffffffff ffffff68 .*
+ [0-9a-f]+ ffffffff ffffffa8 00000000 00000000 .*
+ [0-9a-f]+ 00000000 00000000 00000000 00000000 .*
+ [0-9a-f]+ 00000000 00000000 00000000 00000000 .*
+ [0-9a-f]+ 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-s390/tlsbin_64.td b/binutils-2.21/ld/testsuite/ld-s390/tlsbin_64.td
new file mode 100644
index 0000000..dfa7e8d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-s390/tlsbin_64.td
@@ -0,0 +1,16 @@
+#source: tlsbinpic_64.s
+#source: tlsbin_64.s
+#as: -m64 -Aesame
+#ld: -shared -melf64_s390
+#objdump: -sj.tdata
+#target: s390x-*-*
+
+.*: file format elf64-s390
+
+Contents of section .tdata:
+ [0-9a-f]+ 00000011 00000012 00000013 00000014 .*
+ [0-9a-f]+ 00000015 00000016 00000017 00000018 .*
+ [0-9a-f]+ 00000041 00000042 00000043 00000044 .*
+ [0-9a-f]+ 00000045 00000046 00000047 00000048 .*
+ [0-9a-f]+ 00000101 00000102 00000103 00000104 .*
+ [0-9a-f]+ 00000105 00000106 00000107 00000108 .*
diff --git a/binutils-2.21/ld/testsuite/ld-s390/tlsbinpic.s b/binutils-2.21/ld/testsuite/ld-s390/tlsbinpic.s
new file mode 100644
index 0000000..e52e3a4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-s390/tlsbinpic.s
@@ -0,0 +1,170 @@
+ .section ".tdata", "awT", @progbits
+ .balign 32
+ .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
+ .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+ .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+ .hidden sh1, sh2
+sg1: .long 17
+sg2: .long 18
+sg3: .long 19
+sg4: .long 20
+sg5: .long 21
+sg6: .long 22
+sg7: .long 23
+sg8: .long 24
+sl1: .long 65
+sl2: .long 66
+sl3: .long 67
+sl4: .long 68
+sl5: .long 69
+sl6: .long 70
+sl7: .long 71
+sl8: .long 72
+sh1: .long 257
+sh2: .long 258
+sh3: .long 259
+sh4: .long 260
+sh5: .long 261
+sh6: .long 262
+sh7: .long 263
+sh8: .long 264
+ .text
+ .globl fn2
+ .type fn2,@function
+ .balign 64
+fn2:
+ /* Function prolog */
+ stm %r6,%r14,24(%r15)
+ bras %r13,.LTN1
+ /* Literal pool */
+.LT1:
+.LC0:
+ .long _GLOBAL_OFFSET_TABLE_-.LT1
+.LC1:
+ .long __tls_get_offset@plt-.LT1
+.LC2:
+ .long sG1@tlsgd
+.LC3:
+ .long sG2@tlsgd
+.LC4:
+ .long sg1@tlsgd
+.LC5:
+ .long sl1@tlsgd
+.LC6:
+ .long sh1@tlsgd
+.LC7:
+ .long sl1@tlsldm
+.LC8:
+ .long sl1@dtpoff
+.LC9:
+ .long sl2@dtpoff
+.LC10:
+ .long sh1@tlsldm
+.LC11:
+ .long sh1@dtpoff
+.LC12:
+ .long sh2@dtpoff
+.LC13:
+ .long sG2@gotntpoff
+.LC14:
+ .long sg1@gotntpoff
+.LC15:
+ .long sl1@gotntpoff
+.LC16:
+ .long sh1@gotntpoff
+.LTN1:
+ /* Function prolog */
+ lr %r14,%r15
+ l %r12,.LC0-.LT1(%r13)
+ ahi %r15,-96
+ la %r12,0(%r12,%r13)
+ st %r14,0(%r14)
+
+ /* Extract TCB and load branch offset */
+ ear %r9,%a0
+ l %r7,.LC1-.LT1(%r13)
+
+ /* GD -> IE because variable is not defined in executable */
+ l %r2,.LC2-.LT1(%r13)
+ bas %r14,0(%r7,%r13):tls_gdcall:sG1
+ la %r2,0(%r2,%r9)
+
+ /* GD -> IE because variable is not defined in executable where
+ the variable is referenced through IE too */
+ l %r2,.LC3-.LT1(%r13)
+ bas %r14,0(%r7,%r13):tls_gdcall:sG2
+ la %r2,0(%r2,%r9)
+
+ /* GD -> LE with global variable defined in executable */
+ l %r2,.LC4-.LT1(%r13)
+ bas %r14,0(%r7,%r13):tls_gdcall:sg1
+ la %r2,0(%r2,%r9)
+
+ /* GD -> LE with local variable defined in executable */
+ l %r2,.LC5-.LT1(%r13)
+ bas %r14,0(%r7,%r13):tls_gdcall:sl1
+ la %r2,0(%r2,%r9)
+
+ /* GD -> LE with hidden variable defined in executable */
+ l %r2,.LC6-.LT1(%r13)
+ bas %r14,0(%r7,%r13):tls_gdcall:sh1
+ la %r2,0(%r2,%r9)
+
+ /* LD -> LE */
+ l %r2,.LC7-.LT1(%r13)
+ bas %r14,0(%r7,%r13):tls_ldcall:sl1
+ la %r3,0(%r2,%r9)
+ l %r4,.LC8-.LT1(%r13)
+ la %r5,0(%r4,%r3)
+ l %r4,.LC9-.LT1(%r13)
+ la %r5,0(%r4,%r3)
+
+ /* LD -> LE against hidden variables */
+ l %r2,.LC10-.LT1(%r13)
+ bas %r14,0(%r7,%r13):tls_ldcall:sh1
+ la %r3,0(%r2,%r9)
+ l %r4,.LC11-.LT1(%r13)
+ la %r5,0(%r4,%r3)
+ l %r4,.LC12-.LT1(%r13)
+ la %r5,0(%r4,%r3)
+
+ /* IE against global var */
+ l %r3,.LC13-.LT1(%r13)
+ l %r3,0(%r3,%r12):tls_load:sG2
+ l %r3,0(%r3,%r9)
+
+ /* IE -> LE against global var defined in exec */
+ l %r3,.LC14-.LT1(%r13)
+ l %r4,0(%r3,%r12):tls_load:sg1
+ la %r5,0(%r4,%r9)
+
+ /* IE -> LE against local var */
+ l %r3,.LC15-.LT1(%r13)
+ l %r4,0(%r3,%r12):tls_load:sl1
+ la %r5,0(%r4,%r9)
+
+ /* IE -> LE against hidden var */
+ l %r3,.LC16-.LT1(%r13)
+ l %r4,0(%r3,%r12):tls_load:sh1
+ la %r5,0(%r4,%r9)
+
+ /* IE against global var with small got access (no optimization) */
+ l %r3,sG3@gotntpoff(%r12)
+ la %r3,0(%r3,%r9)
+
+ /* IE against global var defined in exec with small got access
+ (no optimization) */
+ l %r3,sg3@gotntpoff(%r12)
+ la %r3,0(%r3,%r9)
+
+ /* IE against local var with small got access (no optimization) */
+ l %r3,sl3@gotntpoff(%r12)
+ la %r3,0(%r3,%r9)
+
+ /* IE against hidden var with small got access (no optimization) */
+ l %r3,sh3@gotntpoff(%r12)
+ la %r3,0(%r3,%r9)
+
+ /* Function epilog */
+ lm %r6,%r14,120(%r15)
+ br %r14
diff --git a/binutils-2.21/ld/testsuite/ld-s390/tlsbinpic_64.s b/binutils-2.21/ld/testsuite/ld-s390/tlsbinpic_64.s
new file mode 100644
index 0000000..eeda6ca
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-s390/tlsbinpic_64.s
@@ -0,0 +1,186 @@
+ .section ".tdata", "awT", @progbits
+ .balign 32
+ .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
+ .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+ .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+ .hidden sh1, sh2
+sg1: .long 17
+sg2: .long 18
+sg3: .long 19
+sg4: .long 20
+sg5: .long 21
+sg6: .long 22
+sg7: .long 23
+sg8: .long 24
+sl1: .long 65
+sl2: .long 66
+sl3: .long 67
+sl4: .long 68
+sl5: .long 69
+sl6: .long 70
+sl7: .long 71
+sl8: .long 72
+sh1: .long 257
+sh2: .long 258
+sh3: .long 259
+sh4: .long 260
+sh5: .long 261
+sh6: .long 262
+sh7: .long 263
+sh8: .long 264
+ .text
+ .globl fn2
+ .type fn2,@function
+ .balign 64
+fn2:
+ /* Function prolog */
+ stmg %r6,%r14,48(%r15)
+ bras %r13,.LTN1
+ /* Literal pool */
+.LT1:
+.LC2:
+ .quad sG1@tlsgd
+.LC3:
+ .quad sG2@tlsgd
+.LC4:
+ .quad sg1@tlsgd
+.LC5:
+ .quad sl1@tlsgd
+.LC6:
+ .quad sh1@tlsgd
+.LC7:
+ .quad sl1@tlsldm
+.LC8:
+ .quad sl1@dtpoff
+.LC9:
+ .quad sl2@dtpoff
+.LC10:
+ .quad sh1@tlsldm
+.LC11:
+ .quad sh1@dtpoff
+.LC12:
+ .quad sh2@dtpoff
+.LC13:
+ .quad sG2@gotntpoff
+.LC14:
+ .quad sg1@gotntpoff
+.LC15:
+ .quad sl1@gotntpoff
+.LC16:
+ .quad sh1@gotntpoff
+.LTN1:
+ /* Function prolog */
+ lgr %r14,%r15
+ aghi %r15,-160
+ larl %r12,_GLOBAL_OFFSET_TABLE_
+ stg %r14,0(%r14)
+
+ /* Extract TCB */
+ ear %r9,%a0
+ sllg %r9,%r4,32
+ ear %r9,%a1
+
+ /* GD -> IE because variable is not defined in executable */
+ lg %r12,.LC2-.LT1(%r13)
+ brasl %r14,__tls_get_offset@plt:tls_gdcall:sG1
+ la %r2,0(%r2,%r9)
+
+ /* GD -> IE because variable is not defined in executable where
+ the variable is referenced through IE too */
+ lg %r2,.LC3-.LT1(%r13)
+ brasl %r14,__tls_get_offset@plt:tls_gdcall:sG2
+ la %r2,0(%r2,%r9)
+
+ /* GD -> LE with global variable defined in executable */
+ lg %r2,.LC4-.LT1(%r13)
+ brasl %r14,__tls_get_offset@plt:tls_gdcall:sg1
+ la %r2,0(%r2,%r9)
+
+ /* GD -> LE with local variable defined in executable */
+ lg %r2,.LC5-.LT1(%r13)
+ brasl %r14,__tls_get_offset@plt:tls_gdcall:sl1
+ la %r2,0(%r2,%r9)
+
+ /* GD -> LE with hidden variable defined in executable */
+ lg %r2,.LC6-.LT1(%r13)
+ brasl %r14,__tls_get_offset@plt:tls_gdcall:sh1
+ la %r2,0(%r2,%r9)
+
+ /* LD -> LE */
+ lg %r2,.LC7-.LT1(%r13)
+ brasl %r14,__tls_get_offset@plt:tls_ldcall:sl1
+ la %r3,0(%r2,%r9)
+ lg %r4,.LC8-.LT1(%r13)
+ la %r5,0(%r4,%r3)
+ lg %r4,.LC9-.LT1(%r13)
+ la %r5,0(%r4,%r3)
+
+ /* LD -> LE against hidden variables */
+ lg %r2,.LC10-.LT1(%r13)
+ brasl %r14,__tls_get_offset@plt:tls_ldcall:sh1
+ la %r3,0(%r2,%r9)
+ lg %r4,.LC11-.LT1(%r13)
+ la %r5,0(%r4,%r3)
+ lg %r4,.LC12-.LT1(%r13)
+ la %r5,0(%r4,%r3)
+
+ /* IE against global var */
+ lg %r3,.LC13-.LT1(%r13)
+ lg %r3,0(%r3,%r12):tls_load:sG2
+ la %r3,0(%r3,%r9)
+
+ /* IE -> LE against global var defined in exec */
+ lg %r3,.LC14-.LT1(%r13)
+ lg %r4,0(%r3,%r12):tls_load:sg1
+ la %r5,0(%r4,%r9)
+
+ /* IE -> LE against local var */
+ lg %r3,.LC15-.LT1(%r13)
+ lg %r4,0(%r3,%r12):tls_load:sl2
+ la %r5,0(%r4,%r9)
+
+ /* IE -> LE against hidden var */
+ lg %r3,.LC16-.LT1(%r13)
+ lg %r4,0(%r3,%r12):tls_load:sh1
+ la %r5,0(%r4,%r9)
+
+ /* IE against global var with larl got access */
+ larl %r3,sG3@indntpoff
+ lg %r3,0(%r3,%r12):tls_load:sG3
+ la %r3,0(%r3,%r9)
+
+ /* IE against global var defined in exec with larl got access */
+ larl %r3,sg3@indntpoff
+ lg %r4,0(%r3,%r12):tls_load:sg3
+ la %r5,0(%r4,%r9)
+
+ /* IE against local var with larl got access */
+ larl %r3,sl3@indntpoff
+ lg %r4,0(%r3,%r12):tls_load:sl3
+ la %r5,0(%r4,%r9)
+
+ /* IE against hidden var with larl got access */
+ larl %r3,sh3@indntpoff
+ lg %r4,0(%r3,%r12):tls_load:sh3
+ la %r5,0(%r4,%r9)
+
+ /* IE against global var with small got access (no optimization) */
+ lg %r3,sG3@gotntpoff(%r12)
+ la %r3,0(%r3,%r9)
+
+ /* IE against global var defined in exec with small got access
+ (no optimization) */
+ lg %r3,sg3@gotntpoff(%r12)
+ la %r3,0(%r3,%r9)
+
+ /* IE against local var with small got access (no optimization) */
+ lg %r3,sl3@gotntpoff(%r12)
+ la %r3,0(%r3,%r9)
+
+ /* IE against hidden var with small got access (no optimization) */
+ lg %r3,sh3@gotntpoff(%r12)
+ la %r3,0(%r3,%r9)
+
+ /* Function epilog */
+ lmg %r6,%r14,208(%r15)
+ br %r14
diff --git a/binutils-2.21/ld/testsuite/ld-s390/tlslib.s b/binutils-2.21/ld/testsuite/ld-s390/tlslib.s
new file mode 100644
index 0000000..3ec87c2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-s390/tlslib.s
@@ -0,0 +1,17 @@
+ .section ".tdata", "awT", @progbits
+ .globl sG1, sG2, sG3, sG4, sG5, sG6, sG7, sG8,
+sG1: .long 513
+sG2: .long 514
+sG3: .long 515
+sG4: .long 516
+sG5: .long 517
+sG6: .long 518
+sG7: .long 519
+sG8: .long 520
+
+ .text
+ /* Dummy. */
+ .globl __tls_get_offset
+ .type __tls_get_offset,@function
+__tls_get_offset:
+ br %r14
diff --git a/binutils-2.21/ld/testsuite/ld-s390/tlslib_64.s b/binutils-2.21/ld/testsuite/ld-s390/tlslib_64.s
new file mode 100644
index 0000000..3ec87c2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-s390/tlslib_64.s
@@ -0,0 +1,17 @@
+ .section ".tdata", "awT", @progbits
+ .globl sG1, sG2, sG3, sG4, sG5, sG6, sG7, sG8,
+sG1: .long 513
+sG2: .long 514
+sG3: .long 515
+sG4: .long 516
+sG5: .long 517
+sG6: .long 518
+sG7: .long 519
+sG8: .long 520
+
+ .text
+ /* Dummy. */
+ .globl __tls_get_offset
+ .type __tls_get_offset,@function
+__tls_get_offset:
+ br %r14
diff --git a/binutils-2.21/ld/testsuite/ld-s390/tlspic.dd b/binutils-2.21/ld/testsuite/ld-s390/tlspic.dd
new file mode 100644
index 0000000..d5caeaf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-s390/tlspic.dd
@@ -0,0 +1,189 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as: -m31
+#ld: -shared -melf_s390
+#objdump: -dzrj.text
+#target: s390-*-*
+
+.*: +file format elf32-s390
+
+Disassembly of section .text:
+
+0+[0-9a-f]+ <fn1>:
+# function prolog
+ +[0-9a-f]+: 90 6e f0 18 stm %r6,%r14,24\(%r15\)
+ +[0-9a-f]+: a7 d5 00 30 bras %r13,[0-9a-f]+ <fn1\+0x64>
+# _GLOBAL_OFFSET_TABLE_-.LT1
+ +[0-9a-f]+: [0-9a-f ]+ .long 0x[0-9a-f]+
+# __tls_get_addr@plt-.LT1
+ +[0-9a-f]+: [0-9a-f ]+ .long 0x[0-9a-f]+
+# sg1@tlsgd
+ +[0-9a-f]+: 00 00 00 38 .long 0x00000038
+# sg2@tlsgd
+ +[0-9a-f]+: 00 00 00 48 .long 0x00000048
+# sl1@tlsgd
+ +[0-9a-f]+: 00 00 00 10 .long 0x00000010
+# sl2@tlsgd
+ +[0-9a-f]+: 00 00 00 18 .long 0x00000018
+# sh1@tlsgd
+ +[0-9a-f]+: 00 00 00 4c .long 0x0000004c
+# sh2@tlsgd
+ +[0-9a-f]+: 00 00 00 54 .long 0x00000054
+# sH1@tlsgd
+ +[0-9a-f]+: 00 00 00 28 .long 0x00000028
+# sH2@tlsgd
+ +[0-9a-f]+: 00 00 00 30 .long 0x00000030
+# sl1@tlsldm
+ +[0-9a-f]+: 00 00 00 20 .long 0x00000020
+# sl1@dtpoff
+ +[0-9a-f]+: 00 00 00 20 .long 0x00000020
+# sl2@dtpoff
+ +[0-9a-f]+: 00 00 00 24 .long 0x00000024
+# sh1@tlsldm
+ +[0-9a-f]+: 00 00 00 20 .long 0x00000020
+# sh1@dtpoff
+ +[0-9a-f]+: 00 00 00 40 .long 0x00000040
+# sh2@dtpoff
+ +[0-9a-f]+: 00 00 00 44 .long 0x00000044
+# sH1@tlsldm
+ +[0-9a-f]+: 00 00 00 20 .long 0x00000020
+# sH1@dtpoff
+ +[0-9a-f]+: 00 00 00 60 .long 0x00000060
+# sH2@dtpoff
+ +[0-9a-f]+: 00 00 00 64 .long 0x00000064
+# sg2@gotntpoff
+ +[0-9a-f]+: 00 00 00 48 .long 0x00000048
+# sl2@gotntpoff
+ +[0-9a-f]+: 00 00 00 18 .long 0x00000018
+# sh2@gotntpoff
+ +[0-9a-f]+: 00 00 00 54 .long 0x00000054
+# sH2@gotntpoff
+ +[0-9a-f]+: 00 00 00 30 .long 0x00000030
+# function prolog
+ +[0-9a-f]+: 18 ef lr %r14,%r15
+ +[0-9a-f]+: 58 c0 d0 00 l %r12,0\(%r13\)
+ +[0-9a-f]+: a7 fa ff a0 ahi %r15,-96
+ +[0-9a-f]+: 41 cc d0 00 la %r12,0\(%r12,%r13\)
+ +[0-9a-f]+: 50 e0 e0 00 st %r14,0\(%r14\)
+# Extract TCB and load branch offset
+ +[0-9a-f]+: b2 4f 00 90 ear %r9,%a0
+ +[0-9a-f]+: 58 70 d0 04 l %r7,4\(%r13\)
+# GD
+ +[0-9a-f]+: 58 20 d0 08 l %r2,8\(%r13\)
+ +[0-9a-f]+: 4d e7 d0 00 bas %r14,0\(%r7,%r13\)
+ +[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
+# GD -> IE because variable is referenced through IE too
+ +[0-9a-f]+: 58 20 d0 0c l %r2,12\(%r13\)
+ +[0-9a-f]+: 58 22 c0 00 l %r2,0\(%r2,%r12\)
+ +[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
+# GD against local variable
+ +[0-9a-f]+: 58 20 d0 10 l %r2,16\(%r13\)
+ +[0-9a-f]+: 4d e7 d0 00 bas %r14,0\(%r7,%r13\)
+ +[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
+# GD -> IE against local variable referenced through IE too
+ +[0-9a-f]+: 58 20 d0 14 l %r2,20\(%r13\)
+ +[0-9a-f]+: 58 22 c0 00 l %r2,0\(%r2,%r12\)
+ +[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
+# GD against hidden and local variable
+ +[0-9a-f]+: 58 20 d0 18 l %r2,24\(%r13\)
+ +[0-9a-f]+: 4d e7 d0 00 bas %r14,0\(%r7,%r13\)
+ +[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
+# GD -> IE against hidden and local variable referenced through
+# IE too
+ +[0-9a-f]+: 58 20 d0 1c l %r2,28\(%r13\)
+ +[0-9a-f]+: 58 22 c0 00 l %r2,0\(%r2,%r12\)
+ +[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
+# GD against hidden but not local variable
+ +[0-9a-f]+: 58 20 d0 20 l %r2,32\(%r13\)
+ +[0-9a-f]+: 4d e7 d0 00 bas %r14,0\(%r7,%r13\)
+ +[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
+# GD -> IE against hidden but not local variable referenced through
+# IE too
+ +[0-9a-f]+: 58 20 d0 24 l %r2,36\(%r13\)
+ +[0-9a-f]+: 58 22 c0 00 l %r2,0\(%r2,%r12\)
+ +[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
+# LD
+ +[0-9a-f]+: 58 20 d0 28 l %r2,40\(%r13\)
+ +[0-9a-f]+: 4d e7 d0 00 bas %r14,0\(%r7,%r13\)
+ +[0-9a-f]+: 41 32 90 00 la %r3,0\(%r2,%r9\)
+ +[0-9a-f]+: 58 40 d0 2c l %r4,44\(%r13\)
+ +[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
+ +[0-9a-f]+: 58 40 d0 30 l %r4,48\(%r13\)
+ +[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
+# LD against hidden and local variables
+ +[0-9a-f]+: 58 20 d0 34 l %r2,52\(%r13\)
+ +[0-9a-f]+: 4d e7 d0 00 bas %r14,0\(%r7,%r13\)
+ +[0-9a-f]+: 41 32 90 00 la %r3,0\(%r2,%r9\)
+ +[0-9a-f]+: 58 40 d0 38 l %r4,56\(%r13\)
+ +[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
+ +[0-9a-f]+: 58 40 d0 34 l %r4,52\(%r13\)
+ +[0-9a-f]+: 41 55 30 00 la %r5,0\(%r5,%r3\)
+# LD against hidden but not local variables
+ +[0-9a-f]+: 58 20 d0 40 l %r2,64\(%r13\)
+ +[0-9a-f]+: 4d e7 d0 00 bas %r14,0\(%r7,%r13\)
+ +[0-9a-f]+: 41 32 90 00 la %r3,0\(%r2,%r9\)
+ +[0-9a-f]+: 58 30 d0 44 l %r3,68\(%r13\)
+ +[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
+ +[0-9a-f]+: 58 40 d0 48 l %r4,72\(%r13\)
+ +[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
+# IE against global var
+ +[0-9a-f]+: 58 30 d0 4c l %r3,76\(%r13\)
+ +[0-9a-f]+: 58 33 c0 00 l %r3,0\(%r3,%r12\)
+ +[0-9a-f]+: 41 33 30 00 la %r3,0\(%r3,%r3\)
+# IE against local var
+ +[0-9a-f]+: 58 30 d0 50 l %r3,80\(%r13\)
+ +[0-9a-f]+: 58 43 c0 00 l %r4,0\(%r3,%r12\)
+ +[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
+# IE against hidden and local var
+ +[0-9a-f]+: 58 30 d0 54 l %r3,84\(%r13\)
+ +[0-9a-f]+: 58 43 c0 00 l %r4,0\(%r3,%r12\)
+ +[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
+# IE against hidden but not local var
+ +[0-9a-f]+: 58 30 d0 58 l %r3,88\(%r13\)
+ +[0-9a-f]+: 58 43 c0 00 l %r4,0\(%r3,%r12\)
+ +[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
+# IE against global var with small got access (no optimization)
+ +[0-9a-f]+: 58 30 c0 34 l %r3,52\(%r12\)
+ +[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
+# IE against local var with small got access (no optimization)
+ +[0-9a-f]+: 58 30 c0 1c l %r3,28\(%r12\)
+ +[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
+# IE against hidden and local var with small got access
+# (no optimization)
+ +[0-9a-f]+: 58 30 c0 40 l %r3,64\(%r12\)
+ +[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
+# IE against hidden but not local var with small got access
+# (no optimization)
+ +[0-9a-f]+: 58 30 c0 44 l %r3,68\(%r12\)
+ +[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
+# function prolog
+ +[0-9a-f]+: 98 6e f0 78 lm %r6,%r14,120\(%r15\)
+ +[0-9a-f]+: 07 fe br %r14
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
diff --git a/binutils-2.21/ld/testsuite/ld-s390/tlspic.rd b/binutils-2.21/ld/testsuite/ld-s390/tlspic.rd
new file mode 100644
index 0000000..ec63e3d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-s390/tlspic.rd
@@ -0,0 +1,142 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as: -m31
+#ld: -shared -melf_s390
+#readelf: -Ssrl
+#target: s390-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 00 +0 +0 +0
+ +\[[ 0-9]+\] .hash .*
+ +\[[ 0-9]+\] .dynsym .*
+ +\[[ 0-9]+\] .dynstr .*
+ +\[[ 0-9]+\] .rela.dyn .*
+ +\[[ 0-9]+\] .rela.plt .*
+ +\[[ 0-9]+\] .plt .*
+ +\[[ 0-9]+\] .text +PROGBITS .*
+ +\[[ 0-9]+\] .tdata +PROGBITS .* 0+60 00 WAT +0 +0 32
+ +\[[ 0-9]+\] .tbss +NOBITS .* 0+20 00 WAT +0 +0 +1
+ +\[[ 0-9]+\] .dynamic +DYNAMIC .*
+ +\[[ 0-9]+\] .got +PROGBITS .*
+ +\[[ 0-9]+\] .shstrtab .*
+ +\[[ 0-9]+\] .symtab .*
+ +\[[ 0-9]+\] .strtab .*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x[0-9a-f]+
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz MemSiz +Flg Align
+ +LOAD .* R E 0x1000
+ +LOAD .* RW +0x1000
+ +DYNAMIC .* RW +0x4
+ +TLS .* 0x0+60 0x0+80 R +0x20
+
+ Section to Segment mapping:
+ +Segment Sections...
+ +00 +.hash .dynsym .dynstr .rela.dyn .rela.plt .plt .text
+ +01 +.tdata .dynamic .got
+ +02 +.dynamic
+ +03 +.tdata .tbss
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 14 entries:
+ Offset +Info +Type +Sym.Value +Sym. Name \+ Addend
+[0-9a-f ]+R_390_TLS_DTPMOD +0+
+[0-9a-f ]+R_390_TLS_TPOFF +0+24
+[0-9a-f ]+R_390_TLS_TPOFF +0+30
+[0-9a-f ]+R_390_TLS_DTPMOD +0+
+[0-9a-f ]+R_390_TLS_DTPMOD +0+
+[0-9a-f ]+R_390_TLS_TPOFF +0+64
+[0-9a-f ]+R_390_TLS_TPOFF +0+50
+[0-9a-f ]+R_390_TLS_TPOFF +0+70
+[0-9a-f ]+R_390_TLS_DTPMOD +0+
+[0-9a-f ]+R_390_TLS_TPOFF +0+44
+[0-9a-f ]+R_390_TLS_TPOFF +0+10 +sg5 \+ 0
+[0-9a-f ]+R_390_TLS_DTPMOD +0+ +sg1 \+ 0
+[0-9a-f ]+R_390_TLS_DTPOFF +0+ +sg1 \+ 0
+[0-9a-f ]+R_390_TLS_TPOFF +0+4 +sg2 \+ 0
+
+Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
+ Offset +Info +Type +Sym.Value +Sym. Name \+ Addend
+[0-9a-f ]+R_390_JMP_SLOT +0+ +__tls_get_offset \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND
+.* SECTION +LOCAL +DEFAULT +7
+.* SECTION +LOCAL +DEFAULT +8
+.* TLS +GLOBAL +DEFAULT +8 sg8
+.* TLS +GLOBAL +DEFAULT +8 sg3
+.* TLS +GLOBAL +DEFAULT +8 sg4
+.* TLS +GLOBAL +DEFAULT +8 sg5
+.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_offset
+.* TLS +GLOBAL +DEFAULT +8 sg1
+.* FUNC +GLOBAL +DEFAULT +7 fn1
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* TLS +GLOBAL +DEFAULT +8 sg2
+.* TLS +GLOBAL +DEFAULT +8 sg6
+.* TLS +GLOBAL +DEFAULT +8 sg7
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND
+.* SECTION +LOCAL +DEFAULT +1
+.* SECTION +LOCAL +DEFAULT +2
+.* SECTION +LOCAL +DEFAULT +3
+.* SECTION +LOCAL +DEFAULT +4
+.* SECTION +LOCAL +DEFAULT +5
+.* SECTION +LOCAL +DEFAULT +6
+.* SECTION +LOCAL +DEFAULT +7
+.* SECTION +LOCAL +DEFAULT +8
+.* SECTION +LOCAL +DEFAULT +9
+.* SECTION +LOCAL +DEFAULT +10
+.* SECTION +LOCAL +DEFAULT +11
+.* TLS +LOCAL +DEFAULT +8 sl1
+.* TLS +LOCAL +DEFAULT +8 sl2
+.* TLS +LOCAL +DEFAULT +8 sl3
+.* TLS +LOCAL +DEFAULT +8 sl4
+.* TLS +LOCAL +DEFAULT +8 sl5
+.* TLS +LOCAL +DEFAULT +8 sl6
+.* TLS +LOCAL +DEFAULT +8 sl7
+.* TLS +LOCAL +DEFAULT +8 sl8
+.* TLS +LOCAL +DEFAULT +9 sH1
+.* OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC
+.* TLS +LOCAL +DEFAULT +8 sh3
+.* TLS +LOCAL +DEFAULT +9 sH2
+.* TLS +LOCAL +DEFAULT +9 sH7
+.* TLS +LOCAL +DEFAULT +8 sh7
+.* TLS +LOCAL +DEFAULT +8 sh8
+.* TLS +LOCAL +DEFAULT +9 sH4
+.* TLS +LOCAL +DEFAULT +8 sh4
+.* TLS +LOCAL +DEFAULT +9 sH3
+.* TLS +LOCAL +DEFAULT +8 sh5
+.* TLS +LOCAL +DEFAULT +9 sH5
+.* TLS +LOCAL +DEFAULT +9 sH6
+.* TLS +LOCAL +DEFAULT +9 sH8
+.* TLS +LOCAL +DEFAULT +8 sh1
+.* OBJECT +LOCAL +DEFAULT +ABS _GLOBAL_OFFSET_TABLE_
+.* TLS +LOCAL +DEFAULT +8 sh2
+.* TLS +LOCAL +DEFAULT +8 sh6
+.* TLS +GLOBAL +DEFAULT +8 sg8
+.* TLS +GLOBAL +DEFAULT +8 sg3
+.* TLS +GLOBAL +DEFAULT +8 sg4
+.* TLS +GLOBAL +DEFAULT +8 sg5
+.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_offset
+.* TLS +GLOBAL +DEFAULT +8 sg1
+.* FUNC +GLOBAL +DEFAULT +7 fn1
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* TLS +GLOBAL +DEFAULT +8 sg2
+.* TLS +GLOBAL +DEFAULT +8 sg6
+.* TLS +GLOBAL +DEFAULT +8 sg7
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
diff --git a/binutils-2.21/ld/testsuite/ld-s390/tlspic.sd b/binutils-2.21/ld/testsuite/ld-s390/tlspic.sd
new file mode 100644
index 0000000..6e32dea
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-s390/tlspic.sd
@@ -0,0 +1,16 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as: -m31
+#ld: -shared -melf_s390
+#objdump: -sj.got
+#target: s390-*-*
+
+.*: +file format elf32-s390
+
+Contents of section .got:
+ [0-9a-f]+ [0-9a-f]+ 00000000 00000000 [0-9a-f]+ .*
+ [0-9a-f]+ 00000000 00000020 00000000 00000000 .*
+ [0-9a-f]+ 00000000 00000000 00000000 00000060 .*
+ [0-9a-f]+ 00000000 00000000 00000000 00000000 .*
+ [0-9a-f]+ 00000000 00000000 00000000 00000000 .*
+ [0-9a-f]+ 00000040 00000000 +.*
diff --git a/binutils-2.21/ld/testsuite/ld-s390/tlspic.td b/binutils-2.21/ld/testsuite/ld-s390/tlspic.td
new file mode 100644
index 0000000..265dbe2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-s390/tlspic.td
@@ -0,0 +1,16 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as: -m31
+#ld: -shared -melf_s390
+#objdump: -sj.tdata
+#target: s390-*-*
+
+.*: +file format elf32-s390
+
+Contents of section .tdata:
+ [0-9a-f]+ 00000011 00000012 00000013 00000014 .*
+ [0-9a-f]+ 00000015 00000016 00000017 00000018 .*
+ [0-9a-f]+ 00000041 00000042 00000043 00000044 .*
+ [0-9a-f]+ 00000045 00000046 00000047 00000048 .*
+ [0-9a-f]+ 00000101 00000102 00000103 00000104 .*
+ [0-9a-f]+ 00000105 00000106 00000107 00000108 .*
diff --git a/binutils-2.21/ld/testsuite/ld-s390/tlspic1.s b/binutils-2.21/ld/testsuite/ld-s390/tlspic1.s
new file mode 100644
index 0000000..28b9c3a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-s390/tlspic1.s
@@ -0,0 +1,208 @@
+ .section ".tdata", "awT", @progbits
+ .balign 32
+ .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
+ .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+ .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+sg1: .long 17
+sg2: .long 18
+sg3: .long 19
+sg4: .long 20
+sg5: .long 21
+sg6: .long 22
+sg7: .long 23
+sg8: .long 24
+sl1: .long 65
+sl2: .long 66
+sl3: .long 67
+sl4: .long 68
+sl5: .long 69
+sl6: .long 70
+sl7: .long 71
+sl8: .long 72
+sh1: .long 257
+sh2: .long 258
+sh3: .long 259
+sh4: .long 260
+sh5: .long 261
+sh6: .long 262
+sh7: .long 263
+sh8: .long 264
+ .text
+ .globl fn1
+ .type fn1,@function
+ .balign 64
+fn1:
+ /* Funtion prolog */
+ stm %r6,%r14,24(%r15)
+ bras %r13,.LTN1
+ /* Literal pool */
+.LT1:
+.LC0:
+ .long _GLOBAL_OFFSET_TABLE_-.LT1
+.LC1:
+ .long __tls_get_offset@plt-.LT1
+.LC2:
+ .long sg1@tlsgd
+.LC3:
+ .long sg2@tlsgd
+.LC4:
+ .long sl1@tlsgd
+.LC5:
+ .long sl2@tlsgd
+.LC6:
+ .long sh1@tlsgd
+.LC7:
+ .long sh2@tlsgd
+.LC8:
+ .long sH1@tlsgd
+.LC9:
+ .long sH2@tlsgd
+.LC10:
+ .long sl1@tlsldm
+.LC11:
+ .long sl1@dtpoff
+.LC12:
+ .long sl2@dtpoff
+.LC13:
+ .long sh1@tlsldm
+.LC14:
+ .long sh1@dtpoff
+.LC15:
+ .long sh2@dtpoff
+.LC16:
+ .long sH1@tlsldm
+.LC17:
+ .long sH1@dtpoff
+.LC18:
+ .long sH2@dtpoff
+.LC19:
+ .long sg2@gotntpoff
+.LC20:
+ .long sl2@gotntpoff
+.LC21:
+ .long sh2@gotntpoff
+.LC22:
+ .long sH2@gotntpoff
+.LTN1:
+ /* Funtion prolog */
+ lr %r14,%r15
+ l %r12,.LC0-.LT1(%r13)
+ ahi %r15,-96
+ la %r12,0(%r12,%r13)
+ st %r14,0(%r14)
+
+ /* Extract TCB and load branch offset */
+ ear %r9,%a0
+ l %r7,.LC1-.LT1(%r13)
+
+ /* GD */
+ l %r2,.LC2-.LT1(%r13)
+ bas %r14,0(%r7,%r13):tls_gdcall:sg1
+ la %r2,0(%r2,%r9)
+
+ /* GD -> IE because variable is referenced through IE too */
+ l %r2,.LC3-.LT1(%r13)
+ bas %r14,0(%r7,%r13):tls_gdcall:sg2
+ la %r2,0(%r2,%r9)
+
+ /* GD against local variable */
+ l %r2,.LC4-.LT1(%r13)
+ bas %r14,0(%r7,%r13):tls_gdcall:sl1
+ la %r2,0(%r2,%r9)
+
+ /* GD -> IE against local variable referenced through IE too */
+ l %r2,.LC5-.LT1(%r13)
+ bas %r14,0(%r7,%r13):tls_gdcall:sl2
+ la %r2,0(%r2,%r9)
+
+ /* GD against hidden and local variable */
+ l %r2,.LC6-.LT1(%r13)
+ bas %r14,0(%r7,%r13):tls_gdcall:sh1
+ la %r2,0(%r2,%r9)
+
+ /* GD -> IE against hidden and local variable referenced through
+ IE too */
+ l %r2,.LC7-.LT1(%r13)
+ bas %r14,0(%r7,%r13):tls_gdcall:sh2
+ la %r2,0(%r2,%r9)
+
+ /* GD against hidden but not local variable */
+ l %r2,.LC8-.LT1(%r13)
+ bas %r14,0(%r7,%r13):tls_gdcall:sH1
+ la %r2,0(%r2,%r9)
+
+ /* GD -> IE against hidden but not local variable referenced through
+ IE too */
+ l %r2,.LC9-.LT1(%r13)
+ bas %r14,0(%r7,%r13):tls_gdcall:sH2
+ la %r2,0(%r2,%r9)
+
+ /* LD */
+ l %r2,.LC10-.LT1(%r13)
+ bas %r14,0(%r7,%r13):tls_ldcall:sl1
+ la %r3,0(%r2,%r9)
+ l %r4,.LC11-.LT1(%r13)
+ la %r5,0(%r4,%r3)
+ l %r4,.LC12-.LT1(%r13)
+ la %r5,0(%r4,%r3)
+
+ /* LD against hidden and local variables */
+ l %r2,.LC13-.LT1(%r13)
+ bas %r14,0(%r7,%r13):tls_ldcall:sh1
+ la %r3,0(%r2,%r9)
+ l %r4,.LC14-.LT1(%r13)
+ la %r5,0(%r4,%r3)
+ l %r4,.LC13-.LT1(%r13)
+ la %r5,0(%r5,%r3)
+
+ /* LD against hidden but not local variables */
+ l %r2,.LC16-.LT1(%r13)
+ bas %r14,0(%r7,%r13):tls_ldcall:sH1
+ la %r3,0(%r2,%r9)
+ l %r3,.LC17-.LT1(%r13)
+ la %r5,0(%r4,%r3)
+ l %r4,.LC18-.LT1(%r13)
+ la %r5,0(%r4,%r3)
+
+ /* IE against global var */
+ l %r3,.LC19-.LT1(%r13)
+ l %r3,0(%r3,%r12):tls_load:sg2
+ la %r3,0(%r3,%r3)
+
+ /* IE against local var */
+ l %r3,.LC20-.LT1(%r13)
+ l %r4,0(%r3,%r12):tls_load:sl2
+ la %r5,0(%r4,%r3)
+
+ /* IE against hidden and local var */
+ l %r3,.LC21-.LT1(%r13)
+ l %r4,0(%r3,%r12):tls_load:sh2
+ la %r5,0(%r4,%r3)
+
+ /* IE against hidden but not local var */
+ l %r3,.LC22-.LT1(%r13)
+ l %r4,0(%r3,%r12):tls_load:sH2
+ la %r5,0(%r4,%r3)
+
+ /* IE against global var with small got access (no optimization) */
+ l %r3,sg5@gotntpoff(%r12)
+ la %r3,0(%r3,%r9)
+
+ /* IE against local var with small got access (no optimization) */
+ l %r3,sl5@gotntpoff(%r12)
+ la %r3,0(%r3,%r9)
+
+ /* IE against hidden and local var with small got access
+ (no optimization) */
+ l %r3,sh5@gotntpoff(%r12)
+ la %r3,0(%r3,%r9)
+
+ /* IE against hidden but not local var with small got access
+ (no optimization) */
+ l %r3,sH5@gotntpoff(%r12)
+ la %r3,0(%r3,%r9)
+
+ /* Function epilog */
+ lm %r6,%r14,120(%r15)
+ br %r14
+
diff --git a/binutils-2.21/ld/testsuite/ld-s390/tlspic1_64.s b/binutils-2.21/ld/testsuite/ld-s390/tlspic1_64.s
new file mode 100644
index 0000000..4e50008
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-s390/tlspic1_64.s
@@ -0,0 +1,224 @@
+ .section ".tdata", "awT", @progbits
+ .balign 32
+ .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
+ .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+ .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+sg1: .long 17
+sg2: .long 18
+sg3: .long 19
+sg4: .long 20
+sg5: .long 21
+sg6: .long 22
+sg7: .long 23
+sg8: .long 24
+sl1: .long 65
+sl2: .long 66
+sl3: .long 67
+sl4: .long 68
+sl5: .long 69
+sl6: .long 70
+sl7: .long 71
+sl8: .long 72
+sh1: .long 257
+sh2: .long 258
+sh3: .long 259
+sh4: .long 260
+sh5: .long 261
+sh6: .long 262
+sh7: .long 263
+sh8: .long 264
+ .text
+ .globl fn1
+ .type fn1,@function
+ .balign 64
+fn1:
+ /* Funtion prolog */
+ stmg %r6,%r14,48(%r15)
+ bras %r13,.LTN1
+ /* Literal pool */
+.LT1:
+.LC2:
+ .quad sg1@tlsgd
+.LC3:
+ .quad sg2@tlsgd
+.LC4:
+ .quad sl1@tlsgd
+.LC5:
+ .quad sl2@tlsgd
+.LC6:
+ .quad sh1@tlsgd
+.LC7:
+ .quad sh2@tlsgd
+.LC8:
+ .quad sH1@tlsgd
+.LC9:
+ .quad sH2@tlsgd
+.LC10:
+ .quad sl1@tlsldm
+.LC11:
+ .quad sl1@dtpoff
+.LC12:
+ .quad sl2@dtpoff
+.LC13:
+ .quad sh1@tlsldm
+.LC14:
+ .quad sh1@dtpoff
+.LC15:
+ .quad sh2@dtpoff
+.LC16:
+ .quad sH1@tlsldm
+.LC17:
+ .quad sH1@dtpoff
+.LC18:
+ .quad sH2@dtpoff
+.LC19:
+ .quad sg2@gotntpoff
+.LC20:
+ .quad sl2@gotntpoff
+.LC21:
+ .quad sh2@gotntpoff
+.LC22:
+ .quad sH2@gotntpoff
+.LTN1:
+ /* Funtion prolog */
+ lgr %r14,%r15
+ larl %r12,_GLOBAL_OFFSET_TABLE_
+ aghi %r15,-160
+ stg %r14,0(%r14)
+
+ /* Extract TCB */
+ ear %r9,%a0
+ sllg %r9,%r4,32
+ ear %r9,%a1
+
+ /* GD */
+ lg %r2,.LC2-.LT1(%r13)
+ brasl %r14,__tls_get_offset@plt:tls_gdcall:sg1
+ la %r2,0(%r2,%r9)
+
+ /* GD -> IE because variable is referenced through IE too */
+ lg %r2,.LC3-.LT1(%r13)
+ brasl %r14,__tls_get_offset@plt:tls_gdcall:sg2
+ la %r2,0(%r2,%r9)
+
+ /* GD against local variable */
+ lg %r2,.LC4-.LT1(%r13)
+ brasl %r14,__tls_get_offset@plt:tls_gdcall:sl1
+ la %r2,0(%r2,%r9)
+
+ /* GD -> IE against local variable referenced through IE too */
+ lg %r2,.LC5-.LT1(%r13)
+ brasl %r14,__tls_get_offset@plt:tls_gdcall:sl2
+ la %r2,0(%r2,%r9)
+
+ /* GD against hidden and local variable */
+ lg %r2,.LC6-.LT1(%r13)
+ brasl %r14,__tls_get_offset@plt:tls_gdcall:sh1
+ la %r2,0(%r2,%r9)
+
+ /* GD -> IE against hidden and local variable referenced through
+ IE too */
+ lg %r2,.LC7-.LT1(%r13)
+ brasl %r14,__tls_get_offset@plt:tls_gdcall:sh2
+ la %r2,0(%r2,%r9)
+
+ /* GD against hidden but not local variable */
+ lg %r2,.LC8-.LT1(%r13)
+ brasl %r14,__tls_get_offset@plt:tls_gdcall:sH1
+ la %r2,0(%r2,%r9)
+
+ /* GD -> IE against hidden but not local variable referenced through
+ IE too */
+ lg %r2,.LC9-.LT1(%r13)
+ brasl %r14,__tls_get_offset@plt:tls_gdcall:sH2
+ la %r2,0(%r2,%r9)
+
+ /* LD */
+ lg %r2,.LC10-.LT1(%r13)
+ brasl %r14,__tls_get_offset@plt:tls_ldcall:sl1
+ la %r3,0(%r2,%r9)
+ lg %r4,.LC11-.LT1(%r13)
+ la %r5,0(%r4,%r3)
+ lg %r4,.LC12-.LT1(%r13)
+ la %r5,0(%r4,%r3)
+
+ /* LD against hidden and local variables */
+ lg %r2,.LC13-.LT1(%r13)
+ brasl %r14,__tls_get_offset@plt:tls_ldcall:sh1
+ la %r3,0(%r2,%r9)
+ lg %r4,.LC14-.LT1(%r13)
+ la %r5,0(%r4,%r3)
+ lg %r4,.LC15-.LT1(%r13)
+ la %r5,0(%r4,%r3)
+
+ /* LD against hidden but not local variables */
+ lg %r2,.LC16-.LT1(%r13)
+ brasl %r14,__tls_get_offset@plt:tls_ldcall:sH1
+ la %r3,0(%r2,%r9)
+ lg %r4,.LC17-.LT1(%r13)
+ la %r5,0(%r4,%r3)
+ lg %r4,.LC18-.LT1(%r13)
+ la %r5,0(%r4,%r3)
+
+ /* IE against global var */
+ lg %r3,.LC19-.LT1(%r13)
+ lg %r3,0(%r3,%r12):tls_load:sg2
+ la %r3,0(%r3,%r9)
+
+ /* IE against local var */
+ lg %r3,.LC20-.LT1(%r13)
+ lg %r4,0(%r3,%r12):tls_load:sl2
+ la %r5,0(%r4,%r9)
+
+ /* IE against hidden and local var */
+ lg %r3,.LC21-.LT1(%r13)
+ lg %r4,0(%r3,%r12):tls_load:sh2
+ la %r5,0(%r4,%r9)
+
+ /* IE against hidden but not local var */
+ lg %r3,.LC22-.LT1(%r13)
+ lg %r4,0(%r3,%r12):tls_load:sH2
+ la %r5,0(%r4,%r9)
+
+ /* IE against global var with larl got access */
+ larl %r3,sg5@indntpoff
+ lg %r3,0(%r3,%r12):tls_load:sg2
+ la %r3,0(%r3,%r9)
+
+ /* IE against local var with larl got access */
+ larl %r3,sl5@indntpoff
+ lg %r4,0(%r3,%r12):tls_load:sl2
+ la %r5,0(%r4,%r9)
+
+ /* IE against hidden and local var with larl got access */
+ larl %r3,sh5@indntpoff
+ lg %r4,0(%r3,%r12):tls_load:sh2
+ la %r5,0(%r4,%r9)
+
+ /* IE against hidden but not local var with larl got access */
+ larl %r3,sH5@indntpoff
+ lg %r4,0(%r3,%r12):tls_load:sH2
+ la %r5,0(%r4,%r9)
+
+ /* IE against global var with small got access (no optimization) */
+ lg %r3,sg5@gotntpoff(%r12)
+ la %r3,0(%r3,%r9)
+
+ /* IE against local var with small got access (no optimization) */
+ lg %r3,sl5@gotntpoff(%r12)
+ la %r3,0(%r3,%r9)
+
+ /* IE against hidden and local var with small got access
+ (no optimization) */
+ lg %r3,sh5@gotntpoff(%r12)
+ la %r3,0(%r3,%r9)
+
+ /* IE against hidden but not local var with small got access
+ (no optimization) */
+ lg %r3,sH5@gotntpoff(%r12)
+ la %r3,0(%r3,%r9)
+
+ /* Function epilog */
+ lmg %r6,%r14,208(%r15)
+ br %r14
+
diff --git a/binutils-2.21/ld/testsuite/ld-s390/tlspic2.s b/binutils-2.21/ld/testsuite/ld-s390/tlspic2.s
new file mode 100644
index 0000000..5513f9b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-s390/tlspic2.s
@@ -0,0 +1,11 @@
+ .section ".tbss", "awT", @nobits
+ .globl sH1, sH2, sH3, sH4, sH5, sH6, sH7, sH8
+ .hidden sH1, sH2, sH3, sH4, sH5, sH6, sH7, sH8
+sH1: .space 4
+sH2: .space 4
+sH3: .space 4
+sH4: .space 4
+sH5: .space 4
+sH6: .space 4
+sH7: .space 4
+sH8: .space 4
diff --git a/binutils-2.21/ld/testsuite/ld-s390/tlspic2_64.s b/binutils-2.21/ld/testsuite/ld-s390/tlspic2_64.s
new file mode 100644
index 0000000..5513f9b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-s390/tlspic2_64.s
@@ -0,0 +1,11 @@
+ .section ".tbss", "awT", @nobits
+ .globl sH1, sH2, sH3, sH4, sH5, sH6, sH7, sH8
+ .hidden sH1, sH2, sH3, sH4, sH5, sH6, sH7, sH8
+sH1: .space 4
+sH2: .space 4
+sH3: .space 4
+sH4: .space 4
+sH5: .space 4
+sH6: .space 4
+sH7: .space 4
+sH8: .space 4
diff --git a/binutils-2.21/ld/testsuite/ld-s390/tlspic_64.dd b/binutils-2.21/ld/testsuite/ld-s390/tlspic_64.dd
new file mode 100644
index 0000000..274cd16
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-s390/tlspic_64.dd
@@ -0,0 +1,202 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as: -m64 -Aesame
+#ld: -shared -melf64_s390
+#objdump: -dzrj.text
+#target: s390x-*-*
+
+.*: +file format elf64-s390
+
+Disassembly of section .text:
+
+0+[0-9a-f]+ <fn1>:
+# function prolog
+ +[0-9a-f]+: eb 6e f0 30 00 24 stmg %r6,%r14,48\(%r15\)
+ +[0-9a-f]+: a7 d5 00 56 bras %r13,[0-9a-f]+ <fn1\+0xb2>
+# sg1@tlsgd
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+ +[0-9a-f]+: 00 00 00 70 .long 0x00000070
+# sg2@tlsgd
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+ +[0-9a-f]+: 00 00 00 90 .long 0x00000090
+# sl1@tlsgd
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+ +[0-9a-f]+: 00 00 00 20 .long 0x00000020
+# sl2@tlsgd
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+ +[0-9a-f]+: 00 00 00 30 .long 0x00000030
+# sh1@tlsgd
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+ +[0-9a-f]+: 00 00 00 98 .long 0x00000098
+# sh2@tlsgd
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+ +[0-9a-f]+: 00 00 00 a8 .long 0x000000a8
+# sH1@tlsgd
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+ +[0-9a-f]+: 00 00 00 50 .long 0x00000050
+# sH2@tlsgd
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+ +[0-9a-f]+: 00 00 00 60 .long 0x00000060
+# sl1@tlsldm
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+ +[0-9a-f]+: 00 00 00 40 .long 0x00000040
+# sl1@dtpoff
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+ +[0-9a-f]+: 00 00 00 20 .long 0x00000020
+# sl2@dtpoff
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+ +[0-9a-f]+: 00 00 00 24 .long 0x00000024
+# sh1@tlsldm
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+ +[0-9a-f]+: 00 00 00 40 .long 0x00000040
+# sh1@dtpoff
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+ +[0-9a-f]+: 00 00 00 40 .long 0x00000040
+# sh2@dtpoff
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+ +[0-9a-f]+: 00 00 00 44 .long 0x00000044
+# sH1@tlsldm
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+ +[0-9a-f]+: 00 00 00 40 .long 0x00000040
+# sH1@dtpoff
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+ +[0-9a-f]+: 00 00 00 60 .long 0x00000060
+# sH2@dtpoff
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+ +[0-9a-f]+: 00 00 00 64 .long 0x00000064
+# sg2@gotntpoff
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+ +[0-9a-f]+: 00 00 00 90 .long 0x00000090
+# sl2@gotntpoff
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+ +[0-9a-f]+: 00 00 00 30 .long 0x00000030
+# sh2@gotntpoff
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+ +[0-9a-f]+: 00 00 00 a8 .long 0x000000a8
+# sH2@gotntpoff
+ +[0-9a-f]+: 00 00 00 00 .long 0x00000000
+ +[0-9a-f]+: 00 00 00 60 .long 0x00000060
+# function prolog
+ +[0-9a-f]+: b9 04 00 ef lgr %r14,%r15
+ +[0-9a-f]+: c0 c0 [0-9a-f ]+ larl %r12,[0-9a-f]+ <_GLOBAL_OFFSET_TABLE_>
+ +[0-9a-f]+: a7 fb ff 60 aghi %r15,-160
+ +[0-9a-f]+: e3 e0 e0 00 00 24 stg %r14,0\(%r14\)
+# extract TCB
+ +[0-9a-f]+: b2 4f 00 90 ear %r9,%a0
+ +[0-9a-f]+: eb 94 00 20 00 0d sllg %r9,%r4,32
+ +[0-9a-f]+: b2 4f 00 91 ear %r9,%a1
+# GD
+ +[0-9a-f]+: e3 20 d0 00 00 04 lg %r2,0\(%r13\)
+ +[0-9a-f]+: c0 e5 [0-9a-f ]+ brasl %r14,[0-9a-f]+ <.*>
+ +[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
+# GD -> IE because variable is referenced through IE too
+ +[0-9a-f]+: e3 20 d0 08 00 04 lg %r2,8\(%r13\)
+ +[0-9a-f]+: e3 22 c0 00 00 04 lg %r2,0\(%r2,%r12\)
+ +[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
+# GD against local variable
+ +[0-9a-f]+: e3 20 d0 10 00 04 lg %r2,16\(%r13\)
+ +[0-9a-f]+: c0 e5 [0-9a-f ]+ brasl %r14,[0-9a-f]+ <.*>
+ +[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
+# GD -> IE against local variable referenced through IE too
+ +[0-9a-f]+: e3 20 d0 18 00 04 lg %r2,24\(%r13\)
+ +[0-9a-f]+: e3 22 c0 00 00 04 lg %r2,0\(%r2,%r12\)
+ +[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
+# GD against hidden and local variable
+ +[0-9a-f]+: e3 20 d0 20 00 04 lg %r2,32\(%r13\)
+ +[0-9a-f]+: c0 e5 [0-9a-f ]+ brasl %r14,[0-9a-f]+ <.*>
+ +[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
+# GD -> IE against hidden and local variable referenced through
+# IE too
+ +[0-9a-f]+: e3 20 d0 28 00 04 lg %r2,40\(%r13\)
+ +[0-9a-f]+: e3 22 c0 00 00 04 lg %r2,0\(%r2,%r12\)
+ +[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
+# GD against hidden but not local variable
+ +[0-9a-f]+: e3 20 d0 30 00 04 lg %r2,48\(%r13\)
+ +[0-9a-f]+: c0 e5 [0-9a-f ]+ brasl %r14,[0-9a-f]+ <.*>
+ +[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
+# GD -> IE against hidden but not local variable referenced through
+# IE too
+ +[0-9a-f]+: e3 20 d0 38 00 04 lg %r2,56\(%r13\)
+ +[0-9a-f]+: e3 22 c0 00 00 04 lg %r2,0\(%r2,%r12\)
+ +[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
+# LD
+ +[0-9a-f]+: e3 20 d0 40 00 04 lg %r2,64\(%r13\)
+ +[0-9a-f]+: c0 e5 [0-9a-f ]+ brasl %r14,[0-9a-f]+ <.*>
+ +[0-9a-f]+: 41 32 90 00 la %r3,0\(%r2,%r9\)
+ +[0-9a-f]+: e3 40 d0 48 00 04 lg %r4,72\(%r13\)
+ +[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
+ +[0-9a-f]+: e3 40 d0 50 00 04 lg %r4,80\(%r13\)
+ +[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
+# LD against hidden and local variables
+ +[0-9a-f]+: e3 20 d0 58 00 04 lg %r2,88\(%r13\)
+ +[0-9a-f]+: c0 e5 [0-9a-f ]+ brasl %r14,[0-9a-f]+ <.*>
+ +[0-9a-f]+: 41 32 90 00 la %r3,0\(%r2,%r9\)
+ +[0-9a-f]+: e3 40 d0 60 00 04 lg %r4,96\(%r13\)
+ +[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
+ +[0-9a-f]+: e3 40 d0 68 00 04 lg %r4,104\(%r13\)
+ +[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
+# LD against hidden but not local variables
+ +[0-9a-f]+: e3 20 d0 70 00 04 lg %r2,112\(%r13\)
+ +[0-9a-f]+: c0 e5 [0-9a-f ]+ brasl %r14,[0-9a-f]+ <.*>
+ +[0-9a-f]+: 41 32 90 00 la %r3,0\(%r2,%r9\)
+ +[0-9a-f]+: e3 40 d0 78 00 04 lg %r4,120\(%r13\)
+ +[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
+ +[0-9a-f]+: e3 40 d0 80 00 04 lg %r4,128\(%r13\)
+ +[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
+# IE against global var
+ +[0-9a-f]+: e3 30 d0 88 00 04 lg %r3,136\(%r13\)
+ +[0-9a-f]+: e3 33 c0 00 00 04 lg %r3,0\(%r3,%r12\)
+ +[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
+# IE against local var
+ +[0-9a-f]+: e3 30 d0 90 00 04 lg %r3,144\(%r13\)
+ +[0-9a-f]+: e3 43 c0 00 00 04 lg %r4,0\(%r3,%r12\)
+ +[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
+# IE against hidden and local var
+ +[0-9a-f]+: e3 30 d0 98 00 04 lg %r3,152\(%r13\)
+ +[0-9a-f]+: e3 43 c0 00 00 04 lg %r4,0\(%r3,%r12\)
+ +[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
+# IE against hidden but not local var
+ +[0-9a-f]+: e3 30 d0 a0 00 04 lg %r3,160\(%r13\)
+ +[0-9a-f]+: e3 43 c0 00 00 04 lg %r4,0\(%r3,%r12\)
+ +[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
+# IE against global var with larl got access
+ +[0-9a-f]+: c0 30 [0-9a-f ]+ larl %r3,[0-9a-f]+ <\_GLOBAL\_OFFSET\_TABLE\_\+0x68>
+ +[0-9a-f]+: e3 33 c0 00 00 04 lg %r3,0\(%r3,%r12\)
+ +[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
+# IE against local var with larl got access
+ +[0-9a-f]+: c0 30 [0-9a-f ]+ larl %r3,[0-9a-f]+ <\_GLOBAL\_OFFSET\_TABLE\_\+0x38>
+ +[0-9a-f]+: e3 43 c0 00 00 04 lg %r4,0\(%r3,%r12\)
+ +[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
+# IE against hidden and local var with larl got access
+ +[0-9a-f]+: c0 30 [0-9a-f ]+ larl %r3,[0-9a-f]+ <\_GLOBAL\_OFFSET\_TABLE\_\+0x80>
+ +[0-9a-f]+: e3 43 c0 00 00 04 lg %r4,0\(%r3,%r12\)
+ +[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
+# IE against hidden but not local var with larl got access
+ +[0-9a-f]+: c0 30 [0-9a-f ]+ larl %r3,[0-9a-f]+ <\_GLOBAL\_OFFSET\_TABLE\_\+0x88>
+ +[0-9a-f]+: e3 43 c0 00 00 04 lg %r4,0\(%r3,%r12\)
+ +[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
+# IE against global var with small got access (no optimization)
+ +[0-9a-f]+: e3 30 c0 68 00 04 lg %r3,104\(%r12\)
+ +[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
+# IE against local var with small got access (no optimization)
+ +[0-9a-f]+: e3 30 c0 38 00 04 lg %r3,56\(%r12\)
+ +[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
+# IE against hidden and local var with small got access
+# (no optimization)
+ +[0-9a-f]+: e3 30 c0 80 00 04 lg %r3,128\(%r12\)
+ +[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
+# IE against hidden but not local var with small got access
+# (no optimization)
+ +[0-9a-f]+: e3 30 c0 88 00 04 lg %r3,136\(%r12\)
+ +[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
+# function epilog
+ +[0-9a-f]+: eb 6e f0 d0 00 04 lmg %r6,%r14,208\(%r15\)
+ +[0-9a-f]+: 07 fe br %r14
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
+ +[0-9a-f]+: 07 07 nopr %r7
diff --git a/binutils-2.21/ld/testsuite/ld-s390/tlspic_64.rd b/binutils-2.21/ld/testsuite/ld-s390/tlspic_64.rd
new file mode 100644
index 0000000..da8c9bf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-s390/tlspic_64.rd
@@ -0,0 +1,142 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as: -m64 -Aesame
+#ld: -shared -melf64_s390
+#readelf: -WSsrl
+#target: s390x-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
+ +\[[ 0-9]+\] .hash .*
+ +\[[ 0-9]+\] .dynsym .*
+ +\[[ 0-9]+\] .dynstr .*
+ +\[[ 0-9]+\] .rela.dyn .*
+ +\[[ 0-9]+\] .rela.plt .*
+ +\[[ 0-9]+\] .plt .*
+ +\[[ 0-9]+\] .text +PROGBITS .*
+ +\[[ 0-9]+\] .tdata +PROGBITS .* 0+60 00 WAT +0 +0 +32
+ +\[[ 0-9]+\] .tbss +NOBITS .* 0+20 00 WAT +0 +0 +1
+ +\[[ 0-9]+\] .dynamic +DYNAMIC .*
+ +\[[ 0-9]+\] .got +PROGBITS .*
+ +\[[ 0-9]+\] .shstrtab .*
+ +\[[ 0-9]+\] .symtab .*
+ +\[[ 0-9]+\] .strtab .*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x[0-9a-f]+
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +LOAD .* R E 0x1000
+ +LOAD .* RW +0x1000
+ +DYNAMIC .* RW +0x8
+ +TLS .* 0x0+60 0x0+80 R +0x20
+
+ Section to Segment mapping:
+ +Segment Sections...
+ +00 +.hash .dynsym .dynstr .rela.dyn .rela.plt .plt .text *
+ +01 +.tdata .dynamic .got *
+ +02 +.dynamic *
+ +03 +.tdata .tbss *
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 14 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_390_TLS_DTPMOD +0+
+[0-9a-f ]+R_390_TLS_TPOFF +0+24
+[0-9a-f ]+R_390_TLS_TPOFF +0+30
+[0-9a-f ]+R_390_TLS_DTPMOD +0+
+[0-9a-f ]+R_390_TLS_DTPMOD +0+
+[0-9a-f ]+R_390_TLS_TPOFF +0+64
+[0-9a-f ]+R_390_TLS_TPOFF +0+50
+[0-9a-f ]+R_390_TLS_TPOFF +0+70
+[0-9a-f ]+R_390_TLS_DTPMOD +0+
+[0-9a-f ]+R_390_TLS_TPOFF +0+44
+[0-9a-f ]+R_390_TLS_TPOFF +0+10 sg5 \+ 0
+[0-9a-f ]+R_390_TLS_DTPMOD +0+ sg1 \+ 0
+[0-9a-f ]+R_390_TLS_DTPOFF +0+ sg1 \+ 0
+[0-9a-f ]+R_390_TLS_TPOFF +0+4 sg2 \+ 0
+
+Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_390_JMP_SLOT +0+ __tls_get_offset \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND
+.* SECTION +LOCAL +DEFAULT +7
+.* SECTION +LOCAL +DEFAULT +8
+.* TLS +GLOBAL +DEFAULT +8 sg8
+.* TLS +GLOBAL +DEFAULT +8 sg3
+.* TLS +GLOBAL +DEFAULT +8 sg4
+.* TLS +GLOBAL +DEFAULT +8 sg5
+.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_offset
+.* TLS +GLOBAL +DEFAULT +8 sg1
+.* FUNC +GLOBAL +DEFAULT +7 fn1
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* TLS +GLOBAL +DEFAULT +8 sg2
+.* TLS +GLOBAL +DEFAULT +8 sg6
+.* TLS +GLOBAL +DEFAULT +8 sg7
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND
+.* SECTION +LOCAL +DEFAULT +1
+.* SECTION +LOCAL +DEFAULT +2
+.* SECTION +LOCAL +DEFAULT +3
+.* SECTION +LOCAL +DEFAULT +4
+.* SECTION +LOCAL +DEFAULT +5
+.* SECTION +LOCAL +DEFAULT +6
+.* SECTION +LOCAL +DEFAULT +7
+.* SECTION +LOCAL +DEFAULT +8
+.* SECTION +LOCAL +DEFAULT +9
+.* SECTION +LOCAL +DEFAULT +10
+.* SECTION +LOCAL +DEFAULT +11
+.* TLS +LOCAL +DEFAULT +8 sl1
+.* TLS +LOCAL +DEFAULT +8 sl2
+.* TLS +LOCAL +DEFAULT +8 sl3
+.* TLS +LOCAL +DEFAULT +8 sl4
+.* TLS +LOCAL +DEFAULT +8 sl5
+.* TLS +LOCAL +DEFAULT +8 sl6
+.* TLS +LOCAL +DEFAULT +8 sl7
+.* TLS +LOCAL +DEFAULT +8 sl8
+.* TLS +LOCAL +DEFAULT +9 sH1
+.* OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC
+.* TLS +LOCAL +DEFAULT +8 sh3
+.* TLS +LOCAL +DEFAULT +9 sH2
+.* TLS +LOCAL +DEFAULT +9 sH7
+.* TLS +LOCAL +DEFAULT +8 sh7
+.* TLS +LOCAL +DEFAULT +8 sh8
+.* TLS +LOCAL +DEFAULT +9 sH4
+.* TLS +LOCAL +DEFAULT +8 sh4
+.* TLS +LOCAL +DEFAULT +9 sH3
+.* TLS +LOCAL +DEFAULT +8 sh5
+.* TLS +LOCAL +DEFAULT +9 sH5
+.* TLS +LOCAL +DEFAULT +9 sH6
+.* TLS +LOCAL +DEFAULT +9 sH8
+.* TLS +LOCAL +DEFAULT +8 sh1
+.* OBJECT +LOCAL +DEFAULT +ABS _GLOBAL_OFFSET_TABLE_
+.* TLS +LOCAL +DEFAULT +8 sh2
+.* TLS +LOCAL +DEFAULT +8 sh6
+.* TLS +GLOBAL +DEFAULT +8 sg8
+.* TLS +GLOBAL +DEFAULT +8 sg3
+.* TLS +GLOBAL +DEFAULT +8 sg4
+.* TLS +GLOBAL +DEFAULT +8 sg5
+.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_offset
+.* TLS +GLOBAL +DEFAULT +8 sg1
+.* FUNC +GLOBAL +DEFAULT +7 fn1
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* TLS +GLOBAL +DEFAULT +8 sg2
+.* TLS +GLOBAL +DEFAULT +8 sg6
+.* TLS +GLOBAL +DEFAULT +8 sg7
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
diff --git a/binutils-2.21/ld/testsuite/ld-s390/tlspic_64.sd b/binutils-2.21/ld/testsuite/ld-s390/tlspic_64.sd
new file mode 100644
index 0000000..267416e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-s390/tlspic_64.sd
@@ -0,0 +1,21 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as: -m64 -Aesame
+#ld: -shared -melf64_s390
+#objdump: -sj.got
+#target: s390x-*-*
+
+.*: +file format elf64-s390
+
+Contents of section .got:
+ [0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00000000 00000000 .*
+ [0-9a-f]+ 00000000 00000000 [0-9a-f]+ [0-9a-f]+ .*
+ [0-9a-f]+ 00000000 00000000 00000000 00000020 .*
+ [0-9a-f]+ 00000000 00000000 00000000 00000000 .*
+ [0-9a-f]+ 00000000 00000000 00000000 00000000 .*
+ [0-9a-f]+ 00000000 00000000 00000000 00000060 .*
+ [0-9a-f]+ 00000000 00000000 00000000 00000000 .*
+ [0-9a-f]+ 00000000 00000000 00000000 00000000 .*
+ [0-9a-f]+ 00000000 00000000 00000000 00000000 .*
+ [0-9a-f]+ 00000000 00000000 00000000 00000000 .*
+ [0-9a-f]+ 00000000 00000040 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-s390/tlspic_64.td b/binutils-2.21/ld/testsuite/ld-s390/tlspic_64.td
new file mode 100644
index 0000000..36623bb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-s390/tlspic_64.td
@@ -0,0 +1,16 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as: -m64 -Aesame
+#ld: -shared -melf64_s390
+#objdump: -sj.tdata
+#target: s390x-*-*
+
+.*: +file format elf64-s390
+
+Contents of section .tdata:
+ [0-9a-f]+ 00000011 00000012 00000013 00000014 .*
+ [0-9a-f]+ 00000015 00000016 00000017 00000018 .*
+ [0-9a-f]+ 00000041 00000042 00000043 00000044 .*
+ [0-9a-f]+ 00000045 00000046 00000047 00000048 .*
+ [0-9a-f]+ 00000101 00000102 00000103 00000104 .*
+ [0-9a-f]+ 00000105 00000106 00000107 00000108 .*
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/align.exp b/binutils-2.21/ld/testsuite/ld-scripts/align.exp
new file mode 100644
index 0000000..9ea46d0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/align.exp
@@ -0,0 +1,53 @@
+# Test ALIGN in a linker script.
+# By Nathan Sidwell, CodeSourcery LLC
+# Copyright 2004, 2005, 2006, 2007
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+if [istarget "rs6000-*-aix*"] {
+ # Target maps .text and .data to other sections.
+ return
+}
+
+set testname "align1"
+
+if ![ld_assemble $as $srcdir/$subdir/align.s tmpdir/align.o] {
+ unresolved $testname
+ return
+}
+
+# mingw on x86_64 targets need to set the image base to 0 to avoid auto image-basing.
+global LDFLAGS
+set saved_LDFLAGS "$LDFLAGS"
+if [istarget "x86_64-*-mingw*"] then {
+ set LDFLAGS "$LDFLAGS --image-base 0"
+}
+
+if ![ld_simple_link $ld tmpdir/align "$LDFLAGS -T $srcdir/$subdir/align.t tmpdir/align.o"] {
+ fail $testname
+} else {
+ pass $testname
+}
+
+if ![is_aout_format] {
+ run_dump_test align2a
+ run_dump_test align2b
+}
+run_dump_test align2c
+set LDFLAGS "$saved_LDFLAGS"
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/align.s b/binutils-2.21/ld/testsuite/ld-scripts/align.s
new file mode 100644
index 0000000..c9bad23
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/align.s
@@ -0,0 +1,2 @@
+ .text
+ .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/align.t b/binutils-2.21/ld/testsuite/ld-scripts/align.t
new file mode 100644
index 0000000..49d6053
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/align.t
@@ -0,0 +1,8 @@
+SECTIONS
+{
+ .text : {*(.text)}
+ .data ALIGN(0x40) : AT (ALIGN (LOADADDR (.text) + SIZEOF (.text), 0x80))
+ {}
+ ASSERT (LOADADDR(.data) == 0x80, "dyadic ALIGN broken")
+ ASSERT (ADDR(.data) == 0x40, "monadic ALIGN broken")
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/align2.t b/binutils-2.21/ld/testsuite/ld-scripts/align2.t
new file mode 100644
index 0000000..d86f62a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/align2.t
@@ -0,0 +1,7 @@
+SECTIONS
+{
+ .text : {*(.text)}
+ . = ALIGN(data_align);
+ .data : {*(.data)}
+ /DISCARD/ : {*(*)}
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/align2a.d b/binutils-2.21/ld/testsuite/ld-scripts/align2a.d
new file mode 100644
index 0000000..96237dd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/align2a.d
@@ -0,0 +1,12 @@
+# ld: --defsym data_align=16 -T align2.t
+# objdump: --section-headers
+
+[^:]+: +file format.*
+
+Sections:
+Idx +Name +Size +VMA +LMA +File +off +Algn
+[ ]+0 +\.text +[^ ]* +0+ +0+ .*
+[ ]+CONTENTS, +ALLOC, +LOAD,.* CODE
+[ ]+1 +\.data +[^ ]* +0+10 +0+10 .*
+[ ]+CONTENTS, +ALLOC, +LOAD, +DATA
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/align2a.s b/binutils-2.21/ld/testsuite/ld-scripts/align2a.s
new file mode 100644
index 0000000..4e56d4a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/align2a.s
@@ -0,0 +1,4 @@
+ .text
+ .long 0
+ .data
+ .long 0x12345678
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/align2b.d b/binutils-2.21/ld/testsuite/ld-scripts/align2b.d
new file mode 100644
index 0000000..05d2a15
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/align2b.d
@@ -0,0 +1,12 @@
+# ld: --defsym data_align=32 -T align2.t
+# objdump: --section-headers
+
+[^:]+: +file +format.*
+
+Sections:
+Idx +Name +Size +VMA +LMA +File off +Algn
+ +0 +\.text +[^ ]* +0+ +0+ .*
+ +CONTENTS, +ALLOC, +LOAD,.* CODE
+ +1 +\.data +[^ ]* +0+20 +0+20 .*
+ +CONTENTS, +ALLOC, +LOAD, +DATA
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/align2b.s b/binutils-2.21/ld/testsuite/ld-scripts/align2b.s
new file mode 100644
index 0000000..4e56d4a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/align2b.s
@@ -0,0 +1,4 @@
+ .text
+ .long 0
+ .data
+ .long 0x12345678
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/align2c.d b/binutils-2.21/ld/testsuite/ld-scripts/align2c.d
new file mode 100644
index 0000000..16a4245
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/align2c.d
@@ -0,0 +1,2 @@
+# ld: -T align2.t
+# error: undefined symbol.*in expression
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/align2c.s b/binutils-2.21/ld/testsuite/ld-scripts/align2c.s
new file mode 100644
index 0000000..4e56d4a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/align2c.s
@@ -0,0 +1,4 @@
+ .text
+ .long 0
+ .data
+ .long 0x12345678
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/alignof.exp b/binutils-2.21/ld/testsuite/ld-scripts/alignof.exp
new file mode 100644
index 0000000..0f05aeb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/alignof.exp
@@ -0,0 +1,67 @@
+# Test ALIGNOF in a linker script.
+# Copyright 2007 Free Software Foundation, Inc.
+# Contributed by Nathan Sidwell <nathan@codesourcery.com>
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+# Only ELF and PE-COFF targets record section alignment.
+
+if {![is_elf_format] && ![is_pecoff_format]} {
+ return
+}
+
+set testname "ALIGNOF"
+
+if ![ld_assemble $as $srcdir/$subdir/alignof.s tmpdir/alignof.o] {
+ unresolved $testname
+ return
+}
+
+if ![ld_simple_link $ld tmpdir/alignof "-T $srcdir/$subdir/alignof.t tmpdir/alignof.o"] {
+ fail $testname
+ return
+}
+
+if ![ld_nm $nm "" tmpdir/alignof] {
+ unresolved $testname
+ return
+}
+
+if {![info exists nm_output(alignof_text)] \
+ || ![info exists nm_output(alignof_data)]} {
+ send_log "bad output from nm\n"
+ verbose "bad output from nm"
+ fail $testname
+ return
+}
+
+if {$nm_output(alignof_text) != 64} {
+ send_log "alignof_text != 64\n"
+ verbose "alignof_text != 64"
+ fail $testname
+ return
+}
+
+if {$nm_output(alignof_data) != 16} {
+ send_log "alignof_data != 16\n"
+ verbose "alignof_data != 16"
+ fail $testname
+ return
+}
+
+pass $testname
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/alignof.s b/binutils-2.21/ld/testsuite/ld-scripts/alignof.s
new file mode 100644
index 0000000..d440d2e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/alignof.s
@@ -0,0 +1,9 @@
+
+ .text
+ .p2align 6
+ .long 0
+
+ .data
+ .p2align 4
+ .long 0
+
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/alignof.t b/binutils-2.21/ld/testsuite/ld-scripts/alignof.t
new file mode 100644
index 0000000..1241112
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/alignof.t
@@ -0,0 +1,15 @@
+SECTIONS {
+ .text :
+ {
+ tmpdir/alignof.o (.text)
+ }
+ .data :
+ {
+ tmpdir/alignof.o (.data)
+ LONG (ALIGNOF(.text))
+ LONG (ALIGNOF(.data))
+ }
+}
+
+alignof_text = ALIGNOF(.text);
+alignof_data = ALIGNOF(.data);
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/assert.exp b/binutils-2.21/ld/testsuite/ld-scripts/assert.exp
new file mode 100644
index 0000000..1de9001
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/assert.exp
@@ -0,0 +1,34 @@
+# Test ASSERT in a linker script.
+# By Nathan Sidwell, CodeSourcery LLC
+# Copyright 2004, 2005, 2007
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+set testname "ASSERT"
+
+if ![ld_assemble $as $srcdir/$subdir/assert.s tmpdir/assert.o] {
+ unresolved $testname
+ return
+}
+
+if ![ld_simple_link $ld tmpdir/assert "-T $srcdir/$subdir/assert.t tmpdir/assert.o"] {
+ fail $testname
+} else {
+ pass $testname
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/assert.s b/binutils-2.21/ld/testsuite/ld-scripts/assert.s
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/assert.s
@@ -0,0 +1 @@
+
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/assert.t b/binutils-2.21/ld/testsuite/ld-scripts/assert.t
new file mode 100644
index 0000000..9b4c641
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/assert.t
@@ -0,0 +1,10 @@
+SECTIONS
+{
+ .empty : {
+ here = . == ADDR(.empty);
+ ASSERT (. == ADDR(.empty), "dot is not ADDR");
+ ASSERT (here, "here is zero");
+ }
+ ASSERT (!SIZEOF(.empty), "Empty is not empty")
+ /DISCARD/ : { *(.reginfo) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/cross1.c b/binutils-2.21/ld/testsuite/ld-scripts/cross1.c
new file mode 100644
index 0000000..5678945
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/cross1.c
@@ -0,0 +1,6 @@
+extern int foo ();
+int
+func ()
+{
+ return foo ();
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/cross1.t b/binutils-2.21/ld/testsuite/ld-scripts/cross1.t
new file mode 100644
index 0000000..c20e473
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/cross1.t
@@ -0,0 +1,10 @@
+NOCROSSREFS ( .text .data )
+SECTIONS
+{
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ .hash : { *(.hash) }
+ .toc : { *(.toc) }
+ .text : { tmpdir/cross1.o }
+ .data : { tmpdir/cross2.o }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/cross2.c b/binutils-2.21/ld/testsuite/ld-scripts/cross2.c
new file mode 100644
index 0000000..4143177
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/cross2.c
@@ -0,0 +1,5 @@
+int
+foo ()
+{
+ return 1;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/cross2.t b/binutils-2.21/ld/testsuite/ld-scripts/cross2.t
new file mode 100644
index 0000000..a0cdcbb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/cross2.t
@@ -0,0 +1,6 @@
+NOCROSSREFS ( .text .data )
+SECTIONS
+{
+ .text : { *(.text) *(.text.*) *(.pr) }
+ .data : { *(.data) *(.data.*) *(.sdata) *(.rw) *(.tc0) *(.tc) *(.toc) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/cross3.c b/binutils-2.21/ld/testsuite/ld-scripts/cross3.c
new file mode 100644
index 0000000..1848c32
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/cross3.c
@@ -0,0 +1,7 @@
+int i = 4;
+
+int
+foo ()
+{
+ return i;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/cross3.t b/binutils-2.21/ld/testsuite/ld-scripts/cross3.t
new file mode 100644
index 0000000..5e32bb2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/cross3.t
@@ -0,0 +1,10 @@
+NOCROSSREFS(.nocrossrefs .text)
+
+SECTIONS
+{
+ .text : { *(.text) }
+ .nocrossrefs : { *(.nocrossrefs) }
+ .data : { *(.data) *(.opd) }
+ .bss : { *(.bss) *(COMMON) }
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/cross4.c b/binutils-2.21/ld/testsuite/ld-scripts/cross4.c
new file mode 100644
index 0000000..aef8dfd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/cross4.c
@@ -0,0 +1,7 @@
+__attribute__ ((section (".nocrossrefs")))
+static void
+foo ()
+{
+}
+
+void (*dummy) () = foo;
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/crossref.exp b/binutils-2.21/ld/testsuite/ld-scripts/crossref.exp
new file mode 100644
index 0000000..98178de
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/crossref.exp
@@ -0,0 +1,134 @@
+# Test NOCROSSREFS in a linker script.
+# By Ian Lance Taylor, Cygnus Support.
+# Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2007
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+set test1 "NOCROSSREFS 1"
+set test2 "NOCROSSREFS 2"
+set test3 "NOCROSSREFS 3"
+
+if { ![is_remote host] && [which $CC] == 0 } {
+ untested $test1
+ untested $test2
+ untested $test3
+ return
+}
+
+# Xtensa targets currently default to putting literal values in a separate
+# section and that requires linker script support, so put literals in text.
+global CFLAGS
+if [istarget xtensa*-*-*] {
+ set CFLAGS "$CFLAGS -mtext-section-literals"
+}
+
+# If we have a compiler that doesn't use/reference dot-symbols, then
+# calls to functions reference the .opd section function descriptor.
+# This makes NOCROSSREFS rather useless on powerpc64.
+if [istarget powerpc64*-*-*] {
+ set CFLAGS "$CFLAGS -mcall-aixdesc"
+}
+
+# Prevent the use of the MeP's small data area which references a symbol
+# called __sdabase which will not be defined by our test linker scripts.
+if [istarget mep*-*-elf] {
+ set CFLAGS "-mtiny=0"
+}
+
+if { ![ld_compile $CC "$srcdir/$subdir/cross1.c" tmpdir/cross1.o] \
+ || ![ld_compile $CC "$srcdir/$subdir/cross2.c" tmpdir/cross2.o] } {
+ unresolved $test1
+ unresolved $test2
+ return
+}
+
+set flags [big_or_little_endian]
+
+if [istarget sh64*-*-elf] {
+ # This is what gcc passes to ld by default.
+ set flags "-mshelf32"
+}
+
+# IA64 has both ordered and unordered sections in an input file.
+setup_xfail ia64-*-*
+
+set exec_output [run_host_cmd "$ld" "$flags -o tmpdir/cross1 -T $srcdir/$subdir/cross1.t tmpdir/cross1.o tmpdir/cross2.o"]
+
+set exec_output [prune_warnings $exec_output]
+
+regsub -all "(^|\n)($ld: warning: cannot find entry symbol\[^\n\]*\n?)" $exec_output "\\1" exec_output
+
+if [string match "" $exec_output] then {
+ fail $test1
+} else {
+ verbose -log "$exec_output"
+ if [regexp "prohibited cross reference from .* to `.*foo' in" $exec_output] {
+ pass $test1
+ } else {
+ fail $test1
+ }
+}
+
+# Check cross references within a single object.
+
+if { ![ld_compile $CC "$srcdir/$subdir/cross3.c" tmpdir/cross3.o] } {
+ unresolved $test2
+ return
+}
+
+set exec_output [run_host_cmd "$ld" "$flags -o tmpdir/cross2 -T $srcdir/$subdir/cross2.t tmpdir/cross3.o"]
+set exec_output [prune_warnings $exec_output]
+
+regsub -all "(^|\n)($ld: warning: cannot find entry symbol\[^\n\]*\n?)" $exec_output "\\1" exec_output
+
+if [string match "" $exec_output] then {
+ fail $test2
+} else {
+ verbose -log "$exec_output"
+ if [regexp "prohibited cross reference from .* to `.*' in" $exec_output] {
+ pass $test2
+ } else {
+ fail $test2
+ }
+}
+
+# Check cross references for ld -r
+
+if { ![ld_compile $CC "$srcdir/$subdir/cross4.c" tmpdir/cross4.o] } {
+ unresolved $test3
+ return
+}
+
+if ![ld_relocate $ld tmpdir/cross3-partial.o "tmpdir/cross1.o tmpdir/cross4.o"] {
+ unresolved $test3
+ return
+}
+
+set exec_output [run_host_cmd "$ld" "$flags -o tmpdir/cross3 -T $srcdir/$subdir/cross3.t tmpdir/cross3-partial.o tmpdir/cross2.o"]
+
+set exec_output [prune_warnings $exec_output]
+
+regsub -all "(^|\n)($ld: warning: cannot find entry symbol\[^\n\]*\n?)" $exec_output "\\1" exec_output
+
+if [string match "" $exec_output] then {
+ pass $test3
+} else {
+ verbose -log "$exec_output"
+ fail $test3
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/data.d b/binutils-2.21/ld/testsuite/ld-scripts/data.d
new file mode 100644
index 0000000..10b3d08
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/data.d
@@ -0,0 +1,9 @@
+#source: data.s
+#ld: -T data.t
+#objdump: -s -j .text
+
+.*: file format .*
+
+Contents of section .text:
+ [0-9a-f]* (04)?000000(04)? (0020)?0000(2000)? .*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/data.exp b/binutils-2.21/ld/testsuite/ld-scripts/data.exp
new file mode 100644
index 0000000..feb22aa
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/data.exp
@@ -0,0 +1,30 @@
+# Test DATA STATEMENT in a linker script.
+# By Nathan Sidwell, CodeSourcery LLC
+# Copyright 2004, 2005, 2007
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+# An a.out "objdump -s -j .text" has the file header visible inside the
+# text segment, confusing run_dump_test.
+if {[is_aout_format]} {
+ unsupported data
+ return
+}
+
+run_dump_test data
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/data.s b/binutils-2.21/ld/testsuite/ld-scripts/data.s
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/data.s
@@ -0,0 +1 @@
+
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/data.t b/binutils-2.21/ld/testsuite/ld-scripts/data.t
new file mode 100644
index 0000000..f56d10f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/data.t
@@ -0,0 +1,11 @@
+SECTIONS
+{
+ . = 0x1000 + SIZEOF_HEADERS;
+ .text ALIGN (0x20) :
+ {
+ LONG (label - .)
+ label = .;
+ LONG (ADDR (.other))
+ }
+ .other 0x2000 : {}
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/default-script.exp b/binutils-2.21/ld/testsuite/ld-scripts/default-script.exp
new file mode 100644
index 0000000..2e6fce0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/default-script.exp
@@ -0,0 +1,34 @@
+# Test --default-script/-dT
+# Copyright 2007, 2009
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+set old_ldflags $LDFLAGS
+if { [istarget spu*-*-*] } {
+ set LDFLAGS "$LDFLAGS --local-store 0:0"
+}
+
+set test_list [lsort [glob -nocomplain $srcdir/$subdir/default-script*.d]]
+foreach t $test_list {
+ # We need to strip the ".d", but can leave the dirname.
+ verbose [file rootname $t]
+ run_dump_test [file rootname $t]
+}
+
+set LDFLAGS $old_ldflags
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/default-script.s b/binutils-2.21/ld/testsuite/ld-scripts/default-script.s
new file mode 100644
index 0000000..78c474e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/default-script.s
@@ -0,0 +1,4 @@
+ .text
+ .global text
+text:
+ .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/default-script.t b/binutils-2.21/ld/testsuite/ld-scripts/default-script.t
new file mode 100644
index 0000000..fc70187
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/default-script.t
@@ -0,0 +1,7 @@
+_START = DEFINED(_START) ? _START : 0x9000000;
+SECTIONS
+{
+ . = _START;
+ .text : {*(.text)}
+ /DISCARD/ : {*(*)}
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/default-script1.d b/binutils-2.21/ld/testsuite/ld-scripts/default-script1.d
new file mode 100644
index 0000000..61973f7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/default-script1.d
@@ -0,0 +1,9 @@
+# source: default-script.s
+# ld: -defsym _START=0x8000000 -T default-script.t
+# nm: -n
+
+#...
+0*8000000 . _START
+#...
+0*8000000 T text
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/default-script2.d b/binutils-2.21/ld/testsuite/ld-scripts/default-script2.d
new file mode 100644
index 0000000..829718d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/default-script2.d
@@ -0,0 +1,9 @@
+# source: default-script.s
+# ld: -T default-script.t -defsym _START=0x8000000
+# nm: -n
+
+#...
+0*8000000 . _START
+#...
+0*8000000 T text
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/default-script3.d b/binutils-2.21/ld/testsuite/ld-scripts/default-script3.d
new file mode 100644
index 0000000..b2da496
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/default-script3.d
@@ -0,0 +1,9 @@
+# source: default-script.s
+# ld: -defsym _START=0x8000000 -dT default-script.t
+# nm: -n
+
+#...
+0*8000000 . _START
+#...
+0*8000000 T text
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/default-script4.d b/binutils-2.21/ld/testsuite/ld-scripts/default-script4.d
new file mode 100644
index 0000000..0010084
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/default-script4.d
@@ -0,0 +1,9 @@
+# source: default-script.s
+# ld: --default-script default-script.t -defsym _START=0x8000000
+# nm: -n
+
+#...
+0*8000000 . _START
+#...
+0*8000000 T text
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/defined.exp b/binutils-2.21/ld/testsuite/ld-scripts/defined.exp
new file mode 100644
index 0000000..15cc079
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/defined.exp
@@ -0,0 +1,69 @@
+# Test DEFINED in a linker script.
+# By Ian Lance Taylor, Cygnus Support.
+# Copyright 2001, 2003. 2005, 2006, 2007
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+set testname "DEFINED"
+set prms_id 5699
+
+if ![ld_assemble $as $srcdir/$subdir/defined.s tmpdir/def.o] {
+ unresolved $testname
+ return
+}
+
+global LDFLAGS
+set saved_LDFLAGS "$LDFLAGS"
+if [istarget "x86_64-*-mingw*"] then {
+ set LDFLAGS "$LDFLAGS --image-base 0"
+}
+
+if ![ld_simple_link $ld tmpdir/def "$LDFLAGS -T $srcdir/$subdir/defined.t tmpdir/def.o"] {
+ fail $testname
+} else {
+ if ![ld_nm $nm "" tmpdir/def] {
+ unresolved $testname
+ } else {
+ if {![info exists nm_output(value1)] \
+ || ![info exists nm_output(value2)]} {
+ send_log "bad output from nm\n"
+ verbose "bad output from nm"
+ fail $testname
+ } else {
+ if {$nm_output(value1) != 1} {
+ send_log "value1 == $nm_output(value1)\n"
+ verbose "value1 == $nm_output(value1)"
+ fail $testname
+ } else {
+ if {$nm_output(value2) != 2} {
+ send_log "value2 == $nm_output(value2)\n"
+ verbose "value2 == $nm_output(value2)"
+ fail $testname
+ } else {
+ pass $testname
+ }
+ }
+ }
+ }
+}
+
+set prms_id 0
+run_dump_test "defined2"
+run_dump_test "defined3"
+set LDFLAGS "$saved_LDFLAGS"
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/defined.s b/binutils-2.21/ld/testsuite/ld-scripts/defined.s
new file mode 100644
index 0000000..243c397
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/defined.s
@@ -0,0 +1,2 @@
+ .globl defined
+ defined == 1
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/defined.t b/binutils-2.21/ld/testsuite/ld-scripts/defined.t
new file mode 100644
index 0000000..c1ef1b6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/defined.t
@@ -0,0 +1,7 @@
+SECTIONS {
+ .text : { *(.text) }
+ .data : { *(.data) }
+ .bss : { *(.bss) *(COMMON) }
+}
+value1 = DEFINED (defined) ? 1 : 2;
+value2 = DEFINED (undefined) ? 1 : 2;
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/defined2.d b/binutils-2.21/ld/testsuite/ld-scripts/defined2.d
new file mode 100644
index 0000000..40728bd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/defined2.d
@@ -0,0 +1,22 @@
+#ld: -Tdefined2.t
+#nm: -B
+#source: phdrs.s
+#xfail: "rs6000-*-aix*"
+
+# Check that arithmetic on DEFINED works.
+# Matching both A and T accounts for formats that can't tell a .text
+# symbol from an absolute symbol (mmo), but matches whatever section that
+# contains an address matching the value. The symbol sym1 is supposed to
+# be in the .text section for all targets, though.
+
+#...
+0+1 [AT] defined1
+#...
+0+11 A defined2
+#...
+0+100 A defined3
+#...
+0+1ff A defined4
+#...
+0+3 T sym1
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/defined2.t b/binutils-2.21/ld/testsuite/ld-scripts/defined2.t
new file mode 100644
index 0000000..50ddad0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/defined2.t
@@ -0,0 +1,9 @@
+SECTIONS {
+ .text : { *(.text) sym1 = 3 - DEFINED (x); }
+ .data : { *(.data) }
+ .bss : { *(.bss) *(COMMON) }
+}
+defined1 = !DEFINED (x);
+defined2 = DEFINED (defined1) + 16;
+defined3 = DEFINED (defined2) * 256;
+defined4 = 0x200 - DEFINED (defined3);
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/defined3.d b/binutils-2.21/ld/testsuite/ld-scripts/defined3.d
new file mode 100644
index 0000000..61061b6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/defined3.d
@@ -0,0 +1,35 @@
+#ld: -Tdefined3.t
+#nm: -B
+#source: phdrs.s
+#source: defined.s
+#xfail: "rs6000-*-aix*"
+
+# Check that DEFINED matches only symbols defined before its location.
+# The ellipsis account for target-specific symbols. Matching both A and T
+# accounts for formats that can't tell a .text symbol from an absolute
+# symbol (mmo), but matches whatever section that contains an address
+# matching the value.
+
+#...
+0+1 [AT] defined
+#...
+0+200 A defined1
+#...
+0+201 A defined2
+#...
+0+100 A defined3
+#...
+0+ [AT] defined4
+#...
+0+2a A defined5
+#...
+0+ [AT] defined6
+#...
+0+1 [AT] defined7
+#...
+0+1 [AT] defined8
+#...
+0+2a A sym1
+#...
+[0-9a-f]+ T sym2
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/defined3.t b/binutils-2.21/ld/testsuite/ld-scripts/defined3.t
new file mode 100644
index 0000000..1fe6eef
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/defined3.t
@@ -0,0 +1,15 @@
+defined6 = DEFINED (sym2) ? 1 : 0;
+SECTIONS {
+ .text : { *(.text) sym2 = .; }
+ .data : { *(.data) }
+ .bss : { *(.bss) *(COMMON) }
+}
+defined4 = DEFINED (sym1) ? 1 : 0;
+sym1 = 42;
+defined3 = DEFINED (defined1) ? defined1 + 1 : 256;
+defined1 = DEFINED (defined1) ? defined1 + 1 : 512;
+defined2 = DEFINED (defined1) ? defined1 + 1 : 1024;
+defined5 = DEFINED (sym1) ? sym1 : 0;
+defined7 = DEFINED (sym2);
+defined8 = !DEFINED (defined8);
+defined = DEFINED (defined) ? defined : 42;
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/dynamic-sections-1.s b/binutils-2.21/ld/testsuite/ld-scripts/dynamic-sections-1.s
new file mode 100644
index 0000000..9a72c96
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/dynamic-sections-1.s
@@ -0,0 +1,2 @@
+ .data
+ .4byte foo
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/dynamic-sections-2.s b/binutils-2.21/ld/testsuite/ld-scripts/dynamic-sections-2.s
new file mode 100644
index 0000000..57cb02d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/dynamic-sections-2.s
@@ -0,0 +1,3 @@
+ .data
+ .global foo
+foo: .4byte 0
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/dynamic-sections.d b/binutils-2.21/ld/testsuite/ld-scripts/dynamic-sections.d
new file mode 100644
index 0000000..279107d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/dynamic-sections.d
@@ -0,0 +1,6 @@
+# nm: -C
+# ld: -T dynamic-sections.t
+# name: dynamic sections
+# source: dynamic-sections-1.s
+# source: dynamic-sections-2.s
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/dynamic-sections.exp b/binutils-2.21/ld/testsuite/ld-scripts/dynamic-sections.exp
new file mode 100644
index 0000000..b1b3ae7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/dynamic-sections.exp
@@ -0,0 +1,27 @@
+# Copyright 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+# Check for bug introduced on 2002-06-10. See dynamic-sections.t for
+# more details
+
+if ![is_elf_format] {
+ return
+}
+
+run_dump_test dynamic-sections
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/dynamic-sections.t b/binutils-2.21/ld/testsuite/ld-scripts/dynamic-sections.t
new file mode 100644
index 0000000..f1f24c8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/dynamic-sections.t
@@ -0,0 +1,11 @@
+SECTIONS
+{
+ .data : { *(.data) }
+ .rodata : { *(.rodata) }
+
+ /* The .rel* sections are typically placed here, because of the way
+ elf32.em handles orphaned sections. A bug introduced on 2002-06-10
+ would cause . to be 0 at this point. */
+
+ _bar = ASSERT (. > 0, "Bad . value");
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/empty-address-1.d b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-1.d
new file mode 100644
index 0000000..29301ea
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-1.d
@@ -0,0 +1,9 @@
+#ld: -T empty-address-1.t
+#nm: -n
+#notarget: frv-*-*linux*
+#...
+0+0 T _start
+#...
+0+2000000 A __data_end
+0+2000000 [ADT] __data_start
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/empty-address-1.s b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-1.s
new file mode 100644
index 0000000..c5cc1a5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-1.s
@@ -0,0 +1,5 @@
+ .text
+ .global _start
+_start:
+ .long __data_start
+ .long __data_end
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/empty-address-1.t b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-1.t
new file mode 100644
index 0000000..57a8bed
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-1.t
@@ -0,0 +1,11 @@
+SECTIONS
+{
+ .text 0x0000000: { *(.text) }
+ .data 0x2000000:
+ {
+ __data_start = . ;
+ *(.data)
+ }
+ __data_end = .;
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/empty-address-2.s b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-2.s
new file mode 100644
index 0000000..79f58ea
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-2.s
@@ -0,0 +1,5 @@
+ .text
+ .global _start
+_start:
+ .long __data_end
+ .p2align 4
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/empty-address-2a.d b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-2a.d
new file mode 100644
index 0000000..689db61
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-2a.d
@@ -0,0 +1,9 @@
+#source: empty-address-2.s
+#ld: -Ttext 0x0000000 -Tdata 0x2000000 -T empty-address-2a.t
+#nm: -n
+#notarget: frv-*-*linux* *-*-linux*aout *-*-linux*oldld
+#...
+0+0 T _start
+#...
+0+10 A __data_end
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/empty-address-2a.t b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-2a.t
new file mode 100644
index 0000000..6a40ad8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-2a.t
@@ -0,0 +1,7 @@
+SECTIONS
+{
+ .text : { *(.text) }
+ .data : { *(.data) }
+ __data_end = .;
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/empty-address-2b.d b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-2b.d
new file mode 100644
index 0000000..0c58946
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-2b.d
@@ -0,0 +1,9 @@
+#source: empty-address-2.s
+#ld: -Ttext 0x0000000 -Tdata 0x2000000 -T empty-address-2b.t
+#nm: -n
+#notarget: frv-*-*linux* *-*-linux*aout *-*-linux*oldld
+#...
+0+0 T _start
+#...
+0+10 A __data_end
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/empty-address-2b.t b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-2b.t
new file mode 100644
index 0000000..dcf264f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-2b.t
@@ -0,0 +1,11 @@
+SECTIONS
+{
+ .text 0x0000000: { *(.text) }
+ .data :
+ {
+ PROVIDE (__data_start = .);
+ *(.data)
+ }
+ __data_end = .;
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/empty-address-3.s b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-3.s
new file mode 100644
index 0000000..6b07dd4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-3.s
@@ -0,0 +1,5 @@
+ .text
+ .global _start
+_start:
+ .byte 0,0,0,0,0,0,0,0
+ .byte 0,0,0,0,0,0,0,0
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/empty-address-3a.d b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-3a.d
new file mode 100644
index 0000000..f475d41
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-3a.d
@@ -0,0 +1,9 @@
+#source: empty-address-3.s
+#ld: -T empty-address-3a.t
+#nm: -n
+#notarget: mmix-knuth-mmixware
+#...
+0+0 T _start
+#...
+0+10 A __data_end
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/empty-address-3a.t b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-3a.t
new file mode 100644
index 0000000..2807e71
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-3a.t
@@ -0,0 +1,10 @@
+SECTIONS
+{
+ .text 0x00000000: { *(.text) }
+ .data ALIGN(0x1000) + (. & (0x1000 - 1)):
+ {
+ *(.data)
+ }
+ __data_end = .;
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/empty-address-3b.d b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-3b.d
new file mode 100644
index 0000000..0a97fc2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-3b.d
@@ -0,0 +1,9 @@
+#source: empty-address-3.s
+#ld: -T empty-address-3b.t
+#nm: -n
+#notarget: mmix-knuth-mmixware
+#...
+0+0 T _start
+#...
+0+10 A __data_end
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/empty-address-3b.t b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-3b.t
new file mode 100644
index 0000000..4f213af
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-3b.t
@@ -0,0 +1,11 @@
+SECTIONS
+{
+ .text 0x00000000: { *(.text) }
+ .data ALIGN(0x1000) + (. & (0x1000 - 1)):
+ {
+ PROVIDE (__data_start = .);
+ *(.data)
+ }
+ __data_end = .;
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/empty-address-3c.d b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-3c.d
new file mode 100644
index 0000000..6001885
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-3c.d
@@ -0,0 +1,10 @@
+#source: empty-address-3.s
+#ld: -T empty-address-3c.t
+#nm: -n
+#...
+0+0 T _start
+#...
+0+1010 A __data_end
+#...
+0+1010 [ADT] __data_start
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/empty-address-3c.t b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-3c.t
new file mode 100644
index 0000000..6de5198
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/empty-address-3c.t
@@ -0,0 +1,11 @@
+SECTIONS
+{
+ .text 0x00000000: { *(.text) }
+ .data ALIGN(0x1000) + (. & (0x1000 - 1)):
+ {
+ __data_start = .;
+ *(.data)
+ }
+ __data_end = .;
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/empty-address.exp b/binutils-2.21/ld/testsuite/ld-scripts/empty-address.exp
new file mode 100644
index 0000000..6a2150f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/empty-address.exp
@@ -0,0 +1,32 @@
+# Make sure that "dot" is updated for empty sections if their addresses
+# are set.
+# Copyright 2006, 2007, 2009
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+if [istarget "x86_64-*-mingw*"] then {
+ set LDFLAGS "$LDFLAGS --image-base 0"
+}
+
+run_dump_test empty-address-1
+run_dump_test empty-address-2a
+run_dump_test empty-address-2b
+run_dump_test empty-address-3a
+run_dump_test empty-address-3b
+run_dump_test empty-address-3c
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/empty-aligned.d b/binutils-2.21/ld/testsuite/ld-scripts/empty-aligned.d
new file mode 100644
index 0000000..283ef64
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/empty-aligned.d
@@ -0,0 +1,14 @@
+#source: empty-aligned.s
+#ld: -T empty-aligned.t
+#readelf: -l --wide
+#xfail: "hppa64-*-*"
+#notarget: frv-*-*linux*
+
+#...
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg +Align
+ +LOAD +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ [RWE ]+ +0x[0-9a-f]+
+
+ Section to Segment mapping:
+ +Segment Sections\.\.\.
+ +00 +.text
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/empty-aligned.exp b/binutils-2.21/ld/testsuite/ld-scripts/empty-aligned.exp
new file mode 100644
index 0000000..70da61d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/empty-aligned.exp
@@ -0,0 +1,29 @@
+# Make sure empty aligned sections do not change output layout.
+# Copyright 2005, 2007
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+# PHDRS is only meaningful for ELF.
+if ![is_elf_format] {
+ return
+}
+
+set testname "empty-aligned"
+
+run_dump_test empty-aligned
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/empty-aligned.s b/binutils-2.21/ld/testsuite/ld-scripts/empty-aligned.s
new file mode 100644
index 0000000..2079aa7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/empty-aligned.s
@@ -0,0 +1,2 @@
+ .text
+ .long 123
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/empty-aligned.t b/binutils-2.21/ld/testsuite/ld-scripts/empty-aligned.t
new file mode 100644
index 0000000..e59bc20
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/empty-aligned.t
@@ -0,0 +1,29 @@
+SECTIONS
+{
+ .text : { *(.text) }
+ /* Alignment at beginning shouldn't result in empty section being kept. */
+ .text1 ALIGN (4096) :
+ {
+ *(.text1)
+ }
+ /* Same for alignment at beginning and end. */
+ .text2 ALIGN (4096) :
+ {
+ *(.text2)
+ . = ALIGN (4096);
+ }
+ /* Same for alignment just at end, although we need to be careful in
+ the expression used to align. */
+ .text3 :
+ {
+ *(.text3)
+ . = ALIGN (. != 0 ? 4096 : 1);
+ }
+ /* Same when setting vma and lma. This also shouldn't result in
+ .text3 being kept. */
+ .text4 ADDR (.text3) + SIZEOF (.text3) + 8192 : AT (LOADADDR (.text3))
+ {
+ *(.text4)
+ }
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/empty-orphan.d b/binutils-2.21/ld/testsuite/ld-scripts/empty-orphan.d
new file mode 100644
index 0000000..7bd9b9a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/empty-orphan.d
@@ -0,0 +1,6 @@
+#source: empty-orphan.s
+#ld: -T empty-orphan.t
+#readelf: -l --wide
+#...
+ +LOAD +[x0-9a-f]+ [x0]+70000000 [x0]+70000000 [x0]+(2|4|8|10|20|40|80) .*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/empty-orphan.exp b/binutils-2.21/ld/testsuite/ld-scripts/empty-orphan.exp
new file mode 100644
index 0000000..0c6ebd7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/empty-orphan.exp
@@ -0,0 +1,37 @@
+# Make sure orphan sections do not lead to huge output files.
+# By David Heine, Tensilica, Inc.
+# Copyright 2005, 2006, 2007, 2009
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+# PHDRS is only meaningful for ELF.
+if ![is_elf_format] {
+ return
+}
+
+set old_ldflags $LDFLAGS
+if { [istarget spu*-*-*] } {
+ set LDFLAGS "$LDFLAGS --local-store 0:0"
+}
+
+set testname "empty-orphan"
+
+run_dump_test empty-orphan
+
+set LDFLAGS $old_ldflags
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/empty-orphan.s b/binutils-2.21/ld/testsuite/ld-scripts/empty-orphan.s
new file mode 100644
index 0000000..c8fe675
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/empty-orphan.s
@@ -0,0 +1,4 @@
+ .section .orphan_data, "a"
+ # empty but defined
+ .section .data
+ .word 0x1111
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/empty-orphan.t b/binutils-2.21/ld/testsuite/ld-scripts/empty-orphan.t
new file mode 100644
index 0000000..b57e164
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/empty-orphan.t
@@ -0,0 +1,22 @@
+MEMORY
+{
+ default_mem : ORIGIN = 0x0, LENGTH = 0x100000
+ text_mem : ORIGIN = 0x60000000, LENGTH = 0x100
+ data_mem : ORIGIN = 0x70000000, LENGTH = 0x100
+}
+
+PHDRS
+{
+ default_phdr PT_LOAD;
+ text_phdr PT_LOAD;
+ data_phdr PT_LOAD;
+}
+
+SECTIONS
+{
+ .text : { *(.text) } > text_mem : text_phdr
+ .data : { *(.data) } > data_mem : data_phdr
+ .bss : { *(.bss) } > data_mem : data_phdr
+ /DISCARD/ : { *(.reginfo) *(.glue*) }
+ /* .orphan_data is an orphan */
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/expr.exp b/binutils-2.21/ld/testsuite/ld-scripts/expr.exp
new file mode 100644
index 0000000..34829e5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/expr.exp
@@ -0,0 +1,23 @@
+# Test ALIGN in a linker script.
+# By Nathan Sidwell, CodeSourcery LLC
+# Copyright 2006, 2007
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+run_dump_test expr1
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/expr1.d b/binutils-2.21/ld/testsuite/ld-scripts/expr1.d
new file mode 100644
index 0000000..d96dfc1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/expr1.d
@@ -0,0 +1,2 @@
+# ld: -T expr1.t
+# error: undefined section .* in expression
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/expr1.s b/binutils-2.21/ld/testsuite/ld-scripts/expr1.s
new file mode 100644
index 0000000..ec0ce90
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/expr1.s
@@ -0,0 +1,2 @@
+ .word 0
+
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/expr1.t b/binutils-2.21/ld/testsuite/ld-scripts/expr1.t
new file mode 100644
index 0000000..e0810ba
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/expr1.t
@@ -0,0 +1,12 @@
+ENTRY(RAM)
+
+MEMORY
+{
+ ram (rwx) : ORIGIN = 0, LENGTH = 0x1000000
+}
+
+SECTIONS
+{
+.text : { } >ram
+}
+RAM = ADDR(ram);
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/extern.exp b/binutils-2.21/ld/testsuite/ld-scripts/extern.exp
new file mode 100644
index 0000000..f05cd35
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/extern.exp
@@ -0,0 +1,71 @@
+# Test EXTERN in a linker script.
+# By Nathan Sidwell, CodeSourcery LLC
+# Copyright 2007
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+set testname "EXTERN"
+
+if ![ld_assemble $as $srcdir/$subdir/extern.s tmpdir/extern.o] {
+ unresolved $testname
+ return
+}
+
+if ![ld_simple_link $ld tmpdir/extern "-T $srcdir/$subdir/extern.t tmpdir/extern.o"] {
+ fail $testname
+}
+
+if ![ld_nm $nm "" tmpdir/extern] {
+ unresolved $testname
+ return
+}
+
+if {![info exists nm_output(sym1)] || $nm_output(sym1) != 1} {
+ send_log "sym1 wrong\n"
+ verbose "sym1 wrong"
+ fail $testname
+ return
+}
+
+if {![info exists nm_output(sym2)] || $nm_output(sym2) != 2} {
+ send_log "sym1 wrong\n"
+ verbose "sym1 wrong"
+ fail $testname
+ return
+}
+if {![info exists nm_output(sym3)] || $nm_output(sym3) != 3} {
+ send_log "sym1 wrong\n"
+ verbose "sym1 wrong"
+ fail $testname
+ return
+}
+if {![info exists nm_output(sym4)] || $nm_output(sym4) != 4} {
+ send_log "sym1 wrong\n"
+ verbose "sym1 wrong"
+ fail $testname
+ return
+}
+if {![info exists nm_output(sym5)] || $nm_output(sym5) != 5} {
+ send_log "sym1 wrong\n"
+ verbose "sym1 wrong"
+ fail $testname
+ return
+}
+
+pass $testname
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/extern.s b/binutils-2.21/ld/testsuite/ld-scripts/extern.s
new file mode 100644
index 0000000..09cc1e1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/extern.s
@@ -0,0 +1 @@
+ .text
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/extern.t b/binutils-2.21/ld/testsuite/ld-scripts/extern.t
new file mode 100644
index 0000000..b2a012a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/extern.t
@@ -0,0 +1,14 @@
+
+EXTERN(sym1)
+EXTERN(sym2, sym3)
+EXTERN(sym4 sym5)
+
+PROVIDE(sym1 = 1);
+PROVIDE(sym2 = 2);
+PROVIDE(sym3 = 3);
+PROVIDE(sym4 = 4);
+PROVIDE(sym5 = 5);
+
+SECTIONS
+{
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/include-1.d b/binutils-2.21/ld/testsuite/ld-scripts/include-1.d
new file mode 100644
index 0000000..4ad1fe8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/include-1.d
@@ -0,0 +1,13 @@
+# name: include-1
+# source: include.s
+# ld: -T include-1.t
+# objdump: -w -h
+# xfail: "*-aix*"
+# AIX targets rename the .text and .data sectons...
+
+.*: file format .*
+
+Sections:
+Idx +Name +Size +VMA +LMA +File off +Algn +Flags
+ 0 .text 0+0000020 0+0000000 0+0000000 [0-9a-f]+ 2\*\*[0-9]+ CONTENTS, ALLOC, LOAD,.*CODE
+ 1 .data 0+0000010 0+0100000 0+0100000 [0-9a-f]+ 2\*\*[0-9]+ CONTENTS, ALLOC, LOAD, DATA
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/include-1.t b/binutils-2.21/ld/testsuite/ld-scripts/include-1.t
new file mode 100644
index 0000000..cf2f8cd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/include-1.t
@@ -0,0 +1,4 @@
+
+INCLUDE include-mem.t
+_start = 0x1000;
+INCLUDE include-sections.t
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/include-data.t b/binutils-2.21/ld/testsuite/ld-scripts/include-data.t
new file mode 100644
index 0000000..eddbbb3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/include-data.t
@@ -0,0 +1,4 @@
+.data : {
+INCLUDE include-subdata.t
+__end = .;
+}>ram
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/include-mem.t b/binutils-2.21/ld/testsuite/ld-scripts/include-mem.t
new file mode 100644
index 0000000..8aa65b1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/include-mem.t
@@ -0,0 +1,5 @@
+
+MEMORY {
+ rom (rwx) : ORIGIN = 0, LENGTH = 0x1000
+ INCLUDE include-ram.t
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/include-ram.t b/binutils-2.21/ld/testsuite/ld-scripts/include-ram.t
new file mode 100644
index 0000000..f7eaf0e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/include-ram.t
@@ -0,0 +1 @@
+ram (rw) : ORIGIN = 0x100000, LENGTH = 512
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/include-sections.t b/binutils-2.21/ld/testsuite/ld-scripts/include-sections.t
new file mode 100644
index 0000000..5d6ca1e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/include-sections.t
@@ -0,0 +1,5 @@
+SECTIONS {
+ .text : { *(.text) } >rom
+ INCLUDE include-data.t
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/include-subdata.t b/binutils-2.21/ld/testsuite/ld-scripts/include-subdata.t
new file mode 100644
index 0000000..136c9f4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/include-subdata.t
@@ -0,0 +1,2 @@
+ *(.data)
+
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/include.exp b/binutils-2.21/ld/testsuite/ld-scripts/include.exp
new file mode 100644
index 0000000..08fa1b6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/include.exp
@@ -0,0 +1,40 @@
+# Test for proper diagnosis of overflowed memory regions.
+# Copyright 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+load_lib ld-lib.exp
+
+if [is_aout_format] {
+ return
+}
+
+set old_ldflags $LDFLAGS
+if { [istarget spu*-*-*] } {
+ set LDFLAGS "$LDFLAGS --local-store 0:0 --no-overlays"
+}
+
+set test_list [lsort [glob -nocomplain $srcdir/$subdir/include*.d]]
+foreach test_file $test_list {
+ set test_name [file rootname $test_file]
+ set map_file "tmpdir/[file tail $test_name].map"
+ verbose $test_name
+ run_dump_test $test_name
+}
+
+set LDFLAGS $old_ldflags
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/include.s b/binutils-2.21/ld/testsuite/ld-scripts/include.s
new file mode 100644
index 0000000..e9fca05
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/include.s
@@ -0,0 +1,5 @@
+ .text
+ .fill 32,1,0x12
+
+ .data
+ .fill 16,1,0x34
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/map-address.d b/binutils-2.21/ld/testsuite/ld-scripts/map-address.d
new file mode 100644
index 0000000..7877ca4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/map-address.d
@@ -0,0 +1,12 @@
+#...
+Linker script and memory map
+#...
+ *0x0*000020 *def1 = .*
+ *0x0*000020 *def2 = def1
+ *0x0*010001 *\. = 0x10001
+ *0x0*010001 *foo = \.
+ *0x0*010201 *\. = \(\. \+ 0x200\)
+ *0x0*010201 *bar = \.
+ *0x0*010204 *\. = ALIGN \(0x4\)
+ *0x0*010204 *frob = \.
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/map-address.exp b/binutils-2.21/ld/testsuite/ld-scripts/map-address.exp
new file mode 100644
index 0000000..499a824
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/map-address.exp
@@ -0,0 +1,47 @@
+# Test address printed by --print-map
+# Copyright 2002, 2005, 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+set testname "map addresses"
+
+# The source file doesn't matter. Pinch one from the sizeof test.
+if {![ld_assemble $as $srcdir/$subdir/sizeof.s tmpdir/map-address.o]} {
+ unresolved $testname
+ return
+}
+
+if {![ld_simple_link $ld tmpdir/map-address \
+ "-T $srcdir/$subdir/map-address.t \
+ tmpdir/map-address.o \
+ -Map tmpdir/map-address.map"]} {
+ fail $testname
+ return
+}
+
+if [is_remote host] then {
+ remote_upload host "tmpdir/map_address.map"
+}
+
+if {[regexp_diff \
+ "tmpdir/map-address.map" \
+ "$srcdir/$subdir/map-address.d"]} {
+ fail $testname
+} else {
+ pass $testname
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/map-address.t b/binutils-2.21/ld/testsuite/ld-scripts/map-address.t
new file mode 100644
index 0000000..e077ed1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/map-address.t
@@ -0,0 +1,11 @@
+SECTIONS
+{
+ def1 = DEFINED(foo) ? 0x10 : 0x20;
+ def2 = def1;
+ . = 0x10001;
+ foo = .;
+ . += 0x200;
+ bar = .;
+ . = ALIGN (4);
+ frob = .;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/memory.t b/binutils-2.21/ld/testsuite/ld-scripts/memory.t
new file mode 100644
index 0000000..129bd7c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/memory.t
@@ -0,0 +1,33 @@
+MEMORY
+{
+ R_TEXTMEM (ARX) : ORIGIN = 0x100, LENGTH = 32K
+ R_DATAMEM (AW) : org = 0x1000, l = (64 * 1024)
+}
+
+REGION_ALIAS ("A_TEXTMEM", R_TEXTMEM);
+REGION_ALIAS ("A_DATAMEM", R_DATAMEM);
+
+REGION_ALIAS ("TEXTMEM", A_TEXTMEM);
+REGION_ALIAS ("DATAMEM", A_DATAMEM);
+
+SECTIONS
+{
+ . = 0;
+ .text :
+ {
+ text_start = ORIGIN (TEXTMEM);
+ *(.text)
+ *(.pr)
+ text_end = .;
+ } > TEXTMEM
+
+ data_start = ORIGIN (DATAMEM);
+ .data :
+ {
+ *(.data)
+ *(.rw)
+ data_end = .;
+ } >DATAMEM
+
+ fred = ORIGIN(DATAMEM) + LENGTH(DATAMEM);
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/overlay-size-map.d b/binutils-2.21/ld/testsuite/ld-scripts/overlay-size-map.d
new file mode 100644
index 0000000..a72d359
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/overlay-size-map.d
@@ -0,0 +1,29 @@
+#...
+\.bss1 *0x0*20000 *0x10
+#...
+\.bss2 *0x0*20000 *0x30 load address 0x0*20010
+#...
+\.bss3 *0x0*20000 *0x20 load address 0x0*20040
+#...
+.*0x0+020030[ ]*end_of_bss_overlays.*
+#...
+\.mtext *0x0*10000 *0x20 load address 0x0*30000
+#...
+\.mbss *0x0*20030 *0x230 load address 0x0*20060
+#...
+\.text1 *0x0*10020 *0x80 load address 0x0*30020
+#...
+\.text2 *0x0*10020 *0x40 load address 0x0*300a0
+#...
+\.text3 *0x0*10020 *0x20 load address 0x0*300e0
+#...
+.*0x0+0100a0[ ]*end_of_text_overlays.*
+#...
+\.data1 *0x0*20260 *0x30 load address 0x0*30100
+#...
+\.data2 *0x0*20260 *0x40 load address 0x0*30130
+#...
+\.data3 *0x0*20260 *0x50 load address 0x0*30170
+#...
+.*0x0+0202b0[ ]*end_of_data_overlays.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/overlay-size.d b/binutils-2.21/ld/testsuite/ld-scripts/overlay-size.d
new file mode 100644
index 0000000..78a9c92
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/overlay-size.d
@@ -0,0 +1,32 @@
+# ld: -T overlay-size.t -Map tmpdir/overlay-size.map
+# name: overlay size
+# objdump: --headers
+# xfail: rx-*-*
+# FAILS on the RX because the linker has to set LMA == VMA for the
+# Renesas loader.
+#
+# The .bss[123] LMAs are deliberately blanked out. We can't
+# reliably map overlaid sections to segments.
+#...
+ .. \.bss1 +0+010 +0+20000 .*
+#...
+ .. \.bss2 +0+030 +0+20000 .*
+#...
+ .. \.bss3 +0+020 +0+20000 .*
+#...
+ .. \.mtext +0+020 +0+10000 +0+30000 .*
+#...
+ .. \.mbss +0+230 +0+20030 .*
+#...
+ .. \.text1 +0+080 +0+10020 +0+30020 .*
+#...
+ .. \.text2 +0+040 +0+10020 +0+300a0 .*
+#...
+ .. \.text3 +0+020 +0+10020 +0+300e0 .*
+#...
+ .. \.data1 +0+030 +0+20260 +0+30100 .*
+#...
+ .. \.data2 +0+040 +0+20260 +0+30130 .*
+#...
+ .. \.data3 +0+050 +0+20260 +0+30170 .*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/overlay-size.exp b/binutils-2.21/ld/testsuite/ld-scripts/overlay-size.exp
new file mode 100644
index 0000000..42c4348
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/overlay-size.exp
@@ -0,0 +1,34 @@
+# Test the OVERLAY statement.
+# Copyright 2002, 2005, 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+if ![is_elf_format] {
+ return
+}
+
+run_dump_test overlay-size
+
+set testname "overlay size (map check)"
+
+if [regexp_diff "tmpdir/overlay-size.map" \
+ "$srcdir/$subdir/overlay-size-map.d"] {
+ fail $testname
+} else {
+ pass $testname
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/overlay-size.s b/binutils-2.21/ld/testsuite/ld-scripts/overlay-size.s
new file mode 100644
index 0000000..5428c97
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/overlay-size.s
@@ -0,0 +1,25 @@
+ .section .bss1, "aw", "nobits"
+ .space 0x10
+ .section .bss2, "aw", "nobits"
+ .space 0x30
+ .section .bss3, "aw", "nobits"
+ .space 0x20
+
+ .section .text1, "ax", "progbits"
+ .space 0x80
+ .section .text2, "ax", "progbits"
+ .space 0x40
+ .section .text3, "ax", "progbits"
+ .space 0x20
+
+ .section .data1, "aw", "progbits"
+ .space 0x30
+ .section .data2, "aw", "progbits"
+ .space 0x40
+ .section .data3, "aw", "progbits"
+ .space 0x50
+
+ .section .mtext, "ax", "progbits"
+ .space 0x20
+ .section .mbss, "aw", "nobits"
+ .space 0x30
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/overlay-size.t b/binutils-2.21/ld/testsuite/ld-scripts/overlay-size.t
new file mode 100644
index 0000000..0d9af35
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/overlay-size.t
@@ -0,0 +1,64 @@
+MEMORY
+{
+ TEXTMEM (ARX) : ORIGIN = 0x10000, LENGTH = 32K
+ DATAMEM (AW) : ORIGIN = 0x20000, LENGTH = 32K
+ LOADMEM (AW) : ORIGIN = 0x30000, LENGTH = 32K
+}
+
+/* Map should be:
+
+ SIZE VMA LMA
+ .bss1 10 20000 20000
+ .bss2 30 20000 20010
+ .bss3 20 20000 20040
+ .mbss 230 20030 20060
+
+ .mtext 20 10000 30000
+ .text1 80 10020 30020
+ .text2 40 10020 300a0
+ .text3 20 10020 300e0
+
+ .data1 30 20260 30100
+ .data2 40 20260 30130
+ .data3 50 20260 30170 */
+
+SECTIONS
+{
+ OVERLAY :
+ {
+ .bss1 { *(.bss1) }
+ .bss2 { *(.bss2) }
+ .bss3 { *(.bss3) }
+ } > DATAMEM
+
+ end_of_bss_overlays = . ;
+
+ .mtext : { *(.mtext) } > TEXTMEM AT > LOADMEM
+
+ .mbss : AT (__load_stop_bss3)
+ {
+ *(.mbss)
+ . += 0x200;
+ } > DATAMEM
+
+ OVERLAY :
+ {
+ .text1 { *(.text1) }
+ .text2 { *(.text2) }
+ .text3 { *(.text3) }
+ } > TEXTMEM AT > LOADMEM
+
+ end_of_text_overlays = . ;
+
+ OVERLAY :
+ {
+ .data1 { *(.data1) }
+ .data2 { *(.data2) }
+ .data3 { *(.data3) }
+ } > DATAMEM AT > LOADMEM
+
+ end_of_data_overlays = . ;
+
+ . = 0x8000;
+ /DISCARD/ : { *(.reginfo) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/phdrs.exp b/binutils-2.21/ld/testsuite/ld-scripts/phdrs.exp
new file mode 100644
index 0000000..a112d3a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/phdrs.exp
@@ -0,0 +1,68 @@
+# Test PHDRS in a linker script.
+# By Ian Lance Taylor, Cygnus Support.
+# Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+# PHDRS is only meaningful for ELF.
+if ![is_elf_format] {
+ return
+}
+
+# This is a very simplistic test.
+
+set testname "PHDRS"
+
+set ldopt ""
+if { [istarget spu*-*-*] } {
+ set ldopt "--local-store 0:0"
+}
+
+if ![ld_assemble $as $srcdir/$subdir/phdrs.s tmpdir/phdrs.o] {
+ unresolved $testname
+ return
+}
+
+set phdrs_regexp \
+".*Program Header:.*PHDR *off *0x00*34 *vaddr *0x00*800034 *paddr *0x00*800034.*filesz *0x0\[0-9a-f\]* *memsz *0x0\[0-9a-f\]* flags r--.*LOAD *off *0x00* *vaddr *0x00*800000 *paddr *0x00*800000.*filesz *0x00*\[0-9a-f\]* *memsz *0x0\[0-9a-f\]* *flags r-x.*LOAD *off *0x0\[0-9a-f\]* *vaddr *0x00*80*\[0-9a-f\]* *paddr *0x00*80*\[0-9a-f\]*.*filesz *0x0\[0-9a-f\]* *memsz *0x0\[0-9a-f\]* *flags *rw-.*"
+
+# On a 64 bit ELF format, we need different numbers.
+if [is_elf64 tmpdir/phdrs.o] {
+ set phdrs_regexp \
+".*Program Header:.*PHDR *off *0x00*40 *vaddr *0x00*800040 *paddr *0x00*800040.*filesz *0x0\[0-9a-f\]* *memsz *0x0\[0-9a-f\]* flags r--.*LOAD *off *0x00* *vaddr *0x00*800000 *paddr *0x00*800000.*filesz *0x00*\[0-9a-f\]* *memsz *0x0\[0-9a-f\]* *flags r-x.*LOAD *off *0x0\[0-9a-f\]* *vaddr *0x00*80*\[0-9a-f\]* *paddr *0x00*80*\[0-9a-f\]*.*filesz *0x0\[0-9a-f\]* *memsz *0x0\[0-9a-f\]* *flags *rw-.*"
+}
+
+set ldopt "$ldopt -T $srcdir/$subdir/phdrs.t tmpdir/phdrs.o"
+if ![ld_simple_link $ld tmpdir/phdrs $ldopt] {
+ fail $testname
+} else {
+ if {![is_remote host] && [which $objdump] == 0} {
+ unresolved $testname
+ return
+ }
+ set exec_output [run_host_cmd "$objdump" "--private tmpdir/phdrs"]
+ set exec_output [prune_warnings $exec_output]
+ verbose -log $exec_output
+
+ if [regexp $phdrs_regexp $exec_output] {
+ pass $testname
+ } else {
+ fail $testname
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/phdrs.s b/binutils-2.21/ld/testsuite/ld-scripts/phdrs.s
new file mode 100644
index 0000000..ec1f0d1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/phdrs.s
@@ -0,0 +1,8 @@
+ .text
+
+ .long 1
+
+ .data
+
+ .long 2
+
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/phdrs.t b/binutils-2.21/ld/testsuite/ld-scripts/phdrs.t
new file mode 100644
index 0000000..283e30c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/phdrs.t
@@ -0,0 +1,16 @@
+PHDRS
+{
+ header PT_PHDR PHDRS ;
+ text PT_LOAD FILEHDR PHDRS ;
+ data PT_LOAD ;
+}
+
+SECTIONS
+{
+ /* This test will fail on architectures where the startaddress below
+ is less than the constant MAXPAGESIZE. */
+ . = 0x800000 + SIZEOF_HEADERS;
+ .text : { *(.text) } :text
+ .data : { *(.data) } :data
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/phdrs2.exp b/binutils-2.21/ld/testsuite/ld-scripts/phdrs2.exp
new file mode 100644
index 0000000..57778d2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/phdrs2.exp
@@ -0,0 +1,74 @@
+# Test PHDRS with empty sections in a linker script.
+# Copyright 2006, 2005, 2007 Free Software Foundation, Inc,
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+# PHDRS2 is only meaningful for ELF.
+if { ![istarget *-*-sysv4*] \
+ && ![istarget *-*-unixware*] \
+ && ![istarget *-*-elf*] \
+ && ![istarget *-*-eabi*] \
+ && ![istarget hppa*64*-*-hpux*] \
+ && ![istarget *-*-linux*] \
+ && ![istarget *-*-irix5*] \
+ && ![istarget *-*-irix6*] \
+ && ![istarget *-*-solaris2*] } {
+ return
+}
+
+if { [istarget *-*-linux*aout*] \
+ || [istarget *-*-linux*oldld*] } {
+ return
+}
+
+# This is a very simplistic test.
+
+set testname "PHDRS2"
+
+set ldopt ""
+if { [istarget spu*-*-*] } {
+ set ldopt "--local-store 0:0"
+}
+
+if ![ld_assemble $as $srcdir/$subdir/phdrs2.s tmpdir/phdrs2.o] {
+ unresolved $testname
+ return
+}
+
+set phdrs_regexp \
+ ".*Program Header:.*LOAD *off *0x00\[0-9a-f\]* *vaddr *0x00*800000 *paddr *0x00*800000.*filesz *0x0\[0-9a-f\]* *memsz *0x0\[0-9a-f\]*.*LOAD *off *0x00\[0-9a-f\]* *vaddr *0x00*800004 *paddr *0x00*800004.*filesz *0x00*\[0-9a-f\]* *memsz *0x0\[0-9a-f\]* *flags rw.*"
+
+set ldopt "$ldopt -T $srcdir/$subdir/phdrs2.t tmpdir/phdrs2.o"
+if ![ld_simple_link $ld tmpdir/phdrs2 $ldopt] {
+ fail $testname
+} else {
+ if {![is_remote host] && [which $objdump] == 0} {
+ unresolved $testname
+ return
+ }
+
+ set exec_output [run_host_cmd "$objdump" "--private tmpdir/phdrs2"]
+ set exec_output [prune_warnings $exec_output]
+ verbose -log $exec_output
+
+ if [regexp $phdrs_regexp $exec_output] {
+ pass $testname
+ } else {
+ fail $testname
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/phdrs2.s b/binutils-2.21/ld/testsuite/ld-scripts/phdrs2.s
new file mode 100644
index 0000000..1e29ddc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/phdrs2.s
@@ -0,0 +1,7 @@
+ .section .foo, "ax"
+ .p2align 2
+ .long 1
+
+ .section .bar, "aw"
+ .p2align 2
+ .long 2
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/phdrs2.t b/binutils-2.21/ld/testsuite/ld-scripts/phdrs2.t
new file mode 100644
index 0000000..bccbcec
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/phdrs2.t
@@ -0,0 +1,23 @@
+PHDRS
+{
+ Foo PT_LOAD ;
+ Bar PT_LOAD ;
+}
+
+SECTIONS
+{
+ . = 0x800000 - 1;
+ /* The PHDRS generated should start at the aligned .foo section
+ address, not the unaligned .empty section address */
+ .empty : {
+ EMPTY_START = ABSOLUTE(.) ;
+ *(.empty)
+ EMPTY_END = ABSOLUTE(.) ;
+ } : Foo
+ .foo : { *(.foo) } : Foo
+ .bar : { *(.bar)
+ LONG(EMPTY_START) ;
+ } : Bar
+
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/phdrs3.d b/binutils-2.21/ld/testsuite/ld-scripts/phdrs3.d
new file mode 100644
index 0000000..7b37d80
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/phdrs3.d
@@ -0,0 +1,4 @@
+# name: PHDRS headers
+# source: phdrs.s
+# ld: -T phdrs3.t
+# error: \A[^ \n]*:[^:\n]*:5: PHDRS and FILEHDR.*
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/phdrs3.exp b/binutils-2.21/ld/testsuite/ld-scripts/phdrs3.exp
new file mode 100644
index 0000000..9ab8363
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/phdrs3.exp
@@ -0,0 +1,39 @@
+# Test PHDRS in a linker script.
+# By Nathan Sidwell <nathan@codesourcery.com>
+# Copyright 2009 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+# PHDRS is only meaningful for ELF.
+if ![is_elf_format] {
+ return
+}
+
+load_lib ld-lib.exp
+
+set testname "PHDRS headers"
+
+set old_ldflags $LDFLAGS
+if { [istarget spu*-*-*] } {
+ set LDFLAGS "$LDFLAGS --no-overlays --local-store 0:0"
+}
+
+run_dump_test "phdrs3"
+run_dump_test "phdrs3a"
+
+set LDFLAGS $old_ldflags
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/phdrs3.t b/binutils-2.21/ld/testsuite/ld-scripts/phdrs3.t
new file mode 100644
index 0000000..4bd4e85
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/phdrs3.t
@@ -0,0 +1,16 @@
+PHDRS
+{
+ data PT_LOAD ;
+ header PT_PHDR PHDRS ; /* OK */
+ text PT_LOAD FILEHDR PHDRS ;
+}
+
+SECTIONS
+{
+ /* This test will fail on architectures where the startaddress below
+ is less than the constant MAXPAGESIZE. */
+ . = 0x800000 + SIZEOF_HEADERS;
+ .text : { *(.text) } :text
+ .data : { *(.data) } :data
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/phdrs3a.d b/binutils-2.21/ld/testsuite/ld-scripts/phdrs3a.d
new file mode 100644
index 0000000..80bde71
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/phdrs3a.d
@@ -0,0 +1,9 @@
+#name: PHDRS headers 3a
+#source: phdrs.s
+#ld: -T phdrs3a.t
+#readelf: -l --wide
+
+#...
+[ \t]+LOAD[ x0-9a-f]+ R [ x0-9a-f]+
+[ \t]+LOAD[ x0-9a-f]+ E [ x0-9a-f]+
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/phdrs3a.t b/binutils-2.21/ld/testsuite/ld-scripts/phdrs3a.t
new file mode 100644
index 0000000..c07ff34
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/phdrs3a.t
@@ -0,0 +1,15 @@
+PHDRS
+{
+ data PT_LOAD FILEHDR PHDRS FLAGS(4);
+ text PT_LOAD FILEHDR PHDRS FLAGS(1);
+}
+
+SECTIONS
+{
+ /* This test will fail on architectures where the startaddress below
+ is less than the constant MAXPAGESIZE. */
+ . = 0x800000 + SIZEOF_HEADERS;
+ .text : { *(.text) } :text
+ .data : { *(.data) } :data
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/provide-1.d b/binutils-2.21/ld/testsuite/ld-scripts/provide-1.d
new file mode 100644
index 0000000..ac8719a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/provide-1.d
@@ -0,0 +1,9 @@
+#source: provide-1.s
+#ld: -T provide-1.t
+#objdump: -s -j .data
+
+.*: file format .*
+
+Contents of section .data:
+ [0-9a-f]* (1020)?0000(2010)? (2020)?0000(2020)? 00000000 .*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/provide-1.s b/binutils-2.21/ld/testsuite/ld-scripts/provide-1.s
new file mode 100644
index 0000000..1e33540
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/provide-1.s
@@ -0,0 +1,4 @@
+ .data
+ .globl foo
+foo: .long 0
+ .p2align 4
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/provide-1.t b/binutils-2.21/ld/testsuite/ld-scripts/provide-1.t
new file mode 100644
index 0000000..6b96b33
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/provide-1.t
@@ -0,0 +1,12 @@
+SECTIONS
+{
+ .data 0x2000 :
+ {
+ LONG (foo)
+ LONG (bar)
+ . = ALIGN (0x10);
+ *(.data)
+ }
+ PROVIDE (foo = .);
+ PROVIDE (bar = .);
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/provide-2.d b/binutils-2.21/ld/testsuite/ld-scripts/provide-2.d
new file mode 100644
index 0000000..e151b30
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/provide-2.d
@@ -0,0 +1,7 @@
+#source: provide-2.s
+#ld: -T provide-2.t
+#nm: -B
+#...
+0+3 A baz
+0+2000 D foo
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/provide-2.s b/binutils-2.21/ld/testsuite/ld-scripts/provide-2.s
new file mode 100644
index 0000000..f9138db
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/provide-2.s
@@ -0,0 +1,8 @@
+ .data
+ .globl foo
+foo: .long 0
+
+ .globl baz
+ .long baz
+
+ .p2align 4
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/provide-2.t b/binutils-2.21/ld/testsuite/ld-scripts/provide-2.t
new file mode 100644
index 0000000..fe30dd8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/provide-2.t
@@ -0,0 +1,10 @@
+SECTIONS
+{
+ PROVIDE (foo = 1);
+ PROVIDE (bar = 2);
+ PROVIDE (baz = 3);
+ .data 0x2000 :
+ {
+ *(.data)
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/provide-3.d b/binutils-2.21/ld/testsuite/ld-scripts/provide-3.d
new file mode 100644
index 0000000..c8b12da
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/provide-3.d
@@ -0,0 +1,3 @@
+#source: provide-3.s
+#ld: -T provide-3.t
+#error: symbol defined in linker script and object file
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/provide-3.s b/binutils-2.21/ld/testsuite/ld-scripts/provide-3.s
new file mode 100644
index 0000000..1e33540
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/provide-3.s
@@ -0,0 +1,4 @@
+ .data
+ .globl foo
+foo: .long 0
+ .p2align 4
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/provide-3.t b/binutils-2.21/ld/testsuite/ld-scripts/provide-3.t
new file mode 100644
index 0000000..f6229d4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/provide-3.t
@@ -0,0 +1,11 @@
+SECTIONS
+{
+ .data :
+ {
+ LONG (foo)
+ LONG (bar)
+ *(.data)
+ }
+ foo = .;
+ bar = .;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/provide.exp b/binutils-2.21/ld/testsuite/ld-scripts/provide.exp
new file mode 100644
index 0000000..6db399f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/provide.exp
@@ -0,0 +1,45 @@
+# Test PROVIDE in a linker script.
+# By Nathan Sidwell, CodeSourcery LLC
+# Copyright 2004, 2005, 2006, 2007
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+# AIX maps .text and .data to other sections.
+# a.out objdump displays the file header inside the text segment,
+# confusing run_dump_test.
+
+if {[istarget "rs6000-*-aix*"] || [is_aout_format]} {
+ unsupported provide-1
+ unsupported provide-2
+ unsupported provide-3
+ return
+}
+
+global LDFLAGS
+set saved_LDFLAGS "$LDFLAGS"
+if [istarget "x86_64-*-mingw*"] then {
+ set LDFLAGS "$LDFLAGS --image-base 0"
+}
+
+run_dump_test provide-1
+run_dump_test provide-2
+setup_xfail *-*-*
+run_dump_test provide-3
+
+set LDFLAGS "$saved_LDFLAGS"
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/region-alias-1.t b/binutils-2.21/ld/testsuite/ld-scripts/region-alias-1.t
new file mode 100644
index 0000000..91f8100
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/region-alias-1.t
@@ -0,0 +1,7 @@
+MEMORY
+{
+ MY_REGION (ARX) : ORIGIN = 0, LENGTH = 32K
+}
+
+REGION_ALIAS ("MY_ALIAS", MY_REGION);
+REGION_ALIAS ("MY_ALIAS", MY_REGION);
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/region-alias-2.t b/binutils-2.21/ld/testsuite/ld-scripts/region-alias-2.t
new file mode 100644
index 0000000..a6b1514
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/region-alias-2.t
@@ -0,0 +1,6 @@
+MEMORY
+{
+ MY_REGION (ARX) : ORIGIN = 0, LENGTH = 32K
+}
+
+REGION_ALIAS ("MY_ALIAS", "NIL");
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/region-alias-3.t b/binutils-2.21/ld/testsuite/ld-scripts/region-alias-3.t
new file mode 100644
index 0000000..667879b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/region-alias-3.t
@@ -0,0 +1,6 @@
+MEMORY
+{
+ MY_REGION (ARX) : ORIGIN = 0, LENGTH = 32K
+}
+
+REGION_ALIAS ("MY_ALIAS", "*default*");
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/region-alias-4.t b/binutils-2.21/ld/testsuite/ld-scripts/region-alias-4.t
new file mode 100644
index 0000000..da9dff5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/region-alias-4.t
@@ -0,0 +1,6 @@
+MEMORY
+{
+ MY_REGION (ARX) : ORIGIN = 0, LENGTH = 32K
+}
+
+REGION_ALIAS ("*default*", MY_REGION);
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-at.exp b/binutils-2.21/ld/testsuite/ld-scripts/rgn-at.exp
new file mode 100644
index 0000000..9095273
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-at.exp
@@ -0,0 +1,33 @@
+# Test for proper diagnosis of overflowed memory regions.
+# Copyright 2009 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+if ![is_elf_format] {
+ return
+}
+
+load_lib ld-lib.exp
+
+set test_list [lsort [glob -nocomplain $srcdir/$subdir/rgn-at*.d]]
+foreach test_file $test_list {
+ set test_name [file rootname $test_file]
+ set map_file "tmpdir/[file tail $test_name].map"
+ verbose $test_name
+ run_dump_test $test_name
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-at.s b/binutils-2.21/ld/testsuite/ld-scripts/rgn-at.s
new file mode 100644
index 0000000..0628046
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-at.s
@@ -0,0 +1,6 @@
+ .section .text
+ .long 0x12345678
+ .section .data
+ .long 0x9abcdef0
+ .section .bss
+ .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-at1.d b/binutils-2.21/ld/testsuite/ld-scripts/rgn-at1.d
new file mode 100644
index 0000000..f301bbb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-at1.d
@@ -0,0 +1,15 @@
+# name: rgn-at1
+# source: rgn-at.s
+# ld: -T rgn-at1.t
+# objdump: -w -h
+# xfail: rx-*-*
+# FAILS on the RX because the linker has to set LMA == VMA for the
+# Renesas loader.
+
+.*: file format .*
+
+Sections:
+Idx +Name +Size +VMA +LMA +File off +Algn +Flags
+ 0 .text +0+[0-9a-f][0-9a-f] +0+0010000 +0+0020000 +.*
+ 1 .data +0+[0-9a-f][0-9a-f] +0+00100[0-9a-f]+ +0+00200[0-9a-f]+ +.*
+ 2 .bss +0+[0-9a-f][0-9a-f] +0+00100[0-9a-f]+ +0+00200[0-9a-f]+ +.*
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-at1.t b/binutils-2.21/ld/testsuite/ld-scripts/rgn-at1.t
new file mode 100644
index 0000000..610be2a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-at1.t
@@ -0,0 +1,13 @@
+/* Memory region at test, >AT should propagate by default */
+
+MEMORY {
+ ram : ORIGIN = 0x10000, LENGTH = 0x100
+ rom : ORIGIN = 0x20000, LENGTH = 0x200
+}
+_start = 0x1000;
+SECTIONS {
+ .text : { *(.text) } >ram AT>rom
+ .data : { *(.data) } >ram /* default AT>rom */
+ .bss : { *(.bss) } >ram
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-at2.d b/binutils-2.21/ld/testsuite/ld-scripts/rgn-at2.d
new file mode 100644
index 0000000..8fd5f1a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-at2.d
@@ -0,0 +1,15 @@
+# name: rgn-at2
+# source: rgn-at.s
+# ld: -T rgn-at2.t
+# objdump: -w -h
+# xfail: rx-*-*
+# FAILS on the RX because the linker has to set LMA == VMA for the
+# Renesas loader.
+
+.*: file format .*
+
+Sections:
+Idx +Name +Size +VMA +LMA +File off +Algn +Flags
+ 0 .text +0+[0-9a-f][0-9a-f] +0+0010000 +0+0020000 +.*
+ 1 .data +0+[0-9a-f][0-9a-f] +0+0030000 +0+0030000 +.*
+ 2 .bss +0+[0-9a-f][0-9a-f] +0+00300[0-9a-f]+ +0+00300[0-9a-f]+ +.*
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-at2.t b/binutils-2.21/ld/testsuite/ld-scripts/rgn-at2.t
new file mode 100644
index 0000000..57fd88c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-at2.t
@@ -0,0 +1,14 @@
+/* Memory region at test, >AT should propagate by default */
+
+MEMORY {
+ ram : ORIGIN = 0x10000, LENGTH = 0x100
+ rom : ORIGIN = 0x20000, LENGTH = 0x200
+ other : ORIGIN = 0x30000, LENGTH = 0x200
+}
+_start = 0x1000;
+SECTIONS {
+ .text : { *(.text) } >ram AT>rom
+ .data : { *(.data) } >other /* No default AT>rom */
+ .bss : { *(.bss) } >other
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-at3.d b/binutils-2.21/ld/testsuite/ld-scripts/rgn-at3.d
new file mode 100644
index 0000000..1d21956
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-at3.d
@@ -0,0 +1,15 @@
+# name: rgn-at3
+# source: rgn-at.s
+# ld: -T rgn-at3.t
+# objdump: -w -h
+# xfail: rx-*-*
+# FAILS on the RX because the linker has to set LMA == VMA for the
+# Renesas loader.
+
+.*: file format .*
+
+Sections:
+Idx +Name +Size +VMA +LMA +File off +Algn +Flags
+ 0 .text +0+[0-9a-f][0-9a-f] +0+0010000 +0+0020000 +.*
+ 1 .data +0+[0-9a-f][0-9a-f] +0+00100[0-9a-f]+ +0+0030000 +.*
+ 2 .bss +0+[0-9a-f][0-9a-f] +0+00100[0-9a-f]+ +0+00300[0-9a-f]+ +.*
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-at3.t b/binutils-2.21/ld/testsuite/ld-scripts/rgn-at3.t
new file mode 100644
index 0000000..4622e7e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-at3.t
@@ -0,0 +1,13 @@
+/* Memory region at test, >AT should propagate by default */
+
+MEMORY {
+ ram : ORIGIN = 0x10000, LENGTH = 0x100
+ rom : ORIGIN = 0x20000, LENGTH = 0x200
+}
+_start = 0x1000;
+SECTIONS {
+ .text : { *(.text) } >ram AT>rom
+ .data : AT (0x30000) { *(.data) } >ram /* NO default AT>rom */
+ .bss : { *(.bss) } >ram /* NO default AT>rom */
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-at4.d b/binutils-2.21/ld/testsuite/ld-scripts/rgn-at4.d
new file mode 100644
index 0000000..9837343
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-at4.d
@@ -0,0 +1,16 @@
+# name: rgn-at4
+# source: rgn-at.s
+# ld: -T rgn-at4.t
+# objdump: -w -h
+# xfail: rx-*-*
+# FAILS on the RX because the linker has to set LMA == VMA for the
+# Renesas loader.
+
+.*: file format .*
+
+Sections:
+Idx +Name +Size +VMA +LMA +File off +Algn +Flags
+ 0 .text +0+[0-9a-f][0-9a-f] +0+0010000 +0+0020000 +.*
+ 1 .data +0+[0-9a-f][0-9a-f] +0+00100[0-9a-f]+ +0+00200[0-9a-f]+ +.*
+ 2 .bss +0+[0-9a-f][0-9a-f] +0+00100[0-9a-f]+ +0+00200[0-9a-f]+ +.*
+ 3 .trail +0+[0-9a-f][0-9a-f] +0+00100[0-9a-f]+ +0+00200[0-9a-f]+ +.*
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-at4.t b/binutils-2.21/ld/testsuite/ld-scripts/rgn-at4.t
new file mode 100644
index 0000000..0e3fec4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-at4.t
@@ -0,0 +1,14 @@
+/* Memory region at test, >AT should propagate by default */
+
+MEMORY {
+ ram : ORIGIN = 0x10000, LENGTH = 0x100
+ rom : ORIGIN = 0x20000, LENGTH = 0x200
+}
+_start = 0x1000;
+SECTIONS {
+ .text : { *(.text) } >ram AT>rom
+ .data : { *(.data) } >ram
+ .bss : { *(.bss) } >ram
+ .trail : { LONG(5) } >ram
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-at5.d b/binutils-2.21/ld/testsuite/ld-scripts/rgn-at5.d
new file mode 100644
index 0000000..972c6c2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-at5.d
@@ -0,0 +1,20 @@
+# name: rgn-at5
+# source: rgn-at5.s
+# ld: -T rgn-at5.t -z max-page-size=0x1000
+# objdump: -w -h
+# target: *-*-linux*
+# xfail: rx-*-*
+# FAILS on the RX because the linker has to set LMA == VMA for the
+# Renesas loader.
+
+.*: file format .*
+
+Sections:
+Idx +Name +Size +VMA +LMA +File off +Algn +Flags
+ 0 .sec0 +0+4 +0+2000 +0+2000 +0+1000 +.*
+ 1 .sec1 +0+4 +0+1000 +0+2004 +0+2000 +.*
+ 2 .sec2 +0+4 +0+4000 +0+603c +0+4000 +.*
+ 3 .sec3 +0+4 +0+5000 +0+5000 +0+3000 +.*
+ 4 .sec4 +0+4 +0+2008 +0+2008 +0+2008 +.*
+ 5 .sec5 +0+4 +0+200c +0+200c +0+200c +.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-at5.s b/binutils-2.21/ld/testsuite/ld-scripts/rgn-at5.s
new file mode 100644
index 0000000..ce8576c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-at5.s
@@ -0,0 +1,14 @@
+ .section .sec0, "a"
+ .long 0
+
+ .section .sec1, "a"
+ .long 0x11
+
+ .section .sec2, "a"
+ .long 0x22
+
+ .section .sec3, "a"
+ .long 0x33
+
+ .section .sec4, "a"
+ .long 0x44
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-at5.t b/binutils-2.21/ld/testsuite/ld-scripts/rgn-at5.t
new file mode 100644
index 0000000..3a35994
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-at5.t
@@ -0,0 +1,26 @@
+MEMORY
+{
+ region1 : ORIGIN = 0x1000, LENGTH = 0x1000 ,
+ region2 (r) : org = 0x2000, len = 300
+ region3 (wx) : o = 0x4000, l = 4
+ region4 (!r) : o = 0x6000 + 60, len = 0x30 * 0x6
+}
+
+SECTIONS
+{
+ .sec0 : { *(*.sec0) }
+
+ .sec1 ORIGIN (region1) : { *(*.sec1) } AT> region2
+
+ fred = ORIGIN (region1) + LENGTH (region1);
+
+ .sec2 : { *(*.sec2) } > region3 AT> region4
+
+ .sec3 0x5000 : { *(*.sec3) }
+
+ .sec4 : { *(*.sec4) } AT> region2
+
+ .sec5 : { LONG(0x5555) } > region2
+
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-over.exp b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over.exp
new file mode 100644
index 0000000..8192487
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over.exp
@@ -0,0 +1,54 @@
+# Test for proper diagnosis of overflowed memory regions.
+# Copyright 2007, 2008 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+if ![is_elf_format] {
+ return
+}
+
+load_lib ld-lib.exp
+
+set old_ldflags $LDFLAGS
+if { [istarget spu*-*-*] } {
+ set LDFLAGS "$LDFLAGS --no-overlays"
+}
+
+set test_list [lsort [glob -nocomplain $srcdir/$subdir/rgn-over*.d]]
+foreach test_file $test_list {
+ set test_name [file rootname $test_file]
+ set map_file "tmpdir/[file tail $test_name].map"
+ verbose $test_name
+ run_dump_test $test_name
+
+ if { ! [regexp ".*-ok.d" $test_file] } {
+ set testname "[file tail $test_name] (map check)"
+ if [file exists $map_file] {
+ # compare the map file to the expectations in the .d file
+ # (run_dump_test can't do that).
+ if [regexp_diff $map_file $test_file] {
+ fail $testname
+ } else {
+ pass $testname
+ }
+ } else {
+ untested $testname
+ }
+ }
+}
+set LDFLAGS $old_ldflags
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-over.s b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over.s
new file mode 100644
index 0000000..f651cce
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over.s
@@ -0,0 +1,9 @@
+ .section .txt, "ax", "progbits"
+ .4byte 0x11223344
+ .4byte 0x55667788
+ .4byte 0x99aabbcc
+
+ .section .dat, "aw", "progbits"
+ .4byte 0x01020304
+ .4byte 0x05060708
+ .4byte 0x090a0b0c
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-over1.d b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over1.d
new file mode 100644
index 0000000..54892be
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over1.d
@@ -0,0 +1,35 @@
+# name: rgn-over1
+# source: rgn-over.s
+# ld: -T rgn-over1.t -Map tmpdir/rgn-over1.map
+# error: \A[^ \n]*?ld[^:\n]*?: [^\n]*?section \`.text' will not fit in region `r1'\n[^ \n]*?ld[^:\n]*?: region `r1' overflowed by 16 bytes\Z
+
+Discarded input sections
+#...
+Memory\s+Configuration
+
+Name\s+Origin\s+Length\s+Attributes
+bss\s+0x0+0000\s+0x0+0000\s+xrw
+r1\s+0x0+1000\s+0x0+0008\s+xrw
+\*default\*\s+0x0+0000\s+0xf+ffff
+
+Linker\s+script\s+and\s+memory\s+map
+
+\s*0x0+1000\s+_start\s+=\s+0x1000
+
+\s*\.bss\s+0x0+0000\s+0x0
+\s*\*\(\.bss\)
+\s*\.bss\s+0x0+0000\s+0x0\s+.*?
+
+\s*\.text\s+0x0+1000\s+0xc
+\s*\*\(\.txt\)
+\s*\.txt\s+0x0+1000\s+0xc\s+.*?
+
+\s*\.data\s+0x0+100c\s+0xc
+\s*\*\(\.dat\)
+\s*\.dat\s+0x0+100c\s+0xc\s+.*?
+
+/DISCARD/
+ \*\(\*\)
+LOAD\s+.*?
+OUTPUT\(.*?\)
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-over1.t b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over1.t
new file mode 100644
index 0000000..9c14f70
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over1.t
@@ -0,0 +1,13 @@
+/* Memory region overflow tests: one region, first output sect doesn't fit. */
+
+MEMORY {
+ bss (rwx) : ORIGIN = 0, LENGTH = 0
+ r1 (rwx) : ORIGIN = 0x1000, LENGTH = 8
+}
+_start = 0x1000;
+SECTIONS {
+ .bss : { *(.bss) } > bss
+ .text : { *(.txt) } > r1
+ .data : { *(.dat) } > r1
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-over2.d b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over2.d
new file mode 100644
index 0000000..1a5afea
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over2.d
@@ -0,0 +1,35 @@
+# name: rgn-over2
+# source: rgn-over.s
+# ld: -T rgn-over2.t -Map tmpdir/rgn-over2.map
+# error: \A[^ \n]*?ld[^:\n]*?: [^\n]*?section `\.data' will not fit in region `r1'\n[^ \n]*?ld[^:\n]*?: region `r1' overflowed by 4 bytes\Z
+
+Discarded input sections
+#...
+Memory\s+Configuration
+
+Name\s+Origin\s+Length\s+Attributes
+bss\s+0x0+0000\s+0x0+0000\s+xrw
+r1\s+0x0+1000\s+0x0+0014\s+xrw
+\*default\*\s+0x0+0000\s+0xf+ffff
+
+Linker\s+script\s+and\s+memory\s+map
+
+\s*0x0+1000\s+_start\s+=\s+0x1000
+
+\s*\.bss\s+0x0+0000\s+0x0
+\s*\*\(\.bss\)
+\s*\.bss\s+0x0+0000\s+0x0\s+.*?
+
+\s*\.text\s+0x0+1000\s+0xc
+\s*\*\(\.txt\)
+\s*\.txt\s+0x0+1000\s+0xc\s+.*?
+
+\s*\.data\s+0x0+100c\s+0xc
+\s*\*\(\.dat\)
+\s*\.dat\s+0x0+100c\s+0xc\s+.*?
+
+/DISCARD/
+ \*\(\*\)
+LOAD\s+.*?
+OUTPUT\(.*?\)
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-over2.t b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over2.t
new file mode 100644
index 0000000..b38a9c1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over2.t
@@ -0,0 +1,14 @@
+/* Memory region overflow tests: one region, first output sect fits,
+ second doesn't. */
+
+MEMORY {
+ bss (rwx) : ORIGIN = 0, LENGTH = 0
+ r1 (rwx) : ORIGIN = 0x1000, LENGTH = 20
+}
+_start = 0x1000;
+SECTIONS {
+ .bss : { *(.bss) } > bss
+ .text : { *(.txt) } > r1
+ .data : { *(.dat) } > r1
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-over3.d b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over3.d
new file mode 100644
index 0000000..76fa7c5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over3.d
@@ -0,0 +1,36 @@
+# name: rgn-over3
+# source: rgn-over.s
+# ld: -T rgn-over3.t -Map tmpdir/rgn-over3.map
+# error: \A[^ \n]*?ld[^:\n]*?: [^\n]*?section `\.text' will not fit in region `r1'\n[^ \n]*?ld[^:\n]*?: [^\n]*?section `\.data' will not fit in region `r2'\n[^ \n]*?ld[^:\n]*?: region `r1' overflowed by 4 bytes\n[^ \n]*?ld[^:\n]*?: region `r2' overflowed by 4 bytes\Z
+
+Discarded input sections
+#...
+Memory\s+Configuration
+
+Name\s+Origin\s+Length\s+Attributes
+bss\s+0x0+0000\s+0x0+0000\s+xrw
+r1\s+0x0+1000\s+0x0+0008\s+xrw
+r2\s+0x0+2000\s+0x0+0008\s+xrw
+\*default\*\s+0x0+0000\s+0xf+ffff
+
+Linker\s+script\s+and\s+memory\s+map
+
+\s*0x0+1000\s+_start\s+=\s+0x1000
+
+\s*\.bss\s+0x0+0000\s+0x0
+\s*\*\(\.bss\)
+\s*\.bss\s+0x0+0000\s+0x0\s+.*?
+
+\s*\.text\s+0x0+1000\s+0xc
+\s*\*\(\.txt\)
+\s*\.txt\s+0x0+1000\s+0xc\s+.*?
+
+\s*\.data\s+0x0+2000\s+0xc
+\s*\*\(\.dat\)
+\s*\.dat\s+0x0+2000\s+0xc\s+.*?
+
+/DISCARD/
+ \*\(\*\)
+LOAD\s+.*?
+OUTPUT\(.*?\)
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-over3.t b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over3.t
new file mode 100644
index 0000000..5341fb5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over3.t
@@ -0,0 +1,15 @@
+/* Memory region overflow tests: two regions, each too small for the single
+ section placed there. */
+
+MEMORY {
+ bss (rwx) : ORIGIN = 0, LENGTH = 0
+ r1 (rwx) : ORIGIN = 0x1000, LENGTH = 8
+ r2 (rwx) : ORIGIN = 0x2000, LENGTH = 8
+}
+_start = 0x1000;
+SECTIONS {
+ .bss : { *(.bss) } > bss
+ .text : { *(.txt) } > r1
+ .data : { *(.dat) } > r2
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-over4.d b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over4.d
new file mode 100644
index 0000000..1087aec
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over4.d
@@ -0,0 +1,36 @@
+# name: rgn-over4
+# source: rgn-over.s
+# ld: -T rgn-over4.t -Map tmpdir/rgn-over4.map
+# error: \A[^ \n]*?ld[^:\n]*?: [^:\n]*?section `\.text' will not fit in region `r1'\n[^ \n]*?ld[^:\n]*?: region `r1' overflowed by 16 bytes\Z
+
+Discarded input sections
+#...
+Memory\s+Configuration
+
+Name\s+Origin\s+Length\s+Attributes
+bss\s+0x0+0000\s+0x0+0000\s+xrw
+r1\s+0x0+1000\s+0x0+0008\s+xrw
+v1\s+0x0+2000\s+0x0+0018\s+xrw
+\*default\*\s+0x0+0000\s+0xf+ffff
+
+Linker\s+script\s+and\s+memory\s+map
+
+\s*0x0+1000\s+_start\s+=\s+0x1000
+
+\s*\.bss\s+0x0+0000\s+0x0
+\s*\*\(\.bss\)
+\s*\.bss\s+0x0+0000\s+0x0\s+.*?
+
+\s*\.text\s+0x0+1000\s+0xc\s+load\s+address\s+0x0+2000
+\s*\*\(\.txt\)
+\s*\.txt\s+0x0+1000\s+0xc\s+.*?
+
+\s*\.data\s+0x0+100c\s+0xc\s+load\s+address\s+0x0+200c
+\s*\*\(\.dat\)
+\s*\.dat\s+0x0+100c\s+0xc\s+.*?
+
+/DISCARD/
+ \*\(\*\)
+LOAD\s+.*?
+OUTPUT\(.*?\)
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-over4.t b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over4.t
new file mode 100644
index 0000000..d2463e9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over4.t
@@ -0,0 +1,14 @@
+/* Memory region overflow tests: overflow VMA but not LMA. */
+
+MEMORY {
+ bss (rwx) : ORIGIN = 0, LENGTH = 0
+ r1 (rwx) : ORIGIN = 0x1000, LENGTH = 8
+ v1 (rwx) : ORIGIN = 0x2000, LENGTH = 24
+}
+_start = 0x1000;
+SECTIONS {
+ .bss : { *(.bss) } > bss
+ .text : { *(.txt) } > r1 AT> v1
+ .data : { *(.dat) } > r1 AT> v1
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-over5.d b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over5.d
new file mode 100644
index 0000000..734d9fe
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over5.d
@@ -0,0 +1,36 @@
+# name: rgn-over5
+# source: rgn-over.s
+# ld: -T rgn-over5.t -Map tmpdir/rgn-over5.map
+# error: \A[^ \n]*?ld[^:\n]*?: [^\n]*?section `\.text' will not fit in region `v1'\n[^ \n]*?ld[^:\n]*?: region `v1' overflowed by 16 bytes\Z
+
+Discarded input sections
+#...
+Memory\s+Configuration
+
+Name\s+Origin\s+Length\s+Attributes
+bss\s+0x0+0000\s+0x0+0000\s+xrw
+r1\s+0x0+1000\s+0x0+0018\s+xrw
+v1\s+0x0+2000\s+0x0+0008\s+xrw
+\*default\*\s+0x0+0000\s+0xf+ffff
+
+Linker\s+script\s+and\s+memory\s+map
+
+\s*0x0+1000\s+_start\s+=\s+0x1000
+
+\s*\.bss\s+0x0+0000\s+0x0
+\s*\*\(\.bss\)
+\s*\.bss\s+0x0+0000\s+0x0\s+.*?
+
+\s*\.text\s+0x0+1000\s+0xc\s+load\s+address\s+0x0+2000
+\s*\*\(\.txt\)
+\s*\.txt\s+0x0+1000\s+0xc\s+.*?
+
+\s*\.data\s+0x0+100c\s+0xc\s+load\s+address\s+0x0+200c
+\s*\*\(\.dat\)
+\s*\.dat\s+0x0+100c\s+0xc\s+.*?
+
+/DISCARD/
+ \*\(\*\)
+LOAD\s+.*?
+OUTPUT\(.*?\)
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-over5.t b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over5.t
new file mode 100644
index 0000000..2b0ae68
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over5.t
@@ -0,0 +1,14 @@
+/* Memory region overflow tests: overflow LMA but not VMA. */
+
+MEMORY {
+ bss (rwx) : ORIGIN = 0, LENGTH = 0
+ r1 (rwx) : ORIGIN = 0x1000, LENGTH = 24
+ v1 (rwx) : ORIGIN = 0x2000, LENGTH = 8
+}
+_start = 0x1000;
+SECTIONS {
+ .bss : { *(.bss) } > bss
+ .text : { *(.txt) } > r1 AT> v1
+ .data : { *(.dat) } > r1 AT> v1
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-over6.d b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over6.d
new file mode 100644
index 0000000..00b41d0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over6.d
@@ -0,0 +1,36 @@
+# name: rgn-over6
+# source: rgn-over.s
+# ld: -T rgn-over6.t -Map tmpdir/rgn-over6.map
+# error: \A[^ \n]*?ld[^:\n]*?: [^\n]*?section `\.text' will not fit in region `r1'\n[^ \n]*?ld[^:\n]*?: [^\n]*?section `\.text' will not fit in region `v1'\n[^ \n]*?ld[^:\n]*?: region `r1' overflowed by 16 bytes\n[^ \n]*?ld[^:\n]*?: region `v1' overflowed by 16 bytes\Z
+
+Discarded input sections
+#...
+Memory\s+Configuration
+
+Name\s+Origin\s+Length\s+Attributes
+bss\s+0x0+0000\s+0x0+0000\s+xrw
+r1\s+0x0+1000\s+0x0+0008\s+xrw
+v1\s+0x0+2000\s+0x0+0008\s+xrw
+\*default\*\s+0x0+0000\s+0xf+ffff
+
+Linker\s+script\s+and\s+memory\s+map
+
+\s*0x0+1000\s+_start\s+=\s+0x1000
+
+\s*\.bss\s+0x0+0000\s+0x0
+\s*\*\(\.bss\)
+\s*\.bss\s+0x0+0000\s+0x0\s+.*?
+
+\s*\.text\s+0x0+1000\s+0xc\s+load\s+address\s+0x0+2000
+\s*\*\(\.txt\)
+\s*\.txt\s+0x0+1000\s+0xc\s+.*?
+
+\s*\.data\s+0x0+100c\s+0xc\s+load\s+address\s+0x0+200c
+\s*\*\(\.dat\)
+\s*\.dat\s+0x0+100c\s+0xc\s+.*?
+
+/DISCARD/
+ \*\(\*\)
+LOAD\s+.*?
+OUTPUT\(.*?\)
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-over6.t b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over6.t
new file mode 100644
index 0000000..b78d184
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over6.t
@@ -0,0 +1,14 @@
+/* Memory region overflow tests: overflow LMA and VMA. */
+
+MEMORY {
+ bss (rwx) : ORIGIN = 0, LENGTH = 0
+ r1 (rwx) : ORIGIN = 0x1000, LENGTH = 8
+ v1 (rwx) : ORIGIN = 0x2000, LENGTH = 8
+}
+_start = 0x1000;
+SECTIONS {
+ .bss : { *(.bss) } > bss
+ .text : { *(.txt) } > r1 AT> v1
+ .data : { *(.dat) } > r1 AT> v1
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-over7.d b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over7.d
new file mode 100644
index 0000000..50bd6af
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over7.d
@@ -0,0 +1,36 @@
+# name: rgn-over7
+# source: rgn-over.s
+# ld: -T rgn-over7.t -Map tmpdir/rgn-over7.map
+# error: \A[^ \n]*?ld[^:\n]*?: [^\n]*?section `\.text' will not fit in region `r1'\n[^ \n]*?ld[^:\n]*?: section \.data loaded at \[0+1008,0+1013\] overlaps section \.text loaded at \[0+1000,0+100b\]\n[^ \n]*?ld[^:\n]*?: region `r1' overflowed by 4 bytes\Z
+
+Discarded input sections
+#...
+Memory\s+Configuration
+
+Name\s+Origin\s+Length\s+Attributes
+bss\s+0x0+0000\s+0x0+0000\s+xrw
+r1\s+0x0+1000\s+0x0+0008\s+xrw
+r2\s+0x0+1008\s+0x0+000c\s+xrw
+\*default\*\s+0x0+0000\s+0xf+ffff
+
+Linker\s+script\s+and\s+memory\s+map
+
+\s*0x0+1000\s+_start\s+=\s+0x1000
+
+\s*\.bss\s+0x0+0000\s+0x0
+\s*\*\(\.bss\)
+\s*\.bss\s+0x0+0000\s+0x0\s+.*?
+
+\s*\.text\s+0x0+1000\s+0xc
+\s*\*\(\.txt\)
+\s*\.txt\s+0x0+1000\s+0xc\s+.*?
+
+\s*\.data\s+0x0+1008\s+0xc
+\s*\*\(\.dat\)
+\s*\.dat\s+0x0+1008\s+0xc\s+.*?
+
+/DISCARD/
+ \*\(\*\)
+LOAD\s+.*?
+OUTPUT\(.*?\)
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-over7.t b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over7.t
new file mode 100644
index 0000000..4288e84
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over7.t
@@ -0,0 +1,14 @@
+/* Memory region overflow tests: overflow r1 plus text/data collision. */
+
+MEMORY {
+ bss (rwx) : ORIGIN = 0, LENGTH = 0
+ r1 (rwx) : ORIGIN = 0x1000, LENGTH = 8
+ r2 (rwx) : ORIGIN = 0x1008, LENGTH = 12
+}
+_start = 0x1000;
+SECTIONS {
+ .bss : { *(.bss) } > bss
+ .text : { *(.txt) } > r1
+ .data : { *(.dat) } > r2
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-over8-ok.d b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over8-ok.d
new file mode 100644
index 0000000..300e947
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over8-ok.d
@@ -0,0 +1,15 @@
+# name: rgn-over8
+# source: rgn-over8.s
+# ld: -T rgn-over8.t
+# objdump: -w -h
+# xfail: rx-*-*
+# FAILS on the RX because the linker has to set LMA == VMA for the
+# Renesas loader.
+
+.*: file format .*
+
+Sections:
+Idx +Name +Size +VMA +LMA +File off +Algn +Flags
+ 0 .text 0+0000400 0+0000000 0+0000000 [0-9a-f]+ 2\*\*[0-9]+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 1 .data 0+0000400 0+0001000 0+0000400 [0-9a-f]+ 2\*\*[0-9]+ CONTENTS, ALLOC, LOAD, DATA
+ 2 .bss 0+0000400 0+0001400 0+0000800 [0-9a-f]+ 2\*\*[0-9]+ ALLOC
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-over8.s b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over8.s
new file mode 100644
index 0000000..0077a4f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over8.s
@@ -0,0 +1,7 @@
+ .text
+ .globl main
+ .zero 1024
+ .data
+ .zero 1024
+ .section .bss, "aw", "nobits"
+ .zero 1024
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/rgn-over8.t b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over8.t
new file mode 100644
index 0000000..7623b19
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/rgn-over8.t
@@ -0,0 +1,13 @@
+/* Memory region overflow tests: bss to LMA doesn't cause overflow. */
+
+MEMORY {
+ rom (rwx) : ORIGIN = 0, LENGTH = 2048
+ ram (rwx) : ORIGIN = 0x1000, LENGTH = 2048
+}
+_start = 0x0;
+SECTIONS {
+ .text : { *(.text) } >rom AT>rom
+ .data : { *(.data) } >ram AT>rom
+ .bss : { *(.bss) } >ram AT>rom
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/script.exp b/binutils-2.21/ld/testsuite/ld-scripts/script.exp
new file mode 100644
index 0000000..2e69922
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/script.exp
@@ -0,0 +1,138 @@
+# Test basic linker script functionality
+# By Ian Lance Taylor, Cygnus Support
+# Copyright 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2009, 2010
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+set testname "script"
+
+if ![ld_assemble $as $srcdir/$subdir/script.s tmpdir/script.o] {
+ unresolved $testname
+ return
+}
+
+proc check_script { } {
+ global nm
+ global testname
+ global nm_output
+
+ if ![ld_nm $nm "" tmpdir/script] {
+ unresolved $testname
+ return
+ }
+
+ if {![info exists nm_output(text_start)] \
+ || ![info exists nm_output(text_end)] \
+ || ![info exists nm_output(data_start)] \
+ || ![info exists nm_output(data_end)]} {
+ send_log "bad output from nm\n"
+ verbose "bad output from nm"
+ fail $testname
+ return
+ }
+
+ set passes 1
+ set text_end 0x104
+ set data_end 0x1004
+
+ if [istarget *c4x*-*-*] then {
+ set text_end 0x101
+ set data_end 0x1001
+ }
+
+ if [istarget *c54x*-*-*] then {
+ set text_end 0x102
+ set data_end 0x1002
+ }
+
+ if {$nm_output(text_start) != 0x100} {
+ send_log "text_start == $nm_output(text_start)\n"
+ verbose "text_start == $nm_output(text_start)"
+ set passes 0
+ }
+
+ if {$nm_output(text_end) < $text_end \
+ || $nm_output(text_end) > 0x110} {
+ send_log "text_end == $nm_output(text_end)\n"
+ verbose "text_end == $nm_output(text_end)"
+ set passes 0
+ }
+
+ if {$nm_output(data_start) != 0x1000} {
+ send_log "data_start == $nm_output(data_start)\n"
+ verbose "data_start == $nm_output(data_start)"
+ set passes 0
+ }
+
+ if {$nm_output(data_end) < $data_end \
+ || $nm_output(data_end) > 0x1010} {
+ send_log "data_end == $nm_output(data_end)\n"
+ verbose "data_end == $nm_output(data_end)"
+ set passes 0
+ }
+
+ if { $passes } {
+ pass $testname
+ } else {
+ fail $testname
+ }
+}
+
+# PE targets need to set the image base to 0 to avoid complications from nm.
+set flags ""
+if {[istarget "*-*-pe*"] \
+ || [istarget "*-*-cygwin*"] \
+ || [istarget "*-*-mingw*"] \
+ || [istarget "*-*-winnt*"] \
+ || [istarget "*-*-nt"] \
+ || [istarget "*-*-interix*"] } then {
+ set flags "--image-base 0"
+}
+
+if ![ld_simple_link $ld tmpdir/script "$flags -T $srcdir/$subdir/script.t tmpdir/script.o"] {
+ fail $testname
+} else {
+ check_script
+}
+
+set testname "MRI script"
+
+if ![ld_simple_link $ld tmpdir/script "$flags -c $srcdir/$subdir/scriptm.t"] {
+ fail $testname
+} else {
+ check_script
+}
+
+set testname "MEMORY"
+
+if ![ld_simple_link $ld tmpdir/script "$flags -T $srcdir/$subdir/memory.t tmpdir/script.o"] {
+ fail $testname
+} else {
+ check_script
+}
+
+set test_script_list [lsort [glob $srcdir/$subdir/region-alias-*.t]]
+
+foreach test_script $test_script_list {
+ if ![ld_simple_link $ld tmpdir/script "$flags -T $test_script tmpdir/script.o"] {
+ xfail "REGION_ALIAS: $test_script"
+ } else {
+ xpass "REGION_ALIAS: $test_script"
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/script.s b/binutils-2.21/ld/testsuite/ld-scripts/script.s
new file mode 100644
index 0000000..d7b65b0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/script.s
@@ -0,0 +1,8 @@
+ .text
+ .globl text_symbol
+text_symbol:
+ .long 1
+ .data
+ .globl data_symbol
+data_symbol:
+ .long 2
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/script.t b/binutils-2.21/ld/testsuite/ld-scripts/script.t
new file mode 100644
index 0000000..ee7a48a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/script.t
@@ -0,0 +1,16 @@
+SECTIONS
+{
+ .text 0x100 : {
+ text_start = .;
+ *(.text)
+ *(.pr)
+ text_end = .;
+ }
+ . = 0x1000;
+ .data : {
+ data_start = .;
+ *(.data)
+ *(.rw)
+ data_end = .;
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/scriptm.t b/binutils-2.21/ld/testsuite/ld-scripts/scriptm.t
new file mode 100644
index 0000000..57ccae1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/scriptm.t
@@ -0,0 +1,10 @@
+* MRI script
+sect .text = $100 ; .text start address
+sect .data = 1000h ; .data start address
+public text_start = $100
+public text_end = # continuation line
+ text_start + 4
+public data_start = 1000h
+public data_end = data_start + 4
+
+load tmpdir/script.o
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/section-match-1.d b/binutils-2.21/ld/testsuite/ld-scripts/section-match-1.d
new file mode 100644
index 0000000..c68dbb8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/section-match-1.d
@@ -0,0 +1,16 @@
+#source: section-match-1.s
+#ld: -T section-match-1.t
+#objdump: -s
+#notarget: *-*-osf* *-*-aix* *-*-pe *-*-*aout *-*-*oldld *-*-ecoff *-*-netbsd *-*-vms h8300-*-* tic30-*-*
+# This test uses arbitary section names, which are not support by some
+# file formts. Also these section names must be present in the
+# output, not translated into some other name, eg .text
+
+.*: file format .*
+
+#...
+Contents of section \.secA:
+ [0-9a-f]* (01)?0+(01)? .*
+Contents of section \.secC:
+ [0-9a-f]* (02)?0+(02)? .*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/section-match-1.s b/binutils-2.21/ld/testsuite/ld-scripts/section-match-1.s
new file mode 100644
index 0000000..3e32a88
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/section-match-1.s
@@ -0,0 +1,5 @@
+ .section .sec.foo
+ .word 1
+
+ .section .sec..foo
+ .word 2
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/section-match-1.t b/binutils-2.21/ld/testsuite/ld-scripts/section-match-1.t
new file mode 100644
index 0000000..155b3dc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/section-match-1.t
@@ -0,0 +1,16 @@
+SECTIONS
+{
+ /* .secA should collect all sections with a prefix of ".sec."
+ except for those with a prefix of ".sec..". */
+ .secA : { *(*.sec.[^.]*) }
+
+ /* .secB should be empty because .secA will have taken all of
+ the potential matches. */
+ .secB : { *(*.sec.[!.]*) }
+
+ /* .secC should match any sections with a ".sec.." prefix. */
+ .secC : { *(*.sec.*) }
+
+ /* Ignore anything else. */
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/section-match.exp b/binutils-2.21/ld/testsuite/ld-scripts/section-match.exp
new file mode 100644
index 0000000..bdca8cf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/section-match.exp
@@ -0,0 +1,22 @@
+# Expect script for section regular expressions tests
+# Copyright (C) 2010 Free Software Foundation
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+run_dump_test section-match-1 \ No newline at end of file
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/size-1.d b/binutils-2.21/ld/testsuite/ld-scripts/size-1.d
new file mode 100644
index 0000000..641fbca
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/size-1.d
@@ -0,0 +1,14 @@
+#source: size-1.s
+#ld: -T size-1.t
+#objdump: -s
+
+.*: file format .*
+
+#...
+Contents of section \.text:
+ [0-9a-f]* (01)?000000(01)? (02)?000000(02)? .*
+#...
+Contents of section \.data:
+ [0-9a-f]* (03)?000000(03)? (04)?000000(04)? (05)?000000(05)? 00000000 .*
+ [0-9a-f]* (20)?000000(20)? (18)?000000(18)? .*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/size-1.s b/binutils-2.21/ld/testsuite/ld-scripts/size-1.s
new file mode 100644
index 0000000..7f5a5fd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/size-1.s
@@ -0,0 +1,7 @@
+ .text
+ .long 1,2
+ .p2align 5
+
+ .data
+ .long 3,4,5
+ .p2align 4
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/size-1.t b/binutils-2.21/ld/testsuite/ld-scripts/size-1.t
new file mode 100644
index 0000000..bb48665
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/size-1.t
@@ -0,0 +1,10 @@
+SECTIONS
+{
+ . = 0x1000 + SIZEOF_HEADERS;
+ .text ALIGN (0x20) : { *(.text) }
+ .data 0x2000 : {
+ *(.data)
+ LONG (SIZEOF (.text))
+ LONG (SIZEOF (.data))
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/size-2.d b/binutils-2.21/ld/testsuite/ld-scripts/size-2.d
new file mode 100644
index 0000000..beb18e4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/size-2.d
@@ -0,0 +1,18 @@
+#source: size-2.s
+#ld: -T size-2.t
+#readelf: -l --wide
+#xfail: "hppa64-*-*" "v850-*-*"
+
+#...
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg +Align
+ +PHDR +0x[0-9a-f]+ 0x0+0000 0x0+0000 0x[0-9a-f]+ 0x[0-9a-f]+ R +0x[0-9a-f]+
+#...
+ +LOAD +0x[0-9a-f]+ 0x0+0100 0x0+0100 0x0+0030 0x0+0030 R E +0x[0-9a-f]+
+ +TLS +0x[0-9a-f]+ 0x0+0108 0x0+0108 0x0+0014 0x0+002c R +0x[0-9a-f]+
+
+ Section to Segment mapping:
+ +Segment Sections\.\.\.
+ +00 .*
+ +01.*\.text.*\.tdata.*
+ +02.*\.tdata.*
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/size-2.s b/binutils-2.21/ld/testsuite/ld-scripts/size-2.s
new file mode 100644
index 0000000..6b10250
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/size-2.s
@@ -0,0 +1,8 @@
+ .text
+ .long 1,2
+
+ .section .tdata
+ .long 6,7,8,9,10
+
+ .section .tbss
+ .long 0,0,0,0,0,0
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/size-2.t b/binutils-2.21/ld/testsuite/ld-scripts/size-2.t
new file mode 100644
index 0000000..e67b3fa
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/size-2.t
@@ -0,0 +1,21 @@
+PHDRS
+{
+ header PT_PHDR FILEHDR PHDRS ;
+
+ image PT_LOAD FLAGS (5);
+ tls PT_TLS FLAGS (4);
+
+}
+SECTIONS
+{
+ .text 0x100 : { *(.text) } :image
+ .tdata : { *(.tdata) } :image :tls
+ .tbss : { *(.tbss) } :image : tls
+ .map : {
+ LONG (SIZEOF (.text))
+ LONG (SIZEOF (.data))
+ LONG (SIZEOF (.bss))
+ LONG (SIZEOF (.tdata))
+ LONG (SIZEOF (.tbss))
+ } :image
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/size.exp b/binutils-2.21/ld/testsuite/ld-scripts/size.exp
new file mode 100644
index 0000000..1d59158
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/size.exp
@@ -0,0 +1,41 @@
+# Expect script for SIZEOF tests
+# Copyright (C) 2004, 2005, 2007 Free Software Foundation
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# AIX maps .text and .data to other sections.
+# a.out objdump displays the file header inside the text segment,
+# confusing run_dump_test.
+
+if {[istarget "rs6000-*-aix*"] || [is_aout_format]} {
+ unsupported size-1
+ unsupported size-2
+ return
+}
+
+run_dump_test size-1
+
+# size-2 only works on ELF targets.
+# MIPS inserts a REGINFO PHDR
+if {![is_elf_format] || [istarget "mips*-*-*"]} {
+ unsupported size-2
+ return
+}
+
+run_dump_test size-2
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sizeof.exp b/binutils-2.21/ld/testsuite/ld-scripts/sizeof.exp
new file mode 100644
index 0000000..ed5d191
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sizeof.exp
@@ -0,0 +1,74 @@
+# Test SIZEOF in a linker script.
+# By Ian Lance Taylor, Cygnus Support
+# Based on a bug report from anders.blomdell@control.lth.se.
+# Copyright 2001, 2005, 2007
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+set testname "SIZEOF"
+
+if ![ld_assemble $as $srcdir/$subdir/sizeof.s tmpdir/sizeof.o] {
+ unresolved $testname
+ return
+}
+
+if ![ld_simple_link $ld tmpdir/sizeof "-T $srcdir/$subdir/sizeof.t tmpdir/sizeof.o"] {
+ fail $testname
+ return
+}
+
+if ![ld_nm $nm "" tmpdir/sizeof] {
+ unresolved $testname
+ return
+}
+
+if {![info exists nm_output(text_start)] \
+ || ![info exists nm_output(text_end)] \
+ || ![info exists nm_output(data_start)] \
+ || ![info exists nm_output(data_end)] \
+ || ![info exists nm_output(sizeof_text)] \
+ || ![info exists nm_output(sizeof_data)]} {
+ send_log "bad output from nm\n"
+ verbose "bad output from nm"
+ fail $testname
+ return
+}
+
+if {$nm_output(text_end) - $nm_output(text_start) != $nm_output(sizeof_text)} {
+ send_log "text_end - text_start != sizeof_text\n"
+ verbose "text_end - text_start != sizeof_text"
+ fail $testname
+ return
+}
+
+if {$nm_output(data_end) - $nm_output(data_start) != $nm_output(sizeof_data)} {
+ send_log "data_end - data_start != sizeof_data\n"
+ verbose "data_end - data_start != sizeof_data"
+ fail $testname
+ return
+}
+
+if {$nm_output(sizeof_text) != $nm_output(sizeof_data)} {
+ send_log "sizeof_text != sizeof_data\n"
+ verbose "sizeof_text != sizeof_data"
+ fail $testname
+ return
+}
+
+pass $testname
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sizeof.s b/binutils-2.21/ld/testsuite/ld-scripts/sizeof.s
new file mode 100644
index 0000000..e221ca3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sizeof.s
@@ -0,0 +1 @@
+ .space 16
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sizeof.t b/binutils-2.21/ld/testsuite/ld-scripts/sizeof.t
new file mode 100644
index 0000000..6244a37
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sizeof.t
@@ -0,0 +1,17 @@
+SECTIONS {
+ .text :
+ {
+ text_start = .;
+ tmpdir/sizeof.o
+ text_end = .;
+ }
+ .data :
+ {
+ data_start = .;
+ . = . + SIZEOF(.text);
+ data_end = .;
+ }
+}
+
+sizeof_text = SIZEOF(.text);
+sizeof_data = SIZEOF(.data);
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort.exp b/binutils-2.21/ld/testsuite/ld-scripts/sort.exp
new file mode 100644
index 0000000..47950a7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort.exp
@@ -0,0 +1,40 @@
+# Test SORT_BY_NAME/SORT_BY_ALIGNMENT/SORT in a linker script.
+# By H.J. Lu <hongjiu.lu@intel.com>
+# Copyright 2004, 2005, 2007
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+# FIXME: The expected outputs are correct only for ELF.
+if ![is_elf_format] {
+ return
+}
+
+# The h8300 port issues a warning message for
+# new sections created without atrributes.
+if [istarget "h8300-*-*"] {
+ return
+}
+
+load_lib ld-lib.exp
+
+set sort_test_list [lsort [glob -nocomplain $srcdir/$subdir/sort*.d]]
+for { set i 0 } { $i < [llength $sort_test_list] } { incr i } {
+ verbose [file rootname [lindex $sort_test_list $i]]
+ run_dump_test [file rootname [lindex $sort_test_list $i]]
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort.t b/binutils-2.21/ld/testsuite/ld-scripts/sort.t
new file mode 100644
index 0000000..c53481f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort.t
@@ -0,0 +1,5 @@
+SECTIONS
+{
+ .text : {*(.text .text.*)}
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a-1.d b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a-1.d
new file mode 100644
index 0000000..325193c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a-1.d
@@ -0,0 +1,14 @@
+#source: sort_b_a-1.s
+#ld: -T sort.t --sort-section alignment
+#name: --sort-section alignment
+#nm: -n
+
+#...
+0[0-9a-f]* t text3
+#...
+0[0-9a-f]* t text1
+#...
+0[0-9a-f]* t text
+#...
+0[0-9a-f]* t text2
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a-1.s b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a-1.s
new file mode 100644
index 0000000..87d3613
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a-1.s
@@ -0,0 +1,16 @@
+ .section .text.2
+ .p2align 3
+text2:
+ .long 0
+ .section .text.3
+ .p2align 6
+text3:
+ .long 0
+ .section .text.1
+ .p2align 5
+text1:
+ .long 0
+ .text
+text:
+ .p2align 4
+ .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a.d b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a.d
new file mode 100644
index 0000000..0f55808
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a.d
@@ -0,0 +1,14 @@
+#source: sort_b_a.s
+#ld: -T sort_b_a.t
+#name: SORT_BY_ALIGNMENT
+#nm: -n
+
+#...
+0[0-9a-f]* t text3
+#...
+0[0-9a-f]* t text1
+#...
+0[0-9a-f]* t text
+#...
+0[0-9a-f]* t text2
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a.s b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a.s
new file mode 100644
index 0000000..7b3851f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a.s
@@ -0,0 +1,16 @@
+ .section .text2
+ .p2align 3
+text2:
+ .long 0
+ .section .text3
+ .p2align 6
+text3:
+ .long 0
+ .section .text1
+ .p2align 5
+text1:
+ .long 0
+ .text
+text:
+ .p2align 4
+ .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a.t b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a.t
new file mode 100644
index 0000000..cbfd3c3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a.t
@@ -0,0 +1,5 @@
+SECTIONS
+{
+ .text : {*(SORT_BY_ALIGNMENT(.text*))}
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_a-1.d b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_a-1.d
new file mode 100644
index 0000000..930f748
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_a-1.d
@@ -0,0 +1,23 @@
+#source: sort_n_a-a.s
+#source: sort_n_a-b.s
+#ld: -T sort_b_a_a.t
+#name: SORT_BY_ALIGNMENT(SORT_BY_ALIGNMENT())
+#nm: -n
+
+#...
+0[0-9a-f]* t text3b
+#...
+0[0-9a-f]* t text3a
+#...
+0[0-9a-f]* t text1a
+#...
+0[0-9a-f]* t text1b
+#...
+0[0-9a-f]* t texta
+#...
+0[0-9a-f]* t textb
+#...
+0[0-9a-f]* t text2a
+#...
+0[0-9a-f]* t text2b
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_a-2.d b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_a-2.d
new file mode 100644
index 0000000..3e7d158
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_a-2.d
@@ -0,0 +1,23 @@
+#source: sort_n_a-a.s
+#source: sort_n_a-b.s
+#ld: -T sort_b_a_a.t --sort-section alignment
+#name: SORT_BY_ALIGNMENT(SORT_BY_ALIGNMENT()) --sort-section alignment
+#nm: -n
+
+#...
+0[0-9a-f]* t text3b
+#...
+0[0-9a-f]* t text3a
+#...
+0[0-9a-f]* t text1a
+#...
+0[0-9a-f]* t text1b
+#...
+0[0-9a-f]* t texta
+#...
+0[0-9a-f]* t textb
+#...
+0[0-9a-f]* t text2a
+#...
+0[0-9a-f]* t text2b
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_a-3.d b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_a-3.d
new file mode 100644
index 0000000..b1b0600
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_a-3.d
@@ -0,0 +1,23 @@
+#source: sort_n_a-a.s
+#source: sort_n_a-b.s
+#ld: -T sort_b_a_a.t --sort-section name
+#name: SORT_BY_ALIGNMENT(SORT_BY_ALIGNMENT()) --sort-section name
+#nm: -n
+
+#...
+0[0-9a-f]* t text3b
+#...
+0[0-9a-f]* t text1a
+#...
+0[0-9a-f]* t text1b
+#...
+0[0-9a-f]* t text3a
+#...
+0[0-9a-f]* t texta
+#...
+0[0-9a-f]* t textb
+#...
+0[0-9a-f]* t text2a
+#...
+0[0-9a-f]* t text2b
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_a.t b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_a.t
new file mode 100644
index 0000000..359cdff
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_a.t
@@ -0,0 +1,5 @@
+SECTIONS
+{
+ .text : {*(SORT_BY_ALIGNMENT(SORT_BY_ALIGNMENT(.text*)))}
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_n-1.d b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_n-1.d
new file mode 100644
index 0000000..dd5c613
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_n-1.d
@@ -0,0 +1,23 @@
+#source: sort_n_a-a.s
+#source: sort_n_a-b.s
+#ld: -T sort_b_a_n.t
+#name: SORT_BY_ALIGNMENT(SORT_BY_NAME())
+#nm: -n
+
+#...
+0[0-9a-f]* t text3b
+#...
+0[0-9a-f]* t text1a
+#...
+0[0-9a-f]* t text1b
+#...
+0[0-9a-f]* t text3a
+#...
+0[0-9a-f]* t texta
+#...
+0[0-9a-f]* t textb
+#...
+0[0-9a-f]* t text2a
+#...
+0[0-9a-f]* t text2b
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_n-2.d b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_n-2.d
new file mode 100644
index 0000000..f87ddd5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_n-2.d
@@ -0,0 +1,23 @@
+#source: sort_n_a-a.s
+#source: sort_n_a-b.s
+#ld: -T sort_b_a_n.t --sort-section name
+#name: SORT_BY_ALIGNMENT(SORT_BY_NAME()) --sort-section name
+#nm: -n
+
+#...
+0[0-9a-f]* t text3b
+#...
+0[0-9a-f]* t text1a
+#...
+0[0-9a-f]* t text1b
+#...
+0[0-9a-f]* t text3a
+#...
+0[0-9a-f]* t texta
+#...
+0[0-9a-f]* t textb
+#...
+0[0-9a-f]* t text2a
+#...
+0[0-9a-f]* t text2b
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_n-3.d b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_n-3.d
new file mode 100644
index 0000000..bf7ee4e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_n-3.d
@@ -0,0 +1,23 @@
+#source: sort_n_a-a.s
+#source: sort_n_a-b.s
+#ld: -T sort_b_a_n.t --sort-section alignment
+#name: SORT_BY_ALIGNMENT(SORT_BY_NAME()) --sort-section alignment
+#nm: -n
+
+#...
+0[0-9a-f]* t text3b
+#...
+0[0-9a-f]* t text1a
+#...
+0[0-9a-f]* t text1b
+#...
+0[0-9a-f]* t text3a
+#...
+0[0-9a-f]* t texta
+#...
+0[0-9a-f]* t textb
+#...
+0[0-9a-f]* t text2a
+#...
+0[0-9a-f]* t text2b
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_n.t b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_n.t
new file mode 100644
index 0000000..04c3917
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_a_n.t
@@ -0,0 +1,5 @@
+SECTIONS
+{
+ .text : {*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.text*)))}
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n-1.d b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n-1.d
new file mode 100644
index 0000000..76d60b6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n-1.d
@@ -0,0 +1,14 @@
+#source: sort_b_n-1.s
+#ld: -T sort.t --sort-section name
+#name: --sort-section name
+#nm: -n
+
+#...
+0[0-9a-f]* t text
+#...
+0[0-9a-f]* t text1
+#...
+0[0-9a-f]* t text2
+#...
+0[0-9a-f]* t text3
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n-1.s b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n-1.s
new file mode 100644
index 0000000..5a49170
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n-1.s
@@ -0,0 +1,12 @@
+ .section .text.2
+text2:
+ .long 0
+ .section .text.3
+text3:
+ .long 0
+ .section .text.1
+text1:
+ .long 0
+ .text
+text:
+ .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n.d b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n.d
new file mode 100644
index 0000000..5ef07b2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n.d
@@ -0,0 +1,14 @@
+#source: sort_b_n.s
+#ld: -T sort_b_n.t
+#name: SORT_BY_NAME
+#nm: -n
+
+#...
+0[0-9a-f]* t text
+#...
+0[0-9a-f]* t text1
+#...
+0[0-9a-f]* t text2
+#...
+0[0-9a-f]* t text3
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n.s b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n.s
new file mode 100644
index 0000000..c99d75c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n.s
@@ -0,0 +1,12 @@
+ .section .text2
+text2:
+ .long 0
+ .section .text3
+text3:
+ .long 0
+ .section .text1
+text1:
+ .long 0
+ .text
+text:
+ .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n.t b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n.t
new file mode 100644
index 0000000..26c2b6e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n.t
@@ -0,0 +1,5 @@
+SECTIONS
+{
+ .text : {*(SORT_BY_NAME(.text*))}
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_a-1.d b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_a-1.d
new file mode 100644
index 0000000..22d6848
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_a-1.d
@@ -0,0 +1,23 @@
+#source: sort_n_a-a.s
+#source: sort_n_a-b.s
+#ld: -T sort_b_n_a.t
+#name: SORT_BY_NAME(SORT_BY_ALIGNMENT())
+#nm: -n
+
+#...
+0[0-9a-f]* t texta
+#...
+0[0-9a-f]* t textb
+#...
+0[0-9a-f]* t text1a
+#...
+0[0-9a-f]* t text1b
+#...
+0[0-9a-f]* t text2a
+#...
+0[0-9a-f]* t text2b
+#...
+0[0-9a-f]* t text3b
+#...
+0[0-9a-f]* t text3a
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_a-2.d b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_a-2.d
new file mode 100644
index 0000000..4c9d8fe
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_a-2.d
@@ -0,0 +1,23 @@
+#source: sort_n_a-a.s
+#source: sort_n_a-b.s
+#ld: -T sort_b_n_a.t --sort-section name
+#name: SORT_BY_NAME(SORT_BY_ALIGNMENT()) --sort-section alignment
+#nm: -n
+
+#...
+0[0-9a-f]* t texta
+#...
+0[0-9a-f]* t textb
+#...
+0[0-9a-f]* t text1a
+#...
+0[0-9a-f]* t text1b
+#...
+0[0-9a-f]* t text2a
+#...
+0[0-9a-f]* t text2b
+#...
+0[0-9a-f]* t text3b
+#...
+0[0-9a-f]* t text3a
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_a-3.d b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_a-3.d
new file mode 100644
index 0000000..6657046
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_a-3.d
@@ -0,0 +1,23 @@
+#source: sort_n_a-a.s
+#source: sort_n_a-b.s
+#ld: -T sort_b_n_a.t --sort-section alignment
+#name: SORT_BY_NAME(SORT_BY_ALIGNMENT()) --sort-section alignment
+#nm: -n
+
+#...
+0[0-9a-f]* t texta
+#...
+0[0-9a-f]* t textb
+#...
+0[0-9a-f]* t text1a
+#...
+0[0-9a-f]* t text1b
+#...
+0[0-9a-f]* t text2a
+#...
+0[0-9a-f]* t text2b
+#...
+0[0-9a-f]* t text3b
+#...
+0[0-9a-f]* t text3a
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_a.t b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_a.t
new file mode 100644
index 0000000..49cbdd3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_a.t
@@ -0,0 +1,5 @@
+SECTIONS
+{
+ .text : {*(SORT_BY_NAME(SORT_BY_ALIGNMENT(.text*)))}
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_n-1.d b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_n-1.d
new file mode 100644
index 0000000..b2b2dbe
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_n-1.d
@@ -0,0 +1,23 @@
+#source: sort_n_a-a.s
+#source: sort_n_a-b.s
+#ld: -T sort_b_n_n.t
+#name: SORT_BY_NAME(SORT_BY_NAME())
+#nm: -n
+
+#...
+0[0-9a-f]* t texta
+#...
+0[0-9a-f]* t textb
+#...
+0[0-9a-f]* t text1a
+#...
+0[0-9a-f]* t text1b
+#...
+0[0-9a-f]* t text2a
+#...
+0[0-9a-f]* t text2b
+#...
+0[0-9a-f]* t text3a
+#...
+0[0-9a-f]* t text3b
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_n-2.d b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_n-2.d
new file mode 100644
index 0000000..15b66e4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_n-2.d
@@ -0,0 +1,23 @@
+#source: sort_n_a-a.s
+#source: sort_n_a-b.s
+#ld: -T sort_b_n_n.t --sort-section name
+#name: SORT_BY_NAME(SORT_BY_NAME()) --sort-section name
+#nm: -n
+
+#...
+0[0-9a-f]* t texta
+#...
+0[0-9a-f]* t textb
+#...
+0[0-9a-f]* t text1a
+#...
+0[0-9a-f]* t text1b
+#...
+0[0-9a-f]* t text2a
+#...
+0[0-9a-f]* t text2b
+#...
+0[0-9a-f]* t text3a
+#...
+0[0-9a-f]* t text3b
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_n-3.d b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_n-3.d
new file mode 100644
index 0000000..b99f7e1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_n-3.d
@@ -0,0 +1,23 @@
+#source: sort_n_a-a.s
+#source: sort_n_a-b.s
+#ld: -T sort_b_n_n.t --sort-section alignment
+#name: SORT_BY_NAME(SORT_BY_NAME()) --sort-section alignment
+#nm: -n
+
+#...
+0[0-9a-f]* t texta
+#...
+0[0-9a-f]* t textb
+#...
+0[0-9a-f]* t text1a
+#...
+0[0-9a-f]* t text1b
+#...
+0[0-9a-f]* t text2a
+#...
+0[0-9a-f]* t text2b
+#...
+0[0-9a-f]* t text3b
+#...
+0[0-9a-f]* t text3a
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_n.t b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_n.t
new file mode 100644
index 0000000..b4eabfe
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_b_n_n.t
@@ -0,0 +1,5 @@
+SECTIONS
+{
+ .text : {*(SORT_BY_NAME(SORT_BY_NAME(.text*)))}
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_n_a-a.s b/binutils-2.21/ld/testsuite/ld-scripts/sort_n_a-a.s
new file mode 100644
index 0000000..77dfc35
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_n_a-a.s
@@ -0,0 +1,16 @@
+ .section .text2
+ .p2align 3
+text2a:
+ .long 0
+ .section .text3
+ .p2align 5
+text3a:
+ .long 0
+ .section .text1
+ .p2align 5
+text1a:
+ .long 0
+ .text
+texta:
+ .p2align 4
+ .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_n_a-b.s b/binutils-2.21/ld/testsuite/ld-scripts/sort_n_a-b.s
new file mode 100644
index 0000000..781ba4e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_n_a-b.s
@@ -0,0 +1,16 @@
+ .section .text2
+ .p2align 3
+text2b:
+ .long 0
+ .section .text3
+ .p2align 6
+text3b:
+ .long 0
+ .section .text1
+ .p2align 5
+text1b:
+ .long 0
+ .text
+textb:
+ .p2align 4
+ .long 0
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_no-1.d b/binutils-2.21/ld/testsuite/ld-scripts/sort_no-1.d
new file mode 100644
index 0000000..c5f5593
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_no-1.d
@@ -0,0 +1,14 @@
+#source: sort_b_n.s
+#ld: -T sort_no.t
+#name: no SORT_BY_NAME/SORT_BY_ALIGNMENT/SORT
+#nm: -n
+
+#...
+0[0-9a-f]* t text
+#...
+0[0-9a-f]* t text2
+#...
+0[0-9a-f]* t text3
+#...
+0[0-9a-f]* t text1
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_no-2.d b/binutils-2.21/ld/testsuite/ld-scripts/sort_no-2.d
new file mode 100644
index 0000000..e0943d5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_no-2.d
@@ -0,0 +1,14 @@
+#source: sort_b_a.s
+#ld: -T sort_no.t
+#name: no SORT_BY_NAME/SORT_BY_ALIGNMENT/SORT
+#nm: -n
+
+#...
+0[0-9a-f]* t text
+#...
+0[0-9a-f]* t text2
+#...
+0[0-9a-f]* t text3
+#...
+0[0-9a-f]* t text1
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/sort_no.t b/binutils-2.21/ld/testsuite/ld-scripts/sort_no.t
new file mode 100644
index 0000000..d797c79
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/sort_no.t
@@ -0,0 +1,5 @@
+SECTIONS
+{
+ .text : {*(.text*)}
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/weak.exp b/binutils-2.21/ld/testsuite/ld-scripts/weak.exp
new file mode 100644
index 0000000..d021df7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/weak.exp
@@ -0,0 +1,81 @@
+# Test weak symbols.
+# By Ian Lance Taylor, Cygnus Solutions.
+# Copyright 1999, 2000, 2002, 2004, 2005, 2006, 2007, 2009
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+set testname "weak symbols"
+
+# This test only works for ELF targets.
+# It ought to work for some a.out targets, but it doesn't.
+if {! [is_elf_format] && ! [is_pecoff_format]} {
+ unsupported $testname
+ return
+}
+
+# Weak symbols are broken for non-i386 PE targets.
+if {! [istarget i?86-*-*]} {
+ setup_xfail *-*-pe*
+ setup_xfail x86_64-*-pe*
+}
+
+# hppa64 and or32 are incredibly broken
+setup_xfail hppa64-*-* or32-*-*
+
+if {! [ld_assemble $as $srcdir/$subdir/weak1.s tmpdir/weak1.o]
+ || ! [ld_assemble $as $srcdir/$subdir/weak2.s tmpdir/weak2.o]} then {
+ # It's OK if .weak doesn't work on this target.
+ unresolved $testname
+ return
+}
+
+global LDFLAGS
+set saved_LDFLAGS "$LDFLAGS"
+if [istarget "x86_64-*-mingw*"] then {
+ set LDFLAGS "$LDFLAGS --image-base 0"
+}
+
+set weak_regexp_big \
+".*Contents of section .text:.*1000 00001008 0000200c 12121212 34343434.*Contents of section .data:.*2000 00001008 0000200c 56565656 78787878.*"
+
+set weak_regexp_little \
+".*Contents of section .text:.*1000 08100000 0c200000 12121212 34343434.*Contents of section .data:.*2000 08100000 0c200000 56565656 78787878.*"
+
+if {! [ld_simple_link $ld tmpdir/weak "$flags -T $srcdir/$subdir/weak.t tmpdir/weak1.o tmpdir/weak2.o"] } then {
+ fail $testname
+} else {
+ if {![is_remote host] && [which $objdump] == 0} then {
+ unresolved $testname
+ set LDFLAGS "$saved_LDFLAGS"
+ return
+ }
+
+ set exec_output [run_host_cmd "$objdump" "-s tmpdir/weak"]
+ set exec_output [prune_warnings $exec_output]
+ verbose -log $exec_output
+
+ if {[regexp $weak_regexp_big $exec_output] \
+ || [regexp $weak_regexp_little $exec_output] } then {
+ pass $testname
+ } else {
+ fail $testname
+ }
+}
+
+set LDFLAGS "$saved_LDFLAGS"
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/weak.t b/binutils-2.21/ld/testsuite/ld-scripts/weak.t
new file mode 100644
index 0000000..6cd013e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/weak.t
@@ -0,0 +1,12 @@
+SECTIONS
+{
+ .text 0x1000 : {
+ tmpdir/weak1.o(.data)
+ }
+ .data 0x2000 : {
+ tmpdir/weak2.o(.data)
+ }
+ /DISCARD/ : {
+ *(*)
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/weak1.s b/binutils-2.21/ld/testsuite/ld-scripts/weak1.s
new file mode 100644
index 0000000..26bffbd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/weak1.s
@@ -0,0 +1,11 @@
+ .data
+ .global foo1
+ .global sym1
+ .weak sym2
+foo1:
+ .long sym1
+ .long sym2
+sym1:
+ .long 0x12121212
+sym2:
+ .long 0x34343434
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/weak2.s b/binutils-2.21/ld/testsuite/ld-scripts/weak2.s
new file mode 100644
index 0000000..963b229
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-scripts/weak2.s
@@ -0,0 +1,11 @@
+ .data
+ .global foo2
+ .weak sym1
+ .global sym2
+foo2:
+ .long sym1
+ .long sym2
+sym1:
+ .long 0x56565656
+sym2:
+ .long 0x78787878
diff --git a/binutils-2.21/ld/testsuite/ld-selective/1.c b/binutils-2.21/ld/testsuite/ld-selective/1.c
new file mode 100644
index 0000000..1202367
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-selective/1.c
@@ -0,0 +1,12 @@
+/* _start should be the only thing left after GC. */
+
+void _start() __asm__("_start");
+void _start()
+{
+}
+
+void dropme1()
+{
+}
+
+int dropme2[102] = { 0 };
diff --git a/binutils-2.21/ld/testsuite/ld-selective/2.c b/binutils-2.21/ld/testsuite/ld-selective/2.c
new file mode 100644
index 0000000..7295887
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-selective/2.c
@@ -0,0 +1,19 @@
+/* Normally we should loose foo and keep _start and _init.
+ With -u foo, we should keep that as well. */
+
+void _start() __asm__("_start");
+void _start()
+{
+}
+
+void __attribute__((section(".init")))
+_init()
+{
+}
+
+int foo() __asm__("foo");
+int foo()
+{
+ static int x = 1;
+ return x++;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-selective/3.cc b/binutils-2.21/ld/testsuite/ld-selective/3.cc
new file mode 100644
index 0000000..c40bf35
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-selective/3.cc
@@ -0,0 +1,46 @@
+struct A
+{
+ virtual void foo();
+ virtual void bar();
+};
+
+void A::foo() { } // keep
+void A::bar() { } // lose
+
+struct B : public A
+{
+ virtual void foo();
+};
+
+void B::foo() { } // keep
+
+void _start() __asm__("_start"); // keep
+void start() __asm__("start"); // some toolchains use this name.
+
+A a; // keep
+B b;
+A *getme() { return &a; } // keep
+
+void _start()
+{
+ getme()->foo();
+#ifdef __GNUC__
+#if (__GNUC__ == 2 && __GNUC_MINOR__ < 96)
+// gcc-2.95.2 gets this test wrong, and loses B::foo().
+// Cheat. After all, we aren't trying to test the compiler here.
+ b.foo();
+#endif
+#endif
+}
+
+void start ()
+{
+ _start ();
+}
+
+// In addition, keep A's virtual table.
+
+// We'll wind up keeping `b' and thus B's virtual table because
+// `a' and `b' are both referenced from the constructor function.
+
+extern "C" void __main() { }
diff --git a/binutils-2.21/ld/testsuite/ld-selective/4.cc b/binutils-2.21/ld/testsuite/ld-selective/4.cc
new file mode 100644
index 0000000..f4fc21c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-selective/4.cc
@@ -0,0 +1,34 @@
+struct A
+{
+ virtual void foo();
+ virtual void bar();
+};
+
+void A::foo() { } // lose
+void A::bar() { } // keep
+
+struct B : public A
+{
+ virtual void foo();
+};
+
+void B::foo() { } // lose
+
+void _start() __asm__("_start"); // keep
+void start() __asm__("start"); // some toolchains use this name.
+
+A a; // keep
+B b;
+A *getme() { return &a; } // keep
+
+void _start()
+{
+ getme()->bar();
+}
+
+void start ()
+{
+ _start ();
+}
+
+extern "C" void __main() { }
diff --git a/binutils-2.21/ld/testsuite/ld-selective/5.cc b/binutils-2.21/ld/testsuite/ld-selective/5.cc
new file mode 100644
index 0000000..2c974d9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-selective/5.cc
@@ -0,0 +1,38 @@
+struct A
+{
+ virtual void foo();
+ virtual void bar();
+};
+
+void A::foo() { } // lose
+void A::bar() { } // keep
+
+struct B : public A
+{
+ virtual void foo();
+};
+
+void B::foo() { } // lose
+
+void _start() __asm__("_start"); // keep
+void start() __asm__("start"); // some toolchains use this name.
+
+A a; // keep
+B b;
+A *getme() { return &a; } // keep
+
+extern B* dropme2();
+void dropme1() { dropme2()->foo(); } // lose
+B *dropme2() { return &b; } // lose
+
+void _start()
+{
+ getme()->bar();
+}
+
+void start ()
+{
+ _start ();
+}
+
+extern "C" void __main() { }
diff --git a/binutils-2.21/ld/testsuite/ld-selective/keepdot.d b/binutils-2.21/ld/testsuite/ld-selective/keepdot.d
new file mode 100644
index 0000000..aadd5d4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-selective/keepdot.d
@@ -0,0 +1,9 @@
+#ld: --gc-sections -Bstatic -e _start -T keepdot.ld
+#name: Preserve default . = 0
+#objdump: -h
+
+# Check that GC:ing does not mess up the default value for dot.
+
+#...
+[ ]+.[ ]+\.myinit[ ]+0+[48][ ]+0+[ ]+0+ .*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-selective/keepdot.ld b/binutils-2.21/ld/testsuite/ld-selective/keepdot.ld
new file mode 100644
index 0000000..d8a2b38
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-selective/keepdot.ld
@@ -0,0 +1,5 @@
+SECTIONS
+{
+ .myinit : { KEEP (*(.myinit)) }
+ .mytext : { *(.mytext*) *(.text*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-selective/keepdot.s b/binutils-2.21/ld/testsuite/ld-selective/keepdot.s
new file mode 100644
index 0000000..42176e2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-selective/keepdot.s
@@ -0,0 +1,17 @@
+ .text
+ .stabs "int:t(0,1)=r(0,1);-2147483648;2147483647;",128,0,0,0
+ .stabs "char:t(0,2)=r(0,2);0;127;",128,0,0,0
+
+ .section .myinit,"ax"
+ .stabs "barxfoo:F(0,20)",36,0,2,_bar
+ .global _bar
+ .global _start
+_start:
+_bar:
+ .long 123
+
+ .section .mytext.baz,"ax"
+ .stabs "baz:F(0,20)",36,0,6,_baz
+ .global _baz
+_baz:
+ .long 456
diff --git a/binutils-2.21/ld/testsuite/ld-selective/keepdot0.d b/binutils-2.21/ld/testsuite/ld-selective/keepdot0.d
new file mode 100644
index 0000000..4432a01
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-selective/keepdot0.d
@@ -0,0 +1,11 @@
+#source: keepdot.s
+#ld: --gc-sections -Bstatic -e _start -T keepdot0.ld
+#name: Preserve explicit . = 0
+#objdump: -h
+
+# Check that GC:ing does not mess up the value for dot when specified
+# as 0.
+
+#...
+[ ]+.[ ]+\.myinit[ ]+0+[48][ ]+0+[ ]+0+ .*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-selective/keepdot0.ld b/binutils-2.21/ld/testsuite/ld-selective/keepdot0.ld
new file mode 100644
index 0000000..9f053d3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-selective/keepdot0.ld
@@ -0,0 +1,6 @@
+SECTIONS
+{
+ . = 0x0;
+ .myinit : { KEEP (*(.myinit)) }
+ .mytext : { *(.mytext*) *(.text*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-selective/sel-dump.exp b/binutils-2.21/ld/testsuite/ld-selective/sel-dump.exp
new file mode 100644
index 0000000..5003d31
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-selective/sel-dump.exp
@@ -0,0 +1,35 @@
+# Expect script for ld selective linking tests running run_dump_test
+# Copyright 2002, 2005, 2004, 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+# Test for ELF here, so we don't have to qualify on ELF specifically
+# in every .d-file.
+if ![is_elf_format] {
+ return
+}
+
+set test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
+for { set i 0 } { $i < [llength $test_list] } { incr i } {
+ # We need to strip the ".d", but can leave the dirname.
+ verbose [file rootname [lindex $test_list $i]]
+ setup_xfail "alpha*-*" "am33*-*" "arc*-*" "d30v*-*" "dlx*-*"
+ setup_xfail "hppa*64-*-*" "i370*-*" "i860*-*" "i960*-*" "ia64*-*"
+ setup_xfail "m88*-*" "mn10200-*" "mep-*" "or32-*" "pj-*"
+ run_dump_test [file rootname [lindex $test_list $i]]
+}
diff --git a/binutils-2.21/ld/testsuite/ld-selective/selective.exp b/binutils-2.21/ld/testsuite/ld-selective/selective.exp
new file mode 100644
index 0000000..81870c2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-selective/selective.exp
@@ -0,0 +1,239 @@
+# Expect script for LD selective linking tests
+# Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by Catherine Moore (clm@cygnus.com)
+# Make sure that constructors are handled correctly.
+
+# Only ELF based ports support selective linking
+if ![is_elf_format] {
+ return
+}
+
+# These targets do not support selective linking
+if {[istarget "alpha*-*-*"] || [istarget "am33*-*-*"] ||
+ [istarget "arc-*-*"] || [istarget "d30v-*-*"] ||
+ [istarget "dlx-*-*"] || [istarget "hppa*64*-*-*"] ||
+ [istarget "i370-*-*"] || [istarget "i860-*-*"] ||
+ [istarget "i960-*-*"] || [istarget "ia64-*-*"] ||
+ [istarget "m88*-*-*"] || [istarget "mn10200-*-*"] ||
+ [istarget "mep-*-*"] || [istarget "or32-*-*"] ||
+ [istarget "pj*-*-*"]} {
+ return
+}
+
+# List contains test-items with three items followed by four lists:
+# 1:name 2:test-type (CC or C++; add as needed) 3:filename 4:ld-flags
+# 5:must-have-symbols 6:must-not-have-symbols 7:xfail-targets.
+#
+# If a must(-not)-have symbol is a list, then that list must have two
+# items; the symbol name and a value the symbol must (not) have.
+#
+# Note: ld_nm trims leading `_' from _start
+#
+# FIXME: Instead of table, read settings from each source-file.
+set seltests {
+ {selective1 C 1.c {} {} {dropme1 dropme2} {}}
+ {selective2 C 2.c {} {} {foo} {}}
+ {selective3 C 2.c {-u foo} {foo} {{foo 0}} {}}
+ {selective4 C++ 3.cc {} {start a A::foo() B::foo()} {A::bar()} {mips*-*}}
+ {selective5 C++ 4.cc {} {start a A::bar()} {A::foo() B::foo()} {mips*-*}}
+ {selective6 C++ 5.cc {} {start a A::bar()}
+ {A::foo() B::foo() dropme1() dropme2()} {*-*-*}}
+}
+
+set cflags "-w -O -ffunction-sections -fdata-sections"
+set cxxflags "-fno-exceptions -fno-rtti"
+set ldflags "--gc-sections -Bstatic"
+
+if [istarget mips*-*] {
+ # MIPS16 doesn't support PIC code.
+ set cflags "-mno-abicalls $cflags"
+ # MIPS ELF uses __start by default, we override it.
+ set ldflags "-e _start $ldflags"
+}
+
+if [istarget sh64*-*-elf] {
+ # This is what gcc passes to ld by default, plus switch to the
+ # "usual" ELF _start (shelf32 normally uses just `start' for COFF
+ # compatibility)
+ set ldflags "-e _start -mshelf32 $ldflags"
+}
+
+# If we don't have g++ for the target, mark all tests as untested.
+if { ![is_remote host] && [which $CXX] == 0 } {
+ foreach testitem $seltests {
+ untested "[lindex $testitem 0]"
+ }
+ return
+}
+
+foreach testitem $seltests {
+ set testname [lindex $testitem 0]
+ set testtype [lindex $testitem 1]
+ set testfile [lindex $testitem 2]
+ set objfile "tmpdir/[file rootname $testfile].o"
+ set ldfile "tmpdir/[file rootname $testfile].x"
+ set failed 0
+
+ set ldargs [lindex $testitem 3]
+ set mustsyms [lindex $testitem 4]
+ set mustnotsyms [lindex $testitem 5]
+ set xfails [lindex $testitem 6]
+
+ foreach xfail_target $xfails {
+ setup_xfail $xfail_target
+ }
+ setup_xfail "arc*-*" "d30v*-*" "dlx*-*" "i370*-*" "i860*-*"
+ setup_xfail "i960*-*" "mn10200-*" "or32-*" "pj-*"
+
+ # It's either C or C++ at the moment.
+ if { $testtype == "C++" } {
+ set compiler "$CXX"
+ # Starting with 3.4.0, -fvtable-gc is no longer supported and thus
+ # the functionality we try to test for cannot be expected to work.
+ set version [remote_exec host "$CXX -dumpversion"]
+ set version [lindex $version 1]
+ if [regexp "^(\[1-9\]\[0-9\]+|\[4-9\]|3.(\[1-9\]\[0-9\]+|\[4-9\]))\\." $version] {
+ set testflags "$cflags $cxxflags"
+ setup_xfail {*-*-*}
+ } else {
+ set testflags "$cflags $cxxflags -fvtable-gc"
+ }
+ } else {
+ set testflags "$cflags"
+ set compiler "$CC"
+ }
+
+ # Note that we do not actually *use* CXX; we just add cxxflags for C++
+ # tests. It might have been a buglet originally; now I think better
+ # leave as is.
+ if { ![ld_compile "$compiler $testflags" $srcdir/$subdir/$testfile $objfile] } {
+ unresolved $testname
+ continue
+ }
+
+ # V850 targets need libgcc.a
+ if [istarget v850*-*-elf] {
+ set libgcc [remote_exec host "$compiler -print-libgcc-file-name"]
+ set libgcc [lindex $libgcc 1]
+ regsub -all "\[\r\n\]" $libgcc "" libgcc
+ set objfile "$objfile $libgcc"
+ }
+
+ # ARM targets need libgcc.a in THUMB mode so that __call_via_r3 is provided
+ if {[istarget arm-*-*] || [istarget xscale-*-*]} {
+ set libgcc [remote_exec host "$compiler -print-libgcc-file-name"]
+ set libgcc [lindex $libgcc 1]
+ regsub -all "\[\r\n\]" $libgcc "" libgcc
+ set objfile "$objfile $libgcc"
+ }
+
+ # HPPA linux targets need libgcc.a for millicode routines ($$dyncall).
+ if [istarget hppa*-*-linux*] {
+ set libgcc [remote_exec host "$compiler -print-libgcc-file-name"]
+ set libgcc [lindex $libgcc 1]
+ regsub -all "\[\r\n\]" $libgcc "" libgcc
+ set objfile "$objfile $libgcc"
+ }
+
+ # m6811/m6812 code has references to soft registers.
+ if {[istarget m6811-*-*] || [istarget m6812-*-*]} {
+ set objfile "$objfile --defsym _.frame=0 --defsym _.d1=0"
+ set objfile "$objfile --defsym _.d2=0"
+ }
+
+ if ![ld_simple_link $ld $ldfile "$ldflags [join $ldargs] $objfile"] {
+ fail $testname
+ continue
+ }
+
+ if ![ld_nm $nm --demangle $ldfile] {
+ unresolved $testname
+ continue
+ }
+
+ # Must make V2 demangled names look like V3
+ foreach nm_output_key [array names nm_output] {
+ if [regsub \\(void\\) $nm_output_key () new_nm_output_key] {
+ set nm_output($new_nm_output_key) nm_output($nm_output_key)
+ }
+ }
+
+ # Check each mandated symbol and optionally mandated values.
+ foreach mustsym $mustsyms {
+ if { [llength [concat $mustsym]] == 1 } {
+ if { ![info exists nm_output($mustsym)] } {
+ verbose -log "$testname: missing $mustsym"
+ fail $testname
+ set failed 1
+ break
+ }
+ } {
+ set mustsymname [lindex $mustsym 0]
+ set mustsymvalue [lindex $mustsym 1]
+ if { ![info exists nm_output($mustsymname)] } {
+ verbose -log "$testname: missing $mustsymname"
+ fail $testname
+ set failed 1
+ break
+ } {
+ if { $nm_output($mustsymname) != $mustsymvalue } {
+ verbose -log "$testname: $mustsymname != $mustsymvalue"
+ verbose -log "is instead $nm_output($mustsymname)"
+ fail $testname
+ set failed 1
+ break
+ }
+ }
+ }
+ }
+
+ if { $failed != 0 } {
+ continue
+ }
+
+ # Check each unwanted symbol, or that symbols do not have specific
+ # values.
+ foreach mustnotsym $mustnotsyms {
+ if { [llength [concat $mustnotsym]] == 1 } {
+ if { [info exists nm_output($mustnotsym)] } {
+ verbose -log "$testname: $mustnotsym == $nm_output($mustnotsym)"
+ fail $testname
+ set failed 1
+ break
+ }
+ } {
+ set mustnotsymname [lindex $mustnotsym 0]
+ set mustnotsymvalue [lindex $mustnotsym 1]
+ if { [info exists nm_output($mustnotsymname)] \
+ && $nm_output($mustnotsymname) == $mustnotsymvalue} {
+ verbose -log "$testname: $mustnotsymname == $mustnotsymvalue"
+ fail $testname
+ set failed 1
+ break
+ }
+ }
+ }
+
+ if { $failed == 0 } {
+ pass $testname
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-sh/arch/arch.exp b/binutils-2.21/ld/testsuite/ld-sh/arch/arch.exp
new file mode 100644
index 0000000..acc322e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/arch/arch.exp
@@ -0,0 +1,257 @@
+# Copyright (C) 2004, 2005, 2006, 2007, 2008
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+
+# Please email any bugs, comments, and/or additions to this file to:
+# binutils@sources.redhat.com
+
+# This scripts tests of all available SH architectures with all other SH
+# architectures. It ensures that those combinations which should not work
+# do not work, and that those that should work produce the correct output
+# architecture.
+#
+# It looks for files in the same directory as this file named sh*.s .
+# Each file must contain one or more instructions which uniquely identifies
+# that architecture. The architecture name is inferred from the file name.
+# It is best to use the same files used by the assembler testsuite.
+#
+# It also creates another architecture named 'sh-unknown' by modifying
+# another arch type (there is no way to assemble such an arch) in order
+# to test what the linker would do with an older object file.
+#
+# The script generates the architecture permutations automatically,
+# but it reads the expected results from the file arch_expected.txt (also
+# found in the same directory as this script).
+#
+# The arch_expected.txt file should NOT be hand edited. Whenever the script
+# is run (e.g. with 'make check') it creates a new (usually identical) file
+# named arch_results.txt in the <objdir>/ld/testsuite directory. When the
+# expected results change (or new architectures are added) this new file
+# can be used to replace arch_expected.txt with no modification required.
+
+
+# The procedure extracts the architecture name from the objdump output.
+# If there is no architecture name (or objdump output changes significantly)
+# then the behaviour is undefined, but it will most likely return junk.
+
+proc get_sh_arch { ofile } {
+ global OBJDUMP
+
+ set cmd "$OBJDUMP -f $ofile"
+ verbose -log $cmd
+ catch "exec $cmd" objdump_output
+ verbose -log $objdump_output
+
+ set objdump_output [string replace $objdump_output 0 \
+ [expr [string first "architecture:" $objdump_output] + 13] ""]
+
+ return [string range $objdump_output 0 [expr [string first "," $objdump_output] - 1]]
+}
+
+
+# This procedure runs two tests:
+# Test 1: Check the linker can link the given files.
+# Test 2: Check that the resultant architecture is as expected.
+# It also writes an entry to the arch_results.txt file.
+
+proc test_arch { file1 file2 arch resultfile } {
+ global LD
+
+ set name1 [file tail $file1]
+ set rootname1 [file rootname $name1]
+
+ set name2 [file tail $file2]
+ set rootname2 [file rootname $name2]
+
+ set flags [big_or_little_endian]
+
+ # This must use -r to prevent LD trying to relocate the (unrealistic) file
+ send_log "$LD $flags -r -o ${rootname1}_${rootname2}.o $file1 $file2\n"
+ catch "exec $LD $flags -r -o ${rootname1}_${rootname2}.o $file1 $file2" ld_output
+ send_log $ld_output
+
+ if {[string equal $ld_output ""] == 1} then {
+ pass "$rootname1 file should link with $rootname2 file"
+
+ set result [get_sh_arch "${rootname1}_${rootname2}.o"]
+ puts $resultfile [format "%-20s %-20s %s" $file1 $file2 $result]
+
+ if {$result == $arch} then {
+ pass "$rootname1 file with $rootname2 file should link to arch $arch"
+ file delete "${rootname1}_${rootname2}.o"
+ } else {
+ fail "$rootname1 file with $rootname2 file should link to arch $arch"
+ }
+ } else {
+ fail "$rootname1 file should link with $rootname2 file"
+
+ puts $resultfile [format "%-20s %-20s ERROR" $file1 $file2]
+ untested "$rootname2 file with $rootname2 file should link to arch $arch"
+ }
+
+}
+
+
+
+# This procedure tests that a pair of files that are not
+# suposed to link does, in fact, not link.
+# It also writes an entry to the arch_results.txt file.
+
+proc test_arch_error { file1 file2 resultfile} {
+ global link_output LD
+
+ set name1 [file tail $file1]
+ set rootname1 [file rootname $name1]
+
+ set name2 [file tail $file2]
+ set rootname2 [file rootname $name2]
+
+ # This must use -r to prevent LD trying to relocate the (unrealistic) file
+ send_log "$LD -r -o ${rootname1}_${rootname2}.o $file1 $file2\n"
+ catch "exec $LD -r -o ${rootname1}_${rootname2}.o $file1 $file2" ld_output
+ send_log $ld_output
+
+ if {[string equal $ld_output ""] == 1} then {
+ fail "$rootname1 file should NOT link with $rootname2 file"
+ puts $resultfile [format "%-20s %-20s [get_sh_arch ${rootname1}_${rootname2}.o]" $file1 $file2]
+ } else {
+ pass "$rootname1 file should NOT link with $rootname2 file"
+ puts $resultfile [format "%-20s %-20s ERROR" $file1 $file2]
+ }
+}
+
+# These tests are not suitable for sh-coff because
+# coff does not store the architecture information.
+
+if [istarget sh*-*-elf] then {
+ global subdir srcdir
+ global AS
+
+ # Find all the architectures and assemble all the files
+ # we will use for the linker tests.
+
+ set sfilelist [lsort -ascii [glob "$srcdir/$subdir/sh*.s"]]
+ set ofilelist {}
+ foreach sfile $sfilelist {
+ set ofile "[file rootname [file tail $sfile]].o"
+ lappend ofilelist $ofile
+
+ set endian "-big"
+ if [string equal [big_or_little_endian] " -EL"] then {
+ set endian "-little"
+ }
+
+ set cmd "$AS $endian -isa=any $sfile -o $ofile"
+ verbose -log $cmd
+ catch "exec $cmd" as_output
+ if ![file exists $ofile] then {
+ verbose -log $as_output
+ perror "$sfile: assembly failed"
+ }
+ }
+
+ # Create the default arch ofile
+ # This cannot be created with the assembler
+ # sh4al-dsp is number 6, sh-unknown is 0
+
+ lappend ofilelist "sh-unknown.o"
+
+ if [string equal [big_or_little_endian] " -EL"] then {
+ set cmd {xxd sh4al-dsp.o | sed {s/\(^0000020: .... .... \)06/\100/} | xxd -r - sh-unknown.o}
+ } else {
+ set cmd {xxd sh4al-dsp.o | sed {s/\(^0000020: .... .... .... ..\)06/\100/} | xxd -r - sh-unknown.o}
+ }
+ verbose -log $cmd
+ catch "exec $cmd" xxd_output
+ verbose -log $xxd_output
+ if [string equal [get_sh_arch "sh-unknown.o"] "sh4al-dsp"] then {
+ perror "sh-unknown.o not generated correctly"
+ }
+
+
+ # Initialise the results file
+
+ set outfile [open "arch_results.txt" w 0666]
+ puts $outfile "# Generated file. DO NOT EDIT"
+ puts $outfile "#"
+ puts $outfile "# This file is generated by ld/testsuite/ld-sh/arch/arch.exp ."
+ puts $outfile "# It contains the expected results of the tests."
+ puts $outfile "# If the tests are failing because the expected results"
+ puts $outfile "# have changed then run 'make check' and copy the new file"
+ puts $outfile "# from <objdir>/ld/arch_results.txt"
+ puts $outfile "# to <srcdir>/ld/testsuite/ld-sh/arch/arch_expected.txt ."
+ puts $outfile "# Make sure the new expected results are ALL correct."
+ puts $outfile "#"
+ puts $outfile [format "# %-18s %-20s %s" "FILE1" "FILE2" "OUTPUT"]
+ puts $outfile [format "# %-18s %-20s %s" "-----" "-----" "------"]
+
+ # Open the expected results file and skip the header
+
+ set infile [open "$srcdir/$subdir/arch_expected.txt" r]
+ while {[gets $infile line] >= 0 && [string match {\#*} $line]} {verbose -log "reading '$line'"}
+
+ foreach file1 $ofilelist {
+ foreach file2 $ofilelist {
+ set name1 [file tail $file1]
+ set rootname1 [file rootname $name1]
+
+ set name2 [file tail $file2]
+ set rootname2 [file rootname $name2]
+
+ # Decode the expected result from the file
+
+ scan $line "%s %s %s" exfile1 exfile2 exarch
+ verbose -log "exfile1 = '$exfile1', exfile2 = '$exfile2', exarch = '$exarch'"
+ verbose -log " name1 = '$name1', name2 = '$name2'"
+
+ if {[string equal $exfile1 $name1] && [string equal $exfile2 $file2]} then {
+ # The expected result file makes sense and
+ # appears up-to-date (the file and options match)
+
+ if {[string equal $exarch "ERROR"]} then {
+ test_arch_error $file1 $file2 $outfile
+ } else {
+ test_arch $file1 $file2 $exarch $outfile
+ }
+ } else {
+ # The expected result file isn't right somehow
+ # so just try any old test. This will cause
+ # many failures, but will genrate the results file.
+
+ test_arch $file1 $file2 $rootname1 $outfile
+ }
+
+ # Read the next line from the expected result file.
+ # This is at the end because the process of skipping
+ # the header reads the first real line
+
+ if [gets $infile line] then {
+ verbose -log "reading '$line'"
+ }
+ }
+ }
+
+ close $infile
+ close $outfile
+
+ foreach file $ofilelist {
+ file delete $file
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-sh/arch/arch_expected.txt b/binutils-2.21/ld/testsuite/ld-sh/arch/arch_expected.txt
new file mode 100644
index 0000000..d11c43b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/arch/arch_expected.txt
@@ -0,0 +1,453 @@
+# Generated file. DO NOT EDIT
+#
+# This file is generated by ld/testsuite/ld-sh/arch/arch.exp .
+# It contains the expected results of the tests.
+# If the tests are failing because the expected results
+# have changed then run 'make check' and copy the new file
+# from <objdir>/ld/arch_results.txt
+# to <srcdir>/ld/testsuite/ld-sh/arch/arch_expected.txt .
+# Make sure the new expected results are ALL correct.
+#
+# FILE1 FILE2 OUTPUT
+# ----- ----- ------
+sh-dsp.o sh-dsp.o sh-dsp
+sh-dsp.o sh.o sh-dsp
+sh-dsp.o sh2.o sh-dsp
+sh-dsp.o sh2a-nofpu-or-sh3-nommu.o sh3-dsp
+sh-dsp.o sh2a-nofpu-or-sh4-nommu-nofpu.o sh4al-dsp
+sh-dsp.o sh2a-nofpu.o ERROR
+sh-dsp.o sh2a-or-sh3e.o ERROR
+sh-dsp.o sh2a-or-sh4.o ERROR
+sh-dsp.o sh2a.o ERROR
+sh-dsp.o sh2e.o ERROR
+sh-dsp.o sh3-dsp.o sh3-dsp
+sh-dsp.o sh3-nommu.o sh3-dsp
+sh-dsp.o sh3.o sh3-dsp
+sh-dsp.o sh3e.o ERROR
+sh-dsp.o sh4-nofpu.o sh4al-dsp
+sh-dsp.o sh4-nommu-nofpu.o sh4al-dsp
+sh-dsp.o sh4.o ERROR
+sh-dsp.o sh4a-nofpu.o sh4al-dsp
+sh-dsp.o sh4a.o ERROR
+sh-dsp.o sh4al-dsp.o sh4al-dsp
+sh-dsp.o sh-unknown.o sh-dsp
+sh.o sh-dsp.o sh-dsp
+sh.o sh.o sh
+sh.o sh2.o sh2
+sh.o sh2a-nofpu-or-sh3-nommu.o sh2a-nofpu-or-sh3-nommu
+sh.o sh2a-nofpu-or-sh4-nommu-nofpu.o sh2a-nofpu-or-sh4-nommu-nofpu
+sh.o sh2a-nofpu.o sh2a-nofpu
+sh.o sh2a-or-sh3e.o sh2a-or-sh3e
+sh.o sh2a-or-sh4.o sh2a-or-sh4
+sh.o sh2a.o sh2a
+sh.o sh2e.o sh2e
+sh.o sh3-dsp.o sh3-dsp
+sh.o sh3-nommu.o sh3-nommu
+sh.o sh3.o sh3
+sh.o sh3e.o sh3e
+sh.o sh4-nofpu.o sh4-nofpu
+sh.o sh4-nommu-nofpu.o sh4-nommu-nofpu
+sh.o sh4.o sh4
+sh.o sh4a-nofpu.o sh4a-nofpu
+sh.o sh4a.o sh4a
+sh.o sh4al-dsp.o sh4al-dsp
+sh.o sh-unknown.o sh
+sh2.o sh-dsp.o sh-dsp
+sh2.o sh.o sh2
+sh2.o sh2.o sh2
+sh2.o sh2a-nofpu-or-sh3-nommu.o sh2a-nofpu-or-sh3-nommu
+sh2.o sh2a-nofpu-or-sh4-nommu-nofpu.o sh2a-nofpu-or-sh4-nommu-nofpu
+sh2.o sh2a-nofpu.o sh2a-nofpu
+sh2.o sh2a-or-sh3e.o sh2a-or-sh3e
+sh2.o sh2a-or-sh4.o sh2a-or-sh4
+sh2.o sh2a.o sh2a
+sh2.o sh2e.o sh2e
+sh2.o sh3-dsp.o sh3-dsp
+sh2.o sh3-nommu.o sh3-nommu
+sh2.o sh3.o sh3
+sh2.o sh3e.o sh3e
+sh2.o sh4-nofpu.o sh4-nofpu
+sh2.o sh4-nommu-nofpu.o sh4-nommu-nofpu
+sh2.o sh4.o sh4
+sh2.o sh4a-nofpu.o sh4a-nofpu
+sh2.o sh4a.o sh4a
+sh2.o sh4al-dsp.o sh4al-dsp
+sh2.o sh-unknown.o sh2
+sh2a-nofpu-or-sh3-nommu.o sh-dsp.o sh3-dsp
+sh2a-nofpu-or-sh3-nommu.o sh.o sh2a-nofpu-or-sh3-nommu
+sh2a-nofpu-or-sh3-nommu.o sh2.o sh2a-nofpu-or-sh3-nommu
+sh2a-nofpu-or-sh3-nommu.o sh2a-nofpu-or-sh3-nommu.o sh2a-nofpu-or-sh3-nommu
+sh2a-nofpu-or-sh3-nommu.o sh2a-nofpu-or-sh4-nommu-nofpu.o sh2a-nofpu-or-sh4-nommu-nofpu
+sh2a-nofpu-or-sh3-nommu.o sh2a-nofpu.o sh2a-nofpu
+sh2a-nofpu-or-sh3-nommu.o sh2a-or-sh3e.o sh2a-or-sh3e
+sh2a-nofpu-or-sh3-nommu.o sh2a-or-sh4.o sh2a-or-sh4
+sh2a-nofpu-or-sh3-nommu.o sh2a.o sh2a
+sh2a-nofpu-or-sh3-nommu.o sh2e.o sh2a-or-sh3e
+sh2a-nofpu-or-sh3-nommu.o sh3-dsp.o sh3-dsp
+sh2a-nofpu-or-sh3-nommu.o sh3-nommu.o sh3-nommu
+sh2a-nofpu-or-sh3-nommu.o sh3.o sh3
+sh2a-nofpu-or-sh3-nommu.o sh3e.o sh3e
+sh2a-nofpu-or-sh3-nommu.o sh4-nofpu.o sh4-nofpu
+sh2a-nofpu-or-sh3-nommu.o sh4-nommu-nofpu.o sh4-nommu-nofpu
+sh2a-nofpu-or-sh3-nommu.o sh4.o sh4
+sh2a-nofpu-or-sh3-nommu.o sh4a-nofpu.o sh4a-nofpu
+sh2a-nofpu-or-sh3-nommu.o sh4a.o sh4a
+sh2a-nofpu-or-sh3-nommu.o sh4al-dsp.o sh4al-dsp
+sh2a-nofpu-or-sh3-nommu.o sh-unknown.o sh2a-nofpu-or-sh3-nommu
+sh2a-nofpu-or-sh4-nommu-nofpu.o sh-dsp.o sh4al-dsp
+sh2a-nofpu-or-sh4-nommu-nofpu.o sh.o sh2a-nofpu-or-sh4-nommu-nofpu
+sh2a-nofpu-or-sh4-nommu-nofpu.o sh2.o sh2a-nofpu-or-sh4-nommu-nofpu
+sh2a-nofpu-or-sh4-nommu-nofpu.o sh2a-nofpu-or-sh3-nommu.o sh2a-nofpu-or-sh4-nommu-nofpu
+sh2a-nofpu-or-sh4-nommu-nofpu.o sh2a-nofpu-or-sh4-nommu-nofpu.o sh2a-nofpu-or-sh4-nommu-nofpu
+sh2a-nofpu-or-sh4-nommu-nofpu.o sh2a-nofpu.o sh2a-nofpu
+sh2a-nofpu-or-sh4-nommu-nofpu.o sh2a-or-sh3e.o sh2a-or-sh4
+sh2a-nofpu-or-sh4-nommu-nofpu.o sh2a-or-sh4.o sh2a-or-sh4
+sh2a-nofpu-or-sh4-nommu-nofpu.o sh2a.o sh2a
+sh2a-nofpu-or-sh4-nommu-nofpu.o sh2e.o sh2a-or-sh4
+sh2a-nofpu-or-sh4-nommu-nofpu.o sh3-dsp.o sh4al-dsp
+sh2a-nofpu-or-sh4-nommu-nofpu.o sh3-nommu.o sh4-nommu-nofpu
+sh2a-nofpu-or-sh4-nommu-nofpu.o sh3.o sh4-nofpu
+sh2a-nofpu-or-sh4-nommu-nofpu.o sh3e.o sh4
+sh2a-nofpu-or-sh4-nommu-nofpu.o sh4-nofpu.o sh4-nofpu
+sh2a-nofpu-or-sh4-nommu-nofpu.o sh4-nommu-nofpu.o sh4-nommu-nofpu
+sh2a-nofpu-or-sh4-nommu-nofpu.o sh4.o sh4
+sh2a-nofpu-or-sh4-nommu-nofpu.o sh4a-nofpu.o sh4a-nofpu
+sh2a-nofpu-or-sh4-nommu-nofpu.o sh4a.o sh4a
+sh2a-nofpu-or-sh4-nommu-nofpu.o sh4al-dsp.o sh4al-dsp
+sh2a-nofpu-or-sh4-nommu-nofpu.o sh-unknown.o sh2a-nofpu-or-sh4-nommu-nofpu
+sh2a-nofpu.o sh-dsp.o ERROR
+sh2a-nofpu.o sh.o sh2a-nofpu
+sh2a-nofpu.o sh2.o sh2a-nofpu
+sh2a-nofpu.o sh2a-nofpu-or-sh3-nommu.o sh2a-nofpu
+sh2a-nofpu.o sh2a-nofpu-or-sh4-nommu-nofpu.o sh2a-nofpu
+sh2a-nofpu.o sh2a-nofpu.o sh2a-nofpu
+sh2a-nofpu.o sh2a-or-sh3e.o sh2a
+sh2a-nofpu.o sh2a-or-sh4.o sh2a
+sh2a-nofpu.o sh2a.o sh2a
+sh2a-nofpu.o sh2e.o sh2a
+sh2a-nofpu.o sh3-dsp.o ERROR
+sh2a-nofpu.o sh3-nommu.o ERROR
+sh2a-nofpu.o sh3.o ERROR
+sh2a-nofpu.o sh3e.o ERROR
+sh2a-nofpu.o sh4-nofpu.o ERROR
+sh2a-nofpu.o sh4-nommu-nofpu.o ERROR
+sh2a-nofpu.o sh4.o ERROR
+sh2a-nofpu.o sh4a-nofpu.o ERROR
+sh2a-nofpu.o sh4a.o ERROR
+sh2a-nofpu.o sh4al-dsp.o ERROR
+sh2a-nofpu.o sh-unknown.o sh2a-nofpu
+sh2a-or-sh3e.o sh-dsp.o ERROR
+sh2a-or-sh3e.o sh.o sh2a-or-sh3e
+sh2a-or-sh3e.o sh2.o sh2a-or-sh3e
+sh2a-or-sh3e.o sh2a-nofpu-or-sh3-nommu.o sh2a-or-sh3e
+sh2a-or-sh3e.o sh2a-nofpu-or-sh4-nommu-nofpu.o sh2a-or-sh4
+sh2a-or-sh3e.o sh2a-nofpu.o sh2a
+sh2a-or-sh3e.o sh2a-or-sh3e.o sh2a-or-sh3e
+sh2a-or-sh3e.o sh2a-or-sh4.o sh2a-or-sh4
+sh2a-or-sh3e.o sh2a.o sh2a
+sh2a-or-sh3e.o sh2e.o sh2a-or-sh3e
+sh2a-or-sh3e.o sh3-dsp.o ERROR
+sh2a-or-sh3e.o sh3-nommu.o sh3e
+sh2a-or-sh3e.o sh3.o sh3e
+sh2a-or-sh3e.o sh3e.o sh3e
+sh2a-or-sh3e.o sh4-nofpu.o sh4
+sh2a-or-sh3e.o sh4-nommu-nofpu.o sh4
+sh2a-or-sh3e.o sh4.o sh4
+sh2a-or-sh3e.o sh4a-nofpu.o sh4a
+sh2a-or-sh3e.o sh4a.o sh4a
+sh2a-or-sh3e.o sh4al-dsp.o ERROR
+sh2a-or-sh3e.o sh-unknown.o sh2a-or-sh3e
+sh2a-or-sh4.o sh-dsp.o ERROR
+sh2a-or-sh4.o sh.o sh2a-or-sh4
+sh2a-or-sh4.o sh2.o sh2a-or-sh4
+sh2a-or-sh4.o sh2a-nofpu-or-sh3-nommu.o sh2a-or-sh4
+sh2a-or-sh4.o sh2a-nofpu-or-sh4-nommu-nofpu.o sh2a-or-sh4
+sh2a-or-sh4.o sh2a-nofpu.o sh2a
+sh2a-or-sh4.o sh2a-or-sh3e.o sh2a-or-sh4
+sh2a-or-sh4.o sh2a-or-sh4.o sh2a-or-sh4
+sh2a-or-sh4.o sh2a.o sh2a
+sh2a-or-sh4.o sh2e.o sh2a-or-sh4
+sh2a-or-sh4.o sh3-dsp.o ERROR
+sh2a-or-sh4.o sh3-nommu.o sh4
+sh2a-or-sh4.o sh3.o sh4
+sh2a-or-sh4.o sh3e.o sh4
+sh2a-or-sh4.o sh4-nofpu.o sh4
+sh2a-or-sh4.o sh4-nommu-nofpu.o sh4
+sh2a-or-sh4.o sh4.o sh4
+sh2a-or-sh4.o sh4a-nofpu.o sh4a
+sh2a-or-sh4.o sh4a.o sh4a
+sh2a-or-sh4.o sh4al-dsp.o ERROR
+sh2a-or-sh4.o sh-unknown.o sh2a-or-sh4
+sh2a.o sh-dsp.o ERROR
+sh2a.o sh.o sh2a
+sh2a.o sh2.o sh2a
+sh2a.o sh2a-nofpu-or-sh3-nommu.o sh2a
+sh2a.o sh2a-nofpu-or-sh4-nommu-nofpu.o sh2a
+sh2a.o sh2a-nofpu.o sh2a
+sh2a.o sh2a-or-sh3e.o sh2a
+sh2a.o sh2a-or-sh4.o sh2a
+sh2a.o sh2a.o sh2a
+sh2a.o sh2e.o sh2a
+sh2a.o sh3-dsp.o ERROR
+sh2a.o sh3-nommu.o ERROR
+sh2a.o sh3.o ERROR
+sh2a.o sh3e.o ERROR
+sh2a.o sh4-nofpu.o ERROR
+sh2a.o sh4-nommu-nofpu.o ERROR
+sh2a.o sh4.o ERROR
+sh2a.o sh4a-nofpu.o ERROR
+sh2a.o sh4a.o ERROR
+sh2a.o sh4al-dsp.o ERROR
+sh2a.o sh-unknown.o sh2a
+sh2e.o sh-dsp.o ERROR
+sh2e.o sh.o sh2e
+sh2e.o sh2.o sh2e
+sh2e.o sh2a-nofpu-or-sh3-nommu.o sh2a-or-sh3e
+sh2e.o sh2a-nofpu-or-sh4-nommu-nofpu.o sh2a-or-sh4
+sh2e.o sh2a-nofpu.o sh2a
+sh2e.o sh2a-or-sh3e.o sh2a-or-sh3e
+sh2e.o sh2a-or-sh4.o sh2a-or-sh4
+sh2e.o sh2a.o sh2a
+sh2e.o sh2e.o sh2e
+sh2e.o sh3-dsp.o ERROR
+sh2e.o sh3-nommu.o sh3e
+sh2e.o sh3.o sh3e
+sh2e.o sh3e.o sh3e
+sh2e.o sh4-nofpu.o sh4
+sh2e.o sh4-nommu-nofpu.o sh4
+sh2e.o sh4.o sh4
+sh2e.o sh4a-nofpu.o sh4a
+sh2e.o sh4a.o sh4a
+sh2e.o sh4al-dsp.o ERROR
+sh2e.o sh-unknown.o sh2e
+sh3-dsp.o sh-dsp.o sh3-dsp
+sh3-dsp.o sh.o sh3-dsp
+sh3-dsp.o sh2.o sh3-dsp
+sh3-dsp.o sh2a-nofpu-or-sh3-nommu.o sh3-dsp
+sh3-dsp.o sh2a-nofpu-or-sh4-nommu-nofpu.o sh4al-dsp
+sh3-dsp.o sh2a-nofpu.o ERROR
+sh3-dsp.o sh2a-or-sh3e.o ERROR
+sh3-dsp.o sh2a-or-sh4.o ERROR
+sh3-dsp.o sh2a.o ERROR
+sh3-dsp.o sh2e.o ERROR
+sh3-dsp.o sh3-dsp.o sh3-dsp
+sh3-dsp.o sh3-nommu.o sh3-dsp
+sh3-dsp.o sh3.o sh3-dsp
+sh3-dsp.o sh3e.o ERROR
+sh3-dsp.o sh4-nofpu.o sh4al-dsp
+sh3-dsp.o sh4-nommu-nofpu.o sh4al-dsp
+sh3-dsp.o sh4.o ERROR
+sh3-dsp.o sh4a-nofpu.o sh4al-dsp
+sh3-dsp.o sh4a.o ERROR
+sh3-dsp.o sh4al-dsp.o sh4al-dsp
+sh3-dsp.o sh-unknown.o sh3-dsp
+sh3-nommu.o sh-dsp.o sh3-dsp
+sh3-nommu.o sh.o sh3-nommu
+sh3-nommu.o sh2.o sh3-nommu
+sh3-nommu.o sh2a-nofpu-or-sh3-nommu.o sh3-nommu
+sh3-nommu.o sh2a-nofpu-or-sh4-nommu-nofpu.o sh4-nommu-nofpu
+sh3-nommu.o sh2a-nofpu.o ERROR
+sh3-nommu.o sh2a-or-sh3e.o sh3e
+sh3-nommu.o sh2a-or-sh4.o sh4
+sh3-nommu.o sh2a.o ERROR
+sh3-nommu.o sh2e.o sh3e
+sh3-nommu.o sh3-dsp.o sh3-dsp
+sh3-nommu.o sh3-nommu.o sh3-nommu
+sh3-nommu.o sh3.o sh3
+sh3-nommu.o sh3e.o sh3e
+sh3-nommu.o sh4-nofpu.o sh4-nofpu
+sh3-nommu.o sh4-nommu-nofpu.o sh4-nommu-nofpu
+sh3-nommu.o sh4.o sh4
+sh3-nommu.o sh4a-nofpu.o sh4a-nofpu
+sh3-nommu.o sh4a.o sh4a
+sh3-nommu.o sh4al-dsp.o sh4al-dsp
+sh3-nommu.o sh-unknown.o sh3-nommu
+sh3.o sh-dsp.o sh3-dsp
+sh3.o sh.o sh3
+sh3.o sh2.o sh3
+sh3.o sh2a-nofpu-or-sh3-nommu.o sh3
+sh3.o sh2a-nofpu-or-sh4-nommu-nofpu.o sh4-nofpu
+sh3.o sh2a-nofpu.o ERROR
+sh3.o sh2a-or-sh3e.o sh3e
+sh3.o sh2a-or-sh4.o sh4
+sh3.o sh2a.o ERROR
+sh3.o sh2e.o sh3e
+sh3.o sh3-dsp.o sh3-dsp
+sh3.o sh3-nommu.o sh3
+sh3.o sh3.o sh3
+sh3.o sh3e.o sh3e
+sh3.o sh4-nofpu.o sh4-nofpu
+sh3.o sh4-nommu-nofpu.o sh4-nofpu
+sh3.o sh4.o sh4
+sh3.o sh4a-nofpu.o sh4a-nofpu
+sh3.o sh4a.o sh4a
+sh3.o sh4al-dsp.o sh4al-dsp
+sh3.o sh-unknown.o sh3
+sh3e.o sh-dsp.o ERROR
+sh3e.o sh.o sh3e
+sh3e.o sh2.o sh3e
+sh3e.o sh2a-nofpu-or-sh3-nommu.o sh3e
+sh3e.o sh2a-nofpu-or-sh4-nommu-nofpu.o sh4
+sh3e.o sh2a-nofpu.o ERROR
+sh3e.o sh2a-or-sh3e.o sh3e
+sh3e.o sh2a-or-sh4.o sh4
+sh3e.o sh2a.o ERROR
+sh3e.o sh2e.o sh3e
+sh3e.o sh3-dsp.o ERROR
+sh3e.o sh3-nommu.o sh3e
+sh3e.o sh3.o sh3e
+sh3e.o sh3e.o sh3e
+sh3e.o sh4-nofpu.o sh4
+sh3e.o sh4-nommu-nofpu.o sh4
+sh3e.o sh4.o sh4
+sh3e.o sh4a-nofpu.o sh4a
+sh3e.o sh4a.o sh4a
+sh3e.o sh4al-dsp.o ERROR
+sh3e.o sh-unknown.o sh3e
+sh4-nofpu.o sh-dsp.o sh4al-dsp
+sh4-nofpu.o sh.o sh4-nofpu
+sh4-nofpu.o sh2.o sh4-nofpu
+sh4-nofpu.o sh2a-nofpu-or-sh3-nommu.o sh4-nofpu
+sh4-nofpu.o sh2a-nofpu-or-sh4-nommu-nofpu.o sh4-nofpu
+sh4-nofpu.o sh2a-nofpu.o ERROR
+sh4-nofpu.o sh2a-or-sh3e.o sh4
+sh4-nofpu.o sh2a-or-sh4.o sh4
+sh4-nofpu.o sh2a.o ERROR
+sh4-nofpu.o sh2e.o sh4
+sh4-nofpu.o sh3-dsp.o sh4al-dsp
+sh4-nofpu.o sh3-nommu.o sh4-nofpu
+sh4-nofpu.o sh3.o sh4-nofpu
+sh4-nofpu.o sh3e.o sh4
+sh4-nofpu.o sh4-nofpu.o sh4-nofpu
+sh4-nofpu.o sh4-nommu-nofpu.o sh4-nofpu
+sh4-nofpu.o sh4.o sh4
+sh4-nofpu.o sh4a-nofpu.o sh4a-nofpu
+sh4-nofpu.o sh4a.o sh4a
+sh4-nofpu.o sh4al-dsp.o sh4al-dsp
+sh4-nofpu.o sh-unknown.o sh4-nofpu
+sh4-nommu-nofpu.o sh-dsp.o sh4al-dsp
+sh4-nommu-nofpu.o sh.o sh4-nommu-nofpu
+sh4-nommu-nofpu.o sh2.o sh4-nommu-nofpu
+sh4-nommu-nofpu.o sh2a-nofpu-or-sh3-nommu.o sh4-nommu-nofpu
+sh4-nommu-nofpu.o sh2a-nofpu-or-sh4-nommu-nofpu.o sh4-nommu-nofpu
+sh4-nommu-nofpu.o sh2a-nofpu.o ERROR
+sh4-nommu-nofpu.o sh2a-or-sh3e.o sh4
+sh4-nommu-nofpu.o sh2a-or-sh4.o sh4
+sh4-nommu-nofpu.o sh2a.o ERROR
+sh4-nommu-nofpu.o sh2e.o sh4
+sh4-nommu-nofpu.o sh3-dsp.o sh4al-dsp
+sh4-nommu-nofpu.o sh3-nommu.o sh4-nommu-nofpu
+sh4-nommu-nofpu.o sh3.o sh4-nofpu
+sh4-nommu-nofpu.o sh3e.o sh4
+sh4-nommu-nofpu.o sh4-nofpu.o sh4-nofpu
+sh4-nommu-nofpu.o sh4-nommu-nofpu.o sh4-nommu-nofpu
+sh4-nommu-nofpu.o sh4.o sh4
+sh4-nommu-nofpu.o sh4a-nofpu.o sh4a-nofpu
+sh4-nommu-nofpu.o sh4a.o sh4a
+sh4-nommu-nofpu.o sh4al-dsp.o sh4al-dsp
+sh4-nommu-nofpu.o sh-unknown.o sh4-nommu-nofpu
+sh4.o sh-dsp.o ERROR
+sh4.o sh.o sh4
+sh4.o sh2.o sh4
+sh4.o sh2a-nofpu-or-sh3-nommu.o sh4
+sh4.o sh2a-nofpu-or-sh4-nommu-nofpu.o sh4
+sh4.o sh2a-nofpu.o ERROR
+sh4.o sh2a-or-sh3e.o sh4
+sh4.o sh2a-or-sh4.o sh4
+sh4.o sh2a.o ERROR
+sh4.o sh2e.o sh4
+sh4.o sh3-dsp.o ERROR
+sh4.o sh3-nommu.o sh4
+sh4.o sh3.o sh4
+sh4.o sh3e.o sh4
+sh4.o sh4-nofpu.o sh4
+sh4.o sh4-nommu-nofpu.o sh4
+sh4.o sh4.o sh4
+sh4.o sh4a-nofpu.o sh4a
+sh4.o sh4a.o sh4a
+sh4.o sh4al-dsp.o ERROR
+sh4.o sh-unknown.o sh4
+sh4a-nofpu.o sh-dsp.o sh4al-dsp
+sh4a-nofpu.o sh.o sh4a-nofpu
+sh4a-nofpu.o sh2.o sh4a-nofpu
+sh4a-nofpu.o sh2a-nofpu-or-sh3-nommu.o sh4a-nofpu
+sh4a-nofpu.o sh2a-nofpu-or-sh4-nommu-nofpu.o sh4a-nofpu
+sh4a-nofpu.o sh2a-nofpu.o ERROR
+sh4a-nofpu.o sh2a-or-sh3e.o sh4a
+sh4a-nofpu.o sh2a-or-sh4.o sh4a
+sh4a-nofpu.o sh2a.o ERROR
+sh4a-nofpu.o sh2e.o sh4a
+sh4a-nofpu.o sh3-dsp.o sh4al-dsp
+sh4a-nofpu.o sh3-nommu.o sh4a-nofpu
+sh4a-nofpu.o sh3.o sh4a-nofpu
+sh4a-nofpu.o sh3e.o sh4a
+sh4a-nofpu.o sh4-nofpu.o sh4a-nofpu
+sh4a-nofpu.o sh4-nommu-nofpu.o sh4a-nofpu
+sh4a-nofpu.o sh4.o sh4a
+sh4a-nofpu.o sh4a-nofpu.o sh4a-nofpu
+sh4a-nofpu.o sh4a.o sh4a
+sh4a-nofpu.o sh4al-dsp.o sh4al-dsp
+sh4a-nofpu.o sh-unknown.o sh4a-nofpu
+sh4a.o sh-dsp.o ERROR
+sh4a.o sh.o sh4a
+sh4a.o sh2.o sh4a
+sh4a.o sh2a-nofpu-or-sh3-nommu.o sh4a
+sh4a.o sh2a-nofpu-or-sh4-nommu-nofpu.o sh4a
+sh4a.o sh2a-nofpu.o ERROR
+sh4a.o sh2a-or-sh3e.o sh4a
+sh4a.o sh2a-or-sh4.o sh4a
+sh4a.o sh2a.o ERROR
+sh4a.o sh2e.o sh4a
+sh4a.o sh3-dsp.o ERROR
+sh4a.o sh3-nommu.o sh4a
+sh4a.o sh3.o sh4a
+sh4a.o sh3e.o sh4a
+sh4a.o sh4-nofpu.o sh4a
+sh4a.o sh4-nommu-nofpu.o sh4a
+sh4a.o sh4.o sh4a
+sh4a.o sh4a-nofpu.o sh4a
+sh4a.o sh4a.o sh4a
+sh4a.o sh4al-dsp.o ERROR
+sh4a.o sh-unknown.o sh4a
+sh4al-dsp.o sh-dsp.o sh4al-dsp
+sh4al-dsp.o sh.o sh4al-dsp
+sh4al-dsp.o sh2.o sh4al-dsp
+sh4al-dsp.o sh2a-nofpu-or-sh3-nommu.o sh4al-dsp
+sh4al-dsp.o sh2a-nofpu-or-sh4-nommu-nofpu.o sh4al-dsp
+sh4al-dsp.o sh2a-nofpu.o ERROR
+sh4al-dsp.o sh2a-or-sh3e.o ERROR
+sh4al-dsp.o sh2a-or-sh4.o ERROR
+sh4al-dsp.o sh2a.o ERROR
+sh4al-dsp.o sh2e.o ERROR
+sh4al-dsp.o sh3-dsp.o sh4al-dsp
+sh4al-dsp.o sh3-nommu.o sh4al-dsp
+sh4al-dsp.o sh3.o sh4al-dsp
+sh4al-dsp.o sh3e.o ERROR
+sh4al-dsp.o sh4-nofpu.o sh4al-dsp
+sh4al-dsp.o sh4-nommu-nofpu.o sh4al-dsp
+sh4al-dsp.o sh4.o ERROR
+sh4al-dsp.o sh4a-nofpu.o sh4al-dsp
+sh4al-dsp.o sh4a.o ERROR
+sh4al-dsp.o sh4al-dsp.o sh4al-dsp
+sh4al-dsp.o sh-unknown.o sh4al-dsp
+sh-unknown.o sh-dsp.o sh-dsp
+sh-unknown.o sh.o sh
+sh-unknown.o sh2.o sh2
+sh-unknown.o sh2a-nofpu-or-sh3-nommu.o sh2a-nofpu-or-sh3-nommu
+sh-unknown.o sh2a-nofpu-or-sh4-nommu-nofpu.o sh2a-nofpu-or-sh4-nommu-nofpu
+sh-unknown.o sh2a-nofpu.o sh2a-nofpu
+sh-unknown.o sh2a-or-sh3e.o sh2a-or-sh3e
+sh-unknown.o sh2a-or-sh4.o sh2a-or-sh4
+sh-unknown.o sh2a.o sh2a
+sh-unknown.o sh2e.o sh2e
+sh-unknown.o sh3-dsp.o sh3-dsp
+sh-unknown.o sh3-nommu.o sh3-nommu
+sh-unknown.o sh3.o sh3
+sh-unknown.o sh3e.o sh3e
+sh-unknown.o sh4-nofpu.o sh4-nofpu
+sh-unknown.o sh4-nommu-nofpu.o sh4-nommu-nofpu
+sh-unknown.o sh4.o sh4
+sh-unknown.o sh4a-nofpu.o sh4a-nofpu
+sh-unknown.o sh4a.o sh4a
+sh-unknown.o sh4al-dsp.o sh4al-dsp
+sh-unknown.o sh-unknown.o sh
diff --git a/binutils-2.21/ld/testsuite/ld-sh/arch/sh-dsp.s b/binutils-2.21/ld/testsuite/ld-sh/arch/sh-dsp.s
new file mode 100644
index 0000000..cd87a22
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/arch/sh-dsp.s
@@ -0,0 +1,272 @@
+! Generated file. DO NOT EDIT.
+!
+! This file was generated by gas/testsuite/gas/sh/arch/arch.exp .
+! This file should contain every instruction valid on
+! architecture sh-dsp but no more.
+! If the tests are failing because the expected results
+! have changed then run 'make check' and copy the new file
+! from <objdir>/gas/testsuite/sh-dsp.s
+! to <srcdir>/gas/testsuite/gas/sh/arch/sh-dsp.s .
+! Make sure there are no unexpected or missing instructions.
+
+ .section .text
+sh_dsp:
+! Instructions introduced into sh-dsp
+ ldc r4,MOD ;!/* 0100nnnn01011110 ldc <REG_N>,MOD */{"ldc",{A_REG_N,A_MOD},{HEX_4,REG_N,HEX_5,HEX_E}, arch_sh_dsp_up}
+ ldc r4,RE ;!/* 0100nnnn01111110 ldc <REG_N>,RE */{"ldc",{A_REG_N,A_RE},{HEX_4,REG_N,HEX_7,HEX_E}, arch_sh_dsp_up}
+ ldc r4,RS ;!/* 0100nnnn01101110 ldc <REG_N>,RS */{"ldc",{A_REG_N,A_RS},{HEX_4,REG_N,HEX_6,HEX_E}, arch_sh_dsp_up}
+ ldc.l @r4+,MOD ;!/* 0100nnnn01010111 ldc.l @<REG_N>+,MOD */{"ldc.l",{A_INC_N,A_MOD},{HEX_4,REG_N,HEX_5,HEX_7}, arch_sh_dsp_up}
+ ldc.l @r4+,RE ;!/* 0100nnnn01110111 ldc.l @<REG_N>+,RE */{"ldc.l",{A_INC_N,A_RE},{HEX_4,REG_N,HEX_7,HEX_7}, arch_sh_dsp_up}
+ ldc.l @r4+,RS ;!/* 0100nnnn01100111 ldc.l @<REG_N>+,RS */{"ldc.l",{A_INC_N,A_RS},{HEX_4,REG_N,HEX_6,HEX_7}, arch_sh_dsp_up}
+ ldre @(8,PC) ;!/* 10001110i8p2.... ldre @(<disp>,PC) */{"ldre",{A_DISP_PC},{HEX_8,HEX_E,PCRELIMM_8BY2}, arch_sh_dsp_up}
+ ldrs @(8,PC) ;!/* 10001100i8p2.... ldrs @(<disp>,PC) */{"ldrs",{A_DISP_PC},{HEX_8,HEX_C,PCRELIMM_8BY2}, arch_sh_dsp_up}
+ lds r4,DSR ;!/* 0100nnnn01101010 lds <REG_N>,DSR */{"lds",{A_REG_N,A_DSR},{HEX_4,REG_N,HEX_6,HEX_A}, arch_sh_dsp_up}
+ lds r4,A0 ;!/* 0100nnnn01111010 lds <REG_N>,A0 */{"lds",{A_REG_N,A_A0},{HEX_4,REG_N,HEX_7,HEX_A}, arch_sh_dsp_up}
+ lds r4,X0 ;!/* 0100nnnn10001010 lds <REG_N>,X0 */{"lds",{A_REG_N,A_X0},{HEX_4,REG_N,HEX_8,HEX_A}, arch_sh_dsp_up}
+ lds r4,X1 ;!/* 0100nnnn10011010 lds <REG_N>,X1 */{"lds",{A_REG_N,A_X1},{HEX_4,REG_N,HEX_9,HEX_A}, arch_sh_dsp_up}
+ lds r4,Y0 ;!/* 0100nnnn10101010 lds <REG_N>,Y0 */{"lds",{A_REG_N,A_Y0},{HEX_4,REG_N,HEX_A,HEX_A}, arch_sh_dsp_up}
+ lds r4,Y1 ;!/* 0100nnnn10111010 lds <REG_N>,Y1 */{"lds",{A_REG_N,A_Y1},{HEX_4,REG_N,HEX_B,HEX_A}, arch_sh_dsp_up}
+ lds.l @r4+,DSR ;!/* 0100nnnn01100110 lds.l @<REG_N>+,DSR */{"lds.l",{A_INC_N,A_DSR},{HEX_4,REG_N,HEX_6,HEX_6}, arch_sh_dsp_up}
+ lds.l @r4+,A0 ;!/* 0100nnnn01110110 lds.l @<REG_N>+,A0 */{"lds.l",{A_INC_N,A_A0},{HEX_4,REG_N,HEX_7,HEX_6}, arch_sh_dsp_up}
+ lds.l @r4+,X0 ;!/* 0100nnnn10000110 lds.l @<REG_N>+,X0 */{"lds.l",{A_INC_N,A_X0},{HEX_4,REG_N,HEX_8,HEX_6}, arch_sh_dsp_up}
+ lds.l @r4+,X1 ;!/* 0100nnnn10010110 lds.l @<REG_N>+,X1 */{"lds.l",{A_INC_N,A_X1},{HEX_4,REG_N,HEX_9,HEX_6}, arch_sh_dsp_up}
+ lds.l @r4+,Y0 ;!/* 0100nnnn10100110 lds.l @<REG_N>+,Y0 */{"lds.l",{A_INC_N,A_Y0},{HEX_4,REG_N,HEX_A,HEX_6}, arch_sh_dsp_up}
+ lds.l @r4+,Y1 ;!/* 0100nnnn10110110 lds.l @<REG_N>+,Y1 */{"lds.l",{A_INC_N,A_Y1},{HEX_4,REG_N,HEX_B,HEX_6}, arch_sh_dsp_up}
+ setrc r4 ;!/* 0100nnnn00010100 setrc <REG_N> */{"setrc",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_4}, arch_sh_dsp_up}
+ setrc #4 ;!/* 10000010i8*1.... setrc #<imm> */{"setrc",{A_IMM},{HEX_8,HEX_2,IMM0_8}, arch_sh_dsp_up}
+ repeat 10 20 r4 ;!/* repeat start end <REG_N> */{"repeat",{A_DISP_PC,A_DISP_PC,A_REG_N},{REPEAT,REG_N,HEX_1,HEX_4}, arch_sh_dsp_up}
+ repeat 10 20 #4 ;!/* repeat start end #<imm> */{"repeat",{A_DISP_PC,A_DISP_PC,A_IMM},{REPEAT,HEX_2,IMM0_8,HEX_8}, arch_sh_dsp_up}
+ stc MOD,r4 ;!/* 0000nnnn01010010 stc MOD,<REG_N> */{"stc",{A_MOD,A_REG_N},{HEX_0,REG_N,HEX_5,HEX_2}, arch_sh_dsp_up}
+ stc RE,r4 ;!/* 0000nnnn01110010 stc RE,<REG_N> */{"stc",{A_RE,A_REG_N},{HEX_0,REG_N,HEX_7,HEX_2}, arch_sh_dsp_up}
+ stc RS,r4 ;!/* 0000nnnn01100010 stc RS,<REG_N> */{"stc",{A_RS,A_REG_N},{HEX_0,REG_N,HEX_6,HEX_2}, arch_sh_dsp_up}
+ stc.l MOD,@-r4 ;!/* 0100nnnn01010011 stc.l MOD,@-<REG_N> */{"stc.l",{A_MOD,A_DEC_N},{HEX_4,REG_N,HEX_5,HEX_3}, arch_sh_dsp_up}
+ stc.l RE,@-r4 ;!/* 0100nnnn01110011 stc.l RE,@-<REG_N> */{"stc.l",{A_RE,A_DEC_N},{HEX_4,REG_N,HEX_7,HEX_3}, arch_sh_dsp_up}
+ stc.l RS,@-r4 ;!/* 0100nnnn01100011 stc.l RS,@-<REG_N> */{"stc.l",{A_RS,A_DEC_N},{HEX_4,REG_N,HEX_6,HEX_3}, arch_sh_dsp_up}
+ sts DSR,r4 ;!/* 0000nnnn01101010 sts DSR,<REG_N> */{"sts",{A_DSR,A_REG_N},{HEX_0,REG_N,HEX_6,HEX_A}, arch_sh_dsp_up}
+ sts A0,r4 ;!/* 0000nnnn01111010 sts A0,<REG_N> */{"sts",{A_A0,A_REG_N},{HEX_0,REG_N,HEX_7,HEX_A}, arch_sh_dsp_up}
+ sts X0,r4 ;!/* 0000nnnn10001010 sts X0,<REG_N> */{"sts",{A_X0,A_REG_N},{HEX_0,REG_N,HEX_8,HEX_A}, arch_sh_dsp_up}
+ sts X1,r4 ;!/* 0000nnnn10011010 sts X1,<REG_N> */{"sts",{A_X1,A_REG_N},{HEX_0,REG_N,HEX_9,HEX_A}, arch_sh_dsp_up}
+ sts Y0,r4 ;!/* 0000nnnn10101010 sts Y0,<REG_N> */{"sts",{A_Y0,A_REG_N},{HEX_0,REG_N,HEX_A,HEX_A}, arch_sh_dsp_up}
+ sts Y1,r4 ;!/* 0000nnnn10111010 sts Y1,<REG_N> */{"sts",{A_Y1,A_REG_N},{HEX_0,REG_N,HEX_B,HEX_A}, arch_sh_dsp_up}
+ sts.l DSR,@-r4 ;!/* 0100nnnn01100110 sts.l DSR,@-<REG_N> */{"sts.l",{A_DSR,A_DEC_N},{HEX_4,REG_N,HEX_6,HEX_2}, arch_sh_dsp_up}
+ sts.l A0,@-r4 ;!/* 0100nnnn01110110 sts.l A0,@-<REG_N> */{"sts.l",{A_A0,A_DEC_N},{HEX_4,REG_N,HEX_7,HEX_2}, arch_sh_dsp_up}
+ sts.l X0,@-r4 ;!/* 0100nnnn10000110 sts.l X0,@-<REG_N> */{"sts.l",{A_X0,A_DEC_N},{HEX_4,REG_N,HEX_8,HEX_2}, arch_sh_dsp_up}
+ sts.l X1,@-r4 ;!/* 0100nnnn10010110 sts.l X1,@-<REG_N> */{"sts.l",{A_X1,A_DEC_N},{HEX_4,REG_N,HEX_9,HEX_2}, arch_sh_dsp_up}
+ sts.l Y0,@-r4 ;!/* 0100nnnn10100110 sts.l Y0,@-<REG_N> */{"sts.l",{A_Y0,A_DEC_N},{HEX_4,REG_N,HEX_A,HEX_2}, arch_sh_dsp_up}
+ sts.l Y1,@-r4 ;!/* 0100nnnn10110110 sts.l Y1,@-<REG_N> */{"sts.l",{A_Y1,A_DEC_N},{HEX_4,REG_N,HEX_B,HEX_2}, arch_sh_dsp_up}
+ movs.w @-r4,a1 ;!/* 111101nnmmmm0000 movs.w @-<REG_N>,<DSP_REG_M> */ {"movs.w",{A_DEC_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_0}, arch_sh_dsp_up}
+ movs.w @r4,a1 ;!/* 111101nnmmmm0001 movs.w @<REG_N>,<DSP_REG_M> */ {"movs.w",{A_IND_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_4}, arch_sh_dsp_up}
+ movs.w @r4+,a1 ;!/* 111101nnmmmm0010 movs.w @<REG_N>+,<DSP_REG_M> */ {"movs.w",{A_INC_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_8}, arch_sh_dsp_up}
+ movs.w @r4+r8,a1 ;!/* 111101nnmmmm0011 movs.w @<REG_N>+r8,<DSP_REG_M> */ {"movs.w",{AS_PMOD_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_C}, arch_sh_dsp_up}
+ movs.w a1,@-r4 ;!/* 111101nnmmmm0100 movs.w <DSP_REG_M>,@-<REG_N> */ {"movs.w",{DSP_REG_M,A_DEC_N},{HEX_F,SDT_REG_N,REG_M,HEX_1}, arch_sh_dsp_up}
+ movs.w a1,@r4 ;!/* 111101nnmmmm0101 movs.w <DSP_REG_M>,@<REG_N> */ {"movs.w",{DSP_REG_M,A_IND_N},{HEX_F,SDT_REG_N,REG_M,HEX_5}, arch_sh_dsp_up}
+ movs.w a1,@r4+ ;!/* 111101nnmmmm0110 movs.w <DSP_REG_M>,@<REG_N>+ */ {"movs.w",{DSP_REG_M,A_INC_N},{HEX_F,SDT_REG_N,REG_M,HEX_9}, arch_sh_dsp_up}
+ movs.w a1,@r4+r8 ;!/* 111101nnmmmm0111 movs.w <DSP_REG_M>,@<REG_N>+r8 */ {"movs.w",{DSP_REG_M,AS_PMOD_N},{HEX_F,SDT_REG_N,REG_M,HEX_D}, arch_sh_dsp_up}
+ movs.l @-r4,a1 ;!/* 111101nnmmmm1000 movs.l @-<REG_N>,<DSP_REG_M> */ {"movs.l",{A_DEC_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_2}, arch_sh_dsp_up}
+ movs.l @r4,a1 ;!/* 111101nnmmmm1001 movs.l @<REG_N>,<DSP_REG_M> */ {"movs.l",{A_IND_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_6}, arch_sh_dsp_up}
+ movs.l @r4+,a1 ;!/* 111101nnmmmm1010 movs.l @<REG_N>+,<DSP_REG_M> */ {"movs.l",{A_INC_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_A}, arch_sh_dsp_up}
+ movs.l @r4+r8,a1 ;!/* 111101nnmmmm1011 movs.l @<REG_N>+r8,<DSP_REG_M> */ {"movs.l",{AS_PMOD_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_E}, arch_sh_dsp_up}
+ movs.l a1,@-r4 ;!/* 111101nnmmmm1100 movs.l <DSP_REG_M>,@-<REG_N> */ {"movs.l",{DSP_REG_M,A_DEC_N},{HEX_F,SDT_REG_N,REG_M,HEX_3}, arch_sh_dsp_up}
+ movs.l a1,@r4 ;!/* 111101nnmmmm1101 movs.l <DSP_REG_M>,@<REG_N> */ {"movs.l",{DSP_REG_M,A_IND_N},{HEX_F,SDT_REG_N,REG_M,HEX_7}, arch_sh_dsp_up}
+ movs.l a1,@r4+ ;!/* 111101nnmmmm1110 movs.l <DSP_REG_M>,@<REG_N>+ */ {"movs.l",{DSP_REG_M,A_INC_N},{HEX_F,SDT_REG_N,REG_M,HEX_B}, arch_sh_dsp_up}
+ movs.l a1,@r4+r8 ;!/* 111101nnmmmm1111 movs.l <DSP_REG_M>,@<REG_N>+r8 */ {"movs.l",{DSP_REG_M,AS_PMOD_N},{HEX_F,SDT_REG_N,REG_M,HEX_F}, arch_sh_dsp_up}
+ nopx ;!/* 0*0*0*00** nopx */ {"nopx",{0},{PPI,NOPX}, arch_sh_dsp_up}
+ nopy ;!/* *0*0*0**00 nopy */ {"nopy",{0},{PPI,NOPY}, arch_sh_dsp_up}
+ movx.w @r4,x1 ;!/* n*m*0*01** movx.w @<REG_N>,<DSP_REG_X> */ {"movx.w",{AX_IND_N,DSP_REG_X},{PPI,MOVX,HEX_1}, arch_sh_dsp_up}
+ movx.w @r4+,x1 ;!/* n*m*0*10** movx.w @<REG_N>+,<DSP_REG_X> */ {"movx.w",{AX_INC_N,DSP_REG_X},{PPI,MOVX,HEX_2}, arch_sh_dsp_up}
+ movx.w @r4+r8,x1 ;!/* n*m*0*11** movx.w @<REG_N>+r8,<DSP_REG_X> */ {"movx.w",{AX_PMOD_N,DSP_REG_X},{PPI,MOVX,HEX_3}, arch_sh_dsp_up}
+ movx.w a1,@r4 ;!/* n*m*1*01** movx.w <DSP_REG_M>,@<REG_N> */ {"movx.w",{DSP_REG_A_M,AX_IND_N},{PPI,MOVX,HEX_9}, arch_sh_dsp_up}
+ movx.w a1,@r4+ ;!/* n*m*1*10** movx.w <DSP_REG_M>,@<REG_N>+ */ {"movx.w",{DSP_REG_A_M,AX_INC_N},{PPI,MOVX,HEX_A}, arch_sh_dsp_up}
+ movx.w a1,@r4+r8 ;!/* n*m*1*11** movx.w <DSP_REG_M>,@<REG_N>+r8 */ {"movx.w",{DSP_REG_A_M,AX_PMOD_N},{PPI,MOVX,HEX_B}, arch_sh_dsp_up}
+ movy.w @r6,y0 ;!/* *n*m*0**01 movy.w @<REG_N>,<DSP_REG_Y> */ {"movy.w",{AY_IND_N,DSP_REG_Y},{PPI,MOVY,HEX_1}, arch_sh_dsp_up}
+ movy.w @r6+,y0 ;!/* *n*m*0**10 movy.w @<REG_N>+,<DSP_REG_Y> */ {"movy.w",{AY_INC_N,DSP_REG_Y},{PPI,MOVY,HEX_2}, arch_sh_dsp_up}
+ movy.w @r6+r9,y0 ;!/* *n*m*0**11 movy.w @<REG_N>+r9,<DSP_REG_Y> */ {"movy.w",{AY_PMOD_N,DSP_REG_Y},{PPI,MOVY,HEX_3}, arch_sh_dsp_up}
+ movy.w a1,@r6 ;!/* *n*m*1**01 movy.w <DSP_REG_M>,@<REG_N> */ {"movy.w",{DSP_REG_A_M,AY_IND_N},{PPI,MOVY,HEX_9}, arch_sh_dsp_up}
+ movy.w a1,@r6+ ;!/* *n*m*1**10 movy.w <DSP_REG_M>,@<REG_N>+ */ {"movy.w",{DSP_REG_A_M,AY_INC_N},{PPI,MOVY,HEX_A}, arch_sh_dsp_up}
+ movy.w a1,@r6+r9 ;!/* *n*m*1**11 movy.w <DSP_REG_M>,@<REG_N>+r9 */ {"movy.w",{DSP_REG_A_M,AY_PMOD_N},{PPI,MOVY,HEX_B}, arch_sh_dsp_up}
+ pmuls x0,y0,m0 ;!/* 01aaeeffxxyyggnn pmuls Se,Sf,Dg */ {"pmuls",{DSP_REG_E,DSP_REG_F,DSP_REG_G},{PPI,PMUL}, arch_sh_dsp_up}
+ psubc x1,y0,m0 ;!/* 10100000xxyynnnn psubc <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"psubc",{DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPI3,HEX_A,HEX_0}, arch_sh_dsp_up}
+ paddc x1,y0,m0 ;!/* 10110000xxyynnnn paddc <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"paddc",{DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPI3,HEX_B,HEX_0}, arch_sh_dsp_up}
+ pcmp x1,y0 ;!/* 10000100xxyynnnn pcmp <DSP_REG_X>,<DSP_REG_Y> */ {"pcmp", {DSP_REG_X,DSP_REG_Y},{PPI,PPI3,HEX_8,HEX_4}, arch_sh_dsp_up}
+ pwsb x1,y0,m0 ;!/* 10100100xxyynnnn pwsb <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"pwsb", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPI3,HEX_A,HEX_4}, arch_sh_dsp_up}
+ pwad x1,y0,m0 ;!/* 10110100xxyynnnn pwad <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"pwad", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPI3,HEX_B,HEX_4}, arch_sh_dsp_up}
+ pabs x1,m0 ;!/* 10001000xxyynnnn pabs <DSP_REG_X>,<DSP_REG_N> */ {"pabs", {DSP_REG_X,DSP_REG_N},{PPI,PPI3NC,HEX_8,HEX_8}, arch_sh_dsp_up}
+ pabs y0,m0 ;!/* 10101000xxyynnnn pabs <DSP_REG_Y>,<DSP_REG_N> */ {"pabs", {DSP_REG_Y,DSP_REG_N},{PPI,PPI3NC,HEX_A,HEX_8}, arch_sh_dsp_up}
+ prnd x1,m0 ;!/* 10011000xxyynnnn prnd <DSP_REG_X>,<DSP_REG_N> */ {"prnd", {DSP_REG_X,DSP_REG_N},{PPI,PPI3NC,HEX_9,HEX_8}, arch_sh_dsp_up}
+ prnd y0,m0 ;!/* 10111000xxyynnnn prnd <DSP_REG_Y>,<DSP_REG_N> */ {"prnd", {DSP_REG_Y,DSP_REG_N},{PPI,PPI3NC,HEX_B,HEX_8}, arch_sh_dsp_up}
+ dct pshl x1,y0,m0 ;!/* 10000001xxyynnnn pshl <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"pshl", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_8,HEX_1}, arch_sh_dsp_up}
+ pshl #4,m0 ;!/* 00000iiiiiiinnnn pshl #<imm>,<DSP_REG_N> */ {"pshl",{A_IMM,DSP_REG_N},{PPI,PSH,HEX_0}, arch_sh_dsp_up}
+ dct psha x1,y0,m0 ;!/* 10010001xxyynnnn psha <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"psha", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_9,HEX_1}, arch_sh_dsp_up}
+ psha #4,m0 ;!/* 00010iiiiiiinnnn psha #<imm>,<DSP_REG_N> */ {"psha",{A_IMM,DSP_REG_N},{PPI,PSH,HEX_1}, arch_sh_dsp_up}
+ dct psub x1,y0,m0 ;!/* 10100001xxyynnnn psub <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"psub", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_A,HEX_1}, arch_sh_dsp_up}
+ dct padd x1,y0,m0 ;!/* 10110001xxyynnnn padd <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"padd", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_B,HEX_1}, arch_sh_dsp_up}
+ dct pand x1,y0,m0 ;!/* 10010101xxyynnnn pand <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"pand", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_9,HEX_5}, arch_sh_dsp_up}
+ dct pxor x1,y0,m0 ;!/* 10100101xxyynnnn pxor <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"pxor", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_A,HEX_5}, arch_sh_dsp_up}
+ dct por x1,y0,m0 ;!/* 10110101xxyynnnn por <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"por", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_B,HEX_5}, arch_sh_dsp_up}
+ dct pdec x1,m0 ;!/* 10001001xxyynnnn pdec <DSP_REG_X>,<DSP_REG_N> */ {"pdec", {DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_8,HEX_9}, arch_sh_dsp_up}
+ dct pdec y0,m0 ;!/* 10101001xxyynnnn pdec <DSP_REG_Y>,<DSP_REG_N> */ {"pdec", {DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_A,HEX_9}, arch_sh_dsp_up}
+ dct pinc x1,m0 ;!/* 10011001xx00nnnn pinc <DSP_REG_X>,<DSP_REG_N> */ {"pinc", {DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_9,HEX_9,HEX_XX00}, arch_sh_dsp_up}
+ dct pinc y0,m0 ;!/* 1011100100yynnnn pinc <DSP_REG_Y>,<DSP_REG_N> */ {"pinc", {DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_B,HEX_9,HEX_00YY}, arch_sh_dsp_up}
+ dct pclr m0 ;!/* 10001101xxyynnnn pclr <DSP_REG_N> */ {"pclr", {DSP_REG_N},{PPI,PPIC,HEX_8,HEX_D}, arch_sh_dsp_up}
+ dct pdmsb x1,m0 ;!/* 10011101xx00nnnn pdmsb <DSP_REG_X>,<DSP_REG_N> */ {"pdmsb", {DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_9,HEX_D,HEX_XX00}, arch_sh_dsp_up}
+ dct pdmsb y0,m0 ;!/* 1011110100yynnnn pdmsb <DSP_REG_Y>,<DSP_REG_N> */ {"pdmsb", {DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_B,HEX_D,HEX_00YY}, arch_sh_dsp_up}
+ dct pneg x1,m0 ;!/* 11001001xxyynnnn pneg <DSP_REG_X>,<DSP_REG_N> */ {"pneg", {DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_C,HEX_9}, arch_sh_dsp_up}
+ dct pneg y0,m0 ;!/* 11101001xxyynnnn pneg <DSP_REG_Y>,<DSP_REG_N> */ {"pneg", {DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_E,HEX_9}, arch_sh_dsp_up}
+ dct pcopy x1,m0 ;!/* 11011001xxyynnnn pcopy <DSP_REG_X>,<DSP_REG_N> */ {"pcopy", {DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_D,HEX_9}, arch_sh_dsp_up}
+ dct pcopy y0,m0 ;!/* 11111001xxyynnnn pcopy <DSP_REG_Y>,<DSP_REG_N> */ {"pcopy", {DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_F,HEX_9}, arch_sh_dsp_up}
+ dct psts MACH,m0 ;!/* 11001101xxyynnnn psts MACH,<DSP_REG_N> */ {"psts", {A_MACH,DSP_REG_N},{PPI,PPIC,HEX_C,HEX_D}, arch_sh_dsp_up}
+ dct psts MACL,m0 ;!/* 11011101xxyynnnn psts MACL,<DSP_REG_N> */ {"psts", {A_MACL,DSP_REG_N},{PPI,PPIC,HEX_D,HEX_D}, arch_sh_dsp_up}
+ dct plds m0,MACH ;!/* 11101101xxyynnnn plds <DSP_REG_N>,MACH */ {"plds", {DSP_REG_N,A_MACH},{PPI,PPIC,HEX_E,HEX_D}, arch_sh_dsp_up}
+ dct plds m0,MACL ;!/* 11111101xxyynnnn plds <DSP_REG_N>,MACL */ {"plds", {DSP_REG_N,A_MACL},{PPI,PPIC,HEX_F,HEX_D}, arch_sh_dsp_up}
+
+! Instructions inherited from ancestors: sh sh2
+ add #4,r4 ;!/* 0111nnnni8*1.... add #<imm>,<REG_N> */{"add",{A_IMM,A_REG_N},{HEX_7,REG_N,IMM0_8}, arch_sh_up}
+ add r5,r4 ;!/* 0011nnnnmmmm1100 add <REG_M>,<REG_N> */{"add",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_C}, arch_sh_up}
+ addc r5,r4 ;!/* 0011nnnnmmmm1110 addc <REG_M>,<REG_N>*/{"addc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_E}, arch_sh_up}
+ addv r5,r4 ;!/* 0011nnnnmmmm1111 addv <REG_M>,<REG_N>*/{"addv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_F}, arch_sh_up}
+ and #4,R0 ;!/* 11001001i8*1.... and #<imm>,R0 */{"and",{A_IMM,A_R0},{HEX_C,HEX_9,IMM0_8}, arch_sh_up}
+ and r5,r4 ;!/* 0010nnnnmmmm1001 and <REG_M>,<REG_N> */{"and",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_9}, arch_sh_up}
+ and.b #4,@(R0,GBR) ;!/* 11001101i8*1.... and.b #<imm>,@(R0,GBR)*/{"and.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_D,IMM0_8}, arch_sh_up}
+ bra .+8 ;!/* 1010i12......... bra <bdisp12> */{"bra",{A_BDISP12},{HEX_A,BRANCH_12}, arch_sh_up}
+ bsr .+8 ;!/* 1011i12......... bsr <bdisp12> */{"bsr",{A_BDISP12},{HEX_B,BRANCH_12}, arch_sh_up}
+ bt .+8 ;!/* 10001001i8p1.... bt <bdisp8> */{"bt",{A_BDISP8},{HEX_8,HEX_9,BRANCH_8}, arch_sh_up}
+ bf .+8 ;!/* 10001011i8p1.... bf <bdisp8> */{"bf",{A_BDISP8},{HEX_8,HEX_B,BRANCH_8}, arch_sh_up}
+ bt.s .+8 ;!/* 10001101i8p1.... bt.s <bdisp8> */{"bt.s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bt/s .+8 ;!/* 10001101i8p1.... bt/s <bdisp8> */{"bt/s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bf.s .+8 ;!/* 10001111i8p1.... bf.s <bdisp8> */{"bf.s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ bf/s .+8 ;!/* 10001111i8p1.... bf/s <bdisp8> */{"bf/s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ clrmac ;!/* 0000000000101000 clrmac */{"clrmac",{0},{HEX_0,HEX_0,HEX_2,HEX_8}, arch_sh_up}
+ clrs ;!/* 0000000001001000 clrs */{"clrs",{0},{HEX_0,HEX_0,HEX_4,HEX_8}, arch_sh_up}
+ clrt ;!/* 0000000000001000 clrt */{"clrt",{0},{HEX_0,HEX_0,HEX_0,HEX_8}, arch_sh_up}
+ cmp/eq #4,R0 ;!/* 10001000i8*1.... cmp/eq #<imm>,R0 */{"cmp/eq",{A_IMM,A_R0},{HEX_8,HEX_8,IMM0_8}, arch_sh_up}
+ cmp/eq r5,r4 ;!/* 0011nnnnmmmm0000 cmp/eq <REG_M>,<REG_N>*/{"cmp/eq",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_0}, arch_sh_up}
+ cmp/ge r5,r4 ;!/* 0011nnnnmmmm0011 cmp/ge <REG_M>,<REG_N>*/{"cmp/ge",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_3}, arch_sh_up}
+ cmp/gt r5,r4 ;!/* 0011nnnnmmmm0111 cmp/gt <REG_M>,<REG_N>*/{"cmp/gt",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_7}, arch_sh_up}
+ cmp/hi r5,r4 ;!/* 0011nnnnmmmm0110 cmp/hi <REG_M>,<REG_N>*/{"cmp/hi",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_6}, arch_sh_up}
+ cmp/hs r5,r4 ;!/* 0011nnnnmmmm0010 cmp/hs <REG_M>,<REG_N>*/{"cmp/hs",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_2}, arch_sh_up}
+ cmp/pl r4 ;!/* 0100nnnn00010101 cmp/pl <REG_N> */{"cmp/pl",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_5}, arch_sh_up}
+ cmp/pz r4 ;!/* 0100nnnn00010001 cmp/pz <REG_N> */{"cmp/pz",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_1}, arch_sh_up}
+ cmp/str r5,r4 ;!/* 0010nnnnmmmm1100 cmp/str <REG_M>,<REG_N>*/{"cmp/str",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_C}, arch_sh_up}
+ div0s r5,r4 ;!/* 0010nnnnmmmm0111 div0s <REG_M>,<REG_N>*/{"div0s",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_7}, arch_sh_up}
+ div0u ;!/* 0000000000011001 div0u */{"div0u",{0},{HEX_0,HEX_0,HEX_1,HEX_9}, arch_sh_up}
+ div1 r5,r4 ;!/* 0011nnnnmmmm0100 div1 <REG_M>,<REG_N>*/{"div1",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_4}, arch_sh_up}
+ exts.b r5,r4 ;!/* 0110nnnnmmmm1110 exts.b <REG_M>,<REG_N>*/{"exts.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_E}, arch_sh_up}
+ exts.w r5,r4 ;!/* 0110nnnnmmmm1111 exts.w <REG_M>,<REG_N>*/{"exts.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_F}, arch_sh_up}
+ extu.b r5,r4 ;!/* 0110nnnnmmmm1100 extu.b <REG_M>,<REG_N>*/{"extu.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_C}, arch_sh_up}
+ extu.w r5,r4 ;!/* 0110nnnnmmmm1101 extu.w <REG_M>,<REG_N>*/{"extu.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_D}, arch_sh_up}
+ jmp @r4 ;!/* 0100nnnn00101011 jmp @<REG_N> */{"jmp",{A_IND_N},{HEX_4,REG_N,HEX_2,HEX_B}, arch_sh_up}
+ jsr @r4 ;!/* 0100nnnn00001011 jsr @<REG_N> */{"jsr",{A_IND_N},{HEX_4,REG_N,HEX_0,HEX_B}, arch_sh_up}
+ ldc r4,SR ;!/* 0100nnnn00001110 ldc <REG_N>,SR */{"ldc",{A_REG_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_E}, arch_sh_up}
+ ldc r4,GBR ;!/* 0100nnnn00011110 ldc <REG_N>,GBR */{"ldc",{A_REG_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_E}, arch_sh_up}
+ ldc r4,VBR ;!/* 0100nnnn00101110 ldc <REG_N>,VBR */{"ldc",{A_REG_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_E}, arch_sh_up}
+ ldc.l @r4+,SR ;!/* 0100nnnn00000111 ldc.l @<REG_N>+,SR */{"ldc.l",{A_INC_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_7}, arch_sh_up}
+ ldc.l @r4+,GBR ;!/* 0100nnnn00010111 ldc.l @<REG_N>+,GBR */{"ldc.l",{A_INC_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_7}, arch_sh_up}
+ ldc.l @r4+,VBR ;!/* 0100nnnn00100111 ldc.l @<REG_N>+,VBR */{"ldc.l",{A_INC_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_7}, arch_sh_up}
+ lds r4,MACH ;!/* 0100nnnn00001010 lds <REG_N>,MACH */{"lds",{A_REG_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ lds r4,MACL ;!/* 0100nnnn00011010 lds <REG_N>,MACL */{"lds",{A_REG_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ lds r4,PR ;!/* 0100nnnn00101010 lds <REG_N>,PR */{"lds",{A_REG_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ lds.l @r4+,MACH ;!/* 0100nnnn00000110 lds.l @<REG_N>+,MACH*/{"lds.l",{A_INC_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_6}, arch_sh_up}
+ lds.l @r4+,MACL ;!/* 0100nnnn00010110 lds.l @<REG_N>+,MACL*/{"lds.l",{A_INC_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_6}, arch_sh_up}
+ lds.l @r4+,PR ;!/* 0100nnnn00100110 lds.l @<REG_N>+,PR */{"lds.l",{A_INC_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_6}, arch_sh_up}
+ mac.w @r5+,@r4+ ;!/* 0100nnnnmmmm1111 mac.w @<REG_M>+,@<REG_N>+*/{"mac.w",{A_INC_M,A_INC_N},{HEX_4,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mov #4,r4 ;!/* 1110nnnni8*1.... mov #<imm>,<REG_N> */{"mov",{A_IMM,A_REG_N},{HEX_E,REG_N,IMM0_8}, arch_sh_up}
+ mov r5,r4 ;!/* 0110nnnnmmmm0011 mov <REG_M>,<REG_N> */{"mov",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_3}, arch_sh_up}
+ mov.b r5,@(R0,r4) ;!/* 0000nnnnmmmm0100 mov.b <REG_M>,@(R0,<REG_N>)*/{"mov.b",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@-r4 ;!/* 0010nnnnmmmm0100 mov.b <REG_M>,@-<REG_N>*/{"mov.b",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@r4 ;!/* 0010nnnnmmmm0000 mov.b <REG_M>,@<REG_N>*/{"mov.b",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b @(8,r5),R0 ;!/* 10000100mmmmi4*1 mov.b @(<disp>,<REG_M>),R0*/{"mov.b",{A_DISP_REG_M,A_R0},{HEX_8,HEX_4,REG_M,IMM0_4}, arch_sh_up}
+ mov.b @(8,GBR),R0 ;!/* 11000100i8*1.... mov.b @(<disp>,GBR),R0*/{"mov.b",{A_DISP_GBR,A_R0},{HEX_C,HEX_4,IMM0_8}, arch_sh_up}
+ mov.b @(R0,r5),r4 ;!/* 0000nnnnmmmm1100 mov.b @(R0,<REG_M>),<REG_N>*/{"mov.b",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_C}, arch_sh_up}
+ mov.b @r5+,r4 ;!/* 0110nnnnmmmm0100 mov.b @<REG_M>+,<REG_N>*/{"mov.b",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b @r5,r4 ;!/* 0110nnnnmmmm0000 mov.b @<REG_M>,<REG_N>*/{"mov.b",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b R0,@(8,r5) ;!/* 10000000mmmmi4*1 mov.b R0,@(<disp>,<REG_M>)*/{"mov.b",{A_R0,A_DISP_REG_M},{HEX_8,HEX_0,REG_M,IMM1_4}, arch_sh_up}
+ mov.b R0,@(8,GBR) ;!/* 11000000i8*1.... mov.b R0,@(<disp>,GBR)*/{"mov.b",{A_R0,A_DISP_GBR},{HEX_C,HEX_0,IMM1_8}, arch_sh_up}
+ mov.l r5,@(8,r4) ;!/* 0001nnnnmmmmi4*4 mov.l <REG_M>,@(<disp>,<REG_N>)*/{"mov.l",{ A_REG_M,A_DISP_REG_N},{HEX_1,REG_N,REG_M,IMM1_4BY4}, arch_sh_up}
+ mov.l r5,@(R0,r4) ;!/* 0000nnnnmmmm0110 mov.l <REG_M>,@(R0,<REG_N>)*/{"mov.l",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@-r4 ;!/* 0010nnnnmmmm0110 mov.l <REG_M>,@-<REG_N>*/{"mov.l",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@r4 ;!/* 0010nnnnmmmm0010 mov.l <REG_M>,@<REG_N>*/{"mov.l",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l @(8,r5),r4 ;!/* 0101nnnnmmmmi4*4 mov.l @(<disp>,<REG_M>),<REG_N>*/{"mov.l",{A_DISP_REG_M,A_REG_N},{HEX_5,REG_N,REG_M,IMM0_4BY4}, arch_sh_up}
+ mov.l @(8,GBR),R0 ;!/* 11000110i8*4.... mov.l @(<disp>,GBR),R0*/{"mov.l",{A_DISP_GBR,A_R0},{HEX_C,HEX_6,IMM0_8BY4}, arch_sh_up}
+ .align 2
+ mov.l @(8,PC),r4 ;!/* 1101nnnni8p4.... mov.l @(<disp>,PC),<REG_N>*/{"mov.l",{A_DISP_PC,A_REG_N},{HEX_D,REG_N,PCRELIMM_8BY4}, arch_sh_up}
+ mov.l @(R0,r5),r4 ;!/* 0000nnnnmmmm1110 mov.l @(R0,<REG_M>),<REG_N>*/{"mov.l",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mov.l @r5+,r4 ;!/* 0110nnnnmmmm0110 mov.l @<REG_M>+,<REG_N>*/{"mov.l",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l @r5,r4 ;!/* 0110nnnnmmmm0010 mov.l @<REG_M>,<REG_N>*/{"mov.l",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l R0,@(8,GBR) ;!/* 11000010i8*4.... mov.l R0,@(<disp>,GBR)*/{"mov.l",{A_R0,A_DISP_GBR},{HEX_C,HEX_2,IMM1_8BY4}, arch_sh_up}
+ mov.w r5,@(R0,r4) ;!/* 0000nnnnmmmm0101 mov.w <REG_M>,@(R0,<REG_N>)*/{"mov.w",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@-r4 ;!/* 0010nnnnmmmm0101 mov.w <REG_M>,@-<REG_N>*/{"mov.w",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@r4 ;!/* 0010nnnnmmmm0001 mov.w <REG_M>,@<REG_N>*/{"mov.w",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w @(8,r5),R0 ;!/* 10000101mmmmi4*2 mov.w @(<disp>,<REG_M>),R0*/{"mov.w",{A_DISP_REG_M,A_R0},{HEX_8,HEX_5,REG_M,IMM0_4BY2}, arch_sh_up}
+ mov.w @(8,GBR),R0 ;!/* 11000101i8*2.... mov.w @(<disp>,GBR),R0*/{"mov.w",{A_DISP_GBR,A_R0},{HEX_C,HEX_5,IMM0_8BY2}, arch_sh_up}
+ mov.w @(8,PC),r4 ;!/* 1001nnnni8p2.... mov.w @(<disp>,PC),<REG_N>*/{"mov.w",{A_DISP_PC,A_REG_N},{HEX_9,REG_N,PCRELIMM_8BY2}, arch_sh_up}
+ mov.w @(R0,r5),r4 ;!/* 0000nnnnmmmm1101 mov.w @(R0,<REG_M>),<REG_N>*/{"mov.w",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_D}, arch_sh_up}
+ mov.w @r5+,r4 ;!/* 0110nnnnmmmm0101 mov.w @<REG_M>+,<REG_N>*/{"mov.w",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w @r5,r4 ;!/* 0110nnnnmmmm0001 mov.w @<REG_M>,<REG_N>*/{"mov.w",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w R0,@(8,r5) ;!/* 10000001mmmmi4*2 mov.w R0,@(<disp>,<REG_M>)*/{"mov.w",{A_R0,A_DISP_REG_M},{HEX_8,HEX_1,REG_M,IMM1_4BY2}, arch_sh_up}
+ mov.w R0,@(8,GBR) ;!/* 11000001i8*2.... mov.w R0,@(<disp>,GBR)*/{"mov.w",{A_R0,A_DISP_GBR},{HEX_C,HEX_1,IMM1_8BY2}, arch_sh_up}
+ .align 2
+ mova @(8,PC),R0 ;!/* 11000111i8p4.... mova @(<disp>,PC),R0*/{"mova",{A_DISP_PC,A_R0},{HEX_C,HEX_7,PCRELIMM_8BY4}, arch_sh_up}
+ movt r4 ;!/* 0000nnnn00101001 movt <REG_N> */{"movt",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ muls.w r5,r4 ;!/* 0010nnnnmmmm1111 muls.w <REG_M>,<REG_N>*/{"muls.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ muls r5,r4 ;!/* 0010nnnnmmmm1111 muls <REG_M>,<REG_N>*/{"muls",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mul.l r5,r4 ;!/* 0000nnnnmmmm0111 mul.l <REG_M>,<REG_N>*/{"mul.l",{ A_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_7}, arch_sh2_up}
+ mulu.w r5,r4 ;!/* 0010nnnnmmmm1110 mulu.w <REG_M>,<REG_N>*/{"mulu.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mulu r5,r4 ;!/* 0010nnnnmmmm1110 mulu <REG_M>,<REG_N>*/{"mulu",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ neg r5,r4 ;!/* 0110nnnnmmmm1011 neg <REG_M>,<REG_N> */{"neg",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_B}, arch_sh_up}
+ negc r5,r4 ;!/* 0110nnnnmmmm1010 negc <REG_M>,<REG_N>*/{"negc",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_A}, arch_sh_up}
+ nop ;!/* 0000000000001001 nop */{"nop",{0},{HEX_0,HEX_0,HEX_0,HEX_9}, arch_sh_up}
+ not r5,r4 ;!/* 0110nnnnmmmm0111 not <REG_M>,<REG_N> */{"not",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_7}, arch_sh_up}
+ or #4,R0 ;!/* 11001011i8*1.... or #<imm>,R0 */{"or",{A_IMM,A_R0},{HEX_C,HEX_B,IMM0_8}, arch_sh_up}
+ or r5,r4 ;!/* 0010nnnnmmmm1011 or <REG_M>,<REG_N> */{"or",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_B}, arch_sh_up}
+ or.b #4,@(R0,GBR) ;!/* 11001111i8*1.... or.b #<imm>,@(R0,GBR)*/{"or.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_F,IMM0_8}, arch_sh_up}
+ rotcl r4 ;!/* 0100nnnn00100100 rotcl <REG_N> */{"rotcl",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_4}, arch_sh_up}
+ rotcr r4 ;!/* 0100nnnn00100101 rotcr <REG_N> */{"rotcr",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_5}, arch_sh_up}
+ rotl r4 ;!/* 0100nnnn00000100 rotl <REG_N> */{"rotl",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_4}, arch_sh_up}
+ rotr r4 ;!/* 0100nnnn00000101 rotr <REG_N> */{"rotr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_5}, arch_sh_up}
+ rte ;!/* 0000000000101011 rte */{"rte",{0},{HEX_0,HEX_0,HEX_2,HEX_B}, arch_sh_up}
+ rts ;!/* 0000000000001011 rts */{"rts",{0},{HEX_0,HEX_0,HEX_0,HEX_B}, arch_sh_up}
+ sets ;!/* 0000000001011000 sets */{"sets",{0},{HEX_0,HEX_0,HEX_5,HEX_8}, arch_sh_up}
+ sett ;!/* 0000000000011000 sett */{"sett",{0},{HEX_0,HEX_0,HEX_1,HEX_8}, arch_sh_up}
+ shal r4 ;!/* 0100nnnn00100000 shal <REG_N> */{"shal",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_0}, arch_sh_up}
+ shar r4 ;!/* 0100nnnn00100001 shar <REG_N> */{"shar",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_1}, arch_sh_up}
+ shll r4 ;!/* 0100nnnn00000000 shll <REG_N> */{"shll",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_0}, arch_sh_up}
+ shll16 r4 ;!/* 0100nnnn00101000 shll16 <REG_N> */{"shll16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_8}, arch_sh_up}
+ shll2 r4 ;!/* 0100nnnn00001000 shll2 <REG_N> */{"shll2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_8}, arch_sh_up}
+ shll8 r4 ;!/* 0100nnnn00011000 shll8 <REG_N> */{"shll8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_8}, arch_sh_up}
+ shlr r4 ;!/* 0100nnnn00000001 shlr <REG_N> */{"shlr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_1}, arch_sh_up}
+ shlr16 r4 ;!/* 0100nnnn00101001 shlr16 <REG_N> */{"shlr16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ shlr2 r4 ;!/* 0100nnnn00001001 shlr2 <REG_N> */{"shlr2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_9}, arch_sh_up}
+ shlr8 r4 ;!/* 0100nnnn00011001 shlr8 <REG_N> */{"shlr8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_9}, arch_sh_up}
+ sleep ;!/* 0000000000011011 sleep */{"sleep",{0},{HEX_0,HEX_0,HEX_1,HEX_B}, arch_sh_up}
+ stc SR,r4 ;!/* 0000nnnn00000010 stc SR,<REG_N> */{"stc",{A_SR,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ stc GBR,r4 ;!/* 0000nnnn00010010 stc GBR,<REG_N> */{"stc",{A_GBR,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ stc VBR,r4 ;!/* 0000nnnn00100010 stc VBR,<REG_N> */{"stc",{A_VBR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ stc.l SR,@-r4 ;!/* 0100nnnn00000011 stc.l SR,@-<REG_N> */{"stc.l",{A_SR,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_3}, arch_sh_up}
+ stc.l VBR,@-r4 ;!/* 0100nnnn00100011 stc.l VBR,@-<REG_N> */{"stc.l",{A_VBR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_3}, arch_sh_up}
+ stc.l GBR,@-r4 ;!/* 0100nnnn00010011 stc.l GBR,@-<REG_N> */{"stc.l",{A_GBR,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_3}, arch_sh_up}
+ sts MACH,r4 ;!/* 0000nnnn00001010 sts MACH,<REG_N> */{"sts",{A_MACH,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ sts MACL,r4 ;!/* 0000nnnn00011010 sts MACL,<REG_N> */{"sts",{A_MACL,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ sts PR,r4 ;!/* 0000nnnn00101010 sts PR,<REG_N> */{"sts",{A_PR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ sts.l MACH,@-r4 ;!/* 0100nnnn00000010 sts.l MACH,@-<REG_N>*/{"sts.l",{A_MACH,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ sts.l MACL,@-r4 ;!/* 0100nnnn00010010 sts.l MACL,@-<REG_N>*/{"sts.l",{A_MACL,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ sts.l PR,@-r4 ;!/* 0100nnnn00100010 sts.l PR,@-<REG_N> */{"sts.l",{A_PR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ sub r5,r4 ;!/* 0011nnnnmmmm1000 sub <REG_M>,<REG_N> */{"sub",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_8}, arch_sh_up}
+ subc r5,r4 ;!/* 0011nnnnmmmm1010 subc <REG_M>,<REG_N>*/{"subc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_A}, arch_sh_up}
+ subv r5,r4 ;!/* 0011nnnnmmmm1011 subv <REG_M>,<REG_N>*/{"subv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_B}, arch_sh_up}
+ swap.b r5,r4 ;!/* 0110nnnnmmmm1000 swap.b <REG_M>,<REG_N>*/{"swap.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_8}, arch_sh_up}
+ swap.w r5,r4 ;!/* 0110nnnnmmmm1001 swap.w <REG_M>,<REG_N>*/{"swap.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_9}, arch_sh_up}
+ tas.b @r4 ;!/* 0100nnnn00011011 tas.b @<REG_N> */{"tas.b",{A_IND_N},{HEX_4,REG_N,HEX_1,HEX_B}, arch_sh_up}
+ trapa #4 ;!/* 11000011i8*1.... trapa #<imm> */{"trapa",{A_IMM},{HEX_C,HEX_3,IMM0_8}, arch_sh_up}
+ tst #4,R0 ;!/* 11001000i8*1.... tst #<imm>,R0 */{"tst",{A_IMM,A_R0},{HEX_C,HEX_8,IMM0_8}, arch_sh_up}
+ tst r5,r4 ;!/* 0010nnnnmmmm1000 tst <REG_M>,<REG_N> */{"tst",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_8}, arch_sh_up}
+ tst.b #4,@(R0,GBR) ;!/* 11001100i8*1.... tst.b #<imm>,@(R0,GBR)*/{"tst.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_C,IMM0_8}, arch_sh_up}
+ xor #4,R0 ;!/* 11001010i8*1.... xor #<imm>,R0 */{"xor",{A_IMM,A_R0},{HEX_C,HEX_A,IMM0_8}, arch_sh_up}
+ xor r5,r4 ;!/* 0010nnnnmmmm1010 xor <REG_M>,<REG_N> */{"xor",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_A}, arch_sh_up}
+ xor.b #4,@(R0,GBR) ;!/* 11001110i8*1.... xor.b #<imm>,@(R0,GBR)*/{"xor.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_E,IMM0_8}, arch_sh_up}
+ xtrct r5,r4 ;!/* 0010nnnnmmmm1101 xtrct <REG_M>,<REG_N>*/{"xtrct",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_D}, arch_sh_up}
+ dt r4 ;!/* 0100nnnn00010000 dt <REG_N> */{"dt",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_0}, arch_sh2_up}
+ dmuls.l r5,r4 ;!/* 0011nnnnmmmm1101 dmuls.l <REG_M>,<REG_N>*/{"dmuls.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_D}, arch_sh2_up}
+ dmulu.l r5,r4 ;!/* 0011nnnnmmmm0101 dmulu.l <REG_M>,<REG_N>*/{"dmulu.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_5}, arch_sh2_up}
+ mac.l @r5+,@r4+ ;!/* 0000nnnnmmmm1111 mac.l @<REG_M>+,@<REG_N>+*/{"mac.l",{A_INC_M,A_INC_N},{HEX_0,REG_N,REG_M,HEX_F}, arch_sh2_up}
+ braf r4 ;!/* 0000nnnn00100011 braf <REG_N> */{"braf",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_3}, arch_sh2_up}
+ bsrf r4 ;!/* 0000nnnn00000011 bsrf <REG_N> */{"bsrf",{A_REG_N},{HEX_0,REG_N,HEX_0,HEX_3}, arch_sh2_up}
diff --git a/binutils-2.21/ld/testsuite/ld-sh/arch/sh.s b/binutils-2.21/ld/testsuite/ld-sh/arch/sh.s
new file mode 100644
index 0000000..86de648
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/arch/sh.s
@@ -0,0 +1,155 @@
+! Generated file. DO NOT EDIT.
+!
+! This file was generated by gas/testsuite/gas/sh/arch/arch.exp .
+! This file should contain every instruction valid on
+! architecture sh but no more.
+! If the tests are failing because the expected results
+! have changed then run 'make check' and copy the new file
+! from <objdir>/gas/testsuite/sh.s
+! to <srcdir>/gas/testsuite/gas/sh/arch/sh.s .
+! Make sure there are no unexpected or missing instructions.
+
+ .section .text
+sh:
+! Instructions introduced into sh
+ add #4,r4 ;!/* 0111nnnni8*1.... add #<imm>,<REG_N> */{"add",{A_IMM,A_REG_N},{HEX_7,REG_N,IMM0_8}, arch_sh_up}
+ add r5,r4 ;!/* 0011nnnnmmmm1100 add <REG_M>,<REG_N> */{"add",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_C}, arch_sh_up}
+ addc r5,r4 ;!/* 0011nnnnmmmm1110 addc <REG_M>,<REG_N>*/{"addc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_E}, arch_sh_up}
+ addv r5,r4 ;!/* 0011nnnnmmmm1111 addv <REG_M>,<REG_N>*/{"addv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_F}, arch_sh_up}
+ and #4,R0 ;!/* 11001001i8*1.... and #<imm>,R0 */{"and",{A_IMM,A_R0},{HEX_C,HEX_9,IMM0_8}, arch_sh_up}
+ and r5,r4 ;!/* 0010nnnnmmmm1001 and <REG_M>,<REG_N> */{"and",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_9}, arch_sh_up}
+ and.b #4,@(R0,GBR) ;!/* 11001101i8*1.... and.b #<imm>,@(R0,GBR)*/{"and.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_D,IMM0_8}, arch_sh_up}
+ bra .+8 ;!/* 1010i12......... bra <bdisp12> */{"bra",{A_BDISP12},{HEX_A,BRANCH_12}, arch_sh_up}
+ bsr .+8 ;!/* 1011i12......... bsr <bdisp12> */{"bsr",{A_BDISP12},{HEX_B,BRANCH_12}, arch_sh_up}
+ bt .+8 ;!/* 10001001i8p1.... bt <bdisp8> */{"bt",{A_BDISP8},{HEX_8,HEX_9,BRANCH_8}, arch_sh_up}
+ bf .+8 ;!/* 10001011i8p1.... bf <bdisp8> */{"bf",{A_BDISP8},{HEX_8,HEX_B,BRANCH_8}, arch_sh_up}
+ clrmac ;!/* 0000000000101000 clrmac */{"clrmac",{0},{HEX_0,HEX_0,HEX_2,HEX_8}, arch_sh_up}
+ clrs ;!/* 0000000001001000 clrs */{"clrs",{0},{HEX_0,HEX_0,HEX_4,HEX_8}, arch_sh_up}
+ clrt ;!/* 0000000000001000 clrt */{"clrt",{0},{HEX_0,HEX_0,HEX_0,HEX_8}, arch_sh_up}
+ cmp/eq #4,R0 ;!/* 10001000i8*1.... cmp/eq #<imm>,R0 */{"cmp/eq",{A_IMM,A_R0},{HEX_8,HEX_8,IMM0_8}, arch_sh_up}
+ cmp/eq r5,r4 ;!/* 0011nnnnmmmm0000 cmp/eq <REG_M>,<REG_N>*/{"cmp/eq",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_0}, arch_sh_up}
+ cmp/ge r5,r4 ;!/* 0011nnnnmmmm0011 cmp/ge <REG_M>,<REG_N>*/{"cmp/ge",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_3}, arch_sh_up}
+ cmp/gt r5,r4 ;!/* 0011nnnnmmmm0111 cmp/gt <REG_M>,<REG_N>*/{"cmp/gt",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_7}, arch_sh_up}
+ cmp/hi r5,r4 ;!/* 0011nnnnmmmm0110 cmp/hi <REG_M>,<REG_N>*/{"cmp/hi",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_6}, arch_sh_up}
+ cmp/hs r5,r4 ;!/* 0011nnnnmmmm0010 cmp/hs <REG_M>,<REG_N>*/{"cmp/hs",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_2}, arch_sh_up}
+ cmp/pl r4 ;!/* 0100nnnn00010101 cmp/pl <REG_N> */{"cmp/pl",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_5}, arch_sh_up}
+ cmp/pz r4 ;!/* 0100nnnn00010001 cmp/pz <REG_N> */{"cmp/pz",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_1}, arch_sh_up}
+ cmp/str r5,r4 ;!/* 0010nnnnmmmm1100 cmp/str <REG_M>,<REG_N>*/{"cmp/str",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_C}, arch_sh_up}
+ div0s r5,r4 ;!/* 0010nnnnmmmm0111 div0s <REG_M>,<REG_N>*/{"div0s",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_7}, arch_sh_up}
+ div0u ;!/* 0000000000011001 div0u */{"div0u",{0},{HEX_0,HEX_0,HEX_1,HEX_9}, arch_sh_up}
+ div1 r5,r4 ;!/* 0011nnnnmmmm0100 div1 <REG_M>,<REG_N>*/{"div1",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_4}, arch_sh_up}
+ exts.b r5,r4 ;!/* 0110nnnnmmmm1110 exts.b <REG_M>,<REG_N>*/{"exts.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_E}, arch_sh_up}
+ exts.w r5,r4 ;!/* 0110nnnnmmmm1111 exts.w <REG_M>,<REG_N>*/{"exts.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_F}, arch_sh_up}
+ extu.b r5,r4 ;!/* 0110nnnnmmmm1100 extu.b <REG_M>,<REG_N>*/{"extu.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_C}, arch_sh_up}
+ extu.w r5,r4 ;!/* 0110nnnnmmmm1101 extu.w <REG_M>,<REG_N>*/{"extu.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_D}, arch_sh_up}
+ jmp @r4 ;!/* 0100nnnn00101011 jmp @<REG_N> */{"jmp",{A_IND_N},{HEX_4,REG_N,HEX_2,HEX_B}, arch_sh_up}
+ jsr @r4 ;!/* 0100nnnn00001011 jsr @<REG_N> */{"jsr",{A_IND_N},{HEX_4,REG_N,HEX_0,HEX_B}, arch_sh_up}
+ ldc r4,SR ;!/* 0100nnnn00001110 ldc <REG_N>,SR */{"ldc",{A_REG_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_E}, arch_sh_up}
+ ldc r4,GBR ;!/* 0100nnnn00011110 ldc <REG_N>,GBR */{"ldc",{A_REG_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_E}, arch_sh_up}
+ ldc r4,VBR ;!/* 0100nnnn00101110 ldc <REG_N>,VBR */{"ldc",{A_REG_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_E}, arch_sh_up}
+ ldc.l @r4+,SR ;!/* 0100nnnn00000111 ldc.l @<REG_N>+,SR */{"ldc.l",{A_INC_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_7}, arch_sh_up}
+ ldc.l @r4+,GBR ;!/* 0100nnnn00010111 ldc.l @<REG_N>+,GBR */{"ldc.l",{A_INC_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_7}, arch_sh_up}
+ ldc.l @r4+,VBR ;!/* 0100nnnn00100111 ldc.l @<REG_N>+,VBR */{"ldc.l",{A_INC_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_7}, arch_sh_up}
+ lds r4,MACH ;!/* 0100nnnn00001010 lds <REG_N>,MACH */{"lds",{A_REG_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ lds r4,MACL ;!/* 0100nnnn00011010 lds <REG_N>,MACL */{"lds",{A_REG_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ lds r4,PR ;!/* 0100nnnn00101010 lds <REG_N>,PR */{"lds",{A_REG_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ lds.l @r4+,MACH ;!/* 0100nnnn00000110 lds.l @<REG_N>+,MACH*/{"lds.l",{A_INC_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_6}, arch_sh_up}
+ lds.l @r4+,MACL ;!/* 0100nnnn00010110 lds.l @<REG_N>+,MACL*/{"lds.l",{A_INC_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_6}, arch_sh_up}
+ lds.l @r4+,PR ;!/* 0100nnnn00100110 lds.l @<REG_N>+,PR */{"lds.l",{A_INC_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_6}, arch_sh_up}
+ mac.w @r5+,@r4+ ;!/* 0100nnnnmmmm1111 mac.w @<REG_M>+,@<REG_N>+*/{"mac.w",{A_INC_M,A_INC_N},{HEX_4,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mov #4,r4 ;!/* 1110nnnni8*1.... mov #<imm>,<REG_N> */{"mov",{A_IMM,A_REG_N},{HEX_E,REG_N,IMM0_8}, arch_sh_up}
+ mov r5,r4 ;!/* 0110nnnnmmmm0011 mov <REG_M>,<REG_N> */{"mov",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_3}, arch_sh_up}
+ mov.b r5,@(R0,r4) ;!/* 0000nnnnmmmm0100 mov.b <REG_M>,@(R0,<REG_N>)*/{"mov.b",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@-r4 ;!/* 0010nnnnmmmm0100 mov.b <REG_M>,@-<REG_N>*/{"mov.b",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@r4 ;!/* 0010nnnnmmmm0000 mov.b <REG_M>,@<REG_N>*/{"mov.b",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b @(8,r5),R0 ;!/* 10000100mmmmi4*1 mov.b @(<disp>,<REG_M>),R0*/{"mov.b",{A_DISP_REG_M,A_R0},{HEX_8,HEX_4,REG_M,IMM0_4}, arch_sh_up}
+ mov.b @(8,GBR),R0 ;!/* 11000100i8*1.... mov.b @(<disp>,GBR),R0*/{"mov.b",{A_DISP_GBR,A_R0},{HEX_C,HEX_4,IMM0_8}, arch_sh_up}
+ mov.b @(R0,r5),r4 ;!/* 0000nnnnmmmm1100 mov.b @(R0,<REG_M>),<REG_N>*/{"mov.b",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_C}, arch_sh_up}
+ mov.b @r5+,r4 ;!/* 0110nnnnmmmm0100 mov.b @<REG_M>+,<REG_N>*/{"mov.b",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b @r5,r4 ;!/* 0110nnnnmmmm0000 mov.b @<REG_M>,<REG_N>*/{"mov.b",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b R0,@(8,r5) ;!/* 10000000mmmmi4*1 mov.b R0,@(<disp>,<REG_M>)*/{"mov.b",{A_R0,A_DISP_REG_M},{HEX_8,HEX_0,REG_M,IMM1_4}, arch_sh_up}
+ mov.b R0,@(8,GBR) ;!/* 11000000i8*1.... mov.b R0,@(<disp>,GBR)*/{"mov.b",{A_R0,A_DISP_GBR},{HEX_C,HEX_0,IMM1_8}, arch_sh_up}
+ mov.l r5,@(8,r4) ;!/* 0001nnnnmmmmi4*4 mov.l <REG_M>,@(<disp>,<REG_N>)*/{"mov.l",{ A_REG_M,A_DISP_REG_N},{HEX_1,REG_N,REG_M,IMM1_4BY4}, arch_sh_up}
+ mov.l r5,@(R0,r4) ;!/* 0000nnnnmmmm0110 mov.l <REG_M>,@(R0,<REG_N>)*/{"mov.l",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@-r4 ;!/* 0010nnnnmmmm0110 mov.l <REG_M>,@-<REG_N>*/{"mov.l",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@r4 ;!/* 0010nnnnmmmm0010 mov.l <REG_M>,@<REG_N>*/{"mov.l",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l @(8,r5),r4 ;!/* 0101nnnnmmmmi4*4 mov.l @(<disp>,<REG_M>),<REG_N>*/{"mov.l",{A_DISP_REG_M,A_REG_N},{HEX_5,REG_N,REG_M,IMM0_4BY4}, arch_sh_up}
+ mov.l @(8,GBR),R0 ;!/* 11000110i8*4.... mov.l @(<disp>,GBR),R0*/{"mov.l",{A_DISP_GBR,A_R0},{HEX_C,HEX_6,IMM0_8BY4}, arch_sh_up}
+ .align 2
+ mov.l @(8,PC),r4 ;!/* 1101nnnni8p4.... mov.l @(<disp>,PC),<REG_N>*/{"mov.l",{A_DISP_PC,A_REG_N},{HEX_D,REG_N,PCRELIMM_8BY4}, arch_sh_up}
+ mov.l @(R0,r5),r4 ;!/* 0000nnnnmmmm1110 mov.l @(R0,<REG_M>),<REG_N>*/{"mov.l",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mov.l @r5+,r4 ;!/* 0110nnnnmmmm0110 mov.l @<REG_M>+,<REG_N>*/{"mov.l",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l @r5,r4 ;!/* 0110nnnnmmmm0010 mov.l @<REG_M>,<REG_N>*/{"mov.l",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l R0,@(8,GBR) ;!/* 11000010i8*4.... mov.l R0,@(<disp>,GBR)*/{"mov.l",{A_R0,A_DISP_GBR},{HEX_C,HEX_2,IMM1_8BY4}, arch_sh_up}
+ mov.w r5,@(R0,r4) ;!/* 0000nnnnmmmm0101 mov.w <REG_M>,@(R0,<REG_N>)*/{"mov.w",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@-r4 ;!/* 0010nnnnmmmm0101 mov.w <REG_M>,@-<REG_N>*/{"mov.w",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@r4 ;!/* 0010nnnnmmmm0001 mov.w <REG_M>,@<REG_N>*/{"mov.w",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w @(8,r5),R0 ;!/* 10000101mmmmi4*2 mov.w @(<disp>,<REG_M>),R0*/{"mov.w",{A_DISP_REG_M,A_R0},{HEX_8,HEX_5,REG_M,IMM0_4BY2}, arch_sh_up}
+ mov.w @(8,GBR),R0 ;!/* 11000101i8*2.... mov.w @(<disp>,GBR),R0*/{"mov.w",{A_DISP_GBR,A_R0},{HEX_C,HEX_5,IMM0_8BY2}, arch_sh_up}
+ mov.w @(8,PC),r4 ;!/* 1001nnnni8p2.... mov.w @(<disp>,PC),<REG_N>*/{"mov.w",{A_DISP_PC,A_REG_N},{HEX_9,REG_N,PCRELIMM_8BY2}, arch_sh_up}
+ mov.w @(R0,r5),r4 ;!/* 0000nnnnmmmm1101 mov.w @(R0,<REG_M>),<REG_N>*/{"mov.w",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_D}, arch_sh_up}
+ mov.w @r5+,r4 ;!/* 0110nnnnmmmm0101 mov.w @<REG_M>+,<REG_N>*/{"mov.w",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w @r5,r4 ;!/* 0110nnnnmmmm0001 mov.w @<REG_M>,<REG_N>*/{"mov.w",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w R0,@(8,r5) ;!/* 10000001mmmmi4*2 mov.w R0,@(<disp>,<REG_M>)*/{"mov.w",{A_R0,A_DISP_REG_M},{HEX_8,HEX_1,REG_M,IMM1_4BY2}, arch_sh_up}
+ mov.w R0,@(8,GBR) ;!/* 11000001i8*2.... mov.w R0,@(<disp>,GBR)*/{"mov.w",{A_R0,A_DISP_GBR},{HEX_C,HEX_1,IMM1_8BY2}, arch_sh_up}
+ .align 2
+ mova @(8,PC),R0 ;!/* 11000111i8p4.... mova @(<disp>,PC),R0*/{"mova",{A_DISP_PC,A_R0},{HEX_C,HEX_7,PCRELIMM_8BY4}, arch_sh_up}
+ movt r4 ;!/* 0000nnnn00101001 movt <REG_N> */{"movt",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ muls.w r5,r4 ;!/* 0010nnnnmmmm1111 muls.w <REG_M>,<REG_N>*/{"muls.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ muls r5,r4 ;!/* 0010nnnnmmmm1111 muls <REG_M>,<REG_N>*/{"muls",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mulu.w r5,r4 ;!/* 0010nnnnmmmm1110 mulu.w <REG_M>,<REG_N>*/{"mulu.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mulu r5,r4 ;!/* 0010nnnnmmmm1110 mulu <REG_M>,<REG_N>*/{"mulu",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ neg r5,r4 ;!/* 0110nnnnmmmm1011 neg <REG_M>,<REG_N> */{"neg",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_B}, arch_sh_up}
+ negc r5,r4 ;!/* 0110nnnnmmmm1010 negc <REG_M>,<REG_N>*/{"negc",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_A}, arch_sh_up}
+ nop ;!/* 0000000000001001 nop */{"nop",{0},{HEX_0,HEX_0,HEX_0,HEX_9}, arch_sh_up}
+ not r5,r4 ;!/* 0110nnnnmmmm0111 not <REG_M>,<REG_N> */{"not",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_7}, arch_sh_up}
+ or #4,R0 ;!/* 11001011i8*1.... or #<imm>,R0 */{"or",{A_IMM,A_R0},{HEX_C,HEX_B,IMM0_8}, arch_sh_up}
+ or r5,r4 ;!/* 0010nnnnmmmm1011 or <REG_M>,<REG_N> */{"or",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_B}, arch_sh_up}
+ or.b #4,@(R0,GBR) ;!/* 11001111i8*1.... or.b #<imm>,@(R0,GBR)*/{"or.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_F,IMM0_8}, arch_sh_up}
+ rotcl r4 ;!/* 0100nnnn00100100 rotcl <REG_N> */{"rotcl",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_4}, arch_sh_up}
+ rotcr r4 ;!/* 0100nnnn00100101 rotcr <REG_N> */{"rotcr",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_5}, arch_sh_up}
+ rotl r4 ;!/* 0100nnnn00000100 rotl <REG_N> */{"rotl",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_4}, arch_sh_up}
+ rotr r4 ;!/* 0100nnnn00000101 rotr <REG_N> */{"rotr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_5}, arch_sh_up}
+ rte ;!/* 0000000000101011 rte */{"rte",{0},{HEX_0,HEX_0,HEX_2,HEX_B}, arch_sh_up}
+ rts ;!/* 0000000000001011 rts */{"rts",{0},{HEX_0,HEX_0,HEX_0,HEX_B}, arch_sh_up}
+ sets ;!/* 0000000001011000 sets */{"sets",{0},{HEX_0,HEX_0,HEX_5,HEX_8}, arch_sh_up}
+ sett ;!/* 0000000000011000 sett */{"sett",{0},{HEX_0,HEX_0,HEX_1,HEX_8}, arch_sh_up}
+ shal r4 ;!/* 0100nnnn00100000 shal <REG_N> */{"shal",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_0}, arch_sh_up}
+ shar r4 ;!/* 0100nnnn00100001 shar <REG_N> */{"shar",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_1}, arch_sh_up}
+ shll r4 ;!/* 0100nnnn00000000 shll <REG_N> */{"shll",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_0}, arch_sh_up}
+ shll16 r4 ;!/* 0100nnnn00101000 shll16 <REG_N> */{"shll16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_8}, arch_sh_up}
+ shll2 r4 ;!/* 0100nnnn00001000 shll2 <REG_N> */{"shll2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_8}, arch_sh_up}
+ shll8 r4 ;!/* 0100nnnn00011000 shll8 <REG_N> */{"shll8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_8}, arch_sh_up}
+ shlr r4 ;!/* 0100nnnn00000001 shlr <REG_N> */{"shlr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_1}, arch_sh_up}
+ shlr16 r4 ;!/* 0100nnnn00101001 shlr16 <REG_N> */{"shlr16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ shlr2 r4 ;!/* 0100nnnn00001001 shlr2 <REG_N> */{"shlr2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_9}, arch_sh_up}
+ shlr8 r4 ;!/* 0100nnnn00011001 shlr8 <REG_N> */{"shlr8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_9}, arch_sh_up}
+ sleep ;!/* 0000000000011011 sleep */{"sleep",{0},{HEX_0,HEX_0,HEX_1,HEX_B}, arch_sh_up}
+ stc SR,r4 ;!/* 0000nnnn00000010 stc SR,<REG_N> */{"stc",{A_SR,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ stc GBR,r4 ;!/* 0000nnnn00010010 stc GBR,<REG_N> */{"stc",{A_GBR,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ stc VBR,r4 ;!/* 0000nnnn00100010 stc VBR,<REG_N> */{"stc",{A_VBR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ stc.l SR,@-r4 ;!/* 0100nnnn00000011 stc.l SR,@-<REG_N> */{"stc.l",{A_SR,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_3}, arch_sh_up}
+ stc.l VBR,@-r4 ;!/* 0100nnnn00100011 stc.l VBR,@-<REG_N> */{"stc.l",{A_VBR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_3}, arch_sh_up}
+ stc.l GBR,@-r4 ;!/* 0100nnnn00010011 stc.l GBR,@-<REG_N> */{"stc.l",{A_GBR,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_3}, arch_sh_up}
+ sts MACH,r4 ;!/* 0000nnnn00001010 sts MACH,<REG_N> */{"sts",{A_MACH,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ sts MACL,r4 ;!/* 0000nnnn00011010 sts MACL,<REG_N> */{"sts",{A_MACL,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ sts PR,r4 ;!/* 0000nnnn00101010 sts PR,<REG_N> */{"sts",{A_PR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ sts.l MACH,@-r4 ;!/* 0100nnnn00000010 sts.l MACH,@-<REG_N>*/{"sts.l",{A_MACH,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ sts.l MACL,@-r4 ;!/* 0100nnnn00010010 sts.l MACL,@-<REG_N>*/{"sts.l",{A_MACL,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ sts.l PR,@-r4 ;!/* 0100nnnn00100010 sts.l PR,@-<REG_N> */{"sts.l",{A_PR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ sub r5,r4 ;!/* 0011nnnnmmmm1000 sub <REG_M>,<REG_N> */{"sub",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_8}, arch_sh_up}
+ subc r5,r4 ;!/* 0011nnnnmmmm1010 subc <REG_M>,<REG_N>*/{"subc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_A}, arch_sh_up}
+ subv r5,r4 ;!/* 0011nnnnmmmm1011 subv <REG_M>,<REG_N>*/{"subv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_B}, arch_sh_up}
+ swap.b r5,r4 ;!/* 0110nnnnmmmm1000 swap.b <REG_M>,<REG_N>*/{"swap.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_8}, arch_sh_up}
+ swap.w r5,r4 ;!/* 0110nnnnmmmm1001 swap.w <REG_M>,<REG_N>*/{"swap.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_9}, arch_sh_up}
+ tas.b @r4 ;!/* 0100nnnn00011011 tas.b @<REG_N> */{"tas.b",{A_IND_N},{HEX_4,REG_N,HEX_1,HEX_B}, arch_sh_up}
+ trapa #4 ;!/* 11000011i8*1.... trapa #<imm> */{"trapa",{A_IMM},{HEX_C,HEX_3,IMM0_8}, arch_sh_up}
+ tst #4,R0 ;!/* 11001000i8*1.... tst #<imm>,R0 */{"tst",{A_IMM,A_R0},{HEX_C,HEX_8,IMM0_8}, arch_sh_up}
+ tst r5,r4 ;!/* 0010nnnnmmmm1000 tst <REG_M>,<REG_N> */{"tst",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_8}, arch_sh_up}
+ tst.b #4,@(R0,GBR) ;!/* 11001100i8*1.... tst.b #<imm>,@(R0,GBR)*/{"tst.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_C,IMM0_8}, arch_sh_up}
+ xor #4,R0 ;!/* 11001010i8*1.... xor #<imm>,R0 */{"xor",{A_IMM,A_R0},{HEX_C,HEX_A,IMM0_8}, arch_sh_up}
+ xor r5,r4 ;!/* 0010nnnnmmmm1010 xor <REG_M>,<REG_N> */{"xor",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_A}, arch_sh_up}
+ xor.b #4,@(R0,GBR) ;!/* 11001110i8*1.... xor.b #<imm>,@(R0,GBR)*/{"xor.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_E,IMM0_8}, arch_sh_up}
+ xtrct r5,r4 ;!/* 0010nnnnmmmm1101 xtrct <REG_M>,<REG_N>*/{"xtrct",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_D}, arch_sh_up}
+
+! Instructions inherited from ancestors:
diff --git a/binutils-2.21/ld/testsuite/ld-sh/arch/sh2.s b/binutils-2.21/ld/testsuite/ld-sh/arch/sh2.s
new file mode 100644
index 0000000..3659942
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/arch/sh2.s
@@ -0,0 +1,166 @@
+! Generated file. DO NOT EDIT.
+!
+! This file was generated by gas/testsuite/gas/sh/arch/arch.exp .
+! This file should contain every instruction valid on
+! architecture sh2 but no more.
+! If the tests are failing because the expected results
+! have changed then run 'make check' and copy the new file
+! from <objdir>/gas/testsuite/sh2.s
+! to <srcdir>/gas/testsuite/gas/sh/arch/sh2.s .
+! Make sure there are no unexpected or missing instructions.
+
+ .section .text
+sh2:
+! Instructions introduced into sh2
+ bt.s .+8 ;!/* 10001101i8p1.... bt.s <bdisp8> */{"bt.s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bt/s .+8 ;!/* 10001101i8p1.... bt/s <bdisp8> */{"bt/s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bf.s .+8 ;!/* 10001111i8p1.... bf.s <bdisp8> */{"bf.s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ bf/s .+8 ;!/* 10001111i8p1.... bf/s <bdisp8> */{"bf/s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ mul.l r5,r4 ;!/* 0000nnnnmmmm0111 mul.l <REG_M>,<REG_N>*/{"mul.l",{ A_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_7}, arch_sh2_up}
+ dt r4 ;!/* 0100nnnn00010000 dt <REG_N> */{"dt",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_0}, arch_sh2_up}
+ dmuls.l r5,r4 ;!/* 0011nnnnmmmm1101 dmuls.l <REG_M>,<REG_N>*/{"dmuls.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_D}, arch_sh2_up}
+ dmulu.l r5,r4 ;!/* 0011nnnnmmmm0101 dmulu.l <REG_M>,<REG_N>*/{"dmulu.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_5}, arch_sh2_up}
+ mac.l @r5+,@r4+ ;!/* 0000nnnnmmmm1111 mac.l @<REG_M>+,@<REG_N>+*/{"mac.l",{A_INC_M,A_INC_N},{HEX_0,REG_N,REG_M,HEX_F}, arch_sh2_up}
+ braf r4 ;!/* 0000nnnn00100011 braf <REG_N> */{"braf",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_3}, arch_sh2_up}
+ bsrf r4 ;!/* 0000nnnn00000011 bsrf <REG_N> */{"bsrf",{A_REG_N},{HEX_0,REG_N,HEX_0,HEX_3}, arch_sh2_up}
+
+! Instructions inherited from ancestors: sh
+ add #4,r4 ;!/* 0111nnnni8*1.... add #<imm>,<REG_N> */{"add",{A_IMM,A_REG_N},{HEX_7,REG_N,IMM0_8}, arch_sh_up}
+ add r5,r4 ;!/* 0011nnnnmmmm1100 add <REG_M>,<REG_N> */{"add",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_C}, arch_sh_up}
+ addc r5,r4 ;!/* 0011nnnnmmmm1110 addc <REG_M>,<REG_N>*/{"addc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_E}, arch_sh_up}
+ addv r5,r4 ;!/* 0011nnnnmmmm1111 addv <REG_M>,<REG_N>*/{"addv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_F}, arch_sh_up}
+ and #4,R0 ;!/* 11001001i8*1.... and #<imm>,R0 */{"and",{A_IMM,A_R0},{HEX_C,HEX_9,IMM0_8}, arch_sh_up}
+ and r5,r4 ;!/* 0010nnnnmmmm1001 and <REG_M>,<REG_N> */{"and",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_9}, arch_sh_up}
+ and.b #4,@(R0,GBR) ;!/* 11001101i8*1.... and.b #<imm>,@(R0,GBR)*/{"and.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_D,IMM0_8}, arch_sh_up}
+ bra .+8 ;!/* 1010i12......... bra <bdisp12> */{"bra",{A_BDISP12},{HEX_A,BRANCH_12}, arch_sh_up}
+ bsr .+8 ;!/* 1011i12......... bsr <bdisp12> */{"bsr",{A_BDISP12},{HEX_B,BRANCH_12}, arch_sh_up}
+ bt .+8 ;!/* 10001001i8p1.... bt <bdisp8> */{"bt",{A_BDISP8},{HEX_8,HEX_9,BRANCH_8}, arch_sh_up}
+ bf .+8 ;!/* 10001011i8p1.... bf <bdisp8> */{"bf",{A_BDISP8},{HEX_8,HEX_B,BRANCH_8}, arch_sh_up}
+ clrmac ;!/* 0000000000101000 clrmac */{"clrmac",{0},{HEX_0,HEX_0,HEX_2,HEX_8}, arch_sh_up}
+ clrs ;!/* 0000000001001000 clrs */{"clrs",{0},{HEX_0,HEX_0,HEX_4,HEX_8}, arch_sh_up}
+ clrt ;!/* 0000000000001000 clrt */{"clrt",{0},{HEX_0,HEX_0,HEX_0,HEX_8}, arch_sh_up}
+ cmp/eq #4,R0 ;!/* 10001000i8*1.... cmp/eq #<imm>,R0 */{"cmp/eq",{A_IMM,A_R0},{HEX_8,HEX_8,IMM0_8}, arch_sh_up}
+ cmp/eq r5,r4 ;!/* 0011nnnnmmmm0000 cmp/eq <REG_M>,<REG_N>*/{"cmp/eq",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_0}, arch_sh_up}
+ cmp/ge r5,r4 ;!/* 0011nnnnmmmm0011 cmp/ge <REG_M>,<REG_N>*/{"cmp/ge",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_3}, arch_sh_up}
+ cmp/gt r5,r4 ;!/* 0011nnnnmmmm0111 cmp/gt <REG_M>,<REG_N>*/{"cmp/gt",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_7}, arch_sh_up}
+ cmp/hi r5,r4 ;!/* 0011nnnnmmmm0110 cmp/hi <REG_M>,<REG_N>*/{"cmp/hi",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_6}, arch_sh_up}
+ cmp/hs r5,r4 ;!/* 0011nnnnmmmm0010 cmp/hs <REG_M>,<REG_N>*/{"cmp/hs",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_2}, arch_sh_up}
+ cmp/pl r4 ;!/* 0100nnnn00010101 cmp/pl <REG_N> */{"cmp/pl",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_5}, arch_sh_up}
+ cmp/pz r4 ;!/* 0100nnnn00010001 cmp/pz <REG_N> */{"cmp/pz",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_1}, arch_sh_up}
+ cmp/str r5,r4 ;!/* 0010nnnnmmmm1100 cmp/str <REG_M>,<REG_N>*/{"cmp/str",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_C}, arch_sh_up}
+ div0s r5,r4 ;!/* 0010nnnnmmmm0111 div0s <REG_M>,<REG_N>*/{"div0s",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_7}, arch_sh_up}
+ div0u ;!/* 0000000000011001 div0u */{"div0u",{0},{HEX_0,HEX_0,HEX_1,HEX_9}, arch_sh_up}
+ div1 r5,r4 ;!/* 0011nnnnmmmm0100 div1 <REG_M>,<REG_N>*/{"div1",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_4}, arch_sh_up}
+ exts.b r5,r4 ;!/* 0110nnnnmmmm1110 exts.b <REG_M>,<REG_N>*/{"exts.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_E}, arch_sh_up}
+ exts.w r5,r4 ;!/* 0110nnnnmmmm1111 exts.w <REG_M>,<REG_N>*/{"exts.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_F}, arch_sh_up}
+ extu.b r5,r4 ;!/* 0110nnnnmmmm1100 extu.b <REG_M>,<REG_N>*/{"extu.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_C}, arch_sh_up}
+ extu.w r5,r4 ;!/* 0110nnnnmmmm1101 extu.w <REG_M>,<REG_N>*/{"extu.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_D}, arch_sh_up}
+ jmp @r4 ;!/* 0100nnnn00101011 jmp @<REG_N> */{"jmp",{A_IND_N},{HEX_4,REG_N,HEX_2,HEX_B}, arch_sh_up}
+ jsr @r4 ;!/* 0100nnnn00001011 jsr @<REG_N> */{"jsr",{A_IND_N},{HEX_4,REG_N,HEX_0,HEX_B}, arch_sh_up}
+ ldc r4,SR ;!/* 0100nnnn00001110 ldc <REG_N>,SR */{"ldc",{A_REG_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_E}, arch_sh_up}
+ ldc r4,GBR ;!/* 0100nnnn00011110 ldc <REG_N>,GBR */{"ldc",{A_REG_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_E}, arch_sh_up}
+ ldc r4,VBR ;!/* 0100nnnn00101110 ldc <REG_N>,VBR */{"ldc",{A_REG_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_E}, arch_sh_up}
+ ldc.l @r4+,SR ;!/* 0100nnnn00000111 ldc.l @<REG_N>+,SR */{"ldc.l",{A_INC_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_7}, arch_sh_up}
+ ldc.l @r4+,GBR ;!/* 0100nnnn00010111 ldc.l @<REG_N>+,GBR */{"ldc.l",{A_INC_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_7}, arch_sh_up}
+ ldc.l @r4+,VBR ;!/* 0100nnnn00100111 ldc.l @<REG_N>+,VBR */{"ldc.l",{A_INC_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_7}, arch_sh_up}
+ lds r4,MACH ;!/* 0100nnnn00001010 lds <REG_N>,MACH */{"lds",{A_REG_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ lds r4,MACL ;!/* 0100nnnn00011010 lds <REG_N>,MACL */{"lds",{A_REG_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ lds r4,PR ;!/* 0100nnnn00101010 lds <REG_N>,PR */{"lds",{A_REG_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ lds.l @r4+,MACH ;!/* 0100nnnn00000110 lds.l @<REG_N>+,MACH*/{"lds.l",{A_INC_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_6}, arch_sh_up}
+ lds.l @r4+,MACL ;!/* 0100nnnn00010110 lds.l @<REG_N>+,MACL*/{"lds.l",{A_INC_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_6}, arch_sh_up}
+ lds.l @r4+,PR ;!/* 0100nnnn00100110 lds.l @<REG_N>+,PR */{"lds.l",{A_INC_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_6}, arch_sh_up}
+ mac.w @r5+,@r4+ ;!/* 0100nnnnmmmm1111 mac.w @<REG_M>+,@<REG_N>+*/{"mac.w",{A_INC_M,A_INC_N},{HEX_4,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mov #4,r4 ;!/* 1110nnnni8*1.... mov #<imm>,<REG_N> */{"mov",{A_IMM,A_REG_N},{HEX_E,REG_N,IMM0_8}, arch_sh_up}
+ mov r5,r4 ;!/* 0110nnnnmmmm0011 mov <REG_M>,<REG_N> */{"mov",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_3}, arch_sh_up}
+ mov.b r5,@(R0,r4) ;!/* 0000nnnnmmmm0100 mov.b <REG_M>,@(R0,<REG_N>)*/{"mov.b",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@-r4 ;!/* 0010nnnnmmmm0100 mov.b <REG_M>,@-<REG_N>*/{"mov.b",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@r4 ;!/* 0010nnnnmmmm0000 mov.b <REG_M>,@<REG_N>*/{"mov.b",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b @(8,r5),R0 ;!/* 10000100mmmmi4*1 mov.b @(<disp>,<REG_M>),R0*/{"mov.b",{A_DISP_REG_M,A_R0},{HEX_8,HEX_4,REG_M,IMM0_4}, arch_sh_up}
+ mov.b @(8,GBR),R0 ;!/* 11000100i8*1.... mov.b @(<disp>,GBR),R0*/{"mov.b",{A_DISP_GBR,A_R0},{HEX_C,HEX_4,IMM0_8}, arch_sh_up}
+ mov.b @(R0,r5),r4 ;!/* 0000nnnnmmmm1100 mov.b @(R0,<REG_M>),<REG_N>*/{"mov.b",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_C}, arch_sh_up}
+ mov.b @r5+,r4 ;!/* 0110nnnnmmmm0100 mov.b @<REG_M>+,<REG_N>*/{"mov.b",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b @r5,r4 ;!/* 0110nnnnmmmm0000 mov.b @<REG_M>,<REG_N>*/{"mov.b",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b R0,@(8,r5) ;!/* 10000000mmmmi4*1 mov.b R0,@(<disp>,<REG_M>)*/{"mov.b",{A_R0,A_DISP_REG_M},{HEX_8,HEX_0,REG_M,IMM1_4}, arch_sh_up}
+ mov.b R0,@(8,GBR) ;!/* 11000000i8*1.... mov.b R0,@(<disp>,GBR)*/{"mov.b",{A_R0,A_DISP_GBR},{HEX_C,HEX_0,IMM1_8}, arch_sh_up}
+ mov.l r5,@(8,r4) ;!/* 0001nnnnmmmmi4*4 mov.l <REG_M>,@(<disp>,<REG_N>)*/{"mov.l",{ A_REG_M,A_DISP_REG_N},{HEX_1,REG_N,REG_M,IMM1_4BY4}, arch_sh_up}
+ mov.l r5,@(R0,r4) ;!/* 0000nnnnmmmm0110 mov.l <REG_M>,@(R0,<REG_N>)*/{"mov.l",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@-r4 ;!/* 0010nnnnmmmm0110 mov.l <REG_M>,@-<REG_N>*/{"mov.l",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@r4 ;!/* 0010nnnnmmmm0010 mov.l <REG_M>,@<REG_N>*/{"mov.l",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l @(8,r5),r4 ;!/* 0101nnnnmmmmi4*4 mov.l @(<disp>,<REG_M>),<REG_N>*/{"mov.l",{A_DISP_REG_M,A_REG_N},{HEX_5,REG_N,REG_M,IMM0_4BY4}, arch_sh_up}
+ mov.l @(8,GBR),R0 ;!/* 11000110i8*4.... mov.l @(<disp>,GBR),R0*/{"mov.l",{A_DISP_GBR,A_R0},{HEX_C,HEX_6,IMM0_8BY4}, arch_sh_up}
+ .align 2
+ mov.l @(8,PC),r4 ;!/* 1101nnnni8p4.... mov.l @(<disp>,PC),<REG_N>*/{"mov.l",{A_DISP_PC,A_REG_N},{HEX_D,REG_N,PCRELIMM_8BY4}, arch_sh_up}
+ mov.l @(R0,r5),r4 ;!/* 0000nnnnmmmm1110 mov.l @(R0,<REG_M>),<REG_N>*/{"mov.l",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mov.l @r5+,r4 ;!/* 0110nnnnmmmm0110 mov.l @<REG_M>+,<REG_N>*/{"mov.l",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l @r5,r4 ;!/* 0110nnnnmmmm0010 mov.l @<REG_M>,<REG_N>*/{"mov.l",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l R0,@(8,GBR) ;!/* 11000010i8*4.... mov.l R0,@(<disp>,GBR)*/{"mov.l",{A_R0,A_DISP_GBR},{HEX_C,HEX_2,IMM1_8BY4}, arch_sh_up}
+ mov.w r5,@(R0,r4) ;!/* 0000nnnnmmmm0101 mov.w <REG_M>,@(R0,<REG_N>)*/{"mov.w",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@-r4 ;!/* 0010nnnnmmmm0101 mov.w <REG_M>,@-<REG_N>*/{"mov.w",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@r4 ;!/* 0010nnnnmmmm0001 mov.w <REG_M>,@<REG_N>*/{"mov.w",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w @(8,r5),R0 ;!/* 10000101mmmmi4*2 mov.w @(<disp>,<REG_M>),R0*/{"mov.w",{A_DISP_REG_M,A_R0},{HEX_8,HEX_5,REG_M,IMM0_4BY2}, arch_sh_up}
+ mov.w @(8,GBR),R0 ;!/* 11000101i8*2.... mov.w @(<disp>,GBR),R0*/{"mov.w",{A_DISP_GBR,A_R0},{HEX_C,HEX_5,IMM0_8BY2}, arch_sh_up}
+ mov.w @(8,PC),r4 ;!/* 1001nnnni8p2.... mov.w @(<disp>,PC),<REG_N>*/{"mov.w",{A_DISP_PC,A_REG_N},{HEX_9,REG_N,PCRELIMM_8BY2}, arch_sh_up}
+ mov.w @(R0,r5),r4 ;!/* 0000nnnnmmmm1101 mov.w @(R0,<REG_M>),<REG_N>*/{"mov.w",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_D}, arch_sh_up}
+ mov.w @r5+,r4 ;!/* 0110nnnnmmmm0101 mov.w @<REG_M>+,<REG_N>*/{"mov.w",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w @r5,r4 ;!/* 0110nnnnmmmm0001 mov.w @<REG_M>,<REG_N>*/{"mov.w",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w R0,@(8,r5) ;!/* 10000001mmmmi4*2 mov.w R0,@(<disp>,<REG_M>)*/{"mov.w",{A_R0,A_DISP_REG_M},{HEX_8,HEX_1,REG_M,IMM1_4BY2}, arch_sh_up}
+ mov.w R0,@(8,GBR) ;!/* 11000001i8*2.... mov.w R0,@(<disp>,GBR)*/{"mov.w",{A_R0,A_DISP_GBR},{HEX_C,HEX_1,IMM1_8BY2}, arch_sh_up}
+ .align 2
+ mova @(8,PC),R0 ;!/* 11000111i8p4.... mova @(<disp>,PC),R0*/{"mova",{A_DISP_PC,A_R0},{HEX_C,HEX_7,PCRELIMM_8BY4}, arch_sh_up}
+ movt r4 ;!/* 0000nnnn00101001 movt <REG_N> */{"movt",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ muls.w r5,r4 ;!/* 0010nnnnmmmm1111 muls.w <REG_M>,<REG_N>*/{"muls.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ muls r5,r4 ;!/* 0010nnnnmmmm1111 muls <REG_M>,<REG_N>*/{"muls",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mulu.w r5,r4 ;!/* 0010nnnnmmmm1110 mulu.w <REG_M>,<REG_N>*/{"mulu.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mulu r5,r4 ;!/* 0010nnnnmmmm1110 mulu <REG_M>,<REG_N>*/{"mulu",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ neg r5,r4 ;!/* 0110nnnnmmmm1011 neg <REG_M>,<REG_N> */{"neg",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_B}, arch_sh_up}
+ negc r5,r4 ;!/* 0110nnnnmmmm1010 negc <REG_M>,<REG_N>*/{"negc",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_A}, arch_sh_up}
+ nop ;!/* 0000000000001001 nop */{"nop",{0},{HEX_0,HEX_0,HEX_0,HEX_9}, arch_sh_up}
+ not r5,r4 ;!/* 0110nnnnmmmm0111 not <REG_M>,<REG_N> */{"not",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_7}, arch_sh_up}
+ or #4,R0 ;!/* 11001011i8*1.... or #<imm>,R0 */{"or",{A_IMM,A_R0},{HEX_C,HEX_B,IMM0_8}, arch_sh_up}
+ or r5,r4 ;!/* 0010nnnnmmmm1011 or <REG_M>,<REG_N> */{"or",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_B}, arch_sh_up}
+ or.b #4,@(R0,GBR) ;!/* 11001111i8*1.... or.b #<imm>,@(R0,GBR)*/{"or.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_F,IMM0_8}, arch_sh_up}
+ rotcl r4 ;!/* 0100nnnn00100100 rotcl <REG_N> */{"rotcl",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_4}, arch_sh_up}
+ rotcr r4 ;!/* 0100nnnn00100101 rotcr <REG_N> */{"rotcr",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_5}, arch_sh_up}
+ rotl r4 ;!/* 0100nnnn00000100 rotl <REG_N> */{"rotl",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_4}, arch_sh_up}
+ rotr r4 ;!/* 0100nnnn00000101 rotr <REG_N> */{"rotr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_5}, arch_sh_up}
+ rte ;!/* 0000000000101011 rte */{"rte",{0},{HEX_0,HEX_0,HEX_2,HEX_B}, arch_sh_up}
+ rts ;!/* 0000000000001011 rts */{"rts",{0},{HEX_0,HEX_0,HEX_0,HEX_B}, arch_sh_up}
+ sets ;!/* 0000000001011000 sets */{"sets",{0},{HEX_0,HEX_0,HEX_5,HEX_8}, arch_sh_up}
+ sett ;!/* 0000000000011000 sett */{"sett",{0},{HEX_0,HEX_0,HEX_1,HEX_8}, arch_sh_up}
+ shal r4 ;!/* 0100nnnn00100000 shal <REG_N> */{"shal",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_0}, arch_sh_up}
+ shar r4 ;!/* 0100nnnn00100001 shar <REG_N> */{"shar",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_1}, arch_sh_up}
+ shll r4 ;!/* 0100nnnn00000000 shll <REG_N> */{"shll",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_0}, arch_sh_up}
+ shll16 r4 ;!/* 0100nnnn00101000 shll16 <REG_N> */{"shll16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_8}, arch_sh_up}
+ shll2 r4 ;!/* 0100nnnn00001000 shll2 <REG_N> */{"shll2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_8}, arch_sh_up}
+ shll8 r4 ;!/* 0100nnnn00011000 shll8 <REG_N> */{"shll8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_8}, arch_sh_up}
+ shlr r4 ;!/* 0100nnnn00000001 shlr <REG_N> */{"shlr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_1}, arch_sh_up}
+ shlr16 r4 ;!/* 0100nnnn00101001 shlr16 <REG_N> */{"shlr16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ shlr2 r4 ;!/* 0100nnnn00001001 shlr2 <REG_N> */{"shlr2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_9}, arch_sh_up}
+ shlr8 r4 ;!/* 0100nnnn00011001 shlr8 <REG_N> */{"shlr8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_9}, arch_sh_up}
+ sleep ;!/* 0000000000011011 sleep */{"sleep",{0},{HEX_0,HEX_0,HEX_1,HEX_B}, arch_sh_up}
+ stc SR,r4 ;!/* 0000nnnn00000010 stc SR,<REG_N> */{"stc",{A_SR,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ stc GBR,r4 ;!/* 0000nnnn00010010 stc GBR,<REG_N> */{"stc",{A_GBR,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ stc VBR,r4 ;!/* 0000nnnn00100010 stc VBR,<REG_N> */{"stc",{A_VBR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ stc.l SR,@-r4 ;!/* 0100nnnn00000011 stc.l SR,@-<REG_N> */{"stc.l",{A_SR,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_3}, arch_sh_up}
+ stc.l VBR,@-r4 ;!/* 0100nnnn00100011 stc.l VBR,@-<REG_N> */{"stc.l",{A_VBR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_3}, arch_sh_up}
+ stc.l GBR,@-r4 ;!/* 0100nnnn00010011 stc.l GBR,@-<REG_N> */{"stc.l",{A_GBR,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_3}, arch_sh_up}
+ sts MACH,r4 ;!/* 0000nnnn00001010 sts MACH,<REG_N> */{"sts",{A_MACH,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ sts MACL,r4 ;!/* 0000nnnn00011010 sts MACL,<REG_N> */{"sts",{A_MACL,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ sts PR,r4 ;!/* 0000nnnn00101010 sts PR,<REG_N> */{"sts",{A_PR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ sts.l MACH,@-r4 ;!/* 0100nnnn00000010 sts.l MACH,@-<REG_N>*/{"sts.l",{A_MACH,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ sts.l MACL,@-r4 ;!/* 0100nnnn00010010 sts.l MACL,@-<REG_N>*/{"sts.l",{A_MACL,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ sts.l PR,@-r4 ;!/* 0100nnnn00100010 sts.l PR,@-<REG_N> */{"sts.l",{A_PR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ sub r5,r4 ;!/* 0011nnnnmmmm1000 sub <REG_M>,<REG_N> */{"sub",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_8}, arch_sh_up}
+ subc r5,r4 ;!/* 0011nnnnmmmm1010 subc <REG_M>,<REG_N>*/{"subc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_A}, arch_sh_up}
+ subv r5,r4 ;!/* 0011nnnnmmmm1011 subv <REG_M>,<REG_N>*/{"subv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_B}, arch_sh_up}
+ swap.b r5,r4 ;!/* 0110nnnnmmmm1000 swap.b <REG_M>,<REG_N>*/{"swap.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_8}, arch_sh_up}
+ swap.w r5,r4 ;!/* 0110nnnnmmmm1001 swap.w <REG_M>,<REG_N>*/{"swap.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_9}, arch_sh_up}
+ tas.b @r4 ;!/* 0100nnnn00011011 tas.b @<REG_N> */{"tas.b",{A_IND_N},{HEX_4,REG_N,HEX_1,HEX_B}, arch_sh_up}
+ trapa #4 ;!/* 11000011i8*1.... trapa #<imm> */{"trapa",{A_IMM},{HEX_C,HEX_3,IMM0_8}, arch_sh_up}
+ tst #4,R0 ;!/* 11001000i8*1.... tst #<imm>,R0 */{"tst",{A_IMM,A_R0},{HEX_C,HEX_8,IMM0_8}, arch_sh_up}
+ tst r5,r4 ;!/* 0010nnnnmmmm1000 tst <REG_M>,<REG_N> */{"tst",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_8}, arch_sh_up}
+ tst.b #4,@(R0,GBR) ;!/* 11001100i8*1.... tst.b #<imm>,@(R0,GBR)*/{"tst.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_C,IMM0_8}, arch_sh_up}
+ xor #4,R0 ;!/* 11001010i8*1.... xor #<imm>,R0 */{"xor",{A_IMM,A_R0},{HEX_C,HEX_A,IMM0_8}, arch_sh_up}
+ xor r5,r4 ;!/* 0010nnnnmmmm1010 xor <REG_M>,<REG_N> */{"xor",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_A}, arch_sh_up}
+ xor.b #4,@(R0,GBR) ;!/* 11001110i8*1.... xor.b #<imm>,@(R0,GBR)*/{"xor.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_E,IMM0_8}, arch_sh_up}
+ xtrct r5,r4 ;!/* 0010nnnnmmmm1101 xtrct <REG_M>,<REG_N>*/{"xtrct",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_D}, arch_sh_up}
diff --git a/binutils-2.21/ld/testsuite/ld-sh/arch/sh2a-nofpu-or-sh3-nommu.s b/binutils-2.21/ld/testsuite/ld-sh/arch/sh2a-nofpu-or-sh3-nommu.s
new file mode 100644
index 0000000..ce93bc9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/arch/sh2a-nofpu-or-sh3-nommu.s
@@ -0,0 +1,168 @@
+! Generated file. DO NOT EDIT.
+!
+! This file was generated by gas/testsuite/gas/sh/arch/arch.exp .
+! This file should contain every instruction valid on
+! architecture sh2a-nofpu-or-sh3-nommu but no more.
+! If the tests are failing because the expected results
+! have changed then run 'make check' and copy the new file
+! from <objdir>/gas/testsuite/sh2a-nofpu-or-sh3-nommu.s
+! to <srcdir>/gas/testsuite/gas/sh/arch/sh2a-nofpu-or-sh3-nommu.s .
+! Make sure there are no unexpected or missing instructions.
+
+ .section .text
+sh2a_nofpu_or_sh3_nommu:
+! Instructions introduced into sh2a-nofpu-or-sh3-nommu
+ shad r5,r4 ;!/* 0100nnnnmmmm1100 shad <REG_M>,<REG_N>*/{"shad",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_C}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shld r5,r4 ;!/* 0100nnnnmmmm1101 shld <REG_M>,<REG_N>*/{"shld",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_D}, arch_sh2a_nofpu_or_sh3_nommu_up}
+
+! Instructions inherited from ancestors: sh sh2
+ add #4,r4 ;!/* 0111nnnni8*1.... add #<imm>,<REG_N> */{"add",{A_IMM,A_REG_N},{HEX_7,REG_N,IMM0_8}, arch_sh_up}
+ add r5,r4 ;!/* 0011nnnnmmmm1100 add <REG_M>,<REG_N> */{"add",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_C}, arch_sh_up}
+ addc r5,r4 ;!/* 0011nnnnmmmm1110 addc <REG_M>,<REG_N>*/{"addc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_E}, arch_sh_up}
+ addv r5,r4 ;!/* 0011nnnnmmmm1111 addv <REG_M>,<REG_N>*/{"addv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_F}, arch_sh_up}
+ and #4,R0 ;!/* 11001001i8*1.... and #<imm>,R0 */{"and",{A_IMM,A_R0},{HEX_C,HEX_9,IMM0_8}, arch_sh_up}
+ and r5,r4 ;!/* 0010nnnnmmmm1001 and <REG_M>,<REG_N> */{"and",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_9}, arch_sh_up}
+ and.b #4,@(R0,GBR) ;!/* 11001101i8*1.... and.b #<imm>,@(R0,GBR)*/{"and.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_D,IMM0_8}, arch_sh_up}
+ bra .+8 ;!/* 1010i12......... bra <bdisp12> */{"bra",{A_BDISP12},{HEX_A,BRANCH_12}, arch_sh_up}
+ bsr .+8 ;!/* 1011i12......... bsr <bdisp12> */{"bsr",{A_BDISP12},{HEX_B,BRANCH_12}, arch_sh_up}
+ bt .+8 ;!/* 10001001i8p1.... bt <bdisp8> */{"bt",{A_BDISP8},{HEX_8,HEX_9,BRANCH_8}, arch_sh_up}
+ bf .+8 ;!/* 10001011i8p1.... bf <bdisp8> */{"bf",{A_BDISP8},{HEX_8,HEX_B,BRANCH_8}, arch_sh_up}
+ bt.s .+8 ;!/* 10001101i8p1.... bt.s <bdisp8> */{"bt.s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bt/s .+8 ;!/* 10001101i8p1.... bt/s <bdisp8> */{"bt/s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bf.s .+8 ;!/* 10001111i8p1.... bf.s <bdisp8> */{"bf.s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ bf/s .+8 ;!/* 10001111i8p1.... bf/s <bdisp8> */{"bf/s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ clrmac ;!/* 0000000000101000 clrmac */{"clrmac",{0},{HEX_0,HEX_0,HEX_2,HEX_8}, arch_sh_up}
+ clrs ;!/* 0000000001001000 clrs */{"clrs",{0},{HEX_0,HEX_0,HEX_4,HEX_8}, arch_sh_up}
+ clrt ;!/* 0000000000001000 clrt */{"clrt",{0},{HEX_0,HEX_0,HEX_0,HEX_8}, arch_sh_up}
+ cmp/eq #4,R0 ;!/* 10001000i8*1.... cmp/eq #<imm>,R0 */{"cmp/eq",{A_IMM,A_R0},{HEX_8,HEX_8,IMM0_8}, arch_sh_up}
+ cmp/eq r5,r4 ;!/* 0011nnnnmmmm0000 cmp/eq <REG_M>,<REG_N>*/{"cmp/eq",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_0}, arch_sh_up}
+ cmp/ge r5,r4 ;!/* 0011nnnnmmmm0011 cmp/ge <REG_M>,<REG_N>*/{"cmp/ge",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_3}, arch_sh_up}
+ cmp/gt r5,r4 ;!/* 0011nnnnmmmm0111 cmp/gt <REG_M>,<REG_N>*/{"cmp/gt",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_7}, arch_sh_up}
+ cmp/hi r5,r4 ;!/* 0011nnnnmmmm0110 cmp/hi <REG_M>,<REG_N>*/{"cmp/hi",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_6}, arch_sh_up}
+ cmp/hs r5,r4 ;!/* 0011nnnnmmmm0010 cmp/hs <REG_M>,<REG_N>*/{"cmp/hs",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_2}, arch_sh_up}
+ cmp/pl r4 ;!/* 0100nnnn00010101 cmp/pl <REG_N> */{"cmp/pl",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_5}, arch_sh_up}
+ cmp/pz r4 ;!/* 0100nnnn00010001 cmp/pz <REG_N> */{"cmp/pz",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_1}, arch_sh_up}
+ cmp/str r5,r4 ;!/* 0010nnnnmmmm1100 cmp/str <REG_M>,<REG_N>*/{"cmp/str",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_C}, arch_sh_up}
+ div0s r5,r4 ;!/* 0010nnnnmmmm0111 div0s <REG_M>,<REG_N>*/{"div0s",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_7}, arch_sh_up}
+ div0u ;!/* 0000000000011001 div0u */{"div0u",{0},{HEX_0,HEX_0,HEX_1,HEX_9}, arch_sh_up}
+ div1 r5,r4 ;!/* 0011nnnnmmmm0100 div1 <REG_M>,<REG_N>*/{"div1",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_4}, arch_sh_up}
+ exts.b r5,r4 ;!/* 0110nnnnmmmm1110 exts.b <REG_M>,<REG_N>*/{"exts.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_E}, arch_sh_up}
+ exts.w r5,r4 ;!/* 0110nnnnmmmm1111 exts.w <REG_M>,<REG_N>*/{"exts.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_F}, arch_sh_up}
+ extu.b r5,r4 ;!/* 0110nnnnmmmm1100 extu.b <REG_M>,<REG_N>*/{"extu.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_C}, arch_sh_up}
+ extu.w r5,r4 ;!/* 0110nnnnmmmm1101 extu.w <REG_M>,<REG_N>*/{"extu.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_D}, arch_sh_up}
+ jmp @r4 ;!/* 0100nnnn00101011 jmp @<REG_N> */{"jmp",{A_IND_N},{HEX_4,REG_N,HEX_2,HEX_B}, arch_sh_up}
+ jsr @r4 ;!/* 0100nnnn00001011 jsr @<REG_N> */{"jsr",{A_IND_N},{HEX_4,REG_N,HEX_0,HEX_B}, arch_sh_up}
+ ldc r4,SR ;!/* 0100nnnn00001110 ldc <REG_N>,SR */{"ldc",{A_REG_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_E}, arch_sh_up}
+ ldc r4,GBR ;!/* 0100nnnn00011110 ldc <REG_N>,GBR */{"ldc",{A_REG_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_E}, arch_sh_up}
+ ldc r4,VBR ;!/* 0100nnnn00101110 ldc <REG_N>,VBR */{"ldc",{A_REG_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_E}, arch_sh_up}
+ ldc.l @r4+,SR ;!/* 0100nnnn00000111 ldc.l @<REG_N>+,SR */{"ldc.l",{A_INC_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_7}, arch_sh_up}
+ ldc.l @r4+,GBR ;!/* 0100nnnn00010111 ldc.l @<REG_N>+,GBR */{"ldc.l",{A_INC_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_7}, arch_sh_up}
+ ldc.l @r4+,VBR ;!/* 0100nnnn00100111 ldc.l @<REG_N>+,VBR */{"ldc.l",{A_INC_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_7}, arch_sh_up}
+ lds r4,MACH ;!/* 0100nnnn00001010 lds <REG_N>,MACH */{"lds",{A_REG_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ lds r4,MACL ;!/* 0100nnnn00011010 lds <REG_N>,MACL */{"lds",{A_REG_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ lds r4,PR ;!/* 0100nnnn00101010 lds <REG_N>,PR */{"lds",{A_REG_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ lds.l @r4+,MACH ;!/* 0100nnnn00000110 lds.l @<REG_N>+,MACH*/{"lds.l",{A_INC_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_6}, arch_sh_up}
+ lds.l @r4+,MACL ;!/* 0100nnnn00010110 lds.l @<REG_N>+,MACL*/{"lds.l",{A_INC_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_6}, arch_sh_up}
+ lds.l @r4+,PR ;!/* 0100nnnn00100110 lds.l @<REG_N>+,PR */{"lds.l",{A_INC_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_6}, arch_sh_up}
+ mac.w @r5+,@r4+ ;!/* 0100nnnnmmmm1111 mac.w @<REG_M>+,@<REG_N>+*/{"mac.w",{A_INC_M,A_INC_N},{HEX_4,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mov #4,r4 ;!/* 1110nnnni8*1.... mov #<imm>,<REG_N> */{"mov",{A_IMM,A_REG_N},{HEX_E,REG_N,IMM0_8}, arch_sh_up}
+ mov r5,r4 ;!/* 0110nnnnmmmm0011 mov <REG_M>,<REG_N> */{"mov",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_3}, arch_sh_up}
+ mov.b r5,@(R0,r4) ;!/* 0000nnnnmmmm0100 mov.b <REG_M>,@(R0,<REG_N>)*/{"mov.b",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@-r4 ;!/* 0010nnnnmmmm0100 mov.b <REG_M>,@-<REG_N>*/{"mov.b",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@r4 ;!/* 0010nnnnmmmm0000 mov.b <REG_M>,@<REG_N>*/{"mov.b",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b @(8,r5),R0 ;!/* 10000100mmmmi4*1 mov.b @(<disp>,<REG_M>),R0*/{"mov.b",{A_DISP_REG_M,A_R0},{HEX_8,HEX_4,REG_M,IMM0_4}, arch_sh_up}
+ mov.b @(8,GBR),R0 ;!/* 11000100i8*1.... mov.b @(<disp>,GBR),R0*/{"mov.b",{A_DISP_GBR,A_R0},{HEX_C,HEX_4,IMM0_8}, arch_sh_up}
+ mov.b @(R0,r5),r4 ;!/* 0000nnnnmmmm1100 mov.b @(R0,<REG_M>),<REG_N>*/{"mov.b",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_C}, arch_sh_up}
+ mov.b @r5+,r4 ;!/* 0110nnnnmmmm0100 mov.b @<REG_M>+,<REG_N>*/{"mov.b",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b @r5,r4 ;!/* 0110nnnnmmmm0000 mov.b @<REG_M>,<REG_N>*/{"mov.b",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b R0,@(8,r5) ;!/* 10000000mmmmi4*1 mov.b R0,@(<disp>,<REG_M>)*/{"mov.b",{A_R0,A_DISP_REG_M},{HEX_8,HEX_0,REG_M,IMM1_4}, arch_sh_up}
+ mov.b R0,@(8,GBR) ;!/* 11000000i8*1.... mov.b R0,@(<disp>,GBR)*/{"mov.b",{A_R0,A_DISP_GBR},{HEX_C,HEX_0,IMM1_8}, arch_sh_up}
+ mov.l r5,@(8,r4) ;!/* 0001nnnnmmmmi4*4 mov.l <REG_M>,@(<disp>,<REG_N>)*/{"mov.l",{ A_REG_M,A_DISP_REG_N},{HEX_1,REG_N,REG_M,IMM1_4BY4}, arch_sh_up}
+ mov.l r5,@(R0,r4) ;!/* 0000nnnnmmmm0110 mov.l <REG_M>,@(R0,<REG_N>)*/{"mov.l",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@-r4 ;!/* 0010nnnnmmmm0110 mov.l <REG_M>,@-<REG_N>*/{"mov.l",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@r4 ;!/* 0010nnnnmmmm0010 mov.l <REG_M>,@<REG_N>*/{"mov.l",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l @(8,r5),r4 ;!/* 0101nnnnmmmmi4*4 mov.l @(<disp>,<REG_M>),<REG_N>*/{"mov.l",{A_DISP_REG_M,A_REG_N},{HEX_5,REG_N,REG_M,IMM0_4BY4}, arch_sh_up}
+ mov.l @(8,GBR),R0 ;!/* 11000110i8*4.... mov.l @(<disp>,GBR),R0*/{"mov.l",{A_DISP_GBR,A_R0},{HEX_C,HEX_6,IMM0_8BY4}, arch_sh_up}
+ .align 2
+ mov.l @(8,PC),r4 ;!/* 1101nnnni8p4.... mov.l @(<disp>,PC),<REG_N>*/{"mov.l",{A_DISP_PC,A_REG_N},{HEX_D,REG_N,PCRELIMM_8BY4}, arch_sh_up}
+ mov.l @(R0,r5),r4 ;!/* 0000nnnnmmmm1110 mov.l @(R0,<REG_M>),<REG_N>*/{"mov.l",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mov.l @r5+,r4 ;!/* 0110nnnnmmmm0110 mov.l @<REG_M>+,<REG_N>*/{"mov.l",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l @r5,r4 ;!/* 0110nnnnmmmm0010 mov.l @<REG_M>,<REG_N>*/{"mov.l",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l R0,@(8,GBR) ;!/* 11000010i8*4.... mov.l R0,@(<disp>,GBR)*/{"mov.l",{A_R0,A_DISP_GBR},{HEX_C,HEX_2,IMM1_8BY4}, arch_sh_up}
+ mov.w r5,@(R0,r4) ;!/* 0000nnnnmmmm0101 mov.w <REG_M>,@(R0,<REG_N>)*/{"mov.w",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@-r4 ;!/* 0010nnnnmmmm0101 mov.w <REG_M>,@-<REG_N>*/{"mov.w",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@r4 ;!/* 0010nnnnmmmm0001 mov.w <REG_M>,@<REG_N>*/{"mov.w",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w @(8,r5),R0 ;!/* 10000101mmmmi4*2 mov.w @(<disp>,<REG_M>),R0*/{"mov.w",{A_DISP_REG_M,A_R0},{HEX_8,HEX_5,REG_M,IMM0_4BY2}, arch_sh_up}
+ mov.w @(8,GBR),R0 ;!/* 11000101i8*2.... mov.w @(<disp>,GBR),R0*/{"mov.w",{A_DISP_GBR,A_R0},{HEX_C,HEX_5,IMM0_8BY2}, arch_sh_up}
+ mov.w @(8,PC),r4 ;!/* 1001nnnni8p2.... mov.w @(<disp>,PC),<REG_N>*/{"mov.w",{A_DISP_PC,A_REG_N},{HEX_9,REG_N,PCRELIMM_8BY2}, arch_sh_up}
+ mov.w @(R0,r5),r4 ;!/* 0000nnnnmmmm1101 mov.w @(R0,<REG_M>),<REG_N>*/{"mov.w",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_D}, arch_sh_up}
+ mov.w @r5+,r4 ;!/* 0110nnnnmmmm0101 mov.w @<REG_M>+,<REG_N>*/{"mov.w",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w @r5,r4 ;!/* 0110nnnnmmmm0001 mov.w @<REG_M>,<REG_N>*/{"mov.w",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w R0,@(8,r5) ;!/* 10000001mmmmi4*2 mov.w R0,@(<disp>,<REG_M>)*/{"mov.w",{A_R0,A_DISP_REG_M},{HEX_8,HEX_1,REG_M,IMM1_4BY2}, arch_sh_up}
+ mov.w R0,@(8,GBR) ;!/* 11000001i8*2.... mov.w R0,@(<disp>,GBR)*/{"mov.w",{A_R0,A_DISP_GBR},{HEX_C,HEX_1,IMM1_8BY2}, arch_sh_up}
+ .align 2
+ mova @(8,PC),R0 ;!/* 11000111i8p4.... mova @(<disp>,PC),R0*/{"mova",{A_DISP_PC,A_R0},{HEX_C,HEX_7,PCRELIMM_8BY4}, arch_sh_up}
+ movt r4 ;!/* 0000nnnn00101001 movt <REG_N> */{"movt",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ muls.w r5,r4 ;!/* 0010nnnnmmmm1111 muls.w <REG_M>,<REG_N>*/{"muls.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ muls r5,r4 ;!/* 0010nnnnmmmm1111 muls <REG_M>,<REG_N>*/{"muls",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mul.l r5,r4 ;!/* 0000nnnnmmmm0111 mul.l <REG_M>,<REG_N>*/{"mul.l",{ A_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_7}, arch_sh2_up}
+ mulu.w r5,r4 ;!/* 0010nnnnmmmm1110 mulu.w <REG_M>,<REG_N>*/{"mulu.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mulu r5,r4 ;!/* 0010nnnnmmmm1110 mulu <REG_M>,<REG_N>*/{"mulu",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ neg r5,r4 ;!/* 0110nnnnmmmm1011 neg <REG_M>,<REG_N> */{"neg",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_B}, arch_sh_up}
+ negc r5,r4 ;!/* 0110nnnnmmmm1010 negc <REG_M>,<REG_N>*/{"negc",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_A}, arch_sh_up}
+ nop ;!/* 0000000000001001 nop */{"nop",{0},{HEX_0,HEX_0,HEX_0,HEX_9}, arch_sh_up}
+ not r5,r4 ;!/* 0110nnnnmmmm0111 not <REG_M>,<REG_N> */{"not",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_7}, arch_sh_up}
+ or #4,R0 ;!/* 11001011i8*1.... or #<imm>,R0 */{"or",{A_IMM,A_R0},{HEX_C,HEX_B,IMM0_8}, arch_sh_up}
+ or r5,r4 ;!/* 0010nnnnmmmm1011 or <REG_M>,<REG_N> */{"or",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_B}, arch_sh_up}
+ or.b #4,@(R0,GBR) ;!/* 11001111i8*1.... or.b #<imm>,@(R0,GBR)*/{"or.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_F,IMM0_8}, arch_sh_up}
+ rotcl r4 ;!/* 0100nnnn00100100 rotcl <REG_N> */{"rotcl",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_4}, arch_sh_up}
+ rotcr r4 ;!/* 0100nnnn00100101 rotcr <REG_N> */{"rotcr",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_5}, arch_sh_up}
+ rotl r4 ;!/* 0100nnnn00000100 rotl <REG_N> */{"rotl",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_4}, arch_sh_up}
+ rotr r4 ;!/* 0100nnnn00000101 rotr <REG_N> */{"rotr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_5}, arch_sh_up}
+ rte ;!/* 0000000000101011 rte */{"rte",{0},{HEX_0,HEX_0,HEX_2,HEX_B}, arch_sh_up}
+ rts ;!/* 0000000000001011 rts */{"rts",{0},{HEX_0,HEX_0,HEX_0,HEX_B}, arch_sh_up}
+ sets ;!/* 0000000001011000 sets */{"sets",{0},{HEX_0,HEX_0,HEX_5,HEX_8}, arch_sh_up}
+ sett ;!/* 0000000000011000 sett */{"sett",{0},{HEX_0,HEX_0,HEX_1,HEX_8}, arch_sh_up}
+ shal r4 ;!/* 0100nnnn00100000 shal <REG_N> */{"shal",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_0}, arch_sh_up}
+ shar r4 ;!/* 0100nnnn00100001 shar <REG_N> */{"shar",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_1}, arch_sh_up}
+ shll r4 ;!/* 0100nnnn00000000 shll <REG_N> */{"shll",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_0}, arch_sh_up}
+ shll16 r4 ;!/* 0100nnnn00101000 shll16 <REG_N> */{"shll16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_8}, arch_sh_up}
+ shll2 r4 ;!/* 0100nnnn00001000 shll2 <REG_N> */{"shll2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_8}, arch_sh_up}
+ shll8 r4 ;!/* 0100nnnn00011000 shll8 <REG_N> */{"shll8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_8}, arch_sh_up}
+ shlr r4 ;!/* 0100nnnn00000001 shlr <REG_N> */{"shlr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_1}, arch_sh_up}
+ shlr16 r4 ;!/* 0100nnnn00101001 shlr16 <REG_N> */{"shlr16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ shlr2 r4 ;!/* 0100nnnn00001001 shlr2 <REG_N> */{"shlr2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_9}, arch_sh_up}
+ shlr8 r4 ;!/* 0100nnnn00011001 shlr8 <REG_N> */{"shlr8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_9}, arch_sh_up}
+ sleep ;!/* 0000000000011011 sleep */{"sleep",{0},{HEX_0,HEX_0,HEX_1,HEX_B}, arch_sh_up}
+ stc SR,r4 ;!/* 0000nnnn00000010 stc SR,<REG_N> */{"stc",{A_SR,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ stc GBR,r4 ;!/* 0000nnnn00010010 stc GBR,<REG_N> */{"stc",{A_GBR,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ stc VBR,r4 ;!/* 0000nnnn00100010 stc VBR,<REG_N> */{"stc",{A_VBR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ stc.l SR,@-r4 ;!/* 0100nnnn00000011 stc.l SR,@-<REG_N> */{"stc.l",{A_SR,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_3}, arch_sh_up}
+ stc.l VBR,@-r4 ;!/* 0100nnnn00100011 stc.l VBR,@-<REG_N> */{"stc.l",{A_VBR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_3}, arch_sh_up}
+ stc.l GBR,@-r4 ;!/* 0100nnnn00010011 stc.l GBR,@-<REG_N> */{"stc.l",{A_GBR,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_3}, arch_sh_up}
+ sts MACH,r4 ;!/* 0000nnnn00001010 sts MACH,<REG_N> */{"sts",{A_MACH,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ sts MACL,r4 ;!/* 0000nnnn00011010 sts MACL,<REG_N> */{"sts",{A_MACL,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ sts PR,r4 ;!/* 0000nnnn00101010 sts PR,<REG_N> */{"sts",{A_PR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ sts.l MACH,@-r4 ;!/* 0100nnnn00000010 sts.l MACH,@-<REG_N>*/{"sts.l",{A_MACH,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ sts.l MACL,@-r4 ;!/* 0100nnnn00010010 sts.l MACL,@-<REG_N>*/{"sts.l",{A_MACL,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ sts.l PR,@-r4 ;!/* 0100nnnn00100010 sts.l PR,@-<REG_N> */{"sts.l",{A_PR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ sub r5,r4 ;!/* 0011nnnnmmmm1000 sub <REG_M>,<REG_N> */{"sub",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_8}, arch_sh_up}
+ subc r5,r4 ;!/* 0011nnnnmmmm1010 subc <REG_M>,<REG_N>*/{"subc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_A}, arch_sh_up}
+ subv r5,r4 ;!/* 0011nnnnmmmm1011 subv <REG_M>,<REG_N>*/{"subv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_B}, arch_sh_up}
+ swap.b r5,r4 ;!/* 0110nnnnmmmm1000 swap.b <REG_M>,<REG_N>*/{"swap.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_8}, arch_sh_up}
+ swap.w r5,r4 ;!/* 0110nnnnmmmm1001 swap.w <REG_M>,<REG_N>*/{"swap.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_9}, arch_sh_up}
+ tas.b @r4 ;!/* 0100nnnn00011011 tas.b @<REG_N> */{"tas.b",{A_IND_N},{HEX_4,REG_N,HEX_1,HEX_B}, arch_sh_up}
+ trapa #4 ;!/* 11000011i8*1.... trapa #<imm> */{"trapa",{A_IMM},{HEX_C,HEX_3,IMM0_8}, arch_sh_up}
+ tst #4,R0 ;!/* 11001000i8*1.... tst #<imm>,R0 */{"tst",{A_IMM,A_R0},{HEX_C,HEX_8,IMM0_8}, arch_sh_up}
+ tst r5,r4 ;!/* 0010nnnnmmmm1000 tst <REG_M>,<REG_N> */{"tst",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_8}, arch_sh_up}
+ tst.b #4,@(R0,GBR) ;!/* 11001100i8*1.... tst.b #<imm>,@(R0,GBR)*/{"tst.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_C,IMM0_8}, arch_sh_up}
+ xor #4,R0 ;!/* 11001010i8*1.... xor #<imm>,R0 */{"xor",{A_IMM,A_R0},{HEX_C,HEX_A,IMM0_8}, arch_sh_up}
+ xor r5,r4 ;!/* 0010nnnnmmmm1010 xor <REG_M>,<REG_N> */{"xor",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_A}, arch_sh_up}
+ xor.b #4,@(R0,GBR) ;!/* 11001110i8*1.... xor.b #<imm>,@(R0,GBR)*/{"xor.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_E,IMM0_8}, arch_sh_up}
+ xtrct r5,r4 ;!/* 0010nnnnmmmm1101 xtrct <REG_M>,<REG_N>*/{"xtrct",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_D}, arch_sh_up}
+ dt r4 ;!/* 0100nnnn00010000 dt <REG_N> */{"dt",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_0}, arch_sh2_up}
+ dmuls.l r5,r4 ;!/* 0011nnnnmmmm1101 dmuls.l <REG_M>,<REG_N>*/{"dmuls.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_D}, arch_sh2_up}
+ dmulu.l r5,r4 ;!/* 0011nnnnmmmm0101 dmulu.l <REG_M>,<REG_N>*/{"dmulu.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_5}, arch_sh2_up}
+ mac.l @r5+,@r4+ ;!/* 0000nnnnmmmm1111 mac.l @<REG_M>+,@<REG_N>+*/{"mac.l",{A_INC_M,A_INC_N},{HEX_0,REG_N,REG_M,HEX_F}, arch_sh2_up}
+ braf r4 ;!/* 0000nnnn00100011 braf <REG_N> */{"braf",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_3}, arch_sh2_up}
+ bsrf r4 ;!/* 0000nnnn00000011 bsrf <REG_N> */{"bsrf",{A_REG_N},{HEX_0,REG_N,HEX_0,HEX_3}, arch_sh2_up}
diff --git a/binutils-2.21/ld/testsuite/ld-sh/arch/sh2a-nofpu-or-sh4-nommu-nofpu.s b/binutils-2.21/ld/testsuite/ld-sh/arch/sh2a-nofpu-or-sh4-nommu-nofpu.s
new file mode 100644
index 0000000..cc350c0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/arch/sh2a-nofpu-or-sh4-nommu-nofpu.s
@@ -0,0 +1,169 @@
+! Generated file. DO NOT EDIT.
+!
+! This file was generated by gas/testsuite/gas/sh/arch/arch.exp .
+! This file should contain every instruction valid on
+! architecture sh2a-nofpu-or-sh4-nommu-nofpu but no more.
+! If the tests are failing because the expected results
+! have changed then run 'make check' and copy the new file
+! from <objdir>/gas/testsuite/sh2a-nofpu-or-sh4-nommu-nofpu.s
+! to <srcdir>/gas/testsuite/gas/sh/arch/sh2a-nofpu-or-sh4-nommu-nofpu.s .
+! Make sure there are no unexpected or missing instructions.
+
+ .section .text
+sh2a_nofpu_or_sh4_nommu_nofpu:
+! Instructions introduced into sh2a-nofpu-or-sh4-nommu-nofpu
+ pref @r4 ;!/* 0000nnnn10000011 pref @<REG_N> */{"pref",{A_IND_N},{HEX_0,REG_N,HEX_8,HEX_3}, arch_sh2a_nofpu_or_sh4_nommu_nofpu_up}
+
+! Instructions inherited from ancestors: sh sh2 sh2a-nofpu-or-sh3-nommu
+ add #4,r4 ;!/* 0111nnnni8*1.... add #<imm>,<REG_N> */{"add",{A_IMM,A_REG_N},{HEX_7,REG_N,IMM0_8}, arch_sh_up}
+ add r5,r4 ;!/* 0011nnnnmmmm1100 add <REG_M>,<REG_N> */{"add",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_C}, arch_sh_up}
+ addc r5,r4 ;!/* 0011nnnnmmmm1110 addc <REG_M>,<REG_N>*/{"addc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_E}, arch_sh_up}
+ addv r5,r4 ;!/* 0011nnnnmmmm1111 addv <REG_M>,<REG_N>*/{"addv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_F}, arch_sh_up}
+ and #4,R0 ;!/* 11001001i8*1.... and #<imm>,R0 */{"and",{A_IMM,A_R0},{HEX_C,HEX_9,IMM0_8}, arch_sh_up}
+ and r5,r4 ;!/* 0010nnnnmmmm1001 and <REG_M>,<REG_N> */{"and",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_9}, arch_sh_up}
+ and.b #4,@(R0,GBR) ;!/* 11001101i8*1.... and.b #<imm>,@(R0,GBR)*/{"and.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_D,IMM0_8}, arch_sh_up}
+ bra .+8 ;!/* 1010i12......... bra <bdisp12> */{"bra",{A_BDISP12},{HEX_A,BRANCH_12}, arch_sh_up}
+ bsr .+8 ;!/* 1011i12......... bsr <bdisp12> */{"bsr",{A_BDISP12},{HEX_B,BRANCH_12}, arch_sh_up}
+ bt .+8 ;!/* 10001001i8p1.... bt <bdisp8> */{"bt",{A_BDISP8},{HEX_8,HEX_9,BRANCH_8}, arch_sh_up}
+ bf .+8 ;!/* 10001011i8p1.... bf <bdisp8> */{"bf",{A_BDISP8},{HEX_8,HEX_B,BRANCH_8}, arch_sh_up}
+ bt.s .+8 ;!/* 10001101i8p1.... bt.s <bdisp8> */{"bt.s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bt/s .+8 ;!/* 10001101i8p1.... bt/s <bdisp8> */{"bt/s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bf.s .+8 ;!/* 10001111i8p1.... bf.s <bdisp8> */{"bf.s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ bf/s .+8 ;!/* 10001111i8p1.... bf/s <bdisp8> */{"bf/s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ clrmac ;!/* 0000000000101000 clrmac */{"clrmac",{0},{HEX_0,HEX_0,HEX_2,HEX_8}, arch_sh_up}
+ clrs ;!/* 0000000001001000 clrs */{"clrs",{0},{HEX_0,HEX_0,HEX_4,HEX_8}, arch_sh_up}
+ clrt ;!/* 0000000000001000 clrt */{"clrt",{0},{HEX_0,HEX_0,HEX_0,HEX_8}, arch_sh_up}
+ cmp/eq #4,R0 ;!/* 10001000i8*1.... cmp/eq #<imm>,R0 */{"cmp/eq",{A_IMM,A_R0},{HEX_8,HEX_8,IMM0_8}, arch_sh_up}
+ cmp/eq r5,r4 ;!/* 0011nnnnmmmm0000 cmp/eq <REG_M>,<REG_N>*/{"cmp/eq",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_0}, arch_sh_up}
+ cmp/ge r5,r4 ;!/* 0011nnnnmmmm0011 cmp/ge <REG_M>,<REG_N>*/{"cmp/ge",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_3}, arch_sh_up}
+ cmp/gt r5,r4 ;!/* 0011nnnnmmmm0111 cmp/gt <REG_M>,<REG_N>*/{"cmp/gt",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_7}, arch_sh_up}
+ cmp/hi r5,r4 ;!/* 0011nnnnmmmm0110 cmp/hi <REG_M>,<REG_N>*/{"cmp/hi",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_6}, arch_sh_up}
+ cmp/hs r5,r4 ;!/* 0011nnnnmmmm0010 cmp/hs <REG_M>,<REG_N>*/{"cmp/hs",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_2}, arch_sh_up}
+ cmp/pl r4 ;!/* 0100nnnn00010101 cmp/pl <REG_N> */{"cmp/pl",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_5}, arch_sh_up}
+ cmp/pz r4 ;!/* 0100nnnn00010001 cmp/pz <REG_N> */{"cmp/pz",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_1}, arch_sh_up}
+ cmp/str r5,r4 ;!/* 0010nnnnmmmm1100 cmp/str <REG_M>,<REG_N>*/{"cmp/str",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_C}, arch_sh_up}
+ div0s r5,r4 ;!/* 0010nnnnmmmm0111 div0s <REG_M>,<REG_N>*/{"div0s",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_7}, arch_sh_up}
+ div0u ;!/* 0000000000011001 div0u */{"div0u",{0},{HEX_0,HEX_0,HEX_1,HEX_9}, arch_sh_up}
+ div1 r5,r4 ;!/* 0011nnnnmmmm0100 div1 <REG_M>,<REG_N>*/{"div1",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_4}, arch_sh_up}
+ exts.b r5,r4 ;!/* 0110nnnnmmmm1110 exts.b <REG_M>,<REG_N>*/{"exts.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_E}, arch_sh_up}
+ exts.w r5,r4 ;!/* 0110nnnnmmmm1111 exts.w <REG_M>,<REG_N>*/{"exts.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_F}, arch_sh_up}
+ extu.b r5,r4 ;!/* 0110nnnnmmmm1100 extu.b <REG_M>,<REG_N>*/{"extu.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_C}, arch_sh_up}
+ extu.w r5,r4 ;!/* 0110nnnnmmmm1101 extu.w <REG_M>,<REG_N>*/{"extu.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_D}, arch_sh_up}
+ jmp @r4 ;!/* 0100nnnn00101011 jmp @<REG_N> */{"jmp",{A_IND_N},{HEX_4,REG_N,HEX_2,HEX_B}, arch_sh_up}
+ jsr @r4 ;!/* 0100nnnn00001011 jsr @<REG_N> */{"jsr",{A_IND_N},{HEX_4,REG_N,HEX_0,HEX_B}, arch_sh_up}
+ ldc r4,SR ;!/* 0100nnnn00001110 ldc <REG_N>,SR */{"ldc",{A_REG_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_E}, arch_sh_up}
+ ldc r4,GBR ;!/* 0100nnnn00011110 ldc <REG_N>,GBR */{"ldc",{A_REG_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_E}, arch_sh_up}
+ ldc r4,VBR ;!/* 0100nnnn00101110 ldc <REG_N>,VBR */{"ldc",{A_REG_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_E}, arch_sh_up}
+ ldc.l @r4+,SR ;!/* 0100nnnn00000111 ldc.l @<REG_N>+,SR */{"ldc.l",{A_INC_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_7}, arch_sh_up}
+ ldc.l @r4+,GBR ;!/* 0100nnnn00010111 ldc.l @<REG_N>+,GBR */{"ldc.l",{A_INC_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_7}, arch_sh_up}
+ ldc.l @r4+,VBR ;!/* 0100nnnn00100111 ldc.l @<REG_N>+,VBR */{"ldc.l",{A_INC_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_7}, arch_sh_up}
+ lds r4,MACH ;!/* 0100nnnn00001010 lds <REG_N>,MACH */{"lds",{A_REG_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ lds r4,MACL ;!/* 0100nnnn00011010 lds <REG_N>,MACL */{"lds",{A_REG_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ lds r4,PR ;!/* 0100nnnn00101010 lds <REG_N>,PR */{"lds",{A_REG_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ lds.l @r4+,MACH ;!/* 0100nnnn00000110 lds.l @<REG_N>+,MACH*/{"lds.l",{A_INC_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_6}, arch_sh_up}
+ lds.l @r4+,MACL ;!/* 0100nnnn00010110 lds.l @<REG_N>+,MACL*/{"lds.l",{A_INC_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_6}, arch_sh_up}
+ lds.l @r4+,PR ;!/* 0100nnnn00100110 lds.l @<REG_N>+,PR */{"lds.l",{A_INC_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_6}, arch_sh_up}
+ mac.w @r5+,@r4+ ;!/* 0100nnnnmmmm1111 mac.w @<REG_M>+,@<REG_N>+*/{"mac.w",{A_INC_M,A_INC_N},{HEX_4,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mov #4,r4 ;!/* 1110nnnni8*1.... mov #<imm>,<REG_N> */{"mov",{A_IMM,A_REG_N},{HEX_E,REG_N,IMM0_8}, arch_sh_up}
+ mov r5,r4 ;!/* 0110nnnnmmmm0011 mov <REG_M>,<REG_N> */{"mov",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_3}, arch_sh_up}
+ mov.b r5,@(R0,r4) ;!/* 0000nnnnmmmm0100 mov.b <REG_M>,@(R0,<REG_N>)*/{"mov.b",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@-r4 ;!/* 0010nnnnmmmm0100 mov.b <REG_M>,@-<REG_N>*/{"mov.b",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@r4 ;!/* 0010nnnnmmmm0000 mov.b <REG_M>,@<REG_N>*/{"mov.b",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b @(8,r5),R0 ;!/* 10000100mmmmi4*1 mov.b @(<disp>,<REG_M>),R0*/{"mov.b",{A_DISP_REG_M,A_R0},{HEX_8,HEX_4,REG_M,IMM0_4}, arch_sh_up}
+ mov.b @(8,GBR),R0 ;!/* 11000100i8*1.... mov.b @(<disp>,GBR),R0*/{"mov.b",{A_DISP_GBR,A_R0},{HEX_C,HEX_4,IMM0_8}, arch_sh_up}
+ mov.b @(R0,r5),r4 ;!/* 0000nnnnmmmm1100 mov.b @(R0,<REG_M>),<REG_N>*/{"mov.b",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_C}, arch_sh_up}
+ mov.b @r5+,r4 ;!/* 0110nnnnmmmm0100 mov.b @<REG_M>+,<REG_N>*/{"mov.b",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b @r5,r4 ;!/* 0110nnnnmmmm0000 mov.b @<REG_M>,<REG_N>*/{"mov.b",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b R0,@(8,r5) ;!/* 10000000mmmmi4*1 mov.b R0,@(<disp>,<REG_M>)*/{"mov.b",{A_R0,A_DISP_REG_M},{HEX_8,HEX_0,REG_M,IMM1_4}, arch_sh_up}
+ mov.b R0,@(8,GBR) ;!/* 11000000i8*1.... mov.b R0,@(<disp>,GBR)*/{"mov.b",{A_R0,A_DISP_GBR},{HEX_C,HEX_0,IMM1_8}, arch_sh_up}
+ mov.l r5,@(8,r4) ;!/* 0001nnnnmmmmi4*4 mov.l <REG_M>,@(<disp>,<REG_N>)*/{"mov.l",{ A_REG_M,A_DISP_REG_N},{HEX_1,REG_N,REG_M,IMM1_4BY4}, arch_sh_up}
+ mov.l r5,@(R0,r4) ;!/* 0000nnnnmmmm0110 mov.l <REG_M>,@(R0,<REG_N>)*/{"mov.l",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@-r4 ;!/* 0010nnnnmmmm0110 mov.l <REG_M>,@-<REG_N>*/{"mov.l",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@r4 ;!/* 0010nnnnmmmm0010 mov.l <REG_M>,@<REG_N>*/{"mov.l",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l @(8,r5),r4 ;!/* 0101nnnnmmmmi4*4 mov.l @(<disp>,<REG_M>),<REG_N>*/{"mov.l",{A_DISP_REG_M,A_REG_N},{HEX_5,REG_N,REG_M,IMM0_4BY4}, arch_sh_up}
+ mov.l @(8,GBR),R0 ;!/* 11000110i8*4.... mov.l @(<disp>,GBR),R0*/{"mov.l",{A_DISP_GBR,A_R0},{HEX_C,HEX_6,IMM0_8BY4}, arch_sh_up}
+ .align 2
+ mov.l @(8,PC),r4 ;!/* 1101nnnni8p4.... mov.l @(<disp>,PC),<REG_N>*/{"mov.l",{A_DISP_PC,A_REG_N},{HEX_D,REG_N,PCRELIMM_8BY4}, arch_sh_up}
+ mov.l @(R0,r5),r4 ;!/* 0000nnnnmmmm1110 mov.l @(R0,<REG_M>),<REG_N>*/{"mov.l",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mov.l @r5+,r4 ;!/* 0110nnnnmmmm0110 mov.l @<REG_M>+,<REG_N>*/{"mov.l",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l @r5,r4 ;!/* 0110nnnnmmmm0010 mov.l @<REG_M>,<REG_N>*/{"mov.l",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l R0,@(8,GBR) ;!/* 11000010i8*4.... mov.l R0,@(<disp>,GBR)*/{"mov.l",{A_R0,A_DISP_GBR},{HEX_C,HEX_2,IMM1_8BY4}, arch_sh_up}
+ mov.w r5,@(R0,r4) ;!/* 0000nnnnmmmm0101 mov.w <REG_M>,@(R0,<REG_N>)*/{"mov.w",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@-r4 ;!/* 0010nnnnmmmm0101 mov.w <REG_M>,@-<REG_N>*/{"mov.w",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@r4 ;!/* 0010nnnnmmmm0001 mov.w <REG_M>,@<REG_N>*/{"mov.w",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w @(8,r5),R0 ;!/* 10000101mmmmi4*2 mov.w @(<disp>,<REG_M>),R0*/{"mov.w",{A_DISP_REG_M,A_R0},{HEX_8,HEX_5,REG_M,IMM0_4BY2}, arch_sh_up}
+ mov.w @(8,GBR),R0 ;!/* 11000101i8*2.... mov.w @(<disp>,GBR),R0*/{"mov.w",{A_DISP_GBR,A_R0},{HEX_C,HEX_5,IMM0_8BY2}, arch_sh_up}
+ mov.w @(8,PC),r4 ;!/* 1001nnnni8p2.... mov.w @(<disp>,PC),<REG_N>*/{"mov.w",{A_DISP_PC,A_REG_N},{HEX_9,REG_N,PCRELIMM_8BY2}, arch_sh_up}
+ mov.w @(R0,r5),r4 ;!/* 0000nnnnmmmm1101 mov.w @(R0,<REG_M>),<REG_N>*/{"mov.w",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_D}, arch_sh_up}
+ mov.w @r5+,r4 ;!/* 0110nnnnmmmm0101 mov.w @<REG_M>+,<REG_N>*/{"mov.w",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w @r5,r4 ;!/* 0110nnnnmmmm0001 mov.w @<REG_M>,<REG_N>*/{"mov.w",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w R0,@(8,r5) ;!/* 10000001mmmmi4*2 mov.w R0,@(<disp>,<REG_M>)*/{"mov.w",{A_R0,A_DISP_REG_M},{HEX_8,HEX_1,REG_M,IMM1_4BY2}, arch_sh_up}
+ mov.w R0,@(8,GBR) ;!/* 11000001i8*2.... mov.w R0,@(<disp>,GBR)*/{"mov.w",{A_R0,A_DISP_GBR},{HEX_C,HEX_1,IMM1_8BY2}, arch_sh_up}
+ .align 2
+ mova @(8,PC),R0 ;!/* 11000111i8p4.... mova @(<disp>,PC),R0*/{"mova",{A_DISP_PC,A_R0},{HEX_C,HEX_7,PCRELIMM_8BY4}, arch_sh_up}
+ movt r4 ;!/* 0000nnnn00101001 movt <REG_N> */{"movt",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ muls.w r5,r4 ;!/* 0010nnnnmmmm1111 muls.w <REG_M>,<REG_N>*/{"muls.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ muls r5,r4 ;!/* 0010nnnnmmmm1111 muls <REG_M>,<REG_N>*/{"muls",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mul.l r5,r4 ;!/* 0000nnnnmmmm0111 mul.l <REG_M>,<REG_N>*/{"mul.l",{ A_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_7}, arch_sh2_up}
+ mulu.w r5,r4 ;!/* 0010nnnnmmmm1110 mulu.w <REG_M>,<REG_N>*/{"mulu.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mulu r5,r4 ;!/* 0010nnnnmmmm1110 mulu <REG_M>,<REG_N>*/{"mulu",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ neg r5,r4 ;!/* 0110nnnnmmmm1011 neg <REG_M>,<REG_N> */{"neg",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_B}, arch_sh_up}
+ negc r5,r4 ;!/* 0110nnnnmmmm1010 negc <REG_M>,<REG_N>*/{"negc",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_A}, arch_sh_up}
+ nop ;!/* 0000000000001001 nop */{"nop",{0},{HEX_0,HEX_0,HEX_0,HEX_9}, arch_sh_up}
+ not r5,r4 ;!/* 0110nnnnmmmm0111 not <REG_M>,<REG_N> */{"not",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_7}, arch_sh_up}
+ or #4,R0 ;!/* 11001011i8*1.... or #<imm>,R0 */{"or",{A_IMM,A_R0},{HEX_C,HEX_B,IMM0_8}, arch_sh_up}
+ or r5,r4 ;!/* 0010nnnnmmmm1011 or <REG_M>,<REG_N> */{"or",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_B}, arch_sh_up}
+ or.b #4,@(R0,GBR) ;!/* 11001111i8*1.... or.b #<imm>,@(R0,GBR)*/{"or.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_F,IMM0_8}, arch_sh_up}
+ rotcl r4 ;!/* 0100nnnn00100100 rotcl <REG_N> */{"rotcl",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_4}, arch_sh_up}
+ rotcr r4 ;!/* 0100nnnn00100101 rotcr <REG_N> */{"rotcr",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_5}, arch_sh_up}
+ rotl r4 ;!/* 0100nnnn00000100 rotl <REG_N> */{"rotl",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_4}, arch_sh_up}
+ rotr r4 ;!/* 0100nnnn00000101 rotr <REG_N> */{"rotr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_5}, arch_sh_up}
+ rte ;!/* 0000000000101011 rte */{"rte",{0},{HEX_0,HEX_0,HEX_2,HEX_B}, arch_sh_up}
+ rts ;!/* 0000000000001011 rts */{"rts",{0},{HEX_0,HEX_0,HEX_0,HEX_B}, arch_sh_up}
+ sets ;!/* 0000000001011000 sets */{"sets",{0},{HEX_0,HEX_0,HEX_5,HEX_8}, arch_sh_up}
+ sett ;!/* 0000000000011000 sett */{"sett",{0},{HEX_0,HEX_0,HEX_1,HEX_8}, arch_sh_up}
+ shad r5,r4 ;!/* 0100nnnnmmmm1100 shad <REG_M>,<REG_N>*/{"shad",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_C}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shld r5,r4 ;!/* 0100nnnnmmmm1101 shld <REG_M>,<REG_N>*/{"shld",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_D}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shal r4 ;!/* 0100nnnn00100000 shal <REG_N> */{"shal",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_0}, arch_sh_up}
+ shar r4 ;!/* 0100nnnn00100001 shar <REG_N> */{"shar",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_1}, arch_sh_up}
+ shll r4 ;!/* 0100nnnn00000000 shll <REG_N> */{"shll",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_0}, arch_sh_up}
+ shll16 r4 ;!/* 0100nnnn00101000 shll16 <REG_N> */{"shll16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_8}, arch_sh_up}
+ shll2 r4 ;!/* 0100nnnn00001000 shll2 <REG_N> */{"shll2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_8}, arch_sh_up}
+ shll8 r4 ;!/* 0100nnnn00011000 shll8 <REG_N> */{"shll8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_8}, arch_sh_up}
+ shlr r4 ;!/* 0100nnnn00000001 shlr <REG_N> */{"shlr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_1}, arch_sh_up}
+ shlr16 r4 ;!/* 0100nnnn00101001 shlr16 <REG_N> */{"shlr16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ shlr2 r4 ;!/* 0100nnnn00001001 shlr2 <REG_N> */{"shlr2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_9}, arch_sh_up}
+ shlr8 r4 ;!/* 0100nnnn00011001 shlr8 <REG_N> */{"shlr8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_9}, arch_sh_up}
+ sleep ;!/* 0000000000011011 sleep */{"sleep",{0},{HEX_0,HEX_0,HEX_1,HEX_B}, arch_sh_up}
+ stc SR,r4 ;!/* 0000nnnn00000010 stc SR,<REG_N> */{"stc",{A_SR,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ stc GBR,r4 ;!/* 0000nnnn00010010 stc GBR,<REG_N> */{"stc",{A_GBR,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ stc VBR,r4 ;!/* 0000nnnn00100010 stc VBR,<REG_N> */{"stc",{A_VBR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ stc.l SR,@-r4 ;!/* 0100nnnn00000011 stc.l SR,@-<REG_N> */{"stc.l",{A_SR,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_3}, arch_sh_up}
+ stc.l VBR,@-r4 ;!/* 0100nnnn00100011 stc.l VBR,@-<REG_N> */{"stc.l",{A_VBR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_3}, arch_sh_up}
+ stc.l GBR,@-r4 ;!/* 0100nnnn00010011 stc.l GBR,@-<REG_N> */{"stc.l",{A_GBR,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_3}, arch_sh_up}
+ sts MACH,r4 ;!/* 0000nnnn00001010 sts MACH,<REG_N> */{"sts",{A_MACH,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ sts MACL,r4 ;!/* 0000nnnn00011010 sts MACL,<REG_N> */{"sts",{A_MACL,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ sts PR,r4 ;!/* 0000nnnn00101010 sts PR,<REG_N> */{"sts",{A_PR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ sts.l MACH,@-r4 ;!/* 0100nnnn00000010 sts.l MACH,@-<REG_N>*/{"sts.l",{A_MACH,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ sts.l MACL,@-r4 ;!/* 0100nnnn00010010 sts.l MACL,@-<REG_N>*/{"sts.l",{A_MACL,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ sts.l PR,@-r4 ;!/* 0100nnnn00100010 sts.l PR,@-<REG_N> */{"sts.l",{A_PR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ sub r5,r4 ;!/* 0011nnnnmmmm1000 sub <REG_M>,<REG_N> */{"sub",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_8}, arch_sh_up}
+ subc r5,r4 ;!/* 0011nnnnmmmm1010 subc <REG_M>,<REG_N>*/{"subc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_A}, arch_sh_up}
+ subv r5,r4 ;!/* 0011nnnnmmmm1011 subv <REG_M>,<REG_N>*/{"subv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_B}, arch_sh_up}
+ swap.b r5,r4 ;!/* 0110nnnnmmmm1000 swap.b <REG_M>,<REG_N>*/{"swap.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_8}, arch_sh_up}
+ swap.w r5,r4 ;!/* 0110nnnnmmmm1001 swap.w <REG_M>,<REG_N>*/{"swap.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_9}, arch_sh_up}
+ tas.b @r4 ;!/* 0100nnnn00011011 tas.b @<REG_N> */{"tas.b",{A_IND_N},{HEX_4,REG_N,HEX_1,HEX_B}, arch_sh_up}
+ trapa #4 ;!/* 11000011i8*1.... trapa #<imm> */{"trapa",{A_IMM},{HEX_C,HEX_3,IMM0_8}, arch_sh_up}
+ tst #4,R0 ;!/* 11001000i8*1.... tst #<imm>,R0 */{"tst",{A_IMM,A_R0},{HEX_C,HEX_8,IMM0_8}, arch_sh_up}
+ tst r5,r4 ;!/* 0010nnnnmmmm1000 tst <REG_M>,<REG_N> */{"tst",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_8}, arch_sh_up}
+ tst.b #4,@(R0,GBR) ;!/* 11001100i8*1.... tst.b #<imm>,@(R0,GBR)*/{"tst.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_C,IMM0_8}, arch_sh_up}
+ xor #4,R0 ;!/* 11001010i8*1.... xor #<imm>,R0 */{"xor",{A_IMM,A_R0},{HEX_C,HEX_A,IMM0_8}, arch_sh_up}
+ xor r5,r4 ;!/* 0010nnnnmmmm1010 xor <REG_M>,<REG_N> */{"xor",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_A}, arch_sh_up}
+ xor.b #4,@(R0,GBR) ;!/* 11001110i8*1.... xor.b #<imm>,@(R0,GBR)*/{"xor.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_E,IMM0_8}, arch_sh_up}
+ xtrct r5,r4 ;!/* 0010nnnnmmmm1101 xtrct <REG_M>,<REG_N>*/{"xtrct",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_D}, arch_sh_up}
+ dt r4 ;!/* 0100nnnn00010000 dt <REG_N> */{"dt",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_0}, arch_sh2_up}
+ dmuls.l r5,r4 ;!/* 0011nnnnmmmm1101 dmuls.l <REG_M>,<REG_N>*/{"dmuls.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_D}, arch_sh2_up}
+ dmulu.l r5,r4 ;!/* 0011nnnnmmmm0101 dmulu.l <REG_M>,<REG_N>*/{"dmulu.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_5}, arch_sh2_up}
+ mac.l @r5+,@r4+ ;!/* 0000nnnnmmmm1111 mac.l @<REG_M>+,@<REG_N>+*/{"mac.l",{A_INC_M,A_INC_N},{HEX_0,REG_N,REG_M,HEX_F}, arch_sh2_up}
+ braf r4 ;!/* 0000nnnn00100011 braf <REG_N> */{"braf",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_3}, arch_sh2_up}
+ bsrf r4 ;!/* 0000nnnn00000011 bsrf <REG_N> */{"bsrf",{A_REG_N},{HEX_0,REG_N,HEX_0,HEX_3}, arch_sh2_up}
diff --git a/binutils-2.21/ld/testsuite/ld-sh/arch/sh2a-nofpu.s b/binutils-2.21/ld/testsuite/ld-sh/arch/sh2a-nofpu.s
new file mode 100644
index 0000000..878a5a3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/arch/sh2a-nofpu.s
@@ -0,0 +1,221 @@
+! Generated file. DO NOT EDIT.
+!
+! This file was generated by gas/testsuite/gas/sh/arch/arch.exp .
+! This file should contain every instruction valid on
+! architecture sh2a-nofpu but no more.
+! If the tests are failing because the expected results
+! have changed then run 'make check' and copy the new file
+! from <objdir>/gas/testsuite/sh2a-nofpu.s
+! to <srcdir>/gas/testsuite/gas/sh/arch/sh2a-nofpu.s .
+! Make sure there are no unexpected or missing instructions.
+
+ .section .text
+sh2a_nofpu:
+! Instructions introduced into sh2a-nofpu
+ ldc r5,TBR ;!/* 0100mmmm01001010 ldc <REG_M>,TBR */{"ldc",{A_REG_M,A_TBR},{HEX_4,REG_M,HEX_4,HEX_A}, arch_sh2a_nofpu_up}
+ mov.b R0,@r4+ ;!/* 0100nnnn10001011 mov.b R0,@<REG_N>+ */{"mov.b",{A_R0,A_INC_N},{HEX_4,REG_N,HEX_8,HEX_B}, arch_sh2a_nofpu_up}
+ mov.b @-r5,R0 ;!/* 0100nnnn11001011 mov.b @-<REG_M>,R0 */{"mov.b",{A_DEC_M,A_R0},{HEX_4,REG_M,HEX_C,HEX_B}, arch_sh2a_nofpu_up}
+ mov.b r5,@(2048,r4) ;!/* 0011nnnnmmmm0001 0000dddddddddddd mov.b <REG_M>,@(<DISP12>,<REG_N>) */ {"mov.b",{A_REG_M,A_DISP_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_0,DISP1_12}, arch_sh2a_nofpu_up | arch_op32}
+ mov.b @(2048,r5),r4 ;!/* 0011nnnnmmmm0001 0100dddddddddddd mov.b @(<DISP12>,<REG_M>),<REG_N> */ {"mov.b",{A_DISP_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_4,DISP0_12}, arch_sh2a_nofpu_up | arch_op32}
+ mov.l R0,@r4+ ;!/* 0100nnnn10101011 mov.l R0,@<REG_N>+ */{"mov.l",{A_R0,A_INC_N},{HEX_4,REG_N,HEX_A,HEX_B}, arch_sh2a_nofpu_up}
+ mov.l @-r5,R0 ;!/* 0100nnnn11001011 mov.l @-<REG_M>,R0 */{"mov.l",{A_DEC_M,A_R0},{HEX_4,REG_M,HEX_E,HEX_B}, arch_sh2a_nofpu_up}
+ mov.l r5,@(2048,r4) ;!/* 0011nnnnmmmm0001 0010dddddddddddd mov.l <REG_M>,@(<DISP12>,<REG_N>) */ {"mov.l",{A_REG_M,A_DISP_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_2,DISP1_12BY4}, arch_sh2a_nofpu_up | arch_op32}
+ mov.l @(2048,r5),r4 ;!/* 0011nnnnmmmm0001 0110dddddddddddd mov.l @(<DISP12>,<REG_M>),<REG_N> */ {"mov.l",{A_DISP_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_6,DISP0_12BY4}, arch_sh2a_nofpu_up | arch_op32}
+ mov.w R0,@r4+ ;!/* 0100nnnn10011011 mov.w R0,@<REG_N>+ */{"mov.w",{A_R0,A_INC_N},{HEX_4,REG_N,HEX_9,HEX_B}, arch_sh2a_nofpu_up}
+ mov.w @-r5,R0 ;!/* 0100nnnn11011011 mov.w @-<REG_M>,R0 */{"mov.w",{A_DEC_M,A_R0},{HEX_4,REG_M,HEX_D,HEX_B}, arch_sh2a_nofpu_up}
+ mov.w r5,@(2048,r4) ;!/* 0011nnnnmmmm0001 0001dddddddddddd mov.w <REG_M>,@(<DISP12>,<REG_N>) */ {"mov.w",{A_REG_M,A_DISP_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_1,DISP1_12BY2}, arch_sh2a_nofpu_up | arch_op32}
+ mov.w @(2048,r5),r4 ;!/* 0011nnnnmmmm0001 0101dddddddddddd mov.w @(<DISP12>,<REG_M>),<REG_N> */ {"mov.w",{A_DISP_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_5,DISP0_12BY2}, arch_sh2a_nofpu_up | arch_op32}
+ stc TBR,r4 ;!/* 0000nnnn01001010 stc TBR,<REG_N> */ {"stc",{A_TBR,A_REG_N},{HEX_0,REG_N,HEX_4,HEX_A}, arch_sh2a_nofpu_up}
+ bclr #4, r4 ;!/* 10000110nnnn0iii bclr #<imm>, <REG_N> */ {"bclr",{A_IMM, A_REG_N},{HEX_8,HEX_6,REG_N,IMM0_3c}, arch_sh2a_nofpu_up}
+ bclr.b #4,@(2048,r4) ;!/* 0011nnnn0iii1001 0000dddddddddddd bclr.b #<imm>,@(<DISP12>,<REG_N>) */ {"bclr.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_0,DISP1_12}, arch_sh2a_nofpu_up | arch_op32}
+ bld #4, r4 ;!/* 10000111nnnn1iii bld #<imm>, <REG_N> */ {"bld",{A_IMM, A_REG_N},{HEX_8,HEX_7,REG_N,IMM0_3s}, arch_sh2a_nofpu_up}
+ bld.b #4,@(2048,r4) ;!/* 0011nnnn0iii1001 0011dddddddddddd bld.b #<imm>,@(<DISP12>,<REG_N>) */ {"bld.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_3,DISP1_12}, arch_sh2a_nofpu_up | arch_op32}
+ bset #4, r4 ;!/* 10000110nnnn1iii bset #<imm>, <REG_N> */ {"bset",{A_IMM, A_REG_N},{HEX_8,HEX_6,REG_N,IMM0_3s}, arch_sh2a_nofpu_up}
+ bset.b #4,@(2048,r4) ;!/* 0011nnnn0iii1001 0001dddddddddddd bset.b #<imm>,@(<DISP12>,<REG_N>) */ {"bset.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_1,DISP1_12}, arch_sh2a_nofpu_up | arch_op32}
+ bst #4, r4 ;!/* 10000111nnnn0iii bst #<imm>, <REG_N> */ {"bst",{A_IMM, A_REG_N},{HEX_8,HEX_7,REG_N,IMM0_3c}, arch_sh2a_nofpu_up}
+ bst.b #4,@(2048,r4) ;!/* 0011nnnn0iii1001 0010dddddddddddd bst.b #<imm>,@(<DISP12>,<REG_N>) */ {"bst.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_2,DISP1_12}, arch_sh2a_nofpu_up | arch_op32}
+ clips.b r4 ;!/* 0100nnnn10010001 clips.b <REG_N> */ {"clips.b",{A_REG_N},{HEX_4,REG_N,HEX_9,HEX_1}, arch_sh2a_nofpu_up}
+ clips.w r4 ;!/* 0100nnnn10010101 clips.w <REG_N> */ {"clips.w",{A_REG_N},{HEX_4,REG_N,HEX_9,HEX_5}, arch_sh2a_nofpu_up}
+ clipu.b r4 ;!/* 0100nnnn10000001 clipu.b <REG_N> */ {"clipu.b",{A_REG_N},{HEX_4,REG_N,HEX_8,HEX_1}, arch_sh2a_nofpu_up}
+ clipu.w r4 ;!/* 0100nnnn10000101 clipu.w <REG_N> */ {"clipu.w",{A_REG_N},{HEX_4,REG_N,HEX_8,HEX_5}, arch_sh2a_nofpu_up}
+ divs R0,r4 ;!/* 0100nnnn10010100 divs R0,<REG_N> */ {"divs",{A_R0,A_REG_N},{HEX_4,REG_N,HEX_9,HEX_4}, arch_sh2a_nofpu_up}
+ divu R0,r4 ;!/* 0100nnnn10000100 divu R0,<REG_N> */ {"divu",{A_R0,A_REG_N},{HEX_4,REG_N,HEX_8,HEX_4}, arch_sh2a_nofpu_up}
+ jsr/n @r5 ;!/* 0100mmmm01001011 jsr/n @<REG_M> */ {"jsr/n",{A_IND_M},{HEX_4,REG_M,HEX_4,HEX_B}, arch_sh2a_nofpu_up}
+ jsr/n @@(8,TBR) ;!/* 10000011dddddddd jsr/n @@(<disp>,TBR) */ {"jsr/n",{A_DISP2_TBR},{HEX_8,HEX_3,IMM0_8BY4}, arch_sh2a_nofpu_up}
+ ldbank @r5,R0 ;!/* 0100mmmm11100101 ldbank @<REG_M>,R0 */ {"ldbank",{A_IND_M,A_R0},{HEX_4,REG_M,HEX_E,HEX_5}, arch_sh2a_nofpu_up}
+ movml.l r5,@-R15 ;!/* 0100mmmm11110001 movml.l <REG_M>,@-R15 */ {"movml.l",{A_REG_M,A_DEC_R15},{HEX_4,REG_M,HEX_F,HEX_1}, arch_sh2a_nofpu_up}
+ movml.l @R15+,r5 ;!/* 0100mmmm11110101 movml.l @R15+,<REG_M> */ {"movml.l",{A_INC_R15,A_REG_M},{HEX_4,REG_M,HEX_F,HEX_5}, arch_sh2a_nofpu_up}
+ movml.l r5,@-R15 ;!/* 0100mmmm11110000 movml.l <REG_M>,@-R15 */ {"movmu.l",{A_REG_M,A_DEC_R15},{HEX_4,REG_M,HEX_F,HEX_0}, arch_sh2a_nofpu_up}
+ movml.l @R15+,r5 ;!/* 0100mmmm11110100 movml.l @R15+,<REG_M> */ {"movmu.l",{A_INC_R15,A_REG_M},{HEX_4,REG_M,HEX_F,HEX_4}, arch_sh2a_nofpu_up}
+ movrt r4 ;!/* 0000nnnn00111001 movrt <REG_N> */ {"movrt",{A_REG_N},{HEX_0,REG_N,HEX_3,HEX_9}, arch_sh2a_nofpu_up}
+ mulr R0,r4 ;!/* 0100nnnn10000000 mulr R0,<REG_N> */ {"mulr",{A_R0,A_REG_N},{HEX_4,REG_N,HEX_8,HEX_0}, arch_sh2a_nofpu_up}
+ nott ;!/* 0000000001101000 nott */ {"nott",{A_END},{HEX_0,HEX_0,HEX_6,HEX_8}, arch_sh2a_nofpu_up}
+ resbank ;!/* 0000000001011011 resbank */ {"resbank",{A_END},{HEX_0,HEX_0,HEX_5,HEX_B}, arch_sh2a_nofpu_up}
+ rts/n ;!/* 0000000001101011 rts/n */ {"rts/n",{A_END},{HEX_0,HEX_0,HEX_6,HEX_B}, arch_sh2a_nofpu_up}
+ rtv/n r5 ;!/* 0000mmmm01111011 rtv/n <REG_M>*/ {"rtv/n",{A_REG_M},{HEX_0,REG_M,HEX_7,HEX_B}, arch_sh2a_nofpu_up}
+ stbank R0,@r4 ;!/* 0100nnnn11100001 stbank R0,@<REG_N>*/ {"stbank",{A_R0,A_IND_N},{HEX_4,REG_N,HEX_E,HEX_1}, arch_sh2a_nofpu_up}
+ band.b #4,@(2048,r4) ;!/* 0011nnnn0iii1001 0100dddddddddddd band.b #<imm>,@(<DISP12>,<REG_N>) */ {"band.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_4,DISP1_12}, arch_sh2a_nofpu_up | arch_op32}
+ bandnot.b #4,@(2048,r4) ;!/* 0011nnnn0iii1001 1100dddddddddddd bandnot.b #<imm>,@(<DISP12>,<REG_N>) */ {"bandnot.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_C,DISP1_12}, arch_sh2a_nofpu_up | arch_op32}
+ bldnot.b #4,@(2048,r4) ;!/* 0011nnnn0iii1001 1011dddddddddddd bldnot.b #<imm>,@(<DISP12>,<REG_N>) */ {"bldnot.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_B,DISP1_12}, arch_sh2a_nofpu_up | arch_op32}
+ bor.b #4,@(2048,r4) ;!/* 0011nnnn0iii1001 0101dddddddddddd bor.b #<imm>,@(<DISP12>,<REG_N>) */ {"bor.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_5,DISP1_12}, arch_sh2a_nofpu_up | arch_op32}
+ bornot.b #4,@(2048,r4) ;!/* 0011nnnn0iii1001 1101dddddddddddd bornot.b #<imm>,@(<DISP12>,<REG_N>) */ {"bornot.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_D,DISP1_12}, arch_sh2a_nofpu_up | arch_op32}
+ bxor.b #4,@(2048,r4) ;!/* 0011nnnn0iii1001 0110dddddddddddd bxor.b #<imm>,@(<DISP12>,<REG_N>) */ {"bxor.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_6,DISP1_12}, arch_sh2a_nofpu_up | arch_op32}
+ movi20 #4,r4 ;!/* 0000nnnniiii0000 iiiiiiiiiiiiiiii movi20 #<imm>,<REG_N> */ {"movi20",{A_IMM,A_REG_N},{HEX_0,REG_N,IMM0_20_4,HEX_0,IMM0_20}, arch_sh2a_nofpu_up | arch_op32}
+ movi20s #1024,r4 ;!/* 0000nnnniiii0001 iiiiiiiiiiiiiiii movi20s #<imm>,<REG_N> */ {"movi20s",{A_IMM,A_REG_N},{HEX_0,REG_N,IMM0_20_4,HEX_1,IMM0_20BY8}, arch_sh2a_nofpu_up | arch_op32}
+ movu.b @(2048,r5),r4 ;!/* 0011nnnnmmmm0001 1000dddddddddddd movu.b @(<DISP12>,<REG_M>),<REG_N> */ {"movu.b",{A_DISP_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_8,DISP0_12}, arch_sh2a_nofpu_up | arch_op32}
+ movu.w @(2048,r5),r4 ;!/* 0011nnnnmmmm0001 1001dddddddddddd movu.w @(<DISP12>,<REG_M>),<REG_N> */ {"movu.w",{A_DISP_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_9,DISP0_12BY2}, arch_sh2a_nofpu_up | arch_op32}
+
+! Instructions inherited from ancestors: sh sh2 sh2a-nofpu-or-sh3-nommu sh2a-nofpu-or-sh4-nommu-nofpu
+ add #4,r4 ;!/* 0111nnnni8*1.... add #<imm>,<REG_N> */{"add",{A_IMM,A_REG_N},{HEX_7,REG_N,IMM0_8}, arch_sh_up}
+ add r5,r4 ;!/* 0011nnnnmmmm1100 add <REG_M>,<REG_N> */{"add",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_C}, arch_sh_up}
+ addc r5,r4 ;!/* 0011nnnnmmmm1110 addc <REG_M>,<REG_N>*/{"addc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_E}, arch_sh_up}
+ addv r5,r4 ;!/* 0011nnnnmmmm1111 addv <REG_M>,<REG_N>*/{"addv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_F}, arch_sh_up}
+ and #4,R0 ;!/* 11001001i8*1.... and #<imm>,R0 */{"and",{A_IMM,A_R0},{HEX_C,HEX_9,IMM0_8}, arch_sh_up}
+ and r5,r4 ;!/* 0010nnnnmmmm1001 and <REG_M>,<REG_N> */{"and",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_9}, arch_sh_up}
+ and.b #4,@(R0,GBR) ;!/* 11001101i8*1.... and.b #<imm>,@(R0,GBR)*/{"and.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_D,IMM0_8}, arch_sh_up}
+ bra .+8 ;!/* 1010i12......... bra <bdisp12> */{"bra",{A_BDISP12},{HEX_A,BRANCH_12}, arch_sh_up}
+ bsr .+8 ;!/* 1011i12......... bsr <bdisp12> */{"bsr",{A_BDISP12},{HEX_B,BRANCH_12}, arch_sh_up}
+ bt .+8 ;!/* 10001001i8p1.... bt <bdisp8> */{"bt",{A_BDISP8},{HEX_8,HEX_9,BRANCH_8}, arch_sh_up}
+ bf .+8 ;!/* 10001011i8p1.... bf <bdisp8> */{"bf",{A_BDISP8},{HEX_8,HEX_B,BRANCH_8}, arch_sh_up}
+ bt.s .+8 ;!/* 10001101i8p1.... bt.s <bdisp8> */{"bt.s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bt/s .+8 ;!/* 10001101i8p1.... bt/s <bdisp8> */{"bt/s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bf.s .+8 ;!/* 10001111i8p1.... bf.s <bdisp8> */{"bf.s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ bf/s .+8 ;!/* 10001111i8p1.... bf/s <bdisp8> */{"bf/s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ clrmac ;!/* 0000000000101000 clrmac */{"clrmac",{0},{HEX_0,HEX_0,HEX_2,HEX_8}, arch_sh_up}
+ clrs ;!/* 0000000001001000 clrs */{"clrs",{0},{HEX_0,HEX_0,HEX_4,HEX_8}, arch_sh_up}
+ clrt ;!/* 0000000000001000 clrt */{"clrt",{0},{HEX_0,HEX_0,HEX_0,HEX_8}, arch_sh_up}
+ cmp/eq #4,R0 ;!/* 10001000i8*1.... cmp/eq #<imm>,R0 */{"cmp/eq",{A_IMM,A_R0},{HEX_8,HEX_8,IMM0_8}, arch_sh_up}
+ cmp/eq r5,r4 ;!/* 0011nnnnmmmm0000 cmp/eq <REG_M>,<REG_N>*/{"cmp/eq",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_0}, arch_sh_up}
+ cmp/ge r5,r4 ;!/* 0011nnnnmmmm0011 cmp/ge <REG_M>,<REG_N>*/{"cmp/ge",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_3}, arch_sh_up}
+ cmp/gt r5,r4 ;!/* 0011nnnnmmmm0111 cmp/gt <REG_M>,<REG_N>*/{"cmp/gt",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_7}, arch_sh_up}
+ cmp/hi r5,r4 ;!/* 0011nnnnmmmm0110 cmp/hi <REG_M>,<REG_N>*/{"cmp/hi",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_6}, arch_sh_up}
+ cmp/hs r5,r4 ;!/* 0011nnnnmmmm0010 cmp/hs <REG_M>,<REG_N>*/{"cmp/hs",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_2}, arch_sh_up}
+ cmp/pl r4 ;!/* 0100nnnn00010101 cmp/pl <REG_N> */{"cmp/pl",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_5}, arch_sh_up}
+ cmp/pz r4 ;!/* 0100nnnn00010001 cmp/pz <REG_N> */{"cmp/pz",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_1}, arch_sh_up}
+ cmp/str r5,r4 ;!/* 0010nnnnmmmm1100 cmp/str <REG_M>,<REG_N>*/{"cmp/str",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_C}, arch_sh_up}
+ div0s r5,r4 ;!/* 0010nnnnmmmm0111 div0s <REG_M>,<REG_N>*/{"div0s",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_7}, arch_sh_up}
+ div0u ;!/* 0000000000011001 div0u */{"div0u",{0},{HEX_0,HEX_0,HEX_1,HEX_9}, arch_sh_up}
+ div1 r5,r4 ;!/* 0011nnnnmmmm0100 div1 <REG_M>,<REG_N>*/{"div1",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_4}, arch_sh_up}
+ exts.b r5,r4 ;!/* 0110nnnnmmmm1110 exts.b <REG_M>,<REG_N>*/{"exts.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_E}, arch_sh_up}
+ exts.w r5,r4 ;!/* 0110nnnnmmmm1111 exts.w <REG_M>,<REG_N>*/{"exts.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_F}, arch_sh_up}
+ extu.b r5,r4 ;!/* 0110nnnnmmmm1100 extu.b <REG_M>,<REG_N>*/{"extu.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_C}, arch_sh_up}
+ extu.w r5,r4 ;!/* 0110nnnnmmmm1101 extu.w <REG_M>,<REG_N>*/{"extu.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_D}, arch_sh_up}
+ jmp @r4 ;!/* 0100nnnn00101011 jmp @<REG_N> */{"jmp",{A_IND_N},{HEX_4,REG_N,HEX_2,HEX_B}, arch_sh_up}
+ jsr @r4 ;!/* 0100nnnn00001011 jsr @<REG_N> */{"jsr",{A_IND_N},{HEX_4,REG_N,HEX_0,HEX_B}, arch_sh_up}
+ ldc r4,SR ;!/* 0100nnnn00001110 ldc <REG_N>,SR */{"ldc",{A_REG_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_E}, arch_sh_up}
+ ldc r4,GBR ;!/* 0100nnnn00011110 ldc <REG_N>,GBR */{"ldc",{A_REG_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_E}, arch_sh_up}
+ ldc r4,VBR ;!/* 0100nnnn00101110 ldc <REG_N>,VBR */{"ldc",{A_REG_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_E}, arch_sh_up}
+ ldc.l @r4+,SR ;!/* 0100nnnn00000111 ldc.l @<REG_N>+,SR */{"ldc.l",{A_INC_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_7}, arch_sh_up}
+ ldc.l @r4+,GBR ;!/* 0100nnnn00010111 ldc.l @<REG_N>+,GBR */{"ldc.l",{A_INC_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_7}, arch_sh_up}
+ ldc.l @r4+,VBR ;!/* 0100nnnn00100111 ldc.l @<REG_N>+,VBR */{"ldc.l",{A_INC_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_7}, arch_sh_up}
+ lds r4,MACH ;!/* 0100nnnn00001010 lds <REG_N>,MACH */{"lds",{A_REG_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ lds r4,MACL ;!/* 0100nnnn00011010 lds <REG_N>,MACL */{"lds",{A_REG_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ lds r4,PR ;!/* 0100nnnn00101010 lds <REG_N>,PR */{"lds",{A_REG_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ lds.l @r4+,MACH ;!/* 0100nnnn00000110 lds.l @<REG_N>+,MACH*/{"lds.l",{A_INC_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_6}, arch_sh_up}
+ lds.l @r4+,MACL ;!/* 0100nnnn00010110 lds.l @<REG_N>+,MACL*/{"lds.l",{A_INC_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_6}, arch_sh_up}
+ lds.l @r4+,PR ;!/* 0100nnnn00100110 lds.l @<REG_N>+,PR */{"lds.l",{A_INC_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_6}, arch_sh_up}
+ mac.w @r5+,@r4+ ;!/* 0100nnnnmmmm1111 mac.w @<REG_M>+,@<REG_N>+*/{"mac.w",{A_INC_M,A_INC_N},{HEX_4,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mov #4,r4 ;!/* 1110nnnni8*1.... mov #<imm>,<REG_N> */{"mov",{A_IMM,A_REG_N},{HEX_E,REG_N,IMM0_8}, arch_sh_up}
+ mov r5,r4 ;!/* 0110nnnnmmmm0011 mov <REG_M>,<REG_N> */{"mov",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_3}, arch_sh_up}
+ mov.b r5,@(R0,r4) ;!/* 0000nnnnmmmm0100 mov.b <REG_M>,@(R0,<REG_N>)*/{"mov.b",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@-r4 ;!/* 0010nnnnmmmm0100 mov.b <REG_M>,@-<REG_N>*/{"mov.b",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@r4 ;!/* 0010nnnnmmmm0000 mov.b <REG_M>,@<REG_N>*/{"mov.b",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b @(8,r5),R0 ;!/* 10000100mmmmi4*1 mov.b @(<disp>,<REG_M>),R0*/{"mov.b",{A_DISP_REG_M,A_R0},{HEX_8,HEX_4,REG_M,IMM0_4}, arch_sh_up}
+ mov.b @(8,GBR),R0 ;!/* 11000100i8*1.... mov.b @(<disp>,GBR),R0*/{"mov.b",{A_DISP_GBR,A_R0},{HEX_C,HEX_4,IMM0_8}, arch_sh_up}
+ mov.b @(R0,r5),r4 ;!/* 0000nnnnmmmm1100 mov.b @(R0,<REG_M>),<REG_N>*/{"mov.b",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_C}, arch_sh_up}
+ mov.b @r5+,r4 ;!/* 0110nnnnmmmm0100 mov.b @<REG_M>+,<REG_N>*/{"mov.b",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b @r5,r4 ;!/* 0110nnnnmmmm0000 mov.b @<REG_M>,<REG_N>*/{"mov.b",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b R0,@(8,r5) ;!/* 10000000mmmmi4*1 mov.b R0,@(<disp>,<REG_M>)*/{"mov.b",{A_R0,A_DISP_REG_M},{HEX_8,HEX_0,REG_M,IMM1_4}, arch_sh_up}
+ mov.b R0,@(8,GBR) ;!/* 11000000i8*1.... mov.b R0,@(<disp>,GBR)*/{"mov.b",{A_R0,A_DISP_GBR},{HEX_C,HEX_0,IMM1_8}, arch_sh_up}
+ mov.l r5,@(8,r4) ;!/* 0001nnnnmmmmi4*4 mov.l <REG_M>,@(<disp>,<REG_N>)*/{"mov.l",{ A_REG_M,A_DISP_REG_N},{HEX_1,REG_N,REG_M,IMM1_4BY4}, arch_sh_up}
+ mov.l r5,@(R0,r4) ;!/* 0000nnnnmmmm0110 mov.l <REG_M>,@(R0,<REG_N>)*/{"mov.l",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@-r4 ;!/* 0010nnnnmmmm0110 mov.l <REG_M>,@-<REG_N>*/{"mov.l",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@r4 ;!/* 0010nnnnmmmm0010 mov.l <REG_M>,@<REG_N>*/{"mov.l",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l @(8,r5),r4 ;!/* 0101nnnnmmmmi4*4 mov.l @(<disp>,<REG_M>),<REG_N>*/{"mov.l",{A_DISP_REG_M,A_REG_N},{HEX_5,REG_N,REG_M,IMM0_4BY4}, arch_sh_up}
+ mov.l @(8,GBR),R0 ;!/* 11000110i8*4.... mov.l @(<disp>,GBR),R0*/{"mov.l",{A_DISP_GBR,A_R0},{HEX_C,HEX_6,IMM0_8BY4}, arch_sh_up}
+ .align 2
+ mov.l @(8,PC),r4 ;!/* 1101nnnni8p4.... mov.l @(<disp>,PC),<REG_N>*/{"mov.l",{A_DISP_PC,A_REG_N},{HEX_D,REG_N,PCRELIMM_8BY4}, arch_sh_up}
+ mov.l @(R0,r5),r4 ;!/* 0000nnnnmmmm1110 mov.l @(R0,<REG_M>),<REG_N>*/{"mov.l",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mov.l @r5+,r4 ;!/* 0110nnnnmmmm0110 mov.l @<REG_M>+,<REG_N>*/{"mov.l",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l @r5,r4 ;!/* 0110nnnnmmmm0010 mov.l @<REG_M>,<REG_N>*/{"mov.l",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l R0,@(8,GBR) ;!/* 11000010i8*4.... mov.l R0,@(<disp>,GBR)*/{"mov.l",{A_R0,A_DISP_GBR},{HEX_C,HEX_2,IMM1_8BY4}, arch_sh_up}
+ mov.w r5,@(R0,r4) ;!/* 0000nnnnmmmm0101 mov.w <REG_M>,@(R0,<REG_N>)*/{"mov.w",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@-r4 ;!/* 0010nnnnmmmm0101 mov.w <REG_M>,@-<REG_N>*/{"mov.w",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@r4 ;!/* 0010nnnnmmmm0001 mov.w <REG_M>,@<REG_N>*/{"mov.w",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w @(8,r5),R0 ;!/* 10000101mmmmi4*2 mov.w @(<disp>,<REG_M>),R0*/{"mov.w",{A_DISP_REG_M,A_R0},{HEX_8,HEX_5,REG_M,IMM0_4BY2}, arch_sh_up}
+ mov.w @(8,GBR),R0 ;!/* 11000101i8*2.... mov.w @(<disp>,GBR),R0*/{"mov.w",{A_DISP_GBR,A_R0},{HEX_C,HEX_5,IMM0_8BY2}, arch_sh_up}
+ mov.w @(8,PC),r4 ;!/* 1001nnnni8p2.... mov.w @(<disp>,PC),<REG_N>*/{"mov.w",{A_DISP_PC,A_REG_N},{HEX_9,REG_N,PCRELIMM_8BY2}, arch_sh_up}
+ mov.w @(R0,r5),r4 ;!/* 0000nnnnmmmm1101 mov.w @(R0,<REG_M>),<REG_N>*/{"mov.w",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_D}, arch_sh_up}
+ mov.w @r5+,r4 ;!/* 0110nnnnmmmm0101 mov.w @<REG_M>+,<REG_N>*/{"mov.w",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w @r5,r4 ;!/* 0110nnnnmmmm0001 mov.w @<REG_M>,<REG_N>*/{"mov.w",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w R0,@(8,r5) ;!/* 10000001mmmmi4*2 mov.w R0,@(<disp>,<REG_M>)*/{"mov.w",{A_R0,A_DISP_REG_M},{HEX_8,HEX_1,REG_M,IMM1_4BY2}, arch_sh_up}
+ mov.w R0,@(8,GBR) ;!/* 11000001i8*2.... mov.w R0,@(<disp>,GBR)*/{"mov.w",{A_R0,A_DISP_GBR},{HEX_C,HEX_1,IMM1_8BY2}, arch_sh_up}
+ .align 2
+ mova @(8,PC),R0 ;!/* 11000111i8p4.... mova @(<disp>,PC),R0*/{"mova",{A_DISP_PC,A_R0},{HEX_C,HEX_7,PCRELIMM_8BY4}, arch_sh_up}
+ movt r4 ;!/* 0000nnnn00101001 movt <REG_N> */{"movt",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ muls.w r5,r4 ;!/* 0010nnnnmmmm1111 muls.w <REG_M>,<REG_N>*/{"muls.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ muls r5,r4 ;!/* 0010nnnnmmmm1111 muls <REG_M>,<REG_N>*/{"muls",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mul.l r5,r4 ;!/* 0000nnnnmmmm0111 mul.l <REG_M>,<REG_N>*/{"mul.l",{ A_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_7}, arch_sh2_up}
+ mulu.w r5,r4 ;!/* 0010nnnnmmmm1110 mulu.w <REG_M>,<REG_N>*/{"mulu.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mulu r5,r4 ;!/* 0010nnnnmmmm1110 mulu <REG_M>,<REG_N>*/{"mulu",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ neg r5,r4 ;!/* 0110nnnnmmmm1011 neg <REG_M>,<REG_N> */{"neg",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_B}, arch_sh_up}
+ negc r5,r4 ;!/* 0110nnnnmmmm1010 negc <REG_M>,<REG_N>*/{"negc",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_A}, arch_sh_up}
+ nop ;!/* 0000000000001001 nop */{"nop",{0},{HEX_0,HEX_0,HEX_0,HEX_9}, arch_sh_up}
+ not r5,r4 ;!/* 0110nnnnmmmm0111 not <REG_M>,<REG_N> */{"not",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_7}, arch_sh_up}
+ or #4,R0 ;!/* 11001011i8*1.... or #<imm>,R0 */{"or",{A_IMM,A_R0},{HEX_C,HEX_B,IMM0_8}, arch_sh_up}
+ or r5,r4 ;!/* 0010nnnnmmmm1011 or <REG_M>,<REG_N> */{"or",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_B}, arch_sh_up}
+ or.b #4,@(R0,GBR) ;!/* 11001111i8*1.... or.b #<imm>,@(R0,GBR)*/{"or.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_F,IMM0_8}, arch_sh_up}
+ pref @r4 ;!/* 0000nnnn10000011 pref @<REG_N> */{"pref",{A_IND_N},{HEX_0,REG_N,HEX_8,HEX_3}, arch_sh2a_nofpu_or_sh4_nommu_nofpu_up}
+ rotcl r4 ;!/* 0100nnnn00100100 rotcl <REG_N> */{"rotcl",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_4}, arch_sh_up}
+ rotcr r4 ;!/* 0100nnnn00100101 rotcr <REG_N> */{"rotcr",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_5}, arch_sh_up}
+ rotl r4 ;!/* 0100nnnn00000100 rotl <REG_N> */{"rotl",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_4}, arch_sh_up}
+ rotr r4 ;!/* 0100nnnn00000101 rotr <REG_N> */{"rotr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_5}, arch_sh_up}
+ rte ;!/* 0000000000101011 rte */{"rte",{0},{HEX_0,HEX_0,HEX_2,HEX_B}, arch_sh_up}
+ rts ;!/* 0000000000001011 rts */{"rts",{0},{HEX_0,HEX_0,HEX_0,HEX_B}, arch_sh_up}
+ sets ;!/* 0000000001011000 sets */{"sets",{0},{HEX_0,HEX_0,HEX_5,HEX_8}, arch_sh_up}
+ sett ;!/* 0000000000011000 sett */{"sett",{0},{HEX_0,HEX_0,HEX_1,HEX_8}, arch_sh_up}
+ shad r5,r4 ;!/* 0100nnnnmmmm1100 shad <REG_M>,<REG_N>*/{"shad",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_C}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shld r5,r4 ;!/* 0100nnnnmmmm1101 shld <REG_M>,<REG_N>*/{"shld",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_D}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shal r4 ;!/* 0100nnnn00100000 shal <REG_N> */{"shal",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_0}, arch_sh_up}
+ shar r4 ;!/* 0100nnnn00100001 shar <REG_N> */{"shar",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_1}, arch_sh_up}
+ shll r4 ;!/* 0100nnnn00000000 shll <REG_N> */{"shll",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_0}, arch_sh_up}
+ shll16 r4 ;!/* 0100nnnn00101000 shll16 <REG_N> */{"shll16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_8}, arch_sh_up}
+ shll2 r4 ;!/* 0100nnnn00001000 shll2 <REG_N> */{"shll2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_8}, arch_sh_up}
+ shll8 r4 ;!/* 0100nnnn00011000 shll8 <REG_N> */{"shll8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_8}, arch_sh_up}
+ shlr r4 ;!/* 0100nnnn00000001 shlr <REG_N> */{"shlr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_1}, arch_sh_up}
+ shlr16 r4 ;!/* 0100nnnn00101001 shlr16 <REG_N> */{"shlr16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ shlr2 r4 ;!/* 0100nnnn00001001 shlr2 <REG_N> */{"shlr2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_9}, arch_sh_up}
+ shlr8 r4 ;!/* 0100nnnn00011001 shlr8 <REG_N> */{"shlr8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_9}, arch_sh_up}
+ sleep ;!/* 0000000000011011 sleep */{"sleep",{0},{HEX_0,HEX_0,HEX_1,HEX_B}, arch_sh_up}
+ stc SR,r4 ;!/* 0000nnnn00000010 stc SR,<REG_N> */{"stc",{A_SR,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ stc GBR,r4 ;!/* 0000nnnn00010010 stc GBR,<REG_N> */{"stc",{A_GBR,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ stc VBR,r4 ;!/* 0000nnnn00100010 stc VBR,<REG_N> */{"stc",{A_VBR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ stc.l SR,@-r4 ;!/* 0100nnnn00000011 stc.l SR,@-<REG_N> */{"stc.l",{A_SR,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_3}, arch_sh_up}
+ stc.l VBR,@-r4 ;!/* 0100nnnn00100011 stc.l VBR,@-<REG_N> */{"stc.l",{A_VBR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_3}, arch_sh_up}
+ stc.l GBR,@-r4 ;!/* 0100nnnn00010011 stc.l GBR,@-<REG_N> */{"stc.l",{A_GBR,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_3}, arch_sh_up}
+ sts MACH,r4 ;!/* 0000nnnn00001010 sts MACH,<REG_N> */{"sts",{A_MACH,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ sts MACL,r4 ;!/* 0000nnnn00011010 sts MACL,<REG_N> */{"sts",{A_MACL,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ sts PR,r4 ;!/* 0000nnnn00101010 sts PR,<REG_N> */{"sts",{A_PR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ sts.l MACH,@-r4 ;!/* 0100nnnn00000010 sts.l MACH,@-<REG_N>*/{"sts.l",{A_MACH,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ sts.l MACL,@-r4 ;!/* 0100nnnn00010010 sts.l MACL,@-<REG_N>*/{"sts.l",{A_MACL,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ sts.l PR,@-r4 ;!/* 0100nnnn00100010 sts.l PR,@-<REG_N> */{"sts.l",{A_PR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ sub r5,r4 ;!/* 0011nnnnmmmm1000 sub <REG_M>,<REG_N> */{"sub",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_8}, arch_sh_up}
+ subc r5,r4 ;!/* 0011nnnnmmmm1010 subc <REG_M>,<REG_N>*/{"subc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_A}, arch_sh_up}
+ subv r5,r4 ;!/* 0011nnnnmmmm1011 subv <REG_M>,<REG_N>*/{"subv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_B}, arch_sh_up}
+ swap.b r5,r4 ;!/* 0110nnnnmmmm1000 swap.b <REG_M>,<REG_N>*/{"swap.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_8}, arch_sh_up}
+ swap.w r5,r4 ;!/* 0110nnnnmmmm1001 swap.w <REG_M>,<REG_N>*/{"swap.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_9}, arch_sh_up}
+ tas.b @r4 ;!/* 0100nnnn00011011 tas.b @<REG_N> */{"tas.b",{A_IND_N},{HEX_4,REG_N,HEX_1,HEX_B}, arch_sh_up}
+ trapa #4 ;!/* 11000011i8*1.... trapa #<imm> */{"trapa",{A_IMM},{HEX_C,HEX_3,IMM0_8}, arch_sh_up}
+ tst #4,R0 ;!/* 11001000i8*1.... tst #<imm>,R0 */{"tst",{A_IMM,A_R0},{HEX_C,HEX_8,IMM0_8}, arch_sh_up}
+ tst r5,r4 ;!/* 0010nnnnmmmm1000 tst <REG_M>,<REG_N> */{"tst",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_8}, arch_sh_up}
+ tst.b #4,@(R0,GBR) ;!/* 11001100i8*1.... tst.b #<imm>,@(R0,GBR)*/{"tst.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_C,IMM0_8}, arch_sh_up}
+ xor #4,R0 ;!/* 11001010i8*1.... xor #<imm>,R0 */{"xor",{A_IMM,A_R0},{HEX_C,HEX_A,IMM0_8}, arch_sh_up}
+ xor r5,r4 ;!/* 0010nnnnmmmm1010 xor <REG_M>,<REG_N> */{"xor",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_A}, arch_sh_up}
+ xor.b #4,@(R0,GBR) ;!/* 11001110i8*1.... xor.b #<imm>,@(R0,GBR)*/{"xor.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_E,IMM0_8}, arch_sh_up}
+ xtrct r5,r4 ;!/* 0010nnnnmmmm1101 xtrct <REG_M>,<REG_N>*/{"xtrct",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_D}, arch_sh_up}
+ dt r4 ;!/* 0100nnnn00010000 dt <REG_N> */{"dt",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_0}, arch_sh2_up}
+ dmuls.l r5,r4 ;!/* 0011nnnnmmmm1101 dmuls.l <REG_M>,<REG_N>*/{"dmuls.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_D}, arch_sh2_up}
+ dmulu.l r5,r4 ;!/* 0011nnnnmmmm0101 dmulu.l <REG_M>,<REG_N>*/{"dmulu.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_5}, arch_sh2_up}
+ mac.l @r5+,@r4+ ;!/* 0000nnnnmmmm1111 mac.l @<REG_M>+,@<REG_N>+*/{"mac.l",{A_INC_M,A_INC_N},{HEX_0,REG_N,REG_M,HEX_F}, arch_sh2_up}
+ braf r4 ;!/* 0000nnnn00100011 braf <REG_N> */{"braf",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_3}, arch_sh2_up}
+ bsrf r4 ;!/* 0000nnnn00000011 bsrf <REG_N> */{"bsrf",{A_REG_N},{HEX_0,REG_N,HEX_0,HEX_3}, arch_sh2_up}
diff --git a/binutils-2.21/ld/testsuite/ld-sh/arch/sh2a-or-sh3e.s b/binutils-2.21/ld/testsuite/ld-sh/arch/sh2a-or-sh3e.s
new file mode 100644
index 0000000..b7be336
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/arch/sh2a-or-sh3e.s
@@ -0,0 +1,205 @@
+! Generated file. DO NOT EDIT.
+!
+! This file was generated by gas/testsuite/gas/sh/arch/arch.exp .
+! This file should contain every instruction valid on
+! architecture sh2a-or-sh3e but no more.
+! If the tests are failing because the expected results
+! have changed then run 'make check' and copy the new file
+! from <objdir>/gas/testsuite/sh2a-or-sh3e.s
+! to <srcdir>/gas/testsuite/gas/sh/arch/sh2a-or-sh3e.s .
+! Make sure there are no unexpected or missing instructions.
+
+ .section .text
+sh2a_or_sh3e:
+! Instructions introduced into sh2a-or-sh3e
+ fsqrt fr1 ;!/* 1111nnnn01101101 fsqrt <F_REG_N> */{"fsqrt",{F_REG_N},{HEX_F,REG_N,HEX_6,HEX_D}, arch_sh2a_or_sh3e_up}
+
+! Instructions inherited from ancestors: sh sh2 sh2a-nofpu-or-sh3-nommu sh2e
+ add #4,r4 ;!/* 0111nnnni8*1.... add #<imm>,<REG_N> */{"add",{A_IMM,A_REG_N},{HEX_7,REG_N,IMM0_8}, arch_sh_up}
+ add r5,r4 ;!/* 0011nnnnmmmm1100 add <REG_M>,<REG_N> */{"add",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_C}, arch_sh_up}
+ addc r5,r4 ;!/* 0011nnnnmmmm1110 addc <REG_M>,<REG_N>*/{"addc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_E}, arch_sh_up}
+ addv r5,r4 ;!/* 0011nnnnmmmm1111 addv <REG_M>,<REG_N>*/{"addv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_F}, arch_sh_up}
+ and #4,R0 ;!/* 11001001i8*1.... and #<imm>,R0 */{"and",{A_IMM,A_R0},{HEX_C,HEX_9,IMM0_8}, arch_sh_up}
+ and r5,r4 ;!/* 0010nnnnmmmm1001 and <REG_M>,<REG_N> */{"and",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_9}, arch_sh_up}
+ and.b #4,@(R0,GBR) ;!/* 11001101i8*1.... and.b #<imm>,@(R0,GBR)*/{"and.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_D,IMM0_8}, arch_sh_up}
+ bra .+8 ;!/* 1010i12......... bra <bdisp12> */{"bra",{A_BDISP12},{HEX_A,BRANCH_12}, arch_sh_up}
+ bsr .+8 ;!/* 1011i12......... bsr <bdisp12> */{"bsr",{A_BDISP12},{HEX_B,BRANCH_12}, arch_sh_up}
+ bt .+8 ;!/* 10001001i8p1.... bt <bdisp8> */{"bt",{A_BDISP8},{HEX_8,HEX_9,BRANCH_8}, arch_sh_up}
+ bf .+8 ;!/* 10001011i8p1.... bf <bdisp8> */{"bf",{A_BDISP8},{HEX_8,HEX_B,BRANCH_8}, arch_sh_up}
+ bt.s .+8 ;!/* 10001101i8p1.... bt.s <bdisp8> */{"bt.s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bt/s .+8 ;!/* 10001101i8p1.... bt/s <bdisp8> */{"bt/s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bf.s .+8 ;!/* 10001111i8p1.... bf.s <bdisp8> */{"bf.s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ bf/s .+8 ;!/* 10001111i8p1.... bf/s <bdisp8> */{"bf/s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ clrmac ;!/* 0000000000101000 clrmac */{"clrmac",{0},{HEX_0,HEX_0,HEX_2,HEX_8}, arch_sh_up}
+ clrs ;!/* 0000000001001000 clrs */{"clrs",{0},{HEX_0,HEX_0,HEX_4,HEX_8}, arch_sh_up}
+ clrt ;!/* 0000000000001000 clrt */{"clrt",{0},{HEX_0,HEX_0,HEX_0,HEX_8}, arch_sh_up}
+ cmp/eq #4,R0 ;!/* 10001000i8*1.... cmp/eq #<imm>,R0 */{"cmp/eq",{A_IMM,A_R0},{HEX_8,HEX_8,IMM0_8}, arch_sh_up}
+ cmp/eq r5,r4 ;!/* 0011nnnnmmmm0000 cmp/eq <REG_M>,<REG_N>*/{"cmp/eq",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_0}, arch_sh_up}
+ cmp/ge r5,r4 ;!/* 0011nnnnmmmm0011 cmp/ge <REG_M>,<REG_N>*/{"cmp/ge",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_3}, arch_sh_up}
+ cmp/gt r5,r4 ;!/* 0011nnnnmmmm0111 cmp/gt <REG_M>,<REG_N>*/{"cmp/gt",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_7}, arch_sh_up}
+ cmp/hi r5,r4 ;!/* 0011nnnnmmmm0110 cmp/hi <REG_M>,<REG_N>*/{"cmp/hi",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_6}, arch_sh_up}
+ cmp/hs r5,r4 ;!/* 0011nnnnmmmm0010 cmp/hs <REG_M>,<REG_N>*/{"cmp/hs",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_2}, arch_sh_up}
+ cmp/pl r4 ;!/* 0100nnnn00010101 cmp/pl <REG_N> */{"cmp/pl",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_5}, arch_sh_up}
+ cmp/pz r4 ;!/* 0100nnnn00010001 cmp/pz <REG_N> */{"cmp/pz",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_1}, arch_sh_up}
+ cmp/str r5,r4 ;!/* 0010nnnnmmmm1100 cmp/str <REG_M>,<REG_N>*/{"cmp/str",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_C}, arch_sh_up}
+ div0s r5,r4 ;!/* 0010nnnnmmmm0111 div0s <REG_M>,<REG_N>*/{"div0s",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_7}, arch_sh_up}
+ div0u ;!/* 0000000000011001 div0u */{"div0u",{0},{HEX_0,HEX_0,HEX_1,HEX_9}, arch_sh_up}
+ div1 r5,r4 ;!/* 0011nnnnmmmm0100 div1 <REG_M>,<REG_N>*/{"div1",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_4}, arch_sh_up}
+ exts.b r5,r4 ;!/* 0110nnnnmmmm1110 exts.b <REG_M>,<REG_N>*/{"exts.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_E}, arch_sh_up}
+ exts.w r5,r4 ;!/* 0110nnnnmmmm1111 exts.w <REG_M>,<REG_N>*/{"exts.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_F}, arch_sh_up}
+ extu.b r5,r4 ;!/* 0110nnnnmmmm1100 extu.b <REG_M>,<REG_N>*/{"extu.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_C}, arch_sh_up}
+ extu.w r5,r4 ;!/* 0110nnnnmmmm1101 extu.w <REG_M>,<REG_N>*/{"extu.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_D}, arch_sh_up}
+ jmp @r4 ;!/* 0100nnnn00101011 jmp @<REG_N> */{"jmp",{A_IND_N},{HEX_4,REG_N,HEX_2,HEX_B}, arch_sh_up}
+ jsr @r4 ;!/* 0100nnnn00001011 jsr @<REG_N> */{"jsr",{A_IND_N},{HEX_4,REG_N,HEX_0,HEX_B}, arch_sh_up}
+ ldc r4,SR ;!/* 0100nnnn00001110 ldc <REG_N>,SR */{"ldc",{A_REG_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_E}, arch_sh_up}
+ ldc r4,GBR ;!/* 0100nnnn00011110 ldc <REG_N>,GBR */{"ldc",{A_REG_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_E}, arch_sh_up}
+ ldc r4,VBR ;!/* 0100nnnn00101110 ldc <REG_N>,VBR */{"ldc",{A_REG_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_E}, arch_sh_up}
+ ldc.l @r4+,SR ;!/* 0100nnnn00000111 ldc.l @<REG_N>+,SR */{"ldc.l",{A_INC_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_7}, arch_sh_up}
+ ldc.l @r4+,GBR ;!/* 0100nnnn00010111 ldc.l @<REG_N>+,GBR */{"ldc.l",{A_INC_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_7}, arch_sh_up}
+ ldc.l @r4+,VBR ;!/* 0100nnnn00100111 ldc.l @<REG_N>+,VBR */{"ldc.l",{A_INC_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_7}, arch_sh_up}
+ lds r4,MACH ;!/* 0100nnnn00001010 lds <REG_N>,MACH */{"lds",{A_REG_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ lds r4,MACL ;!/* 0100nnnn00011010 lds <REG_N>,MACL */{"lds",{A_REG_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ lds r4,PR ;!/* 0100nnnn00101010 lds <REG_N>,PR */{"lds",{A_REG_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ lds r4,FPUL ;!/* 0100nnnn01011010 lds <REG_N>,FPUL */{"lds",{A_REG_M,FPUL_N},{HEX_4,REG_M,HEX_5,HEX_A}, arch_sh2e_up}
+ lds r5,FPSCR ;!/* 0100nnnn01101010 lds <REG_M>,FPSCR */{"lds",{A_REG_M,FPSCR_N},{HEX_4,REG_M,HEX_6,HEX_A}, arch_sh2e_up}
+ lds.l @r4+,MACH ;!/* 0100nnnn00000110 lds.l @<REG_N>+,MACH*/{"lds.l",{A_INC_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_6}, arch_sh_up}
+ lds.l @r4+,MACL ;!/* 0100nnnn00010110 lds.l @<REG_N>+,MACL*/{"lds.l",{A_INC_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_6}, arch_sh_up}
+ lds.l @r4+,PR ;!/* 0100nnnn00100110 lds.l @<REG_N>+,PR */{"lds.l",{A_INC_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_6}, arch_sh_up}
+ lds.l @r5+,FPUL ;!/* 0100nnnn01010110 lds.l @<REG_M>+,FPUL*/{"lds.l",{A_INC_M,FPUL_N},{HEX_4,REG_M,HEX_5,HEX_6}, arch_sh2e_up}
+ lds.l @r5+,FPSCR ;!/* 0100nnnn01100110 lds.l @<REG_M>+,FPSCR*/{"lds.l",{A_INC_M,FPSCR_N},{HEX_4,REG_M,HEX_6,HEX_6}, arch_sh2e_up}
+ mac.w @r5+,@r4+ ;!/* 0100nnnnmmmm1111 mac.w @<REG_M>+,@<REG_N>+*/{"mac.w",{A_INC_M,A_INC_N},{HEX_4,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mov #4,r4 ;!/* 1110nnnni8*1.... mov #<imm>,<REG_N> */{"mov",{A_IMM,A_REG_N},{HEX_E,REG_N,IMM0_8}, arch_sh_up}
+ mov r5,r4 ;!/* 0110nnnnmmmm0011 mov <REG_M>,<REG_N> */{"mov",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_3}, arch_sh_up}
+ mov.b r5,@(R0,r4) ;!/* 0000nnnnmmmm0100 mov.b <REG_M>,@(R0,<REG_N>)*/{"mov.b",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@-r4 ;!/* 0010nnnnmmmm0100 mov.b <REG_M>,@-<REG_N>*/{"mov.b",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@r4 ;!/* 0010nnnnmmmm0000 mov.b <REG_M>,@<REG_N>*/{"mov.b",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b @(8,r5),R0 ;!/* 10000100mmmmi4*1 mov.b @(<disp>,<REG_M>),R0*/{"mov.b",{A_DISP_REG_M,A_R0},{HEX_8,HEX_4,REG_M,IMM0_4}, arch_sh_up}
+ mov.b @(8,GBR),R0 ;!/* 11000100i8*1.... mov.b @(<disp>,GBR),R0*/{"mov.b",{A_DISP_GBR,A_R0},{HEX_C,HEX_4,IMM0_8}, arch_sh_up}
+ mov.b @(R0,r5),r4 ;!/* 0000nnnnmmmm1100 mov.b @(R0,<REG_M>),<REG_N>*/{"mov.b",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_C}, arch_sh_up}
+ mov.b @r5+,r4 ;!/* 0110nnnnmmmm0100 mov.b @<REG_M>+,<REG_N>*/{"mov.b",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b @r5,r4 ;!/* 0110nnnnmmmm0000 mov.b @<REG_M>,<REG_N>*/{"mov.b",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b R0,@(8,r5) ;!/* 10000000mmmmi4*1 mov.b R0,@(<disp>,<REG_M>)*/{"mov.b",{A_R0,A_DISP_REG_M},{HEX_8,HEX_0,REG_M,IMM1_4}, arch_sh_up}
+ mov.b R0,@(8,GBR) ;!/* 11000000i8*1.... mov.b R0,@(<disp>,GBR)*/{"mov.b",{A_R0,A_DISP_GBR},{HEX_C,HEX_0,IMM1_8}, arch_sh_up}
+ mov.l r5,@(8,r4) ;!/* 0001nnnnmmmmi4*4 mov.l <REG_M>,@(<disp>,<REG_N>)*/{"mov.l",{ A_REG_M,A_DISP_REG_N},{HEX_1,REG_N,REG_M,IMM1_4BY4}, arch_sh_up}
+ mov.l r5,@(R0,r4) ;!/* 0000nnnnmmmm0110 mov.l <REG_M>,@(R0,<REG_N>)*/{"mov.l",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@-r4 ;!/* 0010nnnnmmmm0110 mov.l <REG_M>,@-<REG_N>*/{"mov.l",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@r4 ;!/* 0010nnnnmmmm0010 mov.l <REG_M>,@<REG_N>*/{"mov.l",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l @(8,r5),r4 ;!/* 0101nnnnmmmmi4*4 mov.l @(<disp>,<REG_M>),<REG_N>*/{"mov.l",{A_DISP_REG_M,A_REG_N},{HEX_5,REG_N,REG_M,IMM0_4BY4}, arch_sh_up}
+ mov.l @(8,GBR),R0 ;!/* 11000110i8*4.... mov.l @(<disp>,GBR),R0*/{"mov.l",{A_DISP_GBR,A_R0},{HEX_C,HEX_6,IMM0_8BY4}, arch_sh_up}
+ .align 2
+ mov.l @(8,PC),r4 ;!/* 1101nnnni8p4.... mov.l @(<disp>,PC),<REG_N>*/{"mov.l",{A_DISP_PC,A_REG_N},{HEX_D,REG_N,PCRELIMM_8BY4}, arch_sh_up}
+ mov.l @(R0,r5),r4 ;!/* 0000nnnnmmmm1110 mov.l @(R0,<REG_M>),<REG_N>*/{"mov.l",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mov.l @r5+,r4 ;!/* 0110nnnnmmmm0110 mov.l @<REG_M>+,<REG_N>*/{"mov.l",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l @r5,r4 ;!/* 0110nnnnmmmm0010 mov.l @<REG_M>,<REG_N>*/{"mov.l",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l R0,@(8,GBR) ;!/* 11000010i8*4.... mov.l R0,@(<disp>,GBR)*/{"mov.l",{A_R0,A_DISP_GBR},{HEX_C,HEX_2,IMM1_8BY4}, arch_sh_up}
+ mov.w r5,@(R0,r4) ;!/* 0000nnnnmmmm0101 mov.w <REG_M>,@(R0,<REG_N>)*/{"mov.w",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@-r4 ;!/* 0010nnnnmmmm0101 mov.w <REG_M>,@-<REG_N>*/{"mov.w",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@r4 ;!/* 0010nnnnmmmm0001 mov.w <REG_M>,@<REG_N>*/{"mov.w",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w @(8,r5),R0 ;!/* 10000101mmmmi4*2 mov.w @(<disp>,<REG_M>),R0*/{"mov.w",{A_DISP_REG_M,A_R0},{HEX_8,HEX_5,REG_M,IMM0_4BY2}, arch_sh_up}
+ mov.w @(8,GBR),R0 ;!/* 11000101i8*2.... mov.w @(<disp>,GBR),R0*/{"mov.w",{A_DISP_GBR,A_R0},{HEX_C,HEX_5,IMM0_8BY2}, arch_sh_up}
+ mov.w @(8,PC),r4 ;!/* 1001nnnni8p2.... mov.w @(<disp>,PC),<REG_N>*/{"mov.w",{A_DISP_PC,A_REG_N},{HEX_9,REG_N,PCRELIMM_8BY2}, arch_sh_up}
+ mov.w @(R0,r5),r4 ;!/* 0000nnnnmmmm1101 mov.w @(R0,<REG_M>),<REG_N>*/{"mov.w",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_D}, arch_sh_up}
+ mov.w @r5+,r4 ;!/* 0110nnnnmmmm0101 mov.w @<REG_M>+,<REG_N>*/{"mov.w",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w @r5,r4 ;!/* 0110nnnnmmmm0001 mov.w @<REG_M>,<REG_N>*/{"mov.w",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w R0,@(8,r5) ;!/* 10000001mmmmi4*2 mov.w R0,@(<disp>,<REG_M>)*/{"mov.w",{A_R0,A_DISP_REG_M},{HEX_8,HEX_1,REG_M,IMM1_4BY2}, arch_sh_up}
+ mov.w R0,@(8,GBR) ;!/* 11000001i8*2.... mov.w R0,@(<disp>,GBR)*/{"mov.w",{A_R0,A_DISP_GBR},{HEX_C,HEX_1,IMM1_8BY2}, arch_sh_up}
+ .align 2
+ mova @(8,PC),R0 ;!/* 11000111i8p4.... mova @(<disp>,PC),R0*/{"mova",{A_DISP_PC,A_R0},{HEX_C,HEX_7,PCRELIMM_8BY4}, arch_sh_up}
+ movt r4 ;!/* 0000nnnn00101001 movt <REG_N> */{"movt",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ muls.w r5,r4 ;!/* 0010nnnnmmmm1111 muls.w <REG_M>,<REG_N>*/{"muls.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ muls r5,r4 ;!/* 0010nnnnmmmm1111 muls <REG_M>,<REG_N>*/{"muls",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mul.l r5,r4 ;!/* 0000nnnnmmmm0111 mul.l <REG_M>,<REG_N>*/{"mul.l",{ A_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_7}, arch_sh2_up}
+ mulu.w r5,r4 ;!/* 0010nnnnmmmm1110 mulu.w <REG_M>,<REG_N>*/{"mulu.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mulu r5,r4 ;!/* 0010nnnnmmmm1110 mulu <REG_M>,<REG_N>*/{"mulu",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ neg r5,r4 ;!/* 0110nnnnmmmm1011 neg <REG_M>,<REG_N> */{"neg",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_B}, arch_sh_up}
+ negc r5,r4 ;!/* 0110nnnnmmmm1010 negc <REG_M>,<REG_N>*/{"negc",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_A}, arch_sh_up}
+ nop ;!/* 0000000000001001 nop */{"nop",{0},{HEX_0,HEX_0,HEX_0,HEX_9}, arch_sh_up}
+ not r5,r4 ;!/* 0110nnnnmmmm0111 not <REG_M>,<REG_N> */{"not",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_7}, arch_sh_up}
+ or #4,R0 ;!/* 11001011i8*1.... or #<imm>,R0 */{"or",{A_IMM,A_R0},{HEX_C,HEX_B,IMM0_8}, arch_sh_up}
+ or r5,r4 ;!/* 0010nnnnmmmm1011 or <REG_M>,<REG_N> */{"or",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_B}, arch_sh_up}
+ or.b #4,@(R0,GBR) ;!/* 11001111i8*1.... or.b #<imm>,@(R0,GBR)*/{"or.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_F,IMM0_8}, arch_sh_up}
+ rotcl r4 ;!/* 0100nnnn00100100 rotcl <REG_N> */{"rotcl",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_4}, arch_sh_up}
+ rotcr r4 ;!/* 0100nnnn00100101 rotcr <REG_N> */{"rotcr",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_5}, arch_sh_up}
+ rotl r4 ;!/* 0100nnnn00000100 rotl <REG_N> */{"rotl",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_4}, arch_sh_up}
+ rotr r4 ;!/* 0100nnnn00000101 rotr <REG_N> */{"rotr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_5}, arch_sh_up}
+ rte ;!/* 0000000000101011 rte */{"rte",{0},{HEX_0,HEX_0,HEX_2,HEX_B}, arch_sh_up}
+ rts ;!/* 0000000000001011 rts */{"rts",{0},{HEX_0,HEX_0,HEX_0,HEX_B}, arch_sh_up}
+ sets ;!/* 0000000001011000 sets */{"sets",{0},{HEX_0,HEX_0,HEX_5,HEX_8}, arch_sh_up}
+ sett ;!/* 0000000000011000 sett */{"sett",{0},{HEX_0,HEX_0,HEX_1,HEX_8}, arch_sh_up}
+ shad r5,r4 ;!/* 0100nnnnmmmm1100 shad <REG_M>,<REG_N>*/{"shad",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_C}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shld r5,r4 ;!/* 0100nnnnmmmm1101 shld <REG_M>,<REG_N>*/{"shld",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_D}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shal r4 ;!/* 0100nnnn00100000 shal <REG_N> */{"shal",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_0}, arch_sh_up}
+ shar r4 ;!/* 0100nnnn00100001 shar <REG_N> */{"shar",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_1}, arch_sh_up}
+ shll r4 ;!/* 0100nnnn00000000 shll <REG_N> */{"shll",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_0}, arch_sh_up}
+ shll16 r4 ;!/* 0100nnnn00101000 shll16 <REG_N> */{"shll16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_8}, arch_sh_up}
+ shll2 r4 ;!/* 0100nnnn00001000 shll2 <REG_N> */{"shll2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_8}, arch_sh_up}
+ shll8 r4 ;!/* 0100nnnn00011000 shll8 <REG_N> */{"shll8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_8}, arch_sh_up}
+ shlr r4 ;!/* 0100nnnn00000001 shlr <REG_N> */{"shlr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_1}, arch_sh_up}
+ shlr16 r4 ;!/* 0100nnnn00101001 shlr16 <REG_N> */{"shlr16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ shlr2 r4 ;!/* 0100nnnn00001001 shlr2 <REG_N> */{"shlr2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_9}, arch_sh_up}
+ shlr8 r4 ;!/* 0100nnnn00011001 shlr8 <REG_N> */{"shlr8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_9}, arch_sh_up}
+ sleep ;!/* 0000000000011011 sleep */{"sleep",{0},{HEX_0,HEX_0,HEX_1,HEX_B}, arch_sh_up}
+ stc SR,r4 ;!/* 0000nnnn00000010 stc SR,<REG_N> */{"stc",{A_SR,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ stc GBR,r4 ;!/* 0000nnnn00010010 stc GBR,<REG_N> */{"stc",{A_GBR,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ stc VBR,r4 ;!/* 0000nnnn00100010 stc VBR,<REG_N> */{"stc",{A_VBR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ stc.l SR,@-r4 ;!/* 0100nnnn00000011 stc.l SR,@-<REG_N> */{"stc.l",{A_SR,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_3}, arch_sh_up}
+ stc.l VBR,@-r4 ;!/* 0100nnnn00100011 stc.l VBR,@-<REG_N> */{"stc.l",{A_VBR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_3}, arch_sh_up}
+ stc.l GBR,@-r4 ;!/* 0100nnnn00010011 stc.l GBR,@-<REG_N> */{"stc.l",{A_GBR,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_3}, arch_sh_up}
+ sts MACH,r4 ;!/* 0000nnnn00001010 sts MACH,<REG_N> */{"sts",{A_MACH,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ sts MACL,r4 ;!/* 0000nnnn00011010 sts MACL,<REG_N> */{"sts",{A_MACL,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ sts PR,r4 ;!/* 0000nnnn00101010 sts PR,<REG_N> */{"sts",{A_PR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ sts FPUL,r4 ;!/* 0000nnnn01011010 sts FPUL,<REG_N> */{"sts",{FPUL_M,A_REG_N},{HEX_0,REG_N,HEX_5,HEX_A}, arch_sh2e_up}
+ sts FPSCR,r4 ;!/* 0000nnnn01101010 sts FPSCR,<REG_N> */{"sts",{FPSCR_M,A_REG_N},{HEX_0,REG_N,HEX_6,HEX_A}, arch_sh2e_up}
+ sts.l MACH,@-r4 ;!/* 0100nnnn00000010 sts.l MACH,@-<REG_N>*/{"sts.l",{A_MACH,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ sts.l MACL,@-r4 ;!/* 0100nnnn00010010 sts.l MACL,@-<REG_N>*/{"sts.l",{A_MACL,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ sts.l PR,@-r4 ;!/* 0100nnnn00100010 sts.l PR,@-<REG_N> */{"sts.l",{A_PR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ sts.l FPUL,@-r4 ;!/* 0100nnnn01010010 sts.l FPUL,@-<REG_N>*/{"sts.l",{FPUL_M,A_DEC_N},{HEX_4,REG_N,HEX_5,HEX_2}, arch_sh2e_up}
+ sts.l FPSCR,@-r4 ;!/* 0100nnnn01100010 sts.l FPSCR,@-<REG_N>*/{"sts.l",{FPSCR_M,A_DEC_N},{HEX_4,REG_N,HEX_6,HEX_2}, arch_sh2e_up}
+ sub r5,r4 ;!/* 0011nnnnmmmm1000 sub <REG_M>,<REG_N> */{"sub",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_8}, arch_sh_up}
+ subc r5,r4 ;!/* 0011nnnnmmmm1010 subc <REG_M>,<REG_N>*/{"subc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_A}, arch_sh_up}
+ subv r5,r4 ;!/* 0011nnnnmmmm1011 subv <REG_M>,<REG_N>*/{"subv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_B}, arch_sh_up}
+ swap.b r5,r4 ;!/* 0110nnnnmmmm1000 swap.b <REG_M>,<REG_N>*/{"swap.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_8}, arch_sh_up}
+ swap.w r5,r4 ;!/* 0110nnnnmmmm1001 swap.w <REG_M>,<REG_N>*/{"swap.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_9}, arch_sh_up}
+ tas.b @r4 ;!/* 0100nnnn00011011 tas.b @<REG_N> */{"tas.b",{A_IND_N},{HEX_4,REG_N,HEX_1,HEX_B}, arch_sh_up}
+ trapa #4 ;!/* 11000011i8*1.... trapa #<imm> */{"trapa",{A_IMM},{HEX_C,HEX_3,IMM0_8}, arch_sh_up}
+ tst #4,R0 ;!/* 11001000i8*1.... tst #<imm>,R0 */{"tst",{A_IMM,A_R0},{HEX_C,HEX_8,IMM0_8}, arch_sh_up}
+ tst r5,r4 ;!/* 0010nnnnmmmm1000 tst <REG_M>,<REG_N> */{"tst",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_8}, arch_sh_up}
+ tst.b #4,@(R0,GBR) ;!/* 11001100i8*1.... tst.b #<imm>,@(R0,GBR)*/{"tst.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_C,IMM0_8}, arch_sh_up}
+ xor #4,R0 ;!/* 11001010i8*1.... xor #<imm>,R0 */{"xor",{A_IMM,A_R0},{HEX_C,HEX_A,IMM0_8}, arch_sh_up}
+ xor r5,r4 ;!/* 0010nnnnmmmm1010 xor <REG_M>,<REG_N> */{"xor",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_A}, arch_sh_up}
+ xor.b #4,@(R0,GBR) ;!/* 11001110i8*1.... xor.b #<imm>,@(R0,GBR)*/{"xor.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_E,IMM0_8}, arch_sh_up}
+ xtrct r5,r4 ;!/* 0010nnnnmmmm1101 xtrct <REG_M>,<REG_N>*/{"xtrct",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_D}, arch_sh_up}
+ dt r4 ;!/* 0100nnnn00010000 dt <REG_N> */{"dt",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_0}, arch_sh2_up}
+ dmuls.l r5,r4 ;!/* 0011nnnnmmmm1101 dmuls.l <REG_M>,<REG_N>*/{"dmuls.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_D}, arch_sh2_up}
+ dmulu.l r5,r4 ;!/* 0011nnnnmmmm0101 dmulu.l <REG_M>,<REG_N>*/{"dmulu.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_5}, arch_sh2_up}
+ mac.l @r5+,@r4+ ;!/* 0000nnnnmmmm1111 mac.l @<REG_M>+,@<REG_N>+*/{"mac.l",{A_INC_M,A_INC_N},{HEX_0,REG_N,REG_M,HEX_F}, arch_sh2_up}
+ braf r4 ;!/* 0000nnnn00100011 braf <REG_N> */{"braf",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_3}, arch_sh2_up}
+ bsrf r4 ;!/* 0000nnnn00000011 bsrf <REG_N> */{"bsrf",{A_REG_N},{HEX_0,REG_N,HEX_0,HEX_3}, arch_sh2_up}
+ fabs fr1 ;!/* 1111nnnn01011101 fabs <F_REG_N> */{"fabs",{F_REG_N},{HEX_F,REG_N,HEX_5,HEX_D}, arch_sh2e_up}
+ fadd fr2,fr1 ;!/* 1111nnnnmmmm0000 fadd <F_REG_M>,<F_REG_N>*/{"fadd",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_0}, arch_sh2e_up}
+ fcmp/eq fr2,fr1 ;!/* 1111nnnnmmmm0100 fcmp/eq <F_REG_M>,<F_REG_N>*/{"fcmp/eq",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_4}, arch_sh2e_up}
+ fcmp/gt fr2,fr1 ;!/* 1111nnnnmmmm0101 fcmp/gt <F_REG_M>,<F_REG_N>*/{"fcmp/gt",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_5}, arch_sh2e_up}
+ fdiv fr2,fr1 ;!/* 1111nnnnmmmm0011 fdiv <F_REG_M>,<F_REG_N>*/{"fdiv",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_3}, arch_sh2e_up}
+ fldi0 fr1 ;!/* 1111nnnn10001101 fldi0 <F_REG_N> */{"fldi0",{F_REG_N},{HEX_F,REG_N,HEX_8,HEX_D}, arch_sh2e_up}
+ fldi1 fr1 ;!/* 1111nnnn10011101 fldi1 <F_REG_N> */{"fldi1",{F_REG_N},{HEX_F,REG_N,HEX_9,HEX_D}, arch_sh2e_up}
+ flds fr1,FPUL ;!/* 1111nnnn00011101 flds <F_REG_N>,FPUL*/{"flds",{F_REG_N,FPUL_M},{HEX_F,REG_N,HEX_1,HEX_D}, arch_sh2e_up}
+ float FPUL,fr1 ;!/* 1111nnnn00101101 float FPUL,<F_REG_N>*/{"float",{FPUL_M,F_REG_N},{HEX_F,REG_N,HEX_2,HEX_D}, arch_sh2e_up}
+ fmac FR0,fr2,fr1 ;!/* 1111nnnnmmmm1110 fmac FR0,<F_REG_M>,<F_REG_N>*/{"fmac",{F_FR0,F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_E}, arch_sh2e_up}
+ fmov fr2,fr1 ;!/* 1111nnnnmmmm1100 fmov <F_REG_M>,<F_REG_N>*/{"fmov",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_C}, arch_sh2e_up}
+ fmov @r5,fr1 ;!/* 1111nnnnmmmm1000 fmov @<REG_M>,<F_REG_N>*/{"fmov",{A_IND_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh2e_up}
+ fmov fr2,@r4 ;!/* 1111nnnnmmmm1010 fmov <F_REG_M>,@<REG_N>*/{"fmov",{F_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh2e_up}
+ fmov @r5+,fr1 ;!/* 1111nnnnmmmm1001 fmov @<REG_M>+,<F_REG_N>*/{"fmov",{A_INC_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh2e_up}
+ fmov fr2,@-r4 ;!/* 1111nnnnmmmm1011 fmov <F_REG_M>,@-<REG_N>*/{"fmov",{F_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh2e_up}
+ fmov @(R0,r5),fr1 ;!/* 1111nnnnmmmm0110 fmov @(R0,<REG_M>),<F_REG_N>*/{"fmov",{A_IND_R0_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh2e_up}
+ fmov fr2,@(R0,r4) ;!/* 1111nnnnmmmm0111 fmov <F_REG_M>,@(R0,<REG_N>)*/{"fmov",{F_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh2e_up}
+ fmov.s @r5,fr1 ;!/* 1111nnnnmmmm1000 fmov.s @<REG_M>,<F_REG_N>*/{"fmov.s",{A_IND_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh2e_up}
+ fmov.s fr2,@r4 ;!/* 1111nnnnmmmm1010 fmov.s <F_REG_M>,@<REG_N>*/{"fmov.s",{F_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh2e_up}
+ fmov.s @r5+,fr1 ;!/* 1111nnnnmmmm1001 fmov.s @<REG_M>+,<F_REG_N>*/{"fmov.s",{A_INC_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh2e_up}
+ fmov.s fr2,@-r4 ;!/* 1111nnnnmmmm1011 fmov.s <F_REG_M>,@-<REG_N>*/{"fmov.s",{F_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh2e_up}
+ fmov.s @(R0,r5),fr1 ;!/* 1111nnnnmmmm0110 fmov.s @(R0,<REG_M>),<F_REG_N>*/{"fmov.s",{A_IND_R0_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh2e_up}
+ fmov.s fr2,@(R0,r4) ;!/* 1111nnnnmmmm0111 fmov.s <F_REG_M>,@(R0,<REG_N>)*/{"fmov.s",{F_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh2e_up}
+ fmul fr2,fr1 ;!/* 1111nnnnmmmm0010 fmul <F_REG_M>,<F_REG_N>*/{"fmul",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_2}, arch_sh2e_up}
+ fneg fr1 ;!/* 1111nnnn01001101 fneg <F_REG_N> */{"fneg",{F_REG_N},{HEX_F,REG_N,HEX_4,HEX_D}, arch_sh2e_up}
+ fsts FPUL,fr1 ;!/* 1111nnnn00001101 fsts FPUL,<F_REG_N>*/{"fsts",{FPUL_M,F_REG_N},{HEX_F,REG_N,HEX_0,HEX_D}, arch_sh2e_up}
+ fsub fr2,fr1 ;!/* 1111nnnnmmmm0001 fsub <F_REG_M>,<F_REG_N>*/{"fsub",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_1}, arch_sh2e_up}
+ ftrc fr1,FPUL ;!/* 1111nnnn00111101 ftrc <F_REG_N>,FPUL*/{"ftrc",{F_REG_N,FPUL_M},{HEX_F,REG_N,HEX_3,HEX_D}, arch_sh2e_up}
diff --git a/binutils-2.21/ld/testsuite/ld-sh/arch/sh2a-or-sh4.s b/binutils-2.21/ld/testsuite/ld-sh/arch/sh2a-or-sh4.s
new file mode 100644
index 0000000..0200796
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/arch/sh2a-or-sh4.s
@@ -0,0 +1,233 @@
+! Generated file. DO NOT EDIT.
+!
+! This file was generated by gas/testsuite/gas/sh/arch/arch.exp .
+! This file should contain every instruction valid on
+! architecture sh2a-or-sh4 but no more.
+! If the tests are failing because the expected results
+! have changed then run 'make check' and copy the new file
+! from <objdir>/gas/testsuite/sh2a-or-sh4.s
+! to <srcdir>/gas/testsuite/gas/sh/arch/sh2a-or-sh4.s .
+! Make sure there are no unexpected or missing instructions.
+
+ .section .text
+sh2a_or_sh4:
+! Instructions introduced into sh2a-or-sh4
+ fabs dr2 ;!/* 1111nnn001011101 fabs <D_REG_N> */{"fabs",{D_REG_N},{HEX_F,REG_N,HEX_5,HEX_D}, arch_sh2a_or_sh4_up}
+ fadd dr4,dr2 ;!/* 1111nnn0mmm00000 fadd <D_REG_M>,<D_REG_N>*/{"fadd",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_0}, arch_sh2a_or_sh4_up}
+ fcmp/eq dr4,dr2 ;!/* 1111nnn0mmm00100 fcmp/eq <D_REG_M>,<D_REG_N>*/{"fcmp/eq",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_4}, arch_sh2a_or_sh4_up}
+ fcmp/gt dr4,dr2 ;!/* 1111nnn0mmm00101 fcmp/gt <D_REG_M>,<D_REG_N>*/{"fcmp/gt",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_5}, arch_sh2a_or_sh4_up}
+ fcnvds dr2,FPUL ;!/* 1111nnn010111101 fcnvds <D_REG_N>,FPUL*/{"fcnvds",{D_REG_N,FPUL_M},{HEX_F,REG_N_D,HEX_B,HEX_D}, arch_sh2a_or_sh4_up}
+ fcnvsd FPUL,dr2 ;!/* 1111nnn010101101 fcnvsd FPUL,<D_REG_N>*/{"fcnvsd",{FPUL_M,D_REG_N},{HEX_F,REG_N_D,HEX_A,HEX_D}, arch_sh2a_or_sh4_up}
+ fdiv dr4,dr2 ;!/* 1111nnn0mmm00011 fdiv <D_REG_M>,<D_REG_N>*/{"fdiv",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_3}, arch_sh2a_or_sh4_up}
+ float FPUL,dr2 ;!/* 1111nnn000101101 float FPUL,<D_REG_N>*/{"float",{FPUL_M,D_REG_N},{HEX_F,REG_N,HEX_2,HEX_D}, arch_sh2a_or_sh4_up}
+ fmov xd4,xd2 ;!/* 1111nnn1mmmm1100 fmov <DX_REG_M>,<DX_REG_N>*/{"fmov",{DX_REG_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_C}, arch_sh2a_or_sh4_up}
+ fmov @r5,xd2 ;!/* 1111nnn1mmmm1000 fmov @<REG_M>,<DX_REG_N>*/{"fmov",{A_IND_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh2a_or_sh4_up}
+ fmov xd4,@r4 ;!/* 1111nnnnmmm11010 fmov <DX_REG_M>,@<REG_N>*/{"fmov",{DX_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh2a_or_sh4_up}
+ fmov @r5+,xd2 ;!/* 1111nnn1mmmm1001 fmov @<REG_M>+,<DX_REG_N>*/{"fmov",{A_INC_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh2a_or_sh4_up}
+ fmov xd4,@-r4 ;!/* 1111nnnnmmm11011 fmov <DX_REG_M>,@-<REG_N>*/{"fmov",{DX_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh2a_or_sh4_up}
+ fmov @(R0,r5),xd2 ;!/* 1111nnn1mmmm0110 fmov @(R0,<REG_M>),<DX_REG_N>*/{"fmov",{A_IND_R0_REG_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh2a_or_sh4_up}
+ fmov xd4,@(R0,r4) ;!/* 1111nnnnmmm10111 fmov <DX_REG_M>,@(R0,<REG_N>)*/{"fmov",{DX_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh2a_or_sh4_up}
+ fmov.d @r5,xd2 ;!/* 1111nnn1mmmm1000 fmov.d @<REG_M>,<DX_REG_N>*/{"fmov.d",{A_IND_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh2a_or_sh4_up}
+ fmov.d xd4,@r4 ;!/* 1111nnnnmmm11010 fmov.d <DX_REG_M>,@<REG_N>*/{"fmov.d",{DX_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh2a_or_sh4_up}
+ fmov.d @r5+,xd2 ;!/* 1111nnn1mmmm1001 fmov.d @<REG_M>+,<DX_REG_N>*/{"fmov.d",{A_INC_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh2a_or_sh4_up}
+ fmov.d xd4,@-r4 ;!/* 1111nnnnmmm11011 fmov.d <DX_REG_M>,@-<REG_N>*/{"fmov.d",{DX_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh2a_or_sh4_up}
+ fmov.d @(R0,r5),xd2 ;!/* 1111nnn1mmmm0110 fmov.d @(R0,<REG_M>),<DX_REG_N>*/{"fmov.d",{A_IND_R0_REG_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh2a_or_sh4_up}
+ fmov.d xd4,@(R0,r4) ;!/* 1111nnnnmmm10111 fmov.d <DX_REG_M>,@(R0,<REG_N>)*/{"fmov.d",{DX_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh2a_or_sh4_up}
+ fmul dr4,dr2 ;!/* 1111nnn0mmm00010 fmul <D_REG_M>,<D_REG_N>*/{"fmul",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_2}, arch_sh2a_or_sh4_up}
+ fneg dr2 ;!/* 1111nnn001001101 fneg <D_REG_N> */{"fneg",{D_REG_N},{HEX_F,REG_N,HEX_4,HEX_D}, arch_sh2a_or_sh4_up}
+ fschg ;!/* 1111001111111101 fschg */{"fschg",{0},{HEX_F,HEX_3,HEX_F,HEX_D}, arch_sh2a_or_sh4_up}
+ fsqrt dr2 ;!/* 1111nnn001101101 fsqrt <D_REG_N> */{"fsqrt",{D_REG_N},{HEX_F,REG_N,HEX_6,HEX_D}, arch_sh2a_or_sh4_up}
+ fsub dr4,dr2 ;!/* 1111nnn0mmm00001 fsub <D_REG_M>,<D_REG_N>*/{"fsub",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_1}, arch_sh2a_or_sh4_up}
+ ftrc dr2,FPUL ;!/* 1111nnnn00111101 ftrc <D_REG_N>,FPUL*/{"ftrc",{D_REG_N,FPUL_M},{HEX_F,REG_N,HEX_3,HEX_D}, arch_sh2a_or_sh4_up}
+
+! Instructions inherited from ancestors: sh sh2 sh2a-nofpu-or-sh3-nommu sh2a-nofpu-or-sh4-nommu-nofpu sh2a-or-sh3e sh2e
+ add #4,r4 ;!/* 0111nnnni8*1.... add #<imm>,<REG_N> */{"add",{A_IMM,A_REG_N},{HEX_7,REG_N,IMM0_8}, arch_sh_up}
+ add r5,r4 ;!/* 0011nnnnmmmm1100 add <REG_M>,<REG_N> */{"add",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_C}, arch_sh_up}
+ addc r5,r4 ;!/* 0011nnnnmmmm1110 addc <REG_M>,<REG_N>*/{"addc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_E}, arch_sh_up}
+ addv r5,r4 ;!/* 0011nnnnmmmm1111 addv <REG_M>,<REG_N>*/{"addv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_F}, arch_sh_up}
+ and #4,R0 ;!/* 11001001i8*1.... and #<imm>,R0 */{"and",{A_IMM,A_R0},{HEX_C,HEX_9,IMM0_8}, arch_sh_up}
+ and r5,r4 ;!/* 0010nnnnmmmm1001 and <REG_M>,<REG_N> */{"and",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_9}, arch_sh_up}
+ and.b #4,@(R0,GBR) ;!/* 11001101i8*1.... and.b #<imm>,@(R0,GBR)*/{"and.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_D,IMM0_8}, arch_sh_up}
+ bra .+8 ;!/* 1010i12......... bra <bdisp12> */{"bra",{A_BDISP12},{HEX_A,BRANCH_12}, arch_sh_up}
+ bsr .+8 ;!/* 1011i12......... bsr <bdisp12> */{"bsr",{A_BDISP12},{HEX_B,BRANCH_12}, arch_sh_up}
+ bt .+8 ;!/* 10001001i8p1.... bt <bdisp8> */{"bt",{A_BDISP8},{HEX_8,HEX_9,BRANCH_8}, arch_sh_up}
+ bf .+8 ;!/* 10001011i8p1.... bf <bdisp8> */{"bf",{A_BDISP8},{HEX_8,HEX_B,BRANCH_8}, arch_sh_up}
+ bt.s .+8 ;!/* 10001101i8p1.... bt.s <bdisp8> */{"bt.s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bt/s .+8 ;!/* 10001101i8p1.... bt/s <bdisp8> */{"bt/s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bf.s .+8 ;!/* 10001111i8p1.... bf.s <bdisp8> */{"bf.s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ bf/s .+8 ;!/* 10001111i8p1.... bf/s <bdisp8> */{"bf/s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ clrmac ;!/* 0000000000101000 clrmac */{"clrmac",{0},{HEX_0,HEX_0,HEX_2,HEX_8}, arch_sh_up}
+ clrs ;!/* 0000000001001000 clrs */{"clrs",{0},{HEX_0,HEX_0,HEX_4,HEX_8}, arch_sh_up}
+ clrt ;!/* 0000000000001000 clrt */{"clrt",{0},{HEX_0,HEX_0,HEX_0,HEX_8}, arch_sh_up}
+ cmp/eq #4,R0 ;!/* 10001000i8*1.... cmp/eq #<imm>,R0 */{"cmp/eq",{A_IMM,A_R0},{HEX_8,HEX_8,IMM0_8}, arch_sh_up}
+ cmp/eq r5,r4 ;!/* 0011nnnnmmmm0000 cmp/eq <REG_M>,<REG_N>*/{"cmp/eq",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_0}, arch_sh_up}
+ cmp/ge r5,r4 ;!/* 0011nnnnmmmm0011 cmp/ge <REG_M>,<REG_N>*/{"cmp/ge",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_3}, arch_sh_up}
+ cmp/gt r5,r4 ;!/* 0011nnnnmmmm0111 cmp/gt <REG_M>,<REG_N>*/{"cmp/gt",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_7}, arch_sh_up}
+ cmp/hi r5,r4 ;!/* 0011nnnnmmmm0110 cmp/hi <REG_M>,<REG_N>*/{"cmp/hi",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_6}, arch_sh_up}
+ cmp/hs r5,r4 ;!/* 0011nnnnmmmm0010 cmp/hs <REG_M>,<REG_N>*/{"cmp/hs",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_2}, arch_sh_up}
+ cmp/pl r4 ;!/* 0100nnnn00010101 cmp/pl <REG_N> */{"cmp/pl",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_5}, arch_sh_up}
+ cmp/pz r4 ;!/* 0100nnnn00010001 cmp/pz <REG_N> */{"cmp/pz",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_1}, arch_sh_up}
+ cmp/str r5,r4 ;!/* 0010nnnnmmmm1100 cmp/str <REG_M>,<REG_N>*/{"cmp/str",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_C}, arch_sh_up}
+ div0s r5,r4 ;!/* 0010nnnnmmmm0111 div0s <REG_M>,<REG_N>*/{"div0s",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_7}, arch_sh_up}
+ div0u ;!/* 0000000000011001 div0u */{"div0u",{0},{HEX_0,HEX_0,HEX_1,HEX_9}, arch_sh_up}
+ div1 r5,r4 ;!/* 0011nnnnmmmm0100 div1 <REG_M>,<REG_N>*/{"div1",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_4}, arch_sh_up}
+ exts.b r5,r4 ;!/* 0110nnnnmmmm1110 exts.b <REG_M>,<REG_N>*/{"exts.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_E}, arch_sh_up}
+ exts.w r5,r4 ;!/* 0110nnnnmmmm1111 exts.w <REG_M>,<REG_N>*/{"exts.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_F}, arch_sh_up}
+ extu.b r5,r4 ;!/* 0110nnnnmmmm1100 extu.b <REG_M>,<REG_N>*/{"extu.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_C}, arch_sh_up}
+ extu.w r5,r4 ;!/* 0110nnnnmmmm1101 extu.w <REG_M>,<REG_N>*/{"extu.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_D}, arch_sh_up}
+ jmp @r4 ;!/* 0100nnnn00101011 jmp @<REG_N> */{"jmp",{A_IND_N},{HEX_4,REG_N,HEX_2,HEX_B}, arch_sh_up}
+ jsr @r4 ;!/* 0100nnnn00001011 jsr @<REG_N> */{"jsr",{A_IND_N},{HEX_4,REG_N,HEX_0,HEX_B}, arch_sh_up}
+ ldc r4,SR ;!/* 0100nnnn00001110 ldc <REG_N>,SR */{"ldc",{A_REG_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_E}, arch_sh_up}
+ ldc r4,GBR ;!/* 0100nnnn00011110 ldc <REG_N>,GBR */{"ldc",{A_REG_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_E}, arch_sh_up}
+ ldc r4,VBR ;!/* 0100nnnn00101110 ldc <REG_N>,VBR */{"ldc",{A_REG_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_E}, arch_sh_up}
+ ldc.l @r4+,SR ;!/* 0100nnnn00000111 ldc.l @<REG_N>+,SR */{"ldc.l",{A_INC_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_7}, arch_sh_up}
+ ldc.l @r4+,GBR ;!/* 0100nnnn00010111 ldc.l @<REG_N>+,GBR */{"ldc.l",{A_INC_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_7}, arch_sh_up}
+ ldc.l @r4+,VBR ;!/* 0100nnnn00100111 ldc.l @<REG_N>+,VBR */{"ldc.l",{A_INC_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_7}, arch_sh_up}
+ lds r4,MACH ;!/* 0100nnnn00001010 lds <REG_N>,MACH */{"lds",{A_REG_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ lds r4,MACL ;!/* 0100nnnn00011010 lds <REG_N>,MACL */{"lds",{A_REG_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ lds r4,PR ;!/* 0100nnnn00101010 lds <REG_N>,PR */{"lds",{A_REG_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ lds r4,FPUL ;!/* 0100nnnn01011010 lds <REG_N>,FPUL */{"lds",{A_REG_M,FPUL_N},{HEX_4,REG_M,HEX_5,HEX_A}, arch_sh2e_up}
+ lds r5,FPSCR ;!/* 0100nnnn01101010 lds <REG_M>,FPSCR */{"lds",{A_REG_M,FPSCR_N},{HEX_4,REG_M,HEX_6,HEX_A}, arch_sh2e_up}
+ lds.l @r4+,MACH ;!/* 0100nnnn00000110 lds.l @<REG_N>+,MACH*/{"lds.l",{A_INC_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_6}, arch_sh_up}
+ lds.l @r4+,MACL ;!/* 0100nnnn00010110 lds.l @<REG_N>+,MACL*/{"lds.l",{A_INC_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_6}, arch_sh_up}
+ lds.l @r4+,PR ;!/* 0100nnnn00100110 lds.l @<REG_N>+,PR */{"lds.l",{A_INC_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_6}, arch_sh_up}
+ lds.l @r5+,FPUL ;!/* 0100nnnn01010110 lds.l @<REG_M>+,FPUL*/{"lds.l",{A_INC_M,FPUL_N},{HEX_4,REG_M,HEX_5,HEX_6}, arch_sh2e_up}
+ lds.l @r5+,FPSCR ;!/* 0100nnnn01100110 lds.l @<REG_M>+,FPSCR*/{"lds.l",{A_INC_M,FPSCR_N},{HEX_4,REG_M,HEX_6,HEX_6}, arch_sh2e_up}
+ mac.w @r5+,@r4+ ;!/* 0100nnnnmmmm1111 mac.w @<REG_M>+,@<REG_N>+*/{"mac.w",{A_INC_M,A_INC_N},{HEX_4,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mov #4,r4 ;!/* 1110nnnni8*1.... mov #<imm>,<REG_N> */{"mov",{A_IMM,A_REG_N},{HEX_E,REG_N,IMM0_8}, arch_sh_up}
+ mov r5,r4 ;!/* 0110nnnnmmmm0011 mov <REG_M>,<REG_N> */{"mov",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_3}, arch_sh_up}
+ mov.b r5,@(R0,r4) ;!/* 0000nnnnmmmm0100 mov.b <REG_M>,@(R0,<REG_N>)*/{"mov.b",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@-r4 ;!/* 0010nnnnmmmm0100 mov.b <REG_M>,@-<REG_N>*/{"mov.b",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@r4 ;!/* 0010nnnnmmmm0000 mov.b <REG_M>,@<REG_N>*/{"mov.b",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b @(8,r5),R0 ;!/* 10000100mmmmi4*1 mov.b @(<disp>,<REG_M>),R0*/{"mov.b",{A_DISP_REG_M,A_R0},{HEX_8,HEX_4,REG_M,IMM0_4}, arch_sh_up}
+ mov.b @(8,GBR),R0 ;!/* 11000100i8*1.... mov.b @(<disp>,GBR),R0*/{"mov.b",{A_DISP_GBR,A_R0},{HEX_C,HEX_4,IMM0_8}, arch_sh_up}
+ mov.b @(R0,r5),r4 ;!/* 0000nnnnmmmm1100 mov.b @(R0,<REG_M>),<REG_N>*/{"mov.b",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_C}, arch_sh_up}
+ mov.b @r5+,r4 ;!/* 0110nnnnmmmm0100 mov.b @<REG_M>+,<REG_N>*/{"mov.b",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b @r5,r4 ;!/* 0110nnnnmmmm0000 mov.b @<REG_M>,<REG_N>*/{"mov.b",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b R0,@(8,r5) ;!/* 10000000mmmmi4*1 mov.b R0,@(<disp>,<REG_M>)*/{"mov.b",{A_R0,A_DISP_REG_M},{HEX_8,HEX_0,REG_M,IMM1_4}, arch_sh_up}
+ mov.b R0,@(8,GBR) ;!/* 11000000i8*1.... mov.b R0,@(<disp>,GBR)*/{"mov.b",{A_R0,A_DISP_GBR},{HEX_C,HEX_0,IMM1_8}, arch_sh_up}
+ mov.l r5,@(8,r4) ;!/* 0001nnnnmmmmi4*4 mov.l <REG_M>,@(<disp>,<REG_N>)*/{"mov.l",{ A_REG_M,A_DISP_REG_N},{HEX_1,REG_N,REG_M,IMM1_4BY4}, arch_sh_up}
+ mov.l r5,@(R0,r4) ;!/* 0000nnnnmmmm0110 mov.l <REG_M>,@(R0,<REG_N>)*/{"mov.l",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@-r4 ;!/* 0010nnnnmmmm0110 mov.l <REG_M>,@-<REG_N>*/{"mov.l",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@r4 ;!/* 0010nnnnmmmm0010 mov.l <REG_M>,@<REG_N>*/{"mov.l",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l @(8,r5),r4 ;!/* 0101nnnnmmmmi4*4 mov.l @(<disp>,<REG_M>),<REG_N>*/{"mov.l",{A_DISP_REG_M,A_REG_N},{HEX_5,REG_N,REG_M,IMM0_4BY4}, arch_sh_up}
+ mov.l @(8,GBR),R0 ;!/* 11000110i8*4.... mov.l @(<disp>,GBR),R0*/{"mov.l",{A_DISP_GBR,A_R0},{HEX_C,HEX_6,IMM0_8BY4}, arch_sh_up}
+ .align 2
+ mov.l @(8,PC),r4 ;!/* 1101nnnni8p4.... mov.l @(<disp>,PC),<REG_N>*/{"mov.l",{A_DISP_PC,A_REG_N},{HEX_D,REG_N,PCRELIMM_8BY4}, arch_sh_up}
+ mov.l @(R0,r5),r4 ;!/* 0000nnnnmmmm1110 mov.l @(R0,<REG_M>),<REG_N>*/{"mov.l",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mov.l @r5+,r4 ;!/* 0110nnnnmmmm0110 mov.l @<REG_M>+,<REG_N>*/{"mov.l",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l @r5,r4 ;!/* 0110nnnnmmmm0010 mov.l @<REG_M>,<REG_N>*/{"mov.l",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l R0,@(8,GBR) ;!/* 11000010i8*4.... mov.l R0,@(<disp>,GBR)*/{"mov.l",{A_R0,A_DISP_GBR},{HEX_C,HEX_2,IMM1_8BY4}, arch_sh_up}
+ mov.w r5,@(R0,r4) ;!/* 0000nnnnmmmm0101 mov.w <REG_M>,@(R0,<REG_N>)*/{"mov.w",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@-r4 ;!/* 0010nnnnmmmm0101 mov.w <REG_M>,@-<REG_N>*/{"mov.w",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@r4 ;!/* 0010nnnnmmmm0001 mov.w <REG_M>,@<REG_N>*/{"mov.w",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w @(8,r5),R0 ;!/* 10000101mmmmi4*2 mov.w @(<disp>,<REG_M>),R0*/{"mov.w",{A_DISP_REG_M,A_R0},{HEX_8,HEX_5,REG_M,IMM0_4BY2}, arch_sh_up}
+ mov.w @(8,GBR),R0 ;!/* 11000101i8*2.... mov.w @(<disp>,GBR),R0*/{"mov.w",{A_DISP_GBR,A_R0},{HEX_C,HEX_5,IMM0_8BY2}, arch_sh_up}
+ mov.w @(8,PC),r4 ;!/* 1001nnnni8p2.... mov.w @(<disp>,PC),<REG_N>*/{"mov.w",{A_DISP_PC,A_REG_N},{HEX_9,REG_N,PCRELIMM_8BY2}, arch_sh_up}
+ mov.w @(R0,r5),r4 ;!/* 0000nnnnmmmm1101 mov.w @(R0,<REG_M>),<REG_N>*/{"mov.w",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_D}, arch_sh_up}
+ mov.w @r5+,r4 ;!/* 0110nnnnmmmm0101 mov.w @<REG_M>+,<REG_N>*/{"mov.w",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w @r5,r4 ;!/* 0110nnnnmmmm0001 mov.w @<REG_M>,<REG_N>*/{"mov.w",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w R0,@(8,r5) ;!/* 10000001mmmmi4*2 mov.w R0,@(<disp>,<REG_M>)*/{"mov.w",{A_R0,A_DISP_REG_M},{HEX_8,HEX_1,REG_M,IMM1_4BY2}, arch_sh_up}
+ mov.w R0,@(8,GBR) ;!/* 11000001i8*2.... mov.w R0,@(<disp>,GBR)*/{"mov.w",{A_R0,A_DISP_GBR},{HEX_C,HEX_1,IMM1_8BY2}, arch_sh_up}
+ .align 2
+ mova @(8,PC),R0 ;!/* 11000111i8p4.... mova @(<disp>,PC),R0*/{"mova",{A_DISP_PC,A_R0},{HEX_C,HEX_7,PCRELIMM_8BY4}, arch_sh_up}
+ movt r4 ;!/* 0000nnnn00101001 movt <REG_N> */{"movt",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ muls.w r5,r4 ;!/* 0010nnnnmmmm1111 muls.w <REG_M>,<REG_N>*/{"muls.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ muls r5,r4 ;!/* 0010nnnnmmmm1111 muls <REG_M>,<REG_N>*/{"muls",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mul.l r5,r4 ;!/* 0000nnnnmmmm0111 mul.l <REG_M>,<REG_N>*/{"mul.l",{ A_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_7}, arch_sh2_up}
+ mulu.w r5,r4 ;!/* 0010nnnnmmmm1110 mulu.w <REG_M>,<REG_N>*/{"mulu.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mulu r5,r4 ;!/* 0010nnnnmmmm1110 mulu <REG_M>,<REG_N>*/{"mulu",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ neg r5,r4 ;!/* 0110nnnnmmmm1011 neg <REG_M>,<REG_N> */{"neg",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_B}, arch_sh_up}
+ negc r5,r4 ;!/* 0110nnnnmmmm1010 negc <REG_M>,<REG_N>*/{"negc",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_A}, arch_sh_up}
+ nop ;!/* 0000000000001001 nop */{"nop",{0},{HEX_0,HEX_0,HEX_0,HEX_9}, arch_sh_up}
+ not r5,r4 ;!/* 0110nnnnmmmm0111 not <REG_M>,<REG_N> */{"not",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_7}, arch_sh_up}
+ or #4,R0 ;!/* 11001011i8*1.... or #<imm>,R0 */{"or",{A_IMM,A_R0},{HEX_C,HEX_B,IMM0_8}, arch_sh_up}
+ or r5,r4 ;!/* 0010nnnnmmmm1011 or <REG_M>,<REG_N> */{"or",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_B}, arch_sh_up}
+ or.b #4,@(R0,GBR) ;!/* 11001111i8*1.... or.b #<imm>,@(R0,GBR)*/{"or.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_F,IMM0_8}, arch_sh_up}
+ pref @r4 ;!/* 0000nnnn10000011 pref @<REG_N> */{"pref",{A_IND_N},{HEX_0,REG_N,HEX_8,HEX_3}, arch_sh2a_nofpu_or_sh4_nommu_nofpu_up}
+ rotcl r4 ;!/* 0100nnnn00100100 rotcl <REG_N> */{"rotcl",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_4}, arch_sh_up}
+ rotcr r4 ;!/* 0100nnnn00100101 rotcr <REG_N> */{"rotcr",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_5}, arch_sh_up}
+ rotl r4 ;!/* 0100nnnn00000100 rotl <REG_N> */{"rotl",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_4}, arch_sh_up}
+ rotr r4 ;!/* 0100nnnn00000101 rotr <REG_N> */{"rotr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_5}, arch_sh_up}
+ rte ;!/* 0000000000101011 rte */{"rte",{0},{HEX_0,HEX_0,HEX_2,HEX_B}, arch_sh_up}
+ rts ;!/* 0000000000001011 rts */{"rts",{0},{HEX_0,HEX_0,HEX_0,HEX_B}, arch_sh_up}
+ sets ;!/* 0000000001011000 sets */{"sets",{0},{HEX_0,HEX_0,HEX_5,HEX_8}, arch_sh_up}
+ sett ;!/* 0000000000011000 sett */{"sett",{0},{HEX_0,HEX_0,HEX_1,HEX_8}, arch_sh_up}
+ shad r5,r4 ;!/* 0100nnnnmmmm1100 shad <REG_M>,<REG_N>*/{"shad",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_C}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shld r5,r4 ;!/* 0100nnnnmmmm1101 shld <REG_M>,<REG_N>*/{"shld",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_D}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shal r4 ;!/* 0100nnnn00100000 shal <REG_N> */{"shal",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_0}, arch_sh_up}
+ shar r4 ;!/* 0100nnnn00100001 shar <REG_N> */{"shar",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_1}, arch_sh_up}
+ shll r4 ;!/* 0100nnnn00000000 shll <REG_N> */{"shll",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_0}, arch_sh_up}
+ shll16 r4 ;!/* 0100nnnn00101000 shll16 <REG_N> */{"shll16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_8}, arch_sh_up}
+ shll2 r4 ;!/* 0100nnnn00001000 shll2 <REG_N> */{"shll2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_8}, arch_sh_up}
+ shll8 r4 ;!/* 0100nnnn00011000 shll8 <REG_N> */{"shll8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_8}, arch_sh_up}
+ shlr r4 ;!/* 0100nnnn00000001 shlr <REG_N> */{"shlr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_1}, arch_sh_up}
+ shlr16 r4 ;!/* 0100nnnn00101001 shlr16 <REG_N> */{"shlr16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ shlr2 r4 ;!/* 0100nnnn00001001 shlr2 <REG_N> */{"shlr2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_9}, arch_sh_up}
+ shlr8 r4 ;!/* 0100nnnn00011001 shlr8 <REG_N> */{"shlr8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_9}, arch_sh_up}
+ sleep ;!/* 0000000000011011 sleep */{"sleep",{0},{HEX_0,HEX_0,HEX_1,HEX_B}, arch_sh_up}
+ stc SR,r4 ;!/* 0000nnnn00000010 stc SR,<REG_N> */{"stc",{A_SR,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ stc GBR,r4 ;!/* 0000nnnn00010010 stc GBR,<REG_N> */{"stc",{A_GBR,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ stc VBR,r4 ;!/* 0000nnnn00100010 stc VBR,<REG_N> */{"stc",{A_VBR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ stc.l SR,@-r4 ;!/* 0100nnnn00000011 stc.l SR,@-<REG_N> */{"stc.l",{A_SR,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_3}, arch_sh_up}
+ stc.l VBR,@-r4 ;!/* 0100nnnn00100011 stc.l VBR,@-<REG_N> */{"stc.l",{A_VBR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_3}, arch_sh_up}
+ stc.l GBR,@-r4 ;!/* 0100nnnn00010011 stc.l GBR,@-<REG_N> */{"stc.l",{A_GBR,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_3}, arch_sh_up}
+ sts MACH,r4 ;!/* 0000nnnn00001010 sts MACH,<REG_N> */{"sts",{A_MACH,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ sts MACL,r4 ;!/* 0000nnnn00011010 sts MACL,<REG_N> */{"sts",{A_MACL,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ sts PR,r4 ;!/* 0000nnnn00101010 sts PR,<REG_N> */{"sts",{A_PR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ sts FPUL,r4 ;!/* 0000nnnn01011010 sts FPUL,<REG_N> */{"sts",{FPUL_M,A_REG_N},{HEX_0,REG_N,HEX_5,HEX_A}, arch_sh2e_up}
+ sts FPSCR,r4 ;!/* 0000nnnn01101010 sts FPSCR,<REG_N> */{"sts",{FPSCR_M,A_REG_N},{HEX_0,REG_N,HEX_6,HEX_A}, arch_sh2e_up}
+ sts.l MACH,@-r4 ;!/* 0100nnnn00000010 sts.l MACH,@-<REG_N>*/{"sts.l",{A_MACH,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ sts.l MACL,@-r4 ;!/* 0100nnnn00010010 sts.l MACL,@-<REG_N>*/{"sts.l",{A_MACL,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ sts.l PR,@-r4 ;!/* 0100nnnn00100010 sts.l PR,@-<REG_N> */{"sts.l",{A_PR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ sts.l FPUL,@-r4 ;!/* 0100nnnn01010010 sts.l FPUL,@-<REG_N>*/{"sts.l",{FPUL_M,A_DEC_N},{HEX_4,REG_N,HEX_5,HEX_2}, arch_sh2e_up}
+ sts.l FPSCR,@-r4 ;!/* 0100nnnn01100010 sts.l FPSCR,@-<REG_N>*/{"sts.l",{FPSCR_M,A_DEC_N},{HEX_4,REG_N,HEX_6,HEX_2}, arch_sh2e_up}
+ sub r5,r4 ;!/* 0011nnnnmmmm1000 sub <REG_M>,<REG_N> */{"sub",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_8}, arch_sh_up}
+ subc r5,r4 ;!/* 0011nnnnmmmm1010 subc <REG_M>,<REG_N>*/{"subc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_A}, arch_sh_up}
+ subv r5,r4 ;!/* 0011nnnnmmmm1011 subv <REG_M>,<REG_N>*/{"subv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_B}, arch_sh_up}
+ swap.b r5,r4 ;!/* 0110nnnnmmmm1000 swap.b <REG_M>,<REG_N>*/{"swap.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_8}, arch_sh_up}
+ swap.w r5,r4 ;!/* 0110nnnnmmmm1001 swap.w <REG_M>,<REG_N>*/{"swap.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_9}, arch_sh_up}
+ tas.b @r4 ;!/* 0100nnnn00011011 tas.b @<REG_N> */{"tas.b",{A_IND_N},{HEX_4,REG_N,HEX_1,HEX_B}, arch_sh_up}
+ trapa #4 ;!/* 11000011i8*1.... trapa #<imm> */{"trapa",{A_IMM},{HEX_C,HEX_3,IMM0_8}, arch_sh_up}
+ tst #4,R0 ;!/* 11001000i8*1.... tst #<imm>,R0 */{"tst",{A_IMM,A_R0},{HEX_C,HEX_8,IMM0_8}, arch_sh_up}
+ tst r5,r4 ;!/* 0010nnnnmmmm1000 tst <REG_M>,<REG_N> */{"tst",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_8}, arch_sh_up}
+ tst.b #4,@(R0,GBR) ;!/* 11001100i8*1.... tst.b #<imm>,@(R0,GBR)*/{"tst.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_C,IMM0_8}, arch_sh_up}
+ xor #4,R0 ;!/* 11001010i8*1.... xor #<imm>,R0 */{"xor",{A_IMM,A_R0},{HEX_C,HEX_A,IMM0_8}, arch_sh_up}
+ xor r5,r4 ;!/* 0010nnnnmmmm1010 xor <REG_M>,<REG_N> */{"xor",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_A}, arch_sh_up}
+ xor.b #4,@(R0,GBR) ;!/* 11001110i8*1.... xor.b #<imm>,@(R0,GBR)*/{"xor.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_E,IMM0_8}, arch_sh_up}
+ xtrct r5,r4 ;!/* 0010nnnnmmmm1101 xtrct <REG_M>,<REG_N>*/{"xtrct",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_D}, arch_sh_up}
+ dt r4 ;!/* 0100nnnn00010000 dt <REG_N> */{"dt",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_0}, arch_sh2_up}
+ dmuls.l r5,r4 ;!/* 0011nnnnmmmm1101 dmuls.l <REG_M>,<REG_N>*/{"dmuls.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_D}, arch_sh2_up}
+ dmulu.l r5,r4 ;!/* 0011nnnnmmmm0101 dmulu.l <REG_M>,<REG_N>*/{"dmulu.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_5}, arch_sh2_up}
+ mac.l @r5+,@r4+ ;!/* 0000nnnnmmmm1111 mac.l @<REG_M>+,@<REG_N>+*/{"mac.l",{A_INC_M,A_INC_N},{HEX_0,REG_N,REG_M,HEX_F}, arch_sh2_up}
+ braf r4 ;!/* 0000nnnn00100011 braf <REG_N> */{"braf",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_3}, arch_sh2_up}
+ bsrf r4 ;!/* 0000nnnn00000011 bsrf <REG_N> */{"bsrf",{A_REG_N},{HEX_0,REG_N,HEX_0,HEX_3}, arch_sh2_up}
+ fabs fr1 ;!/* 1111nnnn01011101 fabs <F_REG_N> */{"fabs",{F_REG_N},{HEX_F,REG_N,HEX_5,HEX_D}, arch_sh2e_up}
+ fadd fr2,fr1 ;!/* 1111nnnnmmmm0000 fadd <F_REG_M>,<F_REG_N>*/{"fadd",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_0}, arch_sh2e_up}
+ fcmp/eq fr2,fr1 ;!/* 1111nnnnmmmm0100 fcmp/eq <F_REG_M>,<F_REG_N>*/{"fcmp/eq",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_4}, arch_sh2e_up}
+ fcmp/gt fr2,fr1 ;!/* 1111nnnnmmmm0101 fcmp/gt <F_REG_M>,<F_REG_N>*/{"fcmp/gt",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_5}, arch_sh2e_up}
+ fdiv fr2,fr1 ;!/* 1111nnnnmmmm0011 fdiv <F_REG_M>,<F_REG_N>*/{"fdiv",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_3}, arch_sh2e_up}
+ fldi0 fr1 ;!/* 1111nnnn10001101 fldi0 <F_REG_N> */{"fldi0",{F_REG_N},{HEX_F,REG_N,HEX_8,HEX_D}, arch_sh2e_up}
+ fldi1 fr1 ;!/* 1111nnnn10011101 fldi1 <F_REG_N> */{"fldi1",{F_REG_N},{HEX_F,REG_N,HEX_9,HEX_D}, arch_sh2e_up}
+ flds fr1,FPUL ;!/* 1111nnnn00011101 flds <F_REG_N>,FPUL*/{"flds",{F_REG_N,FPUL_M},{HEX_F,REG_N,HEX_1,HEX_D}, arch_sh2e_up}
+ float FPUL,fr1 ;!/* 1111nnnn00101101 float FPUL,<F_REG_N>*/{"float",{FPUL_M,F_REG_N},{HEX_F,REG_N,HEX_2,HEX_D}, arch_sh2e_up}
+ fmac FR0,fr2,fr1 ;!/* 1111nnnnmmmm1110 fmac FR0,<F_REG_M>,<F_REG_N>*/{"fmac",{F_FR0,F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_E}, arch_sh2e_up}
+ fmov fr2,fr1 ;!/* 1111nnnnmmmm1100 fmov <F_REG_M>,<F_REG_N>*/{"fmov",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_C}, arch_sh2e_up}
+ fmov @r5,fr1 ;!/* 1111nnnnmmmm1000 fmov @<REG_M>,<F_REG_N>*/{"fmov",{A_IND_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh2e_up}
+ fmov fr2,@r4 ;!/* 1111nnnnmmmm1010 fmov <F_REG_M>,@<REG_N>*/{"fmov",{F_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh2e_up}
+ fmov @r5+,fr1 ;!/* 1111nnnnmmmm1001 fmov @<REG_M>+,<F_REG_N>*/{"fmov",{A_INC_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh2e_up}
+ fmov fr2,@-r4 ;!/* 1111nnnnmmmm1011 fmov <F_REG_M>,@-<REG_N>*/{"fmov",{F_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh2e_up}
+ fmov @(R0,r5),fr1 ;!/* 1111nnnnmmmm0110 fmov @(R0,<REG_M>),<F_REG_N>*/{"fmov",{A_IND_R0_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh2e_up}
+ fmov fr2,@(R0,r4) ;!/* 1111nnnnmmmm0111 fmov <F_REG_M>,@(R0,<REG_N>)*/{"fmov",{F_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh2e_up}
+ fmov.s @r5,fr1 ;!/* 1111nnnnmmmm1000 fmov.s @<REG_M>,<F_REG_N>*/{"fmov.s",{A_IND_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh2e_up}
+ fmov.s fr2,@r4 ;!/* 1111nnnnmmmm1010 fmov.s <F_REG_M>,@<REG_N>*/{"fmov.s",{F_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh2e_up}
+ fmov.s @r5+,fr1 ;!/* 1111nnnnmmmm1001 fmov.s @<REG_M>+,<F_REG_N>*/{"fmov.s",{A_INC_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh2e_up}
+ fmov.s fr2,@-r4 ;!/* 1111nnnnmmmm1011 fmov.s <F_REG_M>,@-<REG_N>*/{"fmov.s",{F_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh2e_up}
+ fmov.s @(R0,r5),fr1 ;!/* 1111nnnnmmmm0110 fmov.s @(R0,<REG_M>),<F_REG_N>*/{"fmov.s",{A_IND_R0_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh2e_up}
+ fmov.s fr2,@(R0,r4) ;!/* 1111nnnnmmmm0111 fmov.s <F_REG_M>,@(R0,<REG_N>)*/{"fmov.s",{F_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh2e_up}
+ fmul fr2,fr1 ;!/* 1111nnnnmmmm0010 fmul <F_REG_M>,<F_REG_N>*/{"fmul",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_2}, arch_sh2e_up}
+ fneg fr1 ;!/* 1111nnnn01001101 fneg <F_REG_N> */{"fneg",{F_REG_N},{HEX_F,REG_N,HEX_4,HEX_D}, arch_sh2e_up}
+ fsqrt fr1 ;!/* 1111nnnn01101101 fsqrt <F_REG_N> */{"fsqrt",{F_REG_N},{HEX_F,REG_N,HEX_6,HEX_D}, arch_sh2a_or_sh3e_up}
+ fsts FPUL,fr1 ;!/* 1111nnnn00001101 fsts FPUL,<F_REG_N>*/{"fsts",{FPUL_M,F_REG_N},{HEX_F,REG_N,HEX_0,HEX_D}, arch_sh2e_up}
+ fsub fr2,fr1 ;!/* 1111nnnnmmmm0001 fsub <F_REG_M>,<F_REG_N>*/{"fsub",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_1}, arch_sh2e_up}
+ ftrc fr1,FPUL ;!/* 1111nnnn00111101 ftrc <F_REG_N>,FPUL*/{"ftrc",{F_REG_N,FPUL_M},{HEX_F,REG_N,HEX_3,HEX_D}, arch_sh2e_up}
diff --git a/binutils-2.21/ld/testsuite/ld-sh/arch/sh2a.s b/binutils-2.21/ld/testsuite/ld-sh/arch/sh2a.s
new file mode 100644
index 0000000..04e10f0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/arch/sh2a.s
@@ -0,0 +1,289 @@
+! Generated file. DO NOT EDIT.
+!
+! This file was generated by gas/testsuite/gas/sh/arch/arch.exp .
+! This file should contain every instruction valid on
+! architecture sh2a but no more.
+! If the tests are failing because the expected results
+! have changed then run 'make check' and copy the new file
+! from <objdir>/gas/testsuite/sh2a.s
+! to <srcdir>/gas/testsuite/gas/sh/arch/sh2a.s .
+! Make sure there are no unexpected or missing instructions.
+
+ .section .text
+sh2a:
+! Instructions introduced into sh2a
+ fmov.d xd4,@(2048,r4) ;!/* 0011nnnnmmmm0001 0011dddddddddddd fmov.d <DX_REG_M>,@(<DISP12>,<REG_N>) */ {"fmov.d",{DX_REG_M,A_DISP_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_3,DISP1_12BY8}, arch_sh2a_up | arch_op32}
+ fmov.d @(2048,r5),xd2 ;!/* 0011nnnnmmmm0001 0111dddddddddddd fmov.d @(<DISP12>,<REG_M>),<DX_REG_N> */ {"fmov.d",{A_DISP_REG_M,DX_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_7,DISP0_12BY8}, arch_sh2a_up | arch_op32}
+ fmov.s fr2,@(2048,r4) ;!/* 0011nnnnmmmm0001 0011dddddddddddd fmov.s <F_REG_M>,@(<DISP12>,<REG_N>) */ {"fmov.s",{F_REG_M,A_DISP_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_3,DISP1_12BY4}, arch_sh2a_up | arch_op32}
+ fmov.s @(2048,r5),fr1 ;!/* 0011nnnnmmmm0001 0111dddddddddddd fmov.s @(<DISP12>,<REG_M>),<F_REG_N> */ {"fmov.s",{A_DISP_REG_M,F_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_7,DISP0_12BY4}, arch_sh2a_up | arch_op32}
+
+! Instructions inherited from ancestors: sh sh2 sh2a-nofpu sh2a-nofpu-or-sh3-nommu sh2a-nofpu-or-sh4-nommu-nofpu sh2a-or-sh3e sh2a-or-sh4 sh2e
+ add #4,r4 ;!/* 0111nnnni8*1.... add #<imm>,<REG_N> */{"add",{A_IMM,A_REG_N},{HEX_7,REG_N,IMM0_8}, arch_sh_up}
+ add r5,r4 ;!/* 0011nnnnmmmm1100 add <REG_M>,<REG_N> */{"add",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_C}, arch_sh_up}
+ addc r5,r4 ;!/* 0011nnnnmmmm1110 addc <REG_M>,<REG_N>*/{"addc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_E}, arch_sh_up}
+ addv r5,r4 ;!/* 0011nnnnmmmm1111 addv <REG_M>,<REG_N>*/{"addv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_F}, arch_sh_up}
+ and #4,R0 ;!/* 11001001i8*1.... and #<imm>,R0 */{"and",{A_IMM,A_R0},{HEX_C,HEX_9,IMM0_8}, arch_sh_up}
+ and r5,r4 ;!/* 0010nnnnmmmm1001 and <REG_M>,<REG_N> */{"and",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_9}, arch_sh_up}
+ and.b #4,@(R0,GBR) ;!/* 11001101i8*1.... and.b #<imm>,@(R0,GBR)*/{"and.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_D,IMM0_8}, arch_sh_up}
+ bra .+8 ;!/* 1010i12......... bra <bdisp12> */{"bra",{A_BDISP12},{HEX_A,BRANCH_12}, arch_sh_up}
+ bsr .+8 ;!/* 1011i12......... bsr <bdisp12> */{"bsr",{A_BDISP12},{HEX_B,BRANCH_12}, arch_sh_up}
+ bt .+8 ;!/* 10001001i8p1.... bt <bdisp8> */{"bt",{A_BDISP8},{HEX_8,HEX_9,BRANCH_8}, arch_sh_up}
+ bf .+8 ;!/* 10001011i8p1.... bf <bdisp8> */{"bf",{A_BDISP8},{HEX_8,HEX_B,BRANCH_8}, arch_sh_up}
+ bt.s .+8 ;!/* 10001101i8p1.... bt.s <bdisp8> */{"bt.s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bt/s .+8 ;!/* 10001101i8p1.... bt/s <bdisp8> */{"bt/s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bf.s .+8 ;!/* 10001111i8p1.... bf.s <bdisp8> */{"bf.s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ bf/s .+8 ;!/* 10001111i8p1.... bf/s <bdisp8> */{"bf/s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ clrmac ;!/* 0000000000101000 clrmac */{"clrmac",{0},{HEX_0,HEX_0,HEX_2,HEX_8}, arch_sh_up}
+ clrs ;!/* 0000000001001000 clrs */{"clrs",{0},{HEX_0,HEX_0,HEX_4,HEX_8}, arch_sh_up}
+ clrt ;!/* 0000000000001000 clrt */{"clrt",{0},{HEX_0,HEX_0,HEX_0,HEX_8}, arch_sh_up}
+ cmp/eq #4,R0 ;!/* 10001000i8*1.... cmp/eq #<imm>,R0 */{"cmp/eq",{A_IMM,A_R0},{HEX_8,HEX_8,IMM0_8}, arch_sh_up}
+ cmp/eq r5,r4 ;!/* 0011nnnnmmmm0000 cmp/eq <REG_M>,<REG_N>*/{"cmp/eq",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_0}, arch_sh_up}
+ cmp/ge r5,r4 ;!/* 0011nnnnmmmm0011 cmp/ge <REG_M>,<REG_N>*/{"cmp/ge",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_3}, arch_sh_up}
+ cmp/gt r5,r4 ;!/* 0011nnnnmmmm0111 cmp/gt <REG_M>,<REG_N>*/{"cmp/gt",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_7}, arch_sh_up}
+ cmp/hi r5,r4 ;!/* 0011nnnnmmmm0110 cmp/hi <REG_M>,<REG_N>*/{"cmp/hi",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_6}, arch_sh_up}
+ cmp/hs r5,r4 ;!/* 0011nnnnmmmm0010 cmp/hs <REG_M>,<REG_N>*/{"cmp/hs",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_2}, arch_sh_up}
+ cmp/pl r4 ;!/* 0100nnnn00010101 cmp/pl <REG_N> */{"cmp/pl",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_5}, arch_sh_up}
+ cmp/pz r4 ;!/* 0100nnnn00010001 cmp/pz <REG_N> */{"cmp/pz",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_1}, arch_sh_up}
+ cmp/str r5,r4 ;!/* 0010nnnnmmmm1100 cmp/str <REG_M>,<REG_N>*/{"cmp/str",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_C}, arch_sh_up}
+ div0s r5,r4 ;!/* 0010nnnnmmmm0111 div0s <REG_M>,<REG_N>*/{"div0s",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_7}, arch_sh_up}
+ div0u ;!/* 0000000000011001 div0u */{"div0u",{0},{HEX_0,HEX_0,HEX_1,HEX_9}, arch_sh_up}
+ div1 r5,r4 ;!/* 0011nnnnmmmm0100 div1 <REG_M>,<REG_N>*/{"div1",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_4}, arch_sh_up}
+ exts.b r5,r4 ;!/* 0110nnnnmmmm1110 exts.b <REG_M>,<REG_N>*/{"exts.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_E}, arch_sh_up}
+ exts.w r5,r4 ;!/* 0110nnnnmmmm1111 exts.w <REG_M>,<REG_N>*/{"exts.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_F}, arch_sh_up}
+ extu.b r5,r4 ;!/* 0110nnnnmmmm1100 extu.b <REG_M>,<REG_N>*/{"extu.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_C}, arch_sh_up}
+ extu.w r5,r4 ;!/* 0110nnnnmmmm1101 extu.w <REG_M>,<REG_N>*/{"extu.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_D}, arch_sh_up}
+ jmp @r4 ;!/* 0100nnnn00101011 jmp @<REG_N> */{"jmp",{A_IND_N},{HEX_4,REG_N,HEX_2,HEX_B}, arch_sh_up}
+ jsr @r4 ;!/* 0100nnnn00001011 jsr @<REG_N> */{"jsr",{A_IND_N},{HEX_4,REG_N,HEX_0,HEX_B}, arch_sh_up}
+ ldc r4,SR ;!/* 0100nnnn00001110 ldc <REG_N>,SR */{"ldc",{A_REG_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_E}, arch_sh_up}
+ ldc r4,GBR ;!/* 0100nnnn00011110 ldc <REG_N>,GBR */{"ldc",{A_REG_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_E}, arch_sh_up}
+ ldc r5,TBR ;!/* 0100mmmm01001010 ldc <REG_M>,TBR */{"ldc",{A_REG_M,A_TBR},{HEX_4,REG_M,HEX_4,HEX_A}, arch_sh2a_nofpu_up}
+ ldc r4,VBR ;!/* 0100nnnn00101110 ldc <REG_N>,VBR */{"ldc",{A_REG_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_E}, arch_sh_up}
+ ldc.l @r4+,SR ;!/* 0100nnnn00000111 ldc.l @<REG_N>+,SR */{"ldc.l",{A_INC_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_7}, arch_sh_up}
+ ldc.l @r4+,GBR ;!/* 0100nnnn00010111 ldc.l @<REG_N>+,GBR */{"ldc.l",{A_INC_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_7}, arch_sh_up}
+ ldc.l @r4+,VBR ;!/* 0100nnnn00100111 ldc.l @<REG_N>+,VBR */{"ldc.l",{A_INC_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_7}, arch_sh_up}
+ lds r4,MACH ;!/* 0100nnnn00001010 lds <REG_N>,MACH */{"lds",{A_REG_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ lds r4,MACL ;!/* 0100nnnn00011010 lds <REG_N>,MACL */{"lds",{A_REG_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ lds r4,PR ;!/* 0100nnnn00101010 lds <REG_N>,PR */{"lds",{A_REG_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ lds r4,FPUL ;!/* 0100nnnn01011010 lds <REG_N>,FPUL */{"lds",{A_REG_M,FPUL_N},{HEX_4,REG_M,HEX_5,HEX_A}, arch_sh2e_up}
+ lds r5,FPSCR ;!/* 0100nnnn01101010 lds <REG_M>,FPSCR */{"lds",{A_REG_M,FPSCR_N},{HEX_4,REG_M,HEX_6,HEX_A}, arch_sh2e_up}
+ lds.l @r4+,MACH ;!/* 0100nnnn00000110 lds.l @<REG_N>+,MACH*/{"lds.l",{A_INC_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_6}, arch_sh_up}
+ lds.l @r4+,MACL ;!/* 0100nnnn00010110 lds.l @<REG_N>+,MACL*/{"lds.l",{A_INC_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_6}, arch_sh_up}
+ lds.l @r4+,PR ;!/* 0100nnnn00100110 lds.l @<REG_N>+,PR */{"lds.l",{A_INC_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_6}, arch_sh_up}
+ lds.l @r5+,FPUL ;!/* 0100nnnn01010110 lds.l @<REG_M>+,FPUL*/{"lds.l",{A_INC_M,FPUL_N},{HEX_4,REG_M,HEX_5,HEX_6}, arch_sh2e_up}
+ lds.l @r5+,FPSCR ;!/* 0100nnnn01100110 lds.l @<REG_M>+,FPSCR*/{"lds.l",{A_INC_M,FPSCR_N},{HEX_4,REG_M,HEX_6,HEX_6}, arch_sh2e_up}
+ mac.w @r5+,@r4+ ;!/* 0100nnnnmmmm1111 mac.w @<REG_M>+,@<REG_N>+*/{"mac.w",{A_INC_M,A_INC_N},{HEX_4,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mov #4,r4 ;!/* 1110nnnni8*1.... mov #<imm>,<REG_N> */{"mov",{A_IMM,A_REG_N},{HEX_E,REG_N,IMM0_8}, arch_sh_up}
+ mov r5,r4 ;!/* 0110nnnnmmmm0011 mov <REG_M>,<REG_N> */{"mov",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_3}, arch_sh_up}
+ mov.b r5,@(R0,r4) ;!/* 0000nnnnmmmm0100 mov.b <REG_M>,@(R0,<REG_N>)*/{"mov.b",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@-r4 ;!/* 0010nnnnmmmm0100 mov.b <REG_M>,@-<REG_N>*/{"mov.b",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@r4 ;!/* 0010nnnnmmmm0000 mov.b <REG_M>,@<REG_N>*/{"mov.b",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b @(8,r5),R0 ;!/* 10000100mmmmi4*1 mov.b @(<disp>,<REG_M>),R0*/{"mov.b",{A_DISP_REG_M,A_R0},{HEX_8,HEX_4,REG_M,IMM0_4}, arch_sh_up}
+ mov.b @(8,GBR),R0 ;!/* 11000100i8*1.... mov.b @(<disp>,GBR),R0*/{"mov.b",{A_DISP_GBR,A_R0},{HEX_C,HEX_4,IMM0_8}, arch_sh_up}
+ mov.b @(R0,r5),r4 ;!/* 0000nnnnmmmm1100 mov.b @(R0,<REG_M>),<REG_N>*/{"mov.b",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_C}, arch_sh_up}
+ mov.b @r5+,r4 ;!/* 0110nnnnmmmm0100 mov.b @<REG_M>+,<REG_N>*/{"mov.b",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b @r5,r4 ;!/* 0110nnnnmmmm0000 mov.b @<REG_M>,<REG_N>*/{"mov.b",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b R0,@(8,r5) ;!/* 10000000mmmmi4*1 mov.b R0,@(<disp>,<REG_M>)*/{"mov.b",{A_R0,A_DISP_REG_M},{HEX_8,HEX_0,REG_M,IMM1_4}, arch_sh_up}
+ mov.b R0,@(8,GBR) ;!/* 11000000i8*1.... mov.b R0,@(<disp>,GBR)*/{"mov.b",{A_R0,A_DISP_GBR},{HEX_C,HEX_0,IMM1_8}, arch_sh_up}
+ mov.b R0,@r4+ ;!/* 0100nnnn10001011 mov.b R0,@<REG_N>+ */{"mov.b",{A_R0,A_INC_N},{HEX_4,REG_N,HEX_8,HEX_B}, arch_sh2a_nofpu_up}
+ mov.b @-r5,R0 ;!/* 0100nnnn11001011 mov.b @-<REG_M>,R0 */{"mov.b",{A_DEC_M,A_R0},{HEX_4,REG_M,HEX_C,HEX_B}, arch_sh2a_nofpu_up}
+ mov.b r5,@(2048,r4) ;!/* 0011nnnnmmmm0001 0000dddddddddddd mov.b <REG_M>,@(<DISP12>,<REG_N>) */ {"mov.b",{A_REG_M,A_DISP_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_0,DISP1_12}, arch_sh2a_nofpu_up | arch_op32}
+ mov.b @(2048,r5),r4 ;!/* 0011nnnnmmmm0001 0100dddddddddddd mov.b @(<DISP12>,<REG_M>),<REG_N> */ {"mov.b",{A_DISP_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_4,DISP0_12}, arch_sh2a_nofpu_up | arch_op32}
+ mov.l r5,@(8,r4) ;!/* 0001nnnnmmmmi4*4 mov.l <REG_M>,@(<disp>,<REG_N>)*/{"mov.l",{ A_REG_M,A_DISP_REG_N},{HEX_1,REG_N,REG_M,IMM1_4BY4}, arch_sh_up}
+ mov.l r5,@(R0,r4) ;!/* 0000nnnnmmmm0110 mov.l <REG_M>,@(R0,<REG_N>)*/{"mov.l",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@-r4 ;!/* 0010nnnnmmmm0110 mov.l <REG_M>,@-<REG_N>*/{"mov.l",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@r4 ;!/* 0010nnnnmmmm0010 mov.l <REG_M>,@<REG_N>*/{"mov.l",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l @(8,r5),r4 ;!/* 0101nnnnmmmmi4*4 mov.l @(<disp>,<REG_M>),<REG_N>*/{"mov.l",{A_DISP_REG_M,A_REG_N},{HEX_5,REG_N,REG_M,IMM0_4BY4}, arch_sh_up}
+ mov.l @(8,GBR),R0 ;!/* 11000110i8*4.... mov.l @(<disp>,GBR),R0*/{"mov.l",{A_DISP_GBR,A_R0},{HEX_C,HEX_6,IMM0_8BY4}, arch_sh_up}
+ .align 2
+ mov.l @(8,PC),r4 ;!/* 1101nnnni8p4.... mov.l @(<disp>,PC),<REG_N>*/{"mov.l",{A_DISP_PC,A_REG_N},{HEX_D,REG_N,PCRELIMM_8BY4}, arch_sh_up}
+ mov.l @(R0,r5),r4 ;!/* 0000nnnnmmmm1110 mov.l @(R0,<REG_M>),<REG_N>*/{"mov.l",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mov.l @r5+,r4 ;!/* 0110nnnnmmmm0110 mov.l @<REG_M>+,<REG_N>*/{"mov.l",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l @r5,r4 ;!/* 0110nnnnmmmm0010 mov.l @<REG_M>,<REG_N>*/{"mov.l",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l R0,@(8,GBR) ;!/* 11000010i8*4.... mov.l R0,@(<disp>,GBR)*/{"mov.l",{A_R0,A_DISP_GBR},{HEX_C,HEX_2,IMM1_8BY4}, arch_sh_up}
+ mov.l R0,@r4+ ;!/* 0100nnnn10101011 mov.l R0,@<REG_N>+ */{"mov.l",{A_R0,A_INC_N},{HEX_4,REG_N,HEX_A,HEX_B}, arch_sh2a_nofpu_up}
+ mov.l @-r5,R0 ;!/* 0100nnnn11001011 mov.l @-<REG_M>,R0 */{"mov.l",{A_DEC_M,A_R0},{HEX_4,REG_M,HEX_E,HEX_B}, arch_sh2a_nofpu_up}
+ mov.l r5,@(2048,r4) ;!/* 0011nnnnmmmm0001 0010dddddddddddd mov.l <REG_M>,@(<DISP12>,<REG_N>) */ {"mov.l",{A_REG_M,A_DISP_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_2,DISP1_12BY4}, arch_sh2a_nofpu_up | arch_op32}
+ mov.l @(2048,r5),r4 ;!/* 0011nnnnmmmm0001 0110dddddddddddd mov.l @(<DISP12>,<REG_M>),<REG_N> */ {"mov.l",{A_DISP_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_6,DISP0_12BY4}, arch_sh2a_nofpu_up | arch_op32}
+ mov.w r5,@(R0,r4) ;!/* 0000nnnnmmmm0101 mov.w <REG_M>,@(R0,<REG_N>)*/{"mov.w",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@-r4 ;!/* 0010nnnnmmmm0101 mov.w <REG_M>,@-<REG_N>*/{"mov.w",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@r4 ;!/* 0010nnnnmmmm0001 mov.w <REG_M>,@<REG_N>*/{"mov.w",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w @(8,r5),R0 ;!/* 10000101mmmmi4*2 mov.w @(<disp>,<REG_M>),R0*/{"mov.w",{A_DISP_REG_M,A_R0},{HEX_8,HEX_5,REG_M,IMM0_4BY2}, arch_sh_up}
+ mov.w @(8,GBR),R0 ;!/* 11000101i8*2.... mov.w @(<disp>,GBR),R0*/{"mov.w",{A_DISP_GBR,A_R0},{HEX_C,HEX_5,IMM0_8BY2}, arch_sh_up}
+ mov.w @(8,PC),r4 ;!/* 1001nnnni8p2.... mov.w @(<disp>,PC),<REG_N>*/{"mov.w",{A_DISP_PC,A_REG_N},{HEX_9,REG_N,PCRELIMM_8BY2}, arch_sh_up}
+ mov.w @(R0,r5),r4 ;!/* 0000nnnnmmmm1101 mov.w @(R0,<REG_M>),<REG_N>*/{"mov.w",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_D}, arch_sh_up}
+ mov.w @r5+,r4 ;!/* 0110nnnnmmmm0101 mov.w @<REG_M>+,<REG_N>*/{"mov.w",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w @r5,r4 ;!/* 0110nnnnmmmm0001 mov.w @<REG_M>,<REG_N>*/{"mov.w",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w R0,@(8,r5) ;!/* 10000001mmmmi4*2 mov.w R0,@(<disp>,<REG_M>)*/{"mov.w",{A_R0,A_DISP_REG_M},{HEX_8,HEX_1,REG_M,IMM1_4BY2}, arch_sh_up}
+ mov.w R0,@(8,GBR) ;!/* 11000001i8*2.... mov.w R0,@(<disp>,GBR)*/{"mov.w",{A_R0,A_DISP_GBR},{HEX_C,HEX_1,IMM1_8BY2}, arch_sh_up}
+ mov.w R0,@r4+ ;!/* 0100nnnn10011011 mov.w R0,@<REG_N>+ */{"mov.w",{A_R0,A_INC_N},{HEX_4,REG_N,HEX_9,HEX_B}, arch_sh2a_nofpu_up}
+ mov.w @-r5,R0 ;!/* 0100nnnn11011011 mov.w @-<REG_M>,R0 */{"mov.w",{A_DEC_M,A_R0},{HEX_4,REG_M,HEX_D,HEX_B}, arch_sh2a_nofpu_up}
+ mov.w r5,@(2048,r4) ;!/* 0011nnnnmmmm0001 0001dddddddddddd mov.w <REG_M>,@(<DISP12>,<REG_N>) */ {"mov.w",{A_REG_M,A_DISP_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_1,DISP1_12BY2}, arch_sh2a_nofpu_up | arch_op32}
+ mov.w @(2048,r5),r4 ;!/* 0011nnnnmmmm0001 0101dddddddddddd mov.w @(<DISP12>,<REG_M>),<REG_N> */ {"mov.w",{A_DISP_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_5,DISP0_12BY2}, arch_sh2a_nofpu_up | arch_op32}
+ .align 2
+ mova @(8,PC),R0 ;!/* 11000111i8p4.... mova @(<disp>,PC),R0*/{"mova",{A_DISP_PC,A_R0},{HEX_C,HEX_7,PCRELIMM_8BY4}, arch_sh_up}
+ movt r4 ;!/* 0000nnnn00101001 movt <REG_N> */{"movt",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ muls.w r5,r4 ;!/* 0010nnnnmmmm1111 muls.w <REG_M>,<REG_N>*/{"muls.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ muls r5,r4 ;!/* 0010nnnnmmmm1111 muls <REG_M>,<REG_N>*/{"muls",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mul.l r5,r4 ;!/* 0000nnnnmmmm0111 mul.l <REG_M>,<REG_N>*/{"mul.l",{ A_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_7}, arch_sh2_up}
+ mulu.w r5,r4 ;!/* 0010nnnnmmmm1110 mulu.w <REG_M>,<REG_N>*/{"mulu.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mulu r5,r4 ;!/* 0010nnnnmmmm1110 mulu <REG_M>,<REG_N>*/{"mulu",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ neg r5,r4 ;!/* 0110nnnnmmmm1011 neg <REG_M>,<REG_N> */{"neg",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_B}, arch_sh_up}
+ negc r5,r4 ;!/* 0110nnnnmmmm1010 negc <REG_M>,<REG_N>*/{"negc",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_A}, arch_sh_up}
+ nop ;!/* 0000000000001001 nop */{"nop",{0},{HEX_0,HEX_0,HEX_0,HEX_9}, arch_sh_up}
+ not r5,r4 ;!/* 0110nnnnmmmm0111 not <REG_M>,<REG_N> */{"not",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_7}, arch_sh_up}
+ or #4,R0 ;!/* 11001011i8*1.... or #<imm>,R0 */{"or",{A_IMM,A_R0},{HEX_C,HEX_B,IMM0_8}, arch_sh_up}
+ or r5,r4 ;!/* 0010nnnnmmmm1011 or <REG_M>,<REG_N> */{"or",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_B}, arch_sh_up}
+ or.b #4,@(R0,GBR) ;!/* 11001111i8*1.... or.b #<imm>,@(R0,GBR)*/{"or.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_F,IMM0_8}, arch_sh_up}
+ pref @r4 ;!/* 0000nnnn10000011 pref @<REG_N> */{"pref",{A_IND_N},{HEX_0,REG_N,HEX_8,HEX_3}, arch_sh2a_nofpu_or_sh4_nommu_nofpu_up}
+ rotcl r4 ;!/* 0100nnnn00100100 rotcl <REG_N> */{"rotcl",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_4}, arch_sh_up}
+ rotcr r4 ;!/* 0100nnnn00100101 rotcr <REG_N> */{"rotcr",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_5}, arch_sh_up}
+ rotl r4 ;!/* 0100nnnn00000100 rotl <REG_N> */{"rotl",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_4}, arch_sh_up}
+ rotr r4 ;!/* 0100nnnn00000101 rotr <REG_N> */{"rotr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_5}, arch_sh_up}
+ rte ;!/* 0000000000101011 rte */{"rte",{0},{HEX_0,HEX_0,HEX_2,HEX_B}, arch_sh_up}
+ rts ;!/* 0000000000001011 rts */{"rts",{0},{HEX_0,HEX_0,HEX_0,HEX_B}, arch_sh_up}
+ sets ;!/* 0000000001011000 sets */{"sets",{0},{HEX_0,HEX_0,HEX_5,HEX_8}, arch_sh_up}
+ sett ;!/* 0000000000011000 sett */{"sett",{0},{HEX_0,HEX_0,HEX_1,HEX_8}, arch_sh_up}
+ shad r5,r4 ;!/* 0100nnnnmmmm1100 shad <REG_M>,<REG_N>*/{"shad",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_C}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shld r5,r4 ;!/* 0100nnnnmmmm1101 shld <REG_M>,<REG_N>*/{"shld",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_D}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shal r4 ;!/* 0100nnnn00100000 shal <REG_N> */{"shal",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_0}, arch_sh_up}
+ shar r4 ;!/* 0100nnnn00100001 shar <REG_N> */{"shar",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_1}, arch_sh_up}
+ shll r4 ;!/* 0100nnnn00000000 shll <REG_N> */{"shll",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_0}, arch_sh_up}
+ shll16 r4 ;!/* 0100nnnn00101000 shll16 <REG_N> */{"shll16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_8}, arch_sh_up}
+ shll2 r4 ;!/* 0100nnnn00001000 shll2 <REG_N> */{"shll2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_8}, arch_sh_up}
+ shll8 r4 ;!/* 0100nnnn00011000 shll8 <REG_N> */{"shll8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_8}, arch_sh_up}
+ shlr r4 ;!/* 0100nnnn00000001 shlr <REG_N> */{"shlr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_1}, arch_sh_up}
+ shlr16 r4 ;!/* 0100nnnn00101001 shlr16 <REG_N> */{"shlr16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ shlr2 r4 ;!/* 0100nnnn00001001 shlr2 <REG_N> */{"shlr2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_9}, arch_sh_up}
+ shlr8 r4 ;!/* 0100nnnn00011001 shlr8 <REG_N> */{"shlr8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_9}, arch_sh_up}
+ sleep ;!/* 0000000000011011 sleep */{"sleep",{0},{HEX_0,HEX_0,HEX_1,HEX_B}, arch_sh_up}
+ stc SR,r4 ;!/* 0000nnnn00000010 stc SR,<REG_N> */{"stc",{A_SR,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ stc GBR,r4 ;!/* 0000nnnn00010010 stc GBR,<REG_N> */{"stc",{A_GBR,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ stc VBR,r4 ;!/* 0000nnnn00100010 stc VBR,<REG_N> */{"stc",{A_VBR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ stc TBR,r4 ;!/* 0000nnnn01001010 stc TBR,<REG_N> */ {"stc",{A_TBR,A_REG_N},{HEX_0,REG_N,HEX_4,HEX_A}, arch_sh2a_nofpu_up}
+ stc.l SR,@-r4 ;!/* 0100nnnn00000011 stc.l SR,@-<REG_N> */{"stc.l",{A_SR,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_3}, arch_sh_up}
+ stc.l VBR,@-r4 ;!/* 0100nnnn00100011 stc.l VBR,@-<REG_N> */{"stc.l",{A_VBR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_3}, arch_sh_up}
+ stc.l GBR,@-r4 ;!/* 0100nnnn00010011 stc.l GBR,@-<REG_N> */{"stc.l",{A_GBR,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_3}, arch_sh_up}
+ sts MACH,r4 ;!/* 0000nnnn00001010 sts MACH,<REG_N> */{"sts",{A_MACH,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ sts MACL,r4 ;!/* 0000nnnn00011010 sts MACL,<REG_N> */{"sts",{A_MACL,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ sts PR,r4 ;!/* 0000nnnn00101010 sts PR,<REG_N> */{"sts",{A_PR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ sts FPUL,r4 ;!/* 0000nnnn01011010 sts FPUL,<REG_N> */{"sts",{FPUL_M,A_REG_N},{HEX_0,REG_N,HEX_5,HEX_A}, arch_sh2e_up}
+ sts FPSCR,r4 ;!/* 0000nnnn01101010 sts FPSCR,<REG_N> */{"sts",{FPSCR_M,A_REG_N},{HEX_0,REG_N,HEX_6,HEX_A}, arch_sh2e_up}
+ sts.l MACH,@-r4 ;!/* 0100nnnn00000010 sts.l MACH,@-<REG_N>*/{"sts.l",{A_MACH,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ sts.l MACL,@-r4 ;!/* 0100nnnn00010010 sts.l MACL,@-<REG_N>*/{"sts.l",{A_MACL,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ sts.l PR,@-r4 ;!/* 0100nnnn00100010 sts.l PR,@-<REG_N> */{"sts.l",{A_PR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ sts.l FPUL,@-r4 ;!/* 0100nnnn01010010 sts.l FPUL,@-<REG_N>*/{"sts.l",{FPUL_M,A_DEC_N},{HEX_4,REG_N,HEX_5,HEX_2}, arch_sh2e_up}
+ sts.l FPSCR,@-r4 ;!/* 0100nnnn01100010 sts.l FPSCR,@-<REG_N>*/{"sts.l",{FPSCR_M,A_DEC_N},{HEX_4,REG_N,HEX_6,HEX_2}, arch_sh2e_up}
+ sub r5,r4 ;!/* 0011nnnnmmmm1000 sub <REG_M>,<REG_N> */{"sub",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_8}, arch_sh_up}
+ subc r5,r4 ;!/* 0011nnnnmmmm1010 subc <REG_M>,<REG_N>*/{"subc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_A}, arch_sh_up}
+ subv r5,r4 ;!/* 0011nnnnmmmm1011 subv <REG_M>,<REG_N>*/{"subv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_B}, arch_sh_up}
+ swap.b r5,r4 ;!/* 0110nnnnmmmm1000 swap.b <REG_M>,<REG_N>*/{"swap.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_8}, arch_sh_up}
+ swap.w r5,r4 ;!/* 0110nnnnmmmm1001 swap.w <REG_M>,<REG_N>*/{"swap.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_9}, arch_sh_up}
+ tas.b @r4 ;!/* 0100nnnn00011011 tas.b @<REG_N> */{"tas.b",{A_IND_N},{HEX_4,REG_N,HEX_1,HEX_B}, arch_sh_up}
+ trapa #4 ;!/* 11000011i8*1.... trapa #<imm> */{"trapa",{A_IMM},{HEX_C,HEX_3,IMM0_8}, arch_sh_up}
+ tst #4,R0 ;!/* 11001000i8*1.... tst #<imm>,R0 */{"tst",{A_IMM,A_R0},{HEX_C,HEX_8,IMM0_8}, arch_sh_up}
+ tst r5,r4 ;!/* 0010nnnnmmmm1000 tst <REG_M>,<REG_N> */{"tst",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_8}, arch_sh_up}
+ tst.b #4,@(R0,GBR) ;!/* 11001100i8*1.... tst.b #<imm>,@(R0,GBR)*/{"tst.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_C,IMM0_8}, arch_sh_up}
+ xor #4,R0 ;!/* 11001010i8*1.... xor #<imm>,R0 */{"xor",{A_IMM,A_R0},{HEX_C,HEX_A,IMM0_8}, arch_sh_up}
+ xor r5,r4 ;!/* 0010nnnnmmmm1010 xor <REG_M>,<REG_N> */{"xor",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_A}, arch_sh_up}
+ xor.b #4,@(R0,GBR) ;!/* 11001110i8*1.... xor.b #<imm>,@(R0,GBR)*/{"xor.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_E,IMM0_8}, arch_sh_up}
+ xtrct r5,r4 ;!/* 0010nnnnmmmm1101 xtrct <REG_M>,<REG_N>*/{"xtrct",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_D}, arch_sh_up}
+ dt r4 ;!/* 0100nnnn00010000 dt <REG_N> */{"dt",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_0}, arch_sh2_up}
+ dmuls.l r5,r4 ;!/* 0011nnnnmmmm1101 dmuls.l <REG_M>,<REG_N>*/{"dmuls.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_D}, arch_sh2_up}
+ dmulu.l r5,r4 ;!/* 0011nnnnmmmm0101 dmulu.l <REG_M>,<REG_N>*/{"dmulu.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_5}, arch_sh2_up}
+ mac.l @r5+,@r4+ ;!/* 0000nnnnmmmm1111 mac.l @<REG_M>+,@<REG_N>+*/{"mac.l",{A_INC_M,A_INC_N},{HEX_0,REG_N,REG_M,HEX_F}, arch_sh2_up}
+ braf r4 ;!/* 0000nnnn00100011 braf <REG_N> */{"braf",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_3}, arch_sh2_up}
+ bsrf r4 ;!/* 0000nnnn00000011 bsrf <REG_N> */{"bsrf",{A_REG_N},{HEX_0,REG_N,HEX_0,HEX_3}, arch_sh2_up}
+ fabs fr1 ;!/* 1111nnnn01011101 fabs <F_REG_N> */{"fabs",{F_REG_N},{HEX_F,REG_N,HEX_5,HEX_D}, arch_sh2e_up}
+ fabs dr2 ;!/* 1111nnn001011101 fabs <D_REG_N> */{"fabs",{D_REG_N},{HEX_F,REG_N,HEX_5,HEX_D}, arch_sh2a_or_sh4_up}
+ fadd fr2,fr1 ;!/* 1111nnnnmmmm0000 fadd <F_REG_M>,<F_REG_N>*/{"fadd",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_0}, arch_sh2e_up}
+ fadd dr4,dr2 ;!/* 1111nnn0mmm00000 fadd <D_REG_M>,<D_REG_N>*/{"fadd",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_0}, arch_sh2a_or_sh4_up}
+ fcmp/eq fr2,fr1 ;!/* 1111nnnnmmmm0100 fcmp/eq <F_REG_M>,<F_REG_N>*/{"fcmp/eq",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_4}, arch_sh2e_up}
+ fcmp/eq dr4,dr2 ;!/* 1111nnn0mmm00100 fcmp/eq <D_REG_M>,<D_REG_N>*/{"fcmp/eq",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_4}, arch_sh2a_or_sh4_up}
+ fcmp/gt fr2,fr1 ;!/* 1111nnnnmmmm0101 fcmp/gt <F_REG_M>,<F_REG_N>*/{"fcmp/gt",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_5}, arch_sh2e_up}
+ fcmp/gt dr4,dr2 ;!/* 1111nnn0mmm00101 fcmp/gt <D_REG_M>,<D_REG_N>*/{"fcmp/gt",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_5}, arch_sh2a_or_sh4_up}
+ fcnvds dr2,FPUL ;!/* 1111nnn010111101 fcnvds <D_REG_N>,FPUL*/{"fcnvds",{D_REG_N,FPUL_M},{HEX_F,REG_N_D,HEX_B,HEX_D}, arch_sh2a_or_sh4_up}
+ fcnvsd FPUL,dr2 ;!/* 1111nnn010101101 fcnvsd FPUL,<D_REG_N>*/{"fcnvsd",{FPUL_M,D_REG_N},{HEX_F,REG_N_D,HEX_A,HEX_D}, arch_sh2a_or_sh4_up}
+ fdiv fr2,fr1 ;!/* 1111nnnnmmmm0011 fdiv <F_REG_M>,<F_REG_N>*/{"fdiv",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_3}, arch_sh2e_up}
+ fdiv dr4,dr2 ;!/* 1111nnn0mmm00011 fdiv <D_REG_M>,<D_REG_N>*/{"fdiv",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_3}, arch_sh2a_or_sh4_up}
+ fldi0 fr1 ;!/* 1111nnnn10001101 fldi0 <F_REG_N> */{"fldi0",{F_REG_N},{HEX_F,REG_N,HEX_8,HEX_D}, arch_sh2e_up}
+ fldi1 fr1 ;!/* 1111nnnn10011101 fldi1 <F_REG_N> */{"fldi1",{F_REG_N},{HEX_F,REG_N,HEX_9,HEX_D}, arch_sh2e_up}
+ flds fr1,FPUL ;!/* 1111nnnn00011101 flds <F_REG_N>,FPUL*/{"flds",{F_REG_N,FPUL_M},{HEX_F,REG_N,HEX_1,HEX_D}, arch_sh2e_up}
+ float FPUL,fr1 ;!/* 1111nnnn00101101 float FPUL,<F_REG_N>*/{"float",{FPUL_M,F_REG_N},{HEX_F,REG_N,HEX_2,HEX_D}, arch_sh2e_up}
+ float FPUL,dr2 ;!/* 1111nnn000101101 float FPUL,<D_REG_N>*/{"float",{FPUL_M,D_REG_N},{HEX_F,REG_N,HEX_2,HEX_D}, arch_sh2a_or_sh4_up}
+ fmac FR0,fr2,fr1 ;!/* 1111nnnnmmmm1110 fmac FR0,<F_REG_M>,<F_REG_N>*/{"fmac",{F_FR0,F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_E}, arch_sh2e_up}
+ fmov fr2,fr1 ;!/* 1111nnnnmmmm1100 fmov <F_REG_M>,<F_REG_N>*/{"fmov",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_C}, arch_sh2e_up}
+ fmov xd4,xd2 ;!/* 1111nnn1mmmm1100 fmov <DX_REG_M>,<DX_REG_N>*/{"fmov",{DX_REG_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_C}, arch_sh2a_or_sh4_up}
+ fmov @r5,fr1 ;!/* 1111nnnnmmmm1000 fmov @<REG_M>,<F_REG_N>*/{"fmov",{A_IND_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh2e_up}
+ fmov @r5,xd2 ;!/* 1111nnn1mmmm1000 fmov @<REG_M>,<DX_REG_N>*/{"fmov",{A_IND_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh2a_or_sh4_up}
+ fmov fr2,@r4 ;!/* 1111nnnnmmmm1010 fmov <F_REG_M>,@<REG_N>*/{"fmov",{F_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh2e_up}
+ fmov xd4,@r4 ;!/* 1111nnnnmmm11010 fmov <DX_REG_M>,@<REG_N>*/{"fmov",{DX_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh2a_or_sh4_up}
+ fmov @r5+,fr1 ;!/* 1111nnnnmmmm1001 fmov @<REG_M>+,<F_REG_N>*/{"fmov",{A_INC_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh2e_up}
+ fmov @r5+,xd2 ;!/* 1111nnn1mmmm1001 fmov @<REG_M>+,<DX_REG_N>*/{"fmov",{A_INC_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh2a_or_sh4_up}
+ fmov fr2,@-r4 ;!/* 1111nnnnmmmm1011 fmov <F_REG_M>,@-<REG_N>*/{"fmov",{F_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh2e_up}
+ fmov xd4,@-r4 ;!/* 1111nnnnmmm11011 fmov <DX_REG_M>,@-<REG_N>*/{"fmov",{DX_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh2a_or_sh4_up}
+ fmov @(R0,r5),fr1 ;!/* 1111nnnnmmmm0110 fmov @(R0,<REG_M>),<F_REG_N>*/{"fmov",{A_IND_R0_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh2e_up}
+ fmov @(R0,r5),xd2 ;!/* 1111nnn1mmmm0110 fmov @(R0,<REG_M>),<DX_REG_N>*/{"fmov",{A_IND_R0_REG_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh2a_or_sh4_up}
+ fmov fr2,@(R0,r4) ;!/* 1111nnnnmmmm0111 fmov <F_REG_M>,@(R0,<REG_N>)*/{"fmov",{F_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh2e_up}
+ fmov xd4,@(R0,r4) ;!/* 1111nnnnmmm10111 fmov <DX_REG_M>,@(R0,<REG_N>)*/{"fmov",{DX_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh2a_or_sh4_up}
+ fmov.d @r5,xd2 ;!/* 1111nnn1mmmm1000 fmov.d @<REG_M>,<DX_REG_N>*/{"fmov.d",{A_IND_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh2a_or_sh4_up}
+ fmov.d xd4,@r4 ;!/* 1111nnnnmmm11010 fmov.d <DX_REG_M>,@<REG_N>*/{"fmov.d",{DX_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh2a_or_sh4_up}
+ fmov.d @r5+,xd2 ;!/* 1111nnn1mmmm1001 fmov.d @<REG_M>+,<DX_REG_N>*/{"fmov.d",{A_INC_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh2a_or_sh4_up}
+ fmov.d xd4,@-r4 ;!/* 1111nnnnmmm11011 fmov.d <DX_REG_M>,@-<REG_N>*/{"fmov.d",{DX_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh2a_or_sh4_up}
+ fmov.d @(R0,r5),xd2 ;!/* 1111nnn1mmmm0110 fmov.d @(R0,<REG_M>),<DX_REG_N>*/{"fmov.d",{A_IND_R0_REG_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh2a_or_sh4_up}
+ fmov.d xd4,@(R0,r4) ;!/* 1111nnnnmmm10111 fmov.d <DX_REG_M>,@(R0,<REG_N>)*/{"fmov.d",{DX_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh2a_or_sh4_up}
+ fmov.s @r5,fr1 ;!/* 1111nnnnmmmm1000 fmov.s @<REG_M>,<F_REG_N>*/{"fmov.s",{A_IND_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh2e_up}
+ fmov.s fr2,@r4 ;!/* 1111nnnnmmmm1010 fmov.s <F_REG_M>,@<REG_N>*/{"fmov.s",{F_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh2e_up}
+ fmov.s @r5+,fr1 ;!/* 1111nnnnmmmm1001 fmov.s @<REG_M>+,<F_REG_N>*/{"fmov.s",{A_INC_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh2e_up}
+ fmov.s fr2,@-r4 ;!/* 1111nnnnmmmm1011 fmov.s <F_REG_M>,@-<REG_N>*/{"fmov.s",{F_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh2e_up}
+ fmov.s @(R0,r5),fr1 ;!/* 1111nnnnmmmm0110 fmov.s @(R0,<REG_M>),<F_REG_N>*/{"fmov.s",{A_IND_R0_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh2e_up}
+ fmov.s fr2,@(R0,r4) ;!/* 1111nnnnmmmm0111 fmov.s <F_REG_M>,@(R0,<REG_N>)*/{"fmov.s",{F_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh2e_up}
+ fmul fr2,fr1 ;!/* 1111nnnnmmmm0010 fmul <F_REG_M>,<F_REG_N>*/{"fmul",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_2}, arch_sh2e_up}
+ fmul dr4,dr2 ;!/* 1111nnn0mmm00010 fmul <D_REG_M>,<D_REG_N>*/{"fmul",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_2}, arch_sh2a_or_sh4_up}
+ fneg fr1 ;!/* 1111nnnn01001101 fneg <F_REG_N> */{"fneg",{F_REG_N},{HEX_F,REG_N,HEX_4,HEX_D}, arch_sh2e_up}
+ fneg dr2 ;!/* 1111nnn001001101 fneg <D_REG_N> */{"fneg",{D_REG_N},{HEX_F,REG_N,HEX_4,HEX_D}, arch_sh2a_or_sh4_up}
+ fschg ;!/* 1111001111111101 fschg */{"fschg",{0},{HEX_F,HEX_3,HEX_F,HEX_D}, arch_sh2a_or_sh4_up}
+ fsqrt fr1 ;!/* 1111nnnn01101101 fsqrt <F_REG_N> */{"fsqrt",{F_REG_N},{HEX_F,REG_N,HEX_6,HEX_D}, arch_sh2a_or_sh3e_up}
+ fsqrt dr2 ;!/* 1111nnn001101101 fsqrt <D_REG_N> */{"fsqrt",{D_REG_N},{HEX_F,REG_N,HEX_6,HEX_D}, arch_sh2a_or_sh4_up}
+ fsts FPUL,fr1 ;!/* 1111nnnn00001101 fsts FPUL,<F_REG_N>*/{"fsts",{FPUL_M,F_REG_N},{HEX_F,REG_N,HEX_0,HEX_D}, arch_sh2e_up}
+ fsub fr2,fr1 ;!/* 1111nnnnmmmm0001 fsub <F_REG_M>,<F_REG_N>*/{"fsub",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_1}, arch_sh2e_up}
+ fsub dr4,dr2 ;!/* 1111nnn0mmm00001 fsub <D_REG_M>,<D_REG_N>*/{"fsub",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_1}, arch_sh2a_or_sh4_up}
+ ftrc fr1,FPUL ;!/* 1111nnnn00111101 ftrc <F_REG_N>,FPUL*/{"ftrc",{F_REG_N,FPUL_M},{HEX_F,REG_N,HEX_3,HEX_D}, arch_sh2e_up}
+ ftrc dr2,FPUL ;!/* 1111nnnn00111101 ftrc <D_REG_N>,FPUL*/{"ftrc",{D_REG_N,FPUL_M},{HEX_F,REG_N,HEX_3,HEX_D}, arch_sh2a_or_sh4_up}
+ bclr #4, r4 ;!/* 10000110nnnn0iii bclr #<imm>, <REG_N> */ {"bclr",{A_IMM, A_REG_N},{HEX_8,HEX_6,REG_N,IMM0_3c}, arch_sh2a_nofpu_up}
+ bclr.b #4,@(2048,r4) ;!/* 0011nnnn0iii1001 0000dddddddddddd bclr.b #<imm>,@(<DISP12>,<REG_N>) */ {"bclr.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_0,DISP1_12}, arch_sh2a_nofpu_up | arch_op32}
+ bld #4, r4 ;!/* 10000111nnnn1iii bld #<imm>, <REG_N> */ {"bld",{A_IMM, A_REG_N},{HEX_8,HEX_7,REG_N,IMM0_3s}, arch_sh2a_nofpu_up}
+ bld.b #4,@(2048,r4) ;!/* 0011nnnn0iii1001 0011dddddddddddd bld.b #<imm>,@(<DISP12>,<REG_N>) */ {"bld.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_3,DISP1_12}, arch_sh2a_nofpu_up | arch_op32}
+ bset #4, r4 ;!/* 10000110nnnn1iii bset #<imm>, <REG_N> */ {"bset",{A_IMM, A_REG_N},{HEX_8,HEX_6,REG_N,IMM0_3s}, arch_sh2a_nofpu_up}
+ bset.b #4,@(2048,r4) ;!/* 0011nnnn0iii1001 0001dddddddddddd bset.b #<imm>,@(<DISP12>,<REG_N>) */ {"bset.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_1,DISP1_12}, arch_sh2a_nofpu_up | arch_op32}
+ bst #4, r4 ;!/* 10000111nnnn0iii bst #<imm>, <REG_N> */ {"bst",{A_IMM, A_REG_N},{HEX_8,HEX_7,REG_N,IMM0_3c}, arch_sh2a_nofpu_up}
+ bst.b #4,@(2048,r4) ;!/* 0011nnnn0iii1001 0010dddddddddddd bst.b #<imm>,@(<DISP12>,<REG_N>) */ {"bst.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_2,DISP1_12}, arch_sh2a_nofpu_up | arch_op32}
+ clips.b r4 ;!/* 0100nnnn10010001 clips.b <REG_N> */ {"clips.b",{A_REG_N},{HEX_4,REG_N,HEX_9,HEX_1}, arch_sh2a_nofpu_up}
+ clips.w r4 ;!/* 0100nnnn10010101 clips.w <REG_N> */ {"clips.w",{A_REG_N},{HEX_4,REG_N,HEX_9,HEX_5}, arch_sh2a_nofpu_up}
+ clipu.b r4 ;!/* 0100nnnn10000001 clipu.b <REG_N> */ {"clipu.b",{A_REG_N},{HEX_4,REG_N,HEX_8,HEX_1}, arch_sh2a_nofpu_up}
+ clipu.w r4 ;!/* 0100nnnn10000101 clipu.w <REG_N> */ {"clipu.w",{A_REG_N},{HEX_4,REG_N,HEX_8,HEX_5}, arch_sh2a_nofpu_up}
+ divs R0,r4 ;!/* 0100nnnn10010100 divs R0,<REG_N> */ {"divs",{A_R0,A_REG_N},{HEX_4,REG_N,HEX_9,HEX_4}, arch_sh2a_nofpu_up}
+ divu R0,r4 ;!/* 0100nnnn10000100 divu R0,<REG_N> */ {"divu",{A_R0,A_REG_N},{HEX_4,REG_N,HEX_8,HEX_4}, arch_sh2a_nofpu_up}
+ jsr/n @r5 ;!/* 0100mmmm01001011 jsr/n @<REG_M> */ {"jsr/n",{A_IND_M},{HEX_4,REG_M,HEX_4,HEX_B}, arch_sh2a_nofpu_up}
+ jsr/n @@(8,TBR) ;!/* 10000011dddddddd jsr/n @@(<disp>,TBR) */ {"jsr/n",{A_DISP2_TBR},{HEX_8,HEX_3,IMM0_8BY4}, arch_sh2a_nofpu_up}
+ ldbank @r5,R0 ;!/* 0100mmmm11100101 ldbank @<REG_M>,R0 */ {"ldbank",{A_IND_M,A_R0},{HEX_4,REG_M,HEX_E,HEX_5}, arch_sh2a_nofpu_up}
+ movml.l r5,@-R15 ;!/* 0100mmmm11110001 movml.l <REG_M>,@-R15 */ {"movml.l",{A_REG_M,A_DEC_R15},{HEX_4,REG_M,HEX_F,HEX_1}, arch_sh2a_nofpu_up}
+ movml.l @R15+,r5 ;!/* 0100mmmm11110101 movml.l @R15+,<REG_M> */ {"movml.l",{A_INC_R15,A_REG_M},{HEX_4,REG_M,HEX_F,HEX_5}, arch_sh2a_nofpu_up}
+ movml.l r5,@-R15 ;!/* 0100mmmm11110000 movml.l <REG_M>,@-R15 */ {"movmu.l",{A_REG_M,A_DEC_R15},{HEX_4,REG_M,HEX_F,HEX_0}, arch_sh2a_nofpu_up}
+ movml.l @R15+,r5 ;!/* 0100mmmm11110100 movml.l @R15+,<REG_M> */ {"movmu.l",{A_INC_R15,A_REG_M},{HEX_4,REG_M,HEX_F,HEX_4}, arch_sh2a_nofpu_up}
+ movrt r4 ;!/* 0000nnnn00111001 movrt <REG_N> */ {"movrt",{A_REG_N},{HEX_0,REG_N,HEX_3,HEX_9}, arch_sh2a_nofpu_up}
+ mulr R0,r4 ;!/* 0100nnnn10000000 mulr R0,<REG_N> */ {"mulr",{A_R0,A_REG_N},{HEX_4,REG_N,HEX_8,HEX_0}, arch_sh2a_nofpu_up}
+ nott ;!/* 0000000001101000 nott */ {"nott",{A_END},{HEX_0,HEX_0,HEX_6,HEX_8}, arch_sh2a_nofpu_up}
+ resbank ;!/* 0000000001011011 resbank */ {"resbank",{A_END},{HEX_0,HEX_0,HEX_5,HEX_B}, arch_sh2a_nofpu_up}
+ rts/n ;!/* 0000000001101011 rts/n */ {"rts/n",{A_END},{HEX_0,HEX_0,HEX_6,HEX_B}, arch_sh2a_nofpu_up}
+ rtv/n r5 ;!/* 0000mmmm01111011 rtv/n <REG_M>*/ {"rtv/n",{A_REG_M},{HEX_0,REG_M,HEX_7,HEX_B}, arch_sh2a_nofpu_up}
+ stbank R0,@r4 ;!/* 0100nnnn11100001 stbank R0,@<REG_N>*/ {"stbank",{A_R0,A_IND_N},{HEX_4,REG_N,HEX_E,HEX_1}, arch_sh2a_nofpu_up}
+ band.b #4,@(2048,r4) ;!/* 0011nnnn0iii1001 0100dddddddddddd band.b #<imm>,@(<DISP12>,<REG_N>) */ {"band.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_4,DISP1_12}, arch_sh2a_nofpu_up | arch_op32}
+ bandnot.b #4,@(2048,r4) ;!/* 0011nnnn0iii1001 1100dddddddddddd bandnot.b #<imm>,@(<DISP12>,<REG_N>) */ {"bandnot.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_C,DISP1_12}, arch_sh2a_nofpu_up | arch_op32}
+ bldnot.b #4,@(2048,r4) ;!/* 0011nnnn0iii1001 1011dddddddddddd bldnot.b #<imm>,@(<DISP12>,<REG_N>) */ {"bldnot.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_B,DISP1_12}, arch_sh2a_nofpu_up | arch_op32}
+ bor.b #4,@(2048,r4) ;!/* 0011nnnn0iii1001 0101dddddddddddd bor.b #<imm>,@(<DISP12>,<REG_N>) */ {"bor.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_5,DISP1_12}, arch_sh2a_nofpu_up | arch_op32}
+ bornot.b #4,@(2048,r4) ;!/* 0011nnnn0iii1001 1101dddddddddddd bornot.b #<imm>,@(<DISP12>,<REG_N>) */ {"bornot.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_D,DISP1_12}, arch_sh2a_nofpu_up | arch_op32}
+ bxor.b #4,@(2048,r4) ;!/* 0011nnnn0iii1001 0110dddddddddddd bxor.b #<imm>,@(<DISP12>,<REG_N>) */ {"bxor.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_6,DISP1_12}, arch_sh2a_nofpu_up | arch_op32}
+ movi20 #4,r4 ;!/* 0000nnnniiii0000 iiiiiiiiiiiiiiii movi20 #<imm>,<REG_N> */ {"movi20",{A_IMM,A_REG_N},{HEX_0,REG_N,IMM0_20_4,HEX_0,IMM0_20}, arch_sh2a_nofpu_up | arch_op32}
+ movi20s #1024,r4 ;!/* 0000nnnniiii0001 iiiiiiiiiiiiiiii movi20s #<imm>,<REG_N> */ {"movi20s",{A_IMM,A_REG_N},{HEX_0,REG_N,IMM0_20_4,HEX_1,IMM0_20BY8}, arch_sh2a_nofpu_up | arch_op32}
+ movu.b @(2048,r5),r4 ;!/* 0011nnnnmmmm0001 1000dddddddddddd movu.b @(<DISP12>,<REG_M>),<REG_N> */ {"movu.b",{A_DISP_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_8,DISP0_12}, arch_sh2a_nofpu_up | arch_op32}
+ movu.w @(2048,r5),r4 ;!/* 0011nnnnmmmm0001 1001dddddddddddd movu.w @(<DISP12>,<REG_M>),<REG_N> */ {"movu.w",{A_DISP_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_9,DISP0_12BY2}, arch_sh2a_nofpu_up | arch_op32}
diff --git a/binutils-2.21/ld/testsuite/ld-sh/arch/sh2e.s b/binutils-2.21/ld/testsuite/ld-sh/arch/sh2e.s
new file mode 100644
index 0000000..a62e3ab
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/arch/sh2e.s
@@ -0,0 +1,202 @@
+! Generated file. DO NOT EDIT.
+!
+! This file was generated by gas/testsuite/gas/sh/arch/arch.exp .
+! This file should contain every instruction valid on
+! architecture sh2e but no more.
+! If the tests are failing because the expected results
+! have changed then run 'make check' and copy the new file
+! from <objdir>/gas/testsuite/sh2e.s
+! to <srcdir>/gas/testsuite/gas/sh/arch/sh2e.s .
+! Make sure there are no unexpected or missing instructions.
+
+ .section .text
+sh2e:
+! Instructions introduced into sh2e
+ lds r4,FPUL ;!/* 0100nnnn01011010 lds <REG_N>,FPUL */{"lds",{A_REG_M,FPUL_N},{HEX_4,REG_M,HEX_5,HEX_A}, arch_sh2e_up}
+ lds r5,FPSCR ;!/* 0100nnnn01101010 lds <REG_M>,FPSCR */{"lds",{A_REG_M,FPSCR_N},{HEX_4,REG_M,HEX_6,HEX_A}, arch_sh2e_up}
+ lds.l @r5+,FPUL ;!/* 0100nnnn01010110 lds.l @<REG_M>+,FPUL*/{"lds.l",{A_INC_M,FPUL_N},{HEX_4,REG_M,HEX_5,HEX_6}, arch_sh2e_up}
+ lds.l @r5+,FPSCR ;!/* 0100nnnn01100110 lds.l @<REG_M>+,FPSCR*/{"lds.l",{A_INC_M,FPSCR_N},{HEX_4,REG_M,HEX_6,HEX_6}, arch_sh2e_up}
+ sts FPUL,r4 ;!/* 0000nnnn01011010 sts FPUL,<REG_N> */{"sts",{FPUL_M,A_REG_N},{HEX_0,REG_N,HEX_5,HEX_A}, arch_sh2e_up}
+ sts FPSCR,r4 ;!/* 0000nnnn01101010 sts FPSCR,<REG_N> */{"sts",{FPSCR_M,A_REG_N},{HEX_0,REG_N,HEX_6,HEX_A}, arch_sh2e_up}
+ sts.l FPUL,@-r4 ;!/* 0100nnnn01010010 sts.l FPUL,@-<REG_N>*/{"sts.l",{FPUL_M,A_DEC_N},{HEX_4,REG_N,HEX_5,HEX_2}, arch_sh2e_up}
+ sts.l FPSCR,@-r4 ;!/* 0100nnnn01100010 sts.l FPSCR,@-<REG_N>*/{"sts.l",{FPSCR_M,A_DEC_N},{HEX_4,REG_N,HEX_6,HEX_2}, arch_sh2e_up}
+ fabs fr1 ;!/* 1111nnnn01011101 fabs <F_REG_N> */{"fabs",{F_REG_N},{HEX_F,REG_N,HEX_5,HEX_D}, arch_sh2e_up}
+ fadd fr2,fr1 ;!/* 1111nnnnmmmm0000 fadd <F_REG_M>,<F_REG_N>*/{"fadd",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_0}, arch_sh2e_up}
+ fcmp/eq fr2,fr1 ;!/* 1111nnnnmmmm0100 fcmp/eq <F_REG_M>,<F_REG_N>*/{"fcmp/eq",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_4}, arch_sh2e_up}
+ fcmp/gt fr2,fr1 ;!/* 1111nnnnmmmm0101 fcmp/gt <F_REG_M>,<F_REG_N>*/{"fcmp/gt",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_5}, arch_sh2e_up}
+ fdiv fr2,fr1 ;!/* 1111nnnnmmmm0011 fdiv <F_REG_M>,<F_REG_N>*/{"fdiv",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_3}, arch_sh2e_up}
+ fldi0 fr1 ;!/* 1111nnnn10001101 fldi0 <F_REG_N> */{"fldi0",{F_REG_N},{HEX_F,REG_N,HEX_8,HEX_D}, arch_sh2e_up}
+ fldi1 fr1 ;!/* 1111nnnn10011101 fldi1 <F_REG_N> */{"fldi1",{F_REG_N},{HEX_F,REG_N,HEX_9,HEX_D}, arch_sh2e_up}
+ flds fr1,FPUL ;!/* 1111nnnn00011101 flds <F_REG_N>,FPUL*/{"flds",{F_REG_N,FPUL_M},{HEX_F,REG_N,HEX_1,HEX_D}, arch_sh2e_up}
+ float FPUL,fr1 ;!/* 1111nnnn00101101 float FPUL,<F_REG_N>*/{"float",{FPUL_M,F_REG_N},{HEX_F,REG_N,HEX_2,HEX_D}, arch_sh2e_up}
+ fmac FR0,fr2,fr1 ;!/* 1111nnnnmmmm1110 fmac FR0,<F_REG_M>,<F_REG_N>*/{"fmac",{F_FR0,F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_E}, arch_sh2e_up}
+ fmov fr2,fr1 ;!/* 1111nnnnmmmm1100 fmov <F_REG_M>,<F_REG_N>*/{"fmov",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_C}, arch_sh2e_up}
+ fmov @r5,fr1 ;!/* 1111nnnnmmmm1000 fmov @<REG_M>,<F_REG_N>*/{"fmov",{A_IND_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh2e_up}
+ fmov fr2,@r4 ;!/* 1111nnnnmmmm1010 fmov <F_REG_M>,@<REG_N>*/{"fmov",{F_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh2e_up}
+ fmov @r5+,fr1 ;!/* 1111nnnnmmmm1001 fmov @<REG_M>+,<F_REG_N>*/{"fmov",{A_INC_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh2e_up}
+ fmov fr2,@-r4 ;!/* 1111nnnnmmmm1011 fmov <F_REG_M>,@-<REG_N>*/{"fmov",{F_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh2e_up}
+ fmov @(R0,r5),fr1 ;!/* 1111nnnnmmmm0110 fmov @(R0,<REG_M>),<F_REG_N>*/{"fmov",{A_IND_R0_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh2e_up}
+ fmov fr2,@(R0,r4) ;!/* 1111nnnnmmmm0111 fmov <F_REG_M>,@(R0,<REG_N>)*/{"fmov",{F_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh2e_up}
+ fmov.s @r5,fr1 ;!/* 1111nnnnmmmm1000 fmov.s @<REG_M>,<F_REG_N>*/{"fmov.s",{A_IND_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh2e_up}
+ fmov.s fr2,@r4 ;!/* 1111nnnnmmmm1010 fmov.s <F_REG_M>,@<REG_N>*/{"fmov.s",{F_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh2e_up}
+ fmov.s @r5+,fr1 ;!/* 1111nnnnmmmm1001 fmov.s @<REG_M>+,<F_REG_N>*/{"fmov.s",{A_INC_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh2e_up}
+ fmov.s fr2,@-r4 ;!/* 1111nnnnmmmm1011 fmov.s <F_REG_M>,@-<REG_N>*/{"fmov.s",{F_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh2e_up}
+ fmov.s @(R0,r5),fr1 ;!/* 1111nnnnmmmm0110 fmov.s @(R0,<REG_M>),<F_REG_N>*/{"fmov.s",{A_IND_R0_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh2e_up}
+ fmov.s fr2,@(R0,r4) ;!/* 1111nnnnmmmm0111 fmov.s <F_REG_M>,@(R0,<REG_N>)*/{"fmov.s",{F_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh2e_up}
+ fmul fr2,fr1 ;!/* 1111nnnnmmmm0010 fmul <F_REG_M>,<F_REG_N>*/{"fmul",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_2}, arch_sh2e_up}
+ fneg fr1 ;!/* 1111nnnn01001101 fneg <F_REG_N> */{"fneg",{F_REG_N},{HEX_F,REG_N,HEX_4,HEX_D}, arch_sh2e_up}
+ fsts FPUL,fr1 ;!/* 1111nnnn00001101 fsts FPUL,<F_REG_N>*/{"fsts",{FPUL_M,F_REG_N},{HEX_F,REG_N,HEX_0,HEX_D}, arch_sh2e_up}
+ fsub fr2,fr1 ;!/* 1111nnnnmmmm0001 fsub <F_REG_M>,<F_REG_N>*/{"fsub",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_1}, arch_sh2e_up}
+ ftrc fr1,FPUL ;!/* 1111nnnn00111101 ftrc <F_REG_N>,FPUL*/{"ftrc",{F_REG_N,FPUL_M},{HEX_F,REG_N,HEX_3,HEX_D}, arch_sh2e_up}
+
+! Instructions inherited from ancestors: sh sh2
+ add #4,r4 ;!/* 0111nnnni8*1.... add #<imm>,<REG_N> */{"add",{A_IMM,A_REG_N},{HEX_7,REG_N,IMM0_8}, arch_sh_up}
+ add r5,r4 ;!/* 0011nnnnmmmm1100 add <REG_M>,<REG_N> */{"add",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_C}, arch_sh_up}
+ addc r5,r4 ;!/* 0011nnnnmmmm1110 addc <REG_M>,<REG_N>*/{"addc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_E}, arch_sh_up}
+ addv r5,r4 ;!/* 0011nnnnmmmm1111 addv <REG_M>,<REG_N>*/{"addv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_F}, arch_sh_up}
+ and #4,R0 ;!/* 11001001i8*1.... and #<imm>,R0 */{"and",{A_IMM,A_R0},{HEX_C,HEX_9,IMM0_8}, arch_sh_up}
+ and r5,r4 ;!/* 0010nnnnmmmm1001 and <REG_M>,<REG_N> */{"and",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_9}, arch_sh_up}
+ and.b #4,@(R0,GBR) ;!/* 11001101i8*1.... and.b #<imm>,@(R0,GBR)*/{"and.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_D,IMM0_8}, arch_sh_up}
+ bra .+8 ;!/* 1010i12......... bra <bdisp12> */{"bra",{A_BDISP12},{HEX_A,BRANCH_12}, arch_sh_up}
+ bsr .+8 ;!/* 1011i12......... bsr <bdisp12> */{"bsr",{A_BDISP12},{HEX_B,BRANCH_12}, arch_sh_up}
+ bt .+8 ;!/* 10001001i8p1.... bt <bdisp8> */{"bt",{A_BDISP8},{HEX_8,HEX_9,BRANCH_8}, arch_sh_up}
+ bf .+8 ;!/* 10001011i8p1.... bf <bdisp8> */{"bf",{A_BDISP8},{HEX_8,HEX_B,BRANCH_8}, arch_sh_up}
+ bt.s .+8 ;!/* 10001101i8p1.... bt.s <bdisp8> */{"bt.s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bt/s .+8 ;!/* 10001101i8p1.... bt/s <bdisp8> */{"bt/s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bf.s .+8 ;!/* 10001111i8p1.... bf.s <bdisp8> */{"bf.s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ bf/s .+8 ;!/* 10001111i8p1.... bf/s <bdisp8> */{"bf/s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ clrmac ;!/* 0000000000101000 clrmac */{"clrmac",{0},{HEX_0,HEX_0,HEX_2,HEX_8}, arch_sh_up}
+ clrs ;!/* 0000000001001000 clrs */{"clrs",{0},{HEX_0,HEX_0,HEX_4,HEX_8}, arch_sh_up}
+ clrt ;!/* 0000000000001000 clrt */{"clrt",{0},{HEX_0,HEX_0,HEX_0,HEX_8}, arch_sh_up}
+ cmp/eq #4,R0 ;!/* 10001000i8*1.... cmp/eq #<imm>,R0 */{"cmp/eq",{A_IMM,A_R0},{HEX_8,HEX_8,IMM0_8}, arch_sh_up}
+ cmp/eq r5,r4 ;!/* 0011nnnnmmmm0000 cmp/eq <REG_M>,<REG_N>*/{"cmp/eq",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_0}, arch_sh_up}
+ cmp/ge r5,r4 ;!/* 0011nnnnmmmm0011 cmp/ge <REG_M>,<REG_N>*/{"cmp/ge",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_3}, arch_sh_up}
+ cmp/gt r5,r4 ;!/* 0011nnnnmmmm0111 cmp/gt <REG_M>,<REG_N>*/{"cmp/gt",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_7}, arch_sh_up}
+ cmp/hi r5,r4 ;!/* 0011nnnnmmmm0110 cmp/hi <REG_M>,<REG_N>*/{"cmp/hi",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_6}, arch_sh_up}
+ cmp/hs r5,r4 ;!/* 0011nnnnmmmm0010 cmp/hs <REG_M>,<REG_N>*/{"cmp/hs",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_2}, arch_sh_up}
+ cmp/pl r4 ;!/* 0100nnnn00010101 cmp/pl <REG_N> */{"cmp/pl",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_5}, arch_sh_up}
+ cmp/pz r4 ;!/* 0100nnnn00010001 cmp/pz <REG_N> */{"cmp/pz",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_1}, arch_sh_up}
+ cmp/str r5,r4 ;!/* 0010nnnnmmmm1100 cmp/str <REG_M>,<REG_N>*/{"cmp/str",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_C}, arch_sh_up}
+ div0s r5,r4 ;!/* 0010nnnnmmmm0111 div0s <REG_M>,<REG_N>*/{"div0s",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_7}, arch_sh_up}
+ div0u ;!/* 0000000000011001 div0u */{"div0u",{0},{HEX_0,HEX_0,HEX_1,HEX_9}, arch_sh_up}
+ div1 r5,r4 ;!/* 0011nnnnmmmm0100 div1 <REG_M>,<REG_N>*/{"div1",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_4}, arch_sh_up}
+ exts.b r5,r4 ;!/* 0110nnnnmmmm1110 exts.b <REG_M>,<REG_N>*/{"exts.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_E}, arch_sh_up}
+ exts.w r5,r4 ;!/* 0110nnnnmmmm1111 exts.w <REG_M>,<REG_N>*/{"exts.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_F}, arch_sh_up}
+ extu.b r5,r4 ;!/* 0110nnnnmmmm1100 extu.b <REG_M>,<REG_N>*/{"extu.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_C}, arch_sh_up}
+ extu.w r5,r4 ;!/* 0110nnnnmmmm1101 extu.w <REG_M>,<REG_N>*/{"extu.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_D}, arch_sh_up}
+ jmp @r4 ;!/* 0100nnnn00101011 jmp @<REG_N> */{"jmp",{A_IND_N},{HEX_4,REG_N,HEX_2,HEX_B}, arch_sh_up}
+ jsr @r4 ;!/* 0100nnnn00001011 jsr @<REG_N> */{"jsr",{A_IND_N},{HEX_4,REG_N,HEX_0,HEX_B}, arch_sh_up}
+ ldc r4,SR ;!/* 0100nnnn00001110 ldc <REG_N>,SR */{"ldc",{A_REG_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_E}, arch_sh_up}
+ ldc r4,GBR ;!/* 0100nnnn00011110 ldc <REG_N>,GBR */{"ldc",{A_REG_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_E}, arch_sh_up}
+ ldc r4,VBR ;!/* 0100nnnn00101110 ldc <REG_N>,VBR */{"ldc",{A_REG_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_E}, arch_sh_up}
+ ldc.l @r4+,SR ;!/* 0100nnnn00000111 ldc.l @<REG_N>+,SR */{"ldc.l",{A_INC_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_7}, arch_sh_up}
+ ldc.l @r4+,GBR ;!/* 0100nnnn00010111 ldc.l @<REG_N>+,GBR */{"ldc.l",{A_INC_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_7}, arch_sh_up}
+ ldc.l @r4+,VBR ;!/* 0100nnnn00100111 ldc.l @<REG_N>+,VBR */{"ldc.l",{A_INC_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_7}, arch_sh_up}
+ lds r4,MACH ;!/* 0100nnnn00001010 lds <REG_N>,MACH */{"lds",{A_REG_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ lds r4,MACL ;!/* 0100nnnn00011010 lds <REG_N>,MACL */{"lds",{A_REG_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ lds r4,PR ;!/* 0100nnnn00101010 lds <REG_N>,PR */{"lds",{A_REG_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ lds.l @r4+,MACH ;!/* 0100nnnn00000110 lds.l @<REG_N>+,MACH*/{"lds.l",{A_INC_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_6}, arch_sh_up}
+ lds.l @r4+,MACL ;!/* 0100nnnn00010110 lds.l @<REG_N>+,MACL*/{"lds.l",{A_INC_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_6}, arch_sh_up}
+ lds.l @r4+,PR ;!/* 0100nnnn00100110 lds.l @<REG_N>+,PR */{"lds.l",{A_INC_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_6}, arch_sh_up}
+ mac.w @r5+,@r4+ ;!/* 0100nnnnmmmm1111 mac.w @<REG_M>+,@<REG_N>+*/{"mac.w",{A_INC_M,A_INC_N},{HEX_4,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mov #4,r4 ;!/* 1110nnnni8*1.... mov #<imm>,<REG_N> */{"mov",{A_IMM,A_REG_N},{HEX_E,REG_N,IMM0_8}, arch_sh_up}
+ mov r5,r4 ;!/* 0110nnnnmmmm0011 mov <REG_M>,<REG_N> */{"mov",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_3}, arch_sh_up}
+ mov.b r5,@(R0,r4) ;!/* 0000nnnnmmmm0100 mov.b <REG_M>,@(R0,<REG_N>)*/{"mov.b",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@-r4 ;!/* 0010nnnnmmmm0100 mov.b <REG_M>,@-<REG_N>*/{"mov.b",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@r4 ;!/* 0010nnnnmmmm0000 mov.b <REG_M>,@<REG_N>*/{"mov.b",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b @(8,r5),R0 ;!/* 10000100mmmmi4*1 mov.b @(<disp>,<REG_M>),R0*/{"mov.b",{A_DISP_REG_M,A_R0},{HEX_8,HEX_4,REG_M,IMM0_4}, arch_sh_up}
+ mov.b @(8,GBR),R0 ;!/* 11000100i8*1.... mov.b @(<disp>,GBR),R0*/{"mov.b",{A_DISP_GBR,A_R0},{HEX_C,HEX_4,IMM0_8}, arch_sh_up}
+ mov.b @(R0,r5),r4 ;!/* 0000nnnnmmmm1100 mov.b @(R0,<REG_M>),<REG_N>*/{"mov.b",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_C}, arch_sh_up}
+ mov.b @r5+,r4 ;!/* 0110nnnnmmmm0100 mov.b @<REG_M>+,<REG_N>*/{"mov.b",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b @r5,r4 ;!/* 0110nnnnmmmm0000 mov.b @<REG_M>,<REG_N>*/{"mov.b",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b R0,@(8,r5) ;!/* 10000000mmmmi4*1 mov.b R0,@(<disp>,<REG_M>)*/{"mov.b",{A_R0,A_DISP_REG_M},{HEX_8,HEX_0,REG_M,IMM1_4}, arch_sh_up}
+ mov.b R0,@(8,GBR) ;!/* 11000000i8*1.... mov.b R0,@(<disp>,GBR)*/{"mov.b",{A_R0,A_DISP_GBR},{HEX_C,HEX_0,IMM1_8}, arch_sh_up}
+ mov.l r5,@(8,r4) ;!/* 0001nnnnmmmmi4*4 mov.l <REG_M>,@(<disp>,<REG_N>)*/{"mov.l",{ A_REG_M,A_DISP_REG_N},{HEX_1,REG_N,REG_M,IMM1_4BY4}, arch_sh_up}
+ mov.l r5,@(R0,r4) ;!/* 0000nnnnmmmm0110 mov.l <REG_M>,@(R0,<REG_N>)*/{"mov.l",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@-r4 ;!/* 0010nnnnmmmm0110 mov.l <REG_M>,@-<REG_N>*/{"mov.l",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@r4 ;!/* 0010nnnnmmmm0010 mov.l <REG_M>,@<REG_N>*/{"mov.l",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l @(8,r5),r4 ;!/* 0101nnnnmmmmi4*4 mov.l @(<disp>,<REG_M>),<REG_N>*/{"mov.l",{A_DISP_REG_M,A_REG_N},{HEX_5,REG_N,REG_M,IMM0_4BY4}, arch_sh_up}
+ mov.l @(8,GBR),R0 ;!/* 11000110i8*4.... mov.l @(<disp>,GBR),R0*/{"mov.l",{A_DISP_GBR,A_R0},{HEX_C,HEX_6,IMM0_8BY4}, arch_sh_up}
+ .align 2
+ mov.l @(8,PC),r4 ;!/* 1101nnnni8p4.... mov.l @(<disp>,PC),<REG_N>*/{"mov.l",{A_DISP_PC,A_REG_N},{HEX_D,REG_N,PCRELIMM_8BY4}, arch_sh_up}
+ mov.l @(R0,r5),r4 ;!/* 0000nnnnmmmm1110 mov.l @(R0,<REG_M>),<REG_N>*/{"mov.l",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mov.l @r5+,r4 ;!/* 0110nnnnmmmm0110 mov.l @<REG_M>+,<REG_N>*/{"mov.l",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l @r5,r4 ;!/* 0110nnnnmmmm0010 mov.l @<REG_M>,<REG_N>*/{"mov.l",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l R0,@(8,GBR) ;!/* 11000010i8*4.... mov.l R0,@(<disp>,GBR)*/{"mov.l",{A_R0,A_DISP_GBR},{HEX_C,HEX_2,IMM1_8BY4}, arch_sh_up}
+ mov.w r5,@(R0,r4) ;!/* 0000nnnnmmmm0101 mov.w <REG_M>,@(R0,<REG_N>)*/{"mov.w",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@-r4 ;!/* 0010nnnnmmmm0101 mov.w <REG_M>,@-<REG_N>*/{"mov.w",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@r4 ;!/* 0010nnnnmmmm0001 mov.w <REG_M>,@<REG_N>*/{"mov.w",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w @(8,r5),R0 ;!/* 10000101mmmmi4*2 mov.w @(<disp>,<REG_M>),R0*/{"mov.w",{A_DISP_REG_M,A_R0},{HEX_8,HEX_5,REG_M,IMM0_4BY2}, arch_sh_up}
+ mov.w @(8,GBR),R0 ;!/* 11000101i8*2.... mov.w @(<disp>,GBR),R0*/{"mov.w",{A_DISP_GBR,A_R0},{HEX_C,HEX_5,IMM0_8BY2}, arch_sh_up}
+ mov.w @(8,PC),r4 ;!/* 1001nnnni8p2.... mov.w @(<disp>,PC),<REG_N>*/{"mov.w",{A_DISP_PC,A_REG_N},{HEX_9,REG_N,PCRELIMM_8BY2}, arch_sh_up}
+ mov.w @(R0,r5),r4 ;!/* 0000nnnnmmmm1101 mov.w @(R0,<REG_M>),<REG_N>*/{"mov.w",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_D}, arch_sh_up}
+ mov.w @r5+,r4 ;!/* 0110nnnnmmmm0101 mov.w @<REG_M>+,<REG_N>*/{"mov.w",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w @r5,r4 ;!/* 0110nnnnmmmm0001 mov.w @<REG_M>,<REG_N>*/{"mov.w",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w R0,@(8,r5) ;!/* 10000001mmmmi4*2 mov.w R0,@(<disp>,<REG_M>)*/{"mov.w",{A_R0,A_DISP_REG_M},{HEX_8,HEX_1,REG_M,IMM1_4BY2}, arch_sh_up}
+ mov.w R0,@(8,GBR) ;!/* 11000001i8*2.... mov.w R0,@(<disp>,GBR)*/{"mov.w",{A_R0,A_DISP_GBR},{HEX_C,HEX_1,IMM1_8BY2}, arch_sh_up}
+ .align 2
+ mova @(8,PC),R0 ;!/* 11000111i8p4.... mova @(<disp>,PC),R0*/{"mova",{A_DISP_PC,A_R0},{HEX_C,HEX_7,PCRELIMM_8BY4}, arch_sh_up}
+ movt r4 ;!/* 0000nnnn00101001 movt <REG_N> */{"movt",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ muls.w r5,r4 ;!/* 0010nnnnmmmm1111 muls.w <REG_M>,<REG_N>*/{"muls.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ muls r5,r4 ;!/* 0010nnnnmmmm1111 muls <REG_M>,<REG_N>*/{"muls",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mul.l r5,r4 ;!/* 0000nnnnmmmm0111 mul.l <REG_M>,<REG_N>*/{"mul.l",{ A_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_7}, arch_sh2_up}
+ mulu.w r5,r4 ;!/* 0010nnnnmmmm1110 mulu.w <REG_M>,<REG_N>*/{"mulu.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mulu r5,r4 ;!/* 0010nnnnmmmm1110 mulu <REG_M>,<REG_N>*/{"mulu",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ neg r5,r4 ;!/* 0110nnnnmmmm1011 neg <REG_M>,<REG_N> */{"neg",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_B}, arch_sh_up}
+ negc r5,r4 ;!/* 0110nnnnmmmm1010 negc <REG_M>,<REG_N>*/{"negc",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_A}, arch_sh_up}
+ nop ;!/* 0000000000001001 nop */{"nop",{0},{HEX_0,HEX_0,HEX_0,HEX_9}, arch_sh_up}
+ not r5,r4 ;!/* 0110nnnnmmmm0111 not <REG_M>,<REG_N> */{"not",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_7}, arch_sh_up}
+ or #4,R0 ;!/* 11001011i8*1.... or #<imm>,R0 */{"or",{A_IMM,A_R0},{HEX_C,HEX_B,IMM0_8}, arch_sh_up}
+ or r5,r4 ;!/* 0010nnnnmmmm1011 or <REG_M>,<REG_N> */{"or",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_B}, arch_sh_up}
+ or.b #4,@(R0,GBR) ;!/* 11001111i8*1.... or.b #<imm>,@(R0,GBR)*/{"or.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_F,IMM0_8}, arch_sh_up}
+ rotcl r4 ;!/* 0100nnnn00100100 rotcl <REG_N> */{"rotcl",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_4}, arch_sh_up}
+ rotcr r4 ;!/* 0100nnnn00100101 rotcr <REG_N> */{"rotcr",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_5}, arch_sh_up}
+ rotl r4 ;!/* 0100nnnn00000100 rotl <REG_N> */{"rotl",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_4}, arch_sh_up}
+ rotr r4 ;!/* 0100nnnn00000101 rotr <REG_N> */{"rotr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_5}, arch_sh_up}
+ rte ;!/* 0000000000101011 rte */{"rte",{0},{HEX_0,HEX_0,HEX_2,HEX_B}, arch_sh_up}
+ rts ;!/* 0000000000001011 rts */{"rts",{0},{HEX_0,HEX_0,HEX_0,HEX_B}, arch_sh_up}
+ sets ;!/* 0000000001011000 sets */{"sets",{0},{HEX_0,HEX_0,HEX_5,HEX_8}, arch_sh_up}
+ sett ;!/* 0000000000011000 sett */{"sett",{0},{HEX_0,HEX_0,HEX_1,HEX_8}, arch_sh_up}
+ shal r4 ;!/* 0100nnnn00100000 shal <REG_N> */{"shal",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_0}, arch_sh_up}
+ shar r4 ;!/* 0100nnnn00100001 shar <REG_N> */{"shar",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_1}, arch_sh_up}
+ shll r4 ;!/* 0100nnnn00000000 shll <REG_N> */{"shll",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_0}, arch_sh_up}
+ shll16 r4 ;!/* 0100nnnn00101000 shll16 <REG_N> */{"shll16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_8}, arch_sh_up}
+ shll2 r4 ;!/* 0100nnnn00001000 shll2 <REG_N> */{"shll2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_8}, arch_sh_up}
+ shll8 r4 ;!/* 0100nnnn00011000 shll8 <REG_N> */{"shll8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_8}, arch_sh_up}
+ shlr r4 ;!/* 0100nnnn00000001 shlr <REG_N> */{"shlr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_1}, arch_sh_up}
+ shlr16 r4 ;!/* 0100nnnn00101001 shlr16 <REG_N> */{"shlr16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ shlr2 r4 ;!/* 0100nnnn00001001 shlr2 <REG_N> */{"shlr2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_9}, arch_sh_up}
+ shlr8 r4 ;!/* 0100nnnn00011001 shlr8 <REG_N> */{"shlr8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_9}, arch_sh_up}
+ sleep ;!/* 0000000000011011 sleep */{"sleep",{0},{HEX_0,HEX_0,HEX_1,HEX_B}, arch_sh_up}
+ stc SR,r4 ;!/* 0000nnnn00000010 stc SR,<REG_N> */{"stc",{A_SR,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ stc GBR,r4 ;!/* 0000nnnn00010010 stc GBR,<REG_N> */{"stc",{A_GBR,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ stc VBR,r4 ;!/* 0000nnnn00100010 stc VBR,<REG_N> */{"stc",{A_VBR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ stc.l SR,@-r4 ;!/* 0100nnnn00000011 stc.l SR,@-<REG_N> */{"stc.l",{A_SR,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_3}, arch_sh_up}
+ stc.l VBR,@-r4 ;!/* 0100nnnn00100011 stc.l VBR,@-<REG_N> */{"stc.l",{A_VBR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_3}, arch_sh_up}
+ stc.l GBR,@-r4 ;!/* 0100nnnn00010011 stc.l GBR,@-<REG_N> */{"stc.l",{A_GBR,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_3}, arch_sh_up}
+ sts MACH,r4 ;!/* 0000nnnn00001010 sts MACH,<REG_N> */{"sts",{A_MACH,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ sts MACL,r4 ;!/* 0000nnnn00011010 sts MACL,<REG_N> */{"sts",{A_MACL,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ sts PR,r4 ;!/* 0000nnnn00101010 sts PR,<REG_N> */{"sts",{A_PR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ sts.l MACH,@-r4 ;!/* 0100nnnn00000010 sts.l MACH,@-<REG_N>*/{"sts.l",{A_MACH,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ sts.l MACL,@-r4 ;!/* 0100nnnn00010010 sts.l MACL,@-<REG_N>*/{"sts.l",{A_MACL,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ sts.l PR,@-r4 ;!/* 0100nnnn00100010 sts.l PR,@-<REG_N> */{"sts.l",{A_PR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ sub r5,r4 ;!/* 0011nnnnmmmm1000 sub <REG_M>,<REG_N> */{"sub",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_8}, arch_sh_up}
+ subc r5,r4 ;!/* 0011nnnnmmmm1010 subc <REG_M>,<REG_N>*/{"subc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_A}, arch_sh_up}
+ subv r5,r4 ;!/* 0011nnnnmmmm1011 subv <REG_M>,<REG_N>*/{"subv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_B}, arch_sh_up}
+ swap.b r5,r4 ;!/* 0110nnnnmmmm1000 swap.b <REG_M>,<REG_N>*/{"swap.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_8}, arch_sh_up}
+ swap.w r5,r4 ;!/* 0110nnnnmmmm1001 swap.w <REG_M>,<REG_N>*/{"swap.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_9}, arch_sh_up}
+ tas.b @r4 ;!/* 0100nnnn00011011 tas.b @<REG_N> */{"tas.b",{A_IND_N},{HEX_4,REG_N,HEX_1,HEX_B}, arch_sh_up}
+ trapa #4 ;!/* 11000011i8*1.... trapa #<imm> */{"trapa",{A_IMM},{HEX_C,HEX_3,IMM0_8}, arch_sh_up}
+ tst #4,R0 ;!/* 11001000i8*1.... tst #<imm>,R0 */{"tst",{A_IMM,A_R0},{HEX_C,HEX_8,IMM0_8}, arch_sh_up}
+ tst r5,r4 ;!/* 0010nnnnmmmm1000 tst <REG_M>,<REG_N> */{"tst",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_8}, arch_sh_up}
+ tst.b #4,@(R0,GBR) ;!/* 11001100i8*1.... tst.b #<imm>,@(R0,GBR)*/{"tst.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_C,IMM0_8}, arch_sh_up}
+ xor #4,R0 ;!/* 11001010i8*1.... xor #<imm>,R0 */{"xor",{A_IMM,A_R0},{HEX_C,HEX_A,IMM0_8}, arch_sh_up}
+ xor r5,r4 ;!/* 0010nnnnmmmm1010 xor <REG_M>,<REG_N> */{"xor",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_A}, arch_sh_up}
+ xor.b #4,@(R0,GBR) ;!/* 11001110i8*1.... xor.b #<imm>,@(R0,GBR)*/{"xor.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_E,IMM0_8}, arch_sh_up}
+ xtrct r5,r4 ;!/* 0010nnnnmmmm1101 xtrct <REG_M>,<REG_N>*/{"xtrct",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_D}, arch_sh_up}
+ dt r4 ;!/* 0100nnnn00010000 dt <REG_N> */{"dt",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_0}, arch_sh2_up}
+ dmuls.l r5,r4 ;!/* 0011nnnnmmmm1101 dmuls.l <REG_M>,<REG_N>*/{"dmuls.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_D}, arch_sh2_up}
+ dmulu.l r5,r4 ;!/* 0011nnnnmmmm0101 dmulu.l <REG_M>,<REG_N>*/{"dmulu.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_5}, arch_sh2_up}
+ mac.l @r5+,@r4+ ;!/* 0000nnnnmmmm1111 mac.l @<REG_M>+,@<REG_N>+*/{"mac.l",{A_INC_M,A_INC_N},{HEX_0,REG_N,REG_M,HEX_F}, arch_sh2_up}
+ braf r4 ;!/* 0000nnnn00100011 braf <REG_N> */{"braf",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_3}, arch_sh2_up}
+ bsrf r4 ;!/* 0000nnnn00000011 bsrf <REG_N> */{"bsrf",{A_REG_N},{HEX_0,REG_N,HEX_0,HEX_3}, arch_sh2_up}
diff --git a/binutils-2.21/ld/testsuite/ld-sh/arch/sh3-dsp.s b/binutils-2.21/ld/testsuite/ld-sh/arch/sh3-dsp.s
new file mode 100644
index 0000000..7000596
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/arch/sh3-dsp.s
@@ -0,0 +1,287 @@
+! Generated file. DO NOT EDIT.
+!
+! This file was generated by gas/testsuite/gas/sh/arch/arch.exp .
+! This file should contain every instruction valid on
+! architecture sh3-dsp but no more.
+! If the tests are failing because the expected results
+! have changed then run 'make check' and copy the new file
+! from <objdir>/gas/testsuite/sh3-dsp.s
+! to <srcdir>/gas/testsuite/gas/sh/arch/sh3-dsp.s .
+! Make sure there are no unexpected or missing instructions.
+
+ .section .text
+sh3_dsp:
+! Instructions introduced into sh3-dsp
+
+! Instructions inherited from ancestors: sh sh-dsp sh2 sh2a-nofpu-or-sh3-nommu sh3 sh3-nommu
+ add #4,r4 ;!/* 0111nnnni8*1.... add #<imm>,<REG_N> */{"add",{A_IMM,A_REG_N},{HEX_7,REG_N,IMM0_8}, arch_sh_up}
+ add r5,r4 ;!/* 0011nnnnmmmm1100 add <REG_M>,<REG_N> */{"add",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_C}, arch_sh_up}
+ addc r5,r4 ;!/* 0011nnnnmmmm1110 addc <REG_M>,<REG_N>*/{"addc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_E}, arch_sh_up}
+ addv r5,r4 ;!/* 0011nnnnmmmm1111 addv <REG_M>,<REG_N>*/{"addv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_F}, arch_sh_up}
+ and #4,R0 ;!/* 11001001i8*1.... and #<imm>,R0 */{"and",{A_IMM,A_R0},{HEX_C,HEX_9,IMM0_8}, arch_sh_up}
+ and r5,r4 ;!/* 0010nnnnmmmm1001 and <REG_M>,<REG_N> */{"and",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_9}, arch_sh_up}
+ and.b #4,@(R0,GBR) ;!/* 11001101i8*1.... and.b #<imm>,@(R0,GBR)*/{"and.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_D,IMM0_8}, arch_sh_up}
+ bra .+8 ;!/* 1010i12......... bra <bdisp12> */{"bra",{A_BDISP12},{HEX_A,BRANCH_12}, arch_sh_up}
+ bsr .+8 ;!/* 1011i12......... bsr <bdisp12> */{"bsr",{A_BDISP12},{HEX_B,BRANCH_12}, arch_sh_up}
+ bt .+8 ;!/* 10001001i8p1.... bt <bdisp8> */{"bt",{A_BDISP8},{HEX_8,HEX_9,BRANCH_8}, arch_sh_up}
+ bf .+8 ;!/* 10001011i8p1.... bf <bdisp8> */{"bf",{A_BDISP8},{HEX_8,HEX_B,BRANCH_8}, arch_sh_up}
+ bt.s .+8 ;!/* 10001101i8p1.... bt.s <bdisp8> */{"bt.s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bt/s .+8 ;!/* 10001101i8p1.... bt/s <bdisp8> */{"bt/s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bf.s .+8 ;!/* 10001111i8p1.... bf.s <bdisp8> */{"bf.s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ bf/s .+8 ;!/* 10001111i8p1.... bf/s <bdisp8> */{"bf/s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ clrmac ;!/* 0000000000101000 clrmac */{"clrmac",{0},{HEX_0,HEX_0,HEX_2,HEX_8}, arch_sh_up}
+ clrs ;!/* 0000000001001000 clrs */{"clrs",{0},{HEX_0,HEX_0,HEX_4,HEX_8}, arch_sh_up}
+ clrt ;!/* 0000000000001000 clrt */{"clrt",{0},{HEX_0,HEX_0,HEX_0,HEX_8}, arch_sh_up}
+ cmp/eq #4,R0 ;!/* 10001000i8*1.... cmp/eq #<imm>,R0 */{"cmp/eq",{A_IMM,A_R0},{HEX_8,HEX_8,IMM0_8}, arch_sh_up}
+ cmp/eq r5,r4 ;!/* 0011nnnnmmmm0000 cmp/eq <REG_M>,<REG_N>*/{"cmp/eq",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_0}, arch_sh_up}
+ cmp/ge r5,r4 ;!/* 0011nnnnmmmm0011 cmp/ge <REG_M>,<REG_N>*/{"cmp/ge",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_3}, arch_sh_up}
+ cmp/gt r5,r4 ;!/* 0011nnnnmmmm0111 cmp/gt <REG_M>,<REG_N>*/{"cmp/gt",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_7}, arch_sh_up}
+ cmp/hi r5,r4 ;!/* 0011nnnnmmmm0110 cmp/hi <REG_M>,<REG_N>*/{"cmp/hi",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_6}, arch_sh_up}
+ cmp/hs r5,r4 ;!/* 0011nnnnmmmm0010 cmp/hs <REG_M>,<REG_N>*/{"cmp/hs",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_2}, arch_sh_up}
+ cmp/pl r4 ;!/* 0100nnnn00010101 cmp/pl <REG_N> */{"cmp/pl",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_5}, arch_sh_up}
+ cmp/pz r4 ;!/* 0100nnnn00010001 cmp/pz <REG_N> */{"cmp/pz",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_1}, arch_sh_up}
+ cmp/str r5,r4 ;!/* 0010nnnnmmmm1100 cmp/str <REG_M>,<REG_N>*/{"cmp/str",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_C}, arch_sh_up}
+ div0s r5,r4 ;!/* 0010nnnnmmmm0111 div0s <REG_M>,<REG_N>*/{"div0s",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_7}, arch_sh_up}
+ div0u ;!/* 0000000000011001 div0u */{"div0u",{0},{HEX_0,HEX_0,HEX_1,HEX_9}, arch_sh_up}
+ div1 r5,r4 ;!/* 0011nnnnmmmm0100 div1 <REG_M>,<REG_N>*/{"div1",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_4}, arch_sh_up}
+ exts.b r5,r4 ;!/* 0110nnnnmmmm1110 exts.b <REG_M>,<REG_N>*/{"exts.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_E}, arch_sh_up}
+ exts.w r5,r4 ;!/* 0110nnnnmmmm1111 exts.w <REG_M>,<REG_N>*/{"exts.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_F}, arch_sh_up}
+ extu.b r5,r4 ;!/* 0110nnnnmmmm1100 extu.b <REG_M>,<REG_N>*/{"extu.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_C}, arch_sh_up}
+ extu.w r5,r4 ;!/* 0110nnnnmmmm1101 extu.w <REG_M>,<REG_N>*/{"extu.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_D}, arch_sh_up}
+ jmp @r4 ;!/* 0100nnnn00101011 jmp @<REG_N> */{"jmp",{A_IND_N},{HEX_4,REG_N,HEX_2,HEX_B}, arch_sh_up}
+ jsr @r4 ;!/* 0100nnnn00001011 jsr @<REG_N> */{"jsr",{A_IND_N},{HEX_4,REG_N,HEX_0,HEX_B}, arch_sh_up}
+ ldc r4,SR ;!/* 0100nnnn00001110 ldc <REG_N>,SR */{"ldc",{A_REG_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_E}, arch_sh_up}
+ ldc r4,GBR ;!/* 0100nnnn00011110 ldc <REG_N>,GBR */{"ldc",{A_REG_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_E}, arch_sh_up}
+ ldc r4,VBR ;!/* 0100nnnn00101110 ldc <REG_N>,VBR */{"ldc",{A_REG_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_E}, arch_sh_up}
+ ldc r4,MOD ;!/* 0100nnnn01011110 ldc <REG_N>,MOD */{"ldc",{A_REG_N,A_MOD},{HEX_4,REG_N,HEX_5,HEX_E}, arch_sh_dsp_up}
+ ldc r4,RE ;!/* 0100nnnn01111110 ldc <REG_N>,RE */{"ldc",{A_REG_N,A_RE},{HEX_4,REG_N,HEX_7,HEX_E}, arch_sh_dsp_up}
+ ldc r4,RS ;!/* 0100nnnn01101110 ldc <REG_N>,RS */{"ldc",{A_REG_N,A_RS},{HEX_4,REG_N,HEX_6,HEX_E}, arch_sh_dsp_up}
+ ldc r4,SSR ;!/* 0100nnnn00111110 ldc <REG_N>,SSR */{"ldc",{A_REG_N,A_SSR},{HEX_4,REG_N,HEX_3,HEX_E}, arch_sh3_nommu_up}
+ ldc r4,SPC ;!/* 0100nnnn01001110 ldc <REG_N>,SPC */{"ldc",{A_REG_N,A_SPC},{HEX_4,REG_N,HEX_4,HEX_E}, arch_sh3_nommu_up}
+ ldc r4,r1_bank ;!/* 0100nnnn1xxx1110 ldc <REG_N>,Rn_BANK */{"ldc",{A_REG_N,A_REG_B},{HEX_4,REG_N,REG_B,HEX_E}, arch_sh3_nommu_up}
+ ldc.l @r4+,SR ;!/* 0100nnnn00000111 ldc.l @<REG_N>+,SR */{"ldc.l",{A_INC_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_7}, arch_sh_up}
+ ldc.l @r4+,GBR ;!/* 0100nnnn00010111 ldc.l @<REG_N>+,GBR */{"ldc.l",{A_INC_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_7}, arch_sh_up}
+ ldc.l @r4+,VBR ;!/* 0100nnnn00100111 ldc.l @<REG_N>+,VBR */{"ldc.l",{A_INC_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_7}, arch_sh_up}
+ ldc.l @r4+,MOD ;!/* 0100nnnn01010111 ldc.l @<REG_N>+,MOD */{"ldc.l",{A_INC_N,A_MOD},{HEX_4,REG_N,HEX_5,HEX_7}, arch_sh_dsp_up}
+ ldc.l @r4+,RE ;!/* 0100nnnn01110111 ldc.l @<REG_N>+,RE */{"ldc.l",{A_INC_N,A_RE},{HEX_4,REG_N,HEX_7,HEX_7}, arch_sh_dsp_up}
+ ldc.l @r4+,RS ;!/* 0100nnnn01100111 ldc.l @<REG_N>+,RS */{"ldc.l",{A_INC_N,A_RS},{HEX_4,REG_N,HEX_6,HEX_7}, arch_sh_dsp_up}
+ ldc.l @r4+,SSR ;!/* 0100nnnn00110111 ldc.l @<REG_N>+,SSR */{"ldc.l",{A_INC_N,A_SSR},{HEX_4,REG_N,HEX_3,HEX_7}, arch_sh3_nommu_up}
+ ldc.l @r4+,SPC ;!/* 0100nnnn01000111 ldc.l @<REG_N>+,SPC */{"ldc.l",{A_INC_N,A_SPC},{HEX_4,REG_N,HEX_4,HEX_7}, arch_sh3_nommu_up}
+ ldc.l @r4+,r1_bank ;!/* 0100nnnn1xxx0111 ldc.l @<REG_N>+,Rn_BANK */{"ldc.l",{A_INC_N,A_REG_B},{HEX_4,REG_N,REG_B,HEX_7}, arch_sh3_nommu_up}
+ ldre @(8,PC) ;!/* 10001110i8p2.... ldre @(<disp>,PC) */{"ldre",{A_DISP_PC},{HEX_8,HEX_E,PCRELIMM_8BY2}, arch_sh_dsp_up}
+ ldrs @(8,PC) ;!/* 10001100i8p2.... ldrs @(<disp>,PC) */{"ldrs",{A_DISP_PC},{HEX_8,HEX_C,PCRELIMM_8BY2}, arch_sh_dsp_up}
+ lds r4,MACH ;!/* 0100nnnn00001010 lds <REG_N>,MACH */{"lds",{A_REG_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ lds r4,MACL ;!/* 0100nnnn00011010 lds <REG_N>,MACL */{"lds",{A_REG_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ lds r4,PR ;!/* 0100nnnn00101010 lds <REG_N>,PR */{"lds",{A_REG_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ lds r4,DSR ;!/* 0100nnnn01101010 lds <REG_N>,DSR */{"lds",{A_REG_N,A_DSR},{HEX_4,REG_N,HEX_6,HEX_A}, arch_sh_dsp_up}
+ lds r4,A0 ;!/* 0100nnnn01111010 lds <REG_N>,A0 */{"lds",{A_REG_N,A_A0},{HEX_4,REG_N,HEX_7,HEX_A}, arch_sh_dsp_up}
+ lds r4,X0 ;!/* 0100nnnn10001010 lds <REG_N>,X0 */{"lds",{A_REG_N,A_X0},{HEX_4,REG_N,HEX_8,HEX_A}, arch_sh_dsp_up}
+ lds r4,X1 ;!/* 0100nnnn10011010 lds <REG_N>,X1 */{"lds",{A_REG_N,A_X1},{HEX_4,REG_N,HEX_9,HEX_A}, arch_sh_dsp_up}
+ lds r4,Y0 ;!/* 0100nnnn10101010 lds <REG_N>,Y0 */{"lds",{A_REG_N,A_Y0},{HEX_4,REG_N,HEX_A,HEX_A}, arch_sh_dsp_up}
+ lds r4,Y1 ;!/* 0100nnnn10111010 lds <REG_N>,Y1 */{"lds",{A_REG_N,A_Y1},{HEX_4,REG_N,HEX_B,HEX_A}, arch_sh_dsp_up}
+ lds.l @r4+,MACH ;!/* 0100nnnn00000110 lds.l @<REG_N>+,MACH*/{"lds.l",{A_INC_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_6}, arch_sh_up}
+ lds.l @r4+,MACL ;!/* 0100nnnn00010110 lds.l @<REG_N>+,MACL*/{"lds.l",{A_INC_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_6}, arch_sh_up}
+ lds.l @r4+,PR ;!/* 0100nnnn00100110 lds.l @<REG_N>+,PR */{"lds.l",{A_INC_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_6}, arch_sh_up}
+ lds.l @r4+,DSR ;!/* 0100nnnn01100110 lds.l @<REG_N>+,DSR */{"lds.l",{A_INC_N,A_DSR},{HEX_4,REG_N,HEX_6,HEX_6}, arch_sh_dsp_up}
+ lds.l @r4+,A0 ;!/* 0100nnnn01110110 lds.l @<REG_N>+,A0 */{"lds.l",{A_INC_N,A_A0},{HEX_4,REG_N,HEX_7,HEX_6}, arch_sh_dsp_up}
+ lds.l @r4+,X0 ;!/* 0100nnnn10000110 lds.l @<REG_N>+,X0 */{"lds.l",{A_INC_N,A_X0},{HEX_4,REG_N,HEX_8,HEX_6}, arch_sh_dsp_up}
+ lds.l @r4+,X1 ;!/* 0100nnnn10010110 lds.l @<REG_N>+,X1 */{"lds.l",{A_INC_N,A_X1},{HEX_4,REG_N,HEX_9,HEX_6}, arch_sh_dsp_up}
+ lds.l @r4+,Y0 ;!/* 0100nnnn10100110 lds.l @<REG_N>+,Y0 */{"lds.l",{A_INC_N,A_Y0},{HEX_4,REG_N,HEX_A,HEX_6}, arch_sh_dsp_up}
+ lds.l @r4+,Y1 ;!/* 0100nnnn10110110 lds.l @<REG_N>+,Y1 */{"lds.l",{A_INC_N,A_Y1},{HEX_4,REG_N,HEX_B,HEX_6}, arch_sh_dsp_up}
+ ldtlb ;!/* 0000000000111000 ldtlb */{"ldtlb",{0},{HEX_0,HEX_0,HEX_3,HEX_8}, arch_sh3_up}
+ mac.w @r5+,@r4+ ;!/* 0100nnnnmmmm1111 mac.w @<REG_M>+,@<REG_N>+*/{"mac.w",{A_INC_M,A_INC_N},{HEX_4,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mov #4,r4 ;!/* 1110nnnni8*1.... mov #<imm>,<REG_N> */{"mov",{A_IMM,A_REG_N},{HEX_E,REG_N,IMM0_8}, arch_sh_up}
+ mov r5,r4 ;!/* 0110nnnnmmmm0011 mov <REG_M>,<REG_N> */{"mov",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_3}, arch_sh_up}
+ mov.b r5,@(R0,r4) ;!/* 0000nnnnmmmm0100 mov.b <REG_M>,@(R0,<REG_N>)*/{"mov.b",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@-r4 ;!/* 0010nnnnmmmm0100 mov.b <REG_M>,@-<REG_N>*/{"mov.b",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@r4 ;!/* 0010nnnnmmmm0000 mov.b <REG_M>,@<REG_N>*/{"mov.b",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b @(8,r5),R0 ;!/* 10000100mmmmi4*1 mov.b @(<disp>,<REG_M>),R0*/{"mov.b",{A_DISP_REG_M,A_R0},{HEX_8,HEX_4,REG_M,IMM0_4}, arch_sh_up}
+ mov.b @(8,GBR),R0 ;!/* 11000100i8*1.... mov.b @(<disp>,GBR),R0*/{"mov.b",{A_DISP_GBR,A_R0},{HEX_C,HEX_4,IMM0_8}, arch_sh_up}
+ mov.b @(R0,r5),r4 ;!/* 0000nnnnmmmm1100 mov.b @(R0,<REG_M>),<REG_N>*/{"mov.b",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_C}, arch_sh_up}
+ mov.b @r5+,r4 ;!/* 0110nnnnmmmm0100 mov.b @<REG_M>+,<REG_N>*/{"mov.b",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b @r5,r4 ;!/* 0110nnnnmmmm0000 mov.b @<REG_M>,<REG_N>*/{"mov.b",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b R0,@(8,r5) ;!/* 10000000mmmmi4*1 mov.b R0,@(<disp>,<REG_M>)*/{"mov.b",{A_R0,A_DISP_REG_M},{HEX_8,HEX_0,REG_M,IMM1_4}, arch_sh_up}
+ mov.b R0,@(8,GBR) ;!/* 11000000i8*1.... mov.b R0,@(<disp>,GBR)*/{"mov.b",{A_R0,A_DISP_GBR},{HEX_C,HEX_0,IMM1_8}, arch_sh_up}
+ mov.l r5,@(8,r4) ;!/* 0001nnnnmmmmi4*4 mov.l <REG_M>,@(<disp>,<REG_N>)*/{"mov.l",{ A_REG_M,A_DISP_REG_N},{HEX_1,REG_N,REG_M,IMM1_4BY4}, arch_sh_up}
+ mov.l r5,@(R0,r4) ;!/* 0000nnnnmmmm0110 mov.l <REG_M>,@(R0,<REG_N>)*/{"mov.l",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@-r4 ;!/* 0010nnnnmmmm0110 mov.l <REG_M>,@-<REG_N>*/{"mov.l",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@r4 ;!/* 0010nnnnmmmm0010 mov.l <REG_M>,@<REG_N>*/{"mov.l",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l @(8,r5),r4 ;!/* 0101nnnnmmmmi4*4 mov.l @(<disp>,<REG_M>),<REG_N>*/{"mov.l",{A_DISP_REG_M,A_REG_N},{HEX_5,REG_N,REG_M,IMM0_4BY4}, arch_sh_up}
+ mov.l @(8,GBR),R0 ;!/* 11000110i8*4.... mov.l @(<disp>,GBR),R0*/{"mov.l",{A_DISP_GBR,A_R0},{HEX_C,HEX_6,IMM0_8BY4}, arch_sh_up}
+ .align 2
+ mov.l @(8,PC),r4 ;!/* 1101nnnni8p4.... mov.l @(<disp>,PC),<REG_N>*/{"mov.l",{A_DISP_PC,A_REG_N},{HEX_D,REG_N,PCRELIMM_8BY4}, arch_sh_up}
+ mov.l @(R0,r5),r4 ;!/* 0000nnnnmmmm1110 mov.l @(R0,<REG_M>),<REG_N>*/{"mov.l",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mov.l @r5+,r4 ;!/* 0110nnnnmmmm0110 mov.l @<REG_M>+,<REG_N>*/{"mov.l",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l @r5,r4 ;!/* 0110nnnnmmmm0010 mov.l @<REG_M>,<REG_N>*/{"mov.l",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l R0,@(8,GBR) ;!/* 11000010i8*4.... mov.l R0,@(<disp>,GBR)*/{"mov.l",{A_R0,A_DISP_GBR},{HEX_C,HEX_2,IMM1_8BY4}, arch_sh_up}
+ mov.w r5,@(R0,r4) ;!/* 0000nnnnmmmm0101 mov.w <REG_M>,@(R0,<REG_N>)*/{"mov.w",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@-r4 ;!/* 0010nnnnmmmm0101 mov.w <REG_M>,@-<REG_N>*/{"mov.w",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@r4 ;!/* 0010nnnnmmmm0001 mov.w <REG_M>,@<REG_N>*/{"mov.w",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w @(8,r5),R0 ;!/* 10000101mmmmi4*2 mov.w @(<disp>,<REG_M>),R0*/{"mov.w",{A_DISP_REG_M,A_R0},{HEX_8,HEX_5,REG_M,IMM0_4BY2}, arch_sh_up}
+ mov.w @(8,GBR),R0 ;!/* 11000101i8*2.... mov.w @(<disp>,GBR),R0*/{"mov.w",{A_DISP_GBR,A_R0},{HEX_C,HEX_5,IMM0_8BY2}, arch_sh_up}
+ mov.w @(8,PC),r4 ;!/* 1001nnnni8p2.... mov.w @(<disp>,PC),<REG_N>*/{"mov.w",{A_DISP_PC,A_REG_N},{HEX_9,REG_N,PCRELIMM_8BY2}, arch_sh_up}
+ mov.w @(R0,r5),r4 ;!/* 0000nnnnmmmm1101 mov.w @(R0,<REG_M>),<REG_N>*/{"mov.w",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_D}, arch_sh_up}
+ mov.w @r5+,r4 ;!/* 0110nnnnmmmm0101 mov.w @<REG_M>+,<REG_N>*/{"mov.w",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w @r5,r4 ;!/* 0110nnnnmmmm0001 mov.w @<REG_M>,<REG_N>*/{"mov.w",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w R0,@(8,r5) ;!/* 10000001mmmmi4*2 mov.w R0,@(<disp>,<REG_M>)*/{"mov.w",{A_R0,A_DISP_REG_M},{HEX_8,HEX_1,REG_M,IMM1_4BY2}, arch_sh_up}
+ mov.w R0,@(8,GBR) ;!/* 11000001i8*2.... mov.w R0,@(<disp>,GBR)*/{"mov.w",{A_R0,A_DISP_GBR},{HEX_C,HEX_1,IMM1_8BY2}, arch_sh_up}
+ .align 2
+ mova @(8,PC),R0 ;!/* 11000111i8p4.... mova @(<disp>,PC),R0*/{"mova",{A_DISP_PC,A_R0},{HEX_C,HEX_7,PCRELIMM_8BY4}, arch_sh_up}
+ movt r4 ;!/* 0000nnnn00101001 movt <REG_N> */{"movt",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ muls.w r5,r4 ;!/* 0010nnnnmmmm1111 muls.w <REG_M>,<REG_N>*/{"muls.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ muls r5,r4 ;!/* 0010nnnnmmmm1111 muls <REG_M>,<REG_N>*/{"muls",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mul.l r5,r4 ;!/* 0000nnnnmmmm0111 mul.l <REG_M>,<REG_N>*/{"mul.l",{ A_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_7}, arch_sh2_up}
+ mulu.w r5,r4 ;!/* 0010nnnnmmmm1110 mulu.w <REG_M>,<REG_N>*/{"mulu.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mulu r5,r4 ;!/* 0010nnnnmmmm1110 mulu <REG_M>,<REG_N>*/{"mulu",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ neg r5,r4 ;!/* 0110nnnnmmmm1011 neg <REG_M>,<REG_N> */{"neg",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_B}, arch_sh_up}
+ negc r5,r4 ;!/* 0110nnnnmmmm1010 negc <REG_M>,<REG_N>*/{"negc",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_A}, arch_sh_up}
+ nop ;!/* 0000000000001001 nop */{"nop",{0},{HEX_0,HEX_0,HEX_0,HEX_9}, arch_sh_up}
+ not r5,r4 ;!/* 0110nnnnmmmm0111 not <REG_M>,<REG_N> */{"not",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_7}, arch_sh_up}
+ or #4,R0 ;!/* 11001011i8*1.... or #<imm>,R0 */{"or",{A_IMM,A_R0},{HEX_C,HEX_B,IMM0_8}, arch_sh_up}
+ or r5,r4 ;!/* 0010nnnnmmmm1011 or <REG_M>,<REG_N> */{"or",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_B}, arch_sh_up}
+ or.b #4,@(R0,GBR) ;!/* 11001111i8*1.... or.b #<imm>,@(R0,GBR)*/{"or.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_F,IMM0_8}, arch_sh_up}
+ rotcl r4 ;!/* 0100nnnn00100100 rotcl <REG_N> */{"rotcl",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_4}, arch_sh_up}
+ rotcr r4 ;!/* 0100nnnn00100101 rotcr <REG_N> */{"rotcr",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_5}, arch_sh_up}
+ rotl r4 ;!/* 0100nnnn00000100 rotl <REG_N> */{"rotl",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_4}, arch_sh_up}
+ rotr r4 ;!/* 0100nnnn00000101 rotr <REG_N> */{"rotr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_5}, arch_sh_up}
+ rte ;!/* 0000000000101011 rte */{"rte",{0},{HEX_0,HEX_0,HEX_2,HEX_B}, arch_sh_up}
+ rts ;!/* 0000000000001011 rts */{"rts",{0},{HEX_0,HEX_0,HEX_0,HEX_B}, arch_sh_up}
+ sets ;!/* 0000000001011000 sets */{"sets",{0},{HEX_0,HEX_0,HEX_5,HEX_8}, arch_sh_up}
+ sett ;!/* 0000000000011000 sett */{"sett",{0},{HEX_0,HEX_0,HEX_1,HEX_8}, arch_sh_up}
+ setrc r4 ;!/* 0100nnnn00010100 setrc <REG_N> */{"setrc",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_4}, arch_sh_dsp_up}
+ setrc #4 ;!/* 10000010i8*1.... setrc #<imm> */{"setrc",{A_IMM},{HEX_8,HEX_2,IMM0_8}, arch_sh_dsp_up}
+ repeat 10 20 r4 ;!/* repeat start end <REG_N> */{"repeat",{A_DISP_PC,A_DISP_PC,A_REG_N},{REPEAT,REG_N,HEX_1,HEX_4}, arch_sh_dsp_up}
+ repeat 10 20 #4 ;!/* repeat start end #<imm> */{"repeat",{A_DISP_PC,A_DISP_PC,A_IMM},{REPEAT,HEX_2,IMM0_8,HEX_8}, arch_sh_dsp_up}
+ shad r5,r4 ;!/* 0100nnnnmmmm1100 shad <REG_M>,<REG_N>*/{"shad",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_C}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shld r5,r4 ;!/* 0100nnnnmmmm1101 shld <REG_M>,<REG_N>*/{"shld",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_D}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shal r4 ;!/* 0100nnnn00100000 shal <REG_N> */{"shal",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_0}, arch_sh_up}
+ shar r4 ;!/* 0100nnnn00100001 shar <REG_N> */{"shar",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_1}, arch_sh_up}
+ shll r4 ;!/* 0100nnnn00000000 shll <REG_N> */{"shll",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_0}, arch_sh_up}
+ shll16 r4 ;!/* 0100nnnn00101000 shll16 <REG_N> */{"shll16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_8}, arch_sh_up}
+ shll2 r4 ;!/* 0100nnnn00001000 shll2 <REG_N> */{"shll2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_8}, arch_sh_up}
+ shll8 r4 ;!/* 0100nnnn00011000 shll8 <REG_N> */{"shll8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_8}, arch_sh_up}
+ shlr r4 ;!/* 0100nnnn00000001 shlr <REG_N> */{"shlr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_1}, arch_sh_up}
+ shlr16 r4 ;!/* 0100nnnn00101001 shlr16 <REG_N> */{"shlr16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ shlr2 r4 ;!/* 0100nnnn00001001 shlr2 <REG_N> */{"shlr2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_9}, arch_sh_up}
+ shlr8 r4 ;!/* 0100nnnn00011001 shlr8 <REG_N> */{"shlr8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_9}, arch_sh_up}
+ sleep ;!/* 0000000000011011 sleep */{"sleep",{0},{HEX_0,HEX_0,HEX_1,HEX_B}, arch_sh_up}
+ stc SR,r4 ;!/* 0000nnnn00000010 stc SR,<REG_N> */{"stc",{A_SR,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ stc GBR,r4 ;!/* 0000nnnn00010010 stc GBR,<REG_N> */{"stc",{A_GBR,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ stc VBR,r4 ;!/* 0000nnnn00100010 stc VBR,<REG_N> */{"stc",{A_VBR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ stc MOD,r4 ;!/* 0000nnnn01010010 stc MOD,<REG_N> */{"stc",{A_MOD,A_REG_N},{HEX_0,REG_N,HEX_5,HEX_2}, arch_sh_dsp_up}
+ stc RE,r4 ;!/* 0000nnnn01110010 stc RE,<REG_N> */{"stc",{A_RE,A_REG_N},{HEX_0,REG_N,HEX_7,HEX_2}, arch_sh_dsp_up}
+ stc RS,r4 ;!/* 0000nnnn01100010 stc RS,<REG_N> */{"stc",{A_RS,A_REG_N},{HEX_0,REG_N,HEX_6,HEX_2}, arch_sh_dsp_up}
+ stc SSR,r4 ;!/* 0000nnnn00110010 stc SSR,<REG_N> */{"stc",{A_SSR,A_REG_N},{HEX_0,REG_N,HEX_3,HEX_2}, arch_sh3_nommu_up}
+ stc SPC,r4 ;!/* 0000nnnn01000010 stc SPC,<REG_N> */{"stc",{A_SPC,A_REG_N},{HEX_0,REG_N,HEX_4,HEX_2}, arch_sh3_nommu_up}
+ stc r1_bank,r4 ;!/* 0000nnnn1xxx0010 stc Rn_BANK,<REG_N> */{"stc",{A_REG_B,A_REG_N},{HEX_0,REG_N,REG_B,HEX_2}, arch_sh3_nommu_up}
+ stc.l SR,@-r4 ;!/* 0100nnnn00000011 stc.l SR,@-<REG_N> */{"stc.l",{A_SR,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_3}, arch_sh_up}
+ stc.l VBR,@-r4 ;!/* 0100nnnn00100011 stc.l VBR,@-<REG_N> */{"stc.l",{A_VBR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_3}, arch_sh_up}
+ stc.l MOD,@-r4 ;!/* 0100nnnn01010011 stc.l MOD,@-<REG_N> */{"stc.l",{A_MOD,A_DEC_N},{HEX_4,REG_N,HEX_5,HEX_3}, arch_sh_dsp_up}
+ stc.l RE,@-r4 ;!/* 0100nnnn01110011 stc.l RE,@-<REG_N> */{"stc.l",{A_RE,A_DEC_N},{HEX_4,REG_N,HEX_7,HEX_3}, arch_sh_dsp_up}
+ stc.l RS,@-r4 ;!/* 0100nnnn01100011 stc.l RS,@-<REG_N> */{"stc.l",{A_RS,A_DEC_N},{HEX_4,REG_N,HEX_6,HEX_3}, arch_sh_dsp_up}
+ stc.l SSR,@-r4 ;!/* 0100nnnn00110011 stc.l SSR,@-<REG_N> */{"stc.l",{A_SSR,A_DEC_N},{HEX_4,REG_N,HEX_3,HEX_3}, arch_sh3_nommu_up}
+ stc.l SPC,@-r4 ;!/* 0100nnnn01000011 stc.l SPC,@-<REG_N> */{"stc.l",{A_SPC,A_DEC_N},{HEX_4,REG_N,HEX_4,HEX_3}, arch_sh3_nommu_up}
+ stc.l GBR,@-r4 ;!/* 0100nnnn00010011 stc.l GBR,@-<REG_N> */{"stc.l",{A_GBR,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_3}, arch_sh_up}
+ stc.l r1_bank,@-r4 ;!/* 0100nnnn1xxx0011 stc.l Rn_BANK,@-<REG_N> */{"stc.l",{A_REG_B,A_DEC_N},{HEX_4,REG_N,REG_B,HEX_3}, arch_sh3_nommu_up}
+ sts MACH,r4 ;!/* 0000nnnn00001010 sts MACH,<REG_N> */{"sts",{A_MACH,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ sts MACL,r4 ;!/* 0000nnnn00011010 sts MACL,<REG_N> */{"sts",{A_MACL,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ sts PR,r4 ;!/* 0000nnnn00101010 sts PR,<REG_N> */{"sts",{A_PR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ sts DSR,r4 ;!/* 0000nnnn01101010 sts DSR,<REG_N> */{"sts",{A_DSR,A_REG_N},{HEX_0,REG_N,HEX_6,HEX_A}, arch_sh_dsp_up}
+ sts A0,r4 ;!/* 0000nnnn01111010 sts A0,<REG_N> */{"sts",{A_A0,A_REG_N},{HEX_0,REG_N,HEX_7,HEX_A}, arch_sh_dsp_up}
+ sts X0,r4 ;!/* 0000nnnn10001010 sts X0,<REG_N> */{"sts",{A_X0,A_REG_N},{HEX_0,REG_N,HEX_8,HEX_A}, arch_sh_dsp_up}
+ sts X1,r4 ;!/* 0000nnnn10011010 sts X1,<REG_N> */{"sts",{A_X1,A_REG_N},{HEX_0,REG_N,HEX_9,HEX_A}, arch_sh_dsp_up}
+ sts Y0,r4 ;!/* 0000nnnn10101010 sts Y0,<REG_N> */{"sts",{A_Y0,A_REG_N},{HEX_0,REG_N,HEX_A,HEX_A}, arch_sh_dsp_up}
+ sts Y1,r4 ;!/* 0000nnnn10111010 sts Y1,<REG_N> */{"sts",{A_Y1,A_REG_N},{HEX_0,REG_N,HEX_B,HEX_A}, arch_sh_dsp_up}
+ sts.l MACH,@-r4 ;!/* 0100nnnn00000010 sts.l MACH,@-<REG_N>*/{"sts.l",{A_MACH,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ sts.l MACL,@-r4 ;!/* 0100nnnn00010010 sts.l MACL,@-<REG_N>*/{"sts.l",{A_MACL,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ sts.l PR,@-r4 ;!/* 0100nnnn00100010 sts.l PR,@-<REG_N> */{"sts.l",{A_PR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ sts.l DSR,@-r4 ;!/* 0100nnnn01100110 sts.l DSR,@-<REG_N> */{"sts.l",{A_DSR,A_DEC_N},{HEX_4,REG_N,HEX_6,HEX_2}, arch_sh_dsp_up}
+ sts.l A0,@-r4 ;!/* 0100nnnn01110110 sts.l A0,@-<REG_N> */{"sts.l",{A_A0,A_DEC_N},{HEX_4,REG_N,HEX_7,HEX_2}, arch_sh_dsp_up}
+ sts.l X0,@-r4 ;!/* 0100nnnn10000110 sts.l X0,@-<REG_N> */{"sts.l",{A_X0,A_DEC_N},{HEX_4,REG_N,HEX_8,HEX_2}, arch_sh_dsp_up}
+ sts.l X1,@-r4 ;!/* 0100nnnn10010110 sts.l X1,@-<REG_N> */{"sts.l",{A_X1,A_DEC_N},{HEX_4,REG_N,HEX_9,HEX_2}, arch_sh_dsp_up}
+ sts.l Y0,@-r4 ;!/* 0100nnnn10100110 sts.l Y0,@-<REG_N> */{"sts.l",{A_Y0,A_DEC_N},{HEX_4,REG_N,HEX_A,HEX_2}, arch_sh_dsp_up}
+ sts.l Y1,@-r4 ;!/* 0100nnnn10110110 sts.l Y1,@-<REG_N> */{"sts.l",{A_Y1,A_DEC_N},{HEX_4,REG_N,HEX_B,HEX_2}, arch_sh_dsp_up}
+ sub r5,r4 ;!/* 0011nnnnmmmm1000 sub <REG_M>,<REG_N> */{"sub",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_8}, arch_sh_up}
+ subc r5,r4 ;!/* 0011nnnnmmmm1010 subc <REG_M>,<REG_N>*/{"subc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_A}, arch_sh_up}
+ subv r5,r4 ;!/* 0011nnnnmmmm1011 subv <REG_M>,<REG_N>*/{"subv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_B}, arch_sh_up}
+ swap.b r5,r4 ;!/* 0110nnnnmmmm1000 swap.b <REG_M>,<REG_N>*/{"swap.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_8}, arch_sh_up}
+ swap.w r5,r4 ;!/* 0110nnnnmmmm1001 swap.w <REG_M>,<REG_N>*/{"swap.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_9}, arch_sh_up}
+ tas.b @r4 ;!/* 0100nnnn00011011 tas.b @<REG_N> */{"tas.b",{A_IND_N},{HEX_4,REG_N,HEX_1,HEX_B}, arch_sh_up}
+ trapa #4 ;!/* 11000011i8*1.... trapa #<imm> */{"trapa",{A_IMM},{HEX_C,HEX_3,IMM0_8}, arch_sh_up}
+ tst #4,R0 ;!/* 11001000i8*1.... tst #<imm>,R0 */{"tst",{A_IMM,A_R0},{HEX_C,HEX_8,IMM0_8}, arch_sh_up}
+ tst r5,r4 ;!/* 0010nnnnmmmm1000 tst <REG_M>,<REG_N> */{"tst",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_8}, arch_sh_up}
+ tst.b #4,@(R0,GBR) ;!/* 11001100i8*1.... tst.b #<imm>,@(R0,GBR)*/{"tst.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_C,IMM0_8}, arch_sh_up}
+ xor #4,R0 ;!/* 11001010i8*1.... xor #<imm>,R0 */{"xor",{A_IMM,A_R0},{HEX_C,HEX_A,IMM0_8}, arch_sh_up}
+ xor r5,r4 ;!/* 0010nnnnmmmm1010 xor <REG_M>,<REG_N> */{"xor",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_A}, arch_sh_up}
+ xor.b #4,@(R0,GBR) ;!/* 11001110i8*1.... xor.b #<imm>,@(R0,GBR)*/{"xor.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_E,IMM0_8}, arch_sh_up}
+ xtrct r5,r4 ;!/* 0010nnnnmmmm1101 xtrct <REG_M>,<REG_N>*/{"xtrct",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_D}, arch_sh_up}
+ dt r4 ;!/* 0100nnnn00010000 dt <REG_N> */{"dt",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_0}, arch_sh2_up}
+ dmuls.l r5,r4 ;!/* 0011nnnnmmmm1101 dmuls.l <REG_M>,<REG_N>*/{"dmuls.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_D}, arch_sh2_up}
+ dmulu.l r5,r4 ;!/* 0011nnnnmmmm0101 dmulu.l <REG_M>,<REG_N>*/{"dmulu.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_5}, arch_sh2_up}
+ mac.l @r5+,@r4+ ;!/* 0000nnnnmmmm1111 mac.l @<REG_M>+,@<REG_N>+*/{"mac.l",{A_INC_M,A_INC_N},{HEX_0,REG_N,REG_M,HEX_F}, arch_sh2_up}
+ braf r4 ;!/* 0000nnnn00100011 braf <REG_N> */{"braf",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_3}, arch_sh2_up}
+ bsrf r4 ;!/* 0000nnnn00000011 bsrf <REG_N> */{"bsrf",{A_REG_N},{HEX_0,REG_N,HEX_0,HEX_3}, arch_sh2_up}
+ movs.w @-r4,a1 ;!/* 111101nnmmmm0000 movs.w @-<REG_N>,<DSP_REG_M> */ {"movs.w",{A_DEC_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_0}, arch_sh_dsp_up}
+ movs.w @r4,a1 ;!/* 111101nnmmmm0001 movs.w @<REG_N>,<DSP_REG_M> */ {"movs.w",{A_IND_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_4}, arch_sh_dsp_up}
+ movs.w @r4+,a1 ;!/* 111101nnmmmm0010 movs.w @<REG_N>+,<DSP_REG_M> */ {"movs.w",{A_INC_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_8}, arch_sh_dsp_up}
+ movs.w @r4+r8,a1 ;!/* 111101nnmmmm0011 movs.w @<REG_N>+r8,<DSP_REG_M> */ {"movs.w",{AS_PMOD_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_C}, arch_sh_dsp_up}
+ movs.w a1,@-r4 ;!/* 111101nnmmmm0100 movs.w <DSP_REG_M>,@-<REG_N> */ {"movs.w",{DSP_REG_M,A_DEC_N},{HEX_F,SDT_REG_N,REG_M,HEX_1}, arch_sh_dsp_up}
+ movs.w a1,@r4 ;!/* 111101nnmmmm0101 movs.w <DSP_REG_M>,@<REG_N> */ {"movs.w",{DSP_REG_M,A_IND_N},{HEX_F,SDT_REG_N,REG_M,HEX_5}, arch_sh_dsp_up}
+ movs.w a1,@r4+ ;!/* 111101nnmmmm0110 movs.w <DSP_REG_M>,@<REG_N>+ */ {"movs.w",{DSP_REG_M,A_INC_N},{HEX_F,SDT_REG_N,REG_M,HEX_9}, arch_sh_dsp_up}
+ movs.w a1,@r4+r8 ;!/* 111101nnmmmm0111 movs.w <DSP_REG_M>,@<REG_N>+r8 */ {"movs.w",{DSP_REG_M,AS_PMOD_N},{HEX_F,SDT_REG_N,REG_M,HEX_D}, arch_sh_dsp_up}
+ movs.l @-r4,a1 ;!/* 111101nnmmmm1000 movs.l @-<REG_N>,<DSP_REG_M> */ {"movs.l",{A_DEC_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_2}, arch_sh_dsp_up}
+ movs.l @r4,a1 ;!/* 111101nnmmmm1001 movs.l @<REG_N>,<DSP_REG_M> */ {"movs.l",{A_IND_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_6}, arch_sh_dsp_up}
+ movs.l @r4+,a1 ;!/* 111101nnmmmm1010 movs.l @<REG_N>+,<DSP_REG_M> */ {"movs.l",{A_INC_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_A}, arch_sh_dsp_up}
+ movs.l @r4+r8,a1 ;!/* 111101nnmmmm1011 movs.l @<REG_N>+r8,<DSP_REG_M> */ {"movs.l",{AS_PMOD_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_E}, arch_sh_dsp_up}
+ movs.l a1,@-r4 ;!/* 111101nnmmmm1100 movs.l <DSP_REG_M>,@-<REG_N> */ {"movs.l",{DSP_REG_M,A_DEC_N},{HEX_F,SDT_REG_N,REG_M,HEX_3}, arch_sh_dsp_up}
+ movs.l a1,@r4 ;!/* 111101nnmmmm1101 movs.l <DSP_REG_M>,@<REG_N> */ {"movs.l",{DSP_REG_M,A_IND_N},{HEX_F,SDT_REG_N,REG_M,HEX_7}, arch_sh_dsp_up}
+ movs.l a1,@r4+ ;!/* 111101nnmmmm1110 movs.l <DSP_REG_M>,@<REG_N>+ */ {"movs.l",{DSP_REG_M,A_INC_N},{HEX_F,SDT_REG_N,REG_M,HEX_B}, arch_sh_dsp_up}
+ movs.l a1,@r4+r8 ;!/* 111101nnmmmm1111 movs.l <DSP_REG_M>,@<REG_N>+r8 */ {"movs.l",{DSP_REG_M,AS_PMOD_N},{HEX_F,SDT_REG_N,REG_M,HEX_F}, arch_sh_dsp_up}
+ nopx ;!/* 0*0*0*00** nopx */ {"nopx",{0},{PPI,NOPX}, arch_sh_dsp_up}
+ nopy ;!/* *0*0*0**00 nopy */ {"nopy",{0},{PPI,NOPY}, arch_sh_dsp_up}
+ movx.w @r4,x1 ;!/* n*m*0*01** movx.w @<REG_N>,<DSP_REG_X> */ {"movx.w",{AX_IND_N,DSP_REG_X},{PPI,MOVX,HEX_1}, arch_sh_dsp_up}
+ movx.w @r4+,x1 ;!/* n*m*0*10** movx.w @<REG_N>+,<DSP_REG_X> */ {"movx.w",{AX_INC_N,DSP_REG_X},{PPI,MOVX,HEX_2}, arch_sh_dsp_up}
+ movx.w @r4+r8,x1 ;!/* n*m*0*11** movx.w @<REG_N>+r8,<DSP_REG_X> */ {"movx.w",{AX_PMOD_N,DSP_REG_X},{PPI,MOVX,HEX_3}, arch_sh_dsp_up}
+ movx.w a1,@r4 ;!/* n*m*1*01** movx.w <DSP_REG_M>,@<REG_N> */ {"movx.w",{DSP_REG_A_M,AX_IND_N},{PPI,MOVX,HEX_9}, arch_sh_dsp_up}
+ movx.w a1,@r4+ ;!/* n*m*1*10** movx.w <DSP_REG_M>,@<REG_N>+ */ {"movx.w",{DSP_REG_A_M,AX_INC_N},{PPI,MOVX,HEX_A}, arch_sh_dsp_up}
+ movx.w a1,@r4+r8 ;!/* n*m*1*11** movx.w <DSP_REG_M>,@<REG_N>+r8 */ {"movx.w",{DSP_REG_A_M,AX_PMOD_N},{PPI,MOVX,HEX_B}, arch_sh_dsp_up}
+ movy.w @r6,y0 ;!/* *n*m*0**01 movy.w @<REG_N>,<DSP_REG_Y> */ {"movy.w",{AY_IND_N,DSP_REG_Y},{PPI,MOVY,HEX_1}, arch_sh_dsp_up}
+ movy.w @r6+,y0 ;!/* *n*m*0**10 movy.w @<REG_N>+,<DSP_REG_Y> */ {"movy.w",{AY_INC_N,DSP_REG_Y},{PPI,MOVY,HEX_2}, arch_sh_dsp_up}
+ movy.w @r6+r9,y0 ;!/* *n*m*0**11 movy.w @<REG_N>+r9,<DSP_REG_Y> */ {"movy.w",{AY_PMOD_N,DSP_REG_Y},{PPI,MOVY,HEX_3}, arch_sh_dsp_up}
+ movy.w a1,@r6 ;!/* *n*m*1**01 movy.w <DSP_REG_M>,@<REG_N> */ {"movy.w",{DSP_REG_A_M,AY_IND_N},{PPI,MOVY,HEX_9}, arch_sh_dsp_up}
+ movy.w a1,@r6+ ;!/* *n*m*1**10 movy.w <DSP_REG_M>,@<REG_N>+ */ {"movy.w",{DSP_REG_A_M,AY_INC_N},{PPI,MOVY,HEX_A}, arch_sh_dsp_up}
+ movy.w a1,@r6+r9 ;!/* *n*m*1**11 movy.w <DSP_REG_M>,@<REG_N>+r9 */ {"movy.w",{DSP_REG_A_M,AY_PMOD_N},{PPI,MOVY,HEX_B}, arch_sh_dsp_up}
+ pmuls x0,y0,m0 ;!/* 01aaeeffxxyyggnn pmuls Se,Sf,Dg */ {"pmuls",{DSP_REG_E,DSP_REG_F,DSP_REG_G},{PPI,PMUL}, arch_sh_dsp_up}
+ psubc x1,y0,m0 ;!/* 10100000xxyynnnn psubc <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"psubc",{DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPI3,HEX_A,HEX_0}, arch_sh_dsp_up}
+ paddc x1,y0,m0 ;!/* 10110000xxyynnnn paddc <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"paddc",{DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPI3,HEX_B,HEX_0}, arch_sh_dsp_up}
+ pcmp x1,y0 ;!/* 10000100xxyynnnn pcmp <DSP_REG_X>,<DSP_REG_Y> */ {"pcmp", {DSP_REG_X,DSP_REG_Y},{PPI,PPI3,HEX_8,HEX_4}, arch_sh_dsp_up}
+ pwsb x1,y0,m0 ;!/* 10100100xxyynnnn pwsb <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"pwsb", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPI3,HEX_A,HEX_4}, arch_sh_dsp_up}
+ pwad x1,y0,m0 ;!/* 10110100xxyynnnn pwad <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"pwad", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPI3,HEX_B,HEX_4}, arch_sh_dsp_up}
+ pabs x1,m0 ;!/* 10001000xxyynnnn pabs <DSP_REG_X>,<DSP_REG_N> */ {"pabs", {DSP_REG_X,DSP_REG_N},{PPI,PPI3NC,HEX_8,HEX_8}, arch_sh_dsp_up}
+ pabs y0,m0 ;!/* 10101000xxyynnnn pabs <DSP_REG_Y>,<DSP_REG_N> */ {"pabs", {DSP_REG_Y,DSP_REG_N},{PPI,PPI3NC,HEX_A,HEX_8}, arch_sh_dsp_up}
+ prnd x1,m0 ;!/* 10011000xxyynnnn prnd <DSP_REG_X>,<DSP_REG_N> */ {"prnd", {DSP_REG_X,DSP_REG_N},{PPI,PPI3NC,HEX_9,HEX_8}, arch_sh_dsp_up}
+ prnd y0,m0 ;!/* 10111000xxyynnnn prnd <DSP_REG_Y>,<DSP_REG_N> */ {"prnd", {DSP_REG_Y,DSP_REG_N},{PPI,PPI3NC,HEX_B,HEX_8}, arch_sh_dsp_up}
+ dct pshl x1,y0,m0 ;!/* 10000001xxyynnnn pshl <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"pshl", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_8,HEX_1}, arch_sh_dsp_up}
+ pshl #4,m0 ;!/* 00000iiiiiiinnnn pshl #<imm>,<DSP_REG_N> */ {"pshl",{A_IMM,DSP_REG_N},{PPI,PSH,HEX_0}, arch_sh_dsp_up}
+ dct psha x1,y0,m0 ;!/* 10010001xxyynnnn psha <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"psha", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_9,HEX_1}, arch_sh_dsp_up}
+ psha #4,m0 ;!/* 00010iiiiiiinnnn psha #<imm>,<DSP_REG_N> */ {"psha",{A_IMM,DSP_REG_N},{PPI,PSH,HEX_1}, arch_sh_dsp_up}
+ dct psub x1,y0,m0 ;!/* 10100001xxyynnnn psub <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"psub", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_A,HEX_1}, arch_sh_dsp_up}
+ dct padd x1,y0,m0 ;!/* 10110001xxyynnnn padd <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"padd", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_B,HEX_1}, arch_sh_dsp_up}
+ dct pand x1,y0,m0 ;!/* 10010101xxyynnnn pand <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"pand", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_9,HEX_5}, arch_sh_dsp_up}
+ dct pxor x1,y0,m0 ;!/* 10100101xxyynnnn pxor <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"pxor", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_A,HEX_5}, arch_sh_dsp_up}
+ dct por x1,y0,m0 ;!/* 10110101xxyynnnn por <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"por", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_B,HEX_5}, arch_sh_dsp_up}
+ dct pdec x1,m0 ;!/* 10001001xxyynnnn pdec <DSP_REG_X>,<DSP_REG_N> */ {"pdec", {DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_8,HEX_9}, arch_sh_dsp_up}
+ dct pdec y0,m0 ;!/* 10101001xxyynnnn pdec <DSP_REG_Y>,<DSP_REG_N> */ {"pdec", {DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_A,HEX_9}, arch_sh_dsp_up}
+ dct pinc x1,m0 ;!/* 10011001xx00nnnn pinc <DSP_REG_X>,<DSP_REG_N> */ {"pinc", {DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_9,HEX_9,HEX_XX00}, arch_sh_dsp_up}
+ dct pinc y0,m0 ;!/* 1011100100yynnnn pinc <DSP_REG_Y>,<DSP_REG_N> */ {"pinc", {DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_B,HEX_9,HEX_00YY}, arch_sh_dsp_up}
+ dct pclr m0 ;!/* 10001101xxyynnnn pclr <DSP_REG_N> */ {"pclr", {DSP_REG_N},{PPI,PPIC,HEX_8,HEX_D}, arch_sh_dsp_up}
+ dct pdmsb x1,m0 ;!/* 10011101xx00nnnn pdmsb <DSP_REG_X>,<DSP_REG_N> */ {"pdmsb", {DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_9,HEX_D,HEX_XX00}, arch_sh_dsp_up}
+ dct pdmsb y0,m0 ;!/* 1011110100yynnnn pdmsb <DSP_REG_Y>,<DSP_REG_N> */ {"pdmsb", {DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_B,HEX_D,HEX_00YY}, arch_sh_dsp_up}
+ dct pneg x1,m0 ;!/* 11001001xxyynnnn pneg <DSP_REG_X>,<DSP_REG_N> */ {"pneg", {DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_C,HEX_9}, arch_sh_dsp_up}
+ dct pneg y0,m0 ;!/* 11101001xxyynnnn pneg <DSP_REG_Y>,<DSP_REG_N> */ {"pneg", {DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_E,HEX_9}, arch_sh_dsp_up}
+ dct pcopy x1,m0 ;!/* 11011001xxyynnnn pcopy <DSP_REG_X>,<DSP_REG_N> */ {"pcopy", {DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_D,HEX_9}, arch_sh_dsp_up}
+ dct pcopy y0,m0 ;!/* 11111001xxyynnnn pcopy <DSP_REG_Y>,<DSP_REG_N> */ {"pcopy", {DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_F,HEX_9}, arch_sh_dsp_up}
+ dct psts MACH,m0 ;!/* 11001101xxyynnnn psts MACH,<DSP_REG_N> */ {"psts", {A_MACH,DSP_REG_N},{PPI,PPIC,HEX_C,HEX_D}, arch_sh_dsp_up}
+ dct psts MACL,m0 ;!/* 11011101xxyynnnn psts MACL,<DSP_REG_N> */ {"psts", {A_MACL,DSP_REG_N},{PPI,PPIC,HEX_D,HEX_D}, arch_sh_dsp_up}
+ dct plds m0,MACH ;!/* 11101101xxyynnnn plds <DSP_REG_N>,MACH */ {"plds", {DSP_REG_N,A_MACH},{PPI,PPIC,HEX_E,HEX_D}, arch_sh_dsp_up}
+ dct plds m0,MACL ;!/* 11111101xxyynnnn plds <DSP_REG_N>,MACL */ {"plds", {DSP_REG_N,A_MACL},{PPI,PPIC,HEX_F,HEX_D}, arch_sh_dsp_up}
diff --git a/binutils-2.21/ld/testsuite/ld-sh/arch/sh3-nommu.s b/binutils-2.21/ld/testsuite/ld-sh/arch/sh3-nommu.s
new file mode 100644
index 0000000..bc6096e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/arch/sh3-nommu.s
@@ -0,0 +1,180 @@
+! Generated file. DO NOT EDIT.
+!
+! This file was generated by gas/testsuite/gas/sh/arch/arch.exp .
+! This file should contain every instruction valid on
+! architecture sh3-nommu but no more.
+! If the tests are failing because the expected results
+! have changed then run 'make check' and copy the new file
+! from <objdir>/gas/testsuite/sh3-nommu.s
+! to <srcdir>/gas/testsuite/gas/sh/arch/sh3-nommu.s .
+! Make sure there are no unexpected or missing instructions.
+
+ .section .text
+sh3_nommu:
+! Instructions introduced into sh3-nommu
+ ldc r4,SSR ;!/* 0100nnnn00111110 ldc <REG_N>,SSR */{"ldc",{A_REG_N,A_SSR},{HEX_4,REG_N,HEX_3,HEX_E}, arch_sh3_nommu_up}
+ ldc r4,SPC ;!/* 0100nnnn01001110 ldc <REG_N>,SPC */{"ldc",{A_REG_N,A_SPC},{HEX_4,REG_N,HEX_4,HEX_E}, arch_sh3_nommu_up}
+ ldc r4,r1_bank ;!/* 0100nnnn1xxx1110 ldc <REG_N>,Rn_BANK */{"ldc",{A_REG_N,A_REG_B},{HEX_4,REG_N,REG_B,HEX_E}, arch_sh3_nommu_up}
+ ldc.l @r4+,SSR ;!/* 0100nnnn00110111 ldc.l @<REG_N>+,SSR */{"ldc.l",{A_INC_N,A_SSR},{HEX_4,REG_N,HEX_3,HEX_7}, arch_sh3_nommu_up}
+ ldc.l @r4+,SPC ;!/* 0100nnnn01000111 ldc.l @<REG_N>+,SPC */{"ldc.l",{A_INC_N,A_SPC},{HEX_4,REG_N,HEX_4,HEX_7}, arch_sh3_nommu_up}
+ ldc.l @r4+,r1_bank ;!/* 0100nnnn1xxx0111 ldc.l @<REG_N>+,Rn_BANK */{"ldc.l",{A_INC_N,A_REG_B},{HEX_4,REG_N,REG_B,HEX_7}, arch_sh3_nommu_up}
+ stc SSR,r4 ;!/* 0000nnnn00110010 stc SSR,<REG_N> */{"stc",{A_SSR,A_REG_N},{HEX_0,REG_N,HEX_3,HEX_2}, arch_sh3_nommu_up}
+ stc SPC,r4 ;!/* 0000nnnn01000010 stc SPC,<REG_N> */{"stc",{A_SPC,A_REG_N},{HEX_0,REG_N,HEX_4,HEX_2}, arch_sh3_nommu_up}
+ stc r1_bank,r4 ;!/* 0000nnnn1xxx0010 stc Rn_BANK,<REG_N> */{"stc",{A_REG_B,A_REG_N},{HEX_0,REG_N,REG_B,HEX_2}, arch_sh3_nommu_up}
+ stc.l SSR,@-r4 ;!/* 0100nnnn00110011 stc.l SSR,@-<REG_N> */{"stc.l",{A_SSR,A_DEC_N},{HEX_4,REG_N,HEX_3,HEX_3}, arch_sh3_nommu_up}
+ stc.l SPC,@-r4 ;!/* 0100nnnn01000011 stc.l SPC,@-<REG_N> */{"stc.l",{A_SPC,A_DEC_N},{HEX_4,REG_N,HEX_4,HEX_3}, arch_sh3_nommu_up}
+ stc.l r1_bank,@-r4 ;!/* 0100nnnn1xxx0011 stc.l Rn_BANK,@-<REG_N> */{"stc.l",{A_REG_B,A_DEC_N},{HEX_4,REG_N,REG_B,HEX_3}, arch_sh3_nommu_up}
+
+! Instructions inherited from ancestors: sh sh2 sh2a-nofpu-or-sh3-nommu
+ add #4,r4 ;!/* 0111nnnni8*1.... add #<imm>,<REG_N> */{"add",{A_IMM,A_REG_N},{HEX_7,REG_N,IMM0_8}, arch_sh_up}
+ add r5,r4 ;!/* 0011nnnnmmmm1100 add <REG_M>,<REG_N> */{"add",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_C}, arch_sh_up}
+ addc r5,r4 ;!/* 0011nnnnmmmm1110 addc <REG_M>,<REG_N>*/{"addc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_E}, arch_sh_up}
+ addv r5,r4 ;!/* 0011nnnnmmmm1111 addv <REG_M>,<REG_N>*/{"addv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_F}, arch_sh_up}
+ and #4,R0 ;!/* 11001001i8*1.... and #<imm>,R0 */{"and",{A_IMM,A_R0},{HEX_C,HEX_9,IMM0_8}, arch_sh_up}
+ and r5,r4 ;!/* 0010nnnnmmmm1001 and <REG_M>,<REG_N> */{"and",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_9}, arch_sh_up}
+ and.b #4,@(R0,GBR) ;!/* 11001101i8*1.... and.b #<imm>,@(R0,GBR)*/{"and.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_D,IMM0_8}, arch_sh_up}
+ bra .+8 ;!/* 1010i12......... bra <bdisp12> */{"bra",{A_BDISP12},{HEX_A,BRANCH_12}, arch_sh_up}
+ bsr .+8 ;!/* 1011i12......... bsr <bdisp12> */{"bsr",{A_BDISP12},{HEX_B,BRANCH_12}, arch_sh_up}
+ bt .+8 ;!/* 10001001i8p1.... bt <bdisp8> */{"bt",{A_BDISP8},{HEX_8,HEX_9,BRANCH_8}, arch_sh_up}
+ bf .+8 ;!/* 10001011i8p1.... bf <bdisp8> */{"bf",{A_BDISP8},{HEX_8,HEX_B,BRANCH_8}, arch_sh_up}
+ bt.s .+8 ;!/* 10001101i8p1.... bt.s <bdisp8> */{"bt.s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bt/s .+8 ;!/* 10001101i8p1.... bt/s <bdisp8> */{"bt/s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bf.s .+8 ;!/* 10001111i8p1.... bf.s <bdisp8> */{"bf.s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ bf/s .+8 ;!/* 10001111i8p1.... bf/s <bdisp8> */{"bf/s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ clrmac ;!/* 0000000000101000 clrmac */{"clrmac",{0},{HEX_0,HEX_0,HEX_2,HEX_8}, arch_sh_up}
+ clrs ;!/* 0000000001001000 clrs */{"clrs",{0},{HEX_0,HEX_0,HEX_4,HEX_8}, arch_sh_up}
+ clrt ;!/* 0000000000001000 clrt */{"clrt",{0},{HEX_0,HEX_0,HEX_0,HEX_8}, arch_sh_up}
+ cmp/eq #4,R0 ;!/* 10001000i8*1.... cmp/eq #<imm>,R0 */{"cmp/eq",{A_IMM,A_R0},{HEX_8,HEX_8,IMM0_8}, arch_sh_up}
+ cmp/eq r5,r4 ;!/* 0011nnnnmmmm0000 cmp/eq <REG_M>,<REG_N>*/{"cmp/eq",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_0}, arch_sh_up}
+ cmp/ge r5,r4 ;!/* 0011nnnnmmmm0011 cmp/ge <REG_M>,<REG_N>*/{"cmp/ge",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_3}, arch_sh_up}
+ cmp/gt r5,r4 ;!/* 0011nnnnmmmm0111 cmp/gt <REG_M>,<REG_N>*/{"cmp/gt",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_7}, arch_sh_up}
+ cmp/hi r5,r4 ;!/* 0011nnnnmmmm0110 cmp/hi <REG_M>,<REG_N>*/{"cmp/hi",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_6}, arch_sh_up}
+ cmp/hs r5,r4 ;!/* 0011nnnnmmmm0010 cmp/hs <REG_M>,<REG_N>*/{"cmp/hs",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_2}, arch_sh_up}
+ cmp/pl r4 ;!/* 0100nnnn00010101 cmp/pl <REG_N> */{"cmp/pl",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_5}, arch_sh_up}
+ cmp/pz r4 ;!/* 0100nnnn00010001 cmp/pz <REG_N> */{"cmp/pz",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_1}, arch_sh_up}
+ cmp/str r5,r4 ;!/* 0010nnnnmmmm1100 cmp/str <REG_M>,<REG_N>*/{"cmp/str",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_C}, arch_sh_up}
+ div0s r5,r4 ;!/* 0010nnnnmmmm0111 div0s <REG_M>,<REG_N>*/{"div0s",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_7}, arch_sh_up}
+ div0u ;!/* 0000000000011001 div0u */{"div0u",{0},{HEX_0,HEX_0,HEX_1,HEX_9}, arch_sh_up}
+ div1 r5,r4 ;!/* 0011nnnnmmmm0100 div1 <REG_M>,<REG_N>*/{"div1",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_4}, arch_sh_up}
+ exts.b r5,r4 ;!/* 0110nnnnmmmm1110 exts.b <REG_M>,<REG_N>*/{"exts.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_E}, arch_sh_up}
+ exts.w r5,r4 ;!/* 0110nnnnmmmm1111 exts.w <REG_M>,<REG_N>*/{"exts.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_F}, arch_sh_up}
+ extu.b r5,r4 ;!/* 0110nnnnmmmm1100 extu.b <REG_M>,<REG_N>*/{"extu.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_C}, arch_sh_up}
+ extu.w r5,r4 ;!/* 0110nnnnmmmm1101 extu.w <REG_M>,<REG_N>*/{"extu.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_D}, arch_sh_up}
+ jmp @r4 ;!/* 0100nnnn00101011 jmp @<REG_N> */{"jmp",{A_IND_N},{HEX_4,REG_N,HEX_2,HEX_B}, arch_sh_up}
+ jsr @r4 ;!/* 0100nnnn00001011 jsr @<REG_N> */{"jsr",{A_IND_N},{HEX_4,REG_N,HEX_0,HEX_B}, arch_sh_up}
+ ldc r4,SR ;!/* 0100nnnn00001110 ldc <REG_N>,SR */{"ldc",{A_REG_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_E}, arch_sh_up}
+ ldc r4,GBR ;!/* 0100nnnn00011110 ldc <REG_N>,GBR */{"ldc",{A_REG_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_E}, arch_sh_up}
+ ldc r4,VBR ;!/* 0100nnnn00101110 ldc <REG_N>,VBR */{"ldc",{A_REG_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_E}, arch_sh_up}
+ ldc.l @r4+,SR ;!/* 0100nnnn00000111 ldc.l @<REG_N>+,SR */{"ldc.l",{A_INC_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_7}, arch_sh_up}
+ ldc.l @r4+,GBR ;!/* 0100nnnn00010111 ldc.l @<REG_N>+,GBR */{"ldc.l",{A_INC_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_7}, arch_sh_up}
+ ldc.l @r4+,VBR ;!/* 0100nnnn00100111 ldc.l @<REG_N>+,VBR */{"ldc.l",{A_INC_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_7}, arch_sh_up}
+ lds r4,MACH ;!/* 0100nnnn00001010 lds <REG_N>,MACH */{"lds",{A_REG_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ lds r4,MACL ;!/* 0100nnnn00011010 lds <REG_N>,MACL */{"lds",{A_REG_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ lds r4,PR ;!/* 0100nnnn00101010 lds <REG_N>,PR */{"lds",{A_REG_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ lds.l @r4+,MACH ;!/* 0100nnnn00000110 lds.l @<REG_N>+,MACH*/{"lds.l",{A_INC_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_6}, arch_sh_up}
+ lds.l @r4+,MACL ;!/* 0100nnnn00010110 lds.l @<REG_N>+,MACL*/{"lds.l",{A_INC_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_6}, arch_sh_up}
+ lds.l @r4+,PR ;!/* 0100nnnn00100110 lds.l @<REG_N>+,PR */{"lds.l",{A_INC_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_6}, arch_sh_up}
+ mac.w @r5+,@r4+ ;!/* 0100nnnnmmmm1111 mac.w @<REG_M>+,@<REG_N>+*/{"mac.w",{A_INC_M,A_INC_N},{HEX_4,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mov #4,r4 ;!/* 1110nnnni8*1.... mov #<imm>,<REG_N> */{"mov",{A_IMM,A_REG_N},{HEX_E,REG_N,IMM0_8}, arch_sh_up}
+ mov r5,r4 ;!/* 0110nnnnmmmm0011 mov <REG_M>,<REG_N> */{"mov",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_3}, arch_sh_up}
+ mov.b r5,@(R0,r4) ;!/* 0000nnnnmmmm0100 mov.b <REG_M>,@(R0,<REG_N>)*/{"mov.b",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@-r4 ;!/* 0010nnnnmmmm0100 mov.b <REG_M>,@-<REG_N>*/{"mov.b",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@r4 ;!/* 0010nnnnmmmm0000 mov.b <REG_M>,@<REG_N>*/{"mov.b",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b @(8,r5),R0 ;!/* 10000100mmmmi4*1 mov.b @(<disp>,<REG_M>),R0*/{"mov.b",{A_DISP_REG_M,A_R0},{HEX_8,HEX_4,REG_M,IMM0_4}, arch_sh_up}
+ mov.b @(8,GBR),R0 ;!/* 11000100i8*1.... mov.b @(<disp>,GBR),R0*/{"mov.b",{A_DISP_GBR,A_R0},{HEX_C,HEX_4,IMM0_8}, arch_sh_up}
+ mov.b @(R0,r5),r4 ;!/* 0000nnnnmmmm1100 mov.b @(R0,<REG_M>),<REG_N>*/{"mov.b",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_C}, arch_sh_up}
+ mov.b @r5+,r4 ;!/* 0110nnnnmmmm0100 mov.b @<REG_M>+,<REG_N>*/{"mov.b",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b @r5,r4 ;!/* 0110nnnnmmmm0000 mov.b @<REG_M>,<REG_N>*/{"mov.b",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b R0,@(8,r5) ;!/* 10000000mmmmi4*1 mov.b R0,@(<disp>,<REG_M>)*/{"mov.b",{A_R0,A_DISP_REG_M},{HEX_8,HEX_0,REG_M,IMM1_4}, arch_sh_up}
+ mov.b R0,@(8,GBR) ;!/* 11000000i8*1.... mov.b R0,@(<disp>,GBR)*/{"mov.b",{A_R0,A_DISP_GBR},{HEX_C,HEX_0,IMM1_8}, arch_sh_up}
+ mov.l r5,@(8,r4) ;!/* 0001nnnnmmmmi4*4 mov.l <REG_M>,@(<disp>,<REG_N>)*/{"mov.l",{ A_REG_M,A_DISP_REG_N},{HEX_1,REG_N,REG_M,IMM1_4BY4}, arch_sh_up}
+ mov.l r5,@(R0,r4) ;!/* 0000nnnnmmmm0110 mov.l <REG_M>,@(R0,<REG_N>)*/{"mov.l",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@-r4 ;!/* 0010nnnnmmmm0110 mov.l <REG_M>,@-<REG_N>*/{"mov.l",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@r4 ;!/* 0010nnnnmmmm0010 mov.l <REG_M>,@<REG_N>*/{"mov.l",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l @(8,r5),r4 ;!/* 0101nnnnmmmmi4*4 mov.l @(<disp>,<REG_M>),<REG_N>*/{"mov.l",{A_DISP_REG_M,A_REG_N},{HEX_5,REG_N,REG_M,IMM0_4BY4}, arch_sh_up}
+ mov.l @(8,GBR),R0 ;!/* 11000110i8*4.... mov.l @(<disp>,GBR),R0*/{"mov.l",{A_DISP_GBR,A_R0},{HEX_C,HEX_6,IMM0_8BY4}, arch_sh_up}
+ .align 2
+ mov.l @(8,PC),r4 ;!/* 1101nnnni8p4.... mov.l @(<disp>,PC),<REG_N>*/{"mov.l",{A_DISP_PC,A_REG_N},{HEX_D,REG_N,PCRELIMM_8BY4}, arch_sh_up}
+ mov.l @(R0,r5),r4 ;!/* 0000nnnnmmmm1110 mov.l @(R0,<REG_M>),<REG_N>*/{"mov.l",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mov.l @r5+,r4 ;!/* 0110nnnnmmmm0110 mov.l @<REG_M>+,<REG_N>*/{"mov.l",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l @r5,r4 ;!/* 0110nnnnmmmm0010 mov.l @<REG_M>,<REG_N>*/{"mov.l",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l R0,@(8,GBR) ;!/* 11000010i8*4.... mov.l R0,@(<disp>,GBR)*/{"mov.l",{A_R0,A_DISP_GBR},{HEX_C,HEX_2,IMM1_8BY4}, arch_sh_up}
+ mov.w r5,@(R0,r4) ;!/* 0000nnnnmmmm0101 mov.w <REG_M>,@(R0,<REG_N>)*/{"mov.w",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@-r4 ;!/* 0010nnnnmmmm0101 mov.w <REG_M>,@-<REG_N>*/{"mov.w",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@r4 ;!/* 0010nnnnmmmm0001 mov.w <REG_M>,@<REG_N>*/{"mov.w",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w @(8,r5),R0 ;!/* 10000101mmmmi4*2 mov.w @(<disp>,<REG_M>),R0*/{"mov.w",{A_DISP_REG_M,A_R0},{HEX_8,HEX_5,REG_M,IMM0_4BY2}, arch_sh_up}
+ mov.w @(8,GBR),R0 ;!/* 11000101i8*2.... mov.w @(<disp>,GBR),R0*/{"mov.w",{A_DISP_GBR,A_R0},{HEX_C,HEX_5,IMM0_8BY2}, arch_sh_up}
+ mov.w @(8,PC),r4 ;!/* 1001nnnni8p2.... mov.w @(<disp>,PC),<REG_N>*/{"mov.w",{A_DISP_PC,A_REG_N},{HEX_9,REG_N,PCRELIMM_8BY2}, arch_sh_up}
+ mov.w @(R0,r5),r4 ;!/* 0000nnnnmmmm1101 mov.w @(R0,<REG_M>),<REG_N>*/{"mov.w",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_D}, arch_sh_up}
+ mov.w @r5+,r4 ;!/* 0110nnnnmmmm0101 mov.w @<REG_M>+,<REG_N>*/{"mov.w",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w @r5,r4 ;!/* 0110nnnnmmmm0001 mov.w @<REG_M>,<REG_N>*/{"mov.w",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w R0,@(8,r5) ;!/* 10000001mmmmi4*2 mov.w R0,@(<disp>,<REG_M>)*/{"mov.w",{A_R0,A_DISP_REG_M},{HEX_8,HEX_1,REG_M,IMM1_4BY2}, arch_sh_up}
+ mov.w R0,@(8,GBR) ;!/* 11000001i8*2.... mov.w R0,@(<disp>,GBR)*/{"mov.w",{A_R0,A_DISP_GBR},{HEX_C,HEX_1,IMM1_8BY2}, arch_sh_up}
+ .align 2
+ mova @(8,PC),R0 ;!/* 11000111i8p4.... mova @(<disp>,PC),R0*/{"mova",{A_DISP_PC,A_R0},{HEX_C,HEX_7,PCRELIMM_8BY4}, arch_sh_up}
+ movt r4 ;!/* 0000nnnn00101001 movt <REG_N> */{"movt",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ muls.w r5,r4 ;!/* 0010nnnnmmmm1111 muls.w <REG_M>,<REG_N>*/{"muls.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ muls r5,r4 ;!/* 0010nnnnmmmm1111 muls <REG_M>,<REG_N>*/{"muls",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mul.l r5,r4 ;!/* 0000nnnnmmmm0111 mul.l <REG_M>,<REG_N>*/{"mul.l",{ A_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_7}, arch_sh2_up}
+ mulu.w r5,r4 ;!/* 0010nnnnmmmm1110 mulu.w <REG_M>,<REG_N>*/{"mulu.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mulu r5,r4 ;!/* 0010nnnnmmmm1110 mulu <REG_M>,<REG_N>*/{"mulu",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ neg r5,r4 ;!/* 0110nnnnmmmm1011 neg <REG_M>,<REG_N> */{"neg",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_B}, arch_sh_up}
+ negc r5,r4 ;!/* 0110nnnnmmmm1010 negc <REG_M>,<REG_N>*/{"negc",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_A}, arch_sh_up}
+ nop ;!/* 0000000000001001 nop */{"nop",{0},{HEX_0,HEX_0,HEX_0,HEX_9}, arch_sh_up}
+ not r5,r4 ;!/* 0110nnnnmmmm0111 not <REG_M>,<REG_N> */{"not",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_7}, arch_sh_up}
+ or #4,R0 ;!/* 11001011i8*1.... or #<imm>,R0 */{"or",{A_IMM,A_R0},{HEX_C,HEX_B,IMM0_8}, arch_sh_up}
+ or r5,r4 ;!/* 0010nnnnmmmm1011 or <REG_M>,<REG_N> */{"or",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_B}, arch_sh_up}
+ or.b #4,@(R0,GBR) ;!/* 11001111i8*1.... or.b #<imm>,@(R0,GBR)*/{"or.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_F,IMM0_8}, arch_sh_up}
+ rotcl r4 ;!/* 0100nnnn00100100 rotcl <REG_N> */{"rotcl",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_4}, arch_sh_up}
+ rotcr r4 ;!/* 0100nnnn00100101 rotcr <REG_N> */{"rotcr",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_5}, arch_sh_up}
+ rotl r4 ;!/* 0100nnnn00000100 rotl <REG_N> */{"rotl",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_4}, arch_sh_up}
+ rotr r4 ;!/* 0100nnnn00000101 rotr <REG_N> */{"rotr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_5}, arch_sh_up}
+ rte ;!/* 0000000000101011 rte */{"rte",{0},{HEX_0,HEX_0,HEX_2,HEX_B}, arch_sh_up}
+ rts ;!/* 0000000000001011 rts */{"rts",{0},{HEX_0,HEX_0,HEX_0,HEX_B}, arch_sh_up}
+ sets ;!/* 0000000001011000 sets */{"sets",{0},{HEX_0,HEX_0,HEX_5,HEX_8}, arch_sh_up}
+ sett ;!/* 0000000000011000 sett */{"sett",{0},{HEX_0,HEX_0,HEX_1,HEX_8}, arch_sh_up}
+ shad r5,r4 ;!/* 0100nnnnmmmm1100 shad <REG_M>,<REG_N>*/{"shad",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_C}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shld r5,r4 ;!/* 0100nnnnmmmm1101 shld <REG_M>,<REG_N>*/{"shld",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_D}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shal r4 ;!/* 0100nnnn00100000 shal <REG_N> */{"shal",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_0}, arch_sh_up}
+ shar r4 ;!/* 0100nnnn00100001 shar <REG_N> */{"shar",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_1}, arch_sh_up}
+ shll r4 ;!/* 0100nnnn00000000 shll <REG_N> */{"shll",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_0}, arch_sh_up}
+ shll16 r4 ;!/* 0100nnnn00101000 shll16 <REG_N> */{"shll16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_8}, arch_sh_up}
+ shll2 r4 ;!/* 0100nnnn00001000 shll2 <REG_N> */{"shll2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_8}, arch_sh_up}
+ shll8 r4 ;!/* 0100nnnn00011000 shll8 <REG_N> */{"shll8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_8}, arch_sh_up}
+ shlr r4 ;!/* 0100nnnn00000001 shlr <REG_N> */{"shlr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_1}, arch_sh_up}
+ shlr16 r4 ;!/* 0100nnnn00101001 shlr16 <REG_N> */{"shlr16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ shlr2 r4 ;!/* 0100nnnn00001001 shlr2 <REG_N> */{"shlr2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_9}, arch_sh_up}
+ shlr8 r4 ;!/* 0100nnnn00011001 shlr8 <REG_N> */{"shlr8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_9}, arch_sh_up}
+ sleep ;!/* 0000000000011011 sleep */{"sleep",{0},{HEX_0,HEX_0,HEX_1,HEX_B}, arch_sh_up}
+ stc SR,r4 ;!/* 0000nnnn00000010 stc SR,<REG_N> */{"stc",{A_SR,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ stc GBR,r4 ;!/* 0000nnnn00010010 stc GBR,<REG_N> */{"stc",{A_GBR,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ stc VBR,r4 ;!/* 0000nnnn00100010 stc VBR,<REG_N> */{"stc",{A_VBR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ stc.l SR,@-r4 ;!/* 0100nnnn00000011 stc.l SR,@-<REG_N> */{"stc.l",{A_SR,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_3}, arch_sh_up}
+ stc.l VBR,@-r4 ;!/* 0100nnnn00100011 stc.l VBR,@-<REG_N> */{"stc.l",{A_VBR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_3}, arch_sh_up}
+ stc.l GBR,@-r4 ;!/* 0100nnnn00010011 stc.l GBR,@-<REG_N> */{"stc.l",{A_GBR,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_3}, arch_sh_up}
+ sts MACH,r4 ;!/* 0000nnnn00001010 sts MACH,<REG_N> */{"sts",{A_MACH,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ sts MACL,r4 ;!/* 0000nnnn00011010 sts MACL,<REG_N> */{"sts",{A_MACL,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ sts PR,r4 ;!/* 0000nnnn00101010 sts PR,<REG_N> */{"sts",{A_PR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ sts.l MACH,@-r4 ;!/* 0100nnnn00000010 sts.l MACH,@-<REG_N>*/{"sts.l",{A_MACH,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ sts.l MACL,@-r4 ;!/* 0100nnnn00010010 sts.l MACL,@-<REG_N>*/{"sts.l",{A_MACL,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ sts.l PR,@-r4 ;!/* 0100nnnn00100010 sts.l PR,@-<REG_N> */{"sts.l",{A_PR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ sub r5,r4 ;!/* 0011nnnnmmmm1000 sub <REG_M>,<REG_N> */{"sub",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_8}, arch_sh_up}
+ subc r5,r4 ;!/* 0011nnnnmmmm1010 subc <REG_M>,<REG_N>*/{"subc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_A}, arch_sh_up}
+ subv r5,r4 ;!/* 0011nnnnmmmm1011 subv <REG_M>,<REG_N>*/{"subv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_B}, arch_sh_up}
+ swap.b r5,r4 ;!/* 0110nnnnmmmm1000 swap.b <REG_M>,<REG_N>*/{"swap.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_8}, arch_sh_up}
+ swap.w r5,r4 ;!/* 0110nnnnmmmm1001 swap.w <REG_M>,<REG_N>*/{"swap.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_9}, arch_sh_up}
+ tas.b @r4 ;!/* 0100nnnn00011011 tas.b @<REG_N> */{"tas.b",{A_IND_N},{HEX_4,REG_N,HEX_1,HEX_B}, arch_sh_up}
+ trapa #4 ;!/* 11000011i8*1.... trapa #<imm> */{"trapa",{A_IMM},{HEX_C,HEX_3,IMM0_8}, arch_sh_up}
+ tst #4,R0 ;!/* 11001000i8*1.... tst #<imm>,R0 */{"tst",{A_IMM,A_R0},{HEX_C,HEX_8,IMM0_8}, arch_sh_up}
+ tst r5,r4 ;!/* 0010nnnnmmmm1000 tst <REG_M>,<REG_N> */{"tst",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_8}, arch_sh_up}
+ tst.b #4,@(R0,GBR) ;!/* 11001100i8*1.... tst.b #<imm>,@(R0,GBR)*/{"tst.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_C,IMM0_8}, arch_sh_up}
+ xor #4,R0 ;!/* 11001010i8*1.... xor #<imm>,R0 */{"xor",{A_IMM,A_R0},{HEX_C,HEX_A,IMM0_8}, arch_sh_up}
+ xor r5,r4 ;!/* 0010nnnnmmmm1010 xor <REG_M>,<REG_N> */{"xor",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_A}, arch_sh_up}
+ xor.b #4,@(R0,GBR) ;!/* 11001110i8*1.... xor.b #<imm>,@(R0,GBR)*/{"xor.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_E,IMM0_8}, arch_sh_up}
+ xtrct r5,r4 ;!/* 0010nnnnmmmm1101 xtrct <REG_M>,<REG_N>*/{"xtrct",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_D}, arch_sh_up}
+ dt r4 ;!/* 0100nnnn00010000 dt <REG_N> */{"dt",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_0}, arch_sh2_up}
+ dmuls.l r5,r4 ;!/* 0011nnnnmmmm1101 dmuls.l <REG_M>,<REG_N>*/{"dmuls.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_D}, arch_sh2_up}
+ dmulu.l r5,r4 ;!/* 0011nnnnmmmm0101 dmulu.l <REG_M>,<REG_N>*/{"dmulu.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_5}, arch_sh2_up}
+ mac.l @r5+,@r4+ ;!/* 0000nnnnmmmm1111 mac.l @<REG_M>+,@<REG_N>+*/{"mac.l",{A_INC_M,A_INC_N},{HEX_0,REG_N,REG_M,HEX_F}, arch_sh2_up}
+ braf r4 ;!/* 0000nnnn00100011 braf <REG_N> */{"braf",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_3}, arch_sh2_up}
+ bsrf r4 ;!/* 0000nnnn00000011 bsrf <REG_N> */{"bsrf",{A_REG_N},{HEX_0,REG_N,HEX_0,HEX_3}, arch_sh2_up}
diff --git a/binutils-2.21/ld/testsuite/ld-sh/arch/sh3.s b/binutils-2.21/ld/testsuite/ld-sh/arch/sh3.s
new file mode 100644
index 0000000..5e031c0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/arch/sh3.s
@@ -0,0 +1,181 @@
+! Generated file. DO NOT EDIT.
+!
+! This file was generated by gas/testsuite/gas/sh/arch/arch.exp .
+! This file should contain every instruction valid on
+! architecture sh3 but no more.
+! If the tests are failing because the expected results
+! have changed then run 'make check' and copy the new file
+! from <objdir>/gas/testsuite/sh3.s
+! to <srcdir>/gas/testsuite/gas/sh/arch/sh3.s .
+! Make sure there are no unexpected or missing instructions.
+
+ .section .text
+sh3:
+! Instructions introduced into sh3
+ ldtlb ;!/* 0000000000111000 ldtlb */{"ldtlb",{0},{HEX_0,HEX_0,HEX_3,HEX_8}, arch_sh3_up}
+
+! Instructions inherited from ancestors: sh sh2 sh2a-nofpu-or-sh3-nommu sh3-nommu
+ add #4,r4 ;!/* 0111nnnni8*1.... add #<imm>,<REG_N> */{"add",{A_IMM,A_REG_N},{HEX_7,REG_N,IMM0_8}, arch_sh_up}
+ add r5,r4 ;!/* 0011nnnnmmmm1100 add <REG_M>,<REG_N> */{"add",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_C}, arch_sh_up}
+ addc r5,r4 ;!/* 0011nnnnmmmm1110 addc <REG_M>,<REG_N>*/{"addc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_E}, arch_sh_up}
+ addv r5,r4 ;!/* 0011nnnnmmmm1111 addv <REG_M>,<REG_N>*/{"addv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_F}, arch_sh_up}
+ and #4,R0 ;!/* 11001001i8*1.... and #<imm>,R0 */{"and",{A_IMM,A_R0},{HEX_C,HEX_9,IMM0_8}, arch_sh_up}
+ and r5,r4 ;!/* 0010nnnnmmmm1001 and <REG_M>,<REG_N> */{"and",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_9}, arch_sh_up}
+ and.b #4,@(R0,GBR) ;!/* 11001101i8*1.... and.b #<imm>,@(R0,GBR)*/{"and.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_D,IMM0_8}, arch_sh_up}
+ bra .+8 ;!/* 1010i12......... bra <bdisp12> */{"bra",{A_BDISP12},{HEX_A,BRANCH_12}, arch_sh_up}
+ bsr .+8 ;!/* 1011i12......... bsr <bdisp12> */{"bsr",{A_BDISP12},{HEX_B,BRANCH_12}, arch_sh_up}
+ bt .+8 ;!/* 10001001i8p1.... bt <bdisp8> */{"bt",{A_BDISP8},{HEX_8,HEX_9,BRANCH_8}, arch_sh_up}
+ bf .+8 ;!/* 10001011i8p1.... bf <bdisp8> */{"bf",{A_BDISP8},{HEX_8,HEX_B,BRANCH_8}, arch_sh_up}
+ bt.s .+8 ;!/* 10001101i8p1.... bt.s <bdisp8> */{"bt.s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bt/s .+8 ;!/* 10001101i8p1.... bt/s <bdisp8> */{"bt/s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bf.s .+8 ;!/* 10001111i8p1.... bf.s <bdisp8> */{"bf.s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ bf/s .+8 ;!/* 10001111i8p1.... bf/s <bdisp8> */{"bf/s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ clrmac ;!/* 0000000000101000 clrmac */{"clrmac",{0},{HEX_0,HEX_0,HEX_2,HEX_8}, arch_sh_up}
+ clrs ;!/* 0000000001001000 clrs */{"clrs",{0},{HEX_0,HEX_0,HEX_4,HEX_8}, arch_sh_up}
+ clrt ;!/* 0000000000001000 clrt */{"clrt",{0},{HEX_0,HEX_0,HEX_0,HEX_8}, arch_sh_up}
+ cmp/eq #4,R0 ;!/* 10001000i8*1.... cmp/eq #<imm>,R0 */{"cmp/eq",{A_IMM,A_R0},{HEX_8,HEX_8,IMM0_8}, arch_sh_up}
+ cmp/eq r5,r4 ;!/* 0011nnnnmmmm0000 cmp/eq <REG_M>,<REG_N>*/{"cmp/eq",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_0}, arch_sh_up}
+ cmp/ge r5,r4 ;!/* 0011nnnnmmmm0011 cmp/ge <REG_M>,<REG_N>*/{"cmp/ge",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_3}, arch_sh_up}
+ cmp/gt r5,r4 ;!/* 0011nnnnmmmm0111 cmp/gt <REG_M>,<REG_N>*/{"cmp/gt",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_7}, arch_sh_up}
+ cmp/hi r5,r4 ;!/* 0011nnnnmmmm0110 cmp/hi <REG_M>,<REG_N>*/{"cmp/hi",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_6}, arch_sh_up}
+ cmp/hs r5,r4 ;!/* 0011nnnnmmmm0010 cmp/hs <REG_M>,<REG_N>*/{"cmp/hs",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_2}, arch_sh_up}
+ cmp/pl r4 ;!/* 0100nnnn00010101 cmp/pl <REG_N> */{"cmp/pl",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_5}, arch_sh_up}
+ cmp/pz r4 ;!/* 0100nnnn00010001 cmp/pz <REG_N> */{"cmp/pz",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_1}, arch_sh_up}
+ cmp/str r5,r4 ;!/* 0010nnnnmmmm1100 cmp/str <REG_M>,<REG_N>*/{"cmp/str",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_C}, arch_sh_up}
+ div0s r5,r4 ;!/* 0010nnnnmmmm0111 div0s <REG_M>,<REG_N>*/{"div0s",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_7}, arch_sh_up}
+ div0u ;!/* 0000000000011001 div0u */{"div0u",{0},{HEX_0,HEX_0,HEX_1,HEX_9}, arch_sh_up}
+ div1 r5,r4 ;!/* 0011nnnnmmmm0100 div1 <REG_M>,<REG_N>*/{"div1",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_4}, arch_sh_up}
+ exts.b r5,r4 ;!/* 0110nnnnmmmm1110 exts.b <REG_M>,<REG_N>*/{"exts.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_E}, arch_sh_up}
+ exts.w r5,r4 ;!/* 0110nnnnmmmm1111 exts.w <REG_M>,<REG_N>*/{"exts.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_F}, arch_sh_up}
+ extu.b r5,r4 ;!/* 0110nnnnmmmm1100 extu.b <REG_M>,<REG_N>*/{"extu.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_C}, arch_sh_up}
+ extu.w r5,r4 ;!/* 0110nnnnmmmm1101 extu.w <REG_M>,<REG_N>*/{"extu.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_D}, arch_sh_up}
+ jmp @r4 ;!/* 0100nnnn00101011 jmp @<REG_N> */{"jmp",{A_IND_N},{HEX_4,REG_N,HEX_2,HEX_B}, arch_sh_up}
+ jsr @r4 ;!/* 0100nnnn00001011 jsr @<REG_N> */{"jsr",{A_IND_N},{HEX_4,REG_N,HEX_0,HEX_B}, arch_sh_up}
+ ldc r4,SR ;!/* 0100nnnn00001110 ldc <REG_N>,SR */{"ldc",{A_REG_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_E}, arch_sh_up}
+ ldc r4,GBR ;!/* 0100nnnn00011110 ldc <REG_N>,GBR */{"ldc",{A_REG_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_E}, arch_sh_up}
+ ldc r4,VBR ;!/* 0100nnnn00101110 ldc <REG_N>,VBR */{"ldc",{A_REG_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_E}, arch_sh_up}
+ ldc r4,SSR ;!/* 0100nnnn00111110 ldc <REG_N>,SSR */{"ldc",{A_REG_N,A_SSR},{HEX_4,REG_N,HEX_3,HEX_E}, arch_sh3_nommu_up}
+ ldc r4,SPC ;!/* 0100nnnn01001110 ldc <REG_N>,SPC */{"ldc",{A_REG_N,A_SPC},{HEX_4,REG_N,HEX_4,HEX_E}, arch_sh3_nommu_up}
+ ldc r4,r1_bank ;!/* 0100nnnn1xxx1110 ldc <REG_N>,Rn_BANK */{"ldc",{A_REG_N,A_REG_B},{HEX_4,REG_N,REG_B,HEX_E}, arch_sh3_nommu_up}
+ ldc.l @r4+,SR ;!/* 0100nnnn00000111 ldc.l @<REG_N>+,SR */{"ldc.l",{A_INC_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_7}, arch_sh_up}
+ ldc.l @r4+,GBR ;!/* 0100nnnn00010111 ldc.l @<REG_N>+,GBR */{"ldc.l",{A_INC_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_7}, arch_sh_up}
+ ldc.l @r4+,VBR ;!/* 0100nnnn00100111 ldc.l @<REG_N>+,VBR */{"ldc.l",{A_INC_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_7}, arch_sh_up}
+ ldc.l @r4+,SSR ;!/* 0100nnnn00110111 ldc.l @<REG_N>+,SSR */{"ldc.l",{A_INC_N,A_SSR},{HEX_4,REG_N,HEX_3,HEX_7}, arch_sh3_nommu_up}
+ ldc.l @r4+,SPC ;!/* 0100nnnn01000111 ldc.l @<REG_N>+,SPC */{"ldc.l",{A_INC_N,A_SPC},{HEX_4,REG_N,HEX_4,HEX_7}, arch_sh3_nommu_up}
+ ldc.l @r4+,r1_bank ;!/* 0100nnnn1xxx0111 ldc.l @<REG_N>+,Rn_BANK */{"ldc.l",{A_INC_N,A_REG_B},{HEX_4,REG_N,REG_B,HEX_7}, arch_sh3_nommu_up}
+ lds r4,MACH ;!/* 0100nnnn00001010 lds <REG_N>,MACH */{"lds",{A_REG_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ lds r4,MACL ;!/* 0100nnnn00011010 lds <REG_N>,MACL */{"lds",{A_REG_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ lds r4,PR ;!/* 0100nnnn00101010 lds <REG_N>,PR */{"lds",{A_REG_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ lds.l @r4+,MACH ;!/* 0100nnnn00000110 lds.l @<REG_N>+,MACH*/{"lds.l",{A_INC_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_6}, arch_sh_up}
+ lds.l @r4+,MACL ;!/* 0100nnnn00010110 lds.l @<REG_N>+,MACL*/{"lds.l",{A_INC_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_6}, arch_sh_up}
+ lds.l @r4+,PR ;!/* 0100nnnn00100110 lds.l @<REG_N>+,PR */{"lds.l",{A_INC_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_6}, arch_sh_up}
+ mac.w @r5+,@r4+ ;!/* 0100nnnnmmmm1111 mac.w @<REG_M>+,@<REG_N>+*/{"mac.w",{A_INC_M,A_INC_N},{HEX_4,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mov #4,r4 ;!/* 1110nnnni8*1.... mov #<imm>,<REG_N> */{"mov",{A_IMM,A_REG_N},{HEX_E,REG_N,IMM0_8}, arch_sh_up}
+ mov r5,r4 ;!/* 0110nnnnmmmm0011 mov <REG_M>,<REG_N> */{"mov",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_3}, arch_sh_up}
+ mov.b r5,@(R0,r4) ;!/* 0000nnnnmmmm0100 mov.b <REG_M>,@(R0,<REG_N>)*/{"mov.b",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@-r4 ;!/* 0010nnnnmmmm0100 mov.b <REG_M>,@-<REG_N>*/{"mov.b",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@r4 ;!/* 0010nnnnmmmm0000 mov.b <REG_M>,@<REG_N>*/{"mov.b",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b @(8,r5),R0 ;!/* 10000100mmmmi4*1 mov.b @(<disp>,<REG_M>),R0*/{"mov.b",{A_DISP_REG_M,A_R0},{HEX_8,HEX_4,REG_M,IMM0_4}, arch_sh_up}
+ mov.b @(8,GBR),R0 ;!/* 11000100i8*1.... mov.b @(<disp>,GBR),R0*/{"mov.b",{A_DISP_GBR,A_R0},{HEX_C,HEX_4,IMM0_8}, arch_sh_up}
+ mov.b @(R0,r5),r4 ;!/* 0000nnnnmmmm1100 mov.b @(R0,<REG_M>),<REG_N>*/{"mov.b",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_C}, arch_sh_up}
+ mov.b @r5+,r4 ;!/* 0110nnnnmmmm0100 mov.b @<REG_M>+,<REG_N>*/{"mov.b",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b @r5,r4 ;!/* 0110nnnnmmmm0000 mov.b @<REG_M>,<REG_N>*/{"mov.b",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b R0,@(8,r5) ;!/* 10000000mmmmi4*1 mov.b R0,@(<disp>,<REG_M>)*/{"mov.b",{A_R0,A_DISP_REG_M},{HEX_8,HEX_0,REG_M,IMM1_4}, arch_sh_up}
+ mov.b R0,@(8,GBR) ;!/* 11000000i8*1.... mov.b R0,@(<disp>,GBR)*/{"mov.b",{A_R0,A_DISP_GBR},{HEX_C,HEX_0,IMM1_8}, arch_sh_up}
+ mov.l r5,@(8,r4) ;!/* 0001nnnnmmmmi4*4 mov.l <REG_M>,@(<disp>,<REG_N>)*/{"mov.l",{ A_REG_M,A_DISP_REG_N},{HEX_1,REG_N,REG_M,IMM1_4BY4}, arch_sh_up}
+ mov.l r5,@(R0,r4) ;!/* 0000nnnnmmmm0110 mov.l <REG_M>,@(R0,<REG_N>)*/{"mov.l",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@-r4 ;!/* 0010nnnnmmmm0110 mov.l <REG_M>,@-<REG_N>*/{"mov.l",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@r4 ;!/* 0010nnnnmmmm0010 mov.l <REG_M>,@<REG_N>*/{"mov.l",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l @(8,r5),r4 ;!/* 0101nnnnmmmmi4*4 mov.l @(<disp>,<REG_M>),<REG_N>*/{"mov.l",{A_DISP_REG_M,A_REG_N},{HEX_5,REG_N,REG_M,IMM0_4BY4}, arch_sh_up}
+ mov.l @(8,GBR),R0 ;!/* 11000110i8*4.... mov.l @(<disp>,GBR),R0*/{"mov.l",{A_DISP_GBR,A_R0},{HEX_C,HEX_6,IMM0_8BY4}, arch_sh_up}
+ .align 2
+ mov.l @(8,PC),r4 ;!/* 1101nnnni8p4.... mov.l @(<disp>,PC),<REG_N>*/{"mov.l",{A_DISP_PC,A_REG_N},{HEX_D,REG_N,PCRELIMM_8BY4}, arch_sh_up}
+ mov.l @(R0,r5),r4 ;!/* 0000nnnnmmmm1110 mov.l @(R0,<REG_M>),<REG_N>*/{"mov.l",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mov.l @r5+,r4 ;!/* 0110nnnnmmmm0110 mov.l @<REG_M>+,<REG_N>*/{"mov.l",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l @r5,r4 ;!/* 0110nnnnmmmm0010 mov.l @<REG_M>,<REG_N>*/{"mov.l",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l R0,@(8,GBR) ;!/* 11000010i8*4.... mov.l R0,@(<disp>,GBR)*/{"mov.l",{A_R0,A_DISP_GBR},{HEX_C,HEX_2,IMM1_8BY4}, arch_sh_up}
+ mov.w r5,@(R0,r4) ;!/* 0000nnnnmmmm0101 mov.w <REG_M>,@(R0,<REG_N>)*/{"mov.w",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@-r4 ;!/* 0010nnnnmmmm0101 mov.w <REG_M>,@-<REG_N>*/{"mov.w",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@r4 ;!/* 0010nnnnmmmm0001 mov.w <REG_M>,@<REG_N>*/{"mov.w",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w @(8,r5),R0 ;!/* 10000101mmmmi4*2 mov.w @(<disp>,<REG_M>),R0*/{"mov.w",{A_DISP_REG_M,A_R0},{HEX_8,HEX_5,REG_M,IMM0_4BY2}, arch_sh_up}
+ mov.w @(8,GBR),R0 ;!/* 11000101i8*2.... mov.w @(<disp>,GBR),R0*/{"mov.w",{A_DISP_GBR,A_R0},{HEX_C,HEX_5,IMM0_8BY2}, arch_sh_up}
+ mov.w @(8,PC),r4 ;!/* 1001nnnni8p2.... mov.w @(<disp>,PC),<REG_N>*/{"mov.w",{A_DISP_PC,A_REG_N},{HEX_9,REG_N,PCRELIMM_8BY2}, arch_sh_up}
+ mov.w @(R0,r5),r4 ;!/* 0000nnnnmmmm1101 mov.w @(R0,<REG_M>),<REG_N>*/{"mov.w",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_D}, arch_sh_up}
+ mov.w @r5+,r4 ;!/* 0110nnnnmmmm0101 mov.w @<REG_M>+,<REG_N>*/{"mov.w",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w @r5,r4 ;!/* 0110nnnnmmmm0001 mov.w @<REG_M>,<REG_N>*/{"mov.w",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w R0,@(8,r5) ;!/* 10000001mmmmi4*2 mov.w R0,@(<disp>,<REG_M>)*/{"mov.w",{A_R0,A_DISP_REG_M},{HEX_8,HEX_1,REG_M,IMM1_4BY2}, arch_sh_up}
+ mov.w R0,@(8,GBR) ;!/* 11000001i8*2.... mov.w R0,@(<disp>,GBR)*/{"mov.w",{A_R0,A_DISP_GBR},{HEX_C,HEX_1,IMM1_8BY2}, arch_sh_up}
+ .align 2
+ mova @(8,PC),R0 ;!/* 11000111i8p4.... mova @(<disp>,PC),R0*/{"mova",{A_DISP_PC,A_R0},{HEX_C,HEX_7,PCRELIMM_8BY4}, arch_sh_up}
+ movt r4 ;!/* 0000nnnn00101001 movt <REG_N> */{"movt",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ muls.w r5,r4 ;!/* 0010nnnnmmmm1111 muls.w <REG_M>,<REG_N>*/{"muls.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ muls r5,r4 ;!/* 0010nnnnmmmm1111 muls <REG_M>,<REG_N>*/{"muls",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mul.l r5,r4 ;!/* 0000nnnnmmmm0111 mul.l <REG_M>,<REG_N>*/{"mul.l",{ A_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_7}, arch_sh2_up}
+ mulu.w r5,r4 ;!/* 0010nnnnmmmm1110 mulu.w <REG_M>,<REG_N>*/{"mulu.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mulu r5,r4 ;!/* 0010nnnnmmmm1110 mulu <REG_M>,<REG_N>*/{"mulu",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ neg r5,r4 ;!/* 0110nnnnmmmm1011 neg <REG_M>,<REG_N> */{"neg",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_B}, arch_sh_up}
+ negc r5,r4 ;!/* 0110nnnnmmmm1010 negc <REG_M>,<REG_N>*/{"negc",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_A}, arch_sh_up}
+ nop ;!/* 0000000000001001 nop */{"nop",{0},{HEX_0,HEX_0,HEX_0,HEX_9}, arch_sh_up}
+ not r5,r4 ;!/* 0110nnnnmmmm0111 not <REG_M>,<REG_N> */{"not",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_7}, arch_sh_up}
+ or #4,R0 ;!/* 11001011i8*1.... or #<imm>,R0 */{"or",{A_IMM,A_R0},{HEX_C,HEX_B,IMM0_8}, arch_sh_up}
+ or r5,r4 ;!/* 0010nnnnmmmm1011 or <REG_M>,<REG_N> */{"or",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_B}, arch_sh_up}
+ or.b #4,@(R0,GBR) ;!/* 11001111i8*1.... or.b #<imm>,@(R0,GBR)*/{"or.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_F,IMM0_8}, arch_sh_up}
+ rotcl r4 ;!/* 0100nnnn00100100 rotcl <REG_N> */{"rotcl",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_4}, arch_sh_up}
+ rotcr r4 ;!/* 0100nnnn00100101 rotcr <REG_N> */{"rotcr",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_5}, arch_sh_up}
+ rotl r4 ;!/* 0100nnnn00000100 rotl <REG_N> */{"rotl",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_4}, arch_sh_up}
+ rotr r4 ;!/* 0100nnnn00000101 rotr <REG_N> */{"rotr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_5}, arch_sh_up}
+ rte ;!/* 0000000000101011 rte */{"rte",{0},{HEX_0,HEX_0,HEX_2,HEX_B}, arch_sh_up}
+ rts ;!/* 0000000000001011 rts */{"rts",{0},{HEX_0,HEX_0,HEX_0,HEX_B}, arch_sh_up}
+ sets ;!/* 0000000001011000 sets */{"sets",{0},{HEX_0,HEX_0,HEX_5,HEX_8}, arch_sh_up}
+ sett ;!/* 0000000000011000 sett */{"sett",{0},{HEX_0,HEX_0,HEX_1,HEX_8}, arch_sh_up}
+ shad r5,r4 ;!/* 0100nnnnmmmm1100 shad <REG_M>,<REG_N>*/{"shad",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_C}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shld r5,r4 ;!/* 0100nnnnmmmm1101 shld <REG_M>,<REG_N>*/{"shld",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_D}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shal r4 ;!/* 0100nnnn00100000 shal <REG_N> */{"shal",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_0}, arch_sh_up}
+ shar r4 ;!/* 0100nnnn00100001 shar <REG_N> */{"shar",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_1}, arch_sh_up}
+ shll r4 ;!/* 0100nnnn00000000 shll <REG_N> */{"shll",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_0}, arch_sh_up}
+ shll16 r4 ;!/* 0100nnnn00101000 shll16 <REG_N> */{"shll16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_8}, arch_sh_up}
+ shll2 r4 ;!/* 0100nnnn00001000 shll2 <REG_N> */{"shll2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_8}, arch_sh_up}
+ shll8 r4 ;!/* 0100nnnn00011000 shll8 <REG_N> */{"shll8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_8}, arch_sh_up}
+ shlr r4 ;!/* 0100nnnn00000001 shlr <REG_N> */{"shlr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_1}, arch_sh_up}
+ shlr16 r4 ;!/* 0100nnnn00101001 shlr16 <REG_N> */{"shlr16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ shlr2 r4 ;!/* 0100nnnn00001001 shlr2 <REG_N> */{"shlr2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_9}, arch_sh_up}
+ shlr8 r4 ;!/* 0100nnnn00011001 shlr8 <REG_N> */{"shlr8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_9}, arch_sh_up}
+ sleep ;!/* 0000000000011011 sleep */{"sleep",{0},{HEX_0,HEX_0,HEX_1,HEX_B}, arch_sh_up}
+ stc SR,r4 ;!/* 0000nnnn00000010 stc SR,<REG_N> */{"stc",{A_SR,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ stc GBR,r4 ;!/* 0000nnnn00010010 stc GBR,<REG_N> */{"stc",{A_GBR,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ stc VBR,r4 ;!/* 0000nnnn00100010 stc VBR,<REG_N> */{"stc",{A_VBR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ stc SSR,r4 ;!/* 0000nnnn00110010 stc SSR,<REG_N> */{"stc",{A_SSR,A_REG_N},{HEX_0,REG_N,HEX_3,HEX_2}, arch_sh3_nommu_up}
+ stc SPC,r4 ;!/* 0000nnnn01000010 stc SPC,<REG_N> */{"stc",{A_SPC,A_REG_N},{HEX_0,REG_N,HEX_4,HEX_2}, arch_sh3_nommu_up}
+ stc r1_bank,r4 ;!/* 0000nnnn1xxx0010 stc Rn_BANK,<REG_N> */{"stc",{A_REG_B,A_REG_N},{HEX_0,REG_N,REG_B,HEX_2}, arch_sh3_nommu_up}
+ stc.l SR,@-r4 ;!/* 0100nnnn00000011 stc.l SR,@-<REG_N> */{"stc.l",{A_SR,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_3}, arch_sh_up}
+ stc.l VBR,@-r4 ;!/* 0100nnnn00100011 stc.l VBR,@-<REG_N> */{"stc.l",{A_VBR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_3}, arch_sh_up}
+ stc.l SSR,@-r4 ;!/* 0100nnnn00110011 stc.l SSR,@-<REG_N> */{"stc.l",{A_SSR,A_DEC_N},{HEX_4,REG_N,HEX_3,HEX_3}, arch_sh3_nommu_up}
+ stc.l SPC,@-r4 ;!/* 0100nnnn01000011 stc.l SPC,@-<REG_N> */{"stc.l",{A_SPC,A_DEC_N},{HEX_4,REG_N,HEX_4,HEX_3}, arch_sh3_nommu_up}
+ stc.l GBR,@-r4 ;!/* 0100nnnn00010011 stc.l GBR,@-<REG_N> */{"stc.l",{A_GBR,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_3}, arch_sh_up}
+ stc.l r1_bank,@-r4 ;!/* 0100nnnn1xxx0011 stc.l Rn_BANK,@-<REG_N> */{"stc.l",{A_REG_B,A_DEC_N},{HEX_4,REG_N,REG_B,HEX_3}, arch_sh3_nommu_up}
+ sts MACH,r4 ;!/* 0000nnnn00001010 sts MACH,<REG_N> */{"sts",{A_MACH,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ sts MACL,r4 ;!/* 0000nnnn00011010 sts MACL,<REG_N> */{"sts",{A_MACL,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ sts PR,r4 ;!/* 0000nnnn00101010 sts PR,<REG_N> */{"sts",{A_PR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ sts.l MACH,@-r4 ;!/* 0100nnnn00000010 sts.l MACH,@-<REG_N>*/{"sts.l",{A_MACH,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ sts.l MACL,@-r4 ;!/* 0100nnnn00010010 sts.l MACL,@-<REG_N>*/{"sts.l",{A_MACL,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ sts.l PR,@-r4 ;!/* 0100nnnn00100010 sts.l PR,@-<REG_N> */{"sts.l",{A_PR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ sub r5,r4 ;!/* 0011nnnnmmmm1000 sub <REG_M>,<REG_N> */{"sub",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_8}, arch_sh_up}
+ subc r5,r4 ;!/* 0011nnnnmmmm1010 subc <REG_M>,<REG_N>*/{"subc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_A}, arch_sh_up}
+ subv r5,r4 ;!/* 0011nnnnmmmm1011 subv <REG_M>,<REG_N>*/{"subv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_B}, arch_sh_up}
+ swap.b r5,r4 ;!/* 0110nnnnmmmm1000 swap.b <REG_M>,<REG_N>*/{"swap.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_8}, arch_sh_up}
+ swap.w r5,r4 ;!/* 0110nnnnmmmm1001 swap.w <REG_M>,<REG_N>*/{"swap.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_9}, arch_sh_up}
+ tas.b @r4 ;!/* 0100nnnn00011011 tas.b @<REG_N> */{"tas.b",{A_IND_N},{HEX_4,REG_N,HEX_1,HEX_B}, arch_sh_up}
+ trapa #4 ;!/* 11000011i8*1.... trapa #<imm> */{"trapa",{A_IMM},{HEX_C,HEX_3,IMM0_8}, arch_sh_up}
+ tst #4,R0 ;!/* 11001000i8*1.... tst #<imm>,R0 */{"tst",{A_IMM,A_R0},{HEX_C,HEX_8,IMM0_8}, arch_sh_up}
+ tst r5,r4 ;!/* 0010nnnnmmmm1000 tst <REG_M>,<REG_N> */{"tst",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_8}, arch_sh_up}
+ tst.b #4,@(R0,GBR) ;!/* 11001100i8*1.... tst.b #<imm>,@(R0,GBR)*/{"tst.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_C,IMM0_8}, arch_sh_up}
+ xor #4,R0 ;!/* 11001010i8*1.... xor #<imm>,R0 */{"xor",{A_IMM,A_R0},{HEX_C,HEX_A,IMM0_8}, arch_sh_up}
+ xor r5,r4 ;!/* 0010nnnnmmmm1010 xor <REG_M>,<REG_N> */{"xor",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_A}, arch_sh_up}
+ xor.b #4,@(R0,GBR) ;!/* 11001110i8*1.... xor.b #<imm>,@(R0,GBR)*/{"xor.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_E,IMM0_8}, arch_sh_up}
+ xtrct r5,r4 ;!/* 0010nnnnmmmm1101 xtrct <REG_M>,<REG_N>*/{"xtrct",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_D}, arch_sh_up}
+ dt r4 ;!/* 0100nnnn00010000 dt <REG_N> */{"dt",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_0}, arch_sh2_up}
+ dmuls.l r5,r4 ;!/* 0011nnnnmmmm1101 dmuls.l <REG_M>,<REG_N>*/{"dmuls.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_D}, arch_sh2_up}
+ dmulu.l r5,r4 ;!/* 0011nnnnmmmm0101 dmulu.l <REG_M>,<REG_N>*/{"dmulu.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_5}, arch_sh2_up}
+ mac.l @r5+,@r4+ ;!/* 0000nnnnmmmm1111 mac.l @<REG_M>+,@<REG_N>+*/{"mac.l",{A_INC_M,A_INC_N},{HEX_0,REG_N,REG_M,HEX_F}, arch_sh2_up}
+ braf r4 ;!/* 0000nnnn00100011 braf <REG_N> */{"braf",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_3}, arch_sh2_up}
+ bsrf r4 ;!/* 0000nnnn00000011 bsrf <REG_N> */{"bsrf",{A_REG_N},{HEX_0,REG_N,HEX_0,HEX_3}, arch_sh2_up}
diff --git a/binutils-2.21/ld/testsuite/ld-sh/arch/sh3e.s b/binutils-2.21/ld/testsuite/ld-sh/arch/sh3e.s
new file mode 100644
index 0000000..7076dfc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/arch/sh3e.s
@@ -0,0 +1,218 @@
+! Generated file. DO NOT EDIT.
+!
+! This file was generated by gas/testsuite/gas/sh/arch/arch.exp .
+! This file should contain every instruction valid on
+! architecture sh3e but no more.
+! If the tests are failing because the expected results
+! have changed then run 'make check' and copy the new file
+! from <objdir>/gas/testsuite/sh3e.s
+! to <srcdir>/gas/testsuite/gas/sh/arch/sh3e.s .
+! Make sure there are no unexpected or missing instructions.
+
+ .section .text
+sh3e:
+! Instructions introduced into sh3e
+
+! Instructions inherited from ancestors: sh sh2 sh2a-nofpu-or-sh3-nommu sh2a-or-sh3e sh2e sh3 sh3-nommu
+ add #4,r4 ;!/* 0111nnnni8*1.... add #<imm>,<REG_N> */{"add",{A_IMM,A_REG_N},{HEX_7,REG_N,IMM0_8}, arch_sh_up}
+ add r5,r4 ;!/* 0011nnnnmmmm1100 add <REG_M>,<REG_N> */{"add",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_C}, arch_sh_up}
+ addc r5,r4 ;!/* 0011nnnnmmmm1110 addc <REG_M>,<REG_N>*/{"addc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_E}, arch_sh_up}
+ addv r5,r4 ;!/* 0011nnnnmmmm1111 addv <REG_M>,<REG_N>*/{"addv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_F}, arch_sh_up}
+ and #4,R0 ;!/* 11001001i8*1.... and #<imm>,R0 */{"and",{A_IMM,A_R0},{HEX_C,HEX_9,IMM0_8}, arch_sh_up}
+ and r5,r4 ;!/* 0010nnnnmmmm1001 and <REG_M>,<REG_N> */{"and",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_9}, arch_sh_up}
+ and.b #4,@(R0,GBR) ;!/* 11001101i8*1.... and.b #<imm>,@(R0,GBR)*/{"and.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_D,IMM0_8}, arch_sh_up}
+ bra .+8 ;!/* 1010i12......... bra <bdisp12> */{"bra",{A_BDISP12},{HEX_A,BRANCH_12}, arch_sh_up}
+ bsr .+8 ;!/* 1011i12......... bsr <bdisp12> */{"bsr",{A_BDISP12},{HEX_B,BRANCH_12}, arch_sh_up}
+ bt .+8 ;!/* 10001001i8p1.... bt <bdisp8> */{"bt",{A_BDISP8},{HEX_8,HEX_9,BRANCH_8}, arch_sh_up}
+ bf .+8 ;!/* 10001011i8p1.... bf <bdisp8> */{"bf",{A_BDISP8},{HEX_8,HEX_B,BRANCH_8}, arch_sh_up}
+ bt.s .+8 ;!/* 10001101i8p1.... bt.s <bdisp8> */{"bt.s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bt/s .+8 ;!/* 10001101i8p1.... bt/s <bdisp8> */{"bt/s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bf.s .+8 ;!/* 10001111i8p1.... bf.s <bdisp8> */{"bf.s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ bf/s .+8 ;!/* 10001111i8p1.... bf/s <bdisp8> */{"bf/s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ clrmac ;!/* 0000000000101000 clrmac */{"clrmac",{0},{HEX_0,HEX_0,HEX_2,HEX_8}, arch_sh_up}
+ clrs ;!/* 0000000001001000 clrs */{"clrs",{0},{HEX_0,HEX_0,HEX_4,HEX_8}, arch_sh_up}
+ clrt ;!/* 0000000000001000 clrt */{"clrt",{0},{HEX_0,HEX_0,HEX_0,HEX_8}, arch_sh_up}
+ cmp/eq #4,R0 ;!/* 10001000i8*1.... cmp/eq #<imm>,R0 */{"cmp/eq",{A_IMM,A_R0},{HEX_8,HEX_8,IMM0_8}, arch_sh_up}
+ cmp/eq r5,r4 ;!/* 0011nnnnmmmm0000 cmp/eq <REG_M>,<REG_N>*/{"cmp/eq",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_0}, arch_sh_up}
+ cmp/ge r5,r4 ;!/* 0011nnnnmmmm0011 cmp/ge <REG_M>,<REG_N>*/{"cmp/ge",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_3}, arch_sh_up}
+ cmp/gt r5,r4 ;!/* 0011nnnnmmmm0111 cmp/gt <REG_M>,<REG_N>*/{"cmp/gt",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_7}, arch_sh_up}
+ cmp/hi r5,r4 ;!/* 0011nnnnmmmm0110 cmp/hi <REG_M>,<REG_N>*/{"cmp/hi",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_6}, arch_sh_up}
+ cmp/hs r5,r4 ;!/* 0011nnnnmmmm0010 cmp/hs <REG_M>,<REG_N>*/{"cmp/hs",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_2}, arch_sh_up}
+ cmp/pl r4 ;!/* 0100nnnn00010101 cmp/pl <REG_N> */{"cmp/pl",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_5}, arch_sh_up}
+ cmp/pz r4 ;!/* 0100nnnn00010001 cmp/pz <REG_N> */{"cmp/pz",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_1}, arch_sh_up}
+ cmp/str r5,r4 ;!/* 0010nnnnmmmm1100 cmp/str <REG_M>,<REG_N>*/{"cmp/str",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_C}, arch_sh_up}
+ div0s r5,r4 ;!/* 0010nnnnmmmm0111 div0s <REG_M>,<REG_N>*/{"div0s",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_7}, arch_sh_up}
+ div0u ;!/* 0000000000011001 div0u */{"div0u",{0},{HEX_0,HEX_0,HEX_1,HEX_9}, arch_sh_up}
+ div1 r5,r4 ;!/* 0011nnnnmmmm0100 div1 <REG_M>,<REG_N>*/{"div1",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_4}, arch_sh_up}
+ exts.b r5,r4 ;!/* 0110nnnnmmmm1110 exts.b <REG_M>,<REG_N>*/{"exts.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_E}, arch_sh_up}
+ exts.w r5,r4 ;!/* 0110nnnnmmmm1111 exts.w <REG_M>,<REG_N>*/{"exts.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_F}, arch_sh_up}
+ extu.b r5,r4 ;!/* 0110nnnnmmmm1100 extu.b <REG_M>,<REG_N>*/{"extu.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_C}, arch_sh_up}
+ extu.w r5,r4 ;!/* 0110nnnnmmmm1101 extu.w <REG_M>,<REG_N>*/{"extu.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_D}, arch_sh_up}
+ jmp @r4 ;!/* 0100nnnn00101011 jmp @<REG_N> */{"jmp",{A_IND_N},{HEX_4,REG_N,HEX_2,HEX_B}, arch_sh_up}
+ jsr @r4 ;!/* 0100nnnn00001011 jsr @<REG_N> */{"jsr",{A_IND_N},{HEX_4,REG_N,HEX_0,HEX_B}, arch_sh_up}
+ ldc r4,SR ;!/* 0100nnnn00001110 ldc <REG_N>,SR */{"ldc",{A_REG_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_E}, arch_sh_up}
+ ldc r4,GBR ;!/* 0100nnnn00011110 ldc <REG_N>,GBR */{"ldc",{A_REG_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_E}, arch_sh_up}
+ ldc r4,VBR ;!/* 0100nnnn00101110 ldc <REG_N>,VBR */{"ldc",{A_REG_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_E}, arch_sh_up}
+ ldc r4,SSR ;!/* 0100nnnn00111110 ldc <REG_N>,SSR */{"ldc",{A_REG_N,A_SSR},{HEX_4,REG_N,HEX_3,HEX_E}, arch_sh3_nommu_up}
+ ldc r4,SPC ;!/* 0100nnnn01001110 ldc <REG_N>,SPC */{"ldc",{A_REG_N,A_SPC},{HEX_4,REG_N,HEX_4,HEX_E}, arch_sh3_nommu_up}
+ ldc r4,r1_bank ;!/* 0100nnnn1xxx1110 ldc <REG_N>,Rn_BANK */{"ldc",{A_REG_N,A_REG_B},{HEX_4,REG_N,REG_B,HEX_E}, arch_sh3_nommu_up}
+ ldc.l @r4+,SR ;!/* 0100nnnn00000111 ldc.l @<REG_N>+,SR */{"ldc.l",{A_INC_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_7}, arch_sh_up}
+ ldc.l @r4+,GBR ;!/* 0100nnnn00010111 ldc.l @<REG_N>+,GBR */{"ldc.l",{A_INC_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_7}, arch_sh_up}
+ ldc.l @r4+,VBR ;!/* 0100nnnn00100111 ldc.l @<REG_N>+,VBR */{"ldc.l",{A_INC_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_7}, arch_sh_up}
+ ldc.l @r4+,SSR ;!/* 0100nnnn00110111 ldc.l @<REG_N>+,SSR */{"ldc.l",{A_INC_N,A_SSR},{HEX_4,REG_N,HEX_3,HEX_7}, arch_sh3_nommu_up}
+ ldc.l @r4+,SPC ;!/* 0100nnnn01000111 ldc.l @<REG_N>+,SPC */{"ldc.l",{A_INC_N,A_SPC},{HEX_4,REG_N,HEX_4,HEX_7}, arch_sh3_nommu_up}
+ ldc.l @r4+,r1_bank ;!/* 0100nnnn1xxx0111 ldc.l @<REG_N>+,Rn_BANK */{"ldc.l",{A_INC_N,A_REG_B},{HEX_4,REG_N,REG_B,HEX_7}, arch_sh3_nommu_up}
+ lds r4,MACH ;!/* 0100nnnn00001010 lds <REG_N>,MACH */{"lds",{A_REG_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ lds r4,MACL ;!/* 0100nnnn00011010 lds <REG_N>,MACL */{"lds",{A_REG_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ lds r4,PR ;!/* 0100nnnn00101010 lds <REG_N>,PR */{"lds",{A_REG_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ lds r4,FPUL ;!/* 0100nnnn01011010 lds <REG_N>,FPUL */{"lds",{A_REG_M,FPUL_N},{HEX_4,REG_M,HEX_5,HEX_A}, arch_sh2e_up}
+ lds r5,FPSCR ;!/* 0100nnnn01101010 lds <REG_M>,FPSCR */{"lds",{A_REG_M,FPSCR_N},{HEX_4,REG_M,HEX_6,HEX_A}, arch_sh2e_up}
+ lds.l @r4+,MACH ;!/* 0100nnnn00000110 lds.l @<REG_N>+,MACH*/{"lds.l",{A_INC_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_6}, arch_sh_up}
+ lds.l @r4+,MACL ;!/* 0100nnnn00010110 lds.l @<REG_N>+,MACL*/{"lds.l",{A_INC_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_6}, arch_sh_up}
+ lds.l @r4+,PR ;!/* 0100nnnn00100110 lds.l @<REG_N>+,PR */{"lds.l",{A_INC_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_6}, arch_sh_up}
+ lds.l @r5+,FPUL ;!/* 0100nnnn01010110 lds.l @<REG_M>+,FPUL*/{"lds.l",{A_INC_M,FPUL_N},{HEX_4,REG_M,HEX_5,HEX_6}, arch_sh2e_up}
+ lds.l @r5+,FPSCR ;!/* 0100nnnn01100110 lds.l @<REG_M>+,FPSCR*/{"lds.l",{A_INC_M,FPSCR_N},{HEX_4,REG_M,HEX_6,HEX_6}, arch_sh2e_up}
+ ldtlb ;!/* 0000000000111000 ldtlb */{"ldtlb",{0},{HEX_0,HEX_0,HEX_3,HEX_8}, arch_sh3_up}
+ mac.w @r5+,@r4+ ;!/* 0100nnnnmmmm1111 mac.w @<REG_M>+,@<REG_N>+*/{"mac.w",{A_INC_M,A_INC_N},{HEX_4,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mov #4,r4 ;!/* 1110nnnni8*1.... mov #<imm>,<REG_N> */{"mov",{A_IMM,A_REG_N},{HEX_E,REG_N,IMM0_8}, arch_sh_up}
+ mov r5,r4 ;!/* 0110nnnnmmmm0011 mov <REG_M>,<REG_N> */{"mov",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_3}, arch_sh_up}
+ mov.b r5,@(R0,r4) ;!/* 0000nnnnmmmm0100 mov.b <REG_M>,@(R0,<REG_N>)*/{"mov.b",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@-r4 ;!/* 0010nnnnmmmm0100 mov.b <REG_M>,@-<REG_N>*/{"mov.b",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@r4 ;!/* 0010nnnnmmmm0000 mov.b <REG_M>,@<REG_N>*/{"mov.b",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b @(8,r5),R0 ;!/* 10000100mmmmi4*1 mov.b @(<disp>,<REG_M>),R0*/{"mov.b",{A_DISP_REG_M,A_R0},{HEX_8,HEX_4,REG_M,IMM0_4}, arch_sh_up}
+ mov.b @(8,GBR),R0 ;!/* 11000100i8*1.... mov.b @(<disp>,GBR),R0*/{"mov.b",{A_DISP_GBR,A_R0},{HEX_C,HEX_4,IMM0_8}, arch_sh_up}
+ mov.b @(R0,r5),r4 ;!/* 0000nnnnmmmm1100 mov.b @(R0,<REG_M>),<REG_N>*/{"mov.b",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_C}, arch_sh_up}
+ mov.b @r5+,r4 ;!/* 0110nnnnmmmm0100 mov.b @<REG_M>+,<REG_N>*/{"mov.b",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b @r5,r4 ;!/* 0110nnnnmmmm0000 mov.b @<REG_M>,<REG_N>*/{"mov.b",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b R0,@(8,r5) ;!/* 10000000mmmmi4*1 mov.b R0,@(<disp>,<REG_M>)*/{"mov.b",{A_R0,A_DISP_REG_M},{HEX_8,HEX_0,REG_M,IMM1_4}, arch_sh_up}
+ mov.b R0,@(8,GBR) ;!/* 11000000i8*1.... mov.b R0,@(<disp>,GBR)*/{"mov.b",{A_R0,A_DISP_GBR},{HEX_C,HEX_0,IMM1_8}, arch_sh_up}
+ mov.l r5,@(8,r4) ;!/* 0001nnnnmmmmi4*4 mov.l <REG_M>,@(<disp>,<REG_N>)*/{"mov.l",{ A_REG_M,A_DISP_REG_N},{HEX_1,REG_N,REG_M,IMM1_4BY4}, arch_sh_up}
+ mov.l r5,@(R0,r4) ;!/* 0000nnnnmmmm0110 mov.l <REG_M>,@(R0,<REG_N>)*/{"mov.l",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@-r4 ;!/* 0010nnnnmmmm0110 mov.l <REG_M>,@-<REG_N>*/{"mov.l",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@r4 ;!/* 0010nnnnmmmm0010 mov.l <REG_M>,@<REG_N>*/{"mov.l",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l @(8,r5),r4 ;!/* 0101nnnnmmmmi4*4 mov.l @(<disp>,<REG_M>),<REG_N>*/{"mov.l",{A_DISP_REG_M,A_REG_N},{HEX_5,REG_N,REG_M,IMM0_4BY4}, arch_sh_up}
+ mov.l @(8,GBR),R0 ;!/* 11000110i8*4.... mov.l @(<disp>,GBR),R0*/{"mov.l",{A_DISP_GBR,A_R0},{HEX_C,HEX_6,IMM0_8BY4}, arch_sh_up}
+ .align 2
+ mov.l @(8,PC),r4 ;!/* 1101nnnni8p4.... mov.l @(<disp>,PC),<REG_N>*/{"mov.l",{A_DISP_PC,A_REG_N},{HEX_D,REG_N,PCRELIMM_8BY4}, arch_sh_up}
+ mov.l @(R0,r5),r4 ;!/* 0000nnnnmmmm1110 mov.l @(R0,<REG_M>),<REG_N>*/{"mov.l",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mov.l @r5+,r4 ;!/* 0110nnnnmmmm0110 mov.l @<REG_M>+,<REG_N>*/{"mov.l",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l @r5,r4 ;!/* 0110nnnnmmmm0010 mov.l @<REG_M>,<REG_N>*/{"mov.l",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l R0,@(8,GBR) ;!/* 11000010i8*4.... mov.l R0,@(<disp>,GBR)*/{"mov.l",{A_R0,A_DISP_GBR},{HEX_C,HEX_2,IMM1_8BY4}, arch_sh_up}
+ mov.w r5,@(R0,r4) ;!/* 0000nnnnmmmm0101 mov.w <REG_M>,@(R0,<REG_N>)*/{"mov.w",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@-r4 ;!/* 0010nnnnmmmm0101 mov.w <REG_M>,@-<REG_N>*/{"mov.w",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@r4 ;!/* 0010nnnnmmmm0001 mov.w <REG_M>,@<REG_N>*/{"mov.w",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w @(8,r5),R0 ;!/* 10000101mmmmi4*2 mov.w @(<disp>,<REG_M>),R0*/{"mov.w",{A_DISP_REG_M,A_R0},{HEX_8,HEX_5,REG_M,IMM0_4BY2}, arch_sh_up}
+ mov.w @(8,GBR),R0 ;!/* 11000101i8*2.... mov.w @(<disp>,GBR),R0*/{"mov.w",{A_DISP_GBR,A_R0},{HEX_C,HEX_5,IMM0_8BY2}, arch_sh_up}
+ mov.w @(8,PC),r4 ;!/* 1001nnnni8p2.... mov.w @(<disp>,PC),<REG_N>*/{"mov.w",{A_DISP_PC,A_REG_N},{HEX_9,REG_N,PCRELIMM_8BY2}, arch_sh_up}
+ mov.w @(R0,r5),r4 ;!/* 0000nnnnmmmm1101 mov.w @(R0,<REG_M>),<REG_N>*/{"mov.w",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_D}, arch_sh_up}
+ mov.w @r5+,r4 ;!/* 0110nnnnmmmm0101 mov.w @<REG_M>+,<REG_N>*/{"mov.w",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w @r5,r4 ;!/* 0110nnnnmmmm0001 mov.w @<REG_M>,<REG_N>*/{"mov.w",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w R0,@(8,r5) ;!/* 10000001mmmmi4*2 mov.w R0,@(<disp>,<REG_M>)*/{"mov.w",{A_R0,A_DISP_REG_M},{HEX_8,HEX_1,REG_M,IMM1_4BY2}, arch_sh_up}
+ mov.w R0,@(8,GBR) ;!/* 11000001i8*2.... mov.w R0,@(<disp>,GBR)*/{"mov.w",{A_R0,A_DISP_GBR},{HEX_C,HEX_1,IMM1_8BY2}, arch_sh_up}
+ .align 2
+ mova @(8,PC),R0 ;!/* 11000111i8p4.... mova @(<disp>,PC),R0*/{"mova",{A_DISP_PC,A_R0},{HEX_C,HEX_7,PCRELIMM_8BY4}, arch_sh_up}
+ movt r4 ;!/* 0000nnnn00101001 movt <REG_N> */{"movt",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ muls.w r5,r4 ;!/* 0010nnnnmmmm1111 muls.w <REG_M>,<REG_N>*/{"muls.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ muls r5,r4 ;!/* 0010nnnnmmmm1111 muls <REG_M>,<REG_N>*/{"muls",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mul.l r5,r4 ;!/* 0000nnnnmmmm0111 mul.l <REG_M>,<REG_N>*/{"mul.l",{ A_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_7}, arch_sh2_up}
+ mulu.w r5,r4 ;!/* 0010nnnnmmmm1110 mulu.w <REG_M>,<REG_N>*/{"mulu.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mulu r5,r4 ;!/* 0010nnnnmmmm1110 mulu <REG_M>,<REG_N>*/{"mulu",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ neg r5,r4 ;!/* 0110nnnnmmmm1011 neg <REG_M>,<REG_N> */{"neg",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_B}, arch_sh_up}
+ negc r5,r4 ;!/* 0110nnnnmmmm1010 negc <REG_M>,<REG_N>*/{"negc",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_A}, arch_sh_up}
+ nop ;!/* 0000000000001001 nop */{"nop",{0},{HEX_0,HEX_0,HEX_0,HEX_9}, arch_sh_up}
+ not r5,r4 ;!/* 0110nnnnmmmm0111 not <REG_M>,<REG_N> */{"not",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_7}, arch_sh_up}
+ or #4,R0 ;!/* 11001011i8*1.... or #<imm>,R0 */{"or",{A_IMM,A_R0},{HEX_C,HEX_B,IMM0_8}, arch_sh_up}
+ or r5,r4 ;!/* 0010nnnnmmmm1011 or <REG_M>,<REG_N> */{"or",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_B}, arch_sh_up}
+ or.b #4,@(R0,GBR) ;!/* 11001111i8*1.... or.b #<imm>,@(R0,GBR)*/{"or.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_F,IMM0_8}, arch_sh_up}
+ rotcl r4 ;!/* 0100nnnn00100100 rotcl <REG_N> */{"rotcl",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_4}, arch_sh_up}
+ rotcr r4 ;!/* 0100nnnn00100101 rotcr <REG_N> */{"rotcr",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_5}, arch_sh_up}
+ rotl r4 ;!/* 0100nnnn00000100 rotl <REG_N> */{"rotl",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_4}, arch_sh_up}
+ rotr r4 ;!/* 0100nnnn00000101 rotr <REG_N> */{"rotr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_5}, arch_sh_up}
+ rte ;!/* 0000000000101011 rte */{"rte",{0},{HEX_0,HEX_0,HEX_2,HEX_B}, arch_sh_up}
+ rts ;!/* 0000000000001011 rts */{"rts",{0},{HEX_0,HEX_0,HEX_0,HEX_B}, arch_sh_up}
+ sets ;!/* 0000000001011000 sets */{"sets",{0},{HEX_0,HEX_0,HEX_5,HEX_8}, arch_sh_up}
+ sett ;!/* 0000000000011000 sett */{"sett",{0},{HEX_0,HEX_0,HEX_1,HEX_8}, arch_sh_up}
+ shad r5,r4 ;!/* 0100nnnnmmmm1100 shad <REG_M>,<REG_N>*/{"shad",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_C}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shld r5,r4 ;!/* 0100nnnnmmmm1101 shld <REG_M>,<REG_N>*/{"shld",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_D}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shal r4 ;!/* 0100nnnn00100000 shal <REG_N> */{"shal",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_0}, arch_sh_up}
+ shar r4 ;!/* 0100nnnn00100001 shar <REG_N> */{"shar",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_1}, arch_sh_up}
+ shll r4 ;!/* 0100nnnn00000000 shll <REG_N> */{"shll",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_0}, arch_sh_up}
+ shll16 r4 ;!/* 0100nnnn00101000 shll16 <REG_N> */{"shll16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_8}, arch_sh_up}
+ shll2 r4 ;!/* 0100nnnn00001000 shll2 <REG_N> */{"shll2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_8}, arch_sh_up}
+ shll8 r4 ;!/* 0100nnnn00011000 shll8 <REG_N> */{"shll8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_8}, arch_sh_up}
+ shlr r4 ;!/* 0100nnnn00000001 shlr <REG_N> */{"shlr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_1}, arch_sh_up}
+ shlr16 r4 ;!/* 0100nnnn00101001 shlr16 <REG_N> */{"shlr16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ shlr2 r4 ;!/* 0100nnnn00001001 shlr2 <REG_N> */{"shlr2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_9}, arch_sh_up}
+ shlr8 r4 ;!/* 0100nnnn00011001 shlr8 <REG_N> */{"shlr8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_9}, arch_sh_up}
+ sleep ;!/* 0000000000011011 sleep */{"sleep",{0},{HEX_0,HEX_0,HEX_1,HEX_B}, arch_sh_up}
+ stc SR,r4 ;!/* 0000nnnn00000010 stc SR,<REG_N> */{"stc",{A_SR,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ stc GBR,r4 ;!/* 0000nnnn00010010 stc GBR,<REG_N> */{"stc",{A_GBR,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ stc VBR,r4 ;!/* 0000nnnn00100010 stc VBR,<REG_N> */{"stc",{A_VBR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ stc SSR,r4 ;!/* 0000nnnn00110010 stc SSR,<REG_N> */{"stc",{A_SSR,A_REG_N},{HEX_0,REG_N,HEX_3,HEX_2}, arch_sh3_nommu_up}
+ stc SPC,r4 ;!/* 0000nnnn01000010 stc SPC,<REG_N> */{"stc",{A_SPC,A_REG_N},{HEX_0,REG_N,HEX_4,HEX_2}, arch_sh3_nommu_up}
+ stc r1_bank,r4 ;!/* 0000nnnn1xxx0010 stc Rn_BANK,<REG_N> */{"stc",{A_REG_B,A_REG_N},{HEX_0,REG_N,REG_B,HEX_2}, arch_sh3_nommu_up}
+ stc.l SR,@-r4 ;!/* 0100nnnn00000011 stc.l SR,@-<REG_N> */{"stc.l",{A_SR,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_3}, arch_sh_up}
+ stc.l VBR,@-r4 ;!/* 0100nnnn00100011 stc.l VBR,@-<REG_N> */{"stc.l",{A_VBR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_3}, arch_sh_up}
+ stc.l SSR,@-r4 ;!/* 0100nnnn00110011 stc.l SSR,@-<REG_N> */{"stc.l",{A_SSR,A_DEC_N},{HEX_4,REG_N,HEX_3,HEX_3}, arch_sh3_nommu_up}
+ stc.l SPC,@-r4 ;!/* 0100nnnn01000011 stc.l SPC,@-<REG_N> */{"stc.l",{A_SPC,A_DEC_N},{HEX_4,REG_N,HEX_4,HEX_3}, arch_sh3_nommu_up}
+ stc.l GBR,@-r4 ;!/* 0100nnnn00010011 stc.l GBR,@-<REG_N> */{"stc.l",{A_GBR,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_3}, arch_sh_up}
+ stc.l r1_bank,@-r4 ;!/* 0100nnnn1xxx0011 stc.l Rn_BANK,@-<REG_N> */{"stc.l",{A_REG_B,A_DEC_N},{HEX_4,REG_N,REG_B,HEX_3}, arch_sh3_nommu_up}
+ sts MACH,r4 ;!/* 0000nnnn00001010 sts MACH,<REG_N> */{"sts",{A_MACH,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ sts MACL,r4 ;!/* 0000nnnn00011010 sts MACL,<REG_N> */{"sts",{A_MACL,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ sts PR,r4 ;!/* 0000nnnn00101010 sts PR,<REG_N> */{"sts",{A_PR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ sts FPUL,r4 ;!/* 0000nnnn01011010 sts FPUL,<REG_N> */{"sts",{FPUL_M,A_REG_N},{HEX_0,REG_N,HEX_5,HEX_A}, arch_sh2e_up}
+ sts FPSCR,r4 ;!/* 0000nnnn01101010 sts FPSCR,<REG_N> */{"sts",{FPSCR_M,A_REG_N},{HEX_0,REG_N,HEX_6,HEX_A}, arch_sh2e_up}
+ sts.l MACH,@-r4 ;!/* 0100nnnn00000010 sts.l MACH,@-<REG_N>*/{"sts.l",{A_MACH,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ sts.l MACL,@-r4 ;!/* 0100nnnn00010010 sts.l MACL,@-<REG_N>*/{"sts.l",{A_MACL,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ sts.l PR,@-r4 ;!/* 0100nnnn00100010 sts.l PR,@-<REG_N> */{"sts.l",{A_PR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ sts.l FPUL,@-r4 ;!/* 0100nnnn01010010 sts.l FPUL,@-<REG_N>*/{"sts.l",{FPUL_M,A_DEC_N},{HEX_4,REG_N,HEX_5,HEX_2}, arch_sh2e_up}
+ sts.l FPSCR,@-r4 ;!/* 0100nnnn01100010 sts.l FPSCR,@-<REG_N>*/{"sts.l",{FPSCR_M,A_DEC_N},{HEX_4,REG_N,HEX_6,HEX_2}, arch_sh2e_up}
+ sub r5,r4 ;!/* 0011nnnnmmmm1000 sub <REG_M>,<REG_N> */{"sub",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_8}, arch_sh_up}
+ subc r5,r4 ;!/* 0011nnnnmmmm1010 subc <REG_M>,<REG_N>*/{"subc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_A}, arch_sh_up}
+ subv r5,r4 ;!/* 0011nnnnmmmm1011 subv <REG_M>,<REG_N>*/{"subv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_B}, arch_sh_up}
+ swap.b r5,r4 ;!/* 0110nnnnmmmm1000 swap.b <REG_M>,<REG_N>*/{"swap.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_8}, arch_sh_up}
+ swap.w r5,r4 ;!/* 0110nnnnmmmm1001 swap.w <REG_M>,<REG_N>*/{"swap.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_9}, arch_sh_up}
+ tas.b @r4 ;!/* 0100nnnn00011011 tas.b @<REG_N> */{"tas.b",{A_IND_N},{HEX_4,REG_N,HEX_1,HEX_B}, arch_sh_up}
+ trapa #4 ;!/* 11000011i8*1.... trapa #<imm> */{"trapa",{A_IMM},{HEX_C,HEX_3,IMM0_8}, arch_sh_up}
+ tst #4,R0 ;!/* 11001000i8*1.... tst #<imm>,R0 */{"tst",{A_IMM,A_R0},{HEX_C,HEX_8,IMM0_8}, arch_sh_up}
+ tst r5,r4 ;!/* 0010nnnnmmmm1000 tst <REG_M>,<REG_N> */{"tst",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_8}, arch_sh_up}
+ tst.b #4,@(R0,GBR) ;!/* 11001100i8*1.... tst.b #<imm>,@(R0,GBR)*/{"tst.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_C,IMM0_8}, arch_sh_up}
+ xor #4,R0 ;!/* 11001010i8*1.... xor #<imm>,R0 */{"xor",{A_IMM,A_R0},{HEX_C,HEX_A,IMM0_8}, arch_sh_up}
+ xor r5,r4 ;!/* 0010nnnnmmmm1010 xor <REG_M>,<REG_N> */{"xor",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_A}, arch_sh_up}
+ xor.b #4,@(R0,GBR) ;!/* 11001110i8*1.... xor.b #<imm>,@(R0,GBR)*/{"xor.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_E,IMM0_8}, arch_sh_up}
+ xtrct r5,r4 ;!/* 0010nnnnmmmm1101 xtrct <REG_M>,<REG_N>*/{"xtrct",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_D}, arch_sh_up}
+ dt r4 ;!/* 0100nnnn00010000 dt <REG_N> */{"dt",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_0}, arch_sh2_up}
+ dmuls.l r5,r4 ;!/* 0011nnnnmmmm1101 dmuls.l <REG_M>,<REG_N>*/{"dmuls.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_D}, arch_sh2_up}
+ dmulu.l r5,r4 ;!/* 0011nnnnmmmm0101 dmulu.l <REG_M>,<REG_N>*/{"dmulu.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_5}, arch_sh2_up}
+ mac.l @r5+,@r4+ ;!/* 0000nnnnmmmm1111 mac.l @<REG_M>+,@<REG_N>+*/{"mac.l",{A_INC_M,A_INC_N},{HEX_0,REG_N,REG_M,HEX_F}, arch_sh2_up}
+ braf r4 ;!/* 0000nnnn00100011 braf <REG_N> */{"braf",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_3}, arch_sh2_up}
+ bsrf r4 ;!/* 0000nnnn00000011 bsrf <REG_N> */{"bsrf",{A_REG_N},{HEX_0,REG_N,HEX_0,HEX_3}, arch_sh2_up}
+ fabs fr1 ;!/* 1111nnnn01011101 fabs <F_REG_N> */{"fabs",{F_REG_N},{HEX_F,REG_N,HEX_5,HEX_D}, arch_sh2e_up}
+ fadd fr2,fr1 ;!/* 1111nnnnmmmm0000 fadd <F_REG_M>,<F_REG_N>*/{"fadd",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_0}, arch_sh2e_up}
+ fcmp/eq fr2,fr1 ;!/* 1111nnnnmmmm0100 fcmp/eq <F_REG_M>,<F_REG_N>*/{"fcmp/eq",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_4}, arch_sh2e_up}
+ fcmp/gt fr2,fr1 ;!/* 1111nnnnmmmm0101 fcmp/gt <F_REG_M>,<F_REG_N>*/{"fcmp/gt",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_5}, arch_sh2e_up}
+ fdiv fr2,fr1 ;!/* 1111nnnnmmmm0011 fdiv <F_REG_M>,<F_REG_N>*/{"fdiv",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_3}, arch_sh2e_up}
+ fldi0 fr1 ;!/* 1111nnnn10001101 fldi0 <F_REG_N> */{"fldi0",{F_REG_N},{HEX_F,REG_N,HEX_8,HEX_D}, arch_sh2e_up}
+ fldi1 fr1 ;!/* 1111nnnn10011101 fldi1 <F_REG_N> */{"fldi1",{F_REG_N},{HEX_F,REG_N,HEX_9,HEX_D}, arch_sh2e_up}
+ flds fr1,FPUL ;!/* 1111nnnn00011101 flds <F_REG_N>,FPUL*/{"flds",{F_REG_N,FPUL_M},{HEX_F,REG_N,HEX_1,HEX_D}, arch_sh2e_up}
+ float FPUL,fr1 ;!/* 1111nnnn00101101 float FPUL,<F_REG_N>*/{"float",{FPUL_M,F_REG_N},{HEX_F,REG_N,HEX_2,HEX_D}, arch_sh2e_up}
+ fmac FR0,fr2,fr1 ;!/* 1111nnnnmmmm1110 fmac FR0,<F_REG_M>,<F_REG_N>*/{"fmac",{F_FR0,F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_E}, arch_sh2e_up}
+ fmov fr2,fr1 ;!/* 1111nnnnmmmm1100 fmov <F_REG_M>,<F_REG_N>*/{"fmov",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_C}, arch_sh2e_up}
+ fmov @r5,fr1 ;!/* 1111nnnnmmmm1000 fmov @<REG_M>,<F_REG_N>*/{"fmov",{A_IND_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh2e_up}
+ fmov fr2,@r4 ;!/* 1111nnnnmmmm1010 fmov <F_REG_M>,@<REG_N>*/{"fmov",{F_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh2e_up}
+ fmov @r5+,fr1 ;!/* 1111nnnnmmmm1001 fmov @<REG_M>+,<F_REG_N>*/{"fmov",{A_INC_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh2e_up}
+ fmov fr2,@-r4 ;!/* 1111nnnnmmmm1011 fmov <F_REG_M>,@-<REG_N>*/{"fmov",{F_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh2e_up}
+ fmov @(R0,r5),fr1 ;!/* 1111nnnnmmmm0110 fmov @(R0,<REG_M>),<F_REG_N>*/{"fmov",{A_IND_R0_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh2e_up}
+ fmov fr2,@(R0,r4) ;!/* 1111nnnnmmmm0111 fmov <F_REG_M>,@(R0,<REG_N>)*/{"fmov",{F_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh2e_up}
+ fmov.s @r5,fr1 ;!/* 1111nnnnmmmm1000 fmov.s @<REG_M>,<F_REG_N>*/{"fmov.s",{A_IND_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh2e_up}
+ fmov.s fr2,@r4 ;!/* 1111nnnnmmmm1010 fmov.s <F_REG_M>,@<REG_N>*/{"fmov.s",{F_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh2e_up}
+ fmov.s @r5+,fr1 ;!/* 1111nnnnmmmm1001 fmov.s @<REG_M>+,<F_REG_N>*/{"fmov.s",{A_INC_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh2e_up}
+ fmov.s fr2,@-r4 ;!/* 1111nnnnmmmm1011 fmov.s <F_REG_M>,@-<REG_N>*/{"fmov.s",{F_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh2e_up}
+ fmov.s @(R0,r5),fr1 ;!/* 1111nnnnmmmm0110 fmov.s @(R0,<REG_M>),<F_REG_N>*/{"fmov.s",{A_IND_R0_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh2e_up}
+ fmov.s fr2,@(R0,r4) ;!/* 1111nnnnmmmm0111 fmov.s <F_REG_M>,@(R0,<REG_N>)*/{"fmov.s",{F_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh2e_up}
+ fmul fr2,fr1 ;!/* 1111nnnnmmmm0010 fmul <F_REG_M>,<F_REG_N>*/{"fmul",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_2}, arch_sh2e_up}
+ fneg fr1 ;!/* 1111nnnn01001101 fneg <F_REG_N> */{"fneg",{F_REG_N},{HEX_F,REG_N,HEX_4,HEX_D}, arch_sh2e_up}
+ fsqrt fr1 ;!/* 1111nnnn01101101 fsqrt <F_REG_N> */{"fsqrt",{F_REG_N},{HEX_F,REG_N,HEX_6,HEX_D}, arch_sh2a_or_sh3e_up}
+ fsts FPUL,fr1 ;!/* 1111nnnn00001101 fsts FPUL,<F_REG_N>*/{"fsts",{FPUL_M,F_REG_N},{HEX_F,REG_N,HEX_0,HEX_D}, arch_sh2e_up}
+ fsub fr2,fr1 ;!/* 1111nnnnmmmm0001 fsub <F_REG_M>,<F_REG_N>*/{"fsub",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_1}, arch_sh2e_up}
+ ftrc fr1,FPUL ;!/* 1111nnnn00111101 ftrc <F_REG_N>,FPUL*/{"ftrc",{F_REG_N,FPUL_M},{HEX_F,REG_N,HEX_3,HEX_D}, arch_sh2e_up}
diff --git a/binutils-2.21/ld/testsuite/ld-sh/arch/sh4-nofpu.s b/binutils-2.21/ld/testsuite/ld-sh/arch/sh4-nofpu.s
new file mode 100644
index 0000000..fb225a1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/arch/sh4-nofpu.s
@@ -0,0 +1,194 @@
+! Generated file. DO NOT EDIT.
+!
+! This file was generated by gas/testsuite/gas/sh/arch/arch.exp .
+! This file should contain every instruction valid on
+! architecture sh4-nofpu but no more.
+! If the tests are failing because the expected results
+! have changed then run 'make check' and copy the new file
+! from <objdir>/gas/testsuite/sh4-nofpu.s
+! to <srcdir>/gas/testsuite/gas/sh/arch/sh4-nofpu.s .
+! Make sure there are no unexpected or missing instructions.
+
+ .section .text
+sh4_nofpu:
+! Instructions introduced into sh4-nofpu
+
+! Instructions inherited from ancestors: sh sh2 sh2a-nofpu-or-sh3-nommu sh2a-nofpu-or-sh4-nommu-nofpu sh3 sh3-nommu sh4-nommu-nofpu
+ add #4,r4 ;!/* 0111nnnni8*1.... add #<imm>,<REG_N> */{"add",{A_IMM,A_REG_N},{HEX_7,REG_N,IMM0_8}, arch_sh_up}
+ add r5,r4 ;!/* 0011nnnnmmmm1100 add <REG_M>,<REG_N> */{"add",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_C}, arch_sh_up}
+ addc r5,r4 ;!/* 0011nnnnmmmm1110 addc <REG_M>,<REG_N>*/{"addc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_E}, arch_sh_up}
+ addv r5,r4 ;!/* 0011nnnnmmmm1111 addv <REG_M>,<REG_N>*/{"addv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_F}, arch_sh_up}
+ and #4,R0 ;!/* 11001001i8*1.... and #<imm>,R0 */{"and",{A_IMM,A_R0},{HEX_C,HEX_9,IMM0_8}, arch_sh_up}
+ and r5,r4 ;!/* 0010nnnnmmmm1001 and <REG_M>,<REG_N> */{"and",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_9}, arch_sh_up}
+ and.b #4,@(R0,GBR) ;!/* 11001101i8*1.... and.b #<imm>,@(R0,GBR)*/{"and.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_D,IMM0_8}, arch_sh_up}
+ bra .+8 ;!/* 1010i12......... bra <bdisp12> */{"bra",{A_BDISP12},{HEX_A,BRANCH_12}, arch_sh_up}
+ bsr .+8 ;!/* 1011i12......... bsr <bdisp12> */{"bsr",{A_BDISP12},{HEX_B,BRANCH_12}, arch_sh_up}
+ bt .+8 ;!/* 10001001i8p1.... bt <bdisp8> */{"bt",{A_BDISP8},{HEX_8,HEX_9,BRANCH_8}, arch_sh_up}
+ bf .+8 ;!/* 10001011i8p1.... bf <bdisp8> */{"bf",{A_BDISP8},{HEX_8,HEX_B,BRANCH_8}, arch_sh_up}
+ bt.s .+8 ;!/* 10001101i8p1.... bt.s <bdisp8> */{"bt.s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bt/s .+8 ;!/* 10001101i8p1.... bt/s <bdisp8> */{"bt/s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bf.s .+8 ;!/* 10001111i8p1.... bf.s <bdisp8> */{"bf.s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ bf/s .+8 ;!/* 10001111i8p1.... bf/s <bdisp8> */{"bf/s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ clrmac ;!/* 0000000000101000 clrmac */{"clrmac",{0},{HEX_0,HEX_0,HEX_2,HEX_8}, arch_sh_up}
+ clrs ;!/* 0000000001001000 clrs */{"clrs",{0},{HEX_0,HEX_0,HEX_4,HEX_8}, arch_sh_up}
+ clrt ;!/* 0000000000001000 clrt */{"clrt",{0},{HEX_0,HEX_0,HEX_0,HEX_8}, arch_sh_up}
+ cmp/eq #4,R0 ;!/* 10001000i8*1.... cmp/eq #<imm>,R0 */{"cmp/eq",{A_IMM,A_R0},{HEX_8,HEX_8,IMM0_8}, arch_sh_up}
+ cmp/eq r5,r4 ;!/* 0011nnnnmmmm0000 cmp/eq <REG_M>,<REG_N>*/{"cmp/eq",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_0}, arch_sh_up}
+ cmp/ge r5,r4 ;!/* 0011nnnnmmmm0011 cmp/ge <REG_M>,<REG_N>*/{"cmp/ge",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_3}, arch_sh_up}
+ cmp/gt r5,r4 ;!/* 0011nnnnmmmm0111 cmp/gt <REG_M>,<REG_N>*/{"cmp/gt",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_7}, arch_sh_up}
+ cmp/hi r5,r4 ;!/* 0011nnnnmmmm0110 cmp/hi <REG_M>,<REG_N>*/{"cmp/hi",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_6}, arch_sh_up}
+ cmp/hs r5,r4 ;!/* 0011nnnnmmmm0010 cmp/hs <REG_M>,<REG_N>*/{"cmp/hs",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_2}, arch_sh_up}
+ cmp/pl r4 ;!/* 0100nnnn00010101 cmp/pl <REG_N> */{"cmp/pl",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_5}, arch_sh_up}
+ cmp/pz r4 ;!/* 0100nnnn00010001 cmp/pz <REG_N> */{"cmp/pz",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_1}, arch_sh_up}
+ cmp/str r5,r4 ;!/* 0010nnnnmmmm1100 cmp/str <REG_M>,<REG_N>*/{"cmp/str",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_C}, arch_sh_up}
+ div0s r5,r4 ;!/* 0010nnnnmmmm0111 div0s <REG_M>,<REG_N>*/{"div0s",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_7}, arch_sh_up}
+ div0u ;!/* 0000000000011001 div0u */{"div0u",{0},{HEX_0,HEX_0,HEX_1,HEX_9}, arch_sh_up}
+ div1 r5,r4 ;!/* 0011nnnnmmmm0100 div1 <REG_M>,<REG_N>*/{"div1",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_4}, arch_sh_up}
+ exts.b r5,r4 ;!/* 0110nnnnmmmm1110 exts.b <REG_M>,<REG_N>*/{"exts.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_E}, arch_sh_up}
+ exts.w r5,r4 ;!/* 0110nnnnmmmm1111 exts.w <REG_M>,<REG_N>*/{"exts.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_F}, arch_sh_up}
+ extu.b r5,r4 ;!/* 0110nnnnmmmm1100 extu.b <REG_M>,<REG_N>*/{"extu.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_C}, arch_sh_up}
+ extu.w r5,r4 ;!/* 0110nnnnmmmm1101 extu.w <REG_M>,<REG_N>*/{"extu.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_D}, arch_sh_up}
+ jmp @r4 ;!/* 0100nnnn00101011 jmp @<REG_N> */{"jmp",{A_IND_N},{HEX_4,REG_N,HEX_2,HEX_B}, arch_sh_up}
+ jsr @r4 ;!/* 0100nnnn00001011 jsr @<REG_N> */{"jsr",{A_IND_N},{HEX_4,REG_N,HEX_0,HEX_B}, arch_sh_up}
+ ldc r4,SR ;!/* 0100nnnn00001110 ldc <REG_N>,SR */{"ldc",{A_REG_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_E}, arch_sh_up}
+ ldc r4,GBR ;!/* 0100nnnn00011110 ldc <REG_N>,GBR */{"ldc",{A_REG_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_E}, arch_sh_up}
+ ldc r4,SGR ;!/* 0100nnnn00111010 ldc <REG_N>,SGR */{"ldc",{A_REG_N,A_SGR},{HEX_4,REG_N,HEX_3,HEX_A}, arch_sh4_nommu_nofpu_up}
+ ldc r4,VBR ;!/* 0100nnnn00101110 ldc <REG_N>,VBR */{"ldc",{A_REG_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_E}, arch_sh_up}
+ ldc r4,SSR ;!/* 0100nnnn00111110 ldc <REG_N>,SSR */{"ldc",{A_REG_N,A_SSR},{HEX_4,REG_N,HEX_3,HEX_E}, arch_sh3_nommu_up}
+ ldc r4,SPC ;!/* 0100nnnn01001110 ldc <REG_N>,SPC */{"ldc",{A_REG_N,A_SPC},{HEX_4,REG_N,HEX_4,HEX_E}, arch_sh3_nommu_up}
+ ldc r4,DBR ;!/* 0100nnnn11111010 ldc <REG_N>,DBR */{"ldc",{A_REG_N,A_DBR},{HEX_4,REG_N,HEX_F,HEX_A}, arch_sh4_nommu_nofpu_up}
+ ldc r4,r1_bank ;!/* 0100nnnn1xxx1110 ldc <REG_N>,Rn_BANK */{"ldc",{A_REG_N,A_REG_B},{HEX_4,REG_N,REG_B,HEX_E}, arch_sh3_nommu_up}
+ ldc.l @r4+,SR ;!/* 0100nnnn00000111 ldc.l @<REG_N>+,SR */{"ldc.l",{A_INC_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_7}, arch_sh_up}
+ ldc.l @r4+,GBR ;!/* 0100nnnn00010111 ldc.l @<REG_N>+,GBR */{"ldc.l",{A_INC_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_7}, arch_sh_up}
+ ldc.l @r4+,VBR ;!/* 0100nnnn00100111 ldc.l @<REG_N>+,VBR */{"ldc.l",{A_INC_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_7}, arch_sh_up}
+ ldc.l @r4+,SGR ;!/* 0100nnnn00110110 ldc.l @<REG_N>+,SGR */{"ldc.l",{A_INC_N,A_SGR},{HEX_4,REG_N,HEX_3,HEX_6}, arch_sh4_nommu_nofpu_up}
+ ldc.l @r4+,SSR ;!/* 0100nnnn00110111 ldc.l @<REG_N>+,SSR */{"ldc.l",{A_INC_N,A_SSR},{HEX_4,REG_N,HEX_3,HEX_7}, arch_sh3_nommu_up}
+ ldc.l @r4+,SPC ;!/* 0100nnnn01000111 ldc.l @<REG_N>+,SPC */{"ldc.l",{A_INC_N,A_SPC},{HEX_4,REG_N,HEX_4,HEX_7}, arch_sh3_nommu_up}
+ ldc.l @r4+,DBR ;!/* 0100nnnn11110110 ldc.l @<REG_N>+,DBR */{"ldc.l",{A_INC_N,A_DBR},{HEX_4,REG_N,HEX_F,HEX_6}, arch_sh4_nommu_nofpu_up}
+ ldc.l @r4+,r1_bank ;!/* 0100nnnn1xxx0111 ldc.l @<REG_N>+,Rn_BANK */{"ldc.l",{A_INC_N,A_REG_B},{HEX_4,REG_N,REG_B,HEX_7}, arch_sh3_nommu_up}
+ lds r4,MACH ;!/* 0100nnnn00001010 lds <REG_N>,MACH */{"lds",{A_REG_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ lds r4,MACL ;!/* 0100nnnn00011010 lds <REG_N>,MACL */{"lds",{A_REG_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ lds r4,PR ;!/* 0100nnnn00101010 lds <REG_N>,PR */{"lds",{A_REG_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ lds.l @r4+,MACH ;!/* 0100nnnn00000110 lds.l @<REG_N>+,MACH*/{"lds.l",{A_INC_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_6}, arch_sh_up}
+ lds.l @r4+,MACL ;!/* 0100nnnn00010110 lds.l @<REG_N>+,MACL*/{"lds.l",{A_INC_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_6}, arch_sh_up}
+ lds.l @r4+,PR ;!/* 0100nnnn00100110 lds.l @<REG_N>+,PR */{"lds.l",{A_INC_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_6}, arch_sh_up}
+ ldtlb ;!/* 0000000000111000 ldtlb */{"ldtlb",{0},{HEX_0,HEX_0,HEX_3,HEX_8}, arch_sh3_up}
+ mac.w @r5+,@r4+ ;!/* 0100nnnnmmmm1111 mac.w @<REG_M>+,@<REG_N>+*/{"mac.w",{A_INC_M,A_INC_N},{HEX_4,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mov #4,r4 ;!/* 1110nnnni8*1.... mov #<imm>,<REG_N> */{"mov",{A_IMM,A_REG_N},{HEX_E,REG_N,IMM0_8}, arch_sh_up}
+ mov r5,r4 ;!/* 0110nnnnmmmm0011 mov <REG_M>,<REG_N> */{"mov",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_3}, arch_sh_up}
+ mov.b r5,@(R0,r4) ;!/* 0000nnnnmmmm0100 mov.b <REG_M>,@(R0,<REG_N>)*/{"mov.b",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@-r4 ;!/* 0010nnnnmmmm0100 mov.b <REG_M>,@-<REG_N>*/{"mov.b",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@r4 ;!/* 0010nnnnmmmm0000 mov.b <REG_M>,@<REG_N>*/{"mov.b",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b @(8,r5),R0 ;!/* 10000100mmmmi4*1 mov.b @(<disp>,<REG_M>),R0*/{"mov.b",{A_DISP_REG_M,A_R0},{HEX_8,HEX_4,REG_M,IMM0_4}, arch_sh_up}
+ mov.b @(8,GBR),R0 ;!/* 11000100i8*1.... mov.b @(<disp>,GBR),R0*/{"mov.b",{A_DISP_GBR,A_R0},{HEX_C,HEX_4,IMM0_8}, arch_sh_up}
+ mov.b @(R0,r5),r4 ;!/* 0000nnnnmmmm1100 mov.b @(R0,<REG_M>),<REG_N>*/{"mov.b",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_C}, arch_sh_up}
+ mov.b @r5+,r4 ;!/* 0110nnnnmmmm0100 mov.b @<REG_M>+,<REG_N>*/{"mov.b",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b @r5,r4 ;!/* 0110nnnnmmmm0000 mov.b @<REG_M>,<REG_N>*/{"mov.b",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b R0,@(8,r5) ;!/* 10000000mmmmi4*1 mov.b R0,@(<disp>,<REG_M>)*/{"mov.b",{A_R0,A_DISP_REG_M},{HEX_8,HEX_0,REG_M,IMM1_4}, arch_sh_up}
+ mov.b R0,@(8,GBR) ;!/* 11000000i8*1.... mov.b R0,@(<disp>,GBR)*/{"mov.b",{A_R0,A_DISP_GBR},{HEX_C,HEX_0,IMM1_8}, arch_sh_up}
+ mov.l r5,@(8,r4) ;!/* 0001nnnnmmmmi4*4 mov.l <REG_M>,@(<disp>,<REG_N>)*/{"mov.l",{ A_REG_M,A_DISP_REG_N},{HEX_1,REG_N,REG_M,IMM1_4BY4}, arch_sh_up}
+ mov.l r5,@(R0,r4) ;!/* 0000nnnnmmmm0110 mov.l <REG_M>,@(R0,<REG_N>)*/{"mov.l",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@-r4 ;!/* 0010nnnnmmmm0110 mov.l <REG_M>,@-<REG_N>*/{"mov.l",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@r4 ;!/* 0010nnnnmmmm0010 mov.l <REG_M>,@<REG_N>*/{"mov.l",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l @(8,r5),r4 ;!/* 0101nnnnmmmmi4*4 mov.l @(<disp>,<REG_M>),<REG_N>*/{"mov.l",{A_DISP_REG_M,A_REG_N},{HEX_5,REG_N,REG_M,IMM0_4BY4}, arch_sh_up}
+ mov.l @(8,GBR),R0 ;!/* 11000110i8*4.... mov.l @(<disp>,GBR),R0*/{"mov.l",{A_DISP_GBR,A_R0},{HEX_C,HEX_6,IMM0_8BY4}, arch_sh_up}
+ .align 2
+ mov.l @(8,PC),r4 ;!/* 1101nnnni8p4.... mov.l @(<disp>,PC),<REG_N>*/{"mov.l",{A_DISP_PC,A_REG_N},{HEX_D,REG_N,PCRELIMM_8BY4}, arch_sh_up}
+ mov.l @(R0,r5),r4 ;!/* 0000nnnnmmmm1110 mov.l @(R0,<REG_M>),<REG_N>*/{"mov.l",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mov.l @r5+,r4 ;!/* 0110nnnnmmmm0110 mov.l @<REG_M>+,<REG_N>*/{"mov.l",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l @r5,r4 ;!/* 0110nnnnmmmm0010 mov.l @<REG_M>,<REG_N>*/{"mov.l",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l R0,@(8,GBR) ;!/* 11000010i8*4.... mov.l R0,@(<disp>,GBR)*/{"mov.l",{A_R0,A_DISP_GBR},{HEX_C,HEX_2,IMM1_8BY4}, arch_sh_up}
+ mov.w r5,@(R0,r4) ;!/* 0000nnnnmmmm0101 mov.w <REG_M>,@(R0,<REG_N>)*/{"mov.w",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@-r4 ;!/* 0010nnnnmmmm0101 mov.w <REG_M>,@-<REG_N>*/{"mov.w",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@r4 ;!/* 0010nnnnmmmm0001 mov.w <REG_M>,@<REG_N>*/{"mov.w",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w @(8,r5),R0 ;!/* 10000101mmmmi4*2 mov.w @(<disp>,<REG_M>),R0*/{"mov.w",{A_DISP_REG_M,A_R0},{HEX_8,HEX_5,REG_M,IMM0_4BY2}, arch_sh_up}
+ mov.w @(8,GBR),R0 ;!/* 11000101i8*2.... mov.w @(<disp>,GBR),R0*/{"mov.w",{A_DISP_GBR,A_R0},{HEX_C,HEX_5,IMM0_8BY2}, arch_sh_up}
+ mov.w @(8,PC),r4 ;!/* 1001nnnni8p2.... mov.w @(<disp>,PC),<REG_N>*/{"mov.w",{A_DISP_PC,A_REG_N},{HEX_9,REG_N,PCRELIMM_8BY2}, arch_sh_up}
+ mov.w @(R0,r5),r4 ;!/* 0000nnnnmmmm1101 mov.w @(R0,<REG_M>),<REG_N>*/{"mov.w",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_D}, arch_sh_up}
+ mov.w @r5+,r4 ;!/* 0110nnnnmmmm0101 mov.w @<REG_M>+,<REG_N>*/{"mov.w",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w @r5,r4 ;!/* 0110nnnnmmmm0001 mov.w @<REG_M>,<REG_N>*/{"mov.w",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w R0,@(8,r5) ;!/* 10000001mmmmi4*2 mov.w R0,@(<disp>,<REG_M>)*/{"mov.w",{A_R0,A_DISP_REG_M},{HEX_8,HEX_1,REG_M,IMM1_4BY2}, arch_sh_up}
+ mov.w R0,@(8,GBR) ;!/* 11000001i8*2.... mov.w R0,@(<disp>,GBR)*/{"mov.w",{A_R0,A_DISP_GBR},{HEX_C,HEX_1,IMM1_8BY2}, arch_sh_up}
+ .align 2
+ mova @(8,PC),R0 ;!/* 11000111i8p4.... mova @(<disp>,PC),R0*/{"mova",{A_DISP_PC,A_R0},{HEX_C,HEX_7,PCRELIMM_8BY4}, arch_sh_up}
+ movca.l R0,@r4 ;!/* 0000nnnn11000011 movca.l R0,@<REG_N> */{"movca.l",{A_R0,A_IND_N},{HEX_0,REG_N,HEX_C,HEX_3}, arch_sh4_nommu_nofpu_up}
+ movt r4 ;!/* 0000nnnn00101001 movt <REG_N> */{"movt",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ muls.w r5,r4 ;!/* 0010nnnnmmmm1111 muls.w <REG_M>,<REG_N>*/{"muls.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ muls r5,r4 ;!/* 0010nnnnmmmm1111 muls <REG_M>,<REG_N>*/{"muls",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mul.l r5,r4 ;!/* 0000nnnnmmmm0111 mul.l <REG_M>,<REG_N>*/{"mul.l",{ A_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_7}, arch_sh2_up}
+ mulu.w r5,r4 ;!/* 0010nnnnmmmm1110 mulu.w <REG_M>,<REG_N>*/{"mulu.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mulu r5,r4 ;!/* 0010nnnnmmmm1110 mulu <REG_M>,<REG_N>*/{"mulu",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ neg r5,r4 ;!/* 0110nnnnmmmm1011 neg <REG_M>,<REG_N> */{"neg",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_B}, arch_sh_up}
+ negc r5,r4 ;!/* 0110nnnnmmmm1010 negc <REG_M>,<REG_N>*/{"negc",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_A}, arch_sh_up}
+ nop ;!/* 0000000000001001 nop */{"nop",{0},{HEX_0,HEX_0,HEX_0,HEX_9}, arch_sh_up}
+ not r5,r4 ;!/* 0110nnnnmmmm0111 not <REG_M>,<REG_N> */{"not",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_7}, arch_sh_up}
+ ocbi @r4 ;!/* 0000nnnn10010011 ocbi @<REG_N> */{"ocbi",{A_IND_N},{HEX_0,REG_N,HEX_9,HEX_3}, arch_sh4_nommu_nofpu_up}
+ ocbp @r4 ;!/* 0000nnnn10100011 ocbp @<REG_N> */{"ocbp",{A_IND_N},{HEX_0,REG_N,HEX_A,HEX_3}, arch_sh4_nommu_nofpu_up}
+ ocbwb @r4 ;!/* 0000nnnn10110011 ocbwb @<REG_N> */{"ocbwb",{A_IND_N},{HEX_0,REG_N,HEX_B,HEX_3}, arch_sh4_nommu_nofpu_up}
+ or #4,R0 ;!/* 11001011i8*1.... or #<imm>,R0 */{"or",{A_IMM,A_R0},{HEX_C,HEX_B,IMM0_8}, arch_sh_up}
+ or r5,r4 ;!/* 0010nnnnmmmm1011 or <REG_M>,<REG_N> */{"or",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_B}, arch_sh_up}
+ or.b #4,@(R0,GBR) ;!/* 11001111i8*1.... or.b #<imm>,@(R0,GBR)*/{"or.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_F,IMM0_8}, arch_sh_up}
+ pref @r4 ;!/* 0000nnnn10000011 pref @<REG_N> */{"pref",{A_IND_N},{HEX_0,REG_N,HEX_8,HEX_3}, arch_sh2a_nofpu_or_sh4_nommu_nofpu_up}
+ rotcl r4 ;!/* 0100nnnn00100100 rotcl <REG_N> */{"rotcl",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_4}, arch_sh_up}
+ rotcr r4 ;!/* 0100nnnn00100101 rotcr <REG_N> */{"rotcr",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_5}, arch_sh_up}
+ rotl r4 ;!/* 0100nnnn00000100 rotl <REG_N> */{"rotl",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_4}, arch_sh_up}
+ rotr r4 ;!/* 0100nnnn00000101 rotr <REG_N> */{"rotr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_5}, arch_sh_up}
+ rte ;!/* 0000000000101011 rte */{"rte",{0},{HEX_0,HEX_0,HEX_2,HEX_B}, arch_sh_up}
+ rts ;!/* 0000000000001011 rts */{"rts",{0},{HEX_0,HEX_0,HEX_0,HEX_B}, arch_sh_up}
+ sets ;!/* 0000000001011000 sets */{"sets",{0},{HEX_0,HEX_0,HEX_5,HEX_8}, arch_sh_up}
+ sett ;!/* 0000000000011000 sett */{"sett",{0},{HEX_0,HEX_0,HEX_1,HEX_8}, arch_sh_up}
+ shad r5,r4 ;!/* 0100nnnnmmmm1100 shad <REG_M>,<REG_N>*/{"shad",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_C}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shld r5,r4 ;!/* 0100nnnnmmmm1101 shld <REG_M>,<REG_N>*/{"shld",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_D}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shal r4 ;!/* 0100nnnn00100000 shal <REG_N> */{"shal",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_0}, arch_sh_up}
+ shar r4 ;!/* 0100nnnn00100001 shar <REG_N> */{"shar",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_1}, arch_sh_up}
+ shll r4 ;!/* 0100nnnn00000000 shll <REG_N> */{"shll",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_0}, arch_sh_up}
+ shll16 r4 ;!/* 0100nnnn00101000 shll16 <REG_N> */{"shll16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_8}, arch_sh_up}
+ shll2 r4 ;!/* 0100nnnn00001000 shll2 <REG_N> */{"shll2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_8}, arch_sh_up}
+ shll8 r4 ;!/* 0100nnnn00011000 shll8 <REG_N> */{"shll8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_8}, arch_sh_up}
+ shlr r4 ;!/* 0100nnnn00000001 shlr <REG_N> */{"shlr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_1}, arch_sh_up}
+ shlr16 r4 ;!/* 0100nnnn00101001 shlr16 <REG_N> */{"shlr16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ shlr2 r4 ;!/* 0100nnnn00001001 shlr2 <REG_N> */{"shlr2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_9}, arch_sh_up}
+ shlr8 r4 ;!/* 0100nnnn00011001 shlr8 <REG_N> */{"shlr8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_9}, arch_sh_up}
+ sleep ;!/* 0000000000011011 sleep */{"sleep",{0},{HEX_0,HEX_0,HEX_1,HEX_B}, arch_sh_up}
+ stc SR,r4 ;!/* 0000nnnn00000010 stc SR,<REG_N> */{"stc",{A_SR,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ stc GBR,r4 ;!/* 0000nnnn00010010 stc GBR,<REG_N> */{"stc",{A_GBR,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ stc VBR,r4 ;!/* 0000nnnn00100010 stc VBR,<REG_N> */{"stc",{A_VBR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ stc SSR,r4 ;!/* 0000nnnn00110010 stc SSR,<REG_N> */{"stc",{A_SSR,A_REG_N},{HEX_0,REG_N,HEX_3,HEX_2}, arch_sh3_nommu_up}
+ stc SPC,r4 ;!/* 0000nnnn01000010 stc SPC,<REG_N> */{"stc",{A_SPC,A_REG_N},{HEX_0,REG_N,HEX_4,HEX_2}, arch_sh3_nommu_up}
+ stc SGR,r4 ;!/* 0000nnnn00111010 stc SGR,<REG_N> */{"stc",{A_SGR,A_REG_N},{HEX_0,REG_N,HEX_3,HEX_A}, arch_sh4_nommu_nofpu_up}
+ stc DBR,r4 ;!/* 0000nnnn11111010 stc DBR,<REG_N> */{"stc",{A_DBR,A_REG_N},{HEX_0,REG_N,HEX_F,HEX_A}, arch_sh4_nommu_nofpu_up}
+ stc r1_bank,r4 ;!/* 0000nnnn1xxx0010 stc Rn_BANK,<REG_N> */{"stc",{A_REG_B,A_REG_N},{HEX_0,REG_N,REG_B,HEX_2}, arch_sh3_nommu_up}
+ stc.l SR,@-r4 ;!/* 0100nnnn00000011 stc.l SR,@-<REG_N> */{"stc.l",{A_SR,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_3}, arch_sh_up}
+ stc.l VBR,@-r4 ;!/* 0100nnnn00100011 stc.l VBR,@-<REG_N> */{"stc.l",{A_VBR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_3}, arch_sh_up}
+ stc.l SSR,@-r4 ;!/* 0100nnnn00110011 stc.l SSR,@-<REG_N> */{"stc.l",{A_SSR,A_DEC_N},{HEX_4,REG_N,HEX_3,HEX_3}, arch_sh3_nommu_up}
+ stc.l SPC,@-r4 ;!/* 0100nnnn01000011 stc.l SPC,@-<REG_N> */{"stc.l",{A_SPC,A_DEC_N},{HEX_4,REG_N,HEX_4,HEX_3}, arch_sh3_nommu_up}
+ stc.l GBR,@-r4 ;!/* 0100nnnn00010011 stc.l GBR,@-<REG_N> */{"stc.l",{A_GBR,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_3}, arch_sh_up}
+ stc.l SGR,@-r4 ;!/* 0100nnnn00110010 stc.l SGR,@-<REG_N> */{"stc.l",{A_SGR,A_DEC_N},{HEX_4,REG_N,HEX_3,HEX_2}, arch_sh4_nommu_nofpu_up}
+ stc.l DBR,@-r4 ;!/* 0100nnnn11110010 stc.l DBR,@-<REG_N> */{"stc.l",{A_DBR,A_DEC_N},{HEX_4,REG_N,HEX_F,HEX_2}, arch_sh4_nommu_nofpu_up}
+ stc.l r1_bank,@-r4 ;!/* 0100nnnn1xxx0011 stc.l Rn_BANK,@-<REG_N> */{"stc.l",{A_REG_B,A_DEC_N},{HEX_4,REG_N,REG_B,HEX_3}, arch_sh3_nommu_up}
+ sts MACH,r4 ;!/* 0000nnnn00001010 sts MACH,<REG_N> */{"sts",{A_MACH,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ sts MACL,r4 ;!/* 0000nnnn00011010 sts MACL,<REG_N> */{"sts",{A_MACL,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ sts PR,r4 ;!/* 0000nnnn00101010 sts PR,<REG_N> */{"sts",{A_PR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ sts.l MACH,@-r4 ;!/* 0100nnnn00000010 sts.l MACH,@-<REG_N>*/{"sts.l",{A_MACH,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ sts.l MACL,@-r4 ;!/* 0100nnnn00010010 sts.l MACL,@-<REG_N>*/{"sts.l",{A_MACL,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ sts.l PR,@-r4 ;!/* 0100nnnn00100010 sts.l PR,@-<REG_N> */{"sts.l",{A_PR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ sub r5,r4 ;!/* 0011nnnnmmmm1000 sub <REG_M>,<REG_N> */{"sub",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_8}, arch_sh_up}
+ subc r5,r4 ;!/* 0011nnnnmmmm1010 subc <REG_M>,<REG_N>*/{"subc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_A}, arch_sh_up}
+ subv r5,r4 ;!/* 0011nnnnmmmm1011 subv <REG_M>,<REG_N>*/{"subv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_B}, arch_sh_up}
+ swap.b r5,r4 ;!/* 0110nnnnmmmm1000 swap.b <REG_M>,<REG_N>*/{"swap.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_8}, arch_sh_up}
+ swap.w r5,r4 ;!/* 0110nnnnmmmm1001 swap.w <REG_M>,<REG_N>*/{"swap.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_9}, arch_sh_up}
+ tas.b @r4 ;!/* 0100nnnn00011011 tas.b @<REG_N> */{"tas.b",{A_IND_N},{HEX_4,REG_N,HEX_1,HEX_B}, arch_sh_up}
+ trapa #4 ;!/* 11000011i8*1.... trapa #<imm> */{"trapa",{A_IMM},{HEX_C,HEX_3,IMM0_8}, arch_sh_up}
+ tst #4,R0 ;!/* 11001000i8*1.... tst #<imm>,R0 */{"tst",{A_IMM,A_R0},{HEX_C,HEX_8,IMM0_8}, arch_sh_up}
+ tst r5,r4 ;!/* 0010nnnnmmmm1000 tst <REG_M>,<REG_N> */{"tst",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_8}, arch_sh_up}
+ tst.b #4,@(R0,GBR) ;!/* 11001100i8*1.... tst.b #<imm>,@(R0,GBR)*/{"tst.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_C,IMM0_8}, arch_sh_up}
+ xor #4,R0 ;!/* 11001010i8*1.... xor #<imm>,R0 */{"xor",{A_IMM,A_R0},{HEX_C,HEX_A,IMM0_8}, arch_sh_up}
+ xor r5,r4 ;!/* 0010nnnnmmmm1010 xor <REG_M>,<REG_N> */{"xor",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_A}, arch_sh_up}
+ xor.b #4,@(R0,GBR) ;!/* 11001110i8*1.... xor.b #<imm>,@(R0,GBR)*/{"xor.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_E,IMM0_8}, arch_sh_up}
+ xtrct r5,r4 ;!/* 0010nnnnmmmm1101 xtrct <REG_M>,<REG_N>*/{"xtrct",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_D}, arch_sh_up}
+ dt r4 ;!/* 0100nnnn00010000 dt <REG_N> */{"dt",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_0}, arch_sh2_up}
+ dmuls.l r5,r4 ;!/* 0011nnnnmmmm1101 dmuls.l <REG_M>,<REG_N>*/{"dmuls.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_D}, arch_sh2_up}
+ dmulu.l r5,r4 ;!/* 0011nnnnmmmm0101 dmulu.l <REG_M>,<REG_N>*/{"dmulu.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_5}, arch_sh2_up}
+ mac.l @r5+,@r4+ ;!/* 0000nnnnmmmm1111 mac.l @<REG_M>+,@<REG_N>+*/{"mac.l",{A_INC_M,A_INC_N},{HEX_0,REG_N,REG_M,HEX_F}, arch_sh2_up}
+ braf r4 ;!/* 0000nnnn00100011 braf <REG_N> */{"braf",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_3}, arch_sh2_up}
+ bsrf r4 ;!/* 0000nnnn00000011 bsrf <REG_N> */{"bsrf",{A_REG_N},{HEX_0,REG_N,HEX_0,HEX_3}, arch_sh2_up}
diff --git a/binutils-2.21/ld/testsuite/ld-sh/arch/sh4-nommu-nofpu.s b/binutils-2.21/ld/testsuite/ld-sh/arch/sh4-nommu-nofpu.s
new file mode 100644
index 0000000..fc2877a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/arch/sh4-nommu-nofpu.s
@@ -0,0 +1,193 @@
+! Generated file. DO NOT EDIT.
+!
+! This file was generated by gas/testsuite/gas/sh/arch/arch.exp .
+! This file should contain every instruction valid on
+! architecture sh4-nommu-nofpu but no more.
+! If the tests are failing because the expected results
+! have changed then run 'make check' and copy the new file
+! from <objdir>/gas/testsuite/sh4-nommu-nofpu.s
+! to <srcdir>/gas/testsuite/gas/sh/arch/sh4-nommu-nofpu.s .
+! Make sure there are no unexpected or missing instructions.
+
+ .section .text
+sh4_nommu_nofpu:
+! Instructions introduced into sh4-nommu-nofpu
+ ldc r4,SGR ;!/* 0100nnnn00111010 ldc <REG_N>,SGR */{"ldc",{A_REG_N,A_SGR},{HEX_4,REG_N,HEX_3,HEX_A}, arch_sh4_nommu_nofpu_up}
+ ldc r4,DBR ;!/* 0100nnnn11111010 ldc <REG_N>,DBR */{"ldc",{A_REG_N,A_DBR},{HEX_4,REG_N,HEX_F,HEX_A}, arch_sh4_nommu_nofpu_up}
+ ldc.l @r4+,SGR ;!/* 0100nnnn00110110 ldc.l @<REG_N>+,SGR */{"ldc.l",{A_INC_N,A_SGR},{HEX_4,REG_N,HEX_3,HEX_6}, arch_sh4_nommu_nofpu_up}
+ ldc.l @r4+,DBR ;!/* 0100nnnn11110110 ldc.l @<REG_N>+,DBR */{"ldc.l",{A_INC_N,A_DBR},{HEX_4,REG_N,HEX_F,HEX_6}, arch_sh4_nommu_nofpu_up}
+ movca.l R0,@r4 ;!/* 0000nnnn11000011 movca.l R0,@<REG_N> */{"movca.l",{A_R0,A_IND_N},{HEX_0,REG_N,HEX_C,HEX_3}, arch_sh4_nommu_nofpu_up}
+ ocbi @r4 ;!/* 0000nnnn10010011 ocbi @<REG_N> */{"ocbi",{A_IND_N},{HEX_0,REG_N,HEX_9,HEX_3}, arch_sh4_nommu_nofpu_up}
+ ocbp @r4 ;!/* 0000nnnn10100011 ocbp @<REG_N> */{"ocbp",{A_IND_N},{HEX_0,REG_N,HEX_A,HEX_3}, arch_sh4_nommu_nofpu_up}
+ ocbwb @r4 ;!/* 0000nnnn10110011 ocbwb @<REG_N> */{"ocbwb",{A_IND_N},{HEX_0,REG_N,HEX_B,HEX_3}, arch_sh4_nommu_nofpu_up}
+ stc SGR,r4 ;!/* 0000nnnn00111010 stc SGR,<REG_N> */{"stc",{A_SGR,A_REG_N},{HEX_0,REG_N,HEX_3,HEX_A}, arch_sh4_nommu_nofpu_up}
+ stc DBR,r4 ;!/* 0000nnnn11111010 stc DBR,<REG_N> */{"stc",{A_DBR,A_REG_N},{HEX_0,REG_N,HEX_F,HEX_A}, arch_sh4_nommu_nofpu_up}
+ stc.l SGR,@-r4 ;!/* 0100nnnn00110010 stc.l SGR,@-<REG_N> */{"stc.l",{A_SGR,A_DEC_N},{HEX_4,REG_N,HEX_3,HEX_2}, arch_sh4_nommu_nofpu_up}
+ stc.l DBR,@-r4 ;!/* 0100nnnn11110010 stc.l DBR,@-<REG_N> */{"stc.l",{A_DBR,A_DEC_N},{HEX_4,REG_N,HEX_F,HEX_2}, arch_sh4_nommu_nofpu_up}
+
+! Instructions inherited from ancestors: sh sh2 sh2a-nofpu-or-sh3-nommu sh2a-nofpu-or-sh4-nommu-nofpu sh3-nommu
+ add #4,r4 ;!/* 0111nnnni8*1.... add #<imm>,<REG_N> */{"add",{A_IMM,A_REG_N},{HEX_7,REG_N,IMM0_8}, arch_sh_up}
+ add r5,r4 ;!/* 0011nnnnmmmm1100 add <REG_M>,<REG_N> */{"add",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_C}, arch_sh_up}
+ addc r5,r4 ;!/* 0011nnnnmmmm1110 addc <REG_M>,<REG_N>*/{"addc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_E}, arch_sh_up}
+ addv r5,r4 ;!/* 0011nnnnmmmm1111 addv <REG_M>,<REG_N>*/{"addv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_F}, arch_sh_up}
+ and #4,R0 ;!/* 11001001i8*1.... and #<imm>,R0 */{"and",{A_IMM,A_R0},{HEX_C,HEX_9,IMM0_8}, arch_sh_up}
+ and r5,r4 ;!/* 0010nnnnmmmm1001 and <REG_M>,<REG_N> */{"and",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_9}, arch_sh_up}
+ and.b #4,@(R0,GBR) ;!/* 11001101i8*1.... and.b #<imm>,@(R0,GBR)*/{"and.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_D,IMM0_8}, arch_sh_up}
+ bra .+8 ;!/* 1010i12......... bra <bdisp12> */{"bra",{A_BDISP12},{HEX_A,BRANCH_12}, arch_sh_up}
+ bsr .+8 ;!/* 1011i12......... bsr <bdisp12> */{"bsr",{A_BDISP12},{HEX_B,BRANCH_12}, arch_sh_up}
+ bt .+8 ;!/* 10001001i8p1.... bt <bdisp8> */{"bt",{A_BDISP8},{HEX_8,HEX_9,BRANCH_8}, arch_sh_up}
+ bf .+8 ;!/* 10001011i8p1.... bf <bdisp8> */{"bf",{A_BDISP8},{HEX_8,HEX_B,BRANCH_8}, arch_sh_up}
+ bt.s .+8 ;!/* 10001101i8p1.... bt.s <bdisp8> */{"bt.s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bt/s .+8 ;!/* 10001101i8p1.... bt/s <bdisp8> */{"bt/s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bf.s .+8 ;!/* 10001111i8p1.... bf.s <bdisp8> */{"bf.s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ bf/s .+8 ;!/* 10001111i8p1.... bf/s <bdisp8> */{"bf/s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ clrmac ;!/* 0000000000101000 clrmac */{"clrmac",{0},{HEX_0,HEX_0,HEX_2,HEX_8}, arch_sh_up}
+ clrs ;!/* 0000000001001000 clrs */{"clrs",{0},{HEX_0,HEX_0,HEX_4,HEX_8}, arch_sh_up}
+ clrt ;!/* 0000000000001000 clrt */{"clrt",{0},{HEX_0,HEX_0,HEX_0,HEX_8}, arch_sh_up}
+ cmp/eq #4,R0 ;!/* 10001000i8*1.... cmp/eq #<imm>,R0 */{"cmp/eq",{A_IMM,A_R0},{HEX_8,HEX_8,IMM0_8}, arch_sh_up}
+ cmp/eq r5,r4 ;!/* 0011nnnnmmmm0000 cmp/eq <REG_M>,<REG_N>*/{"cmp/eq",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_0}, arch_sh_up}
+ cmp/ge r5,r4 ;!/* 0011nnnnmmmm0011 cmp/ge <REG_M>,<REG_N>*/{"cmp/ge",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_3}, arch_sh_up}
+ cmp/gt r5,r4 ;!/* 0011nnnnmmmm0111 cmp/gt <REG_M>,<REG_N>*/{"cmp/gt",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_7}, arch_sh_up}
+ cmp/hi r5,r4 ;!/* 0011nnnnmmmm0110 cmp/hi <REG_M>,<REG_N>*/{"cmp/hi",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_6}, arch_sh_up}
+ cmp/hs r5,r4 ;!/* 0011nnnnmmmm0010 cmp/hs <REG_M>,<REG_N>*/{"cmp/hs",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_2}, arch_sh_up}
+ cmp/pl r4 ;!/* 0100nnnn00010101 cmp/pl <REG_N> */{"cmp/pl",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_5}, arch_sh_up}
+ cmp/pz r4 ;!/* 0100nnnn00010001 cmp/pz <REG_N> */{"cmp/pz",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_1}, arch_sh_up}
+ cmp/str r5,r4 ;!/* 0010nnnnmmmm1100 cmp/str <REG_M>,<REG_N>*/{"cmp/str",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_C}, arch_sh_up}
+ div0s r5,r4 ;!/* 0010nnnnmmmm0111 div0s <REG_M>,<REG_N>*/{"div0s",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_7}, arch_sh_up}
+ div0u ;!/* 0000000000011001 div0u */{"div0u",{0},{HEX_0,HEX_0,HEX_1,HEX_9}, arch_sh_up}
+ div1 r5,r4 ;!/* 0011nnnnmmmm0100 div1 <REG_M>,<REG_N>*/{"div1",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_4}, arch_sh_up}
+ exts.b r5,r4 ;!/* 0110nnnnmmmm1110 exts.b <REG_M>,<REG_N>*/{"exts.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_E}, arch_sh_up}
+ exts.w r5,r4 ;!/* 0110nnnnmmmm1111 exts.w <REG_M>,<REG_N>*/{"exts.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_F}, arch_sh_up}
+ extu.b r5,r4 ;!/* 0110nnnnmmmm1100 extu.b <REG_M>,<REG_N>*/{"extu.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_C}, arch_sh_up}
+ extu.w r5,r4 ;!/* 0110nnnnmmmm1101 extu.w <REG_M>,<REG_N>*/{"extu.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_D}, arch_sh_up}
+ jmp @r4 ;!/* 0100nnnn00101011 jmp @<REG_N> */{"jmp",{A_IND_N},{HEX_4,REG_N,HEX_2,HEX_B}, arch_sh_up}
+ jsr @r4 ;!/* 0100nnnn00001011 jsr @<REG_N> */{"jsr",{A_IND_N},{HEX_4,REG_N,HEX_0,HEX_B}, arch_sh_up}
+ ldc r4,SR ;!/* 0100nnnn00001110 ldc <REG_N>,SR */{"ldc",{A_REG_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_E}, arch_sh_up}
+ ldc r4,GBR ;!/* 0100nnnn00011110 ldc <REG_N>,GBR */{"ldc",{A_REG_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_E}, arch_sh_up}
+ ldc r4,VBR ;!/* 0100nnnn00101110 ldc <REG_N>,VBR */{"ldc",{A_REG_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_E}, arch_sh_up}
+ ldc r4,SSR ;!/* 0100nnnn00111110 ldc <REG_N>,SSR */{"ldc",{A_REG_N,A_SSR},{HEX_4,REG_N,HEX_3,HEX_E}, arch_sh3_nommu_up}
+ ldc r4,SPC ;!/* 0100nnnn01001110 ldc <REG_N>,SPC */{"ldc",{A_REG_N,A_SPC},{HEX_4,REG_N,HEX_4,HEX_E}, arch_sh3_nommu_up}
+ ldc r4,r1_bank ;!/* 0100nnnn1xxx1110 ldc <REG_N>,Rn_BANK */{"ldc",{A_REG_N,A_REG_B},{HEX_4,REG_N,REG_B,HEX_E}, arch_sh3_nommu_up}
+ ldc.l @r4+,SR ;!/* 0100nnnn00000111 ldc.l @<REG_N>+,SR */{"ldc.l",{A_INC_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_7}, arch_sh_up}
+ ldc.l @r4+,GBR ;!/* 0100nnnn00010111 ldc.l @<REG_N>+,GBR */{"ldc.l",{A_INC_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_7}, arch_sh_up}
+ ldc.l @r4+,VBR ;!/* 0100nnnn00100111 ldc.l @<REG_N>+,VBR */{"ldc.l",{A_INC_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_7}, arch_sh_up}
+ ldc.l @r4+,SSR ;!/* 0100nnnn00110111 ldc.l @<REG_N>+,SSR */{"ldc.l",{A_INC_N,A_SSR},{HEX_4,REG_N,HEX_3,HEX_7}, arch_sh3_nommu_up}
+ ldc.l @r4+,SPC ;!/* 0100nnnn01000111 ldc.l @<REG_N>+,SPC */{"ldc.l",{A_INC_N,A_SPC},{HEX_4,REG_N,HEX_4,HEX_7}, arch_sh3_nommu_up}
+ ldc.l @r4+,r1_bank ;!/* 0100nnnn1xxx0111 ldc.l @<REG_N>+,Rn_BANK */{"ldc.l",{A_INC_N,A_REG_B},{HEX_4,REG_N,REG_B,HEX_7}, arch_sh3_nommu_up}
+ lds r4,MACH ;!/* 0100nnnn00001010 lds <REG_N>,MACH */{"lds",{A_REG_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ lds r4,MACL ;!/* 0100nnnn00011010 lds <REG_N>,MACL */{"lds",{A_REG_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ lds r4,PR ;!/* 0100nnnn00101010 lds <REG_N>,PR */{"lds",{A_REG_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ lds.l @r4+,MACH ;!/* 0100nnnn00000110 lds.l @<REG_N>+,MACH*/{"lds.l",{A_INC_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_6}, arch_sh_up}
+ lds.l @r4+,MACL ;!/* 0100nnnn00010110 lds.l @<REG_N>+,MACL*/{"lds.l",{A_INC_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_6}, arch_sh_up}
+ lds.l @r4+,PR ;!/* 0100nnnn00100110 lds.l @<REG_N>+,PR */{"lds.l",{A_INC_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_6}, arch_sh_up}
+ mac.w @r5+,@r4+ ;!/* 0100nnnnmmmm1111 mac.w @<REG_M>+,@<REG_N>+*/{"mac.w",{A_INC_M,A_INC_N},{HEX_4,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mov #4,r4 ;!/* 1110nnnni8*1.... mov #<imm>,<REG_N> */{"mov",{A_IMM,A_REG_N},{HEX_E,REG_N,IMM0_8}, arch_sh_up}
+ mov r5,r4 ;!/* 0110nnnnmmmm0011 mov <REG_M>,<REG_N> */{"mov",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_3}, arch_sh_up}
+ mov.b r5,@(R0,r4) ;!/* 0000nnnnmmmm0100 mov.b <REG_M>,@(R0,<REG_N>)*/{"mov.b",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@-r4 ;!/* 0010nnnnmmmm0100 mov.b <REG_M>,@-<REG_N>*/{"mov.b",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@r4 ;!/* 0010nnnnmmmm0000 mov.b <REG_M>,@<REG_N>*/{"mov.b",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b @(8,r5),R0 ;!/* 10000100mmmmi4*1 mov.b @(<disp>,<REG_M>),R0*/{"mov.b",{A_DISP_REG_M,A_R0},{HEX_8,HEX_4,REG_M,IMM0_4}, arch_sh_up}
+ mov.b @(8,GBR),R0 ;!/* 11000100i8*1.... mov.b @(<disp>,GBR),R0*/{"mov.b",{A_DISP_GBR,A_R0},{HEX_C,HEX_4,IMM0_8}, arch_sh_up}
+ mov.b @(R0,r5),r4 ;!/* 0000nnnnmmmm1100 mov.b @(R0,<REG_M>),<REG_N>*/{"mov.b",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_C}, arch_sh_up}
+ mov.b @r5+,r4 ;!/* 0110nnnnmmmm0100 mov.b @<REG_M>+,<REG_N>*/{"mov.b",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b @r5,r4 ;!/* 0110nnnnmmmm0000 mov.b @<REG_M>,<REG_N>*/{"mov.b",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b R0,@(8,r5) ;!/* 10000000mmmmi4*1 mov.b R0,@(<disp>,<REG_M>)*/{"mov.b",{A_R0,A_DISP_REG_M},{HEX_8,HEX_0,REG_M,IMM1_4}, arch_sh_up}
+ mov.b R0,@(8,GBR) ;!/* 11000000i8*1.... mov.b R0,@(<disp>,GBR)*/{"mov.b",{A_R0,A_DISP_GBR},{HEX_C,HEX_0,IMM1_8}, arch_sh_up}
+ mov.l r5,@(8,r4) ;!/* 0001nnnnmmmmi4*4 mov.l <REG_M>,@(<disp>,<REG_N>)*/{"mov.l",{ A_REG_M,A_DISP_REG_N},{HEX_1,REG_N,REG_M,IMM1_4BY4}, arch_sh_up}
+ mov.l r5,@(R0,r4) ;!/* 0000nnnnmmmm0110 mov.l <REG_M>,@(R0,<REG_N>)*/{"mov.l",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@-r4 ;!/* 0010nnnnmmmm0110 mov.l <REG_M>,@-<REG_N>*/{"mov.l",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@r4 ;!/* 0010nnnnmmmm0010 mov.l <REG_M>,@<REG_N>*/{"mov.l",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l @(8,r5),r4 ;!/* 0101nnnnmmmmi4*4 mov.l @(<disp>,<REG_M>),<REG_N>*/{"mov.l",{A_DISP_REG_M,A_REG_N},{HEX_5,REG_N,REG_M,IMM0_4BY4}, arch_sh_up}
+ mov.l @(8,GBR),R0 ;!/* 11000110i8*4.... mov.l @(<disp>,GBR),R0*/{"mov.l",{A_DISP_GBR,A_R0},{HEX_C,HEX_6,IMM0_8BY4}, arch_sh_up}
+ .align 2
+ mov.l @(8,PC),r4 ;!/* 1101nnnni8p4.... mov.l @(<disp>,PC),<REG_N>*/{"mov.l",{A_DISP_PC,A_REG_N},{HEX_D,REG_N,PCRELIMM_8BY4}, arch_sh_up}
+ mov.l @(R0,r5),r4 ;!/* 0000nnnnmmmm1110 mov.l @(R0,<REG_M>),<REG_N>*/{"mov.l",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mov.l @r5+,r4 ;!/* 0110nnnnmmmm0110 mov.l @<REG_M>+,<REG_N>*/{"mov.l",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l @r5,r4 ;!/* 0110nnnnmmmm0010 mov.l @<REG_M>,<REG_N>*/{"mov.l",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l R0,@(8,GBR) ;!/* 11000010i8*4.... mov.l R0,@(<disp>,GBR)*/{"mov.l",{A_R0,A_DISP_GBR},{HEX_C,HEX_2,IMM1_8BY4}, arch_sh_up}
+ mov.w r5,@(R0,r4) ;!/* 0000nnnnmmmm0101 mov.w <REG_M>,@(R0,<REG_N>)*/{"mov.w",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@-r4 ;!/* 0010nnnnmmmm0101 mov.w <REG_M>,@-<REG_N>*/{"mov.w",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@r4 ;!/* 0010nnnnmmmm0001 mov.w <REG_M>,@<REG_N>*/{"mov.w",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w @(8,r5),R0 ;!/* 10000101mmmmi4*2 mov.w @(<disp>,<REG_M>),R0*/{"mov.w",{A_DISP_REG_M,A_R0},{HEX_8,HEX_5,REG_M,IMM0_4BY2}, arch_sh_up}
+ mov.w @(8,GBR),R0 ;!/* 11000101i8*2.... mov.w @(<disp>,GBR),R0*/{"mov.w",{A_DISP_GBR,A_R0},{HEX_C,HEX_5,IMM0_8BY2}, arch_sh_up}
+ mov.w @(8,PC),r4 ;!/* 1001nnnni8p2.... mov.w @(<disp>,PC),<REG_N>*/{"mov.w",{A_DISP_PC,A_REG_N},{HEX_9,REG_N,PCRELIMM_8BY2}, arch_sh_up}
+ mov.w @(R0,r5),r4 ;!/* 0000nnnnmmmm1101 mov.w @(R0,<REG_M>),<REG_N>*/{"mov.w",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_D}, arch_sh_up}
+ mov.w @r5+,r4 ;!/* 0110nnnnmmmm0101 mov.w @<REG_M>+,<REG_N>*/{"mov.w",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w @r5,r4 ;!/* 0110nnnnmmmm0001 mov.w @<REG_M>,<REG_N>*/{"mov.w",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w R0,@(8,r5) ;!/* 10000001mmmmi4*2 mov.w R0,@(<disp>,<REG_M>)*/{"mov.w",{A_R0,A_DISP_REG_M},{HEX_8,HEX_1,REG_M,IMM1_4BY2}, arch_sh_up}
+ mov.w R0,@(8,GBR) ;!/* 11000001i8*2.... mov.w R0,@(<disp>,GBR)*/{"mov.w",{A_R0,A_DISP_GBR},{HEX_C,HEX_1,IMM1_8BY2}, arch_sh_up}
+ .align 2
+ mova @(8,PC),R0 ;!/* 11000111i8p4.... mova @(<disp>,PC),R0*/{"mova",{A_DISP_PC,A_R0},{HEX_C,HEX_7,PCRELIMM_8BY4}, arch_sh_up}
+ movt r4 ;!/* 0000nnnn00101001 movt <REG_N> */{"movt",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ muls.w r5,r4 ;!/* 0010nnnnmmmm1111 muls.w <REG_M>,<REG_N>*/{"muls.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ muls r5,r4 ;!/* 0010nnnnmmmm1111 muls <REG_M>,<REG_N>*/{"muls",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mul.l r5,r4 ;!/* 0000nnnnmmmm0111 mul.l <REG_M>,<REG_N>*/{"mul.l",{ A_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_7}, arch_sh2_up}
+ mulu.w r5,r4 ;!/* 0010nnnnmmmm1110 mulu.w <REG_M>,<REG_N>*/{"mulu.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mulu r5,r4 ;!/* 0010nnnnmmmm1110 mulu <REG_M>,<REG_N>*/{"mulu",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ neg r5,r4 ;!/* 0110nnnnmmmm1011 neg <REG_M>,<REG_N> */{"neg",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_B}, arch_sh_up}
+ negc r5,r4 ;!/* 0110nnnnmmmm1010 negc <REG_M>,<REG_N>*/{"negc",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_A}, arch_sh_up}
+ nop ;!/* 0000000000001001 nop */{"nop",{0},{HEX_0,HEX_0,HEX_0,HEX_9}, arch_sh_up}
+ not r5,r4 ;!/* 0110nnnnmmmm0111 not <REG_M>,<REG_N> */{"not",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_7}, arch_sh_up}
+ or #4,R0 ;!/* 11001011i8*1.... or #<imm>,R0 */{"or",{A_IMM,A_R0},{HEX_C,HEX_B,IMM0_8}, arch_sh_up}
+ or r5,r4 ;!/* 0010nnnnmmmm1011 or <REG_M>,<REG_N> */{"or",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_B}, arch_sh_up}
+ or.b #4,@(R0,GBR) ;!/* 11001111i8*1.... or.b #<imm>,@(R0,GBR)*/{"or.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_F,IMM0_8}, arch_sh_up}
+ pref @r4 ;!/* 0000nnnn10000011 pref @<REG_N> */{"pref",{A_IND_N},{HEX_0,REG_N,HEX_8,HEX_3}, arch_sh2a_nofpu_or_sh4_nommu_nofpu_up}
+ rotcl r4 ;!/* 0100nnnn00100100 rotcl <REG_N> */{"rotcl",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_4}, arch_sh_up}
+ rotcr r4 ;!/* 0100nnnn00100101 rotcr <REG_N> */{"rotcr",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_5}, arch_sh_up}
+ rotl r4 ;!/* 0100nnnn00000100 rotl <REG_N> */{"rotl",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_4}, arch_sh_up}
+ rotr r4 ;!/* 0100nnnn00000101 rotr <REG_N> */{"rotr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_5}, arch_sh_up}
+ rte ;!/* 0000000000101011 rte */{"rte",{0},{HEX_0,HEX_0,HEX_2,HEX_B}, arch_sh_up}
+ rts ;!/* 0000000000001011 rts */{"rts",{0},{HEX_0,HEX_0,HEX_0,HEX_B}, arch_sh_up}
+ sets ;!/* 0000000001011000 sets */{"sets",{0},{HEX_0,HEX_0,HEX_5,HEX_8}, arch_sh_up}
+ sett ;!/* 0000000000011000 sett */{"sett",{0},{HEX_0,HEX_0,HEX_1,HEX_8}, arch_sh_up}
+ shad r5,r4 ;!/* 0100nnnnmmmm1100 shad <REG_M>,<REG_N>*/{"shad",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_C}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shld r5,r4 ;!/* 0100nnnnmmmm1101 shld <REG_M>,<REG_N>*/{"shld",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_D}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shal r4 ;!/* 0100nnnn00100000 shal <REG_N> */{"shal",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_0}, arch_sh_up}
+ shar r4 ;!/* 0100nnnn00100001 shar <REG_N> */{"shar",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_1}, arch_sh_up}
+ shll r4 ;!/* 0100nnnn00000000 shll <REG_N> */{"shll",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_0}, arch_sh_up}
+ shll16 r4 ;!/* 0100nnnn00101000 shll16 <REG_N> */{"shll16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_8}, arch_sh_up}
+ shll2 r4 ;!/* 0100nnnn00001000 shll2 <REG_N> */{"shll2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_8}, arch_sh_up}
+ shll8 r4 ;!/* 0100nnnn00011000 shll8 <REG_N> */{"shll8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_8}, arch_sh_up}
+ shlr r4 ;!/* 0100nnnn00000001 shlr <REG_N> */{"shlr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_1}, arch_sh_up}
+ shlr16 r4 ;!/* 0100nnnn00101001 shlr16 <REG_N> */{"shlr16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ shlr2 r4 ;!/* 0100nnnn00001001 shlr2 <REG_N> */{"shlr2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_9}, arch_sh_up}
+ shlr8 r4 ;!/* 0100nnnn00011001 shlr8 <REG_N> */{"shlr8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_9}, arch_sh_up}
+ sleep ;!/* 0000000000011011 sleep */{"sleep",{0},{HEX_0,HEX_0,HEX_1,HEX_B}, arch_sh_up}
+ stc SR,r4 ;!/* 0000nnnn00000010 stc SR,<REG_N> */{"stc",{A_SR,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ stc GBR,r4 ;!/* 0000nnnn00010010 stc GBR,<REG_N> */{"stc",{A_GBR,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ stc VBR,r4 ;!/* 0000nnnn00100010 stc VBR,<REG_N> */{"stc",{A_VBR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ stc SSR,r4 ;!/* 0000nnnn00110010 stc SSR,<REG_N> */{"stc",{A_SSR,A_REG_N},{HEX_0,REG_N,HEX_3,HEX_2}, arch_sh3_nommu_up}
+ stc SPC,r4 ;!/* 0000nnnn01000010 stc SPC,<REG_N> */{"stc",{A_SPC,A_REG_N},{HEX_0,REG_N,HEX_4,HEX_2}, arch_sh3_nommu_up}
+ stc r1_bank,r4 ;!/* 0000nnnn1xxx0010 stc Rn_BANK,<REG_N> */{"stc",{A_REG_B,A_REG_N},{HEX_0,REG_N,REG_B,HEX_2}, arch_sh3_nommu_up}
+ stc.l SR,@-r4 ;!/* 0100nnnn00000011 stc.l SR,@-<REG_N> */{"stc.l",{A_SR,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_3}, arch_sh_up}
+ stc.l VBR,@-r4 ;!/* 0100nnnn00100011 stc.l VBR,@-<REG_N> */{"stc.l",{A_VBR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_3}, arch_sh_up}
+ stc.l SSR,@-r4 ;!/* 0100nnnn00110011 stc.l SSR,@-<REG_N> */{"stc.l",{A_SSR,A_DEC_N},{HEX_4,REG_N,HEX_3,HEX_3}, arch_sh3_nommu_up}
+ stc.l SPC,@-r4 ;!/* 0100nnnn01000011 stc.l SPC,@-<REG_N> */{"stc.l",{A_SPC,A_DEC_N},{HEX_4,REG_N,HEX_4,HEX_3}, arch_sh3_nommu_up}
+ stc.l GBR,@-r4 ;!/* 0100nnnn00010011 stc.l GBR,@-<REG_N> */{"stc.l",{A_GBR,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_3}, arch_sh_up}
+ stc.l r1_bank,@-r4 ;!/* 0100nnnn1xxx0011 stc.l Rn_BANK,@-<REG_N> */{"stc.l",{A_REG_B,A_DEC_N},{HEX_4,REG_N,REG_B,HEX_3}, arch_sh3_nommu_up}
+ sts MACH,r4 ;!/* 0000nnnn00001010 sts MACH,<REG_N> */{"sts",{A_MACH,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ sts MACL,r4 ;!/* 0000nnnn00011010 sts MACL,<REG_N> */{"sts",{A_MACL,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ sts PR,r4 ;!/* 0000nnnn00101010 sts PR,<REG_N> */{"sts",{A_PR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ sts.l MACH,@-r4 ;!/* 0100nnnn00000010 sts.l MACH,@-<REG_N>*/{"sts.l",{A_MACH,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ sts.l MACL,@-r4 ;!/* 0100nnnn00010010 sts.l MACL,@-<REG_N>*/{"sts.l",{A_MACL,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ sts.l PR,@-r4 ;!/* 0100nnnn00100010 sts.l PR,@-<REG_N> */{"sts.l",{A_PR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ sub r5,r4 ;!/* 0011nnnnmmmm1000 sub <REG_M>,<REG_N> */{"sub",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_8}, arch_sh_up}
+ subc r5,r4 ;!/* 0011nnnnmmmm1010 subc <REG_M>,<REG_N>*/{"subc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_A}, arch_sh_up}
+ subv r5,r4 ;!/* 0011nnnnmmmm1011 subv <REG_M>,<REG_N>*/{"subv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_B}, arch_sh_up}
+ swap.b r5,r4 ;!/* 0110nnnnmmmm1000 swap.b <REG_M>,<REG_N>*/{"swap.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_8}, arch_sh_up}
+ swap.w r5,r4 ;!/* 0110nnnnmmmm1001 swap.w <REG_M>,<REG_N>*/{"swap.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_9}, arch_sh_up}
+ tas.b @r4 ;!/* 0100nnnn00011011 tas.b @<REG_N> */{"tas.b",{A_IND_N},{HEX_4,REG_N,HEX_1,HEX_B}, arch_sh_up}
+ trapa #4 ;!/* 11000011i8*1.... trapa #<imm> */{"trapa",{A_IMM},{HEX_C,HEX_3,IMM0_8}, arch_sh_up}
+ tst #4,R0 ;!/* 11001000i8*1.... tst #<imm>,R0 */{"tst",{A_IMM,A_R0},{HEX_C,HEX_8,IMM0_8}, arch_sh_up}
+ tst r5,r4 ;!/* 0010nnnnmmmm1000 tst <REG_M>,<REG_N> */{"tst",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_8}, arch_sh_up}
+ tst.b #4,@(R0,GBR) ;!/* 11001100i8*1.... tst.b #<imm>,@(R0,GBR)*/{"tst.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_C,IMM0_8}, arch_sh_up}
+ xor #4,R0 ;!/* 11001010i8*1.... xor #<imm>,R0 */{"xor",{A_IMM,A_R0},{HEX_C,HEX_A,IMM0_8}, arch_sh_up}
+ xor r5,r4 ;!/* 0010nnnnmmmm1010 xor <REG_M>,<REG_N> */{"xor",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_A}, arch_sh_up}
+ xor.b #4,@(R0,GBR) ;!/* 11001110i8*1.... xor.b #<imm>,@(R0,GBR)*/{"xor.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_E,IMM0_8}, arch_sh_up}
+ xtrct r5,r4 ;!/* 0010nnnnmmmm1101 xtrct <REG_M>,<REG_N>*/{"xtrct",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_D}, arch_sh_up}
+ dt r4 ;!/* 0100nnnn00010000 dt <REG_N> */{"dt",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_0}, arch_sh2_up}
+ dmuls.l r5,r4 ;!/* 0011nnnnmmmm1101 dmuls.l <REG_M>,<REG_N>*/{"dmuls.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_D}, arch_sh2_up}
+ dmulu.l r5,r4 ;!/* 0011nnnnmmmm0101 dmulu.l <REG_M>,<REG_N>*/{"dmulu.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_5}, arch_sh2_up}
+ mac.l @r5+,@r4+ ;!/* 0000nnnnmmmm1111 mac.l @<REG_M>+,@<REG_N>+*/{"mac.l",{A_INC_M,A_INC_N},{HEX_0,REG_N,REG_M,HEX_F}, arch_sh2_up}
+ braf r4 ;!/* 0000nnnn00100011 braf <REG_N> */{"braf",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_3}, arch_sh2_up}
+ bsrf r4 ;!/* 0000nnnn00000011 bsrf <REG_N> */{"bsrf",{A_REG_N},{HEX_0,REG_N,HEX_0,HEX_3}, arch_sh2_up}
diff --git a/binutils-2.21/ld/testsuite/ld-sh/arch/sh4.s b/binutils-2.21/ld/testsuite/ld-sh/arch/sh4.s
new file mode 100644
index 0000000..5b1c980
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/arch/sh4.s
@@ -0,0 +1,263 @@
+! Generated file. DO NOT EDIT.
+!
+! This file was generated by gas/testsuite/gas/sh/arch/arch.exp .
+! This file should contain every instruction valid on
+! architecture sh4 but no more.
+! If the tests are failing because the expected results
+! have changed then run 'make check' and copy the new file
+! from <objdir>/gas/testsuite/sh4.s
+! to <srcdir>/gas/testsuite/gas/sh/arch/sh4.s .
+! Make sure there are no unexpected or missing instructions.
+
+ .section .text
+sh4:
+! Instructions introduced into sh4
+ fipr fv4,fv0 ;!/* 1111nnmm11101101 fipr <V_REG_M>,<V_REG_N>*/{"fipr",{V_REG_M,V_REG_N},{HEX_F,REG_NM,HEX_E,HEX_D}, arch_sh4_up}
+ frchg ;!/* 1111101111111101 frchg */{"frchg",{0},{HEX_F,HEX_B,HEX_F,HEX_D}, arch_sh4_up}
+ fsca FPUL,dr2 ;!/* 1111nnn011111101 fsca FPUL,<D_REG_N> */{"fsca",{FPUL_M,D_REG_N},{HEX_F,REG_N_D,HEX_F,HEX_D}, arch_sh4_up}
+ fsrra fr1 ;!/* 1111nnnn01111101 fsrra <F_REG_N> */{"fsrra",{F_REG_N},{HEX_F,REG_N,HEX_7,HEX_D}, arch_sh4_up}
+ ftrv xmtrx,fv0 ;!/* 1111nn0111111101 ftrv XMTRX_M4,<V_REG_n>*/{"ftrv",{XMTRX_M4,V_REG_N},{HEX_F,REG_N_B01,HEX_F,HEX_D}, arch_sh4_up}
+
+! Instructions inherited from ancestors: sh sh2 sh2a-nofpu-or-sh3-nommu sh2a-nofpu-or-sh4-nommu-nofpu sh2a-or-sh3e sh2a-or-sh4 sh2e sh3 sh3-nommu sh3e sh4-nofpu sh4-nommu-nofpu
+ add #4,r4 ;!/* 0111nnnni8*1.... add #<imm>,<REG_N> */{"add",{A_IMM,A_REG_N},{HEX_7,REG_N,IMM0_8}, arch_sh_up}
+ add r5,r4 ;!/* 0011nnnnmmmm1100 add <REG_M>,<REG_N> */{"add",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_C}, arch_sh_up}
+ addc r5,r4 ;!/* 0011nnnnmmmm1110 addc <REG_M>,<REG_N>*/{"addc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_E}, arch_sh_up}
+ addv r5,r4 ;!/* 0011nnnnmmmm1111 addv <REG_M>,<REG_N>*/{"addv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_F}, arch_sh_up}
+ and #4,R0 ;!/* 11001001i8*1.... and #<imm>,R0 */{"and",{A_IMM,A_R0},{HEX_C,HEX_9,IMM0_8}, arch_sh_up}
+ and r5,r4 ;!/* 0010nnnnmmmm1001 and <REG_M>,<REG_N> */{"and",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_9}, arch_sh_up}
+ and.b #4,@(R0,GBR) ;!/* 11001101i8*1.... and.b #<imm>,@(R0,GBR)*/{"and.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_D,IMM0_8}, arch_sh_up}
+ bra .+8 ;!/* 1010i12......... bra <bdisp12> */{"bra",{A_BDISP12},{HEX_A,BRANCH_12}, arch_sh_up}
+ bsr .+8 ;!/* 1011i12......... bsr <bdisp12> */{"bsr",{A_BDISP12},{HEX_B,BRANCH_12}, arch_sh_up}
+ bt .+8 ;!/* 10001001i8p1.... bt <bdisp8> */{"bt",{A_BDISP8},{HEX_8,HEX_9,BRANCH_8}, arch_sh_up}
+ bf .+8 ;!/* 10001011i8p1.... bf <bdisp8> */{"bf",{A_BDISP8},{HEX_8,HEX_B,BRANCH_8}, arch_sh_up}
+ bt.s .+8 ;!/* 10001101i8p1.... bt.s <bdisp8> */{"bt.s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bt/s .+8 ;!/* 10001101i8p1.... bt/s <bdisp8> */{"bt/s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bf.s .+8 ;!/* 10001111i8p1.... bf.s <bdisp8> */{"bf.s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ bf/s .+8 ;!/* 10001111i8p1.... bf/s <bdisp8> */{"bf/s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ clrmac ;!/* 0000000000101000 clrmac */{"clrmac",{0},{HEX_0,HEX_0,HEX_2,HEX_8}, arch_sh_up}
+ clrs ;!/* 0000000001001000 clrs */{"clrs",{0},{HEX_0,HEX_0,HEX_4,HEX_8}, arch_sh_up}
+ clrt ;!/* 0000000000001000 clrt */{"clrt",{0},{HEX_0,HEX_0,HEX_0,HEX_8}, arch_sh_up}
+ cmp/eq #4,R0 ;!/* 10001000i8*1.... cmp/eq #<imm>,R0 */{"cmp/eq",{A_IMM,A_R0},{HEX_8,HEX_8,IMM0_8}, arch_sh_up}
+ cmp/eq r5,r4 ;!/* 0011nnnnmmmm0000 cmp/eq <REG_M>,<REG_N>*/{"cmp/eq",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_0}, arch_sh_up}
+ cmp/ge r5,r4 ;!/* 0011nnnnmmmm0011 cmp/ge <REG_M>,<REG_N>*/{"cmp/ge",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_3}, arch_sh_up}
+ cmp/gt r5,r4 ;!/* 0011nnnnmmmm0111 cmp/gt <REG_M>,<REG_N>*/{"cmp/gt",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_7}, arch_sh_up}
+ cmp/hi r5,r4 ;!/* 0011nnnnmmmm0110 cmp/hi <REG_M>,<REG_N>*/{"cmp/hi",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_6}, arch_sh_up}
+ cmp/hs r5,r4 ;!/* 0011nnnnmmmm0010 cmp/hs <REG_M>,<REG_N>*/{"cmp/hs",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_2}, arch_sh_up}
+ cmp/pl r4 ;!/* 0100nnnn00010101 cmp/pl <REG_N> */{"cmp/pl",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_5}, arch_sh_up}
+ cmp/pz r4 ;!/* 0100nnnn00010001 cmp/pz <REG_N> */{"cmp/pz",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_1}, arch_sh_up}
+ cmp/str r5,r4 ;!/* 0010nnnnmmmm1100 cmp/str <REG_M>,<REG_N>*/{"cmp/str",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_C}, arch_sh_up}
+ div0s r5,r4 ;!/* 0010nnnnmmmm0111 div0s <REG_M>,<REG_N>*/{"div0s",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_7}, arch_sh_up}
+ div0u ;!/* 0000000000011001 div0u */{"div0u",{0},{HEX_0,HEX_0,HEX_1,HEX_9}, arch_sh_up}
+ div1 r5,r4 ;!/* 0011nnnnmmmm0100 div1 <REG_M>,<REG_N>*/{"div1",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_4}, arch_sh_up}
+ exts.b r5,r4 ;!/* 0110nnnnmmmm1110 exts.b <REG_M>,<REG_N>*/{"exts.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_E}, arch_sh_up}
+ exts.w r5,r4 ;!/* 0110nnnnmmmm1111 exts.w <REG_M>,<REG_N>*/{"exts.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_F}, arch_sh_up}
+ extu.b r5,r4 ;!/* 0110nnnnmmmm1100 extu.b <REG_M>,<REG_N>*/{"extu.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_C}, arch_sh_up}
+ extu.w r5,r4 ;!/* 0110nnnnmmmm1101 extu.w <REG_M>,<REG_N>*/{"extu.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_D}, arch_sh_up}
+ jmp @r4 ;!/* 0100nnnn00101011 jmp @<REG_N> */{"jmp",{A_IND_N},{HEX_4,REG_N,HEX_2,HEX_B}, arch_sh_up}
+ jsr @r4 ;!/* 0100nnnn00001011 jsr @<REG_N> */{"jsr",{A_IND_N},{HEX_4,REG_N,HEX_0,HEX_B}, arch_sh_up}
+ ldc r4,SR ;!/* 0100nnnn00001110 ldc <REG_N>,SR */{"ldc",{A_REG_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_E}, arch_sh_up}
+ ldc r4,GBR ;!/* 0100nnnn00011110 ldc <REG_N>,GBR */{"ldc",{A_REG_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_E}, arch_sh_up}
+ ldc r4,SGR ;!/* 0100nnnn00111010 ldc <REG_N>,SGR */{"ldc",{A_REG_N,A_SGR},{HEX_4,REG_N,HEX_3,HEX_A}, arch_sh4_nommu_nofpu_up}
+ ldc r4,VBR ;!/* 0100nnnn00101110 ldc <REG_N>,VBR */{"ldc",{A_REG_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_E}, arch_sh_up}
+ ldc r4,SSR ;!/* 0100nnnn00111110 ldc <REG_N>,SSR */{"ldc",{A_REG_N,A_SSR},{HEX_4,REG_N,HEX_3,HEX_E}, arch_sh3_nommu_up}
+ ldc r4,SPC ;!/* 0100nnnn01001110 ldc <REG_N>,SPC */{"ldc",{A_REG_N,A_SPC},{HEX_4,REG_N,HEX_4,HEX_E}, arch_sh3_nommu_up}
+ ldc r4,DBR ;!/* 0100nnnn11111010 ldc <REG_N>,DBR */{"ldc",{A_REG_N,A_DBR},{HEX_4,REG_N,HEX_F,HEX_A}, arch_sh4_nommu_nofpu_up}
+ ldc r4,r1_bank ;!/* 0100nnnn1xxx1110 ldc <REG_N>,Rn_BANK */{"ldc",{A_REG_N,A_REG_B},{HEX_4,REG_N,REG_B,HEX_E}, arch_sh3_nommu_up}
+ ldc.l @r4+,SR ;!/* 0100nnnn00000111 ldc.l @<REG_N>+,SR */{"ldc.l",{A_INC_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_7}, arch_sh_up}
+ ldc.l @r4+,GBR ;!/* 0100nnnn00010111 ldc.l @<REG_N>+,GBR */{"ldc.l",{A_INC_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_7}, arch_sh_up}
+ ldc.l @r4+,VBR ;!/* 0100nnnn00100111 ldc.l @<REG_N>+,VBR */{"ldc.l",{A_INC_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_7}, arch_sh_up}
+ ldc.l @r4+,SGR ;!/* 0100nnnn00110110 ldc.l @<REG_N>+,SGR */{"ldc.l",{A_INC_N,A_SGR},{HEX_4,REG_N,HEX_3,HEX_6}, arch_sh4_nommu_nofpu_up}
+ ldc.l @r4+,SSR ;!/* 0100nnnn00110111 ldc.l @<REG_N>+,SSR */{"ldc.l",{A_INC_N,A_SSR},{HEX_4,REG_N,HEX_3,HEX_7}, arch_sh3_nommu_up}
+ ldc.l @r4+,SPC ;!/* 0100nnnn01000111 ldc.l @<REG_N>+,SPC */{"ldc.l",{A_INC_N,A_SPC},{HEX_4,REG_N,HEX_4,HEX_7}, arch_sh3_nommu_up}
+ ldc.l @r4+,DBR ;!/* 0100nnnn11110110 ldc.l @<REG_N>+,DBR */{"ldc.l",{A_INC_N,A_DBR},{HEX_4,REG_N,HEX_F,HEX_6}, arch_sh4_nommu_nofpu_up}
+ ldc.l @r4+,r1_bank ;!/* 0100nnnn1xxx0111 ldc.l @<REG_N>+,Rn_BANK */{"ldc.l",{A_INC_N,A_REG_B},{HEX_4,REG_N,REG_B,HEX_7}, arch_sh3_nommu_up}
+ lds r4,MACH ;!/* 0100nnnn00001010 lds <REG_N>,MACH */{"lds",{A_REG_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ lds r4,MACL ;!/* 0100nnnn00011010 lds <REG_N>,MACL */{"lds",{A_REG_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ lds r4,PR ;!/* 0100nnnn00101010 lds <REG_N>,PR */{"lds",{A_REG_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ lds r4,FPUL ;!/* 0100nnnn01011010 lds <REG_N>,FPUL */{"lds",{A_REG_M,FPUL_N},{HEX_4,REG_M,HEX_5,HEX_A}, arch_sh2e_up}
+ lds r5,FPSCR ;!/* 0100nnnn01101010 lds <REG_M>,FPSCR */{"lds",{A_REG_M,FPSCR_N},{HEX_4,REG_M,HEX_6,HEX_A}, arch_sh2e_up}
+ lds.l @r4+,MACH ;!/* 0100nnnn00000110 lds.l @<REG_N>+,MACH*/{"lds.l",{A_INC_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_6}, arch_sh_up}
+ lds.l @r4+,MACL ;!/* 0100nnnn00010110 lds.l @<REG_N>+,MACL*/{"lds.l",{A_INC_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_6}, arch_sh_up}
+ lds.l @r4+,PR ;!/* 0100nnnn00100110 lds.l @<REG_N>+,PR */{"lds.l",{A_INC_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_6}, arch_sh_up}
+ lds.l @r5+,FPUL ;!/* 0100nnnn01010110 lds.l @<REG_M>+,FPUL*/{"lds.l",{A_INC_M,FPUL_N},{HEX_4,REG_M,HEX_5,HEX_6}, arch_sh2e_up}
+ lds.l @r5+,FPSCR ;!/* 0100nnnn01100110 lds.l @<REG_M>+,FPSCR*/{"lds.l",{A_INC_M,FPSCR_N},{HEX_4,REG_M,HEX_6,HEX_6}, arch_sh2e_up}
+ ldtlb ;!/* 0000000000111000 ldtlb */{"ldtlb",{0},{HEX_0,HEX_0,HEX_3,HEX_8}, arch_sh3_up}
+ mac.w @r5+,@r4+ ;!/* 0100nnnnmmmm1111 mac.w @<REG_M>+,@<REG_N>+*/{"mac.w",{A_INC_M,A_INC_N},{HEX_4,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mov #4,r4 ;!/* 1110nnnni8*1.... mov #<imm>,<REG_N> */{"mov",{A_IMM,A_REG_N},{HEX_E,REG_N,IMM0_8}, arch_sh_up}
+ mov r5,r4 ;!/* 0110nnnnmmmm0011 mov <REG_M>,<REG_N> */{"mov",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_3}, arch_sh_up}
+ mov.b r5,@(R0,r4) ;!/* 0000nnnnmmmm0100 mov.b <REG_M>,@(R0,<REG_N>)*/{"mov.b",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@-r4 ;!/* 0010nnnnmmmm0100 mov.b <REG_M>,@-<REG_N>*/{"mov.b",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@r4 ;!/* 0010nnnnmmmm0000 mov.b <REG_M>,@<REG_N>*/{"mov.b",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b @(8,r5),R0 ;!/* 10000100mmmmi4*1 mov.b @(<disp>,<REG_M>),R0*/{"mov.b",{A_DISP_REG_M,A_R0},{HEX_8,HEX_4,REG_M,IMM0_4}, arch_sh_up}
+ mov.b @(8,GBR),R0 ;!/* 11000100i8*1.... mov.b @(<disp>,GBR),R0*/{"mov.b",{A_DISP_GBR,A_R0},{HEX_C,HEX_4,IMM0_8}, arch_sh_up}
+ mov.b @(R0,r5),r4 ;!/* 0000nnnnmmmm1100 mov.b @(R0,<REG_M>),<REG_N>*/{"mov.b",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_C}, arch_sh_up}
+ mov.b @r5+,r4 ;!/* 0110nnnnmmmm0100 mov.b @<REG_M>+,<REG_N>*/{"mov.b",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b @r5,r4 ;!/* 0110nnnnmmmm0000 mov.b @<REG_M>,<REG_N>*/{"mov.b",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b R0,@(8,r5) ;!/* 10000000mmmmi4*1 mov.b R0,@(<disp>,<REG_M>)*/{"mov.b",{A_R0,A_DISP_REG_M},{HEX_8,HEX_0,REG_M,IMM1_4}, arch_sh_up}
+ mov.b R0,@(8,GBR) ;!/* 11000000i8*1.... mov.b R0,@(<disp>,GBR)*/{"mov.b",{A_R0,A_DISP_GBR},{HEX_C,HEX_0,IMM1_8}, arch_sh_up}
+ mov.l r5,@(8,r4) ;!/* 0001nnnnmmmmi4*4 mov.l <REG_M>,@(<disp>,<REG_N>)*/{"mov.l",{ A_REG_M,A_DISP_REG_N},{HEX_1,REG_N,REG_M,IMM1_4BY4}, arch_sh_up}
+ mov.l r5,@(R0,r4) ;!/* 0000nnnnmmmm0110 mov.l <REG_M>,@(R0,<REG_N>)*/{"mov.l",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@-r4 ;!/* 0010nnnnmmmm0110 mov.l <REG_M>,@-<REG_N>*/{"mov.l",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@r4 ;!/* 0010nnnnmmmm0010 mov.l <REG_M>,@<REG_N>*/{"mov.l",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l @(8,r5),r4 ;!/* 0101nnnnmmmmi4*4 mov.l @(<disp>,<REG_M>),<REG_N>*/{"mov.l",{A_DISP_REG_M,A_REG_N},{HEX_5,REG_N,REG_M,IMM0_4BY4}, arch_sh_up}
+ mov.l @(8,GBR),R0 ;!/* 11000110i8*4.... mov.l @(<disp>,GBR),R0*/{"mov.l",{A_DISP_GBR,A_R0},{HEX_C,HEX_6,IMM0_8BY4}, arch_sh_up}
+ .align 2
+ mov.l @(8,PC),r4 ;!/* 1101nnnni8p4.... mov.l @(<disp>,PC),<REG_N>*/{"mov.l",{A_DISP_PC,A_REG_N},{HEX_D,REG_N,PCRELIMM_8BY4}, arch_sh_up}
+ mov.l @(R0,r5),r4 ;!/* 0000nnnnmmmm1110 mov.l @(R0,<REG_M>),<REG_N>*/{"mov.l",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mov.l @r5+,r4 ;!/* 0110nnnnmmmm0110 mov.l @<REG_M>+,<REG_N>*/{"mov.l",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l @r5,r4 ;!/* 0110nnnnmmmm0010 mov.l @<REG_M>,<REG_N>*/{"mov.l",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l R0,@(8,GBR) ;!/* 11000010i8*4.... mov.l R0,@(<disp>,GBR)*/{"mov.l",{A_R0,A_DISP_GBR},{HEX_C,HEX_2,IMM1_8BY4}, arch_sh_up}
+ mov.w r5,@(R0,r4) ;!/* 0000nnnnmmmm0101 mov.w <REG_M>,@(R0,<REG_N>)*/{"mov.w",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@-r4 ;!/* 0010nnnnmmmm0101 mov.w <REG_M>,@-<REG_N>*/{"mov.w",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@r4 ;!/* 0010nnnnmmmm0001 mov.w <REG_M>,@<REG_N>*/{"mov.w",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w @(8,r5),R0 ;!/* 10000101mmmmi4*2 mov.w @(<disp>,<REG_M>),R0*/{"mov.w",{A_DISP_REG_M,A_R0},{HEX_8,HEX_5,REG_M,IMM0_4BY2}, arch_sh_up}
+ mov.w @(8,GBR),R0 ;!/* 11000101i8*2.... mov.w @(<disp>,GBR),R0*/{"mov.w",{A_DISP_GBR,A_R0},{HEX_C,HEX_5,IMM0_8BY2}, arch_sh_up}
+ mov.w @(8,PC),r4 ;!/* 1001nnnni8p2.... mov.w @(<disp>,PC),<REG_N>*/{"mov.w",{A_DISP_PC,A_REG_N},{HEX_9,REG_N,PCRELIMM_8BY2}, arch_sh_up}
+ mov.w @(R0,r5),r4 ;!/* 0000nnnnmmmm1101 mov.w @(R0,<REG_M>),<REG_N>*/{"mov.w",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_D}, arch_sh_up}
+ mov.w @r5+,r4 ;!/* 0110nnnnmmmm0101 mov.w @<REG_M>+,<REG_N>*/{"mov.w",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w @r5,r4 ;!/* 0110nnnnmmmm0001 mov.w @<REG_M>,<REG_N>*/{"mov.w",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w R0,@(8,r5) ;!/* 10000001mmmmi4*2 mov.w R0,@(<disp>,<REG_M>)*/{"mov.w",{A_R0,A_DISP_REG_M},{HEX_8,HEX_1,REG_M,IMM1_4BY2}, arch_sh_up}
+ mov.w R0,@(8,GBR) ;!/* 11000001i8*2.... mov.w R0,@(<disp>,GBR)*/{"mov.w",{A_R0,A_DISP_GBR},{HEX_C,HEX_1,IMM1_8BY2}, arch_sh_up}
+ .align 2
+ mova @(8,PC),R0 ;!/* 11000111i8p4.... mova @(<disp>,PC),R0*/{"mova",{A_DISP_PC,A_R0},{HEX_C,HEX_7,PCRELIMM_8BY4}, arch_sh_up}
+ movca.l R0,@r4 ;!/* 0000nnnn11000011 movca.l R0,@<REG_N> */{"movca.l",{A_R0,A_IND_N},{HEX_0,REG_N,HEX_C,HEX_3}, arch_sh4_nommu_nofpu_up}
+ movt r4 ;!/* 0000nnnn00101001 movt <REG_N> */{"movt",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ muls.w r5,r4 ;!/* 0010nnnnmmmm1111 muls.w <REG_M>,<REG_N>*/{"muls.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ muls r5,r4 ;!/* 0010nnnnmmmm1111 muls <REG_M>,<REG_N>*/{"muls",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mul.l r5,r4 ;!/* 0000nnnnmmmm0111 mul.l <REG_M>,<REG_N>*/{"mul.l",{ A_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_7}, arch_sh2_up}
+ mulu.w r5,r4 ;!/* 0010nnnnmmmm1110 mulu.w <REG_M>,<REG_N>*/{"mulu.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mulu r5,r4 ;!/* 0010nnnnmmmm1110 mulu <REG_M>,<REG_N>*/{"mulu",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ neg r5,r4 ;!/* 0110nnnnmmmm1011 neg <REG_M>,<REG_N> */{"neg",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_B}, arch_sh_up}
+ negc r5,r4 ;!/* 0110nnnnmmmm1010 negc <REG_M>,<REG_N>*/{"negc",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_A}, arch_sh_up}
+ nop ;!/* 0000000000001001 nop */{"nop",{0},{HEX_0,HEX_0,HEX_0,HEX_9}, arch_sh_up}
+ not r5,r4 ;!/* 0110nnnnmmmm0111 not <REG_M>,<REG_N> */{"not",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_7}, arch_sh_up}
+ ocbi @r4 ;!/* 0000nnnn10010011 ocbi @<REG_N> */{"ocbi",{A_IND_N},{HEX_0,REG_N,HEX_9,HEX_3}, arch_sh4_nommu_nofpu_up}
+ ocbp @r4 ;!/* 0000nnnn10100011 ocbp @<REG_N> */{"ocbp",{A_IND_N},{HEX_0,REG_N,HEX_A,HEX_3}, arch_sh4_nommu_nofpu_up}
+ ocbwb @r4 ;!/* 0000nnnn10110011 ocbwb @<REG_N> */{"ocbwb",{A_IND_N},{HEX_0,REG_N,HEX_B,HEX_3}, arch_sh4_nommu_nofpu_up}
+ or #4,R0 ;!/* 11001011i8*1.... or #<imm>,R0 */{"or",{A_IMM,A_R0},{HEX_C,HEX_B,IMM0_8}, arch_sh_up}
+ or r5,r4 ;!/* 0010nnnnmmmm1011 or <REG_M>,<REG_N> */{"or",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_B}, arch_sh_up}
+ or.b #4,@(R0,GBR) ;!/* 11001111i8*1.... or.b #<imm>,@(R0,GBR)*/{"or.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_F,IMM0_8}, arch_sh_up}
+ pref @r4 ;!/* 0000nnnn10000011 pref @<REG_N> */{"pref",{A_IND_N},{HEX_0,REG_N,HEX_8,HEX_3}, arch_sh2a_nofpu_or_sh4_nommu_nofpu_up}
+ rotcl r4 ;!/* 0100nnnn00100100 rotcl <REG_N> */{"rotcl",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_4}, arch_sh_up}
+ rotcr r4 ;!/* 0100nnnn00100101 rotcr <REG_N> */{"rotcr",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_5}, arch_sh_up}
+ rotl r4 ;!/* 0100nnnn00000100 rotl <REG_N> */{"rotl",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_4}, arch_sh_up}
+ rotr r4 ;!/* 0100nnnn00000101 rotr <REG_N> */{"rotr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_5}, arch_sh_up}
+ rte ;!/* 0000000000101011 rte */{"rte",{0},{HEX_0,HEX_0,HEX_2,HEX_B}, arch_sh_up}
+ rts ;!/* 0000000000001011 rts */{"rts",{0},{HEX_0,HEX_0,HEX_0,HEX_B}, arch_sh_up}
+ sets ;!/* 0000000001011000 sets */{"sets",{0},{HEX_0,HEX_0,HEX_5,HEX_8}, arch_sh_up}
+ sett ;!/* 0000000000011000 sett */{"sett",{0},{HEX_0,HEX_0,HEX_1,HEX_8}, arch_sh_up}
+ shad r5,r4 ;!/* 0100nnnnmmmm1100 shad <REG_M>,<REG_N>*/{"shad",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_C}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shld r5,r4 ;!/* 0100nnnnmmmm1101 shld <REG_M>,<REG_N>*/{"shld",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_D}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shal r4 ;!/* 0100nnnn00100000 shal <REG_N> */{"shal",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_0}, arch_sh_up}
+ shar r4 ;!/* 0100nnnn00100001 shar <REG_N> */{"shar",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_1}, arch_sh_up}
+ shll r4 ;!/* 0100nnnn00000000 shll <REG_N> */{"shll",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_0}, arch_sh_up}
+ shll16 r4 ;!/* 0100nnnn00101000 shll16 <REG_N> */{"shll16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_8}, arch_sh_up}
+ shll2 r4 ;!/* 0100nnnn00001000 shll2 <REG_N> */{"shll2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_8}, arch_sh_up}
+ shll8 r4 ;!/* 0100nnnn00011000 shll8 <REG_N> */{"shll8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_8}, arch_sh_up}
+ shlr r4 ;!/* 0100nnnn00000001 shlr <REG_N> */{"shlr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_1}, arch_sh_up}
+ shlr16 r4 ;!/* 0100nnnn00101001 shlr16 <REG_N> */{"shlr16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ shlr2 r4 ;!/* 0100nnnn00001001 shlr2 <REG_N> */{"shlr2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_9}, arch_sh_up}
+ shlr8 r4 ;!/* 0100nnnn00011001 shlr8 <REG_N> */{"shlr8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_9}, arch_sh_up}
+ sleep ;!/* 0000000000011011 sleep */{"sleep",{0},{HEX_0,HEX_0,HEX_1,HEX_B}, arch_sh_up}
+ stc SR,r4 ;!/* 0000nnnn00000010 stc SR,<REG_N> */{"stc",{A_SR,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ stc GBR,r4 ;!/* 0000nnnn00010010 stc GBR,<REG_N> */{"stc",{A_GBR,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ stc VBR,r4 ;!/* 0000nnnn00100010 stc VBR,<REG_N> */{"stc",{A_VBR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ stc SSR,r4 ;!/* 0000nnnn00110010 stc SSR,<REG_N> */{"stc",{A_SSR,A_REG_N},{HEX_0,REG_N,HEX_3,HEX_2}, arch_sh3_nommu_up}
+ stc SPC,r4 ;!/* 0000nnnn01000010 stc SPC,<REG_N> */{"stc",{A_SPC,A_REG_N},{HEX_0,REG_N,HEX_4,HEX_2}, arch_sh3_nommu_up}
+ stc SGR,r4 ;!/* 0000nnnn00111010 stc SGR,<REG_N> */{"stc",{A_SGR,A_REG_N},{HEX_0,REG_N,HEX_3,HEX_A}, arch_sh4_nommu_nofpu_up}
+ stc DBR,r4 ;!/* 0000nnnn11111010 stc DBR,<REG_N> */{"stc",{A_DBR,A_REG_N},{HEX_0,REG_N,HEX_F,HEX_A}, arch_sh4_nommu_nofpu_up}
+ stc r1_bank,r4 ;!/* 0000nnnn1xxx0010 stc Rn_BANK,<REG_N> */{"stc",{A_REG_B,A_REG_N},{HEX_0,REG_N,REG_B,HEX_2}, arch_sh3_nommu_up}
+ stc.l SR,@-r4 ;!/* 0100nnnn00000011 stc.l SR,@-<REG_N> */{"stc.l",{A_SR,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_3}, arch_sh_up}
+ stc.l VBR,@-r4 ;!/* 0100nnnn00100011 stc.l VBR,@-<REG_N> */{"stc.l",{A_VBR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_3}, arch_sh_up}
+ stc.l SSR,@-r4 ;!/* 0100nnnn00110011 stc.l SSR,@-<REG_N> */{"stc.l",{A_SSR,A_DEC_N},{HEX_4,REG_N,HEX_3,HEX_3}, arch_sh3_nommu_up}
+ stc.l SPC,@-r4 ;!/* 0100nnnn01000011 stc.l SPC,@-<REG_N> */{"stc.l",{A_SPC,A_DEC_N},{HEX_4,REG_N,HEX_4,HEX_3}, arch_sh3_nommu_up}
+ stc.l GBR,@-r4 ;!/* 0100nnnn00010011 stc.l GBR,@-<REG_N> */{"stc.l",{A_GBR,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_3}, arch_sh_up}
+ stc.l SGR,@-r4 ;!/* 0100nnnn00110010 stc.l SGR,@-<REG_N> */{"stc.l",{A_SGR,A_DEC_N},{HEX_4,REG_N,HEX_3,HEX_2}, arch_sh4_nommu_nofpu_up}
+ stc.l DBR,@-r4 ;!/* 0100nnnn11110010 stc.l DBR,@-<REG_N> */{"stc.l",{A_DBR,A_DEC_N},{HEX_4,REG_N,HEX_F,HEX_2}, arch_sh4_nommu_nofpu_up}
+ stc.l r1_bank,@-r4 ;!/* 0100nnnn1xxx0011 stc.l Rn_BANK,@-<REG_N> */{"stc.l",{A_REG_B,A_DEC_N},{HEX_4,REG_N,REG_B,HEX_3}, arch_sh3_nommu_up}
+ sts MACH,r4 ;!/* 0000nnnn00001010 sts MACH,<REG_N> */{"sts",{A_MACH,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ sts MACL,r4 ;!/* 0000nnnn00011010 sts MACL,<REG_N> */{"sts",{A_MACL,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ sts PR,r4 ;!/* 0000nnnn00101010 sts PR,<REG_N> */{"sts",{A_PR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ sts FPUL,r4 ;!/* 0000nnnn01011010 sts FPUL,<REG_N> */{"sts",{FPUL_M,A_REG_N},{HEX_0,REG_N,HEX_5,HEX_A}, arch_sh2e_up}
+ sts FPSCR,r4 ;!/* 0000nnnn01101010 sts FPSCR,<REG_N> */{"sts",{FPSCR_M,A_REG_N},{HEX_0,REG_N,HEX_6,HEX_A}, arch_sh2e_up}
+ sts.l MACH,@-r4 ;!/* 0100nnnn00000010 sts.l MACH,@-<REG_N>*/{"sts.l",{A_MACH,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ sts.l MACL,@-r4 ;!/* 0100nnnn00010010 sts.l MACL,@-<REG_N>*/{"sts.l",{A_MACL,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ sts.l PR,@-r4 ;!/* 0100nnnn00100010 sts.l PR,@-<REG_N> */{"sts.l",{A_PR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ sts.l FPUL,@-r4 ;!/* 0100nnnn01010010 sts.l FPUL,@-<REG_N>*/{"sts.l",{FPUL_M,A_DEC_N},{HEX_4,REG_N,HEX_5,HEX_2}, arch_sh2e_up}
+ sts.l FPSCR,@-r4 ;!/* 0100nnnn01100010 sts.l FPSCR,@-<REG_N>*/{"sts.l",{FPSCR_M,A_DEC_N},{HEX_4,REG_N,HEX_6,HEX_2}, arch_sh2e_up}
+ sub r5,r4 ;!/* 0011nnnnmmmm1000 sub <REG_M>,<REG_N> */{"sub",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_8}, arch_sh_up}
+ subc r5,r4 ;!/* 0011nnnnmmmm1010 subc <REG_M>,<REG_N>*/{"subc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_A}, arch_sh_up}
+ subv r5,r4 ;!/* 0011nnnnmmmm1011 subv <REG_M>,<REG_N>*/{"subv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_B}, arch_sh_up}
+ swap.b r5,r4 ;!/* 0110nnnnmmmm1000 swap.b <REG_M>,<REG_N>*/{"swap.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_8}, arch_sh_up}
+ swap.w r5,r4 ;!/* 0110nnnnmmmm1001 swap.w <REG_M>,<REG_N>*/{"swap.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_9}, arch_sh_up}
+ tas.b @r4 ;!/* 0100nnnn00011011 tas.b @<REG_N> */{"tas.b",{A_IND_N},{HEX_4,REG_N,HEX_1,HEX_B}, arch_sh_up}
+ trapa #4 ;!/* 11000011i8*1.... trapa #<imm> */{"trapa",{A_IMM},{HEX_C,HEX_3,IMM0_8}, arch_sh_up}
+ tst #4,R0 ;!/* 11001000i8*1.... tst #<imm>,R0 */{"tst",{A_IMM,A_R0},{HEX_C,HEX_8,IMM0_8}, arch_sh_up}
+ tst r5,r4 ;!/* 0010nnnnmmmm1000 tst <REG_M>,<REG_N> */{"tst",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_8}, arch_sh_up}
+ tst.b #4,@(R0,GBR) ;!/* 11001100i8*1.... tst.b #<imm>,@(R0,GBR)*/{"tst.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_C,IMM0_8}, arch_sh_up}
+ xor #4,R0 ;!/* 11001010i8*1.... xor #<imm>,R0 */{"xor",{A_IMM,A_R0},{HEX_C,HEX_A,IMM0_8}, arch_sh_up}
+ xor r5,r4 ;!/* 0010nnnnmmmm1010 xor <REG_M>,<REG_N> */{"xor",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_A}, arch_sh_up}
+ xor.b #4,@(R0,GBR) ;!/* 11001110i8*1.... xor.b #<imm>,@(R0,GBR)*/{"xor.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_E,IMM0_8}, arch_sh_up}
+ xtrct r5,r4 ;!/* 0010nnnnmmmm1101 xtrct <REG_M>,<REG_N>*/{"xtrct",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_D}, arch_sh_up}
+ dt r4 ;!/* 0100nnnn00010000 dt <REG_N> */{"dt",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_0}, arch_sh2_up}
+ dmuls.l r5,r4 ;!/* 0011nnnnmmmm1101 dmuls.l <REG_M>,<REG_N>*/{"dmuls.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_D}, arch_sh2_up}
+ dmulu.l r5,r4 ;!/* 0011nnnnmmmm0101 dmulu.l <REG_M>,<REG_N>*/{"dmulu.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_5}, arch_sh2_up}
+ mac.l @r5+,@r4+ ;!/* 0000nnnnmmmm1111 mac.l @<REG_M>+,@<REG_N>+*/{"mac.l",{A_INC_M,A_INC_N},{HEX_0,REG_N,REG_M,HEX_F}, arch_sh2_up}
+ braf r4 ;!/* 0000nnnn00100011 braf <REG_N> */{"braf",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_3}, arch_sh2_up}
+ bsrf r4 ;!/* 0000nnnn00000011 bsrf <REG_N> */{"bsrf",{A_REG_N},{HEX_0,REG_N,HEX_0,HEX_3}, arch_sh2_up}
+ fabs fr1 ;!/* 1111nnnn01011101 fabs <F_REG_N> */{"fabs",{F_REG_N},{HEX_F,REG_N,HEX_5,HEX_D}, arch_sh2e_up}
+ fabs dr2 ;!/* 1111nnn001011101 fabs <D_REG_N> */{"fabs",{D_REG_N},{HEX_F,REG_N,HEX_5,HEX_D}, arch_sh2a_or_sh4_up}
+ fadd fr2,fr1 ;!/* 1111nnnnmmmm0000 fadd <F_REG_M>,<F_REG_N>*/{"fadd",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_0}, arch_sh2e_up}
+ fadd dr4,dr2 ;!/* 1111nnn0mmm00000 fadd <D_REG_M>,<D_REG_N>*/{"fadd",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_0}, arch_sh2a_or_sh4_up}
+ fcmp/eq fr2,fr1 ;!/* 1111nnnnmmmm0100 fcmp/eq <F_REG_M>,<F_REG_N>*/{"fcmp/eq",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_4}, arch_sh2e_up}
+ fcmp/eq dr4,dr2 ;!/* 1111nnn0mmm00100 fcmp/eq <D_REG_M>,<D_REG_N>*/{"fcmp/eq",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_4}, arch_sh2a_or_sh4_up}
+ fcmp/gt fr2,fr1 ;!/* 1111nnnnmmmm0101 fcmp/gt <F_REG_M>,<F_REG_N>*/{"fcmp/gt",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_5}, arch_sh2e_up}
+ fcmp/gt dr4,dr2 ;!/* 1111nnn0mmm00101 fcmp/gt <D_REG_M>,<D_REG_N>*/{"fcmp/gt",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_5}, arch_sh2a_or_sh4_up}
+ fcnvds dr2,FPUL ;!/* 1111nnn010111101 fcnvds <D_REG_N>,FPUL*/{"fcnvds",{D_REG_N,FPUL_M},{HEX_F,REG_N_D,HEX_B,HEX_D}, arch_sh2a_or_sh4_up}
+ fcnvsd FPUL,dr2 ;!/* 1111nnn010101101 fcnvsd FPUL,<D_REG_N>*/{"fcnvsd",{FPUL_M,D_REG_N},{HEX_F,REG_N_D,HEX_A,HEX_D}, arch_sh2a_or_sh4_up}
+ fdiv fr2,fr1 ;!/* 1111nnnnmmmm0011 fdiv <F_REG_M>,<F_REG_N>*/{"fdiv",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_3}, arch_sh2e_up}
+ fdiv dr4,dr2 ;!/* 1111nnn0mmm00011 fdiv <D_REG_M>,<D_REG_N>*/{"fdiv",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_3}, arch_sh2a_or_sh4_up}
+ fldi0 fr1 ;!/* 1111nnnn10001101 fldi0 <F_REG_N> */{"fldi0",{F_REG_N},{HEX_F,REG_N,HEX_8,HEX_D}, arch_sh2e_up}
+ fldi1 fr1 ;!/* 1111nnnn10011101 fldi1 <F_REG_N> */{"fldi1",{F_REG_N},{HEX_F,REG_N,HEX_9,HEX_D}, arch_sh2e_up}
+ flds fr1,FPUL ;!/* 1111nnnn00011101 flds <F_REG_N>,FPUL*/{"flds",{F_REG_N,FPUL_M},{HEX_F,REG_N,HEX_1,HEX_D}, arch_sh2e_up}
+ float FPUL,fr1 ;!/* 1111nnnn00101101 float FPUL,<F_REG_N>*/{"float",{FPUL_M,F_REG_N},{HEX_F,REG_N,HEX_2,HEX_D}, arch_sh2e_up}
+ float FPUL,dr2 ;!/* 1111nnn000101101 float FPUL,<D_REG_N>*/{"float",{FPUL_M,D_REG_N},{HEX_F,REG_N,HEX_2,HEX_D}, arch_sh2a_or_sh4_up}
+ fmac FR0,fr2,fr1 ;!/* 1111nnnnmmmm1110 fmac FR0,<F_REG_M>,<F_REG_N>*/{"fmac",{F_FR0,F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_E}, arch_sh2e_up}
+ fmov fr2,fr1 ;!/* 1111nnnnmmmm1100 fmov <F_REG_M>,<F_REG_N>*/{"fmov",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_C}, arch_sh2e_up}
+ fmov xd4,xd2 ;!/* 1111nnn1mmmm1100 fmov <DX_REG_M>,<DX_REG_N>*/{"fmov",{DX_REG_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_C}, arch_sh2a_or_sh4_up}
+ fmov @r5,fr1 ;!/* 1111nnnnmmmm1000 fmov @<REG_M>,<F_REG_N>*/{"fmov",{A_IND_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh2e_up}
+ fmov @r5,xd2 ;!/* 1111nnn1mmmm1000 fmov @<REG_M>,<DX_REG_N>*/{"fmov",{A_IND_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh2a_or_sh4_up}
+ fmov fr2,@r4 ;!/* 1111nnnnmmmm1010 fmov <F_REG_M>,@<REG_N>*/{"fmov",{F_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh2e_up}
+ fmov xd4,@r4 ;!/* 1111nnnnmmm11010 fmov <DX_REG_M>,@<REG_N>*/{"fmov",{DX_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh2a_or_sh4_up}
+ fmov @r5+,fr1 ;!/* 1111nnnnmmmm1001 fmov @<REG_M>+,<F_REG_N>*/{"fmov",{A_INC_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh2e_up}
+ fmov @r5+,xd2 ;!/* 1111nnn1mmmm1001 fmov @<REG_M>+,<DX_REG_N>*/{"fmov",{A_INC_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh2a_or_sh4_up}
+ fmov fr2,@-r4 ;!/* 1111nnnnmmmm1011 fmov <F_REG_M>,@-<REG_N>*/{"fmov",{F_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh2e_up}
+ fmov xd4,@-r4 ;!/* 1111nnnnmmm11011 fmov <DX_REG_M>,@-<REG_N>*/{"fmov",{DX_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh2a_or_sh4_up}
+ fmov @(R0,r5),fr1 ;!/* 1111nnnnmmmm0110 fmov @(R0,<REG_M>),<F_REG_N>*/{"fmov",{A_IND_R0_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh2e_up}
+ fmov @(R0,r5),xd2 ;!/* 1111nnn1mmmm0110 fmov @(R0,<REG_M>),<DX_REG_N>*/{"fmov",{A_IND_R0_REG_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh2a_or_sh4_up}
+ fmov fr2,@(R0,r4) ;!/* 1111nnnnmmmm0111 fmov <F_REG_M>,@(R0,<REG_N>)*/{"fmov",{F_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh2e_up}
+ fmov xd4,@(R0,r4) ;!/* 1111nnnnmmm10111 fmov <DX_REG_M>,@(R0,<REG_N>)*/{"fmov",{DX_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh2a_or_sh4_up}
+ fmov.d @r5,xd2 ;!/* 1111nnn1mmmm1000 fmov.d @<REG_M>,<DX_REG_N>*/{"fmov.d",{A_IND_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh2a_or_sh4_up}
+ fmov.d xd4,@r4 ;!/* 1111nnnnmmm11010 fmov.d <DX_REG_M>,@<REG_N>*/{"fmov.d",{DX_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh2a_or_sh4_up}
+ fmov.d @r5+,xd2 ;!/* 1111nnn1mmmm1001 fmov.d @<REG_M>+,<DX_REG_N>*/{"fmov.d",{A_INC_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh2a_or_sh4_up}
+ fmov.d xd4,@-r4 ;!/* 1111nnnnmmm11011 fmov.d <DX_REG_M>,@-<REG_N>*/{"fmov.d",{DX_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh2a_or_sh4_up}
+ fmov.d @(R0,r5),xd2 ;!/* 1111nnn1mmmm0110 fmov.d @(R0,<REG_M>),<DX_REG_N>*/{"fmov.d",{A_IND_R0_REG_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh2a_or_sh4_up}
+ fmov.d xd4,@(R0,r4) ;!/* 1111nnnnmmm10111 fmov.d <DX_REG_M>,@(R0,<REG_N>)*/{"fmov.d",{DX_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh2a_or_sh4_up}
+ fmov.s @r5,fr1 ;!/* 1111nnnnmmmm1000 fmov.s @<REG_M>,<F_REG_N>*/{"fmov.s",{A_IND_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh2e_up}
+ fmov.s fr2,@r4 ;!/* 1111nnnnmmmm1010 fmov.s <F_REG_M>,@<REG_N>*/{"fmov.s",{F_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh2e_up}
+ fmov.s @r5+,fr1 ;!/* 1111nnnnmmmm1001 fmov.s @<REG_M>+,<F_REG_N>*/{"fmov.s",{A_INC_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh2e_up}
+ fmov.s fr2,@-r4 ;!/* 1111nnnnmmmm1011 fmov.s <F_REG_M>,@-<REG_N>*/{"fmov.s",{F_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh2e_up}
+ fmov.s @(R0,r5),fr1 ;!/* 1111nnnnmmmm0110 fmov.s @(R0,<REG_M>),<F_REG_N>*/{"fmov.s",{A_IND_R0_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh2e_up}
+ fmov.s fr2,@(R0,r4) ;!/* 1111nnnnmmmm0111 fmov.s <F_REG_M>,@(R0,<REG_N>)*/{"fmov.s",{F_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh2e_up}
+ fmul fr2,fr1 ;!/* 1111nnnnmmmm0010 fmul <F_REG_M>,<F_REG_N>*/{"fmul",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_2}, arch_sh2e_up}
+ fmul dr4,dr2 ;!/* 1111nnn0mmm00010 fmul <D_REG_M>,<D_REG_N>*/{"fmul",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_2}, arch_sh2a_or_sh4_up}
+ fneg fr1 ;!/* 1111nnnn01001101 fneg <F_REG_N> */{"fneg",{F_REG_N},{HEX_F,REG_N,HEX_4,HEX_D}, arch_sh2e_up}
+ fneg dr2 ;!/* 1111nnn001001101 fneg <D_REG_N> */{"fneg",{D_REG_N},{HEX_F,REG_N,HEX_4,HEX_D}, arch_sh2a_or_sh4_up}
+ fschg ;!/* 1111001111111101 fschg */{"fschg",{0},{HEX_F,HEX_3,HEX_F,HEX_D}, arch_sh2a_or_sh4_up}
+ fsqrt fr1 ;!/* 1111nnnn01101101 fsqrt <F_REG_N> */{"fsqrt",{F_REG_N},{HEX_F,REG_N,HEX_6,HEX_D}, arch_sh2a_or_sh3e_up}
+ fsqrt dr2 ;!/* 1111nnn001101101 fsqrt <D_REG_N> */{"fsqrt",{D_REG_N},{HEX_F,REG_N,HEX_6,HEX_D}, arch_sh2a_or_sh4_up}
+ fsts FPUL,fr1 ;!/* 1111nnnn00001101 fsts FPUL,<F_REG_N>*/{"fsts",{FPUL_M,F_REG_N},{HEX_F,REG_N,HEX_0,HEX_D}, arch_sh2e_up}
+ fsub fr2,fr1 ;!/* 1111nnnnmmmm0001 fsub <F_REG_M>,<F_REG_N>*/{"fsub",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_1}, arch_sh2e_up}
+ fsub dr4,dr2 ;!/* 1111nnn0mmm00001 fsub <D_REG_M>,<D_REG_N>*/{"fsub",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_1}, arch_sh2a_or_sh4_up}
+ ftrc fr1,FPUL ;!/* 1111nnnn00111101 ftrc <F_REG_N>,FPUL*/{"ftrc",{F_REG_N,FPUL_M},{HEX_F,REG_N,HEX_3,HEX_D}, arch_sh2e_up}
+ ftrc dr2,FPUL ;!/* 1111nnnn00111101 ftrc <D_REG_N>,FPUL*/{"ftrc",{D_REG_N,FPUL_M},{HEX_F,REG_N,HEX_3,HEX_D}, arch_sh2a_or_sh4_up}
diff --git a/binutils-2.21/ld/testsuite/ld-sh/arch/sh4a-nofpu.s b/binutils-2.21/ld/testsuite/ld-sh/arch/sh4a-nofpu.s
new file mode 100644
index 0000000..202db6f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/arch/sh4a-nofpu.s
@@ -0,0 +1,201 @@
+! Generated file. DO NOT EDIT.
+!
+! This file was generated by gas/testsuite/gas/sh/arch/arch.exp .
+! This file should contain every instruction valid on
+! architecture sh4a-nofpu but no more.
+! If the tests are failing because the expected results
+! have changed then run 'make check' and copy the new file
+! from <objdir>/gas/testsuite/sh4a-nofpu.s
+! to <srcdir>/gas/testsuite/gas/sh/arch/sh4a-nofpu.s .
+! Make sure there are no unexpected or missing instructions.
+
+ .section .text
+sh4a_nofpu:
+! Instructions introduced into sh4a-nofpu
+ icbi @r4 ;!/* 0000nnnn11100011 icbi @<REG_N> */{"icbi",{A_IND_N},{HEX_0,REG_N,HEX_E,HEX_3}, arch_sh4a_nofpu_up}
+ movco.l r0,@r4 ;!/* 0000nnnn01110011 movco.l r0,@<REG_N> */{"movco.l",{A_R0,A_IND_N},{HEX_0,REG_N,HEX_7,HEX_3}, arch_sh4a_nofpu_up}
+ movli.l @r5,r0 ;!/* 0000mmmm01100011 movli.l @<REG_M>,r0 */{"movli.l",{A_IND_M,A_R0},{HEX_0,REG_M,HEX_6,HEX_3}, arch_sh4a_nofpu_up}
+ movua.l @r5,r0 ;!/* 0100mmmm10101001 movua.l @<REG_M>,r0 */{"movua.l",{A_IND_M,A_R0},{HEX_4,REG_M,HEX_A,HEX_9}, arch_sh4a_nofpu_up}
+ movua.l @r5+,r0 ;!/* 0100mmmm11101001 movua.l @<REG_M>+,r0 */{"movua.l",{A_INC_M,A_R0},{HEX_4,REG_M,HEX_E,HEX_9}, arch_sh4a_nofpu_up}
+ prefi @r4 ;!/* 0000nnnn11010011 prefi @<REG_N> */{"prefi",{A_IND_N},{HEX_0,REG_N,HEX_D,HEX_3}, arch_sh4a_nofpu_up}
+ synco ;!/* 0000000010101011 synco */{"synco",{0},{HEX_0,HEX_0,HEX_A,HEX_B}, arch_sh4a_nofpu_up}
+
+! Instructions inherited from ancestors: sh sh2 sh2a-nofpu-or-sh3-nommu sh2a-nofpu-or-sh4-nommu-nofpu sh3 sh3-nommu sh4-nofpu sh4-nommu-nofpu
+ add #4,r4 ;!/* 0111nnnni8*1.... add #<imm>,<REG_N> */{"add",{A_IMM,A_REG_N},{HEX_7,REG_N,IMM0_8}, arch_sh_up}
+ add r5,r4 ;!/* 0011nnnnmmmm1100 add <REG_M>,<REG_N> */{"add",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_C}, arch_sh_up}
+ addc r5,r4 ;!/* 0011nnnnmmmm1110 addc <REG_M>,<REG_N>*/{"addc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_E}, arch_sh_up}
+ addv r5,r4 ;!/* 0011nnnnmmmm1111 addv <REG_M>,<REG_N>*/{"addv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_F}, arch_sh_up}
+ and #4,R0 ;!/* 11001001i8*1.... and #<imm>,R0 */{"and",{A_IMM,A_R0},{HEX_C,HEX_9,IMM0_8}, arch_sh_up}
+ and r5,r4 ;!/* 0010nnnnmmmm1001 and <REG_M>,<REG_N> */{"and",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_9}, arch_sh_up}
+ and.b #4,@(R0,GBR) ;!/* 11001101i8*1.... and.b #<imm>,@(R0,GBR)*/{"and.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_D,IMM0_8}, arch_sh_up}
+ bra .+8 ;!/* 1010i12......... bra <bdisp12> */{"bra",{A_BDISP12},{HEX_A,BRANCH_12}, arch_sh_up}
+ bsr .+8 ;!/* 1011i12......... bsr <bdisp12> */{"bsr",{A_BDISP12},{HEX_B,BRANCH_12}, arch_sh_up}
+ bt .+8 ;!/* 10001001i8p1.... bt <bdisp8> */{"bt",{A_BDISP8},{HEX_8,HEX_9,BRANCH_8}, arch_sh_up}
+ bf .+8 ;!/* 10001011i8p1.... bf <bdisp8> */{"bf",{A_BDISP8},{HEX_8,HEX_B,BRANCH_8}, arch_sh_up}
+ bt.s .+8 ;!/* 10001101i8p1.... bt.s <bdisp8> */{"bt.s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bt/s .+8 ;!/* 10001101i8p1.... bt/s <bdisp8> */{"bt/s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bf.s .+8 ;!/* 10001111i8p1.... bf.s <bdisp8> */{"bf.s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ bf/s .+8 ;!/* 10001111i8p1.... bf/s <bdisp8> */{"bf/s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ clrmac ;!/* 0000000000101000 clrmac */{"clrmac",{0},{HEX_0,HEX_0,HEX_2,HEX_8}, arch_sh_up}
+ clrs ;!/* 0000000001001000 clrs */{"clrs",{0},{HEX_0,HEX_0,HEX_4,HEX_8}, arch_sh_up}
+ clrt ;!/* 0000000000001000 clrt */{"clrt",{0},{HEX_0,HEX_0,HEX_0,HEX_8}, arch_sh_up}
+ cmp/eq #4,R0 ;!/* 10001000i8*1.... cmp/eq #<imm>,R0 */{"cmp/eq",{A_IMM,A_R0},{HEX_8,HEX_8,IMM0_8}, arch_sh_up}
+ cmp/eq r5,r4 ;!/* 0011nnnnmmmm0000 cmp/eq <REG_M>,<REG_N>*/{"cmp/eq",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_0}, arch_sh_up}
+ cmp/ge r5,r4 ;!/* 0011nnnnmmmm0011 cmp/ge <REG_M>,<REG_N>*/{"cmp/ge",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_3}, arch_sh_up}
+ cmp/gt r5,r4 ;!/* 0011nnnnmmmm0111 cmp/gt <REG_M>,<REG_N>*/{"cmp/gt",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_7}, arch_sh_up}
+ cmp/hi r5,r4 ;!/* 0011nnnnmmmm0110 cmp/hi <REG_M>,<REG_N>*/{"cmp/hi",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_6}, arch_sh_up}
+ cmp/hs r5,r4 ;!/* 0011nnnnmmmm0010 cmp/hs <REG_M>,<REG_N>*/{"cmp/hs",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_2}, arch_sh_up}
+ cmp/pl r4 ;!/* 0100nnnn00010101 cmp/pl <REG_N> */{"cmp/pl",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_5}, arch_sh_up}
+ cmp/pz r4 ;!/* 0100nnnn00010001 cmp/pz <REG_N> */{"cmp/pz",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_1}, arch_sh_up}
+ cmp/str r5,r4 ;!/* 0010nnnnmmmm1100 cmp/str <REG_M>,<REG_N>*/{"cmp/str",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_C}, arch_sh_up}
+ div0s r5,r4 ;!/* 0010nnnnmmmm0111 div0s <REG_M>,<REG_N>*/{"div0s",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_7}, arch_sh_up}
+ div0u ;!/* 0000000000011001 div0u */{"div0u",{0},{HEX_0,HEX_0,HEX_1,HEX_9}, arch_sh_up}
+ div1 r5,r4 ;!/* 0011nnnnmmmm0100 div1 <REG_M>,<REG_N>*/{"div1",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_4}, arch_sh_up}
+ exts.b r5,r4 ;!/* 0110nnnnmmmm1110 exts.b <REG_M>,<REG_N>*/{"exts.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_E}, arch_sh_up}
+ exts.w r5,r4 ;!/* 0110nnnnmmmm1111 exts.w <REG_M>,<REG_N>*/{"exts.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_F}, arch_sh_up}
+ extu.b r5,r4 ;!/* 0110nnnnmmmm1100 extu.b <REG_M>,<REG_N>*/{"extu.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_C}, arch_sh_up}
+ extu.w r5,r4 ;!/* 0110nnnnmmmm1101 extu.w <REG_M>,<REG_N>*/{"extu.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_D}, arch_sh_up}
+ jmp @r4 ;!/* 0100nnnn00101011 jmp @<REG_N> */{"jmp",{A_IND_N},{HEX_4,REG_N,HEX_2,HEX_B}, arch_sh_up}
+ jsr @r4 ;!/* 0100nnnn00001011 jsr @<REG_N> */{"jsr",{A_IND_N},{HEX_4,REG_N,HEX_0,HEX_B}, arch_sh_up}
+ ldc r4,SR ;!/* 0100nnnn00001110 ldc <REG_N>,SR */{"ldc",{A_REG_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_E}, arch_sh_up}
+ ldc r4,GBR ;!/* 0100nnnn00011110 ldc <REG_N>,GBR */{"ldc",{A_REG_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_E}, arch_sh_up}
+ ldc r4,SGR ;!/* 0100nnnn00111010 ldc <REG_N>,SGR */{"ldc",{A_REG_N,A_SGR},{HEX_4,REG_N,HEX_3,HEX_A}, arch_sh4_nommu_nofpu_up}
+ ldc r4,VBR ;!/* 0100nnnn00101110 ldc <REG_N>,VBR */{"ldc",{A_REG_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_E}, arch_sh_up}
+ ldc r4,SSR ;!/* 0100nnnn00111110 ldc <REG_N>,SSR */{"ldc",{A_REG_N,A_SSR},{HEX_4,REG_N,HEX_3,HEX_E}, arch_sh3_nommu_up}
+ ldc r4,SPC ;!/* 0100nnnn01001110 ldc <REG_N>,SPC */{"ldc",{A_REG_N,A_SPC},{HEX_4,REG_N,HEX_4,HEX_E}, arch_sh3_nommu_up}
+ ldc r4,DBR ;!/* 0100nnnn11111010 ldc <REG_N>,DBR */{"ldc",{A_REG_N,A_DBR},{HEX_4,REG_N,HEX_F,HEX_A}, arch_sh4_nommu_nofpu_up}
+ ldc r4,r1_bank ;!/* 0100nnnn1xxx1110 ldc <REG_N>,Rn_BANK */{"ldc",{A_REG_N,A_REG_B},{HEX_4,REG_N,REG_B,HEX_E}, arch_sh3_nommu_up}
+ ldc.l @r4+,SR ;!/* 0100nnnn00000111 ldc.l @<REG_N>+,SR */{"ldc.l",{A_INC_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_7}, arch_sh_up}
+ ldc.l @r4+,GBR ;!/* 0100nnnn00010111 ldc.l @<REG_N>+,GBR */{"ldc.l",{A_INC_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_7}, arch_sh_up}
+ ldc.l @r4+,VBR ;!/* 0100nnnn00100111 ldc.l @<REG_N>+,VBR */{"ldc.l",{A_INC_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_7}, arch_sh_up}
+ ldc.l @r4+,SGR ;!/* 0100nnnn00110110 ldc.l @<REG_N>+,SGR */{"ldc.l",{A_INC_N,A_SGR},{HEX_4,REG_N,HEX_3,HEX_6}, arch_sh4_nommu_nofpu_up}
+ ldc.l @r4+,SSR ;!/* 0100nnnn00110111 ldc.l @<REG_N>+,SSR */{"ldc.l",{A_INC_N,A_SSR},{HEX_4,REG_N,HEX_3,HEX_7}, arch_sh3_nommu_up}
+ ldc.l @r4+,SPC ;!/* 0100nnnn01000111 ldc.l @<REG_N>+,SPC */{"ldc.l",{A_INC_N,A_SPC},{HEX_4,REG_N,HEX_4,HEX_7}, arch_sh3_nommu_up}
+ ldc.l @r4+,DBR ;!/* 0100nnnn11110110 ldc.l @<REG_N>+,DBR */{"ldc.l",{A_INC_N,A_DBR},{HEX_4,REG_N,HEX_F,HEX_6}, arch_sh4_nommu_nofpu_up}
+ ldc.l @r4+,r1_bank ;!/* 0100nnnn1xxx0111 ldc.l @<REG_N>+,Rn_BANK */{"ldc.l",{A_INC_N,A_REG_B},{HEX_4,REG_N,REG_B,HEX_7}, arch_sh3_nommu_up}
+ lds r4,MACH ;!/* 0100nnnn00001010 lds <REG_N>,MACH */{"lds",{A_REG_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ lds r4,MACL ;!/* 0100nnnn00011010 lds <REG_N>,MACL */{"lds",{A_REG_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ lds r4,PR ;!/* 0100nnnn00101010 lds <REG_N>,PR */{"lds",{A_REG_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ lds.l @r4+,MACH ;!/* 0100nnnn00000110 lds.l @<REG_N>+,MACH*/{"lds.l",{A_INC_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_6}, arch_sh_up}
+ lds.l @r4+,MACL ;!/* 0100nnnn00010110 lds.l @<REG_N>+,MACL*/{"lds.l",{A_INC_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_6}, arch_sh_up}
+ lds.l @r4+,PR ;!/* 0100nnnn00100110 lds.l @<REG_N>+,PR */{"lds.l",{A_INC_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_6}, arch_sh_up}
+ ldtlb ;!/* 0000000000111000 ldtlb */{"ldtlb",{0},{HEX_0,HEX_0,HEX_3,HEX_8}, arch_sh3_up}
+ mac.w @r5+,@r4+ ;!/* 0100nnnnmmmm1111 mac.w @<REG_M>+,@<REG_N>+*/{"mac.w",{A_INC_M,A_INC_N},{HEX_4,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mov #4,r4 ;!/* 1110nnnni8*1.... mov #<imm>,<REG_N> */{"mov",{A_IMM,A_REG_N},{HEX_E,REG_N,IMM0_8}, arch_sh_up}
+ mov r5,r4 ;!/* 0110nnnnmmmm0011 mov <REG_M>,<REG_N> */{"mov",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_3}, arch_sh_up}
+ mov.b r5,@(R0,r4) ;!/* 0000nnnnmmmm0100 mov.b <REG_M>,@(R0,<REG_N>)*/{"mov.b",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@-r4 ;!/* 0010nnnnmmmm0100 mov.b <REG_M>,@-<REG_N>*/{"mov.b",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@r4 ;!/* 0010nnnnmmmm0000 mov.b <REG_M>,@<REG_N>*/{"mov.b",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b @(8,r5),R0 ;!/* 10000100mmmmi4*1 mov.b @(<disp>,<REG_M>),R0*/{"mov.b",{A_DISP_REG_M,A_R0},{HEX_8,HEX_4,REG_M,IMM0_4}, arch_sh_up}
+ mov.b @(8,GBR),R0 ;!/* 11000100i8*1.... mov.b @(<disp>,GBR),R0*/{"mov.b",{A_DISP_GBR,A_R0},{HEX_C,HEX_4,IMM0_8}, arch_sh_up}
+ mov.b @(R0,r5),r4 ;!/* 0000nnnnmmmm1100 mov.b @(R0,<REG_M>),<REG_N>*/{"mov.b",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_C}, arch_sh_up}
+ mov.b @r5+,r4 ;!/* 0110nnnnmmmm0100 mov.b @<REG_M>+,<REG_N>*/{"mov.b",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b @r5,r4 ;!/* 0110nnnnmmmm0000 mov.b @<REG_M>,<REG_N>*/{"mov.b",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b R0,@(8,r5) ;!/* 10000000mmmmi4*1 mov.b R0,@(<disp>,<REG_M>)*/{"mov.b",{A_R0,A_DISP_REG_M},{HEX_8,HEX_0,REG_M,IMM1_4}, arch_sh_up}
+ mov.b R0,@(8,GBR) ;!/* 11000000i8*1.... mov.b R0,@(<disp>,GBR)*/{"mov.b",{A_R0,A_DISP_GBR},{HEX_C,HEX_0,IMM1_8}, arch_sh_up}
+ mov.l r5,@(8,r4) ;!/* 0001nnnnmmmmi4*4 mov.l <REG_M>,@(<disp>,<REG_N>)*/{"mov.l",{ A_REG_M,A_DISP_REG_N},{HEX_1,REG_N,REG_M,IMM1_4BY4}, arch_sh_up}
+ mov.l r5,@(R0,r4) ;!/* 0000nnnnmmmm0110 mov.l <REG_M>,@(R0,<REG_N>)*/{"mov.l",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@-r4 ;!/* 0010nnnnmmmm0110 mov.l <REG_M>,@-<REG_N>*/{"mov.l",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@r4 ;!/* 0010nnnnmmmm0010 mov.l <REG_M>,@<REG_N>*/{"mov.l",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l @(8,r5),r4 ;!/* 0101nnnnmmmmi4*4 mov.l @(<disp>,<REG_M>),<REG_N>*/{"mov.l",{A_DISP_REG_M,A_REG_N},{HEX_5,REG_N,REG_M,IMM0_4BY4}, arch_sh_up}
+ mov.l @(8,GBR),R0 ;!/* 11000110i8*4.... mov.l @(<disp>,GBR),R0*/{"mov.l",{A_DISP_GBR,A_R0},{HEX_C,HEX_6,IMM0_8BY4}, arch_sh_up}
+ .align 2
+ mov.l @(8,PC),r4 ;!/* 1101nnnni8p4.... mov.l @(<disp>,PC),<REG_N>*/{"mov.l",{A_DISP_PC,A_REG_N},{HEX_D,REG_N,PCRELIMM_8BY4}, arch_sh_up}
+ mov.l @(R0,r5),r4 ;!/* 0000nnnnmmmm1110 mov.l @(R0,<REG_M>),<REG_N>*/{"mov.l",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mov.l @r5+,r4 ;!/* 0110nnnnmmmm0110 mov.l @<REG_M>+,<REG_N>*/{"mov.l",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l @r5,r4 ;!/* 0110nnnnmmmm0010 mov.l @<REG_M>,<REG_N>*/{"mov.l",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l R0,@(8,GBR) ;!/* 11000010i8*4.... mov.l R0,@(<disp>,GBR)*/{"mov.l",{A_R0,A_DISP_GBR},{HEX_C,HEX_2,IMM1_8BY4}, arch_sh_up}
+ mov.w r5,@(R0,r4) ;!/* 0000nnnnmmmm0101 mov.w <REG_M>,@(R0,<REG_N>)*/{"mov.w",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@-r4 ;!/* 0010nnnnmmmm0101 mov.w <REG_M>,@-<REG_N>*/{"mov.w",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@r4 ;!/* 0010nnnnmmmm0001 mov.w <REG_M>,@<REG_N>*/{"mov.w",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w @(8,r5),R0 ;!/* 10000101mmmmi4*2 mov.w @(<disp>,<REG_M>),R0*/{"mov.w",{A_DISP_REG_M,A_R0},{HEX_8,HEX_5,REG_M,IMM0_4BY2}, arch_sh_up}
+ mov.w @(8,GBR),R0 ;!/* 11000101i8*2.... mov.w @(<disp>,GBR),R0*/{"mov.w",{A_DISP_GBR,A_R0},{HEX_C,HEX_5,IMM0_8BY2}, arch_sh_up}
+ mov.w @(8,PC),r4 ;!/* 1001nnnni8p2.... mov.w @(<disp>,PC),<REG_N>*/{"mov.w",{A_DISP_PC,A_REG_N},{HEX_9,REG_N,PCRELIMM_8BY2}, arch_sh_up}
+ mov.w @(R0,r5),r4 ;!/* 0000nnnnmmmm1101 mov.w @(R0,<REG_M>),<REG_N>*/{"mov.w",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_D}, arch_sh_up}
+ mov.w @r5+,r4 ;!/* 0110nnnnmmmm0101 mov.w @<REG_M>+,<REG_N>*/{"mov.w",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w @r5,r4 ;!/* 0110nnnnmmmm0001 mov.w @<REG_M>,<REG_N>*/{"mov.w",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w R0,@(8,r5) ;!/* 10000001mmmmi4*2 mov.w R0,@(<disp>,<REG_M>)*/{"mov.w",{A_R0,A_DISP_REG_M},{HEX_8,HEX_1,REG_M,IMM1_4BY2}, arch_sh_up}
+ mov.w R0,@(8,GBR) ;!/* 11000001i8*2.... mov.w R0,@(<disp>,GBR)*/{"mov.w",{A_R0,A_DISP_GBR},{HEX_C,HEX_1,IMM1_8BY2}, arch_sh_up}
+ .align 2
+ mova @(8,PC),R0 ;!/* 11000111i8p4.... mova @(<disp>,PC),R0*/{"mova",{A_DISP_PC,A_R0},{HEX_C,HEX_7,PCRELIMM_8BY4}, arch_sh_up}
+ movca.l R0,@r4 ;!/* 0000nnnn11000011 movca.l R0,@<REG_N> */{"movca.l",{A_R0,A_IND_N},{HEX_0,REG_N,HEX_C,HEX_3}, arch_sh4_nommu_nofpu_up}
+ movt r4 ;!/* 0000nnnn00101001 movt <REG_N> */{"movt",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ muls.w r5,r4 ;!/* 0010nnnnmmmm1111 muls.w <REG_M>,<REG_N>*/{"muls.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ muls r5,r4 ;!/* 0010nnnnmmmm1111 muls <REG_M>,<REG_N>*/{"muls",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mul.l r5,r4 ;!/* 0000nnnnmmmm0111 mul.l <REG_M>,<REG_N>*/{"mul.l",{ A_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_7}, arch_sh2_up}
+ mulu.w r5,r4 ;!/* 0010nnnnmmmm1110 mulu.w <REG_M>,<REG_N>*/{"mulu.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mulu r5,r4 ;!/* 0010nnnnmmmm1110 mulu <REG_M>,<REG_N>*/{"mulu",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ neg r5,r4 ;!/* 0110nnnnmmmm1011 neg <REG_M>,<REG_N> */{"neg",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_B}, arch_sh_up}
+ negc r5,r4 ;!/* 0110nnnnmmmm1010 negc <REG_M>,<REG_N>*/{"negc",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_A}, arch_sh_up}
+ nop ;!/* 0000000000001001 nop */{"nop",{0},{HEX_0,HEX_0,HEX_0,HEX_9}, arch_sh_up}
+ not r5,r4 ;!/* 0110nnnnmmmm0111 not <REG_M>,<REG_N> */{"not",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_7}, arch_sh_up}
+ ocbi @r4 ;!/* 0000nnnn10010011 ocbi @<REG_N> */{"ocbi",{A_IND_N},{HEX_0,REG_N,HEX_9,HEX_3}, arch_sh4_nommu_nofpu_up}
+ ocbp @r4 ;!/* 0000nnnn10100011 ocbp @<REG_N> */{"ocbp",{A_IND_N},{HEX_0,REG_N,HEX_A,HEX_3}, arch_sh4_nommu_nofpu_up}
+ ocbwb @r4 ;!/* 0000nnnn10110011 ocbwb @<REG_N> */{"ocbwb",{A_IND_N},{HEX_0,REG_N,HEX_B,HEX_3}, arch_sh4_nommu_nofpu_up}
+ or #4,R0 ;!/* 11001011i8*1.... or #<imm>,R0 */{"or",{A_IMM,A_R0},{HEX_C,HEX_B,IMM0_8}, arch_sh_up}
+ or r5,r4 ;!/* 0010nnnnmmmm1011 or <REG_M>,<REG_N> */{"or",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_B}, arch_sh_up}
+ or.b #4,@(R0,GBR) ;!/* 11001111i8*1.... or.b #<imm>,@(R0,GBR)*/{"or.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_F,IMM0_8}, arch_sh_up}
+ pref @r4 ;!/* 0000nnnn10000011 pref @<REG_N> */{"pref",{A_IND_N},{HEX_0,REG_N,HEX_8,HEX_3}, arch_sh2a_nofpu_or_sh4_nommu_nofpu_up}
+ rotcl r4 ;!/* 0100nnnn00100100 rotcl <REG_N> */{"rotcl",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_4}, arch_sh_up}
+ rotcr r4 ;!/* 0100nnnn00100101 rotcr <REG_N> */{"rotcr",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_5}, arch_sh_up}
+ rotl r4 ;!/* 0100nnnn00000100 rotl <REG_N> */{"rotl",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_4}, arch_sh_up}
+ rotr r4 ;!/* 0100nnnn00000101 rotr <REG_N> */{"rotr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_5}, arch_sh_up}
+ rte ;!/* 0000000000101011 rte */{"rte",{0},{HEX_0,HEX_0,HEX_2,HEX_B}, arch_sh_up}
+ rts ;!/* 0000000000001011 rts */{"rts",{0},{HEX_0,HEX_0,HEX_0,HEX_B}, arch_sh_up}
+ sets ;!/* 0000000001011000 sets */{"sets",{0},{HEX_0,HEX_0,HEX_5,HEX_8}, arch_sh_up}
+ sett ;!/* 0000000000011000 sett */{"sett",{0},{HEX_0,HEX_0,HEX_1,HEX_8}, arch_sh_up}
+ shad r5,r4 ;!/* 0100nnnnmmmm1100 shad <REG_M>,<REG_N>*/{"shad",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_C}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shld r5,r4 ;!/* 0100nnnnmmmm1101 shld <REG_M>,<REG_N>*/{"shld",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_D}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shal r4 ;!/* 0100nnnn00100000 shal <REG_N> */{"shal",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_0}, arch_sh_up}
+ shar r4 ;!/* 0100nnnn00100001 shar <REG_N> */{"shar",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_1}, arch_sh_up}
+ shll r4 ;!/* 0100nnnn00000000 shll <REG_N> */{"shll",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_0}, arch_sh_up}
+ shll16 r4 ;!/* 0100nnnn00101000 shll16 <REG_N> */{"shll16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_8}, arch_sh_up}
+ shll2 r4 ;!/* 0100nnnn00001000 shll2 <REG_N> */{"shll2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_8}, arch_sh_up}
+ shll8 r4 ;!/* 0100nnnn00011000 shll8 <REG_N> */{"shll8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_8}, arch_sh_up}
+ shlr r4 ;!/* 0100nnnn00000001 shlr <REG_N> */{"shlr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_1}, arch_sh_up}
+ shlr16 r4 ;!/* 0100nnnn00101001 shlr16 <REG_N> */{"shlr16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ shlr2 r4 ;!/* 0100nnnn00001001 shlr2 <REG_N> */{"shlr2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_9}, arch_sh_up}
+ shlr8 r4 ;!/* 0100nnnn00011001 shlr8 <REG_N> */{"shlr8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_9}, arch_sh_up}
+ sleep ;!/* 0000000000011011 sleep */{"sleep",{0},{HEX_0,HEX_0,HEX_1,HEX_B}, arch_sh_up}
+ stc SR,r4 ;!/* 0000nnnn00000010 stc SR,<REG_N> */{"stc",{A_SR,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ stc GBR,r4 ;!/* 0000nnnn00010010 stc GBR,<REG_N> */{"stc",{A_GBR,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ stc VBR,r4 ;!/* 0000nnnn00100010 stc VBR,<REG_N> */{"stc",{A_VBR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ stc SSR,r4 ;!/* 0000nnnn00110010 stc SSR,<REG_N> */{"stc",{A_SSR,A_REG_N},{HEX_0,REG_N,HEX_3,HEX_2}, arch_sh3_nommu_up}
+ stc SPC,r4 ;!/* 0000nnnn01000010 stc SPC,<REG_N> */{"stc",{A_SPC,A_REG_N},{HEX_0,REG_N,HEX_4,HEX_2}, arch_sh3_nommu_up}
+ stc SGR,r4 ;!/* 0000nnnn00111010 stc SGR,<REG_N> */{"stc",{A_SGR,A_REG_N},{HEX_0,REG_N,HEX_3,HEX_A}, arch_sh4_nommu_nofpu_up}
+ stc DBR,r4 ;!/* 0000nnnn11111010 stc DBR,<REG_N> */{"stc",{A_DBR,A_REG_N},{HEX_0,REG_N,HEX_F,HEX_A}, arch_sh4_nommu_nofpu_up}
+ stc r1_bank,r4 ;!/* 0000nnnn1xxx0010 stc Rn_BANK,<REG_N> */{"stc",{A_REG_B,A_REG_N},{HEX_0,REG_N,REG_B,HEX_2}, arch_sh3_nommu_up}
+ stc.l SR,@-r4 ;!/* 0100nnnn00000011 stc.l SR,@-<REG_N> */{"stc.l",{A_SR,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_3}, arch_sh_up}
+ stc.l VBR,@-r4 ;!/* 0100nnnn00100011 stc.l VBR,@-<REG_N> */{"stc.l",{A_VBR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_3}, arch_sh_up}
+ stc.l SSR,@-r4 ;!/* 0100nnnn00110011 stc.l SSR,@-<REG_N> */{"stc.l",{A_SSR,A_DEC_N},{HEX_4,REG_N,HEX_3,HEX_3}, arch_sh3_nommu_up}
+ stc.l SPC,@-r4 ;!/* 0100nnnn01000011 stc.l SPC,@-<REG_N> */{"stc.l",{A_SPC,A_DEC_N},{HEX_4,REG_N,HEX_4,HEX_3}, arch_sh3_nommu_up}
+ stc.l GBR,@-r4 ;!/* 0100nnnn00010011 stc.l GBR,@-<REG_N> */{"stc.l",{A_GBR,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_3}, arch_sh_up}
+ stc.l SGR,@-r4 ;!/* 0100nnnn00110010 stc.l SGR,@-<REG_N> */{"stc.l",{A_SGR,A_DEC_N},{HEX_4,REG_N,HEX_3,HEX_2}, arch_sh4_nommu_nofpu_up}
+ stc.l DBR,@-r4 ;!/* 0100nnnn11110010 stc.l DBR,@-<REG_N> */{"stc.l",{A_DBR,A_DEC_N},{HEX_4,REG_N,HEX_F,HEX_2}, arch_sh4_nommu_nofpu_up}
+ stc.l r1_bank,@-r4 ;!/* 0100nnnn1xxx0011 stc.l Rn_BANK,@-<REG_N> */{"stc.l",{A_REG_B,A_DEC_N},{HEX_4,REG_N,REG_B,HEX_3}, arch_sh3_nommu_up}
+ sts MACH,r4 ;!/* 0000nnnn00001010 sts MACH,<REG_N> */{"sts",{A_MACH,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ sts MACL,r4 ;!/* 0000nnnn00011010 sts MACL,<REG_N> */{"sts",{A_MACL,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ sts PR,r4 ;!/* 0000nnnn00101010 sts PR,<REG_N> */{"sts",{A_PR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ sts.l MACH,@-r4 ;!/* 0100nnnn00000010 sts.l MACH,@-<REG_N>*/{"sts.l",{A_MACH,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ sts.l MACL,@-r4 ;!/* 0100nnnn00010010 sts.l MACL,@-<REG_N>*/{"sts.l",{A_MACL,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ sts.l PR,@-r4 ;!/* 0100nnnn00100010 sts.l PR,@-<REG_N> */{"sts.l",{A_PR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ sub r5,r4 ;!/* 0011nnnnmmmm1000 sub <REG_M>,<REG_N> */{"sub",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_8}, arch_sh_up}
+ subc r5,r4 ;!/* 0011nnnnmmmm1010 subc <REG_M>,<REG_N>*/{"subc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_A}, arch_sh_up}
+ subv r5,r4 ;!/* 0011nnnnmmmm1011 subv <REG_M>,<REG_N>*/{"subv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_B}, arch_sh_up}
+ swap.b r5,r4 ;!/* 0110nnnnmmmm1000 swap.b <REG_M>,<REG_N>*/{"swap.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_8}, arch_sh_up}
+ swap.w r5,r4 ;!/* 0110nnnnmmmm1001 swap.w <REG_M>,<REG_N>*/{"swap.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_9}, arch_sh_up}
+ tas.b @r4 ;!/* 0100nnnn00011011 tas.b @<REG_N> */{"tas.b",{A_IND_N},{HEX_4,REG_N,HEX_1,HEX_B}, arch_sh_up}
+ trapa #4 ;!/* 11000011i8*1.... trapa #<imm> */{"trapa",{A_IMM},{HEX_C,HEX_3,IMM0_8}, arch_sh_up}
+ tst #4,R0 ;!/* 11001000i8*1.... tst #<imm>,R0 */{"tst",{A_IMM,A_R0},{HEX_C,HEX_8,IMM0_8}, arch_sh_up}
+ tst r5,r4 ;!/* 0010nnnnmmmm1000 tst <REG_M>,<REG_N> */{"tst",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_8}, arch_sh_up}
+ tst.b #4,@(R0,GBR) ;!/* 11001100i8*1.... tst.b #<imm>,@(R0,GBR)*/{"tst.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_C,IMM0_8}, arch_sh_up}
+ xor #4,R0 ;!/* 11001010i8*1.... xor #<imm>,R0 */{"xor",{A_IMM,A_R0},{HEX_C,HEX_A,IMM0_8}, arch_sh_up}
+ xor r5,r4 ;!/* 0010nnnnmmmm1010 xor <REG_M>,<REG_N> */{"xor",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_A}, arch_sh_up}
+ xor.b #4,@(R0,GBR) ;!/* 11001110i8*1.... xor.b #<imm>,@(R0,GBR)*/{"xor.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_E,IMM0_8}, arch_sh_up}
+ xtrct r5,r4 ;!/* 0010nnnnmmmm1101 xtrct <REG_M>,<REG_N>*/{"xtrct",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_D}, arch_sh_up}
+ dt r4 ;!/* 0100nnnn00010000 dt <REG_N> */{"dt",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_0}, arch_sh2_up}
+ dmuls.l r5,r4 ;!/* 0011nnnnmmmm1101 dmuls.l <REG_M>,<REG_N>*/{"dmuls.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_D}, arch_sh2_up}
+ dmulu.l r5,r4 ;!/* 0011nnnnmmmm0101 dmulu.l <REG_M>,<REG_N>*/{"dmulu.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_5}, arch_sh2_up}
+ mac.l @r5+,@r4+ ;!/* 0000nnnnmmmm1111 mac.l @<REG_M>+,@<REG_N>+*/{"mac.l",{A_INC_M,A_INC_N},{HEX_0,REG_N,REG_M,HEX_F}, arch_sh2_up}
+ braf r4 ;!/* 0000nnnn00100011 braf <REG_N> */{"braf",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_3}, arch_sh2_up}
+ bsrf r4 ;!/* 0000nnnn00000011 bsrf <REG_N> */{"bsrf",{A_REG_N},{HEX_0,REG_N,HEX_0,HEX_3}, arch_sh2_up}
diff --git a/binutils-2.21/ld/testsuite/ld-sh/arch/sh4a.s b/binutils-2.21/ld/testsuite/ld-sh/arch/sh4a.s
new file mode 100644
index 0000000..c710ddc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/arch/sh4a.s
@@ -0,0 +1,271 @@
+! Generated file. DO NOT EDIT.
+!
+! This file was generated by gas/testsuite/gas/sh/arch/arch.exp .
+! This file should contain every instruction valid on
+! architecture sh4a but no more.
+! If the tests are failing because the expected results
+! have changed then run 'make check' and copy the new file
+! from <objdir>/gas/testsuite/sh4a.s
+! to <srcdir>/gas/testsuite/gas/sh/arch/sh4a.s .
+! Make sure there are no unexpected or missing instructions.
+
+ .section .text
+sh4a:
+! Instructions introduced into sh4a
+ fpchg ;!/* 1111011111111101 fpchg */{"fpchg",{0},{HEX_F,HEX_7,HEX_F,HEX_D}, arch_sh4a_up}
+
+! Instructions inherited from ancestors: sh sh2 sh2a-nofpu-or-sh3-nommu sh2a-nofpu-or-sh4-nommu-nofpu sh2a-or-sh3e sh2a-or-sh4 sh2e sh3 sh3-nommu sh3e sh4 sh4-nofpu sh4-nommu-nofpu sh4a-nofpu
+ add #4,r4 ;!/* 0111nnnni8*1.... add #<imm>,<REG_N> */{"add",{A_IMM,A_REG_N},{HEX_7,REG_N,IMM0_8}, arch_sh_up}
+ add r5,r4 ;!/* 0011nnnnmmmm1100 add <REG_M>,<REG_N> */{"add",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_C}, arch_sh_up}
+ addc r5,r4 ;!/* 0011nnnnmmmm1110 addc <REG_M>,<REG_N>*/{"addc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_E}, arch_sh_up}
+ addv r5,r4 ;!/* 0011nnnnmmmm1111 addv <REG_M>,<REG_N>*/{"addv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_F}, arch_sh_up}
+ and #4,R0 ;!/* 11001001i8*1.... and #<imm>,R0 */{"and",{A_IMM,A_R0},{HEX_C,HEX_9,IMM0_8}, arch_sh_up}
+ and r5,r4 ;!/* 0010nnnnmmmm1001 and <REG_M>,<REG_N> */{"and",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_9}, arch_sh_up}
+ and.b #4,@(R0,GBR) ;!/* 11001101i8*1.... and.b #<imm>,@(R0,GBR)*/{"and.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_D,IMM0_8}, arch_sh_up}
+ bra .+8 ;!/* 1010i12......... bra <bdisp12> */{"bra",{A_BDISP12},{HEX_A,BRANCH_12}, arch_sh_up}
+ bsr .+8 ;!/* 1011i12......... bsr <bdisp12> */{"bsr",{A_BDISP12},{HEX_B,BRANCH_12}, arch_sh_up}
+ bt .+8 ;!/* 10001001i8p1.... bt <bdisp8> */{"bt",{A_BDISP8},{HEX_8,HEX_9,BRANCH_8}, arch_sh_up}
+ bf .+8 ;!/* 10001011i8p1.... bf <bdisp8> */{"bf",{A_BDISP8},{HEX_8,HEX_B,BRANCH_8}, arch_sh_up}
+ bt.s .+8 ;!/* 10001101i8p1.... bt.s <bdisp8> */{"bt.s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bt/s .+8 ;!/* 10001101i8p1.... bt/s <bdisp8> */{"bt/s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bf.s .+8 ;!/* 10001111i8p1.... bf.s <bdisp8> */{"bf.s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ bf/s .+8 ;!/* 10001111i8p1.... bf/s <bdisp8> */{"bf/s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ clrmac ;!/* 0000000000101000 clrmac */{"clrmac",{0},{HEX_0,HEX_0,HEX_2,HEX_8}, arch_sh_up}
+ clrs ;!/* 0000000001001000 clrs */{"clrs",{0},{HEX_0,HEX_0,HEX_4,HEX_8}, arch_sh_up}
+ clrt ;!/* 0000000000001000 clrt */{"clrt",{0},{HEX_0,HEX_0,HEX_0,HEX_8}, arch_sh_up}
+ cmp/eq #4,R0 ;!/* 10001000i8*1.... cmp/eq #<imm>,R0 */{"cmp/eq",{A_IMM,A_R0},{HEX_8,HEX_8,IMM0_8}, arch_sh_up}
+ cmp/eq r5,r4 ;!/* 0011nnnnmmmm0000 cmp/eq <REG_M>,<REG_N>*/{"cmp/eq",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_0}, arch_sh_up}
+ cmp/ge r5,r4 ;!/* 0011nnnnmmmm0011 cmp/ge <REG_M>,<REG_N>*/{"cmp/ge",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_3}, arch_sh_up}
+ cmp/gt r5,r4 ;!/* 0011nnnnmmmm0111 cmp/gt <REG_M>,<REG_N>*/{"cmp/gt",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_7}, arch_sh_up}
+ cmp/hi r5,r4 ;!/* 0011nnnnmmmm0110 cmp/hi <REG_M>,<REG_N>*/{"cmp/hi",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_6}, arch_sh_up}
+ cmp/hs r5,r4 ;!/* 0011nnnnmmmm0010 cmp/hs <REG_M>,<REG_N>*/{"cmp/hs",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_2}, arch_sh_up}
+ cmp/pl r4 ;!/* 0100nnnn00010101 cmp/pl <REG_N> */{"cmp/pl",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_5}, arch_sh_up}
+ cmp/pz r4 ;!/* 0100nnnn00010001 cmp/pz <REG_N> */{"cmp/pz",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_1}, arch_sh_up}
+ cmp/str r5,r4 ;!/* 0010nnnnmmmm1100 cmp/str <REG_M>,<REG_N>*/{"cmp/str",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_C}, arch_sh_up}
+ div0s r5,r4 ;!/* 0010nnnnmmmm0111 div0s <REG_M>,<REG_N>*/{"div0s",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_7}, arch_sh_up}
+ div0u ;!/* 0000000000011001 div0u */{"div0u",{0},{HEX_0,HEX_0,HEX_1,HEX_9}, arch_sh_up}
+ div1 r5,r4 ;!/* 0011nnnnmmmm0100 div1 <REG_M>,<REG_N>*/{"div1",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_4}, arch_sh_up}
+ exts.b r5,r4 ;!/* 0110nnnnmmmm1110 exts.b <REG_M>,<REG_N>*/{"exts.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_E}, arch_sh_up}
+ exts.w r5,r4 ;!/* 0110nnnnmmmm1111 exts.w <REG_M>,<REG_N>*/{"exts.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_F}, arch_sh_up}
+ extu.b r5,r4 ;!/* 0110nnnnmmmm1100 extu.b <REG_M>,<REG_N>*/{"extu.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_C}, arch_sh_up}
+ extu.w r5,r4 ;!/* 0110nnnnmmmm1101 extu.w <REG_M>,<REG_N>*/{"extu.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_D}, arch_sh_up}
+ icbi @r4 ;!/* 0000nnnn11100011 icbi @<REG_N> */{"icbi",{A_IND_N},{HEX_0,REG_N,HEX_E,HEX_3}, arch_sh4a_nofpu_up}
+ jmp @r4 ;!/* 0100nnnn00101011 jmp @<REG_N> */{"jmp",{A_IND_N},{HEX_4,REG_N,HEX_2,HEX_B}, arch_sh_up}
+ jsr @r4 ;!/* 0100nnnn00001011 jsr @<REG_N> */{"jsr",{A_IND_N},{HEX_4,REG_N,HEX_0,HEX_B}, arch_sh_up}
+ ldc r4,SR ;!/* 0100nnnn00001110 ldc <REG_N>,SR */{"ldc",{A_REG_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_E}, arch_sh_up}
+ ldc r4,GBR ;!/* 0100nnnn00011110 ldc <REG_N>,GBR */{"ldc",{A_REG_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_E}, arch_sh_up}
+ ldc r4,SGR ;!/* 0100nnnn00111010 ldc <REG_N>,SGR */{"ldc",{A_REG_N,A_SGR},{HEX_4,REG_N,HEX_3,HEX_A}, arch_sh4_nommu_nofpu_up}
+ ldc r4,VBR ;!/* 0100nnnn00101110 ldc <REG_N>,VBR */{"ldc",{A_REG_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_E}, arch_sh_up}
+ ldc r4,SSR ;!/* 0100nnnn00111110 ldc <REG_N>,SSR */{"ldc",{A_REG_N,A_SSR},{HEX_4,REG_N,HEX_3,HEX_E}, arch_sh3_nommu_up}
+ ldc r4,SPC ;!/* 0100nnnn01001110 ldc <REG_N>,SPC */{"ldc",{A_REG_N,A_SPC},{HEX_4,REG_N,HEX_4,HEX_E}, arch_sh3_nommu_up}
+ ldc r4,DBR ;!/* 0100nnnn11111010 ldc <REG_N>,DBR */{"ldc",{A_REG_N,A_DBR},{HEX_4,REG_N,HEX_F,HEX_A}, arch_sh4_nommu_nofpu_up}
+ ldc r4,r1_bank ;!/* 0100nnnn1xxx1110 ldc <REG_N>,Rn_BANK */{"ldc",{A_REG_N,A_REG_B},{HEX_4,REG_N,REG_B,HEX_E}, arch_sh3_nommu_up}
+ ldc.l @r4+,SR ;!/* 0100nnnn00000111 ldc.l @<REG_N>+,SR */{"ldc.l",{A_INC_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_7}, arch_sh_up}
+ ldc.l @r4+,GBR ;!/* 0100nnnn00010111 ldc.l @<REG_N>+,GBR */{"ldc.l",{A_INC_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_7}, arch_sh_up}
+ ldc.l @r4+,VBR ;!/* 0100nnnn00100111 ldc.l @<REG_N>+,VBR */{"ldc.l",{A_INC_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_7}, arch_sh_up}
+ ldc.l @r4+,SGR ;!/* 0100nnnn00110110 ldc.l @<REG_N>+,SGR */{"ldc.l",{A_INC_N,A_SGR},{HEX_4,REG_N,HEX_3,HEX_6}, arch_sh4_nommu_nofpu_up}
+ ldc.l @r4+,SSR ;!/* 0100nnnn00110111 ldc.l @<REG_N>+,SSR */{"ldc.l",{A_INC_N,A_SSR},{HEX_4,REG_N,HEX_3,HEX_7}, arch_sh3_nommu_up}
+ ldc.l @r4+,SPC ;!/* 0100nnnn01000111 ldc.l @<REG_N>+,SPC */{"ldc.l",{A_INC_N,A_SPC},{HEX_4,REG_N,HEX_4,HEX_7}, arch_sh3_nommu_up}
+ ldc.l @r4+,DBR ;!/* 0100nnnn11110110 ldc.l @<REG_N>+,DBR */{"ldc.l",{A_INC_N,A_DBR},{HEX_4,REG_N,HEX_F,HEX_6}, arch_sh4_nommu_nofpu_up}
+ ldc.l @r4+,r1_bank ;!/* 0100nnnn1xxx0111 ldc.l @<REG_N>+,Rn_BANK */{"ldc.l",{A_INC_N,A_REG_B},{HEX_4,REG_N,REG_B,HEX_7}, arch_sh3_nommu_up}
+ lds r4,MACH ;!/* 0100nnnn00001010 lds <REG_N>,MACH */{"lds",{A_REG_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ lds r4,MACL ;!/* 0100nnnn00011010 lds <REG_N>,MACL */{"lds",{A_REG_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ lds r4,PR ;!/* 0100nnnn00101010 lds <REG_N>,PR */{"lds",{A_REG_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ lds r4,FPUL ;!/* 0100nnnn01011010 lds <REG_N>,FPUL */{"lds",{A_REG_M,FPUL_N},{HEX_4,REG_M,HEX_5,HEX_A}, arch_sh2e_up}
+ lds r5,FPSCR ;!/* 0100nnnn01101010 lds <REG_M>,FPSCR */{"lds",{A_REG_M,FPSCR_N},{HEX_4,REG_M,HEX_6,HEX_A}, arch_sh2e_up}
+ lds.l @r4+,MACH ;!/* 0100nnnn00000110 lds.l @<REG_N>+,MACH*/{"lds.l",{A_INC_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_6}, arch_sh_up}
+ lds.l @r4+,MACL ;!/* 0100nnnn00010110 lds.l @<REG_N>+,MACL*/{"lds.l",{A_INC_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_6}, arch_sh_up}
+ lds.l @r4+,PR ;!/* 0100nnnn00100110 lds.l @<REG_N>+,PR */{"lds.l",{A_INC_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_6}, arch_sh_up}
+ lds.l @r5+,FPUL ;!/* 0100nnnn01010110 lds.l @<REG_M>+,FPUL*/{"lds.l",{A_INC_M,FPUL_N},{HEX_4,REG_M,HEX_5,HEX_6}, arch_sh2e_up}
+ lds.l @r5+,FPSCR ;!/* 0100nnnn01100110 lds.l @<REG_M>+,FPSCR*/{"lds.l",{A_INC_M,FPSCR_N},{HEX_4,REG_M,HEX_6,HEX_6}, arch_sh2e_up}
+ ldtlb ;!/* 0000000000111000 ldtlb */{"ldtlb",{0},{HEX_0,HEX_0,HEX_3,HEX_8}, arch_sh3_up}
+ mac.w @r5+,@r4+ ;!/* 0100nnnnmmmm1111 mac.w @<REG_M>+,@<REG_N>+*/{"mac.w",{A_INC_M,A_INC_N},{HEX_4,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mov #4,r4 ;!/* 1110nnnni8*1.... mov #<imm>,<REG_N> */{"mov",{A_IMM,A_REG_N},{HEX_E,REG_N,IMM0_8}, arch_sh_up}
+ mov r5,r4 ;!/* 0110nnnnmmmm0011 mov <REG_M>,<REG_N> */{"mov",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_3}, arch_sh_up}
+ mov.b r5,@(R0,r4) ;!/* 0000nnnnmmmm0100 mov.b <REG_M>,@(R0,<REG_N>)*/{"mov.b",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@-r4 ;!/* 0010nnnnmmmm0100 mov.b <REG_M>,@-<REG_N>*/{"mov.b",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@r4 ;!/* 0010nnnnmmmm0000 mov.b <REG_M>,@<REG_N>*/{"mov.b",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b @(8,r5),R0 ;!/* 10000100mmmmi4*1 mov.b @(<disp>,<REG_M>),R0*/{"mov.b",{A_DISP_REG_M,A_R0},{HEX_8,HEX_4,REG_M,IMM0_4}, arch_sh_up}
+ mov.b @(8,GBR),R0 ;!/* 11000100i8*1.... mov.b @(<disp>,GBR),R0*/{"mov.b",{A_DISP_GBR,A_R0},{HEX_C,HEX_4,IMM0_8}, arch_sh_up}
+ mov.b @(R0,r5),r4 ;!/* 0000nnnnmmmm1100 mov.b @(R0,<REG_M>),<REG_N>*/{"mov.b",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_C}, arch_sh_up}
+ mov.b @r5+,r4 ;!/* 0110nnnnmmmm0100 mov.b @<REG_M>+,<REG_N>*/{"mov.b",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b @r5,r4 ;!/* 0110nnnnmmmm0000 mov.b @<REG_M>,<REG_N>*/{"mov.b",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b R0,@(8,r5) ;!/* 10000000mmmmi4*1 mov.b R0,@(<disp>,<REG_M>)*/{"mov.b",{A_R0,A_DISP_REG_M},{HEX_8,HEX_0,REG_M,IMM1_4}, arch_sh_up}
+ mov.b R0,@(8,GBR) ;!/* 11000000i8*1.... mov.b R0,@(<disp>,GBR)*/{"mov.b",{A_R0,A_DISP_GBR},{HEX_C,HEX_0,IMM1_8}, arch_sh_up}
+ mov.l r5,@(8,r4) ;!/* 0001nnnnmmmmi4*4 mov.l <REG_M>,@(<disp>,<REG_N>)*/{"mov.l",{ A_REG_M,A_DISP_REG_N},{HEX_1,REG_N,REG_M,IMM1_4BY4}, arch_sh_up}
+ mov.l r5,@(R0,r4) ;!/* 0000nnnnmmmm0110 mov.l <REG_M>,@(R0,<REG_N>)*/{"mov.l",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@-r4 ;!/* 0010nnnnmmmm0110 mov.l <REG_M>,@-<REG_N>*/{"mov.l",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@r4 ;!/* 0010nnnnmmmm0010 mov.l <REG_M>,@<REG_N>*/{"mov.l",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l @(8,r5),r4 ;!/* 0101nnnnmmmmi4*4 mov.l @(<disp>,<REG_M>),<REG_N>*/{"mov.l",{A_DISP_REG_M,A_REG_N},{HEX_5,REG_N,REG_M,IMM0_4BY4}, arch_sh_up}
+ mov.l @(8,GBR),R0 ;!/* 11000110i8*4.... mov.l @(<disp>,GBR),R0*/{"mov.l",{A_DISP_GBR,A_R0},{HEX_C,HEX_6,IMM0_8BY4}, arch_sh_up}
+ .align 2
+ mov.l @(8,PC),r4 ;!/* 1101nnnni8p4.... mov.l @(<disp>,PC),<REG_N>*/{"mov.l",{A_DISP_PC,A_REG_N},{HEX_D,REG_N,PCRELIMM_8BY4}, arch_sh_up}
+ mov.l @(R0,r5),r4 ;!/* 0000nnnnmmmm1110 mov.l @(R0,<REG_M>),<REG_N>*/{"mov.l",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mov.l @r5+,r4 ;!/* 0110nnnnmmmm0110 mov.l @<REG_M>+,<REG_N>*/{"mov.l",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l @r5,r4 ;!/* 0110nnnnmmmm0010 mov.l @<REG_M>,<REG_N>*/{"mov.l",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l R0,@(8,GBR) ;!/* 11000010i8*4.... mov.l R0,@(<disp>,GBR)*/{"mov.l",{A_R0,A_DISP_GBR},{HEX_C,HEX_2,IMM1_8BY4}, arch_sh_up}
+ mov.w r5,@(R0,r4) ;!/* 0000nnnnmmmm0101 mov.w <REG_M>,@(R0,<REG_N>)*/{"mov.w",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@-r4 ;!/* 0010nnnnmmmm0101 mov.w <REG_M>,@-<REG_N>*/{"mov.w",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@r4 ;!/* 0010nnnnmmmm0001 mov.w <REG_M>,@<REG_N>*/{"mov.w",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w @(8,r5),R0 ;!/* 10000101mmmmi4*2 mov.w @(<disp>,<REG_M>),R0*/{"mov.w",{A_DISP_REG_M,A_R0},{HEX_8,HEX_5,REG_M,IMM0_4BY2}, arch_sh_up}
+ mov.w @(8,GBR),R0 ;!/* 11000101i8*2.... mov.w @(<disp>,GBR),R0*/{"mov.w",{A_DISP_GBR,A_R0},{HEX_C,HEX_5,IMM0_8BY2}, arch_sh_up}
+ mov.w @(8,PC),r4 ;!/* 1001nnnni8p2.... mov.w @(<disp>,PC),<REG_N>*/{"mov.w",{A_DISP_PC,A_REG_N},{HEX_9,REG_N,PCRELIMM_8BY2}, arch_sh_up}
+ mov.w @(R0,r5),r4 ;!/* 0000nnnnmmmm1101 mov.w @(R0,<REG_M>),<REG_N>*/{"mov.w",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_D}, arch_sh_up}
+ mov.w @r5+,r4 ;!/* 0110nnnnmmmm0101 mov.w @<REG_M>+,<REG_N>*/{"mov.w",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w @r5,r4 ;!/* 0110nnnnmmmm0001 mov.w @<REG_M>,<REG_N>*/{"mov.w",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w R0,@(8,r5) ;!/* 10000001mmmmi4*2 mov.w R0,@(<disp>,<REG_M>)*/{"mov.w",{A_R0,A_DISP_REG_M},{HEX_8,HEX_1,REG_M,IMM1_4BY2}, arch_sh_up}
+ mov.w R0,@(8,GBR) ;!/* 11000001i8*2.... mov.w R0,@(<disp>,GBR)*/{"mov.w",{A_R0,A_DISP_GBR},{HEX_C,HEX_1,IMM1_8BY2}, arch_sh_up}
+ .align 2
+ mova @(8,PC),R0 ;!/* 11000111i8p4.... mova @(<disp>,PC),R0*/{"mova",{A_DISP_PC,A_R0},{HEX_C,HEX_7,PCRELIMM_8BY4}, arch_sh_up}
+ movca.l R0,@r4 ;!/* 0000nnnn11000011 movca.l R0,@<REG_N> */{"movca.l",{A_R0,A_IND_N},{HEX_0,REG_N,HEX_C,HEX_3}, arch_sh4_nommu_nofpu_up}
+ movco.l r0,@r4 ;!/* 0000nnnn01110011 movco.l r0,@<REG_N> */{"movco.l",{A_R0,A_IND_N},{HEX_0,REG_N,HEX_7,HEX_3}, arch_sh4a_nofpu_up}
+ movli.l @r5,r0 ;!/* 0000mmmm01100011 movli.l @<REG_M>,r0 */{"movli.l",{A_IND_M,A_R0},{HEX_0,REG_M,HEX_6,HEX_3}, arch_sh4a_nofpu_up}
+ movt r4 ;!/* 0000nnnn00101001 movt <REG_N> */{"movt",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ movua.l @r5,r0 ;!/* 0100mmmm10101001 movua.l @<REG_M>,r0 */{"movua.l",{A_IND_M,A_R0},{HEX_4,REG_M,HEX_A,HEX_9}, arch_sh4a_nofpu_up}
+ movua.l @r5+,r0 ;!/* 0100mmmm11101001 movua.l @<REG_M>+,r0 */{"movua.l",{A_INC_M,A_R0},{HEX_4,REG_M,HEX_E,HEX_9}, arch_sh4a_nofpu_up}
+ muls.w r5,r4 ;!/* 0010nnnnmmmm1111 muls.w <REG_M>,<REG_N>*/{"muls.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ muls r5,r4 ;!/* 0010nnnnmmmm1111 muls <REG_M>,<REG_N>*/{"muls",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mul.l r5,r4 ;!/* 0000nnnnmmmm0111 mul.l <REG_M>,<REG_N>*/{"mul.l",{ A_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_7}, arch_sh2_up}
+ mulu.w r5,r4 ;!/* 0010nnnnmmmm1110 mulu.w <REG_M>,<REG_N>*/{"mulu.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mulu r5,r4 ;!/* 0010nnnnmmmm1110 mulu <REG_M>,<REG_N>*/{"mulu",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ neg r5,r4 ;!/* 0110nnnnmmmm1011 neg <REG_M>,<REG_N> */{"neg",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_B}, arch_sh_up}
+ negc r5,r4 ;!/* 0110nnnnmmmm1010 negc <REG_M>,<REG_N>*/{"negc",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_A}, arch_sh_up}
+ nop ;!/* 0000000000001001 nop */{"nop",{0},{HEX_0,HEX_0,HEX_0,HEX_9}, arch_sh_up}
+ not r5,r4 ;!/* 0110nnnnmmmm0111 not <REG_M>,<REG_N> */{"not",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_7}, arch_sh_up}
+ ocbi @r4 ;!/* 0000nnnn10010011 ocbi @<REG_N> */{"ocbi",{A_IND_N},{HEX_0,REG_N,HEX_9,HEX_3}, arch_sh4_nommu_nofpu_up}
+ ocbp @r4 ;!/* 0000nnnn10100011 ocbp @<REG_N> */{"ocbp",{A_IND_N},{HEX_0,REG_N,HEX_A,HEX_3}, arch_sh4_nommu_nofpu_up}
+ ocbwb @r4 ;!/* 0000nnnn10110011 ocbwb @<REG_N> */{"ocbwb",{A_IND_N},{HEX_0,REG_N,HEX_B,HEX_3}, arch_sh4_nommu_nofpu_up}
+ or #4,R0 ;!/* 11001011i8*1.... or #<imm>,R0 */{"or",{A_IMM,A_R0},{HEX_C,HEX_B,IMM0_8}, arch_sh_up}
+ or r5,r4 ;!/* 0010nnnnmmmm1011 or <REG_M>,<REG_N> */{"or",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_B}, arch_sh_up}
+ or.b #4,@(R0,GBR) ;!/* 11001111i8*1.... or.b #<imm>,@(R0,GBR)*/{"or.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_F,IMM0_8}, arch_sh_up}
+ pref @r4 ;!/* 0000nnnn10000011 pref @<REG_N> */{"pref",{A_IND_N},{HEX_0,REG_N,HEX_8,HEX_3}, arch_sh2a_nofpu_or_sh4_nommu_nofpu_up}
+ prefi @r4 ;!/* 0000nnnn11010011 prefi @<REG_N> */{"prefi",{A_IND_N},{HEX_0,REG_N,HEX_D,HEX_3}, arch_sh4a_nofpu_up}
+ rotcl r4 ;!/* 0100nnnn00100100 rotcl <REG_N> */{"rotcl",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_4}, arch_sh_up}
+ rotcr r4 ;!/* 0100nnnn00100101 rotcr <REG_N> */{"rotcr",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_5}, arch_sh_up}
+ rotl r4 ;!/* 0100nnnn00000100 rotl <REG_N> */{"rotl",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_4}, arch_sh_up}
+ rotr r4 ;!/* 0100nnnn00000101 rotr <REG_N> */{"rotr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_5}, arch_sh_up}
+ rte ;!/* 0000000000101011 rte */{"rte",{0},{HEX_0,HEX_0,HEX_2,HEX_B}, arch_sh_up}
+ rts ;!/* 0000000000001011 rts */{"rts",{0},{HEX_0,HEX_0,HEX_0,HEX_B}, arch_sh_up}
+ sets ;!/* 0000000001011000 sets */{"sets",{0},{HEX_0,HEX_0,HEX_5,HEX_8}, arch_sh_up}
+ sett ;!/* 0000000000011000 sett */{"sett",{0},{HEX_0,HEX_0,HEX_1,HEX_8}, arch_sh_up}
+ shad r5,r4 ;!/* 0100nnnnmmmm1100 shad <REG_M>,<REG_N>*/{"shad",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_C}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shld r5,r4 ;!/* 0100nnnnmmmm1101 shld <REG_M>,<REG_N>*/{"shld",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_D}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shal r4 ;!/* 0100nnnn00100000 shal <REG_N> */{"shal",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_0}, arch_sh_up}
+ shar r4 ;!/* 0100nnnn00100001 shar <REG_N> */{"shar",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_1}, arch_sh_up}
+ shll r4 ;!/* 0100nnnn00000000 shll <REG_N> */{"shll",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_0}, arch_sh_up}
+ shll16 r4 ;!/* 0100nnnn00101000 shll16 <REG_N> */{"shll16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_8}, arch_sh_up}
+ shll2 r4 ;!/* 0100nnnn00001000 shll2 <REG_N> */{"shll2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_8}, arch_sh_up}
+ shll8 r4 ;!/* 0100nnnn00011000 shll8 <REG_N> */{"shll8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_8}, arch_sh_up}
+ shlr r4 ;!/* 0100nnnn00000001 shlr <REG_N> */{"shlr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_1}, arch_sh_up}
+ shlr16 r4 ;!/* 0100nnnn00101001 shlr16 <REG_N> */{"shlr16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ shlr2 r4 ;!/* 0100nnnn00001001 shlr2 <REG_N> */{"shlr2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_9}, arch_sh_up}
+ shlr8 r4 ;!/* 0100nnnn00011001 shlr8 <REG_N> */{"shlr8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_9}, arch_sh_up}
+ sleep ;!/* 0000000000011011 sleep */{"sleep",{0},{HEX_0,HEX_0,HEX_1,HEX_B}, arch_sh_up}
+ stc SR,r4 ;!/* 0000nnnn00000010 stc SR,<REG_N> */{"stc",{A_SR,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ stc GBR,r4 ;!/* 0000nnnn00010010 stc GBR,<REG_N> */{"stc",{A_GBR,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ stc VBR,r4 ;!/* 0000nnnn00100010 stc VBR,<REG_N> */{"stc",{A_VBR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ stc SSR,r4 ;!/* 0000nnnn00110010 stc SSR,<REG_N> */{"stc",{A_SSR,A_REG_N},{HEX_0,REG_N,HEX_3,HEX_2}, arch_sh3_nommu_up}
+ stc SPC,r4 ;!/* 0000nnnn01000010 stc SPC,<REG_N> */{"stc",{A_SPC,A_REG_N},{HEX_0,REG_N,HEX_4,HEX_2}, arch_sh3_nommu_up}
+ stc SGR,r4 ;!/* 0000nnnn00111010 stc SGR,<REG_N> */{"stc",{A_SGR,A_REG_N},{HEX_0,REG_N,HEX_3,HEX_A}, arch_sh4_nommu_nofpu_up}
+ stc DBR,r4 ;!/* 0000nnnn11111010 stc DBR,<REG_N> */{"stc",{A_DBR,A_REG_N},{HEX_0,REG_N,HEX_F,HEX_A}, arch_sh4_nommu_nofpu_up}
+ stc r1_bank,r4 ;!/* 0000nnnn1xxx0010 stc Rn_BANK,<REG_N> */{"stc",{A_REG_B,A_REG_N},{HEX_0,REG_N,REG_B,HEX_2}, arch_sh3_nommu_up}
+ stc.l SR,@-r4 ;!/* 0100nnnn00000011 stc.l SR,@-<REG_N> */{"stc.l",{A_SR,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_3}, arch_sh_up}
+ stc.l VBR,@-r4 ;!/* 0100nnnn00100011 stc.l VBR,@-<REG_N> */{"stc.l",{A_VBR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_3}, arch_sh_up}
+ stc.l SSR,@-r4 ;!/* 0100nnnn00110011 stc.l SSR,@-<REG_N> */{"stc.l",{A_SSR,A_DEC_N},{HEX_4,REG_N,HEX_3,HEX_3}, arch_sh3_nommu_up}
+ stc.l SPC,@-r4 ;!/* 0100nnnn01000011 stc.l SPC,@-<REG_N> */{"stc.l",{A_SPC,A_DEC_N},{HEX_4,REG_N,HEX_4,HEX_3}, arch_sh3_nommu_up}
+ stc.l GBR,@-r4 ;!/* 0100nnnn00010011 stc.l GBR,@-<REG_N> */{"stc.l",{A_GBR,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_3}, arch_sh_up}
+ stc.l SGR,@-r4 ;!/* 0100nnnn00110010 stc.l SGR,@-<REG_N> */{"stc.l",{A_SGR,A_DEC_N},{HEX_4,REG_N,HEX_3,HEX_2}, arch_sh4_nommu_nofpu_up}
+ stc.l DBR,@-r4 ;!/* 0100nnnn11110010 stc.l DBR,@-<REG_N> */{"stc.l",{A_DBR,A_DEC_N},{HEX_4,REG_N,HEX_F,HEX_2}, arch_sh4_nommu_nofpu_up}
+ stc.l r1_bank,@-r4 ;!/* 0100nnnn1xxx0011 stc.l Rn_BANK,@-<REG_N> */{"stc.l",{A_REG_B,A_DEC_N},{HEX_4,REG_N,REG_B,HEX_3}, arch_sh3_nommu_up}
+ sts MACH,r4 ;!/* 0000nnnn00001010 sts MACH,<REG_N> */{"sts",{A_MACH,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ sts MACL,r4 ;!/* 0000nnnn00011010 sts MACL,<REG_N> */{"sts",{A_MACL,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ sts PR,r4 ;!/* 0000nnnn00101010 sts PR,<REG_N> */{"sts",{A_PR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ sts FPUL,r4 ;!/* 0000nnnn01011010 sts FPUL,<REG_N> */{"sts",{FPUL_M,A_REG_N},{HEX_0,REG_N,HEX_5,HEX_A}, arch_sh2e_up}
+ sts FPSCR,r4 ;!/* 0000nnnn01101010 sts FPSCR,<REG_N> */{"sts",{FPSCR_M,A_REG_N},{HEX_0,REG_N,HEX_6,HEX_A}, arch_sh2e_up}
+ sts.l MACH,@-r4 ;!/* 0100nnnn00000010 sts.l MACH,@-<REG_N>*/{"sts.l",{A_MACH,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ sts.l MACL,@-r4 ;!/* 0100nnnn00010010 sts.l MACL,@-<REG_N>*/{"sts.l",{A_MACL,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ sts.l PR,@-r4 ;!/* 0100nnnn00100010 sts.l PR,@-<REG_N> */{"sts.l",{A_PR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ sts.l FPUL,@-r4 ;!/* 0100nnnn01010010 sts.l FPUL,@-<REG_N>*/{"sts.l",{FPUL_M,A_DEC_N},{HEX_4,REG_N,HEX_5,HEX_2}, arch_sh2e_up}
+ sts.l FPSCR,@-r4 ;!/* 0100nnnn01100010 sts.l FPSCR,@-<REG_N>*/{"sts.l",{FPSCR_M,A_DEC_N},{HEX_4,REG_N,HEX_6,HEX_2}, arch_sh2e_up}
+ sub r5,r4 ;!/* 0011nnnnmmmm1000 sub <REG_M>,<REG_N> */{"sub",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_8}, arch_sh_up}
+ subc r5,r4 ;!/* 0011nnnnmmmm1010 subc <REG_M>,<REG_N>*/{"subc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_A}, arch_sh_up}
+ subv r5,r4 ;!/* 0011nnnnmmmm1011 subv <REG_M>,<REG_N>*/{"subv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_B}, arch_sh_up}
+ swap.b r5,r4 ;!/* 0110nnnnmmmm1000 swap.b <REG_M>,<REG_N>*/{"swap.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_8}, arch_sh_up}
+ swap.w r5,r4 ;!/* 0110nnnnmmmm1001 swap.w <REG_M>,<REG_N>*/{"swap.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_9}, arch_sh_up}
+ synco ;!/* 0000000010101011 synco */{"synco",{0},{HEX_0,HEX_0,HEX_A,HEX_B}, arch_sh4a_nofpu_up}
+ tas.b @r4 ;!/* 0100nnnn00011011 tas.b @<REG_N> */{"tas.b",{A_IND_N},{HEX_4,REG_N,HEX_1,HEX_B}, arch_sh_up}
+ trapa #4 ;!/* 11000011i8*1.... trapa #<imm> */{"trapa",{A_IMM},{HEX_C,HEX_3,IMM0_8}, arch_sh_up}
+ tst #4,R0 ;!/* 11001000i8*1.... tst #<imm>,R0 */{"tst",{A_IMM,A_R0},{HEX_C,HEX_8,IMM0_8}, arch_sh_up}
+ tst r5,r4 ;!/* 0010nnnnmmmm1000 tst <REG_M>,<REG_N> */{"tst",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_8}, arch_sh_up}
+ tst.b #4,@(R0,GBR) ;!/* 11001100i8*1.... tst.b #<imm>,@(R0,GBR)*/{"tst.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_C,IMM0_8}, arch_sh_up}
+ xor #4,R0 ;!/* 11001010i8*1.... xor #<imm>,R0 */{"xor",{A_IMM,A_R0},{HEX_C,HEX_A,IMM0_8}, arch_sh_up}
+ xor r5,r4 ;!/* 0010nnnnmmmm1010 xor <REG_M>,<REG_N> */{"xor",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_A}, arch_sh_up}
+ xor.b #4,@(R0,GBR) ;!/* 11001110i8*1.... xor.b #<imm>,@(R0,GBR)*/{"xor.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_E,IMM0_8}, arch_sh_up}
+ xtrct r5,r4 ;!/* 0010nnnnmmmm1101 xtrct <REG_M>,<REG_N>*/{"xtrct",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_D}, arch_sh_up}
+ dt r4 ;!/* 0100nnnn00010000 dt <REG_N> */{"dt",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_0}, arch_sh2_up}
+ dmuls.l r5,r4 ;!/* 0011nnnnmmmm1101 dmuls.l <REG_M>,<REG_N>*/{"dmuls.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_D}, arch_sh2_up}
+ dmulu.l r5,r4 ;!/* 0011nnnnmmmm0101 dmulu.l <REG_M>,<REG_N>*/{"dmulu.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_5}, arch_sh2_up}
+ mac.l @r5+,@r4+ ;!/* 0000nnnnmmmm1111 mac.l @<REG_M>+,@<REG_N>+*/{"mac.l",{A_INC_M,A_INC_N},{HEX_0,REG_N,REG_M,HEX_F}, arch_sh2_up}
+ braf r4 ;!/* 0000nnnn00100011 braf <REG_N> */{"braf",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_3}, arch_sh2_up}
+ bsrf r4 ;!/* 0000nnnn00000011 bsrf <REG_N> */{"bsrf",{A_REG_N},{HEX_0,REG_N,HEX_0,HEX_3}, arch_sh2_up}
+ fabs fr1 ;!/* 1111nnnn01011101 fabs <F_REG_N> */{"fabs",{F_REG_N},{HEX_F,REG_N,HEX_5,HEX_D}, arch_sh2e_up}
+ fabs dr2 ;!/* 1111nnn001011101 fabs <D_REG_N> */{"fabs",{D_REG_N},{HEX_F,REG_N,HEX_5,HEX_D}, arch_sh2a_or_sh4_up}
+ fadd fr2,fr1 ;!/* 1111nnnnmmmm0000 fadd <F_REG_M>,<F_REG_N>*/{"fadd",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_0}, arch_sh2e_up}
+ fadd dr4,dr2 ;!/* 1111nnn0mmm00000 fadd <D_REG_M>,<D_REG_N>*/{"fadd",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_0}, arch_sh2a_or_sh4_up}
+ fcmp/eq fr2,fr1 ;!/* 1111nnnnmmmm0100 fcmp/eq <F_REG_M>,<F_REG_N>*/{"fcmp/eq",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_4}, arch_sh2e_up}
+ fcmp/eq dr4,dr2 ;!/* 1111nnn0mmm00100 fcmp/eq <D_REG_M>,<D_REG_N>*/{"fcmp/eq",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_4}, arch_sh2a_or_sh4_up}
+ fcmp/gt fr2,fr1 ;!/* 1111nnnnmmmm0101 fcmp/gt <F_REG_M>,<F_REG_N>*/{"fcmp/gt",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_5}, arch_sh2e_up}
+ fcmp/gt dr4,dr2 ;!/* 1111nnn0mmm00101 fcmp/gt <D_REG_M>,<D_REG_N>*/{"fcmp/gt",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_5}, arch_sh2a_or_sh4_up}
+ fcnvds dr2,FPUL ;!/* 1111nnn010111101 fcnvds <D_REG_N>,FPUL*/{"fcnvds",{D_REG_N,FPUL_M},{HEX_F,REG_N_D,HEX_B,HEX_D}, arch_sh2a_or_sh4_up}
+ fcnvsd FPUL,dr2 ;!/* 1111nnn010101101 fcnvsd FPUL,<D_REG_N>*/{"fcnvsd",{FPUL_M,D_REG_N},{HEX_F,REG_N_D,HEX_A,HEX_D}, arch_sh2a_or_sh4_up}
+ fdiv fr2,fr1 ;!/* 1111nnnnmmmm0011 fdiv <F_REG_M>,<F_REG_N>*/{"fdiv",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_3}, arch_sh2e_up}
+ fdiv dr4,dr2 ;!/* 1111nnn0mmm00011 fdiv <D_REG_M>,<D_REG_N>*/{"fdiv",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_3}, arch_sh2a_or_sh4_up}
+ fipr fv4,fv0 ;!/* 1111nnmm11101101 fipr <V_REG_M>,<V_REG_N>*/{"fipr",{V_REG_M,V_REG_N},{HEX_F,REG_NM,HEX_E,HEX_D}, arch_sh4_up}
+ fldi0 fr1 ;!/* 1111nnnn10001101 fldi0 <F_REG_N> */{"fldi0",{F_REG_N},{HEX_F,REG_N,HEX_8,HEX_D}, arch_sh2e_up}
+ fldi1 fr1 ;!/* 1111nnnn10011101 fldi1 <F_REG_N> */{"fldi1",{F_REG_N},{HEX_F,REG_N,HEX_9,HEX_D}, arch_sh2e_up}
+ flds fr1,FPUL ;!/* 1111nnnn00011101 flds <F_REG_N>,FPUL*/{"flds",{F_REG_N,FPUL_M},{HEX_F,REG_N,HEX_1,HEX_D}, arch_sh2e_up}
+ float FPUL,fr1 ;!/* 1111nnnn00101101 float FPUL,<F_REG_N>*/{"float",{FPUL_M,F_REG_N},{HEX_F,REG_N,HEX_2,HEX_D}, arch_sh2e_up}
+ float FPUL,dr2 ;!/* 1111nnn000101101 float FPUL,<D_REG_N>*/{"float",{FPUL_M,D_REG_N},{HEX_F,REG_N,HEX_2,HEX_D}, arch_sh2a_or_sh4_up}
+ fmac FR0,fr2,fr1 ;!/* 1111nnnnmmmm1110 fmac FR0,<F_REG_M>,<F_REG_N>*/{"fmac",{F_FR0,F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_E}, arch_sh2e_up}
+ fmov fr2,fr1 ;!/* 1111nnnnmmmm1100 fmov <F_REG_M>,<F_REG_N>*/{"fmov",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_C}, arch_sh2e_up}
+ fmov xd4,xd2 ;!/* 1111nnn1mmmm1100 fmov <DX_REG_M>,<DX_REG_N>*/{"fmov",{DX_REG_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_C}, arch_sh2a_or_sh4_up}
+ fmov @r5,fr1 ;!/* 1111nnnnmmmm1000 fmov @<REG_M>,<F_REG_N>*/{"fmov",{A_IND_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh2e_up}
+ fmov @r5,xd2 ;!/* 1111nnn1mmmm1000 fmov @<REG_M>,<DX_REG_N>*/{"fmov",{A_IND_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh2a_or_sh4_up}
+ fmov fr2,@r4 ;!/* 1111nnnnmmmm1010 fmov <F_REG_M>,@<REG_N>*/{"fmov",{F_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh2e_up}
+ fmov xd4,@r4 ;!/* 1111nnnnmmm11010 fmov <DX_REG_M>,@<REG_N>*/{"fmov",{DX_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh2a_or_sh4_up}
+ fmov @r5+,fr1 ;!/* 1111nnnnmmmm1001 fmov @<REG_M>+,<F_REG_N>*/{"fmov",{A_INC_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh2e_up}
+ fmov @r5+,xd2 ;!/* 1111nnn1mmmm1001 fmov @<REG_M>+,<DX_REG_N>*/{"fmov",{A_INC_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh2a_or_sh4_up}
+ fmov fr2,@-r4 ;!/* 1111nnnnmmmm1011 fmov <F_REG_M>,@-<REG_N>*/{"fmov",{F_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh2e_up}
+ fmov xd4,@-r4 ;!/* 1111nnnnmmm11011 fmov <DX_REG_M>,@-<REG_N>*/{"fmov",{DX_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh2a_or_sh4_up}
+ fmov @(R0,r5),fr1 ;!/* 1111nnnnmmmm0110 fmov @(R0,<REG_M>),<F_REG_N>*/{"fmov",{A_IND_R0_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh2e_up}
+ fmov @(R0,r5),xd2 ;!/* 1111nnn1mmmm0110 fmov @(R0,<REG_M>),<DX_REG_N>*/{"fmov",{A_IND_R0_REG_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh2a_or_sh4_up}
+ fmov fr2,@(R0,r4) ;!/* 1111nnnnmmmm0111 fmov <F_REG_M>,@(R0,<REG_N>)*/{"fmov",{F_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh2e_up}
+ fmov xd4,@(R0,r4) ;!/* 1111nnnnmmm10111 fmov <DX_REG_M>,@(R0,<REG_N>)*/{"fmov",{DX_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh2a_or_sh4_up}
+ fmov.d @r5,xd2 ;!/* 1111nnn1mmmm1000 fmov.d @<REG_M>,<DX_REG_N>*/{"fmov.d",{A_IND_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh2a_or_sh4_up}
+ fmov.d xd4,@r4 ;!/* 1111nnnnmmm11010 fmov.d <DX_REG_M>,@<REG_N>*/{"fmov.d",{DX_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh2a_or_sh4_up}
+ fmov.d @r5+,xd2 ;!/* 1111nnn1mmmm1001 fmov.d @<REG_M>+,<DX_REG_N>*/{"fmov.d",{A_INC_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh2a_or_sh4_up}
+ fmov.d xd4,@-r4 ;!/* 1111nnnnmmm11011 fmov.d <DX_REG_M>,@-<REG_N>*/{"fmov.d",{DX_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh2a_or_sh4_up}
+ fmov.d @(R0,r5),xd2 ;!/* 1111nnn1mmmm0110 fmov.d @(R0,<REG_M>),<DX_REG_N>*/{"fmov.d",{A_IND_R0_REG_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh2a_or_sh4_up}
+ fmov.d xd4,@(R0,r4) ;!/* 1111nnnnmmm10111 fmov.d <DX_REG_M>,@(R0,<REG_N>)*/{"fmov.d",{DX_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh2a_or_sh4_up}
+ fmov.s @r5,fr1 ;!/* 1111nnnnmmmm1000 fmov.s @<REG_M>,<F_REG_N>*/{"fmov.s",{A_IND_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh2e_up}
+ fmov.s fr2,@r4 ;!/* 1111nnnnmmmm1010 fmov.s <F_REG_M>,@<REG_N>*/{"fmov.s",{F_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh2e_up}
+ fmov.s @r5+,fr1 ;!/* 1111nnnnmmmm1001 fmov.s @<REG_M>+,<F_REG_N>*/{"fmov.s",{A_INC_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh2e_up}
+ fmov.s fr2,@-r4 ;!/* 1111nnnnmmmm1011 fmov.s <F_REG_M>,@-<REG_N>*/{"fmov.s",{F_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh2e_up}
+ fmov.s @(R0,r5),fr1 ;!/* 1111nnnnmmmm0110 fmov.s @(R0,<REG_M>),<F_REG_N>*/{"fmov.s",{A_IND_R0_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh2e_up}
+ fmov.s fr2,@(R0,r4) ;!/* 1111nnnnmmmm0111 fmov.s <F_REG_M>,@(R0,<REG_N>)*/{"fmov.s",{F_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh2e_up}
+ fmul fr2,fr1 ;!/* 1111nnnnmmmm0010 fmul <F_REG_M>,<F_REG_N>*/{"fmul",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_2}, arch_sh2e_up}
+ fmul dr4,dr2 ;!/* 1111nnn0mmm00010 fmul <D_REG_M>,<D_REG_N>*/{"fmul",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_2}, arch_sh2a_or_sh4_up}
+ fneg fr1 ;!/* 1111nnnn01001101 fneg <F_REG_N> */{"fneg",{F_REG_N},{HEX_F,REG_N,HEX_4,HEX_D}, arch_sh2e_up}
+ fneg dr2 ;!/* 1111nnn001001101 fneg <D_REG_N> */{"fneg",{D_REG_N},{HEX_F,REG_N,HEX_4,HEX_D}, arch_sh2a_or_sh4_up}
+ frchg ;!/* 1111101111111101 frchg */{"frchg",{0},{HEX_F,HEX_B,HEX_F,HEX_D}, arch_sh4_up}
+ fsca FPUL,dr2 ;!/* 1111nnn011111101 fsca FPUL,<D_REG_N> */{"fsca",{FPUL_M,D_REG_N},{HEX_F,REG_N_D,HEX_F,HEX_D}, arch_sh4_up}
+ fschg ;!/* 1111001111111101 fschg */{"fschg",{0},{HEX_F,HEX_3,HEX_F,HEX_D}, arch_sh2a_or_sh4_up}
+ fsqrt fr1 ;!/* 1111nnnn01101101 fsqrt <F_REG_N> */{"fsqrt",{F_REG_N},{HEX_F,REG_N,HEX_6,HEX_D}, arch_sh2a_or_sh3e_up}
+ fsqrt dr2 ;!/* 1111nnn001101101 fsqrt <D_REG_N> */{"fsqrt",{D_REG_N},{HEX_F,REG_N,HEX_6,HEX_D}, arch_sh2a_or_sh4_up}
+ fsrra fr1 ;!/* 1111nnnn01111101 fsrra <F_REG_N> */{"fsrra",{F_REG_N},{HEX_F,REG_N,HEX_7,HEX_D}, arch_sh4_up}
+ fsts FPUL,fr1 ;!/* 1111nnnn00001101 fsts FPUL,<F_REG_N>*/{"fsts",{FPUL_M,F_REG_N},{HEX_F,REG_N,HEX_0,HEX_D}, arch_sh2e_up}
+ fsub fr2,fr1 ;!/* 1111nnnnmmmm0001 fsub <F_REG_M>,<F_REG_N>*/{"fsub",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_1}, arch_sh2e_up}
+ fsub dr4,dr2 ;!/* 1111nnn0mmm00001 fsub <D_REG_M>,<D_REG_N>*/{"fsub",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_1}, arch_sh2a_or_sh4_up}
+ ftrc fr1,FPUL ;!/* 1111nnnn00111101 ftrc <F_REG_N>,FPUL*/{"ftrc",{F_REG_N,FPUL_M},{HEX_F,REG_N,HEX_3,HEX_D}, arch_sh2e_up}
+ ftrc dr2,FPUL ;!/* 1111nnnn00111101 ftrc <D_REG_N>,FPUL*/{"ftrc",{D_REG_N,FPUL_M},{HEX_F,REG_N,HEX_3,HEX_D}, arch_sh2a_or_sh4_up}
+ ftrv xmtrx,fv0 ;!/* 1111nn0111111101 ftrv XMTRX_M4,<V_REG_n>*/{"ftrv",{XMTRX_M4,V_REG_N},{HEX_F,REG_N_B01,HEX_F,HEX_D}, arch_sh4_up}
diff --git a/binutils-2.21/ld/testsuite/ld-sh/arch/sh4al-dsp.s b/binutils-2.21/ld/testsuite/ld-sh/arch/sh4al-dsp.s
new file mode 100644
index 0000000..8d48962
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/arch/sh4al-dsp.s
@@ -0,0 +1,343 @@
+! Generated file. DO NOT EDIT.
+!
+! This file was generated by gas/testsuite/gas/sh/arch/arch.exp .
+! This file should contain every instruction valid on
+! architecture sh4al-dsp but no more.
+! If the tests are failing because the expected results
+! have changed then run 'make check' and copy the new file
+! from <objdir>/gas/testsuite/sh4al-dsp.s
+! to <srcdir>/gas/testsuite/gas/sh/arch/sh4al-dsp.s .
+! Make sure there are no unexpected or missing instructions.
+
+ .section .text
+sh4al_dsp:
+! Instructions introduced into sh4al-dsp
+ clrdmxy ;!/* 0000000010001000 clrdmxy */{"clrdmxy",{0},{HEX_0,HEX_0,HEX_8,HEX_8}, arch_sh4al_dsp_up}
+ ldrc r5 ;!/* 0100mmmm00110100 ldrc <REG_M> */{"ldrc",{A_REG_M},{HEX_4,REG_M,HEX_3,HEX_4}, arch_sh4al_dsp_up}
+ ldrc #4 ;!/* 10001010i8*1.... ldrc #<imm> */{"ldrc",{A_IMM},{HEX_8,HEX_A,IMM0_8}, arch_sh4al_dsp_up}
+ setdmx ;!/* 0000000010011000 setdmx */{"setdmx",{0},{HEX_0,HEX_0,HEX_9,HEX_8}, arch_sh4al_dsp_up}
+ setdmy ;!/* 0000000011001000 setdmy */{"setdmy",{0},{HEX_0,HEX_0,HEX_C,HEX_8}, arch_sh4al_dsp_up}
+ movx.w @r1,y1 ;!/* nnmm000100 movx.w @<REG_Axy>,<DSP_REG_XY> */ {"movx.w",{AXY_IND_N,DSP_REG_XY},{PPI,MOVX_NOPY,HEX_0,HEX_4}, arch_sh4al_dsp_up}
+ movx.w @r1+,y1 ;!/* nnmm001000 movx.w @<REG_Axy>+,<DSP_REG_XY> */{"movx.w",{AXY_INC_N,DSP_REG_XY},{PPI,MOVX_NOPY,HEX_0,HEX_8}, arch_sh4al_dsp_up}
+ movx.w @r1+r8,y1 ;!/* nnmm001100 movx.w @<REG_Axy>+r8,<DSP_REG_XY> */{"movx.w",{AXY_PMOD_N,DSP_REG_XY},{PPI,MOVX_NOPY,HEX_0,HEX_C}, arch_sh4al_dsp_up}
+ movx.w a0,@r1 ;!/* nnmm100100 movx.w <DSP_REG_AX>,@<REG_Axy> */ {"movx.w",{DSP_REG_AX,AXY_IND_N},{PPI,MOVX_NOPY,HEX_2,HEX_4}, arch_sh4al_dsp_up}
+ movx.w a0,@r1+ ;!/* nnmm101000 movx.w <DSP_REG_AX>,@<REG_Axy>+ */{"movx.w",{DSP_REG_AX,AXY_INC_N},{PPI,MOVX_NOPY,HEX_2,HEX_8}, arch_sh4al_dsp_up}
+ movx.w a0,@r1+r8 ;!/* nnmm101100 movx.w <DSP_REG_AX>,@<REG_Axy>+r8 */{"movx.w",{DSP_REG_AX,AXY_PMOD_N},{PPI,MOVX_NOPY,HEX_2,HEX_C}, arch_sh4al_dsp_up}
+ movx.l @r1,y1 ;!/* nnmm010100 movx.l @<REG_Axy>,<DSP_REG_XY> */ {"movx.l",{AXY_IND_N,DSP_REG_XY},{PPI,MOVX_NOPY,HEX_1,HEX_4}, arch_sh4al_dsp_up}
+ movx.l @r1+,y1 ;!/* nnmm011000 movx.l @<REG_Axy>+,<DSP_REG_XY> */{"movx.l",{AXY_INC_N,DSP_REG_XY},{PPI,MOVX_NOPY,HEX_1,HEX_8}, arch_sh4al_dsp_up}
+ movx.l @r1+r8,y1 ;!/* nnmm011100 movx.l @<REG_Axy>+r8,<DSP_REG_XY> */{"movx.l",{AXY_PMOD_N,DSP_REG_XY},{PPI,MOVX_NOPY,HEX_1,HEX_C}, arch_sh4al_dsp_up}
+ movx.l a0,@r1 ;!/* nnmm110100 movx.l <DSP_REG_AX>,@<REG_Axy> */ {"movx.l",{DSP_REG_AX,AXY_IND_N},{PPI,MOVX_NOPY,HEX_3,HEX_4}, arch_sh4al_dsp_up}
+ movx.l a0,@r1+ ;!/* nnmm111000 movx.l <DSP_REG_AX>,@<REG_Axy>+ */{"movx.l",{DSP_REG_AX,AXY_INC_N},{PPI,MOVX_NOPY,HEX_3,HEX_8}, arch_sh4al_dsp_up}
+ movx.l a0,@r1+r8 ;!/* nnmm111100 movx.l <DSP_REG_AX>,@<REG_Axy>+r8 */{"movx.l",{DSP_REG_AX,AXY_PMOD_N},{PPI,MOVX_NOPY,HEX_3,HEX_C}, arch_sh4al_dsp_up}
+ movy.w @r3,y1 ;!/* nnmm000001 movy.w @<REG_Ayx>,<DSP_REG_YX> */ {"movy.w",{AYX_IND_N,DSP_REG_YX},{PPI,MOVY_NOPX,HEX_0,HEX_1}, arch_sh4al_dsp_up}
+ movy.w @r3+,y1 ;!/* nnmm000010 movy.w @<REG_Ayx>+,<DSP_REG_YX> */{"movy.w",{AYX_INC_N,DSP_REG_YX},{PPI,MOVY_NOPX,HEX_0,HEX_2}, arch_sh4al_dsp_up}
+ movy.w @r3+r9,y1 ;!/* nnmm000011 movy.w @<REG_Ayx>+r9,<DSP_REG_YX> */{"movy.w",{AYX_PMOD_N,DSP_REG_YX},{PPI,MOVY_NOPX,HEX_0,HEX_3}, arch_sh4al_dsp_up}
+ movy.w a0,@r3 ;!/* nnmm010001 movy.w <DSP_REG_AY>,@<REG_Ayx> */ {"movy.w",{DSP_REG_AY,AYX_IND_N},{PPI,MOVY_NOPX,HEX_1,HEX_1}, arch_sh4al_dsp_up}
+ movy.w a0,@r3+ ;!/* nnmm010010 movy.w <DSP_REG_AY>,@<REG_Ayx>+ */{"movy.w",{DSP_REG_AY,AYX_INC_N},{PPI,MOVY_NOPX,HEX_1,HEX_2}, arch_sh4al_dsp_up}
+ movy.w a0,@r3+r9 ;!/* nnmm010011 movy.w <DSP_REG_AY>,@<REG_Ayx>+r9 */{"movy.w",{DSP_REG_AY,AYX_PMOD_N},{PPI,MOVY_NOPX,HEX_1,HEX_3}, arch_sh4al_dsp_up}
+ movy.l @r3,y1 ;!/* nnmm100001 movy.l @<REG_Ayx>,<DSP_REG_YX> */ {"movy.l",{AYX_IND_N,DSP_REG_YX},{PPI,MOVY_NOPX,HEX_2,HEX_1}, arch_sh4al_dsp_up}
+ movy.l @r3+,y1 ;!/* nnmm100010 movy.l @<REG_Ayx>+,<DSP_REG_YX> */{"movy.l",{AYX_INC_N,DSP_REG_YX},{PPI,MOVY_NOPX,HEX_2,HEX_2}, arch_sh4al_dsp_up}
+ movy.l @r3+r9,y1 ;!/* nnmm100011 movy.l @<REG_Ayx>+r9,<DSP_REG_YX> */{"movy.l",{AYX_PMOD_N,DSP_REG_YX},{PPI,MOVY_NOPX,HEX_2,HEX_3}, arch_sh4al_dsp_up}
+ movy.l a0,@r3 ;!/* nnmm110001 movy.l <DSP_REG_AY>,@<REG_Ayx> */ {"movy.l",{DSP_REG_AY,AYX_IND_N},{PPI,MOVY_NOPX,HEX_3,HEX_1}, arch_sh4al_dsp_up}
+ movy.l a0,@r3+ ;!/* nnmm110010 movy.l <DSP_REG_AY>,@<REG_Ayx>+ */{"movy.l",{DSP_REG_AY,AYX_INC_N},{PPI,MOVY_NOPX,HEX_3,HEX_2}, arch_sh4al_dsp_up}
+ movy.l a0,@r3+r9 ;!/* nnmm110011 movy.l <DSP_REG_AY>,@<REG_Ayx>+r9 */{"movy.l",{DSP_REG_AY,AYX_PMOD_N},{PPI,MOVY_NOPX,HEX_3,HEX_3}, arch_sh4al_dsp_up}
+ dct pabs x1,m0 ;!/* 1000100!xx01nnnn pabs <DSP_REG_X>,<DSP_REG_N> */ {"pabs", {DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_8,HEX_9,HEX_1}, arch_sh4al_dsp_up}
+ dct pabs y0,m0 ;!/* 1010100!01yynnnn pabs <DSP_REG_Y>,<DSP_REG_N> */ {"pabs", {DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_A,HEX_9,HEX_4}, arch_sh4al_dsp_up}
+ dct prnd x1,m0 ;!/* 1001100!xx01nnnn prnd <DSP_REG_X>,<DSP_REG_N> */ {"prnd", {DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_9,HEX_9,HEX_1}, arch_sh4al_dsp_up}
+ dct prnd y0,m0 ;!/* 1011100!01yynnnn prnd <DSP_REG_Y>,<DSP_REG_N> */ {"prnd", {DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_B,HEX_9,HEX_4}, arch_sh4al_dsp_up}
+ dct psub y0,x1,m0 ;!/* 10000101xxyynnnn psub <DSP_REG_Y>,<DSP_REG_X>,<DSP_REG_N> */ {"psub", {DSP_REG_Y,DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_8,HEX_5}, arch_sh4al_dsp_up}
+ dct pswap x1,m0 ;!/* 10011101xx01zzzz pswap <DSP_REG_X>,<DSP_REG_N> */ {"pswap", {DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_9,HEX_D,HEX_1}, arch_sh4al_dsp_up}
+ dct pswap y0,m0 ;!/* 1011110101yyzzzz pswap <DSP_REG_Y>,<DSP_REG_N> */ {"pswap", {DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_B,HEX_D,HEX_4}, arch_sh4al_dsp_up}
+
+! Instructions inherited from ancestors: sh sh-dsp sh2 sh2a-nofpu-or-sh3-nommu sh2a-nofpu-or-sh4-nommu-nofpu sh3 sh3-dsp sh3-nommu sh4-nofpu sh4-nommu-nofpu sh4a-nofpu
+ add #4,r4 ;!/* 0111nnnni8*1.... add #<imm>,<REG_N> */{"add",{A_IMM,A_REG_N},{HEX_7,REG_N,IMM0_8}, arch_sh_up}
+ add r5,r4 ;!/* 0011nnnnmmmm1100 add <REG_M>,<REG_N> */{"add",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_C}, arch_sh_up}
+ addc r5,r4 ;!/* 0011nnnnmmmm1110 addc <REG_M>,<REG_N>*/{"addc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_E}, arch_sh_up}
+ addv r5,r4 ;!/* 0011nnnnmmmm1111 addv <REG_M>,<REG_N>*/{"addv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_F}, arch_sh_up}
+ and #4,R0 ;!/* 11001001i8*1.... and #<imm>,R0 */{"and",{A_IMM,A_R0},{HEX_C,HEX_9,IMM0_8}, arch_sh_up}
+ and r5,r4 ;!/* 0010nnnnmmmm1001 and <REG_M>,<REG_N> */{"and",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_9}, arch_sh_up}
+ and.b #4,@(R0,GBR) ;!/* 11001101i8*1.... and.b #<imm>,@(R0,GBR)*/{"and.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_D,IMM0_8}, arch_sh_up}
+ bra .+8 ;!/* 1010i12......... bra <bdisp12> */{"bra",{A_BDISP12},{HEX_A,BRANCH_12}, arch_sh_up}
+ bsr .+8 ;!/* 1011i12......... bsr <bdisp12> */{"bsr",{A_BDISP12},{HEX_B,BRANCH_12}, arch_sh_up}
+ bt .+8 ;!/* 10001001i8p1.... bt <bdisp8> */{"bt",{A_BDISP8},{HEX_8,HEX_9,BRANCH_8}, arch_sh_up}
+ bf .+8 ;!/* 10001011i8p1.... bf <bdisp8> */{"bf",{A_BDISP8},{HEX_8,HEX_B,BRANCH_8}, arch_sh_up}
+ bt.s .+8 ;!/* 10001101i8p1.... bt.s <bdisp8> */{"bt.s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bt/s .+8 ;!/* 10001101i8p1.... bt/s <bdisp8> */{"bt/s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up}
+ bf.s .+8 ;!/* 10001111i8p1.... bf.s <bdisp8> */{"bf.s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ bf/s .+8 ;!/* 10001111i8p1.... bf/s <bdisp8> */{"bf/s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up}
+ clrmac ;!/* 0000000000101000 clrmac */{"clrmac",{0},{HEX_0,HEX_0,HEX_2,HEX_8}, arch_sh_up}
+ clrs ;!/* 0000000001001000 clrs */{"clrs",{0},{HEX_0,HEX_0,HEX_4,HEX_8}, arch_sh_up}
+ clrt ;!/* 0000000000001000 clrt */{"clrt",{0},{HEX_0,HEX_0,HEX_0,HEX_8}, arch_sh_up}
+ cmp/eq #4,R0 ;!/* 10001000i8*1.... cmp/eq #<imm>,R0 */{"cmp/eq",{A_IMM,A_R0},{HEX_8,HEX_8,IMM0_8}, arch_sh_up}
+ cmp/eq r5,r4 ;!/* 0011nnnnmmmm0000 cmp/eq <REG_M>,<REG_N>*/{"cmp/eq",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_0}, arch_sh_up}
+ cmp/ge r5,r4 ;!/* 0011nnnnmmmm0011 cmp/ge <REG_M>,<REG_N>*/{"cmp/ge",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_3}, arch_sh_up}
+ cmp/gt r5,r4 ;!/* 0011nnnnmmmm0111 cmp/gt <REG_M>,<REG_N>*/{"cmp/gt",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_7}, arch_sh_up}
+ cmp/hi r5,r4 ;!/* 0011nnnnmmmm0110 cmp/hi <REG_M>,<REG_N>*/{"cmp/hi",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_6}, arch_sh_up}
+ cmp/hs r5,r4 ;!/* 0011nnnnmmmm0010 cmp/hs <REG_M>,<REG_N>*/{"cmp/hs",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_2}, arch_sh_up}
+ cmp/pl r4 ;!/* 0100nnnn00010101 cmp/pl <REG_N> */{"cmp/pl",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_5}, arch_sh_up}
+ cmp/pz r4 ;!/* 0100nnnn00010001 cmp/pz <REG_N> */{"cmp/pz",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_1}, arch_sh_up}
+ cmp/str r5,r4 ;!/* 0010nnnnmmmm1100 cmp/str <REG_M>,<REG_N>*/{"cmp/str",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_C}, arch_sh_up}
+ div0s r5,r4 ;!/* 0010nnnnmmmm0111 div0s <REG_M>,<REG_N>*/{"div0s",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_7}, arch_sh_up}
+ div0u ;!/* 0000000000011001 div0u */{"div0u",{0},{HEX_0,HEX_0,HEX_1,HEX_9}, arch_sh_up}
+ div1 r5,r4 ;!/* 0011nnnnmmmm0100 div1 <REG_M>,<REG_N>*/{"div1",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_4}, arch_sh_up}
+ exts.b r5,r4 ;!/* 0110nnnnmmmm1110 exts.b <REG_M>,<REG_N>*/{"exts.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_E}, arch_sh_up}
+ exts.w r5,r4 ;!/* 0110nnnnmmmm1111 exts.w <REG_M>,<REG_N>*/{"exts.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_F}, arch_sh_up}
+ extu.b r5,r4 ;!/* 0110nnnnmmmm1100 extu.b <REG_M>,<REG_N>*/{"extu.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_C}, arch_sh_up}
+ extu.w r5,r4 ;!/* 0110nnnnmmmm1101 extu.w <REG_M>,<REG_N>*/{"extu.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_D}, arch_sh_up}
+ icbi @r4 ;!/* 0000nnnn11100011 icbi @<REG_N> */{"icbi",{A_IND_N},{HEX_0,REG_N,HEX_E,HEX_3}, arch_sh4a_nofpu_up}
+ jmp @r4 ;!/* 0100nnnn00101011 jmp @<REG_N> */{"jmp",{A_IND_N},{HEX_4,REG_N,HEX_2,HEX_B}, arch_sh_up}
+ jsr @r4 ;!/* 0100nnnn00001011 jsr @<REG_N> */{"jsr",{A_IND_N},{HEX_4,REG_N,HEX_0,HEX_B}, arch_sh_up}
+ ldc r4,SR ;!/* 0100nnnn00001110 ldc <REG_N>,SR */{"ldc",{A_REG_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_E}, arch_sh_up}
+ ldc r4,GBR ;!/* 0100nnnn00011110 ldc <REG_N>,GBR */{"ldc",{A_REG_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_E}, arch_sh_up}
+ ldc r4,SGR ;!/* 0100nnnn00111010 ldc <REG_N>,SGR */{"ldc",{A_REG_N,A_SGR},{HEX_4,REG_N,HEX_3,HEX_A}, arch_sh4_nommu_nofpu_up}
+ ldc r4,VBR ;!/* 0100nnnn00101110 ldc <REG_N>,VBR */{"ldc",{A_REG_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_E}, arch_sh_up}
+ ldc r4,MOD ;!/* 0100nnnn01011110 ldc <REG_N>,MOD */{"ldc",{A_REG_N,A_MOD},{HEX_4,REG_N,HEX_5,HEX_E}, arch_sh_dsp_up}
+ ldc r4,RE ;!/* 0100nnnn01111110 ldc <REG_N>,RE */{"ldc",{A_REG_N,A_RE},{HEX_4,REG_N,HEX_7,HEX_E}, arch_sh_dsp_up}
+ ldc r4,RS ;!/* 0100nnnn01101110 ldc <REG_N>,RS */{"ldc",{A_REG_N,A_RS},{HEX_4,REG_N,HEX_6,HEX_E}, arch_sh_dsp_up}
+ ldc r4,SSR ;!/* 0100nnnn00111110 ldc <REG_N>,SSR */{"ldc",{A_REG_N,A_SSR},{HEX_4,REG_N,HEX_3,HEX_E}, arch_sh3_nommu_up}
+ ldc r4,SPC ;!/* 0100nnnn01001110 ldc <REG_N>,SPC */{"ldc",{A_REG_N,A_SPC},{HEX_4,REG_N,HEX_4,HEX_E}, arch_sh3_nommu_up}
+ ldc r4,DBR ;!/* 0100nnnn11111010 ldc <REG_N>,DBR */{"ldc",{A_REG_N,A_DBR},{HEX_4,REG_N,HEX_F,HEX_A}, arch_sh4_nommu_nofpu_up}
+ ldc r4,r1_bank ;!/* 0100nnnn1xxx1110 ldc <REG_N>,Rn_BANK */{"ldc",{A_REG_N,A_REG_B},{HEX_4,REG_N,REG_B,HEX_E}, arch_sh3_nommu_up}
+ ldc.l @r4+,SR ;!/* 0100nnnn00000111 ldc.l @<REG_N>+,SR */{"ldc.l",{A_INC_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_7}, arch_sh_up}
+ ldc.l @r4+,GBR ;!/* 0100nnnn00010111 ldc.l @<REG_N>+,GBR */{"ldc.l",{A_INC_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_7}, arch_sh_up}
+ ldc.l @r4+,VBR ;!/* 0100nnnn00100111 ldc.l @<REG_N>+,VBR */{"ldc.l",{A_INC_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_7}, arch_sh_up}
+ ldc.l @r4+,SGR ;!/* 0100nnnn00110110 ldc.l @<REG_N>+,SGR */{"ldc.l",{A_INC_N,A_SGR},{HEX_4,REG_N,HEX_3,HEX_6}, arch_sh4_nommu_nofpu_up}
+ ldc.l @r4+,MOD ;!/* 0100nnnn01010111 ldc.l @<REG_N>+,MOD */{"ldc.l",{A_INC_N,A_MOD},{HEX_4,REG_N,HEX_5,HEX_7}, arch_sh_dsp_up}
+ ldc.l @r4+,RE ;!/* 0100nnnn01110111 ldc.l @<REG_N>+,RE */{"ldc.l",{A_INC_N,A_RE},{HEX_4,REG_N,HEX_7,HEX_7}, arch_sh_dsp_up}
+ ldc.l @r4+,RS ;!/* 0100nnnn01100111 ldc.l @<REG_N>+,RS */{"ldc.l",{A_INC_N,A_RS},{HEX_4,REG_N,HEX_6,HEX_7}, arch_sh_dsp_up}
+ ldc.l @r4+,SSR ;!/* 0100nnnn00110111 ldc.l @<REG_N>+,SSR */{"ldc.l",{A_INC_N,A_SSR},{HEX_4,REG_N,HEX_3,HEX_7}, arch_sh3_nommu_up}
+ ldc.l @r4+,SPC ;!/* 0100nnnn01000111 ldc.l @<REG_N>+,SPC */{"ldc.l",{A_INC_N,A_SPC},{HEX_4,REG_N,HEX_4,HEX_7}, arch_sh3_nommu_up}
+ ldc.l @r4+,DBR ;!/* 0100nnnn11110110 ldc.l @<REG_N>+,DBR */{"ldc.l",{A_INC_N,A_DBR},{HEX_4,REG_N,HEX_F,HEX_6}, arch_sh4_nommu_nofpu_up}
+ ldc.l @r4+,r1_bank ;!/* 0100nnnn1xxx0111 ldc.l @<REG_N>+,Rn_BANK */{"ldc.l",{A_INC_N,A_REG_B},{HEX_4,REG_N,REG_B,HEX_7}, arch_sh3_nommu_up}
+ ldre @(8,PC) ;!/* 10001110i8p2.... ldre @(<disp>,PC) */{"ldre",{A_DISP_PC},{HEX_8,HEX_E,PCRELIMM_8BY2}, arch_sh_dsp_up}
+ ldrs @(8,PC) ;!/* 10001100i8p2.... ldrs @(<disp>,PC) */{"ldrs",{A_DISP_PC},{HEX_8,HEX_C,PCRELIMM_8BY2}, arch_sh_dsp_up}
+ lds r4,MACH ;!/* 0100nnnn00001010 lds <REG_N>,MACH */{"lds",{A_REG_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ lds r4,MACL ;!/* 0100nnnn00011010 lds <REG_N>,MACL */{"lds",{A_REG_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ lds r4,PR ;!/* 0100nnnn00101010 lds <REG_N>,PR */{"lds",{A_REG_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ lds r4,DSR ;!/* 0100nnnn01101010 lds <REG_N>,DSR */{"lds",{A_REG_N,A_DSR},{HEX_4,REG_N,HEX_6,HEX_A}, arch_sh_dsp_up}
+ lds r4,A0 ;!/* 0100nnnn01111010 lds <REG_N>,A0 */{"lds",{A_REG_N,A_A0},{HEX_4,REG_N,HEX_7,HEX_A}, arch_sh_dsp_up}
+ lds r4,X0 ;!/* 0100nnnn10001010 lds <REG_N>,X0 */{"lds",{A_REG_N,A_X0},{HEX_4,REG_N,HEX_8,HEX_A}, arch_sh_dsp_up}
+ lds r4,X1 ;!/* 0100nnnn10011010 lds <REG_N>,X1 */{"lds",{A_REG_N,A_X1},{HEX_4,REG_N,HEX_9,HEX_A}, arch_sh_dsp_up}
+ lds r4,Y0 ;!/* 0100nnnn10101010 lds <REG_N>,Y0 */{"lds",{A_REG_N,A_Y0},{HEX_4,REG_N,HEX_A,HEX_A}, arch_sh_dsp_up}
+ lds r4,Y1 ;!/* 0100nnnn10111010 lds <REG_N>,Y1 */{"lds",{A_REG_N,A_Y1},{HEX_4,REG_N,HEX_B,HEX_A}, arch_sh_dsp_up}
+ lds.l @r4+,MACH ;!/* 0100nnnn00000110 lds.l @<REG_N>+,MACH*/{"lds.l",{A_INC_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_6}, arch_sh_up}
+ lds.l @r4+,MACL ;!/* 0100nnnn00010110 lds.l @<REG_N>+,MACL*/{"lds.l",{A_INC_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_6}, arch_sh_up}
+ lds.l @r4+,PR ;!/* 0100nnnn00100110 lds.l @<REG_N>+,PR */{"lds.l",{A_INC_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_6}, arch_sh_up}
+ lds.l @r4+,DSR ;!/* 0100nnnn01100110 lds.l @<REG_N>+,DSR */{"lds.l",{A_INC_N,A_DSR},{HEX_4,REG_N,HEX_6,HEX_6}, arch_sh_dsp_up}
+ lds.l @r4+,A0 ;!/* 0100nnnn01110110 lds.l @<REG_N>+,A0 */{"lds.l",{A_INC_N,A_A0},{HEX_4,REG_N,HEX_7,HEX_6}, arch_sh_dsp_up}
+ lds.l @r4+,X0 ;!/* 0100nnnn10000110 lds.l @<REG_N>+,X0 */{"lds.l",{A_INC_N,A_X0},{HEX_4,REG_N,HEX_8,HEX_6}, arch_sh_dsp_up}
+ lds.l @r4+,X1 ;!/* 0100nnnn10010110 lds.l @<REG_N>+,X1 */{"lds.l",{A_INC_N,A_X1},{HEX_4,REG_N,HEX_9,HEX_6}, arch_sh_dsp_up}
+ lds.l @r4+,Y0 ;!/* 0100nnnn10100110 lds.l @<REG_N>+,Y0 */{"lds.l",{A_INC_N,A_Y0},{HEX_4,REG_N,HEX_A,HEX_6}, arch_sh_dsp_up}
+ lds.l @r4+,Y1 ;!/* 0100nnnn10110110 lds.l @<REG_N>+,Y1 */{"lds.l",{A_INC_N,A_Y1},{HEX_4,REG_N,HEX_B,HEX_6}, arch_sh_dsp_up}
+ ldtlb ;!/* 0000000000111000 ldtlb */{"ldtlb",{0},{HEX_0,HEX_0,HEX_3,HEX_8}, arch_sh3_up}
+ mac.w @r5+,@r4+ ;!/* 0100nnnnmmmm1111 mac.w @<REG_M>+,@<REG_N>+*/{"mac.w",{A_INC_M,A_INC_N},{HEX_4,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mov #4,r4 ;!/* 1110nnnni8*1.... mov #<imm>,<REG_N> */{"mov",{A_IMM,A_REG_N},{HEX_E,REG_N,IMM0_8}, arch_sh_up}
+ mov r5,r4 ;!/* 0110nnnnmmmm0011 mov <REG_M>,<REG_N> */{"mov",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_3}, arch_sh_up}
+ mov.b r5,@(R0,r4) ;!/* 0000nnnnmmmm0100 mov.b <REG_M>,@(R0,<REG_N>)*/{"mov.b",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@-r4 ;!/* 0010nnnnmmmm0100 mov.b <REG_M>,@-<REG_N>*/{"mov.b",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b r5,@r4 ;!/* 0010nnnnmmmm0000 mov.b <REG_M>,@<REG_N>*/{"mov.b",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b @(8,r5),R0 ;!/* 10000100mmmmi4*1 mov.b @(<disp>,<REG_M>),R0*/{"mov.b",{A_DISP_REG_M,A_R0},{HEX_8,HEX_4,REG_M,IMM0_4}, arch_sh_up}
+ mov.b @(8,GBR),R0 ;!/* 11000100i8*1.... mov.b @(<disp>,GBR),R0*/{"mov.b",{A_DISP_GBR,A_R0},{HEX_C,HEX_4,IMM0_8}, arch_sh_up}
+ mov.b @(R0,r5),r4 ;!/* 0000nnnnmmmm1100 mov.b @(R0,<REG_M>),<REG_N>*/{"mov.b",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_C}, arch_sh_up}
+ mov.b @r5+,r4 ;!/* 0110nnnnmmmm0100 mov.b @<REG_M>+,<REG_N>*/{"mov.b",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_4}, arch_sh_up}
+ mov.b @r5,r4 ;!/* 0110nnnnmmmm0000 mov.b @<REG_M>,<REG_N>*/{"mov.b",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_0}, arch_sh_up}
+ mov.b R0,@(8,r5) ;!/* 10000000mmmmi4*1 mov.b R0,@(<disp>,<REG_M>)*/{"mov.b",{A_R0,A_DISP_REG_M},{HEX_8,HEX_0,REG_M,IMM1_4}, arch_sh_up}
+ mov.b R0,@(8,GBR) ;!/* 11000000i8*1.... mov.b R0,@(<disp>,GBR)*/{"mov.b",{A_R0,A_DISP_GBR},{HEX_C,HEX_0,IMM1_8}, arch_sh_up}
+ mov.l r5,@(8,r4) ;!/* 0001nnnnmmmmi4*4 mov.l <REG_M>,@(<disp>,<REG_N>)*/{"mov.l",{ A_REG_M,A_DISP_REG_N},{HEX_1,REG_N,REG_M,IMM1_4BY4}, arch_sh_up}
+ mov.l r5,@(R0,r4) ;!/* 0000nnnnmmmm0110 mov.l <REG_M>,@(R0,<REG_N>)*/{"mov.l",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@-r4 ;!/* 0010nnnnmmmm0110 mov.l <REG_M>,@-<REG_N>*/{"mov.l",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l r5,@r4 ;!/* 0010nnnnmmmm0010 mov.l <REG_M>,@<REG_N>*/{"mov.l",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l @(8,r5),r4 ;!/* 0101nnnnmmmmi4*4 mov.l @(<disp>,<REG_M>),<REG_N>*/{"mov.l",{A_DISP_REG_M,A_REG_N},{HEX_5,REG_N,REG_M,IMM0_4BY4}, arch_sh_up}
+ mov.l @(8,GBR),R0 ;!/* 11000110i8*4.... mov.l @(<disp>,GBR),R0*/{"mov.l",{A_DISP_GBR,A_R0},{HEX_C,HEX_6,IMM0_8BY4}, arch_sh_up}
+ .align 2
+ mov.l @(8,PC),r4 ;!/* 1101nnnni8p4.... mov.l @(<disp>,PC),<REG_N>*/{"mov.l",{A_DISP_PC,A_REG_N},{HEX_D,REG_N,PCRELIMM_8BY4}, arch_sh_up}
+ mov.l @(R0,r5),r4 ;!/* 0000nnnnmmmm1110 mov.l @(R0,<REG_M>),<REG_N>*/{"mov.l",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mov.l @r5+,r4 ;!/* 0110nnnnmmmm0110 mov.l @<REG_M>+,<REG_N>*/{"mov.l",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_6}, arch_sh_up}
+ mov.l @r5,r4 ;!/* 0110nnnnmmmm0010 mov.l @<REG_M>,<REG_N>*/{"mov.l",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_2}, arch_sh_up}
+ mov.l R0,@(8,GBR) ;!/* 11000010i8*4.... mov.l R0,@(<disp>,GBR)*/{"mov.l",{A_R0,A_DISP_GBR},{HEX_C,HEX_2,IMM1_8BY4}, arch_sh_up}
+ mov.w r5,@(R0,r4) ;!/* 0000nnnnmmmm0101 mov.w <REG_M>,@(R0,<REG_N>)*/{"mov.w",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@-r4 ;!/* 0010nnnnmmmm0101 mov.w <REG_M>,@-<REG_N>*/{"mov.w",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w r5,@r4 ;!/* 0010nnnnmmmm0001 mov.w <REG_M>,@<REG_N>*/{"mov.w",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w @(8,r5),R0 ;!/* 10000101mmmmi4*2 mov.w @(<disp>,<REG_M>),R0*/{"mov.w",{A_DISP_REG_M,A_R0},{HEX_8,HEX_5,REG_M,IMM0_4BY2}, arch_sh_up}
+ mov.w @(8,GBR),R0 ;!/* 11000101i8*2.... mov.w @(<disp>,GBR),R0*/{"mov.w",{A_DISP_GBR,A_R0},{HEX_C,HEX_5,IMM0_8BY2}, arch_sh_up}
+ mov.w @(8,PC),r4 ;!/* 1001nnnni8p2.... mov.w @(<disp>,PC),<REG_N>*/{"mov.w",{A_DISP_PC,A_REG_N},{HEX_9,REG_N,PCRELIMM_8BY2}, arch_sh_up}
+ mov.w @(R0,r5),r4 ;!/* 0000nnnnmmmm1101 mov.w @(R0,<REG_M>),<REG_N>*/{"mov.w",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_D}, arch_sh_up}
+ mov.w @r5+,r4 ;!/* 0110nnnnmmmm0101 mov.w @<REG_M>+,<REG_N>*/{"mov.w",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_5}, arch_sh_up}
+ mov.w @r5,r4 ;!/* 0110nnnnmmmm0001 mov.w @<REG_M>,<REG_N>*/{"mov.w",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_1}, arch_sh_up}
+ mov.w R0,@(8,r5) ;!/* 10000001mmmmi4*2 mov.w R0,@(<disp>,<REG_M>)*/{"mov.w",{A_R0,A_DISP_REG_M},{HEX_8,HEX_1,REG_M,IMM1_4BY2}, arch_sh_up}
+ mov.w R0,@(8,GBR) ;!/* 11000001i8*2.... mov.w R0,@(<disp>,GBR)*/{"mov.w",{A_R0,A_DISP_GBR},{HEX_C,HEX_1,IMM1_8BY2}, arch_sh_up}
+ .align 2
+ mova @(8,PC),R0 ;!/* 11000111i8p4.... mova @(<disp>,PC),R0*/{"mova",{A_DISP_PC,A_R0},{HEX_C,HEX_7,PCRELIMM_8BY4}, arch_sh_up}
+ movca.l R0,@r4 ;!/* 0000nnnn11000011 movca.l R0,@<REG_N> */{"movca.l",{A_R0,A_IND_N},{HEX_0,REG_N,HEX_C,HEX_3}, arch_sh4_nommu_nofpu_up}
+ movco.l r0,@r4 ;!/* 0000nnnn01110011 movco.l r0,@<REG_N> */{"movco.l",{A_R0,A_IND_N},{HEX_0,REG_N,HEX_7,HEX_3}, arch_sh4a_nofpu_up}
+ movli.l @r5,r0 ;!/* 0000mmmm01100011 movli.l @<REG_M>,r0 */{"movli.l",{A_IND_M,A_R0},{HEX_0,REG_M,HEX_6,HEX_3}, arch_sh4a_nofpu_up}
+ movt r4 ;!/* 0000nnnn00101001 movt <REG_N> */{"movt",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ movua.l @r5,r0 ;!/* 0100mmmm10101001 movua.l @<REG_M>,r0 */{"movua.l",{A_IND_M,A_R0},{HEX_4,REG_M,HEX_A,HEX_9}, arch_sh4a_nofpu_up}
+ movua.l @r5+,r0 ;!/* 0100mmmm11101001 movua.l @<REG_M>+,r0 */{"movua.l",{A_INC_M,A_R0},{HEX_4,REG_M,HEX_E,HEX_9}, arch_sh4a_nofpu_up}
+ muls.w r5,r4 ;!/* 0010nnnnmmmm1111 muls.w <REG_M>,<REG_N>*/{"muls.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ muls r5,r4 ;!/* 0010nnnnmmmm1111 muls <REG_M>,<REG_N>*/{"muls",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh_up}
+ mul.l r5,r4 ;!/* 0000nnnnmmmm0111 mul.l <REG_M>,<REG_N>*/{"mul.l",{ A_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_7}, arch_sh2_up}
+ mulu.w r5,r4 ;!/* 0010nnnnmmmm1110 mulu.w <REG_M>,<REG_N>*/{"mulu.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ mulu r5,r4 ;!/* 0010nnnnmmmm1110 mulu <REG_M>,<REG_N>*/{"mulu",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh_up}
+ neg r5,r4 ;!/* 0110nnnnmmmm1011 neg <REG_M>,<REG_N> */{"neg",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_B}, arch_sh_up}
+ negc r5,r4 ;!/* 0110nnnnmmmm1010 negc <REG_M>,<REG_N>*/{"negc",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_A}, arch_sh_up}
+ nop ;!/* 0000000000001001 nop */{"nop",{0},{HEX_0,HEX_0,HEX_0,HEX_9}, arch_sh_up}
+ not r5,r4 ;!/* 0110nnnnmmmm0111 not <REG_M>,<REG_N> */{"not",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_7}, arch_sh_up}
+ ocbi @r4 ;!/* 0000nnnn10010011 ocbi @<REG_N> */{"ocbi",{A_IND_N},{HEX_0,REG_N,HEX_9,HEX_3}, arch_sh4_nommu_nofpu_up}
+ ocbp @r4 ;!/* 0000nnnn10100011 ocbp @<REG_N> */{"ocbp",{A_IND_N},{HEX_0,REG_N,HEX_A,HEX_3}, arch_sh4_nommu_nofpu_up}
+ ocbwb @r4 ;!/* 0000nnnn10110011 ocbwb @<REG_N> */{"ocbwb",{A_IND_N},{HEX_0,REG_N,HEX_B,HEX_3}, arch_sh4_nommu_nofpu_up}
+ or #4,R0 ;!/* 11001011i8*1.... or #<imm>,R0 */{"or",{A_IMM,A_R0},{HEX_C,HEX_B,IMM0_8}, arch_sh_up}
+ or r5,r4 ;!/* 0010nnnnmmmm1011 or <REG_M>,<REG_N> */{"or",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_B}, arch_sh_up}
+ or.b #4,@(R0,GBR) ;!/* 11001111i8*1.... or.b #<imm>,@(R0,GBR)*/{"or.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_F,IMM0_8}, arch_sh_up}
+ pref @r4 ;!/* 0000nnnn10000011 pref @<REG_N> */{"pref",{A_IND_N},{HEX_0,REG_N,HEX_8,HEX_3}, arch_sh2a_nofpu_or_sh4_nommu_nofpu_up}
+ prefi @r4 ;!/* 0000nnnn11010011 prefi @<REG_N> */{"prefi",{A_IND_N},{HEX_0,REG_N,HEX_D,HEX_3}, arch_sh4a_nofpu_up}
+ rotcl r4 ;!/* 0100nnnn00100100 rotcl <REG_N> */{"rotcl",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_4}, arch_sh_up}
+ rotcr r4 ;!/* 0100nnnn00100101 rotcr <REG_N> */{"rotcr",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_5}, arch_sh_up}
+ rotl r4 ;!/* 0100nnnn00000100 rotl <REG_N> */{"rotl",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_4}, arch_sh_up}
+ rotr r4 ;!/* 0100nnnn00000101 rotr <REG_N> */{"rotr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_5}, arch_sh_up}
+ rte ;!/* 0000000000101011 rte */{"rte",{0},{HEX_0,HEX_0,HEX_2,HEX_B}, arch_sh_up}
+ rts ;!/* 0000000000001011 rts */{"rts",{0},{HEX_0,HEX_0,HEX_0,HEX_B}, arch_sh_up}
+ sets ;!/* 0000000001011000 sets */{"sets",{0},{HEX_0,HEX_0,HEX_5,HEX_8}, arch_sh_up}
+ sett ;!/* 0000000000011000 sett */{"sett",{0},{HEX_0,HEX_0,HEX_1,HEX_8}, arch_sh_up}
+ setrc r4 ;!/* 0100nnnn00010100 setrc <REG_N> */{"setrc",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_4}, arch_sh_dsp_up}
+ setrc #4 ;!/* 10000010i8*1.... setrc #<imm> */{"setrc",{A_IMM},{HEX_8,HEX_2,IMM0_8}, arch_sh_dsp_up}
+ repeat 10 20 r4 ;!/* repeat start end <REG_N> */{"repeat",{A_DISP_PC,A_DISP_PC,A_REG_N},{REPEAT,REG_N,HEX_1,HEX_4}, arch_sh_dsp_up}
+ repeat 10 20 #4 ;!/* repeat start end #<imm> */{"repeat",{A_DISP_PC,A_DISP_PC,A_IMM},{REPEAT,HEX_2,IMM0_8,HEX_8}, arch_sh_dsp_up}
+ shad r5,r4 ;!/* 0100nnnnmmmm1100 shad <REG_M>,<REG_N>*/{"shad",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_C}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shld r5,r4 ;!/* 0100nnnnmmmm1101 shld <REG_M>,<REG_N>*/{"shld",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_D}, arch_sh2a_nofpu_or_sh3_nommu_up}
+ shal r4 ;!/* 0100nnnn00100000 shal <REG_N> */{"shal",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_0}, arch_sh_up}
+ shar r4 ;!/* 0100nnnn00100001 shar <REG_N> */{"shar",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_1}, arch_sh_up}
+ shll r4 ;!/* 0100nnnn00000000 shll <REG_N> */{"shll",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_0}, arch_sh_up}
+ shll16 r4 ;!/* 0100nnnn00101000 shll16 <REG_N> */{"shll16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_8}, arch_sh_up}
+ shll2 r4 ;!/* 0100nnnn00001000 shll2 <REG_N> */{"shll2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_8}, arch_sh_up}
+ shll8 r4 ;!/* 0100nnnn00011000 shll8 <REG_N> */{"shll8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_8}, arch_sh_up}
+ shlr r4 ;!/* 0100nnnn00000001 shlr <REG_N> */{"shlr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_1}, arch_sh_up}
+ shlr16 r4 ;!/* 0100nnnn00101001 shlr16 <REG_N> */{"shlr16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_9}, arch_sh_up}
+ shlr2 r4 ;!/* 0100nnnn00001001 shlr2 <REG_N> */{"shlr2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_9}, arch_sh_up}
+ shlr8 r4 ;!/* 0100nnnn00011001 shlr8 <REG_N> */{"shlr8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_9}, arch_sh_up}
+ sleep ;!/* 0000000000011011 sleep */{"sleep",{0},{HEX_0,HEX_0,HEX_1,HEX_B}, arch_sh_up}
+ stc SR,r4 ;!/* 0000nnnn00000010 stc SR,<REG_N> */{"stc",{A_SR,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ stc GBR,r4 ;!/* 0000nnnn00010010 stc GBR,<REG_N> */{"stc",{A_GBR,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ stc VBR,r4 ;!/* 0000nnnn00100010 stc VBR,<REG_N> */{"stc",{A_VBR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ stc MOD,r4 ;!/* 0000nnnn01010010 stc MOD,<REG_N> */{"stc",{A_MOD,A_REG_N},{HEX_0,REG_N,HEX_5,HEX_2}, arch_sh_dsp_up}
+ stc RE,r4 ;!/* 0000nnnn01110010 stc RE,<REG_N> */{"stc",{A_RE,A_REG_N},{HEX_0,REG_N,HEX_7,HEX_2}, arch_sh_dsp_up}
+ stc RS,r4 ;!/* 0000nnnn01100010 stc RS,<REG_N> */{"stc",{A_RS,A_REG_N},{HEX_0,REG_N,HEX_6,HEX_2}, arch_sh_dsp_up}
+ stc SSR,r4 ;!/* 0000nnnn00110010 stc SSR,<REG_N> */{"stc",{A_SSR,A_REG_N},{HEX_0,REG_N,HEX_3,HEX_2}, arch_sh3_nommu_up}
+ stc SPC,r4 ;!/* 0000nnnn01000010 stc SPC,<REG_N> */{"stc",{A_SPC,A_REG_N},{HEX_0,REG_N,HEX_4,HEX_2}, arch_sh3_nommu_up}
+ stc SGR,r4 ;!/* 0000nnnn00111010 stc SGR,<REG_N> */{"stc",{A_SGR,A_REG_N},{HEX_0,REG_N,HEX_3,HEX_A}, arch_sh4_nommu_nofpu_up}
+ stc DBR,r4 ;!/* 0000nnnn11111010 stc DBR,<REG_N> */{"stc",{A_DBR,A_REG_N},{HEX_0,REG_N,HEX_F,HEX_A}, arch_sh4_nommu_nofpu_up}
+ stc r1_bank,r4 ;!/* 0000nnnn1xxx0010 stc Rn_BANK,<REG_N> */{"stc",{A_REG_B,A_REG_N},{HEX_0,REG_N,REG_B,HEX_2}, arch_sh3_nommu_up}
+ stc.l SR,@-r4 ;!/* 0100nnnn00000011 stc.l SR,@-<REG_N> */{"stc.l",{A_SR,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_3}, arch_sh_up}
+ stc.l VBR,@-r4 ;!/* 0100nnnn00100011 stc.l VBR,@-<REG_N> */{"stc.l",{A_VBR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_3}, arch_sh_up}
+ stc.l MOD,@-r4 ;!/* 0100nnnn01010011 stc.l MOD,@-<REG_N> */{"stc.l",{A_MOD,A_DEC_N},{HEX_4,REG_N,HEX_5,HEX_3}, arch_sh_dsp_up}
+ stc.l RE,@-r4 ;!/* 0100nnnn01110011 stc.l RE,@-<REG_N> */{"stc.l",{A_RE,A_DEC_N},{HEX_4,REG_N,HEX_7,HEX_3}, arch_sh_dsp_up}
+ stc.l RS,@-r4 ;!/* 0100nnnn01100011 stc.l RS,@-<REG_N> */{"stc.l",{A_RS,A_DEC_N},{HEX_4,REG_N,HEX_6,HEX_3}, arch_sh_dsp_up}
+ stc.l SSR,@-r4 ;!/* 0100nnnn00110011 stc.l SSR,@-<REG_N> */{"stc.l",{A_SSR,A_DEC_N},{HEX_4,REG_N,HEX_3,HEX_3}, arch_sh3_nommu_up}
+ stc.l SPC,@-r4 ;!/* 0100nnnn01000011 stc.l SPC,@-<REG_N> */{"stc.l",{A_SPC,A_DEC_N},{HEX_4,REG_N,HEX_4,HEX_3}, arch_sh3_nommu_up}
+ stc.l GBR,@-r4 ;!/* 0100nnnn00010011 stc.l GBR,@-<REG_N> */{"stc.l",{A_GBR,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_3}, arch_sh_up}
+ stc.l SGR,@-r4 ;!/* 0100nnnn00110010 stc.l SGR,@-<REG_N> */{"stc.l",{A_SGR,A_DEC_N},{HEX_4,REG_N,HEX_3,HEX_2}, arch_sh4_nommu_nofpu_up}
+ stc.l DBR,@-r4 ;!/* 0100nnnn11110010 stc.l DBR,@-<REG_N> */{"stc.l",{A_DBR,A_DEC_N},{HEX_4,REG_N,HEX_F,HEX_2}, arch_sh4_nommu_nofpu_up}
+ stc.l r1_bank,@-r4 ;!/* 0100nnnn1xxx0011 stc.l Rn_BANK,@-<REG_N> */{"stc.l",{A_REG_B,A_DEC_N},{HEX_4,REG_N,REG_B,HEX_3}, arch_sh3_nommu_up}
+ sts MACH,r4 ;!/* 0000nnnn00001010 sts MACH,<REG_N> */{"sts",{A_MACH,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_A}, arch_sh_up}
+ sts MACL,r4 ;!/* 0000nnnn00011010 sts MACL,<REG_N> */{"sts",{A_MACL,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_A}, arch_sh_up}
+ sts PR,r4 ;!/* 0000nnnn00101010 sts PR,<REG_N> */{"sts",{A_PR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_A}, arch_sh_up}
+ sts DSR,r4 ;!/* 0000nnnn01101010 sts DSR,<REG_N> */{"sts",{A_DSR,A_REG_N},{HEX_0,REG_N,HEX_6,HEX_A}, arch_sh_dsp_up}
+ sts A0,r4 ;!/* 0000nnnn01111010 sts A0,<REG_N> */{"sts",{A_A0,A_REG_N},{HEX_0,REG_N,HEX_7,HEX_A}, arch_sh_dsp_up}
+ sts X0,r4 ;!/* 0000nnnn10001010 sts X0,<REG_N> */{"sts",{A_X0,A_REG_N},{HEX_0,REG_N,HEX_8,HEX_A}, arch_sh_dsp_up}
+ sts X1,r4 ;!/* 0000nnnn10011010 sts X1,<REG_N> */{"sts",{A_X1,A_REG_N},{HEX_0,REG_N,HEX_9,HEX_A}, arch_sh_dsp_up}
+ sts Y0,r4 ;!/* 0000nnnn10101010 sts Y0,<REG_N> */{"sts",{A_Y0,A_REG_N},{HEX_0,REG_N,HEX_A,HEX_A}, arch_sh_dsp_up}
+ sts Y1,r4 ;!/* 0000nnnn10111010 sts Y1,<REG_N> */{"sts",{A_Y1,A_REG_N},{HEX_0,REG_N,HEX_B,HEX_A}, arch_sh_dsp_up}
+ sts.l MACH,@-r4 ;!/* 0100nnnn00000010 sts.l MACH,@-<REG_N>*/{"sts.l",{A_MACH,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_2}, arch_sh_up}
+ sts.l MACL,@-r4 ;!/* 0100nnnn00010010 sts.l MACL,@-<REG_N>*/{"sts.l",{A_MACL,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_2}, arch_sh_up}
+ sts.l PR,@-r4 ;!/* 0100nnnn00100010 sts.l PR,@-<REG_N> */{"sts.l",{A_PR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_2}, arch_sh_up}
+ sts.l DSR,@-r4 ;!/* 0100nnnn01100110 sts.l DSR,@-<REG_N> */{"sts.l",{A_DSR,A_DEC_N},{HEX_4,REG_N,HEX_6,HEX_2}, arch_sh_dsp_up}
+ sts.l A0,@-r4 ;!/* 0100nnnn01110110 sts.l A0,@-<REG_N> */{"sts.l",{A_A0,A_DEC_N},{HEX_4,REG_N,HEX_7,HEX_2}, arch_sh_dsp_up}
+ sts.l X0,@-r4 ;!/* 0100nnnn10000110 sts.l X0,@-<REG_N> */{"sts.l",{A_X0,A_DEC_N},{HEX_4,REG_N,HEX_8,HEX_2}, arch_sh_dsp_up}
+ sts.l X1,@-r4 ;!/* 0100nnnn10010110 sts.l X1,@-<REG_N> */{"sts.l",{A_X1,A_DEC_N},{HEX_4,REG_N,HEX_9,HEX_2}, arch_sh_dsp_up}
+ sts.l Y0,@-r4 ;!/* 0100nnnn10100110 sts.l Y0,@-<REG_N> */{"sts.l",{A_Y0,A_DEC_N},{HEX_4,REG_N,HEX_A,HEX_2}, arch_sh_dsp_up}
+ sts.l Y1,@-r4 ;!/* 0100nnnn10110110 sts.l Y1,@-<REG_N> */{"sts.l",{A_Y1,A_DEC_N},{HEX_4,REG_N,HEX_B,HEX_2}, arch_sh_dsp_up}
+ sub r5,r4 ;!/* 0011nnnnmmmm1000 sub <REG_M>,<REG_N> */{"sub",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_8}, arch_sh_up}
+ subc r5,r4 ;!/* 0011nnnnmmmm1010 subc <REG_M>,<REG_N>*/{"subc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_A}, arch_sh_up}
+ subv r5,r4 ;!/* 0011nnnnmmmm1011 subv <REG_M>,<REG_N>*/{"subv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_B}, arch_sh_up}
+ swap.b r5,r4 ;!/* 0110nnnnmmmm1000 swap.b <REG_M>,<REG_N>*/{"swap.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_8}, arch_sh_up}
+ swap.w r5,r4 ;!/* 0110nnnnmmmm1001 swap.w <REG_M>,<REG_N>*/{"swap.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_9}, arch_sh_up}
+ synco ;!/* 0000000010101011 synco */{"synco",{0},{HEX_0,HEX_0,HEX_A,HEX_B}, arch_sh4a_nofpu_up}
+ tas.b @r4 ;!/* 0100nnnn00011011 tas.b @<REG_N> */{"tas.b",{A_IND_N},{HEX_4,REG_N,HEX_1,HEX_B}, arch_sh_up}
+ trapa #4 ;!/* 11000011i8*1.... trapa #<imm> */{"trapa",{A_IMM},{HEX_C,HEX_3,IMM0_8}, arch_sh_up}
+ tst #4,R0 ;!/* 11001000i8*1.... tst #<imm>,R0 */{"tst",{A_IMM,A_R0},{HEX_C,HEX_8,IMM0_8}, arch_sh_up}
+ tst r5,r4 ;!/* 0010nnnnmmmm1000 tst <REG_M>,<REG_N> */{"tst",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_8}, arch_sh_up}
+ tst.b #4,@(R0,GBR) ;!/* 11001100i8*1.... tst.b #<imm>,@(R0,GBR)*/{"tst.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_C,IMM0_8}, arch_sh_up}
+ xor #4,R0 ;!/* 11001010i8*1.... xor #<imm>,R0 */{"xor",{A_IMM,A_R0},{HEX_C,HEX_A,IMM0_8}, arch_sh_up}
+ xor r5,r4 ;!/* 0010nnnnmmmm1010 xor <REG_M>,<REG_N> */{"xor",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_A}, arch_sh_up}
+ xor.b #4,@(R0,GBR) ;!/* 11001110i8*1.... xor.b #<imm>,@(R0,GBR)*/{"xor.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_E,IMM0_8}, arch_sh_up}
+ xtrct r5,r4 ;!/* 0010nnnnmmmm1101 xtrct <REG_M>,<REG_N>*/{"xtrct",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_D}, arch_sh_up}
+ dt r4 ;!/* 0100nnnn00010000 dt <REG_N> */{"dt",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_0}, arch_sh2_up}
+ dmuls.l r5,r4 ;!/* 0011nnnnmmmm1101 dmuls.l <REG_M>,<REG_N>*/{"dmuls.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_D}, arch_sh2_up}
+ dmulu.l r5,r4 ;!/* 0011nnnnmmmm0101 dmulu.l <REG_M>,<REG_N>*/{"dmulu.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_5}, arch_sh2_up}
+ mac.l @r5+,@r4+ ;!/* 0000nnnnmmmm1111 mac.l @<REG_M>+,@<REG_N>+*/{"mac.l",{A_INC_M,A_INC_N},{HEX_0,REG_N,REG_M,HEX_F}, arch_sh2_up}
+ braf r4 ;!/* 0000nnnn00100011 braf <REG_N> */{"braf",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_3}, arch_sh2_up}
+ bsrf r4 ;!/* 0000nnnn00000011 bsrf <REG_N> */{"bsrf",{A_REG_N},{HEX_0,REG_N,HEX_0,HEX_3}, arch_sh2_up}
+ movs.w @-r4,a1 ;!/* 111101nnmmmm0000 movs.w @-<REG_N>,<DSP_REG_M> */ {"movs.w",{A_DEC_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_0}, arch_sh_dsp_up}
+ movs.w @r4,a1 ;!/* 111101nnmmmm0001 movs.w @<REG_N>,<DSP_REG_M> */ {"movs.w",{A_IND_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_4}, arch_sh_dsp_up}
+ movs.w @r4+,a1 ;!/* 111101nnmmmm0010 movs.w @<REG_N>+,<DSP_REG_M> */ {"movs.w",{A_INC_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_8}, arch_sh_dsp_up}
+ movs.w @r4+r8,a1 ;!/* 111101nnmmmm0011 movs.w @<REG_N>+r8,<DSP_REG_M> */ {"movs.w",{AS_PMOD_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_C}, arch_sh_dsp_up}
+ movs.w a1,@-r4 ;!/* 111101nnmmmm0100 movs.w <DSP_REG_M>,@-<REG_N> */ {"movs.w",{DSP_REG_M,A_DEC_N},{HEX_F,SDT_REG_N,REG_M,HEX_1}, arch_sh_dsp_up}
+ movs.w a1,@r4 ;!/* 111101nnmmmm0101 movs.w <DSP_REG_M>,@<REG_N> */ {"movs.w",{DSP_REG_M,A_IND_N},{HEX_F,SDT_REG_N,REG_M,HEX_5}, arch_sh_dsp_up}
+ movs.w a1,@r4+ ;!/* 111101nnmmmm0110 movs.w <DSP_REG_M>,@<REG_N>+ */ {"movs.w",{DSP_REG_M,A_INC_N},{HEX_F,SDT_REG_N,REG_M,HEX_9}, arch_sh_dsp_up}
+ movs.w a1,@r4+r8 ;!/* 111101nnmmmm0111 movs.w <DSP_REG_M>,@<REG_N>+r8 */ {"movs.w",{DSP_REG_M,AS_PMOD_N},{HEX_F,SDT_REG_N,REG_M,HEX_D}, arch_sh_dsp_up}
+ movs.l @-r4,a1 ;!/* 111101nnmmmm1000 movs.l @-<REG_N>,<DSP_REG_M> */ {"movs.l",{A_DEC_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_2}, arch_sh_dsp_up}
+ movs.l @r4,a1 ;!/* 111101nnmmmm1001 movs.l @<REG_N>,<DSP_REG_M> */ {"movs.l",{A_IND_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_6}, arch_sh_dsp_up}
+ movs.l @r4+,a1 ;!/* 111101nnmmmm1010 movs.l @<REG_N>+,<DSP_REG_M> */ {"movs.l",{A_INC_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_A}, arch_sh_dsp_up}
+ movs.l @r4+r8,a1 ;!/* 111101nnmmmm1011 movs.l @<REG_N>+r8,<DSP_REG_M> */ {"movs.l",{AS_PMOD_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_E}, arch_sh_dsp_up}
+ movs.l a1,@-r4 ;!/* 111101nnmmmm1100 movs.l <DSP_REG_M>,@-<REG_N> */ {"movs.l",{DSP_REG_M,A_DEC_N},{HEX_F,SDT_REG_N,REG_M,HEX_3}, arch_sh_dsp_up}
+ movs.l a1,@r4 ;!/* 111101nnmmmm1101 movs.l <DSP_REG_M>,@<REG_N> */ {"movs.l",{DSP_REG_M,A_IND_N},{HEX_F,SDT_REG_N,REG_M,HEX_7}, arch_sh_dsp_up}
+ movs.l a1,@r4+ ;!/* 111101nnmmmm1110 movs.l <DSP_REG_M>,@<REG_N>+ */ {"movs.l",{DSP_REG_M,A_INC_N},{HEX_F,SDT_REG_N,REG_M,HEX_B}, arch_sh_dsp_up}
+ movs.l a1,@r4+r8 ;!/* 111101nnmmmm1111 movs.l <DSP_REG_M>,@<REG_N>+r8 */ {"movs.l",{DSP_REG_M,AS_PMOD_N},{HEX_F,SDT_REG_N,REG_M,HEX_F}, arch_sh_dsp_up}
+ nopx ;!/* 0*0*0*00** nopx */ {"nopx",{0},{PPI,NOPX}, arch_sh_dsp_up}
+ nopy ;!/* *0*0*0**00 nopy */ {"nopy",{0},{PPI,NOPY}, arch_sh_dsp_up}
+ movx.w @r4,x1 ;!/* n*m*0*01** movx.w @<REG_N>,<DSP_REG_X> */ {"movx.w",{AX_IND_N,DSP_REG_X},{PPI,MOVX,HEX_1}, arch_sh_dsp_up}
+ movx.w @r4+,x1 ;!/* n*m*0*10** movx.w @<REG_N>+,<DSP_REG_X> */ {"movx.w",{AX_INC_N,DSP_REG_X},{PPI,MOVX,HEX_2}, arch_sh_dsp_up}
+ movx.w @r4+r8,x1 ;!/* n*m*0*11** movx.w @<REG_N>+r8,<DSP_REG_X> */ {"movx.w",{AX_PMOD_N,DSP_REG_X},{PPI,MOVX,HEX_3}, arch_sh_dsp_up}
+ movx.w a1,@r4 ;!/* n*m*1*01** movx.w <DSP_REG_M>,@<REG_N> */ {"movx.w",{DSP_REG_A_M,AX_IND_N},{PPI,MOVX,HEX_9}, arch_sh_dsp_up}
+ movx.w a1,@r4+ ;!/* n*m*1*10** movx.w <DSP_REG_M>,@<REG_N>+ */ {"movx.w",{DSP_REG_A_M,AX_INC_N},{PPI,MOVX,HEX_A}, arch_sh_dsp_up}
+ movx.w a1,@r4+r8 ;!/* n*m*1*11** movx.w <DSP_REG_M>,@<REG_N>+r8 */ {"movx.w",{DSP_REG_A_M,AX_PMOD_N},{PPI,MOVX,HEX_B}, arch_sh_dsp_up}
+ movy.w @r6,y0 ;!/* *n*m*0**01 movy.w @<REG_N>,<DSP_REG_Y> */ {"movy.w",{AY_IND_N,DSP_REG_Y},{PPI,MOVY,HEX_1}, arch_sh_dsp_up}
+ movy.w @r6+,y0 ;!/* *n*m*0**10 movy.w @<REG_N>+,<DSP_REG_Y> */ {"movy.w",{AY_INC_N,DSP_REG_Y},{PPI,MOVY,HEX_2}, arch_sh_dsp_up}
+ movy.w @r6+r9,y0 ;!/* *n*m*0**11 movy.w @<REG_N>+r9,<DSP_REG_Y> */ {"movy.w",{AY_PMOD_N,DSP_REG_Y},{PPI,MOVY,HEX_3}, arch_sh_dsp_up}
+ movy.w a1,@r6 ;!/* *n*m*1**01 movy.w <DSP_REG_M>,@<REG_N> */ {"movy.w",{DSP_REG_A_M,AY_IND_N},{PPI,MOVY,HEX_9}, arch_sh_dsp_up}
+ movy.w a1,@r6+ ;!/* *n*m*1**10 movy.w <DSP_REG_M>,@<REG_N>+ */ {"movy.w",{DSP_REG_A_M,AY_INC_N},{PPI,MOVY,HEX_A}, arch_sh_dsp_up}
+ movy.w a1,@r6+r9 ;!/* *n*m*1**11 movy.w <DSP_REG_M>,@<REG_N>+r9 */ {"movy.w",{DSP_REG_A_M,AY_PMOD_N},{PPI,MOVY,HEX_B}, arch_sh_dsp_up}
+ pmuls x0,y0,m0 ;!/* 01aaeeffxxyyggnn pmuls Se,Sf,Dg */ {"pmuls",{DSP_REG_E,DSP_REG_F,DSP_REG_G},{PPI,PMUL}, arch_sh_dsp_up}
+ psubc x1,y0,m0 ;!/* 10100000xxyynnnn psubc <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"psubc",{DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPI3,HEX_A,HEX_0}, arch_sh_dsp_up}
+ paddc x1,y0,m0 ;!/* 10110000xxyynnnn paddc <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"paddc",{DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPI3,HEX_B,HEX_0}, arch_sh_dsp_up}
+ pcmp x1,y0 ;!/* 10000100xxyynnnn pcmp <DSP_REG_X>,<DSP_REG_Y> */ {"pcmp", {DSP_REG_X,DSP_REG_Y},{PPI,PPI3,HEX_8,HEX_4}, arch_sh_dsp_up}
+ pwsb x1,y0,m0 ;!/* 10100100xxyynnnn pwsb <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"pwsb", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPI3,HEX_A,HEX_4}, arch_sh_dsp_up}
+ pwad x1,y0,m0 ;!/* 10110100xxyynnnn pwad <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"pwad", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPI3,HEX_B,HEX_4}, arch_sh_dsp_up}
+ pabs x1,m0 ;!/* 10001000xxyynnnn pabs <DSP_REG_X>,<DSP_REG_N> */ {"pabs", {DSP_REG_X,DSP_REG_N},{PPI,PPI3NC,HEX_8,HEX_8}, arch_sh_dsp_up}
+ pabs y0,m0 ;!/* 10101000xxyynnnn pabs <DSP_REG_Y>,<DSP_REG_N> */ {"pabs", {DSP_REG_Y,DSP_REG_N},{PPI,PPI3NC,HEX_A,HEX_8}, arch_sh_dsp_up}
+ prnd x1,m0 ;!/* 10011000xxyynnnn prnd <DSP_REG_X>,<DSP_REG_N> */ {"prnd", {DSP_REG_X,DSP_REG_N},{PPI,PPI3NC,HEX_9,HEX_8}, arch_sh_dsp_up}
+ prnd y0,m0 ;!/* 10111000xxyynnnn prnd <DSP_REG_Y>,<DSP_REG_N> */ {"prnd", {DSP_REG_Y,DSP_REG_N},{PPI,PPI3NC,HEX_B,HEX_8}, arch_sh_dsp_up}
+ dct pshl x1,y0,m0 ;!/* 10000001xxyynnnn pshl <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"pshl", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_8,HEX_1}, arch_sh_dsp_up}
+ pshl #4,m0 ;!/* 00000iiiiiiinnnn pshl #<imm>,<DSP_REG_N> */ {"pshl",{A_IMM,DSP_REG_N},{PPI,PSH,HEX_0}, arch_sh_dsp_up}
+ dct psha x1,y0,m0 ;!/* 10010001xxyynnnn psha <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"psha", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_9,HEX_1}, arch_sh_dsp_up}
+ psha #4,m0 ;!/* 00010iiiiiiinnnn psha #<imm>,<DSP_REG_N> */ {"psha",{A_IMM,DSP_REG_N},{PPI,PSH,HEX_1}, arch_sh_dsp_up}
+ dct psub x1,y0,m0 ;!/* 10100001xxyynnnn psub <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"psub", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_A,HEX_1}, arch_sh_dsp_up}
+ dct padd x1,y0,m0 ;!/* 10110001xxyynnnn padd <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"padd", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_B,HEX_1}, arch_sh_dsp_up}
+ dct pand x1,y0,m0 ;!/* 10010101xxyynnnn pand <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"pand", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_9,HEX_5}, arch_sh_dsp_up}
+ dct pxor x1,y0,m0 ;!/* 10100101xxyynnnn pxor <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"pxor", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_A,HEX_5}, arch_sh_dsp_up}
+ dct por x1,y0,m0 ;!/* 10110101xxyynnnn por <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */ {"por", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_B,HEX_5}, arch_sh_dsp_up}
+ dct pdec x1,m0 ;!/* 10001001xxyynnnn pdec <DSP_REG_X>,<DSP_REG_N> */ {"pdec", {DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_8,HEX_9}, arch_sh_dsp_up}
+ dct pdec y0,m0 ;!/* 10101001xxyynnnn pdec <DSP_REG_Y>,<DSP_REG_N> */ {"pdec", {DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_A,HEX_9}, arch_sh_dsp_up}
+ dct pinc x1,m0 ;!/* 10011001xx00nnnn pinc <DSP_REG_X>,<DSP_REG_N> */ {"pinc", {DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_9,HEX_9,HEX_XX00}, arch_sh_dsp_up}
+ dct pinc y0,m0 ;!/* 1011100100yynnnn pinc <DSP_REG_Y>,<DSP_REG_N> */ {"pinc", {DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_B,HEX_9,HEX_00YY}, arch_sh_dsp_up}
+ dct pclr m0 ;!/* 10001101xxyynnnn pclr <DSP_REG_N> */ {"pclr", {DSP_REG_N},{PPI,PPIC,HEX_8,HEX_D}, arch_sh_dsp_up}
+ dct pdmsb x1,m0 ;!/* 10011101xx00nnnn pdmsb <DSP_REG_X>,<DSP_REG_N> */ {"pdmsb", {DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_9,HEX_D,HEX_XX00}, arch_sh_dsp_up}
+ dct pdmsb y0,m0 ;!/* 1011110100yynnnn pdmsb <DSP_REG_Y>,<DSP_REG_N> */ {"pdmsb", {DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_B,HEX_D,HEX_00YY}, arch_sh_dsp_up}
+ dct pneg x1,m0 ;!/* 11001001xxyynnnn pneg <DSP_REG_X>,<DSP_REG_N> */ {"pneg", {DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_C,HEX_9}, arch_sh_dsp_up}
+ dct pneg y0,m0 ;!/* 11101001xxyynnnn pneg <DSP_REG_Y>,<DSP_REG_N> */ {"pneg", {DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_E,HEX_9}, arch_sh_dsp_up}
+ dct pcopy x1,m0 ;!/* 11011001xxyynnnn pcopy <DSP_REG_X>,<DSP_REG_N> */ {"pcopy", {DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_D,HEX_9}, arch_sh_dsp_up}
+ dct pcopy y0,m0 ;!/* 11111001xxyynnnn pcopy <DSP_REG_Y>,<DSP_REG_N> */ {"pcopy", {DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_F,HEX_9}, arch_sh_dsp_up}
+ dct psts MACH,m0 ;!/* 11001101xxyynnnn psts MACH,<DSP_REG_N> */ {"psts", {A_MACH,DSP_REG_N},{PPI,PPIC,HEX_C,HEX_D}, arch_sh_dsp_up}
+ dct psts MACL,m0 ;!/* 11011101xxyynnnn psts MACL,<DSP_REG_N> */ {"psts", {A_MACL,DSP_REG_N},{PPI,PPIC,HEX_D,HEX_D}, arch_sh_dsp_up}
+ dct plds m0,MACH ;!/* 11101101xxyynnnn plds <DSP_REG_N>,MACH */ {"plds", {DSP_REG_N,A_MACH},{PPI,PPIC,HEX_E,HEX_D}, arch_sh_dsp_up}
+ dct plds m0,MACL ;!/* 11111101xxyynnnn plds <DSP_REG_N>,MACL */ {"plds", {DSP_REG_N,A_MACL},{PPI,PPIC,HEX_F,HEX_D}, arch_sh_dsp_up}
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-funcdesc-shared.d b/binutils-2.21/ld/testsuite/ld-sh/fdpic-funcdesc-shared.d
new file mode 100644
index 0000000..899c5ae
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-funcdesc-shared.d
@@ -0,0 +1,32 @@
+#source: fdpic-funcdesc-shared.s
+#as: --isa=sh2a -big --fdpic
+#ld: -EB -mshelf_fd -shared
+#objdump: -dsR -j.text -j.data -j.got
+#target: sh*-*-uclinux*
+
+.*:[ \t]+file format elf32-shbig-fdpic
+
+Contents of section \.text:
+ [0-9a-f]+ 0009[ \t]+.*
+Contents of section \.data:
+ [0-9a-f]+ 00000000[ \t]+.*
+Contents of section \.got:
+ [0-9a-f]+ 00000000 00000000 00000000 00000000[ \t]+.*
+ [0-9a-f]+ 00000000[ \t]+.*
+
+Disassembly of section \.text:
+
+[0-9a-f]+ <foo>:
+ [0-9a-f]+:[ \t]+00 09[ \t]+nop[ \t]+
+
+Disassembly of section \.data:
+
+[0-9a-f]+ <bar>:
+[ \t]+[0-9a-f]+:[ \t]+00 00 00 00[ \t]+\.\.\.\.
+[ \t]+[0-9a-f]+: R_SH_DIR32[ \t]+\.got
+
+Disassembly of section \.got:
+
+[0-9a-f]+ <\.got>:
+[ \t]+\.\.\.
+[ \t]+[0-9a-f]+: R_SH_FUNCDESC_VALUE[ \t]+\.text
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-funcdesc-shared.s b/binutils-2.21/ld/testsuite/ld-sh/fdpic-funcdesc-shared.s
new file mode 100644
index 0000000..87d600d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-funcdesc-shared.s
@@ -0,0 +1,10 @@
+ .data
+ .globl bar
+ .type bar,@object
+ .size bar,4
+bar:
+ .long foo@FUNCDESC
+ .text
+ .type foo,@function
+foo:
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-funcdesc-static.d b/binutils-2.21/ld/testsuite/ld-sh/fdpic-funcdesc-static.d
new file mode 100644
index 0000000..cb09b90
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-funcdesc-static.d
@@ -0,0 +1,25 @@
+#source: fdpic-funcdesc-static.s
+#as: --isa=sh2a -big --fdpic
+#ld: -EB -mshelf_fd
+#objdump: -ds
+#target: sh*-*-uclinux*
+
+.*:[ \t]+file format elf32-shbig-fdpic
+
+Contents of section \.text:
+ 400094 00090009[ \t]+.*
+Contents of section \.rofixup:
+ 400098 004100ac 004100b0 004100a8 004100b4[ \t]+.*
+Contents of section \.data:
+ 4100a8 004100ac[ \t]+.*
+Contents of section \.got:
+ 4100ac 00400094 004100b4 00000000 00000000[ \t]+.*
+ 4100bc 00000000[ \t]+.*
+
+Disassembly of section \.text:
+
+00400094 <foo>:
+[ \t]+400094:[ \t]+00 09[ \t]+nop[ \t]+
+
+00400096 <_start>:
+[ \t]+400096:[ \t]+00 09[ \t]+nop[ \t]+
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-funcdesc-static.s b/binutils-2.21/ld/testsuite/ld-sh/fdpic-funcdesc-static.s
new file mode 100644
index 0000000..f59e0d9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-funcdesc-static.s
@@ -0,0 +1,14 @@
+ .data
+ .globl bar
+ .type bar,@object
+ .size bar,4
+bar:
+ .long foo@FUNCDESC
+ .text
+ .type foo,@function
+foo:
+ nop
+ .globl _start
+ .type _start,@function
+_start:
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesc-shared.d b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesc-shared.d
new file mode 100644
index 0000000..c86b424
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesc-shared.d
@@ -0,0 +1,25 @@
+#source: fdpic-gotfuncdesc-shared.s
+#as: --isa=sh2a -big --fdpic
+#ld: -EB -mshelf_fd -shared
+#objdump: -dsR -j.text -j.got
+#target: sh*-*-uclinux*
+
+.*:[ \t]+file format elf32-shbig-fdpic
+
+Contents of section \.text:
+ [0-9a-f]+ d00001ce 0000000c[ \t]+.*
+Contents of section \.got:
+ [0-9a-f]+ 00000000 00000000 00000000 00000000[ \t]+.*
+
+Disassembly of section \.text:
+
+[0-9a-f]+ <f>:
+ [0-9a-f]+:[ \t]+d0 00[ \t]+mov\.l[ \t]+[0-9a-f]+ <f\+0x4>,r0[ \t]+! c
+ [0-9a-f]+:[ \t]+01 ce[ \t]+mov\.l[ \t]+@\(r0,r12\),r1
+ [0-9a-f]+:[ \t]+00 00 00 0c[ \t]+movi20[ \t]+#12,r0
+
+Disassembly of section \.got:
+
+[0-9a-f]+ <\.got>:
+[ \t]+\.\.\.
+[ \t]+[0-9a-f]+: R_SH_FUNCDESC[ \t]+foo
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesc-shared.s b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesc-shared.s
new file mode 100644
index 0000000..d75a061
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesc-shared.s
@@ -0,0 +1,9 @@
+ .text
+ .globl f
+ .type f,@function
+f:
+ mov.l .L1, r0
+ mov.l @(r0,r12), r1
+ .align 2
+.L1:
+ .long foo@GOTFUNCDESC
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesc-static.d b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesc-static.d
new file mode 100644
index 0000000..3da8c40
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesc-static.d
@@ -0,0 +1,26 @@
+#source: fdpic-gotfuncdesc-static.s
+#as: --isa=sh2a -big --fdpic
+#ld: -EB -mshelf_fd
+#objdump: -ds
+#target: sh*-*-uclinux*
+
+.*:[ \t]+file format elf32-shbig-fdpic
+
+Contents of section \.text:
+ 400094 d00001ce 0000000c 00090009[ \t]+.*
+Contents of section \.rofixup:
+ 4000a0 004100b0 004100b4 004100c4 004100b8[ \t]+.*
+Contents of section \.got:
+ 4100b0 0040009c 004100b8 00000000 00000000[ \t]+.*
+ 4100c0 00000000 004100b0[ \t]+.*
+
+Disassembly of section \.text:
+
+00400094 <_start>:
+[ \t]+400094:[ \t]+d0 00[ \t]+mov\.l[ \t]+400098 <_start\+0x4>,r0[ \t]+! c
+[ \t]+400096:[ \t]+01 ce[ \t]+mov\.l[ \t]+@\(r0,r12\),r1
+[ \t]+400098:[ \t]+00 00 00 0c[ \t]+movi20[ \t]+#12,r0
+
+0040009c <foo>:
+[ \t]+40009c:[ \t]+00 09[ \t]+nop[ \t]+
+[ \t]+40009e:[ \t]+00 09[ \t]+nop[ \t]+
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesc-static.s b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesc-static.s
new file mode 100644
index 0000000..fc403b7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesc-static.s
@@ -0,0 +1,12 @@
+ .text
+ .globl _start
+ .type _start,@function
+_start:
+ mov.l .L1, r0
+ mov.l @(r0,r12), r1
+ .align 2
+.L1:
+ .long foo@GOTFUNCDESC
+ .type foo,@function
+foo:
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesci20-shared.d b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesci20-shared.d
new file mode 100644
index 0000000..39eb610
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesci20-shared.d
@@ -0,0 +1,24 @@
+#source: fdpic-gotfuncdesci20-shared.s
+#as: --isa=sh2a -big --fdpic
+#ld: -EB -mshelf_fd -shared
+#objdump: -dsR -j.text -j.got
+#target: sh*-*-uclinux*
+
+.*:[ \t]+file format elf32-shbig-fdpic
+
+Contents of section \.text:
+ [0-9a-f]+ 0000000c 01ce[ \t]+.*
+Contents of section \.got:
+ [0-9a-f]+ 00000000 00000000 00000000 00000000[ \t]+.*
+
+Disassembly of section \.text:
+
+[0-9a-f]+ <f>:
+ [0-9a-f]+:[ \t]+00 00 00 0c[ \t]+movi20[ \t]+#12,r0
+ [0-9a-f]+:[ \t]+01 ce[ \t]+mov\.l[ \t]+@\(r0,r12\),r1
+
+Disassembly of section \.got:
+
+[0-9a-f]+ <\.got>:
+[ \t]+\.\.\.
+[ \t]+[0-9a-f]+: R_SH_FUNCDESC[ \t]+foo
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesci20-shared.s b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesci20-shared.s
new file mode 100644
index 0000000..736d30d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesci20-shared.s
@@ -0,0 +1,6 @@
+ .text
+ .globl f
+ .type f,@function
+f:
+ movi20 #foo@GOTFUNCDESC, r0
+ mov.l @(r0,r12), r1
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesci20-static.d b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesci20-static.d
new file mode 100644
index 0000000..246e8f3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesci20-static.d
@@ -0,0 +1,24 @@
+#source: fdpic-gotfuncdesci20-static.s
+#as: --isa=sh2a -big --fdpic
+#ld: -EB -mshelf_fd
+#objdump: -ds
+#target: sh*-*-uclinux*
+
+.*:[ \t]+file format elf32-shbig-fdpic
+
+Contents of section \.text:
+ 400094 0000000c 01ce0009[ \t]+.*
+Contents of section \.rofixup:
+ 40009c 004100ac 004100b0 004100c0 004100b4[ \t]+.*
+Contents of section \.got:
+ 4100ac 0040009a 004100b4 00000000 00000000[ \t]+.*
+ 4100bc 00000000 004100ac[ \t]+.*
+
+Disassembly of section \.text:
+
+00400094 <_start>:
+[ \t]+400094:[ \t]+00 00 00 0c[ \t]+movi20[ \t]+#12,r0
+[ \t]+400098:[ \t]+01 ce[ \t]+mov\.l[ \t]+@\(r0,r12\),r1
+
+0040009a <foo>:
+[ \t]+40009a:[ \t]+00 09[ \t]+nop[ \t]+
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesci20-static.s b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesci20-static.s
new file mode 100644
index 0000000..76930f5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotfuncdesci20-static.s
@@ -0,0 +1,9 @@
+ .text
+ .globl _start
+ .type _start,@function
+_start:
+ movi20 #foo@GOTFUNCDESC, r0
+ mov.l @(r0,r12), r1
+ .type foo,@function
+foo:
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-goti20-shared.d b/binutils-2.21/ld/testsuite/ld-sh/fdpic-goti20-shared.d
new file mode 100644
index 0000000..0955770
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-goti20-shared.d
@@ -0,0 +1,24 @@
+#source: fdpic-goti20-shared.s
+#as: --isa=sh2a -big --fdpic
+#ld: -EB -mshelf_fd -shared
+#objdump: -dsR -j.text -j.got
+#target: sh*-*-uclinux*
+
+.*:[ \t]+file format elf32-shbig-fdpic
+
+Contents of section \.text:
+ [0-9a-f]+ 0000000c 01ce[ \t]+.*
+Contents of section \.got:
+ [0-9a-f]+ 00000000 00000000 00000000 00000000[ \t]+.*
+
+Disassembly of section \.text:
+
+[0-9a-f]+ <f>:
+ [0-9a-f]+:[ \t]+00 00 00 0c[ \t]+movi20[ \t]+#12,r0
+ [0-9a-f]+:[ \t]+01 ce[ \t]+mov\.l[ \t]+@\(r0,r12\),r1
+
+Disassembly of section \.got:
+
+[0-9a-f]+ <\.got>:
+[ \t]+\.\.\.
+[ \t]+[0-9a-f]+: R_SH_GLOB_DAT[ \t]+foo
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-goti20-shared.s b/binutils-2.21/ld/testsuite/ld-sh/fdpic-goti20-shared.s
new file mode 100644
index 0000000..08f5446
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-goti20-shared.s
@@ -0,0 +1,6 @@
+ .text
+ .globl f
+ .type f,@function
+f:
+ movi20 #foo@GOT, r0
+ mov.l @(r0,r12), r1
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-goti20-static.d b/binutils-2.21/ld/testsuite/ld-sh/fdpic-goti20-static.d
new file mode 100644
index 0000000..91f5299
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-goti20-static.d
@@ -0,0 +1,22 @@
+#source: fdpic-goti20-static.s
+#as: --isa=sh2a -big --fdpic
+#ld: -EB -mshelf_fd
+#objdump: -ds
+#target: sh*-*-uclinux*
+
+.*:[ \t]+file format elf32-shbig-fdpic
+
+Contents of section \.text:
+ 400094 0000000c 01ce[ \t]+.*
+Contents of section \.rofixup:
+ 40009c 004100b4 004100a8[ \t]+.*
+Contents of section \.data:
+ 4100a4 00000001[ \t]+.*
+Contents of section \.got:
+ 4100a8 00000000 00000000 00000000 004100a4[ \t]+.*
+
+Disassembly of section \.text:
+
+00400094 <_start>:
+[ \t]+400094:[ \t]+00 00 00 0c[ \t]+movi20[ \t]+#12,r0
+[ \t]+400098:[ \t]+01 ce[ \t]+mov\.l[ \t]+@\(r0,r12\),r1
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-goti20-static.s b/binutils-2.21/ld/testsuite/ld-sh/fdpic-goti20-static.s
new file mode 100644
index 0000000..172a680
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-goti20-static.s
@@ -0,0 +1,11 @@
+ .text
+ .globl _start
+ .type _start,@function
+_start:
+ movi20 #foo@GOT, r0
+ mov.l @(r0,r12), r1
+ .data
+ .type foo,@object
+ .size foo,4
+foo:
+ .long 1
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesc-shared.d b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesc-shared.d
new file mode 100644
index 0000000..c43721d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesc-shared.d
@@ -0,0 +1,32 @@
+#source: fdpic-gotofffuncdesc-shared.s
+#as: --isa=sh2a -big --fdpic
+#ld: -EB -mshelf_fd -shared
+#objdump: -dsR -j.text -j.got
+#target: sh*-*-uclinux*
+
+.*:[ \t]+file format elf32-shbig-fdpic
+
+Contents of section \.text:
+ [0-9a-f]+ d10031cc fffffff8 00090009[ \t]+.*
+Contents of section \.got:
+ [0-9a-f]+ 00000008 00000000 00000000 00000000[ \t]+.*
+ [0-9a-f]+ 00000000[ \t]+.*
+
+Disassembly of section \.text:
+
+[0-9a-f]+ <f>:
+ [0-9a-f]+:[ \t]+d1 00[ \t]+mov\.l[ \t]+[0-9a-f]+ <f\+0x4>,r1[ \t]+! fffffff8
+ [0-9a-f]+:[ \t]+31 cc[ \t]+add[ \t]+r12,r1
+ [0-9a-f]+:[ \t]+ff ff[ \t]+\.word 0xffff
+ [0-9a-f]+:[ \t]+ff f8[ \t]+fmov[ \t]+@r15,fr15
+
+[0-9a-f]+ <foo>:
+ [0-9a-f]+:[ \t]+00 09[ \t]+nop[ \t]+
+ [0-9a-f]+:[ \t]+00 09[ \t]+nop[ \t]+
+
+Disassembly of section \.got:
+
+[0-9a-f]+ <\.got>:
+[ \t]+[0-9a-f]+:[ \t]+00 00 00 08[ \t]+movi20[ \t]+#8,r0
+[ \t]+[0-9a-f]+: R_SH_FUNCDESC_VALUE[ \t]+\.text
+[ \t]+\.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesc-shared.s b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesc-shared.s
new file mode 100644
index 0000000..daf1c84
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesc-shared.s
@@ -0,0 +1,12 @@
+ .text
+ .globl f
+ .type f,@function
+f:
+ mov.l .L1, r1
+ add r12, r1
+ .align 2
+.L1:
+ .long foo@GOTOFFFUNCDESC
+ .type foo,@function
+foo:
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesc-static.d b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesc-static.d
new file mode 100644
index 0000000..5ff417f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesc-static.d
@@ -0,0 +1,27 @@
+#source: fdpic-gotofffuncdesc-static.s
+#as: --isa=sh2a -big --fdpic
+#ld: -EB -mshelf_fd
+#objdump: -ds
+#target: sh*-*-uclinux*
+
+.*:[ \t]+file format elf32-shbig-fdpic
+
+Contents of section \.text:
+ 400094 d10031cc fffffff8 00090009[ \t]+.*
+Contents of section \.rofixup:
+ 4000a0 004100ac 004100b0 004100b4[ \t]+.*
+Contents of section \.got:
+ 4100ac 0040009c 004100b4 00000000 00000000[ \t]+.*
+ 4100bc 00000000[ \t]+.*
+
+Disassembly of section \.text:
+
+00400094 <_start>:
+[ \t]+400094:[ \t]+d1 00[ \t]+mov\.l[ \t]+400098 <_start\+0x4>,r1[ \t]+! fffffff8
+[ \t]+400096:[ \t]+31 cc[ \t]+add[ \t]+r12,r1
+[ \t]+400098:[ \t]+ff ff[ \t]+\.word 0xffff
+[ \t]+40009a:[ \t]+ff f8[ \t]+fmov[ \t]+@r15,fr15
+
+0040009c <foo>:
+[ \t]+40009c:[ \t]+00 09[ \t]+nop[ \t]+
+[ \t]+40009e:[ \t]+00 09[ \t]+nop[ \t]+
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesc-static.s b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesc-static.s
new file mode 100644
index 0000000..307ff1d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesc-static.s
@@ -0,0 +1,12 @@
+ .text
+ .globl _start
+ .type _start,@function
+_start:
+ mov.l .L1, r1
+ add r12, r1
+ .align 2
+.L1:
+ .long foo@GOTOFFFUNCDESC
+ .type foo,@function
+foo:
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesci20-shared.d b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesci20-shared.d
new file mode 100644
index 0000000..c19abe6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesci20-shared.d
@@ -0,0 +1,29 @@
+#source: fdpic-gotofffuncdesci20-shared.s
+#as: --isa=sh2a -big --fdpic
+#ld: -EB -mshelf_fd -shared
+#objdump: -dsR -j.text -j.got
+#target: sh*-*-uclinux*
+
+.*:[ \t]+file format elf32-shbig-fdpic
+
+Contents of section \.text:
+ [0-9a-f]+ 01f0fff8 31cc0009[ \t]+.*
+Contents of section \.got:
+ [0-9a-f]+ 00000006 00000000 00000000 00000000[ \t]+.*
+ [0-9a-f]+ 00000000[ \t]+.*
+
+Disassembly of section \.text:
+
+[0-9a-f]+ <f>:
+ [0-9a-f]+:[ \t]+01 f0 ff f8[ \t]+movi20[ \t]+#-8,r1
+ [0-9a-f]+:[ \t]+31 cc[ \t]+add[ \t]+r12,r1
+
+[0-9a-f]+ <foo>:
+ [0-9a-f]+:[ \t]+00 09[ \t]+nop[ \t]+
+
+Disassembly of section \.got:
+
+[0-9a-f]+ <\.got>:
+[ \t]+[0-9a-f]+:[ \t]+00 00 00 06[ \t]+movi20[ \t]+#6,r0
+[ \t]+[0-9a-f]+: R_SH_FUNCDESC_VALUE[ \t]+\.text
+[ \t]+\.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesci20-shared.s b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesci20-shared.s
new file mode 100644
index 0000000..bf16011
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesci20-shared.s
@@ -0,0 +1,9 @@
+ .text
+ .globl f
+ .type f,@function
+f:
+ movi20 #foo@GOTOFFFUNCDESC, r1
+ add r12, r1
+ .type foo,@function
+foo:
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesci20-static.d b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesci20-static.d
new file mode 100644
index 0000000..3b96f7e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesci20-static.d
@@ -0,0 +1,24 @@
+#source: fdpic-gotofffuncdesci20-static.s
+#as: --isa=sh2a -big --fdpic
+#ld: -EB -mshelf_fd
+#objdump: -ds
+#target: sh*-*-uclinux*
+
+.*:[ \t]+file format elf32-shbig-fdpic
+
+Contents of section \.text:
+ 400094 01f0fff8 31cc0009[ \t]+.*
+Contents of section \.rofixup:
+ 40009c 004100a8 004100ac 004100b0[ \t]+.*
+Contents of section \.got:
+ 4100a8 0040009a 004100b0 00000000 00000000[ \t]+.*
+ 4100b8 00000000[ \t]+.*
+
+Disassembly of section \.text:
+
+00400094 <_start>:
+[ \t]+400094:[ \t]+01 f0 ff f8[ \t]+movi20[ \t]+#-8,r1
+[ \t]+400098:[ \t]+31 cc[ \t]+add[ \t]+r12,r1
+
+0040009a <foo>:
+[ \t]+40009a:[ \t]+00 09[ \t]+nop[ \t]+
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesci20-static.s b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesci20-static.s
new file mode 100644
index 0000000..7017e0a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotofffuncdesci20-static.s
@@ -0,0 +1,9 @@
+ .text
+ .globl _start
+ .type _start,@function
+_start:
+ movi20 #foo@GOTOFFFUNCDESC, r1
+ add r12, r1
+ .type foo,@function
+foo:
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotoffi20-shared.d b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotoffi20-shared.d
new file mode 100644
index 0000000..8b57e11
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotoffi20-shared.d
@@ -0,0 +1,30 @@
+#source: fdpic-gotoffi20-shared.s
+#as: --isa=sh2a -big --fdpic
+#ld: -EB -mshelf_fd -shared
+#objdump: -dsR -j.text -j.data -j.got
+#target: sh*-*-uclinux*
+
+.*:[ \t]+file format elf32-shbig-fdpic
+
+Contents of section \.text:
+ [0-9a-f]+ 00f0fffc 01ce[ \t]+.*
+Contents of section \.data:
+ [0-9a-f]+ 00000001[ \t]+.*
+Contents of section \.got:
+ [0-9a-f]+ 00000000 00000000 00000000[ \t]+.*
+
+Disassembly of section \.text:
+
+[0-9a-f]+ <f>:
+ [0-9a-f]+:[ \t]+00 f0 ff fc[ \t]+movi20[ \t]+#-4,r0
+ [0-9a-f]+:[ \t]+01 ce[ \t]+mov\.l[ \t]+@\(r0,r12\),r1
+
+Disassembly of section \.data:
+
+[0-9a-f]+ <foo>:
+[ \t]+[0-9a-f]+:[ \t]+00 00 00 01[ \t]+\.\.\.\.
+
+Disassembly of section \.got:
+
+[0-9a-f]+ <\.got>:
+[ \t]+\.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotoffi20-shared.s b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotoffi20-shared.s
new file mode 100644
index 0000000..fc8213c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotoffi20-shared.s
@@ -0,0 +1,11 @@
+ .text
+ .globl f
+ .type f,@function
+f:
+ movi20 #foo@GOTOFF, r0
+ mov.l @(r0,r12), r1
+ .data
+ .type foo,@object
+ .size foo,4
+foo:
+ .long 1
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotoffi20-static.d b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotoffi20-static.d
new file mode 100644
index 0000000..9390720
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotoffi20-static.d
@@ -0,0 +1,22 @@
+#source: fdpic-gotoffi20-static.s
+#as: --isa=sh2a -big --fdpic
+#ld: -EB -mshelf_fd
+#objdump: -ds
+#target: sh*-*-uclinux*
+
+.*:[ \t]+file format elf32-shbig-fdpic
+
+Contents of section \.text:
+ 400094 00f0fffc 01ce[ \t]+.*
+Contents of section \.rofixup:
+ 40009c 004100a4[ \t]+.*
+Contents of section \.data:
+ 4100a0 00000001[ \t]+.*
+Contents of section \.got:
+ 4100a4 00000000 00000000 00000000[ \t]+.*
+
+Disassembly of section \.text:
+
+00400094 <_start>:
+[ \t]+400094:[ \t]+00 f0 ff fc[ \t]+movi20[ \t]+#-4,r0
+[ \t]+400098:[ \t]+01 ce[ \t]+mov\.l[ \t]+@\(r0,r12\),r1
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotoffi20-static.s b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotoffi20-static.s
new file mode 100644
index 0000000..079255b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-gotoffi20-static.s
@@ -0,0 +1,11 @@
+ .text
+ .globl _start
+ .type _start,@function
+_start:
+ movi20 #foo@GOTOFF, r0
+ mov.l @(r0,r12), r1
+ .data
+ .type foo,@object
+ .size foo,4
+foo:
+ .long 1
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-plt-be.d b/binutils-2.21/ld/testsuite/ld-sh/fdpic-plt-be.d
new file mode 100644
index 0000000..375e088
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-plt-be.d
@@ -0,0 +1,75 @@
+#source: fdpic-plt.s
+#as: --isa=sh4a -big --fdpic
+#ld: -EB -mshelf_fd -shared
+#objdump: -dsR -j.plt -j.text -j.got
+#target: sh*-*-uclinux*
+
+.*:[ \t]+file format elf32-shbig-fdpic
+
+Contents of section \.plt:
+ [0-9a-f]+ d00201ce 7004412b 0cce0009 fffffff0[ \t]+.*
+ [0-9a-f]+ 00000000 60c2402b 53c10009 d00201ce[ \t]+.*
+ [0-9a-f]+ 7004412b 0cce0009 fffffff8 0000000c[ \t]+.*
+ [0-9a-f]+ 60c2402b 53c10009[ \t]+.*
+Contents of section \.text:
+ [0-9a-f]+ d000d101 ffffffc4 ffffffdc[ \t]+.*
+Contents of section \.got:
+ [0-9a-f]+ 0000023c 00000000 00000258 00000000[ \t]+.*
+ [0-9a-f]+ 00000000 00000000 00000000[ \t]+.*
+
+Disassembly of section \.plt:
+
+[0-9a-f]+ <foo@plt>:
+ [0-9a-f]+:[ \t]+d0 02[ \t]+mov\.l[ \t]+[0-9a-f]+ <foo@plt\+0xc>,r0[ \t]+! fffffff0
+ [0-9a-f]+:[ \t]+01 ce[ \t]+mov\.l[ \t]+@\(r0,r12\),r1
+ [0-9a-f]+:[ \t]+70 04[ \t]+add[ \t]+#4,r0
+ [0-9a-f]+:[ \t]+41 2b[ \t]+jmp[ \t]+@r1
+ [0-9a-f]+:[ \t]+0c ce[ \t]+mov\.l[ \t]+@\(r0,r12\),r12
+ [0-9a-f]+:[ \t]+00 09[ \t]+nop[ \t]+
+ [0-9a-f]+:[ \t]+ff ff[ \t]+\.word 0xffff
+ [0-9a-f]+:[ \t]+ff f0[ \t]+fadd[ \t]+fr15,fr15
+ [0-9a-f]+:[ \t]+00 00[ \t]+\.word 0x0000
+ [0-9a-f]+:[ \t]+00 00[ \t]+\.word 0x0000
+ [0-9a-f]+:[ \t]+60 c2[ \t]+mov\.l[ \t]+@r12,r0
+ [0-9a-f]+:[ \t]+40 2b[ \t]+jmp[ \t]+@r0
+ [0-9a-f]+:[ \t]+53 c1[ \t]+mov\.l[ \t]+@\(4,r12\),r3
+ [0-9a-f]+:[ \t]+00 09[ \t]+nop[ \t]+
+
+[0-9a-f]+ <bar@plt>:
+ [0-9a-f]+:[ \t]+d0 02[ \t]+mov\.l[ \t]+[0-9a-f]+ <bar@plt\+0xc>,r0[ \t]+! fffffff8
+ [0-9a-f]+:[ \t]+01 ce[ \t]+mov\.l[ \t]+@\(r0,r12\),r1
+ [0-9a-f]+:[ \t]+70 04[ \t]+add[ \t]+#4,r0
+ [0-9a-f]+:[ \t]+41 2b[ \t]+jmp[ \t]+@r1
+ [0-9a-f]+:[ \t]+0c ce[ \t]+mov\.l[ \t]+@\(r0,r12\),r12
+ [0-9a-f]+:[ \t]+00 09[ \t]+nop[ \t]+
+ [0-9a-f]+:[ \t]+ff ff[ \t]+\.word 0xffff
+ [0-9a-f]+:[ \t]+ff f8[ \t]+fmov[ \t]+@r15,fr15
+ [0-9a-f]+:[ \t]+00 00[ \t]+\.word 0x0000
+ [0-9a-f]+:[ \t]+00 0c[ \t]+mov\.b[ \t]+@\(r0,r0\),r0
+ [0-9a-f]+:[ \t]+60 c2[ \t]+mov\.l[ \t]+@r12,r0
+ [0-9a-f]+:[ \t]+40 2b[ \t]+jmp[ \t]+@r0
+ [0-9a-f]+:[ \t]+53 c1[ \t]+mov\.l[ \t]+@\(4,r12\),r3
+ [0-9a-f]+:[ \t]+00 09[ \t]+nop[ \t]+
+
+Disassembly of section \.text:
+
+[0-9a-f]+ <f>:
+ [0-9a-f]+:[ \t]+d0 00[ \t]+mov\.l[ \t]+[0-9a-f]+ <f\+0x4>,r0[ \t]+! ffffffc4
+ [0-9a-f]+:[ \t]+d1 01[ \t]+mov\.l[ \t]+[0-9a-f]+ <f\+0x8>,r1[ \t]+! ffffffdc
+ [0-9a-f]+:[ \t]+ff ff[ \t]+\.word 0xffff
+ [0-9a-f]+:[ \t]+ff c4[ \t]+fcmp/eq[ \t]+fr12,fr15
+ [0-9a-f]+:[ \t]+ff ff[ \t]+\.word 0xffff
+ [0-9a-f]+:[ \t]+ff dc[ \t]+fmov[ \t]+fr13,fr15
+
+Disassembly of section \.got:
+
+[0-9a-f]+ <\.got>:
+[ \t]+[0-9a-f]+:[ \t]+00 00[ \t]+\.word 0x0000
+[ \t]+[0-9a-f]+: R_SH_FUNCDESC_VALUE[ \t]+foo
+[ \t]+[0-9a-f]+:[ \t]+02 3c[ \t]+mov.b[ \t]+@\(r0,r3\),r2
+[ \t]+[0-9a-f]+:[ \t]+00 00[ \t]+\.word 0x0000
+[ \t]+[0-9a-f]+:[ \t]+00 00[ \t]+\.word 0x0000
+[ \t]+[0-9a-f]+:[ \t]+00 00[ \t]+\.word 0x0000
+[ \t]+[0-9a-f]+: R_SH_FUNCDESC_VALUE[ \t]+bar
+[ \t]+[0-9a-f]+:[ \t]+02 58[ \t]+\.word 0x0258
+[ \t]+\.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-plt-le.d b/binutils-2.21/ld/testsuite/ld-sh/fdpic-plt-le.d
new file mode 100644
index 0000000..4a3e55b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-plt-le.d
@@ -0,0 +1,74 @@
+#source: fdpic-plt.s
+#as: --isa=sh4a -little --fdpic
+#ld: -EL -mshlelf_fd -shared
+#objdump: -dsR -j.plt -j.text -j.got
+#target: sh*-*-uclinux*
+
+.*:[ \t]+file format elf32-sh-fdpic
+
+Contents of section \.plt:
+ [0-9a-f]+ 02d0ce01 04702b41 ce0c0900 f0ffffff[ \t]+.*
+ [0-9a-f]+ 00000000 c2602b40 c1530900 02d0ce01[ \t]+.*
+ [0-9a-f]+ 04702b41 ce0c0900 f8ffffff 0c000000[ \t]+.*
+ [0-9a-f]+ c2602b40 c1530900[ \t]+.*
+Contents of section \.text:
+ [0-9a-f]+ 00d001d1 c4ffffff dcffffff[ \t]+.*
+Contents of section \.got:
+ [0-9a-f]+ 3c020000 00000000 58020000 00000000[ \t]+.*
+ [0-9a-f]+ 00000000 00000000 00000000[ \t]+.*
+
+Disassembly of section \.plt:
+
+[0-9a-f]+ <foo@plt>:
+ [0-9a-f]+:[ \t]+02 d0[ \t]+mov\.l[ \t]+[0-9a-f]+ <foo@plt\+0xc>,r0[ \t]+! fffffff0
+ [0-9a-f]+:[ \t]+ce 01[ \t]+mov\.l[ \t]+@\(r0,r12\),r1
+ [0-9a-f]+:[ \t]+04 70[ \t]+add[ \t]+#4,r0
+ [0-9a-f]+:[ \t]+2b 41[ \t]+jmp[ \t]+@r1
+ [0-9a-f]+:[ \t]+ce 0c[ \t]+mov\.l[ \t]+@\(r0,r12\),r12
+ [0-9a-f]+:[ \t]+09 00[ \t]+nop[ \t]+
+ [0-9a-f]+:[ \t]+f0 ff[ \t]+fadd[ \t]+fr15,fr15
+ [0-9a-f]+:[ \t]+ff ff[ \t]+\.word 0xffff
+ [0-9a-f]+:[ \t]+00 00[ \t]+\.word 0x0000
+ [0-9a-f]+:[ \t]+00 00[ \t]+\.word 0x0000
+ [0-9a-f]+:[ \t]+c2 60[ \t]+mov\.l[ \t]+@r12,r0
+ [0-9a-f]+:[ \t]+2b 40[ \t]+jmp[ \t]+@r0
+ [0-9a-f]+:[ \t]+c1 53[ \t]+mov\.l[ \t]+@\(4,r12\),r3
+ [0-9a-f]+:[ \t]+09 00[ \t]+nop[ \t]+
+
+[0-9a-f]+ <bar@plt>:
+ [0-9a-f]+:[ \t]+02 d0[ \t]+mov\.l[ \t]+[0-9a-f]+ <bar@plt\+0xc>,r0[ \t]+! fffffff8
+ [0-9a-f]+:[ \t]+ce 01[ \t]+mov\.l[ \t]+@\(r0,r12\),r1
+ [0-9a-f]+:[ \t]+04 70[ \t]+add[ \t]+#4,r0
+ [0-9a-f]+:[ \t]+2b 41[ \t]+jmp[ \t]+@r1
+ [0-9a-f]+:[ \t]+ce 0c[ \t]+mov\.l[ \t]+@\(r0,r12\),r12
+ [0-9a-f]+:[ \t]+09 00[ \t]+nop[ \t]+
+ [0-9a-f]+:[ \t]+f8 ff[ \t]+fmov[ \t]+@r15,fr15
+ [0-9a-f]+:[ \t]+ff ff[ \t]+\.word 0xffff
+ [0-9a-f]+:[ \t]+0c 00[ \t]+mov\.b[ \t]+@\(r0,r0\),r0
+ [0-9a-f]+:[ \t]+00 00[ \t]+\.word 0x0000
+ [0-9a-f]+:[ \t]+c2 60[ \t]+mov\.l[ \t]+@r12,r0
+ [0-9a-f]+:[ \t]+2b 40[ \t]+jmp[ \t]+@r0
+ [0-9a-f]+:[ \t]+c1 53[ \t]+mov\.l[ \t]+@\(4,r12\),r3
+ [0-9a-f]+:[ \t]+09 00[ \t]+nop[ \t]+
+
+Disassembly of section \.text:
+
+[0-9a-f]+ <f>:
+ [0-9a-f]+:[ \t]+00 d0[ \t]+mov\.l[ \t]+[0-9a-f]+ <f\+0x4>,r0[ \t]+! ffffffc4
+ [0-9a-f]+:[ \t]+01 d1[ \t]+mov\.l[ \t]+[0-9a-f]+ <f\+0x8>,r1[ \t]+! ffffffdc
+ [0-9a-f]+:[ \t]+c4 ff[ \t]+fcmp/eq[ \t]+fr12,fr15
+ [0-9a-f]+:[ \t]+ff ff[ \t]+\.word 0xffff
+ [0-9a-f]+:[ \t]+dc ff[ \t]+fmov[ \t]+fr13,fr15
+ [0-9a-f]+:[ \t]+ff ff[ \t]+\.word 0xffff
+
+Disassembly of section \.got:
+
+[0-9a-f]+ <\.got>:
+[ \t]+[0-9a-f]+:[ \t]+3c 02[ \t]+mov.b[ \t]+@\(r0,r3\),r2
+[ \t]+[0-9a-f]+: R_SH_FUNCDESC_VALUE[ \t]+foo
+[ \t]+[0-9a-f]+:[ \t]+00 00[ \t]+\.word 0x0000
+[ \t]+[0-9a-f]+:[ \t]+00 00[ \t]+\.word 0x0000
+[ \t]+[0-9a-f]+:[ \t]+00 00[ \t]+\.word 0x0000
+[ \t]+[0-9a-f]+:[ \t]+58 02[ \t]+\.word 0x0258
+[ \t]+[0-9a-f]+: R_SH_FUNCDESC_VALUE[ \t]+bar
+[ \t]+\.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-plt.s b/binutils-2.21/ld/testsuite/ld-sh/fdpic-plt.s
new file mode 100644
index 0000000..e873d3e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-plt.s
@@ -0,0 +1,11 @@
+ .text
+ .globl f
+ .type f,@function
+f:
+ mov.l .L1, r0
+ mov.l .L2, r1
+ .align 2
+.L1:
+ .long foo@PLT
+.L2:
+ .long bar@PLT
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-plti20-be.d b/binutils-2.21/ld/testsuite/ld-sh/fdpic-plti20-be.d
new file mode 100644
index 0000000..282b34b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-plti20-be.d
@@ -0,0 +1,63 @@
+#source: fdpic-plt.s
+#as: --isa=sh2a -big --fdpic
+#ld: -EB -mshelf_fd -shared
+#objdump: -dsR -j.plt -j.text -j.got
+#target: sh*-*-uclinux*
+
+.*:[ \t]+file format elf32-shbig-fdpic
+
+Contents of section \.plt:
+ [0-9a-f]+ 00f0fff0 01ce7004 412b0cce 00000000[ \t]+.*
+ [0-9a-f]+ 60c2402b 53c10009 00f0fff8 01ce7004[ \t]+.*
+ [0-9a-f]+ 412b0cce 0000000c 60c2402b 53c10009[ \t]+.*
+Contents of section \.text:
+ [0-9a-f]+ d000d101 ffffffcc ffffffe0[ \t]+.*
+Contents of section \.got:
+ [0-9a-f]+ 00000238 00000000 00000250 00000000[ \t]+.*
+ [0-9a-f]+ 00000000 00000000 00000000[ \t]+.*
+
+Disassembly of section \.plt:
+
+[0-9a-f]+ <foo@plt>:
+ [0-9a-f]+:[ \t]+00 f0 ff f0[ \t]+movi20[ \t]+#-16,r0
+ [0-9a-f]+:[ \t]+01 ce[ \t]+mov\.l[ \t]+@\(r0,r12\),r1
+ [0-9a-f]+:[ \t]+70 04[ \t]+add[ \t]+#4,r0
+ [0-9a-f]+:[ \t]+41 2b[ \t]+jmp[ \t]+@r1
+ [0-9a-f]+:[ \t]+0c ce[ \t]+mov\.l[ \t]+@\(r0,r12\),r12
+ [0-9a-f]+:[ \t]+00 00 00 00[ \t]+movi20[ \t]+#0,r0
+ [0-9a-f]+:[ \t]+60 c2[ \t]+mov\.l[ \t]+@r12,r0
+ [0-9a-f]+:[ \t]+40 2b[ \t]+jmp[ \t]+@r0
+ [0-9a-f]+:[ \t]+53 c1[ \t]+mov\.l[ \t]+@\(4,r12\),r3
+ [0-9a-f]+:[ \t]+00 09[ \t]+nop[ \t]+
+
+[0-9a-f]+ <bar@plt>:
+ [0-9a-f]+:[ \t]+00 f0 ff f8[ \t]+movi20[ \t]+#-8,r0
+ [0-9a-f]+:[ \t]+01 ce[ \t]+mov\.l[ \t]+@\(r0,r12\),r1
+ [0-9a-f]+:[ \t]+70 04[ \t]+add[ \t]+#4,r0
+ [0-9a-f]+:[ \t]+41 2b[ \t]+jmp[ \t]+@r1
+ [0-9a-f]+:[ \t]+0c ce[ \t]+mov\.l[ \t]+@\(r0,r12\),r12
+ [0-9a-f]+:[ \t]+00 00 00 0c[ \t]+movi20[ \t]+#12,r0
+ [0-9a-f]+:[ \t]+60 c2[ \t]+mov\.l[ \t]+@r12,r0
+ [0-9a-f]+:[ \t]+40 2b[ \t]+jmp[ \t]+@r0
+ [0-9a-f]+:[ \t]+53 c1[ \t]+mov\.l[ \t]+@\(4,r12\),r3
+ [0-9a-f]+:[ \t]+00 09[ \t]+nop[ \t]+
+
+Disassembly of section \.text:
+
+[0-9a-f]+ <f>:
+ [0-9a-f]+:[ \t]+d0 00[ \t]+mov\.l[ \t]+[0-9a-f]+ <f\+0x4>,r0[ \t]+! ffffffcc
+ [0-9a-f]+:[ \t]+d1 01[ \t]+mov\.l[ \t]+[0-9a-f]+ <f\+0x8>,r1[ \t]+! ffffffe0
+ [0-9a-f]+:[ \t]+ff ff[ \t]+\.word 0xffff
+ [0-9a-f]+:[ \t]+ff cc[ \t]+fmov[ \t]+fr12,fr15
+ [0-9a-f]+:[ \t]+ff ff[ \t]+\.word 0xffff
+ [0-9a-f]+:[ \t]+ff e0[ \t]+fadd[ \t]+fr14,fr15
+
+Disassembly of section \.got:
+
+[0-9a-f]+ <\.got>:
+[ \t]+[0-9a-f]+:[ \t]+00 00 02 38[ \t]+movi20[ \t]+#568,r0
+[ \t]+[0-9a-f]+: R_SH_FUNCDESC_VALUE[ \t]+foo
+[ \t]+[0-9a-f]+:[ \t]+00 00 00 00[ \t]+movi20[ \t]+#0,r0
+[ \t]+[0-9a-f]+:[ \t]+00 00 02 50[ \t]+movi20[ \t]+#592,r0
+[ \t]+[0-9a-f]+: R_SH_FUNCDESC_VALUE[ \t]+bar
+[ \t]+\.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-plti20-le.d b/binutils-2.21/ld/testsuite/ld-sh/fdpic-plti20-le.d
new file mode 100644
index 0000000..74e1e9b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-plti20-le.d
@@ -0,0 +1,63 @@
+#source: fdpic-plt.s
+#as: --isa=sh2a -little --fdpic
+#ld: -EL -mshlelf_fd -shared
+#objdump: -dsR -j.plt -j.text -j.got
+#target: sh*-*-uclinux*
+
+.*:[ \t]+file format elf32-sh-fdpic
+
+Contents of section \.plt:
+ [0-9a-f]+ f000f0ff ce010470 2b41ce0c 00000000[ \t]+.*
+ [0-9a-f]+ c2602b40 c1530900 f000f8ff ce010470[ \t]+.*
+ [0-9a-f]+ 2b41ce0c 0c000000 c2602b40 c1530900[ \t]+.*
+Contents of section \.text:
+ [0-9a-f]+ 00d001d1 ccffffff e0ffffff[ \t]+.*
+Contents of section \.got:
+ [0-9a-f]+ 38020000 00000000 50020000 00000000[ \t]+.*
+ [0-9a-f]+ 00000000 00000000 00000000[ \t]+.*
+
+Disassembly of section \.plt:
+
+[0-9a-f]+ <foo@plt>:
+ [0-9a-f]+:[ \t]+f0 00 f0 ff[ \t]+movi20[ \t]+#-16,r0
+ [0-9a-f]+:[ \t]+ce 01[ \t]+mov\.l[ \t]+@\(r0,r12\),r1
+ [0-9a-f]+:[ \t]+04 70[ \t]+add[ \t]+#4,r0
+ [0-9a-f]+:[ \t]+2b 41[ \t]+jmp[ \t]+@r1
+ [0-9a-f]+:[ \t]+ce 0c[ \t]+mov\.l[ \t]+@\(r0,r12\),r12
+ [0-9a-f]+:[ \t]+00 00 00 00[ \t]+movi20[ \t]+#0,r0
+ [0-9a-f]+:[ \t]+c2 60[ \t]+mov\.l[ \t]+@r12,r0
+ [0-9a-f]+:[ \t]+2b 40[ \t]+jmp[ \t]+@r0
+ [0-9a-f]+:[ \t]+c1 53[ \t]+mov\.l[ \t]+@\(4,r12\),r3
+ [0-9a-f]+:[ \t]+09 00[ \t]+nop[ \t]+
+
+[0-9a-f]+ <bar@plt>:
+ [0-9a-f]+:[ \t]+f0 00 f8 ff[ \t]+movi20[ \t]+#-8,r0
+ [0-9a-f]+:[ \t]+ce 01[ \t]+mov\.l[ \t]+@\(r0,r12\),r1
+ [0-9a-f]+:[ \t]+04 70[ \t]+add[ \t]+#4,r0
+ [0-9a-f]+:[ \t]+2b 41[ \t]+jmp[ \t]+@r1
+ [0-9a-f]+:[ \t]+ce 0c[ \t]+mov\.l[ \t]+@\(r0,r12\),r12
+ [0-9a-f]+:[ \t]+0c 00[ \t]+mov\.b[ \t]+@\(r0,r0\),r0
+ [0-9a-f]+:[ \t]+00 00 c2 60[ \t]+movi20[ \t]+#24770,r0
+ [0-9a-f]+:[ \t]+2b 40[ \t]+jmp[ \t]+@r0
+ [0-9a-f]+:[ \t]+c1 53[ \t]+mov\.l[ \t]+@\(4,r12\),r3
+ [0-9a-f]+:[ \t]+09 00[ \t]+nop[ \t]+
+
+Disassembly of section \.text:
+
+[0-9a-f]+ <f>:
+ [0-9a-f]+:[ \t]+00 d0[ \t]+mov\.l[ \t]+[0-9a-f]+ <f\+0x4>,r0[ \t]+! ffffffcc
+ [0-9a-f]+:[ \t]+01 d1[ \t]+mov\.l[ \t]+[0-9a-f]+ <f\+0x8>,r1[ \t]+! ffffffe0
+ [0-9a-f]+:[ \t]+cc ff[ \t]+fmov[ \t]+fr12,fr15
+ [0-9a-f]+:[ \t]+ff ff[ \t]+\.word 0xffff
+ [0-9a-f]+:[ \t]+e0 ff[ \t]+fadd[ \t]+fr14,fr15
+ [0-9a-f]+:[ \t]+ff ff[ \t]+\.word 0xffff
+
+Disassembly of section \.got:
+
+[0-9a-f]+ <\.got>:
+[ \t]+[0-9a-f]+:[ \t]+38 02[ \t]+\.word[ \t]+0x0238
+[ \t]+[0-9a-f]+: R_SH_FUNCDESC_VALUE[ \t]+foo
+[ \t]+[0-9a-f]+:[ \t]+00 00 00 00[ \t]+movi20[ \t]+#0,r0
+[ \t]+[0-9a-f]+:[ \t]+00 00 50 02[ \t]+movi20[ \t]+#592,r0
+[ \t]+[0-9a-f]+: R_SH_FUNCDESC_VALUE[ \t]+bar
+[ \t]+\.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-stack-default.d b/binutils-2.21/ld/testsuite/ld-sh/fdpic-stack-default.d
new file mode 100644
index 0000000..8f9fd92
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-stack-default.d
@@ -0,0 +1,19 @@
+#source: fdpic-stack.s
+#as: --isa=sh2a -big --fdpic
+#ld: -EB -mshelf_fd
+#readelf: -l
+#target: sh*-*-uclinux*
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x400074
+There are 2 program headers, starting at offset 52
+
+Program Headers:
+[ \t]+Type[ \t]+Offset[ \t]+VirtAddr[ \t]+PhysAddr[ \t]+FileSiz MemSiz[ \t]+Flg Align
+[ \t]+LOAD[ \t]+0x000000 0x00400000 0x00400000 0x00076 0x00076 R E 0x10000
+[ \t]+GNU_STACK[ \t]+0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+
+ Section to Segment mapping:
+[ \t]+Segment Sections\.\.\.
+[ \t]+00[ \t]+\.text
+[ \t]+01[ \t]+
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-stack-size.d b/binutils-2.21/ld/testsuite/ld-sh/fdpic-stack-size.d
new file mode 100644
index 0000000..f993a2a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-stack-size.d
@@ -0,0 +1,19 @@
+#source: fdpic-stack.s
+#as: --isa=sh2a -big --fdpic
+#ld: -EB -mshelf_fd --defsym __stacksize=0x40000
+#readelf: -l
+#target: sh*-*-uclinux*
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x400074
+There are 2 program headers, starting at offset 52
+
+Program Headers:
+[ \t]+Type[ \t]+Offset[ \t]+VirtAddr[ \t]+PhysAddr[ \t]+FileSiz MemSiz[ \t]+Flg Align
+[ \t]+LOAD[ \t]+0x000000 0x00400000 0x00400000 0x00076 0x00076 R E 0x10000
+[ \t]+GNU_STACK[ \t]+0x000000 0x00000000 0x00000000 0x00000 0x40000 RWE 0x8
+
+ Section to Segment mapping:
+[ \t]+Segment Sections\.\.\.
+[ \t]+00[ \t]+\.text
+[ \t]+01[ \t]+
diff --git a/binutils-2.21/ld/testsuite/ld-sh/fdpic-stack.s b/binutils-2.21/ld/testsuite/ld-sh/fdpic-stack.s
new file mode 100644
index 0000000..b0421ea
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/fdpic-stack.s
@@ -0,0 +1,5 @@
+ .text
+ .globl _start
+ .type _start,@function
+_start:
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/ld-r-1.d b/binutils-2.21/ld/testsuite/ld-sh/ld-r-1.d
new file mode 100644
index 0000000..1c629b3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/ld-r-1.d
@@ -0,0 +1,24 @@
+#source: ldr1.s
+#source: ldr2.s
+#as: -little
+#ld: -r -EL
+#readelf: -r -x1 -x2
+#target: sh*-*-elf sh*-*-linux*
+#notarget: sh64*-*-linux*
+
+# Make sure relocations against global and local symbols with relative and
+# absolute 32-bit relocs don't come out wrong after ld -r. Remember that
+# SH uses partial_inplace (sort-of REL within RELA) with its confusion
+# where and which addends to use and how. A file linked -r must have the
+# same layout as a plain assembly file: the addend is in the data only.
+
+Relocation section '\.rela\.text' at offset 0x[0-9a-f]+ contains 1 entries:
+.*
+00000008 00000101 R_SH_DIR32 +00000000 +\.text +\+ 0
+
+Hex dump of section '\.text':
+.*
+ 0x00000000 09000900 09000900 0c000000 .*
+
+Hex dump of section '\.rela\.text':
+ 0x00000000 08000000 01010000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/ldr1.s b/binutils-2.21/ld/testsuite/ld-sh/ldr1.s
new file mode 100644
index 0000000..9f49389
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/ldr1.s
@@ -0,0 +1,5 @@
+ .text
+ nop
+ nop
+ nop
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/ldr2.s b/binutils-2.21/ld/testsuite/ld-sh/ldr2.s
new file mode 100644
index 0000000..94e0658
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/ldr2.s
@@ -0,0 +1,3 @@
+ .text
+ .long bar
+bar:
diff --git a/binutils-2.21/ld/testsuite/ld-sh/rd-sh.exp b/binutils-2.21/ld/testsuite/ld-sh/rd-sh.exp
new file mode 100644
index 0000000..b600961
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/rd-sh.exp
@@ -0,0 +1,71 @@
+# Expect script for run_dump_test based ld-sh tests.
+# Copyright 2001, 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by Hans-Peter Nilsson (hp@bitrange.com)
+#
+
+# This file is kept separate from sh.exp, because having it separate
+# simplifies selective testing, like in "make check-ld
+# RUNTESTFLAGS=rd-sh.exp=shared-1". It is assumed that sh.exp is a place
+# for constructs where the name of the test is harder to extract and
+# select than here.
+
+if ![istarget sh*-*-*] {
+ return
+}
+
+global ASFLAGS
+global LDFLAGS
+set asflags_save "$ASFLAGS"
+set ldflags_save "$LDFLAGS"
+
+if {[istarget sh64*-*-*] || [istarget sh5*-*-*]} then {
+ set ASFLAGS "$ASFLAGS -isa=SHcompact"
+ if [istarget sh64*-*-linux*] {
+ set LDFLAGS "$LDFLAGS -mshlelf32_linux"
+ } elseif { [istarget sh64*-*-netbsd*] || [istarget sh5*-*-netbsd*] } {
+ set LDFLAGS "$LDFLAGS -mshlelf32_nbsd -e_start"
+ } else {
+ set LDFLAGS "$LDFLAGS -mshlelf32"
+ }
+}
+
+set rd_test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
+foreach shtest $rd_test_list {
+ # We need to strip the ".d", but can leave the dirname.
+ verbose [file rootname $shtest]
+ # vxworks-static.d relies on files created by sh-vxworks.exp.
+ # We run it there instead of here.
+ if { [file tail $shtest] != "vxworks1-static.d" } {
+ run_dump_test [file rootname $shtest]
+ }
+ if [string match $srcdir/$subdir/*-dso.d $shtest] {
+ # Copy the output of the DSO-createing test to .so file.
+ # Notice that a DSO-creating test must preceed the tests
+ # which need that DSO in sort-order by name.
+ set cmd "cp tmpdir/dump tmpdir/[file rootname [file tail $shtest]].so"
+ send_log "$cmd\n"
+ set cmdret [catch "exec $cmd" comp_output]
+ send_log "$comp_output\n"
+ # FIXME: What if it fails? Need we do something?
+ }
+}
+set ASFLAGS "$asflags_save"
+set LDFLAGS "$ldflags_save"
diff --git a/binutils-2.21/ld/testsuite/ld-sh/refdbg-0-dso.d b/binutils-2.21/ld/testsuite/ld-sh/refdbg-0-dso.d
new file mode 100644
index 0000000..a8ec206
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/refdbg-0-dso.d
@@ -0,0 +1,9 @@
+#source: refdbglib.s
+#as: -little
+#ld: -shared -EL
+#objdump: -dr
+#target: sh*-*-linux* sh*-*-netbsd*
+
+.*: +file format elf32-sh.*
+
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-sh/refdbg-1.d b/binutils-2.21/ld/testsuite/ld-sh/refdbg-1.d
new file mode 100644
index 0000000..461788e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/refdbg-1.d
@@ -0,0 +1,10 @@
+#source: refdbg.s
+#as: -little
+#ld: -EL tmpdir/refdbg-0-dso.so
+#objdump: -sj.debug_info
+#target: sh*-*-linux* sh*-*-netbsd*
+
+.*: +file format elf32-sh.*
+
+Contents of section \.debug_info:
+ 0+0 0+0 +.*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/refdbg.s b/binutils-2.21/ld/testsuite/ld-sh/refdbg.s
new file mode 100644
index 0000000..268fa16
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/refdbg.s
@@ -0,0 +1,12 @@
+ .text
+ .align 2
+ .globl _start
+ .type _start,@function
+_start:
+ rts
+ nop
+
+ .comm foo,4,4
+ .section .debug_info,"",@progbits
+ .long 0
+ .ualong foo
diff --git a/binutils-2.21/ld/testsuite/ld-sh/refdbglib.s b/binutils-2.21/ld/testsuite/ld-sh/refdbglib.s
new file mode 100644
index 0000000..31244ac
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/refdbglib.s
@@ -0,0 +1,8 @@
+ .text
+ .global foo
+ .data
+ .align 2
+ .type foo, @object
+ .size foo, 4
+foo:
+ .long 1
diff --git a/binutils-2.21/ld/testsuite/ld-sh/reloc1.d b/binutils-2.21/ld/testsuite/ld-sh/reloc1.d
new file mode 100644
index 0000000..b56cd7d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/reloc1.d
@@ -0,0 +1,10 @@
+#source: reloc1.s
+#as: -big
+#ld: -shared -EB --defsym foo=0x9000
+#objdump: -sj.data
+#target: sh*-*-elf sh-*-vxworks
+
+.*: file format elf32-sh.*
+
+Contents of section \.data:
+ .* 9123 .*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/reloc1.s b/binutils-2.21/ld/testsuite/ld-sh/reloc1.s
new file mode 100644
index 0000000..e579034
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/reloc1.s
@@ -0,0 +1,2 @@
+ .data
+ .word foo + 0x123
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh-vxworks.exp b/binutils-2.21/ld/testsuite/ld-sh/sh-vxworks.exp
new file mode 100644
index 0000000..09e2cee
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh-vxworks.exp
@@ -0,0 +1,62 @@
+# Expect script for VxWorks targeted SH linker tests
+# Copyright 2006, 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+if { ![istarget "sh-*-vxworks"] } {
+ return
+}
+
+set endians { "--big" "-EB" "" "--little" "-EL" "-le" }
+
+foreach { gas_option ld_option suffix } $endians {
+ set vxworkstests {
+ {"VxWorks shared library test 1" "-shared -Tvxworks1.ld $ld_option"
+ "$gas_option" {vxworks1-lib.s}
+ {{readelf --relocs vxworks1-lib.rd}
+ {objdump -dr vxworks1-lib$suffix.dd}
+ {readelf --symbols vxworks1-lib.nd} {readelf -d vxworks1-lib.td}}
+ "libvxworks1.so"}
+ {"VxWorks executable test 1 (dynamic)" \
+ "tmpdir/libvxworks1.so -Tvxworks1.ld -q --force-dynamic $ld_option"
+ "$gas_option" {vxworks1.s}
+ {{readelf --relocs vxworks1.rd} {objdump -dr vxworks1$suffix.dd}}
+ "vxworks1"}
+ {"VxWorks executable test 2 (dynamic)" \
+ "-Tvxworks1.ld -q --force-dynamic $ld_option"
+ "$gas_option" {vxworks2.s}
+ {{readelf --segments vxworks2.sd}}
+ "vxworks2"}
+ {"VxWorks executable test 2 (static)"
+ "-Tvxworks1.ld $ld_option"
+ "$gas_option" {vxworks2.s}
+ {{readelf --segments vxworks2-static.sd}}
+ "vxworks2"}
+ {"VxWorks shared library test 3" "-shared -Tvxworks1.ld $ld_option"
+ "$gas_option" {vxworks3-lib.s}
+ {{objdump -dr vxworks3-lib$suffix.dd}}
+ "libvxworks3.so"}
+ {"VxWorks executable test 3 (dynamic)" \
+ "tmpdir/libvxworks3.so -Tvxworks1.ld -q --force-dynamic $ld_option"
+ "$gas_option" {vxworks3.s}
+ {{objdump -d vxworks3$suffix.dd}}
+ "vxworks3"}
+ }
+ run_ld_link_tests [subst $vxworkstests]
+}
+run_dump_test "vxworks1-static"
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh.exp b/binutils-2.21/ld/testsuite/ld-sh/sh.exp
new file mode 100644
index 0000000..90afaee
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh.exp
@@ -0,0 +1,168 @@
+# Expect script for ld-sh tests
+# Copyright 1995, 1996, 1997, 2001, 2002, 2003, 2005, 2006, 2007, 2010
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by Ian Lance Taylor (ian@cygnus.com)
+#
+
+# Test SH relaxing. This tests the compiler and assembler as well as
+# the linker.
+
+if ![istarget sh*-*-*] {
+ return
+}
+
+if { ([istarget sh64*-*-*] || [istarget sh5*-*-*])} {
+ # relaxing not supported on sh64 yet.
+ return
+}
+
+set testsimple "SH simple relaxing"
+
+if ![ld_assemble $as "-relax $srcdir/$subdir/sh1.s" tmpdir/sh1.o] {
+ unresolved $testsimple
+} else { if ![ld_simple_link $ld tmpdir/sh1 "-relax tmpdir/sh1.o"] {
+ fail $testsimple
+} else {
+ if ![ld_nm $nm "" tmpdir/sh1] {
+ unresolved $testsimple
+ } else {
+ if {![info exists nm_output(bar)] \
+ || ![info exists nm_output(foo)]} {
+ send_log "bad output from nm\n"
+ verbose "bad output from nm"
+ fail $testsimple
+ } else {
+ if {$nm_output(bar) != $nm_output(foo) + 4} {
+ send_log "foo == $nm_output(foo)\n"
+ verbose "foo == $nm_output(foo)"
+ send_log "bar == $nm_output(bar)\n"
+ verbose "bar == $nm_output(bar)"
+ fail $testsimple
+ } else {
+ pass $testsimple
+ }
+ }
+ }
+} }
+
+set testsrec "SH relaxing to S-records"
+
+if { [istarget sh*-linux-*] || [istarget sh-*-vxworks] } {
+ # On these "non-embedded" targets, the default ELF and srec start
+ # addresses will be SIZEOF_HEADERS bytes apart. Ensure consistency
+ # by feeding the ELF start address to the srec link line.
+ catch "exec $objdump -x tmpdir/sh1 | grep start\\ address | sed s/start\\ address//" entry_addr
+ set srec_relax_arg "-Ttext $entry_addr -relax --oformat srec tmpdir/sh1.o"
+} else {
+ set srec_relax_arg "-relax --oformat srec tmpdir/sh1.o"
+}
+if ![ld_simple_link $ld tmpdir/sh1.s1 $srec_relax_arg ] {
+ fail $testsrec
+} else {
+ # The file name is embedded in the S-records, so create both
+ # files with the same name.
+ catch "exec rm -f tmpdir/sh1.s2" exec_output
+ send_log "mv tmpdir/sh1.s1 tmpdir/sh1.s2\n"
+ verbose "mv tmpdir/sh1.s1 tmpdir/sh1.s2"
+ catch "exec mv tmpdir/sh1.s1 tmpdir/sh1.s2" exec_output
+ if ![string match "" $exec_output] {
+ send_log "$exec_output\n"
+ verbose "$exec_output"
+ unresolved $testsrec
+ } else {
+ send_log "$objcopy -O srec tmpdir/sh1 tmpdir/sh1.s1\n"
+ verbose "$objcopy -O srec tmpdir/sh1 tmpdir/sh1.s1"
+ catch "exec $objcopy -O srec tmpdir/sh1 tmpdir/sh1.s1" exec_output
+ if ![string match "" $exec_output] {
+ send_log "$exec_output\n"
+ verbose "$exec_output"
+ unresolved $testsrec
+ } else {
+ send_log "cmp tmpdir/sh1.s1 tmpdir/sh1.s2\n"
+ verbose "cmp tmpdir/sh1.s1 tmpdir/sh1.s2"
+ catch "exec cmp tmpdir/sh1.s1 tmpdir/sh1.s2" exec_output
+ set exec_output [prune_warnings $exec_output]
+ if ![string match "" $exec_output] {
+ send_log "$exec_output\n"
+ verbose "$exec_output"
+ fail $testsrec
+ } else {
+ pass $testsrec
+ }
+ }
+ }
+}
+
+set testlink "SH relaxing"
+set testjsr "SH confirm relaxing"
+set testrun "SH relaxing execution"
+
+if { [which $CC] == 0 } {
+ untested $testlink
+ untested $testjsr
+ untested $testrun
+ return
+}
+
+if [istarget sh*-*linux*] {
+ exec sed -e s/_main/main/ -e s/_trap/trap/ -e s/_stack/stack/ \
+ < $srcdir/$subdir/start.s >tmpdir/start.s
+} else {
+ exec cp $srcdir/$subdir/start.s tmpdir/start.s
+}
+
+if {![ld_assemble $as "-relax tmpdir/start.s" tmpdir/start.o] \
+ || ![ld_compile $CC "-O -mrelax $srcdir/$subdir/sh2.c" tmpdir/sh2.o]} {
+ unresolved $testlink
+ unresolved $testjsr
+ unresolved $testrun
+ return
+}
+
+if ![ld_simple_link $ld tmpdir/sh2 "-relax tmpdir/start.o tmpdir/sh2.o"] {
+ fail $testlink
+ unresolved $testjsr
+ unresolved $testrun
+ return
+}
+
+pass $testlink
+
+send_log "$objdump -d tmpdir/sh2\n"
+verbose "$objdump -d tmpdir/sh2"
+catch "exec $objdump -d tmpdir/sh2" exec_output
+if [string match "*jsr*" $exec_output] {
+ fail $testjsr
+} else {
+ pass $testjsr
+}
+
+if { ![info exists SIM] || [which $SIM] == 0 } {
+ untested $testrun
+ return
+}
+
+set status [catch "exec $SIM tmpdir/sh2" exec_output]
+if { $status == 0 } {
+ pass $testrun
+} else {
+ fail $testrun
+}
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh1.s b/binutils-2.21/ld/testsuite/ld-sh/sh1.s
new file mode 100644
index 0000000..d18e439
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh1.s
@@ -0,0 +1,13 @@
+ .text
+foo:
+L1:
+ mov.l L2,r0
+ .uses L1
+ jsr @r0
+ rts
+ .align 2
+L2:
+ .long bar
+bar:
+ rts
+ .align 4
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh2.c b/binutils-2.21/ld/testsuite/ld-sh/sh2.c
new file mode 100644
index 0000000..527fe88
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh2.c
@@ -0,0 +1,120 @@
+int global;
+
+extern void trap (int, int);
+static void quit (int);
+static int foo (int);
+
+int
+main ()
+{
+ if (foo (0) != 0 || global != 0)
+ quit (1);
+ if (foo (1) != 1 || global != 1)
+ quit (1);
+ if (foo (2) != 2 || global != 2)
+ quit (1);
+ if (foo (3) != 3 || global != 3)
+ quit (1);
+ if (foo (4) != 4 || global != 4)
+ quit (1);
+ if (foo (5) != 5 || global != 5)
+ quit (1);
+ if (foo (6) != 6 || global != 6)
+ quit (1);
+ if (foo (7) != 7 || global != 7)
+ quit (1);
+ if (foo (8) != 8 || global != 8)
+ quit (1);
+ quit (0);
+}
+
+void
+__main ()
+{
+}
+
+static void
+quit (int status)
+{
+ trap (1, status);
+}
+
+int
+bar (int i)
+{
+ global = i;
+ return i;
+}
+
+int
+bar0 (int i)
+{
+ global = 0;
+ return i;
+}
+
+int
+bar1 (int i)
+{
+ global = 1;
+ return i;
+}
+
+int
+bar2 (int i)
+{
+ global = 2;
+ return i;
+}
+
+int
+bar3 (int i)
+{
+ global = 3;
+ return i;
+}
+
+int
+bar4 (int i)
+{
+ global = 4;
+ return i;
+}
+
+int
+bar5 (int i)
+{
+ global = 5;
+ return i;
+}
+
+int
+bar6 (int i)
+{
+ global = 6;
+ return i;
+}
+
+int
+bar7 (int i)
+{
+ global = 7;
+ return i;
+}
+
+int
+foo (int i)
+{
+ switch (i)
+ {
+ case 0: bar0 (0); return 0;
+ case 1: bar1 (1); return 1;
+ case 2: bar2 (2); return 2;
+ case 3: bar3 (3); return 3;
+ case 4: bar4 (4); return 4;
+ case 5: bar5 (5); return 5;
+ case 6: bar6 (6); return 6;
+ case 7: bar7 (7); return 7;
+ default: return bar (i);
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/abi32.sd b/binutils-2.21/ld/testsuite/ld-sh/sh64/abi32.sd
new file mode 100644
index 0000000..8b22e46
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/abi32.sd
@@ -0,0 +1,16 @@
+
+.*: file format .*-sh64.*
+
+Contents of section \.text:
+ 1000 cc000190 c8015590 6bf56630 6ff0fff0 .*
+ 1010 cc000210 c8400610 cc000150 c8403550 .*
+ 1020 cffffd90 cbff9590 6bf56630 cc0002b0 .*
+ 1030 c843e2b0 cc000350 c843c350 cc000040 .*
+ 1040 c843f040 cc000190 c8004590 6bf56650 .*
+ 1050 cc000190 c8002590 6bf56410 6ff0fff0 .*
+ 1060 6ff0fff0 .*
+Contents of section \.data:
+ 10e8 000010f4 0000100d 0000105d 000010e8 .*
+ 10f8 000010e8 0000100d .*
+Contents of section \.stack:
+ 80000 deaddead .*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/abi32.xd b/binutils-2.21/ld/testsuite/ld-sh/sh64/abi32.xd
new file mode 100644
index 0000000..94b1014
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/abi32.xd
@@ -0,0 +1,45 @@
+
+.*: file format .*-sh64
+.*
+architecture: sh5, flags 0x00000112:
+EXEC_P, HAS_SYMS, D_PAGED
+start address 0x0+1011
+
+Program Header:
+ LOAD off 0x0+100 vaddr 0x0+1000 paddr 0x0+1000 align 2\*\*7
+ filesz 0x0+64 memsz 0x0+64 flags r-x
+ LOAD off 0x0+168 vaddr 0x0+10e8 paddr 0x0+10e8 align 2\*\*7
+ filesz 0x0+18 memsz 0x0+18 flags rw-
+ LOAD off 0x0+180 vaddr 0x0+80000 paddr 0x0+80000 align 2\*\*7
+ filesz 0x0+4 memsz 0x0+4 flags rw-
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 00000064 0+1000 0+1000 00000100 2\*\*0
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 1 \.data 00000018 0+10e8 0+10e8 00000168 2\*\*2
+ CONTENTS, ALLOC, LOAD, DATA
+ 2 \.stack 00000004 0+80000 0+80000 00000180 2\*\*0
+ CONTENTS, ALLOC, LOAD, DATA
+SYMBOL TABLE:
+0+1000 l d \.text 0+ (|\.text)
+0+10e8 l d \.data 0+ (|\.data)
+0+80000 l d \.stack 0+ (|\.stack)
+0+10f4 l \.data 0+ foobar
+0+10fc l \.data 0+ foobar2
+0+1060 l \.text 0+ 0x04 plugh
+0+10f8 g \.data 0+ foobar
+0+10e8 g \.data 0+ baz
+0+10e8 g .* 0+ ___dtors
+0+105c g \.text 0+ 0x04 xyzzy
+0+1100 g \*ABS\* 0+ __bss_start
+0+10e8 g .* 0+ ___ctors_end
+0+10f0 g \.data 0+ baz2
+0+10e8 g .* 0+ ___ctors
+0+1000 g \.text 0+ 0x04 foo
+0+1100 g \*ABS\* 0+ _edata
+0+1100 g \*ABS\* 0+ _end
+0+1010 g \.text 0+ 0x04 start
+0+100c g \.text 0+ 0x04 bar
+0+80000 g \.stack 0+ _stack
+0+10e8 g .* 0+ ___dtors_end
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/abi64.sd b/binutils-2.21/ld/testsuite/ld-sh/sh64/abi64.sd
new file mode 100644
index 0000000..ff26740
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/abi64.sd
@@ -0,0 +1,20 @@
+
+.*: file format .*-sh64
+
+Contents of section \.text:
+ 1000 cc000190 c8000190 c8000190 c8025590 .*
+ 1010 6bf56630 6ff0fff0 cc000210 c8000210 .*
+ 1020 c8000210 c8400610 cc000150 c8000150 .*
+ 1030 c8000150 c8405550 cffffd90 cbfffd90 .*
+ 1040 cbfffd90 cbff3590 6bf56630 cc0002b0 .*
+ 1050 c80002b0 c80002b0 c84502b0 cc000350 .*
+ 1060 c8000350 c8000350 c844e350 cc000040 .*
+ 1070 c8000040 c8000040 c8451040 cc000190 .*
+ 1080 c8000190 c8000190 c8006590 6bf56650 .*
+ 1090 cc000190 c8000190 c8000190 c8002590 .*
+ 10a0 6bf56410 6ff0fff0 6ff0fff0 .*
+Contents of section \.data:
+ 1130 0000113c 00001015 000010a5 00001130 .*
+ 1140 00001130 00001015 .*
+Contents of section \.stack:
+ 80000 deaddead .*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/abi64.xd b/binutils-2.21/ld/testsuite/ld-sh/sh64/abi64.xd
new file mode 100644
index 0000000..9af5b47
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/abi64.xd
@@ -0,0 +1,44 @@
+.*: file format .*-sh64
+.*
+architecture: sh5, flags 0x00000112:
+EXEC_P, HAS_SYMS, D_PAGED
+start address 0x0000000000001019
+
+Program Header:
+ LOAD off 0x0000000000000100 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2\*\*7
+ filesz 0x00000000000000ac memsz 0x00000000000000ac flags r-x
+ LOAD off 0x00000000000001b0 vaddr 0x0000000000001130 paddr 0x0000000000001130 align 2\*\*7
+ filesz 0x0000000000000018 memsz 0x0000000000000018 flags rw-
+ LOAD off 0x0000000000000200 vaddr 0x0000000000080000 paddr 0x0000000000080000 align 2\*\*7
+ filesz 0x0000000000000004 memsz 0x0000000000000004 flags rw-
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 000000ac 0000000000001000 0000000000001000 00000100 2\*\*0
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 1 \.data 00000018 0000000000001130 0000000000001130 000001b0 2\*\*2
+ CONTENTS, ALLOC, LOAD, DATA
+ 2 \.stack 00000004 0000000000080000 0000000000080000 00000200 2\*\*0
+ CONTENTS, ALLOC, LOAD, DATA
+SYMBOL TABLE:
+0000000000001000 l d \.text 0000000000000000 (|\.text)
+0000000000001130 l d \.data 0000000000000000 (|\.data)
+0000000000080000 l d \.stack 0000000000000000 (|\.stack)
+000000000000113c l \.data 0000000000000000 foobar
+0000000000001144 l \.data 0000000000000000 foobar2
+00000000000010a8 l \.text 0000000000000000 0x04 plugh
+0000000000001140 g \.data 0000000000000000 foobar
+0000000000001130 g \.data 0000000000000000 baz
+0000000000001130 g .* 0000000000000000 ___dtors
+00000000000010a4 g \.text 0000000000000000 0x04 xyzzy
+0000000000001148 g \*ABS\* 0000000000000000 __bss_start
+0000000000001130 g .* 0000000000000000 ___ctors_end
+0000000000001138 g \.data 0000000000000000 baz2
+0000000000001130 g .* 0000000000000000 ___ctors
+0000000000001000 g \.text 0000000000000000 0x04 foo
+0000000000001148 g \*ABS\* 0000000000000000 _edata
+0000000000001148 g \*ABS\* 0000000000000000 _end
+0000000000001018 g \.text 0000000000000000 0x04 start
+0000000000001014 g \.text 0000000000000000 0x04 bar
+0000000000080000 g \.stack 0000000000000000 _stack
+0000000000001130 g .* 0000000000000000 ___dtors_end
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/abixx-noexp.sd b/binutils-2.21/ld/testsuite/ld-sh/sh64/abixx-noexp.sd
new file mode 100644
index 0000000..ce11156
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/abixx-noexp.sd
@@ -0,0 +1,12 @@
+
+.*: file format .*-sh64
+
+Contents of section \.text:
+ 1000 e8002a30 6ff0fff0 cc400610 cc401550 .*
+ 1010 ebfff630 cc4302b0 cc42e350 cc431040 .*
+ 1020 e8000a50 e8000810 6ff0fff0 6ff0fff0 .*
+Contents of section \.data:
+ 10b0 000010bc 00001005 00001029 000010b0 .*
+ 10c0 000010b0 00001005 .*
+Contents of section \.stack:
+ 80000 deaddead .*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/cmpct1.sd b/binutils-2.21/ld/testsuite/ld-sh/sh64/cmpct1.sd
new file mode 100644
index 0000000..1f7e8a1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/cmpct1.sd
@@ -0,0 +1,9 @@
+
+.*: file format elf32-sh64
+
+Contents of section \.text:
+ 1000 c7000009 0009ea2a .*
+Contents of section \.rodata:
+ 1008 00001000 0000100c 00001004 .*
+Contents of section \.stack:
+ 80000 deaddead .*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/cmpct1.xd b/binutils-2.21/ld/testsuite/ld-sh/sh64/cmpct1.xd
new file mode 100644
index 0000000..41f898e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/cmpct1.xd
@@ -0,0 +1,36 @@
+
+.*: file format .*-sh64
+.*
+architecture: sh5, flags 0x00000112:
+EXEC_P, HAS_SYMS, D_PAGED
+start address 0x0+1000
+
+Program Header:
+ LOAD off 0x0+80 vaddr 0x0+1000 paddr 0x0+1000 align 2\*\*7
+ filesz 0x0+14 memsz 0x0+14 flags r-x
+ LOAD off 0x0+100 vaddr 0x0+80000 paddr 0x0+80000 align 2\*\*7
+ filesz 0x00000004 memsz 0x00000004 flags rw-
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 00000008 0+1000 0+1000 00000080 2\*\*0
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 1 \.rodata 0000000c 0+1008 0+1008 00000088 2\*\*2
+ CONTENTS, ALLOC, LOAD, READONLY, DATA
+ 2 \.stack 00000004 0+80000 0+80000 00000100 2\*\*0
+ CONTENTS, ALLOC, LOAD, DATA
+SYMBOL TABLE:
+0+1000 l d \.text 0+ (|\.text)
+0+1008 l d \.rodata 0+ (|\.rodata)
+0+80000 l d \.stack 0+ (|\.stack)
+0+1004 l \.text 0+ next
+0+100c l \.rodata 0+ here
+0+1098 g .* 0+ ___dtors
+0+1098 g \*ABS\* 0+ __bss_start
+0+1098 g .* 0+ ___ctors_end
+0+1098 g .* 0+ ___ctors
+0+1098 g \*ABS\* 0+ _edata
+0+1098 g \*ABS\* 0+ _end
+0+1000 g \.text 0+ start
+0+80000 g \.stack 0+ _stack
+0+1098 g .* 0+ ___dtors_end
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-1.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-1.s
new file mode 100644
index 0000000..5dfae88
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-1.s
@@ -0,0 +1,8 @@
+! Support file for .cranges tests to resolve all references for
+! non-partial-link tests.
+ .section .init,"ax"
+ .mode SHmedia
+ .global start
+ .align 2
+start:
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2a.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2a.s
new file mode 100644
index 0000000..9af6bbe
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2a.s
@@ -0,0 +1,22 @@
+! Simple example with assembler-generated .cranges that do not need more
+! .cranges added by the linker: A single section with SHmedia, constants
+! and SHcompact.
+ .section .text.mixed,"ax"
+ .align 2
+! Make sure this symbol does not have the expected type.
+ .mode SHcompact
+ .global diversion2
+diversion2:
+
+ .mode SHmedia
+start2:
+ nop
+ nop
+ nop
+
+ .long 42
+ .long 43
+
+ .mode SHcompact
+ nop
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2b.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2b.s
new file mode 100644
index 0000000..670a448
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2b.s
@@ -0,0 +1,39 @@
+! Initially three separate sections, one with SHmedia and constants, one with
+! SHcompact, and yet another with SHmedia. Two .cranges sections
+! generated by the assembler; two more needed at link time, as they will be
+! consolidated into the same section, and mixed with a file with
+! assembler-generated .cranges only and one without any .cranges.
+
+ .section .text.shmedia,"ax"
+ .mode SHmedia
+ .align 2
+sec1:
+ nop
+ nop
+ nop
+ nop
+sec2:
+ .long 41
+ .long 43
+ .long 42
+ .long 43
+ .long 42
+
+ .section .text.shcompact,"ax"
+ .align 1
+ .mode SHcompact
+sec3:
+ nop
+ nop
+ nop
+
+ .section .text.shmedia2,"ax"
+ .align 2
+sec4:
+ .mode SHmedia
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2c.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2c.s
new file mode 100644
index 0000000..fcc350d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2c.s
@@ -0,0 +1,16 @@
+! First part of crange-2b.s, but in section .text.mixed.
+
+ .section .text.mixed,"ax"
+ .mode SHmedia
+ .align 2
+sec1:
+ nop
+ nop
+ nop
+ nop
+sec2:
+ .long 41
+ .long 43
+ .long 42
+ .long 43
+ .long 42
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2d.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2d.s
new file mode 100644
index 0000000..11f3d5b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2d.s
@@ -0,0 +1,9 @@
+! Second part of crange-2b.s, but in section .text.mixed.
+
+ .section .text.mixed,"ax"
+ .align 1
+ .mode SHcompact
+sec3:
+ nop
+ nop
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2e.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2e.s
new file mode 100644
index 0000000..3d7c997
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2e.s
@@ -0,0 +1,12 @@
+! Third part of crange-2b.s, but in section .text.mixed.
+
+ .section .text.mixed,"ax"
+ .align 2
+sec4:
+ .mode SHmedia
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2f.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2f.s
new file mode 100644
index 0000000..a8479c9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2f.s
@@ -0,0 +1,21 @@
+! Section with SHmedia in unique section. Note the absence of a symbol to
+! key an ISA type.
+
+ .section .text.2f,"ax"
+ .align 2
+
+ .mode SHmedia
+ movi 0x2f,r20
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ movi 0x2f,r21
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2g.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2g.s
new file mode 100644
index 0000000..ac7aacb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2g.s
@@ -0,0 +1,26 @@
+! Section with SHmedia in unique section, similar to crange-2f.s
+
+ .section .text.2g,"ax"
+ .align 2
+
+ .mode SHmedia
+ movi 0x21,r12
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ movi 0x21,r13
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2h.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2h.s
new file mode 100644
index 0000000..99c6146
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2h.s
@@ -0,0 +1,17 @@
+! SHcompact in .text, similar to crange-2f.s and crange-2g.s
+ .section .text,"ax"
+ .align 2
+
+ .mode SHcompact
+ mov #0xf,r1
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ mov #0xe,r1
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2i.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2i.s
new file mode 100644
index 0000000..78c1ce9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange-2i.s
@@ -0,0 +1,8 @@
+! If this file comes before a file with a SHcompact .text section but with
+! no symbols, we will have a symbol of the "wrong kind" before the
+! SHcompact insns.
+ .section .text,"ax"
+ .mode SHmedia
+ .align 2
+ .global diversion
+diversion:
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/crange1.rd b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange1.rd
new file mode 100644
index 0000000..2d2e69c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange1.rd
@@ -0,0 +1,46 @@
+.*
+
+Section Headers:
+ +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
+ +\[ 0\] +NULL +00000000 000000 000000 00 +0 +0 +0
+ +\[ 1\] \.init +PROGBITS +00001000 000080 000004 00 AXp +0 +0 +4
+ +\[ 2\] \.text +PROGBITS +00001004 000084 000018 00 AXp +0 +0 +4
+ +\[ 3\] \.stack +PROGBITS +00080000 000100 000004 00 +WA +0 +0 +1
+ +\[ 4\] \.cranges +LOUSER\+1 +00000000 000104 00001e 00 +W +0 +0 +1
+ +\[ 5\] \.shstrtab +STRTAB +.*
+ +\[ 6\] \.symtab +SYMTAB +.*
+ +\[ 7\] \.strtab +STRTAB +.*
+Key to Flags:
+#...
+
+There are no relocations in this file\.
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.*: 00000000 +0 +NOTYPE +LOCAL +DEFAULT +UND
+.*: 00001000 +0 +SECTION +LOCAL +DEFAULT +1
+.*: 00001004 +0 +SECTION +LOCAL +DEFAULT +2
+.*: 00080000 +0 +SECTION +LOCAL +DEFAULT +3
+.*: 00000000 +0 +SECTION +LOCAL +DEFAULT +4
+.*: 00001004 +0 +NOTYPE +LOCAL +DEFAULT +\[<other>: 4\] +2 start2
+.*: 000010a0 +0 +NOTYPE +GLOBAL +DEFAULT +.* ___dtors
+.*: 000010a0 +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.*: 000010a0 +0 +NOTYPE +GLOBAL +DEFAULT +.* ___ctors_end
+.*: 00001004 +0 +NOTYPE +GLOBAL +DEFAULT +2 diversion2
+.*: 000010a0 +0 +NOTYPE +GLOBAL +DEFAULT +.* ___ctors
+.*: 000010a0 +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.*: 000010a0 +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+.*: 00001000 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 start
+.*: 00080000 +0 +NOTYPE +GLOBAL +DEFAULT +3 _stack
+.*: 000010a0 +0 +NOTYPE +GLOBAL +DEFAULT +.* ___dtors_end
+
+Hex dump of section '\.init':
+ 0x00001000 6ff0fff0 .*
+
+Hex dump of section '\.text':
+ 0x00001004 6ff0fff0 6ff0fff0 6ff0fff0 0000002a .*
+ 0x00001014 0000002b 00090009 .*
+
+Hex dump of section '\.cranges':
+ 0x00000000 00001004 0000000c 00030000 10100000 .*
+ 0x00000010 00080001 00001018 00000004 0002 .*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/crange2.rd b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange2.rd
new file mode 100644
index 0000000..3ee4dbb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange2.rd
@@ -0,0 +1,54 @@
+.*
+
+Section Headers:
+ +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
+ +\[ 0\] +NULL +00000000 000000 000000 00 +0 +0 +0
+ +\[ 1\] \.init +PROGBITS +00001000 000080 000004 00 AXp +0 +0 +4
+ +\[ 2\] \.text +PROGBITS +00001004 000084 00005c 00 AXp +0 +0 +4
+ +\[ 3\] \.stack +PROGBITS +00080000 000100 000004 00 +WA +0 +0 +1
+ +\[ 4\] \.cranges +LOUSER\+1 +00000000 000104 000046 00 +W +0 +0 +1
+ +\[ 5\] \.shstrtab +STRTAB +.*
+ +\[ 6\] \.symtab +SYMTAB +.*
+ +\[ 7\] \.strtab +STRTAB +.*
+Key to Flags:
+#...
+
+There are no relocations in this file\.
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.*: 00000000 +0 +NOTYPE +LOCAL +DEFAULT +UND
+.*: 00001000 +0 +SECTION +LOCAL +DEFAULT +1
+.*: 00001004 +0 +SECTION +LOCAL +DEFAULT +2
+.*: 00080000 +0 +SECTION +LOCAL +DEFAULT +3
+.*: 00000000 +0 +SECTION +LOCAL +DEFAULT +4
+.*: 00001004 +0 +NOTYPE +LOCAL +DEFAULT +\[<other>: 4\] +2 start2
+.*: 0000101c +0 +NOTYPE +LOCAL +DEFAULT +\[<other>: 4\] +2 sec1
+.*: 0000102c +0 +NOTYPE +LOCAL +DEFAULT +\[<other>: 4\] +2 sec2
+.*: 00001040 +0 +NOTYPE +LOCAL +DEFAULT +2 sec3
+.*: 00001048 +0 +NOTYPE +LOCAL +DEFAULT +2 sec4
+.*: 000010e0 +0 +NOTYPE +GLOBAL +DEFAULT +.* ___dtors
+.*: 000010e0 +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.*: 000010e0 +0 +NOTYPE +GLOBAL +DEFAULT +.* ___ctors_end
+.*: 00001004 +0 +NOTYPE +GLOBAL +DEFAULT +2 diversion2
+.*: 000010e0 +0 +NOTYPE +GLOBAL +DEFAULT +.* ___ctors
+.*: 000010e0 +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.*: 000010e0 +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+.*: 00001000 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 start
+.*: 00080000 +0 +NOTYPE +GLOBAL +DEFAULT +3 _stack
+.*: 000010e0 +0 +NOTYPE +GLOBAL +DEFAULT +.* ___dtors_end
+
+Hex dump of section '\.text':
+ 0x00001004 6ff0fff0 6ff0fff0 6ff0fff0 0000002a .*
+ 0x00001014 0000002b 00090009 6ff0fff0 6ff0fff0 .*
+ 0x00001024 6ff0fff0 6ff0fff0 00000029 0000002b .*
+ 0x00001034 0000002a 0000002b 0000002a 00090009 .*
+ 0x00001044 00090000 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x00001054 6ff0fff0 6ff0fff0 6ff0fff0 .*
+
+Hex dump of section '\.cranges':
+ 0x00000000 00001004 0000000c 00030000 10100000 .*
+ 0x00000010 00080001 00001018 00000004 00020000 .*
+ 0x00000020 101c0000 00100003 0000102c 00000014 .*
+ 0x00000030 00010000 10400000 00060002 00001048 .*
+ 0x00000040 00000018 0003 .*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/crange3-cmpct.rd b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange3-cmpct.rd
new file mode 100644
index 0000000..21f5ec2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange3-cmpct.rd
@@ -0,0 +1,77 @@
+ELF Header:
+ +Magic: +7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00
+ +Class: +ELF32
+ +Data: +2's complement, big endian
+ +Version: +1 \(current\)
+ +OS/ABI: +UNIX - System V
+ +ABI Version: +0
+ +Type: +EXEC \(Executable file\)
+ +Machine: +Renesas / SuperH SH
+ +Version: +0x1
+ +Entry point address: +0x10c4
+ +Start of program headers: +52 \(bytes into file\)
+ +Start of section headers: +504 \(bytes into file\)
+ +Flags: +0xa, sh5
+ +Size of this header: +52 \(bytes\)
+ +Size of program headers: +32 \(bytes\)
+ +Number of program headers: +2
+ +Size of section headers: +40 \(bytes\)
+ +Number of section headers: +8
+ +Section header string table index: 5
+
+Section Headers:
+ +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
+ +\[ 0\] +NULL +00000000 000000 000000 00 +0 +0 +0
+ +\[ 1\] \.init +PROGBITS +00001000 000080 000004 00 AXp +0 +0 +4
+ +\[ 2\] \.text +PROGBITS +00001004 000084 0000d8 00 AXp +0 +0 +4
+ +\[ 3\] \.stack +PROGBITS +00080000 000180 000004 00 +WA +0 +0 +1
+ +\[ 4\] \.cranges +LOUSER\+1 +00000000 000184 00003c 00 +W +0 +0 +1
+ +\[ 5\] \.shstrtab +STRTAB +.*
+ +\[ 6\] \.symtab +SYMTAB +.*
+ +\[ 7\] \.strtab +STRTAB +.*
+Key to Flags:
+#...
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.*: 00000000 +0 +NOTYPE +LOCAL +DEFAULT +UND
+.*: 00001000 +0 +SECTION +LOCAL +DEFAULT +1
+.*: 00001004 +0 +SECTION +LOCAL +DEFAULT +2
+.*: 00080000 +0 +SECTION +LOCAL +DEFAULT +3
+.*: 00000000 +0 +SECTION +LOCAL +DEFAULT +4
+.*: 00001004 +0 +NOTYPE +LOCAL +DEFAULT +2 sec4
+.*: 000010a4 +0 +NOTYPE +LOCAL +DEFAULT +\[<other>: 4\] +2 start2
+.*: 000010bc +0 +NOTYPE +LOCAL +DEFAULT +2 sec3
+.*: 000010c4 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +2 diversion
+.*: 00001160 +0 +NOTYPE +GLOBAL +DEFAULT +.* ___dtors
+.*: 00001160 +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.*: 00001160 +0 +NOTYPE +GLOBAL +DEFAULT +.* ___ctors_end
+.*: 000010a4 +0 +NOTYPE +GLOBAL +DEFAULT +2 diversion2
+.*: 00001160 +0 +NOTYPE +GLOBAL +DEFAULT +.* ___ctors
+.*: 00001160 +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.*: 00001160 +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+.*: 00001000 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 start
+.*: 00080000 +0 +NOTYPE +GLOBAL +DEFAULT +3 _stack
+.*: 00001160 +0 +NOTYPE +GLOBAL +DEFAULT +.* ___dtors_end
+
+Hex dump of section '\.text':
+ 0x00001004 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x00001014 6ff0fff0 6ff0fff0 cc00bd40 6ff0fff0 .*
+ 0x00001024 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x00001034 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x00001044 6ff0fff0 6ff0fff0 6ff0fff0 cc00bd50 .*
+ 0x00001054 cc0084c0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x00001064 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x00001074 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x00001084 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x00001094 6ff0fff0 6ff0fff0 6ff0fff0 cc0084d0 .*
+ 0x000010a4 6ff0fff0 6ff0fff0 6ff0fff0 0000002a .*
+ 0x000010b4 0000002b 00090009 00090009 00090000 .*
+ 0x000010c4 e10f0009 00090009 00090009 00090009 .*
+ 0x000010d4 00090009 0009e10e .*
+
+Hex dump of section '\.cranges':
+ 0x00000000 00001004 000000a0 00030000 10a40000 .*
+ 0x00000010 000c0003 000010b0 00000008 00010000 .*
+ 0x00000020 10b80000 00040002 000010bc 00000006 .*
+ 0x00000030 00020000 10c40000 00180002 .*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/crange3-media.rd b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange3-media.rd
new file mode 100644
index 0000000..18ce30e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange3-media.rd
@@ -0,0 +1,77 @@
+ELF Header:
+ +Magic: +7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00
+ +Class: +ELF32
+ +Data: +2's complement, big endian
+ +Version: +1 \(current\)
+ +OS/ABI: +UNIX - System V
+ +ABI Version: +0
+ +Type: +EXEC \(Executable file\)
+ +Machine: +Renesas / SuperH SH
+ +Version: +0x1
+ +Entry point address: +0x10a5
+ +Start of program headers: +52 \(bytes into file\)
+ +Start of section headers: +504 \(bytes into file\)
+ +Flags: +0xa, sh5
+ +Size of this header: +52 \(bytes\)
+ +Size of program headers: +32 \(bytes\)
+ +Number of program headers: +2
+ +Size of section headers: +40 \(bytes\)
+ +Number of section headers: +8
+ +Section header string table index: 5
+
+Section Headers:
+ +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
+ +\[ 0\] +NULL +00000000 000000 000000 00 +0 +0 +0
+ +\[ 1\] \.init +PROGBITS +00001000 000080 000004 00 AXp +0 +0 +4
+ +\[ 2\] \.text +PROGBITS +00001004 000084 0000d8 00 AXp +0 +0 +4
+ +\[ 3\] \.stack +PROGBITS +00080000 000180 000004 00 +WA +0 +0 +1
+ +\[ 4\] \.cranges +LOUSER\+1 +00000000 000184 00003c 00 +W +0 +0 +1
+ +\[ 5\] \.shstrtab +STRTAB +.*
+ +\[ 6\] \.symtab +SYMTAB +.*
+ +\[ 7\] \.strtab +STRTAB +.*
+Key to Flags:
+#...
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.*: 00000000 +0 +NOTYPE +LOCAL +DEFAULT +UND
+.*: 00001000 +0 +SECTION +LOCAL +DEFAULT +1
+.*: 00001004 +0 +SECTION +LOCAL +DEFAULT +2
+.*: 00080000 +0 +SECTION +LOCAL +DEFAULT +3
+.*: 00000000 +0 +SECTION +LOCAL +DEFAULT +4
+.*: 00001004 +0 +NOTYPE +LOCAL +DEFAULT +2 sec4
+.*: 000010a4 +0 +NOTYPE +LOCAL +DEFAULT +\[<other>: 4\] +2 start2
+.*: 000010bc +0 +NOTYPE +LOCAL +DEFAULT +2 sec3
+.*: 000010c4 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +2 diversion
+.*: 00001160 +0 +NOTYPE +GLOBAL +DEFAULT +.* ___dtors
+.*: 00001160 +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.*: 00001160 +0 +NOTYPE +GLOBAL +DEFAULT +.* ___ctors_end
+.*: 000010a4 +0 +NOTYPE +GLOBAL +DEFAULT +2 diversion2
+.*: 00001160 +0 +NOTYPE +GLOBAL +DEFAULT +.* ___ctors
+.*: 00001160 +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.*: 00001160 +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+.*: 00001000 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 start
+.*: 00080000 +0 +NOTYPE +GLOBAL +DEFAULT +3 _stack
+.*: 00001160 +0 +NOTYPE +GLOBAL +DEFAULT +.* ___dtors_end
+
+Hex dump of section '\.text':
+ 0x00001004 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x00001014 6ff0fff0 6ff0fff0 cc00bd40 6ff0fff0 .*
+ 0x00001024 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x00001034 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x00001044 6ff0fff0 6ff0fff0 6ff0fff0 cc00bd50 .*
+ 0x00001054 cc0084c0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x00001064 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x00001074 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x00001084 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x00001094 6ff0fff0 6ff0fff0 6ff0fff0 cc0084d0 .*
+ 0x000010a4 6ff0fff0 6ff0fff0 6ff0fff0 0000002a .*
+ 0x000010b4 0000002b 00090009 00090009 00090000 .*
+ 0x000010c4 e10f0009 00090009 00090009 00090009 .*
+ 0x000010d4 00090009 0009e10e .*
+
+Hex dump of section '\.cranges':
+ 0x00000000 00001004 000000a0 00030000 10a40000 .*
+ 0x00000010 000c0003 000010b0 00000008 00010000 .*
+ 0x00000020 10b80000 00040002 000010bc 00000006 .*
+ 0x00000030 00020000 10c40000 00180002 .*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/crange3.dd b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange3.dd
new file mode 100644
index 0000000..135f1c9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange3.dd
@@ -0,0 +1,80 @@
+
+.*: file format elf32-sh64
+
+Disassembly of section .init:
+
+00001000 <start>:
+ 1000: 6ff0fff0 nop
+Disassembly of section .text:
+
+00001004 <sec4>:
+ 1004: 6ff0fff0 nop
+ 1008: 6ff0fff0 nop
+ 100c: 6ff0fff0 nop
+ 1010: 6ff0fff0 nop
+ 1014: 6ff0fff0 nop
+ 1018: 6ff0fff0 nop
+ 101c: cc00bd40 movi 47,r20
+ 1020: 6ff0fff0 nop
+ 1024: 6ff0fff0 nop
+ 1028: 6ff0fff0 nop
+ 102c: 6ff0fff0 nop
+ 1030: 6ff0fff0 nop
+ 1034: 6ff0fff0 nop
+ 1038: 6ff0fff0 nop
+ 103c: 6ff0fff0 nop
+ 1040: 6ff0fff0 nop
+ 1044: 6ff0fff0 nop
+ 1048: 6ff0fff0 nop
+ 104c: 6ff0fff0 nop
+ 1050: cc00bd50 movi 47,r21
+ 1054: cc0084c0 movi 33,r12
+ 1058: 6ff0fff0 nop
+ 105c: 6ff0fff0 nop
+ 1060: 6ff0fff0 nop
+ 1064: 6ff0fff0 nop
+ 1068: 6ff0fff0 nop
+ 106c: 6ff0fff0 nop
+ 1070: 6ff0fff0 nop
+ 1074: 6ff0fff0 nop
+ 1078: 6ff0fff0 nop
+ 107c: 6ff0fff0 nop
+ 1080: 6ff0fff0 nop
+ 1084: 6ff0fff0 nop
+ 1088: 6ff0fff0 nop
+ 108c: 6ff0fff0 nop
+ 1090: 6ff0fff0 nop
+ 1094: 6ff0fff0 nop
+ 1098: 6ff0fff0 nop
+ 109c: 6ff0fff0 nop
+ 10a0: cc0084d0 movi 33,r13
+
+000010a4 <diversion2>:
+ 10a4: 6ff0fff0 nop
+ 10a8: 6ff0fff0 nop
+ 10ac: 6ff0fff0 nop
+ 10b0: 00 00 00 2a \.long 0x0000002a
+ 10b4: 00 00 00 2b \.long 0x0000002b
+ 10b8: 00 09 nop
+ 10ba: 00 09 nop
+
+000010bc <sec3>:
+ 10bc: 00 09 nop
+ 10be: 00 09 nop
+ 10c0: 00 09 nop
+ \.\.\.
+
+000010c4 <diversion>:
+ 10c4: e1 0f mov #15,r1
+ 10c6: 00 09 nop
+ 10c8: 00 09 nop
+ 10ca: 00 09 nop
+ 10cc: 00 09 nop
+ 10ce: 00 09 nop
+ 10d0: 00 09 nop
+ 10d2: 00 09 nop
+ 10d4: 00 09 nop
+ 10d6: 00 09 nop
+ 10d8: 00 09 nop
+ 10da: e1 0e mov #14,r1
+
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/crange3.rd b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange3.rd
new file mode 100644
index 0000000..1a0b7a5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/crange3.rd
@@ -0,0 +1,58 @@
+.*
+
+Section Headers:
+ +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
+ +\[ 0\] +NULL +00000000 000000 000000 00 +0 +0 +0
+ +\[ 1\] \.init +PROGBITS +00001000 000080 000004 00 AXp +0 +0 +4
+ +\[ 2\] \.text +PROGBITS +00001004 000084 0000d8 00 AXp +0 +0 +4
+ +\[ 3\] \.stack +PROGBITS +00080000 000180 000004 00 +WA +0 +0 +1
+ +\[ 4\] \.cranges +LOUSER\+1 +00000000 000184 00003c 00 +W +0 +0 +1
+ +\[ 5\] \.shstrtab +STRTAB +.*
+ +\[ 6\] \.symtab +SYMTAB +.*
+ +\[ 7\] \.strtab +STRTAB +.*
+Key to Flags:
+#...
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.*: 00000000 +0 +NOTYPE +LOCAL +DEFAULT +UND
+.*: 00001000 +0 +SECTION +LOCAL +DEFAULT +1
+.*: 00001004 +0 +SECTION +LOCAL +DEFAULT +2
+.*: 00080000 +0 +SECTION +LOCAL +DEFAULT +3
+.*: 00000000 +0 +SECTION +LOCAL +DEFAULT +4
+.*: 00001004 +0 +NOTYPE +LOCAL +DEFAULT +2 sec4
+.*: 000010a4 +0 +NOTYPE +LOCAL +DEFAULT +\[<other>: 4\] +2 start2
+.*: 000010bc +0 +NOTYPE +LOCAL +DEFAULT +2 sec3
+.*: 000010c4 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +2 diversion
+.*: 00001160 +0 +NOTYPE +GLOBAL +DEFAULT +.* ___dtors
+.*: 00001160 +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.*: 00001160 +0 +NOTYPE +GLOBAL +DEFAULT +.* ___ctors_end
+.*: 000010a4 +0 +NOTYPE +GLOBAL +DEFAULT +2 diversion2
+.*: 00001160 +0 +NOTYPE +GLOBAL +DEFAULT +.* ___ctors
+.*: 00001160 +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.*: 00001160 +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+.*: 00001000 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 start
+.*: 00080000 +0 +NOTYPE +GLOBAL +DEFAULT +3 _stack
+.*: 00001160 +0 +NOTYPE +GLOBAL +DEFAULT +.* ___dtors_end
+
+Hex dump of section '\.text':
+ 0x00001004 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x00001014 6ff0fff0 6ff0fff0 cc00bd40 6ff0fff0 .*
+ 0x00001024 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x00001034 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x00001044 6ff0fff0 6ff0fff0 6ff0fff0 cc00bd50 .*
+ 0x00001054 cc0084c0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x00001064 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x00001074 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x00001084 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x00001094 6ff0fff0 6ff0fff0 6ff0fff0 cc0084d0 .*
+ 0x000010a4 6ff0fff0 6ff0fff0 6ff0fff0 0000002a .*
+ 0x000010b4 0000002b 00090009 00090009 00090000 .*
+ 0x000010c4 e10f0009 00090009 00090009 00090009 .*
+ 0x000010d4 00090009 0009e10e .*
+
+Hex dump of section '\.cranges':
+ 0x00000000 00001004 000000a0 00030000 10a40000 .*
+ 0x00000010 000c0003 000010b0 00000008 00010000 .*
+ 0x00000020 10b80000 00040002 000010bc 00000006 .*
+ 0x00000030 00020000 10c40000 00180002 .*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/crangerel1.rd b/binutils-2.21/ld/testsuite/ld-sh/sh64/crangerel1.rd
new file mode 100644
index 0000000..0100b10
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/crangerel1.rd
@@ -0,0 +1,44 @@
+There are 11 section headers, starting at offset 0xbc:
+
+Section Headers:
+ +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
+ +\[ 0\] +NULL +00000000 000000 000000 00 +0 +0 +0
+ +\[ 1\] \.text +PROGBITS +00000000 000034 000000 00 +AX +0 +0 +1
+ +\[ 2\] \.text\.mixed +PROGBITS +00000000 000034 000018 00 AXp +0 +0 +4
+ +\[ 3\] \.data +PROGBITS +00000000 00004c 000000 00 +WA +0 +0 +1
+ +\[ 4\] \.bss +NOBITS +00000000 00004c 000000 00 +WA +0 +0 +1
+ +\[ 5\] \.stack +PROGBITS +00000000 00004c 000004 00 +WA +0 +0 +1
+ +\[ 6\] \.cranges +PROGBITS +00000000 000050 00001e 00 +W +0 +0 +1
+ +\[ 7\] \.rela\.cranges +RELA +00000000 000274 000024 0c +9 +6 +4
+ +\[ 8\] \.shstrtab +STRTAB +00000000 00006e 00004d 00 +0 +0 +1
+ +\[ 9\] \.symtab +SYMTAB +00000000 000298 000090 10 +10 +8 +4
+ +\[10\] \.strtab +STRTAB +00000000 000328 000013 00 +0 +0 +1
+Key to Flags:
+#...
+
+Relocation section '\.rela\.cranges' at offset 0x[0-9a-f]+ contains 3 entries:
+.*
+0*00000000 +0+0201 R_SH_DIR32 +00000000 +\.text\.mixed +\+ 0
+0*0000000a +0+0201 R_SH_DIR32 +00000000 +\.text\.mixed +\+ 0
+0*00000014 +0+0201 R_SH_DIR32 +00000000 +\.text\.mixed +\+ 0
+
+Symbol table '\.symtab' contains 9 entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +0: 00000000 +0 +NOTYPE +LOCAL +DEFAULT +UND
+ +1: 00000000 +0 +SECTION +LOCAL +DEFAULT +1
+ +2: 00000000 +0 +SECTION +LOCAL +DEFAULT +2
+ +3: 00000000 +0 +SECTION +LOCAL +DEFAULT +3
+ +4: 00000000 +0 +SECTION +LOCAL +DEFAULT +4
+ +5: 00000000 +0 +SECTION +LOCAL +DEFAULT +5
+ +6: 00000000 +0 +SECTION +LOCAL +DEFAULT +6
+ +7: 00000000 +0 +NOTYPE +LOCAL +DEFAULT +\[<other>: 4\] +2 start2
+ +8: 00000000 +0 +NOTYPE +GLOBAL +DEFAULT +2 diversion2
+
+Hex dump of section '\.text\.mixed':
+ 0x00000000 6ff0fff0 6ff0fff0 6ff0fff0 0000002a .*
+ 0x00000010 0000002b 00090009 .*
+
+Hex dump of section '\.cranges':
+.*
+ 0x00000000 00000000 0000000c 00030000 000c0000 .*
+ 0x00000010 00080001 00000014 00000004 0002 .*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/crangerel2.rd b/binutils-2.21/ld/testsuite/ld-sh/sh64/crangerel2.rd
new file mode 100644
index 0000000..4f8a9cd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/crangerel2.rd
@@ -0,0 +1,59 @@
+There are 11 section headers, starting at offset 0x128:
+
+Section Headers:
+ +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
+ +\[ 0\] +NULL +00000000 000000 000000 00 +0 +0 +0
+ +\[ 1\] \.text +PROGBITS +00000000 000034 000000 00 +AX +0 +0 +1
+ +\[ 2\] \.text\.mixed +PROGBITS +00000000 000034 00005c 00 AXp +0 +0 +4
+ +\[ 3\] \.data +PROGBITS +00000000 000090 000000 00 +WA +0 +0 +1
+ +\[ 4\] \.bss +NOBITS +00000000 000090 000000 00 +WA +0 +0 +1
+ +\[ 5\] \.stack +PROGBITS +00000000 000090 000004 00 +WA +0 +0 +1
+ +\[ 6\] \.cranges +PROGBITS +00000000 000094 000046 00 +W +0 +0 +1
+ +\[ 7\] \.rela\.cranges +RELA +00000000 0002e0 000054 0c +9 +6 +4
+ +\[ 8\] \.shstrtab +STRTAB +00000000 0000da 00004d 00 +0 +0 +1
+ +\[ 9\] \.symtab +SYMTAB +00000000 000334 0000d0 10 +10 +12 +4
+ +\[10\] \.strtab +STRTAB +00000000 000404 000027 00 +0 +0 +1
+Key to Flags:
+#...
+
+Relocation section '\.rela\.cranges' at offset 0x[0-9a-f]+ contains 7 entries:
+.*
+0*00000000 +0+0201 R_SH_DIR32 +00000000 +\.text\.mixed +\+ 0
+0*0000000a +0+0201 R_SH_DIR32 +00000000 +\.text\.mixed +\+ 0
+0*00000014 +0+0201 R_SH_DIR32 +00000000 +\.text\.mixed +\+ 0
+0*0000001e +0+0201 R_SH_DIR32 +00000000 +\.text\.mixed +\+ 0
+0*00000028 +0+0201 R_SH_DIR32 +00000000 +\.text\.mixed +\+ 0
+0*00000032 +0+0201 R_SH_DIR32 +00000000 +\.text\.mixed +\+ 0
+0*0000003c +0+0201 R_SH_DIR32 +00000000 +\.text\.mixed +\+ 0
+
+Symbol table '\.symtab' contains 13 entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +0: 00000000 +0 +NOTYPE +LOCAL +DEFAULT +UND
+ +1: 00000000 +0 +SECTION +LOCAL +DEFAULT +1
+ +2: 00000000 +0 +SECTION +LOCAL +DEFAULT +2
+ +3: 00000000 +0 +SECTION +LOCAL +DEFAULT +3
+ +4: 00000000 +0 +SECTION +LOCAL +DEFAULT +4
+ +5: 00000000 +0 +SECTION +LOCAL +DEFAULT +5
+ +6: 00000000 +0 +SECTION +LOCAL +DEFAULT +6
+ +7: 00000000 +0 +NOTYPE +LOCAL +DEFAULT +\[<other>: 4\] +2 start2
+ +8: 00000018 +0 +NOTYPE +LOCAL +DEFAULT +\[<other>: 4\] +2 sec1
+ +9: 00000028 +0 +NOTYPE +LOCAL +DEFAULT +\[<other>: 4\] +2 sec2
+ +10: 0000003c +0 +NOTYPE +LOCAL +DEFAULT +2 sec3
+ +11: 00000044 +0 +NOTYPE +LOCAL +DEFAULT +2 sec4
+ +12: 00000000 +0 +NOTYPE +GLOBAL +DEFAULT +2 diversion2
+
+Hex dump of section '\.text\.mixed':
+ 0x00000000 6ff0fff0 6ff0fff0 6ff0fff0 0000002a .*
+ 0x00000010 0000002b 00090009 6ff0fff0 6ff0fff0 .*
+ 0x00000020 6ff0fff0 6ff0fff0 00000029 0000002b .*
+ 0x00000030 0000002a 0000002b 0000002a 00090009 .*
+ 0x00000040 00090000 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x00000050 6ff0fff0 6ff0fff0 6ff0fff0 .*
+
+Hex dump of section '\.cranges':
+.*
+ 0x00000000 00000000 0000000c 00030000 000c0000 .*
+ 0x00000010 00080001 00000014 00000004 00020000 .*
+ 0x00000020 00180000 00100003 00000028 00000014 .*
+ 0x00000030 00010000 003c0000 00060002 00000044 .*
+ 0x00000040 00000018 0003 .*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/dlsection-1.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/dlsection-1.s
new file mode 100644
index 0000000..d83e6e1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/dlsection-1.s
@@ -0,0 +1,17 @@
+! Test gc-sections and datalabel references.
+!
+! Datalabel reference to symbol in section .text2 should
+! prevent .text2 from being discarded.
+! Section .spurious can be discarded.
+ .mode SHmedia
+
+ .text
+ .global start
+ .global foo
+start: .long datalabel foo
+
+ .section .text2,"ax"
+foo: .long 23
+
+ .section .spurious,"ax"
+ .long 17
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/dlsection.sd b/binutils-2.21/ld/testsuite/ld-sh/sh64/dlsection.sd
new file mode 100644
index 0000000..58bf965
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/dlsection.sd
@@ -0,0 +1,9 @@
+
+.*: file format elf.*-sh64
+
+Contents of section \.text:
+ 1000 00001004 .*
+Contents of section \.text2:
+ 1004 00000017 .*
+Contents of section \.stack:
+ 80000 deaddead .*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/endian.dbd b/binutils-2.21/ld/testsuite/ld-sh/sh64/endian.dbd
new file mode 100644
index 0000000..0369cbc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/endian.dbd
@@ -0,0 +1,11 @@
+
+.*:[ ]*file[ ]*format[ ]*elf64-sh64
+
+Disassembly[ ]*of[ ]*section[ ]*.text:
+
+0000000000000000[ ]*<start>:
+[ ]*0:[ ]*cc48d000[ ]*movi[ ]*4660,r0
+[ ]*4:[ ]*12345678[ ]*.long[ ]*0x12345678
+[ ]*8:[ ]*12340000[ ]*.long[ ]*0x12340000
+[ ]*c:[ ]*12345678[ ]*.long[ ]*0x12345678
+
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/endian.dld b/binutils-2.21/ld/testsuite/ld-sh/sh64/endian.dld
new file mode 100644
index 0000000..f3c5bd5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/endian.dld
@@ -0,0 +1,11 @@
+
+.*:[ ]*file[ ]*format[ ]*elf64-sh64l
+
+Disassembly[ ]*of[ ]*section[ ]*.text:
+
+0000000000000000[ ]*<start>:
+[ ]*0:[ ]*cc48d000[ ]*movi[ ]*4660,r0
+[ ]*4:[ ]*12345678[ ]*.long[ ]*0x12345678
+[ ]*8:[ ]*00001234[ ]*.long[ ]*0x00001234
+[ ]*c:[ ]*12345678[ ]*.long[ ]*0x12345678
+
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/endian.ld b/binutils-2.21/ld/testsuite/ld-sh/sh64/endian.ld
new file mode 100644
index 0000000..e9635e1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/endian.ld
@@ -0,0 +1,6 @@
+SECTIONS {
+ .text : {
+ *(.text)
+ LONG(0x12345678);
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/endian.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/endian.s
new file mode 100644
index 0000000..79bc9e4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/endian.s
@@ -0,0 +1,7 @@
+ .text
+ .mode shmedia
+start:
+
+ movi 0x1234,r0
+ .long 0x12345678
+ .word 0x1234, 0
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/endian.sbd b/binutils-2.21/ld/testsuite/ld-sh/sh64/endian.sbd
new file mode 100644
index 0000000..462f66d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/endian.sbd
@@ -0,0 +1,5 @@
+
+.*: file format elf64-sh64
+
+Contents of section .text:
+ 0000 cc48d000 12345678 12340000 12345678.*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/endian.sld b/binutils-2.21/ld/testsuite/ld-sh/sh64/endian.sld
new file mode 100644
index 0000000..00975cb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/endian.sld
@@ -0,0 +1,6 @@
+
+.*: file format elf64-sh64l
+
+Contents of section .text:
+ 0000 00d048cc 78563412 34120000 78563412.*
+
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/gotplt.d b/binutils-2.21/ld/testsuite/ld-sh/sh64/gotplt.d
new file mode 100644
index 0000000..5822326
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/gotplt.d
@@ -0,0 +1,12 @@
+#source: gotplt.s
+#as: --abi=32 --isa=SHmedia
+#ld: -shared -mshelf32 --version-script=$srcdir/$subdir/gotplt.map
+#readelf: -r
+#target: sh64-*-elf
+
+# Make sure that gotplt relocations of forced local symbols
+# use the GOT.
+
+Relocation section '\.rela\.dyn' at offset .* contains 1 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+[0-9a-f ]+R_SH_RELATIVE[0-9a-f ]+
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/gotplt.map b/binutils-2.21/ld/testsuite/ld-sh/sh64/gotplt.map
new file mode 100644
index 0000000..a27c22c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/gotplt.map
@@ -0,0 +1,4 @@
+GLIBC_2.2 {
+ local:
+ xxx;
+};
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/gotplt.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/gotplt.s
new file mode 100644
index 0000000..45ed0b2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/gotplt.s
@@ -0,0 +1,8 @@
+ .text
+ .global xxx
+xxx:
+ ptabs r18, tr0
+ blink tr0, r63
+ .global yyy
+yyy:
+ movi ((xxx@GOTPLT) & 65535), r1
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/init-cmpct.d b/binutils-2.21/ld/testsuite/ld-sh/sh64/init-cmpct.d
new file mode 100644
index 0000000..6f64bc4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/init-cmpct.d
@@ -0,0 +1,14 @@
+#source: init.s
+#as: --abi=32 --isa=SHcompact
+#ld: -shared -mshelf32
+#readelf: -d
+#target: sh64-*-elf
+
+# Make sure that the lsb of DT_INIT and DT_FINI entries is not set
+# when _init and _fini are SHcompact code.
+
+Dynamic section at offset .* contains 8 entries:
+ Tag Type Name/Value
+ 0x0000000c \(INIT\) .*[02468ace]
+ 0x0000000d \(FINI\) .*[02468ace]
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/init-media.d b/binutils-2.21/ld/testsuite/ld-sh/sh64/init-media.d
new file mode 100644
index 0000000..56c6c19
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/init-media.d
@@ -0,0 +1,14 @@
+#source: init.s
+#as: --abi=32 --isa=SHmedia
+#ld: -shared -mshelf32
+#readelf: -d
+#target: sh64-*-elf
+
+# Make sure that the lsb of DT_INIT and DT_FINI entries is set
+# when _init and _fini are SHmedia code.
+
+.*
+ Tag Type Name/Value
+ 0x0000000c \(INIT\) .*[13579bdf]
+ 0x0000000d \(FINI\) .*[13579bdf]
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/init.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/init.s
new file mode 100644
index 0000000..900e764
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/init.s
@@ -0,0 +1,18 @@
+ .section .text,"ax"
+ .global _init
+ .type _init,@function
+ .align 1
+_init:
+ nop
+ nop
+ nop
+ nop
+
+ .global _fini
+ .type _fini,@function
+ .align 1
+_fini:
+ nop
+ nop
+ nop
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/init64.d b/binutils-2.21/ld/testsuite/ld-sh/sh64/init64.d
new file mode 100644
index 0000000..01c8e97
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/init64.d
@@ -0,0 +1,14 @@
+#source: init.s
+#as: --abi=64
+#ld: -shared -mshelf64
+#readelf: -d
+#target: sh64-*-elf
+
+# Make sure that the lsb of DT_INIT and DT_FINI entries is set
+# when _init and _fini are SHmedia code.
+
+.*
+ Tag Type Name/Value
+ 0x000000000000000c \(INIT\) .*[13579bdf]
+ 0x000000000000000d \(FINI\) .*[13579bdf]
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/mix1-noexp.sd b/binutils-2.21/ld/testsuite/ld-sh/sh64/mix1-noexp.sd
new file mode 100644
index 0000000..fe73136
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/mix1-noexp.sd
@@ -0,0 +1,14 @@
+
+.*: file format .*-sh64
+
+Contents of section \.text:
+ 1000 8902c700 00090009 00090009 0000100c .*
+ 1010 00001004 00001021 effff240 efffea50 .*
+ 1020 cc401360 cc4086d0 ebfffa70 6ff0fff0 .*
+Contents of section \.data:
+ 10b0 000010b0 00001004 00001021 .*
+Contents of section \.stack:
+ 80000 deaddead .*
+Contents of section \.cranges:
+ 0000 00001000 00000018 00020000 10180000 .*
+ 0010 00180003 .*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/mix1.sd b/binutils-2.21/ld/testsuite/ld-sh/sh64/mix1.sd
new file mode 100644
index 0000000..c5cc4b1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/mix1.sd
@@ -0,0 +1,16 @@
+
+.*: file format .*-sh64
+
+Contents of section \.text:
+ 1000 8902c700 00090009 00090009 0000100c .*
+ 1010 00001004 00001031 cffffd90 cbffa190 .*
+ 1020 6bf56640 cffffd90 cbff6190 6bf56650 .*
+ 1030 cc000360 c8401360 cc0002d0 c840c6d0 .*
+ 1040 ebfff270 6ff0fff0 .*
+Contents of section \.data:
+ 10c8 000010c8 00001004 00001031 .*
+Contents of section \.stack:
+ 80000 deaddead .*
+Contents of section \.cranges:
+ 0000 00001000 00000018 00020000 10180000 .*
+ 0010 00300003 .*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/mix1.xd b/binutils-2.21/ld/testsuite/ld-sh/sh64/mix1.xd
new file mode 100644
index 0000000..de72ce0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/mix1.xd
@@ -0,0 +1,42 @@
+
+.*: file format .*-sh64
+.*
+architecture: sh5, flags 0x00000112:
+EXEC_P, HAS_SYMS, D_PAGED
+start address 0x0+1000
+
+Program Header:
+ LOAD off 0x0+100 vaddr 0x0+1000 paddr 0x0+1000 align 2\*\*7
+ filesz 0x0+48 memsz 0x0+48 flags r-x
+ LOAD off 0x0+148 vaddr 0x0+10c8 paddr 0x0+10c8 align 2\*\*7
+ filesz 0x0+c memsz 0x0+c flags rw-
+ LOAD off 0x0+180 vaddr 0x0+80000 paddr 0x0+80000 align 2\*\*7
+ filesz 0x0+4 memsz 0x0+4 flags rw-
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 00000048 0+1000 0+1000 00000100 2\*\*2
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 1 \.data 0000000c 0+10c8 0+10c8 00000148 2\*\*2
+ CONTENTS, ALLOC, LOAD, DATA
+ 2 \.stack 00000004 0+80000 0+80000 00000180 2\*\*0
+ CONTENTS, ALLOC, LOAD, DATA
+ 3 \.cranges 00000014 0+ 0+ 00000184 2\*\*0
+ CONTENTS, DEBUGGING, SORT_ENTRIES
+SYMBOL TABLE:
+0+1000 l d \.text 0+ (|\.text)
+0+10c8 l d \.data 0+ (|\.data)
+0+80000 l d \.stack 0+ (|\.stack)
+0+ l d \.cranges 0+ (|\.cranges)
+0+1008 l \.text 0+ forw
+0+1004 l \.text 0+ start2
+0+1030 l \.text 0+ 0x04 mediacode2
+0+1018 l \.text 0+ 0x04 mediacode
+0+10c8 g .* 0+ ___dtors
+0+10d8 g \*ABS\* 0+ __bss_start
+0+10c8 g .* 0+ ___ctors_end
+0+10c8 g .* 0+ ___ctors
+0+10d8 g \*ABS\* 0+ _edata
+0+10d8 g \*ABS\* 0+ _end
+0+1000 g \.text 0+ start
+0+80000 g \.stack 0+ _stack
+0+10c8 g .* 0+ ___dtors_end
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/mix2-noexp.sd b/binutils-2.21/ld/testsuite/ld-sh/sh64/mix2-noexp.sd
new file mode 100644
index 0000000..9112cfc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/mix2-noexp.sd
@@ -0,0 +1,16 @@
+
+.*: file format .*-sh64
+
+Contents of section \.text:
+ 1000 cc4048e0 cc40c0e0 ec000e60 6ff0fff0 .*
+ 1010 0009c700 c7000009 00090009 00001009 .*
+ 1020 000010bc .*
+Contents of section \.rodata:
+ 1024 00001018 000010c4 0000100d 00001028 .*
+Contents of section \.data:
+ 10b8 00000000 00001014 00000000 000010bc .*
+Contents of section \.stack:
+ 80000 deaddead .*
+Contents of section \.cranges:
+ 0000 00001000 00000010 00030000 10100000 .*
+ 0010 00140002 .*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/mix2.sd b/binutils-2.21/ld/testsuite/ld-sh/sh64/mix2.sd
new file mode 100644
index 0000000..122a472
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/mix2.sd
@@ -0,0 +1,17 @@
+
+.*: file format .*-sh64
+
+Contents of section \.text:
+ 1000 cc0000e0 c84088e0 cc0000e0 c84100e0 .*
+ 1010 cc000190 c8003190 6bf56660 6ff0fff0 .*
+ 1020 0009c700 c7000009 00090009 00001011 .*
+ 1030 000010cc .*
+Contents of section \.rodata:
+ 1034 00001028 000010d4 0000101d 00001038 .*
+Contents of section \.data:
+ 10c8 00000000 00001024 00000000 000010cc .*
+Contents of section \.stack:
+ 80000 deaddead .*
+Contents of section \.cranges:
+ 0000 00001000 00000020 00030000 10200000 .*
+ 0010 00140002 .*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/mix2.xd b/binutils-2.21/ld/testsuite/ld-sh/sh64/mix2.xd
new file mode 100644
index 0000000..5c72763
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/mix2.xd
@@ -0,0 +1,52 @@
+
+.*: file format .*-sh64
+.*
+architecture: sh5, flags 0x00000112:
+EXEC_P, HAS_SYMS, D_PAGED
+start address 0x0+1001
+
+Program Header:
+ LOAD off 0x0+100 vaddr 0x0+1000 paddr 0x0+1000 align 2\*\*7
+ filesz 0x0+44 memsz 0x0+44 flags r-x
+ LOAD off 0x0+148 vaddr 0x0+10c8 paddr 0x0+10c8 align 2\*\*7
+ filesz 0x0+10 memsz 0x0+10 flags rw-
+ LOAD off 0x0+180 vaddr 0x0+80000 paddr 0x0+80000 align 2\*\*7
+ filesz 0x0+4 memsz 0x0+4 flags rw-
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 00000034 0+1000 0+1000 00000100 2\*\*2
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 1 \.rodata 00000010 0+1034 0+1034 00000134 2\*\*2
+ CONTENTS, ALLOC, LOAD, READONLY, DATA
+ 2 \.data 00000010 0+10c8 0+10c8 00000148 2\*\*2
+ CONTENTS, ALLOC, LOAD, DATA
+ 3 \.stack 00000004 0+80000 0+80000 00000180 2\*\*0
+ CONTENTS, ALLOC, LOAD, DATA
+ 4 \.cranges 00000014 0+ 0+ 00000184 2\*\*0
+ CONTENTS, DEBUGGING, SORT_ENTRIES
+SYMBOL TABLE:
+0+1000 l d \.text 0+ (|\.text)
+0+1034 l d \.rodata 0+ (|\.rodata)
+0+10c8 l d \.data 0+ (|\.data)
+0+80000 l d \.stack 0+ (|\.stack)
+0+ l d \.cranges 0+ (|\.cranges)
+0+1020 l \.text 0+ locallabel
+0+1040 g \.rodata 0+ compactlabel4
+0+101c g \.text 0+ 0x04 medialabel2
+0+1038 g \.rodata 0+ medialabel3
+0+1022 g \.text 0+ compactlabel1
+0+1024 g \.text 0+ compactlabel2
+0+1028 g \.text 0+ compactlabel3
+0+1010 g \.text 0+ 0x04 medialabel1
+0+10c8 g .* 0+ ___dtors
+0+10cc g \.data 0+ medialabel4
+0+10d8 g \*ABS\* 0+ __bss_start
+0+10c8 g .* 0+ ___ctors_end
+0+10d4 g \.data 0+ compactlabel5
+0+10c8 g .* 0+ ___ctors
+0+10d8 g \*ABS\* 0+ _edata
+0+10d8 g \*ABS\* 0+ _end
+0+1000 g \.text 0+ 0x04 start
+0+80000 g \.stack 0+ _stack
+0+10c8 g .* 0+ ___dtors_end
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/rd-sh64.exp b/binutils-2.21/ld/testsuite/ld-sh/sh64/rd-sh64.exp
new file mode 100644
index 0000000..ebeed0a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/rd-sh64.exp
@@ -0,0 +1,44 @@
+# Expect script for run_dump_test based ld-sh/sh64 tests.
+# Copyright 2002, 2003, 2005, 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by Stephen Clarke (stephen.clarke@superh.com)
+#
+
+if ![istarget sh64-*-*] {
+ return
+}
+
+set rd_test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
+foreach sh64test $rd_test_list {
+ # We need to strip the ".d", but can leave the dirname.
+ verbose [file rootname $sh64test]
+ run_dump_test [file rootname $sh64test]
+ if [string match $srcdir/$subdir/*-dso.d $sh64test] {
+ # Copy the output of the DSO-createing test to .so file.
+ # Notice that a DSO-creating test must preceed the tests
+ # which need that DSO in sort-order by name.
+ set cmd "cp tmpdir/dump \
+ tmpdir/[file rootname [file tail $sh64test]].so"
+ send_log "$cmd\n"
+ set cmdret [catch "exec $cmd" comp_output]
+ send_log "$comp_output\n"
+ # FIXME: What if it fails? Need we do something?
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/rel-1.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/rel-1.s
new file mode 100644
index 0000000..6cf18ca
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/rel-1.s
@@ -0,0 +1,48 @@
+! Relative linking, simple files with global symbols but nothing really
+! strange. Reference from same and other file to .text and .data in
+! different combinations.
+
+! fileFsectionN, with F in rel-F.s, and N in:
+! 1 - Same file and section.
+! 2 - Same file, different section.
+! 3 - Other file, same section.
+! 4 - Other file, other section.
+
+ .mode SHmedia
+ .text
+ .global start
+start:
+ nop
+ .global file1text1
+file1text1:
+ nop
+ movi file1text1 & 65535,r10
+ .global file1text2
+file1text2:
+ movi file1data2 & 65535,r20
+ .global file1text3
+file1text3:
+ movi file2text3 & 65535,r20
+ .global file1text4
+file1text4:
+ movi file2data4 & 65535,r20
+ movi unresolved1 & 65535,r40
+ movi unresolved6 & 65535,r30
+
+ .data
+ .long 0
+ .global file1data1
+file1data1:
+ .long 0
+ .long file1data1
+ .global file1data2
+file1data2:
+ .long file1text2
+ .global file1data3
+file1data3:
+ .long file2data3
+ .global file1data4
+file1data4:
+ .long file2text4
+ .long unresolved2
+ .long unresolved5
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/rel-2.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/rel-2.s
new file mode 100644
index 0000000..b1931b5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/rel-2.s
@@ -0,0 +1,46 @@
+! Relative linking, second file.
+
+! fileFsectionN, with F in rel-F.s, and N in:
+! 1 - Same file and section.
+! 2 - Same file, different section.
+! 3 - Other file, same section.
+! 4 - Other file, other section.
+
+ .mode SHmedia
+ .text
+ .global start2
+start2:
+ nop
+ .global file2text1
+file2text1:
+ nop
+ movi file2text1 & 65535,r10
+ .global file2text2
+file2text2:
+ movi file2data2 & 65535,r20
+ .global file2text3
+file2text3:
+ movi file1text3 & 65535,r20
+ .global file2text4
+file2text4:
+ movi file1data4 & 65535,r20
+ movi unresolved1 & 65535,r30
+ movi unresolved3 & 65535,r30
+
+ .data
+ .long 0
+ .global file2data1
+file2data1:
+ .long 0
+ .long file2data1
+ .global file2data2
+file2data2:
+ .long file2text2
+ .global file2data3
+file2data3:
+ .long file1data3
+ .global file2data4
+file2data4:
+ .long file1text4
+ .long unresolved2
+ .long unresolved4
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/rel32.xd b/binutils-2.21/ld/testsuite/ld-sh/sh64/rel32.xd
new file mode 100644
index 0000000..65c00ac
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/rel32.xd
@@ -0,0 +1,92 @@
+
+.*: file format .*-sh64
+.*
+architecture: sh5, flags 0x0+11:
+HAS_RELOC, HAS_SYMS
+start address 0x0+
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0+40 0+ 0+ 0+34 2\*\*0
+ CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
+ 1 \.data 0+40 0+ 0+ 0+74 2\*\*2
+ CONTENTS, ALLOC, LOAD, RELOC, DATA
+ 2 \.bss 0+ 0+ 0+ 0+b4 2\*\*0
+ ALLOC
+ 3 \.stack 0+4 0+ 0+ 0+b4 2\*\*0
+ CONTENTS, ALLOC, LOAD, DATA
+SYMBOL TABLE:
+0+ l d \.text 0+ (|.text)
+0+ l d \.data 0+ (|.data)
+0+ l d \.bss 0+ (|.bss)
+0+ l d \.stack 0+ (|.stack)
+0+ \*UND\* 0+ unresolved5
+0+c g \.text 0+ 0x04 file1text2
+0+24 g \.text 0+ 0x04 file2text1
+0+4 g \.data 0+ file1data1
+0+34 g \.data 0+ file2data4
+0+10 g \.text 0+ 0x04 file1text3
+0+2c g \.data 0+ file2data2
+0+c g \.data 0+ file1data2
+0+30 g \.text 0+ 0x04 file2text3
+0+20 g \.text 0+ 0x04 start2
+0+ \*UND\* 0+ unresolved1
+0+ \*UND\* 0+ unresolved6
+0+4 g \.text 0+ 0x04 file1text1
+0+2c g \.text 0+ 0x04 file2text2
+0+ \*UND\* 0+ unresolved3
+0+34 g \.text 0+ 0x04 file2text4
+0+ \*UND\* 0+ unresolved2
+0+ g \.text 0+ 0x04 start
+0+14 g \.text 0+ 0x04 file1text4
+0+30 g \.data 0+ file2data3
+0+ \*UND\* 0+ unresolved4
+0+24 g \.data 0+ file2data1
+0+10 g \.data 0+ file1data3
+0+14 g \.data 0+ file1data4
+
+
+RELOCATION RECORDS FOR \[\.text\]:
+OFFSET *TYPE *VALUE
+0+8 R_SH_IMM_LOW16 file1text1
+0+c R_SH_IMM_LOW16 file1data2
+0+10 R_SH_IMM_LOW16 file2text3
+0+14 R_SH_IMM_LOW16 file2data4
+0+18 R_SH_IMM_LOW16 unresolved1
+0+1c R_SH_IMM_LOW16 unresolved6
+0+28 R_SH_IMM_LOW16 file2text1
+0+2c R_SH_IMM_LOW16 file2data2
+0+30 R_SH_IMM_LOW16 file1text3
+0+34 R_SH_IMM_LOW16 file1data4
+0+38 R_SH_IMM_LOW16 unresolved1
+0+3c R_SH_IMM_LOW16 unresolved3
+
+
+RELOCATION RECORDS FOR \[\.data\]:
+OFFSET *TYPE *VALUE
+0+8 R_SH_DIR32 file1data1
+0+c R_SH_DIR32 file1text2
+0+10 R_SH_DIR32 file2data3
+0+14 R_SH_DIR32 file2text4
+0+18 R_SH_DIR32 unresolved2
+0+1c R_SH_DIR32 unresolved5
+0+28 R_SH_DIR32 file2data1
+0+2c R_SH_DIR32 file2text2
+0+30 R_SH_DIR32 file1data3
+0+34 R_SH_DIR32 file1text4
+0+38 R_SH_DIR32 unresolved2
+0+3c R_SH_DIR32 unresolved4
+
+
+Contents of section \.text:
+ 0000 6ff0fff0 6ff0fff0 cc0000a0 cc000140 .*
+ 0010 cc000140 cc000140 cc000280 cc0001e0 .*
+ 0020 6ff0fff0 6ff0fff0 cc0000a0 cc000140 .*
+ 0030 cc000140 cc000140 cc0001e0 cc0001e0 .*
+Contents of section \.data:
+ 0000 00000000 00000000 00000000 00000000 .*
+ 0010 00000000 00000000 00000000 00000000 .*
+ 0020 00000000 00000000 00000000 00000000 .*
+ 0030 00000000 00000000 00000000 00000000 .*
+Contents of section .stack:
+ 0000 deaddead .*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/rel64.xd b/binutils-2.21/ld/testsuite/ld-sh/sh64/rel64.xd
new file mode 100644
index 0000000..986e013
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/rel64.xd
@@ -0,0 +1,92 @@
+
+.*: file format .*-sh64
+.*
+architecture: sh5, flags 0x0+11:
+HAS_RELOC, HAS_SYMS
+start address 0x0+
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0+40 0+ 0+ 0+40 2\*\*0
+ CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
+ 1 \.data 0+40 0+ 0+ 0+80 2\*\*2
+ CONTENTS, ALLOC, LOAD, RELOC, DATA
+ 2 \.bss 0+ 0+ 0+ 0+c0 2\*\*0
+ ALLOC
+ 3 \.stack 0+4 0+ 0+ 0+c0 2\*\*0
+ CONTENTS, ALLOC, LOAD, DATA
+SYMBOL TABLE:
+0+ l d \.text 0+ (|.text)
+0+ l d \.data 0+ (|.data)
+0+ l d \.bss 0+ (|.bss)
+0+ l d \.stack 0+ (|.stack)
+0+ \*UND\* 0+ unresolved5
+0+c g \.text 0+ 0x04 file1text2
+0+24 g \.text 0+ 0x04 file2text1
+0+4 g \.data 0+ file1data1
+0+34 g \.data 0+ file2data4
+0+10 g \.text 0+ 0x04 file1text3
+0+2c g \.data 0+ file2data2
+0+c g \.data 0+ file1data2
+0+30 g \.text 0+ 0x04 file2text3
+0+20 g \.text 0+ 0x04 start2
+0+ \*UND\* 0+ unresolved1
+0+ \*UND\* 0+ unresolved6
+0+4 g \.text 0+ 0x04 file1text1
+0+2c g \.text 0+ 0x04 file2text2
+0+ \*UND\* 0+ unresolved3
+0+34 g \.text 0+ 0x04 file2text4
+0+ \*UND\* 0+ unresolved2
+0+ g \.text 0+ 0x04 start
+0+14 g \.text 0+ 0x04 file1text4
+0+30 g \.data 0+ file2data3
+0+ \*UND\* 0+ unresolved4
+0+24 g \.data 0+ file2data1
+0+10 g \.data 0+ file1data3
+0+14 g \.data 0+ file1data4
+
+
+RELOCATION RECORDS FOR \[\.text\]:
+OFFSET TYPE VALUE
+0+8 R_SH_IMM_LOW16 file1text1
+0+c R_SH_IMM_LOW16 file1data2
+0+10 R_SH_IMM_LOW16 file2text3
+0+14 R_SH_IMM_LOW16 file2data4
+0+18 R_SH_IMM_LOW16 unresolved1
+0+1c R_SH_IMM_LOW16 unresolved6
+0+28 R_SH_IMM_LOW16 file2text1
+0+2c R_SH_IMM_LOW16 file2data2
+0+30 R_SH_IMM_LOW16 file1text3
+0+34 R_SH_IMM_LOW16 file1data4
+0+38 R_SH_IMM_LOW16 unresolved1
+0+3c R_SH_IMM_LOW16 unresolved3
+
+
+RELOCATION RECORDS FOR \[\.data\]:
+OFFSET TYPE VALUE
+0+8 R_SH_DIR32 file1data1
+0+c R_SH_DIR32 file1text2
+0+10 R_SH_DIR32 file2data3
+0+14 R_SH_DIR32 file2text4
+0+18 R_SH_DIR32 unresolved2
+0+1c R_SH_DIR32 unresolved5
+0+28 R_SH_DIR32 file2data1
+0+2c R_SH_DIR32 file2text2
+0+30 R_SH_DIR32 file1data3
+0+34 R_SH_DIR32 file1text4
+0+38 R_SH_DIR32 unresolved2
+0+3c R_SH_DIR32 unresolved4
+
+
+Contents of section \.text:
+ 0000 6ff0fff0 6ff0fff0 cc0000a0 cc000140 .*
+ 0010 cc000140 cc000140 cc000280 cc0001e0 .*
+ 0020 6ff0fff0 6ff0fff0 cc0000a0 cc000140 .*
+ 0030 cc000140 cc000140 cc0001e0 cc0001e0 .*
+Contents of section \.data:
+ 0000 00000000 00000000 00000000 00000000 .*
+ 0010 00000000 00000000 00000000 00000000 .*
+ 0020 00000000 00000000 00000000 00000000 .*
+ 0030 00000000 00000000 00000000 00000000 .*
+Contents of section .stack:
+ 0000 deaddead .*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/relax.exp b/binutils-2.21/ld/testsuite/ld-sh/sh64/relax.exp
new file mode 100644
index 0000000..bb05e43
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/relax.exp
@@ -0,0 +1,155 @@
+# Expect script for ld-sh tests
+# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007 Free Software Foundation
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# Test SH relaxing - that is, that it's disabled when SHmedia sections
+# are present.
+
+if ![istarget sh64-*-*] {
+ return
+}
+
+# There are four source files: the first is SHcompact only, the second
+# is SHmedia only, the third has both, and the fourth has only a
+# .cranges section. The table below has:
+# Title
+# as flags for first source (else "n/a" to skip)
+# ditto, other three files
+# ld flags
+# 1/0 whether relaxing should have been done or not, or -1 if we expect
+# the linker to not produce an output file.
+
+if [istarget sh64*-*-linux*] {
+ set emul32 "shlelf32_linux"
+} elseif { [istarget sh64*-*-netbsd*] || [istarget sh5*-*-netbsd*] } {
+ set emul32 "shelf32_nbsd"
+} else {
+ set emul32 "shelf32"
+}
+
+set sh64relaxtests {
+ {"SH64 not relaxing, shcompact"
+ {"-relax -isa shcompact" "n/a" "n/a" "n/a"} "-m$emul32" 0}
+ {"SH64 relaxing, shcompact"
+ {"-relax -isa shcompact" "n/a" "n/a" "n/a"} "-relax -m$emul32" 1}
+ {"SH64 relaxing, shcompacts"
+ {"-relax -isa shcompact" "-isa shcompact" "n/a" "n/a"} "-relax -m$emul32" 1}
+ {"SH64 relaxing disabled, shmedia"
+ {"-relax -isa shcompact" "-isa shmedia -no-mix" "n/a" "n/a"} "-relax -m$emul32" 0}
+ {"SH64 relaxing disabled, mixed"
+ {"-relax -isa shcompact" "n/a" "-isa shcompact" "n/a"} "-relax -m$emul32" 0}
+ {"SH64 relaxing disabled, cranges"
+ {"-relax -isa shcompact" "n/a" "n/a" ""} "-relax -m$emul32" 0}
+}
+
+proc run_sh64relaxtest {sh64relaxtests} {
+ global ld
+ global as
+ global nm
+ global objdump
+ global readelf
+ global srcdir
+ global subdir
+ global emul32
+
+ set testindex 0
+
+ set sh64relaxfiles {
+ "relax1.s" "relax2.s" "relax3.s" "relax4.s"
+ }
+
+ foreach testentry $sh64relaxtests {
+ set testname [lindex $testentry 0]
+ set as_options [lindex $testentry 1]
+ set ld_options [subst [lindex $testentry 2]]
+ set expect_relaxed [lindex $testentry 3]
+
+ set is_unresolved 0
+ set objfiles {}
+
+ incr testindex
+
+ # Assemble each file in the test.
+ for {set i 0} {$i < 4} {incr i} {
+ set as_file [lindex $sh64relaxfiles $i]
+ set as_opt [lindex $as_options $i]
+ if { [string compare $as_opt "n/a"] != 0 } {
+ set objfile "tmpdir/[file rootname $as_file]-$testindex.o"
+ lappend objfiles $objfile
+
+ if ![ld_assemble $as "$as_opt $srcdir/$subdir/$as_file" $objfile] {
+ set is_unresolved 1
+ break
+ }
+ }
+ }
+
+ # Catch assembler errors.
+ if { $is_unresolved != 0 } {
+ unresolved $testname
+ continue
+ }
+
+ set binfile "tmpdir/relax-$testindex.x"
+
+ # We're not interested in the pass/fail of the linker as much
+ # as we're interested in whether or not relaxing got properly
+ # disabled. Hence the lax checking here.
+
+ file delete $binfile
+ set result [ld_simple_link $ld $binfile " --no-warn-mismatch $ld_options $objfiles"]
+ if ![file exists $binfile] {
+
+ if {$expect_relaxed == -1} {
+ pass $testname
+ continue
+ }
+
+ verbose "$testname: file $binfile doesn't exist" 1
+ fail $testname
+ continue
+ }
+
+ catch "exec $objdump -d $binfile" objdump_output
+
+ regexp "\[ \t](jsr|bsr)\[ \t]" $objdump_output ignore calltype
+
+ if [string match $calltype "bsr"] {
+ set relaxed 1
+ } elseif [string match $calltype "jsr"] {
+ set relaxed 0
+ } else {
+ verbose "$testname: neither jsr nor bsr found" 1
+ verbose $objdump_output 2
+ fail $testname
+ continue
+ }
+
+ if {$relaxed != $expect_relaxed} {
+ verbose $objdump_output 2
+ fail $testname
+ exit
+ } else {
+ pass $testname
+ }
+ }
+}
+
+run_sh64relaxtest $sh64relaxtests
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/relax1.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/relax1.s
new file mode 100644
index 0000000..873954b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/relax1.s
@@ -0,0 +1,12 @@
+ .globl start
+start:
+.L3:
+ mov.l .L4,r1
+ .uses .L3
+ jsr @r1
+ nop
+ nop
+.L4:
+ .long .L5
+.L5:
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/relax2.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/relax2.s
new file mode 100644
index 0000000..9bf0802
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/relax2.s
@@ -0,0 +1,3 @@
+ .text
+foo1:
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/relax3.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/relax3.s
new file mode 100644
index 0000000..964bacd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/relax3.s
@@ -0,0 +1,8 @@
+ .text
+ .mode shmedia
+foo1:
+ nop
+
+ .mode shcompact
+foo2:
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/relax4.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/relax4.s
new file mode 100644
index 0000000..904df7c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/relax4.s
@@ -0,0 +1,2 @@
+ .section .cranges
+ .word 0
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/reldl-1.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/reldl-1.s
new file mode 100644
index 0000000..0aeb332
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/reldl-1.s
@@ -0,0 +1,171 @@
+! Relative linking. Like the simple test, but mixing in use of
+! "datalabel" and offsets to the global symbols into the previous
+! combinations.
+!
+! More systematic testing datalabel references,
+! igoring section difference, symbol definition type and offset presence:
+! Datalabel reference plus:
+! (datalabel other file, other file, same file, none)
+! = (1, 2, 3, 4, 12, 13, 23, 123)
+!
+! Definition:
+! (none, same file, other file) = (a, b, c)
+!
+! Combined:
+! = (a1, a2, a3, a4, a12, a13, a23, a123, b1, b2, b3, b4, b12,
+! b13, b23, b123, c1, c2, c3, c4, c12, c13, c23, c123)
+
+ .mode SHmedia
+ .text
+ .global start
+start:
+ nop
+ .global file1text1
+file1text1:
+ nop
+ movi file1text1 & 65535,r10
+ .global file1text2
+file1text2:
+ movi (datalabel file1data2) & 65535,r20
+ .global file1text3
+file1text3:
+ movi file2text3 & 65535,r20
+ .global file1text4
+file1text4:
+ movi file2data4 & 65535,r20
+ .global file1text5
+file1text5:
+ movi unresolved1 & 65535,r40
+ .global b1
+b1:
+ movi unresolved6 & 65535,r30
+ .global b2
+b2:
+ movi (datalabel file1text1) & 65535,r10
+ .global b3
+b3:
+ movi (datalabel file1text1 + 24) & 65535,r10
+ .global b4
+b4:
+ movi (datalabel file1text5 + 8) & 65535, r40
+ .global b12
+b12:
+ movi (datalabel file1data2 + 48) & 65535,r20
+ .global b13
+b13:
+ movi file1data2 & 65535,r20
+ .global b23
+b23:
+ movi (datalabel file2data4 + 16),r50
+ .global b123
+b123:
+ movi (datalabel unresolved7) & 65535,r60
+ .global oc1
+oc1:
+ movi (datalabel unresolved1) & 65535,r60
+ .global oc2
+oc2:
+ nop
+ .global oc3
+oc3:
+ nop
+ .global oc4
+oc4:
+ nop
+ .global oc12
+oc12:
+ nop
+ .global oc13
+oc13:
+ nop
+ .global oc23
+oc23:
+ nop
+ .global oc123
+oc123:
+ nop
+
+ .data
+ .long 0
+ .global file1data1
+file1data1:
+ .long 0
+ .long datalabel file1data1 + 8
+ .global file1data2
+file1data2:
+ .long file1text2
+ .global file1data3
+file1data3:
+ .long file2data3
+ .global file1data4
+file1data4:
+ .long file2text4
+ .global file1data5
+file1data5:
+ .long unresolved2
+ .long unresolved5
+ .long datalabel unresolved6 + 40
+ .long unresolved9
+
+ .long datalabel a1
+ .long a23
+ .long b123
+ .long c3
+ .long c13
+ .long datalabel a2
+ .long datalabel a3
+ .long datalabel a4
+ .long datalabel a12
+ .long datalabel a13
+ .long datalabel a23
+ .long datalabel a123
+ .long datalabel b1
+ .long datalabel b2
+ .long a3
+ .long a13
+ .long datalabel b3
+ .long datalabel b4
+ .long datalabel b12
+ .long datalabel b13
+ .long a123
+ .long b3
+ .long b13
+ .long b23
+ .long datalabel b23
+ .long datalabel b123
+ .long datalabel c1
+ .long datalabel c2
+ .long datalabel c3
+ .long c23
+ .long c123
+ .long datalabel c4
+ .long datalabel c12
+ .long datalabel c13
+ .long datalabel c23
+ .long datalabel c123
+
+
+ .long datalabel oa1
+ .long datalabel ob1
+ .long ob123
+ .long datalabel oc1
+ .long oa2
+ .long ob2
+ .long oc2
+ .long oa12
+ .long datalabel oa12
+ .long datalabel ob12
+ .long ob12
+ .long datalabel oc12
+ .long oc12
+ .long oa23
+ .long datalabel oa13
+ .long oc123
+ .long datalabel ob13
+ .long datalabel oc13
+ .long ob23
+ .long oc23
+ .long oa123
+ .long datalabel oa123
+ .long datalabel ob123
+ .long datalabel oc123
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/reldl-2.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/reldl-2.s
new file mode 100644
index 0000000..d632021
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/reldl-2.s
@@ -0,0 +1,156 @@
+! Relative linking with datalabel use, second file. Much like rel-2.s
+
+ .mode SHmedia
+ .text
+ .global start2
+start2:
+ nop
+ .global file2text1
+file2text1:
+ nop
+ movi file2text1 & 65535,r10
+ .global file2text2
+file2text2:
+ movi file2data2 & 65535,r20
+ .global file2text3
+file2text3:
+ movi file1text3 & 65535,r20
+ .global file2text4
+file2text4:
+ movi file1data4 & 65535,r20
+ movi unresolved1 & 65535,r30
+ movi unresolved3 & 65535,r30
+ movi datalabel unresolved8 & 65535,r50
+ movi datalabel unresolved9 & 65535,r50
+ movi datalabel file1text1 & 65535,r40
+ movi datalabel file1data2 & 65535,r40
+ movi datalabel file1data3 & 65535,r40
+ .global c1
+c1:
+ nop
+ .global c2
+c2:
+ nop
+ .global c3
+c3:
+ nop
+ .global c4
+c4:
+ nop
+ .global c12
+c12:
+ nop
+ .global c13
+c13:
+ nop
+ .global c23
+c23:
+ nop
+ .global c123
+c123:
+ nop
+
+ .global ob1
+ob1:
+ nop
+ .global ob2
+ob2:
+ nop
+ .global ob3
+ob3:
+ nop
+ .global ob4
+ob4:
+ nop
+ .global ob12
+ob12:
+ nop
+ .global ob13
+ob13:
+ nop
+ .global ob23
+ob23:
+ nop
+ .global ob123
+ob123:
+ nop
+
+ .data
+ .long 0
+ .global file2data1
+file2data1:
+ .long 0
+ .long file2data1
+ .global file2data2
+file2data2:
+ .long file2text2
+ .global file2data3
+file2data3:
+ .long file1data3
+ .global file2data4
+file2data4:
+ .long file1text4
+ .long unresolved2
+ .long unresolved4
+
+ .long datalabel oa1
+ .long datalabel oa2
+ .long datalabel oa3
+ .long oa13
+ .long oc13
+ .long datalabel oa4
+ .long datalabel oa12
+ .long datalabel oa13
+ .long datalabel oa23
+ .long oa23
+ .long oa123
+ .long oc3
+ .long datalabel oa123
+ .long datalabel ob1
+ .long datalabel ob2
+ .long datalabel ob3
+ .long datalabel ob4
+ .long oa3
+ .long oc23
+ .long oc123
+ .long datalabel ob12
+ .long datalabel ob13
+ .long ob13
+ .long ob23
+ .long datalabel ob23
+ .long datalabel ob123
+ .long datalabel oc1
+ .long ob3
+ .long ob123
+ .long datalabel oc2
+ .long datalabel oc3
+ .long datalabel oc4
+ .long datalabel oc12
+ .long datalabel oc13
+ .long datalabel oc23
+ .long datalabel oc123
+
+ .long datalabel a1
+ .long c2
+ .long b23
+ .long datalabel b1
+ .long datalabel c1
+ .long datalabel a12
+ .long a2
+ .long b2
+ .long datalabel b12
+ .long datalabel c12
+ .long b123
+ .long c123
+ .long datalabel a13
+ .long datalabel b13
+ .long c23
+ .long a123
+ .long datalabel c13
+ .long datalabel a123
+ .long c12
+ .long a23
+ .long datalabel b123
+ .long a12
+ .long b12
+ .long datalabel c123
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/reldl32.rd b/binutils-2.21/ld/testsuite/ld-sh/sh64/reldl32.rd
new file mode 100644
index 0000000..400e2af
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/reldl32.rd
@@ -0,0 +1,358 @@
+
+Relocation section '\.rela\.text' at offset 0x[0-9a-f]+ contains 26 entries:
+.*
+00000008 +0+5bf6 R_SH_IMM_LOW16 +00000004 +file1text1 +\+ 0
+0000000c +0+2df6 R_SH_IMM_LOW16 +0000000c +file1data2 +\+ 0
+00000010 +0+30f6 R_SH_IMM_LOW16 +00000070 +file2text3 +\+ 0
+00000014 +0+0ff6 R_SH_IMM_LOW16 +0000012c +file2data4 +\+ 0
+00000018 +0+4cf6 R_SH_IMM_LOW16 +00000000 +unresolved1 +\+ 0
+0000001c +0+51f6 R_SH_IMM_LOW16 +00000000 +unresolved6 +\+ 0
+00000020 +0+5df6 R_SH_IMM_LOW16 +00000000 +file1text1 +\+ 0
+00000024 +0+5df6 R_SH_IMM_LOW16 +00000000 +file1text1 +\+ 18
+00000028 +0+21f6 R_SH_IMM_LOW16 +00000000 +file1text5 +\+ 8
+0000002c +0+2df6 R_SH_IMM_LOW16 +0000000c +file1data2 +\+ 30
+00000030 +0+2df6 R_SH_IMM_LOW16 +0000000c +file1data2 +\+ 0
+0000003c +0+42f6 R_SH_IMM_LOW16 +00000000 +unresolved7 +\+ 0
+00000040 +0+27f6 R_SH_IMM_LOW16 +00000000 +unresolved1 +\+ 0
+00000034 +0+35f8 R_SH_IMM_MEDLOW16 +00000000 +file2data4 +\+ 10
+00000038 +0+35f6 R_SH_IMM_LOW16 +00000000 +file2data4 +\+ 10
+00000068 +0+08f6 R_SH_IMM_LOW16 +00000064 +file2text1 +\+ 0
+0000006c +0+24f6 R_SH_IMM_LOW16 +00000124 +file2data2 +\+ 0
+00000070 +0+23f6 R_SH_IMM_LOW16 +00000010 +file1text3 +\+ 0
+00000074 +0+81f6 R_SH_IMM_LOW16 +00000014 +file1data4 +\+ 0
+00000078 +0+4cf6 R_SH_IMM_LOW16 +00000000 +unresolved1 +\+ 0
+0000007c +0+64f6 R_SH_IMM_LOW16 +00000000 +unresolved3 +\+ 0
+00000080 +0+85f6 R_SH_IMM_LOW16 +00000000 +unresolved8 +\+ 0
+00000084 +0+32f6 R_SH_IMM_LOW16 +00000000 +unresolved9 +\+ 0
+00000088 +0+5df6 R_SH_IMM_LOW16 +00000000 +file1text1 +\+ 0
+0000008c +0+4bf6 R_SH_IMM_LOW16 +00000000 +file1data2 +\+ 0
+00000090 +0+28f6 R_SH_IMM_LOW16 +00000000 +file1data3 +\+ 0
+
+Relocation section '\.rela\.data' at offset 0x[0-9a-f]+ contains 134 entries:
+.*
+00000008 +0+0b01 R_SH_DIR32 +00000004 +file1data1 +\+ 0
+0000000c +0+0701 R_SH_DIR32 +0000000c +file1text2 +\+ 0
+00000010 +0+7801 R_SH_DIR32 +00000128 +file2data3 +\+ 0
+00000014 +0+6701 R_SH_DIR32 +00000074 +file2text4 +\+ 0
+00000018 +0+7401 R_SH_DIR32 +00000000 +unresolved2 +\+ 0
+0000001c +0+0501 R_SH_DIR32 +00000000 +unresolved5 +\+ 0
+00000020 +0+6c01 R_SH_DIR32 +00000000 +unresolved6 +\+ 0
+00000024 +0+0601 R_SH_DIR32 +00000000 +unresolved9 +\+ 0
+00000028 +0+7a01 R_SH_DIR32 +00000000 +a1 +\+ 0
+0000002c +0+7001 R_SH_DIR32 +00000000 +a23 +\+ 0
+00000030 +0+5401 R_SH_DIR32 +0000003c +b123 +\+ 0
+00000034 +0+6a01 R_SH_DIR32 +0000009c +c3 +\+ 0
+00000038 +0+3c01 R_SH_DIR32 +000000a8 +c13 +\+ 0
+0000003c +0+2601 R_SH_DIR32 +00000000 +a2 +\+ 0
+00000040 +0+4e01 R_SH_DIR32 +00000000 +a3 +\+ 0
+00000044 +0+2501 R_SH_DIR32 +00000000 +a4 +\+ 0
+00000048 +0+6901 R_SH_DIR32 +00000000 +a12 +\+ 0
+0000004c +0+1501 R_SH_DIR32 +00000000 +a13 +\+ 0
+00000050 +0+7601 R_SH_DIR32 +00000000 +a23 +\+ 0
+00000054 +0+6201 R_SH_DIR32 +00000000 +a123 +\+ 0
+00000058 +0+3d01 R_SH_DIR32 +00000000 +b1 +\+ 0
+0000005c +0+7101 R_SH_DIR32 +00000000 +b2 +\+ 0
+00000060 +0+2f01 R_SH_DIR32 +00000000 +a3 +\+ 0
+00000064 +0+7f01 R_SH_DIR32 +00000000 +a13 +\+ 0
+00000068 +0+2e01 R_SH_DIR32 +00000000 +b3 +\+ 0
+0000006c +0+6801 R_SH_DIR32 +00000000 +b4 +\+ 0
+00000070 +0+5201 R_SH_DIR32 +00000000 +b12 +\+ 0
+00000074 +0+2901 R_SH_DIR32 +00000000 +b13 +\+ 0
+00000078 +0+3e01 R_SH_DIR32 +00000000 +a123 +\+ 0
+0000007c +0+6501 R_SH_DIR32 +00000024 +b3 +\+ 0
+00000080 +0+3b01 R_SH_DIR32 +00000030 +b13 +\+ 0
+00000084 +0+6f01 R_SH_DIR32 +00000034 +b23 +\+ 0
+00000088 +0+7d01 R_SH_DIR32 +00000000 +b23 +\+ 0
+0000008c +0+0c01 R_SH_DIR32 +00000000 +b123 +\+ 0
+00000090 +0+8301 R_SH_DIR32 +00000000 +c1 +\+ 0
+00000094 +0+2c01 R_SH_DIR32 +00000000 +c2 +\+ 0
+00000098 +0+6301 R_SH_DIR32 +00000000 +c3 +\+ 0
+0000009c +0+3901 R_SH_DIR32 +000000ac +c23 +\+ 0
+000000a0 +0+7e01 R_SH_DIR32 +000000b0 +c123 +\+ 0
+000000a4 +0+0e01 R_SH_DIR32 +00000000 +c4 +\+ 0
+000000a8 +0+2001 R_SH_DIR32 +00000000 +c12 +\+ 0
+000000ac +0+3101 R_SH_DIR32 +00000000 +c13 +\+ 0
+000000b0 +0+3601 R_SH_DIR32 +00000000 +c23 +\+ 0
+000000b4 +0+3a01 R_SH_DIR32 +00000000 +c123 +\+ 0
+000000b8 +0+4801 R_SH_DIR32 +00000000 +oa1 +\+ 0
+000000bc +0+1401 R_SH_DIR32 +00000000 +ob1 +\+ 0
+000000c0 +0+4401 R_SH_DIR32 +000000d0 +ob123 +\+ 0
+000000c4 +0+5901 R_SH_DIR32 +00000000 +oc1 +\+ 0
+000000c8 +0+7901 R_SH_DIR32 +00000000 +oa2 +\+ 0
+000000cc +0+6101 R_SH_DIR32 +000000b8 +ob2 +\+ 0
+000000d0 +0+7201 R_SH_DIR32 +00000044 +oc2 +\+ 0
+000000d4 +0+4901 R_SH_DIR32 +00000000 +oa12 +\+ 0
+000000d8 +0+1b01 R_SH_DIR32 +00000000 +oa12 +\+ 0
+000000dc +0+6001 R_SH_DIR32 +00000000 +ob12 +\+ 0
+000000e0 +0+4a01 R_SH_DIR32 +000000c4 +ob12 +\+ 0
+000000e4 +0+5a01 R_SH_DIR32 +00000000 +oc12 +\+ 0
+000000e8 +0+1201 R_SH_DIR32 +00000050 +oc12 +\+ 0
+000000ec +0+3f01 R_SH_DIR32 +00000000 +oa23 +\+ 0
+000000f0 +0+4501 R_SH_DIR32 +00000000 +oa13 +\+ 0
+000000f4 +0+0a01 R_SH_DIR32 +0000005c +oc123 +\+ 0
+000000f8 +0+5501 R_SH_DIR32 +00000000 +ob13 +\+ 0
+000000fc +0+5c01 R_SH_DIR32 +00000000 +oc13 +\+ 0
+00000100 +0+8201 R_SH_DIR32 +000000cc +ob23 +\+ 0
+00000104 +0+2b01 R_SH_DIR32 +00000058 +oc23 +\+ 0
+00000108 +0+5701 R_SH_DIR32 +00000000 +oa123 +\+ 0
+0000010c +0+5001 R_SH_DIR32 +00000000 +oa123 +\+ 0
+00000110 +0+6601 R_SH_DIR32 +00000000 +ob123 +\+ 0
+00000114 +0+3301 R_SH_DIR32 +00000000 +oc123 +\+ 0
+00000120 +0+7c01 R_SH_DIR32 +0000011c +file2data1 +\+ 0
+00000124 +0+5e01 R_SH_DIR32 +0000006c +file2text2 +\+ 0
+00000128 +0+8001 R_SH_DIR32 +00000010 +file1data3 +\+ 0
+0000012c +0+7701 R_SH_DIR32 +00000014 +file1text4 +\+ 0
+00000130 +0+7401 R_SH_DIR32 +00000000 +unresolved2 +\+ 0
+00000134 +0+7b01 R_SH_DIR32 +00000000 +unresolved4 +\+ 0
+00000138 +0+4801 R_SH_DIR32 +00000000 +oa1 +\+ 0
+0000013c +0+1701 R_SH_DIR32 +00000000 +oa2 +\+ 0
+00000140 +0+6d01 R_SH_DIR32 +00000000 +oa3 +\+ 0
+00000144 +0+1c01 R_SH_DIR32 +00000000 +oa13 +\+ 0
+00000148 +0+1901 R_SH_DIR32 +00000054 +oc13 +\+ 0
+0000014c +0+1001 R_SH_DIR32 +00000000 +oa4 +\+ 0
+00000150 +0+1b01 R_SH_DIR32 +00000000 +oa12 +\+ 0
+00000154 +0+4501 R_SH_DIR32 +00000000 +oa13 +\+ 0
+00000158 +0+3801 R_SH_DIR32 +00000000 +oa23 +\+ 0
+0000015c +0+3f01 R_SH_DIR32 +00000000 +oa23 +\+ 0
+00000160 +0+5701 R_SH_DIR32 +00000000 +oa123 +\+ 0
+00000164 +0+1601 R_SH_DIR32 +00000048 +oc3 +\+ 0
+00000168 +0+5001 R_SH_DIR32 +00000000 +oa123 +\+ 0
+0000016c +0+1401 R_SH_DIR32 +00000000 +ob1 +\+ 0
+00000170 +0+2201 R_SH_DIR32 +00000000 +ob2 +\+ 0
+00000174 +0+5f01 R_SH_DIR32 +00000000 +ob3 +\+ 0
+00000178 +0+1301 R_SH_DIR32 +00000000 +ob4 +\+ 0
+0000017c +0+8401 R_SH_DIR32 +00000000 +oa3 +\+ 0
+00000180 +0+2b01 R_SH_DIR32 +00000058 +oc23 +\+ 0
+00000184 +0+0a01 R_SH_DIR32 +0000005c +oc123 +\+ 0
+00000188 +0+6001 R_SH_DIR32 +00000000 +ob12 +\+ 0
+0000018c +0+5501 R_SH_DIR32 +00000000 +ob13 +\+ 0
+00000190 +0+4d01 R_SH_DIR32 +000000c8 +ob13 +\+ 0
+00000194 +0+8201 R_SH_DIR32 +000000cc +ob23 +\+ 0
+00000198 +0+5801 R_SH_DIR32 +00000000 +ob23 +\+ 0
+0000019c +0+6601 R_SH_DIR32 +00000000 +ob123 +\+ 0
+000001a0 +0+5901 R_SH_DIR32 +00000000 +oc1 +\+ 0
+000001a4 +0+1101 R_SH_DIR32 +000000bc +ob3 +\+ 0
+000001a8 +0+4401 R_SH_DIR32 +000000d0 +ob123 +\+ 0
+000001ac +0+0901 R_SH_DIR32 +00000000 +oc2 +\+ 0
+000001b0 +0+3701 R_SH_DIR32 +00000000 +oc3 +\+ 0
+000001b4 +0+5301 R_SH_DIR32 +00000000 +oc4 +\+ 0
+000001b8 +0+5a01 R_SH_DIR32 +00000000 +oc12 +\+ 0
+000001bc +0+5c01 R_SH_DIR32 +00000000 +oc13 +\+ 0
+000001c0 +0+2a01 R_SH_DIR32 +00000000 +oc23 +\+ 0
+000001c4 +0+3301 R_SH_DIR32 +00000000 +oc123 +\+ 0
+000001c8 +0+7a01 R_SH_DIR32 +00000000 +a1 +\+ 0
+000001cc +0+1a01 R_SH_DIR32 +00000098 +c2 +\+ 0
+000001d0 +0+6f01 R_SH_DIR32 +00000034 +b23 +\+ 0
+000001d4 +0+3d01 R_SH_DIR32 +00000000 +b1 +\+ 0
+000001d8 +0+8301 R_SH_DIR32 +00000000 +c1 +\+ 0
+000001dc +0+6901 R_SH_DIR32 +00000000 +a12 +\+ 0
+000001e0 +0+5601 R_SH_DIR32 +00000000 +a2 +\+ 0
+000001e4 +0+0d01 R_SH_DIR32 +00000020 +b2 +\+ 0
+000001e8 +0+5201 R_SH_DIR32 +00000000 +b12 +\+ 0
+000001ec +0+2001 R_SH_DIR32 +00000000 +c12 +\+ 0
+000001f0 +0+5401 R_SH_DIR32 +0000003c +b123 +\+ 0
+000001f4 +0+7e01 R_SH_DIR32 +000000b0 +c123 +\+ 0
+000001f8 +0+1501 R_SH_DIR32 +00000000 +a13 +\+ 0
+000001fc +0+2901 R_SH_DIR32 +00000000 +b13 +\+ 0
+00000200 +0+3901 R_SH_DIR32 +000000ac +c23 +\+ 0
+00000204 +0+3e01 R_SH_DIR32 +00000000 +a123 +\+ 0
+00000208 +0+3101 R_SH_DIR32 +00000000 +c13 +\+ 0
+0000020c +0+6201 R_SH_DIR32 +00000000 +a123 +\+ 0
+00000210 +0+6e01 R_SH_DIR32 +000000a4 +c12 +\+ 0
+00000214 +0+7001 R_SH_DIR32 +00000000 +a23 +\+ 0
+00000218 +0+0c01 R_SH_DIR32 +00000000 +b123 +\+ 0
+0000021c +0+4001 R_SH_DIR32 +00000000 +a12 +\+ 0
+00000220 +0+7301 R_SH_DIR32 +0000002c +b12 +\+ 0
+00000224 +0+3a01 R_SH_DIR32 +00000000 +c123 +\+ 0
+
+Symbol table '\.symtab' contains 134 entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +0: 00000000 +0 +NOTYPE +LOCAL +DEFAULT +UND
+ +1: 00000000 +0 +SECTION +LOCAL +DEFAULT +1
+ +2: 00000000 +0 +SECTION +LOCAL +DEFAULT +3
+ +3: 00000000 +0 +SECTION +LOCAL +DEFAULT +5
+ +4: 00000000 +0 +SECTION +LOCAL +DEFAULT +6
+ +5: 00000000 +0 +NOTYPE +GLOBAL +DEFAULT +UND unresolved5
+ +6: 00000000 +0 +NOTYPE +GLOBAL +DEFAULT +UND unresolved9
+ +7: 0000000c +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 file1text2
+ +8: 00000064 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 file2text1
+ +9: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oc2
+ +10: 0000005c +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 oc123
+ +11: 00000004 +0 +NOTYPE +GLOBAL +DEFAULT +3 file1data1
+ +12: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND b123
+ +13: 00000020 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 b2
+ +14: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND c4
+ +15: 0000012c +0 +NOTYPE +GLOBAL +DEFAULT +3 file2data4
+ +16: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oa4
+ +17: 000000bc +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 ob3
+ +18: 00000050 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 oc12
+ +19: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND ob4
+ +20: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND ob1
+ +21: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND a13
+ +22: 00000048 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 oc3
+ +23: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oa2
+ +24: 000000a0 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 c4
+ +25: 00000054 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 oc13
+ +26: 00000098 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 c2
+ +27: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oa12
+ +28: 00000000 +0 +NOTYPE +GLOBAL +DEFAULT +UND oa13
+ +29: 000000c0 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 ob4
+ +30: 0000001c +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 b1
+ +31: 00000018 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 file1text5
+ +32: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND c12
+ +33: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND file1text5
+ +34: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND ob2
+ +35: 00000010 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 file1text3
+ +36: 00000124 +0 +NOTYPE +GLOBAL +DEFAULT +3 file2data2
+ +37: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND a4
+ +38: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND a2
+ +39: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND unresolved1
+ +40: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND file1data3
+ +41: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND b13
+ +42: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oc23
+ +43: 00000058 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 oc23
+ +44: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND c2
+ +45: 0000000c +0 +NOTYPE +GLOBAL +DEFAULT +3 file1data2
+ +46: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND b3
+ +47: 00000000 +0 +NOTYPE +GLOBAL +DEFAULT +UND a3
+ +48: 00000070 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 file2text3
+ +49: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND c13
+ +50: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND unresolved9
+ +51: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oc123
+ +52: 00000028 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 b4
+ +53: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND file2data4
+ +54: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND c23
+ +55: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oc3
+ +56: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oa23
+ +57: 000000ac +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 c23
+ +58: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND c123
+ +59: 00000030 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 b13
+ +60: 000000a8 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 c13
+ +61: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND b1
+ +62: 00000000 +0 +NOTYPE +GLOBAL +DEFAULT +UND a123
+ +63: 00000000 +0 +NOTYPE +GLOBAL +DEFAULT +UND oa23
+ +64: 00000000 +0 +NOTYPE +GLOBAL +DEFAULT +UND a12
+ +65: 000000b4 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 ob1
+ +66: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND unresolved7
+ +67: 00000060 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 start2
+ +68: 000000d0 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 ob123
+ +69: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oa13
+ +70: 00000094 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 c1
+ +71: 0000004c +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 oc4
+ +72: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oa1
+ +73: 00000000 +0 +NOTYPE +GLOBAL +DEFAULT +UND oa12
+ +74: 000000c4 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 ob12
+ +75: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND file1data2
+ +76: 00000000 +0 +NOTYPE +GLOBAL +DEFAULT +UND unresolved1
+ +77: 000000c8 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 ob13
+ +78: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND a3
+ +79: 00000018 +0 +NOTYPE +GLOBAL +DEFAULT +3 file1data5
+ +80: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oa123
+ +81: 00000000 +0 +NOTYPE +GLOBAL +DEFAULT +UND unresolved6
+ +82: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND b12
+ +83: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oc4
+ +84: 0000003c +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 b123
+ +85: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND ob13
+ +86: 00000000 +0 +NOTYPE +GLOBAL +DEFAULT +UND a2
+ +87: 00000000 +0 +NOTYPE +GLOBAL +DEFAULT +UND oa123
+ +88: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND ob23
+ +89: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oc1
+ +90: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oc12
+ +91: 00000004 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 file1text1
+ +92: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oc13
+ +93: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND file1text1
+ +94: 0000006c +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 file2text2
+ +95: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND ob3
+ +96: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND ob12
+ +97: 000000b8 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 ob2
+ +98: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND a123
+ +99: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND c3
+ +100: 00000000 +0 +NOTYPE +GLOBAL +DEFAULT +UND unresolved3
+ +101: 00000024 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 b3
+ +102: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND ob123
+ +103: 00000074 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 file2text4
+ +104: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND b4
+ +105: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND a12
+ +106: 0000009c +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 c3
+ +107: 00000040 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 oc1
+ +108: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND unresolved6
+ +109: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oa3
+ +110: 000000a4 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 c12
+ +111: 00000034 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 b23
+ +112: 00000000 +0 +NOTYPE +GLOBAL +DEFAULT +UND a23
+ +113: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND b2
+ +114: 00000044 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 oc2
+ +115: 0000002c +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 b12
+ +116: 00000000 +0 +NOTYPE +GLOBAL +DEFAULT +UND unresolved2
+ +117: 00000000 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 start
+ +118: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND a23
+ +119: 00000014 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 file1text4
+ +120: 00000128 +0 +NOTYPE +GLOBAL +DEFAULT +3 file2data3
+ +121: 00000000 +0 +NOTYPE +GLOBAL +DEFAULT +UND oa2
+ +122: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND a1
+ +123: 00000000 +0 +NOTYPE +GLOBAL +DEFAULT +UND unresolved4
+ +124: 0000011c +0 +NOTYPE +GLOBAL +DEFAULT +3 file2data1
+ +125: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND b23
+ +126: 000000b0 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 c123
+ +127: 00000000 +0 +NOTYPE +GLOBAL +DEFAULT +UND a13
+ +128: 00000010 +0 +NOTYPE +GLOBAL +DEFAULT +3 file1data3
+ +129: 00000014 +0 +NOTYPE +GLOBAL +DEFAULT +3 file1data4
+ +130: 000000cc +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 ob23
+ +131: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND c1
+ +132: 00000000 +0 +NOTYPE +GLOBAL +DEFAULT +UND oa3
+ +133: 00000000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND unresolved8
+
+Hex dump of section '\.text':
+.*
+ 0x00000000 6ff0fff0 6ff0fff0 cc0000a0 cc000140 .*
+ 0x00000010 cc000140 cc000140 cc000280 cc0001e0 .*
+ 0x00000020 cc0000a0 cc0000a0 cc000280 cc000140 .*
+ 0x00000030 cc000140 cc000320 c8000320 cc0003c0 .*
+ 0x00000040 cc0003c0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x00000050 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x00000060 6ff0fff0 6ff0fff0 cc0000a0 cc000140 .*
+ 0x00000070 cc000140 cc000140 cc0001e0 cc0001e0 .*
+ 0x00000080 cc000320 cc000320 cc000280 cc000280 .*
+ 0x00000090 cc000280 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x000000a0 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x000000b0 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x000000c0 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x000000d0 6ff0fff0 .*
+
+Hex dump of section '\.data':
+.*
+ 0x00000000 00000000 00000000 00000008 00000000 .*
+ 0x00000010 00000000 00000000 00000000 00000000 .*
+ 0x00000020 00000028 00000000 00000000 00000000 .*
+ 0x00000030 00000000 00000000 00000000 00000000 .*
+ 0x00000040 00000000 00000000 00000000 00000000 .*
+ 0x00000050 00000000 00000000 00000000 00000000 .*
+ 0x00000060 00000000 00000000 00000000 00000000 .*
+ 0x00000070 00000000 00000000 00000000 00000000 .*
+ 0x00000080 00000000 00000000 00000000 00000000 .*
+ 0x00000090 00000000 00000000 00000000 00000000 .*
+ 0x000000a0 00000000 00000000 00000000 00000000 .*
+ 0x000000b0 00000000 00000000 00000000 00000000 .*
+ 0x000000c0 00000000 00000000 00000000 00000000 .*
+ 0x000000d0 00000000 00000000 00000000 00000000 .*
+ 0x000000e0 00000000 00000000 00000000 00000000 .*
+ 0x000000f0 00000000 00000000 00000000 00000000 .*
+ 0x00000100 00000000 00000000 00000000 00000000 .*
+ 0x00000110 00000000 00000000 00000000 00000000 .*
+ 0x00000120 00000000 00000000 00000000 00000000 .*
+ 0x00000130 00000000 00000000 00000000 00000000 .*
+ 0x00000140 00000000 00000000 00000000 00000000 .*
+ 0x00000150 00000000 00000000 00000000 00000000 .*
+ 0x00000160 00000000 00000000 00000000 00000000 .*
+ 0x00000170 00000000 00000000 00000000 00000000 .*
+ 0x00000180 00000000 00000000 00000000 00000000 .*
+ 0x00000190 00000000 00000000 00000000 00000000 .*
+ 0x000001a0 00000000 00000000 00000000 00000000 .*
+ 0x000001b0 00000000 00000000 00000000 00000000 .*
+ 0x000001c0 00000000 00000000 00000000 00000000 .*
+ 0x000001d0 00000000 00000000 00000000 00000000 .*
+ 0x000001e0 00000000 00000000 00000000 00000000 .*
+ 0x000001f0 00000000 00000000 00000000 00000000 .*
+ 0x00000200 00000000 00000000 00000000 00000000 .*
+ 0x00000210 00000000 00000000 00000000 00000000 .*
+ 0x00000220 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/reldl64.rd b/binutils-2.21/ld/testsuite/ld-sh/sh64/reldl64.rd
new file mode 100644
index 0000000..8bd5502
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/reldl64.rd
@@ -0,0 +1,360 @@
+
+Relocation section '\.rela\.text' at offset 0x[0-9a-f]+ contains 28 entries:
+.*
+0+8 +0+5b000000f6 R_SH_IMM_LOW16[ ]+0+4 +file1text1[ ]+\+ 0
+0+c +0+2d000000f6 R_SH_IMM_LOW16[ ]+0+c +file1data2[ ]+\+ 0
+0+10 +0+30000000f6 R_SH_IMM_LOW16[ ]+0+78 +file2text3[ ]+\+ 0
+0+14 +0+0f000000f6 R_SH_IMM_LOW16[ ]+0+12c +file2data4[ ]+\+ 0
+0+18 +0+4c000000f6 R_SH_IMM_LOW16[ ]+0+ +unresolved1[ ]+\+ 0
+0+1c +0+51000000f6 R_SH_IMM_LOW16[ ]+0+ +unresolved6[ ]+\+ 0
+0+20 +0+5d000000f6 R_SH_IMM_LOW16[ ]+0+ +file1text1[ ]+\+ 0
+0+24 +0+5d000000f6 R_SH_IMM_LOW16[ ]+0+ +file1text1[ ]+\+ 18
+0+28 +0+21000000f6 R_SH_IMM_LOW16[ ]+0+ +file1text5[ ]+\+ 8
+0+2c +0+2d000000f6 R_SH_IMM_LOW16[ ]+0+c +file1data2[ ]+\+ 30
+0+30 +0+2d000000f6 R_SH_IMM_LOW16[ ]+0+c +file1data2[ ]+\+ 0
+0+44 +0+42000000f6 R_SH_IMM_LOW16[ ]+0+ +unresolved7[ ]+\+ 0
+0+48 +0+27000000f6 R_SH_IMM_LOW16[ ]+0+ +unresolved1[ ]+\+ 0
+0+34 +0+35000000fc R_SH_IMM_HI16[ ]+0+ +file2data4[ ]+\+ 10
+0+38 +0+35000000fa R_SH_IMM_MEDHI16[ ]+0+ +file2data4[ ]+\+ 10
+0+3c +0+35000000f8 R_SH_IMM_MEDLOW16[ ]+0+ +file2data4[ ]+\+ 10
+0+40 +0+35000000f6 R_SH_IMM_LOW16[ ]+0+ +file2data4[ ]+\+ 10
+0+70 +0+08000000f6 R_SH_IMM_LOW16[ ]+0+6c +file2text1[ ]+\+ 0
+0+74 +0+24000000f6 R_SH_IMM_LOW16[ ]+0+124 +file2data2[ ]+\+ 0
+0+78 +0+23000000f6 R_SH_IMM_LOW16[ ]+0+10 +file1text3[ ]+\+ 0
+0+7c +0+81000000f6 R_SH_IMM_LOW16[ ]+0+14 +file1data4[ ]+\+ 0
+0+80 +0+4c000000f6 R_SH_IMM_LOW16[ ]+0+ +unresolved1[ ]+\+ 0
+0+84 +0+64000000f6 R_SH_IMM_LOW16[ ]+0+ +unresolved3[ ]+\+ 0
+0+88 +0+85000000f6 R_SH_IMM_LOW16[ ]+0+ +unresolved8[ ]+\+ 0
+0+8c +0+32000000f6 R_SH_IMM_LOW16[ ]+0+ +unresolved9[ ]+\+ 0
+0+90 +0+5d000000f6 R_SH_IMM_LOW16[ ]+0+ +file1text1[ ]+\+ 0
+0+94 +0+4b000000f6 R_SH_IMM_LOW16[ ]+0+ +file1data2[ ]+\+ 0
+0+98 +0+28000000f6 R_SH_IMM_LOW16[ ]+0+ +file1data3[ ]+\+ 0
+
+Relocation section '\.rela\.data' at offset 0x[0-9a-f]+ contains 134 entries:
+.*
+0+8 +0+0b00000001 R_SH_DIR32[ ]+0+4 +file1data1[ ]+\+ 0
+0+c +0+700000001 R_SH_DIR32[ ]+0+c +file1text2[ ]+\+ 0
+0+10 +0+7800000001 R_SH_DIR32[ ]+0+128 +file2data3[ ]+\+ 0
+0+14 +0+6700000001 R_SH_DIR32[ ]+0+7c +file2text4[ ]+\+ 0
+0+18 +0+7400000001 R_SH_DIR32[ ]+0+ +unresolved2[ ]+\+ 0
+0+1c +0+0500000001 R_SH_DIR32[ ]+0+ +unresolved5[ ]+\+ 0
+0+20 +0+6c00000001 R_SH_DIR32[ ]+0+ +unresolved6[ ]+\+ 0
+0+24 +0+0600000001 R_SH_DIR32[ ]+0+ +unresolved9[ ]+\+ 0
+0+28 +0+7a00000001 R_SH_DIR32[ ]+0+ +a1[ ]+\+ 0
+0+2c +0+7000000001 R_SH_DIR32[ ]+0+ +a23[ ]+\+ 0
+0+30 +0+5400000001 R_SH_DIR32[ ]+0+44 +b123[ ]+\+ 0
+0+34 +0+6a00000001 R_SH_DIR32[ ]+0+a4 +c3[ ]+\+ 0
+0+38 +0+3c00000001 R_SH_DIR32[ ]+0+b0 +c13[ ]+\+ 0
+0+3c +0+2600000001 R_SH_DIR32[ ]+0+ +a2[ ]+\+ 0
+0+40 +0+4e00000001 R_SH_DIR32[ ]+0+ +a3[ ]+\+ 0
+0+44 +0+2500000001 R_SH_DIR32[ ]+0+ +a4[ ]+\+ 0
+0+48 +0+6900000001 R_SH_DIR32[ ]+0+ +a12[ ]+\+ 0
+0+4c +0+1500000001 R_SH_DIR32[ ]+0+ +a13[ ]+\+ 0
+0+50 +0+7600000001 R_SH_DIR32[ ]+0+ +a23[ ]+\+ 0
+0+54 +0+6200000001 R_SH_DIR32[ ]+0+ +a123[ ]+\+ 0
+0+58 +0+3d00000001 R_SH_DIR32[ ]+0+ +b1[ ]+\+ 0
+0+5c +0+7100000001 R_SH_DIR32[ ]+0+ +b2[ ]+\+ 0
+0+60 +0+2f00000001 R_SH_DIR32[ ]+0+ +a3[ ]+\+ 0
+0+64 +0+7f00000001 R_SH_DIR32[ ]+0+ +a13[ ]+\+ 0
+0+68 +0+2e00000001 R_SH_DIR32[ ]+0+ +b3[ ]+\+ 0
+0+6c +0+6800000001 R_SH_DIR32[ ]+0+ +b4[ ]+\+ 0
+0+70 +0+5200000001 R_SH_DIR32[ ]+0+ +b12[ ]+\+ 0
+0+74 +0+2900000001 R_SH_DIR32[ ]+0+ +b13[ ]+\+ 0
+0+78 +0+3e00000001 R_SH_DIR32[ ]+0+ +a123[ ]+\+ 0
+0+7c +0+6500000001 R_SH_DIR32[ ]+0+24 +b3[ ]+\+ 0
+0+80 +0+3b00000001 R_SH_DIR32[ ]+0+30 +b13[ ]+\+ 0
+0+84 +0+6f00000001 R_SH_DIR32[ ]+0+34 +b23[ ]+\+ 0
+0+88 +0+7d00000001 R_SH_DIR32[ ]+0+ +b23[ ]+\+ 0
+0+8c +0+0c00000001 R_SH_DIR32[ ]+0+ +b123[ ]+\+ 0
+0+90 +0+8300000001 R_SH_DIR32[ ]+0+ +c1[ ]+\+ 0
+0+94 +0+2c00000001 R_SH_DIR32[ ]+0+ +c2[ ]+\+ 0
+0+98 +0+6300000001 R_SH_DIR32[ ]+0+ +c3[ ]+\+ 0
+0+9c +0+3900000001 R_SH_DIR32[ ]+0+b4 +c23[ ]+\+ 0
+0+a0 +0+7e00000001 R_SH_DIR32[ ]+0+b8 +c123[ ]+\+ 0
+0+a4 +0+0e00000001 R_SH_DIR32[ ]+0+ +c4[ ]+\+ 0
+0+a8 +0+2000000001 R_SH_DIR32[ ]+0+ +c12[ ]+\+ 0
+0+ac +0+3100000001 R_SH_DIR32[ ]+0+ +c13[ ]+\+ 0
+0+b0 +0+3600000001 R_SH_DIR32[ ]+0+ +c23[ ]+\+ 0
+0+b4 +0+3a00000001 R_SH_DIR32[ ]+0+ +c123[ ]+\+ 0
+0+b8 +0+4800000001 R_SH_DIR32[ ]+0+ +oa1[ ]+\+ 0
+0+bc +0+1400000001 R_SH_DIR32[ ]+0+ +ob1[ ]+\+ 0
+0+c0 +0+4400000001 R_SH_DIR32[ ]+0+d8 +ob123[ ]+\+ 0
+0+c4 +0+5900000001 R_SH_DIR32[ ]+0+ +oc1[ ]+\+ 0
+0+c8 +0+7900000001 R_SH_DIR32[ ]+0+ +oa2[ ]+\+ 0
+0+cc +0+6100000001 R_SH_DIR32[ ]+0+c0 +ob2[ ]+\+ 0
+0+d0 +0+7200000001 R_SH_DIR32[ ]+0+4c +oc2[ ]+\+ 0
+0+d4 +0+4900000001 R_SH_DIR32[ ]+0+ +oa12[ ]+\+ 0
+0+d8 +0+1b00000001 R_SH_DIR32[ ]+0+ +oa12[ ]+\+ 0
+0+dc +0+6000000001 R_SH_DIR32[ ]+0+ +ob12[ ]+\+ 0
+0+e0 +0+4a00000001 R_SH_DIR32[ ]+0+cc +ob12[ ]+\+ 0
+0+e4 +0+5a00000001 R_SH_DIR32[ ]+0+ +oc12[ ]+\+ 0
+0+e8 +0+1200000001 R_SH_DIR32[ ]+0+58 +oc12[ ]+\+ 0
+0+ec +0+3f00000001 R_SH_DIR32[ ]+0+ +oa23[ ]+\+ 0
+0+f0 +0+4500000001 R_SH_DIR32[ ]+0+ +oa13[ ]+\+ 0
+0+f4 +0+0a00000001 R_SH_DIR32[ ]+0+64 +oc123[ ]+\+ 0
+0+f8 +0+5500000001 R_SH_DIR32[ ]+0+ +ob13[ ]+\+ 0
+0+fc +0+5c00000001 R_SH_DIR32[ ]+0+ +oc13[ ]+\+ 0
+0+100 +0+8200000001 R_SH_DIR32[ ]+0+d4 +ob23[ ]+\+ 0
+0+104 +0+2b00000001 R_SH_DIR32[ ]+0+60 +oc23[ ]+\+ 0
+0+108 +0+5700000001 R_SH_DIR32[ ]+0+ +oa123[ ]+\+ 0
+0+10c +0+5000000001 R_SH_DIR32[ ]+0+ +oa123[ ]+\+ 0
+0+110 +0+6600000001 R_SH_DIR32[ ]+0+ +ob123[ ]+\+ 0
+0+114 +0+3300000001 R_SH_DIR32[ ]+0+ +oc123[ ]+\+ 0
+0+120 +0+7c00000001 R_SH_DIR32[ ]+0+11c +file2data1[ ]+\+ 0
+0+124 +0+5e00000001 R_SH_DIR32[ ]+0+74 +file2text2[ ]+\+ 0
+0+128 +0+8000000001 R_SH_DIR32[ ]+0+10 +file1data3[ ]+\+ 0
+0+12c +0+7700000001 R_SH_DIR32[ ]+0+14 +file1text4[ ]+\+ 0
+0+130 +0+7400000001 R_SH_DIR32[ ]+0+ +unresolved2[ ]+\+ 0
+0+134 +0+7b00000001 R_SH_DIR32[ ]+0+ +unresolved4[ ]+\+ 0
+0+138 +0+4800000001 R_SH_DIR32[ ]+0+ +oa1[ ]+\+ 0
+0+13c +0+1700000001 R_SH_DIR32[ ]+0+ +oa2[ ]+\+ 0
+0+140 +0+6d00000001 R_SH_DIR32[ ]+0+ +oa3[ ]+\+ 0
+0+144 +0+1c00000001 R_SH_DIR32[ ]+0+ +oa13[ ]+\+ 0
+0+148 +0+1900000001 R_SH_DIR32[ ]+0+5c +oc13[ ]+\+ 0
+0+14c +0+1000000001 R_SH_DIR32[ ]+0+ +oa4[ ]+\+ 0
+0+150 +0+1b00000001 R_SH_DIR32[ ]+0+ +oa12[ ]+\+ 0
+0+154 +0+4500000001 R_SH_DIR32[ ]+0+ +oa13[ ]+\+ 0
+0+158 +0+3800000001 R_SH_DIR32[ ]+0+ +oa23[ ]+\+ 0
+0+15c +0+3f00000001 R_SH_DIR32[ ]+0+ +oa23[ ]+\+ 0
+0+160 +0+5700000001 R_SH_DIR32[ ]+0+ +oa123[ ]+\+ 0
+0+164 +0+1600000001 R_SH_DIR32[ ]+0+50 +oc3[ ]+\+ 0
+0+168 +0+5000000001 R_SH_DIR32[ ]+0+ +oa123[ ]+\+ 0
+0+16c +0+1400000001 R_SH_DIR32[ ]+0+ +ob1[ ]+\+ 0
+0+170 +0+2200000001 R_SH_DIR32[ ]+0+ +ob2[ ]+\+ 0
+0+174 +0+5f00000001 R_SH_DIR32[ ]+0+ +ob3[ ]+\+ 0
+0+178 +0+1300000001 R_SH_DIR32[ ]+0+ +ob4[ ]+\+ 0
+0+17c +0+8400000001 R_SH_DIR32[ ]+0+ +oa3[ ]+\+ 0
+0+180 +0+2b00000001 R_SH_DIR32[ ]+0+60 +oc23[ ]+\+ 0
+0+184 +0+0a00000001 R_SH_DIR32[ ]+0+64 +oc123[ ]+\+ 0
+0+188 +0+6000000001 R_SH_DIR32[ ]+0+ +ob12[ ]+\+ 0
+0+18c +0+5500000001 R_SH_DIR32[ ]+0+ +ob13[ ]+\+ 0
+0+190 +0+4d00000001 R_SH_DIR32[ ]+0+d0 +ob13[ ]+\+ 0
+0+194 +0+8200000001 R_SH_DIR32[ ]+0+d4 +ob23[ ]+\+ 0
+0+198 +0+5800000001 R_SH_DIR32[ ]+0+ +ob23[ ]+\+ 0
+0+19c +0+6600000001 R_SH_DIR32[ ]+0+ +ob123[ ]+\+ 0
+0+1a0 +0+5900000001 R_SH_DIR32[ ]+0+ +oc1[ ]+\+ 0
+0+1a4 +0+1100000001 R_SH_DIR32[ ]+0+c4 +ob3[ ]+\+ 0
+0+1a8 +0+4400000001 R_SH_DIR32[ ]+0+d8 +ob123[ ]+\+ 0
+0+1ac +0+0900000001 R_SH_DIR32[ ]+0+ +oc2[ ]+\+ 0
+0+1b0 +0+3700000001 R_SH_DIR32[ ]+0+ +oc3[ ]+\+ 0
+0+1b4 +0+5300000001 R_SH_DIR32[ ]+0+ +oc4[ ]+\+ 0
+0+1b8 +0+5a00000001 R_SH_DIR32[ ]+0+ +oc12[ ]+\+ 0
+0+1bc +0+5c00000001 R_SH_DIR32[ ]+0+ +oc13[ ]+\+ 0
+0+1c0 +0+2a00000001 R_SH_DIR32[ ]+0+ +oc23[ ]+\+ 0
+0+1c4 +0+3300000001 R_SH_DIR32[ ]+0+ +oc123[ ]+\+ 0
+0+1c8 +0+7a00000001 R_SH_DIR32[ ]+0+ +a1[ ]+\+ 0
+0+1cc +0+1a00000001 R_SH_DIR32[ ]+0+a0 +c2[ ]+\+ 0
+0+1d0 +0+6f00000001 R_SH_DIR32[ ]+0+34 +b23[ ]+\+ 0
+0+1d4 +0+3d00000001 R_SH_DIR32[ ]+0+ +b1[ ]+\+ 0
+0+1d8 +0+8300000001 R_SH_DIR32[ ]+0+ +c1[ ]+\+ 0
+0+1dc +0+6900000001 R_SH_DIR32[ ]+0+ +a12[ ]+\+ 0
+0+1e0 +0+5600000001 R_SH_DIR32[ ]+0+ +a2[ ]+\+ 0
+0+1e4 +0+0d00000001 R_SH_DIR32[ ]+0+20 +b2[ ]+\+ 0
+0+1e8 +0+5200000001 R_SH_DIR32[ ]+0+ +b12[ ]+\+ 0
+0+1ec +0+2000000001 R_SH_DIR32[ ]+0+ +c12[ ]+\+ 0
+0+1f0 +0+5400000001 R_SH_DIR32[ ]+0+44 +b123[ ]+\+ 0
+0+1f4 +0+7e00000001 R_SH_DIR32[ ]+0+b8 +c123[ ]+\+ 0
+0+1f8 +0+1500000001 R_SH_DIR32[ ]+0+ +a13[ ]+\+ 0
+0+1fc +0+2900000001 R_SH_DIR32[ ]+0+ +b13[ ]+\+ 0
+0+200 +0+3900000001 R_SH_DIR32[ ]+0+b4 +c23[ ]+\+ 0
+0+204 +0+3e00000001 R_SH_DIR32[ ]+0+ +a123[ ]+\+ 0
+0+208 +0+3100000001 R_SH_DIR32[ ]+0+ +c13[ ]+\+ 0
+0+20c +0+6200000001 R_SH_DIR32[ ]+0+ +a123[ ]+\+ 0
+0+210 +0+6e00000001 R_SH_DIR32[ ]+0+ac +c12[ ]+\+ 0
+0+214 +0+7000000001 R_SH_DIR32[ ]+0+ +a23[ ]+\+ 0
+0+218 +0+0c00000001 R_SH_DIR32[ ]+0+ +b123[ ]+\+ 0
+0+21c +0+4000000001 R_SH_DIR32[ ]+0+ +a12[ ]+\+ 0
+0+220 +0+7300000001 R_SH_DIR32[ ]+0+2c +b12[ ]+\+ 0
+0+224 +0+3a00000001 R_SH_DIR32[ ]+0+ +c123[ ]+\+ 0
+
+Symbol table '\.symtab' contains 134 entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +0: 0+0000 +0 +NOTYPE +LOCAL +DEFAULT +UND
+ +1: 0+0000 +0 +SECTION +LOCAL +DEFAULT +1
+ +2: 0+0000 +0 +SECTION +LOCAL +DEFAULT +3
+ +3: 0+0000 +0 +SECTION +LOCAL +DEFAULT +5
+ +4: 0+0000 +0 +SECTION +LOCAL +DEFAULT +6
+ +5: 0+0000 +0 +NOTYPE +GLOBAL +DEFAULT +UND unresolved5
+ +6: 0+0000 +0 +NOTYPE +GLOBAL +DEFAULT +UND unresolved9
+ +7: 0+000c +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 file1text2
+ +8: 0+006c +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 file2text1
+ +9: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oc2
+ +10: 0+0064 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 oc123
+ +11: 0+0004 +0 +NOTYPE +GLOBAL +DEFAULT +3 file1data1
+ +12: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND b123
+ +13: 0+0020 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 b2
+ +14: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND c4
+ +15: 0+012c +0 +NOTYPE +GLOBAL +DEFAULT +3 file2data4
+ +16: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oa4
+ +17: 0+00c4 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 ob3
+ +18: 0+0058 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 oc12
+ +19: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND ob4
+ +20: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND ob1
+ +21: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND a13
+ +22: 0+0050 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 oc3
+ +23: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oa2
+ +24: 0+00a8 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 c4
+ +25: 0+005c +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 oc13
+ +26: 0+00a0 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 c2
+ +27: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oa12
+ +28: 0+0000 +0 +NOTYPE +GLOBAL +DEFAULT +UND oa13
+ +29: 0+00c8 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 ob4
+ +30: 0+001c +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 b1
+ +31: 0+0018 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 file1text5
+ +32: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND c12
+ +33: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND file1text5
+ +34: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND ob2
+ +35: 0+0010 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 file1text3
+ +36: 0+0124 +0 +NOTYPE +GLOBAL +DEFAULT +3 file2data2
+ +37: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND a4
+ +38: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND a2
+ +39: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND unresolved1
+ +40: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND file1data3
+ +41: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND b13
+ +42: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oc23
+ +43: 0+0060 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 oc23
+ +44: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND c2
+ +45: 0+000c +0 +NOTYPE +GLOBAL +DEFAULT +3 file1data2
+ +46: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND b3
+ +47: 0+0000 +0 +NOTYPE +GLOBAL +DEFAULT +UND a3
+ +48: 0+0078 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 file2text3
+ +49: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND c13
+ +50: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND unresolved9
+ +51: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oc123
+ +52: 0+0028 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 b4
+ +53: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND file2data4
+ +54: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND c23
+ +55: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oc3
+ +56: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oa23
+ +57: 0+00b4 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 c23
+ +58: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND c123
+ +59: 0+0030 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 b13
+ +60: 0+00b0 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 c13
+ +61: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND b1
+ +62: 0+0000 +0 +NOTYPE +GLOBAL +DEFAULT +UND a123
+ +63: 0+0000 +0 +NOTYPE +GLOBAL +DEFAULT +UND oa23
+ +64: 0+0000 +0 +NOTYPE +GLOBAL +DEFAULT +UND a12
+ +65: 0+00bc +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 ob1
+ +66: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND unresolved7
+ +67: 0+0068 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 start2
+ +68: 0+00d8 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 ob123
+ +69: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oa13
+ +70: 0+009c +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 c1
+ +71: 0+0054 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 oc4
+ +72: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oa1
+ +73: 0+0000 +0 +NOTYPE +GLOBAL +DEFAULT +UND oa12
+ +74: 0+00cc +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 ob12
+ +75: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND file1data2
+ +76: 0+0000 +0 +NOTYPE +GLOBAL +DEFAULT +UND unresolved1
+ +77: 0+00d0 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 ob13
+ +78: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND a3
+ +79: 0+0018 +0 +NOTYPE +GLOBAL +DEFAULT +3 file1data5
+ +80: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oa123
+ +81: 0+0000 +0 +NOTYPE +GLOBAL +DEFAULT +UND unresolved6
+ +82: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND b12
+ +83: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oc4
+ +84: 0+0044 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 b123
+ +85: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND ob13
+ +86: 0+0000 +0 +NOTYPE +GLOBAL +DEFAULT +UND a2
+ +87: 0+0000 +0 +NOTYPE +GLOBAL +DEFAULT +UND oa123
+ +88: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND ob23
+ +89: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oc1
+ +90: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oc12
+ +91: 0+0004 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 file1text1
+ +92: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oc13
+ +93: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND file1text1
+ +94: 0+0074 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 file2text2
+ +95: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND ob3
+ +96: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND ob12
+ +97: 0+00c0 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 ob2
+ +98: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND a123
+ +99: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND c3
+ +100: 0+0000 +0 +NOTYPE +GLOBAL +DEFAULT +UND unresolved3
+ +101: 0+0024 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 b3
+ +102: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND ob123
+ +103: 0+007c +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 file2text4
+ +104: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND b4
+ +105: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND a12
+ +106: 0+00a4 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 c3
+ +107: 0+0048 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 oc1
+ +108: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND unresolved6
+ +109: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND oa3
+ +110: 0+00ac +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 c12
+ +111: 0+0034 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 b23
+ +112: 0+0000 +0 +NOTYPE +GLOBAL +DEFAULT +UND a23
+ +113: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND b2
+ +114: 0+004c +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 oc2
+ +115: 0+002c +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 b12
+ +116: 0+0000 +0 +NOTYPE +GLOBAL +DEFAULT +UND unresolved2
+ +117: 0+0000 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 start
+ +118: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND a23
+ +119: 0+0014 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 file1text4
+ +120: 0+0128 +0 +NOTYPE +GLOBAL +DEFAULT +3 file2data3
+ +121: 0+0000 +0 +NOTYPE +GLOBAL +DEFAULT +UND oa2
+ +122: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND a1
+ +123: 0+0000 +0 +NOTYPE +GLOBAL +DEFAULT +UND unresolved4
+ +124: 0+011c +0 +NOTYPE +GLOBAL +DEFAULT +3 file2data1
+ +125: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND b23
+ +126: 0+00b8 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4\] +1 c123
+ +127: 0+0000 +0 +NOTYPE +GLOBAL +DEFAULT +UND a13
+ +128: 0+0010 +0 +NOTYPE +GLOBAL +DEFAULT +3 file1data3
+ +129: 0+0014 +0 +NOTYPE +GLOBAL +DEFAULT +3 file1data4
+ +130: 0+00d4 +0 +NOTYPE +GLOBAL +DEFAULT +\[<other>: 4] +1 ob23
+ +131: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND c1
+ +132: 0+0000 +0 +NOTYPE +GLOBAL +DEFAULT +UND oa3
+ +133: 0+0000 +0 +<processor specific>: 13 +GLOBAL +DEFAULT +UND unresolved8
+
+Hex dump of section '\.text':
+.*
+ 0x00000000 6ff0fff0 6ff0fff0 cc0000a0 cc000140 .*
+ 0x00000010 cc000140 cc000140 cc000280 cc0001e0 .*
+ 0x00000020 cc0000a0 cc0000a0 cc000280 cc000140 .*
+ 0x00000030 cc000140 cc000320 c8000320 c8000320 .*
+ 0x00000040 c8000320 cc0003c0 cc0003c0 6ff0fff0 .*
+ 0x00000050 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x00000060 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x00000070 cc0000a0 cc000140 cc000140 cc000140 .*
+ 0x00000080 cc0001e0 cc0001e0 cc000320 cc000320 .*
+ 0x00000090 cc000280 cc000280 cc000280 6ff0fff0 .*
+ 0x000000a0 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x000000b0 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x000000c0 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 0x000000d0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+
+Hex dump of section '\.data':
+.*
+ 0x00000000 00000000 00000000 00000008 00000000 .*
+ 0x00000010 00000000 00000000 00000000 00000000 .*
+ 0x00000020 00000028 00000000 00000000 00000000 .*
+ 0x00000030 00000000 00000000 00000000 00000000 .*
+ 0x00000040 00000000 00000000 00000000 00000000 .*
+ 0x00000050 00000000 00000000 00000000 00000000 .*
+ 0x00000060 00000000 00000000 00000000 00000000 .*
+ 0x00000070 00000000 00000000 00000000 00000000 .*
+ 0x00000080 00000000 00000000 00000000 00000000 .*
+ 0x00000090 00000000 00000000 00000000 00000000 .*
+ 0x000000a0 00000000 00000000 00000000 00000000 .*
+ 0x000000b0 00000000 00000000 00000000 00000000 .*
+ 0x000000c0 00000000 00000000 00000000 00000000 .*
+ 0x000000d0 00000000 00000000 00000000 00000000 .*
+ 0x000000e0 00000000 00000000 00000000 00000000 .*
+ 0x000000f0 00000000 00000000 00000000 00000000 .*
+ 0x00000100 00000000 00000000 00000000 00000000 .*
+ 0x00000110 00000000 00000000 00000000 00000000 .*
+ 0x00000120 00000000 00000000 00000000 00000000 .*
+ 0x00000130 00000000 00000000 00000000 00000000 .*
+ 0x00000140 00000000 00000000 00000000 00000000 .*
+ 0x00000150 00000000 00000000 00000000 00000000 .*
+ 0x00000160 00000000 00000000 00000000 00000000 .*
+ 0x00000170 00000000 00000000 00000000 00000000 .*
+ 0x00000180 00000000 00000000 00000000 00000000 .*
+ 0x00000190 00000000 00000000 00000000 00000000 .*
+ 0x000001a0 00000000 00000000 00000000 00000000 .*
+ 0x000001b0 00000000 00000000 00000000 00000000 .*
+ 0x000001c0 00000000 00000000 00000000 00000000 .*
+ 0x000001d0 00000000 00000000 00000000 00000000 .*
+ 0x000001e0 00000000 00000000 00000000 00000000 .*
+ 0x000001f0 00000000 00000000 00000000 00000000 .*
+ 0x00000200 00000000 00000000 00000000 00000000 .*
+ 0x00000210 00000000 00000000 00000000 00000000 .*
+ 0x00000220 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/relfail.exp b/binutils-2.21/ld/testsuite/ld-sh/sh64/relfail.exp
new file mode 100644
index 0000000..fbdf80a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/relfail.exp
@@ -0,0 +1,219 @@
+# Expect script for ld-sh tests
+# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007 Free Software Foundation
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# Test SH reloc failures - that is, cases that ld must not allow.
+
+if ![istarget sh64-*-*] {
+ return
+}
+
+if [istarget sh64-*-linux*] {
+ set emul32 "shlelf32_linux"
+ set oformat32 "elf32-sh64-linux"
+ set startsym "_start"
+ set doabi64 0
+} elseif { [istarget sh64*-*-netbsd*] || [istarget sh5*-*-netbsd*] } then {
+ set emul32 "shelf32_nbsd"
+ set oformat32 "elf32-sh64-nbsd"
+ set startsym "__start"
+ set doabi64 1
+ set emul64 "shelf64_nbsd"
+ set oformat64 "elf64-sh64-nbsd"
+} else {
+ set emul32 "shelf32"
+ set oformat32 "elf32-sh64"
+ set startsym "start"
+ set doabi64 1
+ set emul64 "shelf64"
+ set oformat64 "elf64-sh64"
+}
+
+# opcode, asflags, ldflags, expected or "" for fail
+# opcode blank means rebuild relfail.o and set default as/ld options
+
+set sh64abi32relfailtests {
+
+ { "" "-isa=shcompact -abi=32" "-m $emul32 -Ttext 0x1000 --oformat $oformat32" "" }
+ { "mov.l lab,r0;.align 3;lab:nop" "" "" "mov.l 1008" }
+ { "mov.l to0,r0" "" "" "mov.l 1010" }
+ { "mov.l to1,r0" "" "" "" }
+ { "mov.l to2,r0" "" "" "" }
+ { "mov.l to3,r0" "" "" "" }
+ { "mov.l to4,r0" "" "" "mov.l 1014" }
+
+ { "" "-isa=shmedia -abi=32 -no-expand" "-m $emul32 -Ttext 0x1000 --oformat $oformat32" "" }
+ { "pta lab,tr0;.align 3;lab:nop" "" "" "pta.*1008" }
+
+ { "ld.q r0,datalabel to0 - 0x1000,r0" "" "" "ld.q.*,16," }
+ { "ld.q r0,datalabel to1 - 0x1000,r0" "" "" "" }
+ { "ld.q r0,datalabel to2 - 0x1000,r0" "" "" "" }
+ { "ld.q r0,datalabel to3 - 0x1000,r0" "" "" "" }
+ { "ld.q r0,datalabel to4 - 0x1000,r0" "" "" "" }
+
+ { "ld.l r0,datalabel to0 - 0x1000,r0" "" "" "ld.l.*,16," }
+ { "ld.l r0,datalabel to1 - 0x1000,r0" "" "" "" }
+ { "ld.l r0,datalabel to2 - 0x1000,r0" "" "" "" }
+ { "ld.l r0,datalabel to3 - 0x1000,r0" "" "" "" }
+ { "ld.l r0,datalabel to4 - 0x1000,r0" "" "" "ld.l.*,20," }
+
+ { "ld.w r0,datalabel to0 - 0x1000,r0" "" "" "ld.w.*,16," }
+ { "ld.w r0,datalabel to1 - 0x1000,r0" "" "" "" }
+ { "ld.w r0,datalabel to2 - 0x1000,r0" "" "" "ld.w.*,18," }
+ { "ld.w r0,datalabel to3 - 0x1000,r0" "" "" "" }
+ { "ld.w r0,datalabel to4 - 0x1000,r0" "" "" "ld.w.*,20," }
+
+}
+
+set sh64abi64relfailtests {
+
+ { "" "-isa=shmedia -abi=64 -no-expand" "-m $emul64 -Ttext 0x1000 --oformat $oformat64" "" }
+ { "pta lab,tr0;.align 3;lab:nop" "" "" "pta.*1008" }
+ { "pta datalabel to0,tr0" "" "" "pta.*1010" }
+ { "pta datalabel to1,tr0" "" "" "pta.*1011" }
+ { "pta datalabel to2,tr0" "" "" "" }
+ { "pta datalabel to3,tr0" "" "" "" }
+ { "pta datalabel to4,tr0" "" "" "pta.*1014" }
+
+ { "ld.q r0,datalabel to0 - 0x1000,r0" "" "" "ld.q.*,16," }
+ { "ld.q r0,datalabel to1 - 0x1000,r0" "" "" "" }
+ { "ld.q r0,datalabel to2 - 0x1000,r0" "" "" "" }
+ { "ld.q r0,datalabel to3 - 0x1000,r0" "" "" "" }
+ { "ld.q r0,datalabel to4 - 0x1000,r0" "" "" "" }
+
+ { "ld.l r0,datalabel to0 - 0x1000,r0" "" "" "ld.l.*,16," }
+ { "ld.l r0,datalabel to1 - 0x1000,r0" "" "" "" }
+ { "ld.l r0,datalabel to2 - 0x1000,r0" "" "" "" }
+ { "ld.l r0,datalabel to3 - 0x1000,r0" "" "" "" }
+ { "ld.l r0,datalabel to4 - 0x1000,r0" "" "" "ld.l.*,20," }
+
+ { "ld.w r0,datalabel to0 - 0x1000,r0" "" "" "ld.w.*,16," }
+ { "ld.w r0,datalabel to1 - 0x1000,r0" "" "" "" }
+ { "ld.w r0,datalabel to2 - 0x1000,r0" "" "" "ld.w.*,18," }
+ { "ld.w r0,datalabel to3 - 0x1000,r0" "" "" "" }
+ { "ld.w r0,datalabel to4 - 0x1000,r0" "" "" "ld.w.*,20," }
+
+}
+
+proc run_sh64relfailtests {sh64relfailtests} {
+ global ld
+ global as
+ global nm
+ global objdump
+ global readelf
+ global srcdir
+ global subdir
+ global emul32
+ global emul64
+ global oformat32
+ global oformat64
+ global startsym
+
+ set testindex 0
+ set is_unresolved 0
+
+ foreach testentry $sh64relfailtests {
+ set opcode [lindex $testentry 0]
+ set as_options [lindex $testentry 1]
+ set ld_options [subst [lindex $testentry 2]]
+ set expect_fail [lindex $testentry 3]
+
+ set testname "SH64 relfail $opcode $as_options $ld_options"
+
+ set objfiles {}
+
+ incr testindex
+
+ if {$opcode == ""} {
+ set def_as_options $as_options
+ set def_ld_options $ld_options
+ set is_unresolved 0
+ set baseobj "tmpdir/relfail-$testindex.o"
+ if ![ld_assemble $as "$as_options $srcdir/$subdir/relfail.s" $baseobj] {
+ set is_unresolved 1
+ }
+ continue
+ }
+
+ if {$as_options == ""} {
+ set as_options $def_as_options
+ }
+ if {$ld_options == ""} {
+ set ld_options $def_ld_options
+ }
+
+ if { $is_unresolved } {
+ unresolved $testname
+ continue
+ }
+
+ set asm [open "tmpdir/relfail-$testindex.s" "w"]
+ puts $asm " .text"
+ puts $asm " .global $startsym"
+ puts $asm "$startsym:"
+ puts $asm " $opcode"
+ close $asm
+
+ if ![ld_assemble $as "$as_options tmpdir/relfail-$testindex.s" "tmpdir/relfail-$testindex.o"] {
+ unresolved $testname
+ continue
+ }
+
+ set binfile "tmpdir/relfail-$testindex.x"
+
+ file delete $binfile
+ set objects "tmpdir/relfail-$testindex.o $baseobj"
+ set result [ld_simple_link $ld $binfile "--no-warn-mismatch $ld_options $objects"]
+
+ set exists [file exists $binfile]
+ if {$exists && $expect_fail == ""} {
+ verbose "$testname: file $binfile exists when it shouldn't" 1
+ catch "exec $objdump -d $binfile" objdump_output
+ verbose $objdump_output 1
+ fail "$testname (file exists)"
+ continue
+ }
+ if {!$exists && $expect_fail != ""} {
+ verbose "$testname: file $binfile doesn't exist when it should" 1
+ fail "$testname (file missing)"
+ continue
+ }
+
+ if {$exists} {
+ catch "exec $objdump -d $binfile" objdump_output
+ regsub -all {[ ][ ]*} $objdump_output " " objdump_short
+ if ![regexp $expect_fail $objdump_short junk] {
+ verbose $objdump_output 1
+ fail "$testname (incorrect reloc)"
+ continue
+ }
+ }
+
+ file delete "tmpdir/relfail-$testindex.s"
+ file delete "tmpdir/relfail-$testindex.o"
+ file delete $binfile
+ pass $testname
+ }
+}
+
+run_sh64relfailtests $sh64abi32relfailtests
+if {$doabi64} {
+ run_sh64relfailtests $sh64abi64relfailtests
+}
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/relfail.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/relfail.s
new file mode 100644
index 0000000..5f5d171
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/relfail.s
@@ -0,0 +1,36 @@
+ .text
+ .align 4
+ .global to0
+to0:
+ .byte 0
+ .global to1
+to1:
+ .byte 0
+ .global to2
+to2:
+ .byte 0
+ .global to3
+to3:
+ .byte 0
+ .global to4
+to4:
+ .byte 0
+ .byte 0
+
+ .data
+ .align 4
+ .global do0
+do0:
+ .byte 0
+ .global do1
+do1:
+ .byte 0
+ .global do2
+do2:
+ .byte 0
+ .global do3
+do3:
+ .byte 0
+ .global do4
+do4:
+ .byte 0
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/sh64-1.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/sh64-1.s
new file mode 100644
index 0000000..3e488db
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/sh64-1.s
@@ -0,0 +1,20 @@
+! Test that all common kinds of relocs get right for simple use.
+! Auxiliary part.
+ .text
+ .mode SHmedia
+ .global foo
+ .global bar
+foo:
+ pt/l xyzzy,tr3
+bar:
+ nop
+
+ .data
+ .global baz
+baz:
+ .long foobar
+ .long bar
+ .global baz2
+baz2:
+ .long xyzzy
+foobar: .long baz
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/sh64-2.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/sh64-2.s
new file mode 100644
index 0000000..8ca24c0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/sh64-2.s
@@ -0,0 +1,27 @@
+! Test that all common kinds of relocs get right for simple cases.
+! Main part.
+ .text
+ .global start
+ .mode SHmedia
+start:
+ movi foo,r33
+ movi bar,r21
+ pt/l bar,tr3
+ movi foobar,r43
+ movi baz2,r53
+ movi foobar2,r4
+ pta xyzzy,tr5
+ pt/u plugh,tr1
+
+ .data
+ .global foobar
+foobar: .long baz
+foobar2:
+ .long bar
+
+ .section .text.other,"ax"
+ .global xyzzy
+xyzzy:
+ nop
+plugh:
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/sh64.exp b/binutils-2.21/ld/testsuite/ld-sh/sh64/sh64.exp
new file mode 100644
index 0000000..af6cbfe
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/sh64.exp
@@ -0,0 +1,137 @@
+# Expect script for ld-sh tests
+# Copyright (C) 2000, 2001, 2002, 2003, 2005, 2007 Free Software Foundation
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# Test SH linking; all types of relocs. This tests the assembler and
+# tools like objdump as well as the linker.
+
+if ![istarget sh64-*-*] {
+ return
+}
+
+if [istarget sh64*-*-linux*] {
+ return
+}
+
+if { [istarget sh64*-*-netbsd*] || [istarget sh5*-*-netbsd*] } then {
+ return
+}
+
+# List contains test-items with 3 items followed by 2 lists:
+# 0:name 1:ld options 2:assembler options
+# 3:filenames of assembler files 4: action and options. 5: name of output file
+
+# Actions:
+# objdump: Apply objdump options on result. Compare with regex (last arg).
+# nm: Apply nm options on result. Compare with regex (last arg).
+# readelf: Apply readelf options on result. Compare with regex (last arg).
+
+# Note that the contents dump is the same for "inter-file datalabel
+# references, 64-bit ABI" as for 32-bit ABI and ELF so we re-use it.
+
+set sh64tests {
+ {"SH64 linking, 64-bit ABI" "-mshelf64"
+ "--abi=64" {sh64-1.s sh64-2.s}
+ {{objdump -sr abi64.sd} {objdump -x abi64.xd}} "abi64.bin" }
+ {"SH64 linking, 64-bit ABI, -no-expand" "-mshelf64"
+ "--abi=64 -no-expand" {sh64-1.s sh64-2.s}
+ {{objdump -sr abixx-noexp.sd}} "abi64-noexp.bin" }
+ {"SH64 linking, 32-bit ABI" "-mshelf32"
+ "--abi=32" {sh64-1.s sh64-2.s}
+ {{objdump -sr abi32.sd} {objdump -x abi32.xd}} "abi32.bin" }
+ {"SH64 linking, 32-bit ABI, -no-expand" "-mshelf32"
+ "--abi=32 -no-expand" {sh64-1.s sh64-2.s}
+ {{objdump -sr abixx-noexp.sd}} "abi32-noexp.bin" }
+ {"SH64 linking, single multi-ISA object" "-mshelf32"
+ "--abi=32" {shmix-1.s}
+ {{objdump -sr mix1.sd} {objdump -x mix1.xd}} "mix1.bin" }
+ {"SH64 linking, single multi-ISA object, -no-expand" "-mshelf32"
+ "--abi=32 -no-expand" {shmix-1.s}
+ {{objdump -sr mix1-noexp.sd}} "mix1-noexp.bin" }
+ {"SH64 linking, two different-ISA objects" "-mshelf32"
+ "--abi=32" {shmix-2.s shmix-3.s}
+ {{objdump -sr mix2.sd} {objdump -x mix2.xd}} "mix2.bin" }
+ {"SH64 linking, two different-ISA objects, -no-expand" "-mshelf32"
+ "--abi=32 -no-expand" {shmix-2.s shmix-3.s}
+ {{objdump -sr mix2-noexp.sd}} "mix2-noexp.bin" }
+ {"SH64 linking, single SHcompact" "-mshelf32"
+ "--isa=SHcompact" {shcmp-1.s}
+ {{objdump -sr cmpct1.sd} {objdump -x cmpct1.xd}} "cmpct1.bin" }
+ {"SH64 inter-file datalabel references, 64-bit ABI" "-mshelf64"
+ "--abi=64" {shdl-1.s shdl-2.s}
+ {{objdump -sr shdl64.sd} {objdump -x shdl64.xd}} "shdl64.bin" }
+ {"SH64 inter-file datalabel references, 32-bit ABI" "-mshelf32"
+ "--abi=32" {shdl-1.s shdl-2.s}
+ {{objdump -sr shdl64.sd} {objdump -x shdl32.xd}} "shdl32.bin" }
+ {"SH64 inter-file datalabel references and gc-sections, 32-bit ABI" "-mshelf32 --gc-sections"
+ "--abi=32" {dlsection-1.s }
+ {{objdump -sr dlsection.sd}} "dlsection32.bin" }
+ {"SH64 inter-file datalabel references and gc-sections, 64-bit ABI" "-mshelf64 --gc-sections"
+ "--abi=64" {dlsection-1.s }
+ {{objdump -sr dlsection.sd}} "dlsection64.bin" }
+ {"SH64 simple partial linking, 32-bit ABI" "-mshelf32 -r"
+ "--abi=32" {rel-1.s rel-2.s}
+ {{objdump -sx rel32.xd}} "rel32.bin" }
+ {"SH64 simple partial linking, 64-bit ABI" "-mshelf64 -r"
+ "--abi=64" {rel-1.s rel-2.s}
+ {{objdump -sx rel64.xd}} "rel64.bin" }
+ {"SH64 partial linking with datalabel references, 32-bit ABI" "-mshelf32 -r"
+ "--abi=32" {reldl-1.s reldl-2.s}
+ {{readelf {-s -r -x 1 -x 3} reldl32.rd}} "reldl32.bin" }
+ {"SH64 partial linking with datalabel references, 64-bit ABI" "-mshelf64 -r"
+ "--abi=64" {reldl-1.s reldl-2.s}
+ {{readelf {-s -r -x 1 -x 3} reldl64.rd}} "reldl64.bin" }
+ {"Handling SH64 assembler-generated .cranges" "-mshelf32"
+ "--abi=32" {crange-2a.s crange-1.s}
+ {{readelf {-S -s -r -x 1 -x 2 -x 4} crange1.rd}} "crange1.bin" }
+ {"Handling SH64 assembler-generated .cranges, partial linking" "-mshelf32 -r"
+ "--abi=32" {crange-2a.s}
+ {{readelf {-S -s -r -x 2 -x 6} crangerel1.rd}} "crangerel1.bin" }
+ {"Mixing SH64 assembler-generated with linker-generated .cranges" "-mshelf32"
+ "--abi=32" {crange-2a.s crange-2b.s crange-1.s}
+ {{readelf {-S -s -r -x 2 -x 4} crange2.rd}} "crange2.bin" }
+ {"Mixing SH64 assembler-generated with linker-generated .cranges, partial linking"
+ "-mshelf32 -r"
+ "--abi=32" {crange-2a.s crange-2c.s crange-2d.s crange-2e.s}
+ {{readelf {-S -s -r -x 2 -x 6} crangerel2.rd}} "crangerel2.bin" }
+ {"Merge and use of SH64 .cranges, some not originally in order" "-mshelf32"
+ "--abi=32"
+ {crange-2e.s crange-2f.s crange-2g.s crange-2a.s crange-2d.s crange-2i.s
+ crange-2h.s crange-1.s}
+ {{readelf {-S -s -x 2 -x 4} crange3.rd} {objdump -d crange3.dd}} "crange3.bin" }
+ {"Sorted SH64 .cranges, entry at SHcompact code" "-mshelf32 --entry diversion"
+ "--abi=32"
+ {crange-2e.s crange-2f.s crange-2g.s crange-2a.s crange-2d.s crange-2i.s
+ crange-2h.s crange-1.s}
+ {{readelf {-h -S -s -x 2 -x 4} crange3-cmpct.rd}} "crange3-cmpct.bin" }
+ {"Sorted SH64 .cranges, entry at SHmedia code" "-mshelf32 --entry diversion2"
+ "--abi=32"
+ {crange-2e.s crange-2f.s crange-2g.s crange-2a.s crange-2d.s crange-2i.s
+ crange-2h.s crange-1.s}
+ {{readelf {-h -S -s -x 2 -x 4} crange3-media.rd}} "crange3-media.bin" }
+ {"SH64 Big Endianness" "-mshelf64 -Tendian.ld"
+ "--abi=64" {endian.s}
+ {{objdump -s endian.sbd} {objdump -d endian.dbd}} "endianb.bin" }
+ {"SH64 Little Endianness" "-mshlelf64 -Tendian.ld"
+ "--abi=64 --little" {endian.s}
+ {{objdump -s endian.sld} {objdump -d endian.dld}} "endinanl.bin" }
+}
+
+run_ld_link_tests $sh64tests
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/shcmp-1.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/shcmp-1.s
new file mode 100644
index 0000000..f915af4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/shcmp-1.s
@@ -0,0 +1,15 @@
+! A single SHcompact file, that should link correctly.
+ .text
+ .global start
+start:
+ mova next,r0
+ nop
+next:
+ nop
+ mov #42,r10
+
+ .section .rodata
+ .long start
+here:
+ .long here
+ .long next
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/shdl-1.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/shdl-1.s
new file mode 100644
index 0000000..0f2803c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/shdl-1.s
@@ -0,0 +1,359 @@
+! Test inter-file DataLabel support.
+!
+! We need to test symbols that are:
+! * Global, defined in this file, with/without/both-with-without datalabel
+! references.
+! * The above in combinations where the reference is/is not from within
+! the same section. The implementation is currently indifferent to that
+! fact, but it seems likely to be something that can change.
+! * Extern with/without/both-with-without datalabel-qualified references.
+! * The above with reference from same *and* other file.
+! * The above in combinations for where the symbol is/is not a
+! STO_SH5_ISA32-marked symbol.
+
+! There will be omissions and overlap in combinations. Add spotted
+! omissions with complementary tests in other files.
+
+ .text
+ .mode SHmedia
+
+! For good measure, we start with a nop to get a non-zero offset within
+! the .text section.
+
+ .global start
+start:
+ nop
+
+! Referenced from the same file, same section, is ISA32, only referenced
+! with datalabel qualifier.
+ .global foo
+foo:
+ nop
+ movi (datalabel foo + 8) & 65535,r30
+
+! Referenced from same file, same section, both with and without
+! datalabel qualifier, is ISA32.
+ .global fooboth
+fooboth:
+ nop
+ movi (datalabel fooboth + 16) & 65535,r40
+ movi (fooboth + 12) & 65535,r40
+
+! Same as above, but in different order.
+ .global fooboth2
+fooboth2:
+ nop
+ movi (fooboth2 + 12) & 65535,r40
+ movi (datalabel fooboth2 + 16) & 65535,r40
+
+! Referenced from this file and another, same section, is ISA32.
+ .global foowithout
+foowithout:
+ nop
+ movi (foowithout + 24) & 65535,r30
+
+! Same as above, different section than definition.
+
+ .global foo_other
+foo_other:
+ nop
+ .global foo_otherboth
+foo_otherboth:
+ nop
+ .global foo_otherboth2
+foo_otherboth2:
+ nop
+ .global foo_otherwithout
+foo_otherwithout:
+ nop
+
+ .section .rodata
+ .long datalabel foo_other + 4
+ .long datalabel foo_otherboth + 40
+ .long foo_otherboth + 24
+ .long foo_otherboth2 + 24
+ .long datalabel foo_otherboth2 + 40
+ .long foo_otherwithout
+
+ .text
+
+! Same as above, mixing references from same and other section.
+ .global foo_mix
+foo_mix:
+ nop
+ movi (datalabel foo_mix + 8) & 65535,r30
+ .global foo_mix2
+foo_mix2:
+ nop
+ movi (foo_mix2 + 8) & 65535,r30
+ .global foo_mixboth
+foo_mixboth:
+ nop
+ movi (datalabel foo_mixboth + 80) & 65535,r30
+ movi (foo_mixboth + 80) & 65535,r30
+ .global foo_mixboth2
+foo_mixboth2:
+ nop
+ movi (foo_mixboth2 + 64) & 65535,r30
+ movi (datalabel foo_mixboth2 + 64) & 65535,r30
+ .global foo_mixwithout
+foo_mixwithout:
+ nop
+ movi (foo_mixwithout + 42) & 65535,r30
+ .global foo_mixwithout2
+foo_mixwithout2:
+ nop
+ movi (foo_mixwithout2 + 24) & 65535,r30
+
+ .section .rodata
+ .long foo_mix + 4
+ .long datalabel foo_mix2 + 48
+ .long datalabel foo_mixboth + 400
+ .long foo_mixboth + 420
+ .long foo_mixboth2 + 248
+ .long datalabel foo_mixboth2 + 240
+ .long foo_mixwithout
+
+! Same as above, referencing symbol in other file (reference only from
+! this to other file).
+
+ .text
+ nop
+ movi (datalabel bar + 8) & 65535,r30
+
+ movi (datalabel barboth + 16) & 65535,r40
+ movi (barboth + 12) & 65535,r40
+
+ movi (barboth2 + 12) & 65535,r40
+ movi (datalabel barboth2 + 16) & 65535,r40
+
+ movi (barwithout + 24) & 65535,r30
+
+ .section .rodata
+ .long datalabel bar_other + 4
+ .long datalabel bar_otherboth + 40
+ .long bar_otherboth + 24
+ .long bar_otherboth2 + 24
+ .long datalabel bar_otherboth2 + 40
+ .long bar_otherwithout
+
+ .text
+ movi (datalabel bar_mix + 8) & 65535,r30
+ movi (bar_mix2 + 8) & 65535,r30
+ movi (datalabel bar_mixboth + 80) & 65535,r30
+ movi (bar_mixboth + 80) & 65535,r30
+ movi (bar_mixboth2 + 64) & 65535,r30
+ movi (datalabel bar_mixboth2 + 64) & 65535,r30
+ movi (bar_mixwithout + 42) & 65535,r30
+ movi (bar_mixwithout2 + 24) & 65535,r30
+
+ .section .rodata
+ .long bar_mix + 4
+ .long datalabel bar_mix2 + 48
+ .long datalabel bar_mixboth + 400
+ .long bar_mixboth + 420
+ .long bar_mixboth2 + 248
+ .long datalabel bar_mixboth2 + 240
+ .long bar_mixwithout
+
+! Same as above, referencing symbol in other file *and* within that file.
+
+ .text
+ movi (datalabel baz + 8) & 65535,r30
+
+ movi (datalabel bazboth + 16) & 65535,r40
+ movi (bazboth + 12) & 65535,r40
+
+ movi (bazboth2 + 12) & 65535,r40
+ movi (datalabel bazboth2 + 16) & 65535,r40
+
+ movi (bazwithout + 24) & 65535,r30
+
+ .section .rodata
+ .long datalabel baz_other + 4
+ .long datalabel baz_otherboth + 40
+ .long baz_otherboth + 24
+ .long baz_otherboth2 + 24
+ .long datalabel baz_otherboth2 + 40
+ .long baz_otherwithout
+
+ .text
+ movi (datalabel baz_mix + 8) & 65535,r30
+ movi (baz_mix2 + 8) & 65535,r30
+ movi (datalabel baz_mixboth + 80) & 65535,r30
+ movi (baz_mixboth + 80) & 65535,r30
+ movi (baz_mixboth2 + 64) & 65535,r30
+ movi (datalabel baz_mixboth2 + 64) & 65535,r30
+ movi (baz_mixwithout + 42) & 65535,r30
+ movi (baz_mixwithout2 + 24) & 65535,r30
+
+ .section .rodata
+ .long baz_mix + 4
+ .long datalabel baz_mix2 + 48
+ .long datalabel baz_mixboth + 400
+ .long baz_mixboth + 420
+ .long baz_mixboth2 + 248
+ .long datalabel baz_mixboth2 + 240
+ .long baz_mixwithout
+
+! Same as all of the above, but where the symbol is not an ISA32 one.
+
+ .data
+ .global dfoo
+dfoo:
+ .long 0
+ .long (datalabel dfoo + 8)
+
+ .global dfooboth
+dfooboth:
+ .long 0
+ .long (datalabel dfooboth + 16)
+ .long (dfooboth + 12)
+
+ .global dfooboth2
+dfooboth2:
+ .long 0
+ .long (dfooboth2 + 12)
+ .long (datalabel dfooboth2 + 16)
+
+ .global dfoowithout
+dfoowithout:
+ .long 0
+ .long (dfoowithout + 24)
+
+ .global dfoo_other
+dfoo_other:
+ .long 0
+ .global dfoo_otherboth
+dfoo_otherboth:
+ .long 0
+ .global dfoo_otherboth2
+dfoo_otherboth2:
+ .long 0
+ .global dfoo_otherwithout
+dfoo_otherwithout:
+ .long 0
+
+ .section .rodata
+ .long datalabel dfoo_other + 4
+ .long datalabel dfoo_otherboth + 40
+ .long dfoo_otherboth + 24
+ .long dfoo_otherboth2 + 24
+ .long datalabel dfoo_otherboth2 + 40
+ .long dfoo_otherwithout
+
+ .data
+
+! Same as above, mixing references from same and other section.
+ .global dfoo_mix
+dfoo_mix:
+ .long 0
+ .long (datalabel dfoo_mix + 8)
+ .global dfoo_mix2
+dfoo_mix2:
+ .long 0
+ .long (dfoo_mix2 + 8)
+ .global dfoo_mixboth
+dfoo_mixboth:
+ .long 0
+ .long (datalabel dfoo_mixboth + 80)
+ .long (dfoo_mixboth + 80)
+ .global dfoo_mixboth2
+dfoo_mixboth2:
+ .long 0
+ .long (dfoo_mixboth2 + 64)
+ .long (datalabel dfoo_mixboth2 + 64)
+ .global dfoo_mixwithout
+dfoo_mixwithout:
+ .long 0
+ .long (dfoo_mixwithout + 42)
+ .global dfoo_mixwithout2
+dfoo_mixwithout2:
+ .long 0
+ .long (dfoo_mixwithout2 + 24)
+
+ .section .rodata
+ .long dfoo_mix + 4
+ .long datalabel dfoo_mix2 + 48
+ .long datalabel dfoo_mixboth + 400
+ .long dfoo_mixboth + 420
+ .long dfoo_mixboth2 + 248
+ .long datalabel dfoo_mixboth2 + 240
+ .long dfoo_mixwithout
+
+! Same as above, referencing symbol in other file (reference only from
+! this to other file).
+
+ .text
+ movi (datalabel dbarboth + 16) & 65535,r40
+ movi (dbarboth + 12) & 65535,r40
+ movi (dbarboth2 + 12) & 65535,r40
+ movi (datalabel dbarboth2 + 16) & 65535,r40
+ movi (dbarwithout + 24) & 65535,r30
+
+ .data
+ .long (datalabel dbar + 8)
+ .long datalabel dbar_other + 4
+ .long datalabel dbar_otherboth + 40
+ .long dbar_otherboth + 24
+ .long dbar_otherboth2 + 24
+ .long datalabel dbar_otherboth2 + 40
+ .long dbar_otherwithout
+
+ .text
+ movi (datalabel dbar_mix + 8) & 65535,r30
+ movi (dbar_mix2 + 8) & 65535,r30
+ movi (datalabel dbar_mixboth + 80) & 65535,r30
+ movi (dbar_mixboth + 80) & 65535,r30
+ movi (dbar_mixboth2 + 64) & 65535,r30
+ movi (datalabel dbar_mixboth2 + 64) & 65535,r30
+ movi (dbar_mixwithout + 42) & 65535,r30
+ movi (dbar_mixwithout2 + 24) & 65535,r30
+
+ .data
+ .long dbar_mix + 4
+ .long datalabel dbar_mix2 + 48
+ .long datalabel dbar_mixboth + 400
+ .long dbar_mixboth + 420
+ .long dbar_mixboth2 + 248
+ .long datalabel dbar_mixboth2 + 240
+ .long dbar_mixwithout
+
+! Same as above, referencing symbol in other file *and* within that file.
+
+ .text
+ movi (datalabel dbazboth + 16) & 65535,r40
+ movi (dbazboth + 12) & 65535,r40
+
+ movi (dbazboth2 + 12) & 65535,r40
+ movi (datalabel dbazboth2 + 16) & 65535,r40
+
+ movi (dbazwithout + 24) & 65535,r30
+
+ .data
+ .long (datalabel dbaz + 8)
+ .long datalabel dbaz_other + 4
+ .long datalabel dbaz_otherboth + 40
+ .long dbaz_otherboth + 24
+ .long dbaz_otherboth2 + 24
+ .long datalabel dbaz_otherboth2 + 40
+ .long dbaz_otherwithout
+
+ .text
+ movi (datalabel dbaz_mix + 8) & 65535,r30
+ movi (dbaz_mix2 + 8) & 65535,r30
+ movi (datalabel dbaz_mixboth + 80) & 65535,r30
+ movi (dbaz_mixboth + 80) & 65535,r30
+ movi (dbaz_mixboth2 + 64) & 65535,r30
+ movi (datalabel dbaz_mixboth2 + 64) & 65535,r30
+ movi (dbaz_mixwithout + 42) & 65535,r30
+ movi (dbaz_mixwithout2 + 24) & 65535,r30
+
+ .data
+ .long dbaz_mix + 4
+ .long datalabel dbaz_mix2 + 48
+ .long datalabel dbaz_mixboth + 400
+ .long dbaz_mixboth + 420
+ .long dbaz_mixboth2 + 248
+ .long datalabel dbaz_mixboth2 + 240
+ .long dbaz_mixwithout
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/shdl-2.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/shdl-2.s
new file mode 100644
index 0000000..a41fd52
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/shdl-2.s
@@ -0,0 +1,286 @@
+! Part two of test for inter-file DataLabel support.
+
+ .mode SHmedia
+ .text
+part2:
+ movi (datalabel foowithout + 16) & 65535, r24
+
+ .section .rodata
+ .long datalabel foo_otherwithout + 32
+
+ .text
+ movi (datalabel foo_mixwithout + 1024) & 65535, r24
+ .section .rodata
+ .long datalabel foo_mixwithout + 32
+
+ .text
+ movi (datalabel foo_mixwithout2 + 1024) & 65535, r24
+ .section .rodata
+ .long foo_mixwithout2 + 32
+
+ .text
+ .global bar
+bar:
+ nop
+
+ .global barboth
+barboth:
+ nop
+
+ .global barboth2
+barboth2:
+ nop
+
+ .global barwithout
+barwithout:
+ nop
+
+ .global bar_other
+bar_other:
+ nop
+ .global bar_otherboth
+bar_otherboth:
+ nop
+ .global bar_otherboth2
+bar_otherboth2:
+ nop
+ .global bar_otherwithout
+bar_otherwithout:
+ nop
+
+ .text
+
+ .global bar_mix
+bar_mix:
+ nop
+ .global bar_mix2
+bar_mix2:
+ nop
+ .global bar_mixboth
+bar_mixboth:
+ nop
+ .global bar_mixboth2
+bar_mixboth2:
+ nop
+ .global bar_mixwithout
+bar_mixwithout:
+ nop
+ .global bar_mixwithout2
+bar_mixwithout2:
+ nop
+
+! Almost-copy of "foo" in primary file.
+
+ .global baz
+baz:
+ nop
+ movi (datalabel baz + 8) & 65535,r30
+
+ .global bazboth
+bazboth:
+ nop
+ movi (datalabel bazboth + 16) & 65535,r40
+ movi (bazboth + 12) & 65535,r40
+
+ .global bazboth2
+bazboth2:
+ nop
+ movi (bazboth2 + 12) & 65535,r40
+ movi (datalabel bazboth2 + 16) & 65535,r40
+
+ .global bazwithout
+bazwithout:
+ nop
+ movi (datalabel bazwithout + 24) & 65535,r30
+
+ .global baz_other
+baz_other:
+ nop
+ .global baz_otherboth
+baz_otherboth:
+ nop
+ .global baz_otherboth2
+baz_otherboth2:
+ nop
+ .global baz_otherwithout
+baz_otherwithout:
+ nop
+
+ .section .rodata
+ .long datalabel baz_other + 4
+ .long datalabel baz_otherboth + 40
+ .long baz_otherboth + 24
+ .long baz_otherboth2 + 24
+ .long datalabel baz_otherboth2 + 40
+ .long baz_otherwithout
+
+ .text
+
+ .global baz_mix
+baz_mix:
+ nop
+ movi (datalabel baz_mix + 8) & 65535,r30
+ .global baz_mix2
+baz_mix2:
+ nop
+ movi (baz_mix2 + 8) & 65535,r30
+ .global baz_mixboth
+baz_mixboth:
+ nop
+ movi (datalabel baz_mixboth + 80) & 65535,r30
+ movi (baz_mixboth + 80) & 65535,r30
+ .global baz_mixboth2
+baz_mixboth2:
+ nop
+ movi (baz_mixboth2 + 64) & 65535,r30
+ movi (datalabel baz_mixboth2 + 64) & 65535,r30
+ .global baz_mixwithout
+baz_mixwithout:
+ nop
+ movi (baz_mixwithout + 42) & 65535,r30
+ .global baz_mixwithout2
+baz_mixwithout2:
+ nop
+ movi (baz_mixwithout2 + 24) & 65535,r30
+
+ .section .rodata
+ .long baz_mix + 4
+ .long datalabel baz_mix2 + 48
+ .long datalabel baz_mixboth + 400
+ .long baz_mixboth + 420
+ .long baz_mixboth2 + 248
+ .long datalabel baz_mixboth2 + 240
+ .long baz_mixwithout
+
+ .data
+ .long datalabel dfoowithout + 44
+ .long datalabel dfoo_mixwithout + 48
+ .long datalabel dfoo_mixwithout2 + 84
+
+ .global dbar
+dbar:
+ .long 0
+ .global dbarboth
+dbarboth:
+ .long 0
+ .global dbarboth2
+dbarboth2:
+ .long 0
+ .global dbarwithout
+dbarwithout:
+ .long 0
+ .global dbar_other
+dbar_other:
+ .long 0
+ .global dbar_otherboth
+dbar_otherboth:
+ .long 0
+ .global dbar_otherboth2
+dbar_otherboth2:
+ .long 0
+ .global dbar_otherwithout
+dbar_otherwithout:
+ .long 0
+
+ .global dbar_mix
+dbar_mix:
+ .long 0
+ .global dbar_mix2
+dbar_mix2:
+ .long 0
+ .global dbar_mixboth
+dbar_mixboth:
+ .long 0
+ .global dbar_mixboth2
+dbar_mixboth2:
+ .long 0
+ .global dbar_mixwithout
+dbar_mixwithout:
+ .long 0
+ .global dbar_mixwithout2
+dbar_mixwithout2:
+ .long 0
+
+! Almost-copy of "dfoo" in primary file.
+
+ .data
+ .global dbaz
+dbaz:
+ .long 0
+ .long (datalabel dbaz + 8)
+
+ .global dbazboth
+dbazboth:
+ .long 0
+ .long (datalabel dbazboth + 16)
+ .long (dbazboth + 12)
+
+ .global dbazboth2
+dbazboth2:
+ .long 0
+ .long (dbazboth2 + 12)
+ .long (datalabel dbazboth2 + 16)
+
+ .global dbazwithout
+dbazwithout:
+ .long 0
+ .long (dbazwithout + 24)
+
+ .global dbaz_other
+dbaz_other:
+ .long 0
+ .global dbaz_otherboth
+dbaz_otherboth:
+ .long 0
+ .global dbaz_otherboth2
+dbaz_otherboth2:
+ .long 0
+ .global dbaz_otherwithout
+dbaz_otherwithout:
+ .long 0
+
+ .section .rodata
+ .long datalabel dbaz_other + 4
+ .long datalabel dbaz_otherboth + 40
+ .long dbaz_otherboth + 24
+ .long dbaz_otherboth2 + 24
+ .long datalabel dbaz_otherboth2 + 40
+ .long dbaz_otherwithout
+
+ .data
+
+ .global dbaz_mix
+dbaz_mix:
+ .long 0
+ .long (datalabel dbaz_mix + 8)
+ .global dbaz_mix2
+dbaz_mix2:
+ .long 0
+ .long (dbaz_mix2 + 8)
+ .global dbaz_mixboth
+dbaz_mixboth:
+ .long 0
+ .long (datalabel dbaz_mixboth + 80)
+ .long (dbaz_mixboth + 80)
+ .global dbaz_mixboth2
+dbaz_mixboth2:
+ .long 0
+ .long (dbaz_mixboth2 + 64)
+ .long (datalabel dbaz_mixboth2 + 64)
+ .global dbaz_mixwithout
+dbaz_mixwithout:
+ .long 0
+ .long (dbaz_mixwithout + 42)
+ .global dbaz_mixwithout2
+dbaz_mixwithout2:
+ .long 0
+ .long (dbaz_mixwithout2 + 24)
+
+ .section .rodata
+ .long dbaz_mix + 4
+ .long datalabel dbaz_mix2 + 48
+ .long datalabel dbaz_mixboth + 400
+ .long dbaz_mixboth + 420
+ .long dbaz_mixboth2 + 248
+ .long datalabel dbaz_mixboth2 + 240
+ .long dbaz_mixwithout
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/shdl32.xd b/binutils-2.21/ld/testsuite/ld-sh/sh64/shdl32.xd
new file mode 100644
index 0000000..56773e3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/shdl32.xd
@@ -0,0 +1,123 @@
+.*: file format .*-sh64
+.*
+architecture: sh5, flags 0x0+112:
+EXEC_P, HAS_SYMS, D_PAGED
+start address 0x0+1001
+
+Program Header:
+ LOAD off 0x0+100 vaddr 0x0+1000 paddr 0x0+1000 align 2\*\*7
+ filesz 0x0+348 memsz 0x0+348 flags r-x
+ LOAD off 0x0+448 vaddr 0x0+13c8 paddr 0x0+13c8 align 2\*\*7
+ filesz 0x0+194 memsz 0x0+194 flags rw-
+ LOAD off 0x0+600 vaddr 0x0+80000 paddr 0x0+80000 align 2\*\*7
+ filesz 0x00000004 memsz 0x00000004 flags rw-
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0+204 0+1000 0+1000 0+100 2\*\*0
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 1 \.rodata 0+144 0+1204 0+1204 0+304 2\*\*2
+ CONTENTS, ALLOC, LOAD, READONLY, DATA
+ 2 \.data 0+194 0+13c8 0+13c8 0+448 2\*\*2
+ CONTENTS, ALLOC, LOAD, DATA
+ 3 \.stack 0+4 0+80000 0+80000 0+600 2\*\*0
+ CONTENTS, ALLOC, LOAD, DATA
+SYMBOL TABLE:
+0+1000 l d \.text 0+ (|\.text)
+0+1204 l d \.rodata 0+ (|\.rodata)
+0+13c8 l d \.data 0+ (|\.data)
+0+80000 l d \.stack 0+ (|\.stack)
+0+1150 l \.text 0+ 0x04 part2
+0+13f8 g \.data 0+ dfoo_otherboth2
+0+1178 g \.text 0+ 0x04 bar_otherwithout
+0+11b4 g \.text 0+ 0x04 bazwithout
+0+1428 g \.data 0+ dfoo_mixwithout
+0+1554 g \.data 0+ dbaz_mixwithout2
+0+11bc g \.text 0+ 0x04 baz_other
+0+11cc g \.text 0+ 0x04 baz_mix
+0+11c0 g \.text 0+ 0x04 baz_otherboth
+0+13e8 g \.data 0+ dfoowithout
+0+14b4 g \.data 0+ dbar
+0+106c g \.text 0+ 0x04 foo_mixwithout2
+0+11a8 g \.text 0+ 0x04 bazboth2
+0+13fc g \.data 0+ dfoo_otherwithout
+0+11c4 g \.text 0+ 0x04 baz_otherboth2
+0+1174 g \.text 0+ 0x04 bar_otherboth2
+0+1194 g \.text 0+ 0x04 baz
+0+13c8 g \.data 0+ dfoo
+0+14e8 g \.data 0+ dbar_mixwithout2
+0+13dc g \.data 0+ dfooboth2
+0+1408 g \.data 0+ dfoo_mix2
+0+154c g \.data 0+ dbaz_mixwithout
+0+1044 g \.text 0+ 0x04 foo_mix2
+0+1018 g \.text 0+ 0x04 fooboth2
+0+14cc g \.data 0+ dbar_otherboth2
+0+117c g \.text 0+ 0x04 bar_mix
+0+14d0 g \.data 0+ dbar_otherwithout
+0+11dc g \.text 0+ 0x04 baz_mixboth
+0+14c8 g \.data 0+ dbar_otherboth
+0+150c g \.data 0+ dbazwithout
+0+152c g \.data 0+ dbaz_mix2
+0+1184 g \.text 0+ 0x04 bar_mixboth
+0+13f4 g \.data 0+ dfoo_otherboth
+0+14dc g \.data 0+ dbar_mixboth
+0+1024 g \.text 0+ 0x04 foowithout
+0+14e4 g \.data 0+ dbar_mixwithout
+0+11fc g \.text 0+ 0x04 baz_mixwithout2
+0+1030 g \.text 0+ 0x04 foo_otherboth
+0+1540 g \.data 0+ dbaz_mixboth2
+0+104c g \.text 0+ 0x04 foo_mixboth
+0+1534 g \.data 0+ dbaz_mixboth
+0+103c g \.text 0+ 0x04 foo_mix
+0+1518 g \.data 0+ dbaz_otherboth
+0+14e0 g \.data 0+ dbar_mixboth2
+0+14ec g \.data 0+ dbaz
+0+1524 g \.data 0+ dbaz_mix
+0+13c8 g .* 0+ ___dtors
+0+141c g \.data 0+ dfoo_mixboth2
+0+119c g \.text 0+ 0x04 bazboth
+0+13f0 g \.data 0+ dfoo_other
+0+11e8 g \.text 0+ 0x04 baz_mixboth2
+0+1514 g \.data 0+ dbaz_other
+0+1164 g \.text 0+ 0x04 barboth2
+0+1168 g \.text 0+ 0x04 barwithout
+0+14d8 g \.data 0+ dbar_mix2
+0+1560 g \*ABS\* 0+ __bss_start
+0+1410 g \.data 0+ dfoo_mixboth
+0+14c4 g \.data 0+ dbar_other
+0+1180 g \.text 0+ 0x04 bar_mix2
+0+14f4 g \.data 0+ dbazboth
+0+1038 g \.text 0+ 0x04 foo_otherwithout
+0+1190 g \.text 0+ 0x04 bar_mixwithout2
+0+13c8 g .* 0+ ___ctors_end
+0+1064 g \.text 0+ 0x04 foo_mixwithout
+0+116c g \.text 0+ 0x04 bar_other
+0+13d0 g \.data 0+ dfooboth
+0+1034 g \.text 0+ 0x04 foo_otherboth2
+0+1400 g \.data 0+ dfoo_mix
+0+13c8 g .* 0+ ___ctors
+0+14d4 g \.data 0+ dbar_mix
+0+100c g \.text 0+ 0x04 fooboth
+0+1170 g \.text 0+ 0x04 bar_otherboth
+0+14c0 g \.data 0+ dbarwithout
+0+1004 g \.text 0+ 0x04 foo
+0+102c g \.text 0+ 0x04 foo_other
+0+1560 g \*ABS\* 0+ _edata
+0+1560 g \*ABS\* 0+ _end
+0+1430 g \.data 0+ dfoo_mixwithout2
+0+1058 g \.text 0+ 0x04 foo_mixboth2
+0+11d4 g \.text 0+ 0x04 baz_mix2
+0+11c8 g \.text 0+ 0x04 baz_otherwithout
+0+1000 g \.text 0+ 0x04 start
+0+14bc g \.data 0+ dbarboth2
+0+118c g \.text 0+ 0x04 bar_mixwithout
+0+115c g \.text 0+ 0x04 bar
+0+80000 g \.stack 0+ _stack
+0+1520 g \.data 0+ dbaz_otherwithout
+0+11f4 g \.text 0+ 0x04 baz_mixwithout
+0+1160 g \.text 0+ 0x04 barboth
+0+14b8 g \.data 0+ dbarboth
+0+1188 g \.text 0+ 0x04 bar_mixboth2
+0+13c8 g .* 0+ ___dtors_end
+0+151c g \.data 0+ dbaz_otherboth2
+0+1500 g \.data 0+ dbazboth2
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/shdl64.sd b/binutils-2.21/ld/testsuite/ld-sh/sh64/shdl64.sd
new file mode 100644
index 0000000..abe257a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/shdl64.sd
@@ -0,0 +1,87 @@
+.*: file format .*-sh64
+
+Contents of section \.text:
+ 1000 6ff0fff0 6ff0fff0 cc4031e0 6ff0fff0 .*
+ 1010 cc407280 cc406680 6ff0fff0 cc409680 .*
+ 1020 cc40a280 6ff0fff0 cc40f5e0 6ff0fff0 .*
+ 1030 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 1040 cc4111e0 6ff0fff0 cc4135e0 6ff0fff0 .*
+ 1050 cc4271e0 cc4275e0 6ff0fff0 cc4265e0 .*
+ 1060 cc4261e0 6ff0fff0 cc423de0 6ff0fff0 .*
+ 1070 cc4215e0 6ff0fff0 cc4591e0 cc45c280 .*
+ 1080 cc45b680 cc45c680 cc45d280 cc4605e0 .*
+ 1090 cc4611e0 cc4625e0 cc4751e0 cc4755e0 .*
+ 10a0 cc4725e0 cc4721e0 cc46dde0 cc46a5e0 .*
+ 10b0 cc4671e0 cc46b280 cc46a680 cc46d680 .*
+ 10c0 cc46e280 cc4735e0 cc4751e0 cc4775e0 .*
+ 10d0 cc48b1e0 cc48b5e0 cc48a5e0 cc48a1e0 .*
+ 10e0 cc487de0 cc4855e0 cc532280 cc531280 .*
+ 10f0 cc532280 cc533280 cc5361e0 cc5371e0 .*
+ 1100 cc5381e0 cc54b1e0 cc54b1e0 cc5481e0 .*
+ 1110 cc5481e0 cc5439e0 cc5401e0 cc541280 .*
+ 1120 cc540280 cc543280 cc544280 cc5491e0 .*
+ 1130 cc54b1e0 cc54d1e0 cc5611e0 cc5611e0 .*
+ 1140 cc5601e0 cc5601e0 cc55d9e0 cc55b1e0 .*
+ 1150 cc40d180 cc519180 cc51b180 6ff0fff0 .*
+ 1160 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 1170 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 1180 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 1190 6ff0fff0 6ff0fff0 cc4671e0 6ff0fff0 .*
+ 11a0 cc46b280 cc46a680 6ff0fff0 cc46d680 .*
+ 11b0 cc46e280 6ff0fff0 cc4731e0 6ff0fff0 .*
+ 11c0 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
+ 11d0 cc4751e0 6ff0fff0 cc4775e0 6ff0fff0 .*
+ 11e0 cc48b1e0 cc48b5e0 6ff0fff0 cc48a5e0 .*
+ 11f0 cc48a1e0 6ff0fff0 cc487de0 6ff0fff0 .*
+ 1200 cc4855e0 .*
+Contents of section \.rodata:
+ 1204 00001030 00001058 00001049 0000104d .*
+ 1214 0000105c 00001039 00001041 00001074 .*
+ 1224 000011dc 000011f1 00001151 00001148 .*
+ 1234 00001065 00001170 00001198 00001189 .*
+ 1244 0000118d 0000119c 00001179 00001181 .*
+ 1254 000011b0 00001314 00001329 00001281 .*
+ 1264 00001278 0000118d 000011c0 000011e8 .*
+ 1274 000011d9 000011dd 000011ec 000011c9 .*
+ 1284 000011d1 00001204 0000136c 00001381 .*
+ 1294 000012e1 000012d8 000011f5 000013f4 .*
+ 12a4 0000141c 0000140c 00001410 00001420 .*
+ 12b4 000013fc 00001404 00001438 000015a0 .*
+ 12c4 000015b4 00001514 0000150c 00001428 .*
+ 12d4 00001058 00001084 0000108d 000011c0 .*
+ 12e4 000011e8 000011d9 000011dd 000011ec .*
+ 12f4 000011c9 000011d1 00001204 0000136c .*
+ 1304 00001381 000012e1 000012d8 000011f5 .*
+ 1314 00001518 00001540 00001530 00001534 .*
+ 1324 00001544 00001520 00001528 0000155c .*
+ 1334 000016c4 000016d8 00001638 00001630 .*
+ 1344 0000154c .*
+Contents of section \.data:
+ 13c8 00000000 000013d0 00000000 000013e0 .*
+ 13d8 000013dc 00000000 000013e8 000013ec .*
+ 13e8 00000000 00001400 00000000 00000000 .*
+ 13f8 00000000 00000000 00000000 00001408 .*
+ 1408 00000000 00001410 00000000 00001460 .*
+ 1418 00001460 00000000 0000145c 0000145c .*
+ 1428 00000000 00001452 00000000 00001448 .*
+ 1438 000014bc 000014c8 000014f0 000014e0 .*
+ 1448 000014e4 000014f4 000014d0 000014d8 .*
+ 1458 00001508 0000166c 00001680 000015d8 .*
+ 1468 000015d0 000014e4 000014f4 00001518 .*
+ 1478 00001540 00001530 00001534 00001544 .*
+ 1488 00001520 00001528 0000155c 000016c4 .*
+ 1498 000016d8 00001638 00001630 0000154c .*
+ 14a8 00001414 00001458 00001484 00000000 .*
+ 14b8 00000000 00000000 00000000 00000000 .*
+ 14c8 00000000 00000000 00000000 00000000 .*
+ 14d8 00000000 00000000 00000000 00000000 .*
+ 14e8 00000000 00000000 000014f4 00000000 .*
+ 14f8 00001504 00001500 00000000 0000150c .*
+ 1508 00001510 00000000 00001524 00000000 .*
+ 1518 00000000 00000000 00000000 00000000 .*
+ 1528 0000152c 00000000 00001534 00000000 .*
+ 1538 00001584 00001584 00000000 00001580 .*
+ 1548 00001580 00000000 00001576 00000000 .*
+ 1558 0000156c .*
+Contents of section \.stack:
+ 80000 deaddead .*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/shdl64.xd b/binutils-2.21/ld/testsuite/ld-sh/sh64/shdl64.xd
new file mode 100644
index 0000000..142ca96
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/shdl64.xd
@@ -0,0 +1,123 @@
+.*: file format .*-sh64
+.*
+architecture: sh5, flags 0x0+112:
+EXEC_P, HAS_SYMS, D_PAGED
+start address 0x0+1001
+
+Program Header:
+ LOAD off 0x0+100 vaddr 0x0+1000 paddr 0x0+1000 align 2\*\*7
+ filesz 0x0+348 memsz 0x0+348 flags r-x
+ LOAD off 0x0+448 vaddr 0x0+13c8 paddr 0x0+13c8 align 2\*\*7
+ filesz 0x0+194 memsz 0x0+194 flags rw-
+ LOAD off 0x0+600 vaddr 0x0+80000 paddr 0x0+80000 align 2\*\*7
+ filesz 0x0+4 memsz 0x0+4 flags rw-
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 \.text 0+204 0+1000 0+1000 0+100 2\*\*0
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 1 \.rodata 0+144 0+1204 0+1204 0+304 2\*\*2
+ CONTENTS, ALLOC, LOAD, READONLY, DATA
+ 2 \.data 0+194 0+13c8 0+13c8 0+448 2\*\*2
+ CONTENTS, ALLOC, LOAD, DATA
+ 3 \.stack 0+4 0+80000 0+80000 0+600 2\*\*0
+ CONTENTS, ALLOC, LOAD, DATA
+SYMBOL TABLE:
+0+1000 l d \.text 0+ (|\.text)
+0+1204 l d \.rodata 0+ (|\.rodata)
+0+13c8 l d \.data 0+ (|\.data)
+0+80000 l d \.stack 0+ (|\.stack)
+0+1150 l \.text 0+ 0x04 part2
+0+13f8 g \.data 0+ dfoo_otherboth2
+0+1178 g \.text 0+ 0x04 bar_otherwithout
+0+11b4 g \.text 0+ 0x04 bazwithout
+0+1428 g \.data 0+ dfoo_mixwithout
+0+1554 g \.data 0+ dbaz_mixwithout2
+0+11bc g \.text 0+ 0x04 baz_other
+0+11cc g \.text 0+ 0x04 baz_mix
+0+11c0 g \.text 0+ 0x04 baz_otherboth
+0+13e8 g \.data 0+ dfoowithout
+0+14b4 g \.data 0+ dbar
+0+106c g \.text 0+ 0x04 foo_mixwithout2
+0+11a8 g \.text 0+ 0x04 bazboth2
+0+13fc g \.data 0+ dfoo_otherwithout
+0+11c4 g \.text 0+ 0x04 baz_otherboth2
+0+1174 g \.text 0+ 0x04 bar_otherboth2
+0+1194 g \.text 0+ 0x04 baz
+0+13c8 g \.data 0+ dfoo
+0+14e8 g \.data 0+ dbar_mixwithout2
+0+13dc g \.data 0+ dfooboth2
+0+1408 g \.data 0+ dfoo_mix2
+0+154c g \.data 0+ dbaz_mixwithout
+0+1044 g \.text 0+ 0x04 foo_mix2
+0+1018 g \.text 0+ 0x04 fooboth2
+0+14cc g \.data 0+ dbar_otherboth2
+0+117c g \.text 0+ 0x04 bar_mix
+0+14d0 g \.data 0+ dbar_otherwithout
+0+11dc g \.text 0+ 0x04 baz_mixboth
+0+14c8 g \.data 0+ dbar_otherboth
+0+150c g \.data 0+ dbazwithout
+0+152c g \.data 0+ dbaz_mix2
+0+1184 g \.text 0+ 0x04 bar_mixboth
+0+13f4 g \.data 0+ dfoo_otherboth
+0+14dc g \.data 0+ dbar_mixboth
+0+1024 g \.text 0+ 0x04 foowithout
+0+14e4 g \.data 0+ dbar_mixwithout
+0+11fc g \.text 0+ 0x04 baz_mixwithout2
+0+1030 g \.text 0+ 0x04 foo_otherboth
+0+1540 g \.data 0+ dbaz_mixboth2
+0+104c g \.text 0+ 0x04 foo_mixboth
+0+1534 g \.data 0+ dbaz_mixboth
+0+103c g \.text 0+ 0x04 foo_mix
+0+1518 g \.data 0+ dbaz_otherboth
+0+14e0 g \.data 0+ dbar_mixboth2
+0+14ec g \.data 0+ dbaz
+0+1524 g \.data 0+ dbaz_mix
+0+13c8 g .* 0+ ___dtors
+0+141c g \.data 0+ dfoo_mixboth2
+0+119c g \.text 0+ 0x04 bazboth
+0+13f0 g \.data 0+ dfoo_other
+0+11e8 g \.text 0+ 0x04 baz_mixboth2
+0+1514 g \.data 0+ dbaz_other
+0+1164 g \.text 0+ 0x04 barboth2
+0+1168 g \.text 0+ 0x04 barwithout
+0+14d8 g \.data 0+ dbar_mix2
+0+1560 g \*ABS\* 0+ __bss_start
+0+1410 g \.data 0+ dfoo_mixboth
+0+14c4 g \.data 0+ dbar_other
+0+1180 g \.text 0+ 0x04 bar_mix2
+0+14f4 g \.data 0+ dbazboth
+0+1038 g \.text 0+ 0x04 foo_otherwithout
+0+1190 g \.text 0+ 0x04 bar_mixwithout2
+0+13c8 g .* 0+ ___ctors_end
+0+1064 g \.text 0+ 0x04 foo_mixwithout
+0+116c g \.text 0+ 0x04 bar_other
+0+13d0 g \.data 0+ dfooboth
+0+1034 g \.text 0+ 0x04 foo_otherboth2
+0+1400 g \.data 0+ dfoo_mix
+0+13c8 g .* 0+ ___ctors
+0+14d4 g \.data 0+ dbar_mix
+0+100c g \.text 0+ 0x04 fooboth
+0+1170 g \.text 0+ 0x04 bar_otherboth
+0+14c0 g \.data 0+ dbarwithout
+0+1004 g \.text 0+ 0x04 foo
+0+102c g \.text 0+ 0x04 foo_other
+0+1560 g \*ABS\* 0+ _edata
+0+1560 g \*ABS\* 0+ _end
+0+1430 g \.data 0+ dfoo_mixwithout2
+0+1058 g \.text 0+ 0x04 foo_mixboth2
+0+11d4 g \.text 0+ 0x04 baz_mix2
+0+11c8 g \.text 0+ 0x04 baz_otherwithout
+0+1000 g \.text 0+ 0x04 start
+0+14bc g \.data 0+ dbarboth2
+0+118c g \.text 0+ 0x04 bar_mixwithout
+0+115c g \.text 0+ 0x04 bar
+0+80000 g \.stack 0+ _stack
+0+1520 g \.data 0+ dbaz_otherwithout
+0+11f4 g \.text 0+ 0x04 baz_mixwithout
+0+1160 g \.text 0+ 0x04 barboth
+0+14b8 g \.data 0+ dbarboth
+0+1188 g \.text 0+ 0x04 bar_mixboth2
+0+13c8 g .* 0+ ___dtors_end
+0+151c g \.data 0+ dbaz_otherboth2
+0+1500 g \.data 0+ dbazboth2
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/shmix-1.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/shmix-1.s
new file mode 100644
index 0000000..e078ac2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/shmix-1.s
@@ -0,0 +1,33 @@
+! Check mixed-mode objects; different sections holding different ISA:s.
+ .mode SHcompact
+ .text
+ .global start
+start:
+ bt forw
+ mova start2,r0
+start2:
+ nop
+ nop
+forw:
+ nop
+ .align 2
+ .long $
+ .long start2
+ .long mediacode2
+
+ .data
+ .long $
+ .long start2
+ .long mediacode2
+
+ .section .text.media,"ax"
+ .mode SHmedia
+ .align 2
+mediacode:
+ ptb forw,tr4
+ pt start2,tr5
+mediacode2:
+ movi start2,r54
+ movi mediacode2,r45
+ pta mediacode2,tr7
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/shmix-2.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/shmix-2.s
new file mode 100644
index 0000000..2ea7344
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/shmix-2.s
@@ -0,0 +1,28 @@
+! A SHmedia object, that we will link to a SHcompact object.
+! We will be using .text for the SHmedia code and .text.compact for the
+! SHcompact code, so we don't get two ISA in the same section.
+ .text
+ .mode SHmedia
+
+ .global start
+ .global medialabel1
+ .global medialabel2
+ .global medialabel3
+start:
+ movi compactlabel1,r14
+ movi compactlabel4,r14
+medialabel1:
+ pt compactlabel2,tr6
+medialabel2:
+ nop
+
+ .section .rodata
+ .long compactlabel3
+medialabel3:
+ .long compactlabel5
+
+ .data
+ .global medialabel4
+ .long 0
+medialabel4:
+ .long compactlabel2
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/shmix-3.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/shmix-3.s
new file mode 100644
index 0000000..42d1212
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/shmix-3.s
@@ -0,0 +1,32 @@
+! A SHcompact object, that we will link to a SHmedia object.
+! We will be using .text for the SHmedia code and .text.compact for the
+! SHcompact code, so we don't get two ISA in the same section.
+ .section .text.compact,"ax"
+ .mode SHcompact
+ .global compactlabel1
+ .global compactlabel2
+ .global compactlabel3
+ .global compactlabel4
+ .global compactlabel5
+locallabel:
+ nop
+compactlabel1:
+ mova compactlabel2,r0
+compactlabel2:
+ mova compactlabel3,r0
+ nop
+compactlabel3:
+ nop
+ .align 2
+ .long medialabel1
+ .long medialabel4
+
+ .section .rodata
+ .long medialabel2
+compactlabel4:
+ .long medialabel3
+
+ .data
+ .long 0
+compactlabel5:
+ .long medialabel4
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/stobin-0-dso.d b/binutils-2.21/ld/testsuite/ld-sh/sh64/stobin-0-dso.d
new file mode 100644
index 0000000..405c05a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/stobin-0-dso.d
@@ -0,0 +1,9 @@
+#source: stolib.s
+#as: --abi=32 --isa=SHmedia
+#ld: -shared -mshelf32
+#objdump: -drj.text
+#target: sh64-*-elf
+
+.*: +file format elf32-sh64.*
+
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/stobin-1.d b/binutils-2.21/ld/testsuite/ld-sh/sh64/stobin-1.d
new file mode 100644
index 0000000..e0f8b27
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/stobin-1.d
@@ -0,0 +1,15 @@
+#source: stobin.s
+#as: --abi=32 --isa=SHmedia
+#ld: -mshelf32 tmpdir/stobin-0-dso.so
+#objdump: -drj.text
+#target: sh64-*-elf
+
+.*: +file format elf32-sh64.*
+
+Disassembly of section \.text:
+
+0+[0-9a-f]+ <start>:
+ [0-9a-f]+: cffffd90 movi -1,r25
+ [0-9a-f]+: cbfee590 shori 65465,r25 ! 0xffffffb9 .*
+ [0-9a-f]+: 6bf56600 ptrel/l r25,tr0
+ [0-9a-f]+: 4401fff0 blink tr0,r63
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/stobin.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/stobin.s
new file mode 100644
index 0000000..30d3597
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/stobin.s
@@ -0,0 +1,5 @@
+ .text
+ .globl start
+start:
+ pt bar, tr0
+ blink tr0, r63
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sh64/stolib.s b/binutils-2.21/ld/testsuite/ld-sh/sh64/stolib.s
new file mode 100644
index 0000000..587faa6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sh64/stolib.s
@@ -0,0 +1,7 @@
+ .text
+ .globl bar
+ .type bar,@function
+bar:
+ ptabs r18, tr0
+ blink tr0, r63
+ .Lfe_bar: .size bar,.Lfe_bar-X
diff --git a/binutils-2.21/ld/testsuite/ld-sh/shared-1.d b/binutils-2.21/ld/testsuite/ld-sh/shared-1.d
new file mode 100644
index 0000000..940195d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/shared-1.d
@@ -0,0 +1,23 @@
+#source: ldr1.s
+#source: ldr2.s
+#as: -little
+#ld: -shared -EL -z nocombreloc
+#readelf: -r -x4 -x5
+#target: sh*-*-elf
+
+# Make sure relocations against global and local symbols with relative and
+# absolute 32-bit relocs don't come out wrong after ld -r. Remember that
+# SH uses partial_inplace (sort-of REL within RELA) with related confusion
+# about how, when, where and which addends to use. A DSO must have the
+# same value in the addend as in the data, so either can be used.
+
+Relocation section '\.rela\.text' at offset 0x[0-9a-f]+ contains 1 entries:
+.*
+0000019c +[0-9a-f]+ R_SH_RELATIVE +000001a0
+
+Hex dump of section '\.rela\.text':
+ 0x00000188 9c010000 a5000000 a0010000 .*
+
+Hex dump of section '\.text':
+.*
+ 0x00000194 09000900 09000900 a0010000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/shared-2.d b/binutils-2.21/ld/testsuite/ld-sh/shared-2.d
new file mode 100644
index 0000000..e65fea4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/shared-2.d
@@ -0,0 +1,20 @@
+#source: textrel1.s
+#source: textrel2.s
+#as: -little
+#ld: -shared -EL
+#readelf: -d
+#target: sh*-*-elf sh*-*-linux* sh*-*-netbsd*
+
+# Make sure that there is no unnecessary DT_TEXTREL entry.
+
+Dynamic section at offset 0x[0-9a-f]+ contains 9 entries:
+ Tag Type Name/Value
+ 0x00000004 \(HASH\) 0x[0-9a-f]+
+ 0x00000005 \(STRTAB\) 0x[0-9a-f]+
+ 0x00000006 \(SYMTAB\) 0x[0-9a-f]+
+ 0x0000000a \(STRSZ\) [0-9]+ \(bytes\)
+ 0x0000000b \(SYMENT\) 16 \(bytes\)
+ 0x00000007 \(RELA\) 0x[0-9a-f]+
+ 0x00000008 \(RELASZ\) 12 \(bytes\)
+ 0x00000009 \(RELAENT\) 12 \(bytes\)
+ 0x00000000 \(NULL\) 0x0
diff --git a/binutils-2.21/ld/testsuite/ld-sh/start.s b/binutils-2.21/ld/testsuite/ld-sh/start.s
new file mode 100644
index 0000000..2af4c79
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/start.s
@@ -0,0 +1,27 @@
+ .section .text
+ .global start
+start:
+
+ mov.l stack_k,r15
+
+ ! call the mainline
+L1:
+ mov.l main_k,r0
+ .uses L1
+ jsr @r0
+ nop
+
+ .align 2
+stack_k:
+ .long _stack
+main_k:
+ .long _main
+
+ .global _trap
+_trap:
+ trapa #3
+ rts
+ nop
+
+ .section .stack
+_stack: .long 0xdeaddead
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sub2l-1.d b/binutils-2.21/ld/testsuite/ld-sh/sub2l-1.d
new file mode 100644
index 0000000..40d4e08
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sub2l-1.d
@@ -0,0 +1,23 @@
+#source: sub2l.s
+#as: -little
+#ld: -EL -e 0x1000
+#objdump: -st
+#target: sh*-*-elf
+
+.*/dump: file format elf32-sh.*
+
+SYMBOL TABLE:
+#...
+0+1000 l .text 00000000 f
+0+1002 l .text 00000000 f2
+0+1028 l .text 00000000 L
+0+1020 g .text 00000000 ff
+#...
+
+Contents of section \.text:
+ 1000 0b000900 09000900 09000900 09000900 .*
+ 1010 09000900 09000900 09000900 09000900 .*
+ 1020 09000900 09000900 0b000900 d8ffffff .*
+ 1030 daffffff 02100000 28100000 24100000 .*
+Contents of section \..*:
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-sh/sub2l.s b/binutils-2.21/ld/testsuite/ld-sh/sub2l.s
new file mode 100644
index 0000000..1a077d0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/sub2l.s
@@ -0,0 +1,26 @@
+! "The subtraction of two symbols".
+ .little
+ .text
+ .align 5
+f:
+ rts
+f2:
+ nop
+
+ .section .text.foo,"ax",@progbits
+ .align 5
+ .global ff
+ff:
+ nop
+ nop
+ nop
+ nop
+L:
+ rts
+ nop
+ .align 2
+ .long f-L
+ .long f2-L
+ .long f2
+ .long L
+ .long ff+4
diff --git a/binutils-2.21/ld/testsuite/ld-sh/textrel1.s b/binutils-2.21/ld/testsuite/ld-sh/textrel1.s
new file mode 100644
index 0000000..eda4804
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/textrel1.s
@@ -0,0 +1,11 @@
+ .text
+ .align 5
+ .globl f
+f:
+ mov.l .L1,r0
+ rts
+ nop
+ .align 2
+.L1: .long g - f
+ .long foo@GOT
+
diff --git a/binutils-2.21/ld/testsuite/ld-sh/textrel2.s b/binutils-2.21/ld/testsuite/ld-sh/textrel2.s
new file mode 100644
index 0000000..1846a6b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/textrel2.s
@@ -0,0 +1,7 @@
+ .text
+ .align 5
+ .globl g
+ .hidden g
+g:
+ rts
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/tlsbin-0-dso.d b/binutils-2.21/ld/testsuite/ld-sh/tlsbin-0-dso.d
new file mode 100644
index 0000000..dc3eaa6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/tlsbin-0-dso.d
@@ -0,0 +1,9 @@
+#source: tlslib.s
+#as: -little
+#ld: -shared -EL
+#objdump: -drj.text
+#target: sh*-*-linux* sh*-*-netbsd*
+
+.*: +file format elf32-sh.*
+
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-sh/tlsbin-1.d b/binutils-2.21/ld/testsuite/ld-sh/tlsbin-1.d
new file mode 100644
index 0000000..9f5a086
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/tlsbin-1.d
@@ -0,0 +1,308 @@
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as: -little
+#ld: -EL tmpdir/tlsbin-0-dso.so
+#objdump: -drj.text
+#target: sh*-*-linux* sh*-*-netbsd*
+
+.*: +file format elf32-sh.*
+
+Disassembly of section \.text:
+
+0+401000 <fn2>:
+ 401000: c6 2f mov\.l r12,@-r15
+ 401002: e6 2f mov\.l r14,@-r15
+ 401004: 22 4f sts\.l pr,@-r15
+ 401006: 5f c7 mova 401184 <fn2\+0x184>,r0
+ 401008: 5e dc mov\.l 401184 <fn2\+0x184>,r12 ! [0-9a-f]+
+ 40100a: 0c 3c add r0,r12
+ 40100c: f3 6e mov r15,r14
+ 40100e: 09 00 nop
+ 401010: 09 00 nop
+ 401012: 09 00 nop
+ 401014: 09 00 nop
+ 401016: 04 d0 mov\.l 401028 <fn2\+0x28>,r0 ! 1c .*
+ 401018: 12 04 stc gbr,r4
+ 40101a: ce 00 mov\.l @\(r0,r12\),r0
+ 40101c: 4c 30 add r4,r0
+ 40101e: 09 00 nop
+ 401020: 09 00 nop
+ 401022: 05 a0 bra 401030 <fn2\+0x30>
+ 401024: 09 00 nop
+ 401026: 09 00 nop
+ 401028: 1c 00 .*[ ]*.*
+ 40102a: 00 00 .*[ ]*.*
+ 40102c: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ 40102e: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ 401030: 09 00 nop
+ 401032: 09 00 nop
+ 401034: 09 00 nop
+ 401036: 09 00 nop
+ 401038: 03 d0 mov\.l 401048 <fn2\+0x48>,r0 ! 14 .*
+ 40103a: 12 04 stc gbr,r4
+ 40103c: ce 00 mov\.l @\(r0,r12\),r0
+ 40103e: 4c 30 add r4,r0
+ 401040: 09 00 nop
+ 401042: 09 00 nop
+ 401044: 04 a0 bra 401050 <fn2\+0x50>
+ 401046: 09 00 nop
+ 401048: 14 00 .*[ ]*.*
+ 40104a: 00 00 .*[ ]*.*
+ 40104c: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ 40104e: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ 401050: 09 00 nop
+ 401052: 09 00 nop
+ 401054: 09 00 nop
+ 401056: 09 00 nop
+ 401058: 03 d4 mov\.l 401068 <fn2\+0x68>,r4 ! 8 .*
+ 40105a: 12 00 stc gbr,r0
+ 40105c: 4c 30 add r4,r0
+ 40105e: 09 00 nop
+ 401060: 09 00 nop
+ 401062: 09 00 nop
+ 401064: 04 a0 bra 401070 <fn2\+0x70>
+ 401066: 09 00 nop
+ 401068: 08 00 .*[ ]*.*
+ 40106a: 00 00 .*[ ]*.*
+ 40106c: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ 40106e: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ 401070: 09 00 nop
+ 401072: 09 00 nop
+ 401074: 09 00 nop
+ 401076: 09 00 nop
+ 401078: 03 d4 mov\.l 401088 <fn2\+0x88>,r4 ! 10 .*
+ 40107a: 12 00 stc gbr,r0
+ 40107c: 4c 30 add r4,r0
+ 40107e: 09 00 nop
+ 401080: 09 00 nop
+ 401082: 09 00 nop
+ 401084: 04 a0 bra 401090 <fn2\+0x90>
+ 401086: 09 00 nop
+ 401088: 10 00 .*[ ]*.*
+ 40108a: 00 00 .*[ ]*.*
+ 40108c: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ 40108e: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ 401090: 09 00 nop
+ 401092: 09 00 nop
+ 401094: 09 00 nop
+ 401096: 09 00 nop
+ 401098: 03 d4 mov\.l 4010a8 <fn2\+0xa8>,r4 ! 18 .*
+ 40109a: 12 00 stc gbr,r0
+ 40109c: 4c 30 add r4,r0
+ 40109e: 09 00 nop
+ 4010a0: 09 00 nop
+ 4010a2: 09 00 nop
+ 4010a4: 04 a0 bra 4010b0 <fn2\+0xb0>
+ 4010a6: 09 00 nop
+ 4010a8: 18 00 .*[ ]*.*
+ 4010aa: 00 00 .*[ ]*.*
+ 4010ac: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ 4010ae: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ 4010b0: 09 00 nop
+ 4010b2: 09 00 nop
+ 4010b4: 09 00 nop
+ 4010b6: 09 00 nop
+ 4010b8: 12 00 stc gbr,r0
+ 4010ba: 09 00 nop
+ 4010bc: 09 00 nop
+ 4010be: 09 00 nop
+ 4010c0: 09 00 nop
+ 4010c2: 09 00 nop
+ 4010c4: 04 a0 bra 4010d0 <fn2\+0xd0>
+ 4010c6: 09 00 nop
+ 4010c8: 00 00 .*[ ]*.*
+ 4010ca: 00 00 .*[ ]*.*
+ 4010cc: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ 4010ce: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ 4010d0: 09 00 nop
+ 4010d2: 09 00 nop
+ 4010d4: 2c d1 mov\.l 401188 <fn2\+0x188>,r1 ! 10 .*
+ 4010d6: 0c 31 add r0,r1
+ 4010d8: 09 00 nop
+ 4010da: 09 00 nop
+ 4010dc: 2b d2 mov\.l 40118c <fn2\+0x18c>,r2 ! 14 .*
+ 4010de: 0c 32 add r0,r2
+ 4010e0: 09 00 nop
+ 4010e2: 09 00 nop
+ 4010e4: 09 00 nop
+ 4010e6: 09 00 nop
+ 4010e8: 12 00 stc gbr,r0
+ 4010ea: 09 00 nop
+ 4010ec: 09 00 nop
+ 4010ee: 09 00 nop
+ 4010f0: 09 00 nop
+ 4010f2: 09 00 nop
+ 4010f4: 04 a0 bra 401100 <fn2\+0x100>
+ 4010f6: 09 00 nop
+ 4010f8: 00 00 .*[ ]*.*
+ 4010fa: 00 00 .*[ ]*.*
+ 4010fc: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ 4010fe: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ 401100: 09 00 nop
+ 401102: 09 00 nop
+ 401104: 22 d1 mov\.l 401190 <fn2\+0x190>,r1 ! 18 .*
+ 401106: 0c 31 add r0,r1
+ 401108: 09 00 nop
+ 40110a: 09 00 nop
+ 40110c: 21 d2 mov\.l 401194 <fn2\+0x194>,r2 ! 1c .*
+ 40110e: 0c 32 add r0,r2
+ 401110: 09 00 nop
+ 401112: 09 00 nop
+ 401114: 09 00 nop
+ 401116: 09 00 nop
+ 401118: 02 d0 mov\.l 401124 <fn2\+0x124>,r0 ! 14 .*
+ 40111a: 12 01 stc gbr,r1
+ 40111c: ce 00 mov\.l @\(r0,r12\),r0
+ 40111e: 03 a0 bra 401128 <fn2\+0x128>
+ 401120: 0c 31 add r0,r1
+ 401122: 09 00 nop
+ 401124: 14 00 .*[ ]*.*
+ 401126: 00 00 .*[ ]*.*
+ 401128: 09 00 nop
+ 40112a: 09 00 nop
+ 40112c: 09 00 nop
+ 40112e: 09 00 nop
+ 401130: 02 d0 mov\.l 40113c <fn2\+0x13c>,r0 ! 18 .*
+ 401132: 12 01 stc gbr,r1
+ 401134: ce 00 mov\.l @\(r0,r12\),r0
+ 401136: 03 a0 bra 401140 <fn2\+0x140>
+ 401138: 1c 30 add r1,r0
+ 40113a: 09 00 nop
+ 40113c: 18 00 .*[ ]*.*
+ 40113e: 00 00 .*[ ]*.*
+ 401140: 09 00 nop
+ 401142: 09 00 nop
+ 401144: 09 00 nop
+ 401146: 09 00 nop
+ 401148: 02 d0 mov\.l 401154 <fn2\+0x154>,r0 ! 8 .*
+ 40114a: 12 01 stc gbr,r1
+ 40114c: 09 00 nop
+ 40114e: 03 a0 bra 401158 <fn2\+0x158>
+ 401150: 0c 31 add r0,r1
+ 401152: 09 00 nop
+ 401154: 08 00 .*[ ]*.*
+ 401156: 00 00 .*[ ]*.*
+ 401158: 09 00 nop
+ 40115a: 09 00 nop
+ 40115c: 09 00 nop
+ 40115e: 09 00 nop
+ 401160: 02 d0 mov\.l 40116c <fn2\+0x16c>,r0 ! 18 .*
+ 401162: 12 01 stc gbr,r1
+ 401164: 09 00 nop
+ 401166: 03 a0 bra 401170 <fn2\+0x170>
+ 401168: 0c 31 add r0,r1
+ 40116a: 09 00 nop
+ 40116c: 18 00 .*[ ]*.*
+ 40116e: 00 00 .*[ ]*.*
+ 401170: 09 00 nop
+ 401172: 09 00 nop
+ 401174: 09 00 nop
+ 401176: 09 00 nop
+ 401178: e3 6f mov r14,r15
+ 40117a: 26 4f lds\.l @r15\+,pr
+ 40117c: f6 6e mov\.l @r15\+,r14
+ 40117e: 0b 00 rts
+ 401180: f6 6c mov\.l @r15\+,r12
+ 401182: 09 00 nop
+ 401184: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ 401186: 01 00 .*[ ]*.*
+ 401188: 10 00 .*[ ]*.*
+ 40118a: 00 00 .*[ ]*.*
+ 40118c: 14 00 .*[ ]*.*
+ 40118e: 00 00 .*[ ]*.*
+ 401190: 18 00 .*[ ]*.*
+ 401192: 00 00 .*[ ]*.*
+ 401194: 1c 00 .*[ ]*.*
+ \.\.\.
+
+00402000 <_start>:
+ 402000: c6 2f mov\.l r12,@-r15
+ 402002: e6 2f mov\.l r14,@-r15
+ 402004: f3 6e mov r15,r14
+ 402006: 27 c7 mova 4020a4 <_start\+0xa4>,r0
+ 402008: 26 dc mov\.l 4020a4 <_start\+0xa4>,r12 ! [0-9a-f]+
+ 40200a: 0c 3c add r0,r12
+ 40200c: 09 00 nop
+ 40200e: 09 00 nop
+ 402010: 09 00 nop
+ 402012: 09 00 nop
+ 402014: 02 d0 mov\.l 402020 <_start\+0x20>,r0 ! 10 .*
+ 402016: 12 01 stc gbr,r1
+ 402018: ce 00 mov\.l @\(r0,r12\),r0
+ 40201a: 03 a0 bra 402024 <_start\+0x24>
+ 40201c: 0c 31 add r0,r1
+ 40201e: 09 00 nop
+ 402020: 10 00 .*[ ]*.*
+ 402022: 00 00 .*[ ]*.*
+ 402024: 09 00 nop
+ 402026: 09 00 nop
+ 402028: 09 00 nop
+ 40202a: 09 00 nop
+ 40202c: 02 d0 mov\.l 402038 <_start\+0x38>,r0 ! 20 .*
+ 40202e: 12 01 stc gbr,r1
+ 402030: 09 00 nop
+ 402032: 03 a0 bra 40203c <_start\+0x3c>
+ 402034: 0c 31 add r0,r1
+ 402036: 09 00 nop
+ 402038: 20 00 .*[ ]*.*
+ 40203a: 00 00 .*[ ]*.*
+ 40203c: 09 00 nop
+ 40203e: 09 00 nop
+ 402040: 09 00 nop
+ 402042: 09 00 nop
+ 402044: 02 d0 mov\.l 402050 <_start\+0x50>,r0 ! 2c
+ 402046: 12 01 stc gbr,r1
+ 402048: 09 00 nop
+ 40204a: 03 a0 bra 402054 <_start\+0x54>
+ 40204c: 0c 31 add r0,r1
+ 40204e: 09 00 nop
+ 402050: 2c 00 .*[ ]*.*
+ 402052: 00 00 .*[ ]*.*
+ 402054: 09 00 nop
+ 402056: 09 00 nop
+ 402058: 09 00 nop
+ 40205a: 09 00 nop
+ 40205c: 02 d0 mov\.l 402068 <_start\+0x68>,r0 ! 1c .*
+ 40205e: 12 01 stc gbr,r1
+ 402060: 09 00 nop
+ 402062: 03 a0 bra 40206c <_start\+0x6c>
+ 402064: 0c 31 add r0,r1
+ 402066: 09 00 nop
+ 402068: 1c 00 .*[ ]*.*
+ 40206a: 00 00 .*[ ]*.*
+ 40206c: 09 00 nop
+ 40206e: 09 00 nop
+ 402070: 09 00 nop
+ 402072: 09 00 nop
+ 402074: 12 01 stc gbr,r1
+ 402076: 0c d0 mov\.l 4020a8 <_start\+0xa8>,r0 ! 8 .*
+ 402078: 1c 30 add r1,r0
+ 40207a: 09 00 nop
+ 40207c: 09 00 nop
+ 40207e: 09 00 nop
+ 402080: 09 00 nop
+ 402082: 12 01 stc gbr,r1
+ 402084: 09 d0 mov\.l 4020ac <_start\+0xac>,r0 ! 28
+ 402086: 1c 30 add r1,r0
+ 402088: 09 00 nop
+ 40208a: 09 00 nop
+ 40208c: 09 00 nop
+ 40208e: 09 00 nop
+ 402090: 12 01 stc gbr,r1
+ 402092: 07 d0 mov\.l 4020b0 <_start\+0xb0>,r0 ! 18 .*
+ 402094: 1c 30 add r1,r0
+ 402096: 09 00 nop
+ 402098: 09 00 nop
+ 40209a: 09 00 nop
+ 40209c: 09 00 nop
+ 40209e: e3 6f mov r14,r15
+ 4020a0: 0b 00 rts
+ 4020a2: f6 6e mov\.l @r15\+,r14
+ 4020a4: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ 4020a6: 01 00 .*[ ]*.*
+ 4020a8: 08 00 .*[ ]*.*
+ 4020aa: 00 00 .*[ ]*.*
+ 4020ac: 28 00 .*[ ]*.*
+ 4020ae: 00 00 .*[ ]*.*
+ 4020b0: 18 00 .*[ ]*.*
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-sh/tlsbin-2.d b/binutils-2.21/ld/testsuite/ld-sh/tlsbin-2.d
new file mode 100644
index 0000000..cd30833
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/tlsbin-2.d
@@ -0,0 +1,79 @@
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as: -little
+#ld: -EL tmpdir/tlsbin-0-dso.so
+#readelf: -Ssrl
+#target: sh*-*-linux* sh*-*-netbsd*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
+ +\[ 0\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
+ +\[ 1\] \.interp .*
+ +\[ 2\] \.hash .*
+ +\[ 3\] \.dynsym .*
+ +\[ 4\] \.dynstr .*
+ +\[ 5\] \.rela\.dyn .*
+ +\[ 6\] \.rela\.plt .*
+ +\[ 7\] \.plt .*
+ +\[ 8\] \.text +PROGBITS .*
+ +\[ 9\] \.tdata +PROGBITS .* 0+018 00 WAT +0 +0 +4
+ +\[10\] \.tbss +NOBITS .* 0+010 00 WAT +0 +0 +1
+#...
+ +\[[0-9a-f]+\] \.got +PROGBITS .*
+#...
+ +\[[0-9a-f]+\] \.shstrtab .*
+ +\[[0-9a-f]+\] \.symtab .*
+ +\[[0-9a-f]+\] \.strtab .*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x402000
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +PHDR.*
+ +INTERP.*
+.*Requesting program interpreter.*
+ +LOAD.*
+ +LOAD.*
+ +DYNAMIC.*
+ +TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x0+18 0x0+28 R +0x4
+
+ Section to Segment mapping:
+ +Segment Sections\.\.\.
+ +00 +
+ +01 +\.interp *
+ +02 +\.interp \.hash \.dynsym \.dynstr \.rela\.dyn \.rela\.plt \.plt \.text *
+ +03 +\.tdata \.dynamic \.got *
+ +04 +\.dynamic *
+ +05 +\.tdata \.tbss *
+
+Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 4 entries:
+ Offset +Info +Type +Sym\.Value +Sym\. Name \+ Addend
+[0-9a-f ]+R_SH_TLS_TPOFF32 +0+ +sG3 \+ 0
+[0-9a-f ]+R_SH_TLS_TPOFF32 +0+ +sG2 \+ 0
+[0-9a-f ]+R_SH_TLS_TPOFF32 +0+ +sG4 \+ 0
+[0-9a-f ]+R_SH_TLS_TPOFF32 +0+ +sG1 \+ 0
+
+Relocation section '\.rela\.plt' at offset 0x[0-9a-f]+ contains 1 entries:
+ Offset +Info +Type +Sym\.Value +Sym\. Name \+ Addend
+[0-9a-f ]+R_SH_JMP_SLOT[0-9a-f ]+__tls_get_addr \+ [0-9a-f]+
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND *
+.* TLS +GLOBAL +DEFAULT +UND sG3
+.* TLS +GLOBAL +DEFAULT +UND sG2
+.* TLS +GLOBAL +DEFAULT +UND sG4
+.* FUNC +GLOBAL +DEFAULT +UND __tls_get_addr
+#...
+.* TLS +GLOBAL +DEFAULT +UND sG1
+#...
+
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-sh/tlsbin-3.d b/binutils-2.21/ld/testsuite/ld-sh/tlsbin-3.d
new file mode 100644
index 0000000..618ae59
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/tlsbin-3.d
@@ -0,0 +1,12 @@
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as: -little
+#ld: -EL tmpdir/tlsbin-0-dso.so
+#objdump: -sj.got
+#target: sh*-*-linux* sh*-*-netbsd*
+
+.*: +file format elf32-sh.*
+
+Contents of section \.got:
+ [0-9a-f]+ [0-9a-f]+ 00000000 00000000 [0-9a-f]+ .*
+ [0-9a-f]+ 00000000 00000000 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/tlsbin-4.d b/binutils-2.21/ld/testsuite/ld-sh/tlsbin-4.d
new file mode 100644
index 0000000..b1683b8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/tlsbin-4.d
@@ -0,0 +1,12 @@
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as: -little
+#ld: -EL tmpdir/tlsbin-0-dso.so
+#objdump: -sj.tdata
+#target: sh*-*-linux* sh*-*-netbsd*
+
+.*: +file format elf32-sh.*
+
+Contents of section .tdata:
+ [0-9a-f]+ 11000000 12000000 41000000 42000000 .*
+ [0-9a-f]+ 01010000 02010000 +.*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/tlsbin.s b/binutils-2.21/ld/testsuite/ld-sh/tlsbin.s
new file mode 100644
index 0000000..642eb3d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/tlsbin.s
@@ -0,0 +1,90 @@
+ .section ".tbss", "awT", @nobits
+ .globl bg1, bg2
+bg1: .space 4
+bg2: .space 4
+bl1: .space 4
+bl2: .space 4
+ .text
+ .globl _start
+ .type _start,@function
+_start:
+ mov.l r12,@-r15
+ mov.l r14,@-r15
+ mov r15,r14
+ ! Set up .GOT pointer for non-pic @gottpoff sequences
+ mova .L3,r0
+ mov.l .L3,r12
+ add r0,r12
+ nop;nop;nop;nop
+
+ ! @GOTTPOFF IE against global var
+ mov.l 1f,r0
+ stc gbr,r1
+ mov.l @(r0,r12),r0
+ bra 2f
+ add r0,r1
+ .align 2
+1: .long sG3@GOTTPOFF
+2:
+ nop;nop;nop;nop
+
+ ! @GOTTPOFF IE -> LE against global var defined in exec
+ mov.l 1f,r0
+ stc gbr,r1
+ mov.l @(r0,r12),r0
+ bra 2f
+ add r0,r1
+ .align 2
+1: .long bg1@GOTTPOFF
+2:
+ nop;nop;nop;nop
+
+ ! @GOTTPOFF IE -> LE against local var
+ mov.l 1f,r0
+ stc gbr,r1
+ mov.l @(r0,r12),r0
+ bra 2f
+ add r0,r1
+ .align 2
+1: .long bl2@GOTTPOFF
+2:
+ nop;nop;nop;nop
+
+ ! @GOTTPOFF IE -> LE against hidden but not local var
+ mov.l 1f,r0
+ stc gbr,r1
+ mov.l @(r0,r12),r0
+ bra 2f
+ add r0,r1
+ .align 2
+1: .long sh2@GOTTPOFF
+2:
+ nop;nop;nop;nop
+
+ ! LE @TPOFF, global var defined in exec
+ stc gbr,r1
+ mov.l .L4,r0
+ add r1,r0
+ nop;nop;nop;nop
+
+ ! LE @TPOFF, local var
+ stc gbr,r1
+ mov.l .L5,r0
+ add r1,r0
+ nop;nop;nop;nop
+
+ ! LE @TPOFF, hidden var defined in exec
+ stc gbr,r1
+ mov.l .L6,r0
+ add r1,r0
+ nop;nop;nop;nop
+
+ mov r14,r15
+ rts
+ mov.l @r15+,r14
+
+ .align 2
+.L3: .long _GLOBAL_OFFSET_TABLE_
+.L4: .long sg1@TPOFF
+.L5: .long bl1@TPOFF
+.L6: .long sh1@TPOFF
diff --git a/binutils-2.21/ld/testsuite/ld-sh/tlsbinpic.s b/binutils-2.21/ld/testsuite/ld-sh/tlsbinpic.s
new file mode 100644
index 0000000..cb8b361
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/tlsbinpic.s
@@ -0,0 +1,206 @@
+ ! Force .got aligned to 4K, so it very likely gets at 0x413000
+ .data
+ .balign 4096
+ .section ".tdata", "awT", @progbits
+ .globl sg1, sg2
+ .globl sh1, sh2
+ .hidden sh1, sh2
+sg1: .long 17
+sg2: .long 18
+sl1: .long 65
+sl2: .long 66
+sh1: .long 257
+sh2: .long 258
+ ! Force .text aligned to 4K, so it very likely gets at 0x401000.
+ .text
+ .balign 4096
+ .globl fn2
+ .type fn2,@function
+fn2:
+ mov.l r12,@-r15
+ mov.l r14,@-r15
+ sts.l pr,@-r15
+ mova .L3,r0
+ mov.l .L3,r12
+ add r0,r12
+ mov r15,r14
+ nop;nop;nop;nop
+
+ ! GD -> IE because variable is not defined in executable
+ mov.l 1f,r4
+ mova 2f,r0
+ mov.l 2f,r1
+ add r0,r1
+ jsr @r1
+ add r12,r4
+ bra 3f
+ nop
+ .align 2
+1: .long sG1@TLSGD
+2: .long __tls_get_addr@PLT
+3:
+ nop;nop;nop;nop
+
+ ! GD -> IE because variable is not defined in executable where
+ ! the variable is referenced through @gottpoff too
+ mov.l 1f,r4
+ mova 2f,r0
+ mov.l 2f,r1
+ add r0,r1
+ jsr @r1
+ add r12,r4
+ bra 3f
+ nop
+ .align 2
+1: .long sG2@TLSGD
+2: .long __tls_get_addr@PLT
+3:
+ nop;nop;nop;nop
+
+ ! GD -> LE with global variable defined in executable
+ mov.l 1f,r4
+ mova 2f,r0
+ mov.l 2f,r1
+ add r0,r1
+ jsr @r1
+ add r12,r4
+ bra 3f
+ nop
+ .align 2
+1: .long sg1@TLSGD
+2: .long __tls_get_addr@PLT
+3:
+ nop;nop;nop;nop
+
+ ! GD -> LE with local variable defined in executable
+ mov.l 1f,r4
+ mova 2f,r0
+ mov.l 2f,r1
+ add r0,r1
+ jsr @r1
+ add r12,r4
+ bra 3f
+ nop
+ .align 2
+1: .long sl1@TLSGD
+2: .long __tls_get_addr@PLT
+3:
+ nop;nop;nop;nop
+
+ ! GD -> LE with hidden variable defined in executable
+ mov.l 1f,r4
+ mova 2f,r0
+ mov.l 2f,r1
+ add r0,r1
+ jsr @r1
+ add r12,r4
+ bra 3f
+ nop
+ .align 2
+1: .long sh1@TLSGD
+2: .long __tls_get_addr@PLT
+3:
+ nop;nop;nop;nop
+
+ ! LD -> LE with local variable defined in executable
+ mov.l 1f,r4
+ mova 2f,r0
+ mov.l 2f,r1
+ add r0,r1
+ jsr @r1
+ add r12,r4
+ bra 3f
+ nop
+ .align 2
+1: .long sl1@TLSLDM
+2: .long __tls_get_addr@PLT
+3:
+ nop;nop
+ mov.l .L4,r1
+ add r0,r1
+ nop;nop
+ mov.l .L5,r2
+ add r0,r2
+ nop;nop;nop;nop
+
+ ! LD -> LE against hidden variables
+ mov.l 1f,r4
+ mova 2f,r0
+ mov.l 2f,r1
+ add r0,r1
+ jsr @r1
+ add r12,r4
+ bra 3f
+ nop
+ .align 2
+1: .long sh1@TLSLDM
+2: .long __tls_get_addr@PLT
+3:
+ nop;nop
+ mov.l .L6,r1
+ add r0,r1
+ nop;nop
+ mov.l .L7,r2
+ add r0,r2
+ nop;nop;nop;nop
+
+ ! @GOTTPOFF IE against global var
+ mov.l 1f,r0
+ stc gbr,r1
+ mov.l @(r0,r12),r0
+ bra 2f
+ add r0,r1
+ .align 2
+1: .long sG2@GOTTPOFF
+2:
+ nop;nop;nop;nop
+
+ ! @GOTTPOFF IE against global var
+ mov.l 1f,r0
+ stc gbr,r1
+ mov.l @(r0,r12),r0
+ bra 2f
+ add r1,r0
+ .align 2
+1: .long sG4@GOTTPOFF
+2:
+ nop;nop;nop;nop
+
+ ! @GOTTPOFF IE -> LE against global var defined in exec
+ mov.l 1f,r0
+ stc gbr,r1
+ mov.l @(r0,r12),r0
+ bra 2f
+ add r0,r1
+ .align 2
+1: .long sg1@GOTTPOFF
+2:
+ nop;nop;nop;nop
+
+ ! @GOTTPOFF IE -> LE against hidden var
+ mov.l 1f,r0
+ stc gbr,r1
+ mov.l @(r0,r12),r0
+ bra 2f
+ add r0,r1
+ .align 2
+1: .long sh1@GOTTPOFF
+2:
+ nop;nop;nop;nop
+
+ mov r14,r15
+ lds.l @r15+,pr
+ mov.l @r15+,r14
+ rts
+ mov.l @r15+,r12
+
+ .align 2
+.L3: .long _GLOBAL_OFFSET_TABLE_
+.L4: .long sl1@DTPOFF
+.L5: .long sl2@DTPOFF
+.L6: .long sh1@DTPOFF
+.L7: .long sh2@DTPOFF
+ ! Fill page with 0.
+ .space .L8-.
+ .balign 4096
+.L8:
diff --git a/binutils-2.21/ld/testsuite/ld-sh/tlslib.s b/binutils-2.21/ld/testsuite/ld-sh/tlslib.s
new file mode 100644
index 0000000..35b6c70
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/tlslib.s
@@ -0,0 +1,20 @@
+ .section ".tdata", "awT", @progbits
+ .globl sG1, sG2, sG3, sG4, sG5, sG6, sG7, sG8
+sG1: .long 513
+sG2: .long 514
+sG3: .long 515
+sG4: .long 516
+sG5: .long 517
+sG6: .long 518
+sG7: .long 519
+sG8: .long 520
+
+ .text
+ .align 1
+ ! Dummy.
+ .globl __tls_get_addr
+ .type __tls_get_addr,@function
+__tls_get_addr:
+ rts
+ nop
+
diff --git a/binutils-2.21/ld/testsuite/ld-sh/tlspic-1.d b/binutils-2.21/ld/testsuite/ld-sh/tlspic-1.d
new file mode 100644
index 0000000..6638eda
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/tlspic-1.d
@@ -0,0 +1,292 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as: -little
+#ld: -shared -EL
+#objdump: -drj.text
+#target: sh*-*-linux* sh*-*-netbsd*
+
+.*: +file format elf32-sh.*
+
+Disassembly of section \.text:
+
+[0-9a-f]+ <fn1>:
+ [0-9a-f]+: c6 2f mov\.l r12,@-r15
+ [0-9a-f]+: e6 2f mov\.l r14,@-r15
+ [0-9a-f]+: 22 4f sts\.l pr,@-r15
+ [0-9a-f]+: 83 c7 mova [0-9a-f]+ <fn1\+0x214>,r0
+ [0-9a-f]+: 82 dc mov\.l [0-9a-f]+ <fn1\+0x214>,r12 ! [0-9a-f]+
+ [0-9a-f]+: 0c 3c add r0,r12
+ [0-9a-f]+: f3 6e mov r15,r14
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 04 d4 mov\.l [0-9a-f]+ <fn1\+0x28>,r4 ! 30
+ [0-9a-f]+: 04 c7 mova [0-9a-f]+ <fn1\+0x2c>,r0
+ [0-9a-f]+: 04 d1 mov\.l [0-9a-f]+ <fn1\+0x2c>,r1 ! [0-9a-f]+
+ [0-9a-f]+: 0c 31 add r0,r1
+ [0-9a-f]+: 0b 41 jsr @r1
+ [0-9a-f]+: cc 34 add r12,r4
+ [0-9a-f]+: 05 a0 bra [0-9a-f]+ <fn1\+0x30>
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 30 00 .*[ ]*.*
+ [0-9a-f]+: 00 00 .*[ ]*.*
+ [0-9a-f]+: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ [0-9a-f]+: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 03 d0 mov\.l [0-9a-f]+ <fn1\+0x48>,r0 ! 38
+ [0-9a-f]+: 12 04 stc gbr,r4
+ [0-9a-f]+: ce 00 mov\.l @\(r0,r12\),r0
+ [0-9a-f]+: 4c 30 add r4,r0
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 04 a0 bra [0-9a-f]+ <fn1\+0x50>
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 38 00 .*[ ]*.*
+ [0-9a-f]+: 00 00 .*[ ]*.*
+ [0-9a-f]+: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ [0-9a-f]+: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 03 d4 mov\.l [0-9a-f]+ <fn1\+0x68>,r4 ! 10 .*
+ [0-9a-f]+: 04 c7 mova [0-9a-f]+ <fn1\+0x6c>,r0
+ [0-9a-f]+: 03 d1 mov\.l [0-9a-f]+ <fn1\+0x6c>,r1 ! [0-9a-f]+
+ [0-9a-f]+: 0c 31 add r0,r1
+ [0-9a-f]+: 0b 41 jsr @r1
+ [0-9a-f]+: cc 34 add r12,r4
+ [0-9a-f]+: 04 a0 bra [0-9a-f]+ <fn1\+0x70>
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 10 00 .*[ ]*.*
+ [0-9a-f]+: 00 00 .*[ ]*.*
+ [0-9a-f]+: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ [0-9a-f]+: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 03 d0 mov\.l [0-9a-f]+ <fn1\+0x88>,r0 ! 18 .*
+ [0-9a-f]+: 12 04 stc gbr,r4
+ [0-9a-f]+: ce 00 mov\.l @\(r0,r12\),r0
+ [0-9a-f]+: 4c 30 add r4,r0
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 04 a0 bra [0-9a-f]+ <fn1\+0x90>
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 18 00 .*[ ]*.*
+ [0-9a-f]+: 00 00 .*[ ]*.*
+ [0-9a-f]+: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ [0-9a-f]+: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 03 d4 mov\.l [0-9a-f]+ <fn1\+0xa8>,r4 ! 3c
+ [0-9a-f]+: 04 c7 mova [0-9a-f]+ <fn1\+0xac>,r0
+ [0-9a-f]+: 03 d1 mov\.l [0-9a-f]+ <fn1\+0xac>,r1 ! [0-9a-f]+
+ [0-9a-f]+: 0c 31 add r0,r1
+ [0-9a-f]+: 0b 41 jsr @r1
+ [0-9a-f]+: cc 34 add r12,r4
+ [0-9a-f]+: 04 a0 bra [0-9a-f]+ <fn1\+0xb0>
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 3c 00 .*[ ]*.*
+ [0-9a-f]+: 00 00 .*[ ]*.*
+ [0-9a-f]+: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ [0-9a-f]+: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 03 d0 mov\.l [0-9a-f]+ <fn1\+0xc8>,r0 ! 44
+ [0-9a-f]+: 12 04 stc gbr,r4
+ [0-9a-f]+: ce 00 mov\.l @\(r0,r12\),r0
+ [0-9a-f]+: 4c 30 add r4,r0
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 04 a0 bra [0-9a-f]+ <fn1\+0xd0>
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 44 00 .*[ ]*.*
+ [0-9a-f]+: 00 00 .*[ ]*.*
+ [0-9a-f]+: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ [0-9a-f]+: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 03 d4 mov\.l [0-9a-f]+ <fn1\+0xe8>,r4 ! 24
+ [0-9a-f]+: 04 c7 mova [0-9a-f]+ <fn1\+0xec>,r0
+ [0-9a-f]+: 03 d1 mov\.l [0-9a-f]+ <fn1\+0xec>,r1 ! [0-9a-f]+
+ [0-9a-f]+: 0c 31 add r0,r1
+ [0-9a-f]+: 0b 41 jsr @r1
+ [0-9a-f]+: cc 34 add r12,r4
+ [0-9a-f]+: 04 a0 bra [0-9a-f]+ <fn1\+0xf0>
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 24 00 .*[ ]*.*
+ [0-9a-f]+: 00 00 .*[ ]*.*
+ [0-9a-f]+: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ [0-9a-f]+: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 03 d0 mov\.l [0-9a-f]+ <fn1\+0x108>,r0 ! 2c
+ [0-9a-f]+: 12 04 stc gbr,r4
+ [0-9a-f]+: ce 00 mov\.l @\(r0,r12\),r0
+ [0-9a-f]+: 4c 30 add r4,r0
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 04 a0 bra [0-9a-f]+ <fn1\+0x110>
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 2c 00 .*[ ]*.*
+ [0-9a-f]+: 00 00 .*[ ]*.*
+ [0-9a-f]+: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ [0-9a-f]+: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 03 d4 mov\.l [0-9a-f]+ <fn1\+0x128>,r4 ! 1c .*
+ [0-9a-f]+: 04 c7 mova [0-9a-f]+ <fn1\+0x12c>,r0
+ [0-9a-f]+: 03 d1 mov\.l [0-9a-f]+ <fn1\+0x12c>,r1 ! [0-9a-f]+
+ [0-9a-f]+: 0c 31 add r0,r1
+ [0-9a-f]+: 0b 41 jsr @r1
+ [0-9a-f]+: cc 34 add r12,r4
+ [0-9a-f]+: 04 a0 bra [0-9a-f]+ <fn1\+0x130>
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 1c 00 .*[ ]*.*
+ [0-9a-f]+: 00 00 .*[ ]*.*
+ [0-9a-f]+: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ [0-9a-f]+: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 38 d1 mov\.l [0-9a-f]+ <fn1\+0x218>,r1 ! 8 .*
+ [0-9a-f]+: 0c 31 add r0,r1
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 37 d2 mov\.l [0-9a-f]+ <fn1\+0x21c>,r2 ! c .*
+ [0-9a-f]+: 0c 32 add r0,r2
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 03 d4 .*[ ]*.*
+ [0-9a-f]+: 04 c7 .*[ ]*.*
+ [0-9a-f]+: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ [0-9a-f]+: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ [0-9a-f]+: 0b 41 jsr @r1
+ [0-9a-f]+: cc 34 add r12,r4
+ [0-9a-f]+: 04 a0 bra [0-9a-f]+ <fn1\+0x160>
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 1c 00 .*[ ]*.*
+ [0-9a-f]+: 00 00 .*[ ]*.*
+ [0-9a-f]+: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ [0-9a-f]+: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 2e d1 mov\.l [0-9a-f]+ <fn1\+0x220>,r1 ! 10 .*
+ [0-9a-f]+: 0c 31 add r0,r1
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 2d d2 mov\.l [0-9a-f]+ <fn1\+0x224>,r2 ! 14 .*
+ [0-9a-f]+: 0c 32 add r0,r2
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 03 d4 mov\.l [0-9a-f]+ <fn1\+0x188>,r4 ! 1c .*
+ [0-9a-f]+: 04 c7 mova [0-9a-f]+ <fn1\+0x18c>,r0
+ [0-9a-f]+: 03 d1 mov\.l [0-9a-f]+ <fn1\+0x18c>,r1 ! [0-9a-f]+
+ [0-9a-f]+: 0c 31 add r0,r1
+ [0-9a-f]+: 0b 41 jsr @r1
+ [0-9a-f]+: cc 34 add r12,r4
+ [0-9a-f]+: 04 a0 bra [0-9a-f]+ <fn1\+0x190>
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 1c 00 .*[ ]*.*
+ [0-9a-f]+: 00 00 .*[ ]*.*
+ [0-9a-f]+: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ [0-9a-f]+: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 24 d1 mov\.l [0-9a-f]+ <fn1\+0x228>,r1 ! 18 .*
+ [0-9a-f]+: 0c 31 add r0,r1
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 23 d2 mov\.l [0-9a-f]+ <fn1\+0x22c>,r2 ! 1c .*
+ [0-9a-f]+: 0c 32 add r0,r2
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 02 d0 mov\.l [0-9a-f]+ <fn1\+0x1b4>,r0 ! 38
+ [0-9a-f]+: 12 01 stc gbr,r1
+ [0-9a-f]+: ce 00 mov\.l @\(r0,r12\),r0
+ [0-9a-f]+: 03 a0 bra [0-9a-f]+ <fn1\+0x1b8>
+ [0-9a-f]+: 0c 31 add r0,r1
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 38 00 .*[ ]*.*
+ [0-9a-f]+: 00 00 .*[ ]*.*
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 02 d0 mov\.l [0-9a-f]+ <fn1\+0x1cc>,r0 ! 18 .*
+ [0-9a-f]+: 12 01 stc gbr,r1
+ [0-9a-f]+: ce 00 mov\.l @\(r0,r12\),r0
+ [0-9a-f]+: 03 a0 bra [0-9a-f]+ <fn1\+0x1d0>
+ [0-9a-f]+: 0c 31 add r0,r1
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 18 00 .*[ ]*.*
+ [0-9a-f]+: 00 00 .*[ ]*.*
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 02 d0 mov\.l [0-9a-f]+ <fn1\+0x1e4>,r0 ! 44
+ [0-9a-f]+: 12 01 stc gbr,r1
+ [0-9a-f]+: ce 00 mov\.l @\(r0,r12\),r0
+ [0-9a-f]+: 03 a0 bra [0-9a-f]+ <fn1\+0x1e8>
+ [0-9a-f]+: 0c 31 add r0,r1
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 44 00 .*[ ]*.*
+ [0-9a-f]+: 00 00 .*[ ]*.*
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 02 d0 mov\.l [0-9a-f]+ <fn1\+0x1fc>,r0 ! 2c
+ [0-9a-f]+: 12 01 stc gbr,r1
+ [0-9a-f]+: ce 00 mov\.l @\(r0,r12\),r0
+ [0-9a-f]+: 03 a0 bra [0-9a-f]+ <fn1\+0x200>
+ [0-9a-f]+: 0c 31 add r0,r1
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 2c 00 .*[ ]*.*
+ [0-9a-f]+: 00 00 .*[ ]*.*
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: e3 6f mov r14,r15
+ [0-9a-f]+: 26 4f lds\.l @r15\+,pr
+ [0-9a-f]+: f6 6e mov\.l @r15\+,r14
+ [0-9a-f]+: 0b 00 rts
+ [0-9a-f]+: f6 6c mov\.l @r15\+,r12
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ [0-9a-f]+: 01 00 .*[ ]*.*
+ [0-9a-f]+: 08 00 .*[ ]*.*
+ [0-9a-f]+: 00 00 .*[ ]*.*
+ [0-9a-f]+: 0c 00 .*[ ]*.*
+ [0-9a-f]+: 00 00 .*[ ]*.*
+ [0-9a-f]+: 10 00 .*[ ]*.*
+ [0-9a-f]+: 00 00 .*[ ]*.*
+ [0-9a-f]+: 14 00 .*[ ]*.*
+ [0-9a-f]+: 00 00 .*[ ]*.*
+ [0-9a-f]+: 18 00 .*[ ]*.*
+ [0-9a-f]+: 00 00 .*[ ]*.*
+ [0-9a-f]+: 1c 00 .*[ ]*.*
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-sh/tlspic-2.d b/binutils-2.21/ld/testsuite/ld-sh/tlspic-2.d
new file mode 100644
index 0000000..4005299
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/tlspic-2.d
@@ -0,0 +1,79 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as: -little
+#ld: -shared -EL
+#readelf: -Ssrl
+#target: sh*-*-linux* sh*-*-netbsd*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
+ +\[ 0\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
+ +\[ 1\] \.hash .*
+ +\[ 2\] \.dynsym .*
+ +\[ 3\] \.dynstr .*
+ +\[ 4\] \.rela\.dyn .*
+ +\[ 5\] \.rela\.plt .*
+ +\[ 6\] \.plt .*
+ +\[ 7\] \.text +PROGBITS .*
+ +\[ 8\] \.tdata +PROGBITS .* 0+18 00 WAT +0 +0 +4
+ +\[ 9\] \.tbss +NOBITS .* 0+08 00 WAT +0 +0 +1
+#...
+ +\[[0-9a-f]+\] \.got +PROGBITS .*
+#...
+ +\[[0-9a-f]+\] \.shstrtab .*
+ +\[[0-9a-f]+\] \.symtab .*
+ +\[[0-9a-f]+\] \.strtab .*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x[0-9a-f]+
+There are 4 program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +LOAD.*
+ +LOAD.*
+ +DYNAMIC.*
+ +TLS .* 0x0+18 0x0+20 R +0x4
+
+ Section to Segment mapping:
+ +Segment Sections\.\.\.
+ +00 +\.hash \.dynsym \.dynstr \.rela\.dyn \.rela\.plt \.plt \.text *
+ +01 +\.tdata \.dynamic \.got *
+ +02 +\.dynamic *
+ +03 +\.tdata \.tbss *
+
+Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 10 entries:
+ Offset +Info +Type +Sym\.Value +Sym\. Name \+ Addend
+[0-9a-f ]+R_SH_TLS_DTPMOD32 +0+00
+[0-9a-f ]+R_SH_TLS_TPOFF32 +0+0c
+[0-9a-f ]+R_SH_TLS_DTPMOD32 +0+00
+[0-9a-f ]+R_SH_TLS_DTPMOD32 +0+00
+[0-9a-f ]+R_SH_TLS_TPOFF32 +0+1c
+[0-9a-f ]+R_SH_TLS_DTPMOD32 +0+00
+[0-9a-f ]+R_SH_TLS_TPOFF32 +0+14
+[0-9a-f ]+R_SH_TLS_DTPMOD32 +0+ +sg1 \+ 0
+[0-9a-f ]+R_SH_TLS_DTPOFF32 +0+ +sg1 \+ 0
+[0-9a-f ]+R_SH_TLS_TPOFF32 +0+04 +sg2 \+ 0
+
+Relocation section '\.rela\.plt' at offset 0x[0-9a-f]+ contains 1 entries:
+ Offset +Info +Type +Sym\.Value +Sym\. Name \+ Addend
+[0-9a-f ]+R_SH_JMP_SLOT[0-9a-f ]+__tls_get_addr \+ [0-9a-f]+
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND *
+.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr
+.* TLS +GLOBAL +DEFAULT +8 sg1
+#...
+.* FUNC +GLOBAL +DEFAULT +7 fn1
+#...
+.* TLS +GLOBAL +DEFAULT +8 sg2
+#...
+
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-sh/tlspic-3.d b/binutils-2.21/ld/testsuite/ld-sh/tlspic-3.d
new file mode 100644
index 0000000..6e79989
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/tlspic-3.d
@@ -0,0 +1,15 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as: -little
+#ld: -shared -EL
+#objdump: -sj.got
+#target: sh*-*-linux* sh*-*-netbsd*
+
+.*: +file format elf32-sh.*
+
+Contents of section \.got:
+ [0-9a-f]+ [0-9a-f]+ 00000000 00000000 [0-9a-f]+ .*
+ [0-9a-f]+ 00000000 08000000 00000000 00000000 .*
+ [0-9a-f]+ 00000000 00000000 18000000 00000000 .*
+ [0-9a-f]+ 00000000 00000000 00000000 00000000 .*
+ [0-9a-f]+ 10000000 00000000 +.*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/tlspic-4.d b/binutils-2.21/ld/testsuite/ld-sh/tlspic-4.d
new file mode 100644
index 0000000..263c5d6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/tlspic-4.d
@@ -0,0 +1,12 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as: -little
+#ld: -shared -EL
+#objdump: -sj.tdata
+#target: sh*-*-linux* sh*-*-netbsd*
+
+.*: +file format elf32-sh.*
+
+Contents of section \.tdata:
+ [0-9a-f]+ 11000000 12000000 41000000 42000000 .*
+ [0-9a-f]+ 01010000 02010000 +.*
diff --git a/binutils-2.21/ld/testsuite/ld-sh/tlspic1.s b/binutils-2.21/ld/testsuite/ld-sh/tlspic1.s
new file mode 100644
index 0000000..153709a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/tlspic1.s
@@ -0,0 +1,267 @@
+ .section ".tdata", "awT", @progbits
+ .globl sg1, sg2
+ .globl sh1, sh2
+ .hidden sh1, sh2
+sg1: .long 17
+sg2: .long 18
+sl1: .long 65
+sl2: .long 66
+sh1: .long 257
+sh2: .long 258
+ .text
+ .align 1
+ .globl fn1
+ .type fn1,@function
+fn1:
+ mov.l r12,@-r15
+ mov.l r14,@-r15
+ sts.l pr,@-r15
+ mova .L3,r0
+ mov.l .L3,r12
+ add r0,r12
+ mov r15,r14
+ nop;nop;nop;nop
+
+ ! GD
+ mov.l 1f,r4
+ mova 2f,r0
+ mov.l 2f,r1
+ add r0,r1
+ jsr @r1
+ add r12,r4
+ bra 3f
+ nop
+ .align 2
+1: .long sg1@TLSGD
+2: .long __tls_get_addr@PLT
+3:
+ nop;nop;nop;nop
+
+ ! GD -> IE because variable is referenced through @GOTTPOFF too
+ mov.l 1f,r4
+ mova 2f,r0
+ mov.l 2f,r1
+ add r0,r1
+ jsr @r1
+ add r12,r4
+ bra 3f
+ nop
+ .align 2
+1: .long sg2@TLSGD
+2: .long __tls_get_addr@PLT
+3:
+ nop;nop;nop;nop
+
+ ! GD against local variable
+ mov.l 1f,r4
+ mova 2f,r0
+ mov.l 2f,r1
+ add r0,r1
+ jsr @r1
+ add r12,r4
+ bra 3f
+ nop
+ .align 2
+1: .long sl1@TLSGD
+2: .long __tls_get_addr@PLT
+3:
+ nop;nop;nop;nop
+
+ ! GD -> IE against local variable referenced through @GOTTPOFF too
+ mov.l 1f,r4
+ mova 2f,r0
+ mov.l 2f,r1
+ add r0,r1
+ jsr @r1
+ add r12,r4
+ bra 3f
+ nop
+ .align 2
+1: .long sl2@TLSGD
+2: .long __tls_get_addr@PLT
+3:
+ nop;nop;nop;nop
+
+ ! GD against hidden and local variable
+ mov.l 1f,r4
+ mova 2f,r0
+ mov.l 2f,r1
+ add r0,r1
+ jsr @r1
+ add r12,r4
+ bra 3f
+ nop
+ .align 2
+1: .long sh1@TLSGD
+2: .long __tls_get_addr@PLT
+3:
+ nop;nop;nop;nop
+
+ ! GD -> IE against hidden and local variable referenced through
+ ! @GOTTPOFF too
+ mov.l 1f,r4
+ mova 2f,r0
+ mov.l 2f,r1
+ add r0,r1
+ jsr @r1
+ add r12,r4
+ bra 3f
+ nop
+ .align 2
+1: .long sh2@TLSGD
+2: .long __tls_get_addr@PLT
+3:
+ nop;nop;nop;nop
+
+ ! GD against hidden but not local variable
+ mov.l 1f,r4
+ mova 2f,r0
+ mov.l 2f,r1
+ add r0,r1
+ jsr @r1
+ add r12,r4
+ bra 3f
+ nop
+ .align 2
+1: .long sH1@TLSGD
+2: .long __tls_get_addr@PLT
+3:
+ nop;nop;nop;nop
+
+ ! GD -> IE against hidden but not local variable referenced through
+ ! @GOTTPOFF too
+ mov.l 1f,r4
+ mova 2f,r0
+ mov.l 2f,r1
+ add r0,r1
+ jsr @r1
+ add r12,r4
+ bra 3f
+ nop
+ .align 2
+1: .long sH2@TLSGD
+2: .long __tls_get_addr@PLT
+3:
+ nop;nop;nop;nop
+
+ ! LD
+ mov.l 1f,r4
+ mova 2f,r0
+ mov.l 2f,r1
+ add r0,r1
+ jsr @r1
+ add r12,r4
+ bra 3f
+ nop
+ .align 2
+1: .long sl1@TLSLDM
+2: .long __tls_get_addr@PLT
+3:
+ nop;nop
+ mov.l .L4,r1
+ add r0,r1
+ nop;nop
+ mov.l .L5,r2
+ add r0,r2
+ nop;nop;nop;nop
+
+ ! LD against hidden and local variables
+ mov.l 1f,r4
+ mova 2f,r0
+ mov.l 2f,r1
+ add r0,r1
+ jsr @r1
+ add r12,r4
+ bra 3f
+ nop
+ .align 2
+1: .long sl1@TLSLDM
+2: .long __tls_get_addr@PLT
+3:
+ nop;nop
+ mov.l .L6,r1
+ add r0,r1
+ nop;nop
+ mov.l .L7,r2
+ add r0,r2
+ nop;nop;nop;nop
+
+ ! LD against hidden but not local variables
+ mov.l 1f,r4
+ mova 2f,r0
+ mov.l 2f,r1
+ add r0,r1
+ jsr @r1
+ add r12,r4
+ bra 3f
+ nop
+ .align 2
+1: .long sH1@TLSLDM
+2: .long __tls_get_addr@PLT
+3:
+ nop;nop
+ mov.l .L8,r1
+ add r0,r1
+ nop;nop
+ mov.l .L9,r2
+ add r0,r2
+ nop;nop;nop;nop
+
+ ! @GOTTPOFF IE against global var
+ mov.l 1f,r0
+ stc gbr,r1
+ mov.l @(r0,r12),r0
+ bra 2f
+ add r0,r1
+ .align 2
+1: .long sg2@GOTTPOFF
+2:
+ nop;nop;nop;nop
+
+ ! @GOTTPOFF IE against local var
+ mov.l 1f,r0
+ stc gbr,r1
+ mov.l @(r0,r12),r0
+ bra 2f
+ add r0,r1
+ .align 2
+1: .long sl2@GOTTPOFF
+2:
+ nop;nop;nop;nop
+
+ ! @GOTTPOFF IE against hidden and local var
+ mov.l 1f,r0
+ stc gbr,r1
+ mov.l @(r0,r12),r0
+ bra 2f
+ add r0,r1
+ .align 2
+1: .long sh2@GOTTPOFF
+2:
+ nop;nop;nop;nop
+
+ ! @GOTTPOFF IE against hidden but not local var
+ mov.l 1f,r0
+ stc gbr,r1
+ mov.l @(r0,r12),r0
+ bra 2f
+ add r0,r1
+ .align 2
+1: .long sH2@GOTTPOFF
+2:
+ nop;nop;nop;nop
+
+ mov r14,r15
+ lds.l @r15+,pr
+ mov.l @r15+,r14
+ rts
+ mov.l @r15+,r12
+
+ .align 2
+.L3: .long _GLOBAL_OFFSET_TABLE_
+.L4: .long sl1@DTPOFF
+.L5: .long sl1@DTPOFF + 4
+.L6: .long sh1@DTPOFF
+.L7: .long sh2@DTPOFF
+.L8: .long sH1@DTPOFF
+.L9: .long sH2@DTPOFF
diff --git a/binutils-2.21/ld/testsuite/ld-sh/tlspic2.s b/binutils-2.21/ld/testsuite/ld-sh/tlspic2.s
new file mode 100644
index 0000000..35319ba
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/tlspic2.s
@@ -0,0 +1,5 @@
+ .section ".tbss", "awT", @nobits
+ .globl sH1, sH2
+ .hidden sH1, sH2
+sH1: .space 4
+sH2: .space 4
diff --git a/binutils-2.21/ld/testsuite/ld-sh/tlstpoff-1.d b/binutils-2.21/ld/testsuite/ld-sh/tlstpoff-1.d
new file mode 100644
index 0000000..a678596
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/tlstpoff-1.d
@@ -0,0 +1,31 @@
+#source: tlstpoff1.s
+#source: tlstpoff2.s
+#as: -little
+#ld: -EL -e foo
+#objdump: -drj.text
+#target: sh*-*-linux* sh*-*-netbsd*
+
+.*: +file format elf32-sh.*
+
+Disassembly of section \.text:
+
+[0-9a-f]+ <foo>:
+ [0-9a-f]+: c6 2f mov.l r12,@-r15
+ [0-9a-f]+: 07 c7 mova [0-9a-f]+ <foo\+0x20>,r0
+ [0-9a-f]+: 06 dc mov.l [0-9a-f]+ <foo\+0x20>,r12 ! [0-9a-f]+
+ [0-9a-f]+: 0c 3c add r0,r12
+ [0-9a-f]+: 02 d0 mov.l [0-9a-f]+ <foo\+0x14>,r0 ! c
+ [0-9a-f]+: 12 01 stc gbr,r1
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 03 a0 bra [0-9a-f]+ <foo\+0x18>
+ [0-9a-f]+: 0c 31 add r0,r1
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: 0c 00 .*[ ]*.*
+ [0-9a-f]+: 00 00 .*[ ]*.*
+ [0-9a-f]+: 12 60 mov.l @r1,r0
+ [0-9a-f]+: 0b 00 rts
+ [0-9a-f]+: f6 6c mov.l @r15\+,r12
+ [0-9a-f]+: 09 00 nop
+ [0-9a-f]+: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+ [0-9a-f]+: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-sh/tlstpoff-2.d b/binutils-2.21/ld/testsuite/ld-sh/tlstpoff-2.d
new file mode 100644
index 0000000..519c6ef
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/tlstpoff-2.d
@@ -0,0 +1,8 @@
+#source: tlstpoff1.s
+#source: tlstpoff2.s
+#as: -little
+#ld: -EL -e foo
+#readelf: -r
+#target: sh*-*-linux* sh*-*-netbsd*
+
+There are no relocations in this file.
diff --git a/binutils-2.21/ld/testsuite/ld-sh/tlstpoff1.s b/binutils-2.21/ld/testsuite/ld-sh/tlstpoff1.s
new file mode 100644
index 0000000..754f3c1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/tlstpoff1.s
@@ -0,0 +1,23 @@
+ .text
+ .align 5
+ .global foo
+ .type foo, @function
+foo:
+ mov.l r12,@-r15
+ mova .L1,r0
+ mov.l .L1,r12
+ add r0,r12
+ mov.l 1f,r0
+ stc gbr,r1
+ mov.l @(r0,r12),r0
+ bra 2f
+ add r0,r1
+ .align 2
+1: .long x@GOTTPOFF
+2:
+ mov.l @r1,r0
+ rts
+ mov.l @r15+,r12
+
+ .align 2
+.L1: .long _GLOBAL_OFFSET_TABLE_
diff --git a/binutils-2.21/ld/testsuite/ld-sh/tlstpoff2.s b/binutils-2.21/ld/testsuite/ld-sh/tlstpoff2.s
new file mode 100644
index 0000000..6ae9e92
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/tlstpoff2.s
@@ -0,0 +1,26 @@
+ .section .tbss,"awT",@nobits
+ .global x
+y: .space 4
+x: .space 4
+
+ .section barfn,"ax",@progbits
+ .align 1
+ .type bar, @function
+bar:
+ mova .L1,r0
+ mov.l .L1,r12
+ add r0,r12
+ mov.l 1f,r0
+ stc gbr,r1
+ mov.l @(r0,r12),r0
+ bra 2f
+ add r0,r1
+ .align 2
+1: .long x@GOTTPOFF
+2:
+ mov.l @r1,r0
+ rts
+ mov.l @r15+,r12
+
+ .align 2
+.L1: .long _GLOBAL_OFFSET_TABLE_
diff --git a/binutils-2.21/ld/testsuite/ld-sh/vxworks1-le.dd b/binutils-2.21/ld/testsuite/ld-sh/vxworks1-le.dd
new file mode 100644
index 0000000..03c817c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/vxworks1-le.dd
@@ -0,0 +1,73 @@
+
+.*: file format .*
+
+Disassembly of section \.plt:
+
+00080800 <_PROCEDURE_LINKAGE_TABLE_>:
+ 80800: 01 d1 mov\.l 80808 <_PROCEDURE_LINKAGE_TABLE_\+0x8>,r1 ! 81408
+ 80802: 12 61 mov\.l @r1,r1
+ 80804: 2b 41 jmp @r1
+ 80806: 09 00 nop
+ 80808: 08 14 .*
+ 80808: R_SH_DIR32 _GLOBAL_OFFSET_TABLE_\+0x8
+ 8080a: 08 00 .*
+
+0008080c <_sglobal@plt>:
+ 8080c: 01 d0 mov\.l 80814 <_sglobal@plt\+0x8>,r0 ! 8140c
+ 8080e: 02 60 mov\.l @r0,r0
+ 80810: 2b 40 jmp @r0
+ 80812: 09 00 nop
+ 80814: 0c 14 .*
+ 80814: R_SH_DIR32 _GLOBAL_OFFSET_TABLE_\+0xc
+ 80816: 08 00 .*
+ 80818: 01 d0 mov\.l 80820 <_sglobal@plt\+0x14>,r0 ! 0
+ 8081a: f1 af bra 80800 <_PROCEDURE_LINKAGE_TABLE_>
+ 8081c: 09 00 nop
+ 8081e: 09 00 nop
+ 80820: 00 00 .*
+ \.\.\.
+
+00080824 <_foo@plt>:
+ 80824: 01 d0 mov\.l 8082c <_foo@plt\+0x8>,r0 ! 81410
+ 80826: 02 60 mov\.l @r0,r0
+ 80828: 2b 40 jmp @r0
+ 8082a: 09 00 nop
+ 8082c: 10 14 .*
+ 8082c: R_SH_DIR32 _GLOBAL_OFFSET_TABLE_\+0x10
+ 8082e: 08 00 .*
+ 80830: 01 d0 mov\.l 80838 <_foo@plt\+0x14>,r0 ! c
+ 80832: e5 af bra 80800 <_PROCEDURE_LINKAGE_TABLE_>
+ 80834: 09 00 nop
+ 80836: 09 00 nop
+ 80838: 0c 00 .*
+ \.\.\.
+Disassembly of section \.text:
+
+00080c00 <__start>:
+ 80c00: 22 4f sts\.l pr,@-r15
+ 80c02: 06 d0 mov\.l 80c1c <__start\+0x1c>,r0 ! 80824 <_foo@plt>
+ 80c04: 0b 40 jsr @r0
+ 80c06: 09 00 nop
+ 80c08: 05 d0 mov\.l 80c20 <__start\+0x20>,r0 ! 8080c <_sglobal@plt>
+ 80c0a: 0b 40 jsr @r0
+ 80c0c: 09 00 nop
+ 80c0e: 05 d0 mov\.l 80c24 <__start\+0x24>,r0 ! 80c28 <_sexternal>
+ 80c10: 0b 40 jsr @r0
+ 80c12: 09 00 nop
+ 80c14: 26 4f lds\.l @r15\+,pr
+ 80c16: 0b 00 rts
+ 80c18: 09 00 nop
+ 80c1a: 09 00 nop
+ 80c1c: 24 08 .*
+ 80c1c: R_SH_DIR32 \.plt\+0x24
+ 80c1e: 08 00 .*
+ 80c20: 0c 08 .*
+ 80c20: R_SH_DIR32 \.plt\+0xc
+ 80c22: 08 00 .*
+ 80c24: 28 0c .*
+ 80c24: R_SH_DIR32 _sexternal
+ 80c26: 08 00 .*
+
+00080c28 <_sexternal>:
+ 80c28: 0b 00 rts
+ 80c2a: 09 00 nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/vxworks1-lib-le.dd b/binutils-2.21/ld/testsuite/ld-sh/vxworks1-lib-le.dd
new file mode 100644
index 0000000..6511c16
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/vxworks1-lib-le.dd
@@ -0,0 +1,76 @@
+
+.*: file format .*
+
+Disassembly of section \.plt:
+
+00080800 <_PROCEDURE_LINKAGE_TABLE_>:
+ 80800: 01 d0 mov\.l 80808 <_PROCEDURE_LINKAGE_TABLE_\+0x8>,r0 ! c
+ 80802: ce 00 mov\.l @\(r0,r12\),r0
+ 80804: 2b 40 jmp @r0
+ 80806: 09 00 nop
+ 80808: 0c 00 .*
+ 8080a: 00 00 .*
+ 8080c: 01 d0 mov\.l 80814 <_PROCEDURE_LINKAGE_TABLE_\+0x14>,r0 ! 0
+ 8080e: c2 51 mov\.l @\(8,r12\),r1
+ 80810: 2b 41 jmp @r1
+ 80812: 09 00 nop
+ 80814: 00 00 .*
+ \.\.\.
+
+00080818 <_sexternal@plt>:
+ 80818: 01 d0 mov\.l 80820 <_sexternal@plt\+0x8>,r0 ! 10
+ 8081a: ce 00 mov\.l @\(r0,r12\),r0
+ 8081c: 2b 40 jmp @r0
+ 8081e: 09 00 nop
+ 80820: 10 00 .*
+ 80822: 00 00 .*
+ 80824: 01 d0 mov\.l 8082c <_sexternal@plt\+0x14>,r0 ! c
+ 80826: c2 51 mov\.l @\(8,r12\),r1
+ 80828: 2b 41 jmp @r1
+ 8082a: 09 00 nop
+ 8082c: 0c 00 .*
+ \.\.\.
+Disassembly of section \.text:
+
+00080c00 <_foo>:
+ 80c00: c6 2f mov\.l r12,@-r15
+ 80c02: 22 4f sts\.l pr,@-r15
+ 80c04: 0a dc mov\.l 80c30 <_foo\+0x30>,r12 ! 0
+ 80c06: c2 6c mov\.l @r12,r12
+ 80c08: 0a d0 mov\.l 80c34 <_foo\+0x34>,r0 ! 0
+ 80c0a: ce 0c mov\.l @\(r0,r12\),r12
+ 80c0c: 0a d0 mov\.l 80c38 <_foo\+0x38>,r0 ! 14
+ 80c0e: ce 01 mov\.l @\(r0,r12\),r1
+ 80c10: 12 62 mov\.l @r1,r2
+ 80c12: 01 72 add #1,r2
+ 80c14: 22 21 mov\.l r2,@r1
+ 80c16: 09 d0 mov\.l 80c3c <_foo\+0x3c>,r0 ! 2c
+ 80c18: 03 00 bsrf r0
+ 80c1a: 09 00 nop
+ 80c1c: 08 d0 mov\.l 80c40 <_foo\+0x40>,r0 ! fffffbde
+ 80c1e: 03 00 bsrf r0
+ 80c20: 09 00 nop
+ 80c22: 08 d0 mov\.l 80c44 <_foo\+0x44>,r0 ! fffffbf0
+ 80c24: 03 00 bsrf r0
+ 80c26: 09 00 nop
+ 80c28: 26 4f lds\.l @r15\+,pr
+ 80c2a: 0b 00 rts
+ 80c2c: f6 6c mov\.l @r15\+,r12
+ 80c2e: 09 00 nop
+ ...
+ 80c38: 14 00 .*
+ 80c3a: 00 00 .*
+ 80c3c: 2c 00 .*
+ 80c3e: 00 00 .*
+ 80c40: de fb .*
+ 80c42: ff ff .*
+ 80c44: f0 fb .*
+ 80c46: ff ff .*
+
+00080c48 <_slocal>:
+ 80c48: 0b 00 rts
+ 80c4a: 09 00 nop
+
+00080c4c <_sglobal>:
+ 80c4c: 0b 00 rts
+ 80c4e: 09 00 nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/vxworks1-lib.dd b/binutils-2.21/ld/testsuite/ld-sh/vxworks1-lib.dd
new file mode 100644
index 0000000..e20f334
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/vxworks1-lib.dd
@@ -0,0 +1,76 @@
+
+.*: file format .*
+
+Disassembly of section \.plt:
+
+00080800 <_PROCEDURE_LINKAGE_TABLE_>:
+ 80800: d0 01 mov\.l 80808 <_PROCEDURE_LINKAGE_TABLE_\+0x8>,r0 ! c
+ 80802: 00 ce mov\.l @\(r0,r12\),r0
+ 80804: 40 2b jmp @r0
+ 80806: 00 09 nop
+ 80808: 00 00 .*
+ 8080a: 00 0c .*
+ 8080c: d0 01 mov\.l 80814 <_PROCEDURE_LINKAGE_TABLE_\+0x14>,r0 ! 0
+ 8080e: 51 c2 mov\.l @\(8,r12\),r1
+ 80810: 41 2b jmp @r1
+ 80812: 00 09 nop
+ 80814: 00 00 .*
+ \.\.\.
+
+00080818 <_sexternal@plt>:
+ 80818: d0 01 mov\.l 80820 <_sexternal@plt\+0x8>,r0 ! 10
+ 8081a: 00 ce mov\.l @\(r0,r12\),r0
+ 8081c: 40 2b jmp @r0
+ 8081e: 00 09 nop
+ 80820: 00 00 .*
+ 80822: 00 10 .*
+ 80824: d0 01 mov\.l 8082c <_sexternal@plt\+0x14>,r0 ! c
+ 80826: 51 c2 mov\.l @\(8,r12\),r1
+ 80828: 41 2b jmp @r1
+ 8082a: 00 09 nop
+ 8082c: 00 00 .*
+ 8082e: 00 0c .*
+Disassembly of section \.text:
+
+00080c00 <_foo>:
+ 80c00: 2f c6 mov\.l r12,@-r15
+ 80c02: 4f 22 sts\.l pr,@-r15
+ 80c04: dc 0a mov\.l 80c30 <_foo\+0x30>,r12 ! 0
+ 80c06: 6c c2 mov\.l @r12,r12
+ 80c08: d0 0a mov\.l 80c34 <_foo\+0x34>,r0 ! 0
+ 80c0a: 0c ce mov\.l @\(r0,r12\),r12
+ 80c0c: d0 0a mov\.l 80c38 <_foo\+0x38>,r0 ! 14
+ 80c0e: 01 ce mov\.l @\(r0,r12\),r1
+ 80c10: 62 12 mov\.l @r1,r2
+ 80c12: 72 01 add #1,r2
+ 80c14: 21 22 mov\.l r2,@r1
+ 80c16: d0 09 mov\.l 80c3c <_foo\+0x3c>,r0 ! 2c
+ 80c18: 00 03 bsrf r0
+ 80c1a: 00 09 nop
+ 80c1c: d0 08 mov\.l 80c40 <_foo\+0x40>,r0 ! fffffbde
+ 80c1e: 00 03 bsrf r0
+ 80c20: 00 09 nop
+ 80c22: d0 08 mov\.l 80c44 <_foo\+0x44>,r0 ! fffffbf0
+ 80c24: 00 03 bsrf r0
+ 80c26: 00 09 nop
+ 80c28: 4f 26 lds\.l @r15\+,pr
+ 80c2a: 00 0b rts
+ 80c2c: 6c f6 mov\.l @r15\+,r12
+ 80c2e: 00 09 nop
+ ...
+ 80c38: 00 00 .*
+ 80c3a: 00 14 .*
+ 80c3c: 00 00 .*
+ 80c3e: 00 2c .*
+ 80c40: ff ff .*
+ 80c42: fb de .*
+ 80c44: ff ff .*
+ 80c46: fb f0 .*
+
+00080c48 <_slocal>:
+ 80c48: 00 0b rts
+ 80c4a: 00 09 nop
+
+00080c4c <_sglobal>:
+ 80c4c: 00 0b rts
+ 80c4e: 00 09 nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/vxworks1-lib.nd b/binutils-2.21/ld/testsuite/ld-sh/vxworks1-lib.nd
new file mode 100644
index 0000000..e9f916e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/vxworks1-lib.nd
@@ -0,0 +1,9 @@
+#...
+Symbol table '\.dynsym' .*:
+#...
+.*: 00081400 +0 +OBJECT +GLOBAL +DEFAULT +[0-9]+ _GLOBAL_OFFSET_TABLE_
+#...
+Symbol table '\.symtab' .*:
+#...
+.*: 00081400 +0 +OBJECT +GLOBAL +DEFAULT +[0-9]+ _GLOBAL_OFFSET_TABLE_
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-sh/vxworks1-lib.rd b/binutils-2.21/ld/testsuite/ld-sh/vxworks1-lib.rd
new file mode 100644
index 0000000..d9c56a0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/vxworks1-lib.rd
@@ -0,0 +1,12 @@
+
+Relocation section '\.rela\.plt' at offset .* contains 2 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+0008140c .*a4 R_SH_JMP_SLOT 00080c4c _sglobal \+ 0
+00081410 .*a4 R_SH_JMP_SLOT 00000000 _sexternal \+ 0
+
+Relocation section '\.rela\.dyn' at offset .* contains 4 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+00081800 000000a5 R_SH_RELATIVE * 00080c48
+00080c30 .*01 R_SH_DIR32 00000000 ___GOTT_BASE__ \+ 0
+00080c34 .*01 R_SH_DIR32 00000000 ___GOTT_INDEX__ \+ 0
+00081414 .*a3 R_SH_GLOB_DAT 00081c00 x \+ 0
diff --git a/binutils-2.21/ld/testsuite/ld-sh/vxworks1-lib.s b/binutils-2.21/ld/testsuite/ld-sh/vxworks1-lib.s
new file mode 100644
index 0000000..ff21564
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/vxworks1-lib.s
@@ -0,0 +1,61 @@
+ .text
+ .globl _foo
+ .type _foo, %function
+_foo:
+ mov.l r12,@-r15
+ sts.l pr,@-r15
+ mov.l 1f,r12
+ mov.l @r12,r12
+ mov.l 2f,r0
+ mov.l @(r0,r12),r12
+
+ mov.l 3f,r0
+ mov.l @(r0,r12),r1
+ mov.l @r1,r2
+ add #1,r2
+ mov.l r2,@r1
+
+ mov.l 4f,r0
+ bsrf r0
+ nop
+.Lb4:
+
+ mov.l 5f,r0
+ bsrf r0
+ nop
+.Lb5:
+
+ mov.l 6f,r0
+ bsrf r0
+ nop
+.Lb6:
+
+ lds.l @r15+,pr
+ rts
+ mov.l @r15+,r12
+ .align 2
+1: .long ___GOTT_BASE__
+2: .long ___GOTT_INDEX__
+3: .long x@GOT
+4: .long _slocal - .Lb4
+5: .long _sglobal@PLT - (.Lb5 - .)
+6: .long _sexternal@PLT - (.Lb6 - .)
+ .size _foo, .-_foo
+
+ .type _slocal, %function
+_slocal:
+ rts
+ nop
+ .size _slocal, .-_slocal
+
+ .globl _sglobal
+ .type _sglobal, %function
+_sglobal:
+ rts
+ nop
+ .size _sglobal, .-_sglobal
+
+ .data
+ .4byte _slocal
+
+ .comm x,4,4
diff --git a/binutils-2.21/ld/testsuite/ld-sh/vxworks1-lib.td b/binutils-2.21/ld/testsuite/ld-sh/vxworks1-lib.td
new file mode 100644
index 0000000..9f223e3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/vxworks1-lib.td
@@ -0,0 +1,3 @@
+#...
+ 0x0+16 \(TEXTREL\) +0x0
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-sh/vxworks1-static.d b/binutils-2.21/ld/testsuite/ld-sh/vxworks1-static.d
new file mode 100644
index 0000000..dffc45b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/vxworks1-static.d
@@ -0,0 +1,4 @@
+#name: VxWorks executable test 1 (static)
+#source: vxworks1.s
+#ld: tmpdir/libvxworks1.so -Tvxworks1.ld -EL
+#error: Dynamic sections created in non-dynamic link
diff --git a/binutils-2.21/ld/testsuite/ld-sh/vxworks1.dd b/binutils-2.21/ld/testsuite/ld-sh/vxworks1.dd
new file mode 100644
index 0000000..4bb3b47
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/vxworks1.dd
@@ -0,0 +1,73 @@
+
+.*: file format .*
+
+Disassembly of section \.plt:
+
+00080800 <_PROCEDURE_LINKAGE_TABLE_>:
+ 80800: d1 01 mov\.l 80808 <_PROCEDURE_LINKAGE_TABLE_\+0x8>,r1 ! 81408
+ 80802: 61 12 mov\.l @r1,r1
+ 80804: 41 2b jmp @r1
+ 80806: 00 09 nop
+ 80808: 00 08 .*
+ 80808: R_SH_DIR32 _GLOBAL_OFFSET_TABLE_\+0x8
+ 8080a: 14 08 .*
+
+0008080c <_sglobal@plt>:
+ 8080c: d0 01 mov\.l 80814 <_sglobal@plt\+0x8>,r0 ! 8140c
+ 8080e: 60 02 mov\.l @r0,r0
+ 80810: 40 2b jmp @r0
+ 80812: 00 09 nop
+ 80814: 00 08 .*
+ 80814: R_SH_DIR32 _GLOBAL_OFFSET_TABLE_\+0xc
+ 80816: 14 0c .*
+ 80818: d0 01 mov\.l 80820 <_sglobal@plt\+0x14>,r0 ! 0
+ 8081a: af f1 bra 80800 <_PROCEDURE_LINKAGE_TABLE_>
+ 8081c: 00 09 nop
+ 8081e: 00 09 nop
+ 80820: 00 00 .*
+ \.\.\.
+
+00080824 <_foo@plt>:
+ 80824: d0 01 mov\.l 8082c <_foo@plt\+0x8>,r0 ! 81410
+ 80826: 60 02 mov\.l @r0,r0
+ 80828: 40 2b jmp @r0
+ 8082a: 00 09 nop
+ 8082c: 00 08 .*
+ 8082c: R_SH_DIR32 _GLOBAL_OFFSET_TABLE_\+0x10
+ 8082e: 14 10 .*
+ 80830: d0 01 mov\.l 80838 <_foo@plt\+0x14>,r0 ! c
+ 80832: af e5 bra 80800 <_PROCEDURE_LINKAGE_TABLE_>
+ 80834: 00 09 nop
+ 80836: 00 09 nop
+ 80838: 00 00 .*
+ 8083a: 00 0c .*
+Disassembly of section \.text:
+
+00080c00 <__start>:
+ 80c00: 4f 22 sts\.l pr,@-r15
+ 80c02: d0 06 mov\.l 80c1c <__start\+0x1c>,r0 ! 80824 <_foo@plt>
+ 80c04: 40 0b jsr @r0
+ 80c06: 00 09 nop
+ 80c08: d0 05 mov\.l 80c20 <__start\+0x20>,r0 ! 8080c <_sglobal@plt>
+ 80c0a: 40 0b jsr @r0
+ 80c0c: 00 09 nop
+ 80c0e: d0 05 mov\.l 80c24 <__start\+0x24>,r0 ! 80c28 <_sexternal>
+ 80c10: 40 0b jsr @r0
+ 80c12: 00 09 nop
+ 80c14: 4f 26 lds\.l @r15\+,pr
+ 80c16: 00 0b rts
+ 80c18: 00 09 nop
+ 80c1a: 00 09 nop
+ 80c1c: 00 08 .*
+ 80c1c: R_SH_DIR32 \.plt\+0x24
+ 80c1e: 08 24 .*
+ 80c20: 00 08 .*
+ 80c20: R_SH_DIR32 \.plt\+0xc
+ 80c22: 08 0c .*
+ 80c24: 00 08 .*
+ 80c24: R_SH_DIR32 _sexternal
+ 80c26: 0c 28 .*
+
+00080c28 <_sexternal>:
+ 80c28: 00 0b rts
+ 80c2a: 00 09 nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/vxworks1.ld b/binutils-2.21/ld/testsuite/ld-sh/vxworks1.ld
new file mode 100644
index 0000000..65bf65d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/vxworks1.ld
@@ -0,0 +1,30 @@
+SECTIONS
+{
+ . = 0x80000;
+ .interp : { *(.interp) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+
+ . = ALIGN (0x400);
+ .rela.dyn : { *(.rela.dyn) }
+ .rela.plt : { *(.rela.plt) }
+
+ . = ALIGN (0x400);
+ .plt : { *(.plt) }
+
+ . = ALIGN (0x400);
+ .text : { *(.text) }
+
+ . = ALIGN (0x1000);
+ .dynamic : { *(.dynamic) }
+
+ . = ALIGN (0x400);
+ .got : { *(.got.plt) *(.got) }
+
+ . = ALIGN (0x400);
+ .data : { *(.data) }
+
+ . = ALIGN (0x400);
+ .bss : { *(.bss) *(.dynbss) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-sh/vxworks1.rd b/binutils-2.21/ld/testsuite/ld-sh/vxworks1.rd
new file mode 100644
index 0000000..ee50c74
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/vxworks1.rd
@@ -0,0 +1,19 @@
+
+Relocation section '\.rela\.plt' at offset .* contains 2 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+0008140c .*a4 R_SH_JMP_SLOT 0008080c _sglobal \+ 0
+00081410 .*a4 R_SH_JMP_SLOT 00080824 _foo \+ 0
+
+Relocation section '\.rela\.text' at offset .* contains 3 entries:
+ Offset Info Type Sym.Value Sym. Name \+ Addend
+00080c1c .*01 R_SH_DIR32 00080800 \.plt \+ 24
+00080c20 .*01 R_SH_DIR32 00080800 \.plt \+ c
+00080c24 .*01 R_SH_DIR32 00080c28 _sexternal \+ 0
+
+Relocation section '\.rela\.plt\.unloaded' at offset .* contains 5 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+00080808 .*01 R_SH_DIR32 00081400 _GLOBAL_OFFSET_TABLE_ \+ 8
+00080814 .*01 R_SH_DIR32 00081400 _GLOBAL_OFFSET_TABLE_ \+ c
+0008140c .*01 R_SH_DIR32 00080800 _PROCEDURE_LINKAGE_TAB.* \+ 0
+0008082c .*01 R_SH_DIR32 00081400 _GLOBAL_OFFSET_TABLE_ \+ 10
+00081410 .*01 R_SH_DIR32 00080800 _PROCEDURE_LINKAGE_TAB.* \+ 0
diff --git a/binutils-2.21/ld/testsuite/ld-sh/vxworks1.s b/binutils-2.21/ld/testsuite/ld-sh/vxworks1.s
new file mode 100644
index 0000000..3ae2373
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/vxworks1.s
@@ -0,0 +1,32 @@
+ .text
+ .globl __start
+ .type __start, %function
+__start:
+ sts.l pr,@-r15
+ mov.l 1f,r0
+ jsr @r0
+ nop
+
+ mov.l 2f,r0
+ jsr @r0
+ nop
+
+ mov.l 3f,r0
+ jsr @r0
+ nop
+
+ lds.l @r15+,pr
+ rts
+ nop
+ .align 2
+1: .long _foo
+2: .long _sglobal
+3: .long _sexternal
+ .size __start, .-__start
+
+ .globl _sexternal
+ .type _sexternal, %function
+_sexternal:
+ rts
+ nop
+ .size _sexternal, .-_sexternal
diff --git a/binutils-2.21/ld/testsuite/ld-sh/vxworks2-static.sd b/binutils-2.21/ld/testsuite/ld-sh/vxworks2-static.sd
new file mode 100644
index 0000000..912755b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/vxworks2-static.sd
@@ -0,0 +1,9 @@
+#...
+Elf file type is EXEC \(Executable file\)
+Entry point 0x80000
+#...
+Program Headers:
+ Type .*
+ LOAD .* 0x00080000 0x00080000 .* R E 0x1000
+
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-sh/vxworks2.s b/binutils-2.21/ld/testsuite/ld-sh/vxworks2.s
new file mode 100644
index 0000000..f680a58
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/vxworks2.s
@@ -0,0 +1,6 @@
+ .globl __start
+ .type __start, %function
+__start:
+ rts
+ nop
+ .end __start
diff --git a/binutils-2.21/ld/testsuite/ld-sh/vxworks2.sd b/binutils-2.21/ld/testsuite/ld-sh/vxworks2.sd
new file mode 100644
index 0000000..5ff87d3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/vxworks2.sd
@@ -0,0 +1,13 @@
+#...
+Elf file type is EXEC \(Executable file\)
+Entry point 0x80400
+#...
+Program Headers:
+ Type .*
+ PHDR .*
+#...
+ LOAD .* 0x00080000 0x00080000 .* R E 0x1000
+ LOAD .* 0x00081000 0x00081000 .* RW 0x1000
+ DYNAMIC .*
+
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-sh/vxworks3-le.dd b/binutils-2.21/ld/testsuite/ld-sh/vxworks3-le.dd
new file mode 100644
index 0000000..6a0fc2d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/vxworks3-le.dd
@@ -0,0 +1,34 @@
+
+.*: file format .*
+
+Disassembly of section \.plt:
+
+#...
+.*: 01 d0 mov\.l .*,r0 ! 0
+.*: f1 af bra .* <_PROCEDURE_LINKAGE_TABLE_>
+.*: 09 00 nop
+#...
+.*: 01 d0 mov\.l .*,r0 ! 7ec
+.*: 05 a8 bra .* <_PROCEDURE_LINKAGE_TABLE_>
+.*: 09 00 nop
+#...
+.*: 01 d0 mov\.l .*,r0 ! 7f8
+.*: f2 af bra .*
+.*: 09 00 nop
+#...
+.*: 01 d0 mov\.l .*,r0 ! fe4
+.*: 06 a8 bra .*
+.*: 09 00 nop
+#...
+.*: 01 d0 mov\.l .*,r0 ! ff0
+.*: f2 af bra .*
+.*: 09 00 nop
+#...
+.*: 01 d0 mov\.l .*,r0 ! 17dc
+.*: 06 a8 bra .*
+.*: 09 00 nop
+#...
+.*: 01 d0 mov\.l .*,r0 ! 17e8
+.*: f2 af bra .*
+.*: 09 00 nop
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-sh/vxworks3-lib-le.dd b/binutils-2.21/ld/testsuite/ld-sh/vxworks3-lib-le.dd
new file mode 100644
index 0000000..011d20c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/vxworks3-lib-le.dd
@@ -0,0 +1,12 @@
+
+.*: file format .*
+
+Disassembly of section \.text:
+
+.* <foo0>:
+.*: 0b 00 rts
+.*: 09 00 nop
+#...
+.* <foo510>:
+.*: 0b 00 rts
+.*: 09 00 nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/vxworks3-lib.dd b/binutils-2.21/ld/testsuite/ld-sh/vxworks3-lib.dd
new file mode 100644
index 0000000..555be00
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/vxworks3-lib.dd
@@ -0,0 +1,12 @@
+
+.*: file format .*
+
+Disassembly of section \.text:
+
+.* <foo0>:
+.*: 00 0b rts
+.*: 00 09 nop
+#...
+.* <foo510>:
+.*: 00 0b rts
+.*: 00 09 nop
diff --git a/binutils-2.21/ld/testsuite/ld-sh/vxworks3-lib.s b/binutils-2.21/ld/testsuite/ld-sh/vxworks3-lib.s
new file mode 100644
index 0000000..6e10331
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/vxworks3-lib.s
@@ -0,0 +1,12 @@
+ .macro entry
+ .globl foo\@
+ .size foo\@,4
+ .type foo\@,@function
+foo\@:
+ rts
+ nop
+ .endm
+
+ .rept 511
+ entry
+ .endr
diff --git a/binutils-2.21/ld/testsuite/ld-sh/vxworks3.dd b/binutils-2.21/ld/testsuite/ld-sh/vxworks3.dd
new file mode 100644
index 0000000..f0593b6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/vxworks3.dd
@@ -0,0 +1,34 @@
+
+.*: file format .*
+
+Disassembly of section \.plt:
+
+#...
+.*: d0 01 mov\.l .*,r0 ! 0
+.*: af f1 bra .* <_PROCEDURE_LINKAGE_TABLE_>
+.*: 00 09 nop
+#...
+.*: d0 01 mov\.l .*,r0 ! 7ec
+.*: a8 05 bra .* <_PROCEDURE_LINKAGE_TABLE_>
+.*: 00 09 nop
+#...
+.*: d0 01 mov\.l .*,r0 ! 7f8
+.*: af f2 bra .*
+.*: 00 09 nop
+#...
+.*: d0 01 mov\.l .*,r0 ! fe4
+.*: a8 06 bra .*
+.*: 00 09 nop
+#...
+.*: d0 01 mov\.l .*,r0 ! ff0
+.*: af f2 bra .*
+.*: 00 09 nop
+#...
+.*: d0 01 mov\.l .*,r0 ! 17dc
+.*: a8 06 bra .*
+.*: 00 09 nop
+#...
+.*: d0 01 mov\.l .*,r0 ! 17e8
+.*: af f2 bra .*
+.*: 00 09 nop
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-sh/vxworks3.s b/binutils-2.21/ld/testsuite/ld-sh/vxworks3.s
new file mode 100644
index 0000000..86d6310
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/vxworks3.s
@@ -0,0 +1,7 @@
+ .macro entry
+ .long foo\@
+ .endm
+
+ .rept 511
+ entry
+ .endr
diff --git a/binutils-2.21/ld/testsuite/ld-sh/vxworks4.d b/binutils-2.21/ld/testsuite/ld-sh/vxworks4.d
new file mode 100644
index 0000000..c5721dd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/vxworks4.d
@@ -0,0 +1,11 @@
+#source: vxworks4a.s
+#source: vxworks4b.s
+#ld: -shared -Tvxworks1.ld
+#target: sh-*-vxworks
+#readelf: --relocs
+
+Relocation section '\.rela\.dyn' at offset .* contains 3 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+00081810 000000a5 R_SH_RELATIVE 0008181c
+00081814 .*01 R_SH_DIR32 00000000 global \+ 1234
+00081818 .*02 R_SH_REL32 00000000 global \+ 1234
diff --git a/binutils-2.21/ld/testsuite/ld-sh/vxworks4a.s b/binutils-2.21/ld/testsuite/ld-sh/vxworks4a.s
new file mode 100644
index 0000000..2785567
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/vxworks4a.s
@@ -0,0 +1,2 @@
+ .data
+ .fill 0x10
diff --git a/binutils-2.21/ld/testsuite/ld-sh/vxworks4b.s b/binutils-2.21/ld/testsuite/ld-sh/vxworks4b.s
new file mode 100644
index 0000000..6c0228a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/vxworks4b.s
@@ -0,0 +1,4 @@
+ .data
+ .long . + 0xc
+ .long global + 0x1234
+ .long global + 0x1234 - .
diff --git a/binutils-2.21/ld/testsuite/ld-sh/weak1.d b/binutils-2.21/ld/testsuite/ld-sh/weak1.d
new file mode 100644
index 0000000..d248bb9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/weak1.d
@@ -0,0 +1,21 @@
+#source: weak1.s
+#as: -little
+#ld: -e 0x1000 -EL
+#objdump: -ts
+#target: sh*-*-elf
+
+.*: file format elf32-sh.*
+
+SYMBOL TABLE:
+#...
+0+10a0 l .data 0+ d0
+0+1000 l .text 0+ f
+0+10a4 w .data 0+ w0
+#...
+
+Contents of section .text:
+ 1000 01d11260 0b000900 a4100000 09000900 .*
+ 1010 09000900 09000900 09000900 09000900 .*
+Contents of section .data:
+ 10a0 01000000 00000000 .*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-sh/weak1.s b/binutils-2.21/ld/testsuite/ld-sh/weak1.s
new file mode 100644
index 0000000..79192af
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sh/weak1.s
@@ -0,0 +1,19 @@
+ .data
+ .align 2
+d0:
+ .long 1
+ .global w0
+w0:
+ .long 0
+ .weak w0
+ .text
+ .align 5
+f:
+ mov.l .L3,r1
+ mov.l @r1,r0
+ rts
+ nop
+ .align 2
+.L3:
+ .long w0
+
diff --git a/binutils-2.21/ld/testsuite/ld-shared/elf-offset.ld b/binutils-2.21/ld/testsuite/ld-shared/elf-offset.ld
new file mode 100644
index 0000000..125d879
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-shared/elf-offset.ld
@@ -0,0 +1,170 @@
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ . = 0x100000;
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ .gnu.version : { *(.gnu.version) }
+ .gnu.version_d : { *(.gnu.version_d) }
+ .gnu.version_r : { *(.gnu.version_r) }
+ .rel.text :
+ {
+ *(.rel.text)
+ *(.rel.text.*)
+ *(.rel.gnu.linkonce.t*)
+ }
+ .rela.text :
+ {
+ *(.rela.text)
+ *(.rela.text.*)
+ *(.rela.gnu.linkonce.t*)
+ }
+ .rel.data :
+ {
+ *(.rel.data)
+ *(.rel.data.*)
+ *(.rel.gnu.linkonce.d*)
+ }
+ .rela.data :
+ {
+ *(.rela.data)
+ *(.rela.data.*)
+ *(.rela.gnu.linkonce.d*)
+ }
+ .rel.rodata :
+ {
+ *(.rel.rodata)
+ *(.rel.rodata.*)
+ *(.rel.gnu.linkonce.r*)
+ }
+ .rela.rodata :
+ {
+ *(.rela.rodata)
+ *(.rela.rodata.*)
+ *(.rela.gnu.linkonce.r*)
+ }
+ .rel.got : { *(.rel.got) }
+ .rela.got : { *(.rela.got) }
+ .rel.ctors : { *(.rel.ctors) }
+ .rela.ctors : { *(.rela.ctors) }
+ .rel.dtors : { *(.rel.dtors) }
+ .rela.dtors : { *(.rela.dtors) }
+ .rel.init : { *(.rel.init) }
+ .rela.init : { *(.rela.init) }
+ .rel.fini : { *(.rel.fini) }
+ .rela.fini : { *(.rela.fini) }
+ .rel.bss : { *(.rel.bss) }
+ .rela.bss : { *(.rela.bss) }
+ .rel.plt : { *(.rel.plt) }
+ .rela.plt : { *(.rela.plt) }
+ .rel.eh_frame : { *(.rel.eh_frame) }
+ .rela.eh_frame : { *(.rela.eh_frame) }
+ .init : { KEEP (*(.init)) }
+ .plt : { *(.plt) }
+ .text :
+ {
+ *(.text)
+ *(.text.*)
+ *(.stub)
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ *(.gnu.linkonce.t*)
+ }
+ _etext = .;
+ PROVIDE (etext = .);
+ .fini : { KEEP (*(.fini)) } =0x9090
+ .rodata :
+ {
+ *(.rodata)
+ *(.rodata.*)
+ *(.gnu.linkonce.r*)
+ }
+ .rodata1 : { *(.rodata1) }
+ /* Adjust the address for the data segment. We want to adjust up to
+ the same address within the page on the next page up. */
+ . = ALIGN(0x1000) + (. & (0x1000 - 1));
+ .data :
+ {
+ *(.data)
+ *(.data.*)
+ *(.gnu.linkonce.d*)
+ SORT(CONSTRUCTORS)
+ }
+ .data1 : { *(.data1) }
+ .ctors :
+ {
+ /* gcc uses crtbegin.o to find the start of the constructors, so
+ we make sure it is first. Because this is a wildcard, it
+ doesn't matter if the user does not actually link against
+ crtbegin.o; the linker won't look for a file to match a
+ wildcard. The wildcard also means that it doesn't matter which
+ directory crtbegin.o is in. */
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ }
+ .dtors :
+ {
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ }
+ .got : ALIGN(8) { *(.got.plt) *(.got .toc) }
+ .dynamic : { *(.dynamic) }
+ /* We want the small data sections together, so single-instruction offsets
+ can access them all, and initialized data all before uninitialized, so
+ we can shorten the on-disk segment size. */
+ .sdata : { *(.sdata) *(.sdata.*) }
+ _edata = .;
+ PROVIDE (edata = .);
+ __bss_start = .;
+ .sbss : { *(.sbss) *(.scommon) }
+ .bss :
+ {
+ *(.dynbss)
+ *(.bss)
+ *(COMMON)
+ /* Align here to ensure that the .bss section occupies space up to
+ _end. Align after .bss to ensure correct alignment even if the
+ .bss section disappears because there are no input sections. */
+ . = ALIGN(32 / 8);
+ }
+ . = ALIGN(32 / 8);
+ _end = . ;
+ PROVIDE (end = .);
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames) }
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames) }
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev) }
+ .debug_line 0 : { *(.debug_line) }
+ .debug_frame 0 : { *(.debug_frame) }
+ .debug_str 0 : { *(.debug_str) }
+ .debug_loc 0 : { *(.debug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo) }
+ /* SGI/MIPS DWARF 2 extensions */
+ .debug_weaknames 0 : { *(.debug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames) }
+ /* These must appear regardless of . */
+}
diff --git a/binutils-2.21/ld/testsuite/ld-shared/main.c b/binutils-2.21/ld/testsuite/ld-shared/main.c
new file mode 100644
index 0000000..0817d27
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-shared/main.c
@@ -0,0 +1,90 @@
+/* This is the main program for the shared library test. */
+
+#include <stdio.h>
+
+int mainvar = 1;
+int overriddenvar = 2;
+extern int shlibvar1;
+
+extern int shlib_mainvar ();
+extern int shlib_overriddenvar ();
+extern int shlib_shlibvar1 ();
+extern int shlib_shlibvar2 ();
+extern int shlib_shlibcall ();
+extern int shlib_maincall ();
+extern int shlib_checkfunptr1 ();
+extern int shlib_checkfunptr2 ();
+extern int (*shlib_getfunptr1 ()) ();
+extern int (*shlib_getfunptr2 ()) ();
+extern int shlib_check ();
+extern int shlib_shlibcall2 ();
+
+/* This function is called by the shared library. */
+
+int
+main_called ()
+{
+ return 6;
+}
+
+/* This function overrides a function in the shared library. */
+
+int
+shlib_overriddencall2 ()
+{
+ return 8;
+}
+
+int
+main ()
+{
+ printf ("mainvar == %d\n", mainvar);
+ printf ("overriddenvar == %d\n", overriddenvar);
+ printf ("shlibvar1 == %d\n", shlibvar1);
+#ifndef XCOFF_TEST
+ printf ("shlib_mainvar () == %d\n", shlib_mainvar ());
+ printf ("shlib_overriddenvar () == %d\n", shlib_overriddenvar ());
+#endif
+ printf ("shlib_shlibvar1 () == %d\n", shlib_shlibvar1 ());
+ printf ("shlib_shlibvar2 () == %d\n", shlib_shlibvar2 ());
+ printf ("shlib_shlibcall () == %d\n", shlib_shlibcall ());
+#ifndef XCOFF_TEST
+ printf ("shlib_shlibcall2 () == %d\n", shlib_shlibcall2 ());
+ printf ("shlib_maincall () == %d\n", shlib_maincall ());
+#endif
+ printf ("main_called () == %d\n", main_called ());
+#ifndef SYMBOLIC_TEST
+ printf ("shlib_checkfunptr1 (shlib_shlibvar1) == %d\n",
+ shlib_checkfunptr1 (shlib_shlibvar1));
+#ifndef XCOFF_TEST
+ printf ("shlib_checkfunptr2 (main_called) == %d\n",
+ shlib_checkfunptr2 (main_called));
+#endif
+ {
+ int (*p) ();
+
+ p = shlib_getfunptr1 ();
+ printf ("shlib_getfunptr1 () ");
+ if (p == shlib_shlibvar1)
+ printf ("==");
+ else
+ printf ("!=");
+ printf (" shlib_shlibvar1\n");
+ }
+#ifndef XCOFF_TEST
+ {
+ int (*p) ();
+
+ p = shlib_getfunptr2 ();
+ printf ("shlib_getfunptr2 () ");
+ if (p == main_called)
+ printf ("==");
+ else
+ printf ("!=");
+ printf (" main_called\n");
+ }
+#endif
+#endif
+ printf ("shlib_check () == %d\n", shlib_check ());
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-shared/sh1.c b/binutils-2.21/ld/testsuite/ld-shared/sh1.c
new file mode 100644
index 0000000..c8e5232
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-shared/sh1.c
@@ -0,0 +1,160 @@
+/* This is part of the shared library ld test. This file becomes part
+ of a shared library. */
+
+/* This variable is supplied by the main program. */
+#ifndef XCOFF_TEST
+extern int mainvar;
+#endif
+
+/* This variable is defined in the shared library, and overridden by
+ the main program. */
+#ifndef XCOFF_TEST
+int overriddenvar = -1;
+#endif
+
+/* This variable is defined in the shared library. */
+int shlibvar1 = 3;
+
+/* This variable is defined by another object in the shared library. */
+extern int shlibvar2;
+
+/* These functions return the values of the above variables as seen in
+ the shared library. */
+
+#ifndef XCOFF_TEST
+int
+shlib_mainvar ()
+{
+ return mainvar;
+}
+#endif
+
+#ifndef XCOFF_TEST
+int
+shlib_overriddenvar ()
+{
+ return overriddenvar;
+}
+#endif
+
+int
+shlib_shlibvar1 ()
+{
+ return shlibvar1;
+}
+
+int
+shlib_shlibvar2 ()
+{
+ return shlibvar2;
+}
+
+/* This function calls a function defined by another object in the
+ shared library. */
+
+extern int shlib_shlibcalled ();
+
+int
+shlib_shlibcall ()
+{
+ return shlib_shlibcalled ();
+}
+
+#ifndef XCOFF_TEST
+/* This function calls a function defined in this object in the shared
+ library. The main program will override the called function. */
+
+extern int shlib_overriddencall2 ();
+
+int
+shlib_shlibcall2 ()
+{
+ return shlib_overriddencall2 ();
+}
+#endif
+
+/* This function calls a function defined by the main program. */
+
+#ifndef XCOFF_TEST
+extern int main_called ();
+
+int
+shlib_maincall ()
+{
+ return main_called ();
+}
+#endif
+
+/* This function is passed a function pointer to shlib_mainvar. It
+ confirms that the pointer compares equally. */
+
+int
+shlib_checkfunptr1 (p)
+ int (*p) ();
+{
+ return p == shlib_shlibvar1;
+}
+
+/* This function is passed a function pointer to main_called. It
+ confirms that the pointer compares equally. */
+
+#ifndef XCOFF_TEST
+int
+shlib_checkfunptr2 (p)
+ int (*p) ();
+{
+ return p == main_called;
+}
+#endif
+
+/* This function returns a pointer to shlib_mainvar. */
+
+int
+(*shlib_getfunptr1 ()) ()
+{
+ return shlib_shlibvar1;
+}
+
+/* This function returns a pointer to main_called. */
+
+#ifndef XCOFF_TEST
+int
+(*shlib_getfunptr2 ()) ()
+{
+ return main_called;
+}
+#endif
+
+/* This function makes sure that constant data and local functions
+ work. */
+
+#ifndef __STDC__
+#define const
+#endif
+
+static int i = 6;
+static const char *str = "Hello, world\n";
+
+int
+shlib_check ()
+{
+ const char *s1, *s2;
+
+ if (i != 6)
+ return 0;
+
+ /* To isolate the test, don't rely on any external functions, such
+ as strcmp. */
+ s1 = "Hello, world\n";
+ s2 = str;
+ while (*s1 != '\0')
+ if (*s1++ != *s2++)
+ return 0;
+ if (*s2 != '\0')
+ return 0;
+
+ if (shlib_shlibvar1 () != 3)
+ return 0;
+
+ return 1;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-shared/sh2.c b/binutils-2.21/ld/testsuite/ld-shared/sh2.c
new file mode 100644
index 0000000..7cd1db3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-shared/sh2.c
@@ -0,0 +1,22 @@
+/* This is part of the shared library ld test. This file becomes part
+ of a shared library. */
+
+/* This variable is defined here, and referenced by another file in
+ the shared library. */
+int shlibvar2 = 4;
+
+/* This function is called by another file in the shared library. */
+
+int
+shlib_shlibcalled ()
+{
+ return 5;
+}
+
+#ifndef XCOFF_TEST
+int
+shlib_overriddencall2 ()
+{
+ return 7;
+}
+#endif
diff --git a/binutils-2.21/ld/testsuite/ld-shared/shared.dat b/binutils-2.21/ld/testsuite/ld-shared/shared.dat
new file mode 100644
index 0000000..40ee37f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-shared/shared.dat
@@ -0,0 +1,16 @@
+mainvar == 1
+overriddenvar == 2
+shlibvar1 == 3
+shlib_mainvar () == 1
+shlib_overriddenvar () == 2
+shlib_shlibvar1 () == 3
+shlib_shlibvar2 () == 4
+shlib_shlibcall () == 5
+shlib_shlibcall2 () == 8
+shlib_maincall () == 6
+main_called () == 6
+shlib_checkfunptr1 (shlib_shlibvar1) == 1
+shlib_checkfunptr2 (main_called) == 1
+shlib_getfunptr1 () == shlib_shlibvar1
+shlib_getfunptr2 () == main_called
+shlib_check () == 1
diff --git a/binutils-2.21/ld/testsuite/ld-shared/shared.exp b/binutils-2.21/ld/testsuite/ld-shared/shared.exp
new file mode 100644
index 0000000..521b925
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-shared/shared.exp
@@ -0,0 +1,337 @@
+# Expect script for ld-shared tests
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+# 2004, 2005, 2007, 2008, 2009
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by Ian Lance Taylor (ian@cygnus.com)
+#
+
+# Make sure that ld can generate ELF shared libraries.
+# Note that linking against ELF shared libraries is tested by the
+# bootstrap test.
+
+# This test can only be run if ld generates native executables.
+if ![isnative] then {return}
+
+# This test can only be run on a couple of ELF platforms.
+# Square bracket expressions seem to confuse istarget.
+if { ![istarget hppa*64*-*-hpux*] \
+ && ![istarget hppa*-*-linux*] \
+ && ![istarget i?86-*-sysv4*] \
+ && ![istarget i?86-*-unixware] \
+ && ![istarget i?86-*-elf*] \
+ && ![istarget i?86-*-linux*] \
+ && ![istarget ia64-*-elf*] \
+ && ![istarget ia64-*-linux*] \
+ && ![istarget m68k-*-linux*] \
+ && ![istarget mips*-*-irix5*] \
+ && ![istarget mips*-*-linux*] \
+ && ![istarget powerpc*-*-elf*] \
+ && ![istarget powerpc*-*-linux*] \
+ && ![istarget powerpc*-*-sysv4*] \
+ && ![istarget sparc*-*-elf] \
+ && ![istarget sparc*-*-solaris2*] \
+ && ![istarget sparc*-*-sunos4*] \
+ && ![istarget sparc*-*-linux*] \
+ && ![istarget arm*-*-linux*] \
+ && ![istarget alpha*-*-linux*] \
+ && ![istarget rs6000*-*-aix*] \
+ && ![istarget powerpc*-*-aix*] \
+ && ![istarget s390*-*-linux*] \
+ && ![istarget x86_64-*-linux*] } {
+ return
+}
+
+if { [istarget *-*-linux*aout*] \
+ || [istarget *-*-linux*oldld*] } {
+ return
+}
+
+set tmpdir tmpdir
+set SHCFLAG ""
+set shared_needs_pic "no"
+
+if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
+
+ # AIX shared libraries do not seem to support useful features,
+ # like overriding the shared library function or letting the
+ # shared library refer to objects defined in the main program. We
+ # avoid testing those features.
+ set SHCFLAG "-DXCOFF_TEST"
+
+ # The AIX 3.2.5 loader appears to randomly fail when loading
+ # shared libraries from NSF mounted partitions, so we avoid any
+ # potential problems by using a local directory.
+ catch {exec /bin/sh -c "echo $$"} pid
+ set tmpdir /usr/tmp/ld.$pid
+ catch "exec mkdir $tmpdir" exec_status
+
+ # On AIX, we need to explicitly export the symbols the shared
+ # library is going to provide, and need.
+ set file [open $tmpdir/xcoff.exp w]
+ puts $file shlibvar1
+ puts $file shlibvar2
+ puts $file shlib_shlibvar1
+ puts $file shlib_shlibvar2
+ puts $file shlib_shlibcall
+ puts $file shlib_shlibcalled
+ puts $file shlib_checkfunptr1
+ puts $file shlib_getfunptr1
+ puts $file shlib_check
+ close $file
+}
+
+if [istarget arm*-*-linux*] {
+ # On ARM section anchors can change the symbol pre-emptability for
+ # non-PIC shared libraries, causing these tests to fail. Turn section
+ # anchors off.
+ set SHCFLAG "-fno-section-anchors"
+
+ # On targets that have MOVW the compiler will emit relocations which
+ # the linker doesn't support when compiling -shared without -fpic. The
+ # test to find out whether we want to XFAIL the non-PIC tests requires
+ # a compile - so we pre-calculate it here. We also note that this can
+ # only affect arm*-*-*eabi targets as the old ABI doesn't support v7.
+ if [istarget arm*-*-*eabi] {
+ set file [open $tmpdir/movw-detect.c w]
+ puts $file "void foo(void) { __asm (\"movw r0, #0\"); }"
+ close $file
+ if [run_host_cmd_yesno "$CC" "$CFLAGS -c $tmpdir/movw-detect.c -o $tmpdir/movw-detect.o"] {
+ set shared_needs_pic "yes"
+ }
+ }
+}
+
+# The test procedure.
+proc shared_test { progname testname main sh1 sh2 dat args } {
+ global CC
+ global srcdir
+ global subdir
+ global exec_output
+ global host_triplet
+ global tmpdir
+
+ if [llength $args] { set shldflags [lindex $args 0] } else { set shldflags "" }
+
+ # Build the shared library.
+ # On AIX, we need to use an export file.
+ set shared -shared
+ if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
+ set shared "-bM:SRE -bE:$tmpdir/xcoff.exp"
+ }
+ if {![ld_simple_link $CC $tmpdir/$progname.so "$shared $shldflags $tmpdir/$sh1 $tmpdir/$sh2"]} {
+ fail "$testname"
+ return
+ }
+
+ # Link against the shared library. Use -rpath so that the
+ # dynamic linker can locate the shared library at runtime.
+ # On AIX, we must include /lib in -rpath, as otherwise the loader
+ # can not find -lc.
+ set rpath $tmpdir
+ if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
+ set rpath /lib:$tmpdir
+ }
+ if ![ld_simple_link $CC $tmpdir/$progname "-Wl,-rpath,$rpath $tmpdir/$main $tmpdir/$progname.so"] {
+ fail "$testname"
+ return
+ }
+
+ # Run the resulting program
+ send_log "$tmpdir/$progname >$tmpdir/$progname.out\n"
+ verbose "$tmpdir/$progname >$tmpdir/$progname.out"
+ catch "exec $tmpdir/$progname >$tmpdir/$progname.out" exec_output
+ if ![string match "" $exec_output] then {
+ send_log "$exec_output\n"
+ verbose "$exec_output"
+ fail "$testname"
+ return
+ }
+
+ send_log "diff $tmpdir/$progname.out $srcdir/$subdir/$dat.dat\n"
+ verbose "diff $tmpdir/$progname.out $srcdir/$subdir/$dat.dat"
+ catch "exec diff $tmpdir/$progname.out $srcdir/$subdir/$dat.dat" exec_output
+ set exec_output [prune_warnings $exec_output]
+
+ if {![string match "" $exec_output]} then {
+ send_log "$exec_output\n"
+ verbose "$exec_output"
+ fail "$testname"
+ return
+ }
+
+ pass "$testname"
+}
+
+if [istarget mips*-*-*] {
+ set picflag ""
+} else {
+ # Unfortunately, the gcc argument is -fpic and the cc argument is
+ # -KPIC. We have to try both.
+ set picflag "-fpic"
+ send_log "$CC $picflag\n"
+ verbose "$CC $picflag"
+ catch "exec $CC $picflag" exec_output
+ send_log "$exec_output\n"
+ verbose "--" "$exec_output"
+ if { [string match "*illegal option*" $exec_output] \
+ || [string match "*option ignored*" $exec_output] \
+ || [string match "*unrecognized option*" $exec_output] \
+ || [string match "*passed to ld*" $exec_output] } {
+ if [istarget *-*-sunos4*] {
+ set picflag "-pic"
+ } else {
+ set picflag "-KPIC"
+ }
+ }
+}
+verbose "Using $picflag to compile PIC code"
+
+# Compile the main program.
+if ![ld_compile "$CC $CFLAGS $SHCFLAG" $srcdir/$subdir/main.c $tmpdir/mainnp.o] {
+ unresolved "shared (non PIC)"
+ unresolved "shared"
+} else {
+ # The shared library is composed of two files. First compile them
+ # without using -fpic. That should work on an ELF system,
+ # although it will be less efficient because the dynamic linker
+ # will need to do more relocation work. However, note that not
+ # using -fpic will cause some of the tests to return different
+ # results.
+ if { ![ld_compile "$CC $CFLAGS $SHCFLAG" $srcdir/$subdir/sh1.c $tmpdir/sh1np.o]
+ || ![ld_compile "$CC $CFLAGS $SHCFLAG" $srcdir/$subdir/sh2.c $tmpdir/sh2np.o] } {
+ unresolved "shared (non PIC)"
+ } else { if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
+ shared_test shnp "shared (nonPIC)" mainnp.o sh1np.o sh2np.o xcoff
+ } else {
+ # SunOS non PIC shared libraries don't permit some cases of
+ # overriding.
+ setup_xfail "*-*-sunos4*"
+ setup_xfail "ia64-*-linux*"
+ setup_xfail "alpha*-*-linux*"
+ setup_xfail "powerpc64*-*-*"
+ if { ![istarget hppa*64*-*-linux*] } {
+ setup_xfail "hppa*-*-linux*"
+ }
+ if { [istarget sparc*-*-linux*] && [is_elf64 $tmpdir/mainnp.o] } {
+ setup_xfail "sparc*-*-linux*"
+ }
+ setup_xfail "x86_64-*-linux*"
+ setup_xfail "s390x-*-linux*"
+ if [ string match $shared_needs_pic "yes" ] {
+ setup_xfail "arm*-*-linux*"
+ }
+ shared_test shnp "shared (non PIC)" mainnp.o sh1np.o sh2np.o shared
+
+ # Test ELF shared library relocations with a non-zero load
+ # address for the library. Near as I can tell, the R_*_RELATIVE
+ # relocations for various targets are broken in the case where
+ # the load address is not zero (which is the default).
+ setup_xfail "*-*-sunos4*"
+ setup_xfail "*-*-linux*libc1"
+ setup_xfail "powerpc*-*-linux*"
+ setup_xfail "ia64-*-linux*"
+ setup_xfail "alpha*-*-linux*"
+ setup_xfail "mips*-*-linux*"
+ if { ![istarget hppa*64*-*-linux*] } {
+ setup_xfail "hppa*-*-linux*"
+ }
+ if { [istarget sparc*-*-linux*] && [is_elf64 $tmpdir/mainnp.o] } {
+ setup_xfail "sparc*-*-linux*"
+ }
+ setup_xfail "x86_64-*-linux*"
+ setup_xfail "s390x-*-linux*"
+ if [ string match $shared_needs_pic "yes" ] {
+ setup_xfail "arm*-*-linux*"
+ }
+ shared_test shnp "shared (non PIC, load offset)" \
+ mainnp.o sh1np.o sh2np.o shared \
+ "-T $srcdir/$subdir/elf-offset.ld"
+ } }
+
+ # Now compile the code using -fpic.
+
+ if { ![ld_compile "$CC $CFLAGS $SHCFLAG $picflag" $srcdir/$subdir/sh1.c $tmpdir/sh1p.o]
+ || ![ld_compile "$CC $CFLAGS $SHCFLAG $picflag" $srcdir/$subdir/sh2.c $tmpdir/sh2p.o] } {
+ unresolved "shared"
+ } else {
+ # SunOS can not compare function pointers correctly
+ if [istarget "*-*-sunos4*"] {
+ shared_test shp "shared" mainnp.o sh1p.o sh2p.o sun4
+ } else { if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
+ shared_test shp "shared" mainnp.o sh1p.o sh2p.o xcoff
+ } else {
+ shared_test shp "shared" mainnp.o sh1p.o sh2p.o shared
+ ld_compile "$CC $CFLAGS -DSYMBOLIC_TEST -DXCOFF_TEST $SHCFLAG" $srcdir/$subdir/main.c $tmpdir/mainnp.o
+ ld_compile "$CC $CFLAGS -DSYMBOLIC_TEST -DXCOFF_TEST $SHCFLAG $picflag" $srcdir/$subdir/sh1.c $tmpdir/sh1p.o
+ shared_test shp "shared -Bsymbolic" mainnp.o sh1p.o sh2p.o symbolic "-Bsymbolic"
+ ld_compile "$CC $CFLAGS $SHCFLAG" $srcdir/$subdir/main.c $tmpdir/mainnp.o
+ ld_compile "$CC $CFLAGS $SHCFLAG $picflag" $srcdir/$subdir/sh1.c $tmpdir/sh1p.o
+ } }
+ }
+}
+
+# Now do the same tests again, but this time compile main.c PIC.
+if ![ld_compile "$CC $CFLAGS $SHCFLAG $picflag" $srcdir/$subdir/main.c $tmpdir/mainp.o] {
+ unresolved "shared (PIC main, non PIC so)"
+ unresolved "shared (PIC main)"
+} else {
+ if { [file exists $tmpdir/sh1np.o ] && [ file exists $tmpdir/sh2np.o ] } {
+ if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
+ shared_test shmpnp "shared (PIC main, non PIC so)" mainp.o sh1np.o sh2np.o xcoff
+ } else {
+ # SunOS non PIC shared libraries don't permit some cases of
+ # overriding.
+ setup_xfail "*-*-sunos4*"
+ setup_xfail "ia64-*-linux*"
+ setup_xfail "alpha*-*-linux*"
+ setup_xfail "powerpc64*-*-*"
+ if { ![istarget hppa*64*-*-linux*] } {
+ setup_xfail "hppa*-*-linux*"
+ }
+ if { [istarget sparc*-*-linux*] && [is_elf64 $tmpdir/mainp.o] } {
+ setup_xfail "sparc*-*-linux*"
+ }
+ setup_xfail "x86_64-*-linux*"
+ setup_xfail "s390x-*-linux*"
+ if [ string match $shared_needs_pic "yes" ] {
+ setup_xfail "arm*-*-linux*"
+ }
+ shared_test shmpnp "shared (PIC main, non PIC so)" mainp.o sh1np.o sh2np.o shared
+ }
+ } else {
+ unresolved "shared (PIC main, non PIC so)"
+ }
+
+ if { [file exists $tmpdir/sh1p.o ] && [ file exists $tmpdir/sh2p.o ] } {
+ if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
+ shared_test shmpp "shared (PIC main)" mainp.o sh1p.o sh2p.o xcoff
+ } else {
+ shared_test shmpp "shared (PIC main)" mainp.o sh1p.o sh2p.o shared
+ }
+ } else {
+ unresolved "shared (PIC main)"
+ }
+}
+
+if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
+ # Remove the temporary directory.
+ catch "exec rm -rf $tmpdir" exec_status
+}
diff --git a/binutils-2.21/ld/testsuite/ld-shared/sun4.dat b/binutils-2.21/ld/testsuite/ld-shared/sun4.dat
new file mode 100644
index 0000000..be0d87d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-shared/sun4.dat
@@ -0,0 +1,16 @@
+mainvar == 1
+overriddenvar == 2
+shlibvar1 == 3
+shlib_mainvar () == 1
+shlib_overriddenvar () == 2
+shlib_shlibvar1 () == 3
+shlib_shlibvar2 () == 4
+shlib_shlibcall () == 5
+shlib_shlibcall2 () == 8
+shlib_maincall () == 6
+main_called () == 6
+shlib_checkfunptr1 (shlib_shlibvar1) == 0
+shlib_checkfunptr2 (main_called) == 1
+shlib_getfunptr1 () != shlib_shlibvar1
+shlib_getfunptr2 () == main_called
+shlib_check () == 1
diff --git a/binutils-2.21/ld/testsuite/ld-shared/symbolic.dat b/binutils-2.21/ld/testsuite/ld-shared/symbolic.dat
new file mode 100644
index 0000000..7146486
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-shared/symbolic.dat
@@ -0,0 +1,8 @@
+mainvar == 1
+overriddenvar == 2
+shlibvar1 == 3
+shlib_shlibvar1 () == 3
+shlib_shlibvar2 () == 4
+shlib_shlibcall () == 5
+main_called () == 6
+shlib_check () == 1
diff --git a/binutils-2.21/ld/testsuite/ld-shared/xcoff.dat b/binutils-2.21/ld/testsuite/ld-shared/xcoff.dat
new file mode 100644
index 0000000..a409d96
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-shared/xcoff.dat
@@ -0,0 +1,10 @@
+mainvar == 1
+overriddenvar == 2
+shlibvar1 == 3
+shlib_shlibvar1 () == 3
+shlib_shlibvar2 () == 4
+shlib_shlibcall () == 5
+main_called () == 6
+shlib_checkfunptr1 (shlib_shlibvar1) == 1
+shlib_getfunptr1 () == shlib_shlibvar1
+shlib_check () == 1
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/gotop32.dd b/binutils-2.21/ld/testsuite/ld-sparc/gotop32.dd
new file mode 100644
index 0000000..a599930
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/gotop32.dd
@@ -0,0 +1,34 @@
+#source: gotop32.s
+#as: --32 -K PIC
+#ld: -shared -melf32_sparc
+#objdump: -drj.text
+#target: sparc*-*-*
+
+.*: +file format elf32-sparc
+
+Disassembly of section .text:
+00001000 <foo-0x8>:
+ +1000: 81 c3 e0 08 retl *
+ +1004: ae 03 c0 17 add %o7, %l7, %l7
+
+00001008 <foo>:
+ +1008: 9d e3 bf 98 save %sp, -104, %sp
+ +100c: 2f 00 00 44 sethi %hi\(0x11000\), %l7
+ +1010: 7f ff ff fc call 1000 <_.*>
+ +1014: ae 05 e0 60 add %l7, 0x60, %l7 ! 11060 <.*>
+ +1018: 01 00 00 00 nop *
+ +101c: 23 00 00 00 sethi %hi\(0\), %l1
+ +1020: 01 00 00 00 nop *
+ +1024: a2 1c 60 04 xor %l1, 4, %l1
+ +1028: 01 00 00 00 nop *
+ +102c: f0 05 c0 11 ld \[ %l7 \+ %l1 \], %i0
+ +1030: 01 00 00 00 nop *
+ +1034: 23 00 00 03 sethi %hi\(0xc00\), %l1
+ +1038: 01 00 00 00 nop
+ +103c: a2 1c 63 94 xor %l1, 0x394, %l1
+ +1040: 01 00 00 00 nop
+ +1044: b0 05 c0 11 add %l7, %l1, %i0
+ +1048: 01 00 00 00 nop
+ +104c: 81 c7 e0 08 ret
+ +1050: 81 e8 00 00 restore
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/gotop32.rd b/binutils-2.21/ld/testsuite/ld-sparc/gotop32.rd
new file mode 100644
index 0000000..1cecad8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/gotop32.rd
@@ -0,0 +1,71 @@
+#source: gotop32.s
+#as: --32 -K PIC
+#ld: -shared -melf32_sparc
+#readelf: -WSsrl
+#target: sparc*-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
+ +\[[ 0-9]+\] .hash +.*
+ +\[[ 0-9]+\] .dynsym +.*
+ +\[[ 0-9]+\] .dynstr +.*
+ +\[[ 0-9]+\] .rela.dyn +.*
+ +\[[ 0-9]+\] .text +PROGBITS +0+1000 0+1000 0+1000 0+ +AX +0 +0 4096
+ +\[[ 0-9]+\] .dynamic +DYNAMIC +0+12000 0+2000 0+70 08 +WA +3 +0 +4
+ +\[[ 0-9]+\] .got +PROGBITS +0+12070 0+2070 0+8 04 +WA +0 +0 +4
+ +\[[ 0-9]+\] .data +PROGBITS +0+13000 0+3000 0+1000 00 +WA +0 +0 4096
+ +\[[ 0-9]+\] .shstrtab +.*
+ +\[[ 0-9]+\] .symtab +.*
+ +\[[ 0-9]+\] .strtab +.*
+#...
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x1000
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz MemSiz +Flg Align
+ +LOAD +0x0+ 0x0+ 0x0+ 0x0+2000 0x0+2000 R E 0x10000
+ +LOAD +0x0+2000 0x0+12000 0x0+12000 0x0+2000 0x0+2000 RW +0x10000
+ +DYNAMIC +0x0+2000 0x0+12000 0x0+12000 0x0+70 0x0+70 RW +0x4
+#...
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
+ Offset +Info +Type +Sym. Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_SPARC_GLOB_DAT +0+13000 +sym \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND *
+.* SECTION +LOCAL +DEFAULT +5 *
+.* SECTION +LOCAL +DEFAULT +7 *
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* FUNC +GLOBAL +DEFAULT +5 foo
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+.* NOTYPE +GLOBAL +DEFAULT +8 sym
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND *
+.* SECTION +LOCAL +DEFAULT +1 *
+.* SECTION +LOCAL +DEFAULT +2 *
+.* SECTION +LOCAL +DEFAULT +3 *
+.* SECTION +LOCAL +DEFAULT +4 *
+.* SECTION +LOCAL +DEFAULT +5 *
+.* SECTION +LOCAL +DEFAULT +6 *
+.* SECTION +LOCAL +DEFAULT +7 *
+.* SECTION +LOCAL +DEFAULT +8 *
+.* NOTYPE +LOCAL +DEFAULT +8 local_sym
+.* OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC
+.* OBJECT +LOCAL +DEFAULT +ABS _PROCEDURE_LINKAGE_TABLE_
+.* OBJECT +LOCAL +DEFAULT +ABS _GLOBAL_OFFSET_TABLE_
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* FUNC +GLOBAL +DEFAULT +5 foo
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+.* NOTYPE +GLOBAL +DEFAULT +8 sym
+
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/gotop32.s b/binutils-2.21/ld/testsuite/ld-sparc/gotop32.s
new file mode 100644
index 0000000..604694c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/gotop32.s
@@ -0,0 +1,37 @@
+ .data
+ .align 4096
+ .globl sym
+sym: .word 0x12345678
+
+local_sym:
+ .word 0xdeadbeef
+
+ .text
+ .align 4096
+.LLGETPC0:
+ retl
+ add %o7, %l7, %l7
+
+ .globl foo
+ .type foo,#function
+ .proc 04
+foo:
+ save %sp, -104, %sp
+ sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %l7
+ call .LLGETPC0
+ add %l7, %lo(_GLOBAL_OFFSET_TABLE_+4), %l7
+ nop
+ sethi %gdop_hix22(sym), %l1
+ nop
+ xor %l1, %gdop_lox10(sym), %l1
+ nop
+ ld [%l7 + %l1], %i0, %gdop(sym)
+ nop
+ sethi %gdop_hix22(local_sym), %l1
+ nop
+ xor %l1, %gdop_lox10(local_sym), %l1
+ nop
+ ld [%l7 + %l1], %i0, %gdop(local_sym)
+ nop
+ ret
+ restore
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/gotop32.sd b/binutils-2.21/ld/testsuite/ld-sparc/gotop32.sd
new file mode 100644
index 0000000..fc16756
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/gotop32.sd
@@ -0,0 +1,10 @@
+#source: gotop32.s
+#as: --32 -K PIC
+#ld: -shared -melf32_sparc
+#objdump: -sj.got
+#target: sparc*-*-*
+
+.*: +file format elf32-sparc
+
+Contents of section .got:
+ 12070 00012000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/gotop32.td b/binutils-2.21/ld/testsuite/ld-sparc/gotop32.td
new file mode 100644
index 0000000..520788b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/gotop32.td
@@ -0,0 +1,12 @@
+#source: gotop32.s
+#as: --32 -K PIC
+#ld: -shared -melf32_sparc
+#objdump: -sj.data
+#target: sparc*-*-*
+
+.*: +file format elf32-sparc
+
+Contents of section .data:
+ 13000 12345678 deadbeef 00000000 00000000 .*
+ 13010 00000000 00000000 00000000 00000000 .*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/gotop64.dd b/binutils-2.21/ld/testsuite/ld-sparc/gotop64.dd
new file mode 100644
index 0000000..d73fb18
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/gotop64.dd
@@ -0,0 +1,34 @@
+#source: gotop64.s
+#as: --64 -K PIC
+#ld: -shared -melf64_sparc
+#objdump: -drj.text
+#target: sparc*-*-*
+
+.*: +file format elf64-sparc
+
+Disassembly of section .text:
+0000000000001000 <foo-0x8>:
+ +1000: 81 c3 e0 08 retl *
+ +1004: ae 03 c0 17 add %o7, %l7, %l7
+
+0000000000001008 <foo>:
+ +1008: 9d e3 bf 60 save %sp, -160, %sp
+ +100c: 2f 00 04 04 sethi %hi\(0x101000\), %l7
+ +1010: 7f ff ff fc call 1000 <_.*>
+ +1014: ae 05 e0 d0 add %l7, 0xd0, %l7 ! 1010d0 <.*>
+ +1018: 01 00 00 00 nop *
+ +101c: 23 00 00 00 sethi %hi\(0\), %l1
+ +1020: 01 00 00 00 nop *
+ +1024: a2 1c 60 08 xor %l1, 8, %l1
+ +1028: 01 00 00 00 nop *
+ +102c: f0 5d c0 11 ldx \[ %l7 \+ %l1 \], %i0
+ +1030: 01 00 00 00 nop *
+ +1034: 23 00 00 03 sethi %hi\(0xc00\), %l1
+ +1038: 01 00 00 00 nop *
+ +103c: a2 1c 63 24 xor %l1, 0x324, %l1
+ +1040: 01 00 00 00 nop *
+ +1044: b0 05 c0 11 add %l7, %l1, %i0
+ +1048: 01 00 00 00 nop *
+ +104c: 81 c7 e0 08 ret
+ +1050: 81 e8 00 00 restore
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/gotop64.rd b/binutils-2.21/ld/testsuite/ld-sparc/gotop64.rd
new file mode 100644
index 0000000..509c8f8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/gotop64.rd
@@ -0,0 +1,71 @@
+#source: gotop64.s
+#as: --64 -K PIC
+#ld: -shared -melf64_sparc
+#readelf: -WSsrl
+#target: sparc*-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
+ +\[[ 0-9]+\] .hash +.*
+ +\[[ 0-9]+\] .dynsym +.*
+ +\[[ 0-9]+\] .dynstr +.*
+ +\[[ 0-9]+\] .rela.dyn +.*
+ +\[[ 0-9]+\] .text +PROGBITS +0+1000 0+1000 0+1000 0+ +AX +0 +0 4096
+ +\[[ 0-9]+\] .dynamic +DYNAMIC +0+102000 0+2000 0+e0 10 +WA +3 +0 +8
+ +\[[ 0-9]+\] .got +PROGBITS +0+1020e0 0+20e0 0+10 08 +WA +0 +0 +8
+ +\[[ 0-9]+\] .data +PROGBITS +0+103000 0+3000 0+1000 00 +WA +0 +0 4096
+ +\[[ 0-9]+\] .shstrtab +.*
+ +\[[ 0-9]+\] .symtab +.*
+ +\[[ 0-9]+\] .strtab +.*
+#...
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x1000
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +LOAD +0x0+ 0x0+ 0x0+ 0x0+2000 0x0+2000 R E 0x100000
+ +LOAD +0x0+2000 0x0+102000 0x0+102000 0x0+2000 0x0+2000 RW +0x100000
+ +DYNAMIC +0x0+2000 0x0+102000 0x0+102000 0x0+e0 0x0+e0 RW +0x8
+#...
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_SPARC_GLOB_DAT +0+103000 +sym \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND *
+.* SECTION +LOCAL +DEFAULT +5 *
+.* SECTION +LOCAL +DEFAULT +7 *
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* FUNC +GLOBAL +DEFAULT +5 foo
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+.* NOTYPE +GLOBAL +DEFAULT +8 sym
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND *
+.* SECTION +LOCAL +DEFAULT +1 *
+.* SECTION +LOCAL +DEFAULT +2 *
+.* SECTION +LOCAL +DEFAULT +3 *
+.* SECTION +LOCAL +DEFAULT +4 *
+.* SECTION +LOCAL +DEFAULT +5 *
+.* SECTION +LOCAL +DEFAULT +6 *
+.* SECTION +LOCAL +DEFAULT +7 *
+.* SECTION +LOCAL +DEFAULT +8 *
+.* NOTYPE +LOCAL +DEFAULT +8 local_sym
+.* OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC
+.* OBJECT +LOCAL +DEFAULT +ABS _PROCEDURE_LINKAGE_TABLE_
+.* OBJECT +LOCAL +DEFAULT +ABS _GLOBAL_OFFSET_TABLE_
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* FUNC +GLOBAL +DEFAULT +5 foo
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+.* NOTYPE +GLOBAL +DEFAULT +8 sym
+
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/gotop64.s b/binutils-2.21/ld/testsuite/ld-sparc/gotop64.s
new file mode 100644
index 0000000..9910813
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/gotop64.s
@@ -0,0 +1,37 @@
+ .data
+ .align 4096
+ .globl sym
+sym: .word 0x12345678
+
+local_sym:
+ .word 0xdeadbeef
+
+ .text
+ .align 4096
+.LLGETPC0:
+ retl
+ add %o7, %l7, %l7
+
+ .globl foo
+ .type foo,#function
+ .proc 04
+foo:
+ save %sp, -160, %sp
+ sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %l7
+ call .LLGETPC0
+ add %l7, %lo(_GLOBAL_OFFSET_TABLE_+4), %l7
+ nop
+ sethi %gdop_hix22(sym), %l1
+ nop
+ xor %l1, %gdop_lox10(sym), %l1
+ nop
+ ldx [%l7 + %l1], %i0, %gdop(sym)
+ nop
+ sethi %gdop_hix22(local_sym), %l1
+ nop
+ xor %l1, %gdop_lox10(local_sym), %l1
+ nop
+ ldx [%l7 + %l1], %i0, %gdop(local_sym)
+ nop
+ ret
+ restore
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/gotop64.sd b/binutils-2.21/ld/testsuite/ld-sparc/gotop64.sd
new file mode 100644
index 0000000..9ab0f61
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/gotop64.sd
@@ -0,0 +1,10 @@
+#source: gotop64.s
+#as: --64 -K PIC
+#ld: -shared -melf64_sparc
+#objdump: -sj.got
+#target: sparc*-*-*
+
+.*: +file format elf64-sparc
+
+Contents of section .got:
+ 1020e0 00000000 00102000 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/gotop64.td b/binutils-2.21/ld/testsuite/ld-sparc/gotop64.td
new file mode 100644
index 0000000..28d40ed
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/gotop64.td
@@ -0,0 +1,12 @@
+#source: gotop64.s
+#as: --64 -K PIC
+#ld: -shared -melf64_sparc
+#objdump: -sj.data
+#target: sparc*-*-*
+
+.*: +file format elf64-sparc
+
+Contents of section .data:
+ 103000 12345678 deadbeef 00000000 00000000 .*
+ 103010 00000000 00000000 00000000 00000000 .*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/sparc.exp b/binutils-2.21/ld/testsuite/ld-sparc/sparc.exp
new file mode 100644
index 0000000..2ecded2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/sparc.exp
@@ -0,0 +1,135 @@
+# Expect script for ld-sparc tests
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# Test SPARC linking; all types of relocs. This tests the assembler and
+# tools like objdump as well as the linker.
+
+if {[istarget "sparc-*-vxworks"]} {
+ set sparcvxworkstests {
+ {"VxWorks shared library test 1" "-shared -Tvxworks1.ld"
+ "-KPIC" {vxworks1-lib.s}
+ {{readelf --relocs vxworks1-lib.rd} {objdump -dr vxworks1-lib.dd}
+ {readelf --symbols vxworks1-lib.nd} {readelf -d vxworks1-lib.td}}
+ "libvxworks1.so"}
+ {"VxWorks executable test 1 (dynamic)" \
+ "tmpdir/libvxworks1.so -Tvxworks1.ld -q --force-dynamic"
+ "" {vxworks1.s}
+ {{readelf --relocs vxworks1.rd} {objdump -dr vxworks1.dd}}
+ "vxworks1"}
+ {"VxWorks executable test 2 (dynamic)" \
+ "-Tvxworks1.ld -q --force-dynamic"
+ "" {vxworks2.s}
+ {{readelf --segments vxworks2.sd}}
+ "vxworks2"}
+ {"VxWorks executable test 2 (static)"
+ "-Tvxworks1.ld"
+ "" {vxworks2.s}
+ {{readelf --segments vxworks2-static.sd}}
+ "vxworks2"}
+ }
+ run_ld_link_tests $sparcvxworkstests
+ run_dump_test "vxworks1-static"
+}
+
+if { !([istarget "sparc*-*-elf*"]
+ || [istarget "sparc*-sun-solaris*"]
+ || ([istarget "sparc*-*-linux*"]
+ && ![istarget "*-*-*aout*"]
+ && ![istarget "*-*-*oldld*"])) } {
+ return
+}
+
+# List contains test-items with 3 items followed by 2 lists:
+# 0:name 1:ld options 2:assembler options
+# 3:filenames of assembler files 4: action and options. 5: name of output file
+
+# Actions:
+# objdump: Apply objdump options on result. Compare with regex (last arg).
+# nm: Apply nm options on result. Compare with regex (last arg).
+# readelf: Apply readelf options on result. Compare with regex (last arg).
+
+set sparctests {
+ {"32-bit: TLS -fpic -shared transitions" "-shared -melf32_sparc"
+ "--32 -K PIC" {tlssunpic32.s tlspic.s}
+ {{readelf -WSsrl tlssunpic32.rd} {objdump -drj.text tlssunpic32.dd}
+ {objdump -sj.got tlssunpic32.sd} {objdump -sj.tdata tlssunpic32.td}}
+ "libtlssunpic32.so"}
+ {"32-bit: Helper shared library" "-shared -melf32_sparc"
+ "--32 -K PIC" {tlslib.s} {} "libtlslib32.so"}
+ {"32-bit: Another helper shared library" "-shared -melf32_sparc"
+ "--32 -K PIC" {tlssunbinpic32.s} {} "libtlssunbinpic32.so"}
+ {"32-bit: TLS -fpic and -fno-pic exec transitions"
+ "-melf32_sparc tmpdir/libtlslib32.so tmpdir/tlssunbinpic32.o"
+ "--32" {tlssunbin32.s}
+ {{readelf -WSsrl tlssunbin32.rd} {objdump -drj.text tlssunbin32.dd}
+ {objdump -sj.got tlssunbin32.sd} {objdump -sj.tdata tlssunbin32.td}}
+ "tlssunbin32"}
+ {"32-bit: TLS -fno-pic -shared" "-shared -melf32_sparc"
+ "--32" {tlssunnopic32.s tlsnopic.s}
+ {{readelf -WSsrl tlssunnopic32.rd} {objdump -drj.text tlssunnopic32.dd}
+ {objdump -sj.got tlssunnopic32.sd}} "libtlssunnopic32.so"}
+ {"32-bit: TLS in debug sections" "-melf32_sparc"
+ "--32" {tlsg32.s}
+ {{objdump -sj.debug_foobar tlsg32.sd}} "tlsg32"}
+ {"32-bit: GOTDATA relocations" "-shared -melf32_sparc"
+ "--32 -K PIC" {gotop32.s}
+ {{readelf -WSsrl gotop32.rd} {objdump -drj.text gotop32.dd}
+ {objdump -sj.got gotop32.sd} {objdump -sj.data gotop32.td}}
+ "libgotop32.so"}
+}
+set sparc64tests {
+ {"64-bit: TLS -fpic -shared transitions" "-shared -melf64_sparc"
+ "--64 -Av9 -K PIC" {tlssunpic64.s tlspic.s}
+ {{readelf -WSsrl tlssunpic64.rd} {objdump -drj.text tlssunpic64.dd}
+ {objdump -sj.got tlssunpic64.sd} {objdump -sj.tdata tlssunpic64.td}}
+ "libtlssunpic64.so"}
+ {"64-bit: Helper shared library" "-shared -melf64_sparc"
+ "--64 -Av9 -K PIC" {tlslib.s} {} "libtlslib64.so"}
+ {"64-bit: Another helper shared library" "-shared -melf64_sparc"
+ "--64 -Av9 -K PIC" {tlssunbinpic64.s} {} "libtlssunbinpic64.so"}
+ {"64-bit: TLS -fpic and -fno-pic exec transitions"
+ "-melf64_sparc tmpdir/libtlslib64.so tmpdir/tlssunbinpic64.o"
+ "--64 -Av9" {tlssunbin64.s}
+ {{readelf -WSsrl tlssunbin64.rd} {objdump -drj.text tlssunbin64.dd}
+ {objdump -sj.got tlssunbin64.sd} {objdump -sj.tdata tlssunbin64.td}}
+ "tlssunbin64"}
+ {"64-bit: TLS -fno-pic -shared" "-shared -melf64_sparc"
+ "--64 -Av9" {tlssunnopic64.s tlsnopic.s}
+ {{readelf -WSsrl tlssunnopic64.rd} {objdump -drj.text tlssunnopic64.dd}
+ {objdump -sj.got tlssunnopic64.sd}} "libtlssunnopic64.so"}
+ {"64-bit: TLS in debug sections" "-melf64_sparc"
+ "--64 -Av9" {tlsg64.s}
+ {{objdump -sj.debug_foobar tlsg64.sd}} "tlsg64"}
+ {"64-bit: GOTDATA relocations" "-shared -melf64_sparc"
+ "--64 -K PIC" {gotop64.s}
+ {{readelf -WSsrl gotop64.rd} {objdump -drj.text gotop64.dd}
+ {objdump -sj.got gotop64.sd} {objdump -sj.data gotop64.td}}
+ "libgotop64.so"}
+}
+
+if { ![istarget "sparc64-*-elf*"] } {
+ run_ld_link_tests $sparctests
+}
+if { !([istarget "sparc-*-elf*"]
+ || [istarget "sparc-sun-solaris2.5*"]
+ || [istarget "sparc-sun-solaris2.6"]) } {
+ run_ld_link_tests $sparc64tests
+}
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlsg32.s b/binutils-2.21/ld/testsuite/ld-sparc/tlsg32.s
new file mode 100644
index 0000000..0339f50
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlsg32.s
@@ -0,0 +1,12 @@
+ .section .tbss
+ .align 4
+ .word 0, 0, 0, 0, 0, 0
+ .type a,#tls_object
+ .size a,4
+a:
+ .word 0
+ .text
+ .globl _start
+_start:
+ .section .debug_foobar
+ .word %r_tls_dtpoff32(a)
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlsg32.sd b/binutils-2.21/ld/testsuite/ld-sparc/tlsg32.sd
new file mode 100644
index 0000000..861ac2e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlsg32.sd
@@ -0,0 +1,10 @@
+#source: tlsg.s
+#as: --32
+#ld: -melf32_sparc
+#objdump: -sj.debug_foobar
+#target: sparc*-*-*
+
+.*: +file format elf32-sparc
+
+Contents of section .debug_foobar:
+ 0+ 0+18 .*
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlsg64.s b/binutils-2.21/ld/testsuite/ld-sparc/tlsg64.s
new file mode 100644
index 0000000..4419974
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlsg64.s
@@ -0,0 +1,12 @@
+ .section .tbss
+ .align 4
+ .word 0, 0, 0, 0, 0, 0
+ .type a,#tls_object
+ .size a,4
+a:
+ .word 0
+ .text
+ .globl _start
+_start:
+ .section .debug_foobar
+ .xword %r_tls_dtpoff64(a)
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlsg64.sd b/binutils-2.21/ld/testsuite/ld-sparc/tlsg64.sd
new file mode 100644
index 0000000..4181dde
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlsg64.sd
@@ -0,0 +1,10 @@
+#source: tlsg.s
+#as: --64 -Av9
+#ld: -melf64_sparc
+#objdump: -sj.debug_foobar
+#target: sparc*-*-*
+
+.*: +file format elf64-sparc
+
+Contents of section .debug_foobar:
+ 0+ 0+ 0+18 .*
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlslib.s b/binutils-2.21/ld/testsuite/ld-sparc/tlslib.s
new file mode 100644
index 0000000..6b62e09
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlslib.s
@@ -0,0 +1,20 @@
+ .section ".tdata", #alloc, #write, #tls
+ .align 4
+ .globl sG1, sG2, sG3, sG4, sG5, sG6, sG7, sG8
+sG1: .word 513
+sG2: .word 514
+sG3: .word 515
+sG4: .word 516
+sG5: .word 517
+sG6: .word 518
+sG7: .word 519
+sG8: .word 520
+
+ .text
+ /* Dummy. */
+ .globl __tls_get_addr
+ .type __tls_get_addr,#function
+ .proc 04
+__tls_get_addr:
+ ret
+ restore
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlsnopic.s b/binutils-2.21/ld/testsuite/ld-sparc/tlsnopic.s
new file mode 100644
index 0000000..648660a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlsnopic.s
@@ -0,0 +1,8 @@
+ .section ".tbss"
+ .align 4
+ .globl sh1, sh2, sh3, sh4
+ .hidden sh1, sh2, sh3, sh4
+sh1: .word 0
+sh2: .word 0
+sh3: .word 0
+sh4: .word 0
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlspic.s b/binutils-2.21/ld/testsuite/ld-sparc/tlspic.s
new file mode 100644
index 0000000..7c806d0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlspic.s
@@ -0,0 +1,12 @@
+ .section ".tbss"
+ .align 4
+ .globl sH1, sH2, sH3, sH4, sH5, sH6, sH7, sH8
+ .hidden sH1, sH2, sH3, sH4, sH5, sH6, sH7, sH8
+sH1: .word 0
+sH2: .word 0
+sH3: .word 0
+sH4: .word 0
+sH5: .word 0
+sH6: .word 0
+sH7: .word 0
+sH8: .word 0
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin32.dd b/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin32.dd
new file mode 100644
index 0000000..37c1d04
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin32.dd
@@ -0,0 +1,273 @@
+#source: tlssunbin32.s
+#as: --32
+#ld: -shared -melf32_sparc tmpdir/libtlslib32.so tmpdir/tlssunbinpic32.o
+#objdump: -drj.text
+#target: sparc*-*-*
+
+.*: +file format elf32-sparc
+
+Disassembly of section .text:
+
+0+11000 <fn2-0x8>:
+ +11000: 81 c3 e0 08 retl *
+ +11004: ae 03 c0 17 add %o7, %l7, %l7
+
+0+11008 <fn2>:
+ +11008: 9d e3 bf 98 save %sp, -104, %sp
+ +1100c: 2f 00 00 48 sethi %hi\(0x12000\), %l7
+ +11010: 7f ff ff fc call 11000 <.*>
+ +11014: ae 05 e2 64 add %l7, 0x264, %l7 ! 12264 <.*>
+ +11018: 01 00 00 00 nop *
+ +1101c: 01 00 00 00 nop *
+ +11020: 01 00 00 00 nop *
+ +11024: 01 00 00 00 nop *
+ +11028: 23 00 00 00 sethi %hi\(0\), %l1
+ +1102c: 01 00 00 00 nop *
+ +11030: a4 04 60 10 add %l1, 0x10, %l2
+ +11034: 01 00 00 00 nop *
+ +11038: d0 05 c0 12 ld \[ %l7 \+ %l2 \], %o0
+ +1103c: 01 00 00 00 nop *
+ +11040: 90 01 c0 08 add %g7, %o0, %o0
+ +11044: 01 00 00 00 nop *
+ +11048: 01 00 00 00 nop *
+ +1104c: 01 00 00 00 nop *
+ +11050: 01 00 00 00 nop *
+ +11054: 01 00 00 00 nop *
+ +11058: 11 00 00 00 sethi %hi\(0\), %o0
+ +1105c: 92 02 20 08 add %o0, 8, %o1 ! 8 <.*>
+ +11060: d0 05 c0 09 ld \[ %l7 \+ %o1 \], %o0
+ +11064: 90 01 c0 08 add %g7, %o0, %o0
+ +11068: 01 00 00 00 nop *
+ +1106c: 01 00 00 00 nop *
+ +11070: 01 00 00 00 nop *
+ +11074: 01 00 00 00 nop *
+ +11078: 01 00 00 00 nop *
+ +1107c: 21 00 00 04 sethi %hi\(0x1000\), %l0
+ +11080: aa 1c 3f 60 xor %l0, -160, %l5
+ +11084: 90 01 c0 15 add %g7, %l5, %o0
+ +11088: 01 00 00 00 nop *
+ +1108c: 01 00 00 00 nop *
+ +11090: 01 00 00 00 nop *
+ +11094: 01 00 00 00 nop *
+ +11098: 01 00 00 00 nop *
+ +1109c: 01 00 00 00 nop *
+ +110a0: 11 00 00 00 sethi %hi\(0\), %o0
+ +110a4: 92 1a 3f 80 xor %o0, -128, %o1
+ +110a8: 90 01 c0 09 add %g7, %o1, %o0
+ +110ac: 01 00 00 00 nop *
+ +110b0: 01 00 00 00 nop *
+ +110b4: 01 00 00 00 nop *
+ +110b8: 01 00 00 00 nop *
+ +110bc: 01 00 00 00 nop *
+ +110c0: 01 00 00 00 nop *
+ +110c4: 11 00 00 00 sethi %hi\(0\), %o0
+ +110c8: 92 1a 3f a0 xor %o0, -96, %o1
+ +110cc: 90 01 c0 09 add %g7, %o1, %o0
+ +110d0: 01 00 00 00 nop *
+ +110d4: 01 00 00 00 nop *
+ +110d8: 01 00 00 00 nop *
+ +110dc: 01 00 00 00 nop *
+ +110e0: 01 00 00 00 nop *
+ +110e4: 01 00 00 00 nop *
+ +110e8: 01 00 00 00 nop *
+ +110ec: 01 00 00 00 nop *
+ +110f0: 01 00 00 00 nop *
+ +110f4: 01 00 00 00 nop *
+ +110f8: 01 00 00 00 nop *
+ +110fc: 01 00 00 00 nop *
+ +11100: 90 10 00 00 mov %g0, %o0
+ +11104: 01 00 00 00 nop *
+ +11108: 27 00 00 00 sethi %hi\(0\), %l3
+ +1110c: 01 00 00 00 nop *
+ +11110: a8 1c ff 80 xor %l3, -128, %l4
+ +11114: 01 00 00 00 nop *
+ +11118: aa 01 c0 14 add %g7, %l4, %l5
+ +1111c: 01 00 00 00 nop *
+ +11120: 25 00 00 00 sethi %hi\(0\), %l2
+ +11124: 01 00 00 00 nop *
+ +11128: a6 1c bf 86 xor %l2, -122, %l3
+ +1112c: 01 00 00 00 nop *
+ +11130: ec 11 c0 13 lduh \[ %g7 \+ %l3 \], %l6
+ +11134: 01 00 00 00 nop *
+ +11138: 01 00 00 00 nop *
+ +1113c: 01 00 00 00 nop *
+ +11140: 01 00 00 00 nop *
+ +11144: 01 00 00 00 nop *
+ +11148: 27 00 00 00 sethi %hi\(0\), %l3
+ +1114c: 01 00 00 00 nop *
+ +11150: 25 00 00 00 sethi %hi\(0\), %l2
+ +11154: 01 00 00 00 nop *
+ +11158: a8 1c ff a0 xor %l3, -96, %l4
+ +1115c: 90 10 00 00 mov %g0, %o0
+ +11160: a6 1c bf a5 xor %l2, -91, %l3
+ +11164: aa 01 c0 14 add %g7, %l4, %l5
+ +11168: ec 09 c0 13 ldub \[ %g7 \+ %l3 \], %l6
+ +1116c: 01 00 00 00 nop *
+ +11170: 01 00 00 00 nop *
+ +11174: 01 00 00 00 nop *
+ +11178: 01 00 00 00 nop *
+ +1117c: 23 00 00 00 sethi %hi\(0\), %l1
+ +11180: 01 00 00 00 nop *
+ +11184: a4 04 60 08 add %l1, 8, %l2
+ +11188: 01 00 00 00 nop *
+ +1118c: e4 05 c0 12 ld \[ %l7 \+ %l2 \], %l2
+ +11190: 01 00 00 00 nop *
+ +11194: a4 01 c0 12 add %g7, %l2, %l2
+ +11198: 01 00 00 00 nop *
+ +1119c: 01 00 00 00 nop *
+ +111a0: 01 00 00 00 nop *
+ +111a4: 01 00 00 00 nop *
+ +111a8: 17 00 00 04 sethi %hi\(0x1000\), %o3
+ +111ac: 96 1a ff 60 xor %o3, -160, %o3
+ +111b0: 01 00 00 00 nop *
+ +111b4: 98 01 c0 0b add %g7, %o3, %o4
+ +111b8: 01 00 00 00 nop *
+ +111bc: 01 00 00 00 nop *
+ +111c0: 01 00 00 00 nop *
+ +111c4: 01 00 00 00 nop *
+ +111c8: 29 00 00 00 sethi %hi\(0\), %l4
+ +111cc: a2 1d 3f 80 xor %l4, -128, %l1
+ +111d0: a6 10 00 11 mov %l1, %l3
+ +111d4: a6 01 c0 13 add %g7, %l3, %l3
+ +111d8: 01 00 00 00 nop *
+ +111dc: 01 00 00 00 nop *
+ +111e0: 01 00 00 00 nop *
+ +111e4: 01 00 00 00 nop *
+ +111e8: 13 00 00 00 sethi %hi\(0\), %o1
+ +111ec: 96 1a 7f a0 xor %o1, -96, %o3
+ +111f0: 90 10 00 0b mov %o3, %o0
+ +111f4: 96 01 c0 08 add %g7, %o0, %o3
+ +111f8: 01 00 00 00 nop *
+ +111fc: 01 00 00 00 nop *
+ +11200: 01 00 00 00 nop *
+ +11204: 01 00 00 00 nop *
+ +11208: 17 00 00 00 sethi %hi\(0\), %o3
+ +1120c: 96 02 e0 04 add %o3, 4, %o3 ! 4 <.*>
+ +11210: d4 05 c0 0b ld \[ %l7 \+ %o3 \], %o2
+ +11214: d8 01 c0 0a ld \[ %g7 \+ %o2 \], %o4
+ +11218: 01 00 00 00 nop *
+ +1121c: 01 00 00 00 nop *
+ +11220: 01 00 00 00 nop *
+ +11224: 01 00 00 00 nop *
+ +11228: 17 00 00 00 sethi %hi\(0\), %o3
+ +1122c: 96 1a ff 90 xor %o3, -112, %o3
+ +11230: 94 10 00 0b mov %o3, %o2
+ +11234: d8 29 c0 0a stb %o4, \[ %g7 \+ %o2 \]
+ +11238: 01 00 00 00 nop *
+ +1123c: 01 00 00 00 nop *
+ +11240: 01 00 00 00 nop *
+ +11244: 01 00 00 00 nop *
+ +11248: 1b 00 00 00 sethi %hi\(0\), %o5
+ +1124c: 96 1b 7f b0 xor %o5, -80, %o3
+ +11250: 94 10 00 0b mov %o3, %o2
+ +11254: d8 49 c0 0a ldsb \[ %g7 \+ %o2 \], %o4
+ +11258: 01 00 00 00 nop *
+ +1125c: 01 00 00 00 nop *
+ +11260: 01 00 00 00 nop *
+ +11264: 01 00 00 00 nop *
+ +11268: 81 c7 e0 08 ret *
+ +1126c: 81 e8 00 00 restore *
+#...
+
+00012000 <_start>:
+ +12000: 9d e3 bf 98 save %sp, -104, %sp
+ +12004: 29 00 00 8c sethi %hi\(0x23000\), %l4
+ +12008: a8 15 22 74 or %l4, 0x274, %l4 ! 23274 <.*>
+ +1200c: 01 00 00 00 nop *
+ +12010: 01 00 00 00 nop *
+ +12014: 01 00 00 00 nop *
+ +12018: 01 00 00 00 nop *
+ +1201c: 17 00 00 00 sethi %hi\(0\), %o3
+ +12020: 96 02 e0 0c add %o3, 0xc, %o3 ! c <.*>
+ +12024: d4 05 00 0b ld \[ %l4 \+ %o3 \], %o2
+ +12028: 98 01 c0 0a add %g7, %o2, %o4
+ +1202c: 01 00 00 00 nop *
+ +12030: 01 00 00 00 nop *
+ +12034: 01 00 00 00 nop *
+ +12038: 01 00 00 00 nop *
+ +1203c: 17 00 00 00 sethi %hi\(0\), %o3
+ +12040: 9a 1a ff d4 xor %o3, -44, %o5
+ +12044: 94 10 00 0d mov %o5, %o2
+ +12048: 98 01 c0 0a add %g7, %o2, %o4
+ +1204c: 01 00 00 00 nop *
+ +12050: 01 00 00 00 nop *
+ +12054: 01 00 00 00 nop *
+ +12058: 01 00 00 00 nop *
+ +1205c: 17 00 00 00 sethi %hi\(0\), %o3
+ +12060: 9a 1a ff f4 xor %o3, -12, %o5
+ +12064: a4 10 00 0d mov %o5, %l2
+ +12068: a4 01 c0 12 add %g7, %l2, %l2
+ +1206c: 01 00 00 00 nop *
+ +12070: 01 00 00 00 nop *
+ +12074: 01 00 00 00 nop *
+ +12078: 01 00 00 00 nop *
+ +1207c: 17 00 00 00 sethi %hi\(0\), %o3
+ +12080: 9a 1a ff fc xor %o3, -4, %o5
+ +12084: a4 10 00 0d mov %o5, %l2
+ +12088: e4 01 c0 12 ld \[ %g7 \+ %l2 \], %l2
+ +1208c: 01 00 00 00 nop *
+ +12090: 01 00 00 00 nop *
+ +12094: 01 00 00 00 nop *
+ +12098: 01 00 00 00 nop *
+ +1209c: 17 00 00 00 sethi %hi\(0\), %o3
+ +120a0: 9a 1a ff b4 xor %o3, -76, %o5
+ +120a4: a4 10 00 0d mov %o5, %l2
+ +120a8: a4 01 c0 12 add %g7, %l2, %l2
+ +120ac: 01 00 00 00 nop *
+ +120b0: 01 00 00 00 nop *
+ +120b4: 01 00 00 00 nop *
+ +120b8: 01 00 00 00 nop *
+ +120bc: 17 00 00 00 sethi %hi\(0\), %o3
+ +120c0: 9a 1a ff fc xor %o3, -4, %o5
+ +120c4: a4 10 00 0d mov %o5, %l2
+ +120c8: e2 29 c0 12 stb %l1, \[ %g7 \+ %l2 \]
+ +120cc: 01 00 00 00 nop *
+ +120d0: 01 00 00 00 nop *
+ +120d4: 01 00 00 00 nop *
+ +120d8: 01 00 00 00 nop *
+ +120dc: 23 00 00 00 sethi %hi\(0\), %l1
+ +120e0: 01 00 00 00 nop *
+ +120e4: a4 1c 7f 64 xor %l1, -156, %l2
+ +120e8: 01 00 00 00 nop *
+ +120ec: a6 01 c0 12 add %g7, %l2, %l3
+ +120f0: 01 00 00 00 nop *
+ +120f4: 01 00 00 00 nop *
+ +120f8: 01 00 00 00 nop *
+ +120fc: 01 00 00 00 nop *
+ +12100: 11 00 00 00 sethi %hi\(0\), %o0
+ +12104: 90 1a 3f e6 xor %o0, -26, %o0
+ +12108: 90 01 c0 08 add %g7, %o0, %o0
+ +1210c: 01 00 00 00 nop *
+ +12110: 01 00 00 00 nop *
+ +12114: 01 00 00 00 nop *
+ +12118: 01 00 00 00 nop *
+ +1211c: 23 00 00 00 sethi %hi\(0\), %l1
+ +12120: 9a 1c 7f a5 xor %l1, -91, %o5
+ +12124: 92 01 c0 0d add %g7, %o5, %o1
+ +12128: 01 00 00 00 nop *
+ +1212c: 01 00 00 00 nop *
+ +12130: 01 00 00 00 nop *
+ +12134: 01 00 00 00 nop *
+ +12138: 23 00 00 00 sethi %hi\(0\), %l1
+ +1213c: 9a 1c 7f 68 xor %l1, -152, %o5
+ +12140: d2 01 c0 0d ld \[ %g7 \+ %o5 \], %o1
+ +12144: 01 00 00 00 nop *
+ +12148: 01 00 00 00 nop *
+ +1214c: 01 00 00 00 nop *
+ +12150: 01 00 00 00 nop *
+ +12154: 11 00 00 00 sethi %hi\(0\), %o0
+ +12158: 90 1a 3f eb xor %o0, -21, %o0
+ +1215c: d2 29 c0 08 stb %o1, \[ %g7 \+ %o0 \]
+ +12160: 01 00 00 00 nop *
+ +12164: 01 00 00 00 nop *
+ +12168: 01 00 00 00 nop *
+ +1216c: 01 00 00 00 nop *
+ +12170: 15 00 00 00 sethi %hi\(0\), %o2
+ +12174: 98 1a bf ab xor %o2, -85, %o4
+ +12178: da 69 c0 0c ldstub \[ %g7 \+ %o4 \], %o5
+ +1217c: 01 00 00 00 nop *
+ +12180: 01 00 00 00 nop *
+ +12184: 01 00 00 00 nop *
+ +12188: 01 00 00 00 nop *
+ +1218c: 81 c7 e0 08 ret *
+ +12190: 81 e8 00 00 restore *
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin32.rd b/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin32.rd
new file mode 100644
index 0000000..69a0317
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin32.rd
@@ -0,0 +1,126 @@
+#source: tlssunbin32.s
+#as: --32
+#ld: -shared -melf32_sparc tmpdir/libtlslib32.so tmpdir/tlssunbinpic32.o
+#readelf: -WSsrl
+#target: sparc*-*-*
+
+.*
+
+Section Headers:
+ +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 00 +0 +0 +0
+ +\[[ 0-9]+\] .interp +.*
+ +\[[ 0-9]+\] .hash +.*
+ +\[[ 0-9]+\] .dynsym +.*
+ +\[[ 0-9]+\] .dynstr +.*
+ +\[[ 0-9]+\] .rela.dyn +.*
+ +\[[ 0-9]+\] .text +PROGBITS +0+11000 0+1000 0+1194 00 +AX +0 +0 4096
+ +\[[ 0-9]+\] .tdata +PROGBITS +0+22194 0+2194 0+1060 00 WAT +0 +0 +4
+ +\[[ 0-9]+\] .tbss +NOBITS +0+231f4 0+31f4 0+40 00 WAT +0 +0 +4
+ +\[[ 0-9]+\] .dynamic +DYNAMIC +0+231f4 0+31f4 0+80 08 +WA +4 +0 +4
+ +\[[ 0-9]+\] .got +PROGBITS +0+23274 0+3274 0+14 04 +WA +0 +0 +4
+ +\[[ 0-9]+\] .shstrtab +.*
+ +\[[ 0-9]+\] .symtab +.*
+ +\[[ 0-9]+\] .strtab +.*
+#...
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x12000
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz MemSiz +Flg Align
+ +PHDR +0x0+34 0x0+10034 0x0+10034 0x0+c0 0x0+c0 R E 0x4
+ +INTERP +0x0+f4 0x0+100f4 0x0+100f4 0x0+11 0x0+11 R +0x1
+.*Requesting program interpreter.*
+ +LOAD .* R E 0x10000
+ +LOAD .* RW +0x10000
+ +DYNAMIC .* RW +0x4
+ +TLS .* 0x0+1060 0x0+10a0 R +0x4
+#...
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 4 entries:
+ Offset +Info +Type +Sym. Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_SPARC_TLS_TPOFF32 +00000000 +sG5 \+ 0
+[0-9a-f ]+R_SPARC_TLS_TPOFF32 +00000000 +sG2 \+ 0
+[0-9a-f ]+R_SPARC_TLS_TPOFF32 +00000000 +sG6 \+ 0
+[0-9a-f ]+R_SPARC_TLS_TPOFF32 +00000000 +sG1 \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND *
+.* TLS +GLOBAL +DEFAULT +UND sG5
+.* TLS +GLOBAL +DEFAULT +UND sG2
+.* FUNC +GLOBAL +DEFAULT +UND __tls_get_addr
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* TLS +GLOBAL +DEFAULT +UND sG6
+.* TLS +GLOBAL +DEFAULT +UND sG1
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND *
+.* SECTION +LOCAL +DEFAULT +1 *
+.* SECTION +LOCAL +DEFAULT +2 *
+.* SECTION +LOCAL +DEFAULT +3 *
+.* SECTION +LOCAL +DEFAULT +4 *
+.* SECTION +LOCAL +DEFAULT +5 *
+.* SECTION +LOCAL +DEFAULT +6 *
+.* SECTION +LOCAL +DEFAULT +7 *
+.* SECTION +LOCAL +DEFAULT +8 *
+.* SECTION +LOCAL +DEFAULT +9 *
+.* SECTION +LOCAL +DEFAULT +10 *
+.* TLS +LOCAL +DEFAULT +7 sl1
+.* TLS +LOCAL +DEFAULT +7 sl2
+.* TLS +LOCAL +DEFAULT +7 sl3
+.* TLS +LOCAL +DEFAULT +7 sl4
+.* TLS +LOCAL +DEFAULT +7 sl5
+.* TLS +LOCAL +DEFAULT +7 sl6
+.* TLS +LOCAL +DEFAULT +7 sl7
+.* TLS +LOCAL +DEFAULT +7 sl8
+.* TLS +LOCAL +DEFAULT +8 bl1
+.* TLS +LOCAL +DEFAULT +8 bl2
+.* TLS +LOCAL +DEFAULT +8 bl3
+.* TLS +LOCAL +DEFAULT +8 bl4
+.* TLS +LOCAL +DEFAULT +8 bl5
+.* TLS +LOCAL +DEFAULT +8 bl6
+.* TLS +LOCAL +DEFAULT +8 bl7
+.* TLS +LOCAL +DEFAULT +8 bl8
+.* OBJECT +LOCAL +DEFAULT +9 _DYNAMIC
+.* OBJECT +LOCAL +DEFAULT +10 _PROCEDURE_LINKAGE_TABLE_
+.* OBJECT +LOCAL +DEFAULT +10 _GLOBAL_OFFSET_TABLE_
+.* TLS +GLOBAL +DEFAULT +7 sg8
+.* TLS +GLOBAL +DEFAULT +8 bg8
+.* TLS +GLOBAL +DEFAULT +8 bg6
+.* TLS +GLOBAL +DEFAULT +UND sG5
+.* TLS +GLOBAL +DEFAULT +8 bg3
+.* TLS +GLOBAL +DEFAULT +7 sg3
+.* TLS +GLOBAL +HIDDEN +7 sh3
+.* TLS +GLOBAL +DEFAULT +UND sG2
+.* TLS +GLOBAL +DEFAULT +7 sg4
+.* TLS +GLOBAL +DEFAULT +7 sg5
+.* TLS +GLOBAL +DEFAULT +8 bg5
+.* FUNC +GLOBAL +DEFAULT +UND __tls_get_addr
+.* TLS +GLOBAL +HIDDEN +7 sh7
+.* TLS +GLOBAL +HIDDEN +7 sh8
+.* TLS +GLOBAL +DEFAULT +7 sg1
+.* FUNC +GLOBAL +DEFAULT +6 _start
+.* TLS +GLOBAL +HIDDEN +7 sh4
+.* TLS +GLOBAL +DEFAULT +8 bg7
+.* TLS +GLOBAL +HIDDEN +7 sh5
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* TLS +GLOBAL +DEFAULT +UND sG6
+.* FUNC +GLOBAL +DEFAULT +6 fn2
+.* TLS +GLOBAL +DEFAULT +7 sg2
+.* TLS +GLOBAL +DEFAULT +UND sG1
+.* TLS +GLOBAL +HIDDEN +7 sh1
+.* TLS +GLOBAL +DEFAULT +7 sg6
+.* TLS +GLOBAL +DEFAULT +7 sg7
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+.* TLS +GLOBAL +HIDDEN +7 sh2
+.* TLS +GLOBAL +HIDDEN +7 sh6
+.* TLS +GLOBAL +DEFAULT +8 bg2
+.* TLS +GLOBAL +DEFAULT +8 bg1
+.* TLS +GLOBAL +DEFAULT +8 bg4
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin32.s b/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin32.s
new file mode 100644
index 0000000..21716f3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin32.s
@@ -0,0 +1,114 @@
+ .section ".tbss"
+ .align 4
+ .globl bg1, bg2, bg3, bg4, bg5, bg6, bg7, bg8
+bg1: .word 0
+bg2: .word 0
+bg3: .word 0
+bg4: .word 0
+bg5: .word 0
+bg6: .word 0
+bg7: .word 0
+bg8: .word 0
+bl1: .word 0
+bl2: .word 0
+bl3: .word 0
+bl4: .word 0
+bl5: .word 0
+bl6: .word 0
+bl7: .word 0
+bl8: .word 0
+ .text
+ .globl _start
+ .type _start,#function
+ .proc 04
+_start:
+ save %sp, -104, %sp
+ .hidden _GLOBAL_OFFSET_TABLE_
+ sethi %hi(_GLOBAL_OFFSET_TABLE_), %l4
+ or %l4, %lo(_GLOBAL_OFFSET_TABLE_), %l4
+ nop;nop;nop;nop
+
+ /* IE against global var */
+ sethi %tie_hi22(sG6), %o3
+ add %o3, %tie_lo10(sG6), %o3
+ ld [%l4 + %o3], %o2, %tie_ld(sG6)
+ add %g7, %o2, %o4, %tie_add(sG6)
+ nop;nop;nop;nop
+
+ /* IE -> LE against global var defined in exec */
+ sethi %tie_hi22(bg6), %o3
+ add %o3, %tie_lo10(bg6), %o5
+ ld [%l4 + %o5], %o2, %tie_ld(bg6)
+ add %g7, %o2, %o4, %tie_add(bg6)
+ nop;nop;nop;nop
+
+ /* IE -> LE against local var */
+ sethi %tie_hi22(bl6), %o3
+ add %o3, %tie_lo10(bl6), %o5
+ ld [%l4 + %o5], %l2, %tie_ld(bl6)
+ add %g7, %l2, %l2, %tie_add(bl6)
+ nop;nop;nop;nop
+
+ /* direct %g7 access IE -> LE against local var */
+ sethi %tie_hi22(bl8), %o3
+ add %o3, %tie_lo10(bl8), %o5
+ ld [%l4 + %o5], %l2, %tie_ld(bl8)
+ ld [%g7 + %l2], %l2, %tie_add(bl8)
+ nop;nop;nop;nop
+
+ /* IE -> LE against hidden but not local var */
+ sethi %tie_hi22(sh6), %o3
+ add %o3, %tie_lo10(sh6), %o5
+ ld [%l4 + %o5], %l2, %tie_ld(sh6)
+ add %g7, %l2, %l2, %tie_add(sh6)
+ nop;nop;nop;nop
+
+ /* direct %g7 access IE -> LE against hidden but not local var */
+ sethi %tie_hi22(bl8), %o3
+ add %o3, %tie_lo10(bl8), %o5
+ ld [%l4 + %o5], %l2, %tie_ld(bl8)
+ stb %l1, [%g7 + %l2], %tie_add(bl8)
+ nop;nop;nop;nop
+
+ /* LE, global var defined in exec */
+ sethi %tle_hix22(sg2), %l1
+ nop
+ xor %l1, %tle_lox10(sg2), %l2
+ nop
+ add %g7, %l2, %l3
+ nop;nop;nop;nop
+
+ /* LE, local var */
+ sethi %tle_hix22(bl2+2), %o0
+ xor %o0, %tle_lox10(bl2+2), %o0
+ add %g7, %o0, %o0
+ nop;nop;nop;nop
+
+ /* LE, hidden var defined in exec */
+ sethi %tle_hix22(sh2+1), %l1
+ xor %l1, %tle_lox10(sh2+1), %o5
+ add %g7, %o5, %o1
+ nop;nop;nop;nop
+
+ /* Direct %g7 access */
+
+ /* LE, global var defined in exec */
+ sethi %tle_hix22(sg3), %l1
+ xor %l1, %tle_lox10(sg3), %o5
+ ld [%g7 + %o5], %o1
+ nop;nop;nop;nop
+
+ /* LE, local var */
+ sethi %tle_hix22(bl3 + 3), %o0
+ xor %o0, %tle_lox10(bl3 + 3), %o0
+ stb %o1, [%g7 + %o0]
+ nop;nop;nop;nop
+
+ /* LE, hidden var defined in exec */
+ sethi %tle_hix22(sh3 + 3), %o2
+ xor %o2, %tle_lox10(sh3 + 3), %o4
+ ldstub [%g7 + %o4], %o5
+ nop;nop;nop;nop
+
+ ret
+ restore
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin32.sd b/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin32.sd
new file mode 100644
index 0000000..7db88c9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin32.sd
@@ -0,0 +1,11 @@
+#source: tlssunbin32.s
+#as: --32
+#ld: -shared -melf32_sparc tmpdir/libtlslib32.so tmpdir/tlssunbinbin32.o
+#objdump: -sj.got
+#target: sparc*-*-*
+
+.*: +file format elf32-sparc
+
+Contents of section .got:
+ 23274 000231f4 0+ 0+ 0+ .*
+ 23284 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin32.td b/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin32.td
new file mode 100644
index 0000000..f5974e7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin32.td
@@ -0,0 +1,19 @@
+#source: tlssunbin32.s
+#as: --32
+#ld: -shared -melf32_sparc tmpdir/libtlslib32.so tmpdir/tlssunbinpic32.o
+#objdump: -sj.tdata
+#target: sparc*-*-*
+
+.*: +file format elf32-sparc
+
+Contents of section .tdata:
+ 22194 00000011 00000000 00000000 00000000 .*
+ 221a4 00000000 00000000 00000000 00000000 .*
+#...
+ 23184 00000000 00000000 00000000 00000000 .*
+ 23194 00000000 00000012 00000013 00000014 .*
+ 231a4 00000015 00000016 00000017 00000018 .*
+ 231b4 00000041 00000042 00000043 00000044 .*
+ 231c4 00000045 00000046 00000047 00000048 .*
+ 231d4 00000101 00000102 00000103 00000104 .*
+ 231e4 00000105 00000106 00000107 00000108 .*
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin64.dd b/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin64.dd
new file mode 100644
index 0000000..0585ae6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin64.dd
@@ -0,0 +1,277 @@
+#source: tlssunbin64.s
+#as: --64
+#ld: -shared -melf64_sparc tmpdir/libtlslib64.so tmpdir/tlssunbinpic64.o
+#objdump: -drj.text
+#target: sparc*-*-*
+
+.*: +file format elf64-sparc
+
+Disassembly of section .text:
+
+0+101000 <fn2-0x8>:
+ +101000: 81 c3 e0 08 retl *
+ +101004: ae 03 c0 17 add %o7, %l7, %l7
+
+0+101008 <fn2>:
+ +101008: 9d e3 bf 60 save %sp, -160, %sp
+ +10100c: 2f 00 04 04 sethi %hi\(0x101000\), %l7
+ +101010: 7f ff ff fc call 101000 <.*>
+ +101014: ae 05 e2 f8 add %l7, 0x2f8, %l7 ! 1012f8 <.*>
+ +101018: 01 00 00 00 nop *
+ +10101c: 01 00 00 00 nop *
+ +101020: 01 00 00 00 nop *
+ +101024: 01 00 00 00 nop *
+ +101028: 23 00 00 00 sethi %hi\(0\), %l1
+ +10102c: 01 00 00 00 nop *
+ +101030: a4 04 60 20 add %l1, 0x20, %l2
+ +101034: 01 00 00 00 nop *
+ +101038: d0 5d c0 12 ldx \[ %l7 \+ %l2 \], %o0
+ +10103c: 01 00 00 00 nop *
+ +101040: 90 01 c0 08 add %g7, %o0, %o0
+ +101044: 01 00 00 00 nop *
+ +101048: 01 00 00 00 nop *
+ +10104c: 01 00 00 00 nop *
+ +101050: 01 00 00 00 nop *
+ +101054: 01 00 00 00 nop *
+ +101058: 11 00 00 00 sethi %hi\(0\), %o0
+ +10105c: 92 02 20 10 add %o0, 0x10, %o1 ! 10 <.*>
+ +101060: d0 5d c0 09 ldx \[ %l7 \+ %o1 \], %o0
+ +101064: 90 01 c0 08 add %g7, %o0, %o0
+ +101068: 01 00 00 00 nop *
+ +10106c: 01 00 00 00 nop *
+ +101070: 01 00 00 00 nop *
+ +101074: 01 00 00 00 nop *
+ +101078: 01 00 00 00 nop *
+ +10107c: 21 00 00 00 sethi %hi\(0\), %l0
+ +101080: aa 1c 3f 60 xor %l0, -160, %l5
+ +101084: 90 01 c0 15 add %g7, %l5, %o0
+ +101088: 01 00 00 00 nop *
+ +10108c: 01 00 00 00 nop *
+ +101090: 01 00 00 00 nop *
+ +101094: 01 00 00 00 nop *
+ +101098: 01 00 00 00 nop *
+ +10109c: 01 00 00 00 nop *
+ +1010a0: 11 00 00 00 sethi %hi\(0\), %o0
+ +1010a4: 92 1a 3f 80 xor %o0, -128, %o1
+ +1010a8: 90 01 c0 09 add %g7, %o1, %o0
+ +1010ac: 01 00 00 00 nop *
+ +1010b0: 01 00 00 00 nop *
+ +1010b4: 01 00 00 00 nop *
+ +1010b8: 01 00 00 00 nop *
+ +1010bc: 01 00 00 00 nop *
+ +1010c0: 01 00 00 00 nop *
+ +1010c4: 11 00 00 00 sethi %hi\(0\), %o0
+ +1010c8: 92 1a 3f a0 xor %o0, -96, %o1
+ +1010cc: 90 01 c0 09 add %g7, %o1, %o0
+ +1010d0: 01 00 00 00 nop *
+ +1010d4: 01 00 00 00 nop *
+ +1010d8: 01 00 00 00 nop *
+ +1010dc: 01 00 00 00 nop *
+ +1010e0: 01 00 00 00 nop *
+ +1010e4: 01 00 00 00 nop *
+ +1010e8: 01 00 00 00 nop *
+ +1010ec: 01 00 00 00 nop *
+ +1010f0: 01 00 00 00 nop *
+ +1010f4: 01 00 00 00 nop *
+ +1010f8: 01 00 00 00 nop *
+ +1010fc: 01 00 00 00 nop *
+ +101100: 90 10 00 00 mov %g0, %o0
+ +101104: 01 00 00 00 nop *
+ +101108: 27 00 00 00 sethi %hi\(0\), %l3
+ +10110c: 01 00 00 00 nop *
+ +101110: a8 1c ff 80 xor %l3, -128, %l4
+ +101114: 01 00 00 00 nop *
+ +101118: aa 01 c0 14 add %g7, %l4, %l5
+ +10111c: 01 00 00 00 nop *
+ +101120: 25 00 00 00 sethi %hi\(0\), %l2
+ +101124: 01 00 00 00 nop *
+ +101128: a6 1c bf 86 xor %l2, -122, %l3
+ +10112c: 01 00 00 00 nop *
+ +101130: ec 11 c0 13 lduh \[ %g7 \+ %l3 \], %l6
+ +101134: 01 00 00 00 nop *
+ +101138: 01 00 00 00 nop *
+ +10113c: 01 00 00 00 nop *
+ +101140: 01 00 00 00 nop *
+ +101144: 01 00 00 00 nop *
+ +101148: 27 00 00 00 sethi %hi\(0\), %l3
+ +10114c: 01 00 00 00 nop *
+ +101150: 25 00 00 00 sethi %hi\(0\), %l2
+ +101154: 01 00 00 00 nop *
+ +101158: a8 1c ff a0 xor %l3, -96, %l4
+ +10115c: 90 10 00 00 mov %g0, %o0
+ +101160: a6 1c bf a5 xor %l2, -91, %l3
+ +101164: aa 01 c0 14 add %g7, %l4, %l5
+ +101168: ec 09 c0 13 ldub \[ %g7 \+ %l3 \], %l6
+ +10116c: 01 00 00 00 nop *
+ +101170: 01 00 00 00 nop *
+ +101174: 01 00 00 00 nop *
+ +101178: 01 00 00 00 nop *
+ +10117c: 23 00 00 00 sethi %hi\(0\), %l1
+ +101180: 01 00 00 00 nop *
+ +101184: a4 04 60 10 add %l1, 0x10, %l2
+ +101188: 01 00 00 00 nop *
+ +10118c: e4 5d c0 12 ldx \[ %l7 \+ %l2 \], %l2
+ +101190: 01 00 00 00 nop *
+ +101194: a4 01 c0 12 add %g7, %l2, %l2
+ +101198: 01 00 00 00 nop *
+ +10119c: 01 00 00 00 nop *
+ +1011a0: 01 00 00 00 nop *
+ +1011a4: 01 00 00 00 nop *
+ +1011a8: 17 00 00 00 sethi %hi\(0\), %o3
+ +1011ac: 96 1a ff 60 xor %o3, -160, %o3
+ +1011b0: 94 10 00 0b mov %o3, %o2
+ +1011b4: 98 01 c0 0a add %g7, %o2, %o4
+ +1011b8: 01 00 00 00 nop *
+ +1011bc: 01 00 00 00 nop *
+ +1011c0: 01 00 00 00 nop *
+ +1011c4: 01 00 00 00 nop *
+ +1011c8: 29 00 00 00 sethi %hi\(0\), %l4
+ +1011cc: a2 1d 3f 80 xor %l4, -128, %l1
+ +1011d0: a6 10 00 11 mov %l1, %l3
+ +1011d4: a6 01 c0 13 add %g7, %l3, %l3
+ +1011d8: 01 00 00 00 nop *
+ +1011dc: 01 00 00 00 nop *
+ +1011e0: 01 00 00 00 nop *
+ +1011e4: 01 00 00 00 nop *
+ +1011e8: 13 00 00 00 sethi %hi\(0\), %o1
+ +1011ec: 96 1a 7f a0 xor %o1, -96, %o3
+ +1011f0: 90 10 00 0b mov %o3, %o0
+ +1011f4: 96 01 c0 08 add %g7, %o0, %o3
+ +1011f8: 01 00 00 00 nop *
+ +1011fc: 01 00 00 00 nop *
+ +101200: 01 00 00 00 nop *
+ +101204: 01 00 00 00 nop *
+ +101208: 17 00 00 00 sethi %hi\(0\), %o3
+ +10120c: 96 02 e0 08 add %o3, 8, %o3 ! 8 <.*>
+ +101210: d4 5d c0 0b ldx \[ %l7 \+ %o3 \], %o2
+ +101214: d8 59 c0 0a ldx \[ %g7 \+ %o2 \], %o4
+ +101218: 01 00 00 00 nop *
+ +10121c: 01 00 00 00 nop *
+ +101220: 01 00 00 00 nop *
+ +101224: 01 00 00 00 nop *
+ +101228: 17 00 00 00 sethi %hi\(0\), %o3
+ +10122c: 96 1a ff 90 xor %o3, -112, %o3
+ +101230: 94 10 00 0b mov %o3, %o2
+ +101234: d8 29 c0 0a stb %o4, \[ %g7 \+ %o2 \]
+ +101238: 01 00 00 00 nop *
+ +10123c: 01 00 00 00 nop *
+ +101240: 01 00 00 00 nop *
+ +101244: 01 00 00 00 nop *
+ +101248: 1b 00 00 00 sethi %hi\(0\), %o5
+ +10124c: 96 1b 7f b0 xor %o5, -80, %o3
+ +101250: 94 10 00 0b mov %o3, %o2
+ +101254: d8 49 c0 0a ldsb \[ %g7 \+ %o2 \], %o4
+ +101258: 01 00 00 00 nop *
+ +10125c: 01 00 00 00 nop *
+ +101260: 01 00 00 00 nop *
+ +101264: 01 00 00 00 nop *
+ +101268: 81 cf e0 08 rett %i7 \+ 8
+ +10126c: 01 00 00 00 nop *
+#...
+
+0+102000 <_start>:
+ +102000: 9d e3 bf 60 save %sp, -160, %sp
+ +102004: 23 00 00 00 sethi %hi\(0\), %l1
+ +102008: 25 00 08 08 sethi %hi\(0x202000\), %l2
+ +10200c: a2 14 60 00 mov %l1, %l1
+ +102010: a4 14 a3 08 or %l2, 0x308, %l2
+ +102014: a3 2c 70 20 sllx %l1, 0x20, %l1
+ +102018: a8 04 40 12 add %l1, %l2, %l4
+ +10201c: 01 00 00 00 nop *
+ +102020: 01 00 00 00 nop *
+ +102024: 01 00 00 00 nop *
+ +102028: 01 00 00 00 nop *
+ +10202c: 17 00 00 00 sethi %hi\(0\), %o3
+ +102030: 96 02 e0 18 add %o3, 0x18, %o3 ! 18 <.*>
+ +102034: d4 5d 00 0b ldx \[ %l4 \+ %o3 \], %o2
+ +102038: 98 01 c0 0a add %g7, %o2, %o4
+ +10203c: 01 00 00 00 nop *
+ +102040: 01 00 00 00 nop *
+ +102044: 01 00 00 00 nop *
+ +102048: 01 00 00 00 nop *
+ +10204c: 17 00 00 00 sethi %hi\(0\), %o3
+ +102050: 9a 1a ff d4 xor %o3, -44, %o5
+ +102054: 94 10 00 0d mov %o5, %o2
+ +102058: 98 01 c0 0a add %g7, %o2, %o4
+ +10205c: 01 00 00 00 nop *
+ +102060: 01 00 00 00 nop *
+ +102064: 01 00 00 00 nop *
+ +102068: 01 00 00 00 nop *
+ +10206c: 17 00 00 00 sethi %hi\(0\), %o3
+ +102070: 9a 1a ff f4 xor %o3, -12, %o5
+ +102074: a4 10 00 0d mov %o5, %l2
+ +102078: a4 01 c0 12 add %g7, %l2, %l2
+ +10207c: 01 00 00 00 nop *
+ +102080: 01 00 00 00 nop *
+ +102084: 01 00 00 00 nop *
+ +102088: 01 00 00 00 nop *
+ +10208c: 17 00 00 00 sethi %hi\(0\), %o3
+ +102090: 9a 1a ff fc xor %o3, -4, %o5
+ +102094: a4 10 00 0d mov %o5, %l2
+ +102098: e4 41 c0 12 ldsw \[ %g7 \+ %l2 \], %l2
+ +10209c: 01 00 00 00 nop *
+ +1020a0: 01 00 00 00 nop *
+ +1020a4: 01 00 00 00 nop *
+ +1020a8: 01 00 00 00 nop *
+ +1020ac: 17 00 00 00 sethi %hi\(0\), %o3
+ +1020b0: 9a 1a ff b4 xor %o3, -76, %o5
+ +1020b4: a4 10 00 0d mov %o5, %l2
+ +1020b8: a4 01 c0 12 add %g7, %l2, %l2
+ +1020bc: 01 00 00 00 nop *
+ +1020c0: 01 00 00 00 nop *
+ +1020c4: 01 00 00 00 nop *
+ +1020c8: 01 00 00 00 nop *
+ +1020cc: 17 00 00 00 sethi %hi\(0\), %o3
+ +1020d0: 9a 1a ff fc xor %o3, -4, %o5
+ +1020d4: a4 10 00 0d mov %o5, %l2
+ +1020d8: e2 29 c0 12 stb %l1, \[ %g7 \+ %l2 \]
+ +1020dc: 01 00 00 00 nop *
+ +1020e0: 01 00 00 00 nop *
+ +1020e4: 01 00 00 00 nop *
+ +1020e8: 01 00 00 00 nop *
+ +1020ec: 23 00 00 00 sethi %hi\(0\), %l1
+ +1020f0: 01 00 00 00 nop *
+ +1020f4: a4 1c 7f 64 xor %l1, -156, %l2
+ +1020f8: 01 00 00 00 nop *
+ +1020fc: a6 01 c0 12 add %g7, %l2, %l3
+ +102100: 01 00 00 00 nop *
+ +102104: 01 00 00 00 nop *
+ +102108: 01 00 00 00 nop *
+ +10210c: 01 00 00 00 nop *
+ +102110: 11 00 00 00 sethi %hi\(0\), %o0
+ +102114: 90 1a 3f e6 xor %o0, -26, %o0
+ +102118: 90 01 c0 08 add %g7, %o0, %o0
+ +10211c: 01 00 00 00 nop *
+ +102120: 01 00 00 00 nop *
+ +102124: 01 00 00 00 nop *
+ +102128: 01 00 00 00 nop *
+ +10212c: 23 00 00 00 sethi %hi\(0\), %l1
+ +102130: 9a 1c 7f a5 xor %l1, -91, %o5
+ +102134: 92 01 c0 0d add %g7, %o5, %o1
+ +102138: 01 00 00 00 nop *
+ +10213c: 01 00 00 00 nop *
+ +102140: 01 00 00 00 nop *
+ +102144: 01 00 00 00 nop *
+ +102148: 23 00 00 00 sethi %hi\(0\), %l1
+ +10214c: 9a 1c 7f 68 xor %l1, -152, %o5
+ +102150: d2 59 c0 0d ldx \[ %g7 \+ %o5 \], %o1
+ +102154: 01 00 00 00 nop *
+ +102158: 01 00 00 00 nop *
+ +10215c: 01 00 00 00 nop *
+ +102160: 01 00 00 00 nop *
+ +102164: 11 00 00 00 sethi %hi\(0\), %o0
+ +102168: 90 1a 3f eb xor %o0, -21, %o0
+ +10216c: d2 29 c0 08 stb %o1, \[ %g7 \+ %o0 \]
+ +102170: 01 00 00 00 nop *
+ +102174: 01 00 00 00 nop *
+ +102178: 01 00 00 00 nop *
+ +10217c: 01 00 00 00 nop *
+ +102180: 15 00 00 00 sethi %hi\(0\), %o2
+ +102184: 98 1a bf ab xor %o2, -85, %o4
+ +102188: da 69 c0 0c ldstub \[ %g7 \+ %o4 \], %o5
+ +10218c: 01 00 00 00 nop *
+ +102190: 01 00 00 00 nop *
+ +102194: 01 00 00 00 nop *
+ +102198: 01 00 00 00 nop *
+ +10219c: 81 c7 e0 08 ret
+ +1021a0: 81 e8 00 00 restore
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin64.rd b/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin64.rd
new file mode 100644
index 0000000..483a9cf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin64.rd
@@ -0,0 +1,126 @@
+#source: tlssunbin64.s
+#as: --64
+#ld: -shared -melf64_sparc tmpdir/libtlslib64.so tmpdir/tlssunbinpic64.o
+#readelf: -WSsrl
+#target: sparc*-*-*
+
+.*
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 00 +0 +0 +0
+ +\[[ 0-9]+\] .interp +.*
+ +\[[ 0-9]+\] .hash +.*
+ +\[[ 0-9]+\] .dynsym +.*
+ +\[[ 0-9]+\] .dynstr +.*
+ +\[[ 0-9]+\] .rela.dyn +.*
+ +\[[ 0-9]+\] .text +PROGBITS +0+101000 0+1000 0+11a4 00 +AX +0 +0 4096
+ +\[[ 0-9]+\] .tdata +PROGBITS +0+2021a4 0+21a4 0+0060 00 WAT +0 +0 +4
+ +\[[ 0-9]+\] .tbss +NOBITS +0+202204 0+2204 0+40 00 WAT +0 +0 +4
+ +\[[ 0-9]+\] .dynamic +DYNAMIC +0+202208 0+2208 0+100 10 +WA +4 +0 +8
+ +\[[ 0-9]+\] .got +PROGBITS +0+202308 0+2308 0+28 08 +WA +0 +0 +8
+ +\[[ 0-9]+\] .shstrtab +.*
+ +\[[ 0-9]+\] .symtab +.*
+ +\[[ 0-9]+\] .strtab +.*
+#...
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x102000
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +PHDR +0x0+40 0x0+100040 0x0+100040 0x0+150 0x0+150 R E 0x8
+ +INTERP +0x0+190 0x0+100190 0x0+100190 0x0+19 0x0+19 R +0x1
+.*Requesting program interpreter.*
+ +LOAD .* R E 0x100000
+ +LOAD .* RW +0x100000
+ +DYNAMIC .* RW +0x8
+ +TLS .* 0x0+60 0x0+a0 R +0x4
+#...
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 4 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_SPARC_TLS_TPOFF64 +0+ +sG5 \+ 0
+[0-9a-f ]+R_SPARC_TLS_TPOFF64 +0+ +sG2 \+ 0
+[0-9a-f ]+R_SPARC_TLS_TPOFF64 +0+ +sG6 \+ 0
+[0-9a-f ]+R_SPARC_TLS_TPOFF64 +0+ +sG1 \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND *
+.* TLS +GLOBAL +DEFAULT +UND sG5
+.* TLS +GLOBAL +DEFAULT +UND sG2
+.* FUNC +GLOBAL +DEFAULT +UND __tls_get_addr
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* TLS +GLOBAL +DEFAULT +UND sG6
+.* TLS +GLOBAL +DEFAULT +UND sG1
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size Type +Bind +Vis +Ndx Name
+.* NOTYPE +LOCAL +DEFAULT +UND *
+.* SECTION +LOCAL +DEFAULT +1 *
+.* SECTION +LOCAL +DEFAULT +2 *
+.* SECTION +LOCAL +DEFAULT +3 *
+.* SECTION +LOCAL +DEFAULT +4 *
+.* SECTION +LOCAL +DEFAULT +5 *
+.* SECTION +LOCAL +DEFAULT +6 *
+.* SECTION +LOCAL +DEFAULT +7 *
+.* SECTION +LOCAL +DEFAULT +8 *
+.* SECTION +LOCAL +DEFAULT +9 *
+.* SECTION +LOCAL +DEFAULT +10 *
+.* TLS +LOCAL +DEFAULT +7 sl1
+.* TLS +LOCAL +DEFAULT +7 sl2
+.* TLS +LOCAL +DEFAULT +7 sl3
+.* TLS +LOCAL +DEFAULT +7 sl4
+.* TLS +LOCAL +DEFAULT +7 sl5
+.* TLS +LOCAL +DEFAULT +7 sl6
+.* TLS +LOCAL +DEFAULT +7 sl7
+.* TLS +LOCAL +DEFAULT +7 sl8
+.* TLS +LOCAL +DEFAULT +8 bl1
+.* TLS +LOCAL +DEFAULT +8 bl2
+.* TLS +LOCAL +DEFAULT +8 bl3
+.* TLS +LOCAL +DEFAULT +8 bl4
+.* TLS +LOCAL +DEFAULT +8 bl5
+.* TLS +LOCAL +DEFAULT +8 bl6
+.* TLS +LOCAL +DEFAULT +8 bl7
+.* TLS +LOCAL +DEFAULT +8 bl8
+.* OBJECT +LOCAL +DEFAULT +9 _DYNAMIC
+.* OBJECT +LOCAL +DEFAULT +10 _PROCEDURE_LINKAGE_TABLE_
+.* OBJECT +LOCAL +DEFAULT +10 _GLOBAL_OFFSET_TABLE_
+.* TLS +GLOBAL +DEFAULT +7 sg8
+.* TLS +GLOBAL +DEFAULT +8 bg8
+.* TLS +GLOBAL +DEFAULT +8 bg6
+.* TLS +GLOBAL +DEFAULT +UND sG5
+.* TLS +GLOBAL +DEFAULT +8 bg3
+.* TLS +GLOBAL +DEFAULT +7 sg3
+.* TLS +GLOBAL +HIDDEN +7 sh3
+.* TLS +GLOBAL +DEFAULT +UND sG2
+.* TLS +GLOBAL +DEFAULT +7 sg4
+.* TLS +GLOBAL +DEFAULT +7 sg5
+.* TLS +GLOBAL +DEFAULT +8 bg5
+.* FUNC +GLOBAL +DEFAULT +UND __tls_get_addr
+.* TLS +GLOBAL +HIDDEN +7 sh7
+.* TLS +GLOBAL +HIDDEN +7 sh8
+.* TLS +GLOBAL +DEFAULT +7 sg1
+.* FUNC +GLOBAL +DEFAULT +6 _start
+.* TLS +GLOBAL +HIDDEN +7 sh4
+.* TLS +GLOBAL +DEFAULT +8 bg7
+.* TLS +GLOBAL +HIDDEN +7 sh5
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* TLS +GLOBAL +DEFAULT +UND sG6
+.* FUNC +GLOBAL +DEFAULT +6 fn2
+.* TLS +GLOBAL +DEFAULT +7 sg2
+.* TLS +GLOBAL +DEFAULT +UND sG1
+.* TLS +GLOBAL +HIDDEN +7 sh1
+.* TLS +GLOBAL +DEFAULT +7 sg6
+.* TLS +GLOBAL +DEFAULT +7 sg7
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+.* TLS +GLOBAL +HIDDEN +7 sh2
+.* TLS +GLOBAL +HIDDEN +7 sh6
+.* TLS +GLOBAL +DEFAULT +8 bg2
+.* TLS +GLOBAL +DEFAULT +8 bg1
+.* TLS +GLOBAL +DEFAULT +8 bg4
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin64.s b/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin64.s
new file mode 100644
index 0000000..bb62610
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin64.s
@@ -0,0 +1,118 @@
+ .section ".tbss"
+ .align 4
+ .globl bg1, bg2, bg3, bg4, bg5, bg6, bg7, bg8
+bg1: .word 0
+bg2: .word 0
+bg3: .word 0
+bg4: .word 0
+bg5: .word 0
+bg6: .word 0
+bg7: .word 0
+bg8: .word 0
+bl1: .word 0
+bl2: .word 0
+bl3: .word 0
+bl4: .word 0
+bl5: .word 0
+bl6: .word 0
+bl7: .word 0
+bl8: .word 0
+ .text
+ .globl _start
+ .type _start,#function
+ .proc 04
+_start:
+ save %sp, -160, %sp
+ .hidden _GLOBAL_OFFSET_TABLE_
+ sethi %hh(_GLOBAL_OFFSET_TABLE_), %l1
+ sethi %lm(_GLOBAL_OFFSET_TABLE_), %l2
+ or %l1, %hm(_GLOBAL_OFFSET_TABLE_), %l1
+ or %l2, %lo(_GLOBAL_OFFSET_TABLE_), %l2
+ sllx %l1, 32, %l1
+ add %l1, %l2, %l4
+ nop;nop;nop;nop
+
+ /* IE against global var */
+ sethi %tie_hi22(sG6), %o3
+ add %o3, %tie_lo10(sG6), %o3
+ ldx [%l4 + %o3], %o2, %tie_ldx(sG6)
+ add %g7, %o2, %o4, %tie_add(sG6)
+ nop;nop;nop;nop
+
+ /* IE -> LE against global var defined in exec */
+ sethi %tie_hi22(bg6), %o3
+ add %o3, %tie_lo10(bg6), %o5
+ ldx [%l4 + %o5], %o2, %tie_ldx(bg6)
+ add %g7, %o2, %o4, %tie_add(bg6)
+ nop;nop;nop;nop
+
+ /* IE -> LE against local var */
+ sethi %tie_hi22(bl6), %o3
+ add %o3, %tie_lo10(bl6), %o5
+ ldx [%l4 + %o5], %l2, %tie_ldx(bl6)
+ add %g7, %l2, %l2, %tie_add(bl6)
+ nop;nop;nop;nop
+
+ /* direct %g7 access IE -> LE against local var */
+ sethi %tie_hi22(bl8), %o3
+ add %o3, %tie_lo10(bl8), %o5
+ ldx [%l4 + %o5], %l2, %tie_ldx(bl8)
+ ldsw [%g7 + %l2], %l2, %tie_add(bl8)
+ nop;nop;nop;nop
+
+ /* IE -> LE against hidden but not local var */
+ sethi %tie_hi22(sh6), %o3
+ add %o3, %tie_lo10(sh6), %o5
+ ldx [%l4 + %o5], %l2, %tie_ldx(sh6)
+ add %g7, %l2, %l2, %tie_add(sh6)
+ nop;nop;nop;nop
+
+ /* direct %g7 access IE -> LE against hidden but not local var */
+ sethi %tie_hi22(bl8), %o3
+ add %o3, %tie_lo10(bl8), %o5
+ ldx [%l4 + %o5], %l2, %tie_ldx(bl8)
+ stb %l1, [%g7 + %l2], %tie_add(bl8)
+ nop;nop;nop;nop
+
+ /* LE, global var defined in exec */
+ sethi %tle_hix22(sg2), %l1
+ nop
+ xor %l1, %tle_lox10(sg2), %l2
+ nop
+ add %g7, %l2, %l3
+ nop;nop;nop;nop
+
+ /* LE, local var */
+ sethi %tle_hix22(bl2+2), %o0
+ xor %o0, %tle_lox10(bl2+2), %o0
+ add %g7, %o0, %o0
+ nop;nop;nop;nop
+
+ /* LE, hidden var defined in exec */
+ sethi %tle_hix22(sh2+1), %l1
+ xor %l1, %tle_lox10(sh2+1), %o5
+ add %g7, %o5, %o1
+ nop;nop;nop;nop
+
+ /* Direct %g7 access */
+
+ /* LE, global var defined in exec */
+ sethi %tle_hix22(sg3), %l1
+ xor %l1, %tle_lox10(sg3), %o5
+ ldx [%g7 + %o5], %o1
+ nop;nop;nop;nop
+
+ /* LE, local var */
+ sethi %tle_hix22(bl3 + 3), %o0
+ xor %o0, %tle_lox10(bl3 + 3), %o0
+ stb %o1, [%g7 + %o0]
+ nop;nop;nop;nop
+
+ /* LE, hidden var defined in exec */
+ sethi %tle_hix22(sh3 + 3), %o2
+ xor %o2, %tle_lox10(sh3 + 3), %o4
+ ldstub [%g7 + %o4], %o5
+ nop;nop;nop;nop
+
+ ret
+ restore
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin64.sd b/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin64.sd
new file mode 100644
index 0000000..73a87e0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin64.sd
@@ -0,0 +1,12 @@
+#source: tlssunbin64.s
+#as: --64
+#ld: -shared -melf64_sparc tmpdir/libtlslib64.so tmpdir/tlssunbinpic64.o
+#objdump: -sj.got
+#target: sparc*-*-*
+
+.*: +file format elf64-sparc
+
+Contents of section .got:
+ 202308 0+ 0+202208 0+ 0+ .*
+ 202318 0+ 0+ 0+ 0+ .*
+ 202328 0+ 0+ +.*
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin64.td b/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin64.td
new file mode 100644
index 0000000..f7eef83
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunbin64.td
@@ -0,0 +1,15 @@
+#source: tlssunbin64.s
+#as: --64
+#ld: -shared -melf64_sparc tmpdir/libtlslib64.so tmpdir/tlssunbinpic64.o
+#objdump: -sj.tdata
+#target: sparc*-*-*
+
+.*: +file format elf64-sparc
+
+Contents of section .tdata:
+ 2021a4 00000011 00000012 00000013 00000014 .*
+ 2021b4 00000015 00000016 00000017 00000018 .*
+ 2021c4 00000041 00000042 00000043 00000044 .*
+ 2021d4 00000045 00000046 00000047 00000048 .*
+ 2021e4 00000101 00000102 00000103 00000104 .*
+ 2021f4 00000105 00000106 00000107 00000108 .*
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunbinpic32.s b/binutils-2.21/ld/testsuite/ld-sparc/tlssunbinpic32.s
new file mode 100644
index 0000000..60fb585
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunbinpic32.s
@@ -0,0 +1,183 @@
+ .data
+ .align 4096
+ .section ".tdata", #alloc, #write, #tls
+ .align 4
+ .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
+ .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+ .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+sg1: .word 17
+ .skip 4096
+sg2: .word 18
+sg3: .word 19
+sg4: .word 20
+sg5: .word 21
+sg6: .word 22
+sg7: .word 23
+sg8: .word 24
+sl1: .word 65
+sl2: .word 66
+sl3: .word 67
+sl4: .word 68
+sl5: .word 69
+sl6: .word 70
+sl7: .word 71
+sl8: .word 72
+sh1: .word 257
+sh2: .word 258
+sh3: .word 259
+sh4: .word 260
+sh5: .word 261
+sh6: .word 262
+sh7: .word 263
+sh8: .word 264
+ .text
+ .align 4096
+.LLGETPC0:
+ retl
+ add %o7, %l7, %l7
+
+ .globl fn2
+ .type fn2,#function
+ .proc 04
+fn2:
+ save %sp, -104, %sp
+ sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %l7
+ call .LLGETPC0
+ add %l7, %lo(_GLOBAL_OFFSET_TABLE_+4), %l7
+ nop;nop;nop;nop
+
+ /* GD -> IE because variable is not defined in executable */
+ sethi %tgd_hi22(sG1), %l1
+ nop
+ add %l1, %tgd_lo10(sG1), %l2
+ nop
+ add %l7, %l2, %o0, %tgd_add(sG1)
+ nop
+ call __tls_get_addr, %tgd_call(sG1)
+ nop
+ nop;nop;nop;nop
+
+ /* GD -> IE because variable is not defined in executable where
+ the variable is referenced through IE too */
+ sethi %tgd_hi22(sG2), %o0
+ add %o0, %tgd_lo10(sG2), %o1
+ add %l7, %o1, %o0, %tgd_add(sG2)
+ call __tls_get_addr, %tgd_call(sG2)
+ nop
+ nop;nop;nop;nop
+
+ /* GD -> LE with global variable defined in executable */
+ sethi %tgd_hi22(sg1), %l0
+ add %l0, %tgd_lo10(sg1), %l5
+ add %l7, %l5, %o0, %tgd_add(sg1)
+ call __tls_get_addr, %tgd_call(sg1)
+ nop
+ nop;nop;nop;nop
+
+ /* GD -> LE with local variable defined in executable */
+ sethi %tgd_hi22(sl1), %o0
+ add %o0, %tgd_lo10(sl1), %o1
+ add %l7, %o1, %o0, %tgd_add(sl1)
+ call __tls_get_addr, %tgd_call(sl1)
+ nop
+ nop;nop;nop;nop
+
+ /* GD -> LE with hidden variable defined in executable */
+ sethi %tgd_hi22(sh1), %o0
+ add %o0, %tgd_lo10(sh1), %o1
+ add %l7, %o1, %o0, %tgd_add(sh1)
+ call __tls_get_addr, %tgd_call(sh1)
+ nop
+ nop;nop;nop;nop
+
+ /* LD -> LE */
+ sethi %tldm_hi22(sl1), %l1
+ nop
+ add %l1, %tldm_lo10(sl1), %l2
+ nop
+ add %l7, %l2, %o0, %tldm_add(sl1)
+ nop
+ call __tls_get_addr, %tldm_call(sl1)
+ nop
+ sethi %tldo_hix22(sl1), %l3
+ nop
+ xor %l3, %tldo_lox10(sl1), %l4
+ nop
+ add %o0, %l4, %l5, %tldo_add(sl1)
+ nop
+ sethi %tldo_hix22(sl2 + 2), %l2
+ nop
+ xor %l2, %tldo_lox10(sl2 + 2), %l3
+ nop
+ lduh [%o0 + %l3], %l6, %tldo_add(sl2 + 2)
+ nop;nop;nop;nop
+
+ /* LD -> LE against hidden variables */
+ sethi %tldm_hi22(sh1), %o1
+ sethi %tldo_hix22(sh1), %l3
+ add %o1, %tldm_lo10(sh1), %o2
+ sethi %tldo_hix22(sh2 + 1), %l2
+ add %l7, %o2, %o0, %tldm_add(sh1)
+ xor %l3, %tldo_lox10(sh1), %l4
+ call __tls_get_addr, %tldm_call(sh1)
+ xor %l2, %tldo_lox10(sh2 + 1), %l3
+ add %o0, %l4, %l5, %tldo_add(sh1)
+ ldub [%o0 + %l3], %l6, %tldo_add(sh2 + 1)
+ nop;nop;nop;nop
+
+ /* IE against global var */
+ sethi %tie_hi22(sG2), %l1
+ nop
+ add %l1, %tie_lo10(sG2), %l2
+ nop
+ ld [%l7 + %l2], %l2, %tie_ld(sG2)
+ nop
+ add %g7, %l2, %l2, %tie_add(sG2)
+ nop;nop;nop;nop
+
+ /* IE -> LE against global var defined in exec */
+ sethi %tie_hi22(sg1), %o3
+ add %o3, %tie_lo10(sg1), %o3
+ ld [%l7 + %o3], %o3, %tie_ld(sg1)
+ add %g7, %o3, %o4, %tie_add(sg1)
+ nop;nop;nop;nop
+
+ /* IE -> LE against local var */
+ sethi %tie_hi22(sl1), %l4
+ add %l4, %tie_lo10(sl1), %l1
+ ld [%l7 + %l1], %l3, %tie_ld(sl1)
+ add %g7, %l3, %l3, %tie_add(sl1)
+ nop;nop;nop;nop
+
+ /* IE -> LE against hidden var */
+ sethi %tie_hi22(sh1), %o1
+ add %o1, %tie_lo10(sh1), %o3
+ ld [%l7 + %o3], %o0, %tie_ld(sh1)
+ add %g7, %o0, %o3, %tie_add(sh1)
+ nop;nop;nop;nop
+
+ /* Direct access through %g7 */
+
+ /* IE against global var */
+ sethi %tie_hi22(sG5), %o3
+ add %o3, %tie_lo10(sG5), %o3
+ ld [%l7 + %o3], %o2, %tie_ld(sG5)
+ ld [%g7 + %o2], %o4, %tie_add(sG5)
+ nop;nop;nop;nop
+
+ /* IE->LE against local var */
+ sethi %tie_hi22(sl5), %o3
+ add %o3, %tie_lo10(sl5), %o3
+ ld [%l7 + %o3], %o2, %tie_ld(sl5)
+ stb %o4, [%g7 + %o2], %tie_add(sl5)
+ nop;nop;nop;nop
+
+ /* IE->LE against hidden var */
+ sethi %tie_hi22(sh5), %o5
+ add %o5, %tie_lo10(sh5), %o3
+ ld [%l7 + %o3], %o2, %tie_ld(sh5)
+ ldsb [%g7 + %o2], %o4, %tie_add(sh5)
+ nop;nop;nop;nop
+
+ ret
+ restore
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunbinpic64.s b/binutils-2.21/ld/testsuite/ld-sparc/tlssunbinpic64.s
new file mode 100644
index 0000000..a13d2d3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunbinpic64.s
@@ -0,0 +1,182 @@
+ .data
+ .align 4096
+ .section ".tdata", #alloc, #write, #tls
+ .align 4
+ .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
+ .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+ .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+sg1: .word 17
+sg2: .word 18
+sg3: .word 19
+sg4: .word 20
+sg5: .word 21
+sg6: .word 22
+sg7: .word 23
+sg8: .word 24
+sl1: .word 65
+sl2: .word 66
+sl3: .word 67
+sl4: .word 68
+sl5: .word 69
+sl6: .word 70
+sl7: .word 71
+sl8: .word 72
+sh1: .word 257
+sh2: .word 258
+sh3: .word 259
+sh4: .word 260
+sh5: .word 261
+sh6: .word 262
+sh7: .word 263
+sh8: .word 264
+ .text
+ .align 4096
+.LLGETPC0:
+ retl
+ add %o7, %l7, %l7
+
+ .globl fn2
+ .type fn2,#function
+ .proc 04
+fn2:
+ save %sp, -160, %sp
+ sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %l7
+ call .LLGETPC0
+ add %l7, %lo(_GLOBAL_OFFSET_TABLE_+4), %l7
+ nop;nop;nop;nop
+
+ /* GD -> IE because variable is not defined in executable */
+ sethi %tgd_hi22(sG1), %l1
+ nop
+ add %l1, %tgd_lo10(sG1), %l2
+ nop
+ add %l7, %l2, %o0, %tgd_add(sG1)
+ nop
+ call __tls_get_addr, %tgd_call(sG1)
+ nop
+ nop;nop;nop;nop
+
+ /* GD -> IE because variable is not defined in executable where
+ the variable is referenced through IE too */
+ sethi %tgd_hi22(sG2), %o0
+ add %o0, %tgd_lo10(sG2), %o1
+ add %l7, %o1, %o0, %tgd_add(sG2)
+ call __tls_get_addr, %tgd_call(sG2)
+ nop
+ nop;nop;nop;nop
+
+ /* GD -> LE with global variable defined in executable */
+ sethi %tgd_hi22(sg1), %l0
+ add %l0, %tgd_lo10(sg1), %l5
+ add %l7, %l5, %o0, %tgd_add(sg1)
+ call __tls_get_addr, %tgd_call(sg1)
+ nop
+ nop;nop;nop;nop
+
+ /* GD -> LE with local variable defined in executable */
+ sethi %tgd_hi22(sl1), %o0
+ add %o0, %tgd_lo10(sl1), %o1
+ add %l7, %o1, %o0, %tgd_add(sl1)
+ call __tls_get_addr, %tgd_call(sl1)
+ nop
+ nop;nop;nop;nop
+
+ /* GD -> LE with hidden variable defined in executable */
+ sethi %tgd_hi22(sh1), %o0
+ add %o0, %tgd_lo10(sh1), %o1
+ add %l7, %o1, %o0, %tgd_add(sh1)
+ call __tls_get_addr, %tgd_call(sh1)
+ nop
+ nop;nop;nop;nop
+
+ /* LD -> LE */
+ sethi %tldm_hi22(sl1), %l1
+ nop
+ add %l1, %tldm_lo10(sl1), %l2
+ nop
+ add %l7, %l2, %o0, %tldm_add(sl1)
+ nop
+ call __tls_get_addr, %tldm_call(sl1)
+ nop
+ sethi %tldo_hix22(sl1), %l3
+ nop
+ xor %l3, %tldo_lox10(sl1), %l4
+ nop
+ add %o0, %l4, %l5, %tldo_add(sl1)
+ nop
+ sethi %tldo_hix22(sl2 + 2), %l2
+ nop
+ xor %l2, %tldo_lox10(sl2 + 2), %l3
+ nop
+ lduh [%o0 + %l3], %l6, %tldo_add(sl2 + 2)
+ nop;nop;nop;nop
+
+ /* LD -> LE against hidden variables */
+ sethi %tldm_hi22(sh1), %o1
+ sethi %tldo_hix22(sh1), %l3
+ add %o1, %tldm_lo10(sh1), %o2
+ sethi %tldo_hix22(sh2 + 1), %l2
+ add %l7, %o2, %o0, %tldm_add(sh1)
+ xor %l3, %tldo_lox10(sh1), %l4
+ call __tls_get_addr, %tldm_call(sh1)
+ xor %l2, %tldo_lox10(sh2 + 1), %l3
+ add %o0, %l4, %l5, %tldo_add(sh1)
+ ldub [%o0 + %l3], %l6, %tldo_add(sh2 + 1)
+ nop;nop;nop;nop
+
+ /* IE against global var */
+ sethi %tie_hi22(sG2), %l1
+ nop
+ add %l1, %tie_lo10(sG2), %l2
+ nop
+ ldx [%l7 + %l2], %l2, %tie_ldx(sG2)
+ nop
+ add %g7, %l2, %l2, %tie_add(sG2)
+ nop;nop;nop;nop
+
+ /* IE -> LE against global var defined in exec */
+ sethi %tie_hi22(sg1), %o3
+ add %o3, %tie_lo10(sg1), %o3
+ ldx [%l7 + %o3], %o2, %tie_ldx(sg1)
+ add %g7, %o2, %o4, %tie_add(sg1)
+ nop;nop;nop;nop
+
+ /* IE -> LE against local var */
+ sethi %tie_hi22(sl1), %l4
+ add %l4, %tie_lo10(sl1), %l1
+ ldx [%l7 + %l1], %l3, %tie_ldx(sl1)
+ add %g7, %l3, %l3, %tie_add(sl1)
+ nop;nop;nop;nop
+
+ /* IE -> LE against hidden var */
+ sethi %tie_hi22(sh1), %o1
+ add %o1, %tie_lo10(sh1), %o3
+ ldx [%l7 + %o3], %o0, %tie_ldx(sh1)
+ add %g7, %o0, %o3, %tie_add(sh1)
+ nop;nop;nop;nop
+
+ /* Direct access through %g7 */
+
+ /* IE against global var */
+ sethi %tie_hi22(sG5), %o3
+ add %o3, %tie_lo10(sG5), %o3
+ ldx [%l7 + %o3], %o2, %tie_ldx(sG5)
+ ldx [%g7 + %o2], %o4, %tie_add(sG5)
+ nop;nop;nop;nop
+
+ /* IE->LE against local var */
+ sethi %tie_hi22(sl5), %o3
+ add %o3, %tie_lo10(sl5), %o3
+ ldx [%l7 + %o3], %o2, %tie_ldx(sl5)
+ stb %o4, [%g7 + %o2], %tie_add(sl5)
+ nop;nop;nop;nop
+
+ /* IE->LE against hidden var */
+ sethi %tie_hi22(sh5), %o5
+ add %o5, %tie_lo10(sh5), %o3
+ ldx [%l7 + %o3], %o2, %tie_ldx(sh5)
+ ldsb [%g7 + %o2], %o4, %tie_add(sh5)
+ nop;nop;nop;nop
+
+ return %i7 + 8
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic32.dd b/binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic32.dd
new file mode 100644
index 0000000..4f47c7a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic32.dd
@@ -0,0 +1,84 @@
+#source: tlssunnopic32.s
+#source: tlsnopic.s
+#as: --32
+#ld: -shared -melf32_sparc
+#objdump: -drj.text
+#target: sparc*-*-*
+
+.*: +file format elf32-sparc
+
+Disassembly of section .text:
+
+00001000 <fn3>:
+ +1000: 9d e3 bf 98 save %sp, -104, %sp
+ +1004: 23 00 00 00 sethi %hi\(0\), %l1
+ +1008: a2 14 60 00 mov %l1, %l1 ! 0 <.*>
+ +100c: 01 00 00 00 nop *
+ +1010: 01 00 00 00 nop *
+ +1014: 01 00 00 00 nop *
+ +1018: 01 00 00 00 nop *
+ +101c: 17 00 00 00 sethi %hi\(0\), %o3
+ +1020: 96 02 e0 0c add %o3, 0xc, %o3 ! c <.*>
+ +1024: d4 04 40 0b ld \[ %l1 \+ %o3 \], %o2
+ +1028: 98 01 c0 0a add %g7, %o2, %o4
+ +102c: 01 00 00 00 nop *
+ +1030: 01 00 00 00 nop *
+ +1034: 01 00 00 00 nop *
+ +1038: 01 00 00 00 nop *
+ +103c: 11 00 00 00 sethi %hi\(0\), %o0
+ +1040: 90 02 20 10 add %o0, 0x10, %o0 ! 10 <.*>
+ +1044: d0 04 40 08 ld \[ %l1 \+ %o0 \], %o0
+ +1048: d0 01 c0 08 ld \[ %g7 \+ %o0 \], %o0
+ +104c: 01 00 00 00 nop *
+ +1050: 01 00 00 00 nop *
+ +1054: 01 00 00 00 nop *
+ +1058: 01 00 00 00 nop *
+ +105c: 11 00 00 00 sethi %hi\(0\), %o0
+ +1060: 90 02 20 14 add %o0, 0x14, %o0 ! 14 <.*>
+ +1064: d0 04 40 08 ld \[ %l1 \+ %o0 \], %o0
+ +1068: 90 01 c0 08 add %g7, %o0, %o0
+ +106c: 01 00 00 00 nop *
+ +1070: 01 00 00 00 nop *
+ +1074: 01 00 00 00 nop *
+ +1078: 01 00 00 00 nop *
+ +107c: 1b 00 00 00 sethi %hi\(0\), %o5
+ +1080: 92 03 60 18 add %o5, 0x18, %o1 ! 18 <.*>
+ +1084: d4 04 40 09 ld \[ %l1 \+ %o1 \], %o2
+ +1088: d6 29 c0 0a stb %o3, \[ %g7 \+ %o2 \]
+ +108c: 01 00 00 00 nop *
+ +1090: 01 00 00 00 nop *
+ +1094: 01 00 00 00 nop *
+ +1098: 01 00 00 00 nop *
+ +109c: 11 00 00 00 sethi %hi\(0\), %o0
+ +10a0: 90 02 20 04 add %o0, 4, %o0 ! 4 <.*>
+ +10a4: d0 04 40 08 ld \[ %l1 \+ %o0 \], %o0
+ +10a8: 90 01 c0 08 add %g7, %o0, %o0
+ +10ac: 01 00 00 00 nop *
+ +10b0: 01 00 00 00 nop *
+ +10b4: 01 00 00 00 nop *
+ +10b8: 01 00 00 00 nop *
+ +10bc: 1b 00 00 00 sethi %hi\(0\), %o5
+ +10c0: 92 03 60 08 add %o5, 8, %o1 ! 8 <.*>
+ +10c4: d4 04 40 09 ld \[ %l1 \+ %o1 \], %o2
+ +10c8: d6 29 c0 0a stb %o3, \[ %g7 \+ %o2 \]
+ +10cc: 01 00 00 00 nop *
+ +10d0: 01 00 00 00 nop *
+ +10d4: 01 00 00 00 nop *
+ +10d8: 01 00 00 00 nop *
+ +10dc: 15 00 00 00 sethi %hi\(0\), %o2
+ +10e0: 98 1a a0 00 xor %o2, 0, %o4
+ +10e4: 90 01 c0 0c add %g7, %o4, %o0
+ +10e8: 01 00 00 00 nop *
+ +10ec: 01 00 00 00 nop *
+ +10f0: 01 00 00 00 nop *
+ +10f4: 01 00 00 00 nop *
+ +10f8: 15 00 00 00 sethi %hi\(0\), %o2
+ +10fc: 94 1a a0 00 xor %o2, 0, %o2
+ +1100: d4 01 c0 0a ld \[ %g7 \+ %o2 \], %o2
+ +1104: 01 00 00 00 nop *
+ +1108: 01 00 00 00 nop *
+ +110c: 01 00 00 00 nop *
+ +1110: 01 00 00 00 nop *
+ +1114: 81 c7 e0 08 ret *
+ +1118: 81 e8 00 00 restore *
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic32.rd b/binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic32.rd
new file mode 100644
index 0000000..a35652b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic32.rd
@@ -0,0 +1,93 @@
+#source: tlssunnopic32.s
+#source: tlsnopic.s
+#as: --32
+#ld: -shared -melf32_sparc
+#readelf: -WSsrl
+#target: sparc*-*-*
+
+.*
+
+Section Headers:
+ +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
+ +\[[ 0-9]+\] .hash +.*
+ +\[[ 0-9]+\] .dynsym +.*
+ +\[[ 0-9]+\] .dynstr +.*
+ +\[[ 0-9]+\] .rela.dyn +.*
+ +\[[ 0-9]+\] .text +PROGBITS +0+1000 0+1000 0+1000 0+ +AX +0 +0 4096
+ +\[[ 0-9]+\] .tbss +NOBITS +0+12000 0+2000 0+24 0+ WAT +0 +0 +4
+ +\[[ 0-9]+\] .dynamic +DYNAMIC +0+12000 0+2000 0+80 08 +WA +3 +0 +4
+ +\[[ 0-9]+\] .got +PROGBITS +0+12080 0+2080 0+1c 04 +WA +0 +0 +4
+ +\[[ 0-9]+\] .shstrtab +.*
+ +\[[ 0-9]+\] .symtab +.*
+ +\[[ 0-9]+\] .strtab +.*
+#...
+Elf file type is DYN \(Shared object file\)
+Entry point 0x1000
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz MemSiz +Flg Align
+ +LOAD .* R E 0x10000
+ +LOAD .* RW +0x10000
+ +DYNAMIC .* RW +0x4
+ +TLS .* 0x0+ 0x0+24 R +0x4
+#...
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 12 entries:
+ Offset +Info +Type +Sym. Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_SPARC_HI22 +0+12080 +\.got \+ 12080
+[0-9a-f ]+R_SPARC_LO10 +0+12080 +\.got \+ 12080
+[0-9a-f ]+R_SPARC_TLS_LE_HIX22 +0+9
+[0-9a-f ]+R_SPARC_TLS_LE_LOX10 +0+9
+[0-9a-f ]+R_SPARC_TLS_LE_HIX22 +0+1c
+[0-9a-f ]+R_SPARC_TLS_LE_LOX10 +0+1c
+[0-9a-f ]+R_SPARC_TLS_TPOFF32 +0+
+[0-9a-f ]+R_SPARC_TLS_TPOFF32 +0+4
+[0-9a-f ]+R_SPARC_TLS_TPOFF32 +0+14
+[0-9a-f ]+R_SPARC_TLS_TPOFF32 +0+18
+[0-9a-f ]+R_SPARC_TLS_TPOFF32 +0+ +sg1 \+ 0
+[0-9a-f ]+R_SPARC_TLS_TPOFF32 +0+ +sg2 \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND *
+.* SECTION +LOCAL +DEFAULT +5 *
+.* SECTION +LOCAL +DEFAULT +6 *
+.* SECTION +LOCAL +DEFAULT +8 *
+.* FUNC +GLOBAL +DEFAULT +5 fn3
+.* TLS +GLOBAL +DEFAULT +UND sg1
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* TLS +GLOBAL +DEFAULT +UND sg2
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND *
+.* SECTION +LOCAL +DEFAULT +1 *
+.* SECTION +LOCAL +DEFAULT +2 *
+.* SECTION +LOCAL +DEFAULT +3 *
+.* SECTION +LOCAL +DEFAULT +4 *
+.* SECTION +LOCAL +DEFAULT +5 *
+.* SECTION +LOCAL +DEFAULT +6 *
+.* SECTION +LOCAL +DEFAULT +7 *
+.* SECTION +LOCAL +DEFAULT +8 *
+.* TLS +LOCAL +DEFAULT +6 bl1
+.* TLS +LOCAL +DEFAULT +6 bl2
+.* TLS +LOCAL +DEFAULT +6 bl3
+.* TLS +LOCAL +DEFAULT +6 bl4
+.* TLS +LOCAL +DEFAULT +6 bl5
+.* OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC
+.* TLS +LOCAL +DEFAULT +6 sh3
+.* OBJECT +LOCAL +DEFAULT +ABS _PROCEDURE_LINKAGE_TABLE_
+.* TLS +LOCAL +DEFAULT +6 sh4
+.* TLS +LOCAL +DEFAULT +6 sh1
+.* OBJECT +LOCAL +DEFAULT +ABS _GLOBAL_OFFSET_TABLE_
+.* TLS +LOCAL +DEFAULT +6 sh2
+.* FUNC +GLOBAL +DEFAULT +5 fn3
+.* TLS +GLOBAL +DEFAULT +UND sg1
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* TLS +GLOBAL +DEFAULT +UND sg2
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic32.s b/binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic32.s
new file mode 100644
index 0000000..6c0ec33
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic32.s
@@ -0,0 +1,77 @@
+ .data
+ .align 4096
+ .section ".tbss"
+ .align 4
+bl1: .word 0
+bl2: .word 0
+bl3: .word 0
+bl4: .word 0
+bl5: .word 0
+ .text
+ .align 4096
+ .globl fn3
+ .type fn3,#function
+ .proc 04
+fn3:
+ save %sp, -104, %sp
+ .hidden _GLOBAL_OFFSET_TABLE_
+ sethi %hi(_GLOBAL_OFFSET_TABLE_), %l1
+ or %l1, %lo(_GLOBAL_OFFSET_TABLE_), %l1
+ nop;nop;nop;nop
+
+ /* IE against global var */
+ sethi %tie_hi22(sg1), %o3
+ add %o3, %tie_lo10(sg1), %o3
+ ld [%l1 + %o3], %o2, %tie_ld(sg1)
+ add %g7, %o2, %o4, %tie_add(sg1)
+ nop;nop;nop;nop
+
+ /* direct %g7 access IE against global var */
+ sethi %tie_hi22(sg2), %o0
+ add %o0, %tie_lo10(sg2), %o0
+ ld [%l1 + %o0], %o0, %tie_ld(sg2)
+ ld [%g7 + %o0], %o0, %tie_add(sg2)
+ nop;nop;nop;nop
+
+ /* IE against hidden var */
+ sethi %tie_hi22(sh1), %o0
+ add %o0, %tie_lo10(sh1), %o0
+ ld [%l1 + %o0], %o0, %tie_ld(sh1)
+ add %g7, %o0, %o0, %tie_add(sh1)
+ nop;nop;nop;nop
+
+ /* direct %g7 access IE against hidden var */
+ sethi %tie_hi22(sh2), %o5
+ add %o5, %tie_lo10(sh2), %o1
+ ld [%l1 + %o1], %o2, %tie_ld(sh2)
+ stb %o3, [%g7 + %o2], %tie_add(sh2)
+ nop;nop;nop;nop
+
+ /* IE against local var */
+ sethi %tie_hi22(bl1), %o0
+ add %o0, %tie_lo10(bl1), %o0
+ ld [%l1 + %o0], %o0, %tie_ld(bl1)
+ add %g7, %o0, %o0, %tie_add(bl1)
+ nop;nop;nop;nop
+
+ /* direct %g7 access IE against local var */
+ sethi %tie_hi22(bl2), %o5
+ add %o5, %tie_lo10(bl2), %o1
+ ld [%l1 + %o1], %o2, %tie_ld(bl2)
+ stb %o3, [%g7 + %o2], %tie_add(bl2)
+ nop;nop;nop;nop
+
+ /* LE, local var */
+ sethi %tle_hix22(bl3+1), %o2
+ xor %o2, %tle_lox10(bl3+1), %o4
+ add %g7, %o4, %o0
+ nop;nop;nop;nop
+
+ /* LE, hidden var, direct %g7 access */
+ sethi %tle_hix22(sh3), %o2
+ xor %o2, %tle_lox10(sh3), %o2
+ ld [%g7 + %o2], %o2
+ nop;nop;nop;nop
+
+ ret
+ restore
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic32.sd b/binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic32.sd
new file mode 100644
index 0000000..0d1beac
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic32.sd
@@ -0,0 +1,12 @@
+#source: tlssunnopic32.s
+#source: tlsnopic.s
+#as: --32
+#ld: -shared -melf32_sparc
+#objdump: -sj.got
+#target: sparc*-*-*
+
+.*: file format elf32-sparc
+
+Contents of section \.got:
+ 12080 0+12000 0+ 0+ 0+ .*
+ 12090 0+ 0+ 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic64.dd b/binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic64.dd
new file mode 100644
index 0000000..af4918c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic64.dd
@@ -0,0 +1,88 @@
+#source: tlssunnopic64.s
+#source: tlsnopic.s
+#as: --64 -Av9
+#ld: -shared -melf64_sparc
+#objdump: -drj.text
+#target: sparc*-*-*
+
+.*: +file format elf64-sparc
+
+Disassembly of section .text:
+
+0+1000 <fn3>:
+ +1000: 9d e3 bf 60 save %sp, -160, %sp
+ +1004: 23 00 00 00 sethi %hi\(0\), %l1
+ +1008: 25 00 00 00 sethi %hi\(0\), %l2
+ +100c: a2 14 60 00 mov %l1, %l1
+ +1010: a4 14 a0 00 mov %l2, %l2
+ +1014: a3 2c 70 20 sllx %l1, 0x20, %l1
+ +1018: a2 04 40 12 add %l1, %l2, %l1
+ +101c: 01 00 00 00 nop *
+ +1020: 01 00 00 00 nop *
+ +1024: 01 00 00 00 nop *
+ +1028: 01 00 00 00 nop *
+ +102c: 17 00 00 00 sethi %hi\(0\), %o3
+ +1030: 96 02 e0 18 add %o3, 0x18, %o3 ! 18 <.*>
+ +1034: d4 5c 40 0b ldx \[ %l1 \+ %o3 \], %o2
+ +1038: 98 01 c0 0a add %g7, %o2, %o4
+ +103c: 01 00 00 00 nop *
+ +1040: 01 00 00 00 nop *
+ +1044: 01 00 00 00 nop *
+ +1048: 01 00 00 00 nop *
+ +104c: 11 00 00 00 sethi %hi\(0\), %o0
+ +1050: 90 02 20 20 add %o0, 0x20, %o0 ! 20 <.*>
+ +1054: d0 5c 40 08 ldx \[ %l1 \+ %o0 \], %o0
+ +1058: d0 01 c0 08 ld \[ %g7 \+ %o0 \], %o0
+ +105c: 01 00 00 00 nop *
+ +1060: 01 00 00 00 nop *
+ +1064: 01 00 00 00 nop *
+ +1068: 01 00 00 00 nop *
+ +106c: 11 00 00 00 sethi %hi\(0\), %o0
+ +1070: 90 02 20 28 add %o0, 0x28, %o0 ! 28 <.*>
+ +1074: d0 5c 40 08 ldx \[ %l1 \+ %o0 \], %o0
+ +1078: 90 01 c0 08 add %g7, %o0, %o0
+ +107c: 01 00 00 00 nop *
+ +1080: 01 00 00 00 nop *
+ +1084: 01 00 00 00 nop *
+ +1088: 01 00 00 00 nop *
+ +108c: 1b 00 00 00 sethi %hi\(0\), %o5
+ +1090: 92 03 60 30 add %o5, 0x30, %o1 ! 30 <.*>
+ +1094: d4 5c 40 09 ldx \[ %l1 \+ %o1 \], %o2
+ +1098: d6 29 c0 0a stb %o3, \[ %g7 \+ %o2 \]
+ +109c: 01 00 00 00 nop *
+ +10a0: 01 00 00 00 nop *
+ +10a4: 01 00 00 00 nop *
+ +10a8: 01 00 00 00 nop *
+ +10ac: 11 00 00 00 sethi %hi\(0\), %o0
+ +10b0: 90 02 20 08 add %o0, 8, %o0 ! 8 <.*>
+ +10b4: d0 5c 40 08 ldx \[ %l1 \+ %o0 \], %o0
+ +10b8: 90 01 c0 08 add %g7, %o0, %o0
+ +10bc: 01 00 00 00 nop *
+ +10c0: 01 00 00 00 nop *
+ +10c4: 01 00 00 00 nop *
+ +10c8: 01 00 00 00 nop *
+ +10cc: 1b 00 00 00 sethi %hi\(0\), %o5
+ +10d0: 92 03 60 10 add %o5, 0x10, %o1 ! 10 <.*>
+ +10d4: d4 5c 40 09 ldx \[ %l1 \+ %o1 \], %o2
+ +10d8: d6 29 c0 0a stb %o3, \[ %g7 \+ %o2 \]
+ +10dc: 01 00 00 00 nop *
+ +10e0: 01 00 00 00 nop *
+ +10e4: 01 00 00 00 nop *
+ +10e8: 01 00 00 00 nop *
+ +10ec: 15 00 00 00 sethi %hi\(0\), %o2
+ +10f0: 98 1a a0 00 xor %o2, 0, %o4
+ +10f4: 90 01 c0 0c add %g7, %o4, %o0
+ +10f8: 01 00 00 00 nop *
+ +10fc: 01 00 00 00 nop *
+ +1100: 01 00 00 00 nop *
+ +1104: 01 00 00 00 nop *
+ +1108: 15 00 00 00 sethi %hi\(0\), %o2
+ +110c: 94 1a a0 00 xor %o2, 0, %o2
+ +1110: d4 01 c0 0a ld \[ %g7 \+ %o2 \], %o2
+ +1114: 01 00 00 00 nop *
+ +1118: 01 00 00 00 nop *
+ +111c: 01 00 00 00 nop *
+ +1120: 01 00 00 00 nop *
+ +1124: 81 cf e0 08 rett %i7 \+ 8
+ +1128: 01 00 00 00 nop *
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic64.rd b/binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic64.rd
new file mode 100644
index 0000000..3ccea67
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic64.rd
@@ -0,0 +1,95 @@
+#source: tlssunnopic64.s
+#source: tlsnopic.s
+#as: --64 -Av9
+#ld: -shared -melf64_sparc
+#readelf: -WSsrl
+#target: sparc*-*-*
+
+.*
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
+ +\[[ 0-9]+\] .hash +.*
+ +\[[ 0-9]+\] .dynsym +.*
+ +\[[ 0-9]+\] .dynstr +.*
+ +\[[ 0-9]+\] .rela.dyn +.*
+ +\[[ 0-9]+\] .text +PROGBITS +0+1000 0+1000 0+1000 0+ +AX +0 +0 4096
+ +\[[ 0-9]+\] .tbss +NOBITS +0+102000 0+2000 0+24 0+ WAT +0 +0 +4
+ +\[[ 0-9]+\] .dynamic +DYNAMIC +0+102000 0+2000 0+100 10 +WA +3 +0 +8
+ +\[[ 0-9]+\] .got +PROGBITS +0+102100 0+2100 0+38 08 +WA +0 +0 +8
+ +\[[ 0-9]+\] .shstrtab +.*
+ +\[[ 0-9]+\] .symtab +.*
+ +\[[ 0-9]+\] .strtab +.*
+#...
+Elf file type is DYN \(Shared object file\)
+Entry point 0x1000
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +LOAD .* R E 0x100000
+ +LOAD .* RW +0x100000
+ +DYNAMIC .* RW +0x8
+ +TLS .* 0x0+ 0x0+24 R +0x4
+#...
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 14 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_SPARC_HH22 +0+102100 +\.got \+ 102100
+[0-9a-f ]+R_SPARC_LM22 +0+102100 +\.got \+ 102100
+[0-9a-f ]+R_SPARC_HM10 +0+102100 +\.got \+ 102100
+[0-9a-f ]+R_SPARC_LO10 +0+102100 +\.got \+ 102100
+[0-9a-f ]+R_SPARC_TLS_LE_HIX22 +0+9
+[0-9a-f ]+R_SPARC_TLS_LE_LOX10 +0+9
+[0-9a-f ]+R_SPARC_TLS_LE_HIX22 +0+1c
+[0-9a-f ]+R_SPARC_TLS_LE_LOX10 +0+1c
+[0-9a-f ]+R_SPARC_TLS_TPOFF64 +0+
+[0-9a-f ]+R_SPARC_TLS_TPOFF64 +0+4
+[0-9a-f ]+R_SPARC_TLS_TPOFF64 +0+14
+[0-9a-f ]+R_SPARC_TLS_TPOFF64 +0+18
+[0-9a-f ]+R_SPARC_TLS_TPOFF64 +0+ +sg1 \+ 0
+[0-9a-f ]+R_SPARC_TLS_TPOFF64 +0+ +sg2 \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND *
+.* SECTION +LOCAL +DEFAULT +5 *
+.* SECTION +LOCAL +DEFAULT +6 *
+.* SECTION +LOCAL +DEFAULT +8 *
+.* FUNC +GLOBAL +DEFAULT +5 fn3
+.* TLS +GLOBAL +DEFAULT +UND sg1
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* TLS +GLOBAL +DEFAULT +UND sg2
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND *
+.* SECTION +LOCAL +DEFAULT +1 *
+.* SECTION +LOCAL +DEFAULT +2 *
+.* SECTION +LOCAL +DEFAULT +3 *
+.* SECTION +LOCAL +DEFAULT +4 *
+.* SECTION +LOCAL +DEFAULT +5 *
+.* SECTION +LOCAL +DEFAULT +6 *
+.* SECTION +LOCAL +DEFAULT +7 *
+.* SECTION +LOCAL +DEFAULT +8 *
+.* TLS +LOCAL +DEFAULT +6 bl1
+.* TLS +LOCAL +DEFAULT +6 bl2
+.* TLS +LOCAL +DEFAULT +6 bl3
+.* TLS +LOCAL +DEFAULT +6 bl4
+.* TLS +LOCAL +DEFAULT +6 bl5
+.* OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC
+.* TLS +LOCAL +DEFAULT +6 sh3
+.* OBJECT +LOCAL +DEFAULT +ABS _PROCEDURE_LINKAGE_TABLE_
+.* TLS +LOCAL +DEFAULT +6 sh4
+.* TLS +LOCAL +DEFAULT +6 sh1
+.* OBJECT +LOCAL +DEFAULT +ABS _GLOBAL_OFFSET_TABLE_
+.* TLS +LOCAL +DEFAULT +6 sh2
+.* FUNC +GLOBAL +DEFAULT +5 fn3
+.* TLS +GLOBAL +DEFAULT +UND sg1
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* TLS +GLOBAL +DEFAULT +UND sg2
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic64.s b/binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic64.s
new file mode 100644
index 0000000..3d0a4d3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic64.s
@@ -0,0 +1,81 @@
+ .data
+ .align 4096
+ .section ".tbss"
+ .align 4
+bl1: .word 0
+bl2: .word 0
+bl3: .word 0
+bl4: .word 0
+bl5: .word 0
+ .text
+ .align 4096
+ .globl fn3
+ .type fn3,#function
+ .proc 04
+fn3:
+ save %sp, -160, %sp
+ .hidden _GLOBAL_OFFSET_TABLE_
+ sethi %hh(_GLOBAL_OFFSET_TABLE_), %l1
+ sethi %lm(_GLOBAL_OFFSET_TABLE_), %l2
+ or %l1, %hm(_GLOBAL_OFFSET_TABLE_), %l1
+ or %l2, %lo(_GLOBAL_OFFSET_TABLE_), %l2
+ sllx %l1, 32, %l1
+ add %l1, %l2, %l1
+ nop;nop;nop;nop
+
+ /* IE against global var */
+ sethi %tie_hi22(sg1), %o3
+ add %o3, %tie_lo10(sg1), %o3
+ ldx [%l1 + %o3], %o2, %tie_ldx(sg1)
+ add %g7, %o2, %o4, %tie_add(sg1)
+ nop;nop;nop;nop
+
+ /* direct %g7 access IE against global var */
+ sethi %tie_hi22(sg2), %o0
+ add %o0, %tie_lo10(sg2), %o0
+ ldx [%l1 + %o0], %o0, %tie_ldx(sg2)
+ lduw [%g7 + %o0], %o0, %tie_add(sg2)
+ nop;nop;nop;nop
+
+ /* IE against hidden var */
+ sethi %tie_hi22(sh1), %o0
+ add %o0, %tie_lo10(sh1), %o0
+ ldx [%l1 + %o0], %o0, %tie_ldx(sh1)
+ add %g7, %o0, %o0, %tie_add(sh1)
+ nop;nop;nop;nop
+
+ /* direct %g7 access IE against hidden var */
+ sethi %tie_hi22(sh2), %o5
+ add %o5, %tie_lo10(sh2), %o1
+ ldx [%l1 + %o1], %o2, %tie_ldx(sh2)
+ stb %o3, [%g7 + %o2], %tie_add(sh2)
+ nop;nop;nop;nop
+
+ /* IE against local var */
+ sethi %tie_hi22(bl1), %o0
+ add %o0, %tie_lo10(bl1), %o0
+ ldx [%l1 + %o0], %o0, %tie_ldx(bl1)
+ add %g7, %o0, %o0, %tie_add(bl1)
+ nop;nop;nop;nop
+
+ /* direct %g7 access IE against local var */
+ sethi %tie_hi22(bl2), %o5
+ add %o5, %tie_lo10(bl2), %o1
+ ldx [%l1 + %o1], %o2, %tie_ldx(bl2)
+ stb %o3, [%g7 + %o2], %tie_add(bl2)
+ nop;nop;nop;nop
+
+ /* LE, local var */
+ sethi %tle_hix22(bl3+1), %o2
+ xor %o2, %tle_lox10(bl3+1), %o4
+ add %g7, %o4, %o0
+ nop;nop;nop;nop
+
+ /* LE, hidden var, direct %g7 access */
+ sethi %tle_hix22(sh3), %o2
+ xor %o2, %tle_lox10(sh3), %o2
+ ld [%g7 + %o2], %o2
+ nop;nop;nop;nop
+
+ return %i7 + 8
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic64.sd b/binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic64.sd
new file mode 100644
index 0000000..45c77e7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunnopic64.sd
@@ -0,0 +1,14 @@
+#source: tlssunnopic64.s
+#source: tlsnopic.s
+#as: --64 -Av9
+#ld: -shared -melf64_sparc
+#objdump: -sj.got
+#target: sparc*-*-*
+
+.*: file format elf64-sparc
+
+Contents of section \.got:
+ 102100 0+ 0+102000 0+ 0+ .*
+ 102110 0+ 0+ 0+ 0+ .*
+ 102120 0+ 0+ 0+ 0+ .*
+ 102130 0+ 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic32.dd b/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic32.dd
new file mode 100644
index 0000000..c34d514
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic32.dd
@@ -0,0 +1,220 @@
+#source: tlssunpic32.s
+#source: tlspic.s
+#as: --32 -K PIC
+#ld: -shared -melf32_sparc
+#objdump: -drj.text
+#target: sparc*-*-*
+
+.*: +file format elf32-sparc
+
+Disassembly of section .text:
+
+00001000 <fn1-0x8>:
+ +1000: 81 c3 e0 08 retl *
+ +1004: ae 03 c0 17 add %o7, %l7, %l7
+
+00001008 <fn1>:
+ +1008: 9d e3 bf 98 save %sp, -104, %sp
+ +100c: 2f 00 00 44 sethi %hi\(0x11000\), %l7
+ +1010: 7f ff ff fc call 1000 <.*>
+ +1014: ae 05 e0 e8 add %l7, 0xe8, %l7 ! 110e8 <.*>
+ +1018: 01 00 00 00 nop *
+ +101c: 01 00 00 00 nop *
+ +1020: 01 00 00 00 nop *
+ +1024: 01 00 00 00 nop *
+ +1028: 23 00 00 00 sethi %hi\(0\), %l1
+ +102c: 01 00 00 00 nop *
+ +1030: a4 04 60 2c add %l1, 0x2c, %l2
+ +1034: 01 00 00 00 nop *
+ +1038: 90 05 c0 12 add %l7, %l2, %o0
+ +103c: 01 00 00 00 nop *
+ +1040: 40 00 44 4d call [0-9a-f]+ <__tls_get_addr@plt>
+ +1044: 01 00 00 00 nop *
+ +1048: 01 00 00 00 nop *
+ +104c: 01 00 00 00 nop *
+ +1050: 01 00 00 00 nop *
+ +1054: 01 00 00 00 nop *
+ +1058: 11 00 00 00 sethi %hi\(0\), %o0
+ +105c: 92 02 20 3c add %o0, 0x3c, %o1 ! 3c <.*>
+ +1060: d0 05 c0 09 ld \[ %l7 \+ %o1 \], %o0
+ +1064: 90 01 c0 08 add %g7, %o0, %o0
+ +1068: 01 00 00 00 nop *
+ +106c: 01 00 00 00 nop *
+ +1070: 01 00 00 00 nop *
+ +1074: 01 00 00 00 nop *
+ +1078: 01 00 00 00 nop *
+ +107c: 19 00 00 00 sethi %hi\(0\), %o4
+ +1080: 98 03 20 04 add %o4, 4, %o4 ! 4 <.*>
+ +1084: 90 05 c0 0c add %l7, %o4, %o0
+ +1088: 40 00 44 3b call [0-9a-f]+ <__tls_get_addr@plt>
+ +108c: 01 00 00 00 nop *
+ +1090: 01 00 00 00 nop *
+ +1094: 01 00 00 00 nop *
+ +1098: 01 00 00 00 nop *
+ +109c: 01 00 00 00 nop *
+ +10a0: 11 00 00 00 sethi %hi\(0\), %o0
+ +10a4: 90 02 20 0c add %o0, 0xc, %o0 ! c <.*>
+ +10a8: d0 05 c0 08 ld \[ %l7 \+ %o0 \], %o0
+ +10ac: 90 01 c0 08 add %g7, %o0, %o0
+ +10b0: 01 00 00 00 nop *
+ +10b4: 01 00 00 00 nop *
+ +10b8: 01 00 00 00 nop *
+ +10bc: 01 00 00 00 nop *
+ +10c0: 01 00 00 00 nop *
+ +10c4: 19 00 00 00 sethi %hi\(0\), %o4
+ +10c8: 98 03 20 40 add %o4, 0x40, %o4 ! 40 <.*>
+ +10cc: 90 05 c0 0c add %l7, %o4, %o0
+ +10d0: 40 00 44 29 call [0-9a-f]+ <__tls_get_addr@plt>
+ +10d4: 01 00 00 00 nop *
+ +10d8: 01 00 00 00 nop *
+ +10dc: 01 00 00 00 nop *
+ +10e0: 01 00 00 00 nop *
+ +10e4: 01 00 00 00 nop *
+ +10e8: 11 00 00 00 sethi %hi\(0\), %o0
+ +10ec: 90 02 20 48 add %o0, 0x48, %o0 ! 48 <.*>
+ +10f0: d0 05 c0 08 ld \[ %l7 \+ %o0 \], %o0
+ +10f4: 90 01 c0 08 add %g7, %o0, %o0
+ +10f8: 01 00 00 00 nop *
+ +10fc: 01 00 00 00 nop *
+ +1100: 01 00 00 00 nop *
+ +1104: 01 00 00 00 nop *
+ +1108: 01 00 00 00 nop *
+ +110c: 19 00 00 00 sethi %hi\(0\), %o4
+ +1110: 98 03 20 1c add %o4, 0x1c, %o4 ! 1c <.*>
+ +1114: 90 05 c0 0c add %l7, %o4, %o0
+ +1118: 40 00 44 17 call [0-9a-f]+ <__tls_get_addr@plt>
+ +111c: 01 00 00 00 nop *
+ +1120: 01 00 00 00 nop *
+ +1124: 01 00 00 00 nop *
+ +1128: 01 00 00 00 nop *
+ +112c: 01 00 00 00 nop *
+ +1130: 11 00 00 00 sethi %hi\(0\), %o0
+ +1134: 90 02 20 24 add %o0, 0x24, %o0 ! 24 <.*>
+ +1138: d0 05 c0 08 ld \[ %l7 \+ %o0 \], %o0
+ +113c: 90 01 c0 08 add %g7, %o0, %o0
+ +1140: 01 00 00 00 nop *
+ +1144: 01 00 00 00 nop *
+ +1148: 01 00 00 00 nop *
+ +114c: 01 00 00 00 nop *
+ +1150: 01 00 00 00 nop *
+ +1154: 23 00 00 00 sethi %hi\(0\), %l1
+ +1158: 01 00 00 00 nop *
+ +115c: a4 04 60 14 add %l1, 0x14, %l2
+ +1160: 01 00 00 00 nop *
+ +1164: 90 05 c0 12 add %l7, %l2, %o0
+ +1168: 01 00 00 00 nop *
+ +116c: 40 00 44 02 call [0-9a-f]+ <__tls_get_addr@plt>
+ +1170: 01 00 00 00 nop *
+ +1174: 27 00 00 00 sethi %hi\(0\), %l3
+ +1178: 01 00 00 00 nop *
+ +117c: a8 1c e0 20 xor %l3, 0x20, %l4
+ +1180: 01 00 00 00 nop *
+ +1184: aa 02 00 14 add %o0, %l4, %l5
+ +1188: 01 00 00 00 nop *
+ +118c: 25 00 00 00 sethi %hi\(0\), %l2
+ +1190: 01 00 00 00 nop *
+ +1194: a6 1c a0 26 xor %l2, 0x26, %l3
+ +1198: 01 00 00 00 nop *
+ +119c: ec 12 00 13 lduh \[ %o0 \+ %l3 \], %l6
+ +11a0: 01 00 00 00 nop *
+ +11a4: 01 00 00 00 nop *
+ +11a8: 01 00 00 00 nop *
+ +11ac: 01 00 00 00 nop *
+ +11b0: 13 00 00 00 sethi %hi\(0\), %o1
+ +11b4: 27 00 00 00 sethi %hi\(0\), %l3
+ +11b8: 94 02 60 14 add %o1, 0x14, %o2
+ +11bc: 25 00 00 00 sethi %hi\(0\), %l2
+ +11c0: 90 05 c0 0a add %l7, %o2, %o0
+ +11c4: a8 1c e0 40 xor %l3, 0x40, %l4
+ +11c8: 40 00 43 eb call [0-9a-f]+ <__tls_get_addr@plt>
+ +11cc: a6 1c a0 45 xor %l2, 0x45, %l3
+ +11d0: aa 02 00 14 add %o0, %l4, %l5
+ +11d4: ec 0a 00 13 ldub \[ %o0 \+ %l3 \], %l6
+ +11d8: 01 00 00 00 nop *
+ +11dc: 01 00 00 00 nop *
+ +11e0: 01 00 00 00 nop *
+ +11e4: 01 00 00 00 nop *
+ +11e8: 13 00 00 00 sethi %hi\(0\), %o1
+ +11ec: 27 00 00 00 sethi %hi\(0\), %l3
+ +11f0: 94 02 60 14 add %o1, 0x14, %o2
+ +11f4: 25 00 00 00 sethi %hi\(0\), %l2
+ +11f8: 90 05 c0 0a add %l7, %o2, %o0
+ +11fc: a8 1c e0 63 xor %l3, 0x63, %l4
+ +1200: 40 00 43 dd call [0-9a-f]+ <__tls_get_addr@plt>
+ +1204: a6 1c a0 64 xor %l2, 0x64, %l3
+ +1208: aa 02 00 14 add %o0, %l4, %l5
+ +120c: ec 02 00 13 ld \[ %o0 \+ %l3 \], %l6
+ +1210: 01 00 00 00 nop *
+ +1214: 01 00 00 00 nop *
+ +1218: 01 00 00 00 nop *
+ +121c: 01 00 00 00 nop *
+ +1220: 23 00 00 00 sethi %hi\(0\), %l1
+ +1224: 01 00 00 00 nop *
+ +1228: a4 04 60 3c add %l1, 0x3c, %l2
+ +122c: 01 00 00 00 nop *
+ +1230: e4 05 c0 12 ld \[ %l7 \+ %l2 \], %l2
+ +1234: 01 00 00 00 nop *
+ +1238: a4 01 c0 12 add %g7, %l2, %l2
+ +123c: 01 00 00 00 nop *
+ +1240: 01 00 00 00 nop *
+ +1244: 01 00 00 00 nop *
+ +1248: 01 00 00 00 nop *
+ +124c: 17 00 00 00 sethi %hi\(0\), %o3
+ +1250: 96 02 e0 0c add %o3, 0xc, %o3 ! c <.*>
+ +1254: d4 05 c0 0b ld \[ %l7 \+ %o3 \], %o2
+ +1258: 98 01 c0 0a add %g7, %o2, %o4
+ +125c: 01 00 00 00 nop *
+ +1260: 01 00 00 00 nop *
+ +1264: 01 00 00 00 nop *
+ +1268: 01 00 00 00 nop *
+ +126c: 23 00 00 00 sethi %hi\(0\), %l1
+ +1270: a4 04 60 48 add %l1, 0x48, %l2 ! 48 <.*>
+ +1274: e4 05 c0 12 ld \[ %l7 \+ %l2 \], %l2
+ +1278: a4 01 c0 12 add %g7, %l2, %l2
+ +127c: 01 00 00 00 nop *
+ +1280: 01 00 00 00 nop *
+ +1284: 01 00 00 00 nop *
+ +1288: 01 00 00 00 nop *
+ +128c: 23 00 00 00 sethi %hi\(0\), %l1
+ +1290: a4 04 60 24 add %l1, 0x24, %l2 ! 24 <.*>
+ +1294: e4 05 c0 12 ld \[ %l7 \+ %l2 \], %l2
+ +1298: a4 01 c0 12 add %g7, %l2, %l2
+ +129c: 01 00 00 00 nop *
+ +12a0: 01 00 00 00 nop *
+ +12a4: 01 00 00 00 nop *
+ +12a8: 01 00 00 00 nop *
+ +12ac: 23 00 00 00 sethi %hi\(0\), %l1
+ +12b0: a4 04 60 28 add %l1, 0x28, %l2 ! 28 <.*>
+ +12b4: e4 05 c0 12 ld \[ %l7 \+ %l2 \], %l2
+ +12b8: e4 01 c0 12 ld \[ %g7 \+ %l2 \], %l2
+ +12bc: 01 00 00 00 nop *
+ +12c0: 01 00 00 00 nop *
+ +12c4: 01 00 00 00 nop *
+ +12c8: 01 00 00 00 nop *
+ +12cc: 17 00 00 00 sethi %hi\(0\), %o3
+ +12d0: 98 02 e0 10 add %o3, 0x10, %o4 ! 10 <.*>
+ +12d4: da 05 c0 0c ld \[ %l7 \+ %o4 \], %o5
+ +12d8: e4 29 c0 0d stb %l2, \[ %g7 \+ %o5 \]
+ +12dc: 01 00 00 00 nop *
+ +12e0: 01 00 00 00 nop *
+ +12e4: 01 00 00 00 nop *
+ +12e8: 01 00 00 00 nop *
+ +12ec: 17 00 00 00 sethi %hi\(0\), %o3
+ +12f0: 98 02 e0 34 add %o3, 0x34, %o4 ! 34 <.*>
+ +12f4: da 05 c0 0c ld \[ %l7 \+ %o4 \], %o5
+ +12f8: e4 11 c0 0d lduh \[ %g7 \+ %o5 \], %l2
+ +12fc: 01 00 00 00 nop *
+ +1300: 01 00 00 00 nop *
+ +1304: 01 00 00 00 nop *
+ +1308: 01 00 00 00 nop *
+ +130c: 17 00 00 00 sethi %hi\(0\), %o3
+ +1310: 98 02 e0 38 add %o3, 0x38, %o4 ! 38 <.*>
+ +1314: da 05 c0 0c ld \[ %l7 \+ %o4 \], %o5
+ +1318: e4 21 c0 0d st %l2, \[ %g7 \+ %o5 \]
+ +131c: 01 00 00 00 nop *
+ +1320: 01 00 00 00 nop *
+ +1324: 01 00 00 00 nop *
+ +1328: 01 00 00 00 nop *
+ +132c: 81 c7 e0 08 ret *
+ +1330: 81 e8 00 00 restore *
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic32.rd b/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic32.rd
new file mode 100644
index 0000000..6ab67e9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic32.rd
@@ -0,0 +1,135 @@
+#source: tlssunpic32.s
+#source: tlspic.s
+#as: --32 -K PIC
+#ld: -shared -melf32_sparc
+#readelf: -WSsrl
+#target: sparc*-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
+ +\[[ 0-9]+\] .hash +.*
+ +\[[ 0-9]+\] .dynsym +.*
+ +\[[ 0-9]+\] .dynstr +.*
+ +\[[ 0-9]+\] .rela.dyn +.*
+ +\[[ 0-9]+\] .rela.plt +.*
+ +\[[ 0-9]+\] .text +PROGBITS +0+1000 0+1000 0+1000 0+ +AX +0 +0 4096
+ +\[[ 0-9]+\] .tdata +PROGBITS +0+12000 0+2000 0+60 0+ WAT +0 +0 +4
+ +\[[ 0-9]+\] .tbss +NOBITS +0+12060 0+2060 0+20 0+ WAT +0 +0 +4
+ +\[[ 0-9]+\] .dynamic +DYNAMIC +0+12060 0+2060 0+98 08 +WA +3 +0 +4
+ +\[[ 0-9]+\] .got +PROGBITS +0+120f8 0+20f8 0+4c 04 +WA +0 +0 +4
+ +\[[ 0-9]+\] .plt +.*
+ +\[[ 0-9]+\] .shstrtab +.*
+ +\[[ 0-9]+\] .symtab +.*
+ +\[[ 0-9]+\] .strtab +.*
+#...
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x1000
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz MemSiz +Flg Align
+ +LOAD +0x0+ 0x0+ 0x0+ 0x0+2000 0x0+2000 R E 0x10000
+ +LOAD +0x0+2000 0x0+12000 0x0+12000 0x0+184 0x0+184 RWE 0x10000
+ +DYNAMIC +0x0+2060 0x0+12060 0x0+12060 0x0+98 0x0+98 RW +0x4
+ +TLS +0x0+2000 0x0+12000 0x0+12000 0x0+60 0x0+80 R +0x4
+#...
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 14 entries:
+ Offset +Info +Type +Sym. Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_SPARC_TLS_DTPMOD32 +0+
+[0-9a-f ]+R_SPARC_TLS_TPOFF32 +0+24
+[0-9a-f ]+R_SPARC_TLS_TPOFF32 +0+30
+[0-9a-f ]+R_SPARC_TLS_DTPMOD32 +0+
+[0-9a-f ]+R_SPARC_TLS_DTPMOD32 +0+
+[0-9a-f ]+R_SPARC_TLS_TPOFF32 +0+64
+[0-9a-f ]+R_SPARC_TLS_TPOFF32 +0+50
+[0-9a-f ]+R_SPARC_TLS_TPOFF32 +0+70
+[0-9a-f ]+R_SPARC_TLS_DTPMOD32 +0+
+[0-9a-f ]+R_SPARC_TLS_TPOFF32 +0+44
+[0-9a-f ]+R_SPARC_TLS_TPOFF32 +0+10 +sg5 \+ 0
+[0-9a-f ]+R_SPARC_TLS_DTPMOD32 +0+ +sg1 \+ 0
+[0-9a-f ]+R_SPARC_TLS_DTPOFF32 +0+ +sg1 \+ 0
+[0-9a-f ]+R_SPARC_TLS_TPOFF32 +0+4 +sg2 \+ 0
+
+Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
+ Offset +Info +Type +Sym. Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_SPARC_JMP_SLOT +0+ +__tls_get_addr \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND *
+.* SECTION +LOCAL +DEFAULT +6 *
+.* SECTION +LOCAL +DEFAULT +7 *
+.* SECTION +LOCAL +DEFAULT +10 *
+.* TLS +GLOBAL +DEFAULT +7 sg8
+.* TLS +GLOBAL +DEFAULT +7 sg3
+.* TLS +GLOBAL +DEFAULT +7 sg4
+.* TLS +GLOBAL +DEFAULT +7 sg5
+.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr
+.* TLS +GLOBAL +DEFAULT +7 sg1
+.* FUNC +GLOBAL +DEFAULT +6 fn1
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* TLS +GLOBAL +DEFAULT +7 sg2
+.* TLS +GLOBAL +DEFAULT +7 sg6
+.* TLS +GLOBAL +DEFAULT +7 sg7
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND *
+.* SECTION +LOCAL +DEFAULT +1 *
+.* SECTION +LOCAL +DEFAULT +2 *
+.* SECTION +LOCAL +DEFAULT +3 *
+.* SECTION +LOCAL +DEFAULT +4 *
+.* SECTION +LOCAL +DEFAULT +5 *
+.* SECTION +LOCAL +DEFAULT +6 *
+.* SECTION +LOCAL +DEFAULT +7 *
+.* SECTION +LOCAL +DEFAULT +8 *
+.* SECTION +LOCAL +DEFAULT +9 *
+.* SECTION +LOCAL +DEFAULT +10 *
+.* SECTION +LOCAL +DEFAULT +11 *
+.* TLS +LOCAL +DEFAULT +7 sl1
+.* TLS +LOCAL +DEFAULT +7 sl2
+.* TLS +LOCAL +DEFAULT +7 sl3
+.* TLS +LOCAL +DEFAULT +7 sl4
+.* TLS +LOCAL +DEFAULT +7 sl5
+.* TLS +LOCAL +DEFAULT +7 sl6
+.* TLS +LOCAL +DEFAULT +7 sl7
+.* TLS +LOCAL +DEFAULT +7 sl8
+.* TLS +LOCAL +DEFAULT +8 sH1
+.* OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC
+.* TLS +LOCAL +DEFAULT +7 sh3
+.* TLS +LOCAL +DEFAULT +8 sH2
+.* TLS +LOCAL +DEFAULT +8 sH7
+.* OBJECT +LOCAL +DEFAULT +ABS _PROCEDURE_LINKAGE_TABLE_
+.* TLS +LOCAL +DEFAULT +7 sh7
+.* TLS +LOCAL +DEFAULT +7 sh8
+.* TLS +LOCAL +DEFAULT +8 sH4
+.* TLS +LOCAL +DEFAULT +7 sh4
+.* TLS +LOCAL +DEFAULT +8 sH3
+.* TLS +LOCAL +DEFAULT +7 sh5
+.* TLS +LOCAL +DEFAULT +8 sH5
+.* TLS +LOCAL +DEFAULT +8 sH6
+.* TLS +LOCAL +DEFAULT +8 sH8
+.* TLS +LOCAL +DEFAULT +7 sh1
+.* OBJECT +LOCAL +DEFAULT +ABS _GLOBAL_OFFSET_TABLE_
+.* TLS +LOCAL +DEFAULT +7 sh2
+.* TLS +LOCAL +DEFAULT +7 sh6
+.* TLS +GLOBAL +DEFAULT +7 sg8
+.* TLS +GLOBAL +DEFAULT +7 sg3
+.* TLS +GLOBAL +DEFAULT +7 sg4
+.* TLS +GLOBAL +DEFAULT +7 sg5
+.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr
+.* TLS +GLOBAL +DEFAULT +7 sg1
+.* FUNC +GLOBAL +DEFAULT +6 fn1
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* TLS +GLOBAL +DEFAULT +7 sg2
+.* TLS +GLOBAL +DEFAULT +7 sg6
+.* TLS +GLOBAL +DEFAULT +7 sg7
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic32.s b/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic32.s
new file mode 100644
index 0000000..9e8a235
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic32.s
@@ -0,0 +1,228 @@
+ .data
+ .align 4096
+ .section ".tdata", #alloc, #write, #tls
+ .align 4
+ .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
+ .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+ .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+sg1: .word 17
+sg2: .word 18
+sg3: .word 19
+sg4: .word 20
+sg5: .word 21
+sg6: .word 22
+sg7: .word 23
+sg8: .word 24
+sl1: .word 65
+sl2: .word 66
+sl3: .word 67
+sl4: .word 68
+sl5: .word 69
+sl6: .word 70
+sl7: .word 71
+sl8: .word 72
+sh1: .word 257
+sh2: .word 258
+sh3: .word 259
+sh4: .word 260
+sh5: .word 261
+sh6: .word 262
+sh7: .word 263
+sh8: .word 264
+
+ .text
+ .align 4096
+.LLGETPC0:
+ retl
+ add %o7, %l7, %l7
+
+ .globl fn1
+ .type fn1,#function
+ .proc 04
+fn1:
+ save %sp, -104, %sp
+ sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %l7
+ call .LLGETPC0
+ add %l7, %lo(_GLOBAL_OFFSET_TABLE_+4), %l7
+ nop;nop;nop;nop
+
+ /* GD */
+ sethi %tgd_hi22(sg1), %l1
+ nop
+ add %l1, %tgd_lo10(sg1), %l2
+ nop
+ add %l7, %l2, %o0, %tgd_add(sg1)
+ nop
+ call __tls_get_addr, %tgd_call(sg1)
+ nop
+ nop;nop;nop;nop
+
+ /* GD -> IE because variable is referenced through IE too */
+ sethi %tgd_hi22(sg2), %o0
+ add %o0, %tgd_lo10(sg2), %o1
+ add %l7, %o1, %o0, %tgd_add(sg2)
+ call __tls_get_addr, %tgd_call(sg2)
+ nop
+ nop;nop;nop;nop
+
+ /* GD against local variable */
+ sethi %tgd_hi22(sl1), %o4
+ add %o4, %tgd_lo10(sl1), %o4
+ add %l7, %o4, %o0, %tgd_add(sl1)
+ call __tls_get_addr, %tgd_call(sl1)
+ nop
+ nop;nop;nop;nop
+
+ /* GD -> IE against local variable referenced through IE too */
+ sethi %tgd_hi22(sl2), %o0
+ add %o0, %tgd_lo10(sl2), %o0
+ add %l7, %o0, %o0, %tgd_add(sl2)
+ call __tls_get_addr, %tgd_call(sl2)
+ nop
+ nop;nop;nop;nop
+
+ /* GD against hidden and local variable */
+ sethi %tgd_hi22(sh1), %o4
+ add %o4, %tgd_lo10(sh1), %o4
+ add %l7, %o4, %o0, %tgd_add(sh1)
+ call __tls_get_addr, %tgd_call(sh1)
+ nop
+ nop;nop;nop;nop
+
+ /* GD -> IE against hidden and local variable referenced through
+ IE too */
+ sethi %tgd_hi22(sh2), %o0
+ add %o0, %tgd_lo10(sh2), %o0
+ add %l7, %o0, %o0, %tgd_add(sh2)
+ call __tls_get_addr, %tgd_call(sh2)
+ nop
+ nop;nop;nop;nop
+
+ /* GD against hidden but not local variable */
+ sethi %tgd_hi22(sH1), %o4
+ add %o4, %tgd_lo10(sH1), %o4
+ add %l7, %o4, %o0, %tgd_add(sH1)
+ call __tls_get_addr, %tgd_call(sH1)
+ nop
+ nop;nop;nop;nop
+
+ /* GD -> IE against hidden but not local variable referenced through
+ IE too */
+ sethi %tgd_hi22(sH2), %o0
+ add %o0, %tgd_lo10(sH2), %o0
+ add %l7, %o0, %o0, %tgd_add(sH2)
+ call __tls_get_addr, %tgd_call(sH2)
+ nop
+ nop;nop;nop;nop
+
+ /* LD */
+ sethi %tldm_hi22(sl1), %l1
+ nop
+ add %l1, %tldm_lo10(sl1), %l2
+ nop
+ add %l7, %l2, %o0, %tldm_add(sl1)
+ nop
+ call __tls_get_addr, %tldm_call(sl1)
+ nop
+ sethi %tldo_hix22(sl1), %l3
+ nop
+ xor %l3, %tldo_lox10(sl1), %l4
+ nop
+ add %o0, %l4, %l5, %tldo_add(sl1)
+ nop
+ sethi %tldo_hix22(sl2 + 2), %l2
+ nop
+ xor %l2, %tldo_lox10(sl2 + 2), %l3
+ nop
+ lduh [%o0 + %l3], %l6, %tldo_add(sl2 + 2)
+ nop;nop;nop;nop
+
+ /* LD against hidden and local variables */
+ sethi %tldm_hi22(sh1), %o1
+ sethi %tldo_hix22(sh1), %l3
+ add %o1, %tldm_lo10(sh1), %o2
+ sethi %tldo_hix22(sh2 + 1), %l2
+ add %l7, %o2, %o0, %tldm_add(sh1)
+ xor %l3, %tldo_lox10(sh1), %l4
+ call __tls_get_addr, %tldm_call(sh1)
+ xor %l2, %tldo_lox10(sh2 + 1), %l3
+ add %o0, %l4, %l5, %tldo_add(sh1)
+ ldub [%o0 + %l3], %l6, %tldo_add(sh2 + 1)
+ nop;nop;nop;nop
+
+ /* LD against hidden but not local variables */
+ sethi %tldm_hi22(sH1), %o1
+ sethi %tldo_hix22(sH1 + 3), %l3
+ add %o1, %tldm_lo10(sH1), %o2
+ sethi %tldo_hix22(sH2), %l2
+ add %l7, %o2, %o0, %tldm_add(sH1)
+ xor %l3, %tldo_lox10(sH1 + 3), %l4
+ call __tls_get_addr, %tldm_call(sH1)
+ xor %l2, %tldo_lox10(sH2), %l3
+ add %o0, %l4, %l5, %tldo_add(sH1 + 3)
+ ld [%o0 + %l3], %l6, %tldo_add(sH2)
+ nop;nop;nop;nop
+
+ /* IE against global var */
+ sethi %tie_hi22(sg2), %l1
+ nop
+ add %l1, %tie_lo10(sg2), %l2
+ nop
+ ld [%l7 + %l2], %l2, %tie_ld(sg2)
+ nop
+ add %g7, %l2, %l2, %tie_add(sg2)
+ nop;nop;nop;nop
+
+ /* IE against local var */
+ sethi %tie_hi22(sl2), %o3
+ add %o3, %tie_lo10(sl2), %o3
+ ld [%l7 + %o3], %o2, %tie_ld(sl2)
+ add %g7, %o2, %o4, %tie_add(sl2)
+ nop;nop;nop;nop
+
+ /* IE against hidden and local var */
+ sethi %tie_hi22(sh2), %l1
+ add %l1, %tie_lo10(sh2), %l2
+ ld [%l7 + %l2], %l2, %tie_ld(sh2)
+ add %g7, %l2, %l2, %tie_add(sh2)
+ nop;nop;nop;nop
+
+ /* IE against hidden but not local var */
+ sethi %tie_hi22(sH2), %l1
+ add %l1, %tie_lo10(sH2), %l2
+ ld [%l7 + %l2], %l2, %tie_ld(sH2)
+ add %g7, %l2, %l2, %tie_add(sH2)
+ nop;nop;nop;nop
+
+ /* Direct access through %g7 */
+
+ /* IE against global var */
+ sethi %tie_hi22(sg5), %l1
+ add %l1, %tie_lo10(sg5), %l2
+ ld [%l7 + %l2], %l2, %tie_ld(sg5)
+ ld [%g7 + %l2], %l2, %tie_add(sg5)
+ nop;nop;nop;nop
+
+ /* IE against local var */
+ sethi %tie_hi22(sl5), %o3
+ add %o3, %tie_lo10(sl5), %o4
+ ld [%l7 + %o4], %o5, %tie_ld(sl5)
+ stb %l2, [%g7 + %o5], %tie_add(sl5)
+ nop;nop;nop;nop
+
+ /* IE against hidden and local var */
+ sethi %tie_hi22(sh5), %o3
+ add %o3, %tie_lo10(sh5), %o4
+ ld [%l7 + %o4], %o5, %tie_ld(sh5)
+ lduh [%g7 + %o5], %l2, %tie_add(sh5)
+ nop;nop;nop;nop
+
+ /* IE against hidden but not local var */
+ sethi %tie_hi22(sH5), %o3
+ add %o3, %tie_lo10(sH5), %o4
+ ld [%l7 + %o4], %o5, %tie_ld(sH5)
+ st %l2, [%g7 + %o5], %tie_add(sH5)
+ nop;nop;nop;nop
+
+ ret
+ restore
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic32.sd b/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic32.sd
new file mode 100644
index 0000000..4aecfd7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic32.sd
@@ -0,0 +1,15 @@
+#source: tlssunpic32.s
+#source: tlspic.s
+#as: --32 -K PIC
+#ld: -shared -melf32_sparc
+#objdump: -sj.got
+#target: sparc*-*-*
+
+.*: +file format elf32-sparc
+
+Contents of section .got:
+ 120f8 00012060 00000000 00000020 00000000 .*
+ 12108 00000000 00000000 00000000 00000000 .*
+ 12118 00000060 00000000 00000000 00000000 .*
+ 12128 00000000 00000000 00000000 00000000 .*
+ 12138 00000000 00000040 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic32.td b/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic32.td
new file mode 100644
index 0000000..eb4e344
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic32.td
@@ -0,0 +1,16 @@
+#source: tlssunpic32.s
+#source: tlspic.s
+#as: --32 -K PIC
+#ld: -shared -melf32_sparc
+#objdump: -sj.tdata
+#target: sparc*-*-*
+
+.*: +file format elf32-sparc
+
+Contents of section .tdata:
+ 12000 00000011 00000012 00000013 00000014 .*
+ 12010 00000015 00000016 00000017 00000018 .*
+ 12020 00000041 00000042 00000043 00000044 .*
+ 12030 00000045 00000046 00000047 00000048 .*
+ 12040 00000101 00000102 00000103 00000104 .*
+ 12050 00000105 00000106 00000107 00000108 .*
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic64.dd b/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic64.dd
new file mode 100644
index 0000000..0b41b68
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic64.dd
@@ -0,0 +1,220 @@
+#source: tlssunpic64.s
+#source: tlspic.s
+#as: --64 -Av9 -K PIC
+#ld: -shared -melf64_sparc
+#objdump: -drj.text
+#target: sparc*-*-*
+
+.*: +file format elf64-sparc
+
+Disassembly of section .text:
+
+0+1000 <fn1-0x8>:
+ +1000: 81 c3 e0 08 retl *
+ +1004: ae 03 c0 17 add %o7, %l7, %l7
+
+0+1008 <fn1>:
+ +1008: 9d e3 bf 60 save %sp, -160, %sp
+ +100c: 2f 00 04 04 sethi %hi\(0x101000\), %l7
+ +1010: 7f ff ff fc call 1000 <.*>
+ +1014: ae 05 e1 80 add %l7, 0x180, %l7 ! 101180 <.*>
+ +1018: 01 00 00 00 nop *
+ +101c: 01 00 00 00 nop *
+ +1020: 01 00 00 00 nop *
+ +1024: 01 00 00 00 nop *
+ +1028: 23 00 00 00 sethi %hi\(0\), %l1
+ +102c: 01 00 00 00 nop *
+ +1030: a4 04 60 58 add %l1, 0x58, %l2
+ +1034: 01 00 00 00 nop *
+ +1038: 90 05 c0 12 add %l7, %l2, %o0
+ +103c: 01 00 00 00 nop *
+ +1040: 40 04 04 d0 call [0-9a-f]+ <__tls_get_addr@plt>
+ +1044: 01 00 00 00 nop *
+ +1048: 01 00 00 00 nop *
+ +104c: 01 00 00 00 nop *
+ +1050: 01 00 00 00 nop *
+ +1054: 01 00 00 00 nop *
+ +1058: 11 00 00 00 sethi %hi\(0\), %o0
+ +105c: 92 02 20 78 add %o0, 0x78, %o1 ! 78 <.*>
+ +1060: d0 5d c0 09 ldx \[ %l7 \+ %o1 \], %o0
+ +1064: 90 01 c0 08 add %g7, %o0, %o0
+ +1068: 01 00 00 00 nop *
+ +106c: 01 00 00 00 nop *
+ +1070: 01 00 00 00 nop *
+ +1074: 01 00 00 00 nop *
+ +1078: 01 00 00 00 nop *
+ +107c: 19 00 00 00 sethi %hi\(0\), %o4
+ +1080: 98 03 20 08 add %o4, 8, %o4 ! 8 <.*>
+ +1084: 90 05 c0 0c add %l7, %o4, %o0
+ +1088: 40 04 04 be call [0-9a-f]+ <__tls_get_addr@plt>
+ +108c: 01 00 00 00 nop *
+ +1090: 01 00 00 00 nop *
+ +1094: 01 00 00 00 nop *
+ +1098: 01 00 00 00 nop *
+ +109c: 01 00 00 00 nop *
+ +10a0: 11 00 00 00 sethi %hi\(0\), %o0
+ +10a4: 90 02 20 18 add %o0, 0x18, %o0 ! 18 <.*>
+ +10a8: d0 5d c0 08 ldx \[ %l7 \+ %o0 \], %o0
+ +10ac: 90 01 c0 08 add %g7, %o0, %o0
+ +10b0: 01 00 00 00 nop *
+ +10b4: 01 00 00 00 nop *
+ +10b8: 01 00 00 00 nop *
+ +10bc: 01 00 00 00 nop *
+ +10c0: 01 00 00 00 nop *
+ +10c4: 19 00 00 00 sethi %hi\(0\), %o4
+ +10c8: 98 03 20 80 add %o4, 0x80, %o4 ! 80 <.*>
+ +10cc: 90 05 c0 0c add %l7, %o4, %o0
+ +10d0: 40 04 04 ac call [0-9a-f]+ <__tls_get_addr@plt>
+ +10d4: 01 00 00 00 nop *
+ +10d8: 01 00 00 00 nop *
+ +10dc: 01 00 00 00 nop *
+ +10e0: 01 00 00 00 nop *
+ +10e4: 01 00 00 00 nop *
+ +10e8: 11 00 00 00 sethi %hi\(0\), %o0
+ +10ec: 90 02 20 90 add %o0, 0x90, %o0 ! 90 <.*>
+ +10f0: d0 5d c0 08 ldx \[ %l7 \+ %o0 \], %o0
+ +10f4: 90 01 c0 08 add %g7, %o0, %o0
+ +10f8: 01 00 00 00 nop *
+ +10fc: 01 00 00 00 nop *
+ +1100: 01 00 00 00 nop *
+ +1104: 01 00 00 00 nop *
+ +1108: 01 00 00 00 nop *
+ +110c: 19 00 00 00 sethi %hi\(0\), %o4
+ +1110: 98 03 20 38 add %o4, 0x38, %o4 ! 38 <.*>
+ +1114: 90 05 c0 0c add %l7, %o4, %o0
+ +1118: 40 04 04 9a call [0-9a-f]+ <__tls_get_addr@plt>
+ +111c: 01 00 00 00 nop *
+ +1120: 01 00 00 00 nop *
+ +1124: 01 00 00 00 nop *
+ +1128: 01 00 00 00 nop *
+ +112c: 01 00 00 00 nop *
+ +1130: 11 00 00 00 sethi %hi\(0\), %o0
+ +1134: 90 02 20 48 add %o0, 0x48, %o0 ! 48 <.*>
+ +1138: d0 5d c0 08 ldx \[ %l7 \+ %o0 \], %o0
+ +113c: 90 01 c0 08 add %g7, %o0, %o0
+ +1140: 01 00 00 00 nop *
+ +1144: 01 00 00 00 nop *
+ +1148: 01 00 00 00 nop *
+ +114c: 01 00 00 00 nop *
+ +1150: 01 00 00 00 nop *
+ +1154: 23 00 00 00 sethi %hi\(0\), %l1
+ +1158: 01 00 00 00 nop *
+ +115c: a4 04 60 28 add %l1, 0x28, %l2
+ +1160: 01 00 00 00 nop *
+ +1164: 90 05 c0 12 add %l7, %l2, %o0
+ +1168: 01 00 00 00 nop *
+ +116c: 40 04 04 85 call [0-9a-f]+ <__tls_get_addr@plt>
+ +1170: 01 00 00 00 nop *
+ +1174: 27 00 00 00 sethi %hi\(0\), %l3
+ +1178: 01 00 00 00 nop *
+ +117c: a8 1c e0 20 xor %l3, 0x20, %l4
+ +1180: 01 00 00 00 nop *
+ +1184: aa 02 00 14 add %o0, %l4, %l5
+ +1188: 01 00 00 00 nop *
+ +118c: 25 00 00 00 sethi %hi\(0\), %l2
+ +1190: 01 00 00 00 nop *
+ +1194: a6 1c a0 26 xor %l2, 0x26, %l3
+ +1198: 01 00 00 00 nop *
+ +119c: ec 12 00 13 lduh \[ %o0 \+ %l3 \], %l6
+ +11a0: 01 00 00 00 nop *
+ +11a4: 01 00 00 00 nop *
+ +11a8: 01 00 00 00 nop *
+ +11ac: 01 00 00 00 nop *
+ +11b0: 13 00 00 00 sethi %hi\(0\), %o1
+ +11b4: 27 00 00 00 sethi %hi\(0\), %l3
+ +11b8: 94 02 60 28 add %o1, 0x28, %o2
+ +11bc: 25 00 00 00 sethi %hi\(0\), %l2
+ +11c0: 90 05 c0 0a add %l7, %o2, %o0
+ +11c4: a8 1c e0 40 xor %l3, 0x40, %l4
+ +11c8: 40 04 04 6e call [0-9a-f]+ <__tls_get_addr@plt>
+ +11cc: a6 1c a0 45 xor %l2, 0x45, %l3
+ +11d0: ea 5a 00 14 ldx \[ %o0 \+ %l4 \], %l5
+ +11d4: ac 02 00 13 add %o0, %l3, %l6
+ +11d8: 01 00 00 00 nop *
+ +11dc: 01 00 00 00 nop *
+ +11e0: 01 00 00 00 nop *
+ +11e4: 01 00 00 00 nop *
+ +11e8: 13 00 00 00 sethi %hi\(0\), %o1
+ +11ec: 27 00 00 00 sethi %hi\(0\), %l3
+ +11f0: 94 02 60 28 add %o1, 0x28, %o2
+ +11f4: 25 00 00 00 sethi %hi\(0\), %l2
+ +11f8: 90 05 c0 0a add %l7, %o2, %o0
+ +11fc: a8 1c e0 63 xor %l3, 0x63, %l4
+ +1200: 40 04 04 60 call [0-9a-f]+ <__tls_get_addr@plt>
+ +1204: a6 1c a0 64 xor %l2, 0x64, %l3
+ +1208: aa 02 00 14 add %o0, %l4, %l5
+ +120c: ec 02 00 13 ld \[ %o0 \+ %l3 \], %l6
+ +1210: 01 00 00 00 nop *
+ +1214: 01 00 00 00 nop *
+ +1218: 01 00 00 00 nop *
+ +121c: 01 00 00 00 nop *
+ +1220: 23 00 00 00 sethi %hi\(0\), %l1
+ +1224: 01 00 00 00 nop *
+ +1228: a4 04 60 78 add %l1, 0x78, %l2
+ +122c: 01 00 00 00 nop *
+ +1230: e4 5d c0 12 ldx \[ %l7 \+ %l2 \], %l2
+ +1234: 01 00 00 00 nop *
+ +1238: a4 01 c0 12 add %g7, %l2, %l2
+ +123c: 01 00 00 00 nop *
+ +1240: 01 00 00 00 nop *
+ +1244: 01 00 00 00 nop *
+ +1248: 01 00 00 00 nop *
+ +124c: 17 00 00 00 sethi %hi\(0\), %o3
+ +1250: 96 02 e0 18 add %o3, 0x18, %o3 ! 18 <.*>
+ +1254: d4 5d c0 0b ldx \[ %l7 \+ %o3 \], %o2
+ +1258: 98 01 c0 0a add %g7, %o2, %o4
+ +125c: 01 00 00 00 nop *
+ +1260: 01 00 00 00 nop *
+ +1264: 01 00 00 00 nop *
+ +1268: 01 00 00 00 nop *
+ +126c: 23 00 00 00 sethi %hi\(0\), %l1
+ +1270: a4 04 60 90 add %l1, 0x90, %l2 ! 90 <.*>
+ +1274: e4 5d c0 12 ldx \[ %l7 \+ %l2 \], %l2
+ +1278: a4 01 c0 12 add %g7, %l2, %l2
+ +127c: 01 00 00 00 nop *
+ +1280: 01 00 00 00 nop *
+ +1284: 01 00 00 00 nop *
+ +1288: 01 00 00 00 nop *
+ +128c: 23 00 00 00 sethi %hi\(0\), %l1
+ +1290: a4 04 60 48 add %l1, 0x48, %l2 ! 48 <.*>
+ +1294: e4 5d c0 12 ldx \[ %l7 \+ %l2 \], %l2
+ +1298: a4 01 c0 12 add %g7, %l2, %l2
+ +129c: 01 00 00 00 nop *
+ +12a0: 01 00 00 00 nop *
+ +12a4: 01 00 00 00 nop *
+ +12a8: 01 00 00 00 nop *
+ +12ac: 23 00 00 00 sethi %hi\(0\), %l1
+ +12b0: a4 04 60 50 add %l1, 0x50, %l2 ! 50 <.*>
+ +12b4: e4 5d c0 12 ldx \[ %l7 \+ %l2 \], %l2
+ +12b8: e4 59 c0 12 ldx \[ %g7 \+ %l2 \], %l2
+ +12bc: 01 00 00 00 nop *
+ +12c0: 01 00 00 00 nop *
+ +12c4: 01 00 00 00 nop *
+ +12c8: 01 00 00 00 nop *
+ +12cc: 17 00 00 00 sethi %hi\(0\), %o3
+ +12d0: 98 02 e0 20 add %o3, 0x20, %o4 ! 20 <.*>
+ +12d4: da 5d c0 0c ldx \[ %l7 \+ %o4 \], %o5
+ +12d8: e4 29 c0 0d stb %l2, \[ %g7 \+ %o5 \]
+ +12dc: 01 00 00 00 nop *
+ +12e0: 01 00 00 00 nop *
+ +12e4: 01 00 00 00 nop *
+ +12e8: 01 00 00 00 nop *
+ +12ec: 17 00 00 00 sethi %hi\(0\), %o3
+ +12f0: 98 02 e0 68 add %o3, 0x68, %o4 ! 68 <.*>
+ +12f4: da 5d c0 0c ldx \[ %l7 \+ %o4 \], %o5
+ +12f8: e4 71 c0 0d stx %l2, \[ %g7 \+ %o5 \]
+ +12fc: 01 00 00 00 nop *
+ +1300: 01 00 00 00 nop *
+ +1304: 01 00 00 00 nop *
+ +1308: 01 00 00 00 nop *
+ +130c: 17 00 00 00 sethi %hi\(0\), %o3
+ +1310: 98 02 e0 70 add %o3, 0x70, %o4 ! 70 <.*>
+ +1314: da 5d c0 0c ldx \[ %l7 \+ %o4 \], %o5
+ +1318: e4 21 c0 0d st %l2, \[ %g7 \+ %o5 \]
+ +131c: 01 00 00 00 nop *
+ +1320: 01 00 00 00 nop *
+ +1324: 01 00 00 00 nop *
+ +1328: 01 00 00 00 nop *
+ +132c: 81 cf e0 08 rett %i7 \+ 8
+ +1330: 01 00 00 00 nop *
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic64.rd b/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic64.rd
new file mode 100644
index 0000000..35a7c79
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic64.rd
@@ -0,0 +1,135 @@
+#source: tlssunpic64.s
+#source: tlspic.s
+#as: --64 -Av9 -K PIC
+#ld: -shared -melf64_sparc
+#readelf: -WSsrl
+#target: sparc*-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
+ +\[[ 0-9]+\] .hash +.*
+ +\[[ 0-9]+\] .dynsym +.*
+ +\[[ 0-9]+\] .dynstr +.*
+ +\[[ 0-9]+\] .rela.dyn +.*
+ +\[[ 0-9]+\] .rela.plt +.*
+ +\[[ 0-9]+\] .text +PROGBITS +0+1000 0+1000 0+1000 0+ +AX +0 +0 4096
+ +\[[ 0-9]+\] .tdata +PROGBITS +0+102000 0+2000 0+60 0+ WAT +0 +0 +4
+ +\[[ 0-9]+\] .tbss +NOBITS +0+102060 0+2060 0+20 0+ WAT +0 +0 +4
+ +\[[ 0-9]+\] .dynamic +DYNAMIC +0+102060 0+2060 0+130 10 +WA +3 +0 +8
+ +\[[ 0-9]+\] .got +PROGBITS +0+102190 0+2190 0+98 08 +WA +0 +0 +8
+ +\[[ 0-9]+\] .plt +.*
+ +\[[ 0-9]+\] .shstrtab +.*
+ +\[[ 0-9]+\] .symtab +.*
+ +\[[ 0-9]+\] .strtab +.*
+#...
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x1000
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +LOAD +0x0+ 0x0+ 0x0+ 0x0+2000 0x0+2000 R E 0x100000
+ +LOAD +0x0+2000 0x0+102000 0x0+102000 0x0+3a0 0x0+3a0 RWE 0x100000
+ +DYNAMIC +0x0+2060 0x0+102060 0x0+102060 0x0+130 0x0+130 RW +0x8
+ +TLS +0x0+2000 0x0+102000 0x0+102000 0x0+60 0x0+80 R +0x4
+#...
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 14 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_SPARC_TLS_DTPMOD64 +0+
+[0-9a-f ]+R_SPARC_TLS_TPOFF64 +0+24
+[0-9a-f ]+R_SPARC_TLS_TPOFF64 +0+30
+[0-9a-f ]+R_SPARC_TLS_DTPMOD64 +0+
+[0-9a-f ]+R_SPARC_TLS_DTPMOD64 +0+
+[0-9a-f ]+R_SPARC_TLS_TPOFF64 +0+64
+[0-9a-f ]+R_SPARC_TLS_TPOFF64 +0+50
+[0-9a-f ]+R_SPARC_TLS_TPOFF64 +0+70
+[0-9a-f ]+R_SPARC_TLS_DTPMOD64 +0+
+[0-9a-f ]+R_SPARC_TLS_TPOFF64 +0+44
+[0-9a-f ]+R_SPARC_TLS_TPOFF64 +0+10 +sg5 \+ 0
+[0-9a-f ]+R_SPARC_TLS_DTPMOD64 +0+ +sg1 \+ 0
+[0-9a-f ]+R_SPARC_TLS_DTPOFF64 +0+ +sg1 \+ 0
+[0-9a-f ]+R_SPARC_TLS_TPOFF64 +0+4 +sg2 \+ 0
+
+Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_SPARC_JMP_SLOT +0+ +__tls_get_addr \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND *
+.* SECTION +LOCAL +DEFAULT +6 *
+.* SECTION +LOCAL +DEFAULT +7 *
+.* SECTION +LOCAL +DEFAULT +10 *
+.* TLS +GLOBAL +DEFAULT +7 sg8
+.* TLS +GLOBAL +DEFAULT +7 sg3
+.* TLS +GLOBAL +DEFAULT +7 sg4
+.* TLS +GLOBAL +DEFAULT +7 sg5
+.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr
+.* TLS +GLOBAL +DEFAULT +7 sg1
+.* FUNC +GLOBAL +DEFAULT +6 fn1
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* TLS +GLOBAL +DEFAULT +7 sg2
+.* TLS +GLOBAL +DEFAULT +7 sg6
+.* TLS +GLOBAL +DEFAULT +7 sg7
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND *
+.* SECTION +LOCAL +DEFAULT +1 *
+.* SECTION +LOCAL +DEFAULT +2 *
+.* SECTION +LOCAL +DEFAULT +3 *
+.* SECTION +LOCAL +DEFAULT +4 *
+.* SECTION +LOCAL +DEFAULT +5 *
+.* SECTION +LOCAL +DEFAULT +6 *
+.* SECTION +LOCAL +DEFAULT +7 *
+.* SECTION +LOCAL +DEFAULT +8 *
+.* SECTION +LOCAL +DEFAULT +9 *
+.* SECTION +LOCAL +DEFAULT +10 *
+.* SECTION +LOCAL +DEFAULT +11 *
+.* TLS +LOCAL +DEFAULT +7 sl1
+.* TLS +LOCAL +DEFAULT +7 sl2
+.* TLS +LOCAL +DEFAULT +7 sl3
+.* TLS +LOCAL +DEFAULT +7 sl4
+.* TLS +LOCAL +DEFAULT +7 sl5
+.* TLS +LOCAL +DEFAULT +7 sl6
+.* TLS +LOCAL +DEFAULT +7 sl7
+.* TLS +LOCAL +DEFAULT +7 sl8
+.* TLS +LOCAL +DEFAULT +8 sH1
+.* OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC
+.* TLS +LOCAL +DEFAULT +7 sh3
+.* TLS +LOCAL +DEFAULT +8 sH2
+.* TLS +LOCAL +DEFAULT +8 sH7
+.* OBJECT +LOCAL +DEFAULT +ABS _PROCEDURE_LINKAGE_TABLE_
+.* TLS +LOCAL +DEFAULT +7 sh7
+.* TLS +LOCAL +DEFAULT +7 sh8
+.* TLS +LOCAL +DEFAULT +8 sH4
+.* TLS +LOCAL +DEFAULT +7 sh4
+.* TLS +LOCAL +DEFAULT +8 sH3
+.* TLS +LOCAL +DEFAULT +7 sh5
+.* TLS +LOCAL +DEFAULT +8 sH5
+.* TLS +LOCAL +DEFAULT +8 sH6
+.* TLS +LOCAL +DEFAULT +8 sH8
+.* TLS +LOCAL +DEFAULT +7 sh1
+.* OBJECT +LOCAL +DEFAULT +ABS _GLOBAL_OFFSET_TABLE_
+.* TLS +LOCAL +DEFAULT +7 sh2
+.* TLS +LOCAL +DEFAULT +7 sh6
+.* TLS +GLOBAL +DEFAULT +7 sg8
+.* TLS +GLOBAL +DEFAULT +7 sg3
+.* TLS +GLOBAL +DEFAULT +7 sg4
+.* TLS +GLOBAL +DEFAULT +7 sg5
+.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr
+.* TLS +GLOBAL +DEFAULT +7 sg1
+.* FUNC +GLOBAL +DEFAULT +6 fn1
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* TLS +GLOBAL +DEFAULT +7 sg2
+.* TLS +GLOBAL +DEFAULT +7 sg6
+.* TLS +GLOBAL +DEFAULT +7 sg7
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic64.s b/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic64.s
new file mode 100644
index 0000000..14e110d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic64.s
@@ -0,0 +1,228 @@
+ .data
+ .align 4096
+ .section ".tdata", #alloc, #write, #tls
+ .align 4
+ .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
+ .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+ .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+sg1: .word 17
+sg2: .word 18
+sg3: .word 19
+sg4: .word 20
+sg5: .word 21
+sg6: .word 22
+sg7: .word 23
+sg8: .word 24
+sl1: .word 65
+sl2: .word 66
+sl3: .word 67
+sl4: .word 68
+sl5: .word 69
+sl6: .word 70
+sl7: .word 71
+sl8: .word 72
+sh1: .word 257
+sh2: .word 258
+sh3: .word 259
+sh4: .word 260
+sh5: .word 261
+sh6: .word 262
+sh7: .word 263
+sh8: .word 264
+
+ .text
+ .align 4096
+.LLGETPC0:
+ retl
+ add %o7, %l7, %l7
+
+ .globl fn1
+ .type fn1,#function
+ .proc 04
+fn1:
+ save %sp, -160, %sp
+ sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %l7
+ call .LLGETPC0
+ add %l7, %lo(_GLOBAL_OFFSET_TABLE_+4), %l7
+ nop;nop;nop;nop
+
+ /* GD */
+ sethi %tgd_hi22(sg1), %l1
+ nop
+ add %l1, %tgd_lo10(sg1), %l2
+ nop
+ add %l7, %l2, %o0, %tgd_add(sg1)
+ nop
+ call __tls_get_addr, %tgd_call(sg1)
+ nop
+ nop;nop;nop;nop
+
+ /* GD -> IE because variable is referenced through IE too */
+ sethi %tgd_hi22(sg2), %o0
+ add %o0, %tgd_lo10(sg2), %o1
+ add %l7, %o1, %o0, %tgd_add(sg2)
+ call __tls_get_addr, %tgd_call(sg2)
+ nop
+ nop;nop;nop;nop
+
+ /* GD against local variable */
+ sethi %tgd_hi22(sl1), %o4
+ add %o4, %tgd_lo10(sl1), %o4
+ add %l7, %o4, %o0, %tgd_add(sl1)
+ call __tls_get_addr, %tgd_call(sl1)
+ nop
+ nop;nop;nop;nop
+
+ /* GD -> IE against local variable referenced through IE too */
+ sethi %tgd_hi22(sl2), %o0
+ add %o0, %tgd_lo10(sl2), %o0
+ add %l7, %o0, %o0, %tgd_add(sl2)
+ call __tls_get_addr, %tgd_call(sl2)
+ nop
+ nop;nop;nop;nop
+
+ /* GD against hidden and local variable */
+ sethi %tgd_hi22(sh1), %o4
+ add %o4, %tgd_lo10(sh1), %o4
+ add %l7, %o4, %o0, %tgd_add(sh1)
+ call __tls_get_addr, %tgd_call(sh1)
+ nop
+ nop;nop;nop;nop
+
+ /* GD -> IE against hidden and local variable referenced through
+ IE too */
+ sethi %tgd_hi22(sh2), %o0
+ add %o0, %tgd_lo10(sh2), %o0
+ add %l7, %o0, %o0, %tgd_add(sh2)
+ call __tls_get_addr, %tgd_call(sh2)
+ nop
+ nop;nop;nop;nop
+
+ /* GD against hidden but not local variable */
+ sethi %tgd_hi22(sH1), %o4
+ add %o4, %tgd_lo10(sH1), %o4
+ add %l7, %o4, %o0, %tgd_add(sH1)
+ call __tls_get_addr, %tgd_call(sH1)
+ nop
+ nop;nop;nop;nop
+
+ /* GD -> IE against hidden but not local variable referenced through
+ IE too */
+ sethi %tgd_hi22(sH2), %o0
+ add %o0, %tgd_lo10(sH2), %o0
+ add %l7, %o0, %o0, %tgd_add(sH2)
+ call __tls_get_addr, %tgd_call(sH2)
+ nop
+ nop;nop;nop;nop
+
+ /* LD */
+ sethi %tldm_hi22(sl1), %l1
+ nop
+ add %l1, %tldm_lo10(sl1), %l2
+ nop
+ add %l7, %l2, %o0, %tldm_add(sl1)
+ nop
+ call __tls_get_addr, %tldm_call(sl1)
+ nop
+ sethi %tldo_hix22(sl1), %l3
+ nop
+ xor %l3, %tldo_lox10(sl1), %l4
+ nop
+ add %o0, %l4, %l5, %tldo_add(sl1)
+ nop
+ sethi %tldo_hix22(sl2 + 2), %l2
+ nop
+ xor %l2, %tldo_lox10(sl2 + 2), %l3
+ nop
+ lduh [%o0 + %l3], %l6, %tldo_add(sl2 + 2)
+ nop;nop;nop;nop
+
+ /* LD against hidden and local variables */
+ sethi %tldm_hi22(sh1), %o1
+ sethi %tldo_hix22(sh1), %l3
+ add %o1, %tldm_lo10(sh1), %o2
+ sethi %tldo_hix22(sh2 + 1), %l2
+ add %l7, %o2, %o0, %tldm_add(sh1)
+ xor %l3, %tldo_lox10(sh1), %l4
+ call __tls_get_addr, %tldm_call(sh1)
+ xor %l2, %tldo_lox10(sh2 + 1), %l3
+ ldx [%o0 + %l4], %l5, %tldo_add(sh1)
+ add %o0, %l3, %l6, %tldo_add(sh2 + 1)
+ nop;nop;nop;nop
+
+ /* LD against hidden but not local variables */
+ sethi %tldm_hi22(sH1), %o1
+ sethi %tldo_hix22(sH1 + 3), %l3
+ add %o1, %tldm_lo10(sH1), %o2
+ sethi %tldo_hix22(sH2), %l2
+ add %l7, %o2, %o0, %tldm_add(sH1)
+ xor %l3, %tldo_lox10(sH1 + 3), %l4
+ call __tls_get_addr, %tldm_call(sH1)
+ xor %l2, %tldo_lox10(sH2), %l3
+ add %o0, %l4, %l5, %tldo_add(sH1 + 3)
+ ld [%o0 + %l3], %l6, %tldo_add(sH2)
+ nop;nop;nop;nop
+
+ /* IE against global var */
+ sethi %tie_hi22(sg2), %l1
+ nop
+ add %l1, %tie_lo10(sg2), %l2
+ nop
+ ldx [%l7 + %l2], %l2, %tie_ldx(sg2)
+ nop
+ add %g7, %l2, %l2, %tie_add(sg2)
+ nop;nop;nop;nop
+
+ /* IE against local var */
+ sethi %tie_hi22(sl2), %o3
+ add %o3, %tie_lo10(sl2), %o3
+ ldx [%l7 + %o3], %o2, %tie_ldx(sl2)
+ add %g7, %o2, %o4, %tie_add(sl2)
+ nop;nop;nop;nop
+
+ /* IE against hidden and local var */
+ sethi %tie_hi22(sh2), %l1
+ add %l1, %tie_lo10(sh2), %l2
+ ldx [%l7 + %l2], %l2, %tie_ldx(sh2)
+ add %g7, %l2, %l2, %tie_add(sh2)
+ nop;nop;nop;nop
+
+ /* IE against hidden but not local var */
+ sethi %tie_hi22(sH2), %l1
+ add %l1, %tie_lo10(sH2), %l2
+ ldx [%l7 + %l2], %l2, %tie_ldx(sH2)
+ add %g7, %l2, %l2, %tie_add(sH2)
+ nop;nop;nop;nop
+
+ /* Direct access through %g7 */
+
+ /* IE against global var */
+ sethi %tie_hi22(sg5), %l1
+ add %l1, %tie_lo10(sg5), %l2
+ ldx [%l7 + %l2], %l2, %tie_ldx(sg5)
+ ldx [%g7 + %l2], %l2, %tie_add(sg5)
+ nop;nop;nop;nop
+
+ /* IE against local var */
+ sethi %tie_hi22(sl5), %o3
+ add %o3, %tie_lo10(sl5), %o4
+ ldx [%l7 + %o4], %o5, %tie_ldx(sl5)
+ stb %l2, [%g7 + %o5], %tie_add(sl5)
+ nop;nop;nop;nop
+
+ /* IE against hidden and local var */
+ sethi %tie_hi22(sh5), %o3
+ add %o3, %tie_lo10(sh5), %o4
+ ldx [%l7 + %o4], %o5, %tie_ldx(sh5)
+ stx %l2, [%g7 + %o5], %tie_add(sh5)
+ nop;nop;nop;nop
+
+ /* IE against hidden but not local var */
+ sethi %tie_hi22(sH5), %o3
+ add %o3, %tie_lo10(sH5), %o4
+ ldx [%l7 + %o4], %o5, %tie_ldx(sH5)
+ st %l2, [%g7 + %o5], %tie_add(sH5)
+ nop;nop;nop;nop
+
+ return %i7 + 8
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic64.sd b/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic64.sd
new file mode 100644
index 0000000..9061c2e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic64.sd
@@ -0,0 +1,20 @@
+#source: tlssunpic64.s
+#source: tlspic.s
+#as: --64 -K PIC
+#ld: -shared -melf64_sparc
+#objdump: -sj.got
+#target: sparc*-*-*
+
+.*: +file format elf64-sparc
+
+Contents of section .got:
+ 102190 00000000 00102060 00000000 00000000 .*
+ 1021a0 00000000 00000020 00000000 00000000 .*
+ 1021b0 00000000 00000000 00000000 00000000 .*
+ 1021c0 00000000 00000000 00000000 00000000 .*
+ 1021d0 00000000 00000060 00000000 00000000 .*
+ 1021e0 00000000 00000000 00000000 00000000 .*
+ 1021f0 00000000 00000000 00000000 00000000 .*
+ 102200 00000000 00000000 00000000 00000000 .*
+ 102210 00000000 00000000 00000000 00000040 .*
+ 102220 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic64.td b/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic64.td
new file mode 100644
index 0000000..1e82d2b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/tlssunpic64.td
@@ -0,0 +1,16 @@
+#source: tlssunpic64.s
+#source: tlspic.s
+#as: --64 -K PIC
+#ld: -shared -melf64_sparc
+#objdump: -sj.tdata
+#target: sparc*-*-*
+
+.*: +file format elf64-sparc
+
+Contents of section .tdata:
+ 102000 00000011 00000012 00000013 00000014 .*
+ 102010 00000015 00000016 00000017 00000018 .*
+ 102020 00000041 00000042 00000043 00000044 .*
+ 102030 00000045 00000046 00000047 00000048 .*
+ 102040 00000101 00000102 00000103 00000104 .*
+ 102050 00000105 00000106 00000107 00000108 .*
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/vxworks1-lib.dd b/binutils-2.21/ld/testsuite/ld-sparc/vxworks1-lib.dd
new file mode 100644
index 0000000..49dab7b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/vxworks1-lib.dd
@@ -0,0 +1,45 @@
+
+.*: file format .*
+
+Disassembly of section \.plt:
+
+00080800 <_PROCEDURE_LINKAGE_TABLE_>:
+ 80800: c4 05 e0 08 ld \[ %l7 \+ 8 \], %g2
+ 80804: 81 c0 80 00 jmp %g2
+ 80808: 01 00 00 00 nop
+ 8080c: 03 00 00 00 sethi %hi\(0\), %g1
+ 80810: 82 10 60 0c or %g1, 0xc, %g1 ! c <_PROCEDURE_LINKAGE_TABLE_-0x807f4>
+ 80814: c2 05 c0 01 ld \[ %l7 \+ %g1 \], %g1
+ 80818: 81 c0 40 00 jmp %g1
+ 8081c: 01 00 00 00 nop
+ 80820: 03 00 00 00 sethi %hi\(0\), %g1
+ 80824: 10 bf ff f7 b 80800 <_PROCEDURE_LINKAGE_TABLE_>
+ 80828: 82 10 60 00 mov %g1, %g1 ! 0 <_PROCEDURE_LINKAGE_TABLE_-0x80800>
+Disassembly of section \.text:
+
+00080c00 <foo>:
+ 80c00: 9d e3 bf 98 save %sp, -104, %sp
+ 80c04: 2f 00 00 00 sethi %hi\(0\), %l7
+ 80c08: ee 05 e0 00 ld \[ %l7 \], %l7
+ 80c0c: ee 05 e0 00 ld \[ %l7 \], %l7
+ 80c10: 03 00 00 00 sethi %hi\(0\), %g1
+ 80c14: 82 10 60 10 or %g1, 0x10, %g1 ! 10 <_PROCEDURE_LINKAGE_TABLE_-0x807f0>
+ 80c18: c2 05 c0 01 ld \[ %l7 \+ %g1 \], %g1
+ 80c1c: c4 00 40 00 ld \[ %g1 \], %g2
+ 80c20: 84 00 a0 01 inc %g2
+ 80c24: 40 00 00 08 call 80c44 <slocal>
+ 80c28: c4 20 40 00 st %g2, \[ %g1 \]
+ 80c2c: 7f ff fe f8 call 8080c <_PROCEDURE_LINKAGE_TABLE_\+0xc>
+ 80c30: 01 00 00 00 nop
+ 80c34: 7f ff fe f6 call 8080c <_PROCEDURE_LINKAGE_TABLE_\+0xc>
+ 80c38: 01 00 00 00 nop
+ 80c3c: 81 c7 e0 08 ret
+ 80c40: 81 e8 00 00 restore
+
+00080c44 <slocal>:
+ 80c44: 81 c3 e0 08 retl
+ 80c48: 01 00 00 00 nop
+
+00080c4c <sglobal>:
+ 80c4c: 81 c3 e0 08 retl
+ 80c50: 01 00 00 00 nop
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/vxworks1-lib.nd b/binutils-2.21/ld/testsuite/ld-sparc/vxworks1-lib.nd
new file mode 100644
index 0000000..cbc1c8c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/vxworks1-lib.nd
@@ -0,0 +1,9 @@
+#...
+Symbol table '\.dynsym' .*:
+#...
+.*: 00090400 * 0 * OBJECT * GLOBAL * DEFAULT * [0-9]+ _GLOBAL_OFFSET_TABLE_
+#...
+Symbol table '\.symtab' .*:
+#...
+.*: 00090400 * 0 * OBJECT * GLOBAL * DEFAULT * [0-9]+ _GLOBAL_OFFSET_TABLE_
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/vxworks1-lib.rd b/binutils-2.21/ld/testsuite/ld-sparc/vxworks1-lib.rd
new file mode 100644
index 0000000..3604528
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/vxworks1-lib.rd
@@ -0,0 +1,12 @@
+
+Relocation section '\.rela\.plt' at offset .* contains 1 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+0009040c .*15 R_SPARC_JMP_SLOT 00000000 sexternal \+ 0
+
+Relocation section '\.rela\.dyn' at offset .* contains 5 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+00090800 00000016 R_SPARC_RELATIVE 00080c44
+00080c04 .*09 R_SPARC_HI22 00000000 __GOTT_BASE__ \+ 0
+00080c08 .*0c R_SPARC_LO10 00000000 __GOTT_BASE__ \+ 0
+00080c0c .*0c R_SPARC_LO10 00000000 __GOTT_INDEX__ \+ 0
+00090410 .*14 R_SPARC_GLOB_DAT 00090c00 x \+ 0
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/vxworks1-lib.s b/binutils-2.21/ld/testsuite/ld-sparc/vxworks1-lib.s
new file mode 100644
index 0000000..e1221a2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/vxworks1-lib.s
@@ -0,0 +1,44 @@
+ .text
+ .globl foo
+ .type foo, %function
+foo:
+ save %sp, -104, %sp
+ sethi %hi(__GOTT_BASE__), %l7
+ ld [%l7+%lo(__GOTT_BASE__)],%l7
+ ld [%l7+%lo(__GOTT_INDEX__)],%l7
+ sethi %hi(x), %g1
+ or %g1, %lo(x), %g1
+ ld [%l7+%g1], %g1
+ ld [%g1], %g2
+ add %g2, 1, %g2
+
+ call slocal, 0
+ st %g2, [%g1]
+
+ call sexternal, 0
+ nop
+
+ call sexternal, 0
+ nop
+
+ ret
+ restore
+ .size foo, .-foo
+
+ .type slocal, %function
+slocal:
+ retl
+ nop
+ .size slocal, .-slocal
+
+ .globl sglobal
+ .type sglobal, %function
+sglobal:
+ retl
+ nop
+ .size sglobal, .-sglobal
+
+ .data
+ .4byte slocal
+
+ .comm x,4,4
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/vxworks1-lib.td b/binutils-2.21/ld/testsuite/ld-sparc/vxworks1-lib.td
new file mode 100644
index 0000000..9f223e3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/vxworks1-lib.td
@@ -0,0 +1,3 @@
+#...
+ 0x0+16 \(TEXTREL\) +0x0
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/vxworks1-static.d b/binutils-2.21/ld/testsuite/ld-sparc/vxworks1-static.d
new file mode 100644
index 0000000..88c0baf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/vxworks1-static.d
@@ -0,0 +1,4 @@
+#name: VxWorks executable test 1 (static)
+#source: vxworks1.s
+#ld: tmpdir/libvxworks1.so -Tvxworks1.ld
+#error: Dynamic sections created in non-dynamic link
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/vxworks1.dd b/binutils-2.21/ld/testsuite/ld-sparc/vxworks1.dd
new file mode 100644
index 0000000..16e72fd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/vxworks1.dd
@@ -0,0 +1,52 @@
+
+.*: file format .*
+
+Disassembly of section \.plt:
+
+00080800 <_PROCEDURE_LINKAGE_TABLE_>:
+ 80800: 05 00 02 41 sethi %hi\(0x90400\), %g2
+ 80800: R_SPARC_HI22 _GLOBAL_OFFSET_TABLE_\+0x8
+ 80804: 84 10 a0 08 or %g2, 8, %g2 ! 90408 <_GLOBAL_OFFSET_TABLE_\+0x8>
+ 80804: R_SPARC_LO10 _GLOBAL_OFFSET_TABLE_\+0x8
+ 80808: c4 00 80 00 ld \[ %g2 \], %g2
+ 8080c: 81 c0 80 00 jmp %g2
+ 80810: 01 00 00 00 nop
+ 80814: 03 00 02 41 sethi %hi\(0x90400\), %g1
+ 80814: R_SPARC_HI22 _GLOBAL_OFFSET_TABLE_\+0xc
+ 80818: 82 10 60 0c or %g1, 0xc, %g1 ! 9040c <sglobal@plt>
+ 80818: R_SPARC_LO10 _GLOBAL_OFFSET_TABLE_\+0xc
+ 8081c: c2 00 40 00 ld \[ %g1 \], %g1
+ 80820: 81 c0 40 00 jmp %g1
+ 80824: 01 00 00 00 nop
+ 80828: 03 00 00 00 sethi %hi\(0\), %g1
+ 8082c: 10 bf ff f5 b 80800 <_PROCEDURE_LINKAGE_TABLE_>
+ 80830: 82 10 60 00 mov %g1, %g1 ! 0 <_PROCEDURE_LINKAGE_TABLE_-0x80800>
+ 80834: 03 00 02 41 sethi %hi\(0x90400\), %g1
+ 80834: R_SPARC_HI22 _GLOBAL_OFFSET_TABLE_\+0x10
+ 80838: 82 10 60 10 or %g1, 0x10, %g1 ! 90410 <foo@plt>
+ 80838: R_SPARC_LO10 _GLOBAL_OFFSET_TABLE_\+0x10
+ 8083c: c2 00 40 00 ld \[ %g1 \], %g1
+ 80840: 81 c0 40 00 jmp %g1
+ 80844: 01 00 00 00 nop
+ 80848: 03 00 00 00 sethi %hi\(0\), %g1
+ 8084c: 10 bf ff ed b 80800 <_PROCEDURE_LINKAGE_TABLE_>
+ 80850: 82 10 60 01 or %g1, 1, %g1 ! 1 <_PROCEDURE_LINKAGE_TABLE_-0x807ff>
+Disassembly of section \.text:
+
+00080c00 <_start>:
+ 80c00: 9d e3 bf 98 save %sp, -104, %sp
+ 80c04: 7f ff ff 0c call 80834 <_PROCEDURE_LINKAGE_TABLE_\+0x34>
+ 80c04: R_SPARC_WDISP30 \.plt\+0x34
+ 80c08: 01 00 00 00 nop
+ 80c0c: 40 00 00 06 call 80c24 <sexternal>
+ 80c0c: R_SPARC_WDISP30 sexternal
+ 80c10: 01 00 00 00 nop
+ 80c14: 7f ff ff 00 call 80814 <_PROCEDURE_LINKAGE_TABLE_\+0x14>
+ 80c14: R_SPARC_WDISP30 \.plt\+0x14
+ 80c18: 01 00 00 00 nop
+ 80c1c: 81 c7 e0 08 ret
+ 80c20: 81 e8 00 00 restore
+
+00080c24 <sexternal>:
+ 80c24: 81 c3 e0 08 retl
+ 80c28: 01 00 00 00 nop
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/vxworks1.ld b/binutils-2.21/ld/testsuite/ld-sparc/vxworks1.ld
new file mode 100644
index 0000000..ce750b0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/vxworks1.ld
@@ -0,0 +1,30 @@
+SECTIONS
+{
+ . = 0x80000;
+ .interp : { *(.interp) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+
+ . = ALIGN (0x400);
+ .rela.dyn : { *(.rela.dyn) }
+ .rela.plt : { *(.rela.plt) }
+
+ . = ALIGN (0x400);
+ .plt : { *(.plt) }
+
+ . = ALIGN (0x400);
+ .text : { *(.text) }
+
+ . = ALIGN (0x10000);
+ .dynamic : { *(.dynamic) }
+
+ . = ALIGN (0x400);
+ .got : { *(.got.plt) *(.got) }
+
+ . = ALIGN (0x400);
+ .data : { *(.data) }
+
+ . = ALIGN (0x400);
+ .bss : { *(.bss) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/vxworks1.rd b/binutils-2.21/ld/testsuite/ld-sparc/vxworks1.rd
new file mode 100644
index 0000000..e02146b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/vxworks1.rd
@@ -0,0 +1,22 @@
+
+Relocation section '\.rela\.plt' at offset .* contains 2 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+0009040c .*15 R_SPARC_JMP_SLOT 00080814 sglobal \+ 0
+00090410 .*15 R_SPARC_JMP_SLOT 00080834 foo \+ 0
+
+Relocation section '\.rela\.text' at offset .* contains 3 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+00080c04 .*07 R_SPARC_WDISP30 00080800 \.plt \+ 34
+00080c0c .*07 R_SPARC_WDISP30 00080c24 sexternal \+ 0
+00080c14 .*07 R_SPARC_WDISP30 00080800 \.plt \+ 14
+
+Relocation section '\.rela\.plt\.unloaded' at offset .* contains 8 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+00080800 .*09 R_SPARC_HI22 00090400 _GLOBAL_OFFSET_TABLE_ \+ 8
+00080804 .*0c R_SPARC_LO10 00090400 _GLOBAL_OFFSET_TABLE_ \+ 8
+00080814 .*09 R_SPARC_HI22 00090400 _GLOBAL_OFFSET_TABLE_ \+ c
+00080818 .*0c R_SPARC_LO10 00090400 _GLOBAL_OFFSET_TABLE_ \+ c
+0009040c .*03 R_SPARC_32 00080800 _PROCEDURE_LINKAGE_TAB.* \+ 28
+00080834 .*09 R_SPARC_HI22 00090400 _GLOBAL_OFFSET_TABLE_ \+ 10
+00080838 .*0c R_SPARC_LO10 00090400 _GLOBAL_OFFSET_TABLE_ \+ 10
+00090410 .*03 R_SPARC_32 00080800 _PROCEDURE_LINKAGE_TAB.* \+ 48
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/vxworks1.s b/binutils-2.21/ld/testsuite/ld-sparc/vxworks1.s
new file mode 100644
index 0000000..82106c8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/vxworks1.s
@@ -0,0 +1,25 @@
+ .text
+ .globl _start
+ .type _start, %function
+_start:
+ save %sp, -104, %sp
+
+ call foo, 0
+ nop
+
+ call sexternal, 0
+ nop
+
+ call sglobal, 0
+ nop
+
+ ret
+ restore
+ .size _start, .-_start
+
+ .globl sexternal
+ .type sexternal, %function
+sexternal:
+ retl
+ nop
+ .size sexternal, .-sexternal
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/vxworks2-static.sd b/binutils-2.21/ld/testsuite/ld-sparc/vxworks2-static.sd
new file mode 100644
index 0000000..55fc529
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/vxworks2-static.sd
@@ -0,0 +1,9 @@
+#...
+Elf file type is EXEC \(Executable file\)
+Entry point 0x80000
+#...
+Program Headers:
+ Type .*
+ LOAD .* 0x00080000 0x00080000 .* R E 0x10000
+
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/vxworks2.s b/binutils-2.21/ld/testsuite/ld-sparc/vxworks2.s
new file mode 100644
index 0000000..0a883a9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/vxworks2.s
@@ -0,0 +1,6 @@
+ .globl _start
+ .type _start, %function
+_start:
+ retl
+ nop
+ .end _start
diff --git a/binutils-2.21/ld/testsuite/ld-sparc/vxworks2.sd b/binutils-2.21/ld/testsuite/ld-sparc/vxworks2.sd
new file mode 100644
index 0000000..0876568
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-sparc/vxworks2.sd
@@ -0,0 +1,13 @@
+#...
+Elf file type is EXEC \(Executable file\)
+Entry point 0x80400
+#...
+Program Headers:
+ Type .*
+ PHDR .*
+#...
+ LOAD .* 0x00080000 0x00080000 .* R E 0x10000
+ LOAD .* 0x00090000 0x00090000 .* RW 0x10000
+ DYNAMIC .*
+
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-spu/ear.d b/binutils-2.21/ld/testsuite/ld-spu/ear.d
new file mode 100644
index 0000000..df5546f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-spu/ear.d
@@ -0,0 +1,30 @@
+#as:
+#objdump: -Dr
+#name: ear
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+0+00 <_start>:
+ 0: 32 00 00 00 br 0
+ 0: SPU_REL16 _start
+
+Disassembly of section \.data:
+
+0+00 <_EAR_main>:
+ \.\.\.
+
+0+20 <_EAR_foo>:
+ \.\.\.
+Disassembly of section \.toe:
+
+0+00 <_EAR_>:
+ \.\.\.
+
+0+10 <_EAR_bar>:
+ \.\.\.
+Disassembly of section \.data\.blah:
+
+0+00 <_EAR_blah>:
+ \.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-spu/ear.s b/binutils-2.21/ld/testsuite/ld-spu/ear.s
new file mode 100644
index 0000000..724a525
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-spu/ear.s
@@ -0,0 +1,28 @@
+ .text
+ .global _start
+_start:
+ br _start
+
+#test old-style toe _EAR_ syms
+ .section .toe,"a",@nobits
+ .p2align 4
+_EAR_:
+ .space 16
+_EAR_bar:
+ .space 16
+
+#test new-style _EAR_ syms
+ .data
+ .p2align 4
+_EAR_main:
+ .space 16
+
+#new ones don't need to be 16 bytes apart
+ .space 16
+_EAR_foo:
+ .space 16
+
+ .section .data.blah,"aw",@progbits
+ .p2align 4
+_EAR_blah:
+ .space 16
diff --git a/binutils-2.21/ld/testsuite/ld-spu/embed.rd b/binutils-2.21/ld/testsuite/ld-spu/embed.rd
new file mode 100644
index 0000000..4fcfe2a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-spu/embed.rd
@@ -0,0 +1,16 @@
+
+Relocation section '\.rela\.rodata\.speelf' at .* contains 3 entries:
+ Offset +Info +Type +Sym\. Value +Symbol's Name \+ Addend
+0+184 .* R_PPC_ADDR32 +0+0 +main \+ 0
+0+1a4 .* R_PPC_ADDR32 +0+0 +foo \+ 0
+0+1b4 .* R_PPC_ADDR32 +0+0 +blah \+ 0
+
+Relocation section '\.rela\.data\.spetoe' at .* contains 2 entries:
+ Offset +Info +Type +Sym\. Value +Symbol's Name \+ Addend
+0+004 .* R_PPC_ADDR32 +0+0 +\.rodata\.speelf \+ 0
+0+014 .* R_PPC_ADDR32 +0+0 +bar \+ 0
+
+Relocation section '\.rela\.data\.spehandle' at .* contains 2 entries:
+ Offset +Info +Type +Sym\. Value +Symbol's Name \+ Addend
+0+004 .* R_PPC_ADDR32 +0+0 +\.rodata\.speelf \+ 0
+0+008 .* R_PPC_ADDR32 +0+0 +\.data\.spetoe \+ 0
diff --git a/binutils-2.21/ld/testsuite/ld-spu/fixup.d b/binutils-2.21/ld/testsuite/ld-spu/fixup.d
new file mode 100644
index 0000000..39f731b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-spu/fixup.d
@@ -0,0 +1,20 @@
+#source: fixup.s
+#ld: --emit-fixups
+#objdump: -s
+
+.*elf32-spu
+
+Contents of section .text:
+ 0000 00000000 ....
+Contents of section .fixup:
+ 0004 0000008b 00000091 000000c1 00000000 ................
+Contents of section .data:
+ 0080 000000d0 00000000 00000000 000000c0 ................
+ 0090 00000000 00000000 00000000 000000b0 ................
+ 00a0 00000001 00000000 00000000 00000000 ................
+ 00b0 00000002 00000000 00000000 00000000 ................
+ 00c0 00000000 00000000 00000000 00000080 ................
+Contents of section .note.spu_name:
+.*
+.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-spu/fixup.s b/binutils-2.21/ld/testsuite/ld-spu/fixup.s
new file mode 100644
index 0000000..c0fd6db
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-spu/fixup.s
@@ -0,0 +1,24 @@
+ .global _end
+ .global _start
+ .global glob
+ .global after
+ .global before
+ .weak undef
+
+ .section .text,"ax"
+_start:
+ stop
+
+
+ .data
+ .p2align 4
+before:
+ .long _end, 0, _start, after
+ .long 0, 0, 0, glob
+loc:
+ .long 1,0,0,0
+glob:
+ .long 2,0,0,0
+after:
+ .long 0, 0, 0, before
+
diff --git a/binutils-2.21/ld/testsuite/ld-spu/icache1.d b/binutils-2.21/ld/testsuite/ld-spu/icache1.d
new file mode 100644
index 0000000..01b42ba
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-spu/icache1.d
@@ -0,0 +1,193 @@
+#source: icache1.s
+#ld: --soft-icache --num-lines=4 --non-ia-text --auto-overlay=tmpdir/icache1.lnk --auto-relink
+#objdump: -D
+
+.* elf32-spu
+
+
+Disassembly of section \.text:
+
+00000000 <_start>:
+.* 41 00 02 03 ilhu \$3,4
+.* 60 88 00 03 iohl \$3,4096 # 1000
+.* 32 00 03 80 br 24.*
+0000000c <__icache_br_handler>:
+ c: 00 00 00 00 stop
+00000010 <__icache_call_handler>:
+ \.\.\.
+ 20: 00 04 08 00.*
+ 24: 31 00 02 4b brasl \$75,10 <__icache_call_handler>
+ 28: a0 00 00 08.*
+ 2c: 00 00 fc 80.*
+ \.\.\.
+
+Disassembly of section \.data:
+
+.* <.data>:
+.* 00 04 08 00 .*
+.* 00 04 0d 04 .*
+.* 00 04 0c 00 .*
+.* 00 08 10 00 .*
+
+Disassembly of section \.bss:
+
+.* <__icache_tag_array>:
+ \.\.\.
+
+.* <__icache_rewrite_to>:
+ \.\.\.
+
+.* <__icache_rewrite_from>:
+ \.\.\.
+
+Disassembly of section \.ovl\.init:
+
+00000400 <__icache_fileoff>:
+.* 00 00 00 00.*
+.* 00 00 02 00.*
+ \.\.\.
+
+Disassembly of section \.ovly1:
+
+00000400 <\.ovly1>:
+.* ai \$1,\$1,64 # 40
+.* lqd \$0,16\(\$1\)
+.* bi \$0
+ \.\.\.
+
+Disassembly of section \.ovly2:
+
+00000800 <f1>:
+.* 40 20 00 00 nop \$0
+.* 24 00 40 80 stqd \$0,16\(\$1\)
+.* 1c f0 00 81 ai \$1,\$1,-64
+.* 24 00 00 81 stqd \$1,0\(\$1\)
+.* 33 00 78 80 brsl \$0,bd4 .*
+.* 33 00 7a 00 brsl \$0,be4 .*
+ \.\.\.
+.* 32 00 17 80 br bf4 .*
+ \.\.\.
+ bd0: 00 04 0d 04.*
+ bd4: 31 00 01 cb brasl \$75,c .*
+ bd8: a0 00 08 10.*
+ bdc: 00 00 e6 00.*
+ be0: 00 04 0c 00.*
+ be4: 31 00 01 cb brasl \$75,c .*
+ be8: a0 00 08 14.*
+ bec: 00 00 07 80.*
+ bf0: 00 04 04 00.*
+ bf4: 31 00 01 cb brasl \$75,c .*
+ bf8: 20 00 0b 38.*
+ bfc: 00 7f 0e 80.*
+
+Disassembly of section \.ovly3:
+
+00000c00 <f3>:
+ \.\.\.
+.* 35 00 00 00 bi \$0
+
+00000d04 <f2>:
+.* 1c e0 00 81 ai \$1,\$1,-128
+.* 24 00 00 81 stqd \$1,0\(\$1\)
+ \.\.\.
+.* 1c 20 00 81 ai \$1,\$1,128 # 80
+.* 35 00 00 00 bi \$0
+ \.\.\.
+
+Disassembly of section \.ovly4:
+
+00001000 <f5>:
+.* 24 00 40 80 stqd \$0,16\(\$1\)
+.* 24 f8 00 81 stqd \$1,-512\(\$1\)
+.* 1c 80 00 81 ai \$1,\$1,-512
+.* 33 7f fe 80 brsl \$0,1000 <f5> # 1000
+ \.\.\.
+.* 42 01 00 03 ila \$3,200.*
+.* 18 00 c0 81 a \$1,\$1,\$3
+.* 34 00 40 80 lqd \$0,16\(\$1\)
+.* 35 00 00 00 bi \$0
+ \.\.\.
+
+Disassembly of section \.ovly5:
+
+00000400 <\.ovly5>:
+ \.\.\.
+.* 42 01 00 03 ila \$3,200 .*
+.* 18 00 c0 81 a \$1,\$1,\$3
+.* 34 00 40 80 lqd \$0,16\(\$1\)
+.* 30 00 fe 80 bra 7f4 .*
+ \.\.\.
+ 7f0: 00 04 10 00.*
+ 7f4: 31 00 01 cb brasl \$75,c .*
+ 7f8: a0 00 07 2c.*
+ 7fc: 00 02 fe 80.*
+
+Disassembly of section \.ovly6:
+
+00000800 <\.ovly6>:
+.* 31 01 7a 80 brasl \$0,bd4 .*
+.* 33 00 7c 00 brsl \$0,be4 .*
+ \.\.\.
+.* 32 00 19 80 br bf4 .*
+ \.\.\.
+ bd0: 00 08 10 00.*
+ bd4: 31 00 01 cb brasl \$75,c .*
+ bd8: a0 00 08 00.*
+ bdc: 00 03 7a 80.*
+ be0: 00 08 10 00.*
+ be4: 31 00 01 cb brasl \$75,c .*
+ be8: a0 00 08 04.*
+ bec: 00 00 83 80.*
+ bf0: 00 08 04 00.*
+ bf4: 31 00 01 cb brasl \$75,c .*
+ bf8: 20 00 0b 28.*
+ bfc: 00 7f 02 80.*
+
+Disassembly of section \.ovly7:
+
+00000c00 <\.ovly7>:
+.* 41 7f ff 83 ilhu \$3,65535 # ffff
+.* 60 f8 30 03 iohl \$3,61536 # f060
+.* 18 00 c0 84 a \$4,\$1,\$3
+.* 00 20 00 00 lnop
+.* 04 00 02 01 ori \$1,\$4,0
+.* 24 00 02 04 stqd \$4,0\(\$4\)
+.* 33 00 77 80 brsl \$0,fd4 .*
+.* 33 00 79 00 brsl \$0,fe4 .*
+.* 34 00 00 81 lqd \$1,0\(\$1\)
+ \.\.\.
+.* 32 00 16 00 br ff4 .*
+ \.\.\.
+ fd0: 00 04 10 00.*
+ fd4: 31 00 01 cb brasl \$75,c .*
+ fd8: a0 00 0c 18.*
+ fdc: 00 00 0a 80.*
+ fe0: 00 08 10 00.*
+ fe4: 31 00 01 cb brasl \$75,c .*
+ fe8: a0 00 0c 1c.*
+ fec: 00 00 05 80.*
+ ff0: 00 08 08 00.*
+ ff4: 31 00 01 cb brasl \$75,c .*
+ ff8: 20 00 0f 44.*
+ ffc: 00 7f 01 80.*
+
+Disassembly of section \.ovly8:
+
+00001000 <f4>:
+.* 24 00 40 80 stqd \$0,16\(\$1\)
+.* 24 f8 00 81 stqd \$1,-512\(\$1\)
+.* 1c 80 00 81 ai \$1,\$1,-512
+.* 31 02 7c 80 brasl \$0,13e4 .*
+ \.\.\.
+.* 32 00 18 80 br 13f4 .*
+ \.\.\.
+ 13e0: 00 04 0d 04.*
+ 13e4: 31 00 01 cb brasl \$75,c .*
+ 13e8: a0 00 10 0c.*
+ 13ec: 00 03 dc 00.*
+ 13f0: 00 08 0c 00.*
+ 13f4: 31 00 01 cb brasl \$75,c .*
+ 13f8: 20 00 13 30.*
+ 13fc: 00 7f 02 80.*
+
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-spu/icache1.s b/binutils-2.21/ld/testsuite/ld-spu/icache1.s
new file mode 100644
index 0000000..a65664c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-spu/icache1.s
@@ -0,0 +1,111 @@
+ .text
+ .globl _start
+ .type _start,@function
+_start:
+ ilhu $3,f5@h
+ iohl $3,f5@l
+ br f1
+
+ .data
+ .word f1, f2, f3, f4
+
+ .section ".f1.part1","ax",@progbits
+ .globl f1
+ .type f1,@function
+f1:
+ nop
+ stqd $0,16($1)
+ ai $1,$1,-64
+ stqd $1,0($1)
+ brsl $0,f2
+ brsl $0,f3
+ .fill 800
+ br .Lf1.part2
+ .size f1,.-f1
+
+ .section ".f1.part2","ax",@progbits
+.Lf1.part2:
+ ai $1,$1,64
+ lqd $0,16($1)
+ bi $0
+ .fill 800
+ .size .Lf1.part2,.-.Lf1.part2
+
+ .section ".f2.part1","ax",@progbits
+ .globl f2
+ .type f2,@function
+f2:
+ ai $1,$1,-128
+ stqd $1,0($1)
+ .fill 512
+ ai $1,$1,128
+ bi $0
+ .size f2,.-f2
+
+ .section ".f3.part1","ax",@progbits
+ .type f3,@function
+f3:
+ .fill 256
+ bi $0
+ .size f3,.-f3
+
+ .section ".f4.part1","ax",@progbits
+ .type f4,@function
+f4:
+ stqd $(0),16($1)
+ stqd $1,-512($1)
+ ai $1,$1,-512
+ brasl $0,f2
+ .fill 800
+ br .Lf4.part2
+ .size f4,.-f4
+
+ .section ".f4.part2","ax",@progbits
+.Lf4.part2:
+#alloca
+ ilhu $3,-4000@h
+ iohl $3,-4000@l
+ a $4,$1,$3
+ lnop
+ ori $1,$4,0
+ stqd $4,0($4)
+ brsl $0,f5
+#recursion
+ brsl $0,f4
+ lqd $1,0($1)
+ .fill 800
+ br .Lf4.part3
+ .size .Lf4.part2,.-.Lf4.part2
+
+ .section ".f4.part3","ax",@progbits
+.Lf4.part3:
+#recursion
+ brasl $0,f4
+ brsl $0,f4
+ .fill 800
+ br .Lf4.part4
+ .size .Lf4.part3,.-.Lf4.part3
+
+ .section ".f4.part4","ax",@progbits
+.Lf4.part4:
+ .fill 800
+ ila $3,512
+ a $1,$1,$3
+ lqd $0,16($1)
+#sibling call
+ bra f5
+ .size .Lf4.part4,.-.Lf4.part4
+
+ .section ".f5.part1","ax",@progbits
+ .type f5,@function
+f5:
+ stqd $(0),16($1)
+ stqd $1,-512($1)
+ ai $1,$1,-512
+ brsl $0,f5
+ .fill 800
+ ila $3,512
+ a $1,$1,$3
+ lqd $0,16($1)
+ bi $0
+ .size f5,.-f5
diff --git a/binutils-2.21/ld/testsuite/ld-spu/ovl.d b/binutils-2.21/ld/testsuite/ld-spu/ovl.d
new file mode 100644
index 0000000..cbf7573
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-spu/ovl.d
@@ -0,0 +1,179 @@
+#source: ovl.s
+#ld: -N -T ovl1.lnk -T ovl.lnk --emit-relocs
+#objdump: -D -r
+
+.*elf32-spu
+
+Disassembly of section \.text:
+
+00000100 <_start>:
+.* ai \$1,\$1,-32
+.* xor \$0,\$0,\$0
+.* stqd \$0,0\(\$1\)
+.* stqd \$0,16\(\$1\)
+.* brsl \$0,.* <00000000\.ovl_call\.f1_a1>.*
+.*SPU_REL16 f1_a1
+.* brsl \$0,.* <00000000\.ovl_call\.f2_a1>.*
+.*SPU_REL16 f2_a1
+.* brsl \$0,.* <00000000\.ovl_call\.f1_a2>.*
+.*SPU_REL16 f1_a2
+.* ila \$9,.*
+.*SPU_ADDR18 f2_a2
+.* bisl \$0,\$9
+.* ai \$1,\$1,32 # 20
+.* br 100 <_start> # 100
+.*SPU_REL16 _start
+
+0000012c <f0>:
+.* bi \$0
+
+#...
+[0-9a-f]+ <__ovly_return>:
+#...
+[0-9a-f]+ <__ovly_load>:
+#...
+[0-9a-f]+ <_ovly_debug_event>:
+#...
+00000330 <00000000\.ovl_call\.f1_a1>:
+.* ila \$78,1
+.* lnop
+.* ila \$79,1024 # 400
+.* bra? .* <__ovly_load>.*
+
+00000340 <00000000\.ovl_call\.f2_a1>:
+.* ila \$78,1
+.* lnop
+.* ila \$79,1028 # 404
+.* bra? .* <__ovly_load>.*
+
+00000350 <00000000.ovl_call.f1_a2>:
+.* ila \$78,2
+.* lnop
+.* ila \$79,1024 # 400
+.* bra? .* <__ovly_load>.*
+
+00000360 <00000000\.ovl_call\.f2_a2>:
+.* ila \$78,2
+.* lnop
+.* ila \$79,1060 # 424
+.* bra? .* <__ovly_load>.*
+
+00000370 <00000000\.ovl_call\.f4_a1>:
+.* ila \$78,1
+.* lnop
+.* ila \$79,1040 # 410
+.* bra? .* <__ovly_load>.*
+
+00000380 <00000000.ovl_call.14:8>:
+.* ila \$78,2
+.* lnop
+.* ila \$79,1076 # 434
+.* bra? .* <__ovly_load>.*
+
+#00000330 <00000000\.ovl_call\.f1_a1>:
+#.* bra?sl \$75,.* <__ovly_load>.*
+#.*00 04 04 00.*
+#
+#00000338 <00000000\.ovl_call\.f2_a1>:
+#.* bra?sl \$75,.* <__ovly_load>.*
+#.*00 04 04 04.*
+#
+#00000340 <00000000\.ovl_call\.f1_a2>:
+#.* bra?sl \$75,.* <__ovly_load>.*
+#.*00 08 04 00.*
+#
+#00000348 <00000000\.ovl_call\.f2_a2>:
+#.* bra?sl \$75,.* <__ovly_load>.*
+#.*00 08 04 24.*
+#
+#00000350 <00000000\.ovl_call\.f4_a1>:
+#.* bra?sl \$75,.* <__ovly_load>.*
+#.*00 04 04 10.*
+#
+#00000358 <00000000.ovl_call.14:8>:
+#.* bra?sl \$75,.* <__ovly_load>.*
+#.*00 08 04 34.*
+
+Disassembly of section \.ov_a1:
+
+00000400 <f1_a1>:
+.* br .* <f3_a1>.*
+.*SPU_REL16 f3_a1
+
+00000404 <f2_a1>:
+.* ila \$3,.*
+.*SPU_ADDR18 f4_a1
+.* bi \$0
+
+0000040c <f3_a1>:
+.* bi \$0
+
+00000410 <f4_a1>:
+.* bi \$0
+ \.\.\.
+Disassembly of section \.ov_a2:
+
+00000400 <f1_a2>:
+.* stqd \$0,16\(\$1\)
+.* stqd \$1,-32\(\$1\)
+.* ai \$1,\$1,-32
+.* brsl \$0,12c <f0> # 12c
+.*SPU_REL16 f0
+.* brsl \$0,.* <00000000\.ovl_call\.f1_a1>.*
+.*SPU_REL16 f1_a1
+.* brsl \$0,.* <f3_a2>.*
+.*SPU_REL16 f3_a2
+.* lqd \$0,48\(\$1\) # 30
+.* ai \$1,\$1,32 # 20
+.* bi \$0
+
+00000424 <f2_a2>:
+.* ilhu \$3,.*
+.*SPU_ADDR16_HI f4_a2
+.* iohl \$3,.*
+.*SPU_ADDR16_LO f4_a2
+.* bi \$0
+
+00000430 <f3_a2>:
+.* bi \$0
+
+00000434 <f4_a2>:
+.* br .* <f3_a2>.*
+.*SPU_REL16 f3_a2
+ \.\.\.
+Disassembly of section .data:
+
+00000440 <_ovly_table-0x10>:
+ 440: 00 00 00 00 .*
+ 444: 00 00 00 01 .*
+ \.\.\.
+00000450 <_ovly_table>:
+ 450: 00 00 04 00 .*
+ 454: 00 00 00 20 .*
+# 458: 00 00 03 40 .*
+ 458: 00 00 01 00 .*
+ 45c: 00 00 00 01 .*
+ 460: 00 00 04 00 .*
+ 464: 00 00 00 40 .*
+# 468: 00 00 03 60 .*
+ 468: 00 00 01 20 .*
+ 46c: 00 00 00 01 .*
+
+00000470 <_ovly_buf_table>:
+ 470: 00 00 00 00 .*
+
+Disassembly of section \.toe:
+
+00000480 <_EAR_>:
+ \.\.\.
+Disassembly of section \.note\.spu_name:
+
+.* <\.note\.spu_name>:
+.*: 00 00 00 08 .*
+.*: 00 00 00 0c .*
+.*: 00 00 00 01 .*
+.*: 53 50 55 4e .*
+.*: 41 4d 45 00 .*
+.*: 74 6d 70 64 .*
+.*: 69 72 2f 64 .*
+.*: 75 6d 70 00 .*
diff --git a/binutils-2.21/ld/testsuite/ld-spu/ovl.lnk b/binutils-2.21/ld/testsuite/ld-spu/ovl.lnk
new file mode 100644
index 0000000..0015652
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-spu/ovl.lnk
@@ -0,0 +1,7 @@
+SECTIONS
+{
+ . = SIZEOF_HEADERS;
+ .text : { *(.text) *(.stub) }
+ .data : { *(.data) *(.ovtab) }
+ .bss : { *(.bss) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-spu/ovl.s b/binutils-2.21/ld/testsuite/ld-spu/ovl.s
new file mode 100644
index 0000000..2ca380a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-spu/ovl.s
@@ -0,0 +1,82 @@
+ .text
+ .p2align 2
+ .globl _start
+_start:
+ ai sp,sp,-32
+ xor lr,lr,lr
+ stqd lr,0(sp)
+ stqd lr,16(sp)
+ brsl lr,f1_a1
+ brsl lr,f2_a1
+ brsl lr,f1_a2
+ ila 9,f2_a2
+ bisl lr,9
+ ai sp,sp,32
+ br _start
+
+ .type f0,@function
+f0:
+ bi lr
+ .size f0,.-f0
+
+ .section .ov_a1,"ax",@progbits
+ .p2align 2
+ .global f1_a1
+ .type f1_a1,@function
+f1_a1:
+ br f3_a1
+ .size f1_a1,.-f1_a1
+
+ .global f2_a1
+ .type f2_a1,@function
+f2_a1:
+ ila 3,f4_a1
+ bi lr
+ .size f2_a1,.-f2_a1
+
+ .global f3_a1
+ .type f3_a1,@function
+f3_a1:
+ bi lr
+ .size f3_a1,.-f3_a1
+
+ .global f4_a1
+ .type f4_a1,@function
+f4_a1:
+ bi lr
+ .size f4_a1,.-f4_a1
+
+
+ .section .ov_a2,"ax",@progbits
+ .p2align 2
+ .global f1_a2
+ .type f1_a2,@function
+f1_a2:
+ stqd lr,16(sp)
+ stqd sp,-32(sp)
+ ai sp,sp,-32
+ brsl lr,f0
+ brsl lr,f1_a1
+ brsl lr,f3_a2
+ lqd lr,48(sp)
+ ai sp,sp,32
+ bi lr
+ .size f1_a2,.-f1_a2
+
+ .global f2_a2
+ .type f2_a2,@function
+f2_a2:
+ ilhu 3,f4_a2@h
+ iohl 3,f4_a2@l
+ bi lr
+ .size f2_a2,.-f2_a2
+
+ .type f3_a2,@function
+f3_a2:
+ bi lr
+ .size f3_a2,.-f3_a2
+
+ .type f4_a2,@function
+f4_a2:
+ br f3_a2
+ .size f4_a2,.-f4_a2
diff --git a/binutils-2.21/ld/testsuite/ld-spu/ovl1.lnk b/binutils-2.21/ld/testsuite/ld-spu/ovl1.lnk
new file mode 100644
index 0000000..5fd4844
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-spu/ovl1.lnk
@@ -0,0 +1,9 @@
+SECTIONS
+{
+ OVERLAY 0x400 :
+ {
+ .ov_a1 { *(.ov_a1) }
+ .ov_a2 { *(.ov_a2) }
+ }
+}
+INSERT AFTER .text;
diff --git a/binutils-2.21/ld/testsuite/ld-spu/ovl2.d b/binutils-2.21/ld/testsuite/ld-spu/ovl2.d
new file mode 100644
index 0000000..b1e344c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-spu/ovl2.d
@@ -0,0 +1,145 @@
+#source: ovl2.s
+#ld: -N -T ovl2.lnk -T ovl.lnk --emit-relocs
+#objdump: -D -r
+
+.*elf32-spu
+
+Disassembly of section \.text:
+
+00000100 <_start>:
+.* brsl \$0,.* <00000000\.ovl_call\.f1_a1>.*
+.*SPU_REL16 f1_a1
+.* brsl \$0,.* <00000000\.ovl_call\.setjmp>.*
+.*SPU_REL16 setjmp
+.* br 100 <_start> # 100
+.*SPU_REL16 _start
+
+0000010c <setjmp>:
+.* bi \$0
+
+00000110 <longjmp>:
+.* bi \$0
+
+.*00 00 03 40.*
+.*SPU_ADDR32 \.ov_a1\+0x14
+ \.\.\.
+#...
+00000320 <00000000\.ovl_call.f1_a1>:
+.* ila \$78,1
+.* lnop
+.* ila \$79,1040 # 410
+.* bra? .* <__ovly_load>.*
+
+00000330 <00000000\.ovl_call.setjmp>:
+.* ila \$78,0
+.* lnop
+.* ila \$79,268 # 10c
+.* bra? .* <__ovly_load>.*
+
+00000340 <00000000\.ovl_call\.13:5>:
+.* ila \$78,1
+.* lnop
+.* ila \$79,1044 # 414
+.* bra? .* <__ovly_load>.*
+
+00000350 <_SPUEAR_f1_a2>:
+.* ila \$78,2
+.* lnop
+.* ila \$79,1040 # 410
+.* bra? .* <__ovly_load>.*
+
+#00000318 <00000000\.ovl_call.f1_a1>:
+#.* bra?sl \$75,.* <__ovly_load>.*
+#.*00 04 04 00.*
+#
+#00000320 <00000000\.ovl_call.setjmp>:
+#.* bra?sl \$75,.* <__ovly_load>.*
+#.*00 00 01 0c.*
+#
+#00000328 <_SPUEAR_f1_a2>:
+#.* bra?sl \$75,.* <__ovly_load>.*
+#.*00 08 04 00.*
+
+Disassembly of section \.ov_a1:
+
+00000400 <00000001\.ovl_call\.14:6>:
+.* ila \$78,2
+.* lnop
+.* ila \$79,1044 # 414
+.* bra? .* <__ovly_load>.*
+
+00000410 <f1_a1>:
+.* bi \$0
+.*00 00 04 14.*
+.*SPU_ADDR32 \.ov_a1\+0x14
+.*00 00 04 20.*
+.*SPU_ADDR32 \.ov_a1\+0x20
+.*00 00 04 00.*
+.*SPU_ADDR32 \.ov_a2\+0x14
+
+Disassembly of section \.ov_a2:
+
+00000400 <00000002\.ovl_call\.13:5>:
+.* ila \$78,1
+.* lnop
+.* ila \$79,1056 # 420
+.* bra? .* <__ovly_load>.*
+
+00000410 <f1_a2>:
+.* br .* <longjmp>.*
+.*SPU_REL16 longjmp
+.*00 00 04 00.*
+.*SPU_ADDR32 \.ov_a1\+0x20
+.*00 00 04 1c.*
+.*SPU_ADDR32 \.ov_a2\+0x1c
+.*00 00 00 00.*
+
+Disassembly of section \.data:
+
+00000420 <_ovly_table-0x10>:
+.*00 00 00 00 .*
+.*00 00 00 01 .*
+ \.\.\.
+00000430 <_ovly_table>:
+.*00 00 04 00 .*
+.*00 00 00 20 .*
+#.*00 00 03 10 .*
+.*00 00 01 00 .*
+.*00 00 00 01 .*
+.*00 00 04 00 .*
+.*00 00 00 20 .*
+#.*00 00 03 20 .*
+.*00 00 01 20 .*
+.*00 00 00 01 .*
+
+00000450 <_ovly_buf_table>:
+.*00 00 00 00 .*
+
+Disassembly of section \.toe:
+
+00000460 <_EAR_>:
+ \.\.\.
+
+Disassembly of section .nonalloc:
+
+00000000 <.nonalloc>:
+.*00 00 04 14.*
+.*SPU_ADDR32 \.ov_a1\+0x14
+.*00 00 04 20.*
+.*SPU_ADDR32 \.ov_a1\+0x20
+.*00 00 04 14.*
+.*SPU_ADDR32 \.ov_a2\+0x14
+.*00 00 04 1c.*
+.*SPU_ADDR32 \.ov_a2\+0x1c
+
+Disassembly of section \.note\.spu_name:
+
+.* <\.note\.spu_name>:
+.*: 00 00 00 08 .*
+.*: 00 00 00 0c .*
+.*: 00 00 00 01 .*
+.*: 53 50 55 4e .*
+.*: 41 4d 45 00 .*
+.*: 74 6d 70 64 .*
+.*: 69 72 2f 64 .*
+.*: 75 6d 70 00 .*
diff --git a/binutils-2.21/ld/testsuite/ld-spu/ovl2.lnk b/binutils-2.21/ld/testsuite/ld-spu/ovl2.lnk
new file mode 100644
index 0000000..9916ab2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-spu/ovl2.lnk
@@ -0,0 +1,10 @@
+SECTIONS
+{
+ OVERLAY 0x400 :
+ {
+ .ov_a1 { *(.ov_a1) }
+ .ov_a2 { *(.ov_a2) }
+ .empty { empty.o?(.text) }
+ }
+}
+INSERT BEFORE .data;
diff --git a/binutils-2.21/ld/testsuite/ld-spu/ovl2.s b/binutils-2.21/ld/testsuite/ld-spu/ovl2.s
new file mode 100644
index 0000000..9147a78
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-spu/ovl2.s
@@ -0,0 +1,52 @@
+ .text
+ .p2align 2
+ .global _start
+_start:
+ brsl lr,f1_a1
+ brsl lr,setjmp
+ br _start
+
+ .type setjmp,@function
+ .global setjmp
+setjmp:
+ bi lr
+ .size setjmp,.-setjmp
+
+ .type longjmp,@function
+longjmp:
+ bi lr
+ .size longjmp,.-longjmp
+
+ .word .L1
+
+ .section .ov_a1,"ax",@progbits
+ .p2align 2
+ .global f1_a1
+ .type f1_a1,@function
+f1_a1:
+ bi lr
+ .size f1_a1,.-f1_a1
+
+.L1:
+ .word .L1, .L2, .L3
+.L2:
+
+ .section .ov_a2,"ax",@progbits
+ .p2align 2
+ .type f1_a2,@function
+f1_a2:
+ br longjmp
+ .size f1_a2,.-f1_a2
+
+.L3:
+ .word .L2, .L4
+.L4:
+
+ .section .nonalloc,"",@progbits
+ .word .L1,.L2,.L3,.L4
+
+_SPUEAR_f1_a2 = f1_a2
+ .global _SPUEAR_f1_a2
+
+_SPUEAR_version=3
+ .global _SPUEAR_version
diff --git a/binutils-2.21/ld/testsuite/ld-spu/pic.d b/binutils-2.21/ld/testsuite/ld-spu/pic.d
new file mode 100644
index 0000000..87edc1d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-spu/pic.d
@@ -0,0 +1,105 @@
+#source: pic.s
+#source: picdef.s
+#ld: --emit-relocs
+#objdump: -D -r
+
+.*elf32-spu
+
+
+Disassembly of section \.text:
+
+00000000 <before>:
+ \.\.\.
+
+00000008 <_start>:
+ 8: 42 00 08 02 ila \$2,10 <_start\+0x8>
+ 8: SPU_ADDR18 \.text\+0x10
+ c: 33 00 00 fe brsl \$126,10 <_start\+0x8>
+ c: SPU_REL16 \.text\+0x10
+ 10: 08 1f 81 7e sf \$126,\$2,\$126
+ 14: 42 00 02 04 ila \$4,4 <before\+0x4>
+ 14: SPU_ADDR18 \.text\+0x4
+ 18: 42 00 42 05 ila \$5,84 <end>
+ 18: SPU_ADDR18 \.text\+0x84
+ 1c: 42 00 04 06 ila \$6,8 <_start>
+ 1c: SPU_ADDR18 _start
+ 20: 42 00 42 07 ila \$7,84 <end>
+ 20: SPU_ADDR18 \.text\+0x84
+ 24: 18 1f 82 04 a \$4,\$4,\$126
+ 24: SPU_ADD_PIC before\+0x4
+ 28: 18 1f 82 85 a \$5,\$5,\$126
+ 28: SPU_ADD_PIC after\+0xfffffffc
+ 2c: 18 1f 83 06 a \$6,\$6,\$126
+ 2c: SPU_ADD_PIC _start
+ 30: 18 1f 83 87 a \$7,\$7,\$126
+ 30: SPU_ADD_PIC end
+ 34: 42 00 00 0e ila \$14,0
+ 34: SPU_ADDR18 \.text
+ 38: 18 1f 87 0e a \$14,\$14,\$126
+ 38: SPU_ADD_PIC before
+ 3c: 42 00 00 03 ila \$3,0
+ 3c: SPU_ADDR18 undef
+ 40: 1c 00 01 83 ai \$3,\$3,0
+ 40: SPU_ADD_PIC undef
+ 44: 41 00 00 07 ilhu \$7,0
+ 44: SPU_ADDR16_HI ext
+ 48: 60 ab 3c 07 iohl \$7,22136 # 5678
+ 48: SPU_ADDR16_LO ext
+ 4c: 18 1f 83 84 a \$4,\$7,\$126
+ 4c: SPU_ADD_PIC ext
+ 50: 42 00 80 09 ila \$9,100 <loc>
+ 50: SPU_ADDR18 \.data
+ 54: 18 1f 84 85 a \$5,\$9,\$126
+ 54: SPU_ADD_PIC loc
+ 58: 42 00 88 08 ila \$8,110 <glob>
+ 58: SPU_ADDR18 glob
+ 5c: 18 1f 84 06 a \$6,\$8,\$126
+ 5c: SPU_ADD_PIC glob
+ 60: 42 00 90 09 ila \$9,120 <__bss_start>
+ 60: SPU_ADDR18 _end
+ 64: 18 1f 84 89 a \$9,\$9,\$126
+ 64: SPU_ADD_PIC _end
+ 68: 12 02 39 85 hbrr 7c <acall>,1234 <abscall> # 1234
+ 68: SPU_REL16 abscall
+ 6c: 33 ff f2 82 lqr \$2,0 <before>
+ 6c: SPU_REL16 undef
+ 70: 23 ff f2 02 stqr \$2,0 <before>
+ 70: SPU_REL16 undef
+ 74: 33 8a c0 83 lqr \$3,5678 <ext> # 5678
+ 74: SPU_REL16 ext
+ 78: 33 8a c2 04 lqr \$4,5688 <ext\+0x10> # 5688
+ 78: SPU_REL16 ext\+0x10
+
+0000007c <acall>:
+ 7c: 33 02 37 00 brsl \$0,1234 <abscall> # 1234
+ 7c: SPU_REL16 abscall
+ 80: 32 02 36 80 br 1234 <abscall> # 1234
+ 80: SPU_REL16 abscall
+
+00000084 <end>:
+ 84: 00 00 00 00 stop
+
+00000088 <after>:
+ 88: 00 00 00 00 stop
+
+Disassembly of section \.data:
+
+00000100 <loc>:
+ 100: 00 00 00 01 stop
+ \.\.\.
+
+00000110 <glob>:
+ 110: 00 00 00 02 stop
+ \.\.\.
+
+Disassembly of section \.note\.spu_name:
+
+00000000 <\.note\.spu_name>:
+.*
+.*
+.*
+.*
+.*
+.*
+.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-spu/pic.s b/binutils-2.21/ld/testsuite/ld-spu/pic.s
new file mode 100644
index 0000000..67ee7bc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-spu/pic.s
@@ -0,0 +1,68 @@
+ .global _end
+ .global _start
+ .global glob
+ .weak undef
+
+ .section .text.a,"ax"
+before:
+ .long 0
+ .long 0
+
+ .section .text.b,"ax"
+_start:
+ ila 2,.+8
+ brsl 126,.+4
+ sf 126,2,126
+ ila 4,before+4
+ ila 5,after-4
+ ila 6,_start
+ ila 7,end
+ .reloc .,SPU_ADD_PIC,before+4
+ a 4,4,126
+ .reloc .,SPU_ADD_PIC,after-4
+ a 5,5,126
+ .reloc .,SPU_ADD_PIC,_start
+ a 6,6,126
+ .reloc .,SPU_ADD_PIC,end
+ a 7,7,126
+ ila 14,before
+ .reloc .,SPU_ADD_PIC,before
+ a 14,14,126
+
+ ila 3,undef
+ .reloc .,SPU_ADD_PIC,undef
+ a 3,3,126
+ ilhu 7,ext@h
+ iohl 7,ext@l
+ .reloc .,SPU_ADD_PIC,ext
+ a 4,7,126
+ ila 9,loc
+ .reloc .,SPU_ADD_PIC,loc
+ a 5,9,126
+ ila 8,glob
+ .reloc .,SPU_ADD_PIC,glob
+ a 6,8,126
+ ila 9,_end
+ .reloc .,SPU_ADD_PIC,_end
+ a 9,9,126
+
+ hbrr acall,abscall
+ lqr 2,undef
+ stqr 2,undef
+ lqr 3,ext
+ lqr 4,ext+16
+acall:
+ brsl 0,abscall
+ br abscall
+end:
+
+ .section .text.c,"ax"
+ .long 0
+after:
+ .long 0
+
+ .data
+loc:
+ .long 1,0,0,0
+glob:
+ .long 2,0,0,0
diff --git a/binutils-2.21/ld/testsuite/ld-spu/picdef.s b/binutils-2.21/ld/testsuite/ld-spu/picdef.s
new file mode 100644
index 0000000..4df3e4b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-spu/picdef.s
@@ -0,0 +1,5 @@
+ .global abscall
+ .global ext
+
+abscall = 0x1234
+ext = 0x5678
diff --git a/binutils-2.21/ld/testsuite/ld-spu/spu.exp b/binutils-2.21/ld/testsuite/ld-spu/spu.exp
new file mode 100644
index 0000000..39d1c96
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-spu/spu.exp
@@ -0,0 +1,94 @@
+# Expect script for ld-spu tests
+# Copyright (C) 2006, 2007 Free Software Foundation
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+if { ![istarget "spu-*-*"] } {
+ return
+}
+
+proc embed_test { } {
+ global subdir srcdir
+ global AS ASFLAGS LD LDFLAGS READELF READELFFLAGS
+
+ set cmd "$AS $ASFLAGS -o tmpdir/ear.o $srcdir/$subdir/ear.s"
+ send_log "$cmd\n"
+ set cmdret [catch "exec $cmd" comp_output]
+ set comp_output [prune_warnings $comp_output]
+ if { $cmdret != 0 || $comp_output != ""} then {
+ send_log "$comp_output\n"
+ verbose "$comp_output" 3
+ fail "ear assembly"
+ return
+ }
+
+ set cmd "$LD $LDFLAGS -o tmpdir/ear tmpdir/ear.o"
+ send_log "$cmd\n"
+ set cmdret [catch "exec $cmd" comp_output]
+ set comp_output [prune_warnings $comp_output]
+ if { $cmdret != 0 || $comp_output != ""} then {
+ send_log "$comp_output\n"
+ verbose "$comp_output" 3
+ fail "ear link"
+ return
+ }
+
+ set cmd "sh $srcdir/../../binutils/embedspu.sh -m32 ear tmpdir/ear tmpdir/embed.o"
+ send_log "$cmd\n"
+ set cmdret [catch "exec $cmd" comp_output]
+ set comp_output [prune_warnings $comp_output]
+ if { $cmdret != 0 || $comp_output != ""} then {
+ send_log "$comp_output\n"
+ verbose "$comp_output" 3
+ if { [regexp "unknown pseudo-op: `.reloc'" $comp_output] } {
+ untested "ear embedspu"
+ return
+ }
+ fail "ear embedspu"
+ return
+ }
+
+ set cmd "$READELF $READELFFLAGS -r --wide tmpdir/embed.o > tmpdir/embed.out"
+ send_log "$cmd\n"
+ set cmdret [catch "exec $cmd" comp_output]
+ set comp_output [prune_warnings $comp_output]
+ if { $cmdret != 0 || $comp_output != ""} then {
+ send_log "$comp_output\n"
+ verbose "$comp_output" 3
+ fail "ear embed readelf"
+ return
+ }
+
+ if { [regexp_diff "tmpdir/embed.out" $srcdir/$subdir/embed.rd] } then {
+ fail "ear embed output"
+ return
+ }
+
+ pass "ear embed"
+}
+
+set rd_test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
+foreach sputest $rd_test_list {
+ verbose [file rootname $sputest]
+ run_dump_test [file rootname $sputest]
+}
+
+if { [isbuild "powerpc*-*-linux*"] } {
+ embed_test
+}
diff --git a/binutils-2.21/ld/testsuite/ld-srec/sr1.c b/binutils-2.21/ld/testsuite/ld-srec/sr1.c
new file mode 100644
index 0000000..d7de977
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-srec/sr1.c
@@ -0,0 +1,25 @@
+/* This file is compiled and linked into the S-record format. */
+
+extern int e1;
+extern int e2;
+int i;
+int j = 1;
+static int k;
+static int l = 1;
+static char ab[] = "This is a string constant";
+
+extern int fn1 ();
+extern int fn2 ();
+
+int
+main ()
+{
+ fn1 (ab);
+ fn2 ("static string constant");
+ return e1 + e2 + i + j + k + l;
+}
+
+void
+__main ()
+{
+}
diff --git a/binutils-2.21/ld/testsuite/ld-srec/sr2.c b/binutils-2.21/ld/testsuite/ld-srec/sr2.c
new file mode 100644
index 0000000..5736cfa
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-srec/sr2.c
@@ -0,0 +1,18 @@
+/* This file is compiled and linked into the S-record format. */
+
+int e1;
+int e2 = 1;
+
+int
+fn1 (s)
+ char *s;
+{
+ return s[e1];
+}
+
+int
+fn2 (s)
+ char *s;
+{
+ return s[e2];
+}
diff --git a/binutils-2.21/ld/testsuite/ld-srec/sr3.cc b/binutils-2.21/ld/testsuite/ld-srec/sr3.cc
new file mode 100644
index 0000000..0b5fa7e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-srec/sr3.cc
@@ -0,0 +1,127 @@
+// This file is compiled and linked into the S-record format.
+
+#define FOO_MSG_LEN 80
+
+class Foo {
+ static int foos;
+ int i;
+ static const int len = FOO_MSG_LEN;
+ char message[len];
+public:
+ static void init_foo ();
+ static int nb_foos() { return foos; }
+ Foo();
+ Foo(const char* message);
+ Foo(const Foo&);
+ Foo & operator= (const Foo&);
+ ~Foo ();
+};
+
+static Foo static_foo( "static_foo");
+
+int
+main ()
+{
+ Foo automatic_foo( "automatic_foo");
+ return 0;
+}
+
+void
+terminate(void)
+{
+ /* This recursive call prevents a compiler warning that the noreturn
+ function terminate actually does return. */
+ terminate ();
+}
+
+extern "C" {
+void
+__main ()
+{
+}
+
+void
+__builtin_delete ()
+{
+}
+
+void
+__builtin_new ()
+{
+}
+
+void
+__throw ()
+{
+}
+
+void
+__rethrow ()
+{
+}
+
+void
+__terminate ()
+{
+}
+
+void *__eh_pc;
+
+void ***
+__get_dynamic_handler_chain ()
+{
+ return 0;
+}
+
+void *
+__get_eh_context ()
+{
+ return 0;
+}
+
+}
+
+int Foo::foos = 0;
+
+void Foo::init_foo ()
+{
+ foos = 80;
+}
+
+Foo::Foo ()
+{
+ i = ++foos;
+}
+
+Foo::Foo (const char*)
+{
+ i = ++foos;
+}
+
+Foo::Foo (const Foo& foo)
+{
+ i = ++foos;
+ for (int k = 0; k < FOO_MSG_LEN; k++)
+ message[k] = foo.message[k];
+}
+
+Foo& Foo::operator= (const Foo& foo)
+{
+ for (int k = 0; k < FOO_MSG_LEN; k++)
+ message[k] = foo.message[k];
+ return *this;
+}
+
+Foo::~Foo ()
+{
+ foos--;
+}
+
+void *__dso_handle;
+
+extern "C"
+int
+__cxa_atexit (void)
+{
+ return 0;
+}
diff --git a/binutils-2.21/ld/testsuite/ld-srec/srec.exp b/binutils-2.21/ld/testsuite/ld-srec/srec.exp
new file mode 100644
index 0000000..0a3dc44
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-srec/srec.exp
@@ -0,0 +1,405 @@
+# Test linking directly to S-records.
+# By Ian Lance Taylor, Cygnus Support.
+# Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007, 2009
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+# Get the offset from an S-record line to the start of the data.
+
+proc srec_off { l } {
+ if [string match "S1*" $l] {
+ return 8
+ } else { if [string match "S2*" $l] {
+ return 10
+ } else { if [string match "S3*" $l] {
+ return 12
+ } else {
+ return -1
+ } } }
+}
+
+# See if an S-record line contains only zero data.
+
+proc srec_zero { l } {
+ if [string match "S\[0789\]*" $l] {
+ return 1
+ }
+
+ # Strip the address and checksum.
+ if [string match "S\[123\]*" $l] {
+ set l [string range $l [srec_off $l] [expr [string length $l] - 3]]
+ } else {
+ return 0
+ }
+
+ # The rest must be zero.
+ return [string match "" [string trim $l "0"]]
+}
+
+# Get the address of an S-record line.
+
+proc srec_addr { l } {
+ if [string match "S\[123\]*" $l] {
+ set addr [string range $l 4 [expr [srec_off $l] - 1]]
+ } else {
+ return -1
+ }
+
+ return "0x$addr"
+}
+
+# Get the number of data bytes in an S-record line.
+
+proc srec_len { l } {
+ if ![string match "S\[123\]*" $l] {
+ return 0
+ }
+
+ return [expr "0x[string range $l 2 3]" - ([srec_off $l] - 4) / 2 - 1]
+}
+
+# Extract bytes from an S-record line.
+
+proc srec_extract { l start len } {
+ set off [srec_off $l]
+ set rlen [srec_len $l]
+ set stop [expr $start + $len]
+ if { $stop > $rlen } {
+ set stop [expr $rlen]
+ }
+ set start [expr $start * 2 + $off]
+ set stop [expr $stop * 2 + $off - 1]
+ return [string range $l $start $stop]
+}
+
+# See if a range of bytes in an S-record line is all zeroes.
+
+proc srec_zero_range { l start len } {
+ return [string match "" [string trim [srec_extract $l $start $len] "0"]]
+}
+
+# Trim an S-record line such that the specified number of bytes remain
+# at the end.
+
+proc srec_trim { l leave } {
+ set off [srec_off $l]
+ set addr [srec_addr $l]
+ set len [srec_len $l]
+
+ if { $leave >= $len } {
+ return $l
+ }
+
+ set s1 [string range $l 0 1]
+ set s2 [format "%02x" [expr ($off - 4) / 2 + $leave + 1]]
+ set s3 [format "%0[expr $off - 4]x" [expr $addr + $len - $leave]]
+ set s4 [string range $l [expr [string length $l] - ($leave * 2) - 2] end]
+ set s "${s1}${s2}${s3}${s4}"
+
+ verbose "srec_trim { '$l' $leave } returning '$s'" 2
+
+ return $s
+}
+
+# Report failure when comparing S-record lines
+
+proc srec_compare_fail { which l1 l2 } {
+ send_log "comparison failure $which:\n$l1\n$l2\n"
+ verbose "comparison failure $which:\n$l1\n$l2"
+}
+
+# Compare S-record files. We don't want to fuss about things like
+# extra zeroes. Note that BFD always sorts S-records by address.
+
+proc srec_compare { f1 f2 } {
+ set e1 [gets $f1 l1]
+ set e2 [gets $f2 l2]
+
+ while { $e1 != -1 } {
+ set l1 [string trimright $l1 "\r\n"]
+ set l2 [string trimright $l2 "\r\n"]
+ if { $e2 == -1 } {
+ # If l1 contains data, it must be zero.
+ if ![srec_zero $l1] {
+ send_log "data after EOF: $l1\n"
+ verbose "data after EOF: $l1"
+ return 0
+ }
+ } else { if { [string compare $l1 $l2] == 0 } {
+ set e1 [gets $f1 l1]
+ set e2 [gets $f2 l2]
+ } else { if { [srec_zero $l1] } {
+ set e1 [gets $f1 l1]
+ } else { if { [srec_zero $l2] } {
+ set e2 [gets $f2 l2]
+ } else {
+ # The strings are not the same, and neither is all zeroes.
+ set a1 [srec_addr $l1]
+ set n1 [srec_len $l1]
+ set a2 [srec_addr $l2]
+ set n2 [srec_len $l2]
+
+ if { $a1 < $a2 && ![srec_zero_range $l1 0 [expr $a2 - $a1]] } {
+ verbose "$a1 $a2 [srec_extract $l1 0 [expr $a2 - $a1]]" 2
+ srec_compare_fail 1 $l1 $l2
+ return 0
+ }
+ if { $a2 < $a1 && ![srec_zero_range $l2 0 [expr $a1 - $a2]] } {
+ srec_compare_fail 2 $l1 $l2
+ return 0
+ }
+
+ # Here we know that any initial data in both lines is
+ # zero. Now make sure that any overlapping data matches.
+ if { $a1 < $a2 } {
+ set os1 [expr $a2 - $a1]
+ set os2 0
+ } else {
+ set os1 0
+ set os2 [expr $a1 - $a2]
+ }
+ if { $a1 + $n1 < $a2 + $n2 } {
+ set ol [expr $n1 - $os1]
+ } else {
+ set ol [expr $n2 - $os2]
+ }
+
+ set x1 [srec_extract $l1 $os1 $ol]
+ set x2 [srec_extract $l2 $os2 $ol]
+ if { [string compare $x1 $x2] != 0 } {
+ verbose "$os1 $ol $x1" 2
+ verbose "$os2 $ol $x2" 2
+ srec_compare_fail 3 $l1 $l2
+ return 0
+ }
+
+ # These strings match. Trim the data from the larger
+ # string, read a new copy of the smaller string, and
+ # continue.
+ if { $a1 + $n1 < $a2 + $n2 } {
+ set l2 [srec_trim $l2 [expr ($a2 + $n2) - ($a1 + $n1)]]
+ set e1 [gets $f1 l1]
+ } else { if { $a1 + $n1 > $a2 + $n2 } {
+ set l1 [srec_trim $l1 [expr ($a1 + $n1) - ($a2 + $n2)]]
+ set e2 [gets $f2 l2]
+ } else {
+ set e1 [gets $f1 l1]
+ set e2 [gets $f2 l2]
+ } }
+ } } } }
+ }
+
+ # We've reached the end of the first file. The remainder of the
+ # second file must contain only zeroes.
+ while { $e2 != -1 } {
+ set l2 [string trimright $l2 "\r\n"]
+ if ![srec_zero $l2] {
+ send_log "data after EOF: $l2\n"
+ verbose "data after EOF: $l2"
+ return 0
+ }
+ set e2 [gets $f2 l2]
+ }
+
+ return 1
+}
+
+# Link twice, objcopy, and compare
+
+proc run_srec_test { test objs } {
+ global ld
+ global objcopy
+ global sizeof_headers
+ global host_triplet
+
+ # Tell the ELF linker to not do anything clever with .eh_frame,
+ # not to put anything in small data, and define various symbols.
+ set flags "--traditional-format -G 0 "
+ append flags [ld_simple_link_defsyms]
+
+ # If the linker script uses SIZEOF_HEADERS, use a -Ttext argument
+ # to force both the normal link and the S-record link to be put in
+ # the same place. We don't always use -Ttext because it interacts
+ # poorly with a.out.
+
+ if { $sizeof_headers } {
+ set flags "$flags -Ttext 0x1000"
+ }
+
+ if [istarget sh64*-*-elf] {
+ # This is what gcc passes to ld by default.
+ set flags "$flags -mshelf32"
+ # SH64 targets cannot convert format in the linker
+ # using the -oformat command line switch.
+ setup_xfail "sh64*-*-*"
+ }
+
+ if {[istarget arm*-*-*] || \
+ [istarget strongarm*-*-*] || \
+ [istarget xscale*-*-*] || \
+ [istarget thumb-*-*] } {
+ # ARM targets cannot convert format in the linker
+ # using the --oformat command line switch
+ setup_xfail "*arm*-*-*"
+ setup_xfail "xscale-*-*"
+ setup_xfail "thumb-*-*"
+ }
+
+ # V850 targets need libgcc.a
+ if [istarget v850*-*-elf] {
+ set objs "$objs -L ../gcc -lgcc"
+ }
+
+ # Xtensa ELF targets relax by default; S-Record linker does not
+ if [istarget xtensa*-*-*] {
+ set flags "$flags -no-relax"
+ }
+
+ if { ![ld_simple_link $ld tmpdir/sr1 "$flags $objs"] \
+ || ![ld_simple_link $ld tmpdir/sr2.sr "$flags --oformat srec $objs"] } {
+ fail $test
+ return
+ }
+
+ send_log "$objcopy -O srec tmpdir/sr1 tmpdir/sr1.sr\n"
+ set exec_output [run_host_cmd "$objcopy" "-O srec tmpdir/sr1 tmpdir/sr1.sr"]
+ set exec_output [prune_warnings $exec_output]
+ if ![string match "" $exec_output] {
+ send_log "$exec_output\n"
+ verbose "$exec_output"
+ unresolved $test
+ return
+ }
+
+ set f1 [open tmpdir/sr1.sr r]
+ set f2 [open tmpdir/sr2.sr r]
+ if [srec_compare $f1 $f2] {
+ pass $test
+ } else {
+ fail $test
+ }
+ close $f1
+ close $f2
+}
+
+set test1 "S-records"
+set test2 "S-records with constructors"
+
+# See whether the default linker script uses SIZEOF_HEADERS.
+set exec_output [run_host_cmd "$ld" "--verbose"]
+set sizeof_headers [string match "*SIZEOF_HEADERS*" $exec_output]
+
+# First test linking a C program. We don't require any libraries. We
+# link it normally, and objcopy to the S-record format, and then link
+# directly to the S-record format, and require that the two files
+# contain the same data.
+
+if { ![is_remote host] && [which $CC] == 0 } {
+ untested $test1
+ untested $test2
+ return
+}
+
+if { ![ld_compile $CC $srcdir/$subdir/sr1.c tmpdir/sr1.o] \
+ || ![ld_compile $CC $srcdir/$subdir/sr2.c tmpdir/sr2.o] } {
+ unresolved $test1
+ unresolved $test2
+ return
+}
+
+# The i386-aout target is confused: the linker does not put the
+# sections where objdump finds them. I don't know which is wrong.
+setup_xfail "i*86-*-aout*"
+
+# These tests fail on the native MIPS ELF targets because the GP value
+# in the .reginfo section is not updated when the S-record version is
+# written out. The mips-elf target itself does not use a .reginfo section.
+setup_xfail "mips*-*-irix5*" "mips*-*-irix6*" "mips*-*-linux*"
+
+# The S-record linker doesn't do the magic TOC handling that XCOFF
+# linkers do.
+setup_xfail "*-*-aix*" "*-*-xcoff*"
+
+# The S-record linker doesn't build ARM/Thumb stubs.
+setup_xfail "arm-*-coff"
+setup_xfail "strongarm*-*-coff"
+setup_xfail "xscale*-*-coff"
+setup_xfail "arm-*-pe*"
+# setup_xfail "arm-*elf*"
+setup_xfail "thumb-*-coff*"
+setup_xfail "thumb-*-pe*"
+setup_xfail "thumb-*-elf*"
+setup_xfail "arm*-*-linux*"
+
+# The S-record linker doesn't include the .{zda} sections.
+setup_xfail "v850*-*-elf"
+
+# The S-record linker doesn't handle Alpha Elf relaxation.
+setup_xfail "alpha*-*-elf*" "alpha*-*-linux-*" "alpha*-*-gnu*"
+setup_xfail "alpha*-*-netbsd*"
+
+# The S-record linker hasn't any hope of coping with HPPA relocs.
+# Or MeP complex relocs.
+setup_xfail "hppa*-*-*" "mep-*-*"
+
+# The S-record linker doesn't handle IA64 Elf relaxation.
+setup_xfail "ia64-*-*"
+
+# The S-record linker doesn't support the special PE headers - the PE
+# emulation tries to write pe-specific information to the PE headers
+# in the output bfd, but it's not a PE bfd (it's an srec bfd)
+setup_xfail "*-*-cygwin*" "*-*-mingw*" "*-*-pe*" "*-*-winnt*"
+setup_xfail "score-*-*"
+
+# The S-record linker doesn't support Blackfin ELF FDPIC ABI.
+setup_xfail "bfin-*-linux-uclibc"
+
+run_srec_test $test1 "tmpdir/sr1.o tmpdir/sr2.o"
+
+# Now try linking a C++ program with global constructors and
+# destructors. Note that since we are not linking against any
+# libraries, this program won't actually work or anything.
+
+if { ![is_remote host] && [which $CXX] == 0 } {
+ untested $test2
+ return
+}
+
+if ![ld_compile "$CXX $CXXFLAGS -fno-exceptions" $srcdir/$subdir/sr3.cc tmpdir/sr3.o] {
+ unresolved $test2
+ return
+}
+
+# See above.
+setup_xfail "i*86-*-aout*"
+setup_xfail "mips*-*-irix5*" "mips*-*-irix6*" "mips*-*-linux*"
+setup_xfail "*-*-aix*" "*-*-xcoff*"
+setup_xfail "arm*-*-*"
+setup_xfail "strongarm*-*-*"
+setup_xfail "thumb-*-*"
+setup_xfail "v850*-*-elf"
+setup_xfail "alpha*-*-elf*" "alpha*-*-linux-*" "alpha*-*-gnu*"
+setup_xfail "alpha*-*-netbsd*"
+setup_xfail "hppa*-*-*" "mep-*-*"
+setup_xfail "ia64-*-*"
+setup_xfail "*-*-cygwin*" "*-*-mingw*" "*-*-pe*" "*-*-winnt*"
+setup_xfail "score-*-*"
+setup_xfail "bfin-*-linux-uclibc"
+
+run_srec_test $test2 "tmpdir/sr3.o"
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x-c62x.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x-c62x.d
new file mode 100644
index 0000000..53da208
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x-c62x.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c62x c62x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c62x.s
+#source: attr-arch-c62x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C62x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x-c64x+.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x-c64x+.d
new file mode 100644
index 0000000..49570fe
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x-c64x+.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c62x c64x+
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c62x.s
+#source: attr-arch-c64x+.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C64x\+
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x-c64x.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x-c64x.d
new file mode 100644
index 0000000..2ec8b6c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x-c64x.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c62x c64x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c62x.s
+#source: attr-arch-c64x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C64x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x-c674x.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x-c674x.d
new file mode 100644
index 0000000..4500114
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x-c674x.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c62x c674x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c62x.s
+#source: attr-arch-c674x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x-c67x+.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x-c67x+.d
new file mode 100644
index 0000000..a7a7c0e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x-c67x+.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c62x c67x+
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c62x.s
+#source: attr-arch-c67x+.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C67x\+
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x-c67x.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x-c67x.d
new file mode 100644
index 0000000..2d539df
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x-c67x.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c62x c67x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c62x.s
+#source: attr-arch-c67x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C67x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x.s
new file mode 100644
index 0000000..e69fbf4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c62x.s
@@ -0,0 +1 @@
+.arch c62x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+-c62x.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+-c62x.d
new file mode 100644
index 0000000..bd19310
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+-c62x.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c64x+ c62x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c64x+.s
+#source: attr-arch-c62x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C64x\+
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+-c64x+.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+-c64x+.d
new file mode 100644
index 0000000..3881215
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+-c64x+.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c64x+ c64x+
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c64x+.s
+#source: attr-arch-c64x+.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C64x\+
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+-c64x.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+-c64x.d
new file mode 100644
index 0000000..76a6296
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+-c64x.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c64x+ c64x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c64x+.s
+#source: attr-arch-c64x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C64x\+
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+-c674x.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+-c674x.d
new file mode 100644
index 0000000..7548fad
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+-c674x.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c64x+ c674x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c64x+.s
+#source: attr-arch-c674x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+-c67x+.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+-c67x+.d
new file mode 100644
index 0000000..ba6e135
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+-c67x+.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c64x+ c67x+
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c64x+.s
+#source: attr-arch-c67x+.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+-c67x.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+-c67x.d
new file mode 100644
index 0000000..63c4f58
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+-c67x.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c64x+ c67x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c64x+.s
+#source: attr-arch-c67x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+.s
new file mode 100644
index 0000000..2c2f210
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x+.s
@@ -0,0 +1 @@
+.arch c64x+
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x-c62x.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x-c62x.d
new file mode 100644
index 0000000..3aaf293
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x-c62x.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c64x c62x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c64x.s
+#source: attr-arch-c62x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C64x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x-c64x+.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x-c64x+.d
new file mode 100644
index 0000000..7c89f1e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x-c64x+.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c64x c64x+
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c64x.s
+#source: attr-arch-c64x+.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C64x\+
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x-c64x.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x-c64x.d
new file mode 100644
index 0000000..9274720
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x-c64x.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c64x c64x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c64x.s
+#source: attr-arch-c64x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C64x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x-c674x.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x-c674x.d
new file mode 100644
index 0000000..529ecef
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x-c674x.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c64x c674x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c64x.s
+#source: attr-arch-c674x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x-c67x+.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x-c67x+.d
new file mode 100644
index 0000000..16c8c42
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x-c67x+.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c64x c67x+
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c64x.s
+#source: attr-arch-c67x+.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x-c67x.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x-c67x.d
new file mode 100644
index 0000000..55a8391
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x-c67x.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c64x c67x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c64x.s
+#source: attr-arch-c67x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x.s
new file mode 100644
index 0000000..438d0f8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c64x.s
@@ -0,0 +1 @@
+.arch c64x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x-c62x.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x-c62x.d
new file mode 100644
index 0000000..07f0eac
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x-c62x.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c674x c62x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c674x.s
+#source: attr-arch-c62x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x-c64x+.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x-c64x+.d
new file mode 100644
index 0000000..81d0946
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x-c64x+.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c674x c64x+
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c674x.s
+#source: attr-arch-c64x+.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x-c64x.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x-c64x.d
new file mode 100644
index 0000000..245b4b8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x-c64x.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c674x c64x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c674x.s
+#source: attr-arch-c64x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x-c674x.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x-c674x.d
new file mode 100644
index 0000000..50f03a6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x-c674x.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c674x c674x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c674x.s
+#source: attr-arch-c674x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x-c67x+.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x-c67x+.d
new file mode 100644
index 0000000..dbbac9a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x-c67x+.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c674x c67x+
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c674x.s
+#source: attr-arch-c67x+.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x-c67x.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x-c67x.d
new file mode 100644
index 0000000..c3140ca
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x-c67x.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c674x c67x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c674x.s
+#source: attr-arch-c67x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x.s
new file mode 100644
index 0000000..41b3886
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c674x.s
@@ -0,0 +1 @@
+.arch c674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+-c62x.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+-c62x.d
new file mode 100644
index 0000000..c7ff793
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+-c62x.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c67x+ c62x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c67x+.s
+#source: attr-arch-c62x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C67x\+
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+-c64x+.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+-c64x+.d
new file mode 100644
index 0000000..b7d2b53
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+-c64x+.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c67x+ c64x+
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c67x+.s
+#source: attr-arch-c64x+.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+-c64x.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+-c64x.d
new file mode 100644
index 0000000..cdee2fe
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+-c64x.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c67x+ c64x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c67x+.s
+#source: attr-arch-c64x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+-c674x.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+-c674x.d
new file mode 100644
index 0000000..511acb0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+-c674x.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c67x+ c674x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c67x+.s
+#source: attr-arch-c674x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+-c67x+.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+-c67x+.d
new file mode 100644
index 0000000..63685b0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+-c67x+.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c67x+ c67x+
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c67x+.s
+#source: attr-arch-c67x+.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C67x\+
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+-c67x.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+-c67x.d
new file mode 100644
index 0000000..864b6e5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+-c67x.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c67x+ c67x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c67x+.s
+#source: attr-arch-c67x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C67x\+
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+.s
new file mode 100644
index 0000000..f4c22de
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x+.s
@@ -0,0 +1 @@
+.arch c67x+
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x-c62x.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x-c62x.d
new file mode 100644
index 0000000..b230a71
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x-c62x.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c67x c62x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c67x.s
+#source: attr-arch-c62x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C67x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x-c64x+.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x-c64x+.d
new file mode 100644
index 0000000..99abb3c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x-c64x+.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c67x c64x+
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c67x.s
+#source: attr-arch-c64x+.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x-c64x.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x-c64x.d
new file mode 100644
index 0000000..d8313e4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x-c64x.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c67x c64x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c67x.s
+#source: attr-arch-c64x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x-c674x.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x-c674x.d
new file mode 100644
index 0000000..2100d40
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x-c674x.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c67x c674x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c67x.s
+#source: attr-arch-c674x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x-c67x+.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x-c67x+.d
new file mode 100644
index 0000000..75c4c5b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x-c67x+.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c67x c67x+
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c67x.s
+#source: attr-arch-c67x+.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C67x\+
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x-c67x.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x-c67x.d
new file mode 100644
index 0000000..f71c12b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x-c67x.d
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c67x c67x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c67x.s
+#source: attr-arch-c67x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C67x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x.s
new file mode 100644
index 0000000..a7e5ba6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-arch-c67x.s
@@ -0,0 +1 @@
+.arch c67x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16-16.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16-16.d
new file mode 100644
index 0000000..d39e045
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16-16.d
@@ -0,0 +1,12 @@
+#name: C6X array attribute merging, 16 16
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-16.s
+#source: attr-array-16.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_array_object_alignment: 16-byte
+ Tag_ABI_array_object_align_expected: 16-byte
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16-4.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16-4.d
new file mode 100644
index 0000000..1d38f2a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16-4.d
@@ -0,0 +1,6 @@
+#name: C6X array attribute merging, 16 4
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-16.s
+#source: attr-array-4.s
+#error: .*requires more array alignment than .* preserves
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16-416.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16-416.d
new file mode 100644
index 0000000..ec74ed5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16-416.d
@@ -0,0 +1,12 @@
+#name: C6X array attribute merging, 16 416
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-16.s
+#source: attr-array-416.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_array_object_alignment: 16-byte
+ Tag_ABI_array_object_align_expected: 16-byte
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16-48.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16-48.d
new file mode 100644
index 0000000..5ef2908
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16-48.d
@@ -0,0 +1,6 @@
+#name: C6X array attribute merging, 16 48
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-16.s
+#source: attr-array-48.s
+#error: .*requires more array alignment than .* preserves
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16-8.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16-8.d
new file mode 100644
index 0000000..e8228f0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16-8.d
@@ -0,0 +1,6 @@
+#name: C6X array attribute merging, 16 8
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-16.s
+#source: attr-array-8.s
+#error: .*requires more array alignment than .* preserves
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16-816.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16-816.d
new file mode 100644
index 0000000..14bc984
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16-816.d
@@ -0,0 +1,12 @@
+#name: C6X array attribute merging, 16 816
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-16.s
+#source: attr-array-816.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_array_object_alignment: 16-byte
+ Tag_ABI_array_object_align_expected: 16-byte
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16.s
new file mode 100644
index 0000000..70401ff
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-16.s
@@ -0,0 +1,2 @@
+.c6xabi_attribute Tag_ABI_array_object_align_expected, 2
+.c6xabi_attribute Tag_ABI_array_object_alignment, 2
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4-16.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4-16.d
new file mode 100644
index 0000000..3c2c138
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4-16.d
@@ -0,0 +1,6 @@
+#name: C6X array attribute merging, 4 16
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-4.s
+#source: attr-array-16.s
+#error: .*requires more array alignment than .* preserves
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4-4.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4-4.d
new file mode 100644
index 0000000..920ff10
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4-4.d
@@ -0,0 +1,12 @@
+#name: C6X array attribute merging, 4 4
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-4.s
+#source: attr-array-4.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_array_object_alignment: 4-byte
+ Tag_ABI_array_object_align_expected: 4-byte
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4-416.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4-416.d
new file mode 100644
index 0000000..1b5e516
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4-416.d
@@ -0,0 +1,12 @@
+#name: C6X array attribute merging, 4 416
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-4.s
+#source: attr-array-416.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_array_object_alignment: 4-byte
+ Tag_ABI_array_object_align_expected: 4-byte
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4-48.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4-48.d
new file mode 100644
index 0000000..e998162
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4-48.d
@@ -0,0 +1,12 @@
+#name: C6X array attribute merging, 4 48
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-4.s
+#source: attr-array-48.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_array_object_alignment: 4-byte
+ Tag_ABI_array_object_align_expected: 4-byte
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4-8.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4-8.d
new file mode 100644
index 0000000..d8b41c7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4-8.d
@@ -0,0 +1,6 @@
+#name: C6X array attribute merging, 4 8
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-4.s
+#source: attr-array-8.s
+#error: .*requires more array alignment than .* preserves
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4-816.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4-816.d
new file mode 100644
index 0000000..a4dcc01
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4-816.d
@@ -0,0 +1,6 @@
+#name: C6X array attribute merging, 4 816
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-4.s
+#source: attr-array-816.s
+#error: .*requires more array alignment than .* preserves
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4.s
new file mode 100644
index 0000000..abaa25f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-4.s
@@ -0,0 +1,2 @@
+.c6xabi_attribute Tag_ABI_array_object_align_expected, 1
+.c6xabi_attribute Tag_ABI_array_object_alignment, 1
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416-16.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416-16.d
new file mode 100644
index 0000000..8168658
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416-16.d
@@ -0,0 +1,12 @@
+#name: C6X array attribute merging, 416 16
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-416.s
+#source: attr-array-16.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_array_object_alignment: 16-byte
+ Tag_ABI_array_object_align_expected: 16-byte
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416-4.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416-4.d
new file mode 100644
index 0000000..53d4bc7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416-4.d
@@ -0,0 +1,12 @@
+#name: C6X array attribute merging, 416 4
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-416.s
+#source: attr-array-4.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_array_object_alignment: 4-byte
+ Tag_ABI_array_object_align_expected: 4-byte
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416-416.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416-416.d
new file mode 100644
index 0000000..9ca864d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416-416.d
@@ -0,0 +1,12 @@
+#name: C6X array attribute merging, 416 416
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-416.s
+#source: attr-array-416.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_array_object_alignment: 16-byte
+ Tag_ABI_array_object_align_expected: 4-byte
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416-48.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416-48.d
new file mode 100644
index 0000000..760a023
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416-48.d
@@ -0,0 +1,11 @@
+#name: C6X array attribute merging, 416 48
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-416.s
+#source: attr-array-48.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_array_object_align_expected: 4-byte
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416-8.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416-8.d
new file mode 100644
index 0000000..58a4325
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416-8.d
@@ -0,0 +1,10 @@
+#name: C6X array attribute merging, 416 8
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-416.s
+#source: attr-array-8.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416-816.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416-816.d
new file mode 100644
index 0000000..12b4abc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416-816.d
@@ -0,0 +1,11 @@
+#name: C6X array attribute merging, 416 816
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-416.s
+#source: attr-array-816.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_array_object_alignment: 16-byte
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416.s
new file mode 100644
index 0000000..a9cba9d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-416.s
@@ -0,0 +1,2 @@
+.c6xabi_attribute Tag_ABI_array_object_align_expected, 1
+.c6xabi_attribute Tag_ABI_array_object_alignment, 2
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48-16.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48-16.d
new file mode 100644
index 0000000..68fa058
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48-16.d
@@ -0,0 +1,6 @@
+#name: C6X array attribute merging, 48 16
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-48.s
+#source: attr-array-16.s
+#error: .*requires more array alignment than .* preserves
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48-4.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48-4.d
new file mode 100644
index 0000000..76faefa
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48-4.d
@@ -0,0 +1,12 @@
+#name: C6X array attribute merging, 48 4
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-48.s
+#source: attr-array-4.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_array_object_alignment: 4-byte
+ Tag_ABI_array_object_align_expected: 4-byte
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48-416.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48-416.d
new file mode 100644
index 0000000..c02d8f9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48-416.d
@@ -0,0 +1,11 @@
+#name: C6X array attribute merging, 48 416
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-48.s
+#source: attr-array-416.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_array_object_align_expected: 4-byte
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48-48.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48-48.d
new file mode 100644
index 0000000..9801173
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48-48.d
@@ -0,0 +1,11 @@
+#name: C6X array attribute merging, 48 48
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-48.s
+#source: attr-array-48.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_array_object_align_expected: 4-byte
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48-8.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48-8.d
new file mode 100644
index 0000000..cd70604
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48-8.d
@@ -0,0 +1,10 @@
+#name: C6X array attribute merging, 48 8
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-48.s
+#source: attr-array-8.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48-816.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48-816.d
new file mode 100644
index 0000000..795d839
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48-816.d
@@ -0,0 +1,10 @@
+#name: C6X array attribute merging, 48 816
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-48.s
+#source: attr-array-816.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48.s
new file mode 100644
index 0000000..a1cb22a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-48.s
@@ -0,0 +1,2 @@
+.c6xabi_attribute Tag_ABI_array_object_align_expected, 1
+.c6xabi_attribute Tag_ABI_array_object_alignment, 0
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8-16.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8-16.d
new file mode 100644
index 0000000..0d6bafb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8-16.d
@@ -0,0 +1,6 @@
+#name: C6X array attribute merging, 8 16
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-8.s
+#source: attr-array-16.s
+#error: .*requires more array alignment than .* preserves
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8-4.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8-4.d
new file mode 100644
index 0000000..c7a6033
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8-4.d
@@ -0,0 +1,6 @@
+#name: C6X array attribute merging, 8 4
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-8.s
+#source: attr-array-4.s
+#error: .*requires more array alignment than .* preserves
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8-416.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8-416.d
new file mode 100644
index 0000000..f5f5261
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8-416.d
@@ -0,0 +1,10 @@
+#name: C6X array attribute merging, 8 416
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-8.s
+#source: attr-array-416.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8-48.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8-48.d
new file mode 100644
index 0000000..506ec4c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8-48.d
@@ -0,0 +1,10 @@
+#name: C6X array attribute merging, 8 48
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-8.s
+#source: attr-array-48.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8-8.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8-8.d
new file mode 100644
index 0000000..86329f3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8-8.d
@@ -0,0 +1,10 @@
+#name: C6X array attribute merging, 8 8
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-8.s
+#source: attr-array-8.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8-816.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8-816.d
new file mode 100644
index 0000000..ecb9374
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8-816.d
@@ -0,0 +1,10 @@
+#name: C6X array attribute merging, 8 816
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-8.s
+#source: attr-array-816.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8.s
new file mode 100644
index 0000000..2d69687
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-8.s
@@ -0,0 +1,2 @@
+.c6xabi_attribute Tag_ABI_array_object_align_expected, 0
+.c6xabi_attribute Tag_ABI_array_object_alignment, 0
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816-16.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816-16.d
new file mode 100644
index 0000000..2ef2f8e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816-16.d
@@ -0,0 +1,12 @@
+#name: C6X array attribute merging, 816 16
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-816.s
+#source: attr-array-16.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_array_object_alignment: 16-byte
+ Tag_ABI_array_object_align_expected: 16-byte
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816-4.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816-4.d
new file mode 100644
index 0000000..bd06a2d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816-4.d
@@ -0,0 +1,6 @@
+#name: C6X array attribute merging, 816 4
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-816.s
+#source: attr-array-4.s
+#error: .*requires more array alignment than .* preserves
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816-416.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816-416.d
new file mode 100644
index 0000000..9563f7e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816-416.d
@@ -0,0 +1,11 @@
+#name: C6X array attribute merging, 816 416
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-816.s
+#source: attr-array-416.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_array_object_alignment: 16-byte
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816-48.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816-48.d
new file mode 100644
index 0000000..e965643
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816-48.d
@@ -0,0 +1,10 @@
+#name: C6X array attribute merging, 816 48
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-816.s
+#source: attr-array-48.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816-8.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816-8.d
new file mode 100644
index 0000000..7a29cc5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816-8.d
@@ -0,0 +1,10 @@
+#name: C6X array attribute merging, 816 8
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-816.s
+#source: attr-array-8.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816-816.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816-816.d
new file mode 100644
index 0000000..0888eae
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816-816.d
@@ -0,0 +1,11 @@
+#name: C6X array attribute merging, 816 816
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-array-816.s
+#source: attr-array-816.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_array_object_alignment: 16-byte
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816.s
new file mode 100644
index 0000000..49ac948
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-array-816.s
@@ -0,0 +1,2 @@
+.c6xabi_attribute Tag_ABI_array_object_align_expected, 0
+.c6xabi_attribute Tag_ABI_array_object_alignment, 2
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-compatibility-gnu-gnu.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-compatibility-gnu-gnu.d
new file mode 100644
index 0000000..4cba64e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-compatibility-gnu-gnu.d
@@ -0,0 +1,11 @@
+#name: C6X compatibility attribute merging, gnu gnu
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-compatibility-gnu.s
+#source: attr-compatibility-gnu.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_compatibility: flag = 1, vendor = gnu
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-compatibility-gnu-other.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-compatibility-gnu-other.d
new file mode 100644
index 0000000..423ab07
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-compatibility-gnu-other.d
@@ -0,0 +1,6 @@
+#name: C6X compatibility attribute merging, gnu other
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-compatibility-gnu.s
+#source: attr-compatibility-other.s
+#error: .*Object has vendor-specific contents that must be processed by the 'other' toolchain
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-compatibility-gnu.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-compatibility-gnu.s
new file mode 100644
index 0000000..b013058
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-compatibility-gnu.s
@@ -0,0 +1 @@
+.c6xabi_attribute Tag_ABI_compatibility, 1, "gnu"
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-compatibility-other-gnu.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-compatibility-other-gnu.d
new file mode 100644
index 0000000..80d73e5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-compatibility-other-gnu.d
@@ -0,0 +1,6 @@
+#name: C6X compatibility attribute merging, other gnu
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-compatibility-other.s
+#source: attr-compatibility-gnu.s
+#error: .*Object tag '1, gnu' is incompatible with tag '1, other'
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-compatibility-other-other.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-compatibility-other-other.d
new file mode 100644
index 0000000..0ebd99b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-compatibility-other-other.d
@@ -0,0 +1,6 @@
+#name: C6X compatibility attribute merging, other other
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-compatibility-other.s
+#source: attr-compatibility-other.s
+#error: .*Object has vendor-specific contents that must be processed by the 'other' toolchain
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-compatibility-other.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-compatibility-other.s
new file mode 100644
index 0000000..38a605a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-compatibility-other.s
@@ -0,0 +1 @@
+.c6xabi_attribute Tag_ABI_compatibility, 1, "other"
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-10-10.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-10-10.d
new file mode 100644
index 0000000..a16e503
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-10-10.d
@@ -0,0 +1,11 @@
+#name: C6X conformance attribute merging, 10 10
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-conformance-10.s
+#source: attr-conformance-10.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ABI_conformance: "1.0"
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-10-11.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-10-11.d
new file mode 100644
index 0000000..94993d9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-10-11.d
@@ -0,0 +1,10 @@
+#name: C6X conformance attribute merging, 10 11
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-conformance-10.s
+#source: attr-conformance-11.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-10-none.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-10-none.d
new file mode 100644
index 0000000..2de2b50
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-10-none.d
@@ -0,0 +1,10 @@
+#name: C6X conformance attribute merging, 10 none
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-conformance-10.s
+#source: attr-conformance-none.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-10.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-10.s
new file mode 100644
index 0000000..2964084
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-10.s
@@ -0,0 +1 @@
+.c6xabi_attribute Tag_ABI_conformance, "1.0"
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-11-10.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-11-10.d
new file mode 100644
index 0000000..34ebd26
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-11-10.d
@@ -0,0 +1,10 @@
+#name: C6X conformance attribute merging, 11 10
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-conformance-11.s
+#source: attr-conformance-10.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-11-11.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-11-11.d
new file mode 100644
index 0000000..43ff4a2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-11-11.d
@@ -0,0 +1,11 @@
+#name: C6X conformance attribute merging, 11 11
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-conformance-11.s
+#source: attr-conformance-11.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ABI_conformance: "1.1"
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-11-none.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-11-none.d
new file mode 100644
index 0000000..ad5c58e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-11-none.d
@@ -0,0 +1,10 @@
+#name: C6X conformance attribute merging, 11 none
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-conformance-11.s
+#source: attr-conformance-none.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-11.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-11.s
new file mode 100644
index 0000000..d33640c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-11.s
@@ -0,0 +1 @@
+.c6xabi_attribute Tag_ABI_conformance, "1.1"
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-none-10.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-none-10.d
new file mode 100644
index 0000000..94bf8db
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-none-10.d
@@ -0,0 +1,10 @@
+#name: C6X conformance attribute merging, none 10
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-conformance-none.s
+#source: attr-conformance-10.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-none-11.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-none-11.d
new file mode 100644
index 0000000..e9ff4c8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-none-11.d
@@ -0,0 +1,10 @@
+#name: C6X conformance attribute merging, none 11
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-conformance-none.s
+#source: attr-conformance-11.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-none-none.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-none-none.d
new file mode 100644
index 0000000..6856355
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-none-none.d
@@ -0,0 +1,10 @@
+#name: C6X conformance attribute merging, none none
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-conformance-none.s
+#source: attr-conformance-none.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-none.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-none.s
new file mode 100644
index 0000000..ffd9c71
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-conformance-none.s
@@ -0,0 +1 @@
+# No conformance attribute.
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-dsbt-0.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-dsbt-0.s
new file mode 100644
index 0000000..abd72e3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-dsbt-0.s
@@ -0,0 +1 @@
+.c6xabi_attribute Tag_ABI_DSBT, 0
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-dsbt-00.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-dsbt-00.d
new file mode 100644
index 0000000..c49752d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-dsbt-00.d
@@ -0,0 +1,10 @@
+#name: C6X DSBT attribute merging, 0 0
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-dsbt-0.s
+#source: attr-dsbt-0.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-dsbt-01.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-dsbt-01.d
new file mode 100644
index 0000000..5f534a7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-dsbt-01.d
@@ -0,0 +1,6 @@
+#name: C6X DSBT attribute merging, 0 1
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-dsbt-0.s
+#source: attr-dsbt-1.s
+#warning: .*differ in whether code is compiled for DSBT
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-dsbt-1.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-dsbt-1.s
new file mode 100644
index 0000000..75c972e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-dsbt-1.s
@@ -0,0 +1 @@
+.c6xabi_attribute Tag_ABI_DSBT, 1
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-dsbt-10.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-dsbt-10.d
new file mode 100644
index 0000000..283efab
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-dsbt-10.d
@@ -0,0 +1,6 @@
+#name: C6X DSBT attribute merging, 1 0
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-dsbt-1.s
+#source: attr-dsbt-0.s
+#warning: .*differ in whether code is compiled for DSBT
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-dsbt-11.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-dsbt-11.d
new file mode 100644
index 0000000..d004c10
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-dsbt-11.d
@@ -0,0 +1,11 @@
+#name: C6X DSBT attribute merging, 1 1
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-dsbt-1.s
+#source: attr-dsbt-1.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_DSBT: DSBT addressing used
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-pic-0.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pic-0.s
new file mode 100644
index 0000000..64b8ec9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pic-0.s
@@ -0,0 +1 @@
+.c6xabi_attribute Tag_ABI_PIC, 0
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-pic-00.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pic-00.d
new file mode 100644
index 0000000..b8b3f52
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pic-00.d
@@ -0,0 +1,10 @@
+#name: C6X PIC attribute merging, 0 0
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-pic-0.s
+#source: attr-pic-0.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-pic-01.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pic-01.d
new file mode 100644
index 0000000..a04713f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pic-01.d
@@ -0,0 +1,6 @@
+#name: C6X PIC attribute merging, 0 1
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-pic-0.s
+#source: attr-pic-1.s
+#warning: .*differ in position-dependence of code addressing
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-pic-1.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pic-1.s
new file mode 100644
index 0000000..2bab373
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pic-1.s
@@ -0,0 +1 @@
+.c6xabi_attribute Tag_ABI_PIC, 1
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-pic-10.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pic-10.d
new file mode 100644
index 0000000..bc781c4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pic-10.d
@@ -0,0 +1,6 @@
+#name: C6X PIC attribute merging, 1 0
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-pic-1.s
+#source: attr-pic-0.s
+#warning: .*differ in position-dependence of code addressing
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-pic-11.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pic-11.d
new file mode 100644
index 0000000..6fd720d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pic-11.d
@@ -0,0 +1,11 @@
+#name: C6X PIC attribute merging, 1 1
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-pic-1.s
+#source: attr-pic-1.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_PIC: Code addressing position-independent
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-0.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-0.s
new file mode 100644
index 0000000..d2ea7ad
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-0.s
@@ -0,0 +1 @@
+.c6xabi_attribute Tag_ABI_PID, 0
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-00.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-00.d
new file mode 100644
index 0000000..573cfda
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-00.d
@@ -0,0 +1,10 @@
+#name: C6X PID attribute merging, 0 0
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-pid-0.s
+#source: attr-pid-0.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-01.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-01.d
new file mode 100644
index 0000000..5c32e15
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-01.d
@@ -0,0 +1,6 @@
+#name: C6X PID attribute merging, 0 1
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-pid-0.s
+#source: attr-pid-1.s
+#warning: .*differ in position-dependence of data addressing
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-02.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-02.d
new file mode 100644
index 0000000..d155b56
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-02.d
@@ -0,0 +1,6 @@
+#name: C6X PID attribute merging, 0 2
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-pid-0.s
+#source: attr-pid-2.s
+#warning: .*differ in position-dependence of data addressing
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-1.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-1.s
new file mode 100644
index 0000000..b973177
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-1.s
@@ -0,0 +1 @@
+.c6xabi_attribute Tag_ABI_PID, 1
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-10.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-10.d
new file mode 100644
index 0000000..edb8a65
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-10.d
@@ -0,0 +1,6 @@
+#name: C6X PID attribute merging, 1 0
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-pid-1.s
+#source: attr-pid-0.s
+#warning: .*differ in position-dependence of data addressing
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-11.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-11.d
new file mode 100644
index 0000000..7498282
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-11.d
@@ -0,0 +1,11 @@
+#name: C6X PID attribute merging, 1 1
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-pid-1.s
+#source: attr-pid-1.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_PID: Data addressing position-independent, GOT near DP
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-12.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-12.d
new file mode 100644
index 0000000..138ae88
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-12.d
@@ -0,0 +1,6 @@
+#name: C6X PID attribute merging, 1 2
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-pid-1.s
+#source: attr-pid-2.s
+#warning: .*differ in position-dependence of data addressing
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-2.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-2.s
new file mode 100644
index 0000000..f556188
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-2.s
@@ -0,0 +1 @@
+.c6xabi_attribute Tag_ABI_PID, 2
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-20.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-20.d
new file mode 100644
index 0000000..ce319bd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-20.d
@@ -0,0 +1,6 @@
+#name: C6X PID attribute merging, 2 0
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-pid-2.s
+#source: attr-pid-0.s
+#warning: .*differ in position-dependence of data addressing
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-21.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-21.d
new file mode 100644
index 0000000..7097db6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-21.d
@@ -0,0 +1,6 @@
+#name: C6X PID attribute merging, 2 1
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-pid-2.s
+#source: attr-pid-1.s
+#warning: .*differ in position-dependence of data addressing
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-22.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-22.d
new file mode 100644
index 0000000..7a3fe47
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-pid-22.d
@@ -0,0 +1,11 @@
+#name: C6X PID attribute merging, 2 2
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-pid-2.s
+#source: attr-pid-2.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_PID: Data addressing position-independent, GOT far from DP
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-16-16.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-16-16.d
new file mode 100644
index 0000000..8eb94bd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-16-16.d
@@ -0,0 +1,12 @@
+#name: C6X stack attribute merging, 16 16
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-stack-16.s
+#source: attr-stack-16.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_stack_align_needed: 16-byte
+ Tag_ABI_stack_align_preserved: 16-byte
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-16-8.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-16-8.d
new file mode 100644
index 0000000..291a368
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-16-8.d
@@ -0,0 +1,6 @@
+#name: C6X stack attribute merging, 16 8
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-stack-16.s
+#source: attr-stack-8.s
+#error: .*requires more stack alignment than .* preserves
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-16-816.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-16-816.d
new file mode 100644
index 0000000..cbd384f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-16-816.d
@@ -0,0 +1,12 @@
+#name: C6X stack attribute merging, 16 816
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-stack-16.s
+#source: attr-stack-816.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_stack_align_needed: 16-byte
+ Tag_ABI_stack_align_preserved: 16-byte
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-16.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-16.s
new file mode 100644
index 0000000..b1e492a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-16.s
@@ -0,0 +1,2 @@
+.c6xabi_attribute Tag_ABI_stack_align_needed, 1
+.c6xabi_attribute Tag_ABI_stack_align_preserved, 1
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-8-16.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-8-16.d
new file mode 100644
index 0000000..9e52e92
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-8-16.d
@@ -0,0 +1,6 @@
+#name: C6X stack attribute merging, 8 16
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-stack-8.s
+#source: attr-stack-16.s
+#error: .*requires more stack alignment than .* preserves
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-8-8.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-8-8.d
new file mode 100644
index 0000000..1a8cb62
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-8-8.d
@@ -0,0 +1,10 @@
+#name: C6X stack attribute merging, 8 8
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-stack-8.s
+#source: attr-stack-8.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-8-816.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-8-816.d
new file mode 100644
index 0000000..89a0740
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-8-816.d
@@ -0,0 +1,10 @@
+#name: C6X stack attribute merging, 8 816
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-stack-8.s
+#source: attr-stack-816.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-8.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-8.s
new file mode 100644
index 0000000..ce63951
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-8.s
@@ -0,0 +1,2 @@
+.c6xabi_attribute Tag_ABI_stack_align_needed, 0
+.c6xabi_attribute Tag_ABI_stack_align_preserved, 0
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-816-16.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-816-16.d
new file mode 100644
index 0000000..da8ca3b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-816-16.d
@@ -0,0 +1,12 @@
+#name: C6X stack attribute merging, 816 16
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-stack-816.s
+#source: attr-stack-16.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_stack_align_needed: 16-byte
+ Tag_ABI_stack_align_preserved: 16-byte
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-816-8.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-816-8.d
new file mode 100644
index 0000000..fe8630e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-816-8.d
@@ -0,0 +1,10 @@
+#name: C6X stack attribute merging, 816 8
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-stack-816.s
+#source: attr-stack-8.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-816-816.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-816-816.d
new file mode 100644
index 0000000..0ab01ac
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-816-816.d
@@ -0,0 +1,11 @@
+#name: C6X stack attribute merging, 816 816
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-stack-816.s
+#source: attr-stack-816.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_stack_align_preserved: 16-byte
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-816.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-816.s
new file mode 100644
index 0000000..46295d2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-stack-816.s
@@ -0,0 +1,2 @@
+.c6xabi_attribute Tag_ABI_stack_align_needed, 0
+.c6xabi_attribute Tag_ABI_stack_align_preserved, 1
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-0.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-0.s
new file mode 100644
index 0000000..5427103
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-0.s
@@ -0,0 +1 @@
+.c6xabi_attribute Tag_ABI_wchar_t, 0
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-00.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-00.d
new file mode 100644
index 0000000..3f5feae
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-00.d
@@ -0,0 +1,10 @@
+#name: C6X wchar_t attribute merging, 0 0
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-wchar-0.s
+#source: attr-wchar-0.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-01.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-01.d
new file mode 100644
index 0000000..e32ded6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-01.d
@@ -0,0 +1,11 @@
+#name: C6X wchar_t attribute merging, 0 1
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-wchar-0.s
+#source: attr-wchar-1.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_wchar_t: 2 bytes
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-02.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-02.d
new file mode 100644
index 0000000..57ed66b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-02.d
@@ -0,0 +1,11 @@
+#name: C6X wchar_t attribute merging, 0 2
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-wchar-0.s
+#source: attr-wchar-2.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_wchar_t: 4 bytes
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-1.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-1.s
new file mode 100644
index 0000000..69d1186
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-1.s
@@ -0,0 +1 @@
+.c6xabi_attribute Tag_ABI_wchar_t, 1
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-10.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-10.d
new file mode 100644
index 0000000..c476859
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-10.d
@@ -0,0 +1,11 @@
+#name: C6X wchar_t attribute merging, 1 0
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-wchar-1.s
+#source: attr-wchar-0.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_wchar_t: 2 bytes
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-11.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-11.d
new file mode 100644
index 0000000..5105d19
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-11.d
@@ -0,0 +1,11 @@
+#name: C6X wchar_t attribute merging, 1 1
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-wchar-1.s
+#source: attr-wchar-1.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_wchar_t: 2 bytes
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-12.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-12.d
new file mode 100644
index 0000000..a0d3bd8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-12.d
@@ -0,0 +1,6 @@
+#name: C6X wchar_t attribute merging, 1 2
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-wchar-1.s
+#source: attr-wchar-2.s
+#warning: .*differ in wchar_t size
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-2.s b/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-2.s
new file mode 100644
index 0000000..cf87e4c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-2.s
@@ -0,0 +1 @@
+.c6xabi_attribute Tag_ABI_wchar_t, 2
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-20.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-20.d
new file mode 100644
index 0000000..9a2b356
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-20.d
@@ -0,0 +1,11 @@
+#name: C6X wchar_t attribute merging, 2 0
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-wchar-2.s
+#source: attr-wchar-0.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_wchar_t: 4 bytes
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-21.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-21.d
new file mode 100644
index 0000000..60d06f1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-21.d
@@ -0,0 +1,6 @@
+#name: C6X wchar_t attribute merging, 2 1
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-wchar-2.s
+#source: attr-wchar-1.s
+#warning: .*differ in wchar_t size
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-22.d b/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-22.d
new file mode 100644
index 0000000..7500a31
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/attr-wchar-22.d
@@ -0,0 +1,11 @@
+#name: C6X wchar_t attribute merging, 2 2
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-wchar-2.s
+#source: attr-wchar-2.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_wchar_t: 4 bytes
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-global-rel.d b/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-global-rel.d
new file mode 100644
index 0000000..82e2caf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-global-rel.d
@@ -0,0 +1,11 @@
+#name: C6X data relocations, global symbols, REL
+#as: -mlittle-endian -mgenerate-rel
+#ld: -melf32_tic6x_le -Tgeneric.ld --defsym s0=0 --defsym sff=0xff --defsym sffff=0xffff --defsym s80000000=0x80000000 --defsym sffff8000=0xffff8000 --defsym sffffff80=0xffffff80 --defsym sffffffff=0xffffffff
+#source: data-reloc-global-rel.s
+#objdump: -r -s -j .data
+
+.*: *file format elf32-tic6x-le
+
+Contents of section \.data:
+[ \t]*0080 00000080 ffffffff 00000000 feffffff \.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.
+[ \t]*0090 00000000 ffffffff 00800080 ffff8080 \.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-global-rel.s b/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-global-rel.s
new file mode 100644
index 0000000..8c7ba2e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-global-rel.s
@@ -0,0 +1,21 @@
+.globl s0
+.globl sff
+.globl sffff
+.globl s80000000
+.globl sffff8000
+.globl sffffff80
+.globl sffffffff
+.data
+ .word s80000000
+ .word sffffffff
+ .word s0
+ .word sffffffff+0xffffffff
+ .word s80000000+0x80000000
+ .short sffffffff
+ .short sffff
+ .short sffff8000
+ .short s0-0x8000
+ .byte sffffffff
+ .byte sff
+ .byte sffffff80
+ .byte s0-0x80
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-global.d b/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-global.d
new file mode 100644
index 0000000..416f9d3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-global.d
@@ -0,0 +1,12 @@
+#name: C6X data relocations, global symbols
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tgeneric.ld --defsym s0=0 --defsym sff=0xff --defsym sffff=0xffff --defsym s80000000=0x80000000 --defsym sffff8000=0xffff8000 --defsym sffffff80=0xffffff80 --defsym sffffffff=0xffffffff
+#source: data-reloc-global.s
+#objdump: -r -s -j .data
+
+.*: *file format elf32-tic6x-le
+
+Contents of section \.data:
+[ \t]*0080 00000080 ffffffff 00000000 feffffff .*
+[ \t]*0090 00000000 ffffffff 00800080 0000ffff .*
+[ \t]*00a0 808000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-global.s b/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-global.s
new file mode 100644
index 0000000..6a03376
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-global.s
@@ -0,0 +1,23 @@
+.globl s0
+.globl sff
+.globl sffff
+.globl s80000000
+.globl sffff8000
+.globl sffffff80
+.globl sffffffff
+.data
+ .word s80000000
+ .word sffffffff
+ .word s0
+ .word sffffffff+0xffffffff
+ .word s80000000+0x80000000
+ .short sffffffff
+ .short sffff
+ .short sffff8000
+ .short s0-0x8000
+ .short s80000000+0x80000000
+ .byte sffffffff
+ .byte sff
+ .byte sffffff80
+ .byte s0-0x80
+ .byte s80000000+0x80000000
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-local-1.s b/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-local-1.s
new file mode 100644
index 0000000..d5cc7cf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-local-1.s
@@ -0,0 +1,5 @@
+.data
+a:
+ .word a
+b:
+ .word b
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-local-2.s b/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-local-2.s
new file mode 100644
index 0000000..2e9196b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-local-2.s
@@ -0,0 +1,8 @@
+.data
+c:
+ .word d
+d:
+ .word c
+ .short d
+ .byte c
+ .byte d
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-local-r-rel.d b/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-local-r-rel.d
new file mode 100644
index 0000000..18f23f9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-local-r-rel.d
@@ -0,0 +1,23 @@
+#name: C6X data relocations, local symbols, -r, REL
+#as: -mlittle-endian -mgenerate-rel
+#ld: -r -melf32_tic6x_le
+#source: data-reloc-local-1.s
+#source: data-reloc-local-2.s
+#objdump: -r -s -j .data
+
+.*: *file format elf32-tic6x-le
+
+RELOCATION RECORDS FOR \[\.data\]:
+OFFSET TYPE VALUE
+0+ R_C6000_ABS32 \.data
+0+4 R_C6000_ABS32 \.data
+0+8 R_C6000_ABS32 \.data
+0+c R_C6000_ABS32 \.data
+0+10 R_C6000_ABS16 \.data
+0+12 R_C6000_ABS8 \.data
+0+13 R_C6000_ABS8 \.data
+
+
+Contents of section \.data:
+[ \t]*0000 00000000 04000000 0c000000 08000000 \.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.
+[ \t]*0010 0c00080c \.\.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-local-r.d b/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-local-r.d
new file mode 100644
index 0000000..0f5567b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-local-r.d
@@ -0,0 +1,23 @@
+#name: C6X data relocations, local symbols, -r
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: data-reloc-local-1.s
+#source: data-reloc-local-2.s
+#objdump: -r -s -j .data
+
+.*: *file format elf32-tic6x-le
+
+RELOCATION RECORDS FOR \[\.data\]:
+OFFSET TYPE VALUE
+0+ R_C6000_ABS32 \.data
+0+4 R_C6000_ABS32 \.data\+0x00000004
+0+8 R_C6000_ABS32 \.data\+0x0000000c
+0+c R_C6000_ABS32 \.data\+0x00000008
+0+10 R_C6000_ABS16 \.data\+0x0000000c
+0+12 R_C6000_ABS8 \.data\+0x00000008
+0+13 R_C6000_ABS8 \.data\+0x0000000c
+
+
+Contents of section \.data:
+[ \t]*0000 00000000 00000000 00000000 00000000 .*
+[ \t]*0010 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-local-rel.d b/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-local-rel.d
new file mode 100644
index 0000000..686ca6e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-local-rel.d
@@ -0,0 +1,12 @@
+#name: C6X data relocations, local symbols, REL
+#as: -mlittle-endian -mgenerate-rel
+#ld: -melf32_tic6x_le -Tgeneric.ld
+#source: data-reloc-local-1.s
+#source: data-reloc-local-2.s
+#objdump: -r -s -j .data
+
+.*: *file format elf32-tic6x-le
+
+Contents of section \.data:
+[ \t]*0080 80000000 84000000 8c000000 88000000 .*
+[ \t]*0090 8c00888c .*
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-local.d b/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-local.d
new file mode 100644
index 0000000..13d6f75
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/data-reloc-local.d
@@ -0,0 +1,12 @@
+#name: C6X data relocations, local symbols
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tgeneric.ld
+#source: data-reloc-local-1.s
+#source: data-reloc-local-2.s
+#objdump: -r -s -j .data
+
+.*: *file format elf32-tic6x-le
+
+Contents of section \.data:
+[ \t]*0080 80000000 84000000 8c000000 88000000 .*
+[ \t]*0090 8c00888c .*
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/generic.ld b/binutils-2.21/ld/testsuite/ld-tic6x/generic.ld
new file mode 100644
index 0000000..2e9c5e8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/generic.ld
@@ -0,0 +1,8 @@
+SECTIONS
+{
+ . = 0x80;
+ .data : { *(.data*) }
+ . = 0x10000000;
+ .text : { *(.text*) }
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-global-rel.d b/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-global-rel.d
new file mode 100644
index 0000000..a082bbf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-global-rel.d
@@ -0,0 +1,20 @@
+#name: C6X MVK relocations, global symbols, REL
+#as: -mlittle-endian -mgenerate-rel
+#ld: -melf32_tic6x_le -Tgeneric.ld --defsym s0=0 --defsym s7fff=0x7fff --defsym s80000000=0x80000000 --defsym sffff8000=0xffff8000 --defsym sffffffff=0xffffffff
+#source: mvk-reloc-global-rel.s
+#objdump: -dr
+
+.*: *file format elf32-tic6x-le
+
+
+Disassembly of section \.text:
+
+10000000 <[^>]*>:
+10000000:[ \t]+00800028[ \t]+mvk \.S1 0,a1
+10000004:[ \t]+00ffffa8[ \t]+mvk \.S1 -1,a1
+10000008:[ \t]+00800028[ \t]+mvk \.S1 0,a1
+1000000c:[ \t]+00ffff28[ \t]+mvk \.S1 -2,a1
+10000010:[ \t]+00c00028[ \t]+mvk \.S1 -32768,a1
+10000014:[ \t]+00c00028[ \t]+mvk \.S1 -32768,a1
+10000018:[ \t]+00bfffa8[ \t]+mvk \.S1 32767,a1
+1000001c:[ \t]+00000000[ \t]+nop 1
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-global-rel.s b/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-global-rel.s
new file mode 100644
index 0000000..0690873
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-global-rel.s
@@ -0,0 +1,14 @@
+.globl s0
+.globl s7fff
+.globl s80000000
+.globl sffff8000
+.globl sffffffff
+.text
+.nocmp
+ mvkl .S1 s80000000,a1
+ mvkl .S1 sffffffff,a1
+ mvkl .S1 s0,a1
+ mvkl .S1 sffffffff+0xffffffff,a1
+ mvk .S1 sffff8000,a1
+ mvk .S1 s0-0x8000,a1
+ mvk .S1 s7fff,a1
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-global.d b/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-global.d
new file mode 100644
index 0000000..8eadae7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-global.d
@@ -0,0 +1,26 @@
+#name: C6X MVK relocations, global symbols
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tgeneric.ld --defsym s0=0 --defsym s7fff=0x7fff --defsym s80000000=0x80000000 --defsym sffff8000=0xffff8000 --defsym sffffffff=0xffffffff
+#source: mvk-reloc-global.s
+#objdump: -dr
+
+.*: *file format elf32-tic6x-le
+
+
+Disassembly of section \.text:
+
+10000000 <[^>]*>:
+10000000:[ \t]+00800028[ \t]+mvk \.S1 0,a1
+10000004:[ \t]+00c00068[ \t]+mvkh \.S1 2147483648,a1
+10000008:[ \t]+00ffffa8[ \t]+mvk \.S1 -1,a1
+1000000c:[ \t]+00ffffe8[ \t]+mvkh \.S1 4294901760,a1
+10000010:[ \t]+00800028[ \t]+mvk \.S1 0,a1
+10000014:[ \t]+00800068[ \t]+mvkh \.S1 0,a1
+10000018:[ \t]+00ffff28[ \t]+mvk \.S1 -2,a1
+1000001c:[ \t]+00ffffe8[ \t]+mvkh \.S1 4294901760,a1
+10000020:[ \t]+00800028[ \t]+mvk \.S1 0,a1
+10000024:[ \t]+00800068[ \t]+mvkh \.S1 0,a1
+10000028:[ \t]+00c00028[ \t]+mvk \.S1 -32768,a1
+1000002c:[ \t]+00c00028[ \t]+mvk \.S1 -32768,a1
+10000030:[ \t]+00bfffa8[ \t]+mvk \.S1 32767,a1
+[ \t]*\.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-global.s b/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-global.s
new file mode 100644
index 0000000..ef13d7a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-global.s
@@ -0,0 +1,20 @@
+.globl s0
+.globl s7fff
+.globl s80000000
+.globl sffff8000
+.globl sffffffff
+.text
+.nocmp
+ mvkl .S1 s80000000,a1
+ mvkh .S1 s80000000,a1
+ mvkl .S1 sffffffff,a1
+ mvkh .S1 sffffffff,a1
+ mvkl .S1 s0,a1
+ mvkh .S1 s0,a1
+ mvkl .S1 sffffffff+0xffffffff,a1
+ mvkh .S1 sffffffff+0xffffffff,a1
+ mvkl .S1 s80000000+0x80000000,a1
+ mvkh .S1 s80000000+0x80000000,a1
+ mvk .S1 sffff8000,a1
+ mvk .S1 s0-0x8000,a1
+ mvk .S1 s7fff,a1
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-1-rel.s b/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-1-rel.s
new file mode 100644
index 0000000..1255177
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-1-rel.s
@@ -0,0 +1,11 @@
+.text
+.nocmp
+ mvk .S1 a,a1
+ mvkl .S1 b,a2
+.data
+a:
+ .word 0
+b:
+ .word 0
+c:
+ .word 0
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-1.s b/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-1.s
new file mode 100644
index 0000000..f5de8b6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-1.s
@@ -0,0 +1,12 @@
+.text
+.nocmp
+ mvk .S1 a,a1
+ mvkl .S1 b,a2
+ mvkh .S1 c,a3
+.data
+a:
+ .word 0
+b:
+ .word 0
+c:
+ .word 0
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-2-rel.s b/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-2-rel.s
new file mode 100644
index 0000000..320c988
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-2-rel.s
@@ -0,0 +1,11 @@
+.text
+.nocmp
+ mvk .S1 d,a1
+ mvkl .S1 e,a2
+.data
+d:
+ .word 0
+e:
+ .word 0
+f:
+ .word 0
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-2.s b/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-2.s
new file mode 100644
index 0000000..2f9952d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-2.s
@@ -0,0 +1,12 @@
+.text
+.nocmp
+ mvk .S1 d,a1
+ mvkl .S1 e,a2
+ mvkh .S1 f-0x100,a3
+.data
+d:
+ .word 0
+e:
+ .word 0
+f:
+ .word 0
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-r-rel.d b/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-r-rel.d
new file mode 100644
index 0000000..dcbd55b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-r-rel.d
@@ -0,0 +1,23 @@
+#name: C6X MVK relocations, local symbols, -r, REL
+#as: -mlittle-endian -mgenerate-rel
+#ld: -r -melf32_tic6x_le
+#source: mvk-reloc-local-1-rel.s
+#source: mvk-reloc-local-2-rel.s
+#objdump: -dr
+
+.*: *file format elf32-tic6x-le
+
+
+Disassembly of section \.text:
+
+0+ <[^>]*>:
+[ \t]*0:[ \t]+00800028[ \t]+mvk \.S1 0,a1
+[ \t]*0: R_C6000_ABS_S16[ \t]+\.data
+[ \t]*4:[ \t]+01000228[ \t]+mvk \.S1 4,a2
+[ \t]*4: R_C6000_ABS_L16[ \t]+\.data
+[ \t]*\.\.\.
+[ \t]*20:[ \t]+00800628[ \t]+mvk \.S1 12,a1
+[ \t]*20: R_C6000_ABS_S16[ \t]+\.data
+[ \t]*24:[ \t]+01000828[ \t]+mvk \.S1 16,a2
+[ \t]*24: R_C6000_ABS_L16[ \t]+\.data
+[ \t]*\.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-r.d b/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-r.d
new file mode 100644
index 0000000..8657fd0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-r.d
@@ -0,0 +1,27 @@
+#name: C6X MVK relocations, local symbols, -r
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: mvk-reloc-local-1.s
+#source: mvk-reloc-local-2.s
+#objdump: -dr
+
+.*: *file format elf32-tic6x-le
+
+
+Disassembly of section \.text:
+
+0+ <[^>]*>:
+[ \t]*0:[ \t]+00800028[ \t]+mvk \.S1 0,a1
+[ \t]*0: R_C6000_ABS_S16[ \t]+\.data
+[ \t]*4:[ \t]+01000028[ \t]+mvk \.S1 0,a2
+[ \t]*4: R_C6000_ABS_L16[ \t]+\.data\+0x4
+[ \t]*8:[ \t]+01800068[ \t]+mvkh \.S1 0,a3
+[ \t]*8: R_C6000_ABS_H16[ \t]+\.data\+0x8
+[ \t]*\.\.\.
+[ \t]*20:[ \t]+00800028[ \t]+mvk \.S1 0,a1
+[ \t]*20: R_C6000_ABS_S16[ \t]+\.data\+0xc
+[ \t]*24:[ \t]+01000028[ \t]+mvk \.S1 0,a2
+[ \t]*24: R_C6000_ABS_L16[ \t]+\.data\+0x10
+[ \t]*28:[ \t]+01800068[ \t]+mvkh \.S1 0,a3
+[ \t]*28: R_C6000_ABS_H16[ \t]+\.data\+0xffffff14
+[ \t]*\.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-rel.d b/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-rel.d
new file mode 100644
index 0000000..d91a693
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local-rel.d
@@ -0,0 +1,19 @@
+#name: C6X MVK relocations, local symbols, REL
+#as: -mlittle-endian -mgenerate-rel
+#ld: -melf32_tic6x_le -Tgeneric.ld
+#source: mvk-reloc-local-1-rel.s
+#source: mvk-reloc-local-2-rel.s
+#objdump: -dr
+
+.*: *file format elf32-tic6x-le
+
+
+Disassembly of section \.text:
+
+10000000 <[^>]*>:
+10000000:[ \t]+00804028[ \t]+mvk \.S1 128,a1
+10000004:[ \t]+01004228[ \t]+mvk \.S1 132,a2
+[ \t]*\.\.\.
+10000020:[ \t]+00804628[ \t]+mvk \.S1 140,a1
+10000024:[ \t]+01004828[ \t]+mvk \.S1 144,a2
+[ \t]*\.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local.d b/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local.d
new file mode 100644
index 0000000..1b10c4d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/mvk-reloc-local.d
@@ -0,0 +1,21 @@
+#name: C6X MVK relocations, local symbols
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tgeneric.ld
+#source: mvk-reloc-local-1.s
+#source: mvk-reloc-local-2.s
+#objdump: -dr
+
+.*: *file format elf32-tic6x-le
+
+
+Disassembly of section \.text:
+
+10000000 <[^>]*>:
+10000000:[ \t]+00804028[ \t]+mvk \.S1 128,a1
+10000004:[ \t]+01004228[ \t]+mvk \.S1 132,a2
+10000008:[ \t]+01800068[ \t]+mvkh \.S1 0,a3
+[ \t]*\.\.\.
+10000020:[ \t]+00804628[ \t]+mvk \.S1 140,a1
+10000024:[ \t]+01004828[ \t]+mvk \.S1 144,a2
+10000028:[ \t]+01ffffe8[ \t]+mvkh \.S1 4294901760,a3
+[ \t]*\.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-global-rel.d b/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-global-rel.d
new file mode 100644
index 0000000..cf564e9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-global-rel.d
@@ -0,0 +1,20 @@
+#name: C6X PC-relative relocations, global symbols, REL
+#as: -mlittle-endian -mgenerate-rel
+#ld: -melf32_tic6x_le -Tgeneric.ld --defsym s7a=0x0fffff00 --defsym s7b=0x100000fc --defsym s10a=0x0ffff800 --defsym s10b=0x100007fc --defsym s12a=0x0fffe000 --defsym s12b=0x10001ffc --defsym s21a=0x0fc00000 --defsym s21b=0x103ffffc
+#source: pcrel-reloc-global.s
+#objdump: -dr
+
+.*: *file format elf32-tic6x-le
+
+
+Disassembly of section \.text:
+
+10000000 <[^>]*>:
+10000000:[ \t]+00c00162[ \t]+addkpc \.S2 fffff00 <[^>]*>,b1,0
+10000004:[ \t]+00bf0162[ \t]+addkpc \.S2 100000fc <[^>]*>,b1,0
+10000008:[ \t]+08000012[ \t]+b \.S2 fc00000 <[^>]*>
+1000000c:[ \t]+07ffff92[ \t]+b \.S2 103ffffc <[^>]*>
+10000010:[ \t]+00c01022[ \t]+bdec \.S2 ffff800 <[^>]*>,b1
+10000014:[ \t]+00bff022[ \t]+bdec \.S2 100007fc <[^>]*>,b1
+10000018:[ \t]+08000122[ \t]+bnop \.S2 fffe000 <[^>]*>,0
+1000001c:[ \t]+07ff0122[ \t]+bnop \.S2 10001ffc <[^>]*>,0
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-global.d b/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-global.d
new file mode 100644
index 0000000..dbf6caa
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-global.d
@@ -0,0 +1,20 @@
+#name: C6X PC-relative relocations, global symbols
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tgeneric.ld --defsym s7a=0x0fffff00 --defsym s7b=0x100000fc --defsym s10a=0x0ffff800 --defsym s10b=0x100007fc --defsym s12a=0x0fffe000 --defsym s12b=0x10001ffc --defsym s21a=0x0fc00000 --defsym s21b=0x103ffffc
+#source: pcrel-reloc-global.s
+#objdump: -dr
+
+.*: *file format elf32-tic6x-le
+
+
+Disassembly of section \.text:
+
+10000000 <[^>]*>:
+10000000:[ \t]+00c00162[ \t]+addkpc \.S2 fffff00 <[^>]*>,b1,0
+10000004:[ \t]+00bf0162[ \t]+addkpc \.S2 100000fc <[^>]*>,b1,0
+10000008:[ \t]+08000012[ \t]+b \.S2 fc00000 <[^>]*>
+1000000c:[ \t]+07ffff92[ \t]+b \.S2 103ffffc <[^>]*>
+10000010:[ \t]+00c01022[ \t]+bdec \.S2 ffff800 <[^>]*>,b1
+10000014:[ \t]+00bff022[ \t]+bdec \.S2 100007fc <[^>]*>,b1
+10000018:[ \t]+08000122[ \t]+bnop \.S2 fffe000 <[^>]*>,0
+1000001c:[ \t]+07ff0122[ \t]+bnop \.S2 10001ffc <[^>]*>,0
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-global.s b/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-global.s
new file mode 100644
index 0000000..b5fbf2a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-global.s
@@ -0,0 +1,18 @@
+.globl s7a
+.globl s7b
+.globl s21a
+.globl s21b
+.globl s10a
+.globl s10b
+.globl s12a
+.globl s12b
+.text
+.nocmp
+ addkpc .S2 s7a,b1,0
+ addkpc .S2 s7b,b1,0
+ b .S2 s21a
+ b .S2 s21b
+ bdec .S2 s10a,b1
+ bdec .S2 s10b,b1
+ bnop .S2 s12a,0
+ bnop .S2 s12b,0
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local-1.s b/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local-1.s
new file mode 100644
index 0000000..5a750e7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local-1.s
@@ -0,0 +1,16 @@
+.text
+.nocmp
+ nop
+ addkpc .S2 f1,b1,0
+ addkpc .S2 f2,b1,0
+ b .S2 f1
+ b .S2 f2
+ bdec .S2 f1,b1
+ bdec .S2 f2,b1
+ bnop .S2 f1,0
+ bnop .S2 f2,0
+.section .text.1,"ax",@progbits
+f1:
+ nop
+f2:
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local-2.s b/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local-2.s
new file mode 100644
index 0000000..287165f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local-2.s
@@ -0,0 +1,16 @@
+.text
+.nocmp
+ nop
+ bnop .S2 f3,0
+ bnop .S2 f4,0
+ bdec .S2 f3,b1
+ bdec .S2 f4,b1
+ b .S2 f3
+ b .S2 f4
+ addkpc .S2 f3,b1,0
+ addkpc .S2 f4,b1,0
+.section .text.1,"ax",@progbits
+f3:
+ nop
+f4:
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local-r-rel-rela.d b/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local-r-rel-rela.d
new file mode 100644
index 0000000..81cfc6c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local-r-rel-rela.d
@@ -0,0 +1,62 @@
+#name: C6X PC-relative relocations, local symbols, -r, mixed link of REL/RELA
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: pcrel-reloc-local-1.s -mgenerate-rel
+#source: pcrel-reloc-local-2.s
+#objdump: -dr
+
+.*: *file format elf32-tic6x-le
+
+
+Disassembly of section \.text:
+
+0+ <[^>]*>:
+[ \t]*0:[ \t]+00000000[ \t]+nop 1
+[ \t]*4:[ \t]+00800162[ \t]+addkpc \.S2 0 <[^>]*>,b1,0
+[ \t]*4: R_C6000_PCR_S7[ \t]+\.text\.1
+[ \t]*8:[ \t]+00810162[ \t]+addkpc \.S2 4 <[^>]*>,b1,0
+[ \t]*8: R_C6000_PCR_S7[ \t]+\.text\.1
+[ \t]*c:[ \t]+00000012[ \t]+b \.S2 0 <[^>]*>
+[ \t]*c: R_C6000_PCR_S21[ \t]+\.text\.1
+[ \t]*10:[ \t]+00000092[ \t]+b \.S2 4 <[^>]*>
+[ \t]*10: R_C6000_PCR_S21[ \t]+\.text\.1
+[ \t]*14:[ \t]+00801022[ \t]+bdec \.S2 0 <[^>]*>,b1
+[ \t]*14: R_C6000_PCR_S10[ \t]+\.text\.1
+[ \t]*18:[ \t]+00803022[ \t]+bdec \.S2 4 <[^>]*>,b1
+[ \t]*18: R_C6000_PCR_S10[ \t]+\.text\.1
+[ \t]*1c:[ \t]+00000122[ \t]+bnop \.S2 0 <[^>]*>,0
+[ \t]*1c: R_C6000_PCR_S12[ \t]+\.text\.1
+[ \t]*20:[ \t]+00010122[ \t]+bnop \.S2 24 <[^>]*>,0
+[ \t]*20: R_C6000_PCR_S12[ \t]+\.text\.1
+[ \t]*\.\.\.
+[ \t]*44:[ \t]+00000122[ \t]+bnop \.S2 40 <[^>]*>,0
+[ \t]*44: R_C6000_PCR_S12[ \t]+\.text\.1\+0x20
+[ \t]*48:[ \t]+00000122[ \t]+bnop \.S2 40 <[^>]*>,0
+[ \t]*48: R_C6000_PCR_S12[ \t]+\.text\.1\+0x24
+[ \t]*4c:[ \t]+00801022[ \t]+bdec \.S2 40 <[^>]*>,b1
+[ \t]*4c: R_C6000_PCR_S10[ \t]+\.text\.1\+0x20
+[ \t]*50:[ \t]+00801022[ \t]+bdec \.S2 40 <[^>]*>,b1
+[ \t]*50: R_C6000_PCR_S10[ \t]+\.text\.1\+0x24
+[ \t]*54:[ \t]+00000012[ \t]+b \.S2 40 <[^>]*>
+[ \t]*54: R_C6000_PCR_S21[ \t]+\.text\.1\+0x20
+[ \t]*58:[ \t]+00000012[ \t]+b \.S2 40 <[^>]*>
+[ \t]*58: R_C6000_PCR_S21[ \t]+\.text\.1\+0x24
+[ \t]*5c:[ \t]+00800162[ \t]+addkpc \.S2 40 <[^>]*>,b1,0
+[ \t]*5c: R_C6000_PCR_S7[ \t]+\.text\.1\+0x20
+[ \t]*60:[ \t]+00800162[ \t]+addkpc \.S2 60 <[^>]*>,b1,0
+[ \t]*60: R_C6000_PCR_S7[ \t]+\.text\.1\+0x24
+[ \t]*\.\.\.
+
+Disassembly of section \.text\.1:
+
+0+ <[^>]*>:
+[ \t]*0:[ \t]+00000000[ \t]+nop 1
+
+0+4 <[^>]*>:
+[ \t]*\.\.\.
+
+0+20 <[^>]*>:
+[ \t]*20:[ \t]+00000000[ \t]+nop 1
+
+0+24 <[^>]*>:
+[ \t]*\.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local-r-rel.d b/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local-r-rel.d
new file mode 100644
index 0000000..e54c370
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local-r-rel.d
@@ -0,0 +1,62 @@
+#name: C6X PC-relative relocations, local symbols, -r, REL
+#as: -mlittle-endian -mgenerate-rel
+#ld: -r -melf32_tic6x_le
+#source: pcrel-reloc-local-1.s
+#source: pcrel-reloc-local-2.s
+#objdump: -dr
+
+.*: *file format elf32-tic6x-le
+
+
+Disassembly of section \.text:
+
+0+ <[^>]*>:
+[ \t]*0:[ \t]+00000000[ \t]+nop 1
+[ \t]*4:[ \t]+00800162[ \t]+addkpc \.S2 0 <[^>]*>,b1,0
+[ \t]*4: R_C6000_PCR_S7[ \t]+\.text\.1
+[ \t]*8:[ \t]+00810162[ \t]+addkpc \.S2 4 <[^>]*>,b1,0
+[ \t]*8: R_C6000_PCR_S7[ \t]+\.text\.1
+[ \t]*c:[ \t]+00000012[ \t]+b \.S2 0 <[^>]*>
+[ \t]*c: R_C6000_PCR_S21[ \t]+\.text\.1
+[ \t]*10:[ \t]+00000092[ \t]+b \.S2 4 <[^>]*>
+[ \t]*10: R_C6000_PCR_S21[ \t]+\.text\.1
+[ \t]*14:[ \t]+00801022[ \t]+bdec \.S2 0 <[^>]*>,b1
+[ \t]*14: R_C6000_PCR_S10[ \t]+\.text\.1
+[ \t]*18:[ \t]+00803022[ \t]+bdec \.S2 4 <[^>]*>,b1
+[ \t]*18: R_C6000_PCR_S10[ \t]+\.text\.1
+[ \t]*1c:[ \t]+00000122[ \t]+bnop \.S2 0 <[^>]*>,0
+[ \t]*1c: R_C6000_PCR_S12[ \t]+\.text\.1
+[ \t]*20:[ \t]+00010122[ \t]+bnop \.S2 24 <[^>]*>,0
+[ \t]*20: R_C6000_PCR_S12[ \t]+\.text\.1
+[ \t]*\.\.\.
+[ \t]*44:[ \t]+00080122[ \t]+bnop \.S2 60 <[^>]*>,0
+[ \t]*44: R_C6000_PCR_S12[ \t]+\.text\.1
+[ \t]*48:[ \t]+00090122[ \t]+bnop \.S2 64 <[^>]*>,0
+[ \t]*48: R_C6000_PCR_S12[ \t]+\.text\.1
+[ \t]*4c:[ \t]+00811022[ \t]+bdec \.S2 60 <[^>]*>,b1
+[ \t]*4c: R_C6000_PCR_S10[ \t]+\.text\.1
+[ \t]*50:[ \t]+00813022[ \t]+bdec \.S2 64 <[^>]*>,b1
+[ \t]*50: R_C6000_PCR_S10[ \t]+\.text\.1
+[ \t]*54:[ \t]+00000412[ \t]+b \.S2 60 <[^>]*>
+[ \t]*54: R_C6000_PCR_S21[ \t]+\.text\.1
+[ \t]*58:[ \t]+00000492[ \t]+b \.S2 64 <[^>]*>
+[ \t]*58: R_C6000_PCR_S21[ \t]+\.text\.1
+[ \t]*5c:[ \t]+00880162[ \t]+addkpc \.S2 60 <[^>]*>,b1,0
+[ \t]*5c: R_C6000_PCR_S7[ \t]+\.text\.1
+[ \t]*60:[ \t]+00890162[ \t]+addkpc \.S2 84 <[^>]*>,b1,0
+[ \t]*60: R_C6000_PCR_S7[ \t]+\.text\.1
+[ \t]*\.\.\.
+
+Disassembly of section \.text\.1:
+
+0+ <[^>]*>:
+[ \t]*0:[ \t]+00000000[ \t]+nop 1
+
+0+4 <[^>]*>:
+[ \t]*\.\.\.
+
+0+20 <[^>]*>:
+[ \t]*20:[ \t]+00000000[ \t]+nop 1
+
+0+24 <[^>]*>:
+[ \t]*\.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local-r.d b/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local-r.d
new file mode 100644
index 0000000..fa54742
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local-r.d
@@ -0,0 +1,62 @@
+#name: C6X PC-relative relocations, local symbols, -r
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: pcrel-reloc-local-1.s
+#source: pcrel-reloc-local-2.s
+#objdump: -dr
+
+.*: *file format elf32-tic6x-le
+
+
+Disassembly of section \.text:
+
+0+ <[^>]*>:
+[ \t]*0:[ \t]+00000000[ \t]+nop 1
+[ \t]*4:[ \t]+00800162[ \t]+addkpc \.S2 0 <[^>]*>,b1,0
+[ \t]*4: R_C6000_PCR_S7[ \t]+\.text\.1
+[ \t]*8:[ \t]+00800162[ \t]+addkpc \.S2 0 <[^>]*>,b1,0
+[ \t]*8: R_C6000_PCR_S7[ \t]+\.text\.1\+0x4
+[ \t]*c:[ \t]+00000012[ \t]+b \.S2 0 <[^>]*>
+[ \t]*c: R_C6000_PCR_S21[ \t]+\.text\.1
+[ \t]*10:[ \t]+00000012[ \t]+b \.S2 0 <[^>]*>
+[ \t]*10: R_C6000_PCR_S21[ \t]+\.text\.1\+0x4
+[ \t]*14:[ \t]+00801022[ \t]+bdec \.S2 0 <[^>]*>,b1
+[ \t]*14: R_C6000_PCR_S10[ \t]+\.text\.1
+[ \t]*18:[ \t]+00801022[ \t]+bdec \.S2 0 <[^>]*>,b1
+[ \t]*18: R_C6000_PCR_S10[ \t]+\.text\.1\+0x4
+[ \t]*1c:[ \t]+00000122[ \t]+bnop \.S2 0 <[^>]*>,0
+[ \t]*1c: R_C6000_PCR_S12[ \t]+\.text\.1
+[ \t]*20:[ \t]+00000122[ \t]+bnop \.S2 20 <[^>]*>,0
+[ \t]*20: R_C6000_PCR_S12[ \t]+\.text\.1\+0x4
+[ \t]*\.\.\.
+[ \t]*44:[ \t]+00000122[ \t]+bnop \.S2 40 <[^>]*>,0
+[ \t]*44: R_C6000_PCR_S12[ \t]+\.text\.1\+0x20
+[ \t]*48:[ \t]+00000122[ \t]+bnop \.S2 40 <[^>]*>,0
+[ \t]*48: R_C6000_PCR_S12[ \t]+\.text\.1\+0x24
+[ \t]*4c:[ \t]+00801022[ \t]+bdec \.S2 40 <[^>]*>,b1
+[ \t]*4c: R_C6000_PCR_S10[ \t]+\.text\.1\+0x20
+[ \t]*50:[ \t]+00801022[ \t]+bdec \.S2 40 <[^>]*>,b1
+[ \t]*50: R_C6000_PCR_S10[ \t]+\.text\.1\+0x24
+[ \t]*54:[ \t]+00000012[ \t]+b \.S2 40 <[^>]*>
+[ \t]*54: R_C6000_PCR_S21[ \t]+\.text\.1\+0x20
+[ \t]*58:[ \t]+00000012[ \t]+b \.S2 40 <[^>]*>
+[ \t]*58: R_C6000_PCR_S21[ \t]+\.text\.1\+0x24
+[ \t]*5c:[ \t]+00800162[ \t]+addkpc \.S2 40 <[^>]*>,b1,0
+[ \t]*5c: R_C6000_PCR_S7[ \t]+\.text\.1\+0x20
+[ \t]*60:[ \t]+00800162[ \t]+addkpc \.S2 60 <[^>]*>,b1,0
+[ \t]*60: R_C6000_PCR_S7[ \t]+\.text\.1\+0x24
+[ \t]*\.\.\.
+
+Disassembly of section \.text\.1:
+
+0+ <[^>]*>:
+[ \t]*0:[ \t]+00000000[ \t]+nop 1
+
+0+4 <[^>]*>:
+[ \t]*\.\.\.
+
+0+20 <[^>]*>:
+[ \t]*20:[ \t]+00000000[ \t]+nop 1
+
+0+24 <[^>]*>:
+[ \t]*\.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local-rel.d b/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local-rel.d
new file mode 100644
index 0000000..108ad53
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local-rel.d
@@ -0,0 +1,44 @@
+#name: C6X PC-relative relocations, local symbols, REL
+#as: -mlittle-endian -mgenerate-rel
+#ld: -melf32_tic6x_le -Tgeneric.ld
+#source: pcrel-reloc-local-1.s
+#source: pcrel-reloc-local-2.s
+#objdump: -dr
+
+.*: *file format elf32-tic6x-le
+
+
+Disassembly of section \.text:
+
+10000000 <[^>]*>:
+10000000:[ \t]+00000000[ \t]+nop 1
+10000004:[ \t]+00900162[ \t]+addkpc \.S2 10000040 <[^>]*>,b1,0
+10000008:[ \t]+00910162[ \t]+addkpc \.S2 10000044 <[^>]*>,b1,0
+1000000c:[ \t]+00000812[ \t]+b \.S2 10000040 <[^>]*>
+10000010:[ \t]+00000892[ \t]+b \.S2 10000044 <[^>]*>
+10000014:[ \t]+00821022[ \t]+bdec \.S2 10000040 <[^>]*>,b1
+10000018:[ \t]+00823022[ \t]+bdec \.S2 10000044 <[^>]*>,b1
+1000001c:[ \t]+00100122[ \t]+bnop \.S2 10000040 <[^>]*>,0
+10000020:[ \t]+00090122[ \t]+bnop \.S2 10000044 <[^>]*>,0
+[ \t]*\.\.\.
+
+10000040 <[^>]*>:
+10000040:[ \t]+00000000[ \t]+nop 1
+
+10000044 <[^>]*>:
+[ \t]*\.\.\.
+10000064:[ \t]+00100122[ \t]+bnop \.S2 100000a0 <[^>]*>,0
+10000068:[ \t]+00110122[ \t]+bnop \.S2 100000a4 <[^>]*>,0
+1000006c:[ \t]+00821022[ \t]+bdec \.S2 100000a0 <[^>]*>,b1
+10000070:[ \t]+00823022[ \t]+bdec \.S2 100000a4 <[^>]*>,b1
+10000074:[ \t]+00000812[ \t]+b \.S2 100000a0 <[^>]*>
+10000078:[ \t]+00000892[ \t]+b \.S2 100000a4 <[^>]*>
+1000007c:[ \t]+00900162[ \t]+addkpc \.S2 100000a0 <[^>]*>,b1,0
+10000080:[ \t]+00890162[ \t]+addkpc \.S2 100000a4 <[^>]*>,b1,0
+[ \t]*\.\.\.
+
+100000a0 <[^>]*>:
+100000a0:[ \t]+00000000[ \t]+nop 1
+
+100000a4 <[^>]*>:
+[ \t]*\.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local.d b/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local.d
new file mode 100644
index 0000000..b7cd444
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/pcrel-reloc-local.d
@@ -0,0 +1,44 @@
+#name: C6X PC-relative relocations, local symbols
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tgeneric.ld
+#source: pcrel-reloc-local-1.s
+#source: pcrel-reloc-local-2.s
+#objdump: -dr
+
+.*: *file format elf32-tic6x-le
+
+
+Disassembly of section \.text:
+
+10000000 <[^>]*>:
+10000000:[ \t]+00000000[ \t]+nop 1
+10000004:[ \t]+00900162[ \t]+addkpc \.S2 10000040 <[^>]*>,b1,0
+10000008:[ \t]+00910162[ \t]+addkpc \.S2 10000044 <[^>]*>,b1,0
+1000000c:[ \t]+00000812[ \t]+b \.S2 10000040 <[^>]*>
+10000010:[ \t]+00000892[ \t]+b \.S2 10000044 <[^>]*>
+10000014:[ \t]+00821022[ \t]+bdec \.S2 10000040 <[^>]*>,b1
+10000018:[ \t]+00823022[ \t]+bdec \.S2 10000044 <[^>]*>,b1
+1000001c:[ \t]+00100122[ \t]+bnop \.S2 10000040 <[^>]*>,0
+10000020:[ \t]+00090122[ \t]+bnop \.S2 10000044 <[^>]*>,0
+[ \t]*\.\.\.
+
+10000040 <[^>]*>:
+10000040:[ \t]+00000000[ \t]+nop 1
+
+10000044 <[^>]*>:
+[ \t]*\.\.\.
+10000064:[ \t]+00100122[ \t]+bnop \.S2 100000a0 <[^>]*>,0
+10000068:[ \t]+00110122[ \t]+bnop \.S2 100000a4 <[^>]*>,0
+1000006c:[ \t]+00821022[ \t]+bdec \.S2 100000a0 <[^>]*>,b1
+10000070:[ \t]+00823022[ \t]+bdec \.S2 100000a4 <[^>]*>,b1
+10000074:[ \t]+00000812[ \t]+b \.S2 100000a0 <[^>]*>
+10000078:[ \t]+00000892[ \t]+b \.S2 100000a4 <[^>]*>
+1000007c:[ \t]+00900162[ \t]+addkpc \.S2 100000a0 <[^>]*>,b1,0
+10000080:[ \t]+00890162[ \t]+addkpc \.S2 100000a4 <[^>]*>,b1,0
+[ \t]*\.\.\.
+
+100000a0 <[^>]*>:
+100000a0:[ \t]+00000000[ \t]+nop 1
+
+100000a4 <[^>]*>:
+[ \t]*\.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs-s16-1.d b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs-s16-1.d
new file mode 100644
index 0000000..6046491
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs-s16-1.d
@@ -0,0 +1,5 @@
+#name: C6X relocation overflow, ABS_S16
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tgeneric.ld --defsym s=0x8000
+#source: reloc-overflow-abs-s16.s
+#error: .*relocation truncated to fit: R_C6000_ABS_S16.*
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs-s16-2.d b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs-s16-2.d
new file mode 100644
index 0000000..1119665
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs-s16-2.d
@@ -0,0 +1,5 @@
+#name: C6X relocation underflow, ABS_S16
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tgeneric.ld --defsym s=0xffff7fff
+#source: reloc-overflow-abs-s16.s
+#error: .*relocation truncated to fit: R_C6000_ABS_S16.*
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs-s16.s b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs-s16.s
new file mode 100644
index 0000000..023d7b2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs-s16.s
@@ -0,0 +1,3 @@
+.text
+.nocmp
+ mvk .S1 s,a1
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs16-1.d b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs16-1.d
new file mode 100644
index 0000000..5344944
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs16-1.d
@@ -0,0 +1,5 @@
+#name: C6X relocation overflow, ABS16
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tgeneric.ld --defsym s=0x10000
+#source: reloc-overflow-abs16.s
+#error: .*relocation truncated to fit: R_C6000_ABS16.*
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs16-2.d b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs16-2.d
new file mode 100644
index 0000000..9b858a8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs16-2.d
@@ -0,0 +1,5 @@
+#name: C6X relocation underflow, ABS16
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tgeneric.ld --defsym s=0xffff7fff
+#source: reloc-overflow-abs16.s
+#error: .*relocation truncated to fit: R_C6000_ABS16.*
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs16.s b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs16.s
new file mode 100644
index 0000000..a8c2200
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs16.s
@@ -0,0 +1,3 @@
+.globl s
+.data
+ .short s
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs8-1.d b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs8-1.d
new file mode 100644
index 0000000..1bb87fc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs8-1.d
@@ -0,0 +1,5 @@
+#name: C6X relocation overflow, ABS8
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tgeneric.ld --defsym s=0x100
+#source: reloc-overflow-abs8.s
+#error: .*relocation truncated to fit: R_C6000_ABS8.*
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs8-2.d b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs8-2.d
new file mode 100644
index 0000000..85df882
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs8-2.d
@@ -0,0 +1,5 @@
+#name: C6X relocation underflow, ABS8
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tgeneric.ld --defsym s=0xffffff7f
+#source: reloc-overflow-abs8.s
+#error: .*relocation truncated to fit: R_C6000_ABS8.*
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs8.s b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs8.s
new file mode 100644
index 0000000..e08a65e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-abs8.s
@@ -0,0 +1,3 @@
+.globl s
+.data
+ .byte s
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s10-1.d b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s10-1.d
new file mode 100644
index 0000000..a19131c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s10-1.d
@@ -0,0 +1,5 @@
+#name: C6X relocation overflow, PCR_S10
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tgeneric.ld --defsym s=0x10000800
+#source: reloc-overflow-pcr-s10.s
+#error: .*relocation truncated to fit: R_C6000_PCR_S10.*
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s10-2.d b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s10-2.d
new file mode 100644
index 0000000..7ca26fb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s10-2.d
@@ -0,0 +1,5 @@
+#name: C6X relocation underflow, PCR_S10
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tgeneric.ld --defsym s=0x0ffff7fc
+#source: reloc-overflow-pcr-s10.s
+#error: .*relocation truncated to fit: R_C6000_PCR_S10.*
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s10.s b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s10.s
new file mode 100644
index 0000000..302eef0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s10.s
@@ -0,0 +1,3 @@
+.text
+.nocmp
+ bdec .S2 s,b1
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s12-1.d b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s12-1.d
new file mode 100644
index 0000000..60e8717
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s12-1.d
@@ -0,0 +1,5 @@
+#name: C6X relocation overflow, PCR_S12
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tgeneric.ld --defsym s=0x10002000
+#source: reloc-overflow-pcr-s12.s
+#error: .*relocation truncated to fit: R_C6000_PCR_S12.*
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s12-2.d b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s12-2.d
new file mode 100644
index 0000000..6a90764
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s12-2.d
@@ -0,0 +1,5 @@
+#name: C6X relocation underflow, PCR_S12
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tgeneric.ld --defsym s=0x0fffdffc
+#source: reloc-overflow-pcr-s12.s
+#error: .*relocation truncated to fit: R_C6000_PCR_S12.*
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s12.s b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s12.s
new file mode 100644
index 0000000..ea7946d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s12.s
@@ -0,0 +1,3 @@
+.text
+.nocmp
+ bnop .S2 s,0
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s21-1.d b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s21-1.d
new file mode 100644
index 0000000..4b8ca82
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s21-1.d
@@ -0,0 +1,5 @@
+#name: C6X relocation overflow, PCR_S21
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tgeneric.ld --defsym s=0x10400000
+#source: reloc-overflow-pcr-s21.s
+#error: .*relocation truncated to fit: R_C6000_PCR_S21.*
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s21-2.d b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s21-2.d
new file mode 100644
index 0000000..1339b7b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s21-2.d
@@ -0,0 +1,5 @@
+#name: C6X relocation underflow, PCR_S21
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tgeneric.ld --defsym s=0x0fbffffc
+#source: reloc-overflow-pcr-s21.s
+#error: .*relocation truncated to fit: R_C6000_PCR_S21.*
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s21.s b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s21.s
new file mode 100644
index 0000000..c902884
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s21.s
@@ -0,0 +1,3 @@
+.text
+.nocmp
+ b .S2 s
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s7-1.d b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s7-1.d
new file mode 100644
index 0000000..f4391ff
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s7-1.d
@@ -0,0 +1,5 @@
+#name: C6X relocation overflow, PCR_S7
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tgeneric.ld --defsym s=0x10000100
+#source: reloc-overflow-pcr-s7.s
+#error: .*relocation truncated to fit: R_C6000_PCR_S7.*
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s7-2.d b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s7-2.d
new file mode 100644
index 0000000..e0db0f1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s7-2.d
@@ -0,0 +1,5 @@
+#name: C6X relocation underflow, PCR_S7
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tgeneric.ld --defsym s=0x0ffffefc
+#source: reloc-overflow-pcr-s7.s
+#error: .*relocation truncated to fit: R_C6000_PCR_S7.*
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s7.s b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s7.s
new file mode 100644
index 0000000..58df0c6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-pcr-s7.s
@@ -0,0 +1,3 @@
+.text
+.nocmp
+ addkpc .S2 s,b1,0
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-s16-1.d b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-s16-1.d
new file mode 100644
index 0000000..2712e90
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-s16-1.d
@@ -0,0 +1,5 @@
+#name: C6X relocation overflow, SBR_S16
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tsbr.ld --defsym s=0x8080
+#source: reloc-overflow-sbr-s16.s
+#error: .*relocation truncated to fit: R_C6000_SBR_S16.*
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-s16-2.d b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-s16-2.d
new file mode 100644
index 0000000..144e414
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-s16-2.d
@@ -0,0 +1,5 @@
+#name: C6X relocation underflow, SBR_S16
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tsbr.ld --defsym s=0xffff807f
+#source: reloc-overflow-sbr-s16.s
+#error: .*relocation truncated to fit: R_C6000_SBR_S16.*
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-s16.s b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-s16.s
new file mode 100644
index 0000000..d208c8c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-s16.s
@@ -0,0 +1,3 @@
+.text
+.nocmp
+ mvk .S1 $dpr_byte(s),a1
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-b-1.d b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-b-1.d
new file mode 100644
index 0000000..d21ab5f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-b-1.d
@@ -0,0 +1,5 @@
+#name: C6X relocation overflow, SBR_U15_B
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tsbr.ld --defsym s=0x8080
+#source: reloc-overflow-sbr-u15-b.s
+#error: .*relocation truncated to fit: R_C6000_SBR_U15_B.*
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-b-2.d b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-b-2.d
new file mode 100644
index 0000000..f3b48b6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-b-2.d
@@ -0,0 +1,5 @@
+#name: C6X relocation underflow, SBR_U15_B
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tsbr.ld --defsym s=0x7f
+#source: reloc-overflow-sbr-u15-b.s
+#error: .*relocation truncated to fit: R_C6000_SBR_U15_B.*
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-b.s b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-b.s
new file mode 100644
index 0000000..8fcd019
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-b.s
@@ -0,0 +1,3 @@
+.text
+.nocmp
+ ldb .D2T2 *+b14(s),b1
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-h-1.d b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-h-1.d
new file mode 100644
index 0000000..178b781
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-h-1.d
@@ -0,0 +1,5 @@
+#name: C6X relocation overflow, SBR_U15_H
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tsbr.ld --defsym s=0x10080
+#source: reloc-overflow-sbr-u15-h.s
+#error: .*relocation truncated to fit: R_C6000_SBR_U15_H.*
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-h-2.d b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-h-2.d
new file mode 100644
index 0000000..914ec48
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-h-2.d
@@ -0,0 +1,5 @@
+#name: C6X relocation underflow, SBR_U15_H
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tsbr.ld --defsym s=0x7e
+#source: reloc-overflow-sbr-u15-h.s
+#error: .*relocation truncated to fit: R_C6000_SBR_U15_H.*
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-h.s b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-h.s
new file mode 100644
index 0000000..ed54caa
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-h.s
@@ -0,0 +1,3 @@
+.text
+.nocmp
+ ldh .D2T2 *+b14(s),b1
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-w-1.d b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-w-1.d
new file mode 100644
index 0000000..e152f85
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-w-1.d
@@ -0,0 +1,5 @@
+#name: C6X relocation overflow, SBR_U15_W
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tsbr.ld --defsym s=0x20080
+#source: reloc-overflow-sbr-u15-w.s
+#error: .*relocation truncated to fit: R_C6000_SBR_U15_W.*
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-w-2.d b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-w-2.d
new file mode 100644
index 0000000..995bee2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-w-2.d
@@ -0,0 +1,5 @@
+#name: C6X relocation underflow, SBR_U15_W
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tsbr.ld --defsym s=0x7c
+#source: reloc-overflow-sbr-u15-w.s
+#error: .*relocation truncated to fit: R_C6000_SBR_U15_W.*
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-w.s b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-w.s
new file mode 100644
index 0000000..1f6208c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/reloc-overflow-sbr-u15-w.s
@@ -0,0 +1,3 @@
+.text
+.nocmp
+ ldw .D2T2 *+b14(s),b1
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-global-rel.d b/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-global-rel.d
new file mode 100644
index 0000000..bc88717
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-global-rel.d
@@ -0,0 +1,24 @@
+#name: C6X SB-relative relocations, global symbols, REL
+#as: -mlittle-endian -mgenerate-rel
+#ld: -melf32_tic6x_le -Tsbr.ld --defsym sw1=0x80 --defsym sw2=0x2007c --defsym sh1=0x80 --defsym sh2=0x1007e --defsym sb1=0x80 --defsym sb2=0x807f --defsym sb16a=0xffff8080 --defsym sb16b=0x807f --defsym sbw=0x123456f8 --defsym shw=0x2468ad70 --defsym sww=0x48d15a60
+#source: sbr-reloc-global-rel.s
+#objdump: -dr
+
+.*: *file format elf32-tic6x-le
+
+
+Disassembly of section \.text:
+
+10000000 <[^>]*>:
+10000000:[ \t]+0080006e[ \t]+ldw \.D2T2 \*\+b14\(0\),b1
+10000004:[ \t]+00ffff6e[ \t]+ldw \.D2T2 \*\+b14\(131068\),b1
+10000008:[ \t]+0080004e[ \t]+ldh \.D2T2 \*\+b14\(0\),b1
+1000000c:[ \t]+00ffff4e[ \t]+ldh \.D2T2 \*\+b14\(65534\),b1
+10000010:[ \t]+0080002e[ \t]+ldb \.D2T2 \*\+b14\(0\),b1
+10000014:[ \t]+00ffff2e[ \t]+ldb \.D2T2 \*\+b14\(32767\),b1
+10000018:[ \t]+00c00028[ \t]+mvk \.S1 -32768,a1
+1000001c:[ \t]+00bfffa8[ \t]+mvk \.S1 32767,a1
+10000020:[ \t]+00ab3c28[ \t]+mvk \.S1 22136,a1
+10000024:[ \t]+00ab3c28[ \t]+mvk \.S1 22136,a1
+10000028:[ \t]+00ab3c28[ \t]+mvk \.S1 22136,a1
+[ \t]*\.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-global-rel.s b/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-global-rel.s
new file mode 100644
index 0000000..515e03e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-global-rel.s
@@ -0,0 +1,24 @@
+.globl sw1
+.globl sw2
+.globl sh1
+.globl sh2
+.globl sb1
+.globl sb2
+.globl sb16a
+.globl sb16b
+.globl sbw
+.globl shw
+.globl sww
+.text
+.nocmp
+ ldw .D2T2 *+b14(sw1),b1
+ ldw .D2T2 *+b14(sw2),b1
+ ldh .D2T2 *+b14(sh1),b1
+ ldh .D2T2 *+b14(sh2),b1
+ ldb .D2T2 *+b14(sb1),b1
+ ldb .D2T2 *+b14(sb2),b1
+ mvk .S1 $dpr_byte(sb16a),a1
+ mvk .S1 $dpr_byte(sb16b),a1
+ mvkl .S1 $dpr_byte(sbw),a1
+ mvkl .S1 $dpr_hword(shw),a1
+ mvkl .S1 $dpr_word(sww),a1
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-global.d b/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-global.d
new file mode 100644
index 0000000..92bf89c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-global.d
@@ -0,0 +1,27 @@
+#name: C6X SB-relative relocations, global symbols
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tsbr.ld --defsym sw1=0x80 --defsym sw2=0x2007c --defsym sh1=0x80 --defsym sh2=0x1007e --defsym sb1=0x80 --defsym sb2=0x807f --defsym sb16a=0xffff8080 --defsym sb16b=0x807f --defsym sbw=0x123456f8 --defsym shw=0x2468ad70 --defsym sww=0x48d15a60
+#source: sbr-reloc-global.s
+#objdump: -dr
+
+.*: *file format elf32-tic6x-le
+
+
+Disassembly of section \.text:
+
+10000000 <[^>]*>:
+10000000:[ \t]+0080006e[ \t]+ldw \.D2T2 \*\+b14\(0\),b1
+10000004:[ \t]+00ffff6e[ \t]+ldw \.D2T2 \*\+b14\(131068\),b1
+10000008:[ \t]+0080004e[ \t]+ldh \.D2T2 \*\+b14\(0\),b1
+1000000c:[ \t]+00ffff4e[ \t]+ldh \.D2T2 \*\+b14\(65534\),b1
+10000010:[ \t]+0080002e[ \t]+ldb \.D2T2 \*\+b14\(0\),b1
+10000014:[ \t]+00ffff2e[ \t]+ldb \.D2T2 \*\+b14\(32767\),b1
+10000018:[ \t]+00c00028[ \t]+mvk \.S1 -32768,a1
+1000001c:[ \t]+00bfffa8[ \t]+mvk \.S1 32767,a1
+10000020:[ \t]+00ab3c28[ \t]+mvk \.S1 22136,a1
+10000024:[ \t]+00891a68[ \t]+mvkh \.S1 305397760,a1
+10000028:[ \t]+00ab3c28[ \t]+mvk \.S1 22136,a1
+1000002c:[ \t]+00891a68[ \t]+mvkh \.S1 305397760,a1
+10000030:[ \t]+00ab3c28[ \t]+mvk \.S1 22136,a1
+10000034:[ \t]+00891a68[ \t]+mvkh \.S1 305397760,a1
+[ \t]*\.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-global.s b/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-global.s
new file mode 100644
index 0000000..12edd08
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-global.s
@@ -0,0 +1,27 @@
+.globl sw1
+.globl sw2
+.globl sh1
+.globl sh2
+.globl sb1
+.globl sb2
+.globl sb16a
+.globl sb16b
+.globl sbw
+.globl shw
+.globl sww
+.text
+.nocmp
+ ldw .D2T2 *+b14(sw1),b1
+ ldw .D2T2 *+b14(sw2),b1
+ ldh .D2T2 *+b14(sh1),b1
+ ldh .D2T2 *+b14(sh2),b1
+ ldb .D2T2 *+b14(sb1),b1
+ ldb .D2T2 *+b14(sb2),b1
+ mvk .S1 $dpr_byte(sb16a),a1
+ mvk .S1 $dpr_byte(sb16b),a1
+ mvkl .S1 $dpr_byte(sbw),a1
+ mvkh .S1 $dpr_byte(sbw),a1
+ mvkl .S1 $dpr_hword(shw),a1
+ mvkh .S1 $dpr_hword(shw),a1
+ mvkl .S1 $dpr_word(sww),a1
+ mvkh .S1 $dpr_word(sww),a1
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-1-rel.s b/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-1-rel.s
new file mode 100644
index 0000000..1316496
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-1-rel.s
@@ -0,0 +1,21 @@
+.text
+.nocmp
+ ldw .D2T2 *+b14(a),b1
+ ldw .D2T2 *+b14(b),b1
+ ldh .D2T2 *+b14(b),b1
+ ldh .D2T2 *+b14(c),b1
+ ldb .D2T2 *+b14(c),b1
+ ldb .D2T2 *+b14(d),b1
+ mvk .S1 $dpr_byte(d),a1
+ mvkl .S1 $dpr_byte(c),a1
+ mvkl .S1 $dpr_hword(b),a1
+ mvkl .S1 $dpr_word(a),a1
+.data
+a:
+ .word 0
+b:
+ .short 0
+c:
+ .byte 0
+d:
+ .byte 0
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-1.s b/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-1.s
new file mode 100644
index 0000000..25bb75c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-1.s
@@ -0,0 +1,24 @@
+.text
+.nocmp
+ ldw .D2T2 *+b14(a),b1
+ ldw .D2T2 *+b14(b),b1
+ ldh .D2T2 *+b14(b),b1
+ ldh .D2T2 *+b14(c),b1
+ ldb .D2T2 *+b14(c),b1
+ ldb .D2T2 *+b14(d),b1
+ mvk .S1 $dpr_byte(d),a1
+ mvkl .S1 $dpr_byte(c),a1
+ mvkh .S1 $dpr_byte(d),a1
+ mvkl .S1 $dpr_hword(b),a1
+ mvkh .S1 $dpr_hword(c),a1
+ mvkl .S1 $dpr_word(a),a1
+ mvkh .S1 $dpr_word(b),a1
+.data
+a:
+ .word 0
+b:
+ .short 0
+c:
+ .byte 0
+d:
+ .byte 0
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-2-rel.s b/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-2-rel.s
new file mode 100644
index 0000000..e1268fb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-2-rel.s
@@ -0,0 +1,21 @@
+.text
+.nocmp
+ ldw .D2T2 *+b14(e),b1
+ ldw .D2T2 *+b14(f),b1
+ ldh .D2T2 *+b14(f),b1
+ ldh .D2T2 *+b14(g),b1
+ ldb .D2T2 *+b14(g),b1
+ ldb .D2T2 *+b14(h),b1
+ mvk .S1 $dpr_byte(h),a1
+ mvkl .S1 $dpr_byte(g),a1
+ mvkl .S1 $dpr_hword(f),a1
+ mvkl .S1 $dpr_word(e),a1
+.data
+e:
+ .word 0
+f:
+ .short 0
+g:
+ .byte 0
+h:
+ .byte 0
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-2.s b/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-2.s
new file mode 100644
index 0000000..2ced424
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-2.s
@@ -0,0 +1,24 @@
+.text
+.nocmp
+ ldw .D2T2 *+b14(e),b1
+ ldw .D2T2 *+b14(f),b1
+ ldh .D2T2 *+b14(f),b1
+ ldh .D2T2 *+b14(g),b1
+ ldb .D2T2 *+b14(g),b1
+ ldb .D2T2 *+b14(h),b1
+ mvk .S1 $dpr_byte(h),a1
+ mvkl .S1 $dpr_byte(g),a1
+ mvkh .S1 $dpr_byte(h),a1
+ mvkl .S1 $dpr_hword(f),a1
+ mvkh .S1 $dpr_hword(g),a1
+ mvkl .S1 $dpr_word(e),a1
+ mvkh .S1 $dpr_word(f),a1
+.data
+e:
+ .word 0
+f:
+ .short 0
+g:
+ .byte 0
+h:
+ .byte 0
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-r-rel.d b/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-r-rel.d
new file mode 100644
index 0000000..801c6a2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-r-rel.d
@@ -0,0 +1,55 @@
+#name: C6X SB-relative relocations, local symbols, -r, REL
+#as: -mlittle-endian -mgenerate-rel
+#ld: -r -melf32_tic6x_le
+#source: sbr-reloc-local-1-rel.s
+#source: sbr-reloc-local-2-rel.s
+#objdump: -dr
+
+.*: *file format elf32-tic6x-le
+
+
+Disassembly of section \.text:
+
+0+ <[^>]*>:
+[ \t]*0:[ \t]+0080006e[ \t]+ldw \.D2T2 \*\+b14\(0\),b1
+[ \t]*0: R_C6000_SBR_U15_W[ \t]+\.data
+[ \t]*4:[ \t]+0080016e[ \t]+ldw \.D2T2 \*\+b14\(4\),b1
+[ \t]*4: R_C6000_SBR_U15_W[ \t]+\.data
+[ \t]*8:[ \t]+0080024e[ \t]+ldh \.D2T2 \*\+b14\(4\),b1
+[ \t]*8: R_C6000_SBR_U15_H[ \t]+\.data
+[ \t]*c:[ \t]+0080034e[ \t]+ldh \.D2T2 \*\+b14\(6\),b1
+[ \t]*c: R_C6000_SBR_U15_H[ \t]+\.data
+[ \t]*10:[ \t]+0080062e[ \t]+ldb \.D2T2 \*\+b14\(6\),b1
+[ \t]*10: R_C6000_SBR_U15_B[ \t]+\.data
+[ \t]*14:[ \t]+0080072e[ \t]+ldb \.D2T2 \*\+b14\(7\),b1
+[ \t]*14: R_C6000_SBR_U15_B[ \t]+\.data
+[ \t]*18:[ \t]+008003a8[ \t]+mvk \.S1 7,a1
+[ \t]*18: R_C6000_SBR_S16[ \t]+\.data
+[ \t]*1c:[ \t]+00800328[ \t]+mvk \.S1 6,a1
+[ \t]*1c: R_C6000_SBR_L16_B[ \t]+\.data
+[ \t]*20:[ \t]+00800128[ \t]+mvk \.S1 2,a1
+[ \t]*20: R_C6000_SBR_L16_H[ \t]+\.data
+[ \t]*24:[ \t]+00800028[ \t]+mvk \.S1 0,a1
+[ \t]*24: R_C6000_SBR_L16_W[ \t]+\.data
+[ \t]*\.\.\.
+[ \t]*40:[ \t]+0080026e[ \t]+ldw \.D2T2 \*\+b14\(8\),b1
+[ \t]*40: R_C6000_SBR_U15_W[ \t]+\.data
+[ \t]*44:[ \t]+0080036e[ \t]+ldw \.D2T2 \*\+b14\(12\),b1
+[ \t]*44: R_C6000_SBR_U15_W[ \t]+\.data
+[ \t]*48:[ \t]+0080064e[ \t]+ldh \.D2T2 \*\+b14\(12\),b1
+[ \t]*48: R_C6000_SBR_U15_H[ \t]+\.data
+[ \t]*4c:[ \t]+0080074e[ \t]+ldh \.D2T2 \*\+b14\(14\),b1
+[ \t]*4c: R_C6000_SBR_U15_H[ \t]+\.data
+[ \t]*50:[ \t]+00800e2e[ \t]+ldb \.D2T2 \*\+b14\(14\),b1
+[ \t]*50: R_C6000_SBR_U15_B[ \t]+\.data
+[ \t]*54:[ \t]+00800f2e[ \t]+ldb \.D2T2 \*\+b14\(15\),b1
+[ \t]*54: R_C6000_SBR_U15_B[ \t]+\.data
+[ \t]*58:[ \t]+008007a8[ \t]+mvk \.S1 15,a1
+[ \t]*58: R_C6000_SBR_S16[ \t]+\.data
+[ \t]*5c:[ \t]+00800728[ \t]+mvk \.S1 14,a1
+[ \t]*5c: R_C6000_SBR_L16_B[ \t]+\.data
+[ \t]*60:[ \t]+00800328[ \t]+mvk \.S1 6,a1
+[ \t]*60: R_C6000_SBR_L16_H[ \t]+\.data
+[ \t]*64:[ \t]+00800128[ \t]+mvk \.S1 2,a1
+[ \t]*64: R_C6000_SBR_L16_W[ \t]+\.data
+[ \t]*\.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-r.d b/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-r.d
new file mode 100644
index 0000000..fdb2e14
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-r.d
@@ -0,0 +1,67 @@
+#name: C6X SB-relative relocations, local symbols, -r
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: sbr-reloc-local-1.s
+#source: sbr-reloc-local-2.s
+#objdump: -dr
+
+.*: *file format elf32-tic6x-le
+
+
+Disassembly of section \.text:
+
+0+ <[^>]*>:
+[ \t]*0:[ \t]+0080006e[ \t]+ldw \.D2T2 \*\+b14\(0\),b1
+[ \t]*0: R_C6000_SBR_U15_W[ \t]+\.data
+[ \t]*4:[ \t]+0080006e[ \t]+ldw \.D2T2 \*\+b14\(0\),b1
+[ \t]*4: R_C6000_SBR_U15_W[ \t]+\.data\+0x4
+[ \t]*8:[ \t]+0080004e[ \t]+ldh \.D2T2 \*\+b14\(0\),b1
+[ \t]*8: R_C6000_SBR_U15_H[ \t]+\.data\+0x4
+[ \t]*c:[ \t]+0080004e[ \t]+ldh \.D2T2 \*\+b14\(0\),b1
+[ \t]*c: R_C6000_SBR_U15_H[ \t]+\.data\+0x6
+[ \t]*10:[ \t]+0080002e[ \t]+ldb \.D2T2 \*\+b14\(0\),b1
+[ \t]*10: R_C6000_SBR_U15_B[ \t]+\.data\+0x6
+[ \t]*14:[ \t]+0080002e[ \t]+ldb \.D2T2 \*\+b14\(0\),b1
+[ \t]*14: R_C6000_SBR_U15_B[ \t]+\.data\+0x7
+[ \t]*18:[ \t]+00800028[ \t]+mvk \.S1 0,a1
+[ \t]*18: R_C6000_SBR_S16[ \t]+\.data\+0x7
+[ \t]*1c:[ \t]+00800028[ \t]+mvk \.S1 0,a1
+[ \t]*1c: R_C6000_SBR_L16_B[ \t]+\.data\+0x6
+[ \t]*20:[ \t]+00800068[ \t]+mvkh \.S1 0,a1
+[ \t]*20: R_C6000_SBR_H16_B[ \t]+\.data\+0x7
+[ \t]*24:[ \t]+00800028[ \t]+mvk \.S1 0,a1
+[ \t]*24: R_C6000_SBR_L16_H[ \t]+\.data\+0x4
+[ \t]*28:[ \t]+00800068[ \t]+mvkh \.S1 0,a1
+[ \t]*28: R_C6000_SBR_H16_H[ \t]+\.data\+0x6
+[ \t]*2c:[ \t]+00800028[ \t]+mvk \.S1 0,a1
+[ \t]*2c: R_C6000_SBR_L16_W[ \t]+\.data
+[ \t]*30:[ \t]+00800068[ \t]+mvkh \.S1 0,a1
+[ \t]*30: R_C6000_SBR_H16_W[ \t]+\.data\+0x4
+[ \t]*\.\.\.
+[ \t]*40:[ \t]+0080006e[ \t]+ldw \.D2T2 \*\+b14\(0\),b1
+[ \t]*40: R_C6000_SBR_U15_W[ \t]+\.data\+0x8
+[ \t]*44:[ \t]+0080006e[ \t]+ldw \.D2T2 \*\+b14\(0\),b1
+[ \t]*44: R_C6000_SBR_U15_W[ \t]+\.data\+0xc
+[ \t]*48:[ \t]+0080004e[ \t]+ldh \.D2T2 \*\+b14\(0\),b1
+[ \t]*48: R_C6000_SBR_U15_H[ \t]+\.data\+0xc
+[ \t]*4c:[ \t]+0080004e[ \t]+ldh \.D2T2 \*\+b14\(0\),b1
+[ \t]*4c: R_C6000_SBR_U15_H[ \t]+\.data\+0xe
+[ \t]*50:[ \t]+0080002e[ \t]+ldb \.D2T2 \*\+b14\(0\),b1
+[ \t]*50: R_C6000_SBR_U15_B[ \t]+\.data\+0xe
+[ \t]*54:[ \t]+0080002e[ \t]+ldb \.D2T2 \*\+b14\(0\),b1
+[ \t]*54: R_C6000_SBR_U15_B[ \t]+\.data\+0xf
+[ \t]*58:[ \t]+00800028[ \t]+mvk \.S1 0,a1
+[ \t]*58: R_C6000_SBR_S16[ \t]+\.data\+0xf
+[ \t]*5c:[ \t]+00800028[ \t]+mvk \.S1 0,a1
+[ \t]*5c: R_C6000_SBR_L16_B[ \t]+\.data\+0xe
+[ \t]*60:[ \t]+00800068[ \t]+mvkh \.S1 0,a1
+[ \t]*60: R_C6000_SBR_H16_B[ \t]+\.data\+0xf
+[ \t]*64:[ \t]+00800028[ \t]+mvk \.S1 0,a1
+[ \t]*64: R_C6000_SBR_L16_H[ \t]+\.data\+0xc
+[ \t]*68:[ \t]+00800068[ \t]+mvkh \.S1 0,a1
+[ \t]*68: R_C6000_SBR_H16_H[ \t]+\.data\+0xe
+[ \t]*6c:[ \t]+00800028[ \t]+mvk \.S1 0,a1
+[ \t]*6c: R_C6000_SBR_L16_W[ \t]+\.data\+0x8
+[ \t]*70:[ \t]+00800068[ \t]+mvkh \.S1 0,a1
+[ \t]*70: R_C6000_SBR_H16_W[ \t]+\.data\+0xc
+[ \t]*\.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-rel.d b/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-rel.d
new file mode 100644
index 0000000..005167e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local-rel.d
@@ -0,0 +1,35 @@
+#name: C6X SB-relative relocations, local symbols, REL
+#as: -mlittle-endian -mgenerate-rel
+#ld: -melf32_tic6x_le -Tsbr.ld
+#source: sbr-reloc-local-1-rel.s
+#source: sbr-reloc-local-2-rel.s
+#objdump: -dr
+
+.*: *file format elf32-tic6x-le
+
+
+Disassembly of section \.text:
+
+10000000 <[^>]*>:
+10000000:[ \t]+0080006e[ \t]+ldw \.D2T2 \*\+b14\(0\),b1
+10000004:[ \t]+0080016e[ \t]+ldw \.D2T2 \*\+b14\(4\),b1
+10000008:[ \t]+0080024e[ \t]+ldh \.D2T2 \*\+b14\(4\),b1
+1000000c:[ \t]+0080034e[ \t]+ldh \.D2T2 \*\+b14\(6\),b1
+10000010:[ \t]+0080062e[ \t]+ldb \.D2T2 \*\+b14\(6\),b1
+10000014:[ \t]+0080072e[ \t]+ldb \.D2T2 \*\+b14\(7\),b1
+10000018:[ \t]+008003a8[ \t]+mvk \.S1 7,a1
+1000001c:[ \t]+00800328[ \t]+mvk \.S1 6,a1
+10000020:[ \t]+00800128[ \t]+mvk \.S1 2,a1
+10000024:[ \t]+00800028[ \t]+mvk \.S1 0,a1
+[ \t]*\.\.\.
+10000040:[ \t]+0080026e[ \t]+ldw \.D2T2 \*\+b14\(8\),b1
+10000044:[ \t]+0080036e[ \t]+ldw \.D2T2 \*\+b14\(12\),b1
+10000048:[ \t]+0080064e[ \t]+ldh \.D2T2 \*\+b14\(12\),b1
+1000004c:[ \t]+0080074e[ \t]+ldh \.D2T2 \*\+b14\(14\),b1
+10000050:[ \t]+00800e2e[ \t]+ldb \.D2T2 \*\+b14\(14\),b1
+10000054:[ \t]+00800f2e[ \t]+ldb \.D2T2 \*\+b14\(15\),b1
+10000058:[ \t]+008007a8[ \t]+mvk \.S1 15,a1
+1000005c:[ \t]+00800728[ \t]+mvk \.S1 14,a1
+10000060:[ \t]+00800328[ \t]+mvk \.S1 6,a1
+10000064:[ \t]+00800128[ \t]+mvk \.S1 2,a1
+[ \t]*\.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local.d b/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local.d
new file mode 100644
index 0000000..0db2c24
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/sbr-reloc-local.d
@@ -0,0 +1,41 @@
+#name: C6X SB-relative relocations, local symbols
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tsbr.ld
+#source: sbr-reloc-local-1.s
+#source: sbr-reloc-local-2.s
+#objdump: -dr
+
+.*: *file format elf32-tic6x-le
+
+
+Disassembly of section \.text:
+
+10000000 <[^>]*>:
+10000000:[ \t]+0080006e[ \t]+ldw \.D2T2 \*\+b14\(0\),b1
+10000004:[ \t]+0080016e[ \t]+ldw \.D2T2 \*\+b14\(4\),b1
+10000008:[ \t]+0080024e[ \t]+ldh \.D2T2 \*\+b14\(4\),b1
+1000000c:[ \t]+0080034e[ \t]+ldh \.D2T2 \*\+b14\(6\),b1
+10000010:[ \t]+0080062e[ \t]+ldb \.D2T2 \*\+b14\(6\),b1
+10000014:[ \t]+0080072e[ \t]+ldb \.D2T2 \*\+b14\(7\),b1
+10000018:[ \t]+008003a8[ \t]+mvk \.S1 7,a1
+1000001c:[ \t]+00800328[ \t]+mvk \.S1 6,a1
+10000020:[ \t]+00800068[ \t]+mvkh \.S1 0,a1
+10000024:[ \t]+00800128[ \t]+mvk \.S1 2,a1
+10000028:[ \t]+00800068[ \t]+mvkh \.S1 0,a1
+1000002c:[ \t]+00800028[ \t]+mvk \.S1 0,a1
+10000030:[ \t]+00800068[ \t]+mvkh \.S1 0,a1
+[ \t]*\.\.\.
+10000040:[ \t]+0080026e[ \t]+ldw \.D2T2 \*\+b14\(8\),b1
+10000044:[ \t]+0080036e[ \t]+ldw \.D2T2 \*\+b14\(12\),b1
+10000048:[ \t]+0080064e[ \t]+ldh \.D2T2 \*\+b14\(12\),b1
+1000004c:[ \t]+0080074e[ \t]+ldh \.D2T2 \*\+b14\(14\),b1
+10000050:[ \t]+00800e2e[ \t]+ldb \.D2T2 \*\+b14\(14\),b1
+10000054:[ \t]+00800f2e[ \t]+ldb \.D2T2 \*\+b14\(15\),b1
+10000058:[ \t]+008007a8[ \t]+mvk \.S1 15,a1
+1000005c:[ \t]+00800728[ \t]+mvk \.S1 14,a1
+10000060:[ \t]+00800068[ \t]+mvkh \.S1 0,a1
+10000064:[ \t]+00800328[ \t]+mvk \.S1 6,a1
+10000068:[ \t]+00800068[ \t]+mvkh \.S1 0,a1
+1000006c:[ \t]+00800128[ \t]+mvk \.S1 2,a1
+10000070:[ \t]+00800068[ \t]+mvkh \.S1 0,a1
+[ \t]*\.\.\.
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/sbr.ld b/binutils-2.21/ld/testsuite/ld-tic6x/sbr.ld
new file mode 100644
index 0000000..909f589
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/sbr.ld
@@ -0,0 +1,9 @@
+EXTERN (__c6xabi_DSBT_BASE);
+SECTIONS
+{
+ . = 0x80;
+ .data : { PROVIDE_HIDDEN (__c6xabi_DSBT_BASE = .); *(.data*) }
+ . = 0x10000000;
+ .text : { *(.text*) }
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-tic6x/tic6x.exp b/binutils-2.21/ld/testsuite/ld-tic6x/tic6x.exp
new file mode 100644
index 0000000..3108a09
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-tic6x/tic6x.exp
@@ -0,0 +1,7 @@
+if { [istarget tic6x-*-*] } {
+ foreach test [lsort [glob -nocomplain $srcdir/$subdir/*.d]] {
+ if { [runtest_file_p $runtests $test] } {
+ run_dump_test [file rootname $test]
+ }
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-undefined/dummy.s b/binutils-2.21/ld/testsuite/ld-undefined/dummy.s
new file mode 100644
index 0000000..328ba74
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-undefined/dummy.s
@@ -0,0 +1,2 @@
+ .text
+ .byte 0
diff --git a/binutils-2.21/ld/testsuite/ld-undefined/entry-1.d b/binutils-2.21/ld/testsuite/ld-undefined/entry-1.d
new file mode 100644
index 0000000..551042e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-undefined/entry-1.d
@@ -0,0 +1,8 @@
+#name: --entry foo archive
+#source: dummy.s
+#ld: --entry foo tmpdir/libentry.a
+#nm: -n
+
+#...
+[0-9a-f]+ T +foo
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-undefined/entry-2.d b/binutils-2.21/ld/testsuite/ld-undefined/entry-2.d
new file mode 100644
index 0000000..9122313
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-undefined/entry-2.d
@@ -0,0 +1,8 @@
+#name: --entry foo -u foo archive
+#source: dummy.s
+#ld: --entry foo -u foo tmpdir/libentry.a
+#nm: -n
+
+#...
+[0-9a-f]+ T +foo
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-undefined/entry-3.d b/binutils-2.21/ld/testsuite/ld-undefined/entry-3.d
new file mode 100644
index 0000000..184f478
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-undefined/entry-3.d
@@ -0,0 +1,9 @@
+#name: -shared --entry foo archive
+#source: dummy.s
+#ld: -shared --entry foo tmpdir/libentry.a
+#nm: -n
+#target: *-*-linux*
+
+#...
+[0-9a-f]+ T +foo
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-undefined/entry-4.d b/binutils-2.21/ld/testsuite/ld-undefined/entry-4.d
new file mode 100644
index 0000000..44006aa
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-undefined/entry-4.d
@@ -0,0 +1,9 @@
+#name: -shared --entry foo -u foo archive
+#source: dummy.s
+#ld: -shared --entry foo -u foo tmpdir/libentry.a
+#nm: -n
+#target: *-*-linux*
+
+#...
+[0-9a-f]+ T +foo
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-undefined/entry-5.d b/binutils-2.21/ld/testsuite/ld-undefined/entry-5.d
new file mode 100644
index 0000000..fc36e82
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-undefined/entry-5.d
@@ -0,0 +1,8 @@
+#name: --entry foo
+#source: entry.s
+#ld: --entry foo
+#nm: -n
+
+#...
+[0-9a-f]+ T +foo
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-undefined/entry-6.d b/binutils-2.21/ld/testsuite/ld-undefined/entry-6.d
new file mode 100644
index 0000000..c013a1a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-undefined/entry-6.d
@@ -0,0 +1,8 @@
+#name: --entry foo -u foo
+#source: entry.s
+#ld: --entry foo -u foo
+#nm: -n
+
+#...
+[0-9a-f]+ T +foo
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-undefined/entry-7.d b/binutils-2.21/ld/testsuite/ld-undefined/entry-7.d
new file mode 100644
index 0000000..c3d0410
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-undefined/entry-7.d
@@ -0,0 +1,5 @@
+#name: --entry 0x0
+#source: dummy.s
+#ld: --entry 0x0
+#nm: -u
+
diff --git a/binutils-2.21/ld/testsuite/ld-undefined/entry.exp b/binutils-2.21/ld/testsuite/ld-undefined/entry.exp
new file mode 100644
index 0000000..76e50f8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-undefined/entry.exp
@@ -0,0 +1,35 @@
+# Expect script for ld --entry tests
+# Copyright (C) 2009 Free Software Foundation
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+set build_tests {
+ {"Build libentry.a"
+ "" ""
+ {entry.s} {} "libentry.a"}
+}
+
+run_ld_link_tests $build_tests
+
+set test_list [lsort [glob -nocomplain $srcdir/$subdir/entry*.d]]
+foreach t $test_list {
+ # We need to strip the ".d", but can leave the dirname.
+ verbose [file rootname $t]
+ run_dump_test [file rootname $t]
+}
diff --git a/binutils-2.21/ld/testsuite/ld-undefined/entry.s b/binutils-2.21/ld/testsuite/ld-undefined/entry.s
new file mode 100644
index 0000000..4a70181
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-undefined/entry.s
@@ -0,0 +1,4 @@
+ .text
+ .globl foo
+foo:
+ .byte 0
diff --git a/binutils-2.21/ld/testsuite/ld-undefined/undefined.c b/binutils-2.21/ld/testsuite/ld-undefined/undefined.c
new file mode 100644
index 0000000..ef2aec6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-undefined/undefined.c
@@ -0,0 +1,10 @@
+/* This file is used to test the linker's reporting of undefined
+ symbols. */
+
+extern int this_function_is_not_defined ();
+
+int
+function ()
+{
+ return this_function_is_not_defined ();
+}
diff --git a/binutils-2.21/ld/testsuite/ld-undefined/undefined.exp b/binutils-2.21/ld/testsuite/ld-undefined/undefined.exp
new file mode 100644
index 0000000..e80be03
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-undefined/undefined.exp
@@ -0,0 +1,144 @@
+# Test that the linker reports undefined symbol errors correctly.
+# By Ian Lance Taylor, Cygnus Support
+#
+# Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2007, 2008 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+set testund "undefined"
+set testfn "undefined function"
+set testline "undefined line"
+
+if { ![is_remote host] && [which $CC] == 0 } {
+ verbose "Could not find C compiler!" 1
+ untested $testund
+ untested $testfn
+ untested $testline
+ return
+}
+
+if ![ld_compile "$CC -g" $srcdir/$subdir/undefined.c tmpdir/undefined.o] {
+ verbose "Unable to compile test file!" 1
+ unresolved $testund
+ unresolved $testfn
+ unresolved $testline
+ return
+}
+
+remote_file host delete "tmpdir/undefined"
+
+set flags [big_or_little_endian]
+
+# Using -e start prevents the SunOS linker from trying to build a
+# shared library.
+send_log "$ld -e start $flags -o tmpdir/undefined tmpdir/undefined.o\n"
+set exec_output [run_host_cmd "$ld" "-e start $flags -o tmpdir/undefined tmpdir/undefined.o"]
+
+send_log "$exec_output\n"
+verbose "$exec_output"
+
+proc checkund { string testname } {
+ global exec_output
+
+ if [string match "*$string*" $exec_output] {
+ pass $testname
+ } else {
+ fail $testname
+ }
+}
+
+set mu "undefined reference to `*this_function_is_not_defined'"
+checkund $mu $testund
+
+# ARM PE defaults to using stabs debugging, which we can't handle for
+# a COFF file.
+#setup_xfail "arm*-*-pe*"
+#setup_xfail "thumb*-*-pe*"
+
+# For Xtensa on GNU Linux systems (or any other system where PIC code is
+# always used), the address of the undefined function is in a literal pool
+# outside the function, so that both the "undefined function" and "undefined
+# line" tests fail.
+setup_xfail xtensa*-*-linux*
+
+set mf "tmpdir/undefined.o* In function `function':"
+checkund $mf $testfn
+
+if ![is_elf_format] {
+ # COFF SH gets this test wrong--it reports line 10, because although
+ # the jump is at line 9, the function address, and the reloc, is
+ # stored at the end of the function.
+ setup_xfail "sh-*-*"
+
+ # ARM PE defaults to using stabs debugging, which we can't handle for
+ # a COFF file.
+ #setup_xfail "arm*-*-pe*"
+ #setup_xfail "thumb*-*-pe*"
+}
+
+set ml "undefined.c:9: undefined reference to `*this_function_is_not_defined'"
+# With targets that use elf/dwarf2, such as the arm-elf and thumb-elf
+# toolchains, the code in bfd/elf.c:_bfd_elf_find_nearest_line() is called
+# in order to locate the file name/line number where the undefined
+# reference occurs. Unfortunately this tries to use the dwarf2 debug
+# information held in the .debug_info section. This section contains a series
+# of comp_unit structures, each of which has a low/high address range
+# representing the span of memory locations covered by that structure. The
+# structures also index into other structures held in the .debug_line section
+# and together they can translate memory locations back into file/function/line
+# number addresses in the source code. Since the information about the memory
+# region covered by a comp_unit is only determined at link time, the low/high
+# addresses in the .debug_info section and the line addresses in the .debug_line
+# section are computed by generating relocs against known symbols in the object
+# code.
+#
+# When the undefined reference is detected, the relocs in the dwarf2
+# debug sections have not yet been resolved, so the low/high addresses and the
+# line number address are all set at zero. Thus when _bfd_elf_find_nearest_line()
+# calls _bfd_dwarf2_find_nearest_line() no comp_unit can be found which
+# actually covers the address where the reference occured, and so
+# _bfd_elf_find_nearest_line() fails.
+#
+# The upshot of all of this, is that the error message reported by the
+# linker, instead of having a source file name & line number as in:
+#
+# undefined.c:9: undefined reference to `this_function_is_not_defined'
+#
+# has an object file & section address instead:
+#
+# undefined.0(.text+0xc): undefined reference to `this_function_is_not_defined'
+#
+# hence the xfails below.
+
+setup_xfail mcore-*-elf
+setup_xfail mep-*-*
+setup_xfail mips-sgi-irix6*
+setup_xfail "sh64-*-*"
+
+# The undefined test fails on 31 bit s/390 because the address of the
+# function `this_function_is_not_defined' is stored in the literal pool of
+# the function. Therefore the line number in the error message is 8 instead
+# of 9. On 64 bit s/390 this works because of the new brasl instruction that
+# doesn't need a literal pool entry.
+setup_xfail s390-*-*
+
+# See comments above for Xtensa.
+setup_xfail xtensa*-*-linux*
+
+checkund $ml $testline
diff --git a/binutils-2.21/ld/testsuite/ld-undefined/weak-undef.exp b/binutils-2.21/ld/testsuite/ld-undefined/weak-undef.exp
new file mode 100644
index 0000000..a4f35e4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-undefined/weak-undef.exp
@@ -0,0 +1,83 @@
+# Test handling of weak undefined symbols
+# Copyright 2001, 2002, 2004, 2005, 2007
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+set testname "weak undefined symbols"
+
+# This test only works for ELF targets. It ought to work for some
+# a.out targets, but it doesn't.
+
+if { ![istarget *-*-sysv4*] \
+ && ![istarget *-*-unixware*] \
+ && ![istarget *-*-elf*] \
+ && ![istarget *-*-eabi*] \
+ && ![istarget hppa*64*-*-hpux*] \
+ && ![istarget *-*-linux*] \
+ && ![istarget *-*-irix5*] \
+ && ![istarget *-*-irix6*] \
+ && ![is_pecoff_format] \
+ && ![istarget *-*-solaris2*] } then {
+ unsupported $testname
+ return
+}
+
+if { [istarget *-*-linux*aout*] \
+ || [istarget *-*-linux*oldld*] } {
+ unsupported $testname
+ return
+}
+
+# Weak symbols are broken for non-i386 PE targets.
+if {! [istarget i?86-*-*]} {
+ setup_xfail *-*-pe*
+}
+
+setup_xfail hppa64-*-* pj-*-*
+
+if {! [ld_assemble $as $srcdir/$subdir/weak-undef.s tmpdir/weak-undef.o]} then {
+ # It's OK if .weak doesn't work on this target.
+ unresolved $testname
+ return
+}
+
+# The linker should accept references to undefined weaks without error,
+# and resolve them to zero.
+
+set output_regexp \
+".*Contents of section .data:.*0000 00000000 11111111.*"
+
+if {! [ld_simple_link $ld tmpdir/weak-undef "$flags tmpdir/weak-undef.o -T $srcdir/$subdir/weak-undef.t"] } then {
+ fail $testname
+} else {
+ if {![is_remote host] && [which $objdump] == 0} then {
+ unresolved $testname
+ return
+ }
+
+ set exec_output [run_host_cmd "$objdump" "-s tmpdir/weak-undef"]
+ set exec_output [prune_warnings $exec_output]
+ verbose -log $exec_output
+
+ if {[regexp $output_regexp $exec_output]} then {
+ pass $testname
+ } else {
+ fail $testname
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-undefined/weak-undef.s b/binutils-2.21/ld/testsuite/ld-undefined/weak-undef.s
new file mode 100644
index 0000000..dbdbaa2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-undefined/weak-undef.s
@@ -0,0 +1,4 @@
+ .data
+ .weak foo
+ .long foo
+ .long 0x11111111
diff --git a/binutils-2.21/ld/testsuite/ld-undefined/weak-undef.t b/binutils-2.21/ld/testsuite/ld-undefined/weak-undef.t
new file mode 100644
index 0000000..a95bbcf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-undefined/weak-undef.t
@@ -0,0 +1,9 @@
+SECTIONS
+{
+ .data : {
+ tmpdir/weak-undef.o(.data)
+ }
+ /DISCARD/ : {
+ *(*)
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-v850/split-lo16.d b/binutils-2.21/ld/testsuite/ld-v850/split-lo16.d
new file mode 100644
index 0000000..fbc325c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-v850/split-lo16.d
@@ -0,0 +1,26 @@
+#source: split-lo16.s -mv850e
+#ld: -Tsplit-lo16.ld
+#objdump: -d
+#...
+00010000 <.*>:
+ 10000: 40 0e 34 12 movhi 4660, r0, r1
+ 10004: 01 16 78 56 addi 22136, r1, r2
+ 10008: 81 17 79 56 ld\.bu 22136\[r1\], r2
+ 1000c: 40 0e 36 12 movhi 4662, r0, r1
+ 10010: 01 16 78 d8 addi -10120, r1, r2
+ 10014: 81 17 79 d8 ld\.bu -10120\[r1\], r2
+ 10018: 40 0e 12 00 movhi 18, r0, r1
+ 1001c: 81 17 57 34 ld\.bu 13398\[r1\], r2
+ 10020: 01 16 56 34 addi 13398, r1, r2
+ 10024: 40 0e 14 00 movhi 20, r0, r1
+ 10028: 81 17 57 b6 ld\.bu -18858\[r1\], r2
+ 1002c: 01 16 56 b6 addi -18858, r1, r2
+ 10030: 40 0e 79 56 movhi 22137, r0, r1
+ 10034: 01 16 bc 9a addi -25924, r1, r2
+ 10038: 81 17 bd 9a ld\.bu -25924\[r1\], r2
+ 1003c: 40 0e 9b 78 movhi 30875, r0, r1
+ 10040: 81 17 df bc ld\.bu -17186\[r1\], r2
+ 10044: 01 16 de bc addi -17186, r1, r2
+ 10048: 40 0e 45 23 movhi 9029, r0, r1
+ 1004c: a1 17 89 67 ld\.bu 26505\[r1\], r2
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-v850/split-lo16.ld b/binutils-2.21/ld/testsuite/ld-v850/split-lo16.ld
new file mode 100644
index 0000000..bde9063
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-v850/split-lo16.ld
@@ -0,0 +1,11 @@
+SECTIONS
+{
+ lo16_carry = 0x56789abc;
+ lo16_nocarry = 0x12345678;
+ split_lo16_carry = 0x789abcde;
+ split_lo16_nocarry = 0x00123456;
+ odd = 0x23456789;
+ . = 0x10000;
+ .text : { *(.text); }
+ /DISCARD/ : { *(*); }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-v850/split-lo16.s b/binutils-2.21/ld/testsuite/ld-v850/split-lo16.s
new file mode 100644
index 0000000..7eaae41
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-v850/split-lo16.s
@@ -0,0 +1,20 @@
+ movhi hi(lo16_nocarry),r0,r1
+ addi lo(lo16_nocarry),r1,r2
+ ld.bu lo(lo16_nocarry)[r1],r2
+ movhi hi(lo16_nocarry + 0x18200),r0,r1
+ addi lo(lo16_nocarry + 0x18200),r1,r2
+ ld.bu lo(lo16_nocarry + 0x18200)[r1],r2
+ movhi hi(split_lo16_nocarry),r0,r1
+ ld.bu lo(split_lo16_nocarry)[r1],r2
+ addi lo(split_lo16_nocarry),r1,r2
+ movhi hi(split_lo16_nocarry + 0x18200),r0,r1
+ ld.bu lo(split_lo16_nocarry + 0x18200)[r1],r2
+ addi lo(split_lo16_nocarry + 0x18200),r1,r2
+ movhi hi(lo16_carry),r0,r1
+ addi lo(lo16_carry),r1,r2
+ ld.bu lo(lo16_carry)[r1],r2
+ movhi hi(split_lo16_carry),r0,r1
+ ld.bu lo(split_lo16_carry)[r1],r2
+ addi lo(split_lo16_carry),r1,r2
+ movhi hi(odd),r0,r1
+ ld.bu lo(odd)[r1],r2
diff --git a/binutils-2.21/ld/testsuite/ld-v850/v850.exp b/binutils-2.21/ld/testsuite/ld-v850/v850.exp
new file mode 100644
index 0000000..2a2f9ae
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-v850/v850.exp
@@ -0,0 +1,21 @@
+# Copyright 2007 Free Software Foundtaion, Inc.
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+if [istarget v850*-*-*] {
+ run_dump_test "split-lo16"
+}
diff --git a/binutils-2.21/ld/testsuite/ld-versados/t1-1.ro b/binutils-2.21/ld/testsuite/ld-versados/t1-1.ro
new file mode 100644
index 0000000..1d70d80
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-versados/t1-1.ro
Binary files differ
diff --git a/binutils-2.21/ld/testsuite/ld-versados/t1-2.ro b/binutils-2.21/ld/testsuite/ld-versados/t1-2.ro
new file mode 100644
index 0000000..8d4dc59
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-versados/t1-2.ro
Binary files differ
diff --git a/binutils-2.21/ld/testsuite/ld-versados/t1.ld b/binutils-2.21/ld/testsuite/ld-versados/t1.ld
new file mode 100644
index 0000000..1a5c4e3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-versados/t1.ld
@@ -0,0 +1,281 @@
+OUTPUT_FORMAT("srec")
+SECTIONS
+{
+
+
+.text 0 : { *("9") *("10") *("11") *("12") *("13") *("14") *("15")
+ *("7") *("8") *("0") *("1") *("2") *("3") *("4") }
+.bss (NOLOAD) : { *("5") *("6") }
+
+.PAFI =0x00000050 ;
+.PCHIO =0x000000D0 ;
+.PCLO =0x00000054 ;
+.PCVBSV =0x0000000E ;
+.PCVTSU =0x00000012 ;
+.PCVTSV =0x00000016 ;
+.PCVTSVL =0x0000001A ;
+.PCVTUS =0x0000001E ;
+.PDIS =0x00000022 ;
+.PDISL =0x00000026 ;
+.PDVJ =0x0000002A ;
+.PEIO =0x000000CC ;
+.PEOF =0x00000058 ;
+.PEOL =0x0000005C ;
+.PEQUS =0x0000002E ;
+.PEQUV =0x00000032 ;
+.PEQUVL =0x00000036 ;
+.PEQUW =0x000000DE ;
+.PGCM =0x00000064 ;
+.PGEQS =0x0000003A ;
+.PGEQV =0x0000003E ;
+.PGEQVL =0x00000042 ;
+.PGET =0x00000060 ;
+.PGRTS =0x00000046 ;
+.PGRTV =0x0000004A ;
+.PGRTVL =0x0000004E ;
+.PIACT =0x0000006C ;
+.PIFD =0x00000068 ;
+.PINDS =0x00000052 ;
+.PINDV =0x00000056 ;
+.PINDVL =0x0000005A ;
+.PINDW =0x000000D6 ;
+.PLDCS =0x0000005E ;
+.PLDCV =0x00000062 ;
+.PLEQS =0x00000066 ;
+.PLEQV =0x0000006A ;
+.PLEQVL =0x0000006E ;
+.PLESS =0x00000072 ;
+.PLESV =0x00000076 ;
+.PLESVL =0x0000007A ;
+.PLODS =0x0000007E ;
+.PLODV =0x00000082 ;
+.PLODVL =0x00000086 ;
+.PMODJ =0x0000008A ;
+.PMOV =0x000000E2 ;
+.PMPJ =0x0000008E ;
+.PNEQS =0x00000092 ;
+.PNEQV =0x00000096 ;
+.PNEQVL =0x0000009A ;
+.PNEQW =0x000000DA ;
+.PPAGE =0x000000D4 ;
+.PPEE =0x00000070 ;
+.PPUT =0x00000074 ;
+.PRDB =0x00000078 ;
+.PRDC =0x0000007C ;
+.PRDH =0x00000080 ;
+.PRDI =0x00000084 ;
+.PRDJ =0x00000088 ;
+.PRDRS =0x000000C8 ;
+.PRDS =0x0000008C ;
+.PRDV =0x00000090 ;
+.PRLN =0x00000094 ;
+.PRRAN =0x00000098 ;
+.PRST =0x0000009C ;
+.PRWT =0x000000A0 ;
+.PSCON =0x0000009E ;
+.PSCOP =0x000000A2 ;
+.PSDEL =0x000000A6 ;
+.PSINS =0x000000AA ;
+.PSLEN =0x000000AE ;
+.PSPOS =0x000000B2 ;
+.PSTCV =0x000000B6 ;
+.PSTCVL =0x000000BA ;
+.PSTOS =0x000000BE ;
+.PSTOV =0x000000C2 ;
+.PSTOVL =0x000000C6 ;
+.PSTRS =0x000000CA ;
+.PSTRV =0x000000CE ;
+.PSTRVL =0x000000D2 ;
+.PWLN =0x000000A4 ;
+.PWRAN =0x000000A8 ;
+.PWRB =0x000000AC ;
+.PWRC =0x000000B0 ;
+.PWRH =0x000000B4 ;
+.PWRI =0x000000B8 ;
+.PWRJ =0x000000BC ;
+.PWRS =0x000000C0 ;
+.PWRV =0x000000C4 ;
+
+/*
+.PAFI=0x = 0x00;
+.PCHIO =0x 0x000000;
+.PCLO =0x 64 ;
+.PC;
+.PCVTSU =0x 0x000000;
+.PCVTSV =0x 0x000000;
+.PCVTSVL =0x 0x000000;
+.PCVTUS =0x 158 ;
+.P;
+.PDISL =0x 0x000000;
+.PDVJ =0x 0x000000;
+.PEIO =0x 0x000000;
+.PEOF =0x 0x000000;
+.PEOL =0x 0x000000;
+.PEQUS =0x 0x000000;
+.PEQUV =0x 0x000000;
+.PEQUVL =0x 0x000000;
+.PEQUW =0x 0x000000;
+.PGCM =0x 0x000000;
+.PGEQS =0x 0x000000;
+.PGEQV =0x 0x000000;
+.PGEQVL =0x 0x000000;
+.PGET =0x 0x000000;
+.PGRTS =0x 0x000000;
+.PGRTV =0x 0x000000;
+.PGRTVL =0x 0x000000;
+.PIACT =0x 0x000000;
+.PIFD =0x 126 ;
+.P;
+.PINDV =0x 0x000000;
+.PINDVL =0x 0x000000;
+.PINDW =0x 0x000000;
+.PLDCS =0x 0x000000;
+.PLDCV =0x 0x000000;
+.PLEQS =0x 0x000000;
+.PLEQV =0x 0x000000;
+.PLEQVL =0x 0x000000;
+.PLESS =0x 0x000000;
+.PLESV =0x 0x000000;
+.PLESVL =0x 0x000000;
+.PLODS =0x 0x000000;
+.PLODV =0x 0x000000;
+.PLODVL =0x 0x000000;
+.PMODJ =0x 0x000000;
+.PMOV =0x 0x000000;
+.PMPJ =0x 0x000000;
+.PNEQS =0x 0x000000;
+.PNEQV =0x 0x000000;
+.PNEQVL =0x 0x000000;
+.PNEQW =0x 0x000000;
+.PPAGE =0x 0x000000;
+.PPEE =0x 0x000000;
+.PPUT =0x 0x000000;
+.PRDB =0x 0x000000;
+.PRDC =0x 0x000000;
+.PRDH =0x 0x000000;
+.PRDI =0x 0x000000;
+.PRDJ =0x 0x000000;
+.PRDRS =0x 0x000000;
+.PRDS =0x 0x000000;
+.PRDV =0x 0x000000;
+.PRLN =0x 0x000000;
+.PRRAN =0x 0x000000;
+.PRST =0x 0x000000;
+.PRWT =0x 0x000000;
+.PSCON =0x 0x000000;
+.PSCOP =0x 0x000000;
+.PSDEL =0x 0x000000;
+.PSINS =0x 0x000000;
+.PSLEN =0x 0x000000;
+.PSPOS =0x 0x000000;
+.PSTCV =0x 0x000000;
+.PSTCVL =0x 0x000000;
+.PSTOS =0x 0x000000;
+.PSTOV =0x 0x000000;
+.PSTOVL =0x 0x000000;
+.PSTRS =0x 0x000000;
+.PSTRV =0x 0x000000;
+.PSTRVL =0x 0x000000;
+.PWLN =0x 0x000000;
+.PWRAN =0x 0x000000;
+.PWRB =0x 0x000000;
+.PWRC =0x 0x000000;
+.PWRH =0x 0x000000;
+.PWRI =0x 0x000000;
+.PWRJ =0x 0x000000;
+.PWRS =0x 0x000000;
+.PWRV =0x 0x000000;
+
+*/
+/*
+.P=0x = 0;
+.PCHIO =0x 0xfeedfa;
+.PCLO =0x 0xfeedfa;
+.PCVBSV =0x 0xfeedfa;
+.PCVTSU =0x 0xfeedfa;
+.PCVTSV =0x 0xfeedfa;
+.PCVTSVL =0x 0xfeedfa;
+.PCVTUS =0x 0xfeedfa;
+.PDIS =0x 0xfeedfa;
+.PDISL =0x 0xfeedfa;
+.PDVJ =0x 0xfeedfa;
+.PEIO =0x 0xfeedfa;
+.PEOF =0x 0xfeedfa;
+.PEOL =0x 0xfeedfa;
+.PEQUS =0x 0xfeedfa;
+.PEQUV =0x 0xfeedfa;
+.PEQUVL =0x 0xfeedfa;
+.PEQUW =0x 0xfeedfa;
+.PGCM =0x 0xfeedfa;
+.PGEQS =0x 0xfeedfa;
+.PGEQV =0x 0xfeedfa;
+.PGEQVL =0x 0xfeedfa;
+.PGET =0x 0xfeedfa;
+.PGRTS =0x 0xfeedfa;
+.PGRTV =0x 0xfeedfa;
+.PGRTVL =0x 0xfeedfa;
+.PIACT =0x 0xfeedfa;
+.PIFD =0x 0xfeedfa;
+.PINDS =0x 0xfeedfa;
+.PINDV =0x 0xfeedfa;
+.PINDVL =0x 0xfeedfa;
+.PINDW =0x 0xfeedfa;
+.PLDCS =0x 0xfeedfa;
+.PLDCV =0x 0xfeedfa;
+.PLEQS =0x 0xfeedfa;
+.PLEQV =0x 0xfeedfa;
+.PLEQVL =0x 0xfeedfa;
+.PLESS =0x 0xfeedfa;
+.PLESV =0x 0xfeedfa;
+.PLESVL =0x 0xfeedfa;
+.PLODS =0x 0xfeedfa;
+.PLODV =0x 0xfeedfa;
+.PLODVL =0x 0xfeedfa;
+.PMODJ =0x 0xfeedfa;
+.PMOV =0x 0xfeedfa;
+.PMPJ =0x 0xfeedfa;
+.PNEQS =0x 0xfeedfa;
+.PNEQV =0x 0xfeedfa;
+.PNEQVL = 0xfeedface;
+.PNEQW = 0xfeedface;
+.PPAGE = 0xfeedface;
+.PPEE = 0xfeedface;
+.PPUT = 0xfeedface;
+.PRDB = 0xfeedface;
+.PRDC = 0xfeedface;
+.PRDH = 0xfeedface;
+.PRDI = 0xfeedface;
+.PRDJ = 0xfeedface;
+.PRDRS = 0xfeedface;
+.PRDS = 0xfeedface;
+.PRDV = 0xfeedface;
+.PRLN = 0xfeedface;
+.PRRAN = 0xfeedface;
+.PRST = 0xfeedface;
+.PRWT = 0xfeedface;
+.PSCON = 0xfeedface;
+.PSCOP = 0xfeedface;
+.PSDEL = 0xfeedface;
+.PSINS = 0xfeedface;
+.PSLEN = 0xfeedface;
+.PSPOS = 0xfeedface;
+.PSTCV = 0xfeedface;
+.PSTCVL = 0xfeedface;
+.PSTOS = 0xfeedface;
+.PSTOV = 0xfeedface;
+.PSTOVL = 0xfeedface;
+.PSTRS = 0xfeedface;
+.PSTRV = 0xfeedface;
+.PSTRVL = 0xfeedface;
+.PWLN = 0xfeedface;
+.PWRAN = 0xfeedface;
+.PWRB = 0xfeedface;
+.PWRC = 0xfeedface;
+.PWRH = 0xfeedface;
+.PWRI = 0xfeedface;
+.PWRJ = 0xfeedface;
+.PWRS = 0xfeedface;
+.PWRV = 0xfeedface;
+*/
+
+}
diff --git a/binutils-2.21/ld/testsuite/ld-versados/t1.ook b/binutils-2.21/ld/testsuite/ld-versados/t1.ook
new file mode 100644
index 0000000..3984b94
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-versados/t1.ook
@@ -0,0 +1,133 @@
+S00C000074312E6F75742E6F6BC0
+S118000000000A205341464553544F52452041202020202052BE
+S118001531332E33202020202020205231332E32202020202077
+S118002A202000B5E86600B5E9B11DA15B9900001F0000000A50
+S118003F640000003E0000005C00A800BA00F000040001000251
+S1180054000000000000000000000006004031CF52544C4942D0
+S1180069434F4E0004E5EC52544C4942434F4E0004E5ED5254F0
+S118007E4C4942434F4E004031D252544C4942434F4E00000A08
+S11800937D52544C49425354520010A4A852544C494246494CAD
+S11800A8000200B5E86D0000016000B5E873000002540002006A
+S11800BDB5E937534146455052494E5420000006000200080079
+S11800D20000034200B5E86E494E4954534146455354000002C9
+S11800E71800000E00000009020030000000004E56FFD8BA8FDB
+S11800FC63062E4E6100001641FA003243EEFFD8702612D85149
+S1180111C8FFFC4E5E4E752B57FFF22F3C0000000A6000000259
+S11801263B6F0002FFF62F2D00382F2D00344E4C4E4A434F50E7
+S118013B5952494748542054656C65666F6E204142204C204D6B
+S1180150204572696373736F6E2C2031393933004E56FFFCBAB5
+S11801658F63042E4E61AC202E000C06800000000C4E7656807C
+S118017A4E760280FFFFFFFC4AD56604610000B02D40FFFC200B
+S118018F6C003A2208242C003694814E7604820000000C4E76D2
+S11801A44AD566046100008EB0826E0C0CAE00000001000C6CEB
+S11801B900000C207C0000000061000060206C003A200866046C
+S11801CE610000762208D2AEFFFC68046100005C2081216E0043
+S11801E3100004216E000C0008220806810000000C68046100C2
+S11801F800402D4100142950003A206C003A24086604610000BC
+S118020D3A429042A8000442A800084E5E225F285F508F4EE922
+S118022200022B5FFFF24E5ED1DF285F2F082B48FFF2D0D04EDA
+S1180237D02B57FFF22F3C0000000E6000FEE22B57FFF22F3CD4
+S118024C000000106000FED44E56FFFCBA8F63062E4E6100FE2B
+S1180261B82D6C0032FFFC600000122B5FFFF24FEEFFFC42AEF1
+S1180276FFFC600000824AAEFFFC6700007A206EFFFC200866A7
+S118028B00000461B622280004B2AE001067000062220802810B
+S11802A0000000034A8166402208226C003A2409B2826E3426B6
+S11802B510280806840000000C68046100FF76B6846D2026101B
+S11802CA280896844E7604830000000C4E764AD566046100FFCD
+S11802DF5AB6A800086C0000046182206EFFFC20086604610077
+S11802F4FF522D50FFFC60804AAEFFFC6700002C206EFFFC2019
+S11803090866046100FF38226E000C22A80008220806810000B2
+S118031E000C68046100FF142D4100146000000C206E000C4210
+S11803339042AE00144E5E205F285F508F4ED04FEDFF00707F44
+S1180348204F425851C8FFFC486DFF081F3C00043F3C00019F49
+S118035DFC0000000C224F45FA04FE22DA22DA22DA266C00281F
+S11803722F0C286C002C4EAB0068486DFFB8486DFFB42F0C20E7
+S11803876C0000286C00044E909FFC000000522F2DFFC62F0C32
+S118039C206C0008286C000C4E907052266C00204EAB001E416A
+S11803B1FA04BE266C00204EAB007E266C00204EAB009E41EDD7
+S11803C6FFBA266C00204EAB007E266C00204EAB009E1F3C0098
+S11803DB283F3C0001266C00204EAB009E9FFC00000052302DD2
+S11803F0FFCA48C02F002F0C206C0008286C000C4E90705226BF
+S11804056C00204EAB001E266C00204EAB009E41FA045E266CC3
+S118041A00204EAB007E266C00204EAB009E41EDFF9E70162672
+S118042F6C00204EAB00CA600000162B5FFFF24FEDFF002B7C92
+S118044400000001FFB4600003E4486DFF089FFC0000005220DB
+S11804594F43EDFF9E3019725092406F024241D04130C06F0A23
+S118046E5340E24030D951C8FFFC9FFC00000052224F45FA0303
+S1180483F632DA266C00282F0C286C002C4EAB0050FFAA486D02
+S1180498FF08266C00282F0C286C002C4EAB00A0FF9642ADFF73
+S11804AD002B6C0032FF04487A03C43F3CFFFF486DFF08266C1A
+S11804C200282F0C286C002C4EAB00C0FF70486DFF08266C0088
+S11804D7282F0C286C002C4EAB00A4FF5C600000782B5FFFF29E
+S11804EC4FEDFF00487A03BA3F3CFFFF486DFF08266C00282F1F
+S11805010C286C002C4EAB00C0FF349FFC00000052206DFF04AC
+S118051620082F002F0C206C0010286C00144E902F0F3F3CFF60
+S118052BFF486DFF08266C00282F0C286C002C4EAB00C0FF008F
+S1180540DFFC00000052486DFF08266C00282F0C286C002C4EB6
+S1180555AB00A4FEE6600001F0206DFF042008660261804A902E
+S118056A6700016A22100281000000034A81664A2210242C00F1
+S118057F3604820000000C68046100FCAEB2826E3422102408F0
+S118059406820000000C68046100FC9AB2826D202210240892A6
+S11805A9824E7604810000000C4E764AD566046100FC7EB2A8E0
+S11805BE00086C0000066100FF22206DFF04200866046100FFA6
+S11805D31622280008D2ADFF0068046100FC582B41FF009FFC02
+S11805E80000005224082F022F0C206C0010286C00144E902FBF
+S11805FD0F3F3C000C486DFF08266C00282F0C286C002C4EABE5
+S118061200C0FE2ADFFC00000052206DFF04200866046100FE39
+S1180627C22F2800043F3C000C486DFF08266C00282F0C286CD1
+S118063C002C4EAB00BCFDFC206DFF04200866046100FE9A2F81
+S11806512800083F3C000C486DFF08266C00282F0C286C002C68
+S11806664EAB00BCFDD49FFC00000052206DFF04200866046185
+S118067B00FE6C22102F012F0C206C0010286C00144E902F0FFF
+S11806903F3C000C486DFF08266C00282F0C286C002C4EAB0060
+S11806A5C0FD98DFFC00000052486DFF08266C00282F0C286C75
+S11806BA002C4EAB00A4FD7E206DFF04200866046100FE1C2B1B
+S11806CF50FF046000FE8A206C003AB1EDFF046700006C487ADB
+S11806E401E83F3CFFFF486DFF08266C00282F0C286C002C4EDC
+S11806F9AB00C0FD429FFC00000052206DFF0420082F002F0C2F
+S118070E206C0010286C00144E902F0F3F3CFFFF486DFF082617
+S11807236C00282F0C286C002C4EAB00C0FD0EDFFC000000523D
+S1180738486DFF08266C00282F0C286C002C4EAB00A4FCF44862
+S118074D7A01983F3CFFFF486DFF08266C00282F0C286C002C96
+S11807624EAB00C0FCD8486DFF08266C00282F0C286C002C4E32
+S1180777AB00A4FCC4487A016A3F3CFFFF486DFF08266C00283E
+S118078C2F0C286C002C4EAB00C0FCA8486DFF08266C00282F57
+S11807A10C286C002C4EAB00A4FC94206DFF0420080680000008
+S11807B600184E76222C003692804E760281FFFFFFFC4AD566F3
+S11807CB046100FA6A2F013F3C000C486DFF08266C00282F0CE4
+S11807E0286C002C4EAB00BCFC562F2DFF003F3C000C486DFFA3
+S11807F508266C00282F0C286C002C4EAB00BCFC3A486DFF0887
+S118080A266C00282F0C286C002C4EAB00A4FC26486DFF081F86
+S118081F3C0001266C00282F0C286C002C4EAB0054486DFFB815
+S1180834486DFFB42F0C206C0018286C001C4E90486DFF0842D8
+S118084927266C00282F0C286C002C4EAB005442A72F2D0038F0
+S118085E2F2D00344E4A000A4631202020202020202000023A9C
+S11808733A0002293A0000003020202020204164647265737337
+S1180888202020204964656E746974792020202020202020533A
+S118089D697A6520202020202020204E657874001D496E7661B0
+S11808B26C6964207365676D656E74207374617274696E672035
+S11808C761743A202000185365676D656E74206C69737420637F
+S11808DC6F727275707465643A2000000018202020417661693B
+S11808F16C61626C652020202020202020557365644FEDFFF230
+S11809069FFC0000000A6100015641EC003020DF20DF30DF20F1
+S118091B2C003256804E760280FFFFFFFC4AD566046100F90A63
+S1180930294000322940003A6000003E2B5FFFF24FEDFFF2200A
+S11809452C003256804E760280FFFFFFFC4AD566046100F8E064
+S118095A2940003A206C003A220866046100F8DE429042A80094
+S118096F0442A800086000009E4A2C00306700001A206C003A8E
+S11809842008660261B2429042A8000442A800086000007E2007
+S11809996C003A20086602619A4A906700006E221002810000B0
+S11809AE00034A81664A2210242C003604820000000C6804619B
+S11809C300F874B2826E342210240806820000000C680461001A
+S11809D8F860B2826D202210240892824E7604810000000C4ED8
+S11809ED764AD566046100F844B2A800086C0000066100FF3CE5
+S1180A02206C003A200866046100FF302950003A608442A72F44
+S1180A172D00382F2D00344E4A4E560000518F42A71F3C000E63
+S1180A2C4267487A0012426742272F3C00B5E86E4E49000E50B7
+S1180A418F4E5E205F285F4EE80002207C0000000060042B5F99
+S1180A56FFF24E5ED1DF285F2F08D0D04ED043FA0004D3FC00AE
+S1180A6B02704E2F49000A43FA0004D3FC000000402F49000662
+S1180A8041FA0004D1FCFFFFF57A202800566600002222099201
+S1180A95882141005642812448D25AB5C96DFA4441D368005AAE
+S1110AAA1F7C000100044E75422F00044E759F
+S9030000FC
diff --git a/binutils-2.21/ld/testsuite/ld-versados/t2-1.ro b/binutils-2.21/ld/testsuite/ld-versados/t2-1.ro
new file mode 100644
index 0000000..633a7cc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-versados/t2-1.ro
Binary files differ
diff --git a/binutils-2.21/ld/testsuite/ld-versados/t2-2.ro b/binutils-2.21/ld/testsuite/ld-versados/t2-2.ro
new file mode 100644
index 0000000..704a79d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-versados/t2-2.ro
Binary files differ
diff --git a/binutils-2.21/ld/testsuite/ld-versados/t2-3.ro b/binutils-2.21/ld/testsuite/ld-versados/t2-3.ro
new file mode 100644
index 0000000..d959342
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-versados/t2-3.ro
Binary files differ
diff --git a/binutils-2.21/ld/testsuite/ld-versados/t2.ld b/binutils-2.21/ld/testsuite/ld-versados/t2.ld
new file mode 100644
index 0000000..5e1e413
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-versados/t2.ld
@@ -0,0 +1,281 @@
+OUTPUT_FORMAT("srec")
+SECTIONS
+{
+
+
+.text 0 : { *("9") *("10") *("11") *("12") *("13") *("14") *("15")
+ *("7") *("8") *("0") *("1") *("2") *("3") *("4") }
+.bss : { *("5") *("6") }
+
+.PAFI =0x00000050 ;
+.PCHIO =0x000000D0 ;
+.PCLO =0x00000054 ;
+.PCVBSV =0x0000000E ;
+.PCVTSU =0x00000012 ;
+.PCVTSV =0x00000016 ;
+.PCVTSVL =0x0000001A ;
+.PCVTUS =0x0000001E ;
+.PDIS =0x00000022 ;
+.PDISL =0x00000026 ;
+.PDVJ =0x0000002A ;
+.PEIO =0x000000CC ;
+.PEOF =0x00000058 ;
+.PEOL =0x0000005C ;
+.PEQUS =0x0000002E ;
+.PEQUV =0x00000032 ;
+.PEQUVL =0x00000036 ;
+.PEQUW =0x000000DE ;
+.PGCM =0x00000064 ;
+.PGEQS =0x0000003A ;
+.PGEQV =0x0000003E ;
+.PGEQVL =0x00000042 ;
+.PGET =0x00000060 ;
+.PGRTS =0x00000046 ;
+.PGRTV =0x0000004A ;
+.PGRTVL =0x0000004E ;
+.PIACT =0x0000006C ;
+.PIFD =0x00000068 ;
+.PINDS =0x00000052 ;
+.PINDV =0x00000056 ;
+.PINDVL =0x0000005A ;
+.PINDW =0x000000D6 ;
+.PLDCS =0x0000005E ;
+.PLDCV =0x00000062 ;
+.PLEQS =0x00000066 ;
+.PLEQV =0x0000006A ;
+.PLEQVL =0x0000006E ;
+.PLESS =0x00000072 ;
+.PLESV =0x00000076 ;
+.PLESVL =0x0000007A ;
+.PLODS =0x0000007E ;
+.PLODV =0x00000082 ;
+.PLODVL =0x00000086 ;
+.PMODJ =0x0000008A ;
+.PMOV =0x000000E2 ;
+.PMPJ =0x0000008E ;
+.PNEQS =0x00000092 ;
+.PNEQV =0x00000096 ;
+.PNEQVL =0x0000009A ;
+.PNEQW =0x000000DA ;
+.PPAGE =0x000000D4 ;
+.PPEE =0x00000070 ;
+.PPUT =0x00000074 ;
+.PRDB =0x00000078 ;
+.PRDC =0x0000007C ;
+.PRDH =0x00000080 ;
+.PRDI =0x00000084 ;
+.PRDJ =0x00000088 ;
+.PRDRS =0x000000C8 ;
+.PRDS =0x0000008C ;
+.PRDV =0x00000090 ;
+.PRLN =0x00000094 ;
+.PRRAN =0x00000098 ;
+.PRST =0x0000009C ;
+.PRWT =0x000000A0 ;
+.PSCON =0x0000009E ;
+.PSCOP =0x000000A2 ;
+.PSDEL =0x000000A6 ;
+.PSINS =0x000000AA ;
+.PSLEN =0x000000AE ;
+.PSPOS =0x000000B2 ;
+.PSTCV =0x000000B6 ;
+.PSTCVL =0x000000BA ;
+.PSTOS =0x000000BE ;
+.PSTOV =0x000000C2 ;
+.PSTOVL =0x000000C6 ;
+.PSTRS =0x000000CA ;
+.PSTRV =0x000000CE ;
+.PSTRVL =0x000000D2 ;
+.PWLN =0x000000A4 ;
+.PWRAN =0x000000A8 ;
+.PWRB =0x000000AC ;
+.PWRC =0x000000B0 ;
+.PWRH =0x000000B4 ;
+.PWRI =0x000000B8 ;
+.PWRJ =0x000000BC ;
+.PWRS =0x000000C0 ;
+.PWRV =0x000000C4 ;
+
+/*
+.PAFI=0x = 0x00;
+.PCHIO =0x 0x000000;
+.PCLO =0x 64 ;
+.PC;
+.PCVTSU =0x 0x000000;
+.PCVTSV =0x 0x000000;
+.PCVTSVL =0x 0x000000;
+.PCVTUS =0x 158 ;
+.P;
+.PDISL =0x 0x000000;
+.PDVJ =0x 0x000000;
+.PEIO =0x 0x000000;
+.PEOF =0x 0x000000;
+.PEOL =0x 0x000000;
+.PEQUS =0x 0x000000;
+.PEQUV =0x 0x000000;
+.PEQUVL =0x 0x000000;
+.PEQUW =0x 0x000000;
+.PGCM =0x 0x000000;
+.PGEQS =0x 0x000000;
+.PGEQV =0x 0x000000;
+.PGEQVL =0x 0x000000;
+.PGET =0x 0x000000;
+.PGRTS =0x 0x000000;
+.PGRTV =0x 0x000000;
+.PGRTVL =0x 0x000000;
+.PIACT =0x 0x000000;
+.PIFD =0x 126 ;
+.P;
+.PINDV =0x 0x000000;
+.PINDVL =0x 0x000000;
+.PINDW =0x 0x000000;
+.PLDCS =0x 0x000000;
+.PLDCV =0x 0x000000;
+.PLEQS =0x 0x000000;
+.PLEQV =0x 0x000000;
+.PLEQVL =0x 0x000000;
+.PLESS =0x 0x000000;
+.PLESV =0x 0x000000;
+.PLESVL =0x 0x000000;
+.PLODS =0x 0x000000;
+.PLODV =0x 0x000000;
+.PLODVL =0x 0x000000;
+.PMODJ =0x 0x000000;
+.PMOV =0x 0x000000;
+.PMPJ =0x 0x000000;
+.PNEQS =0x 0x000000;
+.PNEQV =0x 0x000000;
+.PNEQVL =0x 0x000000;
+.PNEQW =0x 0x000000;
+.PPAGE =0x 0x000000;
+.PPEE =0x 0x000000;
+.PPUT =0x 0x000000;
+.PRDB =0x 0x000000;
+.PRDC =0x 0x000000;
+.PRDH =0x 0x000000;
+.PRDI =0x 0x000000;
+.PRDJ =0x 0x000000;
+.PRDRS =0x 0x000000;
+.PRDS =0x 0x000000;
+.PRDV =0x 0x000000;
+.PRLN =0x 0x000000;
+.PRRAN =0x 0x000000;
+.PRST =0x 0x000000;
+.PRWT =0x 0x000000;
+.PSCON =0x 0x000000;
+.PSCOP =0x 0x000000;
+.PSDEL =0x 0x000000;
+.PSINS =0x 0x000000;
+.PSLEN =0x 0x000000;
+.PSPOS =0x 0x000000;
+.PSTCV =0x 0x000000;
+.PSTCVL =0x 0x000000;
+.PSTOS =0x 0x000000;
+.PSTOV =0x 0x000000;
+.PSTOVL =0x 0x000000;
+.PSTRS =0x 0x000000;
+.PSTRV =0x 0x000000;
+.PSTRVL =0x 0x000000;
+.PWLN =0x 0x000000;
+.PWRAN =0x 0x000000;
+.PWRB =0x 0x000000;
+.PWRC =0x 0x000000;
+.PWRH =0x 0x000000;
+.PWRI =0x 0x000000;
+.PWRJ =0x 0x000000;
+.PWRS =0x 0x000000;
+.PWRV =0x 0x000000;
+
+*/
+/*
+.P=0x = 0;
+.PCHIO =0x 0xfeedfa;
+.PCLO =0x 0xfeedfa;
+.PCVBSV =0x 0xfeedfa;
+.PCVTSU =0x 0xfeedfa;
+.PCVTSV =0x 0xfeedfa;
+.PCVTSVL =0x 0xfeedfa;
+.PCVTUS =0x 0xfeedfa;
+.PDIS =0x 0xfeedfa;
+.PDISL =0x 0xfeedfa;
+.PDVJ =0x 0xfeedfa;
+.PEIO =0x 0xfeedfa;
+.PEOF =0x 0xfeedfa;
+.PEOL =0x 0xfeedfa;
+.PEQUS =0x 0xfeedfa;
+.PEQUV =0x 0xfeedfa;
+.PEQUVL =0x 0xfeedfa;
+.PEQUW =0x 0xfeedfa;
+.PGCM =0x 0xfeedfa;
+.PGEQS =0x 0xfeedfa;
+.PGEQV =0x 0xfeedfa;
+.PGEQVL =0x 0xfeedfa;
+.PGET =0x 0xfeedfa;
+.PGRTS =0x 0xfeedfa;
+.PGRTV =0x 0xfeedfa;
+.PGRTVL =0x 0xfeedfa;
+.PIACT =0x 0xfeedfa;
+.PIFD =0x 0xfeedfa;
+.PINDS =0x 0xfeedfa;
+.PINDV =0x 0xfeedfa;
+.PINDVL =0x 0xfeedfa;
+.PINDW =0x 0xfeedfa;
+.PLDCS =0x 0xfeedfa;
+.PLDCV =0x 0xfeedfa;
+.PLEQS =0x 0xfeedfa;
+.PLEQV =0x 0xfeedfa;
+.PLEQVL =0x 0xfeedfa;
+.PLESS =0x 0xfeedfa;
+.PLESV =0x 0xfeedfa;
+.PLESVL =0x 0xfeedfa;
+.PLODS =0x 0xfeedfa;
+.PLODV =0x 0xfeedfa;
+.PLODVL =0x 0xfeedfa;
+.PMODJ =0x 0xfeedfa;
+.PMOV =0x 0xfeedfa;
+.PMPJ =0x 0xfeedfa;
+.PNEQS =0x 0xfeedfa;
+.PNEQV =0x 0xfeedfa;
+.PNEQVL = 0xfeedface;
+.PNEQW = 0xfeedface;
+.PPAGE = 0xfeedface;
+.PPEE = 0xfeedface;
+.PPUT = 0xfeedface;
+.PRDB = 0xfeedface;
+.PRDC = 0xfeedface;
+.PRDH = 0xfeedface;
+.PRDI = 0xfeedface;
+.PRDJ = 0xfeedface;
+.PRDRS = 0xfeedface;
+.PRDS = 0xfeedface;
+.PRDV = 0xfeedface;
+.PRLN = 0xfeedface;
+.PRRAN = 0xfeedface;
+.PRST = 0xfeedface;
+.PRWT = 0xfeedface;
+.PSCON = 0xfeedface;
+.PSCOP = 0xfeedface;
+.PSDEL = 0xfeedface;
+.PSINS = 0xfeedface;
+.PSLEN = 0xfeedface;
+.PSPOS = 0xfeedface;
+.PSTCV = 0xfeedface;
+.PSTCVL = 0xfeedface;
+.PSTOS = 0xfeedface;
+.PSTOV = 0xfeedface;
+.PSTOVL = 0xfeedface;
+.PSTRS = 0xfeedface;
+.PSTRV = 0xfeedface;
+.PSTRVL = 0xfeedface;
+.PWLN = 0xfeedface;
+.PWRAN = 0xfeedface;
+.PWRB = 0xfeedface;
+.PWRC = 0xfeedface;
+.PWRH = 0xfeedface;
+.PWRI = 0xfeedface;
+.PWRJ = 0xfeedface;
+.PWRS = 0xfeedface;
+.PWRV = 0xfeedface;
+*/
+
+}
diff --git a/binutils-2.21/ld/testsuite/ld-versados/t2.ook b/binutils-2.21/ld/testsuite/ld-versados/t2.ook
new file mode 100644
index 0000000..03f24a5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-versados/t2.ook
@@ -0,0 +1,99 @@
+S0120000696E6974746573745F6570632E7372CF
+S118000000000000494E495454455354202050413035202052AB
+S118001531332E33202020202020205231332E32202020202077
+S118002A202000934B5B00B5E6C11B089DD600005400000005F9
+S118003F5A00000048005C00A60000010A0126000400010002CB
+S1180054009000000000000000000002004020200000494F5F8A
+S11800695245534552564152544C4942434F4E0040484501003B
+S118007E505F414C4C202020202052544C4942434F4E010000E3
+S118009300009C01000000000000085345504152415445000852
+S11800A80008004031CF52544C4942434F4E0004E5EC52544CD3
+S11800BD4942434F4E00B5E86D5341464553544F5200004F28D7
+S11800D253595354454D494D00B5E8735341464553544F520023
+S11800E74031D252544C4942434F4E00000A7D52544C49425309
+S11800FC54520010A4A852544C494246494C000100B5E6C049EC
+S11801114E495454455354202000000616020008000000023210
+S11801260048000000004E56FFF0BA8F63062E4E610000BC4159
+S118013BFA00F443EEFFF032D82D7C00000001FFFC206E000858
+S118015020086604610000BA222EFFFC53814A816C046100002E
+S11801659E2248D3E9FFFC41F01800B3C863EE4A1066000006E7
+S118017A6000006241EEFFF0266C00384EAB007E206E00082095
+S118018F0866046100007C222EFFFC53814A816C0461000060ED
+S11801A42248D3E9FFFC41F01800B3C863EE1F103F3C0001263B
+S11801B96C00384EAB009E41EEFFF0700C266C00384EAB00CACB
+S11801CE52AEFFFC0CAE0000000AFFFC6F00FF7041EEFFF0431F
+S11801E3EE000C22D822D822D84E5E205F588F4ED02B57FFF278
+S11801F82F3C0000000A6000001E2B57FFF22F3C0000000F60AE
+S118020D0000102B57FFF22F3C00000010600000023B6F0002CC
+S1180222FFF62F2D00382F2D00344E4C4E4A00004FEDFEEA2034
+S11802373C0000008A204F425851C8FFFC486DFEEA1F3C0004CF
+S118024C3F3C00019FFC0000000C224F45FA02D422DA22DA22D6
+S1180261DA266C00402F0C286C00444EAB0068486DFFB8486D43
+S1180276FFB42F0C206C0008286C000C4E909FFC000000522F53
+S118028B2DFFC62F0C206C0010286C00144E907052266C00387F
+S11802A04EAB001E41FA0294266C00384EAB007E266C00384E04
+S11802B5AB009E41EDFFBA266C00384EAB007E266C00384EABFC
+S11802CA009E1F3C00283F3C0001266C00384EAB009E9FFC0082
+S11802DF000052302DFFCA48C02F002F0C206C0010286C0014D8
+S11802F44E907052266C00384EAB001E266C00384EAB009E41CE
+S1180309FA0234266C00384EAB007E266C00384EAB009E41EDDB
+S118031EFF807016266C00384EAB00CA9FFC0000000E61000228
+S11803332841EDFF9E20DF20DF20DF30DF4A2DFF9E6700003AFD
+S1180348598F2F2DFFA02F2DFFA82F0C206C0018286C001C4ED9
+S118035D9001B82B5FFF9A2F2DFF9A2F2DFFA42F2DFFA82F0CE9
+S1180372206C0020286C00244E9060000034598F2F2DFFA04871
+S11803876DFFA82F0C206C0028286C002C4E902B5FFF962F2D41
+S118039CFFA42F2DFF962F2DFFA82F0C206C0020286C00244EC4
+S11803B190486DFEEA9FFC00000052204F43EDFF8030197250F0
+S11803C692406F024241D04130C06F0A5340E24030D951C8FF08
+S11803DBFC9FFC00000052224F45FA015C32DA266C00402F0CFA
+S11803F0286C00444EAB0050012C486DFEEA266C00402F0C28D4
+S11804056C00444EAB00A00118487A01343F3CFFFF486DFEEA6F
+S118041A266C00402F0C286C00444EAB00C000FC486DFEEA266C
+S118042F6C00402F0C286C00444EAB00A400E842ADFFB02B7C2B
+S118044400000001FFAC598F2F2DFFAC6100017E2B5FFFB02BC0
+S118045940FFB02F2DFFAC3F3C000A486DFEEA266C00402F0C65
+S118046E286C00444EAB00BC00AE9FFC0000000C2F2DFFB06127
+S118048300FCA82F0F3F3C000A486DFEEA266C00402F0C286CBB
+S118049800444EAB00C00086DFFC0000000C486DFEEA266C00B2
+S11804AD402F0C286C00444EAB00A4006C52ADFFAC0CAD000077
+S11804C2000AFFAC6F82486DFEEA1F3C0001266C00402F0C284D
+S11804D76C00444EAB0054486DFFB8486DFFB42F0C206C003044
+S11804EC286C00344E90486DFEEA4227266C00402F0C286C00AA
+S1180501444EAB005442A72F2D00382F2D00344E4A2B57FFF238
+S11805162F3C0000000C6000FD002B57FFF22F3C000000646056
+S118052B00FCF2000A4631202020202020202000023A3A0002D0
+S1180540293A000000142020202020204361736520202020521D
+S11805556573756C7441FA0004D1FCFFFFFAA02028003C43FAFB
+S118056A0004D3FC000001D645FA0004D5FC0000025E260A58D2
+S118057F8AD0885580222800566600002E2408265AD5B0B8008F
+S1180594B5C06DF6220992882141005642812648D25BB7C96D2E
+S11805A9FA4441D368005A123C00016000000442411F4100048B
+S11805BE2F68003400062F49000A96892F43000E4E754E56FFCC
+S11805D3F0202E000847FA0004D7FC000001A6220B41FA00049E
+S11805E8D1FC000001B62D58FFF02D58FFF42D58FFF82D50FF92
+S11805FDFC53807408B4806500012C41FA0004D1FC0000000EBA
+S1180612D080303008004EFB00020012002200320042004800DC
+S118062758006C00A000DC41FA0004D1FC0000011820106000C5
+S118063C010247FA0004D7FC0000010C200B600000F241FA00C5
+S118065104D1FC000001102010600000E22001600000DC47FA9E
+S11806660004D7FC00000120200B600000CC43FA0004D3FC001C
+S118067B0000FA41E9000C2010600000B8242EFFF447FA000464
+S1180690D7FC000000FEB48B6600001247FA0004D7FC000001B0
+S11806A514200B6000009447FA0004D7FC0000010A200B60005B
+S11806BA008441FA0004D1FC0000008A205047FA0004D7FC0085
+S11806CF000082B1CB6600001247FA0004D7FC000000E0200B79
+S11806E46000005847FA0004D7FC000000D2200B600000484147
+S11806F9FA0004D1FC0000004E43FA0004D3FC0000003EB3D0FE
+S118070E6600001247FA0004D7FC000000AE200B6000001E47A4
+S1180723FA0004D7FC000000A6200B6000000E47FA0004D7FC95
+S118073800000098200B4E5E4E740004000053756E65000000D8
+S118074D0007464F74746F00000000000A0000000C50656C6CFD
+S118076265000000075E5374696E61004B6172696E00000000C0
+S11807770500000768000000030000076E5075747465004B61BF
+S118078C6C6C65005374696E613100004B6172696E31000000C1
+S11807A1000033000007900000001F0000079878797A7A0000D2
+S11807B64F6C6C650000370038005065746572005376756C6C19
+S11807CB6F00003900536C75740000000000000000074C000072
+S11507E007640000077800000780000007A4000007AC34
+S9030000FC
diff --git a/binutils-2.21/ld/testsuite/ld-versados/versados.exp b/binutils-2.21/ld/testsuite/ld-versados/versados.exp
new file mode 100644
index 0000000..422fd4a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-versados/versados.exp
@@ -0,0 +1,102 @@
+# Expect script for ld-versados tests
+# Copyright 1995, 1997, 2005, 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# Written by Steve Chamberlain (sac@cygnus.com)
+#
+
+# Make sure that ld can read versados images and
+# generate binaries which are identical to the customer's
+# old method.
+
+# This test can only be run if ld generates native executables.
+
+# This test can only be run on 68k coff targets
+# Square bracket expressions seem to confuse istarget.
+if { ![istarget m68k-*-coff*] } then {
+ return
+}
+
+set testname "LD VERSADOS"
+
+
+proc inspect { whichone } {
+ global objdump
+ global exec_output
+ global srcdir
+ global subdir
+ global testname
+
+ send_log "$objdump -s tmpdir/$whichone.out >tmpdir/$whichone.dump\n"
+ catch "exec $objdump -s tmpdir/$whichone.out | grep -v srec >tmpdir/$whichone.dump" exec_output
+
+ if ![string match "" $exec_output] {
+ send_log "$exec_output\n"
+ verbose $exec_output
+ unresolved $testname
+ return 0
+ }
+
+ send_log "$objdump -s $srcdir/$subdir/$whichone.ook >tmpdir/$whichone.dok\n"
+ catch "exec $objdump -s $srcdir/$subdir/$whichone.ook | grep -v srec >tmpdir/$whichone.dok" exec_output
+
+ if ![string match "" $exec_output] {
+ send_log "$exec_output\n"
+ verbose $exec_output
+ unresolved $testname
+ return 0
+ }
+
+ # compare it with the correct output
+ catch "exec diff tmpdir/$whichone.dump tmpdir/$whichone.dok" exec_output
+ if ![string match "" $exec_output] {
+ send_log "$exec_output\n"
+ verbose $exec_output
+ fail $testname
+ return 0
+ }
+
+ return 1
+}
+
+if ![ld_simple_link $ld tmpdir/t1.out \
+ " -T $srcdir/$subdir/t1.ld $srcdir/$subdir/t1-1.ro $srcdir/$subdir/t1-2.ro"] {
+ fail $testname
+ return
+} else {
+ # Get a dump of what we've got, and what we should have
+ if ![inspect t1] {
+ return
+ }
+}
+
+
+if ![ld_simple_link $ld tmpdir/t2.out \
+ " -T $srcdir/$subdir/t2.ld $srcdir/$subdir/t2-2.ro \
+ $srcdir/$subdir/t2-1.ro $srcdir/$subdir/t2-3.ro"] {
+ fail $testname
+ return
+} else {
+ # Get a dump of what we've got, and what we should have
+ if ![inspect t2] {
+ return
+ }
+}
+
+pass $testname
diff --git a/binutils-2.21/ld/testsuite/ld-vxworks/plt-mips1.d b/binutils-2.21/ld/testsuite/ld-vxworks/plt-mips1.d
new file mode 100644
index 0000000..ed67415
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-vxworks/plt-mips1.d
@@ -0,0 +1,10 @@
+# target: mips*-*-*
+# source: plt-mips1.s
+# ld: -shared -z now
+# readelf: -s
+
+#...
+ +[0-9]*: 00000000 +0 +FUNC +GLOBAL +DEFAULT +UND Foo
+#...
+ +[0-9]*: 00000000 +0 +FUNC +GLOBAL +DEFAULT +UND Foo
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-vxworks/plt-mips1.s b/binutils-2.21/ld/testsuite/ld-vxworks/plt-mips1.s
new file mode 100644
index 0000000..2f79504
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-vxworks/plt-mips1.s
@@ -0,0 +1 @@
+ lw $25,%call16(Foo)($28)
diff --git a/binutils-2.21/ld/testsuite/ld-vxworks/rpath-1.d b/binutils-2.21/ld/testsuite/ld-vxworks/rpath-1.d
new file mode 100644
index 0000000..df67a03
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-vxworks/rpath-1.d
@@ -0,0 +1,6 @@
+# source: rpath-1.s
+# ld: --entry foo --rpath /dir1 --rpath /dir2 --rpath net:/dir4 --rpath /dir2 --rpath /dir1 --rpath /dir3 --force-dynamic -q
+# readelf: -d
+#...
+ 0x0+f \(RPATH\).*Library rpath: \[/dir1;/dir2;net:/dir4;/dir3\]
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-vxworks/rpath-1.s b/binutils-2.21/ld/testsuite/ld-vxworks/rpath-1.s
new file mode 100644
index 0000000..6218588
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-vxworks/rpath-1.s
@@ -0,0 +1,2 @@
+ .global foo
+foo:
diff --git a/binutils-2.21/ld/testsuite/ld-vxworks/tls-1.d b/binutils-2.21/ld/testsuite/ld-vxworks/tls-1.d
new file mode 100644
index 0000000..cb5e695
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-vxworks/tls-1.d
@@ -0,0 +1,25 @@
+# source: tls-1.s
+# ld: --entry foo -q
+# nm: -r
+
+#...
+[0-9a-f]+ N __wrs_rtp_tls_vars_start
+#...
+0000000c A __wrs_rtp_tls_vars_size
+#...
+[0-9a-f]+ N __wrs_rtp_tls_data_start
+#...
+00000004 A __wrs_rtp_tls_data_size
+#...
+00000004 A __wrs_rtp_tls_data_align
+#...
+[0-9a-f]+ N ___wrs_rtp_tls_vars_start
+#...
+0000000c A ___wrs_rtp_tls_vars_size
+#...
+[0-9a-f]+ N ___wrs_rtp_tls_data_start
+#...
+00000004 A ___wrs_rtp_tls_data_size
+#...
+00000004 A ___wrs_rtp_tls_data_align
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-vxworks/tls-1.s b/binutils-2.21/ld/testsuite/ld-vxworks/tls-1.s
new file mode 100644
index 0000000..8fa97ab
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-vxworks/tls-1.s
@@ -0,0 +1,19 @@
+ .globl foo
+foo:
+
+ .section .tls_data
+ .p2align 2
+ .type i,%object
+ .size i,4
+i:
+ .space 4
+ .globl __tls__i
+ .section .tls_vars
+ .p2align 2
+ .type __tls__i,%object
+ .size __tls__i,12
+__tls__i:
+ .4byte i
+ .4byte 0
+ .4byte 4
+
diff --git a/binutils-2.21/ld/testsuite/ld-vxworks/tls-2.d b/binutils-2.21/ld/testsuite/ld-vxworks/tls-2.d
new file mode 100644
index 0000000..4278355
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-vxworks/tls-2.d
@@ -0,0 +1,11 @@
+# source: tls-2.s
+# ld: --entry foo -q --force-dynamic
+# readelf: -d
+
+#...
+ 0x60000010 \(Operating System specific: 60000010\) 0x[0-9a-f]+
+ 0x60000011 \(Operating System specific: 60000011\) 0x4
+ 0x60000015 \(Operating System specific: 60000015\) 0x4
+ 0x60000012 \(Operating System specific: 60000012\) 0x[0-9a-f]+
+ 0x60000013 \(Operating System specific: 60000013\) 0xc
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-vxworks/tls-2.s b/binutils-2.21/ld/testsuite/ld-vxworks/tls-2.s
new file mode 100644
index 0000000..8fa97ab
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-vxworks/tls-2.s
@@ -0,0 +1,19 @@
+ .globl foo
+foo:
+
+ .section .tls_data
+ .p2align 2
+ .type i,%object
+ .size i,4
+i:
+ .space 4
+ .globl __tls__i
+ .section .tls_vars
+ .p2align 2
+ .type __tls__i,%object
+ .size __tls__i,12
+__tls__i:
+ .4byte i
+ .4byte 0
+ .4byte 4
+
diff --git a/binutils-2.21/ld/testsuite/ld-vxworks/tls-3.d b/binutils-2.21/ld/testsuite/ld-vxworks/tls-3.d
new file mode 100644
index 0000000..53f7e81
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-vxworks/tls-3.d
@@ -0,0 +1,7 @@
+# source: tls-3.s
+# ld: -shared -z now
+# objdump: -R
+
+#...
+DYNAMIC RELOCATION RECORDS \(none\)
+
diff --git a/binutils-2.21/ld/testsuite/ld-vxworks/tls-3.s b/binutils-2.21/ld/testsuite/ld-vxworks/tls-3.s
new file mode 100644
index 0000000..39420c2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-vxworks/tls-3.s
@@ -0,0 +1,34 @@
+ .globl foo
+foo:
+
+ .section .tls_data,"a"
+ .p2align 2
+
+ .type i,%object
+ .size i,4
+i:
+ .space 4
+
+ .globl j
+ .type j,%object
+ .size j,4
+j:
+ .space 4
+
+ .section .tls_vars,"a"
+ .p2align 2
+ .type __tls__i,%object
+ .size __tls__i,12
+__tls__i:
+ .4byte i
+ .4byte 0
+ .4byte 4
+
+ .globl __tls__j
+ .type __tls__j,%object
+ .size __tls__j,12
+__tls__j:
+ .4byte j
+ .4byte 0
+ .4byte 4
+
diff --git a/binutils-2.21/ld/testsuite/ld-vxworks/vxworks.exp b/binutils-2.21/ld/testsuite/ld-vxworks/vxworks.exp
new file mode 100644
index 0000000..a305265
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-vxworks/vxworks.exp
@@ -0,0 +1,27 @@
+# Expect script for VxWorks tests
+# Copyright 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+if { [istarget *-*-vxworks*] } {
+ foreach test [lsort [glob -nocomplain $srcdir/$subdir/*.d]] {
+ if { [runtest_file_p $runtests $test] } {
+ run_dump_test [file rootname $test]
+ }
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/abs-l1om.d b/binutils-2.21/ld/testsuite/ld-x86-64/abs-l1om.d
new file mode 100644
index 0000000..1b2231c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/abs-l1om.d
@@ -0,0 +1,11 @@
+#name: Absolute non-overflowing relocs
+#source: ../ld-i386/abs.s
+#source: ../ld-i386/zero.s
+#as: --64 -march=l1om
+#ld: -m elf_l1om
+#objdump: -rs -j .text
+
+.*: file format .*
+
+Contents of section \.text:
+[ ][0-9a-f]+ c800fff0 c8000110 c9c3.*
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/abs.d b/binutils-2.21/ld/testsuite/ld-x86-64/abs.d
new file mode 100644
index 0000000..b24b018
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/abs.d
@@ -0,0 +1,10 @@
+#name: Absolute non-overflowing relocs
+#source: ../ld-i386/abs.s
+#source: ../ld-i386/zero.s
+#ld:
+#objdump: -rs
+
+.*: file format .*
+
+Contents of section \.text:
+[ ][0-9a-f]+ c800fff0 c8000110 c9c3.*
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/compressed1.d b/binutils-2.21/ld/testsuite/ld-x86-64/compressed1.d
new file mode 100644
index 0000000..1dd0f4c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/compressed1.d
@@ -0,0 +1,9 @@
+#name: undefined symbol with compressed debug sections
+#as: --64
+#ld: -e foo -melf_x86_64 --noinhibit-exec
+#warning: .*/compressed1.c:13: undefined reference to .bar.
+#nm: -n
+
+#...
+[ \t]+U bar
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/compressed1.s b/binutils-2.21/ld/testsuite/ld-x86-64/compressed1.s
new file mode 100644
index 0000000..196bc88
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/compressed1.s
@@ -0,0 +1,176 @@
+ .file "compressed1.c"
+ .section .debug_abbrev,"",@progbits
+.Ldebug_abbrev0:
+ .section .debug_info,"",@progbits
+.Ldebug_info0:
+ .section .debug_line,"",@progbits
+.Ldebug_line0:
+ .text
+.Ltext0:
+ .cfi_sections .debug_frame
+ .p2align 4,,15
+.globl foo
+ .type foo, @function
+foo:
+.LFB0:
+ .file 1 "compressed1.c"
+ .loc 1 12 0
+ .cfi_startproc
+ .loc 1 13 0
+ jmp bar
+ .cfi_endproc
+.LFE0:
+ .size foo, .-foo
+.Letext0:
+ .section .debug_info
+ .long 0x6e
+ .value 0x3
+ .long .Ldebug_abbrev0
+ .byte 0x8
+ .uleb128 0x1
+ .long .LASF5
+ .byte 0x1
+ .long .LASF6
+ .long .LASF7
+ .quad .Ltext0
+ .quad .Letext0
+ .long .Ldebug_line0
+ .uleb128 0x2
+ .byte 0x1
+ .byte 0x6
+ .long .LASF0
+ .uleb128 0x2
+ .byte 0x2
+ .byte 0x5
+ .long .LASF1
+ .uleb128 0x3
+ .byte 0x4
+ .byte 0x5
+ .string "int"
+ .uleb128 0x2
+ .byte 0x8
+ .byte 0x5
+ .long .LASF2
+ .uleb128 0x2
+ .byte 0x1
+ .byte 0x8
+ .long .LASF3
+ .uleb128 0x2
+ .byte 0x2
+ .byte 0x7
+ .long .LASF4
+ .uleb128 0x4
+ .byte 0x1
+ .string "foo"
+ .byte 0x1
+ .byte 0xb
+ .quad .LFB0
+ .quad .LFE0
+ .byte 0x1
+ .byte 0x9c
+ .byte 0x0
+ .section .debug_abbrev
+ .uleb128 0x1
+ .uleb128 0x11
+ .byte 0x1
+ .uleb128 0x25
+ .uleb128 0xe
+ .uleb128 0x13
+ .uleb128 0xb
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x1b
+ .uleb128 0xe
+ .uleb128 0x11
+ .uleb128 0x1
+ .uleb128 0x12
+ .uleb128 0x1
+ .uleb128 0x10
+ .uleb128 0x6
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x2
+ .uleb128 0x24
+ .byte 0x0
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x3e
+ .uleb128 0xb
+ .uleb128 0x3
+ .uleb128 0xe
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x24
+ .byte 0x0
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x3e
+ .uleb128 0xb
+ .uleb128 0x3
+ .uleb128 0x8
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x4
+ .uleb128 0x2e
+ .byte 0x0
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x11
+ .uleb128 0x1
+ .uleb128 0x12
+ .uleb128 0x1
+ .uleb128 0x40
+ .uleb128 0xa
+ .byte 0x0
+ .byte 0x0
+ .byte 0x0
+ .section .debug_pubnames,"",@progbits
+ .long 0x16
+ .value 0x2
+ .long .Ldebug_info0
+ .long 0x72
+ .long 0x57
+ .string "foo"
+ .long 0x0
+ .section .debug_pubtypes,"",@progbits
+ .long 0xe
+ .value 0x2
+ .long .Ldebug_info0
+ .long 0x72
+ .long 0x0
+ .section .debug_aranges,"",@progbits
+ .long 0x2c
+ .value 0x2
+ .long .Ldebug_info0
+ .byte 0x8
+ .byte 0x0
+ .value 0x0
+ .value 0x0
+ .quad .Ltext0
+ .quad .Letext0-.Ltext0
+ .quad 0x0
+ .quad 0x0
+ .section .debug_str,"MS",@progbits,1
+.LASF0:
+ .string "signed char"
+.LASF1:
+ .string "short int"
+.LASF6:
+ .string "compressed1.c"
+.LASF5:
+ .string "GNU C 4.4.4"
+.LASF7:
+ .string "."
+.LASF3:
+ .string "unsigned char"
+.LASF2:
+ .string "long int"
+.LASF4:
+ .string "short unsigned int"
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/discarded1.d b/binutils-2.21/ld/testsuite/ld-x86-64/discarded1.d
new file mode 100644
index 0000000..c892595
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/discarded1.d
@@ -0,0 +1,3 @@
+#as: --64
+#ld: -melf_x86_64 -T discarded1.t
+#error: .*discarded output section: `.got.plt'
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/discarded1.s b/binutils-2.21/ld/testsuite/ld-x86-64/discarded1.s
new file mode 100644
index 0000000..c638ed9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/discarded1.s
@@ -0,0 +1,13 @@
+ .text
+.globl _start
+ .type _start, @function
+_start:
+ movq x@GOTPCREL(%rip), %rax
+ .size _start, .-_start
+.globl x
+ .data
+ .align 4
+ .type x, @object
+ .size x, 4
+x:
+ .long 2
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/discarded1.t b/binutils-2.21/ld/testsuite/ld-x86-64/discarded1.t
new file mode 100644
index 0000000..a4d617f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/discarded1.t
@@ -0,0 +1,7 @@
+ENTRY(_start)
+SECTIONS
+{
+ .text : {*(.text)}
+ .data : {*(.data)}
+ /DISCARD/ : {*(*)}
+}
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/dwarfreloc.exp b/binutils-2.21/ld/testsuite/ld-x86-64/dwarfreloc.exp
new file mode 100644
index 0000000..8137a3d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/dwarfreloc.exp
@@ -0,0 +1,86 @@
+# Expect script for DWARF relocation test.
+# Copyright 2008 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+#
+# Written by Jan Kratochvil (jan.kratochvil@redhat.com)
+#
+# Test PR ld/3290 Comment 8+9. DW_FORM_ref_addr used in dwarfreloc2.s was left
+# unrelocated as its target symbol from dwarfreloc1.s became LOCAL due to its
+# `ld -r'.
+#
+# <1><57>: Abbrev Number: 2 (DW_TAG_variable)
+# <58> DW_AT_name : i2
+# ...
+# <5d> DW_AT_type : <0x32>
+# vs.
+# <5d> DW_AT_type : <0x0>
+
+# Only the testcase .s files are arch-dependent, the relocations are cross-arch.
+if { !([istarget "x86_64-*-elf*"]
+ || [istarget "x86_64-*-linux*"]) } {
+ return
+}
+
+set build_tests_ld {
+ {"Build dwarfreloc1x.o"
+ "-r" ""
+ {dwarfreloc1.s} {} "dwarfreloc1x.o"}
+ {"Build dwarfreloc2.o"
+ "-r" ""
+ {dwarfreloc2.s} {} "dwarfreloc2x.o"}
+}
+
+run_ld_link_tests $build_tests_ld
+
+set testname "Link dwarfreloc1x.o and dwarfreloc2x.o to dwarfreloc.o"
+if [ld_simple_link $ld "tmpdir/dwarfreloc.o" "-r tmpdir/dwarfreloc1x.o tmpdir/dwarfreloc2x.o"] {
+ pass $testname
+} else {
+ fail $testname
+}
+
+# The code is copied from `ld-lib.exp'. We cannot use the functions there as
+# they expect source (.s or .c) files while we to check a `ld -r' output (.o).
+
+set testname "Check dwarfreloc.o readelf"
+set dumpfile "dwarfreloc.rd"
+set cmd "$READELF --debug-dump=info tmpdir/dwarfreloc.o"
+set status [remote_exec host [concat sh -c [list "$cmd >dump.out 2>ld.stderr"]] "" "/dev/null"]
+send_log "$cmd\n"
+remote_upload host "ld.stderr"
+set comp_output [prune_warnings [file_contents "ld.stderr"]]
+remote_file host delete "ld.stderr"
+remote_file build delete "ld.stderr"
+
+if ![string match "" $comp_output] then {
+ send_log "$comp_output\n"
+ fail $testname
+} else {
+ remote_upload host "dump.out"
+ if { [regexp_diff "dump.out" "$srcdir/$subdir/$dumpfile"] } then {
+ verbose "output is [file_contents "dump.out"]" 2
+ fail $testname
+ } else {
+ pass $testname
+ }
+ remote_file build delete "dump.out"
+ remote_file host delete "dump.out"
+}
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/dwarfreloc.rd b/binutils-2.21/ld/testsuite/ld-x86-64/dwarfreloc.rd
new file mode 100644
index 0000000..84798ce
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/dwarfreloc.rd
@@ -0,0 +1,17 @@
+# Parenthesized `(...)' is the offset we cross-check.
+# The third parenthesized value was left unrelocated (0x0) before.
+#...
+.*Abbrev Number: .* \(DW_TAG_variable\).*
+#...
+.*DW_AT_type *: *<0x(32)>.*
+#...
+.*<(32)>: Abbrev Number: .* \(DW_TAG_base_type\).*
+#...
+.*Compilation Unit.*
+#...
+.*Abbrev Number: .* \(DW_TAG_compile_unit\).*
+#...
+.*Abbrev Number: .* \(DW_TAG_variable\).*
+#...
+.*DW_AT_type : <0x(32)>.*
+#...
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/dwarfreloc1.s b/binutils-2.21/ld/testsuite/ld-x86-64/dwarfreloc1.s
new file mode 100644
index 0000000..2f46ae2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/dwarfreloc1.s
@@ -0,0 +1,101 @@
+ .file 1 "dwarfreloc1.c"
+ .comm i1,4,4
+ .section .debug_line,"",@progbits
+.Ldebug_line0:
+ .section .debug_info
+.Ldebug_info0:
+ .long .Ldebug_info_end - .Ldebug_info_start
+.Ldebug_info_start:
+ .value 0x2
+ .long .Ldebug_abbrev0
+ .byte 0x8
+
+ .uleb128 0x1 /* DW_TAG_compile_unit */
+ .long .LASF0 /* DW_AT_producer */
+ .byte 0x1 /* DW_AT_language */
+ .long .LASF1 /* DW_AT_name */
+ .long .LASF2 /* DW_AT_comp_dir */
+ .long .Ldebug_line0 /* DW_AT_stmt_list */
+
+ .uleb128 0x2 /* DW_TAG_variable */
+ .string "i1" /* DW_AT_name */
+ .byte 0x1 /* DW_AT_decl_file */
+ .byte 0x1 /* DW_AT_decl_line */
+ .long .dwarfreloc1.0.2 - .Ldebug_info0 /* DW_AT_type (DW_FORM_ref4) */
+ .byte 0x1 /* DW_AT_external */
+ .byte 0x9 /* DW_AT_location: length */
+ .byte 0x3 /* DW_AT_location: DW_OP_addr */
+ .quad i1 /* DW_AT_location: DW_OP_addr: address */
+
+ /* DWARF3 Page 224 (236/267)
+ <prefix>.<file-designator>.<gid-number>.<die-number> */
+ .globl .dwarfreloc1.0.2
+.dwarfreloc1.0.2:
+ .uleb128 0x3 /* DW_TAG_base_type */
+ .byte 0x4 /* DW_AT_byte_size */
+ .byte 0x5 /* DW_AT_encoding */
+ .string "int" /* DW_AT_name */
+
+ .byte 0x0
+.Ldebug_info_end:
+
+ .section .debug_abbrev
+.Ldebug_abbrev0:
+ .uleb128 0x1
+ .uleb128 0x11
+
+ .byte 0x1
+ .uleb128 0x25 /* DW_AT_producer */
+ .uleb128 0xe /* DW_FORM_strp */
+ .uleb128 0x13 /* DW_AT_language */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0xe /* DW_FORM_strp */
+ .uleb128 0x1b /* DW_AT_comp_dir */
+ .uleb128 0xe /* DW_FORM_strp */
+ .uleb128 0x10 /* DW_AT_stmt_list */
+ .uleb128 0x6 /* DW_FORM_data4 */
+ .byte 0x0
+ .byte 0x0
+
+ .uleb128 0x2
+ .uleb128 0x34 /* DW_TAG_variable */
+ .byte 0x0
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x3a /* DW_AT_decl_file */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x3b /* DW_AT_decl_line */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x49 /* DW_AT_type */
+ .uleb128 0x13 /* DW_FORM_ref4 */
+ .uleb128 0x3f /* DW_AT_external */
+ .uleb128 0xc /* DW_FORM_flag */
+ .uleb128 0x2 /* DW_AT_location */
+ .uleb128 0xa /* DW_FORM_block1 */
+ .byte 0x0
+ .byte 0x0
+
+ .uleb128 0x3
+ .uleb128 0x24 /* DW_TAG_base_type */
+ .byte 0x0
+ .uleb128 0xb /* DW_AT_byte_size */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x3e /* DW_AT_encoding */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .byte 0x0
+ .byte 0x0
+
+ .byte 0x0
+
+ .section .debug_str,"MS",@progbits,1
+.LASF1:
+ .string "dwarfreloc1.c"
+.LASF0:
+ .string "GNU C 4.3.1 20080801 (Red Hat 4.3.1-6)"
+.LASF2:
+ .string "/"
+ .ident "GCC: (GNU) 4.3.1 20080801 (Red Hat 4.3.1-6)"
+ .section .note.GNU-stack,"",@progbits
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/dwarfreloc2.s b/binutils-2.21/ld/testsuite/ld-x86-64/dwarfreloc2.s
new file mode 100644
index 0000000..dee3b87
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/dwarfreloc2.s
@@ -0,0 +1,94 @@
+ .file 1 "dwarfreloc2.c"
+ .comm i2,4,4
+ .section .debug_line,"",@progbits
+.Ldebug_line0:
+ .section .debug_info
+.Ldebug_info0:
+ .long .Ldebug_info_end - .Ldebug_info_start
+.Ldebug_info_start:
+ .value 0x2
+ .long .Ldebug_abbrev0
+ .byte 0x8
+
+ .uleb128 0x1 /* DW_TAG_compile_unit */
+ .long .LASF0 /* DW_AT_producer */
+ .byte 0x1 /* DW_AT_language */
+ .long .LASF1 /* DW_AT_name */
+ .long .LASF2 /* DW_AT_comp_dir */
+ .long .Ldebug_line0 /* DW_AT_stmt_list */
+
+ .uleb128 0x2 /* DW_TAG_variable */
+ .string "i2" /* DW_AT_name */
+ .byte 0x1 /* DW_AT_decl_file */
+ .byte 0x1 /* DW_AT_decl_line */
+ /* DWARF3 Page 224 (236/267)
+ <prefix>.<file-designator>.<gid-number>.<die-number> */
+ .quad .dwarfreloc1.0.2 /* DW_AT_type (DW_FORM_ref_addr) */
+ .byte 0x1 /* DW_AT_external */
+ .byte 0x9 /* DW_AT_location: length */
+ .byte 0x3 /* DW_AT_location: DW_OP_addr */
+ .quad i2 /* DW_AT_location: DW_OP_addr: address */
+
+ .byte 0x0
+.Ldebug_info_end:
+
+ .section .debug_abbrev
+.Ldebug_abbrev0:
+ .uleb128 0x1
+ .uleb128 0x11
+
+ .byte 0x1
+ .uleb128 0x25 /* DW_AT_producer */
+ .uleb128 0xe /* DW_FORM_strp */
+ .uleb128 0x13 /* DW_AT_language */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0xe /* DW_FORM_strp */
+ .uleb128 0x1b /* DW_AT_comp_dir */
+ .uleb128 0xe /* DW_FORM_strp */
+ .uleb128 0x10 /* DW_AT_stmt_list */
+ .uleb128 0x6 /* DW_FORM_data4 */
+ .byte 0x0
+ .byte 0x0
+
+ .uleb128 0x2
+ .uleb128 0x34 /* DW_TAG_variable */
+ .byte 0x0
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x3a /* DW_AT_decl_file */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x3b /* DW_AT_decl_line */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x49 /* DW_AT_type */
+ .uleb128 0x10 /* DW_FORM_ref_addr */
+ .uleb128 0x3f /* DW_AT_external */
+ .uleb128 0xc /* DW_FORM_flag */
+ .uleb128 0x2 /* DW_AT_location */
+ .uleb128 0xa /* DW_FORM_block1 */
+ .byte 0x0
+ .byte 0x0
+
+ .uleb128 0x3
+ .uleb128 0x24 /* DW_TAG_base_type */
+ .byte 0x0
+ .uleb128 0xb /* DW_AT_byte_size */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x3e /* DW_AT_encoding */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .byte 0x0
+ .byte 0x0
+
+ .byte 0x0
+
+ .section .debug_str,"MS",@progbits,1
+.LASF1:
+ .string "dwarfreloc2.c"
+.LASF0:
+ .string "GNU C 4.3.1 20080801 (Red Hat 4.3.1-6)"
+.LASF2:
+ .string "/"
+ .ident "GCC: (GNU) 4.3.1 20080801 (Red Hat 4.3.1-6)"
+ .section .note.GNU-stack,"",@progbits
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/hidden1.d b/binutils-2.21/ld/testsuite/ld-x86-64/hidden1.d
new file mode 100644
index 0000000..c4c843b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/hidden1.d
@@ -0,0 +1,3 @@
+#as: --64
+#ld: -shared -melf_x86_64
+#error: .*relocation R_X86_64_PC32 against undefined hidden symbol `foo' can not be used when making a shared object
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/hidden1.s b/binutils-2.21/ld/testsuite/ld-x86-64/hidden1.s
new file mode 100644
index 0000000..ba7f88b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/hidden1.s
@@ -0,0 +1,9 @@
+ .text
+.globl bar
+ .type bar, @function
+bar:
+ leaq foo(%rip), %rax
+ ret
+ .size bar, .-bar
+ .weak foo
+ .hidden foo
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/hidden2.d b/binutils-2.21/ld/testsuite/ld-x86-64/hidden2.d
new file mode 100644
index 0000000..9a29f9a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/hidden2.d
@@ -0,0 +1,13 @@
+#as: --64
+#ld: -shared -melf_x86_64
+#objdump: -drw
+
+.*: +file format .*
+
+
+Disassembly of section .text:
+
+[a-f0-9]+ <bar>:
+[ ]*[a-f0-9]+: e8 33 fe ff ff callq 0 .*
+[ ]*[a-f0-9]+: c3 retq
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/hidden2.s b/binutils-2.21/ld/testsuite/ld-x86-64/hidden2.s
new file mode 100644
index 0000000..03e2ce7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/hidden2.s
@@ -0,0 +1,9 @@
+ .text
+.globl bar
+ .type bar, @function
+bar:
+ call foo
+ ret
+ .size bar, .-bar
+ .weak foo
+ .hidden foo
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/hidden3.d b/binutils-2.21/ld/testsuite/ld-x86-64/hidden3.d
new file mode 100644
index 0000000..c4c843b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/hidden3.d
@@ -0,0 +1,3 @@
+#as: --64
+#ld: -shared -melf_x86_64
+#error: .*relocation R_X86_64_PC32 against undefined hidden symbol `foo' can not be used when making a shared object
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/hidden3.s b/binutils-2.21/ld/testsuite/ld-x86-64/hidden3.s
new file mode 100644
index 0000000..75482aa
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/hidden3.s
@@ -0,0 +1,8 @@
+ .text
+.globl bar
+ .type bar, @function
+bar:
+ leaq foo(%rip), %rax
+ ret
+ .size bar, .-bar
+ .hidden foo
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/line.exp b/binutils-2.21/ld/testsuite/ld-x86-64/line.exp
new file mode 100644
index 0000000..c68daaa
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/line.exp
@@ -0,0 +1,57 @@
+# Test that the linker reports undefined symbol line number correctly.
+#
+# Copyright 2007 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+if { !([istarget "x86_64-*-elf*"]
+ || [istarget "x86_64-*-linux*"]) } {
+ return
+}
+
+set testline "undefined line"
+
+if ![ld_assemble $as "--64 $srcdir/$subdir/undefined.s" tmpdir/undefined.o] {
+ verbose "Unable to assemble test file!" 1
+ unresolved $testline
+ return
+}
+
+remote_file host delete "tmpdir/undefined"
+
+# Using -e start prevents the SunOS linker from trying to build a
+# shared library.
+send_log "$ld -e start -melf_x86_64 -o tmpdir/undefined tmpdir/undefined.o\n"
+set exec_output [run_host_cmd "$ld" "-e start -melf_x86_64 -o tmpdir/undefined tmpdir/undefined.o"]
+
+send_log "$exec_output\n"
+verbose "$exec_output"
+
+proc checkund { string testname } {
+ global exec_output
+
+ if [string match "*$string*" $exec_output] {
+ pass $testname
+ } else {
+ fail $testname
+ }
+}
+
+set ml "undefined.c:9: undefined reference to `*this_function_is_not_defined'"
+
+checkund $ml $testline
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/mixed1a.s b/binutils-2.21/ld/testsuite/ld-x86-64/mixed1a.s
new file mode 100644
index 0000000..07e0ae8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/mixed1a.s
@@ -0,0 +1,6 @@
+ .text
+.globl _start
+ .type _start, @function
+_start:
+ cmpq $0, foo(%rip)
+ .size _start, .-_start
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/mixed1b.s b/binutils-2.21/ld/testsuite/ld-x86-64/mixed1b.s
new file mode 100644
index 0000000..66bb38f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/mixed1b.s
@@ -0,0 +1,10 @@
+.globl foo
+ .section .rodata.str1.1,"aMS",@progbits,1
+.LC0:
+ .string "Hello"
+ .data
+ .align 4
+ .type foo, @object
+ .size foo, 4
+foo:
+ .long .LC0
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/mixed2a.s b/binutils-2.21/ld/testsuite/ld-x86-64/mixed2a.s
new file mode 100644
index 0000000..a597bb3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/mixed2a.s
@@ -0,0 +1,7 @@
+ .text
+ .p2align 4,,15
+.globl _start
+ .type _start, @function
+_start:
+ movl foo(%rip), %eax
+ .size _start, .-_start
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/mixed2b.s b/binutils-2.21/ld/testsuite/ld-x86-64/mixed2b.s
new file mode 100644
index 0000000..3cac801
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/mixed2b.s
@@ -0,0 +1,7 @@
+.globl foo
+ .data
+ .align 4
+ .type foo, @object
+ .size foo, 4
+foo:
+ .long 1
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/nogot1.d b/binutils-2.21/ld/testsuite/ld-x86-64/nogot1.d
new file mode 100644
index 0000000..f6c4cf1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/nogot1.d
@@ -0,0 +1,8 @@
+#ld: --shared -melf_x86_64
+#readelf: -S --wide
+#as: --64
+
+#...
+[ ]*\[.*\][ ]+\.dynamic[ ]+DYNAMIC.*
+[ ]*\[.*\][ ]+.*STRTAB.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/nogot1.s b/binutils-2.21/ld/testsuite/ld-x86-64/nogot1.s
new file mode 100644
index 0000000..d884f6f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/nogot1.s
@@ -0,0 +1,10 @@
+ .type bar, @function
+bar:
+ ret
+ .size bar, .-bar
+.globl foo
+ .type foo, @function
+foo:
+ leaq bar(%rip), %rax
+ ret
+ .size foo, .-foo
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/nogot2.d b/binutils-2.21/ld/testsuite/ld-x86-64/nogot2.d
new file mode 100644
index 0000000..c6123c5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/nogot2.d
@@ -0,0 +1,7 @@
+#ld: -pie -melf_x86_64
+#readelf: -S --wide
+#as: --64
+
+#...
+[ ]*\[.*\][ ]+.*\.got\.plt.*
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/nogot2.s b/binutils-2.21/ld/testsuite/ld-x86-64/nogot2.s
new file mode 100644
index 0000000..530e909
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/nogot2.s
@@ -0,0 +1,4 @@
+ .text
+ .globl _start
+_start:
+ movq _GLOBAL_OFFSET_TABLE_(%rip), %rcx
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/pcrel16.d b/binutils-2.21/ld/testsuite/ld-x86-64/pcrel16.d
new file mode 100644
index 0000000..f593657
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/pcrel16.d
@@ -0,0 +1,15 @@
+#name: PCREL16 overflow
+#source: ../ld-i386/pcrel16.s
+#ld: -Ttext 0x0
+#objdump: -drj.text -m i8086
+
+.*: +file format elf64-x86-64
+
+Disassembly of section .text:
+
+0+ <_start>:
+ ...
+ 420: cd 42[ ]+int \$0x42
+ 422: ca 02 00[ ]+lret \$0x2
+ ...
+ f065: e9 b8 13[ ]+jmp 420 <_start\+0x420>
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/pcrel8.d b/binutils-2.21/ld/testsuite/ld-x86-64/pcrel8.d
new file mode 100644
index 0000000..17a3bba
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/pcrel8.d
@@ -0,0 +1,4 @@
+#name: PCREL8 overflow
+#source: ../ld-i386/pcrel8.s
+#ld:
+#error: .*relocation truncated to fit: R_X86_64_PC8 .*
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/protected1.d b/binutils-2.21/ld/testsuite/ld-x86-64/protected1.d
new file mode 100644
index 0000000..783b85a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/protected1.d
@@ -0,0 +1,3 @@
+#as: --64
+#ld: -shared -melf_x86_64
+#error: .*relocation R_X86_64_PC32 against protected symbol `foo' can not be used when making a shared object
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/protected1.s b/binutils-2.21/ld/testsuite/ld-x86-64/protected1.s
new file mode 100644
index 0000000..31368aa
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/protected1.s
@@ -0,0 +1,13 @@
+ .text
+.globl foo
+ .protected foo
+ .type foo, @function
+foo:
+ ret
+ .size foo, .-foo
+.globl bar
+ .type bar, @function
+bar:
+ leaq foo(%rip), %rax
+ ret
+ .size bar, .-bar
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/protected2-l1om.d b/binutils-2.21/ld/testsuite/ld-x86-64/protected2-l1om.d
new file mode 100644
index 0000000..32311a2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/protected2-l1om.d
@@ -0,0 +1,17 @@
+#source: protected2.s
+#as: --64 -march=l1om
+#ld: -shared -melf_l1om
+#objdump: -drw --insn-width=7
+
+.*: +file format .*
+
+
+Disassembly of section .text:
+
+0+[a-f0-9]+ <foo>:
+[ ]*[a-f0-9]+: c3 retq
+
+0+[a-f0-9]+ <bar>:
+[ ]*[a-f0-9]+: e8 fa ff ff ff callq [a-f0-9]+ <foo>
+[ ]*[a-f0-9]+: c3 retq
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/protected2.d b/binutils-2.21/ld/testsuite/ld-x86-64/protected2.d
new file mode 100644
index 0000000..2e91b17
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/protected2.d
@@ -0,0 +1,16 @@
+#as: --64
+#ld: -shared -melf_x86_64
+#objdump: -drw
+
+.*: +file format .*
+
+
+Disassembly of section .text:
+
+0+[a-f0-9]+ <foo>:
+[ ]*[a-f0-9]+: c3 retq
+
+0+[a-f0-9]+ <bar>:
+[ ]*[a-f0-9]+: e8 fa ff ff ff callq [a-f0-9]+ <foo>
+[ ]*[a-f0-9]+: c3 retq
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/protected2.s b/binutils-2.21/ld/testsuite/ld-x86-64/protected2.s
new file mode 100644
index 0000000..61e5aec
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/protected2.s
@@ -0,0 +1,13 @@
+ .text
+.globl foo
+ .protected foo
+ .type foo, @function
+foo:
+ ret
+ .size foo, .-foo
+.globl bar
+ .type bar, @function
+bar:
+ call foo
+ ret
+ .size bar, .-bar
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/protected3-l1om.d b/binutils-2.21/ld/testsuite/ld-x86-64/protected3-l1om.d
new file mode 100644
index 0000000..701d4e1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/protected3-l1om.d
@@ -0,0 +1,16 @@
+#source: protected3.s
+#as: --64 -march=l1om
+#ld: -shared -melf_l1om
+#readelf: -h
+
+ELF Header:
+ Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
+ Class: ELF64
+ Data: 2's complement, little endian
+ Version: 1 \(current\)
+ OS/ABI: UNIX - System V
+ ABI Version: 0
+ Type: DYN \(Shared object file\)
+ Machine: Intel L1OM
+ Version: 0x1
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/protected3.d b/binutils-2.21/ld/testsuite/ld-x86-64/protected3.d
new file mode 100644
index 0000000..897c1cf
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/protected3.d
@@ -0,0 +1,13 @@
+#as: --64
+#ld: -shared -melf_x86_64
+#objdump: -drw
+
+.*: +file format .*
+
+
+Disassembly of section .text:
+
+0+[a-f0-9]+ <bar>:
+[ ]*[a-f0-9]+: 8b 05 [a-f0-9][a-f0-9] 00 [a-f0-9][a-f0-9] 00 mov 0x[a-f0-9]+\(%rip\),%eax # [a-f0-9]+ <foo>
+[ ]*[a-f0-9]+: c3 retq
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/protected3.s b/binutils-2.21/ld/testsuite/ld-x86-64/protected3.s
new file mode 100644
index 0000000..e4af6e7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/protected3.s
@@ -0,0 +1,15 @@
+ .protected foo
+.globl foo
+ .data
+ .align 4
+ .type foo, @object
+ .size foo, 4
+foo:
+ .long 1
+ .text
+.globl bar
+ .type bar, @function
+bar:
+ movl foo(%rip), %eax
+ ret
+ .size bar, .-bar
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/split-by-file.rd b/binutils-2.21/ld/testsuite/ld-x86-64/split-by-file.rd
new file mode 100644
index 0000000..7c63aaa
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/split-by-file.rd
@@ -0,0 +1,17 @@
+There are 9 section headers, starting at offset 0x80:
+
+Section Headers:
+ \[Nr\] Name Type Address Off Size ES Flg Lk Inf Al
+ \[ 0\] NULL 0000000000000000 000000 000000 00 0 0 0
+ \[ 1\] .text PROGBITS 0000000000000000 000040 000000 00 AX 0 0 4
+ \[ 2\] .foo PROGBITS 0000000000000000 000040 000003 00 AXl 0 0 1
+ \[ 3\] .data PROGBITS 0000000000000000 000044 000000 00 WA 0 0 4
+ \[ 4\] .bss NOBITS 0000000000000000 000044 000000 00 WA 0 0 4
+ \[ 5\] .foo.0 PROGBITS 0000000000000003 000044 000003 00 AXl 0 0 1
+ \[ 6\] .shstrtab STRTAB 0000000000000000 000047 000038 00 0 0 1
+ \[ 7\] .symtab SYMTAB 0000000000000000 0002c0 0000d8 18 8 6 8
+ \[ 8\] .strtab STRTAB 0000000000000000 000398 000016 00 0 0 1
+Key to Flags:
+ W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\), l \(large\)
+ I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+ O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/split-by-file1.s b/binutils-2.21/ld/testsuite/ld-x86-64/split-by-file1.s
new file mode 100644
index 0000000..81458c0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/split-by-file1.s
@@ -0,0 +1,7 @@
+ .section ".foo", "axl"
+ .global label1
+label1:
+ nop
+ nop
+ nop
+
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/split-by-file2.s b/binutils-2.21/ld/testsuite/ld-x86-64/split-by-file2.s
new file mode 100644
index 0000000..3e25623
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/split-by-file2.s
@@ -0,0 +1,6 @@
+ .section ".foo", "axl"
+ .global label2
+label2:
+ nop
+ nop
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsbin.dd b/binutils-2.21/ld/testsuite/ld-x86-64/tlsbin.dd
new file mode 100644
index 0000000..6d0de98
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsbin.dd
@@ -0,0 +1,310 @@
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as: --64
+#ld: -shared -melf_x86_64
+#objdump: -drj.text
+#target: x86_64-*-*
+
+# PT_TLS layout is:
+# Offset from Offset from Name
+# TCB base TCB end
+# 0x00 -0xa0 sg1..sg8
+# 0x20 -0x80 sl1..sl8
+# 0x40 -0x60 sh1..sh8
+# 0x60 -0x40 bg1..bg8
+# 0x80 -0x20 bl1..bl8
+
+.*: +file format elf64-x86-64
+
+Disassembly of section .text:
+
+0+401000 <fn2>:
+ 401000: 55[ ]+push %rbp
+ 401001: 48 89 e5[ ]+mov %rsp,%rbp
+# GD -> IE because variable is not defined in executable
+ 401004: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
+ 40100b: 00 00 *
+ 40100d: 48 03 05 d4 03 20 00[ ]+add 0x2003d4\(%rip\),%rax +# 6013e8 <.*>
+# -> R_X86_64_TPOFF64 sG1
+ 401014: 90[ ]+nop *
+ 401015: 90[ ]+nop *
+ 401016: 90[ ]+nop *
+ 401017: 90[ ]+nop *
+# GD -> IE because variable is not defined in executable where
+# the variable is referenced through IE too
+ 401018: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
+ 40101f: 00 00 *
+ 401021: 48 03 05 b0 03 20 00[ ]+add 0x2003b0\(%rip\),%rax +# 6013d8 <.*>
+# -> R_X86_64_TPOFF64 sG2
+ 401028: 90[ ]+nop *
+ 401029: 90[ ]+nop *
+ 40102a: 90[ ]+nop *
+ 40102b: 90[ ]+nop *
+# GD -> LE with global variable defined in executable
+ 40102c: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
+ 401033: 00 00 *
+ 401035: 48 8d 80 60 ff ff ff[ ]+lea -0xa0\(%rax\),%rax
+# sg1
+ 40103c: 90[ ]+nop *
+ 40103d: 90[ ]+nop *
+ 40103e: 90[ ]+nop *
+ 40103f: 90[ ]+nop *
+# GD -> LE with local variable defined in executable
+ 401040: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
+ 401047: 00 00 *
+ 401049: 48 8d 80 80 ff ff ff[ ]+lea -0x80\(%rax\),%rax
+# sl1
+ 401050: 90[ ]+nop *
+ 401051: 90[ ]+nop *
+ 401052: 90[ ]+nop *
+ 401053: 90[ ]+nop *
+# GD -> LE with hidden variable defined in executable
+ 401054: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
+ 40105b: 00 00 *
+ 40105d: 48 8d 80 a0 ff ff ff[ ]+lea -0x60\(%rax\),%rax
+# sh1
+ 401064: 90[ ]+nop *
+ 401065: 90[ ]+nop *
+ 401066: 90[ ]+nop *
+ 401067: 90[ ]+nop *
+# LD -> LE
+ 401068: 66 66 66 64 48 8b 04[ ]+data32 data32 data32 mov %fs:0x0,%rax
+ 40106f: 25 00 00 00 00 *
+ 401074: 90[ ]+nop *
+ 401075: 90[ ]+nop *
+ 401076: 48 8d 90 81 ff ff ff[ ]+lea -0x7f\(%rax\),%rdx
+# sl1+1
+ 40107d: 90[ ]+nop *
+ 40107e: 90[ ]+nop *
+ 40107f: 4c 8d 88 86 ff ff ff[ ]+lea -0x7a\(%rax\),%r9
+# sl2+2
+ 401086: 90[ ]+nop *
+ 401087: 90[ ]+nop *
+ 401088: 90[ ]+nop *
+ 401089: 90[ ]+nop *
+# LD -> LE against hidden variables
+ 40108a: 66 66 66 64 48 8b 04[ ]+data32 data32 data32 mov %fs:0x0,%rax
+ 401091: 25 00 00 00 00 *
+ 401096: 90[ ]+nop *
+ 401097: 90[ ]+nop *
+ 401098: 48 8d 90 a0 ff ff ff[ ]+lea -0x60\(%rax\),%rdx
+# sh1
+ 40109f: 90[ ]+nop *
+ 4010a0: 90[ ]+nop *
+ 4010a1: 48 8d 88 a7 ff ff ff[ ]+lea -0x59\(%rax\),%rcx
+# sh2+3
+ 4010a8: 90[ ]+nop *
+ 4010a9: 90[ ]+nop *
+ 4010aa: 90[ ]+nop *
+ 4010ab: 90[ ]+nop *
+# IE against global var
+ 4010ac: 64 4c 8b 0c 25 00 00[ ]+mov %fs:0x0,%r9
+ 4010b3: 00 00 *
+ 4010b5: 90[ ]+nop *
+ 4010b6: 90[ ]+nop *
+ 4010b7: 4c 03 0d 1a 03 20 00[ ]+add 0x20031a\(%rip\),%r9 +# 6013d8 <.*>
+# -> R_X86_64_TPOFF64 sG2
+ 4010be: 90[ ]+nop *
+ 4010bf: 90[ ]+nop *
+ 4010c0: 90[ ]+nop *
+ 4010c1: 90[ ]+nop *
+# IE -> LE against global var defined in exec
+ 4010c2: 64 4c 8b 14 25 00 00[ ]+mov %fs:0x0,%r10
+ 4010c9: 00 00 *
+ 4010cb: 90[ ]+nop *
+ 4010cc: 90[ ]+nop *
+ 4010cd: 4d 8d 92 60 ff ff ff[ ]+lea -0xa0\(%r10\),%r10
+# sg1
+ 4010d4: 90[ ]+nop *
+ 4010d5: 90[ ]+nop *
+ 4010d6: 90[ ]+nop *
+ 4010d7: 90[ ]+nop *
+# IE -> LE against local var
+ 4010d8: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
+ 4010df: 00 00 *
+ 4010e1: 90[ ]+nop *
+ 4010e2: 90[ ]+nop *
+ 4010e3: 48 8d 80 80 ff ff ff[ ]+lea -0x80\(%rax\),%rax
+# sl1
+ 4010ea: 90[ ]+nop *
+ 4010eb: 90[ ]+nop *
+ 4010ec: 90[ ]+nop *
+ 4010ed: 90[ ]+nop *
+# IE -> LE against hidden var
+ 4010ee: 64 48 8b 0c 25 00 00[ ]+mov %fs:0x0,%rcx
+ 4010f5: 00 00 *
+ 4010f7: 90[ ]+nop *
+ 4010f8: 90[ ]+nop *
+ 4010f9: 48 8d 89 a0 ff ff ff[ ]+lea -0x60\(%rcx\),%rcx
+# sh1
+ 401100: 90[ ]+nop *
+ 401101: 90[ ]+nop *
+ 401102: 90[ ]+nop *
+ 401103: 90[ ]+nop *
+# Direct access through %fs
+# IE against global var
+ 401104: 48 8b 0d c5 02 20 00[ ]+mov 0x2002c5\(%rip\),%rcx +# 6013d0 <.*>
+# -> R_X86_64_TPOFF64 sG5
+ 40110b: 90[ ]+nop *
+ 40110c: 90[ ]+nop *
+ 40110d: 64 48 8b 11[ ]+mov %fs:\(%rcx\),%rdx
+ 401111: 90[ ]+nop *
+ 401112: 90[ ]+nop *
+ 401113: 90[ ]+nop *
+ 401114: 90[ ]+nop *
+# IE->LE against local var
+ 401115: 49 c7 c3 90 ff ff ff[ ]+mov \$0xf+90,%r11
+# sl5
+ 40111c: 90[ ]+nop *
+ 40111d: 90[ ]+nop *
+ 40111e: 64 4d 8b 23[ ]+mov %fs:\(%r11\),%r12
+ 401122: 90[ ]+nop *
+ 401123: 90[ ]+nop *
+ 401124: 90[ ]+nop *
+ 401125: 90[ ]+nop *
+# IE->LE against hidden var
+ 401126: 48 c7 c2 b0 ff ff ff[ ]+mov \$0xf+b0,%rdx
+ 40112d: 90[ ]+nop *
+ 40112e: 90[ ]+nop *
+ 40112f: 64 48 8b 12[ ]+mov %fs:\(%rdx\),%rdx
+# sh5
+ 401133: 90[ ]+nop *
+ 401134: 90[ ]+nop *
+ 401135: 90[ ]+nop *
+ 401136: 90[ ]+nop *
+ 401137: c9[ ]+leaveq *
+ 401138: c3[ ]+retq *
+ 401139: 90[ ]+nop *
+ 40113a: 90[ ]+nop *
+ 40113b: 90[ ]+nop *
+
+0+40113c <_start>:
+ 40113c: 55[ ]+push %rbp
+ 40113d: 48 89 e5[ ]+mov %rsp,%rbp
+# IE against global var
+ 401140: 64 4c 8b 1c 25 00 00[ ]+mov %fs:0x0,%r11
+ 401147: 00 00 *
+ 401149: 90[ ]+nop *
+ 40114a: 90[ ]+nop *
+ 40114b: 4c 03 1d 8e 02 20 00[ ]+add 0x20028e\(%rip\),%r11 +# 6013e0 <.*>
+# -> R_X86_64_TPOFF64 sG6
+ 401152: 90[ ]+nop *
+ 401153: 90[ ]+nop *
+ 401154: 90[ ]+nop *
+ 401155: 90[ ]+nop *
+# IE -> LE against global var defined in exec
+ 401156: 64 48 8b 14 25 00 00[ ]+mov %fs:0x0,%rdx
+ 40115d: 00 00 *
+ 40115f: 90[ ]+nop *
+ 401160: 90[ ]+nop *
+ 401161: 48 8d 92 d4 ff ff ff[ ]+lea -0x2c\(%rdx\),%rdx
+# bg6
+ 401168: 90[ ]+nop *
+ 401169: 90[ ]+nop *
+ 40116a: 90[ ]+nop *
+ 40116b: 90[ ]+nop *
+# IE -> LE against local var
+ 40116c: 64 4c 8b 24 25 00 00[ ]+mov %fs:0x0,%r12
+ 401173: 00 00 *
+ 401175: 90[ ]+nop *
+ 401176: 90[ ]+nop *
+ 401177: 49 81 c4 f4 ff ff ff[ ]+add \$0xf+f4,%r12
+# bl6
+ 40117e: 90[ ]+nop *
+ 40117f: 90[ ]+nop *
+ 401180: 90[ ]+nop *
+ 401181: 90[ ]+nop *
+# direct %fs access IE -> LE against local var
+ 401182: 48 c7 c2 fc ff ff ff[ ]+mov \$0xf+fc,%rdx
+# bl8
+ 401189: 90[ ]+nop *
+ 40118a: 90[ ]+nop *
+ 40118b: 64 48 8b 02[ ]+mov %fs:\(%rdx\),%rax
+ 40118f: 90[ ]+nop *
+ 401190: 90[ ]+nop *
+ 401191: 90[ ]+nop *
+ 401192: 90[ ]+nop *
+# IE -> LE against hidden but not local var
+ 401193: 64 48 8b 14 25 00 00[ ]+mov %fs:0x0,%rdx
+ 40119a: 00 00 *
+ 40119c: 90[ ]+nop *
+ 40119d: 90[ ]+nop *
+ 40119e: 48 8d 92 b4 ff ff ff[ ]+lea -0x4c\(%rdx\),%rdx
+# sh6
+ 4011a5: 90[ ]+nop *
+ 4011a6: 90[ ]+nop *
+ 4011a7: 90[ ]+nop *
+ 4011a8: 90[ ]+nop *
+# direct %fs access IE -> LE against hidden but not local var
+ 4011a9: 48 c7 c2 bc ff ff ff[ ]+mov \$0xf+bc,%rdx
+# sh8
+ 4011b0: 90[ ]+nop *
+ 4011b1: 90[ ]+nop *
+ 4011b2: 64 48 8b 02[ ]+mov %fs:\(%rdx\),%rax
+ 4011b6: 90[ ]+nop *
+ 4011b7: 90[ ]+nop *
+ 4011b8: 90[ ]+nop *
+ 4011b9: 90[ ]+nop *
+# LE, global var defined in exec
+ 4011ba: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
+ 4011c1: 00 00 *
+ 4011c3: 90[ ]+nop *
+ 4011c4: 90[ ]+nop *
+ 4011c5: 48 8d 90 64 ff ff ff[ ]+lea -0x9c\(%rax\),%rdx
+# sg2
+ 4011cc: 90[ ]+nop *
+ 4011cd: 90[ ]+nop *
+ 4011ce: 90[ ]+nop *
+ 4011cf: 90[ ]+nop *
+# LE, local var, non-canonical sequence
+ 4011d0: 49 c7 c1 e6 ff ff ff[ ]+mov \$0xf+e6,%r9
+# bl2+2
+ 4011d7: 90[ ]+nop *
+ 4011d8: 90[ ]+nop *
+ 4011d9: 64 48 8b 14 25 00 00[ ]+mov %fs:0x0,%rdx
+ 4011e0: 00 00 *
+ 4011e2: 90[ ]+nop *
+ 4011e3: 90[ ]+nop *
+ 4011e4: 4c 01 ca[ ]+add %r9,%rdx
+ 4011e7: 90[ ]+nop *
+ 4011e8: 90[ ]+nop *
+ 4011e9: 90[ ]+nop *
+ 4011ea: 90[ ]+nop *
+# LE, hidden var defined in exec, non-canonical sequence
+ 4011eb: 64 48 8b 14 25 00 00[ ]+mov %fs:0x0,%rdx
+ 4011f2: 00 00 *
+ 4011f4: 90[ ]+nop *
+ 4011f5: 90[ ]+nop *
+ 4011f6: 48 81 c2 a5 ff ff ff[ ]+add \$0xf+a5,%rdx
+# sh2+1
+ 4011fd: 90[ ]+nop *
+ 4011fe: 90[ ]+nop *
+ 4011ff: 90[ ]+nop *
+ 401200: 90[ ]+nop *
+# Direct %fs access
+# LE, global var defined in exec
+ 401201: 64 48 8b 04 25 68 ff[ ]+mov %fs:0xf+68,%rax
+ 401208: ff ff *
+# sg3
+ 40120a: 90[ ]+nop *
+ 40120b: 90[ ]+nop *
+ 40120c: 90[ ]+nop *
+ 40120d: 90[ ]+nop *
+# LE, local var
+ 40120e: 64 4c 8b 14 25 eb ff[ ]+mov %fs:0xf+eb,%r10
+ 401215: ff ff *
+# bl3+3
+ 401217: 90[ ]+nop *
+ 401218: 90[ ]+nop *
+ 401219: 90[ ]+nop *
+ 40121a: 90[ ]+nop *
+# LE, hidden var defined in exec
+ 40121b: 64 48 8b 14 25 a9 ff[ ]+mov %fs:0xf+a9,%rdx
+ 401222: ff ff *
+# sh3+1
+ 401224: 90[ ]+nop *
+ 401225: 90[ ]+nop *
+ 401226: 90[ ]+nop *
+ 401227: 90[ ]+nop *
+ 401228: c9[ ]+leaveq *
+ 401229: c3[ ]+retq *
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsbin.rd b/binutils-2.21/ld/testsuite/ld-x86-64/tlsbin.rd
new file mode 100644
index 0000000..03e5efc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsbin.rd
@@ -0,0 +1,147 @@
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as: --64
+#ld: -shared -melf_x86_64
+#readelf: -WSsrl
+#target: x86_64-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 00 +0 +0 +0
+ +\[[ 0-9]+\] .interp +.*
+ +\[[ 0-9]+\] .hash +.*
+ +\[[ 0-9]+\] .dynsym +.*
+ +\[[ 0-9]+\] .dynstr +.*
+ +\[[ 0-9]+\] .rela.dyn +.*
+ +\[[ 0-9]+\] .rela.plt +.*
+ +\[[ 0-9]+\] .plt +.*
+ +\[[ 0-9]+\] .text +PROGBITS +0+401000 0+1000 0+22a 00 +AX +0 +0 +4096
+ +\[[ 0-9]+\] .tdata +PROGBITS +0+60122a 0+122a 0+60 00 WAT +0 +0 +1
+ +\[[ 0-9]+\] .tbss +NOBITS +0+60128a 0+128a 0+40 00 WAT +0 +0 +1
+ +\[[ 0-9]+\] .dynamic +DYNAMIC +0+601290 0+1290 0+140 10 +WA +4 +0 +8
+ +\[[ 0-9]+\] .got +PROGBITS +0+6013d0 0+13d0 0+20 08 +WA +0 +0 +8
+ +\[[ 0-9]+\] .got.plt +PROGBITS +0+6013f0 0+13f0 0+20 08 +WA +0 +0 +8
+ +\[[ 0-9]+\] .shstrtab +.*
+ +\[[ 0-9]+\] .symtab +.*
+ +\[[ 0-9]+\] .strtab +.*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x40113c
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +PHDR.*
+ +INTERP.*
+.*Requesting program interpreter.*
+ +LOAD +0x0+ 0x0+400000 0x0+400000 0x0+122a 0x0+122a R E 0x200000
+ +LOAD +0x0+122a 0x0+60122a 0x0+60122a 0x0+1e6 0x0+1e6 RW +0x200000
+ +DYNAMIC +0x0+1290 0x0+601290 0x0+601290 0x0+140 0x0+140 RW +0x8
+ +TLS +0x0+122a 0x0+60122a 0x0+60122a 0x0+60 0x0+a0 R +0x1
+
+ Section to Segment mapping:
+ +Segment Sections...
+ +00 *
+ +01 +.interp *
+ +02 +.interp .hash .dynsym .dynstr .rela.dyn .rela.plt .plt .text *
+ +03 +.tdata .dynamic .got .got.plt *
+ +04 +.dynamic *
+ +05 +.tdata .tbss *
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 4 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_X86_64_TPOFF64 +0+ sG5 \+ 0
+[0-9a-f ]+R_X86_64_TPOFF64 +0+ sG2 \+ 0
+[0-9a-f ]+R_X86_64_TPOFF64 +0+ sG6 \+ 0
+[0-9a-f ]+R_X86_64_TPOFF64 +0+ sG1 \+ 0
+
+Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_X86_64_JUMP_SLOT[0-9a-f ]+__tls_get_addr \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND *
+.* TLS +GLOBAL +DEFAULT +UND sG5
+.* TLS +GLOBAL +DEFAULT +UND sG2
+.* FUNC +GLOBAL +DEFAULT +UND __tls_get_addr
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* TLS +GLOBAL +DEFAULT +UND sG6
+.* TLS +GLOBAL +DEFAULT +UND sG1
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND *
+.* SECTION +LOCAL +DEFAULT +1 *
+.* SECTION +LOCAL +DEFAULT +2 *
+.* SECTION +LOCAL +DEFAULT +3 *
+.* SECTION +LOCAL +DEFAULT +4 *
+.* SECTION +LOCAL +DEFAULT +5 *
+.* SECTION +LOCAL +DEFAULT +6 *
+.* SECTION +LOCAL +DEFAULT +7 *
+.* SECTION +LOCAL +DEFAULT +8 *
+.* SECTION +LOCAL +DEFAULT +9 *
+.* SECTION +LOCAL +DEFAULT +10 *
+.* SECTION +LOCAL +DEFAULT +11 *
+.* SECTION +LOCAL +DEFAULT +12 *
+.* SECTION +LOCAL +DEFAULT +13 *
+.* TLS +LOCAL +DEFAULT +9 sl1
+.* TLS +LOCAL +DEFAULT +9 sl2
+.* TLS +LOCAL +DEFAULT +9 sl3
+.* TLS +LOCAL +DEFAULT +9 sl4
+.* TLS +LOCAL +DEFAULT +9 sl5
+.* TLS +LOCAL +DEFAULT +9 sl6
+.* TLS +LOCAL +DEFAULT +9 sl7
+.* TLS +LOCAL +DEFAULT +9 sl8
+.* TLS +LOCAL +DEFAULT +10 bl1
+.* TLS +LOCAL +DEFAULT +10 bl2
+.* TLS +LOCAL +DEFAULT +10 bl3
+.* TLS +LOCAL +DEFAULT +10 bl4
+.* TLS +LOCAL +DEFAULT +10 bl5
+.* TLS +LOCAL +DEFAULT +10 bl6
+.* TLS +LOCAL +DEFAULT +10 bl7
+.* TLS +LOCAL +DEFAULT +10 bl8
+.* OBJECT +LOCAL +DEFAULT +11 _DYNAMIC
+.* OBJECT +LOCAL +DEFAULT +13 _GLOBAL_OFFSET_TABLE_
+.* TLS +GLOBAL +DEFAULT +9 sg8
+.* TLS +GLOBAL +DEFAULT +10 bg8
+.* TLS +GLOBAL +DEFAULT +10 bg6
+.* TLS +GLOBAL +DEFAULT +UND sG5
+.* TLS +GLOBAL +DEFAULT +10 bg3
+.* TLS +GLOBAL +DEFAULT +9 sg3
+.* TLS +GLOBAL +HIDDEN +9 sh3
+.* TLS +GLOBAL +DEFAULT +UND sG2
+.* TLS +GLOBAL +DEFAULT +9 sg4
+.* TLS +GLOBAL +DEFAULT +9 sg5
+.* TLS +GLOBAL +DEFAULT +10 bg5
+.* FUNC +GLOBAL +DEFAULT +UND __tls_get_addr
+.* TLS +GLOBAL +HIDDEN +9 sh7
+.* TLS +GLOBAL +HIDDEN +9 sh8
+.* TLS +GLOBAL +DEFAULT +9 sg1
+.* FUNC +GLOBAL +DEFAULT +8 _start
+.* TLS +GLOBAL +HIDDEN +9 sh4
+.* TLS +GLOBAL +DEFAULT +10 bg7
+.* TLS +GLOBAL +HIDDEN +9 sh5
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* TLS +GLOBAL +DEFAULT +UND sG6
+.* FUNC +GLOBAL +DEFAULT +8 fn2
+.* TLS +GLOBAL +DEFAULT +9 sg2
+.* TLS +GLOBAL +DEFAULT +UND sG1
+.* TLS +GLOBAL +HIDDEN +9 sh1
+.* TLS +GLOBAL +DEFAULT +9 sg6
+.* TLS +GLOBAL +DEFAULT +9 sg7
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+.* TLS +GLOBAL +HIDDEN +9 sh2
+.* TLS +GLOBAL +HIDDEN +9 sh6
+.* TLS +GLOBAL +DEFAULT +10 bg2
+.* TLS +GLOBAL +DEFAULT +10 bg1
+.* TLS +GLOBAL +DEFAULT +10 bg4
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsbin.s b/binutils-2.21/ld/testsuite/ld-x86-64/tlsbin.s
new file mode 100644
index 0000000..eb9bfbc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsbin.s
@@ -0,0 +1,97 @@
+ .section ".tbss", "awT", @nobits
+ .globl bg1, bg2, bg3, bg4, bg5, bg6, bg7, bg8
+bg1: .space 4
+bg2: .space 4
+bg3: .space 4
+bg4: .space 4
+bg5: .space 4
+bg6: .space 4
+bg7: .space 4
+bg8: .space 4
+bl1: .space 4
+bl2: .space 4
+bl3: .space 4
+bl4: .space 4
+bl5: .space 4
+bl6: .space 4
+bl7: .space 4
+bl8: .space 4
+ .text
+ .globl _start
+ .type _start,@function
+_start:
+ pushq %rbp
+ movq %rsp, %rbp
+
+ /* IE against global var */
+ movq %fs:0, %r11
+ nop;nop
+ addq sG6@gottpoff(%rip), %r11
+ nop;nop;nop;nop
+
+ /* IE -> LE against global var defined in exec */
+ movq %fs:0, %rdx
+ nop;nop
+ addq bg6@gottpoff(%rip), %rdx
+ nop;nop;nop;nop
+
+ /* IE -> LE against local var */
+ movq %fs:0, %r12
+ nop;nop
+ addq bl6@gottpoff(%rip), %r12
+ nop;nop;nop;nop
+
+ /* direct %fs access IE -> LE against local var */
+ movq bl8@gottpoff(%rip), %rdx
+ nop;nop
+ movq %fs:(%rdx), %rax
+ nop;nop;nop;nop
+
+ /* IE -> LE against hidden but not local var */
+ movq %fs:0, %rdx
+ nop;nop
+ addq sh6@gottpoff(%rip), %rdx
+ nop;nop;nop;nop
+
+ /* direct %fs access IE -> LE against hidden but not local var */
+ movq sh8@gottpoff(%rip), %rdx
+ nop;nop
+ movq %fs:(%rdx), %rax
+ nop;nop;nop;nop
+
+ /* LE, global var defined in exec */
+ movq %fs:0, %rax
+ nop;nop
+ leaq sg2@tpoff(%rax), %rdx
+ nop;nop;nop;nop
+
+ /* LE, local var, non-canonical sequence */
+ movq $2+bl2@tpoff, %r9
+ nop;nop
+ movq %fs:0, %rdx
+ nop;nop
+ addq %r9, %rdx
+ nop;nop;nop;nop
+
+ /* LE, hidden var defined in exec, non-canonical sequence */
+ movq %fs:0, %rdx
+ nop;nop
+ addq $sh2@tpoff+1, %rdx
+ nop;nop;nop;nop
+
+ /* Direct %fs access */
+
+ /* LE, global var defined in exec */
+ movq %fs:sg3@tpoff, %rax
+ nop;nop;nop;nop
+
+ /* LE, local var */
+ movq %fs:bl3@tpoff+3, %r10
+ nop;nop;nop;nop
+
+ /* LE, hidden var defined in exec */
+ movq %fs:1+sh3@tpoff, %rdx
+ nop;nop;nop;nop
+
+ leave
+ ret
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsbin.sd b/binutils-2.21/ld/testsuite/ld-x86-64/tlsbin.sd
new file mode 100644
index 0000000..7fbc565
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsbin.sd
@@ -0,0 +1,12 @@
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as: --64
+#ld: -shared -melf_x86_64
+#objdump: -sj.got
+#target: x86_64-*-*
+
+.*: +file format elf64-x86-64
+
+Contents of section .got:
+ 6013d0 00000000 00000000 00000000 00000000 .*
+ 6013e0 00000000 00000000 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsbin.td b/binutils-2.21/ld/testsuite/ld-x86-64/tlsbin.td
new file mode 100644
index 0000000..b3851de
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsbin.td
@@ -0,0 +1,16 @@
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as: --64
+#ld: -shared -melf_x86_64
+#objdump: -sj.tdata
+#target: x86_64-*-*
+
+.*: +file format elf64-x86-64
+
+Contents of section .tdata:
+ 60122a 11000000 12000000 13000000 14000000 .*
+ 60123a 15000000 16000000 17000000 18000000 .*
+ 60124a 41000000 42000000 43000000 44000000 .*
+ 60125a 45000000 46000000 47000000 48000000 .*
+ 60126a 01010000 02010000 03010000 04010000 .*
+ 60127a 05010000 06010000 07010000 08010000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsbindesc.dd b/binutils-2.21/ld/testsuite/ld-x86-64/tlsbindesc.dd
new file mode 100644
index 0000000..9e82eab
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsbindesc.dd
@@ -0,0 +1,301 @@
+#source: tlsbindesc.s
+#source: tlsbin.s
+#as: --64
+#ld: -shared -melf_x86_64
+#objdump: -drj.text
+#target: x86_64-*-*
+
+# PT_TLS layout is:
+# Offset from Offset from Name
+# TCB base TCB end
+# 0x00 -0xa0 sg1..sg8
+# 0x20 -0x80 sl1..sl8
+# 0x40 -0x60 sh1..sh8
+# 0x60 -0x40 bg1..bg8
+# 0x80 -0x20 bl1..bl8
+
+.*: +file format elf64-x86-64
+
+Disassembly of section .text:
+
+0+401000 <fn2>:
+ [0-9a-f]+: 55[ ]+push %rbp
+ [0-9a-f]+: 48 89 e5[ ]+mov %rsp,%rbp
+# GD -> IE because variable is not defined in executable
+ [0-9a-f]+: 48 8b 05 65 03 20 00[ ]+mov 0x200365\(%rip\),%rax +# 601370 <.*>
+# -> R_X86_64_TPOFF64 sG1
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> IE because variable is not defined in executable where
+# the variable is referenced through IE too
+ [0-9a-f]+: 48 8b 05 48 03 20 00[ ]+mov 0x200348\(%rip\),%rax +# 601360 <.*>
+# -> R_X86_64_TPOFF64 sG2
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> LE with global variable defined in executable
+ [0-9a-f]+: 48 c7 c0 60 ff ff ff[ ]+mov \$0xf+60,%rax
+# sg1
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> LE with local variable defined in executable
+ [0-9a-f]+: 48 c7 c0 80 ff ff ff[ ]+mov \$0xf+80,%rax
+# sl1
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# GD -> LE with hidden variable defined in executable
+ [0-9a-f]+: 48 c7 c0 a0 ff ff ff[ ]+mov \$0xf+a0,%rax
+# sh1
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# LD -> LE
+ [0-9a-f]+: 48 c7 c0 00 00 00 00[ ]+mov \$0x0,%rax
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 48 8d 90 81 ff ff ff[ ]+lea -0x7f\(%rax\),%rdx
+# sl1+1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 4c 8d 88 86 ff ff ff[ ]+lea -0x7a\(%rax\),%r9
+# sl2+2
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# LD -> LE against hidden variables
+ [0-9a-f]+: 48 8d 90 a0 ff ff ff[ ]+lea -0x60\(%rax\),%rdx
+# sh1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 48 8d 88 a7 ff ff ff[ ]+lea -0x59\(%rax\),%rcx
+# sh2+3
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# IE against global var
+ [0-9a-f]+: 64 4c 8b 0c 25 00 00[ ]+mov %fs:0x0,%r9
+ [0-9a-f]+: 00 00 *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 4c 03 0d d6 02 20 00[ ]+add 0x2002d6\(%rip\),%r9 +# 601360 <.*>
+# -> R_X86_64_TPOFF64 sG2
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# IE -> LE against global var defined in exec
+ [0-9a-f]+: 64 4c 8b 14 25 00 00[ ]+mov %fs:0x0,%r10
+ [0-9a-f]+: 00 00 *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 4d 8d 92 60 ff ff ff[ ]+lea -0xa0\(%r10\),%r10
+# sg1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# IE -> LE against local var
+ [0-9a-f]+: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
+ [0-9a-f]+: 00 00 *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 48 8d 80 80 ff ff ff[ ]+lea -0x80\(%rax\),%rax
+# sl1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# IE -> LE against hidden var
+ [0-9a-f]+: 64 48 8b 0c 25 00 00[ ]+mov %fs:0x0,%rcx
+ [0-9a-f]+: 00 00 *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 48 8d 89 a0 ff ff ff[ ]+lea -0x60\(%rcx\),%rcx
+# sh1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# Direct access through %fs
+# IE against global var
+ [0-9a-f]+: 48 8b 0d 81 02 20 00[ ]+mov 0x200281\(%rip\),%rcx +# 601358 <.*>
+# -> R_X86_64_TPOFF64 sG5
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 64 48 8b 11[ ]+mov %fs:\(%rcx\),%rdx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# IE->LE against local var
+ [0-9a-f]+: 49 c7 c3 90 ff ff ff[ ]+mov \$0xf+90,%r11
+# sl5
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 64 4d 8b 23[ ]+mov %fs:\(%r11\),%r12
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# IE->LE against hidden var
+ [0-9a-f]+: 48 c7 c2 b0 ff ff ff[ ]+mov \$0xf+b0,%rdx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 64 48 8b 12[ ]+mov %fs:\(%rdx\),%rdx
+# sh5
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: c9[ ]+leaveq *
+ [0-9a-f]+: c3[ ]+retq *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+
+[0-9a-f]+ <_start>:
+ [0-9a-f]+: 55[ ]+push %rbp
+ [0-9a-f]+: 48 89 e5[ ]+mov %rsp,%rbp
+# IE against global var
+ [0-9a-f]+: 64 4c 8b 1c 25 00 00[ ]+mov %fs:0x0,%r11
+ [0-9a-f]+: 00 00 *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 4c 03 1d 4a 02 20 00[ ]+add 0x20024a\(%rip\),%r11 +# 601368 <.*>
+# -> R_X86_64_TPOFF64 sG6
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# IE -> LE against global var defined in exec
+ [0-9a-f]+: 64 48 8b 14 25 00 00[ ]+mov %fs:0x0,%rdx
+ [0-9a-f]+: 00 00 *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 48 8d 92 d4 ff ff ff[ ]+lea -0x2c\(%rdx\),%rdx
+# bg6
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# IE -> LE against local var
+ [0-9a-f]+: 64 4c 8b 24 25 00 00[ ]+mov %fs:0x0,%r12
+ [0-9a-f]+: 00 00 *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 49 81 c4 f4 ff ff ff[ ]+add \$0xf+f4,%r12
+# bl6
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# direct %fs access IE -> LE against local var
+ [0-9a-f]+: 48 c7 c2 fc ff ff ff[ ]+mov \$0xf+fc,%rdx
+# bl8
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 64 48 8b 02[ ]+mov %fs:\(%rdx\),%rax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# IE -> LE against hidden but not local var
+ [0-9a-f]+: 64 48 8b 14 25 00 00[ ]+mov %fs:0x0,%rdx
+ [0-9a-f]+: 00 00 *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 48 8d 92 b4 ff ff ff[ ]+lea -0x4c\(%rdx\),%rdx
+# sh6
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# direct %fs access IE -> LE against hidden but not local var
+ [0-9a-f]+: 48 c7 c2 bc ff ff ff[ ]+mov \$0xf+bc,%rdx
+# sh8
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 64 48 8b 02[ ]+mov %fs:\(%rdx\),%rax
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# LE, global var defined in exec
+ [0-9a-f]+: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
+ [0-9a-f]+: 00 00 *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 48 8d 90 64 ff ff ff[ ]+lea -0x9c\(%rax\),%rdx
+# sg2
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# LE, local var, non-canonical sequence
+ [0-9a-f]+: 49 c7 c1 e6 ff ff ff[ ]+mov \$0xf+e6,%r9
+# bl2+2
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 64 48 8b 14 25 00 00[ ]+mov %fs:0x0,%rdx
+ [0-9a-f]+: 00 00 *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 4c 01 ca[ ]+add %r9,%rdx
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# LE, hidden var defined in exec, non-canonical sequence
+ [0-9a-f]+: 64 48 8b 14 25 00 00[ ]+mov %fs:0x0,%rdx
+ [0-9a-f]+: 00 00 *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 48 81 c2 a5 ff ff ff[ ]+add \$0xf+a5,%rdx
+# sh2+1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# Direct %fs access
+# LE, global var defined in exec
+ [0-9a-f]+: 64 48 8b 04 25 68 ff[ ]+mov %fs:0xf+68,%rax
+ [0-9a-f]+: ff ff *
+# sg3
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# LE, local var
+ [0-9a-f]+: 64 4c 8b 14 25 eb ff[ ]+mov %fs:0xf+eb,%r10
+ [0-9a-f]+: ff ff *
+# bl3+3
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+# LE, hidden var defined in exec
+ [0-9a-f]+: 64 48 8b 14 25 a9 ff[ ]+mov %fs:0xf+a9,%rdx
+ [0-9a-f]+: ff ff *
+# sh3+1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: c9[ ]+leaveq *
+ [0-9a-f]+: c3[ ]+retq *
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsbindesc.rd b/binutils-2.21/ld/testsuite/ld-x86-64/tlsbindesc.rd
new file mode 100644
index 0000000..7e94022
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsbindesc.rd
@@ -0,0 +1,138 @@
+#source: tlsbindesc.s
+#source: tlsbin.s
+#as: --64
+#ld: -shared -melf_x86_64
+#readelf: -WSsrl
+#target: x86_64-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 00 +0 +0 +0
+ +\[[ 0-9]+\] .interp +.*
+ +\[[ 0-9]+\] .hash +.*
+ +\[[ 0-9]+\] .dynsym +.*
+ +\[[ 0-9]+\] .dynstr +.*
+ +\[[ 0-9]+\] .rela.dyn +.*
+ +\[[ 0-9]+\] .text +PROGBITS +0+401000 0+1000 0+1f6 00 +AX +0 +0 +4096
+ +\[[ 0-9]+\] .tdata +PROGBITS +0+6011f6 0+11f6 0+60 00 WAT +0 +0 +1
+ +\[[ 0-9]+\] .tbss +NOBITS +0+601256 0+1256 0+40 00 WAT +0 +0 +1
+ +\[[ 0-9]+\] .dynamic +DYNAMIC +0+601258 0+1258 0+100 10 +WA +4 +0 +8
+ +\[[ 0-9]+\] .got +PROGBITS +0+601358 0+1358 0+20 08 +WA +0 +0 +8
+ +\[[ 0-9]+\] .got.plt +PROGBITS +0+601378 0+1378 0+18 08 +WA +0 +0 +8
+ +\[[ 0-9]+\] .shstrtab +.*
+ +\[[ 0-9]+\] .symtab +.*
+ +\[[ 0-9]+\] .strtab +.*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x401108
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +PHDR.*
+ +INTERP.*
+.*Requesting program interpreter.*
+ +LOAD +0x0+ 0x0+400000 0x0+400000 0x0+11f6 0x0+11f6 R E 0x200000
+ +LOAD +0x0+11f6 0x0+6011f6 0x0+6011f6 0x0+19a 0x0+19a RW +0x200000
+ +DYNAMIC +0x0+1258 0x0+601258 0x0+601258 0x0+100 0x0+100 RW +0x8
+ +TLS +0x0+11f6 0x0+6011f6 0x0+6011f6 0x0+60 0x0+a0 R +0x1
+
+ Section to Segment mapping:
+ +Segment Sections...
+ +00 *
+ +01 +.interp *
+ +02 +.interp .hash .dynsym .dynstr .rela.dyn .text *
+ +03 +.tdata .dynamic .got .got.plt *
+ +04 +.dynamic *
+ +05 +.tdata .tbss *
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 4 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+0+601358 +0+100000012 R_X86_64_TPOFF64 +0+ sG5 \+ 0
+0+601360 +0+200000012 R_X86_64_TPOFF64 +0+ sG2 \+ 0
+0+601368 +0+400000012 R_X86_64_TPOFF64 +0+ sG6 \+ 0
+0+601370 +0+500000012 R_X86_64_TPOFF64 +0+ sG1 \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +[0-9]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND *
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG5
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG2
+ +[0-9]+: 0+[0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG6
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG1
+ +[0-9]+: 0+[0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +[0-9]+: 0+[0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +[0-9]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +1 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +2 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +3 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +4 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +5 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +6 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +7 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +8 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +9 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +10 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +11 *
+ +[0-9]+: 0+20 +0 +TLS +LOCAL +DEFAULT +7 sl1
+ +[0-9]+: 0+24 +0 +TLS +LOCAL +DEFAULT +7 sl2
+ +[0-9]+: 0+28 +0 +TLS +LOCAL +DEFAULT +7 sl3
+ +[0-9]+: 0+2c +0 +TLS +LOCAL +DEFAULT +7 sl4
+ +[0-9]+: 0+30 +0 +TLS +LOCAL +DEFAULT +7 sl5
+ +[0-9]+: 0+34 +0 +TLS +LOCAL +DEFAULT +7 sl6
+ +[0-9]+: 0+38 +0 +TLS +LOCAL +DEFAULT +7 sl7
+ +[0-9]+: 0+3c +0 +TLS +LOCAL +DEFAULT +7 sl8
+ +[0-9]+: 0+80 +0 +TLS +LOCAL +DEFAULT +8 bl1
+ +[0-9]+: 0+84 +0 +TLS +LOCAL +DEFAULT +8 bl2
+ +[0-9]+: 0+88 +0 +TLS +LOCAL +DEFAULT +8 bl3
+ +[0-9]+: 0+8c +0 +TLS +LOCAL +DEFAULT +8 bl4
+ +[0-9]+: 0+90 +0 +TLS +LOCAL +DEFAULT +8 bl5
+ +[0-9]+: 0+94 +0 +TLS +LOCAL +DEFAULT +8 bl6
+ +[0-9]+: 0+98 +0 +TLS +LOCAL +DEFAULT +8 bl7
+ +[0-9]+: 0+9c +0 +TLS +LOCAL +DEFAULT +8 bl8
+ +[0-9]+: 0+a0 +0 +TLS +LOCAL +DEFAULT +7 _TLS_MODULE_BASE_
+ +[0-9]+: 0+601258 +0 +OBJECT +LOCAL +DEFAULT +9 _DYNAMIC
+ +[0-9]+: 0+601378 +0 +OBJECT +LOCAL +DEFAULT +11 _GLOBAL_OFFSET_TABLE_
+ +[0-9]+: 0+1c +0 +TLS +GLOBAL +DEFAULT +7 sg8
+ +[0-9]+: 0+7c +0 +TLS +GLOBAL +DEFAULT +8 bg8
+ +[0-9]+: 0+74 +0 +TLS +GLOBAL +DEFAULT +8 bg6
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG5
+ +[0-9]+: 0+68 +0 +TLS +GLOBAL +DEFAULT +8 bg3
+ +[0-9]+: 0+8 +0 +TLS +GLOBAL +DEFAULT +7 sg3
+ +[0-9]+: 0+48 +0 +TLS +GLOBAL +HIDDEN +7 sh3
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG2
+ +[0-9]+: 0+c +0 +TLS +GLOBAL +DEFAULT +7 sg4
+ +[0-9]+: 0+10 +0 +TLS +GLOBAL +DEFAULT +7 sg5
+ +[0-9]+: 0+70 +0 +TLS +GLOBAL +DEFAULT +8 bg5
+ +[0-9]+: 0+58 +0 +TLS +GLOBAL +HIDDEN +7 sh7
+ +[0-9]+: 0+5c +0 +TLS +GLOBAL +HIDDEN +7 sh8
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +7 sg1
+ +[0-9]+: 0+401108 +0 +FUNC +GLOBAL +DEFAULT +6 _start
+ +[0-9]+: 0+4c +0 +TLS +GLOBAL +HIDDEN +7 sh4
+ +[0-9]+: 0+78 +0 +TLS +GLOBAL +DEFAULT +8 bg7
+ +[0-9]+: 0+50 +0 +TLS +GLOBAL +HIDDEN +7 sh5
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG6
+ +[0-9]+: 0+401000 +0 +FUNC +GLOBAL +DEFAULT +6 fn2
+ +[0-9]+: 0+4 +0 +TLS +GLOBAL +DEFAULT +7 sg2
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG1
+ +[0-9]+: 0+40 +0 +TLS +GLOBAL +HIDDEN +7 sh1
+ +[0-9]+: 0+14 +0 +TLS +GLOBAL +DEFAULT +7 sg6
+ +[0-9]+: 0+18 +0 +TLS +GLOBAL +DEFAULT +7 sg7
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+ +[0-9]+: 0+44 +0 +TLS +GLOBAL +HIDDEN +7 sh2
+ +[0-9]+: 0+54 +0 +TLS +GLOBAL +HIDDEN +7 sh6
+ +[0-9]+: 0+64 +0 +TLS +GLOBAL +DEFAULT +8 bg2
+ +[0-9]+: 0+60 +0 +TLS +GLOBAL +DEFAULT +8 bg1
+ +[0-9]+: 0+6c +0 +TLS +GLOBAL +DEFAULT +8 bg4
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsbindesc.s b/binutils-2.21/ld/testsuite/ld-x86-64/tlsbindesc.s
new file mode 100644
index 0000000..cbebf02
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsbindesc.s
@@ -0,0 +1,128 @@
+ /* Force .data aligned to 4K, so that .got very likely gets at
+ 0x5021a0 (0x60 bytes .tdata and 0x140 bytes .dynamic) */
+ .data
+ .balign 4096
+ .section ".tdata", "awT", @progbits
+ .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
+ .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+ .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+sg1: .long 17
+sg2: .long 18
+sg3: .long 19
+sg4: .long 20
+sg5: .long 21
+sg6: .long 22
+sg7: .long 23
+sg8: .long 24
+sl1: .long 65
+sl2: .long 66
+sl3: .long 67
+sl4: .long 68
+sl5: .long 69
+sl6: .long 70
+sl7: .long 71
+sl8: .long 72
+sh1: .long 257
+sh2: .long 258
+sh3: .long 259
+sh4: .long 260
+sh5: .long 261
+sh6: .long 262
+sh7: .long 263
+sh8: .long 264
+ /* Force .text aligned to 4K, so it very likely gets at 0x401000. */
+ .text
+ .balign 4096
+ .globl fn2
+ .type fn2,@function
+fn2:
+ pushq %rbp
+ movq %rsp, %rbp
+
+ /* GD -> IE because variable is not defined in executable */
+ leaq sG1@tlsdesc(%rip), %rax
+ call *sG1@tlscall(%rax)
+ nop;nop;nop;nop
+
+ /* GD -> IE because variable is not defined in executable where
+ the variable is referenced through IE too */
+ leaq sG2@tlsdesc(%rip), %rax
+ call *sG2@tlscall(%rax)
+ nop;nop;nop;nop
+
+ /* GD -> LE with global variable defined in executable */
+ leaq sg1@tlsdesc(%rip), %rax
+ call *sg1@tlscall(%rax)
+ nop;nop;nop;nop
+
+ /* GD -> LE with local variable defined in executable */
+ leaq sl1@tlsdesc(%rip), %rax
+ call *sl1@tlscall(%rax)
+ nop;nop;nop;nop
+
+ /* GD -> LE with hidden variable defined in executable */
+ leaq sh1@tlsdesc(%rip), %rax
+ call *sh1@tlscall(%rax)
+ nop;nop;nop;nop
+
+ /* LD -> LE */
+ leaq _TLS_MODULE_BASE_@tlsdesc(%rip), %rax
+ call *_TLS_MODULE_BASE_@tlscall(%rax)
+ nop;nop
+ leaq 1+sl1@dtpoff(%rax), %rdx
+ nop;nop
+ leaq sl2@dtpoff+2(%rax), %r9
+ nop;nop;nop;nop
+
+ /* LD -> LE against hidden variables */
+ leaq sh1@dtpoff(%rax), %rdx
+ nop;nop
+ leaq 3+sh2@dtpoff(%rax), %rcx
+ nop;nop;nop;nop
+
+ /* IE against global var */
+ movq %fs:0, %r9
+ nop;nop
+ addq sG2@gottpoff(%rip), %r9
+ nop;nop;nop;nop
+
+ /* IE -> LE against global var defined in exec */
+ movq %fs:0, %r10
+ nop;nop
+ addq sg1@gottpoff(%rip), %r10
+ nop;nop;nop;nop
+
+ /* IE -> LE against local var */
+ movq %fs:0, %rax
+ nop;nop
+ addq sl1@gottpoff(%rip), %rax
+ nop;nop;nop;nop
+
+ /* IE -> LE against hidden var */
+ movq %fs:0, %rcx
+ nop;nop
+ addq sh1@gottpoff(%rip), %rcx
+ nop;nop;nop;nop
+
+ /* Direct access through %fs */
+
+ /* IE against global var */
+ movq sG5@gottpoff(%rip), %rcx
+ nop;nop
+ movq %fs:(%rcx), %rdx
+ nop;nop;nop;nop
+
+ /* IE->LE against local var */
+ movq sl5@gottpoff(%rip), %r11
+ nop;nop
+ movq %fs:(%r11), %r12
+ nop;nop;nop;nop
+
+ /* IE->LE against hidden var */
+ movq sh5@gottpoff(%rip), %rdx
+ nop;nop
+ movq %fs:(%rdx), %rdx
+ nop;nop;nop;nop
+
+ leave
+ ret
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsbindesc.sd b/binutils-2.21/ld/testsuite/ld-x86-64/tlsbindesc.sd
new file mode 100644
index 0000000..f622bc4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsbindesc.sd
@@ -0,0 +1,12 @@
+#source: tlsbindesc.s
+#source: tlsbin.s
+#as: --64
+#ld: -shared -melf_x86_64
+#objdump: -sj.got
+#target: x86_64-*-*
+
+.*: +file format elf64-x86-64
+
+Contents of section .got:
+ 601358 00000000 00000000 00000000 00000000 .*
+ 601368 00000000 00000000 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsbindesc.td b/binutils-2.21/ld/testsuite/ld-x86-64/tlsbindesc.td
new file mode 100644
index 0000000..b2a3ebe
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsbindesc.td
@@ -0,0 +1,16 @@
+#source: tlsbindesc.s
+#source: tlsbin.s
+#as: --64
+#ld: -shared -melf_x86_64
+#objdump: -sj.tdata
+#target: x86_64-*-*
+
+.*: +file format elf64-x86-64
+
+Contents of section .tdata:
+ 6011f6 11000000 12000000 13000000 14000000 .*
+ 601206 15000000 16000000 17000000 18000000 .*
+ 601216 41000000 42000000 43000000 44000000 .*
+ 601226 45000000 46000000 47000000 48000000 .*
+ 601236 01010000 02010000 03010000 04010000 .*
+ 601246 05010000 06010000 07010000 08010000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsbinpic.s b/binutils-2.21/ld/testsuite/ld-x86-64/tlsbinpic.s
new file mode 100644
index 0000000..2819a8f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsbinpic.s
@@ -0,0 +1,146 @@
+ /* Force .data aligned to 4K, so that .got very likely gets at
+ 0x5021a0 (0x60 bytes .tdata and 0x140 bytes .dynamic) */
+ .data
+ .balign 4096
+ .section ".tdata", "awT", @progbits
+ .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
+ .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+ .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+sg1: .long 17
+sg2: .long 18
+sg3: .long 19
+sg4: .long 20
+sg5: .long 21
+sg6: .long 22
+sg7: .long 23
+sg8: .long 24
+sl1: .long 65
+sl2: .long 66
+sl3: .long 67
+sl4: .long 68
+sl5: .long 69
+sl6: .long 70
+sl7: .long 71
+sl8: .long 72
+sh1: .long 257
+sh2: .long 258
+sh3: .long 259
+sh4: .long 260
+sh5: .long 261
+sh6: .long 262
+sh7: .long 263
+sh8: .long 264
+ /* Force .text aligned to 4K, so it very likely gets at 0x401000. */
+ .text
+ .balign 4096
+ .globl fn2
+ .type fn2,@function
+fn2:
+ pushq %rbp
+ movq %rsp, %rbp
+
+ /* GD -> IE because variable is not defined in executable */
+ .byte 0x66
+ leaq sG1@tlsgd(%rip), %rdi
+ .word 0x6666
+ rex64
+ call __tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> IE because variable is not defined in executable where
+ the variable is referenced through IE too */
+ .byte 0x66
+ leaq sG2@tlsgd(%rip), %rdi
+ .word 0x6666
+ rex64
+ call __tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> LE with global variable defined in executable */
+ .byte 0x66
+ leaq sg1@tlsgd(%rip), %rdi
+ .word 0x6666
+ rex64
+ call __tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> LE with local variable defined in executable */
+ .byte 0x66
+ leaq sl1@tlsgd(%rip), %rdi
+ .word 0x6666
+ rex64
+ call __tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> LE with hidden variable defined in executable */
+ .byte 0x66
+ leaq sh1@tlsgd(%rip), %rdi
+ .word 0x6666
+ rex64
+ call __tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* LD -> LE */
+ leaq sl1@tlsld(%rip), %rdi
+ call __tls_get_addr@plt
+ nop;nop
+ leaq 1+sl1@dtpoff(%rax), %rdx
+ nop;nop
+ leaq sl2@dtpoff+2(%rax), %r9
+ nop;nop;nop;nop
+
+ /* LD -> LE against hidden variables */
+ leaq sh1@tlsld(%rip), %rdi
+ call __tls_get_addr@plt
+ nop;nop
+ leaq sh1@dtpoff(%rax), %rdx
+ nop;nop
+ leaq 3+sh2@dtpoff(%rax), %rcx
+ nop;nop;nop;nop
+
+ /* IE against global var */
+ movq %fs:0, %r9
+ nop;nop
+ addq sG2@gottpoff(%rip), %r9
+ nop;nop;nop;nop
+
+ /* IE -> LE against global var defined in exec */
+ movq %fs:0, %r10
+ nop;nop
+ addq sg1@gottpoff(%rip), %r10
+ nop;nop;nop;nop
+
+ /* IE -> LE against local var */
+ movq %fs:0, %rax
+ nop;nop
+ addq sl1@gottpoff(%rip), %rax
+ nop;nop;nop;nop
+
+ /* IE -> LE against hidden var */
+ movq %fs:0, %rcx
+ nop;nop
+ addq sh1@gottpoff(%rip), %rcx
+ nop;nop;nop;nop
+
+ /* Direct access through %fs */
+
+ /* IE against global var */
+ movq sG5@gottpoff(%rip), %rcx
+ nop;nop
+ movq %fs:(%rcx), %rdx
+ nop;nop;nop;nop
+
+ /* IE->LE against local var */
+ movq sl5@gottpoff(%rip), %r11
+ nop;nop
+ movq %fs:(%r11), %r12
+ nop;nop;nop;nop
+
+ /* IE->LE against hidden var */
+ movq sh5@gottpoff(%rip), %rdx
+ nop;nop
+ movq %fs:(%rdx), %rdx
+ nop;nop;nop;nop
+
+ leave
+ ret
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsdesc.dd b/binutils-2.21/ld/testsuite/ld-x86-64/tlsdesc.dd
new file mode 100644
index 0000000..9b0ae61
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsdesc.dd
@@ -0,0 +1,200 @@
+#source: tlsdesc.s
+#source: tlspic2.s
+#as: --64
+#ld: -shared -melf_x86_64
+#objdump: -drj.text
+#target: x86_64-*-*
+
+.*: +file format elf64-x86-64
+
+Disassembly of section .text:
+
+0+[0-9a-f]+ <fn1>:
+ +[0-9a-f]+: 55[ ]+push %rbp
+ +[0-9a-f]+: 48 89 e5[ ]+mov %rsp,%rbp
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# GD
+ +[0-9a-f]+: 48 8d 05 89 03 20 00[ ]+lea 0x200389\(%rip\),%rax +# 201398 <.*>
+# -> R_X86_64_TLSDESC sg1
+ +[0-9a-f]+: ff 10[ ]+callq \*\(%rax\)
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# GD -> IE because variable is referenced through IE too
+ +[0-9a-f]+: 48 8b 05 1c 03 20 00[ ]+mov 0x20031c\(%rip\),%rax +# 201338 <.*>
+# -> R_X86_64_TPOFF64 sg2
+ +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# GD against local variable
+ +[0-9a-f]+: 48 8d 05 3f 03 20 00[ ]+lea 0x20033f\(%rip\),%rax +# 201368 <.*>
+# -> R_X86_64_TLSDESC [0 0x2000000000000000]
+ +[0-9a-f]+: ff 10[ ]+callq \*\(%rax\)
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# GD -> IE against local variable referenced through IE too
+ +[0-9a-f]+: 48 8b 05 d2 02 20 00[ ]+mov 0x2002d2\(%rip\),%rax +# 201308 <.*>
+# -> R_X86_64_TPOFF64 *ABS*+0x24
+ +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# GD against hidden and local variable
+ +[0-9a-f]+: 48 8d 05 65 03 20 00[ ]+lea 0x200365\(%rip\),%rax +# 2013a8 <.*>
+# -> R_X86_64_TLSDESC [0 0x4000000000000000]
+ +[0-9a-f]+: ff 10[ ]+callq \*\(%rax\)
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# GD -> IE against hidden and local variable referenced through IE too
+ +[0-9a-f]+: 48 8b 05 f0 02 20 00[ ]+mov 0x2002f0\(%rip\),%rax +# 201340 <.*>
+# -> R_X86_64_TPOFF64 *ABS*+0x44
+ +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# GD against hidden but not local variable
+ +[0-9a-f]+: 48 8d 05 1b 03 20 00[ ]+lea 0x20031b\(%rip\),%rax +# 201378 <.*>
+# -> R_X86_64_TLSDESC [0 0x6000000000000000]
+ +[0-9a-f]+: ff 10[ ]+callq \*\(%rax\)
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# GD -> IE against hidden but not local variable referenced through IE too
+ +[0-9a-f]+: 48 8b 05 ae 02 20 00[ ]+mov 0x2002ae\(%rip\),%rax +# 201318 <.*>
+# -> R_X86_64_TPOFF64 *ABS*+0x64
+ +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# LD
+ +[0-9a-f]+: 48 8d 05 11 03 20 00[ ]+lea 0x200311\(%rip\),%rax +# 201388 <.*>
+# -> R_X86_64_TLSDESC [0 0x000000000000000]
+ +[0-9a-f]+: ff 10[ ]+callq \*\(%rax\)
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 48 8d 90 20 00 00 00[ ]+lea 0x20\(%rax\),%rdx
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 4c 8d 88 26 00 00 00[ ]+lea 0x26\(%rax\),%r9
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# LD against hidden and local variables
+ +[0-9a-f]+: 48 8d 90 40 00 00 00[ ]+lea 0x40\(%rax\),%rdx
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 48 8d 88 47 00 00 00[ ]+lea 0x47\(%rax\),%rcx
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# LD against hidden but not local variables
+ +[0-9a-f]+: 4c 8d a0 60 00 00 00[ ]+lea 0x60\(%rax\),%r12
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 48 8d 88 65 00 00 00[ ]+lea 0x65\(%rax\),%rcx
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# IE against global var
+ +[0-9a-f]+: 64 48 8b 0c 25 00 00[ ]+mov %fs:0x0,%rcx
+ +[0-9a-f]+: 00 00 *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 48 03 0d 71 02 20 00[ ]+add 0x200271\(%rip\),%rcx +# 201338 <.*>
+# -> R_X86_64_TPOFF64 sg2
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# IE against local var
+ +[0-9a-f]+: 64 4c 8b 34 25 00 00[ ]+mov %fs:0x0,%r14
+ +[0-9a-f]+: 00 00 *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 4c 03 35 2b 02 20 00[ ]+add 0x20022b\(%rip\),%r14 +# 201308 <.*>
+# -> R_X86_64_TPOFF64 *ABS*+0x24
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# IE against hidden and local var
+ +[0-9a-f]+: 64 48 8b 0c 25 00 00[ ]+mov %fs:0x0,%rcx
+ +[0-9a-f]+: 00 00 *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 48 03 0d 4d 02 20 00[ ]+add 0x20024d\(%rip\),%rcx +# 201340 <.*>
+# -> R_X86_64_TPOFF64 *ABS*+0x44
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# IE against hidden but not local var
+ +[0-9a-f]+: 64 48 8b 0c 25 00 00[ ]+mov %fs:0x0,%rcx
+ +[0-9a-f]+: 00 00 *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 48 03 0d 0f 02 20 00[ ]+add 0x20020f\(%rip\),%rcx +# 201318 <.*>
+# -> R_X86_64_TPOFF64 *ABS*+0x64
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# Direct access through %fs
+# IE against global var
+ +[0-9a-f]+: 48 8b 0d 0c 02 20 00[ ]+mov 0x20020c\(%rip\),%rcx +# 201320 <.*>
+# -> R_X86_64_TPOFF64 sg5
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 64 48 8b 11[ ]+mov %fs:\(%rcx\),%rdx
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# IE against local var
+ +[0-9a-f]+: 4c 8b 15 eb 01 20 00[ ]+mov 0x2001eb\(%rip\),%r10 +# 201310 <.*>
+# -> R_X86_64_TPOFF64 *ABS*+0x30
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 64 4d 8b 22[ ]+mov %fs:\(%r10\),%r12
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# IE against hidden and local var
+ +[0-9a-f]+: 48 8b 15 f2 01 20 00[ ]+mov 0x2001f2\(%rip\),%rdx +# 201328 <.*>
+# -> R_X86_64_TPOFF64 *ABS*+0x50
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 64 48 8b 12[ ]+mov %fs:\(%rdx\),%rdx
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# IE against hidden but not local var
+ +[0-9a-f]+: 48 8b 0d e9 01 20 00[ ]+mov 0x2001e9\(%rip\),%rcx +# 201330 <.*>
+# -> R_X86_64_TPOFF64 *ABS*+0x70
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 64 48 8b 11[ ]+mov %fs:\(%rcx\),%rdx
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: c9[ ]+leaveq *
+ +[0-9a-f]+: c3[ ]+retq *
+ +[0-9a-f]+: 90[ ]+nop *
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsdesc.pd b/binutils-2.21/ld/testsuite/ld-x86-64/tlsdesc.pd
new file mode 100644
index 0000000..bf3bc2f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsdesc.pd
@@ -0,0 +1,20 @@
+#source: tlsdesc.s
+#source: tlspic2.s
+#as: --64
+#ld: -shared -melf_x86_64
+#objdump: -drj.plt
+#target: x86_64-*-*
+
+.*: +file format elf64-x86-64
+
+Disassembly of section .plt:
+
+[0-9a-f]+ <.*@plt-0x10>:
+ [0-9a-f]+: ff 35 .. .. 20 00 pushq .*\(%rip\) # 201358 <_GLOBAL_OFFSET_TABLE_\+0x8>
+ [0-9a-f]+: ff 25 .. .. 20 00 jmpq \*.*\(%rip\) # 201360 <_GLOBAL_OFFSET_TABLE_\+0x10>
+ [0-9a-f]+: 0f 1f 40 00 nopl 0x0\(%rax\)
+[0-9a-f]+ <.*@plt>:
+ [0-9a-f]+: ff 35 .. .. 20 00 pushq .*\(%rip\) # 201358 <_GLOBAL_OFFSET_TABLE_\+0x8>
+ [0-9a-f]+: ff 25 .. .. 20 00 jmpq \*.*\(%rip\) # 201348 <_DYNAMIC\+0x190>
+ [0-9a-f]+: 0f 1f 40 00 nopl 0x0\(%rax\)
+
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsdesc.rd b/binutils-2.21/ld/testsuite/ld-x86-64/tlsdesc.rd
new file mode 100644
index 0000000..662b639
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsdesc.rd
@@ -0,0 +1,160 @@
+#source: tlsdesc.s
+#source: tlspic2.s
+#as: --64
+#ld: -shared -melf_x86_64
+#readelf: -WSsrld
+#target: x86_64-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 00 +0 +0 +0
+ +\[[ 0-9]+\] .hash +.*
+ +\[[ 0-9]+\] .dynsym +.*
+ +\[[ 0-9]+\] .dynstr +.*
+ +\[[ 0-9]+\] .rela.dyn +.*
+ +\[[ 0-9]+\] .rela.plt +.*
+ +\[[ 0-9]+\] .plt +PROGBITS +0+450 0+450 0+20 10 +AX +0 +0 +4
+ +\[[ 0-9]+\] .text +PROGBITS +0+1000 0+1000 0+154 00 +AX +0 +0 4096
+ +\[[ 0-9]+\] .tdata +PROGBITS +0+201154 0+1154 0+60 00 WAT +0 +0 +1
+ +\[[ 0-9]+\] .tbss +NOBITS +0+2011b4 0+11b4 0+20 00 WAT +0 +0 +1
+ +\[[ 0-9]+\] .dynamic +DYNAMIC +0+2011b8 0+11b8 0+150 10 +WA +3 +0 +8
+ +\[[ 0-9]+\] .got +PROGBITS +0+201308 0+1308 0+48 08 +WA +0 +0 +8
+ +\[[ 0-9]+\] .got.plt +PROGBITS +0+201350 0+1350 0+68 08 +WA +0 +0 +8
+ +\[[ 0-9]+\] .shstrtab +.*
+ +\[[ 0-9]+\] .symtab +.*
+ +\[[ 0-9]+\] .strtab +.*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x1000
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +LOAD +0x0+ 0x0+ 0x0+ 0x[0-9a-f]+ 0x[0-9a-f]+ R E 0x200000
+ +LOAD +0x0+1154 0x0+201154 0x0+201154 0x0+264 0x0+264 RW +0x200000
+ +DYNAMIC +0x0+11b8 0x0+2011b8 0x0+2011b8 0x0+150 0x0+150 RW +0x8
+ +TLS +0x0+1154 0x0+201154 0x0+201154 0x0+60 0x0+80 R +0x1
+
+ Section to Segment mapping:
+ +Segment Sections...
+ +00 +.hash .dynsym .dynstr .rela.dyn .rela.plt .plt .text *
+ +01 +.tdata .dynamic .got .got.plt *
+ +02 +.dynamic *
+ +03 +.tdata .tbss *
+
+Dynamic section at offset 0x[0-9a-f]+ contains 16 entries:
+ +Tag +Type +Name/Value
+ 0x[0-9a-f]+ +\(HASH\).*
+ 0x[0-9a-f]+ +\(STRTAB\).*
+ 0x[0-9a-f]+ +\(SYMTAB\).*
+ 0x[0-9a-f]+ +\(STRSZ\).*
+ 0x[0-9a-f]+ +\(SYMENT\).*
+ 0x[0-9a-f]+ +\(PLTGOT\).*
+ 0x[0-9a-f]+ +\(PLTRELSZ\).*
+ 0x[0-9a-f]+ +\(PLTREL\).*
+ 0x[0-9a-f]+ +\(JMPREL\).*
+ 0x[0-9a-f]+ +\(TLSDESC_PLT\) +0x460
+ 0x[0-9a-f]+ +\(TLSDESC_GOT\) +0x201348
+ 0x[0-9a-f]+ +\(RELA\).*
+ 0x[0-9a-f]+ +\(RELASZ\).*
+ 0x[0-9a-f]+ +\(RELAENT\).*
+ 0x[0-9a-f]+ +\(FLAGS\).*
+ 0x[0-9a-f]+ +\(NULL\).*
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 8 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+0+201308 +[0-9a-f]+ R_X86_64_TPOFF64 +0+24
+0+201310 +[0-9a-f]+ R_X86_64_TPOFF64 +0+30
+0+201318 +[0-9a-f]+ R_X86_64_TPOFF64 +0+64
+0+201328 +[0-9a-f]+ R_X86_64_TPOFF64 +0+50
+0+201330 +[0-9a-f]+ R_X86_64_TPOFF64 +0+70
+0+201340 +[0-9a-f]+ R_X86_64_TPOFF64 +0+44
+0+201320 +[0-9a-f]+ R_X86_64_TPOFF64 +0+10 sg5 \+ 0
+0+201338 +[0-9a-f]+ R_X86_64_TPOFF64 +0+4 sg2 \+ 0
+
+Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 5 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+0+201398 +[0-9a-f]+ R_X86_64_TLSDESC +0+ sg1 \+ 0
+0+201368 +[0-9a-f]+ R_X86_64_TLSDESC +0+20
+0+2013a8 +[0-9a-f]+ R_X86_64_TLSDESC +0+40
+0+201378 +[0-9a-f]+ R_X86_64_TLSDESC +0+60
+0+201388 +[0-9a-f]+ R_X86_64_TLSDESC +0+
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +[0-9]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +7 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +8 *
+ +[0-9]+: 0+1c +0 +TLS +GLOBAL +DEFAULT +8 sg8
+ +[0-9]+: 0+8 +0 +TLS +GLOBAL +DEFAULT +8 sg3
+ +[0-9]+: 0+c +0 +TLS +GLOBAL +DEFAULT +8 sg4
+ +[0-9]+: 0+10 +0 +TLS +GLOBAL +DEFAULT +8 sg5
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +8 sg1
+ +[0-9]+: 0+1000 +0 +FUNC +GLOBAL +DEFAULT +7 fn1
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +[0-9]+: 0+4 +0 +TLS +GLOBAL +DEFAULT +8 sg2
+ +[0-9]+: 0+14 +0 +TLS +GLOBAL +DEFAULT +8 sg6
+ +[0-9]+: 0+18 +0 +TLS +GLOBAL +DEFAULT +8 sg7
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +[0-9]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +1 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +2 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +3 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +4 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +5 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +6 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +7 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +8 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +9 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +10 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +11 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +12 *
+ +[0-9]+: 0+20 +0 +TLS +LOCAL +DEFAULT +8 sl1
+ +[0-9]+: 0+24 +0 +TLS +LOCAL +DEFAULT +8 sl2
+ +[0-9]+: 0+28 +0 +TLS +LOCAL +DEFAULT +8 sl3
+ +[0-9]+: 0+2c +0 +TLS +LOCAL +DEFAULT +8 sl4
+ +[0-9]+: 0+30 +0 +TLS +LOCAL +DEFAULT +8 sl5
+ +[0-9]+: 0+34 +0 +TLS +LOCAL +DEFAULT +8 sl6
+ +[0-9]+: 0+38 +0 +TLS +LOCAL +DEFAULT +8 sl7
+ +[0-9]+: 0+3c +0 +TLS +LOCAL +DEFAULT +8 sl8
+ +[0-9]+: 0+60 +0 +TLS +LOCAL +DEFAULT +9 sH1
+ +[0-9]+: 0+ +0 +TLS +LOCAL +DEFAULT +8 _TLS_MODULE_BASE_
+ +[0-9]+: 0+2011b8 +0 +OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC
+ +[0-9]+: 0+48 +0 +TLS +LOCAL +DEFAULT +8 sh3
+ +[0-9]+: 0+64 +0 +TLS +LOCAL +DEFAULT +9 sH2
+ +[0-9]+: 0+78 +0 +TLS +LOCAL +DEFAULT +9 sH7
+ +[0-9]+: 0+58 +0 +TLS +LOCAL +DEFAULT +8 sh7
+ +[0-9]+: 0+5c +0 +TLS +LOCAL +DEFAULT +8 sh8
+ +[0-9]+: 0+6c +0 +TLS +LOCAL +DEFAULT +9 sH4
+ +[0-9]+: 0+4c +0 +TLS +LOCAL +DEFAULT +8 sh4
+ +[0-9]+: 0+68 +0 +TLS +LOCAL +DEFAULT +9 sH3
+ +[0-9]+: 0+50 +0 +TLS +LOCAL +DEFAULT +8 sh5
+ +[0-9]+: 0+70 +0 +TLS +LOCAL +DEFAULT +9 sH5
+ +[0-9]+: 0+74 +0 +TLS +LOCAL +DEFAULT +9 sH6
+ +[0-9]+: 0+7c +0 +TLS +LOCAL +DEFAULT +9 sH8
+ +[0-9]+: 0+40 +0 +TLS +LOCAL +DEFAULT +8 sh1
+ +[0-9]+: 0+201350 +0 +OBJECT +LOCAL +DEFAULT +ABS _GLOBAL_OFFSET_TABLE_
+ +[0-9]+: 0+44 +0 +TLS +LOCAL +DEFAULT +8 sh2
+ +[0-9]+: 0+54 +0 +TLS +LOCAL +DEFAULT +8 sh6
+ +[0-9]+: 0+1c +0 +TLS +GLOBAL +DEFAULT +8 sg8
+ +[0-9]+: 0+8 +0 +TLS +GLOBAL +DEFAULT +8 sg3
+ +[0-9]+: 0+c +0 +TLS +GLOBAL +DEFAULT +8 sg4
+ +[0-9]+: 0+10 +0 +TLS +GLOBAL +DEFAULT +8 sg5
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +8 sg1
+ +[0-9]+: 0+1000 +0 +FUNC +GLOBAL +DEFAULT +7 fn1
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +[0-9]+: 0+4 +0 +TLS +GLOBAL +DEFAULT +8 sg2
+ +[0-9]+: 0+14 +0 +TLS +GLOBAL +DEFAULT +8 sg6
+ +[0-9]+: 0+18 +0 +TLS +GLOBAL +DEFAULT +8 sg7
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsdesc.s b/binutils-2.21/ld/testsuite/ld-x86-64/tlsdesc.s
new file mode 100644
index 0000000..ec6d190
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsdesc.s
@@ -0,0 +1,157 @@
+ /* Force .data aligned to 4K, so .got very likely gets at 0x102190
+ (0x60 bytes .tdata and 0x130 bytes .dynamic) */
+ .data
+ .balign 4096
+ .section ".tdata", "awT", @progbits
+ .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
+ .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+ .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+sg1: .long 17
+sg2: .long 18
+sg3: .long 19
+sg4: .long 20
+sg5: .long 21
+sg6: .long 22
+sg7: .long 23
+sg8: .long 24
+sl1: .long 65
+sl2: .long 66
+sl3: .long 67
+sl4: .long 68
+sl5: .long 69
+sl6: .long 70
+sl7: .long 71
+sl8: .long 72
+sh1: .long 257
+sh2: .long 258
+sh3: .long 259
+sh4: .long 260
+sh5: .long 261
+sh6: .long 262
+sh7: .long 263
+sh8: .long 264
+ /* Force .text aligned to 4K, so it very likely gets at 0x1000. */
+ .text
+ .balign 4096
+ .globl fn1
+ .type fn1,@function
+fn1:
+ pushq %rbp
+ movq %rsp, %rbp
+ nop;nop;nop;nop
+
+ /* GD */
+ leaq sg1@tlsdesc(%rip), %rax
+ call *sg1@tlscall(%rax)
+ nop;nop;nop;nop
+
+ /* GD -> IE because variable is referenced through IE too */
+ leaq sg2@tlsdesc(%rip), %rax
+ call *sg2@tlscall(%rax)
+ nop;nop;nop;nop
+
+ /* GD against local variable */
+ leaq sl1@tlsdesc(%rip), %rax
+ call *sl1@tlscall(%rax)
+ nop;nop;nop;nop
+
+ /* GD -> IE against local variable referenced through IE too */
+ leaq sl2@tlsdesc(%rip), %rax
+ call *sl2@tlscall(%rax)
+ nop;nop;nop;nop
+
+ /* GD against hidden and local variable */
+ leaq sh1@tlsdesc(%rip), %rax
+ call *sh1@tlscall(%rax)
+ nop;nop;nop;nop
+
+ /* GD -> IE against hidden and local variable referenced through
+ IE too */
+ leaq sh2@tlsdesc(%rip), %rax
+ call *sh2@tlscall(%rax)
+ nop;nop;nop;nop
+
+ /* GD against hidden but not local variable */
+ leaq sH1@tlsdesc(%rip), %rax
+ call *sH1@tlscall(%rax)
+ nop;nop;nop;nop
+
+ /* GD -> IE against hidden but not local variable referenced through
+ IE too */
+ leaq sH2@tlsdesc(%rip), %rax
+ call *sH2@tlscall(%rax)
+ nop;nop;nop;nop
+
+ /* LD */
+ leaq _TLS_MODULE_BASE_@tlsdesc(%rip), %rax
+ call *_TLS_MODULE_BASE_@tlscall(%rax)
+ nop;nop
+ leaq sl1@dtpoff(%rax), %rdx
+ nop;nop
+ leaq 2+sl2@dtpoff(%rax), %r9
+ nop;nop;nop;nop
+
+ /* LD against hidden and local variables */
+ leaq sh1@dtpoff(%rax), %rdx
+ nop;nop
+ leaq sh2@dtpoff+3(%rax), %rcx
+ nop;nop;nop;nop
+
+ /* LD against hidden but not local variables */
+ leaq sH1@dtpoff(%rax), %r12
+ nop;nop
+ leaq sH2@dtpoff+1(%rax), %rcx
+ nop;nop
+
+ /* IE against global var */
+ movq %fs:0, %rcx
+ nop;nop
+ addq sg2@gottpoff(%rip), %rcx
+ nop;nop;nop;nop
+
+ /* IE against local var */
+ movq %fs:0, %r14
+ nop;nop
+ addq sl2@gottpoff(%rip), %r14
+ nop;nop;nop;nop
+
+ /* IE against hidden and local var */
+ movq %fs:0, %rcx
+ nop;nop
+ addq sh2@gottpoff(%rip), %rcx
+ nop;nop;nop;nop
+
+ /* IE against hidden but not local var */
+ movq %fs:0, %rcx
+ nop;nop
+ addq sH2@gottpoff(%rip), %rcx
+ nop;nop;nop;nop
+
+ /* Direct access through %fs */
+
+ /* IE against global var */
+ movq sg5@gottpoff(%rip), %rcx
+ nop;nop
+ movq %fs:(%rcx), %rdx
+ nop;nop;nop;nop
+
+ /* IE against local var */
+ movq sl5@gottpoff(%rip), %r10
+ nop;nop
+ movq %fs:(%r10), %r12
+ nop;nop;nop;nop
+
+ /* IE against hidden and local var */
+ movq sh5@gottpoff(%rip), %rdx
+ nop;nop
+ movq %fs:(%rdx), %rdx
+ nop;nop;nop;nop
+
+ /* IE against hidden but not local var */
+ movq sH5@gottpoff(%rip), %rcx
+ nop;nop
+ movq %fs:(%rcx), %rdx
+ nop;nop;nop;nop
+
+ leave
+ ret
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsdesc.sd b/binutils-2.21/ld/testsuite/ld-x86-64/tlsdesc.sd
new file mode 100644
index 0000000..7eb474a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsdesc.sd
@@ -0,0 +1,23 @@
+#source: tlsdesc.s
+#source: tlspic2.s
+#as: --64
+#ld: -shared -melf_x86_64
+#objdump: -s -j.got -j.got.plt
+#target: x86_64-*-*
+
+.*: +file format elf64-x86-64
+
+Contents of section \.got:
+ 201308 00000000 00000000 00000000 00000000 .*
+ 201318 00000000 00000000 00000000 00000000 .*
+ 201328 00000000 00000000 00000000 00000000 .*
+ 201338 00000000 00000000 00000000 00000000 .*
+ 201348 00000000 00000000 .*
+Contents of section \.got\.plt:
+ 201350 b8112000 00000000 00000000 00000000 .*
+ 201360 00000000 00000000 00000000 00000000 .*
+ 201370 00000000 00000000 00000000 00000000 .*
+ 201380 00000000 00000000 00000000 00000000 .*
+ 201390 00000000 00000000 00000000 00000000 .*
+ 2013a0 00000000 00000000 00000000 00000000 .*
+ 2013b0 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsdesc.td b/binutils-2.21/ld/testsuite/ld-x86-64/tlsdesc.td
new file mode 100644
index 0000000..6b8098c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsdesc.td
@@ -0,0 +1,16 @@
+#source: tlsdesc.s
+#source: tlspic2.s
+#as: --64
+#ld: -shared -melf_x86_64
+#objdump: -sj.tdata
+#target: x86_64-*-*
+
+.*: +file format elf64-x86-64
+
+Contents of section .tdata:
+ 201154 11000000 12000000 13000000 14000000 .*
+ 201164 15000000 16000000 17000000 18000000 .*
+ 201174 41000000 42000000 43000000 44000000 .*
+ 201184 45000000 46000000 47000000 48000000 .*
+ 201194 01010000 02010000 03010000 04010000 .*
+ 2011a4 05010000 06010000 07010000 08010000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsg.s b/binutils-2.21/ld/testsuite/ld-x86-64/tlsg.s
new file mode 100644
index 0000000..048e98f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsg.s
@@ -0,0 +1,12 @@
+ .section .tbss,"awT",@nobits
+ .align 4
+ .skip 24
+ .type a,@object
+ .size a,4
+a:
+ .zero 4
+ .text
+ .globl _start
+_start:
+ .section .debug_foobar
+ .long a@dtpoff, 0
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsg.sd b/binutils-2.21/ld/testsuite/ld-x86-64/tlsg.sd
new file mode 100644
index 0000000..4eaf3cd
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsg.sd
@@ -0,0 +1,10 @@
+#source: tlsg.s
+#as: --64
+#ld: -melf_x86_64
+#objdump: -sj.debug_foobar
+#target: x86_64-*-*
+
+.*: +file format elf64-x86-64
+
+Contents of section .debug_foobar:
+ 0+ 18000000 0+ +.*
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsgd1.dd b/binutils-2.21/ld/testsuite/ld-x86-64/tlsgd1.dd
new file mode 100644
index 0000000..b4f3c99
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsgd1.dd
@@ -0,0 +1,14 @@
+#source: tlsgd1.s
+#as: --64
+#ld: -melf_x86_64 tmpdir/tlsgd1
+#objdump: -drw
+#target: x86_64-*-linux*
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+[a-f0-9]+ <_start>:
+[ ]*[a-f0-9]+: 64 48 8b 04 25 00 00 00 00 mov %fs:0x0,%rax
+[ ]*[a-f0-9]+: 48 8d 80 fc ff ff ff lea -0x4\(%rax\),%rax
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsgd1.s b/binutils-2.21/ld/testsuite/ld-x86-64/tlsgd1.s
new file mode 100644
index 0000000..e5f52ed
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsgd1.s
@@ -0,0 +1,15 @@
+ .text
+ .globl _start
+_start:
+ .byte 0x66
+ leaq foo@TLSGD(%rip), %rdi
+ .word 0x6666
+ rex64
+ call __tls_get_addr
+ .globl foo
+ .section .tdata,"awT",@progbits
+ .align 4
+ .type foo, @object
+ .size foo, 4
+foo:
+ .long 100
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsgd2.d b/binutils-2.21/ld/testsuite/ld-x86-64/tlsgd2.d
new file mode 100644
index 0000000..494560b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsgd2.d
@@ -0,0 +1,4 @@
+#name: TLS GD->IE transition check
+#as: --64
+#ld: -melf_x86_64
+#error: .*TLS transition from R_X86_64_TLSGD to R_X86_64_GOTTPOFF against `foo'.*failed.*
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsgd2.s b/binutils-2.21/ld/testsuite/ld-x86-64/tlsgd2.s
new file mode 100644
index 0000000..f583c85
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsgd2.s
@@ -0,0 +1,5 @@
+ .text
+ .globl _start
+_start:
+ leaq foo@TLSGD(%rip), %rdi
+ call __tls_get_addr
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsgd3.d b/binutils-2.21/ld/testsuite/ld-x86-64/tlsgd3.d
new file mode 100644
index 0000000..a8830e9
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsgd3.d
@@ -0,0 +1,4 @@
+#name: TLS GD->LE transition check
+#as: --64
+#ld: -melf_x86_64
+#error: .*TLS transition from R_X86_64_TLSGD to R_X86_64_TPOFF32 against `foo'.*failed.*
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsgd3.s b/binutils-2.21/ld/testsuite/ld-x86-64/tlsgd3.s
new file mode 100644
index 0000000..e1e7e60
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsgd3.s
@@ -0,0 +1,11 @@
+ .text
+ .globl _start
+_start:
+ leaq foo@TLSGD(%rip), %rdi
+ call __tls_get_addr
+ .section .tdata,"awT",@progbits
+ .align 4
+ .type foo, @object
+ .size foo, 4
+foo:
+ .long 100
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsgdesc.dd b/binutils-2.21/ld/testsuite/ld-x86-64/tlsgdesc.dd
new file mode 100644
index 0000000..75e8da4
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsgdesc.dd
@@ -0,0 +1,163 @@
+#source: tlsgdesc.s
+#as: --64
+#ld: -shared -melf_x86_64
+#objdump: -drj.text
+#target: x86_64-*-*
+
+.*: +file format elf64-x86-64
+
+Disassembly of section .text:
+
+0+[0-9a-f]+ <fc1>:
+ +[0-9a-f]+: 55[ ]+push %rbp
+ +[0-9a-f]+: 48 89 e5[ ]+mov %rsp,%rbp
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# IE
+ +[0-9a-f]+: 64 48 8b 0c 25 00 00[ ]+mov %fs:0x0,%rcx
+ +[0-9a-f]+: 00 00 *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 48 03 0d 5e 02 20 00[ ]+add 0x20025e\(%rip\),%rcx +# 200660 <.*>
+# -> R_X86_64_TPOFF64 sG3
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# IE
+ +[0-9a-f]+: 64 48 8b 0c 25 00 00[ ]+mov %fs:0x0,%rcx
+ +[0-9a-f]+: 00 00 *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 48 03 0d 68 02 20 00[ ]+add 0x200268\(%rip\),%rcx +# 200680 <.*>
+# -> R_X86_64_TPOFF64 sG4
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# GD, gd first
+ +[0-9a-f]+: 66 48 8d 3d 6c 02 20[ ]+data32 lea 0x20026c\(%rip\),%rdi +# 200690 <.*>
+ +[0-9a-f]+: 00 *
+# -> R_X86_64_DTPMOD64 sG1
+ +[0-9a-f]+: 66 66 48 e8 9c ff ff[ ]+data32 data32 callq [0-9a-f]+ <.*>
+ +[0-9a-f]+: ff[ ]+
+# -> R_X86_64_JUMP_SLOT __tls_get_addr
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 48 8d 05 a1 02 20 00[ ]+lea 0x2002a1\(%rip\),%rax +# 2006d8 <.*>
+# -> R_X86_64_TLSDESC sG1
+ +[0-9a-f]+: ff 10[ ]+callq \*\(%rax\)
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# GD, desc first
+ +[0-9a-f]+: 48 8d 05 84 02 20 00[ ]+lea 0x200284\(%rip\),%rax +# 2006c8 <.*>
+# -> R_X86_64_TLSDESC sG2
+ +[0-9a-f]+: ff 10[ ]+callq \*\(%rax\)
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 66 48 8d 3d 1e 02 20[ ]+data32 lea 0x20021e\(%rip\),%rdi +# 200670 <.*>
+ +[0-9a-f]+: 00 *
+# -> R_X86_64_DTPMOD64 sG2
+ +[0-9a-f]+: 66 66 48 e8 6e ff ff[ ]+data32 data32 callq [0-9a-f]+ <.*>
+ +[0-9a-f]+: ff[ ]+
+# -> R_X86_64_JUMP_SLOT __tls_get_addr
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# GD -> IE, gd first, after IE use
+ +[0-9a-f]+: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
+ +[0-9a-f]+: 00 00 *
+ +[0-9a-f]+: 48 03 05 f2 01 20 00[ ]+add 0x2001f2\(%rip\),%rax +# 200660 <.*>
+# -> R_X86_64_TPOFF64 sG3
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 48 8b 05 e7 01 20 00[ ]+mov 0x2001e7\(%rip\),%rax +# 200660 <.*>
+# -> R_X86_64_TPOFF64 sG3
+ +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# GD -> IE, desc first, after IE use
+ +[0-9a-f]+: 48 8b 05 fa 01 20 00[ ]+mov 0x2001fa\(%rip\),%rax +# 200680 <.*>
+# -> R_X86_64_TPOFF64 sG4
+ +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
+ +[0-9a-f]+: 00 00 *
+ +[0-9a-f]+: 48 03 05 e4 01 20 00[ ]+add 0x2001e4\(%rip\),%rax +# 200680 <.*>
+# -> R_X86_64_TPOFF64 sG4
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# GD -> IE, gd first, before IE use
+ +[0-9a-f]+: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
+ +[0-9a-f]+: 00 00 *
+ +[0-9a-f]+: 48 03 05 b8 01 20 00[ ]+add 0x2001b8\(%rip\),%rax +# 200668 <.*>
+# -> R_X86_64_TPOFF64 sG5
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 48 8b 05 ad 01 20 00[ ]+mov 0x2001ad\(%rip\),%rax +# 200668 <.*>
+# -> R_X86_64_TPOFF64 sG5
+ +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# GD -> IE, desc first, before IE use
+ +[0-9a-f]+: 48 8b 05 c0 01 20 00[ ]+mov 0x2001c0\(%rip\),%rax +# 200688 <.*>
+# -> R_X86_64_TPOFF64 sG6
+ +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
+ +[0-9a-f]+: 00 00 *
+ +[0-9a-f]+: 48 03 05 aa 01 20 00[ ]+add 0x2001aa\(%rip\),%rax +# 200688 <.*>
+# -> R_X86_64_TPOFF64 sG6
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# IE
+ +[0-9a-f]+: 64 48 8b 0c 25 00 00[ ]+mov %fs:0x0,%rcx
+ +[0-9a-f]+: 00 00 *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 48 03 0d 74 01 20 00[ ]+add 0x200174\(%rip\),%rcx +# 200668 <.*>
+# -> R_X86_64_TPOFF64 sG5
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# IE
+ +[0-9a-f]+: 64 48 8b 0c 25 00 00[ ]+mov %fs:0x0,%rcx
+ +[0-9a-f]+: 00 00 *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 48 03 0d 7e 01 20 00[ ]+add 0x20017e\(%rip\),%rcx +# 200688 <.*>
+# -> R_X86_64_TPOFF64 sG6
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: c9[ ]+leaveq *
+ +[0-9a-f]+: c3[ ]+retq *
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsgdesc.rd b/binutils-2.21/ld/testsuite/ld-x86-64/tlsgdesc.rd
new file mode 100644
index 0000000..61d2fa8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsgdesc.rd
@@ -0,0 +1,104 @@
+#source: tlsgdesc.s
+#as: --64
+#ld: -shared -melf64_x86_64
+#readelf: -WSsrl
+#target: x86_64-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
+ +\[[ 0-9]+\] \.hash +.*
+ +\[[ 0-9]+\] \.dynsym +.*
+ +\[[ 0-9]+\] \.dynstr +.*
+ +\[[ 0-9]+\] \.rela.dyn +.*
+ +\[[ 0-9]+\] \.rela.plt +.*
+ +\[[ 0-9]+\] \.plt +.*
+ +\[[ 0-9]+\] \.text +.*
+ +\[[ 0-9]+\] \.dynamic +.*
+ +\[[ 0-9]+\] \.got +.*
+ +\[[ 0-9]+\] \.got.plt +.*
+ +\[[ 0-9]+\] \.shstrtab +.*
+ +\[[ 0-9]+\] \.symtab +.*
+ +\[[ 0-9]+\] \.strtab +.*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x[0-9a-f]+
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +LOAD.*
+ +LOAD.*
+ +DYNAMIC.*
+
+ Section to Segment mapping:
+ +Segment Sections...
+ +00 +.hash .dynsym .dynstr .rela.dyn .rela.plt .plt .text *
+ +01 +.dynamic .got .got.plt *
+ +02 +.dynamic *
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 8 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f]+ +0+200000012 R_X86_64_TPOFF64 +0+ sG3 \+ 0
+[0-9a-f]+ +0+300000012 R_X86_64_TPOFF64 +0+ sG5 \+ 0
+[0-9a-f]+ +0+400000010 R_X86_64_DTPMOD64 +0+ sG2 \+ 0
+[0-9a-f]+ +0+400000011 R_X86_64_DTPOFF64 +0+ sG2 \+ 0
+[0-9a-f]+ +0+500000012 R_X86_64_TPOFF64 +0+ sG4 \+ 0
+[0-9a-f]+ +0+800000012 R_X86_64_TPOFF64 +0+ sG6 \+ 0
+[0-9a-f]+ +0+a00000010 R_X86_64_DTPMOD64 +0+ sG1 \+ 0
+[0-9a-f]+ +0+a00000011 R_X86_64_DTPOFF64 +0+ sG1 \+ 0
+
+Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 3 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f]+ +0+600000007 R_X86_64_JUMP_SLOT +0+ __tls_get_addr \+ 0
+[0-9a-f]+ +0+a00000024 R_X86_64_TLSDESC +0+ sG1 \+ 0
+[0-9a-f]+ +0+400000024 R_X86_64_TLSDESC +0+ sG2 \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +[0-9]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +7 *
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG3
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG5
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG2
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG4
+ +[0-9]+: 0+ +0 +NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG6
+ +[0-9]+: [0-9a-f]+ +0 +FUNC +GLOBAL +DEFAULT +7 fc1
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG1
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +[0-9]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +1 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +2 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +3 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +4 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +5 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +6 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +7 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +8 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +9 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +10 *
+ +[0-9]+: [0-9a-f]+ +0 +OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC
+ +[0-9]+: [0-9a-f]+ +0 +OBJECT +LOCAL +DEFAULT +ABS _GLOBAL_OFFSET_TABLE_
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG3
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG5
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG2
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG4
+ +[0-9]+: 0+ +0 +NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG6
+ +[0-9]+: [0-9a-f]+ +0 +FUNC +GLOBAL +DEFAULT +7 fc1
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG1
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsgdesc.s b/binutils-2.21/ld/testsuite/ld-x86-64/tlsgdesc.s
new file mode 100644
index 0000000..6657e72
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsgdesc.s
@@ -0,0 +1,106 @@
+ .text
+ .globl fc1
+ .type fc1,@function
+fc1:
+ pushq %rbp
+ movq %rsp, %rbp
+ nop;nop;nop;nop
+
+ /* IE against global var. */
+ movq %fs:0, %rcx
+ nop;nop
+ addq sG3@gottpoff(%rip), %rcx
+ nop;nop;nop;nop
+
+ /* IE against global var. */
+ movq %fs:0, %rcx
+ nop;nop
+ addq sG4@gottpoff(%rip), %rcx
+ nop;nop;nop;nop
+
+ /* GD, gd first. */
+ .byte 0x66
+ leaq sG1@tlsgd(%rip), %rdi
+ .word 0x6666
+ rex64
+ call __tls_get_addr@plt
+ nop;nop;nop;nop
+
+ leaq sG1@tlsdesc(%rip), %rax
+ call *sG1@tlscall(%rax)
+ nop;nop;nop;nop
+
+ /* GD, desc first. */
+ leaq sG2@tlsdesc(%rip), %rax
+ call *sG2@tlscall(%rax)
+ nop;nop;nop;nop
+
+ .byte 0x66
+ leaq sG2@tlsgd(%rip), %rdi
+ .word 0x6666
+ rex64
+ call __tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> IE, gd first, after IE use. */
+ .byte 0x66
+ leaq sG3@tlsgd(%rip), %rdi
+ .word 0x6666
+ rex64
+ call __tls_get_addr@plt
+ nop;nop;nop;nop
+
+ leaq sG3@tlsdesc(%rip), %rax
+ call *sG3@tlscall(%rax)
+ nop;nop;nop;nop
+
+ /* GD -> IE, desc first, after IE use. */
+ leaq sG4@tlsdesc(%rip), %rax
+ call *sG4@tlscall(%rax)
+ nop;nop;nop;nop
+
+ .byte 0x66
+ leaq sG4@tlsgd(%rip), %rdi
+ .word 0x6666
+ rex64
+ call __tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> IE, gd first, before IE use. */
+ .byte 0x66
+ leaq sG5@tlsgd(%rip), %rdi
+ .word 0x6666
+ rex64
+ call __tls_get_addr@plt
+ nop;nop;nop;nop
+
+ leaq sG5@tlsdesc(%rip), %rax
+ call *sG5@tlscall(%rax)
+ nop;nop;nop;nop
+
+ /* GD -> IE, desc first, before IE use. */
+ leaq sG6@tlsdesc(%rip), %rax
+ call *sG6@tlscall(%rax)
+ nop;nop;nop;nop
+
+ .byte 0x66
+ leaq sG6@tlsgd(%rip), %rdi
+ .word 0x6666
+ rex64
+ call __tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* IE against global var. */
+ movq %fs:0, %rcx
+ nop;nop
+ addq sG5@gottpoff(%rip), %rcx
+ nop;nop;nop;nop
+
+ /* IE against global var. */
+ movq %fs:0, %rcx
+ nop;nop
+ addq sG6@gottpoff(%rip), %rcx
+ nop;nop;nop;nop
+
+ leave
+ ret
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsie1.dd b/binutils-2.21/ld/testsuite/ld-x86-64/tlsie1.dd
new file mode 100644
index 0000000..74dc39b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsie1.dd
@@ -0,0 +1,16 @@
+#source: tlsie1.s
+#as: --64
+#ld: -melf_x86_64 tmpdir/tlsie1
+#objdump: -drw
+#target: x86_64-*-linux*
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+[a-f0-9]+ <_start>:
+[ ]*[a-f0-9]+: 48 c7 c0 fc ff ff ff mov \$0xfffffffffffffffc,%rax
+[ ]*[a-f0-9]+: 48 8d 80 fc ff ff ff lea -0x4\(%rax\),%rax
+[ ]*[a-f0-9]+: 49 c7 c4 fc ff ff ff mov \$0xfffffffffffffffc,%r12
+[ ]*[a-f0-9]+: 49 81 c4 fc ff ff ff add \$0xfffffffffffffffc,%r12
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsie1.s b/binutils-2.21/ld/testsuite/ld-x86-64/tlsie1.s
new file mode 100644
index 0000000..c7722b1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsie1.s
@@ -0,0 +1,14 @@
+ .text
+ .globl _start
+_start:
+ movq foo@GOTTPOFF(%rip), %rax
+ addq foo@GOTTPOFF(%rip), %rax
+ movq foo@GOTTPOFF(%rip), %r12
+ addq foo@GOTTPOFF(%rip), %r12
+ .globl foo
+ .section .tdata,"awT",@progbits
+ .align 4
+ .type foo, @object
+ .size foo, 4
+foo:
+ .long 100
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsie2.d b/binutils-2.21/ld/testsuite/ld-x86-64/tlsie2.d
new file mode 100644
index 0000000..97dcc28
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsie2.d
@@ -0,0 +1,4 @@
+#name: TLS IE->LE transition check
+#as: --64
+#ld: -melf_x86_64
+#error: .*TLS transition from R_X86_64_GOTTPOFF to R_X86_64_TPOFF32 against `foo'.*failed.*
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsie2.s b/binutils-2.21/ld/testsuite/ld-x86-64/tlsie2.s
new file mode 100644
index 0000000..c9b9bfb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsie2.s
@@ -0,0 +1,12 @@
+ .text
+ .globl _start
+_start:
+ leaq foo@GOTTPOFF(%rip), %rax
+ movq (%rax), %rax
+ .globl foo
+ .section .tdata,"awT",@progbits
+ .align 4
+ .type foo, @object
+ .size foo, 4
+foo:
+ .long 100
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsie3.d b/binutils-2.21/ld/testsuite/ld-x86-64/tlsie3.d
new file mode 100644
index 0000000..8c982a6
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsie3.d
@@ -0,0 +1,4 @@
+#name: TLS IE->LE transition check (%r12)
+#as: --64
+#ld: -melf_x86_64
+#error: .*TLS transition from R_X86_64_GOTTPOFF to R_X86_64_TPOFF32 against `foo'.*failed.*
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsie3.s b/binutils-2.21/ld/testsuite/ld-x86-64/tlsie3.s
new file mode 100644
index 0000000..13faf34
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsie3.s
@@ -0,0 +1,12 @@
+ .text
+ .globl _start
+_start:
+ leaq foo@GOTTPOFF(%rip), %r12
+ movq (%r12), %r12
+ .globl foo
+ .section .tdata,"awT",@progbits
+ .align 4
+ .type foo, @object
+ .size foo, 4
+foo:
+ .long 100
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsld1.dd b/binutils-2.21/ld/testsuite/ld-x86-64/tlsld1.dd
new file mode 100644
index 0000000..e91ce08
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsld1.dd
@@ -0,0 +1,13 @@
+#source: tlsld1.s
+#as: --64
+#ld: -melf_x86_64 tmpdir/tlsld1
+#objdump: -drw
+#target: x86_64-*-linux*
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+[a-f0-9]+ <_start>:
+[ ]*[a-f0-9]+: 66 66 66 64 48 8b 04 25 00 00 00 00 data32 data32 data32 mov %fs:0x0,%rax
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsld1.s b/binutils-2.21/ld/testsuite/ld-x86-64/tlsld1.s
new file mode 100644
index 0000000..6dcdd69
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsld1.s
@@ -0,0 +1,12 @@
+ .text
+ .globl _start
+_start:
+ leaq foo@TLSLD(%rip), %rdi
+ call __tls_get_addr
+ .globl foo
+ .section .tdata,"awT",@progbits
+ .align 4
+ .type foo, @object
+ .size foo, 4
+foo:
+ .long 100
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsle1.d b/binutils-2.21/ld/testsuite/ld-x86-64/tlsle1.d
new file mode 100644
index 0000000..2142ef5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsle1.d
@@ -0,0 +1,6 @@
+#name: TLS LE with PIE
+#as: --64
+#ld: -melf_x86_64 -pie
+#readelf: -r
+
+There are no relocations in this file.
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlsle1.s b/binutils-2.21/ld/testsuite/ld-x86-64/tlsle1.s
new file mode 100644
index 0000000..4346a5d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlsle1.s
@@ -0,0 +1,11 @@
+ .text
+ .globl _start
+_start:
+ movl $0, %fs:foo@TPOFF
+ .globl foo
+ .section .tdata,"awT",@progbits
+ .align 4
+ .type foo, @object
+ .size foo, 4
+foo:
+ .long 100
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlslib.s b/binutils-2.21/ld/testsuite/ld-x86-64/tlslib.s
new file mode 100644
index 0000000..9eccc08
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlslib.s
@@ -0,0 +1,18 @@
+ .section ".tdata", "awT", @progbits
+ .globl sG1, sG2, sG3, sG4, sG5, sG6, sG7, sG8
+sG1: .long 513
+sG2: .long 514
+sG3: .long 515
+sG4: .long 516
+sG5: .long 517
+sG6: .long 518
+sG7: .long 519
+sG8: .long 520
+
+ .text
+ /* Dummy. */
+ .globl __tls_get_addr
+ .type __tls_get_addr,@function
+__tls_get_addr:
+ movq %rdi, %rax
+ ret
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlspic.dd b/binutils-2.21/ld/testsuite/ld-x86-64/tlspic.dd
new file mode 100644
index 0000000..e1b64fc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlspic.dd
@@ -0,0 +1,230 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as: --64
+#ld: -shared -melf_x86_64
+#objdump: -drj.text
+#target: x86_64-*-*
+
+.*: +file format elf64-x86-64
+
+Disassembly of section .text:
+
+0+1000 <fn1>:
+ +1000: 55[ ]+push %rbp
+ +1001: 48 89 e5[ ]+mov %rsp,%rbp
+ +1004: 90[ ]+nop *
+ +1005: 90[ ]+nop *
+ +1006: 90[ ]+nop *
+ +1007: 90[ ]+nop *
+# GD
+ +1008: 66 48 8d 3d 80 03 20[ ]+data32 lea 0x200380\(%rip\),%rdi +# 201390 <.*>
+ +100f: 00 *
+# -> R_X86_64_DTPMOD64 sg1
+ +1010: 66 66 48 e8 [0-9a-f ]+data32 data32 callq [0-9a-f]+ <.*>
+# -> R_X86_64_JUMP_SLOT __tls_get_addr
+ +1017: [0-9a-f ]+
+ +1018: 90[ ]+nop *
+ +1019: 90[ ]+nop *
+ +101a: 90[ ]+nop *
+ +101b: 90[ ]+nop *
+# GD -> IE because variable is referenced through IE too
+ +101c: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
+ +1023: 00 00 *
+ +1025: 48 03 05 84 03 20 00[ ]+add 0x200384\(%rip\),%rax +# 2013b0 <.*>
+# -> R_X86_64_TPOFF64 sg2
+ +102c: 90[ ]+nop *
+ +102d: 90[ ]+nop *
+ +102e: 90[ ]+nop *
+ +102f: 90[ ]+nop *
+# GD against local variable
+ +1030: 66 48 8d 3d 08 03 20[ ]+data32 lea 0x200308\(%rip\),%rdi +# 201340 <.*>
+ +1037: 00 *
+# -> R_X86_64_DTPMOD64 [0 0x2000000000000000]
+ +1038: 66 66 48 e8 [0-9a-f ]+data32 data32 callq [0-9a-f]+ <.*>
+# -> R_X86_64_JUMP_SLOT __tls_get_addr
+ +103f: [0-9a-f ]+
+ +1040: 90[ ]+nop *
+ +1041: 90[ ]+nop *
+ +1042: 90[ ]+nop *
+ +1043: 90[ ]+nop *
+# GD -> IE against local variable referenced through IE too
+ +1044: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
+ +104b: 00 00 *
+ +104d: 48 03 05 fc 02 20 00[ ]+add 0x2002fc\(%rip\),%rax +# 201350 <.*>
+# -> R_X86_64_TPOFF64 *ABS*+0x24
+ +1054: 90[ ]+nop *
+ +1055: 90[ ]+nop *
+ +1056: 90[ ]+nop *
+ +1057: 90[ ]+nop *
+# GD against hidden and local variable
+ +1058: 66 48 8d 3d 58 03 20[ ]+data32 lea 0x200358\(%rip\),%rdi +# 2013b8 <.*>
+ +105f: 00 *
+# -> R_X86_64_DTPMOD64 [0 0x4000000000000000]
+ +1060: 66 66 48 e8 [0-9a-f ]+data32 data32 callq [0-9a-f]+ <.*>
+# -> R_X86_64_JUMP_SLOT __tls_get_addr
+ +1067: [0-9a-f ]+
+ +1068: 90[ ]+nop *
+ +1069: 90[ ]+nop *
+ +106a: 90[ ]+nop *
+ +106b: 90[ ]+nop *
+# GD -> IE against hidden and local variable referenced through IE too
+ +106c: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
+ +1073: 00 00 *
+ +1075: 48 03 05 4c 03 20 00[ ]+add 0x20034c\(%rip\),%rax +# 2013c8 <.*>
+# -> R_X86_64_TPOFF64 *ABS*+0x44
+ +107c: 90[ ]+nop *
+ +107d: 90[ ]+nop *
+ +107e: 90[ ]+nop *
+ +107f: 90[ ]+nop *
+# GD against hidden but not local variable
+ +1080: 66 48 8d 3d e8 02 20[ ]+data32 lea 0x2002e8\(%rip\),%rdi +# 201370 <.*>
+ +1087: 00 *
+# -> R_X86_64_DTPMOD64 [0 0x6000000000000000]
+ +1088: 66 66 48 e8 [0-9a-f ]+data32 data32 callq [0-9a-f]+ <.*>
+# -> R_X86_64_JUMP_SLOT __tls_get_addr
+ +108f: [0-9a-f ]+
+ +1090: 90[ ]+nop *
+ +1091: 90[ ]+nop *
+ +1092: 90[ ]+nop *
+ +1093: 90[ ]+nop *
+# GD -> IE against hidden but not local variable referenced through IE too
+ +1094: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
+ +109b: 00 00 *
+ +109d: 48 03 05 dc 02 20 00[ ]+add 0x2002dc\(%rip\),%rax +# 201380 <.*>
+# -> R_X86_64_TPOFF64 *ABS*+0x64
+ +10a4: 90[ ]+nop *
+ +10a5: 90[ ]+nop *
+ +10a6: 90[ ]+nop *
+ +10a7: 90[ ]+nop *
+# LD
+ +10a8: 48 8d 3d b1 02 20 00[ ]+lea 0x2002b1\(%rip\),%rdi +# 201360 <.*>
+# -> R_X86_64_DTPMOD64 [0 0x000000000000000]
+ +10af: e8 [0-9a-f ]+callq [0-9a-f]+ <.*>
+# -> R_X86_64_JUMP_SLOT __tls_get_addr
+ +10b4: 90[ ]+nop *
+ +10b5: 90[ ]+nop *
+ +10b6: 48 8d 90 20 00 00 00[ ]+lea 0x20\(%rax\),%rdx
+ +10bd: 90[ ]+nop *
+ +10be: 90[ ]+nop *
+ +10bf: 4c 8d 88 26 00 00 00[ ]+lea 0x26\(%rax\),%r9
+ +10c6: 90[ ]+nop *
+ +10c7: 90[ ]+nop *
+ +10c8: 90[ ]+nop *
+ +10c9: 90[ ]+nop *
+# LD against hidden and local variables
+ +10ca: 48 8d 3d 8f 02 20 00[ ]+lea 0x20028f\(%rip\),%rdi +# 201360 <.*>
+# -> R_X86_64_DTPMOD64 [0 0x000000000000000]
+ +10d1: e8 [0-9a-f ]+callq [0-9a-f]+ <.*>
+# -> R_X86_64_JUMP_SLOT __tls_get_addr
+ +10d6: 90[ ]+nop *
+ +10d7: 90[ ]+nop *
+ +10d8: 48 8d 90 40 00 00 00[ ]+lea 0x40\(%rax\),%rdx
+ +10df: 90[ ]+nop *
+ +10e0: 90[ ]+nop *
+ +10e1: 48 8d 88 47 00 00 00[ ]+lea 0x47\(%rax\),%rcx
+ +10e8: 90[ ]+nop *
+ +10e9: 90[ ]+nop *
+ +10ea: 90[ ]+nop *
+ +10eb: 90[ ]+nop *
+# LD against hidden but not local variables
+ +10ec: 48 8d 3d 6d 02 20 00[ ]+lea 0x20026d\(%rip\),%rdi +# 201360 <.*>
+# -> R_X86_64_DTPMOD64 [0 0x000000000000000]
+ +10f3: e8 [0-9a-f ]+callq [0-9a-f]+ <.*>
+# -> R_X86_64_JUMP_SLOT __tls_get_addr
+ +10f8: 90[ ]+nop *
+ +10f9: 90[ ]+nop *
+ +10fa: 4c 8d a0 60 00 00 00[ ]+lea 0x60\(%rax\),%r12
+ +1101: 90[ ]+nop *
+ +1102: 90[ ]+nop *
+ +1103: 48 8d 88 65 00 00 00[ ]+lea 0x65\(%rax\),%rcx
+ +110a: 90[ ]+nop *
+ +110b: 90[ ]+nop *
+# IE against global var
+ +110c: 64 48 8b 0c 25 00 00[ ]+mov %fs:0x0,%rcx
+ +1113: 00 00 *
+ +1115: 90[ ]+nop *
+ +1116: 90[ ]+nop *
+ +1117: 48 03 0d 92 02 20 00[ ]+add 0x200292\(%rip\),%rcx +# 2013b0 <.*>
+# -> R_X86_64_TPOFF64 sg2
+ +111e: 90[ ]+nop *
+ +111f: 90[ ]+nop *
+ +1120: 90[ ]+nop *
+ +1121: 90[ ]+nop *
+# IE against local var
+ +1122: 64 4c 8b 34 25 00 00[ ]+mov %fs:0x0,%r14
+ +1129: 00 00 *
+ +112b: 90[ ]+nop *
+ +112c: 90[ ]+nop *
+ +112d: 4c 03 35 1c 02 20 00[ ]+add 0x20021c\(%rip\),%r14 +# 201350 <.*>
+# -> R_X86_64_TPOFF64 *ABS*+0x24
+ +1134: 90[ ]+nop *
+ +1135: 90[ ]+nop *
+ +1136: 90[ ]+nop *
+ +1137: 90[ ]+nop *
+# IE against hidden and local var
+ +1138: 64 48 8b 0c 25 00 00[ ]+mov %fs:0x0,%rcx
+ +113f: 00 00 *
+ +1141: 90[ ]+nop *
+ +1142: 90[ ]+nop *
+ +1143: 48 03 0d 7e 02 20 00[ ]+add 0x20027e\(%rip\),%rcx +# 2013c8 <.*>
+# -> R_X86_64_TPOFF64 *ABS*+0x44
+ +114a: 90[ ]+nop *
+ +114b: 90[ ]+nop *
+ +114c: 90[ ]+nop *
+ +114d: 90[ ]+nop *
+# IE against hidden but not local var
+ +114e: 64 48 8b 0c 25 00 00[ ]+mov %fs:0x0,%rcx
+ +1155: 00 00 *
+ +1157: 90[ ]+nop *
+ +1158: 90[ ]+nop *
+ +1159: 48 03 0d 20 02 20 00[ ]+add 0x200220\(%rip\),%rcx +# 201380 <.*>
+# -> R_X86_64_TPOFF64 *ABS*+0x64
+ +1160: 90[ ]+nop *
+ +1161: 90[ ]+nop *
+ +1162: 90[ ]+nop *
+ +1163: 90[ ]+nop *
+# Direct access through %fs
+# IE against global var
+ +1164: 48 8b 0d 1d 02 20 00[ ]+mov 0x20021d\(%rip\),%rcx +# 201388 <.*>
+# -> R_X86_64_TPOFF64 sg5
+ +116b: 90[ ]+nop *
+ +116c: 90[ ]+nop *
+ +116d: 64 48 8b 11[ ]+mov %fs:\(%rcx\),%rdx
+ +1171: 90[ ]+nop *
+ +1172: 90[ ]+nop *
+ +1173: 90[ ]+nop *
+ +1174: 90[ ]+nop *
+# IE against local var
+ +1175: 4c 8b 15 dc 01 20 00[ ]+mov 0x2001dc\(%rip\),%r10 +# 201358 <.*>
+# -> R_X86_64_TPOFF64 *ABS*+0x30
+ +117c: 90[ ]+nop *
+ +117d: 90[ ]+nop *
+ +117e: 64 4d 8b 22[ ]+mov %fs:\(%r10\),%r12
+ +1182: 90[ ]+nop *
+ +1183: 90[ ]+nop *
+ +1184: 90[ ]+nop *
+ +1185: 90[ ]+nop *
+# IE against hidden and local var
+ +1186: 48 8b 15 13 02 20 00[ ]+mov 0x200213\(%rip\),%rdx +# 2013a0 <.*>
+# -> R_X86_64_TPOFF64 *ABS*+0x50
+ +118d: 90[ ]+nop *
+ +118e: 90[ ]+nop *
+ +118f: 64 48 8b 12[ ]+mov %fs:\(%rdx\),%rdx
+ +1193: 90[ ]+nop *
+ +1194: 90[ ]+nop *
+ +1195: 90[ ]+nop *
+ +1196: 90[ ]+nop *
+# IE against hidden but not local var
+ +1197: 48 8b 0d 0a 02 20 00[ ]+mov 0x20020a\(%rip\),%rcx +# 2013a8 <.*>
+# -> R_X86_64_TPOFF64 *ABS*+0x70
+ +119e: 90[ ]+nop *
+ +119f: 90[ ]+nop *
+ +11a0: 64 48 8b 11[ ]+mov %fs:\(%rcx\),%rdx
+ +11a4: 90[ ]+nop *
+ +11a5: 90[ ]+nop *
+ +11a6: 90[ ]+nop *
+ +11a7: 90[ ]+nop *
+ +11a8: c9[ ]+leaveq *
+ +11a9: c3[ ]+retq *
+ +11aa: 90[ ]+nop *
+ +11ab: 90[ ]+nop *
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlspic.rd b/binutils-2.21/ld/testsuite/ld-x86-64/tlspic.rd
new file mode 100644
index 0000000..798703e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlspic.rd
@@ -0,0 +1,144 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as: --64
+#ld: -shared -melf_x86_64
+#readelf: -WSsrl
+#target: x86_64-*-*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 00 +0 +0 +0
+ +\[[ 0-9]+\] .hash +.*
+ +\[[ 0-9]+\] .dynsym +.*
+ +\[[ 0-9]+\] .dynstr +.*
+ +\[[ 0-9]+\] .rela.dyn +.*
+ +\[[ 0-9]+\] .rela.plt +.*
+ +\[[ 0-9]+\] .plt +.*
+ +\[[ 0-9]+\] .text +PROGBITS +0+1000 0+1000 0+1ac 00 +AX +0 +0 4096
+ +\[[ 0-9]+\] .tdata +PROGBITS +0+2011ac 0+11ac 0+60 00 WAT +0 +0 +1
+ +\[[ 0-9]+\] .tbss +NOBITS +0+20120c 0+120c 0+20 00 WAT +0 +0 +1
+ +\[[ 0-9]+\] .dynamic +DYNAMIC +0+201210 0+1210 0+130 10 +WA +3 +0 +8
+ +\[[ 0-9]+\] .got +PROGBITS +0+201340 0+1340 0+90 08 +WA +0 +0 +8
+ +\[[ 0-9]+\] .got.plt +PROGBITS +0+2013d0 0+13d0 0+20 08 +WA +0 +0 +8
+ +\[[ 0-9]+\] .shstrtab +.*
+ +\[[ 0-9]+\] .symtab +.*
+ +\[[ 0-9]+\] .strtab +.*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x1000
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +LOAD +0x0+ 0x0+ 0x0+ 0x[0-9a-f]+ 0x[0-9a-f]+ R E 0x200000
+ +LOAD +0x0+11ac 0x0+2011ac 0x0+2011ac 0x0+244 0x0+244 RW +0x200000
+ +DYNAMIC +0x0+1210 0x0+201210 0x0+201210 0x0+130 0x0+130 RW +0x8
+ +TLS +0x0+11ac 0x0+2011ac 0x0+2011ac 0x0+60 0x0+80 R +0x1
+
+ Section to Segment mapping:
+ +Segment Sections...
+ +00 +.hash .dynsym .dynstr .rela.dyn .rela.plt .plt .text *
+ +01 +.tdata .dynamic .got .got.plt *
+ +02 +.dynamic *
+ +03 +.tdata .tbss *
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 14 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_X86_64_DTPMOD64 +0+
+[0-9a-f ]+R_X86_64_TPOFF64 +0+24
+[0-9a-f ]+R_X86_64_TPOFF64 +0+30
+[0-9a-f ]+R_X86_64_DTPMOD64 +0+
+[0-9a-f ]+R_X86_64_DTPMOD64 +0+
+[0-9a-f ]+R_X86_64_TPOFF64 +0+64
+[0-9a-f ]+R_X86_64_TPOFF64 +0+50
+[0-9a-f ]+R_X86_64_TPOFF64 +0+70
+[0-9a-f ]+R_X86_64_DTPMOD64 +0+
+[0-9a-f ]+R_X86_64_TPOFF64 +0+44
+[0-9a-f ]+R_X86_64_TPOFF64 +0+10 sg5 \+ 0
+[0-9a-f ]+R_X86_64_DTPMOD64 +0+ sg1 \+ 0
+[0-9a-f ]+R_X86_64_DTPOFF64 +0+ sg1 \+ 0
+[0-9a-f ]+R_X86_64_TPOFF64 +0+4 sg2 \+ 0
+
+Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f ]+R_X86_64_JUMP_SLOT +0+ __tls_get_addr \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND *
+.* SECTION +LOCAL +DEFAULT +7 *
+.* SECTION +LOCAL +DEFAULT +8 *
+.* TLS +GLOBAL +DEFAULT +8 sg8
+.* TLS +GLOBAL +DEFAULT +8 sg3
+.* TLS +GLOBAL +DEFAULT +8 sg4
+.* TLS +GLOBAL +DEFAULT +8 sg5
+.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr
+.* TLS +GLOBAL +DEFAULT +8 sg1
+.* FUNC +GLOBAL +DEFAULT +7 fn1
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* TLS +GLOBAL +DEFAULT +8 sg2
+.* TLS +GLOBAL +DEFAULT +8 sg6
+.* TLS +GLOBAL +DEFAULT +8 sg7
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+.* NOTYPE +LOCAL +DEFAULT +UND *
+.* SECTION +LOCAL +DEFAULT +1 *
+.* SECTION +LOCAL +DEFAULT +2 *
+.* SECTION +LOCAL +DEFAULT +3 *
+.* SECTION +LOCAL +DEFAULT +4 *
+.* SECTION +LOCAL +DEFAULT +5 *
+.* SECTION +LOCAL +DEFAULT +6 *
+.* SECTION +LOCAL +DEFAULT +7 *
+.* SECTION +LOCAL +DEFAULT +8 *
+.* SECTION +LOCAL +DEFAULT +9 *
+.* SECTION +LOCAL +DEFAULT +10 *
+.* SECTION +LOCAL +DEFAULT +11 *
+.* SECTION +LOCAL +DEFAULT +12 *
+.* TLS +LOCAL +DEFAULT +8 sl1
+.* TLS +LOCAL +DEFAULT +8 sl2
+.* TLS +LOCAL +DEFAULT +8 sl3
+.* TLS +LOCAL +DEFAULT +8 sl4
+.* TLS +LOCAL +DEFAULT +8 sl5
+.* TLS +LOCAL +DEFAULT +8 sl6
+.* TLS +LOCAL +DEFAULT +8 sl7
+.* TLS +LOCAL +DEFAULT +8 sl8
+.* TLS +LOCAL +DEFAULT +9 sH1
+.* OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC
+.* TLS +LOCAL +DEFAULT +8 sh3
+.* TLS +LOCAL +DEFAULT +9 sH2
+.* TLS +LOCAL +DEFAULT +9 sH7
+.* TLS +LOCAL +DEFAULT +8 sh7
+.* TLS +LOCAL +DEFAULT +8 sh8
+.* TLS +LOCAL +DEFAULT +9 sH4
+.* TLS +LOCAL +DEFAULT +8 sh4
+.* TLS +LOCAL +DEFAULT +9 sH3
+.* TLS +LOCAL +DEFAULT +8 sh5
+.* TLS +LOCAL +DEFAULT +9 sH5
+.* TLS +LOCAL +DEFAULT +9 sH6
+.* TLS +LOCAL +DEFAULT +9 sH8
+.* TLS +LOCAL +DEFAULT +8 sh1
+.* OBJECT +LOCAL +DEFAULT +ABS _GLOBAL_OFFSET_TABLE_
+.* TLS +LOCAL +DEFAULT +8 sh2
+.* TLS +LOCAL +DEFAULT +8 sh6
+.* TLS +GLOBAL +DEFAULT +8 sg8
+.* TLS +GLOBAL +DEFAULT +8 sg3
+.* TLS +GLOBAL +DEFAULT +8 sg4
+.* TLS +GLOBAL +DEFAULT +8 sg5
+.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr
+.* TLS +GLOBAL +DEFAULT +8 sg1
+.* FUNC +GLOBAL +DEFAULT +7 fn1
+.* NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+.* TLS +GLOBAL +DEFAULT +8 sg2
+.* TLS +GLOBAL +DEFAULT +8 sg6
+.* TLS +GLOBAL +DEFAULT +8 sg7
+.* NOTYPE +GLOBAL +DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL +DEFAULT +ABS _end
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlspic.sd b/binutils-2.21/ld/testsuite/ld-x86-64/tlspic.sd
new file mode 100644
index 0000000..666c774
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlspic.sd
@@ -0,0 +1,19 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as: --64
+#ld: -shared -melf_x86_64
+#objdump: -sj.got
+#target: x86_64-*-*
+
+.*: +file format elf64-x86-64
+
+Contents of section .got:
+ 201340 00000000 00000000 20000000 00000000 .*
+ 201350 00000000 00000000 00000000 00000000 .*
+ 201360 00000000 00000000 00000000 00000000 .*
+ 201370 00000000 00000000 60000000 00000000 .*
+ 201380 00000000 00000000 00000000 00000000 .*
+ 201390 00000000 00000000 00000000 00000000 .*
+ 2013a0 00000000 00000000 00000000 00000000 .*
+ 2013b0 00000000 00000000 00000000 00000000 .*
+ 2013c0 40000000 00000000 00000000 00000000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlspic.td b/binutils-2.21/ld/testsuite/ld-x86-64/tlspic.td
new file mode 100644
index 0000000..67eb4f2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlspic.td
@@ -0,0 +1,16 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as: --64
+#ld: -shared -melf_x86_64
+#objdump: -sj.tdata
+#target: x86_64-*-*
+
+.*: +file format elf64-x86-64
+
+Contents of section .tdata:
+ 2011ac 11000000 12000000 13000000 14000000 .*
+ 2011bc 15000000 16000000 17000000 18000000 .*
+ 2011cc 41000000 42000000 43000000 44000000 .*
+ 2011dc 45000000 46000000 47000000 48000000 .*
+ 2011ec 01010000 02010000 03010000 04010000 .*
+ 2011fc 05010000 06010000 07010000 08010000 .*
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlspic1.s b/binutils-2.21/ld/testsuite/ld-x86-64/tlspic1.s
new file mode 100644
index 0000000..5e26f26
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlspic1.s
@@ -0,0 +1,187 @@
+ /* Force .data aligned to 4K, so .got very likely gets at 0x102190
+ (0x60 bytes .tdata and 0x130 bytes .dynamic) */
+ .data
+ .balign 4096
+ .section ".tdata", "awT", @progbits
+ .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
+ .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+ .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+sg1: .long 17
+sg2: .long 18
+sg3: .long 19
+sg4: .long 20
+sg5: .long 21
+sg6: .long 22
+sg7: .long 23
+sg8: .long 24
+sl1: .long 65
+sl2: .long 66
+sl3: .long 67
+sl4: .long 68
+sl5: .long 69
+sl6: .long 70
+sl7: .long 71
+sl8: .long 72
+sh1: .long 257
+sh2: .long 258
+sh3: .long 259
+sh4: .long 260
+sh5: .long 261
+sh6: .long 262
+sh7: .long 263
+sh8: .long 264
+ /* Force .text aligned to 4K, so it very likely gets at 0x1000. */
+ .text
+ .balign 4096
+ .globl fn1
+ .type fn1,@function
+fn1:
+ pushq %rbp
+ movq %rsp, %rbp
+ nop;nop;nop;nop
+
+ /* GD */
+ .byte 0x66
+ leaq sg1@tlsgd(%rip), %rdi
+ .word 0x6666
+ rex64
+ call __tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> IE because variable is referenced through IE too */
+ .byte 0x66
+ leaq sg2@tlsgd(%rip), %rdi
+ .word 0x6666
+ rex64
+ call __tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD against local variable */
+ .byte 0x66
+ leaq sl1@tlsgd(%rip), %rdi
+ .word 0x6666
+ rex64
+ call __tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> IE against local variable referenced through IE too */
+ .byte 0x66
+ leaq sl2@tlsgd(%rip), %rdi
+ .word 0x6666
+ rex64
+ call __tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD against hidden and local variable */
+ .byte 0x66
+ leaq sh1@tlsgd(%rip), %rdi
+ .word 0x6666
+ rex64
+ call __tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> IE against hidden and local variable referenced through
+ IE too */
+ .byte 0x66
+ leaq sh2@tlsgd(%rip), %rdi
+ .word 0x6666
+ rex64
+ call __tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD against hidden but not local variable */
+ .byte 0x66
+ leaq sH1@tlsgd(%rip), %rdi
+ .word 0x6666
+ rex64
+ call __tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* GD -> IE against hidden but not local variable referenced through
+ IE too */
+ .byte 0x66
+ leaq sH2@tlsgd(%rip), %rdi
+ .word 0x6666
+ rex64
+ call __tls_get_addr@plt
+ nop;nop;nop;nop
+
+ /* LD */
+ leaq sl1@tlsld(%rip), %rdi
+ call __tls_get_addr@plt
+ nop;nop
+ leaq sl1@dtpoff(%rax), %rdx
+ nop;nop
+ leaq 2+sl2@dtpoff(%rax), %r9
+ nop;nop;nop;nop
+
+ /* LD against hidden and local variables */
+ leaq sh1@tlsld(%rip), %rdi
+ call __tls_get_addr@plt
+ nop;nop
+ leaq sh1@dtpoff(%rax), %rdx
+ nop;nop
+ leaq sh2@dtpoff+3(%rax), %rcx
+ nop;nop;nop;nop
+
+ /* LD against hidden but not local variables */
+ leaq sH1@tlsld(%rip), %rdi
+ call __tls_get_addr@plt
+ nop;nop
+ leaq sH1@dtpoff(%rax), %r12
+ nop;nop
+ leaq sH2@dtpoff+1(%rax), %rcx
+ nop;nop
+
+ /* IE against global var */
+ movq %fs:0, %rcx
+ nop;nop
+ addq sg2@gottpoff(%rip), %rcx
+ nop;nop;nop;nop
+
+ /* IE against local var */
+ movq %fs:0, %r14
+ nop;nop
+ addq sl2@gottpoff(%rip), %r14
+ nop;nop;nop;nop
+
+ /* IE against hidden and local var */
+ movq %fs:0, %rcx
+ nop;nop
+ addq sh2@gottpoff(%rip), %rcx
+ nop;nop;nop;nop
+
+ /* IE against hidden but not local var */
+ movq %fs:0, %rcx
+ nop;nop
+ addq sH2@gottpoff(%rip), %rcx
+ nop;nop;nop;nop
+
+ /* Direct access through %fs */
+
+ /* IE against global var */
+ movq sg5@gottpoff(%rip), %rcx
+ nop;nop
+ movq %fs:(%rcx), %rdx
+ nop;nop;nop;nop
+
+ /* IE against local var */
+ movq sl5@gottpoff(%rip), %r10
+ nop;nop
+ movq %fs:(%r10), %r12
+ nop;nop;nop;nop
+
+ /* IE against hidden and local var */
+ movq sh5@gottpoff(%rip), %rdx
+ nop;nop
+ movq %fs:(%rdx), %rdx
+ nop;nop;nop;nop
+
+ /* IE against hidden but not local var */
+ movq sH5@gottpoff(%rip), %rcx
+ nop;nop
+ movq %fs:(%rcx), %rdx
+ nop;nop;nop;nop
+
+ leave
+ ret
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlspic2.s b/binutils-2.21/ld/testsuite/ld-x86-64/tlspic2.s
new file mode 100644
index 0000000..5513f9b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlspic2.s
@@ -0,0 +1,11 @@
+ .section ".tbss", "awT", @nobits
+ .globl sH1, sH2, sH3, sH4, sH5, sH6, sH7, sH8
+ .hidden sH1, sH2, sH3, sH4, sH5, sH6, sH7, sH8
+sH1: .space 4
+sH2: .space 4
+sH3: .space 4
+sH4: .space 4
+sH5: .space 4
+sH6: .space 4
+sH7: .space 4
+sH8: .space 4
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlspie1.d b/binutils-2.21/ld/testsuite/ld-x86-64/tlspie1.d
new file mode 100644
index 0000000..e06e8b1
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlspie1.d
@@ -0,0 +1,6 @@
+#name: TLS with PIE
+#as: --64
+#ld: -melf_x86_64 -pie
+#readelf: -r
+
+There are no relocations in this file.
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/tlspie1.s b/binutils-2.21/ld/testsuite/ld-x86-64/tlspie1.s
new file mode 100644
index 0000000..2e9db66
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/tlspie1.s
@@ -0,0 +1,58 @@
+ .text
+ .globl __tls_get_addr
+ .type __tls_get_addr, @function
+__tls_get_addr:
+ ret
+ .size __tls_get_addr, .-__tls_get_addr
+.globl _start
+ .type _start, @function
+_start:
+ movq foo3@GOTTPOFF(%rip), %rax
+ pushq %rbx
+ movl %fs:foo2@TPOFF, %ebx
+ addl %fs:foo1@TPOFF, %ebx
+ addl %fs:(%rax), %ebx
+ leaq foo4@TLSLD(%rip), %rdi
+ call __tls_get_addr@PLT
+ addl foo4@DTPOFF(%rax), %ebx
+ .byte 0x66
+ leaq foo5@TLSGD(%rip), %rdi
+ .value 0x6666
+ rex64
+ call __tls_get_addr@PLT
+ addl (%rax), %ebx
+ movl %ebx, %eax
+ popq %rbx
+ ret
+ .size _start, .-_start
+.globl foo1
+ .section .tbss,"awT",@nobits
+ .align 4
+ .type foo1, @object
+ .size foo1, 4
+foo1:
+ .zero 4
+.globl foo2
+ .align 4
+ .type foo2, @object
+ .size foo2, 4
+foo2:
+ .zero 4
+.globl foo3
+ .align 4
+ .type foo3, @object
+ .size foo3, 4
+foo3:
+ .zero 4
+.globl foo4
+ .align 4
+ .type foo4, @object
+ .size foo4, 4
+foo4:
+ .zero 4
+.globl foo5
+ .align 4
+ .type foo5, @object
+ .size foo5, 4
+foo5:
+ .zero 4
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/undefined.s b/binutils-2.21/ld/testsuite/ld-x86-64/undefined.s
new file mode 100644
index 0000000..60c1c94
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/undefined.s
@@ -0,0 +1,154 @@
+ .file "undefined.c"
+ .section .debug_abbrev,"",@progbits
+.Ldebug_abbrev0:
+ .section .debug_info,"",@progbits
+.Ldebug_info0:
+ .section .debug_line,"",@progbits
+.Ldebug_line0:
+ .text
+.Ltext0:
+ .p2align 4,,15
+.globl function
+ .type function, @function
+function:
+.LFB2:
+ .file 1 "undefined.c"
+ .loc 1 8 0
+ .loc 1 9 0
+ xorl %eax, %eax
+ jmp this_function_is_not_defined
+.LFE2:
+ .size function, .-function
+ .section .debug_frame,"",@progbits
+.Lframe0:
+ .long .LECIE0-.LSCIE0
+.LSCIE0:
+ .long 0xffffffff
+ .byte 0x1
+ .string ""
+ .uleb128 0x1
+ .sleb128 -8
+ .byte 0x10
+ .byte 0xc
+ .uleb128 0x7
+ .uleb128 0x8
+ .byte 0x90
+ .uleb128 0x1
+ .align 8
+.LECIE0:
+.LSFDE0:
+ .long .LEFDE0-.LASFDE0
+.LASFDE0:
+ .long .Lframe0
+ .quad .LFB2
+ .quad .LFE2-.LFB2
+ .align 8
+.LEFDE0:
+ .text
+.Letext0:
+ .section .debug_info
+ .long 0x4c
+ .value 0x2
+ .long .Ldebug_abbrev0
+ .byte 0x8
+ .uleb128 0x1
+ .long .Ldebug_line0
+ .quad .Letext0
+ .quad .Ltext0
+ .long .LASF0
+ .byte 0x1
+ .long .LASF1
+ .uleb128 0x2
+ .byte 0x1
+ .long .LASF2
+ .byte 0x1
+ .byte 0x8
+ .long 0x48
+ .quad .LFB2
+ .quad .LFE2
+ .byte 0x2
+ .byte 0x77
+ .sleb128 8
+ .uleb128 0x3
+ .string "int"
+ .byte 0x4
+ .byte 0x5
+ .byte 0x0
+ .section .debug_abbrev
+ .uleb128 0x1
+ .uleb128 0x11
+ .byte 0x1
+ .uleb128 0x10
+ .uleb128 0x6
+ .uleb128 0x12
+ .uleb128 0x1
+ .uleb128 0x11
+ .uleb128 0x1
+ .uleb128 0x25
+ .uleb128 0xe
+ .uleb128 0x13
+ .uleb128 0xb
+ .uleb128 0x3
+ .uleb128 0xe
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x2
+ .uleb128 0x2e
+ .byte 0x0
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x11
+ .uleb128 0x1
+ .uleb128 0x12
+ .uleb128 0x1
+ .uleb128 0x40
+ .uleb128 0xa
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x24
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x3e
+ .uleb128 0xb
+ .byte 0x0
+ .byte 0x0
+ .byte 0x0
+ .section .debug_pubnames,"",@progbits
+ .long 0x1b
+ .value 0x2
+ .long .Ldebug_info0
+ .long 0x50
+ .long 0x29
+ .string "function"
+ .long 0x0
+ .section .debug_aranges,"",@progbits
+ .long 0x2c
+ .value 0x2
+ .long .Ldebug_info0
+ .byte 0x8
+ .byte 0x0
+ .value 0x0
+ .value 0x0
+ .quad .Ltext0
+ .quad .Letext0-.Ltext0
+ .quad 0x0
+ .quad 0x0
+ .section .debug_str,"MS",@progbits,1
+.LASF0:
+ .string "GNU C 3.4.6"
+.LASF1:
+ .string "undefined.c"
+.LASF2:
+ .string "function"
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/unique1.d b/binutils-2.21/ld/testsuite/ld-x86-64/unique1.d
new file mode 100644
index 0000000..00afd38
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/unique1.d
@@ -0,0 +1,10 @@
+#name: STB_GNU_UNIQUE with -Bsymbolic
+#as: --64
+#ld: -melf_x86_64 -shared -Bsymbolic
+#readelf: -rs --wide
+
+#...
+[0-9a-f]+ +[0-9a-f]+ +R_X86_64_GLOB_DAT +[0-9a-f]+ bar \+ 0
+#...
+ +[0-9]+: +[0-9a-f]+ +8 +OBJECT +UNIQUE +DEFAULT +[0-9]+ bar
+#pass
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/unique1.s b/binutils-2.21/ld/testsuite/ld-x86-64/unique1.s
new file mode 100644
index 0000000..3def1b3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/unique1.s
@@ -0,0 +1,9 @@
+ .text
+foo:
+ movq bar@GOTPCREL(%rip), %rbp
+ .weak bar
+ .data
+ .type bar, @gnu_unique_object
+ .size bar, 8
+bar:
+ .quad 8
diff --git a/binutils-2.21/ld/testsuite/ld-x86-64/x86-64.exp b/binutils-2.21/ld/testsuite/ld-x86-64/x86-64.exp
new file mode 100644
index 0000000..12f5cad
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-x86-64/x86-64.exp
@@ -0,0 +1,143 @@
+# Expect script for ld-x86_64 tests
+# Copyright (C) 2002, 2005, 2006, 2007, 2008, 2009 Free Software Foundation
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# Test x86_64 linking; all types of relocs. This tests the assembler and
+# tools like objdump as well as the linker.
+
+if { !([istarget "x86_64-*-elf*"]
+ || [istarget "x86_64-*-linux*"]) } {
+ return
+}
+
+# List contains test-items with 3 items followed by 2 lists:
+# 0:name 1:ld options 2:assembler options
+# 3:filenames of assembler files 4: action and options. 5: name of output file
+
+# Actions:
+# objdump: Apply objdump options on result. Compare with regex (last arg).
+# nm: Apply nm options on result. Compare with regex (last arg).
+# readelf: Apply readelf options on result. Compare with regex (last arg).
+
+set x86_64tests {
+ {"TLS -fpic -shared transitions" "-shared -melf_x86_64"
+ "--64" {tlspic1.s tlspic2.s}
+ {{readelf -WSsrl tlspic.rd} {objdump -drj.text tlspic.dd}
+ {objdump -sj.got tlspic.sd} {objdump -sj.tdata tlspic.td}}
+ "libtlspic.so"}
+ {"TLS descriptor -fpic -shared transitions" "-shared -melf_x86_64"
+ "--64" {tlsdesc.s tlspic2.s}
+ {{readelf -WSsrld tlsdesc.rd} {objdump -drj.text tlsdesc.dd}
+ {objdump "-s -j.got -j.got.plt" tlsdesc.sd} {objdump -sj.tdata tlsdesc.td}
+ {objdump -drj.plt tlsdesc.pd}} "libtlsdesc.so"}
+ {"Helper shared library" "-shared -melf_x86_64"
+ "--64" {tlslib.s} {} "libtlslib.so"}
+ {"TLS -fpic and -fno-pic exec transitions"
+ "-melf_x86_64 tmpdir/libtlslib.so" "--64" {tlsbinpic.s tlsbin.s}
+ {{readelf -WSsrl tlsbin.rd} {objdump -drj.text tlsbin.dd}
+ {objdump -sj.got tlsbin.sd} {objdump -sj.tdata tlsbin.td}}
+ "tlsbin"}
+ {"TLS descriptor -fpic and -fno-pic exec transitions"
+ "-melf_x86_64 tmpdir/libtlslib.so" "--64" {tlsbindesc.s tlsbin.s}
+ {{readelf -WSsrl tlsbindesc.rd} {objdump -drj.text tlsbindesc.dd}
+ {objdump -sj.got tlsbindesc.sd} {objdump -sj.tdata tlsbindesc.td}}
+ "tlsbindesc"}
+ {"TLS with global dynamic and descriptors"
+ "-shared -melf_x86_64" "--64" {tlsgdesc.s}
+ {{readelf -WSsrl tlsgdesc.rd} {objdump -drj.text tlsgdesc.dd}}
+ "libtlsgdesc.so"}
+ {"TLS in debug sections" "-melf_x86_64"
+ "--64" {tlsg.s}
+ {{objdump -sj.debug_foobar tlsg.sd}} "tlsg"}
+ {"TLS GD->LE transition" "-melf_x86_64"
+ "--64" {tlsgd1.s}
+ {{objdump -dwr tlsgd1.dd}} "tlsgd1"}
+ {"TLS LD->LE transition" "-melf_x86_64"
+ "--64" {tlsld1.s}
+ {{objdump -dwr tlsld1.dd}} "tlsld1"}
+ {"TLS IE->LE transition" "-melf_x86_64"
+ "--64" {tlsie1.s}
+ {{objdump -dwr tlsie1.dd}} "tlsie1"}
+ {"Helper 64bit object 1" "-r -melf_x86_64"
+ "--64" {mixed1a.s} {} "libmixe1a.o"}
+ {"Helper 32bit object 1" "-r -melf_i386"
+ "--32" {mixed1b.s} {} "libmixe1b.o"}
+ {"Helper 64bit object 2" "-r -melf_x86_64"
+ "--64" {mixed2a.s} {} "libmixe2a.o"}
+ {"Helper 32bit object 2" "-r -melf_i386"
+ "--32" {mixed2b.s} {} "libmixe2b.o"}
+ {"Split by file with 'l' flag on section." "-split-by-file -r"
+ "--64" {split-by-file1.s split-by-file2.s}
+ {{readelf -SW split-by-file.rd}} "split-by-file.o"}
+}
+
+run_ld_link_tests $x86_64tests
+
+global link_output
+global ld
+
+set test_name "Mixed x86_64 and i386 input test 1"
+set test mixed1
+if { ![ld_simple_link $ld tmpdir/$test "-melf_x86_64 tmpdir/${test}a.o tmpdir/${test}b.o"] } {
+ if [string match "*i386 architecture of input file `tmpdir/${test}b.o' is incompatible with i386:x86-64 output*" $link_output] {
+ pass "$test_name"
+ } {
+ fail "$test_name"
+ }
+}
+
+set test_name "Mixed x86_64 and i386 input test 2"
+set test mixed2
+if { ![ld_simple_link $ld tmpdir/$test "-melf_x86_64 tmpdir/${test}a.o tmpdir/${test}b.o"] } {
+ if [string match "*i386 architecture of input file `tmpdir/${test}b.o' is incompatible with i386:x86-64 output*" $link_output] {
+ pass "$test_name"
+ } {
+ fail "$test_name"
+ }
+}
+
+run_dump_test "abs"
+run_dump_test "abs-l1om"
+run_dump_test "pcrel8"
+run_dump_test "pcrel16"
+run_dump_test "tlsgd2"
+run_dump_test "tlsgd3"
+run_dump_test "tlsie2"
+run_dump_test "tlsie3"
+run_dump_test "hidden1"
+run_dump_test "hidden2"
+run_dump_test "hidden3"
+run_dump_test "protected1"
+run_dump_test "protected2"
+run_dump_test "protected2-l1om"
+run_dump_test "protected3"
+run_dump_test "protected3-l1om"
+run_dump_test "tlsle1"
+run_dump_test "tlspie1"
+run_dump_test "unique1"
+run_dump_test "nogot1"
+run_dump_test "nogot2"
+run_dump_test "discarded1"
+
+if { ![istarget "x86_64-*-linux*"] } {
+ return
+}
+
+run_dump_test "compressed1"
diff --git a/binutils-2.21/ld/testsuite/ld-xc16x/absrel.d b/binutils-2.21/ld/testsuite/ld-xc16x/absrel.d
new file mode 100644
index 0000000..a6941c2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xc16x/absrel.d
@@ -0,0 +1,28 @@
+
+.*: file format elf32-xc16x
+
+Disassembly of section .text:
+
+00000400 <_start>:
+ 400: e0 f5 mov r5,#0xf
+ 402: e0 f6 mov r6,#0xf
+
+00000404 <.12>:
+ 404: f2 f5 1c 04 mov r5,0x41c
+ 408: e0 d6 mov r6,#0xd
+ 40a: f2 f7 1c 04 mov r7,0x41c
+ 40e: e0 d8 mov r8,#0xd
+
+00000410 <.13>:
+ 410: f2 f5 1c 04 mov r5,0x41c
+ 414: e0 f6 mov r6,#0xf
+ 416: f2 f7 1c 04 mov r7,0x41c
+ 41a: e0 f8 mov r8,#0xf
+
+0000041c <.end>:
+.*: ca 09 04 04 calla- cc_nusr0,404 <.12>
+.*: ca 19 04 04 calla- cc_nusr1,404 <.12>
+.*: ca 29 04 04 calla- cc_usr0,404 <.12>
+.*: ea 09 04 04 jmpa- cc_nusr0,404 <.12>
+.*: ea 19 04 04 jmpa- cc_nusr1,404 <.12>
+.*: ea 29 04 04 jmpa- cc_usr0,404 <.12>
diff --git a/binutils-2.21/ld/testsuite/ld-xc16x/absrel.s b/binutils-2.21/ld/testsuite/ld-xc16x/absrel.s
new file mode 100644
index 0000000..3bfe70e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xc16x/absrel.s
@@ -0,0 +1,31 @@
+ .global _start
+_start:
+ mov r5,#0xf
+ mov r6,#0xf
+
+.12:
+ mov r5,.end
+ mov r6,#0xd
+ mov r7,.end
+ mov r8,#0xd
+.13:
+ mov r5,.end
+ mov r6,#0xf
+ mov r7,.end
+ mov r8,#0xf
+.end:
+ ;calla cc_UC,.13
+ ;calla cc_usr1,.12
+
+ ;calla+ cc_UGT,.12
+ calla- cc_nusr0,.12
+ calla- cc_nusr1,.12
+ calla- cc_usr0,.12
+
+ ;jmpa cc_UGT,.end
+ ;jmpa cc_nusr0,.end
+
+ ;jmpa+ cc_UGT,.12
+ jmpa- cc_nusr0,.12
+ jmpa- cc_nusr1,.12
+ jmpa- cc_usr0,.12
diff --git a/binutils-2.21/ld/testsuite/ld-xc16x/offset.d b/binutils-2.21/ld/testsuite/ld-xc16x/offset.d
new file mode 100644
index 0000000..a879c44
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xc16x/offset.d
@@ -0,0 +1,18 @@
+
+.*: file format elf32-xc16x
+
+Disassembly of section .text:
+
+00000400 <_start>:
+ 400: e0 f8 mov r8,#0xf
+ 402: fa 00 08 04 jmps #seg:0x0,#sof:0x408
+ 406: e0 f9 mov r9,#0xf
+
+00000408 <.12>:
+ 408: e0 f5 mov r5,#0xf
+ 40a: e0 f7 mov r7,#0xf
+ 40c: da 00 10 04 calls #seg:0x0,#sof:0x410
+
+00000410 <.13>:
+ 410: e0 f6 mov r6,#0xf
+ 412: e0 f8 mov r8,#0xf
diff --git a/binutils-2.21/ld/testsuite/ld-xc16x/offset.s b/binutils-2.21/ld/testsuite/ld-xc16x/offset.s
new file mode 100644
index 0000000..b3aad19
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xc16x/offset.s
@@ -0,0 +1,13 @@
+ .global _start
+_start:
+ mov r8,#0xf
+ jmps #seg:.12,#sof:.12
+ mov r9,#0xf
+.12:
+ mov r5,#0xf
+ mov r7,#0xf
+ calls #seg:.13,#sof:.13
+.13:
+ mov r6,#0xf
+ mov r8,#0xf
+ \ No newline at end of file
diff --git a/binutils-2.21/ld/testsuite/ld-xc16x/pcreloc.d b/binutils-2.21/ld/testsuite/ld-xc16x/pcreloc.d
new file mode 100644
index 0000000..8f363b5
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xc16x/pcreloc.d
@@ -0,0 +1,34 @@
+
+.*: file format elf32-xc16x
+
+Disassembly of section .text:
+
+00000400 <_start>:
+ 400: e0 f5 mov r5,#0xf
+ 402: e0 f6 mov r6,#0xf
+ 404: e0 f7 mov r7,#0xf
+ 406: e0 f8 mov r8,#0xf
+ 408: e0 f9 mov r9,#0xf
+ 40a: e0 fa mov r10,#0xf
+ 40c: e0 fb mov r11,#0xf
+ 40e: e0 fc mov r12,#0xf
+
+00000410 <.12>:
+ 410: 2d 07 jmpr cc_Z,7
+ 412: 3d fe jmpr cc_NZ,254
+ 414: 8d fd jmpr cc_ULT,253
+ 416: 8d 45 jmpr cc_ULT,69
+ 418: 9d 06 jmpr cc_UGE,6
+ 41a: 0d 05 jmpr cc_UC,5
+ 41c: 2d 04 jmpr cc_Z,4
+ 41e: 3d 03 jmpr cc_NZ,3
+
+00000420 <.13>:
+ 420: fd 02 jmpr cc_ULE,2
+ 422: dd 01 jmpr cc_SGE,1
+ 424: bd 00 jmpr cc_SLE,0
+
+00000426 <.end>:
+ 426: 1d f4 jmpr cc_NET,244
+ 428: bb fe callr 254
+ 42a: bb fd callr 253
diff --git a/binutils-2.21/ld/testsuite/ld-xc16x/pcreloc.s b/binutils-2.21/ld/testsuite/ld-xc16x/pcreloc.s
new file mode 100644
index 0000000..ed77101
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xc16x/pcreloc.s
@@ -0,0 +1,27 @@
+ .global _start
+_start:
+ mov r5,#0xf
+ mov r6,#0xf
+ mov r7,#0xf
+ mov r8,#0xf
+ mov r9,#0xf
+ mov r10,#0xf
+ mov r11,#0xf
+ mov r12,#0xf
+.12:
+ jmpr cc_Z,.13
+ jmpr cc_NZ,.12
+ jmpr cc_C,.12
+ jmpr cc_C,0x45
+ jmpr cc_NC,.end
+ jmpr cc_UC,.end
+ jmpr cc_EQ,.end
+ jmpr cc_NE,.end
+.13:
+ jmpr cc_ULE,.end
+ jmpr cc_SGE,.end
+ jmpr cc_SLE,.end
+.end:
+ jmpr cc_NET,.12
+ callr .end
+ callr .end
diff --git a/binutils-2.21/ld/testsuite/ld-xc16x/pcrelocl.d b/binutils-2.21/ld/testsuite/ld-xc16x/pcrelocl.d
new file mode 100644
index 0000000..48d9c82
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xc16x/pcrelocl.d
@@ -0,0 +1,34 @@
+
+.*: file format elf32-xc16x
+
+Disassembly of section .text:
+
+00c00300 <_start>:
+ c00300: e0 f5 mov r5,#0xf
+ c00302: e0 f6 mov r6,#0xf
+ c00304: e0 f7 mov r7,#0xf
+ c00306: e0 f8 mov r8,#0xf
+ c00308: e0 f9 mov r9,#0xf
+ c0030a: e0 fa mov r10,#0xf
+ c0030c: e0 fb mov r11,#0xf
+ c0030e: e0 fc mov r12,#0xf
+
+00c00310 <.12>:
+ c00310: 2d 07 jmpr cc_Z,7
+ c00312: 3d fe jmpr cc_NZ,254
+ c00314: 8d fd jmpr cc_ULT,253
+ c00316: 8d 45 jmpr cc_ULT,69
+ c00318: 9d 06 jmpr cc_UGE,6
+ c0031a: 0d 05 jmpr cc_UC,5
+ c0031c: 2d 04 jmpr cc_Z,4
+ c0031e: 3d 03 jmpr cc_NZ,3
+
+00c00320 <.13>:
+ c00320: fd 02 jmpr cc_ULE,2
+ c00322: dd 01 jmpr cc_SGE,1
+ c00324: bd 00 jmpr cc_SLE,0
+
+00c00326 <.end>:
+ c00326: 1d f4 jmpr cc_NET,244
+ c00328: bb fe callr 254
+ c0032a: bb fd callr 253
diff --git a/binutils-2.21/ld/testsuite/ld-xc16x/xc16x.exp b/binutils-2.21/ld/testsuite/ld-xc16x/xc16x.exp
new file mode 100644
index 0000000..2f7b9ff
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xc16x/xc16x.exp
@@ -0,0 +1,68 @@
+# Expect script for ld-xstormy16 tests
+# Copyright (C) 2003, 2006, 2007 Free Software Foundation
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# Test xc16x linking of pc-relative relocs. This tests the assembler and
+# tools like objdump as well as the linker.
+
+if {!([istarget "xc16x*-*-*"]) } {
+ return
+}
+
+# Set up a list as described in ld-lib.exp
+
+set xc16x_tests {
+ {
+ "xc16x pc-relative relocs linker test"
+ ""
+ ""
+ { "pcreloc.s" }
+ { {objdump -Dz pcreloc.d} }
+ "pcreloc"
+ }
+}
+
+set xc16xabs_tests {
+ {
+ "xc16x absolute relative address linker test"
+ ""
+ ""
+ { "absrel.s" }
+ { {objdump -Dz absrel.d} }
+ "absrel"
+ }
+}
+
+set xc16xoffset_tests {
+ {
+ "xc16x offset linker test"
+ ""
+ ""
+ { "offset.s" }
+ { {objdump -Dz offset.d} }
+ "offset"
+ }
+}
+
+ run_ld_link_tests $xc16x_tests
+ run_ld_link_tests $xc16xabs_tests
+ run_ld_link_tests $xc16xoffset_tests
+
+
diff --git a/binutils-2.21/ld/testsuite/ld-xstormy16/external.s b/binutils-2.21/ld/testsuite/ld-xstormy16/external.s
new file mode 100644
index 0000000..2907e9e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xstormy16/external.s
@@ -0,0 +1,5 @@
+ .text
+ .global external
+external:
+ nop
+ \ No newline at end of file
diff --git a/binutils-2.21/ld/testsuite/ld-xstormy16/pcrel.d b/binutils-2.21/ld/testsuite/ld-xstormy16/pcrel.d
new file mode 100644
index 0000000..4eac7b2
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xstormy16/pcrel.d
@@ -0,0 +1,33 @@
+
+.*: file format elf32-xstormy16
+
+Disassembly of section .text:
+
+00008000 <_start>:
+ 8000: 00 79 46 80 mov.w 0x0,#0x8046
+ 8004: 00 79 42 80 mov.w 0x0,#0x8042
+ 8008: 00 79 44 80 mov.w 0x0,#0x8044
+ 800c: 00 79 2c 00 mov.w 0x0,#0x2c
+ 8010: 00 79 32 00 mov.w 0x0,#0x32
+ 8014: 00 79 30 00 mov.w 0x0,#0x30
+ 8018: 2c d3 bc 0x8046
+ 801a: 26 d3 bc 0x8042
+ 801c: 26 d3 bc 0x8044
+ 801e: 24 c3 00 00 bc Rx,#0x0,0x8046
+ 8022: 1c c3 00 00 bc Rx,#0x0,0x8042
+ 8026: 1a c3 00 00 bc Rx,#0x0,0x8044
+ 802a: 00 20 18 30 bc r0,#0x0,0x8046
+ 802e: 00 20 10 30 bc r0,#0x0,0x8042
+ 8032: 00 20 0e 30 bc r0,#0x0,0x8044
+ 8036: 10 0d 0c 30 bc r0,r1,0x8046
+ 803a: 10 0d 04 30 bc r0,r1,0x8042
+ 803e: 10 0d 02 30 bc r0,r1,0x8044
+
+00008042 <global>:
+ 8042: 00 00 nop
+
+00008044 <local>:
+ 8044: 00 00 nop
+
+00008046 <external>:
+ 8046: 00 00 nop
diff --git a/binutils-2.21/ld/testsuite/ld-xstormy16/pcrel.s b/binutils-2.21/ld/testsuite/ld-xstormy16/pcrel.s
new file mode 100644
index 0000000..6128e51
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xstormy16/pcrel.s
@@ -0,0 +1,31 @@
+ .text
+ .global _start
+_start:
+ mov 0, # external
+ mov 0, # global
+ mov 0, # local
+
+ mov 0, # external - .
+ mov 0, # global - .
+ mov 0, # local - .
+
+ bc external
+ bc global
+ bc local
+
+ bc rx, #0, external
+ bc rx, #0, global
+ bc rx, #0, local
+
+ bc r0, #0, external
+ bc r0, #0, global
+ bc r0, #0, local
+
+ bc r0, r1, external
+ bc r0, r1, global
+ bc r0, r1, local
+ .global global
+global:
+ nop
+local:
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-xstormy16/xstormy16.exp b/binutils-2.21/ld/testsuite/ld-xstormy16/xstormy16.exp
new file mode 100644
index 0000000..27e9eeb
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xstormy16/xstormy16.exp
@@ -0,0 +1,41 @@
+# Expect script for ld-xstormy16 tests
+# Copyright (C) 2003, 2005, 2007 Free Software Foundation
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# Test xstormy16 linking of pc-relative relocs. This tests the assembler and
+# tools like objdump as well as the linker.
+
+if {!([istarget "xstormy16*-*-*"]) } {
+ return
+}
+
+# Set up a list as described in ld-lib.exp
+
+set xstormy16_tests {
+ { "xstormy16 pc-relative relocs linker test"
+ ""
+ ""
+ { "pcrel.s" "external.s" }
+ { {objdump -Dz pcrel.d} }
+ "pcrel"
+ }
+}
+
+run_ld_link_tests $xstormy16_tests
diff --git a/binutils-2.21/ld/testsuite/ld-xtensa/coalesce.exp b/binutils-2.21/ld/testsuite/ld-xtensa/coalesce.exp
new file mode 100644
index 0000000..c122263
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xtensa/coalesce.exp
@@ -0,0 +1,100 @@
+# Test literal coaslescing for Xtensa targets.
+# By David Heine, Tensilica, Inc.
+# Copyright 2002, 2003, 2005, 2007, 2008
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+if ![istarget "xtensa*-*-*"] {
+ return
+}
+
+set testname "COALESCE"
+
+set OBJDUMPFLAGS "-dr"
+
+#
+# default_ld_objdump
+# run objdump on a file
+#
+proc default_ld_objdump { objdump object outputfile } {
+ global OBJDUMPFLAGS
+ global objdump_output
+ global host_triplet
+
+ if {[which $objdump] == 0} then {
+ perror "$objdump does not exist"
+ return 0
+ }
+
+ if ![info exists OBJDUMPFLAGS] { set OBJDUMPFLAGS "" }
+
+ verbose -log "$objdump $OBJDUMPFLAGS $object >$outputfile"
+
+ catch "exec $objdump $OBJDUMPFLAGS $object >$outputfile" exec_output
+ set exec_output [prune_warnings $exec_output]
+ if [string match "" $exec_output] then {
+ return 1
+ } else {
+ verbose -log "$exec_output"
+ perror "$object: objdump failed"
+ return 0
+ }
+}
+
+
+if ![ld_assemble $as $srcdir/$subdir/coalesce1.s tmpdir/coalesce1.o] {
+ unresolved $testname
+ return
+}
+if ![ld_assemble $as $srcdir/$subdir/coalesce2.s tmpdir/coalesce2.o] {
+ unresolved $testname
+ return
+}
+
+set object "tmpdir/coalesce"
+set outputfile "$object.txt"
+
+if ![ld_simple_link $ld $object "-T $srcdir/$subdir/coalesce.t tmpdir/coalesce1.o tmpdir/coalesce2.o"] {
+ verbose -log "failure in ld"
+ fail $testname
+ return
+}
+
+if ![default_ld_objdump $objdump $object $outputfile ] {
+ verbose -log "failure in objdump"
+ fail $testname
+ return
+}
+
+set file [open $outputfile r]
+set found 0
+
+while { [gets $file line] != -1 } {
+ # verbose "$line" 2
+ if [regexp "^0000000c <main>:" $line] {
+ set found 1
+ }
+}
+close $file
+if $found {
+ pass $testname
+} else {
+ fail $testname
+}
+
diff --git a/binutils-2.21/ld/testsuite/ld-xtensa/coalesce.t b/binutils-2.21/ld/testsuite/ld-xtensa/coalesce.t
new file mode 100644
index 0000000..7bff69f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xtensa/coalesce.t
@@ -0,0 +1,6 @@
+SECTIONS
+{
+ .text 0x00000000 : {
+ *(.literal .text)
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-xtensa/coalesce1.s b/binutils-2.21/ld/testsuite/ld-xtensa/coalesce1.s
new file mode 100644
index 0000000..4374463
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xtensa/coalesce1.s
@@ -0,0 +1,15 @@
+ .global foo
+ .data
+ .global g_name
+ .align 4
+g_name:
+ .word 0xffffffff
+ .text
+ .global main
+ .align 4
+main:
+ entry a5,16
+ movi a5,20000
+ movi a6,g_name
+ call8 foo
+ ret
diff --git a/binutils-2.21/ld/testsuite/ld-xtensa/coalesce2.s b/binutils-2.21/ld/testsuite/ld-xtensa/coalesce2.s
new file mode 100644
index 0000000..7c9a83d
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xtensa/coalesce2.s
@@ -0,0 +1,10 @@
+ .text
+ .global foo
+ .global g_name
+ .align 4
+foo:
+ entry a5,16
+ movi a5,20000
+ movi a6,g_name
+ movi a7,50000
+ ret
diff --git a/binutils-2.21/ld/testsuite/ld-xtensa/lcall.exp b/binutils-2.21/ld/testsuite/ld-xtensa/lcall.exp
new file mode 100644
index 0000000..599c69c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xtensa/lcall.exp
@@ -0,0 +1,114 @@
+# Test Xtensa longcall optimization.
+# By David Heine, Tensilica, Inc.
+# Copyright 2002, 2003, 2005, 2007, 2008
+# Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+if ![istarget "xtensa*-*-*"] {
+ return
+}
+
+set testname "LCALL"
+
+set OBJDUMPFLAGS "-dr"
+
+#
+# default_ld_objdump
+# run objdump on a file
+#
+proc default_ld_objdump { objdump object outputfile } {
+ global OBJDUMPFLAGS
+ global objdump_output
+ global host_triplet
+
+ if {[which $objdump] == 0} then {
+ perror "$objdump does not exist"
+ return 0
+ }
+
+ if ![info exists OBJDUMPFLAGS] { set OBJDUMPFLAGS "" }
+
+ verbose -log "$objdump $OBJDUMPFLAGS $object >$outputfile"
+
+ catch "exec $objdump $OBJDUMPFLAGS $object >$outputfile" exec_output
+ set exec_output [prune_warnings $exec_output]
+ if [string match "" $exec_output] then {
+ return 1
+ } else {
+ verbose -log "$exec_output"
+ perror "$object: objdump failed"
+ return 0
+ }
+}
+
+
+if ![ld_assemble $as $srcdir/$subdir/lcall1.s tmpdir/lcall1.o] {
+ unresolved $testname
+ return
+}
+if ![ld_assemble $as $srcdir/$subdir/lcall2.s tmpdir/lcall2.o] {
+ unresolved $testname
+ return
+}
+
+set object "tmpdir/lcall"
+set outputfile "$object.txt"
+
+if ![ld_simple_link $ld $object "-T $srcdir/$subdir/lcall.t tmpdir/lcall1.o tmpdir/lcall2.o"] {
+ verbose -log "failure in ld"
+ fail $testname
+ return
+}
+
+if ![default_ld_objdump $objdump $object $outputfile ] {
+ verbose -log "failure in objdump"
+ fail $testname
+ return
+}
+
+set file [open $outputfile r]
+while { [gets $file line] != -1 } {
+ # verbose "$line" 2
+ if [regexp "l32r" $line] {
+ verbose -log "Found an l32r in the linked object"
+ verbose -log "$line"
+ fail $testname
+ }
+}
+close $file
+pass $testname
+
+
+set testname "LCALL2"
+set file [open $outputfile r]
+set found 0
+
+while { [gets $file line] != -1 } {
+ # verbose "$line" 2
+ if [regexp "^00000004 <label1>:" $line] {
+ set found 1
+ }
+}
+close $file
+if $found {
+ pass $testname
+} else {
+ fail $testname
+}
+
diff --git a/binutils-2.21/ld/testsuite/ld-xtensa/lcall.t b/binutils-2.21/ld/testsuite/ld-xtensa/lcall.t
new file mode 100644
index 0000000..7bff69f
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xtensa/lcall.t
@@ -0,0 +1,6 @@
+SECTIONS
+{
+ .text 0x00000000 : {
+ *(.literal .text)
+ }
+}
diff --git a/binutils-2.21/ld/testsuite/ld-xtensa/lcall1.s b/binutils-2.21/ld/testsuite/ld-xtensa/lcall1.s
new file mode 100644
index 0000000..3439319
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xtensa/lcall1.s
@@ -0,0 +1,10 @@
+.global foo
+.text
+ .align 4
+label1:
+ .literal .Lunused, 0xffffffff
+ entry a5,16
+.begin longcalls
+ call4 foo
+.end longcalls
+ nop
diff --git a/binutils-2.21/ld/testsuite/ld-xtensa/lcall2.s b/binutils-2.21/ld/testsuite/ld-xtensa/lcall2.s
new file mode 100644
index 0000000..d697096
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xtensa/lcall2.s
@@ -0,0 +1,6 @@
+ .global foo
+ .align 4
+foo:
+ entry a5,16
+ nop
+ ret
diff --git a/binutils-2.21/ld/testsuite/ld-xtensa/tlsbin.dd b/binutils-2.21/ld/testsuite/ld-xtensa/tlsbin.dd
new file mode 100644
index 0000000..c3fad8b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xtensa/tlsbin.dd
@@ -0,0 +1,65 @@
+#source: tlsbin.s
+#as:
+#ld: -melf32xtensa
+#objdump: -drj.text --start-address=0x400238
+#target: xtensa*-*-linux*
+
+.*: +file format elf32-xtensa-.e
+
+Disassembly of section \.text:
+
+0+400238 <_start>:
+ [0-9a-f]+: [0-9a-f]+[ ]+entry a1, 32
+# GD -> IE because variable is not defined in executable
+ [0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a8
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 4001ec <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+add.* a10, a10, a8
+# GD -> IE because variable is not defined in executable where
+# the variable is referenced through IE too
+ [0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a8
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 4001f4 <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+add.* a10, a10, a8
+# GD -> LE with global variable defined in executable
+ [0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a8
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 4001fc <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+add.* a10, a10, a8
+# GD -> LE with local variable defined in executable
+ [0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a8
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 400204 <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+add.* a10, a10, a8
+# GD -> LE with hidden variable defined in executable
+ [0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a8
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 40020c <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+add.* a10, a10, a8
+# LD -> LE
+ [0-9a-f]+: [0-9a-f]+[ ]+nop.*
+ [0-9a-f]+: [0-9a-f]+[ ]+nop.*
+ [0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a10
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a12, 400218 <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+add.* a12, a12, a10
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a13, 40021c <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+add.* a13, a13, a10
+# LD -> LE against hidden variables
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a12, 400220 <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+add.* a12, a12, a10
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a13, 400224 <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+add.* a13, a13, a10
+#
+# IE against global var
+ [0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a2
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a3, 400228 <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+add.* a3, a3, a2
+# IE -> LE against global var defined in exec
+ [0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a4
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a5, 40022c <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+add.* a5, a5, a4
+# IE -> LE against local var
+ [0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a6
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a7, 400230 <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+add.* a7, a7, a6
+# IE -> LE against hidden var
+ [0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a8
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a9, 400234 <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+add.* a9, a9, a8
+#
+ [0-9a-f]+: [0-9a-f]+[ ]+retw.*
diff --git a/binutils-2.21/ld/testsuite/ld-xtensa/tlsbin.rd b/binutils-2.21/ld/testsuite/ld-xtensa/tlsbin.rd
new file mode 100644
index 0000000..dcb9fab
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xtensa/tlsbin.rd
@@ -0,0 +1,118 @@
+#source: tlsbin.s
+#as:
+#ld: -melf32xtensa
+#readelf: -WSsrl
+#target: xtensa*-*-linux*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 00 +0 +0 +0
+ +\[[ 0-9]+\] .interp +.*
+ +\[[ 0-9]+\] .hash +.*
+ +\[[ 0-9]+\] .dynsym +.*
+ +\[[ 0-9]+\] .dynstr +.*
+ +\[[ 0-9]+\] .rela.dyn +.*
+ +\[[ 0-9]+\] .text +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +AX +0 +0 +4
+ +\[[ 0-9]+\] .got.loc +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +A +0 +0 +4
+ +\[[ 0-9]+\] .tdata +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +WAT +0 +0 +4
+ +\[[ 0-9]+\] .dynamic +DYNAMIC +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 08 +WA +4 +0 +4
+ +\[[ 0-9]+\] .got +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +WA +0 +0 +4
+ +\[[ 0-9]+\] .xt.lit +PROGBITS +0+ .*
+ +\[[ 0-9]+\] .xt.prop +PROGBITS +0+ .*
+ +\[[ 0-9]+\] .xtensa.info +NOTE +0+ .*
+ +\[[ 0-9]+\] .shstrtab +.*
+ +\[[ 0-9]+\] .symtab +.*
+ +\[[ 0-9]+\] .strtab +.*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x[0-9a-f]+
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +PHDR.*
+ +INTERP.*
+.*Requesting program interpreter.*
+ +LOAD +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ R E 0x1000
+ +LOAD +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ RW +0x1000
+ +DYNAMIC +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ RW +0x4
+ +TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ R +0x4
+
+ Section to Segment mapping:
+ +Segment Sections...
+ +00 *
+ +01 +.interp *
+ +02 +.interp .hash .dynsym .dynstr .rela.dyn .text .got.loc *
+ +03 +.tdata .dynamic .got *
+ +04 +.dynamic *
+ +05 +.tdata *
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 3 entries:
+ +Offset +Info +Type +Sym\. Value +Symbol's Name \+ Addend
+[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLS_TPOFF +0+ +sG1 \+ 0
+[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLS_TPOFF +0+ +sG2 \+ 0
+[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLS_TPOFF +0+ +sG2 \+ 0
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +[0-9]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND *
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG2
+ +[0-9]+: 0+[0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG1
+ +[0-9]+: 0+[0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +[0-9]+: 0+[0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +[0-9]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +1 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +2 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +3 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +4 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +5 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +6 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +7 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +8 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +9 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +10 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +11 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +12 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +13 *
+ +[0-9]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sl1
+ +[0-9]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sl2
+ +[0-9]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sl3
+ +[0-9]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sl4
+ +[0-9]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sl5
+ +[0-9]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sl6
+ +[0-9]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sl7
+ +[0-9]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sl8
+ +[0-9]+: 0+ +0 +TLS +LOCAL +DEFAULT +8 _TLS_MODULE_BASE_
+ +[0-9]+: [0-9a-f]+ +0 +OBJECT +LOCAL +DEFAULT +9 _DYNAMIC
+ +[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg8
+ +[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg3
+ +[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +8 sh3
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG2
+ +[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg4
+ +[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg5
+ +[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +8 sh7
+ +[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +8 sh8
+ +[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg1
+ +[0-9]+: [0-9a-f]+ +0 +FUNC +GLOBAL +DEFAULT +6 _start
+ +[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +8 sh4
+ +[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +8 sh5
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg2
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG1
+ +[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +8 sh1
+ +[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg6
+ +[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg7
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+ +[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +8 sh2
+ +[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +8 sh6
diff --git a/binutils-2.21/ld/testsuite/ld-xtensa/tlsbin.s b/binutils-2.21/ld/testsuite/ld-xtensa/tlsbin.s
new file mode 100644
index 0000000..2220cfc
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xtensa/tlsbin.s
@@ -0,0 +1,98 @@
+ .section ".tdata", "awT", @progbits
+ .global sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
+ .global sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+ .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+ .align 4
+sg1: .long 17
+sg2: .long 18
+sg3: .long 19
+sg4: .long 20
+sg5: .long 21
+sg6: .long 22
+sg7: .long 23
+sg8: .long 24
+sl1: .long 65
+sl2: .long 66
+sl3: .long 67
+sl4: .long 68
+sl5: .long 69
+sl6: .long 70
+sl7: .long 71
+sl8: .long 72
+sh1: .long 157
+sh2: .long 158
+sh3: .long 159
+sh4: .long 160
+sh5: .long 161
+sh6: .long 162
+sh7: .long 163
+sh8: .long 164
+
+ .text
+ .global _start
+ .type _start, @function
+_start:
+ entry sp, 32
+
+ /* GD -> IE because variable is not defined in executable */
+ movi a8, sG1@tlsfunc
+ movi a10, sG1@tlsarg
+ callx8.tls a8, sG1@tlscall
+
+ /* GD -> IE because variable is not defined in executable where
+ the variable is referenced through IE too */
+ movi a8, sG2@tlsfunc
+ movi a10, sG2@tlsarg
+ callx8.tls a8, sG2@tlscall
+
+ /* GD -> LE with global variable defined in executable */
+ movi a8, sg1@tlsfunc
+ movi a10, sg1@tlsarg
+ callx8.tls a8, sg1@tlscall
+
+ /* GD -> LE with local variable defined in executable */
+ movi a8, sl1@tlsfunc
+ movi a10, sl1@tlsarg
+ callx8.tls a8, sl1@tlscall
+
+ /* GD -> LE with hidden variable defined in executable */
+ movi a8, sh1@tlsfunc
+ movi a10, sh1@tlsarg
+ callx8.tls a8, sh1@tlscall
+
+ /* LD -> LE */
+ movi a8, _TLS_MODULE_BASE_@tlsfunc
+ movi a10, _TLS_MODULE_BASE_@tlsarg
+ callx8.tls a8, _TLS_MODULE_BASE_@tlscall
+ movi a12, 1+sl1@dtpoff
+ add a12, a12, a10
+ movi a13, sl2@dtpoff+2
+ add a13, a13, a10
+
+ /* LD -> LE against hidden variables */
+ movi a12, sh1@dtpoff
+ add a12, a12, a10
+ movi a13, 3+sh2@dtpoff
+ add a13, a13, a10
+
+ /* IE against global var */
+ rur a2, THREADPTR
+ movi a3, sG2@tpoff
+ add a3, a3, a2
+
+ /* IE -> LE against global var defined in exec */
+ rur a4, THREADPTR
+ movi a5, sg1@tpoff
+ add a5, a5, a4
+
+ /* IE -> LE against local var */
+ rur a6, THREADPTR
+ movi a7, sl1@tpoff
+ add a7, a7, a6
+
+ /* IE -> LE against hidden var */
+ rur a8, THREADPTR
+ movi a9, sh1@tpoff
+ add a9, a9, a8
+
+ retw
diff --git a/binutils-2.21/ld/testsuite/ld-xtensa/tlsbin.sd b/binutils-2.21/ld/testsuite/ld-xtensa/tlsbin.sd
new file mode 100644
index 0000000..484db07
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xtensa/tlsbin.sd
@@ -0,0 +1,14 @@
+#source: tlsbin.s
+#as:
+#ld: -melf32xtensa
+#objdump: -sj.text --stop-address=0x400238
+#target: xtensa*-*-linux*
+
+.*: +file format elf32-xtensa-.e
+
+Contents of section .text:
+ *[0-9a-f]+ 0+ 0+ 0+ 0+ .*
+ *[0-9a-f]+ 0+ 0*080* 0+ 0*280* .*
+ *[0-9a-f]+ 0+ 0*480* 0+ 0*080* .*
+ *[0-9a-f]+ 0*290* 0*2e0* 0*480* 0*4f0* .*
+ *[0-9a-f]+ 0+ 0*080* 0*280* 0*480* .*
diff --git a/binutils-2.21/ld/testsuite/ld-xtensa/tlsbin.td b/binutils-2.21/ld/testsuite/ld-xtensa/tlsbin.td
new file mode 100644
index 0000000..efef45c
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xtensa/tlsbin.td
@@ -0,0 +1,14 @@
+#source: tlsbin.s
+#ld: -melf32xtensa
+#objdump: -sj.tdata
+#target: xtensa*-*-linux*
+
+.*: +file format elf32-xtensa-.e
+
+Contents of section .tdata:
+ *[0-9a-f]+ 0*110* 0*120* 0*130* 0*140* .*
+ *[0-9a-f]+ 0*150* 0*160* 0*170* 0*180* .*
+ *[0-9a-f]+ 0*410* 0*420* 0*430* 0*440* .*
+ *[0-9a-f]+ 0*450* 0*460* 0*470* 0*480* .*
+ *[0-9a-f]+ 0*9d0* 0*9e0* 0*9f0* 0*a00* .*
+ *[0-9a-f]+ 0*a10* 0*a20* 0*a30* 0*a40* .*
diff --git a/binutils-2.21/ld/testsuite/ld-xtensa/tlslib.s b/binutils-2.21/ld/testsuite/ld-xtensa/tlslib.s
new file mode 100644
index 0000000..a2c430b
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xtensa/tlslib.s
@@ -0,0 +1,18 @@
+ .section ".tdata", "awT", @progbits
+ .global sG1, sG2, sG3, sG4, sG5, sG6, sG7, sG8
+sG1: .long 513
+sG2: .long 514
+sG3: .long 515
+sG4: .long 516
+sG5: .long 517
+sG6: .long 518
+sG7: .long 519
+sG8: .long 520
+
+ .text
+ /* Dummy. */
+ .global __tls_get_addr
+ .type __tls_get_addr, @function
+__tls_get_addr:
+ entry sp, 16
+ retw
diff --git a/binutils-2.21/ld/testsuite/ld-xtensa/tlspic.dd b/binutils-2.21/ld/testsuite/ld-xtensa/tlspic.dd
new file mode 100644
index 0000000..9f6e20a
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xtensa/tlspic.dd
@@ -0,0 +1,81 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as:
+#ld: -shared -melf32xtensa
+#objdump: -drj.text --start-address=0x350
+#target: xtensa*-*-linux*
+
+.*: +file format elf32-xtensa-.e
+
+Disassembly of section \.text:
+
+0+350 <_start>:
+ [0-9a-f]+: [0-9a-f]+[ ]+entry a1, 32
+# GD
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a8, 2e0 <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 2e4 <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+callx8 a8
+# GD -> IE because variable is referenced through IE too
+ [0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a8
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 2ec <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+add.* a10, a10, a8
+# GD against local variable
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a8, 2f0 <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 2f4 <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+callx8 a8
+# GD -> IE against local variable referenced through IE too
+ [0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a8
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 2fc <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+add.* a10, a10, a8
+# GD against hidden and local variable
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a8, 300 <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 304 <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+callx8 a8
+# GD -> IE against hidden and local variable referenced through IE too
+ [0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a8
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 30c <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+add.* a10, a10, a8
+# GD against hidden but not local variable
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a8, 310 <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 314 <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+callx8 a8
+# GD -> IE against hidden but not local variable referenced through IE too
+ [0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a8
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 31c <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+add.* a10, a10, a8
+# LD
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a8, 320 <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 324 <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+callx8 a8
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a12, 328 <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+add.* a12, a12, a10
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a13, 32c <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+add.* a13, a13, a10
+# LD against hidden and local variables
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a12, 330 <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+add.* a12, a12, a10
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a13, 334 <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+add.* a13, a13, a10
+# LD against hidden but not local variables
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a12, 338 <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+add.* a12, a12, a10
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a13, 33c <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+add.* a13, a13, a10
+# IE against global var
+ [0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a2
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a3, 340 <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+add.* a3, a3, a2
+# IE against local var
+ [0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a4
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a5, 344 <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+add.* a5, a5, a4
+# IE against hidden and local var
+ [0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a6
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a7, 348 <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+add.* a7, a7, a6
+# IE against hidden but not local var
+ [0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a8
+ [0-9a-f]+: [0-9a-f]+[ ]+l32r a9, 34c <.*>
+ [0-9a-f]+: [0-9a-f]+[ ]+add.* a9, a9, a8
+#
+ [0-9a-f]+: [0-9a-f]+[ ]+retw.*
diff --git a/binutils-2.21/ld/testsuite/ld-xtensa/tlspic.rd b/binutils-2.21/ld/testsuite/ld-xtensa/tlspic.rd
new file mode 100644
index 0000000..92d704e
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xtensa/tlspic.rd
@@ -0,0 +1,142 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as:
+#ld: -shared -melf32xtensa
+#readelf: -WSsrl
+#target: xtensa*-*-linux*
+
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
+ +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 00 +0 +0 +0
+ +\[[ 0-9]+\] .hash +.*
+ +\[[ 0-9]+\] .dynsym +.*
+ +\[[ 0-9]+\] .dynstr +.*
+ +\[[ 0-9]+\] .rela.dyn +.*
+ +\[[ 0-9]+\] .text +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +AX +0 +0 +4
+ +\[[ 0-9]+\] .got.loc +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +A +0 +0 +4
+ +\[[ 0-9]+\] .tdata +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +WAT +0 +0 +4
+ +\[[ 0-9]+\] .tbss +NOBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +WAT +0 +0 +4
+ +\[[ 0-9]+\] .dynamic +DYNAMIC +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 08 +WA +3 +0 +4
+ +\[[ 0-9]+\] .got +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +WA +0 +0 +4
+ +\[[ 0-9]+\] .xt.lit +PROGBITS +0+ .*
+ +\[[ 0-9]+\] .xt.prop +PROGBITS +0+ .*
+ +\[[ 0-9]+\] .xtensa.info +NOTE +0+ .*
+ +\[[ 0-9]+\] .shstrtab +.*
+ +\[[ 0-9]+\] .symtab +.*
+ +\[[ 0-9]+\] .strtab +.*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x[0-9a-f]+
+There are [0-9]+ program headers, starting at offset [0-9]+
+
+Program Headers:
+ +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+ +LOAD +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ R E 0x1000
+ +LOAD +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ RW +0x1000
+ +DYNAMIC +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ RW +0x4
+ +TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ R +0x4
+
+ Section to Segment mapping:
+ +Segment Sections...
+ +00 +.hash .dynsym .dynstr .rela.dyn .text .got.loc *
+ +01 +.tdata .dynamic .got *
+ +02 +.dynamic *
+ +03 +.tdata .tbss *
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 18 entries:
+ +Offset +Info +Type +Sym\. Value +Symbol's Name \+ Addend
+[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLSDESC_FN +0+ +sg1 \+ 0
+[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLSDESC_ARG +0+ +sg1 \+ 0
+[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLS_TPOFF +0+4 +sg2 \+ 0
+[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLS_TPOFF +0+4 +sg2 \+ 0
+[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLSDESC_FN +0+20
+[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLSDESC_ARG +0+20
+[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLS_TPOFF +0+24
+[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLSDESC_FN +0+40
+[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLSDESC_ARG +0+40
+[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLS_TPOFF +0+44
+[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLSDESC_FN +0+60
+[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLSDESC_ARG +0+60
+[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLS_TPOFF +0+64
+[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLSDESC_FN +0+
+[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLSDESC_ARG +0+
+[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLS_TPOFF +0+24
+[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLS_TPOFF +0+44
+[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLS_TPOFF +0+64
+
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +[0-9]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND *
+ +[0-9]+: 0+1c +0 +TLS +GLOBAL +DEFAULT +7 sg8
+ +[0-9]+: 0+8 +0 +TLS +GLOBAL +DEFAULT +7 sg3
+ +[0-9]+: 0+c +0 +TLS +GLOBAL +DEFAULT +7 sg4
+ +[0-9]+: 0+10 +0 +TLS +GLOBAL +DEFAULT +7 sg5
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +7 sg1
+ +[0-9]+: 0+350 +0 +FUNC +GLOBAL +DEFAULT +5 _start
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +[0-9]+: 0+4 +0 +TLS +GLOBAL +DEFAULT +7 sg2
+ +[0-9]+: 0+14 +0 +TLS +GLOBAL +DEFAULT +7 sg6
+ +[0-9]+: 0+18 +0 +TLS +GLOBAL +DEFAULT +7 sg7
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +[0-9]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +1 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +2 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +3 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +4 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +5 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +6 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +7 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +8 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +9 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +10 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +11 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +12 *
+ +[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +13 *
+ +[0-9]+: 0+20 +0 +TLS +LOCAL +DEFAULT +7 sl1
+ +[0-9]+: 0+24 +0 +TLS +LOCAL +DEFAULT +7 sl2
+ +[0-9]+: 0+28 +0 +TLS +LOCAL +DEFAULT +7 sl3
+ +[0-9]+: 0+2c +0 +TLS +LOCAL +DEFAULT +7 sl4
+ +[0-9]+: 0+30 +0 +TLS +LOCAL +DEFAULT +7 sl5
+ +[0-9]+: 0+34 +0 +TLS +LOCAL +DEFAULT +7 sl6
+ +[0-9]+: 0+38 +0 +TLS +LOCAL +DEFAULT +7 sl7
+ +[0-9]+: 0+3c +0 +TLS +LOCAL +DEFAULT +7 sl8
+ +[0-9]+: 0+60 +0 +TLS +LOCAL +DEFAULT +8 sH1
+ +[0-9]+: 0+ +0 +TLS +LOCAL +DEFAULT +7 _TLS_MODULE_BASE_
+ +[0-9]+: 0+144c +0 +OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC
+ +[0-9]+: 0+48 +0 +TLS +LOCAL +DEFAULT +7 sh3
+ +[0-9]+: 0+64 +0 +TLS +LOCAL +DEFAULT +8 sH2
+ +[0-9]+: 0+78 +0 +TLS +LOCAL +DEFAULT +8 sH7
+ +[0-9]+: 0+58 +0 +TLS +LOCAL +DEFAULT +7 sh7
+ +[0-9]+: 0+5c +0 +TLS +LOCAL +DEFAULT +7 sh8
+ +[0-9]+: 0+6c +0 +TLS +LOCAL +DEFAULT +8 sH4
+ +[0-9]+: 0+4c +0 +TLS +LOCAL +DEFAULT +7 sh4
+ +[0-9]+: 0+68 +0 +TLS +LOCAL +DEFAULT +8 sH3
+ +[0-9]+: 0+50 +0 +TLS +LOCAL +DEFAULT +7 sh5
+ +[0-9]+: 0+70 +0 +TLS +LOCAL +DEFAULT +8 sH5
+ +[0-9]+: 0+74 +0 +TLS +LOCAL +DEFAULT +8 sH6
+ +[0-9]+: 0+7c +0 +TLS +LOCAL +DEFAULT +8 sH8
+ +[0-9]+: 0+40 +0 +TLS +LOCAL +DEFAULT +7 sh1
+ +[0-9]+: 0+44 +0 +TLS +LOCAL +DEFAULT +7 sh2
+ +[0-9]+: 0+54 +0 +TLS +LOCAL +DEFAULT +7 sh6
+ +[0-9]+: 0+1c +0 +TLS +GLOBAL +DEFAULT +7 sg8
+ +[0-9]+: 0+8 +0 +TLS +GLOBAL +DEFAULT +7 sg3
+ +[0-9]+: 0+c +0 +TLS +GLOBAL +DEFAULT +7 sg4
+ +[0-9]+: 0+10 +0 +TLS +GLOBAL +DEFAULT +7 sg5
+ +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +7 sg1
+ +[0-9]+: 0+350 +0 +FUNC +GLOBAL +DEFAULT +5 _start
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
+ +[0-9]+: 0+4 +0 +TLS +GLOBAL +DEFAULT +7 sg2
+ +[0-9]+: 0+14 +0 +TLS +GLOBAL +DEFAULT +7 sg6
+ +[0-9]+: 0+18 +0 +TLS +GLOBAL +DEFAULT +7 sg7
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
+ +[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
diff --git a/binutils-2.21/ld/testsuite/ld-xtensa/tlspic.sd b/binutils-2.21/ld/testsuite/ld-xtensa/tlspic.sd
new file mode 100644
index 0000000..57dafc0
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xtensa/tlspic.sd
@@ -0,0 +1,17 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as:
+#ld: -shared -melf32xtensa
+#objdump: -sj.text --stop-address=0x350
+#target: xtensa*-*-linux*
+
+.*: +file format elf32-xtensa-.e
+
+Contents of section .text:
+ 0+2e0 0+ 0+ 0+ 0+ .*
+ 0+2f0 0+ 0+ 0+ 0+ .*
+ 0+300 0+ 0+ 0+ 0+ .*
+ 0+310 0+ 0+ 0+ 0+ .*
+ 0+320 0+ 0+ 0*200* 0*260* .*
+ 0+330 0*400* 0*470* 0*600* 0*650* .*
+ 0+340 0+ 0+ 0+ 0+ .*
diff --git a/binutils-2.21/ld/testsuite/ld-xtensa/tlspic.td b/binutils-2.21/ld/testsuite/ld-xtensa/tlspic.td
new file mode 100644
index 0000000..d3e11d3
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xtensa/tlspic.td
@@ -0,0 +1,16 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as:
+#ld: -shared -melf32xtensa
+#objdump: -sj.tdata
+#target: xtensa*-*-linux*
+
+.*: +file format elf32-xtensa-.e
+
+Contents of section .tdata:
+ *[0-9a-f]+ 0*110* 0*120* 0*130* 0*140* .*
+ *[0-9a-f]+ 0*150* 0*160* 0*170* 0*180* .*
+ *[0-9a-f]+ 0*410* 0*420* 0*430* 0*440* .*
+ *[0-9a-f]+ 0*450* 0*460* 0*470* 0*480* .*
+ *[0-9a-f]+ 0*9d0* 0*9e0* 0*9f0* 0*a00* .*
+ *[0-9a-f]+ 0*a10* 0*a20* 0*a30* 0*a40* .*
diff --git a/binutils-2.21/ld/testsuite/ld-xtensa/tlspic1.s b/binutils-2.21/ld/testsuite/ld-xtensa/tlspic1.s
new file mode 100644
index 0000000..9ecde66
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xtensa/tlspic1.s
@@ -0,0 +1,120 @@
+ .section ".tdata", "awT", @progbits
+ .global sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
+ .global sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+ .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
+ .align 4
+sg1: .long 17
+sg2: .long 18
+sg3: .long 19
+sg4: .long 20
+sg5: .long 21
+sg6: .long 22
+sg7: .long 23
+sg8: .long 24
+sl1: .long 65
+sl2: .long 66
+sl3: .long 67
+sl4: .long 68
+sl5: .long 69
+sl6: .long 70
+sl7: .long 71
+sl8: .long 72
+sh1: .long 157
+sh2: .long 158
+sh3: .long 159
+sh4: .long 160
+sh5: .long 161
+sh6: .long 162
+sh7: .long 163
+sh8: .long 164
+
+ .text
+ .global _start
+ .type _start, @function
+_start:
+ entry sp, 32
+
+ /* GD */
+ movi a8, sg1@tlsfunc
+ movi a10, sg1@tlsarg
+ callx8.tls a8, sg1@tlscall
+
+ /* GD -> IE because variable is referenced through IE too */
+ movi a8, sg2@tlsfunc
+ movi a10, sg2@tlsarg
+ callx8.tls a8, sg2@tlscall
+
+ /* GD against local variable */
+ movi a8, sl1@tlsfunc
+ movi a10, sl1@tlsarg
+ callx8.tls a8, sl1@tlscall
+
+ /* GD -> IE against local variable referenced through IE too */
+ movi a8, sl2@tlsfunc
+ movi a10, sl2@tlsarg
+ callx8.tls a8, sl2@tlscall
+
+ /* GD against hidden and local variable */
+ movi a8, sh1@tlsfunc
+ movi a10, sh1@tlsarg
+ callx8.tls a8, sh1@tlscall
+
+ /* GD -> IE against hidden and local variable referenced through
+ IE too */
+ movi a8, sh2@tlsfunc
+ movi a10, sh2@tlsarg
+ callx8.tls a8, sh2@tlscall
+
+ /* GD against hidden but not local variable */
+ movi a8, sH1@tlsfunc
+ movi a10, sH1@tlsarg
+ callx8.tls a8, sH1@tlscall
+
+ /* GD -> IE against hidden but not local variable referenced through
+ IE too */
+ movi a8, sH2@tlsfunc
+ movi a10, sH2@tlsarg
+ callx8.tls a8, sH2@tlscall
+
+ /* LD */
+ movi a8, _TLS_MODULE_BASE_@tlsfunc
+ movi a10, _TLS_MODULE_BASE_@tlsarg
+ callx8.tls a8, _TLS_MODULE_BASE_@tlscall
+ movi a12, sl1@dtpoff
+ add a12, a12, a10
+ movi a13, 2+sl2@dtpoff
+ add a13, a13, a10
+
+ /* LD against hidden and local variables */
+ movi a12, sh1@dtpoff
+ add a12, a12, a10
+ movi a13, sh2@dtpoff+3
+ add a13, a13, a10
+
+ /* LD against hidden but not local variables */
+ movi a12, sH1@dtpoff
+ add a12, a12, a10
+ movi a13, sH2@dtpoff+1
+ add a13, a13, a10
+
+ /* IE against global var */
+ rur a2, THREADPTR
+ movi a3, sg2@tpoff
+ add a3, a3, a2
+
+ /* IE against local var */
+ rur a4, THREADPTR
+ movi a5, sl2@tpoff
+ add a5, a5, a4
+
+ /* IE against hidden and local var */
+ rur a6, THREADPTR
+ movi a7, sh2@tpoff
+ add a7, a7, a6
+
+ /* IE against hidden but not local var */
+ rur a8, THREADPTR
+ movi a9, sH2@tpoff
+ add a9, a9, a8
+
+ retw
diff --git a/binutils-2.21/ld/testsuite/ld-xtensa/tlspic2.s b/binutils-2.21/ld/testsuite/ld-xtensa/tlspic2.s
new file mode 100644
index 0000000..9f337e7
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xtensa/tlspic2.s
@@ -0,0 +1,12 @@
+ .section ".tbss", "awT", @nobits
+ .global sH1, sH2, sH3, sH4, sH5, sH6, sH7, sH8
+ .hidden sH1, sH2, sH3, sH4, sH5, sH6, sH7, sH8
+ .align 4
+sH1: .space 4
+sH2: .space 4
+sH3: .space 4
+sH4: .space 4
+sH5: .space 4
+sH6: .space 4
+sH7: .space 4
+sH8: .space 4
diff --git a/binutils-2.21/ld/testsuite/ld-xtensa/xtensa.exp b/binutils-2.21/ld/testsuite/ld-xtensa/xtensa.exp
new file mode 100644
index 0000000..e6dc827
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/ld-xtensa/xtensa.exp
@@ -0,0 +1,54 @@
+# Expect script for ld-xtensa tests
+# Copyright (C) 2008 Free Software Foundation
+#
+# This file is part of the GNU Binutils.
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+if { !([istarget "xtensa*-*-linux*"]) } {
+ return
+}
+
+# List contains test-items with 3 items followed by 2 lists:
+# 0:name 1:ld options 2:assembler options
+# 3:filenames of assembler files 4: action and options. 5: name of output file
+
+# Actions:
+# objdump: Apply objdump options on result. Compare with regex (last arg).
+# nm: Apply nm options on result. Compare with regex (last arg).
+# readelf: Apply readelf options on result. Compare with regex (last arg).
+
+set xtensatests {
+ {"TLS -shared transitions"
+ "-shared -melf32xtensa" "" {tlspic1.s tlspic2.s}
+ {{readelf -WSsrl tlspic.rd}
+ {objdump "-drj.text --start-address=0x350" tlspic.dd}
+ {objdump "-sj.text --stop-address=0x350" tlspic.sd}
+ {objdump -sj.tdata tlspic.td}}
+ "libtlspic.so"}
+ {"Helper shared library" "-shared -melf32xtensa"
+ "" {tlslib.s} {} "libtlslib.so"}
+ {"TLS exec transitions"
+ "-melf32xtensa tmpdir/libtlslib.so" "" {tlsbin.s}
+ {{readelf -WSsrl tlsbin.rd}
+ {objdump "-drj.text --start-address=0x400238" tlsbin.dd}
+ {objdump "-sj.text --stop-address=0x400238" tlsbin.sd}
+ {objdump -sj.tdata tlsbin.td}}
+ "tlsbin"}
+}
+
+run_ld_link_tests $xtensatests
diff --git a/binutils-2.21/ld/testsuite/lib/ld-lib.exp b/binutils-2.21/ld/testsuite/lib/ld-lib.exp
new file mode 100644
index 0000000..3d120c8
--- /dev/null
+++ b/binutils-2.21/ld/testsuite/lib/ld-lib.exp
@@ -0,0 +1,1808 @@
+# Support routines for LD testsuite.
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+# 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# This file 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+# Extract and print the version number of ld.
+#
+proc default_ld_version { ld } {
+ global host_triplet
+
+ if { ![is_remote host] && [which $ld] == 0 } then {
+ perror "$ld does not exist"
+ exit 1
+ }
+
+ remote_exec host "$ld --version" "" "/dev/null" "ld.version"
+ remote_upload host "ld.version"
+ set tmp [prune_warnings [file_contents "ld.version"]]
+ remote_file build delete "ld.version"
+ remote_file host delete "ld.version"
+
+ regexp "\[^\n\]* (cygnus-|)(\[-0-9.a-zA-Z-\]+)\[\r\n\].*" $tmp version cyg number
+ if [info exists number] then {
+ clone_output "$ld $number\n"
+ }
+}
+
+proc run_host_cmd { prog command } {
+ global link_output
+
+ if { ![is_remote host] && [which "$prog"] == 0 } then {
+ perror "$prog does not exist"
+ return 0
+ }
+
+ verbose -log "$prog $command"
+ set status [remote_exec host [concat sh -c [list "$prog $command 2>&1"]] "" "/dev/null" "ld.tmp"]
+ remote_upload host "ld.tmp"
+ set link_output [file_contents "ld.tmp"]
+ regsub "\n$" $link_output "" link_output
+ if { [lindex $status 0] != 0 && [string match "" $link_output] } then {
+ append link_output "child process exited abnormally"
+ }
+ remote_file build delete ld.tmp
+ remote_file host delete ld.tmp
+
+ if [string match "" $link_output] then {
+ return ""
+ }
+
+ verbose -log "$link_output"
+ return "$link_output"
+}
+
+proc run_host_cmd_yesno { prog command } {
+ global exec_output
+
+ set exec_output [prune_warnings [run_host_cmd "$prog" "$command"]]
+ if [string match "" $exec_output] then {
+ return 1;
+ }
+ return 0;
+}
+
+# Link an object using relocation.
+#
+proc default_ld_relocate { ld target objects } {
+ global HOSTING_EMU
+
+ remote_file host delete $target
+ return [run_host_cmd_yesno "$ld" "$HOSTING_EMU -o $target -r $objects"]
+}
+
+# Check to see if ld is being invoked with a non-endian output format
+#
+proc is_endian_output_format { object_flags } {
+
+ if {[string match "*-oformat binary*" $object_flags] || \
+ [string match "*-oformat ieee*" $object_flags] || \
+ [string match "*-oformat ihex*" $object_flags] || \
+ [string match "*-oformat netbsd-core*" $object_flags] || \
+ [string match "*-oformat srec*" $object_flags] || \
+ [string match "*-oformat tekhex*" $object_flags] || \
+ [string match "*-oformat trad-core*" $object_flags] } then {
+ return 0
+ } else {
+ return 1
+ }
+}
+
+# Look for big-endian or little-endian switches in the multlib
+# options and translate these into a -EB or -EL switch. Note
+# we cannot rely upon proc process_multilib_options to do this
+# for us because for some targets the compiler does not support
+# -EB/-EL but it does support -mbig-endian/-mlittle-endian, and
+# the site.exp file will include the switch "-mbig-endian"
+# (rather than "big-endian") which is not detected by proc
+# process_multilib_options.
+#
+proc big_or_little_endian {} {
+
+ if [board_info [target_info name] exists multilib_flags] {
+ set tmp_flags " [board_info [target_info name] multilib_flags]"
+
+ foreach x $tmp_flags {
+ case $x in {
+ {*big*endian eb EB -eb -EB -mb -meb} {
+ set flags " -EB"
+ return $flags
+ }
+ {*little*endian el EL -el -EL -ml -mel} {
+ set flags " -EL"
+ return $flags
+ }
+ }
+ }
+ }
+
+ set flags ""
+ return $flags
+}
+
+# Link a program using ld.
+#
+proc default_ld_link { ld target objects } {
+ global HOSTING_EMU
+ global HOSTING_CRT0
+ global HOSTING_LIBS
+ global LIBS
+ global host_triplet
+ global link_output
+ global exec_output
+
+ set objs "$HOSTING_CRT0 $objects"
+ set libs "$LIBS $HOSTING_LIBS"
+
+ if [is_endian_output_format $objects] then {
+ set flags [big_or_little_endian]
+ } else {
+ set flags ""
+ }
+
+ remote_file host delete $target
+
+ return [run_host_cmd_yesno "$ld" "$HOSTING_EMU $flags -o $target $objs $libs"]
+}
+
+# Link a program using ld, without including any libraries.
+#
+proc default_ld_simple_link { ld target objects } {
+ global host_triplet
+ global gcc_ld_flag
+ global exec_output
+
+ if [is_endian_output_format $objects] then {
+ set flags [big_or_little_endian]
+ } else {
+ set flags ""
+ }
+
+ # If we are compiling with gcc, we want to add gcc_ld_flag to
+ # flags. Rather than determine this in some complex way, we guess
+ # based on the name of the compiler.
+ set ldexe $ld
+ set ldparm [string first " " $ld]
+ set ldflags ""
+ if { $ldparm > 0 } then {
+ set ldflags [string range $ld $ldparm end]
+ set ldexe [string range $ld 0 $ldparm]
+ set ld $ldexe
+ }
+ set ldexe [string replace $ldexe 0 [string last "/" $ldexe] ""]
+ if {[string match "*gcc*" $ldexe] || [string match "*++*" $ldexe]} then {
+ set ldflags "$gcc_ld_flag $ldflags"
+ }
+
+ remote_file host delete $target
+
+ set exec_output [run_host_cmd "$ld" "$ldflags $flags -o $target $objects"]
+ set exec_output [prune_warnings $exec_output]
+
+ # We don't care if we get a warning about a non-existent start
+ # symbol, since the default linker script might use ENTRY.
+ regsub -all "(^|\n)(\[^\n\]*: warning: cannot find entry symbol\[^\n\]*\n?)" $exec_output "\\1" exec_output
+
+ if [string match "" $exec_output] then {
+ return 1
+ } else {
+ return 0
+ }
+}
+
+# Compile an object using cc.
+#
+proc default_ld_compile { cc source object } {
+ global CFLAGS
+ global CXXFLAGS
+ global srcdir
+ global subdir
+ global host_triplet
+ global gcc_gas_flag
+
+ set cc_prog $cc
+ if {[llength $cc_prog] > 1} then {
+ set cc_prog [lindex $cc_prog 0]
+ }
+ if {![is_remote host] && [which $cc_prog] == 0} then {
+ perror "$cc_prog does not exist"
+ return 0
+ }
+
+ remote_file build delete "$object"
+ remote_file host delete "$object"
+
+ set flags "-I$srcdir/$subdir"
+
+ # If we are compiling with gcc, we want to add gcc_gas_flag to
+ # flags. Rather than determine this in some complex way, we guess
+ # based on the name of the compiler.
+ set ccexe $cc
+ set ccparm [string first " " $cc]
+ set ccflags ""
+ if { $ccparm > 0 } then {
+ set ccflags [string range $cc $ccparm end]
+ set ccexe [string range $cc 0 $ccparm]
+ set cc $ccexe
+ }
+ set ccexe [string replace $ccexe 0 [string last "/" $ccexe] ""]
+ if {[string match "*gcc*" $ccexe] || [string match "*++*" $ccexe]} then {
+ set flags "$gcc_gas_flag $flags"
+ }
+
+ if {[string match "*++*" $ccexe]} {
+ set flags "$flags $CXXFLAGS"
+ } else {
+ set flags "$flags $CFLAGS"
+ }
+
+ if [board_info [target_info name] exists multilib_flags] {
+ append flags " [board_info [target_info name] multilib_flags]"
+ }
+
+ verbose -log "$cc $flags $ccflags -c $source -o $object"
+
+ set status [remote_exec host [concat sh -c [list "$cc $flags $ccflags -c $source -o $object 2>&1"]] "" "/dev/null" "ld.tmp"]
+ remote_upload host "ld.tmp"
+ set exec_output [file_contents "ld.tmp"]
+ remote_file build delete "ld.tmp"
+ remote_file host delete "ld.tmp"
+ set exec_output [prune_warnings $exec_output]
+ if [string match "" $exec_output] then {
+ if {![file exists $object]} then {
+ regexp ".*/(\[^/\]*)$" $source all dobj
+ regsub "\\.c" $dobj ".o" realobj
+ verbose "looking for $realobj"
+ if {[remote_file host exists $realobj]} then {
+ verbose -log "mv $realobj $object"
+ remote_upload "$realobj" "$object"
+ } else {
+ perror "$object not found after compilation"
+ return 0
+ }
+ }
+ return 1
+ } else {
+ verbose -log "$exec_output"
+ perror "$source: compilation failed"
+ return 0
+ }
+}
+
+# Assemble a file.
+#
+proc default_ld_assemble { as source object } {
+ global ASFLAGS
+ global host_triplet
+
+ if ![info exists ASFLAGS] { set ASFLAGS "" }
+
+ set flags [big_or_little_endian]
+ set exec_output [run_host_cmd "$as" "$flags $ASFLAGS -o $object $source"]
+ set exec_output [prune_warnings $exec_output]
+ if [string match "" $exec_output] then {
+ return 1
+ } else {
+ perror "$source: assembly failed"
+ return 0
+ }
+}
+
+# Run nm on a file, putting the result in the array nm_output.
+#
+proc default_ld_nm { nm nmflags object } {
+ global NMFLAGS
+ global nm_output
+ global host_triplet
+
+ if {[info exists nm_output]} {
+ unset nm_output
+ }
+
+ if ![info exists NMFLAGS] { set NMFLAGS "" }
+
+ # Ensure consistent sorting of symbols
+ if {[info exists env(LC_ALL)]} {
+ set old_lc_all $env(LC_ALL)
+ }
+ set env(LC_ALL) "C"
+
+ verbose -log "$nm $NMFLAGS $nmflags $object >tmpdir/nm.out"
+
+ set status [remote_exec host [concat sh -c [list "$nm $NMFLAGS $nmflags $object 2>ld.stderr"]] "" "/dev/null" "tmpdir/nm.out"]
+ if {[info exists old_lc_all]} {
+ set env(LC_ALL) $old_lc_all
+ } else {
+ unset env(LC_ALL)
+ }
+ remote_upload host "ld.stderr"
+ remote_upload host "tmpdir/nm.out" "tmpdir/nm.out"
+ set exec_output [prune_warnings [file_contents "ld.stderr"]]
+ remote_file host delete "ld.stderr"
+ remote_file build delete "ld.stderr"
+ if [string match "" $exec_output] then {
+ set file [open tmpdir/nm.out r]
+ while { [gets $file line] != -1 } {
+ verbose "$line" 2
+ if [regexp "^(\[0-9a-fA-F\]+) \[a-zA-Z0-9\] \\.*(.+)$" $line whole value name] {
+ set name [string trimleft $name "_"]
+ verbose "Setting nm_output($name) to 0x$value" 2
+ set nm_output($name) 0x$value
+ }
+ }
+ close $file
+ return 1
+ } else {
+ verbose -log "$exec_output"
+ perror "$object: nm failed"
+ return 0
+ }
+}
+
+# Define various symbols needed when not linking against all
+# target libs.
+proc ld_simple_link_defsyms {} {
+
+ set flags "--defsym __stack_chk_fail=0"
+
+ # ARM targets call __gccmain
+ if {[istarget arm*-*-*] || \
+ [istarget strongarm*-*-*] || \
+ [istarget xscale*-*-*] || \
+ [istarget thumb-*-*] } {
+ append flags " --defsym __gccmain=0"
+ }
+
+ # Windows targets need __main, prefixed with underscore.
+ if {[istarget *-*-cygwin* ] || [istarget *-*-mingw*]} {
+ append flags " --defsym ___main=0"
+ }
+
+ # PowerPC EABI code calls __eabi.
+ if {[istarget powerpc*-*-eabi*] || [istarget powerpc*-*-rtems*]} {
+ append flags " --defsym __eabi=0"
+ }
+
+ # mn10200 code calls __truncsipsi2_d0_d2.
+ if {[istarget mn10200*-*-*]} then {
+ append flags " --defsym __truncsipsi2_d0_d2=0"
+ }
+
+ # m6811/m6812 code has references to soft registers.
+ if {[istarget m6811-*-*] || [istarget m6812-*-*]} {
+ append flags " --defsym _.frame=0 --defsym _.d1=0 --defsym _.d2=0"
+ append flags " --defsym _.d3=0 --defsym _.d4=0"
+ append flags " --defsym _.tmp=0 --defsym _.xy=0 --defsym _.z=0"
+ }
+
+ # Some OpenBSD targets have ProPolice and reference __guard and
+ # __stack_smash_handler.
+ if [istarget *-*-openbsd*] {
+ append flags " --defsym __guard=0"
+ append flags " --defsym __stack_smash_handler=0"
+ }
+
+ return $flags
+}
+
+# True if the object format is known to be ELF.
+#
+proc is_elf_format {} {
+ if { ![istarget *-*-sysv4*]
+ && ![istarget *-*-unixware*]
+ && ![istarget *-*-elf*]
+ && ![istarget *-*-eabi*]
+ && ![istarget *-*-rtems*]
+ && ![istarget hppa*64*-*-hpux*]
+ && ![istarget ia64-*-hpux*]
+ && ![istarget *-*-linux*]
+ && ![istarget frv-*-uclinux*]
+ && ![istarget bfin-*-uclinux]
+ && ![istarget sh*-*-uclinux*]
+ && ![istarget *-*-irix5*]
+ && ![istarget *-*-irix6*]
+ && ![istarget *-*-netbsd*]
+ && ![istarget *-*-openbsd*]
+ && ![istarget *-*-solaris2*] } {
+ return 0
+ }
+
+ if { [istarget *-*-linux*aout*]
+ || [istarget *-*-linux*oldld*]
+ || [istarget h8500-*-rtems*]
+ || [istarget i960-*-rtems*]
+ || [istarget *-*-rtemscoff*] } {
+ return 0
+ }
+
+ if { ![istarget *-*-netbsdelf*]
+ && ([istarget *-*-netbsd*aout*]
+ || [istarget *-*-netbsdpe*]
+ || [istarget arm*-*-netbsd*]
+ || [istarget sparc-*-netbsd*]
+ || [istarget i*86-*-netbsd*]
+ || [istarget m68*-*-netbsd*]
+ || [istarget vax-*-netbsd*]
+ || [istarget ns32k-*-netbsd*]) } {
+ return 0
+ }
+
+ if { [istarget arm-*-openbsd*]
+ || [istarget i386-*-openbsd\[0-2\].*]
+ || [istarget i386-*-openbsd3.\[0-2\]]
+ || [istarget m68*-*-openbsd*]
+ || [istarget ns32k-*-openbsd*]
+ || [istarget sparc-*-openbsd\[0-2\].*]
+ || [istarget sparc-*-openbsd3.\[0-1\]]
+ || [istarget vax-*-openbsd*] } {
+ return 0
+ }
+
+ return 1
+}
+
+# True if the object format is known to be 64-bit ELF.
+#
+proc is_elf64 { binary_file } {
+ global READELF
+ global READELFFLAGS
+
+ set readelf_size ""
+ catch "exec $READELF $READELFFLAGS -h $binary_file > readelf.out" got
+
+ if ![string match "" $got] then {
+ return 0
+ }
+
+ if { ![regexp "\n\[ \]*Class:\[ \]*ELF(\[0-9\]+)\n" \
+ [file_contents readelf.out] nil readelf_size] } {
+ return 0
+ }
+
+ if { $readelf_size == "64" } {
+ return 1
+ }
+
+ return 0
+}
+
+# True if the object format is known to be a.out.
+#
+proc is_aout_format {} {
+ if { [istarget *-*-netbsdelf]
+ || [istarget sparc64-*-netbsd*]
+ || [istarget sparc64-*-openbsd*] } {
+ return 0
+ }
+ if { [istarget *-*-*\[ab\]out*]
+ || [istarget *-*-linux*oldld*]
+ || [istarget *-*-bsd*]
+ || [istarget *-*-msdos*]
+ || [istarget arm-*-netbsd*]
+ || [istarget arm-*-openbsd*]
+ || [istarget arm-*-riscix*]
+ || [istarget i?86-*-freebsd\[12\]*]
+ || [istarget i?86-*-netbsd*]
+ || [istarget i?86-*-openbsd\[0-2\]*]
+ || [istarget i?86-*-openbsd3.\[0-2\]*]
+ || [istarget i?86-*-vsta]
+ || [istarget i?86-*-mach*]
+ || [istarget m68*-*-netbsd*]
+ || [istarget m68*-*-openbsd*]
+ || [istarget ns32k-*-*]
+ || [istarget pdp11-*-*]
+ || [istarget sparc*-*-sunos4*]
+ || [istarget sparc*-*-netbsd*]
+ || [istarget sparc*-*-openbsd\[0-2\]*]
+ || [istarget sparc*-*-openbsd3.\[0-1\]*]
+ || [istarget sparc*-fujitsu-none]
+ || [istarget vax-dec-ultrix*]
+ || [istarget vax-*-netbsd] } {
+ return 1
+ }
+ return 0
+}
+
+# True if the object format is known to be PE COFF.
+#
+proc is_pecoff_format {} {
+ if { ![istarget *-*-mingw*]
+ && ![istarget *-*-cygwin*]
+ && ![istarget *-*-cegcc*]
+ && ![istarget *-*-pe*] } {
+ return 0
+ }
+
+ return 1
+}
+
+# Compares two files line-by-line.
+# Returns differences if exist.
+# Returns null if file(s) cannot be opened.
+#
+proc simple_diff { file_1 file_2 } {
+ global target
+
+ set eof -1
+ set differences 0
+
+ if [file exists $file_1] then {
+ set file_a [open $file_1 r]
+ } else {
+ warning "$file_1 doesn't exist"
+ return
+ }
+
+ if [file exists $file_2] then {
+ set file_b [open $file_2 r]
+ } else {
+ fail "$file_2 doesn't exist"
+ return
+ }
+
+ verbose "# Diff'ing: $file_1 $file_2\n" 2
+
+ while { [gets $file_a line] != $eof } {
+ if [regexp "^#.*$" $line] then {
+ continue
+ } else {
+ lappend list_a $line
+ }
+ }
+ close $file_a
+
+ while { [gets $file_b line] != $eof } {
+ if [regexp "^#.*$" $line] then {
+ continue
+ } else {
+ lappend list_b $line
+ }
+ }
+ close $file_b
+
+ for { set i 0 } { $i < [llength $list_a] } { incr i } {
+ set line_a [lindex $list_a $i]
+ set line_b [lindex $list_b $i]
+
+ verbose "\t$file_1: $i: $line_a\n" 3
+ verbose "\t$file_2: $i: $line_b\n" 3
+ if [string compare $line_a $line_b] then {
+ verbose -log "\t$file_1: $i: $line_a\n"
+ verbose -log "\t$file_2: $i: $line_b\n"
+
+ fail "Test: $target"
+ return
+ }
+ }
+
+ if { [llength $list_a] != [llength $list_b] } {
+ fail "Test: $target"
+ return
+ }
+
+ if $differences<1 then {
+ pass "Test: $target"
+ }
+}
+
+# run_dump_test FILE
+# Copied from gas testsuite, tweaked and further extended.
+#
+# Assemble a .s file, then run some utility on it and check the output.
+#
+# There should be an assembly language file named FILE.s in the test
+# suite directory, and a pattern file called FILE.d. `run_dump_test'
+# will assemble FILE.s, run some tool like `objdump', `objcopy', or
+# `nm' on the .o file to produce textual output, and then analyze that
+# with regexps. The FILE.d file specifies what program to run, and
+# what to expect in its output.
+#
+# The FILE.d file begins with zero or more option lines, which specify
+# flags to pass to the assembler, the program to run to dump the
+# assembler's output, and the options it wants. The option lines have
+# the syntax:
+#
+# # OPTION: VALUE
+#
+# OPTION is the name of some option, like "name" or "objdump", and
+# VALUE is OPTION's value. The valid options are described below.
+# Whitespace is ignored everywhere, except within VALUE. The option
+# list ends with the first line that doesn't match the above syntax
+# (hmm, not great for error detection).
+#
+# The interesting options are:
+#
+# name: TEST-NAME
+# The name of this test, passed to DejaGNU's `pass' and `fail'
+# commands. If omitted, this defaults to FILE, the root of the
+# .s and .d files' names.
+#
+# as: FLAGS
+# When assembling, pass FLAGS to the assembler.
+# If assembling several files, you can pass different assembler
+# options in the "source" directives. See below.
+#
+# ld: FLAGS
+# Link assembled files using FLAGS, in the order of the "source"
+# directives, when using multiple files.
+#
+# ld_after_inputfiles: FLAGS
+# Similar to "ld", but put after all input files.
+#
+# objcopy_linked_file: FLAGS
+# Run objcopy on the linked file with the specified flags.
+# This lets you transform the linked file using objcopy, before the
+# result is analyzed by an analyzer program specified below (which
+# may in turn *also* be objcopy).
+#
+# PROG: PROGRAM-NAME
+# The name of the program to run to analyze the .o file produced
+# by the assembler or the linker output. This can be omitted;
+# run_dump_test will guess which program to run by seeing which of
+# the flags options below is present.
+#
+# objdump: FLAGS
+# nm: FLAGS
+# objcopy: FLAGS
+# Use the specified program to analyze the assembler or linker
+# output file, and pass it FLAGS, in addition to the output name.
+# Note that they are run with LC_ALL=C in the environment to give
+# consistent sorting of symbols.
+#
+# source: SOURCE [FLAGS]
+# Assemble the file SOURCE.s using the flags in the "as" directive
+# and the (optional) FLAGS. If omitted, the source defaults to
+# FILE.s.
+# This is useful if several .d files want to share a .s file.
+# More than one "source" directive can be given, which is useful
+# when testing linking.
+#
+# xfail: TARGET
+# The test is expected to fail on TARGET. This may occur more than
+# once.
+#
+# target: TARGET
+# Only run the test for TARGET. This may occur more than once; the
+# target being tested must match at least one. You may provide target
+# name "cfi" for any target supporting the CFI statements.
+#
+# notarget: TARGET
+# Do not run the test for TARGET. This may occur more than once;
+# the target being tested must not match any of them.
+#
+# error: REGEX
+# An error with message matching REGEX must be emitted for the test
+# to pass. The PROG, objdump, nm and objcopy options have no
+# meaning and need not supplied if this is present. Multiple "error"
+# directives append to the expected linker error message.
+#
+# warning: REGEX
+# Expect a linker warning matching REGEX. It is an error to issue
+# both "error" and "warning". Multiple "warning" directives
+# append to the expected linker warning message.
+#
+# Each option may occur at most once unless otherwise mentioned.
+#
+# After the option lines come regexp lines. `run_dump_test' calls
+# `regexp_diff' to compare the output of the dumping tool against the
+# regexps in FILE.d. `regexp_diff' is defined later in this file; see
+# further comments there.
+#
+proc run_dump_test { name } {
+ global subdir srcdir
+ global OBJDUMP NM AS OBJCOPY READELF LD
+ global OBJDUMPFLAGS NMFLAGS ASFLAGS OBJCOPYFLAGS READELFFLAGS LDFLAGS
+ global host_triplet runtests
+ global env verbose
+
+ if [string match "*/*" $name] {
+ set file $name
+ set name [file tail $name]
+ } else {
+ set file "$srcdir/$subdir/$name"
+ }
+
+ if ![runtest_file_p $runtests $name] then {
+ return
+ }
+
+ set opt_array [slurp_options "${file}.d"]
+ if { $opt_array == -1 } {
+ perror "error reading options from $file.d"
+ unresolved $subdir/$name
+ return
+ }
+ set dumpfile tmpdir/dump.out
+ set run_ld 0
+ set run_objcopy 0
+ set opts(as) {}
+ set opts(ld) {}
+ set opts(ld_after_inputfiles) {}
+ set opts(xfail) {}
+ set opts(target) {}
+ set opts(notarget) {}
+ set opts(objdump) {}
+ set opts(nm) {}
+ set opts(objcopy) {}
+ set opts(readelf) {}
+ set opts(name) {}
+ set opts(PROG) {}
+ set opts(source) {}
+ set opts(error) {}
+ set opts(warning) {}
+ set opts(objcopy_linked_file) {}
+ set asflags(${file}.s) {}
+
+ foreach i $opt_array {
+ set opt_name [lindex $i 0]
+ set opt_val [lindex $i 1]
+ if ![info exists opts($opt_name)] {
+ perror "unknown option $opt_name in file $file.d"
+ unresolved $subdir/$name
+ return
+ }
+
+ switch -- $opt_name {
+ xfail {}
+ target {}
+ notarget {}
+ warning {}
+ error {}
+ source {
+ # Move any source-specific as-flags to a separate array to
+ # simplify processing.
+ if { [llength $opt_val] > 1 } {
+ set asflags([lindex $opt_val 0]) [lrange $opt_val 1 end]
+ set opt_val [lindex $opt_val 0]
+ } else {
+ set asflags($opt_val) {}
+ }
+ }
+ default {
+ if [string length $opts($opt_name)] {
+ perror "option $opt_name multiply set in $file.d"
+ unresolved $subdir/$name
+ return
+ }
+
+ # A single "# ld:" with no options should do the right thing.
+ if { $opt_name == "ld" } {
+ set run_ld 1
+ }
+ # Likewise objcopy_linked_file.
+ if { $opt_name == "objcopy_linked_file" } {
+ set run_objcopy 1
+ }
+ }
+ }
+ if { $opt_name == "as" || $opt_name == "ld" } {
+ set opt_val [subst $opt_val]
+ }
+ set opts($opt_name) [concat $opts($opt_name) $opt_val]
+ }
+ foreach opt { as ld } {
+ regsub {\[big_or_little_endian\]} $opts($opt) \
+ [big_or_little_endian] opts($opt)
+ }
+
+ # Decide early whether we should run the test for this target.
+ if { [llength $opts(target)] > 0 } {
+ set targmatch 0
+ foreach targ $opts(target) {
+ if [istarget $targ] {
+ set targmatch 1
+ break
+ }
+ }
+ if { $targmatch == 0 } {
+ return
+ }
+ }
+ foreach targ $opts(notarget) {
+ if [istarget $targ] {
+ return
+ }
+ }
+
+ set program ""
+ # It's meaningless to require an output-testing method when we
+ # expect an error.
+ if { $opts(error) == "" } {
+ if {$opts(PROG) != ""} {
+ switch -- $opts(PROG) {
+ objdump { set program objdump }
+ nm { set program nm }
+ objcopy { set program objcopy }
+ readelf { set program readelf }
+ default
+ { perror "unrecognized program option $opts(PROG) in $file.d"
+ unresolved $subdir/$name
+ return }
+ }
+ } else {
+ # Guess which program to run, by seeing which option was specified.
+ foreach p {objdump objcopy nm readelf} {
+ if {$opts($p) != ""} {
+ if {$program != ""} {
+ perror "ambiguous dump program in $file.d"
+ unresolved $subdir/$name
+ return
+ } else {
+ set program $p
+ }
+ }
+ }
+ }
+ if { $program == "" && $opts(warning) == "" } {
+ perror "dump program unspecified in $file.d"
+ unresolved $subdir/$name
+ return
+ }
+ }
+
+ if { $opts(name) == "" } {
+ set testname "$subdir/$name"
+ } else {
+ set testname $opts(name)
+ }
+
+ if { $opts(source) == "" } {
+ set sourcefiles [list ${file}.s]
+ } else {
+ set sourcefiles {}
+ foreach sf $opts(source) {
+ if { [string match "/*" $sf] } {
+ lappend sourcefiles "$sf"
+ } else {
+ lappend sourcefiles "$srcdir/$subdir/$sf"
+ }
+ # Must have asflags indexed on source name.
+ set asflags($srcdir/$subdir/$sf) $asflags($sf)
+ }
+ }
+
+ # Time to setup xfailures.
+ foreach targ $opts(xfail) {
+ setup_xfail $targ
+ }
+
+ # Assemble each file.
+ set objfiles {}
+ for { set i 0 } { $i < [llength $sourcefiles] } { incr i } {
+ set sourcefile [lindex $sourcefiles $i]
+
+ set objfile "tmpdir/dump$i.o"
+ catch "exec rm -f $objfile" exec_output
+ lappend objfiles $objfile
+ set cmd "$AS $ASFLAGS $opts(as) $asflags($sourcefile) -o $objfile $sourcefile"
+
+ send_log "$cmd\n"
+ set cmdret [remote_exec host [concat sh -c [list "$cmd 2>&1"]] "" "/dev/null" "ld.tmp"]
+ remote_upload host "ld.tmp"
+ set comp_output [prune_warnings [file_contents "ld.tmp"]]
+ remote_file host delete "ld.tmp"
+ remote_file build delete "ld.tmp"
+
+ if { [lindex $cmdret 0] != 0 || ![string match "" $comp_output] } then {
+ send_log "$comp_output\n"
+ verbose "$comp_output" 3
+
+ set exitstat "succeeded"
+ if { $cmdret != 0 } { set exitstat "failed" }
+ verbose -log "$exitstat with: <$comp_output>"
+ fail $testname
+ return
+ }
+ }
+
+ set expmsg $opts(error)
+ if { $opts(warning) != "" } {
+ if { $expmsg != "" } {
+ perror "$testname: mixing error and warning test-directives"
+ return
+ }
+ set expmsg $opts(warning)
+ }
+
+ # Perhaps link the file(s).
+ if { $run_ld } {
+ set objfile "tmpdir/dump"
+ catch "exec rm -f $objfile" exec_output
+
+ # Add -L$srcdir/$subdir so that the linker command can use
+ # linker scripts in the source directory.
+ set cmd "$LD $LDFLAGS -L$srcdir/$subdir \
+ $opts(ld) -o $objfile $objfiles $opts(ld_after_inputfiles)"
+
+ send_log "$cmd\n"
+ set cmdret [remote_exec host [concat sh -c [list "$cmd 2>&1"]] "" "/dev/null" "ld.tmp"]
+ remote_upload host "ld.tmp"
+ set comp_output [file_contents "ld.tmp"]
+ remote_file host delete "ld.tmp"
+ remote_file build delete "ld.tmp"
+ set cmdret [lindex $cmdret 0]
+
+ if { $cmdret == 0 && $run_objcopy } {
+ set infile $objfile
+ set objfile "tmpdir/dump1"
+ remote_file host delete $objfile
+
+ # Note that we don't use OBJCOPYFLAGS here; any flags must be
+ # explicitly specified.
+ set cmd "$OBJCOPY $opts(objcopy_linked_file) $infile $objfile"
+
+ send_log "$cmd\n"
+ set cmdret [remote_exec host [concat sh -c [list "$cmd 2>&1"]] "" "/dev/null" "ld.tmp"]
+ remote_upload host "ld.tmp"
+ append comp_output [file_contents "ld.tmp"]
+ remote_file host delete "ld.tmp"
+ remote_file build delete "ld.tmp"
+ set cmdret [lindex $cmdret 0]
+ }
+
+ regsub "\n$" $comp_output "" comp_output
+ if { $cmdret != 0 || $comp_output != "" || $expmsg != "" } then {
+ set exitstat "succeeded"
+ if { $cmdret != 0 } { set exitstat "failed" }
+ verbose -log "$exitstat with: <$comp_output>, expected: <$expmsg>"
+ send_log "$comp_output\n"
+ verbose "$comp_output" 3
+
+ if { ($expmsg == "") == ($comp_output == "") \
+ && [regexp $expmsg $comp_output] \
+ && (($cmdret == 0) == ($opts(error) == "")) } {
+ # We have the expected output from ld.
+ if { $opts(error) != "" || $program == "" } {
+ pass $testname
+ return
+ }
+ } else {
+ verbose -log "$exitstat with: <$comp_output>, expected: <$expmsg>"
+ fail $testname
+ return
+ }
+ }
+ } else {
+ set objfile "tmpdir/dump0.o"
+ }
+
+ # We must not have expected failure if we get here.
+ if { $opts(error) != "" } {
+ fail $testname
+ return
+ }
+
+ set progopts1 $opts($program)
+ eval set progopts \$[string toupper $program]FLAGS
+ eval set binary \$[string toupper $program]
+
+ if { ![is_remote host] && [which $binary] == 0 } {
+ untested $testname
+ return
+ }
+
+ if { $progopts1 == "" } { set $progopts1 "-r" }
+ verbose "running $binary $progopts $progopts1" 3
+
+ # Objcopy, unlike the other two, won't send its output to stdout,
+ # so we have to run it specially.
+ set cmd "$binary $progopts $progopts1 $objfile > $dumpfile"
+ if { $program == "objcopy" } {
+ set cmd "$binary $progopts $progopts1 $objfile $dumpfile"
+ }
+
+ # Ensure consistent sorting of symbols
+ if {[info exists env(LC_ALL)]} {
+ set old_lc_all $env(LC_ALL)
+ }
+ set env(LC_ALL) "C"
+ send_log "$cmd\n"
+ set cmdret [remote_exec host [concat sh -c [list "$cmd 2>ld.tmp"]] "" "/dev/null"]
+ set cmdret [lindex $cmdret 0]
+ remote_upload host "ld.tmp"
+ set comp_output [prune_warnings [file_contents "ld.tmp"]]
+ remote_file host delete "ld.tmp"
+ remote_file build delete "ld.tmp"
+ if {[info exists old_lc_all]} {
+ set env(LC_ALL) $old_lc_all
+ } else {
+ unset env(LC_ALL)
+ }
+ if { $cmdret != 0 || $comp_output != "" } {
+ send_log "exited abnormally with $cmdret, output:$comp_output\n"
+ fail $testname
+ return
+ }
+
+ if { $verbose > 2 } then { verbose "output is [file_contents $dumpfile]" 3 }
+ if { [regexp_diff $dumpfile "${file}.d"] } then {
+ fail $testname
+ if { $verbose == 2 } then { verbose "output is [file_contents $dumpfile]" 2 }
+ return
+ }
+
+ pass $testname
+}
+
+proc slurp_options { file } {
+ if [catch { set f [open $file r] } x] {
+ #perror "couldn't open `$file': $x"
+ perror "$x"
+ return -1
+ }
+ set opt_array {}
+ # whitespace expression
+ set ws {[ ]*}
+ set nws {[^ ]*}
+ # whitespace is ignored anywhere except within the options list;
+ # option names are alphabetic plus underscore only.
+ set pat "^#${ws}(\[a-zA-Z_\]*)$ws:${ws}(.*)$ws\$"
+ while { [gets $f line] != -1 } {
+ set line [string trim $line]
+ # Whitespace here is space-tab.
+ if [regexp $pat $line xxx opt_name opt_val] {
+ # match!
+ lappend opt_array [list $opt_name $opt_val]
+ } else {
+ break
+ }
+ }
+ close $f
+ return $opt_array
+}
+
+# regexp_diff, copied from gas, based on simple_diff above.
+# compares two files line-by-line
+# file1 contains strings, file2 contains regexps and #-comments
+# blank lines are ignored in either file
+# returns non-zero if differences exist
+#
+proc regexp_diff { file_1 file_2 } {
+
+ set eof -1
+ set end_1 0
+ set end_2 0
+ set differences 0
+ set diff_pass 0
+ set fail_if_match 0
+
+ if [file exists $file_1] then {
+ set file_a [open $file_1 r]
+ } else {
+ warning "$file_1 doesn't exist"
+ return 1
+ }
+
+ if [file exists $file_2] then {
+ set file_b [open $file_2 r]
+ } else {
+ fail "$file_2 doesn't exist"
+ close $file_a
+ return 1
+ }
+
+ verbose " Regexp-diff'ing: $file_1 $file_2" 2
+
+ while { 1 } {
+ set line_a ""
+ set line_b ""
+ while { [string length $line_a] == 0 } {
+ if { [gets $file_a line_a] == $eof } {
+ set end_1 1
+ break
+ }
+ }
+ while { [string length $line_b] == 0 || [string match "#*" $line_b] } {
+ if [ string match "#pass" $line_b ] {
+ set end_2 1
+ set diff_pass 1
+ break
+ } elseif [ string match "#failif" $line_b ] {
+ send_log "fail if no difference\n"
+ verbose "fail if no difference" 3
+ set fail_if_match 1
+ } elseif [ string match "#..." $line_b ] {
+ if { [gets $file_b line_b] == $eof } {
+ set end_2 1
+ set diff_pass 1
+ break
+ }
+ verbose "looking for \"^$line_b$\"" 3
+ while { ![regexp "^$line_b$" "$line_a"] } {
+ verbose "skipping \"$line_a\"" 3
+ if { [gets $file_a line_a] == $eof } {
+ set end_1 1
+ break
+ }
+ }
+ break
+ }
+ if { [gets $file_b line_b] == $eof } {
+ set end_2 1
+ break
+ }
+ }
+
+ if { $diff_pass } {
+ break
+ } elseif { $end_1 && $end_2 } {
+ break
+ } elseif { $end_1 } {
+ send_log "extra regexps in $file_2 starting with \"^$line_b$\"\nEOF from $file_1\n"
+ verbose "extra regexps in $file_2 starting with \"^$line_b$\"\nEOF from $file_1" 3
+ set differences 1
+ break
+ } elseif { $end_2 } {
+ send_log "extra lines in $file_1 starting with \"^$line_a$\"\nEOF from $file_2\n"
+ verbose "extra lines in $file_1 starting with \"^$line_a$\"\nEOF from $file_2\n" 3
+ set differences 1
+ break
+ } else {
+ verbose "regexp \"^$line_b$\"\nline \"$line_a\"" 3
+ if ![regexp "^$line_b$" "$line_a"] {
+ verbose "regexp_diff match failure\n" 3
+ send_log "regexp_diff match failure\n"
+ send_log "regexp \"^$line_b$\"\nline \"$line_a\"\n"
+ set differences 1
+ }
+ }
+ }
+
+ if { $differences == 0 && !$diff_pass && [eof $file_a] != [eof $file_b] } {
+ send_log "$file_1 and $file_2 are different lengths\n"
+ verbose "$file_1 and $file_2 are different lengths" 3
+ set differences 1
+ }
+
+ if { $fail_if_match } {
+ if { $differences == 0 } {
+ set differences 1
+ } else {
+ set differences 0
+ }
+ }
+
+ close $file_a
+ close $file_b
+
+ return $differences
+}
+
+proc file_contents { filename } {
+ set file [open $filename r]
+ set contents [read $file]
+ close $file
+ return $contents
+}
+
+proc set_file_contents { filename contents } {
+ set file [open $filename w]
+ puts $file "$contents"
+ close $file
+}
+
+# Create an archive using ar
+#
+proc ar_simple_create { ar aropts target objects } {
+ remote_file host delete $target
+
+ set exec_output [run_host_cmd "$ar" "$aropts rc $target $objects"]
+ set exec_output [prune_warnings $exec_output]
+
+ if [string match "" $exec_output] then {
+ send_log "$exec_output\n"
+ return 1
+ } else {
+ return 0
+ }
+}
+
+# List contains test-items with 3 items followed by 2 lists, one item and
+# one optional item:
+# 0:name 1:ld/ar options 2:assembler options
+# 3:filenames of assembler files 4: action and options. 5: name of output file
+# 6:compiler flags (optional)
+#
+# Actions:
+# objdump: Apply objdump options on result. Compare with regex (last arg).
+# nm: Apply nm options on result. Compare with regex (last arg).
+# readelf: Apply readelf options on result. Compare with regex (last arg).
+# ld: Don't apply anything on result. Compare output during linking with
+# regex (second arg). Note that this *must* be the first action if it
+# is to be used at all; in all other cases, any output from the linker
+# during linking is treated as a sign of an error and FAILs the test.
+#
+proc run_ld_link_tests { ldtests } {
+ global ld
+ global as
+ global nm
+ global ar
+ global objdump
+ global READELF
+ global srcdir
+ global subdir
+ global env
+ global CC
+ global CFLAGS
+ global runtests
+ global exec_output
+
+ foreach testitem $ldtests {
+ set testname [lindex $testitem 0]
+
+ if ![runtest_file_p $runtests $testname] then {
+ continue
+ }
+
+ set ld_options [lindex $testitem 1]
+ set as_options [lindex $testitem 2]
+ set src_files [lindex $testitem 3]
+ set actions [lindex $testitem 4]
+ set binfile tmpdir/[lindex $testitem 5]
+ set cflags [lindex $testitem 6]
+ set objfiles {}
+ set is_unresolved 0
+ set failed 0
+ set maybe_failed 0
+ set ld_output ""
+
+# verbose -log "Testname is $testname"
+# verbose -log "ld_options is $ld_options"
+# verbose -log "as_options is $as_options"
+# verbose -log "src_files is $src_files"
+# verbose -log "actions is $actions"
+# verbose -log "binfile is $binfile"
+
+ # Assemble each file in the test.
+ foreach src_file $src_files {
+ set objfile "tmpdir/[file rootname $src_file].o"
+ lappend objfiles $objfile
+
+ if { [file extension $src_file] == ".c" } {
+ set as_file "tmpdir/[file rootname $src_file].s"
+ if ![ld_compile "$CC -S $CFLAGS $cflags" $srcdir/$subdir/$src_file $as_file] {
+ set is_unresolved 1
+ break
+ }
+ } else {
+ set as_file "$srcdir/$subdir/$src_file"
+ }
+ if ![ld_assemble $as "$as_options $as_file" $objfile] {
+ set is_unresolved 1
+ break
+ }
+ }
+
+ # Catch assembler errors.
+ if { $is_unresolved != 0 } {
+ unresolved $testname
+ continue
+ }
+
+ if { [regexp ".*\\.a$" $binfile] } {
+ if { ![ar_simple_create $ar $ld_options $binfile "$objfiles"] } {
+ fail $testname
+ set failed 1
+ } else {
+ set failed 0
+ }
+ } elseif { ![ld_simple_link $ld $binfile "-L$srcdir/$subdir $ld_options $objfiles"] } {
+ set maybe_failed 1
+ set ld_output "$exec_output"
+ } else {
+ set failed 0
+ }
+
+ if { $failed == 0 } {
+ foreach actionlist $actions {
+ set action [lindex $actionlist 0]
+ set progopts [lindex $actionlist 1]
+
+ # There are actions where we run regexp_diff on the
+ # output, and there are other actions (presumably).
+ # Handling of the former look the same.
+ set dump_prog ""
+ switch -- $action {
+ objdump
+ { set dump_prog $objdump }
+ nm
+ { set dump_prog $nm }
+ readelf
+ { set dump_prog $READELF }
+ ld
+ { set dump_prog "ld" }
+ default
+ {
+ perror "Unrecognized action $action"
+ set is_unresolved 1
+ break
+ }
+ }
+
+ if { $action == "ld" } {
+ set dumpfile [lindex $actionlist 1]
+ verbose "dumpfile is $dumpfile"
+ set_file_contents "tmpdir/ld.messages" "$ld_output"
+ verbose "ld.messages has '[file_contents tmpdir/ld.messages]'"
+ if { [regexp_diff "tmpdir/ld.messages" "$srcdir/$subdir/$dumpfile"] } then {
+ verbose "output is $ld_output" 2
+ set failed 1
+ break
+ }
+ set maybe_failed 0
+ } elseif { $maybe_failed != 0 } {
+ set failed 1
+ break
+ } elseif { $dump_prog != "" } {
+ set dumpfile [lindex $actionlist 2]
+ set binary $dump_prog
+
+ # Ensure consistent sorting of symbols
+ if {[info exists env(LC_ALL)]} {
+ set old_lc_all $env(LC_ALL)
+ }
+ set env(LC_ALL) "C"
+ set cmd "$binary $progopts $binfile"
+ set status [remote_exec host [concat sh -c [list "$cmd >dump.out 2>ld.stderr"]] "" "/dev/null"]
+ send_log "$cmd\n"
+ remote_upload host "ld.stderr"
+ set comp_output [prune_warnings [file_contents "ld.stderr"]]
+ remote_file host delete "ld.stderr"
+ remote_file build delete "ld.stderr"
+
+ if {[info exists old_lc_all]} {
+ set env(LC_ALL) $old_lc_all
+ } else {
+ unset env(LC_ALL)
+ }
+
+ if ![string match "" $comp_output] then {
+ send_log "$comp_output\n"
+ set failed 1
+ break
+ }
+
+ remote_upload host "dump.out"
+
+ if { [regexp_diff "dump.out" "$srcdir/$subdir/$dumpfile"] } then {
+ verbose "output is [file_contents "dump.out"]" 2
+ set failed 1
+ remote_file build delete "dump.out"
+ remote_file host delete "dump.out"
+ break
+ }
+ remote_file build delete "dump.out"
+ remote_file host delete "dump.out"
+ }
+ }
+
+ if { $failed != 0 } {
+ fail $testname
+ } else { if { $is_unresolved == 0 } {
+ pass $testname
+ } }
+ }
+
+ # Catch action errors.
+ if { $is_unresolved != 0 } {
+ unresolved $testname
+ continue
+ }
+ }
+}
+
+# This definition is taken from an unreleased version of DejaGnu. Once
+# that version gets released, and has been out in the world for a few
+# months at least, it may be safe to delete this copy.
+if ![string length [info proc prune_warnings]] {
+ #
+ # prune_warnings -- delete various system verbosities from TEXT
+ #
+ # An example is:
+ # ld.so: warning: /usr/lib/libc.so.1.8.1 has older revision than expected 9
+ #
+ # Sites with particular verbose os's may wish to override this in site.exp.
+ #
+ proc prune_warnings { text } {
+ # This is from sun4's. Do it for all machines for now.
+ # The "\\1" is to try to preserve a "\n" but only if necessary.
+ regsub -all "(^|\n)(ld.so: warning:\[^\n\]*\n?)+" $text "\\1" text
+
+ # It might be tempting to get carried away and delete blank lines, etc.
+ # Just delete *exactly* what we're ask to, and that's it.
+ return $text
+ }
+}
+
+# targets_to_xfail is a list of target triplets to be xfailed.
+# ldtests contains test-items with 3 items followed by 1 lists, 2 items
+# and 3 optional items:
+# 0:name
+# 1:ld options
+# 2:assembler options
+# 3:filenames of source files
+# 4:name of output file
+# 5:expected output
+# 6:compiler flags (optional)
+# 7:language (optional)
+# 8:linker warning (optional)
+
+proc run_ld_link_exec_tests { targets_to_xfail ldtests } {
+ global ld
+ global as
+ global srcdir
+ global subdir
+ global env
+ global CC
+ global CXX
+ global CFLAGS
+ global CXXFLAGS
+ global errcnt
+ global exec_output
+
+ foreach testitem $ldtests {
+ foreach target $targets_to_xfail {
+ setup_xfail $target
+ }
+ set testname [lindex $testitem 0]
+ set ld_options [lindex $testitem 1]
+ set as_options [lindex $testitem 2]
+ set src_files [lindex $testitem 3]
+ set binfile tmpdir/[lindex $testitem 4]
+ set expfile [lindex $testitem 5]
+ set cflags [lindex $testitem 6]
+ set lang [lindex $testitem 7]
+ set warning [lindex $testitem 8]
+ set objfiles {}
+ set failed 0
+
+# verbose -log "Testname is $testname"
+# verbose -log "ld_options is $ld_options"
+# verbose -log "as_options is $as_options"
+# verbose -log "src_files is $src_files"
+# verbose -log "actions is $actions"
+# verbose -log "binfile is $binfile"
+
+ # Assemble each file in the test.
+ foreach src_file $src_files {
+ set objfile "tmpdir/[file rootname $src_file].o"
+ lappend objfiles $objfile
+
+ # We ignore warnings since some compilers may generate
+ # incorrect section attributes and the assembler will warn
+ # them.
+ if { [ string match "c++" $lang ] } {
+ ld_compile "$CXX -c $CXXFLAGS $cflags" $srcdir/$subdir/$src_file $objfile
+ } else {
+ ld_compile "$CC -c $CFLAGS $cflags" $srcdir/$subdir/$src_file $objfile
+ }
+
+ # We have to use $CC to build PIE and shared library.
+ if { [ string match "c" $lang ] } {
+ set link_proc ld_simple_link
+ set link_cmd $CC
+ } elseif { [ string match "c++" $lang ] } {
+ set link_proc ld_simple_link
+ set link_cmd $CXX
+ } elseif { [ string match "-shared" $ld_options ] \
+ || [ string match "-pie" $ld_options ] } {
+ set link_proc ld_simple_link
+ set link_cmd $CC
+ } else {
+ set link_proc ld_link
+ set link_cmd $ld
+ }
+
+ if ![$link_proc $link_cmd $binfile "-L$srcdir/$subdir $ld_options $objfiles"] {
+ set failed 1
+ } else {
+ set failed 0
+ }
+
+ # Check if exec_output is expected.
+ if { $warning != "" } then {
+ verbose -log "returned with: <$exec_output>, expected: <$warning>"
+ if { [regexp $warning $exec_output] } then {
+ set failed 0
+ } else {
+ set failed 1
+ }
+ }
+
+ if { $failed == 0 } {
+ send_log "Running: $binfile > $binfile.out\n"
+ verbose "Running: $binfile > $binfile.out"
+ catch "exec $binfile > $binfile.out" exec_output
+
+ if ![string match "" $exec_output] then {
+ send_log "$exec_output\n"
+ verbose "$exec_output" 1
+ set failed 1
+ } else {
+ send_log "diff $binfile.out $srcdir/$subdir/$expfile\n"
+ verbose "diff $binfile.out $srcdir/$subdir/$expfile"
+ catch "exec diff $binfile.out $srcdir/$subdir/$expfile" exec_output
+ set exec_output [prune_warnings $exec_output]
+
+ if ![string match "" $exec_output] then {
+ send_log "$exec_output\n"
+ verbose "$exec_output" 1
+ set failed 1
+ }
+ }
+ }
+
+ if { $failed != 0 } {
+ fail $testname
+ } else {
+ set errcnt 0
+ pass $testname
+ }
+ }
+ }
+}
+
+# List contains test-items with 3 items followed by 2 lists, one item and
+# one optional item:
+# 0:name
+# 1:ld or ar options
+# 2:compile options
+# 3:filenames of source files
+# 4:action and options.
+# 5:name of output file
+# 6:language (optional)
+#
+# Actions:
+# objdump: Apply objdump options on result. Compare with regex (last arg).
+# nm: Apply nm options on result. Compare with regex (last arg).
+# readelf: Apply readelf options on result. Compare with regex (last arg).
+#
+proc run_cc_link_tests { ldtests } {
+ global nm
+ global objdump
+ global READELF
+ global srcdir
+ global subdir
+ global env
+ global CC
+ global CXX
+ global CFLAGS
+ global CXXFLAGS
+ global ar
+
+ foreach testitem $ldtests {
+ set testname [lindex $testitem 0]
+ set ldflags [lindex $testitem 1]
+ set cflags [lindex $testitem 2]
+ set src_files [lindex $testitem 3]
+ set actions [lindex $testitem 4]
+ set binfile tmpdir/[lindex $testitem 5]
+ set lang [lindex $testitem 6]
+ set objfiles {}
+ set is_unresolved 0
+ set failed 0
+
+ # Compile each file in the test.
+ foreach src_file $src_files {
+ set objfile "tmpdir/[file rootname $src_file].o"
+ lappend objfiles $objfile
+
+ # We ignore warnings since some compilers may generate
+ # incorrect section attributes and the assembler will warn
+ # them.
+ if { [ string match "c++" $lang ] } {
+ ld_compile "$CXX -c $CXXFLAGS $cflags" $srcdir/$subdir/$src_file $objfile
+ } else {
+ ld_compile "$CC -c $CFLAGS $cflags" $srcdir/$subdir/$src_file $objfile
+ }
+ }
+
+ # Clear error and warning counts.
+ reset_vars
+
+ if { [ string match "c++" $lang ] } {
+ set cc_cmd $CXX
+ } else {
+ set cc_cmd $CC
+ }
+
+ if { [regexp ".*\\.a$" $binfile] } {
+ if { ![ar_simple_create $ar $ldflags $binfile "$objfiles"] } {
+ fail $testname
+ set failed 1
+ } else {
+ set failed 0
+ }
+ } elseif { ![ld_simple_link $cc_cmd $binfile "-L$srcdir/$subdir $ldflags $objfiles"] } {
+ fail $testname
+ set failed 1
+ } else {
+ set failed 0
+ }
+
+ if { $failed == 0 } {
+ foreach actionlist $actions {
+ set action [lindex $actionlist 0]
+ set progopts [lindex $actionlist 1]
+
+ # There are actions where we run regexp_diff on the
+ # output, and there are other actions (presumably).
+ # Handling of the former look the same.
+ set dump_prog ""
+ switch -- $action {
+ objdump
+ { set dump_prog $objdump }
+ nm
+ { set dump_prog $nm }
+ readelf
+ { set dump_prog $READELF }
+ default
+ {
+ perror "Unrecognized action $action"
+ set is_unresolved 1
+ break
+ }
+ }
+
+ if { $dump_prog != "" } {
+ set dumpfile [lindex $actionlist 2]
+ set binary $dump_prog
+
+ # Ensure consistent sorting of symbols
+ if {[info exists env(LC_ALL)]} {
+ set old_lc_all $env(LC_ALL)
+ }
+ set env(LC_ALL) "C"
+ set cmd "$binary $progopts $binfile > dump.out"
+ send_log "$cmd\n"
+ catch "exec $cmd" comp_output
+ if {[info exists old_lc_all]} {
+ set env(LC_ALL) $old_lc_all
+ } else {
+ unset env(LC_ALL)
+ }
+ set comp_output [prune_warnings $comp_output]
+
+ if ![string match "" $comp_output] then {
+ send_log "$comp_output\n"
+ set failed 1
+ break
+ }
+
+ if { [regexp_diff "dump.out" "$srcdir/$subdir/$dumpfile"] } then {
+ verbose "output is [file_contents "dump.out"]" 2
+ set failed 1
+ break
+ }
+ }
+ }
+
+ if { $failed != 0 } {
+ fail $testname
+ } else { if { $is_unresolved == 0 } {
+ pass $testname
+ } }
+ }
+
+ # Catch action errors.
+ if { $is_unresolved != 0 } {
+ unresolved $testname
+ continue
+ }
+ }
+}
+
+# Returns true if --gc-sections is supported on the target.
+
+proc check_gc_sections_available { } {
+ global gc_sections_available_saved
+ global ld
+
+ if {![info exists gc_sections_available_saved]} {
+ # Some targets don't support gc-sections despite whatever's
+ # advertised by ld's options.
+ if {[istarget arc-*-*]
+ || [istarget d30v-*-*]
+ || [istarget dlx-*-*]
+ || [istarget i960-*-*]
+ || [istarget or32-*-*]
+ || [istarget pj*-*-*]
+ || [istarget alpha-*-*]
+ || [istarget hppa64-*-*]
+ || [istarget i370-*-*]
+ || [istarget i860-*-*]
+ || [istarget ia64-*-*]
+ || [istarget mep-*-*]
+ || [istarget mn10200-*-*]
+ || [istarget *-*-cygwin]
+ || [istarget *-*-mingw*] } {
+ set gc_sections_available_saved 0
+ return 0
+ }
+
+ # elf2flt uses -q (--emit-relocs), which is incompatible with
+ # --gc-sections.
+ if { [board_info target exists ldflags]
+ && [regexp " -elf2flt\[ =\]" " [board_info target ldflags] "] } {
+ set gc_sections_available_saved 0
+ return 0
+ }
+
+ # Check if the ld used by gcc supports --gc-sections.
+ set ld_output [remote_exec host $ld "--help"]
+ if { [ string first "--gc-sections" $ld_output ] >= 0 } {
+ set gc_sections_available_saved 1
+ } else {
+ set gc_sections_available_saved 0
+ }
+ }
+ return $gc_sections_available_saved
+}
+
+# Returns true if the target ld supports the plugin API.
+proc check_plugin_api_available { } {
+ global plugin_api_available_saved
+ global ld
+ if {![info exists plugin_api_available_saved]} {
+ # Check if the ld used by gcc supports --plugin.
+ set ld_output [remote_exec host $ld "--help"]
+ if { [ string first "-plugin" $ld_output ] >= 0 } {
+ set plugin_api_available_saved 1
+ } else {
+ set plugin_api_available_saved 0
+ }
+ }
+ return $plugin_api_available_saved
+}
+
+# Check if the assembler supports CFI statements.
+
+proc check_as_cfi { } {
+ global check_as_cfi_result
+ global as
+ if [info exists check_as_cfi_result] {
+ return $check_as_cfi_result
+ }
+ set as_file "tmpdir/check_as_cfi.s"
+ set as_fh [open $as_file w 0666]
+ puts $as_fh "# Generated file. DO NOT EDIT"
+ puts $as_fh "\t.cfi_startproc"
+ puts $as_fh "\t.cfi_endproc"
+ close $as_fh
+ remote_download host $as_file
+ verbose -log "Checking CFI support:"
+ rename "perror" "check_as_cfi_perror"
+ proc perror { args } { }
+ set success [ld_assemble $as $as_file "/dev/null"]
+ rename "perror" ""
+ rename "check_as_cfi_perror" "perror"
+ #remote_file host delete $as_file
+ set check_as_cfi_result $success
+ return $success
+}
+
+# Provide virtual target "cfi" for targets supporting CFI.
+
+rename "istarget" "istarget_ld"
+proc istarget { target } {
+ if {$target == "cfi"} {
+ return [check_as_cfi]
+ }
+ return [istarget_ld $target]
+}